ZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vRE1BLUFQSS50eHQgYi9Eb2N1bWVudGF0aW9uL0RNQS1BUEkudHh0CmluZGV4IDJhM2ZjYzU1Li5kOWFhNDNkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RNQS1BUEkudHh0CisrKyBiL0RvY3VtZW50YXRpb24vRE1BLUFQSS50eHQKQEAgLTYwOSwzICs2MDksMTA5IEBACiBUaGUgcmV0dXJuIHZhbHVlIHdpbGwgYmUgZWl0aGVyIGEgcG9pbnRlciB0byB0aGUgcHJvY2Vzc29yIHZpcnR1YWwKIGFkZHJlc3Mgb2YgdGhlIG1lbW9yeSwgb3IgYW4gZXJyb3IgKHZpYSBQVFJfRVJSKCkpIGlmIGFueSBwYXJ0IG9mIHRoZQogcmVnaW9uIGlzIG9jY3VwaWVkLgorCitQYXJ0IElJSSAtIERlYnVnIGRyaXZlcnMgdXNlIG9mIHRoZSBETUEtQVBJCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisKK1RoZSBETUEtQVBJIGFzIGRlc2NyaWJlZCBhYm92ZSBhcyBzb21lIGNvbnN0cmFpbnRzLiBETUEgYWRkcmVzc2VzIG11c3QgYmUKK3JlbGVhc2VkIHdpdGggdGhlIGNvcnJlc3BvbmRpbmcgZnVuY3Rpb24gd2l0aCB0aGUgc2FtZSBzaXplIGZvciBleGFtcGxlLiBXaXRoCit0aGUgYWR2ZW50IG9mIGhhcmR3YXJlIElPTU1VcyBpdCBiZWNvbWVzIG1vcmUgYW5kIG1vcmUgaW1wb3J0YW50IHRoYXQgZHJpdmVycworZG8gbm90IHZpb2xhdGUgdGhvc2UgY29uc3RyYWludHMuIEluIHRoZSB3b3JzdCBjYXNlIHN1Y2ggYSB2aW9sYXRpb24gY2FuCityZXN1bHQgaW4gZGF0YSBjb3JydXB0aW9uIHVwIHRvIGRlc3Ryb3llZCBmaWxlc3lzdGVtcy4KKworVG8gZGVidWcgZHJpdmVycyBhbmQgZmluZCBidWdzIGluIHRoZSB1c2FnZSBvZiB0aGUgRE1BLUFQSSBjaGVja2luZyBjb2RlIGNhbgorYmUgY29tcGlsZWQgaW50byB0aGUga2VybmVsIHdoaWNoIHdpbGwgdGVsbCB0aGUgZGV2ZWxvcGVyIGFib3V0IHRob3NlCit2aW9sYXRpb25zLiBJZiB5b3VyIGFyY2hpdGVjdHVyZSBzdXBwb3J0cyBpdCB5b3UgY2FuIHNlbGVjdCB0aGUgIkVuYWJsZQorZGVidWdnaW5nIG9mIERNQS1BUEkgdXNhZ2UiIG9wdGlvbiBpbiB5b3VyIGtlcm5lbCBjb25maWd1cmF0aW9uLiBFbmFibGluZyB0aGlzCitvcHRpb24gaGFzIGEgcGVyZm9ybWFuY2UgaW1wYWN0LiBEbyBub3QgZW5hYmxlIGl0IGluIHByb2R1Y3Rpb24ga2VybmVscy4KKworSWYgeW91IGJvb3QgdGhlIHJlc3VsdGluZyBrZXJuZWwgd2lsbCBjb250YWluIGNvZGUgd2hpY2ggZG9lcyBzb21lIGJvb2trZWVwaW5nCithYm91dCB3aGF0IERNQSBtZW1vcnkgd2FzIGFsbG9jYXRlZCBmb3Igd2hpY2ggZGV2aWNlLiBJZiB0aGlzIGNvZGUgZGV0ZWN0cyBhbgorZXJyb3IgaXQgcHJpbnRzIGEgd2FybmluZyBtZXNzYWdlIHdpdGggc29tZSBkZXRhaWxzIGludG8geW91ciBrZXJuZWwgbG9nLiBBbgorZXhhbXBsZSB3YXJuaW5nIG1lc3NhZ2UgbWF5IGxvb2sgbGlrZSB0aGlzOgorCistLS0tLS0tLS0tLS1bIGN1dCBoZXJlIF0tLS0tLS0tLS0tLS0KK1dBUk5JTkc6IGF0IC9kYXRhMi9yZXBvcy9saW51eC0yLjYtaW9tbXUvbGliL2RtYS1kZWJ1Zy5jOjQ0OAorCWNoZWNrX3VubWFwKzB4MjAzLzB4NDkwKCkKK0hhcmR3YXJlIG5hbWU6Citmb3JjZWRldGggMDAwMDowMDowOC4wOiBETUEtQVBJOiBkZXZpY2UgZHJpdmVyIGZyZWVzIERNQSBtZW1vcnkgd2l0aCB3cm9uZworCWZ1bmN0aW9uIFtkZXZpY2UgYWRkcmVzcz0weDAwMDAwMDAwNjQwNDQ0YmVdIFtzaXplPTY2IGJ5dGVzXSBbbWFwcGVkIGFzCitzaW5nbGVdIFt1bm1hcHBlZCBhcyBwYWdlXQorTW9kdWxlcyBsaW5rZWQgaW46IG5mc2QgZXhwb3J0ZnMgYnJpZGdlIHN0cCBsbGMgcjgxNjkKK1BpZDogMCwgY29tbTogc3dhcHBlciBUYWludGVkOiBHICAgICAgICBXICAyLjYuMjgtZG1hdGVzdC0wOTI4OS1nOGJiOTljMCAjMQorQ2FsbCBUcmFjZToKKyA8SVJRPiAgWzxmZmZmZmZmZjgwMjQwYjIyPl0gd2Fybl9zbG93cGF0aCsweGYyLzB4MTMwCisgWzxmZmZmZmZmZjgwNjQ3YjcwPl0gX3NwaW5fdW5sb2NrKzB4MTAvMHgzMAorIFs8ZmZmZmZmZmY4MDUzN2U3NT5dIHVzYl9oY2RfbGlua191cmJfdG9fZXArMHg3NS8weGMwCisgWzxmZmZmZmZmZjgwNjQ3YzIyPl0gX3NwaW5fdW5sb2NrX2lycXJlc3RvcmUrMHgxMi8weDQwCisgWzxmZmZmZmZmZjgwNTUzNDdmPl0gb2hjaV91cmJfZW5xdWV1ZSsweDE5Zi8weDdjMAorIFs8ZmZmZmZmZmY4MDI1MmY5Nj5dIHF1ZXVlX3dvcmsrMHg1Ni8weDYwCisgWzxmZmZmZmZmZjgwMjM3ZTEwPl0gZW5xdWV1ZV90YXNrX2ZhaXIrMHgyMC8weDUwCisgWzxmZmZmZmZmZjgwNTM5Mjc5Pl0gdXNiX2hjZF9zdWJtaXRfdXJiKzB4Mzc5LzB4YmMwCisgWzxmZmZmZmZmZjgwM2I3OGMzPl0gY3B1bWFza19uZXh0X2FuZCsweDIzLzB4NDAKKyBbPGZmZmZmZmZmODAyMzUxNzc+XSBmaW5kX2J1c2llc3RfZ3JvdXArMHgyMDcvMHg4YTAKKyBbPGZmZmZmZmZmODA2NDc4NGY+XSBfc3Bpbl9sb2NrX2lycXNhdmUrMHgxZi8weDUwCisgWzxmZmZmZmZmZjgwM2M3ZWEzPl0gY2hlY2tfdW5tYXArMHgyMDMvMHg0OTAKKyBbPGZmZmZmZmZmODAzYzgyNTk+XSBkZWJ1Z19kbWFfdW5tYXBfcGFnZSsweDQ5LzB4NTAKKyBbPGZmZmZmZmZmODA0ODVmMjY+XSBudl90eF9kb25lX29wdGltaXplZCsweGM2LzB4MmMwCisgWzxmZmZmZmZmZjgwNDg2YzEzPl0gbnZfbmljX2lycV9vcHRpbWl6ZWQrMHg3My8weDJiMAorIFs8ZmZmZmZmZmY4MDI2ZGY4ND5dIGhhbmRsZV9JUlFfZXZlbnQrMHgzNC8weDcwCisgWzxmZmZmZmZmZjgwMjZmZmU5Pl0gaGFuZGxlX2VkZ2VfaXJxKzB4YzkvMHgxNTAKKyBbPGZmZmZmZmZmODAyMGUzYWI+XSBkb19JUlErMHhjYi8weDFjMAorIFs8ZmZmZmZmZmY4MDIwYzA5Mz5dIHJldF9mcm9tX2ludHIrMHgwLzB4YQorIDxFT0k+IDw0Pi0tLVsgZW5kIHRyYWNlIGY2NDM1YTk4ZTJhMzhjMGUgXS0tLQorCitUaGUgZHJpdmVyIGRldmVsb3BlciBjYW4gZmluZCB0aGUgZHJpdmVyIGFuZCB0aGUgZGV2aWNlIGluY2x1ZGluZyBhIHN0YWNrdHJhY2UKK29mIHRoZSBETUEtQVBJIGNhbGwgd2hpY2ggY2F1c2VkIHRoaXMgd2FybmluZy4KKworUGVyIGRlZmF1bHQgb25seSB0aGUgZmlyc3QgZXJyb3Igd2lsbCByZXN1bHQgaW4gYSB3YXJuaW5nIG1lc3NhZ2UuIEFsbCBvdGhlcgorZXJyb3JzIHdpbGwgb25seSBzaWxlbnRseSBjb3VudGVkLiBUaGlzIGxpbWl0YXRpb24gZXhpc3QgdG8gcHJldmVudCB0aGUgY29kZQorZnJvbSBmbG9vZGluZyB5b3VyIGtlcm5lbCBsb2cuIFRvIHN1cHBvcnQgZGVidWdnaW5nIGEgZGV2aWNlIGRyaXZlciB0aGlzIGNhbgorYmUgZGlzYWJsZWQgdmlhIGRlYnVnZnMuIFNlZSB0aGUgZGVidWdmcyBpbnRlcmZhY2UgZG9jdW1lbnRhdGlvbiBiZWxvdyBmb3IKK2RldGFpbHMuCisKK1RoZSBkZWJ1Z2ZzIGRpcmVjdG9yeSBmb3IgdGhlIERNQS1BUEkgZGVidWdnaW5nIGNvZGUgaXMgY2FsbGVkIGRtYS1hcGkvLiBJbgordGhpcyBkaXJlY3RvcnkgdGhlIGZvbGxvd2luZyBmaWxlcyBjYW4gY3VycmVudGx5IGJlIGZvdW5kOgorCisJZG1hLWFwaS9hbGxfZXJyb3JzCVRoaXMgZmlsZSBjb250YWlucyBhIG51bWVyaWMgdmFsdWUuIElmIHRoaXMKKwkJCQl2YWx1ZSBpcyBub3QgZXF1YWwgdG8gemVybyB0aGUgZGVidWdnaW5nIGNvZGUKKwkJCQl3aWxsIHByaW50IGEgd2FybmluZyBmb3IgZXZlcnkgZXJyb3IgaXQgZmluZHMKKwkJCQlpbnRvIHRoZSBrZXJuZWwgbG9nLiBCZSBjYXJlZnVsbCB3aXRoIHRoaXMKKwkJCQlvcHRpb24uIEl0IGNhbiBlYXNpbHkgZmxvb2QgeW91ciBsb2dzLgorCisJZG1hLWFwaS9kaXNhYmxlZAlUaGlzIHJlYWQtb25seSBmaWxlIGNvbnRhaW5zIHRoZSBjaGFyYWN0ZXIgJ1knCisJCQkJaWYgdGhlIGRlYnVnZ2luZyBjb2RlIGlzIGRpc2FibGVkLiBUaGlzIGNhbgorCQkJCWhhcHBlbiB3aGVuIGl0IHJ1bnMgb3V0IG9mIG1lbW9yeSBvciBpZiBpdCB3YXMKKwkJCQlkaXNhYmxlZCBhdCBib290IHRpbWUKKworCWRtYS1hcGkvZXJyb3JfY291bnQJVGhpcyBmaWxlIGlzIHJlYWQtb25seSBhbmQgc2hvd3MgdGhlIHRvdGFsCisJCQkJbnVtYmVycyBvZiBlcnJvcnMgZm91bmQuCisKKwlkbWEtYXBpL251bV9lcnJvcnMJVGhlIG51bWJlciBpbiB0aGlzIGZpbGUgc2hvd3MgaG93IG1hbnkKKwkJCQl3YXJuaW5ncyB3aWxsIGJlIHByaW50ZWQgdG8gdGhlIGtlcm5lbCBsb2cKKwkJCQliZWZvcmUgaXQgc3RvcHMuIFRoaXMgbnVtYmVyIGlzIGluaXRpYWxpemVkIHRvCisJCQkJb25lIGF0IHN5c3RlbSBib290IGFuZCBiZSBzZXQgYnkgd3JpdGluZyBpbnRvCisJCQkJdGhpcyBmaWxlCisKKwlkbWEtYXBpL21pbl9mcmVlX2VudHJpZXMKKwkJCQlUaGlzIHJlYWQtb25seSBmaWxlIGNhbiBiZSByZWFkIHRvIGdldCB0aGUKKwkJCQltaW5pbXVtIG51bWJlciBvZiBmcmVlIGRtYV9kZWJ1Z19lbnRyaWVzIHRoZQorCQkJCWFsbG9jYXRvciBoYXMgZXZlciBzZWVuLiBJZiB0aGlzIHZhbHVlIGdvZXMKKwkJCQlkb3duIHRvIHplcm8gdGhlIGNvZGUgd2lsbCBkaXNhYmxlIGl0c2VsZgorCQkJCWJlY2F1c2UgaXQgaXMgbm90IGxvbmdlciByZWxpYWJsZS4KKworCWRtYS1hcGkvbnVtX2ZyZWVfZW50cmllcworCQkJCVRoZSBjdXJyZW50IG51bWJlciBvZiBmcmVlIGRtYV9kZWJ1Z19lbnRyaWVzCisJCQkJaW4gdGhlIGFsbG9jYXRvci4KKworSWYgeW91IGhhdmUgdGhpcyBjb2RlIGNvbXBpbGVkIGludG8geW91ciBrZXJuZWwgaXQgd2lsbCBiZSBlbmFibGVkIGJ5IGRlZmF1bHQuCitJZiB5b3Ugd2FudCB0byBib290IHdpdGhvdXQgdGhlIGJvb2trZWVwaW5nIGFueXdheSB5b3UgY2FuIHByb3ZpZGUKKydkbWFfZGVidWc9b2ZmJyBhcyBhIGJvb3QgcGFyYW1ldGVyLiBUaGlzIHdpbGwgZGlzYWJsZSBETUEtQVBJIGRlYnVnZ2luZy4KK05vdGljZSB0aGF0IHlvdSBjYW4gbm90IGVuYWJsZSBpdCBhZ2FpbiBhdCBydW50aW1lLiBZb3UgaGF2ZSB0byByZWJvb3QgdG8gZG8KK3NvLgorCitXaGVuIHRoZSBjb2RlIGRpc2FibGVzIGl0c2VsZiBhdCBydW50aW1lIHRoaXMgaXMgbW9zdCBsaWtlbHkgYmVjYXVzZSBpdCByYW4KK291dCBvZiBkbWFfZGVidWdfZW50cmllcy4gVGhlc2UgZW50cmllcyBhcmUgcHJlYWxsb2NhdGVkIGF0IGJvb3QuIFRoZSBudW1iZXIKK29mIHByZWFsbG9jYXRlZCBlbnRyaWVzIGlzIGRlZmluZWQgcGVyIGFyY2hpdGVjdHVyZS4gSWYgaXQgaXMgdG9vIGxvdyBmb3IgeW91Citib290IHdpdGggJ2RtYV9kZWJ1Z19lbnRyaWVzPTx5b3VyX2Rlc2lyZWRfbnVtYmVyPicgdG8gb3ZlcndyaXRlIHRoZQorYXJjaGl0ZWN0dXJhbCBkZWZhdWx0LgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9Eb2NCb29rL3Byb2Nmc19leGFtcGxlLmMgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svcHJvY2ZzX2V4YW1wbGUuYwppbmRleCA4YzYzOTZlLi5hNWIxMTc5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svcHJvY2ZzX2V4YW1wbGUuYworKysgYi9Eb2N1bWVudGF0aW9uL0RvY0Jvb2svcHJvY2ZzX2V4YW1wbGUuYwpAQCAtMTE3LDkgKzExNyw2IEBACiAJCXJ2ID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiAJfQotCQotCWV4YW1wbGVfZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwotCQogCS8qIGNyZWF0ZSBqaWZmaWVzIHVzaW5nIGNvbnZlbmllbmNlIGZ1bmN0aW9uICovCiAJamlmZmllc19maWxlID0gY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgiamlmZmllcyIsIAogCQkJCQkgICAgICAwNDQ0LCBleGFtcGxlX2RpciwgCkBAIC0xMzAsOCArMTI3LDYgQEAKIAkJZ290byBub19qaWZmaWVzOwogCX0KIAotCWppZmZpZXNfZmlsZS0+b3duZXIgPSBUSElTX01PRFVMRTsKLQogCS8qIGNyZWF0ZSBmb28gYW5kIGJhciBmaWxlcyB1c2luZyBzYW1lIGNhbGxiYWNrCiAJICogZnVuY3Rpb25zIAogCSAqLwpAQCAtMTQ2LDcgKzE0MSw2IEBACiAJZm9vX2ZpbGUtPmRhdGEgPSAmZm9vX2RhdGE7CiAJZm9vX2ZpbGUtPnJlYWRfcHJvYyA9IHByb2NfcmVhZF9mb29iYXI7CiAJZm9vX2ZpbGUtPndyaXRlX3Byb2MgPSBwcm9jX3dyaXRlX2Zvb2JhcjsKLQlmb29fZmlsZS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAkJCiAJYmFyX2ZpbGUgPSBjcmVhdGVfcHJvY19lbnRyeSgiYmFyIiwgMDY0NCwgZXhhbXBsZV9kaXIpOwogCWlmKGJhcl9maWxlID09IE5VTEwpIHsKQEAgLTE1OSw3ICsxNTMsNiBAQAogCWJhcl9maWxlLT5kYXRhID0gJmJhcl9kYXRhOwogCWJhcl9maWxlLT5yZWFkX3Byb2MgPSBwcm9jX3JlYWRfZm9vYmFyOwogCWJhcl9maWxlLT53cml0ZV9wcm9jID0gcHJvY193cml0ZV9mb29iYXI7Ci0JYmFyX2ZpbGUtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJCQogCS8qIGNyZWF0ZSBzeW1saW5rICovCiAJc3ltbGluayA9IHByb2Nfc3ltbGluaygiamlmZmllc190b28iLCBleGFtcGxlX2RpciwgCkBAIC0xNjksOCArMTYyLDYgQEAKIAkJZ290byBub19zeW1saW5rOwogCX0KIAotCXN5bWxpbmstPm93bmVyID0gVEhJU19NT0RVTEU7Ci0KIAkvKiBldmVyeXRoaW5nIE9LICovCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJXMgaW5pdGlhbGlzZWRcbiIsCiAJICAgICAgIE1PRFVMRV9OQU1FLCBNT0RVTEVfVkVSUyk7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlIGIvRG9jdW1lbnRhdGlvbi9kdmIvZ2V0X2R2Yl9maXJtd2FyZQppbmRleCBmMmU5MDhkLi4yZjIxZWNkIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2R2Yi9nZXRfZHZiX2Zpcm13YXJlCisrKyBiL0RvY3VtZW50YXRpb24vZHZiL2dldF9kdmJfZmlybXdhcmUKQEAgLTI1LDcgKzI1LDcgQEAKIAkJInRkYTEwMDQ2bGlmZXZpZXciLCAiYXY3MTEwIiwgImRlYzIwMDB0IiwgImRlYzI1NDB0IiwKIAkJImRlYzMwMDBzIiwgInZwNzA0MSIsICJkaWJ1c2IiLCAibnh0MjAwMiIsICJueHQyMDA0IiwKIAkJIm9yNTEyMTEiLCAib3I1MTEzMl9xYW0iLCAib3I1MTEzMl92c2IiLCAiYmx1ZWJpcmQiLAotCQkib3BlcmExIik7CisJCSJvcGVyYTEiLCAiY3gyMzF4eCIsICJjeDE4IiwgImN4MjM4ODUiLCAicHZydXNiMiIgKTsKIAogIyBDaGVjayBhcmdzCiBzeW50YXgoKSBpZiAoc2NhbGFyKEBBUkdWKSAhPSAxKTsKQEAgLTM3LDggKzM3LDggQEAKIAkkb3V0ZmlsZSA9IGV2YWwoJGNpZCk7CiAJZGllICRAIGlmICRAOwogCXByaW50IFNUREVSUiA8PEVPRjsKLUZpcm13YXJlICRvdXRmaWxlIGV4dHJhY3RlZCBzdWNjZXNzZnVsbHkuCi1Ob3cgY29weSBpdCB0byBlaXRoZXIgL3Vzci9saWIvaG90cGx1Zy9maXJtd2FyZSBvciAvbGliL2Zpcm13YXJlCitGaXJtd2FyZShzKSAkb3V0ZmlsZSBleHRyYWN0ZWQgc3VjY2Vzc2Z1bGx5LgorTm93IGNvcHkgaXQodGhleSkgdG8gZWl0aGVyIC91c3IvbGliL2hvdHBsdWcvZmlybXdhcmUgb3IgL2xpYi9maXJtd2FyZQogKGRlcGVuZGluZyBvbiBjb25maWd1cmF0aW9uIG9mIGZpcm13YXJlIGhvdHBsdWcpLgogRU9GCiAJZXhpdCgwKTsKQEAgLTM0NSw2ICszNDUsODUgQEAKICAgICAkZndmaWxlOwogfQogCitzdWIgY3gyMzF4eCB7CisgICAgbXkgJGZ3ZmlsZSA9ICJ2NGwtY3gyMzF4eC1hdmNvcmUtMDEuZnciOworICAgIG15ICR1cmwgPSAiaHR0cDovL2xpbnV4dHYub3JnL2Rvd25sb2Fkcy9maXJtd2FyZS8kZndmaWxlIjsKKyAgICBteSAkaGFzaCA9ICI3ZDNiYjk1NmRjOWRmMGVhZmRlZDJiNTZiYTU3Y2M0MiI7CisKKyAgICBjaGVja3N0YW5kYXJkKCk7CisKKyAgICB3Z2V0ZmlsZSgkZndmaWxlLCAkdXJsKTsKKyAgICB2ZXJpZnkoJGZ3ZmlsZSwgJGhhc2gpOworCisgICAgJGZ3ZmlsZTsKK30KKworc3ViIGN4MTggeworICAgIG15ICR1cmwgPSAiaHR0cDovL2xpbnV4dHYub3JnL2Rvd25sb2Fkcy9maXJtd2FyZS8iOworCisgICAgbXkgJWZpbGVzID0gKAorCSd2NGwtY3gyMzQxOC1hcHUuZncnID0+ICc1ODhmMDgxYjU2MmY1YzY1M2EzZGIxYWQ4ZjY1OTM5YScsCisJJ3Y0bC1jeDIzNDE4LWNwdS5mdycgPT4gJ2I2YzdlZDY0YmM0NGIxYTZlMDg0MGFkYWVhYzM5ZDc5JywKKwkndjRsLWN4MjM0MTgtZGlnLmZ3JyA9PiAnOTViYzY4OGQzZTc1OTlmZDU4MDAxNjFlOTk3MWNjNTUnLAorICAgICk7CisKKyAgICBjaGVja3N0YW5kYXJkKCk7CisKKyAgICBteSAkYWxsZmlsZXM7CisgICAgZm9yZWFjaCBteSAkZndmaWxlIChrZXlzICVmaWxlcykgeworCXdnZXRmaWxlKCRmd2ZpbGUsICIkdXJsLyRmd2ZpbGUiKTsKKwl2ZXJpZnkoJGZ3ZmlsZSwgJGZpbGVzeyRmd2ZpbGV9KTsKKwkkYWxsZmlsZXMgLj0gIiAkZndmaWxlIjsKKyAgICB9CisKKyAgICAkYWxsZmlsZXMgPX4gcy9eXHMvLzsKKworICAgICRhbGxmaWxlczsKK30KKworc3ViIGN4MjM4ODUgeworICAgIG15ICR1cmwgPSAiaHR0cDovL2xpbnV4dHYub3JnL2Rvd25sb2Fkcy9maXJtd2FyZS8iOworCisgICAgbXkgJWZpbGVzID0gKAorCSd2NGwtY3gyMzg4NS1hdmNvcmUtMDEuZncnID0+ICdhOWY4ZjVkOTAxYTdmYjQyZjU1MmUxZWU2Mzg0ZjNiYicsCisJJ3Y0bC1jeDIzODg1LWVuYy5mdycgICAgICAgPT4gJ2E5ZjhmNWQ5MDFhN2ZiNDJmNTUyZTFlZTYzODRmM2JiJywKKyAgICApOworCisgICAgY2hlY2tzdGFuZGFyZCgpOworCisgICAgbXkgJGFsbGZpbGVzOworICAgIGZvcmVhY2ggbXkgJGZ3ZmlsZSAoa2V5cyAlZmlsZXMpIHsKKwl3Z2V0ZmlsZSgkZndmaWxlLCAiJHVybC8kZndmaWxlIik7CisJdmVyaWZ5KCRmd2ZpbGUsICRmaWxlc3skZndmaWxlfSk7CisJJGFsbGZpbGVzIC49ICIgJGZ3ZmlsZSI7CisgICAgfQorCisgICAgJGFsbGZpbGVzID1+IHMvXlxzLy87CisKKyAgICAkYWxsZmlsZXM7Cit9CisKK3N1YiBwdnJ1c2IyIHsKKyAgICBteSAkdXJsID0gImh0dHA6Ly9saW51eHR2Lm9yZy9kb3dubG9hZHMvZmlybXdhcmUvIjsKKworICAgIG15ICVmaWxlcyA9ICgKKwkndjRsLWN4MjU4NDAuZncnICAgICAgICAgICA9PiAnZGFkYjc5ZTk5MDRmYzhhZjk2ZTgxMTFkOWNiNTkzMjAnLAorICAgICk7CisKKyAgICBjaGVja3N0YW5kYXJkKCk7CisKKyAgICBteSAkYWxsZmlsZXM7CisgICAgZm9yZWFjaCBteSAkZndmaWxlIChrZXlzICVmaWxlcykgeworCXdnZXRmaWxlKCRmd2ZpbGUsICIkdXJsLyRmd2ZpbGUiKTsKKwl2ZXJpZnkoJGZ3ZmlsZSwgJGZpbGVzeyRmd2ZpbGV9KTsKKwkkYWxsZmlsZXMgLj0gIiAkZndmaWxlIjsKKyAgICB9CisKKyAgICAkYWxsZmlsZXMgPX4gcy9eXHMvLzsKKworICAgICRhbGxmaWxlczsKK30KKwogc3ViIG9yNTExMzJfcWFtIHsKICAgICBteSAkZndmaWxlID0gImR2Yi1mZS1vcjUxMTMyLXFhbS5mdyI7CiAgICAgbXkgJHVybCA9ICJodHRwOi8vbGludXh0di5vcmcvZG93bmxvYWRzL2Zpcm13YXJlLyRmd2ZpbGUiOwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0IGIvRG9jdW1lbnRhdGlvbi9mZWF0dXJlLXJlbW92YWwtc2NoZWR1bGUudHh0CmluZGV4IDExMzU5OTYuLjVlMDJiODMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vZmVhdHVyZS1yZW1vdmFsLXNjaGVkdWxlLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2ZlYXR1cmUtcmVtb3ZhbC1zY2hlZHVsZS50eHQKQEAgLTY0LDEwICs2NCwxMCBAQAogCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAotV2hhdDoJVmlkZW80TGludXggQVBJIDEgaW9jdGxzIGFuZCB2aWRlb19kZWNvZGVyLmggZnJvbSBWaWRlbyBkZXZpY2VzLgotV2hlbjoJRGVjZW1iZXIgMjAwOAotRmlsZXM6CWluY2x1ZGUvbGludXgvdmlkZW9fZGVjb2Rlci5oIGluY2x1ZGUvbGludXgvdmlkZW9kZXYuaAotQ2hlY2s6CWluY2x1ZGUvbGludXgvdmlkZW9fZGVjb2Rlci5oIGluY2x1ZGUvbGludXgvdmlkZW9kZXYuaAorV2hhdDoJVmlkZW80TGludXggQVBJIDEgaW9jdGxzIGFuZCBmcm9tIFZpZGVvIGRldmljZXMuCitXaGVuOglKdWx5IDIwMDkKK0ZpbGVzOglpbmNsdWRlL2xpbnV4L3ZpZGVvZGV2LmgKK0NoZWNrOglpbmNsdWRlL2xpbnV4L3ZpZGVvZGV2LmgKIFdoeToJVjRMMSBBUDEgd2FzIHJlcGxhY2VkIGJ5IFY0TDIgQVBJIGR1cmluZyBtaWdyYXRpb24gZnJvbSAyLjQgdG8gMi42CiAJc2VyaWVzLiBUaGUgb2xkIEFQSSBoYXZlIGxvdHMgb2YgZHJhd2JhY2tzIGFuZCBkb24ndCBwcm92aWRlIGVub3VnaAogCW1lYW5zIHRvIHdvcmsgd2l0aCBhbGwgdmlkZW8gYW5kIGF1ZGlvIHN0YW5kYXJkcy4gVGhlIG5ld2VyIEFQSSBpcwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9kczE2MjEgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2RzMTYyMQppbmRleCAxZmVlNmYxLi41ZTk3ZjMzIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL2RzMTYyMQorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2RzMTYyMQpAQCAtNDksMTIgKzQ5LDkgQEAKIHJlYWRpbmdzLiBCZSBzdXJlIHRvIGhhdmUgYSBoaWdoIHZzLiBsb3cgdGVtcGVyYXR1cmUgbGltaXQgZ2FwIG9mIGFsIGxlYXN0CiAxLjAgZGVncmVlIENlbHNpdXMgdG8gYXZvaWQgVG91dCAiYm91bmNpbmciLCB0aG91Z2ghCiAKLUFzIGZvciBhbGFybXMsIHlvdSBjYW4gcmVhZCB0aGUgYWxhcm0gc3RhdHVzIG9mIHRoZSBEUzE2MjEgdmlhIHRoZSAnYWxhcm1zJwotL3N5cyBmaWxlIGludGVyZmFjZS4gVGhlIHJlc3VsdCBjb25zaXN0cyBtYWlubHkgb2YgYml0IDYgYW5kIDUgb2YgdGhlCi1jb25maWd1cmF0aW9uIHJlZ2lzdGVyIG9mIHRoZSBjaGlwOyBiaXQgNiAoMHg0MCBvciA2NCkgaXMgdGhlIGhpZ2ggYWxhcm0KLWJpdCBhbmQgYml0IDUgKDB4MjAgb3IgMzIpIHRoZSBsb3cgb25lLiBUaGVzZSBiaXRzIGFyZSBzZXQgd2hlbiB0aGUgaGlnaCBvcgotbG93IGxpbWl0cyBhcmUgbWV0IG9yIGV4Y2VlZGVkIGFuZCBhcmUgcmVzZXQgYnkgdGhlIG1vZHVsZSBhcyBzb29uIGFzIHRoZQotcmVzcGVjdGl2ZSB0ZW1wZXJhdHVyZSByYW5nZXMgYXJlIGxlZnQuCitUaGUgYWxhcm0gYml0cyBhcmUgc2V0IHdoZW4gdGhlIGhpZ2ggb3IgbG93IGxpbWl0cyBhcmUgbWV0IG9yIGV4Y2VlZGVkIGFuZAorYXJlIHJlc2V0IGJ5IHRoZSBtb2R1bGUgYXMgc29vbiBhcyB0aGUgcmVzcGVjdGl2ZSB0ZW1wZXJhdHVyZSByYW5nZXMgYXJlCitsZWZ0LgogCiBUaGUgYWxhcm0gcmVnaXN0ZXJzIGFyZSBpbiBubyB3YXkgc3VpdGFibGUgdG8gZmluZCBvdXQgYWJvdXQgdGhlIGFjdHVhbAogc3RhdHVzIG9mIFRvdXQuIFRoZXkgd2lsbCBvbmx5IHRlbGwgeW91IGFib3V0IGl0cyBoaXN0b3J5LCB3aGV0aGVyIG9yIG5vdApAQCAtNjQsNDUgKzYxLDMgQEAKIAogVGVtcGVyYXR1cmUgY29udmVyc2lvbiBvZiB0aGUgRFMxNjIxIHRha2VzIHVwIHRvIDEwMDBtczsgaW50ZXJuYWwgYWNjZXNzIHRvCiBub24tdm9sYXRpbGUgcmVnaXN0ZXJzIG1heSBsYXN0IGZvciAxMG1zIG9yIGJlbG93LgotCi1IaWdoIEFjY3VyYWN5IFRlbXBlcmF0dXJlIFJlYWRpbmcKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCi1BcyBzYWlkIGJlZm9yZSwgdGhlIHRlbXBlcmF0dXJlIGlzc3VlZCB2aWEgdGhlIDktYml0IGkyYy1idXMgZGF0YSBpcwotc29tZXdoYXQgYXJiaXRyYXJ5LiBJbnRlcm5hbGx5LCB0aGUgdGVtcGVyYXR1cmUgY29udmVyc2lvbiBpcyBvZiBhCi1kaWZmZXJlbnQga2luZCB0aGF0IGlzIGV4cGxhaW5lZCAobm90IHNvLi4uKSB3ZWxsIGluIHRoZSBEUzE2MjEgZGF0YSBzaGVldC4KLVRvIGN1dCB0aGUgbG9uZyBzdG9yeSBzaG9ydDogSW5zaWRlIHRoZSBEUzE2MjEgdGhlcmUgYXJlIHR3byBvc2NpbGxhdG9ycywKLWJvdGggb2YgdGhlbSBiaWFzc2VkIGJ5IGEgdGVtcGVyYXR1cmUgY29lZmZpY2llbnQuCi0KLUhpZ2hlciByZXNvbHV0aW9uIG9mIHRoZSB0ZW1wZXJhdHVyZSByZWFkaW5nIGNhbiBiZSBhY2hpZXZlZCB1c2luZyB0aGUKLWludGVybmFsIHByb2plY3Rpb24sIHdoaWNoIG1lYW5zIHRha2luZyBhY2NvdW50IG9mIFJFR19DT1VOVCBhbmQgUkVHX1NMT1BFCi0odGhlIGRyaXZlciBtYW5hZ2VzIHRoZW0pOgotCi1UYWtlbiBmcm9tIERhbGxhcyBTZW1pY29uZHVjdG9ycyBBcHAgTm90ZSAwNjg6ICdJbmNyZWFzaW5nIFRlbXBlcmF0dXJlCi1SZXNvbHV0aW9uIG9uIHRoZSBEUzE2MjAnIGFuZCBBcHAgTm90ZSAxMDU6ICdIaWdoIFJlc29sdXRpb24gVGVtcGVyYXR1cmUKLU1lYXN1cmVtZW50IHdpdGggRGFsbGFzIERpcmVjdC10by1EaWdpdGFsIFRlbXBlcmF0dXJlIFNlbnNvcnMnCi0KLS0gUmVhZCB0aGUgOS1iaXQgdGVtcGVyYXR1cmUgYW5kIHN0cmlwIHRoZSBMU0IgKFRydW5jYXRlIHRoZSAuNSBkZWdzKQotLSBUaGUgcmVzdWx0aW5nIHZhbHVlIGlzIFRFTVBfUkVBRC4KLS0gVGhlbiwgcmVhZCBSRUdfQ09VTlQuCi0tIEFuZCB0aGVuLCBSRUdfU0xPUEUuCi0KLSAgICAgIFRFTVAgPSBURU1QX1JFQUQgLSAwLjI1ICsgKChSRUdfU0xPUEUgLSBSRUdfQ09VTlQpIC8gUkVHX1NMT1BFKQotCi1Ob3RlIHRoYXQgdGhpcyBpcyB3aGF0IHRoZSBET05FIGJpdCBpbiB0aGUgRFMxNjIxIGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgaXMKLWdvb2QgZm9yOiBJbnRlcm5hbGx5LCBvbmUgdGVtcGVyYXR1cmUgY29udmVyc2lvbiB0YWtlcyB1cCB0byAxMDAwbXMuIEJlZm9yZQotdGhhdCBjb252ZXJzaW9uIGlzIGNvbXBsZXRlIHlvdSB3aWxsIG5vdCBiZSBhYmxlIHRvIHJlYWQgdmFsaWQgdGhpbmdzIG91dAotb2YgUkVHX0NPVU5UIGFuZCBSRUdfU0xPUEUuIFRoZSBET05FIGJpdCwgYXMgeW91IG1heSBoYXZlIGd1ZXNzZWQgYnkgbm93LAotdGVsbHMgeW91IHdoZXRoZXIgdGhlIGNvbnZlcnNpb24gaXMgY29tcGxldGUgKCJkb25lIiwgaW4gcGxhaW4gRW5nbGlzaCkgYW5kCi10aHVzLCB3aGV0aGVyIHRoZSB2YWx1ZXMgeW91IHJlYWQgYXJlIGdvb2Qgb3Igbm90LgotCi1UaGUgRFMxNjIxIGhhcyB0d28gbW9kZXMgb2Ygb3BlcmF0aW9uOiAiQ29udGludW91cyIgY29udmVyc2lvbiwgd2hpY2ggY2FuCi1iZSB1bmRlcnN0b29kIGFzIHRoZSBkZWZhdWx0IHN0YW5kLWFsb25lIG1vZGUgd2hlcmUgdGhlIGNoaXAgZ2V0cyB0aGUKLXRlbXBlcmF0dXJlIGFuZCBjb250cm9scyBleHRlcm5hbCBkZXZpY2VzIHZpYSBpdHMgVG91dCBwaW4gb3IgdGVsbHMgb3RoZXIKLWkyYydzIGFib3V0IGl0IGlmIHRoZXkgY2FyZS4gVGhlIG90aGVyIG1vZGUgaXMgY2FsbGVkICIxU0hPVCIsIHRoYXQgbWVhbnMKLXRoYXQgaXQgb25seSBmaWd1cmVzIG91dCBhYm91dCB0aGUgdGVtcGVyYXR1cmUgd2hlbiBpdCBpcyBleHBsaWNpdGx5IHRvbGQKLXRvIGRvIHNvOyB0aGlzIGNhbiBiZSBzZWVuIGFzIHBvd2VyIHNhdmluZyBtb2RlLgotCi1Ob3cgaWYgeW91IHdhbnQgdG8gcmVhZCBSRUdfQ09VTlQgYW5kIFJFR19TTE9QRSwgeW91IGhhdmUgdG8gZWl0aGVyIHN0b3AKLXRoZSBjb250aW51b3VzIGNvbnZlcnNpb25zIHVudGlsIHRoZSBjb250ZW50cyBvZiB0aGVzZSByZWdpc3RlcnMgYXJlIHZhbGlkLAotb3IsIGluIDFTSE9UIG1vZGUsIHlvdSBoYXZlIHRvIGhhdmUgb25lIGNvbnZlcnNpb24gbWFkZS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaTJjL2NoaXBzL3BjZjg1OTEgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3BjZjg1OTEKc2ltaWxhcml0eSBpbmRleCAxMDAlCnJlbmFtZSBmcm9tIERvY3VtZW50YXRpb24vaTJjL2NoaXBzL3BjZjg1OTEKcmVuYW1lIHRvIERvY3VtZW50YXRpb24vaHdtb24vcGNmODU5MQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9od21vbi9zeXNmcy1pbnRlcmZhY2UgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZQppbmRleCA2ZGJmZDVlLi4yZjEwY2U2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZQorKysgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL3N5c2ZzLWludGVyZmFjZQpAQCAtMzY1LDYgKzM2NSw3IEBACiAJCQkJVW5pdDogbWljcm9Kb3VsZQogCQkJCVJPCiAKKwogKioqKioqKioqKgogKiBBbGFybXMgKgogKioqKioqKioqKgpAQCAtNDUzLDYgKzQ1NCwyNyBAQAogCQlSVwogCiAKKyoqKioqKioqKioqKioqKioqKioqKioqCisqIEludHJ1c2lvbiBkZXRlY3Rpb24gKgorKioqKioqKioqKioqKioqKioqKioqKioKKworaW50cnVzaW9uWzAtKl1fYWxhcm0KKwkJQ2hhc3NpcyBpbnRydXNpb24gZGV0ZWN0aW9uCisJCTA6IE9LCisJCTE6IGludHJ1c2lvbiBkZXRlY3RlZAorCQlSVworCQlDb250cmFyeSB0byByZWd1bGFyIGFsYXJtIGZsYWdzIHdoaWNoIGNsZWFyIHRoZW1zZWx2ZXMKKwkJYXV0b21hdGljYWxseSB3aGVuIHJlYWQsIHRoaXMgb25lIHN0aWNrcyB1bnRpbCBjbGVhcmVkIGJ5CisJCXRoZSB1c2VyLiBUaGlzIGlzIGRvbmUgYnkgd3JpdGluZyAwIHRvIHRoZSBmaWxlLiBXcml0aW5nCisJCW90aGVyIHZhbHVlcyBpcyB1bnN1cHBvcnRlZC4KKworaW50cnVzaW9uWzAtKl1fYmVlcAorCQlDaGFzc2lzIGludHJ1c2lvbiBiZWVwCisJCTA6IGRpc2FibGUKKwkJMTogZW5hYmxlCisJCVJXCisKKwogc3lzZnMgYXR0cmlidXRlIHdyaXRlcyBpbnRlcnByZXRhdGlvbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2h3bW9uL3c4MzYyN2VoZiBiL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNjI3ZWhmCmluZGV4IGQ2ZTFhZTMuLmI2ZWI1OTMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNjI3ZWhmCisrKyBiL0RvY3VtZW50YXRpb24vaHdtb24vdzgzNjI3ZWhmCkBAIC0yLDMwICsyLDQwIEBACiA9PT09PT09PT09PT09PT09PT09PT09PQogCiBTdXBwb3J0ZWQgY2hpcHM6Ci0gICogV2luYm9uZCBXODM2MjdFSEYvRUhHL0RIRyAoSVNBIGFjY2VzcyBPTkxZKQorICAqIFdpbmJvbmQgVzgzNjI3RUhGL0VIRyAoSVNBIGFjY2VzcyBPTkxZKQogICAgIFByZWZpeDogJ3c4MzYyN2VoZicKICAgICBBZGRyZXNzZXMgc2Nhbm5lZDogSVNBIGFkZHJlc3MgcmV0cmlldmVkIGZyb20gU3VwZXIgSS9PIHJlZ2lzdGVycwogICAgIERhdGFzaGVldDoKLSAgICAgICAgaHR0cDovL3d3dy53aW5ib25kLXVzYS5jb20vcHJvZHVjdHMvd2luYm9uZF9wcm9kdWN0cy9wZGZzL1BDSUMvVzgzNjI3RUhGXyUyMFc4MzYyN0VIR2IucGRmCi0gICAgICAgIERIRyBkYXRhc2hlZXQgY29uZmlkZW50aWFsLgorICAgICAgICBodHRwOi8vd3d3Lm51dm90b24uY29tLnR3L05SL3Jkb25seXJlcy9BNkEyNThGMC1GMEM5LTRGOTctODFDMC1DNEQyOUU3RTk0M0UvMC9XODM2MjdFSEYucGRmCisgICogV2luYm9uZCBXODM2MjdESEcKKyAgICBQcmVmaXg6ICd3ODM2MjdkaGcnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IElTQSBhZGRyZXNzIHJldHJpZXZlZCBmcm9tIFN1cGVyIEkvTyByZWdpc3RlcnMKKyAgICBEYXRhc2hlZXQ6CisgICAgICAgIGh0dHA6Ly93d3cubnV2b3Rvbi5jb20udHcvTlIvcmRvbmx5cmVzLzc4ODU2MjNELUE0ODctNENGOS1BNDdGLTMwQzVGNzNENkZFNi8wL1c4MzYyN0RIRy5wZGYKKyAgKiBXaW5ib25kIFc4MzY2N0hHCisgICAgUHJlZml4OiAndzgzNjY3aGcnCisgICAgQWRkcmVzc2VzIHNjYW5uZWQ6IElTQSBhZGRyZXNzIHJldHJpZXZlZCBmcm9tIFN1cGVyIEkvTyByZWdpc3RlcnMKKyAgICBEYXRhc2hlZXQ6IG5vdCBhdmFpbGFibGUKIAogQXV0aG9yczoKICAgICAgICAgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CiAgICAgICAgIFl1YW4gTXUgKFdpbmJvbmQpCiAgICAgICAgIFJ1ZG9sZiBNYXJlayA8ci5tYXJla0Bhc3NlbWJsZXIuY3o+CiAgICAgICAgIERhdmlkIEh1YmJhcmQgPGRhdmlkLmMuaHViYmFyZEBnbWFpbC5jb20+CisgICAgICAgIEdvbmcgSnVuIDxKR29uZ0BudXZvdG9uLmNvbT4KIAogRGVzY3JpcHRpb24KIC0tLS0tLS0tLS0tCiAKLVRoaXMgZHJpdmVyIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgdGhlIFdpbmJvbmQgVzgzNjI3RUhGLCBXODM2MjdFSEcsIGFuZAotVzgzNjI3REhHIHN1cGVyIEkvTyBjaGlwcy4gV2Ugd2lsbCByZWZlciB0byB0aGVtIGNvbGxlY3RpdmVseSBhcyBXaW5ib25kIGNoaXBzLgorVGhpcyBkcml2ZXIgaW1wbGVtZW50cyBzdXBwb3J0IGZvciB0aGUgV2luYm9uZCBXODM2MjdFSEYsIFc4MzYyN0VIRywKK1c4MzYyN0RIRyBhbmQgVzgzNjY3SEcgc3VwZXIgSS9PIGNoaXBzLiBXZSB3aWxsIHJlZmVyIHRvIHRoZW0gY29sbGVjdGl2ZWx5CithcyBXaW5ib25kIGNoaXBzLgogCiBUaGUgY2hpcHMgaW1wbGVtZW50IHRocmVlIHRlbXBlcmF0dXJlIHNlbnNvcnMsIGZpdmUgZmFuIHJvdGF0aW9uCiBzcGVlZCBzZW5zb3JzLCB0ZW4gYW5hbG9nIHZvbHRhZ2Ugc2Vuc29ycyAob25seSBuaW5lIGZvciB0aGUgNjI3REhHKSwgb25lCi1WSUQgKDYgcGlucyBmb3IgdGhlIDYyN0VIRi9FSEcsIDggcGlucyBmb3IgdGhlIDYyN0RIRyksIGFsYXJtcyB3aXRoIGJlZXAKLXdhcm5pbmdzIChjb250cm9sIHVuaW1wbGVtZW50ZWQpLCBhbmQgc29tZSBhdXRvbWF0aWMgZmFuIHJlZ3VsYXRpb24KLXN0cmF0ZWdpZXMgKHBsdXMgbWFudWFsIGZhbiBjb250cm9sIG1vZGUpLgorVklEICg2IHBpbnMgZm9yIHRoZSA2MjdFSEYvRUhHLCA4IHBpbnMgZm9yIHRoZSA2MjdESEcgYW5kIDY2N0hHKSwgYWxhcm1zCit3aXRoIGJlZXAgd2FybmluZ3MgKGNvbnRyb2wgdW5pbXBsZW1lbnRlZCksIGFuZCBzb21lIGF1dG9tYXRpYyBmYW4KK3JlZ3VsYXRpb24gc3RyYXRlZ2llcyAocGx1cyBtYW51YWwgZmFuIGNvbnRyb2wgbW9kZSkuCiAKIFRlbXBlcmF0dXJlcyBhcmUgbWVhc3VyZWQgaW4gZGVncmVlcyBDZWxzaXVzIGFuZCBtZWFzdXJlbWVudCByZXNvbHV0aW9uIGlzIDEKIGRlZ0MgZm9yIHRlbXAxIGFuZCAwLjUgZGVnQyBmb3IgdGVtcDIgYW5kIHRlbXAzLiBBbiBhbGFybSBpcyB0cmlnZ2VyZWQgd2hlbgpAQCAtNTQsNyArNjQsOCBAQAogdGVtcDEgLT4gcHdtMQogdGVtcDIgLT4gcHdtMgogdGVtcDMgLT4gcHdtMwotcHJvZyAgLT4gcHdtNCAodGhlIHByb2dyYW1tYWJsZSBzZXR0aW5nIGlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlcikKK3Byb2cgIC0+IHB3bTQgKG5vdCBvbiA2NjdIRzsgdGhlIHByb2dyYW1tYWJsZSBzZXR0aW5nIGlzIG5vdCBzdXBwb3J0ZWQgYnkKKwkgICAgICAgdGhlIGRyaXZlcikKIAogL3N5cyBmaWxlcwogLS0tLS0tLS0tLQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9pb2N0bC9pb2N0bC1udW1iZXIudHh0IGIvRG9jdW1lbnRhdGlvbi9pb2N0bC9pb2N0bC1udW1iZXIudHh0CmluZGV4IGYxZDYzOTkuLjFmNzc5YTIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vaW9jdGwvaW9jdGwtbnVtYmVyLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2lvY3RsL2lvY3RsLW51bWJlci50eHQKQEAgLTEyMiwxMCArMTIyLDggQEAKICdjJwkwMC03RglsaW51eC9jb2RhLmgJCWNvbmZsaWN0IQogJ2MnCTgwLTlGCWFyY2gvczM5MC9pbmNsdWRlL2FzbS9jaHNjLmgKICdkJwkwMC1GRglsaW51eC9jaGFyL2RybS9kcm0vaAljb25mbGljdCEKLSdkJwkwMC1ERglsaW51eC92aWRlb19kZWNvZGVyLmgJY29uZmxpY3QhCiAnZCcJRjAtRkYJbGludXgvZGlnaTEuaAogJ2UnCWFsbAlsaW51eC9kaWdpMS5oCQljb25mbGljdCEKLSdlJwkwMC0xRglsaW51eC92aWRlb19lbmNvZGVyLmgJY29uZmxpY3QhCiAnZScJMDAtMUYJbmV0L2lyZGEvaXJ0dHkuaAljb25mbGljdCEKICdmJwkwMC0xRglsaW51eC9leHQyX2ZzLmgKICdoJwkwMC03RgkJCQlDaGFyb24gZmlsZXN5c3RlbQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9rZXJuZWwtcGFyYW1ldGVycy50eHQgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAppbmRleCBiZTNiZGU1Li5hZWVkYjg5IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dApAQCAtNDkyLDYgKzQ5MiwxNiBAQAogCQkJUmFuZ2U6IDAgLSA4MTkyCiAJCQlEZWZhdWx0OiA2NAogCisJZG1hX2RlYnVnPW9mZglJZiB0aGUga2VybmVsIGlzIGNvbXBpbGVkIHdpdGggRE1BX0FQSV9ERUJVRyBzdXBwb3J0CisJCQl0aGlzIG9wdGlvbiBkaXNhYmxlcyB0aGUgZGVidWdnaW5nIGNvZGUgYXQgYm9vdC4KKworCWRtYV9kZWJ1Z19lbnRyaWVzPTxudW1iZXI+CisJCQlUaGlzIG9wdGlvbiBhbGxvd3MgdG8gdHVuZSB0aGUgbnVtYmVyIG9mIHByZWFsbG9jYXRlZAorCQkJZW50cmllcyBmb3IgRE1BLUFQSSBkZWJ1Z2dpbmcgY29kZS4gT25lIGVudHJ5IGlzCisJCQlyZXF1aXJlZCBwZXIgRE1BLUFQSSBhbGxvY2F0aW9uLiBVc2UgdGhpcyBpZiB0aGUKKwkJCURNQS1BUEkgZGVidWdnaW5nIGNvZGUgZGlzYWJsZXMgaXRzZWxmIGJlY2F1c2UgdGhlCisJCQlhcmNoaXRlY3R1cmFsIGRlZmF1bHQgaXMgdG9vIGxvdy4KKwogCWhwZXQ9CQlbWDg2LTMyLEhQRVRdIG9wdGlvbiB0byBjb250cm9sIEhQRVQgdXNhZ2UKIAkJCUZvcm1hdDogeyBlbmFibGUgKGRlZmF1bHQpIHwgZGlzYWJsZSB8IGZvcmNlIHwKIAkJCQl2ZXJib3NlIH0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbG9ja2RlcC1kZXNpZ24udHh0IGIvRG9jdW1lbnRhdGlvbi9sb2NrZGVwLWRlc2lnbi50eHQKaW5kZXggNDg4NzczMC4uOTM4ZWEyMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9sb2NrZGVwLWRlc2lnbi50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9sb2NrZGVwLWRlc2lnbi50eHQKQEAgLTI3LDMzICsyNywzNyBAQAogU3RhdGUKIC0tLS0tCiAKLVRoZSB2YWxpZGF0b3IgdHJhY2tzIGxvY2stY2xhc3MgdXNhZ2UgaGlzdG9yeSBpbnRvIDUgc2VwYXJhdGUgc3RhdGUgYml0czoKK1RoZSB2YWxpZGF0b3IgdHJhY2tzIGxvY2stY2xhc3MgdXNhZ2UgaGlzdG9yeSBpbnRvIDRuICsgMSBzZXBhcmF0ZSBzdGF0ZSBiaXRzOgogCi0tICdldmVyIGhlbGQgaW4gaGFyZGlycSBjb250ZXh0JyAgICAgICAgICAgICAgICAgICAgWyA9PSBoYXJkaXJxLXNhZmUgICBdCi0tICdldmVyIGhlbGQgaW4gc29mdGlycSBjb250ZXh0JyAgICAgICAgICAgICAgICAgICAgWyA9PSBzb2Z0aXJxLXNhZmUgICBdCi0tICdldmVyIGhlbGQgd2l0aCBoYXJkaXJxcyBlbmFibGVkJyAgICAgICAgICAgICAgICAgWyA9PSBoYXJkaXJxLXVuc2FmZSBdCi0tICdldmVyIGhlbGQgd2l0aCBzb2Z0aXJxcyBhbmQgaGFyZGlycXMgZW5hYmxlZCcgICAgWyA9PSBzb2Z0aXJxLXVuc2FmZSBdCistICdldmVyIGhlbGQgaW4gU1RBVEUgY29udGV4dCcKKy0gJ2V2ZXIgaGVhZCBhcyByZWFkbG9jayBpbiBTVEFURSBjb250ZXh0JworLSAnZXZlciBoZWFkIHdpdGggU1RBVEUgZW5hYmxlZCcKKy0gJ2V2ZXIgaGVhZCBhcyByZWFkbG9jayB3aXRoIFNUQVRFIGVuYWJsZWQnCisKK1doZXJlIFNUQVRFIGNhbiBiZSBlaXRoZXIgb25lIG9mIChrZXJuZWwvbG9ja2RlcF9zdGF0ZXMuaCkKKyAtIGhhcmRpcnEKKyAtIHNvZnRpcnEKKyAtIHJlY2xhaW1fZnMKIAogLSAnZXZlciB1c2VkJyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsgPT0gIXVudXNlZCAgICAgICAgXQogCi1XaGVuIGxvY2tpbmcgcnVsZXMgYXJlIHZpb2xhdGVkLCB0aGVzZSA0IHN0YXRlIGJpdHMgYXJlIHByZXNlbnRlZCBpbiB0aGUKLWxvY2tpbmcgZXJyb3IgbWVzc2FnZXMsIGluc2lkZSBjdXJsaWVzLiAgQSBjb250cml2ZWQgZXhhbXBsZToKK1doZW4gbG9ja2luZyBydWxlcyBhcmUgdmlvbGF0ZWQsIHRoZXNlIHN0YXRlIGJpdHMgYXJlIHByZXNlbnRlZCBpbiB0aGUKK2xvY2tpbmcgZXJyb3IgbWVzc2FnZXMsIGluc2lkZSBjdXJsaWVzLiBBIGNvbnRyaXZlZCBleGFtcGxlOgogCiAgICBtb2Rwcm9iZS8yMjg3IGlzIHRyeWluZyB0byBhY3F1aXJlIGxvY2s6Ci0gICAgKCZzaW9fbG9ja3NbaV0ubG9jayl7LS0uLn0sIGF0OiBbPGMwMjg2N2ZkPl0gbXV0ZXhfbG9jaysweDIxLzB4MjQKKyAgICAoJnNpb19sb2Nrc1tpXS5sb2NrKXstLi0uLi59LCBhdDogWzxjMDI4NjdmZD5dIG11dGV4X2xvY2srMHgyMS8weDI0CiAKICAgIGJ1dCB0YXNrIGlzIGFscmVhZHkgaG9sZGluZyBsb2NrOgotICAgICgmc2lvX2xvY2tzW2ldLmxvY2spey0tLi59LCBhdDogWzxjMDI4NjdmZD5dIG11dGV4X2xvY2srMHgyMS8weDI0CisgICAgKCZzaW9fbG9ja3NbaV0ubG9jayl7LS4tLi4ufSwgYXQ6IFs8YzAyODY3ZmQ+XSBtdXRleF9sb2NrKzB4MjEvMHgyNAogCiAKLVRoZSBiaXQgcG9zaXRpb24gaW5kaWNhdGVzIGhhcmRpcnEsIHNvZnRpcnEsIGhhcmRpcnEtcmVhZCwKLXNvZnRpcnEtcmVhZCByZXNwZWN0aXZlbHksIGFuZCB0aGUgY2hhcmFjdGVyIGRpc3BsYXllZCBpbiBlYWNoCi1pbmRpY2F0ZXM6CitUaGUgYml0IHBvc2l0aW9uIGluZGljYXRlcyBTVEFURSwgU1RBVEUtcmVhZCwgZm9yIGVhY2ggb2YgdGhlIHN0YXRlcyBsaXN0ZWQKK2Fib3ZlLCBhbmQgdGhlIGNoYXJhY3RlciBkaXNwbGF5ZWQgaW4gZWFjaCBpbmRpY2F0ZXM6CiAKICAgICcuJyAgYWNxdWlyZWQgd2hpbGUgaXJxcyBkaXNhYmxlZAogICAgJysnICBhY3F1aXJlZCBpbiBpcnEgY29udGV4dAogICAgJy0nICBhY3F1aXJlZCB3aXRoIGlycXMgZW5hYmxlZAotICAgJz8nIHJlYWQgYWNxdWlyZWQgaW4gaXJxIGNvbnRleHQgd2l0aCBpcnFzIGVuYWJsZWQuCisgICAnPycgIGFjcXVpcmVkIGluIGlycSBjb250ZXh0IHdpdGggaXJxcyBlbmFibGVkLgogCiBVbnVzZWQgbXV0ZXhlcyBjYW5ub3QgYmUgcGFydCBvZiB0aGUgY2F1c2Ugb2YgYW4gZXJyb3IuCiAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2RtYS50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9kbWEudHh0CmluZGV4IGNjNDUzMTEuLjA3MzJjZGQgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2RtYS50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvZG1hLnR4dApAQCAtMzUsMzAgKzM1LDMwIEBACiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1kbWEiLCAiZnNsLGVsby1kbWEiOwotCQlyZWcgPSA8ODJhOCA0PjsKLQkJcmFuZ2VzID0gPDAgODEwMCAxYTQ+OworCQlyZWcgPSA8MHg4MmE4IDQ+OworCQlyYW5nZXMgPSA8MCAweDgxMDAgMHgxYTQ+OwogCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJaW50ZXJydXB0cyA9IDw0NyA4PjsKKwkJaW50ZXJydXB0cyA9IDw3MSA4PjsKIAkJY2VsbC1pbmRleCA9IDwwPjsKIAkJZG1hLWNoYW5uZWxAMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCXJlZyA9IDwwIDgwPjsKKwkJCXJlZyA9IDwwIDB4ODA+OwogCQl9OwogCQlkbWEtY2hhbm5lbEA4MCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJY2VsbC1pbmRleCA9IDwxPjsKLQkJCXJlZyA9IDw4MCA4MD47CisJCQlyZWcgPSA8MHg4MCAweDgwPjsKIAkJfTsKIAkJZG1hLWNoYW5uZWxAMTAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNDktZG1hLWNoYW5uZWwiLCAiZnNsLGVsby1kbWEtY2hhbm5lbCI7CiAJCQljZWxsLWluZGV4ID0gPDI+OwotCQkJcmVnID0gPDEwMCA4MD47CisJCQlyZWcgPSA8MHgxMDAgMHg4MD47CiAJCX07CiAJCWRtYS1jaGFubmVsQDE4MCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LWRtYS1jaGFubmVsIiwgImZzbCxlbG8tZG1hLWNoYW5uZWwiOwogCQkJY2VsbC1pbmRleCA9IDwzPjsKLQkJCXJlZyA9IDwxODAgODA+OworCQkJcmVnID0gPDB4MTgwIDB4ODA+OwogCQl9OwogCX07CiAKQEAgLTkzLDM2ICs5MywzNiBAQAogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8MT47CiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDAtZG1hIiwgImZzbCxlbG9wbHVzLWRtYSI7Ci0JCXJlZyA9IDwyMTMwMCA0PjsKLQkJcmFuZ2VzID0gPDAgMjExMDAgMjAwPjsKKwkJcmVnID0gPDB4MjEzMDAgND47CisJCXJhbmdlcyA9IDwwIDB4MjExMDAgMHgyMDA+OwogCQljZWxsLWluZGV4ID0gPDA+OwogCQlkbWEtY2hhbm5lbEAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDAtZG1hLWNoYW5uZWwiLCAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOwotCQkJcmVnID0gPDAgODA+OworCQkJcmVnID0gPDAgMHg4MD47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlpbnRlcnJ1cHRzID0gPDE0IDI+OworCQkJaW50ZXJydXB0cyA9IDwyMCAyPjsKIAkJfTsKIAkJZG1hLWNoYW5uZWxAODAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0MC1kbWEtY2hhbm5lbCIsICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7Ci0JCQlyZWcgPSA8ODAgODA+OworCQkJcmVnID0gPDB4ODAgMHg4MD47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlpbnRlcnJ1cHRzID0gPDE1IDI+OworCQkJaW50ZXJydXB0cyA9IDwyMSAyPjsKIAkJfTsKIAkJZG1hLWNoYW5uZWxAMTAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDAtZG1hLWNoYW5uZWwiLCAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOwotCQkJcmVnID0gPDEwMCA4MD47CisJCQlyZWcgPSA8MHgxMDAgMHg4MD47CiAJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlpbnRlcnJ1cHRzID0gPDE2IDI+OworCQkJaW50ZXJydXB0cyA9IDwyMiAyPjsKIAkJfTsKIAkJZG1hLWNoYW5uZWxAMTgwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDAtZG1hLWNoYW5uZWwiLCAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOwotCQkJcmVnID0gPDE4MCA4MD47CisJCQlyZWcgPSA8MHgxODAgMHg4MD47CiAJCQljZWxsLWluZGV4ID0gPDM+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQlpbnRlcnJ1cHRzID0gPDE3IDI+OworCQkJaW50ZXJydXB0cyA9IDwyMyAyPjsKIAkJfTsKIAl9OwogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9lc2RoYy50eHQgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9lc2RoYy50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjAwODQ2NQotLS0gL2Rldi9udWxsCisrKyBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL2VzZGhjLnR4dApAQCAtMCwwICsxLDI0IEBACisqIEZyZWVzY2FsZSBFbmhhbmNlZCBTZWN1cmUgRGlnaXRhbCBIb3N0IENvbnRyb2xsZXIgKGVTREhDKQorCitUaGUgRW5oYW5jZWQgU2VjdXJlIERpZ2l0YWwgSG9zdCBDb250cm9sbGVyIHByb3ZpZGVzIGFuIGludGVyZmFjZQorZm9yIE1NQywgU0QsIGFuZCBTRElPIHR5cGVzIG9mIG1lbW9yeSBjYXJkcy4KKworUmVxdWlyZWQgcHJvcGVydGllczoKKyAgLSBjb21wYXRpYmxlIDogc2hvdWxkIGJlCisgICAgImZzbCw8Y2hpcD4tZXNkaGMiLCAiZnNsLG1wYzgzNzktZXNkaGMiIGZvciBNUEM4M3h4IHByb2Nlc3NvcnMuCisgICAgImZzbCw8Y2hpcD4tZXNkaGMiLCAiZnNsLG1wYzg1MzYtZXNkaGMiIGZvciBNUEM4NXh4IHByb2Nlc3NvcnMuCisgIC0gcmVnIDogc2hvdWxkIGNvbnRhaW4gZVNESEMgcmVnaXN0ZXJzIGxvY2F0aW9uIGFuZCBsZW5ndGguCisgIC0gaW50ZXJydXB0cyA6IHNob3VsZCBjb250YWluIGVTREhDIGludGVycnVwdC4KKyAgLSBpbnRlcnJ1cHQtcGFyZW50IDogaW50ZXJydXB0IHNvdXJjZSBwaGFuZGxlLgorICAtIGNsb2NrLWZyZXF1ZW5jeSA6IHNwZWNpZmllcyBlU0RIQyBiYXNlIGNsb2NrIGZyZXF1ZW5jeS4KKworRXhhbXBsZToKKworc2RoY2lAMmUwMDAgeworCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzgtZXNkaGMiLCAiZnNsLG1wYzgzNzktZXNkaGMiOworCXJlZyA9IDwweDJlMDAwIDB4MTAwMD47CisJaW50ZXJydXB0cyA9IDw0MiAweDg+OworCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCS8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwljbG9jay1mcmVxdWVuY3kgPSA8MD47Cit9OwpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvc3NpLnR4dCBiL0RvY3VtZW50YXRpb24vcG93ZXJwYy9kdHMtYmluZGluZ3MvZnNsL3NzaS50eHQKaW5kZXggYTJkOTYzOS4uNWZmNzZjOSAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9wb3dlcnBjL2R0cy1iaW5kaW5ncy9mc2wvc3NpLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3Bvd2VycGMvZHRzLWJpbmRpbmdzL2ZzbC9zc2kudHh0CkBAIC00LDQ0ICs0LDU2IEBACiBiZSBwcm9ncmFtbWVkIGluIEFDOTcsIEkyUywgbGVmdC1qdXN0aWZpZWQsIG9yIHJpZ2h0LWp1c3RpZmllZCBtb2Rlcy4KIAogUmVxdWlyZWQgcHJvcGVydGllczoKLS0gY29tcGF0aWJsZQkgIDogY29tcGF0aWJsZSBsaXN0LCBjb250YWluaW5nICJmc2wsc3NpIgotLSBjZWxsLWluZGV4CSAgOiB0aGUgU1NJLCA8MD4gPSBTU0kxLCA8MT4gPSBTU0kyLCBhbmQgc28gb24KLS0gcmVnCQkgIDogb2Zmc2V0IGFuZCBsZW5ndGggb2YgdGhlIHJlZ2lzdGVyIHNldCBmb3IgdGhlIGRldmljZQotLSBpbnRlcnJ1cHRzCSAgOiA8YSBiPiB3aGVyZSBhIGlzIHRoZSBpbnRlcnJ1cHQgbnVtYmVyIGFuZCBiIGlzIGEKLSAgICAgICAgICAgICAgICAgICAgIGZpZWxkIHRoYXQgcmVwcmVzZW50cyBhbiBlbmNvZGluZyBvZiB0aGUgc2Vuc2UgYW5kCi0JCSAgICBsZXZlbCBpbmZvcm1hdGlvbiBmb3IgdGhlIGludGVycnVwdC4gIFRoaXMgc2hvdWxkIGJlCi0JCSAgICBlbmNvZGVkIGJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiBpbiBzZWN0aW9uIDIpCi0JCSAgICBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgaW50ZXJydXB0IGNvbnRyb2xsZXIgeW91Ci0JCSAgICBoYXZlLgotLSBpbnRlcnJ1cHQtcGFyZW50IDogdGhlIHBoYW5kbGUgZm9yIHRoZSBpbnRlcnJ1cHQgY29udHJvbGxlciB0aGF0Ci0gICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlcyBpbnRlcnJ1cHRzIGZvciB0aGlzIGRldmljZS4KLS0gZnNsLG1vZGUJICA6IHRoZSBvcGVyYXRpbmcgbW9kZSBmb3IgdGhlIFNTSSBpbnRlcmZhY2UKLQkJICAgICJpMnMtc2xhdmUiIC0gSTJTIG1vZGUsIFNTSSBpcyBjbG9jayBzbGF2ZQotCQkgICAgImkycy1tYXN0ZXIiIC0gSTJTIG1vZGUsIFNTSSBpcyBjbG9jayBtYXN0ZXIKLQkJICAgICJsai1zbGF2ZSIgLSBsZWZ0LWp1c3RpZmllZCBtb2RlLCBTU0kgaXMgY2xvY2sgc2xhdmUKLQkJICAgICJsai1tYXN0ZXIiIC0gbC5qLiBtb2RlLCBTU0kgaXMgY2xvY2sgbWFzdGVyCi0JCSAgICAicmotc2xhdmUiIC0gcmlnaHQtanVzdGlmaWVkIG1vZGUsIFNTSSBpcyBjbG9jayBzbGF2ZQotCQkgICAgInJqLW1hc3RlciIgLSByLmouLCBTU0kgaXMgY2xvY2sgbWFzdGVyCi0JCSAgICAiYWM5Ny1zbGF2ZSIgLSBBQzk3IG1vZGUsIFNTSSBpcyBjbG9jayBzbGF2ZQotCQkgICAgImFjOTctbWFzdGVyIiAtIEFDOTcgbW9kZSwgU1NJIGlzIGNsb2NrIG1hc3RlcgotLSBmc2wscGxheWJhY2stZG1hOiBwaGFuZGxlIHRvIGEgbm9kZSBmb3IgdGhlIERNQSBjaGFubmVsIHRvIHVzZSBmb3IKKy0gY29tcGF0aWJsZTogICAgICAgQ29tcGF0aWJsZSBsaXN0LCBjb250YWlucyAiZnNsLHNzaSIuCistIGNlbGwtaW5kZXg6ICAgICAgIFRoZSBTU0ksIDwwPiA9IFNTSTEsIDwxPiA9IFNTSTIsIGFuZCBzbyBvbi4KKy0gcmVnOiAgICAgICAgICAgICAgT2Zmc2V0IGFuZCBsZW5ndGggb2YgdGhlIHJlZ2lzdGVyIHNldCBmb3IgdGhlIGRldmljZS4KKy0gaW50ZXJydXB0czogICAgICAgPGEgYj4gd2hlcmUgYSBpcyB0aGUgaW50ZXJydXB0IG51bWJlciBhbmQgYiBpcyBhCisgICAgICAgICAgICAgICAgICAgIGZpZWxkIHRoYXQgcmVwcmVzZW50cyBhbiBlbmNvZGluZyBvZiB0aGUgc2Vuc2UgYW5kCisgICAgICAgICAgICAgICAgICAgIGxldmVsIGluZm9ybWF0aW9uIGZvciB0aGUgaW50ZXJydXB0LiAgVGhpcyBzaG91bGQgYmUKKyAgICAgICAgICAgICAgICAgICAgZW5jb2RlZCBiYXNlZCBvbiB0aGUgaW5mb3JtYXRpb24gaW4gc2VjdGlvbiAyKQorICAgICAgICAgICAgICAgICAgICBkZXBlbmRpbmcgb24gdGhlIHR5cGUgb2YgaW50ZXJydXB0IGNvbnRyb2xsZXIgeW91CisgICAgICAgICAgICAgICAgICAgIGhhdmUuCistIGludGVycnVwdC1wYXJlbnQ6IFRoZSBwaGFuZGxlIGZvciB0aGUgaW50ZXJydXB0IGNvbnRyb2xsZXIgdGhhdAorICAgICAgICAgICAgICAgICAgICBzZXJ2aWNlcyBpbnRlcnJ1cHRzIGZvciB0aGlzIGRldmljZS4KKy0gZnNsLG1vZGU6ICAgICAgICAgVGhlIG9wZXJhdGluZyBtb2RlIGZvciB0aGUgU1NJIGludGVyZmFjZS4KKyAgICAgICAgICAgICAgICAgICAgImkycy1zbGF2ZSIgLSBJMlMgbW9kZSwgU1NJIGlzIGNsb2NrIHNsYXZlCisgICAgICAgICAgICAgICAgICAgICJpMnMtbWFzdGVyIiAtIEkyUyBtb2RlLCBTU0kgaXMgY2xvY2sgbWFzdGVyCisgICAgICAgICAgICAgICAgICAgICJsai1zbGF2ZSIgLSBsZWZ0LWp1c3RpZmllZCBtb2RlLCBTU0kgaXMgY2xvY2sgc2xhdmUKKyAgICAgICAgICAgICAgICAgICAgImxqLW1hc3RlciIgLSBsLmouIG1vZGUsIFNTSSBpcyBjbG9jayBtYXN0ZXIKKyAgICAgICAgICAgICAgICAgICAgInJqLXNsYXZlIiAtIHJpZ2h0LWp1c3RpZmllZCBtb2RlLCBTU0kgaXMgY2xvY2sgc2xhdmUKKyAgICAgICAgICAgICAgICAgICAgInJqLW1hc3RlciIgLSByLmouLCBTU0kgaXMgY2xvY2sgbWFzdGVyCisgICAgICAgICAgICAgICAgICAgICJhYzk3LXNsYXZlIiAtIEFDOTcgbW9kZSwgU1NJIGlzIGNsb2NrIHNsYXZlCisgICAgICAgICAgICAgICAgICAgICJhYzk3LW1hc3RlciIgLSBBQzk3IG1vZGUsIFNTSSBpcyBjbG9jayBtYXN0ZXIKKy0gZnNsLHBsYXliYWNrLWRtYTogUGhhbmRsZSB0byBhIG5vZGUgZm9yIHRoZSBETUEgY2hhbm5lbCB0byB1c2UgZm9yCiAgICAgICAgICAgICAgICAgICAgIHBsYXliYWNrIG9mIGF1ZGlvLiAgVGhpcyBpcyB0eXBpY2FsbHkgZGljdGF0ZWQgYnkgU09DCiAgICAgICAgICAgICAgICAgICAgIGRlc2lnbi4gIFNlZSB0aGUgbm90ZXMgYmVsb3cuCi0tIGZzbCxjYXB0dXJlLWRtYTogIHBoYW5kbGUgdG8gYSBub2RlIGZvciB0aGUgRE1BIGNoYW5uZWwgdG8gdXNlIGZvcgorLSBmc2wsY2FwdHVyZS1kbWE6ICBQaGFuZGxlIHRvIGEgbm9kZSBmb3IgdGhlIERNQSBjaGFubmVsIHRvIHVzZSBmb3IKICAgICAgICAgICAgICAgICAgICAgY2FwdHVyZSAocmVjb3JkaW5nKSBvZiBhdWRpby4gIFRoaXMgaXMgdHlwaWNhbGx5IGRpY3RhdGVkCiAgICAgICAgICAgICAgICAgICAgIGJ5IFNPQyBkZXNpZ24uICBTZWUgdGhlIG5vdGVzIGJlbG93LgorLSBmc2wsZmlmby1kZXB0aDogICBUaGUgbnVtYmVyIG9mIGVsZW1lbnRzIGluIHRoZSB0cmFuc21pdCBhbmQgcmVjZWl2ZSBGSUZPcy4KKyAgICAgICAgICAgICAgICAgICAgVGhpcyBudW1iZXIgaXMgdGhlIG1heGltdW0gYWxsb3dlZCB2YWx1ZSBmb3IgU0ZDU1JbVEZXTTBdLgorLSBmc2wsc3NpLWFzeW5jaHJvbm91czoKKyAgICAgICAgICAgICAgICAgICAgSWYgc3BlY2lmaWVkLCB0aGUgU1NJIGlzIHRvIGJlIHByb2dyYW1tZWQgaW4gYXN5bmNocm9ub3VzCisgICAgICAgICAgICAgICAgICAgIG1vZGUuICBJbiB0aGlzIG1vZGUsIHBpbnMgU1JDSywgU1RDSywgU1JGUywgYW5kIFNURlMgbXVzdAorICAgICAgICAgICAgICAgICAgICBhbGwgYmUgY29ubmVjdGVkIHRvIHZhbGlkIHNpZ25hbHMuICBJbiBzeW5jaHJvbm91cyBtb2RlLAorICAgICAgICAgICAgICAgICAgICBTUkNLIGFuZCBTUkZTIGFyZSBpZ25vcmVkLiAgQXN5bmNocm9ub3VzIG1vZGUgYWxsb3dzCisgICAgICAgICAgICAgICAgICAgIHBsYXliYWNrIGFuZCBjYXB0dXJlIHRvIHVzZSBkaWZmZXJlbnQgc2FtcGxlIHNpemVzIGFuZAorICAgICAgICAgICAgICAgICAgICBzYW1wbGUgcmF0ZXMuICBTb21lIGRyaXZlcnMgbWF5IHJlcXVpcmUgdGhhdCBTUkNLIGFuZCBTVENLCisgICAgICAgICAgICAgICAgICAgIGJlIGNvbm5lY3RlZCB0b2dldGhlciwgYW5kIFNSRlMgYW5kIFNURlMgYmUgY29ubmVjdGVkCisgICAgICAgICAgICAgICAgICAgIHRvZ2V0aGVyLiAgVGhpcyB3b3VsZCBzdGlsbCBhbGxvdyBkaWZmZXJlbnQgc2FtcGxlIHNpemVzLAorICAgICAgICAgICAgICAgICAgICBidXQgbm90IGRpZmZlcmVudCBzYW1wbGUgcmF0ZXMuCiAKIE9wdGlvbmFsIHByb3BlcnRpZXM6Ci0tIGNvZGVjLWhhbmRsZQkgIDogcGhhbmRsZSB0byBhICdjb2RlYycgbm9kZSB0aGF0IGRlZmluZXMgYW4gYXVkaW8KLQkJICAgIGNvZGVjIGNvbm5lY3RlZCB0byB0aGlzIFNTSS4gIFRoaXMgbm9kZSBpcyB0eXBpY2FsbHkKLQkJICAgIGEgY2hpbGQgb2YgYW4gSTJDIG9yIG90aGVyIGNvbnRyb2wgbm9kZS4KKy0gY29kZWMtaGFuZGxlOiAgICAgUGhhbmRsZSB0byBhICdjb2RlYycgbm9kZSB0aGF0IGRlZmluZXMgYW4gYXVkaW8KKyAgICAgICAgICAgICAgICAgICAgY29kZWMgY29ubmVjdGVkIHRvIHRoaXMgU1NJLiAgVGhpcyBub2RlIGlzIHR5cGljYWxseQorICAgICAgICAgICAgICAgICAgICBhIGNoaWxkIG9mIGFuIEkyQyBvciBvdGhlciBjb250cm9sIG5vZGUuCiAKIENoaWxkICdjb2RlYycgbm9kZSByZXF1aXJlZCBwcm9wZXJ0aWVzOgotLSBjb21wYXRpYmxlCSAgOiBjb21wYXRpYmxlIGxpc3QsIGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBjb2RlYworLSBjb21wYXRpYmxlOiAgICAgICBDb21wYXRpYmxlIGxpc3QsIGNvbnRhaW5zIHRoZSBuYW1lIG9mIHRoZSBjb2RlYwogCiBDaGlsZCAnY29kZWMnIG5vZGUgb3B0aW9uYWwgcHJvcGVydGllczoKLS0gY2xvY2stZnJlcXVlbmN5ICA6IFRoZSBmcmVxdWVuY3kgb2YgdGhlIGlucHV0IGNsb2NrLCB3aGljaCB0eXBpY2FsbHkKLSAgICAgICAgICAgICAgICAgICAgIGNvbWVzIGZyb20gYW4gb24tYm9hcmQgZGVkaWNhdGVkIG9zY2lsbGF0b3IuCistIGNsb2NrLWZyZXF1ZW5jeTogIFRoZSBmcmVxdWVuY3kgb2YgdGhlIGlucHV0IGNsb2NrLCB3aGljaCB0eXBpY2FsbHkgY29tZXMKKyAgICAgICAgICAgICAgICAgICAgZnJvbSBhbiBvbi1ib2FyZCBkZWRpY2F0ZWQgb3NjaWxsYXRvci4KIAogTm90ZXMgb24gZnNsLHBsYXliYWNrLWRtYSBhbmQgZnNsLGNhcHR1cmUtZG1hOgogCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmJ0dHYgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmJ0dHYKaW5kZXggMGQ5M2ZhMS4uZjExYzU4MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5idHR2CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuYnR0dgpAQCAtMTM1LDcgKzEzNSw3IEBACiAxMzQgLT4gQWRsaW5rIFJUVjI0CiAxMzUgLT4gRFZpQ08gRnVzaW9uSERUViA1IExpdGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxOGFjOmQ1MDBdCiAxMzYgLT4gQWNvcnAgWTg3OEYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs5NTExOjE1NDBdCi0xMzcgLT4gQ29uY2VwdHJvbmljIENUVkZNaSB2MgorMTM3IC0+IENvbmNlcHRyb25pYyBDVFZGTWkgdjIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDM2ZToxMDllXQogMTM4IC0+IFByb2xpbmsgUGl4ZWx2aWV3IFBWLUJUODc4UCsgKFJldi4yRSkKIDEzOSAtPiBQcm9saW5rIFBpeGVsVmlldyBQbGF5VFYgTVBFRzIgUFYtTTQ5MDAKIDE0MCAtPiBPc3ByZXkgNDQwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwNzA6ZmYwN10KQEAgLTE1NCwzICsxNTQsNyBAQAogMTUzIC0+IFBIWVRFQyBWRC0wMTIgKGJ0ODc4KQogMTU0IC0+IFBIWVRFQyBWRC0wMTItWDEgKGJ0ODc4KQogMTU1IC0+IFBIWVRFQyBWRC0wMTItWDIgKGJ0ODc4KQorMTU2IC0+IElWQ0UtODc4NCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBbMDAwMDpmMDUwLDAwMDE6ZjA1MCwwMDAyOmYwNTAsMDAwMzpmMDUwXQorMTU3IC0+IEdlb3Zpc2lvbiBHVi04MDAoUykgKG1hc3RlcikgICAgICAgICAgICAgICAgICAgICAgICBbODAwYTo3NjNkXQorMTU4IC0+IEdlb3Zpc2lvbiBHVi04MDAoUykgKHNsYXZlKSAgICAgICAgICAgICAgICAgICAgICAgICBbODAwYjo3NjNkLDgwMGM6NzYzZCw4MDBkOjc2M2RdCisxNTkgLT4gUHJvVmlkZW8gUFYxODMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFsxODMwOjE1NDAsMTgzMToxNTQwLDE4MzI6MTU0MCwxODMzOjE1NDAsMTgzNDoxNTQwLDE4MzU6MTU0MCwxODM2OjE1NDAsMTgzNzoxNTQwXQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDIzODg1IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDIzODg1CmluZGV4IDM1ZWExMzAuLjkxYWEzYzAgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3gyMzg4NQorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4MjM4ODUKQEAgLTEyLDMgKzEyLDcgQEAKICAxMSAtPiBEVmlDTyBGdXNpb25IRFRWIERWQi1UIER1YWwgRXhwcmVzcyAgICAgICAgICAgICAgICAgWzE4YWM6ZGI3OF0KICAxMiAtPiBMZWFkdGVrIFdpbmZhc3QgUHhEVlIzMjAwIEggICAgICAgICAgICAgICAgICAgICAgICAgWzEwN2Q6NjY4MV0KICAxMyAtPiBDb21wcm8gVmlkZW9NYXRlIEU2NTBGICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzE4NWI6ZTgwMF0KKyAxNCAtPiBUdXJib1NpZ2h0IFRCUyA2OTIwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzY5MjA6ODg4OF0KKyAxNSAtPiBUZVZpaSBTNDcwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgW2Q0NzA6OTAyMl0KKyAxNiAtPiBEVkJXb3JsZCBEVkItUzIgMjAwNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzAwMDE6MjAwNV0KKyAxNyAtPiBOZXRVUCBEdWFsIERWQi1TMiBDSSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgWzFiNTU6MmEyY10KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3g4OCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuY3g4OAppbmRleCAwZDA4ZjFlLi43MWU5ZGIwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmN4ODgKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5jeDg4CkBAIC03NywzICs3Nyw0IEBACiAgNzYgLT4gU0FUVFJBREUgU1Q0MjAwIERWQi1TL1MyICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiMjAwOjQyMDBdCiAgNzcgLT4gVEJTIDg5MTAgRFZCLVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFs4OTEwOjg4ODhdCiAgNzggLT4gUHJvZiA2MjAwIERWQi1TICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFtiMDIyOjMwMjJdCisgNzkgLT4gVGVycmF0ZWMgQ2luZXJneSBIVCBQQ0kgTUtJSSAgICAgICAgICAgICAgICAgICAgICAgIFsxNTNiOjExNzddCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULmVtMjh4eCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuZW0yOHh4CmluZGV4IDc1YmRlZDguLjc4ZDBhNmUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuZW0yOHh4CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1QuZW0yOHh4CkBAIC03LDEyICs3LDEyIEBACiAgIDYgLT4gVGVycmF0ZWMgQ2luZXJneSAyMDAgVVNCICAgICAgICAgICAgICAgICAoZW0yODAwKQogICA3IC0+IExlYWR0ZWsgV2luZmFzdCBVU0IgSUkgICAgICAgICAgICAgICAgICAgKGVtMjgwMCkgICAgICAgIFswNDEzOjYwMjNdCiAgIDggLT4gS3dvcmxkIFVTQjI4MDAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZW0yODAwKQotICA5IC0+IFBpbm5hY2xlIERhenpsZSBEVkMgOTAvRFZDIDEwMCAgICAgICAgICAgKGVtMjgyMC9lbTI4NDApIFsyMzA0OjAyMDcsMjMwNDowMjFhXQorICA5IC0+IFBpbm5hY2xlIERhenpsZSBEVkMgOTAvMTAwLzEwMS8xMDcgLyBLYWlzZXIgQmFhcyBWaWRlbyB0byBEVkQgbWFrZXIgKGVtMjgyMC9lbTI4NDApIFsxYjgwOmUzMDIsMjMwNDowMjA3LDIzMDQ6MDIxYV0KICAxMCAtPiBIYXVwcGF1Z2UgV2luVFYgSFZSIDkwMCAgICAgICAgICAgICAgICAgIChlbTI4ODApICAgICAgICBbMjA0MDo2NTAwXQogIDExIC0+IFRlcnJhdGVjIEh5YnJpZCBYUyAgICAgICAgICAgICAgICAgICAgICAgKGVtMjg4MCkgICAgICAgIFswY2NkOjAwNDJdCiAgMTIgLT4gS3dvcmxkIFBWUiBUViAyODAwIFJGICAgICAgICAgICAgICAgICAgICAoZW0yODIwL2VtMjg0MCkKICAxMyAtPiBUZXJyYXRlYyBQcm9kaWd5IFhTICAgICAgICAgICAgICAgICAgICAgIChlbTI4ODApICAgICAgICBbMGNjZDowMDQ3XQotIDE0IC0+IFBpeGVsdmlldyBQcm9saW5rIFBsYXlUViBVU0IgMi4wICAgICAgICAgKGVtMjgyMC9lbTI4NDApCisgMTQgLT4gU0lJRyBBVlR1bmVyLVBWUiAvIFBpeGVsdmlldyBQcm9saW5rIFBsYXlUViBVU0IgMi4wIChlbTI4MjAvZW0yODQwKQogIDE1IC0+IFYtR2VhciBQb2NrZXRUViAgICAgICAgICAgICAgICAgICAgICAgICAgKGVtMjgwMCkKICAxNiAtPiBIYXVwcGF1Z2UgV2luVFYgSFZSIDk1MCAgICAgICAgICAgICAgICAgIChlbTI4ODMpICAgICAgICBbMjA0MDo2NTEzLDIwNDA6NjUxNywyMDQwOjY1MWJdCiAgMTcgLT4gUGlubmFjbGUgUENUViBIRCBQcm8gU3RpY2sgICAgICAgICAgICAgICAoZW0yODgwKSAgICAgICAgWzIzMDQ6MDIyN10KQEAgLTMwLDcgKzMwLDYgQEAKICAzMCAtPiBWaWRlb2xvZ3kgMjBLMTRYVVNCIFVTQjIuMCAgICAgICAgICAgICAgIChlbTI4MjAvZW0yODQwKQogIDMxIC0+IFVzYmdlYXIgVkQyMDR2OSAgICAgICAgICAgICAgICAgICAgICAgICAgKGVtMjgyMSkKICAzMiAtPiBTdXBlcmNvbXAgVVNCIDIuMCBUViAgICAgICAgICAgICAgICAgICAgIChlbTI4MjEpCi0gMzMgLT4gU0lJRyBBVlR1bmVyLVBWUi9Qcm9saW5rIFBsYXlUViBVU0IgMi4wICAoZW0yODIxKQogIDM0IC0+IFRlcnJhdGVjIENpbmVyZ3kgQSBIeWJyaWQgWFMgICAgICAgICAgICAgKGVtMjg2MCkgICAgICAgIFswY2NkOjAwNGZdCiAgMzUgLT4gVHlwaG9vbiBEVkQgTWFrZXIgICAgICAgICAgICAgICAgICAgICAgICAoZW0yODYwKQogIDM2IC0+IE5ldEdNQkggQ2FtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVtMjg2MCkKQEAgLTU4LDMgKzU3LDcgQEAKICA1OCAtPiBDb21wcm8gVmlkZW9NYXRlIEZvcllvdS9TdGVyZW8gICAgICAgICAgIChlbTI4MjAvZW0yODQwKSBbMTg1YjoyMDQxXQogIDYwIC0+IEhhdXBwYXVnZSBXaW5UViBIVlIgODUwICAgICAgICAgICAgICAgICAgKGVtMjg4MykgICAgICAgIFsyMDQwOjY1MWZdCiAgNjEgLT4gUGl4ZWx2aWV3IFBsYXlUViBCb3ggNCBVU0IgMi4wICAgICAgICAgICAoZW0yODIwL2VtMjg0MCkKKyA2MiAtPiBHYWRtZWkgVFZSMjAwICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlbTI4MjAvZW0yODQwKQorIDYzIC0+IEthaW9teSBUVm5QQyBVMiAgICAgICAgICAgICAgICAgICAgICAgICAgKGVtMjg2MCkgICAgICAgIFtlYjFhOmUzMDNdCisgNjQgLT4gRWFzeSBDYXAgQ2FwdHVyZSBEQy02MCAgICAgICAgICAgICAgICAgICAoZW0yODYwKQorIDY1IC0+IElPLURBVEEgR1YtTVZQL1NaICAgICAgICAgICAgICAgICAgICAgICAgKGVtMjgyMC9lbTI4NDApIFswNGJiOjA1MTVdCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L0NBUkRMSVNULnNhYTcxMzQKaW5kZXggYjhkNDcwNS4uNmRhY2YyOCAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9DQVJETElTVC5zYWE3MTM0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvQ0FSRExJU1Quc2FhNzEzNApAQCAtMTUzLDMgKzE1Myw1IEBACiAxNTIgLT4gQXN1cyBUaWdlciBSZXY6MS4wMCAgICAgICAgICAgICAgICAgICAgICBbMTA0Mzo0ODU3XQogMTUzIC0+IEt3b3JsZCBQbHVzIFRWIEFuYWxvZyBMaXRlIFBDSSAgICAgICAgICAgWzE3ZGU6NzEyOF0KIDE1NCAtPiBBdmVybWVkaWEgQVZlclRWIEdPIDAwNyBGTSBQbHVzICAgICAgICAgIFsxNDYxOmYzMWRdCisxNTUgLT4gSGF1cHBhdWdlIFdpblRWLUhWUjExMjAgQVRTQy9RQU0tSHlicmlkICBbMDA3MDo2NzA2LDAwNzA6NjcwOF0KKzE1NiAtPiBIYXVwcGF1Z2UgV2luVFYtSFZSMTExMHIzICAgICAgICAgICAgICAgIFswMDcwOjY3MDcsMDA3MDo2NzA5LDAwNzA6NjcwYV0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvWm9yYW4gYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L1pvcmFuCmluZGV4IDI5NTQ2MmIuLjBlODllNzYgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvWm9yYW4KKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9ab3JhbgpAQCAtNDAxLDggKzQwMSw3IEBACiAgICBmaXJzdCBzZXQgdGhlIGNvcnJlY3Qgbm9ybS4gV2VsbCwgaXQgc2VlbXMgbG9naWNhbGx5IGNvcnJlY3Q6IFRWCiAgICBzdGFuZGFyZCBpcyAibW9yZSBjb25zdGFudCIgZm9yIGN1cnJlbnQgY291bnRyeSB0aGFuIGdlb21ldHJ5CiAgICBzZXR0aW5ncyBvZiBhIHZhcmlldHkgb2YgVFYgY2FwdHVyZSBjYXJkcyB3aGljaCBtYXkgd29yayBpbiBJVFUgb3IKLSAgIHNxdWFyZSBwaXhlbCBmb3JtYXQuIFJlbWVtYmVyIHRoYXQgdXNlcnMgbm93IGNhbiBsb2NrIHRoZSBub3JtIHRvCi0gICBhdm9pZCBhbnkgYW1iaWd1aXR5LgorICAgc3F1YXJlIHBpeGVsIGZvcm1hdC4KIC0tCiBQbGVhc2Ugbm90ZSB0aGF0IGxhdnBsYXkvbGF2cmVjIGFyZSBhbHNvIGluY2x1ZGVkIGluIHRoZSBNSlBFRy10b29scwogKGh0dHA6Ly9tanBlZy5zZi5uZXQvKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9JbnNtb2Qtb3B0aW9ucyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9JbnNtb2Qtb3B0aW9ucwppbmRleCA1ZWY3NTc4Li5iYmUzZWQ2IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvSW5zbW9kLW9wdGlvbnMKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L0luc21vZC1vcHRpb25zCkBAIC04MSwxNiArODEsNiBAQAogCQlwYWw9W2JkZ2lsXQlzZWxlY3QgUEFMIHZhcmlhbnQgKHVzZWQgZm9yIHNvbWUgdHVuZXJzCiAJCQkJb25seSwgaW1wb3J0YW50IGZvciB0aGUgYXVkaW8gY2FycmllcikuCiAKLXR2bWl4ZXIubwotCXJlZ2lzdGVycyBhIG1peGVyIGRldmljZSBmb3IgdGhlIFRWIGNhcmQncyB2b2x1bWUvYmFzcy90cmVibGUKLQljb250cm9scyAocmVxdWlyZXMgYSBpMmMgYXVkaW8gY29udHJvbCBjaGlwIGxpa2UgdGhlIG1zcDM0MDApLgotCi0JaW5zbW9kIGFyZ3M6Ci0JCWRlYnVnPTEJCXByaW50IHNvbWUgZGVidWcgaW5mbyB0byB0aGUgc3lzbG9nLgotCQlkZXZucj1uCQlhbGxvY2F0ZSBkZXZpY2UgI24gKDAgPT0gL2Rldi9taXhlciwKLQkJCQkxID0gL2Rldi9taXhlcjEsIC4uLiksIGRlZmF1bHQgaXMgdG8KLQkJCQl1c2UgdGhlIGZpcnN0IGZyZWUgb25lLgotCiB0dmF1ZGlvLm8KIAluZXcsIGV4cGVyaW1lbnRhbCBtb2R1bGUgd2hpY2ggaXMgc3VwcG9ydGVkIHRvIHByb3ZpZGUgYSBzaW5nbGUKIAlkcml2ZXIgZm9yIGFsbCBzaW1wbGUgaTJjIGF1ZGlvIGNvbnRyb2wgY2hpcHMgKHRkYS90ZWEqKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9SRUFETUUgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2J0dHYvUkVBRE1FCmluZGV4IDdjYTIxNTQuLjNhMzY3Y2QgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvYnR0di9SRUFETUUKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9idHR2L1JFQURNRQpAQCAtNjMsOCArNjMsOCBAQAogeW91cnNlbGYgKHBhdGNoZXMgdmVyeSB3ZWxjb21lIG9mIGNvdXJzZS4uLikgIFlvdSBrbm93OiBUaGUgbGludXgKIHNsb2dhbiBpcyAiRG8gaXQgeW91cnNlbGYiLgogCi1UaGVyZSBpcyBhIG1haWxpbmcgbGlzdDogdmlkZW80bGludXgtbGlzdEByZWRoYXQuY29tLgotaHR0cHM6Ly9saXN0bWFuLnJlZGhhdC5jb20vbWFpbG1hbi9saXN0aW5mby92aWRlbzRsaW51eC1saXN0CitUaGVyZSBpcyBhIG1haWxpbmcgbGlzdDogbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnCitodHRwOi8vdmdlci5rZXJuZWwub3JnL3ZnZXItbGlzdHMuaHRtbCNsaW51eC1tZWRpYQogCiBJZiB5b3UgaGF2ZSB0cm91YmxlIHdpdGggc29tZSBzcGVjaWZpYyBUViBjYXJkLCB0cnkgdG8gYXNrIHRoZXJlCiBpbnN0ZWFkIG9mIG1haWxpbmcgbWUgZGlyZWN0bHkuICBUaGUgY2hhbmNlIHRoYXQgc29tZW9uZSB3aXRoIHRoZQpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9jeDIzNDF4L1JFQURNRS5obTEyIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9jeDIzNDF4L1JFQURNRS5obTEyCmluZGV4IDBlMjEzZWQuLmIzNjE0OGUgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvY3gyMzQxeC9SRUFETUUuaG0xMgorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2N4MjM0MXgvUkVBRE1FLmhtMTIKQEAgLTMyLDYgKzMyLDEwIEBACiBUaGUgd2lkdGggb2YgYSBmcmFtZSBpcyBhbHdheXMgNzIwIHBpeGVscywgcmVnYXJkbGVzcyBvZiB0aGUgYWN0dWFsIHNwZWNpZmllZAogd2lkdGguCiAKK0lmIHRoZSBoZWlnaHQgaXMgbm90IGEgbXVsdGlwbGUgb2YgMzIgbGluZXMsIHRoZW4gdGhlIGNhcHR1cmVkIHZpZGVvIGlzCittaXNzaW5nIG1hY3JvYmxvY2tzIGF0IHRoZSBlbmQgYW5kIGlzIHVudXNhYmxlLiBTbyB0aGUgaGVpZ2h0IG11c3QgYmUgYQorbXVsdGlwbGUgb2YgMzIuCisKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAKICNpbmNsdWRlIDxzdGRpby5oPgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9nc3BjYS50eHQgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2dzcGNhLnR4dAppbmRleCAxYzU4YTc2Li45ODUyOWUwIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2dzcGNhLnR4dAorKysgYi9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2dzcGNhLnR4dApAQCAtMzIsNiArMzIsNyBAQAogemMzeHgJCTA0MWU6NDA1MQlDcmVhdGl2ZSBMaXZlIUNhbSBOb3RlYm9vayBQcm8gKFZGMDI1MCkKIG92NTE5CQkwNDFlOjQwNTIJQ3JlYXRpdmUgTGl2ZSEgVklTVEEgSU0KIHpjM3h4CQkwNDFlOjQwNTMJQ3JlYXRpdmUgTGl2ZSFDYW0gVmlkZW8gSU0KK3ZjMDMyeAkJMDQxZTo0MDViCUNyZWF0aXZlIExpdmUhIENhbSBOb3RlYm9vayBVbHRyYSAoVkMwMTMwKQogb3Y1MTkJCTA0MWU6NDA1ZglDcmVhdGl2ZSBMaXZlISBWSVNUQSBWRjAzMzAKIG92NTE5CQkwNDFlOjQwNjAJQ3JlYXRpdmUgTGl2ZSEgVklTVEEgVkYwMzUwCiBvdjUxOQkJMDQxZTo0MDYxCUNyZWF0aXZlIExpdmUhIFZJU1RBIFZGMDQwMApAQCAtMTkzLDYgKzE5NCw3IEBACiBzcGNhNTAwCQkwOGNhOjAxMDMJQWlwdGVrIFBvY2tldERWCiBzdW5wbHVzCQkwOGNhOjAxMDQJQWlwdGVrIFBvY2tldERWSUkgMS4zCiBzdW5wbHVzCQkwOGNhOjAxMDYJQWlwdGVrIFBvY2tldCBEVjMxMDArCittcjk3MzEwYQkwOGNhOjAxMTEJQWlwdGVrIFBlbkNhbSBWR0ErCiBzdW5wbHVzCQkwOGNhOjIwMDgJQWlwdGVrIE1pbmkgUGVuQ2FtIDIgTQogc3VucGx1cwkJMDhjYToyMDEwCUFpcHRlayBQb2NrZXRDYW0gM00KIHN1bnBsdXMJCTA4Y2E6MjAxNglBaXB0ZWsgUG9ja2V0Q2FtIDIgTWVnYQpAQCAtMjE1LDYgKzIxNyw3IEBACiBwYWMyMDcJCTA5M2E6MjQ3MAlHZW5pdXMgR0YxMTIKIHBhYzIwNwkJMDkzYToyNDcxCUdlbml1cyBWaWRlb0NhbSBnZTExMQogcGFjMjA3CQkwOTNhOjI0NzIJR2VuaXVzIFZpZGVvQ2FtIGdlMTEwCitwYWMyMDcJCTA5M2E6MjQ3NAlHZW5pdXMgaUxvb2sgMTExCiBwYWMyMDcJCTA5M2E6MjQ3NglHZW5pdXMgZS1NZXNzZW5nZXIgMTEyCiBwYWM3MzExCQkwOTNhOjI2MDAJUEFDNzMxMSBUeXBob29uCiBwYWM3MzExCQkwOTNhOjI2MDEJUGhpbGlwcyBTUEMgNjEwIE5DCkBAIC0yNzksNiArMjgyLDcgQEAKIHpjM3h4CQkxMGZkOjgwNTAJVHlwaG9vbiBXZWJzaG90IElJIFVTQiAzMDBrCiBvdjUzNAkJMTQxNToyMDAwCVNvbnkgSEQgRXllIGZvciBQUzMgKFNMRUggMDAyMDEpCiBwYWMyMDcJCTE0NWY6MDEzYQlUcnVzdCBXQi0xMzAwTgordmMwMzJ4CQkxNWI4OjYwMDEJSFAgMi4wIE1lZ2FwaXhlbAogdmMwMzJ4CQkxNWI4OjYwMDIJSFAgMi4wIE1lZ2FwaXhlbCByejQwNmFhCiBzcGNhNTAxCQkxNzc2OjUwMWMJQXJvd2FuYSAzMDBLIENNT1MgQ2FtZXJhCiB0NjEzCQkxN2ExOjAxMjgJVEFTQ09SUCBKUEVHIFdlYmNhbSwgTkdTIEN5Y2xvcHMKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvc2k0NzB4LnR4dCBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvc2k0NzB4LnR4dAppbmRleCA0OTY3OWU2Li4zYTc4MjNlIDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3NpNDcweC50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC9zaTQ3MHgudHh0CkBAIC0xLDYgKzEsNiBAQAogRHJpdmVyIGZvciBVU0IgcmFkaW9zIGZvciB0aGUgU2lsaWNvbiBMYWJzIFNpNDcweCBGTSBSYWRpbyBSZWNlaXZlcnMKIAotQ29weXJpZ2h0IChjKSAyMDA4IFRvYmlhcyBMb3JlbnogPHRvYmlhcy5sb3JlbnpAZ214Lm5ldD4KK0NvcHlyaWdodCAoYykgMjAwOSBUb2JpYXMgTG9yZW56IDx0b2JpYXMubG9yZW56QGdteC5uZXQ+CiAKIAogSW5mb3JtYXRpb24gZnJvbSBTaWxpY29uIExhYnMKQEAgLTQxLDcgKzQxLDcgQEAKIC0gMTBjNDo4MThhOiBTaWxpY29uIExhYnMgVVNCIEZNIFJhZGlvIFJlZmVyZW5jZSBEZXNpZ24KIC0gMDZlMTphMTU1OiBBRFMvVGVjaCBGTSBSYWRpbyBSZWNlaXZlciAoZm9ybWVybHkgSW5zdGFudCBGTSBNdXNpYykgKFJEWC0xNTUtRUYpCiAtIDFiODA6ZDcwMDogS1dvcmxkIFVTQiBGTSBSYWRpbyBTbmFwTXVzaWMgTW9iaWxlIDcwMCAoRk03MDApCi0tIDEwYzU6ODE5YTogRGVhbEV4dHJlbWUgVVNCIFJhZGlvCistIDEwYzU6ODE5YTogU2FuZWkgRWxlY3RyaWMsIEluYy4gRk0gVVNCIFJhZGlvIChzb2xkIGFzIERlYWxFeHRyZW1lLmNvbSBQQ2VhcikKIAogCiBTb2Z0d2FyZQpAQCAtNTIsNiArNTIsNyBAQAogLSBncmFkaW8gLSBHVEsgRk0gcmFkaW8gdHVuZXIKIC0ga3JhZGlvIC0gQ29tZm9ydGFibGUgUmFkaW8gQXBwbGljYXRpb24gZm9yIEtERQogLSByYWRpbyAtIG5jdXJzZXMtYmFzZWQgcmFkaW8gYXBwbGljYXRpb24KKy0gbXBsYXllciAtIFRoZSBVbHRpbWF0ZSBNb3ZpZSBQbGF5ZXIgRm9yIExpbnV4CiAKIFRoZXJlIGlzIGFsc28gYSBsaWJyYXJ5IGxpYnY0bCwgd2hpY2ggY2FuIGJlIHVzZWQuIEl0J3MgZ29pbmcgdG8gaGF2ZSBhIGZ1bmN0aW9uCiBmb3IgZnJlcXVlbmN5IHNlZWtpbmcsIGVpdGhlciBieSB1c2luZyBoYXJkd2FyZSBmdW5jdGlvbmFsaXR5IGFzIGluIHJhZGlvLXNpNDcweApAQCAtNjksNyArNzAsNyBAQAogVVNCIEF1ZGlvIGlzIHByb3ZpZGVkIGJ5IHRoZSBBTFNBIHNuZF91c2JfYXVkaW8gbW9kdWxlLiBJdCBpcyByZWNvbW1lbmRlZCB0bwogYWxzbyBzZWxlY3QgU05EX1VTQl9BVURJTywgYXMgdGhpcyBpcyByZXF1aXJlZCB0byBnZXQgc291bmQgZnJvbSB0aGUgcmFkaW8uIEZvcgogbGlzdGluZyB5b3UgaGF2ZSB0byByZWRpcmVjdCB0aGUgc291bmQsIGZvciBleGFtcGxlIHVzaW5nIG9uZSBvZiB0aGUgZm9sbG93aW5nCi1jb21tYW5kcy4KK2NvbW1hbmRzLiBQbGVhc2UgYWRqdXN0IHRoZSBhdWRpbyBkZXZpY2VzIHRvIHlvdXIgbmVlZHMgKC9kZXYvZHNwKiBhbmQgaHc6eCx4KS4KIAogSWYgeW91IGp1c3Qgd2FudCB0byB0ZXN0IGF1ZGlvICh2ZXJ5IHBvb3IgcXVhbGl0eSk6CiBjYXQgL2Rldi9kc3AxID4gL2Rldi9kc3AKQEAgLTgwLDYgKzgxLDEwIEBACiBJZiB5b3UgdXNlIGFydHMgdHJ5OgogYXJlY29yZCAtRCBodzoxLDAgLXI5NjAwMCAtYzIgLWYgUzE2X0xFIHwgYXJ0c2RzcCBhcGxheSAtQiAtCiAKK0lmIHlvdSB1c2UgbXBsYXllciB0cnk6CittcGxheWVyIC1yYWRpbyBhZGV2aWNlPWh3PTEuMDphcmF0ZT05NjAwMCBcCisJLXJhd2F1ZGlvIHJhdGU9OTYwMDAgXAorCXJhZGlvOi8vPGZyZXF1ZW5jeT4vY2FwdHVyZQogCiBNb2R1bGUgUGFyYW1ldGVycwogPT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsMi1mcmFtZXdvcmsudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQKaW5kZXggZmYxMjQzNy4uYTMxMTc3MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGwyLWZyYW1ld29yay50eHQKQEAgLTQ3LDcgKzQ3LDkgQEAKIDMpIENyZWF0aW5nIFY0TDIgZGV2aWNlIG5vZGVzICgvZGV2L3ZpZGVvWCwgL2Rldi92YmlYLCAvZGV2L3JhZGlvWCBhbmQKICAgIC9kZXYvdnR4WCkgYW5kIGtlZXBpbmcgdHJhY2sgb2YgZGV2aWNlLW5vZGUgc3BlY2lmaWMgZGF0YS4KIAotNCkgRmlsZWhhbmRsZS1zcGVjaWZpYyBzdHJ1Y3RzIGNvbnRhaW5pbmcgcGVyLWZpbGVoYW5kbGUgZGF0YS4KKzQpIEZpbGVoYW5kbGUtc3BlY2lmaWMgc3RydWN0cyBjb250YWluaW5nIHBlci1maWxlaGFuZGxlIGRhdGE7CisKKzUpIHZpZGVvIGJ1ZmZlciBoYW5kbGluZy4KIAogVGhpcyBpcyBhIHJvdWdoIHNjaGVtYXRpYyBvZiBob3cgaXQgYWxsIHJlbGF0ZXM6CiAKQEAgLTgyLDEyICs4NCwyMCBAQAogCXY0bDJfZGV2aWNlX3JlZ2lzdGVyKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2Rldik7CiAKIFJlZ2lzdHJhdGlvbiB3aWxsIGluaXRpYWxpemUgdGhlIHY0bDJfZGV2aWNlIHN0cnVjdCBhbmQgbGluayBkZXYtPmRyaXZlcl9kYXRhCi10byB2NGwyX2Rldi4gUmVnaXN0cmF0aW9uIHdpbGwgYWxzbyBzZXQgdjRsMl9kZXYtPm5hbWUgdG8gYSB2YWx1ZSBkZXJpdmVkIGZyb20KLWRldiAoZHJpdmVyIG5hbWUgZm9sbG93ZWQgYnkgdGhlIGJ1c19pZCwgdG8gYmUgcHJlY2lzZSkuIFlvdSBtYXkgY2hhbmdlIHRoZQotbmFtZSBhZnRlciByZWdpc3RyYXRpb24gaWYgeW91IHdhbnQuCit0byB2NGwyX2Rldi4gSWYgdjRsMl9kZXYtPm5hbWUgaXMgZW1wdHkgdGhlbiBpdCB3aWxsIGJlIHNldCB0byBhIHZhbHVlIGRlcml2ZWQKK2Zyb20gZGV2IChkcml2ZXIgbmFtZSBmb2xsb3dlZCBieSB0aGUgYnVzX2lkLCB0byBiZSBwcmVjaXNlKS4gSWYgeW91IHNldCBpdAordXAgYmVmb3JlIGNhbGxpbmcgdjRsMl9kZXZpY2VfcmVnaXN0ZXIgdGhlbiBpdCB3aWxsIGJlIHVudG91Y2hlZC4gSWYgZGV2IGlzCitOVUxMLCB0aGVuIHlvdSAqbXVzdCogc2V0dXAgdjRsMl9kZXYtPm5hbWUgYmVmb3JlIGNhbGxpbmcgdjRsMl9kZXZpY2VfcmVnaXN0ZXIuCiAKIFRoZSBmaXJzdCAnZGV2JyBhcmd1bWVudCBpcyBub3JtYWxseSB0aGUgc3RydWN0IGRldmljZSBwb2ludGVyIG9mIGEgcGNpX2RldiwKLXVzYl9kZXZpY2Ugb3IgcGxhdGZvcm1fZGV2aWNlLgordXNiX2RldmljZSBvciBwbGF0Zm9ybV9kZXZpY2UuIEl0IGlzIHJhcmUgZm9yIGRldiB0byBiZSBOVUxMLCBidXQgaXQgaGFwcGVucword2l0aCBJU0EgZGV2aWNlcyBvciB3aGVuIG9uZSBkZXZpY2UgY3JlYXRlcyBtdWx0aXBsZSBQQ0kgZGV2aWNlcywgdGh1cyBtYWtpbmcKK2l0IGltcG9zc2libGUgdG8gYXNzb2NpYXRlIHY0bDJfZGV2IHdpdGggYSBwYXJ0aWN1bGFyIHBhcmVudC4KKworWW91IGNhbiBhbHNvIHN1cHBseSBhIG5vdGlmeSgpIGNhbGxiYWNrIHRoYXQgY2FuIGJlIGNhbGxlZCBieSBzdWItZGV2aWNlcyB0bworbm90aWZ5IHlvdSBvZiBldmVudHMuIFdoZXRoZXIgeW91IG5lZWQgdG8gc2V0IHRoaXMgZGVwZW5kcyBvbiB0aGUgc3ViLWRldmljZS4KK0FueSBub3RpZmljYXRpb25zIGEgc3ViLWRldmljZSBzdXBwb3J0cyBtdXN0IGJlIGRlZmluZWQgaW4gYSBoZWFkZXIgaW4KK2luY2x1ZGUvbWVkaWEvPHN1YmRldmljZT4uaC4KIAogWW91IHVucmVnaXN0ZXIgd2l0aDoKIApAQCAtOTUsNiArMTA1LDE3IEBACiAKIFVucmVnaXN0ZXJpbmcgd2lsbCBhbHNvIGF1dG9tYXRpY2FsbHkgdW5yZWdpc3RlciBhbGwgc3ViZGV2cyBmcm9tIHRoZSBkZXZpY2UuCiAKK0lmIHlvdSBoYXZlIGEgaG90cGx1Z2dhYmxlIGRldmljZSAoZS5nLiBhIFVTQiBkZXZpY2UpLCB0aGVuIHdoZW4gYSBkaXNjb25uZWN0CitoYXBwZW5zIHRoZSBwYXJlbnQgZGV2aWNlIGJlY29tZXMgaW52YWxpZC4gU2luY2UgdjRsMl9kZXZpY2UgaGFzIGEgcG9pbnRlciB0bwordGhhdCBwYXJlbnQgZGV2aWNlIGl0IGhhcyB0byBiZSBjbGVhcmVkIGFzIHdlbGwgdG8gbWFyayB0aGF0IHRoZSBwYXJlbnQgaXMKK2dvbmUuIFRvIGRvIHRoaXMgY2FsbDoKKworCXY0bDJfZGV2aWNlX2Rpc2Nvbm5lY3Qoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2Rldik7CisKK1RoaXMgZG9lcyAqbm90KiB1bnJlZ2lzdGVyIHRoZSBzdWJkZXZzLCBzbyB5b3Ugc3RpbGwgbmVlZCB0byBjYWxsIHRoZQordjRsMl9kZXZpY2VfdW5yZWdpc3RlcigpIGZ1bmN0aW9uIGZvciB0aGF0LiBJZiB5b3VyIGRyaXZlciBpcyBub3QgaG90cGx1Z2dhYmxlLAordGhlbiB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGwgdjRsMl9kZXZpY2VfZGlzY29ubmVjdCgpLgorCiBTb21ldGltZXMgeW91IG5lZWQgdG8gaXRlcmF0ZSBvdmVyIGFsbCBkZXZpY2VzIHJlZ2lzdGVyZWQgYnkgYSBzcGVjaWZpYwogZHJpdmVyLiBUaGlzIGlzIHVzdWFsbHkgdGhlIGNhc2UgaWYgbXVsdGlwbGUgZGV2aWNlIGRyaXZlcnMgdXNlIHRoZSBzYW1lCiBoYXJkd2FyZS4gRS5nLiB0aGUgaXZ0dmZiIGRyaXZlciBpcyBhIGZyYW1lYnVmZmVyIGRyaXZlciB0aGF0IHVzZXMgdGhlIGl2dHYKQEAgLTEzNCw3ICsxNTUsNyBAQAogCiBzdGF0aWMgYXRvbWljX3QgZHJ2X2luc3RhbmNlID0gQVRPTUlDX0lOSVQoMCk7CiAKLXN0YXRpYyBpbnQgX19kZXZpbml0IGRydl9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqZGV2LAorc3RhdGljIGludCBfX2RldmluaXQgZHJ2X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCiB7CiAJLi4uCkBAIC0yMTgsNyArMjM5LDcgQEAKIAogQSBzdWItZGV2aWNlIGRyaXZlciBpbml0aWFsaXplcyB0aGUgdjRsMl9zdWJkZXYgc3RydWN0IHVzaW5nOgogCi0JdjRsMl9zdWJkZXZfaW5pdChzdWJkZXYsICZvcHMpOworCXY0bDJfc3ViZGV2X2luaXQoc2QsICZvcHMpOwogCiBBZnRlcndhcmRzIHlvdSBuZWVkIHRvIGluaXRpYWxpemUgc3ViZGV2LT5uYW1lIHdpdGggYSB1bmlxdWUgbmFtZSBhbmQgc2V0IHRoZQogbW9kdWxlIG93bmVyLiBUaGlzIGlzIGRvbmUgZm9yIHlvdSBpZiB5b3UgdXNlIHRoZSBpMmMgaGVscGVyIGZ1bmN0aW9ucy4KQEAgLTIyNiw3ICsyNDcsNyBAQAogQSBkZXZpY2UgKGJyaWRnZSkgZHJpdmVyIG5lZWRzIHRvIHJlZ2lzdGVyIHRoZSB2NGwyX3N1YmRldiB3aXRoIHRoZQogdjRsMl9kZXZpY2U6CiAKLQlpbnQgZXJyID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2KGRldmljZSwgc3ViZGV2KTsKKwlpbnQgZXJyID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2KHY0bDJfZGV2LCBzZCk7CiAKIFRoaXMgY2FuIGZhaWwgaWYgdGhlIHN1YmRldiBtb2R1bGUgZGlzYXBwZWFyZWQgYmVmb3JlIGl0IGNvdWxkIGJlIHJlZ2lzdGVyZWQuCiBBZnRlciB0aGlzIGZ1bmN0aW9uIHdhcyBjYWxsZWQgc3VjY2Vzc2Z1bGx5IHRoZSBzdWJkZXYtPmRldiBmaWVsZCBwb2ludHMgdG8KQEAgLTIzNCwxNyArMjU1LDE3IEBACiAKIFlvdSBjYW4gdW5yZWdpc3RlciBhIHN1Yi1kZXZpY2UgdXNpbmc6CiAKLQl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzdWJkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKIAotQWZ0ZXJ3YXJkcyB0aGUgc3ViZGV2IG1vZHVsZSBjYW4gYmUgdW5sb2FkZWQgYW5kIHN1YmRldi0+ZGV2ID09IE5VTEwuCitBZnRlcndhcmRzIHRoZSBzdWJkZXYgbW9kdWxlIGNhbiBiZSB1bmxvYWRlZCBhbmQgc2QtPmRldiA9PSBOVUxMLgogCiBZb3UgY2FuIGNhbGwgYW4gb3BzIGZ1bmN0aW9uIGVpdGhlciBkaXJlY3RseToKIAotCWVyciA9IHN1YmRldi0+b3BzLT5jb3JlLT5nX2NoaXBfaWRlbnQoc3ViZGV2LCAmY2hpcCk7CisJZXJyID0gc2QtPm9wcy0+Y29yZS0+Z19jaGlwX2lkZW50KHNkLCAmY2hpcCk7CiAKIGJ1dCBpdCBpcyBiZXR0ZXIgYW5kIGVhc2llciB0byB1c2UgdGhpcyBtYWNybzoKIAotCWVyciA9IHY0bDJfc3ViZGV2X2NhbGwoc3ViZGV2LCBjb3JlLCBnX2NoaXBfaWRlbnQsICZjaGlwKTsKKwllcnIgPSB2NGwyX3N1YmRldl9jYWxsKHNkLCBjb3JlLCBnX2NoaXBfaWRlbnQsICZjaGlwKTsKIAogVGhlIG1hY3JvIHdpbGwgdG8gdGhlIHJpZ2h0IE5VTEwgcG9pbnRlciBjaGVja3MgYW5kIHJldHVybnMgLUVOT0RFViBpZiBzdWJkZXYKIGlzIE5VTEwsIC1FTk9JT0NUTENNRCBpZiBlaXRoZXIgc3ViZGV2LT5jb3JlIG9yIHN1YmRldi0+Y29yZS0+Z19jaGlwX2lkZW50IGlzCkBAIC0yNTIsMTkgKzI3MywxOSBAQAogCiBJdCBpcyBhbHNvIHBvc3NpYmxlIHRvIGNhbGwgYWxsIG9yIGEgc3Vic2V0IG9mIHRoZSBzdWItZGV2aWNlczoKIAotCXY0bDJfZGV2aWNlX2NhbGxfYWxsKGRldiwgMCwgY29yZSwgZ19jaGlwX2lkZW50LCAmY2hpcCk7CisJdjRsMl9kZXZpY2VfY2FsbF9hbGwodjRsMl9kZXYsIDAsIGNvcmUsIGdfY2hpcF9pZGVudCwgJmNoaXApOwogCiBBbnkgc3ViZGV2IHRoYXQgZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG9wcyBpcyBza2lwcGVkIGFuZCBlcnJvciByZXN1bHRzIGFyZQogaWdub3JlZC4gSWYgeW91IHdhbnQgdG8gY2hlY2sgZm9yIGVycm9ycyB1c2UgdGhpczoKIAotCWVyciA9IHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKGRldiwgMCwgY29yZSwgZ19jaGlwX2lkZW50LCAmY2hpcCk7CisJZXJyID0gdjRsMl9kZXZpY2VfY2FsbF91bnRpbF9lcnIodjRsMl9kZXYsIDAsIGNvcmUsIGdfY2hpcF9pZGVudCwgJmNoaXApOwogCiBBbnkgZXJyb3IgZXhjZXB0IC1FTk9JT0NUTENNRCB3aWxsIGV4aXQgdGhlIGxvb3Agd2l0aCB0aGF0IGVycm9yLiBJZiBubwogZXJyb3JzIChleGNlcHQgLUVOT0lPQ1RMQ01EKSBvY2N1cmVkLCB0aGVuIDAgaXMgcmV0dXJuZWQuCiAKIFRoZSBzZWNvbmQgYXJndW1lbnQgdG8gYm90aCBjYWxscyBpcyBhIGdyb3VwIElELiBJZiAwLCB0aGVuIGFsbCBzdWJkZXZzIGFyZQogY2FsbGVkLiBJZiBub24temVybywgdGhlbiBvbmx5IHRob3NlIHdob3NlIGdyb3VwIElEIG1hdGNoIHRoYXQgdmFsdWUgd2lsbAotYmUgY2FsbGVkLiBCZWZvcmUgYSBicmlkZ2UgZHJpdmVyIHJlZ2lzdGVycyBhIHN1YmRldiBpdCBjYW4gc2V0IHN1YmRldi0+Z3JwX2lkCitiZSBjYWxsZWQuIEJlZm9yZSBhIGJyaWRnZSBkcml2ZXIgcmVnaXN0ZXJzIGEgc3ViZGV2IGl0IGNhbiBzZXQgc2QtPmdycF9pZAogdG8gd2hhdGV2ZXIgdmFsdWUgaXQgd2FudHMgKGl0J3MgMCBieSBkZWZhdWx0KS4gVGhpcyB2YWx1ZSBpcyBvd25lZCBieSB0aGUKIGJyaWRnZSBkcml2ZXIgYW5kIHRoZSBzdWItZGV2aWNlIGRyaXZlciB3aWxsIG5ldmVyIG1vZGlmeSBvciB1c2UgaXQuCiAKQEAgLTI3Niw2ICsyOTcsMTEgQEAKIHY0bDJfZGV2aWNlX2NhbGxfYWxsKCkuIFRoYXQgZW5zdXJlcyB0aGF0IGl0IHdpbGwgb25seSBnbyB0byB0aGUgc3ViZGV2CiB0aGF0IG5lZWRzIGl0LgogCitJZiB0aGUgc3ViLWRldmljZSBuZWVkcyB0byBub3RpZnkgaXRzIHY0bDJfZGV2aWNlIHBhcmVudCBvZiBhbiBldmVudCwgdGhlbgoraXQgY2FuIGNhbGwgdjRsMl9zdWJkZXZfbm90aWZ5KHNkLCBub3RpZmljYXRpb24sIGFyZykuIFRoaXMgbWFjcm8gY2hlY2tzCit3aGV0aGVyIHRoZXJlIGlzIGEgbm90aWZ5KCkgY2FsbGJhY2sgZGVmaW5lZCBhbmQgcmV0dXJucyAtRU5PREVWIGlmIG5vdC4KK090aGVyd2lzZSB0aGUgcmVzdWx0IG9mIHRoZSBub3RpZnkoKSBjYWxsIGlzIHJldHVybmVkLgorCiBUaGUgYWR2YW50YWdlIG9mIHVzaW5nIHY0bDJfc3ViZGV2IGlzIHRoYXQgaXQgaXMgYSBnZW5lcmljIHN0cnVjdCBhbmQgZG9lcwogbm90IGNvbnRhaW4gYW55IGtub3dsZWRnZSBhYm91dCB0aGUgdW5kZXJseWluZyBoYXJkd2FyZS4gU28gYSBkcml2ZXIgbWlnaHQKIGNvbnRhaW4gc2V2ZXJhbCBzdWJkZXZzIHRoYXQgdXNlIGFuIEkyQyBidXMsIGJ1dCBhbHNvIGEgc3ViZGV2IHRoYXQgaXMKQEAgLTM0MCw2ICszNjYsMTIgQEAKIGlzIGNhbGxlZC4gVGhpcyB3aWxsIHVucmVnaXN0ZXIgdGhlIHN1Yi1kZXZpY2UgZnJvbSB0aGUgYnJpZGdlIGRyaXZlci4gSXQgaXMKIHNhZmUgdG8gY2FsbCB0aGlzIGV2ZW4gaWYgdGhlIHN1Yi1kZXZpY2Ugd2FzIG5ldmVyIHJlZ2lzdGVyZWQuCiAKK1lvdSBuZWVkIHRvIGRvIHRoaXMgYmVjYXVzZSB3aGVuIHRoZSBicmlkZ2UgZHJpdmVyIGRlc3Ryb3lzIHRoZSBpMmMgYWRhcHRlcgordGhlIHJlbW92ZSgpIGNhbGxiYWNrcyBhcmUgY2FsbGVkIG9mIHRoZSBpMmMgZGV2aWNlcyBvbiB0aGF0IGFkYXB0ZXIuCitBZnRlciB0aGF0IHRoZSBjb3JyZXNwb25kaW5nIHY0bDJfc3ViZGV2IHN0cnVjdHVyZXMgYXJlIGludmFsaWQsIHNvIHRoZXkKK2hhdmUgdG8gYmUgdW5yZWdpc3RlcmVkIGZpcnN0LiBDYWxsaW5nIHY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKQorZnJvbSB0aGUgcmVtb3ZlKCkgY2FsbGJhY2sgZW5zdXJlcyB0aGF0IHRoaXMgaXMgYWx3YXlzIGRvbmUgY29ycmVjdGx5LgorCiAKIFRoZSBicmlkZ2UgZHJpdmVyIGFsc28gaGFzIHNvbWUgaGVscGVyIGZ1bmN0aW9ucyBpdCBjYW4gdXNlOgogCkBAIC0zNDksOCArMzgxLDggQEAKIGNhbGxzIGkyY19uZXdfZGV2aWNlKCkgd2l0aCB0aGUgZ2l2ZW4gaTJjX2FkYXB0ZXIgYW5kIGNoaXAvYWRkcmVzcyBhcmd1bWVudHMuCiBJZiBhbGwgZ29lcyB3ZWxsLCB0aGVuIGl0IHJlZ2lzdGVycyB0aGUgc3ViZGV2IHdpdGggdGhlIHY0bDJfZGV2aWNlLiBJdCBnZXRzCiB0aGUgdjRsMl9kZXZpY2UgYnkgY2FsbGluZyBpMmNfZ2V0X2FkYXBkYXRhKGFkYXB0ZXIpLCBzbyB5b3Ugc2hvdWxkIG1ha2Ugc3VyZQotdGhhdCBhZGFwZGF0YSBpcyBzZXQgdG8gdjRsMl9kZXZpY2Ugd2hlbiB5b3Ugc2V0dXAgdGhlIGkyY19hZGFwdGVyIGluIHlvdXIKLWRyaXZlci4KK3RvIGNhbGwgaTJjX3NldF9hZGFwZGF0YShhZGFwdGVyLCB2NGwyX2RldmljZSkgd2hlbiB5b3Ugc2V0dXAgdGhlIGkyY19hZGFwdGVyCitpbiB5b3VyIGRyaXZlci4KIAogWW91IGNhbiBhbHNvIHVzZSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigpIHdoaWNoIGlzIHZlcnkgc2ltaWxhciB0bwogdjRsMl9pMmNfbmV3X3N1YmRldigpLCBleGNlcHQgdGhhdCBpdCBoYXMgYW4gYXJyYXkgb2YgcG9zc2libGUgSTJDIGFkZHJlc3NlcwpAQCAtMzU4LDYgKzM5MCwxNCBAQAogCiBCb3RoIGZ1bmN0aW9ucyByZXR1cm4gTlVMTCBpZiBzb21ldGhpbmcgd2VudCB3cm9uZy4KIAorTm90ZSB0aGF0IHRoZSBjaGlwaWQgeW91IHBhc3MgdG8gdjRsMl9pMmNfbmV3Xyhwcm9iZWRfKXN1YmRldigpIGlzIHVzdWFsbHkKK3RoZSBzYW1lIGFzIHRoZSBtb2R1bGUgbmFtZS4gSXQgYWxsb3dzIHlvdSB0byBzcGVjaWZ5IGEgY2hpcCB2YXJpYW50LCBlLmcuCisic2FhNzExNCIgb3IgInNhYTcxMTUiLiBJbiBnZW5lcmFsIHRob3VnaCB0aGUgaTJjIGRyaXZlciBhdXRvZGV0ZWN0cyB0aGlzLgorVGhlIHVzZSBvZiBjaGlwaWQgaXMgc29tZXRoaW5nIHRoYXQgbmVlZHMgdG8gYmUgbG9va2VkIGF0IG1vcmUgY2xvc2VseSBhdCBhCitsYXRlciBkYXRlLiBJdCBkaWZmZXJzIGJldHdlZW4gaTJjIGRyaXZlcnMgYW5kIGFzIHN1Y2ggY2FuIGJlIGNvbmZ1c2luZy4KK1RvIHNlZSB3aGljaCBjaGlwIHZhcmlhbnRzIGFyZSBzdXBwb3J0ZWQgeW91IGNhbiBsb29rIGluIHRoZSBpMmMgZHJpdmVyIGNvZGUKK2ZvciB0aGUgaTJjX2RldmljZV9pZCB0YWJsZS4gVGhpcyBsaXN0cyBhbGwgdGhlIHBvc3NpYmlsaXRpZXMuCisKIAogc3RydWN0IHZpZGVvX2RldmljZQogLS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtMzk2LDYgKzQzNiwxNSBAQAogLSBpb2N0bF9vcHM6IGlmIHlvdSB1c2UgdGhlIHY0bDJfaW9jdGxfb3BzIHRvIHNpbXBsaWZ5IGlvY3RsIG1haW50ZW5hbmNlCiAgIChoaWdobHkgcmVjb21tZW5kZWQgdG8gdXNlIHRoaXMgYW5kIGl0IG1pZ2h0IGJlY29tZSBjb21wdWxzb3J5IGluIHRoZQogICBmdXR1cmUhKSwgdGhlbiBzZXQgdGhpcyB0byB5b3VyIHY0bDJfaW9jdGxfb3BzIHN0cnVjdC4KKy0gcGFyZW50OiB5b3Ugb25seSBzZXQgdGhpcyBpZiB2NGwyX2RldmljZSB3YXMgcmVnaXN0ZXJlZCB3aXRoIE5VTEwgYXMKKyAgdGhlIHBhcmVudCBkZXZpY2Ugc3RydWN0LiBUaGlzIG9ubHkgaGFwcGVucyBpbiBjYXNlcyB3aGVyZSBvbmUgaGFyZHdhcmUKKyAgZGV2aWNlIGhhcyBtdWx0aXBsZSBQQ0kgZGV2aWNlcyB0aGF0IGFsbCBzaGFyZSB0aGUgc2FtZSB2NGwyX2RldmljZSBjb3JlLgorCisgIFRoZSBjeDg4IGRyaXZlciBpcyBhbiBleGFtcGxlIG9mIHRoaXM6IG9uZSBjb3JlIHY0bDJfZGV2aWNlIHN0cnVjdCwgYnV0CisgIGl0IGlzIHVzZWQgYnkgYm90aCBhbiByYXcgdmlkZW8gUENJIGRldmljZSAoY3g4ODAwKSBhbmQgYSBNUEVHIFBDSSBkZXZpY2UKKyAgKGN4ODgwMikuIFNpbmNlIHRoZSB2NGwyX2RldmljZSBjYW5ub3QgYmUgYXNzb2NpYXRlZCB3aXRoIGEgcGFydGljdWxhcgorICBQQ0kgZGV2aWNlIGl0IGlzIHNldHVwIHdpdGhvdXQgYSBwYXJlbnQgZGV2aWNlLiBCdXQgd2hlbiB0aGUgc3RydWN0CisgIHZpZGVvX2RldmljZSBpcyBzZXR1cCB5b3UgZG8ga25vdyB3aGljaCBwYXJlbnQgUENJIGRldmljZSB0byB1c2UuCiAKIElmIHlvdSB1c2UgdjRsMl9pb2N0bF9vcHMsIHRoZW4geW91IHNob3VsZCBzZXQgZWl0aGVyIC51bmxvY2tlZF9pb2N0bCBvcgogLmlvY3RsIHRvIHZpZGVvX2lvY3RsMiBpbiB5b3VyIHY0bDJfZmlsZV9vcGVyYXRpb25zIHN0cnVjdC4KQEAgLTQ5OSw4ICs1NDgsOCBAQAogCiBZb3UgY2FuIHNldC9nZXQgZHJpdmVyIHByaXZhdGUgZGF0YSBpbiB0aGUgdmlkZW9fZGV2aWNlIHN0cnVjdCB1c2luZzoKIAotdm9pZCAqdmlkZW9fZ2V0X2RydmRhdGEoc3RydWN0IHZpZGVvX2RldmljZSAqZGV2KTsKLXZvaWQgdmlkZW9fc2V0X2RydmRhdGEoc3RydWN0IHZpZGVvX2RldmljZSAqZGV2LCB2b2lkICpkYXRhKTsKK3ZvaWQgKnZpZGVvX2dldF9kcnZkYXRhKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYpOwordm9pZCB2aWRlb19zZXRfZHJ2ZGF0YShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2LCB2b2lkICpkYXRhKTsKIAogTm90ZSB0aGF0IHlvdSBjYW4gc2FmZWx5IGNhbGwgdmlkZW9fc2V0X2RydmRhdGEoKSBiZWZvcmUgY2FsbGluZwogdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCkuCkBAIC01MTksMyArNTY4LDEwMyBAQAogWW91IGNhbiBnbyBmcm9tIGEgdmlkZW9fZGV2aWNlIHN0cnVjdCB0byB0aGUgdjRsMl9kZXZpY2Ugc3RydWN0IHVzaW5nOgogCiBzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gdmRldi0+djRsMl9kZXY7CisKK3ZpZGVvIGJ1ZmZlciBoZWxwZXIgZnVuY3Rpb25zCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCitUaGUgdjRsMiBjb3JlIEFQSSBwcm92aWRlcyBhIHN0YW5kYXJkIG1ldGhvZCBmb3IgZGVhbGluZyB3aXRoIHZpZGVvCitidWZmZXJzLiBUaG9zZSBtZXRob2RzIGFsbG93IGEgZHJpdmVyIHRvIGltcGxlbWVudCByZWFkKCksIG1tYXAoKSBhbmQKK292ZXJsYXkoKSBvbiBhIGNvbnNpc3RlbnQgd2F5LgorCitUaGVyZSBhcmUgY3VycmVudGx5IG1ldGhvZHMgZm9yIHVzaW5nIHZpZGVvIGJ1ZmZlcnMgb24gZGV2aWNlcyB0aGF0CitzdXBwb3J0cyBETUEgd2l0aCBzY2F0dGVyL2dhdGhlciBtZXRob2QgKHZpZGVvYnVmLWRtYS1zZyksIERNQSB3aXRoCitsaW5lYXIgYWNjZXNzICh2aWRlb2J1Zi1kbWEtY29udGlnKSwgYW5kIHZtYWxsb2NlZCBidWZmZXJzLCBtb3N0bHkKK3VzZWQgb24gVVNCIGRyaXZlcnMgKHZpZGVvYnVmLXZtYWxsb2MpLgorCitBbnkgZHJpdmVyIHVzaW5nIHZpZGVvYnVmIHNob3VsZCBwcm92aWRlIG9wZXJhdGlvbnMgKGNhbGxiYWNrcykgZm9yCitmb3VyIGhhbmRsZXJzOgorCitvcHMtPmJ1Zl9zZXR1cCAgIC0gY2FsY3VsYXRlcyB0aGUgc2l6ZSBvZiB0aGUgdmlkZW8gYnVmZmVycyBhbmQgYXZvaWQgdGhleQorCQkgICB0byB3YXN0ZSBtb3JlIHRoYW4gc29tZSBtYXhpbXVtIGxpbWl0IG9mIFJBTTsKK29wcy0+YnVmX3ByZXBhcmUgLSBmaWxscyB0aGUgdmlkZW8gYnVmZmVyIHN0cnVjdHMgYW5kIGNhbGxzCisJCSAgIHZpZGVvYnVmX2lvbG9jaygpIHRvIGFsbG9jIGFuZCBwcmVwYXJlIG1tYXBlZCBtZW1vcnk7CitvcHMtPmJ1Zl9xdWV1ZSAgIC0gYWR2aWNlcyB0aGUgZHJpdmVyIHRoYXQgYW5vdGhlciBidWZmZXIgd2VyZQorCQkgICByZXF1ZXN0ZWQgKGJ5IHJlYWQoKSBvciBieSBRQlVGKTsKK29wcy0+YnVmX3JlbGVhc2UgLSBmcmVlcyBhbnkgYnVmZmVyIHRoYXQgd2VyZSBhbGxvY2F0ZWQuCisKK0luIG9yZGVyIHRvIHVzZSBpdCwgdGhlIGRyaXZlciBuZWVkIHRvIGhhdmUgYSBjb2RlIChnZW5lcmFsbHkgY2FsbGVkIGF0CitpbnRlcnJ1cHQgY29udGV4dCkgdGhhdCB3aWxsIHByb3Blcmx5IGhhbmRsZSB0aGUgYnVmZmVyIHJlcXVlc3QgbGlzdHMsCithbm5vdW5jaW5nIHRoYXQgYSBuZXcgYnVmZmVyIHdlcmUgZmlsbGVkLgorCitUaGUgaXJxIGhhbmRsaW5nIGNvZGUgc2hvdWxkIGhhbmRsZSB0aGUgdmlkZW9idWYgdGFzayBsaXN0cywgaW4gb3JkZXIKK3RvIGFkdmljZSB2aWRlb2J1ZiB0aGF0IGEgbmV3IGZyYW1lIHdlcmUgZmlsbGVkLCBpbiBvcmRlciB0byBob25vciB0byBhCityZXF1ZXN0LiBUaGUgY29kZSBpcyBnZW5lcmFsbHkgbGlrZSB0aGlzIG9uZToKKwlpZiAobGlzdF9lbXB0eSgmZG1hX3EtPmFjdGl2ZSkpCisJCXJldHVybjsKKworCWJ1ZiA9IGxpc3RfZW50cnkoZG1hX3EtPmFjdGl2ZS5uZXh0LCBzdHJ1Y3QgdmJ1ZmZlciwgdmIucXVldWUpOworCisJaWYgKCF3YWl0cXVldWVfYWN0aXZlKCZidWYtPnZiLmRvbmUpKQorCQlyZXR1cm47CisKKwkvKiBTb21lIGxvZ2ljIHRvIGhhbmRsZSB0aGUgYnVmIG1heSBiZSBuZWVkZWQgaGVyZSAqLworCisJbGlzdF9kZWwoJmJ1Zi0+dmIucXVldWUpOworCWRvX2dldHRpbWVvZmRheSgmYnVmLT52Yi50cyk7CisJd2FrZV91cCgmYnVmLT52Yi5kb25lKTsKKworVGhvc2UgYXJlIHRoZSB2aWRlb2J1ZmZlciBmdW5jdGlvbnMgdXNlZCBvbiBkcml2ZXJzLCBpbXBsZW1lbnRlZCBvbgordmlkZW9idWYtY29yZToKKworLSBWaWRlb2J1ZiBpbml0IGZ1bmN0aW9ucworICB2aWRlb2J1Zl9xdWV1ZV9zZ19pbml0KCkKKyAgICAgIEluaXRpYWxpemVzIHRoZSB2aWRlb2J1ZiBpbmZyYXN0cnVjdHVyZS4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUKKyAgICAgIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIHZpZGVvYnVmIGZ1bmN0aW9uIG9uIGRyaXZlcnMgdGhhdCB1c2VzIERNQQorICAgICAgU2NhdHRlci9HYXRoZXIgYnVmZmVycy4KKworICB2aWRlb2J1Zl9xdWV1ZV9kbWFfY29udGlnX2luaXQKKyAgICAgIEluaXRpYWxpemVzIHRoZSB2aWRlb2J1ZiBpbmZyYXN0cnVjdHVyZS4gVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUKKyAgICAgIGNhbGxlZCBiZWZvcmUgYW55IG90aGVyIHZpZGVvYnVmIGZ1bmN0aW9uIG9uIGRyaXZlcnMgdGhhdCBuZWVkIERNQQorICAgICAgY29udGlndW91cyBidWZmZXJzLgorCisgIHZpZGVvYnVmX3F1ZXVlX3ZtYWxsb2NfaW5pdCgpCisgICAgICBJbml0aWFsaXplcyB0aGUgdmlkZW9idWYgaW5mcmFzdHJ1Y3R1cmUuIFRoaXMgZnVuY3Rpb24gc2hvdWxkIGJlCisgICAgICBjYWxsZWQgYmVmb3JlIGFueSBvdGhlciB2aWRlb2J1ZiBmdW5jdGlvbiBvbiBVU0IgKGFuZCBvdGhlciBkcml2ZXJzKQorICAgICAgdGhhdCBuZWVkIGEgdm1hbGxvY2VkIHR5cGUgb2YgdmlkZW9idWYuCisKKy0gdmlkZW9idWZfaW9sb2NrKCkKKyAgUHJlcGFyZXMgdGhlIHZpZGVvYnVmIG1lbW9yeSBmb3IgdGhlIHByb3BlciBtZXRob2QgKHJlYWQsIG1tYXAsIG92ZXJsYXkpLgorCistIHZpZGVvYnVmX3F1ZXVlX2lzX2J1c3koKQorICBDaGVja3MgaWYgYSB2aWRlb2J1ZiBpcyBzdHJlYW1pbmcuCisKKy0gdmlkZW9idWZfcXVldWVfY2FuY2VsKCkKKyAgU3RvcHMgdmlkZW8gaGFuZGxpbmcuCisKKy0gdmlkZW9idWZfbW1hcF9mcmVlKCkKKyAgZnJlZXMgbW1hcCBidWZmZXJzLgorCistIHZpZGVvYnVmX3N0b3AoKQorICBTdG9wcyB2aWRlbyBoYW5kbGluZywgZW5kcyBtbWFwIGFuZCBmcmVlcyBtbWFwIGFuZCBvdGhlciBidWZmZXJzLgorCistIFY0TDIgYXBpIGZ1bmN0aW9ucy4gVGhvc2UgZnVuY3Rpb25zIGNvcnJlc3BvbmQgdG8gVklESU9DX2ZvbyBpb2N0bHM6CisgICB2aWRlb2J1Zl9yZXFidWZzKCksIHZpZGVvYnVmX3F1ZXJ5YnVmKCksIHZpZGVvYnVmX3FidWYoKSwKKyAgIHZpZGVvYnVmX2RxYnVmKCksIHZpZGVvYnVmX3N0cmVhbW9uKCksIHZpZGVvYnVmX3N0cmVhbW9mZigpLgorCistIFY0TDEgYXBpIGZ1bmN0aW9uIChjb3JyZXNwb25kcyB0byBWSURJT0NNQlVGIGlvY3RsKToKKyAgIHZpZGVvYnVmX2NnbWJ1ZigpCisgICAgICBUaGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gcHJvdmlkZSBiYWNrd2FyZCBjb21wYXRpYmlsaXR5IHdpdGggVjRMMQorICAgICAgQVBJLgorCistIFNvbWUgaGVscCBmdW5jdGlvbnMgZm9yIHJlYWQoKS9wb2xsKCkgb3BlcmF0aW9uczoKKyAgIHZpZGVvYnVmX3JlYWRfc3RyZWFtKCkKKyAgICAgIEZvciBjb250aW51b3VzIHN0cmVhbSByZWFkKCkKKyAgIHZpZGVvYnVmX3JlYWRfb25lKCkKKyAgICAgIEZvciBzbmFwc2hvdCByZWFkKCkKKyAgIHZpZGVvYnVmX3BvbGxfc3RyZWFtKCkKKyAgICAgIHBvbGxpbmcgaGVscCBmdW5jdGlvbgorCitUaGUgYmV0dGVyIHdheSB0byB1bmRlcnN0YW5kIGl0IGlzIHRvIHRha2UgYSBsb29rIGF0IHZpdmkgZHJpdmVyLiBPbmUKK29mIHRoZSBtYWluIHJlYXNvbnMgZm9yIHZpdmkgaXMgdG8gYmUgYSB2aWRlb2J1ZiB1c2FnZSBleGFtcGxlLiB0aGUKK3ZpdmlfdGhyZWFkX3RpY2soKSBkb2VzIHRoZSB0YXNrIHRoYXQgdGhlIElSUSBjYWxsYmFjayB3b3VsZCBkbyBvbiBQQ0kKK2RyaXZlcnMgKG9yIHRoZSBpcnEgY2FsbGJhY2sgb24gVVNCKS4KZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvdjRsZ3JhYi5jIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGxncmFiLmMKaW5kZXggZDZlNzBiZS4uMDU3NjljZiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGxncmFiLmMKKysrIGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC92NGxncmFiLmMKQEAgLTEwNSw4ICsxMDUsOCBAQAogICBzdHJ1Y3QgdmlkZW9fcGljdHVyZSB2cGljOwogCiAgIHVuc2lnbmVkIGNoYXIgKmJ1ZmZlciwgKnNyYzsKLSAgaW50IGJwcCA9IDI0LCByLCBnLCBiOwotICB1bnNpZ25lZCBpbnQgaSwgc3JjX2RlcHRoOworICBpbnQgYnBwID0gMjQsIHIgPSAwLCBnID0gMCwgYiA9IDA7CisgIHVuc2lnbmVkIGludCBpLCBzcmNfZGVwdGggPSAxNjsKIAogICBpZiAoZmQgPCAwKSB7CiAgICAgcGVycm9yKFZJREVPX0RFVik7CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3pyMzY0eHgudHh0IGIvRG9jdW1lbnRhdGlvbi92aWRlbzRsaW51eC96cjM2NHh4LnR4dAppbmRleCA1YzgxZTNhLi43ZjNkMTk1IDEwMDY0NAotLS0gYS9Eb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L3pyMzY0eHgudHh0CisrKyBiL0RvY3VtZW50YXRpb24vdmlkZW80bGludXgvenIzNjR4eC50eHQKQEAgLTY1LDMgKzY1LDQgQEAKIDB4MDZkNiAgMHgwMDNiICAgVHJ1c3QgICAgICAgICAgIFBvd2VyY0BtIDk3MFoKIDB4MGExNyAgMHgwMDRlICAgUGVudGF4ICAgICAgICAgIE9wdGlvIDUwCiAweDA0MWUgIDB4NDA1ZCAgIENyZWF0aXZlICAgICAgICBEaVZpIENBTSA1MTYKKzB4MDhjYSAgMHgyMTAyICAgQWlwdGVrICAgICAgICAgIERWIFQzMDAKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24veDg2L2Vhcmx5cHJpbnRrLnR4dCBiL0RvY3VtZW50YXRpb24veDg2L2Vhcmx5cHJpbnRrLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MDdiMWEwCi0tLSAvZGV2L251bGwKKysrIGIvRG9jdW1lbnRhdGlvbi94ODYvZWFybHlwcmludGsudHh0CkBAIC0wLDAgKzEsMTAxIEBACisKK01pbmktSE9XVE8gZm9yIHVzaW5nIHRoZSBlYXJseXByaW50az1kYmdwIGJvb3Qgb3B0aW9uIHdpdGggYQorVVNCMiBEZWJ1ZyBwb3J0IGtleSBhbmQgYSBkZWJ1ZyBjYWJsZSwgb24geDg2IHN5c3RlbXMuCisKK1lvdSBuZWVkIHR3byBjb21wdXRlcnMsIHRoZSAnVVNCIGRlYnVnIGtleScgc3BlY2lhbCBnYWRnZXQgYW5kCithbmQgdHdvIFVTQiBjYWJsZXMsIGNvbm5lY3RlZCBsaWtlIHRoaXM6CisKKyAgW2hvc3QvdGFyZ2V0XSA8LS0tLS0tLT4gW1VTQiBkZWJ1ZyBrZXldIDwtLS0tLS0tPiBbY2xpZW50L2NvbnNvbGVdCisKKzEuIFRoZXJlIGFyZSB0aHJlZSBzcGVjaWZpYyBoYXJkd2FyZSByZXF1aXJlbWVudHM6CisKKyBhLikgSG9zdC90YXJnZXQgc3lzdGVtIG5lZWRzIHRvIGhhdmUgVVNCIGRlYnVnIHBvcnQgY2FwYWJpbGl0eS4KKworIFlvdSBjYW4gY2hlY2sgdGhpcyBjYXBhYmlsaXR5IGJ5IGxvb2tpbmcgYXQgYSAnRGVidWcgcG9ydCcgYml0IGluCisgdGhlIGxzcGNpIC12dnYgb3V0cHV0OgorCisgIyBsc3BjaSAtdnZ2CisgLi4uCisgMDA6MWQuNyBVU0IgQ29udHJvbGxlcjogSW50ZWwgQ29ycG9yYXRpb24gODI4MDFIIChJQ0g4IEZhbWlseSkgVVNCMiBFSENJIENvbnRyb2xsZXIgIzEgKHJldiAwMykgKHByb2ctaWYgMjAgW0VIQ0ldKQorICAgICAgICAgU3Vic3lzdGVtOiBMZW5vdm8gVGhpbmtQYWQgVDYxCisgICAgICAgICBDb250cm9sOiBJL08tIE1lbSsgQnVzTWFzdGVyKyBTcGVjQ3ljbGUtIE1lbVdJTlYtIFZHQVNub29wLSBQYXJFcnItIFN0ZXBwaW5nLSBTRVJSKyBGYXN0QjJCLSBEaXNJTlR4LQorICAgICAgICAgU3RhdHVzOiBDYXArIDY2TUh6LSBVREYtIEZhc3RCMkIrIFBhckVyci0gREVWU0VMPW1lZGl1bSA+VEFib3J0LSA8VEFib3J0LSA8TUFib3J0LSA+U0VSUi0gPFBFUlItIElOVHgtCisgICAgICAgICBMYXRlbmN5OiAwCisgICAgICAgICBJbnRlcnJ1cHQ6IHBpbiBEIHJvdXRlZCB0byBJUlEgMTkKKyAgICAgICAgIFJlZ2lvbiAwOiBNZW1vcnkgYXQgZmUyMjcwMDAgKDMyLWJpdCwgbm9uLXByZWZldGNoYWJsZSkgW3NpemU9MUtdCisgICAgICAgICBDYXBhYmlsaXRpZXM6IFs1MF0gUG93ZXIgTWFuYWdlbWVudCB2ZXJzaW9uIDIKKyAgICAgICAgICAgICAgICAgRmxhZ3M6IFBNRUNsay0gRFNJLSBEMS0gRDItIEF1eEN1cnJlbnQ9Mzc1bUEgUE1FKEQwKyxEMS0sRDItLEQzaG90KyxEM2NvbGQrKQorICAgICAgICAgICAgICAgICBTdGF0dXM6IEQwIFBNRS1FbmFibGUtIERTZWw9MCBEU2NhbGU9MCBQTUUrCisgICAgICAgICBDYXBhYmlsaXRpZXM6IFs1OF0gRGVidWcgcG9ydDogQkFSPTEgb2Zmc2V0PTAwYTAKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBeXl5eXl5eXl5eXiA8PT09PT09PT09PT09PT09PT09PT0gWyBIRVJFIF0KKwkgS2VybmVsIGRyaXZlciBpbiB1c2U6IGVoY2lfaGNkCisgICAgICAgICBLZXJuZWwgbW9kdWxlczogZWhjaS1oY2QKKyAuLi4KKworKCBJZiB5b3VyIHN5c3RlbSBkb2VzIG5vdCBsaXN0IGEgZGVidWcgcG9ydCBjYXBhYmlsaXR5IHRoZW4geW91IHByb2JhYmx5CisgIHdvbnQgYmUgYWJsZSB0byB1c2UgdGhlIFVTQiBkZWJ1ZyBrZXkuICkKKworIGIuKSBZb3UgYWxzbyBuZWVkIGEgTmV0Y2hpcCBVU0IgZGVidWcgY2FibGUva2V5OgorCisgICAgICAgIGh0dHA6Ly93d3cucGx4dGVjaC5jb20vcHJvZHVjdHMvTkVUMjAwMC9ORVQyMERDL2RlZmF1bHQuYXNwCisKKyAgICAgVGhpcyBpcyBhIHNtYWxsIGJsdWUgcGxhc3RpYyBjb25uZWN0b3Igd2l0aCB0d28gVVNCIGNvbm5lY3Rpb25zLAorICAgICBpdCBkcmF3cyBwb3dlciBmcm9tIGl0cyBVU0IgY29ubmVjdGlvbnMuCisKKyBjLikgVGhpcmRseSwgeW91IG5lZWQgYSBzZWNvbmQgY2xpZW50L2NvbnNvbGUgc3lzdGVtIHdpdGggYSByZWd1bGFyIFVTQiBwb3J0LgorCisyLiBTb2Z0d2FyZSByZXF1aXJlbWVudHM6CisKKyBhLikgT24gdGhlIGhvc3QvdGFyZ2V0IHN5c3RlbToKKworICAgIFlvdSBuZWVkIHRvIGVuYWJsZSB0aGUgZm9sbG93aW5nIGtlcm5lbCBjb25maWcgb3B0aW9uOgorCisgICAgICBDT05GSUdfRUFSTFlfUFJJTlRLX0RCR1A9eQorCisgICAgQW5kIHlvdSBuZWVkIHRvIGFkZCB0aGUgYm9vdCBjb21tYW5kIGxpbmU6ICJlYXJseXByaW50az1kYmdwIi4KKyAgICAoSWYgeW91IGFyZSB1c2luZyBHcnViLCBhcHBlbmQgaXQgdG8gdGhlICdrZXJuZWwnIGxpbmUgaW4KKyAgICAgL2V0Yy9ncnViLmNvbmYpCisKKyAgICBOT1RFOiBub3JtYWxseSBlYXJseXByaW50ayBjb25zb2xlIGdldHMgdHVybmVkIG9mZiBvbmNlIHRoZQorICAgIHJlZ3VsYXIgY29uc29sZSBpcyBhbGl2ZSAtIHVzZSAiZWFybHlwcmludGs9ZGJncCxrZWVwIiB0byBrZWVwCisgICAgdGhpcyBjaGFubmVsIG9wZW4gYmV5b25kIGVhcmx5IGJvb3R1cC4gVGhpcyBjYW4gYmUgdXNlZnVsIGZvcgorICAgIGRlYnVnZ2luZyBjcmFzaGVzIHVuZGVyIFhvcmcsIGV0Yy4KKworIGIuKSBPbiB0aGUgY2xpZW50L2NvbnNvbGUgc3lzdGVtOgorCisgICAgWW91IHNob3VsZCBlbmFibGUgdGhlIGZvbGxvd2luZyBrZXJuZWwgY29uZmlnIG9wdGlvbjoKKworICAgICAgQ09ORklHX1VTQl9TRVJJQUxfREVCVUc9eQorCisgICAgT24gdGhlIG5leHQgYm9vdHVwIHdpdGggdGhlIG1vZGlmaWVkIGtlcm5lbCB5b3Ugc2hvdWxkCisgICAgZ2V0IGEgL2Rldi90dHlVU0J4IGRldmljZShzKS4KKworICAgIE5vdyB0aGlzIGNoYW5uZWwgb2Yga2VybmVsIG1lc3NhZ2VzIGlzIHJlYWR5IHRvIGJlIHVzZWQ6IHN0YXJ0CisgICAgeW91ciBmYXZvcml0ZSB0ZXJtaW5hbCBlbXVsYXRvciAobWluaWNvbSwgZXRjLikgYW5kIHNldAorICAgIGl0IHVwIHRvIHVzZSAvZGV2L3R0eVVTQjAgLSBvciB1c2UgYSByYXcgJ2NhdCAvZGV2L3R0eVVTQngnIHRvCisgICAgc2VlIHRoZSByYXcgb3V0cHV0LgorCisgYy4pIE9uIE52aWRpYSBTb3V0aGJyaWRnZSBiYXNlZCBzeXN0ZW1zOiB0aGUga2VybmVsIHdpbGwgdHJ5IHRvIHByb2JlCisgICAgIGFuZCBmaW5kIG91dCB3aGljaCBwb3J0IGhhcyBkZWJ1ZyBkZXZpY2UgY29ubmVjdGVkLgorCiszLiBUZXN0aW5nIHRoYXQgaXQgd29ya3MgZmluZToKKworICAgWW91IGNhbiB0ZXN0IHRoZSBvdXRwdXQgYnkgdXNpbmcgZWFybHlwcmludGs9ZGJncCxrZWVwIGFuZCBwcm92b2tpbmcKKyAgIGtlcm5lbCBtZXNzYWdlcyBvbiB0aGUgaG9zdC90YXJnZXQgc3lzdGVtLiBZb3UgY2FuIHByb3Zva2UgYSBoYXJtbGVzcworICAga2VybmVsIG1lc3NhZ2UgYnkgZm9yIGV4YW1wbGUgZG9pbmc6CisKKyAgICAgZWNobyBoID4gL3Byb2Mvc3lzcnEtdHJpZ2dlcgorCisgICBPbiB0aGUgaG9zdC90YXJnZXQgc3lzdGVtIHlvdSBzaG91bGQgc2VlIHRoaXMgaGVscCBsaW5lIGluICJkbWVzZyIgb3V0cHV0OgorCisgICAgIFN5c1JxIDogSEVMUCA6IGxvZ2xldmVsKDAtOSkgcmVCb290IENyYXNoZHVtcCB0ZXJtaW5hdGUtYWxsLXRhc2tzKEUpIG1lbW9yeS1mdWxsLW9vbS1raWxsKEYpIGtpbGwtYWxsLXRhc2tzKEkpIHNhSyBzaG93LWJhY2t0cmFjZS1hbGwtYWN0aXZlLWNwdXMoTCkgc2hvdy1tZW1vcnktdXNhZ2UoTSkgbmljZS1hbGwtUlQtdGFza3MoTikgcG93ZXJPZmYgc2hvdy1yZWdpc3RlcnMoUCkgc2hvdy1hbGwtdGltZXJzKFEpIHVuUmF3IFN5bmMgc2hvdy10YXNrLXN0YXRlcyhUKSBVbm1vdW50IHNob3ctYmxvY2tlZC10YXNrcyhXKSBkdW1wLWZ0cmFjZS1idWZmZXIoWikKKworICAgT24gdGhlIGNsaWVudC9jb25zb2xlIHN5c3RlbSBkbzoKKworICAgICAgIGNhdCAvZGV2L3R0eVVTQjAKKworICAgQW5kIHlvdSBzaG91bGQgc2VlIHRoZSBoZWxwIGxpbmUgYWJvdmUgZGlzcGxheWVkIHNob3J0bHkgYWZ0ZXIgeW91J3ZlCisgICBwcm92b2tlZCBpdCBvbiB0aGUgaG9zdCBzeXN0ZW0uCisKK0lmIGl0IGRvZXMgbm90IHdvcmsgdGhlbiBwbGVhc2UgYXNrIGFib3V0IGl0IG9uIHRoZSBsaW51eC1rZXJuZWxAdmdlci5rZXJuZWwub3JnCittYWlsaW5nIGxpc3Qgb3IgY29udGFjdCB0aGUgeDg2IG1haW50YWluZXJzLgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCAwMTI0M2NlLi5jNWY0ZTlkIDEwMDY0NAotLS0gYS9NQUlOVEFJTkVSUworKysgYi9NQUlOVEFJTkVSUwpAQCAtMTA2Myw3ICsxMDYzLDYgQEAKIFA6CU1hdXJvIENhcnZhbGhvIENoZWhhYgogTToJbWNoZWhhYkBpbmZyYWRlYWQub3JnCiBMOglsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKLUw6CXZpZGVvNGxpbnV4LWxpc3RAcmVkaGF0LmNvbQogVzoJaHR0cDovL2xpbnV4dHYub3JnCiBUOglnaXQga2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L21jaGVoYWIvbGludXgtMi42LmdpdAogUzoJTWFpbnRhaW5lZApAQCAtNDgzNSw3ICs0ODM0LDYgQEAKIFA6CU1hdXJvIENhcnZhbGhvIENoZWhhYgogTToJbWNoZWhhYkBpbmZyYWRlYWQub3JnCiBMOglsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKLUw6CXZpZGVvNGxpbnV4LWxpc3RAcmVkaGF0LmNvbQogVzoJaHR0cDovL2xpbnV4dHYub3JnCiBUOglnaXQga2VybmVsLm9yZzovcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L21jaGVoYWIvbGludXgtMi42LmdpdAogUzoJTWFpbnRhaW5lZApkaWZmIC0tZ2l0IGEvYXJjaC9LY29uZmlnIGIvYXJjaC9LY29uZmlnCmluZGV4IDU1MGRhYjIuLjgzMGMxNmEgMTAwNjQ0Ci0tLSBhL2FyY2gvS2NvbmZpZworKysgYi9hcmNoL0tjb25maWcKQEAgLTEwNiwzICsxMDYsNSBAQAogCSAgVGhlIDxsaW51eC9jbGsuaD4gY2FsbHMgc3VwcG9ydCBzb2Z0d2FyZSBjbG9jayBnYXRpbmcgYW5kCiAJICB0aHVzIGFyZSBhIGtleSBwb3dlciBtYW5hZ2VtZW50IHRvb2wgb24gbWFueSBzeXN0ZW1zLgogCitjb25maWcgSEFWRV9ETUFfQVBJX0RFQlVHCisJYm9vbApkaWZmIC0tZ2l0IGEvYXJjaC9hbHBoYS9rZXJuZWwvc3JtX2Vudi5jIGIvYXJjaC9hbHBoYS9rZXJuZWwvc3JtX2Vudi5jCmluZGV4IDc4YWQ3Y2QuLmQxMmFmNDcgMTAwNjQ0Ci0tLSBhL2FyY2gvYWxwaGEva2VybmVsL3NybV9lbnYuYworKysgYi9hcmNoL2FscGhhL2tlcm5lbC9zcm1fZW52LmMKQEAgLTIxOCw3ICsyMTgsNiBAQAogCQkJCUJBU0VfRElSKTsKIAkJZ290byBjbGVhbnVwOwogCX0KLQliYXNlX2Rpci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCS8qCiAJICogQ3JlYXRlIHBlci1uYW1lIHN1YmRpcmVjdG9yeQpAQCAtMjI5LDcgKzIyOCw2IEBACiAJCQkJQkFTRV9ESVIsIE5BTUVEX0RJUik7CiAJCWdvdG8gY2xlYW51cDsKIAl9Ci0JbmFtZWRfZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJLyoKIAkgKiBDcmVhdGUgcGVyLW51bWJlciBzdWJkaXJlY3RvcnkKQEAgLTI0MSw3ICsyMzksNiBAQAogCQlnb3RvIGNsZWFudXA7CiAKIAl9Ci0JbnVtYmVyZWRfZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJLyoKIAkgKiBDcmVhdGUgYWxsIG5hbWVkIG5vZGVzCkBAIC0yNTQsNyArMjUxLDYgQEAKIAkJCWdvdG8gY2xlYW51cDsKIAogCQllbnRyeS0+cHJvY19lbnRyeS0+ZGF0YQkJPSAodm9pZCAqKSBlbnRyeTsKLQkJZW50cnktPnByb2NfZW50cnktPm93bmVyCT0gVEhJU19NT0RVTEU7CiAJCWVudHJ5LT5wcm9jX2VudHJ5LT5yZWFkX3Byb2MJPSBzcm1fZW52X3JlYWQ7CiAJCWVudHJ5LT5wcm9jX2VudHJ5LT53cml0ZV9wcm9jCT0gc3JtX2Vudl93cml0ZTsKIApAQCAtMjc1LDcgKzI3MSw2IEBACiAKIAkJZW50cnktPmlkCQkJPSB2YXJfbnVtOwogCQllbnRyeS0+cHJvY19lbnRyeS0+ZGF0YQkJPSAodm9pZCAqKSBlbnRyeTsKLQkJZW50cnktPnByb2NfZW50cnktPm93bmVyCT0gVEhJU19NT0RVTEU7CiAJCWVudHJ5LT5wcm9jX2VudHJ5LT5yZWFkX3Byb2MJPSBzcm1fZW52X3JlYWQ7CiAJCWVudHJ5LT5wcm9jX2VudHJ5LT53cml0ZV9wcm9jCT0gc3JtX2Vudl93cml0ZTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL2FybS9tYWNoLXB4YS9wY205OTAtYmFzZWJvYXJkLmMgYi9hcmNoL2FybS9tYWNoLXB4YS9wY205OTAtYmFzZWJvYXJkLmMKaW5kZXggZjQ2Njk4ZS4uNjExMjc0MCAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vbWFjaC1weGEvcGNtOTkwLWJhc2Vib2FyZC5jCisrKyBiL2FyY2gvYXJtL21hY2gtcHhhL3BjbTk5MC1iYXNlYm9hcmQuYwpAQCAtMzgwLDE0ICszODAsNDkgQEAKIAkuZ3Bpb19iYXNlCT0gTlJfQlVJTFRJTl9HUElPICsgMSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGljbGlua1tdID0gewotCXsKLQkJLmJ1c19pZAk9IDAsIC8qIE11c3QgbWF0Y2ggd2l0aCB0aGUgY2FtZXJhIElEIGFib3ZlICovCi0JCS5ncGlvCT0gTlJfQlVJTFRJTl9HUElPICsgMSwKLQl9LCB7Ci0JCS5idXNfaWQJPSAwLCAvKiBNdXN0IG1hdGNoIHdpdGggdGhlIGNhbWVyYSBJRCBhYm92ZSAqLwotCQkuZ3Bpbwk9IC1FTlhJTywKK3N0YXRpYyBpbnQgZ3Bpb19idXNfc3dpdGNoOworCitzdGF0aWMgaW50IHBjbTk5MF9jYW1lcmFfc2V0X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICpsaW5rLAorCQl1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCWlmIChncGlvX2J1c19zd2l0Y2ggPD0gMCkgeworCQlpZiAoZmxhZ3MgPT0gU09DQU1fREFUQVdJRFRIXzEwKQorCQkJcmV0dXJuIDA7CisJCWVsc2UKKwkJCXJldHVybiAtRUlOVkFMOwogCX0KKworCWlmIChmbGFncyAmIFNPQ0FNX0RBVEFXSURUSF84KQorCQlncGlvX3NldF92YWx1ZShncGlvX2J1c19zd2l0Y2gsIDEpOworCWVsc2UKKwkJZ3Bpb19zZXRfdmFsdWUoZ3Bpb19idXNfc3dpdGNoLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBwY205OTBfY2FtZXJhX3F1ZXJ5X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICpsaW5rKQoreworCWludCByZXQ7CisKKwlpZiAoIWdwaW9fYnVzX3N3aXRjaCkgeworCQlyZXQgPSBncGlvX3JlcXVlc3QoTlJfQlVJTFRJTl9HUElPICsgMSwgImNhbWVyYSIpOworCQlpZiAoIXJldCkgeworCQkJZ3Bpb19idXNfc3dpdGNoID0gTlJfQlVJTFRJTl9HUElPICsgMTsKKwkJCWdwaW9fZGlyZWN0aW9uX291dHB1dChncGlvX2J1c19zd2l0Y2gsIDApOworCQl9IGVsc2UKKwkJCWdwaW9fYnVzX3N3aXRjaCA9IC1FSU5WQUw7CisJfQorCisJaWYgKGdwaW9fYnVzX3N3aXRjaCA+IDApCisJCXJldHVybiBTT0NBTV9EQVRBV0lEVEhfOCB8IFNPQ0FNX0RBVEFXSURUSF8xMDsKKwllbHNlCisJCXJldHVybiBTT0NBTV9EQVRBV0lEVEhfMTA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rIGljbGluayA9IHsKKwkuYnVzX2lkCT0gMCwgLyogTXVzdCBtYXRjaCB3aXRoIHRoZSBjYW1lcmEgSUQgYWJvdmUgKi8KKwkucXVlcnlfYnVzX3BhcmFtID0gcGNtOTkwX2NhbWVyYV9xdWVyeV9idXNfcGFyYW0sCisJLnNldF9idXNfcGFyYW0gPSBwY205OTBfY2FtZXJhX3NldF9idXNfcGFyYW0sCiB9OwogCiAvKiBCb2FyZCBJMkMgZGV2aWNlcy4gKi8KQEAgLTM5OCwxMCArNDMzLDEwIEBACiAJCS5wbGF0Zm9ybV9kYXRhID0gJnBjYTk1MzZfZGF0YSwKIAl9LCB7CiAJCUkyQ19CT0FSRF9JTkZPKCJtdDl2MDIyIiwgMHg0OCksCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmljbGlua1swXSwgLyogV2l0aCBleHRlbmRlciAqLworCQkucGxhdGZvcm1fZGF0YSA9ICZpY2xpbmssIC8qIFdpdGggZXh0ZW5kZXIgKi8KIAl9LCB7CiAJCUkyQ19CT0FSRF9JTkZPKCJtdDltMDAxIiwgMHg1ZCksCi0JCS5wbGF0Zm9ybV9kYXRhID0gJmljbGlua1swXSwgLyogV2l0aCBleHRlbmRlciAqLworCQkucGxhdGZvcm1fZGF0YSA9ICZpY2xpbmssIC8qIFdpdGggZXh0ZW5kZXIgKi8KIAl9LAogfTsKICNlbmRpZiAvKiBDT05GSUdfVklERU9fUFhBMjd4IHx8Q09ORklHX1ZJREVPX1BYQTI3eF9NT0RVTEUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvYXJtL3BsYXQtbXhjL2luY2x1ZGUvbWFjaC9teDNfY2FtZXJhLmggYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzX2NhbWVyYS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM2ZDdmZjIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL2FybS9wbGF0LW14Yy9pbmNsdWRlL21hY2gvbXgzX2NhbWVyYS5oCkBAIC0wLDAgKzEsNTIgQEAKKy8qCisgKiBteDNfY2FtZXJhLmggLSBpLk1YM3ggY2FtZXJhIGRyaXZlciBoZWFkZXIgZmlsZQorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOCwgR3Vlbm5hZGkgTGlha2hvdmV0c2tpLCBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nLCA8bGdAZGVueC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIF9NWDNfQ0FNRVJBX0hfCisjZGVmaW5lIF9NWDNfQ0FNRVJBX0hfCisKKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKworI2RlZmluZSBNWDNfQ0FNRVJBX0NMS19TUkMJMQorI2RlZmluZSBNWDNfQ0FNRVJBX0VYVF9WU1lOQwkyCisjZGVmaW5lIE1YM19DQU1FUkFfRFAJCTQKKyNkZWZpbmUgTVgzX0NBTUVSQV9QQ1AJCTgKKyNkZWZpbmUgTVgzX0NBTUVSQV9IU1AJCTB4MTAKKyNkZWZpbmUgTVgzX0NBTUVSQV9WU1AJCTB4MjAKKyNkZWZpbmUgTVgzX0NBTUVSQV9EQVRBV0lEVEhfNAkweDQwCisjZGVmaW5lIE1YM19DQU1FUkFfREFUQVdJRFRIXzgJMHg4MAorI2RlZmluZSBNWDNfQ0FNRVJBX0RBVEFXSURUSF8xMAkweDEwMAorI2RlZmluZSBNWDNfQ0FNRVJBX0RBVEFXSURUSF8xNQkweDIwMAorCisjZGVmaW5lIE1YM19DQU1FUkFfREFUQVdJRFRIX01BU0sgKE1YM19DQU1FUkFfREFUQVdJRFRIXzQgfCBNWDNfQ0FNRVJBX0RBVEFXSURUSF84IHwgXAorCQkJCSAgIE1YM19DQU1FUkFfREFUQVdJRFRIXzEwIHwgTVgzX0NBTUVSQV9EQVRBV0lEVEhfMTUpCisKKy8qKgorICogc3RydWN0IG14M19jYW1lcmFfcGRhdGEgLSBpLk1YM3ggY2FtZXJhIHBsYXRmb3JtIGRhdGEKKyAqIEBmbGFnczoJTVgzX0NBTUVSQV8qIGZsYWdzCisgKiBAbWNsa18xMGtoejoJbWFzdGVyIGNsb2NrIGZyZXF1ZW5jeSBpbiAxMGtIeiB1bml0cworICogQGRtYV9kZXY6CUlQVSBETUEgZGV2aWNlIHRvIG1hdGNoIGFnYWluc3QgaW4gY2hhbm5lbCBhbGxvY2F0aW9uCisgKi8KK3N0cnVjdCBteDNfY2FtZXJhX3BkYXRhIHsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGxvbmcgbWNsa18xMGtoejsKKwlzdHJ1Y3QgZGV2aWNlICpkbWFfZGV2OworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2JsYWNrZmluL21tL3NyYW0tYWxsb2MuYyBiL2FyY2gvYmxhY2tmaW4vbW0vc3JhbS1hbGxvYy5jCmluZGV4IDgzNGNhYjcuLjUzMGQxMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvYmxhY2tmaW4vbW0vc3JhbS1hbGxvYy5jCisrKyBiL2FyY2gvYmxhY2tmaW4vbW0vc3JhbS1hbGxvYy5jCkBAIC04NTQsNyArODU0LDYgQEAKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAidW5hYmxlIHRvIGNyZWF0ZSAvcHJvYy9zcmFtXG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KLQlwdHItPm93bmVyID0gVEhJU19NT0RVTEU7CiAJcHRyLT5yZWFkX3Byb2MgPSBzcmFtX3Byb2NfcmVhZDsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9kaWcvTWFrZWZpbGUgYi9hcmNoL2lhNjQvZGlnL01ha2VmaWxlCmluZGV4IDVjMDI4MzguLjJmN2NhZGQgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9kaWcvTWFrZWZpbGUKKysrIGIvYXJjaC9pYTY0L2RpZy9NYWtlZmlsZQpAQCAtNyw4ICs3LDggQEAKIAogb2JqLXkgOj0gc2V0dXAubwogaWZlcSAoJChDT05GSUdfRE1BUiksIHkpCi1vYmotJChDT05GSUdfSUE2NF9HRU5FUklDKSArPSBtYWNodmVjLm8gbWFjaHZlY192dGQubyBkaWdfdnRkX2lvbW11Lm8KK29iai0kKENPTkZJR19JQTY0X0dFTkVSSUMpICs9IG1hY2h2ZWMubyBtYWNodmVjX3Z0ZC5vCiBlbHNlCiBvYmotJChDT05GSUdfSUE2NF9HRU5FUklDKSArPSBtYWNodmVjLm8KIGVuZGlmCi1vYmotJChDT05GSUdfSUE2NF9ESUdfVlREKSArPSBkaWdfdnRkX2lvbW11Lm8KKwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2RpZy9kaWdfdnRkX2lvbW11LmMgYi9hcmNoL2lhNjQvZGlnL2RpZ192dGRfaW9tbXUuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWM4YTA3OS4uMDAwMDAwMAotLS0gYS9hcmNoL2lhNjQvZGlnL2RpZ192dGRfaW9tbXUuYworKysgL2Rldi9udWxsCkBAIC0xLDU5ICswLDAgQEAKLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L2ludGVsLWlvbW11Lmg+Ci0KLXZvaWQgKgotdnRkX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsCi0JCSBnZnBfdCBmbGFncykKLXsKLQlyZXR1cm4gaW50ZWxfYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBmbGFncyk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh2dGRfYWxsb2NfY29oZXJlbnQpOwotCi12b2lkCi12dGRfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICp2YWRkciwKLQkJIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKLXsKLQlpbnRlbF9mcmVlX2NvaGVyZW50KGRldiwgc2l6ZSwgdmFkZHIsIGRtYV9oYW5kbGUpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwodnRkX2ZyZWVfY29oZXJlbnQpOwotCi1kbWFfYWRkcl90Ci12dGRfbWFwX3NpbmdsZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLAotCQkgICAgIGludCBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQotewotCXJldHVybiBpbnRlbF9tYXBfc2luZ2xlKGRldiwgKHBoeXNfYWRkcl90KWFkZHIsIHNpemUsIGRpcik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh2dGRfbWFwX3NpbmdsZV9hdHRycyk7Ci0KLXZvaWQKLXZ0ZF91bm1hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGlvdmEsIHNpemVfdCBzaXplLAotCQkgICAgICAgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCi17Ci0JaW50ZWxfdW5tYXBfc2luZ2xlKGRldiwgaW92YSwgc2l6ZSwgZGlyKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHZ0ZF91bm1hcF9zaW5nbGVfYXR0cnMpOwotCi1pbnQKLXZ0ZF9tYXBfc2dfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwgaW50IG5lbnRzLAotCQkgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCi17Ci0JcmV0dXJuIGludGVsX21hcF9zZyhkZXYsIHNnbGlzdCwgbmVudHMsIGRpcik7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh2dGRfbWFwX3NnX2F0dHJzKTsKLQotdm9pZAotdnRkX3VubWFwX3NnX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCi0JCSAgIGludCBuZW50cywgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCi17Ci0JaW50ZWxfdW5tYXBfc2coZGV2LCBzZ2xpc3QsIG5lbnRzLCBkaXIpOwotfQotRVhQT1JUX1NZTUJPTF9HUEwodnRkX3VubWFwX3NnX2F0dHJzKTsKLQotaW50Ci12dGRfZG1hX21hcHBpbmdfZXJyb3Ioc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKQotewotCXJldHVybiAwOwotfQotRVhQT1JUX1NZTUJPTF9HUEwodnRkX2RtYV9tYXBwaW5nX2Vycm9yKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9jb21tb24vaHdzd19pb21tdS5jIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9od3N3X2lvbW11LmMKaW5kZXggMjc2OWRiZi4uZTRhODBkOCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2hwL2NvbW1vbi9od3N3X2lvbW11LmMKKysrIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9od3N3X2lvbW11LmMKQEAgLTEzLDQ5ICsxMywzNCBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L3N3aW90bGIuaD4KLQogI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+CiAKK2V4dGVybiBzdHJ1Y3QgZG1hX21hcF9vcHMgc2JhX2RtYV9vcHMsIHN3aW90bGJfZG1hX29wczsKKwogLyogc3dpb3RsYiBkZWNsYXJhdGlvbnMgJiBkZWZpbml0aW9uczogKi8KIGV4dGVybiBpbnQgc3dpb3RsYl9sYXRlX2luaXRfd2l0aF9kZWZhdWx0X3NpemUgKHNpemVfdCBzaXplKTsKIAotLyogaHdpb21tdSBkZWNsYXJhdGlvbnMgJiBkZWZpbml0aW9uczogKi8KLQotZXh0ZXJuIGlhNjRfbXZfZG1hX2FsbG9jX2NvaGVyZW50CXNiYV9hbGxvY19jb2hlcmVudDsKLWV4dGVybiBpYTY0X212X2RtYV9mcmVlX2NvaGVyZW50CXNiYV9mcmVlX2NvaGVyZW50OwotZXh0ZXJuIGlhNjRfbXZfZG1hX21hcF9zaW5nbGVfYXR0cnMJc2JhX21hcF9zaW5nbGVfYXR0cnM7Ci1leHRlcm4gaWE2NF9tdl9kbWFfdW5tYXBfc2luZ2xlX2F0dHJzCXNiYV91bm1hcF9zaW5nbGVfYXR0cnM7Ci1leHRlcm4gaWE2NF9tdl9kbWFfbWFwX3NnX2F0dHJzCQlzYmFfbWFwX3NnX2F0dHJzOwotZXh0ZXJuIGlhNjRfbXZfZG1hX3VubWFwX3NnX2F0dHJzCXNiYV91bm1hcF9zZ19hdHRyczsKLWV4dGVybiBpYTY0X212X2RtYV9zdXBwb3J0ZWQJCXNiYV9kbWFfc3VwcG9ydGVkOwotZXh0ZXJuIGlhNjRfbXZfZG1hX21hcHBpbmdfZXJyb3IJc2JhX2RtYV9tYXBwaW5nX2Vycm9yOwotCi0jZGVmaW5lIGh3aW9tbXVfYWxsb2NfY29oZXJlbnQJCXNiYV9hbGxvY19jb2hlcmVudAotI2RlZmluZSBod2lvbW11X2ZyZWVfY29oZXJlbnQJCXNiYV9mcmVlX2NvaGVyZW50Ci0jZGVmaW5lIGh3aW9tbXVfbWFwX3NpbmdsZV9hdHRycwlzYmFfbWFwX3NpbmdsZV9hdHRycwotI2RlZmluZSBod2lvbW11X3VubWFwX3NpbmdsZV9hdHRycwlzYmFfdW5tYXBfc2luZ2xlX2F0dHJzCi0jZGVmaW5lIGh3aW9tbXVfbWFwX3NnX2F0dHJzCQlzYmFfbWFwX3NnX2F0dHJzCi0jZGVmaW5lIGh3aW9tbXVfdW5tYXBfc2dfYXR0cnMJCXNiYV91bm1hcF9zZ19hdHRycwotI2RlZmluZSBod2lvbW11X2RtYV9zdXBwb3J0ZWQJCXNiYV9kbWFfc3VwcG9ydGVkCi0jZGVmaW5lIGh3aW9tbXVfZG1hX21hcHBpbmdfZXJyb3IJc2JhX2RtYV9tYXBwaW5nX2Vycm9yCi0jZGVmaW5lIGh3aW9tbXVfc3luY19zaW5nbGVfZm9yX2NwdQltYWNodmVjX2RtYV9zeW5jX3NpbmdsZQotI2RlZmluZSBod2lvbW11X3N5bmNfc2dfZm9yX2NwdQkJbWFjaHZlY19kbWFfc3luY19zZwotI2RlZmluZSBod2lvbW11X3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UJbWFjaHZlY19kbWFfc3luY19zaW5nbGUKLSNkZWZpbmUgaHdpb21tdV9zeW5jX3NnX2Zvcl9kZXZpY2UJbWFjaHZlY19kbWFfc3luY19zZwotCi0KIC8qCiAgKiBOb3RlOiB3ZSBuZWVkIHRvIG1ha2UgdGhlIGRldGVybWluYXRpb24gb2Ygd2hldGhlciBvciBub3QgdG8gdXNlCiAgKiB0aGUgc3cgSS9PIFRMQiBiYXNlZCBwdXJlbHkgb24gdGhlIGRldmljZSBzdHJ1Y3R1cmUuICBBbnl0aGluZyBlbHNlCiAgKiB3b3VsZCBiZSB1bnJlbGlhYmxlIG9yIHdvdWxkIGJlIHRvbyBpbnRydXNpdmUuCiAgKi8KLXN0YXRpYyBpbmxpbmUgaW50Ci11c2Vfc3dpb3RsYiAoc3RydWN0IGRldmljZSAqZGV2KQorc3RhdGljIGlubGluZSBpbnQgdXNlX3N3aW90bGIoc3RydWN0IGRldmljZSAqZGV2KQogewotCXJldHVybiBkZXYgJiYgZGV2LT5kbWFfbWFzayAmJiAhaHdpb21tdV9kbWFfc3VwcG9ydGVkKGRldiwgKmRldi0+ZG1hX21hc2spOworCXJldHVybiBkZXYgJiYgZGV2LT5kbWFfbWFzayAmJgorCQkhc2JhX2RtYV9vcHMuZG1hX3N1cHBvcnRlZChkZXYsICpkZXYtPmRtYV9tYXNrKTsKIH0KIAorc3RydWN0IGRtYV9tYXBfb3BzICpod3N3X2RtYV9nZXRfb3BzKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlpZiAodXNlX3N3aW90bGIoZGV2KSkKKwkJcmV0dXJuICZzd2lvdGxiX2RtYV9vcHM7CisJcmV0dXJuICZzYmFfZG1hX29wczsKK30KK0VYUE9SVF9TWU1CT0woaHdzd19kbWFfZ2V0X29wcyk7CisKIHZvaWQgX19pbml0CiBod3N3X2luaXQgKHZvaWQpCiB7CkBAIC03MSwxMjUgKzU2LDMgQEAKICNlbmRpZgogCX0KIH0KLQotdm9pZCAqCi1od3N3X2FsbG9jX2NvaGVyZW50IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFncykKLXsKLQlpZiAodXNlX3N3aW90bGIoZGV2KSkKLQkJcmV0dXJuIHN3aW90bGJfYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCBkbWFfaGFuZGxlLCBmbGFncyk7Ci0JZWxzZQotCQlyZXR1cm4gaHdpb21tdV9hbGxvY19jb2hlcmVudChkZXYsIHNpemUsIGRtYV9oYW5kbGUsIGZsYWdzKTsKLX0KLQotdm9pZAotaHdzd19mcmVlX2NvaGVyZW50IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQotewotCWlmICh1c2Vfc3dpb3RsYihkZXYpKQotCQlzd2lvdGxiX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCB2YWRkciwgZG1hX2hhbmRsZSk7Ci0JZWxzZQotCQlod2lvbW11X2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCB2YWRkciwgZG1hX2hhbmRsZSk7Ci19Ci0KLWRtYV9hZGRyX3QKLWh3c3dfbWFwX3NpbmdsZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmFkZHIsIHNpemVfdCBzaXplLCBpbnQgZGlyLAotCQkgICAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCi17Ci0JaWYgKHVzZV9zd2lvdGxiKGRldikpCi0JCXJldHVybiBzd2lvdGxiX21hcF9zaW5nbGVfYXR0cnMoZGV2LCBhZGRyLCBzaXplLCBkaXIsIGF0dHJzKTsKLQllbHNlCi0JCXJldHVybiBod2lvbW11X21hcF9zaW5nbGVfYXR0cnMoZGV2LCBhZGRyLCBzaXplLCBkaXIsIGF0dHJzKTsKLX0KLUVYUE9SVF9TWU1CT0woaHdzd19tYXBfc2luZ2xlX2F0dHJzKTsKLQotdm9pZAotaHdzd191bm1hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGlvdmEsIHNpemVfdCBzaXplLAotCQkJIGludCBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQotewotCWlmICh1c2Vfc3dpb3RsYihkZXYpKQotCQlyZXR1cm4gc3dpb3RsYl91bm1hcF9zaW5nbGVfYXR0cnMoZGV2LCBpb3ZhLCBzaXplLCBkaXIsIGF0dHJzKTsKLQllbHNlCi0JCXJldHVybiBod2lvbW11X3VubWFwX3NpbmdsZV9hdHRycyhkZXYsIGlvdmEsIHNpemUsIGRpciwgYXR0cnMpOwotfQotRVhQT1JUX1NZTUJPTChod3N3X3VubWFwX3NpbmdsZV9hdHRycyk7Ci0KLWludAotaHdzd19tYXBfc2dfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwgaW50IG5lbnRzLAotCQkgICBpbnQgZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKLXsKLQlpZiAodXNlX3N3aW90bGIoZGV2KSkKLQkJcmV0dXJuIHN3aW90bGJfbWFwX3NnX2F0dHJzKGRldiwgc2dsaXN0LCBuZW50cywgZGlyLCBhdHRycyk7Ci0JZWxzZQotCQlyZXR1cm4gaHdpb21tdV9tYXBfc2dfYXR0cnMoZGV2LCBzZ2xpc3QsIG5lbnRzLCBkaXIsIGF0dHJzKTsKLX0KLUVYUE9SVF9TWU1CT0woaHdzd19tYXBfc2dfYXR0cnMpOwotCi12b2lkCi1od3N3X3VubWFwX3NnX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsIGludCBuZW50cywKLQkJICAgICBpbnQgZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKLXsKLQlpZiAodXNlX3N3aW90bGIoZGV2KSkKLQkJcmV0dXJuIHN3aW90bGJfdW5tYXBfc2dfYXR0cnMoZGV2LCBzZ2xpc3QsIG5lbnRzLCBkaXIsIGF0dHJzKTsKLQllbHNlCi0JCXJldHVybiBod2lvbW11X3VubWFwX3NnX2F0dHJzKGRldiwgc2dsaXN0LCBuZW50cywgZGlyLCBhdHRycyk7Ci19Ci1FWFBPUlRfU1lNQk9MKGh3c3dfdW5tYXBfc2dfYXR0cnMpOwotCi12b2lkCi1od3N3X3N5bmNfc2luZ2xlX2Zvcl9jcHUgKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyLCBzaXplX3Qgc2l6ZSwgaW50IGRpcikKLXsKLQlpZiAodXNlX3N3aW90bGIoZGV2KSkKLQkJc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgYWRkciwgc2l6ZSwgZGlyKTsKLQllbHNlCi0JCWh3aW9tbXVfc3luY19zaW5nbGVfZm9yX2NwdShkZXYsIGFkZHIsIHNpemUsIGRpcik7Ci19Ci0KLXZvaWQKLWh3c3dfc3luY19zZ19mb3JfY3B1IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZWxlbXMsIGludCBkaXIpCi17Ci0JaWYgKHVzZV9zd2lvdGxiKGRldikpCi0JCXN3aW90bGJfc3luY19zZ19mb3JfY3B1KGRldiwgc2csIG5lbGVtcywgZGlyKTsKLQllbHNlCi0JCWh3aW9tbXVfc3luY19zZ19mb3JfY3B1KGRldiwgc2csIG5lbGVtcywgZGlyKTsKLX0KLQotdm9pZAotaHdzd19zeW5jX3NpbmdsZV9mb3JfZGV2aWNlIChzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYWRkciwgc2l6ZV90IHNpemUsIGludCBkaXIpCi17Ci0JaWYgKHVzZV9zd2lvdGxiKGRldikpCi0JCXN3aW90bGJfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGFkZHIsIHNpemUsIGRpcik7Ci0JZWxzZQotCQlod2lvbW11X3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoZGV2LCBhZGRyLCBzaXplLCBkaXIpOwotfQotCi12b2lkCi1od3N3X3N5bmNfc2dfZm9yX2RldmljZSAoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLCBpbnQgZGlyKQotewotCWlmICh1c2Vfc3dpb3RsYihkZXYpKQotCQlzd2lvdGxiX3N5bmNfc2dfZm9yX2RldmljZShkZXYsIHNnLCBuZWxlbXMsIGRpcik7Ci0JZWxzZQotCQlod2lvbW11X3N5bmNfc2dfZm9yX2RldmljZShkZXYsIHNnLCBuZWxlbXMsIGRpcik7Ci19Ci0KLWludAotaHdzd19kbWFfc3VwcG9ydGVkIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQotewotCWlmIChod2lvbW11X2RtYV9zdXBwb3J0ZWQoZGV2LCBtYXNrKSkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIHN3aW90bGJfZG1hX3N1cHBvcnRlZChkZXYsIG1hc2spOwotfQotCi1pbnQKLWh3c3dfZG1hX21hcHBpbmdfZXJyb3Ioc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKQotewotCXJldHVybiBod2lvbW11X2RtYV9tYXBwaW5nX2Vycm9yKGRldiwgZG1hX2FkZHIpIHx8Ci0JCXN3aW90bGJfZG1hX21hcHBpbmdfZXJyb3IoZGV2LCBkbWFfYWRkcik7Ci19Ci0KLUVYUE9SVF9TWU1CT0woaHdzd19kbWFfbWFwcGluZ19lcnJvcik7Ci1FWFBPUlRfU1lNQk9MKGh3c3dfZG1hX3N1cHBvcnRlZCk7Ci1FWFBPUlRfU1lNQk9MKGh3c3dfYWxsb2NfY29oZXJlbnQpOwotRVhQT1JUX1NZTUJPTChod3N3X2ZyZWVfY29oZXJlbnQpOwotRVhQT1JUX1NZTUJPTChod3N3X3N5bmNfc2luZ2xlX2Zvcl9jcHUpOwotRVhQT1JUX1NZTUJPTChod3N3X3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UpOwotRVhQT1JUX1NZTUJPTChod3N3X3N5bmNfc2dfZm9yX2NwdSk7Ci1FWFBPUlRfU1lNQk9MKGh3c3dfc3luY19zZ19mb3JfZGV2aWNlKTsKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMgYi9hcmNoL2lhNjQvaHAvY29tbW9uL3NiYV9pb21tdS5jCmluZGV4IDZkNWU2YzUuLjU2Y2ViNjggMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9ocC9jb21tb24vc2JhX2lvbW11LmMKKysrIGIvYXJjaC9pYTY0L2hwL2NvbW1vbi9zYmFfaW9tbXUuYwpAQCAtMzYsNiArMzYsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPiAgICAgICAgIC8qIGh3ZWlnaHQ2NCgpICovCiAjaW5jbHVkZSA8bGludXgvY3Jhc2hfZHVtcC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvbW11LWhlbHBlci5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAKICNpbmNsdWRlIDxhc20vZGVsYXkuaD4JCS8qIGlhNjRfZ2V0X2l0YygpICovCiAjaW5jbHVkZSA8YXNtL2lvLmg+CkBAIC05MDgsMTEgKzkwOSwxMyBAQAogICoKICAqIFNlZSBEb2N1bWVudGF0aW9uL1BDSS9QQ0ktRE1BLW1hcHBpbmcudHh0CiAgKi8KLWRtYV9hZGRyX3QKLXNiYV9tYXBfc2luZ2xlX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUsIGludCBkaXIsCi0JCSAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCitzdGF0aWMgZG1hX2FkZHJfdCBzYmFfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSAgICAgICB1bnNpZ25lZCBsb25nIHBvZmYsIHNpemVfdCBzaXplLAorCQkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCSAgICAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAlzdHJ1Y3QgaW9jICppb2M7CisJdm9pZCAqYWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKSArIHBvZmY7CiAJZG1hX2FkZHJfdCBpb3ZwOwogCWRtYV9hZGRyX3Qgb2Zmc2V0OwogCXU2NCAqcGRpcl9zdGFydDsKQEAgLTk5MCw3ICs5OTMsMTQgQEAKICNlbmRpZgogCXJldHVybiBTQkFfSU9WQShpb2MsIGlvdnAsIG9mZnNldCk7CiB9Ci1FWFBPUlRfU1lNQk9MKHNiYV9tYXBfc2luZ2xlX2F0dHJzKTsKKworc3RhdGljIGRtYV9hZGRyX3Qgc2JhX21hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICphZGRyLAorCQkJCSAgICAgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJCSAgICAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3sKKwlyZXR1cm4gc2JhX21hcF9wYWdlKGRldiwgdmlydF90b19wYWdlKGFkZHIpLAorCQkJICAgICh1bnNpZ25lZCBsb25nKWFkZHIgJiB+UEFHRV9NQVNLLCBzaXplLCBkaXIsIGF0dHJzKTsKK30KIAogI2lmZGVmIEVOQUJMRV9NQVJLX0NMRUFOCiBzdGF0aWMgU0JBX0lOTElORSB2b2lkCkBAIC0xMDI2LDggKzEwMzYsOCBAQAogICoKICAqIFNlZSBEb2N1bWVudGF0aW9uL1BDSS9QQ0ktRE1BLW1hcHBpbmcudHh0CiAgKi8KLXZvaWQgc2JhX3VubWFwX3NpbmdsZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgaW92YSwgc2l6ZV90IHNpemUsCi0JCQkgICAgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCitzdGF0aWMgdm9pZCBzYmFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgaW92YSwgc2l6ZV90IHNpemUsCisJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXN0cnVjdCBpb2MgKmlvYzsKICNpZiBERUxBWUVEX1JFU09VUkNFX0NOVCA+IDAKQEAgLTEwOTQsNyArMTEwNCwxMiBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYy0+cmVzX2xvY2ssIGZsYWdzKTsKICNlbmRpZiAvKiBERUxBWUVEX1JFU09VUkNFX0NOVCA9PSAwICovCiB9Ci1FWFBPUlRfU1lNQk9MKHNiYV91bm1hcF9zaW5nbGVfYXR0cnMpOworCit2b2lkIHNiYV91bm1hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGlvdmEsIHNpemVfdCBzaXplLAorCQkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCit7CisJc2JhX3VubWFwX3BhZ2UoZGV2LCBpb3ZhLCBzaXplLCBkaXIsIGF0dHJzKTsKK30KIAogLyoqCiAgKiBzYmFfYWxsb2NfY29oZXJlbnQgLSBhbGxvY2F0ZS9tYXAgc2hhcmVkIG1lbSBmb3IgRE1BCkBAIC0xMTA0LDcgKzExMTksNyBAQAogICoKICAqIFNlZSBEb2N1bWVudGF0aW9uL1BDSS9QQ0ktRE1BLW1hcHBpbmcudHh0CiAgKi8KLXZvaWQgKgorc3RhdGljIHZvaWQgKgogc2JhX2FsbG9jX2NvaGVyZW50IChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFncykKIHsKIAlzdHJ1Y3QgaW9jICppb2M7CkBAIC0xMTY3LDcgKzExODIsOCBAQAogICoKICAqIFNlZSBEb2N1bWVudGF0aW9uL1BDSS9QQ0ktRE1BLW1hcHBpbmcudHh0CiAgKi8KLXZvaWQgc2JhX2ZyZWVfY29oZXJlbnQgKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKnZhZGRyLCBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCitzdGF0aWMgdm9pZCBzYmFfZnJlZV9jb2hlcmVudCAoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqdmFkZHIsCisJCQkgICAgICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQogewogCXNiYV91bm1hcF9zaW5nbGVfYXR0cnMoZGV2LCBkbWFfaGFuZGxlLCBzaXplLCAwLCBOVUxMKTsKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKSB2YWRkciwgZ2V0X29yZGVyKHNpemUpKTsKQEAgLTE0MjIsOCArMTQzOCw5IEBACiAgKgogICogU2VlIERvY3VtZW50YXRpb24vUENJL1BDSS1ETUEtbWFwcGluZy50eHQKICAqLwotaW50IHNiYV9tYXBfc2dfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbGlzdCwgaW50IG5lbnRzLAotCQkgICAgIGludCBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQorc3RhdGljIGludCBzYmFfbWFwX3NnX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCisJCQkgICAgaW50IG5lbnRzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJc3RydWN0IGlvYyAqaW9jOwogCWludCBjb2FsZXNjZWQsIGZpbGxlZCA9IDA7CkBAIC0xNTAyLDcgKzE1MTksNiBAQAogCiAJcmV0dXJuIGZpbGxlZDsKIH0KLUVYUE9SVF9TWU1CT0woc2JhX21hcF9zZ19hdHRycyk7CiAKIC8qKgogICogc2JhX3VubWFwX3NnX2F0dHJzIC0gdW5tYXAgU2NhdHRlci9HYXRoZXIgbGlzdApAQCAtMTUxNCw4ICsxNTMwLDkgQEAKICAqCiAgKiBTZWUgRG9jdW1lbnRhdGlvbi9QQ0kvUENJLURNQS1tYXBwaW5nLnR4dAogICovCi12b2lkIHNiYV91bm1hcF9zZ19hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAotCQkJaW50IG5lbnRzLCBpbnQgZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3N0YXRpYyB2b2lkIHNiYV91bm1hcF9zZ19hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAorCQkJICAgICAgIGludCBuZW50cywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJICAgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogI2lmZGVmIEFTU0VSVF9QRElSX1NBTklUWQogCXN0cnVjdCBpb2MgKmlvYzsKQEAgLTE1NTEsNyArMTU2OCw2IEBACiAjZW5kaWYKIAogfQotRVhQT1JUX1NZTUJPTChzYmFfdW5tYXBfc2dfYXR0cnMpOwogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKQEAgLTIwNjQsNiArMjA4MCw4IEBACiAJfSwKIH07CiAKK2V4dGVybiBzdHJ1Y3QgZG1hX21hcF9vcHMgc3dpb3RsYl9kbWFfb3BzOworCiBzdGF0aWMgaW50IF9faW5pdAogc2JhX2luaXQodm9pZCkKIHsKQEAgLTIwNzcsNiArMjA5NSw3IEBACiAJICogYSBzdWNjZXNzZnVsIGtkdW1wIGtlcm5lbCBib290IGlzIHRvIHVzZSB0aGUgc3dpb3RsYi4KIAkgKi8KIAlpZiAoaXNfa2R1bXBfa2VybmVsKCkpIHsKKwkJZG1hX29wcyA9ICZzd2lvdGxiX2RtYV9vcHM7CiAJCWlmIChzd2lvdGxiX2xhdGVfaW5pdF93aXRoX2RlZmF1bHRfc2l6ZSg2NCAqICgxPDwyMCkpICE9IDApCiAJCQlwYW5pYygiVW5hYmxlIHRvIGluaXRpYWxpemUgc29mdHdhcmUgSS9PIFRMQjoiCiAJCQkJICAiIFRyeSBtYWNodmVjPWRpZyBib290IG9wdGlvbiIpOwpAQCAtMjA5Miw2ICsyMTExLDcgQEAKIAkJICogSWYgd2UgZGlkbid0IGZpbmQgc29tZXRoaW5nIHNiYV9pb21tdSBjYW4gY2xhaW0sIHdlCiAJCSAqIG5lZWQgdG8gc2V0dXAgdGhlIHN3aW90bGIgYW5kIHN3aXRjaCB0byB0aGUgZGlnIG1hY2h2ZWMuCiAJCSAqLworCQlkbWFfb3BzID0gJnN3aW90bGJfZG1hX29wczsKIAkJaWYgKHN3aW90bGJfbGF0ZV9pbml0X3dpdGhfZGVmYXVsdF9zaXplKDY0ICogKDE8PDIwKSkgIT0gMCkKIAkJCXBhbmljKCJVbmFibGUgdG8gZmluZCBTQkEgSU9NTVUgb3IgaW5pdGlhbGl6ZSAiCiAJCQkgICAgICAic29mdHdhcmUgSS9PIFRMQjogVHJ5IG1hY2h2ZWM9ZGlnIGJvb3Qgb3B0aW9uIik7CkBAIC0yMTM4LDE1ICsyMTU4LDEzIEBACiAJcmV0dXJuIDE7CiB9CiAKLWludAotc2JhX2RtYV9zdXBwb3J0ZWQgKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCitzdGF0aWMgaW50IHNiYV9kbWFfc3VwcG9ydGVkIChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQogewogCS8qIG1ha2Ugc3VyZSBpdCdzIGF0IGxlYXN0IDMyYml0IGNhcGFibGUgKi8KIAlyZXR1cm4gKChtYXNrICYgMHhGRkZGRkZGRlVMKSA9PSAweEZGRkZGRkZGVUwpOwogfQogCi1pbnQKLXNiYV9kbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCitzdGF0aWMgaW50IHNiYV9kbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCiB7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMTc2LDcgKzIxOTQsMjIgQEAKIAogX19zZXR1cCgic2JhcGFnZXNpemU9IixzYmFfcGFnZV9vdmVycmlkZSk7CiAKLUVYUE9SVF9TWU1CT0woc2JhX2RtYV9tYXBwaW5nX2Vycm9yKTsKLUVYUE9SVF9TWU1CT0woc2JhX2RtYV9zdXBwb3J0ZWQpOwotRVhQT1JUX1NZTUJPTChzYmFfYWxsb2NfY29oZXJlbnQpOwotRVhQT1JUX1NZTUJPTChzYmFfZnJlZV9jb2hlcmVudCk7CitzdHJ1Y3QgZG1hX21hcF9vcHMgc2JhX2RtYV9vcHMgPSB7CisJLmFsbG9jX2NvaGVyZW50CQk9IHNiYV9hbGxvY19jb2hlcmVudCwKKwkuZnJlZV9jb2hlcmVudAkJPSBzYmFfZnJlZV9jb2hlcmVudCwKKwkubWFwX3BhZ2UJCT0gc2JhX21hcF9wYWdlLAorCS51bm1hcF9wYWdlCQk9IHNiYV91bm1hcF9wYWdlLAorCS5tYXBfc2cJCQk9IHNiYV9tYXBfc2dfYXR0cnMsCisJLnVubWFwX3NnCQk9IHNiYV91bm1hcF9zZ19hdHRycywKKwkuc3luY19zaW5nbGVfZm9yX2NwdQk9IG1hY2h2ZWNfZG1hX3N5bmNfc2luZ2xlLAorCS5zeW5jX3NnX2Zvcl9jcHUJPSBtYWNodmVjX2RtYV9zeW5jX3NnLAorCS5zeW5jX3NpbmdsZV9mb3JfZGV2aWNlCT0gbWFjaHZlY19kbWFfc3luY19zaW5nbGUsCisJLnN5bmNfc2dfZm9yX2RldmljZQk9IG1hY2h2ZWNfZG1hX3N5bmNfc2csCisJLmRtYV9zdXBwb3J0ZWQJCT0gc2JhX2RtYV9zdXBwb3J0ZWQsCisJLm1hcHBpbmdfZXJyb3IJCT0gc2JhX2RtYV9tYXBwaW5nX2Vycm9yLAorfTsKKwordm9pZCBzYmFfZG1hX2luaXQodm9pZCkKK3sKKwlkbWFfb3BzID0gJnNiYV9kbWFfb3BzOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCAxZjkxMmQ5Li4zNmMwMDA5IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaApAQCAtMTEsOTkgKzExLDEyOCBAQAogCiAjZGVmaW5lIEFSQ0hfSEFTX0RNQV9HRVRfUkVRVUlSRURfTUFTSwogCi1zdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIHsKLQlpbnQgICAgICAgICAgICAgKCptYXBwaW5nX2Vycm9yKShzdHJ1Y3QgZGV2aWNlICpkZXYsCi0JCQkJCSBkbWFfYWRkcl90IGRtYV9hZGRyKTsKLQl2b2lkKiAgICAgICAgICAgKCphbGxvY19jb2hlcmVudCkoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCQlkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnApOwotCXZvaWQgICAgICAgICAgICAoKmZyZWVfY29oZXJlbnQpKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCi0JCQkJdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSk7Ci0JZG1hX2FkZHJfdCAgICAgICgqbWFwX3NpbmdsZSkoc3RydWN0IGRldmljZSAqaHdkZXYsIHVuc2lnbmVkIGxvbmcgcHRyLAotCQkJCXNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKLQl2b2lkICAgICAgICAgICAgKCp1bm1hcF9zaW5nbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyLAotCQkJCXNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKLQl2b2lkICAgICAgICAgICAgKCpzeW5jX3NpbmdsZV9mb3JfY3B1KShzdHJ1Y3QgZGV2aWNlICpod2RldiwKLQkJCQlkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAotCQkJCWludCBkaXJlY3Rpb24pOwotCXZvaWQgICAgICAgICAgICAoKnN5bmNfc2luZ2xlX2Zvcl9kZXZpY2UpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotCQkJCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCi0JCQkJaW50IGRpcmVjdGlvbik7Ci0Jdm9pZCAgICAgICAgICAgICgqc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdSkoc3RydWN0IGRldmljZSAqaHdkZXYsCi0JCQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkJCQlzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7Ci0Jdm9pZCAgICAgICAgICAgICgqc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZSkoc3RydWN0IGRldmljZSAqaHdkZXYsCi0JCQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkJCQlzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7Ci0Jdm9pZCAgICAgICAgICAgICgqc3luY19zZ19mb3JfY3B1KShzdHJ1Y3QgZGV2aWNlICpod2RldiwKLQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAotCQkJCWludCBkaXJlY3Rpb24pOwotCXZvaWQgICAgICAgICAgICAoKnN5bmNfc2dfZm9yX2RldmljZSkoc3RydWN0IGRldmljZSAqaHdkZXYsCi0JCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKLQkJCQlpbnQgZGlyZWN0aW9uKTsKLQlpbnQgICAgICAgICAgICAgKCptYXBfc2cpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJCWludCBuZW50cywgaW50IGRpcmVjdGlvbik7Ci0Jdm9pZCAgICAgICAgICAgICgqdW5tYXBfc2cpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKLQkJCQlpbnQgZGlyZWN0aW9uKTsKLQlpbnQgICAgICAgICAgICAgKCpkbWFfc3VwcG9ydGVkX29wKShzdHJ1Y3QgZGV2aWNlICpod2RldiwgdTY0IG1hc2spOwotCWludAkJaXNfcGh5czsKLX07Ci0KLWV4dGVybiBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpkbWFfb3BzOworZXh0ZXJuIHN0cnVjdCBkbWFfbWFwX29wcyAqZG1hX29wczsKIGV4dGVybiBzdHJ1Y3QgaWE2NF9tYWNoaW5lX3ZlY3RvciBpYTY0X212OwogZXh0ZXJuIHZvaWQgc2V0X2lvbW11X21hY2h2ZWModm9pZCk7CiAKLSNkZWZpbmUgZG1hX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgaGFuZGxlLCBnZnApCVwKLQlwbGF0Zm9ybV9kbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCBoYW5kbGUsIChnZnApIHwgR0ZQX0RNQSkKK2V4dGVybiB2b2lkIG1hY2h2ZWNfZG1hX3N5bmNfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKiwgZG1hX2FkZHJfdCwgc2l6ZV90LAorCQkJCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbik7CitleHRlcm4gdm9pZCBtYWNodmVjX2RtYV9zeW5jX3NnKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCwKKwkJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbik7CiAKLS8qIGNvaGVyZW50IG1lbS4gaXMgY2hlYXAgKi8KLXN0YXRpYyBpbmxpbmUgdm9pZCAqCi1kbWFfYWxsb2Nfbm9uY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSwKLQkJICAgICAgZ2ZwX3QgZmxhZykKK3N0YXRpYyBpbmxpbmUgdm9pZCAqZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkJICAgICAgIGRtYV9hZGRyX3QgKmRhZGRyLCBnZnBfdCBnZnApCiB7Ci0JcmV0dXJuIGRtYV9hbGxvY19jb2hlcmVudChkZXYsIHNpemUsIGRtYV9oYW5kbGUsIGZsYWcpOworCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gcGxhdGZvcm1fZG1hX2dldF9vcHMoZGV2KTsKKwlyZXR1cm4gb3BzLT5hbGxvY19jb2hlcmVudChkZXYsIHNpemUsIGRhZGRyLCBnZnApOwogfQotI2RlZmluZSBkbWFfZnJlZV9jb2hlcmVudAlwbGF0Zm9ybV9kbWFfZnJlZV9jb2hlcmVudAotc3RhdGljIGlubGluZSB2b2lkCi1kbWFfZnJlZV9ub25jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICpjcHVfYWRkciwKLQkJICAgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCi17Ci0JZG1hX2ZyZWVfY29oZXJlbnQoZGV2LCBzaXplLCBjcHVfYWRkciwgZG1hX2hhbmRsZSk7Ci19Ci0jZGVmaW5lIGRtYV9tYXBfc2luZ2xlX2F0dHJzCXBsYXRmb3JtX2RtYV9tYXBfc2luZ2xlX2F0dHJzCi1zdGF0aWMgaW5saW5lIGRtYV9hZGRyX3QgZG1hX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpjcHVfYWRkciwKLQkJCQkJc2l6ZV90IHNpemUsIGludCBkaXIpCi17Ci0JcmV0dXJuIGRtYV9tYXBfc2luZ2xlX2F0dHJzKGRldiwgY3B1X2FkZHIsIHNpemUsIGRpciwgTlVMTCk7Ci19Ci0jZGVmaW5lIGRtYV9tYXBfc2dfYXR0cnMJcGxhdGZvcm1fZG1hX21hcF9zZ19hdHRycwotc3RhdGljIGlubGluZSBpbnQgZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAotCQkJICAgICBpbnQgbmVudHMsIGludCBkaXIpCi17Ci0JcmV0dXJuIGRtYV9tYXBfc2dfYXR0cnMoZGV2LCBzZ2wsIG5lbnRzLCBkaXIsIE5VTEwpOwotfQotI2RlZmluZSBkbWFfdW5tYXBfc2luZ2xlX2F0dHJzCXBsYXRmb3JtX2RtYV91bm1hcF9zaW5nbGVfYXR0cnMKLXN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBjcHVfYWRkciwKLQkJCQkgICAgc2l6ZV90IHNpemUsIGludCBkaXIpCi17Ci0JcmV0dXJuIGRtYV91bm1hcF9zaW5nbGVfYXR0cnMoZGV2LCBjcHVfYWRkciwgc2l6ZSwgZGlyLCBOVUxMKTsKLX0KLSNkZWZpbmUgZG1hX3VubWFwX3NnX2F0dHJzCXBsYXRmb3JtX2RtYV91bm1hcF9zZ19hdHRycwotc3RhdGljIGlubGluZSB2b2lkIGRtYV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAotCQkJCWludCBuZW50cywgaW50IGRpcikKLXsKLQlyZXR1cm4gZG1hX3VubWFwX3NnX2F0dHJzKGRldiwgc2dsLCBuZW50cywgZGlyLCBOVUxMKTsKLX0KLSNkZWZpbmUgZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUJcGxhdGZvcm1fZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUKLSNkZWZpbmUgZG1hX3N5bmNfc2dfZm9yX2NwdQlwbGF0Zm9ybV9kbWFfc3luY19zZ19mb3JfY3B1Ci0jZGVmaW5lIGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlIHBsYXRmb3JtX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlCi0jZGVmaW5lIGRtYV9zeW5jX3NnX2Zvcl9kZXZpY2UJcGxhdGZvcm1fZG1hX3N5bmNfc2dfZm9yX2RldmljZQotI2RlZmluZSBkbWFfbWFwcGluZ19lcnJvcglwbGF0Zm9ybV9kbWFfbWFwcGluZ19lcnJvcgogCi0jZGVmaW5lIGRtYV9tYXBfcGFnZShkZXYsIHBnLCBvZmYsIHNpemUsIGRpcikJCQkJXAotCWRtYV9tYXBfc2luZ2xlKGRldiwgcGFnZV9hZGRyZXNzKHBnKSArIChvZmYpLCAoc2l6ZSksIChkaXIpKQotI2RlZmluZSBkbWFfdW5tYXBfcGFnZShkZXYsIGRtYV9hZGRyLCBzaXplLCBkaXIpCQkJXAotCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBkbWFfYWRkciwgc2l6ZSwgZGlyKQorc3RhdGljIGlubGluZSB2b2lkIGRtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkJICAgICB2b2lkICpjYWRkciwgZG1hX2FkZHJfdCBkYWRkcikKK3sKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IHBsYXRmb3JtX2RtYV9nZXRfb3BzKGRldik7CisJb3BzLT5mcmVlX2NvaGVyZW50KGRldiwgc2l6ZSwgY2FkZHIsIGRhZGRyKTsKK30KKworI2RlZmluZSBkbWFfYWxsb2Nfbm9uY29oZXJlbnQoZCwgcywgaCwgZikgZG1hX2FsbG9jX2NvaGVyZW50KGQsIHMsIGgsIGYpCisjZGVmaW5lIGRtYV9mcmVlX25vbmNvaGVyZW50KGQsIHMsIHYsIGgpIGRtYV9mcmVlX2NvaGVyZW50KGQsIHMsIHYsIGgpCisKK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBkbWFfbWFwX3NpbmdsZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICAgIHZvaWQgKmNhZGRyLCBzaXplX3Qgc2l6ZSwKKwkJCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJCQkgICAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3sKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IHBsYXRmb3JtX2RtYV9nZXRfb3BzKGRldik7CisJcmV0dXJuIG9wcy0+bWFwX3BhZ2UoZGV2LCB2aXJ0X3RvX3BhZ2UoY2FkZHIpLAorCQkJICAgICAodW5zaWduZWQgbG9uZyljYWRkciAmIH5QQUdFX01BU0ssIHNpemUsCisJCQkgICAgIGRpciwgYXR0cnMpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3VubWFwX3NpbmdsZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZGFkZHIsCisJCQkJCSAgc2l6ZV90IHNpemUsCisJCQkJCSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJCQkgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQoreworCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gcGxhdGZvcm1fZG1hX2dldF9vcHMoZGV2KTsKKwlvcHMtPnVubWFwX3BhZ2UoZGV2LCBkYWRkciwgc2l6ZSwgZGlyLCBhdHRycyk7Cit9CisKKyNkZWZpbmUgZG1hX21hcF9zaW5nbGUoZCwgYSwgcywgcikgZG1hX21hcF9zaW5nbGVfYXR0cnMoZCwgYSwgcywgciwgTlVMTCkKKyNkZWZpbmUgZG1hX3VubWFwX3NpbmdsZShkLCBhLCBzLCByKSBkbWFfdW5tYXBfc2luZ2xlX2F0dHJzKGQsIGEsIHMsIHIsIE5VTEwpCisKK3N0YXRpYyBpbmxpbmUgaW50IGRtYV9tYXBfc2dfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKKwkJCQkgICBpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCQkgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3sKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IHBsYXRmb3JtX2RtYV9nZXRfb3BzKGRldik7CisJcmV0dXJuIG9wcy0+bWFwX3NnKGRldiwgc2dsLCBuZW50cywgZGlyLCBhdHRycyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfc2dfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCBpbnQgbmVudHMsCisJCQkJICAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJCSAgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQoreworCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gcGxhdGZvcm1fZG1hX2dldF9vcHMoZGV2KTsKKwlvcHMtPnVubWFwX3NnKGRldiwgc2dsLCBuZW50cywgZGlyLCBhdHRycyk7Cit9CisKKyNkZWZpbmUgZG1hX21hcF9zZyhkLCBzLCBuLCByKSBkbWFfbWFwX3NnX2F0dHJzKGQsIHMsIG4sIHIsIE5VTEwpCisjZGVmaW5lIGRtYV91bm1hcF9zZyhkLCBzLCBuLCByKSBkbWFfdW5tYXBfc2dfYXR0cnMoZCwgcywgbiwgciwgTlVMTCkKKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkYWRkciwKKwkJCQkJICAgc2l6ZV90IHNpemUsCisJCQkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IHBsYXRmb3JtX2RtYV9nZXRfb3BzKGRldik7CisJb3BzLT5zeW5jX3NpbmdsZV9mb3JfY3B1KGRldiwgZGFkZHIsIHNpemUsIGRpcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkgICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCisJCQkJICAgICAgIGludCBuZW50cywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gcGxhdGZvcm1fZG1hX2dldF9vcHMoZGV2KTsKKwlvcHMtPnN5bmNfc2dfZm9yX2NwdShkZXYsIHNnbCwgbmVudHMsIGRpcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICAgIGRtYV9hZGRyX3QgZGFkZHIsCisJCQkJCSAgICAgIHNpemVfdCBzaXplLAorCQkJCQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBwbGF0Zm9ybV9kbWFfZ2V0X29wcyhkZXYpOworCW9wcy0+c3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGRhZGRyLCBzaXplLCBkaXIpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCisJCQkJCSAgaW50IG5lbnRzLAorCQkJCQkgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKK3sKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IHBsYXRmb3JtX2RtYV9nZXRfb3BzKGRldik7CisJb3BzLT5zeW5jX3NnX2Zvcl9kZXZpY2UoZGV2LCBzZ2wsIG5lbnRzLCBkaXIpOworfQorCitzdGF0aWMgaW5saW5lIGludCBkbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZGFkZHIpCit7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBwbGF0Zm9ybV9kbWFfZ2V0X29wcyhkZXYpOworCXJldHVybiBvcHMtPm1hcHBpbmdfZXJyb3IoZGV2LCBkYWRkcik7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBkbWFfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkgICAgICBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCit7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBwbGF0Zm9ybV9kbWFfZ2V0X29wcyhkZXYpOworCXJldHVybiBvcHMtPm1hcF9wYWdlKGRldiwgcGFnZSwgb2Zmc2V0LCBzaXplLCBkaXIsIE5VTEwpOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZG1hX3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIsCisJCQkJICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQoreworCWRtYV91bm1hcF9zaW5nbGUoZGV2LCBhZGRyLCBzaXplLCBkaXIpOworfQogCiAvKgogICogUmVzdCBvZiB0aGlzIGZpbGUgaXMgcGFydCBvZiB0aGUgIkFkdmFuY2VkIERNQSBBUEkiLiAgVXNlIGF0IHlvdXIgb3duIHJpc2suCkBAIC0xMTUsNyArMTQ0LDExIEBACiAjZGVmaW5lIGRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKGRldiwgZG1hX2hhbmRsZSwgb2Zmc2V0LCBzaXplLCBkaXIpCVwKIAlkbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShkZXYsIGRtYV9oYW5kbGUsIHNpemUsIGRpcikKIAotI2RlZmluZSBkbWFfc3VwcG9ydGVkCQlwbGF0Zm9ybV9kbWFfc3VwcG9ydGVkCitzdGF0aWMgaW5saW5lIGludCBkbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCit7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBwbGF0Zm9ybV9kbWFfZ2V0X29wcyhkZXYpOworCXJldHVybiBvcHMtPmRtYV9zdXBwb3J0ZWQoZGV2LCBtYXNrKTsKK30KIAogc3RhdGljIGlubGluZSBpbnQKIGRtYV9zZXRfbWFzayAoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKQEAgLTE0MSwxMSArMTc0LDQgQEAKIAogI2RlZmluZSBkbWFfaXNfY29uc2lzdGVudChkLCBoKQkoMSkJLyogYWxsIHdlIGRvIGlzIGNvaGVyZW50IG1lbW9yeS4uLiAqLwogCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmdldF9kbWFfb3BzKHN0cnVjdCBkZXZpY2UgKmRldikKLXsKLQlyZXR1cm4gZG1hX29wczsKLX0KLQotCi0KICNlbmRpZiAvKiBfQVNNX0lBNjRfRE1BX01BUFBJTkdfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21hY2h2ZWMuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tYWNodmVjLmgKaW5kZXggZmU4N2IyMS4uMzY3ZDI5OSAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21hY2h2ZWMuaAorKysgYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlYy5oCkBAIC0xMSw3ICsxMSw2IEBACiAjZGVmaW5lIF9BU01fSUE2NF9NQUNIVkVDX0gKIAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0jaW5jbHVkZSA8bGludXgvc3dpb3RsYi5oPgogCiAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uczogKi8KIHN0cnVjdCBkZXZpY2U7CkBAIC00NSwyNCArNDQsOCBAQAogCiAvKiBETUEtbWFwcGluZyBpbnRlcmZhY2U6ICovCiB0eXBlZGVmIHZvaWQgaWE2NF9tdl9kbWFfaW5pdCAodm9pZCk7Ci10eXBlZGVmIHZvaWQgKmlhNjRfbXZfZG1hX2FsbG9jX2NvaGVyZW50IChzdHJ1Y3QgZGV2aWNlICosIHNpemVfdCwgZG1hX2FkZHJfdCAqLCBnZnBfdCk7Ci10eXBlZGVmIHZvaWQgaWE2NF9tdl9kbWFfZnJlZV9jb2hlcmVudCAoc3RydWN0IGRldmljZSAqLCBzaXplX3QsIHZvaWQgKiwgZG1hX2FkZHJfdCk7Ci10eXBlZGVmIGRtYV9hZGRyX3QgaWE2NF9tdl9kbWFfbWFwX3NpbmdsZSAoc3RydWN0IGRldmljZSAqLCB2b2lkICosIHNpemVfdCwgaW50KTsKLXR5cGVkZWYgdm9pZCBpYTY0X212X2RtYV91bm1hcF9zaW5nbGUgKHN0cnVjdCBkZXZpY2UgKiwgZG1hX2FkZHJfdCwgc2l6ZV90LCBpbnQpOwotdHlwZWRlZiBpbnQgaWE2NF9tdl9kbWFfbWFwX3NnIChzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQsIGludCk7Ci10eXBlZGVmIHZvaWQgaWE2NF9tdl9kbWFfdW5tYXBfc2cgKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCwgaW50KTsKLXR5cGVkZWYgdm9pZCBpYTY0X212X2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1IChzdHJ1Y3QgZGV2aWNlICosIGRtYV9hZGRyX3QsIHNpemVfdCwgaW50KTsKLXR5cGVkZWYgdm9pZCBpYTY0X212X2RtYV9zeW5jX3NnX2Zvcl9jcHUgKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCwgaW50KTsKLXR5cGVkZWYgdm9pZCBpYTY0X212X2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlIChzdHJ1Y3QgZGV2aWNlICosIGRtYV9hZGRyX3QsIHNpemVfdCwgaW50KTsKLXR5cGVkZWYgdm9pZCBpYTY0X212X2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UgKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCwgaW50KTsKLXR5cGVkZWYgaW50IGlhNjRfbXZfZG1hX21hcHBpbmdfZXJyb3Ioc3RydWN0IGRldmljZSAqLCBkbWFfYWRkcl90IGRtYV9hZGRyKTsKLXR5cGVkZWYgaW50IGlhNjRfbXZfZG1hX3N1cHBvcnRlZCAoc3RydWN0IGRldmljZSAqLCB1NjQpOwotCi10eXBlZGVmIGRtYV9hZGRyX3QgaWE2NF9tdl9kbWFfbWFwX3NpbmdsZV9hdHRycyAoc3RydWN0IGRldmljZSAqLCB2b2lkICosIHNpemVfdCwgaW50LCBzdHJ1Y3QgZG1hX2F0dHJzICopOwotdHlwZWRlZiB2b2lkIGlhNjRfbXZfZG1hX3VubWFwX3NpbmdsZV9hdHRycyAoc3RydWN0IGRldmljZSAqLCBkbWFfYWRkcl90LCBzaXplX3QsIGludCwgc3RydWN0IGRtYV9hdHRycyAqKTsKLXR5cGVkZWYgaW50IGlhNjRfbXZfZG1hX21hcF9zZ19hdHRycyAoc3RydWN0IGRldmljZSAqLCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKiwgaW50LCBpbnQsIHN0cnVjdCBkbWFfYXR0cnMgKik7Ci10eXBlZGVmIHZvaWQgaWE2NF9tdl9kbWFfdW5tYXBfc2dfYXR0cnMgKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCwgaW50LCBzdHJ1Y3QgZG1hX2F0dHJzICopOwogdHlwZWRlZiB1NjQgaWE2NF9tdl9kbWFfZ2V0X3JlcXVpcmVkX21hc2sgKHN0cnVjdCBkZXZpY2UgKik7Cit0eXBlZGVmIHN0cnVjdCBkbWFfbWFwX29wcyAqaWE2NF9tdl9kbWFfZ2V0X29wcyhzdHJ1Y3QgZGV2aWNlICopOwogCiAvKgogICogV0FSTklORzogVGhlIGxlZ2FjeSBJL08gc3BhY2UgaXMgX2FyY2hpdGVjdGVkXy4gIFBsYXRmb3JtcyBhcmUKQEAgLTExNCw4ICs5Nyw2IEBACiAKIGV4dGVybiB2b2lkIG1hY2h2ZWNfc2V0dXAgKGNoYXIgKiopOwogZXh0ZXJuIHZvaWQgbWFjaHZlY190aW1lcl9pbnRlcnJ1cHQgKGludCwgdm9pZCAqKTsKLWV4dGVybiB2b2lkIG1hY2h2ZWNfZG1hX3N5bmNfc2luZ2xlIChzdHJ1Y3QgZGV2aWNlICosIGRtYV9hZGRyX3QsIHNpemVfdCwgaW50KTsKLWV4dGVybiB2b2lkIG1hY2h2ZWNfZG1hX3N5bmNfc2cgKHN0cnVjdCBkZXZpY2UgKiwgc3RydWN0IHNjYXR0ZXJsaXN0ICosIGludCwgaW50KTsKIGV4dGVybiB2b2lkIG1hY2h2ZWNfdGxiX21pZ3JhdGVfZmluaXNoIChzdHJ1Y3QgbW1fc3RydWN0ICopOwogCiAjIGlmIGRlZmluZWQgKENPTkZJR19JQTY0X0hQX1NJTSkKQEAgLTE0OCwxOSArMTI5LDggQEAKICMgIGRlZmluZSBwbGF0Zm9ybV9nbG9iYWxfdGxiX3B1cmdlCWlhNjRfbXYuZ2xvYmFsX3RsYl9wdXJnZQogIyAgZGVmaW5lIHBsYXRmb3JtX3RsYl9taWdyYXRlX2ZpbmlzaAlpYTY0X212LnRsYl9taWdyYXRlX2ZpbmlzaAogIyAgZGVmaW5lIHBsYXRmb3JtX2RtYV9pbml0CQlpYTY0X212LmRtYV9pbml0Ci0jICBkZWZpbmUgcGxhdGZvcm1fZG1hX2FsbG9jX2NvaGVyZW50CWlhNjRfbXYuZG1hX2FsbG9jX2NvaGVyZW50Ci0jICBkZWZpbmUgcGxhdGZvcm1fZG1hX2ZyZWVfY29oZXJlbnQJaWE2NF9tdi5kbWFfZnJlZV9jb2hlcmVudAotIyAgZGVmaW5lIHBsYXRmb3JtX2RtYV9tYXBfc2luZ2xlX2F0dHJzCWlhNjRfbXYuZG1hX21hcF9zaW5nbGVfYXR0cnMKLSMgIGRlZmluZSBwbGF0Zm9ybV9kbWFfdW5tYXBfc2luZ2xlX2F0dHJzCWlhNjRfbXYuZG1hX3VubWFwX3NpbmdsZV9hdHRycwotIyAgZGVmaW5lIHBsYXRmb3JtX2RtYV9tYXBfc2dfYXR0cnMJaWE2NF9tdi5kbWFfbWFwX3NnX2F0dHJzCi0jICBkZWZpbmUgcGxhdGZvcm1fZG1hX3VubWFwX3NnX2F0dHJzCWlhNjRfbXYuZG1hX3VubWFwX3NnX2F0dHJzCi0jICBkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUgaWE2NF9tdi5kbWFfc3luY19zaW5nbGVfZm9yX2NwdQotIyAgZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NnX2Zvcl9jcHUJaWE2NF9tdi5kbWFfc3luY19zZ19mb3JfY3B1Ci0jICBkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UgaWE2NF9tdi5kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZQotIyAgZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UgaWE2NF9tdi5kbWFfc3luY19zZ19mb3JfZGV2aWNlCi0jICBkZWZpbmUgcGxhdGZvcm1fZG1hX21hcHBpbmdfZXJyb3IJCWlhNjRfbXYuZG1hX21hcHBpbmdfZXJyb3IKLSMgIGRlZmluZSBwbGF0Zm9ybV9kbWFfc3VwcG9ydGVkCWlhNjRfbXYuZG1hX3N1cHBvcnRlZAogIyAgZGVmaW5lIHBsYXRmb3JtX2RtYV9nZXRfcmVxdWlyZWRfbWFzayBpYTY0X212LmRtYV9nZXRfcmVxdWlyZWRfbWFzaworIyAgZGVmaW5lIHBsYXRmb3JtX2RtYV9nZXRfb3BzCQlpYTY0X212LmRtYV9nZXRfb3BzCiAjICBkZWZpbmUgcGxhdGZvcm1faXJxX3RvX3ZlY3RvcglpYTY0X212LmlycV90b192ZWN0b3IKICMgIGRlZmluZSBwbGF0Zm9ybV9sb2NhbF92ZWN0b3JfdG9faXJxCWlhNjRfbXYubG9jYWxfdmVjdG9yX3RvX2lycQogIyAgZGVmaW5lIHBsYXRmb3JtX3BjaV9nZXRfbGVnYWN5X21lbQlpYTY0X212LnBjaV9nZXRfbGVnYWN5X21lbQpAQCAtMjAzLDE5ICsxNzMsOCBAQAogCWlhNjRfbXZfZ2xvYmFsX3RsYl9wdXJnZV90ICpnbG9iYWxfdGxiX3B1cmdlOwogCWlhNjRfbXZfdGxiX21pZ3JhdGVfZmluaXNoX3QgKnRsYl9taWdyYXRlX2ZpbmlzaDsKIAlpYTY0X212X2RtYV9pbml0ICpkbWFfaW5pdDsKLQlpYTY0X212X2RtYV9hbGxvY19jb2hlcmVudCAqZG1hX2FsbG9jX2NvaGVyZW50OwotCWlhNjRfbXZfZG1hX2ZyZWVfY29oZXJlbnQgKmRtYV9mcmVlX2NvaGVyZW50OwotCWlhNjRfbXZfZG1hX21hcF9zaW5nbGVfYXR0cnMgKmRtYV9tYXBfc2luZ2xlX2F0dHJzOwotCWlhNjRfbXZfZG1hX3VubWFwX3NpbmdsZV9hdHRycyAqZG1hX3VubWFwX3NpbmdsZV9hdHRyczsKLQlpYTY0X212X2RtYV9tYXBfc2dfYXR0cnMgKmRtYV9tYXBfc2dfYXR0cnM7Ci0JaWE2NF9tdl9kbWFfdW5tYXBfc2dfYXR0cnMgKmRtYV91bm1hcF9zZ19hdHRyczsKLQlpYTY0X212X2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1ICpkbWFfc3luY19zaW5nbGVfZm9yX2NwdTsKLQlpYTY0X212X2RtYV9zeW5jX3NnX2Zvcl9jcHUgKmRtYV9zeW5jX3NnX2Zvcl9jcHU7Ci0JaWE2NF9tdl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSAqZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2U7Ci0JaWE2NF9tdl9kbWFfc3luY19zZ19mb3JfZGV2aWNlICpkbWFfc3luY19zZ19mb3JfZGV2aWNlOwotCWlhNjRfbXZfZG1hX21hcHBpbmdfZXJyb3IgKmRtYV9tYXBwaW5nX2Vycm9yOwotCWlhNjRfbXZfZG1hX3N1cHBvcnRlZCAqZG1hX3N1cHBvcnRlZDsKIAlpYTY0X212X2RtYV9nZXRfcmVxdWlyZWRfbWFzayAqZG1hX2dldF9yZXF1aXJlZF9tYXNrOworCWlhNjRfbXZfZG1hX2dldF9vcHMgKmRtYV9nZXRfb3BzOwogCWlhNjRfbXZfaXJxX3RvX3ZlY3RvciAqaXJxX3RvX3ZlY3RvcjsKIAlpYTY0X212X2xvY2FsX3ZlY3Rvcl90b19pcnEgKmxvY2FsX3ZlY3Rvcl90b19pcnE7CiAJaWE2NF9tdl9wY2lfZ2V0X2xlZ2FjeV9tZW1fdCAqcGNpX2dldF9sZWdhY3lfbWVtOwpAQCAtMjU0LDE5ICsyMTMsOCBAQAogCXBsYXRmb3JtX2dsb2JhbF90bGJfcHVyZ2UsCQlcCiAJcGxhdGZvcm1fdGxiX21pZ3JhdGVfZmluaXNoLAkJXAogCXBsYXRmb3JtX2RtYV9pbml0LAkJCVwKLQlwbGF0Zm9ybV9kbWFfYWxsb2NfY29oZXJlbnQsCQlcCi0JcGxhdGZvcm1fZG1hX2ZyZWVfY29oZXJlbnQsCQlcCi0JcGxhdGZvcm1fZG1hX21hcF9zaW5nbGVfYXR0cnMsCQlcCi0JcGxhdGZvcm1fZG1hX3VubWFwX3NpbmdsZV9hdHRycywJXAotCXBsYXRmb3JtX2RtYV9tYXBfc2dfYXR0cnMsCQlcCi0JcGxhdGZvcm1fZG1hX3VubWFwX3NnX2F0dHJzLAkJXAotCXBsYXRmb3JtX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1LAlcCi0JcGxhdGZvcm1fZG1hX3N5bmNfc2dfZm9yX2NwdSwJCVwKLQlwbGF0Zm9ybV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSwJXAotCXBsYXRmb3JtX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UsCVwKLQlwbGF0Zm9ybV9kbWFfbWFwcGluZ19lcnJvciwJCQlcCi0JcGxhdGZvcm1fZG1hX3N1cHBvcnRlZCwJCQlcCiAJcGxhdGZvcm1fZG1hX2dldF9yZXF1aXJlZF9tYXNrLAkJXAorCXBsYXRmb3JtX2RtYV9nZXRfb3BzLAkJCVwKIAlwbGF0Zm9ybV9pcnFfdG9fdmVjdG9yLAkJCVwKIAlwbGF0Zm9ybV9sb2NhbF92ZWN0b3JfdG9faXJxLAkJXAogCXBsYXRmb3JtX3BjaV9nZXRfbGVnYWN5X21lbSwJCVwKQEAgLTMwMiw2ICsyNTAsOSBAQAogIyAgZXJyb3IgVW5rbm93biBjb25maWd1cmF0aW9uLiAgVXBkYXRlIGFyY2gvaWE2NC9pbmNsdWRlL2FzbS9tYWNodmVjLmguCiAjIGVuZGlmIC8qIENPTkZJR19JQTY0X0dFTkVSSUMgKi8KIAorZXh0ZXJuIHZvaWQgc3dpb3RsYl9kbWFfaW5pdCh2b2lkKTsKK2V4dGVybiBzdHJ1Y3QgZG1hX21hcF9vcHMgKmRtYV9nZXRfb3BzKHN0cnVjdCBkZXZpY2UgKik7CisKIC8qCiAgKiBEZWZpbmUgZGVmYXVsdCB2ZXJzaW9ucyBzbyB3ZSBjYW4gZXh0ZW5kIG1hY2h2ZWMgZm9yIG5ldyBwbGF0Zm9ybXMgd2l0aG91dCBoYXZpbmcKICAqIHRvIHVwZGF0ZSB0aGUgbWFjaHZlYyBmaWxlcyBmb3IgYWxsIGV4aXN0aW5nIHBsYXRmb3Jtcy4KQEAgLTMzMiw0MyArMjgzLDEwIEBACiAjIGRlZmluZSBwbGF0Zm9ybV9rZXJuZWxfbGF1bmNoX2V2ZW50CW1hY2h2ZWNfbm9vcAogI2VuZGlmCiAjaWZuZGVmIHBsYXRmb3JtX2RtYV9pbml0Ci0jIGRlZmluZSBwbGF0Zm9ybV9kbWFfaW5pdAkJc3dpb3RsYl9pbml0CisjIGRlZmluZSBwbGF0Zm9ybV9kbWFfaW5pdAkJc3dpb3RsYl9kbWFfaW5pdAogI2VuZGlmCi0jaWZuZGVmIHBsYXRmb3JtX2RtYV9hbGxvY19jb2hlcmVudAotIyBkZWZpbmUgcGxhdGZvcm1fZG1hX2FsbG9jX2NvaGVyZW50CXN3aW90bGJfYWxsb2NfY29oZXJlbnQKLSNlbmRpZgotI2lmbmRlZiBwbGF0Zm9ybV9kbWFfZnJlZV9jb2hlcmVudAotIyBkZWZpbmUgcGxhdGZvcm1fZG1hX2ZyZWVfY29oZXJlbnQJc3dpb3RsYl9mcmVlX2NvaGVyZW50Ci0jZW5kaWYKLSNpZm5kZWYgcGxhdGZvcm1fZG1hX21hcF9zaW5nbGVfYXR0cnMKLSMgZGVmaW5lIHBsYXRmb3JtX2RtYV9tYXBfc2luZ2xlX2F0dHJzCXN3aW90bGJfbWFwX3NpbmdsZV9hdHRycwotI2VuZGlmCi0jaWZuZGVmIHBsYXRmb3JtX2RtYV91bm1hcF9zaW5nbGVfYXR0cnMKLSMgZGVmaW5lIHBsYXRmb3JtX2RtYV91bm1hcF9zaW5nbGVfYXR0cnMJc3dpb3RsYl91bm1hcF9zaW5nbGVfYXR0cnMKLSNlbmRpZgotI2lmbmRlZiBwbGF0Zm9ybV9kbWFfbWFwX3NnX2F0dHJzCi0jIGRlZmluZSBwbGF0Zm9ybV9kbWFfbWFwX3NnX2F0dHJzCXN3aW90bGJfbWFwX3NnX2F0dHJzCi0jZW5kaWYKLSNpZm5kZWYgcGxhdGZvcm1fZG1hX3VubWFwX3NnX2F0dHJzCi0jIGRlZmluZSBwbGF0Zm9ybV9kbWFfdW5tYXBfc2dfYXR0cnMJc3dpb3RsYl91bm1hcF9zZ19hdHRycwotI2VuZGlmCi0jaWZuZGVmIHBsYXRmb3JtX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1Ci0jIGRlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdQlzd2lvdGxiX3N5bmNfc2luZ2xlX2Zvcl9jcHUKLSNlbmRpZgotI2lmbmRlZiBwbGF0Zm9ybV9kbWFfc3luY19zZ19mb3JfY3B1Ci0jIGRlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zZ19mb3JfY3B1CQlzd2lvdGxiX3N5bmNfc2dfZm9yX2NwdQotI2VuZGlmCi0jaWZuZGVmIHBsYXRmb3JtX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlCi0jIGRlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZQlzd2lvdGxiX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UKLSNlbmRpZgotI2lmbmRlZiBwbGF0Zm9ybV9kbWFfc3luY19zZ19mb3JfZGV2aWNlCi0jIGRlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zZ19mb3JfZGV2aWNlCXN3aW90bGJfc3luY19zZ19mb3JfZGV2aWNlCi0jZW5kaWYKLSNpZm5kZWYgcGxhdGZvcm1fZG1hX21hcHBpbmdfZXJyb3IKLSMgZGVmaW5lIHBsYXRmb3JtX2RtYV9tYXBwaW5nX2Vycm9yCQlzd2lvdGxiX2RtYV9tYXBwaW5nX2Vycm9yCi0jZW5kaWYKLSNpZm5kZWYgcGxhdGZvcm1fZG1hX3N1cHBvcnRlZAotIyBkZWZpbmUgIHBsYXRmb3JtX2RtYV9zdXBwb3J0ZWQJc3dpb3RsYl9kbWFfc3VwcG9ydGVkCisjaWZuZGVmIHBsYXRmb3JtX2RtYV9nZXRfb3BzCisjIGRlZmluZSBwbGF0Zm9ybV9kbWFfZ2V0X29wcwkJZG1hX2dldF9vcHMKICNlbmRpZgogI2lmbmRlZiBwbGF0Zm9ybV9kbWFfZ2V0X3JlcXVpcmVkX21hc2sKICMgZGVmaW5lICBwbGF0Zm9ybV9kbWFfZ2V0X3JlcXVpcmVkX21hc2sJaWE2NF9kbWFfZ2V0X3JlcXVpcmVkX21hc2sKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tYWNodmVjX2RpZ192dGQuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tYWNodmVjX2RpZ192dGQuaAppbmRleCAzNDAwYjU2Li42YWIxZGU1IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlY19kaWdfdnRkLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21hY2h2ZWNfZGlnX3Z0ZC5oCkBAIC0yLDE0ICsyLDYgQEAKICNkZWZpbmUgX0FTTV9JQTY0X01BQ0hWRUNfRElHX1ZURF9oCiAKIGV4dGVybiBpYTY0X212X3NldHVwX3QJCQlkaWdfc2V0dXA7Ci1leHRlcm4gaWE2NF9tdl9kbWFfYWxsb2NfY29oZXJlbnQJdnRkX2FsbG9jX2NvaGVyZW50OwotZXh0ZXJuIGlhNjRfbXZfZG1hX2ZyZWVfY29oZXJlbnQJdnRkX2ZyZWVfY29oZXJlbnQ7Ci1leHRlcm4gaWE2NF9tdl9kbWFfbWFwX3NpbmdsZV9hdHRycwl2dGRfbWFwX3NpbmdsZV9hdHRyczsKLWV4dGVybiBpYTY0X212X2RtYV91bm1hcF9zaW5nbGVfYXR0cnMJdnRkX3VubWFwX3NpbmdsZV9hdHRyczsKLWV4dGVybiBpYTY0X212X2RtYV9tYXBfc2dfYXR0cnMJCXZ0ZF9tYXBfc2dfYXR0cnM7Ci1leHRlcm4gaWE2NF9tdl9kbWFfdW5tYXBfc2dfYXR0cnMJdnRkX3VubWFwX3NnX2F0dHJzOwotZXh0ZXJuIGlhNjRfbXZfZG1hX3N1cHBvcnRlZAkJaW9tbXVfZG1hX3N1cHBvcnRlZDsKLWV4dGVybiBpYTY0X212X2RtYV9tYXBwaW5nX2Vycm9yCXZ0ZF9kbWFfbWFwcGluZ19lcnJvcjsKIGV4dGVybiBpYTY0X212X2RtYV9pbml0CQkJcGNpX2lvbW11X2FsbG9jOwogCiAvKgpAQCAtMjIsMTcgKzE0LDUgQEAKICNkZWZpbmUgcGxhdGZvcm1fbmFtZQkJCQkiZGlnX3Z0ZCIKICNkZWZpbmUgcGxhdGZvcm1fc2V0dXAJCQkJZGlnX3NldHVwCiAjZGVmaW5lIHBsYXRmb3JtX2RtYV9pbml0CQkJcGNpX2lvbW11X2FsbG9jCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9hbGxvY19jb2hlcmVudAkJdnRkX2FsbG9jX2NvaGVyZW50Ci0jZGVmaW5lIHBsYXRmb3JtX2RtYV9mcmVlX2NvaGVyZW50CQl2dGRfZnJlZV9jb2hlcmVudAotI2RlZmluZSBwbGF0Zm9ybV9kbWFfbWFwX3NpbmdsZV9hdHRycwkJdnRkX21hcF9zaW5nbGVfYXR0cnMKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3VubWFwX3NpbmdsZV9hdHRycwkJdnRkX3VubWFwX3NpbmdsZV9hdHRycwotI2RlZmluZSBwbGF0Zm9ybV9kbWFfbWFwX3NnX2F0dHJzCQl2dGRfbWFwX3NnX2F0dHJzCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV91bm1hcF9zZ19hdHRycwkJdnRkX3VubWFwX3NnX2F0dHJzCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1CW1hY2h2ZWNfZG1hX3N5bmNfc2luZ2xlCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NnX2Zvcl9jcHUJCW1hY2h2ZWNfZG1hX3N5bmNfc2cKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UJbWFjaHZlY19kbWFfc3luY19zaW5nbGUKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2dfZm9yX2RldmljZQkJbWFjaHZlY19kbWFfc3luY19zZwotI2RlZmluZSBwbGF0Zm9ybV9kbWFfc3VwcG9ydGVkCQkJaW9tbXVfZG1hX3N1cHBvcnRlZAotI2RlZmluZSBwbGF0Zm9ybV9kbWFfbWFwcGluZ19lcnJvcgkJdnRkX2RtYV9tYXBwaW5nX2Vycm9yCiAKICNlbmRpZiAvKiBfQVNNX0lBNjRfTUFDSFZFQ19ESUdfVlREX2ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tYWNodmVjX2hwengxLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlY19ocHp4MS5oCmluZGV4IDJmNTdmNTEuLjNiZDgzZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tYWNodmVjX2hwengxLmgKKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21hY2h2ZWNfaHB6eDEuaApAQCAtMiwxNCArMiw3IEBACiAjZGVmaW5lIF9BU01fSUE2NF9NQUNIVkVDX0hQWlgxX2gKIAogZXh0ZXJuIGlhNjRfbXZfc2V0dXBfdAkJCWRpZ19zZXR1cDsKLWV4dGVybiBpYTY0X212X2RtYV9hbGxvY19jb2hlcmVudAlzYmFfYWxsb2NfY29oZXJlbnQ7Ci1leHRlcm4gaWE2NF9tdl9kbWFfZnJlZV9jb2hlcmVudAlzYmFfZnJlZV9jb2hlcmVudDsKLWV4dGVybiBpYTY0X212X2RtYV9tYXBfc2luZ2xlX2F0dHJzCXNiYV9tYXBfc2luZ2xlX2F0dHJzOwotZXh0ZXJuIGlhNjRfbXZfZG1hX3VubWFwX3NpbmdsZV9hdHRycwlzYmFfdW5tYXBfc2luZ2xlX2F0dHJzOwotZXh0ZXJuIGlhNjRfbXZfZG1hX21hcF9zZ19hdHRycwkJc2JhX21hcF9zZ19hdHRyczsKLWV4dGVybiBpYTY0X212X2RtYV91bm1hcF9zZ19hdHRycwlzYmFfdW5tYXBfc2dfYXR0cnM7Ci1leHRlcm4gaWE2NF9tdl9kbWFfc3VwcG9ydGVkCQlzYmFfZG1hX3N1cHBvcnRlZDsKLWV4dGVybiBpYTY0X212X2RtYV9tYXBwaW5nX2Vycm9yCXNiYV9kbWFfbWFwcGluZ19lcnJvcjsKK2V4dGVybiBpYTY0X212X2RtYV9pbml0CQkJc2JhX2RtYV9pbml0OwogCiAvKgogICogVGhpcyBzdHVmZiBoYXMgZHVhbCB1c2UhCkBAIC0yMCwxOCArMTMsNiBAQAogICovCiAjZGVmaW5lIHBsYXRmb3JtX25hbWUJCQkJImhwengxIgogI2RlZmluZSBwbGF0Zm9ybV9zZXR1cAkJCQlkaWdfc2V0dXAKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX2luaXQJCQltYWNodmVjX25vb3AKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX2FsbG9jX2NvaGVyZW50CQlzYmFfYWxsb2NfY29oZXJlbnQKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX2ZyZWVfY29oZXJlbnQJCXNiYV9mcmVlX2NvaGVyZW50Ci0jZGVmaW5lIHBsYXRmb3JtX2RtYV9tYXBfc2luZ2xlX2F0dHJzCQlzYmFfbWFwX3NpbmdsZV9hdHRycwotI2RlZmluZSBwbGF0Zm9ybV9kbWFfdW5tYXBfc2luZ2xlX2F0dHJzCQlzYmFfdW5tYXBfc2luZ2xlX2F0dHJzCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9tYXBfc2dfYXR0cnMJCXNiYV9tYXBfc2dfYXR0cnMKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3VubWFwX3NnX2F0dHJzCQlzYmFfdW5tYXBfc2dfYXR0cnMKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUJbWFjaHZlY19kbWFfc3luY19zaW5nbGUKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2dfZm9yX2NwdQkJbWFjaHZlY19kbWFfc3luY19zZwotI2RlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZQltYWNodmVjX2RtYV9zeW5jX3NpbmdsZQotI2RlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zZ19mb3JfZGV2aWNlCQltYWNodmVjX2RtYV9zeW5jX3NnCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9zdXBwb3J0ZWQJCQlzYmFfZG1hX3N1cHBvcnRlZAotI2RlZmluZSBwbGF0Zm9ybV9kbWFfbWFwcGluZ19lcnJvcgkJc2JhX2RtYV9tYXBwaW5nX2Vycm9yCisjZGVmaW5lIHBsYXRmb3JtX2RtYV9pbml0CQkJc2JhX2RtYV9pbml0CiAKICNlbmRpZiAvKiBfQVNNX0lBNjRfTUFDSFZFQ19IUFpYMV9oICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlY19ocHp4MV9zd2lvdGxiLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlY19ocHp4MV9zd2lvdGxiLmgKaW5kZXggYTg0MmNkZC4uMTA5MWFjMyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21hY2h2ZWNfaHB6eDFfc3dpb3RsYi5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tYWNodmVjX2hwengxX3N3aW90bGIuaApAQCAtMiwxOCArMiw3IEBACiAjZGVmaW5lIF9BU01fSUE2NF9NQUNIVkVDX0hQWlgxX1NXSU9UTEJfaAogCiBleHRlcm4gaWE2NF9tdl9zZXR1cF90CQkJCWRpZ19zZXR1cDsKLWV4dGVybiBpYTY0X212X2RtYV9hbGxvY19jb2hlcmVudAkJaHdzd19hbGxvY19jb2hlcmVudDsKLWV4dGVybiBpYTY0X212X2RtYV9mcmVlX2NvaGVyZW50CQlod3N3X2ZyZWVfY29oZXJlbnQ7Ci1leHRlcm4gaWE2NF9tdl9kbWFfbWFwX3NpbmdsZV9hdHRycwkJaHdzd19tYXBfc2luZ2xlX2F0dHJzOwotZXh0ZXJuIGlhNjRfbXZfZG1hX3VubWFwX3NpbmdsZV9hdHRycwkJaHdzd191bm1hcF9zaW5nbGVfYXR0cnM7Ci1leHRlcm4gaWE2NF9tdl9kbWFfbWFwX3NnX2F0dHJzCQkJaHdzd19tYXBfc2dfYXR0cnM7Ci1leHRlcm4gaWE2NF9tdl9kbWFfdW5tYXBfc2dfYXR0cnMJCWh3c3dfdW5tYXBfc2dfYXR0cnM7Ci1leHRlcm4gaWE2NF9tdl9kbWFfc3VwcG9ydGVkCQkJaHdzd19kbWFfc3VwcG9ydGVkOwotZXh0ZXJuIGlhNjRfbXZfZG1hX21hcHBpbmdfZXJyb3IJCWh3c3dfZG1hX21hcHBpbmdfZXJyb3I7Ci1leHRlcm4gaWE2NF9tdl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdQkJaHdzd19zeW5jX3NpbmdsZV9mb3JfY3B1OwotZXh0ZXJuIGlhNjRfbXZfZG1hX3N5bmNfc2dfZm9yX2NwdQkJaHdzd19zeW5jX3NnX2Zvcl9jcHU7Ci1leHRlcm4gaWE2NF9tdl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZQlod3N3X3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2U7Ci1leHRlcm4gaWE2NF9tdl9kbWFfc3luY19zZ19mb3JfZGV2aWNlCQlod3N3X3N5bmNfc2dfZm9yX2RldmljZTsKK2V4dGVybiBpYTY0X212X2RtYV9nZXRfb3BzCQkJaHdzd19kbWFfZ2V0X29wczsKIAogLyoKICAqIFRoaXMgc3R1ZmYgaGFzIGR1YWwgdXNlIQpAQCAtMjMsMjAgKzEyLDggQEAKICAqIHRoZSBtYWNyb3MgYXJlIHVzZWQgZGlyZWN0bHkuCiAgKi8KICNkZWZpbmUgcGxhdGZvcm1fbmFtZQkJCQkiaHB6eDFfc3dpb3RsYiIKLQogI2RlZmluZSBwbGF0Zm9ybV9zZXR1cAkJCQlkaWdfc2V0dXAKICNkZWZpbmUgcGxhdGZvcm1fZG1hX2luaXQJCQltYWNodmVjX25vb3AKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX2FsbG9jX2NvaGVyZW50CQlod3N3X2FsbG9jX2NvaGVyZW50Ci0jZGVmaW5lIHBsYXRmb3JtX2RtYV9mcmVlX2NvaGVyZW50CQlod3N3X2ZyZWVfY29oZXJlbnQKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX21hcF9zaW5nbGVfYXR0cnMJCWh3c3dfbWFwX3NpbmdsZV9hdHRycwotI2RlZmluZSBwbGF0Zm9ybV9kbWFfdW5tYXBfc2luZ2xlX2F0dHJzCQlod3N3X3VubWFwX3NpbmdsZV9hdHRycwotI2RlZmluZSBwbGF0Zm9ybV9kbWFfbWFwX3NnX2F0dHJzCQlod3N3X21hcF9zZ19hdHRycwotI2RlZmluZSBwbGF0Zm9ybV9kbWFfdW5tYXBfc2dfYXR0cnMJCWh3c3dfdW5tYXBfc2dfYXR0cnMKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3N1cHBvcnRlZAkJCWh3c3dfZG1hX3N1cHBvcnRlZAotI2RlZmluZSBwbGF0Zm9ybV9kbWFfbWFwcGluZ19lcnJvcgkJaHdzd19kbWFfbWFwcGluZ19lcnJvcgotI2RlZmluZSBwbGF0Zm9ybV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdQlod3N3X3N5bmNfc2luZ2xlX2Zvcl9jcHUKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2dfZm9yX2NwdQkJaHdzd19zeW5jX3NnX2Zvcl9jcHUKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UJaHdzd19zeW5jX3NpbmdsZV9mb3JfZGV2aWNlCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UJCWh3c3dfc3luY19zZ19mb3JfZGV2aWNlCisjZGVmaW5lIHBsYXRmb3JtX2RtYV9nZXRfb3BzCQkJaHdzd19kbWFfZ2V0X29wcwogCiAjZW5kaWYgLyogX0FTTV9JQTY0X01BQ0hWRUNfSFBaWDFfU1dJT1RMQl9oICovCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlY19zbjIuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tYWNodmVjX3NuMi5oCmluZGV4IGYxYTZlMGQuLmYwNjFhMzAgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tYWNodmVjX3NuMi5oCisrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tYWNodmVjX3NuMi5oCkBAIC01NSwxOSArNTUsOCBAQAogZXh0ZXJuIGlhNjRfbXZfcmVhZHdfdCBfX3NuX3JlYWR3X3JlbGF4ZWQ7CiBleHRlcm4gaWE2NF9tdl9yZWFkbF90IF9fc25fcmVhZGxfcmVsYXhlZDsKIGV4dGVybiBpYTY0X212X3JlYWRxX3QgX19zbl9yZWFkcV9yZWxheGVkOwotZXh0ZXJuIGlhNjRfbXZfZG1hX2FsbG9jX2NvaGVyZW50CXNuX2RtYV9hbGxvY19jb2hlcmVudDsKLWV4dGVybiBpYTY0X212X2RtYV9mcmVlX2NvaGVyZW50CXNuX2RtYV9mcmVlX2NvaGVyZW50OwotZXh0ZXJuIGlhNjRfbXZfZG1hX21hcF9zaW5nbGVfYXR0cnMJc25fZG1hX21hcF9zaW5nbGVfYXR0cnM7Ci1leHRlcm4gaWE2NF9tdl9kbWFfdW5tYXBfc2luZ2xlX2F0dHJzCXNuX2RtYV91bm1hcF9zaW5nbGVfYXR0cnM7Ci1leHRlcm4gaWE2NF9tdl9kbWFfbWFwX3NnX2F0dHJzCQlzbl9kbWFfbWFwX3NnX2F0dHJzOwotZXh0ZXJuIGlhNjRfbXZfZG1hX3VubWFwX3NnX2F0dHJzCXNuX2RtYV91bm1hcF9zZ19hdHRyczsKLWV4dGVybiBpYTY0X212X2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1CXNuX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1OwotZXh0ZXJuIGlhNjRfbXZfZG1hX3N5bmNfc2dfZm9yX2NwdQlzbl9kbWFfc3luY19zZ19mb3JfY3B1OwotZXh0ZXJuIGlhNjRfbXZfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Ugc25fZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2U7Ci1leHRlcm4gaWE2NF9tdl9kbWFfc3luY19zZ19mb3JfZGV2aWNlCXNuX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2U7Ci1leHRlcm4gaWE2NF9tdl9kbWFfbWFwcGluZ19lcnJvcglzbl9kbWFfbWFwcGluZ19lcnJvcjsKLWV4dGVybiBpYTY0X212X2RtYV9zdXBwb3J0ZWQJCXNuX2RtYV9zdXBwb3J0ZWQ7CiBleHRlcm4gaWE2NF9tdl9kbWFfZ2V0X3JlcXVpcmVkX21hc2sJc25fZG1hX2dldF9yZXF1aXJlZF9tYXNrOworZXh0ZXJuIGlhNjRfbXZfZG1hX2luaXQJCQlzbl9kbWFfaW5pdDsKIGV4dGVybiBpYTY0X212X21pZ3JhdGVfdAkJc25fbWlncmF0ZTsKIGV4dGVybiBpYTY0X212X2tlcm5lbF9sYXVuY2hfZXZlbnRfdAlzbl9rZXJuZWxfbGF1bmNoX2V2ZW50OwogZXh0ZXJuIGlhNjRfbXZfc2V0dXBfbXNpX2lycV90CQlzbl9zZXR1cF9tc2lfaXJxOwpAQCAtMTExLDIwICsxMDAsOCBAQAogI2RlZmluZSBwbGF0Zm9ybV9wY2lfZ2V0X2xlZ2FjeV9tZW0Jc25fcGNpX2dldF9sZWdhY3lfbWVtCiAjZGVmaW5lIHBsYXRmb3JtX3BjaV9sZWdhY3lfcmVhZAlzbl9wY2lfbGVnYWN5X3JlYWQKICNkZWZpbmUgcGxhdGZvcm1fcGNpX2xlZ2FjeV93cml0ZQlzbl9wY2lfbGVnYWN5X3dyaXRlCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9pbml0CQltYWNodmVjX25vb3AKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX2FsbG9jX2NvaGVyZW50CXNuX2RtYV9hbGxvY19jb2hlcmVudAotI2RlZmluZSBwbGF0Zm9ybV9kbWFfZnJlZV9jb2hlcmVudAlzbl9kbWFfZnJlZV9jb2hlcmVudAotI2RlZmluZSBwbGF0Zm9ybV9kbWFfbWFwX3NpbmdsZV9hdHRycwlzbl9kbWFfbWFwX3NpbmdsZV9hdHRycwotI2RlZmluZSBwbGF0Zm9ybV9kbWFfdW5tYXBfc2luZ2xlX2F0dHJzCXNuX2RtYV91bm1hcF9zaW5nbGVfYXR0cnMKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX21hcF9zZ19hdHRycwlzbl9kbWFfbWFwX3NnX2F0dHJzCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV91bm1hcF9zZ19hdHRycwlzbl9kbWFfdW5tYXBfc2dfYXR0cnMKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUgc25fZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3N5bmNfc2dfZm9yX2NwdQlzbl9kbWFfc3luY19zZ19mb3JfY3B1Ci0jZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlIHNuX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlCi0jZGVmaW5lIHBsYXRmb3JtX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UJc25fZG1hX3N5bmNfc2dfZm9yX2RldmljZQotI2RlZmluZSBwbGF0Zm9ybV9kbWFfbWFwcGluZ19lcnJvcgkJc25fZG1hX21hcHBpbmdfZXJyb3IKLSNkZWZpbmUgcGxhdGZvcm1fZG1hX3N1cHBvcnRlZAkJc25fZG1hX3N1cHBvcnRlZAogI2RlZmluZSBwbGF0Zm9ybV9kbWFfZ2V0X3JlcXVpcmVkX21hc2sJc25fZG1hX2dldF9yZXF1aXJlZF9tYXNrCisjZGVmaW5lIHBsYXRmb3JtX2RtYV9pbml0CQlzbl9kbWFfaW5pdAogI2RlZmluZSBwbGF0Zm9ybV9taWdyYXRlCQlzbl9taWdyYXRlCiAjZGVmaW5lIHBsYXRmb3JtX2tlcm5lbF9sYXVuY2hfZXZlbnQgICAgc25fa2VybmVsX2xhdW5jaF9ldmVudAogI2lmZGVmIENPTkZJR19QQ0lfTVNJCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlIGIvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQppbmRleCBjMzgxZWE5Li5mMjc3OGYyIDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvTWFrZWZpbGUKQEAgLTcsNyArNyw3IEBACiBvYmoteSA6PSBhY3BpLm8gZW50cnkubyBlZmkubyBlZmlfc3R1Yi5vIGdhdGUtZGF0YS5vIGZzeXMubyBpYTY0X2tzeW1zLm8gaXJxLm8gaXJxX2lhNjQubwlcCiAJIGlycV9sc2FwaWMubyBpdnQubyBtYWNodmVjLm8gcGFsLm8gcGF0Y2gubyBwcm9jZXNzLm8gcGVyZm1vbi5vIHB0cmFjZS5vIHNhbC5vCQlcCiAJIHNhbGluZm8ubyBzZXR1cC5vIHNpZ25hbC5vIHN5c19pYTY0Lm8gdGltZS5vIHRyYXBzLm8gdW5hbGlnbmVkLm8gXAotCSB1bndpbmQubyBtY2EubyBtY2FfYXNtLm8gdG9wb2xvZ3kubworCSB1bndpbmQubyBtY2EubyBtY2FfYXNtLm8gdG9wb2xvZ3kubyBkbWEtbWFwcGluZy5vCiAKIG9iai0kKENPTkZJR19JQTY0X0JSTF9FTVUpCSs9IGJybF9lbXUubwogb2JqLSQoQ09ORklHX0lBNjRfR0VORVJJQykJKz0gYWNwaS1leHQubwpAQCAtNDMsOSArNDMsNyBAQAogb2JqLXkJCQkJKz0gZXNpX3N0dWIubwkjIG11c3QgYmUgaW4ga2VybmVsIHByb3BlcgogZW5kaWYKIG9iai0kKENPTkZJR19ETUFSKQkJKz0gcGNpLWRtYS5vCi1pZmVxICgkKENPTkZJR19ETUFSKSwgeSkKIG9iai0kKENPTkZJR19TV0lPVExCKQkJKz0gcGNpLXN3aW90bGIubwotZW5kaWYKIAogIyBUaGUgZ2F0ZSBEU08gaW1hZ2UgaXMgYnVpbHQgdXNpbmcgYSBzcGVjaWFsIGxpbmtlciBzY3JpcHQuCiB0YXJnZXRzICs9IGdhdGUuc28gZ2F0ZS1zeW1zLm8KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvZG1hLW1hcHBpbmcuYyBiL2FyY2gvaWE2NC9rZXJuZWwvZG1hLW1hcHBpbmcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wODZhMmFlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9kbWEtbWFwcGluZy5jCkBAIC0wLDAgKzEsMTMgQEAKKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgorCisvKiBTZXQgdGhpcyB0byAxIGlmIHRoZXJlIGlzIGEgSFcgSU9NTVUgaW4gdGhlIHN5c3RlbSAqLworaW50IGlvbW11X2RldGVjdGVkIF9fcmVhZF9tb3N0bHk7CisKK3N0cnVjdCBkbWFfbWFwX29wcyAqZG1hX29wczsKK0VYUE9SVF9TWU1CT0woZG1hX29wcyk7CisKK3N0cnVjdCBkbWFfbWFwX29wcyAqZG1hX2dldF9vcHMoc3RydWN0IGRldmljZSAqZGV2KQoreworCXJldHVybiBkbWFfb3BzOworfQorRVhQT1JUX1NZTUJPTChkbWFfZ2V0X29wcyk7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL21hY2h2ZWMuYyBiL2FyY2gvaWE2NC9rZXJuZWwvbWFjaHZlYy5jCmluZGV4IDdjY2IyMjguLmQ0MWE0MGUgMTAwNjQ0Ci0tLSBhL2FyY2gvaWE2NC9rZXJuZWwvbWFjaHZlYy5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvbWFjaHZlYy5jCkBAIC0xLDUgKzEsNSBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotCisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxhc20vbWFjaHZlYy5oPgogI2luY2x1ZGUgPGFzbS9zeXN0ZW0uaD4KIApAQCAtNzUsMTQgKzc1LDE2IEBACiBFWFBPUlRfU1lNQk9MKG1hY2h2ZWNfdGltZXJfaW50ZXJydXB0KTsKIAogdm9pZAotbWFjaHZlY19kbWFfc3luY19zaW5nbGUgKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLCBpbnQgZGlyKQorbWFjaHZlY19kbWFfc3luY19zaW5nbGUoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCisJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7CiAJbWIoKTsKIH0KIEVYUE9SVF9TWU1CT0wobWFjaHZlY19kbWFfc3luY19zaW5nbGUpOwogCiB2b2lkCi1tYWNodmVjX2RtYV9zeW5jX3NnIChzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG4sIGludCBkaXIpCittYWNodmVjX2RtYV9zeW5jX3NnKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbiwKKwkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKIAltYigpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9wYWxpbmZvLmMgYi9hcmNoL2lhNjQva2VybmVsL3BhbGluZm8uYwppbmRleCBlNWM1N2Y0Li5hNGYxOWM3IDEwMDY0NAotLS0gYS9hcmNoL2lhNjQva2VybmVsL3BhbGluZm8uYworKysgYi9hcmNoL2lhNjQva2VybmVsL3BhbGluZm8uYwpAQCAtMTAwMiw4ICsxMDAyLDYgQEAKIAkJKnBkaXIgPSBjcmVhdGVfcHJvY19yZWFkX2VudHJ5KAogCQkJCXBhbGluZm9fZW50cmllc1tqXS5uYW1lLCAwLCBjcHVfZGlyLAogCQkJCXBhbGluZm9fcmVhZF9lbnRyeSwgKHZvaWQgKilmLnZhbHVlKTsKLQkJaWYgKCpwZGlyKQotCQkJKCpwZGlyKS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAkJcGRpcisrOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9rZXJuZWwvcGNpLWRtYS5jIGIvYXJjaC9pYTY0L2tlcm5lbC9wY2ktZG1hLmMKaW5kZXggZDBhZGEwNi4uZTRjYjQ0MyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wY2ktZG1hLmMKKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9wY2ktZG1hLmMKQEAgLTMyLDkgKzMyLDYgQEAKIGludCBmb3JjZV9pb21tdSBfX3JlYWRfbW9zdGx5OwogI2VuZGlmCiAKLS8qIFNldCB0aGlzIHRvIDEgaWYgdGhlcmUgaXMgYSBIVyBJT01NVSBpbiB0aGUgc3lzdGVtICovCi1pbnQgaW9tbXVfZGV0ZWN0ZWQgX19yZWFkX21vc3RseTsKLQogLyogRHVtbXkgZGV2aWNlIHVzZWQgZm9yIE5VTEwgYXJndW1lbnRzIChub3JtYWxseSBJU0EpLiBCZXR0ZXIgd291bGQKICAgIGJlIHByb2JhYmx5IGEgc21hbGxlciBETUEgbWFzaywgYnV0IHRoaXMgaXMgYnVnLXRvLWJ1ZyBjb21wYXRpYmxlCiAgICB0byBpMzg2LiAqLwpAQCAtNDQsMTggKzQxLDcgQEAKIAkuZG1hX21hc2sgPSAmZmFsbGJhY2tfZGV2LmNvaGVyZW50X2RtYV9tYXNrLAogfTsKIAotdm9pZCBfX2luaXQgcGNpX2lvbW11X2FsbG9jKHZvaWQpCi17Ci0JLyoKLQkgKiBUaGUgb3JkZXIgb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGltcG9ydGFudCBmb3IKLQkgKiBmYWxsLWJhY2svZmFpbC1vdmVyIHJlYXNvbnMKLQkgKi8KLQlkZXRlY3RfaW50ZWxfaW9tbXUoKTsKLQotI2lmZGVmIENPTkZJR19TV0lPVExCCi0JcGNpX3N3aW90bGJfaW5pdCgpOwotI2VuZGlmCi19CitleHRlcm4gc3RydWN0IGRtYV9tYXBfb3BzIGludGVsX2RtYV9vcHM7CiAKIHN0YXRpYyBpbnQgX19pbml0IHBjaV9pb21tdV9pbml0KHZvaWQpCiB7CkBAIC03OSwxNSArNjUsMTIgQEAKIAlyZXR1cm47CiB9CiAKLXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKmRtYV9vcHM7Ci1FWFBPUlRfU1lNQk9MKGRtYV9vcHMpOwotCiBpbnQgaW9tbXVfZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQogewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBwbGF0Zm9ybV9kbWFfZ2V0X29wcyhkZXYpOwogCi0JaWYgKG9wcy0+ZG1hX3N1cHBvcnRlZF9vcCkKLQkJcmV0dXJuIG9wcy0+ZG1hX3N1cHBvcnRlZF9vcChkZXYsIG1hc2spOworCWlmIChvcHMtPmRtYV9zdXBwb3J0ZWQpCisJCXJldHVybiBvcHMtPmRtYV9zdXBwb3J0ZWQoZGV2LCBtYXNrKTsKIAogCS8qIENvcGllZCBmcm9tIGkzODYuIERvZXNuJ3QgbWFrZSBtdWNoIHNlbnNlLCBiZWNhdXNlIGl0IHdpbGwKIAkgICBvbmx5IHdvcmsgZm9yIHBjaV9hbGxvY19jb2hlcmVudC4KQEAgLTExNiw0ICs5OSwyNSBAQAogfQogRVhQT1JUX1NZTUJPTChpb21tdV9kbWFfc3VwcG9ydGVkKTsKIAordm9pZCBfX2luaXQgcGNpX2lvbW11X2FsbG9jKHZvaWQpCit7CisJZG1hX29wcyA9ICZpbnRlbF9kbWFfb3BzOworCisJZG1hX29wcy0+c3luY19zaW5nbGVfZm9yX2NwdSA9IG1hY2h2ZWNfZG1hX3N5bmNfc2luZ2xlOworCWRtYV9vcHMtPnN5bmNfc2dfZm9yX2NwdSA9IG1hY2h2ZWNfZG1hX3N5bmNfc2c7CisJZG1hX29wcy0+c3luY19zaW5nbGVfZm9yX2RldmljZSA9IG1hY2h2ZWNfZG1hX3N5bmNfc2luZ2xlOworCWRtYV9vcHMtPnN5bmNfc2dfZm9yX2RldmljZSA9IG1hY2h2ZWNfZG1hX3N5bmNfc2c7CisJZG1hX29wcy0+ZG1hX3N1cHBvcnRlZCA9IGlvbW11X2RtYV9zdXBwb3J0ZWQ7CisKKwkvKgorCSAqIFRoZSBvcmRlciBvZiB0aGVzZSBmdW5jdGlvbnMgaXMgaW1wb3J0YW50IGZvcgorCSAqIGZhbGwtYmFjay9mYWlsLW92ZXIgcmVhc29ucworCSAqLworCWRldGVjdF9pbnRlbF9pb21tdSgpOworCisjaWZkZWYgQ09ORklHX1NXSU9UTEIKKwlwY2lfc3dpb3RsYl9pbml0KCk7CisjZW5kaWYKK30KKwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL3BjaS1zd2lvdGxiLmMgYi9hcmNoL2lhNjQva2VybmVsL3BjaS1zd2lvdGxiLmMKaW5kZXggMTZjNTA1MS4uNTczZjAyYyAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9wY2ktc3dpb3RsYi5jCisrKyBiL2FyY2gvaWE2NC9rZXJuZWwvcGNpLXN3aW90bGIuYwpAQCAtMTMsMjMgKzEzLDM3IEBACiBpbnQgc3dpb3RsYiBfX3JlYWRfbW9zdGx5OwogRVhQT1JUX1NZTUJPTChzd2lvdGxiKTsKIAotc3RydWN0IGRtYV9tYXBwaW5nX29wcyBzd2lvdGxiX2RtYV9vcHMgPSB7Ci0JLm1hcHBpbmdfZXJyb3IgPSBzd2lvdGxiX2RtYV9tYXBwaW5nX2Vycm9yLAotCS5hbGxvY19jb2hlcmVudCA9IHN3aW90bGJfYWxsb2NfY29oZXJlbnQsCitzdGF0aWMgdm9pZCAqaWE2NF9zd2lvdGxiX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkJCSBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBnZnApCit7CisJaWYgKGRldi0+Y29oZXJlbnRfZG1hX21hc2sgIT0gRE1BXzY0QklUX01BU0spCisJCWdmcCB8PSBHRlBfRE1BOworCXJldHVybiBzd2lvdGxiX2FsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwgZ2ZwKTsKK30KKworc3RydWN0IGRtYV9tYXBfb3BzIHN3aW90bGJfZG1hX29wcyA9IHsKKwkuYWxsb2NfY29oZXJlbnQgPSBpYTY0X3N3aW90bGJfYWxsb2NfY29oZXJlbnQsCiAJLmZyZWVfY29oZXJlbnQgPSBzd2lvdGxiX2ZyZWVfY29oZXJlbnQsCi0JLm1hcF9zaW5nbGUgPSBzd2lvdGxiX21hcF9zaW5nbGUsCi0JLnVubWFwX3NpbmdsZSA9IHN3aW90bGJfdW5tYXBfc2luZ2xlLAorCS5tYXBfcGFnZSA9IHN3aW90bGJfbWFwX3BhZ2UsCisJLnVubWFwX3BhZ2UgPSBzd2lvdGxiX3VubWFwX3BhZ2UsCisJLm1hcF9zZyA9IHN3aW90bGJfbWFwX3NnX2F0dHJzLAorCS51bm1hcF9zZyA9IHN3aW90bGJfdW5tYXBfc2dfYXR0cnMsCiAJLnN5bmNfc2luZ2xlX2Zvcl9jcHUgPSBzd2lvdGxiX3N5bmNfc2luZ2xlX2Zvcl9jcHUsCiAJLnN5bmNfc2luZ2xlX2Zvcl9kZXZpY2UgPSBzd2lvdGxiX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UsCiAJLnN5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUgPSBzd2lvdGxiX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUsCiAJLnN5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2UgPSBzd2lvdGxiX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9kZXZpY2UsCiAJLnN5bmNfc2dfZm9yX2NwdSA9IHN3aW90bGJfc3luY19zZ19mb3JfY3B1LAogCS5zeW5jX3NnX2Zvcl9kZXZpY2UgPSBzd2lvdGxiX3N5bmNfc2dfZm9yX2RldmljZSwKLQkubWFwX3NnID0gc3dpb3RsYl9tYXBfc2csCi0JLnVubWFwX3NnID0gc3dpb3RsYl91bm1hcF9zZywKLQkuZG1hX3N1cHBvcnRlZF9vcCA9IHN3aW90bGJfZG1hX3N1cHBvcnRlZCwKKwkuZG1hX3N1cHBvcnRlZCA9IHN3aW90bGJfZG1hX3N1cHBvcnRlZCwKKwkubWFwcGluZ19lcnJvciA9IHN3aW90bGJfZG1hX21hcHBpbmdfZXJyb3IsCiB9OwogCit2b2lkIF9faW5pdCBzd2lvdGxiX2RtYV9pbml0KHZvaWQpCit7CisJZG1hX29wcyA9ICZzd2lvdGxiX2RtYV9vcHM7CisJc3dpb3RsYl9pbml0KCk7Cit9CisKIHZvaWQgX19pbml0IHBjaV9zd2lvdGxiX2luaXQodm9pZCkKIHsKIAlpZiAoIWlvbW11X2RldGVjdGVkKSB7CmRpZmYgLS1naXQgYS9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9wcm9taW5mb19wcm9jLmMgYi9hcmNoL2lhNjQvc24va2VybmVsL3NuMi9wcm9taW5mb19wcm9jLmMKaW5kZXggNGRjY2UzZC4uZTYzMzI4OCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL2tlcm5lbC9zbjIvcHJvbWluZm9fcHJvYy5jCisrKyBiL2FyY2gvaWE2NC9zbi9rZXJuZWwvc24yL3Byb21pbmZvX3Byb2MuYwpAQCAtMjI1LDcgKzIyNSw2IEBACiBpbnQgX19pbml0IHByb21pbmZvX2luaXQodm9pZCkKIHsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKiplbnRwOwotCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcDsKIAljbm9kZWlkX3QgY25vZGVpZDsKIAl1bnNpZ25lZCBsb25nIG5hc2lkOwogCWludCBzaXplOwpAQCAtMjQ2LDE0ICsyNDUsMTAgQEAKIAkJc3ByaW50ZihuYW1lLCAibm9kZSVkIiwgY25vZGVpZCk7CiAJCSplbnRwID0gcHJvY19ta2RpcihuYW1lLCBzZ2lfcHJvbWluZm9fZW50cnkpOwogCQluYXNpZCA9IGNub2RlaWRfdG9fbmFzaWQoY25vZGVpZCk7Ci0JCXAgPSBjcmVhdGVfcHJvY19yZWFkX2VudHJ5KCJmaXQiLCAwLCAqZW50cCwgcmVhZF9maXRfZW50cnksCisJCWNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoImZpdCIsIDAsICplbnRwLCByZWFkX2ZpdF9lbnRyeSwKIAkJCQkJICAgKHZvaWQgKiluYXNpZCk7Ci0JCWlmIChwKQotCQkJcC0+b3duZXIgPSBUSElTX01PRFVMRTsKLQkJcCA9IGNyZWF0ZV9wcm9jX3JlYWRfZW50cnkoInZlcnNpb24iLCAwLCAqZW50cCwKKwkJY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgidmVyc2lvbiIsIDAsICplbnRwLAogCQkJCQkgICByZWFkX3ZlcnNpb25fZW50cnksICh2b2lkICopbmFzaWQpOwotCQlpZiAocCkKLQkJCXAtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJCWVudHArKzsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9zbi9wY2kvcGNpX2RtYS5jIGIvYXJjaC9pYTY0L3NuL3BjaS9wY2lfZG1hLmMKaW5kZXggODYzZjUwMS4uOGMxMzBlOCAxMDA2NDQKLS0tIGEvYXJjaC9pYTY0L3NuL3BjaS9wY2lfZG1hLmMKKysrIGIvYXJjaC9pYTY0L3NuL3BjaS9wY2lfZG1hLmMKQEAgLTEwLDcgKzEwLDcgQEAKICAqLwogCiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvZG1hLWF0dHJzLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAjaW5jbHVkZSA8YXNtL3NuL2ludHIuaD4KICNpbmNsdWRlIDxhc20vc24vcGNpYnVzX3Byb3ZpZGVyX2RlZnMuaD4KQEAgLTMxLDcgKzMxLDcgQEAKICAqIHRoaXMgZnVuY3Rpb24uICBPZiBjb3Vyc2UsIFNOIG9ubHkgc3VwcG9ydHMgZGV2aWNlcyB0aGF0IGhhdmUgMzIgb3IgbW9yZQogICogYWRkcmVzcyBiaXRzIHdoZW4gdXNpbmcgdGhlIFBNVS4KICAqLwotaW50IHNuX2RtYV9zdXBwb3J0ZWQoc3RydWN0IGRldmljZSAqZGV2LCB1NjQgbWFzaykKK3N0YXRpYyBpbnQgc25fZG1hX3N1cHBvcnRlZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQogewogCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKIApAQCAtMzksNyArMzksNiBAQAogCQlyZXR1cm4gMDsKIAlyZXR1cm4gMTsKIH0KLUVYUE9SVF9TWU1CT0woc25fZG1hX3N1cHBvcnRlZCk7CiAKIC8qKgogICogc25fZG1hX3NldF9tYXNrIC0gc2V0IHRoZSBETUEgbWFzawpAQCAtNzUsOCArNzQsOCBAQAogICogcXVldWUgZm9yIGEgU0NTSSBjb250cm9sbGVyKS4gIFNlZSBEb2N1bWVudGF0aW9uL0RNQS1BUEkudHh0IGZvcgogICogbW9yZSBpbmZvcm1hdGlvbi4KICAqLwotdm9pZCAqc25fZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCi0JCQkgICAgZG1hX2FkZHJfdCAqIGRtYV9oYW5kbGUsIGdmcF90IGZsYWdzKQorc3RhdGljIHZvaWQgKnNuX2RtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJCSAgIGRtYV9hZGRyX3QgKiBkbWFfaGFuZGxlLCBnZnBfdCBmbGFncykKIHsKIAl2b2lkICpjcHVhZGRyOwogCXVuc2lnbmVkIGxvbmcgcGh5c19hZGRyOwpAQCAtMTI0LDcgKzEyMyw2IEBACiAKIAlyZXR1cm4gY3B1YWRkcjsKIH0KLUVYUE9SVF9TWU1CT0woc25fZG1hX2FsbG9jX2NvaGVyZW50KTsKIAogLyoqCiAgKiBzbl9wY2lfZnJlZV9jb2hlcmVudCAtIGZyZWUgbWVtb3J5IGFzc29jaWF0ZWQgd2l0aCBjb2hlcmVudCBETUFhYmxlIHJlZ2lvbgpAQCAtMTM2LDggKzEzNCw4IEBACiAgKiBGcmVlcyB0aGUgbWVtb3J5IGFsbG9jYXRlZCBieSBkbWFfYWxsb2NfY29oZXJlbnQoKSwgcG90ZW50aWFsbHkgdW5tYXBwaW5nCiAgKiBhbnkgYXNzb2NpYXRlZCBJT01NVSBtYXBwaW5ncy4KICAqLwotdm9pZCBzbl9kbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLCB2b2lkICpjcHVfYWRkciwKLQkJCSAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQorc3RhdGljIHZvaWQgc25fZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqY3B1X2FkZHIsCisJCQkJIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSkKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgc25fcGNpYnVzX3Byb3ZpZGVyICpwcm92aWRlciA9IFNOX1BDSURFVl9CVVNQUk9WSURFUihwZGV2KTsKQEAgLTE0Nyw3ICsxNDUsNiBAQAogCXByb3ZpZGVyLT5kbWFfdW5tYXAocGRldiwgZG1hX2hhbmRsZSwgMCk7CiAJZnJlZV9wYWdlcygodW5zaWduZWQgbG9uZyljcHVfYWRkciwgZ2V0X29yZGVyKHNpemUpKTsKIH0KLUVYUE9SVF9TWU1CT0woc25fZG1hX2ZyZWVfY29oZXJlbnQpOwogCiAvKioKICAqIHNuX2RtYV9tYXBfc2luZ2xlX2F0dHJzIC0gbWFwIGEgc2luZ2xlIHBhZ2UgZm9yIERNQQpAQCAtMTczLDEwICsxNzAsMTIgQEAKICAqIFRPRE86IHNpbXBsaWZ5IG91ciBpbnRlcmZhY2U7CiAgKiAgICAgICBmaWd1cmUgb3V0IGhvdyB0byBzYXZlIGRtYW1hcCBoYW5kbGUgc28gY2FuIHVzZSB0d28gc3RlcC4KICAqLwotZG1hX2FkZHJfdCBzbl9kbWFfbWFwX3NpbmdsZV9hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmNwdV9hZGRyLAotCQkJCSAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uLAotCQkJCSAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQorc3RhdGljIGRtYV9hZGRyX3Qgc25fZG1hX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkJICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkJICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKKwl2b2lkICpjcHVfYWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldDsKIAlkbWFfYWRkcl90IGRtYV9hZGRyOwogCXVuc2lnbmVkIGxvbmcgcGh5c19hZGRyOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOwpAQCAtMjAxLDcgKzIwMCw2IEBACiAJfQogCXJldHVybiBkbWFfYWRkcjsKIH0KLUVYUE9SVF9TWU1CT0woc25fZG1hX21hcF9zaW5nbGVfYXR0cnMpOwogCiAvKioKICAqIHNuX2RtYV91bm1hcF9zaW5nbGVfYXR0cnMgLSB1bmFtcCBhIERNQSBtYXBwZWQgcGFnZQpAQCAtMjE1LDIxICsyMTMsMjAgQEAKICAqIGJ5IEBkbWFfaGFuZGxlIGludG8gdGhlIGNvaGVyZW5jZSBkb21haW4uICBPbiBTTiwgd2UncmUgYWx3YXlzIGNhY2hlCiAgKiBjb2hlcmVudCwgc28gd2UganVzdCBuZWVkIHRvIGZyZWUgYW55IEFURXMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgbWFwcGluZy4KICAqLwotdm9pZCBzbl9kbWFfdW5tYXBfc2luZ2xlX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKLQkJCSAgICAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbiwKLQkJCSAgICAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKK3N0YXRpYyB2b2lkIHNuX2RtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKKwkJCSAgICAgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkgICAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqcGRldiA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3Qgc25fcGNpYnVzX3Byb3ZpZGVyICpwcm92aWRlciA9IFNOX1BDSURFVl9CVVNQUk9WSURFUihwZGV2KTsKIAogCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKIAotCXByb3ZpZGVyLT5kbWFfdW5tYXAocGRldiwgZG1hX2FkZHIsIGRpcmVjdGlvbik7CisJcHJvdmlkZXItPmRtYV91bm1hcChwZGV2LCBkbWFfYWRkciwgZGlyKTsKIH0KLUVYUE9SVF9TWU1CT0woc25fZG1hX3VubWFwX3NpbmdsZV9hdHRycyk7CiAKIC8qKgotICogc25fZG1hX3VubWFwX3NnX2F0dHJzIC0gdW5tYXAgYSBETUEgc2NhdHRlcmxpc3QKKyAqIHNuX2RtYV91bm1hcF9zZyAtIHVubWFwIGEgRE1BIHNjYXR0ZXJsaXN0CiAgKiBAZGV2OiBkZXZpY2UgdG8gdW5tYXAKICAqIEBzZzogc2NhdHRlcmxpc3QgdG8gdW5tYXAKICAqIEBuaHdlbnRyaWVzOiBudW1iZXIgb2Ygc2NhdHRlcmxpc3QgZW50cmllcwpAQCAtMjM4LDkgKzIzNSw5IEBACiAgKgogICogVW5tYXAgYSBzZXQgb2Ygc3RyZWFtaW5nIG1vZGUgRE1BIHRyYW5zbGF0aW9ucy4KICAqLwotdm9pZCBzbl9kbWFfdW5tYXBfc2dfYXR0cnMoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKLQkJCSAgIGludCBuaHdlbnRyaWVzLCBpbnQgZGlyZWN0aW9uLAotCQkJICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCitzdGF0aWMgdm9pZCBzbl9kbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKKwkJCSAgICBpbnQgbmh3ZW50cmllcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCWludCBpOwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gdG9fcGNpX2RldihkZXYpOwpAQCAtMjUwLDE1ICsyNDcsMTQgQEAKIAlCVUdfT04oZGV2LT5idXMgIT0gJnBjaV9idXNfdHlwZSk7CiAKIAlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBuaHdlbnRyaWVzLCBpKSB7Ci0JCXByb3ZpZGVyLT5kbWFfdW5tYXAocGRldiwgc2ctPmRtYV9hZGRyZXNzLCBkaXJlY3Rpb24pOworCQlwcm92aWRlci0+ZG1hX3VubWFwKHBkZXYsIHNnLT5kbWFfYWRkcmVzcywgZGlyKTsKIAkJc2ctPmRtYV9hZGRyZXNzID0gKGRtYV9hZGRyX3QpIE5VTEw7CiAJCXNnLT5kbWFfbGVuZ3RoID0gMDsKIAl9CiB9Ci1FWFBPUlRfU1lNQk9MKHNuX2RtYV91bm1hcF9zZ19hdHRycyk7CiAKIC8qKgotICogc25fZG1hX21hcF9zZ19hdHRycyAtIG1hcCBhIHNjYXR0ZXJsaXN0IGZvciBETUEKKyAqIHNuX2RtYV9tYXBfc2cgLSBtYXAgYSBzY2F0dGVybGlzdCBmb3IgRE1BCiAgKiBAZGV2OiBkZXZpY2UgdG8gbWFwIGZvcgogICogQHNnOiBzY2F0dGVybGlzdCB0byBtYXAKICAqIEBuaHdlbnRyaWVzOiBudW1iZXIgb2YgZW50cmllcwpAQCAtMjcyLDggKzI2OCw5IEBACiAgKgogICogTWFwcyBlYWNoIGVudHJ5IG9mIEBzZyBmb3IgRE1BLgogICovCi1pbnQgc25fZG1hX21hcF9zZ19hdHRycyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAotCQkJaW50IG5od2VudHJpZXMsIGludCBkaXJlY3Rpb24sIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQorc3RhdGljIGludCBzbl9kbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2wsCisJCQkgaW50IG5od2VudHJpZXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCSBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAl1bnNpZ25lZCBsb25nIHBoeXNfYWRkcjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNhdmVkX3NnID0gc2dsLCAqc2c7CkBAIC0zMTAsOCArMzA3LDcgQEAKIAkJCSAqIEZyZWUgYW55IHN1Y2Nlc3NmdWxseSBhbGxvY2F0ZWQgZW50cmllcy4KIAkJCSAqLwogCQkJaWYgKGkgPiAwKQotCQkJCXNuX2RtYV91bm1hcF9zZ19hdHRycyhkZXYsIHNhdmVkX3NnLCBpLAotCQkJCQkJICAgICAgZGlyZWN0aW9uLCBhdHRycyk7CisJCQkJc25fZG1hX3VubWFwX3NnKGRldiwgc2F2ZWRfc2csIGksIGRpciwgYXR0cnMpOwogCQkJcmV0dXJuIDA7CiAJCX0KIApAQCAtMzIwLDQxICszMTYsMzYgQEAKIAogCXJldHVybiBuaHdlbnRyaWVzOwogfQotRVhQT1JUX1NZTUJPTChzbl9kbWFfbWFwX3NnX2F0dHJzKTsKIAotdm9pZCBzbl9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKLQkJCQlzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKK3N0YXRpYyB2b2lkIHNuX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJCSAgICAgICBzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewogCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKIH0KLUVYUE9SVF9TWU1CT0woc25fZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUpOwogCi12b2lkIHNuX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAotCQkJCSAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQorc3RhdGljIHZvaWQgc25fZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJCSAgc2l6ZV90IHNpemUsCisJCQkJCSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewogCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKIH0KLUVYUE9SVF9TWU1CT0woc25fZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2UpOwogCi12b2lkIHNuX2RtYV9zeW5jX3NnX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJICAgIGludCBuZWxlbXMsIGludCBkaXJlY3Rpb24pCitzdGF0aWMgdm9pZCBzbl9kbWFfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCQkgICBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7CiAJQlVHX09OKGRldi0+YnVzICE9ICZwY2lfYnVzX3R5cGUpOwogfQotRVhQT1JUX1NZTUJPTChzbl9kbWFfc3luY19zZ19mb3JfY3B1KTsKIAotdm9pZCBzbl9kbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCSAgICAgICBpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKQorc3RhdGljIHZvaWQgc25fZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkJICAgICAgaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewogCUJVR19PTihkZXYtPmJ1cyAhPSAmcGNpX2J1c190eXBlKTsKIH0KLUVYUE9SVF9TWU1CT0woc25fZG1hX3N5bmNfc2dfZm9yX2RldmljZSk7CiAKLWludCBzbl9kbWFfbWFwcGluZ19lcnJvcihzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIpCitzdGF0aWMgaW50IHNuX2RtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkcikKIHsKIAlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woc25fZG1hX21hcHBpbmdfZXJyb3IpOwogCiB1NjQgc25fZG1hX2dldF9yZXF1aXJlZF9tYXNrKHN0cnVjdCBkZXZpY2UgKmRldikKIHsKQEAgLTQ3MSwzICs0NjIsMjMgQEAKICBvdXQ6CiAJcmV0dXJuIHJldDsKIH0KKworc3RhdGljIHN0cnVjdCBkbWFfbWFwX29wcyBzbl9kbWFfb3BzID0geworCS5hbGxvY19jb2hlcmVudAkJPSBzbl9kbWFfYWxsb2NfY29oZXJlbnQsCisJLmZyZWVfY29oZXJlbnQJCT0gc25fZG1hX2ZyZWVfY29oZXJlbnQsCisJLm1hcF9wYWdlCQk9IHNuX2RtYV9tYXBfcGFnZSwKKwkudW5tYXBfcGFnZQkJPSBzbl9kbWFfdW5tYXBfcGFnZSwKKwkubWFwX3NnCQkJPSBzbl9kbWFfbWFwX3NnLAorCS51bm1hcF9zZwkJPSBzbl9kbWFfdW5tYXBfc2csCisJLnN5bmNfc2luZ2xlX2Zvcl9jcHUgCT0gc25fZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUsCisJLnN5bmNfc2dfZm9yX2NwdQk9IHNuX2RtYV9zeW5jX3NnX2Zvcl9jcHUsCisJLnN5bmNfc2luZ2xlX2Zvcl9kZXZpY2UgPSBzbl9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZSwKKwkuc3luY19zZ19mb3JfZGV2aWNlCT0gc25fZG1hX3N5bmNfc2dfZm9yX2RldmljZSwKKwkubWFwcGluZ19lcnJvcgkJPSBzbl9kbWFfbWFwcGluZ19lcnJvciwKKwkuZG1hX3N1cHBvcnRlZAkJPSBzbl9kbWFfc3VwcG9ydGVkLAorfTsKKwordm9pZCBzbl9kbWFfaW5pdCh2b2lkKQoreworCWRtYV9vcHMgPSAmc25fZG1hX29wczsKK30KZGlmZiAtLWdpdCBhL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9pZGUuaCBiL2FyY2gvbTY4ay9pbmNsdWRlL2FzbS9pZGUuaAppbmRleCBiOTk2YTNjLi4zOTU4NzI2IDEwMDY0NAotLS0gYS9hcmNoL202OGsvaW5jbHVkZS9hc20vaWRlLmgKKysrIGIvYXJjaC9tNjhrL2luY2x1ZGUvYXNtL2lkZS5oCkBAIC0zMCwxMDEgKzMwLDI4IEBACiAjZGVmaW5lIF9NNjhLX0lERV9ICiAKICNpZmRlZiBfX0tFUk5FTF9fCi0KLQogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9pcnEuaD4KIAotI2lmZGVmIENPTkZJR19BVEFSSQotI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPGFzbS9hdGFyaV9zdGRtYS5oPgotI2VuZGlmCi0KLSNpZmRlZiBDT05GSUdfTUFDCi0jaW5jbHVkZSA8YXNtL21hY2ludHMuaD4KLSNlbmRpZgotCiAvKgogICogR2V0IHJpZCBvZiBkZWZzIGZyb20gaW8uaCAtIGlkZSBoYXMgaXRzIHByaXZhdGUgYW5kIGNvbmZsaWN0aW5nIHZlcnNpb25zCiAgKiBTaW5jZSBzbyBmYXIgbm8gc2luZ2xlIG02OGsgcGxhdGZvcm0gdXNlcyBJU0EvUENJIEkvTyBzcGFjZSBmb3IgSURFLCB3ZQogICogYWx3YXlzIHVzZSB0aGUgYHJhdycgTU1JTyB2ZXJzaW9ucwogICovCi0jdW5kZWYgaW5iCi0jdW5kZWYgaW53Ci0jdW5kZWYgaW5zdwotI3VuZGVmIGlubAotI3VuZGVmIGluc2wKLSN1bmRlZiBvdXRiCi0jdW5kZWYgb3V0dwotI3VuZGVmIG91dHN3Ci0jdW5kZWYgb3V0bAotI3VuZGVmIG91dHNsCiAjdW5kZWYgcmVhZGIKICN1bmRlZiByZWFkdwotI3VuZGVmIHJlYWRsCiAjdW5kZWYgd3JpdGViCiAjdW5kZWYgd3JpdGV3Ci0jdW5kZWYgd3JpdGVsCiAKLSNkZWZpbmUgaW5iCQkJCWluXzgKLSNkZWZpbmUgaW53CQkJCWluX2JlMTYKLSNkZWZpbmUgaW5zdyhwb3J0LCBhZGRyLCBuKQkJcmF3X2luc3coKHUxNiAqKXBvcnQsIGFkZHIsIG4pCi0jZGVmaW5lIGlubAkJCQlpbl9iZTMyCi0jZGVmaW5lIGluc2wocG9ydCwgYWRkciwgbikJCXJhd19pbnNsKCh1MzIgKilwb3J0LCBhZGRyLCBuKQotI2RlZmluZSBvdXRiKHZhbCwgcG9ydCkJCQlvdXRfOChwb3J0LCB2YWwpCi0jZGVmaW5lIG91dHcodmFsLCBwb3J0KQkJCW91dF9iZTE2KHBvcnQsIHZhbCkKLSNkZWZpbmUgb3V0c3cocG9ydCwgYWRkciwgbikJCXJhd19vdXRzdygodTE2ICopcG9ydCwgYWRkciwgbikKLSNkZWZpbmUgb3V0bCh2YWwsIHBvcnQpCQkJb3V0X2JlMzIocG9ydCwgdmFsKQotI2RlZmluZSBvdXRzbChwb3J0LCBhZGRyLCBuKQkJcmF3X291dHNsKCh1MzIgKilwb3J0LCBhZGRyLCBuKQogI2RlZmluZSByZWFkYgkJCQlpbl84CiAjZGVmaW5lIHJlYWR3CQkJCWluX2JlMTYKICNkZWZpbmUgX19pZGVfbW1faW5zdyhwb3J0LCBhZGRyLCBuKQlyYXdfaW5zdygodTE2ICopcG9ydCwgYWRkciwgbikKLSNkZWZpbmUgcmVhZGwJCQkJaW5fYmUzMgogI2RlZmluZSBfX2lkZV9tbV9pbnNsKHBvcnQsIGFkZHIsIG4pCXJhd19pbnNsKCh1MzIgKilwb3J0LCBhZGRyLCBuKQogI2RlZmluZSB3cml0ZWIodmFsLCBwb3J0KQkJb3V0XzgocG9ydCwgdmFsKQogI2RlZmluZSB3cml0ZXcodmFsLCBwb3J0KQkJb3V0X2JlMTYocG9ydCwgdmFsKQogI2RlZmluZSBfX2lkZV9tbV9vdXRzdyhwb3J0LCBhZGRyLCBuKQlyYXdfb3V0c3coKHUxNiAqKXBvcnQsIGFkZHIsIG4pCi0jZGVmaW5lIHdyaXRlbCh2YWwsIHBvcnQpCQlvdXRfYmUzMihwb3J0LCB2YWwpCiAjZGVmaW5lIF9faWRlX21tX291dHNsKHBvcnQsIGFkZHIsIG4pCXJhd19vdXRzbCgodTMyICopcG9ydCwgYWRkciwgbikKLSNpZiBkZWZpbmVkKENPTkZJR19BVEFSSSkgfHwgZGVmaW5lZChDT05GSUdfUTQwKQotI2RlZmluZSBpbnN3X3N3YXB3KHBvcnQsIGFkZHIsIG4pCXJhd19pbnN3X3N3YXB3KCh1MTYgKilwb3J0LCBhZGRyLCBuKQotI2RlZmluZSBvdXRzd19zd2Fwdyhwb3J0LCBhZGRyLCBuKQlyYXdfb3V0c3dfc3dhcHcoKHUxNiAqKXBvcnQsIGFkZHIsIG4pCi0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19CTEtfREVWX0ZBTENPTl9JREUKLSNkZWZpbmUgSURFX0FSQ0hfTE9DSwotCi1leHRlcm4gaW50IGZhbGNvbmlkZV9pbnRyX2xvY2s7Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQgaWRlX3JlbGVhc2VfbG9jayAodm9pZCkKLXsKLQlpZiAoTUFDSF9JU19BVEFSSSkgewotCQlpZiAoZmFsY29uaWRlX2ludHJfbG9jayA9PSAwKSB7Ci0JCQlwcmludGsoImlkZV9yZWxlYXNlX2xvY2s6IGJ1Z1xuIik7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJZmFsY29uaWRlX2ludHJfbG9jayA9IDA7Ci0JCXN0ZG1hX3JlbGVhc2UoKTsKLQl9Ci19Ci0KLXN0YXRpYyBfX2lubGluZV9fIHZvaWQKLWlkZV9nZXRfbG9jayhpcnFfaGFuZGxlcl90IGhhbmRsZXIsIHZvaWQgKmRhdGEpCi17Ci0JaWYgKE1BQ0hfSVNfQVRBUkkpIHsKLQkJaWYgKGZhbGNvbmlkZV9pbnRyX2xvY2sgPT0gMCkgewotCQkJaWYgKGluX2ludGVycnVwdCgpID4gMCkKLQkJCQlwYW5pYyggIkZhbGNvbiBJREUgaGFzbid0IFNULURNQSBsb2NrIGluIGludGVycnVwdCIgKTsKLQkJCXN0ZG1hX2xvY2soaGFuZGxlciwgZGF0YSk7Ci0JCQlmYWxjb25pZGVfaW50cl9sb2NrID0gMTsKLQkJfQotCX0KLX0KLSNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9GQUxDT05fSURFICovCi0KLSNkZWZpbmUgSURFX0FSQ0hfQUNLX0lOVFIKLSNkZWZpbmUgaWRlX2Fja19pbnRyKGh3aWYpCSgoaHdpZiktPmFja19pbnRyID8gKGh3aWYpLT5hY2tfaW50cihod2lmKSA6IDEpCiAKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX002OEtfSURFX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9LY29uZmlnIGIvYXJjaC9taXBzL0tjb25maWcKaW5kZXggMjA2Y2I3OS4uZGM3ODcxOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL0tjb25maWcKKysrIGIvYXJjaC9taXBzL0tjb25maWcKQEAgLTc3LDcgKzc3LDYgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMCiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCi0Jc2VsZWN0IEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQogCiBjb25maWcgTUFDSF9ERUNTVEFUSU9OCiAJYm9vbCAiREVDc3RhdGlvbnMiCkBAIC0xMzIsNyArMTMxLDYgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfNjRCSVRfS0VSTkVMIGlmIEVYUEVSSU1FTlRBTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfMTAwSFoKLQlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCiAJaGVscAogCSBUaGlzIGEgZmFtaWx5IG9mIG1hY2hpbmVzIGJhc2VkIG9uIHRoZSBNSVBTIFI0MDMwIGNoaXBzZXQgd2hpY2ggd2FzCiAJIHVzZWQgYnkgc2V2ZXJhbCB2ZW5kb3JzIHRvIGJ1aWxkIFJJU0Mvb3MgYW5kIFdpbmRvd3MgTlQgd29ya3N0YXRpb25zLgpAQCAtMTU0LDcgKzE1Miw2IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzY0QklUX0tFUk5FTCBpZiBCUk9LRU4KIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KLQlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCiAKIGNvbmZpZyBMRU1PVEVfRlVMT05HCiAJYm9vbCAiTGVtb3RlIEZ1bG9uZyBtaW5pLVBDIgpAQCAtMTc1LDcgKzE3Miw2IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU19MSVRUTEVfRU5ESUFOCiAJc2VsZWN0IFNZU19TVVBQT1JUU19ISUdITUVNCiAJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCi0Jc2VsZWN0IEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQogCXNlbGVjdCBHRU5FUklDX0lTQV9ETUFfU1VQUE9SVF9CUk9LRU4KIAlzZWxlY3QgQ1BVX0hBU19XQgogCWhlbHAKQEAgLTI1MCw3ICsyNDYsNiBAQAogCXNlbGVjdCBDRVZUX1I0SwogCXNlbGVjdCBDU1JDX1I0SwogCXNlbGVjdCBTWVNfSEFTX0NQVV9WUjQxWFgKLQlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCiAKIGNvbmZpZyBOWFBfU1RCMjIwCiAJYm9vbCAiTlhQIFNUQjIyMCBib2FyZCIKQEAgLTM2NCw3ICszNTksNiBAQAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfQklHX0VORElBTgogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTlVNQQogCXNlbGVjdCBTWVNfU1VQUE9SVFNfU01QCi0Jc2VsZWN0IEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQogCWhlbHAKIAkgIFRoaXMgYXJlIHRoZSBTR0kgT3JpZ2luIDIwMCwgT3JpZ2luIDIwMDAgYW5kIE9ueXggMiBHcmFwaGljcwogCSAgd29ya3N0YXRpb25zLiAgVG8gY29tcGlsZSBhIExpbnV4IGtlcm5lbCB0aGF0IHJ1bnMgb24gdGhlc2UsIHNheSBZCkBAIC01NjMsNyArNTU3LDYgQEAKIAlzZWxlY3QgQ0VWVF9SNEsKIAlzZWxlY3QgQ1NSQ19SNEsKIAlzZWxlY3QgRE1BX05PTkNPSEVSRU5UCi0Jc2VsZWN0IEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQogCXNlbGVjdCBIV19IQVNfUENJCiAJc2VsZWN0IElSUV9DUFUKIAlzZWxlY3QgU1lTX0hBU19DUFVfTUlQUzMyX1IxCkBAIC03MDAsOCArNjkzLDcgQEAKIAlkZWZhdWx0IHkKIAogY29uZmlnIEdFTkVSSUNfSEFSRElSUVNfTk9fX0RPX0lSUQotCWJvb2wKLQlkZWZhdWx0IG4KKwlkZWZfYm9vbCB5CiAKICMKICMgU2VsZWN0IHNvbWUgY29uZmlndXJhdGlvbiBvcHRpb25zIGF1dG9tYXRpY2FsbHkgYmFzZWQgb24gdXNlciBzZWxlY3Rpb25zLgpAQCAtOTIwLDcgKzkxMiw2IEBACiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0xJVFRMRV9FTkRJQU4KIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0JJR19FTkRJQU4KLQlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCiAJc2VsZWN0IEdFTkVSSUNfR1BJTwogCXNlbGVjdCBDUFVfTUlQU1IyX0lSUV9WSQogCkBAIC05MzksNyArOTMwLDYgQEAKIAlzZWxlY3QgU1lTX0hBU19DUFVfTUlQUzMyX1IxCiAJc2VsZWN0IFNZU19IQVNfRUFSTFlfUFJJTlRLCiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKLQlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCiAJc2VsZWN0IEdFTkVSSUNfR1BJTwogCiBjb25maWcgU1dBUF9JT19TUEFDRQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL01ha2VmaWxlIGIvYXJjaC9taXBzL01ha2VmaWxlCmluZGV4IDIyZGFiMmUuLjhkNTQ0YzcgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9NYWtlZmlsZQorKysgYi9hcmNoL21pcHMvTWFrZWZpbGUKQEAgLTcyMCwxMSArNzIwLDE3IEBACiAJJChRKSQoTUFLRSkgJChidWlsZCk9LiBtaXNzaW5nLXN5c2NhbGxzIEVYVFJBX0NGTEFHUz0iLW1hYmk9MzIiCiBlbmRpZgogCitpbnN0YWxsOgorCSQoUSlpbnN0YWxsIC1EIC1tIDc1NSB2bWxpbnV4ICQoSU5TVEFMTF9QQVRIKS92bWxpbnV4LSQoS0VSTkVMUkVMRUFTRSkKKwkkKFEpaW5zdGFsbCAtRCAtbSA2NDQgLmNvbmZpZyAkKElOU1RBTExfUEFUSCkvY29uZmlnLSQoS0VSTkVMUkVMRUFTRSkKKwkkKFEpaW5zdGFsbCAtRCAtbSA2NDQgU3lzdGVtLm1hcCAkKElOU1RBTExfUEFUSCkvU3lzdGVtLm1hcC0kKEtFUk5FTFJFTEVBU0UpCisKIGFyY2hjbGVhbjoKIAlAJChNQUtFKSAkKGNsZWFuKT1hcmNoL21pcHMvYm9vdAogCUAkKE1BS0UpICQoY2xlYW4pPWFyY2gvbWlwcy9sYXNhdAogCiBkZWZpbmUgYXJjaGhlbHAKKwllY2hvICcgIGluc3RhbGwgICAgICAgICAgICAgIC0gaW5zdGFsbCBrZXJuZWwgaW50byAkKElOU1RBTExfUEFUSCknCiAJZWNobyAnICB2bWxpbnV4LmVjb2ZmICAgICAgICAtIEVDT0ZGIGJvb3QgaW1hZ2UnCiAJZWNobyAnICB2bWxpbnV4LmJpbiAgICAgICAgICAtIFJhdyBiaW5hcnkgYm9vdCBpbWFnZScKIAllY2hvICcgIHZtbGludXguc3JlYyAgICAgICAgIC0gU1JFQyBib290IGltYWdlJwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2FsY2hlbXkvS2NvbmZpZyBiL2FyY2gvbWlwcy9hbGNoZW15L0tjb25maWcKaW5kZXggN2Y4ZWYxMy4uODEyOGFlYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvS2NvbmZpZworKysgYi9hcmNoL21pcHMvYWxjaGVteS9LY29uZmlnCkBAIC0xMzQsNCArMTM0LDQgQEAKIAlzZWxlY3QgU1lTX0hBU19DUFVfTUlQUzMyX1IxCiAJc2VsZWN0IFNZU19TVVBQT1JUU18zMkJJVF9LRVJORUwKIAlzZWxlY3QgU1lTX1NVUFBPUlRTX0FQTV9FTVVMQVRJT04KLQlzZWxlY3QgR0VORVJJQ19IQVJESVJRU19OT19fRE9fSVJRCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZ3Bpby5jIGIvYXJjaC9taXBzL2FsY2hlbXkvY29tbW9uL2dwaW8uYwppbmRleCBlNjYwZGRkLi45MWE5YzQ0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvYWxjaGVteS9jb21tb24vZ3Bpby5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2NvbW1vbi9ncGlvLmMKQEAgLTEsNSArMSw1IEBACiAvKgotICogIENvcHlyaWdodCAoQykgMjAwNywgT3BlbldydC5vcmcsIEZsb3JpYW4gRmFpbmVsbGkgPGZsb3JpYW5Ab3BlbndydC5vcmc+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDksIE9wZW5XcnQub3JnLCBGbG9yaWFuIEZhaW5lbGxpIDxmbG9yaWFuQG9wZW53cnQub3JnPgogICogIAlBcmNoaXRlY3R1cmUgc3BlY2lmaWMgR1BJTyBzdXBwb3J0CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZQkgaXQgYW5kL29yIG1vZGlmeSBpdApAQCAtMjcsMTIyICsyNywxNzUgQEAKICAqIAlvdGhlcnMgaGF2ZSBhIHNlY29uZCBvbmUgOiBHUElPMgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPGFzbS9tYWNoLWF1MXgwMC9hdTEwMDAuaD4KICNpbmNsdWRlIDxhc20vZ3Bpby5oPgogCi0jZGVmaW5lIGdwaW8xIHN5cworc3RydWN0IGF1MTAwMF9ncGlvX2NoaXAgeworCXN0cnVjdCBncGlvX2NoaXAJY2hpcDsKKwl2b2lkIF9faW9tZW0JCSpyZWdiYXNlOworfTsKKwogI2lmICFkZWZpbmVkKENPTkZJR19TT0NfQVUxMDAwKQotCi1zdGF0aWMgc3RydWN0IGF1MXgwMF9ncGlvMiAqY29uc3QgZ3BpbzIgPSAoc3RydWN0IGF1MXgwMF9ncGlvMiAqKSBHUElPMl9CQVNFOwotI2RlZmluZSBHUElPMl9PVVRQVVRfRU5BQkxFX01BU0sgCTB4MDAwMTAwMDAKLQotc3RhdGljIGludCBhdTF4eHhfZ3BpbzJfcmVhZCh1bnNpZ25lZCBncGlvKQorc3RhdGljIGludCBhdTEwMDBfZ3BpbzJfZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKLQlncGlvIC09IEFVMVhYWF9HUElPX0JBU0U7Ci0JcmV0dXJuICgoZ3BpbzItPnBpbnN0YXRlID4+IGdwaW8pICYgMHgwMSk7CisJdTMyIG1hc2sgPSAxIDw8IG9mZnNldDsKKwlzdHJ1Y3QgYXUxMDAwX2dwaW9fY2hpcCAqZ3BjaDsKKworCWdwY2ggPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGF1MTAwMF9ncGlvX2NoaXAsIGNoaXApOworCXJldHVybiByZWFkbChncGNoLT5yZWdiYXNlICsgQVUxMDAwX0dQSU8yX1NUKSAmIG1hc2s7CiB9CiAKLXN0YXRpYyB2b2lkIGF1MXh4eF9ncGlvMl93cml0ZSh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpCitzdGF0aWMgdm9pZCBhdTEwMDBfZ3BpbzJfc2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsCisJCQkJdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCiB7Ci0JZ3BpbyAtPSBBVTFYWFhfR1BJT19CQVNFOworCXUzMiBtYXNrID0gKChHUElPMl9PVVRfRU5fTUFTSyA8PCBvZmZzZXQpIHwgKCEhdmFsdWUgPDwgb2Zmc2V0KSk7CisJc3RydWN0IGF1MTAwMF9ncGlvX2NoaXAgKmdwY2g7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAotCWdwaW8yLT5vdXRwdXQgPSAoR1BJTzJfT1VUUFVUX0VOQUJMRV9NQVNLIDw8IGdwaW8pIHwgKCghIXZhbHVlKSA8PCBncGlvKTsKKwlncGNoID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhdTEwMDBfZ3Bpb19jaGlwLCBjaGlwKTsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl3cml0ZWwobWFzaywgZ3BjaC0+cmVnYmFzZSArIEFVMTAwMF9HUElPMl9PVVQpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBhdTF4eHhfZ3BpbzJfZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pCitzdGF0aWMgaW50IGF1MTAwMF9ncGlvMl9kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewotCWdwaW8gLT0gQVUxWFhYX0dQSU9fQkFTRTsKLQlncGlvMi0+ZGlyICY9IH4oMHgwMSA8PCBncGlvKTsKKwl1MzIgbWFzayA9IDEgPDwgb2Zmc2V0OworCXUzMiB0bXA7CisJc3RydWN0IGF1MTAwMF9ncGlvX2NoaXAgKmdwY2g7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWdwY2ggPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGF1MTAwMF9ncGlvX2NoaXAsIGNoaXApOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXRtcCA9IHJlYWRsKGdwY2gtPnJlZ2Jhc2UgKyBBVTEwMDBfR1BJTzJfRElSKTsKKwl0bXAgJj0gfm1hc2s7CisJd3JpdGVsKHRtcCwgZ3BjaC0+cmVnYmFzZSArIEFVMTAwMF9HUElPMl9ESVIpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGF1MXh4eF9ncGlvMl9kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3N0YXRpYyBpbnQgYXUxMDAwX2dwaW8yX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkJdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCiB7Ci0JZ3BpbyAtPSBBVTFYWFhfR1BJT19CQVNFOwotCWdwaW8yLT5kaXIgfD0gMHgwMSA8PCBncGlvOwotCWdwaW8yLT5vdXRwdXQgPSAoR1BJTzJfT1VUUFVUX0VOQUJMRV9NQVNLIDw8IGdwaW8pIHwgKCghIXZhbHVlKSA8PCBncGlvKTsKKwl1MzIgbWFzayA9IDEgPDwgb2Zmc2V0OworCXUzMiBvdXRfbWFzayA9ICgoR1BJTzJfT1VUX0VOX01BU0sgPDwgb2Zmc2V0KSB8ICghIXZhbHVlIDw8IG9mZnNldCkpOworCXUzMiB0bXA7CisJc3RydWN0IGF1MTAwMF9ncGlvX2NoaXAgKmdwY2g7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWdwY2ggPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGF1MTAwMF9ncGlvX2NoaXAsIGNoaXApOworCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCXRtcCA9IHJlYWRsKGdwY2gtPnJlZ2Jhc2UgKyBBVTEwMDBfR1BJTzJfRElSKTsKKwl0bXAgfD0gbWFzazsKKwl3cml0ZWwodG1wLCBncGNoLT5yZWdiYXNlICsgQVUxMDAwX0dQSU8yX0RJUik7CisJd3JpdGVsKG91dF9tYXNrLCBncGNoLT5yZWdiYXNlICsgQVUxMDAwX0dQSU8yX09VVCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworCiAJcmV0dXJuIDA7CiB9Ci0KICNlbmRpZiAvKiAhZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkgKi8KIAotc3RhdGljIGludCBhdTF4eHhfZ3BpbzFfcmVhZCh1bnNpZ25lZCBncGlvKQorc3RhdGljIGludCBhdTEwMDBfZ3BpbzFfZ2V0KHN0cnVjdCBncGlvX2NoaXAgKmNoaXAsIHVuc2lnbmVkIG9mZnNldCkKIHsKLQlyZXR1cm4gKGdwaW8xLT5waW5zdGF0ZXJkID4+IGdwaW8pICYgMHgwMTsKKwl1MzIgbWFzayA9IDEgPDwgb2Zmc2V0OworCXN0cnVjdCBhdTEwMDBfZ3Bpb19jaGlwICpncGNoOworCisJZ3BjaCA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgYXUxMDAwX2dwaW9fY2hpcCwgY2hpcCk7CisJcmV0dXJuIHJlYWRsKGdwY2gtPnJlZ2Jhc2UgKyBBVTEwMDBfR1BJTzFfU1QpICYgbWFzazsKIH0KIAotc3RhdGljIHZvaWQgYXUxeHh4X2dwaW8xX3dyaXRlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3N0YXRpYyB2b2lkIGF1MTAwMF9ncGlvMV9zZXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQl1bnNpZ25lZCBvZmZzZXQsIGludCB2YWx1ZSkKIHsKKwl1MzIgbWFzayA9IDEgPDwgb2Zmc2V0OworCXUzMiByZWdfb2Zmc2V0OworCXN0cnVjdCBhdTEwMDBfZ3Bpb19jaGlwICpncGNoOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlncGNoID0gY29udGFpbmVyX29mKGNoaXAsIHN0cnVjdCBhdTEwMDBfZ3Bpb19jaGlwLCBjaGlwKTsKKwogCWlmICh2YWx1ZSkKLQkJZ3BpbzEtPm91dHB1dHNldCA9ICgweDAxIDw8IGdwaW8pOworCQlyZWdfb2Zmc2V0ID0gQVUxMDAwX0dQSU8xX09VVDsKIAllbHNlCi0JCS8qIE91dHB1dCBhIHplcm8gKi8KLQkJZ3BpbzEtPm91dHB1dGNsciA9ICgweDAxIDw8IGdwaW8pOworCQlyZWdfb2Zmc2V0ID0gQVUxMDAwX0dQSU8xX0NMUjsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwl3cml0ZWwobWFzaywgZ3BjaC0+cmVnYmFzZSArIHJlZ19vZmZzZXQpOworCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsKIH0KIAotc3RhdGljIGludCBhdTF4eHhfZ3BpbzFfZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pCitzdGF0aWMgaW50IGF1MTAwMF9ncGlvMV9kaXJlY3Rpb25faW5wdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwgdW5zaWduZWQgb2Zmc2V0KQogewotCWdwaW8xLT5waW5pbnB1dGVuID0gKDB4MDEgPDwgZ3Bpbyk7CisJdTMyIG1hc2sgPSAxIDw8IG9mZnNldDsKKwlzdHJ1Y3QgYXUxMDAwX2dwaW9fY2hpcCAqZ3BjaDsKKworCWdwY2ggPSBjb250YWluZXJfb2YoY2hpcCwgc3RydWN0IGF1MTAwMF9ncGlvX2NoaXAsIGNoaXApOworCXdyaXRlbChtYXNrLCBncGNoLT5yZWdiYXNlICsgQVUxMDAwX0dQSU8xX1NUKTsKKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGF1MXh4eF9ncGlvMV9kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKK3N0YXRpYyBpbnQgYXUxMDAwX2dwaW8xX2RpcmVjdGlvbl9vdXRwdXQoc3RydWN0IGdwaW9fY2hpcCAqY2hpcCwKKwkJCQkJdW5zaWduZWQgb2Zmc2V0LCBpbnQgdmFsdWUpCiB7Ci0JZ3BpbzEtPnRyaW91dGNsciA9ICgweDAxICYgZ3Bpbyk7Ci0JYXUxeHh4X2dwaW8xX3dyaXRlKGdwaW8sIHZhbHVlKTsKKwl1MzIgbWFzayA9IDEgPDwgb2Zmc2V0OworCXN0cnVjdCBhdTEwMDBfZ3Bpb19jaGlwICpncGNoOworCisJZ3BjaCA9IGNvbnRhaW5lcl9vZihjaGlwLCBzdHJ1Y3QgYXUxMDAwX2dwaW9fY2hpcCwgY2hpcCk7CisKKwl3cml0ZWwobWFzaywgZ3BjaC0+cmVnYmFzZSArIEFVMTAwMF9HUElPMV9UUklfT1VUKTsKKwlhdTEwMDBfZ3BpbzFfc2V0KGNoaXAsIG9mZnNldCwgdmFsdWUpOworCiAJcmV0dXJuIDA7CiB9CiAKLWludCBhdTF4eHhfZ3Bpb19nZXRfdmFsdWUodW5zaWduZWQgZ3BpbykKLXsKLQlpZiAoZ3BpbyA+PSBBVTFYWFhfR1BJT19CQVNFKQotI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCi0JCXJldHVybiAwOwotI2Vsc2UKLQkJcmV0dXJuIGF1MXh4eF9ncGlvMl9yZWFkKGdwaW8pOworc3RydWN0IGF1MTAwMF9ncGlvX2NoaXAgYXUxMDAwX2dwaW9fY2hpcFtdID0geworCVswXSA9IHsKKwkJLnJlZ2Jhc2UJCQk9ICh2b2lkIF9faW9tZW0gKilTWVNfQkFTRSwKKwkJLmNoaXAgPSB7CisJCQkubGFiZWwJCQk9ICJhdTEwMDAtZ3BpbzEiLAorCQkJLmRpcmVjdGlvbl9pbnB1dAk9IGF1MTAwMF9ncGlvMV9kaXJlY3Rpb25faW5wdXQsCisJCQkuZGlyZWN0aW9uX291dHB1dAk9IGF1MTAwMF9ncGlvMV9kaXJlY3Rpb25fb3V0cHV0LAorCQkJLmdldAkJCT0gYXUxMDAwX2dwaW8xX2dldCwKKwkJCS5zZXQJCQk9IGF1MTAwMF9ncGlvMV9zZXQsCisJCQkuYmFzZQkJCT0gMCwKKwkJCS5uZ3BpbwkJCT0gMzIsCisJCX0sCisJfSwKKyNpZiAhZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKKwlbMV0gPSB7CisJCS5yZWdiYXNlICAgICAgICAgICAgICAgICAgICAgICAgPSAodm9pZCBfX2lvbWVtICopR1BJTzJfQkFTRSwKKwkJLmNoaXAgPSB7CisJCQkubGFiZWwgICAgICAgICAgICAgICAgICA9ICJhdTEwMDAtZ3BpbzIiLAorCQkJLmRpcmVjdGlvbl9pbnB1dCAgICAgICAgPSBhdTEwMDBfZ3BpbzJfZGlyZWN0aW9uX2lucHV0LAorCQkJLmRpcmVjdGlvbl9vdXRwdXQgICAgICAgPSBhdTEwMDBfZ3BpbzJfZGlyZWN0aW9uX291dHB1dCwKKwkJCS5nZXQgICAgICAgICAgICAgICAgICAgID0gYXUxMDAwX2dwaW8yX2dldCwKKwkJCS5zZXQgICAgICAgICAgICAgICAgICAgID0gYXUxMDAwX2dwaW8yX3NldCwKKwkJCS5iYXNlICAgICAgICAgICAgICAgICAgID0gQVUxWFhYX0dQSU9fQkFTRSwKKwkJCS5uZ3BpbyAgICAgICAgICAgICAgICAgID0gMzIsCisJCX0sCisJfSwKICNlbmRpZgotCWVsc2UKLQkJcmV0dXJuIGF1MXh4eF9ncGlvMV9yZWFkKGdwaW8pOwotfQotRVhQT1JUX1NZTUJPTChhdTF4eHhfZ3Bpb19nZXRfdmFsdWUpOworfTsKIAotdm9pZCBhdTF4eHhfZ3Bpb19zZXRfdmFsdWUodW5zaWduZWQgZ3BpbywgaW50IHZhbHVlKQorc3RhdGljIGludCBfX2luaXQgYXUxMDAwX2dwaW9faW5pdCh2b2lkKQogewotCWlmIChncGlvID49IEFVMVhYWF9HUElPX0JBU0UpCi0jaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKLQkJOwotI2Vsc2UKLQkJYXUxeHh4X2dwaW8yX3dyaXRlKGdwaW8sIHZhbHVlKTsKLSNlbmRpZgotCWVsc2UKLQkJYXUxeHh4X2dwaW8xX3dyaXRlKGdwaW8sIHZhbHVlKTsKLX0KLUVYUE9SVF9TWU1CT0woYXUxeHh4X2dwaW9fc2V0X3ZhbHVlKTsKLQotaW50IGF1MXh4eF9ncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKQotewotCWlmIChncGlvID49IEFVMVhYWF9HUElPX0JBU0UpCi0jaWYgZGVmaW5lZChDT05GSUdfU09DX0FVMTAwMCkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0jZWxzZQotCQlyZXR1cm4gYXUxeHh4X2dwaW8yX2RpcmVjdGlvbl9pbnB1dChncGlvKTsKKwlncGlvY2hpcF9hZGQoJmF1MTAwMF9ncGlvX2NoaXBbMF0uY2hpcCk7CisjaWYgIWRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCisJZ3Bpb2NoaXBfYWRkKCZhdTEwMDBfZ3Bpb19jaGlwWzFdLmNoaXApOwogI2VuZGlmCiAKLQlyZXR1cm4gYXUxeHh4X2dwaW8xX2RpcmVjdGlvbl9pbnB1dChncGlvKTsKKwlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woYXUxeHh4X2dwaW9fZGlyZWN0aW9uX2lucHV0KTsKK2FyY2hfaW5pdGNhbGwoYXUxMDAwX2dwaW9faW5pdCk7CiAKLWludCBhdTF4eHhfZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKLXsKLQlpZiAoZ3BpbyA+PSBBVTFYWFhfR1BJT19CQVNFKQotI2lmIGRlZmluZWQoQ09ORklHX1NPQ19BVTEwMDApCi0JCXJldHVybiAtRU5PREVWOwotI2Vsc2UKLQkJcmV0dXJuIGF1MXh4eF9ncGlvMl9kaXJlY3Rpb25fb3V0cHV0KGdwaW8sIHZhbHVlKTsKLSNlbmRpZgotCi0JcmV0dXJuIGF1MXh4eF9ncGlvMV9kaXJlY3Rpb25fb3V0cHV0KGdwaW8sIHZhbHVlKTsKLX0KLUVYUE9SVF9TWU1CT0woYXUxeHh4X2dwaW9fZGlyZWN0aW9uX291dHB1dCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMjAwL3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvYWxjaGVteS9kZXZib2FyZHMvcGIxMjAwL3BsYXRmb3JtLmMKaW5kZXggOTUzMDMyOS4uMGQ2OGUxOSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2FsY2hlbXkvZGV2Ym9hcmRzL3BiMTIwMC9wbGF0Zm9ybS5jCisrKyBiL2FyY2gvbWlwcy9hbGNoZW15L2RldmJvYXJkcy9wYjEyMDAvcGxhdGZvcm0uYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9sZWRzLmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc21jOTF4Lmg+CiAKICNpbmNsdWRlIDxhc20vbWFjaC1hdTF4MDAvYXUxeHh4Lmg+CiAjaW5jbHVkZSA8YXNtL21hY2gtYXUxeDAwL2F1MTEwMF9tbWMuaD4KQEAgLTEzMSw2ICsxMzIsMTIgQEAKIAkucmVzb3VyY2UJPSBpZGVfcmVzb3VyY2VzCiB9OwogCitzdGF0aWMgc3RydWN0IHNtYzkxeF9wbGF0ZGF0YSBzbWNfZGF0YSA9IHsKKwkuZmxhZ3MJPSBTTUM5MVhfTk9XQUlUIHwgU01DOTFYX1VTRV8xNkJJVCwKKwkubGVkYQk9IFJQQ19MRURfMTAwXzEwLAorCS5sZWRiCT0gUlBDX0xFRF9UWF9SWCwKK307CisKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2Ugc21jOTFjMTExX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKIAkJLm5hbWUJPSAic21jOTF4LXJlZ3MiLApAQCAtMTQ2LDYgKzE1Myw5IEBACiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBzbWM5MWMxMTFfZGV2aWNlID0geworCS5kZXYJPSB7CisJCS5wbGF0Zm9ybV9kYXRhCT0gJnNtY19kYXRhLAorCX0sCiAJLm5hbWUJCT0gInNtYzkxeCIsCiAJLmlkCQk9IC0xLAogCS5udW1fcmVzb3VyY2VzCT0gQVJSQVlfU0laRShzbWM5MWMxMTFfcmVzb3VyY2VzKSwKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL01ha2VmaWxlIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vTWFrZWZpbGUKaW5kZXggMWMyYTdmYS4uZDY5MDNjMyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vTWFrZWZpbGUKKysrIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vTWFrZWZpbGUKQEAgLTE0LDMgKzE0LDUgQEAKIG9iai15ICs9IG9jdGVvbi1tZW1jcHkubwogCiBvYmotJChDT05GSUdfU01QKSAgICAgICAgICAgICAgICAgICAgICs9IHNtcC5vCisKK0VYVFJBX0NGTEFHUyArPSAtV2Vycm9yCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9mbGFzaF9zZXR1cC5jIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vZmxhc2hfc2V0dXAuYwppbmRleCA1NTNkMzZjLi4wMDhmNjU3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9mbGFzaF9zZXR1cC5jCisrKyBiL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL2ZsYXNoX3NldHVwLmMKQEAgLTU3LDcgKzU3LDcgQEAKIAkJZmxhc2hfbWFwLmJhbmt3aWR0aCA9IDE7CiAJCWZsYXNoX21hcC52aXJ0ID0gaW9yZW1hcChmbGFzaF9tYXAucGh5cywgZmxhc2hfbWFwLnNpemUpOwogCQlwcl9ub3RpY2UoIkJvb3RidXMgZmxhc2g6IFNldHRpbmcgZmxhc2ggZm9yICVsdU1CIGZsYXNoIGF0ICIKLQkJCSAgIjB4JTA4bHhcbiIsIGZsYXNoX21hcC5zaXplID4+IDIwLCBmbGFzaF9tYXAucGh5cyk7CisJCQkgICIweCUwOGxseFxuIiwgZmxhc2hfbWFwLnNpemUgPj4gMjAsIGZsYXNoX21hcC5waHlzKTsKIAkJc2ltcGxlX21hcF9pbml0KCZmbGFzaF9tYXApOwogCQlteW10ZCA9IGRvX21hcF9wcm9iZSgiY2ZpX3Byb2JlIiwgJmZsYXNoX21hcCk7CiAJCWlmIChteW10ZCkgewpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLWlycS5jIGIvYXJjaC9taXBzL2Nhdml1bS1vY3Rlb24vb2N0ZW9uLWlycS5jCmluZGV4IGZjNzI5ODQuLjFjMTlhZjggMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9jYXZpdW0tb2N0ZW9uL29jdGVvbi1pcnEuYworKysgYi9hcmNoL21pcHMvY2F2aXVtLW9jdGVvbi9vY3Rlb24taXJxLmMKQEAgLTMxLDcgKzMxLDcgQEAKIAogc3RhdGljIHZvaWQgb2N0ZW9uX2lycV9jb3JlX2VvaSh1bnNpZ25lZCBpbnQgaXJxKQogewotCWlycV9kZXNjX3QgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKKwlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBpcnFfZGVzYyArIGlycTsKIAl1bnNpZ25lZCBpbnQgYml0ID0gaXJxIC0gT0NURU9OX0lSUV9TVzA7CiAJLyoKIAkgKiBJZiBhbiBJUlEgaXMgYmVpbmcgcHJvY2Vzc2VkIHdoaWxlIHdlIGFyZSBkaXNhYmxpbmcgaXQgdGhlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvZW1tYS9tYXJrZWlucy9pcnEuYyBiL2FyY2gvbWlwcy9lbW1hL21hcmtlaW5zL2lycS5jCmluZGV4IGMyNTgzZWMuLjJiYmM0MWEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9lbW1hL21hcmtlaW5zL2lycS5jCisrKyBiL2FyY2gvbWlwcy9lbW1hL21hcmtlaW5zL2lycS5jCkBAIC04MCw5ICs4MCw5IEBACiAJdTMyIGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0VNTUEyUkhfSVJROyBpKyspCi0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihFTU1BMlJIX0lSUV9CQVNFICsgaSwKLQkJCQkJICZlbW1hMnJoX2lycV9jb250cm9sbGVyLAotCQkJCQkgaGFuZGxlX2xldmVsX2lycSk7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKEVNTUEyUkhfSVJRX0JBU0UgKyBpLAorCQkJCQkgICAgICAmZW1tYTJyaF9pcnFfY29udHJvbGxlciwKKwkJCQkJICAgICAgaGFuZGxlX2xldmVsX2lycSwgImxldmVsIik7CiB9CiAKIHN0YXRpYyB2b2lkIGVtbWEycmhfc3dfaXJxX2VuYWJsZSh1bnNpZ25lZCBpbnQgaXJxKQpAQCAtMTIwLDkgKzEyMCw5IEBACiAJdTMyIGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0VNTUEyUkhfSVJRX1NXOyBpKyspCi0JCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihFTU1BMlJIX1NXX0lSUV9CQVNFICsgaSwKLQkJCQkJICZlbW1hMnJoX3N3X2lycV9jb250cm9sbGVyLAotCQkJCQkgaGFuZGxlX2xldmVsX2lycSk7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKEVNTUEyUkhfU1dfSVJRX0JBU0UgKyBpLAorCQkJCQkgICAgICAmZW1tYTJyaF9zd19pcnFfY29udHJvbGxlciwKKwkJCQkJICAgICAgaGFuZGxlX2xldmVsX2lycSwgImxldmVsIik7CiB9CiAKIHN0YXRpYyB2b2lkIGVtbWEycmhfZ3Bpb19pcnFfZW5hYmxlKHVuc2lnbmVkIGludCBpcnEpCkBAIC0xNDksNiArMTQ5LDEyIEBACiAKIHN0YXRpYyB2b2lkIGVtbWEycmhfZ3Bpb19pcnFfYWNrKHVuc2lnbmVkIGludCBpcnEpCiB7CisJaXJxIC09IEVNTUEyUkhfR1BJT19JUlFfQkFTRTsKKwllbW1hMnJoX291dDMyKEVNTUEyUkhfR1BJT19JTlRfU1QsIH4oMSA8PCBpcnEpKTsKK30KKworc3RhdGljIHZvaWQgZW1tYTJyaF9ncGlvX2lycV9tYXNrX2Fjayh1bnNpZ25lZCBpbnQgaXJxKQorewogCXUzMiByZWc7CiAKIAlpcnEgLT0gRU1NQTJSSF9HUElPX0lSUV9CQVNFOwpAQCAtMTU5LDI3ICsxNjUsMTIgQEAKIAllbW1hMnJoX291dDMyKEVNTUEyUkhfR1BJT19JTlRfTUFTSywgcmVnKTsKIH0KIAotc3RhdGljIHZvaWQgZW1tYTJyaF9ncGlvX2lycV9lbmQodW5zaWduZWQgaW50IGlycSkKLXsKLQl1MzIgcmVnOwotCi0JaWYgKCEoaXJxX2Rlc2NbaXJxXS5zdGF0dXMgJiAoSVJRX0RJU0FCTEVEIHwgSVJRX0lOUFJPR1JFU1MpKSkgewotCi0JCWlycSAtPSBFTU1BMlJIX0dQSU9fSVJRX0JBU0U7Ci0KLQkJcmVnID0gZW1tYTJyaF9pbjMyKEVNTUEyUkhfR1BJT19JTlRfTUFTSyk7Ci0JCXJlZyB8PSAxIDw8IGlycTsKLQkJZW1tYTJyaF9vdXQzMihFTU1BMlJIX0dQSU9fSU5UX01BU0ssIHJlZyk7Ci0JfQotfQotCiBzdHJ1Y3QgaXJxX2NoaXAgZW1tYTJyaF9ncGlvX2lycV9jb250cm9sbGVyID0gewogCS5uYW1lID0gImVtbWEycmhfZ3Bpb19pcnEiLAogCS5hY2sgPSBlbW1hMnJoX2dwaW9faXJxX2FjaywKIAkubWFzayA9IGVtbWEycmhfZ3Bpb19pcnFfZGlzYWJsZSwKLQkubWFza19hY2sgPSBlbW1hMnJoX2dwaW9faXJxX2FjaywKKwkubWFza19hY2sgPSBlbW1hMnJoX2dwaW9faXJxX21hc2tfYWNrLAogCS51bm1hc2sgPSBlbW1hMnJoX2dwaW9faXJxX2VuYWJsZSwKLQkuZW5kID0gZW1tYTJyaF9ncGlvX2lycV9lbmQsCiB9OwogCiB2b2lkIGVtbWEycmhfZ3Bpb19pcnFfaW5pdCh2b2lkKQpAQCAtMTg3LDggKzE3OCw5IEBACiAJdTMyIGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgTlVNX0VNTUEyUkhfSVJRX0dQSU87IGkrKykKLQkJc2V0X2lycV9jaGlwKEVNTUEyUkhfR1BJT19JUlFfQkFTRSArIGksCi0JCQkgICAgICZlbW1hMnJoX2dwaW9faXJxX2NvbnRyb2xsZXIpOworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShFTU1BMlJIX0dQSU9fSVJRX0JBU0UgKyBpLAorCQkJCQkgICAgICAmZW1tYTJyaF9ncGlvX2lycV9jb250cm9sbGVyLAorCQkJCQkgICAgICBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaXJxYWN0aW9uIGlycV9jYXNjYWRlID0gewpAQCAtMjEzLDggKzIwNSw3IEBACiAJCSAgICBlbW1hMnJoX2luMzIoRU1NQTJSSF9CSElGX0lOVF9FTl8wKTsKIAogI2lmZGVmIEVNTUEyUkhfU1dfQ0FTQ0FERQotCWlmIChpbnRTdGF0dXMgJgotCSAgICAoMSA8PCAoKEVNTUEyUkhfU1dfQ0FTQ0FERSAtIEVNTUEyUkhfSVJRX0lOVDApICYgKDMyIC0gMSkpKSkgeworCWlmIChpbnRTdGF0dXMgJiAoMVVMIDw8IEVNTUEyUkhfU1dfQ0FTQ0FERSkpIHsKIAkJdTMyIHN3SW50U3RhdHVzOwogCQlzd0ludFN0YXR1cyA9IGVtbWEycmhfaW4zMihFTU1BMlJIX0JISUZfU1dfSU5UKQogCQkgICAgJiBlbW1hMnJoX2luMzIoRU1NQTJSSF9CSElGX1NXX0lOVF9FTik7CkBAIC0yMjUsNiArMjE2LDggQEAKIAkJCX0KIAkJfQogCX0KKwkvKiBTa2lwIFMvVyBpbnRlcnJ1cHQgKi8KKwlpbnRTdGF0dXMgJj0gfigxVUwgPDwgRU1NQTJSSF9TV19DQVNDQURFKTsKICNlbmRpZgogCiAJZm9yIChpID0gMCwgYml0bWFzayA9IDE7IGkgPCAzMjsgaSsrLCBiaXRtYXNrIDw8PSAxKSB7CkBAIC0yMzgsOCArMjMxLDcgQEAKIAkJICAgIGVtbWEycmhfaW4zMihFTU1BMlJIX0JISUZfSU5UX0VOXzEpOwogCiAjaWZkZWYgRU1NQTJSSF9HUElPX0NBU0NBREUKLQlpZiAoaW50U3RhdHVzICYKLQkgICAgKDEgPDwgKChFTU1BMlJIX0dQSU9fQ0FTQ0FERSAtIEVNTUEyUkhfSVJRX0lOVDApICYgKDMyIC0gMSkpKSkgeworCWlmIChpbnRTdGF0dXMgJiAoMVVMIDw8IChFTU1BMlJIX0dQSU9fQ0FTQ0FERSAlIDMyKSkpIHsKIAkJdTMyIGdwaW9JbnRTdGF0dXM7CiAJCWdwaW9JbnRTdGF0dXMgPSBlbW1hMnJoX2luMzIoRU1NQTJSSF9HUElPX0lOVF9TVCkKIAkJICAgICYgZW1tYTJyaF9pbjMyKEVNTUEyUkhfR1BJT19JTlRfTUFTSyk7CkBAIC0yNTAsNiArMjQyLDggQEAKIAkJCX0KIAkJfQogCX0KKwkvKiBTa2lwIEdQSU8gaW50ZXJydXB0ICovCisJaW50U3RhdHVzICY9IH4oMVVMIDw8IChFTU1BMlJIX0dQSU9fQ0FTQ0FERSAlIDMyKSk7CiAjZW5kaWYKIAogCWZvciAoaSA9IDMyLCBiaXRtYXNrID0gMTsgaSA8IDY0OyBpKyssIGJpdG1hc2sgPDw9IDEpIHsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9lbW1hL21hcmtlaW5zL3BsYXRmb3JtLmMgYi9hcmNoL21pcHMvZW1tYS9tYXJrZWlucy9wbGF0Zm9ybS5jCmluZGV4IGQ1ZjQ3ZTQuLjgwYWUxMmUgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9lbW1hL21hcmtlaW5zL3BsYXRmb3JtLmMKKysrIGIvYXJjaC9taXBzL2VtbWEvbWFya2VpbnMvcGxhdGZvcm0uYwpAQCAtMTEwLDYgKzExMCw3IEBACiBzdGF0aWMgc3RydWN0ICBwbGF0X3NlcmlhbDgyNTBfcG9ydCBwbGF0Zm9ybV9zZXJpYWxfcG9ydHNbXSA9IHsKIAlbMF0gPSB7CiAJCS5tZW1iYXNlPSAodm9pZCBfX2lvbWVtKilLU0VHMUFERFIoRU1NQTJSSF9QRlVSMF9CQVNFICsgMyksCisJCS5tYXBiYXNlID0gRU1NQTJSSF9QRlVSMF9CQVNFICsgMywKIAkJLmlycSA9IEVNTUEyUkhfSVJRX1BGVVIwLAogCQkudWFydGNsayA9IEVNTUEyUkhfU0VSSUFMX0NMT0NLLAogCQkucmVnc2hpZnQgPSA0LApAQCAtMTE3LDYgKzExOCw3IEBACiAJCS5mbGFncyA9IEVNTUEyUkhfU0VSSUFMX0ZMQUdTLAogICAgICAgIH0sIFsxXSA9IHsKIAkJLm1lbWJhc2UgPSAodm9pZCBfX2lvbWVtKilLU0VHMUFERFIoRU1NQTJSSF9QRlVSMV9CQVNFICsgMyksCisJCS5tYXBiYXNlID0gRU1NQTJSSF9QRlVSMV9CQVNFICsgMywKIAkJLmlycSA9IEVNTUEyUkhfSVJRX1BGVVIxLAogCQkudWFydGNsayA9IEVNTUEyUkhfU0VSSUFMX0NMT0NLLAogCQkucmVnc2hpZnQgPSA0LApAQCAtMTI0LDYgKzEyNiw3IEBACiAJCS5mbGFncyA9IEVNTUEyUkhfU0VSSUFMX0ZMQUdTLAogICAgICAgIH0sIFsyXSA9IHsKIAkJLm1lbWJhc2UgPSAodm9pZCBfX2lvbWVtKilLU0VHMUFERFIoRU1NQTJSSF9QRlVSMl9CQVNFICsgMyksCisJCS5tYXBiYXNlID0gRU1NQTJSSF9QRlVSMl9CQVNFICsgMywKIAkJLmlycSA9IEVNTUEyUkhfSVJRX1BGVVIyLAogCQkudWFydGNsayA9IEVNTUEyUkhfU0VSSUFMX0NMT0NLLAogCQkucmVnc2hpZnQgPSA0LApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2NwdS5oCmluZGV4IGMwMTg3MjcuLjNiZGMwZTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9jcHUuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vY3B1LmgKQEAgLTIwOSw4ICsyMDksNyBAQAogCSAqIE1JUFMzMiBjbGFzcyBwcm9jZXNzb3JzCiAJICovCiAJQ1BVXzRLQywgQ1BVXzRLRUMsIENQVV80S1NDLCBDUFVfMjRLLCBDUFVfMzRLLCBDUFVfMTAwNEssIENQVV83NEssCi0JQ1BVX0FVMTAwMCwgQ1BVX0FVMTEwMCwgQ1BVX0FVMTIwMCwgQ1BVX0FVMTIxMCwgQ1BVX0FVMTI1MCwgQ1BVX0FVMTUwMCwKLQlDUFVfQVUxNTUwLCBDUFVfUFI0NDUwLCBDUFVfQkNNMzMwMiwgQ1BVX0JDTTQ3MTAsCisJQ1BVX0FMQ0hFTVksIENQVV9QUjQ0NTAsIENQVV9CQ00zMzAyLCBDUFVfQkNNNDcxMCwKIAogCS8qCiAJICogTUlQUzY0IGNsYXNzIHByb2Nlc3NvcnMKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9oYXphcmRzLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vaGF6YXJkcy5oCmluZGV4IDEzNGUxZmMuLmExMmQ5NzEgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9oYXphcmRzLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL2hhemFyZHMuaApAQCAtODcsNyArODcsNyBAQAogCTogIj1yIiAodG1wKSk7CQkJCQkJCVwKIH0gd2hpbGUgKDApCiAKLSNlbGlmIGRlZmluZWQoQ09ORklHX0NQVV9NSVBTUjEpCisjZWxpZiBkZWZpbmVkKENPTkZJR19DUFVfTUlQU1IxKSAmJiAhZGVmaW5lZChDT05GSUdfTUFDSF9BTENIRU1ZKQogCiAvKgogICogVGhlc2UgYXJlIHNsaWdodGx5IGNvbXBsaWNhdGVkIGJ5IHRoZSBmYWN0IHRoYXQgd2UgZ3VhcmFudGVlIFIxIGtlcm5lbHMgdG8KQEAgLTEzOSw3ICsxMzksNyBAQAogfSB3aGlsZSAoMCkKIAogI2VsaWYgZGVmaW5lZChDT05GSUdfQ1BVX1IxMDAwMCkgfHwgZGVmaW5lZChDT05GSUdfQ1BVX0NBVklVTV9PQ1RFT04pIHx8IFwKLSAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9SNTUwMCkKKyAgICAgIGRlZmluZWQoQ09ORklHX0NQVV9SNTUwMCkgfHwgZGVmaW5lZChDT05GSUdfTUFDSF9BTENIRU1ZKQogCiAvKgogICogUjEwMDAwIHJvY2tzIC0gYWxsIGhhemFyZHMgaGFuZGxlZCBpbiBoYXJkd2FyZSwgc28gdGhpcyBiZWNvbWVzIGEgbm9icmFpbmVyLgpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2NwdS1mZWF0dXJlLW92ZXJyaWRlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ1ZGYwY2EKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvY3B1LWZlYXR1cmUtb3ZlcnJpZGVzLmgKQEAgLTAsMCArMSw0OSBAQAorLyoKKyAqIFRoaXMgZmlsZSBpcyBzdWJqZWN0IHRvIHRoZSB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlLiAgU2VlIHRoZSBmaWxlICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlCisgKiBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpZm5kZWYgX19BU01fTUFDSF9BVTFYMDBfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0gKKyNkZWZpbmUgX19BU01fTUFDSF9BVTFYMDBfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0gKKworI2RlZmluZSBjcHVfaGFzX3RsYgkJCTEKKyNkZWZpbmUgY3B1X2hhc180a2V4CQkJMQorI2RlZmluZSBjcHVfaGFzXzNrX2NhY2hlCQkwCisjZGVmaW5lIGNwdV9oYXNfNGtfY2FjaGUJCTEKKyNkZWZpbmUgY3B1X2hhc190eDM5X2NhY2hlCQkwCisjZGVmaW5lIGNwdV9oYXNfZnB1CQkJMAorI2RlZmluZSBjcHVfaGFzX2NvdW50ZXIJCQkxCisjZGVmaW5lIGNwdV9oYXNfd2F0Y2gJCQkxCisjZGVmaW5lIGNwdV9oYXNfZGl2ZWMJCQkxCisjZGVmaW5lIGNwdV9oYXNfdmNlCQkJMAorI2RlZmluZSBjcHVfaGFzX2NhY2hlX2NkZXhfcAkJMAorI2RlZmluZSBjcHVfaGFzX2NhY2hlX2NkZXhfcwkJMAorI2RlZmluZSBjcHVfaGFzX21jaGVjawkJCTEKKyNkZWZpbmUgY3B1X2hhc19lanRhZwkJCTEKKyNkZWZpbmUgY3B1X2hhc19sbHNjCQkJMQorI2RlZmluZSBjcHVfaGFzX21pcHMxNgkJCTAKKyNkZWZpbmUgY3B1X2hhc19tZG14CQkJMAorI2RlZmluZSBjcHVfaGFzX21pcHMzZAkJCTAKKyNkZWZpbmUgY3B1X2hhc19zbWFydG1pcHMJCTAKKyNkZWZpbmUgY3B1X2hhc192dGFnX2ljYWNoZQkJMAorI2RlZmluZSBjcHVfaGFzX2RjX2FsaWFzZXMJCTAKKyNkZWZpbmUgY3B1X2hhc19pY19maWxsc19mX2RjCQkxCisjZGVmaW5lIGNwdV9oYXNfbWlwczMycjEJCTEKKyNkZWZpbmUgY3B1X2hhc19taXBzMzJyMgkJMAorI2RlZmluZSBjcHVfaGFzX21pcHM2NHIxCQkwCisjZGVmaW5lIGNwdV9oYXNfbWlwczY0cjIJCTAKKyNkZWZpbmUgY3B1X2hhc19kc3AJCQkwCisjZGVmaW5lIGNwdV9oYXNfbWlwc210CQkJMAorI2RlZmluZSBjcHVfaGFzX3VzZXJsb2NhbAkJMAorI2RlZmluZSBjcHVfaGFzX25vZnB1ZXgJCQkwCisjZGVmaW5lIGNwdV9oYXNfNjRiaXRzCQkJMAorI2RlZmluZSBjcHVfaGFzXzY0Yml0X3plcm9fcmVnCQkwCisjZGVmaW5lIGNwdV9oYXNfdmludAkJCTAKKyNkZWZpbmUgY3B1X2hhc192ZWljCQkJMAorI2RlZmluZSBjcHVfaGFzX2luY2x1c2l2ZV9wY2FjaGVzCTAKKworI2RlZmluZSBjcHVfZGNhY2hlX2xpbmVfc2l6ZSgpCQkzMgorI2RlZmluZSBjcHVfaWNhY2hlX2xpbmVfc2l6ZSgpCQkzMgorCisjZW5kaWYgLyogX19BU01fTUFDSF9BVTFYMDBfQ1BVX0ZFQVRVUkVfT1ZFUlJJREVTX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWFjaC1hdTF4MDAvZ3Bpby5oCmluZGV4IDJkYzYxZTAuLjM0ZDliNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9tYWNoLWF1MXgwMC9ncGlvLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21hY2gtYXUxeDAwL2dwaW8uaApAQCAtNSw2NSArNSwyOSBAQAogCiAjZGVmaW5lIEFVMVhYWF9HUElPX0JBU0UJMjAwCiAKLXN0cnVjdCBhdTF4MDBfZ3BpbzIgewotCXUzMglkaXI7Ci0JdTMyCXJlc2VydmVkOwotCXUzMglvdXRwdXQ7Ci0JdTMyCXBpbnN0YXRlOwotCXUzMglpbnRlbjsKLQl1MzIJZW5hYmxlOwotfTsKKy8qIEdQSU8gYmFuayAxIG9mZnNldHMgKi8KKyNkZWZpbmUgQVUxMDAwX0dQSU8xX1RSSV9PVVQJMHgwMTAwCisjZGVmaW5lIEFVMTAwMF9HUElPMV9PVVQJMHgwMTA4CisjZGVmaW5lIEFVMTAwMF9HUElPMV9TVAkJMHgwMTEwCisjZGVmaW5lIEFVMTAwMF9HUElPMV9DTFIJMHgwMTBDCiAKLWV4dGVybiBpbnQgYXUxeHh4X2dwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pOwotZXh0ZXJuIHZvaWQgYXUxeHh4X2dwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSk7Ci1leHRlcm4gaW50IGF1MXh4eF9ncGlvX2RpcmVjdGlvbl9pbnB1dCh1bnNpZ25lZCBncGlvKTsKLWV4dGVybiBpbnQgYXUxeHh4X2dwaW9fZGlyZWN0aW9uX291dHB1dCh1bnNpZ25lZCBncGlvLCBpbnQgdmFsdWUpOworLyogR1BJTyBiYW5rIDIgb2Zmc2V0cyAqLworI2RlZmluZSBBVTEwMDBfR1BJTzJfRElSCTB4MDAKKyNkZWZpbmUgQVUxMDAwX0dQSU8yX1JTVkQJMHgwNAorI2RlZmluZSBBVTEwMDBfR1BJTzJfT1VUCTB4MDgKKyNkZWZpbmUgQVUxMDAwX0dQSU8yX1NUCQkweDBDCisjZGVmaW5lIEFVMTAwMF9HUElPMl9JTlQJMHgxMAorI2RlZmluZSBBVTEwMDBfR1BJTzJfRU4JCTB4MTQKIAorI2RlZmluZSBHUElPMl9PVVRfRU5fTUFTSwkweDAwMDEwMDAwCiAKLS8qIFdyYXBwZXJzIGZvciB0aGUgYXJjaC1uZXV0cmFsIEdQSU8gQVBJICovCisjZGVmaW5lIGdwaW9fdG9faXJxKGdwaW8pCU5VTEwKIAotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19yZXF1ZXN0KHVuc2lnbmVkIGdwaW8sIGNvbnN0IGNoYXIgKmxhYmVsKQotewotCS8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KLQlyZXR1cm4gMDsKLX0KKyNkZWZpbmUgZ3Bpb19nZXRfdmFsdWUgX19ncGlvX2dldF92YWx1ZQorI2RlZmluZSBncGlvX3NldF92YWx1ZSBfX2dwaW9fc2V0X3ZhbHVlCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBncGlvX2ZyZWUodW5zaWduZWQgZ3BpbykKLXsKLQkvKiBOb3QgeWV0IGltcGxlbWVudGVkICovCi19CisjZGVmaW5lIGdwaW9fY2Fuc2xlZXAgX19ncGlvX2NhbnNsZWVwCiAKLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fZGlyZWN0aW9uX2lucHV0KHVuc2lnbmVkIGdwaW8pCi17Ci0JcmV0dXJuIGF1MXh4eF9ncGlvX2RpcmVjdGlvbl9pbnB1dChncGlvKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKLXsKLQlyZXR1cm4gYXUxeHh4X2dwaW9fZGlyZWN0aW9uX291dHB1dChncGlvLCB2YWx1ZSk7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGdwaW9fZ2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8pCi17Ci0JcmV0dXJuIGF1MXh4eF9ncGlvX2dldF92YWx1ZShncGlvKTsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGdwaW9fc2V0X3ZhbHVlKHVuc2lnbmVkIGdwaW8sIGludCB2YWx1ZSkKLXsKLQlhdTF4eHhfZ3Bpb19zZXRfdmFsdWUoZ3BpbywgdmFsdWUpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBncGlvX3RvX2lycSh1bnNpZ25lZCBncGlvKQotewotCXJldHVybiBncGlvOwotfQotCi1zdGF0aWMgaW5saW5lIGludCBpcnFfdG9fZ3Bpbyh1bnNpZ25lZCBpcnEpCi17Ci0JcmV0dXJuIGlycTsKLX0KLQotLyogRm9yIGNhbnNsZWVwICovCiAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvZ3Bpby5oPgogCiAjZW5kaWYgLyogX0FVMVhYWF9HUElPX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWlwcy1ib2FyZHMvZ2VuZXJpYy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL21pcHMtYm9hcmRzL2dlbmVyaWMuaAppbmRleCA3ZjBiMDM0Li5jMGRhMWE4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vbWlwcy1ib2FyZHMvZ2VuZXJpYy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9taXBzLWJvYXJkcy9nZW5lcmljLmgKQEAgLTcxLDggKzcxLDYgQEAKIAogI2RlZmluZSBNSVBTX1JFVklTSU9OX0NPUklEICgoKCoodm9sYXRpbGUgdTMyICopaW9yZW1hcChNSVBTX1JFVklTSU9OX1JFRywgNCkpID4+IDEwKSAmIDB4M2YpCiAKLWV4dGVybiBpbnQgbWlwc19yZXZpc2lvbl9jb3JpZDsKLQogI2RlZmluZSBNSVBTX1JFVklTSU9OX1NDT05fT1RIRVIJICAgMAogI2RlZmluZSBNSVBTX1JFVklTSU9OX1NDT05fU09DSVRTQwkgICAxCiAjZGVmaW5lIE1JUFNfUkVWSVNJT05fU0NPTl9TT0NJVFNDUAkgICAyCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vc21wLW9wcy5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NtcC1vcHMuaAppbmRleCA0M2MyMDdlNy4uNjRmZmMwMiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NtcC1vcHMuaAorKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vc21wLW9wcy5oCkBAIC0xNSw2ICsxNSw4IEBACiAKICNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CiAKK3N0cnVjdCB0YXNrX3N0cnVjdDsKKwogc3RydWN0IHBsYXRfc21wX29wcyB7CiAJdm9pZCAoKnNlbmRfaXBpX3NpbmdsZSkoaW50IGNwdSwgdW5zaWduZWQgaW50IGFjdGlvbik7CiAJdm9pZCAoKnNlbmRfaXBpX21hc2spKGNwdW1hc2tfdCBtYXNrLCB1bnNpZ25lZCBpbnQgYWN0aW9uKTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9zcGlubG9jay5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKaW5kZXggMDg4NDk0Ny4uMTBlODI0NCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKKysrIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3NwaW5sb2NrLmgKQEAgLTc2LDcgKzc2LDcgQEAKIAkJIjI6CQkJCQkJCVxuIgogCQkiCS5zdWJzZWN0aW9uIDIJCQkJCVxuIgogCQkiNDoJYW5kaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgxZmZmCQlcbiIKLQkJIjU6CXNsbAklW3RpY2tldF0sIDUJCQkJXG4iCisJCSIJc2xsCSVbdGlja2V0XSwgNQkJCQlcbiIKIAkJIgkJCQkJCQlcbiIKIAkJIjY6CWJuZXoJJVt0aWNrZXRdLCA2YgkJCQlcbiIKIAkJIgkgc3VidQklW3RpY2tldF0sIDEJCQkJXG4iCkBAIC04NSw3ICs4NSw3IEBACiAJCSIJYW5kaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgxZmZmCQlcbiIKIAkJIgliZXEJJVt0aWNrZXRdLCAlW215X3RpY2tldF0sIDJiCQlcbiIKIAkJIgkgc3VidQklW3RpY2tldF0sICVbbXlfdGlja2V0XSwgJVt0aWNrZXRdCVxuIgotCQkiCWIJNWIJCQkJCVxuIgorCQkiCWIJNGIJCQkJCVxuIgogCQkiCSBzdWJ1CSVbdGlja2V0XSwgJVt0aWNrZXRdLCAxCQkJXG4iCiAJCSIJLnByZXZpb3VzCQkJCQlcbiIKIAkJIgkuc2V0IHBvcAkJCQkJXG4iCkBAIC0xMTMsNyArMTEzLDcgQEAKIAkJIgkgbGwJJVt0aWNrZXRdLCAlW3RpY2tldF9wdHJdCQlcbiIKIAkJIgkJCQkJCQlcbiIKIAkJIjQ6CWFuZGkJJVt0aWNrZXRdLCAlW3RpY2tldF0sIDB4MWZmZgkJXG4iCi0JCSI1OglzbGwJJVt0aWNrZXRdLCA1CQkJCVxuIgorCQkiCXNsbAklW3RpY2tldF0sIDUJCQkJXG4iCiAJCSIJCQkJCQkJXG4iCiAJCSI2OglibmV6CSVbdGlja2V0XSwgNmIJCQkJXG4iCiAJCSIJIHN1YnUJJVt0aWNrZXRdLCAxCQkJCVxuIgpAQCAtMTIyLDcgKzEyMiw3IEBACiAJCSIJYW5kaQklW3RpY2tldF0sICVbdGlja2V0XSwgMHgxZmZmCQlcbiIKIAkJIgliZXEJJVt0aWNrZXRdLCAlW215X3RpY2tldF0sIDJiCQlcbiIKIAkJIgkgc3VidQklW3RpY2tldF0sICVbbXlfdGlja2V0XSwgJVt0aWNrZXRdCVxuIgotCQkiCWIJNWIJCQkJCVxuIgorCQkiCWIJNGIJCQkJCVxuIgogCQkiCSBzdWJ1CSVbdGlja2V0XSwgJVt0aWNrZXRdLCAxCQkJXG4iCiAJCSIJLnByZXZpb3VzCQkJCQlcbiIKIAkJIgkuc2V0IHBvcAkJCQkJXG4iCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vdHlwZXMuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90eXBlcy5oCmluZGV4IGJjYmI4ZDYuLjc5NTZlNjkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90eXBlcy5oCisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS90eXBlcy5oCkBAIC00LDEyICs0LDE4IEBACiAgKiBmb3IgbW9yZSBkZXRhaWxzLgogICoKICAqIENvcHlyaWdodCAoQykgMTk5NCwgMTk5NSwgMTk5NiwgMTk5OSBieSBSYWxmIEJhZWNobGUKKyAqIENvcHlyaWdodCAoQykgMjAwOCBXaW5kIFJpdmVyIFN5c3RlbXMsCisgKiAgIHdyaXR0ZW4gYnkgUmFsZiBCYWVjaGxlCiAgKiBDb3B5cmlnaHQgKEMpIDE5OTkgU2lsaWNvbiBHcmFwaGljcywgSW5jLgogICovCiAjaWZuZGVmIF9BU01fVFlQRVNfSAogI2RlZmluZSBfQVNNX1RZUEVTX0gKIAotI2lmIF9NSVBTX1NaTE9ORyA9PSA2NAorLyoKKyAqIFdlIGRvbid0IHVzZSBpbnQtbDY0LmggZm9yIHRoZSBrZXJuZWwgYW55bW9yZSBidXQgc3RpbGwgdXNlIGl0IGZvcgorICogdXNlcnNwYWNlIHRvIGF2b2lkIGNvZGUgY2hhbmdlcy4KKyAqLworI2lmIChfTUlQU19TWkxPTkcgPT0gNjQpICYmICFkZWZpbmVkKF9fS0VSTkVMX18pCiAjIGluY2x1ZGUgPGFzbS1nZW5lcmljL2ludC1sNjQuaD4KICNlbHNlCiAjIGluY2x1ZGUgPGFzbS1nZW5lcmljL2ludC1sbDY0Lmg+CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvamF6ei9qYXp6ZG1hLmMgYi9hcmNoL21pcHMvamF6ei9qYXp6ZG1hLmMKaW5kZXggYzY3MmMwOC4uZjBmZDYzNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2phenovamF6emRtYS5jCisrKyBiL2FyY2gvbWlwcy9qYXp6L2phenpkbWEuYwpAQCAtNjgsOCArNjgsNyBAQAogCSAqLwogCXBndGJsID0gKFZETUFfUEdUQkxfRU5UUlkgKilfX2dldF9mcmVlX3BhZ2VzKEdGUF9LRVJORUwgfCBHRlBfRE1BLAogCQkJCQkJICAgIGdldF9vcmRlcihWRE1BX1BHVEJMX1NJWkUpKTsKLQlpZiAoIXBndGJsKQotCQlCVUcoKTsKKwlCVUdfT04oIXBndGJsKTsKIAlkbWFfY2FjaGVfd2JhY2tfaW52KCh1bnNpZ25lZCBsb25nKXBndGJsLCBWRE1BX1BHVEJMX1NJWkUpOwogCXBndGJsID0gKFZETUFfUEdUQkxfRU5UUlkgKilLU0VHMUFERFIocGd0YmwpOwogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jIGIvYXJjaC9taXBzL2tlcm5lbC9jcHUtcHJvYmUuYwppbmRleCAxYmRiY2FkLi5iMTNiOGViIDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL2NwdS1wcm9iZS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvY3B1LXByb2JlLmMKQEAgLTE4MywxMyArMTgzLDcgQEAKIAljYXNlIENQVV9UWDQ5WFg6CiAJCWNwdV93YWl0ID0gcjRrX3dhaXRfaXJxb2ZmOwogCQlicmVhazsKLQljYXNlIENQVV9BVTEwMDA6Ci0JY2FzZSBDUFVfQVUxMTAwOgotCWNhc2UgQ1BVX0FVMTUwMDoKLQljYXNlIENQVV9BVTE1NTA6Ci0JY2FzZSBDUFVfQVUxMjAwOgotCWNhc2UgQ1BVX0FVMTIxMDoKLQljYXNlIENQVV9BVTEyNTA6CisJY2FzZSBDUFVfQUxDSEVNWToKIAkJY3B1X3dhaXQgPSBhdTFrX3dhaXQ7CiAJCWJyZWFrOwogCWNhc2UgQ1BVXzIwS0M6CkBAIC03ODMsMzcgKzc3NywzMCBAQAogCXN3aXRjaCAoYy0+cHJvY2Vzc29yX2lkICYgMHhmZjAwKSB7CiAJY2FzZSBQUklEX0lNUF9BVTFfUkVWMToKIAljYXNlIFBSSURfSU1QX0FVMV9SRVYyOgorCQljLT5jcHV0eXBlID0gQ1BVX0FMQ0hFTVk7CiAJCXN3aXRjaCAoKGMtPnByb2Nlc3Nvcl9pZCA+PiAyNCkgJiAweGZmKSB7CiAJCWNhc2UgMDoKLQkJCWMtPmNwdXR5cGUgPSBDUFVfQVUxMDAwOwogCQkJX19jcHVfbmFtZVtjcHVdID0gIkF1MTAwMCI7CiAJCQlicmVhazsKIAkJY2FzZSAxOgotCQkJYy0+Y3B1dHlwZSA9IENQVV9BVTE1MDA7CiAJCQlfX2NwdV9uYW1lW2NwdV0gPSAiQXUxNTAwIjsKIAkJCWJyZWFrOwogCQljYXNlIDI6Ci0JCQljLT5jcHV0eXBlID0gQ1BVX0FVMTEwMDsKIAkJCV9fY3B1X25hbWVbY3B1XSA9ICJBdTExMDAiOwogCQkJYnJlYWs7CiAJCWNhc2UgMzoKLQkJCWMtPmNwdXR5cGUgPSBDUFVfQVUxNTUwOwogCQkJX19jcHVfbmFtZVtjcHVdID0gIkF1MTU1MCI7CiAJCQlicmVhazsKIAkJY2FzZSA0OgotCQkJYy0+Y3B1dHlwZSA9IENQVV9BVTEyMDA7CiAJCQlfX2NwdV9uYW1lW2NwdV0gPSAiQXUxMjAwIjsKLQkJCWlmICgoYy0+cHJvY2Vzc29yX2lkICYgMHhmZikgPT0gMikgewotCQkJCWMtPmNwdXR5cGUgPSBDUFVfQVUxMjUwOworCQkJaWYgKChjLT5wcm9jZXNzb3JfaWQgJiAweGZmKSA9PSAyKQogCQkJCV9fY3B1X25hbWVbY3B1XSA9ICJBdTEyNTAiOwotCQkJfQogCQkJYnJlYWs7CiAJCWNhc2UgNToKLQkJCWMtPmNwdXR5cGUgPSBDUFVfQVUxMjEwOwogCQkJX19jcHVfbmFtZVtjcHVdID0gIkF1MTIxMCI7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCXBhbmljKCJVbmtub3duIEF1IENvcmUhIik7CisJCQlfX2NwdV9uYW1lW2NwdV0gPSAiQXUxeHh4IjsKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9pcnEtbXNjMDEuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxLW1zYzAxLmMKaW5kZXggOTYzYzE2ZC4uNmE4Y2QyOCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9pcnEtbXNjMDEuYworKysgYi9hcmNoL21pcHMva2VybmVsL2lycS1tc2MwMS5jCkBAIC0xNDAsMTQgKzE0MCwxNiBAQAogCiAJCXN3aXRjaCAoaW1wLT5pbV90eXBlKSB7CiAJCWNhc2UgTVNDMDFfSVJRX0VER0U6Ci0JCQlzZXRfaXJxX2NoaXAoaXJxYmFzZStuLCAmbXNjX2VkZ2VpcnFfdHlwZSk7CisJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnFiYXNlICsgbiwKKwkJCQkmbXNjX2VkZ2VpcnFfdHlwZSwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwogCQkJaWYgKGNwdV9oYXNfdmVpYykKIAkJCQlNU0NJQ19XUklURShNU0MwMV9JQ19TVVArbio4LCBNU0MwMV9JQ19TVVBfRURHRV9CSVQpOwogCQkJZWxzZQogCQkJCU1TQ0lDX1dSSVRFKE1TQzAxX0lDX1NVUCtuKjgsIE1TQzAxX0lDX1NVUF9FREdFX0JJVCB8IGltcC0+aW1fbHZsKTsKIAkJCWJyZWFrOwogCQljYXNlIE1TQzAxX0lSUV9MRVZFTDoKLQkJCXNldF9pcnFfY2hpcChpcnFiYXNlK24sICZtc2NfbGV2ZWxpcnFfdHlwZSk7CisJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnFiYXNlK24sCisJCQkJJm1zY19sZXZlbGlycV90eXBlLCBoYW5kbGVfbGV2ZWxfaXJxLCAibGV2ZWwiKTsKIAkJCWlmIChjcHVfaGFzX3ZlaWMpCiAJCQkJTVNDSUNfV1JJVEUoTVNDMDFfSUNfU1VQK24qOCwgMCk7CiAJCQllbHNlCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2lycV9jcHUuYyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxX2NwdS5jCmluZGV4IDBlZTI1NjcuLjU1YzhhM2MgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvaXJxX2NwdS5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvaXJxX2NwdS5jCkBAIC0xMTIsNyArMTEyLDggQEAKIAkgKi8KIAlpZiAoY3B1X2hhc19taXBzbXQpCiAJCWZvciAoaSA9IGlycV9iYXNlOyBpIDwgaXJxX2Jhc2UgKyAyOyBpKyspCi0JCQlzZXRfaXJxX2NoaXAoaSwgJm1pcHNfbXRfY3B1X2lycV9jb250cm9sbGVyKTsKKwkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmbWlwc19tdF9jcHVfaXJxX2NvbnRyb2xsZXIsCisJCQkJCQkgaGFuZGxlX3BlcmNwdV9pcnEpOwogCiAJZm9yIChpID0gaXJxX2Jhc2UgKyAyOyBpIDwgaXJxX2Jhc2UgKyA4OyBpKyspCiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmbWlwc19jcHVfaXJxX2NvbnRyb2xsZXIsCmRpZmYgLS1naXQgYS9hcmNoL21pcHMva2VybmVsL2xpbnV4MzIuYyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCmluZGV4IDJhNDcyNzEuLjYyNDJiYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCisrKyBiL2FyY2gvbWlwcy9rZXJuZWwvbGludXgzMi5jCkBAIC0xMzMsOSArMTMzLDkgQEAKIAlyZXR1cm4gc3lzX2Z0cnVuY2F0ZShmZCwgbWVyZ2VfNjQoYTIsIGEzKSk7CiB9CiAKLVNZU0NBTExfREVGSU5FNSgzMl9sbHNlZWssIHVuc2lnbmVkIGxvbmcsIGZkLCB1bnNpZ25lZCBsb25nLCBvZmZzZXRfaGlnaCwKLQl1bnNpZ25lZCBsb25nLCBvZmZzZXRfbG93LCBsb2ZmX3QgX191c2VyICosIHJlc3VsdCwKLQl1bnNpZ25lZCBsb25nLCBvcmlnaW4pCitTWVNDQUxMX0RFRklORTUoMzJfbGxzZWVrLCB1bnNpZ25lZCBpbnQsIGZkLCB1bnNpZ25lZCBpbnQsIG9mZnNldF9oaWdoLAorCQl1bnNpZ25lZCBpbnQsIG9mZnNldF9sb3csIGxvZmZfdCBfX3VzZXIgKiwgcmVzdWx0LAorCQl1bnNpZ25lZCBpbnQsIG9yaWdpbikKIHsKIAlyZXR1cm4gc3lzX2xsc2VlayhmZCwgb2Zmc2V0X2hpZ2gsIG9mZnNldF9sb3csIHJlc3VsdCwgb3JpZ2luKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc2V0dXAuYwppbmRleCA0NDMwYTFmLi4yOTUwYjk3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3NldHVwLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC9zZXR1cC5jCkBAIC0yNzcsNyArMjc3LDggQEAKIAkgKiBub3Qgc2VsZWN0ZWQuIE9uY2UgdGhhdCBkb25lIHdlIGNhbiBkZXRlcm1pbmUgdGhlIGxvdyBib3VuZAogCSAqIG9mIHVzYWJsZSBtZW1vcnkuCiAJICovCi0JcmVzZXJ2ZWRfZW5kID0gbWF4KGluaXRfaW5pdHJkKCksIFBGTl9VUChfX3BhX3N5bWJvbCgmX2VuZCkpKTsKKwlyZXNlcnZlZF9lbmQgPSBtYXgoaW5pdF9pbml0cmQoKSwKKwkJCSAgICh1bnNpZ25lZCBsb25nKSBQRk5fVVAoX19wYV9zeW1ib2woJl9lbmQpKSk7CiAKIAkvKgogCSAqIG1heF9sb3dfcGZuIGlzIG5vdCBhIG51bWJlciBvZiBwYWdlcy4gVGhlIG51bWJlciBvZiBwYWdlcwpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zbXAtdXAuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc21wLXVwLmMKaW5kZXggZWFkNmMzMC4uODc4ZTM3MyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zbXAtdXAuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NtcC11cC5jCkBAIC0xMyw3ICsxMyw3IEBACiAvKgogICogU2VuZCBpbnRlci1wcm9jZXNzb3IgaW50ZXJydXB0CiAgKi8KLXZvaWQgdXBfc2VuZF9pcGlfc2luZ2xlKGludCBjcHUsIHVuc2lnbmVkIGludCBhY3Rpb24pCitzdGF0aWMgdm9pZCB1cF9zZW5kX2lwaV9zaW5nbGUoaW50IGNwdSwgdW5zaWduZWQgaW50IGFjdGlvbikKIHsKIAlwYW5pYyhLRVJOX0VSUiAiJXMgY2FsbGVkIiwgX19mdW5jX18pOwogfQpAQCAtMjcsMzEgKzI3LDMxIEBACiAgKiAgQWZ0ZXIgd2UndmUgZG9uZSBpbml0aWFsIGJvb3QsIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGFsbG93IHRoZQogICogIGJvYXJkIGNvZGUgdG8gY2xlYW4gdXAgc3RhdGUsIGlmIG5lZWRlZAogICovCi12b2lkIF9fY3B1aW5pdCB1cF9pbml0X3NlY29uZGFyeSh2b2lkKQorc3RhdGljIHZvaWQgX19jcHVpbml0IHVwX2luaXRfc2Vjb25kYXJ5KHZvaWQpCiB7CiB9CiAKLXZvaWQgX19jcHVpbml0IHVwX3NtcF9maW5pc2godm9pZCkKK3N0YXRpYyB2b2lkIF9fY3B1aW5pdCB1cF9zbXBfZmluaXNoKHZvaWQpCiB7CiB9CiAKIC8qIEhvb2sgZm9yIGFmdGVyIGFsbCBDUFVzIGFyZSBvbmxpbmUgKi8KLXZvaWQgdXBfY3B1c19kb25lKHZvaWQpCitzdGF0aWMgdm9pZCB1cF9jcHVzX2RvbmUodm9pZCkKIHsKIH0KIAogLyoKICAqIEZpcm13YXJlIENQVSBzdGFydHVwIGhvb2sKICAqLwotdm9pZCBfX2NwdWluaXQgdXBfYm9vdF9zZWNvbmRhcnkoaW50IGNwdSwgc3RydWN0IHRhc2tfc3RydWN0ICppZGxlKQorc3RhdGljIHZvaWQgX19jcHVpbml0IHVwX2Jvb3Rfc2Vjb25kYXJ5KGludCBjcHUsIHN0cnVjdCB0YXNrX3N0cnVjdCAqaWRsZSkKIHsKIH0KIAotdm9pZCBfX2luaXQgdXBfc21wX3NldHVwKHZvaWQpCitzdGF0aWMgdm9pZCBfX2luaXQgdXBfc21wX3NldHVwKHZvaWQpCiB7CiB9CiAKLXZvaWQgX19pbml0IHVwX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2NwdXMpCitzdGF0aWMgdm9pZCBfX2luaXQgdXBfcHJlcGFyZV9jcHVzKHVuc2lnbmVkIGludCBtYXhfY3B1cykKIHsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2tlcm5lbC9zbXAuYyBiL2FyY2gvbWlwcy9rZXJuZWwvc21wLmMKaW5kZXggM2RhOTQ3MC4uYzkzNzUwNiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL2tlcm5lbC9zbXAuYworKysgYi9hcmNoL21pcHMva2VybmVsL3NtcC5jCkBAIC00NCw3ICs0NCw3IEBACiAjaW5jbHVkZSA8YXNtL21pcHNtdHJlZ3MuaD4KICNlbmRpZiAvKiBDT05GSUdfTUlQU19NVF9TTVRDICovCiAKLXZvbGF0aWxlIGNwdW1hc2tfdCBjcHVfY2FsbGluX21hcDsJLyogQml0bWFzayBvZiBzdGFydGVkIHNlY29uZGFyaWVzICovCitzdGF0aWMgdm9sYXRpbGUgY3B1bWFza190IGNwdV9jYWxsaW5fbWFwOwkvKiBCaXRtYXNrIG9mIHN0YXJ0ZWQgc2Vjb25kYXJpZXMgKi8KIGludCBfX2NwdV9udW1iZXJfbWFwW05SX0NQVVNdOwkJLyogTWFwIHBoeXNpY2FsIHRvIGxvZ2ljYWwgKi8KIGludCBfX2NwdV9sb2dpY2FsX21hcFtOUl9DUFVTXTsJCS8qIE1hcCBsb2dpY2FsIHRvIHBoeXNpY2FsICovCiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYyBiL2FyY2gvbWlwcy9rZXJuZWwvdHJhcHMuYwppbmRleCAyOWZhZGFjLi5lODNkYTE3IDEwMDY0NAotLS0gYS9hcmNoL21pcHMva2VybmVsL3RyYXBzLmMKKysrIGIvYXJjaC9taXBzL2tlcm5lbC90cmFwcy5jCkBAIC0xMjc3LDggKzEyNzcsNyBAQAogCXUzMiAqdzsKIAl1bnNpZ25lZCBjaGFyICpiOwogCi0JaWYgKCFjcHVfaGFzX3ZlaWMgJiYgIWNwdV9oYXNfdmludCkKLQkJQlVHKCk7CisJQlVHX09OKCFjcHVfaGFzX3ZlaWMgJiYgIWNwdV9oYXNfdmludCk7CiAKIAlpZiAoYWRkciA9PSBOVUxMKSB7CiAJCWhhbmRsZXIgPSAodW5zaWduZWQgbG9uZykgZG9fZGVmYXVsdF92aTsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS9jLXI0ay5jIGIvYXJjaC9taXBzL21tL2MtcjRrLmMKaW5kZXggODcxZTgyOC4uNThkOTA3NSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2MtcjRrLmMKKysrIGIvYXJjaC9taXBzL21tL2MtcjRrLmMKQEAgLTEwMjYsMTMgKzEwMjYsNyBAQAogCQljLT5pY2FjaGUuZmxhZ3MgfD0gTUlQU19DQUNIRV9WVEFHOwogCQlicmVhazsKIAotCWNhc2UgQ1BVX0FVMTAwMDoKLQljYXNlIENQVV9BVTE1MDA6Ci0JY2FzZSBDUFVfQVUxMTAwOgotCWNhc2UgQ1BVX0FVMTU1MDoKLQljYXNlIENQVV9BVTEyMDA6Ci0JY2FzZSBDUFVfQVUxMjEwOgotCWNhc2UgQ1BVX0FVMTI1MDoKKwljYXNlIENQVV9BTENIRU1ZOgogCQljLT5pY2FjaGUuZmxhZ3MgfD0gTUlQU19DQUNIRV9JQ19GX0RDOwogCQlicmVhazsKIAl9CkBAIC0xMjQ0LDcgKzEyMzgsNyBAQAogCS8qCiAJICogQXUxMTAwIGVycmF0YSBhY3R1YWxseSBrZWVwcyBzaWxlbmNlIGFib3V0IHRoaXMgYml0LCBzbyB3ZSBzZXQgaXQKIAkgKiBqdXN0IGluIGNhc2UgZm9yIHRob3NlIHJldmlzaW9ucyB0aGF0IHJlcXVpcmUgaXQgdG8gYmUgc2V0IGFjY29yZGluZwotCSAqIHRvIGFyY2gvbWlwcy9hdTEwMDAvY29tbW9uL2NwdXRhYmxlLmMKKwkgKiB0byB0aGUgKG5vdyBnb25lKSBjcHUgdGFibGUuCiAJICovCiAJY2FzZSAweDAyMDMwMjAwOiAvKiBBdTExMDAgQUIgKi8KIAljYXNlIDB4MDIwMzAyMDE6IC8qIEF1MTEwMCBCQSAqLwpAQCAtMTMxNCwxMSArMTMwOCwxMCBAQAogCQlicmVhazsKIAkvKgogCSAqIFdlIG5lZWQgdG8gY2F0Y2ggdGhlIGVhcmx5IEFsY2hlbXkgU09DcyB3aXRoCi0JICogdGhlIHdyaXRlLW9ubHkgY29fY29uZmlnLm9kIGJpdCBhbmQgc2V0IGl0IGJhY2sgdG8gb25lLi4uCisJICogdGhlIHdyaXRlLW9ubHkgY29fY29uZmlnLm9kIGJpdCBhbmQgc2V0IGl0IGJhY2sgdG8gb25lIG9uOgorCSAqIEF1MTAwMCByZXYgREEsIEhBLCBIQjsgIEF1MTEwMCBBQiwgQkEsIEJDLCBBdTE1MDAgQUIKIAkgKi8KLQljYXNlIENQVV9BVTEwMDA6IC8qIHJldi4gREEsIEhBLCBIQiAqLwotCWNhc2UgQ1BVX0FVMTEwMDogLyogcmV2LiBBQiwgQkEsIEJDID8/ICovCi0JY2FzZSBDUFVfQVUxNTAwOiAvKiByZXYuIEFCICovCisJY2FzZSBDUFVfQUxDSEVNWToKIAkJYXUxeDAwX2ZpeHVwX2NvbmZpZ19vZCgpOwogCQlicmVhazsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL21tL2hpZ2htZW0uYyBiL2FyY2gvbWlwcy9tbS9oaWdobWVtLmMKaW5kZXggOGYyY2Q4ZS4uMDYwZDI4ZCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL2hpZ2htZW0uYworKysgYi9hcmNoL21pcHMvbW0vaGlnaG1lbS5jCkBAIC0xNyw4ICsxNyw3IEBACiAKIHZvaWQgX19rdW5tYXAoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7Ci0JaWYgKGluX2ludGVycnVwdCgpKQotCQlCVUcoKTsKKwlCVUdfT04oaW5faW50ZXJydXB0KCkpOwogCWlmICghUGFnZUhpZ2hNZW0ocGFnZSkpCiAJCXJldHVybjsKIAlrdW5tYXBfaGlnaChwYWdlKTsKQEAgLTQ2LDggKzQ1LDcgQEAKIAlpZHggPSB0eXBlICsgS01fVFlQRV9OUipzbXBfcHJvY2Vzc29yX2lkKCk7CiAJdmFkZHIgPSBfX2ZpeF90b192aXJ0KEZJWF9LTUFQX0JFR0lOICsgaWR4KTsKICNpZmRlZiBDT05GSUdfREVCVUdfSElHSE1FTQotCWlmICghcHRlX25vbmUoKihrbWFwX3B0ZS1pZHgpKSkKLQkJQlVHKCk7CisJQlVHX09OKCFwdGVfbm9uZSgqKGttYXBfcHRlIC0gaWR4KSkpOwogI2VuZGlmCiAJc2V0X3B0ZShrbWFwX3B0ZS1pZHgsIG1rX3B0ZShwYWdlLCBrbWFwX3Byb3QpKTsKIAlsb2NhbF9mbHVzaF90bGJfb25lKCh1bnNpZ25lZCBsb25nKXZhZGRyKTsKQEAgLTY2LDggKzY0LDcgQEAKIAkJcmV0dXJuOwogCX0KIAotCWlmICh2YWRkciAhPSBfX2ZpeF90b192aXJ0KEZJWF9LTUFQX0JFR0lOK2lkeCkpCi0JCUJVRygpOworCUJVR19PTih2YWRkciAhPSBfX2ZpeF90b192aXJ0KEZJWF9LTUFQX0JFR0lOICsgaWR4KSk7CiAKIAkvKgogCSAqIGZvcmNlIG90aGVyIG1hcHBpbmdzIHRvIE9vcHMgaWYgdGhleSdsbCB0cnkgdG8gYWNjZXNzCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vaW5pdC5jIGIvYXJjaC9taXBzL21tL2luaXQuYwppbmRleCAxMzdjMTRiLi5kOTM0ODk0IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vaW5pdC5jCisrKyBiL2FyY2gvbWlwcy9tbS9pbml0LmMKQEAgLTMwNyw4ICszMDcsNyBAQAogCQkJCWlmIChwbWRfbm9uZSgqcG1kKSkgewogCQkJCQlwdGUgPSAocHRlX3QgKikgYWxsb2NfYm9vdG1lbV9sb3dfcGFnZXMoUEFHRV9TSVpFKTsKIAkJCQkJc2V0X3BtZChwbWQsIF9fcG1kKCh1bnNpZ25lZCBsb25nKXB0ZSkpOwotCQkJCQlpZiAocHRlICE9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZCwgMCkpCi0JCQkJCQlCVUcoKTsKKwkJCQkJQlVHX09OKHB0ZSAhPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIDApKTsKIAkJCQl9CiAJCQkJdmFkZHIgKz0gUE1EX1NJWkU7CiAJCQl9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvbW0vaW9yZW1hcC5jIGIvYXJjaC9taXBzL21tL2lvcmVtYXAuYwppbmRleCA1OTk0NWI5Li4wYzQzMjQ4IDEwMDY0NAotLS0gYS9hcmNoL21pcHMvbW0vaW9yZW1hcC5jCisrKyBiL2FyY2gvbWlwcy9tbS9pb3JlbWFwLmMKQEAgLTI3LDggKzI3LDcgQEAKIAllbmQgPSBhZGRyZXNzICsgc2l6ZTsKIAlpZiAoZW5kID4gUE1EX1NJWkUpCiAJCWVuZCA9IFBNRF9TSVpFOwotCWlmIChhZGRyZXNzID49IGVuZCkKLQkJQlVHKCk7CisJQlVHX09OKGFkZHJlc3MgPj0gZW5kKTsKIAlwZm4gPSBwaHlzX2FkZHIgPj4gUEFHRV9TSElGVDsKIAlkbyB7CiAJCWlmICghcHRlX25vbmUoKnB0ZSkpIHsKQEAgLTUyLDggKzUxLDcgQEAKIAlpZiAoZW5kID4gUEdESVJfU0laRSkKIAkJZW5kID0gUEdESVJfU0laRTsKIAlwaHlzX2FkZHIgLT0gYWRkcmVzczsKLQlpZiAoYWRkcmVzcyA+PSBlbmQpCi0JCUJVRygpOworCUJVR19PTihhZGRyZXNzID49IGVuZCk7CiAJZG8gewogCQlwdGVfdCAqIHB0ZSA9IHB0ZV9hbGxvY19rZXJuZWwocG1kLCBhZGRyZXNzKTsKIAkJaWYgKCFwdGUpCkBAIC03NSw4ICs3Myw3IEBACiAJcGh5c19hZGRyIC09IGFkZHJlc3M7CiAJZGlyID0gcGdkX29mZnNldCgmaW5pdF9tbSwgYWRkcmVzcyk7CiAJZmx1c2hfY2FjaGVfYWxsKCk7Ci0JaWYgKGFkZHJlc3MgPj0gZW5kKQotCQlCVUcoKTsKKwlCVUdfT04oYWRkcmVzcyA+PSBlbmQpOwogCWRvIHsKIAkJcHVkX3QgKnB1ZDsKIAkJcG1kX3QgKnBtZDsKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tbS90bGJleC5jIGIvYXJjaC9taXBzL21tL3RsYmV4LmMKaW5kZXggZjMzNWNmNi4uMDYxNWI2MiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL21tL3RsYmV4LmMKKysrIGIvYXJjaC9taXBzL21tL3RsYmV4LmMKQEAgLTI5MiwxMyArMjkyLDYgQEAKIAljYXNlIENQVV9SNDMwMDoKIAljYXNlIENQVV81S0M6CiAJY2FzZSBDUFVfVFg0OVhYOgotCWNhc2UgQ1BVX0FVMTAwMDoKLQljYXNlIENQVV9BVTExMDA6Ci0JY2FzZSBDUFVfQVUxNTAwOgotCWNhc2UgQ1BVX0FVMTU1MDoKLQljYXNlIENQVV9BVTEyMDA6Ci0JY2FzZSBDUFVfQVUxMjEwOgotCWNhc2UgQ1BVX0FVMTI1MDoKIAljYXNlIENQVV9QUjQ0NTA6CiAJCXVhc21faV9ub3AocCk7CiAJCXRsYncocCk7CkBAIC0zMjEsNiArMzE0LDcgQEAKIAljYXNlIENQVV9SNTUwMDoKIAkJaWYgKG00a2NfdGxicF93YXIoKSkKIAkJCXVhc21faV9ub3AocCk7CisJY2FzZSBDUFVfQUxDSEVNWToKIAkJdGxidyhwKTsKIAkJYnJlYWs7CiAKZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9tdGktbWFsdGEvbWFsdGEtaW5pdC5jIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbml0LmMKaW5kZXggNDgzMmFmMi4uNDc1MDM4YSAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbml0LmMKKysrIGIvYXJjaC9taXBzL210aS1tYWx0YS9tYWx0YS1pbml0LmMKQEAgLTQ4LDcgKzQ4LDcgQEAKIAogaW50IGluaXRfZGVidWcgPSAwOwogCi1pbnQgbWlwc19yZXZpc2lvbl9jb3JpZDsKK3N0YXRpYyBpbnQgbWlwc19yZXZpc2lvbl9jb3JpZDsKIGludCBtaXBzX3JldmlzaW9uX3Njb25pZDsKIAogLyogQm9uaXRvNjQgc3lzdGVtIGNvbnRyb2xsZXIgcmVnaXN0ZXIgYmFzZS4gKi8KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWJlcnIuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LWJlcnIuYwppbmRleCA3ZDA1ZTY4Li4wNGNlYmFkIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1iZXJyLmMKKysrIGIvYXJjaC9taXBzL3NnaS1pcDI3L2lwMjctYmVyci5jCkBAIC02Niw3ICs2Niw3IEBACiAJcHJpbnRrKCJTbGljZSAlYyBnb3QgJWNiZSBhdCAweCVseFxuIiwgJ0EnICsgY3B1LCBkYXRhID8gJ2QnIDogJ2knLAogCSAgICAgICByZWdzLT5jcDBfZXBjKTsKIAlwcmludGsoIkh1YiBpbmZvcm1hdGlvbjpcbiIpOwotCXByaW50aygiRVJSX0lOVF9QRU5EID0gMHglMDZseFxuIiwgTE9DQUxfSFVCX0woUElfRVJSX0lOVF9QRU5EKSk7CisJcHJpbnRrKCJFUlJfSU5UX1BFTkQgPSAweCUwNmxseFxuIiwgTE9DQUxfSFVCX0woUElfRVJSX0lOVF9QRU5EKSk7CiAJZXJyc3QwID0gTE9DQUxfSFVCX0woY3B1ID8gUElfRVJSX1NUQVRVUzBfQiA6IFBJX0VSUl9TVEFUVVMwX0EpOwogCWVycnN0MSA9IExPQ0FMX0hVQl9MKGNwdSA/IFBJX0VSUl9TVEFUVVMxX0IgOiBQSV9FUlJfU1RBVFVTMV9BKTsKIAlkdW1wX2h1Yl9pbmZvcm1hdGlvbihlcnJzdDAsIGVycnN0MSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMjcvaXAyNy1ubWkuYyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LW5taS5jCmluZGV4IDY0NDU5ZTcuLmExZjIxZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LW5taS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAyNy9pcDI3LW5taS5jCkBAIC0xNDMsOCArMTQzLDggQEAKIAlwZW5kMCA9IFJFTU9URV9IVUJfTChuYXNpZCwgUElfSU5UX1BFTkQwKTsKIAlwZW5kMSA9IFJFTU9URV9IVUJfTChuYXNpZCwgUElfSU5UX1BFTkQxKTsKIAotCXByaW50aygiUElfSU5UX01BU0swOiAlMTZseCBQSV9JTlRfTUFTSzE6ICUxNmx4XG4iLCBtYXNrMCwgbWFzazEpOwotCXByaW50aygiUElfSU5UX1BFTkQwOiAlMTZseCBQSV9JTlRfUEVORDE6ICUxNmx4XG4iLCBwZW5kMCwgcGVuZDEpOworCXByaW50aygiUElfSU5UX01BU0swOiAlMTZMeCBQSV9JTlRfTUFTSzE6ICUxNkx4XG4iLCBtYXNrMCwgbWFzazEpOworCXByaW50aygiUElfSU5UX1BFTkQwOiAlMTZMeCBQSV9JTlRfUEVORDE6ICUxNkx4XG4iLCBwZW5kMCwgcGVuZDEpOwogCXByaW50aygiXG5cbiIpOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1pcnEuYyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS5jCmluZGV4IDBkNmI2NjYuLjBhZWZjNTMgMTAwNjQ0Ci0tLSBhL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS5jCisrKyBiL2FyY2gvbWlwcy9zZ2ktaXAzMi9pcDMyLWlycS5jCkBAIC0zMjUsMTYgKzMyNSwxMSBAQAogewogCXVuc2lnbmVkIGxvbmcgbWFjZV9pbnQ7CiAKLQlzd2l0Y2ggKGlycSkgewotCWNhc2UgTUFDRUlTQV9QQVJBTExFTF9JUlE6Ci0JY2FzZSBNQUNFSVNBX1NFUklBTDFfVERNQVBSX0lSUToKLQljYXNlIE1BQ0VJU0FfU0VSSUFMMl9URE1BUFJfSVJROgotCQkvKiBlZGdlIHRyaWdnZXJlZCAqLwotCQltYWNlX2ludCA9IG1hY2UtPnBlcmlmLmN0cmwuaXN0YXQ7Ci0JCW1hY2VfaW50ICY9IH4oMSA8PCAoaXJxIC0gTUFDRUlTQV9BVURJT19TV19JUlEpKTsKLQkJbWFjZS0+cGVyaWYuY3RybC5pc3RhdCA9IG1hY2VfaW50OwotCQlicmVhazsKLQl9CisJLyogZWRnZSB0cmlnZ2VyZWQgKi8KKwltYWNlX2ludCA9IG1hY2UtPnBlcmlmLmN0cmwuaXN0YXQ7CisJbWFjZV9pbnQgJj0gfigxIDw8IChpcnEgLSBNQUNFSVNBX0FVRElPX1NXX0lSUSkpOworCW1hY2UtPnBlcmlmLmN0cmwuaXN0YXQgPSBtYWNlX2ludDsKKwogCWRpc2FibGVfbWFjZWlzYV9pcnEoaXJxKTsKIH0KIApAQCAtMzQ0LDcgKzMzOSwxNiBAQAogCQllbmFibGVfbWFjZWlzYV9pcnEoaXJxKTsKIH0KIAotc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpcDMyX21hY2Vpc2FfaW50ZXJydXB0ID0geworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpcDMyX21hY2Vpc2FfbGV2ZWxfaW50ZXJydXB0ID0geworCS5uYW1lCQk9ICJJUDMyIE1BQ0UgSVNBIiwKKwkuYWNrCQk9IGRpc2FibGVfbWFjZWlzYV9pcnEsCisJLm1hc2sJCT0gZGlzYWJsZV9tYWNlaXNhX2lycSwKKwkubWFza19hY2sJPSBkaXNhYmxlX21hY2Vpc2FfaXJxLAorCS51bm1hc2sJCT0gZW5hYmxlX21hY2Vpc2FfaXJxLAorCS5lbmQJCT0gZW5kX21hY2Vpc2FfaXJxLAorfTsKKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpcDMyX21hY2Vpc2FfZWRnZV9pbnRlcnJ1cHQgPSB7CiAJLm5hbWUJCT0gIklQMzIgTUFDRSBJU0EiLAogCS5hY2sJCT0gbWFza19hbmRfYWNrX21hY2Vpc2FfaXJxLAogCS5tYXNrCQk9IGRpc2FibGVfbWFjZWlzYV9pcnEsCkBAIC01MDAsMjcgKzUwNCw1MCBAQAogCWZvciAoaXJxID0gQ1JJTUVfSVJRX0JBU0U7IGlycSA8PSBJUDMyX0lSUV9NQVg7IGlycSsrKSB7CiAJCXN3aXRjaCAoaXJxKSB7CiAJCWNhc2UgTUFDRV9WSURfSU4xX0lSUSAuLi4gTUFDRV9QQ0lfQlJJREdFX0lSUToKLQkJCXNldF9pcnFfY2hpcChpcnEsICZpcDMyX21hY2VfaW50ZXJydXB0KTsKKwkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwmaXAzMl9tYWNlX2ludGVycnVwdCwKKwkJCQloYW5kbGVfbGV2ZWxfaXJxLCAibGV2ZWwiKTsKIAkJCWJyZWFrOworCiAJCWNhc2UgTUFDRVBDSV9TQ1NJMF9JUlEgLi4uICBNQUNFUENJX1NIQVJFRDJfSVJROgotCQkJc2V0X2lycV9jaGlwKGlycSwgJmlwMzJfbWFjZXBjaV9pbnRlcnJ1cHQpOworCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLAorCQkJCSZpcDMyX21hY2VwY2lfaW50ZXJydXB0LCBoYW5kbGVfbGV2ZWxfaXJxLAorCQkJCSJsZXZlbCIpOwogCQkJYnJlYWs7CisKIAkJY2FzZSBDUklNRV9HQkUwX0lSUSAuLi4gQ1JJTUVfR0JFM19JUlE6Ci0JCQlzZXRfaXJxX2NoaXAoaXJxLCAmY3JpbWVfZWRnZV9pbnRlcnJ1cHQpOworCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLAorCQkJCSZjcmltZV9lZGdlX2ludGVycnVwdCwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwogCQkJYnJlYWs7CiAJCWNhc2UgQ1JJTUVfQ1BVRVJSX0lSUToKIAkJY2FzZSBDUklNRV9NRU1FUlJfSVJROgotCQkJc2V0X2lycV9jaGlwKGlycSwgJmNyaW1lX2xldmVsX2ludGVycnVwdCk7CisJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsCisJCQkJJmNyaW1lX2xldmVsX2ludGVycnVwdCwgaGFuZGxlX2xldmVsX2lycSwKKwkJCQkibGV2ZWwiKTsKIAkJCWJyZWFrOworCiAJCWNhc2UgQ1JJTUVfUkVfRU1QVFlfRV9JUlEgLi4uIENSSU1FX1JFX0lETEVfRV9JUlE6CiAJCWNhc2UgQ1JJTUVfU09GVDBfSVJRIC4uLiBDUklNRV9TT0ZUMl9JUlE6Ci0JCQlzZXRfaXJxX2NoaXAoaXJxLCAmY3JpbWVfZWRnZV9pbnRlcnJ1cHQpOworCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLAorCQkJCSZjcmltZV9lZGdlX2ludGVycnVwdCwgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwogCQkJYnJlYWs7CisKIAkJY2FzZSBDUklNRV9WSUNFX0lSUToKLQkJCXNldF9pcnFfY2hpcChpcnEsICZjcmltZV9lZGdlX2ludGVycnVwdCk7CisJCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXJfbmFtZShpcnEsCisJCQkJJmNyaW1lX2VkZ2VfaW50ZXJydXB0LCBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7CiAJCQlicmVhazsKKworCQljYXNlIE1BQ0VJU0FfUEFSQUxMRUxfSVJROgorCQljYXNlIE1BQ0VJU0FfU0VSSUFMMV9URE1BUFJfSVJROgorCQljYXNlIE1BQ0VJU0FfU0VSSUFMMl9URE1BUFJfSVJROgorCQkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLAorCQkJCSZpcDMyX21hY2Vpc2FfZWRnZV9pbnRlcnJ1cHQsIGhhbmRsZV9lZGdlX2lycSwKKwkJCQkiZWRnZSIpOworCQkJYnJlYWs7CisKIAkJZGVmYXVsdDoKLQkJCXNldF9pcnFfY2hpcChpcnEsICZpcDMyX21hY2Vpc2FfaW50ZXJydXB0KTsKKwkJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwKKwkJCQkmaXAzMl9tYWNlaXNhX2xldmVsX2ludGVycnVwdCwgaGFuZGxlX2xldmVsX2lycSwKKwkJCQkibGV2ZWwiKTsKIAkJCWJyZWFrOwogCQl9CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL3NnaS1pcDMyL2lwMzItbWVtb3J5LmMgYi9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1tZW1vcnkuYwppbmRleCBjYTkzZWNmLi44MjhjZTEzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1tZW1vcnkuYworKysgYi9hcmNoL21pcHMvc2dpLWlwMzIvaXAzMi1tZW1vcnkuYwpAQCAtMzYsNyArMzYsNyBAQAogCQlpZiAoYmFzZSArIHNpemUgPiAoMjU2IDw8IDIwKSkKIAkJCWJhc2UgKz0gQ1JJTUVfSElfTUVNX0JBU0U7CiAKLQkJcHJpbnRrKCJDUklNRSBNQzogYmFuayAldSBiYXNlIDB4JTAxNmx4IHNpemUgJWx1TWlCXG4iLAorCQlwcmludGsoIkNSSU1FIE1DOiBiYW5rICV1IGJhc2UgMHglMDE2THggc2l6ZSAlTHVNaUJcbiIsCiAJCQliYW5rLCBiYXNlLCBzaXplID4+IDIwKTsKIAkJYWRkX21lbW9yeV9yZWdpb24oYmFzZSwgc2l6ZSwgQk9PVF9NRU1fUkFNKTsKIAl9CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMgYi9hcmNoL21pcHMvc2lieXRlL2JjbTE0ODAvaXJxLmMKaW5kZXggMTJiNDY1ZC4uMzUyMzUyYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9iY20xNDgwL2lycS5jCisrKyBiL2FyY2gvbWlwcy9zaWJ5dGUvYmNtMTQ4MC9pcnEuYwpAQCAtMjM2LDcgKzIzNiw3IEBACiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQkNNMTQ4MF9OUl9JUlFTOyBpKyspIHsKLQkJc2V0X2lycV9jaGlwKGksICZiY20xNDgwX2lycV90eXBlKTsKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZiY20xNDgwX2lycV90eXBlLCBoYW5kbGVfbGV2ZWxfaXJxKTsKIAkJYmNtMTQ4MF9pcnFfb3duZXJbaV0gPSAwOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zaWJ5dGUvc2IxMjUwL2lycS5jIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMKaW5kZXggODA4YWMyOS4uYzA4ZmY1OCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMKKysrIGIvYXJjaC9taXBzL3NpYnl0ZS9zYjEyNTAvaXJxLmMKQEAgLTIyMCw3ICsyMjAsNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IFNCMTI1MF9OUl9JUlFTOyBpKyspIHsKLQkJc2V0X2lycV9jaGlwKGksICZzYjEyNTBfaXJxX3R5cGUpOworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJnNiMTI1MF9pcnFfdHlwZSwgaGFuZGxlX2xldmVsX2lycSk7CiAJCXNiMTI1MF9pcnFfb3duZXJbaV0gPSAwOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zbmkvYTIwci5jIGIvYXJjaC9taXBzL3NuaS9hMjByLmMKaW5kZXggM2Y4Y2Y1ZS4uN2RkNzZmYiAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS9hMjByLmMKKysrIGIvYXJjaC9taXBzL3NuaS9hMjByLmMKQEAgLTIxOSw3ICsyMTksNyBAQAogCWludCBpOwogCiAJZm9yIChpID0gU05JX0EyMFJfSVJRX0JBU0UgKyAyIDsgaSA8IFNOSV9BMjBSX0lSUV9CQVNFICsgODsgaSsrKQotCQlzZXRfaXJxX2NoaXAoaSwgJmEyMHJfaXJxX3R5cGUpOworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJmEyMHJfaXJxX3R5cGUsIGhhbmRsZV9sZXZlbF9pcnEpOwogCXNuaV9od2ludCA9IGEyMHJfaHdpbnQ7CiAJY2hhbmdlX2MwX3N0YXR1cyhTVDBfSU0sIElFX0lSUTApOwogCXNldHVwX2lycShTTklfQTIwUl9JUlFfQkFTRSArIDMsICZzbmlfaXNhX2lycSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL3BjaW10LmMgYi9hcmNoL21pcHMvc25pL3BjaW10LmMKaW5kZXggODM0NjUwZi4uNzRlNmM2NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS9wY2ltdC5jCisrKyBiL2FyY2gvbWlwcy9zbmkvcGNpbXQuYwpAQCAtMzA0LDcgKzMwNCw3IEBACiAJbWlwc19jcHVfaXJxX2luaXQoKTsKIAkvKiBBY3R1YWxseSB3ZSd2ZSBnb3QgbW9yZSBpbnRlcnJ1cHRzIHRvIGhhbmRsZSAuLi4gICovCiAJZm9yIChpID0gUENJTVRfSVJRX0lOVDI7IGkgPD0gUENJTVRfSVJRX1NDU0k7IGkrKykKLQkJc2V0X2lycV9jaGlwKGksICZwY2ltdF9pcnFfdHlwZSk7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmcGNpbXRfaXJxX3R5cGUsIGhhbmRsZV9sZXZlbF9pcnEpOwogCXNuaV9od2ludCA9IHNuaV9wY2ltdF9od2ludDsKIAljaGFuZ2VfYzBfc3RhdHVzKFNUMF9JTSwgSUVfSVJRMXxJRV9JUlEzKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9zbmkvcGNpdC5jIGIvYXJjaC9taXBzL3NuaS9wY2l0LmMKaW5kZXggZTVmMTJjZi4uMDcxYTk1NyAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS9wY2l0LmMKKysrIGIvYXJjaC9taXBzL3NuaS9wY2l0LmMKQEAgLTI0Niw3ICsyNDYsNyBAQAogCiAJbWlwc19jcHVfaXJxX2luaXQoKTsKIAlmb3IgKGkgPSBTTklfUENJVF9JTlRfU1RBUlQ7IGkgPD0gU05JX1BDSVRfSU5UX0VORDsgaSsrKQotCQlzZXRfaXJxX2NoaXAoaSwgJnBjaXRfaXJxX3R5cGUpOworCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIoaSwgJnBjaXRfaXJxX3R5cGUsIGhhbmRsZV9sZXZlbF9pcnEpOwogCSoodm9sYXRpbGUgdTMyICopU05JX1BDSVRfSU5UX1JFRyA9IDA7CiAJc25pX2h3aW50ID0gc25pX3BjaXRfaHdpbnQ7CiAJY2hhbmdlX2MwX3N0YXR1cyhTVDBfSU0sIElFX0lSUTEpOwpAQCAtMjU5LDcgKzI1OSw3IEBACiAKIAltaXBzX2NwdV9pcnFfaW5pdCgpOwogCWZvciAoaSA9IFNOSV9QQ0lUX0lOVF9TVEFSVDsgaSA8PSBTTklfUENJVF9JTlRfRU5EOyBpKyspCi0JCXNldF9pcnFfY2hpcChpLCAmcGNpdF9pcnFfdHlwZSk7CisJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcihpLCAmcGNpdF9pcnFfdHlwZSwgaGFuZGxlX2xldmVsX2lycSk7CiAJKih2b2xhdGlsZSB1MzIgKilTTklfUENJVF9JTlRfUkVHID0gMHg0MDAwMDAwMDsKIAlzbmlfaHdpbnQgPSBzbmlfcGNpdF9od2ludF9jcGx1czsKIAljaGFuZ2VfYzBfc3RhdHVzKFNUMF9JTSwgSUVfSVJRMCk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvc25pL3JtMjAwLmMgYi9hcmNoL21pcHMvc25pL3JtMjAwLmMKaW5kZXggNTMxMGFhNy4uYjQzNTJhMCAxMDA2NDQKLS0tIGEvYXJjaC9taXBzL3NuaS9ybTIwMC5jCisrKyBiL2FyY2gvbWlwcy9zbmkvcm0yMDAuYwpAQCAtNDg3LDcgKzQ4Nyw3IEBACiAJbWlwc19jcHVfaXJxX2luaXQoKTsKIAkvKiBBY3R1YWxseSB3ZSd2ZSBnb3QgbW9yZSBpbnRlcnJ1cHRzIHRvIGhhbmRsZSAuLi4gICovCiAJZm9yIChpID0gU05JX1JNMjAwX0lOVF9TVEFSVDsgaSA8PSBTTklfUk0yMDBfSU5UX0VORDsgaSsrKQotCQlzZXRfaXJxX2NoaXAoaSwgJnJtMjAwX2lycV90eXBlKTsKKwkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKGksICZybTIwMF9pcnFfdHlwZSwgaGFuZGxlX2xldmVsX2lycSk7CiAJc25pX2h3aW50ID0gc25pX3JtMjAwX2h3aW50OwogCWNoYW5nZV9jMF9zdGF0dXMoU1QwX0lNLCBJRV9JUlEwKTsKIAlzZXR1cF9pcnEoU05JX1JNMjAwX0lOVF9TVEFSVCArIDAsICZzbmlfcm0yMDBfaTgyNTlBX2lycSk7CmRpZmYgLS1naXQgYS9hcmNoL21pcHMvdHh4OS9LY29uZmlnIGIvYXJjaC9taXBzL3R4eDkvS2NvbmZpZwppbmRleCAyMjZlOGJiLi4wZGI3Y2YzIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvdHh4OS9LY29uZmlnCisrKyBiL2FyY2gvbWlwcy90eHg5L0tjb25maWcKQEAgLTIwLDcgKzIwLDYgQEAKIAlzZWxlY3QgU1lTX1NVUFBPUlRTXzMyQklUX0tFUk5FTAogCXNlbGVjdCBTWVNfU1VQUE9SVFNfTElUVExFX0VORElBTgogCXNlbGVjdCBTWVNfU1VQUE9SVFNfQklHX0VORElBTgotCXNlbGVjdCBHRU5FUklDX0hBUkRJUlFTX05PX19ET19JUlEKIAogY29uZmlnIFRPU0hJQkFfSk1SMzkyNwogCWJvb2wgIlRvc2hpYmEgSk1SLVRYMzkyNyBib2FyZCIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKaW5kZXggNzRjYzMxMi4uYWQ2YjFjMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL0tjb25maWcKQEAgLTExMSw2ICsxMTEsNyBAQAogCXNlbGVjdCBIQVZFX0ZUUkFDRV9NQ09VTlRfUkVDT1JECiAJc2VsZWN0IEhBVkVfRFlOQU1JQ19GVFJBQ0UKIAlzZWxlY3QgSEFWRV9GVU5DVElPTl9UUkFDRVIKKwlzZWxlY3QgSEFWRV9GVU5DVElPTl9HUkFQSF9UUkFDRVIKIAlzZWxlY3QgQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUIKIAlzZWxlY3QgSEFWRV9JREUKIAlzZWxlY3QgSEFWRV9JT1JFTUFQX1BST1QKQEAgLTMxMiw3ICszMTMsNyBAQAogCiBjb25maWcgS0VYRUMKIAlib29sICJrZXhlYyBzeXN0ZW0gY2FsbCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIChQUENfUFJQTUMyODAwIHx8IFBQQ19NVUxUSVBMQVRGT1JNKSAmJiBFWFBFUklNRU5UQUwKKwlkZXBlbmRzIG9uIEJPT0szUyAmJiBFWFBFUklNRU5UQUwKIAloZWxwCiAJICBrZXhlYyBpcyBhIHN5c3RlbSBjYWxsIHRoYXQgaW1wbGVtZW50cyB0aGUgYWJpbGl0eSB0byBzaHV0ZG93biB5b3VyCiAJICBjdXJyZW50IGtlcm5lbCwgYW5kIHRvIHN0YXJ0IGFub3RoZXIga2VybmVsLiAgSXQgaXMgbGlrZSBhIHJlYm9vdApAQCAtNDA5LDYgKzQxMCwxOCBAQAogCWRlcGVuZHMgb24gUFBDNjQKIAlkZWZhdWx0IG4KIAorY29uZmlnIFNUREJJTlVUSUxTCisJYm9vbCAiVXNpbmcgc3RhbmRhcmQgYmludXRpbHMgc2V0dGluZ3MiCisJZGVwZW5kcyBvbiA0NHgKKwlkZWZhdWx0IHkKKwloZWxwCisJICBUdXJuaW5nIHRoaXMgb3B0aW9uIG9mZiBhbGxvd3MgeW91IHRvIHNlbGVjdCAyNTZLQiBQQUdFX1NJWkUgb24gNDR4LgorCSAgTm90ZSwgdGhhdCBrZXJuZWwgd2lsbCBiZSBhYmxlIHRvIHJ1biBvbmx5IHRob3NlIGFwcGxpY2F0aW9ucywKKwkgIHdoaWNoIGhhZCBiZWVuIGNvbXBpbGVkIHVzaW5nIGJpbnV0aWxzIGxhdGVyIHRoYW4gMi4xNy41MC4wLjMgd2l0aAorCSAgJy16bWF4LXBhZ2Utc2l6ZScgc2V0IHRvIDI1NksgKHRoZSBkZWZhdWx0IGlzIDY0SykuIE9yLCBpZiB1c2luZworCSAgdGhlIG9sZGVyIGJpbnV0aWxzLCB5b3UgY2FuIHBhdGNoIHRoZW0gd2l0aCBhIHRyaXZpYWwgcGF0Y2gsIHdoaWNoCisJICBjaGFuZ2VzIHRoZSBFTEZfTUFYUEFHRVNJWkUgZGVmaW5pdGlvbiBmcm9tIDB4MTAwMDAgdG8gMHg0MDAwMC4KKwogY2hvaWNlCiAJcHJvbXB0ICJQYWdlIHNpemUiCiAJZGVmYXVsdCBQUENfNEtfUEFHRVMKQEAgLTQ0NCw2ICs0NTcsMTkgQEAKIAlib29sICI2NGsgcGFnZSBzaXplIiBpZiA0NHggfHwgUFBDX1NURF9NTVVfNjQKIAlzZWxlY3QgUFBDX0hBU19IQVNIXzY0SyBpZiBQUENfU1REX01NVV82NAogCitjb25maWcgUFBDXzI1NktfUEFHRVMKKwlib29sICIyNTZrIHBhZ2Ugc2l6ZSIgaWYgNDR4CisJZGVwZW5kcyBvbiAhU1REQklOVVRJTFMgJiYgKCFTSE1FTSB8fCBCUk9LRU4pCisJaGVscAorCSAgTWFrZSB0aGUgcGFnZSBzaXplIDI1NmsuCisKKwkgIEFzIHRoZSBFTEYgc3RhbmRhcmQgb25seSByZXF1aXJlcyBhbGlnbm1lbnQgdG8gc3VwcG9ydCBwYWdlCisJICBzaXplcyB1cCB0byA2NGssIHlvdSB3aWxsIG5lZWQgdG8gY29tcGlsZSBhbGwgb2YgeW91ciB1c2VyCisJICBzcGFjZSBhcHBsaWNhdGlvbnMgd2l0aCBhIG5vbi1zdGFuZGFyZCBiaW51dGlscyBzZXR0aW5ncworCSAgKHNlZSB0aGUgU1REQklOVVRJTFMgZGVzY3JpcHRpb24gZm9yIGRldGFpbHMpLgorCisJICBTYXkgTiB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nLgorCiBlbmRjaG9pY2UKIAogY29uZmlnIEZPUkNFX01BWF9aT05FT1JERVIKQEAgLTQ1Niw2ICs0ODIsOCBAQAogCWRlZmF1bHQgIjkiIGlmIFBQQ19TVERfTU1VXzMyICYmIFBQQ18xNktfUEFHRVMKIAlyYW5nZSA3IDY0IGlmIFBQQ19TVERfTU1VXzMyICYmIFBQQ182NEtfUEFHRVMKIAlkZWZhdWx0ICI3IiBpZiBQUENfU1REX01NVV8zMiAmJiBQUENfNjRLX1BBR0VTCisJcmFuZ2UgNSA2NCBpZiBQUENfU1REX01NVV8zMiAmJiBQUENfMjU2S19QQUdFUworCWRlZmF1bHQgIjUiIGlmIFBQQ19TVERfTU1VXzMyICYmIFBQQ18yNTZLX1BBR0VTCiAJcmFuZ2UgMTEgNjQKIAlkZWZhdWx0ICIxMSIKIAloZWxwCkBAIC01OTQsNiArNjIyLDcgQEAKIGNvbmZpZyBGU0xfUENJCiAgCWJvb2wKIAlzZWxlY3QgUFBDX0lORElSRUNUX1BDSQorCXNlbGVjdCBQQ0lfUVVJUktTCiAKIGNvbmZpZyA0eHhfU09DCiAJYm9vbApAQCAtNzMwLDYgKzc1OSwyMiBAQAogCWhleCAiTWF4aW11bSBsb3cgbWVtb3J5IHNpemUgKGluIGJ5dGVzKSIgaWYgTE9XTUVNX1NJWkVfQk9PTAogCWRlZmF1bHQgIjB4MzAwMDAwMDAiCiAKK2NvbmZpZyBMT1dNRU1fQ0FNX05VTV9CT09MCisJYm9vbCAiU2V0IG51bWJlciBvZiBDQU1zIHRvIHVzZSB0byBtYXAgbG93IG1lbW9yeSIKKwlkZXBlbmRzIG9uIEFEVkFOQ0VEX09QVElPTlMgJiYgRlNMX0JPT0tFCisJaGVscAorCSAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIG1heGltdW0gbnVtYmVyIG9mIENBTSBzbG90cyB0aGF0CisJICB3aWxsIGJlIHVzZWQgdG8gbWFwIGxvdyBtZW1vcnkuICBUaGVyZSBhcmUgYSBsaW1pdGVkIG51bWJlciBvZiBzbG90cworCSAgYXZhaWxhYmxlIGFuZCBldmVuIG1vcmUgbGltaXRlZCBudW1iZXIgdGhhdCB3aWxsIGZpdCBpbiB0aGUgTDEgTU1VLgorCSAgSG93ZXZlciwgdXNpbmcgbW9yZSBlbnRyaWVzIHdpbGwgYWxsb3cgbWFwcGluZyBtb3JlIGxvdyBtZW1vcnkuICBUaGlzCisJICBjYW4gYmUgdXNlZnVsIGluIG9wdGltaXppbmcgdGhlIGxheW91dCBvZiBrZXJuZWwgdmlydHVhbCBtZW1vcnkuCisKKwkgIFNheSBOIGhlcmUgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZy4KKworY29uZmlnIExPV01FTV9DQU1fTlVNCisJaW50ICJOdW1iZXIgb2YgQ0FNcyB0byB1c2UgdG8gbWFwIGxvdyBtZW1vcnkiIGlmIExPV01FTV9DQU1fTlVNX0JPT0wKKwlkZWZhdWx0IDMKKwogY29uZmlnIFJFTE9DQVRBQkxFCiAJYm9vbCAiQnVpbGQgYSByZWxvY2F0YWJsZSBrZXJuZWwgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwgJiYgQURWQU5DRURfT1BUSU9OUyAmJiBGTEFUTUVNICYmIEZTTF9CT09LRQpAQCAtNzk0LDcgKzgzOSw3IEBACiAKIGNvbmZpZyBQSFlTSUNBTF9BTElHTgogCWhleAotCWRlZmF1bHQgIjB4MTAwMDAwMDAiIGlmIEZTTF9CT09LRQorCWRlZmF1bHQgIjB4MDQwMDAwMDAiIGlmIEZTTF9CT09LRQogCWhlbHAKIAkgIFRoaXMgdmFsdWUgcHV0cyB0aGUgYWxpZ25tZW50IHJlc3RyaWN0aW9ucyBvbiBwaHlzaWNhbCBhZGRyZXNzCiAJICB3aGVyZSBrZXJuZWwgaXMgbG9hZGVkIGFuZCBydW4gZnJvbS4gS2VybmVsIGlzIGNvbXBpbGVkIGZvciBhbgpAQCAtODE1LDMxICs4NjAsNiBAQAogCWRlZmF1bHQgIjB4ODAwMDAwMDAiIGlmIFBQQ19QUkVQIHx8IFBQQ184eHgKIAlkZWZhdWx0ICIweGMwMDAwMDAwIgogCi1jb25maWcgQ09OU0lTVEVOVF9TVEFSVF9CT09MCi0JYm9vbCAiU2V0IGN1c3RvbSBjb25zaXN0ZW50IG1lbW9yeSBwb29sIGFkZHJlc3MiCi0JZGVwZW5kcyBvbiBBRFZBTkNFRF9PUFRJT05TICYmIE5PVF9DT0hFUkVOVF9DQUNIRQotCWhlbHAKLQkgIFRoaXMgb3B0aW9uIGFsbG93cyB5b3UgdG8gc2V0IHRoZSBiYXNlIHZpcnR1YWwgYWRkcmVzcwotCSAgb2YgdGhlIGNvbnNpc3RlbnQgbWVtb3J5IHBvb2wuICBUaGlzIHBvb2wgb2YgdmlydHVhbAotCSAgbWVtb3J5IGlzIHVzZWQgdG8gbWFrZSBjb25zaXN0ZW50IG1lbW9yeSBhbGxvY2F0aW9ucy4KLQotY29uZmlnIENPTlNJU1RFTlRfU1RBUlQKLQloZXggIkJhc2UgdmlydHVhbCBhZGRyZXNzIG9mIGNvbnNpc3RlbnQgbWVtb3J5IHBvb2wiIGlmIENPTlNJU1RFTlRfU1RBUlRfQk9PTAotCWRlZmF1bHQgIjB4ZmQwMDAwMDAiIGlmIChOT1RfQ09IRVJFTlRfQ0FDSEUgJiYgOHh4KQotCWRlZmF1bHQgIjB4ZmYxMDAwMDAiIGlmIE5PVF9DT0hFUkVOVF9DQUNIRQotCi1jb25maWcgQ09OU0lTVEVOVF9TSVpFX0JPT0wKLQlib29sICJTZXQgY3VzdG9tIGNvbnNpc3RlbnQgbWVtb3J5IHBvb2wgc2l6ZSIKLQlkZXBlbmRzIG9uIEFEVkFOQ0VEX09QVElPTlMgJiYgTk9UX0NPSEVSRU5UX0NBQ0hFCi0JaGVscAotCSAgVGhpcyBvcHRpb24gYWxsb3dzIHlvdSB0byBzZXQgdGhlIHNpemUgb2YgdGhlCi0JICBjb25zaXN0ZW50IG1lbW9yeSBwb29sLiAgVGhpcyBwb29sIG9mIHZpcnR1YWwgbWVtb3J5Ci0JICBpcyB1c2VkIHRvIG1ha2UgY29uc2lzdGVudCBtZW1vcnkgYWxsb2NhdGlvbnMuCi0KLWNvbmZpZyBDT05TSVNURU5UX1NJWkUKLQloZXggIlNpemUgb2YgY29uc2lzdGVudCBtZW1vcnkgcG9vbCIgaWYgQ09OU0lTVEVOVF9TSVpFX0JPT0wKLQlkZWZhdWx0ICIweDAwMjAwMDAwIiBpZiBOT1RfQ09IRVJFTlRfQ0FDSEUKLQogY29uZmlnIFBJTl9UTEIKIAlib29sICJQaW5uZWQgS2VybmVsIFRMQnMgKDg2MCBPTkxZKSIKIAlkZXBlbmRzIG9uIEFEVkFOQ0VEX09QVElPTlMgJiYgOHh4CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvS2NvbmZpZy5kZWJ1ZyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnLmRlYnVnCmluZGV4IDA4ZjdjYzAuLjIyMDkxYmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9LY29uZmlnLmRlYnVnCisrKyBiL2FyY2gvcG93ZXJwYy9LY29uZmlnLmRlYnVnCkBAIC0xMjksNyArMTI5LDcgQEAKIAogY29uZmlnIEJPT1RYX1RFWFQKIAlib29sICJTdXBwb3J0IGZvciBlYXJseSBib290IHRleHQgY29uc29sZSAoQm9vdFggb3IgT3BlbkZpcm13YXJlIG9ubHkpIgotCWRlcGVuZHMgb24gUFBDX09GICYmIFBQQ19NVUxUSVBMQVRGT1JNCisJZGVwZW5kcyBvbiBQUENfT0YgJiYgUFBDX0JPT0szUwogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc2VlIHByb2dyZXNzIG1lc3NhZ2VzIGZyb20gdGhlIGJvb3QgZmlybXdhcmUgaW4gdGV4dAogCSAgbW9kZS4gUmVxdWlyZXMgZWl0aGVyIEJvb3RYIG9yIE9wZW4gRmlybXdhcmUuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvTWFrZWZpbGUKaW5kZXggNzJkMTdmNS4uNTUxZmM1OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9NYWtlZmlsZQpAQCAtMTQ3LDggKzE0Nyw4IEBACiAJCQkJICAgYXJjaC9wb3dlcnBjL21tLyBcCiAJCQkJICAgYXJjaC9wb3dlcnBjL2xpYi8gXAogCQkJCSAgIGFyY2gvcG93ZXJwYy9zeXNkZXYvIFwKLQkJCQkgICBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zLwotY29yZS0kKENPTkZJR19NQVRIX0VNVUxBVElPTikJKz0gYXJjaC9wb3dlcnBjL21hdGgtZW11LworCQkJCSAgIGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvIFwKKwkJCQkgICBhcmNoL3Bvd2VycGMvbWF0aC1lbXUvCiBjb3JlLSQoQ09ORklHX1hNT04pCQkrPSBhcmNoL3Bvd2VycGMveG1vbi8KIGNvcmUtJChDT05GSUdfS1ZNKSAJCSs9IGFyY2gvcG93ZXJwYy9rdm0vCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUKaW5kZXggZTg0ZGYzMy4uNDQ1OGFiYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvTWFrZWZpbGUKQEAgLTcwLDcgKzcwLDcgQEAKIAkJY3Vib290LWthdG1haS5jIGN1Ym9vdC1yYWluaWVyLmMgcmVkYm9vdC04eHguYyBlcDgyNDhlLmMgXAogCQljdWJvb3Qtd2FycC5jIGN1Ym9vdC04NXh4LWNwbTIuYyBjdWJvb3QteW9zZW1pdGUuYyBzaW1wbGVib290LmMgXAogCQl2aXJ0ZXg0MDUtaGVhZC5TIHZpcnRleC5jIHJlZGJvb3QtODN4eC5jIGN1Ym9vdC1zYW00NDBlcC5jIFwKLQkJY3Vib290LWFjYWRpYS5jCisJCWN1Ym9vdC1hY2FkaWEuYyBjdWJvb3QtYW1pZ2FvbmUuYwogc3JjLWJvb3QgOj0gJChzcmMtd2xpYikgJChzcmMtcGxhdCkgZW1wdHkuYwogCiBzcmMtYm9vdCA6PSAkKGFkZHByZWZpeCAkKG9iaikvLCAkKHNyYy1ib290KSkKQEAgLTIzNSw3ICsyMzUsOSBAQAogCQkJCQkgICBkdGJJbWFnZS5hZGRlcjg3NS1yZWRib290CiAKICMgQm9hcmQgcG9ydHMgaW4gYXJjaC9wb3dlcnBjL3BsYXRmb3JtLzUyeHgvS2NvbmZpZwotaW1hZ2UtJChDT05GSUdfUFBDX0xJVEU1MjAwKQkJKz0gY3VJbWFnZS5saXRlNTIwMCBjdUltYWdlLmxpdGU1MjAwYgoraW1hZ2UtJChDT05GSUdfUFBDX0xJVEU1MjAwKQkJKz0gY3VJbWFnZS5saXRlNTIwMCBsaXRlNTIwMC5kdGIKK2ltYWdlLSQoQ09ORklHX1BQQ19MSVRFNTIwMCkJCSs9IGN1SW1hZ2UubGl0ZTUyMDBiIGxpdGU1MjAwYi5kdGIKK2ltYWdlLSQoQ09ORklHX1BQQ19NRURJQTUyMDApCQkrPSBjdUltYWdlLm1lZGlhNTIwMCBtZWRpYTUyMDAuZHRiCiAKICMgQm9hcmQgcG9ydHMgaW4gYXJjaC9wb3dlcnBjL3BsYXRmb3JtLzgyeHgvS2NvbmZpZwogaW1hZ2UtJChDT05GSUdfTVBDODI3Ml9BRFMpCQkrPSBjdUltYWdlLm1wYzgyNzJhZHMKQEAgLTI3NCw2ICsyNzYsOSBAQAogaW1hZ2UtJChDT05GSUdfTVBDNzQ0OEhQQzIpCQkrPSBjdUltYWdlLm1wYzc0NDhocGMyCiBpbWFnZS0kKENPTkZJR19QUENfQzJLKQkJCSs9IGN1SW1hZ2UuYzJrCiAKKyMgQm9hcmQgcG9ydCBpbiBhcmNoL3Bvd2VycGMvcGxhdGZvcm0vYW1pZ2FvbmUvS2NvbmZpZworaW1hZ2UtJChDT05GSUdfQU1JR0FPTkUpCQkrPSBjdUltYWdlLmFtaWdhb25lCisKICMgRm9yIDMyLWJpdCBwb3dlcm1hY3MsIGJ1aWxkIHRoZSBDT0ZGIGFuZCBtaWJvb3QgaW1hZ2VzCiAjIGFzIHdlbGwgYXMgdGhlIEVMRiBpbWFnZXMuCiBpZmVxICgkKENPTkZJR19QUEMzMikseSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2N1Ym9vdC1hbWlnYW9uZS5jIGIvYXJjaC9wb3dlcnBjL2Jvb3QvY3Vib290LWFtaWdhb25lLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDUwMjk2NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2N1Ym9vdC1hbWlnYW9uZS5jCkBAIC0wLDAgKzEsMzUgQEAKKy8qCisgKiBPbGQgVS1ib290IGNvbXBhdGliaWxpdHkgZm9yIEFtaWdhT25lCisgKgorICogQXV0aG9yOiBHZXJoYXJkIFBpcmNoZXIgKGdlcmhhcmRfcGlyY2hlckBnbXgubmV0KQorICoKKyAqICAgQmFzZWQgb24gY3Vib290LTgzeHguYworICogQ29weXJpZ2h0IChjKSAyMDA3IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzIHB1Ymxpc2hlZAorICogYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqLworCisjaW5jbHVkZSAib3BzLmgiCisjaW5jbHVkZSAic3RkaW8uaCIKKyNpbmNsdWRlICJjdWJvb3QuaCIKKworI2luY2x1ZGUgInBwY2Jvb3QuaCIKKworc3RhdGljIGJkX3QgYmQ7CisKK3N0YXRpYyB2b2lkIHBsYXRmb3JtX2ZpeHVwcyh2b2lkKQoreworCWR0X2ZpeHVwX21lbW9yeShiZC5iaV9tZW1zdGFydCwgYmQuYmlfbWVtc2l6ZSk7CisJZHRfZml4dXBfY3B1X2Nsb2NrcyhiZC5iaV9pbnRmcmVxLCBiZC5iaV9idXNmcmVxIC8gNCwgYmQuYmlfYnVzZnJlcSk7Cit9CisKK3ZvaWQgcGxhdGZvcm1faW5pdCh1bnNpZ25lZCBsb25nIHIzLCB1bnNpZ25lZCBsb25nIHI0LCB1bnNpZ25lZCBsb25nIHI1LAorICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgcjYsIHVuc2lnbmVkIGxvbmcgcjcpCit7CisJQ1VCT09UX0lOSVQoKTsKKwlmZHRfaW5pdChfZHRiX3N0YXJ0KTsKKwlzZXJpYWxfY29uc29sZV9pbml0KCk7CisJcGxhdGZvcm1fb3BzLmZpeHVwcyA9IHBsYXRmb3JtX2ZpeHVwczsKK30KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9hbWlnYW9uZS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYW1pZ2FvbmUuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjI2NTQ5ZmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYW1pZ2FvbmUuZHRzCkBAIC0wLDAgKzEsMTczIEBACisvKgorICogQW1pZ2FPbmUgRGV2aWNlIFRyZWUgU291cmNlCisgKgorICogQ29weXJpZ2h0IDIwMDggR2VyaGFyZCBQaXJjaGVyIChnZXJoYXJkX3BpcmNoZXJAZ214Lm5ldCkKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy9kdHMtdjEvOworCisvIHsKKwltb2RlbCA9ICJBbWlnYU9uZSI7CisJY29tcGF0aWJsZSA9ICJleWV0ZWNoLGFtaWdhb25lIjsKKwljb2hlcmVuY3ktb2ZmOworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDE+OworCisJY3B1cyB7CisJCSNjcHVzID0gPDE+OworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJY3B1QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWQtY2FjaGUtc2l6ZSA9IDwzMjc2OD47CQkvLyBMMSwgMzJLCisJCQlpLWNhY2hlLXNpemUgPSA8MzI3Njg+OwkJLy8gTDEsIDMySworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwkvLyAzMy4zIE1IeiwgZnJvbSBVLWJvb3QKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZyb20gVS1ib290CisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gRnJvbSBVLWJvb3QKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDAgMD47CQkJCS8vIEZyb20gVS1ib290CisJfTsKKworCXBjaUA4MDAwMDAwMCB7CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCWNvbXBhdGlibGUgPSAibWFpLWxvZ2ljLGFydGljaWEtcyI7CisJCWJ1cy1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OworCQlidXMtcmFuZ2UgPSA8MCAweGZmPjsKKwkJcmFuZ2VzID0gPDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4ZmUwMDAwMDAgMCAweDAwYzAwMDAwCS8vIFBDSSBJL08KKwkJICAgICAgICAgIDB4MDIwMDAwMDAgMCAweDgwMDAwMDAwIDB4ODAwMDAwMDAgMCAweDdkMDAwMDAwCS8vIFBDSSBtZW1vcnkKKwkJICAgICAgICAgIDB4MDIwMDAwMDAgMCAweDAwMDAwMDAwIDB4ZmQwMDAwMDAgMCAweDAxMDAwMDAwPjsJLy8gUENJIGFsaWFzIG1lbW9yeSAoSVNBKQorCQkvLyBDb25maWd1cmF0aW9uIGFkZHJlc3MgYW5kIGRhdGEgcmVnaXN0ZXIuCisJCXJlZyA9IDwweGZlYzAwY2Y4IDQKKwkJICAgICAgIDB4ZmVlMDBjZmMgND47CisJCTgyNTktaW50ZXJydXB0LWFja25vd2xlZGdlID0gPDB4ZmVmMDAwMDA+OworCQkvLyBEbyBub3QgZGVmaW5lIGEgaW50ZXJydXB0LXBhcmVudCBoZXJlLCBpZiB0aGVyZSBpcyBubworCQkvLyBpbnRlcnJ1cHQtbWFwIHByb3BlcnR5LgorCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisKKwkJaXNhQDcgeworCQkJZGV2aWNlX3R5cGUgPSAiaXNhIjsKKwkJCWNvbXBhdGlibGUgPSAicGNpY2xhc3MsMDYwMSI7CisJCQl2ZW5kb3ItaWQgPSA8MHgwMDAwMTEwNj47CisJCQlkZXZpY2UtaWQgPSA8MHgwMDAwMDY4Nj47CisJCQlyZXZpc2lvbi1pZCA9IDwweDAwMDAwMDEwPjsKKwkJCWNsYXNzLWNvZGUgPSA8MHgwMDA2MDEwMD47CisJCQlzdWJzeXN0ZW0taWQgPSA8MD47CisJCQlzdWJzeXN0ZW0tdmVuZG9yLWlkID0gPDA+OworCQkJZGV2c2VsLXNwZWVkID0gPDB4MDAwMDAwMDE+OworCQkJbWluLWdyYW50ID0gPDA+OworCQkJbWF4LWxhdGVuY3kgPSA8MD47CisJCQkvKiBGaXJzdCA2NGsgZm9yIEkvTyBhdCAweDAgb24gUENJIG1hcHBlZCB0byAweDAgb24gSVNBLiAqLworCQkJcmFuZ2VzID0gPDB4MDAwMDAwMDEgMCAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMCAweDAwMDEwMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jmk4MjU5PjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCisJCQlkbWEtY29udHJvbGxlckAwIHsKKwkJCQljb21wYXRpYmxlID0gInBucFBOUCwyMDAiOworCQkJCXJlZyA9IDwxIDB4MDAwMDAwMDAgMHgwMDAwMDAyMAorCQkJCSAgICAgICAxIDB4MDAwMDAwODAgMHgwMDAwMDAxMAorCQkJCSAgICAgICAxIDB4MDAwMDAwYzAgMHgwMDAwMDAyMD47CisJCQl9OworCisJCQlpODI1OTogaW50ZXJydXB0LWNvbnRyb2xsZXJAMjAgeworCQkJCWRldmljZV90eXBlID0gImludGVycnVwdC1jb250cm9sbGVyIjsKKwkJCQljb21wYXRpYmxlID0gInBucFBOUCwwMDAiOworCQkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJCXJlZyA9IDwxIDB4MDAwMDAwMjAgMHgwMDAwMDAwMgorCQkJCSAgICAgICAxIDB4MDAwMDAwYTAgMHgwMDAwMDAwMgorCQkJCSAgICAgICAxIDB4MDAwMDA0ZDAgMHgwMDAwMDAwMj47CisJCQkJcmVzZXJ2ZWQtaW50ZXJydXB0cyA9IDwyPjsKKwkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJfTsKKworCQkJdGltZXJANDAgeworCQkJCS8vIEFsc28gYWRkcyBwY3Nwa3IgdG8gcGxhdGZvcm0gZGV2aWNlcy4KKwkJCQljb21wYXRpYmxlID0gInBucFBOUCwxMDAiOworCQkJCXJlZyA9IDwxIDB4MDAwMDAwNDAgMHgwMDAwMDAyMD47CisJCQl9OworCisJCQk4MDQyQDYwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICI4MDQyIjsKKwkJCQlyZWcgPSA8MSAweDAwMDAwMDYwIDB4MDAwMDAwMDEKKwkJCQkgICAgICAgMSAweDAwMDAwMDY0IDB4MDAwMDAwMDE+OworCQkJCWludGVycnVwdHMgPSA8MSAzIDEyIDM+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQkJa2V5Ym9hcmRAMCB7CisJCQkJCWNvbXBhdGlibGUgPSAicG5wUE5QLDMwMyI7CisJCQkJCXJlZyA9IDwwPjsKKwkJCQl9OworCisJCQkJbW91c2VAMSB7CisJCQkJCWNvbXBhdGlibGUgPSAicG5wUE5QLGYwMyI7CisJCQkJCXJlZyA9IDwxPjsKKwkJCQl9OworCQkJfTsKKworCQkJcnRjQDcwIHsKKwkJCQljb21wYXRpYmxlID0gInBucFBOUCxiMDAiOworCQkJCXJlZyA9IDwxIDB4MDAwMDAwNzAgMHgwMDAwMDAwMj47CisJCQkJaW50ZXJydXB0cyA9IDw4IDM+OworCQkJfTsKKworCQkJc2VyaWFsQDNmOCB7CisJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCQljb21wYXRpYmxlID0gInBucFBOUCw1MDEiLCJwbnBQTlAsNTAwIjsKKwkJCQlyZWcgPSA8MSAweDAwMDAwM2Y4IDB4MDAwMDAwMDg+OworCQkJCWludGVycnVwdHMgPSA8NCAzPjsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MTg0MzIwMD47CisJCQkJY3VycmVudC1zcGVlZCA9IDwxMTUyMDA+OworCQkJfTsKKworCQkJc2VyaWFsQDJmOCB7CisJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCQljb21wYXRpYmxlID0gInBucFBOUCw1MDEiLCJwbnBQTlAsNTAwIjsKKwkJCQlyZWcgPSA8MSAweDAwMDAwMmY4IDB4MDAwMDAwMDg+OworCQkJCWludGVycnVwdHMgPSA8MyAzPjsKKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MTg0MzIwMD47CisJCQkJY3VycmVudC1zcGVlZCA9IDwxMTUyMDA+OworCQkJfTsKKworCQkJcGFyYWxsZWxAMzc4IHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJwYXJhbGxlbCI7CisJCQkJLy8gTm8gRUNQIHN1cHBvcnQgZm9yIG5vdywgb3RoZXJ3aXNlIGFkZCAicG5wUE5QLDQwMSIuCisJCQkJY29tcGF0aWJsZSA9ICJwbnBQTlAsNDAwIjsKKwkJCQlyZWcgPSA8MSAweDAwMDAwMzc4IDB4MDAwMDAwMDMKKwkJCQkgICAgICAgMSAweDAwMDAwNzc4IDB4MDAwMDAwMDM+OworCQkJfTsKKworCQkJZmRjQDNmMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAiZmRjIjsKKwkJCQljb21wYXRpYmxlID0gInBucFBOUCw3MDAiOworCQkJCXJlZyA9IDwxIDB4MDAwMDAzZjAgMHgwMDAwMDAwOD47CisJCQkJaW50ZXJydXB0cyA9IDw2IDM+OworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCisJCQkJZGlza0AwIHsKKwkJCQkJcmVnID0gPDA+OworCQkJCX07CisJCQl9OworCQl9OworCX07CisKKwljaG9zZW4geworCQlsaW51eCxzdGRvdXQtcGF0aCA9ICIvcGNpQDgwMDAwMDAwL2lzYUA3L3NlcmlhbEAzZjgiOworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2FzcDgzNHgtcmVkYm9vdC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYXNwODM0eC1yZWRib290LmR0cwppbmRleCA1MjRhZjdlLi43ZGE4NGZkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYXNwODM0eC1yZWRib290LmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvYXNwODM0eC1yZWRib290LmR0cwpAQCAtMTgxLDcwICsxODEsNzYgQEAKIAkJCXBoeV90eXBlID0gInVscGkiOwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJCWludGVycnVwdHMgPSA8MTcgMHg4PjsKLQkJCQlyZWcgPSA8MHgxPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE4IDB4OD47Ci0JCQkJcmVnID0gPDB4Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0KLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwOCBlNSAxMSAzMiAzMyBdOwogCQkJaW50ZXJydXB0cyA9IDwzMiAweDggMzMgMHg4IDM0IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDA+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE3IDB4OD47CisJCQkJCXJlZyA9IDwweDE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE4IDB4OD47CisJCQkJCXJlZyA9IDwweDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwOCBlNSAxMSAzMiAzNCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAweDggMzYgMHg4IDM3IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CiAJCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDE+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jYW55b25sYW5kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY2FueW9ubGFuZHMuZHRzCmluZGV4IDQ0NDdkZWYuLjVmZDFhZDAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9jYW55b25sYW5kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NhbnlvbmxhbmRzLmR0cwpAQCAtMTQ5LDYgKzE0OSwyMCBAQAogCQkJCQkvKlJYREUqLyAgMHg1IDB4ND47CiAJCX07CiAKKyAgICAgICAgICAgICAgICBVU0IwOiBlaGNpQGJmZmQwNDAwIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAiaWJtLHVzYi1laGNpLTQ2MGV4IiwgInVzYi1laGNpIjsKKyAgICAgICAgICAgICAgICAgICAgICAgIGludGVycnVwdC1wYXJlbnQgPSA8JlVJQzI+OworICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0cyA9IDwweDFkIDQ+OworICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDQgMHhiZmZkMDQwMCAweDkwIDQgMHhiZmZkMDQ5MCAweDcwPjsKKyAgICAgICAgICAgICAgICB9OworCisgICAgICAgICAgICAgICAgVVNCMTogdXNiQGJmZmQwMDAwIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNvbXBhdGlibGUgPSAib2hjaS1sZSI7CisgICAgICAgICAgICAgICAgICAgICAgICByZWcgPSA8NCAweGJmZmQwMDAwIDB4NjA+OworICAgICAgICAgICAgICAgICAgICAgICAgaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMj47CisgICAgICAgICAgICAgICAgICAgICAgICBpbnRlcnJ1cHRzID0gPDB4MWUgND47CisgICAgICAgICAgICAgICAgfTsKKwogCQlQT0IwOiBvcGIgewogCQkJY29tcGF0aWJsZSA9ICJpYm0sb3BiLTQ2MGV4IiwgImlibSxvcGIiOwogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC0yNTIsNiArMjY2LDIwIEBACiAJCQkJcmVnID0gPDB4ZWY2MDA3MDAgMHgwMDAwMDAxND47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CiAJCQkJaW50ZXJydXB0cyA9IDwweDIgMHg0PjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcnRjQDY4IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gInN0bSxtNDF0ODAiOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZyA9IDwweDY4PjsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMj47CisJCQkJCWludGVycnVwdHMgPSA8MHgxOSAweDg+OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9OworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHRtQDQ4IHsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wYXRpYmxlID0gImFkLGFkNzQxNCI7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVnID0gPDB4NDg+OworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMxPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDE0IDB4OD47CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07CiAJCQl9OwogCiAJCQlJSUMxOiBpMmNAZWY2MDA4MDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2NtNTIwMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY201MjAwLmR0cwppbmRleCAyZjc0Y2M0Li5jZWU4MDgwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY201MjAwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvY201MjAwLmR0cwpAQCAtMTcsNiArMTcsNyBAQAogCWNvbXBhdGlibGUgPSAic2NoaW5kbGVyLGNtNTIwMCI7CiAJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJI3NpemUtY2VsbHMgPSA8MT47CisJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCiAJY3B1cyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtNjYsNyArNjcsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKIAkJCXJlZyA9IDwweDYwMCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSA5IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJZnNsLGhhcy13ZHQ7CiAJCX07CiAKQEAgLTc0LDg0ICs3NCw3NiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKIAkJCXJlZyA9IDwweDYxMCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxMCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2MjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CiAJCQlyZWcgPSA8MHg2MjAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTEgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjMwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwogCQkJcmVnID0gPDB4NjMwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDEyIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDY0MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKIAkJCXJlZyA9IDwweDY0MCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxMyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2NTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CiAJCQlyZWcgPSA8MHg2NTAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTQgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjYwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwogCQkJcmVnID0gPDB4NjYwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDE1IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDY3MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKIAkJCXJlZyA9IDwweDY3MCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxNiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlydGNAODAwIHsJLy8gUmVhbCB0aW1lIGNsb2NrCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ydGMiLCJmc2wsbXBjNTIwMC1ydGMiOwogCQkJcmVnID0gPDB4ODAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MSA1IDAgMSA2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCi0JCWdwaW9AYjAwIHsKKwkJZ3Bpb19zaW1wbGU6IGdwaW9AYjAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwaW8iLCJmc2wsbXBjNTIwMC1ncGlvIjsKIAkJCXJlZyA9IDwweGIwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MSA3IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCX07CiAKLQkJZ3Bpb0BjMDAgeworCQlncGlvX3drdXA6IGdwaW9AYzAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwaW8td2t1cCIsImZzbCxtcGM1MjAwLWdwaW8td2t1cCI7CiAJCQlyZWcgPSA8MHhjMDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgOCAwIDAgMyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OwogCQl9OwogCiAJCXNwaUBmMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItc3BpIiwiZnNsLG1wYzUyMDAtc3BpIjsKIAkJCXJlZyA9IDwweGYwMCAweDIwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxMyAwIDIgMTQgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdXNiQDEwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItb2hjaSIsImZzbCxtcGM1MjAwLW9oY2kiLCJvaGNpLWJlIjsKIAkJCXJlZyA9IDwweDEwMDAgMHhmZj47CiAJCQlpbnRlcnJ1cHRzID0gPDIgNiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlkbWEtY29udHJvbGxlckAxMjAwIHsKQEAgLTE2MSw3ICsxNTMsNiBAQAogCQkJICAgICAgICAgICAgICAzIDQgMCAgMyA1IDAgIDMgNiAwICAzIDcgMAogCQkJICAgICAgICAgICAgICAzIDggMCAgMyA5IDAgIDMgMTAgMCAgMyAxMSAwCiAJCQkgICAgICAgICAgICAgIDMgMTIgMCAgMyAxMyAwICAzIDE0IDAgIDMgMTUgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJeGxiQDFmMDAgewpAQCAtMTcwLDQ4ICsxNjEsMzQgQEAKIAkJfTsKIAogCQlzZXJpYWxAMjAwMCB7CQkvLyBQU0MxCi0JCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7Ci0JCQlwb3J0LW51bWJlciA9IDwwPjsgIC8vIExvZ2ljYWwgcG9ydCBhc3NpZ25tZW50CiAJCQlyZWcgPSA8MHgyMDAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXNlcmlhbEAyMjAwIHsJCS8vIFBTQzIKLQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7Ci0JCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKLQkJCXBvcnQtbnVtYmVyID0gPDE+OyAgLy8gTG9naWNhbCBwb3J0IGFzc2lnbm1lbnQKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOwogCQkJcmVnID0gPDB4MjIwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlzZXJpYWxAMjQwMCB7CQkvLyBQU0MzCi0JCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwotCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1wc2MtdWFydCI7Ci0JCQlwb3J0LW51bWJlciA9IDwyPjsgIC8vIExvZ2ljYWwgcG9ydCBhc3NpZ25tZW50CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKIAkJCXJlZyA9IDwweDI0MDAgMHgxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDMgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJc2VyaWFsQDJjMDAgewkJLy8gUFNDNgotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOwotCQkJcG9ydC1udW1iZXIgPSA8NT47ICAvLyBMb2dpY2FsIHBvcnQgYXNzaWdubWVudAogCQkJcmVnID0gPDB4MmMwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgNCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlldGhlcm5ldEAzMDAwIHsKLQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZmVjIiwiZnNsLG1wYzUyMDAtZmVjIjsKIAkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQl9OwogCkBAIC0yMjEsMTAgKzE5OCw4IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tZGlvIiwiZnNsLG1wYzUyMDAtbWRpbyI7CiAJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsgICAgICAgLy8gZmVjIHJhbmdlLCBzaW5jZSB3ZSBuZWVkIHRvIHNldHVwIGZlYyBpbnRlcnJ1cHRzCiAJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsgICAvLyB0aGVzZSBhcmUgZm9yICJtaWkgY29tbWFuZCBmaW5pc2hlZCIsIG5vdCBsaW5rIGNoYW5nZXMgJiBjby4KLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAogCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQkJcmVnID0gPDA+OwogCQkJfTsKIAkJfTsKQEAgLTIzNSw3ICsyMTAsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIApAQCAtMjQ1LDkgKzIxOSw4IEBACiAJCX07CiAJfTsKIAotCWxwYiB7Ci0JCW1vZGVsID0gImZzbCxscGIiOwotCQljb21wYXRpYmxlID0gImZzbCxscGIiOworCWxvY2FsYnVzIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbHBiIiwic2ltcGxlLWJ1cyI7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDI+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJcmFuZ2VzID0gPDAgMCAweGZjMDAwMDAwIDB4MjAwMDAwMD47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZGlnc3lfbXRjLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9kaWdzeV9tdGMuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjRjMzYxODYKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZGlnc3lfbXRjLmR0cwpAQCAtMCwwICsxLDI1NCBAQAorLyoKKyAqIERpZ3N5IE1UQyBib2FyZCBEZXZpY2UgVHJlZSBTb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgU2VtaWhhbGYKKyAqCisgKiBCYXNlZCBvbiB0aGUgQ001MjAwIGJ5IE0uIEJhbGFrb3dpY3oKKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy9kdHMtdjEvOworCisvIHsKKwltb2RlbCA9ICJpbnRlcmNvbnRyb2wsZGlnc3ktbXRjIjsKKwljb21wYXRpYmxlID0gImludGVyY29udHJvbCxkaWdzeS1tdGMiOworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDE+OworCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyw1MjAwQDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWQtY2FjaGUtc2l6ZSA9IDwweDQwMDA+OwkJLy8gTDEsIDE2SworCQkJaS1jYWNoZS1zaXplID0gPDB4NDAwMD47CQkvLyBMMSwgMTZLCisJCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CS8vIGZyb20gYm9vdGxvYWRlcgorCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJCXJlZyA9IDwweDAwMDAwMDAwIDB4MDIwMDAwMDA+OwkvLyAzMk1CCisJfTsKKworCXNvYzUyMDBAZjAwMDAwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWltbXIiOworCQlyYW5nZXMgPSA8MCAweGYwMDAwMDAwIDB4MDAwMGMwMDA+OworCQlyZWcgPSA8MHhmMDAwMDAwMCAweDAwMDAwMTAwPjsKKwkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCQlzeXN0ZW0tZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisKKwkJY2RtQDIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1jZG0iLCJmc2wsbXBjNTIwMC1jZG0iOworCQkJcmVnID0gPDB4MjAwIDB4Mzg+OworCQl9OworCisJCW1wYzUyMDBfcGljOiBpbnRlcnJ1cHQtY29udHJvbGxlckA1MDAgeworCQkJLy8gNTIwMCBpbnRlcnJ1cHRzIGFyZSBlbmNvZGVkIGludG8gdHdvIGxldmVsczsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2ludGVycnVwdC1jZWxscyA9IDwzPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBpYyIsImZzbCxtcGM1MjAwLXBpYyI7CisJCQlyZWcgPSA8MHg1MDAgMHg4MD47CisJCX07CisKKwkJdGltZXJANjAwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjAwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDkgMD47CisJCQlmc2wsaGFzLXdkdDsKKwkJfTsKKworCQl0aW1lckA2MTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MTAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTAgMD47CisJCX07CisKKwkJdGltZXJANjIwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjIwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDExIDA+OworCQl9OworCisJCXRpbWVyQDYzMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYzMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMiAwPjsKKwkJfTsKKworCQl0aW1lckA2NDAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2NDAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTMgMD47CisJCX07CisKKwkJdGltZXJANjUwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjUwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDE0IDA+OworCQl9OworCisJCXRpbWVyQDY2MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDY2MCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxNSAwPjsKKwkJfTsKKworCQl0aW1lckA2NzAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2NzAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTYgMD47CisJCX07CisKKwkJZ3Bpb19zaW1wbGU6IGdwaW9AYjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwaW8iLCJmc2wsbXBjNTIwMC1ncGlvIjsKKwkJCXJlZyA9IDwweGIwMCAweDQwPjsKKwkJCWludGVycnVwdHMgPSA8MSA3IDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3Bpb193a3VwOiBncGlvQGMwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncGlvLXdrdXAiLCJmc2wsbXBjNTIwMC1ncGlvLXdrdXAiOworCQkJcmVnID0gPDB4YzAwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwxIDggMCAwIDMgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlzcGlAZjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXNwaSIsImZzbCxtcGM1MjAwLXNwaSI7CisJCQlyZWcgPSA8MHhmMDAgMHgyMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMTMgMCAyIDE0IDA+OworCQl9OworCisJCXVzYkAxMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW9oY2kiLCJmc2wsbXBjNTIwMC1vaGNpIiwib2hjaS1iZSI7CisJCQlyZWcgPSA8MHgxMDAwIDB4ZmY+OworCQkJaW50ZXJydXB0cyA9IDwyIDYgMD47CisJCX07CisKKwkJZG1hLWNvbnRyb2xsZXJAMTIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1iZXN0Y29tbSIsImZzbCxtcGM1MjAwLWJlc3Rjb21tIjsKKwkJCXJlZyA9IDwweDEyMDAgMHg4MD47CisJCQlpbnRlcnJ1cHRzID0gPDMgMCAwICAzIDEgMCAgMyAyIDAgIDMgMyAwCisJCQkgICAgICAgICAgICAgIDMgNCAwICAzIDUgMCAgMyA2IDAgIDMgNyAwCisJCQkgICAgICAgICAgICAgIDMgOCAwICAzIDkgMCAgMyAxMCAwICAzIDExIDAKKwkJCSAgICAgICAgICAgICAgMyAxMiAwICAzIDEzIDAgIDMgMTQgMCAgMyAxNSAwPjsKKwkJfTsKKworCQl4bGJAMWYwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi14bGIiLCJmc2wsbXBjNTIwMC14bGIiOworCQkJcmVnID0gPDB4MWYwMCAweDEwMD47CisJCX07CisKKwkJc2VyaWFsQDI2MDAgewkJLy8gUFNDNAorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7CisJCQlyZWcgPSA8MHgyNjAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiAxMSAwPjsKKwkJfTsKKworCQlzZXJpYWxAMjgwMCB7CQkvLyBQU0M1CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKKwkJCXJlZyA9IDwweDI4MDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDEyIDA+OworCQl9OworCisJCWV0aGVybmV0QDMwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZmVjIiwiZnNsLG1wYzUyMDAtZmVjIjsKKwkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQl9OworCisJCW1kaW9AMzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbWRpbyIsImZzbCxtcGM1MjAwLW1kaW8iOworCQkJcmVnID0gPDB4MzAwMCAweDQwMD47ICAgICAgIC8vIGZlYyByYW5nZSwgc2luY2Ugd2UgbmVlZCB0byBzZXR1cCBmZWMgaW50ZXJydXB0cworCQkJaW50ZXJydXB0cyA9IDwyIDUgMD47ICAgLy8gdGhlc2UgYXJlIGZvciAibWlpIGNvbW1hbmQgZmluaXNoZWQiLCBub3QgbGluayBjaGFuZ2VzICYgY28uCisKKwkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQlyZWcgPSA8MD47CisJCQl9OworCQl9OworCisJCWF0YUAzYTAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWF0YSIsImZzbCxtcGM1MjAwLWF0YSI7CisJCQlyZWcgPSA8MHgzYTAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiA3IDA+OworCQl9OworCisJCWkyY0AzZDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDNkMDAgMHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMTUgMD47CisJCQlmc2w1MjAwLWNsb2NraW5nOworCisJCQlydGNANTAgeworCQkJCWNvbXBhdGlibGUgPSAiYXQsMjRjMDgiOworCQkJCXJlZyA9IDwweDUwPjsKKwkJCX07CisKKwkJCXJ0Y0A2OCB7CisJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM5IjsKKwkJCQlyZWcgPSA8MHg2OD47CisJCQl9OworCQl9OworCisJCXNyYW1AODAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1zcmFtIiwiZnNsLG1wYzUyMDAtc3JhbSI7CisJCQlyZWcgPSA8MHg4MDAwIDB4NDAwMD47CisJCX07CisJfTsKKworCWxwYiB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWxwYiIsInNpbXBsZS1idXMiOworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCXJhbmdlcyA9IDwwIDAgMHhmZjAwMDAwMCAweDEwMDAwMDA+OworCisJCS8vIDE2LWJpdCBmbGFzaCBkZXZpY2UgYXQgTG9jYWxQbHVzIEJ1cyBDUzAKKwkJZmxhc2hAMCwwIHsKKwkJCWNvbXBhdGlibGUgPSAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwwIDAgMHgxMDAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCQlkZXZpY2Utd2lkdGggPSA8Mj47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCisJCQlwYXJ0aXRpb25AMCB7CisJCQkJbGFiZWwgPSAia2VybmVsIjsKKwkJCQlyZWcgPSA8MHgwIDB4MDAyMDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkAyMDAwMDAgeworCQkJCWxhYmVsID0gInJvb3QiOworCQkJCXJlZyA9IDwweDAwMjAwMDAwIDB4MDAzMDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA1MDAwMDAgeworCQkJCWxhYmVsID0gInVzZXIiOworCQkJCXJlZyA9IDwweDAwNTAwMDAwIDB4MDBhMDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkBmMDAwMDAgeworCQkJCWxhYmVsID0gInUtYm9vdCI7CisJCQkJcmVnID0gPDB4MDBmMDAwMDAgMHgxMDAwMDA+OworCQkJfTsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfcHBjOWEuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9wcGM5YS5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQ3YWQwNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfcHBjOWEuZHRzCkBAIC0wLDAgKzEsMzY3IEBACisvKgorICogR0UgRmFudWMgUFBDOUEgRGV2aWNlIFRyZWUgU291cmNlCisgKgorICogQ29weXJpZ2h0IDIwMDggR0UgRmFudWMgSW50ZWxsaWdlbnQgUGxhdGZvcm1zIEVtYmVkZGVkIFN5c3RlbXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEJhc2VkIG9uOiBTQlMgQ002IERldmljZSBUcmVlIFNvdXJjZQorICogQ29weXJpZ2h0IDIwMDcgU0JTIFRlY2hub2xvZ2llcyBHbWJIICYgQ28uIEtHCisgKiBBbmQ6IG1wYzg2NDFfaHBjbi5kdHMgKE1QQzg2NDEgSFBDTiBEZXZpY2UgVHJlZSBTb3VyY2UpCisgKiBDb3B5cmlnaHQgMjAwNiBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKi8KKworLyoKKyAqIENvbXBpbGVkIHdpdGggZHRjIC1JIGR0cyAtTyBkdGIgLW8gZ2VmX3BwYzlhLmR0YiBnZWZfcHBjOWEuZHRzCisgKi8KKworL2R0cy12MS87CisKKy8geworCW1vZGVsID0gIkdFRl9QUEM5QSI7CisJY29tcGF0aWJsZSA9ICJnZWYscHBjOWEiOworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDE+OworCisJYWxpYXNlcyB7CisJCWV0aGVybmV0MCA9ICZlbmV0MDsKKwkJZXRoZXJuZXQxID0gJmVuZXQxOworCQlzZXJpYWwwID0gJnNlcmlhbDA7CisJCXNlcmlhbDEgPSAmc2VyaWFsMTsKKwkJcGNpMCA9ICZwY2kwOworCX07CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCVBvd2VyUEMsODY0MUAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MD47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQlkLWNhY2hlLXNpemUgPSA8MzI3Njg+OwkJLy8gTDEsIDMySworCQkJaS1jYWNoZS1zaXplID0gPDMyNzY4PjsJCS8vIEwxLCAzMksKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsJLy8gRnJvbSB1Ym9vdAorCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZyb20gdWJvb3QKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZyb20gdWJvb3QKKwkJfTsKKwkJUG93ZXJQQyw4NjQxQDEgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwxPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWQtY2FjaGUtc2l6ZSA9IDwzMjc2OD47CQkvLyBMMSwgMzJLCisJCQlpLWNhY2hlLXNpemUgPSA8MzI3Njg+OwkJLy8gTDEsIDMySworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwkvLyBGcm9tIHVib290CisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gRnJvbSB1Ym9vdAorCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkJLy8gRnJvbSB1Ym9vdAorCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHgwIDB4NDAwMDAwMDA+OwkvLyBzZXQgYnkgdWJvb3QKKwl9OworCisJbG9jYWxidXNAZmVmMDUwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtbG9jYWxidXMiLCAic2ltcGxlLWJ1cyI7CisJCXJlZyA9IDwweGZlZjA1MDAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8MTkgMj47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCisJCXJhbmdlcyA9IDwwIDAgMHhmZjAwMDAwMCAweDAxMDAwMDAwCS8vIDE2TUIgQm9vdCBmbGFzaAorCQkJICAxIDAgMHhlODAwMDAwMCAweDA4MDAwMDAwCS8vIFBhZ2VkIEZsYXNoIDAKKwkJCSAgMiAwIDB4ZTAwMDAwMDAgMHgwODAwMDAwMAkvLyBQYWdlZCBGbGFzaCAxCisJCQkgIDMgMCAweGZjMTAwMDAwIDB4MDAwMjAwMDAJLy8gTlZSQU0KKwkJCSAgNCAwIDB4ZmMwMDAwMDAgMHgwMDAwODAwMAkvLyBGUEdBCisJCQkgIDUgMCAweGZjMDA4MDAwIDB4MDAwMDgwMDAJLy8gQUZJWCBGUEdBCisJCQkgIDYgMCAweGZkMDAwMDAwIDB4MDA4MDAwMDAJLy8gSU8gRlBHQSAoOC1iaXQpCisJCQkgIDcgMCAweGZkODAwMDAwIDB4MDA4MDAwMDA+OwkvLyBJTyBGUEdBICgzMi1iaXQpCisKKwkJLyogZmxhc2hAMCwwIGlzIGEgbWlycm9yIG9mIHBhcnQgb2YgdGhlIG1lbW9yeSBpbiBmbGFzaEAxLDAKKwkJZmxhc2hAMCwwIHsKKwkJCWNvbXBhdGlibGUgPSAiZ2VmLHBwYzlhLWZpcm13YXJlLW1pcnJvciIsICJjZmktZmxhc2giOworCQkJcmVnID0gPDB4MCAweDAgMHgxMDAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8ND47CisJCQlkZXZpY2Utd2lkdGggPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcGFydGl0aW9uQDAgeworCQkJCWxhYmVsID0gImZpcm13YXJlIjsKKwkJCQlyZWcgPSA8MHgwIDB4MTAwMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKwkJfTsKKwkJKi8KKworCQlmbGFzaEAxLDAgeworCQkJY29tcGF0aWJsZSA9ICJnZWYscHBjOWEtcGFnZWQtZmxhc2giLCAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwweDEgMHgwIDB4ODAwMDAwMD47CisJCQliYW5rLXdpZHRoID0gPDQ+OworCQkJZGV2aWNlLXdpZHRoID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCXBhcnRpdGlvbkAwIHsKKwkJCQlsYWJlbCA9ICJ1c2VyIjsKKwkJCQlyZWcgPSA8MHgwIDB4NzgwMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDc4MDAwMDAgeworCQkJCWxhYmVsID0gImZpcm13YXJlIjsKKwkJCQlyZWcgPSA8MHg3ODAwMDAwIDB4ODAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCQl9OworCisJCWZwZ2FANCwwIHsKKwkJCWNvbXBhdGlibGUgPSAiZ2VmLHBwYzlhLWZwZ2EtcmVncyI7CisJCQlyZWcgPSA8MHg0IDB4MCAweDQwPjsKKwkJfTsKKworCQl3ZHRANCwyMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZ2VmLHBwYzlhLWZwZ2Etd2R0IiwgImdlZixmcGdhLXdkdC0xLjAwIiwKKwkJCQkiZ2VmLGZwZ2Etd2R0IjsKKwkJCXJlZyA9IDwweDQgMHgyMDAwIDB4OD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MWEgMHg0PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdlZl9waWM+OworCQl9OworCQkvKiBTZWNvbmQgd2F0Y2hkb2cgYXZhaWxhYmxlLCBkcml2ZXIgY3VycmVudGx5IHN1cHBvcnRzIG9uZS4KKwkJd2R0QDQsMjAxMCB7CisJCQljb21wYXRpYmxlID0gImdlZixwcGM5YS1mcGdhLXdkdCIsICJnZWYsZnBnYS13ZHQtMS4wMCIsCisJCQkJImdlZixmcGdhLXdkdCI7CisJCQlyZWcgPSA8MHg0IDB4MjAxMCAweDg+OworCQkJaW50ZXJydXB0cyA9IDwweDFiIDB4ND47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnZWZfcGljPjsKKwkJfTsKKwkJKi8KKwkJZ2VmX3BpYzogcGljQDQsNDAwMCB7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQljb21wYXRpYmxlID0gImdlZixwcGM5YS1mcGdhLXBpYyIsICJnZWYsZnBnYS1waWMtMS4wMCI7CisJCQlyZWcgPSA8MHg0IDB4NDAwMCAweDIwPjsKKwkJCWludGVycnVwdHMgPSA8MHg4CisJCQkJICAgICAgMHg5PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCisJCX07CisJCWdlZl9ncGlvOiBncGlvQDcsMTQwMDAgeworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQljb21wYXRpYmxlID0gImdlZixwcGM5YS1ncGlvIiwgImdlZixzYmM2MTAtZ3BpbyI7CisJCQlyZWcgPSA8MHg3IDB4MTQwMDAgMHgyND47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCX07CisJfTsKKworCXNvY0BmZWYwMDAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1zb2MiLCAic2ltcGxlLWJ1cyI7CisJCXJhbmdlcyA9IDwweDAgMHhmZWYwMDAwMCAweDAwMTAwMDAwPjsKKwkJcmVnID0gPDB4ZmVmMDAwMDAgMHgxMDAwMDA+OwkvLyBDQ1NSQkFSIDFNCisJCWJ1cy1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OworCisJCWkyYzE6IGkyY0AzMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDB4MzAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MmIgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZGZzcnI7CisKKwkJCWh3bW9uQDQ4IHsKKwkJCQljb21wYXRpYmxlID0gIm5hdGlvbmFsLGxtOTIiOworCQkJCXJlZyA9IDwweDQ4PjsKKwkJCX07CisKKwkJCWh3bW9uQDRjIHsKKwkJCQljb21wYXRpYmxlID0gImFkaSxhZHQ3NDYxIjsKKwkJCQlyZWcgPSA8MHg0Yz47CisJCQl9OworCisJCQlydGNANTEgeworCQkJCWNvbXBhdGlibGUgPSAiZXBzb24scng4NTgxIjsKKwkJCQlyZWcgPSA8MHgwMDAwMDA1MT47CisJCQl9OworCisJCQlldGlANmIgeworCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTY4MiI7CisJCQkJcmVnID0gPDB4NmI+OworCQkJfTsKKwkJfTsKKworCQlpMmMyOiBpMmNAMzEwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDMxMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwweDJiIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWRmc3JyOworCQl9OworCisJCWRtYUAyMTMwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1kbWEiLCAiZnNsLGVsb3BsdXMtZG1hIjsKKwkJCXJlZyA9IDwweDIxMzAwIDB4ND47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjExMDAgMHgyMDA+OworCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCWRtYS1jaGFubmVsQDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtZG1hLWNoYW5uZWwiLAorCQkJCQkgICAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIwIDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDgwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWRtYS1jaGFubmVsIiwKKwkJCQkJICAgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjEgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAMTAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWRtYS1jaGFubmVsIiwKKwkJCQkJICAgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgxMDAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwyPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIyIDI+OworCQkJfTsKKwkJCWRtYS1jaGFubmVsQDE4MCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1kbWEtY2hhbm5lbCIsCisJCQkJCSAgICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MTgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mz47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMyAyPjsKKwkJCX07CisJCX07CisKKwkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MHgxZCAweDIgMHgxZSAweDIgMHgyMiAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAiZ21paSI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2VmX3BpYz47CisJCQkJCWludGVycnVwdHMgPSA8MHg5IDB4ND47CisJCQkJCXJlZyA9IDwxPjsKKwkJCQl9OworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2VmX3BpYz47CisJCQkJCWludGVycnVwdHMgPSA8MHg4IDB4ND47CisJCQkJCXJlZyA9IDwzPjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCQllbmV0MTogZXRoZXJuZXRAMjYwMDAgeworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwweDFmIDB4MiAweDIwIDB4MiAweDIxIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJnbWlpIjsKKwkJfTsKKworCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8MHg0NTAwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8MHgyYSAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJc2VyaWFsMTogc2VyaWFsQDQ2MDAgeworCQkJY2VsbC1pbmRleCA9IDwxPjsKKwkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CisJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJcmVnID0gPDB4NDYwMCAweDEwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MWMgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQl9OworCisJCW1waWM6IHBpY0A0MDAwMCB7CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCXJlZyA9IDwweDQwMDAwIDB4NDAwMDA+OworCQkJY29tcGF0aWJsZSA9ICJjaHJwLG9wZW4tcGljIjsKKwkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKKwkJfTsKKworCQlnbG9iYWwtdXRpbGl0aWVzQGUwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtZ3V0cyI7CisJCQlyZWcgPSA8MHhlMDAwMCAweDEwMDA+OworCQkJZnNsLGhhcy1yc3RjcjsKKwkJfTsKKwl9OworCisJcGNpMDogcGNpZUBmZWYwODAwMCB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtcGNpZSI7CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJcmVnID0gPDB4ZmVmMDgwMDAgMHgxMDAwPjsKKwkJYnVzLXJhbmdlID0gPDB4MCAweGZmPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHg0MDAwMDAwMAorCQkJICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZmUwMDAwMDAgMHgwIDB4MDA0MDAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJaW50ZXJydXB0cyA9IDwweDE4IDB4Mj47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMHgwIDB4MCAweDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJMHgwMDAwIDB4MCAweDAgMHgxICZtcGljIDB4MCAweDEKKwkJCTB4MDAwMCAweDAgMHgwIDB4MiAmbXBpYyAweDEgMHgxCisJCQkweDAwMDAgMHgwIDB4MCAweDMgJm1waWMgMHgyIDB4MQorCQkJMHgwMDAwIDB4MCAweDAgMHg0ICZtcGljIDB4MyAweDEKKwkJPjsKKworCQlwY2llQDAgeworCQkJcmVnID0gPDAgMCAwIDAgMD47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDB4MCAweDgwMDAwMDAwCisJCQkJICAweDAyMDAwMDAwIDB4MCAweDgwMDAwMDAwCisJCQkJICAweDAgMHg0MDAwMDAwMAorCisJCQkJICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwCisJCQkJICAweDAgMHgwMDQwMDAwMD47CisJCX07CisJfTsKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzMxMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzMxMC5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTU2OTExNwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjMzEwLmR0cwpAQCAtMCwwICsxLDM2NyBAQAorLyoKKyAqIEdFIEZhbnVjIFNCQzMxMCBEZXZpY2UgVHJlZSBTb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgMjAwOCBHRSBGYW51YyBJbnRlbGxpZ2VudCBQbGF0Zm9ybXMgRW1iZWRkZWQgU3lzdGVtcywgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogQmFzZWQgb246IFNCUyBDTTYgRGV2aWNlIFRyZWUgU291cmNlCisgKiBDb3B5cmlnaHQgMjAwNyBTQlMgVGVjaG5vbG9naWVzIEdtYkggJiBDby4gS0cKKyAqIEFuZDogbXBjODY0MV9ocGNuLmR0cyAoTVBDODY0MSBIUENOIERldmljZSBUcmVlIFNvdXJjZSkKKyAqIENvcHlyaWdodCAyMDA2IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqLworCisvKgorICogQ29tcGlsZWQgd2l0aCBkdGMgLUkgZHRzIC1PIGR0YiAtbyBnZWZfc2JjMzEwLmR0YiBnZWZfc2JjMzEwLmR0cworICovCisKKy9kdHMtdjEvOworCisvIHsKKwltb2RlbCA9ICJHRUZfU0JDMzEwIjsKKwljb21wYXRpYmxlID0gImdlZixzYmMzMTAiOworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDE+OworCisJYWxpYXNlcyB7CisJCWV0aGVybmV0MCA9ICZlbmV0MDsKKwkJZXRoZXJuZXQxID0gJmVuZXQxOworCQlzZXJpYWwwID0gJnNlcmlhbDA7CisJCXNlcmlhbDEgPSAmc2VyaWFsMTsKKwkJcGNpMCA9ICZwY2kwOworCX07CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCVBvd2VyUEMsODY0MUAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MD47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CS8vIDMyIGJ5dGVzCisJCQlkLWNhY2hlLXNpemUgPSA8MzI3Njg+OwkJLy8gTDEsIDMySworCQkJaS1jYWNoZS1zaXplID0gPDMyNzY4PjsJCS8vIEwxLCAzMksKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsJLy8gRnJvbSB1Ym9vdAorCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZyb20gdWJvb3QKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIEZyb20gdWJvb3QKKwkJfTsKKwkJUG93ZXJQQyw4NjQxQDEgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwxPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsJLy8gMzIgYnl0ZXMKKwkJCWQtY2FjaGUtc2l6ZSA9IDwzMjc2OD47CQkvLyBMMSwgMzJLCisJCQlpLWNhY2hlLXNpemUgPSA8MzI3Njg+OwkJLy8gTDEsIDMySworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwkvLyBGcm9tIHVib290CisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gRnJvbSB1Ym9vdAorCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwkJLy8gRnJvbSB1Ym9vdAorCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHgwIDB4NDAwMDAwMDA+OwkvLyBzZXQgYnkgdWJvb3QKKwl9OworCisJbG9jYWxidXNAZmVmMDUwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwyPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtbG9jYWxidXMiLCAic2ltcGxlLWJ1cyI7CisJCXJlZyA9IDwweGZlZjA1MDAwIDB4MTAwMD47CisJCWludGVycnVwdHMgPSA8MTkgMj47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCisJCXJhbmdlcyA9IDwwIDAgMHhmZjAwMDAwMCAweDAxMDAwMDAwCS8vIDE2TUIgQm9vdCBmbGFzaAorCQkJICAxIDAgMHhlMDAwMDAwMCAweDA4MDAwMDAwCS8vIFBhZ2VkIEZsYXNoIDAKKwkJCSAgMiAwIDB4ZTgwMDAwMDAgMHgwODAwMDAwMAkvLyBQYWdlZCBGbGFzaCAxCisJCQkgIDMgMCAweGZjMTAwMDAwIDB4MDAwMjAwMDAJLy8gTlZSQU0KKwkJCSAgNCAwIDB4ZmMwMDAwMDAgMHgwMDAxMDAwMD47CS8vIEZQR0EKKworCQkvKiBmbGFzaEAwLDAgaXMgYSBtaXJyb3Igb2YgcGFydCBvZiB0aGUgbWVtb3J5IGluIGZsYXNoQDEsMAorCQlmbGFzaEAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQkJcmVnID0gPDAgMCAweDAxMDAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCQlkZXZpY2Utd2lkdGggPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJcGFydGl0aW9uQDAgeworCQkJCWxhYmVsID0gImZpcm13YXJlIjsKKwkJCQlyZWcgPSA8MHgwMDAwMDAwMCAweDAxMDAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCQl9OworCQkqLworCisJCWZsYXNoQDEsMCB7CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MSAwIDB4ODAwMDAwMD47CisJCQliYW5rLXdpZHRoID0gPDI+OworCQkJZGV2aWNlLXdpZHRoID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCXBhcnRpdGlvbkAwIHsKKwkJCQlsYWJlbCA9ICJ1c2VyIjsKKwkJCQlyZWcgPSA8MHgwMDAwMDAwMCAweDA3ODAwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANzgwMDAwMCB7CisJCQkJbGFiZWwgPSAiZmlybXdhcmUiOworCQkJCXJlZyA9IDwweDA3ODAwMDAwIDB4MDA4MDAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisJCX07CisKKwkJZnBnYUA0LDAgeworCQkJY29tcGF0aWJsZSA9ICJnZWYsZnBnYS1yZWdzIjsKKwkJCXJlZyA9IDwweDQgMHgwIDB4NDA+OworCQl9OworCisJCXdkdEA0LDIwMDAgeworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCWRldmljZV90eXBlID0gIndhdGNoZG9nIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2VmLGZwZ2Etd2R0IjsKKwkJCXJlZyA9IDwweDQgMHgyMDAwIDB4OD47CisJCQlpbnRlcnJ1cHRzID0gPDB4MWEgMHg0PjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdlZl9waWM+OworCQl9OworLyoKKwkJd2R0QDQsMjAxMCB7CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJZGV2aWNlX3R5cGUgPSAid2F0Y2hkb2ciOworCQkJY29tcGF0aWJsZSA9ICJnZWYsZnBnYS13ZHQiOworCQkJcmVnID0gPDB4NCAweDIwMTAgMHg4PjsKKwkJCWludGVycnVwdHMgPSA8MHgxYiAweDQ+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2VmX3BpYz47CisJCX07CisqLworCQlnZWZfcGljOiBwaWNANCw0MDAwIHsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCWNvbXBhdGlibGUgPSAiZ2VmLGZwZ2EtcGljIjsKKwkJCXJlZyA9IDwweDQgMHg0MDAwIDB4MjA+OworCQkJaW50ZXJydXB0cyA9IDwweDgKKwkJCQkgICAgICAweDk+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisKKwkJfTsKKwkJZ2VmX2dwaW86IGdwaW9ANCw4MDAwIHsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJY29tcGF0aWJsZSA9ICJnZWYsc2JjMzEwLWdwaW8iOworCQkJcmVnID0gPDB4NCAweDgwMDAgMHgyND47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCX07CisJfTsKKworCXNvY0BmZWYwMDAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJZGV2aWNlX3R5cGUgPSAic29jIjsKKwkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJcmFuZ2VzID0gPDB4MCAweGZlZjAwMDAwIDB4MDAxMDAwMDA+OworCQlyZWcgPSA8MHhmZWYwMDAwMCAweDEwMDAwMD47CS8vIENDU1JCQVIgMU0KKwkJYnVzLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CisKKwkJaTJjMTogaTJjQDMwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MHgyYiAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlkZnNycjsKKworCQkJcnRjQDUxIHsKKwkJCQljb21wYXRpYmxlID0gImVwc29uLHJ4ODU4MSI7CisJCQkJcmVnID0gPDB4MDAwMDAwNTE+OworCQkJfTsKKwkJfTsKKworCQlpMmMyOiBpMmNAMzEwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDMxMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwweDJiIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWRmc3JyOworCisJCQlod21vbkA0OCB7CisJCQkJY29tcGF0aWJsZSA9ICJuYXRpb25hbCxsbTkyIjsKKwkJCQlyZWcgPSA8MHg0OD47CisJCQl9OworCisJCQlod21vbkA0YyB7CisJCQkJY29tcGF0aWJsZSA9ICJhZGksYWR0NzQ2MSI7CisJCQkJcmVnID0gPDB4NGM+OworCQkJfTsKKworCQkJZXRpQDZiIHsKKwkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczE2ODIiOworCQkJCXJlZyA9IDwweDZiPjsKKwkJCX07CisJCX07CisKKwkJZG1hQDIxMzAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWRtYSIsICJmc2wsZWxvcGx1cy1kbWEiOworCQkJcmVnID0gPDB4MjEzMDAgMHg0PjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyMTEwMCAweDIwMD47CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJZG1hLWNoYW5uZWxAMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1kbWEtY2hhbm5lbCIsCisJCQkJCSAgICJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjAgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtZG1hLWNoYW5uZWwiLAorCQkJCQkgICAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDgwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8MT47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMSAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEAxMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg2NDEtZG1hLWNoYW5uZWwiLAorCQkJCQkgICAiZnNsLGVsb3BsdXMtZG1hLWNoYW5uZWwiOworCQkJCXJlZyA9IDwweDEwMCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDI+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjIgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAMTgwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NjQxLWRtYS1jaGFubmVsIiwKKwkJCQkJICAgImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgxODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIzIDI+OworCQkJfTsKKwkJfTsKKworCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiZVRTRUMiOworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwweDFkIDB4MiAweDFlIDB4MiAweDIyIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJnbWlpIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnZWZfcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDkgMHg0PjsKKwkJCQkJcmVnID0gPDE+OworCQkJCX07CisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnZWZfcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDggMHg0PjsKKwkJCQkJcmVnID0gPDM+OworCQkJCX07CisJCQl9OworCQl9OworCisJCWVuZXQxOiBldGhlcm5ldEAyNjAwMCB7CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDB4MWYgMHgyIDB4MjAgMHgyIDB4MjEgMHgyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gImdtaWkiOworCQl9OworCisJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOworCQkJY29tcGF0aWJsZSA9ICJuczE2NTUwIjsKKwkJCXJlZyA9IDwweDQ1MDAgMHgxMDA+OworCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OworCQkJaW50ZXJydXB0cyA9IDwweDJhIDB4Mj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQlzZXJpYWwxOiBzZXJpYWxANDYwMCB7CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8MHg0NjAwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8MHgxYyAweDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJbXBpYzogcGljQDQwMDAwIHsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJcmVnID0gPDB4NDAwMDAgMHg0MDAwMD47CisJCQljb21wYXRpYmxlID0gImNocnAsb3Blbi1waWMiOworCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOworCQl9OworCisJCWdsb2JhbC11dGlsaXRpZXNAZTAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1ndXRzIjsKKwkJCXJlZyA9IDwweGUwMDAwIDB4MTAwMD47CisJCQlmc2wsaGFzLXJzdGNyOworCQl9OworCX07CisKKwlwY2kwOiBwY2llQGZlZjA4MDAwIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1wY2llIjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQlyZWcgPSA8MHhmZWYwODAwMCAweDEwMDA+OworCQlidXMtcmFuZ2UgPSA8MHgwIDB4ZmY+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDQwMDAwMDAwCisJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhmZTAwMDAwMCAweDAgMHgwMDQwMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQlpbnRlcnJ1cHRzID0gPDB4MTggMHgyPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CisJCWludGVycnVwdC1tYXAgPSA8CisJCQkweDAwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgwIDB4MgorCQkJMHgwMDAwIDB4MCAweDAgMHgyICZtcGljIDB4MSAweDIKKwkJCTB4MDAwMCAweDAgMHgwIDB4MyAmbXBpYyAweDIgMHgyCisJCQkweDAwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgzIDB4MgorCQk+OworCisJCXBjaWVAMCB7CisJCQlyZWcgPSA8MCAwIDAgMCAwPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAKKwkJCQkgIDB4MCAweDQwMDAwMDAwCisKKwkJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MCAweDAwNDAwMDAwPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjNjEwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9nZWZfc2JjNjEwLmR0cwppbmRleCBlNzhjMzU1Li42NTgyZGJkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvZ2VmX3NiYzYxMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2dlZl9zYmM2MTAuZHRzCkBAIC03MSw3ICs3MSw3IEBACiAJCSNhZGRyZXNzLWNlbGxzID0gPDI+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODY0MS1sb2NhbGJ1cyIsICJzaW1wbGUtYnVzIjsKLQkJcmVnID0gPDB4ZjgwMDUwMDAgMHgxMDAwPjsKKwkJcmVnID0gPDB4ZmVmMDUwMDAgMHgxMDAwPjsKIAkJaW50ZXJydXB0cyA9IDwxOSAyPjsKIAkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAKQEAgLTIwMiwzNCArMjAyLDM3IEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmdlZl9waWM+OwotCQkJCWludGVycnVwdHMgPSA8MHg5IDB4ND47Ci0JCQkJcmVnID0gPDE+OwotCQkJfTsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZnZWZfcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDB4OCAweDQ+OwotCQkJCXJlZyA9IDwzPjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MHgxZCAweDIgMHgxZSAweDIgMHgyMiAweDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAiZ21paSI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2VmX3BpYz47CisJCQkJCWludGVycnVwdHMgPSA8MHg5IDB4ND47CisJCQkJCXJlZyA9IDwxPjsKKwkJCQl9OworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmZ2VmX3BpYz47CisJCQkJCWludGVycnVwdHMgPSA8MHg4IDB4ND47CisJCQkJCXJlZyA9IDwzPjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjYwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2tzaTg1NjAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2tzaTg1NjAuZHRzCmluZGV4IDNiZmZmNDcuLjMwOGZlN2MgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9rc2k4NTYwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMva3NpODU2MC5kdHMKQEAgLTEyNCw2NyArMTI0LDcyIEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewkJCQkJLyogRm9yIFRTRUNzICovCi0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlQSFkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJcmVnID0gPDB4MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0KLQkJCVBIWTI6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlyZWcgPSA8MHgyPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQkvKiBNYWMgYWRkcmVzcyBmaWxsZWQgaW4gYnkgYm9vdHdyYXBwZXIgKi8KIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwweDFkIDB4MiAweDFlIDB4MiAweDIyIDB4Mj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmUEhZMT47CisKKwkJCW1kaW9ANTIwIHsJCQkJCS8qIEZvciBUU0VDcyAqLworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJUEhZMTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCVBIWTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCXJlZyA9IDwweDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJLyogTWFjIGFkZHJlc3MgZmlsbGVkIGluIGJ5IGJvb3R3cmFwcGVyICovCiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MHgyMyAweDIgMHgyNCAweDIgMHgyOCAweDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JlBIWTI+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCW1waWM6IHBpY0A0MDAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwLmR0cwppbmRleCAzZjdhNWRjLi5kZTMwYjNmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbGl0ZTUyMDAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMC5kdHMKQEAgLTE3LDYgKzE3LDcgQEAKIAljb21wYXRpYmxlID0gImZzbCxsaXRlNTIwMCI7CiAJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJI3NpemUtY2VsbHMgPSA8MT47CisJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCiAJY3B1cyB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwpAQCAtNTgsOTYgKzU5LDc0IEBACiAJCQkvLyA1MjAwIGludGVycnVwdHMgYXJlIGVuY29kZWQgaW50byB0d28gbGV2ZWxzOwogCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OwotCQkJZGV2aWNlX3R5cGUgPSAiaW50ZXJydXB0LWNvbnRyb2xsZXIiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1waWMiOwogCQkJcmVnID0gPDB4NTAwIDB4ODA+OwogCQl9OwogCiAJCXRpbWVyQDYwMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1ncHQiOwotCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCXJlZyA9IDwweDYwMCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSA5IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJZnNsLGhhcy13ZHQ7CiAJCX07CiAKIAkJdGltZXJANjEwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWdwdCI7Ci0JCQljZWxsLWluZGV4ID0gPDE+OwogCQkJcmVnID0gPDB4NjEwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDEwIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDYyMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1ncHQiOwotCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCXJlZyA9IDwweDYyMCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxMSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2MzAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZ3B0IjsKLQkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQlyZWcgPSA8MHg2MzAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTIgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjQwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWdwdCI7Ci0JCQljZWxsLWluZGV4ID0gPDQ+OwogCQkJcmVnID0gPDB4NjQwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDEzIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDY1MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1ncHQiOwotCQkJY2VsbC1pbmRleCA9IDw1PjsKIAkJCXJlZyA9IDwweDY1MCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxNCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2NjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZ3B0IjsKLQkJCWNlbGwtaW5kZXggPSA8Nj47CiAJCQlyZWcgPSA8MHg2NjAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTUgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjcwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWdwdCI7Ci0JCQljZWxsLWluZGV4ID0gPDc+OwogCQkJcmVnID0gPDB4NjcwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDE2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXJ0Y0A4MDAgewkvLyBSZWFsIHRpbWUgY2xvY2sKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtcnRjIjsKIAkJCXJlZyA9IDwweDgwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgNSAwIDEgNiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQljYW5AOTAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtbXNjYW4iOwotCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCXJlZyA9IDwweDkwMCAweDgwPjsKIAkJfTsKIAogCQljYW5AOTgwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtbXNjYW4iOwotCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWludGVycnVwdHMgPSA8MiAxOCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCXJlZyA9IDwweDk4MCAweDgwPjsKIAkJfTsKIApAQCAtMTU1LDM5ICsxMzQsMzMgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZ3BpbyI7CiAJCQlyZWcgPSA8MHhiMDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgNyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlncGlvQGMwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWdwaW8td2t1cCI7CiAJCQlyZWcgPSA8MHhjMDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgOCAwIDAgMyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlzcGlAZjAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtc3BpIjsKIAkJCXJlZyA9IDwweGYwMCAweDIwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxMyAwIDIgMTQgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdXNiQDEwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1vaGNpIiwib2hjaS1iZSI7CiAJCQlyZWcgPSA8MHgxMDAwIDB4ZmY+OwogCQkJaW50ZXJydXB0cyA9IDwyIDYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJZG1hLWNvbnRyb2xsZXJAMTIwMCB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJkbWEtY29udHJvbGxlciI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWJlc3Rjb21tIjsKIAkJCXJlZyA9IDwweDEyMDAgMHg4MD47CiAJCQlpbnRlcnJ1cHRzID0gPDMgMCAwICAzIDEgMCAgMyAyIDAgIDMgMyAwCiAJCQkgICAgICAgICAgICAgIDMgNCAwICAzIDUgMCAgMyA2IDAgIDMgNyAwCiAJCQkgICAgICAgICAgICAgIDMgOCAwICAzIDkgMCAgMyAxMCAwICAzIDExIDAKIAkJCSAgICAgICAgICAgICAgMyAxMiAwICAzIDEzIDAgIDMgMTQgMCAgMyAxNSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl4bGJAMWYwMCB7CkBAIC0xOTYsMTMgKzE2OSwxMCBAQAogCQl9OwogCiAJCXNlcmlhbEAyMDAwIHsJCS8vIFBTQzEKLQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKLQkJCXBvcnQtbnVtYmVyID0gPDA+OyAgLy8gTG9naWNhbCBwb3J0IGFzc2lnbm1lbnQKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlyZWcgPSA8MHgyMDAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCS8vIFBTQzIgaW4gYWM5NyBtb2RlIGV4YW1wbGUKQEAgLTIxMSw3ICsxODEsNiBAQAogCQkvLwljZWxsLWluZGV4ID0gPDE+OwogCQkvLwlyZWcgPSA8MHgyMjAwIDB4MTAwPjsKIAkJLy8JaW50ZXJydXB0cyA9IDwyIDIgMD47Ci0JCS8vCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJLy99OwogCiAJCS8vIFBTQzMgaW4gQ09ERUMgbW9kZSBleGFtcGxlCkBAIC0yMjAsMjcgKzE4OSwyMiBAQAogCQkvLwljZWxsLWluZGV4ID0gPDI+OwogCQkvLwlyZWcgPSA8MHgyNDAwIDB4MTAwPjsKIAkJLy8JaW50ZXJydXB0cyA9IDwyIDMgMD47Ci0JCS8vCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJLy99OwogCiAJCS8vIFBTQzQgaW4gdWFydCBtb2RlIGV4YW1wbGUKIAkJLy9zZXJpYWxAMjYwMCB7CQkvLyBQU0M0Ci0JCS8vCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCS8vCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOwogCQkvLwljZWxsLWluZGV4ID0gPDM+OwogCQkvLwlyZWcgPSA8MHgyNjAwIDB4MTAwPjsKIAkJLy8JaW50ZXJydXB0cyA9IDwyIDExIDA+OwotCQkvLwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCS8vfTsKIAogCQkvLyBQU0M1IGluIHVhcnQgbW9kZSBleGFtcGxlCiAJCS8vc2VyaWFsQDI4MDAgewkJLy8gUFNDNQotCQkvLwlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkvLwljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKIAkJLy8JY2VsbC1pbmRleCA9IDw0PjsKIAkJLy8JcmVnID0gPDB4MjgwMCAweDEwMD47CiAJCS8vCWludGVycnVwdHMgPSA8MiAxMiAwPjsKLQkJLy8JaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkvL307CiAKIAkJLy8gUFNDNiBpbiBzcGkgbW9kZSBleGFtcGxlCkBAIC0yNDksMTYgKzIxMywxMyBAQAogCQkvLwljZWxsLWluZGV4ID0gPDU+OwogCQkvLwlyZWcgPSA8MHgyYzAwIDB4MTAwPjsKIAkJLy8JaW50ZXJydXB0cyA9IDwyIDQgMD47Ci0JCS8vCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJLy99OwogCiAJCWV0aGVybmV0QDMwMDAgewotCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWZlYyI7CiAJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyIDUgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKIAkJfTsKIApAQCAtMjY4LDMwICsyMjksMjQgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtbWRpbyI7CiAJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsJLy8gZmVjIHJhbmdlLCBzaW5jZSB3ZSBuZWVkIHRvIHNldHVwIGZlYyBpbnRlcnJ1cHRzCiAJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsJLy8gdGhlc2UgYXJlIGZvciAibWlpIGNvbW1hbmQgZmluaXNoZWQiLCBub3QgbGluayBjaGFuZ2VzICYgY28uCi0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAKIAkJCXBoeTA6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwogCQkJCXJlZyA9IDwxPjsKIAkJCX07CiAJCX07CiAKIAkJYXRhQDNhMDAgewotCQkJZGV2aWNlX3R5cGUgPSAiYXRhIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtYXRhIjsKIAkJCXJlZyA9IDwweDNhMDAgMHgxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDcgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJaTJjQDNkMDAgewogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwogCQkJcmVnID0gPDB4M2QwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxNSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCX07CiAKQEAgLTI5OSwxNCArMjU0LDEyIEBACiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKLQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJZnNsNTIwMC1jbG9ja2luZzsKIAkJfTsKIAkJc3JhbUA4MDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtc3JhbSIsInNyYW0iOworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1zcmFtIjsKIAkJCXJlZyA9IDwweDgwMDAgMHg0MDAwPjsKIAkJfTsKIAl9OwpAQCAtMzI1LDcgKzI3OCw2IEBACiAJCQkJIDB4YzAwMCAwIDAgNCAmbXBjNTIwMF9waWMgMCAwIDM+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8vIEZyb20gYm9vdCBsb2FkZXIKIAkJaW50ZXJydXB0cyA9IDwyIDggMCAyIDkgMCAyIDEwIDA+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCWJ1cy1yYW5nZSA9IDwwIDA+OwogCQlyYW5nZXMgPSA8MHg0MjAwMDAwMCAwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAwIDB4MjAwMDAwMDAKIAkJCSAgMHgwMjAwMDAwMCAwIDB4YTAwMDAwMDAgMHhhMDAwMDAwMCAwIDB4MTAwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9saXRlNTIwMGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwYi5kdHMKaW5kZXggNjNlM2JiNC4uYzYzZTM1NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL2xpdGU1MjAwYi5kdHMKQEAgLTE3LDYgKzE3LDcgQEAKIAljb21wYXRpYmxlID0gImZzbCxsaXRlNTIwMGIiOwogCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCSNzaXplLWNlbGxzID0gPDE+OworCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAogCWNwdXMgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKQEAgLTU4LDEzNiArNTksMTEyIEBACiAJCQkvLyA1MjAwIGludGVycnVwdHMgYXJlIGVuY29kZWQgaW50byB0d28gbGV2ZWxzOwogCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CiAJCQkjaW50ZXJydXB0LWNlbGxzID0gPDM+OwotCQkJZGV2aWNlX3R5cGUgPSAiaW50ZXJydXB0LWNvbnRyb2xsZXIiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcGljIiwiZnNsLG1wYzUyMDAtcGljIjsKIAkJCXJlZyA9IDwweDUwMCAweDgwPjsKIAkJfTsKIAogCQl0aW1lckA2MDAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwogCQkJcmVnID0gPDB4NjAwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDkgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlmc2wsaGFzLXdkdDsKIAkJfTsKIAogCQl0aW1lckA2MTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7Ci0JCQljZWxsLWluZGV4ID0gPDE+OwogCQkJcmVnID0gPDB4NjEwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDEwIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDYyMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKLQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQlyZWcgPSA8MHg2MjAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTEgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjMwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwotCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCXJlZyA9IDwweDYzMCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxMiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2NDAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7Ci0JCQljZWxsLWluZGV4ID0gPDQ+OwogCQkJcmVnID0gPDB4NjQwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDEzIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDY1MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKLQkJCWNlbGwtaW5kZXggPSA8NT47CiAJCQlyZWcgPSA8MHg2NTAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTQgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjYwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwotCQkJY2VsbC1pbmRleCA9IDw2PjsKIAkJCXJlZyA9IDwweDY2MCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxNSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2NzAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7Ci0JCQljZWxsLWluZGV4ID0gPDc+OwogCQkJcmVnID0gPDB4NjcwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDE2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXJ0Y0A4MDAgewkvLyBSZWFsIHRpbWUgY2xvY2sKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXJ0YyIsImZzbCxtcGM1MjAwLXJ0YyI7CiAJCQlyZWcgPSA8MHg4MDAgMHgxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDUgMCAxIDYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJY2FuQDkwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tc2NhbiIsImZzbCxtcGM1MjAwLW1zY2FuIjsKLQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTcgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlyZWcgPSA8MHg5MDAgMHg4MD47CiAJCX07CiAKIAkJY2FuQDk4MCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tc2NhbiIsImZzbCxtcGM1MjAwLW1zY2FuIjsKLQkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTggMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlyZWcgPSA8MHg5ODAgMHg4MD47CiAJCX07CiAKLQkJZ3Bpb0BiMDAgeworCQlncGlvX3NpbXBsZTogZ3Bpb0BiMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3BpbyIsImZzbCxtcGM1MjAwLWdwaW8iOwogCQkJcmVnID0gPDB4YjAwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDcgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJfTsKIAotCQlncGlvQGMwMCB7CisJCWdwaW9fd2t1cDogZ3Bpb0BjMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3Bpby13a3VwIiwiZnNsLG1wYzUyMDAtZ3Bpby13a3VwIjsKIAkJCXJlZyA9IDwweGMwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MSA4IDAgMCAzIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCX07CiAKIAkJc3BpQGYwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1zcGkiLCJmc2wsbXBjNTIwMC1zcGkiOwogCQkJcmVnID0gPDB4ZjAwIDB4MjA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDEzIDAgMiAxNCAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl1c2JAMTAwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1vaGNpIiwiZnNsLG1wYzUyMDAtb2hjaSIsIm9oY2ktYmUiOwogCQkJcmVnID0gPDB4MTAwMCAweGZmPjsKIAkJCWludGVycnVwdHMgPSA8MiA2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWRtYS1jb250cm9sbGVyQDEyMDAgewotCQkJZGV2aWNlX3R5cGUgPSAiZG1hLWNvbnRyb2xsZXIiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItYmVzdGNvbW0iLCJmc2wsbXBjNTIwMC1iZXN0Y29tbSI7CiAJCQlyZWcgPSA8MHgxMjAwIDB4ODA+OwogCQkJaW50ZXJydXB0cyA9IDwzIDAgMCAgMyAxIDAgIDMgMiAwICAzIDMgMAogCQkJICAgICAgICAgICAgICAzIDQgMCAgMyA1IDAgIDMgNiAwICAzIDcgMAogCQkJICAgICAgICAgICAgICAzIDggMCAgMyA5IDAgIDMgMTAgMCAgMyAxMSAwCiAJCQkgICAgICAgICAgICAgIDMgMTIgMCAgMyAxMyAwICAzIDE0IDAgIDMgMTUgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJeGxiQDFmMDAgewpAQCAtMTk2LDEzICsxNzMsMTAgQEAKIAkJfTsKIAogCQlzZXJpYWxAMjAwMCB7CQkvLyBQU0MxCi0JCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7Ci0JCQlwb3J0LW51bWJlciA9IDwwPjsgIC8vIExvZ2ljYWwgcG9ydCBhc3NpZ25tZW50CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJcmVnID0gPDB4MjAwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQkvLyBQU0MyIGluIGFjOTcgbW9kZSBleGFtcGxlCkBAIC0yMTEsNyArMTg1LDYgQEAKIAkJLy8JY2VsbC1pbmRleCA9IDwxPjsKIAkJLy8JcmVnID0gPDB4MjIwMCAweDEwMD47CiAJCS8vCWludGVycnVwdHMgPSA8MiAyIDA+OwotCQkvLwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCS8vfTsKIAogCQkvLyBQU0MzIGluIENPREVDIG1vZGUgZXhhbXBsZQpAQCAtMjIwLDI3ICsxOTMsMjIgQEAKIAkJLy8JY2VsbC1pbmRleCA9IDwyPjsKIAkJLy8JcmVnID0gPDB4MjQwMCAweDEwMD47CiAJCS8vCWludGVycnVwdHMgPSA8MiAzIDA+OwotCQkvLwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCS8vfTsKIAogCQkvLyBQU0M0IGluIHVhcnQgbW9kZSBleGFtcGxlCiAJCS8vc2VyaWFsQDI2MDAgewkJLy8gUFNDNAotCQkvLwlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkvLwljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKIAkJLy8JY2VsbC1pbmRleCA9IDwzPjsKIAkJLy8JcmVnID0gPDB4MjYwMCAweDEwMD47CiAJCS8vCWludGVycnVwdHMgPSA8MiAxMSAwPjsKLQkJLy8JaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkvL307CiAKIAkJLy8gUFNDNSBpbiB1YXJ0IG1vZGUgZXhhbXBsZQogCQkvL3NlcmlhbEAyODAwIHsJCS8vIFBTQzUKLQkJLy8JZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJLy8JY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7CiAJCS8vCWNlbGwtaW5kZXggPSA8ND47CiAJCS8vCXJlZyA9IDwweDI4MDAgMHgxMDA+OwogCQkvLwlpbnRlcnJ1cHRzID0gPDIgMTIgMD47Ci0JCS8vCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJLy99OwogCiAJCS8vIFBTQzYgaW4gc3BpIG1vZGUgZXhhbXBsZQpAQCAtMjQ5LDQ5ICsyMTcsNDAgQEAKIAkJLy8JY2VsbC1pbmRleCA9IDw1PjsKIAkJLy8JcmVnID0gPDB4MmMwMCAweDEwMD47CiAJCS8vCWludGVycnVwdHMgPSA8MiA0IDA+OwotCQkvLwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCS8vfTsKIAogCQlldGhlcm5ldEAzMDAwIHsKLQkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZmVjIiwiZnNsLG1wYzUyMDAtZmVjIjsKIAkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQl9OwogCiAJCW1kaW9AMzAwMCB7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbWRpbyIsICJmc2wsbXBjNTIwMC1tZGlvIjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW1kaW8iLCJmc2wsbXBjNTIwMC1tZGlvIjsKIAkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OwkvLyBmZWMgcmFuZ2UsIHNpbmNlIHdlIG5lZWQgdG8gc2V0dXAgZmVjIGludGVycnVwdHMKIAkJCWludGVycnVwdHMgPSA8MiA1IDA+OwkvLyB0aGVzZSBhcmUgZm9yICJtaWkgY29tbWFuZCBmaW5pc2hlZCIsIG5vdCBsaW5rIGNoYW5nZXMgJiBjby4KLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAogCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CiAJCQkJcmVnID0gPDA+OwogCQkJfTsKIAkJfTsKIAogCQlhdGFAM2EwMCB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJhdGEiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItYXRhIiwiZnNsLG1wYzUyMDAtYXRhIjsKIAkJCXJlZyA9IDwweDNhMDAgMHgxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDcgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJaTJjQDNkMDAgewogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwotCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCXJlZyA9IDwweDNkMDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTUgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCkBAIC0yOTksMTQgKzI1OCwxMyBAQAogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwwPjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWkyYyIsImZzbCxtcGM1MjAwLWkyYyIsImZzbC1pMmMiOwotCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCXJlZyA9IDwweDNkNDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OworCiAJCXNyYW1AODAwMCB7Ci0JCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1zcmFtIiwiZnNsLG1wYzUyMDAtc3JhbSIsInNyYW0iOworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItc3JhbSIsImZzbCxtcGM1MjAwLXNyYW0iOwogCQkJcmVnID0gPDB4ODAwMCAweDQwMDA+OwogCQl9OwogCX07CkBAIC0zMzAsNyArMjg4LDYgQEAKIAkJCQkgMHhjODAwIDAgMCA0ICZtcGM1MjAwX3BpYyAwIDAgMz47CiAJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLy8gRnJvbSBib290IGxvYWRlcgogCQlpbnRlcnJ1cHRzID0gPDIgOCAwIDIgOSAwIDIgMTAgMD47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJYnVzLXJhbmdlID0gPDAgMD47CiAJCXJhbmdlcyA9IDwweDQyMDAwMDAwIDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDAgMHgyMDAwMDAwMAogCQkJICAweDAyMDAwMDAwIDAgMHhhMDAwMDAwMCAweGEwMDAwMDAwIDAgMHgxMDAwMDAwMApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21lZGlhNTIwMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbWVkaWE1MjAwLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMjk3ZDhiCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21lZGlhNTIwMC5kdHMKQEAgLTAsMCArMSwzMTggQEAKKy8qCisgKiBGcmVlc2NhbGUgTWVkaWE1MjAwIGJvYXJkIERldmljZSBUcmVlIFNvdXJjZQorICoKKyAqIENvcHlyaWdodCAyMDA5IFNlY3JldCBMYWIgVGVjaG5vbG9naWVzIEx0ZC4KKyAqIEdyYW50IExpa2VseSA8Z3JhbnQubGlrZWx5QHNlY3JldGxhYi5jYT4KKyAqIFN0ZXZlbiBDYXZhbmFnaCA8c2NhdmFuYWdoQHNlY3JldGxhYi5jYT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy9kdHMtdjEvOworCisvIHsKKwltb2RlbCA9ICJmc2wsbWVkaWE1MjAwIjsKKwljb21wYXRpYmxlID0gImZzbCxtZWRpYTUyMDAiOworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDE+OworCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKworCWFsaWFzZXMgeworCQljb25zb2xlID0gJmNvbnNvbGU7CisJCWV0aGVybmV0MCA9ICZldGgwOworCX07CisKKwljaG9zZW4geworCQlsaW51eCxzdGRvdXQtcGF0aCA9ICZjb25zb2xlOworCX07CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCVBvd2VyUEMsNTIwMEAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQlyZWcgPSA8MD47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlkLWNhY2hlLXNpemUgPSA8MHg0MDAwPjsJCS8vIEwxLCAxNksKKwkJCWktY2FjaGUtc2l6ZSA9IDwweDQwMDA+OwkJLy8gTDEsIDE2SworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDMzMDAwMDAwPjsJLy8gMzMgTUh6LCB0aGVzZSB3ZXJlIGNvbmZpZ3VyZWQgYnkgVS1Cb290CisJCQlidXMtZnJlcXVlbmN5ID0gPDEzMjAwMDAwMD47CQkvLyAxMzIgTUh6CisJCQljbG9jay1mcmVxdWVuY3kgPSA8Mzk2MDAwMDAwPjsJCS8vIDM5NiBNSHoKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4MDAwMDAwMDAgMHgwODAwMDAwMD47CS8vIDEyOE1CIFJBTQorCX07CisKKwlzb2NAZjAwMDAwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MT47CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWltbXIiOworCQlyYW5nZXMgPSA8MCAweGYwMDAwMDAwIDB4MDAwMGMwMDA+OworCQlyZWcgPSA8MHhmMDAwMDAwMCAweDAwMDAwMTAwPjsKKwkJYnVzLWZyZXF1ZW5jeSA9IDwxMzIwMDAwMDA+Oy8vIDEzMiBNSHoKKwkJc3lzdGVtLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCisJCWNkbUAyMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItY2RtIiwiZnNsLG1wYzUyMDAtY2RtIjsKKwkJCXJlZyA9IDwweDIwMCAweDM4PjsKKwkJfTsKKworCQltcGM1MjAwX3BpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJANTAwIHsKKwkJCS8vIDUyMDAgaW50ZXJydXB0cyBhcmUgZW5jb2RlZCBpbnRvIHR3byBsZXZlbHM7CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1waWMiLCJmc2wsbXBjNTIwMC1waWMiOworCQkJcmVnID0gPDB4NTAwIDB4ODA+OworCQl9OworCisJCXRpbWVyQDYwMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYwMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSA5IDA+OworCQkJZnNsLGhhcy13ZHQ7CisJCX07CisKKwkJdGltZXJANjEwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjEwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDEwIDA+OworCQl9OworCisJCXRpbWVyQDYyMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYyMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMSAwPjsKKwkJfTsKKworCQl0aW1lckA2MzAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MzAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTIgMD47CisJCX07CisKKwkJdGltZXJANjQwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjQwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDEzIDA+OworCQl9OworCisJCXRpbWVyQDY1MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDY1MCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxNCAwPjsKKwkJfTsKKworCQl0aW1lckA2NjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2NjAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTUgMD47CisJCX07CisKKwkJdGltZXJANjcwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjcwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDE2IDA+OworCQl9OworCisJCXJ0Y0A4MDAgewkvLyBSZWFsIHRpbWUgY2xvY2sKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXJ0YyIsImZzbCxtcGM1MjAwLXJ0YyI7CisJCQlyZWcgPSA8MHg4MDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwxIDUgMCAxIDYgMD47CisJCX07CisKKwkJY2FuQDkwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tc2NhbiIsImZzbCxtcGM1MjAwLW1zY2FuIjsKKwkJCWludGVycnVwdHMgPSA8MiAxNyAwPjsKKwkJCXJlZyA9IDwweDkwMCAweDgwPjsKKwkJfTsKKworCQljYW5AOTgwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW1zY2FuIiwiZnNsLG1wYzUyMDAtbXNjYW4iOworCQkJaW50ZXJydXB0cyA9IDwyIDE4IDA+OworCQkJcmVnID0gPDB4OTgwIDB4ODA+OworCQl9OworCisJCWdwaW9fc2ltcGxlOiBncGlvQGIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncGlvIiwiZnNsLG1wYzUyMDAtZ3BpbyI7CisJCQlyZWcgPSA8MHhiMDAgMHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDEgNyAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwaW9fd2t1cDogZ3Bpb0BjMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3Bpby13a3VwIiwiZnNsLG1wYzUyMDAtZ3Bpby13a3VwIjsKKwkJCXJlZyA9IDwweGMwMCAweDQwPjsKKwkJCWludGVycnVwdHMgPSA8MSA4IDAgMCAzIDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJc3BpQGYwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1zcGkiLCJmc2wsbXBjNTIwMC1zcGkiOworCQkJcmVnID0gPDB4ZjAwIDB4MjA+OworCQkJaW50ZXJydXB0cyA9IDwyIDEzIDAgMiAxNCAwPjsKKwkJfTsKKworCQl1c2JAMTAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1vaGNpIiwiZnNsLG1wYzUyMDAtb2hjaSIsIm9oY2ktYmUiOworCQkJcmVnID0gPDB4MTAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgNiAwPjsKKwkJfTsKKworCQlkbWEtY29udHJvbGxlckAxMjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWJlc3Rjb21tIiwiZnNsLG1wYzUyMDAtYmVzdGNvbW0iOworCQkJcmVnID0gPDB4MTIwMCAweDgwPjsKKwkJCWludGVycnVwdHMgPSA8MyAwIDAgIDMgMSAwICAzIDIgMCAgMyAzIDAKKwkJCSAgICAgICAgICAgICAgMyA0IDAgIDMgNSAwICAzIDYgMCAgMyA3IDAKKwkJCSAgICAgICAgICAgICAgMyA4IDAgIDMgOSAwICAzIDEwIDAgIDMgMTEgMAorCQkJICAgICAgICAgICAgICAzIDEyIDAgIDMgMTMgMCAgMyAxNCAwICAzIDE1IDA+OworCQl9OworCisJCXhsYkAxZjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXhsYiIsImZzbCxtcGM1MjAwLXhsYiI7CisJCQlyZWcgPSA8MHgxZjAwIDB4MTAwPjsKKwkJfTsKKworCQkvLyBQU0M2IGluIHVhcnQgbW9kZQorCQljb25zb2xlOiBzZXJpYWxAMmMwMCB7CQkvLyBQU0M2CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKKwkJCWNlbGwtaW5kZXggPSA8NT47CisJCQlwb3J0LW51bWJlciA9IDwwPjsgIC8vIExvZ2ljYWwgcG9ydCBhc3NpZ25tZW50CisJCQlyZWcgPSA8MHgyYzAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiA0IDA+OworCQl9OworCisJCWV0aDA6IGV0aGVybmV0QDMwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZmVjIiwiZnNsLG1wYzUyMDAtZmVjIjsKKwkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQl9OworCisJCW1kaW9AMzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbWRpbyIsImZzbCxtcGM1MjAwLW1kaW8iOworCQkJcmVnID0gPDB4MzAwMCAweDQwMD47CS8vIGZlYyByYW5nZSwgc2luY2Ugd2UgbmVlZCB0byBzZXR1cCBmZWMgaW50ZXJydXB0cworCQkJaW50ZXJydXB0cyA9IDwyIDUgMD47CS8vIHRoZXNlIGFyZSBmb3IgIm1paSBjb21tYW5kIGZpbmlzaGVkIiwgbm90IGxpbmsgY2hhbmdlcyAmIGNvLgorCisJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJcmVnID0gPDA+OworCQkJfTsKKwkJfTsKKworCQlhdGFAM2EwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1hdGEiLCJmc2wsbXBjNTIwMC1hdGEiOworCQkJcmVnID0gPDB4M2EwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgNyAwPjsKKwkJfTsKKworCQlpMmNAM2QwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgzZDAwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDE1IDA+OworCQkJZnNsNTIwMC1jbG9ja2luZzsKKwkJfTsKKworCQlpMmNAM2Q0MCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OworCQkJZnNsNTIwMC1jbG9ja2luZzsKKwkJfTsKKworCQlzcmFtQDgwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItc3JhbSIsImZzbCxtcGM1MjAwLXNyYW0iOworCQkJcmVnID0gPDB4ODAwMCAweDQwMDA+OworCQl9OworCX07CisKKwlwY2lAZjAwMDBkMDAgeworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBjaSIsImZzbCxtcGM1MjAwLXBjaSI7CisJCXJlZyA9IDwweGYwMDAwZDAwIDB4MTAwPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAwIDAgNz47CisJCWludGVycnVwdC1tYXAgPSA8MHhjMDAwIDAgMCAxICZtZWRpYTUyMDBfZnBnYSAwIDIgLy8gMXN0IHNsb3QKKwkJCQkgMHhjMDAwIDAgMCAyICZtZWRpYTUyMDBfZnBnYSAwIDMKKwkJCQkgMHhjMDAwIDAgMCAzICZtZWRpYTUyMDBfZnBnYSAwIDQKKwkJCQkgMHhjMDAwIDAgMCA0ICZtZWRpYTUyMDBfZnBnYSAwIDUKKworCQkJCSAweGM4MDAgMCAwIDEgJm1lZGlhNTIwMF9mcGdhIDAgMyAvLyAybmQgc2xvdAorCQkJCSAweGM4MDAgMCAwIDIgJm1lZGlhNTIwMF9mcGdhIDAgNAorCQkJCSAweGM4MDAgMCAwIDMgJm1lZGlhNTIwMF9mcGdhIDAgNQorCQkJCSAweGM4MDAgMCAwIDQgJm1lZGlhNTIwMF9mcGdhIDAgMgorCisJCQkJIDB4ZDAwMCAwIDAgMSAmbWVkaWE1MjAwX2ZwZ2EgMCA0IC8vIG1pbmlQQ0kKKwkJCQkgMHhkMDAwIDAgMCAyICZtZWRpYTUyMDBfZnBnYSAwIDUKKworCQkJCSAweGUwMDAgMCAwIDEgJm1lZGlhNTIwMF9mcGdhIDAgNSAvLyBDb3JhbElQCisJCQkJPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvLyBGcm9tIGJvb3QgbG9hZGVyCisJCWludGVycnVwdHMgPSA8MiA4IDAgMiA5IDAgMiAxMCAwPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQlidXMtcmFuZ2UgPSA8MCAwPjsKKwkJcmFuZ2VzID0gPDB4NDIwMDAwMDAgMCAweDgwMDAwMDAwIDB4ODAwMDAwMDAgMCAweDIwMDAwMDAwCisJCQkgIDB4MDIwMDAwMDAgMCAweGEwMDAwMDAwIDB4YTAwMDAwMDAgMCAweDEwMDAwMDAwCisJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4YjAwMDAwMDAgMCAweDAxMDAwMDAwPjsKKwl9OworCisJbG9jYWxidXMgeworCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1scGIiLCJzaW1wbGUtYnVzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDE+OworCisJCXJhbmdlcyA9IDwgMCAwIDB4ZmMwMDAwMDAgMHgwMjAwMDAwMAorCQkJICAgMSAwIDB4ZmUwMDAwMDAgMHgwMjAwMDAwMAorCQkJICAgMiAwIDB4ZjAwMTAwMDAgMHgwMDAxMDAwMAorCQkJICAgMyAwIDB4ZjAwMjAwMDAgMHgwMDAxMDAwMCA+OworCisJCWZsYXNoQDAsMCB7CisJCQljb21wYXRpYmxlID0gImFtZCxhbTI5bHYyOG1sIiwgImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MCAweDAgMHgyMDAwMDAwPjsJCS8vIDMyIE1CCisJCQliYW5rLXdpZHRoID0gPDQ+OwkJCS8vIFdpZHRoIGluIGJ5dGVzIG9mIHRoZSBmbGFzaCBiYW5rCisJCQlkZXZpY2Utd2lkdGggPSA8Mj47CQkJLy8gVHdvIGRldmljZXMgb24gZWFjaCBiYW5rCisJCX07CisKKwkJZmxhc2hAMSwwIHsKKwkJCWNvbXBhdGlibGUgPSAiYW1kLGFtMjlsdjI4bWwiLCAiY2ZpLWZsYXNoIjsKKwkJCXJlZyA9IDwxIDAgMHgyMDAwMDAwPjsJCQkvLyAzMiBNQgorCQkJYmFuay13aWR0aCA9IDw0PjsJCQkvLyBXaWR0aCBpbiBieXRlcyBvZiB0aGUgZmxhc2ggYmFuaworCQkJZGV2aWNlLXdpZHRoID0gPDI+OwkJCS8vIFR3byBkZXZpY2VzIG9uIGVhY2ggYmFuaworCQl9OworCisJCW1lZGlhNTIwMF9mcGdhOiBmcGdhQDIsMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtZWRpYTUyMDAtZnBnYSI7CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CS8vIDA6YmFuayAxOmlkOyBubyB0eXBlIGZpZWxkCisJCQlyZWcgPSA8MiAwIDB4MTAwMDA+OworCisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDAgMCAzCS8vIElSUSBiYW5rIDAKKwkJCSAgICAgICAgICAgICAgMSAxIDM+OwkvLyBJUlEgYmFuayAxCisJCX07CisKKwkJdWFydEAzLDAgeworCQkJY29tcGF0aWJsZSA9ICJ0aSx0bDE2Yzc1MmJwdCI7CisJCQlyZWcgPSA8MyAwIDB4MTAwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbWVkaWE1MjAwX2ZwZ2E+OworCQkJaW50ZXJydXB0cyA9IDwwIDAgIDAgMT47IC8vIDIgaXJxcworCQl9OworCX07Cit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21vdGlvbnByby5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbW90aW9ucHJvLmR0cwppbmRleCA1MmJhNmY5Li43YmU4Y2EwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbW90aW9ucHJvLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbW90aW9ucHJvLmR0cwpAQCAtMTcsNiArMTcsNyBAQAogCWNvbXBhdGlibGUgPSAicHJvbWVzcyxtb3Rpb25wcm8iOwogCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCSNzaXplLWNlbGxzID0gPDE+OworCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAogCWNwdXMgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKQEAgLTY2LDcgKzY3LDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CiAJCQlyZWcgPSA8MHg2MDAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgOSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCWZzbCxoYXMtd2R0OwogCQl9OwogCkBAIC03NCwzNSArNzQsMzAgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CiAJCQlyZWcgPSA8MHg2MTAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTAgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjIwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwogCQkJcmVnID0gPDB4NjIwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDExIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCXRpbWVyQDYzMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKIAkJCXJlZyA9IDwweDYzMCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSAxMiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl0aW1lckA2NDAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CiAJCQlyZWcgPSA8MHg2NDAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTMgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdGltZXJANjUwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOwogCQkJcmVnID0gPDB4NjUwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDE0IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCW1vdGlvbnByby1sZWRANjYwIHsJLy8gTW90aW9uLVBSTyBzdGF0dXMgTEVECkBAIC0xMTAsNyArMTA1LDYgQEAKIAkJCWxhYmVsID0gIm1vdGlvbnByby1zdGF0dXNsZWQiOwogCQkJcmVnID0gPDB4NjYwIDB4MTA+OwogCQkJaW50ZXJydXB0cyA9IDwxIDE1IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJYmxpbmstZGVsYXkgPSA8MTAwPjsgLy8gMTAwIG1zZWMKIAkJfTsKIApAQCAtMTE5LDQ5ICsxMTMsNDYgQEAKIAkJCWxhYmVsID0gIm1vdGlvbnByby1yZWFkeWxlZCI7CiAJCQlyZWcgPSA8MHg2NzAgMHgxMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMTYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJcnRjQDgwMCB7CS8vIFJlYWwgdGltZSBjbG9jawogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcnRjIiwiZnNsLG1wYzUyMDAtcnRjIjsKIAkJCXJlZyA9IDwweDgwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgNSAwIDEgNiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQljYW5AOTgwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW1zY2FuIiwiZnNsLG1wYzUyMDAtbXNjYW4iOwogCQkJaW50ZXJydXB0cyA9IDwyIDE4IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJcmVnID0gPDB4OTgwIDB4ODA+OwogCQl9OwogCi0JCWdwaW9AYjAwIHsKKwkJZ3Bpb19zaW1wbGU6IGdwaW9AYjAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwaW8iLCJmc2wsbXBjNTIwMC1ncGlvIjsKIAkJCXJlZyA9IDwweGIwMCAweDQwPjsKIAkJCWludGVycnVwdHMgPSA8MSA3IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCX07CiAKLQkJZ3Bpb0BjMDAgeworCQlncGlvX3drdXA6IGdwaW9AYzAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwaW8td2t1cCIsImZzbCxtcGM1MjAwLWdwaW8td2t1cCI7CiAJCQlyZWcgPSA8MHhjMDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgOCAwIDAgMyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OwogCQl9OwogCiAJCXNwaUBmMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItc3BpIiwiZnNsLG1wYzUyMDAtc3BpIjsKIAkJCXJlZyA9IDwweGYwMCAweDIwPjsKIAkJCWludGVycnVwdHMgPSA8MiAxMyAwIDIgMTQgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJdXNiQDEwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItb2hjaSIsImZzbCxtcGM1MjAwLW9oY2kiLCJvaGNpLWJlIjsKIAkJCXJlZyA9IDwweDEwMDAgMHhmZj47CiAJCQlpbnRlcnJ1cHRzID0gPDIgNiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlkbWEtY29udHJvbGxlckAxMjAwIHsKQEAgLTE3MSw3ICsxNjIsNiBAQAogCQkJICAgICAgICAgICAgICAzIDQgMCAgMyA1IDAgIDMgNiAwICAzIDcgMAogCQkJICAgICAgICAgICAgICAzIDggMCAgMyA5IDAgIDMgMTAgMCAgMyAxMSAwCiAJCQkgICAgICAgICAgICAgIDMgMTIgMCAgMyAxMyAwICAzIDE0IDAgIDMgMTUgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJeGxiQDFmMDAgewpAQCAtMTgwLDEyICsxNzAsOSBAQAogCQl9OwogCiAJCXNlcmlhbEAyMDAwIHsJCS8vIFBTQzEKLQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKLQkJCXBvcnQtbnVtYmVyID0gPDA+OyAgLy8gTG9naWNhbCBwb3J0IGFzc2lnbm1lbnQKIAkJCXJlZyA9IDwweDIwMDAgMHgxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDEgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJLy8gUFNDMiBpbiBzcGkgbWFzdGVyIG1vZGUgCkBAIC0xOTQsMjYgKzE4MSwyMCBAQAogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCXJlZyA9IDwweDIyMDAgMHgxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDIgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJLy8gUFNDNSBpbiB1YXJ0IG1vZGUKIAkJc2VyaWFsQDI4MDAgewkJLy8gUFNDNQotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBzYy11YXJ0IiwiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOwotCQkJcG9ydC1udW1iZXIgPSA8ND47ICAvLyBMb2dpY2FsIHBvcnQgYXNzaWdubWVudAogCQkJcmVnID0gPDB4MjgwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTIgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJZXRoZXJuZXRAMzAwMCB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWZlYyIsImZzbCxtcGM1MjAwLWZlYyI7CiAJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyIDUgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKIAkJfTsKIApAQCAtMjIzLDEwICsyMDQsOCBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbWRpbyIsImZzbCxtcGM1MjAwLW1kaW8iOwogCQkJcmVnID0gPDB4MzAwMCAweDQwMD47ICAgICAgIC8vIGZlYyByYW5nZSwgc2luY2Ugd2UgbmVlZCB0byBzZXR1cCBmZWMgaW50ZXJydXB0cwogCQkJaW50ZXJydXB0cyA9IDwyIDUgMD47ICAgLy8gdGhlc2UgYXJlIGZvciAibWlpIGNvbW1hbmQgZmluaXNoZWQiLCBub3QgbGluayBjaGFuZ2VzICYgY28uCi0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAKIAkJCXBoeTA6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwogCQkJCXJlZyA9IDwyPjsKIAkJCX07CiAJCX07CkBAIC0yMzUsNyArMjE0LDYgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWF0YSIsImZzbCxtcGM1MjAwLWF0YSI7CiAJCQlyZWcgPSA8MHgzYTAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MiA3IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWkyY0AzZDQwIHsKQEAgLTI0NCw3ICsyMjIsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CiAJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJZnNsNTIwMC1jbG9ja2luZzsKIAogCQkJcnRjQDY4IHsKQEAgLTI1OSw4ICsyMzYsOCBAQAogCQl9OwogCX07CiAKLQlscGIgewotCQljb21wYXRpYmxlID0gImZzbCxscGIiOworCWxvY2FsYnVzIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbHBiIiwic2ltcGxlLWJ1cyI7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDI+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJcmFuZ2VzID0gPDAgMCAweGZmMDAwMDAwIDB4MDEwMDAwMDAKQEAgLTI3Myw3ICsyNTAsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJwcm9tZXNzLG1vdGlvbnByby1rb2xsbW9yZ2VuIjsKIAkJCXJlZyA9IDwxIDAgMHgxMDAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgMSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQkvLyA4LWJpdCBib2FyZCBDUExEIG9uIExvY2FsUGx1cyBCdXMgQ1MyCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxM2VyZGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMTNlcmRiLmR0cwppbmRleCAzZWJmN2VjLi43NjFmYWE3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxM2VyZGIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzEzZXJkYi5kdHMKQEAgLTE4MCw3ICsxODAsNyBAQAogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCXNsZWVwID0gPCZwbWMgMHgyMDAwMDAwMD47Ci0JCQlyYW5nZXM7CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwpAQCAtMTk1LDExICsxOTUsMTEgQEAKIAkJCWZpeGVkLWxpbmsgPSA8MSAxIDEwMDAgMCAwPjsKIAkJCWZzbCxtYWdpYy1wYWNrZXQ7CiAKLQkJCW1kaW9AMjQ1MjAgeworCQkJbWRpb0A1MjAgewogCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OwogCQkJCXBoeTQ6IGV0aGVybmV0LXBoeUA0IHsKIAkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQkJCWludGVycnVwdHMgPSA8MjAgMHg4PjsKQEAgLTIyMSw2ICsyMjEsNyBAQAogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNCAweDggMzMgMHg4IDMyIDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKQEAgLTIyOSwxMSArMjMwLDExIEBACiAJCQlzbGVlcCA9IDwmcG1jIDB4MTAwMDAwMDA+OwogCQkJZnNsLG1hZ2ljLXBhY2tldDsKIAotCQkJbWRpb0AyNTUyMCB7CisJCQltZGlvQDUyMCB7CiAJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKIAogCQkJCXRiaTE6IHRiaS1waHlAMTEgewogCQkJCQlyZWcgPSA8MHgxMT47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxNWVyZGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzMTVlcmRiLmR0cwppbmRleCA3MTc4NDE2Li4zZjRjNWZiIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODMxNWVyZGIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzE1ZXJkYi5kdHMKQEAgLTIyLDYgKzIyLDggQEAKIAkJc2VyaWFsMCA9ICZzZXJpYWwwOwogCQlzZXJpYWwxID0gJnNlcmlhbDE7CiAJCXBjaTAgPSAmcGNpMDsKKwkJcGNpMSA9ICZwY2kxOworCQlwY2kyID0gJnBjaTI7CiAJfTsKIAogCWNwdXMgewpAQCAtMTg4LDY2ICsxOTAsNzQgQEAKIAkJCXBoeV90eXBlID0gInV0bWkiOwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDIwIDB4OD47Ci0JCQkJcmVnID0gPDB4MD47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxOSAweDg+OwotCQkJCXJlZyA9IDwweDE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzMiAweDggMzMgMHg4IDM0IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwgJnBoeTAgPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwyMCAweDg+OworCQkJCQlyZWcgPSA8MHgwPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxOSAweDg+OworCQkJCQlyZWcgPSA8MHgxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDB4OCAzNiAweDggMzcgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCAmcGh5MSA+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKQEAgLTM0OSw0ICszNTksNjYgQEAKIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1wY2kiOwogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCX07CisKKwlwY2kxOiBwY2llQGUwMDA5MDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzE1LXBjaWUiLCAiZnNsLG1wYzgzMTQtcGNpZSI7CisJCXJlZyA9IDwweGUwMDA5MDAwIDB4MDAwMDEwMDA+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YTAwMDAwMDAgMHhhMDAwMDAwMCAwIDB4MTAwMDAwMDAKKwkJICAgICAgICAgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4YjEwMDAwMDAgMCAweDAwODAwMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAwIDAgNz47CisJCWludGVycnVwdC1tYXAgPSA8MCAwIDAgMSAmaXBpYyAxIDgKKwkJCQkgMCAwIDAgMiAmaXBpYyAxIDgKKwkJCQkgMCAwIDAgMyAmaXBpYyAxIDgKKwkJCQkgMCAwIDAgNCAmaXBpYyAxIDg+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisKKwkJcGNpZUAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmVnID0gPDAgMCAwIDAgMD47CisJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YTAwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMCAweGEwMDAwMDAwCisJCQkJICAwIDB4MTAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMCAweDAwODAwMDAwPjsKKwkJfTsKKwl9OworCisJcGNpMjogcGNpZUBlMDAwYTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODMxNS1wY2llIiwgImZzbCxtcGM4MzE0LXBjaWUiOworCQlyZWcgPSA8MHhlMDAwYTAwMCAweDAwMDAxMDAwPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGMwMDAwMDAwIDB4YzAwMDAwMDAgMCAweDEwMDAwMDAwCisJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4ZDEwMDAwMDAgMCAweDAwODAwMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAwIDAgNz47CisJCWludGVycnVwdC1tYXAgPSA8MCAwIDAgMSAmaXBpYyAyIDgKKwkJCQkgMCAwIDAgMiAmaXBpYyAyIDgKKwkJCQkgMCAwIDAgMyAmaXBpYyAyIDgKKwkJCQkgMCAwIDAgNCAmaXBpYyAyIDg+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisKKwkJcGNpZUAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmVnID0gPDAgMCAwIDAgMD47CisJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YzAwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMCAweGMwMDAwMDAwCisJCQkJICAwIDB4MTAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMCAweDAwODAwMDAwPjsKKwkJfTsKKwl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHguZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNDllbWl0eC5kdHMKaW5kZXggYjVlZGE5NC4uMWFlMzhmMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNDllbWl0eC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNDllbWl0eC5kdHMKQEAgLTE3MCw1NyArMTcwLDUyIEBACiAJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCS8qIFZpdGVzc2UgODIwMSAqLwotCQkJcGh5MWM6IGV0aGVybmV0LXBoeUAxYyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxOCAweDg+OwotCQkJCXJlZyA9IDwweDFjPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzIgMHg4IDMzIDB4OCAzNCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTFjPjsKIAkJCWxpbnV4LG5ldHdvcmstaW5kZXggPSA8MD47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCS8qIFZpdGVzc2UgODIwMSAqLworCQkJCXBoeTFjOiBldGhlcm5ldC1waHlAMWMgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxOCAweDg+OworCQkJCQlyZWcgPSA8MHgxYz47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDB4OCAzNiAweDggMzcgMHg4PjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwpAQCAtMjI4LDYgKzIyMywxOCBAQAogCQkJZml4ZWQtbGluayA9IDwxIDEgMTAwMCAwIDA+OwogCQkJbGludXgsbmV0d29yay1pbmRleCA9IDwxPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHhncC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0OWVtaXR4Z3AuZHRzCmluZGV4IGM4N2E2MDEuLjY2MmFiZTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzQ5ZW1pdHhncC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNDllbWl0eGdwLmR0cwpAQCAtMTQ5LDM3ICsxNDksNDEgQEAKIAkJCXBoeV90eXBlID0gInVscGkiOwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJLyogVml0ZXNzZSA4MjAxICovCi0JCQlwaHkxYzogZXRoZXJuZXQtcGh5QDFjIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE4IDB4OD47Ci0JCQkJcmVnID0gPDB4MWM+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzMiAweDggMzMgMHg4IDM0IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MWM+OwogCQkJbGludXgsbmV0d29yay1pbmRleCA9IDwwPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJLyogVml0ZXNzZSA4MjAxICovCisJCQkJcGh5MWM6IGV0aGVybmV0LXBoeUAxYyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE4IDB4OD47CisJCQkJCXJlZyA9IDwweDFjPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNHhfbWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4MzR4X21kcy5kdHMKaW5kZXggZDlhZGJhMC4uZDlmMGEyMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNHhfbWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM0eF9tZHMuZHRzCkBAIC0xNjcsNjkgKzE2Nyw3NiBAQAogCQkJcGh5X3R5cGUgPSAidWxwaSI7CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxNyAweDg+OwotCQkJCXJlZyA9IDwweDA+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJCWludGVycnVwdHMgPSA8MTggMHg4PjsKLQkJCQlyZWcgPSA8MHgxPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzMiAweDggMzMgMHg4IDM0IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDA+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE3IDB4OD47CisJCQkJCXJlZyA9IDwweDA+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE4IDB4OD47CisJCQkJCXJlZyA9IDwweDE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAweDggMzYgMHg4IDM3IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CiAJCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDE+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X21kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19tZHMuZHRzCmluZGV4IDFkMTRkNzAuLjk2MzcwODAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X21kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfbWRzLmR0cwpAQCAtMjMsNiArMjMsOCBAQAogCQlzZXJpYWwwID0gJnNlcmlhbDA7CiAJCXNlcmlhbDEgPSAmc2VyaWFsMTsKIAkJcGNpMCA9ICZwY2kwOworCQlwY2kxID0gJnBjaTE7CisJCXBjaTIgPSAmcGNpMjsKIAl9OwogCiAJY3B1cyB7CkBAIC0xMjcsMjEgKzEyOSwzOCBAQAogCQkJcmVnID0gPDB4MjAwIDB4MTAwPjsKIAkJfTsKIAotCQlpMmNAMzAwMCB7CisJCXNsZWVwLW5leHVzIHsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKLQkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDwxNCAweDg+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQlkZnNycjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwYzAwMDAwMD47CisJCQlyYW5nZXM7CiAKLQkJCXJ0Y0A2OCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzc0IjsKLQkJCQlyZWcgPSA8MHg2OD47Ci0JCQkJaW50ZXJydXB0cyA9IDwxOSAweDg+OworCQkJaTJjQDMwMDAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNlbGwtaW5kZXggPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDE0IDB4OD47CiAJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJZGZzcnI7CisKKwkJCQlydGNANjggeworCQkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzNzQiOworCQkJCQlyZWcgPSA8MHg2OD47CisJCQkJCWludGVycnVwdHMgPSA8MTkgMHg4PjsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJfTsKKwkJCX07CisKKwkJCXNkaGNpQDJlMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LWVzZGhjIiwgImZzbCxtcGM4Mzc5LWVzZGhjIjsKKwkJCQlyZWcgPSA8MHgyZTAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8NDIgMHg4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwogCQkJfTsKIAkJfTsKIApAQCAtMTc0LDcwICsxOTMsODMgQEAKIAkJCWludGVycnVwdHMgPSA8MzggMHg4PjsKIAkJCWRyX21vZGUgPSAiaG9zdCI7CiAJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMGMwMDAwMD47CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJCWludGVycnVwdHMgPSA8MTcgMHg4PjsKLQkJCQlyZWcgPSA8MHgyPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE4IDB4OD47Ci0JCQkJcmVnID0gPDB4Mz47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMyIDB4OCAzMyAweDggMzQgMHg4PjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAibWlpIjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKKwkJCXNsZWVwID0gPCZwbWMgMHhjMDAwMDAwMD47CisJCQlmc2wsbWFnaWMtcGFja2V0OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE3IDB4OD47CisJCQkJCXJlZyA9IDwweDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE4IDB4OD47CisJCQkJCXJlZyA9IDwweDM+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMHg4IDM2IDB4OCAzNyAweDg+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJtaWkiOwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTM+OworCQkJc2xlZXAgPSA8JnBtYyAweDMwMDAwMDAwPjsKKwkJCWZzbCxtYWdpYy1wYWNrZXQ7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpAQCAtMzA5LDE0ICszNDEsNyBAQAogCQkJZnNsLGNoYW5uZWwtZmlmby1sZW4gPSA8MjQ+OwogCQkJZnNsLGV4ZWMtdW5pdHMtbWFzayA9IDwweDlmZT47CiAJCQlmc2wsZGVzY3JpcHRvci10eXBlcy1tYXNrID0gPDB4M2FiMGViZj47Ci0JCX07Ci0KLQkJc2RoY0AyZTAwMCB7Ci0JCQltb2RlbCA9ICJlU0RIQyI7Ci0JCQljb21wYXRpYmxlID0gImZzbCxlc2RoYyI7Ci0JCQlyZWcgPSA8MHgyZTAwMCAweDEwMDA+OwotCQkJaW50ZXJydXB0cyA9IDw0MiAweDg+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDMwMDAwMDA+OwogCQl9OwogCiAJCXNhdGFAMTgwMDAgewpAQCAtMzI0LDYgKzM0OSw3IEBACiAJCQlyZWcgPSA8MHgxODAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0cyA9IDw0NCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDAwMDAwYzA+OwogCQl9OwogCiAJCXNhdGFAMTkwMDAgewpAQCAtMzMxLDYgKzM1Nyw3IEBACiAJCQlyZWcgPSA8MHgxOTAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0cyA9IDw0NSAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDAwMDAwMzA+OwogCQl9OwogCiAJCS8qIElQSUMKQEAgLTM0Niw2ICszNzMsMTMgQEAKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CiAJCQlyZWcgPSA8MHg3MDAgMHgxMDA+OwogCQl9OworCisJCXBtYzogcG93ZXJAYjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzctcG1jIiwgImZzbCxtcGM4MzQ5LXBtYyI7CisJCQlyZWcgPSA8MHhiMDAgMHgxMDAgMHhhMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw4MCAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCX07CiAJfTsKIAogCXBjaTA6IHBjaUBlMDAwODUwMCB7CkBAIC00MDAsNiArNDM0LDcgQEAKIAkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4OTAwMDAwMDAgMHg5MDAwMDAwMCAweDAgMHgxMDAwMDAwMAogCQkgICAgICAgICAgMHg0MjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDEwMDAwMDAwCiAJCSAgICAgICAgICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZTAzMDAwMDAgMHgwIDB4MDAxMDAwMDA+OworCQlzbGVlcCA9IDwmcG1jIDB4MDAwMTAwMDA+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwpAQCAtNDA5LDQgKzQ0NCw2OCBAQAogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJfTsKKworCXBjaTE6IHBjaWVAZTAwMDkwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzctcGNpZSIsICJmc2wsbXBjODMxNC1wY2llIjsKKwkJcmVnID0gPDB4ZTAwMDkwMDAgMHgwMDAwMTAwMD47CisJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhhODAwMDAwMCAweGE4MDAwMDAwIDAgMHgxMDAwMDAwMAorCQkgICAgICAgICAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHhiODAwMDAwMCAwIDB4MDA4MDAwMDA+OworCQlidXMtcmFuZ2UgPSA8MCAyNTU+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwwIDAgMCAxICZpcGljIDEgOAorCQkJCSAwIDAgMCAyICZpcGljIDEgOAorCQkJCSAwIDAgMCAzICZpcGljIDEgOAorCQkJCSAwIDAgMCA0ICZpcGljIDEgOD47CisJCXNsZWVwID0gPCZwbWMgMHgwMDMwMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKworCQlwY2llQDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyZWcgPSA8MCAwIDAgMCAwPjsKKwkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhhODAwMDAwMAorCQkJCSAgMHgwMjAwMDAwMCAwIDB4YTgwMDAwMDAKKwkJCQkgIDAgMHgxMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAwIDB4MDA4MDAwMDA+OworCQl9OworCX07CisKKwlwY2kyOiBwY2llQGUwMDBhMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LXBjaWUiLCAiZnNsLG1wYzgzMTQtcGNpZSI7CisJCXJlZyA9IDwweGUwMDBhMDAwIDB4MDAwMDEwMDA+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YzgwMDAwMDAgMHhjODAwMDAwMCAwIDB4MTAwMDAwMDAKKwkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHhkODAwMDAwMCAwIDB4MDA4MDAwMDA+OworCQlidXMtcmFuZ2UgPSA8MCAyNTU+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwwIDAgMCAxICZpcGljIDIgOAorCQkJCSAwIDAgMCAyICZpcGljIDIgOAorCQkJCSAwIDAgMCAzICZpcGljIDIgOAorCQkJCSAwIDAgMCA0ICZpcGljIDIgOD47CisJCXNsZWVwID0gPCZwbWMgMHgwMDBjMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKworCQlwY2llQDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyZWcgPSA8MCAwIDAgMCAwPjsKKwkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhjODAwMDAwMAorCQkJCSAgMHgwMjAwMDAwMCAwIDB4YzgwMDAwMDAKKwkJCQkgIDAgMHgxMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAwIDB4MDA4MDAwMDA+OworCQl9OworCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfcmRiLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc3X3JkYi5kdHMKaW5kZXggOTQxM2FmMy4uMDUzMzM5MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzdfcmRiLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3N19yZGIuZHRzCkBAIC0yMiw2ICsyMiw4IEBACiAJCXNlcmlhbDAgPSAmc2VyaWFsMDsKIAkJc2VyaWFsMSA9ICZzZXJpYWwxOwogCQlwY2kwID0gJnBjaTA7CisJCXBjaTEgPSAmcGNpMTsKKwkJcGNpMiA9ICZwY2kyOwogCX07CiAKIAljcHVzIHsKQEAgLTEwNywyNiArMTA5LDcyIEBACiAJCQlyZWcgPSA8MHgyMDAgMHgxMDA+OwogCQl9OwogCi0JCWkyY0AzMDAwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKLQkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDwxNCAweDg+OworCQlncGlvMTogZ3Bpby1jb250cm9sbGVyQGMwMCB7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzctZ3BpbyIsICJmc2wsbXBjODM0OS1ncGlvIjsKKwkJCXJlZyA9IDwweGMwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDc0IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCWRmc3JyOwotCQkJcnRjQDY4IHsKLQkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzkiOwotCQkJCXJlZyA9IDwweDY4PjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJfTsKKworCQlncGlvMjogZ3Bpby1jb250cm9sbGVyQGQwMCB7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzctZ3BpbyIsICJmc2wsbXBjODM0OS1ncGlvIjsKKwkJCXJlZyA9IDwweGQwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDc1IDB4OD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJfTsKKworCQlzbGVlcC1uZXh1cyB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwYzAwMDAwMD47CisJCQlyYW5nZXM7CisKKwkJCWkyY0AzMDAwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQkJcmVnID0gPDB4MzAwMCAweDEwMD47CisJCQkJaW50ZXJydXB0cyA9IDwxNCAweDg+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCWRmc3JyOworCisJCQkJZHR0QDQ4IHsKKwkJCQkJY29tcGF0aWJsZSA9ICJuYXRpb25hbCxsbTc1IjsKKwkJCQkJcmVnID0gPDB4NDg+OworCQkJCX07CisKKwkJCQlhdDI0QDUwIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhdDI0LDI0YzI1NiI7CisJCQkJCXJlZyA9IDwweDUwPjsKKwkJCQl9OworCisJCQkJcnRjQDY4IHsKKwkJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM5IjsKKwkJCQkJcmVnID0gPDB4Njg+OworCQkJCX07CisKKwkJCQltY3VfcGlvOiBtY3VAYSB7CisJCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCQljb21wYXRpYmxlID0gImZzbCxtYzlzMDhxZzgtbXBjODM3N2VyZGIiLAorCQkJCQkJICAgICAiZnNsLG1jdS1tcGM4MzQ5ZW1pdHgiOworCQkJCQlyZWcgPSA8MHgwYT47CisJCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQl9OwogCQkJfTsKIAotCQkJbWN1X3BpbzogbWN1QGEgewotCQkJCSNncGlvLWNlbGxzID0gPDI+OwotCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1jOXMwOHFnOC1tcGM4Mzc3ZXJkYiIsCi0JCQkJCSAgICAgImZzbCxtY3UtbXBjODM0OWVtaXR4IjsKLQkJCQlyZWcgPSA8MHgwYT47Ci0JCQkJZ3Bpby1jb250cm9sbGVyOworCQkJc2RoY2lAMmUwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzctZXNkaGMiLCAiZnNsLG1wYzgzNzktZXNkaGMiOworCQkJCXJlZyA9IDwweDJlMDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDw0MiAweDg+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCS8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCQl9OwogCQl9OwogCkBAIC0xOTcsNjQgKzI0NSw3NiBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQlpbnRlcnJ1cHRzID0gPDM4IDB4OD47CiAJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMGMwMDAwMD47CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJCWludGVycnVwdHMgPSA8MTcgMHg4PjsKLQkJCQlyZWcgPSA8MHgyPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzIgMHg4IDMzIDB4OCAzNCAweDg+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJtaWkiOwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OworCQkJc2xlZXAgPSA8JnBtYyAweGMwMDAwMDAwPjsKKwkJCWZzbCxtYWdpYy1wYWNrZXQ7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTcgMHg4PjsKKwkJCQkJcmVnID0gPDB4Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAweDggMzYgMHg4IDM3IDB4OD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gIm1paSI7CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCWZpeGVkLWxpbmsgPSA8MSAxIDEwMDAgMCAwPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OworCQkJc2xlZXAgPSA8JnBtYyAweDMwMDAwMDAwPjsKKwkJCWZzbCxtYWdpYy1wYWNrZXQ7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpAQCAtMjg3LDYgKzM0Nyw3IEBACiAJCQlmc2wsY2hhbm5lbC1maWZvLWxlbiA9IDwyND47CiAJCQlmc2wsZXhlYy11bml0cy1tYXNrID0gPDB4OWZlPjsKIAkJCWZzbCxkZXNjcmlwdG9yLXR5cGVzLW1hc2sgPSA8MHgzYWIwZWJmPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMzAwMDAwMD47CiAJCX07CiAKIAkJc2F0YUAxODAwMCB7CkBAIC0yOTQsNiArMzU1LDcgQEAKIAkJCXJlZyA9IDwweDE4MDAwIDB4MTAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDQ0IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMDAwMDBjMD47CiAJCX07CiAKIAkJc2F0YUAxOTAwMCB7CkBAIC0zMDEsNiArMzYzLDcgQEAKIAkJCXJlZyA9IDwweDE5MDAwIDB4MTAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDQ1IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMDAwMDAzMD47CiAJCX07CiAKIAkJLyogSVBJQwpAQCAtMzE2LDYgKzM3OSwxMyBAQAogCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKIAkJCXJlZyA9IDwweDcwMCAweDEwMD47CiAJCX07CisKKwkJcG1jOiBwb3dlckBiMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3Ny1wbWMiLCAiZnNsLG1wYzgzNDktcG1jIjsKKwkJCXJlZyA9IDwweGIwMCAweDEwMCAweGEwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDgwIDB4OD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJfTsKIAl9OwogCiAJcGNpMDogcGNpQGUwMDA4NTAwIHsKQEAgLTM0MSw2ICs0MTEsNyBAQAogCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAgMHg5MDAwMDAwMCAweDkwMDAwMDAwIDB4MCAweDEwMDAwMDAwCiAJCSAgICAgICAgICAweDQyMDAwMDAwIDB4MCAweDgwMDAwMDAwIDB4ODAwMDAwMDAgMHgwIDB4MTAwMDAwMDAKIAkJICAgICAgICAgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhlMjAwMDAwMCAweDAgMHgwMDEwMDAwMD47CisJCXNsZWVwID0gPCZwbWMgMHgwMDAxMDAwMD47CiAJCWNsb2NrLWZyZXF1ZW5jeSA9IDw2NjY2NjY2Nj47CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwpAQCAtMzUwLDQgKzQyMSw2OCBAQAogCQljb21wYXRpYmxlID0gImZzbCxtcGM4MzQ5LXBjaSI7CiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJfTsKKworCXBjaTE6IHBjaWVAZTAwMDkwMDAgeworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzctcGNpZSIsICJmc2wsbXBjODMxNC1wY2llIjsKKwkJcmVnID0gPDB4ZTAwMDkwMDAgMHgwMDAwMTAwMD47CisJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhhODAwMDAwMCAweGE4MDAwMDAwIDAgMHgxMDAwMDAwMAorCQkgICAgICAgICAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHhiODAwMDAwMCAwIDB4MDA4MDAwMDA+OworCQlidXMtcmFuZ2UgPSA8MCAyNTU+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwwIDAgMCAxICZpcGljIDEgOAorCQkJCSAwIDAgMCAyICZpcGljIDEgOAorCQkJCSAwIDAgMCAzICZpcGljIDEgOAorCQkJCSAwIDAgMCA0ICZpcGljIDEgOD47CisJCXNsZWVwID0gPCZwbWMgMHgwMDMwMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKworCQlwY2llQDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyZWcgPSA8MCAwIDAgMCAwPjsKKwkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhhODAwMDAwMAorCQkJCSAgMHgwMjAwMDAwMCAwIDB4YTgwMDAwMDAKKwkJCQkgIDAgMHgxMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAwIDB4MDA4MDAwMDA+OworCQl9OworCX07CisKKwlwY2kyOiBwY2llQGUwMDBhMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc3LXBjaWUiLCAiZnNsLG1wYzgzMTQtcGNpZSI7CisJCXJlZyA9IDwweGUwMDBhMDAwIDB4MDAwMDEwMDA+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YzgwMDAwMDAgMHhjODAwMDAwMCAwIDB4MTAwMDAwMDAKKwkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHhkODAwMDAwMCAwIDB4MDA4MDAwMDA+OworCQlidXMtcmFuZ2UgPSA8MCAyNTU+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwwIDAgMCAxICZpcGljIDIgOAorCQkJCSAwIDAgMCAyICZpcGljIDIgOAorCQkJCSAwIDAgMCAzICZpcGljIDIgOAorCQkJCSAwIDAgMCA0ICZpcGljIDIgOD47CisJCXNsZWVwID0gPCZwbWMgMHgwMDBjMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKworCQlwY2llQDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyZWcgPSA8MCAwIDAgMCAwPjsKKwkJCXJhbmdlcyA9IDwweDAyMDAwMDAwIDAgMHhjODAwMDAwMAorCQkJCSAgMHgwMjAwMDAwMCAwIDB4YzgwMDAwMDAKKwkJCQkgIDAgMHgxMDAwMDAwMAorCQkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAwIDB4MDA4MDAwMDA+OworCQl9OworCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfbWRzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X21kcy5kdHMKaW5kZXggYjg1ZmMwMi4uNjUxZmYyZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfbWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9tZHMuZHRzCkBAIC0yMyw2ICsyMyw4IEBACiAJCXNlcmlhbDAgPSAmc2VyaWFsMDsKIAkJc2VyaWFsMSA9ICZzZXJpYWwxOwogCQlwY2kwID0gJnBjaTA7CisJCXBjaTEgPSAmcGNpMTsKKwkJcGNpMiA9ICZwY2kyOwogCX07CiAKIAljcHVzIHsKQEAgLTEyNywyMSArMTI5LDM4IEBACiAJCQlyZWcgPSA8MHgyMDAgMHgxMDA+OwogCQl9OwogCi0JCWkyY0AzMDAwIHsKKwkJc2xlZXAtbmV4dXMgewogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNlbGwtaW5kZXggPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbC1pMmMiOwotCQkJcmVnID0gPDB4MzAwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDE0IDB4OD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCWRmc3JyOworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQkJc2xlZXAgPSA8JnBtYyAweDBjMDAwMDAwPjsKKwkJCXJhbmdlczsKIAotCQkJcnRjQDY4IHsKLQkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzNzQiOwotCQkJCXJlZyA9IDwweDY4PjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE5IDB4OD47CisJCQlpMmNAMzAwMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJCWludGVycnVwdHMgPSA8MTQgMHg4PjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQlkZnNycjsKKworCQkJCXJ0Y0A2OCB7CisJCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTM3NCI7CisJCQkJCXJlZyA9IDwweDY4PjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxOSAweDg+OworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQl9OworCQkJfTsKKworCQkJc2RoY2lAMmUwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzgtZXNkaGMiLCAiZnNsLG1wYzgzNzktZXNkaGMiOworCQkJCXJlZyA9IDwweDJlMDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDw0MiAweDg+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCS8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCQl9OwogCQl9OwogCkBAIC0yMTMsNzAgKzIzMiw4MyBAQAogCQkJaW50ZXJydXB0cyA9IDwzOCAweDg+OwogCQkJZHJfbW9kZSA9ICJob3N0IjsKIAkJCXBoeV90eXBlID0gInVscGkiOworCQkJc2xlZXAgPSA8JnBtYyAweDAwYzAwMDAwPjsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0JCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxNyAweDg+OwotCQkJCXJlZyA9IDwweDI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJCWludGVycnVwdHMgPSA8MTggMHg4PjsKLQkJCQlyZWcgPSA8MHgzPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzIgMHg4IDMzIDB4OCAzNCAweDg+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJtaWkiOwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OworCQkJc2xlZXAgPSA8JnBtYyAweGMwMDAwMDAwPjsKKwkJCWZzbCxtYWdpYy1wYWNrZXQ7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTcgMHg4PjsKKwkJCQkJcmVnID0gPDB4Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTggMHg4PjsKKwkJCQkJcmVnID0gPDB4Mz47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAweDggMzYgMHg4IDM3IDB4OD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gIm1paSI7CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MzAwMDAwMDA+OworCQkJZnNsLG1hZ2ljLXBhY2tldDsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CkBAIC0zMDksMTQgKzM0MSw3IEBACiAJCQlmc2wsY2hhbm5lbC1maWZvLWxlbiA9IDwyND47CiAJCQlmc2wsZXhlYy11bml0cy1tYXNrID0gPDB4OWZlPjsKIAkJCWZzbCxkZXNjcmlwdG9yLXR5cGVzLW1hc2sgPSA8MHgzYWIwZWJmPjsKLQkJfTsKLQotCQlzZGhjQDJlMDAwIHsKLQkJCW1vZGVsID0gImVTREhDIjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGVzZGhjIjsKLQkJCXJlZyA9IDwweDJlMDAwIDB4MTAwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQyIDB4OD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMzAwMDAwMD47CiAJCX07CiAKIAkJLyogSVBJQwpAQCAtMzMyLDYgKzM1NywxMyBAQAogCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKIAkJCXJlZyA9IDwweDcwMCAweDEwMD47CiAJCX07CisKKwkJcG1jOiBwb3dlckBiMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OC1wbWMiLCAiZnNsLG1wYzgzNDktcG1jIjsKKwkJCXJlZyA9IDwweGIwMCAweDEwMCAweGEwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDgwIDB4OD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJfTsKIAl9OwogCiAJcGNpMDogcGNpQGUwMDA4NTAwIHsKQEAgLTM4Nyw2ICs0MTksNyBAQAogCQkgICAgICAgICAgMHg0MjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDEwMDAwMDAwCiAJCSAgICAgICAgICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZTAzMDAwMDAgMHgwIDB4MDAxMDAwMDA+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCXNsZWVwID0gPCZwbWMgMHgwMDAxMDAwMD47CiAJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDI+OwogCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKQEAgLTM5NSw0ICs0MjgsNjggQEAKIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1wY2kiOwogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCX07CisKKwlwY2kxOiBwY2llQGUwMDA5MDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc4LXBjaWUiLCAiZnNsLG1wYzgzMTQtcGNpZSI7CisJCXJlZyA9IDwweGUwMDA5MDAwIDB4MDAwMDEwMDA+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YTgwMDAwMDAgMHhhODAwMDAwMCAwIDB4MTAwMDAwMDAKKwkJICAgICAgICAgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4YjgwMDAwMDAgMCAweDAwODAwMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAwIDAgNz47CisJCWludGVycnVwdC1tYXAgPSA8MCAwIDAgMSAmaXBpYyAxIDgKKwkJCQkgMCAwIDAgMiAmaXBpYyAxIDgKKwkJCQkgMCAwIDAgMyAmaXBpYyAxIDgKKwkJCQkgMCAwIDAgNCAmaXBpYyAxIDg+OworCQlzbGVlcCA9IDwmcG1jIDB4MDAzMDAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisKKwkJcGNpZUAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmVnID0gPDAgMCAwIDAgMD47CisJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YTgwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMCAweGE4MDAwMDAwCisJCQkJICAwIDB4MTAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMCAweDAwODAwMDAwPjsKKwkJfTsKKwl9OworCisJcGNpMjogcGNpZUBlMDAwYTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OC1wY2llIiwgImZzbCxtcGM4MzE0LXBjaWUiOworCQlyZWcgPSA8MHhlMDAwYTAwMCAweDAwMDAxMDAwPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGM4MDAwMDAwIDB4YzgwMDAwMDAgMCAweDEwMDAwMDAwCisJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4ZDgwMDAwMDAgMCAweDAwODAwMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAwIDAgNz47CisJCWludGVycnVwdC1tYXAgPSA8MCAwIDAgMSAmaXBpYyAyIDgKKwkJCQkgMCAwIDAgMiAmaXBpYyAyIDgKKwkJCQkgMCAwIDAgMyAmaXBpYyAyIDgKKwkJCQkgMCAwIDAgNCAmaXBpYyAyIDg+OworCQlzbGVlcCA9IDwmcG1jIDB4MDAwYzAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisKKwkJcGNpZUAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmVnID0gPDAgMCAwIDAgMD47CisJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YzgwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMCAweGM4MDAwMDAwCisJCQkJICAwIDB4MTAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMCAweDAwODAwMDAwPjsKKwkJfTsKKwl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X3JkYi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OF9yZGIuZHRzCmluZGV4IDIzYzEwY2UuLjVkOTBlODUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc4X3JkYi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzhfcmRiLmR0cwpAQCAtMjIsNiArMjIsOCBAQAogCQlzZXJpYWwwID0gJnNlcmlhbDA7CiAJCXNlcmlhbDEgPSAmc2VyaWFsMTsKIAkJcGNpMCA9ICZwY2kwOworCQlwY2kxID0gJnBjaTE7CisJCXBjaTIgPSAmcGNpMjsKIAl9OwogCiAJY3B1cyB7CkBAIC0xMDcsMjYgKzEwOSw3MiBAQAogCQkJcmVnID0gPDB4MjAwIDB4MTAwPjsKIAkJfTsKIAotCQlpMmNAMzAwMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7Ci0JCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8MTQgMHg4PjsKKwkJZ3BpbzE6IGdwaW8tY29udHJvbGxlckBjMDAgeworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc4LWdwaW8iLCAiZnNsLG1wYzgzNDktZ3BpbyI7CisJCQlyZWcgPSA8MHhjMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw3NCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQlkZnNycjsKLQkJCXJ0Y0A2OCB7Ci0JCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM5IjsKLQkJCQlyZWcgPSA8MHg2OD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCX07CisKKwkJZ3BpbzI6IGdwaW8tY29udHJvbGxlckBkMDAgeworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc4LWdwaW8iLCAiZnNsLG1wYzgzNDktZ3BpbyI7CisJCQlyZWcgPSA8MHhkMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw3NSAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCX07CisKKwkJc2xlZXAtbmV4dXMgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCQlzbGVlcCA9IDwmcG1jIDB4MGMwMDAwMDA+OworCQkJcmFuZ2VzOworCisJCQlpMmNAMzAwMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY2VsbC1pbmRleCA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJCWludGVycnVwdHMgPSA8MTQgMHg4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQlkZnNycjsKKworCQkJCWR0dEA0OCB7CisJCQkJCWNvbXBhdGlibGUgPSAibmF0aW9uYWwsbG03NSI7CisJCQkJCXJlZyA9IDwweDQ4PjsKKwkJCQl9OworCisJCQkJYXQyNEA1MCB7CisJCQkJCWNvbXBhdGlibGUgPSAiYXQyNCwyNGMyNTYiOworCQkJCQlyZWcgPSA8MHg1MD47CisJCQkJfTsKKworCQkJCXJ0Y0A2OCB7CisJCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMzOSI7CisJCQkJCXJlZyA9IDwweDY4PjsKKwkJCQl9OworCisJCQkJbWN1X3BpbzogbWN1QGEgeworCQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCQkJY29tcGF0aWJsZSA9ICJmc2wsbWM5czA4cWc4LW1wYzgzNzhlcmRiIiwKKwkJCQkJCSAgICAgImZzbCxtY3UtbXBjODM0OWVtaXR4IjsKKwkJCQkJcmVnID0gPDB4MGE+OworCQkJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkJfTsKIAkJCX07CiAKLQkJCW1jdV9waW86IG1jdUBhIHsKLQkJCQkjZ3Bpby1jZWxscyA9IDwyPjsKLQkJCQljb21wYXRpYmxlID0gImZzbCxtYzlzMDhxZzgtbXBjODM3OGVyZGIiLAotCQkJCQkgICAgICJmc2wsbWN1LW1wYzgzNDllbWl0eCI7Ci0JCQkJcmVnID0gPDB4MGE+OwotCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCXNkaGNpQDJlMDAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc4LWVzZGhjIiwgImZzbCxtcGM4Mzc5LWVzZGhjIjsKKwkJCQlyZWcgPSA8MHgyZTAwMCAweDEwMDA+OworCQkJCWludGVycnVwdHMgPSA8NDIgMHg4PjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OwogCQkJfTsKIAkJfTsKIApAQCAtMTk3LDYyICsyNDUsNzYgQEAKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJaW50ZXJydXB0cyA9IDwzOCAweDg+OwogCQkJcGh5X3R5cGUgPSAidWxwaSI7CisJCQlzbGVlcCA9IDwmcG1jIDB4MDBjMDAwMDA+OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE3IDB4OD47Ci0JCQkJcmVnID0gPDB4Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMyIDB4OCAzMyAweDggMzQgMHg4PjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAibWlpIjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKKwkJCXNsZWVwID0gPCZwbWMgMHhjMDAwMDAwMD47CisJCQlmc2wsbWFnaWMtcGFja2V0OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE3IDB4OD47CisJCQkJCXJlZyA9IDwweDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMHg4IDM2IDB4OCAzNyAweDg+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJtaWkiOwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQlmaXhlZC1saW5rID0gPDEgMSAxMDAwIDAgMD47CisJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgzMDAwMDAwMD47CisJCQlmc2wsbWFnaWMtcGFja2V0OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKQEAgLTI4NSw2ICszNDcsNyBAQAogCQkJZnNsLGNoYW5uZWwtZmlmby1sZW4gPSA8MjQ+OwogCQkJZnNsLGV4ZWMtdW5pdHMtbWFzayA9IDwweDlmZT47CiAJCQlmc2wsZGVzY3JpcHRvci10eXBlcy1tYXNrID0gPDB4M2FiMGViZj47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDMwMDAwMDA+OwogCQl9OwogCiAJCS8qIElQSUMKQEAgLTMwMCw2ICszNjMsMTMgQEAKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CiAJCQlyZWcgPSA8MHg3MDAgMHgxMDA+OwogCQl9OworCisJCXBtYzogcG93ZXJAYjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzgtcG1jIiwgImZzbCxtcGM4MzQ5LXBtYyI7CisJCQlyZWcgPSA8MHhiMDAgMHgxMDAgMHhhMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw4MCAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCX07CiAJfTsKIAogCXBjaTA6IHBjaUBlMDAwODUwMCB7CkBAIC0zMjUsNiArMzk1LDcgQEAKIAkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4OTAwMDAwMDAgMHg5MDAwMDAwMCAweDAgMHgxMDAwMDAwMAogCQkgICAgICAgICAgMHg0MjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDEwMDAwMDAwCiAJCSAgICAgICAgICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZTIwMDAwMDAgMHgwIDB4MDAxMDAwMDA+OworCQlzbGVlcCA9IDwmcG1jIDB4MDAwMTAwMDA+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8NjY2NjY2NjY+OwogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKQEAgLTMzNCw0ICs0MDUsNjggQEAKIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM0OS1wY2kiOwogCQlkZXZpY2VfdHlwZSA9ICJwY2kiOwogCX07CisKKwlwY2kxOiBwY2llQGUwMDA5MDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQljb21wYXRpYmxlID0gImZzbCxtcGM4Mzc4LXBjaWUiLCAiZnNsLG1wYzgzMTQtcGNpZSI7CisJCXJlZyA9IDwweGUwMDA5MDAwIDB4MDAwMDEwMDA+OworCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YTgwMDAwMDAgMHhhODAwMDAwMCAwIDB4MTAwMDAwMDAKKwkJICAgICAgICAgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4YjgwMDAwMDAgMCAweDAwODAwMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAwIDAgNz47CisJCWludGVycnVwdC1tYXAgPSA8MCAwIDAgMSAmaXBpYyAxIDgKKwkJCQkgMCAwIDAgMiAmaXBpYyAxIDgKKwkJCQkgMCAwIDAgMyAmaXBpYyAxIDgKKwkJCQkgMCAwIDAgNCAmaXBpYyAxIDg+OworCQlzbGVlcCA9IDwmcG1jIDB4MDAzMDAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisKKwkJcGNpZUAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmVnID0gPDAgMCAwIDAgMD47CisJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YTgwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMCAweGE4MDAwMDAwCisJCQkJICAwIDB4MTAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMCAweDAwODAwMDAwPjsKKwkJfTsKKwl9OworCisJcGNpMjogcGNpZUBlMDAwYTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OC1wY2llIiwgImZzbCxtcGM4MzE0LXBjaWUiOworCQlyZWcgPSA8MHhlMDAwYTAwMCAweDAwMDAxMDAwPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMCAweGM4MDAwMDAwIDB4YzgwMDAwMDAgMCAweDEwMDAwMDAwCisJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4ZDgwMDAwMDAgMCAweDAwODAwMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAwIDAgNz47CisJCWludGVycnVwdC1tYXAgPSA8MCAwIDAgMSAmaXBpYyAyIDgKKwkJCQkgMCAwIDAgMiAmaXBpYyAyIDgKKwkJCQkgMCAwIDAgMyAmaXBpYyAyIDgKKwkJCQkgMCAwIDAgNCAmaXBpYyAyIDg+OworCQlzbGVlcCA9IDwmcG1jIDB4MDAwYzAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisKKwkJcGNpZUAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmVnID0gPDAgMCAwIDAgMD47CisJCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAwIDB4YzgwMDAwMDAKKwkJCQkgIDB4MDIwMDAwMDAgMCAweGM4MDAwMDAwCisJCQkJICAwIDB4MTAwMDAwMDAKKwkJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwCisJCQkJICAweDAxMDAwMDAwIDAgMHgwMDAwMDAwMAorCQkJCSAgMCAweDAwODAwMDAwPjsKKwkJfTsKKwl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc5X21kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9tZHMuZHRzCmluZGV4IGFjZjA2YzQuLmQ2ZjIwOGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc5X21kcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfbWRzLmR0cwpAQCAtMTI3LDIxICsxMjcsMzggQEAKIAkJCXJlZyA9IDwweDIwMCAweDEwMD47CiAJCX07CiAKLQkJaTJjQDMwMDAgeworCQlzbGVlcC1uZXh1cyB7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY2VsbC1pbmRleCA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7Ci0JCQlyZWcgPSA8MHgzMDAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8MTQgMHg4PjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJZGZzcnI7CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyI7CisJCQlzbGVlcCA9IDwmcG1jIDB4MGMwMDAwMDA+OworCQkJcmFuZ2VzOwogCi0JCQlydGNANjggewotCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTM3NCI7Ci0JCQkJcmVnID0gPDB4Njg+OwotCQkJCWludGVycnVwdHMgPSA8MTkgMHg4PjsKKwkJCWkyY0AzMDAwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQkJcmVnID0gPDB4MzAwMCAweDEwMD47CisJCQkJaW50ZXJydXB0cyA9IDwxNCAweDg+OwogCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCWRmc3JyOworCisJCQkJcnRjQDY4IHsKKwkJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzc0IjsKKwkJCQkJcmVnID0gPDB4Njg+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE5IDB4OD47CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCX07CisJCQl9OworCisJCQlzZGhjaUAyZTAwMCB7CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OS1lc2RoYyI7CisJCQkJcmVnID0gPDB4MmUwMDAgMHgxMDAwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDQyIDB4OD47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKIAkJCX07CiAJCX07CiAKQEAgLTIxMyw2OSArMjMwLDgzIEBACiAJCQlpbnRlcnJ1cHRzID0gPDM4IDB4OD47CiAJCQlkcl9tb2RlID0gImhvc3QiOwogCQkJcGh5X3R5cGUgPSAidWxwaSI7Ci0JCX07Ci0KLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwotCQkJCWludGVycnVwdHMgPSA8MTcgMHg4PjsKLQkJCQlyZWcgPSA8MHgyPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDE4IDB4OD47Ci0JCQkJcmVnID0gPDB4Mz47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OworCQkJc2xlZXAgPSA8JnBtYyAweDAwYzAwMDAwPjsKIAkJfTsKIAogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzIgMHg4IDMzIDB4OCAzNCAweDg+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJtaWkiOwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OworCQkJc2xlZXAgPSA8JnBtYyAweGMwMDAwMDAwPjsKKwkJCWZzbCxtYWdpYy1wYWNrZXQ7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTcgMHg4PjsKKwkJCQkJcmVnID0gPDB4Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTggMHg4PjsKKwkJCQkJcmVnID0gPDB4Mz47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAweDggMzYgMHg4IDM3IDB4OD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gIm1paSI7CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MzAwMDAwMDA+OworCQkJZnNsLG1hZ2ljLXBhY2tldDsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CkBAIC0zMDgsMTQgKzMzOSw3IEBACiAJCQlmc2wsY2hhbm5lbC1maWZvLWxlbiA9IDwyND47CiAJCQlmc2wsZXhlYy11bml0cy1tYXNrID0gPDB4OWZlPjsKIAkJCWZzbCxkZXNjcmlwdG9yLXR5cGVzLW1hc2sgPSA8MHgzYWIwZWJmPjsKLQkJfTsKLQotCQlzZGhjQDJlMDAwIHsKLQkJCW1vZGVsID0gImVTREhDIjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGVzZGhjIjsKLQkJCXJlZyA9IDwweDJlMDAwIDB4MTAwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQyIDB4OD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMzAwMDAwMD47CiAJCX07CiAKIAkJc2F0YUAxODAwMCB7CkBAIC0zMjMsNiArMzQ3LDcgQEAKIAkJCXJlZyA9IDwweDE4MDAwIDB4MTAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDQ0IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMDAwMDBjMD47CiAJCX07CiAKIAkJc2F0YUAxOTAwMCB7CkBAIC0zMzAsNiArMzU1LDcgQEAKIAkJCXJlZyA9IDwweDE5MDAwIDB4MTAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDQ1IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMDAwMDAzMD47CiAJCX07CiAKIAkJc2F0YUAxYTAwMCB7CkBAIC0zMzcsNiArMzYzLDcgQEAKIAkJCXJlZyA9IDwweDFhMDAwIDB4MTAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDQ2IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMDAwMDAwYz47CiAJCX07CiAKIAkJc2F0YUAxYjAwMCB7CkBAIC0zNDQsNiArMzcxLDcgQEAKIAkJCXJlZyA9IDwweDFiMDAwIDB4MTAwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDQ3IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMDAwMDAwMz47CiAJCX07CiAKIAkJLyogSVBJQwpAQCAtMzU5LDYgKzM4NywxMyBAQAogCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKIAkJCXJlZyA9IDwweDcwMCAweDEwMD47CiAJCX07CisKKwkJcG1jOiBwb3dlckBiMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODM3OS1wbWMiLCAiZnNsLG1wYzgzNDktcG1jIjsKKwkJCXJlZyA9IDwweGIwMCAweDEwMCAweGEwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDgwIDB4OD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJfTsKIAl9OwogCiAJcGNpMDogcGNpQGUwMDA4NTAwIHsKQEAgLTQxMyw2ICs0NDgsNyBAQAogCQlyYW5nZXMgPSA8MHgwMjAwMDAwMCAweDAgMHg5MDAwMDAwMCAweDkwMDAwMDAwIDB4MCAweDEwMDAwMDAwCiAJCSAgICAgICAgICAweDQyMDAwMDAwIDB4MCAweDgwMDAwMDAwIDB4ODAwMDAwMDAgMHgwIDB4MTAwMDAwMDAKIAkJICAgICAgICAgIDB4MDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhlMDMwMDAwMCAweDAgMHgwMDEwMDAwMD47CisJCXNsZWVwID0gPCZwbWMgMHgwMDAxMDAwMD47CiAJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKIAkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKIAkJI3NpemUtY2VsbHMgPSA8Mj47CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9yZGIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzgzNzlfcmRiLmR0cwppbmRleCA3MmNkYzNjLi45OGFlOTViIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODM3OV9yZGIuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4Mzc5X3JkYi5kdHMKQEAgLTEwNywyNiArMTA3LDcyIEBACiAJCQlyZWcgPSA8MHgyMDAgMHgxMDA+OwogCQl9OwogCi0JCWkyY0AzMDAwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKLQkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDwxNCAweDg+OworCQlncGlvMTogZ3Bpby1jb250cm9sbGVyQGMwMCB7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzktZ3BpbyIsICJmc2wsbXBjODM0OS1ncGlvIjsKKwkJCXJlZyA9IDwweGMwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDc0IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCWRmc3JyOwotCQkJcnRjQDY4IHsKLQkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzkiOwotCQkJCXJlZyA9IDwweDY4PjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJfTsKKworCQlncGlvMjogZ3Bpby1jb250cm9sbGVyQGQwMCB7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzktZ3BpbyIsICJmc2wsbXBjODM0OS1ncGlvIjsKKwkJCXJlZyA9IDwweGQwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDc1IDB4OD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJfTsKKworCQlzbGVlcC1uZXh1cyB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIjsKKwkJCXNsZWVwID0gPCZwbWMgMHgwYzAwMDAwMD47CisJCQlyYW5nZXM7CisKKwkJCWkyY0AzMDAwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLWkyYyI7CisJCQkJcmVnID0gPDB4MzAwMCAweDEwMD47CisJCQkJaW50ZXJydXB0cyA9IDwxNCAweDg+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCWRmc3JyOworCisJCQkJZHR0QDQ4IHsKKwkJCQkJY29tcGF0aWJsZSA9ICJuYXRpb25hbCxsbTc1IjsKKwkJCQkJcmVnID0gPDB4NDg+OworCQkJCX07CisKKwkJCQlhdDI0QDUwIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhdDI0LDI0YzI1NiI7CisJCQkJCXJlZyA9IDwweDUwPjsKKwkJCQl9OworCisJCQkJcnRjQDY4IHsKKwkJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM5IjsKKwkJCQkJcmVnID0gPDB4Njg+OworCQkJCX07CisKKwkJCQltY3VfcGlvOiBtY3VAYSB7CisJCQkJCSNncGlvLWNlbGxzID0gPDI+OworCQkJCQljb21wYXRpYmxlID0gImZzbCxtYzlzMDhxZzgtbXBjODM3OWVyZGIiLAorCQkJCQkJICAgICAiZnNsLG1jdS1tcGM4MzQ5ZW1pdHgiOworCQkJCQlyZWcgPSA8MHgwYT47CisJCQkJCWdwaW8tY29udHJvbGxlcjsKKwkJCQl9OwogCQkJfTsKIAotCQkJbWN1X3BpbzogbWN1QGEgewotCQkJCSNncGlvLWNlbGxzID0gPDI+OwotCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1jOXMwOHFnOC1tcGM4Mzc5ZXJkYiIsCi0JCQkJCSAgICAgImZzbCxtY3UtbXBjODM0OWVtaXR4IjsKLQkJCQlyZWcgPSA8MHgwYT47Ci0JCQkJZ3Bpby1jb250cm9sbGVyOworCQkJc2RoY2lAMmUwMDAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzktZXNkaGMiOworCQkJCXJlZyA9IDwweDJlMDAwIDB4MTAwMD47CisJCQkJaW50ZXJydXB0cyA9IDw0MiAweDg+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCS8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CiAJCQl9OwogCQl9OwogCkBAIC0xOTcsNjMgKzI0Myw3NiBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQlpbnRlcnJ1cHRzID0gPDM4IDB4OD47CiAJCQlwaHlfdHlwZSA9ICJ1bHBpIjsKLQkJfTsKLQotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0JCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxNyAweDg+OwotCQkJCXJlZyA9IDwweDI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKKwkJCXNsZWVwID0gPCZwbWMgMHgwMGMwMDAwMD47CiAJCX07CiAKIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMyIDB4OCAzMyAweDggMzQgMHg4PjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAibWlpIjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKKwkJCXNsZWVwID0gPCZwbWMgMHhjMDAwMDAwMD47CisJCQlmc2wsbWFnaWMtcGFja2V0OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDE3IDB4OD47CisJCQkJCXJlZyA9IDwweDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMHg4IDM2IDB4OCAzNyAweDg+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJtaWkiOwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQlmaXhlZC1saW5rID0gPDEgMSAxMDAwIDAgMD47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKKwkJCXNsZWVwID0gPCZwbWMgMHgzMDAwMDAwMD47CisJCQlmc2wsbWFnaWMtcGFja2V0OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKQEAgLTI4Niw2ICszNDUsNyBAQAogCQkJZnNsLGNoYW5uZWwtZmlmby1sZW4gPSA8MjQ+OwogCQkJZnNsLGV4ZWMtdW5pdHMtbWFzayA9IDwweDlmZT47CiAJCQlmc2wsZGVzY3JpcHRvci10eXBlcy1tYXNrID0gPDB4M2FiMGViZj47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDMwMDAwMDA+OwogCQl9OwogCiAJCXNhdGFAMTgwMDAgewpAQCAtMjkzLDYgKzM1Myw3IEBACiAJCQlyZWcgPSA8MHgxODAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0cyA9IDw0NCAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDAwMDAwYzA+OwogCQl9OwogCiAJCXNhdGFAMTkwMDAgewpAQCAtMzAwLDYgKzM2MSw3IEBACiAJCQlyZWcgPSA8MHgxOTAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0cyA9IDw0NSAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDAwMDAwMzA+OwogCQl9OwogCiAJCXNhdGFAMWEwMDAgewpAQCAtMzA3LDYgKzM2OSw3IEBACiAJCQlyZWcgPSA8MHgxYTAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0cyA9IDw0NiAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDAwMDAwMGM+OwogCQl9OwogCiAJCXNhdGFAMWIwMDAgewpAQCAtMzE0LDYgKzM3Nyw3IEBACiAJCQlyZWcgPSA8MHgxYjAwMCAweDEwMDA+OwogCQkJaW50ZXJydXB0cyA9IDw0NyAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCQlzbGVlcCA9IDwmcG1jIDB4MDAwMDAwMDM+OwogCQl9OwogCiAJCS8qIElQSUMKQEAgLTMyOSw2ICszOTMsMTMgQEAKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CiAJCQlyZWcgPSA8MHg3MDAgMHgxMDA+OwogCQl9OworCisJCXBtYzogcG93ZXJAYjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzgzNzktcG1jIiwgImZzbCxtcGM4MzQ5LXBtYyI7CisJCQlyZWcgPSA8MHhiMDAgMHgxMDAgMHhhMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw4MCAweDg+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CisJCX07CiAJfTsKIAogCXBjaTA6IHBjaUBlMDAwODUwMCB7CkBAIC0zNTQsNiArNDI1LDcgQEAKIAkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4OTAwMDAwMDAgMHg5MDAwMDAwMCAweDAgMHgxMDAwMDAwMAogCQkgICAgICAgICAgMHg0MjAwMDAwMCAweDAgMHg4MDAwMDAwMCAweDgwMDAwMDAwIDB4MCAweDEwMDAwMDAwCiAJCSAgICAgICAgICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZTIwMDAwMDAgMHgwIDB4MDAxMDAwMDA+OworCQlzbGVlcCA9IDwmcG1jIDB4MDAwMTAwMDA+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8NjY2NjY2NjY+OwogCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwyPjsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTM2ZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1MzZkcy5kdHMKaW5kZXggM2M5MDVkZi4uYjMxYzUwNCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1MzZkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1MzZkcy5kdHMKQEAgLTEzNyw0MiArMTM3LDYgQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMCAweDE+OwotCQkJCXJlZyA9IDwwPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDEwIDB4MT47Ci0JCQkJcmVnID0gPDE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI2NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNjUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQl1c2JAMjIwMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODUzNi11c2IyLW1waCIsICJmc2wtdXNiMi1tcGgiOwogCQkJcmVnID0gPDB4MjIwMDAgMHgxMDAwPjsKQEAgLTE5NCwzMSArMTU4LDczIEBACiAJCX07CiAKIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDB4MT47CisJCQkJCXJlZyA9IDwwPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMHgxPjsKKwkJCQkJcmVnID0gPDE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI2MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNjAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMxIDIgMzIgMiAzMyAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXVzYkAyYjAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0MGFkcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0MGFkcy5kdHMKaW5kZXggNzk1NzBmZi4uZGRkNjdiZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDBhZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQwYWRzLmR0cwpAQCAtMTI2LDk3ICsxMjYsMTA2IEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NSAxPjsKLQkJCQlyZWcgPSA8MHgwPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47Ci0JCQkJcmVnID0gPDB4MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw3IDE+OwotCQkJCXJlZyA9IDwweDM+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI2NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNjUyMCAweDIwPjsKLQotCQkJdGJpMjogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8NSAxPjsKKwkJCQkJcmVnID0gPDB4MD47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47CisJCQkJCXJlZyA9IDwweDE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw3IDE+OworCQkJCQlyZWcgPSA8MHgzPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDIgMzYgMiA0MCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MjogZXRoZXJuZXRAMjYwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIkZFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNjAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDQxIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkyPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTM+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTI6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQxY2RzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQxY2RzLmR0cwppbmRleCAyMjEwMzZhLi5lNDUwOTdmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0MWNkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDFjZHMuZHRzCkBAIC0xMjYsNjYgKzEyNiw3MiBAQAogCQkJfTsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47Ci0JCQkJcmVnID0gPDB4MD47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw1IDE+OwotCQkJCXJlZyA9IDwweDE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8NSAxPjsKKwkJCQkJcmVnID0gPDB4MD47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47CisJCQkJCXJlZyA9IDwweDE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQ0ZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDRkcy5kdHMKaW5kZXggMDY2OGQxMC4uN2M2OTMyYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDRkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDRkcy5kdHMKQEAgLTk4LDQ0ICs5OCw2IEBACiAJCQlkZnNycjsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OwotCQkJCXJlZyA9IDwweDA+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MTAgMT47Ci0JCQkJcmVnID0gPDB4MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0KLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNjUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjY1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQogCQlkbWFAMjEzMDAgewogCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCQkjc2l6ZS1jZWxscyA9IDwxPjsKQEAgLTE3OCwzMSArMTQwLDc0IEBACiAJCX07CiAKIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJCXJlZyA9IDwweDA+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNjAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNjAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMxIDIgMzIgMiAzMyAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQ4Y2RzLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTQ4Y2RzLmR0cwppbmRleCBkZjc3NGE3Li44MDRlOTAzIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU0OGNkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NDhjZHMuZHRzCkBAIC0xNDIsMTI5ICsxNDIsMTQxIEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NSAxPjsKLQkJCQlyZWcgPSA8MHgwPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47Ci0JCQkJcmVnID0gPDB4MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw1IDE+OwotCQkJCXJlZyA9IDwweDI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NSAxPjsKLQkJCQlyZWcgPSA8MHgzPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNjUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjY1MjAgMHgyMD47Ci0KLQkJCXRiaTI6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNzUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4Mjc1MjAgMHgyMD47Ci0KLQkJCXRiaTM6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw1IDE+OworCQkJCQlyZWcgPSA8MHgwPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8NSAxPjsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47CisJCQkJCXJlZyA9IDwweDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw1IDE+OworCQkJCQlyZWcgPSA8MHgzPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIC8qIGVUU0VDIDMvNCBhcmUgY3VycmVudGx5IGJyb2tlbgogCQllbmV0MjogZXRoZXJuZXRAMjYwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI2MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzEgMiAzMiAyIDMzIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkyPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTI6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQzOiBldGhlcm5ldEAyNzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI3MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjcwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNyAyIDM4IDIgMzkgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mz47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMzogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NTVjZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NTVjZHMuZHRzCmluZGV4IDA1M2IwMWUuLjk0ODRmMDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTU1Y2RzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU1NWNkcy5kdHMKQEAgLTEyNiw2NiArMTI2LDcyIEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NSAxPjsKLQkJCQlyZWcgPSA8MHgwPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47Ci0JCQkJcmVnID0gPDB4MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw1IDE+OworCQkJCQlyZWcgPSA8MHgwPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8NSAxPjsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjBhZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjBhZHMuZHRzCmluZGV4IDExYjFiY2IuLmNjMmFjZjggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTYwYWRzLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2MGFkcy5kdHMKQEAgLTExNSw3OCArMTE1LDg0IEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NSAxPjsKLQkJCQlyZWcgPSA8MHgwPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47Ci0JCQkJcmVnID0gPDB4MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw3IDE+OwotCQkJCXJlZyA9IDwweDI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NyAxPjsKLQkJCQlyZWcgPSA8MHgzPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDUgMT47CisJCQkJCXJlZyA9IDwweDA+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw1IDE+OworCQkJCQlyZWcgPSA8MHgxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8NyAxPjsKKwkJCQkJcmVnID0gPDB4Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDcgMT47CisJCQkJCXJlZyA9IDwweDM+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCW1waWM6IHBpY0A0MDAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OG1kcy5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU2OG1kcy5kdHMKaW5kZXggMTk1NWJkOS4uOWQ1MmUzYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NjhtZHMuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTY4bWRzLmR0cwpAQCAtMTQ5LDc4ICsxNDksODQgQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkwOiBldGhlcm5ldC1waHlANyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxIDE+OwotCQkJCXJlZyA9IDwweDc+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MiAxPjsKLQkJCQlyZWcgPSA8MHgxPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDEgMT47Ci0JCQkJcmVnID0gPDB4Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwyIDE+OwotCQkJCXJlZyA9IDwweDM+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKICAJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDcgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxIDE+OworCQkJCQlyZWcgPSA8MHg3PjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MiAxPjsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEgMT47CisJCQkJCXJlZyA9IDwweDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwyIDE+OworCQkJCQlyZWcgPSA8MHgzPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogIAkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTM+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTcyZHMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NzJkcy5kdHMKaW5kZXggMzU5YzNiNy4uNmU3OWE0MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NzJkcy5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NzJkcy5kdHMKQEAgLTEsNyArMSw3IEBACiAvKgogICogTVBDODU3MiBEUyBEZXZpY2UgVHJlZSBTb3VyY2UKICAqCi0gKiBDb3B5cmlnaHQgMjAwNywgMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMzEyLDEyOSArMzEyLDE0MSBAQAogCQkJfTsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OwotCQkJCXJlZyA9IDwweDA+OwotCQkJfTsKLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OwotCQkJCXJlZyA9IDwweDE+OwotCQkJfTsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OwotCQkJCXJlZyA9IDwweDI+OwotCQkJfTsKLQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OwotCQkJCXJlZyA9IDwweDM+OwotCQkJfTsKLQotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI2NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNjUyMCAweDIwPjsKLQotCQkJdGJpMjogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI3NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNzUyMCAweDIwPjsKLQotCQkJdGJpMzogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJCXJlZyA9IDwweDA+OworCQkJCX07CisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJfTsKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8MHgyPjsKKwkJCQl9OworCQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJCXJlZyA9IDwweDM+OworCQkJCX07CisKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDI6IGV0aGVybmV0QDI2MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNjAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMxIDIgMzIgMiAzMyAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMj47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTI6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQzOiBldGhlcm5ldEAyNzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI3MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjcwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNyAyIDM4IDIgMzkgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mz47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkzOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CkBAIC02NDMsNyArNjU1LDcgQEAKIAogCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKIAkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCi0JCQkJICAweDAgMHgxMDAwMDA+OworCQkJCSAgMHgwIDB4MTAwMDA+OwogCQkJdWxpMTU3NUAwIHsKIAkJCQlyZWcgPSA8MHgwIDB4MCAweDAgMHgwIDB4MD47CiAJCQkJI3NpemUtY2VsbHMgPSA8Mj47CkBAIC02NTQsNyArNjY2LDcgQEAKIAogCQkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCiAJCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKLQkJCQkJICAweDAgMHgxMDAwMDA+OworCQkJCQkgIDB4MCAweDEwMDAwPjsKIAkJCQlpc2FAMWUgewogCQkJCQlkZXZpY2VfdHlwZSA9ICJpc2EiOwogCQkJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OwpAQCAtNzQ0LDcgKzc1Niw3IEBACiAKIAkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCiAJCQkJICAweDEwMDAwMDAgMHgwIDB4MAotCQkJCSAgMHgwIDB4MTAwMDAwPjsKKwkJCQkgIDB4MCAweDEwMDAwPjsKIAkJfTsKIAl9OwogCkBAIC03ODEsNyArNzkzLDcgQEAKIAogCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKIAkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCi0JCQkJICAweDAgMHgxMDAwMDA+OworCQkJCSAgMHgwIDB4MTAwMDA+OwogCQl9OwogCX07CiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NzJkc18zNmIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NzJkc18zNmIuZHRzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmRiZDgxYTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU3MmRzXzM2Yi5kdHMKQEAgLTAsMCArMSw3OTkgQEAKKy8qCisgKiBNUEM4NTcyIERTIERldmljZSBUcmVlIFNvdXJjZQorICoKKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworL2R0cy12MS87CisvIHsKKwltb2RlbCA9ICJmc2wsTVBDODU3MkRTIjsKKwljb21wYXRpYmxlID0gImZzbCxNUEM4NTcyRFMiOworCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCSNzaXplLWNlbGxzID0gPDI+OworCisJYWxpYXNlcyB7CisJCWV0aGVybmV0MCA9ICZlbmV0MDsKKwkJZXRoZXJuZXQxID0gJmVuZXQxOworCQlldGhlcm5ldDIgPSAmZW5ldDI7CisJCWV0aGVybmV0MyA9ICZlbmV0MzsKKwkJc2VyaWFsMCA9ICZzZXJpYWwwOworCQlzZXJpYWwxID0gJnNlcmlhbDE7CisJCXBjaTAgPSAmcGNpMDsKKwkJcGNpMSA9ICZwY2kxOworCQlwY2kyID0gJnBjaTI7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyw4NTcyQDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwweDA+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJZC1jYWNoZS1zaXplID0gPDB4ODAwMD47CQkvLyBMMSwgMzJLCisJCQlpLWNhY2hlLXNpemUgPSA8MHg4MDAwPjsJCS8vIEwxLCAzMksKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CisJCX07CisKKwkJUG93ZXJQQyw4NTcyQDEgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwweDE+OworCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJZC1jYWNoZS1zaXplID0gPDB4ODAwMD47CQkvLyBMMSwgMzJLCisJCQlpLWNhY2hlLXNpemUgPSA8MHg4MDAwPjsJCS8vIEwxLCAzMksKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CisJCQluZXh0LWxldmVsLWNhY2hlID0gPCZMMj47CisJCX07CisJfTsKKworCW1lbW9yeSB7CisJCWRldmljZV90eXBlID0gIm1lbW9yeSI7CisJfTsKKworCWxvY2FsYnVzQGZmZmUwNTAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1lbGJjIiwgImZzbCxlbGJjIiwgInNpbXBsZS1idXMiOworCQlyZWcgPSA8MHhmIDB4ZmZlMDUwMDAgMCAweDEwMDA+OworCQlpbnRlcnJ1cHRzID0gPDE5IDI+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKworCQlyYW5nZXMgPSA8MHgwIDB4MCAweGYgMHhlODAwMDAwMCAweDA4MDAwMDAwCisJCQkgIDB4MSAweDAgMHhmIDB4ZTAwMDAwMDAgMHgwODAwMDAwMAorCQkJICAweDIgMHgwIDB4ZiAweGZmYTAwMDAwIDB4MDAwNDAwMDAKKwkJCSAgMHgzIDB4MCAweGYgMHhmZmRmMDAwMCAweDAwMDA4MDAwCisJCQkgIDB4NCAweDAgMHhmIDB4ZmZhNDAwMDAgMHgwMDA0MDAwMAorCQkJICAweDUgMHgwIDB4ZiAweGZmYTgwMDAwIDB4MDAwNDAwMDAKKwkJCSAgMHg2IDB4MCAweGYgMHhmZmFjMDAwMCAweDAwMDQwMDAwPjsKKworCQlub3JAMCwwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljb21wYXRpYmxlID0gImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8MHgwIDB4MCAweDgwMDAwMDA+OworCQkJYmFuay13aWR0aCA9IDwyPjsKKwkJCWRldmljZS13aWR0aCA9IDwxPjsKKworCQkJcmFtZGlza0AwIHsKKwkJCQlyZWcgPSA8MHgwIDB4MDMwMDAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisKKwkJCWRpYWdub3N0aWNAMzAwMDAwMCB7CisJCQkJcmVnID0gPDB4MDMwMDAwMDAgMHgwMGUwMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJZGlua0AzZTAwMDAwIHsKKwkJCQlyZWcgPSA8MHgwM2UwMDAwMCAweDAwMjAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQlrZXJuZWxANDAwMDAwMCB7CisJCQkJcmVnID0gPDB4MDQwMDAwMDAgMHgwMDQwMDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJamZmczJANDQwMDAwMCB7CisJCQkJcmVnID0gPDB4MDQ0MDAwMDAgMHgwM2IwMDAwMD47CisJCQl9OworCisJCQlkdGJAN2YwMDAwMCB7CisJCQkJcmVnID0gPDB4MDdmMDAwMDAgMHgwMDA4MDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKworCQkJdS1ib290QDdmODAwMDAgeworCQkJCXJlZyA9IDwweDA3ZjgwMDAwIDB4MDAwODAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisJCX07CisKKwkJbmFuZEAyLDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZmNtLW5hbmQiLAorCQkJCSAgICAgImZzbCxlbGJjLWZjbS1uYW5kIjsKKwkJCXJlZyA9IDwweDIgMHgwIDB4NDAwMDA+OworCisJCQl1LWJvb3RAMCB7CisJCQkJcmVnID0gPDB4MCAweDAyMDAwMDAwPjsKKwkJCQlyZWFkLW9ubHk7CisJCQl9OworCisJCQlqZmZzMkAyMDAwMDAwIHsKKwkJCQlyZWcgPSA8MHgwMjAwMDAwMCAweDEwMDAwMDAwPjsKKwkJCX07CisKKwkJCXJhbWRpc2tAMTIwMDAwMDAgeworCQkJCXJlZyA9IDwweDEyMDAwMDAwIDB4MDgwMDAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisKKwkJCWtlcm5lbEAxYTAwMDAwMCB7CisJCQkJcmVnID0gPDB4MWEwMDAwMDAgMHgwNDAwMDAwMD47CisJCQl9OworCisJCQlkdGJAMWUwMDAwMDAgeworCQkJCXJlZyA9IDwweDFlMDAwMDAwIDB4MDEwMDAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisKKwkJCWVtcHR5QDFmMDAwMDAwIHsKKwkJCQlyZWcgPSA8MHgxZjAwMDAwMCAweDIxMDAwMDAwPjsKKwkJCX07CisJCX07CisKKwkJbmFuZEA0LDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1mY20tbmFuZCIsCisJCQkJICAgICAiZnNsLGVsYmMtZmNtLW5hbmQiOworCQkJcmVnID0gPDB4NCAweDAgMHg0MDAwMD47CisJCX07CisKKwkJbmFuZEA1LDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1mY20tbmFuZCIsCisJCQkJICAgICAiZnNsLGVsYmMtZmNtLW5hbmQiOworCQkJcmVnID0gPDB4NSAweDAgMHg0MDAwMD47CisJCX07CisKKwkJbmFuZEA2LDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1mY20tbmFuZCIsCisJCQkJICAgICAiZnNsLGVsYmMtZmNtLW5hbmQiOworCQkJcmVnID0gPDB4NiAweDAgMHg0MDAwMD47CisJCX07CisJfTsKKworCXNvYzg1NzJAZmZmZTAwMDAwIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlkZXZpY2VfdHlwZSA9ICJzb2MiOworCQljb21wYXRpYmxlID0gInNpbXBsZS1idXMiOworCQlyYW5nZXMgPSA8MHgwIDB4ZiAweGZmZTAwMDAwIDB4MTAwMDAwPjsKKwkJcmVnID0gPDB4ZiAweGZmZTAwMDAwIDAgMHgxMDAwPjsJLy8gQ0NTUkJBUiAmIHNvYyByZWdzLCByZW1vdmUgb25jZSBwYXJzZSBjb2RlIGZvciBpbW1yYmFzZSBmaXhlZAorCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gRmlsbGVkIG91dCBieSB1Ym9vdC4KKworCQltZW1vcnktY29udHJvbGxlckAyMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItbWVtb3J5LWNvbnRyb2xsZXIiOworCQkJcmVnID0gPDB4MjAwMCAweDEwMDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDE4IDI+OworCQl9OworCisJCW1lbW9yeS1jb250cm9sbGVyQDYwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1tZW1vcnktY29udHJvbGxlciI7CisJCQlyZWcgPSA8MHg2MDAwIDB4MTAwMD47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCWludGVycnVwdHMgPSA8MTggMj47CisJCX07CisKKwkJTDI6IGwyLWNhY2hlLWNvbnRyb2xsZXJAMjAwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1sMi1jYWNoZS1jb250cm9sbGVyIjsKKwkJCXJlZyA9IDwweDIwMDAwIDB4MTAwMD47CisJCQljYWNoZS1saW5lLXNpemUgPSA8MzI+OwkvLyAzMiBieXRlcworCQkJY2FjaGUtc2l6ZSA9IDwweDEwMDAwMD47IC8vIEwyLCAxTQorCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDE2IDI+OworCQl9OworCisJCWkyY0AzMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw0MyAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZGZzcnI7CisJCX07CisKKwkJaTJjQDMxMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQljb21wYXRpYmxlID0gImZzbC1pMmMiOworCQkJcmVnID0gPDB4MzEwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDQzIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlkZnNycjsKKwkJfTsKKworCQlkbWFAYzMwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU3Mi1kbWEiLCAiZnNsLGVsb3BsdXMtZG1hIjsKKwkJCXJlZyA9IDwweGMzMDAgMHg0PjsKKwkJCXJhbmdlcyA9IDwweDAgMHhjMTAwIDB4MjAwPjsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQlkbWEtY2hhbm5lbEAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWRtYS1jaGFubmVsIiwKKwkJCQkJCSJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8NzYgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZG1hLWNoYW5uZWwiLAorCQkJCQkJImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8NzcgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAMTAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWRtYS1jaGFubmVsIiwKKwkJCQkJCSJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDw3OCAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEAxODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZG1hLWNoYW5uZWwiLAorCQkJCQkJImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgxODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDc5IDI+OworCQkJfTsKKwkJfTsKKworCQlkbWFAMjEzMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZG1hIiwgImZzbCxlbG9wbHVzLWRtYSI7CisJCQlyZWcgPSA8MHgyMTMwMCAweDQ+OworCQkJcmFuZ2VzID0gPDB4MCAweDIxMTAwIDB4MjAwPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkbWEtY2hhbm5lbEAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWRtYS1jaGFubmVsIiwKKwkJCQkJCSJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjAgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZG1hLWNoYW5uZWwiLAorCQkJCQkJImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHg4MCAweDgwPjsKKwkJCQljZWxsLWluZGV4ID0gPDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCWludGVycnVwdHMgPSA8MjEgMj47CisJCQl9OworCQkJZG1hLWNoYW5uZWxAMTAwIHsKKwkJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWRtYS1jaGFubmVsIiwKKwkJCQkJCSJmc2wsZWxvcGx1cy1kbWEtY2hhbm5lbCI7CisJCQkJcmVnID0gPDB4MTAwIDB4ODA+OworCQkJCWNlbGwtaW5kZXggPSA8Mj47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJaW50ZXJydXB0cyA9IDwyMiAyPjsKKwkJCX07CisJCQlkbWEtY2hhbm5lbEAxODAgeworCQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItZG1hLWNoYW5uZWwiLAorCQkJCQkJImZzbCxlbG9wbHVzLWRtYS1jaGFubmVsIjsKKwkJCQlyZWcgPSA8MHgxODAgMHg4MD47CisJCQkJY2VsbC1pbmRleCA9IDwzPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDIzIDI+OworCQkJfTsKKwkJfTsKKworCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNlbGwtaW5kZXggPSA8MD47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJCXJlZyA9IDwweDA+OworCQkJCX07CisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKKwkJCQkJcmVnID0gPDB4MT47CisJCQkJfTsKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8MHgyPjsKKwkJCQl9OworCQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MTAgMT47CisJCQkJCXJlZyA9IDwweDM+OworCQkJCX07CisKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CisJCX07CisKKwkJZW5ldDI6IGV0aGVybmV0QDI2MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljZWxsLWluZGV4ID0gPDI+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNjAwMCAweDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDMxIDIgMzIgMiAzMyAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJdGJpLWhhbmRsZSA9IDwmdGJpMj47CisJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTI6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OworCQl9OworCisJCWVuZXQzOiBldGhlcm5ldEAyNzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJY2VsbC1pbmRleCA9IDwzPjsKKwkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOworCQkJbW9kZWwgPSAiZVRTRUMiOworCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKKwkJCXJlZyA9IDwweDI3MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjcwMDAgMHgxMDAwPjsKKwkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOworCQkJaW50ZXJydXB0cyA9IDwzNyAyIDM4IDIgMzkgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCXRiaS1oYW5kbGUgPSA8JnRiaTM+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mz47CisJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkzOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8MHg0NTAwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8NDIgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQlzZXJpYWwxOiBzZXJpYWxANDYwMCB7CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8MHg0NjAwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8NDIgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQlnbG9iYWwtdXRpbGl0aWVzQGUwMDAwIHsJLy9nbG9iYWwgdXRpbGl0aWVzIGJsb2NrCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTcyLWd1dHMiOworCQkJcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKKwkJCWZzbCxoYXMtcnN0Y3I7CisJCX07CisKKwkJbXNpQDQxNjAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NzItbXNpIiwgImZzbCxtcGljLW1zaSI7CisJCQlyZWcgPSA8MHg0MTYwMCAweDgwPjsKKwkJCW1zaS1hdmFpbGFibGUtcmFuZ2VzID0gPDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwKKwkJCQkweGUwIDAKKwkJCQkweGUxIDAKKwkJCQkweGUyIDAKKwkJCQkweGUzIDAKKwkJCQkweGU0IDAKKwkJCQkweGU1IDAKKwkJCQkweGU2IDAKKwkJCQkweGU3IDA+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCX07CisKKwkJY3J5cHRvQDMwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLHNlYzMuMCIsICJmc2wsc2VjMi40IiwgImZzbCxzZWMyLjIiLAorCQkJCSAgICAgImZzbCxzZWMyLjEiLCAiZnNsLHNlYzIuMCI7CisJCQlyZWcgPSA8MHgzMDAwMCAweDEwMDAwPjsKKwkJCWludGVycnVwdHMgPSA8NDUgMiA1OCAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZnNsLG51bS1jaGFubmVscyA9IDw0PjsKKwkJCWZzbCxjaGFubmVsLWZpZm8tbGVuID0gPDI0PjsKKwkJCWZzbCxleGVjLXVuaXRzLW1hc2sgPSA8MHg5ZmU+OworCQkJZnNsLGRlc2NyaXB0b3ItdHlwZXMtbWFzayA9IDwweDNhYjBlYmY+OworCQl9OworCisJCW1waWM6IHBpY0A0MDAwMCB7CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCXJlZyA9IDwweDQwMDAwIDB4NDAwMDA+OworCQkJY29tcGF0aWJsZSA9ICJjaHJwLG9wZW4tcGljIjsKKwkJCWRldmljZV90eXBlID0gIm9wZW4tcGljIjsKKwkJfTsKKwl9OworCisJcGNpMDogcGNpZUBmZmZlMDgwMDAgeworCQljZWxsLWluZGV4ID0gPDA+OworCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LXBjaWUiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkjaW50ZXJydXB0LWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCXJlZyA9IDwweGYgMHhmZmUwODAwMCAwIDB4MTAwMD47CisJCWJ1cy1yYW5nZSA9IDwwIDI1NT47CisJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YzAwMDAwMDAgMHhjIDB4MDAwMDAwMDAgMHgwIDB4MjAwMDAwMDAKKwkJCSAgMHgxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZiAweGZmYzAwMDAwIDB4MCAweDAwMDEwMDAwPjsKKwkJY2xvY2stZnJlcXVlbmN5ID0gPDMzMzMzMzMzPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCWludGVycnVwdHMgPSA8MjQgMj47CisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGZmMDAgMHgwIDB4MCAweDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJLyogSURTRUwgMHgxMSBmdW5jIDAgLSBQQ0kgc2xvdCAxICovCisJCQkweDg4MDAgMHgwIDB4MCAweDEgJm1waWMgMHgyIDB4MQorCQkJMHg4ODAwIDB4MCAweDAgMHgyICZtcGljIDB4MyAweDEKKwkJCTB4ODgwMCAweDAgMHgwIDB4MyAmbXBpYyAweDQgMHgxCisJCQkweDg4MDAgMHgwIDB4MCAweDQgJm1waWMgMHgxIDB4MQorCisJCQkvKiBJRFNFTCAweDExIGZ1bmMgMSAtIFBDSSBzbG90IDEgKi8KKwkJCTB4ODkwMCAweDAgMHgwIDB4MSAmbXBpYyAweDIgMHgxCisJCQkweDg5MDAgMHgwIDB4MCAweDIgJm1waWMgMHgzIDB4MQorCQkJMHg4OTAwIDB4MCAweDAgMHgzICZtcGljIDB4NCAweDEKKwkJCTB4ODkwMCAweDAgMHgwIDB4NCAmbXBpYyAweDEgMHgxCisKKwkJCS8qIElEU0VMIDB4MTEgZnVuYyAyIC0gUENJIHNsb3QgMSAqLworCQkJMHg4YTAwIDB4MCAweDAgMHgxICZtcGljIDB4MiAweDEKKwkJCTB4OGEwMCAweDAgMHgwIDB4MiAmbXBpYyAweDMgMHgxCisJCQkweDhhMDAgMHgwIDB4MCAweDMgJm1waWMgMHg0IDB4MQorCQkJMHg4YTAwIDB4MCAweDAgMHg0ICZtcGljIDB4MSAweDEKKworCQkJLyogSURTRUwgMHgxMSBmdW5jIDMgLSBQQ0kgc2xvdCAxICovCisJCQkweDhiMDAgMHgwIDB4MCAweDEgJm1waWMgMHgyIDB4MQorCQkJMHg4YjAwIDB4MCAweDAgMHgyICZtcGljIDB4MyAweDEKKwkJCTB4OGIwMCAweDAgMHgwIDB4MyAmbXBpYyAweDQgMHgxCisJCQkweDhiMDAgMHgwIDB4MCAweDQgJm1waWMgMHgxIDB4MQorCisJCQkvKiBJRFNFTCAweDExIGZ1bmMgNCAtIFBDSSBzbG90IDEgKi8KKwkJCTB4OGMwMCAweDAgMHgwIDB4MSAmbXBpYyAweDIgMHgxCisJCQkweDhjMDAgMHgwIDB4MCAweDIgJm1waWMgMHgzIDB4MQorCQkJMHg4YzAwIDB4MCAweDAgMHgzICZtcGljIDB4NCAweDEKKwkJCTB4OGMwMCAweDAgMHgwIDB4NCAmbXBpYyAweDEgMHgxCisKKwkJCS8qIElEU0VMIDB4MTEgZnVuYyA1IC0gUENJIHNsb3QgMSAqLworCQkJMHg4ZDAwIDB4MCAweDAgMHgxICZtcGljIDB4MiAweDEKKwkJCTB4OGQwMCAweDAgMHgwIDB4MiAmbXBpYyAweDMgMHgxCisJCQkweDhkMDAgMHgwIDB4MCAweDMgJm1waWMgMHg0IDB4MQorCQkJMHg4ZDAwIDB4MCAweDAgMHg0ICZtcGljIDB4MSAweDEKKworCQkJLyogSURTRUwgMHgxMSBmdW5jIDYgLSBQQ0kgc2xvdCAxICovCisJCQkweDhlMDAgMHgwIDB4MCAweDEgJm1waWMgMHgyIDB4MQorCQkJMHg4ZTAwIDB4MCAweDAgMHgyICZtcGljIDB4MyAweDEKKwkJCTB4OGUwMCAweDAgMHgwIDB4MyAmbXBpYyAweDQgMHgxCisJCQkweDhlMDAgMHgwIDB4MCAweDQgJm1waWMgMHgxIDB4MQorCisJCQkvKiBJRFNFTCAweDExIGZ1bmMgNyAtIFBDSSBzbG90IDEgKi8KKwkJCTB4OGYwMCAweDAgMHgwIDB4MSAmbXBpYyAweDIgMHgxCisJCQkweDhmMDAgMHgwIDB4MCAweDIgJm1waWMgMHgzIDB4MQorCQkJMHg4ZjAwIDB4MCAweDAgMHgzICZtcGljIDB4NCAweDEKKwkJCTB4OGYwMCAweDAgMHgwIDB4NCAmbXBpYyAweDEgMHgxCisKKwkJCS8qIElEU0VMIDB4MTIgZnVuYyAwIC0gUENJIHNsb3QgMiAqLworCQkJMHg5MDAwIDB4MCAweDAgMHgxICZtcGljIDB4MyAweDEKKwkJCTB4OTAwMCAweDAgMHgwIDB4MiAmbXBpYyAweDQgMHgxCisJCQkweDkwMDAgMHgwIDB4MCAweDMgJm1waWMgMHgxIDB4MQorCQkJMHg5MDAwIDB4MCAweDAgMHg0ICZtcGljIDB4MiAweDEKKworCQkJLyogSURTRUwgMHgxMiBmdW5jIDEgLSBQQ0kgc2xvdCAyICovCisJCQkweDkxMDAgMHgwIDB4MCAweDEgJm1waWMgMHgzIDB4MQorCQkJMHg5MTAwIDB4MCAweDAgMHgyICZtcGljIDB4NCAweDEKKwkJCTB4OTEwMCAweDAgMHgwIDB4MyAmbXBpYyAweDEgMHgxCisJCQkweDkxMDAgMHgwIDB4MCAweDQgJm1waWMgMHgyIDB4MQorCisJCQkvKiBJRFNFTCAweDEyIGZ1bmMgMiAtIFBDSSBzbG90IDIgKi8KKwkJCTB4OTIwMCAweDAgMHgwIDB4MSAmbXBpYyAweDMgMHgxCisJCQkweDkyMDAgMHgwIDB4MCAweDIgJm1waWMgMHg0IDB4MQorCQkJMHg5MjAwIDB4MCAweDAgMHgzICZtcGljIDB4MSAweDEKKwkJCTB4OTIwMCAweDAgMHgwIDB4NCAmbXBpYyAweDIgMHgxCisKKwkJCS8qIElEU0VMIDB4MTIgZnVuYyAzIC0gUENJIHNsb3QgMiAqLworCQkJMHg5MzAwIDB4MCAweDAgMHgxICZtcGljIDB4MyAweDEKKwkJCTB4OTMwMCAweDAgMHgwIDB4MiAmbXBpYyAweDQgMHgxCisJCQkweDkzMDAgMHgwIDB4MCAweDMgJm1waWMgMHgxIDB4MQorCQkJMHg5MzAwIDB4MCAweDAgMHg0ICZtcGljIDB4MiAweDEKKworCQkJLyogSURTRUwgMHgxMiBmdW5jIDQgLSBQQ0kgc2xvdCAyICovCisJCQkweDk0MDAgMHgwIDB4MCAweDEgJm1waWMgMHgzIDB4MQorCQkJMHg5NDAwIDB4MCAweDAgMHgyICZtcGljIDB4NCAweDEKKwkJCTB4OTQwMCAweDAgMHgwIDB4MyAmbXBpYyAweDEgMHgxCisJCQkweDk0MDAgMHgwIDB4MCAweDQgJm1waWMgMHgyIDB4MQorCisJCQkvKiBJRFNFTCAweDEyIGZ1bmMgNSAtIFBDSSBzbG90IDIgKi8KKwkJCTB4OTUwMCAweDAgMHgwIDB4MSAmbXBpYyAweDMgMHgxCisJCQkweDk1MDAgMHgwIDB4MCAweDIgJm1waWMgMHg0IDB4MQorCQkJMHg5NTAwIDB4MCAweDAgMHgzICZtcGljIDB4MSAweDEKKwkJCTB4OTUwMCAweDAgMHgwIDB4NCAmbXBpYyAweDIgMHgxCisKKwkJCS8qIElEU0VMIDB4MTIgZnVuYyA2IC0gUENJIHNsb3QgMiAqLworCQkJMHg5NjAwIDB4MCAweDAgMHgxICZtcGljIDB4MyAweDEKKwkJCTB4OTYwMCAweDAgMHgwIDB4MiAmbXBpYyAweDQgMHgxCisJCQkweDk2MDAgMHgwIDB4MCAweDMgJm1waWMgMHgxIDB4MQorCQkJMHg5NjAwIDB4MCAweDAgMHg0ICZtcGljIDB4MiAweDEKKworCQkJLyogSURTRUwgMHgxMiBmdW5jIDcgLSBQQ0kgc2xvdCAyICovCisJCQkweDk3MDAgMHgwIDB4MCAweDEgJm1waWMgMHgzIDB4MQorCQkJMHg5NzAwIDB4MCAweDAgMHgyICZtcGljIDB4NCAweDEKKwkJCTB4OTcwMCAweDAgMHgwIDB4MyAmbXBpYyAweDEgMHgxCisJCQkweDk3MDAgMHgwIDB4MCAweDQgJm1waWMgMHgyIDB4MQorCisJCQkvLyBJRFNFTCAweDFjICBVU0IKKwkJCTB4ZTAwMCAweDAgMHgwIDB4MSAmaTgyNTkgMHhjIDB4MgorCQkJMHhlMTAwIDB4MCAweDAgMHgyICZpODI1OSAweDkgMHgyCisJCQkweGUyMDAgMHgwIDB4MCAweDMgJmk4MjU5IDB4YSAweDIKKwkJCTB4ZTMwMCAweDAgMHgwIDB4NCAmaTgyNTkgMHhiIDB4MgorCisJCQkvLyBJRFNFTCAweDFkICBBdWRpbworCQkJMHhlODAwIDB4MCAweDAgMHgxICZpODI1OSAweDYgMHgyCisKKwkJCS8vIElEU0VMIDB4MWUgTGVnYWN5CisJCQkweGYwMDAgMHgwIDB4MCAweDEgJmk4MjU5IDB4NyAweDIKKwkJCTB4ZjEwMCAweDAgMHgwIDB4MSAmaTgyNTkgMHg3IDB4MgorCisJCQkvLyBJRFNFTCAweDFmIElERS9TQVRBCisJCQkweGY4MDAgMHgwIDB4MCAweDEgJmk4MjU5IDB4ZSAweDIKKwkJCTB4ZjkwMCAweDAgMHgwIDB4MSAmaTgyNTkgMHg1IDB4MgorCisJCQk+OworCisJCXBjaWVAMCB7CisJCQlyZWcgPSA8MHgwIDB4MCAweDAgMHgwIDB4MD47CisJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJCXJhbmdlcyA9IDwweDIwMDAwMDAgMHgwIDB4YzAwMDAwMDAKKwkJCQkgIDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMAorCQkJCSAgMHgwIDB4MjAwMDAwMDAKKworCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDAgMHgxMDAwMD47CisJCQl1bGkxNTc1QDAgeworCQkJCXJlZyA9IDwweDAgMHgwIDB4MCAweDAgMHgwPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwyPjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGMwMDAwMDAwCisJCQkJCSAgMHgyMDAwMDAwIDB4MCAweGMwMDAwMDAwCisJCQkJCSAgMHgwIDB4MjAwMDAwMDAKKworCQkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkJICAweDAgMHgxMDAwMD47CisJCQkJaXNhQDFlIHsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiaXNhIjsKKwkJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkJCQlyZWcgPSA8MHhmMDAwIDB4MCAweDAgMHgwIDB4MD47CisJCQkJCXJhbmdlcyA9IDwweDEgMHgwIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJCQkgIDB4MTAwMD47CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jmk4MjU5PjsKKworCQkJCQlpODI1OTogaW50ZXJydXB0LWNvbnRyb2xsZXJAMjAgeworCQkJCQkJcmVnID0gPDB4MSAweDIwIDB4MgorCQkJCQkJICAgICAgIDB4MSAweGEwIDB4MgorCQkJCQkJICAgICAgIDB4MSAweDRkMCAweDI+OworCQkJCQkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCQkJCQlkZXZpY2VfdHlwZSA9ICJpbnRlcnJ1cHQtY29udHJvbGxlciI7CisJCQkJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCQkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCQkJCQljb21wYXRpYmxlID0gImNocnAsaWljIjsKKwkJCQkJCWludGVycnVwdHMgPSA8OSAyPjsKKwkJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQl9OworCisJCQkJCWk4MDQyQDYwIHsKKwkJCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJCQlyZWcgPSA8MHgxIDB4NjAgMHgxIDB4MSAweDY0IDB4MT47CisJCQkJCQlpbnRlcnJ1cHRzID0gPDEgMyAxMiAzPjsKKwkJCQkJCWludGVycnVwdC1wYXJlbnQgPQorCQkJCQkJCTwmaTgyNTk+OworCisJCQkJCQlrZXlib2FyZEAwIHsKKwkJCQkJCQlyZWcgPSA8MHgwPjsKKwkJCQkJCQljb21wYXRpYmxlID0gInBucFBOUCwzMDMiOworCQkJCQkJfTsKKworCQkJCQkJbW91c2VAMSB7CisJCQkJCQkJcmVnID0gPDB4MT47CisJCQkJCQkJY29tcGF0aWJsZSA9ICJwbnBQTlAsZjAzIjsKKwkJCQkJCX07CisJCQkJCX07CisKKwkJCQkJcnRjQDcwIHsKKwkJCQkJCWNvbXBhdGlibGUgPSAicG5wUE5QLGIwMCI7CisJCQkJCQlyZWcgPSA8MHgxIDB4NzAgMHgyPjsKKwkJCQkJfTsKKworCQkJCQlncGlvQDQwMCB7CisJCQkJCQlyZWcgPSA8MHgxIDB4NDAwIDB4ODA+OworCQkJCQl9OworCQkJCX07CisJCQl9OworCQl9OworCisJfTsKKworCXBjaTE6IHBjaWVAZmZmZTA5MDAwIHsKKwkJY2VsbC1pbmRleCA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0OC1wY2llIjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8Mj47CisJCSNhZGRyZXNzLWNlbGxzID0gPDM+OworCQlyZWcgPSA8MHhmIDB4ZmZlMDkwMDAgMCAweDEwMDA+OworCQlidXMtcmFuZ2UgPSA8MCAyNTU+OworCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGMwMDAwMDAwIDB4YyAweDIwMDAwMDAwIDB4MCAweDIwMDAwMDAwCisJCQkgIDB4MTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGYgMHhmZmMxMDAwMCAweDAgMHgwMDAxMDAwMD47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwzMzMzMzMzMz47CisJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQlpbnRlcnJ1cHRzID0gPDI1IDI+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDB4MCAweDAgMHg3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwKKwkJCS8qIElEU0VMIDB4MCAqLworCQkJMDAwMCAweDAgMHgwIDB4MSAmbXBpYyAweDQgMHgxCisJCQkwMDAwIDB4MCAweDAgMHgyICZtcGljIDB4NSAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDMgJm1waWMgMHg2IDB4MQorCQkJMDAwMCAweDAgMHgwIDB4NCAmbXBpYyAweDcgMHgxCisJCQk+OworCQlwY2llQDAgeworCQkJcmVnID0gPDB4MCAweDAgMHgwIDB4MCAweDA+OworCQkJI3NpemUtY2VsbHMgPSA8Mj47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJCWRldmljZV90eXBlID0gInBjaSI7CisJCQlyYW5nZXMgPSA8MHgyMDAwMDAwIDB4MCAweGMwMDAwMDAwCisJCQkJICAweDIwMDAwMDAgMHgwIDB4YzAwMDAwMDAKKwkJCQkgIDB4MCAweDIwMDAwMDAwCisKKwkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCisJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCSAgMHgwIDB4MTAwMDA+OworCQl9OworCX07CisKKwlwY2kyOiBwY2llQGZmZmUwYTAwMCB7CisJCWNlbGwtaW5kZXggPSA8Mj47CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzg1NDgtcGNpZSI7CisJCWRldmljZV90eXBlID0gInBjaSI7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJcmVnID0gPDB4ZiAweGZmZTBhMDAwIDAgMHgxMDAwPjsKKwkJYnVzLXJhbmdlID0gPDAgMjU1PjsKKwkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMCAweGMgMHg0MDAwMDAwMCAweDAgMHgyMDAwMDAwMAorCQkJICAweDEwMDAwMDAgMHgwIDB4MDAwMDAwMDAgMHhmIDB4ZmZjMjAwMDAgMHgwIDB4MDAwMTAwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8MzMzMzMzMzM+OworCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJaW50ZXJydXB0cyA9IDwyNiAyPjsKKwkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47CisJCWludGVycnVwdC1tYXAgPSA8CisJCQkvKiBJRFNFTCAweDAgKi8KKwkJCTAwMDAgMHgwIDB4MCAweDEgJm1waWMgMHgwIDB4MQorCQkJMDAwMCAweDAgMHgwIDB4MiAmbXBpYyAweDEgMHgxCisJCQkwMDAwIDB4MCAweDAgMHgzICZtcGljIDB4MiAweDEKKwkJCTAwMDAgMHgwIDB4MCAweDQgJm1waWMgMHgzIDB4MQorCQkJPjsKKwkJcGNpZUAwIHsKKwkJCXJlZyA9IDwweDAgMHgwIDB4MCAweDAgMHgwPjsKKwkJCSNzaXplLWNlbGxzID0gPDI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mz47CisJCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQkJcmFuZ2VzID0gPDB4MjAwMDAwMCAweDAgMHhjMDAwMDAwMAorCQkJCSAgMHgyMDAwMDAwIDB4MCAweGMwMDAwMDAwCisJCQkJICAweDAgMHgyMDAwMDAwMAorCisJCQkJICAweDEwMDAwMDAgMHgwIDB4MAorCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKKwkJCQkgIDB4MCAweDEwMDAwPjsKKwkJfTsKKwl9OworfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTcyZHNfY2FtcF9jb3JlMC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU3MmRzX2NhbXBfY29yZTAuZHRzCmluZGV4IGZkNDYyZWYuLjJiYzBjNzEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTcyZHNfY2FtcF9jb3JlMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NzJkc19jYW1wX2NvcmUwLmR0cwpAQCAtNiw3ICs2LDcgQEAKICAqIFRoaXMgZHRzIGZpbGUgYWxsb3dzIGNvcmUwIHRvIGhhdmUgbWVtb3J5LCBsMiwgaTJjLCBkbWExLCBnbG9iYWwtdXRpbCwgZXRoMCwKICAqIGV0aDEsIGNyeXB0bywgcGNpMCwgcGNpMS4KICAqCi0gKiBDb3B5cmlnaHQgMjAwNywgMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciBJbmMuCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMTQ4LDM1ICsxNDgsMzggQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKLQkJCQlyZWcgPSA8MHgwPjsKLQkJCX07Ci0JCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKLQkJCQlyZWcgPSA8MHgxPjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDAgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKKwkJCQkJcmVnID0gPDB4MD47CisJCQkJfTsKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8MHgxPjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgewpAQCAtMjI3LDcgKzIzMCw3IEBACiAJCQlkZXZpY2VfdHlwZSA9ICJvcGVuLXBpYyI7CiAJCQlwcm90ZWN0ZWQtc291cmNlcyA9IDwKIAkJCTMxIDMyIDMzIDM3IDM4IDM5ICAgICAgIC8qIGVuZXQyIGVuZXQzICovCi0JCQk3NiA3NyA3OCA3OSAyNyA0MgkvKiBkbWEyIHBjaTIgc2VyaWFsKi8KKwkJCTc2IDc3IDc4IDc5IDI2IDQyCS8qIGRtYTIgcGNpMiBzZXJpYWwqLwogCQkJMHhlMCAweGUxIDB4ZTIgMHhlMyAgICAgLyogbXNpICovCiAJCQkweGU0IDB4ZTUgMHhlNiAweGU3CiAJCQk+OwpAQCAtMzc2LDcgKzM3OSw3IEBACiAKIAkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCiAJCQkJICAweDEwMDAwMDAgMHgwIDB4MAotCQkJCSAgMHgwIDB4MTAwMDAwPjsKKwkJCQkgIDB4MCAweDEwMDAwPjsKIAkJCXVsaTE1NzVAMCB7CiAJCQkJcmVnID0gPDB4MCAweDAgMHgwIDB4MCAweDA+OwogCQkJCSNzaXplLWNlbGxzID0gPDI+OwpAQCAtMzg3LDcgKzM5MCw3IEBACiAKIAkJCQkJICAweDEwMDAwMDAgMHgwIDB4MAogCQkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCi0JCQkJCSAgMHgwIDB4MTAwMDAwPjsKKwkJCQkJICAweDAgMHgxMDAwMD47CiAJCQkJaXNhQDFlIHsKIAkJCQkJZGV2aWNlX3R5cGUgPSAiaXNhIjsKIAkJCQkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKQEAgLTQ3Nyw3ICs0ODAsNyBAQAogCiAJCQkJICAweDEwMDAwMDAgMHgwIDB4MAogCQkJCSAgMHgxMDAwMDAwIDB4MCAweDAKLQkJCQkgIDB4MCAweDEwMDAwMD47CisJCQkJICAweDAgMHgxMDAwMD47CiAJCX07CiAJfTsKIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU3MmRzX2NhbXBfY29yZTEuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg1NzJkc19jYW1wX2NvcmUxLmR0cwppbmRleCBlMzUyMzBmLi4xNTljYjNhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODU3MmRzX2NhbXBfY29yZTEuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NTcyZHNfY2FtcF9jb3JlMS5kdHMKQEAgLTcsNyArNyw3IEBACiAgKgogICogUGxlYXNlIG5vdGUgdG8gYWRkICItYiAxIiBmb3IgY29yZTEncyBkdHMgY29tcGlsaW5nLgogICoKLSAqIENvcHlyaWdodCAyMDA3LCAyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqIENvcHlyaWdodCAyMDA3LTIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgogICoKICAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAogICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCkBAIC0xODYsNyArMTg2LDcgQEAKIAkJCXByb3RlY3RlZC1zb3VyY2VzID0gPAogCQkJMTggMTYgMTAgNDIgNDUgNTgJLyogTUVNIEwyIG1kaW8gc2VyaWFsIGNyeXB0byAqLwogCQkJMjkgMzAgMzQgMzUgMzYgNDAJLyogZW5ldDAgZW5ldDEgKi8KLQkJCTI0IDI2IDIwIDIxIDIyIDIzCS8qIHBjaWUwIHBjaWUxIGRtYTEgKi8KKwkJCTI0IDI1IDIwIDIxIDIyIDIzCS8qIHBjaTAgcGNpMSBkbWExICovCiAJCQk0MwkJCS8qIGkyYyAqLwogCQkJMHgxIDB4MiAweDMgMHg0ICAgICAgICAgLyogcGNpIHNsb3QgKi8KIAkJCTB4OSAweGEgMHhiIDB4YyAgICAgICAgIC8qIHVzYiAqLwpAQCAtMjI4LDcgKzIyOCw3IEBACiAKIAkJCQkgIDB4MTAwMDAwMCAweDAgMHgwCiAJCQkJICAweDEwMDAwMDAgMHgwIDB4MAotCQkJCSAgMHgwIDB4MTAwMDAwPjsKKwkJCQkgIDB4MCAweDEwMDAwPjsKIAkJfTsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9tcGM4NjEwX2hwY2QuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg2MTBfaHBjZC5kdHMKaW5kZXggZjcyNGQ3Mi4uMWJkM2ViZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg2MTBfaHBjZC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg2MTBfaHBjZC5kdHMKQEAgLTIxNyw2ICsyMTcsNyBAQAogCQkJY29kZWMtaGFuZGxlID0gPCZjczQyNzA+OwogCQkJZnNsLHBsYXliYWNrLWRtYSA9IDwmZG1hMDA+OwogCQkJZnNsLGNhcHR1cmUtZG1hID0gPCZkbWEwMT47CisJCQlmc2wsZmlmby1kZXB0aCA9IDw4PjsKIAkJfTsKIAogCQlzc2lAMTYxMDAgewpAQCAtMjI1LDYgKzIyNiw3IEBACiAJCQlyZWcgPSA8MHgxNjEwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWludGVycnVwdHMgPSA8NjMgMj47CisJCQlmc2wsZmlmby1kZXB0aCA9IDw4PjsKIAkJfTsKIAogCQlkbWFAMjEzMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg2NDFfaHBjbi5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvbXBjODY0MV9ocGNuLmR0cwppbmRleCA0NDgxNTMyLi5kNzJiZWIxOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg2NDFfaHBjbi5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL21wYzg2NDFfaHBjbi5kdHMKQEAgLTE4MCwxMzMgKzE4MCwxNDQgQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKLQkJCQlyZWcgPSA8MD47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKLQkJCQlyZWcgPSA8MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKLQkJCQlyZWcgPSA8Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwxMCAxPjsKLQkJCQlyZWcgPSA8Mz47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjY1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI2NTIwIDB4MjA+OwotCi0JCQl0YmkyOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjc1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI3NTIwIDB4MjA+OwotCi0JCQl0YmkzOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8MD47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8Mz47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAkJCiAJCWVuZXQyOiBldGhlcm5ldEAyNjAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjYwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNjAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDMxIDIgMzIgMiAzMyAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMj47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTI6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQzOiBldGhlcm5ldEAyNzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjcwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNzAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM3IDIgMzggMiAzOSAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkzPjsKIAkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTM6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wY20wMzAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BjbTAzMC5kdHMKaW5kZXggYmUyYzExYy4uODk1ODM0NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BjbTAzMC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BjbTAzMC5kdHMKQEAgLTE5LDYgKzE5LDcgQEAKIAljb21wYXRpYmxlID0gInBoeXRlYyxwY20wMzAiOwogCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCSNzaXplLWNlbGxzID0gPDE+OworCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAogCWNwdXMgewogCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKQEAgLTI5LDI2ICszMCwyNiBAQAogCQkJcmVnID0gPDA+OwogCQkJZC1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwogCQkJaS1jYWNoZS1saW5lLXNpemUgPSA8MzI+OwotCQkJZC1jYWNoZS1zaXplID0gPDB4NDAwMD47CS8qIEwxLCAxNksgICAgICAgICAgKi8KLQkJCWktY2FjaGUtc2l6ZSA9IDwweDQwMDA+OwkvKiBMMSwgMTZLICAgICAgICAgICovCi0JCQl0aW1lYmFzZS1mcmVxdWVuY3kgPSA8MD47CS8qIEZyb20gQm9vdGxvYWRlciAgKi8KLQkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvKiBGcm9tIEJvb3Rsb2FkZXIgICovCi0JCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CQkvKiBGcm9tIEJvb3Rsb2FkZXIgICovCisJCQlkLWNhY2hlLXNpemUgPSA8MHg0MDAwPjsJLy8gTDEsIDE2SworCQkJaS1jYWNoZS1zaXplID0gPDB4NDAwMD47CS8vIEwxLCAxNksKKwkJCXRpbWViYXNlLWZyZXF1ZW5jeSA9IDwwPjsJLy8gZnJvbSBib290bG9hZGVyCisJCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gZnJvbSBib290bG9hZGVyCisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKIAkJfTsKIAl9OwogCiAJbWVtb3J5IHsKIAkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKLQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwNDAwMDAwMD47CS8qIDY0TUIgKi8KKwkJcmVnID0gPDB4MDAwMDAwMDAgMHgwNDAwMDAwMD47CS8vIDY0TUIKIAl9OwogCiAJc29jNTIwMEBmMDAwMDAwMCB7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaW1tciI7Ci0JCXJhbmdlcyA9IDwweDAgMHhmMDAwMDAwMCAweDAwMDBjMDAwPjsKLQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsJCS8qIEZyb20gYm9vdGxvYWRlciAqLwotCQlzeXN0ZW0tZnJlcXVlbmN5ID0gPDA+OwkJLyogRnJvbSBib290bG9hZGVyICovCisJCXJhbmdlcyA9IDwwIDB4ZjAwMDAwMDAgMHgwMDAwYzAwMD47CisJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJc3lzdGVtLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgogCiAJCWNkbUAyMDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItY2RtIiwiZnNsLG1wYzUyMDAtY2RtIjsKQEAgLTU2LDg3ICs1Nyw3MCBAQAogCQl9OwogCiAJCW1wYzUyMDBfcGljOiBpbnRlcnJ1cHQtY29udHJvbGxlckA1MDAgewotCQkJLyogNTIwMCBpbnRlcnJ1cHRzIGFyZSBlbmNvZGVkIGludG8gdHdvIGxldmVsczsgKi8KKwkJCS8vIDUyMDAgaW50ZXJydXB0cyBhcmUgZW5jb2RlZCBpbnRvIHR3byBsZXZlbHM7CiAJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKIAkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47Ci0JCQlkZXZpY2VfdHlwZSA9ICJpbnRlcnJ1cHQtY29udHJvbGxlciI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1waWMiLCJmc2wsbXBjNTIwMC1waWMiOwogCQkJcmVnID0gPDB4NTAwIDB4ODA+OwogCQl9OwogCi0JCXRpbWVyQDYwMCB7CS8qIEdlbmVyYWwgUHVycG9zZSBUaW1lciAqLworCQl0aW1lckA2MDAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwogCQkJcmVnID0gPDB4NjAwIDB4MTA+OwotCQkJaW50ZXJydXB0cyA9IDwweDEgMHg5IDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDEgOSAwPjsKIAkJCWZzbCxoYXMtd2R0OwogCQl9OwogCi0JCXRpbWVyQDYxMCB7CS8qIEdlbmVyYWwgUHVycG9zZSBUaW1lciAqLworCQl0aW1lckA2MTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7Ci0JCQljZWxsLWluZGV4ID0gPDE+OwogCQkJcmVnID0gPDB4NjEwIDB4MTA+OwotCQkJaW50ZXJydXB0cyA9IDwweDEgMHhhIDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTAgMD47CiAJCX07CiAKLQkJZ3B0MjogdGltZXJANjIwIHsgLyogR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZSAqLworCQlncHQyOiB0aW1lckA2MjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQtZ3BpbyIsImZzbCxtcGM1MjAwLWdwdC1ncGlvIjsKLQkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQlyZWcgPSA8MHg2MjAgMHgxMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MSAweGIgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMSAwPjsKIAkJCWdwaW8tY29udHJvbGxlcjsKIAkJCSNncGlvLWNlbGxzID0gPDI+OwogCQl9OwogCi0JCWdwdDM6IHRpbWVyQDYzMCB7IC8qIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUgKi8KKwkJZ3B0MzogdGltZXJANjMwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0LWdwaW8iLCJmc2wsbXBjNTIwMC1ncHQtZ3BpbyI7Ci0JCQljZWxsLWluZGV4ID0gPDM+OwogCQkJcmVnID0gPDB4NjMwIDB4MTA+OwotCQkJaW50ZXJydXB0cyA9IDwweDEgMHhjIDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTIgMD47CiAJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJfTsKIAotCQlncHQ0OiB0aW1lckA2NDAgeyAvKiBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlICovCisJCWdwdDQ6IHRpbWVyQDY0MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdC1ncGlvIiwiZnNsLG1wYzUyMDAtZ3B0LWdwaW8iOwotCQkJY2VsbC1pbmRleCA9IDw0PjsKIAkJCXJlZyA9IDwweDY0MCAweDEwPjsKLQkJCWludGVycnVwdHMgPSA8MHgxIDB4ZCAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwxIDEzIDA+OwogCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCX07CiAKLQkJZ3B0NTogdGltZXJANjUwIHsgLyogR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZSAqLworCQlncHQ1OiB0aW1lckA2NTAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQtZ3BpbyIsImZzbCxtcGM1MjAwLWdwdC1ncGlvIjsKLQkJCWNlbGwtaW5kZXggPSA8NT47CiAJCQlyZWcgPSA8MHg2NTAgMHgxMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MSAweGUgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MSAxNCAwPjsKIAkJCWdwaW8tY29udHJvbGxlcjsKIAkJCSNncGlvLWNlbGxzID0gPDI+OwogCQl9OwogCi0JCWdwdDY6IHRpbWVyQDY2MCB7IC8qIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUgKi8KKwkJZ3B0NjogdGltZXJANjYwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0LWdwaW8iLCJmc2wsbXBjNTIwMC1ncHQtZ3BpbyI7Ci0JCQljZWxsLWluZGV4ID0gPDY+OwogCQkJcmVnID0gPDB4NjYwIDB4MTA+OwotCQkJaW50ZXJydXB0cyA9IDwweDEgMHhmIDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTUgMD47CiAJCQlncGlvLWNvbnRyb2xsZXI7CiAJCQkjZ3Bpby1jZWxscyA9IDwyPjsKIAkJfTsKIAotCQlncHQ3OiB0aW1lckA2NzAgeyAvKiBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlICovCisJCWdwdDc6IHRpbWVyQDY3MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdC1ncGlvIiwiZnNsLG1wYzUyMDAtZ3B0LWdwaW8iOwotCQkJY2VsbC1pbmRleCA9IDw3PjsKIAkJCXJlZyA9IDwweDY3MCAweDEwPjsKLQkJCWludGVycnVwdHMgPSA8MHgxIDB4MTAgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MSAxNiAwPjsKIAkJCWdwaW8tY29udHJvbGxlcjsKIAkJCSNncGlvLWNlbGxzID0gPDI+OwogCQl9OwpAQCAtMTQ0LDQwICsxMjgsMzMgQEAKIAkJcnRjQDgwMCB7CS8vIFJlYWwgdGltZSBjbG9jawogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcnRjIiwiZnNsLG1wYzUyMDAtcnRjIjsKIAkJCXJlZyA9IDwweDgwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MSAweDUgMHgwIDB4MSAweDYgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MSA1IDAgMSA2IDA+OwogCQl9OwogCiAJCWNhbkA5MDAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbXNjYW4iLCJmc2wsbXBjNTIwMC1tc2NhbiI7Ci0JCQljZWxsLWluZGV4ID0gPDA+OwotCQkJaW50ZXJydXB0cyA9IDwweDIgMHgxMSAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwyIDE3IDA+OwogCQkJcmVnID0gPDB4OTAwIDB4ODA+OwogCQl9OwogCiAJCWNhbkA5ODAgewogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbXNjYW4iLCJmc2wsbXBjNTIwMC1tc2NhbiI7Ci0JCQljZWxsLWluZGV4ID0gPDE+OwotCQkJaW50ZXJydXB0cyA9IDwweDIgMHgxMiAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwyIDE4IDA+OwogCQkJcmVnID0gPDB4OTgwIDB4ODA+OwogCQl9OwogCiAJCWdwaW9fc2ltcGxlOiBncGlvQGIwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncGlvIiwiZnNsLG1wYzUyMDAtZ3BpbyI7CiAJCQlyZWcgPSA8MHhiMDAgMHg0MD47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MSAweDcgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MSA3IDA+OwogCQkJZ3Bpby1jb250cm9sbGVyOwogCQkJI2dwaW8tY2VsbHMgPSA8Mj47CiAJCX07CiAKLQkJZ3Bpb193a3VwOiBncGlvLXdrdXBAYzAwIHsKKwkJZ3Bpb193a3VwOiBncGlvQGMwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncGlvLXdrdXAiLCJmc2wsbXBjNTIwMC1ncGlvLXdrdXAiOwogCQkJcmVnID0gPDB4YzAwIDB4NDA+OwotCQkJaW50ZXJydXB0cyA9IDwweDEgMHg4IDB4MCAweDAgMHgzIDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDEgOCAwIDAgMyAwPjsKIAkJCWdwaW8tY29udHJvbGxlcjsKIAkJCSNncGlvLWNlbGxzID0gPDI+OwogCQl9OwpAQCAtMTg1LDI2ICsxNjIsMjIgQEAKIAkJc3BpQGYwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1zcGkiLCJmc2wsbXBjNTIwMC1zcGkiOwogCQkJcmVnID0gPDB4ZjAwIDB4MjA+OwotCQkJaW50ZXJydXB0cyA9IDwweDIgMHhkIDB4MCAweDIgMHhlIDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDIgMTMgMCAyIDE0IDA+OwogCQl9OwogCiAJCXVzYkAxMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW9oY2kiLCJmc2wsbXBjNTIwMC1vaGNpIiwib2hjaS1iZSI7CiAJCQlyZWcgPSA8MHgxMDAwIDB4ZmY+OwotCQkJaW50ZXJydXB0cyA9IDwweDIgMHg2IDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDIgNiAwPjsKIAkJfTsKIAogCQlkbWEtY29udHJvbGxlckAxMjAwIHsKLQkJCWRldmljZV90eXBlID0gImRtYS1jb250cm9sbGVyIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWJlc3Rjb21tIiwiZnNsLG1wYzUyMDAtYmVzdGNvbW0iOwogCQkJcmVnID0gPDB4MTIwMCAweDgwPjsKLQkJCWludGVycnVwdHMgPSA8MHgzIDB4MCAweDAgIDB4MyAweDEgMHgwICAweDMgMHgyIDB4MCAgMHgzIDB4MyAweDAKLQkJCSAgICAgICAgICAgICAgMHgzIDB4NCAweDAgIDB4MyAweDUgMHgwICAweDMgMHg2IDB4MCAgMHgzIDB4NyAweDAKLQkJCSAgICAgICAgICAgICAgMHgzIDB4OCAweDAgIDB4MyAweDkgMHgwICAweDMgMHhhIDB4MCAgMHgzIDB4YiAweDAKLQkJCSAgICAgICAgICAgICAgMHgzIDB4YyAweDAgIDB4MyAweGQgMHgwICAweDMgMHhlIDB4MCAgMHgzIDB4ZiAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwzIDAgMCAgMyAxIDAgIDMgMiAwICAzIDMgMAorCQkJICAgICAgICAgICAgICAzIDQgMCAgMyA1IDAgIDMgNiAwICAzIDcgMAorCQkJICAgICAgICAgICAgICAzIDggMCAgMyA5IDAgIDMgMTAgMCAgMyAxMSAwCisJCQkgICAgICAgICAgICAgIDMgMTIgMCAgMyAxMyAwICAzIDE0IDAgIDMgMTUgMD47CiAJCX07CiAKIAkJeGxiQDFmMDAgewpAQCAtMjEzLDI0ICsxODYsMTkgQEAKIAkJfTsKIAogCQlhYzk3QDIwMDAgeyAvKiBQU0MxIGluIGFjOTcgbW9kZSAqLwotCQkJZGV2aWNlX3R5cGUgPSAic291bmQiOwogCQkJY29tcGF0aWJsZSA9ICJtcGM1MjAwYi1wc2MtYWM5NyIsImZzbCxtcGM1MjAwYi1wc2MtYWM5NyI7CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJcmVnID0gPDB4MjAwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MiAweDIgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MiAxIDA+OwogCQl9OwogCiAJCS8qIFBTQzIgcG9ydCBpcyB1c2VkIGJ5IENBTjEvMiAqLwogCiAJCXNlcmlhbEAyNDAwIHsgLyogUFNDMyBpbiBVQVJUIG1vZGUgKi8KLQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKLQkJCXBvcnQtbnVtYmVyID0gPDA+OwogCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCXJlZyA9IDwweDI0MDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDwweDIgMHgzIDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDIgMyAwPjsKIAkJfTsKIAogCQkvKiBQU0M0IGlzID8/PyAqLwpAQCAtMjM4LDU1ICsyMDYsNDQgQEAKIAkJLyogUFNDNSBpcyA/Pz8gKi8KIAogCQlzZXJpYWxAMmMwMCB7IC8qIFBTQzYgaW4gVUFSVCBtb2RlICovCi0JCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLXVhcnQiLCJmc2wsbXBjNTIwMC1wc2MtdWFydCI7Ci0JCQlwb3J0LW51bWJlciA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8NT47CiAJCQlyZWcgPSA8MHgyYzAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8MHgyIDB4NCAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJaW50ZXJydXB0cyA9IDwyIDQgMD47CiAJCX07CiAKIAkJZXRoZXJuZXRAMzAwMCB7Ci0JCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWZlYyIsImZzbCxtcGM1MjAwLWZlYyI7CiAJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsKLQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWzAwIDAwIDAwIDAwIDAwIDAwXTsKLQkJCWludGVycnVwdHMgPSA8MHgyIDB4NSAweDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQl9OwogCiAJCW1kaW9AMzAwMCB7CiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbWRpbyIsICJmc2wsbXBjNTIwMC1tZGlvIjsKLQkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OwkvKiBmZWMgcmFuZ2UsIHNpbmNlIHdlIG5lZWQgdG8gc2V0dXAgZmVjIGludGVycnVwdHMgKi8KLQkJCWludGVycnVwdHMgPSA8MHgyIDB4NSAweDA+OwkvKiB0aGVzZSBhcmUgZm9yICJtaWkgY29tbWFuZCBmaW5pc2hlZCIsIG5vdCBsaW5rIGNoYW5nZXMgJiBjby4gKi8KLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW1kaW8iLCJmc2wsbXBjNTIwMC1tZGlvIjsKKwkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OwkvLyBmZWMgcmFuZ2UsIHNpbmNlIHdlIG5lZWQgdG8gc2V0dXAgZmVjIGludGVycnVwdHMKKwkJCWludGVycnVwdHMgPSA8MiA1IDA+OwkvLyB0aGVzZSBhcmUgZm9yICJtaWkgY29tbWFuZCBmaW5pc2hlZCIsIG5vdCBsaW5rIGNoYW5nZXMgJiBjby4KIAotCQkJcGh5MDpldGhlcm5ldC1waHlAMCB7Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCQlyZWcgPSA8MHgwPjsKKwkJCXBoeTA6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQlyZWcgPSA8MD47CiAJCQl9OwogCQl9OwogCiAJCWF0YUAzYTAwIHsKLQkJCWRldmljZV90eXBlID0gImF0YSI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1hdGEiLCJmc2wsbXBjNTIwMC1hdGEiOwogCQkJcmVnID0gPDB4M2EwMCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDB4MiAweDcgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MiA3IDA+OwogCQl9OwogCiAJCWkyY0AzZDAwIHsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MD47CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pMmMiLCJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKLQkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlyZWcgPSA8MHgzZDAwIDB4NDA+OwotCQkJaW50ZXJydXB0cyA9IDwweDIgMHhmIDB4MD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CisJCQlpbnRlcnJ1cHRzID0gPDIgMTUgMD47CiAJCQlmc2w1MjAwLWNsb2NraW5nOwogCQl9OwogCkBAIC0yOTQsMTAgKzI1MSw4IEBACiAJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkJCSNzaXplLWNlbGxzID0gPDA+OwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7Ci0JCQljZWxsLWluZGV4ID0gPDE+OwogCQkJcmVnID0gPDB4M2Q0MCAweDQwPjsKLQkJCWludGVycnVwdHMgPSA8MHgyIDB4MTAgMHgwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWludGVycnVwdHMgPSA8MiAxNiAwPjsKIAkJCWZzbDUyMDAtY2xvY2tpbmc7CiAJCQlydGNANTEgewogCQkJCWNvbXBhdGlibGUgPSAibnhwLHBjZjg1NjMiOwpAQCAtMzA3LDcgKzI2Miw3IEBACiAJCX07CiAKIAkJc3JhbUA4MDAwIHsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXNyYW0iLCJmc2wsbXBjNTIwMC1zcmFtIiwic3JhbSI7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1zcmFtIiwiZnNsLG1wYzUyMDAtc3JhbSI7CiAJCQlyZWcgPSA8MHg4MDAwIDB4NDAwMD47CiAJCX07CiAKQEAgLTM0MCwyMiArMjk1LDIxIEBACiAJCWRldmljZV90eXBlID0gInBjaSI7CiAJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXBjaSIsImZzbCxtcGM1MjAwLXBjaSI7CiAJCXJlZyA9IDwweGYwMDAwZDAwIDB4MTAwPjsKLQkJaW50ZXJydXB0LW1hcC1tYXNrID0gPDB4ZjgwMCAweDAgMHgwIDB4Nz47Ci0JCWludGVycnVwdC1tYXAgPSA8MHhjMDAwIDB4MCAweDAgMHgxICZtcGM1MjAwX3BpYyAweDAgMHgwIDB4MyAvKiAxc3Qgc2xvdCAqLwotCQkJCSAweGMwMDAgMHgwIDB4MCAweDIgJm1wYzUyMDBfcGljIDB4MSAweDEgMHgzCi0JCQkJIDB4YzAwMCAweDAgMHgwIDB4MyAmbXBjNTIwMF9waWMgMHgxIDB4MiAweDMKLQkJCQkgMHhjMDAwIDB4MCAweDAgMHg0ICZtcGM1MjAwX3BpYyAweDEgMHgzIDB4MworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwweGMwMDAgMCAwIDEgJm1wYzUyMDBfcGljIDAgMCAzIC8vIDFzdCBzbG90CisJCQkJIDB4YzAwMCAwIDAgMiAmbXBjNTIwMF9waWMgMSAxIDMKKwkJCQkgMHhjMDAwIDAgMCAzICZtcGM1MjAwX3BpYyAxIDIgMworCQkJCSAweGMwMDAgMCAwIDQgJm1wYzUyMDBfcGljIDEgMyAzCiAKLQkJCQkgMHhjODAwIDB4MCAweDAgMHgxICZtcGM1MjAwX3BpYyAweDEgMHgxIDB4MyAvKiAybmQgc2xvdCAqLwotCQkJCSAweGM4MDAgMHgwIDB4MCAweDIgJm1wYzUyMDBfcGljIDB4MSAweDIgMHgzCi0JCQkJIDB4YzgwMCAweDAgMHgwIDB4MyAmbXBjNTIwMF9waWMgMHgxIDB4MyAweDMKLQkJCQkgMHhjODAwIDB4MCAweDAgMHg0ICZtcGM1MjAwX3BpYyAweDAgMHgwIDB4Mz47CisJCQkJIDB4YzgwMCAwIDAgMSAmbXBjNTIwMF9waWMgMSAxIDMgLy8gMm5kIHNsb3QKKwkJCQkgMHhjODAwIDAgMCAyICZtcGM1MjAwX3BpYyAxIDIgMworCQkJCSAweGM4MDAgMCAwIDMgJm1wYzUyMDBfcGljIDEgMyAzCisJCQkJIDB4YzgwMCAwIDAgNCAmbXBjNTIwMF9waWMgMCAwIDM+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8vIEZyb20gYm9vdCBsb2FkZXIKLQkJaW50ZXJydXB0cyA9IDwweDIgMHg4IDB4MCAweDIgMHg5IDB4MCAweDIgMHhhIDB4MD47Ci0JCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJaW50ZXJydXB0cyA9IDwyIDggMCAyIDkgMCAyIDEwIDA+OwogCQlidXMtcmFuZ2UgPSA8MCAwPjsKLQkJcmFuZ2VzID0gPDB4NDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHgyMDAwMDAwMAotCQkJICAweDAyMDAwMDAwIDB4MCAweGEwMDAwMDAwIDB4YTAwMDAwMDAgMHgwIDB4MTAwMDAwMDAKLQkJCSAgMHgwMTAwMDAwMCAweDAgMHgwMDAwMDAwMCAweGIwMDAwMDAwIDB4MCAweDAxMDAwMDAwPjsKKwkJcmFuZ2VzID0gPDB4NDIwMDAwMDAgMCAweDgwMDAwMDAwIDB4ODAwMDAwMDAgMCAweDIwMDAwMDAwCisJCQkgIDB4MDIwMDAwMDAgMCAweGEwMDAwMDAwIDB4YTAwMDAwMDAgMCAweDEwMDAwMDAwCisJCQkgIDB4MDEwMDAwMDAgMCAweDAwMDAwMDAwIDB4YjAwMDAwMDAgMCAweDAxMDAwMDAwPjsKIAl9OwogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wY20wMzIuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3BjbTAzMi5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDMwMDQyNgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9wY20wMzIuZHRzCkBAIC0wLDAgKzEsMzkyIEBACisvKgorICogcGh5Q09SRS1NUEM1MjAwQi1JTyAocGNtMDMyKSBib2FyZCBEZXZpY2UgVHJlZSBTb3VyY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDYtMjAwOSBQZW5ndXRyb25peAorICogU2FzY2hhIEhhdWVyIDxzLmhhdWVyQHBlbmd1dHJvbml4LmRlPgorICogSnVlcmdlbiBCZWlzZXJ0IDxqLmJlaXNlcnRAcGVuZ3V0cm9uaXguZGU+CisgKiBXb2xmcmFtIFNhbmcgPHcuc2FuZ0BwZW5ndXRyb25peC5kZT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICovCisKKy9kdHMtdjEvOworCisvIHsKKwltb2RlbCA9ICJwaHl0ZWMscGNtMDMyIjsKKwljb21wYXRpYmxlID0gInBoeXRlYyxwY20wMzIiOworCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCSNzaXplLWNlbGxzID0gPDE+OworCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyw1MjAwQDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWQtY2FjaGUtc2l6ZSA9IDwweDQwMDA+OwkvLyBMMSwgMTZLCisJCQlpLWNhY2hlLXNpemUgPSA8MHg0MDAwPjsJLy8gTDEsIDE2SworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OwkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCQl9OworCX07CisKKwltZW1vcnkgeworCQlkZXZpY2VfdHlwZSA9ICJtZW1vcnkiOworCQlyZWcgPSA8MHgwMDAwMDAwMCAweDA4MDAwMDAwPjsJLy8gMTI4TUIKKwl9OworCisJc29jNTIwMEBmMDAwMDAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaW1tciI7CisJCXJhbmdlcyA9IDwwIDB4ZjAwMDAwMDAgMHgwMDAwYzAwMD47CisJCWJ1cy1mcmVxdWVuY3kgPSA8MD47CQkvLyBmcm9tIGJvb3Rsb2FkZXIKKwkJc3lzdGVtLWZyZXF1ZW5jeSA9IDwwPjsJCS8vIGZyb20gYm9vdGxvYWRlcgorCisJCWNkbUAyMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItY2RtIiwiZnNsLG1wYzUyMDAtY2RtIjsKKwkJCXJlZyA9IDwweDIwMCAweDM4PjsKKwkJfTsKKworCQltcGM1MjAwX3BpYzogaW50ZXJydXB0LWNvbnRyb2xsZXJANTAwIHsKKwkJCS8vIDUyMDAgaW50ZXJydXB0cyBhcmUgZW5jb2RlZCBpbnRvIHR3byBsZXZlbHM7CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1waWMiLCJmc2wsbXBjNTIwMC1waWMiOworCQkJcmVnID0gPDB4NTAwIDB4ODA+OworCQl9OworCisJCXRpbWVyQDYwMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lcgorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDYwMCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSA5IDA+OworCQkJZnNsLGhhcy13ZHQ7CisJCX07CisKKwkJdGltZXJANjEwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjEwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDEwIDA+OworCQl9OworCisJCWdwdDI6IHRpbWVyQDYyMCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2MjAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTEgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncHQzOiB0aW1lckA2MzAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjMwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDEyIDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3B0NDogdGltZXJANjQwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDY0MCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxMyAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwdDU6IHRpbWVyQDY1MCB7CS8vIEdlbmVyYWwgUHVycG9zZSBUaW1lciBpbiBHUElPIG1vZGUKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWdwdCIsImZzbCxtcGM1MjAwLWdwdCI7CisJCQlyZWcgPSA8MHg2NTAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDEgMTQgMD47CisJCQlncGlvLWNvbnRyb2xsZXI7CisJCQkjZ3Bpby1jZWxscyA9IDwyPjsKKwkJfTsKKworCQlncHQ2OiB0aW1lckA2NjAgewkvLyBHZW5lcmFsIFB1cnBvc2UgVGltZXIgaW4gR1BJTyBtb2RlCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncHQiLCJmc2wsbXBjNTIwMC1ncHQiOworCQkJcmVnID0gPDB4NjYwIDB4MTA+OworCQkJaW50ZXJydXB0cyA9IDwxIDE1IDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJZ3B0NzogdGltZXJANjcwIHsJLy8gR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGluIEdQSU8gbW9kZQorCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3B0IiwiZnNsLG1wYzUyMDAtZ3B0IjsKKwkJCXJlZyA9IDwweDY3MCAweDEwPjsKKwkJCWludGVycnVwdHMgPSA8MSAxNiAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCXJ0Y0A4MDAgewkvLyBSZWFsIHRpbWUgY2xvY2sKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLXJ0YyIsImZzbCxtcGM1MjAwLXJ0YyI7CisJCQlyZWcgPSA8MHg4MDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDwxIDUgMCAxIDYgMD47CisJCX07CisKKwkJY2FuQDkwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1tc2NhbiIsImZzbCxtcGM1MjAwLW1zY2FuIjsKKwkJCWludGVycnVwdHMgPSA8MiAxNyAwPjsKKwkJCXJlZyA9IDwweDkwMCAweDgwPjsKKwkJfTsKKworCQljYW5AOTgwIHsKKwkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLW1zY2FuIiwiZnNsLG1wYzUyMDAtbXNjYW4iOworCQkJaW50ZXJydXB0cyA9IDwyIDE4IDA+OworCQkJcmVnID0gPDB4OTgwIDB4ODA+OworCQl9OworCisJCWdwaW9fc2ltcGxlOiBncGlvQGIwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1ncGlvIiwiZnNsLG1wYzUyMDAtZ3BpbyI7CisJCQlyZWcgPSA8MHhiMDAgMHg0MD47CisJCQlpbnRlcnJ1cHRzID0gPDEgNyAwPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OworCQl9OworCisJCWdwaW9fd2t1cDogZ3Bpb0BjMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZ3Bpby13a3VwIiwiZnNsLG1wYzUyMDAtZ3Bpby13a3VwIjsKKwkJCXJlZyA9IDwweGMwMCAweDQwPjsKKwkJCWludGVycnVwdHMgPSA8MSA4IDAgMCAzIDA+OworCQkJZ3Bpby1jb250cm9sbGVyOworCQkJI2dwaW8tY2VsbHMgPSA8Mj47CisJCX07CisKKwkJc3BpQGYwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1zcGkiLCJmc2wsbXBjNTIwMC1zcGkiOworCQkJcmVnID0gPDB4ZjAwIDB4MjA+OworCQkJaW50ZXJydXB0cyA9IDwyIDEzIDAgMiAxNCAwPjsKKwkJfTsKKworCQl1c2JAMTAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1vaGNpIiwiZnNsLG1wYzUyMDAtb2hjaSIsIm9oY2ktYmUiOworCQkJcmVnID0gPDB4MTAwMCAweGZmPjsKKwkJCWludGVycnVwdHMgPSA8MiA2IDA+OworCQl9OworCisJCWRtYS1jb250cm9sbGVyQDEyMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItYmVzdGNvbW0iLCJmc2wsbXBjNTIwMC1iZXN0Y29tbSI7CisJCQlyZWcgPSA8MHgxMjAwIDB4ODA+OworCQkJaW50ZXJydXB0cyA9IDwzIDAgMCAgMyAxIDAgIDMgMiAwICAzIDMgMAorCQkJICAgICAgICAgICAgICAzIDQgMCAgMyA1IDAgIDMgNiAwICAzIDcgMAorCQkJICAgICAgICAgICAgICAzIDggMCAgMyA5IDAgIDMgMTAgMCAgMyAxMSAwCisJCQkgICAgICAgICAgICAgIDMgMTIgMCAgMyAxMyAwICAzIDE0IDAgIDMgMTUgMD47CisJCX07CisKKwkJeGxiQDFmMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGIteGxiIiwiZnNsLG1wYzUyMDAteGxiIjsKKwkJCXJlZyA9IDwweDFmMDAgMHgxMDA+OworCQl9OworCisJCWFjOTdAMjAwMCB7CS8qIFBTQzEgaXMgYWM5NyAqLworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcHNjLWFjOTciLCJmc2wsbXBjNTIwMC1wc2MtYWM5NyI7CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJcmVnID0gPDB4MjAwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgMSAwPjsKKwkJfTsKKworCQkvKiBQU0MyIHBvcnQgaXMgdXNlZCBieSBDQU4xLzIgKi8KKworCQlzZXJpYWxAMjQwMCB7IC8qIFBTQzMgaW4gVUFSVCBtb2RlICovCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKKwkJCWNlbGwtaW5kZXggPSA8Mj47CisJCQlyZWcgPSA8MHgyNDAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiAzIDA+OworCQl9OworCisJCS8qIFBTQzQgaXMgPz8/ICovCisKKwkJLyogUFNDNSBpcyA/Pz8gKi8KKworCQlzZXJpYWxAMmMwMCB7IC8qIFBTQzYgaW4gVUFSVCBtb2RlICovCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1wc2MtdWFydCIsImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKKwkJCWNlbGwtaW5kZXggPSA8NT47CisJCQlyZWcgPSA8MHgyYzAwIDB4MTAwPjsKKwkJCWludGVycnVwdHMgPSA8MiA0IDA+OworCQl9OworCisJCWV0aGVybmV0QDMwMDAgeworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZmVjIiwiZnNsLG1wYzUyMDAtZmVjIjsKKwkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDIgNSAwPjsKKwkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OworCQl9OworCisJCW1kaW9AMzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItbWRpbyIsImZzbCxtcGM1MjAwLW1kaW8iOworCQkJcmVnID0gPDB4MzAwMCAweDQwMD47CS8vIGZlYyByYW5nZSwgc2luY2Ugd2UgbmVlZCB0byBzZXR1cCBmZWMgaW50ZXJydXB0cworCQkJaW50ZXJydXB0cyA9IDwyIDUgMD47CS8vIHRoZXNlIGFyZSBmb3IgIm1paSBjb21tYW5kIGZpbmlzaGVkIiwgbm90IGxpbmsgY2hhbmdlcyAmIGNvLgorCisJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJcmVnID0gPDA+OworCQkJfTsKKwkJfTsKKworCQlhdGFAM2EwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1hdGEiLCJmc2wsbXBjNTIwMC1hdGEiOworCQkJcmVnID0gPDB4M2EwMCAweDEwMD47CisJCQlpbnRlcnJ1cHRzID0gPDIgNyAwPjsKKwkJfTsKKworCQlpMmNAM2QwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgzZDAwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDE1IDA+OworCQkJZnNsNTIwMC1jbG9ja2luZzsKKwkJfTsKKworCQlpMmNAM2Q0MCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItaTJjIiwiZnNsLG1wYzUyMDAtaTJjIiwiZnNsLWkyYyI7CisJCQlyZWcgPSA8MHgzZDQwIDB4NDA+OworCQkJaW50ZXJydXB0cyA9IDwyIDE2IDA+OworCQkJZnNsNTIwMC1jbG9ja2luZzsKKwkJCXJ0Y0A1MSB7CisJCQkJY29tcGF0aWJsZSA9ICJueHAscGNmODU2MyI7CisJCQkJcmVnID0gPDB4NTE+OworCQkJfTsKKwkJCWVlcHJvbUA1MiB7CisJCQkJY29tcGF0aWJsZSA9ICJhdDI0LDI0YzMyIjsKKwkJCQlyZWcgPSA8MHg1Mj47CisJCQl9OworCQl9OworCisJCXNyYW1AODAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1zcmFtIiwiZnNsLG1wYzUyMDAtc3JhbSI7CisJCQlyZWcgPSA8MHg4MDAwIDB4NDAwMD47CisJCX07CisJfTsKKworCXBjaUBmMDAwMGQwMCB7CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJZGV2aWNlX3R5cGUgPSAicGNpIjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItcGNpIiwiZnNsLG1wYzUyMDAtcGNpIjsKKwkJcmVnID0gPDB4ZjAwMDBkMDAgMHgxMDA+OworCQlpbnRlcnJ1cHQtbWFwLW1hc2sgPSA8MHhmODAwIDAgMCA3PjsKKwkJaW50ZXJydXB0LW1hcCA9IDwweGMwMDAgMCAwIDEgJm1wYzUyMDBfcGljIDAgMCAzIC8vIDFzdCBzbG90CisJCQkJIDB4YzAwMCAwIDAgMiAmbXBjNTIwMF9waWMgMSAxIDMKKwkJCQkgMHhjMDAwIDAgMCAzICZtcGM1MjAwX3BpYyAxIDIgMworCQkJCSAweGMwMDAgMCAwIDQgJm1wYzUyMDBfcGljIDEgMyAzCisKKwkJCQkgMHhjODAwIDAgMCAxICZtcGM1MjAwX3BpYyAxIDEgMyAvLyAybmQgc2xvdAorCQkJCSAweGM4MDAgMCAwIDIgJm1wYzUyMDBfcGljIDEgMiAzCisJCQkJIDB4YzgwMCAwIDAgMyAmbXBjNTIwMF9waWMgMSAzIDMKKwkJCQkgMHhjODAwIDAgMCA0ICZtcGM1MjAwX3BpYyAwIDAgMz47CisJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLy8gRnJvbSBib290IGxvYWRlcgorCQlpbnRlcnJ1cHRzID0gPDIgOCAwIDIgOSAwIDIgMTAgMD47CisJCWJ1cy1yYW5nZSA9IDwwIDA+OworCQlyYW5nZXMgPSA8MHg0MjAwMDAwMCAwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAwIDB4MjAwMDAwMDAKKwkJCSAgMHgwMjAwMDAwMCAwIDB4YTAwMDAwMDAgMHhhMDAwMDAwMCAwIDB4MTAwMDAwMDAKKwkJCSAgMHgwMTAwMDAwMCAwIDB4MDAwMDAwMDAgMHhiMDAwMDAwMCAwIDB4MDEwMDAwMDA+OworCX07CisKKwlsb2NhbGJ1cyB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDBiLWxwYiIsImZzbCxtcGM1MjAwLWxwYiIsInNpbXBsZS1idXMiOworCisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQlyYW5nZXMgPSA8MCAwIDB4ZmUwMDAwMDAgMHgwMjAwMDAwMAorCQkJICAxIDAgMHhmYzAwMDAwMCAweDAyMDAwMDAwCisJCQkgIDIgMCAweGZiZTAwMDAwIDB4MDAyMDAwMDAKKwkJCSAgMyAwIDB4ZjllMDAwMDAgMHgwMjAwMDAwMAorCQkJICA0IDAgMHhmN2UwMDAwMCAweDAyMDAwMDAwCisJCQkgIDUgMCAweGU2MDAwMDAwIDB4MDIwMDAwMDAKKwkJCSAgNiAwIDB4ZTgwMDAwMDAgMHgwMjAwMDAwMAorCQkJICA3IDAgMHhlYTAwMDAwMCAweDAyMDAwMDAwPjsKKworCQlmbGFzaEAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJjZmktZmxhc2giOworCQkJcmVnID0gPDAgMCAweDAyMDAwMDAwPjsKKwkJCWJhbmstd2lkdGggPSA8ND47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCisJCQlwYXJ0aXRpb25AMCB7CisJCQkJbGFiZWwgPSAidWJvb3RsIjsKKwkJCQlyZWcgPSA8MHgwMDAwMDAwMCAweDAwMDQwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25ANDAwMDAgeworCQkJCWxhYmVsID0gImtlcm5lbCI7CisJCQkJcmVnID0gPDB4MDAwNDAwMDAgMHgwMDFjMDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDIwMDAwMCB7CisJCQkJbGFiZWwgPSAiamZmczIiOworCQkJCXJlZyA9IDwweDAwMjAwMDAwIDB4MDFkMDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkAxZjAwMDAwIHsKKwkJCQlsYWJlbCA9ICJ1Ym9vdCI7CisJCQkJcmVnID0gPDB4MDFmMDAwMDAgMHgwMDA0MDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDFmNDAwMDAgeworCQkJCWxhYmVsID0gImVudiI7CisJCQkJcmVnID0gPDB4MDFmNDAwMDAgMHgwMDA0MDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDFmODAwMDAgeworCQkJCWxhYmVsID0gIm9mdHJlZSI7CisJCQkJcmVnID0gPDB4MDFmODAwMDAgMHgwMDA0MDAwMD47CisJCQl9OworCQkJcGFydGl0aW9uQDFmYzAwMDAgeworCQkJCWxhYmVsID0gInNwYWNlIjsKKwkJCQlyZWcgPSA8MHgwMWZjMDAwMCAweDAwMDQwMDAwPjsKKwkJCX07CisJCX07CisKKwkJc3JhbUAyLDAgeworCQkJY29tcGF0aWJsZSA9ICJtdGQtcmFtIjsKKwkJCXJlZyA9IDwyIDAgMHgwMDIwMDAwMD47CisJCQliYW5rLXdpZHRoID0gPDI+OworCQl9OworCisgICAgICAgICAgICAgICAgLyoKKwkJICogZXhhbXBsZSBzbmlwcGV0cyBmb3IgRlBHQQorCQkgKgorCQkgKiBmcGdhQDMsMCB7CisJCSAqICAgICAgICAgY29tcGF0aWJsZSA9ICJmcGdhX2RyaXZlciI7CisJCSAqICAgICAgICAgcmVnID0gPDMgMCAweDAyMDAwMDAwPjsKKwkJICogICAgICAgICBiYW5rLXdpZHRoID0gPDQ+OworCQkgKiB9OworCQkgKgorCQkgKiBmcGdhQDQsMCB7CisJCSAqICAgICAgICAgY29tcGF0aWJsZSA9ICJmcGdhX2RyaXZlciI7CisJCSAqICAgICAgICAgcmVnID0gPDQgMCAweDAyMDAwMDAwPjsKKwkJICogICAgICAgICBiYW5rLXdpZHRoID0gPDQ+OworCQkgKiB9OworICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgICAgICAgLyoKKwkJICogZXhhbXBsZSBzbmlwcGV0cyBmb3IgZnJlZSBjaGlwc2VsZWN0cworICAgICAgICAgICAgICAgICAqCisJCSAqIGRldmljZUA1LDAgeworCQkgKiAgICAgICAgIGNvbXBhdGlibGUgPSAiY3VzdG9tX2RyaXZlciI7CisJCSAqICAgICAgICAgcmVnID0gPDUgMCAweDAyMDAwMDAwPjsKKwkJICogfTsKKyAgICAgICAgICAgICAgICAgKgorCQkgKiBkZXZpY2VANiwwIHsKKwkJICogICAgICAgICBjb21wYXRpYmxlID0gImN1c3RvbV9kcml2ZXIiOworCQkgKiAgICAgICAgIHJlZyA9IDw2IDAgMHgwMjAwMDAwMD47CisJCSAqIH07CisgICAgICAgICAgICAgICAgICoKKwkJICogZGV2aWNlQDcsMCB7CisJCSAqICAgICAgICAgY29tcGF0aWJsZSA9ICJjdXN0b21fZHJpdmVyIjsKKwkJICogICAgICAgICByZWcgPSA8NyAwIDB4MDIwMDAwMDA+OworCQkgKiB9OworICAgICAgICAgICAgICAgICAqLworCX07Cit9OworCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcmVkd29vZC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvcmVkd29vZC5kdHMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWQ0MDJjNAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9yZWR3b29kLmR0cwpAQCAtMCwwICsxLDI0NCBAQAorLyoKKyAqIERldmljZSBUcmVlIFNvdXJjZSBmb3IgQU1DQyBSZWR3b29kKDQ2MFNYKQorICoKKyAqIENvcHlyaWdodCAyMDA4IEFNQ0MgPHRtYXJyaUBhbWNjLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgdmVyc2lvbiAyLiAgVGhpcyBwcm9ncmFtIGlzIGxpY2Vuc2VkICJhcyBpcyIgd2l0aG91dAorICogYW55IHdhcnJhbnR5IG9mIGFueSBraW5kLCB3aGV0aGVyIGV4cHJlc3Mgb3IgaW1wbGllZC4KKyAqLworCisvZHRzLXYxLzsKKworLyB7CisJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJI3NpemUtY2VsbHMgPSA8MT47CisJbW9kZWwgPSAiYW1jYyxyZWR3b29kIjsKKwljb21wYXRpYmxlID0gImFtY2MscmVkd29vZCI7CisJZGNyLXBhcmVudCA9IDwmey9jcHVzL2NwdUAwfT47CisKKwlhbGlhc2VzIHsKKwkJZXRoZXJuZXQwID0gJkVNQUMwOworCQlzZXJpYWwwID0gJlVBUlQwOworCX07CisKKwljcHVzIHsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDA+OworCisJCWNwdUAwIHsKKwkJCWRldmljZV90eXBlID0gImNwdSI7CisJCQltb2RlbCA9ICJQb3dlclBDLDQ2MFNYIjsKKwkJCXJlZyA9IDwweDAwMDAwMDAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQlpLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlkLWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQlpLWNhY2hlLXNpemUgPSA8MzI3Njg+OworCQkJZC1jYWNoZS1zaXplID0gPDMyNzY4PjsKKwkJCWRjci1jb250cm9sbGVyOworCQkJZGNyLWFjY2Vzcy1tZXRob2QgPSAibmF0aXZlIjsKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMDAwMDAwMCAweDAwMDAwMDAwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCX07CisKKwlVSUMwOiBpbnRlcnJ1cHQtY29udHJvbGxlcjAgeworCQljb21wYXRpYmxlID0gImlibSx1aWMtNDYwc3giLCJpYm0sdWljIjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCWNlbGwtaW5kZXggPSA8MD47CisJCWRjci1yZWcgPSA8MHgwYzAgMHgwMDk+OworCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJfTsKKworCVVJQzE6IGludGVycnVwdC1jb250cm9sbGVyMSB7CisJCWNvbXBhdGlibGUgPSAiaWJtLHVpYy00NjBzeCIsImlibSx1aWMiOworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJY2VsbC1pbmRleCA9IDwxPjsKKwkJZGNyLXJlZyA9IDwweDBkMCAweDAwOT47CisJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJaW50ZXJydXB0cyA9IDwweDFlIDB4NCAweDFmIDB4ND47IC8qIGNhc2NhZGUgKi8KKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMD47CisJfTsKKworCVVJQzI6IGludGVycnVwdC1jb250cm9sbGVyMiB7CisJCWNvbXBhdGlibGUgPSAiaWJtLHVpYy00NjBzeCIsImlibSx1aWMiOworCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJY2VsbC1pbmRleCA9IDwyPjsKKwkJZGNyLXJlZyA9IDwweDBlMCAweDAwOT47CisJCSNhZGRyZXNzLWNlbGxzID0gPDA+OworCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJI2ludGVycnVwdC1jZWxscyA9IDwyPjsKKwkJaW50ZXJydXB0cyA9IDwweGEgMHg0IDB4YiAweDQ+OyAvKiBjYXNjYWRlICovCisJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCX07CisKKwlVSUMzOiBpbnRlcnJ1cHQtY29udHJvbGxlcjMgeworCQljb21wYXRpYmxlID0gImlibSx1aWMtNDYwc3giLCJpYm0sdWljIjsKKwkJaW50ZXJydXB0LWNvbnRyb2xsZXI7CisJCWNlbGwtaW5kZXggPSA8Mz47CisJCWRjci1yZWcgPSA8MHgwZjAgMHgwMDk+OworCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mj47CisJCWludGVycnVwdHMgPSA8MHgxMCAweDQgMHgxMSAweDQ+OyAvKiBjYXNjYWRlICovCisJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzA+OworCX07CisKKwlTRFIwOiBzZHIgeworCQljb21wYXRpYmxlID0gImlibSxzZHItNDYwc3giOworCQlkY3ItcmVnID0gPDB4MDBlIDB4MDAyPjsKKwl9OworCisJQ1BSMDogY3ByIHsKKwkJY29tcGF0aWJsZSA9ICJpYm0sY3ByLTQ2MHN4IjsKKwkJZGNyLXJlZyA9IDwweDAwYyAweDAwMj47CisJfTsKKworCXBsYiB7CisJCWNvbXBhdGlibGUgPSAiaWJtLHBsYi00NjBzeCIsICJpYm0scGxiNCI7CisJCSNhZGRyZXNzLWNlbGxzID0gPDI+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJcmFuZ2VzOworCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKworCQlTRFJBTTA6IHNkcmFtIHsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLHNkcmFtLTQ2MHN4IiwgImlibSxzZHJhbS00MDVncCI7CisJCQlkY3ItcmVnID0gPDB4MDEwIDB4MDAyPjsKKwkJfTsKKworCQlNQUwwOiBtY21hbCB7CisJCQljb21wYXRpYmxlID0gImlibSxtY21hbC00NjBzeCIsICJpYm0sbWNtYWwyIjsKKwkJCWRjci1yZWcgPSA8MHgxODAgMHg2Mj47CisJCQludW0tdHgtY2hhbnMgPSA8ND47CisJCQludW0tcngtY2hhbnMgPSA8MzI+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8JlVJQzE+OworCQkJaW50ZXJydXB0cyA9IDwJLypUWEVPQiovIDB4NiAweDQKKwkJCQkJLypSWEVPQiovIDB4NyAweDQKKwkJCQkJLypTRVJSKi8gIDB4MSAweDQKKwkJCQkJLypUWERFKi8gIDB4MiAweDQKKwkJCQkJLypSWERFKi8gIDB4MyAweDQKKwkJCQkJLypDT0FMIFRYMCovIDB4MTggMHgyCisJCQkJCS8qQ09BTCBUWDEqLyAweDE5IDB4MgorCQkJCQkvKkNPQUwgVFgyKi8gMHgxYSAweDIKKwkJCQkJLypDT0FMIFRYMyovIDB4MWIgMHgyCisJCQkJCS8qQ09BTCBSWDAqLyAweDFjIDB4MgorCQkJCQkvKkNPQUwgUlgxKi8gMHgxZCAweDIKKwkJCQkJLypDT0FMIFJYMiovIDB4MWUgMHgyCisJCQkJCS8qQ09BTCBSWDMqLyAweDFmIDB4Mj47CisJCX07CisKKwkJUE9CMDogb3BiIHsKKwkJCWNvbXBhdGlibGUgPSAiaWJtLG9wYi00NjBzeCIsICJpYm0sb3BiIjsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQlyYW5nZXMgPSA8MHhiMDAwMDAwMCAweDAwMDAwMDA0IDB4YjAwMDAwMDAgMHg1MDAwMDAwMD47CisJCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKworCQkJRUJDMDogZWJjIHsKKwkJCQljb21wYXRpYmxlID0gImlibSxlYmMtNDYwc3giLCAiaWJtLGViYyI7CisJCQkJZGNyLXJlZyA9IDwweDAxMiAweDAwMj47CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQkJY2xvY2stZnJlcXVlbmN5ID0gPDA+OyAvKiBGaWxsZWQgaW4gYnkgVS1Cb290ICovCisJCQkJLyogcmFuZ2VzIHByb3BlcnR5IGlzIHN1cHBsaWVkIGJ5IFUtQm9vdCAqLworCQkJCWludGVycnVwdHMgPSA8MHg2IDB4ND47CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmVUlDMT47CisKKwkJCQlub3JfZmxhc2hAMCwwIHsKKwkJCQkJY29tcGF0aWJsZSA9ICJhbWQsczI5Z2w1MTJuIiwgImNmaS1mbGFzaCI7CisJCQkJCWJhbmstd2lkdGggPSA8Mj47CisJCQkJCXJlZyA9IDwweDAwMDAwMDAgMHgwMDAwMDAwMCAweDA0MDAwMDAwPjsKKwkJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJCQlwYXJ0aXRpb25AMCB7CisJCQkJCQlsYWJlbCA9ICJrZXJuZWwiOworCQkJCQkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMDFlMDAwMD47CisJCQkJCX07CisJCQkJCXBhcnRpdGlvbkAxZTAwMDAgeworCQkJCQkJbGFiZWwgPSAiZHRiIjsKKwkJCQkJCXJlZyA9IDwweDAwMWUwMDAwIDB4MDAwMjAwMDA+OworCQkJCQl9OworCQkJCQlwYXJ0aXRpb25AMjAwMDAwIHsKKwkJCQkJCWxhYmVsID0gInJhbWRpc2siOworCQkJCQkJcmVnID0gPDB4MDAyMDAwMDAgMHgwMTQwMDAwMD47CisJCQkJCX07CisJCQkJCXBhcnRpdGlvbkAxNjAwMDAwIHsKKwkJCQkJCWxhYmVsID0gImpmZnMyIjsKKwkJCQkJCXJlZyA9IDwweDAxNjAwMDAwIDB4MDA0MDAwMDA+OworCQkJCQl9OworCQkJCQlwYXJ0aXRpb25AMWEwMDAwMCB7CisJCQkJCQlsYWJlbCA9ICJ1c2VyIjsKKwkJCQkJCXJlZyA9IDwweDAxYTAwMDAwIDB4MDI1NjAwMDA+OworCQkJCQl9OworCQkJCQlwYXJ0aXRpb25AM2Y2MDAwMCB7CisJCQkJCQlsYWJlbCA9ICJlbnYiOworCQkJCQkJcmVnID0gPDB4MDNmNjAwMDAgMHgwMDA0MDAwMD47CisJCQkJCX07CisJCQkJCXBhcnRpdGlvbkAzZmEwMDAwIHsKKwkJCQkJCWxhYmVsID0gInUtYm9vdCI7CisJCQkJCQlyZWcgPSA8MHgwM2ZhMDAwMCAweDAwMDYwMDAwPjsKKwkJCQkJfTsKKwkJCQl9OworCQkJfTsKKworCQkJVUFSVDA6IHNlcmlhbEBlZjYwMDIwMCB7CisJCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCQljb21wYXRpYmxlID0gIm5zMTY1NTAiOworCQkJCXJlZyA9IDwweGVmNjAwMjAwIDB4MDAwMDAwMDg+OworCQkJCXZpcnR1YWwtcmVnID0gPDB4ZWY2MDAyMDA+OworCQkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsgLyogRmlsbGVkIGluIGJ5IFUtQm9vdCAqLworCQkJCWN1cnJlbnQtc3BlZWQgPSA8MD47IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZVSUMwPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDB4MCAweDQ+OworCQkJfTsKKworCQkJUkdNSUkwOiBlbWFjLXJnbWlpQGVmNjAwOTAwIHsKKwkJCQljb21wYXRpYmxlID0gImlibSxyZ21paS00NjBzeCIsICJpYm0scmdtaWkiOworCQkJCXJlZyA9IDwweGVmNjAwOTAwIDB4MDAwMDAwMDg+OworCQkJfTsKKworCQkJRU1BQzA6IGV0aGVybmV0QGVmNjAwYTAwIHsKKwkJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCQljb21wYXRpYmxlID0gImlibSxlbWFjLTQ2MHN4IiwgImlibSxlbWFjNCI7CisJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmRU1BQzA+OworCQkJCWludGVycnVwdHMgPSA8MHgwIDB4MT47CisJCQkJI2ludGVycnVwdC1jZWxscyA9IDwxPjsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwwPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQlpbnRlcnJ1cHQtbWFwID0gPC8qU3RhdHVzKi8gMHgwICZVSUMwIDB4MTMgMHg0CisJCQkJCQkgLypXYWtlKi8gICAweDEgJlVJQzIgMHgxZCAweDQ+OworCQkJCXJlZyA9IDwweGVmNjAwYTAwIDB4MDAwMDAwNzA+OworCQkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWzAwMDAwMDAwMDAwMF07IC8qIEZpbGxlZCBpbiBieSBVLUJvb3QgKi8KKwkJCQltYWwtZGV2aWNlID0gPCZNQUwwPjsKKwkJCQltYWwtdHgtY2hhbm5lbCA9IDwwPjsKKwkJCQltYWwtcngtY2hhbm5lbCA9IDwwPjsKKwkJCQljZWxsLWluZGV4ID0gPDA+OworCQkJCW1heC1mcmFtZS1zaXplID0gPDkwMDA+OworCQkJCXJ4LWZpZm8tc2l6ZSA9IDw0MDk2PjsKKwkJCQl0eC1maWZvLXNpemUgPSA8MjA0OD47CisJCQkJcGh5LW1vZGUgPSAicmdtaWkiOworCQkJCXBoeS1tYXAgPSA8MHgwMDAwMDAwMD47CisJCQkJcmdtaWktZGV2aWNlID0gPCZSR01JSTA+OworCQkJCXJnbWlpLWNoYW5uZWwgPSA8MD47CisJCQkJaGFzLWludmVydGVkLXN0YWNyLW9jOworCQkJCWhhcy1uZXctc3RhY3Itc3Rhb3BjOworCQkJfTsKKworCQl9OworCisJfTsKKwljaG9zZW4geworCQlsaW51eCxzdGRvdXQtcGF0aCA9ICIvcGxiL29wYi9zZXJpYWxAZWY2MDAyMDAiOworCX07CisKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODM0OS5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODM0OS5kdHMKaW5kZXggOGQzNjVhNS4uYTM2ZGJiYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzgzNDkuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4MzQ5LmR0cwpAQCAtMTU5LDY4ICsxNTksNzYgQEAKIAkJCXBoeV90eXBlID0gInVscGkiOwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MDogZXRoZXJuZXQtcGh5QDE5IHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDIwIDB4OD47Ci0JCQkJcmVnID0gPDB4MTk+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDFhIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDIxIDB4OD47Ci0JCQkJcmVnID0gPDB4MWE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzMiAweDggMzMgMHg4IDM0IDB4OD47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CiAJCQlsaW51eCxuZXR3b3JrLWluZGV4ID0gPDA+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMTkgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZpcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwyMCAweDg+OworCQkJCQlyZWcgPSA8MHgxOT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxYSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8JmlwaWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDIxIDB4OD47CisJCQkJCXJlZyA9IDwweDFhPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMHg4IDM2IDB4OCAzNyAweDg+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmaXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OwogCQkJbGludXgsbmV0d29yay1pbmRleCA9IDwxPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODU0OC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODU0OC5kdHMKaW5kZXggMmJhZjRhNS4uOWM1MDc5ZiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzg1NDguZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4NTQ4LmR0cwpAQCAtMjM0LDY2ICsyMzQsNzIgQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkwOiBldGhlcm5ldC1waHlAMTkgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MHg2IDB4MT47Ci0JCQkJcmVnID0gPDB4MTk+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDFhIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDB4NyAweDE+OwotCQkJCXJlZyA9IDwweDFhPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDB4MWQgMHgyIDB4MWUgMHgyIDB4MjIgMHgyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MDogZXRoZXJuZXQtcGh5QDE5IHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MHg2IDB4MT47CisJCQkJCXJlZyA9IDwweDE5PjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxYSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDB4NyAweDE+OworCQkJCQlyZWcgPSA8MHgxYT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MHgyMyAweDIgMHgyNCAweDIgMHgyOCAweDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCXNlcmlhbDA6IHNlcmlhbEA0NTAwIHsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4NTYwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4NTYwLmR0cwppbmRleCAwMTU0MmY3Li5iNzcyNDA1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODU2MC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzg1NjAuZHRzCkBAIC0xMzksNzcgKzEzOSw4MyBAQAogCQkJfTsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0JCQlwaHkwOiBldGhlcm5ldC1waHlAMTkgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MHg2IDB4MT47Ci0JCQkJcmVnID0gPDB4MTk+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDFhIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDB4NyAweDE+OwotCQkJCXJlZyA9IDwweDFhPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAxYiB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDwweDggMHgxPjsKLQkJCQlyZWcgPSA8MHgxYj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkzOiBldGhlcm5ldC1waHlAMWMgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MHg4IDB4MT47Ci0JCQkJcmVnID0gPDB4MWM+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwweDFkIDB4MiAweDFlIDB4MiAweDIyIDB4Mj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMTkgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDYgMHgxPjsKKwkJCQkJcmVnID0gPDB4MTk+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MTogZXRoZXJuZXQtcGh5QDFhIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MHg3IDB4MT47CisJCQkJCXJlZyA9IDwweDFhPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAxYiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDB4OCAweDE+OworCQkJCQlyZWcgPSA8MHgxYj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMWMgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDwweDggMHgxPjsKKwkJCQkJcmVnID0gPDB4MWM+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MHgyMyAweDIgMHgyNCAweDIgMHgyOCAweDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCW1waWM6IHBpY0A0MDAwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODY0MWQuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NiYzg2NDFkLmR0cwppbmRleCAzNmRiOTgxLi5lM2U5MTRlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc2JjODY0MWQuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zYmM4NjQxZC5kdHMKQEAgLTE5MiwxMzIgKzE5MiwxNDQgQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkwOiBldGhlcm5ldC1waHlAMWYgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MTAgMT47Ci0JCQkJcmVnID0gPDB4MWY+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDAgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MTAgMT47Ci0JCQkJcmVnID0gPDA+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MTAgMT47Ci0JCQkJcmVnID0gPDE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MzogZXRoZXJuZXQtcGh5QDIgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8MTAgMT47Ci0JCQkJcmVnID0gPDI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI2NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNjUyMCAweDIwPjsKLQotCQkJdGJpMjogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI3NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNzUyMCAweDIwPjsKLQotCQkJdGJpMzogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwICAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTA+OwogCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTA6IGV0aGVybmV0LXBoeUAxZiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8MHgxZj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8MD47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkyOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8MT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMiB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDEwIDE+OworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MjogZXRoZXJuZXRAMjYwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI2MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjYwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzMSAyIDMyIDIgMzMgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTI+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkyOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MzogZXRoZXJuZXRAMjcwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8Mz47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI3MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjcwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNyAyIDM4IDIgMzkgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mz47CiAJCQlwaHktY29ubmVjdGlvbi10eXBlID0gInJnbWlpLWlkIjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkzOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc29jcmF0ZXMuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NvY3JhdGVzLmR0cwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5iOGQwZmM2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3NvY3JhdGVzLmR0cwpAQCAtMCwwICsxLDMzOCBAQAorLyoKKyAqIERldmljZSBUcmVlIFNvdXJjZSBmb3IgdGhlIFNvY3JhdGVzIGJvYXJkIChNUEM4NTQ0KS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDggRW1jcmFmdCBTeXN0ZW1zLgorICogU2VyZ2VpIFBvc2VsZW5vdiwgPHNwb3NlbGVub3ZAZW1jcmFmdC5jb20+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisvZHRzLXYxLzsKKworLyB7CisJbW9kZWwgPSAiYWJiLHNvY3JhdGVzIjsKKwljb21wYXRpYmxlID0gImFiYixzb2NyYXRlcyI7CisJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJI3NpemUtY2VsbHMgPSA8MT47CisKKwlhbGlhc2VzIHsKKwkJZXRoZXJuZXQwID0gJmVuZXQwOworCQlldGhlcm5ldDEgPSAmZW5ldDE7CisJCXNlcmlhbDAgPSAmc2VyaWFsMDsKKwkJc2VyaWFsMSA9ICZzZXJpYWwxOworCQlwY2kwID0gJnBjaTA7CisJfTsKKworCWNwdXMgeworCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJI3NpemUtY2VsbHMgPSA8MD47CisKKwkJUG93ZXJQQyw4NTQ0QDAgeworCQkJZGV2aWNlX3R5cGUgPSAiY3B1IjsKKwkJCXJlZyA9IDwwPjsKKwkJCWQtY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWktY2FjaGUtbGluZS1zaXplID0gPDMyPjsKKwkJCWQtY2FjaGUtc2l6ZSA9IDwweDgwMDA+OwkvLyBMMSwgMzJLCisJCQlpLWNhY2hlLXNpemUgPSA8MHg4MDAwPjsJLy8gTDEsIDMySworCQkJdGltZWJhc2UtZnJlcXVlbmN5ID0gPDA+OworCQkJYnVzLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCW5leHQtbGV2ZWwtY2FjaGUgPSA8JkwyPjsKKwkJfTsKKwl9OworCisJbWVtb3J5IHsKKwkJZGV2aWNlX3R5cGUgPSAibWVtb3J5IjsKKwkJcmVnID0gPDB4MDAwMDAwMDAgMHgwMDAwMDAwMD47CS8vIEZpbGxlZCBpbiBieSBVLUJvb3QKKwl9OworCisJc29jODU0NEBlMDAwMDAwMCB7CisJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkjc2l6ZS1jZWxscyA9IDwxPjsKKworCQlyYW5nZXMgPSA8MHgwMDAwMDAwMCAweGUwMDAwMDAwIDB4MDAxMDAwMDA+OworCQlyZWcgPSA8MHhlMDAwMDAwMCAweDAwMDAxMDAwPjsJLy8gQ0NTUkJBUiAxTQorCQlidXMtZnJlcXVlbmN5ID0gPDA+OwkJLy8gRmlsbGVkIGluIGJ5IFUtQm9vdAorCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ0LWltbXIiLCAic2ltcGxlLWJ1cyI7CisKKwkJbWVtb3J5LWNvbnRyb2xsZXJAMjAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ0LW1lbW9yeS1jb250cm9sbGVyIjsKKwkJCXJlZyA9IDwweDIwMDAgMHgxMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJaW50ZXJydXB0cyA9IDwxOCAyPjsKKwkJfTsKKworCQlMMjogbDItY2FjaGUtY29udHJvbGxlckAyMDAwMCB7CisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ0LWwyLWNhY2hlLWNvbnRyb2xsZXIiOworCQkJcmVnID0gPDB4MjAwMDAgMHgxMDAwPjsKKwkJCWNhY2hlLWxpbmUtc2l6ZSA9IDwzMj47CisJCQljYWNoZS1zaXplID0gPDB4NDAwMDA+OwkvLyBMMiwgMjU2SworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlpbnRlcnJ1cHRzID0gPDE2IDI+OworCQl9OworCisJCWkyY0AzMDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDMwMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw0MyAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZGZzcnI7CisKKwkJCWR0dEAyOCB7CisJCQkJY29tcGF0aWJsZSA9ICJ3aW5ib25kLHc4Mzc4MmQiOworCQkJCXJlZyA9IDwweDI4PjsKKwkJCX07CisJCQlydGNAMzIgeworCQkJCWNvbXBhdGlibGUgPSAiZXBzb24scng4MDI1IjsKKwkJCQlyZWcgPSA8MHgzMj47CisJCQkJaW50ZXJydXB0cyA9IDw3IDE+OworCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJfTsKKwkJCWR0dEA0YyB7CisJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHM3NSI7CisJCQkJcmVnID0gPDB4NGM+OworCQkJfTsKKwkJCXRzQDRhIHsKKwkJCQljb21wYXRpYmxlID0gInRpLHRzYzIwMDMiOworCQkJCXJlZyA9IDwweDRhPjsKKwkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQl9OworCQl9OworCisJCWkyY0AzMTAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJY29tcGF0aWJsZSA9ICJmc2wtaTJjIjsKKwkJCXJlZyA9IDwweDMxMDAgMHgxMDA+OworCQkJaW50ZXJydXB0cyA9IDw0MyAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJZGZzcnI7CisJCX07CisKKwkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CisJCQltb2RlbCA9ICJlVFNFQyI7CisJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOworCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OworCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CisJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJcGh5LWhhbmRsZSA9IDwmcGh5MD47CisJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKKwkJCXBoeS1jb25uZWN0aW9uLXR5cGUgPSAicmdtaWktaWQiOworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDAgMT47CisJCQkJCXJlZyA9IDwwPjsKKwkJCQl9OworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8MCAxPjsKKwkJCQkJcmVnID0gPDE+OworCQkJCX07CisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCQllbmV0MTogZXRoZXJuZXRAMjYwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCWNlbGwtaW5kZXggPSA8MT47CisJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKKwkJCW1vZGVsID0gImVUU0VDIjsKKwkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CisJCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI2MDAwIDB4MTAwMD47CisJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKKwkJCWludGVycnVwdHMgPSA8MzEgMiAzMiAyIDMzIDI+OworCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKKwkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OworCQkJcGh5LWNvbm5lY3Rpb24tdHlwZSA9ICJyZ21paS1pZCI7CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQl9OworCQkJfTsKKwkJfTsKKworCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CisJCQljZWxsLWluZGV4ID0gPDA+OworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8MHg0NTAwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8NDIgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQlzZXJpYWwxOiBzZXJpYWxANDYwMCB7CisJCQljZWxsLWluZGV4ID0gPDE+OworCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKKwkJCWNvbXBhdGlibGUgPSAibnMxNjU1MCI7CisJCQlyZWcgPSA8MHg0NjAwIDB4MTAwPjsKKwkJCWNsb2NrLWZyZXF1ZW5jeSA9IDwwPjsKKwkJCWludGVycnVwdHMgPSA8NDIgMj47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJfTsKKworCQlnbG9iYWwtdXRpbGl0aWVzQGUwMDAwIHsJLy9nbG9iYWwgdXRpbGl0aWVzIGJsb2NrCisJCQljb21wYXRpYmxlID0gImZzbCxtcGM4NTQ4LWd1dHMiOworCQkJcmVnID0gPDB4ZTAwMDAgMHgxMDAwPjsKKwkJCWZzbCxoYXMtcnN0Y3I7CisJCX07CisKKwkJbXBpYzogcGljQDQwMDAwIHsKKwkJCWludGVycnVwdC1jb250cm9sbGVyOworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MD47CisJCQkjaW50ZXJydXB0LWNlbGxzID0gPDI+OworCQkJcmVnID0gPDB4NDAwMDAgMHg0MDAwMD47CisJCQljb21wYXRpYmxlID0gImNocnAsb3Blbi1waWMiOworCQkJZGV2aWNlX3R5cGUgPSAib3Blbi1waWMiOworCQl9OworCX07CisKKworCWxvY2FsYnVzIHsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0NC1sb2NhbGJ1cyIsCisJCSAgICAgICAgICAgICAiZnNsLHBxMy1sb2NhbGJ1cyIsCisJCQkgICAgICJzaW1wbGUtYnVzIjsKKwkJI2FkZHJlc3MtY2VsbHMgPSA8Mj47CisJCSNzaXplLWNlbGxzID0gPDE+OworCQlyZWcgPSA8MHhlMDAwNTAwMCAweDQwPjsKKworCQlyYW5nZXMgPSA8MCAwIDB4ZmMwMDAwMDAgMHgwNDAwMDAwMAorCQkJICAyIDAgMHhjODAwMDAwMCAweDA0MDAwMDAwCisJCQkgIDMgMCAweGMwMDAwMDAwIDB4MDAxMDAwMDAKKwkJCT47IC8qIE92ZXJ3cml0dGVuIGJ5IFUtQm9vdCAqLworCisJCW5vcl9mbGFzaEAwLDAgeworCQkJY29tcGF0aWJsZSA9ICJhbWQsczI5Z2wyNTZuIiwgImNmaS1mbGFzaCI7CisJCQliYW5rLXdpZHRoID0gPDI+OworCQkJcmVnID0gPDB4MCAweDAwMDAwMCAweDQwMDAwMDA+OworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKKwkJCXBhcnRpdGlvbkAwIHsKKwkJCQlsYWJlbCA9ICJrZXJuZWwiOworCQkJCXJlZyA9IDwweDAgMHgxZTAwMDA+OworCQkJCXJlYWQtb25seTsKKwkJCX07CisJCQlwYXJ0aXRpb25AMWUwMDAwIHsKKwkJCQlsYWJlbCA9ICJkdGIiOworCQkJCXJlZyA9IDwweDFlMDAwMCAweDIwMDAwPjsKKwkJCX07CisJCQlwYXJ0aXRpb25AMjAwMDAwIHsKKwkJCQlsYWJlbCA9ICJyb290IjsKKwkJCQlyZWcgPSA8MHgyMDAwMDAgMHgyMDAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkA0MDAwMDAgeworCQkJCWxhYmVsID0gInVzZXIiOworCQkJCXJlZyA9IDwweDQwMDAwMCAweDNiODAwMDA+OworCQkJfTsKKwkJCXBhcnRpdGlvbkAzZjgwMDAwIHsKKwkJCQlsYWJlbCA9ICJlbnYiOworCQkJCXJlZyA9IDwweDNmODAwMDAgMHg0MDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKwkJCXBhcnRpdGlvbkAzZmMwMDAwIHsKKwkJCQlsYWJlbCA9ICJ1LWJvb3QiOworCQkJCXJlZyA9IDwweDNmYzAwMDAgMHg0MDAwMD47CisJCQkJcmVhZC1vbmx5OworCQkJfTsKKwkJfTsKKworCQlkaXNwbGF5QDIsMCB7CisJCQljb21wYXRpYmxlID0gImZ1aml0c3UsbGltZSI7CisJCQlyZWcgPSA8MiAweDAgMHg0MDAwMDAwPjsKKwkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJaW50ZXJydXB0cyA9IDw2IDE+OworCQl9OworCisJCWZwZ2FfcGljOiBmcGdhLXBpY0AzLDEwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWJiLHNvY3JhdGVzLWZwZ2EtcGljIjsKKwkJCXJlZyA9IDwzIDB4MTAgMHgxMD47CisJCQlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKwkJCS8qIElSUXMgMiwgMTAsIDExLCBhY3RpdmUgbG93LCBsZXZlbC1zZW5zaXRpdmUgKi8KKwkJCWludGVycnVwdHMgPSA8MiAxIDEwIDEgMTEgMT47CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8Mz47CisJCX07CisKKwkJc3BpQDMsNjAgeworCQkJY29tcGF0aWJsZSA9ICJhYmIsc29jcmF0ZXMtc3BpIjsKKwkJCXJlZyA9IDwzIDB4NjAgMHgxMD47CisJCQlpbnRlcnJ1cHRzID0gPDggNCAwPjsJLy8gbnVtYmVyLCB0eXBlLCByb3V0aW5nCisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZmcGdhX3BpYz47CisJCX07CisKKwkJbmFuZEAzLDcwIHsKKwkJCWNvbXBhdGlibGUgPSAiYWJiLHNvY3JhdGVzLW5hbmQiOworCQkJcmVnID0gPDMgMHg3MCAweDA0PjsKKwkJCWJhbmstd2lkdGggPSA8MT47CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OworCQkJZGF0YUAwIHsKKwkJCQlsYWJlbCA9ICJkYXRhIjsKKwkJCQlyZWcgPSA8MHgwIDB4NDAwMDAwMDA+OworCQkJfTsKKwkJfTsKKworCQljYW5AMywxMDAgeworCQkJY29tcGF0aWJsZSA9ICJwaGlsaXBzLHNqYTEwMDAiOworCQkJcmVnID0gPDMgMHgxMDAgMHg4MD47CisJCQlpbnRlcnJ1cHRzID0gPDIgOCAxPjsJLy8gbnVtYmVyLCB0eXBlLCByb3V0aW5nCisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZmcGdhX3BpYz47CisJCX07CisJfTsKKworCXBjaTA6IHBjaUBlMDAwODAwMCB7CisJCWNlbGwtaW5kZXggPSA8MD47CisJCSNpbnRlcnJ1cHQtY2VsbHMgPSA8MT47CisJCSNzaXplLWNlbGxzID0gPDI+OworCQkjYWRkcmVzcy1jZWxscyA9IDwzPjsKKwkJY29tcGF0aWJsZSA9ICJmc2wsbXBjODU0MC1wY2kiOworCQlkZXZpY2VfdHlwZSA9ICJwY2kiOworCQlyZWcgPSA8MHhlMDAwODAwMCAweDEwMDA+OworCQljbG9jay1mcmVxdWVuY3kgPSA8NjY2NjY2NjY+OworCisJCWludGVycnVwdC1tYXAtbWFzayA9IDwweGY4MDAgMHgwIDB4MCAweDc+OworCQlpbnRlcnJ1cHQtbWFwID0gPAorCQkJCS8qIElEU0VMIDB4MTEgKi8KKwkJCQkgMHg4ODAwIDB4MCAweDAgMSAmbXBpYyA1IDEKKwkJCQkvKiBJRFNFTCAweDEyICovCisJCQkJIDB4OTAwMCAweDAgMHgwIDEgJm1waWMgNCAxPjsKKwkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCWludGVycnVwdHMgPSA8MjQgMj47CisJCWJ1cy1yYW5nZSA9IDwweDAgMHgwPjsKKwkJcmFuZ2VzID0gPDB4MDIwMDAwMDAgMHgwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAweDAgMHgyMDAwMDAwMAorCQkJICAweDAxMDAwMDAwIDB4MCAweDAwMDAwMDAwIDB4ZTIwMDAwMDAgMHgwIDB4MDEwMDAwMDA+OworCX07CisKK307CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvc3R4X2dwM184NTYwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zdHhfZ3AzXzg1NjAuZHRzCmluZGV4IGZmZjMzZmUuLjhiMTczOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zdHhfZ3AzXzg1NjAuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy9zdHhfZ3AzXzg1NjAuZHRzCkBAIC0xMjQsNjYgKzEyNCw3MiBAQAogCQkJfTsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDUgND47Ci0JCQkJcmVnID0gPDI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5NDogZXRoZXJuZXQtcGh5QDQgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8NSA0PjsKLQkJCQlyZWcgPSA8ND47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMD47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkyPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw1IDQ+OworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHk0OiBldGhlcm5ldC1waHlANCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDUgND47CisJCQkJCXJlZyA9IDw0PjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDIgMzYgMiA0MCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHk0PjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQltcGljOiBwaWNANDAwMDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTUyMDAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTUyMDAuZHRzCmluZGV4IDkwNjMwMmUuLmM5NTkwYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW01MjAwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtNTIwMC5kdHMKQEAgLTE3LDYgKzE3LDcgQEAKIAljb21wYXRpYmxlID0gInRxYyx0cW01MjAwIjsKIAkjYWRkcmVzcy1jZWxscyA9IDwxPjsKIAkjc2l6ZS1jZWxscyA9IDwxPjsKKwlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAKIAljcHVzIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC02NiwzNiArNjcsMzMgQEAKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZ3B0IjsKIAkJCXJlZyA9IDwweDYwMCAweDEwPjsKIAkJCWludGVycnVwdHMgPSA8MSA5IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJZnNsLGhhcy13ZHQ7CiAJCX07CiAKIAkJY2FuQDkwMCB7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLW1zY2FuIjsKIAkJCWludGVycnVwdHMgPSA8MiAxNyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJCXJlZyA9IDwweDkwMCAweDgwPjsKIAkJfTsKIAogCQljYW5AOTgwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtbXNjYW4iOwogCQkJaW50ZXJydXB0cyA9IDwyIDE4IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQkJcmVnID0gPDB4OTgwIDB4ODA+OwogCQl9OwogCi0JCWdwaW9AYjAwIHsKKwkJZ3Bpb19zaW1wbGU6IGdwaW9AYjAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZ3BpbyI7CiAJCQlyZWcgPSA8MHhiMDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDEgNyAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKKwkJCWdwaW8tY29udHJvbGxlcjsKKwkJCSNncGlvLWNlbGxzID0gPDI+OwogCQl9OwogCiAJCXVzYkAxMDAwIHsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtb2hjaSIsIm9oY2ktYmUiOwogCQkJcmVnID0gPDB4MTAwMCAweGZmPjsKIAkJCWludGVycnVwdHMgPSA8MiA2IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWRtYS1jb250cm9sbGVyQDEyMDAgewpAQCAtMTA1LDcgKzEwMyw2IEBACiAJCQkgICAgICAgICAgICAgIDMgNCAwICAzIDUgMCAgMyA2IDAgIDMgNyAwCiAJCQkgICAgICAgICAgICAgIDMgOCAwICAzIDkgMCAgMyAxMCAwICAzIDExIDAKIAkJCSAgICAgICAgICAgICAgMyAxMiAwICAzIDEzIDAgIDMgMTQgMCAgMyAxNSAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQl4bGJAMWYwMCB7CkBAIC0xMTQsMzkgKzExMSwyOCBAQAogCQl9OwogCiAJCXNlcmlhbEAyMDAwIHsJCS8vIFBTQzEKLQkJCWRldmljZV90eXBlID0gInNlcmlhbCI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLXBzYy11YXJ0IjsKLQkJCXBvcnQtbnVtYmVyID0gPDA+OyAgLy8gTG9naWNhbCBwb3J0IGFzc2lnbm1lbnQKIAkJCXJlZyA9IDwweDIwMDAgMHgxMDA+OwogCQkJaW50ZXJydXB0cyA9IDwyIDEgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCX07CiAKIAkJc2VyaWFsQDIyMDAgewkJLy8gUFNDMgotCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtcHNjLXVhcnQiOwotCQkJcG9ydC1udW1iZXIgPSA8MT47ICAvLyBMb2dpY2FsIHBvcnQgYXNzaWdubWVudAogCQkJcmVnID0gPDB4MjIwMCAweDEwMD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMiAwPjsKLQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1wYzUyMDBfcGljPjsKIAkJfTsKIAogCQlzZXJpYWxAMjQwMCB7CQkvLyBQU0MzCi0JCQlkZXZpY2VfdHlwZSA9ICJzZXJpYWwiOwogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1wc2MtdWFydCI7Ci0JCQlwb3J0LW51bWJlciA9IDwyPjsgIC8vIExvZ2ljYWwgcG9ydCBhc3NpZ25tZW50CiAJCQlyZWcgPSA8MHgyNDAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MiAzIDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWV0aGVybmV0QDMwMDAgewotCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWZlYyI7CiAJCQlyZWcgPSA8MHgzMDAwIDB4NDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyIDUgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkwPjsKIAkJfTsKIApAQCAtMTU2LDEwICsxNDIsOCBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1tZGlvIjsKIAkJCXJlZyA9IDwweDMwMDAgMHg0MDA+OyAgICAgICAvLyBmZWMgcmFuZ2UsIHNpbmNlIHdlIG5lZWQgdG8gc2V0dXAgZmVjIGludGVycnVwdHMKIAkJCWludGVycnVwdHMgPSA8MiA1IDA+OyAgIC8vIHRoZXNlIGFyZSBmb3IgIm1paSBjb21tYW5kIGZpbmlzaGVkIiwgbm90IGxpbmsgY2hhbmdlcyAmIGNvLgotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCiAJCQlwaHkwOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKIAkJCQlyZWcgPSA8MD47CiAJCQl9OwogCQl9OwpAQCAtMTY4LDcgKzE1Miw2IEBACiAJCQljb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWF0YSI7CiAJCQlyZWcgPSA8MHgzYTAwIDB4MTAwPjsKIAkJCWludGVycnVwdHMgPSA8MiA3IDA+OwotCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBjNTIwMF9waWM+OwogCQl9OwogCiAJCWkyY0AzZDQwIHsKQEAgLTE3Nyw3ICsxNjAsNiBAQAogCQkJY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1pMmMiLCJmc2wtaTJjIjsKIAkJCXJlZyA9IDwweDNkNDAgMHg0MD47CiAJCQlpbnRlcnJ1cHRzID0gPDIgMTYgMD47Ci0JCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCQlmc2w1MjAwLWNsb2NraW5nOwogCiAJCQkgcnRjQDY4IHsKQEAgLTE5Miw5ICsxNzQsOCBAQAogCQl9OwogCX07CiAKLQlscGIgewotCQltb2RlbCA9ICJmc2wsbHBiIjsKLQkJY29tcGF0aWJsZSA9ICJmc2wsbHBiIjsKKwlsb2NhbGJ1cyB7CisJCWNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtbHBiIiwic2ltcGxlLWJ1cyI7CiAJCSNhZGRyZXNzLWNlbGxzID0gPDI+OwogCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJcmFuZ2VzID0gPDAgMCAweGZjMDAwMDAwIDB4MDIwMDAwMDA+OwpAQCAtMjIzLDcgKzIwNCw2IEBACiAJCQkJIDB4YzAwMCAwIDAgNCAmbXBjNTIwMF9waWMgMCAwIDM+OwogCQljbG9jay1mcmVxdWVuY3kgPSA8MD47IC8vIEZyb20gYm9vdCBsb2FkZXIKIAkJaW50ZXJydXB0cyA9IDwyIDggMCAyIDkgMCAyIDEwIDA+OwotCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGM1MjAwX3BpYz47CiAJCWJ1cy1yYW5nZSA9IDwwIDA+OwogCQlyYW5nZXMgPSA8MHg0MjAwMDAwMCAwIDB4ODAwMDAwMDAgMHg4MDAwMDAwMCAwIDB4MTAwMDAwMDAKIAkJCSAgMHgwMjAwMDAwMCAwIDB4OTAwMDAwMDAgMHg5MDAwMDAwMCAwIDB4MTAwMDAwMDAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTQwLmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTQwLmR0cwppbmRleCBhNjkzZjAxLi5hYzk0MTNhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU0MC5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDAuZHRzCkBAIC04NCw2ICs4NCwxMSBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlkZnNycjsKIAorCQkJZHR0QDUwIHsKKwkJCQljb21wYXRpYmxlID0gIm5hdGlvbmFsLGxtNzUiOworCQkJCXJlZyA9IDwweDUwPjsKKwkJCX07CisKIAkJCXJ0Y0A2OCB7CiAJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM3IjsKIAkJCQlyZWcgPSA8MHg2OD47CkBAIC0xMzEsOTQgKzEzNiwxMDMgQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDwxPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8Mz47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjY1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI2NTIwIDB4MjA+OwotCi0JCQl0YmkyOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjQwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNDAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDI5IDIgMzAgMiAzNCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDwzPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDIgMzYgMiA0MCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDI6IGV0aGVybmV0QDI2MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDI+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJGRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI2MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjYwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDw0MSAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mz47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMjogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDEuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDEuZHRzCmluZGV4IDllM2Y1ZjBkLi5jNzFiYjVkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU0MS5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDEuZHRzCkBAIC04Myw2ICs4MywxMSBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlkZnNycjsKIAorCQkJZHR0QDUwIHsKKwkJCQljb21wYXRpYmxlID0gIm5hdGlvbmFsLGxtNzUiOworCQkJCXJlZyA9IDwweDUwPjsKKwkJCX07CisKIAkJCXJ0Y0A2OCB7CiAJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM3IjsKIAkJCQlyZWcgPSA8MHg2OD47CkBAIC0xMzAsNzIgKzEzNSw3OCBAQAogCQkJfTsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDwzPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDwxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8Mz47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDgtYmlnZmxhc2guZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDgtYmlnZmxhc2guZHRzCmluZGV4IDE1MDg2ZWIuLjI4YjFhOTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTQ4LWJpZ2ZsYXNoLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU0OC1iaWdmbGFzaC5kdHMKQEAgLTg1LDYgKzg1LDExIEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWRmc3JyOwogCisJCQlkdHRANTAgeworCQkJCWNvbXBhdGlibGUgPSAibmF0aW9uYWwsbG03NSI7CisJCQkJcmVnID0gPDB4NTA+OworCQkJfTsKKwogCQkJcnRjQDY4IHsKIAkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzciOwogCQkJCXJlZyA9IDwweDY4PjsKQEAgLTE0MywxMzQgKzE0OCwxNDYgQEAKIAkJCX07CiAJCX07CiAKLQkJbWRpb0AyNDUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKLQkJCXJlZyA9IDwweDI0NTIwIDB4MjA+OwotCi0JCQlwaHkxOiBldGhlcm5ldC1waHlAMCB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDwxPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTI6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDI+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8Mz47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHk0OiBldGhlcm5ldC1waHlANCB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDw0PjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTU6IGV0aGVybmV0LXBoeUA1IHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDU+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI2NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNjUyMCAweDIwPjsKLQotCQkJdGJpMjogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI3NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNzUyMCAweDIwPjsKLQotCQkJdGJpMzogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDwxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8Mz47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHk0OiBldGhlcm5ldC1waHlANCB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDw0PjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTU6IGV0aGVybmV0LXBoeUA1IHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDU+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJdGJpMDogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDE6IGV0aGVybmV0QDI1MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDE+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDIgMzYgMiA0MCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MjogZXRoZXJuZXRAMjYwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8Mj47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNjAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI2MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzEgMiAzMiAyIDMzIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkyPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTM+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTI6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQzOiBldGhlcm5ldEAyNzAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwzPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI3MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjcwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNyAyIDM4IDIgMzkgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTM+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5ND47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMzogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpAQCAtMzY1LDE0ICszODIsMTQgQEAKIAkJY2FuMEAyLDAgewogCQkJY29tcGF0aWJsZSA9ICJpbnRlbCw4MjUyNyI7IC8vIEJvc2NoIENDNzcwCiAJCQlyZWcgPSA8MiAweDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDw0IDA+OworCQkJaW50ZXJydXB0cyA9IDw0IDE+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAKIAkJY2FuMUAyLDEwMCB7CiAJCQljb21wYXRpYmxlID0gImludGVsLDgyNTI3IjsgLy8gQm9zY2ggQ0M3NzAKIAkJCXJlZyA9IDwyIDB4MTAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8NCAwPjsKKwkJCWludGVycnVwdHMgPSA8NCAxPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQl9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU0OC5kdHMgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU0OC5kdHMKaW5kZXggYjdiNjVmNS4uODI2ZmI2MiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NDguZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTQ4LmR0cwpAQCAtODUsNiArODUsMTEgQEAKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJZGZzcnI7CiAKKwkJCWR0dEA1MCB7CisJCQkJY29tcGF0aWJsZSA9ICJuYXRpb25hbCxsbTc1IjsKKwkJCQlyZWcgPSA8MHg1MD47CisJCQl9OworCiAJCQlydGNANjggewogCQkJCWNvbXBhdGlibGUgPSAiZGFsbGFzLGRzMTMzNyI7CiAJCQkJcmVnID0gPDB4Njg+OwpAQCAtMTQzLDEzNCArMTQ4LDE0NiBAQAogCQkJfTsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAwIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDwzPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTQ6IGV0aGVybmV0LXBoeUA0IHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDQ+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5NTogZXRoZXJuZXQtcGh5QDUgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8NT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQl0YmkwOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjU1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI1NTIwIDB4MjA+OwotCi0JCQl0YmkxOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjY1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI2NTIwIDB4MjA+OwotCi0JCQl0YmkyOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCi0JCW1kaW9AMjc1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKLQkJCXJlZyA9IDwweDI3NTIwIDB4MjA+OwotCi0JCQl0YmkzOiB0YmktcGh5QDExIHsKLQkJCQlyZWcgPSA8MHgxMT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7Ci0JCQl9OwotCQl9OwotCiAJCWVuZXQwOiBldGhlcm5ldEAyNDAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwwPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAwIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDEgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDwzPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTQ6IGV0aGVybmV0LXBoeUA0IHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDQ+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5NTogZXRoZXJuZXQtcGh5QDUgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8NT47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gImVUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNTAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI1MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MzUgMiAzNiAyIDQwIDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkxPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTE+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXRiaTE6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQyOiBldGhlcm5ldEAyNjAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwyPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiZVRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI2MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjYwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzMSAyIDMyIDIgMzMgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTI+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mz47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMjogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJZW5ldDM6IGV0aGVybmV0QDI3MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDM+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJlVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjcwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNzAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM3IDIgMzggMiAzOSAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMz47CiAJCQlwaHktaGFuZGxlID0gPCZwaHk0PjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkzOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQlzZXJpYWwwOiBzZXJpYWxANDUwMCB7CkBAIC0zNjUsMTQgKzM4MiwxNCBAQAogCQljYW4wQDIsMCB7CiAJCQljb21wYXRpYmxlID0gImludGVsLDgyNTI3IjsgLy8gQm9zY2ggQ0M3NzAKIAkJCXJlZyA9IDwyIDB4MCAweDEwMD47Ci0JCQlpbnRlcnJ1cHRzID0gPDQgMD47CisJCQlpbnRlcnJ1cHRzID0gPDQgMT47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJfTsKIAogCQljYW4xQDIsMTAwIHsKIAkJCWNvbXBhdGlibGUgPSAiaW50ZWwsODI1MjciOyAvLyBCb3NjaCBDQzc3MAogCQkJcmVnID0gPDIgMHgxMDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDw0IDA+OworCQkJaW50ZXJydXB0cyA9IDw0IDE+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTU1LmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTU1LmR0cwppbmRleCBjZjkyYjRlLi5hMTMzZGVkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU1NS5kdHMKKysrIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NTUuZHRzCkBAIC04Myw2ICs4MywxMSBAQAogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQlkZnNycjsKIAorCQkJZHR0QDUwIHsKKwkJCQljb21wYXRpYmxlID0gIm5hdGlvbmFsLGxtNzUiOworCQkJCXJlZyA9IDwweDUwPjsKKwkJCX07CisKIAkJCXJ0Y0A2OCB7CiAJCQkJY29tcGF0aWJsZSA9ICJkYWxsYXMsZHMxMzM3IjsKIAkJCQlyZWcgPSA8MHg2OD47CkBAIC0xMzAsNzIgKzEzNSw3OCBAQAogCQkJfTsKIAkJfTsKIAotCQltZGlvQDI0NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOwotCQkJcmVnID0gPDB4MjQ1MjAgMHgyMD47Ci0KLQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDE+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8Mj47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDwzPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXRiaTA6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KLQkJbWRpb0AyNTUyMCB7Ci0JCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKLQkJCSNzaXplLWNlbGxzID0gPDA+OwotCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci10YmkiOwotCQkJcmVnID0gPDB4MjU1MjAgMHgyMD47Ci0KLQkJCXRiaTE6IHRiaS1waHlAMTEgewotCQkJCXJlZyA9IDwweDExPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKLQkJCX07Ci0JCX07Ci0KIAkJZW5ldDA6IGV0aGVybmV0QDI0MDAwIHsKKwkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJI3NpemUtY2VsbHMgPSA8MT47CiAJCQljZWxsLWluZGV4ID0gPDA+OwogCQkJZGV2aWNlX3R5cGUgPSAibmV0d29yayI7CiAJCQltb2RlbCA9ICJUU0VDIjsKIAkJCWNvbXBhdGlibGUgPSAiZ2lhbmZhciI7CiAJCQlyZWcgPSA8MHgyNDAwMCAweDEwMDA+OworCQkJcmFuZ2VzID0gPDB4MCAweDI0MDAwIDB4MTAwMD47CiAJCQlsb2NhbC1tYWMtYWRkcmVzcyA9IFsgMDAgMDAgMDAgMDAgMDAgMDAgXTsKIAkJCWludGVycnVwdHMgPSA8MjkgMiAzMCAyIDM0IDI+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCQl0YmktaGFuZGxlID0gPCZ0YmkwPjsKIAkJCXBoeS1oYW5kbGUgPSA8JnBoeTI+OworCisJCQltZGlvQDUyMCB7CisJCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkJI3NpemUtY2VsbHMgPSA8MD47CisJCQkJY29tcGF0aWJsZSA9ICJmc2wsZ2lhbmZhci1tZGlvIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQlwaHkxOiBldGhlcm5ldC1waHlAMSB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDwxPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXBoeTI6IGV0aGVybmV0LXBoeUAyIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDI+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MzogZXRoZXJuZXQtcGh5QDMgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8Mz47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQl0YmkwOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQllbmV0MTogZXRoZXJuZXRAMjUwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MT47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI1MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjUwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwzNSAyIDM2IDIgNDAgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTE+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5MT47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7CisJCQkJcmVnID0gPDB4NTIwIDB4MjA+OworCisJCQkJdGJpMTogdGJpLXBoeUAxMSB7CisJCQkJCXJlZyA9IDwweDExPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAidGJpLXBoeSI7CisJCQkJfTsKKwkJCX07CiAJCX07CiAKIAkJc2VyaWFsMDogc2VyaWFsQDQ1MDAgewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NjAuZHRzIGIvYXJjaC9wb3dlcnBjL2Jvb3QvZHRzL3RxbTg1NjAuZHRzCmluZGV4IDllMWFiMmQuLjY0OWUyZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy90cW04NTYwLmR0cworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdHFtODU2MC5kdHMKQEAgLTg1LDYgKzg1LDExIEBACiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCWRmc3JyOwogCisJCQlkdHRANTAgeworCQkJCWNvbXBhdGlibGUgPSAibmF0aW9uYWwsbG03NSI7CisJCQkJcmVnID0gPDB4NTA+OworCQkJfTsKKwogCQkJcnRjQDY4IHsKIAkJCQljb21wYXRpYmxlID0gImRhbGxhcyxkczEzMzciOwogCQkJCXJlZyA9IDwweDY4PjsKQEAgLTEzMiw3MiArMTM3LDc4IEBACiAJCQl9OwogCQl9OwogCi0JCW1kaW9AMjQ1MjAgewotCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47Ci0JCQkjc2l6ZS1jZWxscyA9IDwwPjsKLQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItbWRpbyI7Ci0JCQlyZWcgPSA8MHgyNDUyMCAweDIwPjsKLQotCQkJcGh5MTogZXRoZXJuZXQtcGh5QDEgewotCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwotCQkJCWludGVycnVwdHMgPSA8OCAxPjsKLQkJCQlyZWcgPSA8MT47Ci0JCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKLQkJCX07Ci0JCQlwaHkyOiBldGhlcm5ldC1waHlAMiB7Ci0JCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47Ci0JCQkJaW50ZXJydXB0cyA9IDw4IDE+OwotCQkJCXJlZyA9IDwyPjsKLQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOwotCQkJfTsKLQkJCXBoeTM6IGV0aGVybmV0LXBoeUAzIHsKLQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKLQkJCQlpbnRlcnJ1cHRzID0gPDggMT47Ci0JCQkJcmVnID0gPDM+OwotCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7Ci0JCQl9OwotCQkJdGJpMDogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQotCQltZGlvQDI1NTIwIHsKLQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwotCQkJI3NpemUtY2VsbHMgPSA8MD47Ci0JCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLXRiaSI7Ci0JCQlyZWcgPSA8MHgyNTUyMCAweDIwPjsKLQotCQkJdGJpMTogdGJpLXBoeUAxMSB7Ci0JCQkJcmVnID0gPDB4MTE+OwotCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOwotCQkJfTsKLQkJfTsKLQogCQllbmV0MDogZXRoZXJuZXRAMjQwMDAgeworCQkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CisJCQkjc2l6ZS1jZWxscyA9IDwxPjsKIAkJCWNlbGwtaW5kZXggPSA8MD47CiAJCQlkZXZpY2VfdHlwZSA9ICJuZXR3b3JrIjsKIAkJCW1vZGVsID0gIlRTRUMiOwogCQkJY29tcGF0aWJsZSA9ICJnaWFuZmFyIjsKIAkJCXJlZyA9IDwweDI0MDAwIDB4MTAwMD47CisJCQlyYW5nZXMgPSA8MHgwIDB4MjQwMDAgMHgxMDAwPjsKIAkJCWxvY2FsLW1hYy1hZGRyZXNzID0gWyAwMCAwMCAwMCAwMCAwMCAwMCBdOwogCQkJaW50ZXJydXB0cyA9IDwyOSAyIDMwIDIgMzQgMj47CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKIAkJCXRiaS1oYW5kbGUgPSA8JnRiaTA+OwogCQkJcGh5LWhhbmRsZSA9IDwmcGh5Mj47CisKKwkJCW1kaW9ANTIwIHsKKwkJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCQkjc2l6ZS1jZWxscyA9IDwwPjsKKwkJCQljb21wYXRpYmxlID0gImZzbCxnaWFuZmFyLW1kaW8iOworCQkJCXJlZyA9IDwweDUyMCAweDIwPjsKKworCQkJCXBoeTE6IGV0aGVybmV0LXBoeUAxIHsKKwkJCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CisJCQkJCWludGVycnVwdHMgPSA8OCAxPjsKKwkJCQkJcmVnID0gPDE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJldGhlcm5ldC1waHkiOworCQkJCX07CisJCQkJcGh5MjogZXRoZXJuZXQtcGh5QDIgeworCQkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZtcGljPjsKKwkJCQkJaW50ZXJydXB0cyA9IDw4IDE+OworCQkJCQlyZWcgPSA8Mj47CisJCQkJCWRldmljZV90eXBlID0gImV0aGVybmV0LXBoeSI7CisJCQkJfTsKKwkJCQlwaHkzOiBldGhlcm5ldC1waHlAMyB7CisJCQkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OworCQkJCQlpbnRlcnJ1cHRzID0gPDggMT47CisJCQkJCXJlZyA9IDwzPjsKKwkJCQkJZGV2aWNlX3R5cGUgPSAiZXRoZXJuZXQtcGh5IjsKKwkJCQl9OworCQkJCXRiaTA6IHRiaS1waHlAMTEgeworCQkJCQlyZWcgPSA8MHgxMT47CisJCQkJCWRldmljZV90eXBlID0gInRiaS1waHkiOworCQkJCX07CisJCQl9OwogCQl9OwogCiAJCWVuZXQxOiBldGhlcm5ldEAyNTAwMCB7CisJCQkjYWRkcmVzcy1jZWxscyA9IDwxPjsKKwkJCSNzaXplLWNlbGxzID0gPDE+OwogCQkJY2VsbC1pbmRleCA9IDwxPjsKIAkJCWRldmljZV90eXBlID0gIm5ldHdvcmsiOwogCQkJbW9kZWwgPSAiVFNFQyI7CiAJCQljb21wYXRpYmxlID0gImdpYW5mYXIiOwogCQkJcmVnID0gPDB4MjUwMDAgMHgxMDAwPjsKKwkJCXJhbmdlcyA9IDwweDAgMHgyNTAwMCAweDEwMDA+OwogCQkJbG9jYWwtbWFjLWFkZHJlc3MgPSBbIDAwIDAwIDAwIDAwIDAwIDAwIF07CiAJCQlpbnRlcnJ1cHRzID0gPDM1IDIgMzYgMiA0MCAyPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQkJdGJpLWhhbmRsZSA9IDwmdGJpMT47CiAJCQlwaHktaGFuZGxlID0gPCZwaHkxPjsKKworCQkJbWRpb0A1MjAgeworCQkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OworCQkJCSNzaXplLWNlbGxzID0gPDA+OworCQkJCWNvbXBhdGlibGUgPSAiZnNsLGdpYW5mYXItdGJpIjsKKwkJCQlyZWcgPSA8MHg1MjAgMHgyMD47CisKKwkJCQl0YmkxOiB0YmktcGh5QDExIHsKKwkJCQkJcmVnID0gPDB4MTE+OworCQkJCQlkZXZpY2VfdHlwZSA9ICJ0YmktcGh5IjsKKwkJCQl9OworCQkJfTsKIAkJfTsKIAogCQltcGljOiBwaWNANDAwMDAgewpAQCAtMzM1LDE0ICszNDYsMTQgQEAKIAkJY2FuMEAyLDAgewogCQkJY29tcGF0aWJsZSA9ICJpbnRlbCw4MjUyNyI7IC8vIEJvc2NoIENDNzcwCiAJCQlyZWcgPSA8MiAweDAgMHgxMDA+OwotCQkJaW50ZXJydXB0cyA9IDw0IDA+OworCQkJaW50ZXJydXB0cyA9IDw0IDE+OwogCQkJaW50ZXJydXB0LXBhcmVudCA9IDwmbXBpYz47CiAJCX07CiAKIAkJY2FuMUAyLDEwMCB7CiAJCQljb21wYXRpYmxlID0gImludGVsLDgyNTI3IjsgLy8gQm9zY2ggQ0M3NzAKIAkJCXJlZyA9IDwyIDB4MTAwIDB4MTAwPjsKLQkJCWludGVycnVwdHMgPSA8NCAwPjsKKwkJCWludGVycnVwdHMgPSA8NCAxPjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jm1waWM+OwogCQl9OwogCX07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvYm9vdC9kdHMvdmlydGV4NDQwLW1sNTA3LmR0cyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy92aXJ0ZXg0NDAtbWw1MDcuZHRzCmluZGV4IGRjOGU3OGUuLjUyZDhjMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9ib290L2R0cy92aXJ0ZXg0NDAtbWw1MDcuZHRzCisrKyBiL2FyY2gvcG93ZXJwYy9ib290L2R0cy92aXJ0ZXg0NDAtbWw1MDcuZHRzCkBAIC03LDYgKzcsMTUgQEAKICAqIFRoaXMgZmlsZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAgKiB2ZXJzaW9uIDIuIFRoaXMgcHJvZ3JhbSBpcyBsaWNlbnNlZCAiYXMgaXMiIHdpdGhvdXQgYW55IHdhcnJhbnR5IG9mIGFueQogICoga2luZCwgd2hldGhlciBleHByZXNzIG9yIGltcGxpZWQuCisgKgorICogLS0tCisgKgorICogRGV2aWNlIFRyZWUgR2VuZXJhdG9yIHZlcnNpb246IDEuMQorICoKKyAqIENBVVRJT046IFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBieSBsaWJnZW4uCisgKiBWZXJzaW9uOiBYaWxpbnggRURLIDEwLjEuMDMgRURLX0tfU1AzLjYKKyAqCisgKiBYUFMgcHJvamVjdCBkaXJlY3Rvcnk6IG1sNTA3X3BwYzQ0MF9lbWJfcmVmCiAgKi8KIAogL2R0cy12MS87CkBAIC0yMiw4ICszMSw4IEBACiAJCXJlZyA9IDwgMCAweDEwMDAwMDAwID47CiAJfSA7CiAJY2hvc2VuIHsKLQkJYm9vdGFyZ3MgPSAiY29uc29sZT10dHlTMCBpcD1vbiByb290PS9kZXYvcmFtIjsKLQkJbGludXgsc3Rkb3V0LXBhdGggPSAiL3BsYkAwL3NlcmlhbEA4M2UwMDAwMCI7CisJCWJvb3RhcmdzID0gImNvbnNvbGU9dHR5UzAgcm9vdD0vZGV2L3JhbSI7CisJCWxpbnV4LHN0ZG91dC1wYXRoID0gJlJTMjMyX1VhcnRfMTsKIAl9IDsKIAljcHVzIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CkBAIC0xMzYsMTkgKzE0NSwxOSBAQAogCQkJCWNvbXBhdGlibGUgPSAieGxueCxsbC1kbWEtMS4wMC5hIjsKIAkJCQlkY3ItcmVnID0gPCAweDgwIDB4MTEgPjsKIAkJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZ4cHNfaW50Y18wPjsKLQkJCQlpbnRlcnJ1cHRzID0gPCA5IDIgMHhhIDIgPjsKKwkJCQlpbnRlcnJ1cHRzID0gPCAxMCAyIDExIDIgPjsKIAkJCX0gOwogCQl9IDsKIAl9IDsKIAlwbGJfdjQ2XzA6IHBsYkAwIHsKIAkJI2FkZHJlc3MtY2VsbHMgPSA8MT47CiAJCSNzaXplLWNlbGxzID0gPDE+OwotCQljb21wYXRpYmxlID0gInhsbngscGxiLXY0Ni0xLjAyLmEiLCAic2ltcGxlLWJ1cyI7CisJCWNvbXBhdGlibGUgPSAieGxueCxwbGItdjQ2LTEuMDMuYSIsICJzaW1wbGUtYnVzIjsKIAkJcmFuZ2VzIDsKIAkJRElQX1N3aXRjaGVzXzhCaXQ6IGdwaW9AODE0NjAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJ4bG54LHhwcy1ncGlvLTEuMDAuYSI7CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZ4cHNfaW50Y18wPjsKLQkJCWludGVycnVwdHMgPSA8IDYgMiA+OworCQkJaW50ZXJydXB0cyA9IDwgNyAyID47CiAJCQlyZWcgPSA8IDB4ODE0NjAwMDAgMHgxMDAwMCA+OwogCQkJeGxueCxhbGwtaW5wdXRzID0gPDE+OwogCQkJeGxueCxhbGwtaW5wdXRzLTIgPSA8MD47CkBAIC0xNjMsNiArMTcyLDg2IEBACiAJCQl4bG54LHRyaS1kZWZhdWx0ID0gPDB4ZmZmZmZmZmY+OwogCQkJeGxueCx0cmktZGVmYXVsdC0yID0gPDB4ZmZmZmZmZmY+OwogCQl9IDsKKwkJRkxBU0g6IGZsYXNoQGZjMDAwMDAwIHsKKwkJCWJhbmstd2lkdGggPSA8Mj47CisJCQljb21wYXRpYmxlID0gInhsbngseHBzLW1jaC1lbWMtMi4wMC5hIiwgImNmaS1mbGFzaCI7CisJCQlyZWcgPSA8IDB4ZmMwMDAwMDAgMHgyMDAwMDAwID47CisJCQl4bG54LGZhbWlseSA9ICJ2aXJ0ZXg1IjsKKwkJCXhsbngsaW5jbHVkZS1kYXRhd2lkdGgtbWF0Y2hpbmctMCA9IDwweDE+OworCQkJeGxueCxpbmNsdWRlLWRhdGF3aWR0aC1tYXRjaGluZy0xID0gPDB4MD47CisJCQl4bG54LGluY2x1ZGUtZGF0YXdpZHRoLW1hdGNoaW5nLTIgPSA8MHgwPjsKKwkJCXhsbngsaW5jbHVkZS1kYXRhd2lkdGgtbWF0Y2hpbmctMyA9IDwweDA+OworCQkJeGxueCxpbmNsdWRlLW5lZ2VkZ2UtaW9yZWdzID0gPDB4MD47CisJCQl4bG54LGluY2x1ZGUtcGxiLWlwaWYgPSA8MHgxPjsKKwkJCXhsbngsaW5jbHVkZS13cmJ1ZiA9IDwweDE+OworCQkJeGxueCxtYXgtbWVtLXdpZHRoID0gPDB4MTA+OworCQkJeGxueCxtY2gtbmF0aXZlLWR3aWR0aCA9IDwweDIwPjsKKwkJCXhsbngsbWNoLXBsYi1jbGstcGVyaW9kLXBzID0gPDB4MjcxMD47CisJCQl4bG54LG1jaC1zcGxiLWF3aWR0aCA9IDwweDIwPjsKKwkJCXhsbngsbWNoMC1hY2Nlc3NidWYtZGVwdGggPSA8MHgxMD47CisJCQl4bG54LG1jaDAtcHJvdG9jb2wgPSA8MHgwPjsKKwkJCXhsbngsbWNoMC1yZGRhdGFidWYtZGVwdGggPSA8MHgxMD47CisJCQl4bG54LG1jaDEtYWNjZXNzYnVmLWRlcHRoID0gPDB4MTA+OworCQkJeGxueCxtY2gxLXByb3RvY29sID0gPDB4MD47CisJCQl4bG54LG1jaDEtcmRkYXRhYnVmLWRlcHRoID0gPDB4MTA+OworCQkJeGxueCxtY2gyLWFjY2Vzc2J1Zi1kZXB0aCA9IDwweDEwPjsKKwkJCXhsbngsbWNoMi1wcm90b2NvbCA9IDwweDA+OworCQkJeGxueCxtY2gyLXJkZGF0YWJ1Zi1kZXB0aCA9IDwweDEwPjsKKwkJCXhsbngsbWNoMy1hY2Nlc3NidWYtZGVwdGggPSA8MHgxMD47CisJCQl4bG54LG1jaDMtcHJvdG9jb2wgPSA8MHgwPjsKKwkJCXhsbngsbWNoMy1yZGRhdGFidWYtZGVwdGggPSA8MHgxMD47CisJCQl4bG54LG1lbTAtd2lkdGggPSA8MHgxMD47CisJCQl4bG54LG1lbTEtd2lkdGggPSA8MHgyMD47CisJCQl4bG54LG1lbTItd2lkdGggPSA8MHgyMD47CisJCQl4bG54LG1lbTMtd2lkdGggPSA8MHgyMD47CisJCQl4bG54LG51bS1iYW5rcy1tZW0gPSA8MHgxPjsKKwkJCXhsbngsbnVtLWNoYW5uZWxzID0gPDB4Mj47CisJCQl4bG54LHByaW9yaXR5LW1vZGUgPSA8MHgwPjsKKwkJCXhsbngsc3luY2gtbWVtLTAgPSA8MHgwPjsKKwkJCXhsbngsc3luY2gtbWVtLTEgPSA8MHgwPjsKKwkJCXhsbngsc3luY2gtbWVtLTIgPSA8MHgwPjsKKwkJCXhsbngsc3luY2gtbWVtLTMgPSA8MHgwPjsKKwkJCXhsbngsc3luY2gtcGlwZWRlbGF5LTAgPSA8MHgyPjsKKwkJCXhsbngsc3luY2gtcGlwZWRlbGF5LTEgPSA8MHgyPjsKKwkJCXhsbngsc3luY2gtcGlwZWRlbGF5LTIgPSA8MHgyPjsKKwkJCXhsbngsc3luY2gtcGlwZWRlbGF5LTMgPSA8MHgyPjsKKwkJCXhsbngsdGF2ZHYtcHMtbWVtLTAgPSA8MHgxYWRiMD47CisJCQl4bG54LHRhdmR2LXBzLW1lbS0xID0gPDB4M2E5OD47CisJCQl4bG54LHRhdmR2LXBzLW1lbS0yID0gPDB4M2E5OD47CisJCQl4bG54LHRhdmR2LXBzLW1lbS0zID0gPDB4M2E5OD47CisJCQl4bG54LHRjZWR2LXBzLW1lbS0wID0gPDB4MWFkYjA+OworCQkJeGxueCx0Y2Vkdi1wcy1tZW0tMSA9IDwweDNhOTg+OworCQkJeGxueCx0Y2Vkdi1wcy1tZW0tMiA9IDwweDNhOTg+OworCQkJeGxueCx0Y2Vkdi1wcy1tZW0tMyA9IDwweDNhOTg+OworCQkJeGxueCx0aHpjZS1wcy1tZW0tMCA9IDwweDg4Yjg+OworCQkJeGxueCx0aHpjZS1wcy1tZW0tMSA9IDwweDFiNTg+OworCQkJeGxueCx0aHpjZS1wcy1tZW0tMiA9IDwweDFiNTg+OworCQkJeGxueCx0aHpjZS1wcy1tZW0tMyA9IDwweDFiNTg+OworCQkJeGxueCx0aHpvZS1wcy1tZW0tMCA9IDwweDFiNTg+OworCQkJeGxueCx0aHpvZS1wcy1tZW0tMSA9IDwweDFiNTg+OworCQkJeGxueCx0aHpvZS1wcy1tZW0tMiA9IDwweDFiNTg+OworCQkJeGxueCx0aHpvZS1wcy1tZW0tMyA9IDwweDFiNTg+OworCQkJeGxueCx0bHp3ZS1wcy1tZW0tMCA9IDwweDg4Yjg+OworCQkJeGxueCx0bHp3ZS1wcy1tZW0tMSA9IDwweDA+OworCQkJeGxueCx0bHp3ZS1wcy1tZW0tMiA9IDwweDA+OworCQkJeGxueCx0bHp3ZS1wcy1tZW0tMyA9IDwweDA+OworCQkJeGxueCx0d2MtcHMtbWVtLTAgPSA8MHgyYWY4PjsKKwkJCXhsbngsdHdjLXBzLW1lbS0xID0gPDB4M2E5OD47CisJCQl4bG54LHR3Yy1wcy1tZW0tMiA9IDwweDNhOTg+OworCQkJeGxueCx0d2MtcHMtbWVtLTMgPSA8MHgzYTk4PjsKKwkJCXhsbngsdHdwLXBzLW1lbS0wID0gPDB4MTExNzA+OworCQkJeGxueCx0d3AtcHMtbWVtLTEgPSA8MHgyZWUwPjsKKwkJCXhsbngsdHdwLXBzLW1lbS0yID0gPDB4MmVlMD47CisJCQl4bG54LHR3cC1wcy1tZW0tMyA9IDwweDJlZTA+OworCQkJeGxueCx4Y2wwLWxpbmVzaXplID0gPDB4ND47CisJCQl4bG54LHhjbDAtd3JpdGV4ZmVyID0gPDB4MT47CisJCQl4bG54LHhjbDEtbGluZXNpemUgPSA8MHg0PjsKKwkJCXhsbngseGNsMS13cml0ZXhmZXIgPSA8MHgxPjsKKwkJCXhsbngseGNsMi1saW5lc2l6ZSA9IDwweDQ+OworCQkJeGxueCx4Y2wyLXdyaXRleGZlciA9IDwweDE+OworCQkJeGxueCx4Y2wzLWxpbmVzaXplID0gPDB4ND47CisJCQl4bG54LHhjbDMtd3JpdGV4ZmVyID0gPDB4MT47CisJCX0gOwogCQlIYXJkX0V0aGVybmV0X01BQzogeHBzLWxsLXRlbWFjQDgxYzAwMDAwIHsKIAkJCSNhZGRyZXNzLWNlbGxzID0gPDE+OwogCQkJI3NpemUtY2VsbHMgPSA8MT47CkBAIC0xODUsNiArMjc0LDE5IEBACiAJCQkJeGxueCx0eGZpZm8gPSA8MHgxMDAwPjsKIAkJCX0gOwogCQl9IDsKKwkJSUlDX0VFUFJPTTogaTJjQDgxNjAwMDAwIHsKKwkJCWNvbXBhdGlibGUgPSAieGxueCx4cHMtaWljLTIuMDAuYSI7CisJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZ4cHNfaW50Y18wPjsKKwkJCWludGVycnVwdHMgPSA8IDYgMiA+OworCQkJcmVnID0gPCAweDgxNjAwMDAwIDB4MTAwMDAgPjsKKwkJCXhsbngsY2xrLWZyZXEgPSA8MHg1ZjVlMTAwPjsKKwkJCXhsbngsZmFtaWx5ID0gInZpcnRleDUiOworCQkJeGxueCxncG8td2lkdGggPSA8MHgxPjsKKwkJCXhsbngsaWljLWZyZXEgPSA8MHgxODZhMD47CisJCQl4bG54LHNjbC1pbmVydGlhbC1kZWxheSA9IDwweDA+OworCQkJeGxueCxzZGEtaW5lcnRpYWwtZGVsYXkgPSA8MHgwPjsKKwkJCXhsbngsdGVuLWJpdC1hZHIgPSA8MHgwPjsKKwkJfSA7CiAJCUxFRHNfOEJpdDogZ3Bpb0A4MTQwMDAwMCB7CiAJCQljb21wYXRpYmxlID0gInhsbngseHBzLWdwaW8tMS4wMC5hIjsKIAkJCXJlZyA9IDwgMHg4MTQwMDAwMCAweDEwMDAwID47CkBAIC0yMjAsNyArMzIyLDcgQEAKIAkJUHVzaF9CdXR0b25zXzVCaXQ6IGdwaW9AODE0NDAwMDAgewogCQkJY29tcGF0aWJsZSA9ICJ4bG54LHhwcy1ncGlvLTEuMDAuYSI7CiAJCQlpbnRlcnJ1cHQtcGFyZW50ID0gPCZ4cHNfaW50Y18wPjsKLQkJCWludGVycnVwdHMgPSA8IDcgMiA+OworCQkJaW50ZXJydXB0cyA9IDwgOCAyID47CiAJCQlyZWcgPSA8IDB4ODE0NDAwMDAgMHgxMDAwMCA+OwogCQkJeGxueCxhbGwtaW5wdXRzID0gPDE+OwogCQkJeGxueCxhbGwtaW5wdXRzLTIgPSA8MD47CkBAIC0yMzcsMTMgKzMzOSwxMyBAQAogCQl9IDsKIAkJUlMyMzJfVWFydF8xOiBzZXJpYWxAODNlMDAwMDAgewogCQkJY2xvY2stZnJlcXVlbmN5ID0gPDEwMDAwMDAwMD47Ci0JCQljb21wYXRpYmxlID0gInhsbngseHBzLXVhcnQxNjU1MC0yLjAwLmEiLCAibnMxNjU1MCI7Ci0JCQljdXJyZW50LXNwZWVkID0gPDB4MjU4MD47CisJCQljb21wYXRpYmxlID0gInhsbngseHBzLXVhcnQxNjU1MC0yLjAwLmIiLCAibnMxNjU1MCI7CisJCQljdXJyZW50LXNwZWVkID0gPDk2MDA+OwogCQkJZGV2aWNlX3R5cGUgPSAic2VyaWFsIjsKIAkJCWludGVycnVwdC1wYXJlbnQgPSA8Jnhwc19pbnRjXzA+OwotCQkJaW50ZXJydXB0cyA9IDwgOCAyID47CisJCQlpbnRlcnJ1cHRzID0gPCA5IDIgPjsKIAkJCXJlZyA9IDwgMHg4M2UwMDAwMCAweDEwMDAwID47Ci0JCQlyZWctb2Zmc2V0ID0gPDM+OworCQkJcmVnLW9mZnNldCA9IDwweDEwMDM+OwogCQkJcmVnLXNoaWZ0ID0gPDI+OwogCQkJeGxueCxmYW1pbHkgPSAidmlydGV4NSI7CiAJCQl4bG54LGhhcy1leHRlcm5hbC1yY2xrID0gPDA+OwpAQCAtMjY4LDcgKzM3MCw3IEBACiAJCQljb21wYXRpYmxlID0gInhsbngseHBzLWludGMtMS4wMC5hIjsKIAkJCWludGVycnVwdC1jb250cm9sbGVyIDsKIAkJCXJlZyA9IDwgMHg4MTgwMDAwMCAweDEwMDAwID47Ci0JCQl4bG54LG51bS1pbnRyLWlucHV0cyA9IDwweGI+OworCQkJeGxueCxudW0taW50ci1pbnB1dHMgPSA8MHhjPjsKIAkJfSA7CiAJCXhwc190aW1lYmFzZV93ZHRfMTogeHBzLXRpbWViYXNlLXdkdEA4M2EwMDAwMCB7CiAJCQljb21wYXRpYmxlID0gInhsbngseHBzLXRpbWViYXNlLXdkdC0xLjAwLmIiOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3Qvc2VyaWFsLmMgYi9hcmNoL3Bvd2VycGMvYm9vdC9zZXJpYWwuYwppbmRleCA4YjM2MDdjLi5mMjE1NmYwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvYm9vdC9zZXJpYWwuYworKysgYi9hcmNoL3Bvd2VycGMvYm9vdC9zZXJpYWwuYwpAQCAtMTE3LDcgKzExNyw4IEBACiAJaWYgKGRldnAgPT0gTlVMTCkKIAkJZ290byBlcnJfb3V0OwogCi0JaWYgKGR0X2lzX2NvbXBhdGlibGUoZGV2cCwgIm5zMTY1NTAiKSkKKwlpZiAoZHRfaXNfY29tcGF0aWJsZShkZXZwLCAibnMxNjU1MCIpIHx8CisJICAgIGR0X2lzX2NvbXBhdGlibGUoZGV2cCwgInBucFBOUCw1MDEiKSkKIAkJcmMgPSBuczE2NTUwX2NvbnNvbGVfaW5pdChkZXZwLCAmc2VyaWFsX2NkKTsKIAllbHNlIGlmIChkdF9pc19jb21wYXRpYmxlKGRldnAsICJtYXJ2ZWxsLG12NjQzNjAtbXBzYyIpKQogCQlyYyA9IG1wc2NfY29uc29sZV9pbml0KGRldnAsICZzZXJpYWxfY2QpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlciBiL2FyY2gvcG93ZXJwYy9ib290L3dyYXBwZXIKaW5kZXggOTY1YzIzNy4uM2FjNzVhZSAxMDA3NTUKLS0tIGEvYXJjaC9wb3dlcnBjL2Jvb3Qvd3JhcHBlcgorKysgYi9hcmNoL3Bvd2VycGMvYm9vdC93cmFwcGVyCkBAIC0xODYsNiArMTg2LDkgQEAKICAgICAqLW1wYzg1KnwqLXRxbTg1KnwqLXNiYzg1KikKICAgICAgICAgcGxhdGZvcm1vPSRvYmplY3QvY3Vib290LTg1eHgubwogICAgICAgICA7OworICAgICotYW1pZ2FvbmUpCisgICAgICAgIGxpbmtfYWRkcmVzcz0nMHg4MDAwMDAnCisgICAgICAgIDs7CiAgICAgZXNhYwogICAgIDs7CiBwczMpCkBAIC0yMTEsMTEgKzIxNCwxMSBAQAogICAgIGJpbmFyeT15CiAgICAgOzsKIHNpbXBsZWJvb3QtdmlydGV4NDQwLSopCi0gICAgcGxhdGZvcm1vPSIkb2JqZWN0L3NpbXBsZWJvb3QubyAkb2JqZWN0L3ZpcnRleC5vIgorICAgIHBsYXRmb3Jtbz0iJG9iamVjdC9maXhlZC1oZWFkLm8gJG9iamVjdC9zaW1wbGVib290Lm8gJG9iamVjdC92aXJ0ZXgubyIKICAgICBiaW5hcnk9eQogICAgIDs7CiBzaW1wbGVib290LSopCi0gICAgcGxhdGZvcm1vPSIkb2JqZWN0L3NpbXBsZWJvb3QubyIKKyAgICBwbGF0Zm9ybW89IiRvYmplY3QvZml4ZWQtaGVhZC5vICRvYmplY3Qvc2ltcGxlYm9vdC5vIgogICAgIGJpbmFyeT15CiAgICAgOzsKIGFzcDgzNHgtcmVkYm9vdCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9jYW55b25sYW5kc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy80NHgvY2FueW9ubGFuZHNfZGVmY29uZmlnCmluZGV4IDgxY2RjYzQuLmY5YTA4ZWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9jYW55b25sYW5kc19kZWZjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L2NhbnlvbmxhbmRzX2RlZmNvbmZpZwpAQCAtMSw3ICsxLDcgQEAKICMKICMgQXV0b21hdGljYWxseSBnZW5lcmF0ZWQgbWFrZSBjb25maWc6IGRvbid0IGVkaXQKLSMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzIKLSMgVHVlIEphbiAyMCAwODoyMjozNSAyMDA5CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmMzCisjIE1vbiBGZWIgIDIgMTM6MTM6MDQgMjAwOQogIwogIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAogCkBAIC03NCw2ICs3NCwxNSBAQAogIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CiAjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAogIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CiBDT05GSUdfTE9HX0JVRl9TSElGVD0xNAogIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldApAQCAtMTQ3LDExICsxNTYsNiBAQAogIyBDT05GSUdfREVGQVVMVF9DRlEgaXMgbm90IHNldAogIyBDT05GSUdfREVGQVVMVF9OT09QIGlzIG5vdCBzZXQKIENPTkZJR19ERUZBVUxUX0lPU0NIRUQ9ImFudGljaXBhdG9yeSIKLUNPTkZJR19DTEFTU0lDX1JDVT15Ci0jIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0Ci0jIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0Ci0jIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CiAjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1M9eQogCkBAIC0zNzMsNiArMzc3LDcgQEAKIENPTkZJR19QUk9DX0VWRU5UUz15CiAjIENPTkZJR19NVEQgaXMgbm90IHNldAogQ09ORklHX09GX0RFVklDRT15CitDT05GSUdfT0ZfSTJDPXkKICMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAogQ09ORklHX0JMS19ERVY9eQogIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CkBAIC0zODQsNiArMzg5LDcgQEAKICMgQ09ORklHX0JMS19ERVZfTE9PUCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX05CRCBpcyBub3Qgc2V0CiAjIENPTkZJR19CTEtfREVWX1NYOCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VCIGlzIG5vdCBzZXQKIENPTkZJR19CTEtfREVWX1JBTT15CiBDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKIENPTkZJR19CTEtfREVWX1JBTV9TSVpFPTM1MDAwCkBAIC00NjYsNiArNDcyLDE1IEBACiAjCiAjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKICMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CiAjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKICMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKQEAgLTUzMywxMyArNTQ4LDEzNiBAQAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CiAjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKIENPTkZJR19ERVZQT1JUPXkKLSMgQ09ORklHX0kyQyBpcyBub3Qgc2V0CitDT05GSUdfSTJDPXkKK0NPTkZJR19JMkNfQk9BUkRJTkZPPXkKK0NPTkZJR19JMkNfQ0hBUkRFVj15CitDT05GSUdfSTJDX0hFTFBFUl9BVVRPPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKworIworIyBQQyBTTUJ1cyBob3N0IGNvbnRyb2xsZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX0FMSTE1MzUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1NjMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FMSTE1WDMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDc1NiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1EODExMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSTgwMSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfSVNDSCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUElJWDQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX05GT1JDRTIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzYzMCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTOTZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIHN5c3RlbSBidXMgZHJpdmVycyAobW9zdGx5IGVtYmVkZGVkIC8gc3lzdGVtLW9uLWNoaXApCisjCitDT05GSUdfSTJDX0lCTV9JSUM9eQorIyBDT05GSUdfSTJDX01QQyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfT0NPUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSU1URUMgaXMgbm90IHNldAorCisjCisjIEV4dGVybmFsIEkyQy9TTUJ1cyBhZGFwdGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQVJQT1JUX0xJR0hUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19UQU9TX0VWTSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVElOWV9VU0IgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIGFkYXB0ZXIgSTJDL0REQyBjaGFubmVsIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19WT09ET08zIGlzIG5vdCBzZXQKKworIworIyBPdGhlciBJMkMvU01CdXMgYnVzIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19QQ0FfUExBVEZPUk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgSTJDIENoaXAgc3VwcG9ydAorIworIyBDT05GSUdfRFMxNjgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU3NCBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0Y4NTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENBOTUzOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKICMgQ09ORklHX1NQSSBpcyBub3Qgc2V0CiBDT05GSUdfQVJDSF9XQU5UX09QVElPTkFMX0dQSU9MSUI9eQogIyBDT05GSUdfR1BJT0xJQiBpcyBub3Qgc2V0CiAjIENPTkZJR19XMSBpcyBub3Qgc2V0CiAjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAotIyBDT05GSUdfSFdNT04gaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19BRDc0MTQ9eQorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQVRYUDEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19EUzE2MjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JNUtfQU1CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODA1RiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTg4MkZHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjc1Mzc1UyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTE4U00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUyMFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSVQ4NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNjMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAogIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CiAjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKICMgQ09ORklHX1dBVENIRE9HIGlzIG5vdCBzZXQKQEAgLTU1Niw3ICs2OTQsMTIgQEAKICMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKICMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CiAjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CiAjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CiAjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAogCiAjCkBAIC01NzQsNiArNzE3LDcgQEAKICMgTXVsdGltZWRpYSBkcml2ZXJzCiAjCiBDT05GSUdfREFCPXkKKyMgQ09ORklHX1VTQl9EQUJVU0IgaXMgbm90IHNldAogCiAjCiAjIEdyYXBoaWNzIHN1cHBvcnQKQEAgLTU5MCw3ICs3MzQsMTA5IEBACiAjCiAjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAogIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAotIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorQ09ORklHX1VTQl9BTk5PVU5DRV9ORVdfREVWSUNFUz15CisKKyMKKyMgTWlzY2VsbGFuZW91cyBVU0Igb3B0aW9ucworIworQ09ORklHX1VTQl9ERVZJQ0VGUz15CitDT05GSUdfVVNCX0RFVklDRV9DTEFTUz15CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPW0KKyMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9IQ0RfUFBDX09GPXkKKyMgQ09ORklHX1VTQl9PWFUyMTBIUF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDExNlhfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU1AxNzYwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0JFPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUFBDX09GX0xFPXkKK0NPTkZJR19VU0JfT0hDSV9IQ0RfUENJPXkKK0NPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0M9eQorQ09ORklHX1VTQl9PSENJX0JJR19FTkRJQU5fTU1JTz15CitDT05GSUdfVVNCX09IQ0lfTElUVExFX0VORElBTj15CisjIENPTkZJR19VU0JfVUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMKKworIworIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9MSUJVU1VBTD15CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVZTRUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9WU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCiAjIENPTkZJR19VV0IgaXMgbm90IHNldAogIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKICMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9yZWR3b29kX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzQ0eC9yZWR3b29kX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lNjY1NDMzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvNDR4L3JlZHdvb2RfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTE3NiBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMworIyBXZWQgRmViICA0IDE0OjMxOjA5IDIwMDkKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKK0NPTkZJR180NHg9eQorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0ZQVT15CitDT05GSUdfNHh4PXkKK0NPTkZJR19CT09LRT15CitDT05GSUdfUFRFXzY0QklUPXkKK0NPTkZJR19QSFlTXzY0QklUPXkKK0NPTkZJR19QUENfTU1VX05PSEFTSD15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19OT1RfQ09IRVJFTlRfQ0FDSEU9eQorQ09ORklHX1BQQzMyPXkKK0NPTkZJR19XT1JEX1NJWkU9MzIKK0NPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CisjIENPTkZJR19ERUZBVUxUX1VJTUFHRSBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0RDUl9OQVRJVkU9eQorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRENSPXkKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCitDT05GSUdfTE9DQUxWRVJTSU9OX0FVVE89eQorQ09ORklHX1NXQVA9eQorQ09ORklHX1NZU1ZJUEM9eQorQ09ORklHX1NZU1ZJUENfU1lTQ1RMPXkKK0NPTkZJR19QT1NJWF9NUVVFVUU9eQorIyBDT05GSUdfQlNEX1BST0NFU1NfQUNDVCBpcyBub3Qgc2V0CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19JS0NPTkZJRyBpcyBub3Qgc2V0CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNAorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQU1FU1BBQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lOSVRSRD15CitDT05GSUdfSU5JVFJBTUZTX1NPVVJDRT0iIgorIyBDT05GSUdfQ0NfT1BUSU1JWkVfRk9SX1NJWkUgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTD15CitDT05GSUdfRU1CRURERUQ9eQorQ09ORklHX1NZU0NUTF9TWVNDQUxMPXkKK0NPTkZJR19LQUxMU1lNUz15CisjIENPTkZJR19LQUxMU1lNU19BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS0FMTFNZTVNfRVhUUkFfUEFTUyBpcyBub3Qgc2V0CitDT05GSUdfSE9UUExVRz15CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CitDT05GSUdfRVBPTEw9eQorQ09ORklHX1NJR05BTEZEPXkKK0NPTkZJR19USU1FUkZEPXkKK0NPTkZJR19FVkVOVEZEPXkKK0NPTkZJR19TSE1FTT15CitDT05GSUdfQUlPPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfUENJX1FVSVJLUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX09QUk9GSUxFPXkKKyMgQ09ORklHX0tQUk9CRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfRUZGSUNJRU5UX1VOQUxJR05FRF9BQ0NFU1M9eQorQ09ORklHX0hBVkVfSU9SRU1BUF9QUk9UPXkKK0NPTkZJR19IQVZFX0tQUk9CRVM9eQorQ09ORklHX0hBVkVfS1JFVFBST0JFUz15CitDT05GSUdfSEFWRV9BUkNIX1RSQUNFSE9PSz15CisjIENPTkZJR19IQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlzIG5vdCBzZXQKK0NPTkZJR19TTEFCSU5GTz15CitDT05GSUdfUlRfTVVURVhFUz15CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCRD15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM0eHhfUENJX0VYUFJFU1M9eQorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorIyBDT05GSUdfQkFNQk9PIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VCT05ZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTTQ0MEVQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUVVPSUEgaXMgbm90IHNldAorIyBDT05GSUdfVEFJU0hBTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVRNQUkgaXMgbm90IHNldAorIyBDT05GSUdfUkFJTklFUiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVJQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ0hFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU5ZT05MQU5EUyBpcyBub3Qgc2V0CisjIENPTkZJR19HTEFDSUVSIGlzIG5vdCBzZXQKK0NPTkZJR19SRURXT09EPXkKKyMgQ09ORklHX1lPU0VNSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hJTElOWF9WSVJURVg0NDBfR0VORVJJQ19CT0FSRCBpcyBub3Qgc2V0CitDT05GSUdfUFBDNDR4X1NJTVBMRT15CisjIENPTkZJR19QUEM0eHhfR1BJTyBpcyBub3Qgc2V0CitDT05GSUdfNDYwU1g9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19GU0xfVUxJMTU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorIyBDT05GSUdfQklORk1UX01JU0MgaXMgbm90IHNldAorIyBDT05GSUdfTUFUSF9FTVVMQVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTkVFRF9ETUFfU1lOQ19PUFM9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RQTFVHPXkKK0NPTkZJR19BUkNIX0hBU19XQUxLX01FTU9SWT15CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFJFTU9WRT15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX01JR1JBVElPTj15CitDT05GSUdfUEhZU19BRERSX1RfNjRCSVQ9eQorQ09ORklHX1pPTkVfRE1BX0ZMQUc9MQorQ09ORklHX0JPVU5DRT15CitDT05GSUdfVklSVF9UT19CVVM9eQorQ09ORklHX1VORVZJQ1RBQkxFX0xSVT15CitDT05GSUdfUFBDXzRLX1BBR0VTPXkKKyMgQ09ORklHX1BQQ18xNktfUEFHRVMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzY0S19QQUdFUyBpcyBub3Qgc2V0CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQorQ09ORklHX1BST0NfREVWSUNFVFJFRT15CitDT05GSUdfQ01ETElORV9CT09MPXkKK0NPTkZJR19DTURMSU5FPSIiCitDT05GSUdfRVhUUkFfVEFSR0VUUz0iIgorQ09ORklHX1NFQ0NPTVA9eQorQ09ORklHX0lTQV9ETUFfQVBJPXkKKworIworIyBCdXMgb3B0aW9ucworIworQ09ORklHX1pPTkVfRE1BPXkKK0NPTkZJR19QUENfSU5ESVJFQ1RfUENJPXkKK0NPTkZJR180eHhfU09DPXkKK0NPTkZJR19QUENfUENJX0NIT0lDRT15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZU0NBTEw9eQorQ09ORklHX1BDSUVQT1JUQlVTPXkKK0NPTkZJR19QQ0lFQUVSPXkKKyMgQ09ORklHX1BDSUVBU1BNIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CisjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX1BDSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfUEFHRV9PRkZTRVQ9MHhjMDAwMDAwMAorQ09ORklHX0tFUk5FTF9TVEFSVD0weGMwMDAwMDAwCitDT05GSUdfUEhZU0lDQUxfU1RBUlQ9MHgwMDAwMDAwMAorQ09ORklHX1RBU0tfU0laRT0weGMwMDAwMDAwCitDT05GSUdfQ09OU0lTVEVOVF9TVEFSVD0weGZmMTAwMDAwCitDT05GSUdfQ09OU0lTVEVOVF9TSVpFPTB4MDAyMDAwMDAKK0NPTkZJR19ORVQ9eQorCisjCisjIE5ldHdvcmtpbmcgb3B0aW9ucworIworQ09ORklHX0NPTVBBVF9ORVRfREVWX09QUz15CitDT05GSUdfUEFDS0VUPXkKKyMgQ09ORklHX1BBQ0tFVF9NTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYPXkKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorIyBDT05GSUdfSVBfTVVMVElDQVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0FEVkFOQ0VEX1JPVVRFUiBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX1BOUD15CitDT05GSUdfSVBfUE5QX0RIQ1A9eQorQ09ORklHX0lQX1BOUF9CT09UUD15CisjIENPTkZJR19JUF9QTlBfUkFSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBJUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfSVBHUkUgaXMgbm90IHNldAorIyBDT05GSUdfQVJQRCBpcyBub3Qgc2V0CisjIENPTkZJR19TWU5fQ09PS0lFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTUz15CisjIENPTkZJR19DRkc4MDIxMSBpcyBub3Qgc2V0CitDT05GSUdfV0lSRUxFU1NfT0xEX1JFR1VMQVRPUlk9eQorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQjgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKK0NPTkZJR19GV19MT0FERVI9eQorQ09ORklHX0ZJUk1XQVJFX0lOX0tFUk5FTD15CitDT05GSUdfRVhUUkFfRklSTVdBUkU9IiIKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorQ09ORklHX0NPTk5FQ1RPUj15CitDT05GSUdfUFJPQ19FVkVOVFM9eQorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NNRExJTkVfUEFSVFM9eQorQ09ORklHX01URF9PRl9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CisjIENPTkZJR19NVERfSkVERUNQUk9CRSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSU5URUxFWFQgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfQU1EU1REPXkKKyMgQ09ORklHX01URF9DRklfU1RBQSBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9VVElMPXkKKyMgQ09ORklHX01URF9SQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JPTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQUJTRU5UIGlzIG5vdCBzZXQKKworIworIyBNYXBwaW5nIGRyaXZlcnMgZm9yIGNoaXAgYWNjZXNzCisjCisjIENPTkZJR19NVERfQ09NUExFWF9NQVBQSU5HUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhZU01BUCBpcyBub3Qgc2V0CitDT05GSUdfTVREX1BIWVNNQVBfT0Y9eQorIyBDT05GSUdfTVREX0lOVEVMX1ZSX05PUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUExBVFJBTSBpcyBub3Qgc2V0CisKKyMKKyMgU2VsZi1jb250YWluZWQgTVREIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfUE1DNTUxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT05FTkFORCBpcyBub3Qgc2V0CisKKyMKKyMgTFBERFIgZmxhc2ggbWVtb3J5IGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9MUEREUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUUlORk9fUFJPQkUgaXMgbm90IHNldAorCisjCisjIFVCSSAtIFVuc29ydGVkIGJsb2NrIGltYWdlcworIworIyBDT05GSUdfTVREX1VCSSBpcyBub3Qgc2V0CitDT05GSUdfT0ZfREVWSUNFPXkKK0NPTkZJR19PRl9JMkM9eQorIyBDT05GSUdfUEFSUE9SVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVj15CisjIENPTkZJR19CTEtfREVWX0ZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX1JBTT15CitDT05GSUdfQkxLX0RFVl9SQU1fQ09VTlQ9MTYKK0NPTkZJR19CTEtfREVWX1JBTV9TSVpFPTM1MDAwCisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19YSUxJTlhfU1lTQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorIyBDT05GSUdfTUlTQ19ERVZJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CisjIENPTkZJR19JREUgaXMgbm90IHNldAorCisjCisjIFNDU0kgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1JBSURfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0k9eQorQ09ORklHX1NDU0lfRE1BPXkKKyMgQ09ORklHX1NDU0lfVEdUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTkVUTElOSyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9QUk9DX0ZTPXkKKworIworIyBTQ1NJIHN1cHBvcnQgdHlwZSAoZGlzaywgdGFwZSwgQ0QtUk9NKQorIworQ09ORklHX0JMS19ERVZfU0Q9eQorIyBDT05GSUdfQ0hSX0RFVl9TVCBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TUiBpcyBub3Qgc2V0CitDT05GSUdfQ0hSX0RFVl9TRz15CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfU0FTX0FUVFJTPXkKKyMgQ09ORklHX1NDU0lfU0FTX0xJQlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTSV9MT1dMRVZFTD15CisjIENPTkZJR19JU0NTSV9UQ1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl8zV19YWFhYX1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV8zV185WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUNBUkQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQUNSQUlEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzdYWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDNzlYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FJQzk0WFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EUFRfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQURWQU5TWVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BUkNNU1IgaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTkVXR0VOIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9TQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9IUFRJT1AgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9CVVNMT0dJQyBpcyBub3Qgc2V0CisjIENPTkZJR19MSUJGQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQ09FIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRE1YMzE5MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9FQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfRlVUVVJFX0RPTUFJTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0dEVEggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JUFMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklUSU8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTklBMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTVZTQVMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TVEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1lNNTNDOFhYXzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTE9HSUNfMTI4MCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMQV9JU0NTSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xQRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5NXggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9EQzM5MFQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9OU1AzMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREggaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKK0NPTkZJR19GVVNJT049eQorIyBDT05GSUdfRlVTSU9OX1NQSSBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fRkMgaXMgbm90IHNldAorQ09ORklHX0ZVU0lPTl9TQVM9eQorQ09ORklHX0ZVU0lPTl9NQVhfU0dFPTEyOAorIyBDT05GSUdfRlVTSU9OX0NUTCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT05fTE9HR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorQ09ORklHX0kyTz15CitDT05GSUdfSTJPX0xDVF9OT1RJRllfT05fQ0hBTkdFUz15CitDT05GSUdfSTJPX0VYVF9BREFQVEVDPXkKKyMgQ09ORklHX0kyT19DT05GSUcgaXMgbm90IHNldAorIyBDT05GSUdfSTJPX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMk9fQkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfSTJPX1NDU0kgaXMgbm90IHNldAorIyBDT05GSUdfSTJPX1BST0MgaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorIyBDT05GSUdfRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQk9ORElORyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNWTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VRVUFMSVpFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UVU4gaXMgbm90IHNldAorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorIyBDT05GSUdfUEhZTElCIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorIyBDT05GSUdfTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBUFBZTUVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19TVU5HRU0gaXMgbm90IHNldAorIyBDT05GSUdfQ0FTU0lOSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVkVORE9SXzNDT00gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19JQk1fTkVXX0VNQUM9eQorQ09ORklHX0lCTV9ORVdfRU1BQ19SWEI9MjU2CitDT05GSUdfSUJNX05FV19FTUFDX1RYQj0yNTYKK0NPTkZJR19JQk1fTkVXX0VNQUNfUE9MTF9XRUlHSFQ9MzIKK0NPTkZJR19JQk1fTkVXX0VNQUNfUlhfQ09QWV9USFJFU0hPTEQ9MjU2CitDT05GSUdfSUJNX05FV19FTUFDX1JYX1NLQl9IRUFEUk9PTT0wCitDT05GSUdfSUJNX05FV19FTUFDX0RFQlVHPXkKK0NPTkZJR19JQk1fTkVXX0VNQUNfWk1JST15CitDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJPXkKK0NPTkZJR19JQk1fTkVXX0VNQUNfVEFIPXkKK0NPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQ9eQorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKK0NPTkZJR19FMTAwMEU9eQorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19KTUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQUCBpcyBub3Qgc2V0CisjIENPTkZJR19TTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRDT05TT0xFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVFBPTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfSU5QVVQgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCisjIENPTkZJR19WVCBpcyBub3Qgc2V0CitDT05GSUdfREVWS01FTT15CisjIENPTkZJR19TRVJJQUxfTk9OU1RBTkRBUkQgaXMgbm90IHNldAorIyBDT05GSUdfTk9aT01JIGlzIG5vdCBzZXQKKworIworIyBTZXJpYWwgZHJpdmVycworIworQ09ORklHX1NFUklBTF84MjUwPXkKK0NPTkZJR19TRVJJQUxfODI1MF9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MQorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MQorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKKyMgQ09ORklHX1NFUklBTF84MjUwX01BTllfUE9SVFMgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX1NIQVJFX0lSUT15CisjIENPTkZJR19TRVJJQUxfODI1MF9ERVRFQ1RfSVJRIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF84MjUwX1JTQSBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfT0ZfUExBVEZPUk09eQorIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNX05XUFNFUklBTCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19IVkNfVURCRyBpcyBub3Qgc2V0CisjIENPTkZJR19JUE1JX0hBTkRMRVIgaXMgbm90IHNldAorIyBDT05GSUdfSFdfUkFORE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTl9SVEMgaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKK0NPTkZJR19JMkNfSEVMUEVSX0FVVE89eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKK0NPTkZJR19JMkNfSUJNX0lJQz15CisjIENPTkZJR19JMkNfTVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJTVRFQyBpcyBub3Qgc2V0CisKKyMKKyMgRXh0ZXJuYWwgSTJDL1NNQnVzIGFkYXB0ZXIgZHJpdmVycworIworIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RBT1NfRVZNIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorQ09ORklHX0kyQ19ERUJVR19DT1JFPXkKK0NPTkZJR19JMkNfREVCVUdfQUxHTz15CitDT05GSUdfSTJDX0RFQlVHX0JVUz15CitDT05GSUdfSTJDX0RFQlVHX0NISVA9eQorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CisjIENPTkZJR19HUElPTElCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUxfSFdNT04gaXMgbm90IHNldAorIyBDT05GSUdfV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworQ09ORklHX0RBQj15CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NVUFBPUlQgaXMgbm90IHNldAorIyBDT05GSUdfVVdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRU1TVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVdfTEVEUyBpcyBub3Qgc2V0CisjIENPTkZJR19BQ0NFU1NJQklMSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORklOSUJBTkQgaXMgbm90IHNldAorIyBDT05GSUdfRURBQyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfQ0xBU1MgaXMgbm90IHNldAorQ09ORklHX0RNQURFVklDRVM9eQorCisjCisjIERNQSBEZXZpY2VzCisjCisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUlTRVJGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19KRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfTkZTX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19MT0NLRD15CitDT05GSUdfTE9DS0RfVjQ9eQorQ09ORklHX05GU19DT01NT049eQorQ09ORklHX1NVTlJQQz15CisjIENPTkZJR19TVU5SUENfUkVHSVNURVJfVjQgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19LUkI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JQQ1NFQ19HU1NfU1BLTTMgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKKyMgQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX05MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ETE0gaXMgbm90IHNldAorCisjCisjIExpYnJhcnkgcm91dGluZXMKKyMKK0NPTkZJR19CSVRSRVZFUlNFPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTEFTVF9CSVQ9eQorIyBDT05GSUdfQ1JDX0NDSVRUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19UMTBESUYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX0lUVV9UIGlzIG5vdCBzZXQKK0NPTkZJR19DUkMzMj15CisjIENPTkZJR19DUkM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkNSQzMyQyBpcyBub3Qgc2V0CitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19QTElTVD15CitDT05GSUdfSEFTX0lPTUVNPXkKK0NPTkZJR19IQVNfSU9QT1JUPXkKK0NPTkZJR19IQVNfRE1BPXkKK0NPTkZJR19IQVZFX0xNQj15CisKKyMKKyMgS2VybmVsIGhhY2tpbmcKKyMKKyMgQ09ORklHX1BSSU5US19USU1FIGlzIG5vdCBzZXQKK0NPTkZJR19FTkFCTEVfV0FSTl9ERVBSRUNBVEVEPXkKK0NPTkZJR19FTkFCTEVfTVVTVF9DSEVDSz15CitDT05GSUdfRlJBTUVfV0FSTj0xMDI0CitDT05GSUdfTUFHSUNfU1lTUlE9eQorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0ZTPXkKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0tfU0xFRVAgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTE9DS0lOR19BUElfU0VMRlRFU1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0tPQkpFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQlVHVkVSQk9TRSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19JTkZPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfVklSUV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWUZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRD15CitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORz15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorQ09ORklHX0NSWVBUT19HRjEyOE1VTD15CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NSWVBURD15CitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9eQorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworQ09ORklHX0NSWVBUT19DQ009eQorQ09ORklHX0NSWVBUT19HQ009eQorQ09ORklHX0NSWVBUT19TRVFJVj15CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKK0NPTkZJR19DUllQVE9fQ1RSPXkKK0NPTkZJR19DUllQVE9fQ1RTPXkKK0NPTkZJR19DUllQVE9fRUNCPXkKK0NPTkZJR19DUllQVE9fTFJXPXkKK0NPTkZJR19DUllQVE9fUENCQz15CitDT05GSUdfQ1JZUFRPX1hUUz15CisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPXkKK0NPTkZJR19DUllQVE9fWENCQz15CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTUQ0PXkKK0NPTkZJR19DUllQVE9fTUQ1PXkKKyMgQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0hBMT15CitDT05GSUdfQ1JZUFRPX1NIQTI1Nj15CitDT05GSUdfQ1JZUFRPX1NIQTUxMj15CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworQ09ORklHX0NSWVBUT19BRVM9eQorIyBDT05GSUdfQ1JZUFRPX0FOVUJJUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FSQzQ9eQorQ09ORklHX0NSWVBUT19CTE9XRklTSD15CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19IVz15CisjIENPTkZJR19DUllQVE9fREVWX0hJRk5fNzk1WCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zb2NyYXRlc19kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84NXh4L3NvY3JhdGVzX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wY2M5MDQ4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODV4eC9zb2NyYXRlc19kZWZjb25maWcKQEAgLTAsMCArMSwxNDEwIEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjYuMgorIyBTYXQgT2N0IDE4IDExOjA2OjEzIDIwMDgKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworIyBDT05GSUdfNnh4IGlzIG5vdCBzZXQKK0NPTkZJR19QUENfODV4eD15CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfRTUwMD15CitDT05GSUdfQk9PS0U9eQorQ09ORklHX0ZTTF9CT09LRT15CitDT05GSUdfRlNMX0VNQl9QRVJGTU9OPXkKKyMgQ09ORklHX1BIWVNfNjRCSVQgaXMgbm90IHNldAorQ09ORklHX1NQRT15CisjIENPTkZJR19QUENfTU1fU0xJQ0VTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCitDT05GSUdfUFBDX01FUkdFPXkKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19MT0NLREVQX1NVUFBPUlQ9eQorQ09ORklHX1JXU0VNX1hDSEdBRERfQUxHT1JJVEhNPXkKK0NPTkZJR19BUkNIX0hBU19JTE9HMl9VMzI9eQorQ09ORklHX0dFTkVSSUNfSFdFSUdIVD15CitDT05GSUdfR0VORVJJQ19DQUxJQlJBVEVfREVMQVk9eQorQ09ORklHX0dFTkVSSUNfRklORF9ORVhUX0JJVD15CisjIENPTkZJR19BUkNIX05PX1ZJUlRfVE9fQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19QUEM9eQorQ09ORklHX0VBUkxZX1BSSU5USz15CitDT05GSUdfR0VORVJJQ19OVlJBTT15CitDT05GSUdfU0NIRURfTk9fTk9fT01JVF9GUkFNRV9QT0lOVEVSPXkKK0NPTkZJR19BUkNIX01BWV9IQVZFX1BDX0ZEQz15CitDT05GSUdfUFBDX09GPXkKK0NPTkZJR19PRj15CitDT05GSUdfUFBDX1VEQkdfMTY1NTA9eQorIyBDT05GSUdfR0VORVJJQ19UQlNZTkMgaXMgbm90IHNldAorQ09ORklHX0FVRElUX0FSQ0g9eQorQ09ORklHX0dFTkVSSUNfQlVHPXkKK0NPTkZJR19ERUZBVUxUX1VJTUFHRT15CisjIENPTkZJR19QUENfRENSX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfRENSX01NSU8gaXMgbm90IHNldAorQ09ORklHX0RFRkNPTkZJR19MSVNUPSIvbGliL21vZHVsZXMvJFVOQU1FX1JFTEVBU0UvLmNvbmZpZyIKKworIworIyBHZW5lcmFsIHNldHVwCisjCitDT05GSUdfRVhQRVJJTUVOVEFMPXkKK0NPTkZJR19CUk9LRU5fT05fU01QPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorIyBDT05GSUdfUE9TSVhfTVFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JTRF9QUk9DRVNTX0FDQ1QgaXMgbm90IHNldAorIyBDT05GSUdfVEFTS1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVRElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lLQ09ORklHIGlzIG5vdCBzZXQKK0NPTkZJR19MT0dfQlVGX1NISUZUPTE2CisjIENPTkZJR19DR1JPVVBTIGlzIG5vdCBzZXQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorIyBDT05GSUdfUkVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTExfQ0hFQ0s9eQorIyBDT05GSUdfS0FMTFNZTVMgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRLPXkKK0NPTkZJR19CVUc9eQorQ09ORklHX0VMRl9DT1JFPXkKK0NPTkZJR19DT01QQVRfQlJLPXkKK0NPTkZJR19CQVNFX0ZVTEw9eQorQ09ORklHX0ZVVEVYPXkKK0NPTkZJR19BTk9OX0lOT0RFUz15CisjIENPTkZJR19FUE9MTCBpcyBub3Qgc2V0CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19WTV9FVkVOVF9DT1VOVEVSUz15CitDT05GSUdfU0xVQl9ERUJVRz15CisjIENPTkZJR19TTEFCIGlzIG5vdCBzZXQKK0NPTkZJR19TTFVCPXkKKyMgQ09ORklHX1NMT0IgaXMgbm90IHNldAorIyBDT05GSUdfUFJPRklMSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BUktFUlMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKKyMgQ09ORklHX0hBVkVfRE1BX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19QUk9DX1BBR0VfTU9OSVRPUj15CitDT05GSUdfU0xBQklORk89eQorQ09ORklHX1JUX01VVEVYRVM9eQorIyBDT05GSUdfVElOWV9TSE1FTSBpcyBub3Qgc2V0CitDT05GSUdfQkFTRV9TTUFMTD0wCitDT05GSUdfTU9EVUxFUz15CisjIENPTkZJR19NT0RVTEVfRk9SQ0VfTE9BRCBpcyBub3Qgc2V0CitDT05GSUdfTU9EVUxFX1VOTE9BRD15CitDT05GSUdfTU9EVUxFX0ZPUkNFX1VOTE9BRD15CisjIENPTkZJR19NT0RWRVJTSU9OUyBpcyBub3Qgc2V0CisjIENPTkZJR19NT0RVTEVfU1JDVkVSU0lPTl9BTEwgaXMgbm90IHNldAorIyBDT05GSUdfS01PRCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorIyBDT05GSUdfTEJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU9fVFJBQ0UgaXMgbm90IHNldAorIyBDT05GSUdfTFNGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCitDT05GSUdfQ0xBU1NJQ19SQ1U9eQorCisjCisjIFBsYXRmb3JtIHN1cHBvcnQKKyMKKyMgQ09ORklHX1BQQ19NUEM1MTJ4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1MTIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorQ09ORklHX01QQzg1eHg9eQorIyBDT05GSUdfTVBDODU0MF9BRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODU2MF9BRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9DRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9NRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDODV4eF9EUyBpcyBub3Qgc2V0CitDT05GSUdfU09DUkFURVM9eQorIyBDT05GSUdfS1NJODU2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TVFhfR1AzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RRTTg1NDAgaXMgbm90IHNldAorIyBDT05GSUdfVFFNODU0MSBpcyBub3Qgc2V0CisjIENPTkZJR19UUU04NTU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RRTTg1NjAgaXMgbm90IHNldAorIyBDT05GSUdfU0JDODU0OCBpcyBub3Qgc2V0CisjIENPTkZJR19TQkM4NTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQSUMgaXMgbm90IHNldAorQ09ORklHX01QSUM9eQorIyBDT05GSUdfTVBJQ19XRUlSRCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSTgyNTkgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1JUQVMgaXMgbm90IHNldAorIyBDT05GSUdfTU1JT19OVlJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfTVBDMTA2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ185NzBfTkFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19JTkRJUkVDVF9JTyBpcyBub3Qgc2V0CisjIENPTkZJR19HRU5FUklDX0lPTUFQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQVV9GUkVRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NQTTIgaXMgbm90IHNldAorIyBDT05GSUdfRlNMX1VMSTE1NzUgaXMgbm90IHNldAorCisjCisjIEtlcm5lbCBvcHRpb25zCisjCisjIENPTkZJR19ISUdITUVNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJQ0tfT05FU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CisjIENPTkZJR19ISUdIX1JFU19USU1FUlMgaXMgbm90IHNldAorQ09ORklHX0dFTkVSSUNfQ0xPQ0tFVkVOVFNfQlVJTEQ9eQorIyBDT05GSUdfSFpfMTAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8yNTA9eQorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0haXzEwMDAgaXMgbm90IHNldAorQ09ORklHX0haPTI1MAorIyBDT05GSUdfU0NIRURfSFJUSUNLIGlzIG5vdCBzZXQKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19CSU5GTVRfTUlTQyBpcyBub3Qgc2V0CitDT05GSUdfTUFUSF9FTVVMQVRJT049eQorIyBDT05GSUdfSU9NTVVfSEVMUEVSIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorQ09ORklHX0FSQ0hfRkxBVE1FTV9FTkFCTEU9eQorQ09ORklHX0FSQ0hfUE9QVUxBVEVTX05PREVfTUFQPXkKK0NPTkZJR19TRUxFQ1RfTUVNT1JZX01PREVMPXkKK0NPTkZJR19GTEFUTUVNX01BTlVBTD15CisjIENPTkZJR19ESVNDT05USUdNRU1fTUFOVUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NQQVJTRU1FTV9NQU5VQUwgaXMgbm90IHNldAorQ09ORklHX0ZMQVRNRU09eQorQ09ORklHX0ZMQVRfTk9ERV9NRU1fTUFQPXkKKyMgQ09ORklHX1NQQVJTRU1FTV9TVEFUSUMgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX1ZNRU1NQVBfRU5BQkxFIGlzIG5vdCBzZXQKK0NPTkZJR19QQUdFRkxBR1NfRVhURU5ERUQ9eQorQ09ORklHX1NQTElUX1BUTE9DS19DUFVTPTQKKyMgQ09ORklHX1JFU09VUkNFU182NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfRk9SQ0VfTUFYX1pPTkVPUkRFUj0xMQorIyBDT05GSUdfUFJPQ19ERVZJQ0VUUkVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NNRExJTkVfQk9PTCBpcyBub3Qgc2V0CisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX1BQQ19JTkRJUkVDVF9QQ0k9eQorQ09ORklHX0ZTTF9TT0M9eQorQ09ORklHX0ZTTF9QQ0k9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKKyMgQ09ORklHX1BDSUVQT1JUQlVTIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1NVUFBPUlRTX01TST15CisjIENPTkZJR19QQ0lfTVNJIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfTEVHQUNZPXkKKyMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKK0NPTkZJR19QSFlTSUNBTF9BTElHTj0weDEwMDAwMDAwCitDT05GSUdfVEFTS19TSVpFPTB4YzAwMDAwMDAKKworIworIyBOZXR3b3JraW5nCisjCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19QQUNLRVQ9eQorIyBDT05GSUdfUEFDS0VUX01NQVAgaXMgbm90IHNldAorQ09ORklHX1VOSVg9eQorQ09ORklHX1hGUk09eQorIyBDT05GSUdfWEZSTV9VU0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fU1VCX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX01JR1JBVEUgaXMgbm90IHNldAorIyBDT05GSUdfWEZSTV9TVEFUSVNUSUNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9LRVkgaXMgbm90IHNldAorQ09ORklHX0lORVQ9eQorQ09ORklHX0lQX01VTFRJQ0FTVD15CisjIENPTkZJR19JUF9BRFZBTkNFRF9ST1VURVIgaXMgbm90IHNldAorQ09ORklHX0lQX0ZJQl9IQVNIPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorIyBDT05GSUdfSVBfUE5QX1JBUlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorQ09ORklHX0lORVRfWEZSTV9NT0RFX1RSQU5TUE9SVD15CitDT05GSUdfSU5FVF9YRlJNX01PREVfVFVOTkVMPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUPXkKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfVkxBTl84MDIxUSBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorIyBDT05GSUdfTExDMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFggaXMgbm90IHNldAorIyBDT05GSUdfQVRBTEsgaXMgbm90IHNldAorIyBDT05GSUdfWDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBUEIgaXMgbm90IHNldAorIyBDT05GSUdfRUNPTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTl9ST1VURVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1NDSEVEIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKKyMgQ09ORklHX05FVF9QS1RHRU4gaXMgbm90IHNldAorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorQ09ORklHX0NBTj15CitDT05GSUdfQ0FOX1JBVz15CitDT05GSUdfQ0FOX0JDTT15CisKKyMKKyMgQ0FOIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19DQU5fVkNBTiBpcyBub3Qgc2V0CisjIENPTkZJR19DQU5fT0xEX0RSSVZFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0FOX1NMQ0FOIGlzIG5vdCBzZXQKK0NPTkZJR19DQU5fU0pBMTAwMD15CitDT05GSUdfQ0FOX1NKQTEwMDBfTUVNX09GPXkKKyMgQ09ORklHX0NBTl9FTVNfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTl9JWFhBVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQ0FOX1BFQUtfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTl9LVkFTRVJfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTl9NU0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19DQU5fREVCVUdfREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcworIworIyBDT05GSUdfQ0ZHODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1NfRVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SRktJTEwgaXMgbm90IHNldAorIyBDT05GSUdfTkVUXzlQIGlzIG5vdCBzZXQKKworIworIyBEZXZpY2UgRHJpdmVycworIworCisjCisjIEdlbmVyaWMgRHJpdmVyIE9wdGlvbnMKKyMKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CitDT05GSUdfTVREPXkKKyMgQ09ORklHX01URF9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NPTkNBVD15CitDT05GSUdfTVREX1BBUlRJVElPTlM9eQorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9DTURMSU5FX1BBUlRTPXkKK0NPTkZJR19NVERfT0ZfUEFSVFM9eQorIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CisKKyMKKyMgVXNlciBNb2R1bGVzIEFuZCBUcmFuc2xhdGlvbiBMYXllcnMKKyMKK0NPTkZJR19NVERfQ0hBUj15CitDT05GSUdfTVREX0JMS0RFVlM9eQorQ09ORklHX01URF9CTE9DSz15CisjIENPTkZJR19GVEwgaXMgbm90IHNldAorIyBDT05GSUdfTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19SRkRfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NTRkRDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PT1BTIGlzIG5vdCBzZXQKKworIworIyBSQU0vUk9NL0ZsYXNoIGNoaXAgZHJpdmVycworIworQ09ORklHX01URF9DRkk9eQorQ09ORklHX01URF9KRURFQ1BST0JFPXkKK0NPTkZJR19NVERfR0VOX1BST0JFPXkKKyMgQ09ORklHX01URF9DRklfQURWX09QVElPTlMgaXMgbm90IHNldAorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMj15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzQ9eQorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzggaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE2IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8zMiBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JMT15CitDT05GSUdfTVREX0NGSV9JMj15CisjIENPTkZJR19NVERfQ0ZJX0k0IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9DRklfSTggaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JTlRFTEVYVCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUF9PRj15CisjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RBVEFGTEFTSCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTTI1UDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9TTFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUEhSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX01URFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQkxPQ0syTVREIGlzIG5vdCBzZXQKKworIworIyBEaXNrLU9uLUNoaXAgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX01URF9ET0MyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ET0MyMDAxUExVUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkQ9eQorIyBDT05GSUdfTVREX05BTkRfVkVSSUZZX1dSSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX0VDQ19TTUMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfTVVTRVVNX0lEUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX05BTkRfSURTPXkKKyMgQ09ORklHX01URF9OQU5EX0RJU0tPTkNISVAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfQ0FGRSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTkFORF9OQU5EU0lNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkRfRlNMX0VMQkMgaXMgbm90IHNldAorQ09ORklHX01URF9OQU5EX1NPQ1JBVEVTPXkKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CitDT05GSUdfT0ZfSTJDPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9eQorIyBDT05GSUdfQkxLX0RFVl9DUllQVE9MT09QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfTkJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1g4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVUIgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfUkFNPXkKK0NPTkZJR19CTEtfREVWX1JBTV9DT1VOVD0xNgorQ09ORklHX0JMS19ERVZfUkFNX1NJWkU9MzI3NjgKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorIyBDT05GSUdfU0dJX0lPQzQgaXMgbm90IHNldAorIyBDT05GSUdfVElGTV9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9JREU9eQorIyBDT05GSUdfSURFIGlzIG5vdCBzZXQKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKKyMgQ09ORklHX0NIUl9ERVZfU1QgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9PU1NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTE9XTEVWRUwgaXMgbm90IHNldAorIyBDT05GSUdfQVRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX01EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0lPTiBpcyBub3Qgc2V0CisKKyMKKyMgSUVFRSAxMzk0IChGaXJlV2lyZSkgc3VwcG9ydAorIworCisjCisjIEVuYWJsZSBvbmx5IG9uZSBvZiB0aGUgdHdvIHN0YWNrcywgdW5sZXNzIHlvdSBrbm93IHdoYXQgeW91IGFyZSBkb2luZworIworIyBDT05GSUdfRklSRVdJUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUVFRTEzOTQgaXMgbm90IHNldAorIyBDT05GSUdfSTJPIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ0lOVE9TSF9EUklWRVJTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZJQ0VTPXkKKyMgQ09ORklHX05FVERFVklDRVNfTVVMVElRVUVVRSBpcyBub3Qgc2V0CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCitDT05GSUdfTUFSVkVMTF9QSFk9eQorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQzI4SjYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19CNDQgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEVfRU5BQkxFRCBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorQ09ORklHX0dJQU5GQVI9eQorQ09ORklHX0dGQVJfTkFQST15CisjIENPTkZJR19RTEEzWFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDEgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorIyBDT05GSUdfUFBQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD04MDAKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT00ODAKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CitDT05GSUdfSU5QVVRfRVZERVY9eQorIyBDT05GSUdfSU5QVVRfRVZCVUcgaXMgbm90IHNldAorCisjCisjIElucHV0IERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX1RPVUNIU0NSRUVOPXkKKyMgQ09ORklHX1RPVUNIU0NSRUVOX0FEUzc4NDYgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fRlVKSVRTVSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9HVU5aRSBpcyBub3Qgc2V0CisjIENPTkZJR19UT1VDSFNDUkVFTl9FTE8gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fTVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX01LNzEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1BFTk1PVU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RPVUNIU0NSRUVOX1RPVUNIUklHSFQgaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVE9VQ0hXSU4gaXMgbm90IHNldAorIyBDT05GSUdfVE9VQ0hTQ1JFRU5fVUNCMTQwMCBpcyBub3Qgc2V0CitDT05GSUdfVE9VQ0hTQ1JFRU5fVFNDMjAwMz15CisjIENPTkZJR19UT1VDSFNDUkVFTl9VU0JfQ09NUE9TSVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01JU0MgaXMgbm90IHNldAorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworIyBDT05GSUdfU0VSSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0FNRVBPUlQgaXMgbm90IHNldAorCisjCisjIENoYXJhY3RlciBkZXZpY2VzCisjCitDT05GSUdfVlQ9eQorQ09ORklHX1ZUX0NPTlNPTEU9eQorQ09ORklHX0hXX0NPTlNPTEU9eQorIyBDT05GSUdfVlRfSFdfQ09OU09MRV9CSU5ESU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZLTUVNPXkKKyMgQ09ORklHX1NFUklBTF9OT05TVEFOREFSRCBpcyBub3Qgc2V0CisjIENPTkZJR19OT1pPTUkgaXMgbm90IHNldAorCisjCisjIFNlcmlhbCBkcml2ZXJzCisjCitDT05GSUdfU0VSSUFMXzgyNTA9eQorQ09ORklHX1NFUklBTF84MjUwX0NPTlNPTEU9eQorQ09ORklHX1NFUklBTF84MjUwX1BDST15CitDT05GSUdfU0VSSUFMXzgyNTBfTlJfVUFSVFM9MgorQ09ORklHX1NFUklBTF84MjUwX1JVTlRJTUVfVUFSVFM9MgorQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEPXkKK0NPTkZJR19TRVJJQUxfODI1MF9NQU5ZX1BPUlRTPXkKK0NPTkZJR19TRVJJQUxfODI1MF9TSEFSRV9JUlE9eQorQ09ORklHX1NFUklBTF84MjUwX0RFVEVDVF9JUlE9eQorQ09ORklHX1NFUklBTF84MjUwX1JTQT15CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlTPXkKK0NPTkZJR19MRUdBQ1lfUFRZX0NPVU5UPTI1NgorIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKK0NPTkZJR19IV19SQU5ET009eQorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorQ09ORklHX0kyQ19DSEFSREVWPXkKKworIworIyBJMkMgSGFyZHdhcmUgQnVzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKK0NPTkZJR19JMkNfTVBDPXkKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19PQ09SRVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BBUlBPUlRfTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BST1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0FWQUdFNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQVBSTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0VFUFJPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1OTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2ODc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVFNMMjU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQUxHTyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DSElQIGlzIG5vdCBzZXQKK0NPTkZJR19TUEk9eQorQ09ORklHX1NQSV9NQVNURVI9eQorCisjCisjIFNQSSBNYXN0ZXIgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19TUElfQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfU1BJX1NPQ1JBVEVTPXkKKworIworIyBTUEkgUHJvdG9jb2wgTWFzdGVycworIworIyBDT05GSUdfU1BJX0FUMjUgaXMgbm90IHNldAorIyBDT05GSUdfU1BJX1NQSURFViBpcyBub3Qgc2V0CisjIENPTkZJR19TUElfVExFNjJYMCBpcyBub3Qgc2V0CisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKK0NPTkZJR19IV01PTl9WSUQ9eQorIyBDT05GSUdfU0VOU09SU19BRDc0MTggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTkyNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03MCBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19MTTc1PXkKKyMgQ09ORklHX1NFTlNPUlNfTE03NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE05MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYMTYxOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY2NTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3MzYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzQyNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NJUzU1OTUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19ETUUxNzM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3QjM5NyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEUzc4MjggaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19USE1DNTAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WSUE2ODZBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQxMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVlQ4MjMxIGlzIG5vdCBzZXQKK0NPTkZJR19TRU5TT1JTX1c4Mzc4MUQ9eQorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKK0NPTkZJR19IV01PTl9ERUJVR19DSElQPXkKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworQ09ORklHX0RBQj15CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX09VVFBVVF9DT05UUk9MIGlzIG5vdCBzZXQKK0NPTkZJR19GQj15CisjIENPTkZJR19GSVJNV0FSRV9FRElEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0REQyBpcyBub3Qgc2V0CitDT05GSUdfRkJfQ0ZCX0ZJTExSRUNUPXkKK0NPTkZJR19GQl9DRkJfQ09QWUFSRUE9eQorQ09ORklHX0ZCX0NGQl9JTUFHRUJMSVQ9eQorIyBDT05GSUdfRkJfQ0ZCX1JFVl9QSVhFTFNfSU5fQllURSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfRklMTFJFQ1QgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0NPUFlBUkVBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19JTUFHRUJMSVQgaXMgbm90IHNldAorQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOPXkKK0NPTkZJR19GQl9CT1RIX0VORElBTj15CisjIENPTkZJR19GQl9CSUdfRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0xJVFRMRV9FTkRJQU4gaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZPUFMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1ZHQUxJQiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQUNNT0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9CQUNLTElHSFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTU9ERV9IRUxQRVJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RJTEVCTElUVElORyBpcyBub3Qgc2V0CisKKyMKKyMgRnJhbWUgYnVmZmVyIGhhcmR3YXJlIGRyaXZlcnMKKyMKK0NPTkZJR19GQl9NQjg2MlhYPXkKKyMgQ09ORklHX0ZCX01CODYyWFhfUENJX0dEQyBpcyBub3Qgc2V0CitDT05GSUdfRkJfTUI4NjJYWF9MSU1FPXkKKyMgQ09ORklHX0ZCX1BSRV9JTklUX0ZCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NJUlJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9QTTIgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ1lCRVIyMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX09GIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NUNjU1NTAgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVNJTElBTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfSU1TVFQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVkdBMTYgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUzFEMTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfRkJfTlZJRElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1JJVkEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUFUUk9YIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1JBREVPTiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BVFkxMjggaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1MzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NBVkFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TSVMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTkVPTUFHSUMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfS1lSTyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl8zREZYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZPT0RPTzEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVlQ4NjIzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1RSSURFTlQgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9GU0xfRElVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0lCTV9HWFQ0NTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJUlRVQUwgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworIyBDT05GSUdfVkdBX0NPTlNPTEUgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UUz15CisjIENPTkZJR19GT05UXzh4OCBpcyBub3Qgc2V0CitDT05GSUdfRk9OVF84eDE2PXkKKyMgQ09ORklHX0ZPTlRfNngxMSBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzd4MTQgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9QRUFSTF84eDggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9BQ09STl84eDggaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9NSU5JXzR4NiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UX1NVTjh4MTYgaXMgbm90IHNldAorIyBDT05GSUdfRk9OVF9TVU4xMngyMiBpcyBub3Qgc2V0CisjIENPTkZJR19GT05UXzEweDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR08gaXMgbm90IHNldAorCisjCisjIFNvdW5kCisjCisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfVVNCX0hJRElOUFVUX1BPV0VSQk9PSyBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfRkYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTPXkKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCitDT05GSUdfVVNCX0RFVklDRUZTPXkKK0NPTkZJR19VU0JfREVWSUNFX0NMQVNTPXkKKyMgQ09ORklHX1VTQl9EWU5BTUlDX01JTk9SUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfV0hJVEVMSVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEdfQkxBQ0tMSVNUX0hVQiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEPXkKKyMgQ09ORklHX1VTQl9FSENJX1JPT1RfSFVCX1RUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX1RUX05FV1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX0ZTTCBpcyBub3Qgc2V0CitDT05GSUdfVVNCX0VIQ0lfSENEX1BQQ19PRj15CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0Y9eQorQ09ORklHX1VTQl9PSENJX0hDRF9QUENfT0ZfQkU9eQorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRl9MRSBpcyBub3Qgc2V0CitDT05GSUdfVVNCX09IQ0lfSENEX1BDST15CitDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9ERVNDPXkKK0NPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX01NSU89eQorQ09ORklHX1VTQl9PSENJX0xJVFRMRV9FTkRJQU49eQorIyBDT05GSUdfVVNCX1VIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TTDgxMV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1I4QTY2NTk3X0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorCisjCisjIE5PVEU6IFVTQl9TVE9SQUdFIGVuYWJsZXMgU0NTSSwgYW5kICdTQ1NJIGRpc2sgc3VwcG9ydCcKKyMKKworIworIyBtYXkgYWxzbyBiZSBuZWVkZWQ7IHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9EUENNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1VTQkFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFIwOSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSNTUgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfSlVNUFNIT1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQUxBVURBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX09ORVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0tBUk1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0NZUFJFU1NfQVRBQ0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xJQlVTVUFMIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW1hZ2luZyBkZXZpY2VzCisjCisjIENPTkZJR19VU0JfTURDODAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9NSUNST1RFSyBpcyBub3Qgc2V0CitDT05GSUdfVVNCX01PTj15CisKKyMKKyMgVVNCIHBvcnQgZHJpdmVycworIworIyBDT05GSUdfVVNCX1NFUklBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIE1pc2NlbGxhbmVvdXMgZHJpdmVycworIworIyBDT05GSUdfVVNCX0VNSTYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FTUkyNiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQURVVFVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVUVSU1dBTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1JJTzUwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVHT1RPV0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0JFUlJZX0NIQVJHRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9DWVBSRVNTX0NZN0M2MyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lUSEVSTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEhJREdFVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSURNT1VTRSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRlRESV9FTEFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BUFBMRURJU1BMQVkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NJU1VTQlZHQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTEQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RSQU5DRVZJQlJBVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JT1dBUlJJT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTSUdIVEZXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorQ09ORklHX1JUQ19JTlRGX1BST0M9eQorQ09ORklHX1JUQ19JTlRGX0RFVj15CisjIENPTkZJR19SVENfSU5URl9ERVZfVUlFX0VNVUwgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9URVNUIGlzIG5vdCBzZXQKKworIworIyBJMkMgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzA3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxMzc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRFMxNjcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JTNUMzNzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9JU0wxMjA4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfWDEyMDUgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU4MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000MVQ4MCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1MzNTM5MEEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9GTTMxMzAgaXMgbm90IHNldAorQ09ORklHX1JUQ19EUlZfUlg4MDI1PXkKKworIworIyBTUEkgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfTUFYNjkwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1I5NzAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM0OCBpcyBub3Qgc2V0CisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworQ09ORklHX1JUQ19EUlZfUFBDPXkKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKworIworIyBGaWxlIHN5c3RlbXMKKyMKK0NPTkZJR19FWFQyX0ZTPXkKKyMgQ09ORklHX0VYVDJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUM19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0REVWX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworIyBDT05GSUdfTVNET1NfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVkZBVF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfU1lTRlM9eQorQ09ORklHX1RNUEZTPXkKKyMgQ09ORklHX1RNUEZTX1BPU0lYX0FDTCBpcyBub3Qgc2V0CisjIENPTkZJR19IVUdFVExCX1BBR0UgaXMgbm90IHNldAorIyBDT05GSUdfQ09ORklHRlNfRlMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgZmlsZXN5c3RlbXMKKyMKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTUExVU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19FRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0pGRlMyX0ZTPXkKK0NPTkZJR19KRkZTMl9GU19ERUJVRz0wCitDT05GSUdfSkZGUzJfRlNfV1JJVEVCVUZGRVI9eQorIyBDT05GSUdfSkZGUzJfRlNfV0JVRl9WRVJJRlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfU1VNTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9GU19YQVRUUiBpcyBub3Qgc2V0CisjIENPTkZJR19KRkZTMl9DT01QUkVTU0lPTl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9aTElCPXkKKyMgQ09ORklHX0pGRlMyX0xaTyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfUlRJTUU9eQorIyBDT05GSUdfSkZGUzJfUlVCSU4gaXMgbm90IHNldAorQ09ORklHX0NSQU1GUz15CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUU5YNEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JPTUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU1ZfRlMgaXMgbm90IHNldAorIyBDT05GSUdfVUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRXT1JLX0ZJTEVTWVNURU1TPXkKK0NPTkZJR19ORlNfRlM9eQorQ09ORklHX05GU19WMz15CisjIENPTkZJR19ORlNfVjNfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU19WNCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlNEIGlzIG5vdCBzZXQKK0NPTkZJR19ST09UX05GUz15CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorIyBDT05GSUdfU1VOUlBDX0JJTkQzNCBpcyBub3Qgc2V0CisjIENPTkZJR19SUENTRUNfR1NTX0tSQjUgaXMgbm90IHNldAorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ0lGUyBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworQ09ORklHX1BBUlRJVElPTl9BRFZBTkNFRD15CisjIENPTkZJR19BQ09STl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfT1NGX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUlHQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRBUklfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ19QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX01TRE9TX1BBUlRJVElPTj15CisjIENPTkZJR19CU0RfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX1NVQlBBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TT0xBUklTX1g4Nl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfVU5JWFdBUkVfRElTS0xBQkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xETV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU0dJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTFRSSVhfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTl9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfS0FSTUFfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VGSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1lTVjY4X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFMgaXMgbm90IHNldAorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CisjIENPTkZJR19HRU5FUklDX0ZJTkRfRklSU1RfQklUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQ19DQ0lUVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUkMxNiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorIyBDT05GSUdfTUFHSUNfU1lTUlEgaXMgbm90IHNldAorIyBDT05GSUdfVU5VU0VEX1NZTUJPTFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEVBREVSU19DSEVDSyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19LRVJORUwgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZX0ZJTEVfQ0FQQUJJTElUSUVTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX01BTkFHRVIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19OVUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DUllQVEQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FVVEhFTkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKKyMgQ09ORklHX0NSWVBUT19DQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19FQ0IgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUENCQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCisjIENPTkZJR19DUllQVE9fSE1BQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fWENCQyBpcyBub3Qgc2V0CisKKyMKKyMgRGlnZXN0CisjCisjIENPTkZJR19DUllQVE9fQ1JDMzJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01ENSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUlDSEFFTF9NSUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0hBNTEyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19UR1IxOTIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1dQNTEyIGlzIG5vdCBzZXQKKworIworIyBDaXBoZXJzCisjCisjIENPTkZJR19DUllQVE9fQUVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BTlVCSVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0FSQzQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0JMT1dGSVNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19ERVMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fS0hBWkFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TQUxTQTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRUVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVJQRU5UIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RXT0ZJU0ggaXMgbm90IHNldAorCisjCisjIENvbXByZXNzaW9uCisjCisjIENPTkZJR19DUllQVE9fREVGTEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fSFc9eQorIyBDT05GSUdfQ1JZUFRPX0RFVl9ISUZOXzc5NVggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3BwYzlhX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3BwYzlhX2RlZmNvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZjJjMTYzCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvODZ4eC9nZWZfcHBjOWFfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTg4OSBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjNworIyBGcmkgTWFyIDEzIDE1OjM2OjExIDIwMDkKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworQ09ORklHXzZ4eD15CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0ZQVT15CisjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19BTFRJVkVDPXkKK0NPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfUFBDX1NURF9NTVVfMzI9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfU01QPXkKK0NPTkZJR19OUl9DUFVTPTIKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCisjIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfR0VORVJJQ19MT0NLQlJFQUs9eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKK0NPTkZJR19HRU5FUklDX1RCU1lOQz15CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMz15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKK0NPTkZJR19HUk9VUF9TQ0hFRD15CitDT05GSUdfRkFJUl9HUk9VUF9TQ0hFRD15CisjIENPTkZJR19SVF9HUk9VUF9TQ0hFRCBpcyBub3Qgc2V0CitDT05GSUdfVVNFUl9TQ0hFRD15CisjIENPTkZJR19DR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CitDT05GSUdfUkVMQVk9eQorIyBDT05GSUdfTkFNRVNQQUNFUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKKyMgQ09ORklHX0NDX09QVElNSVpFX0ZPUl9TSVpFIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVEw9eQorQ09ORklHX0VNQkVEREVEPXkKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19TVE9QX01BQ0hJTkU9eQorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCitDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQorQ09ORklHX0NMQVNTSUMzMj15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0CitDT05GSUdfUFBDXzg2eHg9eQorIyBDT05GSUdfTVBDODY0MV9IUENOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NCQzg2NDFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzg2MTBfSFBDRCBpcyBub3Qgc2V0CitDT05GSUdfR0VGX1BQQzlBPXkKKyMgQ09ORklHX0dFRl9TQkMzMTAgaXMgbm90IHNldAorIyBDT05GSUdfR0VGX1NCQzYxMCBpcyBub3Qgc2V0CitDT05GSUdfTVBDODY0MT15CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKK0NPTkZJR19NUElDPXkKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19UQVUgaXMgbm90IHNldAorIyBDT05GSUdfUVVJQ0NfRU5HSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzh4eHhfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX1RJQ0tfT05FU0hPVD15CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKK0NPTkZJR19IWj0xMDAwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9NSVNDPW0KKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX0lSUV9BTExfQ1BVUz15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX01JR1JBVElPTj15CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19QUENfNEtfUEFHRVM9eQorIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCisjIENPTkZJR19QUk9DX0RFVklDRVRSRUUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKK0NPTkZJR19FWFRSQV9UQVJHRVRTPSIiCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CitDT05GSUdfUFBDX0lORElSRUNUX1BDST15CitDT05GSUdfRlNMX1NPQz15CitDT05GSUdfRlNMX1BDST15CitDT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKK0NPTkZJR19QQ0lFUE9SVEJVUz15CitDT05GSUdfUENJRUFFUj15CisjIENPTkZJR19QQ0lFQVNQTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorIyBDT05GSUdfUENJX01TSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfTEVHQUNZIGlzIG5vdCBzZXQKK0NPTkZJR19QQ0lfREVCVUc9eQorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9bQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX1hGUk1fSVBDT01QPW0KK0NPTkZJR19ORVRfS0VZPW0KKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKK0NPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorQ09ORklHX0FTS19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15CitDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKK0NPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKK0NPTkZJR19ORVRfSVBJUD1tCitDT05GSUdfTkVUX0lQR1JFPW0KK0NPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKK0NPTkZJR19JUF9NUk9VVEU9eQorQ09ORklHX0lQX1BJTVNNX1YxPXkKK0NPTkZJR19JUF9QSU1TTV9WMj15CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfSU5FVF9BSD1tCitDT05GSUdfSU5FVF9FU1A9bQorQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KK0NPTkZJR19JTkVUX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorQ09ORklHX0lORVRfWEZSTV9NT0RFX0JFRVQ9eQorIyBDT05GSUdfSU5FVF9MUk8gaXMgbm90IHNldAorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj1tCisjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9BSD1tCitDT05GSUdfSU5FVDZfRVNQPW0KK0NPTkZJR19JTkVUNl9JUENPTVA9bQorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAorQ09ORklHX0lQVjZfU0lUPW0KK0NPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKK0NPTkZJR19JUFY2X1RVTk5FTD1tCisjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRMQUJFTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUl9BRFZBTkNFRD15CitDT05GSUdfQlJJREdFX05FVEZJTFRFUj15CisKKyMKKyMgQ29yZSBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfUVVFVUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX05FVExJTktfTE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GX0NPTk5UUkFDSyBpcyBub3Qgc2V0CitDT05GSUdfTkVURklMVEVSX1hUQUJMRVM9bQorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9DTEFTU0lGWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX0RTQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9NQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfTkZMT0cgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORlFVRVVFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfUkFURUVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQTVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9UQVJHRVRfVENQT1BUU1RSSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0NPTU1FTlQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0RTQ1AgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0VTUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfSEFTSExJTUlUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9JUFJBTkdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9MRU5HVEggaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX0xJTUlUIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQUMgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX01VTFRJUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfT1dORVIgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1BPTElDWSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEhZU0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUEtUVFlQRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JBVEVFU1QgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1JFQUxNIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9SRUNFTlQgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NDVFAgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1NUQVRJU1RJQyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfU1RSSU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9UQ1BNU1MgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1RJTUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX01BVENIX1UzMiBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisKKyMKKyMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCisjIENPTkZJR19ORl9ERUZSQUdfSVBWNCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfUVVFVUU9bQorQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9BRERSVFlQRT1tCisjIENPTkZJR19JUF9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CitDT05GSUdfSVBfTkZfTUFUQ0hfRUNOPW0KK0NPTkZJR19JUF9ORl9NQVRDSF9UVEw9bQorQ09ORklHX0lQX05GX0ZJTFRFUj1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1JFSkVDVD1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0xPRz1tCitDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0c9bQorQ09ORklHX0lQX05GX01BTkdMRT1tCitDT05GSUdfSVBfTkZfVEFSR0VUX0VDTj1tCisjIENPTkZJR19JUF9ORl9UQVJHRVRfVFRMIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9ORl9SQVc9bQorIyBDT05GSUdfSVBfTkZfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX0lQX05GX0FSUFRBQkxFUz1tCitDT05GSUdfSVBfTkZfQVJQRklMVEVSPW0KK0NPTkZJR19JUF9ORl9BUlBfTUFOR0xFPW0KKworIworIyBJUHY2OiBOZXRmaWx0ZXIgQ29uZmlndXJhdGlvbgorIworQ09ORklHX0lQNl9ORl9RVUVVRT1tCitDT05GSUdfSVA2X05GX0lQVEFCTEVTPW0KKyMgQ09ORklHX0lQNl9ORl9NQVRDSF9BSCBpcyBub3Qgc2V0CitDT05GSUdfSVA2X05GX01BVENIX0VVSTY0PW0KK0NPTkZJR19JUDZfTkZfTUFUQ0hfRlJBRz1tCitDT05GSUdfSVA2X05GX01BVENIX09QVFM9bQorQ09ORklHX0lQNl9ORl9NQVRDSF9ITD1tCitDT05GSUdfSVA2X05GX01BVENIX0lQVjZIRUFERVI9bQorIyBDT05GSUdfSVA2X05GX01BVENIX01IIGlzIG5vdCBzZXQKK0NPTkZJR19JUDZfTkZfTUFUQ0hfUlQ9bQorQ09ORklHX0lQNl9ORl9UQVJHRVRfTE9HPW0KK0NPTkZJR19JUDZfTkZfRklMVEVSPW0KKyMgQ09ORklHX0lQNl9ORl9UQVJHRVRfUkVKRUNUIGlzIG5vdCBzZXQKK0NPTkZJR19JUDZfTkZfTUFOR0xFPW0KKyMgQ09ORklHX0lQNl9ORl9UQVJHRVRfSEwgaXMgbm90IHNldAorQ09ORklHX0lQNl9ORl9SQVc9bQorIyBDT05GSUdfSVA2X05GX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRV9ORl9FQlRBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9EQ0NQIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9TQ1RQPW0KKyMgQ09ORklHX1NDVFBfREJHX01TRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1RQX0RCR19PQkpDTlQgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX05PTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0NUUF9ITUFDX1NIQTEgaXMgbm90IHNldAorQ09ORklHX1NDVFBfSE1BQ19NRDU9eQorQ09ORklHX1RJUEM9bQorIyBDT05GSUdfVElQQ19BRFZBTkNFRCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19BVE09bQorQ09ORklHX0FUTV9DTElQPW0KKyMgQ09ORklHX0FUTV9DTElQX05PX0lDTVAgaXMgbm90IHNldAorQ09ORklHX0FUTV9MQU5FPW0KK0NPTkZJR19BVE1fTVBPQT1tCitDT05GSUdfQVRNX0JSMjY4ND1tCisjIENPTkZJR19BVE1fQlIyNjg0X0lQRklMVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19TVFA9bQorQ09ORklHX0JSSURHRT1tCisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKK0NPTkZJR19WTEFOXzgwMjFRPW0KKyMgQ09ORklHX1ZMQU5fODAyMVFfR1ZSUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUNORVQgaXMgbm90IHNldAorQ09ORklHX0xMQz1tCisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorQ09ORklHX1dBTl9ST1VURVI9bQorQ09ORklHX05FVF9TQ0hFRD15CisKKyMKKyMgUXVldWVpbmcvU2NoZWR1bGluZworIworQ09ORklHX05FVF9TQ0hfQ0JRPW0KK0NPTkZJR19ORVRfU0NIX0hUQj1tCitDT05GSUdfTkVUX1NDSF9IRlNDPW0KK0NPTkZJR19ORVRfU0NIX0FUTT1tCitDT05GSUdfTkVUX1NDSF9QUklPPW0KKyMgQ09ORklHX05FVF9TQ0hfTVVMVElRIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfU0NIX1JFRD1tCitDT05GSUdfTkVUX1NDSF9TRlE9bQorQ09ORklHX05FVF9TQ0hfVEVRTD1tCitDT05GSUdfTkVUX1NDSF9UQkY9bQorQ09ORklHX05FVF9TQ0hfR1JFRD1tCitDT05GSUdfTkVUX1NDSF9EU01BUks9bQorQ09ORklHX05FVF9TQ0hfTkVURU09bQorIyBDT05GSUdfTkVUX1NDSF9EUlIgaXMgbm90IHNldAorCisjCisjIENsYXNzaWZpY2F0aW9uCisjCitDT05GSUdfTkVUX0NMUz15CisjIENPTkZJR19ORVRfQ0xTX0JBU0lDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1RDSU5ERVg9bQorQ09ORklHX05FVF9DTFNfUk9VVEU0PW0KK0NPTkZJR19ORVRfQ0xTX1JPVVRFPXkKK0NPTkZJR19ORVRfQ0xTX0ZXPW0KK0NPTkZJR19ORVRfQ0xTX1UzMj1tCisjIENPTkZJR19DTFNfVTMyX1BFUkYgaXMgbm90IHNldAorIyBDT05GSUdfQ0xTX1UzMl9NQVJLIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfQ0xTX1JTVlA9bQorQ09ORklHX05FVF9DTFNfUlNWUDY9bQorIyBDT05GSUdfTkVUX0NMU19GTE9XIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9FTUFUQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19BQ1QgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0NMU19JTkQgaXMgbm90IHNldAorQ09ORklHX05FVF9TQ0hfRklGTz15CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworQ09ORklHX05FVF9QS1RHRU49bQorIyBDT05GSUdfSEFNUkFESU8gaXMgbm90IHNldAorIyBDT05GSUdfQ0FOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lSREEgaXMgbm90IHNldAorIyBDT05GSUdfQlQgaXMgbm90IHNldAorIyBDT05GSUdfQUZfUlhSUEMgaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkVUIGlzIG5vdCBzZXQKK0NPTkZJR19GSUJfUlVMRVM9eQorQ09ORklHX1dJUkVMRVNTPXkKKyMgQ09ORklHX0NGRzgwMjExIGlzIG5vdCBzZXQKK0NPTkZJR19XSVJFTEVTU19PTERfUkVHVUxBVE9SWT15CisjIENPTkZJR19XSVJFTEVTU19FWFQgaXMgbm90IHNldAorIyBDT05GSUdfTElCODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfTUFDODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorQ09ORklHX1NUQU5EQUxPTkU9eQorQ09ORklHX1BSRVZFTlRfRklSTVdBUkVfQlVJTEQ9eQorIyBDT05GSUdfRldfTE9BREVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ERVZSRVMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTX0hZUEVSVklTT1IgaXMgbm90IHNldAorIyBDT05GSUdfQ09OTkVDVE9SIGlzIG5vdCBzZXQKK0NPTkZJR19NVEQ9eQorIyBDT05GSUdfTVREX0RFQlVHIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ09OQ0FUPXkKK0NPTkZJR19NVERfUEFSVElUSU9OUz15CisjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NNRExJTkVfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9PRl9QQVJUUz15CisjIENPTkZJR19NVERfQVI3X1BBUlRTIGlzIG5vdCBzZXQKKworIworIyBVc2VyIE1vZHVsZXMgQW5kIFRyYW5zbGF0aW9uIExheWVycworIworQ09ORklHX01URF9DSEFSPXkKK0NPTkZJR19NVERfQkxLREVWUz15CitDT05GSUdfTVREX0JMT0NLPXkKKyMgQ09ORklHX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGRF9GVEwgaXMgbm90IHNldAorIyBDT05GSUdfU1NGREMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09PUFMgaXMgbm90IHNldAorCisjCisjIFJBTS9ST00vRmxhc2ggY2hpcCBkcml2ZXJzCisjCitDT05GSUdfTVREX0NGST15CitDT05GSUdfTVREX0pFREVDUFJPQkU9eQorQ09ORklHX01URF9HRU5fUFJPQkU9eQorIyBDT05GSUdfTVREX0NGSV9BRFZfT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzE9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8yPXkKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfND15CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfOCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMTYgaXMgbm90IHNldAorIyBDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzMyIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0kxPXkKK0NPTkZJR19NVERfQ0ZJX0kyPXkKKyMgQ09ORklHX01URF9DRklfSTQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0NGSV9JOCBpcyBub3Qgc2V0CitDT05GSUdfTVREX0NGSV9JTlRFTEVYVD15CitDT05GSUdfTVREX0NGSV9BTURTVEQ9eQorIyBDT05GSUdfTVREX0NGSV9TVEFBIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX1VUSUw9eQorIyBDT05GSUdfTVREX1JBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUk9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9BQlNFTlQgaXMgbm90IHNldAorCisjCisjIE1hcHBpbmcgZHJpdmVycyBmb3IgY2hpcCBhY2Nlc3MKKyMKKyMgQ09ORklHX01URF9DT01QTEVYX01BUFBJTkdTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFlTTUFQIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfUEhZU01BUF9PRj15CisjIENPTkZJR19NVERfSU5URUxfVlJfTk9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QTEFUUkFNIGlzIG5vdCBzZXQKKworIworIyBTZWxmLWNvbnRhaW5lZCBNVEQgZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01URF9QTUM1NTEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1NMUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9QSFJBTSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTVREUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9CTE9DSzJNVEQgaXMgbm90IHNldAorCisjCisjIERpc2stT24tQ2hpcCBEZXZpY2UgRHJpdmVycworIworIyBDT05GSUdfTVREX0RPQzIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDEgaXMgbm90IHNldAorIyBDT05GSUdfTVREX0RPQzIwMDFQTFVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9OQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9PTkVOQU5EIGlzIG5vdCBzZXQKKworIworIyBMUEREUiBmbGFzaCBtZW1vcnkgZHJpdmVycworIworIyBDT05GSUdfTVREX0xQRERSIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CitDT05GSUdfT0ZfR1BJTz15CitDT05GSUdfT0ZfSTJDPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9bQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCitDT05GSUdfQkxLX0RFVl9OQkQ9bQorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMzEwNzIKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD15CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU1I9eQorIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CitDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9QTVA9eQorIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU0lMMjQgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9GU0wgaXMgbm90IHNldAorQ09ORklHX0FUQV9TRkY9eQorIyBDT05GSUdfU0FUQV9TVlcgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9NViBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX05WIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BEQ19BRE1BIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfUVNUT1IgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9QUk9NSVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBVEFfU1g0IGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX1NJTD15CisjIENPTkZJR19TQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1VMSSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19TQVRBX1ZJVEVTU0UgaXMgbm90IHNldAorIyBDT05GSUdfU0FUQV9JTklDMTYyWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FMSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FNRCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0FSVE9QIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQVRJSVhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfQ01ENjQwX1BDSSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NNRDY0WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUyMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NTNTUzMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0NZUFJFU1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9FRkFSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUMzdYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfSFBUM1gyTiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0hQVDNYMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0lUODIxMyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX0pNSUNST04gaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTUFSVkVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX01QSUlYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT0xEUElJWCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05FVENFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9OSU5KQTMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfTlM4NzQxMCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX05TODc0MTUgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9PUFRJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfT1BUSURNQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1BEQ19PTEQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9SQURJU1lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfUloxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0MxMjAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBVEFfU0VSVkVSV09SS1MgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QREMyMDI3WCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJTDY4MCBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NJUyBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1dJTkJPTkQgaXMgbm90IHNldAorIyBDT05GSUdfUEFUQV9QTEFURk9STSBpcyBub3Qgc2V0CisjIENPTkZJR19QQVRBX1NDSCBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CitDT05GSUdfRFVNTVk9bQorQ09ORklHX0JPTkRJTkc9bQorIyBDT05GSUdfTUFDVkxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19FUVVBTElaRVIgaXMgbm90IHNldAorQ09ORklHX1RVTj1tCisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1ZFTkRPUl8zQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9UVUxJUCBpcyBub3Qgc2V0CisjIENPTkZJR19IUDEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfWk1JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfUkdNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1RBSCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfRU1BQzQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX05PX0ZMT1dfQ1RSTCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NMUl9JQ0lOVFNUQVQgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DT01NT05fRVJSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfQjQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorQ09ORklHX05FVERFVl8xMDAwPXkKKyMgQ09ORklHX0FDRU5JQyBpcyBub3Qgc2V0CisjIENPTkZJR19ETDJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0UxMDAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19JUDEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUdCIGlzIG5vdCBzZXQKKyMgQ09ORklHX05TODM4MjAgaXMgbm90IHNldAorIyBDT05GSUdfSEFNQUNISSBpcyBub3Qgc2V0CisjIENPTkZJR19ZRUxMT1dGSU4gaXMgbm90IHNldAorIyBDT05GSUdfUjgxNjkgaXMgbm90IHNldAorIyBDT05GSUdfU0lTMTkwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLR0UgaXMgbm90IHNldAorIyBDT05GSUdfU0tZMiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfVkVMT0NJVFkgaXMgbm90IHNldAorIyBDT05GSUdfVElHT04zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JOWDIgaXMgbm90IHNldAorQ09ORklHX0dJQU5GQVI9eQorIyBDT05GSUdfTVY2NDNYWF9FVEggaXMgbm90IHNldAorIyBDT05GSUdfUUxBM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pNRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRERVZfMTAwMDAgaXMgbm90IHNldAorIyBDT05GSUdfVFIgaXMgbm90IHNldAorCisjCisjIFdpcmVsZXNzIExBTgorIworIyBDT05GSUdfV0xBTl9QUkU4MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19XTEFOXzgwMjExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lXTFdJRklfTEVEUyBpcyBub3Qgc2V0CisKKyMKKyMgRW5hYmxlIFdpTUFYIChOZXR3b3JraW5nIG9wdGlvbnMpIHRvIHNlZSB0aGUgV2lNQVggZHJpdmVycworIworCisjCisjIFVTQiBOZXR3b3JrIEFkYXB0ZXJzCisjCisjIENPTkZJR19VU0JfQ0FUQyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfS0FXRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QRUdBU1VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SVEw4MTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9VU0JORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOIGlzIG5vdCBzZXQKK0NPTkZJR19BVE1fRFJJVkVSUz15CisjIENPTkZJR19BVE1fRFVNTVkgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fTEFOQUkgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0VOSSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fRklSRVNUUkVBTSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fWkFUTSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fTklDU1RBUiBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fSURUNzcyNTIgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0FNQkFTU0FET1IgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0hPUklaT04gaXMgbm90IHNldAorIyBDT05GSUdfQVRNX0lBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTV9GT1JFMjAwRSBpcyBub3Qgc2V0CisjIENPTkZJR19BVE1fSEUgaXMgbm90IHNldAorIyBDT05GSUdfQVRNX1NPTE9TIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZEREkgaXMgbm90IHNldAorIyBDT05GSUdfSElQUEkgaXMgbm90IHNldAorQ09ORklHX1BQUD1tCitDT05GSUdfUFBQX01VTFRJTElOSz15CitDT05GSUdfUFBQX0ZJTFRFUj15CitDT05GSUdfUFBQX0FTWU5DPW0KK0NPTkZJR19QUFBfU1lOQ19UVFk9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCisjIENPTkZJR19QUFBfTVBQRSBpcyBub3Qgc2V0CitDT05GSUdfUFBQT0U9bQorQ09ORklHX1BQUE9BVE09bQorIyBDT05GSUdfUFBQT0wyVFAgaXMgbm90IHNldAorQ09ORklHX1NMSVA9bQorQ09ORklHX1NMSVBfQ09NUFJFU1NFRD15CitDT05GSUdfU0xIQz1tCitDT05GSUdfU0xJUF9TTUFSVD15CitDT05GSUdfU0xJUF9NT0RFX1NMSVA2PXkKKyMgQ09ORklHX05FVF9GQyBpcyBub3Qgc2V0CitDT05GSUdfTkVUQ09OU09MRT15CisjIENPTkZJR19ORVRDT05TT0xFX0RZTkFNSUMgaXMgbm90IHNldAorQ09ORklHX05FVFBPTEw9eQorQ09ORklHX05FVFBPTExfVFJBUD15CitDT05GSUdfTkVUX1BPTExfQ09OVFJPTExFUj15CisjIENPTkZJR19JU0ROIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBkZXZpY2Ugc3VwcG9ydAorIworQ09ORklHX0lOUFVUPXkKK0NPTkZJR19JTlBVVF9GRl9NRU1MRVNTPW0KKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKK0NPTkZJR19OVlJBTT15CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0kyQ19NUEM9eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKK0NPTkZJR19EUzE2ODI9eQorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorIyBDT05GSUdfREVCVUdfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1NZU0ZTIGlzIG5vdCBzZXQKKworIworIyBNZW1vcnkgbWFwcGVkIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19YSUxJTlggaXMgbm90IHNldAorCisjCisjIEkyQyBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fTUFYNzMyWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDQTk1M1ggaXMgbm90IHNldAorIyBDT05GSUdfR1BJT19QQ0Y4NTdYIGlzIG5vdCBzZXQKKworIworIyBQQ0kgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX0JUOFhYIGlzIG5vdCBzZXQKKworIworIyBTUEkgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19XMSBpcyBub3Qgc2V0CisjIENPTkZJR19QT1dFUl9TVVBQTFkgaXMgbm90IHNldAorQ09ORklHX0hXTU9OPXkKKyMgQ09ORklHX0hXTU9OX1ZJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxNCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FENzQxOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyNiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDMxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNOTI0MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NjIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDcwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BVFhQMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RTMTYyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0k1S19BTUIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4MDVGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRjcxODgyRkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzUzNzVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MThTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0dMNTIwU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19JVDg3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE02MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03OCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODcgaXMgbm90IHNldAorQ09ORklHX1NFTlNPUlNfTE05MD15CitDT05GSUdfU0VOU09SU19MTTkyPXkKKyMgQ09ORklHX1NFTlNPUlNfTE05MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xUQzQyNDUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVgxNjE5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjY1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODczNjAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQzg3NDI3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0RNRTE3MzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdNMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xOTIgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURTNzgyOCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RITUM1MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZJQTY4NkEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDEyMTEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19WVDgyMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3ODFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg1VFMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODNMNzg2TkcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM2MjdIRiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0VIRiBpcyBub3Qgc2V0CisjIENPTkZJR19IV01PTl9ERUJVR19DSElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CitDT05GSUdfV0FUQ0hET0c9eQorIyBDT05GSUdfV0FUQ0hET0dfTk9XQVlPVVQgaXMgbm90IHNldAorCisjCisjIFdhdGNoZG9nIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19TT0ZUX1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FMSU03MTAxX1dEVCBpcyBub3Qgc2V0CitDT05GSUdfR0VGX1dEVD15CisjIENPTkZJR184eHh4X1dEVCBpcyBub3Qgc2V0CisKKyMKKyMgUENJLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19QQ0lQQ1dBVENIRE9HIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dEVFBDSSBpcyBub3Qgc2V0CisKKyMKKyMgVVNCLWJhc2VkIFdhdGNoZG9nIENhcmRzCisjCisjIENPTkZJR19VU0JQQ1dBVENIRE9HIGlzIG5vdCBzZXQKK0NPTkZJR19TU0JfUE9TU0lCTEU9eQorCisjCisjIFNvbmljcyBTaWxpY29uIEJhY2twbGFuZQorIworIyBDT05GSUdfU1NCIGlzIG5vdCBzZXQKKworIworIyBNdWx0aWZ1bmN0aW9uIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NRkRfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfU001MDEgaXMgbm90IHNldAorIyBDT05GSUdfSFRDX1BBU0lDMyBpcyBub3Qgc2V0CisjIENPTkZJR19UUFM2NTAxMCBpcyBub3Qgc2V0CisjIENPTkZJR19UV0w0MDMwX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1RNSU8gaXMgbm90IHNldAorIyBDT05GSUdfUE1JQ19EQTkwM1ggaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODQwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004MzUwX0kyQyBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfUENGNTA2MzMgaXMgbm90IHNldAorIyBDT05GSUdfUkVHVUxBVE9SIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRldmljZXMKKyMKKworIworIyBNdWx0aW1lZGlhIGNvcmUgc3VwcG9ydAorIworIyBDT05GSUdfVklERU9fREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RWQl9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJREVPX01FRElBIGlzIG5vdCBzZXQKKworIworIyBNdWx0aW1lZGlhIGRyaXZlcnMKKyMKK0NPTkZJR19EQUI9eQorIyBDT05GSUdfVVNCX0RBQlVTQiBpcyBub3Qgc2V0CisKKyMKKyMgR3JhcGhpY3Mgc3VwcG9ydAorIworIyBDT05GSUdfQUdQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RSTSBpcyBub3Qgc2V0CisjIENPTkZJR19WR0FTVEFURSBpcyBub3Qgc2V0CitDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0w9bQorIyBDT05GSUdfRkIgaXMgbm90IHNldAorIyBDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUIGlzIG5vdCBzZXQKKworIworIyBEaXNwbGF5IGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19ESVNQTEFZX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX1ZHQV9DT05TT0xFPXkKKyMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorIyBDT05GSUdfU09VTkQgaXMgbm90IHNldAorQ09ORklHX0hJRF9TVVBQT1JUPXkKK0NPTkZJR19ISUQ9eQorIyBDT05GSUdfSElEX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJRFJBVyBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIElucHV0IERldmljZXMKKyMKK0NPTkZJR19VU0JfSElEPXkKKyMgQ09ORklHX0hJRF9QSUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0hJRERFViBpcyBub3Qgc2V0CisKKyMKKyMgU3BlY2lhbCBISUQgZHJpdmVycworIworQ09ORklHX0hJRF9DT01QQVQ9eQorQ09ORklHX0hJRF9BNFRFQ0g9eQorQ09ORklHX0hJRF9BUFBMRT15CitDT05GSUdfSElEX0JFTEtJTj15CitDT05GSUdfSElEX0NIRVJSWT15CitDT05GSUdfSElEX0NISUNPTlk9eQorQ09ORklHX0hJRF9DWVBSRVNTPXkKK0NPTkZJR19ISURfRVpLRVk9eQorQ09ORklHX0hJRF9HWVJBVElPTj15CitDT05GSUdfSElEX0xPR0lURUNIPXkKKyMgQ09ORklHX0xPR0lURUNIX0ZGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xPR0lSVU1CTEVQQUQyX0ZGIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfTUlDUk9TT0ZUPXkKK0NPTkZJR19ISURfTU9OVEVSRVk9eQorIyBDT05GSUdfSElEX05UUklHIGlzIG5vdCBzZXQKK0NPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQorIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9QRVRBTFlOWD15CitDT05GSUdfSElEX1NBTVNVTkc9eQorQ09ORklHX0hJRF9TT05ZPXkKK0NPTkZJR19ISURfU1VOUExVUz15CisjIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAorIyBDT05GSUdfSElEX1RPUFNFRUQgaXMgbm90IHNldAorQ09ORklHX1RIUlVTVE1BU1RFUl9GRj1tCitDT05GSUdfWkVST1BMVVNfRkY9bQorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfRlNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIworCisjCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9BVE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0dBREdFVCBpcyBub3Qgc2V0CisKKyMKKyMgT1RHIGFuZCByZWxhdGVkIGluZnJhc3RydWN0dXJlCisjCisjIENPTkZJR19VU0JfR1BJT19WQlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CisjIENPTkZJR19SVENfSU5URl9QUk9DIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0RTMTMwNyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTM3NCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTY3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX01BWDY5MDAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9SUzVDMzcyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfSVNMMTIwOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1gxMjA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUENGODU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1ODMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NNDFUODAgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TMzUzOTBBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfRk0zMTMwIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfRFJWX1JYODU4MT15CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9QUEMgaXMgbm90IHNldAorIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CitDT05GSUdfRVhUMl9GU19YQVRUUj15CitDT05GSUdfRVhUMl9GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfRVhUMl9GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQyX0ZTX1hJUCBpcyBub3Qgc2V0CitDT05GSUdfRVhUM19GUz15CitDT05GSUdfRVhUM19GU19YQVRUUj15CitDT05GSUdfRVhUM19GU19QT1NJWF9BQ0w9eQorIyBDT05GSUdfRVhUM19GU19TRUNVUklUWSBpcyBub3Qgc2V0CisjIENPTkZJR19FWFQ0X0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KQkQ9eQorQ09ORklHX0ZTX01CQ0FDSEU9eQorIyBDT05GSUdfUkVJU0VSRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19GU19QT1NJWF9BQ0w9eQorQ09ORklHX0ZJTEVfTE9DS0lORz15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfT0NGUzJfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQlRSRlNfRlMgaXMgbm90IHNldAorQ09ORklHX0ROT1RJRlk9eQorQ09ORklHX0lOT1RJRlk9eQorQ09ORklHX0lOT1RJRllfVVNFUj15CisjIENPTkZJR19RVU9UQSBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTNF9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNFX0ZTIGlzIG5vdCBzZXQKKworIworIyBDRC1ST00vRFZEIEZpbGVzeXN0ZW1zCisjCisjIENPTkZJR19JU085NjYwX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VERl9GUyBpcyBub3Qgc2V0CisKKyMKKyMgRE9TL0ZBVC9OVCBGaWxlc3lzdGVtcworIworQ09ORklHX0ZBVF9GUz15CitDT05GSUdfTVNET1NfRlM9eQorQ09ORklHX1ZGQVRfRlM9eQorQ09ORklHX0ZBVF9ERUZBVUxUX0NPREVQQUdFPTQzNworQ09ORklHX0ZBVF9ERUZBVUxUX0lPQ0hBUlNFVD0iaXNvODg1OS0xIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorQ09ORklHX0NJRlM9bQorIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0CitDT05GSUdfQ0lGU19YQVRUUj15CitDT05GSUdfQ0lGU19QT1NJWD15CisjIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KK0NPTkZJR19OTFNfSVNPODg1OV84PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQorQ09ORklHX05MU19BU0NJST1tCitDT05GSUdfTkxTX0lTTzg4NTlfMT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMj1tCitDT05GSUdfTkxTX0lTTzg4NTlfMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfND1tCitDT05GSUdfTkxTX0lTTzg4NTlfNT1tCitDT05GSUdfTkxTX0lTTzg4NTlfNj1tCitDT05GSUdfTkxTX0lTTzg4NTlfNz1tCitDT05GSUdfTkxTX0lTTzg4NTlfOT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTM9bQorQ09ORklHX05MU19JU084ODU5XzE0PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xNT1tCitDT05GSUdfTkxTX0tPSThfUj1tCitDT05GSUdfTkxTX0tPSThfVT1tCitDT05GSUdfTkxTX1VURjg9bQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9bQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JDX1QxMERJRiBpcyBub3Qgc2V0CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorQ09ORklHX0xJQkNSQzMyQz1tCitDT05GSUdfWkxJQl9JTkZMQVRFPXkKK0NPTkZJR19aTElCX0RFRkxBVEU9eQorQ09ORklHX1BMSVNUPXkKK0NPTkZJR19IQVNfSU9NRU09eQorQ09ORklHX0hBU19JT1BPUlQ9eQorQ09ORklHX0hBU19ETUE9eQorQ09ORklHX0hBVkVfTE1CPXkKKworIworIyBLZXJuZWwgaGFja2luZworIworIyBDT05GSUdfUFJJTlRLX1RJTUUgaXMgbm90IHNldAorQ09ORklHX0VOQUJMRV9XQVJOX0RFUFJFQ0FURUQ9eQorQ09ORklHX0VOQUJMRV9NVVNUX0NIRUNLPXkKK0NPTkZJR19GUkFNRV9XQVJOPTEwMjQKK0NPTkZJR19NQUdJQ19TWVNSUT15CisjIENPTkZJR19VTlVTRURfU1lNQk9MUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19IRUFERVJTX0NIRUNLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19LRVJORUw9eQorIyBDT05GSUdfREVCVUdfU0hJUlEgaXMgbm90IHNldAorQ09ORklHX0RFVEVDVF9TT0ZUTE9DS1VQPXkKKyMgQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDIGlzIG5vdCBzZXQKK0NPTkZJR19CT09UUEFSQU1fU09GVExPQ0tVUF9QQU5JQ19WQUxVRT0wCitDT05GSUdfU0NIRURfREVCVUc9eQorIyBDT05GSUdfU0NIRURTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19USU1FUl9TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19PQkpFQ1RTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NMQUIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUlRfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVF9NVVRFWF9URVNURVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1BJTkxPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTVVURVhFUyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19CVUdWRVJCT1NFIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19JTkZPPXkKKyMgQ09ORklHX0RFQlVHX1ZNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1dSSVRFQ09VTlQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfWE1PTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUlFTVEFDS1MgaXMgbm90IHNldAorIyBDT05GSUdfQkRJX1NXSVRDSCBpcyBub3Qgc2V0CisjIENPTkZJR19CT09UWF9URVhUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19FQVJMWV9ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgU2VjdXJpdHkgb3B0aW9ucworIworIyBDT05GSUdfS0VZUyBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFk9eQorIyBDT05GSUdfU0VDVVJJVFlGUyBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFlfTkVUV09SSz15CisjIENPTkZJR19TRUNVUklUWV9ORVRXT1JLX1hGUk0gaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfUEFUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9GSUxFX0NBUEFCSUxJVElFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRUNVUklUWV9ST09UUExVRyBpcyBub3Qgc2V0CitDT05GSUdfU0VDVVJJVFlfREVGQVVMVF9NTUFQX01JTl9BRERSPTAKK0NPTkZJR19DUllQVE89eQorCisjCisjIENyeXB0byBjb3JlIG9yIGhlbHBlcgorIworIyBDT05GSUdfQ1JZUFRPX0ZJUFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19BTEdBUEk9eQorQ09ORklHX0NSWVBUT19BTEdBUEkyPXkKK0NPTkZJR19DUllQVE9fQUVBRD1tCitDT05GSUdfQ1JZUFRPX0FFQUQyPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSPXkKK0NPTkZJR19DUllQVE9fQkxLQ0lQSEVSMj15CitDT05GSUdfQ1JZUFRPX0hBU0g9eQorQ09ORklHX0NSWVBUT19IQVNIMj15CitDT05GSUdfQ1JZUFRPX1JORzI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSPXkKK0NPTkZJR19DUllQVE9fTUFOQUdFUjI9eQorIyBDT05GSUdfQ1JZUFRPX0dGMTI4TVVMIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fTlVMTD1tCisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVVUSEVOQz1tCitDT05GSUdfQ1JZUFRPX1RFU1Q9bQorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0VDQj1tCisjIENPTkZJR19DUllQVE9fTFJXIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fUENCQz1tCisjIENPTkZJR19DUllQVE9fWFRTIGlzIG5vdCBzZXQKKworIworIyBIYXNoIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0hNQUM9eQorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworQ09ORklHX0NSWVBUT19DUkMzMkM9bQorQ09ORklHX0NSWVBUT19NRDQ9bQorQ09ORklHX0NSWVBUT19NRDU9eQorQ09ORklHX0NSWVBUT19NSUNIQUVMX01JQz1tCisjIENPTkZJR19DUllQVE9fUk1EMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxNjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDI1NiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMzIwIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fU0hBMT1tCitDT05GSUdfQ1JZUFRPX1NIQTI1Nj1tCitDT05GSUdfQ1JZUFRPX1NIQTUxMj1tCisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fV1A1MTI9bQorCisjCisjIENpcGhlcnMKKyMKK0NPTkZJR19DUllQVE9fQUVTPW0KK0NPTkZJR19DUllQVE9fQU5VQklTPW0KK0NPTkZJR19DUllQVE9fQVJDND1tCitDT05GSUdfQ1JZUFRPX0JMT1dGSVNIPW0KKyMgQ09ORklHX0NSWVBUT19DQU1FTExJQSBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0NBU1Q1PW0KK0NPTkZJR19DUllQVE9fQ0FTVDY9bQorQ09ORklHX0NSWVBUT19ERVM9eQorIyBDT05GSUdfQ1JZUFRPX0ZDUllQVCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0tIQVpBRD1tCisjIENPTkZJR19DUllQVE9fU0FMU0EyMCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VFRCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1NFUlBFTlQ9bQorQ09ORklHX0NSWVBUT19URUE9bQorQ09ORklHX0NSWVBUT19UV09GSVNIPW0KK0NPTkZJR19DUllQVE9fVFdPRklTSF9DT01NT049bQorCisjCisjIENvbXByZXNzaW9uCisjCitDT05GSUdfQ1JZUFRPX0RFRkxBVEU9bQorIyBDT05GSUdfQ1JZUFRPX0xaTyBpcyBub3Qgc2V0CisKKyMKKyMgUmFuZG9tIE51bWJlciBHZW5lcmF0aW9uCisjCisjIENPTkZJR19DUllQVE9fQU5TSV9DUFJORyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fSFcgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NMT0NLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJUlRVQUxJWkFUSU9OIGlzIG5vdCBzZXQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9jb25maWdzLzg2eHgvZ2VmX3NiYzMxMF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmMzMTBfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJkMjM2YjMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy84Nnh4L2dlZl9zYmMzMTBfZGVmY29uZmlnCkBAIC0wLDAgKzEsMTYxMyBAQAorIworIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAorIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMworIyBXZWQgSmFuIDI4IDIzOjA1OjM0IDIwMDkKKyMKKyMgQ09ORklHX1BQQzY0IGlzIG5vdCBzZXQKKworIworIyBQcm9jZXNzb3Igc3VwcG9ydAorIworQ09ORklHXzZ4eD15CisjIENPTkZJR19QUENfODV4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOHh4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQweCBpcyBub3Qgc2V0CisjIENPTkZJR180NHggaXMgbm90IHNldAorIyBDT05GSUdfRTIwMCBpcyBub3Qgc2V0CitDT05GSUdfUFBDX0ZQVT15CisjIENPTkZJR19QSFlTXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19BTFRJVkVDPXkKK0NPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfUFBDX1NURF9NTVVfMzI9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CitDT05GSUdfU01QPXkKK0NPTkZJR19OUl9DUFVTPTIKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCisjIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfR0VORVJJQ19MT0NLQlJFQUs9eQorQ09ORklHX0FSQ0hfSEFTX0lMT0cyX1UzMj15CitDT05GSUdfR0VORVJJQ19IV0VJR0hUPXkKK0NPTkZJR19HRU5FUklDX0NBTElCUkFURV9ERUxBWT15CitDT05GSUdfR0VORVJJQ19GSU5EX05FWFRfQklUPXkKK0NPTkZJR19HRU5FUklDX0dQSU89eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKK0NPTkZJR19HRU5FUklDX1RCU1lOQz15CitDT05GSUdfQVVESVRfQVJDSD15CitDT05GSUdfR0VORVJJQ19CVUc9eQorQ09ORklHX0RFRkFVTFRfVUlNQUdFPXkKKyMgQ09ORklHX1BQQ19EQ1JfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19EQ1JfTU1JTyBpcyBub3Qgc2V0CitDT05GSUdfREVGQ09ORklHX0xJU1Q9Ii9saWIvbW9kdWxlcy8kVU5BTUVfUkVMRUFTRS8uY29uZmlnIgorCisjCisjIEdlbmVyYWwgc2V0dXAKKyMKK0NPTkZJR19FWFBFUklNRU5UQUw9eQorQ09ORklHX0xPQ0tfS0VSTkVMPXkKK0NPTkZJR19JTklUX0VOVl9BUkdfTElNSVQ9MzIKK0NPTkZJR19MT0NBTFZFUlNJT049IiIKK0NPTkZJR19MT0NBTFZFUlNJT05fQVVUTz15CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVD15CitDT05GSUdfQlNEX1BST0NFU1NfQUNDVF9WMz15CisjIENPTkZJR19UQVNLU1RBVFMgaXMgbm90IHNldAorIyBDT05GSUdfQVVESVQgaXMgbm90IHNldAorCisjCisjIFJDVSBTdWJzeXN0ZW0KKyMKK0NPTkZJR19DTEFTU0lDX1JDVT15CisjIENPTkZJR19UUkVFX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVSBpcyBub3Qgc2V0CisjIENPTkZJR19UUkVFX1JDVV9UUkFDRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1JDVV9UUkFDRSBpcyBub3Qgc2V0CitDT05GSUdfSUtDT05GSUc9eQorQ09ORklHX0lLQ09ORklHX1BST0M9eQorQ09ORklHX0xPR19CVUZfU0hJRlQ9MTQKKyMgQ09ORklHX0dST1VQX1NDSEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NHUk9VUFMgaXMgbm90IHNldAorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURUQ9eQorQ09ORklHX1NZU0ZTX0RFUFJFQ0FURURfVjI9eQorQ09ORklHX1JFTEFZPXkKKyMgQ09ORklHX05BTUVTUEFDRVMgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSU5JVFJEPXkKK0NPTkZJR19JTklUUkFNRlNfU09VUkNFPSIiCisjIENPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRSBpcyBub3Qgc2V0CitDT05GSUdfU1lTQ1RMPXkKK0NPTkZJR19FTUJFRERFRD15CitDT05GSUdfU1lTQ1RMX1NZU0NBTEw9eQorQ09ORklHX0tBTExTWU1TPXkKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfQ09NUEFUX0JSSz15CitDT05GSUdfQkFTRV9GVUxMPXkKK0NPTkZJR19GVVRFWD15CitDT05GSUdfQU5PTl9JTk9ERVM9eQorQ09ORklHX0VQT0xMPXkKK0NPTkZJR19TSUdOQUxGRD15CitDT05GSUdfVElNRVJGRD15CitDT05GSUdfRVZFTlRGRD15CitDT05GSUdfU0hNRU09eQorQ09ORklHX0FJTz15CitDT05GSUdfVk1fRVZFTlRfQ09VTlRFUlM9eQorQ09ORklHX1BDSV9RVUlSS1M9eQorQ09ORklHX1NMQUI9eQorIyBDT05GSUdfU0xVQiBpcyBub3Qgc2V0CisjIENPTkZJR19TTE9CIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BST0ZJTElORyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9PUFJPRklMRT15CisjIENPTkZJR19LUFJPQkVTIGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTPXkKK0NPTkZJR19IQVZFX0lPUkVNQVBfUFJPVD15CitDT05GSUdfSEFWRV9LUFJPQkVTPXkKK0NPTkZJR19IQVZFX0tSRVRQUk9CRVM9eQorQ09ORklHX0hBVkVfQVJDSF9UUkFDRUhPT0s9eQorQ09ORklHX1VTRV9HRU5FUklDX1NNUF9IRUxQRVJTPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVkVSU0lPTlMgaXMgbm90IHNldAorIyBDT05GSUdfTU9EVUxFX1NSQ1ZFUlNJT05fQUxMIGlzIG5vdCBzZXQKK0NPTkZJR19TVE9QX01BQ0hJTkU9eQorQ09ORklHX0JMT0NLPXkKKyMgQ09ORklHX0xCRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CisjIENPTkZJR19ERUZBVUxUX0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfREVBRExJTkUgaXMgbm90IHNldAorQ09ORklHX0RFRkFVTFRfQ0ZRPXkKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJjZnEiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfTVNJX0JJVE1BUD15CisKKyMKKyMgUGxhdGZvcm0gc3VwcG9ydAorIworQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNPXkKK0NPTkZJR19DTEFTU0lDMzI9eQorIyBDT05GSUdfUFBDX0NIUlAgaXMgbm90IHNldAorIyBDT05GSUdfTVBDNTEyMV9BRFMgaXMgbm90IHNldAorIyBDT05GSUdfTVBDNTEyMV9HRU5FUklDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEM1Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19QTUFDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DRUxMX05BVElWRSBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODJ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUTJBRFMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzgzeHggaXMgbm90IHNldAorQ09ORklHX1BQQ184Nnh4PXkKKyMgQ09ORklHX01QQzg2NDFfSFBDTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQkM4NjQxRCBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM4NjEwX0hQQ0QgaXMgbm90IHNldAorQ09ORklHX0dFRl9TQkMzMTA9eQorIyBDT05GSUdfR0VGX1NCQzYxMCBpcyBub3Qgc2V0CitDT05GSUdfTVBDODY0MT15CisjIENPTkZJR19JUElDIGlzIG5vdCBzZXQKK0NPTkZJR19NUElDPXkKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0k4MjU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19SVEFTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01NSU9fTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzEwNiBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfOTcwX05BUCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfSU5ESVJFQ1RfSU8gaXMgbm90IHNldAorIyBDT05GSUdfR0VORVJJQ19JT01BUCBpcyBub3Qgc2V0CisjIENPTkZJR19DUFVfRlJFUSBpcyBub3Qgc2V0CisjIENPTkZJR19UQVUgaXMgbm90IHNldAorIyBDT05GSUdfUVVJQ0NfRU5HSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX01QQzh4eHhfR1BJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TSU1QTEVfR1BJTyBpcyBub3Qgc2V0CisKKyMKKyMgS2VybmVsIG9wdGlvbnMKKyMKKyMgQ09ORklHX0hJR0hNRU0gaXMgbm90IHNldAorQ09ORklHX1RJQ0tfT05FU0hPVD15CisjIENPTkZJR19OT19IWiBpcyBub3Qgc2V0CitDT05GSUdfSElHSF9SRVNfVElNRVJTPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTX0JVSUxEPXkKKyMgQ09ORklHX0haXzEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19IWl8yNTAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMzAwIGlzIG5vdCBzZXQKK0NPTkZJR19IWl8xMDAwPXkKK0NPTkZJR19IWj0xMDAwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKKyMgQ09ORklHX1BSRUVNUFRfTk9ORSBpcyBub3Qgc2V0CisjIENPTkZJR19QUkVFTVBUX1ZPTFVOVEFSWSBpcyBub3Qgc2V0CitDT05GSUdfUFJFRU1QVD15CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9NSVNDPXkKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9FTkFCTEVfTUVNT1JZX0hPVFBMVUc9eQorQ09ORklHX0FSQ0hfSEFTX1dBTEtfTUVNT1JZPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUkVNT1ZFPXkKKyMgQ09ORklHX0tFWEVDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQVNIX0RVTVAgaXMgbm90IHNldAorQ09ORklHX0lSUV9BTExfQ1BVUz15CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorQ09ORklHX01JR1JBVElPTj15CisjIENPTkZJR19QSFlTX0FERFJfVF82NEJJVCBpcyBub3Qgc2V0CitDT05GSUdfWk9ORV9ETUFfRkxBRz0xCitDT05GSUdfQk9VTkNFPXkKK0NPTkZJR19WSVJUX1RPX0JVUz15CitDT05GSUdfVU5FVklDVEFCTEVfTFJVPXkKK0NPTkZJR19QUENfNEtfUEFHRVM9eQorIyBDT05GSUdfUFBDXzE2S19QQUdFUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfNjRLX1BBR0VTIGlzIG5vdCBzZXQKK0NPTkZJR19GT1JDRV9NQVhfWk9ORU9SREVSPTExCisjIENPTkZJR19QUk9DX0RFVklDRVRSRUUgaXMgbm90IHNldAorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKK0NPTkZJR19FWFRSQV9UQVJHRVRTPSIiCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CitDT05GSUdfUFBDX0lORElSRUNUX1BDST15CitDT05GSUdfRlNMX1NPQz15CitDT05GSUdfRlNMX1BDST15CitDT05GSUdfUFBDX1BDSV9DSE9JQ0U9eQorQ09ORklHX1BDST15CitDT05GSUdfUENJX0RPTUFJTlM9eQorQ09ORklHX1BDSV9TWVNDQUxMPXkKK0NPTkZJR19QQ0lFUE9SVEJVUz15CitDT05GSUdfUENJRUFFUj15CisjIENPTkZJR19QQ0lFQVNQTSBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9TVVBQT1JUU19NU0k9eQorQ09ORklHX1BDSV9NU0k9eQorIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfU1RVQiBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0NBUkQgaXMgbm90IHNldAorIyBDT05GSUdfSE9UUExVR19QQ0kgaXMgbm90IHNldAorIyBDT05GSUdfSEFTX1JBUElESU8gaXMgbm90IHNldAorCisjCisjIEFkdmFuY2VkIHNldHVwCisjCisjIENPTkZJR19BRFZBTkNFRF9PUFRJT05TIGlzIG5vdCBzZXQKKworIworIyBEZWZhdWx0IHNldHRpbmdzIGZvciBhZHZhbmNlZCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHVzZWQKKyMKK0NPTkZJR19MT1dNRU1fU0laRT0weDMwMDAwMDAwCitDT05GSUdfTE9XTUVNX0NBTV9OVU09MworQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX05FVD15CisKKyMKKyMgTmV0d29ya2luZyBvcHRpb25zCisjCitDT05GSUdfQ09NUEFUX05FVF9ERVZfT1BTPXkKK0NPTkZJR19QQUNLRVQ9eQorQ09ORklHX1BBQ0tFVF9NTUFQPXkKK0NPTkZJR19VTklYPXkKK0NPTkZJR19YRlJNPXkKK0NPTkZJR19YRlJNX1VTRVI9bQorIyBDT05GSUdfWEZSTV9TVUJfUE9MSUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1hGUk1fTUlHUkFURSBpcyBub3Qgc2V0CisjIENPTkZJR19YRlJNX1NUQVRJU1RJQ1MgaXMgbm90IHNldAorQ09ORklHX1hGUk1fSVBDT01QPW0KK0NPTkZJR19ORVRfS0VZPW0KKyMgQ09ORklHX05FVF9LRVlfTUlHUkFURSBpcyBub3Qgc2V0CitDT05GSUdfSU5FVD15CitDT05GSUdfSVBfTVVMVElDQVNUPXkKK0NPTkZJR19JUF9BRFZBTkNFRF9ST1VURVI9eQorQ09ORklHX0FTS19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9GSUJfVFJJRSBpcyBub3Qgc2V0CitDT05GSUdfSVBfRklCX0hBU0g9eQorQ09ORklHX0lQX01VTFRJUExFX1RBQkxFUz15CitDT05GSUdfSVBfUk9VVEVfTVVMVElQQVRIPXkKK0NPTkZJR19JUF9ST1VURV9WRVJCT1NFPXkKK0NPTkZJR19JUF9QTlA9eQorQ09ORklHX0lQX1BOUF9ESENQPXkKK0NPTkZJR19JUF9QTlBfQk9PVFA9eQorQ09ORklHX0lQX1BOUF9SQVJQPXkKK0NPTkZJR19ORVRfSVBJUD1tCitDT05GSUdfTkVUX0lQR1JFPW0KK0NPTkZJR19ORVRfSVBHUkVfQlJPQURDQVNUPXkKK0NPTkZJR19JUF9NUk9VVEU9eQorQ09ORklHX0lQX1BJTVNNX1YxPXkKK0NPTkZJR19JUF9QSU1TTV9WMj15CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CitDT05GSUdfSU5FVF9BSD1tCitDT05GSUdfSU5FVF9FU1A9bQorQ09ORklHX0lORVRfSVBDT01QPW0KK0NPTkZJR19JTkVUX1hGUk1fVFVOTkVMPW0KK0NPTkZJR19JTkVUX1RVTk5FTD1tCitDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUPXkKK0NPTkZJR19JTkVUX1hGUk1fTU9ERV9UVU5ORUw9eQorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfQkVFVCBpcyBub3Qgc2V0CitDT05GSUdfSU5FVF9MUk89eQorQ09ORklHX0lORVRfRElBRz15CitDT05GSUdfSU5FVF9UQ1BfRElBRz15CisjIENPTkZJR19UQ1BfQ09OR19BRFZBTkNFRCBpcyBub3Qgc2V0CitDT05GSUdfVENQX0NPTkdfQ1VCSUM9eQorQ09ORklHX0RFRkFVTFRfVENQX0NPTkc9ImN1YmljIgorIyBDT05GSUdfVENQX01ENVNJRyBpcyBub3Qgc2V0CitDT05GSUdfSVBWNj1tCisjIENPTkZJR19JUFY2X1BSSVZBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNl9ST1VURVJfUFJFRiBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X09QVElNSVNUSUNfREFEIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9BSD1tCitDT05GSUdfSU5FVDZfRVNQPW0KK0NPTkZJR19JTkVUNl9JUENPTVA9bQorIyBDT05GSUdfSVBWNl9NSVA2IGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUNl9YRlJNX1RVTk5FTD1tCitDT05GSUdfSU5FVDZfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFJBTlNQT1JUPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfVFVOTkVMPW0KK0NPTkZJR19JTkVUNl9YRlJNX01PREVfQkVFVD1tCisjIENPTkZJR19JTkVUNl9YRlJNX01PREVfUk9VVEVPUFRJTUlaQVRJT04gaXMgbm90IHNldAorQ09ORklHX0lQVjZfU0lUPW0KK0NPTkZJR19JUFY2X05ESVNDX05PREVUWVBFPXkKK0NPTkZJR19JUFY2X1RVTk5FTD1tCisjIENPTkZJR19JUFY2X01VTFRJUExFX1RBQkxFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JUFY2X01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX0RDQ1AgaXMgbm90IHNldAorIyBDT05GSUdfSVBfU0NUUCBpcyBub3Qgc2V0CisjIENPTkZJR19USVBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTSBpcyBub3Qgc2V0CisjIENPTkZJR19CUklER0UgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0RTQSBpcyBub3Qgc2V0CisjIENPTkZJR19WTEFOXzgwMjFRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQ05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19MTEMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQWCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEFMSyBpcyBub3Qgc2V0CisjIENPTkZJR19YMjUgaXMgbm90IHNldAorIyBDT05GSUdfTEFQQiBpcyBub3Qgc2V0CisjIENPTkZJR19FQ09ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0FOX1JPVVRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfRENCIGlzIG5vdCBzZXQKKworIworIyBOZXR3b3JrIHRlc3RpbmcKKyMKK0NPTkZJR19ORVRfUEtUR0VOPW0KKyMgQ09ORklHX0hBTVJBRElPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBTiBpcyBub3Qgc2V0CisjIENPTkZJR19JUkRBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGX1JYUlBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIT05FVCBpcyBub3Qgc2V0CitDT05GSUdfRklCX1JVTEVTPXkKKyMgQ09ORklHX1dJUkVMRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dJTUFYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JGS0lMTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfOVAgaXMgbm90IHNldAorCisjCisjIERldmljZSBEcml2ZXJzCisjCisKKyMKKyMgR2VuZXJpYyBEcml2ZXIgT3B0aW9ucworIworQ09ORklHX1VFVkVOVF9IRUxQRVJfUEFUSD0iL3NiaW4vaG90cGx1ZyIKK0NPTkZJR19TVEFOREFMT05FPXkKK0NPTkZJR19QUkVWRU5UX0ZJUk1XQVJFX0JVSUxEPXkKKyMgQ09ORklHX0ZXX0xPQURFUiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNfSFlQRVJWSVNPUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05ORUNUT1IgaXMgbm90IHNldAorQ09ORklHX01URD15CisjIENPTkZJR19NVERfREVCVUcgaXMgbm90IHNldAorQ09ORklHX01URF9DT05DQVQ9eQorQ09ORklHX01URF9QQVJUSVRJT05TPXkKKyMgQ09ORklHX01URF9URVNUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfUkVEQk9PVF9QQVJUUyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ01ETElORV9QQVJUUyBpcyBub3Qgc2V0CitDT05GSUdfTVREX09GX1BBUlRTPXkKKyMgQ09ORklHX01URF9BUjdfUEFSVFMgaXMgbm90IHNldAorCisjCisjIFVzZXIgTW9kdWxlcyBBbmQgVHJhbnNsYXRpb24gTGF5ZXJzCisjCitDT05GSUdfTVREX0NIQVI9eQorQ09ORklHX01URF9CTEtERVZTPXkKK0NPTkZJR19NVERfQkxPQ0s9eQorIyBDT05GSUdfRlRMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GVEwgaXMgbm90IHNldAorIyBDT05GSUdfSU5GVEwgaXMgbm90IHNldAorIyBDT05GSUdfUkZEX0ZUTCBpcyBub3Qgc2V0CisjIENPTkZJR19TU0ZEQyBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfT09QUyBpcyBub3Qgc2V0CisKKyMKKyMgUkFNL1JPTS9GbGFzaCBjaGlwIGRyaXZlcnMKKyMKK0NPTkZJR19NVERfQ0ZJPXkKK0NPTkZJR19NVERfSkVERUNQUk9CRT15CitDT05GSUdfTVREX0dFTl9QUk9CRT15CisjIENPTkZJR19NVERfQ0ZJX0FEVl9PUFRJT05TIGlzIG5vdCBzZXQKK0NPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMT15CitDT05GSUdfTVREX01BUF9CQU5LX1dJRFRIXzI9eQorQ09ORklHX01URF9NQVBfQkFOS19XSURUSF80PXkKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF84IGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NQVBfQkFOS19XSURUSF8xNiBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfTUFQX0JBTktfV0lEVEhfMzIgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfSTE9eQorQ09ORklHX01URF9DRklfSTI9eQorIyBDT05GSUdfTVREX0NGSV9JNCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfQ0ZJX0k4IGlzIG5vdCBzZXQKK0NPTkZJR19NVERfQ0ZJX0lOVEVMRVhUPXkKK0NPTkZJR19NVERfQ0ZJX0FNRFNURD15CisjIENPTkZJR19NVERfQ0ZJX1NUQUEgaXMgbm90IHNldAorQ09ORklHX01URF9DRklfVVRJTD15CisjIENPTkZJR19NVERfUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9ST00gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0FCU0VOVCBpcyBub3Qgc2V0CisKKyMKKyMgTWFwcGluZyBkcml2ZXJzIGZvciBjaGlwIGFjY2VzcworIworIyBDT05GSUdfTVREX0NPTVBMRVhfTUFQUElOR1MgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIWVNNQVAgaXMgbm90IHNldAorQ09ORklHX01URF9QSFlTTUFQX09GPXkKKyMgQ09ORklHX01URF9JTlRFTF9WUl9OT1IgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BMQVRSQU0gaXMgbm90IHNldAorCisjCisjIFNlbGYtY29udGFpbmVkIE1URCBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTVREX1BNQzU1MSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfU0xSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX1BIUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9NVERSQU0gaXMgbm90IHNldAorIyBDT05GSUdfTVREX0JMT0NLMk1URCBpcyBub3Qgc2V0CisKKyMKKyMgRGlzay1Pbi1DaGlwIERldmljZSBEcml2ZXJzCisjCisjIENPTkZJR19NVERfRE9DMjAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMSBpcyBub3Qgc2V0CisjIENPTkZJR19NVERfRE9DMjAwMVBMVVMgaXMgbm90IHNldAorIyBDT05GSUdfTVREX05BTkQgaXMgbm90IHNldAorIyBDT05GSUdfTVREX09ORU5BTkQgaXMgbm90IHNldAorCisjCisjIExQRERSIGZsYXNoIG1lbW9yeSBkcml2ZXJzCisjCisjIENPTkZJR19NVERfTFBERFIgaXMgbm90IHNldAorIyBDT05GSUdfTVREX1FJTkZPX1BST0JFIGlzIG5vdCBzZXQKKworIworIyBVQkkgLSBVbnNvcnRlZCBibG9jayBpbWFnZXMKKyMKKyMgQ09ORklHX01URF9VQkkgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CitDT05GSUdfT0ZfR1BJTz15CitDT05GSUdfT0ZfSTJDPXkKKyMgQ09ORklHX1BBUlBPUlQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorIyBDT05GSUdfQkxLX0RFVl9GRCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfQ1BRX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfQ0lTU19EQSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0RBQzk2MCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1VNRU0gaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DT1dfQ09NTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0xPT1A9bQorQ09ORklHX0JMS19ERVZfQ1JZUFRPTE9PUD1tCitDT05GSUdfQkxLX0RFVl9OQkQ9bQorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT0xMzEwNzIKKyMgQ09ORklHX0JMS19ERVZfWElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NEUk9NX1BLVENEVkQgaXMgbm90IHNldAorIyBDT05GSUdfQVRBX09WRVJfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSEQgaXMgbm90IHNldAorQ09ORklHX01JU0NfREVWSUNFUz15CisjIENPTkZJR19QSEFOVE9NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NHSV9JT0M0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJRk1fQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1M5MzJTNDAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VOQ0xPU1VSRV9TRVJWSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19IUF9JTE8gaXMgbm90IHNldAorIyBDT05GSUdfQzJQT1JUIGlzIG5vdCBzZXQKKworIworIyBFRVBST00gc3VwcG9ydAorIworIyBDT05GSUdfRUVQUk9NX0FUMjQgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19FRVBST01fOTNDWDYgaXMgbm90IHNldAorQ09ORklHX0hBVkVfSURFPXkKKyMgQ09ORklHX0lERSBpcyBub3Qgc2V0CisKKyMKKyMgU0NTSSBkZXZpY2Ugc3VwcG9ydAorIworIyBDT05GSUdfUkFJRF9BVFRSUyBpcyBub3Qgc2V0CitDT05GSUdfU0NTST15CitDT05GSUdfU0NTSV9ETUE9eQorIyBDT05GSUdfU0NTSV9UR1QgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ORVRMSU5LIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1BST0NfRlM9eQorCisjCisjIFNDU0kgc3VwcG9ydCB0eXBlIChkaXNrLCB0YXBlLCBDRC1ST00pCisjCitDT05GSUdfQkxLX0RFVl9TRD15CitDT05GSUdfQ0hSX0RFVl9TVD15CisjIENPTkZJR19DSFJfREVWX09TU1QgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU1I9eQorIyBDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1IgaXMgbm90IHNldAorIyBDT05GSUdfQ0hSX0RFVl9TRyBpcyBub3Qgc2V0CisjIENPTkZJR19DSFJfREVWX1NDSCBpcyBub3Qgc2V0CisKKyMKKyMgU29tZSBTQ1NJIGRldmljZXMgKGUuZy4gQ0QganVrZWJveCkgc3VwcG9ydCBtdWx0aXBsZSBMVU5zCisjCisjIENPTkZJR19TQ1NJX01VTFRJX0xVTiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0NPTlNUQU5UUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0xPR0dJTkcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQ0FOX0FTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX1dBSVRfU0NBTj1tCisKKyMKKyMgU0NTSSBUcmFuc3BvcnRzCisjCisjIENPTkZJR19TQ1NJX1NQSV9BVFRSUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TWU01M0M4WFhfMiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUiBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1FMT0dJQ18xMjgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxBX0lTQ1NJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTFBGQyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzk1eCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RDMzkwVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05TUDMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TUlAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ESCBpcyBub3Qgc2V0CitDT05GSUdfQVRBPXkKKyMgQ09ORklHX0FUQV9OT05TVEFOREFSRCBpcyBub3Qgc2V0CitDT05GSUdfU0FUQV9QTVA9eQorIyBDT05GSUdfU0FUQV9BSENJIGlzIG5vdCBzZXQKK0NPTkZJR19TQVRBX1NJTDI0PXkKKyMgQ09ORklHX1NBVEFfRlNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9TRkYgaXMgbm90IHNldAorIyBDT05GSUdfTUQgaXMgbm90IHNldAorIyBDT05GSUdfRlVTSU9OIGlzIG5vdCBzZXQKKworIworIyBJRUVFIDEzOTQgKEZpcmVXaXJlKSBzdXBwb3J0CisjCisKKyMKKyMgRW5hYmxlIG9ubHkgb25lIG9mIHRoZSB0d28gc3RhY2tzLCB1bmxlc3MgeW91IGtub3cgd2hhdCB5b3UgYXJlIGRvaW5nCisjCisjIENPTkZJR19GSVJFV0lSRSBpcyBub3Qgc2V0CisjIENPTkZJR19JRUVFMTM5NCBpcyBub3Qgc2V0CisjIENPTkZJR19JMk8gaXMgbm90IHNldAorIyBDT05GSUdfTUFDSU5UT1NIX0RSSVZFUlMgaXMgbm90IHNldAorQ09ORklHX05FVERFVklDRVM9eQorQ09ORklHX0RVTU1ZPW0KK0NPTkZJR19CT05ESU5HPW0KKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKK0NPTkZJR19UVU49bQorIyBDT05GSUdfVkVUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BUkNORVQgaXMgbm90IHNldAorQ09ORklHX1BIWUxJQj15CisKKyMKKyMgTUlJIFBIWSBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUFSVkVMTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfREFWSUNPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfUVNFTUlfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xYVF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfQ0lDQURBX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19WSVRFU1NFX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TTVNDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19CUk9BRENPTV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfSUNQTFVTX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19SRUFMVEVLX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19OQVRJT05BTF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfU1RFMTBYUCBpcyBub3Qgc2V0CisjIENPTkZJR19MU0lfRVQxMDExQ19QSFkgaXMgbm90IHNldAorIyBDT05GSUdfRklYRURfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01ESU9fQklUQkFORyBpcyBub3Qgc2V0CitDT05GSUdfTkVUX0VUSEVSTkVUPXkKK0NPTkZJR19NSUk9eQorIyBDT05GSUdfSEFQUFlNRUFMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NVTkdFTSBpcyBub3Qgc2V0CisjIENPTkZJR19DQVNTSU5JIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9WRU5ET1JfM0NPTSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfVFVMSVAgaXMgbm90IHNldAorIyBDT05GSUdfSFAxMDAgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1pNSUkgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX1JHTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19UQUggaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX0VNQUM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19OT19GTE9XX0NUUkwgaXMgbm90IHNldAorIyBDT05GSUdfSUJNX05FV19FTUFDX01BTF9DTFJfSUNJTlRTVEFUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ09NTU9OX0VSUiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwyIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRERVZfMTAwMD15CisjIENPTkZJR19BQ0VOSUMgaXMgbm90IHNldAorIyBDT05GSUdfREwySyBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMCBpcyBub3Qgc2V0CisjIENPTkZJR19FMTAwMEUgaXMgbm90IHNldAorIyBDT05GSUdfSVAxMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lHQiBpcyBub3Qgc2V0CisjIENPTkZJR19OUzgzODIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBTUFDSEkgaXMgbm90IHNldAorIyBDT05GSUdfWUVMTE9XRklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1I4MTY5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJUzE5MCBpcyBub3Qgc2V0CisjIENPTkZJR19TS0dFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NLWTIgaXMgbm90IHNldAorIyBDT05GSUdfVklBX1ZFTE9DSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJR09OMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTlgyIGlzIG5vdCBzZXQKK0NPTkZJR19HSUFORkFSPXkKKyMgQ09ORklHX01WNjQzWFhfRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX1FMQTNYWFggaXMgbm90IHNldAorIyBDT05GSUdfQVRMMSBpcyBub3Qgc2V0CisjIENPTkZJR19BVEwxRSBpcyBub3Qgc2V0CisjIENPTkZJR19KTUUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKK0NPTkZJR19QUFA9bQorQ09ORklHX1BQUF9NVUxUSUxJTks9eQorQ09ORklHX1BQUF9GSUxURVI9eQorQ09ORklHX1BQUF9BU1lOQz1tCitDT05GSUdfUFBQX1NZTkNfVFRZPW0KK0NPTkZJR19QUFBfREVGTEFURT1tCitDT05GSUdfUFBQX0JTRENPTVA9bQorIyBDT05GSUdfUFBQX01QUEUgaXMgbm90IHNldAorQ09ORklHX1BQUE9FPW0KKyMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKK0NPTkZJR19TTElQPW0KK0NPTkZJR19TTElQX0NPTVBSRVNTRUQ9eQorQ09ORklHX1NMSEM9bQorQ09ORklHX1NMSVBfU01BUlQ9eQorQ09ORklHX1NMSVBfTU9ERV9TTElQNj15CisjIENPTkZJR19ORVRfRkMgaXMgbm90IHNldAorQ09ORklHX05FVENPTlNPTEU9eQorIyBDT05GSUdfTkVUQ09OU09MRV9EWU5BTUlDIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRQT0xMPXkKK0NPTkZJR19ORVRQT0xMX1RSQVA9eQorQ09ORklHX05FVF9QT0xMX0NPTlRST0xMRVI9eQorIyBDT05GSUdfSVNETiBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORSBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19JTlBVVD15CisjIENPTkZJR19JTlBVVF9GRl9NRU1MRVNTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPTExERVYgaXMgbm90IHNldAorCisjCisjIFVzZXJsYW5kIGludGVyZmFjZXMKKyMKK0NPTkZJR19JTlBVVF9NT1VTRURFVj15CitDT05GSUdfSU5QVVRfTU9VU0VERVZfUFNBVVg9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1NDUkVFTl9YPTEwMjQKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWT03NjgKKyMgQ09ORklHX0lOUFVUX0pPWURFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkRFViBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9FVkJVRyBpcyBub3Qgc2V0CisKKyMKKyMgSW5wdXQgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX0lOUFVUX0tFWUJPQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX01PVVNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0pPWVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1RBQkxFVCBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UT1VDSFNDUkVFTiBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9NSVNDIGlzIG5vdCBzZXQKKworIworIyBIYXJkd2FyZSBJL08gcG9ydHMKKyMKKyMgQ09ORklHX1NFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfODI1MF9QQ0kgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF84MjUwX05SX1VBUlRTPTIKK0NPTkZJR19TRVJJQUxfODI1MF9SVU5USU1FX1VBUlRTPTIKKyMgQ09ORklHX1NFUklBTF84MjUwX0VYVEVOREVEIGlzIG5vdCBzZXQKKworIworIyBOb24tODI1MCBzZXJpYWwgcG9ydCBzdXBwb3J0CisjCisjIENPTkZJR19TRVJJQUxfVUFSVExJVEUgaXMgbm90IHNldAorQ09ORklHX1NFUklBTF9DT1JFPXkKK0NPTkZJR19TRVJJQUxfQ09SRV9DT05TT0xFPXkKKyMgQ09ORklHX1NFUklBTF9KU00gaXMgbm90IHNldAorIyBDT05GSUdfU0VSSUFMX09GX1BMQVRGT1JNIGlzIG5vdCBzZXQKK0NPTkZJR19VTklYOThfUFRZUz15CisjIENPTkZJR19ERVZQVFNfTVVMVElQTEVfSU5TVEFOQ0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xFR0FDWV9QVFlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CitDT05GSUdfSFdfUkFORE9NPXkKK0NPTkZJR19OVlJBTT15CisjIENPTkZJR19SMzk2NCBpcyBub3Qgc2V0CisjIENPTkZJR19BUFBMSUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19SQVdfRFJJVkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RDR19UUE0gaXMgbm90IHNldAorQ09ORklHX0RFVlBPUlQ9eQorQ09ORklHX0kyQz15CitDT05GSUdfSTJDX0JPQVJESU5GTz15CitDT05GSUdfSTJDX0NIQVJERVY9eQorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CisKKyMKKyMgSTJDIEhhcmR3YXJlIEJ1cyBzdXBwb3J0CisjCisKKyMKKyMgUEMgU01CdXMgaG9zdCBjb250cm9sbGVyIGRyaXZlcnMKKyMKKyMgQ09ORklHX0kyQ19BTEkxNTM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTEkxNVgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ3NTYgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0FNRDgxMTEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0k4MDEgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0lTQ0ggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1BJSVg0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ORk9SQ0UyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM2MzAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1NJUzk2WCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19WSUFQUk8gaXMgbm90IHNldAorCisjCisjIEkyQyBzeXN0ZW0gYnVzIGRyaXZlcnMgKG1vc3RseSBlbWJlZGRlZCAvIHN5c3RlbS1vbi1jaGlwKQorIworIyBDT05GSUdfSTJDX0dQSU8gaXMgbm90IHNldAorQ09ORklHX0kyQ19NUEM9eQorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKK0NPTkZJR19EUzE2ODI9eQorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTc0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BDRjg1NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0E5NTM5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUENGODU5MSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDY4NzUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19UU0wyNTUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19BTEdPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19ERUJVR19CVVMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfU1BJIGlzIG5vdCBzZXQKK0NPTkZJR19BUkNIX1dBTlRfT1BUSU9OQUxfR1BJT0xJQj15CitDT05GSUdfQVJDSF9SRVFVSVJFX0dQSU9MSUI9eQorQ09ORklHX0dQSU9MSUI9eQorQ09ORklHX0dQSU9fU1lTRlM9eQorCisjCisjIE1lbW9yeSBtYXBwZWQgR1BJTyBleHBhbmRlcnM6CisjCisjIENPTkZJR19HUElPX1hJTElOWCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIEdQSU8gZXhwYW5kZXJzOgorIworIyBDT05GSUdfR1BJT19NQVg3MzJYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dQSU9fUENBOTUzWCBpcyBub3Qgc2V0CisjIENPTkZJR19HUElPX1BDRjg1N1ggaXMgbm90IHNldAorCisjCisjIFBDSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX0dQSU9fQlQ4WFggaXMgbm90IHNldAorCisjCisjIFNQSSBHUElPIGV4cGFuZGVyczoKKyMKKyMgQ09ORklHX1cxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BPV0VSX1NVUFBMWSBpcyBub3Qgc2V0CitDT05GSUdfSFdNT049eQorIyBDT05GSUdfSFdNT05fVklEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE0IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQUQ3NDE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMjUgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE0xMDI2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURNMTAyOSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FETTEwMzEgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRE05MjQwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ2MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FEVDc0NzAgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFQ3NDczIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfQURUNzQ3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0FUWFAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRFMxNjIxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfSTVLX0FNQiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3MTgwNUYgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19GNzE4ODJGRyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0Y3NTM3NVMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19HTDUxOFNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfR0w1MjBTTSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0lUODcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTYzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE03NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNNzcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTc4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX0xNODMgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19MTTg1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTE04NyBpcyBub3Qgc2V0CitDT05GSUdfU0VOU09SU19MTTkwPXkKK0NPTkZJR19TRU5TT1JTX0xNOTI9eQorIyBDT05GSUdfU0VOU09SU19MTTkzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTFRDNDI0NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX01BWDE2MTkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19NQVg2NjUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfUEM4NzM2MCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDODc0MjcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19TSVM1NTk1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfRE1FMTczNyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N00xIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfU01TQzQ3TTE5MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1NNU0M0N0IzOTcgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19BRFM3ODI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVEhNQzUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVklBNjg2QSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUMTIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1ZUODIzMSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc4MUQgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19XODM3OTFEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNzkyRCBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4Mzc5MyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODVUUyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4M0w3ODZORyBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1c4MzYyN0hGIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfVzgzNjI3RUhGIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OX0RFQlVHX0NISVAgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTCBpcyBub3Qgc2V0CisjIENPTkZJR19USEVSTUFMX0hXTU9OIGlzIG5vdCBzZXQKK0NPTkZJR19XQVRDSERPRz15CisjIENPTkZJR19XQVRDSERPR19OT1dBWU9VVCBpcyBub3Qgc2V0CisKKyMKKyMgV2F0Y2hkb2cgRGV2aWNlIERyaXZlcnMKKyMKKyMgQ09ORklHX1NPRlRfV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfQUxJTTcxMDFfV0RUIGlzIG5vdCBzZXQKK0NPTkZJR19HRUZfV0RUPXkKKyMgQ09ORklHXzh4eHhfV0RUIGlzIG5vdCBzZXQKKworIworIyBQQ0ktYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1BDSVBDV0FUQ0hET0cgaXMgbm90IHNldAorIyBDT05GSUdfV0RUUENJIGlzIG5vdCBzZXQKKworIworIyBVU0ItYmFzZWQgV2F0Y2hkb2cgQ2FyZHMKKyMKKyMgQ09ORklHX1VTQlBDV0FUQ0hET0cgaXMgbm90IHNldAorQ09ORklHX1NTQl9QT1NTSUJMRT15CisKKyMKKyMgU29uaWNzIFNpbGljb24gQmFja3BsYW5lCisjCisjIENPTkZJR19TU0IgaXMgbm90IHNldAorCisjCisjIE11bHRpZnVuY3Rpb24gZGV2aWNlIGRyaXZlcnMKKyMKKyMgQ09ORklHX01GRF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9TTTUwMSBpcyBub3Qgc2V0CisjIENPTkZJR19IVENfUEFTSUMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RQUzY1MDEwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RXTDQwMzBfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfVE1JTyBpcyBub3Qgc2V0CisjIENPTkZJR19QTUlDX0RBOTAzWCBpcyBub3Qgc2V0CisjIENPTkZJR19NRkRfV004NDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTgzNTBfSTJDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9QQ0Y1MDYzMyBpcyBub3Qgc2V0CisjIENPTkZJR19SRUdVTEFUT1IgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZGV2aWNlcworIworCisjCisjIE11bHRpbWVkaWEgY29yZSBzdXBwb3J0CisjCisjIENPTkZJR19WSURFT19ERVYgaXMgbm90IHNldAorIyBDT05GSUdfRFZCX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fTUVESUEgaXMgbm90IHNldAorCisjCisjIE11bHRpbWVkaWEgZHJpdmVycworIworQ09ORklHX0RBQj15CisjIENPTkZJR19VU0JfREFCVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBzdXBwb3J0CisjCisjIENPTkZJR19BR1AgaXMgbm90IHNldAorIyBDT05GSUdfRFJNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZHQVNUQVRFIGlzIG5vdCBzZXQKK0NPTkZJR19WSURFT19PVVRQVVRfQ09OVFJPTD1tCisjIENPTkZJR19GQiBpcyBub3Qgc2V0CisjIENPTkZJR19CQUNLTElHSFRfTENEX1NVUFBPUlQgaXMgbm90IHNldAorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RJU1BMQVlfU1VQUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgQ29uc29sZSBkaXNwbGF5IGRyaXZlciBzdXBwb3J0CisjCitDT05GSUdfVkdBX0NPTlNPTEU9eQorIyBDT05GSUdfVkdBQ09OX1NPRlRfU0NST0xMQkFDSyBpcyBub3Qgc2V0CitDT05GSUdfRFVNTVlfQ09OU09MRT15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CitDT05GSUdfSElEX0E0VEVDSD15CitDT05GSUdfSElEX0FQUExFPXkKK0NPTkZJR19ISURfQkVMS0lOPXkKK0NPTkZJR19ISURfQ0hFUlJZPXkKK0NPTkZJR19ISURfQ0hJQ09OWT15CitDT05GSUdfSElEX0NZUFJFU1M9eQorQ09ORklHX0hJRF9FWktFWT15CitDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfTE9HSVRFQ0g9eQorIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CisjIENPTkZJR19ISURfTlRSSUcgaXMgbm90IHNldAorQ09ORklHX0hJRF9QQU5USEVSTE9SRD15CisjIENPTkZJR19QQU5USEVSTE9SRF9GRiBpcyBub3Qgc2V0CitDT05GSUdfSElEX1BFVEFMWU5YPXkKK0NPTkZJR19ISURfU0FNU1VORz15CitDT05GSUdfSElEX1NPTlk9eQorQ09ORklHX0hJRF9TVU5QTFVTPXkKKyMgQ09ORklHX0dSRUVOQVNJQV9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19ISURfVE9QU0VFRCBpcyBub3Qgc2V0CisjIENPTkZJR19USFJVU1RNQVNURVJfRkYgaXMgbm90IHNldAorIyBDT05GSUdfWkVST1BMVVNfRkYgaXMgbm90IHNldAorQ09ORklHX1VTQl9TVVBQT1JUPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfSENEPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfT0hDST15CitDT05GSUdfVVNCX0FSQ0hfSEFTX0VIQ0k9eQorQ09ORklHX1VTQj15CisjIENPTkZJR19VU0JfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FOTk9VTkNFX05FV19ERVZJQ0VTIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIFVTQiBvcHRpb25zCisjCisjIENPTkZJR19VU0JfREVWSUNFRlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0RFVklDRV9DTEFTUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRFlOQU1JQ19NSU5PUlMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09URyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX1dISVRFTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT1RHX0JMQUNLTElTVF9IVUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfV1VTQl9DQkFGIGlzIG5vdCBzZXQKKworIworIyBVU0IgSG9zdCBDb250cm9sbGVyIERyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9DNjdYMDBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfRUhDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX0VIQ0lfUk9PVF9IVUJfVFQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfVFRfTkVXU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0VIQ0lfRlNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9FSENJX0hDRF9QUENfT0YgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKKyMgQ09ORklHX1VTQl9VSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0w4MTFfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SOEE2NjU5N19IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dIQ0lfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9IV0FfSENEIGlzIG5vdCBzZXQKKworIworIyBVU0IgRGV2aWNlIENsYXNzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9BQ00gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BSSU5URVIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dETSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVE1DIGlzIG5vdCBzZXQKKworIworIyBOT1RFOiBVU0JfU1RPUkFHRSBkZXBlbmRzIG9uIFNDU0kgYnV0IEJMS19ERVZfU0QgbWF5IGFsc28gYmUgbmVlZGVkOworIworCisjCisjIHNlZSBVU0JfU1RPUkFHRSBIZWxwIGZvciBtb3JlIGluZm9ybWF0aW9uCisjCitDT05GSUdfVVNCX1NUT1JBR0U9eQorIyBDT05GSUdfVVNCX1NUT1JBR0VfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfREFUQUZBQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9GUkVFQ09NIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0lTRDIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9VU0JBVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9TRERSMDkgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjU1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0pVTVBTSE9UIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0FMQVVEQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9PTkVUT1VDSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9LQVJNQSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9DWVBSRVNTX0FUQUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MSUJVU1VBTCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEltYWdpbmcgZGV2aWNlcworIworIyBDT05GSUdfVVNCX01EQzgwMCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTUlDUk9URUsgaXMgbm90IHNldAorCisjCisjIFVTQiBwb3J0IGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TSVNVU0JWR0EgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9UUkFOQ0VWSUJSQVRPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSU9XQVJSSU9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9JU0lHSFRGVyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVlNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9HQURHRVQgaXMgbm90IHNldAorCisjCisjIE9URyBhbmQgcmVsYXRlZCBpbmZyYXN0cnVjdHVyZQorIworIyBDT05GSUdfVVNCX0dQSU9fVkJVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VV0IgaXMgbm90IHNldAorIyBDT05GSUdfTU1DIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FTVNUSUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FV19MRURTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAorIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CisjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKK0NPTkZJR19SVENfTElCPXkKK0NPTkZJR19SVENfQ0xBU1M9eQorQ09ORklHX1JUQ19IQ1RPU1lTPXkKK0NPTkZJR19SVENfSENUT1NZU19ERVZJQ0U9InJ0YzAiCisjIENPTkZJR19SVENfREVCVUcgaXMgbm90IHNldAorCisjCisjIFJUQyBpbnRlcmZhY2VzCisjCitDT05GSUdfUlRDX0lOVEZfU1lTRlM9eQorIyBDT05GSUdfUlRDX0lOVEZfUFJPQyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0RSVl9SWDg1ODE9eQorCisjCisjIFNQSSBSVEMgZHJpdmVycworIworCisjCisjIFBsYXRmb3JtIFJUQyBkcml2ZXJzCisjCisjIENPTkZJR19SVENfRFJWX0NNT1MgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfUFBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfVUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NUQUdJTkcgaXMgbm90IHNldAorCisjCisjIEZpbGUgc3lzdGVtcworIworQ09ORklHX0VYVDJfRlM9eQorQ09ORklHX0VYVDJfRlNfWEFUVFI9eQorQ09ORklHX0VYVDJfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0VYVDJfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUMl9GU19YSVAgaXMgbm90IHNldAorQ09ORklHX0VYVDNfRlM9eQorQ09ORklHX0VYVDNfRlNfWEFUVFI9eQorQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMPXkKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GUyBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRlNfUE9TSVhfQUNMPXkKK0NPTkZJR19GSUxFX0xPQ0tJTkc9eQorIyBDT05GSUdfWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09DRlMyX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JUUkZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19ETk9USUZZPXkKK0NPTkZJR19JTk9USUZZPXkKK0NPTkZJR19JTk9USUZZX1VTRVI9eQorIyBDT05GSUdfUVVPVEEgaXMgbm90IHNldAorIyBDT05GSUdfQVVUT0ZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GUzRfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRlVTRV9GUyBpcyBub3Qgc2V0CisKKyMKKyMgQ0QtUk9NL0RWRCBGaWxlc3lzdGVtcworIworQ09ORklHX0lTTzk2NjBfRlM9eQorQ09ORklHX0pPTElFVD15CitDT05GSUdfWklTT0ZTPXkKK0NPTkZJR19VREZfRlM9eQorQ09ORklHX1VERl9OTFM9eQorCisjCisjIERPUy9GQVQvTlQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19GQVRfRlM9eQorQ09ORklHX01TRE9TX0ZTPXkKK0NPTkZJR19WRkFUX0ZTPXkKK0NPTkZJR19GQVRfREVGQVVMVF9DT0RFUEFHRT04NTAKK0NPTkZJR19GQVRfREVGQVVMVF9JT0NIQVJTRVQ9ImFzY2lpIgorIyBDT05GSUdfTlRGU19GUyBpcyBub3Qgc2V0CisKKyMKKyMgUHNldWRvIGZpbGVzeXN0ZW1zCisjCitDT05GSUdfUFJPQ19GUz15CitDT05GSUdfUFJPQ19LQ09SRT15CitDT05GSUdfUFJPQ19TWVNDVEw9eQorQ09ORklHX1BST0NfUEFHRV9NT05JVE9SPXkKK0NPTkZJR19TWVNGUz15CitDT05GSUdfVE1QRlM9eQorIyBDT05GSUdfVE1QRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hVR0VUTEJfUEFHRSBpcyBub3Qgc2V0CisjIENPTkZJR19DT05GSUdGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfTUlTQ19GSUxFU1lTVEVNUz15CisjIENPTkZJR19BREZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FGRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19KRkZTMl9GUz15CitDT05GSUdfSkZGUzJfRlNfREVCVUc9MAorQ09ORklHX0pGRlMyX0ZTX1dSSVRFQlVGRkVSPXkKKyMgQ09ORklHX0pGRlMyX0ZTX1dCVUZfVkVSSUZZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGRlMyX1NVTU1BUlkgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfRlNfWEFUVFIgaXMgbm90IHNldAorIyBDT05GSUdfSkZGUzJfQ09NUFJFU1NJT05fT1BUSU9OUyBpcyBub3Qgc2V0CitDT05GSUdfSkZGUzJfWkxJQj15CisjIENPTkZJR19KRkZTMl9MWk8gaXMgbm90IHNldAorQ09ORklHX0pGRlMyX1JUSU1FPXkKKyMgQ09ORklHX0pGRlMyX1JVQklOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorQ09ORklHX05GU19GUz15CitDT05GSUdfTkZTX1YzPXkKKyMgQ09ORklHX05GU19WM19BQ0wgaXMgbm90IHNldAorQ09ORklHX05GU19WND15CitDT05GSUdfUk9PVF9ORlM9eQorIyBDT05GSUdfTkZTRCBpcyBub3Qgc2V0CitDT05GSUdfTE9DS0Q9eQorQ09ORklHX0xPQ0tEX1Y0PXkKK0NPTkZJR19ORlNfQ09NTU9OPXkKK0NPTkZJR19TVU5SUEM9eQorQ09ORklHX1NVTlJQQ19HU1M9eQorIyBDT05GSUdfU1VOUlBDX1JFR0lTVEVSX1Y0IGlzIG5vdCBzZXQKK0NPTkZJR19SUENTRUNfR1NTX0tSQjU9eQorIyBDT05GSUdfUlBDU0VDX0dTU19TUEtNMyBpcyBub3Qgc2V0CisjIENPTkZJR19TTUJfRlMgaXMgbm90IHNldAorQ09ORklHX0NJRlM9bQorIyBDT05GSUdfQ0lGU19TVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX1dFQUtfUFdfSEFTSCBpcyBub3Qgc2V0CitDT05GSUdfQ0lGU19YQVRUUj15CitDT05GSUdfQ0lGU19QT1NJWD15CisjIENPTkZJR19DSUZTX0RFQlVHMiBpcyBub3Qgc2V0CisjIENPTkZJR19DSUZTX0VYUEVSSU1FTlRBTCBpcyBub3Qgc2V0CisjIENPTkZJR19OQ1BfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQ09EQV9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BRlNfRlMgaXMgbm90IHNldAorCisjCisjIFBhcnRpdGlvbiBUeXBlcworIworIyBDT05GSUdfUEFSVElUSU9OX0FEVkFOQ0VEIGlzIG5vdCBzZXQKK0NPTkZJR19NU0RPU19QQVJUSVRJT049eQorQ09ORklHX05MUz15CitDT05GSUdfTkxTX0RFRkFVTFQ9Imlzbzg4NTktMSIKK0NPTkZJR19OTFNfQ09ERVBBR0VfNDM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzM3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfNzc1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODUyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODU3PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYxPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODYzPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY0PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY1PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODY5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTM2PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTUwPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTMyPW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfOTQ5PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfODc0PW0KK0NPTkZJR19OTFNfSVNPODg1OV84PW0KK0NPTkZJR19OTFNfQ09ERVBBR0VfMTI1MD1tCitDT05GSUdfTkxTX0NPREVQQUdFXzEyNTE9bQorQ09ORklHX05MU19BU0NJST1tCitDT05GSUdfTkxTX0lTTzg4NTlfMT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMj1tCitDT05GSUdfTkxTX0lTTzg4NTlfMz1tCitDT05GSUdfTkxTX0lTTzg4NTlfND1tCitDT05GSUdfTkxTX0lTTzg4NTlfNT1tCitDT05GSUdfTkxTX0lTTzg4NTlfNj1tCitDT05GSUdfTkxTX0lTTzg4NTlfNz1tCitDT05GSUdfTkxTX0lTTzg4NTlfOT1tCitDT05GSUdfTkxTX0lTTzg4NTlfMTM9bQorQ09ORklHX05MU19JU084ODU5XzE0PW0KK0NPTkZJR19OTFNfSVNPODg1OV8xNT1tCitDT05GSUdfTkxTX0tPSThfUj1tCitDT05GSUdfTkxTX0tPSThfVT1tCitDT05GSUdfTkxTX1VURjg9bQorIyBDT05GSUdfRExNIGlzIG5vdCBzZXQKKworIworIyBMaWJyYXJ5IHJvdXRpbmVzCisjCitDT05GSUdfQklUUkVWRVJTRT15CitDT05GSUdfR0VORVJJQ19GSU5EX0xBU1RfQklUPXkKK0NPTkZJR19DUkNfQ0NJVFQ9eQorIyBDT05GSUdfQ1JDMTYgaXMgbm90IHNldAorQ09ORklHX0NSQ19UMTBESUY9eQorQ09ORklHX0NSQ19JVFVfVD15CitDT05GSUdfQ1JDMzI9eQorIyBDT05GSUdfQ1JDNyBpcyBub3Qgc2V0CitDT05GSUdfTElCQ1JDMzJDPXkKK0NPTkZJR19aTElCX0lORkxBVEU9eQorQ09ORklHX1pMSUJfREVGTEFURT15CitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS0VSTkVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0JVR1ZFUkJPU0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX0NQVV9TVEFMTF9ERVRFQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19MQVRFTkNZVE9QIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTF9DSEVDSz15CitDT05GSUdfSEFWRV9GVU5DVElPTl9UUkFDRVI9eQorQ09ORklHX0hBVkVfRFlOQU1JQ19GVFJBQ0U9eQorQ09ORklHX0hBVkVfRlRSQUNFX01DT1VOVF9SRUNPUkQ9eQorCisjCisjIFRyYWNlcnMKKyMKKyMgQ09ORklHX0RZTkFNSUNfUFJJTlRLX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NBTVBMRVMgaXMgbm90IHNldAorQ09ORklHX0hBVkVfQVJDSF9LR0RCPXkKK0NPTkZJR19QUklOVF9TVEFDS19ERVBUSD02NAorIyBDT05GSUdfSVJRU1RBQ0tTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FMR0FQST15CitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9eQorQ09ORklHX0NSWVBUT19BRUFEPW0KK0NPTkZJR19DUllQVE9fQUVBRDI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVI9eQorQ09ORklHX0NSWVBUT19CTEtDSVBIRVIyPXkKK0NPTkZJR19DUllQVE9fSEFTSD15CitDT05GSUdfQ1JZUFRPX0hBU0gyPXkKK0NPTkZJR19DUllQVE9fUk5HMj15CitDT05GSUdfQ1JZUFRPX01BTkFHRVI9eQorQ09ORklHX0NSWVBUT19NQU5BR0VSMj15CisjIENPTkZJR19DUllQVE9fR0YxMjhNVUwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX05VTEwgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NSWVBURCBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FVVEhFTkM9bQorIyBDT05GSUdfQ1JZUFRPX1RFU1QgaXMgbm90IHNldAorCisjCisjIEF1dGhlbnRpY2F0ZWQgRW5jcnlwdGlvbiB3aXRoIEFzc29jaWF0ZWQgRGF0YQorIworIyBDT05GSUdfQ1JZUFRPX0NDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fR0NNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19TRVFJViBpcyBub3Qgc2V0CisKKyMKKyMgQmxvY2sgbW9kZXMKKyMKK0NPTkZJR19DUllQVE9fQ0JDPXkKKyMgQ09ORklHX0NSWVBUT19DVFIgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NUUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRUNCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MUlcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1BDQkMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworQ09ORklHX0NSWVBUT19ITUFDPW0KKyMgQ09ORklHX0NSWVBUT19YQ0JDIGlzIG5vdCBzZXQKKworIworIyBEaWdlc3QKKyMKK0NPTkZJR19DUllQVE9fQ1JDMzJDPXkKKyMgQ09ORklHX0NSWVBUT19NRDQgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19NRDU9eQorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPW0KKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BUkM0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19CTE9XRklTSCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FNRUxMSUEgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBU1Q1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNiBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0RFUz15CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKK0NPTkZJR19DUllQVE9fREVGTEFURT1tCisjIENPTkZJR19DUllQVE9fTFpPIGlzIG5vdCBzZXQKKworIworIyBSYW5kb20gTnVtYmVyIEdlbmVyYXRpb24KKyMKKyMgQ09ORklHX0NSWVBUT19BTlNJX0NQUk5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19IVyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfQ0xPQ0sgaXMgbm90IHNldAorIyBDT05GSUdfVklSVFVBTElaQVRJT04gaXMgbm90IHNldApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYW1pZ2FvbmVfZGVmY29uZmlnIGIvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvYW1pZ2FvbmVfZGVmY29uZmlnCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI2M2NjMzgKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9hbWlnYW9uZV9kZWZjb25maWcKQEAgLTAsMCArMSwxNjM2IEBACisjCisjIEF1dG9tYXRpY2FsbHkgZ2VuZXJhdGVkIG1ha2UgY29uZmlnOiBkb24ndCBlZGl0CisjIExpbnV4IGtlcm5lbCB2ZXJzaW9uOiAyLjYuMjktcmMzCisjIFN1biBGZWIgIDEgMTQ6MjI6NDIgMjAwOQorIworIyBDT05GSUdfUFBDNjQgaXMgbm90IHNldAorCisjCisjIFByb2Nlc3NvciBzdXBwb3J0CisjCitDT05GSUdfNnh4PXkKKyMgQ09ORklHX1BQQ184NXh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184eHggaXMgbm90IHNldAorIyBDT05GSUdfNDB4IGlzIG5vdCBzZXQKKyMgQ09ORklHXzQ0eCBpcyBub3Qgc2V0CisjIENPTkZJR19FMjAwIGlzIG5vdCBzZXQKK0NPTkZJR19QUENfRlBVPXkKK0NPTkZJR19BTFRJVkVDPXkKK0NPTkZJR19QUENfU1REX01NVT15CitDT05GSUdfUFBDX1NURF9NTVVfMzI9eQorIyBDT05GSUdfUFBDX01NX1NMSUNFUyBpcyBub3Qgc2V0CisjIENPTkZJR19TTVAgaXMgbm90IHNldAorQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRT15CitDT05GSUdfQ0hFQ0tfQ0FDSEVfQ09IRVJFTkNZPXkKK0NPTkZJR19QUEMzMj15CitDT05GSUdfV09SRF9TSVpFPTMyCisjIENPTkZJR19BUkNIX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19NTVU9eQorQ09ORklHX0dFTkVSSUNfQ01PU19VUERBVEU9eQorQ09ORklHX0dFTkVSSUNfVElNRT15CitDT05GSUdfR0VORVJJQ19USU1FX1ZTWVNDQUxMPXkKK0NPTkZJR19HRU5FUklDX0NMT0NLRVZFTlRTPXkKK0NPTkZJR19HRU5FUklDX0hBUkRJUlFTPXkKKyMgQ09ORklHX0hBVkVfU0VUVVBfUEVSX0NQVV9BUkVBIGlzIG5vdCBzZXQKK0NPTkZJR19JUlFfUEVSX0NQVT15CitDT05GSUdfU1RBQ0tUUkFDRV9TVVBQT1JUPXkKK0NPTkZJR19IQVZFX0xBVEVOQ1lUT1BfU1VQUE9SVD15CitDT05GSUdfTE9DS0RFUF9TVVBQT1JUPXkKK0NPTkZJR19SV1NFTV9YQ0hHQUREX0FMR09SSVRITT15CitDT05GSUdfQVJDSF9IQVNfSUxPRzJfVTMyPXkKK0NPTkZJR19HRU5FUklDX0hXRUlHSFQ9eQorQ09ORklHX0dFTkVSSUNfQ0FMSUJSQVRFX0RFTEFZPXkKK0NPTkZJR19HRU5FUklDX0ZJTkRfTkVYVF9CSVQ9eQorIyBDT05GSUdfQVJDSF9OT19WSVJUX1RPX0JVUyBpcyBub3Qgc2V0CitDT05GSUdfUFBDPXkKK0NPTkZJR19FQVJMWV9QUklOVEs9eQorQ09ORklHX0dFTkVSSUNfTlZSQU09eQorQ09ORklHX1NDSEVEX09NSVRfRlJBTUVfUE9JTlRFUj15CitDT05GSUdfQVJDSF9NQVlfSEFWRV9QQ19GREM9eQorQ09ORklHX1BQQ19PRj15CitDT05GSUdfT0Y9eQorQ09ORklHX1BQQ19VREJHXzE2NTUwPXkKKyMgQ09ORklHX0dFTkVSSUNfVEJTWU5DIGlzIG5vdCBzZXQKK0NPTkZJR19BVURJVF9BUkNIPXkKK0NPTkZJR19HRU5FUklDX0JVRz15CitDT05GSUdfREVGQVVMVF9VSU1BR0U9eQorIyBDT05GSUdfUFBDX0RDUl9OQVRJVkUgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0RDUl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19ERUZDT05GSUdfTElTVD0iL2xpYi9tb2R1bGVzLyRVTkFNRV9SRUxFQVNFLy5jb25maWciCisKKyMKKyMgR2VuZXJhbCBzZXR1cAorIworQ09ORklHX0VYUEVSSU1FTlRBTD15CitDT05GSUdfQlJPS0VOX09OX1NNUD15CitDT05GSUdfSU5JVF9FTlZfQVJHX0xJTUlUPTMyCitDT05GSUdfTE9DQUxWRVJTSU9OPSIiCisjIENPTkZJR19MT0NBTFZFUlNJT05fQVVUTyBpcyBub3Qgc2V0CitDT05GSUdfU1dBUD15CitDT05GSUdfU1lTVklQQz15CitDT05GSUdfU1lTVklQQ19TWVNDVEw9eQorQ09ORklHX1BPU0lYX01RVUVVRT15CisjIENPTkZJR19CU0RfUFJPQ0VTU19BQ0NUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RBU0tTVEFUUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVURJVCBpcyBub3Qgc2V0CisKKyMKKyMgUkNVIFN1YnN5c3RlbQorIworQ09ORklHX0NMQVNTSUNfUkNVPXkKKyMgQ09ORklHX1RSRUVfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSRUVfUkNVX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BSRUVNUFRfUkNVX1RSQUNFIGlzIG5vdCBzZXQKK0NPTkZJR19JS0NPTkZJRz15CitDT05GSUdfSUtDT05GSUdfUFJPQz15CitDT05GSUdfTE9HX0JVRl9TSElGVD0xNQorIyBDT05GSUdfR1JPVVBfU0NIRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ0dST1VQUyBpcyBub3Qgc2V0CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRD15CitDT05GSUdfU1lTRlNfREVQUkVDQVRFRF9WMj15CisjIENPTkZJR19SRUxBWSBpcyBub3Qgc2V0CitDT05GSUdfTkFNRVNQQUNFUz15CisjIENPTkZJR19VVFNfTlMgaXMgbm90IHNldAorIyBDT05GSUdfSVBDX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTRVJfTlMgaXMgbm90IHNldAorIyBDT05GSUdfUElEX05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9OUyBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9JTklUUkQ9eQorQ09ORklHX0lOSVRSQU1GU19TT1VSQ0U9IiIKK0NPTkZJR19DQ19PUFRJTUlaRV9GT1JfU0laRT15CitDT05GSUdfU1lTQ1RMPXkKKyMgQ09ORklHX0VNQkVEREVEIGlzIG5vdCBzZXQKK0NPTkZJR19TWVNDVExfU1lTQ0FMTD15CitDT05GSUdfS0FMTFNZTVM9eQorIyBDT05GSUdfS0FMTFNZTVNfQUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tBTExTWU1TX0VYVFJBX1BBU1MgaXMgbm90IHNldAorQ09ORklHX0hPVFBMVUc9eQorQ09ORklHX1BSSU5USz15CitDT05GSUdfQlVHPXkKK0NPTkZJR19FTEZfQ09SRT15CitDT05GSUdfUENTUEtSX1BMQVRGT1JNPXkKKyMgQ09ORklHX0NPTVBBVF9CUksgaXMgbm90IHNldAorQ09ORklHX0JBU0VfRlVMTD15CitDT05GSUdfRlVURVg9eQorQ09ORklHX0FOT05fSU5PREVTPXkKK0NPTkZJR19FUE9MTD15CitDT05GSUdfU0lHTkFMRkQ9eQorQ09ORklHX1RJTUVSRkQ9eQorQ09ORklHX0VWRU5URkQ9eQorQ09ORklHX1NITUVNPXkKK0NPTkZJR19BSU89eQorQ09ORklHX1ZNX0VWRU5UX0NPVU5URVJTPXkKK0NPTkZJR19QQ0lfUVVJUktTPXkKK0NPTkZJR19TTFVCX0RFQlVHPXkKKyMgQ09ORklHX1NMQUIgaXMgbm90IHNldAorQ09ORklHX1NMVUI9eQorIyBDT05GSUdfU0xPQiBpcyBub3Qgc2V0CisjIENPTkZJR19QUk9GSUxJTkcgaXMgbm90IHNldAorQ09ORklHX0hBVkVfT1BST0ZJTEU9eQorIyBDT05GSUdfS1BST0JFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9FRkZJQ0lFTlRfVU5BTElHTkVEX0FDQ0VTUz15CitDT05GSUdfSEFWRV9JT1JFTUFQX1BST1Q9eQorQ09ORklHX0hBVkVfS1BST0JFUz15CitDT05GSUdfSEFWRV9LUkVUUFJPQkVTPXkKK0NPTkZJR19IQVZFX0FSQ0hfVFJBQ0VIT09LPXkKKyMgQ09ORklHX0hBVkVfR0VORVJJQ19ETUFfQ09IRVJFTlQgaXMgbm90IHNldAorQ09ORklHX1NMQUJJTkZPPXkKK0NPTkZJR19SVF9NVVRFWEVTPXkKK0NPTkZJR19CQVNFX1NNQUxMPTAKK0NPTkZJR19NT0RVTEVTPXkKKyMgQ09ORklHX01PRFVMRV9GT1JDRV9MT0FEIGlzIG5vdCBzZXQKK0NPTkZJR19NT0RVTEVfVU5MT0FEPXkKK0NPTkZJR19NT0RVTEVfRk9SQ0VfVU5MT0FEPXkKKyMgQ09ORklHX01PRFZFUlNJT05TIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PRFVMRV9TUkNWRVJTSU9OX0FMTCBpcyBub3Qgc2V0CitDT05GSUdfQkxPQ0s9eQorQ09ORklHX0xCRD15CisjIENPTkZJR19CTEtfREVWX0lPX1RSQUNFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQlNHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSU5URUdSSVRZIGlzIG5vdCBzZXQKKworIworIyBJTyBTY2hlZHVsZXJzCisjCitDT05GSUdfSU9TQ0hFRF9OT09QPXkKK0NPTkZJR19JT1NDSEVEX0FTPXkKK0NPTkZJR19JT1NDSEVEX0RFQURMSU5FPXkKK0NPTkZJR19JT1NDSEVEX0NGUT15CitDT05GSUdfREVGQVVMVF9BUz15CisjIENPTkZJR19ERUZBVUxUX0RFQURMSU5FIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfQ0ZRIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFRkFVTFRfTk9PUCBpcyBub3Qgc2V0CitDT05GSUdfREVGQVVMVF9JT1NDSEVEPSJhbnRpY2lwYXRvcnkiCisjIENPTkZJR19GUkVFWkVSIGlzIG5vdCBzZXQKKworIworIyBQbGF0Zm9ybSBzdXBwb3J0CisjCitDT05GSUdfUFBDX01VTFRJUExBVEZPUk09eQorQ09ORklHX0NMQVNTSUMzMj15CisjIENPTkZJR19QUENfQ0hSUCBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM1MTIxX0FEUyBpcyBub3Qgc2V0CisjIENPTkZJR19NUEM1MTIxX0dFTkVSSUMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX01QQzUyeHggaXMgbm90IHNldAorIyBDT05GSUdfUFBDX1BNQUMgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTEwgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0NFTExfTkFUSVZFIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ184Mnh4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1BRMkFEUyBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODN4eCBpcyBub3Qgc2V0CisjIENPTkZJR19QUENfODZ4eCBpcyBub3Qgc2V0CisjIENPTkZJR19FTUJFRERFRDZ4eCBpcyBub3Qgc2V0CitDT05GSUdfQU1JR0FPTkU9eQorIyBDT05GSUdfSVBJQyBpcyBub3Qgc2V0CisjIENPTkZJR19NUElDIGlzIG5vdCBzZXQKKyMgQ09ORklHX01QSUNfV0VJUkQgaXMgbm90IHNldAorQ09ORklHX1BQQ19JODI1OT15CisjIENPTkZJR19QUENfUlRBUyBpcyBub3Qgc2V0CisjIENPTkZJR19NTUlPX05WUkFNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19NUEMxMDYgaXMgbm90IHNldAorIyBDT05GSUdfUFBDXzk3MF9OQVAgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0lORElSRUNUX0lPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dFTkVSSUNfSU9NQVAgaXMgbm90IHNldAorIyBDT05GSUdfQ1BVX0ZSRVEgaXMgbm90IHNldAorIyBDT05GSUdfVEFVIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZTTF9VTEkxNTc1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NJTVBMRV9HUElPIGlzIG5vdCBzZXQKKworIworIyBLZXJuZWwgb3B0aW9ucworIworQ09ORklHX0hJR0hNRU09eQorQ09ORklHX1RJQ0tfT05FU0hPVD15CitDT05GSUdfTk9fSFo9eQorQ09ORklHX0hJR0hfUkVTX1RJTUVSUz15CitDT05GSUdfR0VORVJJQ19DTE9DS0VWRU5UU19CVUlMRD15CisjIENPTkZJR19IWl8xMDAgaXMgbm90IHNldAorQ09ORklHX0haXzI1MD15CisjIENPTkZJR19IWl8zMDAgaXMgbm90IHNldAorIyBDT05GSUdfSFpfMTAwMCBpcyBub3Qgc2V0CitDT05GSUdfSFo9MjUwCitDT05GSUdfU0NIRURfSFJUSUNLPXkKK0NPTkZJR19QUkVFTVBUX05PTkU9eQorIyBDT05GSUdfUFJFRU1QVF9WT0xVTlRBUlkgaXMgbm90IHNldAorIyBDT05GSUdfUFJFRU1QVCBpcyBub3Qgc2V0CitDT05GSUdfQklORk1UX0VMRj15CisjIENPTkZJR19DT1JFX0RVTVBfREVGQVVMVF9FTEZfSEVBREVSUyBpcyBub3Qgc2V0CisjIENPTkZJR19IQVZFX0FPVVQgaXMgbm90IHNldAorQ09ORklHX0JJTkZNVF9NSVNDPXkKKyMgQ09ORklHX0lPTU1VX0hFTFBFUiBpcyBub3Qgc2V0CitDT05GSUdfUFBDX05FRURfRE1BX1NZTkNfT1BTPXkKK0NPTkZJR19BUkNIX0VOQUJMRV9NRU1PUllfSE9UUExVRz15CitDT05GSUdfQVJDSF9IQVNfV0FMS19NRU1PUlk9eQorQ09ORklHX0FSQ0hfRU5BQkxFX01FTU9SWV9IT1RSRU1PVkU9eQorIyBDT05GSUdfS0VYRUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JBU0hfRFVNUCBpcyBub3Qgc2V0CitDT05GSUdfQVJDSF9GTEFUTUVNX0VOQUJMRT15CitDT05GSUdfQVJDSF9QT1BVTEFURVNfTk9ERV9NQVA9eQorQ09ORklHX1NFTEVDVF9NRU1PUllfTU9ERUw9eQorQ09ORklHX0ZMQVRNRU1fTUFOVUFMPXkKKyMgQ09ORklHX0RJU0NPTlRJR01FTV9NQU5VQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1BBUlNFTUVNX01BTlVBTCBpcyBub3Qgc2V0CitDT05GSUdfRkxBVE1FTT15CitDT05GSUdfRkxBVF9OT0RFX01FTV9NQVA9eQorQ09ORklHX1BBR0VGTEFHU19FWFRFTkRFRD15CitDT05GSUdfU1BMSVRfUFRMT0NLX0NQVVM9NAorIyBDT05GSUdfTUlHUkFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BIWVNfQUREUl9UXzY0QklUIGlzIG5vdCBzZXQKK0NPTkZJR19aT05FX0RNQV9GTEFHPTEKK0NPTkZJR19CT1VOQ0U9eQorQ09ORklHX1ZJUlRfVE9fQlVTPXkKK0NPTkZJR19VTkVWSUNUQUJMRV9MUlU9eQorQ09ORklHX1BQQ180S19QQUdFUz15CisjIENPTkZJR19QUENfMTZLX1BBR0VTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ182NEtfUEFHRVMgaXMgbm90IHNldAorQ09ORklHX0ZPUkNFX01BWF9aT05FT1JERVI9MTEKK0NPTkZJR19QUk9DX0RFVklDRVRSRUU9eQorIyBDT05GSUdfQ01ETElORV9CT09MIGlzIG5vdCBzZXQKK0NPTkZJR19FWFRSQV9UQVJHRVRTPSIiCisjIENPTkZJR19QTSBpcyBub3Qgc2V0CitDT05GSUdfU0VDQ09NUD15CitDT05GSUdfSVNBX0RNQV9BUEk9eQorCisjCisjIEJ1cyBvcHRpb25zCisjCitDT05GSUdfWk9ORV9ETUE9eQorQ09ORklHX0dFTkVSSUNfSVNBX0RNQT15CitDT05GSUdfUFBDX0lORElSRUNUX1BDST15CitDT05GSUdfUENJPXkKK0NPTkZJR19QQ0lfRE9NQUlOUz15CitDT05GSUdfUENJX1NZU0NBTEw9eQorIyBDT05GSUdfUENJRVBPUlRCVVMgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfU1VQUE9SVFNfTVNJPXkKKyMgQ09ORklHX1BDSV9NU0kgaXMgbm90IHNldAorIyBDT05GSUdfUENJX0xFR0FDWSBpcyBub3Qgc2V0CisjIENPTkZJR19QQ0lfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfUENJX1NUVUIgaXMgbm90IHNldAorIyBDT05GSUdfUENDQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hPVFBMVUdfUENJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hBU19SQVBJRElPIGlzIG5vdCBzZXQKKworIworIyBBZHZhbmNlZCBzZXR1cAorIworIyBDT05GSUdfQURWQU5DRURfT1BUSU9OUyBpcyBub3Qgc2V0CisKKyMKKyMgRGVmYXVsdCBzZXR0aW5ncyBmb3IgYWR2YW5jZWQgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSB1c2VkCisjCitDT05GSUdfTE9XTUVNX1NJWkU9MHgzMDAwMDAwMAorQ09ORklHX1BBR0VfT0ZGU0VUPTB4YzAwMDAwMDAKK0NPTkZJR19LRVJORUxfU1RBUlQ9MHhjMDAwMDAwMAorQ09ORklHX1BIWVNJQ0FMX1NUQVJUPTB4MDAwMDAwMDAKK0NPTkZJR19UQVNLX1NJWkU9MHhjMDAwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQ9MHhmZjEwMDAwMAorQ09ORklHX0NPTlNJU1RFTlRfU0laRT0weDAwMjAwMDAwCitDT05GSUdfTkVUPXkKKworIworIyBOZXR3b3JraW5nIG9wdGlvbnMKKyMKK0NPTkZJR19DT01QQVRfTkVUX0RFVl9PUFM9eQorQ09ORklHX1BBQ0tFVD15CisjIENPTkZJR19QQUNLRVRfTU1BUCBpcyBub3Qgc2V0CitDT05GSUdfVU5JWD15CisjIENPTkZJR19ORVRfS0VZIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUPXkKK0NPTkZJR19JUF9NVUxUSUNBU1Q9eQorIyBDT05GSUdfSVBfQURWQU5DRURfUk9VVEVSIGlzIG5vdCBzZXQKK0NPTkZJR19JUF9GSUJfSEFTSD15CisjIENPTkZJR19JUF9QTlAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQSVAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUX0lQR1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQX01ST1VURSBpcyBub3Qgc2V0CisjIENPTkZJR19BUlBEIGlzIG5vdCBzZXQKK0NPTkZJR19TWU5fQ09PS0lFUz15CisjIENPTkZJR19JTkVUX0FIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfRVNQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfSVBDT01QIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9UVU5ORUwgaXMgbm90IHNldAorIyBDT05GSUdfSU5FVF9YRlJNX01PREVfVFJBTlNQT1JUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfWEZSTV9NT0RFX1RVTk5FTCBpcyBub3Qgc2V0CisjIENPTkZJR19JTkVUX1hGUk1fTU9ERV9CRUVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lORVRfTFJPIGlzIG5vdCBzZXQKK0NPTkZJR19JTkVUX0RJQUc9eQorQ09ORklHX0lORVRfVENQX0RJQUc9eQorIyBDT05GSUdfVENQX0NPTkdfQURWQU5DRUQgaXMgbm90IHNldAorQ09ORklHX1RDUF9DT05HX0NVQklDPXkKK0NPTkZJR19ERUZBVUxUX1RDUF9DT05HPSJjdWJpYyIKKyMgQ09ORklHX1RDUF9NRDVTSUcgaXMgbm90IHNldAorIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRXT1JLX1NFQ01BUksgaXMgbm90IHNldAorQ09ORklHX05FVEZJTFRFUj15CisjIENPTkZJR19ORVRGSUxURVJfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX0FEVkFOQ0VEIGlzIG5vdCBzZXQKKworIworIyBDb3JlIE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfTkVURklMVEVSX05FVExJTks9bQorQ09ORklHX05FVEZJTFRFUl9ORVRMSU5LX0xPRz1tCitDT05GSUdfTkZfQ09OTlRSQUNLPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfRlRQPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfSVJDPW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfU0lQPW0KK0NPTkZJR19ORl9DVF9ORVRMSU5LPW0KK0NPTkZJR19ORVRGSUxURVJfWFRBQkxFUz1tCisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX01BUksgaXMgbm90IHNldAorIyBDT05GSUdfTkVURklMVEVSX1hUX1RBUkdFVF9ORkxPRyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfVEFSR0VUX1RDUE1TUyBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRGSUxURVJfWFRfTUFUQ0hfQ09OTlRSQUNLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9NQVJLIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVEZJTFRFUl9YVF9NQVRDSF9TVEFURSBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9WUyBpcyBub3Qgc2V0CisKKyMKKyMgSVA6IE5ldGZpbHRlciBDb25maWd1cmF0aW9uCisjCitDT05GSUdfTkZfREVGUkFHX0lQVjQ9bQorQ09ORklHX05GX0NPTk5UUkFDS19JUFY0PW0KK0NPTkZJR19ORl9DT05OVFJBQ0tfUFJPQ19DT01QQVQ9eQorQ09ORklHX0lQX05GX0lQVEFCTEVTPW0KK0NPTkZJR19JUF9ORl9GSUxURVI9bQorQ09ORklHX0lQX05GX1RBUkdFVF9SRUpFQ1Q9bQorQ09ORklHX0lQX05GX1RBUkdFVF9MT0c9bQorIyBDT05GSUdfSVBfTkZfVEFSR0VUX1VMT0cgaXMgbm90IHNldAorQ09ORklHX05GX05BVD1tCitDT05GSUdfTkZfTkFUX05FRURFRD15CitDT05GSUdfSVBfTkZfVEFSR0VUX01BU1FVRVJBREU9bQorQ09ORklHX05GX05BVF9GVFA9bQorQ09ORklHX05GX05BVF9JUkM9bQorIyBDT05GSUdfTkZfTkFUX1RGVFAgaXMgbm90IHNldAorIyBDT05GSUdfTkZfTkFUX0FNQU5EQSBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9OQVRfUFBUUCBpcyBub3Qgc2V0CisjIENPTkZJR19ORl9OQVRfSDMyMyBpcyBub3Qgc2V0CitDT05GSUdfTkZfTkFUX1NJUD1tCisjIENPTkZJR19JUF9ORl9NQU5HTEUgaXMgbm90IHNldAorIyBDT05GSUdfSVBfRENDUCBpcyBub3Qgc2V0CisjIENPTkZJR19JUF9TQ1RQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJUEMgaXMgbm90IHNldAorIyBDT05GSUdfQVRNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JSSURHRSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfRFNBIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZMQU5fODAyMVEgaXMgbm90IHNldAorIyBDT05GSUdfREVDTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xMQzIgaXMgbm90IHNldAorIyBDT05GSUdfSVBYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQUxLIGlzIG5vdCBzZXQKKyMgQ09ORklHX1gyNSBpcyBub3Qgc2V0CisjIENPTkZJR19MQVBCIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VDT05FVCBpcyBub3Qgc2V0CisjIENPTkZJR19XQU5fUk9VVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF9TQ0hFRCBpcyBub3Qgc2V0CisjIENPTkZJR19EQ0IgaXMgbm90IHNldAorCisjCisjIE5ldHdvcmsgdGVzdGluZworIworIyBDT05GSUdfTkVUX1BLVEdFTiBpcyBub3Qgc2V0CisjIENPTkZJR19IQU1SQURJTyBpcyBub3Qgc2V0CisjIENPTkZJR19DQU4gaXMgbm90IHNldAorIyBDT05GSUdfSVJEQSBpcyBub3Qgc2V0CisjIENPTkZJR19CVCBpcyBub3Qgc2V0CisjIENPTkZJR19BRl9SWFJQQyBpcyBub3Qgc2V0CisjIENPTkZJR19QSE9ORVQgaXMgbm90IHNldAorIyBDT05GSUdfV0lSRUxFU1MgaXMgbm90IHNldAorIyBDT05GSUdfV0lNQVggaXMgbm90IHNldAorIyBDT05GSUdfUkZLSUxMIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVF85UCBpcyBub3Qgc2V0CisKKyMKKyMgRGV2aWNlIERyaXZlcnMKKyMKKworIworIyBHZW5lcmljIERyaXZlciBPcHRpb25zCisjCitDT05GSUdfVUVWRU5UX0hFTFBFUl9QQVRIPSIvc2Jpbi9ob3RwbHVnIgorIyBDT05GSUdfU1RBTkRBTE9ORSBpcyBub3Qgc2V0CitDT05GSUdfUFJFVkVOVF9GSVJNV0FSRV9CVUlMRD15CitDT05GSUdfRldfTE9BREVSPXkKK0NPTkZJR19GSVJNV0FSRV9JTl9LRVJORUw9eQorQ09ORklHX0VYVFJBX0ZJUk1XQVJFPSIiCisjIENPTkZJR19ERUJVR19EUklWRVIgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfREVWUkVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NZU19IWVBFUlZJU09SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTk5FQ1RPUiBpcyBub3Qgc2V0CisjIENPTkZJR19NVEQgaXMgbm90IHNldAorQ09ORklHX09GX0RFVklDRT15CitDT05GSUdfT0ZfSTJDPXkKK0NPTkZJR19QQVJQT1JUPXkKK0NPTkZJR19QQVJQT1JUX1BDPXkKKyMgQ09ORklHX1BBUlBPUlRfU0VSSUFMIGlzIG5vdCBzZXQKK0NPTkZJR19QQVJQT1JUX1BDX0ZJRk89eQorIyBDT05GSUdfUEFSUE9SVF9QQ19TVVBFUklPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlRfR1NDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BBUlBPUlRfQVg4ODc5NiBpcyBub3Qgc2V0CisjIENPTkZJR19QQVJQT1JUXzEyODQgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVY9eQorQ09ORklHX0JMS19ERVZfRkQ9eQorIyBDT05GSUdfUEFSSURFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19DUFFfREEgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0NQUV9DSVNTX0RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfREFDOTYwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfVU1FTSBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0NPV19DT01NT04gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfTE9PUD15CisjIENPTkZJR19CTEtfREVWX0NSWVBUT0xPT1AgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OQkQgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9TWDggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9VQiBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9SQU09eQorQ09ORklHX0JMS19ERVZfUkFNX0NPVU5UPTE2CitDT05GSUdfQkxLX0RFVl9SQU1fU0laRT00MDk2CisjIENPTkZJR19CTEtfREVWX1hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19DRFJPTV9QS1RDRFZEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQV9PVkVSX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0hEIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0RFVklDRVM9eQorIyBDT05GSUdfUEhBTlRPTSBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfSU9DNCBpcyBub3Qgc2V0CisjIENPTkZJR19USUZNX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSUNTOTMyUzQwMSBpcyBub3Qgc2V0CisjIENPTkZJR19FTkNMT1NVUkVfU0VSVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfSFBfSUxPIGlzIG5vdCBzZXQKKyMgQ09ORklHX0MyUE9SVCBpcyBub3Qgc2V0CisKKyMKKyMgRUVQUk9NIHN1cHBvcnQKKyMKKyMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0VFUFJPTV9MRUdBQ1kgaXMgbm90IHNldAorIyBDT05GSUdfRUVQUk9NXzkzQ1g2IGlzIG5vdCBzZXQKK0NPTkZJR19IQVZFX0lERT15CitDT05GSUdfSURFPXkKKworIworIyBQbGVhc2Ugc2VlIERvY3VtZW50YXRpb24vaWRlL2lkZS50eHQgZm9yIGhlbHAvaW5mbyBvbiBJREUgZHJpdmVzCisjCitDT05GSUdfSURFX1RJTUlOR1M9eQorQ09ORklHX0lERV9BVEFQST15CisjIENPTkZJR19CTEtfREVWX0lERV9TQVRBIGlzIG5vdCBzZXQKK0NPTkZJR19JREVfR0Q9eQorQ09ORklHX0lERV9HRF9BVEE9eQorIyBDT05GSUdfSURFX0dEX0FUQVBJIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERUNEPXkKK0NPTkZJR19CTEtfREVWX0lERUNEX1ZFUkJPU0VfRVJST1JTPXkKKyMgQ09ORklHX0JMS19ERVZfSURFVEFQRSBpcyBub3Qgc2V0CisjIENPTkZJR19JREVfVEFTS19JT0NUTCBpcyBub3Qgc2V0CitDT05GSUdfSURFX1BST0NfRlM9eQorCisjCisjIElERSBjaGlwc2V0IHN1cHBvcnQvYnVnZml4ZXMKKyMKKyMgQ09ORklHX0JMS19ERVZfUExBVEZPUk0gaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRj15CisKKyMKKyMgUENJIElERSBjaGlwc2V0cyBzdXBwb3J0CisjCitDT05GSUdfQkxLX0RFVl9JREVQQ0k9eQorIyBDT05GSUdfSURFUENJX1BDSUJVU19PUkRFUiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX09GRkJPQVJEIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0dFTkVSSUM9eQorIyBDT05GSUdfQkxLX0RFVl9PUFRJNjIxIGlzIG5vdCBzZXQKK0NPTkZJR19CTEtfREVWX0lERURNQV9QQ0k9eQorIyBDT05GSUdfQkxLX0RFVl9BRUM2MlhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX0FNRDc0WFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9DTUQ2NFggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUklGTEVYIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfQ1M1NTMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSFBUMzY2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfSk1JQ1JPTiBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1NDMTIwMCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWX1BJSVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgxNzIgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMTMgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9JVDgyMVggaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9OUzg3NDE1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfT0xEIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfUERDMjAyWFhfTkVXIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU1ZXS1MgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfU0lJTUFHRT15CisjIENPTkZJR19CTEtfREVWX1NMODJDMTA1IGlzIG5vdCBzZXQKKyMgQ09ORklHX0JMS19ERVZfU0xDOTBFNjYgaXMgbm90IHNldAorIyBDT05GSUdfQkxLX0RFVl9UUk0yOTAgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfVklBODJDWFhYPXkKKyMgQ09ORklHX0JMS19ERVZfVEM4NkMwMDEgaXMgbm90IHNldAorQ09ORklHX0JMS19ERVZfSURFRE1BPXkKKworIworIyBTQ1NJIGRldmljZSBzdXBwb3J0CisjCisjIENPTkZJR19SQUlEX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJPXkKK0NPTkZJR19TQ1NJX0RNQT15CisjIENPTkZJR19TQ1NJX1RHVCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX05FVExJTksgaXMgbm90IHNldAorQ09ORklHX1NDU0lfUFJPQ19GUz15CisKKyMKKyMgU0NTSSBzdXBwb3J0IHR5cGUgKGRpc2ssIHRhcGUsIENELVJPTSkKKyMKK0NPTkZJR19CTEtfREVWX1NEPXkKK0NPTkZJR19DSFJfREVWX1NUPXkKKyMgQ09ORklHX0NIUl9ERVZfT1NTVCBpcyBub3Qgc2V0CitDT05GSUdfQkxLX0RFVl9TUj15CitDT05GSUdfQkxLX0RFVl9TUl9WRU5ET1I9eQorQ09ORklHX0NIUl9ERVZfU0c9eQorIyBDT05GSUdfQ0hSX0RFVl9TQ0ggaXMgbm90IHNldAorCisjCisjIFNvbWUgU0NTSSBkZXZpY2VzIChlLmcuIENEIGp1a2Vib3gpIHN1cHBvcnQgbXVsdGlwbGUgTFVOcworIworIyBDT05GSUdfU0NTSV9NVUxUSV9MVU4gaXMgbm90IHNldAorQ09ORklHX1NDU0lfQ09OU1RBTlRTPXkKKyMgQ09ORklHX1NDU0lfTE9HR0lORyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NDQU5fQVNZTkMgaXMgbm90IHNldAorQ09ORklHX1NDU0lfV0FJVF9TQ0FOPW0KKworIworIyBTQ1NJIFRyYW5zcG9ydHMKKyMKK0NPTkZJR19TQ1NJX1NQSV9BVFRSUz15CisjIENPTkZJR19TQ1NJX0ZDX0FUVFJTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfSVNDU0lfQVRUUlMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9TQVNfTElCU0FTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfU1JQX0FUVFJTIGlzIG5vdCBzZXQKK0NPTkZJR19TQ1NJX0xPV0xFVkVMPXkKKyMgQ09ORklHX0lTQ1NJX1RDUCBpcyBub3Qgc2V0CisjIENPTkZJR19CTEtfREVWXzNXX1hYWFhfUkFJRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJXzNXXzlYWFggaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BQ0FSRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FBQ1JBSUQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3WFhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDN1hYWF9PTEQgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BSUM3OVhYIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfQUlDOTRYWCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RQVF9JMk8gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9BRFZBTlNZUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0FSQ01TUiBpcyBub3Qgc2V0CisjIENPTkZJR19NRUdBUkFJRF9ORVdHRU4gaXMgbm90IHNldAorIyBDT05GSUdfTUVHQVJBSURfTEVHQUNZIGlzIG5vdCBzZXQKKyMgQ09ORklHX01FR0FSQUlEX1NBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0hQVElPUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0JVU0xPR0lDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xJQkZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZDT0UgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ETVgzMTkxRCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0VBVEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9GVVRVUkVfRE9NQUlOIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfR0RUSCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lQUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSVRJTyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0lOSUExMDAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9QUEEgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9JTU0gaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9NVlNBUyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NURVggaXMgbm90IHNldAorQ09ORklHX1NDU0lfU1lNNTNDOFhYXzI9eQorQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RNQV9BRERSRVNTSU5HX01PREU9MAorQ09ORklHX1NDU0lfU1lNNTNDOFhYX0RFRkFVTFRfVEFHUz0xNgorQ09ORklHX1NDU0lfU1lNNTNDOFhYX01BWF9UQUdTPTY0CisjIENPTkZJR19TQ1NJX1NZTTUzQzhYWF9NTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfUUxPR0lDXzEyODAgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfRkMgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9RTEFfSVNDU0kgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9MUEZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTV4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfREMzOTBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDU0lfTlNQMzIgaXMgbm90IHNldAorIyBDT05GSUdfU0NTSV9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX1NSUCBpcyBub3Qgc2V0CisjIENPTkZJR19TQ1NJX0RIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUQSBpcyBub3Qgc2V0CisjIENPTkZJR19NRCBpcyBub3Qgc2V0CisjIENPTkZJR19GVVNJT04gaXMgbm90IHNldAorCisjCisjIElFRUUgMTM5NCAoRmlyZVdpcmUpIHN1cHBvcnQKKyMKKworIworIyBFbmFibGUgb25seSBvbmUgb2YgdGhlIHR3byBzdGFja3MsIHVubGVzcyB5b3Uga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcKKyMKKyMgQ09ORklHX0ZJUkVXSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lFRUUxMzk0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyTyBpcyBub3Qgc2V0CisjIENPTkZJR19NQUNJTlRPU0hfRFJJVkVSUyBpcyBub3Qgc2V0CitDT05GSUdfTkVUREVWSUNFUz15CisjIENPTkZJR19EVU1NWSBpcyBub3Qgc2V0CisjIENPTkZJR19CT05ESU5HIGlzIG5vdCBzZXQKKyMgQ09ORklHX01BQ1ZMQU4gaXMgbm90IHNldAorIyBDT05GSUdfRVFVQUxJWkVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RVTiBpcyBub3Qgc2V0CisjIENPTkZJR19WRVRIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FSQ05FVCBpcyBub3Qgc2V0CitDT05GSUdfUEhZTElCPXkKKworIworIyBNSUkgUEhZIGRldmljZSBkcml2ZXJzCisjCisjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JST0FEQ09NX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19JQ1BMVVNfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFQUxURUtfUEhZIGlzIG5vdCBzZXQKKyMgQ09ORklHX05BVElPTkFMX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19TVEUxMFhQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xTSV9FVDEwMTFDX1BIWSBpcyBub3Qgc2V0CisjIENPTkZJR19GSVhFRF9QSFkgaXMgbm90IHNldAorIyBDT05GSUdfTURJT19CSVRCQU5HIGlzIG5vdCBzZXQKK0NPTkZJR19ORVRfRVRIRVJORVQ9eQorQ09ORklHX01JST15CisjIENPTkZJR19IQVBQWU1FQUwgaXMgbm90IHNldAorIyBDT05GSUdfU1VOR0VNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NBU1NJTkkgaXMgbm90IHNldAorQ09ORklHX05FVF9WRU5ET1JfM0NPTT15CitDT05GSUdfVk9SVEVYPXkKKyMgQ09ORklHX1RZUEhPT04gaXMgbm90IHNldAorIyBDT05GSUdfTkVUX1RVTElQIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hQMTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19aTUlJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19SR01JSSBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfVEFIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19FTUFDNCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTk9fRkxPV19DVFJMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lCTV9ORVdfRU1BQ19NQUxfQ0xSX0lDSU5UU1RBVCBpcyBub3Qgc2V0CisjIENPTkZJR19JQk1fTkVXX0VNQUNfTUFMX0NPTU1PTl9FUlIgaXMgbm90IHNldAorQ09ORklHX05FVF9QQ0k9eQorIyBDT05GSUdfUENORVQzMiBpcyBub3Qgc2V0CisjIENPTkZJR19BTUQ4MTExX0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19BREFQVEVDX1NUQVJGSVJFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0I0NCBpcyBub3Qgc2V0CisjIENPTkZJR19GT1JDRURFVEggaXMgbm90IHNldAorIyBDT05GSUdfRTEwMCBpcyBub3Qgc2V0CisjIENPTkZJR19GRUFMTlggaXMgbm90IHNldAorIyBDT05GSUdfTkFUU0VNSSBpcyBub3Qgc2V0CisjIENPTkZJR19ORTJLX1BDSSBpcyBub3Qgc2V0CitDT05GSUdfODEzOUNQPXkKK0NPTkZJR184MTM5VE9PPXkKK0NPTkZJR184MTM5VE9PX1BJTz15CisjIENPTkZJR184MTM5VE9PX1RVTkVfVFdJU1RFUiBpcyBub3Qgc2V0CisjIENPTkZJR184MTM5VE9PXzgxMjkgaXMgbm90IHNldAorIyBDT05GSUdfODEzOV9PTERfUlhfUkVTRVQgaXMgbm90IHNldAorIyBDT05GSUdfUjYwNDAgaXMgbm90IHNldAorIyBDT05GSUdfU0lTOTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VQSUMxMDAgaXMgbm90IHNldAorIyBDT05GSUdfU01TQzk0MjAgaXMgbm90IHNldAorIyBDT05GSUdfU1VOREFOQ0UgaXMgbm90IHNldAorIyBDT05GSUdfVExBTiBpcyBub3Qgc2V0CisjIENPTkZJR19WSUFfUkhJTkUgaXMgbm90IHNldAorIyBDT05GSUdfU0M5MjAzMSBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9DS0VUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FUTDIgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAgaXMgbm90IHNldAorIyBDT05GSUdfTkVUREVWXzEwMDAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RSIGlzIG5vdCBzZXQKKworIworIyBXaXJlbGVzcyBMQU4KKyMKKyMgQ09ORklHX1dMQU5fUFJFODAyMTEgaXMgbm90IHNldAorIyBDT05GSUdfV0xBTl84MDIxMSBpcyBub3Qgc2V0CisjIENPTkZJR19JV0xXSUZJX0xFRFMgaXMgbm90IHNldAorCisjCisjIEVuYWJsZSBXaU1BWCAoTmV0d29ya2luZyBvcHRpb25zKSB0byBzZWUgdGhlIFdpTUFYIGRyaXZlcnMKKyMKKworIworIyBVU0IgTmV0d29yayBBZGFwdGVycworIworIyBDT05GSUdfVVNCX0NBVEMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0tBV0VUSCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUEVHQVNVUyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUlRMODE1MCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVVNCTkVUIGlzIG5vdCBzZXQKKyMgQ09ORklHX1dBTiBpcyBub3Qgc2V0CisjIENPTkZJR19GRERJIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hJUFBJIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BMSVAgaXMgbm90IHNldAorQ09ORklHX1BQUD1tCitDT05GSUdfUFBQX01VTFRJTElOSz15CitDT05GSUdfUFBQX0ZJTFRFUj15CitDT05GSUdfUFBQX0FTWU5DPW0KK0NPTkZJR19QUFBfU1lOQ19UVFk9bQorQ09ORklHX1BQUF9ERUZMQVRFPW0KK0NPTkZJR19QUFBfQlNEQ09NUD1tCitDT05GSUdfUFBQX01QUEU9bQorQ09ORklHX1BQUE9FPW0KKyMgQ09ORklHX1BQUE9MMlRQIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NMSVAgaXMgbm90IHNldAorQ09ORklHX1NMSEM9bQorIyBDT05GSUdfTkVUX0ZDIGlzIG5vdCBzZXQKKyMgQ09ORklHX05FVENPTlNPTEUgaXMgbm90IHNldAorIyBDT05GSUdfTkVUUE9MTCBpcyBub3Qgc2V0CisjIENPTkZJR19ORVRfUE9MTF9DT05UUk9MTEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lTRE4gaXMgbm90IHNldAorIyBDT05GSUdfUEhPTkUgaXMgbm90IHNldAorCisjCisjIElucHV0IGRldmljZSBzdXBwb3J0CisjCitDT05GSUdfSU5QVVQ9eQorIyBDT05GSUdfSU5QVVRfRkZfTUVNTEVTUyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9QT0xMREVWIGlzIG5vdCBzZXQKKworIworIyBVc2VybGFuZCBpbnRlcmZhY2VzCisjCitDT05GSUdfSU5QVVRfTU9VU0VERVY9eQorQ09ORklHX0lOUFVUX01PVVNFREVWX1BTQVVYPXkKK0NPTkZJR19JTlBVVF9NT1VTRURFVl9TQ1JFRU5fWD0xMDI0CitDT05GSUdfSU5QVVRfTU9VU0VERVZfU0NSRUVOX1k9NzY4CisjIENPTkZJR19JTlBVVF9KT1lERVYgaXMgbm90IHNldAorQ09ORklHX0lOUFVUX0VWREVWPXkKKyMgQ09ORklHX0lOUFVUX0VWQlVHIGlzIG5vdCBzZXQKKworIworIyBJbnB1dCBEZXZpY2UgRHJpdmVycworIworQ09ORklHX0lOUFVUX0tFWUJPQVJEPXkKK0NPTkZJR19LRVlCT0FSRF9BVEtCRD15CisjIENPTkZJR19LRVlCT0FSRF9TVU5LQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTEtLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfWFRLQkQgaXMgbm90IHNldAorIyBDT05GSUdfS0VZQk9BUkRfTkVXVE9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0tFWUJPQVJEX1NUT1dBV0FZIGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9NT1VTRT15CitDT05GSUdfTU9VU0VfUFMyPXkKK0NPTkZJR19NT1VTRV9QUzJfQUxQUz15CitDT05GSUdfTU9VU0VfUFMyX0xPR0lQUzJQUD15CitDT05GSUdfTU9VU0VfUFMyX1NZTkFQVElDUz15CitDT05GSUdfTU9VU0VfUFMyX0xJRkVCT09LPXkKK0NPTkZJR19NT1VTRV9QUzJfVFJBQ0tQT0lOVD15CisjIENPTkZJR19NT1VTRV9QUzJfRUxBTlRFQ0ggaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfUFMyX1RPVUNIS0lUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX1NFUklBTCBpcyBub3Qgc2V0CisjIENPTkZJR19NT1VTRV9BUFBMRVRPVUNIIGlzIG5vdCBzZXQKKyMgQ09ORklHX01PVVNFX0JDTTU5NzQgaXMgbm90IHNldAorIyBDT05GSUdfTU9VU0VfVlNYWFhBQSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9KT1lTVElDSyBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9UQUJMRVQgaXMgbm90IHNldAorIyBDT05GSUdfSU5QVVRfVE9VQ0hTQ1JFRU4gaXMgbm90IHNldAorQ09ORklHX0lOUFVUX01JU0M9eQorQ09ORklHX0lOUFVUX1BDU1BLUj15CisjIENPTkZJR19JTlBVVF9BVElfUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0FUSV9SRU1PVEUyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0tFWVNQQU5fUkVNT1RFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX1BPV0VSTUFURSBpcyBub3Qgc2V0CisjIENPTkZJR19JTlBVVF9ZRUFMSU5LIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lOUFVUX0NNMTA5IGlzIG5vdCBzZXQKK0NPTkZJR19JTlBVVF9VSU5QVVQ9eQorCisjCisjIEhhcmR3YXJlIEkvTyBwb3J0cworIworQ09ORklHX1NFUklPPXkKK0NPTkZJR19TRVJJT19JODA0Mj15CitDT05GSUdfU0VSSU9fU0VSUE9SVD15CisjIENPTkZJR19TRVJJT19QQVJLQkQgaXMgbm90IHNldAorIyBDT05GSUdfU0VSSU9fUENJUFMyIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJT19MSUJQUzI9eQorIyBDT05GSUdfU0VSSU9fUkFXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklPX1hJTElOWF9YUFNfUFMyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0dBTUVQT1JUIGlzIG5vdCBzZXQKKworIworIyBDaGFyYWN0ZXIgZGV2aWNlcworIworQ09ORklHX1ZUPXkKK0NPTkZJR19DT05TT0xFX1RSQU5TTEFUSU9OUz15CitDT05GSUdfVlRfQ09OU09MRT15CitDT05GSUdfSFdfQ09OU09MRT15CisjIENPTkZJR19WVF9IV19DT05TT0xFX0JJTkRJTkcgaXMgbm90IHNldAorQ09ORklHX0RFVktNRU09eQorIyBDT05GSUdfU0VSSUFMX05PTlNUQU5EQVJEIGlzIG5vdCBzZXQKKyMgQ09ORklHX05PWk9NSSBpcyBub3Qgc2V0CisKKyMKKyMgU2VyaWFsIGRyaXZlcnMKKyMKK0NPTkZJR19TRVJJQUxfODI1MD15CitDT05GSUdfU0VSSUFMXzgyNTBfQ09OU09MRT15CitDT05GSUdfU0VSSUFMXzgyNTBfUENJPXkKK0NPTkZJR19TRVJJQUxfODI1MF9OUl9VQVJUUz00CitDT05GSUdfU0VSSUFMXzgyNTBfUlVOVElNRV9VQVJUUz00CisjIENPTkZJR19TRVJJQUxfODI1MF9FWFRFTkRFRCBpcyBub3Qgc2V0CisKKyMKKyMgTm9uLTgyNTAgc2VyaWFsIHBvcnQgc3VwcG9ydAorIworIyBDT05GSUdfU0VSSUFMX1VBUlRMSVRFIGlzIG5vdCBzZXQKK0NPTkZJR19TRVJJQUxfQ09SRT15CitDT05GSUdfU0VSSUFMX0NPUkVfQ09OU09MRT15CisjIENPTkZJR19TRVJJQUxfSlNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFUklBTF9PRl9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfVU5JWDk4X1BUWVM9eQorIyBDT05GSUdfREVWUFRTX01VTFRJUExFX0lOU1RBTkNFUyBpcyBub3Qgc2V0CitDT05GSUdfTEVHQUNZX1BUWVM9eQorQ09ORklHX0xFR0FDWV9QVFlfQ09VTlQ9MjU2CisjIENPTkZJR19QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQREVWIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hWQ19VREJHIGlzIG5vdCBzZXQKKyMgQ09ORklHX0lQTUlfSEFORExFUiBpcyBub3Qgc2V0CisjIENPTkZJR19IV19SQU5ET00gaXMgbm90IHNldAorIyBDT05GSUdfTlZSQU0gaXMgbm90IHNldAorIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAorIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAorIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CisjIENPTkZJR19UQ0dfVFBNIGlzIG5vdCBzZXQKK0NPTkZJR19ERVZQT1JUPXkKK0NPTkZJR19JMkM9eQorQ09ORklHX0kyQ19CT0FSRElORk89eQorIyBDT05GSUdfSTJDX0NIQVJERVYgaXMgbm90IHNldAorQ09ORklHX0kyQ19IRUxQRVJfQVVUTz15CitDT05GSUdfSTJDX0FMR09CSVQ9eQorCisjCisjIEkyQyBIYXJkd2FyZSBCdXMgc3VwcG9ydAorIworCisjCisjIFBDIFNNQnVzIGhvc3QgY29udHJvbGxlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfQUxJMTUzNSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTU2MyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQUxJMTVYMyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfQU1ENzU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19BTUQ4MTExIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JODAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19JU0NIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19QSUlYNCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfTkZPUkNFMiBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNTU5NSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lTNjMwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TSVM5NlggaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVklBUFJPIGlzIG5vdCBzZXQKKworIworIyBJMkMgc3lzdGVtIGJ1cyBkcml2ZXJzIChtb3N0bHkgZW1iZWRkZWQgLyBzeXN0ZW0tb24tY2hpcCkKKyMKKyMgQ09ORklHX0kyQ19NUEMgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX09DT1JFUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfU0lNVEVDIGlzIG5vdCBzZXQKKworIworIyBFeHRlcm5hbCBJMkMvU01CdXMgYWRhcHRlciBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUEFSUE9SVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfUEFSUE9SVF9MSUdIVCBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfVEFPU19FVk0gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX1RJTllfVVNCIGlzIG5vdCBzZXQKKworIworIyBHcmFwaGljcyBhZGFwdGVyIEkyQy9EREMgY2hhbm5lbCBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfVk9PRE9PMyBpcyBub3Qgc2V0CisKKyMKKyMgT3RoZXIgSTJDL1NNQnVzIGJ1cyBkcml2ZXJzCisjCisjIENPTkZJR19JMkNfUENBX1BMQVRGT1JNIGlzIG5vdCBzZXQKKyMgQ09ORklHX0kyQ19TVFVCIGlzIG5vdCBzZXQKKworIworIyBNaXNjZWxsYW5lb3VzIEkyQyBDaGlwIHN1cHBvcnQKKyMKKyMgQ09ORklHX0RTMTY4MiBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDRjg1NzQgaXMgbm90IHNldAorIyBDT05GSUdfUENGODU3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1BDQTk1MzkgaXMgbm90IHNldAorIyBDT05GSUdfU0VOU09SU19QQ0Y4NTkxIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFTlNPUlNfTUFYNjg3NSBpcyBub3Qgc2V0CisjIENPTkZJR19TRU5TT1JTX1RTTDI1NTAgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0FMR08gaXMgbm90IHNldAorIyBDT05GSUdfSTJDX0RFQlVHX0JVUyBpcyBub3Qgc2V0CisjIENPTkZJR19JMkNfREVCVUdfQ0hJUCBpcyBub3Qgc2V0CisjIENPTkZJR19TUEkgaXMgbm90IHNldAorQ09ORklHX0FSQ0hfV0FOVF9PUFRJT05BTF9HUElPTElCPXkKKyMgQ09ORklHX0dQSU9MSUIgaXMgbm90IHNldAorIyBDT05GSUdfVzEgaXMgbm90IHNldAorIyBDT05GSUdfUE9XRVJfU1VQUExZIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hXTU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RIRVJNQUwgaXMgbm90IHNldAorIyBDT05GSUdfVEhFUk1BTF9IV01PTiBpcyBub3Qgc2V0CisjIENPTkZJR19XQVRDSERPRyBpcyBub3Qgc2V0CitDT05GSUdfU1NCX1BPU1NJQkxFPXkKKworIworIyBTb25pY3MgU2lsaWNvbiBCYWNrcGxhbmUKKyMKKyMgQ09ORklHX1NTQiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGlmdW5jdGlvbiBkZXZpY2UgZHJpdmVycworIworIyBDT05GSUdfTUZEX0NPUkUgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1NNNTAxIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hUQ19QQVNJQzMgaXMgbm90IHNldAorIyBDT05GSUdfVFdMNDAzMF9DT1JFIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9UTUlPIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BNSUNfREE5MDNYIGlzIG5vdCBzZXQKKyMgQ09ORklHX01GRF9XTTg0MDAgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1dNODM1MF9JMkMgaXMgbm90IHNldAorIyBDT05GSUdfTUZEX1BDRjUwNjMzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JFR1VMQVRPUiBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkZXZpY2VzCisjCisKKyMKKyMgTXVsdGltZWRpYSBjb3JlIHN1cHBvcnQKKyMKKyMgQ09ORklHX1ZJREVPX0RFViBpcyBub3Qgc2V0CisjIENPTkZJR19EVkJfQ09SRSBpcyBub3Qgc2V0CisjIENPTkZJR19WSURFT19NRURJQSBpcyBub3Qgc2V0CisKKyMKKyMgTXVsdGltZWRpYSBkcml2ZXJzCisjCisjIENPTkZJR19EQUIgaXMgbm90IHNldAorCisjCisjIEdyYXBoaWNzIHN1cHBvcnQKKyMKKyMgQ09ORklHX0FHUCBpcyBub3Qgc2V0CisjIENPTkZJR19EUk0gaXMgbm90IHNldAorIyBDT05GSUdfVkdBU1RBVEUgaXMgbm90IHNldAorIyBDT05GSUdfVklERU9fT1VUUFVUX0NPTlRST0wgaXMgbm90IHNldAorQ09ORklHX0ZCPXkKK0NPTkZJR19GSVJNV0FSRV9FRElEPXkKK0NPTkZJR19GQl9EREM9eQorIyBDT05GSUdfRkJfQk9PVF9WRVNBX1NVUFBPUlQgaXMgbm90IHNldAorQ09ORklHX0ZCX0NGQl9GSUxMUkVDVD15CitDT05GSUdfRkJfQ0ZCX0NPUFlBUkVBPXkKK0NPTkZJR19GQl9DRkJfSU1BR0VCTElUPXkKKyMgQ09ORklHX0ZCX0NGQl9SRVZfUElYRUxTX0lOX0JZVEUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU1lTX0ZJTExSRUNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19DT1BZQVJFQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TWVNfSU1BR0VCTElUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0ZPUkVJR05fRU5ESUFOIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NZU19GT1BTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1NWR0FMSUIgaXMgbm90IHNldAorQ09ORklHX0ZCX01BQ01PREVTPXkKK0NPTkZJR19GQl9CQUNLTElHSFQ9eQorQ09ORklHX0ZCX01PREVfSEVMUEVSUz15CitDT05GSUdfRkJfVElMRUJMSVRUSU5HPXkKKworIworIyBGcmFtZSBidWZmZXIgaGFyZHdhcmUgZHJpdmVycworIworIyBDT05GSUdfRkJfQ0lSUlVTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1BNMiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9DWUJFUjIwMDAgaXMgbm90IHNldAorIyBDT05GSUdfRkJfT0YgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQ1Q2NTU1MCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BU0lMSUFOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9JTVNUVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WR0ExNiBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMUQxM1hYWCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9OVklESUEgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUklWQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NQVRST1ggaXMgbm90IHNldAorQ09ORklHX0ZCX1JBREVPTj15CitDT05GSUdfRkJfUkFERU9OX0kyQz15CitDT05GSUdfRkJfUkFERU9OX0JBQ0tMSUdIVD15CisjIENPTkZJR19GQl9SQURFT05fREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfRkJfQVRZMTI4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0FUWSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TMyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9TQVZBR0UgaXMgbm90IHNldAorIyBDT05GSUdfRkJfU0lTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX1ZJQSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9ORU9NQUdJQyBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9LWVJPIGlzIG5vdCBzZXQKK0NPTkZJR19GQl8zREZYPXkKKyMgQ09ORklHX0ZCXzNERlhfQUNDRUwgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVk9PRE9PMSBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9WVDg2MjMgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVFJJREVOVCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9BUksgaXMgbm90IHNldAorIyBDT05GSUdfRkJfUE0zIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZCX0NBUk1JTkUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfSUJNX0dYVDQ1MDAgaXMgbm90IHNldAorIyBDT05GSUdfRkJfVklSVFVBTCBpcyBub3Qgc2V0CisjIENPTkZJR19GQl9NRVRST05PTUUgaXMgbm90IHNldAorIyBDT05GSUdfRkJfTUI4NjJYWCBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0xDRF9TVVBQT1JUPXkKK0NPTkZJR19MQ0RfQ0xBU1NfREVWSUNFPW0KKyMgQ09ORklHX0xDRF9JTEk5MzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xDRF9QTEFURk9STSBpcyBub3Qgc2V0CitDT05GSUdfQkFDS0xJR0hUX0NMQVNTX0RFVklDRT15CitDT05GSUdfQkFDS0xJR0hUX0dFTkVSSUM9eQorCisjCisjIERpc3BsYXkgZGV2aWNlIHN1cHBvcnQKKyMKK0NPTkZJR19ESVNQTEFZX1NVUFBPUlQ9bQorCisjCisjIERpc3BsYXkgaGFyZHdhcmUgZHJpdmVycworIworCisjCisjIENvbnNvbGUgZGlzcGxheSBkcml2ZXIgc3VwcG9ydAorIworQ09ORklHX1ZHQV9DT05TT0xFPXkKKyMgQ09ORklHX1ZHQUNPTl9TT0ZUX1NDUk9MTEJBQ0sgaXMgbm90IHNldAorQ09ORklHX0RVTU1ZX0NPTlNPTEU9eQorQ09ORklHX0ZSQU1FQlVGRkVSX0NPTlNPTEU9eQorIyBDT05GSUdfRlJBTUVCVUZGRVJfQ09OU09MRV9ERVRFQ1RfUFJJTUFSWSBpcyBub3Qgc2V0CisjIENPTkZJR19GUkFNRUJVRkZFUl9DT05TT0xFX1JPVEFUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZPTlRTIGlzIG5vdCBzZXQKK0NPTkZJR19GT05UXzh4OD15CitDT05GSUdfRk9OVF84eDE2PXkKK0NPTkZJR19MT0dPPXkKK0NPTkZJR19MT0dPX0xJTlVYX01PTk89eQorQ09ORklHX0xPR09fTElOVVhfVkdBMTY9eQorQ09ORklHX0xPR09fTElOVVhfQ0xVVDIyND15CisjIENPTkZJR19TT1VORCBpcyBub3Qgc2V0CitDT05GSUdfSElEX1NVUFBPUlQ9eQorQ09ORklHX0hJRD15CisjIENPTkZJR19ISURfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfSElEUkFXIGlzIG5vdCBzZXQKKworIworIyBVU0IgSW5wdXQgRGV2aWNlcworIworQ09ORklHX1VTQl9ISUQ9eQorIyBDT05GSUdfSElEX1BJRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSElEREVWIGlzIG5vdCBzZXQKKworIworIyBTcGVjaWFsIEhJRCBkcml2ZXJzCisjCitDT05GSUdfSElEX0NPTVBBVD15CitDT05GSUdfSElEX0E0VEVDSD15CitDT05GSUdfSElEX0FQUExFPXkKK0NPTkZJR19ISURfQkVMS0lOPXkKK0NPTkZJR19ISURfQ0hFUlJZPXkKK0NPTkZJR19ISURfQ0hJQ09OWT15CitDT05GSUdfSElEX0NZUFJFU1M9eQorQ09ORklHX0hJRF9FWktFWT15CitDT05GSUdfSElEX0dZUkFUSU9OPXkKK0NPTkZJR19ISURfTE9HSVRFQ0g9eQorIyBDT05GSUdfTE9HSVRFQ0hfRkYgaXMgbm90IHNldAorIyBDT05GSUdfTE9HSVJVTUJMRVBBRDJfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9NSUNST1NPRlQ9eQorQ09ORklHX0hJRF9NT05URVJFWT15CitDT05GSUdfSElEX05UUklHPXkKK0NPTkZJR19ISURfUEFOVEhFUkxPUkQ9eQorIyBDT05GSUdfUEFOVEhFUkxPUkRfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9QRVRBTFlOWD15CitDT05GSUdfSElEX1NBTVNVTkc9eQorQ09ORklHX0hJRF9TT05ZPXkKK0NPTkZJR19ISURfU1VOUExVUz15CisjIENPTkZJR19HUkVFTkFTSUFfRkYgaXMgbm90IHNldAorQ09ORklHX0hJRF9UT1BTRUVEPXkKKyMgQ09ORklHX1RIUlVTVE1BU1RFUl9GRiBpcyBub3Qgc2V0CisjIENPTkZJR19aRVJPUExVU19GRiBpcyBub3Qgc2V0CitDT05GSUdfVVNCX1NVUFBPUlQ9eQorQ09ORklHX1VTQl9BUkNIX0hBU19IQ0Q9eQorQ09ORklHX1VTQl9BUkNIX0hBU19PSENJPXkKK0NPTkZJR19VU0JfQVJDSF9IQVNfRUhDST15CitDT05GSUdfVVNCPXkKKyMgQ09ORklHX1VTQl9ERUJVRyBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQU5OT1VOQ0VfTkVXX0RFVklDRVMgaXMgbm90IHNldAorCisjCisjIE1pc2NlbGxhbmVvdXMgVVNCIG9wdGlvbnMKKyMKK0NPTkZJR19VU0JfREVWSUNFRlM9eQorQ09ORklHX1VTQl9ERVZJQ0VfQ0xBU1M9eQorIyBDT05GSUdfVVNCX0RZTkFNSUNfTUlOT1JTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9PVEcgaXMgbm90IHNldAorQ09ORklHX1VTQl9NT049eQorIyBDT05GSUdfVVNCX1dVU0IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1dVU0JfQ0JBRiBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIEhvc3QgQ29udHJvbGxlciBEcml2ZXJzCisjCisjIENPTkZJR19VU0JfQzY3WDAwX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRUhDSV9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09YVTIxMEhQX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNQMTE2WF9IQ0QgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lTUDE3NjBfSENEIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX09IQ0lfSENEX1BQQ19PRiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfT0hDSV9CSUdfRU5ESUFOX0RFU0MgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX09IQ0lfQklHX0VORElBTl9NTUlPIGlzIG5vdCBzZXQKK0NPTkZJR19VU0JfT0hDSV9MSVRUTEVfRU5ESUFOPXkKK0NPTkZJR19VU0JfVUhDSV9IQ0Q9eQorIyBDT05GSUdfVVNCX1NMODExX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfUjhBNjY1OTdfSENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XSENJX0hDRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSFdBX0hDRCBpcyBub3Qgc2V0CisKKyMKKyMgVVNCIERldmljZSBDbGFzcyBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfQUNNIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9QUklOVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9XRE0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1RNQyBpcyBub3Qgc2V0CisKKyMKKyMgTk9URTogVVNCX1NUT1JBR0UgZGVwZW5kcyBvbiBTQ1NJIGJ1dCBCTEtfREVWX1NEIG1heSBhbHNvIGJlIG5lZWRlZDsKKyMKKworIworIyBzZWUgVVNCX1NUT1JBR0UgSGVscCBmb3IgbW9yZSBpbmZvcm1hdGlvbgorIworQ09ORklHX1VTQl9TVE9SQUdFPW0KKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RFQlVHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX0RBVEFGQUIgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfRlJFRUNPTSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9JU0QyMDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfVVNCQVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfU0REUjA5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TVE9SQUdFX1NERFI1NSBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9KVU1QU0hPVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU1RPUkFHRV9BTEFVREEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfT05FVE9VQ0ggaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfS0FSTUEgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1NUT1JBR0VfQ1lQUkVTU19BVEFDQiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTElCVVNVQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBJbWFnaW5nIGRldmljZXMKKyMKKyMgQ09ORklHX1VTQl9NREM4MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX01JQ1JPVEVLIGlzIG5vdCBzZXQKKworIworIyBVU0IgcG9ydCBkcml2ZXJzCisjCisjIENPTkZJR19VU0JfVVNTNzIwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9TRVJJQUwgaXMgbm90IHNldAorCisjCisjIFVTQiBNaXNjZWxsYW5lb3VzIGRyaXZlcnMKKyMKKyMgQ09ORklHX1VTQl9FTUk2MiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfRU1JMjYgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0FEVVRVWCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfU0VWU0VHIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9SSU81MDAgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFR09UT1dFUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfTENEIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9CRVJSWV9DSEFSR0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0xFRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQ1lQUkVTU19DWTdDNjMgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0NZVEhFUk0gaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1BISURHRVQgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lETU9VU0UgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0ZURElfRUxBTiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfQVBQTEVESVNQTEFZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VTQl9MRCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVFJBTkNFVklCUkFUT1IgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX0lPV0FSUklPUiBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfSVNJR0hURlcgaXMgbm90IHNldAorIyBDT05GSUdfVVNCX1ZTVCBpcyBub3Qgc2V0CisjIENPTkZJR19VU0JfR0FER0VUIGlzIG5vdCBzZXQKKworIworIyBPVEcgYW5kIHJlbGF0ZWQgaW5mcmFzdHJ1Y3R1cmUKKyMKKyMgQ09ORklHX1VXQiBpcyBub3Qgc2V0CisjIENPTkZJR19NTUMgaXMgbm90IHNldAorIyBDT05GSUdfTUVNU1RJQ0sgaXMgbm90IHNldAorIyBDT05GSUdfTkVXX0xFRFMgaXMgbm90IHNldAorIyBDT05GSUdfQUNDRVNTSUJJTElUWSBpcyBub3Qgc2V0CisjIENPTkZJR19JTkZJTklCQU5EIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VEQUMgaXMgbm90IHNldAorQ09ORklHX1JUQ19MSUI9eQorQ09ORklHX1JUQ19DTEFTUz15CitDT05GSUdfUlRDX0hDVE9TWVM9eQorQ09ORklHX1JUQ19IQ1RPU1lTX0RFVklDRT0icnRjMCIKKyMgQ09ORklHX1JUQ19ERUJVRyBpcyBub3Qgc2V0CisKKyMKKyMgUlRDIGludGVyZmFjZXMKKyMKK0NPTkZJR19SVENfSU5URl9TWVNGUz15CitDT05GSUdfUlRDX0lOVEZfUFJPQz15CitDT05GSUdfUlRDX0lOVEZfREVWPXkKKyMgQ09ORklHX1JUQ19JTlRGX0RFVl9VSUVfRU1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1RFU1QgaXMgbm90IHNldAorCisjCisjIEkyQyBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9EUzEzMDcgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKK0NPTkZJR19SVENfRFJWX0NNT1M9eQorIyBDT05GSUdfUlRDX0RSVl9EUzEyODYgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1MTEgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE1NTMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE3NDIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9TVEsxN1RBOCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQzNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX000OFQ1OSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0JRNDgwMiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1YzMDIwIGlzIG5vdCBzZXQKKworIworIyBvbi1DUFUgUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfUFBDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RNQURFVklDRVMgaXMgbm90IHNldAorIyBDT05GSUdfQVVYRElTUExBWSBpcyBub3Qgc2V0CisjIENPTkZJR19VSU8gaXMgbm90IHNldAorIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CisKKyMKKyMgRmlsZSBzeXN0ZW1zCisjCitDT05GSUdfRVhUMl9GUz15CisjIENPTkZJR19FWFQyX0ZTX1hBVFRSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDJfRlNfWElQIGlzIG5vdCBzZXQKK0NPTkZJR19FWFQzX0ZTPXkKK0NPTkZJR19FWFQzX0ZTX1hBVFRSPXkKKyMgQ09ORklHX0VYVDNfRlNfUE9TSVhfQUNMIGlzIG5vdCBzZXQKKyMgQ09ORklHX0VYVDNfRlNfU0VDVVJJVFkgaXMgbm90IHNldAorQ09ORklHX0VYVDRfRlM9eQorIyBDT05GSUdfRVhUNERFVl9DT01QQVQgaXMgbm90IHNldAorQ09ORklHX0VYVDRfRlNfWEFUVFI9eQorIyBDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfRVhUNF9GU19TRUNVUklUWSBpcyBub3Qgc2V0CitDT05GSUdfSkJEPXkKK0NPTkZJR19KQkQyPXkKK0NPTkZJR19GU19NQkNBQ0hFPXkKKyMgQ09ORklHX1JFSVNFUkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0pGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19GU19QT1NJWF9BQ0wgaXMgbm90IHNldAorQ09ORklHX0ZJTEVfTE9DS0lORz15CisjIENPTkZJR19YRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfR0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19PQ0ZTMl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CVFJGU19GUyBpcyBub3Qgc2V0CitDT05GSUdfRE5PVElGWT15CitDT05GSUdfSU5PVElGWT15CitDT05GSUdfSU5PVElGWV9VU0VSPXkKKyMgQ09ORklHX1FVT1RBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0FVVE9GU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19BVVRPRlM0X0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0ZVU0VfRlMgaXMgbm90IHNldAorCisjCisjIENELVJPTS9EVkQgRmlsZXN5c3RlbXMKKyMKK0NPTkZJR19JU085NjYwX0ZTPXkKKyMgQ09ORklHX0pPTElFVCBpcyBub3Qgc2V0CisjIENPTkZJR19aSVNPRlMgaXMgbm90IHNldAorIyBDT05GSUdfVURGX0ZTIGlzIG5vdCBzZXQKKworIworIyBET1MvRkFUL05UIEZpbGVzeXN0ZW1zCisjCitDT05GSUdfRkFUX0ZTPW0KK0NPTkZJR19NU0RPU19GUz1tCitDT05GSUdfVkZBVF9GUz1tCitDT05GSUdfRkFUX0RFRkFVTFRfQ09ERVBBR0U9NDM3CitDT05GSUdfRkFUX0RFRkFVTFRfSU9DSEFSU0VUPSJpc284ODU5LTEiCisjIENPTkZJR19OVEZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQc2V1ZG8gZmlsZXN5c3RlbXMKKyMKK0NPTkZJR19QUk9DX0ZTPXkKK0NPTkZJR19QUk9DX0tDT1JFPXkKK0NPTkZJR19QUk9DX1NZU0NUTD15CitDT05GSUdfUFJPQ19QQUdFX01PTklUT1I9eQorQ09ORklHX1NZU0ZTPXkKK0NPTkZJR19UTVBGUz15CisjIENPTkZJR19UTVBGU19QT1NJWF9BQ0wgaXMgbm90IHNldAorIyBDT05GSUdfSFVHRVRMQl9QQUdFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPTkZJR0ZTX0ZTIGlzIG5vdCBzZXQKK0NPTkZJR19NSVNDX0ZJTEVTWVNURU1TPXkKKyMgQ09ORklHX0FERlNfRlMgaXMgbm90IHNldAorQ09ORklHX0FGRlNfRlM9bQorIyBDT05GSUdfSEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hGU1BMVVNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQkVGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19CRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfRUZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSQU1GUyBpcyBub3Qgc2V0CisjIENPTkZJR19TUVVBU0hGUyBpcyBub3Qgc2V0CisjIENPTkZJR19WWEZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX01JTklYX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX09NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfSFBGU19GUyBpcyBub3Qgc2V0CisjIENPTkZJR19RTlg0RlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfUk9NRlNfRlMgaXMgbm90IHNldAorIyBDT05GSUdfU1lTVl9GUyBpcyBub3Qgc2V0CisjIENPTkZJR19VRlNfRlMgaXMgbm90IHNldAorQ09ORklHX05FVFdPUktfRklMRVNZU1RFTVM9eQorIyBDT05GSUdfTkZTX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX05GU0QgaXMgbm90IHNldAorIyBDT05GSUdfU01CX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NJRlMgaXMgbm90IHNldAorIyBDT05GSUdfTkNQX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREFfRlMgaXMgbm90IHNldAorIyBDT05GSUdfQUZTX0ZTIGlzIG5vdCBzZXQKKworIworIyBQYXJ0aXRpb24gVHlwZXMKKyMKK0NPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQorIyBDT05GSUdfQUNPUk5fUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX09TRl9QQVJUSVRJT04gaXMgbm90IHNldAorQ09ORklHX0FNSUdBX1BBUlRJVElPTj15CisjIENPTkZJR19BVEFSSV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfTUFDX1BBUlRJVElPTiBpcyBub3Qgc2V0CitDT05GSUdfTVNET1NfUEFSVElUSU9OPXkKKyMgQ09ORklHX0JTRF9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTUlOSVhfU1VCUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NPTEFSSVNfWDg2X1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19VTklYV0FSRV9ESVNLTEFCRUwgaXMgbm90IHNldAorIyBDT05GSUdfTERNX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TR0lfUEFSVElUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX1VMVFJJWF9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfU1VOX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19LQVJNQV9QQVJUSVRJT04gaXMgbm90IHNldAorIyBDT05GSUdfRUZJX1BBUlRJVElPTiBpcyBub3Qgc2V0CisjIENPTkZJR19TWVNWNjhfUEFSVElUSU9OIGlzIG5vdCBzZXQKK0NPTkZJR19OTFM9eQorQ09ORklHX05MU19ERUZBVUxUPSJpc284ODU5LTEiCisjIENPTkZJR19OTFNfQ09ERVBBR0VfNDM3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV83MzcgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzc3NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODUwIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NTIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg1NSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODU3IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2MSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODYyIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2NCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfODY1IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NjYgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzg2OSBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTM2IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV85NTAgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0NPREVQQUdFXzkzMiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfOTQ5IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19DT0RFUEFHRV84NzQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfOCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MCBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfQ09ERVBBR0VfMTI1MSBpcyBub3Qgc2V0CitDT05GSUdfTkxTX0FTQ0lJPXkKK0NPTkZJR19OTFNfSVNPODg1OV8xPW0KKyMgQ09ORklHX05MU19JU084ODU5XzIgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMyBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV80IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfNiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfSVNPODg1OV83IGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19JU084ODU5XzkgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTMgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTQgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0lTTzg4NTlfMTUgaXMgbm90IHNldAorIyBDT05GSUdfTkxTX0tPSThfUiBpcyBub3Qgc2V0CisjIENPTkZJR19OTFNfS09JOF9VIGlzIG5vdCBzZXQKKyMgQ09ORklHX05MU19VVEY4IGlzIG5vdCBzZXQKKyMgQ09ORklHX0RMTSBpcyBub3Qgc2V0CisKKyMKKyMgTGlicmFyeSByb3V0aW5lcworIworQ09ORklHX0JJVFJFVkVSU0U9eQorQ09ORklHX0dFTkVSSUNfRklORF9MQVNUX0JJVD15CitDT05GSUdfQ1JDX0NDSVRUPW0KK0NPTkZJR19DUkMxNj15CitDT05GSUdfQ1JDX1QxMERJRj15CisjIENPTkZJR19DUkNfSVRVX1QgaXMgbm90IHNldAorQ09ORklHX0NSQzMyPXkKKyMgQ09ORklHX0NSQzcgaXMgbm90IHNldAorIyBDT05GSUdfTElCQ1JDMzJDIGlzIG5vdCBzZXQKK0NPTkZJR19aTElCX0lORkxBVEU9bQorQ09ORklHX1pMSUJfREVGTEFURT1tCitDT05GSUdfUExJU1Q9eQorQ09ORklHX0hBU19JT01FTT15CitDT05GSUdfSEFTX0lPUE9SVD15CitDT05GSUdfSEFTX0RNQT15CitDT05GSUdfSEFWRV9MTUI9eQorCisjCisjIEtlcm5lbCBoYWNraW5nCisjCisjIENPTkZJR19QUklOVEtfVElNRSBpcyBub3Qgc2V0CitDT05GSUdfRU5BQkxFX1dBUk5fREVQUkVDQVRFRD15CitDT05GSUdfRU5BQkxFX01VU1RfQ0hFQ0s9eQorQ09ORklHX0ZSQU1FX1dBUk49MTAyNAorQ09ORklHX01BR0lDX1NZU1JRPXkKKyMgQ09ORklHX1VOVVNFRF9TWU1CT0xTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX0ZTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0hFQURFUlNfQ0hFQ0sgaXMgbm90IHNldAorQ09ORklHX0RFQlVHX0tFUk5FTD15CisjIENPTkZJR19ERUJVR19TSElSUSBpcyBub3Qgc2V0CitDT05GSUdfREVURUNUX1NPRlRMT0NLVVA9eQorIyBDT05GSUdfQk9PVFBBUkFNX1NPRlRMT0NLVVBfUEFOSUMgaXMgbm90IHNldAorQ09ORklHX0JPT1RQQVJBTV9TT0ZUTE9DS1VQX1BBTklDX1ZBTFVFPTAKK0NPTkZJR19TQ0hFRF9ERUJVRz15CisjIENPTkZJR19TQ0hFRFNUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1RJTUVSX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX09CSkVDVFMgaXMgbm90IHNldAorIyBDT05GSUdfU0xVQl9ERUJVR19PTiBpcyBub3Qgc2V0CisjIENPTkZJR19TTFVCX1NUQVRTIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1JUX01VVEVYRVMgaXMgbm90IHNldAorIyBDT05GSUdfUlRfTVVURVhfVEVTVEVSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0RFQlVHX1NQSU5MT0NLIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19NVVRFWEVTPXkKK0NPTkZJR19ERUJVR19TUElOTE9DS19TTEVFUD15CisjIENPTkZJR19ERUJVR19MT0NLSU5HX0FQSV9TRUxGVEVTVFMgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfS09CSkVDVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19ISUdITUVNIGlzIG5vdCBzZXQKK0NPTkZJR19ERUJVR19CVUdWRVJCT1NFPXkKKyMgQ09ORklHX0RFQlVHX0lORk8gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfVk0gaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfV1JJVEVDT1VOVCBpcyBub3Qgc2V0CitDT05GSUdfREVCVUdfTUVNT1JZX0lOSVQ9eQorIyBDT05GSUdfREVCVUdfTElTVCBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19TRyBpcyBub3Qgc2V0CisjIENPTkZJR19ERUJVR19OT1RJRklFUlMgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9QUklOVEtfREVMQVkgaXMgbm90IHNldAorIyBDT05GSUdfUkNVX1RPUlRVUkVfVEVTVCBpcyBub3Qgc2V0CisjIENPTkZJR19SQ1VfQ1BVX1NUQUxMX0RFVEVDVE9SIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JBQ0tUUkFDRV9TRUxGX1RFU1QgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfQkxPQ0tfRVhUX0RFVlQgaXMgbm90IHNldAorIyBDT05GSUdfRkFVTFRfSU5KRUNUSU9OIGlzIG5vdCBzZXQKKyMgQ09ORklHX0xBVEVOQ1lUT1AgaXMgbm90IHNldAorQ09ORklHX1NZU0NUTF9TWVNDQUxMX0NIRUNLPXkKK0NPTkZJR19IQVZFX0ZVTkNUSU9OX1RSQUNFUj15CitDT05GSUdfSEFWRV9EWU5BTUlDX0ZUUkFDRT15CitDT05GSUdfSEFWRV9GVFJBQ0VfTUNPVU5UX1JFQ09SRD15CisKKyMKKyMgVHJhY2VycworIworIyBDT05GSUdfRlVOQ1RJT05fVFJBQ0VSIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NDSEVEX1RSQUNFUiBpcyBub3Qgc2V0CisjIENPTkZJR19DT05URVhUX1NXSVRDSF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfQk9PVF9UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfVFJBQ0VfQlJBTkNIX1BST0ZJTElORyBpcyBub3Qgc2V0CisjIENPTkZJR19TVEFDS19UUkFDRVIgaXMgbm90IHNldAorIyBDT05GSUdfRFlOQU1JQ19QUklOVEtfREVCVUcgaXMgbm90IHNldAorIyBDT05GSUdfU0FNUExFUyBpcyBub3Qgc2V0CitDT05GSUdfSEFWRV9BUkNIX0tHREI9eQorIyBDT05GSUdfS0dEQiBpcyBub3Qgc2V0CitDT05GSUdfUFJJTlRfU1RBQ0tfREVQVEg9NjQKKyMgQ09ORklHX0RFQlVHX1NUQUNLT1ZFUkZMT1cgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfU1RBQ0tfVVNBR0UgaXMgbm90IHNldAorIyBDT05GSUdfREVCVUdfUEFHRUFMTE9DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NPREVfUEFUQ0hJTkdfU0VMRlRFU1QgaXMgbm90IHNldAorIyBDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUIGlzIG5vdCBzZXQKKyMgQ09ORklHX01TSV9CSVRNQVBfU0VMRlRFU1QgaXMgbm90IHNldAorQ09ORklHX1hNT049eQorQ09ORklHX1hNT05fREVGQVVMVD15CitDT05GSUdfWE1PTl9ESVNBU1NFTUJMWT15CitDT05GSUdfREVCVUdHRVI9eQorQ09ORklHX0lSUVNUQUNLUz15CisjIENPTkZJR19CRElfU1dJVENIIGlzIG5vdCBzZXQKKyMgQ09ORklHX0JPT1RYX1RFWFQgaXMgbm90IHNldAorIyBDT05GSUdfUFBDX0VBUkxZX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBTZWN1cml0eSBvcHRpb25zCisjCisjIENPTkZJR19LRVlTIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZIGlzIG5vdCBzZXQKKyMgQ09ORklHX1NFQ1VSSVRZRlMgaXMgbm90IHNldAorIyBDT05GSUdfU0VDVVJJVFlfRklMRV9DQVBBQklMSVRJRVMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUTz15CisKKyMKKyMgQ3J5cHRvIGNvcmUgb3IgaGVscGVyCisjCisjIENPTkZJR19DUllQVE9fRklQUyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX0FMR0FQST1tCitDT05GSUdfQ1JZUFRPX0FMR0FQSTI9bQorQ09ORklHX0NSWVBUT19BRUFEMj1tCitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUj1tCitDT05GSUdfQ1JZUFRPX0JMS0NJUEhFUjI9bQorQ09ORklHX0NSWVBUT19IQVNIPW0KK0NPTkZJR19DUllQVE9fSEFTSDI9bQorQ09ORklHX0NSWVBUT19STkcyPW0KK0NPTkZJR19DUllQVE9fTUFOQUdFUj1tCitDT05GSUdfQ1JZUFRPX01BTkFHRVIyPW0KKyMgQ09ORklHX0NSWVBUT19HRjEyOE1VTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTlVMTCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ1JZUFREIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19BVVRIRU5DIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19URVNUIGlzIG5vdCBzZXQKKworIworIyBBdXRoZW50aWNhdGVkIEVuY3J5cHRpb24gd2l0aCBBc3NvY2lhdGVkIERhdGEKKyMKKyMgQ09ORklHX0NSWVBUT19DQ00gaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0dDTSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fU0VRSVYgaXMgbm90IHNldAorCisjCisjIEJsb2NrIG1vZGVzCisjCitDT05GSUdfQ1JZUFRPX0NCQz1tCisjIENPTkZJR19DUllQVE9fQ1RSIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DVFMgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19FQ0I9bQorIyBDT05GSUdfQ1JZUFRPX0xSVyBpcyBub3Qgc2V0CitDT05GSUdfQ1JZUFRPX1BDQkM9bQorIyBDT05GSUdfQ1JZUFRPX1hUUyBpcyBub3Qgc2V0CisKKyMKKyMgSGFzaCBtb2RlcworIworIyBDT05GSUdfQ1JZUFRPX0hNQUMgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1hDQkMgaXMgbm90IHNldAorCisjCisjIERpZ2VzdAorIworIyBDT05GSUdfQ1JZUFRPX0NSQzMyQyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fTUQ0IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19NRDUgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX01JQ0hBRUxfTUlDIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQxMjggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1JNRDE2MCBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fUk1EMjU2IGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19STUQzMjAgaXMgbm90IHNldAorQ09ORklHX0NSWVBUT19TSEExPW0KKyMgQ09ORklHX0NSWVBUT19TSEEyNTYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NIQTUxMiBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVEdSMTkyIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19XUDUxMiBpcyBub3Qgc2V0CisKKyMKKyMgQ2lwaGVycworIworIyBDT05GSUdfQ1JZUFRPX0FFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQU5VQklTIGlzIG5vdCBzZXQKK0NPTkZJR19DUllQVE9fQVJDND1tCisjIENPTkZJR19DUllQVE9fQkxPV0ZJU0ggaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0NBTUVMTElBIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19DQVNUNSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fQ0FTVDYgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0RFUyBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fRkNSWVBUIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19LSEFaQUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NBTFNBMjAgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFRUQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1NFUlBFTlQgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX1RFQSBpcyBub3Qgc2V0CisjIENPTkZJR19DUllQVE9fVFdPRklTSCBpcyBub3Qgc2V0CisKKyMKKyMgQ29tcHJlc3Npb24KKyMKKyMgQ09ORklHX0NSWVBUT19ERUZMQVRFIGlzIG5vdCBzZXQKKyMgQ09ORklHX0NSWVBUT19MWk8gaXMgbm90IHNldAorCisjCisjIFJhbmRvbSBOdW1iZXIgR2VuZXJhdGlvbgorIworIyBDT05GSUdfQ1JZUFRPX0FOU0lfQ1BSTkcgaXMgbm90IHNldAorIyBDT05GSUdfQ1JZUFRPX0hXIGlzIG5vdCBzZXQKKyMgQ09ORklHX1BQQ19DTE9DSyBpcyBub3Qgc2V0CisjIENPTkZJR19WSVJUVUFMSVpBVElPTiBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9tcGM1MjAwX2RlZmNvbmZpZyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUyMDBfZGVmY29uZmlnCmluZGV4IDgxYWZjOGIuLmFmMGNkNTUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUyMDBfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL21wYzUyMDBfZGVmY29uZmlnCkBAIC0xLDcgKzEsNyBAQAogIwogIyBBdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCBtYWtlIGNvbmZpZzogZG9uJ3QgZWRpdAotIyBMaW51eCBrZXJuZWwgdmVyc2lvbjogMi42LjI5LXJjMgotIyBNb24gSmFuIDI2IDIxOjQwOjQ0IDIwMDkKKyMgTGludXgga2VybmVsIHZlcnNpb246IDIuNi4yOS1yYzMKKyMgRnJpIEZlYiAgNiAwOTo0ODo1MyAyMDA5CiAjCiAjIENPTkZJR19QUEM2NCBpcyBub3Qgc2V0CiAKQEAgLTM4OCw3ICszODgsMTAgQEAKIENPTkZJR19NVERfQ09OQ0FUPXkKIENPTkZJR19NVERfUEFSVElUSU9OUz15CiAjIENPTkZJR19NVERfVEVTVFMgaXMgbm90IHNldAotIyBDT05GSUdfTVREX1JFREJPT1RfUEFSVFMgaXMgbm90IHNldAorQ09ORklHX01URF9SRURCT09UX1BBUlRTPXkKK0NPTkZJR19NVERfUkVEQk9PVF9ESVJFQ1RPUllfQkxPQ0s9LTEKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1VOQUxMT0NBVEVEIGlzIG5vdCBzZXQKKyMgQ09ORklHX01URF9SRURCT09UX1BBUlRTX1JFQURPTkxZIGlzIG5vdCBzZXQKIENPTkZJR19NVERfQ01ETElORV9QQVJUUz15CiAjIENPTkZJR19NVERfT0ZfUEFSVFMgaXMgbm90IHNldAogIyBDT05GSUdfTVREX0FSN19QQVJUUyBpcyBub3Qgc2V0CkBAIC01MDIsNyArNTA1LDcgQEAKICMKICMgRUVQUk9NIHN1cHBvcnQKICMKLSMgQ09ORklHX0VFUFJPTV9BVDI0IGlzIG5vdCBzZXQKK0NPTkZJR19FRVBST01fQVQyND15CiAjIENPTkZJR19FRVBST01fTEVHQUNZIGlzIG5vdCBzZXQKICMgQ09ORklHX0VFUFJPTV85M0NYNiBpcyBub3Qgc2V0CiBDT05GSUdfSEFWRV9JREU9eQpAQCAtNjc4LDcgKzY4MSw3IEBACiAjIENPTkZJR19NQVJWRUxMX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19EQVZJQ09NX1BIWSBpcyBub3Qgc2V0CiAjIENPTkZJR19RU0VNSV9QSFkgaXMgbm90IHNldAotIyBDT05GSUdfTFhUX1BIWSBpcyBub3Qgc2V0CitDT05GSUdfTFhUX1BIWT15CiAjIENPTkZJR19DSUNBREFfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX1ZJVEVTU0VfUEhZIGlzIG5vdCBzZXQKICMgQ09ORklHX1NNU0NfUEhZIGlzIG5vdCBzZXQKQEAgLTgxNSw4ICs4MTgsNiBAQAogIyBDT05GSUdfSVBNSV9IQU5ETEVSIGlzIG5vdCBzZXQKICMgQ09ORklHX0hXX1JBTkRPTSBpcyBub3Qgc2V0CiAjIENPTkZJR19OVlJBTSBpcyBub3Qgc2V0Ci1DT05GSUdfR0VOX1JUQz15Ci0jIENPTkZJR19HRU5fUlRDX1ggaXMgbm90IHNldAogIyBDT05GSUdfUjM5NjQgaXMgbm90IHNldAogIyBDT05GSUdfQVBQTElDT00gaXMgbm90IHNldAogIyBDT05GSUdfUkFXX0RSSVZFUiBpcyBub3Qgc2V0CkBAIC0xMjgxLDcgKzEyODIsNjEgQEAKICMgQ09ORklHX0FDQ0VTU0lCSUxJVFkgaXMgbm90IHNldAogIyBDT05GSUdfSU5GSU5JQkFORCBpcyBub3Qgc2V0CiAjIENPTkZJR19FREFDIGlzIG5vdCBzZXQKLSMgQ09ORklHX1JUQ19DTEFTUyBpcyBub3Qgc2V0CitDT05GSUdfUlRDX0xJQj15CitDT05GSUdfUlRDX0NMQVNTPXkKK0NPTkZJR19SVENfSENUT1NZUz15CitDT05GSUdfUlRDX0hDVE9TWVNfREVWSUNFPSJydGMwIgorIyBDT05GSUdfUlRDX0RFQlVHIGlzIG5vdCBzZXQKKworIworIyBSVEMgaW50ZXJmYWNlcworIworQ09ORklHX1JUQ19JTlRGX1NZU0ZTPXkKK0NPTkZJR19SVENfSU5URl9QUk9DPXkKK0NPTkZJR19SVENfSU5URl9ERVY9eQorIyBDT05GSUdfUlRDX0lOVEZfREVWX1VJRV9FTVVMIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVEVTVCBpcyBub3Qgc2V0CisKKyMKKyMgSTJDIFJUQyBkcml2ZXJzCisjCitDT05GSUdfUlRDX0RSVl9EUzEzMDc9eQorIyBDT05GSUdfUlRDX0RSVl9EUzEzNzQgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9EUzE2NzIgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9NQVg2OTAwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUlM1QzM3MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0lTTDEyMDggaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9YMTIwNSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1BDRjg1NjMgaXMgbm90IHNldAorIyBDT05GSUdfUlRDX0RSVl9QQ0Y4NTgzIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQxVDgwIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfUzM1MzkwQSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0ZNMzEzMCBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1JYODU4MSBpcyBub3Qgc2V0CisKKyMKKyMgU1BJIFJUQyBkcml2ZXJzCisjCisKKyMKKyMgUGxhdGZvcm0gUlRDIGRyaXZlcnMKKyMKKyMgQ09ORklHX1JUQ19EUlZfQ01PUyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTI4NiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTUxMSBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTU1MyBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX0RTMTc0MiBpcyBub3Qgc2V0CisjIENPTkZJR19SVENfRFJWX1NUSzE3VEE4IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDg2IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDM1IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfTTQ4VDU5IGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfQlE0ODAyIGlzIG5vdCBzZXQKKyMgQ09ORklHX1JUQ19EUlZfVjMwMjAgaXMgbm90IHNldAorCisjCisjIG9uLUNQVSBSVEMgZHJpdmVycworIworIyBDT05GSUdfUlRDX0RSVl9QUEMgaXMgbm90IHNldAogIyBDT05GSUdfRE1BREVWSUNFUyBpcyBub3Qgc2V0CiAjIENPTkZJR19VSU8gaXMgbm90IHNldAogIyBDT05GSUdfU1RBR0lORyBpcyBub3Qgc2V0CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcgYi9hcmNoL3Bvd2VycGMvY29uZmlncy9wcGM2NF9kZWZjb25maWcKaW5kZXggODhjNjI5NS4uMjUyNDAxOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2NvbmZpZ3MvcHBjNjRfZGVmY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9jb25maWdzL3BwYzY0X2RlZmNvbmZpZwpAQCAtMjA2Nyw5ICsyMDY3LDkgQEAKIENPTkZJR19ERUJVR19TVEFDS19VU0FHRT15CiAjIENPTkZJR19ERUJVR19QQUdFQUxMT0MgaXMgbm90IHNldAogIyBDT05GSUdfSENBTExfU1RBVFMgaXMgbm90IHNldAotIyBDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVCBpcyBub3Qgc2V0Ci0jIENPTkZJR19GVFJfRklYVVBfU0VMRlRFU1QgaXMgbm90IHNldAotIyBDT05GSUdfTVNJX0JJVE1BUF9TRUxGVEVTVCBpcyBub3Qgc2V0CitDT05GSUdfQ09ERV9QQVRDSElOR19TRUxGVEVTVD15CitDT05GSUdfRlRSX0ZJWFVQX1NFTEZURVNUPXkKK0NPTkZJR19NU0lfQklUTUFQX1NFTEZURVNUPXkKIENPTkZJR19YTU9OPXkKICMgQ09ORklHX1hNT05fREVGQVVMVCBpcyBub3Qgc2V0CiBDT05GSUdfWE1PTl9ESVNBU1NFTUJMWT15CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY29kZS1wYXRjaGluZy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NvZGUtcGF0Y2hpbmcuaAppbmRleCAxMDdkOWI5Li4zN2MzMmFiYSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2NvZGUtcGF0Y2hpbmcuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY29kZS1wYXRjaGluZy5oCkBAIC0xMSw5ICsxMSw3IEBACiAgKi8KIAogI2luY2x1ZGUgPGFzbS90eXBlcy5oPgotCi0jZGVmaW5lIFBQQ19OT1BfSU5TVFIJCTB4NjAwMDAwMDAKLSNkZWZpbmUgUFBDX0xXU1lOQ19JTlNUUgkweDdjMjAwNGFjCisjaW5jbHVkZSA8YXNtL3BwYy1vcGNvZGUuaD4KIAogLyogRmxhZ3MgZm9yIGNyZWF0ZV9icmFuY2g6CiAgKiAiYiIgICA9PSBjcmVhdGVfYnJhbmNoKGFkZHIsIHRhcmdldCwgMCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vY3B1dGFibGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oCmluZGV4IDIxMTcyYmEuLjgwZjMxNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9jcHV0YWJsZS5oCkBAIC0xNDUsNiArMTQ1LDcgQEAKICNkZWZpbmUgQ1BVX0ZUUl9VU0VfVEIJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMDQwKQogI2RlZmluZSBDUFVfRlRSX0wyQ1NSCQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDA4MCkKICNkZWZpbmUgQ1BVX0ZUUl82MDEJCQlBU01fQ09OU1QoMHgwMDAwMDAwMDAwMDAwMTAwKQorI2RlZmluZSBDUFVfRlRSX0RCRUxMCQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDIwMCkKICNkZWZpbmUgQ1BVX0ZUUl9DQU5fTkFQCQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDQwMCkKICNkZWZpbmUgQ1BVX0ZUUl9MM0NSCQkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMDgwMCkKICNkZWZpbmUgQ1BVX0ZUUl9MM19ESVNBQkxFX05BUAkJQVNNX0NPTlNUKDB4MDAwMDAwMDAwMDAwMTAwMCkKQEAgLTM3NSw3ICszNzYsOCBAQAogCSAgICBDUFVfRlRSX05PRFNJU1JBTElHTiB8IENQVV9GVFJfTk9FWEVDVVRFKQogI2RlZmluZSBDUFVfRlRSU19FNTAwTUMJKENQVV9GVFJfTUFZQkVfQ0FOX0RPWkUgfCBDUFVfRlRSX1VTRV9UQiB8IFwKIAkgICAgQ1BVX0ZUUl9NQVlCRV9DQU5fTkFQIHwgQ1BVX0ZUUl9OT0RTSVNSQUxJR04gfCBcCi0JICAgIENQVV9GVFJfTDJDU1IgfCBDUFVfRlRSX0xXU1lOQyB8IENQVV9GVFJfTk9FWEVDVVRFKQorCSAgICBDUFVfRlRSX0wyQ1NSIHwgQ1BVX0ZUUl9MV1NZTkMgfCBDUFVfRlRSX05PRVhFQ1VURSB8IFwKKwkgICAgQ1BVX0ZUUl9EQkVMTCkKICNkZWZpbmUgQ1BVX0ZUUlNfR0VORVJJQ18zMgkoQ1BVX0ZUUl9DT01NT04gfCBDUFVfRlRSX05PRFNJU1JBTElHTikKIAogLyogNjQtYml0IENQVXMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kYmVsbC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2RiZWxsLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTAxMTg5YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kYmVsbC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOSBGcmVlc2NhbGUgU2VtaWNvbmR1dG9yLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbgorICogMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBwcm92aWRlcyBtYXNrcyBhbmQgb3Bjb2RlIGltYWdlcyBmb3IgdXNlIGJ5IGNvZGUgZ2VuZXJhdGlvbiwgZW11bGF0aW9uCisgKiBhbmQgZm9yIGluc3RydWN0aW9ucyB0aGF0IG9sZGVyIGFzc2VtYmxlcnMgbWlnaHQgbm90IGtub3cgYWJvdXQKKyAqLworI2lmbmRlZiBfQVNNX1BPV0VSUENfREJFTExfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfREJFTExfSAorCisjaW5jbHVkZSA8bGludXgvc21wLmg+CisjaW5jbHVkZSA8bGludXgvdGhyZWFkcy5oPgorCisjaW5jbHVkZSA8YXNtL3BwYy1vcGNvZGUuaD4KKworI2RlZmluZSBQUENfREJFTExfTVNHX0JSRENBU1QJKDB4MDQwMDAwMDApCisjZGVmaW5lIFBQQ19EQkVMTF9UWVBFKHgpCSgoKHgpICYgMHhmKSA8PCAyOCkKK2VudW0gcHBjX2RiZWxsIHsKKwlQUENfREJFTEwgPSAwLAkJLyogZG9vcmJlbGwgKi8KKwlQUENfREJFTExfQ1JJVCA9IDEsCS8qIGNyaXRpY2FsIGRvb3JiZWxsICovCisJUFBDX0dfREJFTEwgPSAyLAkvKiBndWVzdCBkb29yYmVsbCAqLworCVBQQ19HX0RCRUxMX0NSSVQgPSAzLAkvKiBndWVzdCBjcml0aWNhbCBkb29yYmVsbCAqLworCVBQQ19HX0RCRUxMX01DID0gNCwJLyogZ3Vlc3QgbWNoZWNrIGRvb3JiZWxsICovCit9OworCisjaWZkZWYgQ09ORklHX1NNUAorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZGJlbGxfc21wX21lc3NhZ2VbTlJfQ1BVU107CitleHRlcm4gdm9pZCBzbXBfZGJlbGxfbWVzc2FnZV9wYXNzKGludCB0YXJnZXQsIGludCBtc2cpOworI2VuZGlmCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBwcGNfbXNnc25kKGVudW0gcHBjX2RiZWxsIHR5cGUsIHUzMiBmbGFncywgdTMyIHRhZykKK3sKKwl1MzIgbXNnID0gUFBDX0RCRUxMX1RZUEUodHlwZSkgfCAoZmxhZ3MgJiBQUENfREJFTExfTVNHX0JSRENBU1QpIHwKKwkJCSh0YWcgJiAweDA3ZmZmZmZmKTsKKworCV9fYXNtX18gX192b2xhdGlsZV9fIChQUENfTVNHU05EKCUwKSA6IDogInIiIChtc2cpKTsKK30KKworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19EQkVMTF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCmluZGV4IDg2Y2VmN2QuLmM2OWYyYjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCkBAIC0xMDksMTggKzEwOSw4IEBACiAJICogb25seSBJU0EgRE1BIGRldmljZSB3ZSBzdXBwb3J0IGlzIHRoZSBmbG9wcHkgYW5kIHdlIGhhdmUgYSBoYWNrCiAJICogaW4gdGhlIGZsb3BweSBkcml2ZXIgZGlyZWN0bHkgdG8gZ2V0IGEgZGV2aWNlIGZvciB1cy4KIAkgKi8KLQotCWlmICh1bmxpa2VseShkZXYgPT0gTlVMTCkgfHwgZGV2LT5hcmNoZGF0YS5kbWFfb3BzID09IE5VTEwpIHsKLSNpZmRlZiBDT05GSUdfUFBDNjQKKwlpZiAodW5saWtlbHkoZGV2ID09IE5VTEwpKQogCQlyZXR1cm4gTlVMTDsKLSNlbHNlCi0JCS8qIFVzZSBkZWZhdWx0IG9uIDMyLWJpdCBpZiBkbWFfb3BzIGlzIG5vdCBzZXQgdXAgKi8KLQkJLyogVE9ETzogTG9uZyB0ZXJtLCB3ZSBzaG91bGQgZml4IGRyaXZlcnMgc28gdGhhdCBkZXYgYW5kCi0JCSAqIGFyY2hkYXRhIGRtYV9vcHMgYXJlIHNldCB1cCBmb3IgYWxsIGJ1c2VzLgotCQkgKi8KLQkJcmV0dXJuICZkbWFfZGlyZWN0X29wczsKLSNlbmRpZgotCX0KIAogCXJldHVybiBkZXYtPmFyY2hkYXRhLmRtYV9vcHM7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZWxmLmgKaW5kZXggYjU2MDBjZS4uMWE4NTZiMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2VsZi5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9lbGYuaApAQCAtOCw2ICs4LDcgQEAKICNlbmRpZgogCiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKwogI2luY2x1ZGUgPGFzbS9wdHJhY2UuaD4KICNpbmNsdWRlIDxhc20vY3B1dGFibGUuaD4KICNpbmNsdWRlIDxhc20vYXV4dmVjLmg+CkBAIC0xNzgsNyArMTc5LDggQEAKICAgIHRoZSBsb2FkZXIuICBXZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGl0IGlzIG91dCBvZiB0aGUgd2F5IG9mIHRoZSBwcm9ncmFtCiAgICB0aGF0IGl0IHdpbGwgImV4ZWMiLCBhbmQgdGhhdCB0aGVyZSBpcyBzdWZmaWNpZW50IHJvb20gZm9yIHRoZSBicmsuICAqLwogCi0jZGVmaW5lIEVMRl9FVF9EWU5fQkFTRSAgICAgICAgICgweDIwMDAwMDAwKQorZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcmFuZG9taXplX2V0X2R5bih1bnNpZ25lZCBsb25nIGJhc2UpOworI2RlZmluZSBFTEZfRVRfRFlOX0JBU0UJCShyYW5kb21pemVfZXRfZHluKDB4MjAwMDAwMDApKQogCiAvKgogICogT3VyIHJlZ2lzdGVycyBhcmUgYWx3YXlzIHVuc2lnbmVkIGxvbmdzLCB3aGV0aGVyIHdlJ3JlIGEgMzIgYml0CkBAIC0yNzAsNiArMjcyLDE0IEBACiAJCQkJICAgICAgIGludCB1c2VzX2ludGVycCk7CiAjZGVmaW5lIFZEU09fQVVYX0VOVChhLGIpIE5FV19BVVhfRU5UKGEsYik7CiAKKy8qIDFHQiBmb3IgNjRiaXQsIDhNQiBmb3IgMzJiaXQgKi8KKyNkZWZpbmUgU1RBQ0tfUk5EX01BU0sgKGlzXzMyYml0X3Rhc2soKSA/IFwKKwkoMHg3ZmYgPj4gKFBBR0VfU0hJRlQgLSAxMikpIDogXAorCSgweDNmZmZmID4+IChQQUdFX1NISUZUIC0gMTIpKSkKKworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYXJjaF9yYW5kb21pemVfYnJrKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTsKKyNkZWZpbmUgYXJjaF9yYW5kb21pemVfYnJrIGFyY2hfcmFuZG9taXplX2JyaworCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZpeG1hcC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2ZpeG1hcC5oCmluZGV4IDg0MjhiMzguLmQ2MGZkMTggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9maXhtYXAuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZml4bWFwLmgKQEAgLTYxLDcgKzYxLDcgQEAKICAqIFNvbWUgaGFyZHdhcmUgd2FudHMgdG8gZ2V0IGZpeG1hcHBlZCB3aXRob3V0IGNhY2hpbmcuCiAgKi8KICNkZWZpbmUgc2V0X2ZpeG1hcF9ub2NhY2hlKGlkeCwgcGh5cykgXAotCQlfX3NldF9maXhtYXAoaWR4LCBwaHlzLCBQQUdFX0tFUk5FTF9OT0NBQ0hFKQorCQlfX3NldF9maXhtYXAoaWR4LCBwaHlzLCBQQUdFX0tFUk5FTF9OQ0cpCiAKICNkZWZpbmUgY2xlYXJfZml4bWFwKGlkeCkgXAogCQlfX3NldF9maXhtYXAoaWR4LCAwLCBfX3BncHJvdCgwKSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mdHJhY2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9mdHJhY2UuaAppbmRleCBlNWYyYWU4Li5kZGUxMjk2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vZnRyYWNlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2Z0cmFjZS5oCkBAIC01LDcgKzUsNDQgQEAKICNkZWZpbmUgTUNPVU5UX0FERFIJCSgobG9uZykoX21jb3VudCkpCiAjZGVmaW5lIE1DT1VOVF9JTlNOX1NJWkUJNCAvKiBzaXplb2YgbWNvdW50IGNhbGwgKi8KIAotI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNpZmRlZiBfX0FTU0VNQkxZX18KKworLyogQmFzZWQgb2ZmIG9mIG9iamR1bXAgb3B0cHV0IGZyb20gZ2xpYmMgKi8KKworI2RlZmluZSBNQ09VTlRfU0FWRV9GUkFNRQkJCVwKKwlzdHd1CXIxLC00OChyMSk7CQkJXAorCXN0dwlyMywgMTIocjEpOwkJCVwKKwlzdHcJcjQsIDE2KHIxKTsJCQlcCisJc3R3CXI1LCAyMChyMSk7CQkJXAorCXN0dwlyNiwgMjQocjEpOwkJCVwKKwltZmxyCXIzOwkJCQlcCisJbHd6CXI0LCA1MihyMSk7CQkJXAorCW1mY3IJcjU7CQkJCVwKKwlzdHcJcjcsIDI4KHIxKTsJCQlcCisJc3R3CXI4LCAzMihyMSk7CQkJXAorCXN0dwlyOSwgMzYocjEpOwkJCVwKKwlzdHcJcjEwLDQwKHIxKTsJCQlcCisJc3R3CXIzLCA0NChyMSk7CQkJXAorCXN0dwlyNSwgOChyMSkKKworI2RlZmluZSBNQ09VTlRfUkVTVE9SRV9GUkFNRQkJCVwKKwlsd3oJcjYsIDgocjEpOwkJCVwKKwlsd3oJcjAsIDQ0KHIxKTsJCQlcCisJbHd6CXIzLCAxMihyMSk7CQkJXAorCW10Y3RyCXIwOwkJCQlcCisJbHd6CXI0LCAxNihyMSk7CQkJXAorCW10Y3IJcjY7CQkJCVwKKwlsd3oJcjUsIDIwKHIxKTsJCQlcCisJbHd6CXI2LCAyNChyMSk7CQkJXAorCWx3eglyMCwgNTIocjEpOwkJCVwKKwlsd3oJcjcsIDI4KHIxKTsJCQlcCisJbHd6CXI4LCAzMihyMSk7CQkJXAorCW10bHIJcjA7CQkJCVwKKwlsd3oJcjksIDM2KHIxKTsJCQlcCisJbHd6CXIxMCw0MChyMSk7CQkJXAorCWFkZGkJcjEsIHIxLCA0OAorCisjZWxzZSAvKiAhX19BU1NFTUJMWV9fICovCiBleHRlcm4gdm9pZCBfbWNvdW50KHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaGlnaG1lbS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2hpZ2htZW0uaAppbmRleCAwNGU0YTYyLi41NDUwMjhmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaGlnaG1lbS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9oaWdobWVtLmgKQEAgLTM5LDE1ICszOSwxNSBAQAogICogY2h1bmsgb2YgUkFNLgogICovCiAvKgotICogV2UgdXNlIG9uZSBmdWxsIHB0ZSB0YWJsZSB3aXRoIDRLIHBhZ2VzLiBBbmQgd2l0aCAxNksvNjRLIHBhZ2VzIHB0ZQotICogdGFibGUgY292ZXJzIGVub3VnaCBtZW1vcnkgKDMyTUIgYW5kIDUxMk1CIHJlc3AuKSB0aGF0IGJvdGggRklYTUFQCi0gKiBhbmQgUEtNQVAgY2FuIGJlIHBsYWNlZCBpbiBzaW5nbGUgcHRlIHRhYmxlLiBXZSB1c2UgMTAyNCBwYWdlcyBmb3IKLSAqIFBLTUFQIGluIGNhc2Ugb2YgMTZLLzY0SyBwYWdlcy4KKyAqIFdlIHVzZSBvbmUgZnVsbCBwdGUgdGFibGUgd2l0aCA0SyBwYWdlcy4gQW5kIHdpdGggMTZLLzY0Sy8yNTZLIHBhZ2VzIHB0ZQorICogdGFibGUgY292ZXJzIGVub3VnaCBtZW1vcnkgKDMyTUIvNTEyTUIvMkdCIHJlc3AuKSwgc28gdGhhdCBib3RoIEZJWE1BUAorICogYW5kIFBLTUFQIGNhbiBiZSBwbGFjZWQgaW4gYSBzaW5nbGUgcHRlIHRhYmxlLiBXZSB1c2UgNTEyIHBhZ2VzIGZvciBQS01BUAorICogaW4gY2FzZSBvZiAxNksvNjRLLzI1NksgcGFnZSBzaXplcy4KICAqLwogI2lmZGVmIENPTkZJR19QUENfNEtfUEFHRVMKICNkZWZpbmUgUEtNQVBfT1JERVIJUFRFX1NISUZUCiAjZWxzZQotI2RlZmluZSBQS01BUF9PUkRFUgkxMAorI2RlZmluZSBQS01BUF9PUkRFUgk5CiAjZW5kaWYKICNkZWZpbmUgTEFTVF9QS01BUAkoMSA8PCBQS01BUF9PUkRFUikKICNpZm5kZWYgQ09ORklHX1BQQ180S19QQUdFUwpAQCAtOTksNyArOTksNyBAQAogI2lmZGVmIENPTkZJR19ERUJVR19ISUdITUVNCiAJQlVHX09OKCFwdGVfbm9uZSgqKGttYXBfcHRlLWlkeCkpKTsKICNlbmRpZgotCV9fc2V0X3B0ZV9hdCgmaW5pdF9tbSwgdmFkZHIsIGttYXBfcHRlLWlkeCwgbWtfcHRlKHBhZ2UsIHByb3QpKTsKKwlfX3NldF9wdGVfYXQoJmluaXRfbW0sIHZhZGRyLCBrbWFwX3B0ZS1pZHgsIG1rX3B0ZShwYWdlLCBwcm90KSwgMSk7CiAJbG9jYWxfZmx1c2hfdGxiX3BhZ2UoTlVMTCwgdmFkZHIpOwogCiAJcmV0dXJuICh2b2lkKikgdmFkZHI7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHdfaXJxLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaHdfaXJxLmgKaW5kZXggZjc1YTVmYy4uYjdlMDM0YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2h3X2lycS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9od19pcnEuaApAQCAtMTI5LDcgKzEyOSw3IEBACiAgKiBpbnRlcnJ1cHQtcmV0cmlnZ2VyOiBzaG91bGQgd2UgaGFuZGxlIHRoaXMgdmlhIGxvc3QgaW50ZXJydXB0cyBhbmQgSVBJcwogICogb3Igc2hvdWxkIHdlIG5vdCBjYXJlIGxpa2Ugd2UgZG8gbm93ID8gLS1CZW5ILgogICovCi1zdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGU7CitzdHJ1Y3QgaXJxX2NoaXA7CiAKICNlbmRpZgkvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYJLyogX0FTTV9QT1dFUlBDX0hXX0lSUV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW8uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5oCmluZGV4IDQ5NGNkOGIuLjAwMWYyZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5oCkBAIC02MzIsNiArNjMyLDkgQEAKICAqICAgaW9yZW1hcF9mbGFncyBhbmQgY2Fubm90IGJlIGhvb2tlZCAoYnV0IGNhbiBiZSB1c2VkIGJ5IGEgaG9vayBvbiBvbmUKICAqICAgb2YgdGhlIHByZXZpb3VzIG9uZXMpCiAgKgorICogKiBfX2lvcmVtYXBfY2FsbGVyIGlzIHRoZSBzYW1lIGFzIGFib3ZlIGJ1dCB0YWtlcyBhbiBleHBsaWNpdCBjYWxsZXIKKyAqICAgcmVmZXJlbmNlIHJhdGhlciB0aGFuIHVzaW5nIF9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygwKQorICoKICAqICogX19pb3VubWFwLCBpcyB0aGUgbG93IGxldmVsIGltcGxlbWVudGF0aW9uIHVzZWQgYnkgaW91bm1hcCBhbmQgY2Fubm90CiAgKiAgIGJlIGhvb2tlZCAoYnV0IGNhbiBiZSB1c2VkIGJ5IGEgaG9vayBvbiBpb3VubWFwKQogICoKQEAgLTY0Niw2ICs2NDksOSBAQAogCiBleHRlcm4gdm9pZCBfX2lvbWVtICpfX2lvcmVtYXAocGh5c19hZGRyX3QsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKIAkJCSAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKK2V4dGVybiB2b2lkIF9faW9tZW0gKl9faW9yZW1hcF9jYWxsZXIocGh5c19hZGRyX3QsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQkgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkICpjYWxsZXIpOworCiBleHRlcm4gdm9pZCBfX2lvdW5tYXAodm9sYXRpbGUgdm9pZCBfX2lvbWVtICphZGRyKTsKIAogZXh0ZXJuIHZvaWQgX19pb21lbSAqIF9faW9yZW1hcF9hdChwaHlzX2FkZHJfdCBwYSwgdm9pZCAqZWEsCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbHBwYWNhLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbHBwYWNhLmgKaW5kZXggMjVhYWE5Ny4uNjgyMzVmNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2xwcGFjYS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9scHBhY2EuaApAQCAtOTcsNyArOTcsNyBAQAogCXU2NAlzYXZlZF9ncHI0OwkJLy8gU2F2ZWQgR1BSNCAgICAgICAgICAgICAgICAgICB4MjgteDJGCiAJdTY0CXNhdmVkX2dwcjU7CQkvLyBTYXZlZCBHUFI1ICAgICAgICAgICAgICAgICAgIHgzMC14MzcKIAotCXU4CXJlc2VydmVkNDsJCS8vIFJlc2VydmVkCQkJeDM4LXgzOAorCXU4CWR0bF9lbmFibGVfbWFzazsJLy8gRGlzcGF0Y2ggVHJhY2UgTG9nIG1hc2sJeDM4LXgzOAogCXU4CWRvbmF0ZV9kZWRpY2F0ZWRfY3B1OwkvLyBEb25hdGUgZGVkaWNhdGVkIENQVSBjeWNsZXMgIHgzOS14MzkKIAl1OAlmcHJlZ3NfaW5fdXNlOwkJLy8gRlAgcmVncyBpbiB1c2UgICAgICAgICAgICAgICB4M0EteDNBCiAJdTgJcG1jcmVnc19pbl91c2U7CQkvLyBQTUMgcmVncyBpbiB1c2UgICAgICAgICAgICAgIHgzQi14M0IKQEAgLTEzMyw4ICsxMzMsMTAgQEAKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC8vIENBQ0hFX0xJTkVfNC01IDB4MDE4MCAtIDB4MDI3RiBDb250YWlucyBQTUMgaW50ZXJydXB0IGRhdGEKIC8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLQl1MzIJcGFnZV9pbnM7CQkJLy8gQ01PIEhpbnQgLSAjIHBhZ2UgaW5zIGJ5IE9TICB4MDAteDA0Ci0JdTgJcG1jX3NhdmVfYXJlYVsyNTJdOwkvLyBQTUMgaW50ZXJydXB0IEFyZWEgICAgICAgICAgIHgwNC14RkYKKwl1MzIJcGFnZV9pbnM7CQkvLyBDTU8gSGludCAtICMgcGFnZSBpbnMgYnkgT1MgIHgwMC14MDMKKwl1OAlyZXNlcnZlZDhbMTQ4XTsJCS8vIFJlc2VydmVkICAgICAgICAgICAgICAgICAgICAgeDA0LXg5NworCXZvbGF0aWxlIHU2NCBkdGxfaWR4OwkJLy8gRGlzcGF0Y2ggVHJhY2UgTG9nIGhlYWQgaWR4CXg5OC14OUYKKwl1OAlyZXNlcnZlZDlbOTZdOwkJLy8gUmVzZXJ2ZWQgICAgICAgICAgICAgICAgICAgICB4QTAteEZGCiB9IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDB4NDAwKSkpOwogCiBleHRlcm4gc3RydWN0IGxwcGFjYSBscHBhY2FbXTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbWFjaGRlcC5oCmluZGV4IDI3NDBjNDQuLjBlZmRiMWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tYWNoZGVwLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21hY2hkZXAuaApAQCAtOTAsNyArOTAsNyBAQAogCXZvaWQJCSgqdGNlX2ZsdXNoKShzdHJ1Y3QgaW9tbXVfdGFibGUgKnRibCk7CiAKIAl2b2lkIF9faW9tZW0gKgkoKmlvcmVtYXApKHBoeXNfYWRkcl90IGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQkgICB1bnNpZ25lZCBsb25nIGZsYWdzKTsKKwkJCQkgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkICpjYWxsZXIpOwogCXZvaWQJCSgqaW91bm1hcCkodm9sYXRpbGUgdm9pZCBfX2lvbWVtICp0b2tlbik7CiAKICNpZmRlZiBDT05GSUdfUE0KQEAgLTMyNyw4ICszMjcsNiBAQAogICovCiAvKiBQcmludCBhIGJvb3QgcHJvZ3Jlc3MgbWVzc2FnZS4gKi8KIHZvaWQgcHBjNjRfYm9vdF9tc2codW5zaWduZWQgaW50IHNyYywgY29uc3QgY2hhciAqbXNnKTsKLS8qIFByaW50IGEgdGVybWluYXRpb24gbWVzc2FnZSAocHJpbnQgb25seSAtLSBkb2VzIG5vdCBzdG9wIHRoZSBrZXJuZWwpICovCi12b2lkIHBwYzY0X3Rlcm1pbmF0ZV9tc2codW5zaWduZWQgaW50IHNyYywgY29uc3QgY2hhciAqbXNnKTsKIAogc3RhdGljIGlubGluZSB2b2lkIGxvZ19lcnJvcihjaGFyICpidWYsIHVuc2lnbmVkIGludCBlcnJfdHlwZSwgaW50IGZhdGFsKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS00NHguaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtNDR4LmgKaW5kZXggMjdjYzZmZC4uM2M4NjU3NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS00NHguaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LTQ0eC5oCkBAIC04Myw2ICs4Myw4IEBACiAjZGVmaW5lIFBQQzQ0eF9UTEJFX1NJWkUJUFBDNDR4X1RMQl8xNksKICNlbGlmIChQQUdFX1NISUZUID09IDE2KQogI2RlZmluZSBQUEM0NHhfVExCRV9TSVpFCVBQQzQ0eF9UTEJfNjRLCisjZWxpZiAoUEFHRV9TSElGVCA9PSAxOCkKKyNkZWZpbmUgUFBDNDR4X1RMQkVfU0laRQlQUEM0NHhfVExCXzI1NksKICNlbHNlCiAjZXJyb3IgIlVuc3VwcG9ydGVkIFBBR0VfU0laRSIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1ib29rM2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtYm9vazNlLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2U3NGNmZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtYm9vazNlLmgKQEAgLTAsMCArMSwxMDUgQEAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX01NVV9CT09LM0VfSF8KKyNkZWZpbmUgX0FTTV9QT1dFUlBDX01NVV9CT09LM0VfSF8KKy8qCisgKiBGcmVlc2NhbGUgQm9vay1FL0Jvb2stM2UgKElTQSAyLjA2KykgTU1VIHN1cHBvcnQKKyAqLworCisvKiBCb29rLTNlIGRlZmluZWQgcGFnZSBzaXplcyAqLworI2RlZmluZSBCT09LM0VfUEFHRVNaXzFLCTAKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl8ySwkxCisjZGVmaW5lIEJPT0szRV9QQUdFU1pfNEsJMgorI2RlZmluZSBCT09LM0VfUEFHRVNaXzhLCTMKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl8xNksJNAorI2RlZmluZSBCT09LM0VfUEFHRVNaXzMySwk1CisjZGVmaW5lIEJPT0szRV9QQUdFU1pfNjRLCTYKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl8xMjhLCTcKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl8yNTZLCTgKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl81MTJLCTkKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl8xTQkxMAorI2RlZmluZSBCT09LM0VfUEFHRVNaXzJNCTExCisjZGVmaW5lIEJPT0szRV9QQUdFU1pfNE0JMTIKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl84TQkxMworI2RlZmluZSBCT09LM0VfUEFHRVNaXzE2TQkxNAorI2RlZmluZSBCT09LM0VfUEFHRVNaXzMyTQkxNQorI2RlZmluZSBCT09LM0VfUEFHRVNaXzY0TQkxNgorI2RlZmluZSBCT09LM0VfUEFHRVNaXzEyOE0JMTcKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl8yNTZNCTE4CisjZGVmaW5lIEJPT0szRV9QQUdFU1pfNTEyTQkxOQorI2RlZmluZSBCT09LM0VfUEFHRVNaXzFHQgkyMAorI2RlZmluZSBCT09LM0VfUEFHRVNaXzJHQgkyMQorI2RlZmluZSBCT09LM0VfUEFHRVNaXzRHQgkyMgorI2RlZmluZSBCT09LM0VfUEFHRVNaXzhHQgkyMworI2RlZmluZSBCT09LM0VfUEFHRVNaXzE2R0IJMjQKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl8zMkdCCTI1CisjZGVmaW5lIEJPT0szRV9QQUdFU1pfNjRHQgkyNgorI2RlZmluZSBCT09LM0VfUEFHRVNaXzEyOEdCCTI3CisjZGVmaW5lIEJPT0szRV9QQUdFU1pfMjU2R0IJMjgKKyNkZWZpbmUgQk9PSzNFX1BBR0VTWl81MTJHQgkyOQorI2RlZmluZSBCT09LM0VfUEFHRVNaXzFUQgkzMAorI2RlZmluZSBCT09LM0VfUEFHRVNaXzJUQgkzMQorCisjZGVmaW5lIE1BUzBfVExCU0VMKHgpCSgoeCA8PCAyOCkgJiAweDMwMDAwMDAwKQorI2RlZmluZSBNQVMwX0VTRUwoeCkJKCh4IDw8IDE2KSAmIDB4MEZGRjAwMDApCisjZGVmaW5lIE1BUzBfTlYoeCkJKCh4KSAmIDB4MDAwMDBGRkYpCisKKyNkZWZpbmUgTUFTMV9WQUxJRCAJMHg4MDAwMDAwMAorI2RlZmluZSBNQVMxX0lQUk9UCTB4NDAwMDAwMDAKKyNkZWZpbmUgTUFTMV9USUQoeCkJKCh4IDw8IDE2KSAmIDB4M0ZGRjAwMDApCisjZGVmaW5lIE1BUzFfSU5ECTB4MDAwMDIwMDAKKyNkZWZpbmUgTUFTMV9UUwkJMHgwMDAwMTAwMAorI2RlZmluZSBNQVMxX1RTSVpFKHgpCSgoeCA8PCA3KSAmIDB4MDAwMDBGODApCisKKyNkZWZpbmUgTUFTMl9FUE4JMHhGRkZGRjAwMAorI2RlZmluZSBNQVMyX1gwCQkweDAwMDAwMDQwCisjZGVmaW5lIE1BUzJfWDEJCTB4MDAwMDAwMjAKKyNkZWZpbmUgTUFTMl9XCQkweDAwMDAwMDEwCisjZGVmaW5lIE1BUzJfSQkJMHgwMDAwMDAwOAorI2RlZmluZSBNQVMyX00JCTB4MDAwMDAwMDQKKyNkZWZpbmUgTUFTMl9HCQkweDAwMDAwMDAyCisjZGVmaW5lIE1BUzJfRQkJMHgwMDAwMDAwMQorI2RlZmluZSBNQVMyX0VQTl9NQVNLKHNpemUpCQkofjAgPDwgKHNpemUgKyAxMCkpCisjZGVmaW5lIE1BUzJfVkFMKGFkZHIsIHNpemUsIGZsYWdzKQkoKGFkZHIpICYgTUFTMl9FUE5fTUFTSyhzaXplKSB8IChmbGFncykpCisKKyNkZWZpbmUgTUFTM19SUE4JMHhGRkZGRjAwMAorI2RlZmluZSBNQVMzX1UwCQkweDAwMDAwMjAwCisjZGVmaW5lIE1BUzNfVTEJCTB4MDAwMDAxMDAKKyNkZWZpbmUgTUFTM19VMgkJMHgwMDAwMDA4MAorI2RlZmluZSBNQVMzX1UzCQkweDAwMDAwMDQwCisjZGVmaW5lIE1BUzNfVVgJCTB4MDAwMDAwMjAKKyNkZWZpbmUgTUFTM19TWAkJMHgwMDAwMDAxMAorI2RlZmluZSBNQVMzX1VXCQkweDAwMDAwMDA4CisjZGVmaW5lIE1BUzNfU1cJCTB4MDAwMDAwMDQKKyNkZWZpbmUgTUFTM19VUgkJMHgwMDAwMDAwMgorI2RlZmluZSBNQVMzX1NSCQkweDAwMDAwMDAxCisKKyNkZWZpbmUgTUFTNF9UTEJTRUxEKHgpIE1BUzBfVExCU0VMKHgpCisjZGVmaW5lIE1BUzRfSU5ERAkweDAwMDA4MDAwCisjZGVmaW5lIE1BUzRfVFNJWkVEKHgpCU1BUzFfVFNJWkUoeCkKKyNkZWZpbmUgTUFTNF9YMEQJMHgwMDAwMDA0MAorI2RlZmluZSBNQVM0X1gxRAkweDAwMDAwMDIwCisjZGVmaW5lIE1BUzRfV0QJCTB4MDAwMDAwMTAKKyNkZWZpbmUgTUFTNF9JRAkJMHgwMDAwMDAwOAorI2RlZmluZSBNQVM0X01ECQkweDAwMDAwMDA0CisjZGVmaW5lIE1BUzRfR0QJCTB4MDAwMDAwMDIKKyNkZWZpbmUgTUFTNF9FRAkJMHgwMDAwMDAwMQorCisjZGVmaW5lIE1BUzZfU1BJRDAJMHgzRkZGMDAwMAorI2RlZmluZSBNQVM2X1NQSUQxCTB4MDAwMDdGRkUKKyNkZWZpbmUgTUFTNl9JU0laRSh4KQlNQVMxX1RTSVpFKHgpCisjZGVmaW5lIE1BUzZfU0FTCTB4MDAwMDAwMDEKKyNkZWZpbmUgTUFTNl9TUElECU1BUzZfU1BJRDAKKworI2RlZmluZSBNQVM3X1JQTgkweEZGRkZGRkZGCisKKyNpZm5kZWYgX19BU1NFTUJMWV9fCisKK2V4dGVybiB1bnNpZ25lZCBpbnQgdGxiY2FtX2luZGV4OworCit0eXBlZGVmIHN0cnVjdCB7CisJdW5zaWduZWQgaW50CWlkOworCXVuc2lnbmVkIGludAlhY3RpdmU7CisJdW5zaWduZWQgbG9uZwl2ZHNvX2Jhc2U7Cit9IG1tX2NvbnRleHRfdDsKKyNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCisKKyNlbmRpZiAvKiBfQVNNX1BPV0VSUENfTU1VX0JPT0szRV9IXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1mc2wtYm9va2UuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtZnNsLWJvb2tlLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQyODViNjQuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1mc2wtYm9va2UuaAorKysgL2Rldi9udWxsCkBAIC0xLDg3ICswLDAgQEAKLSNpZm5kZWYgX0FTTV9QT1dFUlBDX01NVV9GU0xfQk9PS0VfSF8KLSNkZWZpbmUgX0FTTV9QT1dFUlBDX01NVV9GU0xfQk9PS0VfSF8KLS8qCi0gKiBGcmVlc2NhbGUgQm9vay1FIE1NVSBzdXBwb3J0Ci0gKi8KLQotLyogQm9vay1FIGRlZmluZWQgcGFnZSBzaXplcyAqLwotI2RlZmluZSBCT09LRV9QQUdFU1pfMUsJCTAKLSNkZWZpbmUgQk9PS0VfUEFHRVNaXzRLCQkxCi0jZGVmaW5lIEJPT0tFX1BBR0VTWl8xNksJMgotI2RlZmluZSBCT09LRV9QQUdFU1pfNjRLCTMKLSNkZWZpbmUgQk9PS0VfUEFHRVNaXzI1NksJNAotI2RlZmluZSBCT09LRV9QQUdFU1pfMU0JCTUKLSNkZWZpbmUgQk9PS0VfUEFHRVNaXzRNCQk2Ci0jZGVmaW5lIEJPT0tFX1BBR0VTWl8xNk0JNwotI2RlZmluZSBCT09LRV9QQUdFU1pfNjRNCTgKLSNkZWZpbmUgQk9PS0VfUEFHRVNaXzI1Nk0JOQotI2RlZmluZSBCT09LRV9QQUdFU1pfMUdCCTEwCi0jZGVmaW5lIEJPT0tFX1BBR0VTWl80R0IJMTEKLSNkZWZpbmUgQk9PS0VfUEFHRVNaXzE2R0IJMTIKLSNkZWZpbmUgQk9PS0VfUEFHRVNaXzY0R0IJMTMKLSNkZWZpbmUgQk9PS0VfUEFHRVNaXzI1NkdCCTE0Ci0jZGVmaW5lIEJPT0tFX1BBR0VTWl8xVEIJMTUKLQotI2RlZmluZSBNQVMwX1RMQlNFTCh4KQkoKHggPDwgMjgpICYgMHgzMDAwMDAwMCkKLSNkZWZpbmUgTUFTMF9FU0VMKHgpCSgoeCA8PCAxNikgJiAweDBGRkYwMDAwKQotI2RlZmluZSBNQVMwX05WKHgpCSgoeCkgJiAweDAwMDAwRkZGKQotCi0jZGVmaW5lIE1BUzFfVkFMSUQgCTB4ODAwMDAwMDAKLSNkZWZpbmUgTUFTMV9JUFJPVAkweDQwMDAwMDAwCi0jZGVmaW5lIE1BUzFfVElEKHgpCSgoeCA8PCAxNikgJiAweDNGRkYwMDAwKQotI2RlZmluZSBNQVMxX1RTCQkweDAwMDAxMDAwCi0jZGVmaW5lIE1BUzFfVFNJWkUoeCkJKCh4IDw8IDgpICYgMHgwMDAwMEYwMCkKLQotI2RlZmluZSBNQVMyX0VQTgkweEZGRkZGMDAwCi0jZGVmaW5lIE1BUzJfWDAJCTB4MDAwMDAwNDAKLSNkZWZpbmUgTUFTMl9YMQkJMHgwMDAwMDAyMAotI2RlZmluZSBNQVMyX1cJCTB4MDAwMDAwMTAKLSNkZWZpbmUgTUFTMl9JCQkweDAwMDAwMDA4Ci0jZGVmaW5lIE1BUzJfTQkJMHgwMDAwMDAwNAotI2RlZmluZSBNQVMyX0cJCTB4MDAwMDAwMDIKLSNkZWZpbmUgTUFTMl9FCQkweDAwMDAwMDAxCi0jZGVmaW5lIE1BUzJfRVBOX01BU0soc2l6ZSkJCSh+MCA8PCAoMiooc2l6ZSkgKyAxMCkpCi0jZGVmaW5lIE1BUzJfVkFMKGFkZHIsIHNpemUsIGZsYWdzKQkoKGFkZHIpICYgTUFTMl9FUE5fTUFTSyhzaXplKSB8IChmbGFncykpCi0KLSNkZWZpbmUgTUFTM19SUE4JMHhGRkZGRjAwMAotI2RlZmluZSBNQVMzX1UwCQkweDAwMDAwMjAwCi0jZGVmaW5lIE1BUzNfVTEJCTB4MDAwMDAxMDAKLSNkZWZpbmUgTUFTM19VMgkJMHgwMDAwMDA4MAotI2RlZmluZSBNQVMzX1UzCQkweDAwMDAwMDQwCi0jZGVmaW5lIE1BUzNfVVgJCTB4MDAwMDAwMjAKLSNkZWZpbmUgTUFTM19TWAkJMHgwMDAwMDAxMAotI2RlZmluZSBNQVMzX1VXCQkweDAwMDAwMDA4Ci0jZGVmaW5lIE1BUzNfU1cJCTB4MDAwMDAwMDQKLSNkZWZpbmUgTUFTM19VUgkJMHgwMDAwMDAwMgotI2RlZmluZSBNQVMzX1NSCQkweDAwMDAwMDAxCi0KLSNkZWZpbmUgTUFTNF9UTEJTRUxEKHgpIE1BUzBfVExCU0VMKHgpCi0jZGVmaW5lIE1BUzRfVElERFNFTAkweDAwMEYwMDAwCi0jZGVmaW5lIE1BUzRfVFNJWkVEKHgpCU1BUzFfVFNJWkUoeCkKLSNkZWZpbmUgTUFTNF9YMEQJMHgwMDAwMDA0MAotI2RlZmluZSBNQVM0X1gxRAkweDAwMDAwMDIwCi0jZGVmaW5lIE1BUzRfV0QJCTB4MDAwMDAwMTAKLSNkZWZpbmUgTUFTNF9JRAkJMHgwMDAwMDAwOAotI2RlZmluZSBNQVM0X01ECQkweDAwMDAwMDA0Ci0jZGVmaW5lIE1BUzRfR0QJCTB4MDAwMDAwMDIKLSNkZWZpbmUgTUFTNF9FRAkJMHgwMDAwMDAwMQotCi0jZGVmaW5lIE1BUzZfU1BJRDAJMHgzRkZGMDAwMAotI2RlZmluZSBNQVM2X1NQSUQxCTB4MDAwMDdGRkUKLSNkZWZpbmUgTUFTNl9TQVMJMHgwMDAwMDAwMQotI2RlZmluZSBNQVM2X1NQSUQJTUFTNl9TUElEMAotCi0jZGVmaW5lIE1BUzdfUlBOCTB4RkZGRkZGRkYKLQotI2lmbmRlZiBfX0FTU0VNQkxZX18KLQotZXh0ZXJuIHVuc2lnbmVkIGludCB0bGJjYW1faW5kZXg7Ci0KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBpbnQJaWQ7Ci0JdW5zaWduZWQgaW50CWFjdGl2ZTsKLQl1bnNpZ25lZCBsb25nCXZkc29fYmFzZTsKLX0gbW1fY29udGV4dF90OwotI2VuZGlmIC8qICFfX0FTU0VNQkxZX18gKi8KLQotI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19NTVVfRlNMX0JPT0tFX0hfICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWhhc2g2NC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS1oYXNoNjQuaAppbmRleCA2OGI3NTI2Li45OGMxMDRhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LWhhc2g2NC5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUtaGFzaDY0LmgKQEAgLTI4NCw4ICsyODQsNiBAQAogCQkJICB1bnNpZ25lZCBsb25nIG51bWJlcl9vZl9wYWdlcyk7CiBleHRlcm4gdm9pZCBkZW1vdGVfc2VnbWVudF80ayhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKTsKIAotZXh0ZXJuIHZvaWQgaHRhYl9pbml0aWFsaXplKHZvaWQpOwotZXh0ZXJuIHZvaWQgaHRhYl9pbml0aWFsaXplX3NlY29uZGFyeSh2b2lkKTsKIGV4dGVybiB2b2lkIGhwdGVfaW5pdF9uYXRpdmUodm9pZCk7CiBleHRlcm4gdm9pZCBocHRlX2luaXRfbHBhcih2b2lkKTsKIGV4dGVybiB2b2lkIGhwdGVfaW5pdF9pU2VyaWVzKHZvaWQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdS5oCmluZGV4IDZlNzYzOTkuLmNiZjE1NDMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbW11LmgKQEAgLTM2LDkgKzM2LDkgQEAKICAqLwogI2RlZmluZSBNTVVfRlRSX1VTRV9UTEJJVkFYX0JDQVNUCUFTTV9DT05TVCgweDAwMDQwMDAwKQogCi0vKiBFbmFibGUgdXNlIG9mIHRsYmlseCBpbnZhbGlkYXRlLWJ5LVBJRCB2YXJpYW50LgorLyogRW5hYmxlIHVzZSBvZiB0bGJpbHggaW52YWxpZGF0ZSBpbnN0cnVjdGlvbnMuCiAgKi8KLSNkZWZpbmUgTU1VX0ZUUl9VU0VfVExCSUxYX1BJRAkJQVNNX0NPTlNUKDB4MDAwODAwMDApCisjZGVmaW5lIE1NVV9GVFJfVVNFX1RMQklMWAkJQVNNX0NPTlNUKDB4MDAwODAwMDApCiAKIC8qIFRoaXMgaW5kaWNhdGVzIHRoYXQgdGhlIHByb2Nlc3NvciBjYW5ub3QgaGFuZGxlIG11bHRpcGxlIG91dHN0YW5kaW5nCiAgKiBicm9hZGNhc3QgdGxiaXZheCBvciB0bGJzeW5jLiBUaGlzIG1ha2VzIHRoZSBjb2RlIHVzZSBhIHNwaW5sb2NrCkBAIC00Niw2ICs0NiwxMiBAQAogICovCiAjZGVmaW5lIE1NVV9GVFJfTE9DS19CQ0FTVF9JTlZBTAlBU01fQ09OU1QoMHgwMDEwMDAwMCkKIAorLyogVGhpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgcHJvY2Vzc29yIGRvZXNuJ3QgaGFuZGxlIHdheSBzZWxlY3Rpb24KKyAqIHByb3Blcmx5IGFuZCBuZWVkcyBTVyB0byB0cmFjayBhbmQgdXBkYXRlIHRoZSBMUlUgc3RhdGUuICBUaGlzCisgKiBpcyBzcGVjaWZpYyB0byBhbiBlcnJhdGEgb24gZTMwMGMyL2MzL2M0IGNsYXNzIHBhcnRzCisgKi8KKyNkZWZpbmUgTU1VX0ZUUl9ORUVEX0RUTEJfU1dfTFJVCUFTTV9DT05TVCgweDAwMjAwMDAwKQorCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgogCkBAIC01Niw2ICs2MiwxMCBAQAogCiBleHRlcm4gdW5zaWduZWQgaW50IF9fc3RhcnRfX19tbXVfZnRyX2ZpeHVwLCBfX3N0b3BfX19tbXVfZnRyX2ZpeHVwOwogCisvKiBNTVUgaW5pdGlhbGl6YXRpb24gKDY0LWJpdCBvbmx5IGZvIG5vdykgKi8KK2V4dGVybiB2b2lkIGVhcmx5X2luaXRfbW11KHZvaWQpOworZXh0ZXJuIHZvaWQgZWFybHlfaW5pdF9tbXVfc2Vjb25kYXJ5KHZvaWQpOworCiAjZW5kaWYgLyogIV9fQVNTRU1CTFlfXyAqLwogCiAKQEAgLTcxLDkgKzgxLDkgQEAKICNlbGlmIGRlZmluZWQoQ09ORklHXzQ0eCkKIC8qIDQ0eC1zdHlsZSBzb2Z0d2FyZSBsb2FkZWQgVExCICovCiAjICBpbmNsdWRlIDxhc20vbW11LTQ0eC5oPgotI2VsaWYgZGVmaW5lZChDT05GSUdfRlNMX0JPT0tFKQotLyogRnJlZXNjYWxlIEJvb2stRSBzb2Z0d2FyZSBsb2FkZWQgVExCICovCi0jICBpbmNsdWRlIDxhc20vbW11LWZzbC1ib29rZS5oPgorI2VsaWYgZGVmaW5lZChDT05GSUdfUFBDX0JPT0szRV9NTVUpCisvKiBGcmVlc2NhbGUgQm9vay1FIHNvZnR3YXJlIGxvYWRlZCBUTEIgb3IgQm9vay0zZSAoSVNBIDIuMDYrKSBNTVUgKi8KKyMgIGluY2x1ZGUgPGFzbS9tbXUtYm9vazNlLmg+CiAjZWxpZiBkZWZpbmVkIChDT05GSUdfUFBDXzh4eCkKIC8qIE1vdG9yb2xhL0ZyZWVzY2FsZSA4eHggc29mdHdhcmUgbG9hZGVkIFRMQiAqLwogIyAgaW5jbHVkZSA8YXNtL21tdS04eHguaD4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tbXVfY29udGV4dC5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKaW5kZXggYWI0ZjE5Mi4uYjcwNjM2NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21tdV9jb250ZXh0LmgKQEAgLTMxLDcgKzMxLDcgQEAKIAkJCSAgICAgc3RydWN0IHRhc2tfc3RydWN0ICp0c2spCiB7CiAJLyogTWFyayB0aGlzIGNvbnRleHQgaGFzIGJlZW4gdXNlZCBvbiB0aGUgbmV3IENQVSAqLwotCWNwdV9zZXQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBuZXh0LT5jcHVfdm1fbWFzayk7CisJY3B1bWFza19zZXRfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSwgbW1fY3B1bWFzayhuZXh0KSk7CiAKIAkvKiAzMi1iaXQga2VlcHMgdHJhY2sgb2YgdGhlIGN1cnJlbnQgUEdESVIgaW4gdGhlIHRocmVhZCBzdHJ1Y3QgKi8KICNpZmRlZiBDT05GSUdfUFBDMzIKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGM1Mnh4LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vbXBjNTJ4eC5oCmluZGV4IDgxYTIzOTMuLjUyZTA0OWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9tcGM1Mnh4LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL21wYzUyeHguaApAQCAtMjczLDYgKzI3Myw3IEBACiBleHRlcm4gdm9pZCBtcGM1Mnh4X2RlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyh2b2lkKTsKIGV4dGVybiB2b2lkIG1wYzUyeHhfbWFwX2NvbW1vbl9kZXZpY2VzKHZvaWQpOwogZXh0ZXJuIGludCBtcGM1Mnh4X3NldF9wc2NfY2xrZGl2KGludCBwc2NfaWQsIGludCBjbGtkaXYpOworZXh0ZXJuIHVuc2lnbmVkIGludCBtcGM1Mnh4X2dldF94dGFsX2ZyZXEoc3RydWN0IGRldmljZV9ub2RlICpub2RlKTsKIGV4dGVybiB2b2lkIG1wYzUyeHhfcmVzdGFydChjaGFyICpjbWQpOwogCiAvKiBtcGM1Mnh4X3BpYy5jICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2UuaAppbmRleCAxOTdkNTY5Li4zMmNiZjE2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmgKQEAgLTE5LDEyICsxOSwxNCBAQAogI2luY2x1ZGUgPGFzbS9rZHVtcC5oPgogCiAvKgotICogT24gcmVndWxhciBQUEMzMiBwYWdlIHNpemUgaXMgNEsgKGJ1dCB3ZSBzdXBwb3J0IDRLLzE2Sy82NEsgcGFnZXMKKyAqIE9uIHJlZ3VsYXIgUFBDMzIgcGFnZSBzaXplIGlzIDRLIChidXQgd2Ugc3VwcG9ydCA0Sy8xNksvNjRLLzI1NksgcGFnZXMKICAqIG9uIFBQQzQ0eCkuIEZvciBQUEM2NCB3ZSBzdXBwb3J0IGVpdGhlciA0SyBvciA2NEsgc29mdHdhcmUKICAqIHBhZ2Ugc2l6ZS4gV2hlbiB1c2luZyA2NEsgcGFnZXMgaG93ZXZlciwgd2hldGhlciB3ZSBhcmUgcmVhbGx5IHN1cHBvcnRpbmcKICAqIDY0SyBwYWdlcyBpbiBIVyBvciBub3QgaXMgaXJyZWxldmFudCB0byB0aG9zZSBkZWZpbml0aW9ucy4KICAqLwotI2lmIGRlZmluZWQoQ09ORklHX1BQQ182NEtfUEFHRVMpCisjaWYgZGVmaW5lZChDT05GSUdfUFBDXzI1NktfUEFHRVMpCisjZGVmaW5lIFBBR0VfU0hJRlQJCTE4CisjZWxpZiBkZWZpbmVkKENPTkZJR19QUENfNjRLX1BBR0VTKQogI2RlZmluZSBQQUdFX1NISUZUCQkxNgogI2VsaWYgZGVmaW5lZChDT05GSUdfUFBDXzE2S19QQUdFUykKICNkZWZpbmUgUEFHRV9TSElGVAkJMTQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlXzMyLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGFnZV8zMi5oCmluZGV4IDE0NThkOTUuLmEwZTNmNmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlXzMyLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BhZ2VfMzIuaApAQCAtMTksNyArMTksMTEgQEAKICNkZWZpbmUgUFRFX0ZMQUdTX09GRlNFVAkwCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19QUENfMjU2S19QQUdFUworI2RlZmluZSBQVEVfU0hJRlQJKFBBR0VfU0hJRlQgLSBQVEVfVF9MT0cyIC0gMikJLyogMS80IG9mIGEgcGFnZSAqLworI2Vsc2UKICNkZWZpbmUgUFRFX1NISUZUCShQQUdFX1NISUZUIC0gUFRFX1RfTE9HMikJLyogZnVsbCBwYWdlICovCisjZW5kaWYKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIC8qCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS00ay5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtNGsuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMWRiY2E0ZTcuLjAwMDAwMDAKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtNGsuaAorKysgL2Rldi9udWxsCkBAIC0xLDExNyArMCwwIEBACi0jaWZuZGVmIF9BU01fUE9XRVJQQ19QR1RBQkxFXzRLX0gKLSNkZWZpbmUgX0FTTV9QT1dFUlBDX1BHVEFCTEVfNEtfSAotLyoKLSAqIEVudHJpZXMgcGVyIHBhZ2UgZGlyZWN0b3J5IGxldmVsLiAgVGhlIFBURSBsZXZlbCBtdXN0IHVzZSBhIDY0YiByZWNvcmQKLSAqIGZvciBlYWNoIHBhZ2UgdGFibGUgZW50cnkuICBUaGUgUE1EIGFuZCBQR0QgbGV2ZWwgdXNlIGEgMzJiIHJlY29yZCBmb3IKLSAqIGVhY2ggZW50cnkgYnkgYXNzdW1pbmcgdGhhdCBlYWNoIGVudHJ5IGlzIHBhZ2UgYWxpZ25lZC4KLSAqLwotI2RlZmluZSBQVEVfSU5ERVhfU0laRSAgOQotI2RlZmluZSBQTURfSU5ERVhfU0laRSAgNwotI2RlZmluZSBQVURfSU5ERVhfU0laRSAgNwotI2RlZmluZSBQR0RfSU5ERVhfU0laRSAgOQotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotI2RlZmluZSBQVEVfVEFCTEVfU0laRQkoc2l6ZW9mKHB0ZV90KSA8PCBQVEVfSU5ERVhfU0laRSkKLSNkZWZpbmUgUE1EX1RBQkxFX1NJWkUJKHNpemVvZihwbWRfdCkgPDwgUE1EX0lOREVYX1NJWkUpCi0jZGVmaW5lIFBVRF9UQUJMRV9TSVpFCShzaXplb2YocHVkX3QpIDw8IFBVRF9JTkRFWF9TSVpFKQotI2RlZmluZSBQR0RfVEFCTEVfU0laRQkoc2l6ZW9mKHBnZF90KSA8PCBQR0RfSU5ERVhfU0laRSkKLSNlbmRpZgkvKiBfX0FTU0VNQkxZX18gKi8KLQotI2RlZmluZSBQVFJTX1BFUl9QVEUJKDEgPDwgUFRFX0lOREVYX1NJWkUpCi0jZGVmaW5lIFBUUlNfUEVSX1BNRAkoMSA8PCBQTURfSU5ERVhfU0laRSkKLSNkZWZpbmUgUFRSU19QRVJfUFVECSgxIDw8IFBNRF9JTkRFWF9TSVpFKQotI2RlZmluZSBQVFJTX1BFUl9QR0QJKDEgPDwgUEdEX0lOREVYX1NJWkUpCi0KLS8qIFBNRF9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSBzZWNvbmQtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwICovCi0jZGVmaW5lIFBNRF9TSElGVAkoUEFHRV9TSElGVCArIFBURV9JTkRFWF9TSVpFKQotI2RlZmluZSBQTURfU0laRQkoMVVMIDw8IFBNRF9TSElGVCkKLSNkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUtMSkpCi0KLS8qIFdpdGggNGsgYmFzZSBwYWdlIHNpemUsIGh1Z2VwYWdlIFBURXMgZ28gYXQgdGhlIFBNRCBsZXZlbCAqLwotI2RlZmluZSBNSU5fSFVHRVBURV9TSElGVAlQTURfU0hJRlQKLQotLyogUFVEX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLwotI2RlZmluZSBQVURfU0hJRlQJKFBNRF9TSElGVCArIFBNRF9JTkRFWF9TSVpFKQotI2RlZmluZSBQVURfU0laRQkoMVVMIDw8IFBVRF9TSElGVCkKLSNkZWZpbmUgUFVEX01BU0sJKH4oUFVEX1NJWkUtMSkpCi0KLS8qIFBHRElSX1NISUZUIGRldGVybWluZXMgd2hhdCBhIGZvdXJ0aC1sZXZlbCBwYWdlIHRhYmxlIGVudHJ5IGNhbiBtYXAgKi8KLSNkZWZpbmUgUEdESVJfU0hJRlQJKFBVRF9TSElGVCArIFBVRF9JTkRFWF9TSVpFKQotI2RlZmluZSBQR0RJUl9TSVpFCSgxVUwgPDwgUEdESVJfU0hJRlQpCi0jZGVmaW5lIFBHRElSX01BU0sJKH4oUEdESVJfU0laRS0xKSkKLQotLyogUFRFIGJpdHMgKi8KLSNkZWZpbmUgX1BBR0VfSEFTSFBURQkweDA0MDAgLyogc29mdHdhcmU6IHB0ZSBoYXMgYW4gYXNzb2NpYXRlZCBIUFRFICovCi0jZGVmaW5lIF9QQUdFX1NFQ09OREFSWSAweDgwMDAgLyogc29mdHdhcmU6IEhQVEUgaXMgaW4gc2Vjb25kYXJ5IGdyb3VwICovCi0jZGVmaW5lIF9QQUdFX0dST1VQX0lYICAweDcwMDAgLyogc29mdHdhcmU6IEhQVEUgaW5kZXggd2l0aGluIGdyb3VwICovCi0jZGVmaW5lIF9QQUdFX0ZfU0VDT05EICBfUEFHRV9TRUNPTkRBUlkKLSNkZWZpbmUgX1BBR0VfRl9HSVggICAgIF9QQUdFX0dST1VQX0lYCi0jZGVmaW5lIF9QQUdFX1NQRUNJQUwJMHgxMDAwMCAvKiBzb2Z0d2FyZTogc3BlY2lhbCBwYWdlICovCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1BURV9TUEVDSUFMCi0KLS8qIFBURSBmbGFncyB0byBjb25zZXJ2ZSBmb3IgSFBURSBpZGVudGlmaWNhdGlvbiAqLwotI2RlZmluZSBfUEFHRV9IUFRFRkxBR1MgKF9QQUdFX0JVU1kgfCBfUEFHRV9IQVNIUFRFIHwgXAotCQkJIF9QQUdFX1NFQ09OREFSWSB8IF9QQUdFX0dST1VQX0lYKQotCi0vKiBUaGVyZSBpcyBubyA0SyBQRk4gaGFjayBvbiA0SyBwYWdlcyAqLwotI2RlZmluZSBfUEFHRV80S19QRk4JMAotCi0vKiBQQUdFX01BU0sgZ2l2ZXMgdGhlIHJpZ2h0IGFuc3dlciBiZWxvdywgYnV0IG9ubHkgYnkgYWNjaWRlbnQgKi8KLS8qIEl0IHNob3VsZCBiZSBwcmVzZXJ2aW5nIHRoZSBoaWdoIDQ4IGJpdHMgYW5kIHRoZW4gc3BlY2lmaWNhbGx5ICovCi0vKiBwcmVzZXJ2aW5nIF9QQUdFX1NFQ09OREFSWSB8IF9QQUdFX0dST1VQX0lYICovCi0jZGVmaW5lIF9QQUdFX0NIR19NQVNLCShQQUdFX01BU0sgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0RJUlRZIHwgXAotICAgICAgICAgICAgICAgICAgICAgICAgIF9QQUdFX0hQVEVGTEFHUyB8IF9QQUdFX1NQRUNJQUwpCi0KLS8qIEJpdHMgdG8gbWFzayBvdXQgZnJvbSBhIFBNRCB0byBnZXQgdG8gdGhlIFBURSBwYWdlICovCi0jZGVmaW5lIFBNRF9NQVNLRURfQklUUwkJMAotLyogQml0cyB0byBtYXNrIG91dCBmcm9tIGEgUFVEIHRvIGdldCB0byB0aGUgUE1EIHBhZ2UgKi8KLSNkZWZpbmUgUFVEX01BU0tFRF9CSVRTCQkwCi0vKiBCaXRzIHRvIG1hc2sgb3V0IGZyb20gYSBQR0QgdG8gZ2V0IHRvIHRoZSBQVUQgcGFnZSAqLwotI2RlZmluZSBQR0RfTUFTS0VEX0JJVFMJCTAKLQotLyogc2hpZnQgdG8gcHV0IHBhZ2UgbnVtYmVyIGludG8gcHRlICovCi0jZGVmaW5lIFBURV9SUE5fU0hJRlQJKDE3KQotCi0jaWZkZWYgU1RSSUNUX01NX1RZUEVDSEVDS1MKLSNkZWZpbmUgX19yZWFsX3B0ZShlLHApCQkoKHJlYWxfcHRlX3QpeyhlKX0pCi0jZGVmaW5lIF9fcnB0ZV90b19wdGUocikJKChyKS5wdGUpCi0jZWxzZQotI2RlZmluZSBfX3JlYWxfcHRlKGUscCkJCShlKQotI2RlZmluZSBfX3JwdGVfdG9fcHRlKHIpCShfX3B0ZShyKSkKLSNlbmRpZgotI2RlZmluZSBfX3JwdGVfdG9faGlkeChyLGluZGV4KQkocHRlX3ZhbChfX3JwdGVfdG9fcHRlKHIpKSA+PiAxMikKLQotI2RlZmluZSBwdGVfaXRlcmF0ZV9oYXNoZWRfc3VicGFnZXMocnB0ZSwgcHNpemUsIHZhLCBpbmRleCwgc2hpZnQpICAgICAgIFwKLQlkbyB7CQkJCQkJCSAgICAgICAgIFwKLQkJaW5kZXggPSAwOwkJCQkJICAgICAgICAgXAotCQlzaGlmdCA9IG1tdV9wc2l6ZV9kZWZzW3BzaXplXS5zaGlmdDsJCSAgICAgICAgIFwKLQotI2RlZmluZSBwdGVfaXRlcmF0ZV9oYXNoZWRfZW5kKCkgfSB3aGlsZSgwKQotCi0jaWZkZWYgQ09ORklHX1BQQ19IQVNfSEFTSF82NEsKLSNkZWZpbmUgcHRlX3BhZ2VzaXplX2luZGV4KG1tLCBhZGRyLCBwdGUpCWdldF9zbGljZV9wc2l6ZShtbSwgYWRkcikKLSNlbHNlCi0jZGVmaW5lIHB0ZV9wYWdlc2l6ZV9pbmRleChtbSwgYWRkciwgcHRlKQlNTVVfUEFHRV80SwotI2VuZGlmCi0KLS8qCi0gKiA0LWxldmVsIHBhZ2UgdGFibGVzIHJlbGF0ZWQgYml0cwotICovCi0KLSNkZWZpbmUgcGdkX25vbmUocGdkKQkJKCFwZ2RfdmFsKHBnZCkpCi0jZGVmaW5lIHBnZF9iYWQocGdkKQkJKHBnZF92YWwocGdkKSA9PSAwKQotI2RlZmluZSBwZ2RfcHJlc2VudChwZ2QpCShwZ2RfdmFsKHBnZCkgIT0gMCkKLSNkZWZpbmUgcGdkX2NsZWFyKHBnZHApCQkocGdkX3ZhbCgqKHBnZHApKSA9IDApCi0jZGVmaW5lIHBnZF9wYWdlX3ZhZGRyKHBnZCkJKHBnZF92YWwocGdkKSAmIH5QR0RfTUFTS0VEX0JJVFMpCi0jZGVmaW5lIHBnZF9wYWdlKHBnZCkJCXZpcnRfdG9fcGFnZShwZ2RfcGFnZV92YWRkcihwZ2QpKQotCi0jZGVmaW5lIHB1ZF9vZmZzZXQocGdkcCwgYWRkcikJXAotICAoKChwdWRfdCAqKSBwZ2RfcGFnZV92YWRkcigqKHBnZHApKSkgKyBcCi0gICAgKCgoYWRkcikgPj4gUFVEX1NISUZUKSAmIChQVFJTX1BFUl9QVUQgLSAxKSkpCi0KLSNkZWZpbmUgcHVkX0VSUk9SKGUpIFwKLQlwcmludGsoIiVzOiVkOiBiYWQgcHVkICUwOGx4LlxuIiwgX19GSUxFX18sIF9fTElORV9fLCBwdWRfdmFsKGUpKQotCi0jZGVmaW5lIHJlbWFwXzRrX3Bmbih2bWEsIGFkZHIsIHBmbiwgcHJvdCkJXAotCXJlbWFwX3Bmbl9yYW5nZSgodm1hKSwgKGFkZHIpLCAocGZuKSwgUEFHRV9TSVpFLCAocHJvdCkpCi0jZW5kaWYgLyogX0FTTV9QT1dFUlBDX1BHVEFCTEVfNEtfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjMzIuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzMyLmgKaW5kZXggODIwYjVmMC4uYmE0NWM5OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjMzIuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGMzMi5oCkBAIC0xOSw1NSArMTksNiBAQAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAvKgotICogVGhlIFBvd2VyUEMgTU1VIHVzZXMgYSBoYXNoIHRhYmxlIGNvbnRhaW5pbmcgUFRFcywgdG9nZXRoZXIgd2l0aAotICogYSBzZXQgb2YgMTYgc2VnbWVudCByZWdpc3RlcnMgKG9uIDMyLWJpdCBpbXBsZW1lbnRhdGlvbnMpLCB0byBkZWZpbmUKLSAqIHRoZSB2aXJ0dWFsIHRvIHBoeXNpY2FsIGFkZHJlc3MgbWFwcGluZy4KLSAqCi0gKiBXZSB1c2UgdGhlIGhhc2ggdGFibGUgYXMgYW4gZXh0ZW5kZWQgVExCLCBpLmUuIGEgY2FjaGUgb2YgY3VycmVudGx5Ci0gKiBhY3RpdmUgbWFwcGluZ3MuICBXZSBtYWludGFpbiBhIHR3by1sZXZlbCBwYWdlIHRhYmxlIHRyZWUsIG11Y2gKLSAqIGxpa2UgdGhhdCB1c2VkIGJ5IHRoZSBpMzg2LCBmb3IgdGhlIHNha2Ugb2YgdGhlIExpbnV4IG1lbW9yeQotICogbWFuYWdlbWVudCBjb2RlLiAgTG93LWxldmVsIGFzc2VtYmxlciBjb2RlIGluIGhhc2h0YWJsZS5TCi0gKiAocHJvY2VkdXJlIGhhc2hfcGFnZSkgaXMgcmVzcG9uc2libGUgZm9yIGV4dHJhY3RpbmcgcHRlcyBmcm9tIHRoZQotICogdHJlZSBhbmQgcHV0dGluZyB0aGVtIGludG8gdGhlIGhhc2ggdGFibGUgd2hlbiBuZWNlc3NhcnksIGFuZAotICogdXBkYXRpbmcgdGhlIGFjY2Vzc2VkIGFuZCBtb2RpZmllZCBiaXRzIGluIHRoZSBwYWdlIHRhYmxlIHRyZWUuCi0gKi8KLQotLyoKLSAqIFRoZSBQb3dlclBDIE1QQzh4eCB1c2VzIGEgVExCIHdpdGggaGFyZHdhcmUgYXNzaXN0ZWQsIHNvZnR3YXJlIHRhYmxld2Fsay4KLSAqIFdlIGFsc28gdXNlIHRoZSB0d28gbGV2ZWwgdGFibGVzLCBidXQgd2UgY2FuIHB1dCB0aGUgcmVhbCBiaXRzIGluIHRoZW0KLSAqIG5lZWRlZCBmb3IgdGhlIFRMQiBhbmQgdGFibGV3YWxrLiAgVGhlc2UgZGVmaW5pdGlvbnMgcmVxdWlyZSBNeF9DVFIuUFBNID0gMCwKLSAqIE14X0NUUi5QUENTID0gMCwgYW5kIE1EX0NUUi5UV0FNID0gMS4gIFRoZSBsZXZlbCAyIGRlc2NyaXB0b3IgaGFzCi0gKiBhZGRpdGlvbmFsIHBhZ2UgcHJvdGVjdGlvbiAod2hlbiBNeF9DVFIuUFBDUyA9IDEpIHRoYXQgYWxsb3dzIFRMQiBoaXQKLSAqIGJhc2VkIHVwb24gdXNlci9zdXBlciBhY2Nlc3MuICBUaGUgVExCIGRvZXMgbm90IGhhdmUgYWNjZXNzZWQgbm9yIHdyaXRlCi0gKiBwcm90ZWN0LiAgV2UgYXNzdW1lIHRoYXQgaWYgdGhlIFRMQiBnZXQgbG9hZGVkIHdpdGggYW4gZW50cnkgaXQgaXMKLSAqIGFjY2Vzc2VkLCBhbmQgb3ZlcmxvYWQgdGhlIGNoYW5nZWQgYml0IGZvciB3cml0ZSBwcm90ZWN0LiAgV2UgdXNlCi0gKiB0d28gYml0cyBpbiB0aGUgc29mdHdhcmUgcHRlIHRoYXQgYXJlIHN1cHBvc2VkIHRvIGJlIHNldCB0byB6ZXJvIGluCi0gKiB0aGUgVExCIGVudHJ5ICgyNCBhbmQgMjUpIGZvciB0aGVzZSBpbmRpY2F0b3JzLiAgQWx0aG91Z2ggdGhlIGxldmVsIDEKLSAqIGRlc2NyaXB0b3IgY29udGFpbnMgdGhlIGd1YXJkZWQgYW5kIHdyaXRldGhyb3VnaC9jb3B5YmFjayBiaXRzLCB3ZSBjYW4KLSAqIHNldCB0aGVzZSBhdCB0aGUgcGFnZSBsZXZlbCBzaW5jZSB0aGV5IGdldCBjb3BpZWQgZnJvbSB0aGUgTXhfVFdDCi0gKiByZWdpc3RlciB3aGVuIHRoZSBUTEIgZW50cnkgaXMgbG9hZGVkLiAgV2Ugd2lsbCB1c2UgYml0IDI3IGZvciBndWFyZCwgc2luY2UKLSAqIHRoYXQgaXMgd2hlcmUgaXQgZXhpc3RzIGluIHRoZSBNRF9UV0MsIGFuZCBiaXQgMjYgZm9yIHdyaXRldGhyb3VnaC4KLSAqIFRoZXNlIHdpbGwgZ2V0IG1hc2tlZCBmcm9tIHRoZSBsZXZlbCAyIGRlc2NyaXB0b3IgYXQgVExCIGxvYWQgdGltZSwgYW5kCi0gKiBjb3BpZWQgdG8gdGhlIE1EX1RXQyBiZWZvcmUgaXQgZ2V0cyBsb2FkZWQuCi0gKiBMYXJnZSBwYWdlIHNpemVzIGFkZGVkLiAgV2UgY3VycmVudGx5IHN1cHBvcnQgdHdvIHNpemVzLCA0SyBhbmQgOE0uCi0gKiBUaGlzIGFsc28gYWxsb3dzIGEgVExCIGhhbmRlciBvcHRpbWl6YXRpb24gYmVjYXVzZSB3ZSBjYW4gZGlyZWN0bHkKLSAqIGxvYWQgdGhlIFBNRCBpbnRvIE1EX1RXQy4gIFRoZSA4TSBwYWdlcyBhcmUgb25seSB1c2VkIGZvciBrZXJuZWwKLSAqIG1hcHBpbmcgb2Ygd2VsbCBrbm93biBhcmVhcy4gIFRoZSBQTUQgKFBHRCkgZW50cmllcyBjb250YWluIGNvbnRyb2wKLSAqIGZsYWdzIGluIGFkZGl0aW9uIHRvIHRoZSBhZGRyZXNzLCBzbyBjYXJlIG11c3QgYmUgdGFrZW4gdGhhdCB0aGUKLSAqIHNvZnR3YXJlIG5vIGxvbmdlciBhc3N1bWVzIHRoZXNlIGFyZSBvbmx5IHBvaW50ZXJzLgotICovCi0KLS8qCi0gKiBBdCBwcmVzZW50LCBhbGwgUG93ZXJQQyA0MDAtY2xhc3MgcHJvY2Vzc29ycyBzaGFyZSBhIHNpbWlsYXIgVExCCi0gKiBhcmNoaXRlY3R1cmUuIFRoZSBpbnN0cnVjdGlvbiBhbmQgZGF0YSBzaWRlcyBzaGFyZSBhIHVuaWZpZWQsCi0gKiA2NC1lbnRyeSwgZnVsbHktYXNzb2NpYXRpdmUgVExCIHdoaWNoIGlzIG1haW50YWluZWQgdG90YWxseSB1bmRlcgotICogc29mdHdhcmUgY29udHJvbC4gSW4gYWRkaXRpb24sIHRoZSBpbnN0cnVjdGlvbiBzaWRlIGhhcyBhCi0gKiBoYXJkd2FyZS1tYW5hZ2VkLCA0LWVudHJ5LCBmdWxseS1hc3NvY2lhdGl2ZSBUTEIgd2hpY2ggc2VydmVzIGFzIGEKLSAqIGZpcnN0IGxldmVsIHRvIHRoZSBzaGFyZWQgVExCLiBUaGVzZSB0d28gVExCcyBhcmUga25vd24gYXMgdGhlIFVUTEIKLSAqIGFuZCBJVExCLCByZXNwZWN0aXZlbHkgKHNlZSAibW11LmgiIGZvciBkZWZpbml0aW9ucykuCi0gKi8KLQotLyoKICAqIFRoZSBub3JtYWwgY2FzZSBpcyB0aGF0IFBURXMgYXJlIDMyLWJpdHMgYW5kIHdlIGhhdmUgYSAxLXBhZ2UKICAqIDEwMjQtZW50cnkgcGdkaXIgcG9pbnRpbmcgdG8gMS1wYWdlIDEwMjQtZW50cnkgUFRFIHBhZ2VzLiAgLS0gcGF1bHVzCiAgKgpAQCAtMTM1LDQwOSArODYsMjIgQEAKICAqLwogCiAjaWYgZGVmaW5lZChDT05GSUdfNDB4KQotCi0vKiBUaGVyZSBhcmUgc2V2ZXJhbCBwb3RlbnRpYWwgZ290Y2hhcyBoZXJlLiAgVGhlIDQweCBoYXJkd2FyZSBUTEJMTwotICAgZmllbGQgbG9va3MgbGlrZSB0aGlzOgotCi0gICAwICAxICAyICAzICA0ICAuLi4gMTggMTkgMjAgMjEgMjIgMjMgMjQgMjUgMjYgMjcgMjggMjkgMzAgMzEKLSAgIFJQTi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgMCAgMCBFWCBXUiBaU0VMLi4uLi4uLiAgVyAgSSAgTSAgRwotCi0gICBXaGVyZSBwb3NzaWJsZSB3ZSBtYWtlIHRoZSBMaW51eCBQVEUgYml0cyBtYXRjaCB1cCB3aXRoIHRoaXMKLQotICAgLSBiaXRzIDIwIGFuZCAyMSBtdXN0IGJlIGNsZWFyZWQsIGJlY2F1c2Ugd2UgdXNlIDRrIHBhZ2VzICg0MHggY2FuCi0gICAgIHN1cHBvcnQgZG93biB0byAxayBwYWdlcyksIHRoaXMgaXMgZG9uZSBpbiB0aGUgVExCTWlzcyBleGNlcHRpb24KLSAgICAgaGFuZGxlci4KLSAgIC0gV2UgdXNlIG9ubHkgem9uZXMgMCAoZm9yIGtlcm5lbCBwYWdlcykgYW5kIDEgKGZvciB1c2VyIHBhZ2VzKQotICAgICBvZiB0aGUgMTYgYXZhaWxhYmxlLiAgQml0IDI0LTI2IG9mIHRoZSBUTEIgYXJlIGNsZWFyZWQgaW4gdGhlIFRMQgotICAgICBtaXNzIGhhbmRsZXIuICBCaXQgMjcgaXMgUEFHRV9VU0VSLCB0aHVzIHNlbGVjdGluZyB0aGUgY29ycmVjdAotICAgICB6b25lLgotICAgLSBQUkVTRU5UICptdXN0KiBiZSBpbiB0aGUgYm90dG9tIHR3byBiaXRzIGJlY2F1c2Ugc3dhcCBjYWNoZQotICAgICBlbnRyaWVzIHVzZSB0aGUgdG9wIDMwIGJpdHMuICBCZWNhdXNlIDQweCBkb2Vzbid0IHN1cHBvcnQgU01QCi0gICAgIGFueXdheSwgTSBpcyBpcnJlbGV2YW50IHNvIHdlIGJvcnJvdyBpdCBmb3IgUEFHRV9QUkVTRU5ULiAgQml0IDMwCi0gICAgIGlzIGNsZWFyZWQgaW4gdGhlIFRMQiBtaXNzIGhhbmRsZXIgYmVmb3JlIHRoZSBUTEIgZW50cnkgaXMgbG9hZGVkLgotICAgLSBBbGwgb3RoZXIgYml0cyBvZiB0aGUgUFRFIGFyZSBsb2FkZWQgaW50byBUTEJMTyB3aXRob3V0Ci0gICAgIG1vZGlmaWNhdGlvbiwgbGVhdmluZyB1cyBvbmx5IHRoZSBiaXRzIDIwLCAyMSwgMjQsIDI1LCAyNiwgMzAgZm9yCi0gICAgIHNvZnR3YXJlIFBURSBiaXRzLiAgV2UgYWN0dWFsbHkgdXNlIHVzZSBiaXRzIDIxLCAyNCwgMjUsIGFuZAotICAgICAzMCByZXNwZWN0aXZlbHkgZm9yIHRoZSBzb2Z0d2FyZSBiaXRzOiBBQ0NFU1NFRCwgRElSVFksIFJXLCBhbmQKLSAgICAgUFJFU0VOVC4KLSovCi0KLS8qIERlZmluaXRpb25zIGZvciA0MHggZW1iZWRkZWQgY2hpcHMuICovCi0jZGVmaW5lCV9QQUdFX0dVQVJERUQJMHgwMDEJLyogRzogcGFnZSBpcyBndWFyZGVkIGZyb20gcHJlZmV0Y2ggKi8KLSNkZWZpbmUgX1BBR0VfRklMRQkweDAwMQkvKiB3aGVuICFwcmVzZW50OiBub25saW5lYXIgZmlsZSBtYXBwaW5nICovCi0jZGVmaW5lIF9QQUdFX1BSRVNFTlQJMHgwMDIJLyogc29mdHdhcmU6IFBURSBjb250YWlucyBhIHRyYW5zbGF0aW9uICovCi0jZGVmaW5lCV9QQUdFX05PX0NBQ0hFCTB4MDA0CS8qIEk6IGNhY2hpbmcgaXMgaW5oaWJpdGVkICovCi0jZGVmaW5lCV9QQUdFX1dSSVRFVEhSVQkweDAwOAkvKiBXOiBjYWNoaW5nIGlzIHdyaXRlLXRocm91Z2ggKi8KLSNkZWZpbmUJX1BBR0VfVVNFUgkweDAxMAkvKiBtYXRjaGVzIG9uZSBvZiB0aGUgem9uZSBwZXJtaXNzaW9uIGJpdHMgKi8KLSNkZWZpbmUJX1BBR0VfUlcJMHgwNDAJLyogc29mdHdhcmU6IFdyaXRlcyBwZXJtaXR0ZWQgKi8KLSNkZWZpbmUJX1BBR0VfRElSVFkJMHgwODAJLyogc29mdHdhcmU6IGRpcnR5IHBhZ2UgKi8KLSNkZWZpbmUgX1BBR0VfSFdXUklURQkweDEwMAkvKiBoYXJkd2FyZTogRGlydHkgJiBSVywgc2V0IGluIGV4Y2VwdGlvbiAqLwotI2RlZmluZSBfUEFHRV9IV0VYRUMJMHgyMDAJLyogaGFyZHdhcmU6IEVYIHBlcm1pc3Npb24gKi8KLSNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHg0MDAJLyogc29mdHdhcmU6IFI6IHBhZ2UgcmVmZXJlbmNlZCAqLwotCi0jZGVmaW5lIF9QTURfUFJFU0VOVAkweDQwMAkvKiBQTUQgcG9pbnRzIHRvIHBhZ2Ugb2YgUFRFcyAqLwotI2RlZmluZSBfUE1EX0JBRAkweDgwMgotI2RlZmluZSBfUE1EX1NJWkUJMHgwZTAJLyogc2l6ZSBmaWVsZCwgIT0gMCBmb3IgbGFyZ2UtcGFnZSBQTUQgZW50cnkgKi8KLSNkZWZpbmUgX1BNRF9TSVpFXzRNCTB4MGMwCi0jZGVmaW5lIF9QTURfU0laRV8xNk0JMHgwZTAKLSNkZWZpbmUgUE1EX1BBR0VfU0laRShwbWR2YWwpCSgxMDI0IDw8ICgoKHBtZHZhbCkgJiBfUE1EX1NJWkUpID4+IDQpKQotCi0vKiBVbnRpbCBteSByZXdvcmsgaXMgZmluaXNoZWQsIDQweCBzdGlsbCBuZWVkcyBhdG9taWMgUFRFIHVwZGF0ZXMgKi8KLSNkZWZpbmUgUFRFX0FUT01JQ19VUERBVEVTCTEKLQorI2luY2x1ZGUgPGFzbS9wdGUtNDB4Lmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR180NHgpCi0vKgotICogRGVmaW5pdGlvbnMgZm9yIFBQQzQ0MAotICoKLSAqIEJlY2F1c2Ugb2YgdGhlIDMgd29yZCBUTEIgZW50cmllcyB0byBzdXBwb3J0IDM2LWJpdCBhZGRyZXNzaW5nLAotICogdGhlIGF0dHJpYnV0ZSBhcmUgZGlmZmljdWx0IHRvIG1hcCBpbiBzdWNoIGEgZmFzaGlvbiB0aGF0IHRoZXkKLSAqIGFyZSBlYXNpbHkgbG9hZGVkIGR1cmluZyBleGNlcHRpb24gcHJvY2Vzc2luZy4gIEkgZGVjaWRlZCB0bwotICogb3JnYW5pemUgdGhlIGVudHJ5IHNvIHRoZSBFUlBOIGlzIHRoZSBvbmx5IHBvcnRpb24gaW4gdGhlCi0gKiB1cHBlciB3b3JkIG9mIHRoZSBQVEUgYW5kIHRoZSBhdHRyaWJ1dGUgYml0cyBiZWxvdyBhcmUgcGFja2VkCi0gKiBpbiBhcyBzZW5zaWJseSBhcyB0aGV5IGNhbiBiZSBpbiB0aGUgYXJlYSBiZWxvdyBhIDRLQiBwYWdlIHNpemUKLSAqIG9yaWVudGVkIFJQTi4gIFRoaXMgYXQgbGVhc3QgbWFrZXMgaXQgZWFzeSB0byBsb2FkIHRoZSBSUE4gYW5kCi0gKiBFUlBOIGZpZWxkcyBpbiB0aGUgVExCLiAtTWF0dAotICoKLSAqIE5vdGUgdGhhdCB0aGVzZSBiaXRzIHByZWNsdWRlIGZ1dHVyZSB1c2Ugb2YgYSBwYWdlIHNpemUKLSAqIGxlc3MgdGhhbiA0S0IuCi0gKgotICoKLSAqIFBQQyA0NDAgY29yZSBoYXMgZm9sbG93aW5nIFRMQiBhdHRyaWJ1dGUgZmllbGRzOwotICoKLSAqICAgVExCMToKLSAqICAgMCAgMSAgMiAgMyAgNCAgLi4uIDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxCi0gKiAgIFJQTi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgLSAgLSAgLSAgLSAgLSAgLSBFUlBOLi4uLi4uLgotICoKLSAqICAgVExCMjoKLSAqICAgMCAgMSAgMiAgMyAgNCAgLi4uIDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxCi0gKiAgIC0gIC0gIC0gIC0gIC0gICAgLSBVMCBVMSBVMiBVMyBXICBJICBNICBHICBFICAgLSBVWCBVVyBVUiBTWCBTVyBTUgotICoKLSAqIE5ld2VyIDQ0MCBjb3JlcyAoNDQweDYgYXMgdXNlZCBvbiBBTUNDIDQ2MEVYLzQ2MEdUKSBoYXZlIGFkZGl0aW9uYWwKLSAqIFRMQjIgc3RvcmFnZSBhdHRpYnV0ZSBmaWVsZHMuIFRob3NlIGFyZToKLSAqCi0gKiAgIFRMQjI6Ci0gKiAgIDAuLi4xMCAgICAxMSAgIDEyICAgMTMgICAxNCAgIDE1ICAgMTYuLi4zMQotICogICBubyBjaGFuZ2UgV0wxICBJTDFJIElMMUQgSUwySSBJTDJEIG5vIGNoYW5nZQotICoKLSAqIFRoZXJlIGFyZSBzb21lIGNvbnN0cmFpbnMgYW5kIG9wdGlvbnMsIHRvIGRlY2lkZSBtYXBwaW5nIHNvZnR3YXJlIGJpdHMKLSAqIGludG8gVExCIGVudHJ5LgotICoKLSAqICAgLSBQUkVTRU5UICptdXN0KiBiZSBpbiB0aGUgYm90dG9tIHRocmVlIGJpdHMgYmVjYXVzZSBzd2FwIGNhY2hlCi0gKiAgICAgZW50cmllcyB1c2UgdGhlIHRvcCAyOSBiaXRzIGZvciBUTEIyLgotICoKLSAqICAgLSBGSUxFICptdXN0KiBiZSBpbiB0aGUgYm90dG9tIHRocmVlIGJpdHMgYmVjYXVzZSBzd2FwIGNhY2hlCi0gKiAgICAgZW50cmllcyB1c2UgdGhlIHRvcCAyOSBiaXRzIGZvciBUTEIyLgotICoKLSAqICAgLSBDQUNIRSBDT0hFUkVOVCBiaXQgKE0pIGhhcyBubyBlZmZlY3Qgb24gb3JpZ2luYWwgUFBDNDQwIGNvcmVzLAotICogICAgIGJlY2F1c2UgaXQgZG9lc24ndCBzdXBwb3J0IFNNUC4gSG93ZXZlciwgc29tZSBsYXRlciA0NjAgdmFyaWFudHMKLSAqICAgICBoYXZlIC1zb21lLSBmb3JtIG9mIFNNUCBzdXBwb3J0IGFuZCBzbyBJIGtlZXAgdGhlIGJpdCB0aGVyZSBmb3IKLSAqICAgICBmdXR1cmUgdXNlCi0gKgotICogV2l0aCB0aGUgUFBDIDQ0eCBMaW51eCBpbXBsZW1lbnRhdGlvbiwgdGhlIDAtMTF0aCBMU0JzIG9mIHRoZSBQVEUgYXJlIHVzZWQKLSAqIGZvciBtZW1vcnkgcHJvdGVjdGlvbiByZWxhdGVkIGZ1bmN0aW9ucyAoc2VlIFBURSBzdHJ1Y3R1cmUgaW4KLSAqIGluY2x1ZGUvYXNtLXBwYy9tbXUuaCkuICBUaGUgX1BBR0VfWFhYIGRlZmluaXRpb25zIGluIHRoaXMgZmlsZSBtYXAgdG8gdGhlCi0gKiBhYm92ZSBiaXRzLiAgTm90ZSB0aGF0IHRoZSBiaXQgdmFsdWVzIGFyZSBDUFUgc3BlY2lmaWMsIG5vdCBhcmNoaXRlY3R1cmUKLSAqIHNwZWNpZmljLgotICoKLSAqIFRoZSBrZXJuZWwgUFRFIGVudHJ5IGhvbGRzIGFuIGFyY2gtZGVwZW5kZW50IHN3cF9lbnRyeSBzdHJ1Y3R1cmUgdW5kZXIKLSAqIGNlcnRhaW4gc2l0dWF0aW9ucy4gSW4gb3RoZXIgd29yZHMsIGluIHN1Y2ggc2l0dWF0aW9ucyBzb21lIHBvcnRpb24gb2YKLSAqIHRoZSBQVEUgYml0cyBhcmUgdXNlZCBhcyBhIHN3cF9lbnRyeS4gSW4gdGhlIFBQQyBpbXBsZW1lbnRhdGlvbiwgdGhlCi0gKiAzLTI0dGggTFNCIGFyZSBzaGFyZWQgd2l0aCBzd3BfZW50cnksIGhvd2V2ZXIgdGhlIDAtMm5kIHRocmVlIExTQiBzdGlsbAotICogaG9sZCBwcm90ZWN0aW9uIHZhbHVlcy4gVGhhdCBtZWFucyB0aGUgdGhyZWUgcHJvdGVjdGlvbiBiaXRzIGFyZQotICogcmVzZXJ2ZWQgZm9yIGJvdGggUFRFIGFuZCBTV0FQIGVudHJ5IGF0IHRoZSBtb3N0IHNpZ25pZmljYW50IHRocmVlCi0gKiBMU0JzLgotICoKLSAqIFRoZXJlIGFyZSB0aHJlZSBwcm90ZWN0aW9uIGJpdHMgYXZhaWxhYmxlIGZvciBTV0FQIGVudHJ5OgotICoJX1BBR0VfUFJFU0VOVAotICoJX1BBR0VfRklMRQotICoJX1BBR0VfSEFTSFBURSAoaWYgSFcgaGFzKQotICoKLSAqIFNvIHRob3NlIHRocmVlIGJpdHMgaGF2ZSB0byBiZSBpbnNpZGUgb2YgMC0ybmQgTFNCIG9mIFBURS4KLSAqCi0gKi8KLQotI2RlZmluZSBfUEFHRV9QUkVTRU5UCTB4MDAwMDAwMDEJCS8qIFM6IFBURSB2YWxpZCAqLwotI2RlZmluZSBfUEFHRV9SVwkweDAwMDAwMDAyCQkvKiBTOiBXcml0ZSBwZXJtaXNzaW9uICovCi0jZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDAwMDAwNAkJLyogUzogbm9ubGluZWFyIGZpbGUgbWFwcGluZyAqLwotI2RlZmluZSBfUEFHRV9IV0VYRUMJMHgwMDAwMDAwNAkJLyogSDogRXhlY3V0ZSBwZXJtaXNzaW9uICovCi0jZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4MDAwMDAwMDgJCS8qIFM6IFBhZ2UgcmVmZXJlbmNlZCAqLwotI2RlZmluZSBfUEFHRV9ESVJUWQkweDAwMDAwMDEwCQkvKiBTOiBQYWdlIGRpcnR5ICovCi0jZGVmaW5lIF9QQUdFX1NQRUNJQUwJMHgwMDAwMDAyMAkJLyogUzogU3BlY2lhbCBwYWdlICovCi0jZGVmaW5lIF9QQUdFX1VTRVIJMHgwMDAwMDA0MAkJLyogUzogVXNlciBwYWdlICovCi0jZGVmaW5lIF9QQUdFX0VORElBTgkweDAwMDAwMDgwCQkvKiBIOiBFIGJpdCAqLwotI2RlZmluZSBfUEFHRV9HVUFSREVECTB4MDAwMDAxMDAJCS8qIEg6IEcgYml0ICovCi0jZGVmaW5lIF9QQUdFX0NPSEVSRU5UCTB4MDAwMDAyMDAJCS8qIEg6IE0gYml0ICovCi0jZGVmaW5lIF9QQUdFX05PX0NBQ0hFCTB4MDAwMDA0MDAJCS8qIEg6IEkgYml0ICovCi0jZGVmaW5lIF9QQUdFX1dSSVRFVEhSVQkweDAwMDAwODAwCQkvKiBIOiBXIGJpdCAqLwotCi0vKiBUT0RPOiBBZGQgbGFyZ2UgcGFnZSBsb3dtZW0gbWFwcGluZyBzdXBwb3J0ICovCi0jZGVmaW5lIF9QTURfUFJFU0VOVAkwCi0jZGVmaW5lIF9QTURfUFJFU0VOVF9NQVNLIChQQUdFX01BU0spCi0jZGVmaW5lIF9QTURfQkFECSh+UEFHRV9NQVNLKQotCi0vKiBFUlBOIGluIGEgUFRFIG5ldmVyIGdldHMgY2xlYXJlZCwgaWdub3JlIGl0ICovCi0jZGVmaW5lIF9QVEVfTk9ORV9NQVNLCTB4ZmZmZmZmZmYwMDAwMDAwMFVMTAotCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1BURV9TUEVDSUFMCi0KKyNpbmNsdWRlIDxhc20vcHRlLTQ0eC5oPgogI2VsaWYgZGVmaW5lZChDT05GSUdfRlNMX0JPT0tFKQotLyoKLSAgIE1NVSBBc3Npc3QgUmVnaXN0ZXIgMzoKLQotICAgMzIgMzMgMzQgMzUgMzYgIC4uLiA1MCA1MSA1MiA1MyA1NCA1NSA1NiA1NyA1OCA1OSA2MCA2MSA2MiA2MwotICAgUlBOLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgMCAgMCBVMCBVMSBVMiBVMyBVWCBTWCBVVyBTVyBVUiBTUgotCi0gICAtIFBSRVNFTlQgKm11c3QqIGJlIGluIHRoZSBib3R0b20gdGhyZWUgYml0cyBiZWNhdXNlIHN3YXAgY2FjaGUKLSAgICAgZW50cmllcyB1c2UgdGhlIHRvcCAyOSBiaXRzLgotCi0gICAtIEZJTEUgKm11c3QqIGJlIGluIHRoZSBib3R0b20gdGhyZWUgYml0cyBiZWNhdXNlIHN3YXAgY2FjaGUKLSAgICAgZW50cmllcyB1c2UgdGhlIHRvcCAyOSBiaXRzLgotKi8KLQotLyogRGVmaW5pdGlvbnMgZm9yIEZTTCBCb29rLUUgQ29yZXMgKi8KLSNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMDAxCS8qIFM6IFBURSBjb250YWlucyBhIHRyYW5zbGF0aW9uICovCi0jZGVmaW5lIF9QQUdFX1VTRVIJMHgwMDAwMgkvKiBTOiBVc2VyIHBhZ2UgKG1hcHMgdG8gVVIpICovCi0jZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDAwMgkvKiBTOiB3aGVuICFwcmVzZW50OiBub25saW5lYXIgZmlsZSBtYXBwaW5nICovCi0jZGVmaW5lIF9QQUdFX1JXCTB4MDAwMDQJLyogUzogV3JpdGUgcGVybWlzc2lvbiAoU1cpICovCi0jZGVmaW5lIF9QQUdFX0RJUlRZCTB4MDAwMDgJLyogUzogUGFnZSBkaXJ0eSAqLwotI2RlZmluZSBfUEFHRV9IV0VYRUMJMHgwMDAxMAkvKiBIOiBTWCBwZXJtaXNzaW9uICovCi0jZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4MDAwMjAJLyogUzogUGFnZSByZWZlcmVuY2VkICovCi0KLSNkZWZpbmUgX1BBR0VfRU5ESUFOCTB4MDAwNDAJLyogSDogRSBiaXQgKi8KLSNkZWZpbmUgX1BBR0VfR1VBUkRFRAkweDAwMDgwCS8qIEg6IEcgYml0ICovCi0jZGVmaW5lIF9QQUdFX0NPSEVSRU5UCTB4MDAxMDAJLyogSDogTSBiaXQgKi8KLSNkZWZpbmUgX1BBR0VfTk9fQ0FDSEUJMHgwMDIwMAkvKiBIOiBJIGJpdCAqLwotI2RlZmluZSBfUEFHRV9XUklURVRIUlUJMHgwMDQwMAkvKiBIOiBXIGJpdCAqLwotI2RlZmluZSBfUEFHRV9TUEVDSUFMCTB4MDA4MDAgLyogUzogU3BlY2lhbCBwYWdlICovCi0KLSNpZmRlZiBDT05GSUdfUFRFXzY0QklUCi0vKiBFUlBOIGluIGEgUFRFIG5ldmVyIGdldHMgY2xlYXJlZCwgaWdub3JlIGl0ICovCi0jZGVmaW5lIF9QVEVfTk9ORV9NQVNLCTB4ZmZmZmZmZmZmZmZmMDAwMFVMTAotI2VuZGlmCi0KLSNkZWZpbmUgX1BNRF9QUkVTRU5UCTAKLSNkZWZpbmUgX1BNRF9QUkVTRU5UX01BU0sgKFBBR0VfTUFTSykKLSNkZWZpbmUgX1BNRF9CQUQJKH5QQUdFX01BU0spCi0KLSNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NQRUNJQUwKLQorI2luY2x1ZGUgPGFzbS9wdGUtZnNsLWJvb2tlLmg+CiAjZWxpZiBkZWZpbmVkKENPTkZJR184eHgpCi0vKiBEZWZpbml0aW9ucyBmb3IgOHh4IGVtYmVkZGVkIGNoaXBzLiAqLwotI2RlZmluZSBfUEFHRV9QUkVTRU5UCTB4MDAwMQkvKiBQYWdlIGlzIHZhbGlkICovCi0jZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDAyCS8qIHdoZW4gIXByZXNlbnQ6IG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgKi8KLSNkZWZpbmUgX1BBR0VfTk9fQ0FDSEUJMHgwMDAyCS8qIEk6IGNhY2hlIGluaGliaXQgKi8KLSNkZWZpbmUgX1BBR0VfU0hBUkVECTB4MDAwNAkvKiBObyBBU0lEIChjb250ZXh0KSBjb21wYXJlICovCi0KLS8qIFRoZXNlIGZpdmUgc29mdHdhcmUgYml0cyBtdXN0IGJlIG1hc2tlZCBvdXQgd2hlbiB0aGUgZW50cnkgaXMgbG9hZGVkCi0gKiBpbnRvIHRoZSBUTEIuCi0gKi8KLSNkZWZpbmUgX1BBR0VfRVhFQwkweDAwMDgJLyogc29mdHdhcmU6IGktY2FjaGUgY29oZXJlbmN5IHJlcXVpcmVkICovCi0jZGVmaW5lIF9QQUdFX0dVQVJERUQJMHgwMDEwCS8qIHNvZnR3YXJlOiBndWFyZGVkIGFjY2VzcyAqLwotI2RlZmluZSBfUEFHRV9ESVJUWQkweDAwMjAJLyogc29mdHdhcmU6IHBhZ2UgY2hhbmdlZCAqLwotI2RlZmluZSBfUEFHRV9SVwkweDAwNDAJLyogc29mdHdhcmU6IHVzZXIgd3JpdGUgYWNjZXNzIGFsbG93ZWQgKi8KLSNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHgwMDgwCS8qIHNvZnR3YXJlOiBwYWdlIHJlZmVyZW5jZWQgKi8KLQotLyogU2V0dGluZyBhbnkgYml0cyBpbiB0aGUgbmliYmxlIHdpdGggdGhlIGZvbGxvdyB0d28gY29udHJvbHMgd2lsbAotICogcmVxdWlyZSBhIFRMQiBleGNlcHRpb24gaGFuZGxlciBjaGFuZ2UuICBJdCBpcyBhc3N1bWVkIHVudXNlZCBiaXRzCi0gKiBhcmUgYWx3YXlzIHplcm8uCi0gKi8KLSNkZWZpbmUgX1BBR0VfSFdXUklURQkweDAxMDAJLyogaC93IHdyaXRlIGVuYWJsZTogbmV2ZXIgc2V0IGluIExpbnV4IFBURSAqLwotI2RlZmluZSBfUEFHRV9VU0VSCTB4MDgwMAkvKiBPbmUgb2YgdGhlIFBQIGJpdHMsIHRoZSBvdGhlciBpcyBVU0VSJn5SVyAqLwotCi0jZGVmaW5lIF9QTURfUFJFU0VOVAkweDAwMDEKLSNkZWZpbmUgX1BNRF9CQUQJMHgwZmYwCi0jZGVmaW5lIF9QTURfUEFHRV9NQVNLCTB4MDAwYwotI2RlZmluZSBfUE1EX1BBR0VfOE0JMHgwMDBjCi0KLSNkZWZpbmUgX1BURV9OT05FX01BU0sgX1BBR0VfQUNDRVNTRUQKLQotLyogVW50aWwgbXkgcmV3b3JrIGlzIGZpbmlzaGVkLCA4eHggc3RpbGwgbmVlZHMgYXRvbWljIFBURSB1cGRhdGVzICovCi0jZGVmaW5lIFBURV9BVE9NSUNfVVBEQVRFUwkxCi0KKyNpbmNsdWRlIDxhc20vcHRlLTh4eC5oPgogI2Vsc2UgLyogQ09ORklHXzZ4eCAqLwotLyogRGVmaW5pdGlvbnMgZm9yIDYweCwgNzQwLzc1MCwgZXRjLiAqLwotI2RlZmluZSBfUEFHRV9QUkVTRU5UCTB4MDAxCS8qIHNvZnR3YXJlOiBwdGUgY29udGFpbnMgYSB0cmFuc2xhdGlvbiAqLwotI2RlZmluZSBfUEFHRV9IQVNIUFRFCTB4MDAyCS8qIGhhc2hfcGFnZSBoYXMgbWFkZSBhbiBIUFRFIGZvciB0aGlzIHB0ZSAqLwotI2RlZmluZSBfUEFHRV9GSUxFCTB4MDA0CS8qIHdoZW4gIXByZXNlbnQ6IG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgKi8KLSNkZWZpbmUgX1BBR0VfVVNFUgkweDAwNAkvKiB1c2VybW9kZSBhY2Nlc3MgYWxsb3dlZCAqLwotI2RlZmluZSBfUEFHRV9HVUFSREVECTB4MDA4CS8qIEc6IHByb2hpYml0IHNwZWN1bGF0aXZlIGFjY2VzcyAqLwotI2RlZmluZSBfUEFHRV9DT0hFUkVOVAkweDAxMAkvKiBNOiBlbmZvcmNlIG1lbW9yeSBjb2hlcmVuY2UgKFNNUCBzeXN0ZW1zKSAqLwotI2RlZmluZSBfUEFHRV9OT19DQUNIRQkweDAyMAkvKiBJOiBjYWNoZSBpbmhpYml0ICovCi0jZGVmaW5lIF9QQUdFX1dSSVRFVEhSVQkweDA0MAkvKiBXOiBjYWNoZSB3cml0ZS10aHJvdWdoICovCi0jZGVmaW5lIF9QQUdFX0RJUlRZCTB4MDgwCS8qIEM6IHBhZ2UgY2hhbmdlZCAqLwotI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkweDEwMAkvKiBSOiBwYWdlIHJlZmVyZW5jZWQgKi8KLSNkZWZpbmUgX1BBR0VfRVhFQwkweDIwMAkvKiBzb2Z0d2FyZTogaS1jYWNoZSBjb2hlcmVuY3kgcmVxdWlyZWQgKi8KLSNkZWZpbmUgX1BBR0VfUlcJMHg0MDAJLyogc29mdHdhcmU6IHVzZXIgd3JpdGUgYWNjZXNzIGFsbG93ZWQgKi8KLSNkZWZpbmUgX1BBR0VfU1BFQ0lBTAkweDgwMAkvKiBzb2Z0d2FyZTogU3BlY2lhbCBwYWdlICovCi0KLSNpZmRlZiBDT05GSUdfUFRFXzY0QklUCi0vKiBXZSBuZXZlciBjbGVhciB0aGUgaGlnaCB3b3JkIG9mIHRoZSBwdGUgKi8KLSNkZWZpbmUgX1BURV9OT05FX01BU0sJKDB4ZmZmZmZmZmYwMDAwMDAwMFVMTCB8IF9QQUdFX0hBU0hQVEUpCi0jZWxzZQotI2RlZmluZSBfUFRFX05PTkVfTUFTSwlfUEFHRV9IQVNIUFRFCisjaW5jbHVkZSA8YXNtL3B0ZS1oYXNoMzIuaD4KICNlbmRpZgogCi0jZGVmaW5lIF9QTURfUFJFU0VOVAkwCi0jZGVmaW5lIF9QTURfUFJFU0VOVF9NQVNLIChQQUdFX01BU0spCi0jZGVmaW5lIF9QTURfQkFECSh+UEFHRV9NQVNLKQotCi0vKiBIYXNoIHRhYmxlIGJhc2VkIHBsYXRmb3JtcyBuZWVkIGF0b21pYyB1cGRhdGVzIG9mIHRoZSBsaW51eCBQVEUgKi8KLSNkZWZpbmUgUFRFX0FUT01JQ19VUERBVEVTCTEKLQotI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfU1BFQ0lBTAotCi0jZW5kaWYKLQotLyoKLSAqIFNvbWUgYml0cyBhcmUgb25seSB1c2VkIG9uIHNvbWUgY3B1IGZhbWlsaWVzLi4uCi0gKi8KLSNpZm5kZWYgX1BBR0VfSEFTSFBURQotI2RlZmluZSBfUEFHRV9IQVNIUFRFCTAKLSNlbmRpZgotI2lmbmRlZiBfUFRFX05PTkVfTUFTSwotI2RlZmluZSBfUFRFX05PTkVfTUFTSyAwCi0jZW5kaWYKLSNpZm5kZWYgX1BBR0VfU0hBUkVECi0jZGVmaW5lIF9QQUdFX1NIQVJFRAkwCi0jZW5kaWYKLSNpZm5kZWYgX1BBR0VfSFdXUklURQotI2RlZmluZSBfUEFHRV9IV1dSSVRFCTAKLSNlbmRpZgotI2lmbmRlZiBfUEFHRV9IV0VYRUMKLSNkZWZpbmUgX1BBR0VfSFdFWEVDCTAKLSNlbmRpZgotI2lmbmRlZiBfUEFHRV9FWEVDCi0jZGVmaW5lIF9QQUdFX0VYRUMJMAotI2VuZGlmCi0jaWZuZGVmIF9QQUdFX0VORElBTgotI2RlZmluZSBfUEFHRV9FTkRJQU4JMAotI2VuZGlmCi0jaWZuZGVmIF9QQUdFX0NPSEVSRU5UCi0jZGVmaW5lIF9QQUdFX0NPSEVSRU5UCTAKLSNlbmRpZgotI2lmbmRlZiBfUEFHRV9XUklURVRIUlUKLSNkZWZpbmUgX1BBR0VfV1JJVEVUSFJVCTAKLSNlbmRpZgotI2lmbmRlZiBfUEFHRV9TUEVDSUFMCi0jZGVmaW5lIF9QQUdFX1NQRUNJQUwJMAotI2VuZGlmCi0jaWZuZGVmIF9QTURfUFJFU0VOVF9NQVNLCi0jZGVmaW5lIF9QTURfUFJFU0VOVF9NQVNLCV9QTURfUFJFU0VOVAotI2VuZGlmCi0jaWZuZGVmIF9QTURfU0laRQotI2RlZmluZSBfUE1EX1NJWkUJMAotI2RlZmluZSBQTURfUEFHRV9TSVpFKHBtZCkJYmFkX2NhbGxfdG9fUE1EX1BBR0VfU0laRSgpCi0jZW5kaWYKLQotI2RlZmluZSBfUEFHRV9DSEdfTUFTSwkoUEFHRV9NQVNLIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSB8IFwKLQkJCSBfUEFHRV9TUEVDSUFMKQotCi0KLSNkZWZpbmUgUEFHRV9QUk9UX0JJVFMJKF9QQUdFX0dVQVJERUQgfCBfUEFHRV9DT0hFUkVOVCB8IF9QQUdFX05PX0NBQ0hFIHwgXAotCQkJIF9QQUdFX1dSSVRFVEhSVSB8IF9QQUdFX0VORElBTiB8IFwKLQkJCSBfUEFHRV9VU0VSIHwgX1BBR0VfQUNDRVNTRUQgfCBcCi0JCQkgX1BBR0VfUlcgfCBfUEFHRV9IV1dSSVRFIHwgX1BBR0VfRElSVFkgfCBcCi0JCQkgX1BBR0VfRVhFQyB8IF9QQUdFX0hXRVhFQykKLQotLyoKLSAqIFdlIGRlZmluZSAyIHNldHMgb2YgYmFzZSBwcm90IGJpdHMsIG9uZSBmb3IgYmFzaWMgcGFnZXMgKGllLAotICogY2FjaGVhYmxlIGtlcm5lbCBhbmQgdXNlciBwYWdlcykgYW5kIG9uZSBmb3Igbm9uIGNhY2hlYWJsZQotICogcGFnZXMuIFdlIGFsd2F5cyBzZXQgX1BBR0VfQ09IRVJFTlQgd2hlbiBTTVAgaXMgZW5hYmxlZCBvcgotICogdGhlIHByb2Nlc3NvciBtaWdodCBuZWVkIGl0IGZvciBETUEgY29oZXJlbmN5LgotICovCi0jaWYgZGVmaW5lZChDT05GSUdfU01QKSB8fCBkZWZpbmVkKENPTkZJR19QUENfU1REX01NVSkKLSNkZWZpbmUgX1BBR0VfQkFTRQkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfQ09IRVJFTlQpCi0jZWxzZQotI2RlZmluZSBfUEFHRV9CQVNFCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQUNDRVNTRUQpCi0jZW5kaWYKLSNkZWZpbmUgX1BBR0VfQkFTRV9OQwkoX1BBR0VfUFJFU0VOVCB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfTk9fQ0FDSEUpCi0KLSNkZWZpbmUgX1BBR0VfV1JFTkFCTEUJKF9QQUdFX1JXIHwgX1BBR0VfRElSVFkgfCBfUEFHRV9IV1dSSVRFKQotI2RlZmluZSBfUEFHRV9LRVJORUwJKF9QQUdFX0JBU0UgfCBfUEFHRV9TSEFSRUQgfCBfUEFHRV9XUkVOQUJMRSkKLSNkZWZpbmUgX1BBR0VfS0VSTkVMX05DCShfUEFHRV9CQVNFX05DIHwgX1BBR0VfU0hBUkVEIHwgX1BBR0VfV1JFTkFCTEUpCi0KLSNpZmRlZiBDT05GSUdfUFBDX1NURF9NTVUKLS8qIE9uIHN0YW5kYXJkIFBQQyBNTVUsIG5vIHVzZXIgYWNjZXNzIGltcGxpZXMga2VybmVsIHJlYWQvd3JpdGUgYWNjZXNzLAotICogc28gdG8gd3JpdGUtcHJvdGVjdCBrZXJuZWwgbWVtb3J5IHdlIG11c3QgdHVybiBvbiB1c2VyIGFjY2VzcyAqLwotI2RlZmluZSBfUEFHRV9LRVJORUxfUk8JKF9QQUdFX0JBU0UgfCBfUEFHRV9TSEFSRUQgfCBfUEFHRV9VU0VSKQotI2Vsc2UKLSNkZWZpbmUgX1BBR0VfS0VSTkVMX1JPCShfUEFHRV9CQVNFIHwgX1BBR0VfU0hBUkVEKQotI2VuZGlmCi0KLSNkZWZpbmUgX1BBR0VfSU8JKF9QQUdFX0tFUk5FTF9OQyB8IF9QQUdFX0dVQVJERUQpCi0jZGVmaW5lIF9QQUdFX1JBTQkoX1BBR0VfS0VSTkVMIHwgX1BBR0VfSFdFWEVDKQotCi0jaWYgZGVmaW5lZChDT05GSUdfS0dEQikgfHwgZGVmaW5lZChDT05GSUdfWE1PTikgfHwgZGVmaW5lZChDT05GSUdfQkRJX1NXSVRDSCkgfHxcCi0JZGVmaW5lZChDT05GSUdfS1BST0JFUykKLS8qIFdlIHdhbnQgdGhlIGRlYnVnZ2VycyB0byBiZSBhYmxlIHRvIHNldCBicmVha3BvaW50cyBhbnl3aGVyZSwgc28KLSAqIGRvbid0IHdyaXRlIHByb3RlY3QgdGhlIGtlcm5lbCB0ZXh0ICovCi0jZGVmaW5lIF9QQUdFX1JBTV9URVhUCV9QQUdFX1JBTQotI2Vsc2UKLSNkZWZpbmUgX1BBR0VfUkFNX1RFWFQJKF9QQUdFX0tFUk5FTF9STyB8IF9QQUdFX0hXRVhFQykKLSNlbmRpZgotCi0jZGVmaW5lIFBBR0VfTk9ORQlfX3BncHJvdChfUEFHRV9CQVNFKQotI2RlZmluZSBQQUdFX1JFQURPTkxZCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSKQotI2RlZmluZSBQQUdFX1JFQURPTkxZX1gJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIgfCBfUEFHRV9FWEVDKQotI2RlZmluZSBQQUdFX1NIQVJFRAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUiB8IF9QQUdFX1JXKQotI2RlZmluZSBQQUdFX1NIQVJFRF9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSIHwgX1BBR0VfUlcgfCBfUEFHRV9FWEVDKQotI2RlZmluZSBQQUdFX0NPUFkJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIpCi0jZGVmaW5lIFBBR0VfQ09QWV9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQykKLQotI2RlZmluZSBQQUdFX0tFUk5FTAkJX19wZ3Byb3QoX1BBR0VfUkFNKQotI2RlZmluZSBQQUdFX0tFUk5FTF9OT0NBQ0hFCV9fcGdwcm90KF9QQUdFX0lPKQotCi0vKgotICogVGhlIFBvd2VyUEMgY2FuIG9ubHkgZG8gZXhlY3V0ZSBwcm90ZWN0aW9uIG9uIGEgc2VnbWVudCAoMjU2TUIpIGJhc2lzLAotICogbm90IG9uIGEgcGFnZSBiYXNpcy4gIFNvIHdlIGNvbnNpZGVyIGV4ZWN1dGUgcGVybWlzc2lvbiB0aGUgc2FtZSBhcyByZWFkLgotICogQWxzbywgd3JpdGUgcGVybWlzc2lvbnMgaW1wbHkgcmVhZCBwZXJtaXNzaW9ucy4KLSAqIFRoaXMgaXMgdGhlIGNsb3Nlc3Qgd2UgY2FuIGdldC4uCi0gKi8KLSNkZWZpbmUgX19QMDAwCVBBR0VfTk9ORQotI2RlZmluZSBfX1AwMDEJUEFHRV9SRUFET05MWV9YCi0jZGVmaW5lIF9fUDAxMAlQQUdFX0NPUFkKLSNkZWZpbmUgX19QMDExCVBBR0VfQ09QWV9YCi0jZGVmaW5lIF9fUDEwMAlQQUdFX1JFQURPTkxZCi0jZGVmaW5lIF9fUDEwMQlQQUdFX1JFQURPTkxZX1gKLSNkZWZpbmUgX19QMTEwCVBBR0VfQ09QWQotI2RlZmluZSBfX1AxMTEJUEFHRV9DT1BZX1gKLQotI2RlZmluZSBfX1MwMDAJUEFHRV9OT05FCi0jZGVmaW5lIF9fUzAwMQlQQUdFX1JFQURPTkxZX1gKLSNkZWZpbmUgX19TMDEwCVBBR0VfU0hBUkVECi0jZGVmaW5lIF9fUzAxMQlQQUdFX1NIQVJFRF9YCi0jZGVmaW5lIF9fUzEwMAlQQUdFX1JFQURPTkxZCi0jZGVmaW5lIF9fUzEwMQlQQUdFX1JFQURPTkxZX1gKLSNkZWZpbmUgX19TMTEwCVBBR0VfU0hBUkVECi0jZGVmaW5lIF9fUzExMQlQQUdFX1NIQVJFRF9YCisvKiBBbmQgaGVyZSB3ZSBpbmNsdWRlIGNvbW1vbiBkZWZpbml0aW9ucyAqLworI2luY2x1ZGUgPGFzbS9wdGUtY29tbW9uLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCi0vKiBNYWtlIHN1cmUgd2UgZ2V0IGEgbGluayBlcnJvciBpZiBQTURfUEFHRV9TSVpFIGlzIGV2ZXIgY2FsbGVkIG9uIGEKLSAqIGtlcm5lbCB3aXRob3V0IGxhcmdlIHBhZ2UgUE1EIHN1cHBvcnQgKi8KLWV4dGVybiB1bnNpZ25lZCBsb25nIGJhZF9jYWxsX3RvX1BNRF9QQUdFX1NJWkUodm9pZCk7CiAKLS8qCi0gKiBDb252ZXJzaW9ucyBiZXR3ZWVuIFBURSB2YWx1ZXMgYW5kIHBhZ2UgZnJhbWUgbnVtYmVycy4KLSAqLwotCi0vKiBpbiBzb21lIGNhc2Ugd2Ugd2FudCB0byBhZGRpdGlvbmFseSBhZGp1c3Qgd2hlcmUgdGhlIHBmbiBpcyBpbiB0aGUgcHRlIHRvCi0gKiBhbGxvdyByb29tIGZvciBtb3JlIGZsYWdzICovCi0jaWYgZGVmaW5lZChDT05GSUdfRlNMX0JPT0tFKSAmJiBkZWZpbmVkKENPTkZJR19QVEVfNjRCSVQpCi0jZGVmaW5lIFBGTl9TSElGVF9PRkZTRVQJKFBBR0VfU0hJRlQgKyA4KQotI2Vsc2UKLSNkZWZpbmUgUEZOX1NISUZUX09GRlNFVAkoUEFHRV9TSElGVCkKLSNlbmRpZgotCi0jZGVmaW5lIHB0ZV9wZm4oeCkJCShwdGVfdmFsKHgpID4+IFBGTl9TSElGVF9PRkZTRVQpCi0jZGVmaW5lIHB0ZV9wYWdlKHgpCQlwZm5fdG9fcGFnZShwdGVfcGZuKHgpKQotCi0jZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KQlfX3B0ZSgoKHB0ZV9iYXNpY190KShwZm4pIDw8IFBGTl9TSElGVF9PRkZTRVQpIHxcCi0JCQkJCXBncHJvdF92YWwocHJvdCkpCi0jZGVmaW5lIG1rX3B0ZShwYWdlLCBwcm90KQlwZm5fcHRlKHBhZ2VfdG9fcGZuKHBhZ2UpLCBwcm90KQotI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwotCi0jZGVmaW5lIHB0ZV9ub25lKHB0ZSkJCSgocHRlX3ZhbChwdGUpICYgfl9QVEVfTk9ORV9NQVNLKSA9PSAwKQotI2RlZmluZSBwdGVfcHJlc2VudChwdGUpCShwdGVfdmFsKHB0ZSkgJiBfUEFHRV9QUkVTRU5UKQogI2RlZmluZSBwdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApIFwKIAlkbyB7IHB0ZV91cGRhdGUocHRlcCwgfl9QQUdFX0hBU0hQVEUsIDApOyB9IHdoaWxlICgwKQogCkBAIC01NDYsNDMgKzExMCw2IEBACiAjZGVmaW5lCXBtZF9wcmVzZW50KHBtZCkJKHBtZF92YWwocG1kKSAmIF9QTURfUFJFU0VOVF9NQVNLKQogI2RlZmluZQlwbWRfY2xlYXIocG1kcCkJCWRvIHsgcG1kX3ZhbCgqKHBtZHApKSA9IDA7IH0gd2hpbGUgKDApCiAKLSNpZm5kZWYgX19BU1NFTUJMWV9fCi0vKgotICogVGhlIGZvbGxvd2luZyBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKSBpcyB0cnVlLgotICogVW5kZWZpbmVkIGJlaGF2aW91ciBpZiBub3QuLgotICovCi1zdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfUlc7IH0KLXN0YXRpYyBpbmxpbmUgaW50IHB0ZV9kaXJ0eShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9ESVJUWTsgfQotc3RhdGljIGlubGluZSBpbnQgcHRlX3lvdW5nKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0FDQ0VTU0VEOyB9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9GSUxFOyB9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfc3BlY2lhbChwdGVfdCBwdGUpCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1NQRUNJQUw7IH0KLQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0KHB0ZV90IHB0ZSkgewotCXB0ZV92YWwocHRlKSAmPSB+KF9QQUdFX1JXIHwgX1BBR0VfSFdXUklURSk7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKSB7Ci0JcHRlX3ZhbChwdGUpICY9IH4oX1BBR0VfRElSVFkgfCBfUEFHRV9IV1dSSVRFKTsgcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtvbGQocHRlX3QgcHRlKSB7Ci0JcHRlX3ZhbChwdGUpICY9IH5fUEFHRV9BQ0NFU1NFRDsgcmV0dXJuIHB0ZTsgfQotCi1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkgewotCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9SVzsgcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpIHsKLQlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfRElSVFk7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKSB7Ci0JcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9Ci1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3NwZWNpYWwocHRlX3QgcHRlKSB7Ci0JcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1NQRUNJQUw7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcGdwcm90X3QgcHRlX3BncHJvdChwdGVfdCBwdGUpCi17Ci0JcmV0dXJuIF9fcGdwcm90KHB0ZV92YWwocHRlKSAmIFBBR0VfUFJPVF9CSVRTKTsKLX0KLQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJvdCkKLXsKLQlwdGVfdmFsKHB0ZSkgPSAocHRlX3ZhbChwdGUpICYgX1BBR0VfQ0hHX01BU0spIHwgcGdwcm90X3ZhbChuZXdwcm90KTsKLQlyZXR1cm4gcHRlOwotfQotCiAvKgogICogV2hlbiBmbHVzaGluZyB0aGUgdGxiIGVudHJ5IGZvciBhIHBhZ2UsIHdlIGFsc28gbmVlZCB0byBmbHVzaCB0aGUgaGFzaAogICogdGFibGUgZW50cnkuICBmbHVzaF9oYXNoX3BhZ2VzIGlzIGFzc2VtYmxlciAoZm9yIHNwZWVkKSBpbiBoYXNodGFibGUuUy4KQEAgLTU5OSwxMSArMTI2LDE5IEBACiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyk7CiAKIC8qCi0gKiBBdG9taWMgUFRFIHVwZGF0ZXMuCisgKiBQVEUgdXBkYXRlcy4gVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbmV2ZXIgYW4gZXhpc3RpbmcKKyAqIHZhbGlkIFBURSBpcyB1cGRhdGVkLiBUaGlzIGRvZXMgLW5vdC0gaW5jbHVkZSBzZXRfcHRlX2F0KCkKKyAqIHdoaWNoIG5vd2FkYXlzIG9ubHkgc2V0cyBhIG5ldyBQVEUuCiAgKgotICogcHRlX3VwZGF0ZSBjbGVhcnMgYW5kIHNldHMgYml0IGF0b21pY2FsbHksIGFuZCByZXR1cm5zCi0gKiB0aGUgb2xkIHB0ZSB2YWx1ZS4gIEluIHRoZSA2NC1iaXQgUFRFIGNhc2Ugd2UgbG9jayBhcm91bmQgdGhlCi0gKiBsb3cgUFRFIHdvcmQgc2luY2Ugd2UgZXhwZWN0IEFMTCBmbGFnIGJpdHMgdG8gYmUgdGhlcmUKKyAqIERlcGVuZGluZyBvbiB0aGUgdHlwZSBvZiBNTVUsIHdlIG1heSBuZWVkIHRvIHVzZSBhdG9taWMgdXBkYXRlcworICogYW5kIHRoZSBQVEUgbWF5IGJlIGVpdGhlciAzMiBvciA2NCBiaXQgd2lkZS4gSW4gdGhlIGxhdGVyIGNhc2UsCisgKiB3aGVuIHVzaW5nIGF0b21pYyB1cGRhdGVzLCBvbmx5IHRoZSBsb3cgcGFydCBvZiB0aGUgUFRFIGlzCisgKiBhY2Nlc3NlZCBhdG9taWNhbGx5LgorICoKKyAqIEluIGFkZGl0aW9uLCBvbiA0NHgsIHdlIGFsc28gbWFpbnRhaW4gYSBnbG9iYWwgZmxhZyBpbmRpY2F0aW5nCisgKiB0aGF0IGFuIGV4ZWN1dGFibGUgdXNlciBtYXBwaW5nIHdhcyBtb2RpZmllZCwgd2hpY2ggaXMgbmVlZGVkCisgKiB0byBwcm9wZXJseSBmbHVzaCB0aGUgdmlydHVhbGx5IHRhZ2dlZCBpbnN0cnVjdGlvbiBjYWNoZSBvZgorICogdGhvc2UgaW1wbGVtZW50YXRpb25zLgogICovCiAjaWZuZGVmIENPTkZJR19QVEVfNjRCSVQKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfdXBkYXRlKHB0ZV90ICpwLApAQCAtNjY4LDQ0ICsyMDMsNiBAQAogI2VuZGlmIC8qIENPTkZJR19QVEVfNjRCSVQgKi8KIAogLyoKLSAqIHNldF9wdGUgc3RvcmVzIGEgbGludXggUFRFIGludG8gdGhlIGxpbnV4IHBhZ2UgdGFibGUuCi0gKiBPbiBtYWNoaW5lcyB3aGljaCB1c2UgYW4gTU1VIGhhc2ggdGFibGUgd2UgYXZvaWQgY2hhbmdpbmcgdGhlCi0gKiBfUEFHRV9IQVNIUFRFIGJpdC4KLSAqLwotCi1zdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkgICAgICBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQotewotI2lmIChfUEFHRV9IQVNIUFRFICE9IDApICYmIGRlZmluZWQoQ09ORklHX1NNUCkgJiYgIWRlZmluZWQoQ09ORklHX1BURV82NEJJVCkKLQlwdGVfdXBkYXRlKHB0ZXAsIH5fUEFHRV9IQVNIUFRFLCBwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfSEFTSFBURSk7Ci0jZWxpZiBkZWZpbmVkKENPTkZJR19QVEVfNjRCSVQpICYmIGRlZmluZWQoQ09ORklHX1NNUCkKLSNpZiBfUEFHRV9IQVNIUFRFICE9IDAKLQlpZiAocHRlX3ZhbCgqcHRlcCkgJiBfUEFHRV9IQVNIUFRFKQotCQlmbHVzaF9oYXNoX2VudHJ5KG1tLCBwdGVwLCBhZGRyKTsKLSNlbmRpZgotCV9fYXNtX18gX192b2xhdGlsZV9fKCJcCi0JCXN0dyVVMCVYMCAlMiwlMFxuXAotCQllaWVpb1xuXAotCQlzdHclVTAlWDAgJUwyLCUxIgotCTogIj1tIiAoKnB0ZXApLCAiPW0iICgqKCh1bnNpZ25lZCBjaGFyICopcHRlcCs0KSkKLQk6ICJyIiAocHRlKSA6ICJtZW1vcnkiKTsKLSNlbHNlCi0JKnB0ZXAgPSBfX3B0ZSgocHRlX3ZhbCgqcHRlcCkgJiBfUEFHRV9IQVNIUFRFKQotCQkgICAgICB8IChwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfSEFTSFBURSkpOwotI2VuZGlmCi19Ci0KLQotc3RhdGljIGlubGluZSB2b2lkIHNldF9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCi17Ci0jaWYgZGVmaW5lZChDT05GSUdfUFRFXzY0QklUKSAmJiBkZWZpbmVkKENPTkZJR19TTVApICYmIGRlZmluZWQoQ09ORklHX0RFQlVHX1ZNKQotCVdBUk5fT04ocHRlX3ByZXNlbnQoKnB0ZXApKTsKLSNlbmRpZgotCV9fc2V0X3B0ZV9hdChtbSwgYWRkciwgcHRlcCwgcHRlKTsKLX0KLQotLyoKICAqIDIuNiBjYWxscyB0aGlzIHdpdGhvdXQgZmx1c2hpbmcgdGhlIFRMQiBlbnRyeTsgdGhpcyBpcyB3cm9uZwogICogZm9yIG91ciBoYXNoLWJhc2VkIGltcGxlbWVudGF0aW9uLCB3ZSBmaXggdGhhdCB1cCBoZXJlLgogICovCkBAIC03NDUsMjQgKzI0MiwxNCBAQAogfQogCiAKLSNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFUF9TRVRfQUNDRVNTX0ZMQUdTCi1zdGF0aWMgaW5saW5lIHZvaWQgX19wdGVwX3NldF9hY2Nlc3NfZmxhZ3MocHRlX3QgKnB0ZXAsIHB0ZV90IGVudHJ5LCBpbnQgZGlydHkpCitzdGF0aWMgaW5saW5lIHZvaWQgX19wdGVwX3NldF9hY2Nlc3NfZmxhZ3MocHRlX3QgKnB0ZXAsIHB0ZV90IGVudHJ5KQogewogCXVuc2lnbmVkIGxvbmcgYml0cyA9IHB0ZV92YWwoZW50cnkpICYKLQkJKF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9SVyk7CisJCShfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfUlcgfAorCQkgX1BBR0VfSFdFWEVDIHwgX1BBR0VfRVhFQyk7CiAJcHRlX3VwZGF0ZShwdGVwLCAwLCBiaXRzKTsKIH0KIAotI2RlZmluZSAgcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKF9fdm1hLCBfX2FkZHJlc3MsIF9fcHRlcCwgX19lbnRyeSwgX19kaXJ0eSkgXAotKHsJCQkJCQkJCQkgICBcCi0JaW50IF9fY2hhbmdlZCA9ICFwdGVfc2FtZSgqKF9fcHRlcCksIF9fZW50cnkpOwkJCSAgIFwKLQlpZiAoX19jaGFuZ2VkKSB7CQkJCQkJICAgXAotCQlfX3B0ZXBfc2V0X2FjY2Vzc19mbGFncyhfX3B0ZXAsIF9fZW50cnksIF9fZGlydHkpOyAgICAgICAgIFwKLQkJZmx1c2hfdGxiX3BhZ2Vfbm9oYXNoKF9fdm1hLCBfX2FkZHJlc3MpOwkJICAgXAotCX0JCQkJCQkJCSAgIFwKLQlfX2NoYW5nZWQ7CQkJCQkJCSAgIFwKLX0pCi0KICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NBTUUKICNkZWZpbmUgcHRlX3NhbWUoQSxCKQkoKChwdGVfdmFsKEEpIF4gcHRlX3ZhbChCKSkgJiB+X1BBR0VfSEFTSFBURSkgPT0gMCkKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjNjQtNGsuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LTRrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmVlZmRjZgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LTRrLmgKQEAgLTAsMCArMSw3NCBAQAorI2lmbmRlZiBfQVNNX1BPV0VSUENfUEdUQUJMRV9QUEM2NF80S19ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19QR1RBQkxFX1BQQzY0XzRLX0gKKy8qCisgKiBFbnRyaWVzIHBlciBwYWdlIGRpcmVjdG9yeSBsZXZlbC4gIFRoZSBQVEUgbGV2ZWwgbXVzdCB1c2UgYSA2NGIgcmVjb3JkCisgKiBmb3IgZWFjaCBwYWdlIHRhYmxlIGVudHJ5LiAgVGhlIFBNRCBhbmQgUEdEIGxldmVsIHVzZSBhIDMyYiByZWNvcmQgZm9yCisgKiBlYWNoIGVudHJ5IGJ5IGFzc3VtaW5nIHRoYXQgZWFjaCBlbnRyeSBpcyBwYWdlIGFsaWduZWQuCisgKi8KKyNkZWZpbmUgUFRFX0lOREVYX1NJWkUgIDkKKyNkZWZpbmUgUE1EX0lOREVYX1NJWkUgIDcKKyNkZWZpbmUgUFVEX0lOREVYX1NJWkUgIDcKKyNkZWZpbmUgUEdEX0lOREVYX1NJWkUgIDkKKworI2lmbmRlZiBfX0FTU0VNQkxZX18KKyNkZWZpbmUgUFRFX1RBQkxFX1NJWkUJKHNpemVvZihwdGVfdCkgPDwgUFRFX0lOREVYX1NJWkUpCisjZGVmaW5lIFBNRF9UQUJMRV9TSVpFCShzaXplb2YocG1kX3QpIDw8IFBNRF9JTkRFWF9TSVpFKQorI2RlZmluZSBQVURfVEFCTEVfU0laRQkoc2l6ZW9mKHB1ZF90KSA8PCBQVURfSU5ERVhfU0laRSkKKyNkZWZpbmUgUEdEX1RBQkxFX1NJWkUJKHNpemVvZihwZ2RfdCkgPDwgUEdEX0lOREVYX1NJWkUpCisjZW5kaWYJLyogX19BU1NFTUJMWV9fICovCisKKyNkZWZpbmUgUFRSU19QRVJfUFRFCSgxIDw8IFBURV9JTkRFWF9TSVpFKQorI2RlZmluZSBQVFJTX1BFUl9QTUQJKDEgPDwgUE1EX0lOREVYX1NJWkUpCisjZGVmaW5lIFBUUlNfUEVSX1BVRAkoMSA8PCBQTURfSU5ERVhfU0laRSkKKyNkZWZpbmUgUFRSU19QRVJfUEdECSgxIDw8IFBHRF9JTkRFWF9TSVpFKQorCisvKiBQTURfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLworI2RlZmluZSBQTURfU0hJRlQJKFBBR0VfU0hJRlQgKyBQVEVfSU5ERVhfU0laRSkKKyNkZWZpbmUgUE1EX1NJWkUJKDFVTCA8PCBQTURfU0hJRlQpCisjZGVmaW5lIFBNRF9NQVNLCSh+KFBNRF9TSVpFLTEpKQorCisvKiBXaXRoIDRrIGJhc2UgcGFnZSBzaXplLCBodWdlcGFnZSBQVEVzIGdvIGF0IHRoZSBQTUQgbGV2ZWwgKi8KKyNkZWZpbmUgTUlOX0hVR0VQVEVfU0hJRlQJUE1EX1NISUZUCisKKy8qIFBVRF9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSB0aGlyZC1sZXZlbCBwYWdlIHRhYmxlIGVudHJ5IGNhbiBtYXAgKi8KKyNkZWZpbmUgUFVEX1NISUZUCShQTURfU0hJRlQgKyBQTURfSU5ERVhfU0laRSkKKyNkZWZpbmUgUFVEX1NJWkUJKDFVTCA8PCBQVURfU0hJRlQpCisjZGVmaW5lIFBVRF9NQVNLCSh+KFBVRF9TSVpFLTEpKQorCisvKiBQR0RJUl9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSBmb3VydGgtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwICovCisjZGVmaW5lIFBHRElSX1NISUZUCShQVURfU0hJRlQgKyBQVURfSU5ERVhfU0laRSkKKyNkZWZpbmUgUEdESVJfU0laRQkoMVVMIDw8IFBHRElSX1NISUZUKQorI2RlZmluZSBQR0RJUl9NQVNLCSh+KFBHRElSX1NJWkUtMSkpCisKKy8qIEJpdHMgdG8gbWFzayBvdXQgZnJvbSBhIFBNRCB0byBnZXQgdG8gdGhlIFBURSBwYWdlICovCisjZGVmaW5lIFBNRF9NQVNLRURfQklUUwkJMAorLyogQml0cyB0byBtYXNrIG91dCBmcm9tIGEgUFVEIHRvIGdldCB0byB0aGUgUE1EIHBhZ2UgKi8KKyNkZWZpbmUgUFVEX01BU0tFRF9CSVRTCQkwCisvKiBCaXRzIHRvIG1hc2sgb3V0IGZyb20gYSBQR0QgdG8gZ2V0IHRvIHRoZSBQVUQgcGFnZSAqLworI2RlZmluZSBQR0RfTUFTS0VEX0JJVFMJCTAKKworCisvKgorICogNC1sZXZlbCBwYWdlIHRhYmxlcyByZWxhdGVkIGJpdHMKKyAqLworCisjZGVmaW5lIHBnZF9ub25lKHBnZCkJCSghcGdkX3ZhbChwZ2QpKQorI2RlZmluZSBwZ2RfYmFkKHBnZCkJCShwZ2RfdmFsKHBnZCkgPT0gMCkKKyNkZWZpbmUgcGdkX3ByZXNlbnQocGdkKQkocGdkX3ZhbChwZ2QpICE9IDApCisjZGVmaW5lIHBnZF9jbGVhcihwZ2RwKQkJKHBnZF92YWwoKihwZ2RwKSkgPSAwKQorI2RlZmluZSBwZ2RfcGFnZV92YWRkcihwZ2QpCShwZ2RfdmFsKHBnZCkgJiB+UEdEX01BU0tFRF9CSVRTKQorI2RlZmluZSBwZ2RfcGFnZShwZ2QpCQl2aXJ0X3RvX3BhZ2UocGdkX3BhZ2VfdmFkZHIocGdkKSkKKworI2RlZmluZSBwdWRfb2Zmc2V0KHBnZHAsIGFkZHIpCVwKKyAgKCgocHVkX3QgKikgcGdkX3BhZ2VfdmFkZHIoKihwZ2RwKSkpICsgXAorICAgICgoKGFkZHIpID4+IFBVRF9TSElGVCkgJiAoUFRSU19QRVJfUFVEIC0gMSkpKQorCisjZGVmaW5lIHB1ZF9FUlJPUihlKSBcCisJcHJpbnRrKCIlczolZDogYmFkIHB1ZCAlMDhseC5cbiIsIF9fRklMRV9fLCBfX0xJTkVfXywgcHVkX3ZhbChlKSkKKworLyoKKyAqIE9uIGFsbCA0SyBzZXR1cHMsIHJlbWFwXzRrX3BmbigpIGVxdWF0ZXMgdG8gcmVtYXBfcGZuX3JhbmdlKCkgKi8KKyNkZWZpbmUgcmVtYXBfNGtfcGZuKHZtYSwgYWRkciwgcGZuLCBwcm90KQlcCisJcmVtYXBfcGZuX3JhbmdlKCh2bWEpLCAoYWRkciksIChwZm4pLCBQQUdFX1NJWkUsIChwcm90KSkKKworI2VuZGlmIC8qIF9BU01fUE9XRVJQQ19QR1RBQkxFX1BQQzY0XzRLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LTY0ay5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjNjQtNjRrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmNjMDg1YgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LTY0ay5oCkBAIC0wLDAgKzEsNDIgQEAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX1BHVEFCTEVfUFBDNjRfNjRLX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX1BHVEFCTEVfUFBDNjRfNjRLX0gKKworI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaD4KKworCisjZGVmaW5lIFBURV9JTkRFWF9TSVpFICAxMgorI2RlZmluZSBQTURfSU5ERVhfU0laRSAgMTIKKyNkZWZpbmUgUFVEX0lOREVYX1NJWkUJMAorI2RlZmluZSBQR0RfSU5ERVhfU0laRSAgNAorCisjaWZuZGVmIF9fQVNTRU1CTFlfXworCisjZGVmaW5lIFBURV9UQUJMRV9TSVpFCShzaXplb2YocmVhbF9wdGVfdCkgPDwgUFRFX0lOREVYX1NJWkUpCisjZGVmaW5lIFBNRF9UQUJMRV9TSVpFCShzaXplb2YocG1kX3QpIDw8IFBNRF9JTkRFWF9TSVpFKQorI2RlZmluZSBQR0RfVEFCTEVfU0laRQkoc2l6ZW9mKHBnZF90KSA8PCBQR0RfSU5ERVhfU0laRSkKKworI2RlZmluZSBQVFJTX1BFUl9QVEUJKDEgPDwgUFRFX0lOREVYX1NJWkUpCisjZGVmaW5lIFBUUlNfUEVSX1BNRAkoMSA8PCBQTURfSU5ERVhfU0laRSkKKyNkZWZpbmUgUFRSU19QRVJfUEdECSgxIDw8IFBHRF9JTkRFWF9TSVpFKQorCisvKiBXaXRoIDRrIGJhc2UgcGFnZSBzaXplLCBodWdlcGFnZSBQVEVzIGdvIGF0IHRoZSBQTUQgbGV2ZWwgKi8KKyNkZWZpbmUgTUlOX0hVR0VQVEVfU0hJRlQJUEFHRV9TSElGVAorCisvKiBQTURfU0hJRlQgZGV0ZXJtaW5lcyB3aGF0IGEgc2Vjb25kLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLworI2RlZmluZSBQTURfU0hJRlQJKFBBR0VfU0hJRlQgKyBQVEVfSU5ERVhfU0laRSkKKyNkZWZpbmUgUE1EX1NJWkUJKDFVTCA8PCBQTURfU0hJRlQpCisjZGVmaW5lIFBNRF9NQVNLCSh+KFBNRF9TSVpFLTEpKQorCisvKiBQR0RJUl9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSB0aGlyZC1sZXZlbCBwYWdlIHRhYmxlIGVudHJ5IGNhbiBtYXAgKi8KKyNkZWZpbmUgUEdESVJfU0hJRlQJKFBNRF9TSElGVCArIFBNRF9JTkRFWF9TSVpFKQorI2RlZmluZSBQR0RJUl9TSVpFCSgxVUwgPDwgUEdESVJfU0hJRlQpCisjZGVmaW5lIFBHRElSX01BU0sJKH4oUEdESVJfU0laRS0xKSkKKworI2VuZGlmCS8qIF9fQVNTRU1CTFlfXyAqLworCisvKiBCaXRzIHRvIG1hc2sgb3V0IGZyb20gYSBQTUQgdG8gZ2V0IHRvIHRoZSBQVEUgcGFnZSAqLworI2RlZmluZSBQTURfTUFTS0VEX0JJVFMJCTB4MWZmCisvKiBCaXRzIHRvIG1hc2sgb3V0IGZyb20gYSBQR0QvUFVEIHRvIGdldCB0byB0aGUgUE1EIHBhZ2UgKi8KKyNkZWZpbmUgUFVEX01BU0tFRF9CSVRTCQkweDFmZgorCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1BHVEFCTEVfUFBDNjRfNjRLX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS1wcGM2NC5oCmluZGV4IGIwZjE4YmUuLmM0MGRiMDUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLXBwYzY0LmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUtcHBjNjQuaApAQCAtMTEsOSArMTEsOSBAQAogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogCiAjaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKLSNpbmNsdWRlIDxhc20vcGd0YWJsZS02NGsuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS1wcGM2NC02NGsuaD4KICNlbHNlCi0jaW5jbHVkZSA8YXNtL3BndGFibGUtNGsuaD4KKyNpbmNsdWRlIDxhc20vcGd0YWJsZS1wcGM2NC00ay5oPgogI2VuZGlmCiAKICNkZWZpbmUgRklSU1RfVVNFUl9BRERSRVNTCTAKQEAgLTI1LDYgKzI1LDggQEAKICAgICAgICAgICAgICAgICAJICAgIFBVRF9JTkRFWF9TSVpFICsgUEdEX0lOREVYX1NJWkUgKyBQQUdFX1NISUZUKQogI2RlZmluZSBQR1RBQkxFX1JBTkdFIChBU01fQ09OU1QoMSkgPDwgUEdUQUJMRV9FQUREUl9TSVpFKQogCisKKy8qIFNvbWUgc2FuaXR5IGNoZWNraW5nICovCiAjaWYgVEFTS19TSVpFX1VTRVI2NCA+IFBHVEFCTEVfUkFOR0UKICNlcnJvciBUQVNLX1NJWkVfVVNFUjY0IGV4Y2VlZHMgcGFnZXRhYmxlIHJhbmdlCiAjZW5kaWYKQEAgLTMzLDcgKzM1LDYgQEAKICNlcnJvciBUQVNLX1NJWkVfVVNFUjY0IGV4Y2VlZHMgdXNlciBWU0lEIHJhbmdlCiAjZW5kaWYKIAotCiAvKgogICogRGVmaW5lIHRoZSBhZGRyZXNzIHJhbmdlIG9mIHRoZSB2bWFsbG9jIFZNIGFyZWEuCiAgKi8KQEAgLTc2LDgyICs3NywxMSBAQAogCiAKIC8qCi0gKiBDb21tb24gYml0cyBpbiBhIGxpbnV4LXN0eWxlIFBURS4gIFRoZXNlIG1hdGNoIHRoZSBiaXRzIGluIHRoZQotICogKGhhcmR3YXJlLWRlZmluZWQpIFBvd2VyUEMgUFRFIGFzIGNsb3NlbHkgYXMgcG9zc2libGUuIEFkZGl0aW9uYWwKLSAqIGJpdHMgbWF5IGJlIGRlZmluZWQgaW4gcGd0YWJsZS0qLmgKKyAqIEluY2x1ZGUgdGhlIFBURSBiaXRzIGRlZmluaXRpb25zCiAgKi8KLSNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMDEgLyogc29mdHdhcmU6IHB0ZSBjb250YWlucyBhIHRyYW5zbGF0aW9uICovCi0jZGVmaW5lIF9QQUdFX1VTRVIJMHgwMDAyIC8qIG1hdGNoZXMgb25lIG9mIHRoZSBQUCBiaXRzICovCi0jZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDAyIC8qICghcHJlc2VudCBvbmx5KSBzb2Z0d2FyZTogcHRlIGhvbGRzIGZpbGUgb2Zmc2V0ICovCi0jZGVmaW5lIF9QQUdFX0VYRUMJMHgwMDA0IC8qIE5vIGV4ZWN1dGUgb24gUE9XRVI0IGFuZCBuZXdlciAod2UgaW52ZXJ0KSAqLwotI2RlZmluZSBfUEFHRV9HVUFSREVECTB4MDAwOAotI2RlZmluZSBfUEFHRV9DT0hFUkVOVAkweDAwMTAgLyogTTogZW5mb3JjZSBtZW1vcnkgY29oZXJlbmNlIChTTVAgc3lzdGVtcykgKi8KLSNkZWZpbmUgX1BBR0VfTk9fQ0FDSEUJMHgwMDIwIC8qIEk6IGNhY2hlIGluaGliaXQgKi8KLSNkZWZpbmUgX1BBR0VfV1JJVEVUSFJVCTB4MDA0MCAvKiBXOiBjYWNoZSB3cml0ZS10aHJvdWdoICovCi0jZGVmaW5lIF9QQUdFX0RJUlRZCTB4MDA4MCAvKiBDOiBwYWdlIGNoYW5nZWQgKi8KLSNkZWZpbmUgX1BBR0VfQUNDRVNTRUQJMHgwMTAwIC8qIFI6IHBhZ2UgcmVmZXJlbmNlZCAqLwotI2RlZmluZSBfUEFHRV9SVwkweDAyMDAgLyogc29mdHdhcmU6IHVzZXIgd3JpdGUgYWNjZXNzIGFsbG93ZWQgKi8KLSNkZWZpbmUgX1BBR0VfQlVTWQkweDA4MDAgLyogc29mdHdhcmU6IFBURSAmIGhhc2ggYXJlIGJ1c3kgKi8KKyNpbmNsdWRlIDxhc20vcHRlLWhhc2g2NC5oPgorI2luY2x1ZGUgPGFzbS9wdGUtY29tbW9uLmg+CiAKLS8qIFN0cm9uZyBBY2Nlc3MgT3JkZXJpbmcgKi8KLSNkZWZpbmUgX1BBR0VfU0FPCShfUEFHRV9XUklURVRIUlUgfCBfUEFHRV9OT19DQUNIRSB8IF9QQUdFX0NPSEVSRU5UKQotCi0jZGVmaW5lIF9QQUdFX0JBU0UJKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9BQ0NFU1NFRCB8IF9QQUdFX0NPSEVSRU5UKQotCi0jZGVmaW5lIF9QQUdFX1dSRU5BQkxFCShfUEFHRV9SVyB8IF9QQUdFX0RJUlRZKQotCi0vKiBfX3BncHJvdCBkZWZpbmVkIGluIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmggKi8KLSNkZWZpbmUgUEFHRV9OT05FCV9fcGdwcm90KF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9BQ0NFU1NFRCkKLQotI2RlZmluZSBQQUdFX1NIQVJFRAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfUlcgfCBfUEFHRV9VU0VSKQotI2RlZmluZSBQQUdFX1NIQVJFRF9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9SVyB8IF9QQUdFX1VTRVIgfCBfUEFHRV9FWEVDKQotI2RlZmluZSBQQUdFX0NPUFkJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIpCi0jZGVmaW5lIFBBR0VfQ09QWV9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQykKLSNkZWZpbmUgUEFHRV9SRUFET05MWQlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUikKLSNkZWZpbmUgUEFHRV9SRUFET05MWV9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQykKLSNkZWZpbmUgUEFHRV9LRVJORUwJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1dSRU5BQkxFKQotI2RlZmluZSBQQUdFX0tFUk5FTF9DSQlfX3BncHJvdChfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQUNDRVNTRUQgfCBcCi0JCQkgICAgICAgX1BBR0VfV1JFTkFCTEUgfCBfUEFHRV9OT19DQUNIRSB8IF9QQUdFX0dVQVJERUQpCi0jZGVmaW5lIFBBR0VfS0VSTkVMX0VYRUMgX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1dSRU5BQkxFIHwgX1BBR0VfRVhFQykKLQotI2RlZmluZSBQQUdFX0FHUAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfV1JFTkFCTEUgfCBfUEFHRV9OT19DQUNIRSkKLSNkZWZpbmUgSEFWRV9QQUdFX0FHUAotCi0jZGVmaW5lIFBBR0VfUFJPVF9CSVRTCShfUEFHRV9HVUFSREVEIHwgX1BBR0VfQ09IRVJFTlQgfCBcCi0JCQkgX1BBR0VfTk9fQ0FDSEUgfCBfUEFHRV9XUklURVRIUlUgfAkJXAotCQkJIF9QQUdFXzRLX1BGTiB8IF9QQUdFX1JXIHwgX1BBR0VfVVNFUiB8CQlcCi0JCQkgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9ESVJUWSB8IF9QQUdFX0VYRUMpCi0vKiBQVEVJRFggbmliYmxlICovCi0jZGVmaW5lIF9QVEVJRFhfU0VDT05EQVJZCTB4OAotI2RlZmluZSBfUFRFSURYX0dST1VQX0lYCTB4NwotCi0KLS8qCi0gKiBQT1dFUjQgYW5kIG5ld2VyIGhhdmUgcGVyIHBhZ2UgZXhlY3V0ZSBwcm90ZWN0aW9uLCBvbGRlciBjaGlwcyBjYW4gb25seQotICogZG8gdGhpcyBvbiBhIHNlZ21lbnQgKDI1Nk1CKSBiYXNpcy4KLSAqCi0gKiBBbHNvLCB3cml0ZSBwZXJtaXNzaW9ucyBpbXBseSByZWFkIHBlcm1pc3Npb25zLgotICogVGhpcyBpcyB0aGUgY2xvc2VzdCB3ZSBjYW4gZ2V0Li4KLSAqCi0gKiBOb3RlIGR1ZSB0byB0aGUgd2F5IHZtIGZsYWdzIGFyZSBsYWlkIG91dCwgdGhlIGJpdHMgYXJlIFhXUgotICovCi0jZGVmaW5lIF9fUDAwMAlQQUdFX05PTkUKLSNkZWZpbmUgX19QMDAxCVBBR0VfUkVBRE9OTFkKLSNkZWZpbmUgX19QMDEwCVBBR0VfQ09QWQotI2RlZmluZSBfX1AwMTEJUEFHRV9DT1BZCi0jZGVmaW5lIF9fUDEwMAlQQUdFX1JFQURPTkxZX1gKLSNkZWZpbmUgX19QMTAxCVBBR0VfUkVBRE9OTFlfWAotI2RlZmluZSBfX1AxMTAJUEFHRV9DT1BZX1gKLSNkZWZpbmUgX19QMTExCVBBR0VfQ09QWV9YCi0KLSNkZWZpbmUgX19TMDAwCVBBR0VfTk9ORQotI2RlZmluZSBfX1MwMDEJUEFHRV9SRUFET05MWQotI2RlZmluZSBfX1MwMTAJUEFHRV9TSEFSRUQKLSNkZWZpbmUgX19TMDExCVBBR0VfU0hBUkVECi0jZGVmaW5lIF9fUzEwMAlQQUdFX1JFQURPTkxZX1gKLSNkZWZpbmUgX19TMTAxCVBBR0VfUkVBRE9OTFlfWAotI2RlZmluZSBfX1MxMTAJUEFHRV9TSEFSRURfWAotI2RlZmluZSBfX1MxMTEJUEFHRV9TSEFSRURfWAogCiAjaWZkZWYgQ09ORklHX1BQQ19NTV9TTElDRVMKICNkZWZpbmUgSEFWRV9BUkNIX1VOTUFQUEVEX0FSRUEKQEAgLTE2MSwzMyArOTEsMzkgQEAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKIC8qCi0gKiBDb252ZXJzaW9uIGZ1bmN0aW9uczogY29udmVydCBhIHBhZ2UgYW5kIHByb3RlY3Rpb24gdG8gYSBwYWdlIGVudHJ5LAotICogYW5kIGEgcGFnZSBlbnRyeSBhbmQgcGFnZSBkaXJlY3RvcnkgdG8gdGhlIHBhZ2UgdGhleSByZWZlciB0by4KLSAqCi0gKiBta19wdGUgdGFrZXMgYSAoc3RydWN0IHBhZ2UgKikgYXMgaW5wdXQKKyAqIFRoaXMgaXMgdGhlIGRlZmF1bHQgaW1wbGVtZW50YXRpb24gb2YgdmFyaW91cyBQVEUgYWNjZXNzb3JzLCBpdCdzCisgKiB1c2VkIGluIGFsbCBjYXNlcyBleGNlcHQgQm9vazNTIHdpdGggNjRLIHBhZ2VzIHdoZXJlIHdlIGhhdmUgYQorICogY29uY2VwdCBvZiBzdWItcGFnZXMKICAqLwotI2RlZmluZSBta19wdGUocGFnZSwgcGdwcm90KQlwZm5fcHRlKHBhZ2VfdG9fcGZuKHBhZ2UpLCAocGdwcm90KSkKKyNpZm5kZWYgX19yZWFsX3B0ZQogCi1zdGF0aWMgaW5saW5lIHB0ZV90IHBmbl9wdGUodW5zaWduZWQgbG9uZyBwZm4sIHBncHJvdF90IHBncHJvdCkKLXsKLQlwdGVfdCBwdGU7CisjaWZkZWYgU1RSSUNUX01NX1RZUEVDSEVDS1MKKyNkZWZpbmUgX19yZWFsX3B0ZShlLHApCQkoKHJlYWxfcHRlX3QpeyhlKX0pCisjZGVmaW5lIF9fcnB0ZV90b19wdGUocikJKChyKS5wdGUpCisjZWxzZQorI2RlZmluZSBfX3JlYWxfcHRlKGUscCkJCShlKQorI2RlZmluZSBfX3JwdGVfdG9fcHRlKHIpCShfX3B0ZShyKSkKKyNlbmRpZgorI2RlZmluZSBfX3JwdGVfdG9faGlkeChyLGluZGV4KQkocHRlX3ZhbChfX3JwdGVfdG9fcHRlKHIpKSA+PiAxMikKIAorI2RlZmluZSBwdGVfaXRlcmF0ZV9oYXNoZWRfc3VicGFnZXMocnB0ZSwgcHNpemUsIHZhLCBpbmRleCwgc2hpZnQpICAgICAgIFwKKwlkbyB7CQkJCQkJCSAgICAgICAgIFwKKwkJaW5kZXggPSAwOwkJCQkJICAgICAgICAgXAorCQlzaGlmdCA9IG1tdV9wc2l6ZV9kZWZzW3BzaXplXS5zaGlmdDsJCSAgICAgICAgIFwKIAotCXB0ZV92YWwocHRlKSA9IChwZm4gPDwgUFRFX1JQTl9TSElGVCkgfCBwZ3Byb3RfdmFsKHBncHJvdCk7Ci0JcmV0dXJuIHB0ZTsKLX0KKyNkZWZpbmUgcHRlX2l0ZXJhdGVfaGFzaGVkX2VuZCgpIH0gd2hpbGUoMCkKIAotI2RlZmluZSBwdGVfbW9kaWZ5KF9wdGUsIG5ld3Byb3QpIFwKLSAgKF9fcHRlKChwdGVfdmFsKF9wdGUpICYgX1BBR0VfQ0hHX01BU0spIHwgcGdwcm90X3ZhbChuZXdwcm90KSkpCisjaWZkZWYgQ09ORklHX1BQQ19IQVNfSEFTSF82NEsKKyNkZWZpbmUgcHRlX3BhZ2VzaXplX2luZGV4KG1tLCBhZGRyLCBwdGUpCWdldF9zbGljZV9wc2l6ZShtbSwgYWRkcikKKyNlbHNlCisjZGVmaW5lIHB0ZV9wYWdlc2l6ZV9pbmRleChtbSwgYWRkciwgcHRlKQlNTVVfUEFHRV80SworI2VuZGlmCiAKLSNkZWZpbmUgcHRlX25vbmUocHRlKQkJKChwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfSFBURUZMQUdTKSA9PSAwKQotI2RlZmluZSBwdGVfcHJlc2VudChwdGUpCShwdGVfdmFsKHB0ZSkgJiBfUEFHRV9QUkVTRU5UKQorI2VuZGlmIC8qIF9fcmVhbF9wdGUgKi8KKwogCiAvKiBwdGVfY2xlYXIgbW92ZWQgdG8gbGF0ZXIgaW4gdGhpcyBmaWxlICovCiAKLSNkZWZpbmUgcHRlX3Bmbih4KQkJKCh1bnNpZ25lZCBsb25nKSgocHRlX3ZhbCh4KT4+UFRFX1JQTl9TSElGVCkpKQotI2RlZmluZSBwdGVfcGFnZSh4KQkJcGZuX3RvX3BhZ2UocHRlX3Bmbih4KSkKLQogI2RlZmluZSBQTURfQkFEX0JJVFMJCShQVEVfVEFCTEVfU0laRS0xKQogI2RlZmluZSBQVURfQkFEX0JJVFMJCShQTURfVEFCTEVfU0laRS0xKQogCkBAIC0yMzUsMzYgKzE3MSw2IEBACiAvKiBUaGlzIG5vdyBvbmx5IGNvbnRhaW5zIHRoZSB2bWFsbG9jIHBhZ2VzICovCiAjZGVmaW5lIHBnZF9vZmZzZXRfayhhZGRyZXNzKSBwZ2Rfb2Zmc2V0KCZpbml0X21tLCBhZGRyZXNzKQogCi0vKgotICogVGhlIGZvbGxvd2luZyBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKSBpcyB0cnVlLgotICogVW5kZWZpbmVkIGJlaGF2aW91ciBpZiBub3QuLgotICovCi1zdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKSB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9SVzt9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfZGlydHkocHRlX3QgcHRlKSB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9ESVJUWTt9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfeW91bmcocHRlX3QgcHRlKSB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9BQ0NFU1NFRDt9Ci1zdGF0aWMgaW5saW5lIGludCBwdGVfZmlsZShwdGVfdCBwdGUpIHsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX0ZJTEU7fQotc3RhdGljIGlubGluZSBpbnQgcHRlX3NwZWNpYWwocHRlX3QgcHRlKSB7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9TUEVDSUFMOyB9Ci0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3dycHJvdGVjdChwdGVfdCBwdGUpIHsKLQlwdGVfdmFsKHB0ZSkgJj0gfihfUEFHRV9SVyk7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21rY2xlYW4ocHRlX3QgcHRlKSB7Ci0JcHRlX3ZhbChwdGUpICY9IH4oX1BBR0VfRElSVFkpOyByZXR1cm4gcHRlOyB9Ci1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpIHsKLQlwdGVfdmFsKHB0ZSkgJj0gfl9QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9Ci1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkgewotCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9SVzsgcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpIHsKLQlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfRElSVFk7IHJldHVybiBwdGU7IH0KLXN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKSB7Ci0JcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9Ci1zdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2h1Z2UocHRlX3QgcHRlKSB7Ci0JcmV0dXJuIHB0ZTsgfQotc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtzcGVjaWFsKHB0ZV90IHB0ZSkgewotCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9TUEVDSUFMOyByZXR1cm4gcHRlOyB9Ci1zdGF0aWMgaW5saW5lIHBncHJvdF90IHB0ZV9wZ3Byb3QocHRlX3QgcHRlKQotewotCXJldHVybiBfX3BncHJvdChwdGVfdmFsKHB0ZSkgJiBQQUdFX1BST1RfQklUUyk7Ci19CiAKIC8qIEF0b21pYyBQVEUgdXBkYXRlcyAqLwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHB0ZV91cGRhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sCkBAIC0yNzIsNiArMTc4LDcgQEAKIAkJCQkgICAgICAgcHRlX3QgKnB0ZXAsIHVuc2lnbmVkIGxvbmcgY2xyLAogCQkJCSAgICAgICBpbnQgaHVnZSkKIHsKKyNpZmRlZiBQVEVfQVRPTUlDX1VQREFURVMKIAl1bnNpZ25lZCBsb25nIG9sZCwgdG1wOwogCiAJX19hc21fXyBfX3ZvbGF0aWxlX18oCkBAIC0yODQsNiArMTkxLDEzIEBACiAJOiAiPSZyIiAob2xkKSwgIj0mciIgKHRtcCksICI9bSIgKCpwdGVwKQogCTogInIiIChwdGVwKSwgInIiIChjbHIpLCAibSIgKCpwdGVwKSwgImkiIChfUEFHRV9CVVNZKQogCTogImNjIiApOworI2Vsc2UKKwl1bnNpZ25lZCBsb25nIG9sZCA9IHB0ZV92YWwoKnB0ZXApOworCSpwdGVwID0gX19wdGUob2xkICYgfmNscik7CisjZW5kaWYKKwkvKiBodWdlIHBhZ2VzIHVzZSB0aGUgb2xkIHBhZ2UgdGFibGUgbG9jayAqLworCWlmICghaHVnZSkKKwkJYXNzZXJ0X3B0ZV9sb2NrZWQobW0sIGFkZHIpOwogCiAJaWYgKG9sZCAmIF9QQUdFX0hBU0hQVEUpCiAJCWhwdGVfbmVlZF9mbHVzaChtbSwgYWRkciwgcHRlcCwgb2xkLCBodWdlKTsKQEAgLTM1OSwyNiArMjczLDE3IEBACiAJcHRlX3VwZGF0ZShtbSwgYWRkciwgcHRlcCwgfjBVTCwgMCk7CiB9CiAKLS8qCi0gKiBzZXRfcHRlIHN0b3JlcyBhIGxpbnV4IFBURSBpbnRvIHRoZSBsaW51eCBwYWdlIHRhYmxlLgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X3B0ZV9hdChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJICAgICAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKLXsKLQlpZiAocHRlX3ByZXNlbnQoKnB0ZXApKQotCQlwdGVfY2xlYXIobW0sIGFkZHIsIHB0ZXApOwotCXB0ZSA9IF9fcHRlKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9IUFRFRkxBR1MpOwotCSpwdGVwID0gcHRlOwotfQogCiAvKiBTZXQgdGhlIGRpcnR5IGFuZC9vciBhY2Nlc3NlZCBiaXRzIGF0b21pY2FsbHkgaW4gYSBsaW51eCBQVEUsIHRoaXMKICAqIGZ1bmN0aW9uIGRvZXNuJ3QgbmVlZCB0byBmbHVzaCB0aGUgaGFzaCBlbnRyeQogICovCi0jZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfU0VUX0FDQ0VTU19GTEFHUwotc3RhdGljIGlubGluZSB2b2lkIF9fcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHB0ZV90ICpwdGVwLCBwdGVfdCBlbnRyeSwgaW50IGRpcnR5KQorc3RhdGljIGlubGluZSB2b2lkIF9fcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHB0ZV90ICpwdGVwLCBwdGVfdCBlbnRyeSkKIHsKIAl1bnNpZ25lZCBsb25nIGJpdHMgPSBwdGVfdmFsKGVudHJ5KSAmCi0JCShfUEFHRV9ESVJUWSB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfUlcgfCBfUEFHRV9FWEVDKTsKKwkJKF9QQUdFX0RJUlRZIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9SVyB8CisJCSBfUEFHRV9FWEVDIHwgX1BBR0VfSFdFWEVDKTsKKworI2lmZGVmIFBURV9BVE9NSUNfVVBEQVRFUwogCXVuc2lnbmVkIGxvbmcgb2xkLCB0bXA7CiAKIAlfX2FzbV9fIF9fdm9sYXRpbGVfXygKQEAgLTM5MSwxNiArMjk2LDExIEBACiAJOiI9JnIiIChvbGQpLCAiPSZyIiAodG1wKSwgIj1tIiAoKnB0ZXApCiAJOiJyIiAoYml0cyksICJyIiAocHRlcCksICJtIiAoKnB0ZXApLCAiaSIgKF9QQUdFX0JVU1kpCiAJOiJjYyIpOworI2Vsc2UKKwl1bnNpZ25lZCBsb25nIG9sZCA9IHB0ZV92YWwoKnB0ZXApOworCSpwdGVwID0gX19wdGUob2xkIHwgYml0cyk7CisjZW5kaWYKIH0KLSNkZWZpbmUgIHB0ZXBfc2V0X2FjY2Vzc19mbGFncyhfX3ZtYSwgX19hZGRyZXNzLCBfX3B0ZXAsIF9fZW50cnksIF9fZGlydHkpIFwKLSh7CQkJCQkJCQkJICAgXAotCWludCBfX2NoYW5nZWQgPSAhcHRlX3NhbWUoKihfX3B0ZXApLCBfX2VudHJ5KTsJCQkgICBcCi0JaWYgKF9fY2hhbmdlZCkgewkJCQkJCSAgIFwKLQkJX19wdGVwX3NldF9hY2Nlc3NfZmxhZ3MoX19wdGVwLCBfX2VudHJ5LCBfX2RpcnR5KTsgICAgCSAgIFwKLQkJZmx1c2hfdGxiX3BhZ2Vfbm9oYXNoKF9fdm1hLCBfX2FkZHJlc3MpOwkJICAgXAotCX0JCQkJCQkJCSAgIFwKLQlfX2NoYW5nZWQ7CQkJCQkJCSAgIFwKLX0pCiAKICNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NBTUUKICNkZWZpbmUgcHRlX3NhbWUoQSxCKQkoKChwdGVfdmFsKEEpIF4gcHRlX3ZhbChCKSkgJiB+X1BBR0VfSFBURUZMQUdTKSA9PSAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggMDdmNTVlNi4uZWIxN2RhNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BndGFibGUuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC02LDcgKzYsMTcgQEAKICNpbmNsdWRlIDxhc20vcHJvY2Vzc29yLmg+CQkvKiBGb3IgVEFTS19TSVpFICovCiAjaW5jbHVkZSA8YXNtL21tdS5oPgogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CisKIHN0cnVjdCBtbV9zdHJ1Y3Q7CisKKyNpZmRlZiBDT05GSUdfREVCVUdfVk0KK2V4dGVybiB2b2lkIGFzc2VydF9wdGVfbG9ja2VkKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpOworI2Vsc2UgLyogQ09ORklHX0RFQlVHX1ZNICovCitzdGF0aWMgaW5saW5lIHZvaWQgYXNzZXJ0X3B0ZV9sb2NrZWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKK3sKK30KKyNlbmRpZiAvKiAhQ09ORklHX0RFQlVHX1ZNICovCisKICNlbmRpZiAvKiAhX19BU1NFTUJMWV9fICovCiAKICNpZiBkZWZpbmVkKENPTkZJR19QUEM2NCkKQEAgLTE3LDYgKzI3LDEzMCBAQAogCiAjaWZuZGVmIF9fQVNTRU1CTFlfXwogCisvKiBHZW5lcmljIGFjY2Vzc29ycyB0byBQVEUgYml0cyAqLworc3RhdGljIGlubGluZSBpbnQgcHRlX3dyaXRlKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1JXOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfZGlydHkocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRElSVFk7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpCQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9BQ0NFU1NFRDsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX2ZpbGUocHRlX3QgcHRlKQkJeyByZXR1cm4gcHRlX3ZhbChwdGUpICYgX1BBR0VfRklMRTsgfQorc3RhdGljIGlubGluZSBpbnQgcHRlX3NwZWNpYWwocHRlX3QgcHRlKQl7IHJldHVybiBwdGVfdmFsKHB0ZSkgJiBfUEFHRV9TUEVDSUFMOyB9CitzdGF0aWMgaW5saW5lIGludCBwdGVfcHJlc2VudChwdGVfdCBwdGUpCXsgcmV0dXJuIHB0ZV92YWwocHRlKSAmIF9QQUdFX1BSRVNFTlQ7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9ub25lKHB0ZV90IHB0ZSkJCXsgcmV0dXJuIChwdGVfdmFsKHB0ZSkgJiB+X1BURV9OT05FX01BU0spID09IDA7IH0KK3N0YXRpYyBpbmxpbmUgcGdwcm90X3QgcHRlX3BncHJvdChwdGVfdCBwdGUpCXsgcmV0dXJuIF9fcGdwcm90KHB0ZV92YWwocHRlKSAmIFBBR0VfUFJPVF9CSVRTKTsgfQorCisvKiBDb252ZXJzaW9uIGZ1bmN0aW9uczogY29udmVydCBhIHBhZ2UgYW5kIHByb3RlY3Rpb24gdG8gYSBwYWdlIGVudHJ5LAorICogYW5kIGEgcGFnZSBlbnRyeSBhbmQgcGFnZSBkaXJlY3RvcnkgdG8gdGhlIHBhZ2UgdGhleSByZWZlciB0by4KKyAqCisgKiBFdmVuIGlmIFBURXMgY2FuIGJlIHVuc2lnbmVkIGxvbmcgbG9uZywgYSBQRk4gaXMgYWx3YXlzIGFuIHVuc2lnbmVkCisgKiBsb25nIGZvciBub3cuCisgKi8KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcGZuX3B0ZSh1bnNpZ25lZCBsb25nIHBmbiwgcGdwcm90X3QgcGdwcm90KSB7CisJcmV0dXJuIF9fcHRlKCgocHRlX2Jhc2ljX3QpKHBmbikgPDwgUFRFX1JQTl9TSElGVCkgfAorCQkgICAgIHBncHJvdF92YWwocGdwcm90KSk7IH0KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwdGVfcGZuKHB0ZV90IHB0ZSkJeworCXJldHVybiBwdGVfdmFsKHB0ZSkgPj4gUFRFX1JQTl9TSElGVDsgfQorCisvKiBLZWVwIHRoZXNlIGFzIGEgbWFjcm9zIHRvIGF2b2lkIGluY2x1ZGUgZGVwZW5kZW5jeSBtZXNzICovCisjZGVmaW5lIHB0ZV9wYWdlKHgpCQlwZm5fdG9fcGFnZShwdGVfcGZuKHgpKQorI2RlZmluZSBta19wdGUocGFnZSwgcGdwcm90KQlwZm5fcHRlKHBhZ2VfdG9fcGZuKHBhZ2UpLCAocGdwcm90KSkKKworLyogR2VuZXJpYyBtb2RpZmllcnMgZm9yIFBURSBiaXRzICovCitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV93cnByb3RlY3QocHRlX3QgcHRlKSB7CisJcHRlX3ZhbChwdGUpICY9IH4oX1BBR0VfUlcgfCBfUEFHRV9IV1dSSVRFKTsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtjbGVhbihwdGVfdCBwdGUpIHsKKwlwdGVfdmFsKHB0ZSkgJj0gfihfUEFHRV9ESVJUWSB8IF9QQUdFX0hXV1JJVEUpOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpIHsKKwlwdGVfdmFsKHB0ZSkgJj0gfl9QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkgeworCXB0ZV92YWwocHRlKSB8PSBfUEFHRV9SVzsgcmV0dXJuIHB0ZTsgfQorc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtkaXJ0eShwdGVfdCBwdGUpIHsKKwlwdGVfdmFsKHB0ZSkgfD0gX1BBR0VfRElSVFk7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21reW91bmcocHRlX3QgcHRlKSB7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX0FDQ0VTU0VEOyByZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3NwZWNpYWwocHRlX3QgcHRlKSB7CisJcHRlX3ZhbChwdGUpIHw9IF9QQUdFX1NQRUNJQUw7IHJldHVybiBwdGU7IH0KK3N0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX21raHVnZShwdGVfdCBwdGUpIHsKKwlyZXR1cm4gcHRlOyB9CitzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9tb2RpZnkocHRlX3QgcHRlLCBwZ3Byb3RfdCBuZXdwcm90KQoreworCXB0ZV92YWwocHRlKSA9IChwdGVfdmFsKHB0ZSkgJiBfUEFHRV9DSEdfTUFTSykgfCBwZ3Byb3RfdmFsKG5ld3Byb3QpOworCXJldHVybiBwdGU7Cit9CisKKworLyogSW5zZXJ0IGEgUFRFLCB0b3AtbGV2ZWwgZnVuY3Rpb24gaXMgb3V0IG9mIGxpbmUuIEl0IHVzZXMgYW4gaW5saW5lCisgKiBsb3cgbGV2ZWwgZnVuY3Rpb24gaW4gdGhlIHJlc3BlY3RpdmUgcGd0YWJsZS0qIGZpbGVzCisgKi8KK2V4dGVybiB2b2lkIHNldF9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXAsCisJCSAgICAgICBwdGVfdCBwdGUpOworCisvKiBUaGlzIGxvdyBsZXZlbCBmdW5jdGlvbiBwZXJmb3JtcyB0aGUgYWN0dWFsIFBURSBpbnNlcnRpb24KKyAqIFNldHRpbmcgdGhlIFBURSBkZXBlbmRzIG9uIHRoZSBNTVUgdHlwZSBhbmQgb3RoZXIgZmFjdG9ycy4gSXQncworICogYW4gaG9ycmlibGUgbWVzcyB0aGF0IEknbSBub3QgZ29pbmcgdG8gdHJ5IHRvIGNsZWFuIHVwIG5vdyBidXQKKyAqIEknbSBrZWVwaW5nIGl0IGluIG9uZSBwbGFjZSByYXRoZXIgdGhhbiBzcHJlYWQgYXJvdW5kCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF9wdGVfYXQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCQlwdGVfdCAqcHRlcCwgcHRlX3QgcHRlLCBpbnQgcGVyY3B1KQoreworI2lmIGRlZmluZWQoQ09ORklHX1BQQ19TVERfTU1VXzMyKSAmJiBkZWZpbmVkKENPTkZJR19TTVApICYmICFkZWZpbmVkKENPTkZJR19QVEVfNjRCSVQpCisJLyogRmlyc3QgY2FzZSBpcyAzMi1iaXQgSGFzaCBNTVUgaW4gU01QIG1vZGUgd2l0aCAzMi1iaXQgUFRFcy4gV2UgdXNlIHRoZQorCSAqIGhlbHBlciBwdGVfdXBkYXRlKCkgd2hpY2ggZG9lcyBhbiBhdG9taWMgdXBkYXRlLiBXZSBuZWVkIHRvIGRvIHRoYXQKKwkgKiBiZWNhdXNlIGEgY29uY3VycmVudCBpbnZhbGlkYXRpb24gY2FuIGNsZWFyIF9QQUdFX0hBU0hQVEUuIElmIGl0J3MgYQorCSAqIHBlci1DUFUgUFRFIHN1Y2ggYXMgYSBrbWFwX2F0b21pYywgd2UgZG8gYSBzaW1wbGUgdXBkYXRlIHByZXNlcnZpbmcKKwkgKiB0aGUgaGFzaCBiaXRzIGluc3RlYWQgKGllLCBzYW1lIGFzIHRoZSBub24tU01QIGNhc2UpCisJICovCisJaWYgKHBlcmNwdSkKKwkJKnB0ZXAgPSBfX3B0ZSgocHRlX3ZhbCgqcHRlcCkgJiBfUEFHRV9IQVNIUFRFKQorCQkJICAgICAgfCAocHRlX3ZhbChwdGUpICYgfl9QQUdFX0hBU0hQVEUpKTsKKwllbHNlCisJCXB0ZV91cGRhdGUocHRlcCwgfl9QQUdFX0hBU0hQVEUsIHB0ZV92YWwocHRlKSk7CisKKyNlbGlmIGRlZmluZWQoQ09ORklHX1BQQzMyKSAmJiBkZWZpbmVkKENPTkZJR19QVEVfNjRCSVQpICYmIGRlZmluZWQoQ09ORklHX1NNUCkKKwkvKiBTZWNvbmQgY2FzZSBpcyAzMi1iaXQgd2l0aCA2NC1iaXQgUFRFIGluIFNNUCBtb2RlLiBJbiB0aGlzIGNhc2UsIHdlCisJICogY2FuIGp1c3Qgc3RvcmUgYXMgbG9uZyBhcyB3ZSBkbyB0aGUgdHdvIGhhbHZlcyBpbiB0aGUgcmlnaHQgb3JkZXIKKwkgKiB3aXRoIGEgYmFycmllciBpbiBiZXR3ZWVuLiBUaGlzIGlzIHBvc3NpYmxlIGJlY2F1c2Ugd2UgdGFrZSBjYXJlLAorCSAqIGluIHRoZSBoYXNoIGNvZGUsIHRvIHByZS1pbnZhbGlkYXRlIGlmIHRoZSBQVEUgd2FzIGFscmVhZHkgaGFzaGVkLAorCSAqIHdoaWNoIHN5bmNocm9uaXplcyB1cyB3aXRoIGFueSBjb25jdXJyZW50IGludmFsaWRhdGlvbi4KKwkgKiBJbiB0aGUgcGVyY3B1IGNhc2UsIHdlIGFsc28gZmFsbGJhY2sgdG8gdGhlIHNpbXBsZSB1cGRhdGUgcHJlc2VydmluZworCSAqIHRoZSBoYXNoIGJpdHMKKwkgKi8KKwlpZiAocGVyY3B1KSB7CisJCSpwdGVwID0gX19wdGUoKHB0ZV92YWwoKnB0ZXApICYgX1BBR0VfSEFTSFBURSkKKwkJCSAgICAgIHwgKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9IQVNIUFRFKSk7CisJCXJldHVybjsKKwl9CisjaWYgX1BBR0VfSEFTSFBURSAhPSAwCisJaWYgKHB0ZV92YWwoKnB0ZXApICYgX1BBR0VfSEFTSFBURSkKKwkJZmx1c2hfaGFzaF9lbnRyeShtbSwgcHRlcCwgYWRkcik7CisjZW5kaWYKKwlfX2FzbV9fIF9fdm9sYXRpbGVfXygiXAorCQlzdHclVTAlWDAgJTIsJTBcblwKKwkJZWllaW9cblwKKwkJc3R3JVUwJVgwICVMMiwlMSIKKwk6ICI9bSIgKCpwdGVwKSwgIj1tIiAoKigodW5zaWduZWQgY2hhciAqKXB0ZXArNCkpCisJOiAiciIgKHB0ZSkgOiAibWVtb3J5Iik7CisKKyNlbGlmIGRlZmluZWQoQ09ORklHX1BQQ19TVERfTU1VXzMyKQorCS8qIFRoaXJkIGNhc2UgaXMgMzItYml0IGhhc2ggdGFibGUgaW4gVVAgbW9kZSwgd2UgbmVlZCB0byBwcmVzZXJ2ZQorCSAqIHRoZSBfUEFHRV9IQVNIUFRFIGJpdCBzaW5jZSB3ZSBtYXkgbm90IGhhdmUgaW52YWxpZGF0ZWQgdGhlIHByZXZpb3VzCisJICogdHJhbnNsYXRpb24gaW4gdGhlIGhhc2ggeWV0IChkb25lIGluIGEgc3Vic2VxdWVudCBmbHVzaF90bGJfeHh4KCkpCisJICogYW5kIHNlZSB3ZSBuZWVkIHRvIGtlZXAgdHJhY2sgdGhhdCB0aGlzIFBURSBuZWVkcyBpbnZhbGlkYXRpbmcKKwkgKi8KKwkqcHRlcCA9IF9fcHRlKChwdGVfdmFsKCpwdGVwKSAmIF9QQUdFX0hBU0hQVEUpCisJCSAgICAgIHwgKHB0ZV92YWwocHRlKSAmIH5fUEFHRV9IQVNIUFRFKSk7CisKKyNlbHNlCisJLyogQW55dGhpbmcgZWxzZSBqdXN0IHN0b3JlcyB0aGUgUFRFIG5vcm1hbGx5LiBUaGF0IGNvdmVycyBhbGwgNjQtYml0CisJICogY2FzZXMsIGFuZCAzMi1iaXQgbm9uLWhhc2ggd2l0aCA2NC1iaXQgUFRFcyBpbiBVUCBtb2RlCisJICovCisJKnB0ZXAgPSBwdGU7CisjZW5kaWYKK30KKworCisjZGVmaW5lIF9fSEFWRV9BUkNIX1BURVBfU0VUX0FDQ0VTU19GTEFHUworZXh0ZXJuIGludCBwdGVwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywKKwkJCQkgcHRlX3QgKnB0ZXAsIHB0ZV90IGVudHJ5LCBpbnQgZGlydHkpOworCiAvKgogICogTWFjcm8gdG8gbWFyayBhIHBhZ2UgcHJvdGVjdGlvbiB2YWx1ZSBhcyAidW5jYWNoZWFibGUiLgogICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjLW9wY29kZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwYy1vcGNvZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mNGE0ZGI4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwYy1vcGNvZGUuaApAQCAtMCwwICsxLDczIEBACisvKgorICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdXRvciwgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24KKyAqIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogcHJvdmlkZXMgbWFza3MgYW5kIG9wY29kZSBpbWFnZXMgZm9yIHVzZSBieSBjb2RlIGdlbmVyYXRpb24sIGVtdWxhdGlvbgorICogYW5kIGZvciBpbnN0cnVjdGlvbnMgdGhhdCBvbGRlciBhc3NlbWJsZXJzIG1pZ2h0IG5vdCBrbm93IGFib3V0CisgKi8KKyNpZm5kZWYgX0FTTV9QT1dFUlBDX1BQQ19PUENPREVfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfUFBDX09QQ09ERV9ICisKKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KKyNpbmNsdWRlIDxhc20vYXNtLWNvbXBhdC5oPgorCisvKiBzb3J0ZWQgYWxwaGFiZXRpY2FsbHkgKi8KKyNkZWZpbmUgUFBDX0lOU1RfRENCQQkJCTB4N2MwMDA1ZWMKKyNkZWZpbmUgUFBDX0lOU1RfRENCQV9NQVNLCQkweGZjMDAwN2ZlCisjZGVmaW5lIFBQQ19JTlNUX0RDQkFMCQkJMHg3YzIwMDVlYworI2RlZmluZSBQUENfSU5TVF9EQ0JaTAkJCTB4N2MyMDA3ZWMKKyNkZWZpbmUgUFBDX0lOU1RfSVNFTAkJCTB4N2MwMDAwMWUKKyNkZWZpbmUgUFBDX0lOU1RfSVNFTF9NQVNLCQkweGZjMDAwMDNlCisjZGVmaW5lIFBQQ19JTlNUX0xTV0kJCQkweDdjMDAwNGFhCisjZGVmaW5lIFBQQ19JTlNUX0xTV1gJCQkweDdjMDAwNDJhCisjZGVmaW5lIFBQQ19JTlNUX0xXU1lOQwkJCTB4N2MyMDA0YWMKKyNkZWZpbmUgUFBDX0lOU1RfTUNSWFIJCQkweDdjMDAwNDAwCisjZGVmaW5lIFBQQ19JTlNUX01DUlhSX01BU0sJCTB4ZmMwMDA3ZmUKKyNkZWZpbmUgUFBDX0lOU1RfTUZTUFJfUFZSCQkweDdjMWY0MmE2CisjZGVmaW5lIFBQQ19JTlNUX01GU1BSX1BWUl9NQVNLCQkweGZjMWZmZmZmCisjZGVmaW5lIFBQQ19JTlNUX01TR1NORAkJCTB4N2MwMDAxOWMKKyNkZWZpbmUgUFBDX0lOU1RfTk9QCQkJMHg2MDAwMDAwMAorI2RlZmluZSBQUENfSU5TVF9QT1BDTlRCCQkweDdjMDAwMGY0CisjZGVmaW5lIFBQQ19JTlNUX1BPUENOVEJfTUFTSwkJMHhmYzAwMDdmZQorI2RlZmluZSBQUENfSU5TVF9SRkNJCQkJMHg0YzAwMDA2NgorI2RlZmluZSBQUENfSU5TVF9SRkRJCQkJMHg0YzAwMDA0ZQorI2RlZmluZSBQUENfSU5TVF9SRk1DSQkJCTB4NGMwMDAwNGMKKworI2RlZmluZSBQUENfSU5TVF9TVFJJTkcJCQkweDdjMDAwNDJhCisjZGVmaW5lIFBQQ19JTlNUX1NUUklOR19NQVNLCQkweGZjMDAwN2ZlCisjZGVmaW5lIFBQQ19JTlNUX1NUUklOR19HRU5fTUFTSwkweGZjMDAwNjdlCisKKyNkZWZpbmUgUFBDX0lOU1RfU1RTV0kJCQkweDdjMDAwNWFhCisjZGVmaW5lIFBQQ19JTlNUX1NUU1dYCQkJMHg3YzAwMDUyYQorI2RlZmluZSBQUENfSU5TVF9UTEJJTFgJCQkweDdjMDAwNjI2CisjZGVmaW5lIFBQQ19JTlNUX1dBSVQJCQkweDdjMDAwMDdjCisKKy8qIG1hY3JvcyB0byBpbnNlcnQgZmllbGRzIGludG8gb3Bjb2RlcyAqLworI2RlZmluZSBfX1BQQ19SQShhKQkoKGEgJiAweDFmKSA8PCAxNikKKyNkZWZpbmUgX19QUENfUkIoYikJKChiICYgMHgxZikgPDwgMTEpCisjZGVmaW5lIF9fUFBDX1RfVExCKHQpCSgodCAmIDB4MykgPDwgMjEpCisjZGVmaW5lIF9fUFBDX1dDKHcpCSgodyAmIDB4MykgPDwgMjEpCisKKy8qIERlYWwgd2l0aCBpbnN0cnVjdGlvbnMgdGhhdCBvbGRlciBhc3NlbWJsZXJzIGFyZW4ndCBhd2FyZSBvZiAqLworI2RlZmluZQlQUENfRENCQUwoYSwgYikJCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX0RDQkFMIHwgXAorCQkJCQlfX1BQQ19SQShhKSB8IF9fUFBDX1JCKGIpKQorI2RlZmluZQlQUENfRENCWkwoYSwgYikJCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX0RDQlpMIHwgXAorCQkJCQlfX1BQQ19SQShhKSB8IF9fUFBDX1JCKGIpKQorI2RlZmluZSBQUENfTVNHU05EKGIpCQlzdHJpbmdpZnlfaW5fYygubG9uZyBQUENfSU5TVF9NU0dTTkQgfCBcCisJCQkJCV9fUFBDX1JCKGIpKQorI2RlZmluZSBQUENfUkZDSQkJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfUkZDSSkKKyNkZWZpbmUgUFBDX1JGREkJCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX1JGREkpCisjZGVmaW5lIFBQQ19SRk1DSQkJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfUkZNQ0kpCisjZGVmaW5lIFBQQ19UTEJJTFgodCwgYSwgYikJc3RyaW5naWZ5X2luX2MoLmxvbmcgUFBDX0lOU1RfVExCSUxYIHwgXAorCQkJCQlfX1BQQ19UX1RMQih0KSB8IF9fUFBDX1JBKGEpIHwgX19QUENfUkIoYikpCisjZGVmaW5lIFBQQ19UTEJJTFhfQUxMKGEsIGIpCVBQQ19UTEJJTFgoMCwgYSwgYikKKyNkZWZpbmUgUFBDX1RMQklMWF9QSUQoYSwgYikJUFBDX1RMQklMWCgxLCBhLCBiKQorI2RlZmluZSBQUENfVExCSUxYX1ZBKGEsIGIpCVBQQ19UTEJJTFgoMywgYSwgYikKKyNkZWZpbmUgUFBDX1dBSVQodykJCXN0cmluZ2lmeV9pbl9jKC5sb25nIFBQQ19JTlNUX1dBSVQgfCBcCisJCQkJCV9fUFBDX1dDKHcpKQorCisjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1BQQ19PUENPREVfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwY19hc20uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcGNfYXNtLmgKaW5kZXggMWEwZDYyOC4uZjU5YTY2NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3BwY19hc20uaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHBjX2FzbS5oCkBAIC03LDYgKzcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgogI2luY2x1ZGUgPGFzbS9hc20tY29tcGF0Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9wcGMtb3Bjb2RlLmg+CiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAjZXJyb3IgX19GSUxFX18gc2hvdWxkIG9ubHkgYmUgdXNlZCBpbiBhc3NlbWJsZXIgZmlsZXMKQEAgLTE2NywxMSArMTY4LDYgQEAKICNkZWZpbmUgSE1UX01FRElVTV9ISUdIIG9yCTUsNSw1CQkjIG1lZGl1bSBoaWdoIHByaW9yaXR5CiAjZGVmaW5lIEhNVF9ISUdICW9yCTMsMywzCiAKLS8qIGhhbmRsZSBpbnN0cnVjdGlvbnMgdGhhdCBvbGRlciBhc3NlbWJsZXJzIG1heSBub3Qga25vdyAqLwotI2RlZmluZSBSRkNJCQkubG9uZyAweDRjMDAwMDY2CS8qIHJmY2kgaW5zdHJ1Y3Rpb24gKi8KLSNkZWZpbmUgUkZESQkJLmxvbmcgMHg0YzAwMDA0ZQkvKiByZmRpIGluc3RydWN0aW9uICovCi0jZGVmaW5lIFJGTUNJCQkubG9uZyAweDRjMDAwMDRjCS8qIHJmbWNpIGluc3RydWN0aW9uICovCi0KICNpZmRlZiBfX0tFUk5FTF9fCiAjaWZkZWYgQ09ORklHX1BQQzY0CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaAppbmRleCBkMzQ2NjQ5Li45ZWVkMjllIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oCkBAIC0zMTMsNiArMzEzLDI1IEBACiAjZGVmaW5lIEhBVkVfQVJDSF9QSUNLX01NQVBfTEFZT1VUCiAjZW5kaWYKIAorI2lmZGVmIENPTkZJR19QUEM2NAorc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9jbGVhbl9zcChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGlzXzMyKQoreworCXVuc2lnbmVkIGxvbmcgc3A7CisKKwlpZiAoaXNfMzIpCisJCXNwID0gcmVncy0+Z3ByWzFdICYgMHgwZmZmZmZmZmZVTDsKKwllbHNlCisJCXNwID0gcmVncy0+Z3ByWzFdOworCisJcmV0dXJuIHNwOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfY2xlYW5fc3Aoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBpc18zMikKK3sKKwlyZXR1cm4gcmVncy0+Z3ByWzFdOworfQorI2VuZGlmCisKICNlbmRpZiAvKiBfX0tFUk5FTF9fICovCiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYgLyogX0FTTV9QT1dFUlBDX1BST0NFU1NPUl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzYXYuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczNhdi5oCmluZGV4IGNkMjRhYzEuLjA0MjdiMGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczNhdi5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczNhdi5oCkBAIC03MzAsNyArNzMwLDcgQEAKIGV4dGVybiBpbnQgcHMzYXZfY21kX3ZpZGVvX2dldF9tb25pdG9yX2luZm8oc3RydWN0IHBzM2F2X3BrdF9hdl9nZXRfbW9uaXRvcl9pbmZvICosCiAJCQkJCSAgICB1MzIpOwogCi1leHRlcm4gaW50IHBzM2F2X3NldF92aWRlb19tb2RlKHUzMik7CitleHRlcm4gaW50IHBzM2F2X3NldF92aWRlb19tb2RlKGludCk7CiBleHRlcm4gaW50IHBzM2F2X3NldF9hdWRpb19tb2RlKHUzMiwgdTMyLCB1MzIsIHUzMiwgdTMyKTsKIGV4dGVybiBpbnQgcHMzYXZfZ2V0X2F1dG9fbW9kZSh2b2lkKTsKIGV4dGVybiBpbnQgcHMzYXZfZ2V0X21vZGUodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHMzZmIuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczNmYi5oCmluZGV4IGU3MjMzYTguLjkwZGJlZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczNmYi5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wczNmYi5oCkBAIC0yMSw2ICsyMSw3IEBACiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CisjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KIAogLyogaW9jdGwgKi8KICNkZWZpbmUgUFMzRkJfSU9DVExfU0VUTU9ERSAgICAgICBfSU9XKCdyJywgIDEsIGludCkgLyogc2V0IHZpZGVvIG1vZGUgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtNDB4LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTQweC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA3NjMwZmEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTQweC5oCkBAIC0wLDAgKzEsNjQgQEAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX1BURV80MHhfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfUFRFXzQweF9ICisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogQXQgcHJlc2VudCwgYWxsIFBvd2VyUEMgNDAwLWNsYXNzIHByb2Nlc3NvcnMgc2hhcmUgYSBzaW1pbGFyIFRMQgorICogYXJjaGl0ZWN0dXJlLiBUaGUgaW5zdHJ1Y3Rpb24gYW5kIGRhdGEgc2lkZXMgc2hhcmUgYSB1bmlmaWVkLAorICogNjQtZW50cnksIGZ1bGx5LWFzc29jaWF0aXZlIFRMQiB3aGljaCBpcyBtYWludGFpbmVkIHRvdGFsbHkgdW5kZXIKKyAqIHNvZnR3YXJlIGNvbnRyb2wuIEluIGFkZGl0aW9uLCB0aGUgaW5zdHJ1Y3Rpb24gc2lkZSBoYXMgYQorICogaGFyZHdhcmUtbWFuYWdlZCwgNC1lbnRyeSwgZnVsbHktYXNzb2NpYXRpdmUgVExCIHdoaWNoIHNlcnZlcyBhcyBhCisgKiBmaXJzdCBsZXZlbCB0byB0aGUgc2hhcmVkIFRMQi4gVGhlc2UgdHdvIFRMQnMgYXJlIGtub3duIGFzIHRoZSBVVExCCisgKiBhbmQgSVRMQiwgcmVzcGVjdGl2ZWx5IChzZWUgIm1tdS5oIiBmb3IgZGVmaW5pdGlvbnMpLgorICoKKyAqIFRoZXJlIGFyZSBzZXZlcmFsIHBvdGVudGlhbCBnb3RjaGFzIGhlcmUuICBUaGUgNDB4IGhhcmR3YXJlIFRMQkxPCisgKiBmaWVsZCBsb29rcyBsaWtlIHRoaXM6CisgKgorICogMCAgMSAgMiAgMyAgNCAgLi4uIDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxCisgKiBSUE4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gIDAgIDAgRVggV1IgWlNFTC4uLi4uLi4gIFcgIEkgIE0gIEcKKyAqCisgKiBXaGVyZSBwb3NzaWJsZSB3ZSBtYWtlIHRoZSBMaW51eCBQVEUgYml0cyBtYXRjaCB1cCB3aXRoIHRoaXMKKyAqCisgKiAtIGJpdHMgMjAgYW5kIDIxIG11c3QgYmUgY2xlYXJlZCwgYmVjYXVzZSB3ZSB1c2UgNGsgcGFnZXMgKDQweCBjYW4KKyAqICAgc3VwcG9ydCBkb3duIHRvIDFrIHBhZ2VzKSwgdGhpcyBpcyBkb25lIGluIHRoZSBUTEJNaXNzIGV4Y2VwdGlvbgorICogICBoYW5kbGVyLgorICogLSBXZSB1c2Ugb25seSB6b25lcyAwIChmb3Iga2VybmVsIHBhZ2VzKSBhbmQgMSAoZm9yIHVzZXIgcGFnZXMpCisgKiAgIG9mIHRoZSAxNiBhdmFpbGFibGUuICBCaXQgMjQtMjYgb2YgdGhlIFRMQiBhcmUgY2xlYXJlZCBpbiB0aGUgVExCCisgKiAgIG1pc3MgaGFuZGxlci4gIEJpdCAyNyBpcyBQQUdFX1VTRVIsIHRodXMgc2VsZWN0aW5nIHRoZSBjb3JyZWN0CisgKiAgIHpvbmUuCisgKiAtIFBSRVNFTlQgKm11c3QqIGJlIGluIHRoZSBib3R0b20gdHdvIGJpdHMgYmVjYXVzZSBzd2FwIGNhY2hlCisgKiAgIGVudHJpZXMgdXNlIHRoZSB0b3AgMzAgYml0cy4gIEJlY2F1c2UgNDB4IGRvZXNuJ3Qgc3VwcG9ydCBTTVAKKyAqICAgYW55d2F5LCBNIGlzIGlycmVsZXZhbnQgc28gd2UgYm9ycm93IGl0IGZvciBQQUdFX1BSRVNFTlQuICBCaXQgMzAKKyAqICAgaXMgY2xlYXJlZCBpbiB0aGUgVExCIG1pc3MgaGFuZGxlciBiZWZvcmUgdGhlIFRMQiBlbnRyeSBpcyBsb2FkZWQuCisgKiAtIEFsbCBvdGhlciBiaXRzIG9mIHRoZSBQVEUgYXJlIGxvYWRlZCBpbnRvIFRMQkxPIHdpdGhvdXQKKyAqICAgbW9kaWZpY2F0aW9uLCBsZWF2aW5nIHVzIG9ubHkgdGhlIGJpdHMgMjAsIDIxLCAyNCwgMjUsIDI2LCAzMCBmb3IKKyAqICAgc29mdHdhcmUgUFRFIGJpdHMuICBXZSBhY3R1YWxseSB1c2UgdXNlIGJpdHMgMjEsIDI0LCAyNSwgYW5kCisgKiAgIDMwIHJlc3BlY3RpdmVseSBmb3IgdGhlIHNvZnR3YXJlIGJpdHM6IEFDQ0VTU0VELCBESVJUWSwgUlcsIGFuZAorICogICBQUkVTRU5ULgorICovCisKKyNkZWZpbmUJX1BBR0VfR1VBUkRFRAkweDAwMQkvKiBHOiBwYWdlIGlzIGd1YXJkZWQgZnJvbSBwcmVmZXRjaCAqLworI2RlZmluZSBfUEFHRV9GSUxFCTB4MDAxCS8qIHdoZW4gIXByZXNlbnQ6IG5vbmxpbmVhciBmaWxlIG1hcHBpbmcgKi8KKyNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMgkvKiBzb2Z0d2FyZTogUFRFIGNvbnRhaW5zIGEgdHJhbnNsYXRpb24gKi8KKyNkZWZpbmUJX1BBR0VfTk9fQ0FDSEUJMHgwMDQJLyogSTogY2FjaGluZyBpcyBpbmhpYml0ZWQgKi8KKyNkZWZpbmUJX1BBR0VfV1JJVEVUSFJVCTB4MDA4CS8qIFc6IGNhY2hpbmcgaXMgd3JpdGUtdGhyb3VnaCAqLworI2RlZmluZQlfUEFHRV9VU0VSCTB4MDEwCS8qIG1hdGNoZXMgb25lIG9mIHRoZSB6b25lIHBlcm1pc3Npb24gYml0cyAqLworI2RlZmluZQlfUEFHRV9SVwkweDA0MAkvKiBzb2Z0d2FyZTogV3JpdGVzIHBlcm1pdHRlZCAqLworI2RlZmluZQlfUEFHRV9ESVJUWQkweDA4MAkvKiBzb2Z0d2FyZTogZGlydHkgcGFnZSAqLworI2RlZmluZSBfUEFHRV9IV1dSSVRFCTB4MTAwCS8qIGhhcmR3YXJlOiBEaXJ0eSAmIFJXLCBzZXQgaW4gZXhjZXB0aW9uICovCisjZGVmaW5lIF9QQUdFX0hXRVhFQwkweDIwMAkvKiBoYXJkd2FyZTogRVggcGVybWlzc2lvbiAqLworI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkweDQwMAkvKiBzb2Z0d2FyZTogUjogcGFnZSByZWZlcmVuY2VkICovCisKKyNkZWZpbmUgX1BNRF9QUkVTRU5UCTB4NDAwCS8qIFBNRCBwb2ludHMgdG8gcGFnZSBvZiBQVEVzICovCisjZGVmaW5lIF9QTURfQkFECTB4ODAyCisjZGVmaW5lIF9QTURfU0laRQkweDBlMAkvKiBzaXplIGZpZWxkLCAhPSAwIGZvciBsYXJnZS1wYWdlIFBNRCBlbnRyeSAqLworI2RlZmluZSBfUE1EX1NJWkVfNE0JMHgwYzAKKyNkZWZpbmUgX1BNRF9TSVpFXzE2TQkweDBlMAorCisjZGVmaW5lIFBNRF9QQUdFX1NJWkUocG1kdmFsKQkoMTAyNCA8PCAoKChwbWR2YWwpICYgX1BNRF9TSVpFKSA+PiA0KSkKKworLyogVW50aWwgbXkgcmV3b3JrIGlzIGZpbmlzaGVkLCA0MHggc3RpbGwgbmVlZHMgYXRvbWljIFBURSB1cGRhdGVzICovCisjZGVmaW5lIFBURV9BVE9NSUNfVVBEQVRFUwkxCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogIF9BU01fUE9XRVJQQ19QVEVfNDB4X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtNDR4LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTQ0eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjM3ZTk4YmMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTQ0eC5oCkBAIC0wLDAgKzEsMTAyIEBACisjaWZuZGVmIF9BU01fUE9XRVJQQ19QVEVfNDR4X0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX1BURV80NHhfSAorI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIERlZmluaXRpb25zIGZvciBQUEM0NDAKKyAqCisgKiBCZWNhdXNlIG9mIHRoZSAzIHdvcmQgVExCIGVudHJpZXMgdG8gc3VwcG9ydCAzNi1iaXQgYWRkcmVzc2luZywKKyAqIHRoZSBhdHRyaWJ1dGUgYXJlIGRpZmZpY3VsdCB0byBtYXAgaW4gc3VjaCBhIGZhc2hpb24gdGhhdCB0aGV5CisgKiBhcmUgZWFzaWx5IGxvYWRlZCBkdXJpbmcgZXhjZXB0aW9uIHByb2Nlc3NpbmcuICBJIGRlY2lkZWQgdG8KKyAqIG9yZ2FuaXplIHRoZSBlbnRyeSBzbyB0aGUgRVJQTiBpcyB0aGUgb25seSBwb3J0aW9uIGluIHRoZQorICogdXBwZXIgd29yZCBvZiB0aGUgUFRFIGFuZCB0aGUgYXR0cmlidXRlIGJpdHMgYmVsb3cgYXJlIHBhY2tlZAorICogaW4gYXMgc2Vuc2libHkgYXMgdGhleSBjYW4gYmUgaW4gdGhlIGFyZWEgYmVsb3cgYSA0S0IgcGFnZSBzaXplCisgKiBvcmllbnRlZCBSUE4uICBUaGlzIGF0IGxlYXN0IG1ha2VzIGl0IGVhc3kgdG8gbG9hZCB0aGUgUlBOIGFuZAorICogRVJQTiBmaWVsZHMgaW4gdGhlIFRMQi4gLU1hdHQKKyAqCisgKiBUaGlzIGlzbid0IGVudGlyZWx5IHRydWUgYW55bW9yZSwgYXQgbGVhc3Qgc29tZSBiaXRzIGFyZSBub3cKKyAqIGVhc2llciB0byBtb3ZlIGludG8gdGhlIFRMQiBmcm9tIHRoZSBQVEUuIC1CZW5ILgorICoKKyAqIE5vdGUgdGhhdCB0aGVzZSBiaXRzIHByZWNsdWRlIGZ1dHVyZSB1c2Ugb2YgYSBwYWdlIHNpemUKKyAqIGxlc3MgdGhhbiA0S0IuCisgKgorICoKKyAqIFBQQyA0NDAgY29yZSBoYXMgZm9sbG93aW5nIFRMQiBhdHRyaWJ1dGUgZmllbGRzOworICoKKyAqICAgVExCMToKKyAqICAgMCAgMSAgMiAgMyAgNCAgLi4uIDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxCisgKiAgIFJQTi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLiAgLSAgLSAgLSAgLSAgLSAgLSBFUlBOLi4uLi4uLgorICoKKyAqICAgVExCMjoKKyAqICAgMCAgMSAgMiAgMyAgNCAgLi4uIDE2IDE3IDE4IDE5IDIwIDIxIDIyIDIzIDI0IDI1IDI2IDI3IDI4IDI5IDMwIDMxCisgKiAgIC0gIC0gIC0gIC0gIC0gICAgLSBVMCBVMSBVMiBVMyBXICBJICBNICBHICBFICAgLSBVWCBVVyBVUiBTWCBTVyBTUgorICoKKyAqIE5ld2VyIDQ0MCBjb3JlcyAoNDQweDYgYXMgdXNlZCBvbiBBTUNDIDQ2MEVYLzQ2MEdUKSBoYXZlIGFkZGl0aW9uYWwKKyAqIFRMQjIgc3RvcmFnZSBhdHRpYnV0ZSBmaWVsZHMuIFRob3NlIGFyZToKKyAqCisgKiAgIFRMQjI6CisgKiAgIDAuLi4xMCAgICAxMSAgIDEyICAgMTMgICAxNCAgIDE1ICAgMTYuLi4zMQorICogICBubyBjaGFuZ2UgV0wxICBJTDFJIElMMUQgSUwySSBJTDJEIG5vIGNoYW5nZQorICoKKyAqIFRoZXJlIGFyZSBzb21lIGNvbnN0cmFpbnMgYW5kIG9wdGlvbnMsIHRvIGRlY2lkZSBtYXBwaW5nIHNvZnR3YXJlIGJpdHMKKyAqIGludG8gVExCIGVudHJ5LgorICoKKyAqICAgLSBQUkVTRU5UICptdXN0KiBiZSBpbiB0aGUgYm90dG9tIHRocmVlIGJpdHMgYmVjYXVzZSBzd2FwIGNhY2hlCisgKiAgICAgZW50cmllcyB1c2UgdGhlIHRvcCAyOSBiaXRzIGZvciBUTEIyLgorICoKKyAqICAgLSBGSUxFICptdXN0KiBiZSBpbiB0aGUgYm90dG9tIHRocmVlIGJpdHMgYmVjYXVzZSBzd2FwIGNhY2hlCisgKiAgICAgZW50cmllcyB1c2UgdGhlIHRvcCAyOSBiaXRzIGZvciBUTEIyLgorICoKKyAqICAgLSBDQUNIRSBDT0hFUkVOVCBiaXQgKE0pIGhhcyBubyBlZmZlY3Qgb24gb3JpZ2luYWwgUFBDNDQwIGNvcmVzLAorICogICAgIGJlY2F1c2UgaXQgZG9lc24ndCBzdXBwb3J0IFNNUC4gSG93ZXZlciwgc29tZSBsYXRlciA0NjAgdmFyaWFudHMKKyAqICAgICBoYXZlIC1zb21lLSBmb3JtIG9mIFNNUCBzdXBwb3J0IGFuZCBzbyBJIGtlZXAgdGhlIGJpdCB0aGVyZSBmb3IKKyAqICAgICBmdXR1cmUgdXNlCisgKgorICogV2l0aCB0aGUgUFBDIDQ0eCBMaW51eCBpbXBsZW1lbnRhdGlvbiwgdGhlIDAtMTF0aCBMU0JzIG9mIHRoZSBQVEUgYXJlIHVzZWQKKyAqIGZvciBtZW1vcnkgcHJvdGVjdGlvbiByZWxhdGVkIGZ1bmN0aW9ucyAoc2VlIFBURSBzdHJ1Y3R1cmUgaW4KKyAqIGluY2x1ZGUvYXNtLXBwYy9tbXUuaCkuICBUaGUgX1BBR0VfWFhYIGRlZmluaXRpb25zIGluIHRoaXMgZmlsZSBtYXAgdG8gdGhlCisgKiBhYm92ZSBiaXRzLiAgTm90ZSB0aGF0IHRoZSBiaXQgdmFsdWVzIGFyZSBDUFUgc3BlY2lmaWMsIG5vdCBhcmNoaXRlY3R1cmUKKyAqIHNwZWNpZmljLgorICoKKyAqIFRoZSBrZXJuZWwgUFRFIGVudHJ5IGhvbGRzIGFuIGFyY2gtZGVwZW5kZW50IHN3cF9lbnRyeSBzdHJ1Y3R1cmUgdW5kZXIKKyAqIGNlcnRhaW4gc2l0dWF0aW9ucy4gSW4gb3RoZXIgd29yZHMsIGluIHN1Y2ggc2l0dWF0aW9ucyBzb21lIHBvcnRpb24gb2YKKyAqIHRoZSBQVEUgYml0cyBhcmUgdXNlZCBhcyBhIHN3cF9lbnRyeS4gSW4gdGhlIFBQQyBpbXBsZW1lbnRhdGlvbiwgdGhlCisgKiAzLTI0dGggTFNCIGFyZSBzaGFyZWQgd2l0aCBzd3BfZW50cnksIGhvd2V2ZXIgdGhlIDAtMm5kIHRocmVlIExTQiBzdGlsbAorICogaG9sZCBwcm90ZWN0aW9uIHZhbHVlcy4gVGhhdCBtZWFucyB0aGUgdGhyZWUgcHJvdGVjdGlvbiBiaXRzIGFyZQorICogcmVzZXJ2ZWQgZm9yIGJvdGggUFRFIGFuZCBTV0FQIGVudHJ5IGF0IHRoZSBtb3N0IHNpZ25pZmljYW50IHRocmVlCisgKiBMU0JzLgorICoKKyAqIFRoZXJlIGFyZSB0aHJlZSBwcm90ZWN0aW9uIGJpdHMgYXZhaWxhYmxlIGZvciBTV0FQIGVudHJ5OgorICoJX1BBR0VfUFJFU0VOVAorICoJX1BBR0VfRklMRQorICoJX1BBR0VfSEFTSFBURSAoaWYgSFcgaGFzKQorICoKKyAqIFNvIHRob3NlIHRocmVlIGJpdHMgaGF2ZSB0byBiZSBpbnNpZGUgb2YgMC0ybmQgTFNCIG9mIFBURS4KKyAqCisgKi8KKworI2RlZmluZSBfUEFHRV9QUkVTRU5UCTB4MDAwMDAwMDEJCS8qIFM6IFBURSB2YWxpZCAqLworI2RlZmluZSBfUEFHRV9SVwkweDAwMDAwMDAyCQkvKiBTOiBXcml0ZSBwZXJtaXNzaW9uICovCisjZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDAwMDAwNAkJLyogUzogbm9ubGluZWFyIGZpbGUgbWFwcGluZyAqLworI2RlZmluZSBfUEFHRV9IV0VYRUMJMHgwMDAwMDAwNAkJLyogSDogRXhlY3V0ZSBwZXJtaXNzaW9uICovCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4MDAwMDAwMDgJCS8qIFM6IFBhZ2UgcmVmZXJlbmNlZCAqLworI2RlZmluZSBfUEFHRV9ESVJUWQkweDAwMDAwMDEwCQkvKiBTOiBQYWdlIGRpcnR5ICovCisjZGVmaW5lIF9QQUdFX1NQRUNJQUwJMHgwMDAwMDAyMAkJLyogUzogU3BlY2lhbCBwYWdlICovCisjZGVmaW5lIF9QQUdFX1VTRVIJMHgwMDAwMDA0MAkJLyogUzogVXNlciBwYWdlICovCisjZGVmaW5lIF9QQUdFX0VORElBTgkweDAwMDAwMDgwCQkvKiBIOiBFIGJpdCAqLworI2RlZmluZSBfUEFHRV9HVUFSREVECTB4MDAwMDAxMDAJCS8qIEg6IEcgYml0ICovCisjZGVmaW5lIF9QQUdFX0NPSEVSRU5UCTB4MDAwMDAyMDAJCS8qIEg6IE0gYml0ICovCisjZGVmaW5lIF9QQUdFX05PX0NBQ0hFCTB4MDAwMDA0MDAJCS8qIEg6IEkgYml0ICovCisjZGVmaW5lIF9QQUdFX1dSSVRFVEhSVQkweDAwMDAwODAwCQkvKiBIOiBXIGJpdCAqLworCisvKiBUT0RPOiBBZGQgbGFyZ2UgcGFnZSBsb3dtZW0gbWFwcGluZyBzdXBwb3J0ICovCisjZGVmaW5lIF9QTURfUFJFU0VOVAkwCisjZGVmaW5lIF9QTURfUFJFU0VOVF9NQVNLIChQQUdFX01BU0spCisjZGVmaW5lIF9QTURfQkFECSh+UEFHRV9NQVNLKQorCisvKiBFUlBOIGluIGEgUFRFIG5ldmVyIGdldHMgY2xlYXJlZCwgaWdub3JlIGl0ICovCisjZGVmaW5lIF9QVEVfTk9ORV9NQVNLCTB4ZmZmZmZmZmYwMDAwMDAwMFVMTAorCisKKyNlbmRpZiAvKiBfX0tFUk5FTF9fICovCisjZW5kaWYgLyogIF9BU01fUE9XRVJQQ19QVEVfNDR4X0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtOHh4LmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTh4eC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjhjNmUzMTIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLTh4eC5oCkBAIC0wLDAgKzEsNjcgQEAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX1BURV84eHhfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfUFRFXzh4eF9ICisjaWZkZWYgX19LRVJORUxfXworCisvKgorICogVGhlIFBvd2VyUEMgTVBDOHh4IHVzZXMgYSBUTEIgd2l0aCBoYXJkd2FyZSBhc3Npc3RlZCwgc29mdHdhcmUgdGFibGV3YWxrLgorICogV2UgYWxzbyB1c2UgdGhlIHR3byBsZXZlbCB0YWJsZXMsIGJ1dCB3ZSBjYW4gcHV0IHRoZSByZWFsIGJpdHMgaW4gdGhlbQorICogbmVlZGVkIGZvciB0aGUgVExCIGFuZCB0YWJsZXdhbGsuICBUaGVzZSBkZWZpbml0aW9ucyByZXF1aXJlIE14X0NUUi5QUE0gPSAwLAorICogTXhfQ1RSLlBQQ1MgPSAwLCBhbmQgTURfQ1RSLlRXQU0gPSAxLiAgVGhlIGxldmVsIDIgZGVzY3JpcHRvciBoYXMKKyAqIGFkZGl0aW9uYWwgcGFnZSBwcm90ZWN0aW9uICh3aGVuIE14X0NUUi5QUENTID0gMSkgdGhhdCBhbGxvd3MgVExCIGhpdAorICogYmFzZWQgdXBvbiB1c2VyL3N1cGVyIGFjY2Vzcy4gIFRoZSBUTEIgZG9lcyBub3QgaGF2ZSBhY2Nlc3NlZCBub3Igd3JpdGUKKyAqIHByb3RlY3QuICBXZSBhc3N1bWUgdGhhdCBpZiB0aGUgVExCIGdldCBsb2FkZWQgd2l0aCBhbiBlbnRyeSBpdCBpcworICogYWNjZXNzZWQsIGFuZCBvdmVybG9hZCB0aGUgY2hhbmdlZCBiaXQgZm9yIHdyaXRlIHByb3RlY3QuICBXZSB1c2UKKyAqIHR3byBiaXRzIGluIHRoZSBzb2Z0d2FyZSBwdGUgdGhhdCBhcmUgc3VwcG9zZWQgdG8gYmUgc2V0IHRvIHplcm8gaW4KKyAqIHRoZSBUTEIgZW50cnkgKDI0IGFuZCAyNSkgZm9yIHRoZXNlIGluZGljYXRvcnMuICBBbHRob3VnaCB0aGUgbGV2ZWwgMQorICogZGVzY3JpcHRvciBjb250YWlucyB0aGUgZ3VhcmRlZCBhbmQgd3JpdGV0aHJvdWdoL2NvcHliYWNrIGJpdHMsIHdlIGNhbgorICogc2V0IHRoZXNlIGF0IHRoZSBwYWdlIGxldmVsIHNpbmNlIHRoZXkgZ2V0IGNvcGllZCBmcm9tIHRoZSBNeF9UV0MKKyAqIHJlZ2lzdGVyIHdoZW4gdGhlIFRMQiBlbnRyeSBpcyBsb2FkZWQuICBXZSB3aWxsIHVzZSBiaXQgMjcgZm9yIGd1YXJkLCBzaW5jZQorICogdGhhdCBpcyB3aGVyZSBpdCBleGlzdHMgaW4gdGhlIE1EX1RXQywgYW5kIGJpdCAyNiBmb3Igd3JpdGV0aHJvdWdoLgorICogVGhlc2Ugd2lsbCBnZXQgbWFza2VkIGZyb20gdGhlIGxldmVsIDIgZGVzY3JpcHRvciBhdCBUTEIgbG9hZCB0aW1lLCBhbmQKKyAqIGNvcGllZCB0byB0aGUgTURfVFdDIGJlZm9yZSBpdCBnZXRzIGxvYWRlZC4KKyAqIExhcmdlIHBhZ2Ugc2l6ZXMgYWRkZWQuICBXZSBjdXJyZW50bHkgc3VwcG9ydCB0d28gc2l6ZXMsIDRLIGFuZCA4TS4KKyAqIFRoaXMgYWxzbyBhbGxvd3MgYSBUTEIgaGFuZGVyIG9wdGltaXphdGlvbiBiZWNhdXNlIHdlIGNhbiBkaXJlY3RseQorICogbG9hZCB0aGUgUE1EIGludG8gTURfVFdDLiAgVGhlIDhNIHBhZ2VzIGFyZSBvbmx5IHVzZWQgZm9yIGtlcm5lbAorICogbWFwcGluZyBvZiB3ZWxsIGtub3duIGFyZWFzLiAgVGhlIFBNRCAoUEdEKSBlbnRyaWVzIGNvbnRhaW4gY29udHJvbAorICogZmxhZ3MgaW4gYWRkaXRpb24gdG8gdGhlIGFkZHJlc3MsIHNvIGNhcmUgbXVzdCBiZSB0YWtlbiB0aGF0IHRoZQorICogc29mdHdhcmUgbm8gbG9uZ2VyIGFzc3VtZXMgdGhlc2UgYXJlIG9ubHkgcG9pbnRlcnMuCisgKi8KKworLyogRGVmaW5pdGlvbnMgZm9yIDh4eCBlbWJlZGRlZCBjaGlwcy4gKi8KKyNkZWZpbmUgX1BBR0VfUFJFU0VOVAkweDAwMDEJLyogUGFnZSBpcyB2YWxpZCAqLworI2RlZmluZSBfUEFHRV9GSUxFCTB4MDAwMgkvKiB3aGVuICFwcmVzZW50OiBub25saW5lYXIgZmlsZSBtYXBwaW5nICovCisjZGVmaW5lIF9QQUdFX05PX0NBQ0hFCTB4MDAwMgkvKiBJOiBjYWNoZSBpbmhpYml0ICovCisjZGVmaW5lIF9QQUdFX1NIQVJFRAkweDAwMDQJLyogTm8gQVNJRCAoY29udGV4dCkgY29tcGFyZSAqLworCisvKiBUaGVzZSBmaXZlIHNvZnR3YXJlIGJpdHMgbXVzdCBiZSBtYXNrZWQgb3V0IHdoZW4gdGhlIGVudHJ5IGlzIGxvYWRlZAorICogaW50byB0aGUgVExCLgorICovCisjZGVmaW5lIF9QQUdFX0VYRUMJMHgwMDA4CS8qIHNvZnR3YXJlOiBpLWNhY2hlIGNvaGVyZW5jeSByZXF1aXJlZCAqLworI2RlZmluZSBfUEFHRV9HVUFSREVECTB4MDAxMAkvKiBzb2Z0d2FyZTogZ3VhcmRlZCBhY2Nlc3MgKi8KKyNkZWZpbmUgX1BBR0VfRElSVFkJMHgwMDIwCS8qIHNvZnR3YXJlOiBwYWdlIGNoYW5nZWQgKi8KKyNkZWZpbmUgX1BBR0VfUlcJMHgwMDQwCS8qIHNvZnR3YXJlOiB1c2VyIHdyaXRlIGFjY2VzcyBhbGxvd2VkICovCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4MDA4MAkvKiBzb2Z0d2FyZTogcGFnZSByZWZlcmVuY2VkICovCisKKy8qIFNldHRpbmcgYW55IGJpdHMgaW4gdGhlIG5pYmJsZSB3aXRoIHRoZSBmb2xsb3cgdHdvIGNvbnRyb2xzIHdpbGwKKyAqIHJlcXVpcmUgYSBUTEIgZXhjZXB0aW9uIGhhbmRsZXIgY2hhbmdlLiAgSXQgaXMgYXNzdW1lZCB1bnVzZWQgYml0cworICogYXJlIGFsd2F5cyB6ZXJvLgorICovCisjZGVmaW5lIF9QQUdFX0hXV1JJVEUJMHgwMTAwCS8qIGgvdyB3cml0ZSBlbmFibGU6IG5ldmVyIHNldCBpbiBMaW51eCBQVEUgKi8KKyNkZWZpbmUgX1BBR0VfVVNFUgkweDA4MDAJLyogT25lIG9mIHRoZSBQUCBiaXRzLCB0aGUgb3RoZXIgaXMgVVNFUiZ+UlcgKi8KKworI2RlZmluZSBfUE1EX1BSRVNFTlQJMHgwMDAxCisjZGVmaW5lIF9QTURfQkFECTB4MGZmMAorI2RlZmluZSBfUE1EX1BBR0VfTUFTSwkweDAwMGMKKyNkZWZpbmUgX1BNRF9QQUdFXzhNCTB4MDAwYworCisjZGVmaW5lIF9QVEVfTk9ORV9NQVNLIF9QQUdFX0FDQ0VTU0VECisKKy8qIFVudGlsIG15IHJld29yayBpcyBmaW5pc2hlZCwgOHh4IHN0aWxsIG5lZWRzIGF0b21pYyBQVEUgdXBkYXRlcyAqLworI2RlZmluZSBQVEVfQVRPTUlDX1VQREFURVMJMQorCisvKiBXZSBuZWVkIHRvIGFkZCBfUEFHRV9TSEFSRUQgdG8ga2VybmVsIHBhZ2VzICovCisjZGVmaW5lIF9QQUdFX0tFUk5FTF9STwkoX1BBR0VfU0hBUkVEKQorI2RlZmluZSBfUEFHRV9LRVJORUxfUlcJKF9QQUdFX0RJUlRZIHwgX1BBR0VfUlcgfCBfUEFHRV9IV1dSSVRFKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qICBfQVNNX1BPV0VSUENfUFRFXzh4eF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWNvbW1vbi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1jb21tb24uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kOTc0MGU4Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1jb21tb24uaApAQCAtMCwwICsxLDE4MCBAQAorLyogSW5jbHVkZWQgZnJvbSBhc20vcGd0YWJsZS0qLmggb25seSAhICovCisKKy8qCisgKiBTb21lIGJpdHMgYXJlIG9ubHkgdXNlZCBvbiBzb21lIGNwdSBmYW1pbGllcy4uLiBNYWtlIHN1cmUgdGhhdCBhbGwKKyAqIHRoZSB1bmRlZmluZWQgZ2V0cyBhIHNlbnNpYmxlIGRlZmF1bHQKKyAqLworI2lmbmRlZiBfUEFHRV9IQVNIUFRFCisjZGVmaW5lIF9QQUdFX0hBU0hQVEUJMAorI2VuZGlmCisjaWZuZGVmIF9QQUdFX1NIQVJFRAorI2RlZmluZSBfUEFHRV9TSEFSRUQJMAorI2VuZGlmCisjaWZuZGVmIF9QQUdFX0hXV1JJVEUKKyNkZWZpbmUgX1BBR0VfSFdXUklURQkwCisjZW5kaWYKKyNpZm5kZWYgX1BBR0VfSFdFWEVDCisjZGVmaW5lIF9QQUdFX0hXRVhFQwkwCisjZW5kaWYKKyNpZm5kZWYgX1BBR0VfRVhFQworI2RlZmluZSBfUEFHRV9FWEVDCTAKKyNlbmRpZgorI2lmbmRlZiBfUEFHRV9FTkRJQU4KKyNkZWZpbmUgX1BBR0VfRU5ESUFOCTAKKyNlbmRpZgorI2lmbmRlZiBfUEFHRV9DT0hFUkVOVAorI2RlZmluZSBfUEFHRV9DT0hFUkVOVAkwCisjZW5kaWYKKyNpZm5kZWYgX1BBR0VfV1JJVEVUSFJVCisjZGVmaW5lIF9QQUdFX1dSSVRFVEhSVQkwCisjZW5kaWYKKyNpZm5kZWYgX1BBR0VfU1BFQ0lBTAorI2RlZmluZSBfUEFHRV9TUEVDSUFMCTAKKyNlbmRpZgorI2lmbmRlZiBfUEFHRV80S19QRk4KKyNkZWZpbmUgX1BBR0VfNEtfUEZOCQkwCisjZW5kaWYKKyNpZm5kZWYgX1BBR0VfUFNJWkUKKyNkZWZpbmUgX1BBR0VfUFNJWkUJCTAKKyNlbmRpZgorI2lmbmRlZiBfUE1EX1BSRVNFTlRfTUFTSworI2RlZmluZSBfUE1EX1BSRVNFTlRfTUFTSwlfUE1EX1BSRVNFTlQKKyNlbmRpZgorI2lmbmRlZiBfUE1EX1NJWkUKKyNkZWZpbmUgX1BNRF9TSVpFCTAKKyNkZWZpbmUgUE1EX1BBR0VfU0laRShwbWQpCWJhZF9jYWxsX3RvX1BNRF9QQUdFX1NJWkUoKQorI2VuZGlmCisjaWZuZGVmIF9QQUdFX0tFUk5FTF9STworI2RlZmluZSBfUEFHRV9LRVJORUxfUk8JMAorI2VuZGlmCisjaWZuZGVmIF9QQUdFX0tFUk5FTF9SVworI2RlZmluZSBfUEFHRV9LRVJORUxfUlcJKF9QQUdFX0RJUlRZIHwgX1BBR0VfUlcgfCBfUEFHRV9IV1dSSVRFKQorI2VuZGlmCisjaWZuZGVmIF9QQUdFX0hQVEVGTEFHUworI2RlZmluZSBfUEFHRV9IUFRFRkxBR1MgX1BBR0VfSEFTSFBURQorI2VuZGlmCisjaWZuZGVmIF9QVEVfTk9ORV9NQVNLCisjZGVmaW5lIF9QVEVfTk9ORV9NQVNLCV9QQUdFX0hQVEVGTEFHUworI2VuZGlmCisKKy8qIE1ha2Ugc3VyZSB3ZSBnZXQgYSBsaW5rIGVycm9yIGlmIFBNRF9QQUdFX1NJWkUgaXMgZXZlciBjYWxsZWQgb24gYQorICoga2VybmVsIHdpdGhvdXQgbGFyZ2UgcGFnZSBQTUQgc3VwcG9ydAorICovCisjaWZuZGVmIF9fQVNTRU1CTFlfXworZXh0ZXJuIHVuc2lnbmVkIGxvbmcgYmFkX2NhbGxfdG9fUE1EX1BBR0VfU0laRSh2b2lkKTsKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKworLyogTG9jYXRpb24gb2YgdGhlIFBGTiBpbiB0aGUgUFRFLiBNb3N0IDMyLWJpdCBwbGF0Zm9ybXMgdXNlIHRoZSBzYW1lCisgKiBhcyBfUEFHRV9TSElGVCBoZXJlIChpZSwgbmF0dXJhbGx5IGFsaWduZWQpLgorICogUGxhdGZvcm0gd2hvIGRvbid0IGp1c3QgcHJlLWRlZmluZSB0aGUgdmFsdWUgc28gd2UgZG9uJ3Qgb3ZlcnJpZGUgaXQgaGVyZQorICovCisjaWZuZGVmIFBURV9SUE5fU0hJRlQKKyNkZWZpbmUgUFRFX1JQTl9TSElGVAkoUEFHRV9TSElGVCkKKyNlbmRpZgorCisvKiBUaGUgbWFzayBjb252ZXJlZCBieSB0aGUgUlBOIG11c3QgYmUgYSBVTEwgb24gMzItYml0IHBsYXRmb3JtcyB3aXRoCisgKiA2NC1iaXQgUFRFcworICovCisjaWYgZGVmaW5lZChDT05GSUdfUFBDMzIpICYmIGRlZmluZWQoQ09ORklHX1BURV82NEJJVCkKKyNkZWZpbmUgUFRFX1JQTl9NQVgJKDFVTEwgPDwgKDY0IC0gUFRFX1JQTl9TSElGVCkpCisjZGVmaW5lIFBURV9SUE5fTUFTSwkofigoMVVMTDw8UFRFX1JQTl9TSElGVCktMSkpCisjZWxzZQorI2RlZmluZSBQVEVfUlBOX01BWAkoMVVMIDw8ICgzMiAtIFBURV9SUE5fU0hJRlQpKQorI2RlZmluZSBQVEVfUlBOX01BU0sJKH4oKDFVTDw8UFRFX1JQTl9TSElGVCktMSkpCisjZW5kaWYKKworLyogX1BBR0VfQ0hHX01BU0sgbWFza3Mgb2YgYml0cyB0aGF0IGFyZSB0byBiZSBwcmVzZXJ2ZWQgYWNjcm9zcworICogcGdwcm90IGNoYW5nZXMKKyAqLworI2RlZmluZSBfUEFHRV9DSEdfTUFTSwkoUFRFX1JQTl9NQVNLIHwgX1BBR0VfSFBURUZMQUdTIHwgX1BBR0VfRElSVFkgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9TUEVDSUFMKQorCisvKiBNYXNrIG9mIGJpdHMgcmV0dXJuZWQgYnkgcHRlX3BncHJvdCgpICovCisjZGVmaW5lIFBBR0VfUFJPVF9CSVRTCShfUEFHRV9HVUFSREVEIHwgX1BBR0VfQ09IRVJFTlQgfCBfUEFHRV9OT19DQUNIRSB8IFwKKwkJCSBfUEFHRV9XUklURVRIUlUgfCBfUEFHRV9FTkRJQU4gfCBfUEFHRV80S19QRk4gfCBcCisJCQkgX1BBR0VfVVNFUiB8IF9QQUdFX0FDQ0VTU0VEIHwgXAorCQkJIF9QQUdFX1JXIHwgX1BBR0VfSFdXUklURSB8IF9QQUdFX0RJUlRZIHwgXAorCQkJIF9QQUdFX0VYRUMgfCBfUEFHRV9IV0VYRUMpCisKKy8qCisgKiBXZSBkZWZpbmUgMiBzZXRzIG9mIGJhc2UgcHJvdCBiaXRzLCBvbmUgZm9yIGJhc2ljIHBhZ2VzIChpZSwKKyAqIGNhY2hlYWJsZSBrZXJuZWwgYW5kIHVzZXIgcGFnZXMpIGFuZCBvbmUgZm9yIG5vbiBjYWNoZWFibGUKKyAqIHBhZ2VzLiBXZSBhbHdheXMgc2V0IF9QQUdFX0NPSEVSRU5UIHdoZW4gU01QIGlzIGVuYWJsZWQgb3IKKyAqIHRoZSBwcm9jZXNzb3IgbWlnaHQgbmVlZCBpdCBmb3IgRE1BIGNvaGVyZW5jeS4KKyAqLworI2RlZmluZSBfUEFHRV9CQVNFX05DCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9QU0laRSkKKyNpZiBkZWZpbmVkKENPTkZJR19TTVApIHx8IGRlZmluZWQoQ09ORklHX1BQQ19TVERfTU1VKQorI2RlZmluZSBfUEFHRV9CQVNFCShfUEFHRV9CQVNFX05DIHwgX1BBR0VfQ09IRVJFTlQpCisjZWxzZQorI2RlZmluZSBfUEFHRV9CQVNFCShfUEFHRV9CQVNFX05DKQorI2VuZGlmCisKKy8qIFBlcm1pc3Npb24gbWFza3MgdXNlZCB0byBnZW5lcmF0ZSB0aGUgX19QIGFuZCBfX1MgdGFibGUsCisgKgorICogTm90ZTpfX3BncHJvdCBpcyBkZWZpbmVkIGluIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wYWdlLmgKKyAqCisgKiBXcml0ZSBwZXJtaXNzaW9ucyBpbXBseSByZWFkIHBlcm1pc3Npb25zIGZvciBub3cgKHdlIGNvdWxkIG1ha2Ugd3JpdGUtb25seQorICogcGFnZXMgb24gQm9va0UgYnV0IHdlIGRvbid0IGJvdGhlciBmb3Igbm93KS4gRXhlY3V0ZSBwZXJtaXNzaW9uIGNvbnRyb2wgaXMKKyAqIHBvc3NpYmxlIG9uIHBsYXRmb3JtcyB0aGF0IGRlZmluZSBfUEFHRV9FWEVDCisgKgorICogTm90ZSBkdWUgdG8gdGhlIHdheSB2bSBmbGFncyBhcmUgbGFpZCBvdXQsIHRoZSBiaXRzIGFyZSBYV1IKKyAqLworI2RlZmluZSBQQUdFX05PTkUJX19wZ3Byb3QoX1BBR0VfQkFTRSkKKyNkZWZpbmUgUEFHRV9TSEFSRUQJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIgfCBfUEFHRV9SVykKKyNkZWZpbmUgUEFHRV9TSEFSRURfWAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUiB8IF9QQUdFX1JXIHwgX1BBR0VfRVhFQykKKyNkZWZpbmUgUEFHRV9DT1BZCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9VU0VSKQorI2RlZmluZSBQQUdFX0NPUFlfWAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0VYRUMpCisjZGVmaW5lIFBBR0VfUkVBRE9OTFkJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX1VTRVIpCisjZGVmaW5lIFBBR0VfUkVBRE9OTFlfWAlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfVVNFUiB8IF9QQUdFX0VYRUMpCisKKyNkZWZpbmUgX19QMDAwCVBBR0VfTk9ORQorI2RlZmluZSBfX1AwMDEJUEFHRV9SRUFET05MWQorI2RlZmluZSBfX1AwMTAJUEFHRV9DT1BZCisjZGVmaW5lIF9fUDAxMQlQQUdFX0NPUFkKKyNkZWZpbmUgX19QMTAwCVBBR0VfUkVBRE9OTFlfWAorI2RlZmluZSBfX1AxMDEJUEFHRV9SRUFET05MWV9YCisjZGVmaW5lIF9fUDExMAlQQUdFX0NPUFlfWAorI2RlZmluZSBfX1AxMTEJUEFHRV9DT1BZX1gKKworI2RlZmluZSBfX1MwMDAJUEFHRV9OT05FCisjZGVmaW5lIF9fUzAwMQlQQUdFX1JFQURPTkxZCisjZGVmaW5lIF9fUzAxMAlQQUdFX1NIQVJFRAorI2RlZmluZSBfX1MwMTEJUEFHRV9TSEFSRUQKKyNkZWZpbmUgX19TMTAwCVBBR0VfUkVBRE9OTFlfWAorI2RlZmluZSBfX1MxMDEJUEFHRV9SRUFET05MWV9YCisjZGVmaW5lIF9fUzExMAlQQUdFX1NIQVJFRF9YCisjZGVmaW5lIF9fUzExMQlQQUdFX1NIQVJFRF9YCisKKy8qIFBlcm1pc3Npb24gbWFza3MgdXNlZCBmb3Iga2VybmVsIG1hcHBpbmdzICovCisjZGVmaW5lIFBBR0VfS0VSTkVMCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9LRVJORUxfUlcpCisjZGVmaW5lIFBBR0VfS0VSTkVMX05DCV9fcGdwcm90KF9QQUdFX0JBU0VfTkMgfCBfUEFHRV9LRVJORUxfUlcgfCBcCisJCQkJIF9QQUdFX05PX0NBQ0hFKQorI2RlZmluZSBQQUdFX0tFUk5FTF9OQ0cJX19wZ3Byb3QoX1BBR0VfQkFTRV9OQyB8IF9QQUdFX0tFUk5FTF9SVyB8IFwKKwkJCQkgX1BBR0VfTk9fQ0FDSEUgfCBfUEFHRV9HVUFSREVEKQorI2RlZmluZSBQQUdFX0tFUk5FTF9YCV9fcGdwcm90KF9QQUdFX0JBU0UgfCBfUEFHRV9LRVJORUxfUlcgfCBfUEFHRV9FWEVDKQorI2RlZmluZSBQQUdFX0tFUk5FTF9STwlfX3BncHJvdChfUEFHRV9CQVNFIHwgX1BBR0VfS0VSTkVMX1JPKQorI2RlZmluZSBQQUdFX0tFUk5FTF9ST1gJX19wZ3Byb3QoX1BBR0VfQkFTRSB8IF9QQUdFX0tFUk5FTF9STyB8IF9QQUdFX0VYRUMpCisKKy8qIFByb3RlY3Rpb24gdXNlZCBmb3Iga2VybmVsIHRleHQuIFdlIHdhbnQgdGhlIGRlYnVnZ2VycyB0byBiZSBhYmxlIHRvCisgKiBzZXQgYnJlYWtwb2ludHMgYW55d2hlcmUsIHNvIGRvbid0IHdyaXRlIHByb3RlY3QgdGhlIGtlcm5lbCB0ZXh0CisgKiBvbiBwbGF0Zm9ybXMgd2hlcmUgc3VjaCBjb250cm9sIGlzIHBvc3NpYmxlLgorICovCisjaWYgZGVmaW5lZChDT05GSUdfS0dEQikgfHwgZGVmaW5lZChDT05GSUdfWE1PTikgfHwgZGVmaW5lZChDT05GSUdfQkRJX1NXSVRDSCkgfHxcCisJZGVmaW5lZChDT05GSUdfS1BST0JFUykKKyNkZWZpbmUgUEFHRV9LRVJORUxfVEVYVAlQQUdFX0tFUk5FTF9YCisjZWxzZQorI2RlZmluZSBQQUdFX0tFUk5FTF9URVhUCVBBR0VfS0VSTkVMX1JPWAorI2VuZGlmCisKKy8qIE1ha2UgbW9kdWxlcyBjb2RlIGhhcHB5LiBXZSBkb24ndCBzZXQgUk8geWV0ICovCisjZGVmaW5lIFBBR0VfS0VSTkVMX0VYRUMJUEFHRV9LRVJORUxfWAorCisvKiBBZHZlcnRpc2Ugc3BlY2lhbCBtYXBwaW5nIHR5cGUgZm9yIEFHUCAqLworI2RlZmluZSBQQUdFX0FHUAkJKFBBR0VfS0VSTkVMX05DKQorI2RlZmluZSBIQVZFX1BBR0VfQUdQCisKKy8qIEFkdmVydGlzZSBzdXBwb3J0IGZvciBfUEFHRV9TUEVDSUFMICovCisjaWZkZWYgX1BBR0VfU1BFQ0lBTAorI2RlZmluZSBfX0hBVkVfQVJDSF9QVEVfU1BFQ0lBTAorI2VuZGlmCisKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtZnNsLWJvb2tlLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWZzbC1ib29rZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEwODIwZjUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWZzbC1ib29rZS5oCkBAIC0wLDAgKzEsNDggQEAKKyNpZm5kZWYgX0FTTV9QT1dFUlBDX1BURV9GU0xfQk9PS0VfSAorI2RlZmluZSBfQVNNX1BPV0VSUENfUFRFX0ZTTF9CT09LRV9ICisjaWZkZWYgX19LRVJORUxfXworCisvKiBQVEUgYml0IGRlZmluaXRpb25zIGZvciBGcmVlc2NhbGUgQm9va0UgU1cgbG9hZGVkIFRMQiBNTVUgYmFzZWQKKyAqIHByb2Nlc3NvcnMKKyAqCisgICBNTVUgQXNzaXN0IFJlZ2lzdGVyIDM6CisKKyAgIDMyIDMzIDM0IDM1IDM2ICAuLi4gNTAgNTEgNTIgNTMgNTQgNTUgNTYgNTcgNTggNTkgNjAgNjEgNjIgNjMKKyAgIFJQTi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gIDAgIDAgVTAgVTEgVTIgVTMgVVggU1ggVVcgU1cgVVIgU1IKKworICAgLSBQUkVTRU5UICptdXN0KiBiZSBpbiB0aGUgYm90dG9tIHRocmVlIGJpdHMgYmVjYXVzZSBzd2FwIGNhY2hlCisgICAgIGVudHJpZXMgdXNlIHRoZSB0b3AgMjkgYml0cy4KKworICAgLSBGSUxFICptdXN0KiBiZSBpbiB0aGUgYm90dG9tIHRocmVlIGJpdHMgYmVjYXVzZSBzd2FwIGNhY2hlCisgICAgIGVudHJpZXMgdXNlIHRoZSB0b3AgMjkgYml0cy4KKyovCisKKy8qIERlZmluaXRpb25zIGZvciBGU0wgQm9vay1FIENvcmVzICovCisjZGVmaW5lIF9QQUdFX1BSRVNFTlQJMHgwMDAwMQkvKiBTOiBQVEUgY29udGFpbnMgYSB0cmFuc2xhdGlvbiAqLworI2RlZmluZSBfUEFHRV9VU0VSCTB4MDAwMDIJLyogUzogVXNlciBwYWdlIChtYXBzIHRvIFVSKSAqLworI2RlZmluZSBfUEFHRV9GSUxFCTB4MDAwMDIJLyogUzogd2hlbiAhcHJlc2VudDogbm9ubGluZWFyIGZpbGUgbWFwcGluZyAqLworI2RlZmluZSBfUEFHRV9SVwkweDAwMDA0CS8qIFM6IFdyaXRlIHBlcm1pc3Npb24gKFNXKSAqLworI2RlZmluZSBfUEFHRV9ESVJUWQkweDAwMDA4CS8qIFM6IFBhZ2UgZGlydHkgKi8KKyNkZWZpbmUgX1BBR0VfSFdFWEVDCTB4MDAwMTAJLyogSDogU1ggcGVybWlzc2lvbiAqLworI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkweDAwMDIwCS8qIFM6IFBhZ2UgcmVmZXJlbmNlZCAqLworCisjZGVmaW5lIF9QQUdFX0VORElBTgkweDAwMDQwCS8qIEg6IEUgYml0ICovCisjZGVmaW5lIF9QQUdFX0dVQVJERUQJMHgwMDA4MAkvKiBIOiBHIGJpdCAqLworI2RlZmluZSBfUEFHRV9DT0hFUkVOVAkweDAwMTAwCS8qIEg6IE0gYml0ICovCisjZGVmaW5lIF9QQUdFX05PX0NBQ0hFCTB4MDAyMDAJLyogSDogSSBiaXQgKi8KKyNkZWZpbmUgX1BBR0VfV1JJVEVUSFJVCTB4MDA0MDAJLyogSDogVyBiaXQgKi8KKyNkZWZpbmUgX1BBR0VfU1BFQ0lBTAkweDAwODAwIC8qIFM6IFNwZWNpYWwgcGFnZSAqLworCisjaWZkZWYgQ09ORklHX1BURV82NEJJVAorLyogRVJQTiBpbiBhIFBURSBuZXZlciBnZXRzIGNsZWFyZWQsIGlnbm9yZSBpdCAqLworI2RlZmluZSBfUFRFX05PTkVfTUFTSwkweGZmZmZmZmZmZmZmZjAwMDBVTEwKKy8qIFdlIGV4dGVuZCB0aGUgc2l6ZSBvZiB0aGUgUFRFIGZsYWdzIGFyZWEgd2hlbiB1c2luZyA2NC1iaXQgUFRFcyAqLworI2RlZmluZSBQVEVfUlBOX1NISUZUCShQQUdFX1NISUZUICsgOCkKKyNlbmRpZgorCisjZGVmaW5lIF9QTURfUFJFU0VOVAkwCisjZGVmaW5lIF9QTURfUFJFU0VOVF9NQVNLIChQQUdFX01BU0spCisjZGVmaW5lIF9QTURfQkFECSh+UEFHRV9NQVNLKQorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qICBfQVNNX1BPV0VSUENfUFRFX0ZTTF9CT09LRV9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWhhc2gzMi5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1oYXNoMzIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNmU1NzFjCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1oYXNoMzIuaApAQCAtMCwwICsxLDQ4IEBACisjaWZuZGVmIF9BU01fUE9XRVJQQ19QVEVfSEFTSDMyX0gKKyNkZWZpbmUgX0FTTV9QT1dFUlBDX1BURV9IQVNIMzJfSAorI2lmZGVmIF9fS0VSTkVMX18KKworLyoKKyAqIFRoZSAiY2xhc3NpYyIgMzItYml0IGltcGxlbWVudGF0aW9uIG9mIHRoZSBQb3dlclBDIE1NVSB1c2VzIGEgaGFzaAorICogdGFibGUgY29udGFpbmluZyBQVEVzLCB0b2dldGhlciB3aXRoIGEgc2V0IG9mIDE2IHNlZ21lbnQgcmVnaXN0ZXJzLAorICogdG8gZGVmaW5lIHRoZSB2aXJ0dWFsIHRvIHBoeXNpY2FsIGFkZHJlc3MgbWFwcGluZy4KKyAqCisgKiBXZSB1c2UgdGhlIGhhc2ggdGFibGUgYXMgYW4gZXh0ZW5kZWQgVExCLCBpLmUuIGEgY2FjaGUgb2YgY3VycmVudGx5CisgKiBhY3RpdmUgbWFwcGluZ3MuICBXZSBtYWludGFpbiBhIHR3by1sZXZlbCBwYWdlIHRhYmxlIHRyZWUsIG11Y2gKKyAqIGxpa2UgdGhhdCB1c2VkIGJ5IHRoZSBpMzg2LCBmb3IgdGhlIHNha2Ugb2YgdGhlIExpbnV4IG1lbW9yeQorICogbWFuYWdlbWVudCBjb2RlLiAgTG93LWxldmVsIGFzc2VtYmxlciBjb2RlIGluIGhhc2hfbG93XzMyLlMKKyAqIChwcm9jZWR1cmUgaGFzaF9wYWdlKSBpcyByZXNwb25zaWJsZSBmb3IgZXh0cmFjdGluZyBwdGVzIGZyb20gdGhlCisgKiB0cmVlIGFuZCBwdXR0aW5nIHRoZW0gaW50byB0aGUgaGFzaCB0YWJsZSB3aGVuIG5lY2Vzc2FyeSwgYW5kCisgKiB1cGRhdGluZyB0aGUgYWNjZXNzZWQgYW5kIG1vZGlmaWVkIGJpdHMgaW4gdGhlIHBhZ2UgdGFibGUgdHJlZS4KKyAqLworCisjZGVmaW5lIF9QQUdFX1BSRVNFTlQJMHgwMDEJLyogc29mdHdhcmU6IHB0ZSBjb250YWlucyBhIHRyYW5zbGF0aW9uICovCisjZGVmaW5lIF9QQUdFX0hBU0hQVEUJMHgwMDIJLyogaGFzaF9wYWdlIGhhcyBtYWRlIGFuIEhQVEUgZm9yIHRoaXMgcHRlICovCisjZGVmaW5lIF9QQUdFX0ZJTEUJMHgwMDQJLyogd2hlbiAhcHJlc2VudDogbm9ubGluZWFyIGZpbGUgbWFwcGluZyAqLworI2RlZmluZSBfUEFHRV9VU0VSCTB4MDA0CS8qIHVzZXJtb2RlIGFjY2VzcyBhbGxvd2VkICovCisjZGVmaW5lIF9QQUdFX0dVQVJERUQJMHgwMDgJLyogRzogcHJvaGliaXQgc3BlY3VsYXRpdmUgYWNjZXNzICovCisjZGVmaW5lIF9QQUdFX0NPSEVSRU5UCTB4MDEwCS8qIE06IGVuZm9yY2UgbWVtb3J5IGNvaGVyZW5jZSAoU01QIHN5c3RlbXMpICovCisjZGVmaW5lIF9QQUdFX05PX0NBQ0hFCTB4MDIwCS8qIEk6IGNhY2hlIGluaGliaXQgKi8KKyNkZWZpbmUgX1BBR0VfV1JJVEVUSFJVCTB4MDQwCS8qIFc6IGNhY2hlIHdyaXRlLXRocm91Z2ggKi8KKyNkZWZpbmUgX1BBR0VfRElSVFkJMHgwODAJLyogQzogcGFnZSBjaGFuZ2VkICovCisjZGVmaW5lIF9QQUdFX0FDQ0VTU0VECTB4MTAwCS8qIFI6IHBhZ2UgcmVmZXJlbmNlZCAqLworI2RlZmluZSBfUEFHRV9FWEVDCTB4MjAwCS8qIHNvZnR3YXJlOiBpLWNhY2hlIGNvaGVyZW5jeSByZXF1aXJlZCAqLworI2RlZmluZSBfUEFHRV9SVwkweDQwMAkvKiBzb2Z0d2FyZTogdXNlciB3cml0ZSBhY2Nlc3MgYWxsb3dlZCAqLworI2RlZmluZSBfUEFHRV9TUEVDSUFMCTB4ODAwCS8qIHNvZnR3YXJlOiBTcGVjaWFsIHBhZ2UgKi8KKworI2lmZGVmIENPTkZJR19QVEVfNjRCSVQKKy8qIFdlIG5ldmVyIGNsZWFyIHRoZSBoaWdoIHdvcmQgb2YgdGhlIHB0ZSAqLworI2RlZmluZSBfUFRFX05PTkVfTUFTSwkoMHhmZmZmZmZmZjAwMDAwMDAwVUxMIHwgX1BBR0VfSEFTSFBURSkKKyNlbHNlCisjZGVmaW5lIF9QVEVfTk9ORV9NQVNLCV9QQUdFX0hBU0hQVEUKKyNlbmRpZgorCisjZGVmaW5lIF9QTURfUFJFU0VOVAkwCisjZGVmaW5lIF9QTURfUFJFU0VOVF9NQVNLIChQQUdFX01BU0spCisjZGVmaW5lIF9QTURfQkFECSh+UEFHRV9NQVNLKQorCisvKiBIYXNoIHRhYmxlIGJhc2VkIHBsYXRmb3JtcyBuZWVkIGF0b21pYyB1cGRhdGVzIG9mIHRoZSBsaW51eCBQVEUgKi8KKyNkZWZpbmUgUFRFX0FUT01JQ19VUERBVEVTCTEKKworI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KKyNlbmRpZiAvKiAgX0FTTV9QT1dFUlBDX1BURV9IQVNIMzJfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1oYXNoNjQtNGsuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtaGFzaDY0LTRrLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzEzNGU4MDkKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWhhc2g2NC00ay5oCkBAIC0wLDAgKzEsMTcgQEAKKy8qIFRvIGJlIGluY2x1ZGUgYnkgcGd0YWJsZS1oYXNoNjQuaCBvbmx5ICovCisKKy8qIFBURSBiaXRzICovCisjZGVmaW5lIF9QQUdFX0hBU0hQVEUJMHgwNDAwIC8qIHNvZnR3YXJlOiBwdGUgaGFzIGFuIGFzc29jaWF0ZWQgSFBURSAqLworI2RlZmluZSBfUEFHRV9TRUNPTkRBUlkgMHg4MDAwIC8qIHNvZnR3YXJlOiBIUFRFIGlzIGluIHNlY29uZGFyeSBncm91cCAqLworI2RlZmluZSBfUEFHRV9HUk9VUF9JWCAgMHg3MDAwIC8qIHNvZnR3YXJlOiBIUFRFIGluZGV4IHdpdGhpbiBncm91cCAqLworI2RlZmluZSBfUEFHRV9GX1NFQ09ORCAgX1BBR0VfU0VDT05EQVJZCisjZGVmaW5lIF9QQUdFX0ZfR0lYICAgICBfUEFHRV9HUk9VUF9JWAorI2RlZmluZSBfUEFHRV9TUEVDSUFMCTB4MTAwMDAgLyogc29mdHdhcmU6IHNwZWNpYWwgcGFnZSAqLworCisvKiBQVEUgZmxhZ3MgdG8gY29uc2VydmUgZm9yIEhQVEUgaWRlbnRpZmljYXRpb24gKi8KKyNkZWZpbmUgX1BBR0VfSFBURUZMQUdTIChfUEFHRV9CVVNZIHwgX1BBR0VfSEFTSFBURSB8IFwKKwkJCSBfUEFHRV9TRUNPTkRBUlkgfCBfUEFHRV9HUk9VUF9JWCkKKworLyogc2hpZnQgdG8gcHV0IHBhZ2UgbnVtYmVyIGludG8gcHRlICovCisjZGVmaW5lIFBURV9SUE5fU0hJRlQJKDE3KQorCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS02NGsuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtaGFzaDY0LTY0ay5oCnNpbWlsYXJpdHkgaW5kZXggNzMlCnJlbmFtZSBmcm9tIGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLTY0ay5oCnJlbmFtZSB0byBhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWhhc2g2NC02NGsuaAppbmRleCA3Mzg5MDAzLi5lMDVkMjZmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGd0YWJsZS02NGsuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcHRlLWhhc2g2NC02NGsuaApAQCAtMSwyMiArMSw4MCBAQAotI2lmbmRlZiBfQVNNX1BPV0VSUENfUEdUQUJMRV82NEtfSAotI2RlZmluZSBfQVNNX1BPV0VSUENfUEdUQUJMRV82NEtfSAorLyogVG8gYmUgaW5jbHVkZSBieSBwZ3RhYmxlLWhhc2g2NC5oIG9ubHkgKi8KIAotI2luY2x1ZGUgPGFzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaD4KKy8qIEFkZGl0aW9uYWwgUFRFIGJpdHMgKGRvbid0IGNoYW5nZSB3aXRob3V0IGNoZWNraW5nIGFzbSBpbiBoYXNoX2xvdy5TKSAqLworI2RlZmluZSBfUEFHRV9TUEVDSUFMCTB4MDAwMDA0MDAgLyogc29mdHdhcmU6IHNwZWNpYWwgcGFnZSAqLworI2RlZmluZSBfUEFHRV9IUFRFX1NVQgkweDBmZmZmMDAwIC8qIGNvbWJvIG9ubHk6IHN1YiBwYWdlcyBIUFRFIGJpdHMgKi8KKyNkZWZpbmUgX1BBR0VfSFBURV9TVUIwCTB4MDgwMDAwMDAgLyogY29tYm8gb25seTogZmlyc3Qgc3ViIHBhZ2UgKi8KKyNkZWZpbmUgX1BBR0VfQ09NQk8JMHgxMDAwMDAwMCAvKiB0aGlzIGlzIGEgY29tYm8gNGsgcGFnZSAqLworI2RlZmluZSBfUEFHRV80S19QRk4JMHgyMDAwMDAwMCAvKiBQRk4gaXMgZm9yIGEgc2luZ2xlIDRrIHBhZ2UgKi8KIAorLyogRm9yIDY0SyBwYWdlLCB3ZSBkb24ndCBoYXZlIGEgc2VwYXJhdGUgX1BBR0VfSEFTSFBURSBiaXQuIEluc3RlYWQsCisgKiB3ZSBzZXQgdGhhdCB0byBiZSB0aGUgd2hvbGUgc3ViLWJpdHMgbWFzay4gVGhlIEMgY29kZSB3aWxsIG9ubHkKKyAqIHRlc3QgdGhpcywgc28gYSBtdWx0aS1iaXQgbWFzayB3aWxsIHdvcmsuIEZvciBjb21ibyBwYWdlcywgdGhpcworICogaXMgZXF1aXZhbGVudCBhcyBlZmZlY3RpdmVseSwgdGhlIG9sZCBfUEFHRV9IQVNIUFRFIHdhcyBhbiBPUiBvZgorICogYWxsIHRoZSBzdWIgYml0cy4gRm9yIHJlYWwgNjRrIHBhZ2VzLCB3ZSBub3cgaGF2ZSB0aGUgYXNzZW1ibHkgc2V0CisgKiBfUEFHRV9IUFRFX1NVQjAgaW4gYWRkaXRpb24gdG8gc2V0dGluZyB0aGUgSElEWCBiaXRzIHdoaWNoIG92ZXJsYXAKKyAqIHRoYXQgbWFzay4gVGhpcyBpcyBmaW5lIGFzIGxvbmcgYXMgdGhlIEhJRFggYml0cyBhcmUgbmV2ZXIgc2V0IG9uCisgKiBhIFBURSB0aGF0IGlzbid0IGhhc2hlZCwgd2hpY2ggaXMgdGhlIGNhc2UgdG9kYXkuCisgKgorICogQSBsaXR0bGUgbml0IGlzIGZvciB0aGUgaHVnZSBwYWdlIEMgY29kZSwgd2hpY2ggZG9lcyB0aGUgaGFzaGluZworICogaW4gQywgd2UgbmVlZCB0byBwcm92aWRlIHdoaWNoIGJpdCB0byB1c2UuCisgKi8KKyNkZWZpbmUgX1BBR0VfSEFTSFBURQlfUEFHRV9IUFRFX1NVQgogCi0jZGVmaW5lIFBURV9JTkRFWF9TSVpFICAxMgotI2RlZmluZSBQTURfSU5ERVhfU0laRSAgMTIKLSNkZWZpbmUgUFVEX0lOREVYX1NJWkUJMAotI2RlZmluZSBQR0RfSU5ERVhfU0laRSAgNAorLyogTm90ZSB0aGUgZnVsbCBwYWdlIGJpdHMgbXVzdCBiZSBpbiB0aGUgc2FtZSBsb2NhdGlvbiBhcyBmb3Igbm9ybWFsCisgKiA0ayBwYWdlcyBhcyB0aGUgc2FtZSBhc3NzZW1ibHkgd2lsbCBiZSB1c2VkIHRvIGluc2VydCA2NEsgcGFnZXMKKyAqIHdldGhlciB0aGUga2VybmVsIGhhcyBDT05GSUdfUFBDXzY0S19QQUdFUyBvciBub3QKKyAqLworI2RlZmluZSBfUEFHRV9GX1NFQ09ORCAgMHgwMDAwODAwMCAvKiBmdWxsIHBhZ2U6IGhpZHggYml0cyAqLworI2RlZmluZSBfUEFHRV9GX0dJWCAgICAgMHgwMDAwNzAwMCAvKiBmdWxsIHBhZ2U6IGhpZHggYml0cyAqLworCisvKiBQVEUgZmxhZ3MgdG8gY29uc2VydmUgZm9yIEhQVEUgaWRlbnRpZmljYXRpb24gKi8KKyNkZWZpbmUgX1BBR0VfSFBURUZMQUdTIChfUEFHRV9CVVNZIHwgX1BBR0VfSEFTSFBURSB8IF9QQUdFX0NPTUJPKQorCisvKiBTaGlmdCB0byBwdXQgcGFnZSBudW1iZXIgaW50byBwdGUuCisgKgorICogVGhhdCBnaXZlcyB1cyBhIG1heCBSUE4gb2YgMzQgYml0cywgd2hpY2ggbWVhbnMgYSBtYXggb2YgNTAgYml0cworICogb2YgYWRkcmVzc2FibGUgcGh5c2ljYWwgc3BhY2UsIG9yIDQ2IGJpdHMgZm9yIHRoZSBzcGVjaWFsIDRrIFBGTnMuCisgKi8KKyNkZWZpbmUgUFRFX1JQTl9TSElGVAkoMzApCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCi0jZGVmaW5lIFBURV9UQUJMRV9TSVpFCShzaXplb2YocmVhbF9wdGVfdCkgPDwgUFRFX0lOREVYX1NJWkUpCi0jZGVmaW5lIFBNRF9UQUJMRV9TSVpFCShzaXplb2YocG1kX3QpIDw8IFBNRF9JTkRFWF9TSVpFKQotI2RlZmluZSBQR0RfVEFCTEVfU0laRQkoc2l6ZW9mKHBnZF90KSA8PCBQR0RfSU5ERVhfU0laRSkKIAotI2RlZmluZSBQVFJTX1BFUl9QVEUJKDEgPDwgUFRFX0lOREVYX1NJWkUpCi0jZGVmaW5lIFBUUlNfUEVSX1BNRAkoMSA8PCBQTURfSU5ERVhfU0laRSkKLSNkZWZpbmUgUFRSU19QRVJfUEdECSgxIDw8IFBHRF9JTkRFWF9TSVpFKQorLyoKKyAqIFdpdGggNjRLIHBhZ2VzIG9uIGhhc2ggdGFibGUsIHdlIGhhdmUgYSBzcGVjaWFsIFBURSBmb3JtYXQgdGhhdAorICogdXNlcyBhIHNlY29uZCAiaGFsZiIgb2YgdGhlIHBhZ2UgdGFibGUgdG8gZW5jb2RlIHN1Yi1wYWdlIGluZm9ybWF0aW9uCisgKiBpbiBvcmRlciB0byBkZWFsIHdpdGggNjRLIG1hZGUgb2YgNEsgSFcgcGFnZXMuIFRodXMgd2Ugb3ZlcnJpZGUgdGhlCisgKiBnZW5lcmljIGFjY2Vzc29ycyBhbmQgaXRlcmF0b3JzIGhlcmUKKyAqLworI2RlZmluZSBfX3JlYWxfcHRlKGUscCkgCSgocmVhbF9wdGVfdCkgeyBcCisJKGUpLCBwdGVfdmFsKCooKHApICsgUFRSU19QRVJfUFRFKSkgfSkKKyNkZWZpbmUgX19ycHRlX3RvX2hpZHgocixpbmRleCkJKChwdGVfdmFsKChyKS5wdGUpICYgX1BBR0VfQ09NQk8pID8gXAorICAgICAgICAoKChyKS5oaWR4ID4+ICgoaW5kZXgpPDwyKSkgJiAweGYpIDogKChwdGVfdmFsKChyKS5wdGUpID4+IDEyKSAmIDB4ZikpCisjZGVmaW5lIF9fcnB0ZV90b19wdGUocikJKChyKS5wdGUpCisjZGVmaW5lIF9fcnB0ZV9zdWJfdmFsaWQocnB0ZSwgaW5kZXgpIFwKKwkocHRlX3ZhbChycHRlLnB0ZSkgJiAoX1BBR0VfSFBURV9TVUIwID4+IChpbmRleCkpKQorCisvKiBUcmljazogd2Ugc2V0IF9fZW5kIHRvIHZhICsgNjRrLCB3aGljaCBoYXBwZW5zIHdvcmtzIGZvcgorICogYSAxNk0gcGFnZSBhcyB3ZWxsIGFzIHdlIHdhbnQgb25seSBvbmUgaXRlcmF0aW9uCisgKi8KKyNkZWZpbmUgcHRlX2l0ZXJhdGVfaGFzaGVkX3N1YnBhZ2VzKHJwdGUsIHBzaXplLCB2YSwgaW5kZXgsIHNoaWZ0KQkgICAgXAorICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fZW5kID0gdmEgKyBQQUdFX1NJWkU7ICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgdW5zaWduZWQgX19zcGxpdCA9IChwc2l6ZSA9PSBNTVVfUEFHRV80SyB8fCAgICAgICAgICAgICAgICAgXAorCQkJCSAgICBwc2l6ZSA9PSBNTVVfUEFHRV82NEtfQVApOyAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHNoaWZ0ID0gbW11X3BzaXplX2RlZnNbcHNpemVdLnNoaWZ0OyAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJZm9yIChpbmRleCA9IDA7IHZhIDwgX19lbmQ7IGluZGV4KyssIHZhICs9ICgxTCA8PCBzaGlmdCkpIHsgXAorCQkgICAgICAgIGlmICghX19zcGxpdCB8fCBfX3JwdGVfc3ViX3ZhbGlkKHJwdGUsIGluZGV4KSkgZG8geyBcCisKKyNkZWZpbmUgcHRlX2l0ZXJhdGVfaGFzaGVkX2VuZCgpIH0gd2hpbGUoMCk7IH0gfSB3aGlsZSgwKQorCisjZGVmaW5lIHB0ZV9wYWdlc2l6ZV9pbmRleChtbSwgYWRkciwgcHRlKQlcCisJKCgocHRlKSAmIF9QQUdFX0NPTUJPKT8gTU1VX1BBR0VfNEs6IE1NVV9QQUdFXzY0SykKKworI2RlZmluZSByZW1hcF80a19wZm4odm1hLCBhZGRyLCBwZm4sIHByb3QpCQkJCVwKKwlyZW1hcF9wZm5fcmFuZ2UoKHZtYSksIChhZGRyKSwgKHBmbiksIFBBR0VfU0laRSwJCVwKKwkJCV9fcGdwcm90KHBncHJvdF92YWwoKHByb3QpKSB8IF9QQUdFXzRLX1BGTikpCisKIAogI2lmZGVmIENPTkZJR19QUENfU1VCUEFHRV9QUk9UCiAvKgpAQCAtNTUsMTAxICsxMTMsMyBAQAogfQogI2VuZGlmIC8qIENPTkZJR19QUENfU1VCUEFHRV9QUk9UICovCiAjZW5kaWYJLyogX19BU1NFTUJMWV9fICovCi0KLS8qIFdpdGggNGsgYmFzZSBwYWdlIHNpemUsIGh1Z2VwYWdlIFBURXMgZ28gYXQgdGhlIFBNRCBsZXZlbCAqLwotI2RlZmluZSBNSU5fSFVHRVBURV9TSElGVAlQQUdFX1NISUZUCi0KLS8qIFBNRF9TSElGVCBkZXRlcm1pbmVzIHdoYXQgYSBzZWNvbmQtbGV2ZWwgcGFnZSB0YWJsZSBlbnRyeSBjYW4gbWFwICovCi0jZGVmaW5lIFBNRF9TSElGVAkoUEFHRV9TSElGVCArIFBURV9JTkRFWF9TSVpFKQotI2RlZmluZSBQTURfU0laRQkoMVVMIDw8IFBNRF9TSElGVCkKLSNkZWZpbmUgUE1EX01BU0sJKH4oUE1EX1NJWkUtMSkpCi0KLS8qIFBHRElSX1NISUZUIGRldGVybWluZXMgd2hhdCBhIHRoaXJkLWxldmVsIHBhZ2UgdGFibGUgZW50cnkgY2FuIG1hcCAqLwotI2RlZmluZSBQR0RJUl9TSElGVAkoUE1EX1NISUZUICsgUE1EX0lOREVYX1NJWkUpCi0jZGVmaW5lIFBHRElSX1NJWkUJKDFVTCA8PCBQR0RJUl9TSElGVCkKLSNkZWZpbmUgUEdESVJfTUFTSwkofihQR0RJUl9TSVpFLTEpKQotCi0vKiBBZGRpdGlvbmFsIFBURSBiaXRzIChkb24ndCBjaGFuZ2Ugd2l0aG91dCBjaGVja2luZyBhc20gaW4gaGFzaF9sb3cuUykgKi8KLSNkZWZpbmUgX19IQVZFX0FSQ0hfUFRFX1NQRUNJQUwKLSNkZWZpbmUgX1BBR0VfU1BFQ0lBTAkweDAwMDAwNDAwIC8qIHNvZnR3YXJlOiBzcGVjaWFsIHBhZ2UgKi8KLSNkZWZpbmUgX1BBR0VfSFBURV9TVUIJMHgwZmZmZjAwMCAvKiBjb21ibyBvbmx5OiBzdWIgcGFnZXMgSFBURSBiaXRzICovCi0jZGVmaW5lIF9QQUdFX0hQVEVfU1VCMAkweDA4MDAwMDAwIC8qIGNvbWJvIG9ubHk6IGZpcnN0IHN1YiBwYWdlICovCi0jZGVmaW5lIF9QQUdFX0NPTUJPCTB4MTAwMDAwMDAgLyogdGhpcyBpcyBhIGNvbWJvIDRrIHBhZ2UgKi8KLSNkZWZpbmUgX1BBR0VfNEtfUEZOCTB4MjAwMDAwMDAgLyogUEZOIGlzIGZvciBhIHNpbmdsZSA0ayBwYWdlICovCi0KLS8qIEZvciA2NEsgcGFnZSwgd2UgZG9uJ3QgaGF2ZSBhIHNlcGFyYXRlIF9QQUdFX0hBU0hQVEUgYml0LiBJbnN0ZWFkLAotICogd2Ugc2V0IHRoYXQgdG8gYmUgdGhlIHdob2xlIHN1Yi1iaXRzIG1hc2suIFRoZSBDIGNvZGUgd2lsbCBvbmx5Ci0gKiB0ZXN0IHRoaXMsIHNvIGEgbXVsdGktYml0IG1hc2sgd2lsbCB3b3JrLiBGb3IgY29tYm8gcGFnZXMsIHRoaXMKLSAqIGlzIGVxdWl2YWxlbnQgYXMgZWZmZWN0aXZlbHksIHRoZSBvbGQgX1BBR0VfSEFTSFBURSB3YXMgYW4gT1Igb2YKLSAqIGFsbCB0aGUgc3ViIGJpdHMuIEZvciByZWFsIDY0ayBwYWdlcywgd2Ugbm93IGhhdmUgdGhlIGFzc2VtYmx5IHNldAotICogX1BBR0VfSFBURV9TVUIwIGluIGFkZGl0aW9uIHRvIHNldHRpbmcgdGhlIEhJRFggYml0cyB3aGljaCBvdmVybGFwCi0gKiB0aGF0IG1hc2suIFRoaXMgaXMgZmluZSBhcyBsb25nIGFzIHRoZSBISURYIGJpdHMgYXJlIG5ldmVyIHNldCBvbgotICogYSBQVEUgdGhhdCBpc24ndCBoYXNoZWQsIHdoaWNoIGlzIHRoZSBjYXNlIHRvZGF5LgotICoKLSAqIEEgbGl0dGxlIG5pdCBpcyBmb3IgdGhlIGh1Z2UgcGFnZSBDIGNvZGUsIHdoaWNoIGRvZXMgdGhlIGhhc2hpbmcKLSAqIGluIEMsIHdlIG5lZWQgdG8gcHJvdmlkZSB3aGljaCBiaXQgdG8gdXNlLgotICovCi0jZGVmaW5lIF9QQUdFX0hBU0hQVEUJX1BBR0VfSFBURV9TVUIKLQotLyogTm90ZSB0aGUgZnVsbCBwYWdlIGJpdHMgbXVzdCBiZSBpbiB0aGUgc2FtZSBsb2NhdGlvbiBhcyBmb3Igbm9ybWFsCi0gKiA0ayBwYWdlcyBhcyB0aGUgc2FtZSBhc3NzZW1ibHkgd2lsbCBiZSB1c2VkIHRvIGluc2VydCA2NEsgcGFnZXMKLSAqIHdldGhlciB0aGUga2VybmVsIGhhcyBDT05GSUdfUFBDXzY0S19QQUdFUyBvciBub3QKLSAqLwotI2RlZmluZSBfUEFHRV9GX1NFQ09ORCAgMHgwMDAwODAwMCAvKiBmdWxsIHBhZ2U6IGhpZHggYml0cyAqLwotI2RlZmluZSBfUEFHRV9GX0dJWCAgICAgMHgwMDAwNzAwMCAvKiBmdWxsIHBhZ2U6IGhpZHggYml0cyAqLwotCi0vKiBQVEUgZmxhZ3MgdG8gY29uc2VydmUgZm9yIEhQVEUgaWRlbnRpZmljYXRpb24gKi8KLSNkZWZpbmUgX1BBR0VfSFBURUZMQUdTIChfUEFHRV9CVVNZIHwgX1BBR0VfSEFTSFBURSB8IF9QQUdFX0NPTUJPKQotCi0vKiBTaGlmdCB0byBwdXQgcGFnZSBudW1iZXIgaW50byBwdGUuCi0gKgotICogVGhhdCBnaXZlcyB1cyBhIG1heCBSUE4gb2YgMzQgYml0cywgd2hpY2ggbWVhbnMgYSBtYXggb2YgNTAgYml0cwotICogb2YgYWRkcmVzc2FibGUgcGh5c2ljYWwgc3BhY2UsIG9yIDQ2IGJpdHMgZm9yIHRoZSBzcGVjaWFsIDRrIFBGTnMuCi0gKi8KLSNkZWZpbmUgUFRFX1JQTl9TSElGVAkoMzApCi0jZGVmaW5lIFBURV9SUE5fTUFYCSgxVUwgPDwgKDY0IC0gUFRFX1JQTl9TSElGVCkpCi0jZGVmaW5lIFBURV9SUE5fTUFTSwkofigoMVVMPDxQVEVfUlBOX1NISUZUKS0xKSkKLQotLyogX1BBR0VfQ0hHX01BU0sgbWFza3Mgb2YgYml0cyB0aGF0IGFyZSB0byBiZSBwcmVzZXJ2ZWQgYWNjcm9zcwotICogcGdwcm90IGNoYW5nZXMKLSAqLwotI2RlZmluZSBfUEFHRV9DSEdfTUFTSwkoUFRFX1JQTl9NQVNLIHwgX1BBR0VfSFBURUZMQUdTIHwgX1BBR0VfRElSVFkgfCBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgX1BBR0VfQUNDRVNTRUQgfCBfUEFHRV9TUEVDSUFMKQotCi0vKiBCaXRzIHRvIG1hc2sgb3V0IGZyb20gYSBQTUQgdG8gZ2V0IHRvIHRoZSBQVEUgcGFnZSAqLwotI2RlZmluZSBQTURfTUFTS0VEX0JJVFMJCTB4MWZmCi0vKiBCaXRzIHRvIG1hc2sgb3V0IGZyb20gYSBQR0QvUFVEIHRvIGdldCB0byB0aGUgUE1EIHBhZ2UgKi8KLSNkZWZpbmUgUFVEX01BU0tFRF9CSVRTCQkweDFmZgotCi0vKiBNYW5pcHVsYXRlICJycHRlIiB2YWx1ZXMgKi8KLSNkZWZpbmUgX19yZWFsX3B0ZShlLHApIAkoKHJlYWxfcHRlX3QpIHsgXAotCShlKSwgcHRlX3ZhbCgqKChwKSArIFBUUlNfUEVSX1BURSkpIH0pCi0jZGVmaW5lIF9fcnB0ZV90b19oaWR4KHIsaW5kZXgpCSgocHRlX3ZhbCgocikucHRlKSAmIF9QQUdFX0NPTUJPKSA/IFwKLSAgICAgICAgKCgocikuaGlkeCA+PiAoKGluZGV4KTw8MikpICYgMHhmKSA6ICgocHRlX3ZhbCgocikucHRlKSA+PiAxMikgJiAweGYpKQotI2RlZmluZSBfX3JwdGVfdG9fcHRlKHIpCSgocikucHRlKQotI2RlZmluZSBfX3JwdGVfc3ViX3ZhbGlkKHJwdGUsIGluZGV4KSBcCi0JKHB0ZV92YWwocnB0ZS5wdGUpICYgKF9QQUdFX0hQVEVfU1VCMCA+PiAoaW5kZXgpKSkKLQotCi0vKiBUcmljazogd2Ugc2V0IF9fZW5kIHRvIHZhICsgNjRrLCB3aGljaCBoYXBwZW5zIHdvcmtzIGZvcgotICogYSAxNk0gcGFnZSBhcyB3ZWxsIGFzIHdlIHdhbnQgb25seSBvbmUgaXRlcmF0aW9uCi0gKi8KLSNkZWZpbmUgcHRlX2l0ZXJhdGVfaGFzaGVkX3N1YnBhZ2VzKHJwdGUsIHBzaXplLCB2YSwgaW5kZXgsIHNoaWZ0KQkgICAgXAotICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fZW5kID0gdmEgKyBQQUdFX1NJWkU7ICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgdW5zaWduZWQgX19zcGxpdCA9IChwc2l6ZSA9PSBNTVVfUEFHRV80SyB8fCAgICAgICAgICAgICAgICAgXAotCQkJCSAgICBwc2l6ZSA9PSBNTVVfUEFHRV82NEtfQVApOyAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAgIHNoaWZ0ID0gbW11X3BzaXplX2RlZnNbcHNpemVdLnNoaWZ0OyAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJZm9yIChpbmRleCA9IDA7IHZhIDwgX19lbmQ7IGluZGV4KyssIHZhICs9ICgxTCA8PCBzaGlmdCkpIHsgXAotCQkgICAgICAgIGlmICghX19zcGxpdCB8fCBfX3JwdGVfc3ViX3ZhbGlkKHJwdGUsIGluZGV4KSkgZG8geyBcCi0KLSNkZWZpbmUgcHRlX2l0ZXJhdGVfaGFzaGVkX2VuZCgpIH0gd2hpbGUoMCk7IH0gfSB3aGlsZSgwKQotCi0jZGVmaW5lIHB0ZV9wYWdlc2l6ZV9pbmRleChtbSwgYWRkciwgcHRlKQlcCi0JKCgocHRlKSAmIF9QQUdFX0NPTUJPKT8gTU1VX1BBR0VfNEs6IE1NVV9QQUdFXzY0SykKLQotI2RlZmluZSByZW1hcF80a19wZm4odm1hLCBhZGRyLCBwZm4sIHByb3QpCQkJCVwKLQlyZW1hcF9wZm5fcmFuZ2UoKHZtYSksIChhZGRyKSwgKHBmbiksIFBBR0VfU0laRSwJCVwKLQkJCV9fcGdwcm90KHBncHJvdF92YWwoKHByb3QpKSB8IF9QQUdFXzRLX1BGTikpCi0KLSNlbmRpZiAvKiBfQVNNX1BPV0VSUENfUEdUQUJMRV82NEtfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3B0ZS1oYXNoNjQuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtaGFzaDY0LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDQxOWVlYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9wdGUtaGFzaDY0LmgKQEAgLTAsMCArMSw1NCBAQAorI2lmbmRlZiBfQVNNX1BPV0VSUENfUFRFX0hBU0g2NF9ICisjZGVmaW5lIF9BU01fUE9XRVJQQ19QVEVfSEFTSDY0X0gKKyNpZmRlZiBfX0tFUk5FTF9fCisKKy8qCisgKiBDb21tb24gYml0cyBiZXR3ZWVuIDRLIGFuZCA2NEsgcGFnZXMgaW4gYSBsaW51eC1zdHlsZSBQVEUuCisgKiBUaGVzZSBtYXRjaCB0aGUgYml0cyBpbiB0aGUgKGhhcmR3YXJlLWRlZmluZWQpIFBvd2VyUEMgUFRFIGFzIGNsb3NlbHkKKyAqIGFzIHBvc3NpYmxlLiBBZGRpdGlvbmFsIGJpdHMgbWF5IGJlIGRlZmluZWQgaW4gcGd0YWJsZS1oYXNoNjQtKi5oCisgKgorICogTm90ZTogV2Ugb25seSBzdXBwb3J0IHVzZXIgcmVhZC93cml0ZSBwZXJtaXNzaW9ucy4gU3VwZXJ2aXNvciBhbHdheXMKKyAqIGhhdmUgZnVsbCByZWFkL3dyaXRlIHRvIHBhZ2VzIGFib3ZlIFBBR0VfT0ZGU0VUIChwYWdlcyBiZWxvdyB0aGF0CisgKiBhbHdheXMgdXNlIHRoZSB1c2VyIGFjY2VzcyBwZXJtaXNzaW9ucykuCisgKgorICogV2UgY291bGQgY3JlYXRlIHNlcGFyYXRlIGtlcm5lbCByZWFkLW9ubHkgaWYgd2UgdXNlZCB0aGUgMyBQUCBiaXRzCisgKiBjb21iaW5hdGlvbnMgdGhhdCBuZXdlciBwcm9jZXNzb3JzIHByb3ZpZGUgYnV0IHdlIGN1cnJlbnRseSBkb24ndC4KKyAqLworI2RlZmluZSBfUEFHRV9QUkVTRU5UCQkweDAwMDEgLyogc29mdHdhcmU6IHB0ZSBjb250YWlucyBhIHRyYW5zbGF0aW9uICovCisjZGVmaW5lIF9QQUdFX1VTRVIJCTB4MDAwMiAvKiBtYXRjaGVzIG9uZSBvZiB0aGUgUFAgYml0cyAqLworI2RlZmluZSBfUEFHRV9GSUxFCQkweDAwMDIgLyogKCFwcmVzZW50IG9ubHkpIHNvZnR3YXJlOiBwdGUgaG9sZHMgZmlsZSBvZmZzZXQgKi8KKyNkZWZpbmUgX1BBR0VfRVhFQwkJMHgwMDA0IC8qIE5vIGV4ZWN1dGUgb24gUE9XRVI0IGFuZCBuZXdlciAod2UgaW52ZXJ0KSAqLworI2RlZmluZSBfUEFHRV9HVUFSREVECQkweDAwMDgKKyNkZWZpbmUgX1BBR0VfQ09IRVJFTlQJCTB4MDAxMCAvKiBNOiBlbmZvcmNlIG1lbW9yeSBjb2hlcmVuY2UgKFNNUCBzeXN0ZW1zKSAqLworI2RlZmluZSBfUEFHRV9OT19DQUNIRQkJMHgwMDIwIC8qIEk6IGNhY2hlIGluaGliaXQgKi8KKyNkZWZpbmUgX1BBR0VfV1JJVEVUSFJVCQkweDAwNDAgLyogVzogY2FjaGUgd3JpdGUtdGhyb3VnaCAqLworI2RlZmluZSBfUEFHRV9ESVJUWQkJMHgwMDgwIC8qIEM6IHBhZ2UgY2hhbmdlZCAqLworI2RlZmluZSBfUEFHRV9BQ0NFU1NFRAkJMHgwMTAwIC8qIFI6IHBhZ2UgcmVmZXJlbmNlZCAqLworI2RlZmluZSBfUEFHRV9SVwkJMHgwMjAwIC8qIHNvZnR3YXJlOiB1c2VyIHdyaXRlIGFjY2VzcyBhbGxvd2VkICovCisjZGVmaW5lIF9QQUdFX0JVU1kJCTB4MDgwMCAvKiBzb2Z0d2FyZTogUFRFICYgaGFzaCBhcmUgYnVzeSAqLworCisvKiBObyBzZXBhcmF0ZSBrZXJuZWwgcmVhZC1vbmx5ICovCisjZGVmaW5lIF9QQUdFX0tFUk5FTF9SVwkJKF9QQUdFX1JXIHwgX1BBR0VfRElSVFkpIC8qIHVzZXIgYWNjZXNzIGJsb2NrZWQgYnkga2V5ICovCisjZGVmaW5lIF9QQUdFX0tFUk5FTF9STwkJIF9QQUdFX0tFUk5FTF9SVworCisvKiBTdHJvbmcgQWNjZXNzIE9yZGVyaW5nICovCisjZGVmaW5lIF9QQUdFX1NBTwkJKF9QQUdFX1dSSVRFVEhSVSB8IF9QQUdFX05PX0NBQ0hFIHwgX1BBR0VfQ09IRVJFTlQpCisKKy8qIE5vIHBhZ2Ugc2l6ZSBlbmNvZGluZyBpbiB0aGUgbGludXggUFRFICovCisjZGVmaW5lIF9QQUdFX1BTSVpFCQkwCisKKy8qIFBURUlEWCBuaWJibGUgKi8KKyNkZWZpbmUgX1BURUlEWF9TRUNPTkRBUlkJMHg4CisjZGVmaW5lIF9QVEVJRFhfR1JPVVBfSVgJMHg3CisKKy8qIEhhc2ggdGFibGUgYmFzZWQgcGxhdGZvcm1zIG5lZWQgYXRvbWljIHVwZGF0ZXMgb2YgdGhlIGxpbnV4IFBURSAqLworI2RlZmluZSBQVEVfQVRPTUlDX1VQREFURVMJMQorCisjaWZkZWYgQ09ORklHX1BQQ182NEtfUEFHRVMKKyNpbmNsdWRlIDxhc20vcHRlLWhhc2g2NC02NGsuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtL3B0ZS1oYXNoNjQtNGsuaD4KKyNlbmRpZgorCisjZW5kaWYgLyogX19LRVJORUxfXyAqLworI2VuZGlmIC8qICBfQVNNX1BPV0VSUENfUFRFX0hBU0g2NF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnLmgKaW5kZXggZjQ4NGEzNC4uYzlmZjFlYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZy5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9yZWcuaApAQCAtMTU1LDYgKzE1NSw4IEBACiAjZGVmaW5lICAgQ1RSTF9SVU5MQVRDSAkweDEKICNkZWZpbmUgU1BSTl9EQUJSCTB4M0Y1CS8qIERhdGEgQWRkcmVzcyBCcmVha3BvaW50IFJlZ2lzdGVyICovCiAjZGVmaW5lICAgREFCUl9UUkFOU0xBVElPTgkoMVVMIDw8IDIpCisjZGVmaW5lICAgREFCUl9EQVRBX1dSSVRFCSgxVUwgPDwgMSkKKyNkZWZpbmUgICBEQUJSX0RBVEFfUkVBRAkoMVVMIDw8IDApCiAjZGVmaW5lIFNQUk5fREFCUjIJMHgxM0QJLyogZTMwMCAqLwogI2RlZmluZSBTUFJOX0RBQlJYCTB4M0Y3CS8qIERhdGEgQWRkcmVzcyBCcmVha3BvaW50IFJlZ2lzdGVyIEV4dGVuc2lvbiAqLwogI2RlZmluZSAgIERBQlJYX1VTRVIJKDFVTCA8PCAwKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oCmluZGV4IDY3NDUzNzYuLmE1NmY0ZDYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcmVnX2Jvb2tlLmgKKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3JlZ19ib29rZS5oCkBAIC0xMCw2ICsxMCw3IEBACiAjZGVmaW5lIF9fQVNNX1BPV0VSUENfUkVHX0JPT0tFX0hfXwogCiAvKiBNYWNoaW5lIFN0YXRlIFJlZ2lzdGVyIChNU1IpIEZpZWxkcyAqLworI2RlZmluZSBNU1JfR1MJCSgxPDwyOCkgLyogR3Vlc3Qgc3RhdGUgKi8KICNkZWZpbmUgTVNSX1VDTEUJKDE8PDI2KQkvKiBVc2VyLW1vZGUgY2FjaGUgbG9jayBlbmFibGUgKi8KICNkZWZpbmUgTVNSX1NQRQkJKDE8PDI1KQkvKiBFbmFibGUgU1BFICovCiAjZGVmaW5lIE1TUl9EV0UJCSgxPDwxMCkJLyogRGVidWcgV2FpdCBFbmFibGUgKi8KQEAgLTExMCw2ICsxMTEsNyBAQAogI2RlZmluZSBTUFJOX0wxQ1NSMAkweDNGMgkvKiBMMSBDYWNoZSBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgMCAqLwogI2RlZmluZSBTUFJOX0wxQ1NSMQkweDNGMwkvKiBMMSBDYWNoZSBDb250cm9sIGFuZCBTdGF0dXMgUmVnaXN0ZXIgMSAqLwogI2RlZmluZSBTUFJOX01NVUNTUjAJMHgzRjQJLyogTU1VIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAwICovCisjZGVmaW5lIFNQUk5fTU1VQ0ZHCTB4M0Y3CS8qIE1NVSBDb25maWd1cmF0aW9uIFJlZ2lzdGVyICovCiAjZGVmaW5lIFNQUk5fUElUCTB4M0RCCS8qIFByb2dyYW1tYWJsZSBJbnRlcnZhbCBUaW1lciAqLwogI2RlZmluZSBTUFJOX0JVQ1NSCTB4M0Y1CS8qIEJyYW5jaCBVbml0IENvbnRyb2wgYW5kIFN0YXR1cyAqLwogI2RlZmluZSBTUFJOX0wyQ1NSMAkweDNGOQkvKiBMMiBEYXRhIENhY2hlIENvbnRyb2wgYW5kIFN0YXR1cyBSZWdpc3RlciAwICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGVtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vc3lzdGVtLmgKaW5kZXggMmE0YmUxOS4uZjYxMjc5OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3N5c3RlbS5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9zeXN0ZW0uaApAQCAtNTMxLDcgKzUzMSw3IEBACiAjZGVmaW5lIGNtcHhjaGc2NF9sb2NhbChwdHIsIG8sIG4pIF9fY21weGNoZzY0X2xvY2FsX2dlbmVyaWMoKHB0ciksIChvKSwgKG4pKQogI2VuZGlmCiAKLSNkZWZpbmUgYXJjaF9hbGlnbl9zdGFjayh4KSAoeCkKK2V4dGVybiB1bnNpZ25lZCBsb25nIGFyY2hfYWxpZ25fc3RhY2sodW5zaWduZWQgbG9uZyBzcCk7CiAKIC8qIFVzZWQgaW4gdmVyeSBlYXJseSBrZXJuZWwgaW5pdGlhbGl6YXRpb24uICovCiBleHRlcm4gdW5zaWduZWQgbG9uZyByZWxvY19vZmZzZXQodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdGhyZWFkX2luZm8uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCmluZGV4IDk2NjVhMjYuLjlhYmE1YTMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS90aHJlYWRfaW5mby5oCkBAIC0xMiw4ICsxMiwxMCBAQAogCiAvKiBXZSBoYXZlIDhrIHN0YWNrcyBvbiBwcGMzMiBhbmQgMTZrIG9uIHBwYzY0ICovCiAKLSNpZmRlZiBDT05GSUdfUFBDNjQKKyNpZiBkZWZpbmVkKENPTkZJR19QUEM2NCkKICNkZWZpbmUgVEhSRUFEX1NISUZUCQkxNAorI2VsaWYgZGVmaW5lZChDT05GSUdfUFBDXzI1NktfUEFHRVMpCisjZGVmaW5lIFRIUkVBRF9TSElGVAkJMTUKICNlbHNlCiAjZGVmaW5lIFRIUkVBRF9TSElGVAkJMTMKICNlbmRpZgpAQCAtMTU0LDYgKzE1NiwxMyBAQAogCXRpLT5sb2NhbF9mbGFncyB8PSBfVExGX1JFU1RPUkVfU0lHTUFTSzsKIAlzZXRfYml0KFRJRl9TSUdQRU5ESU5HLCAmdGktPmZsYWdzKTsKIH0KKworI2lmZGVmIENPTkZJR19QUEM2NAorI2RlZmluZSBpc18zMmJpdF90YXNrKCkJKHRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSkKKyNlbHNlCisjZGVmaW5lIGlzXzMyYml0X3Rhc2soKQkoMSkKKyNlbmRpZgorCiAjZW5kaWYJLyogIV9fQVNTRU1CTFlfXyAqLwogCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VkYmcuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS91ZGJnLmgKaW5kZXggNjQxOGNlZS4uY2QyMWU1ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL3VkYmcuaAorKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vdWRiZy5oCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogCiBleHRlcm4gdm9pZCAoKnVkYmdfcHV0YykoY2hhciBjKTsKK2V4dGVybiB2b2lkICgqdWRiZ19mbHVzaCkodm9pZCk7CiBleHRlcm4gaW50ICgqdWRiZ19nZXRjKSh2b2lkKTsKIGV4dGVybiBpbnQgKCp1ZGJnX2dldGNfcG9sbCkodm9pZCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMva2VybmVsL01ha2VmaWxlCmluZGV4IDhkMWE0MTkuLjcxOTAxZmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9NYWtlZmlsZQpAQCAtMTgsMTIgKzE4LDEwIEBACiBDRkxBR1NfUkVNT1ZFX3Byb21faW5pdC5vID0gLXBnIC1tbm8tc2NoZWQtZXBpbG9nCiBDRkxBR1NfUkVNT1ZFX2J0ZXh0Lm8gPSAtcGcgLW1uby1zY2hlZC1lcGlsb2cKIENGTEFHU19SRU1PVkVfcHJvbS5vID0gLXBnIC1tbm8tc2NoZWQtZXBpbG9nCi0KLWlmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRQotIyBkeW5hbWljIGZ0cmFjZSBzZXR1cC4KKyMgZG8gbm90IHRyYWNlIHRyYWNlciBjb2RlCiBDRkxBR1NfUkVNT1ZFX2Z0cmFjZS5vID0gLXBnIC1tbm8tc2NoZWQtZXBpbG9nCi1lbmRpZgotCisjIHRpbWVycyB1c2VkIGJ5IHRyYWNpbmcKK0NGTEFHU19SRU1PVkVfdGltZS5vID0gLXBnIC1tbm8tc2NoZWQtZXBpbG9nCiBlbmRpZgogCiBvYmoteQkJCQk6PSBjcHV0YWJsZS5vIHB0cmFjZS5vIHN5c2NhbGxzLm8gXApAQCAtNjEsNiArNTksNyBAQAogb2JqNjQtJChDT05GSUdfSElCRVJOQVRJT04pCSs9IHN3c3VzcF9hc202NC5vCiBvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IG1vZHVsZS5vIG1vZHVsZV8kKENPTkZJR19XT1JEX1NJWkUpLm8KIG9iai0kKENPTkZJR180NHgpCQkrPSBjcHVfc2V0dXBfNDR4Lm8KK29iai0kKENPTkZJR19GU0xfQk9PS0UpCQkrPSBjcHVfc2V0dXBfZnNsX2Jvb2tlLm8gZGJlbGwubwogCiBleHRyYS0kKENPTkZJR19QUENfU1REX01NVSkJOj0gaGVhZF8zMi5vCiBleHRyYS0kKENPTkZJR19QUEM2NCkJCTo9IGhlYWRfNjQubwpAQCAtNzYsNyArNzUsNyBAQAogb2JqLSQoQ09ORklHX1BQQzMyKQkJKz0gZW50cnlfMzIubyBzZXR1cF8zMi5vCiBvYmotJChDT05GSUdfUFBDNjQpCQkrPSBkbWEtaW9tbXUubyBpb21tdS5vCiBvYmotJChDT05GSUdfS0dEQikJCSs9IGtnZGIubwotb2JqLSQoQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNKQkrPSBwcm9tX2luaXQubworb2JqLSQoQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkUpCSs9IHByb21faW5pdC5vCiBvYmotJChDT05GSUdfTU9EVUxFUykJCSs9IHBwY19rc3ltcy5vCiBvYmotJChDT05GSUdfQk9PVFhfVEVYVCkJKz0gYnRleHQubwogb2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcC5vCkBAIC05NCw2ICs5Myw3IEBACiBvYmo2NC0kKENPTkZJR19BVURJVCkJCSs9IGNvbXBhdF9hdWRpdC5vCiAKIG9iai0kKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkJKz0gZnRyYWNlLm8KK29iai0kKENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIpCSs9IGZ0cmFjZS5vCiAKIG9iai0kKENPTkZJR184WFhfTUlOSU1BTF9GUEVNVSkgKz0gc29mdGVtdTh4eC5vCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvYWxpZ24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYWxpZ24uYwppbmRleCA3M2NiNmEzLi41ZmZjZmFhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2FsaWduLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9hbGlnbi5jCkBAIC0xODcsNyArMTg3LDcgQEAKIAl7IDQsIFNUK0YrUytVIH0sCS8qIDExIDEgMTAxMDogc3Rmc3V4ICovCiAJeyA4LCBTVCtGK1UgfSwJCS8qIDExIDEgMTAxMTogc3RmZHV4ICovCiAJSU5WQUxJRCwJCS8qIDExIDEgMTEwMCAqLwotCUlOVkFMSUQsCQkvKiAxMSAxIDExMDEgKi8KKwl7IDQsIExEK0YgfSwJCS8qIDExIDEgMTEwMTogbGZpd3p4ICovCiAJSU5WQUxJRCwJCS8qIDExIDEgMTExMCAqLwogCUlOVkFMSUQsCQkvKiAxMSAxIDExMTEgKi8KIH07CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2FzbS1vZmZzZXRzLmMKaW5kZXggNDJmZTRkYS4uMWU0MGJjMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9hc20tb2Zmc2V0cy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvYXNtLW9mZnNldHMuYwpAQCAtMjg0LDkgKzI4NCw2IEBACiAjZW5kaWYgLyogISBDT05GSUdfUFBDNjQgKi8KIAogCS8qIEFib3V0IHRoZSBDUFUgZmVhdHVyZXMgdGFibGUgKi8KLQlERUZJTkUoQ1BVX1NQRUNfRU5UUllfU0laRSwgc2l6ZW9mKHN0cnVjdCBjcHVfc3BlYykpOwotCURFRklORShDUFVfU1BFQ19QVlJfTUFTSywgb2Zmc2V0b2Yoc3RydWN0IGNwdV9zcGVjLCBwdnJfbWFzaykpOwotCURFRklORShDUFVfU1BFQ19QVlJfVkFMVUUsIG9mZnNldG9mKHN0cnVjdCBjcHVfc3BlYywgcHZyX3ZhbHVlKSk7CiAJREVGSU5FKENQVV9TUEVDX0ZFQVRVUkVTLCBvZmZzZXRvZihzdHJ1Y3QgY3B1X3NwZWMsIGNwdV9mZWF0dXJlcykpOwogCURFRklORShDUFVfU1BFQ19TRVRVUCwgb2Zmc2V0b2Yoc3RydWN0IGNwdV9zcGVjLCBjcHVfc2V0dXApKTsKIAlERUZJTkUoQ1BVX1NQRUNfUkVTVE9SRSwgb2Zmc2V0b2Yoc3RydWN0IGNwdV9zcGVjLCBjcHVfcmVzdG9yZSkpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfNDR4LlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF80NHguUwppbmRleCAxMGI0YWIxLi43ZDYwNmY4IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF80NHguUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2NwdV9zZXR1cF80NHguUwpAQCAtMzQsNiArMzQsNyBAQAogCWJscgogX0dMT0JBTChfX3NldHVwX2NwdV80NjBleCkKIF9HTE9CQUwoX19zZXR1cF9jcHVfNDYwZ3QpCitfR0xPQkFMKF9fc2V0dXBfY3B1XzQ2MHN4KQogCW1mbHIJcjQKIAlibAlfX2luaXRfZnB1XzQ0eAogCWJsCV9fZml4dXBfNDQwQV9tY2hlY2sKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwXzZ4eC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfNnh4LlMKaW5kZXggNzJkMWQ3My4uNTRmNzY3ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfNnh4LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfNnh4LlMKQEAgLTE1LDkgKzE1LDE0IEBACiAjaW5jbHVkZSA8YXNtL3BwY19hc20uaD4KICNpbmNsdWRlIDxhc20vYXNtLW9mZnNldHMuaD4KICNpbmNsdWRlIDxhc20vY2FjaGUuaD4KKyNpbmNsdWRlIDxhc20vbW11Lmg+CiAKIF9HTE9CQUwoX19zZXR1cF9jcHVfNjAzKQogCW1mbHIJcjQKK0JFR0lOX01NVV9GVFJfU0VDVElPTgorCWxpCXIxMCwwCisJbXRzcHIJU1BSTl9TUFJHNCxyMTAJCS8qIGluaXQgU1cgTFJVIHRyYWNraW5nICovCitFTkRfTU1VX0ZUUl9TRUNUSU9OX0lGU0VUKE1NVV9GVFJfTkVFRF9EVExCX1NXX0xSVSkKIEJFR0lOX0ZUUl9TRUNUSU9OCiAJYmwJX19pbml0X2ZwdV9yZWdpc3RlcnMKIEVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX0ZQVV9VTkFWQUlMQUJMRSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwX2ZzbF9ib29rZS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHVfc2V0dXBfZnNsX2Jvb2tlLlMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZWI0YjlhZAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1X3NldHVwX2ZzbF9ib29rZS5TCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBUaGlzIGZpbGUgY29udGFpbnMgbG93IGxldmVsIENQVSBzZXR1cCBmdW5jdGlvbnMuCisgKiBLdW1hciBHYWxhIDxnYWxha0BrZXJuZWwuY3Jhc2hpbmcub3JnPgorICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IsIEluYy4KKyAqCisgKiBCYXNlZCBvbiBjcHVfc2V0dXBfNnh4IGNvZGUgYnkKKyAqIEJlbmphbWluIEhlcnJlbnNjaG1pZHQgPGJlbmhAa2VybmVsLmNyYXNoaW5nLm9yZz4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uCisgKiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqLworCisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wcGNfYXNtLmg+CisKK19HTE9CQUwoX19zZXR1cF9jcHVfZTIwMCkKKwkvKiBlbmFibGUgZGVkaWNhdGVkIGRlYnVnIGV4Y2VwdGlvbiBoYW5kbGluZyByZXNvdXJjZXMgKERlYnVnIEFQVSkgKi8KKwltZnNwcglyMyxTUFJOX0hJRDAKKwlvcmkJcjMscjMsSElEMF9EQVBVRU5AbAorCW10c3ByCVNQUk5fSElEMCxyMworCWIJX19zZXR1cF9lMjAwX2l2b3JzCitfR0xPQkFMKF9fc2V0dXBfY3B1X2U1MDB2MSkKK19HTE9CQUwoX19zZXR1cF9jcHVfZTUwMHYyKQorCWIJX19zZXR1cF9lNTAwX2l2b3JzCitfR0xPQkFMKF9fc2V0dXBfY3B1X2U1MDBtYykKKwliCV9fc2V0dXBfZTUwMG1jX2l2b3JzCisKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3B1dGFibGUuYwppbmRleCA5MjNmODdhLi5jZDFiNjg3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2NwdXRhYmxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9jcHV0YWJsZS5jCkBAIC0zNSw2ICszNSwxMCBAQAogICogYW5kIHBwYzY0CiAgKi8KICNpZmRlZiBDT05GSUdfUFBDMzIKK2V4dGVybiB2b2lkIF9fc2V0dXBfY3B1X2UyMDAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CitleHRlcm4gdm9pZCBfX3NldHVwX2NwdV9lNTAwdjEodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CitleHRlcm4gdm9pZCBfX3NldHVwX2NwdV9lNTAwdjIodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CitleHRlcm4gdm9pZCBfX3NldHVwX2NwdV9lNTAwbWModW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CiBleHRlcm4gdm9pZCBfX3NldHVwX2NwdV80NDBlcCh1bnNpZ25lZCBsb25nIG9mZnNldCwgc3RydWN0IGNwdV9zcGVjKiBzcGVjKTsKIGV4dGVybiB2b2lkIF9fc2V0dXBfY3B1XzQ0MGVweCh1bnNpZ25lZCBsb25nIG9mZnNldCwgc3RydWN0IGNwdV9zcGVjKiBzcGVjKTsKIGV4dGVybiB2b2lkIF9fc2V0dXBfY3B1XzQ0MGd4KHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdHJ1Y3QgY3B1X3NwZWMqIHNwZWMpOwpAQCAtNDMsNiArNDcsNyBAQAogZXh0ZXJuIHZvaWQgX19zZXR1cF9jcHVfNDQweDUodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CiBleHRlcm4gdm9pZCBfX3NldHVwX2NwdV80NjBleCh1bnNpZ25lZCBsb25nIG9mZnNldCwgc3RydWN0IGNwdV9zcGVjKiBzcGVjKTsKIGV4dGVybiB2b2lkIF9fc2V0dXBfY3B1XzQ2MGd0KHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdHJ1Y3QgY3B1X3NwZWMqIHNwZWMpOworZXh0ZXJuIHZvaWQgX19zZXR1cF9jcHVfNDYwc3godW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyAqc3BlYyk7CiBleHRlcm4gdm9pZCBfX3NldHVwX2NwdV82MDModW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CiBleHRlcm4gdm9pZCBfX3NldHVwX2NwdV82MDQodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CiBleHRlcm4gdm9pZCBfX3NldHVwX2NwdV83NTAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHN0cnVjdCBjcHVfc3BlYyogc3BlYyk7CkBAIC03MjYsNiArNzMxLDggQEAKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NTAsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM3NTAiLAorCQkub3Byb2ZpbGVfY3B1X3R5cGUgICAgICA9ICJwcGMvNzUwIiwKKwkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0c0LAogCX0sCiAJewkvKiA3NTBGWCByZXYgMi4wIG11c3QgZGlzYWJsZSBISUQwW0RQTV0gKi8KIAkJLnB2cl9tYXNrCQk9IDB4ZmZmZmZmZmYsCkBAIC03NDEsNiArNzQ4LDggQEAKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NTAsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM3NTAiLAorCQkub3Byb2ZpbGVfY3B1X3R5cGUgICAgICA9ICJwcGMvNzUwIiwKKwkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0c0LAogCX0sCiAJewkvKiA3NTBGWCAoQWxsIHJldnMgZXhjZXB0IDIuMCkgKi8KIAkJLnB2cl9tYXNrCQk9IDB4ZmZmZjAwMDAsCkBAIC03NTYsNiArNzY1LDggQEAKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV83NTBmeCwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19nZW5lcmljLAogCQkucGxhdGZvcm0JCT0gInBwYzc1MCIsCisJCS5vcHJvZmlsZV9jcHVfdHlwZSAgICAgID0gInBwYy83NTAiLAorCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfRzQsCiAJfSwKIAl7CS8qIDc1MEdYICovCiAJCS5wdnJfbWFzawkJPSAweGZmZmYwMDAwLApAQCAtNzcxLDYgKzc4Miw4IEBACiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNzUwZngsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZ2VuZXJpYywKIAkJLnBsYXRmb3JtCQk9ICJwcGM3NTAiLAorCQkub3Byb2ZpbGVfY3B1X3R5cGUgICAgICA9ICJwcGMvNzUwIiwKKwkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0c0LAogCX0sCiAJewkvKiA3NDAvNzUwIChMMkNSIGJpdCBuZWVkIGZpeHVwIGZvciA3NDApICovCiAJCS5wdnJfbWFzawkJPSAweGZmZmYwMDAwLApAQCAtMTA3Nyw3ICsxMDkwLDggQEAKIAkJLmNwdV9uYW1lCQk9ICJlMzAwYzIiLAogCQkuY3B1X2ZlYXR1cmVzCQk9IENQVV9GVFJTX0UzMDBDMiwKIAkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gUFBDX0ZFQVRVUkVfMzIgfCBQUENfRkVBVFVSRV9IQVNfTU1VLAotCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfVVNFX0hJR0hfQkFUUywKKwkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX1VTRV9ISUdIX0JBVFMgfAorCQkJTU1VX0ZUUl9ORUVEX0RUTEJfU1dfTFJVLAogCQkuaWNhY2hlX2JzaXplCQk9IDMyLAogCQkuZGNhY2hlX2JzaXplCQk9IDMyLAogCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1XzYwMywKQEAgLTEwOTAsNyArMTEwNCw4IEBACiAJCS5jcHVfbmFtZQkJPSAiZTMwMGMzIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19FMzAwLAogCQkuY3B1X3VzZXJfZmVhdHVyZXMJPSBDT01NT05fVVNFUiwKLQkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX1VTRV9ISUdIX0JBVFMsCisJCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9VU0VfSElHSF9CQVRTIHwKKwkJCU1NVV9GVFJfTkVFRF9EVExCX1NXX0xSVSwKIAkJLmljYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmRjYWNoZV9ic2l6ZQkJPSAzMiwKIAkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV82MDMsCkBAIC0xMTA1LDcgKzExMjAsOCBAQAogCQkuY3B1X25hbWUJCT0gImUzMDBjNCIsCiAJCS5jcHVfZmVhdHVyZXMJCT0gQ1BVX0ZUUlNfRTMwMCwKIAkJLmNwdV91c2VyX2ZlYXR1cmVzCT0gQ09NTU9OX1VTRVIsCi0JCS5tbXVfZmVhdHVyZXMJCT0gTU1VX0ZUUl9VU0VfSElHSF9CQVRTLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfVVNFX0hJR0hfQkFUUyB8CisJCQlNTVVfRlRSX05FRURfRFRMQl9TV19MUlUsCiAJCS5pY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCiAJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNjAzLApAQCAtMTYzNCw2ICsxNjUwLDE5IEBACiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfNDQwQSwKIAkJLnBsYXRmb3JtCQk9ICJwcGM0NDAiLAogCX0sCisJeyAvKiA0NjBTWCAqLworCQkucHZyX21hc2sJCT0gMHhmZmZmZmYwMCwKKwkJLnB2cl92YWx1ZQkJPSAweDEzNTQxODAwLAorCQkuY3B1X25hbWUJCT0gIjQ2MFNYIiwKKwkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU180NFgsCisJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX0JPT0tFLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfVFlQRV80NHgsCisJCS5pY2FjaGVfYnNpemUJCT0gMzIsCisJCS5kY2FjaGVfYnNpemUJCT0gMzIsCisJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfNDYwc3gsCisJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfNDQwQSwKKwkJLnBsYXRmb3JtCQk9ICJwcGM0NDAiLAorCX0sCiAJewkvKiBkZWZhdWx0IG1hdGNoICovCiAJCS5wdnJfbWFzawkJPSAweDAwMDAwMDAwLAogCQkucHZyX3ZhbHVlCQk9IDB4MDAwMDAwMDAsCkBAIC0xNjg3LDYgKzE3MTYsNyBAQAogCQkJUFBDX0ZFQVRVUkVfVU5JRklFRF9DQUNIRSwKIAkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX1RZUEVfRlNMX0UsCiAJCS5kY2FjaGVfYnNpemUJCT0gMzIsCisJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfZTIwMCwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19lMjAwLAogCQkucGxhdGZvcm0JCT0gInBwYzU1NTQiLAogCX0KQEAgLTE3MDYsNiArMTczNiw3IEBACiAJCS5udW1fcG1jcwkJPSA0LAogCQkub3Byb2ZpbGVfY3B1X3R5cGUJPSAicHBjL2U1MDAiLAogCQkub3Byb2ZpbGVfdHlwZQkJPSBQUENfT1BST0ZJTEVfRlNMX0VNQiwKKwkJLmNwdV9zZXR1cAkJPSBfX3NldHVwX2NwdV9lNTAwdjEsCiAJCS5tYWNoaW5lX2NoZWNrCQk9IG1hY2hpbmVfY2hlY2tfZTUwMCwKIAkJLnBsYXRmb3JtCQk9ICJwcGM4NTQwIiwKIAl9LApAQCAtMTcyNCw2ICsxNzU1LDcgQEAKIAkJLm51bV9wbWNzCQk9IDQsCiAJCS5vcHJvZmlsZV9jcHVfdHlwZQk9ICJwcGMvZTUwMCIsCiAJCS5vcHJvZmlsZV90eXBlCQk9IFBQQ19PUFJPRklMRV9GU0xfRU1CLAorCQkuY3B1X3NldHVwCQk9IF9fc2V0dXBfY3B1X2U1MDB2MiwKIAkJLm1hY2hpbmVfY2hlY2sJCT0gbWFjaGluZV9jaGVja19lNTAwLAogCQkucGxhdGZvcm0JCT0gInBwYzg1NDgiLAogCX0sCkBAIC0xNzMzLDEyICsxNzY1LDE0IEBACiAJCS5jcHVfbmFtZQkJPSAiZTUwMG1jIiwKIAkJLmNwdV9mZWF0dXJlcwkJPSBDUFVfRlRSU19FNTAwTUMsCiAJCS5jcHVfdXNlcl9mZWF0dXJlcwk9IENPTU1PTl9VU0VSX0JPT0tFIHwgUFBDX0ZFQVRVUkVfSEFTX0ZQVSwKLQkJLm1tdV9mZWF0dXJlcwkJPSBNTVVfRlRSX1RZUEVfRlNMX0UgfCBNTVVfRlRSX0JJR19QSFlTLAorCQkubW11X2ZlYXR1cmVzCQk9IE1NVV9GVFJfVFlQRV9GU0xfRSB8IE1NVV9GVFJfQklHX1BIWVMgfAorCQkJTU1VX0ZUUl9VU0VfVExCSUxYLAogCQkuaWNhY2hlX2JzaXplCQk9IDY0LAogCQkuZGNhY2hlX2JzaXplCQk9IDY0LAogCQkubnVtX3BtY3MJCT0gNCwKIAkJLm9wcm9maWxlX2NwdV90eXBlCT0gInBwYy9lNTAwIiwgLyogeHh4IC0gZ2FsYWssIGU1MDBtYz8gKi8KIAkJLm9wcm9maWxlX3R5cGUJCT0gUFBDX09QUk9GSUxFX0ZTTF9FTUIsCisJCS5jcHVfc2V0dXAJCT0gX19zZXR1cF9jcHVfZTUwMG1jLAogCQkubWFjaGluZV9jaGVjawkJPSBtYWNoaW5lX2NoZWNrX2U1MDAsCiAJCS5wbGF0Zm9ybQkJPSAicHBjZTUwMG1jIiwKIAl9LApAQCAtMTc2Miw3NCArMTc5Niw4NCBAQAogCiBzdGF0aWMgc3RydWN0IGNwdV9zcGVjIHRoZV9jcHVfc3BlYzsKIAorc3RhdGljIHZvaWQgX19pbml0IHNldHVwX2NwdV9zcGVjKHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzdHJ1Y3QgY3B1X3NwZWMgKnMpCit7CisJc3RydWN0IGNwdV9zcGVjICp0ID0gJnRoZV9jcHVfc3BlYzsKKwlzdHJ1Y3QgY3B1X3NwZWMgb2xkOworCisJdCA9IFBUUlJFTE9DKHQpOworCW9sZCA9ICp0OworCisJLyogQ29weSBldmVyeXRoaW5nLCB0aGVuIGRvIGZpeHVwcyAqLworCSp0ID0gKnM7CisKKwkvKgorCSAqIElmIHdlIGFyZSBvdmVycmlkaW5nIGEgcHJldmlvdXMgdmFsdWUgZGVyaXZlZCBmcm9tIHRoZSByZWFsCisJICogUFZSIHdpdGggYSBuZXcgdmFsdWUgb2J0YWluZWQgdXNpbmcgYSBsb2dpY2FsIFBWUiB2YWx1ZSwKKwkgKiBkb24ndCBtb2RpZnkgdGhlIHBlcmZvcm1hbmNlIG1vbml0b3IgZmllbGRzLgorCSAqLworCWlmIChvbGQubnVtX3BtY3MgJiYgIXMtPm51bV9wbWNzKSB7CisJCXQtPm51bV9wbWNzID0gb2xkLm51bV9wbWNzOworCQl0LT5wbWNfdHlwZSA9IG9sZC5wbWNfdHlwZTsKKwkJdC0+b3Byb2ZpbGVfdHlwZSA9IG9sZC5vcHJvZmlsZV90eXBlOworCQl0LT5vcHJvZmlsZV9tbWNyYV9zaWh2ID0gb2xkLm9wcm9maWxlX21tY3JhX3NpaHY7CisJCXQtPm9wcm9maWxlX21tY3JhX3NpcHIgPSBvbGQub3Byb2ZpbGVfbW1jcmFfc2lwcjsKKwkJdC0+b3Byb2ZpbGVfbW1jcmFfY2xlYXIgPSBvbGQub3Byb2ZpbGVfbW1jcmFfY2xlYXI7CisKKwkJLyoKKwkJICogSWYgd2UgaGF2ZSBwYXNzZWQgdGhyb3VnaCB0aGlzIGxvZ2ljIG9uY2UgYmVmb3JlIGFuZAorCQkgKiBoYXZlIHB1bGxlZCB0aGUgZGVmYXVsdCBjYXNlIGJlY2F1c2UgdGhlIHJlYWwgUFZSIHdhcworCQkgKiBub3QgZm91bmQgaW5zaWRlIGNwdV9zcGVjc1tdLCB0aGVuIHdlIGFyZSBwb3NzaWJseQorCQkgKiBydW5uaW5nIGluIGNvbXBhdGliaWxpdHkgbW9kZS4gSW4gdGhhdCBjYXNlLCBsZXQgdGhlCisJCSAqIG9wcm9maWxlciBrbm93IHdoaWNoIHNldCBvZiBjb21wYXRpYmlsaXR5IGNvdW50ZXJzIHRvCisJCSAqIHB1bGwgZnJvbSBieSBtYWtpbmcgc3VyZSB0aGUgb3Byb2ZpbGVfY3B1X3R5cGUgc3RyaW5nCisJCSAqIGlzIHNldCB0byB0aGF0IG9mIGNvbXBhdGliaWxpdHkgbW9kZS4gSWYgdGhlCisJCSAqIG9wcm9maWxlX2NwdV90eXBlIGFscmVhZHkgaGFzIGEgdmFsdWUsIHRoZW4gd2UgYXJlCisJCSAqIHBvc3NpYmx5IG92ZXJyaWRpbmcgYSByZWFsIFBWUiB3aXRoIGEgbG9naWNhbCBvbmUsCisJCSAqIGFuZCwgaW4gdGhhdCBjYXNlLCBrZWVwIHRoZSBjdXJyZW50IHZhbHVlIGZvcgorCQkgKiBvcHJvZmlsZV9jcHVfdHlwZS4KKwkJICovCisJCWlmIChvbGQub3Byb2ZpbGVfY3B1X3R5cGUgPT0gTlVMTCkKKwkJCXQtPm9wcm9maWxlX2NwdV90eXBlID0gcy0+b3Byb2ZpbGVfY3B1X3R5cGU7CisJfQorCisJKlBUUlJFTE9DKCZjdXJfY3B1X3NwZWMpID0gJnRoZV9jcHVfc3BlYzsKKworCS8qCisJICogU2V0IHRoZSBiYXNlIHBsYXRmb3JtIHN0cmluZyBvbmNlOyBhc3N1bWVzCisJICogd2UncmUgY2FsbGVkIHdpdGggcmVhbCBwdnIgZmlyc3QuCisJICovCisJaWYgKCpQVFJSRUxPQygmcG93ZXJwY19iYXNlX3BsYXRmb3JtKSA9PSBOVUxMKQorCQkqUFRSUkVMT0MoJnBvd2VycGNfYmFzZV9wbGF0Zm9ybSkgPSB0LT5wbGF0Zm9ybTsKKworI2lmIGRlZmluZWQoQ09ORklHX1BQQzY0KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkKKwkvKiBwcGM2NCBhbmQgYm9va2UgZXhwZWN0IGlkZW50aWZ5X2NwdSB0byBhbHNvIGNhbGwgc2V0dXBfY3B1IGZvcgorCSAqIHRoYXQgcHJvY2Vzc29yLiBJIHdpbGwgY29uc29saWRhdGUgdGhhdCBhdCBhIGxhdGVyIHRpbWUsIGZvciBub3csCisJICoganVzdCB1c2UgI2lmZGVmLiBXZSBhbHNvIGRvbid0IG5lZWQgdG8gUFRSUkVMT0MgdGhlIGZ1bmN0aW9uCisJICogcG9pbnRlciBvbiBwcGM2NCBhbmQgYm9va2UgYXMgd2UgYXJlIHJ1bm5pbmcgYXQgMCBpbiByZWFsIG1vZGUKKwkgKiBvbiBwcGM2NCBhbmQgcmVsb2Nfb2Zmc2V0IGlzIGFsd2F5cyAwIG9uIGJvb2tlLgorCSAqLworCWlmIChzLT5jcHVfc2V0dXApIHsKKwkJcy0+Y3B1X3NldHVwKG9mZnNldCwgcyk7CisJfQorI2VuZGlmIC8qIENPTkZJR19QUEM2NCB8fCBDT05GSUdfQk9PS0UgKi8KK30KKwogc3RydWN0IGNwdV9zcGVjICogX19pbml0IGlkZW50aWZ5X2NwdSh1bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgaW50IHB2cikKIHsKIAlzdHJ1Y3QgY3B1X3NwZWMgKnMgPSBjcHVfc3BlY3M7Ci0Jc3RydWN0IGNwdV9zcGVjICp0ID0gJnRoZV9jcHVfc3BlYzsKIAlpbnQgaTsKIAogCXMgPSBQVFJSRUxPQyhzKTsKLQl0ID0gUFRSUkVMT0ModCk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjcHVfc3BlY3MpOyBpKysscysrKQorCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGNwdV9zcGVjcyk7IGkrKyxzKyspIHsKIAkJaWYgKChwdnIgJiBzLT5wdnJfbWFzaykgPT0gcy0+cHZyX3ZhbHVlKSB7Ci0JCQkvKgotCQkJICogSWYgd2UgYXJlIG92ZXJyaWRpbmcgYSBwcmV2aW91cyB2YWx1ZSBkZXJpdmVkCi0JCQkgKiBmcm9tIHRoZSByZWFsIFBWUiB3aXRoIGEgbmV3IHZhbHVlIG9idGFpbmVkCi0JCQkgKiB1c2luZyBhIGxvZ2ljYWwgUFZSIHZhbHVlLCBkb24ndCBtb2RpZnkgdGhlCi0JCQkgKiBwZXJmb3JtYW5jZSBtb25pdG9yIGZpZWxkcy4KLQkJCSAqLwotCQkJaWYgKHQtPm51bV9wbWNzICYmICFzLT5udW1fcG1jcykgewotCQkJCXQtPmNwdV9uYW1lID0gcy0+Y3B1X25hbWU7Ci0JCQkJdC0+Y3B1X2ZlYXR1cmVzID0gcy0+Y3B1X2ZlYXR1cmVzOwotCQkJCXQtPmNwdV91c2VyX2ZlYXR1cmVzID0gcy0+Y3B1X3VzZXJfZmVhdHVyZXM7Ci0JCQkJdC0+aWNhY2hlX2JzaXplID0gcy0+aWNhY2hlX2JzaXplOwotCQkJCXQtPmRjYWNoZV9ic2l6ZSA9IHMtPmRjYWNoZV9ic2l6ZTsKLQkJCQl0LT5jcHVfc2V0dXAgPSBzLT5jcHVfc2V0dXA7Ci0JCQkJdC0+Y3B1X3Jlc3RvcmUgPSBzLT5jcHVfcmVzdG9yZTsKLQkJCQl0LT5wbGF0Zm9ybSA9IHMtPnBsYXRmb3JtOwotCQkJCS8qCi0JCQkJICogSWYgd2UgaGF2ZSBwYXNzZWQgdGhyb3VnaCB0aGlzIGxvZ2ljIG9uY2UKLQkJCQkgKiBiZWZvcmUgYW5kIGhhdmUgcHVsbGVkIHRoZSBkZWZhdWx0IGNhc2UKLQkJCQkgKiBiZWNhdXNlIHRoZSByZWFsIFBWUiB3YXMgbm90IGZvdW5kIGluc2lkZQotCQkJCSAqIGNwdV9zcGVjc1tdLCB0aGVuIHdlIGFyZSBwb3NzaWJseSBydW5uaW5nIGluCi0JCQkJICogY29tcGF0aWJpbGl0eSBtb2RlLiBJbiB0aGF0IGNhc2UsIGxldCB0aGUKLQkJCQkgKiBvcHJvZmlsZXIga25vdyB3aGljaCBzZXQgb2YgY29tcGF0aWJpbGl0eQotCQkJCSAqIGNvdW50ZXJzIHRvIHB1bGwgZnJvbSBieSBtYWtpbmcgc3VyZSB0aGUKLQkJCQkgKiBvcHJvZmlsZV9jcHVfdHlwZSBzdHJpbmcgaXMgc2V0IHRvIHRoYXQgb2YKLQkJCQkgKiBjb21wYXRpYmlsaXR5IG1vZGUuIElmIHRoZSBvcHJvZmlsZV9jcHVfdHlwZQotCQkJCSAqIGFscmVhZHkgaGFzIGEgdmFsdWUsIHRoZW4gd2UgYXJlIHBvc3NpYmx5Ci0JCQkJICogb3ZlcnJpZGluZyBhIHJlYWwgUFZSIHdpdGggYSBsb2dpY2FsIG9uZSwgYW5kLAotCQkJCSAqIGluIHRoYXQgY2FzZSwga2VlcCB0aGUgY3VycmVudCB2YWx1ZSBmb3IKLQkJCQkgKiBvcHJvZmlsZV9jcHVfdHlwZS4KLQkJCQkgKi8KLQkJCQlpZiAodC0+b3Byb2ZpbGVfY3B1X3R5cGUgPT0gTlVMTCkKLQkJCQkJdC0+b3Byb2ZpbGVfY3B1X3R5cGUgPSBzLT5vcHJvZmlsZV9jcHVfdHlwZTsKLQkJCX0gZWxzZQotCQkJCSp0ID0gKnM7Ci0JCQkqUFRSUkVMT0MoJmN1cl9jcHVfc3BlYykgPSAmdGhlX2NwdV9zcGVjOwotCi0JCQkvKgotCQkJICogU2V0IHRoZSBiYXNlIHBsYXRmb3JtIHN0cmluZyBvbmNlOyBhc3N1bWVzCi0JCQkgKiB3ZSdyZSBjYWxsZWQgd2l0aCByZWFsIHB2ciBmaXJzdC4KLQkJCSAqLwotCQkJaWYgKCpQVFJSRUxPQygmcG93ZXJwY19iYXNlX3BsYXRmb3JtKSA9PSBOVUxMKQotCQkJCSpQVFJSRUxPQygmcG93ZXJwY19iYXNlX3BsYXRmb3JtKSA9IHQtPnBsYXRmb3JtOwotCi0jaWYgZGVmaW5lZChDT05GSUdfUFBDNjQpIHx8IGRlZmluZWQoQ09ORklHX0JPT0tFKQotCQkJLyogcHBjNjQgYW5kIGJvb2tlIGV4cGVjdCBpZGVudGlmeV9jcHUgdG8gYWxzbyBjYWxsCi0JCQkgKiBzZXR1cF9jcHUgZm9yIHRoYXQgcHJvY2Vzc29yLiBJIHdpbGwgY29uc29saWRhdGUKLQkJCSAqIHRoYXQgYXQgYSBsYXRlciB0aW1lLCBmb3Igbm93LCBqdXN0IHVzZSAjaWZkZWYuCi0JCQkgKiB3ZSBhbHNvIGRvbid0IG5lZWQgdG8gUFRSUkVMT0MgdGhlIGZ1bmN0aW9uIHBvaW50ZXIKLQkJCSAqIG9uIHBwYzY0IGFuZCBib29rZSBhcyB3ZSBhcmUgcnVubmluZyBhdCAwIGluIHJlYWwKLQkJCSAqIG1vZGUgb24gcHBjNjQgYW5kIHJlbG9jX29mZnNldCBpcyBhbHdheXMgMCBvbiBib29rZS4KLQkJCSAqLwotCQkJaWYgKHMtPmNwdV9zZXR1cCkgewotCQkJCXMtPmNwdV9zZXR1cChvZmZzZXQsIHMpOwotCQkJfQotI2VuZGlmIC8qIENPTkZJR19QUEM2NCB8fCBDT05GSUdfQk9PS0UgKi8KKwkJCXNldHVwX2NwdV9zcGVjKG9mZnNldCwgcyk7CiAJCQlyZXR1cm4gczsKIAkJfQorCX0KKwogCUJVRygpOworCiAJcmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2NyYXNoX2R1bXAuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jCmluZGV4IDE5NjcxYWMuLjVmYjY2N2EgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvY3Jhc2hfZHVtcC5jCkBAIC00OCw3ICs0OCw3IEBACiAJICogYnJhbmNoIHRvICJhZGRyIiB3ZSBqdW1wIHRvICgiYWRkciIgKyAzMiBNQikuIEFsdGhvdWdoIGl0IHJlcXVpcmVzCiAJICogdHdvIGluc3RydWN0aW9ucyBpdCBkb2Vzbid0IHJlcXVpcmUgYW55IHJlZ2lzdGVycy4KIAkgKi8KLQlwYXRjaF9pbnN0cnVjdGlvbihwLCBQUENfTk9QX0lOU1RSKTsKKwlwYXRjaF9pbnN0cnVjdGlvbihwLCBQUENfSU5TVF9OT1ApOwogCXBhdGNoX2JyYW5jaCgrK3AsIGFkZHIgKyBQSFlTSUNBTF9TVEFSVCwgMCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZGJlbGwuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZGJlbGwuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNDkzNzM0Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9kYmVsbC5jCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiBBdXRob3I6IEt1bWFyIEdhbGEgPGdhbGFrQGtlcm5lbC5jcmFzaGluZy5vcmc+CisgKgorICogQ29weXJpZ2h0IDIwMDkgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L3RocmVhZHMuaD4KKworI2luY2x1ZGUgPGFzbS9kYmVsbC5oPgorCisjaWZkZWYgQ09ORklHX1NNUAordW5zaWduZWQgbG9uZyBkYmVsbF9zbXBfbWVzc2FnZVtOUl9DUFVTXTsKKwordm9pZCBzbXBfZGJlbGxfbWVzc2FnZV9wYXNzKGludCB0YXJnZXQsIGludCBtc2cpCit7CisJaW50IGk7CisKKwlpZih0YXJnZXQgPCBOUl9DUFVTKSB7CisJCXNldF9iaXQobXNnLCAmZGJlbGxfc21wX21lc3NhZ2VbdGFyZ2V0XSk7CisJCXBwY19tc2dzbmQoUFBDX0RCRUxMLCAwLCB0YXJnZXQpOworCX0KKwllbHNlIGlmKHRhcmdldCA9PSBNU0dfQUxMX0JVVF9TRUxGKSB7CisJCWZvcl9lYWNoX29ubGluZV9jcHUoaSkgeworCQkJaWYgKGkgPT0gc21wX3Byb2Nlc3Nvcl9pZCgpKQorCQkJCWNvbnRpbnVlOworCQkJc2V0X2JpdChtc2csICZkYmVsbF9zbXBfbWVzc2FnZVtpXSk7CisJCQlwcGNfbXNnc25kKFBQQ19EQkVMTCwgMCwgaSk7CisJCX0KKwl9CisJZWxzZSB7IC8qIHRhcmdldCA9PSBNU0dfQUxMICovCisJCWZvcl9lYWNoX29ubGluZV9jcHUoaSkKKwkJCXNldF9iaXQobXNnLCAmZGJlbGxfc21wX21lc3NhZ2VbaV0pOworCQlwcGNfbXNnc25kKFBQQ19EQkVMTCwgUFBDX0RCRUxMX01TR19CUkRDQVNULCAwKTsKKwl9Cit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfMzIuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfMzIuUwppbmRleCA2ZjdlYjdlLi40ZGQzOGYxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzMyLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV8zMi5TCkBAIC02Myw3ICs2Myw3IEBACiAKIAkuZ2xvYmwJY3JpdF90cmFuc2Zlcl90b19oYW5kbGVyCiBjcml0X3RyYW5zZmVyX3RvX2hhbmRsZXI6Ci0jaWZkZWYgQ09ORklHX0ZTTF9CT09LRQorI2lmZGVmIENPTkZJR19QUENfQk9PSzNFX01NVQogCW1mc3ByCXIwLFNQUk5fTUFTMAogCXN0dwlyMCxNQVMwKHIxMSkKIAltZnNwcglyMCxTUFJOX01BUzEKQEAgLTc4LDcgKzc4LDcgQEAKIAltZnNwcglyMCxTUFJOX01BUzcKIAlzdHcJcjAsTUFTNyhyMTEpCiAjZW5kaWYgLyogQ09ORklHX1BIWVNfNjRCSVQgKi8KLSNlbmRpZiAvKiBDT05GSUdfRlNMX0JPT0tFICovCisjZW5kaWYgLyogQ09ORklHX1BQQ19CT09LM0VfTU1VICovCiAjaWZkZWYgQ09ORklHXzQ0eAogCW1mc3ByCXIwLFNQUk5fTU1VQ1IKIAlzdHcJcjAsTU1VQ1IocjExKQpAQCAtOTE0LDcgKzkxNCw3IEBACiAJbXRzcHIJU1BSTl8jI2V4Y19sdmxfc3JyMCxyOTsJCQkJCVwKIAltdHNwcglTUFJOXyMjZXhjX2x2bF9zcnIxLHIxMDsKIAotI2lmIGRlZmluZWQoQ09ORklHX0ZTTF9CT09LRSkKKyNpZiBkZWZpbmVkKENPTkZJR19QUENfQk9PSzNFX01NVSkKICNpZmRlZiBDT05GSUdfUEhZU182NEJJVAogI2RlZmluZQlSRVNUT1JFX01BUzcJCQkJCQkJXAogCWx3eglyMTEsTUFTNyhyMSk7CQkJCQkJXApAQCAtOTU2LDcgKzk1Niw3IEBACiAJbHd6CXIxMCxjcml0X3NycjFAbChyMTApOwogCW10c3ByCVNQUk5fU1JSMCxyOTsKIAltdHNwcglTUFJOX1NSUjEscjEwOwotCVJFVF9GUk9NX0VYQ19MRVZFTChTUFJOX0NTUlIwLCBTUFJOX0NTUlIxLCBSRkNJKQorCVJFVF9GUk9NX0VYQ19MRVZFTChTUFJOX0NTUlIwLCBTUFJOX0NTUlIxLCBQUENfUkZDSSkKICNlbmRpZiAvKiBDT05GSUdfNDB4ICovCiAKICNpZmRlZiBDT05GSUdfQk9PS0UKQEAgLTk2Nyw3ICs5NjcsNyBAQAogCXN0dwlyMTAsS1NQX0xJTUlUKHI5KQogCVJFU1RPUkVfeFNSUihTUlIwLFNSUjEpOwogCVJFU1RPUkVfTU1VX1JFR1M7Ci0JUkVUX0ZST01fRVhDX0xFVkVMKFNQUk5fQ1NSUjAsIFNQUk5fQ1NSUjEsIFJGQ0kpCisJUkVUX0ZST01fRVhDX0xFVkVMKFNQUk5fQ1NSUjAsIFNQUk5fQ1NSUjEsIFBQQ19SRkNJKQogCiAJLmdsb2JsCXJldF9mcm9tX2RlYnVnX2V4YwogcmV0X2Zyb21fZGVidWdfZXhjOgpAQCAtOTgxLDcgKzk4MSw3IEBACiAJUkVTVE9SRV94U1JSKFNSUjAsU1JSMSk7CiAJUkVTVE9SRV94U1JSKENTUlIwLENTUlIxKTsKIAlSRVNUT1JFX01NVV9SRUdTOwotCVJFVF9GUk9NX0VYQ19MRVZFTChTUFJOX0RTUlIwLCBTUFJOX0RTUlIxLCBSRkRJKQorCVJFVF9GUk9NX0VYQ19MRVZFTChTUFJOX0RTUlIwLCBTUFJOX0RTUlIxLCBQUENfUkZESSkKIAogCS5nbG9ibAlyZXRfZnJvbV9tY2hlY2tfZXhjCiByZXRfZnJvbV9tY2hlY2tfZXhjOgpAQCAtOTkyLDcgKzk5Miw3IEBACiAJUkVTVE9SRV94U1JSKENTUlIwLENTUlIxKTsKIAlSRVNUT1JFX3hTUlIoRFNSUjAsRFNSUjEpOwogCVJFU1RPUkVfTU1VX1JFR1M7Ci0JUkVUX0ZST01fRVhDX0xFVkVMKFNQUk5fTUNTUlIwLCBTUFJOX01DU1JSMSwgUkZNQ0kpCisJUkVUX0ZST01fRVhDX0xFVkVMKFNQUk5fTUNTUlIwLCBTUFJOX01DU1JSMSwgUFBDX1JGTUNJKQogI2VuZGlmIC8qIENPTkZJR19CT09LRSAqLwogCiAvKgpAQCAtMTE3Niw1OSArMTE3NiwyNyBAQAogCWJjdHIKIAogX0dMT0JBTChmdHJhY2VfY2FsbGVyKQotCS8qIEJhc2VkIG9mZiBvZiBvYmpkdW1wIG9wdHB1dCBmcm9tIGdsaWJjICovCi0Jc3R3dQlyMSwtNDgocjEpCi0Jc3R3CXIzLCAxMihyMSkKLQlzdHcJcjQsIDE2KHIxKQotCXN0dwlyNSwgMjAocjEpCi0Jc3R3CXI2LCAyNChyMSkKLQltZmxyCXIzCi0JbHd6CXI0LCA1MihyMSkKLQltZmNyCXI1Ci0Jc3R3CXI3LCAyOChyMSkKLQlzdHcJcjgsIDMyKHIxKQotCXN0dwlyOSwgMzYocjEpCi0Jc3R3CXIxMCw0MChyMSkKLQlzdHcJcjMsIDQ0KHIxKQotCXN0dwlyNSwgOChyMSkKKwlNQ09VTlRfU0FWRV9GUkFNRQorCS8qIHIzIGVuZHMgdXAgd2l0aCBsaW5rIHJlZ2lzdGVyICovCiAJc3ViaQlyMywgcjMsIE1DT1VOVF9JTlNOX1NJWkUKIC5nbG9ibCBmdHJhY2VfY2FsbAogZnRyYWNlX2NhbGw6CiAJYmwJZnRyYWNlX3N0dWIKIAlub3AKLQlsd3oJcjYsIDgocjEpCi0JbHd6CXIwLCA0NChyMSkKLQlsd3oJcjMsIDEyKHIxKQotCW10Y3RyCXIwCi0JbHd6CXI0LCAxNihyMSkKLQltdGNyCXI2Ci0JbHd6CXI1LCAyMChyMSkKLQlsd3oJcjYsIDI0KHIxKQotCWx3eglyMCwgNTIocjEpCi0JbHd6CXI3LCAyOChyMSkKLQlsd3oJcjgsIDMyKHIxKQotCW10bHIJcjAKLQlsd3oJcjksIDM2KHIxKQotCWx3eglyMTAsNDAocjEpCi0JYWRkaQlyMSwgcjEsIDQ4CisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorLmdsb2JsIGZ0cmFjZV9ncmFwaF9jYWxsCitmdHJhY2VfZ3JhcGhfY2FsbDoKKwliCWZ0cmFjZV9ncmFwaF9zdHViCitfR0xPQkFMKGZ0cmFjZV9ncmFwaF9zdHViKQorI2VuZGlmCisJTUNPVU5UX1JFU1RPUkVfRlJBTUUKKwkvKiBvbGQgbGluayByZWdpc3RlciBlbmRzIHVwIGluIGN0ciByZWcgKi8KIAliY3RyCiAjZWxzZQogX0dMT0JBTChtY291bnQpCiBfR0xPQkFMKF9tY291bnQpCi0Jc3R3dQlyMSwtNDgocjEpCi0Jc3R3CXIzLCAxMihyMSkKLQlzdHcJcjQsIDE2KHIxKQotCXN0dwlyNSwgMjAocjEpCi0Jc3R3CXI2LCAyNChyMSkKLQltZmxyCXIzCi0JbHd6CXI0LCA1MihyMSkKLQltZmNyCXI1Ci0Jc3R3CXI3LCAyOChyMSkKLQlzdHcJcjgsIDMyKHIxKQotCXN0dwlyOSwgMzYocjEpCi0Jc3R3CXIxMCw0MChyMSkKLQlzdHcJcjMsIDQ0KHIxKQotCXN0dwlyNSwgOChyMSkKKworCU1DT1VOVF9TQVZFX0ZSQU1FCiAKIAlzdWJpCXIzLCByMywgTUNPVU5UX0lOU05fU0laRQogCUxPQURfUkVHX0FERFIocjUsIGZ0cmFjZV90cmFjZV9mdW5jdGlvbikKQEAgLTEyMzYsMjggKzEyMDQsNTUgQEAKIAogCW10Y3RyCXI1CiAJYmN0cmwKLQogCW5vcAogCi0JbHd6CXI2LCA4KHIxKQotCWx3eglyMCwgNDQocjEpCi0JbHd6CXIzLCAxMihyMSkKLQltdGN0cglyMAotCWx3eglyNCwgMTYocjEpCi0JbXRjcglyNgotCWx3eglyNSwgMjAocjEpCi0JbHd6CXI2LCAyNChyMSkKLQlsd3oJcjAsIDUyKHIxKQotCWx3eglyNywgMjgocjEpCi0JbHd6CXI4LCAzMihyMSkKLQltdGxyCXIwCi0JbHd6CXI5LCAzNihyMSkKLQlsd3oJcjEwLDQwKHIxKQotCWFkZGkJcjEsIHIxLCA0OAorI2lmZGVmIENPTkZJR19GVU5DVElPTl9HUkFQSF9UUkFDRVIKKwliCWZ0cmFjZV9ncmFwaF9jYWxsZXIKKyNlbmRpZgorCU1DT1VOVF9SRVNUT1JFX0ZSQU1FCiAJYmN0cgogI2VuZGlmCiAKIF9HTE9CQUwoZnRyYWNlX3N0dWIpCiAJYmxyCiAKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCitfR0xPQkFMKGZ0cmFjZV9ncmFwaF9jYWxsZXIpCisJLyogbG9hZCByNCB3aXRoIGxvY2FsIGFkZHJlc3MgKi8KKwlsd3oJcjQsIDQ0KHIxKQorCXN1YmkJcjQsIHI0LCBNQ09VTlRfSU5TTl9TSVpFCisKKwkvKiBnZXQgdGhlIHBhcmVudCBhZGRyZXNzICovCisJYWRkaQlyMywgcjEsIDUyCisKKwlibAlwcmVwYXJlX2Z0cmFjZV9yZXR1cm4KKwlub3AKKworCU1DT1VOVF9SRVNUT1JFX0ZSQU1FCisJLyogb2xkIGxpbmsgcmVnaXN0ZXIgZW5kcyB1cCBpbiBjdHIgcmVnICovCisJYmN0cgorCitfR0xPQkFMKHJldHVybl90b19oYW5kbGVyKQorCS8qIG5lZWQgdG8gc2F2ZSByZXR1cm4gdmFsdWVzICovCisJc3R3dQlyMSwgLTMyKHIxKQorCXN0dwlyMywgMjAocjEpCisJc3R3CXI0LCAxNihyMSkKKwlzdHcJcjMxLCAxMihyMSkKKwltcglyMzEsIHIxCisKKwlibAlmdHJhY2VfcmV0dXJuX3RvX2hhbmRsZXIKKwlub3AKKworCS8qIHJldHVybiB2YWx1ZSBoYXMgcmVhbCByZXR1cm4gYWRkcmVzcyAqLworCW10bHIJcjMKKworCWx3eglyMywgMjAocjEpCisJbHd6CXI0LCAxNihyMSkKKwlsd3oJcjMxLDEyKHIxKQorCWx3eglyMSwgMChyMSkKKworCS8qIEp1bXAgYmFjayB0byByZWFsIHJldHVybiBhZGRyZXNzICovCisJYmxyCisjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLworCiAjZW5kaWYgLyogQ09ORklHX01DT1VOVCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9lbnRyeV82NC5TCmluZGV4IDM4M2VkNmUuLmFiZmMzMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZW50cnlfNjQuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2VudHJ5XzY0LlMKQEAgLTkwOCw2ICs5MDgsMTIgQEAKIGZ0cmFjZV9jYWxsOgogCWJsCWZ0cmFjZV9zdHViCiAJbm9wCisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorLmdsb2JsIGZ0cmFjZV9ncmFwaF9jYWxsCitmdHJhY2VfZ3JhcGhfY2FsbDoKKwliCWZ0cmFjZV9ncmFwaF9zdHViCitfR0xPQkFMKGZ0cmFjZV9ncmFwaF9zdHViKQorI2VuZGlmCiAJbGQJcjAsIDEyOChyMSkKIAltdGxyCXIwCiAJYWRkaQlyMSwgcjEsIDExMgpAQCAtOTMxLDEzICs5MzcsOTAgQEAKIAlsZAlyNSwwKHI1KQogCW10Y3RyCXI1CiAJYmN0cmwKLQogCW5vcAorCisKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisJYglmdHJhY2VfZ3JhcGhfY2FsbGVyCisjZW5kaWYKIAlsZAlyMCwgMTI4KHIxKQogCW10bHIJcjAKIAlhZGRpCXIxLCByMSwgMTEyCiBfR0xPQkFMKGZ0cmFjZV9zdHViKQogCWJscgogCi0jZW5kaWYKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqLworCisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorX0dMT0JBTChmdHJhY2VfZ3JhcGhfY2FsbGVyKQorCS8qIGxvYWQgcjQgd2l0aCBsb2NhbCBhZGRyZXNzICovCisJbGQJcjQsIDEyOChyMSkKKwlzdWJpCXI0LCByNCwgTUNPVU5UX0lOU05fU0laRQorCisJLyogZ2V0IHRoZSBwYXJlbnQgYWRkcmVzcyAqLworCWxkCXIxMSwgMTEyKHIxKQorCWFkZGkJcjMsIHIxMSwgMTYKKworCWJsCS5wcmVwYXJlX2Z0cmFjZV9yZXR1cm4KKwlub3AKKworCWxkCXIwLCAxMjgocjEpCisJbXRscglyMAorCWFkZGkJcjEsIHIxLCAxMTIKKwlibHIKKworX0dMT0JBTChyZXR1cm5fdG9faGFuZGxlcikKKwkvKiBuZWVkIHRvIHNhdmUgcmV0dXJuIHZhbHVlcyAqLworCXN0ZAlyNCwgIC0yNChyMSkKKwlzdGQJcjMsICAtMTYocjEpCisJc3RkCXIzMSwgLTgocjEpCisJbXIJcjMxLCByMQorCXN0ZHUJcjEsIC0xMTIocjEpCisKKwlibAkuZnRyYWNlX3JldHVybl90b19oYW5kbGVyCisJbm9wCisKKwkvKiByZXR1cm4gdmFsdWUgaGFzIHJlYWwgcmV0dXJuIGFkZHJlc3MgKi8KKwltdGxyCXIzCisKKwlsZAlyMSwgMChyMSkKKwlsZAlyNCwgIC0yNChyMSkKKwlsZAlyMywgIC0xNihyMSkKKwlsZAlyMzEsIC04KHIxKQorCisJLyogSnVtcCBiYWNrIHRvIHJlYWwgcmV0dXJuIGFkZHJlc3MgKi8KKwlibHIKKworX0dMT0JBTChtb2RfcmV0dXJuX3RvX2hhbmRsZXIpCisJLyogbmVlZCB0byBzYXZlIHJldHVybiB2YWx1ZXMgKi8KKwlzdGQJcjQsICAtMzIocjEpCisJc3RkCXIzLCAgLTI0KHIxKQorCS8qIHNhdmUgVE9DICovCisJc3RkCXIyLCAgLTE2KHIxKQorCXN0ZAlyMzEsIC04KHIxKQorCW1yCXIzMSwgcjEKKwlzdGR1CXIxLCAtMTEyKHIxKQorCisJLyoKKwkgKiBXZSBhcmUgaW4gYSBtb2R1bGUgdXNpbmcgdGhlIG1vZHVsZSdzIFRPQy4KKwkgKiBTd2l0Y2ggdG8gb3VyIFRPQyB0byBydW4gaW5zaWRlIHRoZSBjb3JlIGtlcm5lbC4KKwkgKi8KKwlMT0FEX1JFR19JTU1FRElBVEUocjQsZnRyYWNlX3JldHVybl90b19oYW5kbGVyKQorCWxkCXIyLCA4KHI0KQorCisJYmwJLmZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlcgorCW5vcAorCisJLyogcmV0dXJuIHZhbHVlIGhhcyByZWFsIHJldHVybiBhZGRyZXNzICovCisJbXRscglyMworCisJbGQJcjEsIDAocjEpCisJbGQJcjQsICAtMzIocjEpCisJbGQJcjMsICAtMjQocjEpCisJbGQJcjIsICAtMTYocjEpCisJbGQJcjMxLCAtOChyMSkKKworCS8qIEp1bXAgYmFjayB0byByZWFsIHJldHVybiBhZGRyZXNzICovCisJYmxyCisjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLworI2VuZGlmIC8qIENPTkZJR19GVU5DVElPTl9UUkFDRVIgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2Z0cmFjZS5jCmluZGV4IDYwYzYwY2MuLjViNWQxNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvZnRyYWNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9mdHJhY2UuYwpAQCAtNSw2ICs1LDkgQEAKICAqCiAgKiBUaGFua3MgZ29lcyBvdXQgdG8gUC5BLiBTZW1pLCBJbmMgZm9yIHN1cHBseWluZyBtZSB3aXRoIGEgUFBDNjQgYm94LgogICoKKyAqIEFkZGVkIGZ1bmN0aW9uIGdyYXBoIHRyYWNlciBjb2RlLCB0YWtlbiBmcm9tIHg4NiB0aGF0IHdhcyB3cml0dGVuCisgKiBieSBGcmVkZXJpYyBXZWlzYmVja2VyLCBhbmQgcG9ydGVkIHRvIFBQQyBieSBTdGV2ZW4gUm9zdGVkdC4KKyAqCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CkBAIC0yMCwxNCArMjMsNiBAQAogI2luY2x1ZGUgPGFzbS9jb2RlLXBhdGNoaW5nLmg+CiAjaW5jbHVkZSA8YXNtL2Z0cmFjZS5oPgogCi0jaWYgMAotI2RlZmluZSBERUJVR1AgcHJpbnRrCi0jZWxzZQotI2RlZmluZSBERUJVR1AoZm10ICwgLi4uKQlkbyB7IH0gd2hpbGUgKDApCi0jZW5kaWYKLQotc3RhdGljIHVuc2lnbmVkIGludCBmdHJhY2Vfbm9wID0gUFBDX05PUF9JTlNUUjsKLQogI2lmZGVmIENPTkZJR19QUEMzMgogIyBkZWZpbmUgR0VUX0FERFIoYWRkcikgYWRkcgogI2Vsc2UKQEAgLTM1LDM3ICszMCwyMyBAQAogIyBkZWZpbmUgR0VUX0FERFIoYWRkcikgKCoodW5zaWduZWQgbG9uZyAqKWFkZHIpCiAjZW5kaWYKIAotCi1zdGF0aWMgdW5zaWduZWQgaW50IGZ0cmFjZV9jYWxjX29mZnNldChsb25nIGlwLCBsb25nIGFkZHIpCisjaWZkZWYgQ09ORklHX0RZTkFNSUNfRlRSQUNFCitzdGF0aWMgdW5zaWduZWQgaW50IGZ0cmFjZV9ub3BfcmVwbGFjZSh2b2lkKQogewotCXJldHVybiAoaW50KShhZGRyIC0gaXApOworCXJldHVybiBQUENfSU5TVF9OT1A7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyICpmdHJhY2Vfbm9wX3JlcGxhY2Uodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQKK2Z0cmFjZV9jYWxsX3JlcGxhY2UodW5zaWduZWQgbG9uZyBpcCwgdW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbGluaykKIHsKLQlyZXR1cm4gKGNoYXIgKikmZnRyYWNlX25vcDsKLX0KKwl1bnNpZ25lZCBpbnQgb3A7CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyICpmdHJhY2VfY2FsbF9yZXBsYWNlKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlzdGF0aWMgdW5zaWduZWQgaW50IG9wOwotCi0JLyoKLQkgKiBJdCB3b3VsZCBiZSBuaWNlIHRvIGp1c3QgdXNlIGNyZWF0ZV9mdW5jdGlvbl9jYWxsLCBidXQgdGhhdCB3aWxsCi0JICogdXBkYXRlIHRoZSBjb2RlIGl0c2VsZi4gSGVyZSB3ZSBuZWVkIHRvIGp1c3QgcmV0dXJuIHRoZQotCSAqIGluc3RydWN0aW9uIHRoYXQgaXMgZ29pbmcgdG8gYmUgbW9kaWZpZWQsIHdpdGhvdXQgbW9kaWZ5aW5nIHRoZQotCSAqIGNvZGUuCi0JICovCiAJYWRkciA9IEdFVF9BRERSKGFkZHIpOwogCi0JLyogU2V0IHRvICJibCBhZGRyIiAqLwotCW9wID0gMHg0ODAwMDAwMSB8IChmdHJhY2VfY2FsY19vZmZzZXQoaXAsIGFkZHIpICYgMHgwM2ZmZmZmYyk7CisJLyogaWYgKGxpbmspIHNldCBvcCB0byAnYmwnIGVsc2UgJ2InICovCisJb3AgPSBjcmVhdGVfYnJhbmNoKCh1bnNpZ25lZCBpbnQgKilpcCwgYWRkciwgbGluayA/IDEgOiAwKTsKIAotCS8qCi0JICogTm8gbG9ja2luZyBuZWVkZWQsIHRoaXMgbXVzdCBiZSBjYWxsZWQgdmlhIGtzdG9wX21hY2hpbmUKLQkgKiB3aGljaCBpbiBlc3NlbmNlIGlzIGxpa2UgcnVubmluZyBvbiBhIHVuaXByb2Nlc3NvciBtYWNoaW5lLgotCSAqLwotCXJldHVybiAodW5zaWduZWQgY2hhciAqKSZvcDsKKwlyZXR1cm4gb3A7CiB9CiAKICNpZmRlZiBDT05GSUdfUFBDNjQKQEAgLTc3LDEwICs1OCw5IEBACiAjZW5kaWYKIAogc3RhdGljIGludAotZnRyYWNlX21vZGlmeV9jb2RlKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGNoYXIgKm9sZF9jb2RlLAotCQkgICB1bnNpZ25lZCBjaGFyICpuZXdfY29kZSkKK2Z0cmFjZV9tb2RpZnlfY29kZSh1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBpbnQgb2xkLCB1bnNpZ25lZCBpbnQgbmV3KQogewotCXVuc2lnbmVkIGNoYXIgcmVwbGFjZWRbTUNPVU5UX0lOU05fU0laRV07CisJdW5zaWduZWQgaW50IHJlcGxhY2VkOwogCiAJLyoKIAkgKiBOb3RlOiBEdWUgdG8gbW9kdWxlcyBhbmQgX19pbml0LCBjb2RlIGNhbgpAQCAtOTMsMTUgKzczLDE1IEBACiAJICovCiAKIAkvKiByZWFkIHRoZSB0ZXh0IHdlIHdhbnQgdG8gbW9kaWZ5ICovCi0JaWYgKHByb2JlX2tlcm5lbF9yZWFkKHJlcGxhY2VkLCAodm9pZCAqKWlwLCBNQ09VTlRfSU5TTl9TSVpFKSkKKwlpZiAocHJvYmVfa2VybmVsX3JlYWQoJnJlcGxhY2VkLCAodm9pZCAqKWlwLCBNQ09VTlRfSU5TTl9TSVpFKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAKIAkvKiBNYWtlIHN1cmUgaXQgaXMgd2hhdCB3ZSBleHBlY3QgaXQgdG8gYmUgKi8KLQlpZiAobWVtY21wKHJlcGxhY2VkLCBvbGRfY29kZSwgTUNPVU5UX0lOU05fU0laRSkgIT0gMCkKKwlpZiAocmVwbGFjZWQgIT0gb2xkKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIHJlcGxhY2UgdGhlIHRleHQgd2l0aCB0aGUgbmV3IHRleHQgKi8KLQlpZiAocHJvYmVfa2VybmVsX3dyaXRlKCh2b2lkICopaXAsIG5ld19jb2RlLCBNQ09VTlRfSU5TTl9TSVpFKSkKKwlpZiAocHJvYmVfa2VybmVsX3dyaXRlKCh2b2lkICopaXAsICZuZXcsIE1DT1VOVF9JTlNOX1NJWkUpKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJZmx1c2hfaWNhY2hlX3JhbmdlKGlwLCBpcCArIDgpOwpAQCAtMTE5LDYgKzk5LDggQEAKIAlyZXR1cm4gY3JlYXRlX2JyYW5jaCgodW5zaWduZWQgaW50ICopaXAsIGFkZHIsIDApOwogfQogCisjaWZkZWYgQ09ORklHX01PRFVMRVMKKwogc3RhdGljIGludCBpc19ibF9vcCh1bnNpZ25lZCBpbnQgb3ApCiB7CiAJcmV0dXJuIChvcCAmIDB4ZmMwMDAwMDMpID09IDB4NDgwMDAwMDE7CkBAIC0xNzUsNyArMTU3LDcgQEAKIAkgKiAweGU4LCAweDRjLCAweDAwLCAweDI4LCAgICBsZCAgICAgIHIyLDQwKHIxMikKIAkgKi8KIAotCURFQlVHUCgiaXA6JWx4IGp1bXBzIHRvICVseCByMjogJWx4IiwgaXAsIHRyYW1wLCBtb2QtPmFyY2gudG9jKTsKKwlwcl9kZWJ1ZygiaXA6JWx4IGp1bXBzIHRvICVseCByMjogJWx4IiwgaXAsIHRyYW1wLCBtb2QtPmFyY2gudG9jKTsKIAogCS8qIEZpbmQgd2hlcmUgdGhlIHRyYW1wb2xpbmUganVtcHMgdG8gKi8KIAlpZiAocHJvYmVfa2VybmVsX3JlYWQoam1wLCAodm9pZCAqKXRyYW1wLCBzaXplb2Yoam1wKSkpIHsKQEAgLTE4Myw3ICsxNjUsNyBAQAogCQlyZXR1cm4gLUVGQVVMVDsKIAl9CiAKLQlERUJVR1AoIiAlMDh4ICUwOHgiLCBqbXBbMF0sIGptcFsxXSk7CisJcHJfZGVidWcoIiAlMDh4ICUwOHgiLCBqbXBbMF0sIGptcFsxXSk7CiAKIAkvKiB2ZXJpZnkgdGhhdCB0aGlzIGlzIHdoYXQgd2UgZXhwZWN0IGl0IHRvIGJlICovCiAJaWYgKCgoam1wWzBdICYgMHhmZmZmMDAwMCkgIT0gMHgzZDgyMDAwMCkgfHwKQEAgLTE5OSwxOCArMTgxLDE4IEBACiAJb2Zmc2V0ID0gKCh1bnNpZ25lZCkoKHVuc2lnbmVkIHNob3J0KWptcFswXSkgPDwgMTYpICsKIAkJKGludCkoKHNob3J0KWptcFsxXSk7CiAKLQlERUJVR1AoIiAleCAiLCBvZmZzZXQpOworCXByX2RlYnVnKCIgJXggIiwgb2Zmc2V0KTsKIAogCS8qIGdldCB0aGUgYWRkcmVzcyB0aGlzIGp1bXBzIHRvbyAqLwogCXRyYW1wID0gbW9kLT5hcmNoLnRvYyArIG9mZnNldCArIDMyOwotCURFQlVHUCgidG9jOiAlbHgiLCB0cmFtcCk7CisJcHJfZGVidWcoInRvYzogJWx4IiwgdHJhbXApOwogCiAJaWYgKHByb2JlX2tlcm5lbF9yZWFkKGptcCwgKHZvaWQgKil0cmFtcCwgOCkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJGYWlsZWQgdG8gcmVhZCAlbHhcbiIsIHRyYW1wKTsKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JREVCVUdQKCIgJTA4eCAlMDh4XG4iLCBqbXBbMF0sIGptcFsxXSk7CisJcHJfZGVidWcoIiAlMDh4ICUwOHhcbiIsIGptcFswXSwgam1wWzFdKTsKIAogCXB0ciA9ICgodW5zaWduZWQgbG9uZylqbXBbMF0gPDwgMzIpICsgam1wWzFdOwogCkBAIC0yODcsNyArMjY5LDcgQEAKIAkgKiAgMHg0ZSwgMHg4MCwgMHgwNCwgMHgyMCAgYmN0cgogCSAqLwogCi0JREVCVUdQKCJpcDolbHgganVtcHMgdG8gJWx4IiwgaXAsIHRyYW1wKTsKKwlwcl9kZWJ1ZygiaXA6JWx4IGp1bXBzIHRvICVseCIsIGlwLCB0cmFtcCk7CiAKIAkvKiBGaW5kIHdoZXJlIHRoZSB0cmFtcG9saW5lIGp1bXBzIHRvICovCiAJaWYgKHByb2JlX2tlcm5lbF9yZWFkKGptcCwgKHZvaWQgKil0cmFtcCwgc2l6ZW9mKGptcCkpKSB7CkBAIC0yOTUsNyArMjc3LDcgQEAKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJfQogCi0JREVCVUdQKCIgJTA4eCAlMDh4ICIsIGptcFswXSwgam1wWzFdKTsKKwlwcl9kZWJ1ZygiICUwOHggJTA4eCAiLCBqbXBbMF0sIGptcFsxXSk7CiAKIAkvKiB2ZXJpZnkgdGhhdCB0aGlzIGlzIHdoYXQgd2UgZXhwZWN0IGl0IHRvIGJlICovCiAJaWYgKCgoam1wWzBdICYgMHhmZmZmMDAwMCkgIT0gMHgzZDYwMDAwMCkgfHwKQEAgLTMxMSw3ICsyOTMsNyBAQAogCWlmICh0cmFtcCAmIDB4ODAwMCkKIAkJdHJhbXAgLT0gMHgxMDAwMDsKIAotCURFQlVHUCgiICV4ICIsIHRyYW1wKTsKKwlwcl9kZWJ1ZygiICV4ICIsIHRyYW1wKTsKIAogCWlmICh0cmFtcCAhPSBhZGRyKSB7CiAJCXByaW50ayhLRVJOX0VSUgpAQCAtMzIwLDcgKzMwMiw3IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCW9wID0gUFBDX05PUF9JTlNUUjsKKwlvcCA9IFBQQ19JTlNUX05PUDsKIAogCWlmIChwcm9iZV9rZXJuZWxfd3JpdGUoKHZvaWQgKilpcCwgJm9wLCBNQ09VTlRfSU5TTl9TSVpFKSkKIAkJcmV0dXJuIC1FUEVSTTsKQEAgLTMzMCwxMiArMzEyLDEzIEBACiAJcmV0dXJuIDA7CiB9CiAjZW5kaWYgLyogUFBDNjQgKi8KKyNlbmRpZiAvKiBDT05GSUdfTU9EVUxFUyAqLwogCiBpbnQgZnRyYWNlX21ha2Vfbm9wKHN0cnVjdCBtb2R1bGUgKm1vZCwKIAkJICAgIHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQl1bnNpZ25lZCBjaGFyICpvbGQsICpuZXc7CiAJdW5zaWduZWQgbG9uZyBpcCA9IHJlYy0+aXA7CisJdW5zaWduZWQgaW50IG9sZCwgbmV3OwogCiAJLyoKIAkgKiBJZiB0aGUgY2FsbGluZyBhZGRyZXNzIGlzIG1vcmUgdGhhdCAyNCBiaXRzIGF3YXksCkBAIC0zNDQsMTEgKzMyNywxMiBAQAogCSAqLwogCWlmICh0ZXN0XzI0Yml0X2FkZHIoaXAsIGFkZHIpKSB7CiAJCS8qIHdpdGhpbiByYW5nZSAqLwotCQlvbGQgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCBhZGRyKTsKKwkJb2xkID0gZnRyYWNlX2NhbGxfcmVwbGFjZShpcCwgYWRkciwgMSk7CiAJCW5ldyA9IGZ0cmFjZV9ub3BfcmVwbGFjZSgpOwogCQlyZXR1cm4gZnRyYWNlX21vZGlmeV9jb2RlKGlwLCBvbGQsIG5ldyk7CiAJfQogCisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAkvKgogCSAqIE91dCBvZiByYW5nZSBqdW1wcyBhcmUgY2FsbGVkIGZyb20gbW9kdWxlcy4KIAkgKiBXZSBzaG91bGQgZWl0aGVyIGFscmVhZHkgaGF2ZSBhIHBvaW50ZXIgdG8gdGhlIG1vZHVsZQpAQCAtMzczLDkgKzM1NywxMyBAQAogCQltb2QgPSByZWMtPmFyY2gubW9kOwogCiAJcmV0dXJuIF9fZnRyYWNlX21ha2Vfbm9wKG1vZCwgcmVjLCBhZGRyKTsKLQorI2Vsc2UKKwkvKiBXZSBzaG91bGQgbm90IGdldCBoZXJlIHdpdGhvdXQgbW9kdWxlcyAqLworCXJldHVybiAtRUlOVkFMOworI2VuZGlmIC8qIENPTkZJR19NT0RVTEVTICovCiB9CiAKKyNpZmRlZiBDT05GSUdfTU9EVUxFUwogI2lmZGVmIENPTkZJR19QUEM2NAogc3RhdGljIGludAogX19mdHJhY2VfbWFrZV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcikKQEAgLTM5Miw3ICszODAsNyBAQAogCSAqICBiICs4OyBsZCByMiw0MChyMSkKIAkgKi8KIAlpZiAoKChvcFswXSAhPSAweDQ4MDAwMDA4KSB8fCAob3BbMV0gIT0gMHhlODQxMDAyOCkpICYmCi0JICAgICgob3BbMF0gIT0gUFBDX05PUF9JTlNUUikgfHwgKG9wWzFdICE9IFBQQ19OT1BfSU5TVFIpKSkgeworCSAgICAoKG9wWzBdICE9IFBQQ19JTlNUX05PUCkgfHwgKG9wWzFdICE9IFBQQ19JTlNUX05PUCkpKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRXhwZWN0ZWQgTk9QcyBidXQgaGF2ZSAleCAleFxuIiwgb3BbMF0sIG9wWzFdKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtNDE0LDcgKzQwMiw3IEBACiAJLyogbGQgcjIsNDAocjEpICovCiAJb3BbMV0gPSAweGU4NDEwMDI4OwogCi0JREVCVUdQKCJ3cml0ZSB0byAlbHhcbiIsIHJlYy0+aXApOworCXByX2RlYnVnKCJ3cml0ZSB0byAlbHhcbiIsIHJlYy0+aXApOwogCiAJaWYgKHByb2JlX2tlcm5lbF93cml0ZSgodm9pZCAqKWlwLCBvcCwgTUNPVU5UX0lOU05fU0laRSAqIDIpKQogCQlyZXR1cm4gLUVQRVJNOwpAQCAtNDM1LDcgKzQyMyw3IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJLyogSXQgc2hvdWxkIGJlIHBvaW50aW5nIHRvIGEgbm9wICovCi0JaWYgKG9wICE9IFBQQ19OT1BfSU5TVFIpIHsKKwlpZiAob3AgIT0gUFBDX0lOU1RfTk9QKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiRXhwZWN0ZWQgTk9QIGJ1dCBoYXZlICV4XG4iLCBvcCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTQ1NCw3ICs0NDIsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlERUJVR1AoIndyaXRlIHRvICVseFxuIiwgcmVjLT5pcCk7CisJcHJfZGVidWcoIndyaXRlIHRvICVseFxuIiwgcmVjLT5pcCk7CiAKIAlpZiAocHJvYmVfa2VybmVsX3dyaXRlKCh2b2lkICopaXAsICZvcCwgTUNPVU5UX0lOU05fU0laRSkpCiAJCXJldHVybiAtRVBFUk07CkBAIC00NjQsMTEgKzQ1MiwxMiBAQAogCXJldHVybiAwOwogfQogI2VuZGlmIC8qIENPTkZJR19QUEM2NCAqLworI2VuZGlmIC8qIENPTkZJR19NT0RVTEVTICovCiAKIGludCBmdHJhY2VfbWFrZV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKLQl1bnNpZ25lZCBjaGFyICpvbGQsICpuZXc7CiAJdW5zaWduZWQgbG9uZyBpcCA9IHJlYy0+aXA7CisJdW5zaWduZWQgaW50IG9sZCwgbmV3OwogCiAJLyoKIAkgKiBJZiB0aGUgY2FsbGluZyBhZGRyZXNzIGlzIG1vcmUgdGhhdCAyNCBiaXRzIGF3YXksCkBAIC00NzgsMTAgKzQ2NywxMSBAQAogCWlmICh0ZXN0XzI0Yml0X2FkZHIoaXAsIGFkZHIpKSB7CiAJCS8qIHdpdGhpbiByYW5nZSAqLwogCQlvbGQgPSBmdHJhY2Vfbm9wX3JlcGxhY2UoKTsKLQkJbmV3ID0gZnRyYWNlX2NhbGxfcmVwbGFjZShpcCwgYWRkcik7CisJCW5ldyA9IGZ0cmFjZV9jYWxsX3JlcGxhY2UoaXAsIGFkZHIsIDEpOwogCQlyZXR1cm4gZnRyYWNlX21vZGlmeV9jb2RlKGlwLCBvbGQsIG5ldyk7CiAJfQogCisjaWZkZWYgQ09ORklHX01PRFVMRVMKIAkvKgogCSAqIE91dCBvZiByYW5nZSBqdW1wcyBhcmUgY2FsbGVkIGZyb20gbW9kdWxlcy4KIAkgKiBCZWluZyB0aGF0IHdlIGFyZSBjb252ZXJ0aW5nIGZyb20gbm9wLCBpdCBoYWQgYmV0dGVyCkBAIC00OTMsMTYgKzQ4MywyMCBAQAogCX0KIAogCXJldHVybiBfX2Z0cmFjZV9tYWtlX2NhbGwocmVjLCBhZGRyKTsKKyNlbHNlCisJLyogV2Ugc2hvdWxkIG5vdCBnZXQgaGVyZSB3aXRob3V0IG1vZHVsZXMgKi8KKwlyZXR1cm4gLUVJTlZBTDsKKyNlbmRpZiAvKiBDT05GSUdfTU9EVUxFUyAqLwogfQogCiBpbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpCiB7CiAJdW5zaWduZWQgbG9uZyBpcCA9ICh1bnNpZ25lZCBsb25nKSgmZnRyYWNlX2NhbGwpOwotCXVuc2lnbmVkIGNoYXIgb2xkW01DT1VOVF9JTlNOX1NJWkVdLCAqbmV3OworCXVuc2lnbmVkIGludCBvbGQsIG5ldzsKIAlpbnQgcmV0OwogCi0JbWVtY3B5KG9sZCwgJmZ0cmFjZV9jYWxsLCBNQ09VTlRfSU5TTl9TSVpFKTsKLQluZXcgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCAodW5zaWduZWQgbG9uZylmdW5jKTsKKwlvbGQgPSAqKHVuc2lnbmVkIGludCAqKSZmdHJhY2VfY2FsbDsKKwluZXcgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCAodW5zaWduZWQgbG9uZylmdW5jLCAxKTsKIAlyZXQgPSBmdHJhY2VfbW9kaWZ5X2NvZGUoaXAsIG9sZCwgbmV3KTsKIAogCXJldHVybiByZXQ7CkBAIC01MTcsMyArNTExLDExNSBAQAogCiAJcmV0dXJuIDA7CiB9CisjZW5kaWYgLyogQ09ORklHX0RZTkFNSUNfRlRSQUNFICovCisKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisKKyNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UKK2V4dGVybiB2b2lkIGZ0cmFjZV9ncmFwaF9jYWxsKHZvaWQpOworZXh0ZXJuIHZvaWQgZnRyYWNlX2dyYXBoX3N0dWIodm9pZCk7CisKK2ludCBmdHJhY2VfZW5hYmxlX2Z0cmFjZV9ncmFwaF9jYWxsZXIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGlwID0gKHVuc2lnbmVkIGxvbmcpKCZmdHJhY2VfZ3JhcGhfY2FsbCk7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpKCZmdHJhY2VfZ3JhcGhfY2FsbGVyKTsKKwl1bnNpZ25lZCBsb25nIHN0dWIgPSAodW5zaWduZWQgbG9uZykoJmZ0cmFjZV9ncmFwaF9zdHViKTsKKwl1bnNpZ25lZCBpbnQgb2xkLCBuZXc7CisKKwlvbGQgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCBzdHViLCAwKTsKKwluZXcgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCBhZGRyLCAwKTsKKworCXJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUoaXAsIG9sZCwgbmV3KTsKK30KKworaW50IGZ0cmFjZV9kaXNhYmxlX2Z0cmFjZV9ncmFwaF9jYWxsZXIodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIGlwID0gKHVuc2lnbmVkIGxvbmcpKCZmdHJhY2VfZ3JhcGhfY2FsbCk7CisJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpKCZmdHJhY2VfZ3JhcGhfY2FsbGVyKTsKKwl1bnNpZ25lZCBsb25nIHN0dWIgPSAodW5zaWduZWQgbG9uZykoJmZ0cmFjZV9ncmFwaF9zdHViKTsKKwl1bnNpZ25lZCBpbnQgb2xkLCBuZXc7CisKKwlvbGQgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCBhZGRyLCAwKTsKKwluZXcgPSBmdHJhY2VfY2FsbF9yZXBsYWNlKGlwLCBzdHViLCAwKTsKKworCXJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUoaXAsIG9sZCwgbmV3KTsKK30KKyNlbmRpZiAvKiBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KKworI2lmZGVmIENPTkZJR19QUEM2NAorZXh0ZXJuIHZvaWQgbW9kX3JldHVybl90b19oYW5kbGVyKHZvaWQpOworI2VuZGlmCisKKy8qCisgKiBIb29rIHRoZSByZXR1cm4gYWRkcmVzcyBhbmQgcHVzaCBpdCBpbiB0aGUgc3RhY2sgb2YgcmV0dXJuIGFkZHJzCisgKiBpbiBjdXJyZW50IHRocmVhZCBpbmZvLgorICovCit2b2lkIHByZXBhcmVfZnRyYWNlX3JldHVybih1bnNpZ25lZCBsb25nICpwYXJlbnQsIHVuc2lnbmVkIGxvbmcgc2VsZl9hZGRyKQoreworCXVuc2lnbmVkIGxvbmcgb2xkOworCXVuc2lnbmVkIGxvbmcgbG9uZyBjYWxsdGltZTsKKwlpbnQgZmF1bHRlZDsKKwlzdHJ1Y3QgZnRyYWNlX2dyYXBoX2VudCB0cmFjZTsKKwl1bnNpZ25lZCBsb25nIHJldHVybl9ob29rZXIgPSAodW5zaWduZWQgbG9uZykmcmV0dXJuX3RvX2hhbmRsZXI7CisKKwlpZiAodW5saWtlbHkoYXRvbWljX3JlYWQoJmN1cnJlbnQtPnRyYWNpbmdfZ3JhcGhfcGF1c2UpKSkKKwkJcmV0dXJuOworCisjaWYgQ09ORklHX1BQQzY0CisJLyogbm9uIGNvcmUga2VybmVsIGNvZGUgbmVlZHMgdG8gc2F2ZSBhbmQgcmVzdG9yZSB0aGUgVE9DICovCisJaWYgKFJFR0lPTl9JRChzZWxmX2FkZHIpICE9IEtFUk5FTF9SRUdJT05fSUQpCisJCXJldHVybl9ob29rZXIgPSAodW5zaWduZWQgbG9uZykmbW9kX3JldHVybl90b19oYW5kbGVyOworI2VuZGlmCisKKwlyZXR1cm5faG9va2VyID0gR0VUX0FERFIocmV0dXJuX2hvb2tlcik7CisKKwkvKgorCSAqIFByb3RlY3QgYWdhaW5zdCBmYXVsdCwgZXZlbiBpZiBpdCBzaG91bGRuJ3QKKwkgKiBoYXBwZW4uIFRoaXMgdG9vbCBpcyB0b28gbXVjaCBpbnRydXNpdmUgdG8KKwkgKiBpZ25vcmUgc3VjaCBhIHByb3RlY3Rpb24uCisJICovCisJYXNtIHZvbGF0aWxlKAorCQkiMTogIiBQUENfTEwgIiVbb2xkXSwgMCglW3BhcmVudF0pXG4iCisJCSIyOiAiIFBQQ19TVEwgIiVbcmV0dXJuX2hvb2tlcl0sIDAoJVtwYXJlbnRdKVxuIgorCQkiICAgbGkgJVtmYXVsdGVkXSwgMFxuIgorCQkiMzpcbiIKKworCQkiLnNlY3Rpb24gLmZpeHVwLCBcImF4XCJcbiIKKwkJIjQ6IGxpICVbZmF1bHRlZF0sIDFcbiIKKwkJIiAgIGIgM2JcbiIKKwkJIi5wcmV2aW91c1xuIgorCisJCSIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iCisJCQlQUENfTE9OR19BTElHTiAiXG4iCisJCQlQUENfTE9ORyAiMWIsNGJcbiIKKwkJCVBQQ19MT05HICIyYiw0YlxuIgorCQkiLnByZXZpb3VzIgorCisJCTogW29sZF0gIj1yIiAob2xkKSwgW2ZhdWx0ZWRdICI9ciIgKGZhdWx0ZWQpCisJCTogW3BhcmVudF0gInIiIChwYXJlbnQpLCBbcmV0dXJuX2hvb2tlcl0gInIiIChyZXR1cm5faG9va2VyKQorCQk6ICJtZW1vcnkiCisJKTsKKworCWlmICh1bmxpa2VseShmYXVsdGVkKSkgeworCQlmdHJhY2VfZ3JhcGhfc3RvcCgpOworCQlXQVJOX09OKDEpOworCQlyZXR1cm47CisJfQorCisJY2FsbHRpbWUgPSBjcHVfY2xvY2socmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CisKKwlpZiAoZnRyYWNlX3B1c2hfcmV0dXJuX3RyYWNlKG9sZCwgY2FsbHRpbWUsCisJCQkJc2VsZl9hZGRyLCAmdHJhY2UuZGVwdGgpID09IC1FQlVTWSkgeworCQkqcGFyZW50ID0gb2xkOworCQlyZXR1cm47CisJfQorCisJdHJhY2UuZnVuYyA9IHNlbGZfYWRkcjsKKworCS8qIE9ubHkgdHJhY2UgaWYgdGhlIGNhbGxpbmcgZnVuY3Rpb24gZXhwZWN0cyB0byAqLworCWlmICghZnRyYWNlX2dyYXBoX2VudHJ5KCZ0cmFjZSkpIHsKKwkJY3VycmVudC0+Y3Vycl9yZXRfc3RhY2stLTsKKwkJKnBhcmVudCA9IG9sZDsKKwl9Cit9CisjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzMyLlMgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUwppbmRleCBkNzk0YTYzLi41NGU2OGMxIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfMzIuUwpAQCAtMTA4LDE4ICsxMDgsMjEgQEAKICAqIGJlY2F1c2UgT0YgbWF5IGhhdmUgSS9PIGRldmljZXMgbWFwcGVkIGludG8gdGhhdCBhcmVhCiAgKiAocGFydGljdWxhcmx5IG9uIENIUlApLgogICovCi0jaWZkZWYgQ09ORklHX1BQQ19NVUxUSVBMQVRGT1JNCiAJY21wd2kJMCxyNSwwCiAJYmVxCTFmCiAKKyNpZmRlZiBDT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORQogCS8qIGZpbmQgb3V0IHdoZXJlIHdlIGFyZSBub3cgKi8KIAliY2wJMjAsMzEsJCs0CiAwOgltZmxyCXI4CQkJLyogcjggPSBydW50aW1lIGFkZHIgaGVyZSAqLwogCWFkZGlzCXI4LHI4LChfc3RleHQgLSAwYilAaGEKIAlhZGRpCXI4LHI4LChfc3RleHQgLSAwYilAbAkvKiBjdXJyZW50IHJ1bnRpbWUgYmFzZSBhZGRyICovCiAJYmwJcHJvbV9pbml0CisjZW5kaWYgLyogQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkUgKi8KKworCS8qIFdlIG5ldmVyIHJldHVybi4gV2UgYWxzbyBoaXQgdGhhdCB0cmFwIGlmIHRyeWluZyB0byBib290CisJICogZnJvbSBPRiB3aGlsZSBDT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORSBpc24ndCBzZWxlY3RlZCAqLwogCXRyYXAKLSNlbmRpZgogCiAvKgogICogQ2hlY2sgZm9yIEJvb3RYIHNpZ25hdHVyZSB3aGVuIHN1cHBvcnRpbmcgUG93ZXJNYWMgYW5kIGJyYW5jaCB0bwpAQCAtNDcyLDEyICs0NzUsMTEgQEAKIAkuID0gMHgxMDAwCiBJbnN0cnVjdGlvblRMQk1pc3M6CiAvKgotICogcjA6CXN0b3JlZCBjdHIKKyAqIHIwOglzY3JhdGNoCiAgKiByMToJbGludXggc3R5bGUgcHRlICggbGF0ZXIgYmVjb21lcyBwcGMgaGFyZHdhcmUgcHRlICkKICAqIHIyOglwdHIgdG8gbGludXgtc3R5bGUgcHRlCiAgKiByMzoJc2NyYXRjaAogICovCi0JbWZjdHIJcjAKIAkvKiBHZXQgUFRFIChsaW51eC1zdHlsZSkgYW5kIGNoZWNrIGFjY2VzcyAqLwogCW1mc3ByCXIzLFNQUk5fSU1JU1MKIAlsaXMJcjEsUEFHRV9PRkZTRVRAaAkJLyogY2hlY2sgaWYga2VybmVsIGFkZHJlc3MgKi8KQEAgLTQ5NiwyOCArNDk4LDI3IEBACiAJcmx3aW5tLglyMixyMiwwLDAsMTkJCS8qIGV4dHJhY3QgYWRkcmVzcyBvZiBwdGUgcGFnZSAqLwogCWJlcS0JSW5zdHJ1Y3Rpb25BZGRyZXNzSW52YWxpZAkvKiByZXR1cm4gaWYgbm8gbWFwcGluZyAqLwogCXJsd2ltaQlyMixyMywyMiwyMCwyOQkJLyogaW5zZXJ0IG5leHQgMTAgYml0cyBvZiBhZGRyZXNzICovCi0JbHd6CXIzLDAocjIpCQkvKiBnZXQgbGludXgtc3R5bGUgcHRlICovCi0JYW5kYy4JcjEscjEscjMJCS8qIGNoZWNrIGFjY2VzcyAmIH5wZXJtaXNzaW9uICovCisJbHd6CXIwLDAocjIpCQkvKiBnZXQgbGludXgtc3R5bGUgcHRlICovCisJYW5kYy4JcjEscjEscjAJCS8qIGNoZWNrIGFjY2VzcyAmIH5wZXJtaXNzaW9uICovCiAJYm5lLQlJbnN0cnVjdGlvbkFkZHJlc3NJbnZhbGlkIC8qIHJldHVybiBpZiBhY2Nlc3Mgbm90IHBlcm1pdHRlZCAqLwotCW9yaQlyMyxyMyxfUEFHRV9BQ0NFU1NFRAkvKiBzZXQgX1BBR0VfQUNDRVNTRUQgaW4gcHRlICovCisJb3JpCXIwLHIwLF9QQUdFX0FDQ0VTU0VECS8qIHNldCBfUEFHRV9BQ0NFU1NFRCBpbiBwdGUgKi8KIAkvKgogCSAqIE5PVEUhIFdlIGFyZSBhc3N1bWluZyB0aGlzIGlzIG5vdCBhbiBTTVAgc3lzdGVtLCBvdGhlcndpc2UKIAkgKiB3ZSB3b3VsZCBuZWVkIHRvIHVwZGF0ZSB0aGUgcHRlIGF0b21pY2FsbHkgd2l0aCBsd2FyeC9zdHdjeC4KIAkgKi8KLQlzdHcJcjMsMChyMikJCS8qIHVwZGF0ZSBQVEUgKGFjY2Vzc2VkIGJpdCkgKi8KKwlzdHcJcjAsMChyMikJCS8qIHVwZGF0ZSBQVEUgKGFjY2Vzc2VkIGJpdCkgKi8KIAkvKiBDb252ZXJ0IGxpbnV4LXN0eWxlIFBURSB0byBsb3cgd29yZCBvZiBQUEMtc3R5bGUgUFRFICovCi0Jcmx3aW5tCXIxLHIzLDMyLTEwLDMxLDMxCS8qIF9QQUdFX1JXIC0+IFBQIGxzYiAqLwotCXJsd2lubQlyMixyMywzMi03LDMxLDMxCS8qIF9QQUdFX0RJUlRZIC0+IFBQIGxzYiAqLworCXJsd2lubQlyMSxyMCwzMi0xMCwzMSwzMQkvKiBfUEFHRV9SVyAtPiBQUCBsc2IgKi8KKwlybHdpbm0JcjIscjAsMzItNywzMSwzMQkvKiBfUEFHRV9ESVJUWSAtPiBQUCBsc2IgKi8KIAlhbmQJcjEscjEscjIJCS8qIHdyaXRhYmxlIGlmIF9SVyBhbmQgX0RJUlRZICovCi0Jcmx3aW1pCXIzLHIzLDMyLTEsMzAsMzAJLyogX1BBR0VfVVNFUiAtPiBQUCBtc2IgKi8KLQlybHdpbWkJcjMscjMsMzItMSwzMSwzMQkvKiBfUEFHRV9VU0VSIC0+IFBQIGxzYiAqLworCXJsd2ltaQlyMCxyMCwzMi0xLDMwLDMwCS8qIF9QQUdFX1VTRVIgLT4gUFAgbXNiICovCisJcmx3aW1pCXIwLHIwLDMyLTEsMzEsMzEJLyogX1BBR0VfVVNFUiAtPiBQUCBsc2IgKi8KIAlvcmkJcjEscjEsMHhlMDQJCS8qIGNsZWFyIG91dCByZXNlcnZlZCBiaXRzICovCi0JYW5kYwlyMSxyMyxyMQkJLyogUFAgPSB1c2VyPyAocncmZGlydHk/IDI6IDMpOiAwICovCisJYW5kYwlyMSxyMCxyMQkJLyogUFAgPSB1c2VyPyAocncmZGlydHk/IDI6IDMpOiAwICovCiBCRUdJTl9GVFJfU0VDVElPTgogCXJsd2lubQlyMSxyMSwwLH5fUEFHRV9DT0hFUkVOVAkvKiBjbGVhciBNIChjb2hlcmVuY2Ugbm90IHJlcXVpcmVkKSAqLwogRU5EX0ZUUl9TRUNUSU9OX0lGQ0xSKENQVV9GVFJfTkVFRF9DT0hFUkVOVCkKIAltdHNwcglTUFJOX1JQQSxyMQotCW1mc3ByCXIzLFNQUk5fSU1JU1MKIAl0bGJsaQlyMwogCW1mc3ByCXIzLFNQUk5fU1JSMQkJLyogTmVlZCB0byByZXN0b3JlIENSMCAqLwogCW10Y3JmCTB4ODAscjMKQEAgLTUyOCw3ICs1MjksNiBAQAogCiAJYWRkaXMJcjEscjEsMHgyMDAwCiAJbXRzcHIJU1BSTl9EU0lTUixyMQkvKiAoc2hvdWxkbid0IGJlIG5lZWRlZCkgKi8KLQltdGN0cglyMAkJLyogUmVzdG9yZSBDVFIgKi8KIAlhbmRpLglyMixyMywweEZGRkYJLyogQ2xlYXIgdXBwZXIgYml0cyBvZiBTUlIxICovCiAJb3IJcjIscjIscjEKIAltdHNwcglTUFJOX1NSUjEscjIKQEAgLTU0OSwxMiArNTQ5LDExIEBACiAJLiA9IDB4MTEwMAogRGF0YUxvYWRUTEJNaXNzOgogLyoKLSAqIHIwOglzdG9yZWQgY3RyCisgKiByMDoJc2NyYXRjaAogICogcjE6CWxpbnV4IHN0eWxlIHB0ZSAoIGxhdGVyIGJlY29tZXMgcHBjIGhhcmR3YXJlIHB0ZSApCiAgKiByMjoJcHRyIHRvIGxpbnV4LXN0eWxlIHB0ZQogICogcjM6CXNjcmF0Y2gKICAqLwotCW1mY3RyCXIwCiAJLyogR2V0IFBURSAobGludXgtc3R5bGUpIGFuZCBjaGVjayBhY2Nlc3MgKi8KIAltZnNwcglyMyxTUFJOX0RNSVNTCiAJbGlzCXIxLFBBR0VfT0ZGU0VUQGgJCS8qIGNoZWNrIGlmIGtlcm5lbCBhZGRyZXNzICovCkBAIC01NzMsMzggKzU3Miw0OCBAQAogCXJsd2lubS4JcjIscjIsMCwwLDE5CQkvKiBleHRyYWN0IGFkZHJlc3Mgb2YgcHRlIHBhZ2UgKi8KIAliZXEtCURhdGFBZGRyZXNzSW52YWxpZAkvKiByZXR1cm4gaWYgbm8gbWFwcGluZyAqLwogCXJsd2ltaQlyMixyMywyMiwyMCwyOQkJLyogaW5zZXJ0IG5leHQgMTAgYml0cyBvZiBhZGRyZXNzICovCi0JbHd6CXIzLDAocjIpCQkvKiBnZXQgbGludXgtc3R5bGUgcHRlICovCi0JYW5kYy4JcjEscjEscjMJCS8qIGNoZWNrIGFjY2VzcyAmIH5wZXJtaXNzaW9uICovCisJbHd6CXIwLDAocjIpCQkvKiBnZXQgbGludXgtc3R5bGUgcHRlICovCisJYW5kYy4JcjEscjEscjAJCS8qIGNoZWNrIGFjY2VzcyAmIH5wZXJtaXNzaW9uICovCiAJYm5lLQlEYXRhQWRkcmVzc0ludmFsaWQJLyogcmV0dXJuIGlmIGFjY2VzcyBub3QgcGVybWl0dGVkICovCi0Jb3JpCXIzLHIzLF9QQUdFX0FDQ0VTU0VECS8qIHNldCBfUEFHRV9BQ0NFU1NFRCBpbiBwdGUgKi8KKwlvcmkJcjAscjAsX1BBR0VfQUNDRVNTRUQJLyogc2V0IF9QQUdFX0FDQ0VTU0VEIGluIHB0ZSAqLwogCS8qCiAJICogTk9URSEgV2UgYXJlIGFzc3VtaW5nIHRoaXMgaXMgbm90IGFuIFNNUCBzeXN0ZW0sIG90aGVyd2lzZQogCSAqIHdlIHdvdWxkIG5lZWQgdG8gdXBkYXRlIHRoZSBwdGUgYXRvbWljYWxseSB3aXRoIGx3YXJ4L3N0d2N4LgogCSAqLwotCXN0dwlyMywwKHIyKQkJLyogdXBkYXRlIFBURSAoYWNjZXNzZWQgYml0KSAqLworCXN0dwlyMCwwKHIyKQkJLyogdXBkYXRlIFBURSAoYWNjZXNzZWQgYml0KSAqLwogCS8qIENvbnZlcnQgbGludXgtc3R5bGUgUFRFIHRvIGxvdyB3b3JkIG9mIFBQQy1zdHlsZSBQVEUgKi8KLQlybHdpbm0JcjEscjMsMzItMTAsMzEsMzEJLyogX1BBR0VfUlcgLT4gUFAgbHNiICovCi0Jcmx3aW5tCXIyLHIzLDMyLTcsMzEsMzEJLyogX1BBR0VfRElSVFkgLT4gUFAgbHNiICovCisJcmx3aW5tCXIxLHIwLDMyLTEwLDMxLDMxCS8qIF9QQUdFX1JXIC0+IFBQIGxzYiAqLworCXJsd2lubQlyMixyMCwzMi03LDMxLDMxCS8qIF9QQUdFX0RJUlRZIC0+IFBQIGxzYiAqLwogCWFuZAlyMSxyMSxyMgkJLyogd3JpdGFibGUgaWYgX1JXIGFuZCBfRElSVFkgKi8KLQlybHdpbWkJcjMscjMsMzItMSwzMCwzMAkvKiBfUEFHRV9VU0VSIC0+IFBQIG1zYiAqLwotCXJsd2ltaQlyMyxyMywzMi0xLDMxLDMxCS8qIF9QQUdFX1VTRVIgLT4gUFAgbHNiICovCisJcmx3aW1pCXIwLHIwLDMyLTEsMzAsMzAJLyogX1BBR0VfVVNFUiAtPiBQUCBtc2IgKi8KKwlybHdpbWkJcjAscjAsMzItMSwzMSwzMQkvKiBfUEFHRV9VU0VSIC0+IFBQIGxzYiAqLwogCW9yaQlyMSxyMSwweGUwNAkJLyogY2xlYXIgb3V0IHJlc2VydmVkIGJpdHMgKi8KLQlhbmRjCXIxLHIzLHIxCQkvKiBQUCA9IHVzZXI/IChydyZkaXJ0eT8gMjogMyk6IDAgKi8KKwlhbmRjCXIxLHIwLHIxCQkvKiBQUCA9IHVzZXI/IChydyZkaXJ0eT8gMjogMyk6IDAgKi8KIEJFR0lOX0ZUUl9TRUNUSU9OCiAJcmx3aW5tCXIxLHIxLDAsfl9QQUdFX0NPSEVSRU5UCS8qIGNsZWFyIE0gKGNvaGVyZW5jZSBub3QgcmVxdWlyZWQpICovCiBFTkRfRlRSX1NFQ1RJT05fSUZDTFIoQ1BVX0ZUUl9ORUVEX0NPSEVSRU5UKQogCW10c3ByCVNQUk5fUlBBLHIxCi0JbWZzcHIJcjMsU1BSTl9ETUlTUworCW1mc3ByCXIyLFNQUk5fU1JSMQkJLyogTmVlZCB0byByZXN0b3JlIENSMCAqLworCW10Y3JmCTB4ODAscjIKK0JFR0lOX01NVV9GVFJfU0VDVElPTgorCWxpCXIwLDEKKwltZnNwcglyMSxTUFJOX1NQUkc0CisJcmx3aW5tCXIyLHIzLDIwLDI3LDMxCQkvKiBHZXQgQWRkcmVzcyBiaXRzIDE1OjE5ICovCisJc2x3CXIwLHIwLHIyCisJeG9yCXIxLHIwLHIxCisJc3J3CXIwLHIxLHIyCisJbXRzcHIgICBTUFJOX1NQUkc0LHIxCisJbWZzcHIJcjIsU1BSTl9TUlIxCisJcmx3aW1pCXIyLHIwLDMxLTE0LDE0LDE0CisJbXRzcHIgICBTUFJOX1NSUjEscjIKK0VORF9NTVVfRlRSX1NFQ1RJT05fSUZTRVQoTU1VX0ZUUl9ORUVEX0RUTEJfU1dfTFJVKQogCXRsYmxkCXIzCi0JbWZzcHIJcjMsU1BSTl9TUlIxCQkvKiBOZWVkIHRvIHJlc3RvcmUgQ1IwICovCi0JbXRjcmYJMHg4MCxyMwogCXJmaQogRGF0YUFkZHJlc3NJbnZhbGlkOgogCW1mc3ByCXIzLFNQUk5fU1JSMQogCXJsd2lubQlyMSxyMyw5LDYsNgkvKiBHZXQgbG9hZC9zdG9yZSBiaXQgKi8KIAlhZGRpcwlyMSxyMSwweDIwMDAKIAltdHNwcglTUFJOX0RTSVNSLHIxCi0JbXRjdHIJcjAJCS8qIFJlc3RvcmUgQ1RSICovCiAJYW5kaS4JcjIscjMsMHhGRkZGCS8qIENsZWFyIHVwcGVyIGJpdHMgb2YgU1JSMSAqLwogCW10c3ByCVNQUk5fU1JSMSxyMgogCW1mc3ByCXIxLFNQUk5fRE1JU1MJLyogR2V0IGZhaWxpbmcgYWRkcmVzcyAqLwpAQCAtNjI0LDEyICs2MzMsMTEgQEAKIAkuID0gMHgxMjAwCiBEYXRhU3RvcmVUTEJNaXNzOgogLyoKLSAqIHIwOglzdG9yZWQgY3RyCisgKiByMDoJc2NyYXRjaAogICogcjE6CWxpbnV4IHN0eWxlIHB0ZSAoIGxhdGVyIGJlY29tZXMgcHBjIGhhcmR3YXJlIHB0ZSApCiAgKiByMjoJcHRyIHRvIGxpbnV4LXN0eWxlIHB0ZQogICogcjM6CXNjcmF0Y2gKICAqLwotCW1mY3RyCXIwCiAJLyogR2V0IFBURSAobGludXgtc3R5bGUpIGFuZCBjaGVjayBhY2Nlc3MgKi8KIAltZnNwcglyMyxTUFJOX0RNSVNTCiAJbGlzCXIxLFBBR0VfT0ZGU0VUQGgJCS8qIGNoZWNrIGlmIGtlcm5lbCBhZGRyZXNzICovCkBAIC02NDgsMjcgKzY1NiwzOCBAQAogCXJsd2lubS4JcjIscjIsMCwwLDE5CQkvKiBleHRyYWN0IGFkZHJlc3Mgb2YgcHRlIHBhZ2UgKi8KIAliZXEtCURhdGFBZGRyZXNzSW52YWxpZAkvKiByZXR1cm4gaWYgbm8gbWFwcGluZyAqLwogCXJsd2ltaQlyMixyMywyMiwyMCwyOQkJLyogaW5zZXJ0IG5leHQgMTAgYml0cyBvZiBhZGRyZXNzICovCi0JbHd6CXIzLDAocjIpCQkvKiBnZXQgbGludXgtc3R5bGUgcHRlICovCi0JYW5kYy4JcjEscjEscjMJCS8qIGNoZWNrIGFjY2VzcyAmIH5wZXJtaXNzaW9uICovCisJbHd6CXIwLDAocjIpCQkvKiBnZXQgbGludXgtc3R5bGUgcHRlICovCisJYW5kYy4JcjEscjEscjAJCS8qIGNoZWNrIGFjY2VzcyAmIH5wZXJtaXNzaW9uICovCiAJYm5lLQlEYXRhQWRkcmVzc0ludmFsaWQJLyogcmV0dXJuIGlmIGFjY2VzcyBub3QgcGVybWl0dGVkICovCi0Jb3JpCXIzLHIzLF9QQUdFX0FDQ0VTU0VEfF9QQUdFX0RJUlRZCisJb3JpCXIwLHIwLF9QQUdFX0FDQ0VTU0VEfF9QQUdFX0RJUlRZCiAJLyoKIAkgKiBOT1RFISBXZSBhcmUgYXNzdW1pbmcgdGhpcyBpcyBub3QgYW4gU01QIHN5c3RlbSwgb3RoZXJ3aXNlCiAJICogd2Ugd291bGQgbmVlZCB0byB1cGRhdGUgdGhlIHB0ZSBhdG9taWNhbGx5IHdpdGggbHdhcngvc3R3Y3guCiAJICovCi0Jc3R3CXIzLDAocjIpCQkvKiB1cGRhdGUgUFRFIChhY2Nlc3NlZC9kaXJ0eSBiaXRzKSAqLworCXN0dwlyMCwwKHIyKQkJLyogdXBkYXRlIFBURSAoYWNjZXNzZWQvZGlydHkgYml0cykgKi8KIAkvKiBDb252ZXJ0IGxpbnV4LXN0eWxlIFBURSB0byBsb3cgd29yZCBvZiBQUEMtc3R5bGUgUFRFICovCi0Jcmx3aW1pCXIzLHIzLDMyLTEsMzAsMzAJLyogX1BBR0VfVVNFUiAtPiBQUCBtc2IgKi8KKwlybHdpbWkJcjAscjAsMzItMSwzMCwzMAkvKiBfUEFHRV9VU0VSIC0+IFBQIG1zYiAqLwogCWxpCXIxLDB4ZTA1CQkvKiBjbGVhciBvdXQgcmVzZXJ2ZWQgYml0cyAmIFBQIGxzYiAqLwotCWFuZGMJcjEscjMscjEJCS8qIFBQID0gdXNlcj8gMjogMCAqLworCWFuZGMJcjEscjAscjEJCS8qIFBQID0gdXNlcj8gMjogMCAqLwogQkVHSU5fRlRSX1NFQ1RJT04KIAlybHdpbm0JcjEscjEsMCx+X1BBR0VfQ09IRVJFTlQJLyogY2xlYXIgTSAoY29oZXJlbmNlIG5vdCByZXF1aXJlZCkgKi8KIEVORF9GVFJfU0VDVElPTl9JRkNMUihDUFVfRlRSX05FRURfQ09IRVJFTlQpCiAJbXRzcHIJU1BSTl9SUEEscjEKLQltZnNwcglyMyxTUFJOX0RNSVNTCisJbWZzcHIJcjIsU1BSTl9TUlIxCQkvKiBOZWVkIHRvIHJlc3RvcmUgQ1IwICovCisJbXRjcmYJMHg4MCxyMgorQkVHSU5fTU1VX0ZUUl9TRUNUSU9OCisJbGkJcjAsMQorCW1mc3ByCXIxLFNQUk5fU1BSRzQKKwlybHdpbm0JcjIscjMsMjAsMjcsMzEJCS8qIEdldCBBZGRyZXNzIGJpdHMgMTU6MTkgKi8KKwlzbHcJcjAscjAscjIKKwl4b3IJcjEscjAscjEKKwlzcncJcjAscjEscjIKKwltdHNwciAgIFNQUk5fU1BSRzQscjEKKwltZnNwcglyMixTUFJOX1NSUjEKKwlybHdpbWkJcjIscjAsMzEtMTQsMTQsMTQKKwltdHNwciAgIFNQUk5fU1JSMSxyMgorRU5EX01NVV9GVFJfU0VDVElPTl9JRlNFVChNTVVfRlRSX05FRURfRFRMQl9TV19MUlUpCiAJdGxibGQJcjMKLQltZnNwcglyMyxTUFJOX1NSUjEJCS8qIE5lZWQgdG8gcmVzdG9yZSBDUjAgKi8KLQltdGNyZgkweDgwLHIzCiAJcmZpCiAKICNpZm5kZWYgQ09ORklHX0FMVElWRUMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF82NC5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKaW5kZXggZWJhZWRhZi4uNTBlZjUwNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkXzY0LlMKQEAgLTEzNjAsNiArMTM2MCw3IEBACiAJYgkuX19hZnRlcl9wcm9tX3N0YXJ0CiAKIF9JTklUX1NUQVRJQyhfX2Jvb3RfZnJvbV9wcm9tKQorI2lmZGVmIENPTkZJR19QUENfT0ZfQk9PVF9UUkFNUE9MSU5FCiAJLyogU2F2ZSBwYXJhbWV0ZXJzICovCiAJbXIJcjMxLHIzCiAJbXIJcjMwLHI0CkBAIC0xMzkwLDcgKzEzOTEsMTAgQEAKIAkvKiBEbyBhbGwgb2YgdGhlIGludGVyYWN0aW9uIHdpdGggT0YgY2xpZW50IGludGVyZmFjZSAqLwogCW1yCXI4LHIyNgogCWJsCS5wcm9tX2luaXQKLQkvKiBXZSBuZXZlciByZXR1cm4gKi8KKyNlbmRpZiAvKiAjQ09ORklHX1BQQ19PRl9CT09UX1RSQU1QT0xJTkUgKi8KKworCS8qIFdlIG5ldmVyIHJldHVybi4gV2UgYWxzbyBoaXQgdGhhdCB0cmFwIGlmIHRyeWluZyB0byBib290CisJICogZnJvbSBPRiB3aGlsZSBDT05GSUdfUFBDX09GX0JPT1RfVFJBTVBPTElORSBpc24ndCBzZWxlY3RlZCAqLwogCXRyYXAKIAogX1NUQVRJQyhfX2FmdGVyX3Byb21fc3RhcnQpCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfYm9va2UuaCBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9ib29rZS5oCmluZGV4IGZjZTJkZjkuLjk1ZjM5ZjEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9ib29rZS5oCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9ib29rZS5oCkBAIC0xMCw2ICsxMCwxNSBAQAogCQltdHNwcglTUFJOX0lWT1IjI3ZlY3Rvcl9udW1iZXIscjI2OwlcCiAJCXN5bmMKIAorI2lmIChUSFJFQURfU0hJRlQgPCAxNSkKKyNkZWZpbmUgQUxMT0NfU1RBQ0tfRlJBTUUocmVnLCB2YWwpCQkJXAorCWFkZGkgcmVnLHJlZyx2YWwKKyNlbHNlCisjZGVmaW5lIEFMTE9DX1NUQUNLX0ZSQU1FKHJlZywgdmFsKQkJCVwKKwlhZGRpcwlyZWcscmVnLHZhbEBoYTsJCQkJXAorCWFkZGkJcmVnLHJlZyx2YWxAbAorI2VuZGlmCisKICNkZWZpbmUgTk9STUFMX0VYQ0VQVElPTl9QUk9MT0cJCQkJCQkgICAgIFwKIAltdHNwcglTUFJOX1NQUkcwLHIxMDsJCS8qIHNhdmUgdHdvIHJlZ2lzdGVycyB0byB3b3JrIHdpdGggKi9cCiAJbXRzcHIJU1BSTl9TUFJHMSxyMTE7CQkJCQkJICAgICBcCkBAIC0yMCw3ICsyOSw3IEBACiAJYmVxCTFmOwkJCQkJCQkgICAgIFwKIAltZnNwcglyMSxTUFJOX1NQUkczOwkJLyogaWYgZnJvbSB1c2VyLCBzdGFydCBhdCB0b3Agb2YgICAqL1wKIAlsd3oJcjEsVEhSRUFEX0lORk8tVEhSRUFEKHIxKTsgLyogdGhpcyB0aHJlYWQncyBrZXJuZWwgc3RhY2sgICAqL1wKLQlhZGRpCXIxLHIxLFRIUkVBRF9TSVpFOwkJCQkJICAgICBcCisJQUxMT0NfU1RBQ0tfRlJBTUUocjEsIFRIUkVBRF9TSVpFKTsJCQkJICAgICBcCiAxOglzdWJpCXIxLHIxLElOVF9GUkFNRV9TSVpFOwkvKiBBbGxvY2F0ZSBhbiBleGNlcHRpb24gZnJhbWUgICAgICovXAogCW1yCXIxMSxyMTsJCQkJCQkJICAgICBcCiAJc3R3CXIxMCxfQ0NSKHIxMSk7ICAgICAgICAgIC8qIHNhdmUgdmFyaW91cyByZWdpc3RlcnMJICAgKi9cCkBAIC03MCwxMCArNzksMTAgQEAKIAogLyogb25seSBvbiBlNTAwbWMvZTIwMCAqLwogI2RlZmluZSBERUJVR19TVEFDS19CQVNFCWRiZ2lycV9jdHgKLSNpZmRlZiBDT05GSUdfUFBDX0U1MDBNQwotI2RlZmluZSBERUJVR19TUFJHCQlTUFJOX1NQUkc5Ci0jZWxzZQorI2lmZGVmIENPTkZJR19FMjAwCiAjZGVmaW5lIERFQlVHX1NQUkcJCVNQUk5fU1BSRzZXCisjZWxzZQorI2RlZmluZSBERUJVR19TUFJHCQlTUFJOX1NQUkc5CiAjZW5kaWYKIAogI2RlZmluZSBFWENfTFZMX0ZSQU1FX09WRVJIRUFECShUSFJFQURfU0laRSAtIElOVF9GUkFNRV9TSVpFIC0gRVhDX0xWTF9TSVpFKQpAQCAtMjc5LDcgKzI4OCw3IEBACiAJbHd6CXIxMSxHUFIxMShyOCk7CQkJCQkJICAgICAgXAogCW1mc3ByCXI4LERFQlVHX1NQUkc7CQkJCQkJICAgICAgXAogCQkJCQkJCQkJICAgICAgXAotCVJGREk7CQkJCQkJCQkgICAgICBcCisJUFBDX1JGREk7CQkJCQkJCQkgICAgICBcCiAJYgkuOwkJCQkJCQkgICAgICBcCiAJCQkJCQkJCQkgICAgICBcCiAJLyogY29udGludWUgbm9ybWFsIGhhbmRsaW5nIGZvciBhIGRlYnVnIGV4Y2VwdGlvbi4uLiAqLwkJICAgICAgXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9oZWFkX2ZzbF9ib29rZS5TCmluZGV4IDM2ZmZiMzUuLjRjMjI2MjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvaGVhZF9mc2xfYm9va2UuUworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL2hlYWRfZnNsX2Jvb2tlLlMKQEAgLTEwMywxMCArMTAzLDE1IEBACiAJb3IJcjcscjcscjQKIAltdHNwcglTUFJOX01BUzYscjcKIAl0bGJzeAkwLHI2CQkJCS8qIHNlYXJjaCBNU1JbSVNdLCBTUElEPVBJRDAgKi8KLSNpZm5kZWYgQ09ORklHX0UyMDAKIAltZnNwcglyNyxTUFJOX01BUzEKIAlhbmRpcy4JcjcscjcsTUFTMV9WQUxJREBoCiAJYm5lCW1hdGNoX1RMQgorCisJbWZzcHIJcjcsU1BSTl9NTVVDRkcKKwlybHdpbm0JcjcscjcsMjEsMjgsMzEJCQkvKiBleHRyYWN0IE1NVUNGR1tOUElEU10gKi8KKwljbXB3aQlyNywzCisJYm5lCW1hdGNoX1RMQgkJCS8qIHNraXAgaWYgTlBJRFMgIT0gMyAqLworCiAJbWZzcHIJcjcsU1BSTl9QSUQxCiAJc2x3aQlyNyxyNywxNgogCW9yCXI3LHI3LHI0CkBAIC0xMjAsNyArMTI1LDcgQEAKIAlvcglyNyxyNyxyNAogCW10c3ByCVNQUk5fTUFTNixyNwogCXRsYnN4CTAscjYJCQkJLyogRmFsbCB0aHJvdWdoLCB3ZSBoYWQgdG8gbWF0Y2ggKi8KLSNlbmRpZgorCiBtYXRjaF9UTEI6CiAJbWZzcHIJcjcsU1BSTl9NQVMwCiAJcmx3aW5tCXIzLHI3LDE2LDIwLDMxCQkJLyogRXh0cmFjdCBNQVMwKEVudHJ5KSAqLwpAQCAtMTY4LDcgKzE3Myw3IEBACiAKIAkvKiBncmFiIGFuZCBmaXh1cCB0aGUgUlBOICovCiAJbWZzcHIJcjYsU1BSTl9NQVMxCS8qIGV4dHJhY3QgTUFTMVtTSVpFXSAqLwotCXJsd2lubQlyNixyNiwyNSwyNywzMAorCXJsd2lubQlyNixyNiwyNSwyNywzMQogCWxpCXI4LC0xCiAJYWRkaQlyNixyNiwxMAogCXNsdwlyNixyOCxyNgkvKiBjb252ZXJ0IHRvIG1hc2sgKi8KQEAgLTE5NCw3ICsxOTksNyBAQAogCXhvcmkJcjYscjQsMQkJLyogU2V0dXAgVE1QIG1hcHBpbmcgaW4gdGhlIG90aGVyIEFkZHJlc3Mgc3BhY2UgKi8KIAlzbHdpCXI2LHI2LDEyCiAJb3JpcwlyNixyNiwoTUFTMV9WQUxJRHxNQVMxX0lQUk9UKUBoCi0Jb3JpCXI2LHI2LChNQVMxX1RTSVpFKEJPT0tFX1BBR0VTWl80SykpQGwKKwlvcmkJcjYscjYsKE1BUzFfVFNJWkUoQk9PSzNFX1BBR0VTWl80SykpQGwKIAltdHNwcglTUFJOX01BUzEscjYKIAltZnNwcglyNixTUFJOX01BUzIKIAlsaQlyNywwCQkvKiB0ZW1wIEVQTiA9IDAgKi8KQEAgLTIxNSwxNCArMjIwLDE5IEBACiAKIC8qIDQuIENsZWFyIG91dCBQSURzICYgU2VhcmNoIGluZm8gKi8KIAlsaQlyNiwwCisJbXRzcHIgICBTUFJOX01BUzYscjYKIAltdHNwcglTUFJOX1BJRDAscjYKLSNpZm5kZWYgQ09ORklHX0UyMDAKKworCW1mc3ByCXI3LFNQUk5fTU1VQ0ZHCisJcmx3aW5tCXI3LHI3LDIxLDI4LDMxCQkJLyogZXh0cmFjdCBNTVVDRkdbTlBJRFNdICovCisJY21wd2kJcjcsMworCWJuZQkyZgkJCQkvKiBza2lwIGlmIE5QSURTICE9IDMgKi8KKwogCW10c3ByCVNQUk5fUElEMSxyNgogCW10c3ByCVNQUk5fUElEMixyNgotI2VuZGlmCi0JbXRzcHIJU1BSTl9NQVM2LHI2CiAKIC8qIDUuIEludmFsaWRhdGUgbWFwcGluZyB3ZSBzdGFydGVkIGluICovCisyOgogCWxpcwlyNywweDEwMDAJLyogU2V0IE1BUzAoVExCU0VMKSA9IDEgKi8KIAlybHdpbWkJcjcscjMsMTYsNCwxNQkvKiBTZXR1cCBNQVMwID0gVExCU0VMIHwgRVNFTChyMykgKi8KIAltdHNwcglTUFJOX01BUzAscjcKQEAgLTI0NywxMCArMjU3LDEwIEBACiAJbGlzCXI2LDB4MTAwMAkJLyogU2V0IE1BUzAoVExCU0VMKSA9IFRMQjEoMSksIEVTRUwgPSAwICovCiAJbXRzcHIJU1BSTl9NQVMwLHI2CiAJbGlzCXI2LChNQVMxX1ZBTElEfE1BUzFfSVBST1QpQGgKLQlvcmkJcjYscjYsKE1BUzFfVFNJWkUoQk9PS0VfUEFHRVNaXzY0TSkpQGwKKwlvcmkJcjYscjYsKE1BUzFfVFNJWkUoQk9PSzNFX1BBR0VTWl82NE0pKUBsCiAJbXRzcHIJU1BSTl9NQVMxLHI2Ci0JbGlzCXI2LE1BUzJfVkFMKFBBR0VfT0ZGU0VULCBCT09LRV9QQUdFU1pfNjRNLCBNX0lGX1NNUClAaAotCW9yaQlyNixyNixNQVMyX1ZBTChQQUdFX09GRlNFVCwgQk9PS0VfUEFHRVNaXzY0TSwgTV9JRl9TTVApQGwKKwlsaXMJcjYsTUFTMl9WQUwoUEFHRV9PRkZTRVQsIEJPT0szRV9QQUdFU1pfNjRNLCBNX0lGX1NNUClAaAorCW9yaQlyNixyNixNQVMyX1ZBTChQQUdFX09GRlNFVCwgQk9PSzNFX1BBR0VTWl82NE0sIE1fSUZfU01QKUBsCiAJbXRzcHIJU1BSTl9NQVMyLHI2CiAJbXRzcHIJU1BSTl9NQVMzLHI4CiAJdGxid2UKQEAgLTI5OCwyNiArMzA4LDE0IEBACiAJU0VUX0lWT1IoMTIsIFdhdGNoZG9nVGltZXIpOwogCVNFVF9JVk9SKDEzLCBEYXRhVExCRXJyb3IpOwogCVNFVF9JVk9SKDE0LCBJbnN0cnVjdGlvblRMQkVycm9yKTsKLQlTRVRfSVZPUigxNSwgRGVidWdEZWJ1Zyk7Ci0jaWYgZGVmaW5lZChDT05GSUdfRTUwMCkgJiYgIWRlZmluZWQoQ09ORklHX1BQQ19FNTAwTUMpCiAJU0VUX0lWT1IoMTUsIERlYnVnQ3JpdCk7Ci0jZW5kaWYKLQlTRVRfSVZPUigzMiwgU1BFVW5hdmFpbGFibGUpOwotCVNFVF9JVk9SKDMzLCBTUEVGbG9hdGluZ1BvaW50RGF0YSk7Ci0JU0VUX0lWT1IoMzQsIFNQRUZsb2F0aW5nUG9pbnRSb3VuZCk7Ci0jaWZuZGVmIENPTkZJR19FMjAwCi0JU0VUX0lWT1IoMzUsIFBlcmZvcm1hbmNlTW9uaXRvcik7Ci0jZW5kaWYKLSNpZmRlZiBDT05GSUdfUFBDX0U1MDBNQwotCVNFVF9JVk9SKDM2LCBEb29yYmVsbCk7Ci0jZW5kaWYKIAogCS8qIEVzdGFibGlzaCB0aGUgaW50ZXJydXB0IHZlY3RvciBiYXNlICovCiAJbGlzCXI0LGludGVycnVwdF9iYXNlQGgJLyogSVZQUiBvbmx5IHVzZXMgdGhlIGhpZ2ggMTYtYml0cyAqLwogCW10c3ByCVNQUk5fSVZQUixyNAogCiAJLyogU2V0dXAgdGhlIGRlZmF1bHRzIGZvciBUTEIgZW50cmllcyAqLwotCWxpCXIyLChNQVM0X1RTSVpFRChCT09LRV9QQUdFU1pfNEspKUBsCisJbGkJcjIsKE1BUzRfVFNJWkVEKEJPT0szRV9QQUdFU1pfNEspKUBsCiAjaWZkZWYgQ09ORklHX0UyMDAKIAlvcmlzCXIyLHIyLE1BUzRfVExCU0VMRCgxKUBoCiAjZW5kaWYKQEAgLTMyOSwxMiArMzI3LDYgQEAKIAlvcmlzCXIyLHIyLEhJRDBfRE9aRUBoCiAJbXRzcHIJU1BSTl9ISUQwLCByMgogI2VuZGlmCi0jaWZkZWYgQ09ORklHX0UyMDAKLQkvKiBlbmFibGUgZGVkaWNhdGVkIGRlYnVnIGV4Y2VwdGlvbiBoYW5kbGluZyByZXNvdXJjZXMgKERlYnVnIEFQVSkgKi8KLQltZnNwcglyMixTUFJOX0hJRDAKLQlvcmkJcjIscjIsSElEMF9EQVBVRU5AbAotCW10c3ByCVNQUk5fSElEMCxyMgotI2VuZGlmCiAKICNpZiAhZGVmaW5lZChDT05GSUdfQkRJX1NXSVRDSCkKIAkvKgpAQCAtNzA2LDE1ICs2OTgsMTMgQEAKIAkvKiBQZXJmb3JtYW5jZSBNb25pdG9yICovCiAJRVhDRVBUSU9OKDB4MjA2MCwgUGVyZm9ybWFuY2VNb25pdG9yLCBwZXJmb3JtYW5jZV9tb25pdG9yX2V4Y2VwdGlvbiwgRVhDX1hGRVJfU1REKQogCi0jaWZkZWYgQ09ORklHX1BQQ19FNTAwTUMKLQlFWENFUFRJT04oMHgyMDcwLCBEb29yYmVsbCwgdW5rbm93bl9leGNlcHRpb24sIEVYQ19YRkVSX1NURCkKLSNlbmRpZgorCUVYQ0VQVElPTigweDIwNzAsIERvb3JiZWxsLCBkb29yYmVsbF9leGNlcHRpb24sIEVYQ19YRkVSX1NURCkKKworCUNSSVRJQ0FMX0VYQ0VQVElPTigweDIwODAsIENyaXRpY2FsRG9vcmJlbGwsIHVua25vd25fZXhjZXB0aW9uKQogCiAJLyogRGVidWcgSW50ZXJydXB0ICovCiAJREVCVUdfREVCVUdfRVhDRVBUSU9OCi0jaWYgZGVmaW5lZChDT05GSUdfRTUwMCkgJiYgIWRlZmluZWQoQ09ORklHX1BQQ19FNTAwTUMpCiAJREVCVUdfQ1JJVF9FWENFUFRJT04KLSNlbmRpZgogCiAvKgogICogTG9jYWwgZnVuY3Rpb25zCkBAIC04OTcsNiArODg3LDQ3IEBACiAgKiBHbG9iYWwgZnVuY3Rpb25zCiAgKi8KIAorLyogQWRqdXN0IG9yIHNldHVwIElWT1JzIGZvciBlMjAwICovCitfR0xPQkFMKF9fc2V0dXBfZTIwMF9pdm9ycykKKwlsaQlyMyxEZWJ1Z0RlYnVnQGwKKwltdHNwcglTUFJOX0lWT1IxNSxyMworCWxpCXIzLFNQRVVuYXZhaWxhYmxlQGwKKwltdHNwcglTUFJOX0lWT1IzMixyMworCWxpCXIzLFNQRUZsb2F0aW5nUG9pbnREYXRhQGwKKwltdHNwcglTUFJOX0lWT1IzMyxyMworCWxpCXIzLFNQRUZsb2F0aW5nUG9pbnRSb3VuZEBsCisJbXRzcHIJU1BSTl9JVk9SMzQscjMKKwlzeW5jCisJYmxyCisKKy8qIEFkanVzdCBvciBzZXR1cCBJVk9ScyBmb3IgZTUwMHYxL3YyICovCitfR0xPQkFMKF9fc2V0dXBfZTUwMF9pdm9ycykKKwlsaQlyMyxEZWJ1Z0NyaXRAbAorCW10c3ByCVNQUk5fSVZPUjE1LHIzCisJbGkJcjMsU1BFVW5hdmFpbGFibGVAbAorCW10c3ByCVNQUk5fSVZPUjMyLHIzCisJbGkJcjMsU1BFRmxvYXRpbmdQb2ludERhdGFAbAorCW10c3ByCVNQUk5fSVZPUjMzLHIzCisJbGkJcjMsU1BFRmxvYXRpbmdQb2ludFJvdW5kQGwKKwltdHNwcglTUFJOX0lWT1IzNCxyMworCWxpCXIzLFBlcmZvcm1hbmNlTW9uaXRvckBsCisJbXRzcHIJU1BSTl9JVk9SMzUscjMKKwlzeW5jCisJYmxyCisKKy8qIEFkanVzdCBvciBzZXR1cCBJVk9ScyBmb3IgZTUwMG1jICovCitfR0xPQkFMKF9fc2V0dXBfZTUwMG1jX2l2b3JzKQorCWxpCXIzLERlYnVnRGVidWdAbAorCW10c3ByCVNQUk5fSVZPUjE1LHIzCisJbGkJcjMsUGVyZm9ybWFuY2VNb25pdG9yQGwKKwltdHNwcglTUFJOX0lWT1IzNSxyMworCWxpCXIzLERvb3JiZWxsQGwKKwltdHNwcglTUFJOX0lWT1IzNixyMworCWxpCXIzLENyaXRpY2FsRG9vcmJlbGxAbAorCW10c3ByCVNQUk5fSVZPUjM3LHIzCisJc3luYworCWJscgorCiAvKgogICogZXh0ZXJuIHZvaWQgbG9hZGNhbV9lbnRyeSh1bnNpZ25lZCBpbnQgaW5kZXgpCiAgKgpAQCAtMTA4OSw3ICsxMTIwLDcgQEAKIAltdHNwcglTUFJOX1NQUkczLHI0CiAKIAkvKiBTZXR1cCB0aGUgZGVmYXVsdHMgZm9yIFRMQiBlbnRyaWVzICovCi0JbGkJcjQsKE1BUzRfVFNJWkVEKEJPT0tFX1BBR0VTWl80SykpQGwKKwlsaQlyNCwoTUFTNF9UU0laRUQoQk9PSzNFX1BBR0VTWl80SykpQGwKIAltdHNwcglTUFJOX01BUzQscjQKIAogCS8qIEp1bXAgdG8gc3RhcnRfc2Vjb25kYXJ5ICovCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9pcnEuYwppbmRleCAxYjU1ZmZkLi41NTc2MTQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL2lycS5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvaXJxLmMKQEAgLTE3MSw3ICsxNzEsNyBAQAogewogCWludCBpID0gKihsb2ZmX3QgKil2LCBqOwogCXN0cnVjdCBpcnFhY3Rpb24gKmFjdGlvbjsKLQlpcnFfZGVzY190ICpkZXNjOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGkgPT0gMCkgewpAQCAtMTAzOCw3ICsxMDM4LDcgQEAKIHN0YXRpYyBpbnQgdmlycV9kZWJ1Z19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqcHJpdmF0ZSkKIHsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWlycV9kZXNjX3QgKmRlc2M7CisJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCWNvbnN0IGNoYXIgKnA7CiAJY2hhciBub25lW10gPSAibm9uZSI7CiAJaW50IGk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL21vZHVsZV82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9tb2R1bGVfNjQuYwppbmRleCA4OTkyYjAzLi44ZmJiMTI1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL21vZHVsZV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvbW9kdWxlXzY0LmMKQEAgLTMyOSw3ICszMjksNyBAQAogICAgcmVzdG9yZSByMi4gKi8KIHN0YXRpYyBpbnQgcmVzdG9yZV9yMih1MzIgKmluc3RydWN0aW9uLCBzdHJ1Y3QgbW9kdWxlICptZSkKIHsKLQlpZiAoKmluc3RydWN0aW9uICE9IFBQQ19OT1BfSU5TVFIpIHsKKwlpZiAoKmluc3RydWN0aW9uICE9IFBQQ19JTlNUX05PUCkgewogCQlwcmludGsoIiVzOiBFeHBlY3Qgbm9vcCBhZnRlciByZWxvY2F0ZSwgZ290ICUwOHhcbiIsCiAJCSAgICAgICBtZS0+bmFtZSwgKmluc3RydWN0aW9uKTsKIAkJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaS1jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCmluZGV4IDBmNDE4MTIuLjljNjllN2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpLWNvbW1vbi5jCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8YXNtL2VlaC5oPgogCiBzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGhvc2Vfc3BpbmxvY2spOworTElTVF9IRUFEKGhvc2VfbGlzdCk7CiAKIC8qIFhYWCBraWxsIHRoYXQgc29tZSBkYXkgLi4uICovCiBzdGF0aWMgaW50IGdsb2JhbF9waGJfbnVtYmVyOwkJLyogR2xvYmFsIHBoYiBjb3VudGVyICovCkBAIC00OSw3ICs1MCw3IEBACiB1bnNpZ25lZCBpbnQgcHBjX3BjaV9mbGFncyA9IDA7CiAKIAotc3RhdGljIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKnBjaV9kbWFfb3BzOworc3RhdGljIHN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKnBjaV9kbWFfb3BzID0gJmRtYV9kaXJlY3Rfb3BzOwogCiB2b2lkIHNldF9wY2lfZG1hX29wcyhzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpkbWFfb3BzKQogewpAQCAtMTEzLDE5ICsxMTQsMjQgQEAKIAkJa2ZyZWUocGhiKTsKIH0KIAorc3RhdGljIHJlc291cmNlX3NpemVfdCBwY2liaW9zX2lvX3NpemUoY29uc3Qgc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQoreworI2lmZGVmIENPTkZJR19QUEM2NAorCXJldHVybiBob3NlLT5wY2lfaW9fc2l6ZTsKKyNlbHNlCisJcmV0dXJuIGhvc2UtPmlvX3Jlc291cmNlLmVuZCAtIGhvc2UtPmlvX3Jlc291cmNlLnN0YXJ0ICsgMTsKKyNlbmRpZgorfQorCiBpbnQgcGNpYmlvc192YWRkcl9pc19pb3BvcnQodm9pZCBfX2lvbWVtICphZGRyZXNzKQogewogCWludCByZXQgPSAwOwogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZTsKLQl1bnNpZ25lZCBsb25nIHNpemU7CisJcmVzb3VyY2Vfc2l6ZV90IHNpemU7CiAKIAlzcGluX2xvY2soJmhvc2Vfc3BpbmxvY2spOwogCWxpc3RfZm9yX2VhY2hfZW50cnkoaG9zZSwgJmhvc2VfbGlzdCwgbGlzdF9ub2RlKSB7Ci0jaWZkZWYgQ09ORklHX1BQQzY0Ci0JCXNpemUgPSBob3NlLT5wY2lfaW9fc2l6ZTsKLSNlbHNlCi0JCXNpemUgPSBob3NlLT5pb19yZXNvdXJjZS5lbmQgLSBob3NlLT5pb19yZXNvdXJjZS5zdGFydCArIDE7Ci0jZW5kaWYKKwkJc2l6ZSA9IHBjaWJpb3NfaW9fc2l6ZShob3NlKTsKIAkJaWYgKGFkZHJlc3MgPj0gaG9zZS0+aW9fYmFzZV92aXJ0ICYmCiAJCSAgICBhZGRyZXNzIDwgKGhvc2UtPmlvX2Jhc2VfdmlydCArIHNpemUpKSB7CiAJCQlyZXQgPSAxOwpAQCAtMTM2LDYgKzE0MiwyOSBAQAogCXJldHVybiByZXQ7CiB9CiAKK3Vuc2lnbmVkIGxvbmcgcGNpX2FkZHJlc3NfdG9fcGlvKHBoeXNfYWRkcl90IGFkZHJlc3MpCit7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOworCXJlc291cmNlX3NpemVfdCBzaXplOworCXVuc2lnbmVkIGxvbmcgcmV0ID0gfjA7CisKKwlzcGluX2xvY2soJmhvc2Vfc3BpbmxvY2spOworCWxpc3RfZm9yX2VhY2hfZW50cnkoaG9zZSwgJmhvc2VfbGlzdCwgbGlzdF9ub2RlKSB7CisJCXNpemUgPSBwY2liaW9zX2lvX3NpemUoaG9zZSk7CisJCWlmIChhZGRyZXNzID49IGhvc2UtPmlvX2Jhc2VfcGh5cyAmJgorCQkgICAgYWRkcmVzcyA8IChob3NlLT5pb19iYXNlX3BoeXMgKyBzaXplKSkgeworCQkJdW5zaWduZWQgbG9uZyBiYXNlID0KKwkJCQkodW5zaWduZWQgbG9uZylob3NlLT5pb19iYXNlX3ZpcnQgLSBfSU9fQkFTRTsKKwkJCXJldCA9IGJhc2UgKyAoYWRkcmVzcyAtIGhvc2UtPmlvX2Jhc2VfcGh5cyk7CisJCQlicmVhazsKKwkJfQorCX0KKwlzcGluX3VubG9jaygmaG9zZV9zcGlubG9jayk7CisKKwlyZXR1cm4gcmV0OworfQorRVhQT1JUX1NZTUJPTF9HUEwocGNpX2FkZHJlc3NfdG9fcGlvKTsKKwogLyoKICAqIFJldHVybiB0aGUgZG9tYWluIG51bWJlciBmb3IgdGhpcyBidXMuCiAgKi8KQEAgLTE0NTMsNyArMTQ4Miw3IEBACiAJICogd2UgcHJvY2VlZCB0byBhc3NpZ25pbmcgdGhpbmdzIHRoYXQgd2VyZSBsZWZ0IHVuYXNzaWduZWQKIAkgKi8KIAlpZiAoIShwcGNfcGNpX2ZsYWdzICYgUFBDX1BDSV9QUk9CRV9PTkxZKSkgewotCQlwcl9kZWJ1ZygiUENJOiBBc3NpZ25pbmcgdW5hc3NpZ25lZCByZXNvdWNlcy4uLlxuIik7CisJCXByX2RlYnVnKCJQQ0k6IEFzc2lnbmluZyB1bmFzc2lnbmVkIHJlc291cmNlcy4uLlxuIik7CiAJCXBjaV9hc3NpZ25fdW5hc3NpZ25lZF9yZXNvdXJjZXMoKTsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzMyLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV8zMi5jCmluZGV4IDEzMmNkODAuLmQ0NzM2MzQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfMzIuYwpAQCAtMjAsNiArMjAsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKyNpbmNsdWRlIDxhc20vcHBjLXBjaS5oPgogI2luY2x1ZGUgPGFzbS9ieXRlb3JkZXIuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CkBAIC00Myw4ICs0NCw2IEBACiAgKi8KIHN0YXRpYyBpbnQgcGNpX2Fzc2lnbl9hbGxfYnVzZXM7CiAKLUxJU1RfSEVBRChob3NlX2xpc3QpOwotCiBzdGF0aWMgaW50IHBjaV9idXNfY291bnQ7CiAKIC8qIFRoaXMgd2lsbCByZW1haW4gTlVMTCBmb3Igbm93LCB1bnRpbCBpc2EtYnJpZGdlLmMgaXMgbWFkZSBjb21tb24KQEAgLTIxOSwxNiArMjE4LDIzIEBACiBzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpzY2FuX09GX2Zvcl9wY2lfZGV2KHN0cnVjdCBkZXZpY2Vfbm9kZSAqcGFyZW50LAogCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGRldmZuKQogewotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJc3RydWN0IGRldmljZV9ub2RlICpucCwgKmNucDsKIAljb25zdCB1MzIgKnJlZzsKIAl1bnNpZ25lZCBpbnQgcHNpemU7CiAKIAlmb3JfZWFjaF9jaGlsZF9vZl9ub2RlKHBhcmVudCwgbnApIHsKIAkJcmVnID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCAicmVnIiwgJnBzaXplKTsKLQkJaWYgKHJlZyA9PSBOVUxMIHx8IHBzaXplIDwgNCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoKChyZWdbMF0gPj4gOCkgJiAweGZmKSA9PSBkZXZmbikKKyAgICAgICAgICAgICAgICBpZiAocmVnICYmIHBzaXplID49IDQgJiYgKChyZWdbMF0gPj4gOCkgJiAweGZmKSA9PSBkZXZmbikKIAkJCXJldHVybiBucDsKKworCQkvKiBOb3RlOiBzb21lIE9GcyBjcmVhdGUgYSBwYXJlbnQgbm9kZSAibXVsdGlmdW5jLWRldmljZSIgYXMKKwkJICogYSBmYWtlIHJvb3QgZm9yIGFsbCBmdW5jdGlvbnMgb2YgYSBtdWx0aS1mdW5jdGlvbiBkZXZpY2UsCisJCSAqIHdlIGdvIGRvd24gdGhlbSBhcyB3ZWxsLiAqLworICAgICAgICAgICAgICAgIGlmICghc3RyY21wKG5wLT5uYW1lLCAibXVsdGlmdW5jLWRldmljZSIpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjbnAgPSBzY2FuX09GX2Zvcl9wY2lfZGV2KG5wLCBkZXZmbik7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoY25wKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY25wOworICAgICAgICAgICAgICAgIH0KIAl9CiAJcmV0dXJuIE5VTEw7CiB9CkBAIC00OTEsMjQgKzQ5Nyw2IEBACiAJcmV0dXJuIHJlc3VsdDsKIH0KIAotdW5zaWduZWQgbG9uZyBwY2lfYWRkcmVzc190b19waW8ocGh5c19hZGRyX3QgYWRkcmVzcykKLXsKLQlzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKmhvc2UsICp0bXA7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoaG9zZSwgdG1wLCAmaG9zZV9saXN0LCBsaXN0X25vZGUpIHsKLQkJdW5zaWduZWQgaW50IHNpemUgPSBob3NlLT5pb19yZXNvdXJjZS5lbmQgLQotCQkJaG9zZS0+aW9fcmVzb3VyY2Uuc3RhcnQgKyAxOwotCQlpZiAoYWRkcmVzcyA+PSBob3NlLT5pb19iYXNlX3BoeXMgJiYKLQkJICAgIGFkZHJlc3MgPCAoaG9zZS0+aW9fYmFzZV9waHlzICsgc2l6ZSkpIHsKLQkJCXVuc2lnbmVkIGxvbmcgYmFzZSA9Ci0JCQkJKHVuc2lnbmVkIGxvbmcpaG9zZS0+aW9fYmFzZV92aXJ0IC0gX0lPX0JBU0U7Ci0JCQlyZXR1cm4gYmFzZSArIChhZGRyZXNzIC0gaG9zZS0+aW9fYmFzZV9waHlzKTsKLQkJfQotCX0KLQlyZXR1cm4gKHVuc2lnbmVkIGludCktMTsKLX0KLUVYUE9SVF9TWU1CT0wocGNpX2FkZHJlc3NfdG9fcGlvKTsKLQogLyoKICAqIE51bGwgUENJIGNvbmZpZyBhY2Nlc3MgZnVuY3Rpb25zLCBmb3IgdGhlIGNhc2Ugd2hlbiB3ZSBjYW4ndAogICogZmluZCBhIGhvc2UuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9wY2lfNjQuYwppbmRleCBlYThlZGE4Li5iZTU3NGZjIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3BjaV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcGNpXzY0LmMKQEAgLTQzLDggKzQzLDYgQEAKIHVuc2lnbmVkIGxvbmcgcGNpX2lvX2Jhc2UgPSBJU0FfSU9fQkFTRTsKIEVYUE9SVF9TWU1CT0wocGNpX2lvX2Jhc2UpOwogCi1MSVNUX0hFQUQoaG9zZV9saXN0KTsKLQogc3RhdGljIHZvaWQgZml4dXBfYnJva2VuX3BjbmV0MzIoc3RydWN0IHBjaV9kZXYqIGRldikKIHsKIAlpZiAoKGRldi0+Y2xhc3M+PjggPT0gUENJX0NMQVNTX05FVFdPUktfRVRIRVJORVQpKSB7CkBAIC01MjQsMjMgKzUyMiw2IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChwY2liaW9zX21hcF9pb19zcGFjZSk7CiAKLXVuc2lnbmVkIGxvbmcgcGNpX2FkZHJlc3NfdG9fcGlvKHBoeXNfYWRkcl90IGFkZHJlc3MpCi17Ci0Jc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLCAqdG1wOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGhvc2UsIHRtcCwgJmhvc2VfbGlzdCwgbGlzdF9ub2RlKSB7Ci0JCWlmIChhZGRyZXNzID49IGhvc2UtPmlvX2Jhc2VfcGh5cyAmJgotCQkgICAgYWRkcmVzcyA8IChob3NlLT5pb19iYXNlX3BoeXMgKyBob3NlLT5wY2lfaW9fc2l6ZSkpIHsKLQkJCXVuc2lnbmVkIGxvbmcgYmFzZSA9Ci0JCQkJKHVuc2lnbmVkIGxvbmcpaG9zZS0+aW9fYmFzZV92aXJ0IC0gX0lPX0JBU0U7Ci0JCQlyZXR1cm4gYmFzZSArIChhZGRyZXNzIC0gaG9zZS0+aW9fYmFzZV9waHlzKTsKLQkJfQotCX0KLQlyZXR1cm4gKHVuc2lnbmVkIGludCktMTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHBjaV9hZGRyZXNzX3RvX3Bpbyk7Ci0KLQogI2RlZmluZSBJT0JBU0VfQlJJREdFX05VTUJFUgkwCiAjZGVmaW5lIElPQkFTRV9NRU1PUlkJCTEKICNkZWZpbmUgSU9CQVNFX0lPCQkyCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCmluZGV4IGZiNzA0OWMuLmVhYzA2NDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvY2Vzcy5jCkBAIC0zMyw3ICszMywxMCBAQAogI2luY2x1ZGUgPGxpbnV4L21xdWV1ZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hhcmRpcnEuaD4KICNpbmNsdWRlIDxsaW51eC91dHNuYW1lLmg+CisjaW5jbHVkZSA8bGludXgvZnRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsX3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9wZXJzb25hbGl0eS5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgpAQCAtMTAwOCw2ICsxMDExLDE0IEBACiAJdW5zaWduZWQgbG9uZyBzcCwgaXAsIGxyLCBuZXdzcDsKIAlpbnQgY291bnQgPSAwOwogCWludCBmaXJzdGZyYW1lID0gMTsKKyNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCisJaW50IGN1cnJfZnJhbWUgPSBjdXJyZW50LT5jdXJyX3JldF9zdGFjazsKKwlleHRlcm4gdm9pZCByZXR1cm5fdG9faGFuZGxlcih2b2lkKTsKKwl1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylyZXR1cm5fdG9faGFuZGxlcjsKKyNpZmRlZiBDT05GSUdfUFBDNjQKKwlhZGRyID0gKih1bnNpZ25lZCBsb25nKilhZGRyOworI2VuZGlmCisjZW5kaWYKIAogCXNwID0gKHVuc2lnbmVkIGxvbmcpIHN0YWNrOwogCWlmICh0c2sgPT0gTlVMTCkKQEAgLTEwMzAsNiArMTA0MSwxMyBAQAogCQlpcCA9IHN0YWNrW1NUQUNLX0ZSQU1FX0xSX1NBVkVdOwogCQlpZiAoIWZpcnN0ZnJhbWUgfHwgaXAgIT0gbHIpIHsKIAkJCXByaW50aygiWyJSRUciXSBbIlJFRyJdICVwUyIsIHNwLCBpcCwgKHZvaWQgKilpcCk7CisjaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgorCQkJaWYgKGlwID09IGFkZHIgJiYgY3Vycl9mcmFtZSA+PSAwKSB7CisJCQkJcHJpbnRrKCIgKCVwUykiLAorCQkJCSAgICAgICAodm9pZCAqKWN1cnJlbnQtPnJldF9zdGFja1tjdXJyX2ZyYW1lXS5yZXQpOworCQkJCWN1cnJfZnJhbWUtLTsKKwkJCX0KKyNlbmRpZgogCQkJaWYgKGZpcnN0ZnJhbWUpCiAJCQkJcHJpbnRrKCIgKHVucmVsaWFibGUpIik7CiAJCQlwcmludGsoIlxuIik7CkBAIC0xMTIyLDMgKzExNDAsNDMgQEAKIH0KIAogI2VuZGlmIC8qIFRIUkVBRF9TSElGVCA8IFBBR0VfU0hJRlQgKi8KKwordW5zaWduZWQgbG9uZyBhcmNoX2FsaWduX3N0YWNrKHVuc2lnbmVkIGxvbmcgc3ApCit7CisJaWYgKCEoY3VycmVudC0+cGVyc29uYWxpdHkgJiBBRERSX05PX1JBTkRPTUlaRSkgJiYgcmFuZG9taXplX3ZhX3NwYWNlKQorCQlzcCAtPSBnZXRfcmFuZG9tX2ludCgpICYgflBBR0VfTUFTSzsKKwlyZXR1cm4gc3AgJiB+MHhmOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgYnJrX3JuZCh2b2lkKQoreworICAgICAgICB1bnNpZ25lZCBsb25nIHJuZCA9IDA7CisKKwkvKiA4TUIgZm9yIDMyYml0LCAxR0IgZm9yIDY0Yml0ICovCisJaWYgKGlzXzMyYml0X3Rhc2soKSkKKwkJcm5kID0gKGxvbmcpKGdldF9yYW5kb21faW50KCkgJSAoMTw8KDIzLVBBR0VfU0hJRlQpKSk7CisJZWxzZQorCQlybmQgPSAobG9uZykoZ2V0X3JhbmRvbV9pbnQoKSAlICgxPDwoMzAtUEFHRV9TSElGVCkpKTsKKworCXJldHVybiBybmQgPDwgUEFHRV9TSElGVDsKK30KKwordW5zaWduZWQgbG9uZyBhcmNoX3JhbmRvbWl6ZV9icmsoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJdW5zaWduZWQgbG9uZyByZXQgPSBQQUdFX0FMSUdOKG1tLT5icmsgKyBicmtfcm5kKCkpOworCisJaWYgKHJldCA8IG1tLT5icmspCisJCXJldHVybiBtbS0+YnJrOworCisJcmV0dXJuIHJldDsKK30KKwordW5zaWduZWQgbG9uZyByYW5kb21pemVfZXRfZHluKHVuc2lnbmVkIGxvbmcgYmFzZSkKK3sKKwl1bnNpZ25lZCBsb25nIHJldCA9IFBBR0VfQUxJR04oYmFzZSArIGJya19ybmQoKSk7CisKKwlpZiAocmV0IDwgYmFzZSkKKwkJcmV0dXJuIGJhc2U7CisKKwlyZXR1cm4gcmV0OworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwppbmRleCBmMDBmODMxLi41ZWM2YTllIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb20uYwpAQCAtMTA3NSwxMSArMTA3NSw2IEBACiAJCURCRygicmVzZXJ2aW5nOiAlbGx4IC0+ICVsbHhcbiIsIGJhc2UsIHNpemUpOwogCQlsbWJfcmVzZXJ2ZShiYXNlLCBzaXplKTsKIAl9Ci0KLSNpZiAwCi0JREJHKCJtZW1vcnkgcmVzZXJ2ZWQsIGxtYnMgOlxuIik7Ci0gICAgICAJbG1iX2R1bXBfYWxsKCk7Ci0jZW5kaWYKIH0KIAogI2lmZGVmIENPTkZJR19QSFlQX0RVTVAKQEAgLTEyMjEsNiArMTIxNiw3IEBACiAJbG1iX2VuZm9yY2VfbWVtb3J5X2xpbWl0KGxpbWl0KTsKIAogCWxtYl9hbmFseXplKCk7CisJbG1iX2R1bXBfYWxsKCk7CiAKIAlEQkcoIlBoeXMuIG1lbTogJWx4XG4iLCBsbWJfcGh5c19tZW1fc2l6ZSgpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0LmMKaW5kZXggN2YxYjMzZC4uMmUwMjZjMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9wcm9tX2luaXQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdC5jCkBAIC0yMjgzLDYgKzIyODMsOCBAQAogCSAqLwogCXByb21faW5pdF9zdGRvdXQoKTsKIAorCXByb21fcHJpbnRmKCJQcmVwYXJpbmcgdG8gYm9vdCAlcyIsIFJFTE9DKGxpbnV4X2Jhbm5lcikpOworCiAJLyoKIAkgKiBHZXQgZGVmYXVsdCBtYWNoaW5lIHR5cGUuIEF0IHRoaXMgcG9pbnQsIHdlIGRvIG5vdCBkaWZmZXJlbnRpYXRlCiAJICogYmV0d2VlbiBwU2VyaWVzIFNNUCBhbmQgcFNlcmllcyBMUEFSCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3Byb21faW5pdF9jaGVjay5zaCBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0X2NoZWNrLnNoCmluZGV4IGVhM2EyZWMuLjFhYzEzNmIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0X2NoZWNrLnNoCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvcHJvbV9pbml0X2NoZWNrLnNoCkBAIC0yMCw3ICsyMCw3IEBACiBfZW5kIGVudGVyX3Byb20gbWVtY3B5IG1lbXNldCByZWxvY19vZmZzZXQgX19zZWNvbmRhcnlfaG9sZAogX19zZWNvbmRhcnlfaG9sZF9hY2tub3dsZWRnZSBfX3NlY29uZGFyeV9ob2xkX3NwaW5sb29wIF9fc3RhcnQKIHN0cmNtcCBzdHJjcHkgc3RybGNweSBzdHJsZW4gc3RybmNtcCBzdHJzdHIgbG9nb19saW51eF9jbHV0MjI0Ci1yZWxvY19nb3QyIGtlcm5zdGFydF9hZGRyIG1lbXN0YXJ0X2FkZHIiCityZWxvY19nb3QyIGtlcm5zdGFydF9hZGRyIG1lbXN0YXJ0X2FkZHIgbGludXhfYmFubmVyIgogCiBOTT0iJDEiCiBPQko9IiQyIgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYwppbmRleCBmZGZlMTRjLi5lZTRjNzYwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXMuYwpAQCAtNDYsNiArNDYsNyBAQAogCiBzdHJ1Y3QgcnRhc19zdXNwZW5kX21lX2RhdGEgewogCWF0b21pY190IHdvcmtpbmc7IC8qIG51bWJlciBvZiBjcHVzIGFjY2Vzc2luZyB0aGlzIHN0cnVjdCAqLworCWF0b21pY190IGRvbmU7CiAJaW50IHRva2VuOyAvKiBpYm0sc3VzcGVuZC1tZSAqLwogCWludCBlcnJvcjsKIAlzdHJ1Y3QgY29tcGxldGlvbiAqY29tcGxldGU7IC8qIHdhaXQgb24gdGhpcyB1bnRpbCB3b3JraW5nID09IDAgKi8KQEAgLTY4OSw3ICs2OTAsNyBAQAogI2lmZGVmIENPTkZJR19QUENfUFNFUklFUwogc3RhdGljIHZvaWQgcnRhc19wZXJjcHVfc3VzcGVuZF9tZSh2b2lkICppbmZvKQogewotCWxvbmcgcmM7CisJbG9uZyByYyA9IEhfU1VDQ0VTUzsKIAl1bnNpZ25lZCBsb25nIG1zcl9zYXZlOwogCWludCBjcHU7CiAJc3RydWN0IHJ0YXNfc3VzcGVuZF9tZV9kYXRhICpkYXRhID0KQEAgLTcwMSw3ICs3MDIsOCBAQAogCW1zcl9zYXZlID0gbWZtc3IoKTsKIAltdG1zcihtc3Jfc2F2ZSAmIH4oTVNSX0VFKSk7CiAKLQlyYyA9IHBscGFyX2hjYWxsX25vcmV0cyhIX0pPSU4pOworCXdoaWxlIChyYyA9PSBIX1NVQ0NFU1MgJiYgIWF0b21pY19yZWFkKCZkYXRhLT5kb25lKSkKKwkJcmMgPSBwbHBhcl9oY2FsbF9ub3JldHMoSF9KT0lOKTsKIAogCW10bXNyKG1zcl9zYXZlKTsKIApAQCAtNzI0LDYgKzcyNiw5IEBACiAJCSAgICAgICBzbXBfcHJvY2Vzc29yX2lkKCksIHJjKTsKIAkJZGF0YS0+ZXJyb3IgPSByYzsKIAl9CisKKwlhdG9taWNfc2V0KCZkYXRhLT5kb25lLCAxKTsKKwogCS8qIFRoaXMgY3B1IGRpZCB0aGUgc3VzcGVuZCBvciBnb3QgYW4gZXJyb3I7IGluIGVpdGhlciBjYXNlLAogCSAqIHdlIG5lZWQgdG8gcHJvZCBhbGwgb3RoZXIgb3RoZXIgY3B1cyBvdXQgb2Ygam9pbiBzdGF0ZS4KIAkgKiBFeHRyYSBwcm9kcyBhcmUgaGFybWxlc3MuCkBAIC03NjYsNiArNzcxLDcgQEAKIAl9CiAKIAlhdG9taWNfc2V0KCZkYXRhLndvcmtpbmcsIDApOworCWF0b21pY19zZXQoJmRhdGEuZG9uZSwgMCk7CiAJZGF0YS50b2tlbiA9IHJ0YXNfdG9rZW4oImlibSxzdXNwZW5kLW1lIik7CiAJZGF0YS5lcnJvciA9IDA7CiAJZGF0YS5jb21wbGV0ZSA9ICZkb25lOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9ydGFzX2ZsYXNoLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNfZmxhc2guYwppbmRleCAxNDljYjExLi4xMzAxMWE5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNfZmxhc2guYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3J0YXNfZmxhc2guYwpAQCAtNjY5LDcgKzY2OSw2IEBACiB7CiAJaWYgKGRwKSB7CiAJCWtmcmVlKGRwLT5kYXRhKTsKLQkJZHAtPm93bmVyID0gTlVMTDsKIAkJcmVtb3ZlX3Byb2NfZW50cnkoZHAtPm5hbWUsIGRwLT5wYXJlbnQpOwogCX0KIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwLWNvbW1vbi5jCmluZGV4IDcwNWZjNGIuLjk3NzRmOWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXAtY29tbW9uLmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cC1jb21tb24uYwpAQCAtMzUsNiArMzUsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2RlYnVnZnMuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KICNpbmNsdWRlIDxsaW51eC9sbWIuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgpAQCAtNjY5LDMgKzY3MSwzNyBAQAogfQogYXJjaF9pbml0Y2FsbChwb3dlcnBjX2RlYnVnZnNfaW5pdCk7CiAjZW5kaWYKKworc3RhdGljIGludCBwcGNfZGZsdF9idXNfbm90aWZ5KHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJdW5zaWduZWQgbG9uZyBhY3Rpb24sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRldmljZSAqZGV2ID0gZGF0YTsKKworCS8qIFdlIGFyZSBvbmx5IGludGVyZXRlZCBpbiBkZXZpY2UgYWRkaXRpb24gKi8KKwlpZiAoYWN0aW9uICE9IEJVU19OT1RJRllfQUREX0RFVklDRSkKKwkJcmV0dXJuIDA7CisKKwlzZXRfZG1hX29wcyhkZXYsICZkbWFfZGlyZWN0X29wcyk7CisKKwlyZXR1cm4gTk9USUZZX0RPTkU7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgcHBjX2RmbHRfcGxhdF9idXNfbm90aWZpZXIgPSB7CisJLm5vdGlmaWVyX2NhbGwgPSBwcGNfZGZsdF9idXNfbm90aWZ5LAorCS5wcmlvcml0eSA9IElOVF9NQVgsCit9OworCitzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHBwY19kZmx0X29mX2J1c19ub3RpZmllciA9IHsKKwkubm90aWZpZXJfY2FsbCA9IHBwY19kZmx0X2J1c19ub3RpZnksCisJLnByaW9yaXR5ID0gSU5UX01BWCwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IHNldHVwX2J1c19ub3RpZmllcih2b2lkKQoreworCWJ1c19yZWdpc3Rlcl9ub3RpZmllcigmcGxhdGZvcm1fYnVzX3R5cGUsICZwcGNfZGZsdF9wbGF0X2J1c19ub3RpZmllcik7CisJYnVzX3JlZ2lzdGVyX25vdGlmaWVyKCZvZl9wbGF0Zm9ybV9idXNfdHlwZSwgJnBwY19kZmx0X29mX2J1c19ub3RpZmllcik7CisKKwlyZXR1cm4gMDsKK30KKworYXJjaF9pbml0Y2FsbChzZXR1cF9idXNfbm90aWZpZXIpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zZXR1cF82NC5jCmluZGV4IDJkMzQxOTYuLmM0MTBjNjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2V0dXBfNjQuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NldHVwXzY0LmMKQEAgLTIwMiw4ICsyMDIsNiBAQAogCiAJLyogRml4IHVwIHBhY2EgZmllbGRzIHJlcXVpcmVkIGZvciB0aGUgYm9vdCBjcHUgKi8KIAlnZXRfcGFjYSgpLT5jcHVfc3RhcnQgPSAxOwotCWdldF9wYWNhKCktPnN0YWJfcmVhbCA9IF9fcGEoKHU2NCkmaW5pdGlhbF9zdGFiKTsKLQlnZXRfcGFjYSgpLT5zdGFiX2FkZHIgPSAodTY0KSZpbml0aWFsX3N0YWI7CiAKIAkvKiBQcm9iZSB0aGUgbWFjaGluZSB0eXBlICovCiAJcHJvYmVfbWFjaGluZSgpOwpAQCAtMjEyLDIwICsyMTAsOCBAQAogCiAJREJHKCJGb3VuZCwgSW5pdGlhbGl6aW5nIG1lbW9yeSBtYW5hZ2VtZW50Li4uXG4iKTsKIAotCS8qCi0JICogSW5pdGlhbGl6ZSB0aGUgTU1VIEhhc2ggdGFibGUgYW5kIGNyZWF0ZSB0aGUgbGluZWFyIG1hcHBpbmcKLQkgKiBvZiBtZW1vcnkuIEhhcyB0byBiZSBkb25lIGJlZm9yZSBzdGFiL3NsYiBpbml0aWFsaXphdGlvbiBhcwotCSAqIHRoaXMgaXMgY3VycmVudGx5IHdoZXJlIHRoZSBwYWdlIHNpemUgZW5jb2RpbmcgaXMgb2J0YWluZWQKLQkgKi8KLQlodGFiX2luaXRpYWxpemUoKTsKLQotCS8qCi0JICogSW5pdGlhbGl6ZSBzdGFiIC8gU0xCIG1hbmFnZW1lbnQgZXhjZXB0IG9uIGlTZXJpZXMKLQkgKi8KLQlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfU0xCKSkKLQkJc2xiX2luaXRpYWxpemUoKTsKLQllbHNlIGlmICghZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9JU0VSSUVTKSkKLQkJc3RhYl9pbml0aWFsaXplKGdldF9wYWNhKCktPnN0YWJfcmVhbCk7CisJLyogSW5pdGlhbGl6ZSB0aGUgaGFzaCB0YWJsZSBvciBUTEIgaGFuZGxpbmcgKi8KKwllYXJseV9pbml0X21tdSgpOwogCiAJREJHKCIgPC0gZWFybHlfc2V0dXAoKVxuIik7CiB9CkBAIC0yMzMsMjIgKzIxOSwxMSBAQAogI2lmZGVmIENPTkZJR19TTVAKIHZvaWQgZWFybHlfc2V0dXBfc2Vjb25kYXJ5KHZvaWQpCiB7Ci0Jc3RydWN0IHBhY2Ffc3RydWN0ICpscGFjYSA9IGdldF9wYWNhKCk7Ci0KIAkvKiBNYXJrIGludGVycnVwdHMgZW5hYmxlZCBpbiBQQUNBICovCi0JbHBhY2EtPnNvZnRfZW5hYmxlZCA9IDA7CisJZ2V0X3BhY2EoKS0+c29mdF9lbmFibGVkID0gMDsKIAotCS8qIEluaXRpYWxpemUgaGFzaCB0YWJsZSBmb3IgdGhhdCBDUFUgKi8KLQlodGFiX2luaXRpYWxpemVfc2Vjb25kYXJ5KCk7Ci0KLQkvKiBJbml0aWFsaXplIFNUQUIvU0xCLiBXZSB1c2UgYSB2aXJ0dWFsIGFkZHJlc3MgYXMgaXQgd29ya3MKLQkgKiBpbiByZWFsIG1vZGUgb24gcFNlcmllcyBhbmQgd2Ugd2FudCBhIHZpcnV0YWwgYWRkcmVzcyBvbgotCSAqIGlTZXJpZXMgYW55d2F5Ci0JICovCi0JaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1NMQikpCi0JCXNsYl9pbml0aWFsaXplKCk7Ci0JZWxzZQotCQlzdGFiX2luaXRpYWxpemUobHBhY2EtPnN0YWJfYWRkcik7CisJLyogSW5pdGlhbGl6ZSB0aGUgaGFzaCB0YWJsZSBvciBUTEIgaGFuZGxpbmcgKi8KKwllYXJseV9pbml0X21tdV9zZWNvbmRhcnkoKTsKIH0KIAogI2VuZGlmIC8qIENPTkZJR19TTVAgKi8KQEAgLTU3OCwxMyArNTUzLDYgQEAKIAlwcmludGsoIltib290XSUwNHggJXNcbiIsIHNyYywgbXNnKTsKIH0KIAotLyogUHJpbnQgYSB0ZXJtaW5hdGlvbiBtZXNzYWdlIChwcmludCBvbmx5IC0tIGRvZXMgbm90IHN0b3AgdGhlIGtlcm5lbCkgKi8KLXZvaWQgcHBjNjRfdGVybWluYXRlX21zZyh1bnNpZ25lZCBpbnQgc3JjLCBjb25zdCBjaGFyICptc2cpCi17Ci0JcHBjNjRfZG9fbXNnKFBQQzY0X0xJTlVYX0ZVTkNUSU9OfFBQQzY0X1RFUk1fTUVTU0FHRXxzcmMsIG1zZyk7Ci0JcHJpbnRrKCJbdGVybWluYXRlXSUwNHggJXNcbiIsIHNyYywgbXNnKTsKLX0KLQogdm9pZCBjcHVfZGllKHZvaWQpCiB7CiAJaWYgKHBwY19tZC5jcHVfZGllKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWwuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsLmMKaW5kZXggYTU0NDA1ZS4uMDBiNTA3OCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWwuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbC5jCkBAIC0yNiwxMiArMjYsMTIgQEAKICAqIEFsbG9jYXRlIHNwYWNlIGZvciB0aGUgc2lnbmFsIGZyYW1lCiAgKi8KIHZvaWQgX191c2VyICogZ2V0X3NpZ2ZyYW1lKHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQkJICAgc2l6ZV90IGZyYW1lX3NpemUpCisJCQkgICBzaXplX3QgZnJhbWVfc2l6ZSwgaW50IGlzXzMyKQogewogICAgICAgICB1bnNpZ25lZCBsb25nIG9sZHNwLCBuZXdzcDsKIAogICAgICAgICAvKiBEZWZhdWx0IHRvIHVzaW5nIG5vcm1hbCBzdGFjayAqLwotICAgICAgICBvbGRzcCA9IHJlZ3MtPmdwclsxXTsKKyAgICAgICAgb2xkc3AgPSBnZXRfY2xlYW5fc3AocmVncywgaXNfMzIpOwogCiAJLyogQ2hlY2sgZm9yIGFsdCBzdGFjayAqLwogCWlmICgoa2EtPnNhLnNhX2ZsYWdzICYgU0FfT05TVEFDSykgJiYKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsLmggYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbC5oCmluZGV4IGI0MjdiZjguLjZjMGRkZmMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsLmgKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWwuaApAQCAtMTUsNyArMTUsNyBAQAogZXh0ZXJuIHZvaWQgZG9fc2lnbmFsKHN0cnVjdCBwdF9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIHRocmVhZF9pbmZvX2ZsYWdzKTsKIAogZXh0ZXJuIHZvaWQgX191c2VyICogZ2V0X3NpZ2ZyYW1lKHN0cnVjdCBrX3NpZ2FjdGlvbiAqa2EsIHN0cnVjdCBwdF9yZWdzICpyZWdzLAotCQkJCSAgc2l6ZV90IGZyYW1lX3NpemUpOworCQkJCSAgc2l6ZV90IGZyYW1lX3NpemUsIGludCBpc18zMik7CiBleHRlcm4gdm9pZCByZXN0b3JlX3NpZ21hc2soc2lnc2V0X3QgKnNldCk7CiAKIGV4dGVybiBpbnQgaGFuZGxlX3NpZ25hbDMyKHVuc2lnbmVkIGxvbmcgc2lnLCBzdHJ1Y3Qga19zaWdhY3Rpb24gKmthLApAQCAtMzksMjIgKzM5LDEyIEBACiAKICNpZmRlZiBDT05GSUdfUFBDNjQKIAotc3RhdGljIGlubGluZSBpbnQgaXNfMzJiaXRfdGFzayh2b2lkKQotewotCXJldHVybiB0ZXN0X3RocmVhZF9mbGFnKFRJRl8zMkJJVCk7Ci19Ci0KIGV4dGVybiBpbnQgaGFuZGxlX3J0X3NpZ25hbDY0KGludCBzaWduciwgc3RydWN0IGtfc2lnYWN0aW9uICprYSwKIAkJCSAgICAgIHNpZ2luZm9fdCAqaW5mbywgc2lnc2V0X3QgKnNldCwKIAkJCSAgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKIAogI2Vsc2UgLyogQ09ORklHX1BQQzY0ICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IGlzXzMyYml0X3Rhc2sodm9pZCkKLXsKLQlyZXR1cm4gMTsKLX0KLQogc3RhdGljIGlubGluZSBpbnQgaGFuZGxlX3J0X3NpZ25hbDY0KGludCBzaWduciwgc3RydWN0IGtfc2lnYWN0aW9uICprYSwKIAkJCQkgICAgIHNpZ2luZm9fdCAqaW5mbywgc2lnc2V0X3QgKnNldCwKIAkJCQkgICAgIHN0cnVjdCBwdF9yZWdzICpyZWdzKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzMyLmMKaW5kZXggYjEzYWJmMy4uZDY3MDQyOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfMzIuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF8zMi5jCkBAIC04MzYsNyArODM2LDcgQEAKIAogCS8qIFNldCB1cCBTaWduYWwgRnJhbWUgKi8KIAkvKiBQdXQgYSBSZWFsIFRpbWUgQ29udGV4dCBvbnRvIHN0YWNrICovCi0JcnRfc2YgPSBnZXRfc2lnZnJhbWUoa2EsIHJlZ3MsIHNpemVvZigqcnRfc2YpKTsKKwlydF9zZiA9IGdldF9zaWdmcmFtZShrYSwgcmVncywgc2l6ZW9mKCpydF9zZiksIDEpOwogCWFkZHIgPSBydF9zZjsKIAlpZiAodW5saWtlbHkocnRfc2YgPT0gTlVMTCkpCiAJCWdvdG8gYmFkZnJhbWU7CkBAIC0xMTgyLDcgKzExODIsNyBAQAogCXVuc2lnbmVkIGxvbmcgbmV3c3AgPSAwOwogCiAJLyogU2V0IHVwIFNpZ25hbCBGcmFtZSAqLwotCWZyYW1lID0gZ2V0X3NpZ2ZyYW1lKGthLCByZWdzLCBzaXplb2YoKmZyYW1lKSk7CisJZnJhbWUgPSBnZXRfc2lnZnJhbWUoa2EsIHJlZ3MsIHNpemVvZigqZnJhbWUpLCAxKTsKIAlpZiAodW5saWtlbHkoZnJhbWUgPT0gTlVMTCkpCiAJCWdvdG8gYmFkZnJhbWU7CiAJc2MgPSAoc3RydWN0IHNpZ2NvbnRleHQgX191c2VyICopICZmcmFtZS0+c2N0eDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzY0LmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3NpZ25hbF82NC5jCmluZGV4IGUxMzI4OTEuLjJmZTZmYzYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc2lnbmFsXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zaWduYWxfNjQuYwpAQCAtNDAyLDcgKzQwMiw3IEBACiAJdW5zaWduZWQgbG9uZyBuZXdzcCA9IDA7CiAJbG9uZyBlcnIgPSAwOwogCi0JZnJhbWUgPSBnZXRfc2lnZnJhbWUoa2EsIHJlZ3MsIHNpemVvZigqZnJhbWUpKTsKKwlmcmFtZSA9IGdldF9zaWdmcmFtZShrYSwgcmVncywgc2l6ZW9mKCpmcmFtZSksIDApOwogCWlmICh1bmxpa2VseShmcmFtZSA9PSBOVUxMKSkKIAkJZ290byBiYWRmcmFtZTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC9zeXNmcy5jCmluZGV4IDRhMmVlMDguLmY0MWFlYzggMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvc3lzZnMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3N5c2ZzLmMKQEAgLTEzNCw0NCArMTM0LDIzIEBACiB9CiBFWFBPUlRfU1lNQk9MKHBwY19lbmFibGVfcG1jcyk7CiAKLSNpZiBkZWZpbmVkKENPTkZJR182eHgpIHx8IGRlZmluZWQoQ09ORklHX1BQQzY0KQotLyogWFhYIGNvbnZlcnQgdG8gcnVzdHkncyBvbl9vbmVfY3B1ICovCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBydW5fb25fY3B1KHVuc2lnbmVkIGxvbmcgY3B1LAotCQkJICAgICAgICB1bnNpZ25lZCBsb25nICgqZnVuYykodW5zaWduZWQgbG9uZyksCi0JCQkJdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0JY3B1bWFza190IG9sZF9hZmZpbml0eSA9IGN1cnJlbnQtPmNwdXNfYWxsb3dlZDsKLQl1bnNpZ25lZCBsb25nIHJldDsKLQotCS8qIHNob3VsZCByZXR1cm4gLUVJTlZBTCB0byB1c2Vyc3BhY2UgKi8KLQlpZiAoc2V0X2NwdXNfYWxsb3dlZChjdXJyZW50LCBjcHVtYXNrX29mX2NwdShjcHUpKSkKLQkJcmV0dXJuIDA7Ci0KLQlyZXQgPSBmdW5jKGFyZyk7Ci0KLQlzZXRfY3B1c19hbGxvd2VkKGN1cnJlbnQsIG9sZF9hZmZpbml0eSk7Ci0KLQlyZXR1cm4gcmV0OwotfQotI2VuZGlmCi0KICNkZWZpbmUgU1lTRlNfUE1DU0VUVVAoTkFNRSwgQUREUkVTUykgXAotc3RhdGljIHVuc2lnbmVkIGxvbmcgcmVhZF8jI05BTUUodW5zaWduZWQgbG9uZyBqdW5rKSBcCitzdGF0aWMgdm9pZCByZWFkXyMjTkFNRSh2b2lkICp2YWwpIFwKIHsgXAotCXJldHVybiBtZnNwcihBRERSRVNTKTsgXAorCSoodW5zaWduZWQgbG9uZyAqKXZhbCA9IG1mc3ByKEFERFJFU1MpOwlcCiB9IFwKLXN0YXRpYyB1bnNpZ25lZCBsb25nIHdyaXRlXyMjTkFNRSh1bnNpZ25lZCBsb25nIHZhbCkgXAorc3RhdGljIHZvaWQgd3JpdGVfIyNOQU1FKHZvaWQgKnZhbCkgXAogeyBcCiAJcHBjX2VuYWJsZV9wbWNzKCk7IFwKLQltdHNwcihBRERSRVNTLCB2YWwpOyBcCi0JcmV0dXJuIDA7IFwKKwltdHNwcihBRERSRVNTLCAqKHVuc2lnbmVkIGxvbmcgKil2YWwpOwlcCiB9IFwKIHN0YXRpYyBzc2l6ZV90IHNob3dfIyNOQU1FKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIFwKIAkJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLCBcCiAJCQljaGFyICpidWYpIFwKIHsgXAogCXN0cnVjdCBjcHUgKmNwdSA9IGNvbnRhaW5lcl9vZihkZXYsIHN0cnVjdCBjcHUsIHN5c2Rldik7IFwKLQl1bnNpZ25lZCBsb25nIHZhbCA9IHJ1bl9vbl9jcHUoY3B1LT5zeXNkZXYuaWQsIHJlYWRfIyNOQU1FLCAwKTsgXAorCXVuc2lnbmVkIGxvbmcgdmFsOyBcCisJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdS0+c3lzZGV2LmlkLCByZWFkXyMjTkFNRSwgJnZhbCwgMSk7CVwKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlbHhcbiIsIHZhbCk7IFwKIH0gXAogc3RhdGljIHNzaXplX3QgX191c2VkIFwKQEAgLTE4Myw3ICsxNjIsNyBAQAogCWludCByZXQgPSBzc2NhbmYoYnVmLCAiJWx4IiwgJnZhbCk7IFwKIAlpZiAocmV0ICE9IDEpIFwKIAkJcmV0dXJuIC1FSU5WQUw7IFwKLQlydW5fb25fY3B1KGNwdS0+c3lzZGV2LmlkLCB3cml0ZV8jI05BTUUsIHZhbCk7IFwKKwlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoY3B1LT5zeXNkZXYuaWQsIHdyaXRlXyMjTkFNRSwgJnZhbCwgMSk7IFwKIAlyZXR1cm4gY291bnQ7IFwKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFwcy5jCmluZGV4IDU0NTdlOTUuLjY3OGZiZmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdHJhcHMuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3RyYXBzLmMKQEAgLTUyLDYgKzUyLDEwIEBACiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2VuZGlmCiAjaW5jbHVkZSA8YXNtL2tleGVjLmg+CisjaW5jbHVkZSA8YXNtL3BwYy1vcGNvZGUuaD4KKyNpZmRlZiBDT05GSUdfRlNMX0JPT0tFCisjaW5jbHVkZSA8YXNtL2RiZWxsLmg+CisjZW5kaWYKIAogI2lmIGRlZmluZWQoQ09ORklHX0RFQlVHR0VSKSB8fCBkZWZpbmVkKENPTkZJR19LRVhFQykKIGludCAoKl9fZGVidWdnZXIpKHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKQEAgLTYzNywyOSArNjQxLDYgQEAKICAqIGJpdHMgaXMgZmFzdGVyIGFuZCBlYXNpZXIuCiAgKgogICovCi0jZGVmaW5lIElOU1RfTUZTUFJfUFZSCQkweDdjMWY0MmE2Ci0jZGVmaW5lIElOU1RfTUZTUFJfUFZSX01BU0sJMHhmYzFmZmZmZgotCi0jZGVmaW5lIElOU1RfRENCQQkJMHg3YzAwMDVlYwotI2RlZmluZSBJTlNUX0RDQkFfTUFTSwkJMHhmYzAwMDdmZQotCi0jZGVmaW5lIElOU1RfTUNSWFIJCTB4N2MwMDA0MDAKLSNkZWZpbmUgSU5TVF9NQ1JYUl9NQVNLCQkweGZjMDAwN2ZlCi0KLSNkZWZpbmUgSU5TVF9TVFJJTkcJCTB4N2MwMDA0MmEKLSNkZWZpbmUgSU5TVF9TVFJJTkdfTUFTSwkweGZjMDAwN2ZlCi0jZGVmaW5lIElOU1RfU1RSSU5HX0dFTl9NQVNLCTB4ZmMwMDA2N2UKLSNkZWZpbmUgSU5TVF9MU1dJCQkweDdjMDAwNGFhCi0jZGVmaW5lIElOU1RfTFNXWAkJMHg3YzAwMDQyYQotI2RlZmluZSBJTlNUX1NUU1dJCQkweDdjMDAwNWFhCi0jZGVmaW5lIElOU1RfU1RTV1gJCTB4N2MwMDA1MmEKLQotI2RlZmluZSBJTlNUX1BPUENOVEIJCTB4N2MwMDAwZjQKLSNkZWZpbmUgSU5TVF9QT1BDTlRCX01BU0sJMHhmYzAwMDdmZQotCi0jZGVmaW5lIElOU1RfSVNFTAkJMHg3YzAwMDAxZQotI2RlZmluZSBJTlNUX0lTRUxfTUFTSwkJMHhmYzAwMDAzZQotCiBzdGF0aWMgaW50IGVtdWxhdGVfc3RyaW5nX2luc3Qoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHUzMiBpbnN0d29yZCkKIHsKIAl1OCByVCA9IChpbnN0d29yZCA+PiAyMSkgJiAweDFmOwpAQCAtNjcwLDIwICs2NTEsMjAgQEAKIAlpbnQgcG9zID0gMDsKIAogCS8qIEVhcmx5IG91dCBpZiB3ZSBhcmUgYW4gaW52YWxpZCBmb3JtIG9mIGxzd3ggKi8KLQlpZiAoKGluc3R3b3JkICYgSU5TVF9TVFJJTkdfTUFTSykgPT0gSU5TVF9MU1dYKQorCWlmICgoaW5zdHdvcmQgJiBQUENfSU5TVF9TVFJJTkdfTUFTSykgPT0gUFBDX0lOU1RfTFNXWCkKIAkJaWYgKChyVCA9PSByQSkgfHwgKHJUID09IE5CX1JCKSkKIAkJCXJldHVybiAtRUlOVkFMOwogCiAJRUEgPSAockEgPT0gMCkgPyAwIDogcmVncy0+Z3ByW3JBXTsKIAotCXN3aXRjaCAoaW5zdHdvcmQgJiBJTlNUX1NUUklOR19NQVNLKSB7Ci0JCWNhc2UgSU5TVF9MU1dYOgotCQljYXNlIElOU1RfU1RTV1g6CisJc3dpdGNoIChpbnN0d29yZCAmIFBQQ19JTlNUX1NUUklOR19NQVNLKSB7CisJCWNhc2UgUFBDX0lOU1RfTFNXWDoKKwkJY2FzZSBQUENfSU5TVF9TVFNXWDoKIAkJCUVBICs9IE5CX1JCOwogCQkJbnVtX2J5dGVzID0gcmVncy0+eGVyICYgMHg3ZjsKIAkJCWJyZWFrOwotCQljYXNlIElOU1RfTFNXSToKLQkJY2FzZSBJTlNUX1NUU1dJOgorCQljYXNlIFBQQ19JTlNUX0xTV0k6CisJCWNhc2UgUFBDX0lOU1RfU1RTV0k6CiAJCQludW1fYnl0ZXMgPSAoTkJfUkIgPT0gMCkgPyAzMiA6IE5CX1JCOwogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CkBAIC02OTUsOSArNjc2LDkgQEAKIAkJdTggdmFsOwogCQl1MzIgc2hpZnQgPSA4ICogKDMgLSAocG9zICYgMHgzKSk7CiAKLQkJc3dpdGNoICgoaW5zdHdvcmQgJiBJTlNUX1NUUklOR19NQVNLKSkgewotCQkJY2FzZSBJTlNUX0xTV1g6Ci0JCQljYXNlIElOU1RfTFNXSToKKwkJc3dpdGNoICgoaW5zdHdvcmQgJiBQUENfSU5TVF9TVFJJTkdfTUFTSykpIHsKKwkJCWNhc2UgUFBDX0lOU1RfTFNXWDoKKwkJCWNhc2UgUFBDX0lOU1RfTFNXSToKIAkJCQlpZiAoZ2V0X3VzZXIodmFsLCAodTggX191c2VyICopRUEpKQogCQkJCQlyZXR1cm4gLUVGQVVMVDsKIAkJCQkvKiBmaXJzdCB0aW1lIHVwZGF0aW5nIHRoaXMgcmVnLApAQCAtNzA2LDggKzY4Nyw4IEBACiAJCQkJCXJlZ3MtPmdwcltyVF0gPSAwOwogCQkJCXJlZ3MtPmdwcltyVF0gfD0gdmFsIDw8IHNoaWZ0OwogCQkJCWJyZWFrOwotCQkJY2FzZSBJTlNUX1NUU1dJOgotCQkJY2FzZSBJTlNUX1NUU1dYOgorCQkJY2FzZSBQUENfSU5TVF9TVFNXSToKKwkJCWNhc2UgUFBDX0lOU1RfU1RTV1g6CiAJCQkJdmFsID0gcmVncy0+Z3ByW3JUXSA+PiBzaGlmdDsKIAkJCQlpZiAocHV0X3VzZXIodmFsLCAodTggX191c2VyICopRUEpKQogCQkJCQlyZXR1cm4gLUVGQVVMVDsKQEAgLTc3NSwxOCArNzU2LDE4IEBACiAJCXJldHVybiAtRUZBVUxUOwogCiAJLyogRW11bGF0ZSB0aGUgbWZzcHIgckQsIFBWUi4gKi8KLQlpZiAoKGluc3R3b3JkICYgSU5TVF9NRlNQUl9QVlJfTUFTSykgPT0gSU5TVF9NRlNQUl9QVlIpIHsKKwlpZiAoKGluc3R3b3JkICYgUFBDX0lOU1RfTUZTUFJfUFZSX01BU0spID09IFBQQ19JTlNUX01GU1BSX1BWUikgewogCQlyZCA9IChpbnN0d29yZCA+PiAyMSkgJiAweDFmOwogCQlyZWdzLT5ncHJbcmRdID0gbWZzcHIoU1BSTl9QVlIpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAkvKiBFbXVsYXRpbmcgdGhlIGRjYmEgaW5zbiBpcyBqdXN0IGEgbm8tb3AuICAqLwotCWlmICgoaW5zdHdvcmQgJiBJTlNUX0RDQkFfTUFTSykgPT0gSU5TVF9EQ0JBKQorCWlmICgoaW5zdHdvcmQgJiBQUENfSU5TVF9EQ0JBX01BU0spID09IFBQQ19JTlNUX0RDQkEpCiAJCXJldHVybiAwOwogCiAJLyogRW11bGF0ZSB0aGUgbWNyeHIgaW5zbi4gICovCi0JaWYgKChpbnN0d29yZCAmIElOU1RfTUNSWFJfTUFTSykgPT0gSU5TVF9NQ1JYUikgeworCWlmICgoaW5zdHdvcmQgJiBQUENfSU5TVF9NQ1JYUl9NQVNLKSA9PSBQUENfSU5TVF9NQ1JYUikgewogCQlpbnQgc2hpZnQgPSAoaW5zdHdvcmQgPj4gMjEpICYgMHgxYzsKIAkJdW5zaWduZWQgbG9uZyBtc2sgPSAweGYwMDAwMDAwVUwgPj4gc2hpZnQ7CiAKQEAgLTc5NiwxNiArNzc3LDE2IEBACiAJfQogCiAJLyogRW11bGF0ZSBsb2FkL3N0b3JlIHN0cmluZyBpbnNuLiAqLwotCWlmICgoaW5zdHdvcmQgJiBJTlNUX1NUUklOR19HRU5fTUFTSykgPT0gSU5TVF9TVFJJTkcpCisJaWYgKChpbnN0d29yZCAmIFBQQ19JTlNUX1NUUklOR19HRU5fTUFTSykgPT0gUFBDX0lOU1RfU1RSSU5HKQogCQlyZXR1cm4gZW11bGF0ZV9zdHJpbmdfaW5zdChyZWdzLCBpbnN0d29yZCk7CiAKIAkvKiBFbXVsYXRlIHRoZSBwb3BjbnRiIChQb3B1bGF0aW9uIENvdW50IEJ5dGVzKSBpbnN0cnVjdGlvbi4gKi8KLQlpZiAoKGluc3R3b3JkICYgSU5TVF9QT1BDTlRCX01BU0spID09IElOU1RfUE9QQ05UQikgeworCWlmICgoaW5zdHdvcmQgJiBQUENfSU5TVF9QT1BDTlRCX01BU0spID09IFBQQ19JTlNUX1BPUENOVEIpIHsKIAkJcmV0dXJuIGVtdWxhdGVfcG9wY250Yl9pbnN0KHJlZ3MsIGluc3R3b3JkKTsKIAl9CiAKIAkvKiBFbXVsYXRlIGlzZWwgKEludGVnZXIgU2VsZWN0KSBpbnN0cnVjdGlvbiAqLwotCWlmICgoaW5zdHdvcmQgJiBJTlNUX0lTRUxfTUFTSykgPT0gSU5TVF9JU0VMKSB7CisJaWYgKChpbnN0d29yZCAmIFBQQ19JTlNUX0lTRUxfTUFTSykgPT0gUFBDX0lOU1RfSVNFTCkgewogCQlyZXR1cm4gZW11bGF0ZV9pc2VsKHJlZ3MsIGluc3R3b3JkKTsKIAl9CiAKQEAgLTExNDQsNiArMTEyNSwyNCBAQAogI2VuZGlmIC8qIENPTkZJR19WU1ggKi8KIAogI2lmZGVmIENPTkZJR19GU0xfQk9PS0UKKwordm9pZCBkb29yYmVsbF9leGNlcHRpb24oc3RydWN0IHB0X3JlZ3MgKnJlZ3MpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCWludCBjcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaW50IG1zZzsKKworCWlmIChudW1fb25saW5lX2NwdXMoKSA8IDIpCisJCXJldHVybjsKKworCWZvciAobXNnID0gMDsgbXNnIDwgNDsgbXNnKyspCisJCWlmICh0ZXN0X2FuZF9jbGVhcl9iaXQobXNnLCAmZGJlbGxfc21wX21lc3NhZ2VbY3B1XSkpCisJCQlzbXBfbWVzc2FnZV9yZWN2KG1zZyk7CisjZWxzZQorCXByaW50ayhLRVJOX1dBUk5JTkcgIlJlY2VpdmVkIGRvb3JiZWxsIG9uIG5vbi1zbXAgc3lzdGVtXG4iKTsKKyNlbmRpZgorfQorCiB2b2lkIENhY2hlTG9ja2luZ0V4Y2VwdGlvbihzdHJ1Y3QgcHRfcmVncyAqcmVncywgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCQkJICAgdW5zaWduZWQgbG9uZyBlcnJvcl9jb2RlKQogewpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2tlcm5lbC91ZGJnLmMgYi9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmcuYwppbmRleCA3ZDZjOWJiLi5mYzlhZjQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmcuYworKysgYi9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmcuYwpAQCAtMTgsNiArMTgsNyBAQAogI2luY2x1ZGUgPGFzbS91ZGJnLmg+CiAKIHZvaWQgKCp1ZGJnX3B1dGMpKGNoYXIgYyk7Cit2b2lkICgqdWRiZ19mbHVzaCkodm9pZCk7CiBpbnQgKCp1ZGJnX2dldGMpKHZvaWQpOwogaW50ICgqdWRiZ19nZXRjX3BvbGwpKHZvaWQpOwogCkBAIC03Niw2ICs3Nyw5IEBACiAJCQl3aGlsZSAoKGMgPSAqcysrKSAhPSAnXDAnKQogCQkJCXVkYmdfcHV0YyhjKTsKIAkJfQorCisJCWlmICh1ZGJnX2ZsdXNoKQorCQkJdWRiZ19mbHVzaCgpOwogCX0KICNpZiAwCiAJZWxzZSB7CkBAIC05OCw2ICsxMDIsOSBAQAogCQl9CiAJfQogCisJaWYgKHVkYmdfZmx1c2gpCisJCXVkYmdfZmx1c2goKTsKKwogCXJldHVybiBuIC0gcmVtYWluOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMva2VybmVsL3VkYmdfMTY1NTAuYyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ18xNjU1MC5jCmluZGV4IDdiN2RhOGMuLjAzNjJhODkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ18xNjU1MC5jCisrKyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdWRiZ18xNjU1MC5jCkBAIC00OCwxNCArNDgsMjEgQEAKIAogc3RhdGljIHN0cnVjdCBOUzE2NTUwIF9faW9tZW0gKnVkYmdfY29tcG9ydDsKIAotc3RhdGljIHZvaWQgdWRiZ181NTBfcHV0YyhjaGFyIGMpCitzdGF0aWMgdm9pZCB1ZGJnXzU1MF9mbHVzaCh2b2lkKQogewogCWlmICh1ZGJnX2NvbXBvcnQpIHsKIAkJd2hpbGUgKChpbl84KCZ1ZGJnX2NvbXBvcnQtPmxzcikgJiBMU1JfVEhSRSkgPT0gMCkKIAkJCS8qIHdhaXQgZm9yIGlkbGUgKi87Ci0JCW91dF84KCZ1ZGJnX2NvbXBvcnQtPnRociwgYyk7CisJfQorfQorCitzdGF0aWMgdm9pZCB1ZGJnXzU1MF9wdXRjKGNoYXIgYykKK3sKKwlpZiAodWRiZ19jb21wb3J0KSB7CiAJCWlmIChjID09ICdcbicpCiAJCQl1ZGJnXzU1MF9wdXRjKCdccicpOworCQl1ZGJnXzU1MF9mbHVzaCgpOworCQlvdXRfOCgmdWRiZ19jb21wb3J0LT50aHIsIGMpOwogCX0KIH0KIApAQCAtMTA4LDYgKzExNSw3IEBACiAJCS8qIENsZWFyICYgZW5hYmxlIEZJRk9zICovCiAJCW91dF84KCZ1ZGJnX2NvbXBvcnQtPmZjciAsMHgwNyk7CiAJCXVkYmdfcHV0YyA9IHVkYmdfNTUwX3B1dGM7CisJCXVkYmdfZmx1c2ggPSB1ZGJnXzU1MF9mbHVzaDsKIAkJdWRiZ19nZXRjID0gdWRiZ181NTBfZ2V0YzsKIAkJdWRiZ19nZXRjX3BvbGwgPSB1ZGJnXzU1MF9nZXRjX3BvbGw7CiAJfQpAQCAtMTQ5LDE0ICsxNTcsMjEgQEAKIH0KIAogI2lmZGVmIENPTkZJR19QUENfTUFQTEUKLXZvaWQgdWRiZ19tYXBsZV9yZWFsX3B1dGMoY2hhciBjKQordm9pZCB1ZGJnX21hcGxlX3JlYWxfZmx1c2godm9pZCkKIHsKIAlpZiAodWRiZ19jb21wb3J0KSB7CiAJCXdoaWxlICgocmVhbF9yZWFkYigmdWRiZ19jb21wb3J0LT5sc3IpICYgTFNSX1RIUkUpID09IDApCiAJCQkvKiB3YWl0IGZvciBpZGxlICovOwotCQlyZWFsX3dyaXRlYihjLCAmdWRiZ19jb21wb3J0LT50aHIpOyBlaWVpbygpOworCX0KK30KKwordm9pZCB1ZGJnX21hcGxlX3JlYWxfcHV0YyhjaGFyIGMpCit7CisJaWYgKHVkYmdfY29tcG9ydCkgewogCQlpZiAoYyA9PSAnXG4nKQogCQkJdWRiZ19tYXBsZV9yZWFsX3B1dGMoJ1xyJyk7CisJCXVkYmdfbWFwbGVfcmVhbF9mbHVzaCgpOworCQlyZWFsX3dyaXRlYihjLCAmdWRiZ19jb21wb3J0LT50aHIpOyBlaWVpbygpOwogCX0KIH0KIApAQCAtMTY1LDIwICsxODAsMjggQEAKIAl1ZGJnX2NvbXBvcnQgPSAoc3RydWN0IE5TMTY1NTAgX19pb21lbSAqKTB4ZjQwMDAzZjg7CiAKIAl1ZGJnX3B1dGMgPSB1ZGJnX21hcGxlX3JlYWxfcHV0YzsKKwl1ZGJnX2ZsdXNoID0gdWRiZ19tYXBsZV9yZWFsX2ZsdXNoOwogCXVkYmdfZ2V0YyA9IE5VTEw7CiAJdWRiZ19nZXRjX3BvbGwgPSBOVUxMOwogfQogI2VuZGlmIC8qIENPTkZJR19QUENfTUFQTEUgKi8KIAogI2lmZGVmIENPTkZJR19QUENfUEFTRU1JCi12b2lkIHVkYmdfcGFzX3JlYWxfcHV0YyhjaGFyIGMpCit2b2lkIHVkYmdfcGFzX3JlYWxfZmx1c2godm9pZCkKIHsKIAlpZiAodWRiZ19jb21wb3J0KSB7CiAJCXdoaWxlICgocmVhbF8yMDVfcmVhZGIoJnVkYmdfY29tcG9ydC0+bHNyKSAmIExTUl9USFJFKSA9PSAwKQogCQkJLyogd2FpdCBmb3IgaWRsZSAqLzsKLQkJcmVhbF8yMDVfd3JpdGViKGMsICZ1ZGJnX2NvbXBvcnQtPnRocik7IGVpZWlvKCk7CisJfQorfQorCit2b2lkIHVkYmdfcGFzX3JlYWxfcHV0YyhjaGFyIGMpCit7CisJaWYgKHVkYmdfY29tcG9ydCkgewogCQlpZiAoYyA9PSAnXG4nKQogCQkJdWRiZ19wYXNfcmVhbF9wdXRjKCdccicpOworCQl1ZGJnX3Bhc19yZWFsX2ZsdXNoKCk7CisJCXJlYWxfMjA1X3dyaXRlYihjLCAmdWRiZ19jb21wb3J0LT50aHIpOyBlaWVpbygpOwogCX0KIH0KIApAQCAtMTg3LDYgKzIxMCw3IEBACiAJdWRiZ19jb21wb3J0ID0gKHN0cnVjdCBOUzE2NTUwIF9faW9tZW0gKikweGZjZmYwM2Y4VUw7CiAKIAl1ZGJnX3B1dGMgPSB1ZGJnX3Bhc19yZWFsX3B1dGM7CisJdWRiZ19mbHVzaCA9IHVkYmdfcGFzX3JlYWxfZmx1c2g7CiAJdWRiZ19nZXRjID0gTlVMTDsKIAl1ZGJnX2dldGNfcG9sbCA9IE5VTEw7CiB9CkBAIC0xOTUsMTQgKzIxOSwyMSBAQAogI2lmZGVmIENPTkZJR19QUENfRUFSTFlfREVCVUdfNDR4CiAjaW5jbHVkZSA8cGxhdGZvcm1zLzQ0eC80NHguaD4KIAotc3RhdGljIHZvaWQgdWRiZ180NHhfYXMxX3B1dGMoY2hhciBjKQorc3RhdGljIGludCB1ZGJnXzQ0eF9hczFfZmx1c2godm9pZCkKIHsKIAlpZiAodWRiZ19jb21wb3J0KSB7CiAJCXdoaWxlICgoYXMxX3JlYWRiKCZ1ZGJnX2NvbXBvcnQtPmxzcikgJiBMU1JfVEhSRSkgPT0gMCkKIAkJCS8qIHdhaXQgZm9yIGlkbGUgKi87Ci0JCWFzMV93cml0ZWIoYywgJnVkYmdfY29tcG9ydC0+dGhyKTsgZWllaW8oKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVkYmdfNDR4X2FzMV9wdXRjKGNoYXIgYykKK3sKKwlpZiAodWRiZ19jb21wb3J0KSB7CiAJCWlmIChjID09ICdcbicpCiAJCQl1ZGJnXzQ0eF9hczFfcHV0YygnXHInKTsKKwkJdWRiZ180NHhfYXMxX2ZsdXNoKCk7CisJCWFzMV93cml0ZWIoYywgJnVkYmdfY29tcG9ydC0+dGhyKTsgZWllaW8oKTsKIAl9CiB9CiAKQEAgLTIyMiwxOSArMjUzLDI3IEBACiAJCShzdHJ1Y3QgTlMxNjU1MCBfX2lvbWVtICopUFBDNDR4X0VBUkxZX0RFQlVHX1ZJUlRBRERSOwogCiAJdWRiZ19wdXRjID0gdWRiZ180NHhfYXMxX3B1dGM7CisJdWRiZ19mbHVzaCA9IHVkYmdfNDR4X2FzMV9mbHVzaDsKIAl1ZGJnX2dldGMgPSB1ZGJnXzQ0eF9hczFfZ2V0YzsKIH0KICNlbmRpZiAvKiBDT05GSUdfUFBDX0VBUkxZX0RFQlVHXzQ0eCAqLwogCiAjaWZkZWYgQ09ORklHX1BQQ19FQVJMWV9ERUJVR180MHgKLXN0YXRpYyB2b2lkIHVkYmdfNDB4X3JlYWxfcHV0YyhjaGFyIGMpCitzdGF0aWMgdm9pZCB1ZGJnXzQweF9yZWFsX2ZsdXNoKHZvaWQpCiB7CiAJaWYgKHVkYmdfY29tcG9ydCkgewogCQl3aGlsZSAoKHJlYWxfcmVhZGIoJnVkYmdfY29tcG9ydC0+bHNyKSAmIExTUl9USFJFKSA9PSAwKQogCQkJLyogd2FpdCBmb3IgaWRsZSAqLzsKLQkJcmVhbF93cml0ZWIoYywgJnVkYmdfY29tcG9ydC0+dGhyKTsgZWllaW8oKTsKKwl9Cit9CisKK3N0YXRpYyB2b2lkIHVkYmdfNDB4X3JlYWxfcHV0YyhjaGFyIGMpCit7CisJaWYgKHVkYmdfY29tcG9ydCkgewogCQlpZiAoYyA9PSAnXG4nKQogCQkJdWRiZ180MHhfcmVhbF9wdXRjKCdccicpOworCQl1ZGJnXzQweF9yZWFsX2ZsdXNoKCk7CisJCXJlYWxfd3JpdGViKGMsICZ1ZGJnX2NvbXBvcnQtPnRocik7IGVpZWlvKCk7CiAJfQogfQogCkBAIC0yNTQsNiArMjkzLDcgQEAKIAkJQ09ORklHX1BQQ19FQVJMWV9ERUJVR180MHhfUEhZU0FERFI7CiAKIAl1ZGJnX3B1dGMgPSB1ZGJnXzQweF9yZWFsX3B1dGM7CisJdWRiZ19mbHVzaCA9IHVkYmdfNDB4X3JlYWxfZmx1c2g7CiAJdWRiZ19nZXRjID0gdWRiZ180MHhfcmVhbF9nZXRjOwogCXVkYmdfZ2V0Y19wb2xsID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUyBiL2FyY2gvcG93ZXJwYy9rZXJuZWwvdm1saW51eC5sZHMuUwppbmRleCA2N2YwN2Y0Li5iOWVmMTY0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva2VybmVsL3ZtbGludXgubGRzLlMKKysrIGIvYXJjaC9wb3dlcnBjL2tlcm5lbC92bWxpbnV4Lmxkcy5TCkBAIC01OCw2ICs1OCw3IEBACiAJCVNDSEVEX1RFWFQKIAkJTE9DS19URVhUCiAJCUtQUk9CRVNfVEVYVAorCQlJUlFFTlRSWV9URVhUCiAKICNpZmRlZiBDT05GSUdfUFBDMzIKIAkJKiguZ290MSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9saWIvZG1hLW5vbmNvaGVyZW50LmMgYi9hcmNoL3Bvd2VycGMvbGliL2RtYS1ub25jb2hlcmVudC5jCmluZGV4IGI3ZGM0YzEuLjAwNWEyOGQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9saWIvZG1hLW5vbmNvaGVyZW50LmMKKysrIGIvYXJjaC9wb3dlcnBjL2xpYi9kbWEtbm9uY29oZXJlbnQuYwpAQCAtMjksMTIxICsyOSwxMSBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogCiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAKIC8qCi0gKiBUaGlzIGFkZHJlc3MgcmFuZ2UgZGVmYXVsdHMgdG8gYSB2YWx1ZSB0aGF0IGlzIHNhZmUgZm9yIGFsbAotICogcGxhdGZvcm1zIHdoaWNoIGN1cnJlbnRseSBzZXQgQ09ORklHX05PVF9DT0hFUkVOVF9DQUNIRS4gSXQKLSAqIGNhbiBiZSBmdXJ0aGVyIGNvbmZpZ3VyZWQgZm9yIHNwZWNpZmljIGFwcGxpY2F0aW9ucyB1bmRlcgotICogdGhlICJBZHZhbmNlZCBTZXR1cCIgbWVudS4gLU1hdHQKLSAqLwotI2RlZmluZSBDT05TSVNURU5UX0JBU0UJKENPTkZJR19DT05TSVNURU5UX1NUQVJUKQotI2RlZmluZSBDT05TSVNURU5UX0VORAkoQ09ORklHX0NPTlNJU1RFTlRfU1RBUlQgKyBDT05GSUdfQ09OU0lTVEVOVF9TSVpFKQotI2RlZmluZSBDT05TSVNURU5UX09GRlNFVCh4KQkoKCh1bnNpZ25lZCBsb25nKSh4KSAtIENPTlNJU1RFTlRfQkFTRSkgPj4gUEFHRV9TSElGVCkKLQotLyoKLSAqIFRoaXMgaXMgdGhlIHBhZ2UgdGFibGUgKDJNQikgY292ZXJpbmcgdW5jYWNoZWQsIERNQSBjb25zaXN0ZW50IGFsbG9jYXRpb25zCi0gKi8KLXN0YXRpYyBwdGVfdCAqY29uc2lzdGVudF9wdGU7Ci1zdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNvbnNpc3RlbnRfbG9jayk7Ci0KLS8qCi0gKiBWTSByZWdpb24gaGFuZGxpbmcgc3VwcG9ydC4KLSAqCi0gKiBUaGlzIHNob3VsZCBiZWNvbWUgc29tZXRoaW5nIGdlbmVyaWMsIGhhbmRsaW5nIFZNIHJlZ2lvbiBhbGxvY2F0aW9ucyBmb3IKLSAqIHZtYWxsb2MgYW5kIHNpbWlsYXIgKGlvcmVtYXAsIG1vZHVsZSBzcGFjZSwgZXRjKS4KLSAqCi0gKiBJIGVudmlzYWdlIHZtYWxsb2MoKSdzIHN1cHBvcnRpbmcgdm1fc3RydWN0IGJlY29taW5nOgotICoKLSAqICBzdHJ1Y3Qgdm1fc3RydWN0IHsKLSAqICAgIHN0cnVjdCB2bV9yZWdpb24JcmVnaW9uOwotICogICAgdW5zaWduZWQgbG9uZwlmbGFnczsKLSAqICAgIHN0cnVjdCBwYWdlCSoqcGFnZXM7Ci0gKiAgICB1bnNpZ25lZCBpbnQJbnJfcGFnZXM7Ci0gKiAgICB1bnNpZ25lZCBsb25nCXBoeXNfYWRkcjsKLSAqICB9OwotICoKLSAqIGdldF92bV9hcmVhKCkgd291bGQgdGhlbiBjYWxsIHZtX3JlZ2lvbl9hbGxvYyB3aXRoIGFuIGFwcHJvcHJpYXRlCi0gKiBzdHJ1Y3Qgdm1fcmVnaW9uIGhlYWQgKGVnKToKLSAqCi0gKiAgc3RydWN0IHZtX3JlZ2lvbiB2bWFsbG9jX2hlYWQgPSB7Ci0gKgkudm1fbGlzdAk9IExJU1RfSEVBRF9JTklUKHZtYWxsb2NfaGVhZC52bV9saXN0KSwKLSAqCS52bV9zdGFydAk9IFZNQUxMT0NfU1RBUlQsCi0gKgkudm1fZW5kCQk9IFZNQUxMT0NfRU5ELAotICogIH07Ci0gKgotICogSG93ZXZlciwgdm1hbGxvY19oZWFkLnZtX3N0YXJ0IGlzIHZhcmlhYmxlICh0eXBpY2FsbHksIGl0IGlzIGRlcGVuZGVudCBvbgotICogdGhlIGFtb3VudCBvZiBSQU0gZm91bmQgYXQgYm9vdCB0aW1lLikgIEkgd291bGQgaW1hZ2luZSB0aGF0IGdldF92bV9hcmVhKCkKLSAqIHdvdWxkIGhhdmUgdG8gaW5pdGlhbGlzZSB0aGlzIGVhY2ggdGltZSBwcmlvciB0byBjYWxsaW5nIHZtX3JlZ2lvbl9hbGxvYygpLgotICovCi1zdHJ1Y3QgcHBjX3ZtX3JlZ2lvbiB7Ci0Jc3RydWN0IGxpc3RfaGVhZAl2bV9saXN0OwotCXVuc2lnbmVkIGxvbmcJCXZtX3N0YXJ0OwotCXVuc2lnbmVkIGxvbmcJCXZtX2VuZDsKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcHBjX3ZtX3JlZ2lvbiBjb25zaXN0ZW50X2hlYWQgPSB7Ci0JLnZtX2xpc3QJPSBMSVNUX0hFQURfSU5JVChjb25zaXN0ZW50X2hlYWQudm1fbGlzdCksCi0JLnZtX3N0YXJ0CT0gQ09OU0lTVEVOVF9CQVNFLAotCS52bV9lbmQJCT0gQ09OU0lTVEVOVF9FTkQsCi19OwotCi1zdGF0aWMgc3RydWN0IHBwY192bV9yZWdpb24gKgotcHBjX3ZtX3JlZ2lvbl9hbGxvYyhzdHJ1Y3QgcHBjX3ZtX3JlZ2lvbiAqaGVhZCwgc2l6ZV90IHNpemUsIGdmcF90IGdmcCkKLXsKLQl1bnNpZ25lZCBsb25nIGFkZHIgPSBoZWFkLT52bV9zdGFydCwgZW5kID0gaGVhZC0+dm1fZW5kIC0gc2l6ZTsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCXN0cnVjdCBwcGNfdm1fcmVnaW9uICpjLCAqbmV3OwotCi0JbmV3ID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHBwY192bV9yZWdpb24pLCBnZnApOwotCWlmICghbmV3KQotCQlnb3RvIG91dDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjb25zaXN0ZW50X2xvY2ssIGZsYWdzKTsKLQotCWxpc3RfZm9yX2VhY2hfZW50cnkoYywgJmhlYWQtPnZtX2xpc3QsIHZtX2xpc3QpIHsKLQkJaWYgKChhZGRyICsgc2l6ZSkgPCBhZGRyKQotCQkJZ290byBub3NwYzsKLQkJaWYgKChhZGRyICsgc2l6ZSkgPD0gYy0+dm1fc3RhcnQpCi0JCQlnb3RvIGZvdW5kOwotCQlhZGRyID0gYy0+dm1fZW5kOwotCQlpZiAoYWRkciA+IGVuZCkKLQkJCWdvdG8gbm9zcGM7Ci0JfQotCi0gZm91bmQ6Ci0JLyoKLQkgKiBJbnNlcnQgdGhpcyBlbnRyeSBfYmVmb3JlXyB0aGUgb25lIHdlIGZvdW5kLgotCSAqLwotCWxpc3RfYWRkX3RhaWwoJm5ldy0+dm1fbGlzdCwgJmMtPnZtX2xpc3QpOwotCW5ldy0+dm1fc3RhcnQgPSBhZGRyOwotCW5ldy0+dm1fZW5kID0gYWRkciArIHNpemU7Ci0KLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjb25zaXN0ZW50X2xvY2ssIGZsYWdzKTsKLQlyZXR1cm4gbmV3OwotCi0gbm9zcGM6Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uc2lzdGVudF9sb2NrLCBmbGFncyk7Ci0Ja2ZyZWUobmV3KTsKLSBvdXQ6Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgcHBjX3ZtX3JlZ2lvbiAqcHBjX3ZtX3JlZ2lvbl9maW5kKHN0cnVjdCBwcGNfdm1fcmVnaW9uICpoZWFkLCB1bnNpZ25lZCBsb25nIGFkZHIpCi17Ci0Jc3RydWN0IHBwY192bV9yZWdpb24gKmM7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZoZWFkLT52bV9saXN0LCB2bV9saXN0KSB7Ci0JCWlmIChjLT52bV9zdGFydCA9PSBhZGRyKQotCQkJZ290byBvdXQ7Ci0JfQotCWMgPSBOVUxMOwotIG91dDoKLQlyZXR1cm4gYzsKLX0KLQotLyoKICAqIEFsbG9jYXRlIERNQS1jb2hlcmVudCBtZW1vcnkgc3BhY2UgYW5kIHJldHVybiBib3RoIHRoZSBrZXJuZWwgcmVtYXBwZWQKICAqIHZpcnR1YWwgYW5kIGJ1cyBhZGRyZXNzIGZvciB0aGF0IHNwYWNlLgogICovCkBAIC0xNTEsMjEgKzQxLDIxIEBACiBfX2RtYV9hbGxvY19jb2hlcmVudChzaXplX3Qgc2l6ZSwgZG1hX2FkZHJfdCAqaGFuZGxlLCBnZnBfdCBnZnApCiB7CiAJc3RydWN0IHBhZ2UgKnBhZ2U7Ci0Jc3RydWN0IHBwY192bV9yZWdpb24gKmM7CiAJdW5zaWduZWQgbG9uZyBvcmRlcjsKKwlpbnQgaTsKKwl1bnNpZ25lZCBpbnQgbnJfcGFnZXMgPSBQQUdFX0FMSUdOKHNpemUpPj5QQUdFX1NISUZUOworCXVuc2lnbmVkIGludCBhcnJheV9zaXplID0gbnJfcGFnZXMgKiBzaXplb2Yoc3RydWN0IHBhZ2UgKik7CisJc3RydWN0IHBhZ2UgKipwYWdlczsKKwlzdHJ1Y3QgcGFnZSAqZW5kOwogCXU2NCBtYXNrID0gMHgwMGZmZmZmZiwgbGltaXQ7IC8qIElTQSBkZWZhdWx0ICovCisJc3RydWN0IHZtX3N0cnVjdCAqYXJlYTsKIAotCWlmICghY29uc2lzdGVudF9wdGUpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm90IGluaXRpYWxpc2VkXG4iLCBfX2Z1bmNfXyk7Ci0JCWR1bXBfc3RhY2soKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCisJQlVHX09OKCFtZW1faW5pdF9kb25lKTsKIAlzaXplID0gUEFHRV9BTElHTihzaXplKTsKIAlsaW1pdCA9IChtYXNrICsgMSkgJiB+bWFzazsKLQlpZiAoKGxpbWl0ICYmIHNpemUgPj0gbGltaXQpIHx8IHNpemUgPj0gKENPTlNJU1RFTlRfRU5EIC0gQ09OU0lTVEVOVF9CQVNFKSkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJjb2hlcmVudCBhbGxvY2F0aW9uIHRvbyBiaWcgKHJlcXVlc3RlZCAlI3ggbWFzayAlI0x4KVxuIiwKLQkJICAgICAgIHNpemUsIG1hc2spOworCWlmIChsaW1pdCAmJiBzaXplID49IGxpbWl0KSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgImNvaGVyZW50IGFsbG9jYXRpb24gdG9vIGJpZyAocmVxdWVzdGVkICIKKwkJCQkiJSN4IG1hc2sgJSNMeClcbiIsIHNpemUsIG1hc2spOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTE3OCw2ICs2OCw4IEBACiAJaWYgKCFwYWdlKQogCQlnb3RvIG5vX3BhZ2U7CiAKKwllbmQgPSBwYWdlICsgKDEgPDwgb3JkZXIpOworCiAJLyoKIAkgKiBJbnZhbGlkYXRlIGFueSBkYXRhIHRoYXQgbWlnaHQgYmUgbHVya2luZyBpbiB0aGUKIAkgKiBrZXJuZWwgZGlyZWN0LW1hcHBlZCByZWdpb24gZm9yIGRldmljZSBETUEuCkBAIC0xODgsNDggKzgwLDU5IEBACiAJCWZsdXNoX2RjYWNoZV9yYW5nZShrYWRkciwga2FkZHIgKyBzaXplKTsKIAl9CiAKKwlzcGxpdF9wYWdlKHBhZ2UsIG9yZGVyKTsKKwogCS8qCi0JICogQWxsb2NhdGUgYSB2aXJ0dWFsIGFkZHJlc3MgaW4gdGhlIGNvbnNpc3RlbnQgbWFwcGluZyByZWdpb24uCisJICogU2V0IHRoZSAiZG1hIGhhbmRsZSIKIAkgKi8KLQljID0gcHBjX3ZtX3JlZ2lvbl9hbGxvYygmY29uc2lzdGVudF9oZWFkLCBzaXplLAotCQkJICAgIGdmcCAmIH4oX19HRlBfRE1BIHwgX19HRlBfSElHSE1FTSkpOwotCWlmIChjKSB7Ci0JCXVuc2lnbmVkIGxvbmcgdmFkZHIgPSBjLT52bV9zdGFydDsKLQkJcHRlX3QgKnB0ZSA9IGNvbnNpc3RlbnRfcHRlICsgQ09OU0lTVEVOVF9PRkZTRVQodmFkZHIpOwotCQlzdHJ1Y3QgcGFnZSAqZW5kID0gcGFnZSArICgxIDw8IG9yZGVyKTsKKwkqaGFuZGxlID0gcGFnZV90b19waHlzKHBhZ2UpOwogCi0JCXNwbGl0X3BhZ2UocGFnZSwgb3JkZXIpOworCWFyZWEgPSBnZXRfdm1fYXJlYV9jYWxsZXIoc2l6ZSwgVk1fSU9SRU1BUCwKKwkJCV9fYnVpbHRpbl9yZXR1cm5fYWRkcmVzcygxKSk7CisJaWYgKCFhcmVhKQorCQlnb3RvIG91dF9mcmVlX3BhZ2VzOwogCi0JCS8qCi0JCSAqIFNldCB0aGUgImRtYSBoYW5kbGUiCi0JCSAqLwotCQkqaGFuZGxlID0gcGFnZV90b19waHlzKHBhZ2UpOworCWlmIChhcnJheV9zaXplID4gUEFHRV9TSVpFKSB7CisJCXBhZ2VzID0gdm1hbGxvYyhhcnJheV9zaXplKTsKKwkJYXJlYS0+ZmxhZ3MgfD0gVk1fVlBBR0VTOworCX0gZWxzZSB7CisJCXBhZ2VzID0ga21hbGxvYyhhcnJheV9zaXplLCBHRlBfS0VSTkVMKTsKKwl9CisJaWYgKCFwYWdlcykKKwkJZ290byBvdXRfZnJlZV9hcmVhOwogCi0JCWRvIHsKLQkJCUJVR19PTighcHRlX25vbmUoKnB0ZSkpOworCWFyZWEtPnBhZ2VzID0gcGFnZXM7CisJYXJlYS0+bnJfcGFnZXMgPSBucl9wYWdlczsKIAotCQkJU2V0UGFnZVJlc2VydmVkKHBhZ2UpOwotCQkJc2V0X3B0ZV9hdCgmaW5pdF9tbSwgdmFkZHIsCi0JCQkJICAgcHRlLCBta19wdGUocGFnZSwgcGdwcm90X25vbmNhY2hlZChQQUdFX0tFUk5FTCkpKTsKLQkJCXBhZ2UrKzsKLQkJCXB0ZSsrOwotCQkJdmFkZHIgKz0gUEFHRV9TSVpFOwotCQl9IHdoaWxlIChzaXplIC09IFBBR0VfU0laRSk7CisJZm9yIChpID0gMDsgaSA8IG5yX3BhZ2VzOyBpKyspCisJCXBhZ2VzW2ldID0gcGFnZSArIGk7CiAKLQkJLyoKLQkJICogRnJlZSB0aGUgb3RoZXJ3aXNlIHVudXNlZCBwYWdlcy4KLQkJICovCi0JCXdoaWxlIChwYWdlIDwgZW5kKSB7Ci0JCQlfX2ZyZWVfcGFnZShwYWdlKTsKLQkJCXBhZ2UrKzsKLQkJfQorCWlmIChtYXBfdm1fYXJlYShhcmVhLCBwZ3Byb3Rfbm9uY2FjaGVkKFBBR0VfS0VSTkVMKSwgJnBhZ2VzKSkKKwkJZ290byBvdXRfdW5tYXA7CiAKLQkJcmV0dXJuICh2b2lkICopYy0+dm1fc3RhcnQ7CisJLyoKKwkgKiBGcmVlIHRoZSBvdGhlcndpc2UgdW51c2VkIHBhZ2VzLgorCSAqLworCXBhZ2UgKz0gbnJfcGFnZXM7CisJd2hpbGUgKHBhZ2UgPCBlbmQpIHsKKwkJX19mcmVlX3BhZ2UocGFnZSk7CisJCXBhZ2UrKzsKIAl9CiAKKwlyZXR1cm4gYXJlYS0+YWRkcjsKK291dF91bm1hcDoKKwl2dW5tYXAoYXJlYS0+YWRkcik7CisJaWYgKGFycmF5X3NpemUgPiBQQUdFX1NJWkUpCisJCXZmcmVlKHBhZ2VzKTsKKwllbHNlCisJCWtmcmVlKHBhZ2VzKTsKKwlnb3RvIG91dF9mcmVlX3BhZ2VzOworb3V0X2ZyZWVfYXJlYToKKwlmcmVlX3ZtX2FyZWEoYXJlYSk7CitvdXRfZnJlZV9wYWdlczoKIAlpZiAocGFnZSkKIAkJX19mcmVlX3BhZ2VzKHBhZ2UsIG9yZGVyKTsKLSBub19wYWdlOgorbm9fcGFnZToKIAlyZXR1cm4gTlVMTDsKIH0KIEVYUE9SVF9TWU1CT0woX19kbWFfYWxsb2NfY29oZXJlbnQpOwpAQCAtMjM5LDEwNCArMTQyLDEyIEBACiAgKi8KIHZvaWQgX19kbWFfZnJlZV9jb2hlcmVudChzaXplX3Qgc2l6ZSwgdm9pZCAqdmFkZHIpCiB7Ci0Jc3RydWN0IHBwY192bV9yZWdpb24gKmM7Ci0JdW5zaWduZWQgbG9uZyBmbGFncywgYWRkcjsKLQlwdGVfdCAqcHRlcDsKKwl2ZnJlZSh2YWRkcik7CiAKLQlzaXplID0gUEFHRV9BTElHTihzaXplKTsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZjb25zaXN0ZW50X2xvY2ssIGZsYWdzKTsKLQotCWMgPSBwcGNfdm1fcmVnaW9uX2ZpbmQoJmNvbnNpc3RlbnRfaGVhZCwgKHVuc2lnbmVkIGxvbmcpdmFkZHIpOwotCWlmICghYykKLQkJZ290byBub19hcmVhOwotCi0JaWYgKChjLT52bV9lbmQgLSBjLT52bV9zdGFydCkgIT0gc2l6ZSkgewotCQlwcmludGsoS0VSTl9FUlIgIiVzOiBmcmVlaW5nIHdyb25nIGNvaGVyZW50IHNpemUgKCVsZCAhPSAlZClcbiIsCi0JCSAgICAgICBfX2Z1bmNfXywgYy0+dm1fZW5kIC0gYy0+dm1fc3RhcnQsIHNpemUpOwotCQlkdW1wX3N0YWNrKCk7Ci0JCXNpemUgPSBjLT52bV9lbmQgLSBjLT52bV9zdGFydDsKLQl9Ci0KLQlwdGVwID0gY29uc2lzdGVudF9wdGUgKyBDT05TSVNURU5UX09GRlNFVChjLT52bV9zdGFydCk7Ci0JYWRkciA9IGMtPnZtX3N0YXJ0OwotCWRvIHsKLQkJcHRlX3QgcHRlID0gcHRlcF9nZXRfYW5kX2NsZWFyKCZpbml0X21tLCBhZGRyLCBwdGVwKTsKLQkJdW5zaWduZWQgbG9uZyBwZm47Ci0KLQkJcHRlcCsrOwotCQlhZGRyICs9IFBBR0VfU0laRTsKLQotCQlpZiAoIXB0ZV9ub25lKHB0ZSkgJiYgcHRlX3ByZXNlbnQocHRlKSkgewotCQkJcGZuID0gcHRlX3BmbihwdGUpOwotCi0JCQlpZiAocGZuX3ZhbGlkKHBmbikpIHsKLQkJCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7Ci0JCQkJQ2xlYXJQYWdlUmVzZXJ2ZWQocGFnZSk7Ci0KLQkJCQlfX2ZyZWVfcGFnZShwYWdlKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQkJfQotCi0JCXByaW50ayhLRVJOX0NSSVQgIiVzOiBiYWQgcGFnZSBpbiBrZXJuZWwgcGFnZSB0YWJsZVxuIiwKLQkJICAgICAgIF9fZnVuY19fKTsKLQl9IHdoaWxlIChzaXplIC09IFBBR0VfU0laRSk7Ci0KLQlmbHVzaF90bGJfa2VybmVsX3JhbmdlKGMtPnZtX3N0YXJ0LCBjLT52bV9lbmQpOwotCi0JbGlzdF9kZWwoJmMtPnZtX2xpc3QpOwotCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29uc2lzdGVudF9sb2NrLCBmbGFncyk7Ci0KLQlrZnJlZShjKTsKLQlyZXR1cm47Ci0KLSBub19hcmVhOgotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmNvbnNpc3RlbnRfbG9jaywgZmxhZ3MpOwotCXByaW50ayhLRVJOX0VSUiAiJXM6IHRyeWluZyB0byBmcmVlIGludmFsaWQgY29oZXJlbnQgYXJlYTogJXBcbiIsCi0JICAgICAgIF9fZnVuY19fLCB2YWRkcik7Ci0JZHVtcF9zdGFjaygpOwogfQogRVhQT1JUX1NZTUJPTChfX2RtYV9mcmVlX2NvaGVyZW50KTsKIAogLyoKLSAqIEluaXRpYWxpc2UgdGhlIGNvbnNpc3RlbnQgbWVtb3J5IGFsbG9jYXRpb24uCi0gKi8KLXN0YXRpYyBpbnQgX19pbml0IGRtYV9hbGxvY19pbml0KHZvaWQpCi17Ci0JcGdkX3QgKnBnZDsKLQlwdWRfdCAqcHVkOwotCXBtZF90ICpwbWQ7Ci0JcHRlX3QgKnB0ZTsKLQlpbnQgcmV0ID0gMDsKLQotCWRvIHsKLQkJcGdkID0gcGdkX29mZnNldCgmaW5pdF9tbSwgQ09OU0lTVEVOVF9CQVNFKTsKLQkJcHVkID0gcHVkX2FsbG9jKCZpbml0X21tLCBwZ2QsIENPTlNJU1RFTlRfQkFTRSk7Ci0JCXBtZCA9IHBtZF9hbGxvYygmaW5pdF9tbSwgcHVkLCBDT05TSVNURU5UX0JBU0UpOwotCQlpZiAoIXBtZCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gcG1kIHRhYmxlc1xuIiwgX19mdW5jX18pOwotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJcHRlID0gcHRlX2FsbG9jX2tlcm5lbChwbWQsIENPTlNJU1RFTlRfQkFTRSk7Ci0JCWlmICghcHRlKSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIiVzOiBubyBwdGUgdGFibGVzXG4iLCBfX2Z1bmNfXyk7Ci0JCQlyZXQgPSAtRU5PTUVNOwotCQkJYnJlYWs7Ci0JCX0KLQotCQljb25zaXN0ZW50X3B0ZSA9IHB0ZTsKLQl9IHdoaWxlICgwKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLWNvcmVfaW5pdGNhbGwoZG1hX2FsbG9jX2luaXQpOwotCi0vKgogICogbWFrZSBhbiBhcmVhIGNvbnNpc3RlbnQuCiAgKi8KIHZvaWQgX19kbWFfc3luYyh2b2lkICp2YWRkciwgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbGliL2ZlYXR1cmUtZml4dXBzLmMgYi9hcmNoL3Bvd2VycGMvbGliL2ZlYXR1cmUtZml4dXBzLmMKaW5kZXggOGM1YTAzYi4uN2U4ODY1YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2xpYi9mZWF0dXJlLWZpeHVwcy5jCisrKyBiL2FyY2gvcG93ZXJwYy9saWIvZmVhdHVyZS1maXh1cHMuYwpAQCAtODUsNyArODUsNyBAQAogCX0KIAogCWZvciAoOyBkZXN0IDwgZW5kOyBkZXN0KyspCi0JCXBhdGNoX2luc3RydWN0aW9uKGRlc3QsIFBQQ19OT1BfSU5TVFIpOworCQlwYXRjaF9pbnN0cnVjdGlvbihkZXN0LCBQUENfSU5TVF9OT1ApOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjIsNyArMTIyLDcgQEAKIAogCWZvciAoOyBzdGFydCA8IGVuZDsgc3RhcnQrKykgewogCQlkZXN0ID0gKHZvaWQgKilzdGFydCArICpzdGFydDsKLQkJcGF0Y2hfaW5zdHJ1Y3Rpb24oZGVzdCwgUFBDX0xXU1lOQ19JTlNUUik7CisJCXBhdGNoX2luc3RydWN0aW9uKGRlc3QsIFBQQ19JTlNUX0xXU1lOQyk7CiAJfQogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvbWF0aC1lbXUvTWFrZWZpbGUKaW5kZXggZjllNTA2YS4uMGMxNmFiOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21hdGgtZW11L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9tYXRoLWVtdS9NYWtlZmlsZQpAQCAtMSw2ICsxLDQgQEAKIAotb2JqLXkJCQkJOj0gbWF0aC5vIGZtci5vIGxmZC5vIHN0ZmQubwotCiBvYmotJChDT05GSUdfTUFUSF9FTVVMQVRJT04pCSs9IGZhYnMubyBmYWRkLm8gZmFkZHMubyBmY21wby5vIGZjbXB1Lm8gXAogCQkJCQlmY3Rpdy5vIGZjdGl3ei5vIGZkaXYubyBmZGl2cy5vIFwKIAkJCQkJZm1hZGQubyBmbWFkZHMubyBmbXN1Yi5vIGZtc3Vicy5vIFwKQEAgLTksNyArNyw4IEBACiAJCQkJCWZyZXMubyBmcnNwLm8gZnJzcXJ0ZS5vIGZzZWwubyBsZnMubyBcCiAJCQkJCWZzcXJ0Lm8JZnNxcnRzLm8gZnN1Yi5vIGZzdWJzLm8gXAogCQkJCQltY3Jmcy5vIG1mZnMubyBtdGZzYjAubyBtdGZzYjEubyBcCi0JCQkJCW10ZnNmLm8gbXRmc2ZpLm8gc3RmaXd4Lm8gc3Rmcy5vCisJCQkJCW10ZnNmLm8gbXRmc2ZpLm8gc3RmaXd4Lm8gc3Rmcy5vIFwKKwkJCQkJbWF0aC5vIGZtci5vIGxmZC5vIHN0ZmQubwogCiBvYmotJChDT05GSUdfU1BFKQkJKz0gbWF0aF9lZnAubwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvbW0vTWFrZWZpbGUKaW5kZXggOTUzY2M0YS4uMTcyOTBiYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9NYWtlZmlsZQpAQCAtNiw3ICs2LDcgQEAKIEVYVFJBX0NGTEFHUwkrPSAtbW5vLW1pbmltYWwtdG9jCiBlbmRpZgogCi1vYmoteQkJCQk6PSBmYXVsdC5vIG1lbS5vIHBndGFibGUubyBcCitvYmoteQkJCQk6PSBmYXVsdC5vIG1lbS5vIHBndGFibGUubyBndXAubyBcCiAJCQkJICAgaW5pdF8kKENPTkZJR19XT1JEX1NJWkUpLm8gXAogCQkJCSAgIHBndGFibGVfJChDT05GSUdfV09SRF9TSVpFKS5vCiBvYmotJChDT05GSUdfUFBDX01NVV9OT0hBU0gpCSs9IG1tdV9jb250ZXh0X25vaGFzaC5vIHRsYl9ub2hhc2gubyBcCkBAIC0xNCw3ICsxNCw3IEBACiBoYXNoLSQoQ09ORklHX1BQQ19OQVRJVkUpCTo9IGhhc2hfbmF0aXZlXzY0Lm8KIG9iai0kKENPTkZJR19QUEM2NCkJCSs9IGhhc2hfdXRpbHNfNjQubyBcCiAJCQkJICAgc2xiX2xvdy5vIHNsYi5vIHN0YWIubyBcCi0JCQkJICAgZ3VwLm8gbW1hcC5vICQoaGFzaC15KQorCQkJCSAgIG1tYXBfNjQubyAkKGhhc2gteSkKIG9iai0kKENPTkZJR19QUENfU1REX01NVV8zMikJKz0gcHBjX21tdV8zMi5vCiBvYmotJChDT05GSUdfUFBDX1NURF9NTVUpCSs9IGhhc2hfbG93XyQoQ09ORklHX1dPUkRfU0laRSkubyBcCiAJCQkJICAgdGxiX2hhc2gkKENPTkZJR19XT1JEX1NJWkUpLm8gXApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2ZhdWx0LmMgYi9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYwppbmRleCA5MWM3Yjg2Li43Njk5Mzk0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vZmF1bHQuYwpAQCAtMjUzLDQ1ICsyNTMsMzMgQEAKICNlbmRpZiAvKiBDT05GSUdfOHh4ICovCiAKIAlpZiAoaXNfZXhlYykgewotI2lmICEoZGVmaW5lZChDT05GSUdfNHh4KSB8fCBkZWZpbmVkKENPTkZJR19CT09LRSkpCi0JCS8qIHByb3RlY3Rpb24gZmF1bHQgKi8KKyNpZmRlZiBDT05GSUdfUFBDX1NURF9NTVUKKwkJLyogUHJvdGVjdGlvbiBmYXVsdCBvbiBleGVjIGdvIHN0cmFpZ2h0IHRvIGZhaWx1cmUgb24KKwkJICogSGFzaCBiYXNlZCBNTVVzIGFzIHRoZXkgZWl0aGVyIGRvbid0IHN1cHBvcnQgcGVyLXBhZ2UKKwkJICogZXhlY3V0ZSBwZXJtaXNzaW9uLCBvciBpZiB0aGV5IGRvLCBpdCdzIGhhbmRsZWQgYWxyZWFkeQorCQkgKiBhdCB0aGUgaGFzaCBsZXZlbC4gVGhpcyB0ZXN0IHdvdWxkIHByb2JhYmx5IGhhdmUgdG8KKwkJICogYmUgcmVtb3ZlZCBpZiB3ZSBjaGFuZ2UgdGhlIHdheSB0aGlzIHdvcmtzIHRvIG1ha2UgaGFzaAorCQkgKiBwcm9jZXNzb3JzIHVzZSB0aGUgc2FtZSBJL0QgY2FjaGUgY29oZXJlbmN5IG1lY2hhbmlzbQorCQkgKiBhcyBlbWJlZGRlZC4KKwkJICovCiAJCWlmIChlcnJvcl9jb2RlICYgRFNJU1JfUFJPVEZBVUxUKQogCQkJZ290byBiYWRfYXJlYTsKKyNlbmRpZiAvKiBDT05GSUdfUFBDX1NURF9NTVUgKi8KKwogCQkvKgogCQkgKiBBbGxvdyBleGVjdXRpb24gZnJvbSByZWFkYWJsZSBhcmVhcyBpZiB0aGUgTU1VIGRvZXMgbm90CiAJCSAqIHByb3ZpZGUgc2VwYXJhdGUgY29udHJvbHMgb3ZlciByZWFkaW5nIGFuZCBleGVjdXRpbmcuCisJCSAqCisJCSAqIE5vdGU6IFRoYXQgY29kZSB1c2VkIHRvIG5vdCBiZSBlbmFibGVkIGZvciA0eHgvQm9va0UuCisJCSAqIEl0IGlzIG5vdyBhcyBJL0QgY2FjaGUgY29oZXJlbmN5IGZvciB0aGVzZSBpcyBkb25lIGF0CisJCSAqIHNldF9wdGVfYXQoKSB0aW1lIGFuZCBJIHNlZSBubyByZWFzb24gd2h5IHRoZSB0ZXN0CisJCSAqIGJlbG93IHdvdWxkbid0IGJlIHZhbGlkIG9uIHRob3NlIHByb2Nlc3NvcnMuIFRoaXMgLW1heS0KKwkJICogYnJlYWsgcHJvZ3JhbXMgY29tcGlsZWQgd2l0aCBhIHJlYWxseSBvbGQgQUJJIHRob3VnaC4KIAkJICovCiAJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9FWEVDKSAmJgogCQkgICAgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX05PRVhFQ1VURSkgfHwKIAkJICAgICAhKHZtYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX1dSSVRFKSkpKQogCQkJZ290byBiYWRfYXJlYTsKLSNlbHNlCi0JCXB0ZV90ICpwdGVwOwotCQlwbWRfdCAqcG1kcDsKLQotCQkvKiBTaW5jZSA0eHgvQm9vay1FIHN1cHBvcnRzIHBlci1wYWdlIGV4ZWN1dGUgcGVybWlzc2lvbiwKLQkJICogd2UgbGF6aWx5IGZsdXNoIGRjYWNoZSB0byBpY2FjaGUuICovCi0JCXB0ZXAgPSBOVUxMOwotCQlpZiAoZ2V0X3B0ZXB0cihtbSwgYWRkcmVzcywgJnB0ZXAsICZwbWRwKSkgewotCQkJc3BpbmxvY2tfdCAqcHRsID0gcHRlX2xvY2twdHIobW0sIHBtZHApOwotCQkJc3Bpbl9sb2NrKHB0bCk7Ci0JCQlpZiAocHRlX3ByZXNlbnQoKnB0ZXApKSB7Ci0JCQkJc3RydWN0IHBhZ2UgKnBhZ2UgPSBwdGVfcGFnZSgqcHRlcCk7Ci0KLQkJCQlpZiAoIXRlc3RfYml0KFBHX2FyY2hfMSwgJnBhZ2UtPmZsYWdzKSkgewotCQkJCQlmbHVzaF9kY2FjaGVfaWNhY2hlX3BhZ2UocGFnZSk7Ci0JCQkJCXNldF9iaXQoUEdfYXJjaF8xLCAmcGFnZS0+ZmxhZ3MpOwotCQkJCX0KLQkJCQlwdGVfdXBkYXRlKHB0ZXAsIDAsIF9QQUdFX0hXRVhFQyB8Ci0JCQkJCSAgIF9QQUdFX0FDQ0VTU0VEKTsKLQkJCQlsb2NhbF9mbHVzaF90bGJfcGFnZSh2bWEsIGFkZHJlc3MpOwotCQkJCXB0ZV91bm1hcF91bmxvY2socHRlcCwgcHRsKTsKLQkJCQl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwotCQkJCXJldHVybiAwOwotCQkJfQotCQkJcHRlX3VubWFwX3VubG9jayhwdGVwLCBwdGwpOwotCQl9Ci0jZW5kaWYKIAkvKiBhIHdyaXRlICovCiAJfSBlbHNlIGlmIChpc193cml0ZSkgewogCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2ZzbF9ib29rZV9tbXUuYyBiL2FyY2gvcG93ZXJwYy9tbS9mc2xfYm9va2VfbW11LmMKaW5kZXggZWE2ZTQxZS4uYmIzZDY1OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL2ZzbF9ib29rZV9tbXUuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vZnNsX2Jvb2tlX21tdS5jCkBAIC01NiwxMCArNTYsMTQgQEAKIAogZXh0ZXJuIHZvaWQgbG9hZGNhbV9lbnRyeSh1bnNpZ25lZCBpbnQgaW5kZXgpOwogdW5zaWduZWQgaW50IHRsYmNhbV9pbmRleDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fY2FtMCwgX19jYW0xLCBfX2NhbTI7CitzdGF0aWMgdW5zaWduZWQgbG9uZyBjYW1bQ09ORklHX0xPV01FTV9DQU1fTlVNXTsKIAogI2RlZmluZSBOVU1fVExCQ0FNUwkoMTYpCiAKKyNpZiBkZWZpbmVkKENPTkZJR19MT1dNRU1fQ0FNX05VTV9CT09MKSAmJiAoQ09ORklHX0xPV01FTV9DQU1fTlVNID49IE5VTV9UTEJDQU1TKQorI2Vycm9yICJMT1dNRU1fQ0FNX05VTSBtdXN0IGJlIGxlc3MgdGhhbiBOVU1fVExCQ0FNUyIKKyNlbmRpZgorCiBzdHJ1Y3QgdGxiY2FtIFRMQkNBTVtOVU1fVExCQ0FNU107CiAKIHN0cnVjdCB0bGJjYW1yYW5nZSB7CkBAIC0xMDcsNyArMTExLDcgQEAKIAl1bnNpZ25lZCBpbnQgdHNpemUsIGx6OwogCiAJYXNtICgiY250bHp3ICUwLCUxIiA6ICI9ciIgKGx6KSA6ICJyIiAoc2l6ZSkpOwotCXRzaXplID0gKDIxIC0gbHopIC8gMjsKKwl0c2l6ZSA9IDIxIC0gbHo7CiAKICNpZmRlZiBDT05GSUdfU01QCiAJaWYgKChmbGFncyAmIF9QQUdFX05PX0NBQ0hFKSA9PSAwKQpAQCAtMTUyLDE5ICsxNTYsMTkgQEAKIAlsb2FkY2FtX2VudHJ5KGluZGV4KTsKIH0KIAotdm9pZCBfX2luaXQgY2FtX21hcGluX3JhbSh1bnNpZ25lZCBsb25nIGNhbTAsIHVuc2lnbmVkIGxvbmcgY2FtMSwKLQkJdW5zaWduZWQgbG9uZyBjYW0yKQordW5zaWduZWQgbG9uZyBfX2luaXQgbW11X21hcGluX3JhbSh2b2lkKQogewotCXNldHRsYmNhbSgwLCBQQUdFX09GRlNFVCwgbWVtc3RhcnRfYWRkciwgY2FtMCwgX1BBR0VfS0VSTkVMLCAwKTsKLQl0bGJjYW1faW5kZXgrKzsKLQlpZiAoY2FtMSkgeworCXVuc2lnbmVkIGxvbmcgdmlydCA9IFBBR0VfT0ZGU0VUOworCXBoeXNfYWRkcl90IHBoeXMgPSBtZW1zdGFydF9hZGRyOworCisJd2hpbGUgKGNhbVt0bGJjYW1faW5kZXhdICYmIHRsYmNhbV9pbmRleCA8IEFSUkFZX1NJWkUoY2FtKSkgeworCQlzZXR0bGJjYW0odGxiY2FtX2luZGV4LCB2aXJ0LCBwaHlzLCBjYW1bdGxiY2FtX2luZGV4XSwgUEFHRV9LRVJORUxfWCwgMCk7CisJCXZpcnQgKz0gY2FtW3RsYmNhbV9pbmRleF07CisJCXBoeXMgKz0gY2FtW3RsYmNhbV9pbmRleF07CiAJCXRsYmNhbV9pbmRleCsrOwotCQlzZXR0bGJjYW0oMSwgUEFHRV9PRkZTRVQrY2FtMCwgbWVtc3RhcnRfYWRkcitjYW0wLCBjYW0xLCBfUEFHRV9LRVJORUwsIDApOwogCX0KLQlpZiAoY2FtMikgewotCQl0bGJjYW1faW5kZXgrKzsKLQkJc2V0dGxiY2FtKDIsIFBBR0VfT0ZGU0VUK2NhbTArY2FtMSwgbWVtc3RhcnRfYWRkcitjYW0wK2NhbTEsIGNhbTIsIF9QQUdFX0tFUk5FTCwgMCk7Ci0JfQorCisJcmV0dXJuIHZpcnQgLSBQQUdFX09GRlNFVDsKIH0KIAogLyoKQEAgLTE3NSw1MSArMTc5LDQ2IEBACiAJZmx1c2hfaW5zdHJ1Y3Rpb25fY2FjaGUoKTsKIH0KIAotdW5zaWduZWQgbG9uZyBfX2luaXQgbW11X21hcGluX3JhbSh2b2lkKQotewotCWNhbV9tYXBpbl9yYW0oX19jYW0wLCBfX2NhbTEsIF9fY2FtMik7Ci0KLQlyZXR1cm4gX19jYW0wICsgX19jYW0xICsgX19jYW0yOwotfQotCi0KIHZvaWQgX19pbml0CiBhZGp1c3RfdG90YWxfbG93bWVtKHZvaWQpCiB7Ci0JcGh5c19hZGRyX3QgbWF4X2xvd21lbV9zaXplID0gX19tYXhfbG93X21lbW9yeTsKLQlwaHlzX2FkZHJfdCBjYW1fbWF4X3NpemUgPSAweDEwMDAwMDAwOwogCXBoeXNfYWRkcl90IHJhbTsKKwl1bnNpZ25lZCBpbnQgbWF4X2NhbSA9IChtZnNwcihTUFJOX1RMQjFDRkcpID4+IDE2KSAmIDB4ZmY7CisJY2hhciBidWZbQVJSQVlfU0laRShjYW0pICogNSArIDFdLCAqcCA9IGJ1ZjsKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIHZpcnQgPSBQQUdFX09GRlNFVCAmIDB4ZmZmZmZmZmZVTDsKKwl1bnNpZ25lZCBsb25nIHBoeXMgPSBtZW1zdGFydF9hZGRyICYgMHhmZmZmZmZmZlVMOwogCi0JLyogYWRqdXN0IENBTSBzaXplIHRvIG1heF9sb3dtZW1fc2l6ZSAqLwotCWlmIChtYXhfbG93bWVtX3NpemUgPCBjYW1fbWF4X3NpemUpCi0JCWNhbV9tYXhfc2l6ZSA9IG1heF9sb3dtZW1fc2l6ZTsKKwkvKiBDb252ZXJ0ICg0Xm1heCkga0IgdG8gKDJebWF4KSBieXRlcyAqLworCW1heF9jYW0gPSBtYXhfY2FtICogMiArIDEwOwogCi0JLyogYWRqdXN0IGxvd21lbSBzaXplIHRvIG1heF9sb3dtZW1fc2l6ZSAqLwotCXJhbSA9IG1pbihtYXhfbG93bWVtX3NpemUsIHRvdGFsX2xvd21lbSk7CisJLyogYWRqdXN0IGxvd21lbSBzaXplIHRvIF9fbWF4X2xvd19tZW1vcnkgKi8KKwlyYW0gPSBtaW4oKHBoeXNfYWRkcl90KV9fbWF4X2xvd19tZW1vcnksIChwaHlzX2FkZHJfdCl0b3RhbF9sb3dtZW0pOwogCiAJLyogQ2FsY3VsYXRlIENBTSB2YWx1ZXMgKi8KLQlfX2NhbTAgPSAxVUwgPDwgMiAqIChfX2lsb2cyKHJhbSkgLyAyKTsKLQlpZiAoX19jYW0wID4gY2FtX21heF9zaXplKQotCQlfX2NhbTAgPSBjYW1fbWF4X3NpemU7Ci0JcmFtIC09IF9fY2FtMDsKLQlpZiAocmFtKSB7Ci0JCV9fY2FtMSA9IDFVTCA8PCAyICogKF9faWxvZzIocmFtKSAvIDIpOwotCQlpZiAoX19jYW0xID4gY2FtX21heF9zaXplKQotCQkJX19jYW0xID0gY2FtX21heF9zaXplOwotCQlyYW0gLT0gX19jYW0xOwotCX0KLQlpZiAocmFtKSB7Ci0JCV9fY2FtMiA9IDFVTCA8PCAyICogKF9faWxvZzIocmFtKSAvIDIpOwotCQlpZiAoX19jYW0yID4gY2FtX21heF9zaXplKQotCQkJX19jYW0yID0gY2FtX21heF9zaXplOwotCQlyYW0gLT0gX19jYW0yOwotCX0KKwlfX21heF9sb3dfbWVtb3J5ID0gMDsKKwlmb3IgKGkgPSAwOyByYW0gJiYgaSA8IEFSUkFZX1NJWkUoY2FtKTsgaSsrKSB7CisJCXVuc2lnbmVkIGludCBjYW1zaXplID0gX19pbG9nMihyYW0pICYgfjFVOworCQl1bnNpZ25lZCBpbnQgYWxpZ24gPSBfX2Zmcyh2aXJ0IHwgcGh5cykgJiB+MVU7CiAKLQlwcmludGsoS0VSTl9JTkZPICJNZW1vcnkgQ0FNIG1hcHBpbmc6IENBTTA9JWxkTWIsIENBTTE9JWxkTWIsIgotCQkJIiBDQU0yPSVsZE1iIHJlc2lkdWFsOiAlbGRNYlxuIiwKLQkJCV9fY2FtMCA+PiAyMCwgX19jYW0xID4+IDIwLCBfX2NhbTIgPj4gMjAsCi0JCQkobG9uZyBpbnQpKCh0b3RhbF9sb3dtZW0gLSBfX2NhbTAgLSBfX2NhbTEgLSBfX2NhbTIpCi0JCQkJICAgPj4gMjApKTsKLQlfX21heF9sb3dfbWVtb3J5ID0gX19jYW0wICsgX19jYW0xICsgX19jYW0yOworCQlpZiAoY2Ftc2l6ZSA+IGFsaWduKQorCQkJY2Ftc2l6ZSA9IGFsaWduOworCQlpZiAoY2Ftc2l6ZSA+IG1heF9jYW0pCisJCQljYW1zaXplID0gbWF4X2NhbTsKKworCQljYW1baV0gPSAxVUwgPDwgY2Ftc2l6ZTsKKwkJcmFtIC09IGNhbVtpXTsKKwkJX19tYXhfbG93X21lbW9yeSArPSBjYW1baV07CisJCXZpcnQgKz0gY2FtW2ldOworCQlwaHlzICs9IGNhbVtpXTsKKworCQlwICs9IHNwcmludGYocCwgIiVsdS8iLCBjYW1baV0gPj4gMjApOworCX0KKwlmb3IgKDsgaSA8IEFSUkFZX1NJWkUoY2FtKTsgaSsrKQorCQlwICs9IHNwcmludGYocCwgIjAvIik7CisJcFstMV0gPSAnXDAnOworCisJcHJfaW5mbygiTWVtb3J5IENBTSBtYXBwaW5nOiAlcyBNYiwgcmVzaWR1YWw6ICVkTWJcbiIsIGJ1ZiwKKwkgICAgICAgICh1bnNpZ25lZCBpbnQpKCh0b3RhbF9sb3dtZW0gLSBfX21heF9sb3dfbWVtb3J5KSA+PiAyMCkpOwogCV9faW5pdGlhbF9tZW1vcnlfbGltaXRfYWRkciA9IG1lbXN0YXJ0X2FkZHIgKyBfX21heF9sb3dfbWVtb3J5OwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL2d1cC5jIGIvYXJjaC9wb3dlcnBjL21tL2d1cC5jCmluZGV4IDI4YTExNGQuLmJjNDAwYzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9ndXAuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vZ3VwLmMKQEAgLTE0LDYgKzE0LDggQEAKICNpbmNsdWRlIDxsaW51eC9yd3NlbS5oPgogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAKKyNpZmRlZiBfX0hBVkVfQVJDSF9QVEVfU1BFQ0lBTAorCiAvKgogICogVGhlIHBlcmZvcm1hbmNlIGNyaXRpY2FsIGxlYWYgZnVuY3Rpb25zIGFyZSBtYWRlIG5vaW5saW5lIG90aGVyd2lzZSBnY2MKICAqIGlubGluZXMgZXZlcnl0aGluZyBpbnRvIGEgc2luZ2xlIGZ1bmN0aW9uIHdoaWNoIHJlc3VsdHMgaW4gdG9vIG11Y2gKQEAgLTE1MSw4ICsxNTMsMTEgQEAKIAl1bnNpZ25lZCBsb25nIGFkZHIsIGxlbiwgZW5kOwogCXVuc2lnbmVkIGxvbmcgbmV4dDsKIAlwZ2RfdCAqcGdkcDsKLQlpbnQgcHNpemUsIG5yID0gMDsKKwlpbnQgbnIgPSAwOworI2lmZGVmIENPTkZJR19QUEM2NAogCXVuc2lnbmVkIGludCBzaGlmdDsKKwlpbnQgcHNpemU7CisjZW5kaWYKIAogCXByX2RlYnVnKCIlcyglbHgsJXgsJXMpXG4iLCBfX2Z1bmNfXywgc3RhcnQsIG5yX3BhZ2VzLCB3cml0ZSA/ICJ3cml0ZSIgOiAicmVhZCIpOwogCkBAIC0yMDUsOCArMjEwLDEzIEBACiAJICovCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAorI2lmZGVmIENPTkZJR19QUEM2NAorCS8qIFRob3NlIGJpdHMgYXJlIHJlbGF0ZWQgdG8gaHVnZXRsYmZzIGltcGxlbWVudGF0aW9uIGFuZCBvbmx5IGV4aXN0CisJICogb24gNjQtYml0IGZvciBub3cKKwkgKi8KIAlwc2l6ZSA9IGdldF9zbGljZV9wc2l6ZShtbSwgYWRkcik7CiAJc2hpZnQgPSBtbXVfcHNpemVfZGVmc1twc2l6ZV0uc2hpZnQ7CisjZW5kaWYgLyogQ09ORklHX1BQQzY0ICovCiAKICNpZmRlZiBDT05GSUdfSFVHRVRMQl9QQUdFCiAJaWYgKHVubGlrZWx5KG1tdV9odWdlX3BzaXplc1twc2l6ZV0pKSB7CkBAIC0yMzYsNyArMjQ2LDkgQEAKIAkJZG8gewogCQkJcGdkX3QgcGdkID0gKnBnZHA7CiAKKyNpZmRlZiBDT05GSUdfUFBDNjQKIAkJCVZNX0JVR19PTihzaGlmdCAhPSBtbXVfcHNpemVfZGVmc1tnZXRfc2xpY2VfcHNpemUobW0sIGFkZHIpXS5zaGlmdCk7CisjZW5kaWYKIAkJCXByX2RlYnVnKCIgICUwMTZseDogbm9ybWFsIHBnZCAlcFxuIiwgYWRkciwKIAkJCQkgKHZvaWQgKilwZ2RfdmFsKHBnZCkpOwogCQkJbmV4dCA9IHBnZF9hZGRyX2VuZChhZGRyLCBlbmQpOwpAQCAtMjc5LDMgKzI5MSw1IEBACiAJCXJldHVybiByZXQ7CiAJfQogfQorCisjZW5kaWYgLyogX19IQVZFX0FSQ0hfUFRFX1NQRUNJQUwgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vaGFzaF91dGlsc182NC5jCmluZGV4IDhkNWI0NzUuLmRiNTU2ZDIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9oYXNoX3V0aWxzXzY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL2hhc2hfdXRpbHNfNjQuYwpAQCAtNTE2LDcgKzUxNiw3IEBACiAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdCBodGFiX2dldF90YWJsZV9zaXplKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBtZW1fc2l6ZSwgcm5kX21lbV9zaXplLCBwdGVnX2NvdW50OworCXVuc2lnbmVkIGxvbmcgbWVtX3NpemUsIHJuZF9tZW1fc2l6ZSwgcHRlZ19jb3VudCwgcHNpemU7CiAKIAkvKiBJZiBoYXNoIHNpemUgaXNuJ3QgYWxyZWFkeSBwcm92aWRlZCBieSB0aGUgcGxhdGZvcm0sIHdlIHRyeSB0bwogCSAqIHJldHJpZXZlIGl0IGZyb20gdGhlIGRldmljZS10cmVlLiBJZiBpdCdzIG5vdCB0aGVyZSBuZWl0aGVyLCB3ZQpAQCAtNTM0LDcgKzUzNCw4IEBACiAJCXJuZF9tZW1fc2l6ZSA8PD0gMTsKIAogCS8qICMgcGFnZXMgLyAyICovCi0JcHRlZ19jb3VudCA9IG1heChybmRfbWVtX3NpemUgPj4gKDEyICsgMSksIDFVTCA8PCAxMSk7CisJcHNpemUgPSBtbXVfcHNpemVfZGVmc1ttbXVfdmlydHVhbF9wc2l6ZV0uc2hpZnQ7CisJcHRlZ19jb3VudCA9IG1heChybmRfbWVtX3NpemUgPj4gKHBzaXplICsgMSksIDFVTCA8PCAxMSk7CiAKIAlyZXR1cm4gcHRlZ19jb3VudCA8PCA3OwogfQpAQCAtNTg5LDcgKzU5MCw3IEBACiAJbWFrZV9ibChodGFiX2NhbGxfaHB0ZV91cGRhdGVwcCwgcHBjX21kLmhwdGVfdXBkYXRlcHApOwogfQogCi12b2lkIF9faW5pdCBodGFiX2luaXRpYWxpemUodm9pZCkKK3N0YXRpYyB2b2lkIF9faW5pdCBodGFiX2luaXRpYWxpemUodm9pZCkKIHsKIAl1bnNpZ25lZCBsb25nIHRhYmxlOwogCXVuc2lnbmVkIGxvbmcgcHRlZ19jb3VudDsKQEAgLTczMSwxMSArNzMyLDQzIEBACiAjdW5kZWYgS0IKICN1bmRlZiBNQgogCi12b2lkIGh0YWJfaW5pdGlhbGl6ZV9zZWNvbmRhcnkodm9pZCkKK3ZvaWQgX19pbml0IGVhcmx5X2luaXRfbW11KHZvaWQpCiB7CisJLyogU2V0dXAgaW5pdGlhbCBTVEFCIGFkZHJlc3MgaW4gdGhlIFBBQ0EgKi8KKwlnZXRfcGFjYSgpLT5zdGFiX3JlYWwgPSBfX3BhKCh1NjQpJmluaXRpYWxfc3RhYik7CisJZ2V0X3BhY2EoKS0+c3RhYl9hZGRyID0gKHU2NCkmaW5pdGlhbF9zdGFiOworCisJLyogSW5pdGlhbGl6ZSB0aGUgTU1VIEhhc2ggdGFibGUgYW5kIGNyZWF0ZSB0aGUgbGluZWFyIG1hcHBpbmcKKwkgKiBvZiBtZW1vcnkuIEhhcyB0byBiZSBkb25lIGJlZm9yZSBzdGFiL3NsYiBpbml0aWFsaXphdGlvbiBhcworCSAqIHRoaXMgaXMgY3VycmVudGx5IHdoZXJlIHRoZSBwYWdlIHNpemUgZW5jb2RpbmcgaXMgb2J0YWluZWQKKwkgKi8KKwlodGFiX2luaXRpYWxpemUoKTsKKworCS8qIEluaXRpYWxpemUgc3RhYiAvIFNMQiBtYW5hZ2VtZW50IGV4Y2VwdCBvbiBpU2VyaWVzCisJICovCisJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1NMQikpCisJCXNsYl9pbml0aWFsaXplKCk7CisJZWxzZSBpZiAoIWZpcm13YXJlX2hhc19mZWF0dXJlKEZXX0ZFQVRVUkVfSVNFUklFUykpCisJCXN0YWJfaW5pdGlhbGl6ZShnZXRfcGFjYSgpLT5zdGFiX3JlYWwpOworfQorCisjaWZkZWYgQ09ORklHX1NNUAordm9pZCBfX2luaXQgZWFybHlfaW5pdF9tbXVfc2Vjb25kYXJ5KHZvaWQpCit7CisJLyogSW5pdGlhbGl6ZSBoYXNoIHRhYmxlIGZvciB0aGF0IENQVSAqLwogCWlmICghZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9MUEFSKSkKIAkJbXRzcHIoU1BSTl9TRFIxLCBfU0RSMSk7CisKKwkvKiBJbml0aWFsaXplIFNUQUIvU0xCLiBXZSB1c2UgYSB2aXJ0dWFsIGFkZHJlc3MgYXMgaXQgd29ya3MKKwkgKiBpbiByZWFsIG1vZGUgb24gcFNlcmllcyBhbmQgd2Ugd2FudCBhIHZpcnV0YWwgYWRkcmVzcyBvbgorCSAqIGlTZXJpZXMgYW55d2F5CisJICovCisJaWYgKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX1NMQikpCisJCXNsYl9pbml0aWFsaXplKCk7CisJZWxzZQorCQlzdGFiX2luaXRpYWxpemUoZ2V0X3BhY2EoKS0+c3RhYl9hZGRyKTsKIH0KKyNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKIC8qCiAgKiBDYWxsZWQgYnkgYXNtIGhhc2h0YWJsZS5TIGZvciBkb2luZyBsYXp5IGljYWNoZSBmbHVzaApAQCAtODU4LDcgKzg5MSw3IEBACiAJdW5zaWduZWQgbG9uZyB2c2lkOwogCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tOwogCXB0ZV90ICpwdGVwOwotCWNwdW1hc2tfdCB0bXA7CisJY29uc3Qgc3RydWN0IGNwdW1hc2sgKnRtcDsKIAlpbnQgcmMsIHVzZXJfcmVnaW9uID0gMCwgbG9jYWwgPSAwOwogCWludCBwc2l6ZSwgc3NpemU7CiAKQEAgLTkwNiw4ICs5MzksOCBAQAogCQlyZXR1cm4gMTsKIAogCS8qIENoZWNrIENQVSBsb2NhbGl0eSAqLwotCXRtcCA9IGNwdW1hc2tfb2ZfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JaWYgKHVzZXJfcmVnaW9uICYmIGNwdXNfZXF1YWwobW0tPmNwdV92bV9tYXNrLCB0bXApKQorCXRtcCA9IGNwdW1hc2tfb2Yoc21wX3Byb2Nlc3Nvcl9pZCgpKTsKKwlpZiAodXNlcl9yZWdpb24gJiYgY3B1bWFza19lcXVhbChtbV9jcHVtYXNrKG1tKSwgdG1wKSkKIAkJbG9jYWwgPSAxOwogCiAjaWZkZWYgQ09ORklHX0hVR0VUTEJfUEFHRQpAQCAtMTAyMyw3ICsxMDU2LDYgQEAKIAl1bnNpZ25lZCBsb25nIHZzaWQ7CiAJdm9pZCAqcGdkaXI7CiAJcHRlX3QgKnB0ZXA7Ci0JY3B1bWFza190IG1hc2s7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgbG9jYWwgPSAwOwogCWludCBzc2l6ZTsKQEAgLTEwNjYsOCArMTA5OCw3IEBACiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCiAJLyogSXMgdGhhdCBsb2NhbCB0byB0aGlzIENQVSA/ICovCi0JbWFzayA9IGNwdW1hc2tfb2ZfY3B1KHNtcF9wcm9jZXNzb3JfaWQoKSk7Ci0JaWYgKGNwdXNfZXF1YWwobW0tPmNwdV92bV9tYXNrLCBtYXNrKSkKKwlpZiAoY3B1bWFza19lcXVhbChtbV9jcHVtYXNrKG1tKSwgY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKSkKIAkJbG9jYWwgPSAxOwogCiAJLyogSGFzaCBpdCBpbiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21lbS5jIGIvYXJjaC9wb3dlcnBjL21tL21lbS5jCmluZGV4IGYwMGYwOWEuLmY2NjhmYTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tZW0uYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbWVtLmMKQEAgLTQ3Miw0MCArNDcyLDcgQEAKIHsKICNpZmRlZiBDT05GSUdfUFBDX1NURF9NTVUKIAl1bnNpZ25lZCBsb25nIGFjY2VzcyA9IDAsIHRyYXA7Ci0jZW5kaWYKLQl1bnNpZ25lZCBsb25nIHBmbiA9IHB0ZV9wZm4ocHRlKTsKIAotCS8qIGhhbmRsZSBpLWNhY2hlIGNvaGVyZW5jeSAqLwotCWlmICghY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfQ09IRVJFTlRfSUNBQ0hFKSAmJgotCSAgICAhY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfTk9FWEVDVVRFKSAmJgotCSAgICBwZm5fdmFsaWQocGZuKSkgewotCQlzdHJ1Y3QgcGFnZSAqcGFnZSA9IHBmbl90b19wYWdlKHBmbik7Ci0jaWZkZWYgQ09ORklHXzh4eAotCQkvKiBPbiA4eHgsIGNhY2hlIGNvbnRyb2wgaW5zdHJ1Y3Rpb25zIChwYXJ0aWN1bGFybHkKLQkJICogImRjYnN0IiBmcm9tIGZsdXNoX2RjYWNoZV9pY2FjaGUpIGZhdWx0IGFzIHdyaXRlCi0JCSAqIG9wZXJhdGlvbiBpZiB0aGVyZSBpcyBhbiB1bnBvcHVsYXRlZCBUTEIgZW50cnkKLQkJICogZm9yIHRoZSBhZGRyZXNzIGluIHF1ZXN0aW9uLiBUbyB3b3JrYXJvdW5kIHRoYXQsCi0JCSAqIHdlIGludmFsaWRhdGUgdGhlIFRMQiBoZXJlLCB0aHVzIGF2b2lkaW5nIGRjYnN0Ci0JCSAqIG1pc2JlaGF2aW91ci4KLQkJICovCi0JCV90bGJpbF92YShhZGRyZXNzLCAwIC8qIDh4eCBkb2Vzbid0IGNhcmUgYWJvdXQgUElEICovKTsKLSNlbmRpZgotCQkvKiBUaGUgX1BBR0VfVVNFUiB0ZXN0IHNob3VsZCByZWFsbHkgYmUgX1BBR0VfRVhFQywgYnV0Ci0JCSAqIG9sZGVyIGdsaWJjIHZlcnNpb25zIGV4ZWN1dGUgc29tZSBjb2RlIGZyb20gbm8tZXhlYwotCQkgKiBwYWdlcywgd2hpY2ggZm9yIG5vdyB3ZSBhcmUgc3VwcG9ydGluZy4gIElmIGV4ZWMtb25seQotCQkgKiBwYWdlcyBhcmUgZXZlciBpbXBsZW1lbnRlZCwgdGhpcyB3aWxsIGhhdmUgdG8gY2hhbmdlLgotCQkgKi8KLQkJaWYgKCFQYWdlUmVzZXJ2ZWQocGFnZSkgJiYgKHB0ZV92YWwocHRlKSAmIF9QQUdFX1VTRVIpCi0JCSAgICAmJiAhdGVzdF9iaXQoUEdfYXJjaF8xLCAmcGFnZS0+ZmxhZ3MpKSB7Ci0JCQlpZiAodm1hLT52bV9tbSA9PSBjdXJyZW50LT5hY3RpdmVfbW0pIHsKLQkJCQlfX2ZsdXNoX2RjYWNoZV9pY2FjaGUoKHZvaWQgKikgYWRkcmVzcyk7Ci0JCQl9IGVsc2UKLQkJCQlmbHVzaF9kY2FjaGVfaWNhY2hlX3BhZ2UocGFnZSk7Ci0JCQlzZXRfYml0KFBHX2FyY2hfMSwgJnBhZ2UtPmZsYWdzKTsKLQkJfQotCX0KLQotI2lmZGVmIENPTkZJR19QUENfU1REX01NVQogCS8qIFdlIG9ubHkgd2FudCBIUFRFcyBmb3IgbGludXggUFRFcyB0aGF0IGhhdmUgX1BBR0VfQUNDRVNTRUQgc2V0ICovCiAJaWYgKCFwdGVfeW91bmcocHRlKSB8fCBhZGRyZXNzID49IFRBU0tfU0laRSkKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21tYXAuYyBiL2FyY2gvcG93ZXJwYy9tbS9tbWFwXzY0LmMKc2ltaWxhcml0eSBpbmRleCA2NCUKcmVuYW1lIGZyb20gYXJjaC9wb3dlcnBjL21tL21tYXAuYwpyZW5hbWUgdG8gYXJjaC9wb3dlcnBjL21tL21tYXBfNjQuYwppbmRleCA4NjAxMGZjLi4wZDk1N2E0IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vbW1hcC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS9tbWFwXzY0LmMKQEAgLTI0LDE2ICsyNCw1NyBAQAogCiAjaW5jbHVkZSA8bGludXgvcGVyc29uYWxpdHkuaD4KICNpbmNsdWRlIDxsaW51eC9tbS5oPgorI2luY2x1ZGUgPGxpbnV4L3JhbmRvbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+CiAKIC8qCiAgKiBUb3Agb2YgbW1hcCBhcmVhIChqdXN0IGJlbG93IHRoZSBwcm9jZXNzIHN0YWNrKS4KICAqCi0gKiBMZWF2ZSBhbiBhdCBsZWFzdCB+MTI4IE1CIGhvbGUuCisgKiBMZWF2ZSBhdCBsZWFzdCBhIH4xMjggTUIgaG9sZSBvbiAzMmJpdCBhcHBsaWNhdGlvbnMuCisgKgorICogT24gNjRiaXQgYXBwbGljYXRpb25zIHdlIHJhbmRvbWlzZSB0aGUgc3RhY2sgYnkgMUdCIHNvIHdlIG5lZWQgdG8KKyAqIHNwYWNlIG91ciBtbWFwIHN0YXJ0IGFkZHJlc3MgYnkgYSBmdXJ0aGVyIDFHQiwgb3RoZXJ3aXNlIHRoZXJlIGlzIGEKKyAqIGNoYW5jZSB0aGUgbW1hcCBhcmVhIHdpbGwgZW5kIHVwIGNsb3NlciB0byB0aGUgc3RhY2sgdGhhbiBvdXIgdWxpbWl0CisgKiByZXF1aXJlcy4KICAqLwotI2RlZmluZSBNSU5fR0FQICgxMjgqMTAyNCoxMDI0KQorI2RlZmluZSBNSU5fR0FQMzIgKDEyOCoxMDI0KjEwMjQpCisjZGVmaW5lIE1JTl9HQVA2NCAoKDEyOCArIDEwMjQpKjEwMjQqMTAyNFVMKQorI2RlZmluZSBNSU5fR0FQICgoaXNfMzJiaXRfdGFzaygpKSA/IE1JTl9HQVAzMiA6IE1JTl9HQVA2NCkKICNkZWZpbmUgTUFYX0dBUCAoVEFTS19TSVpFLzYqNSkKIAorc3RhdGljIGlubGluZSBpbnQgbW1hcF9pc19sZWdhY3kodm9pZCkKK3sKKwlpZiAoY3VycmVudC0+cGVyc29uYWxpdHkgJiBBRERSX0NPTVBBVF9MQVlPVVQpCisJCXJldHVybiAxOworCisJaWYgKGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfU1RBQ0tdLnJsaW1fY3VyID09IFJMSU1fSU5GSU5JVFkpCisJCXJldHVybiAxOworCisJcmV0dXJuIHN5c2N0bF9sZWdhY3lfdmFfbGF5b3V0OworfQorCisvKgorICogU2luY2UgZ2V0X3JhbmRvbV9pbnQoKSByZXR1cm5zIHRoZSBzYW1lIHZhbHVlIHdpdGhpbiBhIDEgamlmZnkgd2luZG93LAorICogd2Ugd2lsbCBhbG1vc3QgYWx3YXlzIGdldCB0aGUgc2FtZSByYW5kb21pc2F0aW9uIGZvciB0aGUgc3RhY2sgYW5kIG1tYXAKKyAqIHJlZ2lvbi4gVGhpcyB3aWxsIG1lYW4gdGhlIHJlbGF0aXZlIGRpc3RhbmNlIGJldHdlZW4gc3RhY2sgYW5kIG1tYXAgd2lsbAorICogYmUgdGhlIHNhbWUuCisgKgorICogVG8gYXZvaWQgdGhpcyB3ZSBjYW4gc2hpZnQgdGhlIHJhbmRvbW5lc3MgYnkgMSBiaXQuCisgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIG1tYXBfcm5kKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyBybmQgPSAwOworCisJaWYgKGN1cnJlbnQtPmZsYWdzICYgUEZfUkFORE9NSVpFKSB7CisJCS8qIDhNQiBmb3IgMzJiaXQsIDFHQiBmb3IgNjRiaXQgKi8KKwkJaWYgKGlzXzMyYml0X3Rhc2soKSkKKwkJCXJuZCA9IChsb25nKShnZXRfcmFuZG9tX2ludCgpICUgKDE8PCgyMi1QQUdFX1NISUZUKSkpOworCQllbHNlCisJCQlybmQgPSAobG9uZykoZ2V0X3JhbmRvbV9pbnQoKSAlICgxPDwoMjktUEFHRV9TSElGVCkpKTsKKwl9CisJcmV0dXJuIChybmQgPDwgUEFHRV9TSElGVCkgKiAyOworfQorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbW1hcF9iYXNlKHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBnYXAgPSBjdXJyZW50LT5zaWduYWwtPnJsaW1bUkxJTUlUX1NUQUNLXS5ybGltX2N1cjsKQEAgLTQzLDI0ICs4NCw3IEBACiAJZWxzZSBpZiAoZ2FwID4gTUFYX0dBUCkKIAkJZ2FwID0gTUFYX0dBUDsKIAotCXJldHVybiBUQVNLX1NJWkUgLSAoZ2FwICYgUEFHRV9NQVNLKTsKLX0KLQotc3RhdGljIGlubGluZSBpbnQgbW1hcF9pc19sZWdhY3kodm9pZCkKLXsKLQkvKgotCSAqIEZvcmNlIHN0YW5kYXJkIGFsbG9jYXRpb24gZm9yIDY0IGJpdCBwcm9ncmFtcy4KLQkgKi8KLQlpZiAoIXRlc3RfdGhyZWFkX2ZsYWcoVElGXzMyQklUKSkKLQkJcmV0dXJuIDE7Ci0KLQlpZiAoY3VycmVudC0+cGVyc29uYWxpdHkgJiBBRERSX0NPTVBBVF9MQVlPVVQpCi0JCXJldHVybiAxOwotCi0JaWYgKGN1cnJlbnQtPnNpZ25hbC0+cmxpbVtSTElNSVRfU1RBQ0tdLnJsaW1fY3VyID09IFJMSU1fSU5GSU5JVFkpCi0JCXJldHVybiAxOwotCi0JcmV0dXJuIHN5c2N0bF9sZWdhY3lfdmFfbGF5b3V0OworCXJldHVybiBQQUdFX0FMSUdOKFRBU0tfU0laRSAtIGdhcCAtIG1tYXBfcm5kKCkpOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jIGIvYXJjaC9wb3dlcnBjL21tL21tdV9jb250ZXh0X25vaGFzaC5jCmluZGV4IDUyYTBjZmMuLmE3MGUzMTEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9tbXVfY29udGV4dF9ub2hhc2guYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbW11X2NvbnRleHRfbm9oYXNoLmMKQEAgLTk3LDcgKzk3LDcgQEAKIAkJbW0tPmNvbnRleHQuaWQgPSBNTVVfTk9fQ09OVEVYVDsKIAogCQkvKiBNYXJrIGl0IHN0YWxlIG9uIGFsbCBDUFVzIHRoYXQgdXNlZCB0aGlzIG1tICovCi0JCWZvcl9lYWNoX2NwdV9tYXNrX25yKGNwdSwgbW0tPmNwdV92bV9tYXNrKQorCQlmb3JfZWFjaF9jcHUoY3B1LCBtbV9jcHVtYXNrKG1tKSkKIAkJCV9fc2V0X2JpdChpZCwgc3RhbGVfbWFwW2NwdV0pOwogCQlyZXR1cm4gaWQ7CiAJfQpAQCAtMzgwLDcgKzM4MCw3IEBACiAjZW5kaWYKIAogCXByaW50ayhLRVJOX0lORk8KLQkgICAgICAgIk1NVTogQWxsb2NhdGVkICVkIGJ5dGVzIG9mIGNvbnRleHQgbWFwcyBmb3IgJWQgY29udGV4dHNcbiIsCisJICAgICAgICJNTVU6IEFsbG9jYXRlZCAlenUgYnl0ZXMgb2YgY29udGV4dCBtYXBzIGZvciAlZCBjb250ZXh0c1xuIiwKIAkgICAgICAgMiAqIENUWF9NQVBfU0laRSArIChzaXplb2Yodm9pZCAqKSAqIChsYXN0X2NvbnRleHQgKyAxKSksCiAJICAgICAgIGxhc3RfY29udGV4dCAtIGZpcnN0X2NvbnRleHQgKyAxKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL251bWEuYyBiL2FyY2gvcG93ZXJwYy9tbS9udW1hLmMKaW5kZXggNWFjMDhiOC4uOTA0NzE0NSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL251bWEuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vbnVtYS5jCkBAIC0xNTgsMzUgKzE1OCw2IEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCiAKLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX25vZGUgKiBfX2NwdWluaXQgZmluZF9jcHVfbm9kZSh1bnNpZ25lZCBpbnQgY3B1KQotewotCXVuc2lnbmVkIGludCBod19jcHVpZCA9IGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoY3B1KTsKLQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdV9ub2RlID0gTlVMTDsKLQljb25zdCB1bnNpZ25lZCBpbnQgKmludGVycnVwdF9zZXJ2ZXIsICpyZWc7Ci0JaW50IGxlbjsKLQotCXdoaWxlICgoY3B1X25vZGUgPSBvZl9maW5kX25vZGVfYnlfdHlwZShjcHVfbm9kZSwgImNwdSIpKSAhPSBOVUxMKSB7Ci0JCS8qIFRyeSBpbnRlcnJ1cHQgc2VydmVyIGZpcnN0ICovCi0JCWludGVycnVwdF9zZXJ2ZXIgPSBvZl9nZXRfcHJvcGVydHkoY3B1X25vZGUsCi0JCQkJCSJpYm0scHBjLWludGVycnVwdC1zZXJ2ZXIjcyIsICZsZW4pOwotCi0JCWxlbiA9IGxlbiAvIHNpemVvZih1MzIpOwotCi0JCWlmIChpbnRlcnJ1cHRfc2VydmVyICYmIChsZW4gPiAwKSkgewotCQkJd2hpbGUgKGxlbi0tKSB7Ci0JCQkJaWYgKGludGVycnVwdF9zZXJ2ZXJbbGVuXSA9PSBod19jcHVpZCkKLQkJCQkJcmV0dXJuIGNwdV9ub2RlOwotCQkJfQotCQl9IGVsc2UgewotCQkJcmVnID0gb2ZfZ2V0X3Byb3BlcnR5KGNwdV9ub2RlLCAicmVnIiwgJmxlbik7Ci0JCQlpZiAocmVnICYmIChsZW4gPiAwKSAmJiAocmVnWzBdID09IGh3X2NwdWlkKSkKLQkJCQlyZXR1cm4gY3B1X25vZGU7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gTlVMTDsKLX0KLQogLyogbXVzdCBob2xkIHJlZmVyZW5jZSB0byBub2RlIGR1cmluZyBjYWxsICovCiBzdGF0aWMgY29uc3QgaW50ICpvZl9nZXRfYXNzb2NpYXRpdml0eShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldikKIHsKQEAgLTI5MCw3ICsyNjEsNyBAQAogCXJlZl9wb2ludHMgPSBvZl9nZXRfcHJvcGVydHkocnRhc19yb290LAogCQkJImlibSxhc3NvY2lhdGl2aXR5LXJlZmVyZW5jZS1wb2ludHMiLCAmbGVuKTsKIAotCWlmICgobGVuID49IDEpICYmIHJlZl9wb2ludHMpIHsKKwlpZiAoKGxlbiA+PSAyICogc2l6ZW9mKHVuc2lnbmVkIGludCkpICYmIHJlZl9wb2ludHMpIHsKIAkJZGVwdGggPSByZWZfcG9pbnRzWzFdOwogCX0gZWxzZSB7CiAJCWRiZygiTlVNQTogaWJtLGFzc29jaWF0aXZpdHktcmVmZXJlbmNlLXBvaW50cyBub3QgZm91bmQuXG4iKTsKQEAgLTQ3MCw3ICs0NDEsNyBAQAogc3RhdGljIGludCBfX2NwdWluaXQgbnVtYV9zZXR1cF9jcHUodW5zaWduZWQgbG9uZyBsY3B1KQogewogCWludCBuaWQgPSAwOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY3B1ID0gZmluZF9jcHVfbm9kZShsY3B1KTsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmNwdSA9IG9mX2dldF9jcHVfbm9kZShsY3B1LCBOVUxMKTsKIAogCWlmICghY3B1KSB7CiAJCVdBUk5fT04oMSk7CkBAIC02NTIsNyArNjIzLDcgQEAKIAlmb3JfZWFjaF9wcmVzZW50X2NwdShpKSB7CiAJCWludCBuaWQ7CiAKLQkJY3B1ID0gZmluZF9jcHVfbm9kZShpKTsKKwkJY3B1ID0gb2ZfZ2V0X2NwdV9ub2RlKGksIE5VTEwpOwogCQlCVUdfT04oIWNwdSk7CiAJCW5pZCA9IG9mX25vZGVfdG9fbmlkX3NpbmdsZShjcHUpOwogCQlvZl9ub2RlX3B1dChjcHUpOwpAQCAtMTA0MSw1NyArMTAxMiwzMiBAQAogCiAjaWZkZWYgQ09ORklHX01FTU9SWV9IT1RQTFVHCiAvKgotICogVmFsaWRhdGUgdGhlIG5vZGUgYXNzb2NpYXRlZCB3aXRoIHRoZSBtZW1vcnkgc2VjdGlvbiB3ZSBhcmUKLSAqIHRyeWluZyB0byBhZGQuCi0gKi8KLWludCB2YWxpZF9ob3RfYWRkX3NjbihpbnQgKm5pZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdTMyIGxtYl9zaXplLAotCQkgICAgICB1bnNpZ25lZCBsb25nIHNjbl9hZGRyKQotewotCW5vZGVtYXNrX3Qgbm9kZXM7Ci0KLQlpZiAoKm5pZCA8IDAgfHwgIW5vZGVfb25saW5lKCpuaWQpKQotCQkqbmlkID0gYW55X29ubGluZV9ub2RlKE5PREVfTUFTS19BTEwpOwotCi0JaWYgKChzY25fYWRkciA+PSBzdGFydCkgJiYgKHNjbl9hZGRyIDwgKHN0YXJ0ICsgbG1iX3NpemUpKSkgewotCQlub2Rlc19zZXRhbGwobm9kZXMpOwotCQl3aGlsZSAoTk9ERV9EQVRBKCpuaWQpLT5ub2RlX3NwYW5uZWRfcGFnZXMgPT0gMCkgewotCQkJbm9kZV9jbGVhcigqbmlkLCBub2Rlcyk7Ci0JCQkqbmlkID0gYW55X29ubGluZV9ub2RlKG5vZGVzKTsKLQkJfQotCi0JCXJldHVybiAxOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKgotICogRmluZCB0aGUgbm9kZSBhc3NvY2lhdGVkIHdpdGggYSBob3QgYWRkZWQgbWVtb3J5IHNlY3Rpb24gcmVwcmVzZW50ZWQKLSAqIGJ5IHRoZSBpYm0sZHluYW1pYy1yZWNvbmZpZ3VyYXRpb24tbWVtb3J5IG5vZGUuCisgKiBGaW5kIHRoZSBub2RlIGFzc29jaWF0ZWQgd2l0aCBhIGhvdCBhZGRlZCBtZW1vcnkgc2VjdGlvbiBmb3IKKyAqIG1lbW9yeSByZXByZXNlbnRlZCBpbiB0aGUgZGV2aWNlIHRyZWUgYnkgdGhlIHByb3BlcnR5CisgKiBpYm0sZHluYW1pYy1yZWNvbmZpZ3VyYXRpb24tbWVtb3J5L2libSxkeW5hbWljLW1lbW9yeS4KICAqLwogc3RhdGljIGludCBob3RfYWRkX2RyY29uZl9zY25fdG9fbmlkKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbWVtb3J5LAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyBzY25fYWRkcikKIHsKIAljb25zdCB1MzIgKmRtOwotCXVuc2lnbmVkIGludCBuLCByYzsKKwl1bnNpZ25lZCBpbnQgZHJjb25mX2NlbGxfY250LCByYzsKIAl1bnNpZ25lZCBsb25nIGxtYl9zaXplOwotCWludCBkZWZhdWx0X25pZCA9IGFueV9vbmxpbmVfbm9kZShOT0RFX01BU0tfQUxMKTsKLQlpbnQgbmlkOwogCXN0cnVjdCBhc3NvY19hcnJheXMgYWE7CisJaW50IG5pZCA9IC0xOwogCi0JbiA9IG9mX2dldF9kcmNvbmZfbWVtb3J5KG1lbW9yeSwgJmRtKTsKLQlpZiAoIW4pCi0JCXJldHVybiBkZWZhdWx0X25pZDs7CisJZHJjb25mX2NlbGxfY250ID0gb2ZfZ2V0X2RyY29uZl9tZW1vcnkobWVtb3J5LCAmZG0pOworCWlmICghZHJjb25mX2NlbGxfY250KQorCQlyZXR1cm4gLTE7CiAKIAlsbWJfc2l6ZSA9IG9mX2dldF9sbWJfc2l6ZShtZW1vcnkpOwogCWlmICghbG1iX3NpemUpCi0JCXJldHVybiBkZWZhdWx0X25pZDsKKwkJcmV0dXJuIC0xOwogCiAJcmMgPSBvZl9nZXRfYXNzb2NfYXJyYXlzKG1lbW9yeSwgJmFhKTsKIAlpZiAocmMpCi0JCXJldHVybiBkZWZhdWx0X25pZDsKKwkJcmV0dXJuIC0xOwogCi0JZm9yICg7IG4gIT0gMDsgLS1uKSB7CisJZm9yICg7IGRyY29uZl9jZWxsX2NudCAhPSAwOyAtLWRyY29uZl9jZWxsX2NudCkgewogCQlzdHJ1Y3Qgb2ZfZHJjb25mX2NlbGwgZHJtZW07CiAKIAkJcmVhZF9kcmNvbmZfY2VsbCgmZHJtZW0sICZkbSk7CkBAIC0xMTAyLDM2ICsxMDQ4LDI2IEBACiAJCSAgICB8fCAhKGRybWVtLmZsYWdzICYgRFJDT05GX01FTV9BU1NJR05FRCkpCiAJCQljb250aW51ZTsKIAotCQluaWQgPSBvZl9kcmNvbmZfdG9fbmlkX3NpbmdsZSgmZHJtZW0sICZhYSk7CisJCWlmICgoc2NuX2FkZHIgPCBkcm1lbS5iYXNlX2FkZHIpCisJCSAgICB8fCAoc2NuX2FkZHIgPj0gKGRybWVtLmJhc2VfYWRkciArIGxtYl9zaXplKSkpCisJCQljb250aW51ZTsKIAotCQlpZiAodmFsaWRfaG90X2FkZF9zY24oJm5pZCwgZHJtZW0uYmFzZV9hZGRyLCBsbWJfc2l6ZSwKLQkJCQkgICAgICBzY25fYWRkcikpCi0JCQlyZXR1cm4gbmlkOworCQluaWQgPSBvZl9kcmNvbmZfdG9fbmlkX3NpbmdsZSgmZHJtZW0sICZhYSk7CisJCWJyZWFrOwogCX0KIAotCUJVRygpOwkvKiBzZWN0aW9uIGFkZHJlc3Mgc2hvdWxkIGJlIGZvdW5kIGFib3ZlICovCi0JcmV0dXJuIDA7CisJcmV0dXJuIG5pZDsKIH0KIAogLyoKLSAqIEZpbmQgdGhlIG5vZGUgYXNzb2NpYXRlZCB3aXRoIGEgaG90IGFkZGVkIG1lbW9yeSBzZWN0aW9uLiAgU2VjdGlvbgotICogY29ycmVzcG9uZHMgdG8gYSBTUEFSU0VNRU0gc2VjdGlvbiwgbm90IGFuIExNQi4gIEl0IGlzIGFzc3VtZWQgdGhhdAotICogc2VjdGlvbnMgYXJlIGZ1bGx5IGNvbnRhaW5lZCB3aXRoaW4gYSBzaW5nbGUgTE1CLgorICogRmluZCB0aGUgbm9kZSBhc3NvY2lhdGVkIHdpdGggYSBob3QgYWRkZWQgbWVtb3J5IHNlY3Rpb24gZm9yIG1lbW9yeQorICogcmVwcmVzZW50ZWQgaW4gdGhlIGRldmljZSB0cmVlIGFzIGEgbm9kZSAoaS5lLiBtZW1vcnlAWFhYWCkgZm9yCisgKiBlYWNoIGxtYi4KICAqLwotaW50IGhvdF9hZGRfc2NuX3RvX25pZCh1bnNpZ25lZCBsb25nIHNjbl9hZGRyKQoraW50IGhvdF9hZGRfbm9kZV9zY25fdG9fbmlkKHVuc2lnbmVkIGxvbmcgc2NuX2FkZHIpCiB7CiAJc3RydWN0IGRldmljZV9ub2RlICptZW1vcnkgPSBOVUxMOwotCWludCBuaWQ7Ci0KLQlpZiAoIW51bWFfZW5hYmxlZCB8fCAobWluX2NvbW1vbl9kZXB0aCA8IDApKQotCQlyZXR1cm4gYW55X29ubGluZV9ub2RlKE5PREVfTUFTS19BTEwpOwotCi0JbWVtb3J5ID0gb2ZfZmluZF9ub2RlX2J5X3BhdGgoIi9pYm0sZHluYW1pYy1yZWNvbmZpZ3VyYXRpb24tbWVtb3J5Iik7Ci0JaWYgKG1lbW9yeSkgewotCQluaWQgPSBob3RfYWRkX2RyY29uZl9zY25fdG9fbmlkKG1lbW9yeSwgc2NuX2FkZHIpOwotCQlvZl9ub2RlX3B1dChtZW1vcnkpOwotCQlyZXR1cm4gbmlkOwotCX0KKwlpbnQgbmlkID0gLTE7CiAKIAl3aGlsZSAoKG1lbW9yeSA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKG1lbW9yeSwgIm1lbW9yeSIpKSAhPSBOVUxMKSB7CiAJCXVuc2lnbmVkIGxvbmcgc3RhcnQsIHNpemU7CkBAIC0xMTQ1LDIwICsxMDgxLDYyIEBACiAKIAkJLyogcmFuZ2VzIGluIGNlbGwgKi8KIAkJcmFuZ2VzID0gKGxlbiA+PiAyKSAvIChuX21lbV9hZGRyX2NlbGxzICsgbl9tZW1fc2l6ZV9jZWxscyk7Ci1oYV9uZXdfcmFuZ2U6Ci0JCXN0YXJ0ID0gcmVhZF9uX2NlbGxzKG5fbWVtX2FkZHJfY2VsbHMsICZtZW1jZWxsX2J1Zik7Ci0JCXNpemUgPSByZWFkX25fY2VsbHMobl9tZW1fc2l6ZV9jZWxscywgJm1lbWNlbGxfYnVmKTsKLQkJbmlkID0gb2Zfbm9kZV90b19uaWRfc2luZ2xlKG1lbW9yeSk7CiAKLQkJaWYgKHZhbGlkX2hvdF9hZGRfc2NuKCZuaWQsIHN0YXJ0LCBzaXplLCBzY25fYWRkcikpIHsKLQkJCW9mX25vZGVfcHV0KG1lbW9yeSk7Ci0JCQlyZXR1cm4gbmlkOworCQl3aGlsZSAocmFuZ2VzLS0pIHsKKwkJCXN0YXJ0ID0gcmVhZF9uX2NlbGxzKG5fbWVtX2FkZHJfY2VsbHMsICZtZW1jZWxsX2J1Zik7CisJCQlzaXplID0gcmVhZF9uX2NlbGxzKG5fbWVtX3NpemVfY2VsbHMsICZtZW1jZWxsX2J1Zik7CisKKwkJCWlmICgoc2NuX2FkZHIgPCBzdGFydCkgfHwgKHNjbl9hZGRyID49IChzdGFydCArIHNpemUpKSkKKwkJCQljb250aW51ZTsKKworCQkJbmlkID0gb2Zfbm9kZV90b19uaWRfc2luZ2xlKG1lbW9yeSk7CisJCQlicmVhazsKIAkJfQogCi0JCWlmICgtLXJhbmdlcykJCS8qIHByb2Nlc3MgYWxsIHJhbmdlcyBpbiBjZWxsICovCi0JCQlnb3RvIGhhX25ld19yYW5nZTsKKwkJb2Zfbm9kZV9wdXQobWVtb3J5KTsKKwkJaWYgKG5pZCA+PSAwKQorCQkJYnJlYWs7CiAJfQotCUJVRygpOwkvKiBzZWN0aW9uIGFkZHJlc3Mgc2hvdWxkIGJlIGZvdW5kIGFib3ZlICovCi0JcmV0dXJuIDA7CisKKwlyZXR1cm4gbmlkOwogfQorCisvKgorICogRmluZCB0aGUgbm9kZSBhc3NvY2lhdGVkIHdpdGggYSBob3QgYWRkZWQgbWVtb3J5IHNlY3Rpb24uICBTZWN0aW9uCisgKiBjb3JyZXNwb25kcyB0byBhIFNQQVJTRU1FTSBzZWN0aW9uLCBub3QgYW4gTE1CLiAgSXQgaXMgYXNzdW1lZCB0aGF0CisgKiBzZWN0aW9ucyBhcmUgZnVsbHkgY29udGFpbmVkIHdpdGhpbiBhIHNpbmdsZSBMTUIuCisgKi8KK2ludCBob3RfYWRkX3Njbl90b19uaWQodW5zaWduZWQgbG9uZyBzY25fYWRkcikKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm1lbW9yeSA9IE5VTEw7CisJaW50IG5pZCwgZm91bmQgPSAwOworCisJaWYgKCFudW1hX2VuYWJsZWQgfHwgKG1pbl9jb21tb25fZGVwdGggPCAwKSkKKwkJcmV0dXJuIGFueV9vbmxpbmVfbm9kZShOT0RFX01BU0tfQUxMKTsKKworCW1lbW9yeSA9IG9mX2ZpbmRfbm9kZV9ieV9wYXRoKCIvaWJtLGR5bmFtaWMtcmVjb25maWd1cmF0aW9uLW1lbW9yeSIpOworCWlmIChtZW1vcnkpIHsKKwkJbmlkID0gaG90X2FkZF9kcmNvbmZfc2NuX3RvX25pZChtZW1vcnksIHNjbl9hZGRyKTsKKwkJb2Zfbm9kZV9wdXQobWVtb3J5KTsKKwl9IGVsc2UgeworCQluaWQgPSBob3RfYWRkX25vZGVfc2NuX3RvX25pZChzY25fYWRkcik7CisJfQorCisJaWYgKG5pZCA8IDAgfHwgIW5vZGVfb25saW5lKG5pZCkpCisJCW5pZCA9IGFueV9vbmxpbmVfbm9kZShOT0RFX01BU0tfQUxMKTsKKworCWlmIChOT0RFX0RBVEEobmlkKS0+bm9kZV9zcGFubmVkX3BhZ2VzKQorCQlyZXR1cm4gbmlkOworCisJZm9yX2VhY2hfb25saW5lX25vZGUobmlkKSB7CisJCWlmIChOT0RFX0RBVEEobmlkKS0+bm9kZV9zcGFubmVkX3BhZ2VzKSB7CisJCQlmb3VuZCA9IDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCUJVR19PTighZm91bmQpOworCXJldHVybiBuaWQ7Cit9CisKICNlbmRpZiAvKiBDT05GSUdfTUVNT1JZX0hPVFBMVUcgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLmMgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZS5jCmluZGV4IDZkOTQxMTYuLmY1YzZmZDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGUuYwpAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiBUaGlzIGZpbGUgY29udGFpbnMgY29tbW9uIHJvdXRpbmVzIGZvciBkZWFsaW5nIHdpdGggZnJlZSBvZiBwYWdlIHRhYmxlcworICogQWxvbmcgd2l0aCBjb21tb24gcGFnZSB0YWJsZSBoYW5kbGluZyBjb2RlCiAgKgogICogIERlcml2ZWQgZnJvbSBhcmNoL3Bvd2VycGMvbW0vdGxiXzY0LmM6CiAgKiAgICBDb3B5cmlnaHQgKEMpIDE5OTUtMTk5NiBHYXJ5IFRob21hcyAoZ2R0QGxpbnV4cHBjLm9yZykKQEAgLTgxLDExICs4MiwxMCBAQAogdm9pZCBwZ3RhYmxlX2ZyZWVfdGxiKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHBndGFibGVfZnJlZV90IHBnZikKIHsKIAkvKiBUaGlzIGlzIHNhZmUgc2luY2UgdGxiX2dhdGhlcl9tbXUgaGFzIGRpc2FibGVkIHByZWVtcHRpb24gKi8KLSAgICAgICAgY3B1bWFza190IGxvY2FsX2NwdW1hc2sgPSBjcHVtYXNrX29mX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpOwogCXN0cnVjdCBwdGVfZnJlZWxpc3RfYmF0Y2ggKipiYXRjaHAgPSAmX19nZXRfY3B1X3ZhcihwdGVfZnJlZWxpc3RfY3VyKTsKIAogCWlmIChhdG9taWNfcmVhZCgmdGxiLT5tbS0+bW1fdXNlcnMpIDwgMiB8fAotCSAgICBjcHVzX2VxdWFsKHRsYi0+bW0tPmNwdV92bV9tYXNrLCBsb2NhbF9jcHVtYXNrKSkgeworCSAgICBjcHVtYXNrX2VxdWFsKG1tX2NwdW1hc2sodGxiLT5tbSksIGNwdW1hc2tfb2Yoc21wX3Byb2Nlc3Nvcl9pZCgpKSkpewogCQlwZ3RhYmxlX2ZyZWUocGdmKTsKIAkJcmV0dXJuOwogCX0KQEAgLTExNSwzICsxMTUsMTMzIEBACiAJcHRlX2ZyZWVfc3VibWl0KCpiYXRjaHApOwogCSpiYXRjaHAgPSBOVUxMOwogfQorCisvKgorICogSGFuZGxlIGkvZCBjYWNoZSBmbHVzaGluZywgY2FsbGVkIGZyb20gc2V0X3B0ZV9hdCgpIG9yIHB0ZXBfc2V0X2FjY2Vzc19mbGFncygpCisgKi8KK3N0YXRpYyBwdGVfdCBkb19kY2FjaGVfaWNhY2hlX2NvaGVyZW5jeShwdGVfdCBwdGUpCit7CisJdW5zaWduZWQgbG9uZyBwZm4gPSBwdGVfcGZuKHB0ZSk7CisJc3RydWN0IHBhZ2UgKnBhZ2U7CisKKwlpZiAodW5saWtlbHkoIXBmbl92YWxpZChwZm4pKSkKKwkJcmV0dXJuIHB0ZTsKKwlwYWdlID0gcGZuX3RvX3BhZ2UocGZuKTsKKworCWlmICghUGFnZVJlc2VydmVkKHBhZ2UpICYmICF0ZXN0X2JpdChQR19hcmNoXzEsICZwYWdlLT5mbGFncykpIHsKKwkJcHJfZGVidWcoImRvX2RjYWNoZV9pY2FjaGVfY29oZXJlbmN5Li4uIGZsdXNoaW5nXG4iKTsKKwkJZmx1c2hfZGNhY2hlX2ljYWNoZV9wYWdlKHBhZ2UpOworCQlzZXRfYml0KFBHX2FyY2hfMSwgJnBhZ2UtPmZsYWdzKTsKKwl9CisJZWxzZQorCQlwcl9kZWJ1ZygiZG9fZGNhY2hlX2ljYWNoZV9jb2hlcmVuY3kuLi4gYWxyZWFkeSBjbGVhblxuIik7CisJcmV0dXJuIF9fcHRlKHB0ZV92YWwocHRlKSB8IF9QQUdFX0hXRVhFQyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGlzX2V4ZWNfZmF1bHQodm9pZCkKK3sKKwlyZXR1cm4gY3VycmVudC0+dGhyZWFkLnJlZ3MgJiYgVFJBUChjdXJyZW50LT50aHJlYWQucmVncykgPT0gMHg0MDA7Cit9CisKKy8qIFdlIG9ubHkgdHJ5IHRvIGRvIGkvZCBjYWNoZSBjb2hlcmVuY3kgb24gc3R1ZmYgdGhhdCBsb29rcyBsaWtlCisgKiByZWFzb25hYmx5ICJub3JtYWwiIFBURXMuIFdlIGN1cnJlbnRseSByZXF1aXJlIGEgUFRFIHRvIGJlIHByZXNlbnQKKyAqIGFuZCB3ZSBhdm9pZCBfUEFHRV9TUEVDSUFMIGFuZCBfUEFHRV9OT19DQUNIRQorICovCitzdGF0aWMgaW5saW5lIGludCBwdGVfbG9va3Nfbm9ybWFsKHB0ZV90IHB0ZSkKK3sKKwlyZXR1cm4gKHB0ZV92YWwocHRlKSAmCisJCShfUEFHRV9QUkVTRU5UIHwgX1BBR0VfU1BFQ0lBTCB8IF9QQUdFX05PX0NBQ0hFKSkgPT0KKwkJKF9QQUdFX1BSRVNFTlQpOworfQorCisjaWYgZGVmaW5lZChDT05GSUdfUFBDX1NURF9NTVUpCisvKiBTZXJ2ZXItc3R5bGUgTU1VIGhhbmRsZXMgY29oZXJlbmN5IHdoZW4gaGFzaGluZyBpZiBIVyBleGVjIHBlcm1pc3Npb24KKyAqIGlzIHN1cHBvc2VkIHBlciBwYWdlIChjdXJyZW50bHkgNjQtYml0IG9ubHkpLiBFbHNlLCB3ZSBhbHdheXMgZmx1c2gKKyAqIHZhbGlkIFBURXMgaW4gc2V0X3B0ZS4KKyAqLworc3RhdGljIGlubGluZSBpbnQgcHRlX25lZWRfZXhlY19mbHVzaChwdGVfdCBwdGUsIGludCBzZXRfcHRlKQoreworCXJldHVybiBzZXRfcHRlICYmIHB0ZV9sb29rc19ub3JtYWwocHRlKSAmJgorCQkhKGNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0NPSEVSRU5UX0lDQUNIRSkgfHwKKwkJICBjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9OT0VYRUNVVEUpKTsKK30KKyNlbGlmIF9QQUdFX0hXRVhFQyA9PSAwCisvKiBFbWJlZGRlZCB0eXBlIE1NVSB3aXRob3V0IEhXIGV4ZWMgc3VwcG9ydCAoOHh4IG9ubHkgc28gZmFyKSwgd2UgZmx1c2gKKyAqIHRoZSBjYWNoZSBmb3IgYW55IHByZXNlbnQgUFRFCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IHB0ZV9uZWVkX2V4ZWNfZmx1c2gocHRlX3QgcHRlLCBpbnQgc2V0X3B0ZSkKK3sKKwlyZXR1cm4gc2V0X3B0ZSAmJiBwdGVfbG9va3Nfbm9ybWFsKHB0ZSk7Cit9CisjZWxzZQorLyogT3RoZXIgZW1iZWRkZWQgQ1BVcyB3aXRoIEhXIGV4ZWMgc3VwcG9ydCBwZXItcGFnZSwgd2UgZmx1c2ggb24gZXhlYworICogZmF1bHQgaWYgSFdFWEVDIGlzIG5vdCBzZXQKKyAqLworc3RhdGljIGlubGluZSBpbnQgcHRlX25lZWRfZXhlY19mbHVzaChwdGVfdCBwdGUsIGludCBzZXRfcHRlKQoreworCXJldHVybiBwdGVfbG9va3Nfbm9ybWFsKHB0ZSkgJiYgaXNfZXhlY19mYXVsdCgpICYmCisJCSEocHRlX3ZhbChwdGUpICYgX1BBR0VfSFdFWEVDKTsKK30KKyNlbmRpZgorCisvKgorICogc2V0X3B0ZSBzdG9yZXMgYSBsaW51eCBQVEUgaW50byB0aGUgbGludXggcGFnZSB0YWJsZS4KKyAqLwordm9pZCBzZXRfcHRlX2F0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCit7CisjaWZkZWYgQ09ORklHX0RFQlVHX1ZNCisJV0FSTl9PTihwdGVfcHJlc2VudCgqcHRlcCkpOworI2VuZGlmCisJLyogTm90ZTogbW0tPmNvbnRleHQuaWQgbWlnaHQgbm90IHlldCBoYXZlIGJlZW4gYXNzaWduZWQgYXMKKwkgKiB0aGlzIGNvbnRleHQgbWlnaHQgbm90IGhhdmUgYmVlbiBhY3RpdmF0ZWQgeWV0IHdoZW4gdGhpcworCSAqIGlzIGNhbGxlZC4KKwkgKi8KKwlwdGUgPSBfX3B0ZShwdGVfdmFsKHB0ZSkgJiB+X1BBR0VfSFBURUZMQUdTKTsKKwlpZiAocHRlX25lZWRfZXhlY19mbHVzaChwdGUsIDEpKQorCQlwdGUgPSBkb19kY2FjaGVfaWNhY2hlX2NvaGVyZW5jeShwdGUpOworCisJLyogUGVyZm9ybSB0aGUgc2V0dGluZyBvZiB0aGUgUFRFICovCisJX19zZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBwdGUsIDApOworfQorCisvKgorICogVGhpcyBpcyBjYWxsZWQgd2hlbiByZWxheGluZyBhY2Nlc3MgdG8gYSBQVEUuIEl0J3MgYWxzbyBjYWxsZWQgaW4gdGhlIHBhZ2UKKyAqIGZhdWx0IHBhdGggd2hlbiB3ZSBkb24ndCBoaXQgYW55IG9mIHRoZSBtYWpvciBmYXVsdCBjYXNlcywgaWUsIGEgbWlub3IKKyAqIHVwZGF0ZSBvZiBfUEFHRV9BQ0NFU1NFRCwgX1BBR0VfRElSVFksIGV0Yy4uLiBUaGUgZ2VuZXJpYyBjb2RlIHdpbGwgaGF2ZQorICogaGFuZGxlZCB0aG9zZSB0d28gZm9yIHVzLCB3ZSBhZGRpdGlvbmFsbHkgZGVhbCB3aXRoIG1pc3NpbmcgZXhlY3V0ZQorICogcGVybWlzc2lvbiBoZXJlIG9uIHNvbWUgcHJvY2Vzc29ycworICovCitpbnQgcHRlcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCisJCQkgIHB0ZV90ICpwdGVwLCBwdGVfdCBlbnRyeSwgaW50IGRpcnR5KQoreworCWludCBjaGFuZ2VkOworCWlmICghZGlydHkgJiYgcHRlX25lZWRfZXhlY19mbHVzaChlbnRyeSwgMCkpCisJCWVudHJ5ID0gZG9fZGNhY2hlX2ljYWNoZV9jb2hlcmVuY3koZW50cnkpOworCWNoYW5nZWQgPSAhcHRlX3NhbWUoKihwdGVwKSwgZW50cnkpOworCWlmIChjaGFuZ2VkKSB7CisJCWFzc2VydF9wdGVfbG9ja2VkKHZtYS0+dm1fbW0sIGFkZHJlc3MpOworCQlfX3B0ZXBfc2V0X2FjY2Vzc19mbGFncyhwdGVwLCBlbnRyeSk7CisJCWZsdXNoX3RsYl9wYWdlX25vaGFzaCh2bWEsIGFkZHJlc3MpOworCX0KKwlyZXR1cm4gY2hhbmdlZDsKK30KKworI2lmZGVmIENPTkZJR19ERUJVR19WTQordm9pZCBhc3NlcnRfcHRlX2xvY2tlZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXBnZF90ICpwZ2Q7CisJcHVkX3QgKnB1ZDsKKwlwbWRfdCAqcG1kOworCisJaWYgKG1tID09ICZpbml0X21tKQorCQlyZXR1cm47CisJcGdkID0gbW0tPnBnZCArIHBnZF9pbmRleChhZGRyKTsKKwlCVUdfT04ocGdkX25vbmUoKnBnZCkpOworCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKKwlCVUdfT04ocHVkX25vbmUoKnB1ZCkpOworCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyKTsKKwlCVUdfT04oIXBtZF9wcmVzZW50KCpwbWQpKTsKKwlCVUdfT04oIXNwaW5faXNfbG9ja2VkKHB0ZV9sb2NrcHRyKG1tLCBwbWQpKSk7Cit9CisjZW5kaWYgLyogQ09ORklHX0RFQlVHX1ZNICovCisKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV8zMi5jCmluZGV4IDU4YmNhZWIuLjQzMGQwOTAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfMzIuYwpAQCAtMTI5LDcgKzEyOSw4IEBACiB2b2lkIF9faW9tZW0gKgogaW9yZW1hcChwaHlzX2FkZHJfdCBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7Ci0JcmV0dXJuIF9faW9yZW1hcChhZGRyLCBzaXplLCBfUEFHRV9OT19DQUNIRSB8IF9QQUdFX0dVQVJERUQpOworCXJldHVybiBfX2lvcmVtYXBfY2FsbGVyKGFkZHIsIHNpemUsIF9QQUdFX05PX0NBQ0hFIHwgX1BBR0VfR1VBUkRFRCwKKwkJCQlfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOwogfQogRVhQT1JUX1NZTUJPTChpb3JlbWFwKTsKIApAQCAtMTQzLDIwICsxNDQsMjcgQEAKIAkvKiB3ZSBkb24ndCB3YW50IHRvIGxldCBfUEFHRV9VU0VSIGFuZCBfUEFHRV9FWEVDIGxlYWsgb3V0ICovCiAJZmxhZ3MgJj0gfihfUEFHRV9VU0VSIHwgX1BBR0VfRVhFQyB8IF9QQUdFX0hXRVhFQyk7CiAKLQlyZXR1cm4gX19pb3JlbWFwKGFkZHIsIHNpemUsIGZsYWdzKTsKKwlyZXR1cm4gX19pb3JlbWFwX2NhbGxlcihhZGRyLCBzaXplLCBmbGFncywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKIH0KIEVYUE9SVF9TWU1CT0woaW9yZW1hcF9mbGFncyk7CiAKIHZvaWQgX19pb21lbSAqCiBfX2lvcmVtYXAocGh5c19hZGRyX3QgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBsb25nIGZsYWdzKQogeworCXJldHVybiBfX2lvcmVtYXBfY2FsbGVyKGFkZHIsIHNpemUsIGZsYWdzLCBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCkpOworfQorCit2b2lkIF9faW9tZW0gKgorX19pb3JlbWFwX2NhbGxlcihwaHlzX2FkZHJfdCBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIHVuc2lnbmVkIGxvbmcgZmxhZ3MsCisJCSB2b2lkICpjYWxsZXIpCit7CiAJdW5zaWduZWQgbG9uZyB2LCBpOwogCXBoeXNfYWRkcl90IHA7CiAJaW50IGVycjsKIAogCS8qIE1ha2Ugc3VyZSB3ZSBoYXZlIHRoZSBiYXNlIGZsYWdzICovCiAJaWYgKChmbGFncyAmIF9QQUdFX1BSRVNFTlQpID09IDApCi0JCWZsYWdzIHw9IF9QQUdFX0tFUk5FTDsKKwkJZmxhZ3MgfD0gUEFHRV9LRVJORUw7CiAKIAkvKiBOb24tY2FjaGVhYmxlIHBhZ2UgY2Fubm90IGJlIGNvaGVyZW50ICovCiAJaWYgKGZsYWdzICYgX1BBR0VfTk9fQ0FDSEUpCkBAIC0yMTIsNyArMjIwLDcgQEAKIAogCWlmIChtZW1faW5pdF9kb25lKSB7CiAJCXN0cnVjdCB2bV9zdHJ1Y3QgKmFyZWE7Ci0JCWFyZWEgPSBnZXRfdm1fYXJlYShzaXplLCBWTV9JT1JFTUFQKTsKKwkJYXJlYSA9IGdldF92bV9hcmVhX2NhbGxlcihzaXplLCBWTV9JT1JFTUFQLCBjYWxsZXIpOwogCQlpZiAoYXJlYSA9PSAwKQogCQkJcmV0dXJuIE5VTEw7CiAJCXYgPSAodW5zaWduZWQgbG9uZykgYXJlYS0+YWRkcjsKQEAgLTI4OCw3ICsyOTYsNyBAQAogCXAgPSBtZW1zdGFydF9hZGRyICsgczsKIAlmb3IgKDsgcyA8IHRvdGFsX2xvd21lbTsgcyArPSBQQUdFX1NJWkUpIHsKIAkJa3RleHQgPSAoKGNoYXIgKikgdiA+PSBfc3RleHQgJiYgKGNoYXIgKikgdiA8IGV0ZXh0KTsKLQkJZiA9IGt0ZXh0ID9fUEFHRV9SQU1fVEVYVCA6IF9QQUdFX1JBTTsKKwkJZiA9IGt0ZXh0ID8gUEFHRV9LRVJORUxfVEVYVCA6IFBBR0VfS0VSTkVMOwogCQltYXBfcGFnZSh2LCBwLCBmKTsKICNpZmRlZiBDT05GSUdfUFBDX1NURF9NTVVfMzIKIAkJaWYgKGt0ZXh0KQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYyBiL2FyY2gvcG93ZXJwYy9tbS9wZ3RhYmxlXzY0LmMKaW5kZXggMzY1ZTYxYS4uYmZhN2RiNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL21tL3BndGFibGVfNjQuYworKysgYi9hcmNoL3Bvd2VycGMvbW0vcGd0YWJsZV82NC5jCkBAIC0xNDQsOCArMTQ0LDggQEAKIAl1bm1hcF9rZXJuZWxfcmFuZ2UoKHVuc2lnbmVkIGxvbmcpZWEsIHNpemUpOwogfQogCi12b2lkIF9faW9tZW0gKiBfX2lvcmVtYXAocGh5c19hZGRyX3QgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCit2b2lkIF9faW9tZW0gKiBfX2lvcmVtYXBfY2FsbGVyKHBoeXNfYWRkcl90IGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCQl1bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkICpjYWxsZXIpCiB7CiAJcGh5c19hZGRyX3QgcGFsaWduZWQ7CiAJdm9pZCBfX2lvbWVtICpyZXQ7CkBAIC0xNjgsOCArMTY4LDkgQEAKIAlpZiAobWVtX2luaXRfZG9uZSkgewogCQlzdHJ1Y3Qgdm1fc3RydWN0ICphcmVhOwogCi0JCWFyZWEgPSBfX2dldF92bV9hcmVhKHNpemUsIFZNX0lPUkVNQVAsCi0JCQkJICAgICBpb3JlbWFwX2JvdCwgSU9SRU1BUF9FTkQpOworCQlhcmVhID0gX19nZXRfdm1fYXJlYV9jYWxsZXIoc2l6ZSwgVk1fSU9SRU1BUCwKKwkJCQkJICAgIGlvcmVtYXBfYm90LCBJT1JFTUFQX0VORCwKKwkJCQkJICAgIGNhbGxlcik7CiAJCWlmIChhcmVhID09IE5VTEwpCiAJCQlyZXR1cm4gTlVMTDsKIAkJcmV0ID0gX19pb3JlbWFwX2F0KHBhbGlnbmVkLCBhcmVhLT5hZGRyLCBzaXplLCBmbGFncyk7CkBAIC0xODYsMTkgKzE4NywyNyBAQAogCXJldHVybiByZXQ7CiB9CiAKK3ZvaWQgX19pb21lbSAqIF9faW9yZW1hcChwaHlzX2FkZHJfdCBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCisJCQkgdW5zaWduZWQgbG9uZyBmbGFncykKK3sKKwlyZXR1cm4gX19pb3JlbWFwX2NhbGxlcihhZGRyLCBzaXplLCBmbGFncywgX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApKTsKK30KIAogdm9pZCBfX2lvbWVtICogaW9yZW1hcChwaHlzX2FkZHJfdCBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUpCiB7CiAJdW5zaWduZWQgbG9uZyBmbGFncyA9IF9QQUdFX05PX0NBQ0hFIHwgX1BBR0VfR1VBUkRFRDsKKwl2b2lkICpjYWxsZXIgPSBfX2J1aWx0aW5fcmV0dXJuX2FkZHJlc3MoMCk7CiAKIAlpZiAocHBjX21kLmlvcmVtYXApCi0JCXJldHVybiBwcGNfbWQuaW9yZW1hcChhZGRyLCBzaXplLCBmbGFncyk7Ci0JcmV0dXJuIF9faW9yZW1hcChhZGRyLCBzaXplLCBmbGFncyk7CisJCXJldHVybiBwcGNfbWQuaW9yZW1hcChhZGRyLCBzaXplLCBmbGFncywgY2FsbGVyKTsKKwlyZXR1cm4gX19pb3JlbWFwX2NhbGxlcihhZGRyLCBzaXplLCBmbGFncywgY2FsbGVyKTsKIH0KIAogdm9pZCBfX2lvbWVtICogaW9yZW1hcF9mbGFncyhwaHlzX2FkZHJfdCBhZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsCiAJCQkgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CisJdm9pZCAqY2FsbGVyID0gX19idWlsdGluX3JldHVybl9hZGRyZXNzKDApOworCiAJLyogd3JpdGVhYmxlIGltcGxpZXMgZGlydHkgZm9yIGtlcm5lbCBhZGRyZXNzZXMgKi8KIAlpZiAoZmxhZ3MgJiBfUEFHRV9SVykKIAkJZmxhZ3MgfD0gX1BBR0VfRElSVFk7CkBAIC0yMDcsOCArMjE2LDggQEAKIAlmbGFncyAmPSB+KF9QQUdFX1VTRVIgfCBfUEFHRV9FWEVDKTsKIAogCWlmIChwcGNfbWQuaW9yZW1hcCkKLQkJcmV0dXJuIHBwY19tZC5pb3JlbWFwKGFkZHIsIHNpemUsIGZsYWdzKTsKLQlyZXR1cm4gX19pb3JlbWFwKGFkZHIsIHNpemUsIGZsYWdzKTsKKwkJcmV0dXJuIHBwY19tZC5pb3JlbWFwKGFkZHIsIHNpemUsIGZsYWdzLCBjYWxsZXIpOworCXJldHVybiBfX2lvcmVtYXBfY2FsbGVyKGFkZHIsIHNpemUsIGZsYWdzLCBjYWxsZXIpOwogfQogCiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS9wcGNfbW11XzMyLmMgYi9hcmNoL3Bvd2VycGMvbW0vcHBjX21tdV8zMi5jCmluZGV4IGZlNjVjNDAuLjJkMmE4N2UgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS9wcGNfbW11XzMyLmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3BwY19tbXVfMzIuYwpAQCAtNzQsOSArNzQsNiBAQAogCiB1bnNpZ25lZCBsb25nIF9faW5pdCBtbXVfbWFwaW5fcmFtKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX1BPV0VSNAotCXJldHVybiAwOwotI2Vsc2UKIAl1bnNpZ25lZCBsb25nIHRvdCwgYmwsIGRvbmU7CiAJdW5zaWduZWQgbG9uZyBtYXhfc2l6ZSA9ICgyNTY8PDIwKTsKIApAQCAtOTUsNyArOTIsNyBAQAogCQkJYnJlYWs7CiAJfQogCi0Jc2V0YmF0KDIsIFBBR0VfT0ZGU0VULCAwLCBibCwgX1BBR0VfUkFNKTsKKwlzZXRiYXQoMiwgUEFHRV9PRkZTRVQsIDAsIGJsLCBQQUdFX0tFUk5FTF9YKTsKIAlkb25lID0gKHVuc2lnbmVkIGxvbmcpYmF0X2FkZHJzWzJdLmxpbWl0IC0gUEFHRV9PRkZTRVQgKyAxOwogCWlmICgoZG9uZSA8IHRvdCkgJiYgIWJhdF9hZGRyc1szXS5saW1pdCkgewogCQkvKiB1c2UgQkFUMyB0byBjb3ZlciBhIGJpdCBtb3JlICovCkBAIC0xMDMsMTIgKzEwMCwxMSBAQAogCQlmb3IgKGJsID0gMTI4PDwxMDsgYmwgPCBtYXhfc2l6ZTsgYmwgPDw9IDEpCiAJCQlpZiAoYmwgKiAyID4gdG90KQogCQkJCWJyZWFrOwotCQlzZXRiYXQoMywgUEFHRV9PRkZTRVQrZG9uZSwgZG9uZSwgYmwsIF9QQUdFX1JBTSk7CisJCXNldGJhdCgzLCBQQUdFX09GRlNFVCtkb25lLCBkb25lLCBibCwgUEFHRV9LRVJORUxfWCk7CiAJCWRvbmUgPSAodW5zaWduZWQgbG9uZyliYXRfYWRkcnNbM10ubGltaXQgLSBQQUdFX09GRlNFVCArIDE7CiAJfQogCiAJcmV0dXJuIGRvbmU7Ci0jZW5kaWYKIH0KIAogLyoKQEAgLTEzNiw5ICsxMzIsNyBAQAogCQl3aW1neHBwIHw9IChmbGFncyAmIF9QQUdFX1JXKT8gQlBQX1JXOiBCUFBfUlg7CiAJCWJhdFsxXS5iYXR1ID0gdmlydCB8IChibCA8PCAyKSB8IDI7IC8qIFZzPTEsIFZwPTAgKi8KIAkJYmF0WzFdLmJhdGwgPSBCQVRfUEhZU19BRERSKHBoeXMpIHwgd2ltZ3hwcDsKLSNpZm5kZWYgQ09ORklHX0tHREIgLyogd2FudCB1c2VyIGFjY2VzcyBmb3IgYnJlYWtwb2ludHMgKi8KIAkJaWYgKGZsYWdzICYgX1BBR0VfVVNFUikKLSNlbmRpZgogCQkJYmF0WzFdLmJhdHUgfD0gMTsgCS8qIFZwID0gMSAqLwogCQlpZiAoZmxhZ3MgJiBfUEFHRV9HVUFSREVEKSB7CiAJCQkvKiBHIGJpdCBtdXN0IGJlIHplcm8gaW4gSUJBVHMgKi8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9tbS90bGJfaGFzaDY0LmMgYi9hcmNoL3Bvd2VycGMvbW0vdGxiX2hhc2g2NC5jCmluZGV4IGM5MzFiYzcuLjFiZTFiNWUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfaGFzaDY0LmMKKysrIGIvYXJjaC9wb3dlcnBjL21tL3RsYl9oYXNoNjQuYwpAQCAtMTM5LDEyICsxMzksMTIgQEAKICAqLwogdm9pZCBfX2ZsdXNoX3RsYl9wZW5kaW5nKHN0cnVjdCBwcGM2NF90bGJfYmF0Y2ggKmJhdGNoKQogewotCWNwdW1hc2tfdCB0bXA7CisJY29uc3Qgc3RydWN0IGNwdW1hc2sgKnRtcDsKIAlpbnQgaSwgbG9jYWwgPSAwOwogCiAJaSA9IGJhdGNoLT5pbmRleDsKLQl0bXAgPSBjcHVtYXNrX29mX2NwdShzbXBfcHJvY2Vzc29yX2lkKCkpOwotCWlmIChjcHVzX2VxdWFsKGJhdGNoLT5tbS0+Y3B1X3ZtX21hc2ssIHRtcCkpCisJdG1wID0gY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpOworCWlmIChjcHVtYXNrX2VxdWFsKG1tX2NwdW1hc2soYmF0Y2gtPm1tKSwgdG1wKSkKIAkJbG9jYWwgPSAxOwogCWlmIChpID09IDEpCiAJCWZsdXNoX2hhc2hfcGFnZShiYXRjaC0+dmFkZHJbMF0sIGJhdGNoLT5wdGVbMF0sCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vdGxiX25vaGFzaC5jIGIvYXJjaC9wb3dlcnBjL21tL3RsYl9ub2hhc2guYwppbmRleCAzOWFjMjJiLi43YWY3Mjk3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvbW0vdGxiX25vaGFzaC5jCisrKyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfbm9oYXNoLmMKQEAgLTEzMiwxMSArMTMyLDExIEBACiAJcGlkID0gbW0tPmNvbnRleHQuaWQ7CiAJaWYgKHVubGlrZWx5KHBpZCA9PSBNTVVfTk9fQ09OVEVYVCkpCiAJCWdvdG8gbm9fY29udGV4dDsKLQljcHVfbWFzayA9IG1tLT5jcHVfdm1fbWFzazsKLQljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfbWFzayk7Ci0JaWYgKCFjcHVzX2VtcHR5KGNwdV9tYXNrKSkgeworCWlmICghY3B1bWFza19lcXVhbChtbV9jcHVtYXNrKG1tKSwgY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpKSkgewogCQlzdHJ1Y3QgdGxiX2ZsdXNoX3BhcmFtIHAgPSB7IC5waWQgPSBwaWQgfTsKLQkJc21wX2NhbGxfZnVuY3Rpb25fbWFzayhjcHVfbWFzaywgZG9fZmx1c2hfdGxiX21tX2lwaSwgJnAsIDEpOworCQkvKiBJZ25vcmVzIHNtcF9wcm9jZXNzb3JfaWQoKSBldmVuIGlmIHNldC4gKi8KKwkJc21wX2NhbGxfZnVuY3Rpb25fbWFueShtbV9jcHVtYXNrKG1tKSwKKwkJCQkgICAgICAgZG9fZmx1c2hfdGxiX21tX2lwaSwgJnAsIDEpOwogCX0KIAlfdGxiaWxfcGlkKHBpZCk7CiAgbm9fY29udGV4dDoKQEAgLTE0NiwxNiArMTQ2LDE1IEBACiAKIHZvaWQgZmx1c2hfdGxiX3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgdm1hZGRyKQogewotCWNwdW1hc2tfdCBjcHVfbWFzazsKKwlzdHJ1Y3QgY3B1bWFzayAqY3B1X21hc2s7CiAJdW5zaWduZWQgaW50IHBpZDsKIAogCXByZWVtcHRfZGlzYWJsZSgpOwogCXBpZCA9IHZtYSA/IHZtYS0+dm1fbW0tPmNvbnRleHQuaWQgOiAwOwogCWlmICh1bmxpa2VseShwaWQgPT0gTU1VX05PX0NPTlRFWFQpKQogCQlnb3RvIGJhaWw7Ci0JY3B1X21hc2sgPSB2bWEtPnZtX21tLT5jcHVfdm1fbWFzazsKLQljcHVfY2xlYXIoc21wX3Byb2Nlc3Nvcl9pZCgpLCBjcHVfbWFzayk7Ci0JaWYgKCFjcHVzX2VtcHR5KGNwdV9tYXNrKSkgeworCWNwdV9tYXNrID0gbW1fY3B1bWFzayh2bWEtPnZtX21tKTsKKwlpZiAoIWNwdW1hc2tfZXF1YWwoY3B1X21hc2ssIGNwdW1hc2tfb2Yoc21wX3Byb2Nlc3Nvcl9pZCgpKSkpIHsKIAkJLyogSWYgYnJvYWRjYXN0IHRsYml2YXggaXMgc3VwcG9ydGVkLCB1c2UgaXQgKi8KIAkJaWYgKG1tdV9oYXNfZmVhdHVyZShNTVVfRlRSX1VTRV9UTEJJVkFYX0JDQVNUKSkgewogCQkJaW50IGxvY2sgPSBtbXVfaGFzX2ZlYXR1cmUoTU1VX0ZUUl9MT0NLX0JDQVNUX0lOVkFMKTsKQEAgLTE2Nyw3ICsxNjYsOCBAQAogCQkJZ290byBiYWlsOwogCQl9IGVsc2UgewogCQkJc3RydWN0IHRsYl9mbHVzaF9wYXJhbSBwID0geyAucGlkID0gcGlkLCAuYWRkciA9IHZtYWRkciB9OwotCQkJc21wX2NhbGxfZnVuY3Rpb25fbWFzayhjcHVfbWFzaywKKwkJCS8qIElnbm9yZXMgc21wX3Byb2Nlc3Nvcl9pZCgpIGV2ZW4gaWYgc2V0IGluIGNwdV9tYXNrICovCisJCQlzbXBfY2FsbF9mdW5jdGlvbl9tYW55KGNwdV9tYXNrLAogCQkJCQkgICAgICAgZG9fZmx1c2hfdGxiX3BhZ2VfaXBpLCAmcCwgMSk7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvbW0vdGxiX25vaGFzaF9sb3cuUyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfbm9oYXNoX2xvdy5TCmluZGV4IGY5MDBhMzkuLjc4OGI4N2MgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9tbS90bGJfbm9oYXNoX2xvdy5TCisrKyBiL2FyY2gvcG93ZXJwYy9tbS90bGJfbm9oYXNoX2xvdy5TCkBAIC0xMTgsMjUgKzExOCw1MCBAQAogCiAjZWxpZiBkZWZpbmVkKENPTkZJR19GU0xfQk9PS0UpCiAvKgotICogRlNMIEJvb2tFIGltcGxlbWVudGF0aW9ucy4gQ3VycmVudGx5IF9waWQgYW5kIF9hbGwgYXJlIHRoZQotICogc2FtZS4gVGhpcyB3aWxsIGNoYW5nZSB3aGVuIHRsYmlseCBpcyBhY3R1YWxseSBzdXBwb3J0ZWQgYW5kCi0gKiBwZXJmb3JtcyBpbnZhbGlkYXRlLWJ5LVBJRC4gVGhpcyBjaGFuZ2Ugd2lsbCBiZSBkcml2ZW4gYnkKLSAqIG1tdV9mZWF0dXJlcyBjb25kaXRpb25hbAorICogRlNMIEJvb2tFIGltcGxlbWVudGF0aW9ucy4KKyAqCisgKiBTaW5jZSBmZWF0dXJlIHNlY3Rpb25zIGFyZSB1c2luZyBfU0VDVElPTl9FTFNFIHdlIG5lZWQKKyAqIHRvIGhhdmUgdGhlIGxhcmdlciBjb2RlIHBhdGggYmVmb3JlIHRoZSBfU0VDVElPTl9FTFNFCiAgKi8KIAorI2RlZmluZSBNTVVDU1IwX1RMQkZJCShNTVVDU1IwX1RMQjBGSSB8IE1NVUNTUjBfVExCMUZJIHwgXAorCQkJIE1NVUNTUjBfVExCMkZJIHwgTU1VQ1NSMF9UTEIzRkkpCiAvKgogICogRmx1c2ggTU1VIFRMQiBvbiB0aGUgbG9jYWwgcHJvY2Vzc29yCiAgKi8KLV9HTE9CQUwoX3RsYmlsX3BpZCkKIF9HTE9CQUwoX3RsYmlsX2FsbCkKLSNkZWZpbmUgTU1VQ1NSMF9UTEJGSQkoTU1VQ1NSMF9UTEIwRkkgfCBNTVVDU1IwX1RMQjFGSSB8IFwKLQkJCSBNTVVDU1IwX1RMQjJGSSB8IE1NVUNTUjBfVExCM0ZJKQorQkVHSU5fTU1VX0ZUUl9TRUNUSU9OCiAJbGkJcjMsKE1NVUNTUjBfVExCRkkpQGwKIAltdHNwcglTUFJOX01NVUNTUjAsIHIzCiAxOgogCW1mc3ByCXIzLFNQUk5fTU1VQ1NSMAogCWFuZGkuCXIzLHIzLE1NVUNTUjBfVExCRklAbAogCWJuZQkxYgorTU1VX0ZUUl9TRUNUSU9OX0VMU0UKKwlQUENfVExCSUxYX0FMTCgwLDApCitBTFRfTU1VX0ZUUl9TRUNUSU9OX0VORF9JRkNMUihNTVVfRlRSX1VTRV9UTEJJTFgpCisJbXN5bmMKKwlpc3luYworCWJscgorCitfR0xPQkFMKF90bGJpbF9waWQpCitCRUdJTl9NTVVfRlRSX1NFQ1RJT04KKwlzbHdpCXIzLHIzLDE2CisJbWZtc3IJcjEwCisJd3J0ZWVpCTAKKwltZnNwcglyNCxTUFJOX01BUzYJLyogc2F2ZSBNQVM2ICovCisJbXRzcHIJU1BSTl9NQVM2LHIzCisJUFBDX1RMQklMWF9QSUQoMCwwKQorCW10c3ByCVNQUk5fTUFTNixyNAkvKiByZXN0b3JlIE1BUzYgKi8KKwl3cnRlZQlyMTAKK01NVV9GVFJfU0VDVElPTl9FTFNFCisJbGkJcjMsKE1NVUNTUjBfVExCRkkpQGwKKwltdHNwcglTUFJOX01NVUNTUjAsIHIzCisxOgorCW1mc3ByCXIzLFNQUk5fTU1VQ1NSMAorCWFuZGkuCXIzLHIzLE1NVUNTUjBfVExCRklAbAorCWJuZQkxYgorQUxUX01NVV9GVFJfU0VDVElPTl9FTkRfSUZTRVQoTU1VX0ZUUl9VU0VfVExCSUxYKQogCW1zeW5jCiAJaXN5bmMKIAlibHIKQEAgLTE0OSw3ICsxNzQsOSBAQAogCW1mbXNyCXIxMAogCXdydGVlaQkwCiAJc2x3aQlyNCxyNCwxNgorCW9yaQlyNCxyNCwoTUFTNl9JU0laRShCT09LM0VfUEFHRVNaXzRLKSlAbAogCW10c3ByCVNQUk5fTUFTNixyNAkJLyogYXNzdW1lIEFTPTAgZm9yIG5vdyAqLworQkVHSU5fTU1VX0ZUUl9TRUNUSU9OCiAJdGxic3gJMCxyMwogCW1mc3ByCXI0LFNQUk5fTUFTMQkJLyogY2hlY2sgdmFsaWQgKi8KIAlhbmRpcy4JcjMscjQsTUFTMV9WQUxJREBoCkBAIC0xNTcsNiArMTg0LDkgQEAKIAlybHdpbm0JcjQscjQsMCwxLDMxCiAJbXRzcHIJU1BSTl9NQVMxLHI0CiAJdGxid2UKK01NVV9GVFJfU0VDVElPTl9FTFNFCisJUFBDX1RMQklMWF9WQSgwLHIzKQorQUxUX01NVV9GVFJfU0VDVElPTl9FTkRfSUZDTFIoTU1VX0ZUUl9VU0VfVExCSUxYKQogCW1zeW5jCiAJaXN5bmMKIDE6CXdydGVlCXIxMApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsXzc0NTAuYyBiL2FyY2gvcG93ZXJwYy9vcHJvZmlsZS9vcF9tb2RlbF83NDUwLmMKaW5kZXggY2M1OTllYi4uZjhkMzZmOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL29wcm9maWxlL29wX21vZGVsXzc0NTAuYworKysgYi9hcmNoL3Bvd2VycGMvb3Byb2ZpbGUvb3BfbW9kZWxfNzQ1MC5jCkBAIC0yOSw3ICsyOSw3IEBACiBzdGF0aWMgdW5zaWduZWQgbG9uZyByZXNldF92YWx1ZVtPUF9NQVhfQ09VTlRFUl07CiAKIHN0YXRpYyBpbnQgb3Byb2ZpbGVfcnVubmluZzsKLXN0YXRpYyB1MzIgbW1jcjBfdmFsLCBtbWNyMV92YWwsIG1tY3IyX3ZhbDsKK3N0YXRpYyB1MzIgbW1jcjBfdmFsLCBtbWNyMV92YWwsIG1tY3IyX3ZhbCwgbnVtX3BtY3M7CiAKICNkZWZpbmUgTU1DUjBfUE1DMV9TSElGVAk2CiAjZGVmaW5lIE1NQ1IwX1BNQzJfU0hJRlQJMApAQCAtODgsMTMgKzg4LDEyIEBACiAKIAltdHNwcihTUFJOX01NQ1IwLCBtbWNyMF92YWwpOwogCW10c3ByKFNQUk5fTU1DUjEsIG1tY3IxX3ZhbCk7Ci0JbXRzcHIoU1BSTl9NTUNSMiwgbW1jcjJfdmFsKTsKKwlpZiAobnVtX3BtY3MgPiA0KQorCQltdHNwcihTUFJOX01NQ1IyLCBtbWNyMl92YWwpOwogCiAJcmV0dXJuIDA7CiB9CiAKLSNkZWZpbmUgTlVNX0NUUlMgNgotCiAvKiBDb25maWd1cmVzIHRoZSBnbG9iYWwgc2V0dGluZ3MgZm9yIHRoZSBjb3VudGVzIG9uIGFsbCBDUFVzLiAqLwogc3RhdGljIGludCBmc2w3NDUwX3JlZ19zZXR1cChzdHJ1Y3Qgb3BfY291bnRlcl9jb25maWcgKmN0ciwKIAkJCSAgICAgc3RydWN0IG9wX3N5c3RlbV9jb25maWcgKnN5cywKQEAgLTEwMiwxMiArMTAxLDEzIEBACiB7CiAJaW50IGk7CiAKKwludW1fcG1jcyA9IG51bV9jdHJzOwogCS8qIE91ciBjb3VudGVycyBjb3VudCB1cCwgYW5kICJjb3VudCIgcmVmZXJzIHRvCiAJICogaG93IG11Y2ggYmVmb3JlIHRoZSBuZXh0IGludGVycnVwdCwgYW5kIHdlIGludGVycnVwdAogCSAqIG9uIG92ZXJmbG93LiAgU28gd2UgY2FsY3VsYXRlIHRoZSBzdGFydGluZyB2YWx1ZQogCSAqIHdoaWNoIHdpbGwgZ2l2ZSB1cyAiY291bnQiIHVudGlsIG92ZXJmbG93LgogCSAqIFRoZW4gd2Ugc2V0IHRoZSBldmVudHMgb24gdGhlIGVuYWJsZWQgY291bnRlcnMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0NUUlM7ICsraSkKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX2N0cnM7ICsraSkKIAkJcmVzZXRfdmFsdWVbaV0gPSAweDgwMDAwMDAwVUwgLSBjdHJbaV0uY291bnQ7CiAKIAkvKiBTZXQgZXZlbnRzIGZvciBDb3VudGVycyAxICYgMiAqLwpAQCAtMTIzLDkgKzEyMywxMCBAQAogCiAJLyogU2V0IGV2ZW50cyBmb3IgQ291bnRlcnMgMy02ICovCiAJbW1jcjFfdmFsID0gbW1jcjFfZXZlbnQzKGN0clsyXS5ldmVudCkKLQkJfCBtbWNyMV9ldmVudDQoY3RyWzNdLmV2ZW50KQotCQl8IG1tY3IxX2V2ZW50NShjdHJbNF0uZXZlbnQpCi0JCXwgbW1jcjFfZXZlbnQ2KGN0cls1XS5ldmVudCk7CisJCXwgbW1jcjFfZXZlbnQ0KGN0clszXS5ldmVudCk7CisJaWYgKG51bV9jdHJzID4gNCkKKwkJbW1jcjFfdmFsIHw9IG1tY3IxX2V2ZW50NShjdHJbNF0uZXZlbnQpCisJCQl8IG1tY3IxX2V2ZW50NihjdHJbNV0uZXZlbnQpOwogCiAJbW1jcjJfdmFsID0gMDsKIApAQCAtMTM5LDcgKzE0MCw3IEBACiAKIAltdG1zcihtZm1zcigpIHwgTVNSX1BNTSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0NUUlM7ICsraSkgeworCWZvciAoaSA9IDA7IGkgPCBudW1fcG1jczsgKytpKSB7CiAJCWlmIChjdHJbaV0uZW5hYmxlZCkKIAkJCWNsYXNzaWNfY3RyX3dyaXRlKGksIHJlc2V0X3ZhbHVlW2ldKTsKIAkJZWxzZQpAQCAtMTg0LDcgKzE4NSw3IEBACiAJcGMgPSBtZnNwcihTUFJOX1NJQVIpOwogCWlzX2tlcm5lbCA9IGlzX2tlcm5lbF9hZGRyKHBjKTsKIAotCWZvciAoaSA9IDA7IGkgPCBOVU1fQ1RSUzsgKytpKSB7CisJZm9yIChpID0gMDsgaSA8IG51bV9wbWNzOyArK2kpIHsKIAkJdmFsID0gY2xhc3NpY19jdHJfcmVhZChpKTsKIAkJaWYgKHZhbCA8IDApIHsKIAkJCWlmIChvcHJvZmlsZV9ydW5uaW5nICYmIGN0cltpXS5lbmFibGVkKSB7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvS2NvbmZpZwppbmRleCAzNDk2YmMwLi5iZjVjN2ZmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWcKQEAgLTExOCw2ICsxMTgsMTcgQEAKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBBTUNDIFBQQzQ2MEdUIGV2YWx1YXRpb24gYm9hcmQuCiAKK2NvbmZpZyBSRURXT09ECisJYm9vbCAiUmVkd29vZCIKKwlkZXBlbmRzIG9uIDQ0eAorCWRlZmF1bHQgbgorCXNlbGVjdCBQUEM0NHhfU0lNUExFCisJc2VsZWN0IDQ2MFNYCisJc2VsZWN0IFBDSQorCXNlbGVjdCBQUEM0eHhfUENJX0VYUFJFU1MKKwloZWxwCisJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBBTUNDIFBQQzQ2MFNYIFJlZHdvb2QgYm9hcmQuCisKIGNvbmZpZyBZT1NFTUlURQogCWJvb2wgIllvc2VtaXRlIgogCWRlcGVuZHMgb24gNDR4CkBAIC0yMjAsNiArMjMxLDE0IEBACiAJc2VsZWN0IElCTV9ORVdfRU1BQ19FTUFDNAogCXNlbGVjdCBJQk1fTkVXX0VNQUNfVEFICiAKK2NvbmZpZyA0NjBTWAorCWJvb2wKKwlzZWxlY3QgUFBDX0ZQVQorCXNlbGVjdCBJQk1fTkVXX0VNQUNfRU1BQzQKKwlzZWxlY3QgSUJNX05FV19FTUFDX1JHTUlJCisJc2VsZWN0IElCTV9ORVdfRU1BQ19aTUlJCisJc2VsZWN0IElCTV9ORVdfRU1BQ19UQUgKKwogIyA0NHggZXJyYXRhL3dvcmthcm91bmQgY29uZmlnIHN5bWJvbHMsIHNlbGVjdGVkIGJ5IHRoZSBDUFUgbW9kZWxzIGFib3ZlCiBjb25maWcgSUJNNDQwRVBfRVJSNDIKIAlib29sCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9wcGM0NHhfc2ltcGxlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzQ0eC9wcGM0NHhfc2ltcGxlLmMKaW5kZXggNzZmZGM1MS4uNWJjZDQ0MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy80NHgvcHBjNDR4X3NpbXBsZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L3BwYzQ0eF9zaW1wbGUuYwpAQCAtNTcsNiArNTcsNyBAQAogCSJpYm0sZWJvbnkiLAogCSJhbWNjLGthdG1haSIsCiAJImFtY2MscmFpbmllciIsCisJImFtY2MscmVkd29vZCIsCiAJImFtY2Msc2VxdW9pYSIsCiAJImFtY2MsdGFpc2hhbiIsCiAJImFtY2MseW9zZW1pdGUiCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUxMngvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9LY29uZmlnCmluZGV4IDMyNjg1MmMuLjRkYWM5YjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTEyeC9LY29uZmlnCkBAIC0xMiw3ICsxMiw3IEBACiAKIGNvbmZpZyBNUEM1MTIxX0FEUwogCWJvb2wgIkZyZWVzY2FsZSBNUEM1MTIxRSBBRFMiCi0JZGVwZW5kcyBvbiBQUENfTVVMVElQTEFURk9STSAmJiBQUEMzMgorCWRlcGVuZHMgb24gNnh4CiAJc2VsZWN0IERFRkFVTFRfVUlNQUdFCiAJc2VsZWN0IFBQQ19NUEM1MTIxCiAJc2VsZWN0IE1QQzUxMjFfQURTX0NQTEQKQEAgLTIxLDcgKzIxLDcgQEAKIAogY29uZmlnIE1QQzUxMjFfR0VORVJJQwogCWJvb2wgIkdlbmVyaWMgc3VwcG9ydCBmb3Igc2ltcGxlIE1QQzUxMjEgYmFzZWQgYm9hcmRzIgotCWRlcGVuZHMgb24gUFBDX01VTFRJUExBVEZPUk0gJiYgUFBDMzIKKwlkZXBlbmRzIG9uIDZ4eAogCXNlbGVjdCBERUZBVUxUX1VJTUFHRQogCXNlbGVjdCBQUENfTVBDNTEyMQogCWhlbHAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L0tjb25maWcKaW5kZXggNjk2YTVlZS4uOGI4ZTk1NiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgUFBDX01QQzUyeHgKIAlib29sICI1Mnh4LWJhc2VkIGJvYXJkcyIKLQlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzMyCisJZGVwZW5kcyBvbiA2eHgKIAlzZWxlY3QgUFBDX0NMT0NLCiAJc2VsZWN0IFBQQ19QQ0lfQ0hPSUNFCiAKQEAgLTIxLDcgKzIxLDEzIEBACiAJICAgIGFuZCBpZiB0aGVyZSBpcyBhIFBDSSBidXMgbm9kZSBkZWZpbmVkIGluIHRoZSBkZXZpY2UgdHJlZS4KIAogCSAgQm9hcmRzIHRoYXQgYXJlIGNvbXBhdGlibGUgd2l0aCB0aGlzIGdlbmVyaWMgcGxhdGZvcm0gc3VwcG9ydAotCSAgYXJlOiAndHFjLHRxbTUyMDAnLCAncHJvbWVzcyxtb3Rpb25wcm8nLCAnc2NoaW5kbGVyLGNtNTIwMCcuCisJICBhcmU6CisJICAgICBpbnRlcmNvbnRyb2wsZGlnc3ktbXRjCisJICAgICBwaHl0ZWMscGNtMDMwCisJICAgICBwaHl0ZWMscGNtMDMyCisJICAgICBwcm9tZXNzLG1vdGlvbnBybworCSAgICAgc2NoaW5kbGVyLGNtNTIwMAorCSAgICAgdHFjLHRxbTUyMDAKIAogY29uZmlnIFBQQ19FRklLQQogCWJvb2wgImJQbGFuIEVmaWthIDVrMi4gTVBDNTIwMEIgYmFzZWQgY29tcHV0ZXIiCkBAIC0zNSw2ICs0MSwxMSBAQAogCWRlcGVuZHMgb24gUFBDX01QQzUyeHgKIAlzZWxlY3QgREVGQVVMVF9VSU1BR0UKIAorY29uZmlnIFBQQ19NRURJQTUyMDAKKwlib29sICJGcmVlc2NhbGUgTWVkaWE1MjAwIEV2YWwgQm9hcmQiCisJZGVwZW5kcyBvbiBQUENfTVBDNTJ4eAorCXNlbGVjdCBERUZBVUxUX1VJTUFHRQorCiBjb25maWcgUFBDX01QQzUyMDBfQlVHRklYCiAJYm9vbCAiTVBDNTIwMCAoTDI1UikgYnVnZml4IHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBQUENfTVBDNTJ4eApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L01ha2VmaWxlCmluZGV4IGI4YTUyMDYuLmJmZDRmNTIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvTWFrZWZpbGUKQEAgLTEsMTIgKzEsMTMgQEAKICMKICMgTWFrZWZpbGUgZm9yIDUyeHggYmFzZWQgYm9hcmRzCiAjCi1vYmoteQkJCQkrPSBtcGM1Mnh4X3BpYy5vIG1wYzUyeHhfY29tbW9uLm8KK29iai15CQkJCSs9IG1wYzUyeHhfcGljLm8gbXBjNTJ4eF9jb21tb24ubyBtcGM1Mnh4X2dwdC5vCiBvYmotJChDT05GSUdfUENJKQkJKz0gbXBjNTJ4eF9wY2kubwogCiBvYmotJChDT05GSUdfUFBDX01QQzUyMDBfU0lNUExFKSArPSBtcGM1MjAwX3NpbXBsZS5vCiBvYmotJChDT05GSUdfUFBDX0VGSUtBKQkJKz0gZWZpa2Eubwogb2JqLSQoQ09ORklHX1BQQ19MSVRFNTIwMCkJKz0gbGl0ZTUyMDAubworb2JqLSQoQ09ORklHX1BQQ19NRURJQTUyMDApCSs9IG1lZGlhNTIwMC5vCiAKIG9iai0kKENPTkZJR19QTSkJCSs9IG1wYzUyeHhfc2xlZXAubyBtcGM1Mnh4X3BtLm8KIGlmZXEgKCQoQ09ORklHX1BQQ19MSVRFNTIwMCkseSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tZWRpYTUyMDAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tZWRpYTUyMDAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42OGU0ZjE2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21lZGlhNTIwMC5jCkBAIC0wLDAgKzEsMjczIEBACisvKgorICogU3VwcG9ydCBmb3IgJ21lZGlhNTIwMC1wbGF0Zm9ybScgY29tcGF0aWJsZSBib2FyZHMuCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4IFNlY3JldCBMYWIgVGVjaG5vbG9naWVzIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIERlc2NyaXB0aW9uOgorICogVGhpcyBjb2RlIGltcGxlbWVudHMgc3VwcG9ydCBmb3IgdGhlIEZyZWVzY2FwZSBNZWRpYTUyMDAgcGxhdGZvcm0KKyAqIChidWlsdCBhcm91bmQgdGhlIE1QQzUyMDAgU29DKS4KKyAqCisgKiBOb3RhYmxlIGNoYXJhY3RlcmlzdGljIG9mIHRoZSBNZWRpYTUyMDAgaXMgdGhlIHByZXNlbmNlIG9mIGFuIEZQR0EKKyAqIHRoYXQgaGFzIGFsbCBleHRlcm5hbCBJUlEgbGluZXMgcm91dGVkIHRocm91Z2ggaXQuICBUaGlzIGZpbGUgaW1wbGVtZW50cworICogYSBjYXNjYWRlZCBpbnRlcnJ1cHQgY29udHJvbGxlciBkcml2ZXIgd2hpY2ggYXR0YWNoZXMgaXRzZWxmIHRvIHRoZQorICogVmlydHVhbCBJUlEgc3Vic3lzdGVtIGFmdGVyIHRoZSBwcmltYXJ5IG1wYzUyMDAgaW50ZXJydXB0IGNvbnRyb2xsZXIKKyAqIGlzIGluaXRpYWxpemVkLgorICoKKyAqLworCisjdW5kZWYgREVCVUcKKworI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPGFzbS9tYWNoZGVwLmg+CisjaW5jbHVkZSA8YXNtL21wYzUyeHguaD4KKworc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjNTIwMF9ncGlvX2lkc1tdIF9faW5pdGRhdGEgPSB7CisJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1ncGlvIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1wYzUyMDAtZ3BpbyIsIH0sCisJe30KK307CisKKy8qIEZQR0EgcmVnaXN0ZXIgc2V0ICovCisjZGVmaW5lIE1FRElBNTIwMF9JUlFfRU5BQkxFICgweDQwYykKKyNkZWZpbmUgTUVESUE1MjAwX0lSUV9TVEFUVVMgKDB4NDEwKQorI2RlZmluZSBNRURJQTUyMDBfTlVNX0lSUVMgICAoNikKKyNkZWZpbmUgTUVESUE1MjAwX0lSUV9TSElGVCAgKDMyIC0gTUVESUE1MjAwX05VTV9JUlFTKQorCitzdHJ1Y3QgbWVkaWE1MjAwX2lycSB7CisJdm9pZCBfX2lvbWVtICpyZWdzOworCXNwaW5sb2NrX3QgbG9jazsKKwlzdHJ1Y3QgaXJxX2hvc3QgKmlycWhvc3Q7Cit9Oworc3RydWN0IG1lZGlhNTIwMF9pcnEgbWVkaWE1MjAwX2lycTsKKworc3RhdGljIHZvaWQgbWVkaWE1MjAwX2lycV91bm1hc2sodW5zaWduZWQgaW50IHZpcnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgdmFsOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJm1lZGlhNTIwMF9pcnEubG9jaywgZmxhZ3MpOworCXZhbCA9IGluX2JlMzIobWVkaWE1MjAwX2lycS5yZWdzICsgTUVESUE1MjAwX0lSUV9FTkFCTEUpOworCXZhbCB8PSAxIDw8IChNRURJQTUyMDBfSVJRX1NISUZUICsgaXJxX21hcFt2aXJxXS5od2lycSk7CisJb3V0X2JlMzIobWVkaWE1MjAwX2lycS5yZWdzICsgTUVESUE1MjAwX0lSUV9FTkFCTEUsIHZhbCk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbWVkaWE1MjAwX2lycS5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG1lZGlhNTIwMF9pcnFfbWFzayh1bnNpZ25lZCBpbnQgdmlycSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiB2YWw7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmbWVkaWE1MjAwX2lycS5sb2NrLCBmbGFncyk7CisJdmFsID0gaW5fYmUzMihtZWRpYTUyMDBfaXJxLnJlZ3MgKyBNRURJQTUyMDBfSVJRX0VOQUJMRSk7CisJdmFsICY9IH4oMSA8PCAoTUVESUE1MjAwX0lSUV9TSElGVCArIGlycV9tYXBbdmlycV0uaHdpcnEpKTsKKwlvdXRfYmUzMihtZWRpYTUyMDBfaXJxLnJlZ3MgKyBNRURJQTUyMDBfSVJRX0VOQUJMRSwgdmFsKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZtZWRpYTUyMDBfaXJxLmxvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBtZWRpYTUyMDBfaXJxX2NoaXAgPSB7CisJLnR5cGVuYW1lID0gIk1lZGlhNTIwMCBGUEdBIiwKKwkudW5tYXNrID0gbWVkaWE1MjAwX2lycV91bm1hc2ssCisJLm1hc2sgPSBtZWRpYTUyMDBfaXJxX21hc2ssCisJLm1hc2tfYWNrID0gbWVkaWE1MjAwX2lycV9tYXNrLAorfTsKKwordm9pZCBtZWRpYTUyMDBfaXJxX2Nhc2NhZGUodW5zaWduZWQgaW50IHZpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlpbnQgc3ViX3ZpcnEsIHZhbDsKKwl1MzIgc3RhdHVzLCBlbmFibGU7CisKKwkvKiBNYXNrIG9mZiB0aGUgY2FzY2FkZWQgSVJRICovCisJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKKwlkZXNjLT5jaGlwLT5tYXNrKHZpcnEpOworCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKKworCS8qIEFzayB0aGUgRlBHQSBmb3IgSVJRIHN0YXR1cy4gIElmICd2YWwnIGlzIDAsIHRoZW4gbm8gaXJxcworCSAqIGFyZSBwZW5kaW5nLiAgJ2ZmcygpJyBpcyAxIGJhc2VkICovCisJc3RhdHVzID0gaW5fYmUzMihtZWRpYTUyMDBfaXJxLnJlZ3MgKyBNRURJQTUyMDBfSVJRX0VOQUJMRSk7CisJZW5hYmxlID0gaW5fYmUzMihtZWRpYTUyMDBfaXJxLnJlZ3MgKyBNRURJQTUyMDBfSVJRX1NUQVRVUyk7CisJdmFsID0gZmZzKChzdGF0dXMgJiBlbmFibGUpID4+IE1FRElBNTIwMF9JUlFfU0hJRlQpOworCWlmICh2YWwpIHsKKwkJc3ViX3ZpcnEgPSBpcnFfbGluZWFyX3Jldm1hcChtZWRpYTUyMDBfaXJxLmlycWhvc3QsIHZhbCAtIDEpOworCQkvKiBwcl9kZWJ1ZygiJXM6IHZpcnE9JWkgcz0lLjh4IGU9JS44eCBod2lycT0laSBzdWJ2aXJxPSVpXG4iLAorCQkgKiAgICAgICAgICBfX2Z1bmNfXywgdmlycSwgc3RhdHVzLCBlbmFibGUsIHZhbCAtIDEsIHN1Yl92aXJxKTsKKwkJICovCisJCWdlbmVyaWNfaGFuZGxlX2lycShzdWJfdmlycSk7CisJfQorCisJLyogUHJvY2Vzc2luZyBkb25lOyBjYW4gcmVlbmFibGUgdGhlIGNhc2NhZGUgbm93ICovCisJc3Bpbl9sb2NrKCZkZXNjLT5sb2NrKTsKKwlkZXNjLT5jaGlwLT5hY2sodmlycSk7CisJaWYgKCEoZGVzYy0+c3RhdHVzICYgSVJRX0RJU0FCTEVEKSkKKwkJZGVzYy0+Y2hpcC0+dW5tYXNrKHZpcnEpOworCXNwaW5fdW5sb2NrKCZkZXNjLT5sb2NrKTsKK30KKworc3RhdGljIGludCBtZWRpYTUyMDBfaXJxX21hcChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHVuc2lnbmVkIGludCB2aXJxLAorCQkJICAgICBpcnFfaHdfbnVtYmVyX3QgaHcpCit7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gZ2V0X2lycV9kZXNjKHZpcnEpOworCisJcHJfZGVidWcoIiVzOiBoPSVwLCB2aXJxPSVpLCBod2lycT0laVxuIiwgX19mdW5jX18sIGgsIHZpcnEsIChpbnQpaHcpOworCXNldF9pcnFfY2hpcF9kYXRhKHZpcnEsICZtZWRpYTUyMDBfaXJxKTsKKwlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIodmlycSwgJm1lZGlhNTIwMF9pcnFfY2hpcCwgaGFuZGxlX2xldmVsX2lycSk7CisJc2V0X2lycV90eXBlKHZpcnEsIElSUV9UWVBFX0xFVkVMX0xPVyk7CisJZGVzYy0+c3RhdHVzICY9IH4oSVJRX1RZUEVfU0VOU0VfTUFTSyB8IElSUV9MRVZFTCk7CisJZGVzYy0+c3RhdHVzIHw9IElSUV9UWVBFX0xFVkVMX0xPVyB8IElSUV9MRVZFTDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1lZGlhNTIwMF9pcnFfeGxhdGUoc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0LAorCQkJCSB1MzIgKmludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXplLAorCQkJCSBpcnFfaHdfbnVtYmVyX3QgKm91dF9od2lycSwKKwkJCQkgdW5zaWduZWQgaW50ICpvdXRfZmxhZ3MpCit7CisJaWYgKGludHNpemUgIT0gMikKKwkJcmV0dXJuIC0xOworCisJcHJfZGVidWcoIiVzOiBiYW5rPSVpLCBudW1iZXI9JWlcbiIsIF9fZnVuY19fLCBpbnRzcGVjWzBdLCBpbnRzcGVjWzFdKTsKKwkqb3V0X2h3aXJxID0gaW50c3BlY1sxXTsKKwkqb3V0X2ZsYWdzID0gSVJRX1RZUEVfTk9ORTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfaG9zdF9vcHMgbWVkaWE1MjAwX2lycV9vcHMgPSB7CisJLm1hcCA9IG1lZGlhNTIwMF9pcnFfbWFwLAorCS54bGF0ZSA9IG1lZGlhNTIwMF9pcnFfeGxhdGUsCit9OworCisvKgorICogU2V0dXAgTWVkaWE1MjAwIElSUSBtYXBwaW5nCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBtZWRpYTUyMDBfaW5pdF9pcnEodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmZwZ2FfbnA7CisJaW50IGNhc2NhZGVfdmlycTsKKworCS8qIEZpcnN0IHNldHVwIHRoZSByZWd1bGFyIE1QQzUyMDAgaW50ZXJydXB0IGNvbnRyb2xsZXIgKi8KKwltcGM1Mnh4X2luaXRfaXJxKCk7CisKKwkvKiBOb3cgZmluZCB0aGUgRlBHQSBJUlEgKi8KKwlmcGdhX25wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImZzbCxtZWRpYTUyMDAtZnBnYSIpOworCWlmICghZnBnYV9ucCkKKwkJZ290byBvdXQ7CisJcHJfZGVidWcoIiVzOiBmb3VuZCBmcGdhIG5vZGU6ICVzXG4iLCBfX2Z1bmNfXywgZnBnYV9ucC0+ZnVsbF9uYW1lKTsKKworCW1lZGlhNTIwMF9pcnEucmVncyA9IG9mX2lvbWFwKGZwZ2FfbnAsIDApOworCWlmICghbWVkaWE1MjAwX2lycS5yZWdzKQorCQlnb3RvIG91dDsKKwlwcl9kZWJ1ZygiJXM6IG1hcHBlZCB0byAlcFxuIiwgX19mdW5jX18sIG1lZGlhNTIwMF9pcnEucmVncyk7CisKKwljYXNjYWRlX3ZpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChmcGdhX25wLCAwKTsKKwlpZiAoIWNhc2NhZGVfdmlycSkKKwkJZ290byBvdXQ7CisJcHJfZGVidWcoIiVzOiBjYXNjYWRlZCBvbiB2aXJxPSVpXG4iLCBfX2Z1bmNfXywgY2FzY2FkZV92aXJxKTsKKworCS8qIERpc2FibGUgYWxsIEZQR0EgSVJRcyAqLworCW91dF9iZTMyKG1lZGlhNTIwMF9pcnEucmVncyArIE1FRElBNTIwMF9JUlFfRU5BQkxFLCAwKTsKKworCXNwaW5fbG9ja19pbml0KCZtZWRpYTUyMDBfaXJxLmxvY2spOworCisJbWVkaWE1MjAwX2lycS5pcnFob3N0ID0gaXJxX2FsbG9jX2hvc3QoZnBnYV9ucCwgSVJRX0hPU1RfTUFQX0xJTkVBUiwKKwkJCQkJICAgICAgIE1FRElBNTIwMF9OVU1fSVJRUywKKwkJCQkJICAgICAgICZtZWRpYTUyMDBfaXJxX29wcywgLTEpOworCWlmICghbWVkaWE1MjAwX2lycS5pcnFob3N0KQorCQlnb3RvIG91dDsKKwlwcl9kZWJ1ZygiJXM6IGFsbG9jYXRlZCBpcnFob3N0XG4iLCBfX2Z1bmNfXyk7CisKKwltZWRpYTUyMDBfaXJxLmlycWhvc3QtPmhvc3RfZGF0YSA9ICZtZWRpYTUyMDBfaXJxOworCisJc2V0X2lycV9kYXRhKGNhc2NhZGVfdmlycSwgJm1lZGlhNTIwMF9pcnEpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGNhc2NhZGVfdmlycSwgbWVkaWE1MjAwX2lycV9jYXNjYWRlKTsKKworCXJldHVybjsKKworIG91dDoKKwlwcl9lcnIoIkNvdWxkIG5vdCBmaW5kIE1lZGlhNTIwMCBGUEdBOyBQQ0kgaW50ZXJydXB0cyB3aWxsIG5vdCB3b3JrXG4iKTsKK30KKworLyoKKyAqIFNldHVwIHRoZSBhcmNoaXRlY3R1cmUKKyAqLworc3RhdGljIHZvaWQgX19pbml0IG1lZGlhNTIwMF9zZXR1cF9hcmNoKHZvaWQpCit7CisKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCXN0cnVjdCBtcGM1Mnh4X2dwaW8gX19pb21lbSAqZ3BpbzsKKwl1MzIgcG9ydF9jb25maWc7CisKKwlpZiAocHBjX21kLnByb2dyZXNzKQorCQlwcGNfbWQucHJvZ3Jlc3MoIm1lZGlhNTIwMF9zZXR1cF9hcmNoKCkiLCAwKTsKKworCS8qIE1hcCBpbXBvcnRhbnQgcmVnaXN0ZXJzIGZyb20gdGhlIGludGVybmFsIG1lbW9yeSBtYXAgKi8KKwltcGM1Mnh4X21hcF9jb21tb25fZGV2aWNlcygpOworCisJLyogU29tZSBtcGM1MjAwICYgbXBjNTIwMGIgcmVsYXRlZCBjb25maWd1cmF0aW9uICovCisJbXBjNTIwMF9zZXR1cF94bGJfYXJiaXRlcigpOworCisJbXBjNTJ4eF9zZXR1cF9wY2koKTsKKworCW5wID0gb2ZfZmluZF9tYXRjaGluZ19ub2RlKE5VTEwsIG1wYzUyMDBfZ3Bpb19pZHMpOworCWdwaW8gPSBvZl9pb21hcChucCwgMCk7CisJb2Zfbm9kZV9wdXQobnApOworCWlmICghZ3BpbykgeworCQlwcmludGsoS0VSTl9FUlIgIiVzKCkgZmFpbGVkLiBleHBlY3QgYWJub3JtYWwgYmVoYXZpb3JcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCXJldHVybjsKKwl9CisKKwkvKiBTZXQgcG9ydCBjb25maWcgKi8KKwlwb3J0X2NvbmZpZyA9IGluX2JlMzIoJmdwaW8tPnBvcnRfY29uZmlnKTsKKworCXBvcnRfY29uZmlnICY9IH4weDAzMDAwMDAwOwkvKiBBVEEgQ1MgaXMgb24gY3NiXzQvNQkJKi8KKwlwb3J0X2NvbmZpZyB8PSAgMHgwMTAwMDAwMDsKKworCW91dF9iZTMyKCZncGlvLT5wb3J0X2NvbmZpZywgcG9ydF9jb25maWcpOworCisJLyogVW5tYXAgem9uZSAqLworCWlvdW5tYXAoZ3Bpbyk7CisKK30KKworLyogbGlzdCBvZiB0aGUgc3VwcG9ydGVkIGJvYXJkcyAqLworc3RhdGljIGNoYXIgKmJvYXJkW10gX19pbml0ZGF0YSA9IHsKKwkiZnNsLG1lZGlhNTIwMCIsCisJTlVMTAorfTsKKworLyoKKyAqIENhbGxlZCB2ZXJ5IGVhcmx5LCBNTVUgaXMgb2ZmLCBkZXZpY2UtdHJlZSBpc24ndCB1bmZsYXR0ZW5lZAorICovCitzdGF0aWMgaW50IF9faW5pdCBtZWRpYTUyMDBfcHJvYmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIG5vZGUgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7CisJaW50IGkgPSAwOworCisJd2hpbGUgKGJvYXJkW2ldKSB7CisJCWlmIChvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUobm9kZSwgYm9hcmRbaV0pKQorCQkJYnJlYWs7CisJCWkrKzsKKwl9CisKKwlyZXR1cm4gKGJvYXJkW2ldICE9IE5VTEwpOworfQorCitkZWZpbmVfbWFjaGluZShtZWRpYTUyMDBfcGxhdGZvcm0pIHsKKwkubmFtZQkJPSAibWVkaWE1MjAwLXBsYXRmb3JtIiwKKwkucHJvYmUJCT0gbWVkaWE1MjAwX3Byb2JlLAorCS5zZXR1cF9hcmNoCT0gbWVkaWE1MjAwX3NldHVwX2FyY2gsCisJLmluaXQJCT0gbXBjNTJ4eF9kZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXMsCisJLmluaXRfSVJRCT0gbWVkaWE1MjAwX2luaXRfaXJxLAorCS5nZXRfaXJxCT0gbXBjNTJ4eF9nZXRfaXJxLAorCS5yZXN0YXJ0CT0gbXBjNTJ4eF9yZXN0YXJ0LAorCS5jYWxpYnJhdGVfZGVjcgk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyMDBfc2ltcGxlLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTIwMF9zaW1wbGUuYwppbmRleCBhM2JkYTBiLi5jMzFlNWI1IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTIwMF9zaW1wbGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTIwMF9zaW1wbGUuYwpAQCAtNTAsOCArNTAsMTAgQEAKIAogLyogbGlzdCBvZiB0aGUgc3VwcG9ydGVkIGJvYXJkcyAqLwogc3RhdGljIGNoYXIgKmJvYXJkW10gX19pbml0ZGF0YSA9IHsKLQkicHJvbWVzcyxtb3Rpb25wcm8iLAorCSJpbnRlcmNvbnRyb2wsZGlnc3ktbXRjIiwKIAkicGh5dGVjLHBjbTAzMCIsCisJInBoeXRlYyxwY20wMzIiLAorCSJwcm9tZXNzLG1vdGlvbnBybyIsCiAJInNjaGluZGxlcixjbTUyMDAiLAogCSJ0cWMsdHFtNTIwMCIsCiAJTlVMTApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfY29tbW9uLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9jb21tb24uYwppbmRleCA5ODM2N2EwLi44ZTNkZDVhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9jb21tb24uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9jb21tb24uYwpAQCAtMjgsOSArMjgsMTAgQEAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG1wYzUyeHhfYnVzX2lkc1tdIF9faW5pdGRhdGEgPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1pbW1yIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1pbW1yIiwgfSwKLQl7IC5jb21wYXRpYmxlID0gImZzbCxscGIiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCiAKIAkvKiBkZXByZWNpYXRlZCBtYXRjaGVzOyBzaG91bGRuJ3QgYmUgdXNlZCBpbiBuZXcgZGV2aWNlIHRyZWVzICovCisJeyAuY29tcGF0aWJsZSA9ICJmc2wsbHBiIiwgfSwKIAl7IC50eXBlID0gImJ1aWx0aW4iLCAuY29tcGF0aWJsZSA9ICJtcGM1MjAwIiwgfSwgLyogZWZpa2EgKi8KIAl7IC50eXBlID0gInNvYyIsIC5jb21wYXRpYmxlID0gIm1wYzUyMDAiLCB9LCAvKiBsaXRlNTIwMCAqLwogCXt9CkBAIC0yMDUsNiArMjA2LDQzIEBACiBFWFBPUlRfU1lNQk9MKG1wYzUyeHhfc2V0X3BzY19jbGtkaXYpOwogCiAvKioKKyAqIG1wYzUyeHhfZ2V0X3h0YWxfZnJlcSAtIEdldCBTWVNfWFRBTF9JTiBmcmVxdWVuY3kgZm9yIGEgZGV2aWNlCisgKgorICogQG5vZGU6IGRldmljZSBub2RlCisgKgorICogUmV0dXJucyB0aGUgZnJlcXVlbmN5IG9mIHRoZSBleHRlcm5hbCBvc2NpbGxhdG9yIGNsb2NrIGNvbm5lY3RlZAorICogdG8gdGhlIFNZU19YVEFMX0lOIHBpbiwgb3IgMCBpZiBpdCBjYW5ub3QgYmUgZGV0ZXJtaW5lZC4KKyAqLwordW5zaWduZWQgaW50IG1wYzUyeHhfZ2V0X3h0YWxfZnJlcShzdHJ1Y3QgZGV2aWNlX25vZGUgKm5vZGUpCit7CisJdTMyIHZhbDsKKwl1bnNpZ25lZCBpbnQgZnJlcTsKKworCWlmICghbXBjNTJ4eF9jZG0pCisJCXJldHVybiAwOworCisJZnJlcSA9IG1wYzUyeHhfZmluZF9pcGJfZnJlcShub2RlKTsKKwlpZiAoIWZyZXEpCisJCXJldHVybiAwOworCisJaWYgKGluXzgoJm1wYzUyeHhfY2RtLT5pcGJfY2xrX3NlbCkgJiAweDEpCisJCWZyZXEgKj0gMjsKKworCXZhbCAgPSBpbl9iZTMyKCZtcGM1Mnh4X2NkbS0+cnN0Y2ZnKTsKKwlpZiAodmFsICYgKDEgPDwgNSkpCisJCWZyZXEgKj0gODsKKwllbHNlCisJCWZyZXEgKj0gNDsKKwlpZiAodmFsICYgKDEgPDwgNikpCisJCWZyZXEgLz0gMTI7CisJZWxzZQorCQlmcmVxIC89IDE2OworCisJcmV0dXJuIGZyZXE7Cit9CitFWFBPUlRfU1lNQk9MKG1wYzUyeHhfZ2V0X3h0YWxfZnJlcSk7CisKKy8qKgogICogbXBjNTJ4eF9yZXN0YXJ0OiBwcGNfbWQtPnJlc3RhcnQgaG9vayBmb3IgbXBjNTIwMCB1c2luZyB0aGUgd2F0Y2hkb2cgdGltZXIKICAqLwogdm9pZApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfZ3Bpby5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfZ3Bpby5jCmluZGV4IDA3Zjg5YWUuLjJiOGQ4ZWYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2dwaW8uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9ncGlvLmMKQEAgLTM1NCw4OCArMzU0LDYgQEAKIAkucmVtb3ZlID0gbXBjNTJ4eF9ncGlvY2hpcF9yZW1vdmUsCiB9OwogCi0vKgotICogR1BJTyBMSUIgQVBJIGltcGxlbWVudGF0aW9uIGZvciBncHQgR1BJT3MuCi0gKgotICogRWFjaCBncHQgb25seSBoYXMgYSBzaW5nbGUgR1BJTy4KLSAqLwotc3RhdGljIGludCBtcGM1Mnh4X2dwdF9ncGlvX2dldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8pCi17Ci0Jc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW1fZ2MgPSB0b19vZl9tbV9ncGlvX2NoaXAoZ2MpOwotCXN0cnVjdCBtcGM1Mnh4X2dwdCBfX2lvbWVtICpyZWdzID0gbW1fZ2MtPnJlZ3M7Ci0KLQlyZXR1cm4gKGluX2JlMzIoJnJlZ3MtPnN0YXR1cykgJiAoMSA8PCAoMzEgLSAyMykpKSA/IDEgOiAwOwotfQotCi1zdGF0aWMgdm9pZAotbXBjNTJ4eF9ncHRfZ3Bpb19zZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvLCBpbnQgdmFsKQotewotCXN0cnVjdCBvZl9tbV9ncGlvX2NoaXAgKm1tX2djID0gdG9fb2ZfbW1fZ3Bpb19jaGlwKGdjKTsKLQlzdHJ1Y3QgbXBjNTJ4eF9ncHQgX19pb21lbSAqcmVncyA9IG1tX2djLT5yZWdzOwotCi0JaWYgKHZhbCkKLQkJb3V0X2JlMzIoJnJlZ3MtPm1vZGUsIDB4MzQpOwotCWVsc2UKLQkJb3V0X2JlMzIoJnJlZ3MtPm1vZGUsIDB4MjQpOwotCi0JcHJfZGVidWcoIiVzOiBncGlvOiAlZCB2YWw6ICVkXG4iLCBfX2Z1bmNfXywgZ3BpbywgdmFsKTsKLX0KLQotc3RhdGljIGludCBtcGM1Mnh4X2dwdF9ncGlvX2Rpcl9pbihzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8pCi17Ci0Jc3RydWN0IG9mX21tX2dwaW9fY2hpcCAqbW1fZ2MgPSB0b19vZl9tbV9ncGlvX2NoaXAoZ2MpOwotCXN0cnVjdCBtcGM1Mnh4X2dwdCBfX2lvbWVtICpyZWdzID0gbW1fZ2MtPnJlZ3M7Ci0KLQlvdXRfYmUzMigmcmVncy0+bW9kZSwgMHgwNCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotbXBjNTJ4eF9ncHRfZ3Bpb19kaXJfb3V0KHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbywgaW50IHZhbCkKLXsKLQltcGM1Mnh4X2dwdF9ncGlvX3NldChnYywgZ3BpbywgdmFsKTsKLQlwcl9kZWJ1ZygiJXM6IGdwaW86ICVkIHZhbDogJWRcbiIsIF9fZnVuY19fLCBncGlvLCB2YWwpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgX19kZXZpbml0IG1wYzUyeHhfZ3B0X2dwaW9jaGlwX3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LAotCQkJCQljb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKLXsKLQlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICptbWNoaXA7Ci0Jc3RydWN0IG9mX2dwaW9fY2hpcCAqY2hpcDsKLQotCW1tY2hpcCA9IGt6YWxsb2Moc2l6ZW9mKCptbWNoaXApLCBHRlBfS0VSTkVMKTsKLQlpZiAoIW1tY2hpcCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0KLQljaGlwID0gJm1tY2hpcC0+b2ZfZ2M7Ci0KLQljaGlwLT5ncGlvX2NlbGxzICAgICAgICAgID0gMjsKLQljaGlwLT5nYy5uZ3BpbyAgICAgICAgICAgID0gMTsKLQljaGlwLT5nYy5kaXJlY3Rpb25faW5wdXQgID0gbXBjNTJ4eF9ncHRfZ3Bpb19kaXJfaW47Ci0JY2hpcC0+Z2MuZGlyZWN0aW9uX291dHB1dCA9IG1wYzUyeHhfZ3B0X2dwaW9fZGlyX291dDsKLQljaGlwLT5nYy5nZXQgICAgICAgICAgICAgID0gbXBjNTJ4eF9ncHRfZ3Bpb19nZXQ7Ci0JY2hpcC0+Z2Muc2V0ICAgICAgICAgICAgICA9IG1wYzUyeHhfZ3B0X2dwaW9fc2V0OwotCi0JcmV0dXJuIG9mX21tX2dwaW9jaGlwX2FkZChvZmRldi0+bm9kZSwgbW1jaGlwKTsKLX0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjNTJ4eF9ncHRfZ3Bpb2NoaXBfbWF0Y2hbXSA9IHsKLQl7Ci0JCS5jb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWdwdC1ncGlvIiwKLQl9LAotCXt9Ci19OwotCi1zdGF0aWMgc3RydWN0IG9mX3BsYXRmb3JtX2RyaXZlciBtcGM1Mnh4X2dwdF9ncGlvY2hpcF9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiZ3Bpb19ncHQiLAotCS5tYXRjaF90YWJsZSA9IG1wYzUyeHhfZ3B0X2dwaW9jaGlwX21hdGNoLAotCS5wcm9iZSA9IG1wYzUyeHhfZ3B0X2dwaW9jaGlwX3Byb2JlLAotCS5yZW1vdmUgPSBtcGM1Mnh4X2dwaW9jaGlwX3JlbW92ZSwKLX07Ci0KIHN0YXRpYyBpbnQgX19pbml0IG1wYzUyeHhfZ3Bpb19pbml0KHZvaWQpCiB7CiAJaWYgKG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmbXBjNTJ4eF93a3VwX2dwaW9jaGlwX2RyaXZlcikpCkBAIC00NDQsOSArMzYyLDYgQEAKIAlpZiAob2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZtcGM1Mnh4X3NpbXBsZV9ncGlvY2hpcF9kcml2ZXIpKQogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byByZWdpc3RlciBzaW1wbGUgR1BJTyBkcml2ZXJcbiIpOwogCi0JaWYgKG9mX3JlZ2lzdGVyX3BsYXRmb3JtX2RyaXZlcigmbXBjNTJ4eF9ncHRfZ3Bpb2NoaXBfZHJpdmVyKSkKLQkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgZ3B0IEdQSU8gZHJpdmVyXG4iKTsKLQogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9ncHQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNTJ4eC9tcGM1Mnh4X2dwdC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmJmYmNkNDEKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9ncHQuYwpAQCAtMCwwICsxLDM5NiBAQAorLyoKKyAqIE1QQzUyMDAgR2VuZXJhbCBQdXJwb3NlIFRpbWVyIGRldmljZSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDkgU2VjcmV0IExhYiBUZWNobm9sb2dpZXMgTHRkLgorICogQ29weXJpZ2h0IChjKSAyMDA4IFNhc2NoYSBIYXVlciA8cy5oYXVlckBwZW5ndXRyb25peC5kZT4sIFBlbmd1dHJvbml4CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGZpbGUgaXMgYSBkcml2ZXIgZm9yIHRoZSB0aGUgR2VuZXJhbCBQdXJwb3NlIFRpbWVyIChncHQpIGRldmljZXMKKyAqIGZvdW5kIG9uIHRoZSBNUEM1MjAwIFNvQy4gIEVhY2ggdGltZXIgaGFzIGFuIElPIHBpbiB3aGljaCBjYW4gYmUgdXNlZAorICogZm9yIEdQSU8gb3IgY2FuIGJlIHVzZWQgdG8gcmFpc2UgaW50ZXJydXB0cy4gIFRoZSB0aW1lciBmdW5jdGlvbiBjYW4KKyAqIGJlIHVzZWQgaW5kZXBlbmRlbnRseSBmcm9tIHRoZSBJTyBwaW4sIG9yIGl0IGNhbiBiZSB1c2VkIHRvIGNvbnRyb2wKKyAqIG91dHB1dCBzaWduYWxzIG9yIG1lYXN1cmUgaW5wdXQgc2lnbmFscy4KKyAqCisgKiBUaGlzIGRyaXZlciBzdXBwb3J0cyB0aGUgR1BJTyBhbmQgSVJRIGNvbnRyb2xsZXIgZnVuY3Rpb25zIG9mIHRoZSBHUFQKKyAqIGRldmljZS4gIFRpbWVyIGZ1bmN0aW9ucyBhcmUgbm90IHlldCBzdXBwb3J0ZWQsIG5vciBpcyB0aGUgd2F0Y2hkb2cKKyAqIHRpbWVyLgorICoKKyAqIFRvIHVzZSB0aGUgR1BJTyBmdW5jdGlvbiwgdGhlIGZvbGxvd2luZyB0d28gcHJvcGVydGllcyBtdXN0IGJlIGFkZGVkCisgKiB0byB0aGUgZGV2aWNlIHRyZWUgbm9kZSBmb3IgdGhlIGdwdCBkZXZpY2UgKHR5cGljYWxseSBpbiB0aGUgLmR0cyBmaWxlCisgKiBmb3IgdGhlIGJvYXJkKToKKyAqIAlncGlvLWNvbnRyb2xsZXI7CisgKiAJI2dwaW8tY2VsbHMgPSA8IDIgPjsKKyAqIFRoaXMgZHJpdmVyIHdpbGwgcmVnaXN0ZXIgdGhlIEdQSU8gcGluIGlmIGl0IGZpbmRzIHRoZSBncGlvLWNvbnRyb2xsZXIKKyAqIHByb3BlcnR5IGluIHRoZSBkZXZpY2UgdHJlZS4KKyAqCisgKiBUbyB1c2UgdGhlIElSUSBjb250cm9sbGVyIGZ1bmN0aW9uLCB0aGUgZm9sbG93aW5nIHR3byBwcm9wZXJ0aWVzIG11c3QKKyAqIGJlIGFkZGVkIHRvIHRoZSBkZXZpY2UgdHJlZSBub2RlIGZvciB0aGUgZ3B0IGRldmljZToKKyAqIAlpbnRlcnJ1cHQtY29udHJvbGxlcjsKKyAqIAkjaW50ZXJydXB0LWNlbGxzID0gPCAxID47CisgKiBUaGUgSVJRIGNvbnRyb2xsZXIgYmluZGluZyBvbmx5IHVzZXMgb25lIGNlbGwgdG8gc3BlY2lmeSB0aGUgaW50ZXJydXB0LAorICogYW5kIHRoZSBJUlEgZmxhZ3MgYXJlIGVuY29kZWQgaW4gdGhlIGNlbGwuICBBIGNlbGwgaXMgbm90IHVzZWQgdG8gZW5jb2RlCisgKiB0aGUgSVJRIG51bWJlciBiZWNhdXNlIHRoZSBHUFQgb25seSBoYXMgYSBzaW5nbGUgSVJRIHNvdXJjZS4gIEZvciBmbGFncywKKyAqIGEgdmFsdWUgb2YgJzEnIG1lYW5zIHJpc2luZyBlZGdlIHNlbnNpdGl2ZSBhbmQgJzInIG1lYW5zIGZhbGxpbmcgZWRnZS4KKyAqCisgKiBUaGUgR1BJTyBhbmQgdGhlIElSUSBjb250cm9sbGVyIGZ1bmN0aW9ucyBjYW4gYmUgdXNlZCBhdCB0aGUgc2FtZSB0aW1lLAorICogYnV0IGluIHRoaXMgdXNlIGNhc2UgdGhlIElPIGxpbmUgd2lsbCBvbmx5IHdvcmsgYXMgYW4gaW5wdXQuICBUcnlpbmcgdG8KKyAqIHVzZSBpdCBhcyBhIEdQSU8gb3V0cHV0IHdpbGwgbm90IHdvcmsuCisgKgorICogV2hlbiB1c2luZyB0aGUgR1BJTyBsaW5lIGFzIGFuIG91dHB1dCwgaXQgY2FuIGVpdGhlciBiZSBkcml2ZW4gYXMgbm9ybWFsCisgKiBJTywgb3IgaXQgY2FuIGJlIGFuIE9wZW4gQ29sbGVjdG9yIChPQykgb3V0cHV0LiAgQXQgdGhlIG1vbWVudCBpdCBpcyB0aGUKKyAqIHJlc3BvbnNpYmlsaXR5IG9mIGVpdGhlciB0aGUgYm9vdGxvYWRlciBvciB0aGUgcGxhdGZvcm0gc2V0dXAgY29kZSB0byBzZXQKKyAqIHRoZSBvdXRwdXQgbW9kZS4gIFRoaXMgZHJpdmVyIGRvZXMgbm90IGNoYW5nZSB0aGUgb3V0cHV0IG1vZGUgc2V0dGluZy4KKyAqLworCisjaW5jbHVkZSA8bGludXgvaXJxLmg+CisjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9vZi5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvb2ZfZ3Bpby5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGFzbS9tcGM1Mnh4Lmg+CisKK01PRFVMRV9ERVNDUklQVElPTigiRnJlZXNjYWxlIE1QQzUyeHggZ3B0IGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiU2FzY2hhIEhhdWVyLCBHcmFudCBMaWtlbHkiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyoqCisgKiBzdHJ1Y3QgbXBjNTJ4eF9ncHQgLSBQcml2YXRlIGRhdGEgc3RydWN0dXJlIGZvciBNUEM1Mnh4IEdQVCBkcml2ZXIKKyAqIEBkZXY6IHBvaW50ZXIgdG8gZGV2aWNlIHN0cnVjdHVyZQorICogQHJlZ3M6IHZpcnR1YWwgYWRkcmVzcyBvZiBHUFQgcmVnaXN0ZXJzCisgKiBAbG9jazogc3BpbmxvY2sgdG8gY29vcmRpbmF0ZSBiZXR3ZWVuIGRpZmZlcmVudCBmdW5jdGlvbnMuCisgKiBAb2ZfZ2M6IG9mX2dwaW9fY2hpcCBpbnN0YW5jZSBzdHJ1Y3R1cmU7IHVzZWQgd2hlbiBHUElPIGlzIGVuYWJsZWQKKyAqIEBpcnFob3N0OiBQb2ludGVyIHRvIGlycV9ob3N0IGluc3RhbmNlOyB1c2VkIHdoZW4gSVJRIG1vZGUgaXMgc3VwcG9ydGVkCisgKi8KK3N0cnVjdCBtcGM1Mnh4X2dwdF9wcml2IHsKKwlzdHJ1Y3QgZGV2aWNlICpkZXY7CisJc3RydWN0IG1wYzUyeHhfZ3B0IF9faW9tZW0gKnJlZ3M7CisJc3BpbmxvY2tfdCBsb2NrOworCXN0cnVjdCBpcnFfaG9zdCAqaXJxaG9zdDsKKworI2lmIGRlZmluZWQoQ09ORklHX0dQSU9MSUIpCisJc3RydWN0IG9mX2dwaW9fY2hpcCBvZl9nYzsKKyNlbmRpZgorfTsKKworI2RlZmluZSBNUEM1Mnh4X0dQVF9NT0RFX01TX01BU0sJKDB4MDcpCisjZGVmaW5lIE1QQzUyeHhfR1BUX01PREVfTVNfSUMJCSgweDAxKQorI2RlZmluZSBNUEM1Mnh4X0dQVF9NT0RFX01TX09DCQkoMHgwMikKKyNkZWZpbmUgTVBDNTJ4eF9HUFRfTU9ERV9NU19QV00JCSgweDAzKQorI2RlZmluZSBNUEM1Mnh4X0dQVF9NT0RFX01TX0dQSU8JKDB4MDQpCisKKyNkZWZpbmUgTVBDNTJ4eF9HUFRfTU9ERV9HUElPX01BU0sJKDB4MzApCisjZGVmaW5lIE1QQzUyeHhfR1BUX01PREVfR1BJT19PVVRfTE9XCSgweDIwKQorI2RlZmluZSBNUEM1Mnh4X0dQVF9NT0RFX0dQSU9fT1VUX0hJR0gJKDB4MzApCisKKyNkZWZpbmUgTVBDNTJ4eF9HUFRfTU9ERV9JUlFfRU4JCSgweDAxMDApCisKKyNkZWZpbmUgTVBDNTJ4eF9HUFRfTU9ERV9JQ1RfTUFTSwkoMHgwMzAwMDApCisjZGVmaW5lIE1QQzUyeHhfR1BUX01PREVfSUNUX1JJU0lORwkoMHgwMTAwMDApCisjZGVmaW5lIE1QQzUyeHhfR1BUX01PREVfSUNUX0ZBTExJTkcJKDB4MDIwMDAwKQorI2RlZmluZSBNUEM1Mnh4X0dQVF9NT0RFX0lDVF9UT0dHTEUJKDB4MDMwMDAwKQorCisjZGVmaW5lIE1QQzUyeHhfR1BUX1NUQVRVU19JUlFNQVNLCSgweDAwMGYpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogQ2FzY2FkZWQgaW50ZXJydXB0IGNvbnRyb2xsZXIgaG9va3MKKyAqLworCitzdGF0aWMgdm9pZCBtcGM1Mnh4X2dwdF9pcnFfdW5tYXNrKHVuc2lnbmVkIGludCB2aXJxKQoreworCXN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQgPSBnZXRfaXJxX2NoaXBfZGF0YSh2aXJxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwdC0+bG9jaywgZmxhZ3MpOworCXNldGJpdHMzMigmZ3B0LT5yZWdzLT5tb2RlLCBNUEM1Mnh4X0dQVF9NT0RFX0lSUV9FTik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3B0LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG1wYzUyeHhfZ3B0X2lycV9tYXNrKHVuc2lnbmVkIGludCB2aXJxKQoreworCXN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQgPSBnZXRfaXJxX2NoaXBfZGF0YSh2aXJxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmdwdC0+bG9jaywgZmxhZ3MpOworCWNscmJpdHMzMigmZ3B0LT5yZWdzLT5tb2RlLCBNUEM1Mnh4X0dQVF9NT0RFX0lSUV9FTik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3B0LT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIG1wYzUyeHhfZ3B0X2lycV9hY2sodW5zaWduZWQgaW50IHZpcnEpCit7CisJc3RydWN0IG1wYzUyeHhfZ3B0X3ByaXYgKmdwdCA9IGdldF9pcnFfY2hpcF9kYXRhKHZpcnEpOworCisJb3V0X2JlMzIoJmdwdC0+cmVncy0+c3RhdHVzLCBNUEM1Mnh4X0dQVF9TVEFUVVNfSVJRTUFTSyk7Cit9CisKK3N0YXRpYyBpbnQgbXBjNTJ4eF9ncHRfaXJxX3NldF90eXBlKHVuc2lnbmVkIGludCB2aXJxLCB1bnNpZ25lZCBpbnQgZmxvd190eXBlKQoreworCXN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQgPSBnZXRfaXJxX2NoaXBfZGF0YSh2aXJxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiByZWc7CisKKwlkZXZfZGJnKGdwdC0+ZGV2LCAiJXM6IHZpcnE9JWkgdHlwZT0leFxuIiwgX19mdW5jX18sIHZpcnEsIGZsb3dfdHlwZSk7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZ3B0LT5sb2NrLCBmbGFncyk7CisJcmVnID0gaW5fYmUzMigmZ3B0LT5yZWdzLT5tb2RlKSAmIH5NUEM1Mnh4X0dQVF9NT0RFX0lDVF9NQVNLOworCWlmIChmbG93X3R5cGUgJiBJUlFGX1RSSUdHRVJfUklTSU5HKQorCQlyZWcgfD0gTVBDNTJ4eF9HUFRfTU9ERV9JQ1RfUklTSU5HOworCWlmIChmbG93X3R5cGUgJiBJUlFGX1RSSUdHRVJfRkFMTElORykKKwkJcmVnIHw9IE1QQzUyeHhfR1BUX01PREVfSUNUX0ZBTExJTkc7CisJb3V0X2JlMzIoJmdwdC0+cmVncy0+bW9kZSwgcmVnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZncHQtPmxvY2ssIGZsYWdzKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IGlycV9jaGlwIG1wYzUyeHhfZ3B0X2lycV9jaGlwID0geworCS50eXBlbmFtZSA9ICJNUEM1Mnh4IEdQVCIsCisJLnVubWFzayA9IG1wYzUyeHhfZ3B0X2lycV91bm1hc2ssCisJLm1hc2sgPSBtcGM1Mnh4X2dwdF9pcnFfbWFzaywKKwkuYWNrID0gbXBjNTJ4eF9ncHRfaXJxX2FjaywKKwkuc2V0X3R5cGUgPSBtcGM1Mnh4X2dwdF9pcnFfc2V0X3R5cGUsCit9OworCit2b2lkIG1wYzUyeHhfZ3B0X2lycV9jYXNjYWRlKHVuc2lnbmVkIGludCB2aXJxLCBzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MpCit7CisJc3RydWN0IG1wYzUyeHhfZ3B0X3ByaXYgKmdwdCA9IGdldF9pcnFfZGF0YSh2aXJxKTsKKwlpbnQgc3ViX3ZpcnE7CisJdTMyIHN0YXR1czsKKworCXN0YXR1cyA9IGluX2JlMzIoJmdwdC0+cmVncy0+c3RhdHVzKSAmIE1QQzUyeHhfR1BUX1NUQVRVU19JUlFNQVNLOworCWlmIChzdGF0dXMpIHsKKwkJc3ViX3ZpcnEgPSBpcnFfbGluZWFyX3Jldm1hcChncHQtPmlycWhvc3QsIDApOworCQlnZW5lcmljX2hhbmRsZV9pcnEoc3ViX3ZpcnEpOworCX0KK30KKworc3RhdGljIGludCBtcGM1Mnh4X2dwdF9pcnFfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCisJCQkgICAgICAgaXJxX2h3X251bWJlcl90IGh3KQoreworCXN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQgPSBoLT5ob3N0X2RhdGE7CisKKwlkZXZfZGJnKGdwdC0+ZGV2LCAiJXM6IGg9JXAsIHZpcnE9JWlcbiIsIF9fZnVuY19fLCBoLCB2aXJxKTsKKwlzZXRfaXJxX2NoaXBfZGF0YSh2aXJxLCBncHQpOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCAmbXBjNTJ4eF9ncHRfaXJxX2NoaXAsIGhhbmRsZV9lZGdlX2lycSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcGM1Mnh4X2dwdF9pcnFfeGxhdGUoc3RydWN0IGlycV9ob3N0ICpoLCBzdHJ1Y3QgZGV2aWNlX25vZGUgKmN0LAorCQkJCSB1MzIgKmludHNwZWMsIHVuc2lnbmVkIGludCBpbnRzaXplLAorCQkJCSBpcnFfaHdfbnVtYmVyX3QgKm91dF9od2lycSwKKwkJCQkgdW5zaWduZWQgaW50ICpvdXRfZmxhZ3MpCit7CisJc3RydWN0IG1wYzUyeHhfZ3B0X3ByaXYgKmdwdCA9IGgtPmhvc3RfZGF0YTsKKworCWRldl9kYmcoZ3B0LT5kZXYsICIlczogZmxhZ3M9JWlcbiIsIF9fZnVuY19fLCBpbnRzcGVjWzBdKTsKKworCWlmICgoaW50c2l6ZSA8IDEpIHx8IChpbnRzcGVjWzBdIDwgMSkgfHwgKGludHNwZWNbMF0gPiAzKSkgeworCQlkZXZfZXJyKGdwdC0+ZGV2LCAiYmFkIGlycSBzcGVjaWZpZXIgaW4gJXNcbiIsIGN0LT5mdWxsX25hbWUpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkqb3V0X2h3aXJxID0gMDsgLyogVGhlIEdQVCBvbmx5IGhhcyAxIElSUSBsaW5lICovCisJKm91dF9mbGFncyA9IGludHNwZWNbMF07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBpcnFfaG9zdF9vcHMgbXBjNTJ4eF9ncHRfaXJxX29wcyA9IHsKKwkubWFwID0gbXBjNTJ4eF9ncHRfaXJxX21hcCwKKwkueGxhdGUgPSBtcGM1Mnh4X2dwdF9pcnFfeGxhdGUsCit9OworCitzdGF0aWMgdm9pZAorbXBjNTJ4eF9ncHRfaXJxX3NldHVwKHN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKK3sKKwlpbnQgY2FzY2FkZV92aXJxOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKiBPbmx5IHNldHVwIGNhc2NhZGVkIElSUSBpZiBkZXZpY2UgdHJlZSBjbGFpbXMgdGhlIEdQVCBpcworCSAqIGFuIGludGVycnVwdCBjb250cm9sbGVyICovCisJaWYgKCFvZl9maW5kX3Byb3BlcnR5KG5vZGUsICJpbnRlcnJ1cHQtY29udHJvbGxlciIsIE5VTEwpKQorCQlyZXR1cm47CisKKwljYXNjYWRlX3ZpcnEgPSBpcnFfb2ZfcGFyc2VfYW5kX21hcChub2RlLCAwKTsKKworCWdwdC0+aXJxaG9zdCA9IGlycV9hbGxvY19ob3N0KG5vZGUsIElSUV9IT1NUX01BUF9MSU5FQVIsIDEsCisJCQkJICAgICAgJm1wYzUyeHhfZ3B0X2lycV9vcHMsIC0xKTsKKwlpZiAoIWdwdC0+aXJxaG9zdCkgeworCQlkZXZfZXJyKGdwdC0+ZGV2LCAiaXJxX2FsbG9jX2hvc3QoKSBmYWlsZWRcbiIpOworCQlyZXR1cm47CisJfQorCisJZ3B0LT5pcnFob3N0LT5ob3N0X2RhdGEgPSBncHQ7CisKKwlzZXRfaXJxX2RhdGEoY2FzY2FkZV92aXJxLCBncHQpOworCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGNhc2NhZGVfdmlycSwgbXBjNTJ4eF9ncHRfaXJxX2Nhc2NhZGUpOworCisJLyogU2V0IHRvIElucHV0IENhcHR1cmUgbW9kZSAqLworCXNwaW5fbG9ja19pcnFzYXZlKCZncHQtPmxvY2ssIGZsYWdzKTsKKwljbHJzZXRiaXRzX2JlMzIoJmdwdC0+cmVncy0+bW9kZSwgTVBDNTJ4eF9HUFRfTU9ERV9NU19NQVNLLAorCQkJTVBDNTJ4eF9HUFRfTU9ERV9NU19JQyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZ3B0LT5sb2NrLCBmbGFncyk7CisKKwlkZXZfZGJnKGdwdC0+ZGV2LCAiJXMoKSBjb21wbGV0ZS4gdmlycT0laVxuIiwgX19mdW5jX18sIGNhc2NhZGVfdmlycSk7Cit9CisKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBHUElPTElCIGhvb2tzCisgKi8KKyNpZiBkZWZpbmVkKENPTkZJR19HUElPTElCKQorc3RhdGljIGlubGluZSBzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqZ2NfdG9fbXBjNTJ4eF9ncHQoc3RydWN0IGdwaW9fY2hpcCAqZ2MpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih0b19vZl9ncGlvX2NoaXAoZ2MpLCBzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdixvZl9nYyk7Cit9CisKK3N0YXRpYyBpbnQgbXBjNTJ4eF9ncHRfZ3Bpb19nZXQoc3RydWN0IGdwaW9fY2hpcCAqZ2MsIHVuc2lnbmVkIGludCBncGlvKQoreworCXN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQgPSBnY190b19tcGM1Mnh4X2dwdChnYyk7CisKKwlyZXR1cm4gKGluX2JlMzIoJmdwdC0+cmVncy0+c3RhdHVzKSA+PiA4KSAmIDE7Cit9CisKK3N0YXRpYyB2b2lkCittcGM1Mnh4X2dwdF9ncGlvX3NldChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8sIGludCB2KQoreworCXN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQgPSBnY190b19tcGM1Mnh4X2dwdChnYyk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1MzIgcjsKKworCWRldl9kYmcoZ3B0LT5kZXYsICIlczogZ3BpbzolZCB2OiVkXG4iLCBfX2Z1bmNfXywgZ3Bpbywgdik7CisJciA9IHYgPyBNUEM1Mnh4X0dQVF9NT0RFX0dQSU9fT1VUX0hJR0ggOiBNUEM1Mnh4X0dQVF9NT0RFX0dQSU9fT1VUX0xPVzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZncHQtPmxvY2ssIGZsYWdzKTsKKwljbHJzZXRiaXRzX2JlMzIoJmdwdC0+cmVncy0+bW9kZSwgTVBDNTJ4eF9HUFRfTU9ERV9HUElPX01BU0ssIHIpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwdC0+bG9jaywgZmxhZ3MpOworfQorCitzdGF0aWMgaW50IG1wYzUyeHhfZ3B0X2dwaW9fZGlyX2luKHN0cnVjdCBncGlvX2NoaXAgKmdjLCB1bnNpZ25lZCBpbnQgZ3BpbykKK3sKKwlzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqZ3B0ID0gZ2NfdG9fbXBjNTJ4eF9ncHQoZ2MpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkZXZfZGJnKGdwdC0+ZGV2LCAiJXM6IGdwaW86JWRcbiIsIF9fZnVuY19fLCBncGlvKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZncHQtPmxvY2ssIGZsYWdzKTsKKwljbHJiaXRzMzIoJmdwdC0+cmVncy0+bW9kZSwgTVBDNTJ4eF9HUFRfTU9ERV9HUElPX01BU0spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmdwdC0+bG9jaywgZmxhZ3MpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQKK21wYzUyeHhfZ3B0X2dwaW9fZGlyX291dChzdHJ1Y3QgZ3Bpb19jaGlwICpnYywgdW5zaWduZWQgaW50IGdwaW8sIGludCB2YWwpCit7CisJbXBjNTJ4eF9ncHRfZ3Bpb19zZXQoZ2MsIGdwaW8sIHZhbCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkCittcGM1Mnh4X2dwdF9ncGlvX3NldHVwKHN0cnVjdCBtcGM1Mnh4X2dwdF9wcml2ICpncHQsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqbm9kZSkKK3sKKwlpbnQgcmM7CisKKwkvKiBPbmx5IHNldHVwIEdQSU8gaWYgdGhlIGRldmljZSB0cmVlIGNsYWltcyB0aGUgR1BUIGlzCisJICogYSBHUElPIGNvbnRyb2xsZXIgKi8KKwlpZiAoIW9mX2ZpbmRfcHJvcGVydHkobm9kZSwgImdwaW8tY29udHJvbGxlciIsIE5VTEwpKQorCQlyZXR1cm47CisKKwlncHQtPm9mX2djLmdjLmxhYmVsID0ga3N0cmR1cChub2RlLT5mdWxsX25hbWUsIEdGUF9LRVJORUwpOworCWlmICghZ3B0LT5vZl9nYy5nYy5sYWJlbCkgeworCQlkZXZfZXJyKGdwdC0+ZGV2LCAib3V0IG9mIG1lbW9yeVxuIik7CisJCXJldHVybjsKKwl9CisKKwlncHQtPm9mX2djLmdwaW9fY2VsbHMgPSAyOworCWdwdC0+b2ZfZ2MuZ2MubmdwaW8gPSAxOworCWdwdC0+b2ZfZ2MuZ2MuZGlyZWN0aW9uX2lucHV0ICA9IG1wYzUyeHhfZ3B0X2dwaW9fZGlyX2luOworCWdwdC0+b2ZfZ2MuZ2MuZGlyZWN0aW9uX291dHB1dCA9IG1wYzUyeHhfZ3B0X2dwaW9fZGlyX291dDsKKwlncHQtPm9mX2djLmdjLmdldCA9IG1wYzUyeHhfZ3B0X2dwaW9fZ2V0OworCWdwdC0+b2ZfZ2MuZ2Muc2V0ID0gbXBjNTJ4eF9ncHRfZ3Bpb19zZXQ7CisJZ3B0LT5vZl9nYy5nYy5iYXNlID0gLTE7CisJZ3B0LT5vZl9nYy54bGF0ZSA9IG9mX2dwaW9fc2ltcGxlX3hsYXRlOworCW5vZGUtPmRhdGEgPSAmZ3B0LT5vZl9nYzsKKwlvZl9ub2RlX2dldChub2RlKTsKKworCS8qIFNldHVwIGV4dGVybmFsIHBpbiBpbiBHUElPIG1vZGUgKi8KKwljbHJzZXRiaXRzX2JlMzIoJmdwdC0+cmVncy0+bW9kZSwgTVBDNTJ4eF9HUFRfTU9ERV9NU19NQVNLLAorCQkJTVBDNTJ4eF9HUFRfTU9ERV9NU19HUElPKTsKKworCXJjID0gZ3Bpb2NoaXBfYWRkKCZncHQtPm9mX2djLmdjKTsKKwlpZiAocmMpCisJCWRldl9lcnIoZ3B0LT5kZXYsICJncGlvY2hpcF9hZGQoKSBmYWlsZWQ7IHJjPSVpXG4iLCByYyk7CisKKwlkZXZfZGJnKGdwdC0+ZGV2LCAiJXMoKSBjb21wbGV0ZS5cbiIsIF9fZnVuY19fKTsKK30KKyNlbHNlIC8qIGRlZmluZWQoQ09ORklHX0dQSU9MSUIpICovCitzdGF0aWMgdm9pZAorbXBjNTJ4eF9ncHRfZ3Bpb19zZXR1cChzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqcCwgc3RydWN0IGRldmljZV9ub2RlICpucCkgeyB9CisjZW5kaWYgLyogZGVmaW5lZChDT05GSUdfR1BJT0xJQikgKi8KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKiBvZl9wbGF0Zm9ybSBidXMgYmluZGluZyBjb2RlCisgKi8KK3N0YXRpYyBpbnQgX19kZXZpbml0IG1wYzUyeHhfZ3B0X3Byb2JlKHN0cnVjdCBvZl9kZXZpY2UgKm9mZGV2LAorCQkJCSAgICAgICBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkICptYXRjaCkKK3sKKwlzdHJ1Y3QgbXBjNTJ4eF9ncHRfcHJpdiAqZ3B0OworCisJZ3B0ID0ga3phbGxvYyhzaXplb2YgKmdwdCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFncHQpCisJCXJldHVybiAtRU5PTUVNOworCisJc3Bpbl9sb2NrX2luaXQoJmdwdC0+bG9jayk7CisJZ3B0LT5kZXYgPSAmb2ZkZXYtPmRldjsKKwlncHQtPnJlZ3MgPSBvZl9pb21hcChvZmRldi0+bm9kZSwgMCk7CisJaWYgKCFncHQtPnJlZ3MpIHsKKwkJa2ZyZWUoZ3B0KTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGV2X3NldF9kcnZkYXRhKCZvZmRldi0+ZGV2LCBncHQpOworCisJbXBjNTJ4eF9ncHRfZ3Bpb19zZXR1cChncHQsIG9mZGV2LT5ub2RlKTsKKwltcGM1Mnh4X2dwdF9pcnFfc2V0dXAoZ3B0LCBvZmRldi0+bm9kZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtcGM1Mnh4X2dwdF9yZW1vdmUoc3RydWN0IG9mX2RldmljZSAqb2ZkZXYpCit7CisJcmV0dXJuIC1FQlVTWTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjNTJ4eF9ncHRfbWF0Y2hbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM1MjAwLWdwdCIsIH0sCisKKwkvKiBEZXByZWNpYXRlZCBjb21wYXRpYmxlIHZhbHVlczsgZG9uJ3QgdXNlIGZvciBuZXcgZHRzIGZpbGVzICovCisJeyAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1ncHQtZ3BpbyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJtcGM1MjAwLWdwdCIsIH0sCisJe30KK307CisKK3N0YXRpYyBzdHJ1Y3Qgb2ZfcGxhdGZvcm1fZHJpdmVyIG1wYzUyeHhfZ3B0X2RyaXZlciA9IHsKKwkubmFtZSA9ICJtcGM1Mnh4LWdwdCIsCisJLm1hdGNoX3RhYmxlID0gbXBjNTJ4eF9ncHRfbWF0Y2gsCisJLnByb2JlID0gbXBjNTJ4eF9ncHRfcHJvYmUsCisJLnJlbW92ZSA9IG1wYzUyeHhfZ3B0X3JlbW92ZSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IG1wYzUyeHhfZ3B0X2luaXQodm9pZCkKK3sKKwlpZiAob2ZfcmVnaXN0ZXJfcGxhdGZvcm1fZHJpdmVyKCZtcGM1Mnh4X2dwdF9kcml2ZXIpKQorCQlwcl9lcnIoImVycm9yIHJlZ2lzdGVyaW5nIE1QQzUyeHggR1BUIGRyaXZlclxuIik7CisKKwlyZXR1cm4gMDsKK30KKworLyogTWFrZSBzdXJlIEdQSU9zIGFuZCBJUlFzIGdldCBzZXQgdXAgYmVmb3JlIGFueW9uZSB0cmllcyB0byB1c2UgdGhlbSAqLworc3Vic3lzX2luaXRjYWxsKG1wYzUyeHhfZ3B0X2luaXQpOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy81Mnh4L21wYzUyeHhfcGljLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9waWMuYwppbmRleCAwYTA5M2YwLi40ODBmODA2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9waWMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzUyeHgvbXBjNTJ4eF9waWMuYwpAQCAtMTYzLDggKzE2Myw2IEBACiAJaXJxID0gaXJxX21hcFt2aXJxXS5od2lycTsKIAlsMmlycSA9IGlycSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CiAKLQlwcl9kZWJ1ZygiJXM6IGlycT0leC4gbDI9JWRcbiIsIF9fZnVuY19fLCBpcnEsIGwyaXJxKTsKLQogCWlvX2JlX2NscmJpdCgmaW50ci0+Y3RybCwgMTEgLSBsMmlycSk7CiB9CiAKQEAgLTE3Niw4ICsxNzQsNiBAQAogCWlycSA9IGlycV9tYXBbdmlycV0uaHdpcnE7CiAJbDJpcnEgPSBpcnEgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCi0JcHJfZGVidWcoIiVzOiBpcnE9JXguIGwyPSVkXG4iLCBfX2Z1bmNfXywgaXJxLCBsMmlycSk7Ci0KIAlpb19iZV9zZXRiaXQoJmludHItPmN0cmwsIDExIC0gbDJpcnEpOwogfQogCkBAIC0xODksMTcgKzE4NSwxNSBAQAogCWlycSA9IGlycV9tYXBbdmlycV0uaHdpcnE7CiAJbDJpcnEgPSBpcnEgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCi0JcHJfZGVidWcoIiVzOiBpcnE9JXguIGwyPSVkXG4iLCBfX2Z1bmNfXywgaXJxLCBsMmlycSk7Ci0KIAlpb19iZV9zZXRiaXQoJmludHItPmN0cmwsIDI3LWwyaXJxKTsKIH0KIAogc3RhdGljIGludCBtcGM1Mnh4X2V4dGlycV9zZXRfdHlwZSh1bnNpZ25lZCBpbnQgdmlycSwgdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKIHsKLQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBnZXRfaXJxX2Rlc2ModmlycSk7CiAJdTMyIGN0cmxfcmVnLCB0eXBlOwogCWludCBpcnE7CiAJaW50IGwyaXJxOworCXZvaWQgKmhhbmRsZXIgPSBoYW5kbGVfbGV2ZWxfaXJxOwogCiAJaXJxID0gaXJxX21hcFt2aXJxXS5od2lycTsKIAlsMmlycSA9IGlycSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CkBAIC0yMDcsMzIgKzIwMSwyMSBAQAogCXByX2RlYnVnKCIlczogaXJxPSV4LiBsMj0lZCBmbG93X3R5cGU9JWRcbiIsIF9fZnVuY19fLCBpcnEsIGwyaXJxLCBmbG93X3R5cGUpOwogCiAJc3dpdGNoIChmbG93X3R5cGUpIHsKLQljYXNlIElSUUZfVFJJR0dFUl9ISUdIOgotCQl0eXBlID0gMDsKLQkJYnJlYWs7Ci0JY2FzZSBJUlFGX1RSSUdHRVJfUklTSU5HOgotCQl0eXBlID0gMTsKLQkJYnJlYWs7Ci0JY2FzZSBJUlFGX1RSSUdHRVJfRkFMTElORzoKLQkJdHlwZSA9IDI7Ci0JCWJyZWFrOwotCWNhc2UgSVJRRl9UUklHR0VSX0xPVzoKLQkJdHlwZSA9IDM7Ci0JCWJyZWFrOworCWNhc2UgSVJRRl9UUklHR0VSX0hJR0g6IHR5cGUgPSAwOyBicmVhazsKKwljYXNlIElSUUZfVFJJR0dFUl9SSVNJTkc6IHR5cGUgPSAxOyBoYW5kbGVyID0gaGFuZGxlX2VkZ2VfaXJxOyBicmVhazsKKwljYXNlIElSUUZfVFJJR0dFUl9GQUxMSU5HOiB0eXBlID0gMjsgaGFuZGxlciA9IGhhbmRsZV9lZGdlX2lycTsgYnJlYWs7CisJY2FzZSBJUlFGX1RSSUdHRVJfTE9XOiB0eXBlID0gMzsgYnJlYWs7CiAJZGVmYXVsdDoKIAkJdHlwZSA9IDA7CiAJfQogCi0JZGVzYy0+c3RhdHVzICY9IH4oSVJRX1RZUEVfU0VOU0VfTUFTSyB8IElSUV9MRVZFTCk7Ci0JZGVzYy0+c3RhdHVzIHw9IGZsb3dfdHlwZSAmIElSUV9UWVBFX1NFTlNFX01BU0s7Ci0JaWYgKGZsb3dfdHlwZSAmIChJUlFfVFlQRV9MRVZFTF9ISUdIIHwgSVJRX1RZUEVfTEVWRUxfTE9XKSkKLQkJZGVzYy0+c3RhdHVzIHw9IElSUV9MRVZFTDsKLQogCWN0cmxfcmVnID0gaW5fYmUzMigmaW50ci0+Y3RybCk7CiAJY3RybF9yZWcgJj0gfigweDMgPDwgKDIyIC0gKGwyaXJxICogMikpKTsKIAljdHJsX3JlZyB8PSAodHlwZSA8PCAoMjIgLSAobDJpcnEgKiAyKSkpOwogCW91dF9iZTMyKCZpbnRyLT5jdHJsLCBjdHJsX3JlZyk7CiAKKwlfX3NldF9pcnFfaGFuZGxlcl91bmxvY2tlZCh2aXJxLCBoYW5kbGVyKTsKKwogCXJldHVybiAwOwogfQogCkBAIC0yNDcsNiArMjMwLDExIEBACiAvKgogICogTWFpbiBpbnRlcnJ1cHQgaXJxX2NoaXAKICAqLworc3RhdGljIGludCBtcGM1Mnh4X251bGxfc2V0X3R5cGUodW5zaWduZWQgaW50IHZpcnEsIHVuc2lnbmVkIGludCBmbG93X3R5cGUpCit7CisJcmV0dXJuIDA7IC8qIERvIG5vdGhpbmcgc28gdGhhdCB0aGUgc2Vuc2UgbWFzayB3aWxsIGdldCB1cGRhdGVkICovCit9CisKIHN0YXRpYyB2b2lkIG1wYzUyeHhfbWFpbl9tYXNrKHVuc2lnbmVkIGludCB2aXJxKQogewogCWludCBpcnE7CkBAIC0yNTUsOCArMjQzLDYgQEAKIAlpcnEgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOwogCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKIAotCXByX2RlYnVnKCIlczogaXJxPSV4LiBsMj0lZFxuIiwgX19mdW5jX18sIGlycSwgbDJpcnEpOwotCiAJaW9fYmVfc2V0Yml0KCZpbnRyLT5tYWluX21hc2ssIDE2IC0gbDJpcnEpOwogfQogCkBAIC0yNjgsOCArMjU0LDYgQEAKIAlpcnEgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOwogCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKIAotCXByX2RlYnVnKCIlczogaXJxPSV4LiBsMj0lZFxuIiwgX19mdW5jX18sIGlycSwgbDJpcnEpOwotCiAJaW9fYmVfY2xyYml0KCZpbnRyLT5tYWluX21hc2ssIDE2IC0gbDJpcnEpOwogfQogCkBAIC0yNzgsNiArMjYyLDcgQEAKIAkubWFzayA9IG1wYzUyeHhfbWFpbl9tYXNrLAogCS5tYXNrX2FjayA9IG1wYzUyeHhfbWFpbl9tYXNrLAogCS51bm1hc2sgPSBtcGM1Mnh4X21haW5fdW5tYXNrLAorCS5zZXRfdHlwZSA9IG1wYzUyeHhfbnVsbF9zZXRfdHlwZSwKIH07CiAKIC8qCkBAIC0yOTEsOCArMjc2LDYgQEAKIAlpcnEgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOwogCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKIAotCXByX2RlYnVnKCIlczogaXJxPSV4LiBsMj0lZFxuIiwgX19mdW5jX18sIGlycSwgbDJpcnEpOwotCiAJaW9fYmVfc2V0Yml0KCZpbnRyLT5wZXJfbWFzaywgMzEgLSBsMmlycSk7CiB9CiAKQEAgLTMwNCw4ICsyODcsNiBAQAogCWlycSA9IGlycV9tYXBbdmlycV0uaHdpcnE7CiAJbDJpcnEgPSBpcnEgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCi0JcHJfZGVidWcoIiVzOiBpcnE9JXguIGwyPSVkXG4iLCBfX2Z1bmNfXywgaXJxLCBsMmlycSk7Ci0KIAlpb19iZV9jbHJiaXQoJmludHItPnBlcl9tYXNrLCAzMSAtIGwyaXJxKTsKIH0KIApAQCAtMzE0LDYgKzI5NSw3IEBACiAJLm1hc2sgPSBtcGM1Mnh4X3BlcmlwaF9tYXNrLAogCS5tYXNrX2FjayA9IG1wYzUyeHhfcGVyaXBoX21hc2ssCiAJLnVubWFzayA9IG1wYzUyeHhfcGVyaXBoX3VubWFzaywKKwkuc2V0X3R5cGUgPSBtcGM1Mnh4X251bGxfc2V0X3R5cGUsCiB9OwogCiAvKgpAQCAtMzI3LDggKzMwOSw2IEBACiAJaXJxID0gaXJxX21hcFt2aXJxXS5od2lycTsKIAlsMmlycSA9IGlycSAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CiAKLQlwcl9kZWJ1ZygiJXM6IGlycT0leC4gbDI9JWRcbiIsIF9fZnVuY19fLCBpcnEsIGwyaXJxKTsKLQogCWlvX2JlX3NldGJpdCgmc2RtYS0+SW50TWFzaywgbDJpcnEpOwogfQogCkBAIC0zNDAsOCArMzIwLDYgQEAKIAlpcnEgPSBpcnFfbWFwW3ZpcnFdLmh3aXJxOwogCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKIAotCXByX2RlYnVnKCIlczogaXJxPSV4LiBsMj0lZFxuIiwgX19mdW5jX18sIGlycSwgbDJpcnEpOwotCiAJaW9fYmVfY2xyYml0KCZzZG1hLT5JbnRNYXNrLCBsMmlycSk7CiB9CiAKQEAgLTM1Myw4ICszMzEsNiBAQAogCWlycSA9IGlycV9tYXBbdmlycV0uaHdpcnE7CiAJbDJpcnEgPSBpcnEgJiBNUEM1Mnh4X0lSUV9MMl9NQVNLOwogCi0JcHJfZGVidWcoIiVzOiBpcnE9JXguIGwyPSVkXG4iLCBfX2Z1bmNfXywgaXJxLCBsMmlycSk7Ci0KIAlvdXRfYmUzMigmc2RtYS0+SW50UGVuZCwgMSA8PCBsMmlycSk7CiB9CiAKQEAgLTM2Myw5ICszMzksMTkgQEAKIAkubWFzayA9IG1wYzUyeHhfc2RtYV9tYXNrLAogCS51bm1hc2sgPSBtcGM1Mnh4X3NkbWFfdW5tYXNrLAogCS5hY2sgPSBtcGM1Mnh4X3NkbWFfYWNrLAorCS5zZXRfdHlwZSA9IG1wYzUyeHhfbnVsbF9zZXRfdHlwZSwKIH07CiAKIC8qKgorICogbXBjNTJ4eF9pc19leHRpcnEgLSBSZXR1cm5zIHRydWUgaWYgaHdpcnEgbnVtYmVyIGlzIGZvciBhbiBleHRlcm5hbCBJUlEKKyAqLworc3RhdGljIGludCBtcGM1Mnh4X2lzX2V4dGlycShpbnQgbDEsIGludCBsMikKK3sKKwlyZXR1cm4gKChsMSA9PSAwKSAmJiAobDIgPT0gMCkpIHx8CisJICAgICAgICgobDEgPT0gMSkgJiYgKGwyID49IDEpICYmIChsMiA8PSAzKSk7Cit9CisKKy8qKgogICogbXBjNTJ4eF9pcnFob3N0X3hsYXRlIC0gdHJhbnNsYXRlIHZpcnEjIGZyb20gZGV2aWNlIHRyZWUgaW50ZXJydXB0cyBwcm9wZXJ0eQogICovCiBzdGF0aWMgaW50IG1wYzUyeHhfaXJxaG9zdF94bGF0ZShzdHJ1Y3QgaXJxX2hvc3QgKmgsIHN0cnVjdCBkZXZpY2Vfbm9kZSAqY3QsCkBAIC0zODMsMzggKzM2OSwyMyBAQAogCiAJaW50cnZlY3RfbDEgPSAoaW50KWludHNwZWNbMF07CiAJaW50cnZlY3RfbDIgPSAoaW50KWludHNwZWNbMV07Ci0JaW50cnZlY3RfdHlwZSA9IChpbnQpaW50c3BlY1syXTsKKwlpbnRydmVjdF90eXBlID0gKGludClpbnRzcGVjWzJdICYgMHgzOwogCiAJaW50cnZlY3RfbGludXggPSAoaW50cnZlY3RfbDEgPDwgTVBDNTJ4eF9JUlFfTDFfT0ZGU0VUKSAmCiAJCQkgTVBDNTJ4eF9JUlFfTDFfTUFTSzsKIAlpbnRydmVjdF9saW51eCB8PSBpbnRydmVjdF9sMiAmIE1QQzUyeHhfSVJRX0wyX01BU0s7CiAKKwkqb3V0X2h3aXJxID0gaW50cnZlY3RfbGludXg7CisJKm91dF9mbGFncyA9IElSUV9UWVBFX0xFVkVMX0xPVzsKKwlpZiAobXBjNTJ4eF9pc19leHRpcnEoaW50cnZlY3RfbDEsIGludHJ2ZWN0X2wyKSkKKwkJKm91dF9mbGFncyA9IG1wYzUyeHhfbWFwX3NlbnNlc1tpbnRydmVjdF90eXBlXTsKKwogCXByX2RlYnVnKCJyZXR1cm4gJXgsIGwxPSVkLCBsMj0lZFxuIiwgaW50cnZlY3RfbGludXgsIGludHJ2ZWN0X2wxLAogCQkgaW50cnZlY3RfbDIpOwotCi0JKm91dF9od2lycSA9IGludHJ2ZWN0X2xpbnV4OwotCSpvdXRfZmxhZ3MgPSBtcGM1Mnh4X21hcF9zZW5zZXNbaW50cnZlY3RfdHlwZV07Ci0KIAlyZXR1cm4gMDsKIH0KIAogLyoqCi0gKiBtcGM1Mnh4X2lycXhfZ2V0dHlwZSAtIGRldGVybWluZSB0aGUgSVJRIHNlbnNlIHR5cGUgKGxldmVsL2VkZ2UpCi0gKgotICogT25seSBleHRlcm5hbCBJUlFzIG5lZWQgdGhpcy4KLSAqLwotc3RhdGljIGludCBtcGM1Mnh4X2lycXhfZ2V0dHlwZShpbnQgaXJxKQotewotCWludCB0eXBlOwotCXUzMiBjdHJsX3JlZzsKLQotCWN0cmxfcmVnID0gaW5fYmUzMigmaW50ci0+Y3RybCk7Ci0JdHlwZSA9IChjdHJsX3JlZyA+PiAoMjIgLSBpcnEgKiAyKSkgJiAweDM7Ci0KLQlyZXR1cm4gbXBjNTJ4eF9tYXBfc2Vuc2VzW3R5cGVdOwotfQotCi0vKioKICAqIG1wYzUyeHhfaXJxaG9zdF9tYXAgLSBIb29rIHRvIG1hcCBmcm9tIHZpcnEgdG8gYW4gaXJxX2NoaXAgc3RydWN0dXJlCiAgKi8KIHN0YXRpYyBpbnQgbXBjNTJ4eF9pcnFob3N0X21hcChzdHJ1Y3QgaXJxX2hvc3QgKmgsIHVuc2lnbmVkIGludCB2aXJxLApAQCAtNDIyLDY4ICszOTMsNDYgQEAKIHsKIAlpbnQgbDFpcnE7CiAJaW50IGwyaXJxOwotCXN0cnVjdCBpcnFfY2hpcCAqZ29vZF9pcnFjaGlwOwotCXZvaWQgKmdvb2RfaGFuZGxlOworCXN0cnVjdCBpcnFfY2hpcCAqaXJxY2hpcDsKKwl2b2lkICpobmRscjsKIAlpbnQgdHlwZTsKKwl1MzIgcmVnOwogCiAJbDFpcnEgPSAoaXJxICYgTVBDNTJ4eF9JUlFfTDFfTUFTSykgPj4gTVBDNTJ4eF9JUlFfTDFfT0ZGU0VUOwogCWwyaXJxID0gaXJxICYgTVBDNTJ4eF9JUlFfTDJfTUFTSzsKIAogCS8qCi0JICogTW9zdCBvZiBvdXJzIElSUXMgd2lsbCBiZSBsZXZlbCBsb3cKLQkgKiBPbmx5IGV4dGVybmFsIElSUXMgb24gc29tZSBwbGF0Zm9ybSBtYXkgYmUgb3RoZXJzCisJICogRXh0ZXJuYWwgSVJRcyBhcmUgaGFuZGxlZCBkaWZmZXJlbnRseSBieSB0aGUgaGFyZHdhcmUgc28gdGhleSBhcmUKKwkgKiBoYW5kbGVkIGJ5IGEgZGVkaWNhdGVkIGlycV9jaGlwIHN0cnVjdHVyZS4KIAkgKi8KLQl0eXBlID0gSVJRX1RZUEVfTEVWRUxfTE9XOworCWlmIChtcGM1Mnh4X2lzX2V4dGlycShsMWlycSwgbDJpcnEpKSB7CisJCXJlZyA9IGluX2JlMzIoJmludHItPmN0cmwpOworCQl0eXBlID0gbXBjNTJ4eF9tYXBfc2Vuc2VzWyhyZWcgPj4gKDIyIC0gbDJpcnEgKiAyKSkgJiAweDNdOworCQlpZiAoKHR5cGUgPT0gSVJRX1RZUEVfRURHRV9GQUxMSU5HKSB8fAorCQkgICAgKHR5cGUgPT0gSVJRX1RZUEVfRURHRV9SSVNJTkcpKQorCQkJaG5kbHIgPSBoYW5kbGVfZWRnZV9pcnE7CisJCWVsc2UKKwkJCWhuZGxyID0gaGFuZGxlX2xldmVsX2lycTsKIAorCQlzZXRfaXJxX2NoaXBfYW5kX2hhbmRsZXIodmlycSwgJm1wYzUyeHhfZXh0aXJxX2lycWNoaXAsIGhuZGxyKTsKKwkJcHJfZGVidWcoIiVzOiBFeHRlcm5hbCBJUlElaSB2aXJxPSV4LCBodz0leC4gdHlwZT0leFxuIiwKKwkJCSBfX2Z1bmNfXywgbDJpcnEsIHZpcnEsIChpbnQpaXJxLCB0eXBlKTsKKwkJcmV0dXJuIDA7CisJfQorCisJLyogSXQgaXMgYW4gaW50ZXJuYWwgU09DIGlycS4gIENob29zZSB0aGUgY29ycmVjdCBpcnFfY2hpcCAqLwogCXN3aXRjaCAobDFpcnEpIHsKLQljYXNlIE1QQzUyeHhfSVJRX0wxX0NSSVQ6Ci0JCXByX2RlYnVnKCIlczogQ3JpdGljYWwuIGwyPSV4XG4iLCBfX2Z1bmNfXywgbDJpcnEpOwotCi0JCUJVR19PTihsMmlycSAhPSAwKTsKLQotCQl0eXBlID0gbXBjNTJ4eF9pcnF4X2dldHR5cGUobDJpcnEpOwotCQlnb29kX2lycWNoaXAgPSAmbXBjNTJ4eF9leHRpcnFfaXJxY2hpcDsKLQkJYnJlYWs7Ci0KLQljYXNlIE1QQzUyeHhfSVJRX0wxX01BSU46Ci0JCXByX2RlYnVnKCIlczogTWFpbiBJUlFbMS0zXSBsMj0leFxuIiwgX19mdW5jX18sIGwyaXJxKTsKLQotCQlpZiAoKGwyaXJxID49IDEpICYmIChsMmlycSA8PSAzKSkgewotCQkJdHlwZSA9IG1wYzUyeHhfaXJxeF9nZXR0eXBlKGwyaXJxKTsKLQkJCWdvb2RfaXJxY2hpcCA9ICZtcGM1Mnh4X2V4dGlycV9pcnFjaGlwOwotCQl9IGVsc2UgewotCQkJZ29vZF9pcnFjaGlwID0gJm1wYzUyeHhfbWFpbl9pcnFjaGlwOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBNUEM1Mnh4X0lSUV9MMV9QRVJQOgotCQlwcl9kZWJ1ZygiJXM6IFBlcmlwaGVyYWxzLiBsMj0leFxuIiwgX19mdW5jX18sIGwyaXJxKTsKLQkJZ29vZF9pcnFjaGlwID0gJm1wYzUyeHhfcGVyaXBoX2lycWNoaXA7Ci0JCWJyZWFrOwotCi0JY2FzZSBNUEM1Mnh4X0lSUV9MMV9TRE1BOgotCQlwcl9kZWJ1ZygiJXM6IFNETUEuIGwyPSV4XG4iLCBfX2Z1bmNfXywgbDJpcnEpOwotCQlnb29kX2lycWNoaXAgPSAmbXBjNTJ4eF9zZG1hX2lycWNoaXA7Ci0JCWJyZWFrOwotCisJY2FzZSBNUEM1Mnh4X0lSUV9MMV9NQUlOOiBpcnFjaGlwID0gJm1wYzUyeHhfbWFpbl9pcnFjaGlwOyBicmVhazsKKwljYXNlIE1QQzUyeHhfSVJRX0wxX1BFUlA6IGlycWNoaXAgPSAmbXBjNTJ4eF9wZXJpcGhfaXJxY2hpcDsgYnJlYWs7CisJY2FzZSBNUEM1Mnh4X0lSUV9MMV9TRE1BOiBpcnFjaGlwID0gJm1wYzUyeHhfc2RtYV9pcnFjaGlwOyBicmVhazsKIAlkZWZhdWx0OgotCQlwcl9lcnIoIiVzOiBpbnZhbGlkIHZpcnEgcmVxdWVzdGVkICgweCV4KVxuIiwgX19mdW5jX18sIHZpcnEpOworCQlwcl9lcnIoIiVzOiBpbnZhbGlkIGlycTogdmlycT0laSwgbDE9JWksIGwyPSVpXG4iLAorCQkgICAgICAgX19mdW5jX18sIHZpcnEsIGwxaXJxLCBsMmlycSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXN3aXRjaCAodHlwZSkgewotCWNhc2UgSVJRX1RZUEVfRURHRV9GQUxMSU5HOgotCWNhc2UgSVJRX1RZUEVfRURHRV9SSVNJTkc6Ci0JCWdvb2RfaGFuZGxlID0gaGFuZGxlX2VkZ2VfaXJxOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlnb29kX2hhbmRsZSA9IGhhbmRsZV9sZXZlbF9pcnE7Ci0JfQotCi0Jc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsIGdvb2RfaXJxY2hpcCwgZ29vZF9oYW5kbGUpOwotCi0JcHJfZGVidWcoIiVzOiB2aXJxPSV4LCBodz0leC4gdHlwZT0leFxuIiwgX19mdW5jX18sIHZpcnEsCi0JCSAoaW50KWlycSwgdHlwZSk7CisJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyKHZpcnEsIGlycWNoaXAsIGhhbmRsZV9sZXZlbF9pcnEpOworCXByX2RlYnVnKCIlczogdmlycT0leCwgbDE9JWksIGwyPSVpXG4iLCBfX2Z1bmNfXywgdmlycSwgbDFpcnEsIGwyaXJxKTsKIAogCXJldHVybiAwOwogfQpAQCAtNTIyLDYgKzQ3MSw4IEBACiAJCXBhbmljKF9fRklMRV9fCSI6IGZpbmRfYW5kX21hcCBmYWlsZWQgb24gJ21wYzUyMDAtYmVzdGNvbW0nLiAiCiAJCQkJIkNoZWNrIG5vZGUgISIpOwogCisJcHJfZGVidWcoIk1QQzUyMDAgSVJRIGNvbnRyb2xsZXIgbWFwcGVkIHRvIDB4JXBcbiIsIGludHIpOworCiAJLyogRGlzYWJsZSBhbGwgaW50ZXJydXB0IHNvdXJjZXMuICovCiAJb3V0X2JlMzIoJnNkbWEtPkludFBlbmQsIDB4ZmZmZmZmZmYpOwkvKiAxIG1lYW5zIGNsZWFyIHBlbmRpbmcgKi8KIAlvdXRfYmUzMigmc2RtYS0+SW50TWFzaywgMHhmZmZmZmZmZik7CS8qIDEgbWVhbnMgZGlzYWJsZWQgKi8KQEAgLTYxMyw4ICs1NjQsNSBAQAogCQl9CiAJfQogCi0JcHJfZGVidWcoIiVzOiBpcnE9JXguIHZpcnE9JWRcbiIsIF9fZnVuY19fLCBpcnEsCi0JCSBpcnFfbGluZWFyX3Jldm1hcChtcGM1Mnh4X2lycWhvc3QsIGlycSkpOwotCiAJcmV0dXJuIGlycV9saW5lYXJfcmV2bWFwKG1wYzUyeHhfaXJxaG9zdCwgaXJxKTsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODJ4eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L0tjb25maWcKaW5kZXggMzBmMDA4Yi4uN2M3ZGY0MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Mnh4L0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBtZW51Y29uZmlnIFBQQ184Mnh4CiAJYm9vbCAiODJ4eC1iYXNlZCBib2FyZHMgKFBRIElJKSIKLQlkZXBlbmRzIG9uIDZ4eCAmJiBQUENfTVVMVElQTEFURk9STQorCWRlcGVuZHMgb24gNnh4CiAKIGlmIFBQQ184Mnh4CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L0tjb25maWcKaW5kZXggODNjNjY0YS4uNDM3ZDI5YSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBtZW51Y29uZmlnIFBQQ184M3h4CiAJYm9vbCAiODN4eC1iYXNlZCBib2FyZHMiCi0JZGVwZW5kcyBvbiA2eHggJiYgUFBDX01VTFRJUExBVEZPUk0KKwlkZXBlbmRzIG9uIDZ4eAogCXNlbGVjdCBQUENfVURCR18xNjU1MAogCXNlbGVjdCBQUENfUENJX0NIT0lDRQogCXNlbGVjdCBGU0xfUENJIGlmIFBDSQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L2FzcDgzNHguYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9hc3A4MzR4LmMKaW5kZXggYmIzMGQ2Ny4uYWEwZDg0ZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L2FzcDgzNHguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvYXNwODM0eC5jCkBAIC01OCw2ICs1OCw3IEBACiAJeyAudHlwZSA9ICJzb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODMxeF9yZGIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzF4X3JkYi5jCmluZGV4IDkxYTJjODAuLjBiNGY4ODMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzF4X3JkYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzF4X3JkYi5jCkBAIC0zOCw2ICszOCw4IEBACiAjaWZkZWYgQ09ORklHX1BDSQogCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgInBjaSIsICJmc2wsbXBjODM0OS1wY2kiKQogCQltcGM4M3h4X2FkZF9icmlkZ2UobnApOworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgInBjaSIsICJmc2wsbXBjODMxNC1wY2llIikKKwkJbXBjODN4eF9hZGRfYnJpZGdlKG5wKTsKICNlbmRpZgogCW1wYzgzMXhfdXNiX2NmZygpOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfaXR4LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9pdHguYwppbmRleCA3NjA5MmQzLi44MWU0NGZhIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9pdHguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM0eF9pdHguYwpAQCAtNDIsNiArNDIsNyBAQAogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgX19pbml0ZGF0YSBtcGM4MzR4X2l0eF9pZHNbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImZzbCxwcTJwcm8tbG9jYWxidXMiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKIAl7fSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4MzR4X21kcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfbWRzLmMKaW5kZXggZmMzZjJlZC4uZDBhNjM0YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfbWRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzNHhfbWRzLmMKQEAgLTExMiw2ICsxMTIsNyBAQAogCXsgLnR5cGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNvYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L21wYzgzN3hfbWRzLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM3eF9tZHMuYwppbmRleCA1MzBlZjk5Li41MWRmN2U3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM3eF9tZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM3eF9tZHMuYwpAQCAtODQsMTQgKzg0LDEwIEBACiAJCXBwY19tZC5wcm9ncmVzcygibXBjODM3eF9tZHNfc2V0dXBfYXJjaCgpIiwgMCk7CiAKICNpZmRlZiBDT05GSUdfUENJCi0JZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCAicGNpIiwgImZzbCxtcGM4MzQ5LXBjaSIpIHsKLQkJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5wKSkgewotCQkJcHJfd2FybmluZygiJXM6IGRpc2FibGVkIGJ5IHRoZSBmaXJtd2FyZS5cbiIsCi0JCQkJICAgbnAtPmZ1bGxfbmFtZSk7Ci0JCQljb250aW51ZTsKLQkJfQorCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgInBjaSIsICJmc2wsbXBjODM0OS1wY2kiKQogCQltcGM4M3h4X2FkZF9icmlkZ2UobnApOwotCX0KKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJwY2kiLCAiZnNsLG1wYzgzMTQtcGNpZSIpCisJCW1wYzgzeHhfYWRkX2JyaWRnZShucCk7CiAjZW5kaWYKIAltcGM4Mzd4bWRzX3VzYl9jZmcoKTsKIH0KQEAgLTEwMCw2ICs5Niw3IEBACiAJeyAudHlwZSA9ICJzb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvbXBjODM3eF9yZGIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4Mzd4X3JkYi5jCmluZGV4IDFkMDk2NTQuLjc2ZjNiMzIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4Mzd4X3JkYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9tcGM4Mzd4X3JkYi5jCkBAIC0zOCw2ICszOCw4IEBACiAjaWZkZWYgQ09ORklHX1BDSQogCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgInBjaSIsICJmc2wsbXBjODM0OS1wY2kiKQogCQltcGM4M3h4X2FkZF9icmlkZ2UobnApOworCWZvcl9lYWNoX2NvbXBhdGlibGVfbm9kZShucCwgInBjaSIsICJmc2wsbXBjODMxNC1wY2llIikKKwkJbXBjODN4eF9hZGRfYnJpZGdlKG5wKTsKICNlbmRpZgogCW1wYzgzN3hfdXNiX2NmZygpOwogfQpAQCAtNDYsNiArNDgsNyBAQAogCXsgLnR5cGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNvYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3NiYzgzNHguYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC9zYmM4MzR4LmMKaW5kZXggMTU2YzRlMi4uNDkwMjNkYiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3NiYzgzNHguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvc2JjODM0eC5jCkBAIC04NCw2ICs4NCw3IEBACiAJeyAudHlwZSA9ICJzb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvdXNiLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzgzeHgvdXNiLmMKaW5kZXggY2M5OWMyOC4uMTFlMWZhYyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84M3h4L3VzYi5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODN4eC91c2IuYwpAQCAtMTQsNiArMTQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvb2YuaD4KIAogI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9wcm9tLmg+CkBAIC0yMTAsNyArMjExLDcgQEAKIAlpbnQgcmV0ID0gMDsKIAogCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImZzbC11c2IyLWRyIik7Ci0JaWYgKCFucCkKKwlpZiAoIW5wIHx8ICFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5wKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAJcHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgInBoeV90eXBlIiwgTlVMTCk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L0tjb25maWcKaW5kZXggYjc5ZGM3MS4uN2YwNjZhZCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L0tjb25maWcKQEAgLTUxLDYgKzUxLDEyIEBACiAJaGVscAogCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgTVBDODV4eCBEUyAoTVBDODU0NCBEUykgYm9hcmQKIAorY29uZmlnIFNPQ1JBVEVTCisJYm9vbCAiU29jcmF0ZXMiCisJc2VsZWN0IERFRkFVTFRfVUlNQUdFCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciB0aGUgU29jcmF0ZXMgYm9hcmQuCisKIGNvbmZpZyBLU0k4NTYwCiAgICAgICAgIGJvb2wgIkVtZXJzb24gS1NJODU2MCIKICAgICAgICAgc2VsZWN0IERFRkFVTFRfVUlNQUdFCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvTWFrZWZpbGUKaW5kZXggZjA3OThjMC4uYTg1N2IzNSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9NYWtlZmlsZQpAQCAtMTMsNCArMTMsNSBAQAogb2JqLSQoQ09ORklHX1RRTTg1eHgpCSAgKz0gdHFtODV4eC5vCiBvYmotJChDT05GSUdfU0JDODU2MCkgICAgICs9IHNiYzg1NjAubwogb2JqLSQoQ09ORklHX1NCQzg1NDgpICAgICArPSBzYmM4NTQ4Lm8KK29iai0kKENPTkZJR19TT0NSQVRFUykgICAgKz0gc29jcmF0ZXMubyBzb2NyYXRlc19mcGdhX3BpYy5vCiBvYmotJChDT05GSUdfS1NJODU2MCkJICArPSBrc2k4NTYwLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9rc2k4NTYwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgva3NpODU2MC5jCmluZGV4IDgxY2VlN2IuLmY0ZDM2YjUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9rc2k4NTYwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L2tzaTg1NjAuYwpAQCAtMTA2LDggKzEwNiw2IEBACiAJY3BtMl9waWNfaW5pdChucCk7CiAJb2Zfbm9kZV9wdXQobnApOwogCXNldF9pcnFfY2hhaW5lZF9oYW5kbGVyKGlycSwgY3BtMl9jYXNjYWRlKTsKLQotCXNldHVwX2lycSgwLCBOVUxMKTsKICNlbmRpZgogfQogCkBAIC0yMjEsNiArMjE5LDcgQEAKIAl7IC50eXBlID0gInNpbXBsZS1idXMiLCB9LAogCXsgLm5hbWUgPSAiY3BtIiwgfSwKIAl7IC5uYW1lID0gImxvY2FsYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1MzZfZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NTM2X2RzLmMKaW5kZXggMWJmNWFlZi4uNjNlZmNhMiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1MzZfZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODUzNl9kcy5jCkBAIC05Miw2ICs5Miw3IEBACiAJeyAudHlwZSA9ICJzb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Fkcy5jCmluZGV4IDIxZjAwOTAuLjk0MzhhODkyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9hZHMuYwpAQCAtMjI2LDYgKzIyNiw3IEBACiAJeyAubmFtZSA9ICJjcG0iLCB9LAogCXsgLm5hbWUgPSAibG9jYWxidXMiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKIAl7fSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2Nkcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfY2RzLmMKaW5kZXggYWViNmE1Yi4uMGE5ZTQ5MSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfY2RzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfY2RzLmMKQEAgLTMzNiw2ICszMzYsNyBAQAogCXsgLnR5cGUgPSAic29jIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gInNvYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfZHMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X2RzLmMKaW5kZXggNzMyNmQ5MC4uZGU2NmRlNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfZHMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvbXBjODV4eF9kcy5jCkBAIC0yMDQsNiArMjA0LDcgQEAKIAl7IC50eXBlID0gInNvYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzb2MiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKIAl7fSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9tcGM4NXh4X21kcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfbWRzLmMKaW5kZXggNjU4YTM2Zi4uN2RkMDI5MCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfbWRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L21wYzg1eHhfbWRzLmMKQEAgLTI2NSw2ICsyNjUsNyBAQAogCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCiAJeyAudHlwZSA9ICJxZSIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJmc2wscWUiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCiAJe30sCiB9OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc2JjODU0OC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NDguYwppbmRleCA3ZWM3N2NlLi5lY2RkOGMwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc2JjODU0OC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NTQ4LmMKQEAgLTE1NCw2ICsxNTQsNyBAQAogCXsgLm5hbWUgPSAic29jIiwgfSwKIAl7IC50eXBlID0gInNvYyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NjAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zYmM4NTYwLmMKaW5kZXggNDcyZjI1NC4uY2MyNzgwNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NiYzg1NjAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc2JjODU2MC5jCkBAIC0yMTMsNiArMjEzLDcgQEAKIAl7IC5uYW1lID0gImNwbSIsIH0sCiAJeyAubmFtZSA9ICJsb2NhbGJ1cyIsIH0sCiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NtcC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NtcC5jCmluZGV4IDc5YTBkZjEuLmNjMGIwZGIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zbXAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc21wLmMKQEAgLTIxLDYgKzIxLDcgQEAKICNpbmNsdWRlIDxhc20vcGFnZS5oPgogI2luY2x1ZGUgPGFzbS9tcGljLmg+CiAjaW5jbHVkZSA8YXNtL2NhY2hlZmx1c2guaD4KKyNpbmNsdWRlIDxhc20vZGJlbGwuaD4KIAogI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+CiAKQEAgLTgwLDEwICs4MSw4IEBACiB9CiAKIHN0YXRpYyB2b2lkIF9faW5pdAotc21wXzg1eHhfc2V0dXBfY3B1KGludCBjcHVfbnIpCitzbXBfODV4eF9iYXNpY19zZXR1cChpbnQgY3B1X25yKQogewotCW1waWNfc2V0dXBfdGhpc19jcHUoKTsKLQogCS8qIENsZWFyIGFueSBwZW5kaW5nIHRpbWVyIGludGVycnVwdHMgKi8KIAltdHNwcihTUFJOX1RTUiwgVFNSX0VOVyB8IFRTUl9XSVMgfCBUU1JfRElTIHwgVFNSX0ZJUyk7CiAKQEAgLTkxLDE1ICs5MCw0MyBAQAogCW10c3ByKFNQUk5fVENSLCBUQ1JfRElFKTsKIH0KIAorc3RhdGljIHZvaWQgX19pbml0CitzbXBfODV4eF9zZXR1cF9jcHUoaW50IGNwdV9ucikKK3sKKwltcGljX3NldHVwX3RoaXNfY3B1KCk7CisKKwlzbXBfODV4eF9iYXNpY19zZXR1cChjcHVfbnIpOworfQorCiBzdHJ1Y3Qgc21wX29wc190IHNtcF84NXh4X29wcyA9IHsKLQkubWVzc2FnZV9wYXNzID0gc21wX21waWNfbWVzc2FnZV9wYXNzLAotCS5wcm9iZSA9IHNtcF9tcGljX3Byb2JlLAogCS5raWNrX2NwdSA9IHNtcF84NXh4X2tpY2tfY3B1LAotCS5zZXR1cF9jcHUgPSBzbXBfODV4eF9zZXR1cF9jcHUsCiB9OwogCi12b2lkIF9faW5pdAotbXBjODV4eF9zbXBfaW5pdCh2b2lkKQorc3RhdGljIGludCBfX2luaXQgc21wX2R1bW15X3Byb2JlKHZvaWQpCiB7CisJcmV0dXJuIE5SX0NQVVM7Cit9CisKK3ZvaWQgX19pbml0IG1wYzg1eHhfc21wX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCisJc21wXzg1eHhfb3BzLm1lc3NhZ2VfcGFzcyA9IE5VTEw7CisKKwlucCA9IG9mX2ZpbmRfbm9kZV9ieV90eXBlKE5VTEwsICJvcGVuLXBpYyIpOworCWlmIChucCkgeworCQlzbXBfODV4eF9vcHMucHJvYmUgPSBzbXBfbXBpY19wcm9iZTsKKwkJc21wXzg1eHhfb3BzLnNldHVwX2NwdSA9IHNtcF84NXh4X3NldHVwX2NwdTsKKwkJc21wXzg1eHhfb3BzLm1lc3NhZ2VfcGFzcyA9IHNtcF9tcGljX21lc3NhZ2VfcGFzczsKKwl9IGVsc2UgeworCQlzbXBfODV4eF9vcHMucHJvYmUgPSBzbXBfZHVtbXlfcHJvYmU7CisJCXNtcF84NXh4X29wcy5zZXR1cF9jcHUgPSBzbXBfODV4eF9iYXNpY19zZXR1cDsKKwl9CisKKwlpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfREJFTEwpKQorCQlzbXBfODV4eF9vcHMubWVzc2FnZV9wYXNzID0gc21wX2RiZWxsX21lc3NhZ2VfcGFzczsKKworCUJVR19PTighc21wXzg1eHhfb3BzLm1lc3NhZ2VfcGFzcyk7CisKIAlzbXBfb3BzID0gJnNtcF84NXh4X29wczsKIH0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NvY3JhdGVzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDBlODQ0MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlcy5jCkBAIC0wLDAgKzEsMTMzIEBACisvKgorICogQ29weXJpZ2h0IChjKSAyMDA4IEVtY3JhZnQgU3lzdGVtcworICogU2VyZ2VpIFBvc2VsZW5vdiA8c3Bvc2VsZW5vdkBlbWNyYWZ0LmNvbT4KKyAqCisgKiBCYXNlZCBvbiBNUEM4NTYwIEFEUyBhbmQgYXJjaC9wcGMgdHFtODV4eCBwb3J0cworICoKKyAqIE1haW50YWluZWQgYnkgS3VtYXIgR2FsYSAoc2VlIE1BSU5UQUlORVJTIGZvciBjb250YWN0IGluZm9ybWF0aW9uKQorICoKKyAqIENvcHlyaWdodCAyMDA4IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMDUtMjAwNiBERU5YIFNvZnR3YXJlIEVuZ2luZWVyaW5nCisgKiBTdGVmYW4gUm9lc2UgPHNyQGRlbnguZGU+CisgKgorICogQmFzZWQgb24gb3JpZ2luYWwgd29yayBieQorICogCUt1bWFyIEdhbGEgPGt1bWFyLmdhbGFAZnJlZXNjYWxlLmNvbT4KKyAqICAgICAgQ29weXJpZ2h0IDIwMDQgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSAgaXQgYW5kL29yIG1vZGlmeSBpdAorICogdW5kZXIgIHRoZSB0ZXJtcyBvZiAgdGhlIEdOVSBHZW5lcmFsICBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlCisgKiBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247ICBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSAgTGljZW5zZSwgb3IgKGF0IHlvdXIKKyAqIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgorI2luY2x1ZGUgPGFzbS9tcGljLmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxtbS9tbXVfZGVjbC5oPgorI2luY2x1ZGUgPGFzbS91ZGJnLmg+CisKKyNpbmNsdWRlIDxzeXNkZXYvZnNsX3NvYy5oPgorI2luY2x1ZGUgPHN5c2Rldi9mc2xfcGNpLmg+CisKKyNpbmNsdWRlICJzb2NyYXRlc19mcGdhX3BpYy5oIgorCitzdGF0aWMgdm9pZCBfX2luaXQgc29jcmF0ZXNfcGljX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgbXBpYyAqbXBpYzsKKwlzdHJ1Y3QgcmVzb3VyY2UgcjsKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCisJbnAgPSBvZl9maW5kX25vZGVfYnlfdHlwZShOVUxMLCAib3Blbi1waWMiKTsKKwlpZiAoIW5wKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IGZpbmQgb3Blbi1waWMgbm9kZVxuIik7CisJCXJldHVybjsKKwl9CisKKwlpZiAob2ZfYWRkcmVzc190b19yZXNvdXJjZShucCwgMCwgJnIpKSB7CisJCXByaW50ayhLRVJOX0VSUiAiQ291bGQgbm90IG1hcCBtcGljIHJlZ2lzdGVyIHNwYWNlXG4iKTsKKwkJb2Zfbm9kZV9wdXQobnApOworCQlyZXR1cm47CisJfQorCisJbXBpYyA9IG1waWNfYWxsb2MobnAsIHIuc3RhcnQsCisJCQlNUElDX1BSSU1BUlkgfCBNUElDX1dBTlRTX1JFU0VUIHwgTVBJQ19CSUdfRU5ESUFOLAorCQkJMCwgMjU2LCAiIE9wZW5QSUMgICIpOworCUJVR19PTihtcGljID09IE5VTEwpOworCW9mX25vZGVfcHV0KG5wKTsKKworCW1waWNfaW5pdChtcGljKTsKKworCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImFiYixzb2NyYXRlcy1mcGdhLXBpYyIpOworCWlmICghbnApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJDb3VsZCBub3QgZmluZCBzb2NyYXRlcy1mcGdhLXBpYyBub2RlXG4iKTsKKwkJcmV0dXJuOworCX0KKwlzb2NyYXRlc19mcGdhX3BpY19pbml0KG5wKTsKKwlvZl9ub2RlX3B1dChucCk7Cit9CisKKy8qCisgKiBTZXR1cCB0aGUgYXJjaGl0ZWN0dXJlCisgKi8KK3N0YXRpYyB2b2lkIF9faW5pdCBzb2NyYXRlc19zZXR1cF9hcmNoKHZvaWQpCit7CisjaWZkZWYgQ09ORklHX1BDSQorCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisjZW5kaWYKKworCWlmIChwcGNfbWQucHJvZ3Jlc3MpCisJCXBwY19tZC5wcm9ncmVzcygic29jcmF0ZXNfc2V0dXBfYXJjaCgpIiwgMCk7CisKKyNpZmRlZiBDT05GSUdfUENJCisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCAicGNpIiwgImZzbCxtcGM4NTQwLXBjaSIpCisJCWZzbF9hZGRfYnJpZGdlKG5wLCAxKTsKKyNlbmRpZgorfQorCitzdGF0aWMgc3RydWN0IG9mX2RldmljZV9pZCBfX2luaXRkYXRhIHNvY3JhdGVzX29mX2J1c19pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCisJe30sCit9OworCitzdGF0aWMgdm9pZCBfX2luaXQgc29jcmF0ZXNfaW5pdCh2b2lkKQoreworCW9mX3BsYXRmb3JtX2J1c19wcm9iZShOVUxMLCBzb2NyYXRlc19vZl9idXNfaWRzLCBOVUxMKTsKK30KKworLyoKKyAqIENhbGxlZCB2ZXJ5IGVhcmx5LCBkZXZpY2UtdHJlZSBpc24ndCB1bmZsYXR0ZW5lZAorICovCitzdGF0aWMgaW50IF9faW5pdCBzb2NyYXRlc19wcm9iZSh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgcm9vdCA9IG9mX2dldF9mbGF0X2R0X3Jvb3QoKTsKKworCWlmIChvZl9mbGF0X2R0X2lzX2NvbXBhdGlibGUocm9vdCwgImFiYixzb2NyYXRlcyIpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitkZWZpbmVfbWFjaGluZShzb2NyYXRlcykgeworCS5uYW1lCQkJPSAiU29jcmF0ZXMiLAorCS5wcm9iZQkJCT0gc29jcmF0ZXNfcHJvYmUsCisJLnNldHVwX2FyY2gJCT0gc29jcmF0ZXNfc2V0dXBfYXJjaCwKKwkuaW5pdAkJCT0gc29jcmF0ZXNfaW5pdCwKKwkuaW5pdF9JUlEJCT0gc29jcmF0ZXNfcGljX2luaXQsCisJLmdldF9pcnEJCT0gbXBpY19nZXRfaXJxLAorCS5yZXN0YXJ0CQk9IGZzbF9yc3Rjcl9yZXN0YXJ0LAorCS5jYWxpYnJhdGVfZGVjcgkJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAorCS5wcm9ncmVzcwkJPSB1ZGJnX3Byb2dyZXNzLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NvY3JhdGVzX2ZwZ2FfcGljLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjBlZGY2MwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zb2NyYXRlc19mcGdhX3BpYy5jCkBAIC0wLDAgKzEsMzI3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAwOCBJbHlhIFlhbm9rLCBFbWNyYWZ0IFN5c3RlbXMKKyAqCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgdmVyc2lvbiAyIGFzCisgKiBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KKworLyoKKyAqIFRoZSBGUEdBIHN1cHBvcnRzIDkgaW50ZXJydXB0IHNvdXJjZXMsIHdoaWNoIGNhbiBiZSByb3V0ZWQgdG8gMworICogaW50ZXJydXB0IHJlcXVlc3QgbGluZXMgb2YgdGhlIE1QSUMuIFRoZSBsaW5lIHRvIGJlIHVzZWQgY2FuIGJlCisgKiBzcGVjaWZpZWQgdGhyb3VnaCB0aGUgdGhpcmQgY2VsbCBvZiBGRFQgcHJvcGVydHkgICJpbnRlcnJ1cHRzIi4KKyAqLworCisjZGVmaW5lIFNPQ1JBVEVTX0ZQR0FfTlVNX0lSUVMJOQorCisjZGVmaW5lIEZQR0FfUElDX0lSUUNGRwkJKDB4MCkKKyNkZWZpbmUgRlBHQV9QSUNfSVJRTUFTSyhuKQkoMHg0ICsgMHg0ICogKG4pKQorCisjZGVmaW5lIFNPQ1JBVEVTX0ZQR0FfSVJRX01BU0sJKCgxIDw8IFNPQ1JBVEVTX0ZQR0FfTlVNX0lSUVMpIC0gMSkKKworc3RydWN0IHNvY3JhdGVzX2ZwZ2FfaXJxX2luZm8geworCXVuc2lnbmVkIGludCBpcnFfbGluZTsKKwlpbnQgdHlwZTsKK307CisKKy8qCisgKiBJbnRlcnJ1cHQgcm91dGluZyBhbmQgdHlwZSB0YWJsZQorICoKKyAqIElSUV9UWVBFX05PTkUgbWVhbnMgdGhlIGludGVycnVwdCB0eXBlIGlzIGNvbmZpZ3VyYWJsZSwKKyAqIG90aGVyd2lzZSBpdCdzIGZpeGVkIHRvIHRoZSBzcGVjaWZpZWQgdmFsdWUuCisgKi8KK3N0YXRpYyBzdHJ1Y3Qgc29jcmF0ZXNfZnBnYV9pcnFfaW5mbyBmcGdhX2lycXNbU09DUkFURVNfRlBHQV9OVU1fSVJRU10gPSB7CisJWzBdID0gezAsIElSUV9UWVBFX05PTkV9LAorCVsxXSA9IHswLCBJUlFfVFlQRV9MRVZFTF9ISUdIfSwKKwlbMl0gPSB7MCwgSVJRX1RZUEVfTEVWRUxfTE9XfSwKKwlbM10gPSB7MCwgSVJRX1RZUEVfTk9ORX0sCisJWzRdID0gezAsIElSUV9UWVBFX05PTkV9LAorCVs1XSA9IHswLCBJUlFfVFlQRV9OT05FfSwKKwlbNl0gPSB7MCwgSVJRX1RZUEVfTk9ORX0sCisJWzddID0gezAsIElSUV9UWVBFX05PTkV9LAorCVs4XSA9IHswLCBJUlFfVFlQRV9MRVZFTF9ISUdIfSwKK307CisKKyNkZWZpbmUgc29jcmF0ZXNfZnBnYV9pcnFfdG9faHcodmlycSkgICAgKCh1bnNpZ25lZCBpbnQpaXJxX21hcFt2aXJxXS5od2lycSkKKworc3RhdGljIERFRklORV9TUElOTE9DSyhzb2NyYXRlc19mcGdhX3BpY19sb2NrKTsKKworc3RhdGljIHZvaWQgX19pb21lbSAqc29jcmF0ZXNfZnBnYV9waWNfaW9iYXNlOworc3RhdGljIHN0cnVjdCBpcnFfaG9zdCAqc29jcmF0ZXNfZnBnYV9waWNfaXJxX2hvc3Q7CitzdGF0aWMgdW5zaWduZWQgaW50IHNvY3JhdGVzX2ZwZ2FfaXJxc1szXTsKKworc3RhdGljIGlubGluZSB1aW50MzJfdCBzb2NyYXRlc19mcGdhX3BpY19yZWFkKGludCByZWcpCit7CisJcmV0dXJuIGluX2JlMzIoc29jcmF0ZXNfZnBnYV9waWNfaW9iYXNlICsgcmVnKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHNvY3JhdGVzX2ZwZ2FfcGljX3dyaXRlKGludCByZWcsIHVpbnQzMl90IHZhbCkKK3sKKwlvdXRfYmUzMihzb2NyYXRlc19mcGdhX3BpY19pb2Jhc2UgKyByZWcsIHZhbCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNvY3JhdGVzX2ZwZ2FfcGljX2dldF9pcnEodW5zaWduZWQgaW50IGlycSkKK3sKKwl1aW50MzJfdCBjYXVzZTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCisJLyogQ2hlY2sgaXJxIGxpbmUgcm91dGVkIHRvIHRoZSBNUElDICovCisJZm9yIChpID0gMDsgaSA8IDM7IGkrKykgeworCQlpZiAoaXJxID09IHNvY3JhdGVzX2ZwZ2FfaXJxc1tpXSkKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA9PSAzKQorCQlyZXR1cm4gTk9fSVJROworCisJc3Bpbl9sb2NrX2lycXNhdmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKKwljYXVzZSA9IHNvY3JhdGVzX2ZwZ2FfcGljX3JlYWQoRlBHQV9QSUNfSVJRTUFTSyhpKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOworCWZvciAoaSA9IFNPQ1JBVEVTX0ZQR0FfTlVNX0lSUVMgLSAxOyBpID49IDA7IGktLSkgeworCQlpZiAoY2F1c2UgPj4gKGkgKyAxNikpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIGlycV9saW5lYXJfcmV2bWFwKHNvY3JhdGVzX2ZwZ2FfcGljX2lycV9ob3N0LAorCQkJKGlycV9od19udW1iZXJfdClpKTsKK30KKwordm9pZCBzb2NyYXRlc19mcGdhX3BpY19jYXNjYWRlKHVuc2lnbmVkIGludCBpcnEsIHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwl1bnNpZ25lZCBpbnQgY2FzY2FkZV9pcnE7CisKKwkvKgorCSAqIFNlZSBpZiB3ZSBhY3R1YWxseSBoYXZlIGFuIGludGVycnVwdCwgY2FsbCBnZW5lcmljIGhhbmRsaW5nIGNvZGUgaWYKKwkgKiB3ZSBkby4KKwkgKi8KKwljYXNjYWRlX2lycSA9IHNvY3JhdGVzX2ZwZ2FfcGljX2dldF9pcnEoaXJxKTsKKworCWlmIChjYXNjYWRlX2lycSAhPSBOT19JUlEpCisJCWdlbmVyaWNfaGFuZGxlX2lycShjYXNjYWRlX2lycSk7CisJZGVzYy0+Y2hpcC0+ZW9pKGlycSk7CisKK30KKworc3RhdGljIHZvaWQgc29jcmF0ZXNfZnBnYV9waWNfYWNrKHVuc2lnbmVkIGludCB2aXJxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGh3aXJxLCBpcnFfbGluZTsKKwl1aW50MzJfdCBtYXNrOworCisJaHdpcnEgPSBzb2NyYXRlc19mcGdhX2lycV90b19odyh2aXJxKTsKKworCWlycV9saW5lID0gZnBnYV9pcnFzW2h3aXJxXS5pcnFfbGluZTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOworCW1hc2sgPSBzb2NyYXRlc19mcGdhX3BpY19yZWFkKEZQR0FfUElDX0lSUU1BU0soaXJxX2xpbmUpKQorCQkmIFNPQ1JBVEVTX0ZQR0FfSVJRX01BU0s7CisJbWFzayB8PSAoMSA8PCAoaHdpcnEgKyAxNikpOworCXNvY3JhdGVzX2ZwZ2FfcGljX3dyaXRlKEZQR0FfUElDX0lSUU1BU0soaXJxX2xpbmUpLCBtYXNrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHNvY3JhdGVzX2ZwZ2FfcGljX21hc2sodW5zaWduZWQgaW50IHZpcnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwl1bnNpZ25lZCBpbnQgaHdpcnE7CisJaW50IGlycV9saW5lOworCXUzMiBtYXNrOworCisJaHdpcnEgPSBzb2NyYXRlc19mcGdhX2lycV90b19odyh2aXJxKTsKKworCWlycV9saW5lID0gZnBnYV9pcnFzW2h3aXJxXS5pcnFfbGluZTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOworCW1hc2sgPSBzb2NyYXRlc19mcGdhX3BpY19yZWFkKEZQR0FfUElDX0lSUU1BU0soaXJxX2xpbmUpKQorCQkmIFNPQ1JBVEVTX0ZQR0FfSVJRX01BU0s7CisJbWFzayAmPSB+KDEgPDwgaHdpcnEpOworCXNvY3JhdGVzX2ZwZ2FfcGljX3dyaXRlKEZQR0FfUElDX0lSUU1BU0soaXJxX2xpbmUpLCBtYXNrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHNvY3JhdGVzX2ZwZ2FfcGljX21hc2tfYWNrKHVuc2lnbmVkIGludCB2aXJxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGh3aXJxOworCWludCBpcnFfbGluZTsKKwl1MzIgbWFzazsKKworCWh3aXJxID0gc29jcmF0ZXNfZnBnYV9pcnFfdG9faHcodmlycSk7CisKKwlpcnFfbGluZSA9IGZwZ2FfaXJxc1tod2lycV0uaXJxX2xpbmU7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKKwltYXNrID0gc29jcmF0ZXNfZnBnYV9waWNfcmVhZChGUEdBX1BJQ19JUlFNQVNLKGlycV9saW5lKSkKKwkJJiBTT0NSQVRFU19GUEdBX0lSUV9NQVNLOworCW1hc2sgJj0gfigxIDw8IGh3aXJxKTsKKwltYXNrIHw9ICgxIDw8IChod2lycSArIDE2KSk7CisJc29jcmF0ZXNfZnBnYV9waWNfd3JpdGUoRlBHQV9QSUNfSVJRTUFTSyhpcnFfbGluZSksIG1hc2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgc29jcmF0ZXNfZnBnYV9waWNfdW5tYXNrKHVuc2lnbmVkIGludCB2aXJxKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGh3aXJxOworCWludCBpcnFfbGluZTsKKwl1MzIgbWFzazsKKworCWh3aXJxID0gc29jcmF0ZXNfZnBnYV9pcnFfdG9faHcodmlycSk7CisKKwlpcnFfbGluZSA9IGZwZ2FfaXJxc1tod2lycV0uaXJxX2xpbmU7CisJc3Bpbl9sb2NrX2lycXNhdmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKKwltYXNrID0gc29jcmF0ZXNfZnBnYV9waWNfcmVhZChGUEdBX1BJQ19JUlFNQVNLKGlycV9saW5lKSkKKwkJJiBTT0NSQVRFU19GUEdBX0lSUV9NQVNLOworCW1hc2sgfD0gKDEgPDwgaHdpcnEpOworCXNvY3JhdGVzX2ZwZ2FfcGljX3dyaXRlKEZQR0FfUElDX0lSUU1BU0soaXJxX2xpbmUpLCBtYXNrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHNvY3JhdGVzX2ZwZ2FfcGljX2VvaSh1bnNpZ25lZCBpbnQgdmlycSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBod2lycTsKKwlpbnQgaXJxX2xpbmU7CisJdTMyIG1hc2s7CisKKwlod2lycSA9IHNvY3JhdGVzX2ZwZ2FfaXJxX3RvX2h3KHZpcnEpOworCisJaXJxX2xpbmUgPSBmcGdhX2lycXNbaHdpcnFdLmlycV9saW5lOworCXNwaW5fbG9ja19pcnFzYXZlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CisJbWFzayA9IHNvY3JhdGVzX2ZwZ2FfcGljX3JlYWQoRlBHQV9QSUNfSVJRTUFTSyhpcnFfbGluZSkpCisJCSYgU09DUkFURVNfRlBHQV9JUlFfTUFTSzsKKwltYXNrIHw9ICgxIDw8IChod2lycSArIDE2KSk7CisJc29jcmF0ZXNfZnBnYV9waWNfd3JpdGUoRlBHQV9QSUNfSVJRTUFTSyhpcnFfbGluZSksIG1hc2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKK30KKworc3RhdGljIGludCBzb2NyYXRlc19mcGdhX3BpY19zZXRfdHlwZSh1bnNpZ25lZCBpbnQgdmlycSwKKwkJdW5zaWduZWQgaW50IGZsb3dfdHlwZSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXVuc2lnbmVkIGludCBod2lycTsKKwlpbnQgcG9sYXJpdHk7CisJdTMyIG1hc2s7CisKKwlod2lycSA9IHNvY3JhdGVzX2ZwZ2FfaXJxX3RvX2h3KHZpcnEpOworCisJaWYgKGZwZ2FfaXJxc1tod2lycV0udHlwZSAhPSBJUlFfVFlQRV9OT05FKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoZmxvd190eXBlICYgSVJRX1RZUEVfU0VOU0VfTUFTSykgeworCWNhc2UgSVJRX1RZUEVfTEVWRUxfSElHSDoKKwkJcG9sYXJpdHkgPSAxOworCQlicmVhazsKKwljYXNlIElSUV9UWVBFX0xFVkVMX0xPVzoKKwkJcG9sYXJpdHkgPSAwOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJc3Bpbl9sb2NrX2lycXNhdmUoJnNvY3JhdGVzX2ZwZ2FfcGljX2xvY2ssIGZsYWdzKTsKKwltYXNrID0gc29jcmF0ZXNfZnBnYV9waWNfcmVhZChGUEdBX1BJQ19JUlFDRkcpOworCWlmIChwb2xhcml0eSkKKwkJbWFzayB8PSAoMSA8PCBod2lycSk7CisJZWxzZQorCQltYXNrICY9IH4oMSA8PCBod2lycSk7CisJc29jcmF0ZXNfZnBnYV9waWNfd3JpdGUoRlBHQV9QSUNfSVJRQ0ZHLCBtYXNrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgc29jcmF0ZXNfZnBnYV9waWNfY2hpcCA9IHsKKwkudHlwZW5hbWUgICAgICAgPSAiIEZQR0EtUElDICIsCisJLmFjawkJPSBzb2NyYXRlc19mcGdhX3BpY19hY2ssCisJLm1hc2sgICAgICAgICAgID0gc29jcmF0ZXNfZnBnYV9waWNfbWFzaywKKwkubWFza19hY2sgICAgICAgPSBzb2NyYXRlc19mcGdhX3BpY19tYXNrX2FjaywKKwkudW5tYXNrICAgICAgICAgPSBzb2NyYXRlc19mcGdhX3BpY191bm1hc2ssCisJLmVvaQkJPSBzb2NyYXRlc19mcGdhX3BpY19lb2ksCisJLnNldF90eXBlCT0gc29jcmF0ZXNfZnBnYV9waWNfc2V0X3R5cGUsCit9OworCitzdGF0aWMgaW50IHNvY3JhdGVzX2ZwZ2FfcGljX2hvc3RfbWFwKHN0cnVjdCBpcnFfaG9zdCAqaCwgdW5zaWduZWQgaW50IHZpcnEsCisJCWlycV9od19udW1iZXJfdCBod2lycSkKK3sKKwkvKiBBbGwgaW50ZXJydXB0cyBhcmUgTEVWRUwgc2Vuc2l0aXZlICovCisJZ2V0X2lycV9kZXNjKHZpcnEpLT5zdGF0dXMgfD0gSVJRX0xFVkVMOworCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcih2aXJxLCAmc29jcmF0ZXNfZnBnYV9waWNfY2hpcCwKKwkJCWhhbmRsZV9mYXN0ZW9pX2lycSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzb2NyYXRlc19mcGdhX3BpY19ob3N0X3hsYXRlKHN0cnVjdCBpcnFfaG9zdCAqaCwKKwkJc3RydWN0IGRldmljZV9ub2RlICpjdCwJdTMyICppbnRzcGVjLCB1bnNpZ25lZCBpbnQgaW50c2l6ZSwKKwkJaXJxX2h3X251bWJlcl90ICpvdXRfaHdpcnEsIHVuc2lnbmVkIGludCAqb3V0X2ZsYWdzKQoreworCXN0cnVjdCBzb2NyYXRlc19mcGdhX2lycV9pbmZvICpmcGdhX2lycSA9ICZmcGdhX2lycXNbaW50c3BlY1swXV07CisKKwkqb3V0X2h3aXJxID0gaW50c3BlY1swXTsKKwlpZiAgKGZwZ2FfaXJxLT50eXBlID09IElSUV9UWVBFX05PTkUpIHsKKwkJLyogdHlwZSBpcyBjb25maWd1cmFibGUgKi8KKwkJaWYgKGludHNwZWNbMV0gIT0gSVJRX1RZUEVfTEVWRUxfTE9XICYmCisJCSAgICBpbnRzcGVjWzFdICE9IElSUV9UWVBFX0xFVkVMX0hJR0gpIHsKKwkJCXByX3dhcm5pbmcoIkZQR0EgUElDOiBpbnZhbGlkIGlycSB0eXBlLCAiCisJCQkJICAgInNldHRpbmcgZGVmYXVsdCBhY3RpdmUgbG93XG4iKTsKKwkJCSpvdXRfZmxhZ3MgPSBJUlFfVFlQRV9MRVZFTF9MT1c7CisJCX0gZWxzZSB7CisJCQkqb3V0X2ZsYWdzID0gaW50c3BlY1sxXTsKKwkJfQorCX0gZWxzZSB7CisJCS8qIHR5cGUgaXMgZml4ZWQgKi8KKwkJKm91dF9mbGFncyA9IGZwZ2FfaXJxLT50eXBlOworCX0KKworCS8qIFVzZSBzcGVjaWZpZWQgaW50ZXJydXB0IHJvdXRpbmcgKi8KKwlpZiAoaW50c3BlY1syXSA8PSAyKQorCQlmcGdhX2lycS0+aXJxX2xpbmUgPSBpbnRzcGVjWzJdOworCWVsc2UKKwkJcHJfd2FybmluZygiRlBHQSBQSUM6IGludmFsaWQgaXJxIHJvdXRpbmdcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaXJxX2hvc3Rfb3BzIHNvY3JhdGVzX2ZwZ2FfcGljX2hvc3Rfb3BzID0geworCS5tYXAgICAgPSBzb2NyYXRlc19mcGdhX3BpY19ob3N0X21hcCwKKwkueGxhdGUgID0gc29jcmF0ZXNfZnBnYV9waWNfaG9zdF94bGF0ZSwKK307CisKK3ZvaWQgc29jcmF0ZXNfZnBnYV9waWNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKnBpYykKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBpOworCisJLyogU2V0dXAgYW4gaXJxX2hvc3Qgc3RydWN0dXJlICovCisJc29jcmF0ZXNfZnBnYV9waWNfaXJxX2hvc3QgPSBpcnFfYWxsb2NfaG9zdChwaWMsIElSUV9IT1NUX01BUF9MSU5FQVIsCisJCQlTT0NSQVRFU19GUEdBX05VTV9JUlFTLAkmc29jcmF0ZXNfZnBnYV9waWNfaG9zdF9vcHMsCisJCQlTT0NSQVRFU19GUEdBX05VTV9JUlFTKTsKKwlpZiAoc29jcmF0ZXNfZnBnYV9waWNfaXJxX2hvc3QgPT0gTlVMTCkgeworCQlwcl9lcnIoIkZQR0EgUElDOiBVbmFibGUgdG8gYWxsb2NhdGUgaG9zdFxuIik7CisJCXJldHVybjsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCXNvY3JhdGVzX2ZwZ2FfaXJxc1tpXSA9IGlycV9vZl9wYXJzZV9hbmRfbWFwKHBpYywgaSk7CisJCWlmIChzb2NyYXRlc19mcGdhX2lycXNbaV0gPT0gTk9fSVJRKSB7CisJCQlwcl93YXJuaW5nKCJGUEdBIFBJQzogY2FuJ3QgZ2V0IGlycSVkLlxuIiwgaSk7CisJCQljb250aW51ZTsKKwkJfQorCQlzZXRfaXJxX2NoYWluZWRfaGFuZGxlcihzb2NyYXRlc19mcGdhX2lycXNbaV0sCisJCQkJc29jcmF0ZXNfZnBnYV9waWNfY2FzY2FkZSk7CisJfQorCisJc29jcmF0ZXNfZnBnYV9waWNfaW9iYXNlID0gb2ZfaW9tYXAocGljLCAwKTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZzb2NyYXRlc19mcGdhX3BpY19sb2NrLCBmbGFncyk7CisJc29jcmF0ZXNfZnBnYV9waWNfd3JpdGUoRlBHQV9QSUNfSVJRTUFTSygwKSwKKwkJCVNPQ1JBVEVTX0ZQR0FfSVJRX01BU0sgPDwgMTYpOworCXNvY3JhdGVzX2ZwZ2FfcGljX3dyaXRlKEZQR0FfUElDX0lSUU1BU0soMSksCisJCQlTT0NSQVRFU19GUEdBX0lSUV9NQVNLIDw8IDE2KTsKKwlzb2NyYXRlc19mcGdhX3BpY193cml0ZShGUEdBX1BJQ19JUlFNQVNLKDIpLAorCQkJU09DUkFURVNfRlBHQV9JUlFfTUFTSyA8PCAxNik7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmc29jcmF0ZXNfZnBnYV9waWNfbG9jaywgZmxhZ3MpOworCisJcHJfaW5mbygiRlBHQSBQSUM6IFNldHRpbmcgdXAgU29jcmF0ZXMgRlBHQSBQSUNcbiIpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NvY3JhdGVzX2ZwZ2FfcGljLmggYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc29jcmF0ZXNfZnBnYV9waWMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMWQ3ZDhlCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3NvY3JhdGVzX2ZwZ2FfcGljLmgKQEAgLTAsMCArMSwxNiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDggSWx5YSBZYW5vaywgRW1jcmFmdCBTeXN0ZW1zCisgKgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICovCisKKyNpZm5kZWYgU09DUkFURVNfRlBHQV9QSUNfSAorI2RlZmluZSBTT0NSQVRFU19GUEdBX1BJQ19ICisKK3ZvaWQgc29jcmF0ZXNfZnBnYV9waWNfaW5pdChzdHJ1Y3QgZGV2aWNlX25vZGUgKnBpYyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3N0eF9ncDMuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC9zdHhfZ3AzLmMKaW5kZXggMGNjYThmNS4uZjU1OTkxOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3N0eF9ncDMuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvc3R4X2dwMy5jCkBAIC0xNDUsNiArMTQ1LDcgQEAKIAogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgX19pbml0ZGF0YSBvZl9idXNfaWRzW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3RxbTg1eHguYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODV4eC90cW04NXh4LmMKaW5kZXggMjkzM2E4ZS4uNWIwYWI5OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84NXh4L3RxbTg1eHguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg1eHgvdHFtODV4eC5jCkBAIC0xNTMsNiArMTUzLDcgQEAKIAogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgX19pbml0ZGF0YSBvZl9idXNfaWRzW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvS2NvbmZpZwppbmRleCA4ZTU2OTM5Li5mZGFmNGRkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvS2NvbmZpZwpAQCAtMSw3ICsxLDcgQEAKIGNvbmZpZyBQUENfODZ4eAogbWVudWNvbmZpZyBQUENfODZ4eAogCWJvb2wgIjg2eHgtYmFzZWQgYm9hcmRzIgotCWRlcGVuZHMgb24gNnh4ICYmIFBQQ19NVUxUSVBMQVRGT1JNCisJZGVwZW5kcyBvbiA2eHgKIAlzZWxlY3QgRlNMX1NPQwogCXNlbGVjdCBBTFRJVkVDCiAJaGVscApAQCAtMzEsNiArMzEsMjIgQEAKIAloZWxwCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIHN1cHBvcnQgZm9yIHRoZSBNUEM4NjEwIEhQQ0QgYm9hcmQuCiAKK2NvbmZpZyBHRUZfUFBDOUEKKwlib29sICJHRSBGYW51YyBQUEM5QSIKKwlzZWxlY3QgREVGQVVMVF9VSU1BR0UKKwlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBHRSBGYW51YydzIFBQQzlBLgorCitjb25maWcgR0VGX1NCQzMxMAorCWJvb2wgIkdFIEZhbnVjIFNCQzMxMCIKKwlzZWxlY3QgREVGQVVMVF9VSU1BR0UKKwlzZWxlY3QgR0VORVJJQ19HUElPCisJc2VsZWN0IEFSQ0hfUkVRVUlSRV9HUElPTElCCisJaGVscAorCSAgVGhpcyBvcHRpb24gZW5hYmxlcyBzdXBwb3J0IGZvciBHRSBGYW51YydzIFNCQzMxMC4KKwogY29uZmlnIEdFRl9TQkM2MTAKIAlib29sICJHRSBGYW51YyBTQkM2MTAiCiAJc2VsZWN0IERFRkFVTFRfVUlNQUdFCkBAIC00OCw3ICs2NCw3IEBACiAJc2VsZWN0IEZTTF9QQ0kgaWYgUENJCiAJc2VsZWN0IFBQQ19VREJHXzE2NTUwCiAJc2VsZWN0IE1QSUMKLQlkZWZhdWx0IHkgaWYgTVBDODY0MV9IUENOIHx8IFNCQzg2NDFEIHx8IEdFRl9TQkM2MTAKKwlkZWZhdWx0IHkgaWYgTVBDODY0MV9IUENOIHx8IFNCQzg2NDFEIHx8IEdFRl9TQkM2MTAgfHwgR0VGX1NCQzMxMCB8fCBHRUZfUFBDOUEKIAogY29uZmlnIE1QQzg2MTAKIAlib29sCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvTWFrZWZpbGUKaW5kZXggMzFlNTQwYy4uNGIwZDdiMSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9NYWtlZmlsZQpAQCAtOSwzICs5LDUgQEAKIG9iai0kKENPTkZJR19NUEM4NjEwX0hQQ0QpCSs9IG1wYzg2MTBfaHBjZC5vCiBnZWYtZ3Bpby0kKENPTkZJR19HUElPTElCKQkrPSBnZWZfZ3Bpby5vCiBvYmotJChDT05GSUdfR0VGX1NCQzYxMCkJKz0gZ2VmX3NiYzYxMC5vIGdlZl9waWMubyAkKGdlZi1ncGlvLXkpCitvYmotJChDT05GSUdfR0VGX1NCQzMxMCkJKz0gZ2VmX3NiYzMxMC5vIGdlZl9waWMubyAkKGdlZi1ncGlvLXkpCitvYmotJChDT05GSUdfR0VGX1BQQzlBKQkJKz0gZ2VmX3BwYzlhLm8gZ2VmX3BpYy5vICQoZ2VmLWdwaW8teSkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfZ3Bpby5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9ncGlvLmMKaW5kZXggODViMjgwMC4uYjJlYTg4NyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9ncGlvLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9ncGlvLmMKQEAgLTM3LDggKzM3LDYgQEAKICNkZWZpbmUgR0VGX0dQSU9fT1ZFUlJVTgkweDFDCiAjZGVmaW5lIEdFRl9HUElPX01PREUJCTB4MjAKIAotI2RlZmluZSBOVU1fR1BJTyAxOQotCiBzdGF0aWMgdm9pZCBfZ2VmX2dwaW9fc2V0KHZvaWQgX19pb21lbSAqcmVnLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCBpbnQgdmFsdWUpCiB7CiAJdW5zaWduZWQgaW50IGRhdGE7CkBAIC0xMDMsMTAgKzEwMSwxMCBAQAogc3RhdGljIGludCBfX2luaXQgZ2VmX2dwaW9faW5pdCh2b2lkKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJaW50IHJldHZhbDsKKwlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICpnZWZfZ3Bpb19jaGlwOwogCiAJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCBOVUxMLCAiZ2VmLHNiYzYxMC1ncGlvIikgewotCQlpbnQgcmV0dmFsOwotCQlzdHJ1Y3Qgb2ZfbW1fZ3Bpb19jaGlwICpnZWZfZ3Bpb19jaGlwOwogCiAJCXByX2RlYnVnKCIlczogSW5pdGlhbGlzaW5nIEdFRiBHUElPXG4iLCBucC0+ZnVsbF9uYW1lKTsKIApAQCAtMTIwLDcgKzExOCwzNSBAQAogCiAJCS8qIFNldHVwIHBvaW50ZXJzIHRvIGNoaXAgZnVuY3Rpb25zICovCiAJCWdlZl9ncGlvX2NoaXAtPm9mX2djLmdwaW9fY2VsbHMgPSAyOwotCQlnZWZfZ3Bpb19jaGlwLT5vZl9nYy5nYy5uZ3BpbyA9IE5VTV9HUElPOworCQlnZWZfZ3Bpb19jaGlwLT5vZl9nYy5nYy5uZ3BpbyA9IDE5OworCQlnZWZfZ3Bpb19jaGlwLT5vZl9nYy5nYy5kaXJlY3Rpb25faW5wdXQgPSBnZWZfZ3Bpb19kaXJfaW47CisJCWdlZl9ncGlvX2NoaXAtPm9mX2djLmdjLmRpcmVjdGlvbl9vdXRwdXQgPSBnZWZfZ3Bpb19kaXJfb3V0OworCQlnZWZfZ3Bpb19jaGlwLT5vZl9nYy5nYy5nZXQgPSBnZWZfZ3Bpb19nZXQ7CisJCWdlZl9ncGlvX2NoaXAtPm9mX2djLmdjLnNldCA9IGdlZl9ncGlvX3NldDsKKworCQkvKiBUaGlzIGZ1bmN0aW9uIGFkZHMgYSBtZW1vcnkgbWFwcGVkIEdQSU8gY2hpcCAqLworCQlyZXR2YWwgPSBvZl9tbV9ncGlvY2hpcF9hZGQobnAsIGdlZl9ncGlvX2NoaXApOworCQlpZiAocmV0dmFsKSB7CisJCQlrZnJlZShnZWZfZ3Bpb19jaGlwKTsKKwkJCXByX2VycigiJXM6IFVuYWJsZSB0byBhZGQgR1BJT1xuIiwgbnAtPmZ1bGxfbmFtZSk7CisJCX0KKwl9CisKKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsIE5VTEwsICJnZWYsc2JjMzEwLWdwaW8iKSB7CisKKwkJcHJfZGVidWcoIiVzOiBJbml0aWFsaXNpbmcgR0VGIEdQSU9cbiIsIG5wLT5mdWxsX25hbWUpOworCisJCS8qIEFsbG9jYXRlIGNoaXAgc3RydWN0dXJlICovCisJCWdlZl9ncGlvX2NoaXAgPSBremFsbG9jKHNpemVvZigqZ2VmX2dwaW9fY2hpcCksIEdGUF9LRVJORUwpOworCQlpZiAoIWdlZl9ncGlvX2NoaXApIHsKKwkJCXByX2VycigiJXM6IFVuYWJsZSB0byBhbGxvY2F0ZSBzdHJ1Y3R1cmVcbiIsCisJCQkJbnAtPmZ1bGxfbmFtZSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCS8qIFNldHVwIHBvaW50ZXJzIHRvIGNoaXAgZnVuY3Rpb25zICovCisJCWdlZl9ncGlvX2NoaXAtPm9mX2djLmdwaW9fY2VsbHMgPSAyOworCQlnZWZfZ3Bpb19jaGlwLT5vZl9nYy5nYy5uZ3BpbyA9IDY7CiAJCWdlZl9ncGlvX2NoaXAtPm9mX2djLmdjLmRpcmVjdGlvbl9pbnB1dCA9IGdlZl9ncGlvX2Rpcl9pbjsKIAkJZ2VmX2dwaW9fY2hpcC0+b2ZfZ2MuZ2MuZGlyZWN0aW9uX291dHB1dCA9IGdlZl9ncGlvX2Rpcl9vdXQ7CiAJCWdlZl9ncGlvX2NoaXAtPm9mX2djLmdjLmdldCA9IGdlZl9ncGlvX2dldDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfcHBjOWEuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfcHBjOWEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kNzkxMDQ2Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9wcGM5YS5jCkBAIC0wLDAgKzEsMjI0IEBACisvKgorICogR0UgRmFudWMgUFBDOUEgYm9hcmQgc3VwcG9ydAorICoKKyAqIEF1dGhvcjogTWFydHluIFdlbGNoIDxtYXJ0eW4ud2VsY2hAZ2VmYW51Yy5jb20+CisgKgorICogQ29weXJpZ2h0IDIwMDggR0UgRmFudWMgSW50ZWxsaWdlbnQgUGxhdGZvcm1zIEVtYmVkZGVkIFN5c3RlbXMsIEluYy4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQorICogRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyAgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgIExpY2Vuc2UsIG9yIChhdCB5b3VyCisgKiBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIEJhc2VkIG9uOiBtcGM4Nnh4X2hwY24uYyAoTVBDODZ4eCBIUENOIGJvYXJkIHNwZWNpZmljIHJvdXRpbmVzKQorICogQ29weXJpZ2h0IDIwMDYgRnJlZXNjYWxlIFNlbWljb25kdWN0b3IgSW5jLgorICoKKyAqIE5FQyBmaXh1cCBhZGFwdGVkIGZyb20gYXJjaC9taXBzL3BjaS9maXh1cC1sbTJlLmMKKyAqLworCisjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mX3BsYXRmb3JtLmg+CisKKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9wY2ktYnJpZGdlLmg+CisjaW5jbHVkZSA8YXNtL21wYzg2eHguaD4KKyNpbmNsdWRlIDxhc20vcHJvbS5oPgorI2luY2x1ZGUgPG1tL21tdV9kZWNsLmg+CisjaW5jbHVkZSA8YXNtL3VkYmcuaD4KKworI2luY2x1ZGUgPGFzbS9tcGljLmg+CisKKyNpbmNsdWRlIDxzeXNkZXYvZnNsX3BjaS5oPgorI2luY2x1ZGUgPHN5c2Rldi9mc2xfc29jLmg+CisKKyNpbmNsdWRlICJtcGM4Nnh4LmgiCisjaW5jbHVkZSAiZ2VmX3BpYy5oIgorCisjdW5kZWYgREVCVUcKKworI2lmZGVmIERFQlVHCisjZGVmaW5lIERCRyAoZm10Li4uKSBkbyB7IHByaW50ayhLRVJOX0VSUiAiUFBDOUE6ICIgZm10KTsgfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIERCRyAoZm10Li4uKSBkbyB7IH0gd2hpbGUgKDApCisjZW5kaWYKKwordm9pZCBfX2lvbWVtICpwcGM5YV9yZWdzOworCitzdGF0aWMgdm9pZCBfX2luaXQgZ2VmX3BwYzlhX2luaXRfaXJxKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpjYXNjYWRlX25vZGUgPSBOVUxMOworCisJbXBjODZ4eF9pbml0X2lycSgpOworCisJLyoKKwkgKiBUaGVyZSBpcyBhIHNpbXBsZSBpbnRlcnJ1cHQgaGFuZGxlciBpbiB0aGUgbWFpbiBGUEdBLCB0aGlzIG5lZWRzCisJICogdG8gYmUgY2FzY2FkZWQgaW50byB0aGUgTVBJQworCSAqLworCWNhc2NhZGVfbm9kZSA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJnZWYsZnBnYS1waWMtMS4wMCIpOworCWlmICghY2FzY2FkZV9ub2RlKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIlBQQzlBOiBObyBGUEdBIFBJQ1xuIik7CisJCXJldHVybjsKKwl9CisKKwlnZWZfcGljX2luaXQoY2FzY2FkZV9ub2RlKTsKKwlvZl9ub2RlX3B1dChjYXNjYWRlX25vZGUpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZ2VmX3BwYzlhX3NldHVwX2FyY2godm9pZCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKnJlZ3M7CisjaWZkZWYgQ09ORklHX1BDSQorCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisKKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJwY2kiLCAiZnNsLG1wYzg2NDEtcGNpZSIpIHsKKwkJZnNsX2FkZF9icmlkZ2UobnAsIDEpOworCX0KKyNlbmRpZgorCisJcHJpbnRrKEtFUk5fSU5GTyAiR0UgRmFudWMgSW50ZWxsaWdlbnQgUGxhdGZvcm1zIFBQQzlBIDZVIFZNRSBTQkNcbiIpOworCisjaWZkZWYgQ09ORklHX1NNUAorCW1wYzg2eHhfc21wX2luaXQoKTsKKyNlbmRpZgorCisJLyogUmVtYXAgYmFzaWMgYm9hcmQgcmVnaXN0ZXJzICovCisJcmVncyA9IG9mX2ZpbmRfY29tcGF0aWJsZV9ub2RlKE5VTEwsIE5VTEwsICJnZWYscHBjOWEtZnBnYS1yZWdzIik7CisJaWYgKHJlZ3MpIHsKKwkJcHBjOWFfcmVncyA9IG9mX2lvbWFwKHJlZ3MsIDApOworCQlpZiAocHBjOWFfcmVncyA9PSBOVUxMKQorCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5hYmxlIHRvIG1hcCBib2FyZCByZWdpc3RlcnNcbiIpOworCQlvZl9ub2RlX3B1dChyZWdzKTsKKwl9Cit9CisKKy8qIFJldHVybiB0aGUgUENCIHJldmlzaW9uICovCitzdGF0aWMgdW5zaWduZWQgaW50IGdlZl9wcGM5YV9nZXRfcGNiX3Jldih2b2lkKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSBpb3JlYWQzMihwcGM5YV9yZWdzKTsKKwlyZXR1cm4gKHJlZyA+PiA4KSAmIDB4ZmY7Cit9CisKKy8qIFJldHVybiB0aGUgYm9hcmQgKHNvZnR3YXJlKSByZXZpc2lvbiAqLworc3RhdGljIHVuc2lnbmVkIGludCBnZWZfcHBjOWFfZ2V0X2JvYXJkX3Jldih2b2lkKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSBpb3JlYWQzMihwcGM5YV9yZWdzKTsKKwlyZXR1cm4gKHJlZyA+PiAxNikgJiAweGZmOworfQorCisvKiBSZXR1cm4gdGhlIEZQR0EgcmV2aXNpb24gKi8KK3N0YXRpYyB1bnNpZ25lZCBpbnQgZ2VmX3BwYzlhX2dldF9mcGdhX3Jldih2b2lkKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSBpb3JlYWQzMihwcGM5YV9yZWdzKTsKKwlyZXR1cm4gKHJlZyA+PiAyNCkgJiAweGY7Cit9CisKK3N0YXRpYyB2b2lkIGdlZl9wcGM5YV9zaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptKQoreworCXVpbnQgc3ZpZCA9IG1mc3ByKFNQUk5fU1ZSKTsKKworCXNlcV9wcmludGYobSwgIlZlbmRvclx0XHQ6IEdFIEZhbnVjIEludGVsbGlnZW50IFBsYXRmb3Jtc1xuIik7CisKKwlzZXFfcHJpbnRmKG0sICJSZXZpc2lvblx0OiAldSVjXG4iLCBnZWZfcHBjOWFfZ2V0X3BjYl9yZXYoKSwKKwkJKCdBJyArIGdlZl9wcGM5YV9nZXRfYm9hcmRfcmV2KCkgLSAxKSk7CisJc2VxX3ByaW50ZihtLCAiRlBHQSBSZXZpc2lvblx0OiAldVxuIiwgZ2VmX3BwYzlhX2dldF9mcGdhX3JldigpKTsKKworCXNlcV9wcmludGYobSwgIlNWUlx0XHQ6IDB4JXhcbiIsIHN2aWQpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZ2VmX3BwYzlhX25lY19maXh1cChzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwl1bnNpZ25lZCBpbnQgdmFsOworCisJLyogRG8gbm90IGRvIHRoZSBmaXh1cCBvbiBvdGhlciBwbGF0Zm9ybXMhICovCisJaWYgKCFtYWNoaW5lX2lzKGdlZl9wcGM5YSkpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0lORk8gIlJ1bm5pbmcgTkVDIHVQRDcyMDEwMSBGaXh1cFxuIik7CisKKwkvKiBFbnN1cmUgcG9ydHMgMSwgMiwgMywgNCAmIDUgYXJlIGVuYWJsZWQgKi8KKwlwY2lfcmVhZF9jb25maWdfZHdvcmQocGRldiwgMHhlMCwgJnZhbCk7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweGUwLCAodmFsICYgfjcpIHwgMHg1KTsKKworCS8qIFN5c3RlbSBjbG9jayBpcyA0OC1NSHogT3NjaWxsYXRvciBhbmQgRUhDSSBFbmFibGVkLiAqLworCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgMHhlNCwgMSA8PCA1KTsKK30KK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUihQQ0lfVkVORE9SX0lEX05FQywgUENJX0RFVklDRV9JRF9ORUNfVVNCLAorCWdlZl9wcGM5YV9uZWNfZml4dXApOworCisvKgorICogQ2FsbGVkIHZlcnkgZWFybHksIGRldmljZS10cmVlIGlzbid0IHVuZmxhdHRlbmVkCisgKgorICogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIEJTUCBpcyBjb21wYXRpYmxlIHdpdGggdGhlCisgKiBzdXBwbGllZCBkZXZpY2UtdHJlZSwgd2hpY2ggaXMgYXNzdW1lZCB0byBiZSB0aGUgY29ycmVjdCBvbmUgZm9yIHRoZSBhY3R1YWwKKyAqIGJvYXJkLiBJdCBpcyBleHBlY3RlZCB0aGF0aSwgaW4gdGhlIGZ1dHVyZSwgYSBrZXJuZWwgbWF5IHN1cHBvcnQgbXVsdGlwbGUKKyAqIGJvYXJkcy4KKyAqLworc3RhdGljIGludCBfX2luaXQgZ2VmX3BwYzlhX3Byb2JlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOworCisJaWYgKG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiZ2VmLHBwYzlhIikpCisJCXJldHVybiAxOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBsb25nIF9faW5pdCBtcGM4Nnh4X3RpbWVfaW5pdCh2b2lkKQoreworCXVuc2lnbmVkIGludCB0ZW1wOworCisJLyogU2V0IHRoZSB0aW1lIGJhc2UgdG8gemVybyAqLworCW10c3ByKFNQUk5fVEJXTCwgMCk7CisJbXRzcHIoU1BSTl9UQldVLCAwKTsKKworCXRlbXAgPSBtZnNwcihTUFJOX0hJRDApOworCXRlbXAgfD0gSElEMF9UQkVOOworCW10c3ByKFNQUk5fSElEMCwgdGVtcCk7CisJYXNtIHZvbGF0aWxlKCJpc3luYyIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfYnVzX2lkc1tdID0geworCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKKwl7fSwKK307CisKK3N0YXRpYyBpbnQgX19pbml0IGRlY2xhcmVfb2ZfcGxhdGZvcm1fZGV2aWNlcyh2b2lkKQoreworCXByaW50ayhLRVJOX0RFQlVHICJQcm9iZSBwbGF0Zm9ybSBkZXZpY2VzXG4iKTsKKwlvZl9wbGF0Zm9ybV9idXNfcHJvYmUoTlVMTCwgb2ZfYnVzX2lkcywgTlVMTCk7CisKKwlyZXR1cm4gMDsKK30KK21hY2hpbmVfZGV2aWNlX2luaXRjYWxsKGdlZl9wcGM5YSwgZGVjbGFyZV9vZl9wbGF0Zm9ybV9kZXZpY2VzKTsKKworZGVmaW5lX21hY2hpbmUoZ2VmX3BwYzlhKSB7CisJLm5hbWUJCQk9ICJHRSBGYW51YyBQUEM5QSIsCisJLnByb2JlCQkJPSBnZWZfcHBjOWFfcHJvYmUsCisJLnNldHVwX2FyY2gJCT0gZ2VmX3BwYzlhX3NldHVwX2FyY2gsCisJLmluaXRfSVJRCQk9IGdlZl9wcGM5YV9pbml0X2lycSwKKwkuc2hvd19jcHVpbmZvCQk9IGdlZl9wcGM5YV9zaG93X2NwdWluZm8sCisJLmdldF9pcnEJCT0gbXBpY19nZXRfaXJxLAorCS5yZXN0YXJ0CQk9IGZzbF9yc3Rjcl9yZXN0YXJ0LAorCS50aW1lX2luaXQJCT0gbXBjODZ4eF90aW1lX2luaXQsCisJLmNhbGlicmF0ZV9kZWNyCQk9IGdlbmVyaWNfY2FsaWJyYXRlX2RlY3IsCisJLnByb2dyZXNzCQk9IHVkYmdfcHJvZ3Jlc3MsCisjaWZkZWYgQ09ORklHX1BDSQorCS5wY2liaW9zX2ZpeHVwX2J1cwk9IGZzbF9wY2liaW9zX2ZpeHVwX2J1cywKKyNlbmRpZgorfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfc2JjMzEwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3NiYzMxMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmMTRmODUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3NiYzMxMC5jCkBAIC0wLDAgKzEsMjM1IEBACisvKgorICogR0UgRmFudWMgU0JDMzEwIGJvYXJkIHN1cHBvcnQKKyAqCisgKiBBdXRob3I6IE1hcnR5biBXZWxjaCA8bWFydHluLndlbGNoQGdlZmFudWMuY29tPgorICoKKyAqIENvcHlyaWdodCAyMDA4IEdFIEZhbnVjIEludGVsbGlnZW50IFBsYXRmb3JtcyBFbWJlZGRlZCBTeXN0ZW1zLCBJbmMuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBCYXNlZCBvbjogbXBjODZ4eF9ocGNuLmMgKE1QQzg2eHggSFBDTiBib2FyZCBzcGVjaWZpYyByb3V0aW5lcykKKyAqIENvcHlyaWdodCAyMDA2IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yIEluYy4KKyAqCisgKiBORUMgZml4dXAgYWRhcHRlZCBmcm9tIGFyY2gvbWlwcy9wY2kvZml4dXAtbG0yZS5jCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3N0ZGRlZi5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC9vZl9wbGF0Zm9ybS5oPgorCisjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS90aW1lLmg+CisjaW5jbHVkZSA8YXNtL21hY2hkZXAuaD4KKyNpbmNsdWRlIDxhc20vcGNpLWJyaWRnZS5oPgorI2luY2x1ZGUgPGFzbS9tcGM4Nnh4Lmg+CisjaW5jbHVkZSA8YXNtL3Byb20uaD4KKyNpbmNsdWRlIDxtbS9tbXVfZGVjbC5oPgorI2luY2x1ZGUgPGFzbS91ZGJnLmg+CisKKyNpbmNsdWRlIDxhc20vbXBpYy5oPgorCisjaW5jbHVkZSA8c3lzZGV2L2ZzbF9wY2kuaD4KKyNpbmNsdWRlIDxzeXNkZXYvZnNsX3NvYy5oPgorCisjaW5jbHVkZSAibXBjODZ4eC5oIgorI2luY2x1ZGUgImdlZl9waWMuaCIKKworI3VuZGVmIERFQlVHCisKKyNpZmRlZiBERUJVRworI2RlZmluZSBEQkcgKGZtdC4uLikgZG8geyBwcmludGsoS0VSTl9FUlIgIlNCQzMxMDogIiBmbXQpOyB9IHdoaWxlICgwKQorI2Vsc2UKKyNkZWZpbmUgREJHIChmbXQuLi4pIGRvIHsgfSB3aGlsZSAoMCkKKyNlbmRpZgorCit2b2lkIF9faW9tZW0gKnNiYzMxMF9yZWdzOworCitzdGF0aWMgdm9pZCBfX2luaXQgZ2VmX3NiYzMxMF9pbml0X2lycSh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqY2FzY2FkZV9ub2RlID0gTlVMTDsKKworCW1wYzg2eHhfaW5pdF9pcnEoKTsKKworCS8qCisJICogVGhlcmUgaXMgYSBzaW1wbGUgaW50ZXJydXB0IGhhbmRsZXIgaW4gdGhlIG1haW4gRlBHQSwgdGhpcyBuZWVkcworCSAqIHRvIGJlIGNhc2NhZGVkIGludG8gdGhlIE1QSUMKKwkgKi8KKwljYXNjYWRlX25vZGUgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCBOVUxMLCAiZ2VmLGZwZ2EtcGljIik7CisJaWYgKCFjYXNjYWRlX25vZGUpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiU0JDMzEwOiBObyBGUEdBIFBJQ1xuIik7CisJCXJldHVybjsKKwl9CisKKwlnZWZfcGljX2luaXQoY2FzY2FkZV9ub2RlKTsKKwlvZl9ub2RlX3B1dChjYXNjYWRlX25vZGUpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZ2VmX3NiYzMxMF9zZXR1cF9hcmNoKHZvaWQpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpyZWdzOworI2lmZGVmIENPTkZJR19QQ0kKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOworCisJZm9yX2VhY2hfY29tcGF0aWJsZV9ub2RlKG5wLCAicGNpIiwgImZzbCxtcGM4NjQxLXBjaWUiKSB7CisJCWZzbF9hZGRfYnJpZGdlKG5wLCAxKTsKKwl9CisjZW5kaWYKKworCXByaW50ayhLRVJOX0lORk8gIkdFIEZhbnVjIEludGVsbGlnZW50IFBsYXRmb3JtcyBTQkMzMTAgNlUgVlBYIFNCQ1xuIik7CisKKyNpZmRlZiBDT05GSUdfU01QCisJbXBjODZ4eF9zbXBfaW5pdCgpOworI2VuZGlmCisKKwkvKiBSZW1hcCBiYXNpYyBib2FyZCByZWdpc3RlcnMgKi8KKwlyZWdzID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgTlVMTCwgImdlZixmcGdhLXJlZ3MiKTsKKwlpZiAocmVncykgeworCQlzYmMzMTBfcmVncyA9IG9mX2lvbWFwKHJlZ3MsIDApOworCQlpZiAoc2JjMzEwX3JlZ3MgPT0gTlVMTCkKKwkJCXByaW50ayhLRVJOX1dBUk5JTkcgIlVuYWJsZSB0byBtYXAgYm9hcmQgcmVnaXN0ZXJzXG4iKTsKKwkJb2Zfbm9kZV9wdXQocmVncyk7CisJfQorfQorCisvKiBSZXR1cm4gdGhlIFBDQiByZXZpc2lvbiAqLworc3RhdGljIHVuc2lnbmVkIGludCBnZWZfc2JjMzEwX2dldF9ib2FyZF9pZCh2b2lkKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSBpb3JlYWQzMihzYmMzMTBfcmVncyk7CisJcmV0dXJuIHJlZyAmIDB4ZmY7Cit9CisKKy8qIFJldHVybiB0aGUgUENCIHJldmlzaW9uICovCitzdGF0aWMgdW5zaWduZWQgaW50IGdlZl9zYmMzMTBfZ2V0X3BjYl9yZXYodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJcmVnID0gaW9yZWFkMzIoc2JjMzEwX3JlZ3MpOworCXJldHVybiAocmVnID4+IDgpICYgMHhmZjsKK30KKworLyogUmV0dXJuIHRoZSBib2FyZCAoc29mdHdhcmUpIHJldmlzaW9uICovCitzdGF0aWMgdW5zaWduZWQgaW50IGdlZl9zYmMzMTBfZ2V0X2JvYXJkX3Jldih2b2lkKQoreworCXVuc2lnbmVkIGludCByZWc7CisKKwlyZWcgPSBpb3JlYWQzMihzYmMzMTBfcmVncyk7CisJcmV0dXJuIChyZWcgPj4gMTYpICYgMHhmZjsKK30KKworLyogUmV0dXJuIHRoZSBGUEdBIHJldmlzaW9uICovCitzdGF0aWMgdW5zaWduZWQgaW50IGdlZl9zYmMzMTBfZ2V0X2ZwZ2FfcmV2KHZvaWQpCit7CisJdW5zaWduZWQgaW50IHJlZzsKKworCXJlZyA9IGlvcmVhZDMyKHNiYzMxMF9yZWdzKTsKKwlyZXR1cm4gKHJlZyA+PiAyNCkgJiAweGY7Cit9CisKK3N0YXRpYyB2b2lkIGdlZl9zYmMzMTBfc2hvd19jcHVpbmZvKHN0cnVjdCBzZXFfZmlsZSAqbSkKK3sKKwl1aW50IHN2aWQgPSBtZnNwcihTUFJOX1NWUik7CisKKwlzZXFfcHJpbnRmKG0sICJWZW5kb3JcdFx0OiBHRSBGYW51YyBJbnRlbGxpZ2VudCBQbGF0Zm9ybXNcbiIpOworCisJc2VxX3ByaW50ZihtLCAiQm9hcmQgSURcdDogMHglMi4yeFxuIiwgZ2VmX3NiYzMxMF9nZXRfYm9hcmRfaWQoKSk7CisJc2VxX3ByaW50ZihtLCAiUmV2aXNpb25cdDogJXUlY1xuIiwgZ2VmX3NiYzMxMF9nZXRfcGNiX3JldigpLAorCQkoJ0EnICsgZ2VmX3NiYzMxMF9nZXRfYm9hcmRfcmV2KCkgLSAxKSk7CisJc2VxX3ByaW50ZihtLCAiRlBHQSBSZXZpc2lvblx0OiAldVxuIiwgZ2VmX3NiYzMxMF9nZXRfZnBnYV9yZXYoKSk7CisKKwlzZXFfcHJpbnRmKG0sICJTVlJcdFx0OiAweCV4XG4iLCBzdmlkKTsKKworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZ2VmX3NiYzMxMF9uZWNfZml4dXAoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJdW5zaWduZWQgaW50IHZhbDsKKworCS8qIERvIG5vdCBkbyB0aGUgZml4dXAgb24gb3RoZXIgcGxhdGZvcm1zISAqLworCWlmICghbWFjaGluZV9pcyhnZWZfc2JjMzEwKSkKKwkJcmV0dXJuOworCisJcHJpbnRrKEtFUk5fSU5GTyAiUnVubmluZyBORUMgdVBENzIwMTAxIEZpeHVwXG4iKTsKKworCS8qIEVuc3VyZSBvbmx5IHBvcnRzIDEgJiAyIGFyZSBlbmFibGVkICovCisJcGNpX3JlYWRfY29uZmlnX2R3b3JkKHBkZXYsIDB4ZTAsICZ2YWwpOworCXBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgMHhlMCwgKHZhbCAmIH43KSB8IDB4Mik7CisKKwkvKiBTeXN0ZW0gY2xvY2sgaXMgNDgtTUh6IE9zY2lsbGF0b3IgYW5kIEVIQ0kgRW5hYmxlZC4gKi8KKwlwY2lfd3JpdGVfY29uZmlnX2R3b3JkKHBkZXYsIDB4ZTQsIDEgPDwgNSk7Cit9CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoUENJX1ZFTkRPUl9JRF9ORUMsIFBDSV9ERVZJQ0VfSURfTkVDX1VTQiwKKwlnZWZfc2JjMzEwX25lY19maXh1cCk7CisKKy8qCisgKiBDYWxsZWQgdmVyeSBlYXJseSwgZGV2aWNlLXRyZWUgaXNuJ3QgdW5mbGF0dGVuZWQKKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBkZXRlcm1pbmUgd2hldGhlciB0aGUgQlNQIGlzIGNvbXBhdGlibGUgd2l0aCB0aGUKKyAqIHN1cHBsaWVkIGRldmljZS10cmVlLCB3aGljaCBpcyBhc3N1bWVkIHRvIGJlIHRoZSBjb3JyZWN0IG9uZSBmb3IgdGhlIGFjdHVhbAorICogYm9hcmQuIEl0IGlzIGV4cGVjdGVkIHRoYXRpLCBpbiB0aGUgZnV0dXJlLCBhIGtlcm5lbCBtYXkgc3VwcG9ydCBtdWx0aXBsZQorICogYm9hcmRzLgorICovCitzdGF0aWMgaW50IF9faW5pdCBnZWZfc2JjMzEwX3Byb2JlKHZvaWQpCit7CisJdW5zaWduZWQgbG9uZyByb290ID0gb2ZfZ2V0X2ZsYXRfZHRfcm9vdCgpOworCisJaWYgKG9mX2ZsYXRfZHRfaXNfY29tcGF0aWJsZShyb290LCAiZ2VmLHNiYzMxMCIpKQorCQlyZXR1cm4gMTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgbG9uZyBfX2luaXQgbXBjODZ4eF90aW1lX2luaXQodm9pZCkKK3sKKwl1bnNpZ25lZCBpbnQgdGVtcDsKKworCS8qIFNldCB0aGUgdGltZSBiYXNlIHRvIHplcm8gKi8KKwltdHNwcihTUFJOX1RCV0wsIDApOworCW10c3ByKFNQUk5fVEJXVSwgMCk7CisKKwl0ZW1wID0gbWZzcHIoU1BSTl9ISUQwKTsKKwl0ZW1wIHw9IEhJRDBfVEJFTjsKKwltdHNwcihTUFJOX0hJRDAsIHRlbXApOworCWFzbSB2b2xhdGlsZSgiaXN5bmMiKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgX19pbml0ZGF0YSBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIG9mX2J1c19pZHNbXSA9IHsKKwl7IC5jb21wYXRpYmxlID0gInNpbXBsZS1idXMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZ2lhbmZhciIsIH0sCisJe30sCit9OworCitzdGF0aWMgaW50IF9faW5pdCBkZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXModm9pZCkKK3sKKwlwcmludGsoS0VSTl9ERUJVRyAiUHJvYmUgcGxhdGZvcm0gZGV2aWNlc1xuIik7CisJb2ZfcGxhdGZvcm1fYnVzX3Byb2JlKE5VTEwsIG9mX2J1c19pZHMsIE5VTEwpOworCisJcmV0dXJuIDA7Cit9CittYWNoaW5lX2RldmljZV9pbml0Y2FsbChnZWZfc2JjMzEwLCBkZWNsYXJlX29mX3BsYXRmb3JtX2RldmljZXMpOworCitkZWZpbmVfbWFjaGluZShnZWZfc2JjMzEwKSB7CisJLm5hbWUJCQk9ICJHRSBGYW51YyBTQkMzMTAiLAorCS5wcm9iZQkJCT0gZ2VmX3NiYzMxMF9wcm9iZSwKKwkuc2V0dXBfYXJjaAkJPSBnZWZfc2JjMzEwX3NldHVwX2FyY2gsCisJLmluaXRfSVJRCQk9IGdlZl9zYmMzMTBfaW5pdF9pcnEsCisJLnNob3dfY3B1aW5mbwkJPSBnZWZfc2JjMzEwX3Nob3dfY3B1aW5mbywKKwkuZ2V0X2lycQkJPSBtcGljX2dldF9pcnEsCisJLnJlc3RhcnQJCT0gZnNsX3JzdGNyX3Jlc3RhcnQsCisJLnRpbWVfaW5pdAkJPSBtcGM4Nnh4X3RpbWVfaW5pdCwKKwkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKKwkucHJvZ3Jlc3MJCT0gdWRiZ19wcm9ncmVzcywKKyNpZmRlZiBDT05GSUdfUENJCisJLnBjaWJpb3NfZml4dXBfYnVzCT0gZnNsX3BjaWJpb3NfZml4dXBfYnVzLAorI2VuZGlmCit9OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9zYmM2MTAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9nZWZfc2JjNjEwLmMKaW5kZXggZDZiNzcyYi4uZWEyMzYwNiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L2dlZl9zYmM2MTAuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvZ2VmX3NiYzYxMC5jCkBAIC0xOTQsNiArMTk0LDcgQEAKIAogc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9mX2RldmljZV9pZCBvZl9idXNfaWRzW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2MTBfaHBjZC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2MTBfaHBjZC5jCmluZGV4IGU4ZDU0YWMuLjNmNDlhNmYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4NjEwX2hwY2QuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODYxMF9ocGNkLmMKQEAgLTQ2LDYgKzQ2LDcgQEAKIHN0YXRpYyBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIF9faW5pdGRhdGEgbXBjODYxMF9pZHNbXSA9IHsKIAl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM4NjEwLWltbXIiLCB9LAogCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKIAl7fQogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBjbi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L21wYzg2eHhfaHBjbi5jCmluZGV4IDI3ZTBlNjguLmM0ZWM0OWIgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvODZ4eC9tcGM4Nnh4X2hwY24uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvbXBjODZ4eF9ocGNuLmMKQEAgLTE0OCw2ICsxNDgsNyBAQAogc3RhdGljIF9faW5pdGRhdGEgc3RydWN0IG9mX2RldmljZV9pZCBvZl9idXNfaWRzW10gPSB7CiAJeyAuY29tcGF0aWJsZSA9ICJzaW1wbGUtYnVzIiwgfSwKIAl7IC5jb21wYXRpYmxlID0gImZzbCxyYXBpZGlvLWRlbHRhIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImdpYW5mYXIiLCB9LAogCXt9LAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy84Nnh4L3NiYzg2NDFkLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvc2JjODY0MWQuYwppbmRleCA1ZmQ3ZWQ0Li4yODg2YTM2IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvc2JjODY0MWQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zLzg2eHgvc2JjODY0MWQuYwpAQCAtMTAzLDYgKzEwMyw3IEBACiAKIHN0YXRpYyBfX2luaXRkYXRhIHN0cnVjdCBvZl9kZXZpY2VfaWQgb2ZfYnVzX2lkc1tdID0gewogCXsgLmNvbXBhdGlibGUgPSAic2ltcGxlLWJ1cyIsIH0sCisJeyAuY29tcGF0aWJsZSA9ICJnaWFuZmFyIiwgfSwKIAl7fSwKIH07CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZwppbmRleCAyMDBiOWNiLi5mZmEyYTlmIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnCkBAIC0xLDE0ICsxLDUgQEAKIG1lbnUgIlBsYXRmb3JtIHN1cHBvcnQiCiAKLWNvbmZpZyBQUENfTVVMVElQTEFURk9STQotCWJvb2wKLQlkZXBlbmRzIG9uIFBQQzY0IHx8IDZ4eAotCWRlZmF1bHQgeQotCi1jb25maWcgQ0xBU1NJQzMyCi0JZGVmX2Jvb2wgeQotCWRlcGVuZHMgb24gNnh4ICYmIFBQQ19NVUxUSVBMQVRGT1JNCi0KIHNvdXJjZSAiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWciCiBzb3VyY2UgImFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9LY29uZmlnIgogc291cmNlICJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvS2NvbmZpZyIKQEAgLTI4LDE1ICsxOSwyOCBAQAogc291cmNlICJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L0tjb25maWciCiBzb3VyY2UgImFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDR4L0tjb25maWciCiBzb3VyY2UgImFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvNDB4L0tjb25maWciCitzb3VyY2UgImFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvYW1pZ2FvbmUvS2NvbmZpZyIKIAogY29uZmlnIFBQQ19OQVRJVkUKIAlib29sCi0JZGVwZW5kcyBvbiBQUENfTVVMVElQTEFURk9STQorCWRlcGVuZHMgb24gNnh4IHx8IFBQQzY0CiAJaGVscAogCSAgU3VwcG9ydCBmb3IgcnVubmluZyBuYXRpdmVseSBvbiB0aGUgaGFyZHdhcmUsIGkuZS4gd2l0aG91dAogCSAgYSBoeXBlcnZpc29yLiBUaGlzIG9wdGlvbiBpcyBub3QgdXNlci1zZWxlY3RhYmxlIGJ1dCBzaG91bGQKIAkgIGJlIHNlbGVjdGVkIGJ5IGFsbCBwbGF0Zm9ybXMgdGhhdCBuZWVkIGl0LgogCitjb25maWcgUFBDX09GX0JPT1RfVFJBTVBPTElORQorCWJvb2wgIlN1cHBvcnQgYm9vdGluZyBmcm9tIE9wZW4gRmlybXdhcmUgb3IgeWFib290IgorCWRlcGVuZHMgb24gNnh4IHx8IFBQQzY0CisJZGVmYXVsdCB5CisJaGVscAorCSAgU3VwcG9ydCBmcm9tIGJvb3RpbmcgZnJvbSBPcGVuIEZpcm13YXJlIG9yIHlhYm9vdCB1c2luZyBhbgorCSAgT3BlbiBGaXJtd2FyZSBjbGllbnQgaW50ZXJmYWNlLiBUaGlzIGVuYWJsZXMgdGhlIGtlcm5lbCB0bworCSAgY29tbXVuaWNhdGUgd2l0aCBvcGVuIGZpcm13YXJlIHRvIHJldHJpZXZlIHN5c3RlbSBpbmZvcm1hdGlvbnMKKwkgIHN1Y2ggYXMgdGhlIGRldmljZSB0cmVlLgorCisJICBJbiBjYXNlIG9mIGRvdWJ0LCBzYXkgWQorCiBjb25maWcgVURCR19SVEFTX0NPTlNPTEUKIAlib29sICJSVEFTIGJhc2VkIGRlYnVnIGNvbnNvbGUiCiAJZGVwZW5kcyBvbiBQUENfUlRBUwpAQCAtNzAsNyArNzQsNyBAQAogCiBjb25maWcgVTNfREFSVAogCWJvb2wKLQlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzY0CisJZGVwZW5kcyBvbiBQUEM2NAogCWRlZmF1bHQgbgogCiBjb25maWcgUFBDX1JUQVMKQEAgLTkxLDE1ICs5NSw2IEBACiAJdHJpc3RhdGUgIkZpcm13YXJlIGZsYXNoIGludGVyZmFjZSIKIAlkZXBlbmRzIG9uIFBQQzY0ICYmIFJUQVNfUFJPQwogCi1jb25maWcgUFBDX1BNSQotCXRyaXN0YXRlICJTdXBwb3J0IGZvciBQTUkiCi0JZGVwZW5kcyBvbiBQUENfSUJNX0NFTExfQkxBREUKLQloZWxwCi0JICBQTUkgKFBsYXRmb3JtIE1hbmFnZW1lbnQgSW50ZXJydXB0KSBpcyBhIHdheSB0bwotCSAgY29tbXVuaWNhdGUgd2l0aCB0aGUgQk1DIChCYXNlYm9hcmQgTWFuYWdlbWVudCBDb250cm9sbGVyKS4KLQkgIEl0IGlzIHVzZWQgaW4gc29tZSBJQk0gQ2VsbCBibGFkZXMuCi0JZGVmYXVsdCBtCi0KIGNvbmZpZyBNTUlPX05WUkFNCiAJYm9vbAogCWRlZmF1bHQgbgpAQCAtMTk2LDcgKzE5MSw3IEBACiAKIGNvbmZpZyBUQVUKIAlib29sICJPbi1jaGlwIENQVSB0ZW1wZXJhdHVyZSBzZW5zb3Igc3VwcG9ydCIKLQlkZXBlbmRzIG9uIENMQVNTSUMzMgorCWRlcGVuZHMgb24gNnh4CiAJaGVscAogCSAgRzMgYW5kIEc0IHByb2Nlc3NvcnMgaGF2ZSBhbiBvbi1jaGlwIHRlbXBlcmF0dXJlIHNlbnNvciBjYWxsZWQgdGhlCiAJICAnVGhlcm1hbCBBc3Npc3QgVW5pdCAoVEFVKScsIHdoaWNoLCBpbiB0aGVvcnksIGNhbiBtZWFzdXJlIHRoZSBvbi1kaWUKQEAgLTI3NCw3ICsyNjksNyBAQAogCiBjb25maWcgQVhPTl9SQU0KIAl0cmlzdGF0ZSAiQXhvbiBERFIyIG1lbW9yeSBkZXZpY2UgZHJpdmVyIgotCWRlcGVuZHMgb24gUFBDX0lCTV9DRUxMX0JMQURFCisJZGVwZW5kcyBvbiBQUENfSUJNX0NFTExfQkxBREUgJiYgQkxPQ0sKIAlkZWZhdWx0IG0KIAloZWxwCiAJICBJdCByZWdpc3RlcnMgb25lIGJsb2NrIGRldmljZSBwZXIgQXhvbidzIEREUjIgbWVtb3J5IGJhbmsgZm91bmQKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZy5jcHV0eXBlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUKaW5kZXggZTg2OGI1Yy4uOWRhNzk1ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnLmNwdXR5cGUKQEAgLTU3LDkgKzU3LDE3IEBACiAKIGVuZGNob2ljZQogCisjIFVudGlsIHdlIGhhdmUgYSBjaG9pY2Ugb2YgZXhjbHVzaXZlIENQVSB0eXBlcyBvbiA2NC1iaXQsIHdlIGFsd2F5cworIyB1c2UgUFBDX0JPT0szUy4gT24gMzItYml0LCB0aGlzIGlzIGVxdWl2YWxlbnQgdG8gNnh4IHdoaWNoIGlzCisjICJjbGFzc2ljIiBNTVUKKworY29uZmlnIFBQQ19CT09LM1MKKyAgICAgICBkZWZfYm9vbCB5CisgICAgICAgZGVwZW5kcyBvbiBQUEM2NCB8fCA2eHgKKwogY29uZmlnIFBPV0VSNF9PTkxZCiAJYm9vbCAiT3B0aW1pemUgZm9yIFBPV0VSNCIKLQlkZXBlbmRzIG9uIFBQQzY0CisJZGVwZW5kcyBvbiBQUEM2NCAmJiBQUENfQk9PSzNTCiAJZGVmYXVsdCBuCiAJLS0taGVscC0tLQogCSAgQ2F1c2UgdGhlIGNvbXBpbGVyIHRvIG9wdGltaXplIGZvciBQT1dFUjQvUE9XRVI1L1BQQzk3MCBwcm9jZXNzb3JzLgpAQCAtNjgsMTYgKzc2LDE2IEBACiAKIGNvbmZpZyBQT1dFUjMKIAlib29sCi0JZGVwZW5kcyBvbiBQUEM2NAorCWRlcGVuZHMgb24gUFBDNjQgJiYgUFBDX0JPT0szUwogCWRlZmF1bHQgeSBpZiAhUE9XRVI0X09OTFkKIAogY29uZmlnIFBPV0VSNAotCWRlcGVuZHMgb24gUFBDNjQKKwlkZXBlbmRzIG9uIFBQQzY0ICYmIFBQQ19CT09LM1MKIAlkZWZfYm9vbCB5CiAKIGNvbmZpZyBUVU5FX0NFTEwKIAlib29sICJPcHRpbWl6ZSBmb3IgQ2VsbCBCcm9hZGJhbmQgRW5naW5lIgotCWRlcGVuZHMgb24gUFBDNjQKKwlkZXBlbmRzIG9uIFBQQzY0ICYmIFBQQ19CT09LM1MKIAloZWxwCiAJICBDYXVzZSB0aGUgY29tcGlsZXIgdG8gb3B0aW1pemUgZm9yIHRoZSBQUEUgb2YgdGhlIENlbGwgQnJvYWRiYW5kCiAJICBFbmdpbmUuIFRoaXMgd2lsbCBtYWtlIHRoZSBjb2RlIHJ1biBjb25zaWRlcmFibHkgZmFzdGVyIG9uIENlbGwKQEAgLTE0Nyw3ICsxNTUsNyBAQAogCiBjb25maWcgQUxUSVZFQwogCWJvb2wgIkFsdGlWZWMgU3VwcG9ydCIKLQlkZXBlbmRzIG9uIENMQVNTSUMzMiB8fCBQT1dFUjQKKwlkZXBlbmRzIG9uIDZ4eCB8fCBQT1dFUjQKIAktLS1oZWxwLS0tCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIGtlcm5lbCBzdXBwb3J0IGZvciB0aGUgQWx0aXZlYyBleHRlbnNpb25zIHRvIHRoZQogCSAgUG93ZXJQQyBwcm9jZXNzb3IuIFRoZSBrZXJuZWwgY3VycmVudGx5IHN1cHBvcnRzIHNhdmluZyBhbmQgcmVzdG9yaW5nCkBAIC0yMTAsNiArMjE4LDEwIEBACiAJZGVmX2Jvb2wgeQogCWRlcGVuZHMgb24gIVBQQ19TVERfTU1VCiAKK2NvbmZpZyBQUENfQk9PSzNFX01NVQorCWRlZl9ib29sIHkKKwlkZXBlbmRzIG9uIEZTTF9CT09LRQorCiBjb25maWcgUFBDX01NX1NMSUNFUwogCWJvb2wKIAlkZWZhdWx0IHkgaWYgSFVHRVRMQl9QQUdFIHx8IChQUENfU1REX01NVV82NCAmJiBQUENfNjRLX1BBR0VTKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvTWFrZWZpbGUKaW5kZXggODA3OWUwYi4uZjc0MTkxOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL01ha2VmaWxlCkBAIC0xOSwzICsxOSw0IEBACiBvYmotJChDT05GSUdfUFBDX0NFTEwpCQkrPSBjZWxsLwogb2JqLSQoQ09ORklHX1BQQ19QUzMpCQkrPSBwczMvCiBvYmotJChDT05GSUdfRU1CRURERUQ2eHgpCSs9IGVtYmVkZGVkNnh4Lworb2JqLSQoQ09ORklHX0FNSUdBT05FKQkJKz0gYW1pZ2FvbmUvCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2FtaWdhb25lL0tjb25maWcgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2FtaWdhb25lL0tjb25maWcKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMDIyNDc2NwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvYW1pZ2FvbmUvS2NvbmZpZwpAQCAtMCwwICsxLDE4IEBACitjb25maWcgQU1JR0FPTkUKKwlib29sICJFeWV0ZWNoIEFtaWdhT25lL01BSSBUZXJvbiIKKwlkZXBlbmRzIG9uIDZ4eCAmJiBCUk9LRU5fT05fU01QCisJc2VsZWN0IFBQQ19JODI1OQorCXNlbGVjdCBQUENfSU5ESVJFQ1RfUENJCisJc2VsZWN0IFBQQ19VREJHXzE2NTUwCisJc2VsZWN0IFBDSQorCXNlbGVjdCBOT1RfQ09IRVJFTlRfQ0FDSEUKKwlzZWxlY3QgQ0hFQ0tfQ0FDSEVfQ09IRVJFTkNZCisJc2VsZWN0IERFRkFVTFRfVUlNQUdFCisJc2VsZWN0IFBDU1BLUl9QTEFURk9STQorCWhlbHAKKwlTZWxlY3QgQW1pZ2FPbmUgZm9yIHRoZSBmb2xsb3dpbmcgbWFjaGluZXM6CisJLSBBbWlnYU9uZSBTRS9UZXJvbiBDWCAoRzMgb25seSkKKwktIEFtaWdhT25lIFhFL1Rlcm9uIFBYCisJLSB1QTEvVGVyb24gbWluaQorCSAgTW9yZSBpbmZvcm1hdGlvbiBpcyBhdmFpbGFibGUgYXQ6CisJICA8aHR0cDovL2FtaWdhb25lLWxpbnV4LnNvdXJjZWZvcmdlLm5ldC8+LgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9hbWlnYW9uZS9NYWtlZmlsZSBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvYW1pZ2FvbmUvTWFrZWZpbGUKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTY4ODViMwotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvYW1pZ2FvbmUvTWFrZWZpbGUKQEAgLTAsMCArMSBAQAorb2JqLXkJKz0gc2V0dXAubwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9hbWlnYW9uZS9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9hbWlnYW9uZS9zZXR1cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjQ0MzAzNTMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2FtaWdhb25lL3NldHVwLmMKQEAgLTAsMCArMSwxNzAgQEAKKy8qCisgKiBBbWlnYU9uZSBwbGF0Zm9ybSBzZXR1cAorICoKKyAqIENvcHlyaWdodCAyMDA4IEdlcmhhcmQgUGlyY2hlciAoZ2VyaGFyZF9waXJjaGVyQGdteC5uZXQpCisgKgorICogICBCYXNlZCBvbiBvcmlnaW5hbCBhbWlnYW9uZV9zZXR1cC5jIHNvdXJjZSBjb2RlCisgKiBDb3B5cmlnaHQgMjAwMyBieSBIYW5zLUpvZXJnIEZyaWVkZW4gYW5kIFRob21hcyBGcmllZGVuCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlICBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciAgdGhlIHRlcm1zIG9mICB0aGUgR05VIEdlbmVyYWwgIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUKKyAqIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgIGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlICBMaWNlbnNlLCBvciAoYXQgeW91cgorICogb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KKyNpbmNsdWRlIDxsaW51eC91dHNyZWxlYXNlLmg+CisKKyNpbmNsdWRlIDxhc20vbWFjaGRlcC5oPgorI2luY2x1ZGUgPGFzbS9jcHV0YWJsZS5oPgorI2luY2x1ZGUgPGFzbS9wcm9tLmg+CisjaW5jbHVkZSA8YXNtL3BjaS1icmlkZ2UuaD4KKyNpbmNsdWRlIDxhc20vaTgyNTkuaD4KKyNpbmNsdWRlIDxhc20vdGltZS5oPgorI2luY2x1ZGUgPGFzbS91ZGJnLmg+CisKK2V4dGVybiB2b2lkIF9fZmx1c2hfZGlzYWJsZV9MMSh2b2lkKTsKKwordm9pZCBhbWlnYW9uZV9zaG93X2NwdWluZm8oc3RydWN0IHNlcV9maWxlICptKQoreworCXNlcV9wcmludGYobSwgInZlbmRvclx0XHQ6IEV5ZXRlY2ggTHRkLlxuIik7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGFtaWdhb25lX2FkZF9icmlkZ2Uoc3RydWN0IGRldmljZV9ub2RlICpkZXYpCit7CisJY29uc3QgdTMyICpjZmdfYWRkciwgKmNmZ19kYXRhOworCWludCBsZW47CisJY29uc3QgaW50ICpidXNfcmFuZ2U7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOworCisJcHJpbnRrKEtFUk5fSU5GTyAiQWRkaW5nIFBDSSBob3N0IGJyaWRnZSAlc1xuIiwgZGV2LT5mdWxsX25hbWUpOworCisJY2ZnX2FkZHIgPSBvZl9nZXRfYWRkcmVzcyhkZXYsIDAsIE5VTEwsIE5VTEwpOworCWNmZ19kYXRhID0gb2ZfZ2V0X2FkZHJlc3MoZGV2LCAxLCBOVUxMLCBOVUxMKTsKKwlpZiAoKGNmZ19hZGRyID09IE5VTEwpIHx8IChjZmdfZGF0YSA9PSBOVUxMKSkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlidXNfcmFuZ2UgPSBvZl9nZXRfcHJvcGVydHkoZGV2LCAiYnVzLXJhbmdlIiwgJmxlbik7CisJaWYgKChidXNfcmFuZ2UgPT0gTlVMTCkgfHwgKGxlbiA8IDIgKiBzaXplb2YoaW50KSkpCisJCXByaW50ayhLRVJOX1dBUk5JTkcgIkNhbid0IGdldCBidXMtcmFuZ2UgZm9yICVzLCBhc3N1bWUiCisJCSAgICAgICAiIGJ1cyAwXG4iLCBkZXYtPmZ1bGxfbmFtZSk7CisKKwlob3NlID0gcGNpYmlvc19hbGxvY19jb250cm9sbGVyKGRldik7CisJaWYgKGhvc2UgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlob3NlLT5maXJzdF9idXNubyA9IGJ1c19yYW5nZSA/IGJ1c19yYW5nZVswXSA6IDA7CisJaG9zZS0+bGFzdF9idXNubyA9IGJ1c19yYW5nZSA/IGJ1c19yYW5nZVsxXSA6IDB4ZmY7CisKKwlzZXR1cF9pbmRpcmVjdF9wY2koaG9zZSwgY2ZnX2FkZHJbMF0sIGNmZ19kYXRhWzBdLCAwKTsKKworCS8qIEludGVycHJldCB0aGUgInJhbmdlcyIgcHJvcGVydHkgKi8KKwkvKiBUaGlzIGFsc28gbWFwcyB0aGUgSS9PIHJlZ2lvbiBhbmQgc2V0cyBpc2FfaW8vbWVtX2Jhc2UgKi8KKwlwY2lfcHJvY2Vzc19icmlkZ2VfT0ZfcmFuZ2VzKGhvc2UsIGRldiwgMSk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBfX2luaXQgYW1pZ2FvbmVfc2V0dXBfYXJjaCh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7CisJaW50IHBoYiA9IC1FTk9ERVY7CisKKwkvKiBMb29rdXAgUENJIGhvc3QgYnJpZGdlcy4gKi8KKwlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsICJwY2kiLCAibWFpLWxvZ2ljLGFydGljaWEtcyIpCisJCXBoYiA9IGFtaWdhb25lX2FkZF9icmlkZ2UobnApOworCisJQlVHX09OKHBoYiAhPSAwKTsKKworCWlmIChwcGNfbWQucHJvZ3Jlc3MpCisJCXBwY19tZC5wcm9ncmVzcygiTGludXgvUFBDICJVVFNfUkVMRUFTRSJcbiIsIDApOworfQorCit2b2lkIF9faW5pdCBhbWlnYW9uZV9pbml0X0lSUSh2b2lkKQoreworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcGljLCAqbnAgPSBOVUxMOworCWNvbnN0IHVuc2lnbmVkIGxvbmcgKnByb3AgPSBOVUxMOworCXVuc2lnbmVkIGxvbmcgaW50X2FjayA9IDA7CisKKwkvKiBTZWFyY2ggZm9yIElTQSBpbnRlcnJ1cHQgY29udHJvbGxlci4gKi8KKwlwaWMgPSBvZl9maW5kX2NvbXBhdGlibGVfbm9kZShOVUxMLCAiaW50ZXJydXB0LWNvbnRyb2xsZXIiLAorCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwbnBQTlAsMDAwIik7CisJQlVHX09OKHBpYyA9PSBOVUxMKTsKKworCS8qIExvb2sgZm9yIGludGVycnVwdCBhY2tub3dsZWRnZSBhZGRyZXNzIGluIHRoZSBQQ0kgcm9vdCBub2RlLiAqLworCW5wID0gb2ZfZmluZF9jb21wYXRpYmxlX25vZGUoTlVMTCwgInBjaSIsICJtYWktbG9naWMsYXJ0aWNpYS1zIik7CisJaWYgKG5wKSB7CisJCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICI4MjU5LWludGVycnVwdC1hY2tub3dsZWRnZSIsIE5VTEwpOworCQlpZiAocHJvcCkKKwkJCWludF9hY2sgPSBwcm9wWzBdOworCQlvZl9ub2RlX3B1dChucCk7CisJfQorCisJaWYgKGludF9hY2sgPT0gMCkKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ2Fubm90IGZpbmQgUENJIGludGVycnVwdCBhY2tub3dsZWRnZSIKKwkJICAgICAgICIgYWRkcmVzcywgcG9sbGluZ1xuIik7CisKKwlpODI1OV9pbml0KHBpYywgaW50X2Fjayk7CisJcHBjX21kLmdldF9pcnEgPSBpODI1OV9pcnE7CisJaXJxX3NldF9kZWZhdWx0X2hvc3QoaTgyNTlfZ2V0X2hvc3QoKSk7Cit9CisKK3ZvaWQgX19pbml0IGFtaWdhb25lX2luaXQodm9pZCkKK3sKKwlyZXF1ZXN0X3JlZ2lvbigweDAwLCAweDIwLCAiZG1hMSIpOworCXJlcXVlc3RfcmVnaW9uKDB4NDAsIDB4MjAsICJ0aW1lciIpOworCXJlcXVlc3RfcmVnaW9uKDB4ODAsIDB4MTAsICJkbWEgcGFnZSByZWciKTsKKwlyZXF1ZXN0X3JlZ2lvbigweGMwLCAweDIwLCAiZG1hMiIpOworfQorCit2b2lkIGFtaWdhb25lX3Jlc3RhcnQoY2hhciAqY21kKQoreworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisKKwkvKiBGbHVzaCBhbmQgZGlzYWJsZSBjYWNoZXMuICovCisJX19mbHVzaF9kaXNhYmxlX0wxKCk7CisKKyAgICAgICAgLyogU2V0IFNSUjAgdG8gdGhlIHJlc2V0IHZlY3RvciBhbmQgdHVybiBvbiBNU1JfSVAuICovCisJbXRzcHIoU1BSTl9TUlIwLCAweGZmZjAwMTAwKTsKKwltdHNwcihTUFJOX1NSUjEsIE1TUl9JUCk7CisKKwkvKiBEbyBhbiByZmkgdG8ganVtcCBiYWNrIHRvIGZpcm13YXJlLiAqLworCV9fYXNtX18gX192b2xhdGlsZV9fKCJyZmkiIDogOiA6ICJtZW1vcnkiKTsKKworCS8qIE5vdCByZWFjaGVkLiAqLworCXdoaWxlICgxKTsKK30KKworc3RhdGljIGludCBfX2luaXQgYW1pZ2FvbmVfcHJvYmUodm9pZCkKK3sKKwl1bnNpZ25lZCBsb25nIHJvb3QgPSBvZl9nZXRfZmxhdF9kdF9yb290KCk7CisKKwlpZiAob2ZfZmxhdF9kdF9pc19jb21wYXRpYmxlKHJvb3QsICJleWV0ZWNoLGFtaWdhb25lIikpIHsKKwkJLyoKKwkJICogQ29oZXJlbnQgbWVtb3J5IGFjY2VzcyBjYXVzZSBjb21wbGV0ZSBzeXN0ZW0gbG9ja3VwISBUaHVzCisJCSAqIGRpc2FibGUgdGhpcyBDUFUgZmVhdHVyZSwgZXZlbiBpZiB0aGUgQ1BVIG5lZWRzIGl0LgorCQkgKi8KKwkJY3VyX2NwdV9zcGVjLT5jcHVfZmVhdHVyZXMgJj0gfkNQVV9GVFJfTkVFRF9DT0hFUkVOVDsKKworCQlJU0FfRE1BX1RIUkVTSE9MRCA9IDB4MDBmZmZmZmY7CisJCURNQV9NT0RFX1JFQUQgPSAweDQ0OworCQlETUFfTU9ERV9XUklURSA9IDB4NDg7CisKKwkJcmV0dXJuIDE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2RlZmluZV9tYWNoaW5lKGFtaWdhb25lKSB7CisJLm5hbWUJCQk9ICJBbWlnYU9uZSIsCisJLnByb2JlCQkJPSBhbWlnYW9uZV9wcm9iZSwKKwkuc2V0dXBfYXJjaAkJPSBhbWlnYW9uZV9zZXR1cF9hcmNoLAorCS5pbml0CQkJPSBhbWlnYW9uZV9pbml0LAorCS5zaG93X2NwdWluZm8JCT0gYW1pZ2FvbmVfc2hvd19jcHVpbmZvLAorCS5pbml0X0lSUQkJPSBhbWlnYW9uZV9pbml0X0lSUSwKKwkucmVzdGFydAkJPSBhbWlnYW9uZV9yZXN0YXJ0LAorCS5jYWxpYnJhdGVfZGVjcgkJPSBnZW5lcmljX2NhbGlicmF0ZV9kZWNyLAorCS5wcm9ncmVzcwkJPSB1ZGJnX3Byb2dyZXNzLAorfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcKaW5kZXggNWNjMzI3OS4uNDBlMjRjMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL0tjb25maWcKQEAgLTIzLDcgKzIzLDcgQEAKIAogY29uZmlnIFBQQ19JQk1fQ0VMTF9CTEFERQogCWJvb2wgIklCTSBDZWxsIEJsYWRlIgotCWRlcGVuZHMgb24gUFBDX01VTFRJUExBVEZPUk0gJiYgUFBDNjQKKwlkZXBlbmRzIG9uIFBQQzY0ICYmIFBQQ19CT09LM1MKIAlzZWxlY3QgUFBDX0NFTExfTkFUSVZFCiAJc2VsZWN0IE1NSU9fTlZSQU0KIAlzZWxlY3QgUFBDX1VEQkdfMTY1NTAKQEAgLTMxLDcgKzMxLDcgQEAKIAogY29uZmlnIFBQQ19DRUxMRUIKIAlib29sICJUb3NoaWJhJ3MgQ2VsbCBSZWZlcmVuY2UgU2V0ICdDZWxsZWInIEFyY2hpdGVjdHVyZSIKLQlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzY0CisJZGVwZW5kcyBvbiBQUEM2NCAmJiBQUENfQk9PSzNTCiAJc2VsZWN0IFBQQ19DRUxMX05BVElWRQogCXNlbGVjdCBIQVNfVFhYOV9TRVJJQUwKIAlzZWxlY3QgUFBDX1VEQkdfQkVBVApAQCAtNDAsOSArNDAsMTQgQEAKIAogY29uZmlnIFBQQ19DRUxMX1FQQUNFCiAJYm9vbCAiSUJNIENlbGwgLSBRUEFDRSIKLQlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzY0CisJZGVwZW5kcyBvbiBQUEM2NCAmJiBQUENfQk9PSzNTCiAJc2VsZWN0IFBQQ19DRUxMX0NPTU1PTgogCitjb25maWcgQVhPTl9NU0kKKwlib29sCisJZGVwZW5kcyBvbiBQUENfSUJNX0NFTExfQkxBREUgJiYgUENJX01TSQorCWRlZmF1bHQgeQorCiBtZW51ICJDZWxsIEJyb2FkYmFuZCBFbmdpbmUgb3B0aW9ucyIKIAlkZXBlbmRzIG9uIFBQQ19DRUxMCiAKQEAgLTk4LDcgKzEwMyw3IEBACiAKIGNvbmZpZyBQUENfSUJNX0NFTExfUE9XRVJCVVRUT04KIAl0cmlzdGF0ZSAiSUJNIENlbGwgQmxhZGUgcG93ZXIgYnV0dG9uIgotCWRlcGVuZHMgb24gUFBDX0lCTV9DRUxMX0JMQURFICYmIFBQQ19QTUkgJiYgSU5QVVRfRVZERVYKKwlkZXBlbmRzIG9uIFBQQ19JQk1fQ0VMTF9CTEFERSAmJiBJTlBVVF9FVkRFVgogCWRlZmF1bHQgeQogCWhlbHAKIAkgIFN1cHBvcnQgUG93ZXJidXR0b24gb24gSUJNIENlbGwgYmxhZGVzLgpAQCAtMTE4LDkgKzEyMyw5IEBACiAJICBGb3IgZGV0YWlscywgdGFrZSBhIGxvb2sgYXQgPGZpbGU6RG9jdW1lbnRhdGlvbi9jcHUtZnJlcS8+LgogCSAgSWYgeW91IGRvbid0IGhhdmUgc3VjaCBwcm9jZXNzb3IsIHNheSBOCiAKLWNvbmZpZyBDQkVfQ1BVRlJFUV9QTUkKLQl0cmlzdGF0ZSAiQ0JFIGZyZXF1ZW5jeSBzY2FsaW5nIHVzaW5nIFBNSSBpbnRlcmZhY2UiCi0JZGVwZW5kcyBvbiBDQkVfQ1BVRlJFUSAmJiBQUENfUE1JICYmIEVYUEVSSU1FTlRBTAorY29uZmlnIENCRV9DUFVGUkVRX1BNSV9FTkFCTEUKKwlib29sICJDQkUgZnJlcXVlbmN5IHNjYWxpbmcgdXNpbmcgUE1JIGludGVyZmFjZSIKKwlkZXBlbmRzIG9uIENCRV9DUFVGUkVRICYmIEVYUEVSSU1FTlRBTAogCWRlZmF1bHQgbgogCWhlbHAKIAkgIFNlbGVjdCB0aGlzLCBpZiB5b3Ugd2FudCB0byB1c2UgdGhlIFBNSSBpbnRlcmZhY2UKQEAgLTEyOCw2ICsxMzMsMjAgQEAKIAkgIHByb2Nlc3NvciB3aWxsIG5vdCBvbmx5IGJlIGFibGUgdG8gcnVuIGF0IGxvd2VyIHNwZWVkLAogCSAgYnV0IGFsc28gYXQgbG93ZXIgY29yZSB2b2x0YWdlLgogCitjb25maWcgQ0JFX0NQVUZSRVFfUE1JCisJdHJpc3RhdGUKKwlkZXBlbmRzIG9uIENCRV9DUFVGUkVRX1BNSV9FTkFCTEUKKwlkZWZhdWx0IENCRV9DUFVGUkVRCisKK2NvbmZpZyBQUENfUE1JCisJdHJpc3RhdGUKKwlkZWZhdWx0IHkKKwlkZXBlbmRzIG9uIENCRV9DUFVGUkVRX1BNSSB8fCBQUENfSUJNX0NFTExfUE9XRVJCVVRUT04KKwloZWxwCisJICBQTUkgKFBsYXRmb3JtIE1hbmFnZW1lbnQgSW50ZXJydXB0KSBpcyBhIHdheSB0bworCSAgY29tbXVuaWNhdGUgd2l0aCB0aGUgQk1DIChCYXNlYm9hcmQgTWFuYWdlbWVudCBDb250cm9sbGVyKS4KKwkgIEl0IGlzIHVzZWQgaW4gc29tZSBJQk0gQ2VsbCBibGFkZXMuCisKIGNvbmZpZyBDQkVfQ1BVRlJFUV9TUFVfR09WRVJOT1IKIAl0cmlzdGF0ZSAiQ0JFIGZyZXF1ZW5jeSBzY2FsaW5nIGJhc2VkIG9uIFNQVSB1c2FnZSIKIAlkZXBlbmRzIG9uIFNQVV9GUyAmJiBDUFVfRlJFUQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL01ha2VmaWxlIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL01ha2VmaWxlCmluZGV4IDQzZWNjYjIuLjgzZmFmZTkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9NYWtlZmlsZQorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvTWFrZWZpbGUKQEAgLTI4LDcgKzI4LDcgQEAKIAkJCQkJICAgJChzcHUtbWFuYWdlLXkpIFwKIAkJCQkJICAgc3B1ZnMvCiAKLW9iai0kKENPTkZJR19QQ0lfTVNJKQkJCSs9IGF4b25fbXNpLm8KK29iai0kKENPTkZJR19BWE9OX01TSSkJCQkrPSBheG9uX21zaS5vCiAKICMgcXBhY2Ugc2V0dXAKIG9iai0kKENPTkZJR19QUENfQ0VMTF9RUEFDRSkJCSs9IHFwYWNlX3NldHVwLm8KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pby13b3JrYXJvdW5kcy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvLXdvcmthcm91bmRzLmMKaW5kZXggMDU5Y2FkNi4uNWMxMTE4ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvLXdvcmthcm91bmRzLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL2lvLXdvcmthcm91bmRzLmMKQEAgLTEzMSwxMCArMTMxLDEwIEBACiB9OwogCiBzdGF0aWMgdm9pZCBfX2lvbWVtICppb3dhX2lvcmVtYXAocGh5c19hZGRyX3QgYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLAotCQkJCQkJdW5zaWduZWQgbG9uZyBmbGFncykKKwkJCQkgIHVuc2lnbmVkIGxvbmcgZmxhZ3MsIHZvaWQgKmNhbGxlcikKIHsKIAlzdHJ1Y3QgaW93YV9idXMgKmJ1czsKLQl2b2lkIF9faW9tZW0gKnJlcyA9IF9faW9yZW1hcChhZGRyLCBzaXplLCBmbGFncyk7CisJdm9pZCBfX2lvbWVtICpyZXMgPSBfX2lvcmVtYXBfY2FsbGVyKGFkZHIsIHNpemUsIGZsYWdzLCBjYWxsZXIpOwogCWludCBidXNubzsKIAogCWJ1cyA9IGlvd2FfcGNpX2ZpbmQoMCwgKHVuc2lnbmVkIGxvbmcpYWRkcik7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvaW9tbXUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jCmluZGV4IGVlNTAzM2UuLjU3NDQ1MjcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9pb21tdS5jCkBAIC03NCw3ICs3NCw3IEBACiAjZGVmaW5lIElPQ19JT19FeGNwU3RhdF9WCQkweDgwMDAwMDAwMDAwMDAwMDB1bAogI2RlZmluZSBJT0NfSU9fRXhjcFN0YXRfU1BGX01hc2sJMHg2MDAwMDAwMDAwMDAwMDAwdWwKICNkZWZpbmUgSU9DX0lPX0V4Y3BTdGF0X1NQRl9TCQkweDYwMDAwMDAwMDAwMDAwMDB1bAotI2RlZmluZSBJT0NfSU9fRXhjcFN0YXRfU1BGX1AJCTB4NDAwMDAwMDAwMDAwMDAwMHVsCisjZGVmaW5lIElPQ19JT19FeGNwU3RhdF9TUEZfUAkJMHgyMDAwMDAwMDAwMDAwMDAwdWwKICNkZWZpbmUgSU9DX0lPX0V4Y3BTdGF0X0FERFJfTWFzawkweDAwMDAwMDA3ZmZmZmYwMDB1bAogI2RlZmluZSBJT0NfSU9fRXhjcFN0YXRfUldfTWFzawkJMHgwMDAwMDAwMDAwMDAwODAwdWwKICNkZWZpbmUgSU9DX0lPX0V4Y3BTdGF0X0lPSURfTWFzawkweDAwMDAwMDAwMDAwMDA3ZmZ1bApAQCAtMjQ3LDE3ICsyNDcsMTggQEAKIAogc3RhdGljIGlycXJldHVybl90IGlvY19pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGF0YSkKIHsKLQl1bnNpZ25lZCBsb25nIHN0YXQ7CisJdW5zaWduZWQgbG9uZyBzdGF0LCBzcGY7CiAJc3RydWN0IGNiZV9pb21tdSAqaW9tbXUgPSBkYXRhOwogCiAJc3RhdCA9IGluX2JlNjQoaW9tbXUtPnhsYXRlX3JlZ3MgKyBJT0NfSU9fRXhjcFN0YXQpOworCXNwZiA9IHN0YXQgJiBJT0NfSU9fRXhjcFN0YXRfU1BGX01hc2s7CiAKIAkvKiBNaWdodCB3YW50IHRvIHJhdGUgbGltaXQgaXQgKi8KIAlwcmludGsoS0VSTl9FUlIgImlvbW11OiBETUEgZXhjZXB0aW9uIDB4JTAxNmx4XG4iLCBzdGF0KTsKIAlwcmludGsoS0VSTl9FUlIgIiAgVj0lZCwgU1BGPVslYyVjXSwgUlc9JXMsIElPSUQ9MHglMDR4XG4iLAogCSAgICAgICAhIShzdGF0ICYgSU9DX0lPX0V4Y3BTdGF0X1YpLAotCSAgICAgICAoc3RhdCAmIElPQ19JT19FeGNwU3RhdF9TUEZfUykgPyAnUycgOiAnICcsCi0JICAgICAgIChzdGF0ICYgSU9DX0lPX0V4Y3BTdGF0X1NQRl9QKSA/ICdQJyA6ICcgJywKKwkgICAgICAgKHNwZiA9PSBJT0NfSU9fRXhjcFN0YXRfU1BGX1MpID8gJ1MnIDogJyAnLAorCSAgICAgICAoc3BmID09IElPQ19JT19FeGNwU3RhdF9TUEZfUCkgPyAnUCcgOiAnICcsCiAJICAgICAgIChzdGF0ICYgSU9DX0lPX0V4Y3BTdGF0X1JXX01hc2spID8gIlJlYWQiIDogIldyaXRlIiwKIAkgICAgICAgKHVuc2lnbmVkIGludCkoc3RhdCAmIElPQ19JT19FeGNwU3RhdF9JT0lEX01hc2spKTsKIAlwcmludGsoS0VSTl9FUlIgIiAgcGFnZT0weCUwMTZseFxuIiwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9xcGFjZV9zZXR1cC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3FwYWNlX3NldHVwLmMKaW5kZXggYmU4NGU2YS4uYzVjZTAyZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3FwYWNlX3NldHVwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3FwYWNlX3NldHVwLmMKQEAgLTgxLDE2ICs4MSw2IEBACiB9CiBtYWNoaW5lX3N1YnN5c19pbml0Y2FsbChxcGFjZSwgcXBhY2VfcHVibGlzaF9kZXZpY2VzKTsKIAotZXh0ZXJuIGludCBxcGFjZV9ub3RpZnkoc3RydWN0IGRldmljZSAqZGV2KQotewotCS8qIHNldCBkbWFfb3BzIGZvciBvZl9wbGF0Zm9ybSBidXMgKi8KLQlpZiAoZGV2LT5idXMgJiYgZGV2LT5idXMtPm5hbWUKLQkJCSYmICFzdHJjbXAoZGV2LT5idXMtPm5hbWUsICJvZl9wbGF0Zm9ybSIpKQotCQlzZXRfZG1hX29wcyhkZXYsICZkbWFfZGlyZWN0X29wcyk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgX19pbml0IHFwYWNlX3NldHVwX2FyY2godm9pZCkKIHsKICNpZmRlZiBDT05GSUdfU1BVX0JBU0UKQEAgLTExNSw5ICsxMDUsNiBAQAogI2lmZGVmIENPTkZJR19EVU1NWV9DT05TT0xFCiAJY29uc3dpdGNocCA9ICZkdW1teV9jb247CiAjZW5kaWYKLQotCS8qIHNldCBub3RpZmllciBmdW5jdGlvbiAqLwotCXBsYXRmb3JtX25vdGlmeSA9ICZxcGFjZV9ub3RpZnk7CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IHFwYWNlX3Byb2JlKHZvaWQpCkBAIC0xNDEsNiArMTI4LDggQEAKIAkucG93ZXJfb2ZmCQk9IHJ0YXNfcG93ZXJfb2ZmLAogCS5oYWx0CQkJPSBydGFzX2hhbHQsCiAJLmdldF9ib290X3RpbWUJCT0gcnRhc19nZXRfYm9vdF90aW1lLAorCS5nZXRfcnRjX3RpbWUJCT0gcnRhc19nZXRfcnRjX3RpbWUsCisJLnNldF9ydGNfdGltZQkJPSBydGFzX3NldF9ydGNfdGltZSwKIAkuY2FsaWJyYXRlX2RlY3IJCT0gZ2VuZXJpY19jYWxpYnJhdGVfZGVjciwKIAkucHJvZ3Jlc3MJCT0gcXBhY2VfcHJvZ3Jlc3MsCiAJLmluaXRfSVJRCQk9IGlpY19pbml0X0lSUSwKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfYmFzZS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9iYXNlLmMKaW5kZXggZTQ4N2FkNi4uOWFiZDIxMCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9iYXNlLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9iYXNlLmMKQEAgLTExNCw3ICsxMTQsNyBAQAogCWludCBuciA9IChOUl9DUFVTID4gMSkgPyBOUl9DUFVTIDogTlJfQ1BVUyArIDE7CiAKIAkvKiBHbG9iYWwgVExCSUUgYnJvYWRjYXN0IHJlcXVpcmVkIHdpdGggU1BFcy4gKi8KLQlfX2NwdXNfc2V0YWxsKCZtbS0+Y3B1X3ZtX21hc2ssIG5yKTsKKwliaXRtYXBfZmlsbChjcHVtYXNrX2JpdHMobW1fY3B1bWFzayhtbSkpLCBucik7CiB9CiAKIHZvaWQgc3B1X2Fzc29jaWF0ZV9tbShzdHJ1Y3Qgc3B1ICpzcHUsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9mYXVsdC5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdV9mYXVsdC5jCmluZGV4IGM4YjFjZDQuLjk1ZDhkYWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVfZmF1bHQuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1X2ZhdWx0LmMKQEAgLTM5LDYwICszOSw1NiBAQAogCXVuc2lnbmVkIGxvbmcgaXNfd3JpdGU7CiAJaW50IHJldDsKIAotI2lmIDAKLQlpZiAoIUlTX1ZBTElEX0VBKGVhKSkgeworCWlmIChtbSA9PSBOVUxMKQogCQlyZXR1cm4gLUVGQVVMVDsKLQl9Ci0jZW5kaWYgLyogWFhYICovCi0JaWYgKG1tID09IE5VTEwpIHsKKworCWlmIChtbS0+cGdkID09IE5VTEwpCiAJCXJldHVybiAtRUZBVUxUOwotCX0KLQlpZiAobW0tPnBnZCA9PSBOVUxMKSB7Ci0JCXJldHVybiAtRUZBVUxUOwotCX0KIAogCWRvd25fcmVhZCgmbW0tPm1tYXBfc2VtKTsKKwlyZXQgPSAtRUZBVUxUOwogCXZtYSA9IGZpbmRfdm1hKG1tLCBlYSk7CiAJaWYgKCF2bWEpCi0JCWdvdG8gYmFkX2FyZWE7Ci0JaWYgKHZtYS0+dm1fc3RhcnQgPD0gZWEpCi0JCWdvdG8gZ29vZF9hcmVhOwotCWlmICghKHZtYS0+dm1fZmxhZ3MgJiBWTV9HUk9XU0RPV04pKQotCQlnb3RvIGJhZF9hcmVhOwotCWlmIChleHBhbmRfc3RhY2sodm1hLCBlYSkpCi0JCWdvdG8gYmFkX2FyZWE7Ci1nb29kX2FyZWE6CisJCWdvdG8gb3V0X3VubG9jazsKKworCWlmIChlYSA8IHZtYS0+dm1fc3RhcnQpIHsKKwkJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX0dST1dTRE9XTikpCisJCQlnb3RvIG91dF91bmxvY2s7CisJCWlmIChleHBhbmRfc3RhY2sodm1hLCBlYSkpCisJCQlnb3RvIG91dF91bmxvY2s7CisJfQorCiAJaXNfd3JpdGUgPSBkc2lzciAmIE1GQ19EU0lTUl9BQ0NFU1NfUFVUOwogCWlmIChpc193cml0ZSkgewogCQlpZiAoISh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpKQotCQkJZ290byBiYWRfYXJlYTsKKwkJCWdvdG8gb3V0X3VubG9jazsKIAl9IGVsc2UgewogCQlpZiAoZHNpc3IgJiBNRkNfRFNJU1JfQUNDRVNTX0RFTklFRCkKLQkJCWdvdG8gYmFkX2FyZWE7CisJCQlnb3RvIG91dF91bmxvY2s7CiAJCWlmICghKHZtYS0+dm1fZmxhZ3MgJiAoVk1fUkVBRCB8IFZNX0VYRUMpKSkKLQkJCWdvdG8gYmFkX2FyZWE7CisJCQlnb3RvIG91dF91bmxvY2s7CiAJfQorCiAJcmV0ID0gMDsKIAkqZmx0ID0gaGFuZGxlX21tX2ZhdWx0KG1tLCB2bWEsIGVhLCBpc193cml0ZSk7CiAJaWYgKHVubGlrZWx5KCpmbHQgJiBWTV9GQVVMVF9FUlJPUikpIHsKIAkJaWYgKCpmbHQgJiBWTV9GQVVMVF9PT00pIHsKIAkJCXJldCA9IC1FTk9NRU07Ci0JCQlnb3RvIGJhZF9hcmVhOworCQkJZ290byBvdXRfdW5sb2NrOwogCQl9IGVsc2UgaWYgKCpmbHQgJiBWTV9GQVVMVF9TSUdCVVMpIHsKIAkJCXJldCA9IC1FRkFVTFQ7Ci0JCQlnb3RvIGJhZF9hcmVhOworCQkJZ290byBvdXRfdW5sb2NrOwogCQl9CiAJCUJVRygpOwogCX0KKwogCWlmICgqZmx0ICYgVk1fRkFVTFRfTUFKT1IpCiAJCWN1cnJlbnQtPm1hal9mbHQrKzsKIAllbHNlCiAJCWN1cnJlbnQtPm1pbl9mbHQrKzsKKworb3V0X3VubG9jazoKIAl1cF9yZWFkKCZtbS0+bW1hcF9zZW0pOwogCXJldHVybiByZXQ7Ci0KLWJhZF9hcmVhOgotCXVwX3JlYWQoJm1tLT5tbWFwX3NlbSk7Ci0JcmV0dXJuIC1FRkFVTFQ7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChzcHVfaGFuZGxlX21tX2ZhdWx0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb250ZXh0LmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvY29udGV4dC5jCmluZGV4IDY2NTNkZGIuLmRiNTM5OGMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9jb250ZXh0LmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2NvbnRleHQuYwpAQCAtMzUsNiArMzUsOCBAQAogc3RydWN0IHNwdV9jb250ZXh0ICphbGxvY19zcHVfY29udGV4dChzdHJ1Y3Qgc3B1X2dhbmcgKmdhbmcpCiB7CiAJc3RydWN0IHNwdV9jb250ZXh0ICpjdHg7CisJc3RydWN0IHRpbWVzcGVjIHRzOworCiAJY3R4ID0ga3phbGxvYyhzaXplb2YgKmN0eCwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFjdHgpCiAJCWdvdG8gb3V0OwpAQCAtNjQsNiArNjYsOCBAQAogCV9fc3B1X3VwZGF0ZV9zY2hlZF9pbmZvKGN0eCk7CiAJc3B1X3NldF90aW1lc2xpY2UoY3R4KTsKIAljdHgtPnN0YXRzLnV0aWxfc3RhdGUgPSBTUFVfVVRJTF9JRExFX0xPQURFRDsKKwlrdGltZV9nZXRfdHMoJnRzKTsKKwljdHgtPnN0YXRzLnRzdGFtcCA9IHRpbWVzcGVjX3RvX25zKCZ0cyk7CiAKIAlhdG9taWNfaW5jKCZucl9zcHVfY29udGV4dHMpOwogCWdvdG8gb3V0OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9maWxlLmMKaW5kZXggMGRhN2YyYi4uZDZhNTE5ZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL2ZpbGUuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvZmlsZS5jCkBAIC01NjgsMTYgKzU2OCwxNyBAQAogCXN0cnVjdCBzcHVfbHNjc2EgKmxzY3NhID0gY3R4LT5jc2EubHNjc2E7CiAJaW50IHJldDsKIAotCXNpemUgPSBtaW5fdChzc2l6ZV90LCBzaXplb2YgbHNjc2EtPmdwcnMgLSAqcG9zLCBzaXplKTsKLQlpZiAoc2l6ZSA8PSAwKQorCWlmICgqcG9zID49IHNpemVvZihsc2NzYS0+Z3BycykpCiAJCXJldHVybiAtRUZCSUc7CisKKwlzaXplID0gbWluX3Qoc3NpemVfdCwgc2l6ZW9mKGxzY3NhLT5ncHJzKSAtICpwb3MsIHNpemUpOwogCSpwb3MgKz0gc2l6ZTsKIAogCXJldCA9IHNwdV9hY3F1aXJlX3NhdmVkKGN0eCk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCXJldCA9IGNvcHlfZnJvbV91c2VyKGxzY3NhLT5ncHJzICsgKnBvcyAtIHNpemUsCisJcmV0ID0gY29weV9mcm9tX3VzZXIoKGNoYXIgKilsc2NzYS0+Z3BycyArICpwb3MgLSBzaXplLAogCQkJICAgICBidWZmZXIsIHNpemUpID8gLUVGQVVMVCA6IHNpemU7CiAKIAlzcHVfcmVsZWFzZV9zYXZlZChjdHgpOwpAQCAtNjIzLDEwICs2MjQsMTEgQEAKIAlzdHJ1Y3Qgc3B1X2xzY3NhICpsc2NzYSA9IGN0eC0+Y3NhLmxzY3NhOwogCWludCByZXQ7CiAKLQlzaXplID0gbWluX3Qoc3NpemVfdCwgc2l6ZW9mKGxzY3NhLT5mcGNyKSAtICpwb3MsIHNpemUpOwotCWlmIChzaXplIDw9IDApCisJaWYgKCpwb3MgPj0gc2l6ZW9mKGxzY3NhLT5mcGNyKSkKIAkJcmV0dXJuIC1FRkJJRzsKIAorCXNpemUgPSBtaW5fdChzc2l6ZV90LCBzaXplb2YobHNjc2EtPmZwY3IpIC0gKnBvcywgc2l6ZSk7CisKIAlyZXQgPSBzcHVfYWNxdWlyZV9zYXZlZChjdHgpOwogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CkBAIC0yNjY1LDcgKzI2NjcsNyBAQAogCS5yZWxlYXNlICAgICAgICA9IHNpbmdsZV9yZWxlYXNlLAogfTsKIAotc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX2NvbnRlbnRzW10gPSB7Citjb25zdCBzdHJ1Y3Qgc3B1ZnNfdHJlZV9kZXNjciBzcHVmc19kaXJfY29udGVudHNbXSA9IHsKIAl7ICJjYXBhYmlsaXRpZXMiLCAmc3B1ZnNfY2Fwc19mb3BzLCAwNDQ0LCB9LAogCXsgIm1lbSIsICAmc3B1ZnNfbWVtX2ZvcHMsICAwNjY2LCBMU19TSVpFLCB9LAogCXsgInJlZ3MiLCAmc3B1ZnNfcmVnc19mb3BzLCAgMDY2Niwgc2l6ZW9mKHN0cnVjdCBzcHVfcmVnMTI4WzEyOF0pLCB9LApAQCAtMjcwNiw3ICsyNzA4LDcgQEAKIAl7fSwKIH07CiAKLXN0cnVjdCBzcHVmc190cmVlX2Rlc2NyIHNwdWZzX2Rpcl9ub3NjaGVkX2NvbnRlbnRzW10gPSB7Citjb25zdCBzdHJ1Y3Qgc3B1ZnNfdHJlZV9kZXNjciBzcHVmc19kaXJfbm9zY2hlZF9jb250ZW50c1tdID0gewogCXsgImNhcGFiaWxpdGllcyIsICZzcHVmc19jYXBzX2ZvcHMsIDA0NDQsIH0sCiAJeyAibWVtIiwgICZzcHVmc19tZW1fZm9wcywgIDA2NjYsIExTX1NJWkUsIH0sCiAJeyAibWJveCIsICZzcHVmc19tYm94X2ZvcHMsIDA0NDQsIH0sCkBAIC0yNzMxLDEyICsyNzMzLDEyIEBACiAJe30sCiB9OwogCi1zdHJ1Y3Qgc3B1ZnNfdHJlZV9kZXNjciBzcHVmc19kaXJfZGVidWdfY29udGVudHNbXSA9IHsKK2NvbnN0IHN0cnVjdCBzcHVmc190cmVlX2Rlc2NyIHNwdWZzX2Rpcl9kZWJ1Z19jb250ZW50c1tdID0gewogCXsgIi5jdHgiLCAmc3B1ZnNfY3R4X2ZvcHMsIDA0NDQsIH0sCiAJe30sCiB9OwogCi1zdHJ1Y3Qgc3B1ZnNfY29yZWR1bXBfcmVhZGVyIHNwdWZzX2NvcmVkdW1wX3JlYWRbXSA9IHsKK2NvbnN0IHN0cnVjdCBzcHVmc19jb3JlZHVtcF9yZWFkZXIgc3B1ZnNfY29yZWR1bXBfcmVhZFtdID0gewogCXsgInJlZ3MiLCBfX3NwdWZzX3JlZ3NfcmVhZCwgTlVMTCwgc2l6ZW9mKHN0cnVjdCBzcHVfcmVnMTI4WzEyOF0pfSwKIAl7ICJmcGNyIiwgX19zcHVmc19mcGNyX3JlYWQsIE5VTEwsIHNpemVvZihzdHJ1Y3Qgc3B1X3JlZzEyOCkgfSwKIAl7ICJsc2xyIiwgTlVMTCwgc3B1ZnNfbHNscl9nZXQsIDE5IH0sCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvaW5vZGUuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9pbm9kZS5jCmluZGV4IGUzMDllZjcuLjY0ZjA2ODUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9pbm9kZS5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9pbm9kZS5jCkBAIC0xODYsOCArMTg2LDkgQEAKIAlyZXR1cm4gc2ltcGxlX3JtZGlyKHBhcmVudCwgZGlyKTsKIH0KIAotc3RhdGljIGludCBzcHVmc19maWxsX2RpcihzdHJ1Y3QgZGVudHJ5ICpkaXIsIHN0cnVjdCBzcHVmc190cmVlX2Rlc2NyICpmaWxlcywKLQkJCSAgaW50IG1vZGUsIHN0cnVjdCBzcHVfY29udGV4dCAqY3R4KQorc3RhdGljIGludCBzcHVmc19maWxsX2RpcihzdHJ1Y3QgZGVudHJ5ICpkaXIsCisJCWNvbnN0IHN0cnVjdCBzcHVmc190cmVlX2Rlc2NyICpmaWxlcywgaW50IG1vZGUsCisJCXN0cnVjdCBzcHVfY29udGV4dCAqY3R4KQogewogCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgKnRtcDsKIAlpbnQgcmV0OwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3J1bi5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3J1bi5jCmluZGV4IGM1OGJkMzYuLjRkZGY3NjkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9ydW4uYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NlbGwvc3B1ZnMvcnVuLmMKQEAgLTExNyw2ICsxMTcsOSBAQAogCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAKKwkvKiBjbGVhciBwdXJnZSBzdGF0dXMgKi8KKwlvdXRfYmU2NChtZmNfY250bCwgMCk7CisKIAkvKiBwdXQgdGhlIFNQRSBpbiBrZXJuZWwgbW9kZSB0byBhbGxvdyBhY2Nlc3MgdG8gdGhlIGxvYWRlciAqLwogCXNyMSA9IHNwdV9tZmNfc3IxX2dldChjdHgtPnNwdSk7CiAJc3IxICY9IH5NRkNfU1RBVEUxX1BST0JMRU1fU1RBVEVfTUFTSzsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2VsbC9zcHVmcy9zcHVmcy5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdWZzLmgKaW5kZXggM2JmOTA4ZS4uYWUzMTU3MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdWZzLmgKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jZWxsL3NwdWZzL3NwdWZzLmgKQEAgLTI0MSw5ICsyNDEsOSBAQAogCXNpemVfdCBzaXplOwogfTsKIAotZXh0ZXJuIHN0cnVjdCBzcHVmc190cmVlX2Rlc2NyIHNwdWZzX2Rpcl9jb250ZW50c1tdOwotZXh0ZXJuIHN0cnVjdCBzcHVmc190cmVlX2Rlc2NyIHNwdWZzX2Rpcl9ub3NjaGVkX2NvbnRlbnRzW107Ci1leHRlcm4gc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX2RlYnVnX2NvbnRlbnRzW107CitleHRlcm4gY29uc3Qgc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX2NvbnRlbnRzW107CitleHRlcm4gY29uc3Qgc3RydWN0IHNwdWZzX3RyZWVfZGVzY3Igc3B1ZnNfZGlyX25vc2NoZWRfY29udGVudHNbXTsKK2V4dGVybiBjb25zdCBzdHJ1Y3Qgc3B1ZnNfdHJlZV9kZXNjciBzcHVmc19kaXJfZGVidWdfY29udGVudHNbXTsKIAogLyogc3lzdGVtIGNhbGwgaW1wbGVtZW50YXRpb24gKi8KIGV4dGVybiBzdHJ1Y3Qgc3B1ZnNfY2FsbHMgc3B1ZnNfY2FsbHM7CkBAIC0zNTgsNyArMzU4LDcgQEAKIAl1NjQgKCpnZXQpKHN0cnVjdCBzcHVfY29udGV4dCAqY3R4KTsKIAlzaXplX3Qgc2l6ZTsKIH07Ci1leHRlcm4gc3RydWN0IHNwdWZzX2NvcmVkdW1wX3JlYWRlciBzcHVmc19jb3JlZHVtcF9yZWFkW107CitleHRlcm4gY29uc3Qgc3RydWN0IHNwdWZzX2NvcmVkdW1wX3JlYWRlciBzcHVmc19jb3JlZHVtcF9yZWFkW107CiBleHRlcm4gaW50IHNwdWZzX2NvcmVkdW1wX251bV9ub3RlczsKIAogZXh0ZXJuIGludCBzcHVfaW5pdF9jc2Eoc3RydWN0IHNwdV9zdGF0ZSAqY3NhKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvY2hycC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL0tjb25maWcKaW5kZXggMjJiNGI0ZS4uMzdkNDM4YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgUFBDX0NIUlAKIAlib29sICJDb21tb24gSGFyZHdhcmUgUmVmZXJlbmNlIFBsYXRmb3JtIChDSFJQKSBiYXNlZCBtYWNoaW5lcyIKLQlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzMyCisJZGVwZW5kcyBvbiA2eHgKIAlzZWxlY3QgTVBJQwogCXNlbGVjdCBQUENfSTgyNTkKIAlzZWxlY3QgUFBDX0lORElSRUNUX1BDSQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9jaHJwL3BlZ2Fzb3NfZXRoLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvcGVnYXNvc19ldGguYwppbmRleCAxMzBmZjcyLi4wMzlmYzhlIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvcGVnYXNvc19ldGguYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2NocnAvcGVnYXNvc19ldGguYwpAQCAtMjEsOCArMjEsOCBAQAogI2RlZmluZSBQRUdBU09TMl9TUkFNX0JBU0UgCQkJKDB4ZjIwMDAwMDApCiAjZGVmaW5lIFBFR0FTT1MyX1NSQU1fU0laRQkJCSgyNTYqMTAyNCkKIAotI2RlZmluZSBQRUdBU09TMl9TUkFNX0JBU0VfRVRIMAkJCShQRUdBU09TMl9TUkFNX0JBU0UpCi0jZGVmaW5lIFBFR0FTT1MyX1NSQU1fQkFTRV9FVEgxCQkJKFBFR0FTT1MyX1NSQU1fQkFTRV9FVEgwICsgKFBFR0FTT1MyX1NSQU1fU0laRSAvIDIpICkKKyNkZWZpbmUgUEVHQVNPUzJfU1JBTV9CQVNFX0VUSF9QT1JUMAkJCShQRUdBU09TMl9TUkFNX0JBU0UpCisjZGVmaW5lIFBFR0FTT1MyX1NSQU1fQkFTRV9FVEhfUE9SVDEJCQkoUEVHQVNPUzJfU1JBTV9CQVNFX0VUSF9QT1JUMCArIChQRUdBU09TMl9TUkFNX1NJWkUgLyAyKSApCiAKIAogI2RlZmluZSBQRUdBU09TMl9TUkFNX1JYUklOR19TSVpFCQkoUEVHQVNPUzJfU1JBTV9TSVpFLzQpCkBAIC00Nyw3NSArNDcsNDIgQEAKIAkucmVzb3VyY2UJPSBtdjY0M3h4X2V0aF9zaGFyZWRfcmVzb3VyY2VzLAogfTsKIAotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdjY0M3h4X2V0aDBfcmVzb3VyY2VzW10gPSB7CitzdGF0aWMgc3RydWN0IHJlc291cmNlIG12NjQzeHhfZXRoX3BvcnQxX3Jlc291cmNlc1tdID0gewogCVswXSA9IHsKLQkJLm5hbWUJPSAiZXRoMCBpcnEiLAorCQkubmFtZQk9ICJldGggcG9ydDEgaXJxIiwKIAkJLnN0YXJ0CT0gOSwKIAkJLmVuZAk9IDksCiAJCS5mbGFncwk9IElPUkVTT1VSQ0VfSVJRLAogCX0sCiB9OwogCi0KLXN0YXRpYyBzdHJ1Y3QgbXY2NDN4eF9ldGhfcGxhdGZvcm1fZGF0YSBldGgwX3BkID0gewotCS5zaGFyZWQJCT0gJm12NjQzeHhfZXRoX3NoYXJlZF9kZXZpY2UsCi0JLnBvcnRfbnVtYmVyCT0gMCwKLQotCS50eF9zcmFtX2FkZHIgPSBQRUdBU09TMl9TUkFNX0JBU0VfRVRIMCwKLQkudHhfc3JhbV9zaXplID0gUEVHQVNPUzJfU1JBTV9UWFJJTkdfU0laRSwKLQkudHhfcXVldWVfc2l6ZSA9IFBFR0FTT1MyX1NSQU1fVFhSSU5HX1NJWkUvMTYsCi0KLQkucnhfc3JhbV9hZGRyID0gUEVHQVNPUzJfU1JBTV9CQVNFX0VUSDAgKyBQRUdBU09TMl9TUkFNX1RYUklOR19TSVpFLAotCS5yeF9zcmFtX3NpemUgPSBQRUdBU09TMl9TUkFNX1JYUklOR19TSVpFLAotCS5yeF9xdWV1ZV9zaXplID0gUEVHQVNPUzJfU1JBTV9SWFJJTkdfU0laRS8xNiwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV0aDBfZGV2aWNlID0gewotCS5uYW1lCQk9IE1WNjQzWFhfRVRIX05BTUUsCi0JLmlkCQk9IDAsCi0JLm51bV9yZXNvdXJjZXMJPSBBUlJBWV9TSVpFKG12NjQzeHhfZXRoMF9yZXNvdXJjZXMpLAotCS5yZXNvdXJjZQk9IG12NjQzeHhfZXRoMF9yZXNvdXJjZXMsCi0JLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmZXRoMF9wZCwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCByZXNvdXJjZSBtdjY0M3h4X2V0aDFfcmVzb3VyY2VzW10gPSB7Ci0JWzBdID0gewotCQkubmFtZQk9ICJldGgxIGlycSIsCi0JCS5zdGFydAk9IDksCi0JCS5lbmQJPSA5LAotCQkuZmxhZ3MJPSBJT1JFU09VUkNFX0lSUSwKLQl9LAotfTsKLQotc3RhdGljIHN0cnVjdCBtdjY0M3h4X2V0aF9wbGF0Zm9ybV9kYXRhIGV0aDFfcGQgPSB7CitzdGF0aWMgc3RydWN0IG12NjQzeHhfZXRoX3BsYXRmb3JtX2RhdGEgZXRoX3BvcnQxX3BkID0gewogCS5zaGFyZWQJCT0gJm12NjQzeHhfZXRoX3NoYXJlZF9kZXZpY2UsCiAJLnBvcnRfbnVtYmVyCT0gMSwKKwkucGh5X2FkZHIJPSBNVjY0M1hYX0VUSF9QSFlfQUREUig3KSwKIAotCS50eF9zcmFtX2FkZHIgPSBQRUdBU09TMl9TUkFNX0JBU0VfRVRIMSwKKwkudHhfc3JhbV9hZGRyID0gUEVHQVNPUzJfU1JBTV9CQVNFX0VUSF9QT1JUMSwKIAkudHhfc3JhbV9zaXplID0gUEVHQVNPUzJfU1JBTV9UWFJJTkdfU0laRSwKIAkudHhfcXVldWVfc2l6ZSA9IFBFR0FTT1MyX1NSQU1fVFhSSU5HX1NJWkUvMTYsCiAKLQkucnhfc3JhbV9hZGRyID0gUEVHQVNPUzJfU1JBTV9CQVNFX0VUSDEgKyBQRUdBU09TMl9TUkFNX1RYUklOR19TSVpFLAorCS5yeF9zcmFtX2FkZHIgPSBQRUdBU09TMl9TUkFNX0JBU0VfRVRIX1BPUlQxICsgUEVHQVNPUzJfU1JBTV9UWFJJTkdfU0laRSwKIAkucnhfc3JhbV9zaXplID0gUEVHQVNPUzJfU1JBTV9SWFJJTkdfU0laRSwKIAkucnhfcXVldWVfc2l6ZSA9IFBFR0FTT1MyX1NSQU1fUlhSSU5HX1NJWkUvMTYsCiB9OwogCi1zdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSBldGgxX2RldmljZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlIGV0aF9wb3J0MV9kZXZpY2UgPSB7CiAJLm5hbWUJCT0gTVY2NDNYWF9FVEhfTkFNRSwKIAkuaWQJCT0gMSwKLQkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXY2NDN4eF9ldGgxX3Jlc291cmNlcyksCi0JLnJlc291cmNlCT0gbXY2NDN4eF9ldGgxX3Jlc291cmNlcywKKwkubnVtX3Jlc291cmNlcwk9IEFSUkFZX1NJWkUobXY2NDN4eF9ldGhfcG9ydDFfcmVzb3VyY2VzKSwKKwkucmVzb3VyY2UJPSBtdjY0M3h4X2V0aF9wb3J0MV9yZXNvdXJjZXMsCiAJLmRldiA9IHsKLQkJLnBsYXRmb3JtX2RhdGEgPSAmZXRoMV9wZCwKKwkJLnBsYXRmb3JtX2RhdGEgPSAmZXRoX3BvcnQxX3BkLAogCX0sCiB9OwogCiBzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RldmljZSAqbXY2NDN4eF9ldGhfcGRfZGV2c1tdIF9faW5pdGRhdGEgPSB7CiAJJm12NjQzeHhfZXRoX3NoYXJlZF9kZXZpY2UsCi0JJmV0aDBfZGV2aWNlLAotCSZldGgxX2RldmljZSwKKwkmZXRoX3BvcnQxX2RldmljZSwKIH07CiAKIC8qKioqKioqKioqKi8KQEAgLTE5MSwxNSArMTU4LDEwIEBACiAKIAkJaWYgKCBFbmFibGVfU1JBTSgpIDwgMCkKIAkJewotCQkJZXRoMF9wZC50eF9zcmFtX2FkZHIgPSAwOwotCQkJZXRoMF9wZC50eF9zcmFtX3NpemUgPSAwOwotCQkJZXRoMF9wZC5yeF9zcmFtX2FkZHIgPSAwOwotCQkJZXRoMF9wZC5yeF9zcmFtX3NpemUgPSAwOwotCi0JCQlldGgxX3BkLnR4X3NyYW1fYWRkciA9IDA7Ci0JCQlldGgxX3BkLnR4X3NyYW1fc2l6ZSA9IDA7Ci0JCQlldGgxX3BkLnJ4X3NyYW1fYWRkciA9IDA7Ci0JCQlldGgxX3BkLnJ4X3NyYW1fc2l6ZSA9IDA7CisJCQlldGhfcG9ydDFfcGQudHhfc3JhbV9hZGRyID0gMDsKKwkJCWV0aF9wb3J0MV9wZC50eF9zcmFtX3NpemUgPSAwOworCQkJZXRoX3BvcnQxX3BkLnJ4X3NyYW1fYWRkciA9IDA7CisJCQlldGhfcG9ydDFfcGQucnhfc3JhbV9zaXplID0gMDsKIAogI2lmZGVmIEJFX1ZFUkJPU0UKIAkJCXByaW50aygiUGVnYXNvcyBJSS9NYXJ2ZWxsIE1WNjQzNjE6IENhbid0IGVuYWJsZSB0aGUgIgpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9lbWJlZGRlZDZ4eC9LY29uZmlnCmluZGV4IDRmOWY4MTguLjI5MWFjOWQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvZW1iZWRkZWQ2eHgvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2VtYmVkZGVkNnh4L0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgRU1CRURERUQ2eHgKIAlib29sICJFbWJlZGRlZCA2eHgvN3h4Lzd4eHgtYmFzZWQgYm9hcmRzIgotCWRlcGVuZHMgb24gUFBDMzIgJiYgQlJPS0VOX09OX1NNUCAmJiBQUENfTVVMVElQTEFURk9STQorCWRlcGVuZHMgb24gNnh4ICYmIEJST0tFTl9PTl9TTVAKIAogY29uZmlnIExJTktTVEFUSU9OCiAJYm9vbCAiTGlua3N0YXRpb24gLyBLdXJvYm94KEhHKSBmcm9tIEJ1ZmZhbG8iCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9LY29uZmlnCmluZGV4IDdkZGQwYTIuLjY0N2U4NzcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFBQQ19JU0VSSUVTCiAJYm9vbCAiSUJNIExlZ2FjeSBpU2VyaWVzIgotCWRlcGVuZHMgb24gUFBDX01VTFRJUExBVEZPUk0gJiYgUFBDNjQKKwlkZXBlbmRzIG9uIFBQQzY0ICYmIFBQQ19CT09LM1MKIAlzZWxlY3QgUFBDX0lORElSRUNUX0lPCiAJc2VsZWN0IFBQQ19QQ0lfQ0hPSUNFIGlmIEVNQkVEREVECiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pcnEuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9pcnEuYwppbmRleCA3MDFkOTI5Li45NGY0NDQ3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvaXJxLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9pc2VyaWVzL2lycS5jCkBAIC0yMTQsNyArMjE0LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJZm9yX2VhY2hfaXJxIChpcnEpIHsKLQkJaXJxX2Rlc2NfdCAqZGVzYyA9IGdldF9pcnFfZGVzYyhpcnEpOworCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MgPSBnZXRfaXJxX2Rlc2MoaXJxKTsKIAogCQlpZiAoZGVzYyAmJiBkZXNjLT5jaGlwICYmIGRlc2MtPmNoaXAtPnN0YXJ0dXApIHsKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL2lzZXJpZXMvc2V0dXAuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCmluZGV4IDI0NTE5YjkuLmE2Y2QzMzkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvaXNlcmllcy9zZXR1cC5jCkBAIC02MTcsNyArNjE3LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgX19pb21lbSAqaXNlcmllc19pb3JlbWFwKHBoeXNfYWRkcl90IGFkZHJlc3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3MpCisJCQkJICAgICB1bnNpZ25lZCBsb25nIGZsYWdzLCB2b2lkICpjYWxsZXIpCiB7CiAJcmV0dXJuICh2b2lkIF9faW9tZW0gKilhZGRyZXNzOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9tYXBsZS9LY29uZmlnCmluZGV4IGE2NDY3YTUuLjFlYTYyMWEgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvbWFwbGUvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL21hcGxlL0tjb25maWcKQEAgLTEsNSArMSw1IEBACiBjb25maWcgUFBDX01BUExFCi0JZGVwZW5kcyBvbiBQUENfTVVMVElQTEFURk9STSAmJiBQUEM2NAorCWRlcGVuZHMgb24gUFBDNjQgJiYgUFBDX0JPT0szUwogCWJvb2wgIk1hcGxlIDk3MEZYIEV2YWx1YXRpb24gQm9hcmQiCiAJc2VsZWN0IFBDSQogCXNlbGVjdCBNUElDCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wYXNlbWkvS2NvbmZpZwppbmRleCAzNDhlMDYxLi5hMmFlYjMyIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bhc2VtaS9LY29uZmlnCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcGFzZW1pL0tjb25maWcKQEAgLTEsNSArMSw1IEBACiBjb25maWcgUFBDX1BBU0VNSQotCWRlcGVuZHMgb24gUFBDX01VTFRJUExBVEZPUk0gJiYgUFBDNjQKKwlkZXBlbmRzIG9uIFBQQzY0ICYmIFBQQ19CT09LM1MKIAlib29sICJQQSBTZW1pIFNvQy1iYXNlZCBwbGF0Zm9ybXMiCiAJZGVmYXVsdCBuCiAJc2VsZWN0IE1QSUMKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvS2NvbmZpZwppbmRleCAwNTU5OTBjLi4xZTFhMDg3IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFBQQ19QTUFDCiAJYm9vbCAiQXBwbGUgUG93ZXJNYWMgYmFzZWQgbWFjaGluZXMiCi0JZGVwZW5kcyBvbiBQUENfTVVMVElQTEFURk9STQorCWRlcGVuZHMgb24gUFBDX0JPT0szUwogCXNlbGVjdCBNUElDCiAJc2VsZWN0IFBDSQogCXNlbGVjdCBQUENfSU5ESVJFQ1RfUENJIGlmIFBQQzMyCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL2NwdWZyZXFfNjQuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV82NC5jCmluZGV4IGJlYjM4MzMuLjIyZWNmYmUgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV82NC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvY3B1ZnJlcV82NC5jCkBAIC04Niw2ICs4Niw3IEBACiAKIHN0YXRpYyBERUZJTkVfTVVURVgoZzVfc3dpdGNoX211dGV4KTsKIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgdHJhbnNpdGlvbl9sYXRlbmN5OwogCiAjaWZkZWYgQ09ORklHX1BNQUNfU01VCiAKQEAgLTM1Nyw3ICszNTgsNyBAQAogCiBzdGF0aWMgaW50IGc1X2NwdWZyZXFfY3B1X2luaXQoc3RydWN0IGNwdWZyZXFfcG9saWN5ICpwb2xpY3kpCiB7Ci0JcG9saWN5LT5jcHVpbmZvLnRyYW5zaXRpb25fbGF0ZW5jeSA9IENQVUZSRVFfRVRFUk5BTDsKKwlwb2xpY3ktPmNwdWluZm8udHJhbnNpdGlvbl9sYXRlbmN5ID0gdHJhbnNpdGlvbl9sYXRlbmN5OwogCXBvbGljeS0+Y3VyID0gZzVfY3B1X2ZyZXFzW2c1X3F1ZXJ5X2ZyZXEoKV0uZnJlcXVlbmN5OwogCS8qIHNlY29uZGFyeSBDUFVzIGFyZSB0aWVkIHRvIHRoZSBwcmltYXJ5IG9uZSBieSB0aGUKIAkgKiBjcHVmcmVxIGNvcmUgaWYgaW4gdGhlIHNlY29uZGFyeSBwb2xpY3kgd2UgdGVsbCBpdCB0aGF0CkBAIC01MDAsNiArNTAxLDcgQEAKIAlnNV9jcHVfZnJlcXNbMV0uZnJlcXVlbmN5ID0gbWF4X2ZyZXEvMjsKIAogCS8qIFNldCBjYWxsYmFja3MgKi8KKwl0cmFuc2l0aW9uX2xhdGVuY3kgPSAxMjAwMDsKIAlnNV9zd2l0Y2hfZnJlcSA9IGc1X3Njb21fc3dpdGNoX2ZyZXE7CiAJZzVfcXVlcnlfZnJlcSA9IGc1X3Njb21fcXVlcnlfZnJlcTsKIAlmcmVxX21ldGhvZCA9ICJTQ09NIjsKQEAgLTY3NSw2ICs2NzcsNyBAQAogCWc1X2NwdV9mcmVxc1sxXS5mcmVxdWVuY3kgPSBtaW5fZnJlcTsKIAogCS8qIFNldCBjYWxsYmFja3MgKi8KKwl0cmFuc2l0aW9uX2xhdGVuY3kgPSBDUFVGUkVRX0VURVJOQUw7CiAJZzVfc3dpdGNoX3ZvbHQgPSBnNV9wZnVuY19zd2l0Y2hfdm9sdDsKIAlnNV9zd2l0Y2hfZnJlcSA9IGc1X3BmdW5jX3N3aXRjaF9mcmVxOwogCWc1X3F1ZXJ5X2ZyZXEgPSBnNV9wZnVuY19xdWVyeV9mcmVxOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuaCBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvcGljLmgKaW5kZXggYzQ0Yzg5Zi4uZDYyMmE4MyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9waWMuaAorKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3BpYy5oCkBAIC0zLDcgKzMsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaXJxLmg+CiAKLWV4dGVybiBzdHJ1Y3QgaHdfaW50ZXJydXB0X3R5cGUgcG1hY19waWM7CitleHRlcm4gc3RydWN0IGlycV9jaGlwIHBtYWNfcGljOwogCiBleHRlcm4gdm9pZCBwbWFjX3BpY19pbml0KHZvaWQpOwogZXh0ZXJuIGludCBwbWFjX2dldF9pcnEodm9pZCk7CmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NldHVwLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybWFjL3NldHVwLmMKaW5kZXggOWI3OGY1My4uNDU5MzZjOSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm1hYy9zZXR1cC5jCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJtYWMvc2V0dXAuYwpAQCAtNzQ2LDQgKzc0Niw3IEBACiAjaWYgZGVmaW5lZChDT05GSUdfSE9UUExVR19DUFUpICYmIGRlZmluZWQoQ09ORklHX1BQQzY0KQogCS5jcHVfZGllCQk9IHBtYWNfY3B1X2RpZSwKICNlbmRpZgorI2lmIGRlZmluZWQoQ09ORklHX0hPVFBMVUdfQ1BVKSAmJiBkZWZpbmVkKENPTkZJR19QUEMzMikKKwkuY3B1X2RpZQkJPSBnZW5lcmljX21hY2hfY3B1X2RpZSwKKyNlbmRpZgogfTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHJlcC9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wcmVwL0tjb25maWcKaW5kZXggMjlkNDExMi4uYmY4MzMwZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wcmVwL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wcmVwL0tjb25maWcKQEAgLTEsNiArMSw2IEBACiBjb25maWcgUFBDX1BSRVAKIAlib29sICJQb3dlclBDIFJlZmVyZW5jZSBQbGF0Zm9ybSAoUFJlUCkgYmFzZWQgbWFjaGluZXMiCi0JZGVwZW5kcyBvbiBQUENfTVVMVElQTEFURk9STSAmJiBQUEMzMiAmJiBCUk9LRU4KKwlkZXBlbmRzIG9uIDZ4eCAmJiBCUk9LRU4KIAlzZWxlY3QgTVBJQwogCXNlbGVjdCBQUENfSTgyNTkKIAlzZWxlY3QgUFBDX0lORElSRUNUX1BDSQpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvS2NvbmZpZyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL0tjb25maWcKaW5kZXggNzQwZWY1Ni4uZGZlMzE2YiAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvS2NvbmZpZworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9LY29uZmlnCkBAIC0xLDYgKzEsNiBAQAogY29uZmlnIFBQQ19QUzMKIAlib29sICJTb255IFBTMyIKLQlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzY0CisJZGVwZW5kcyBvbiBQUEM2NCAmJiBQUENfQk9PSzNTCiAJc2VsZWN0IFBQQ19DRUxMCiAJc2VsZWN0IFVTQl9BUkNIX0hBU19PSENJCiAJc2VsZWN0IFVTQl9PSENJX0xJVFRMRV9FTkRJQU4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL21tLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzMy9tbS5jCmluZGV4IGQyODFjYzAuLjlhMmI2ZDkgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHMzL21tLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wczMvbW0uYwpAQCAtMzExLDcgKzMxMSw3IEBACiAJcmVzdWx0ID0gYWRkX21lbW9yeSgwLCBzdGFydF9hZGRyLCBtYXAucjEuc2l6ZSk7CiAKIAlpZiAocmVzdWx0KSB7Ci0JCURCRygiJXM6JWQ6IGFkZF9tZW1vcnkgZmFpbGVkOiAoJWQpXG4iLAorCQlwcl9lcnIoIiVzOiVkOiBhZGRfbWVtb3J5IGZhaWxlZDogKCVkKVxuIiwKIAkJCV9fZnVuY19fLCBfX0xJTkVfXywgcmVzdWx0KTsKIAkJcmV0dXJuIHJlc3VsdDsKIAl9CkBAIC0zMjIsNyArMzIyLDcgQEAKIAlyZXN1bHQgPSBvbmxpbmVfcGFnZXMoc3RhcnRfcGZuLCBucl9wYWdlcyk7CiAKIAlpZiAocmVzdWx0KQotCQlEQkcoIiVzOiVkOiBvbmxpbmVfcGFnZXMgZmFpbGVkOiAoJWQpXG4iLAorCQlwcl9lcnIoIiVzOiVkOiBvbmxpbmVfcGFnZXMgZmFpbGVkOiAoJWQpXG4iLAogCQkJX19mdW5jX18sIF9fTElORV9fLCByZXN1bHQpOwogCiAJcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKaW5kZXggZGRjMmEzMC4uZjBlNmYyOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWcKQEAgLTEsNSArMSw1IEBACiBjb25maWcgUFBDX1BTRVJJRVMKLQlkZXBlbmRzIG9uIFBQQ19NVUxUSVBMQVRGT1JNICYmIFBQQzY0CisJZGVwZW5kcyBvbiBQUEM2NCAmJiBQUENfQk9PSzNTCiAJYm9vbCAiSUJNIHBTZXJpZXMgJiBuZXcgKFBPV0VSNS1iYXNlZCkgaVNlcmllcyIKIAlzZWxlY3QgTVBJQwogCXNlbGVjdCBQUENfSTgyNTkKQEAgLTI1LDYgKzI1LDExIEBACiAJZGVwZW5kcyBvbiBQUENfUFNFUklFUyAmJiBQQ0kKIAlkZWZhdWx0IHkgaWYgIUVNQkVEREVECiAKK2NvbmZpZyBQU0VSSUVTX01TSQorICAgICAgIGJvb2wKKyAgICAgICBkZXBlbmRzIG9uIFBDSV9NU0kgJiYgRUVICisgICAgICAgZGVmYXVsdCB5CisKIGNvbmZpZyBTQ0FOTE9HCiAJdHJpc3RhdGUgIlNjYW5sb2cgZHVtcCBpbnRlcmZhY2UiCiAJZGVwZW5kcyBvbiBSVEFTX1BST0MgJiYgUFBDX1BTRVJJRVMKQEAgLTYzLDMgKzY4LDEzIEBACiAJICBtYWtlcyBzZW5zZSBmb3IgYSBzeXN0ZW0gcnVubmluZyBpbiBhbiBMUEFSIHdoZXJlIHRoZSB1bnVzZWQgcGFnZXMKIAkgIHdpbGwgYmUgcmV1c2VkIGZvciBvdGhlciBMUEFScy4gVGhlIGludGVyZmFjZSBhbGxvd3MgZmlybXdhcmUgdG8KIAkgIGJhbGFuY2UgbWVtb3J5IGFjcm9zcyBtYW55IExQQVJzLgorCitjb25maWcgRFRMCisJYm9vbCAiRGlzcGF0Y2ggVHJhY2UgTG9nIgorCWRlcGVuZHMgb24gUFBDX1NQTFBBUiAmJiBERUJVR19GUworCWhlbHAKKwkgIFNQTFBBUiBtYWNoaW5lcyBjYW4gbG9nIGh5cGVydmlzb3IgcHJlZW1wdCAmIGRpc3BhdGNoIGV2ZW50cyB0byBhCisJICBrZXJuZWwgYnVmZmVyLiBTYXlpbmcgWSBoZXJlIHdpbGwgZW5hYmxlIGxvZ2dpbmcgdGhlc2UgZXZlbnRzLAorCSAgd2hpY2ggYXJlIGFjY2Vzc2libGUgdGhyb3VnaCBhIGRlYnVnZnMgZmlsZS4KKworCSAgU2F5IE4gaWYgeW91IGFyZSB1bnN1cmUuCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvTWFrZWZpbGUKaW5kZXggZGZlNTc0YS4uNzkwYzBiOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL01ha2VmaWxlCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9NYWtlZmlsZQpAQCAtMTUsNyArMTUsNyBAQAogb2JqLSQoQ09ORklHX0VFSCkJKz0gZWVoLm8gZWVoX2NhY2hlLm8gZWVoX2RyaXZlci5vIGVlaF9ldmVudC5vIGVlaF9zeXNmcy5vCiBvYmotJChDT05GSUdfS0VYRUMpCSs9IGtleGVjLm8KIG9iai0kKENPTkZJR19QQ0kpCSs9IHBjaS5vIHBjaV9kbHBhci5vCi1vYmotJChDT05GSUdfUENJX01TSSkJKz0gbXNpLm8KK29iai0kKENPTkZJR19QU0VSSUVTX01TSSkJKz0gbXNpLm8KIAogb2JqLSQoQ09ORklHX0hPVFBMVUdfQ1BVKQkrPSBob3RwbHVnLWNwdS5vCiBvYmotJChDT05GSUdfTUVNT1JZX0hPVFBMVUcpCSs9IGhvdHBsdWctbWVtb3J5Lm8KQEAgLTI1LDMgKzI1LDQgQEAKIG9iai0kKENPTkZJR19IQ0FMTF9TVEFUUykJKz0gaHZDYWxsX2luc3Qubwogb2JqLSQoQ09ORklHX1BIWVBfRFVNUCkJKz0gcGh5cF9kdW1wLm8KIG9iai0kKENPTkZJR19DTU0pCQkrPSBjbW0ubworb2JqLSQoQ09ORklHX0RUTCkJCSs9IGR0bC5vCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZHRsLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZHRsLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmFmY2FhMAotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9kdGwuYwpAQCAtMCwwICsxLDI3OCBAQAorLyoKKyAqIFZpcnR1YWwgUHJvY2Vzc29yIERpc3BhdGNoIFRyYWNlIExvZworICoKKyAqIChDKSBDb3B5cmlnaHQgSUJNIENvcnBvcmF0aW9uIDIwMDkKKyAqCisgKiBBdXRob3I6IEplcmVteSBLZXJyIDxqa0BvemxhYnMub3JnPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiwgb3IgKGF0IHlvdXIgb3B0aW9uKQorICogYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KKworI2luY2x1ZGUgInBscGFyX3dyYXBwZXJzLmgiCisKKy8qCisgKiBMYXlvdXQgb2YgZW50cmllcyBpbiB0aGUgaHlwZXJ2aXNvcidzIERUTCBidWZmZXIuIEFsdGhvdWdoIHdlIGRvbid0CisgKiBhY3R1YWxseSBhY2Nlc3MgdGhlIGludGVybmFscyBvZiBhbiBlbnRyeSAod2Ugb25seSBuZWVkIHRvIGtub3cgdGhlIHNpemUpLAorICogd2UgbWlnaHQgYXMgd2VsbCBkZWZpbmUgaXQgaGVyZSBmb3IgcmVmZXJlbmNlLgorICovCitzdHJ1Y3QgZHRsX2VudHJ5IHsKKwl1OAlkaXNwYXRjaF9yZWFzb247CisJdTgJcHJlZW1wdF9yZWFzb247CisJdTE2CXByb2Nlc3Nvcl9pZDsKKwl1MzIJZW5xdWV1ZV90b19kaXNwYXRjaF90aW1lOworCXUzMglyZWFkeV90b19lbnF1ZXVlX3RpbWU7CisJdTMyCXdhaXRpbmdfdG9fcmVhZHlfdGltZTsKKwl1NjQJdGltZWJhc2U7CisJdTY0CWZhdWx0X2FkZHI7CisJdTY0CXNycjA7CisJdTY0CXNycjE7Cit9OworCitzdHJ1Y3QgZHRsIHsKKwlzdHJ1Y3QgZHRsX2VudHJ5CSpidWY7CisJc3RydWN0IGRlbnRyeQkJKmZpbGU7CisJaW50CQkJY3B1OworCWludAkJCWJ1Zl9lbnRyaWVzOworCXU2NAkJCWxhc3RfaWR4OworfTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgZHRsLCBkdGwpOworCisvKgorICogRGlzcGF0Y2ggdHJhY2UgbG9nIGV2ZW50IG1hc2s6CisgKiAweDc6IDB4MTogdm9sdW50YXJ5IHZpcnR1YWwgcHJvY2Vzc29yIHdhaXRzCisgKiAgICAgIDB4MjogdGltZS1zbGljZSBwcmVlbXB0cworICogICAgICAweDQ6IHZpcnR1YWwgcGFydGl0aW9uIG1lbW9yeSBwYWdlIGZhdWx0cworICovCitzdGF0aWMgdTggZHRsX2V2ZW50X21hc2sgPSAweDc7CisKKworLyoKKyAqIFNpemUgb2YgcGVyLWNwdSBsb2cgYnVmZmVycy4gRGVmYXVsdCBpcyBqdXN0IHVuZGVyIDE2IHBhZ2VzIHdvcnRoLgorICovCitzdGF0aWMgaW50IGR0bF9idWZfZW50cmllcyA9ICgxNiAqIDg1KTsKKworCitzdGF0aWMgaW50IGR0bF9lbmFibGUoc3RydWN0IGR0bCAqZHRsKQoreworCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwlpbnQgcmV0LCBod2NwdTsKKworCS8qIG9ubHkgYWxsb3cgb25lIHJlYWRlciAqLworCWlmIChkdGwtPmJ1ZikKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIHdlIG5lZWQgdG8gc3RvcmUgdGhlIG9yaWdpbmFsIGFsbG9jYXRpb24gc2l6ZSBmb3IgdXNlIGR1cmluZyByZWFkICovCisJZHRsLT5idWZfZW50cmllcyA9IGR0bF9idWZfZW50cmllczsKKworCWR0bC0+YnVmID0ga21hbGxvY19ub2RlKGR0bC0+YnVmX2VudHJpZXMgKiBzaXplb2Yoc3RydWN0IGR0bF9lbnRyeSksCisJCQlHRlBfS0VSTkVMLCBjcHVfdG9fbm9kZShkdGwtPmNwdSkpOworCWlmICghZHRsLT5idWYpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGJ1ZmZlciBhbGxvYyBmYWlsZWQgZm9yIGNwdSAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgZHRsLT5jcHUpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwkvKiBSZWdpc3RlciBvdXIgZHRsIGJ1ZmZlciB3aXRoIHRoZSBoeXBlcnZpc29yLiBUaGUgSFYgZXhwZWN0cyB0aGUKKwkgKiBidWZmZXIgc2l6ZSB0byBiZSBwYXNzZWQgaW4gdGhlIHNlY29uZCB3b3JkIG9mIHRoZSBidWZmZXIgKi8KKwkoKHUzMiAqKWR0bC0+YnVmKVsxXSA9IGR0bC0+YnVmX2VudHJpZXMgKiBzaXplb2Yoc3RydWN0IGR0bF9lbnRyeSk7CisKKwlod2NwdSA9IGdldF9oYXJkX3NtcF9wcm9jZXNzb3JfaWQoZHRsLT5jcHUpOworCWFkZHIgPSBfX3BhKGR0bC0+YnVmKTsKKwlyZXQgPSByZWdpc3Rlcl9kdGwoaHdjcHUsIGFkZHIpOworCWlmIChyZXQpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IERUTCByZWdpc3RyYXRpb24gZm9yIGNwdSAlZCAoaHcgJWQpICIKKwkJICAgICAgICJmYWlsZWQgd2l0aCAlZFxuIiwgX19mdW5jX18sIGR0bC0+Y3B1LCBod2NwdSwgcmV0KTsKKwkJa2ZyZWUoZHRsLT5idWYpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwkvKiBzZXQgb3VyIGluaXRpYWwgYnVmZmVyIGluZGljZXMgKi8KKwlkdGwtPmxhc3RfaWR4ID0gbHBwYWNhW2R0bC0+Y3B1XS5kdGxfaWR4ID0gMDsKKworCS8qIGVuc3VyZSB0aGF0IG91ciB1cGRhdGVzIHRvIHRoZSBscHBhY2EgZmllbGRzIGhhdmUgb2NjdXJyZWQgYmVmb3JlCisJICogd2UgYWN0dWFsbHkgZW5hYmxlIHRoZSBsb2dnaW5nICovCisJc21wX3dtYigpOworCisJLyogZW5hYmxlIGV2ZW50IGxvZ2dpbmcgKi8KKwlscHBhY2FbZHRsLT5jcHVdLmR0bF9lbmFibGVfbWFzayA9IGR0bF9ldmVudF9tYXNrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIGR0bF9kaXNhYmxlKHN0cnVjdCBkdGwgKmR0bCkKK3sKKwlpbnQgaHdjcHUgPSBnZXRfaGFyZF9zbXBfcHJvY2Vzc29yX2lkKGR0bC0+Y3B1KTsKKworCWxwcGFjYVtkdGwtPmNwdV0uZHRsX2VuYWJsZV9tYXNrID0gMHgwOworCisJdW5yZWdpc3Rlcl9kdGwoaHdjcHUsIF9fcGEoZHRsLT5idWYpKTsKKworCWtmcmVlKGR0bC0+YnVmKTsKKwlkdGwtPmJ1ZiA9IE5VTEw7CisJZHRsLT5idWZfZW50cmllcyA9IDA7Cit9CisKKy8qIGZpbGUgaW50ZXJmYWNlICovCisKK3N0YXRpYyBpbnQgZHRsX2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlzdHJ1Y3QgZHRsICpkdGwgPSBpbm9kZS0+aV9wcml2YXRlOworCWludCByYzsKKworCXJjID0gZHRsX2VuYWJsZShkdGwpOworCWlmIChyYykKKwkJcmV0dXJuIHJjOworCisJZmlscC0+cHJpdmF0ZV9kYXRhID0gZHRsOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGR0bF9maWxlX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbHApCit7CisJc3RydWN0IGR0bCAqZHRsID0gaW5vZGUtPmlfcHJpdmF0ZTsKKwlkdGxfZGlzYWJsZShkdGwpOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3NpemVfdCBkdGxfZmlsZV9yZWFkKHN0cnVjdCBmaWxlICpmaWxwLCBjaGFyIF9fdXNlciAqYnVmLCBzaXplX3QgbGVuLAorCQlsb2ZmX3QgKnBvcykKK3sKKwlpbnQgcmMsIGN1cl9pZHgsIGxhc3RfaWR4LCBuX3JlYWQsIG5fcmVxLCByZWFkX3NpemU7CisJc3RydWN0IGR0bCAqZHRsOworCisJaWYgKChsZW4gJSBzaXplb2Yoc3RydWN0IGR0bF9lbnRyeSkpICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJZHRsID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCisJLyogcmVxdWVzdGVkIG51bWJlciBvZiBlbnRyaWVzIHRvIHJlYWQgKi8KKwluX3JlcSA9IGxlbiAvIHNpemVvZihzdHJ1Y3QgZHRsX2VudHJ5KTsKKworCS8qIGFjdHVhbCBudW1iZXIgb2YgZW50cmllcyByZWFkICovCisJbl9yZWFkID0gMDsKKworCWN1cl9pZHggPSBscHBhY2FbZHRsLT5jcHVdLmR0bF9pZHg7CisJbGFzdF9pZHggPSBkdGwtPmxhc3RfaWR4OworCisJaWYgKGN1cl9pZHggLSBsYXN0X2lkeCA+IGR0bC0+YnVmX2VudHJpZXMpIHsKKwkJcHJfZGVidWcoIiVzOiBodiBidWZmZXIgb3ZlcmZsb3cgZm9yIGNwdSAlZCwgc2FtcGxlcyBsb3N0XG4iLAorCQkJCV9fZnVuY19fLCBkdGwtPmNwdSk7CisJfQorCisJY3VyX2lkeCAgJT0gZHRsLT5idWZfZW50cmllczsKKwlsYXN0X2lkeCAlPSBkdGwtPmJ1Zl9lbnRyaWVzOworCisJLyogcmVhZCB0aGUgdGFpbCBvZiB0aGUgYnVmZmVyIGlmIHdlJ3ZlIHdyYXBwZWQgKi8KKwlpZiAobGFzdF9pZHggPiBjdXJfaWR4KSB7CisJCXJlYWRfc2l6ZSA9IG1pbihuX3JlcSwgZHRsLT5idWZfZW50cmllcyAtIGxhc3RfaWR4KTsKKworCQlyYyA9IGNvcHlfdG9fdXNlcihidWYsICZkdGwtPmJ1ZltsYXN0X2lkeF0sCisJCQkJcmVhZF9zaXplICogc2l6ZW9mKHN0cnVjdCBkdGxfZW50cnkpKTsKKwkJaWYgKHJjKQorCQkJcmV0dXJuIC1FRkFVTFQ7CisKKwkJbGFzdF9pZHggPSAwOworCQluX3JlcSAtPSByZWFkX3NpemU7CisJCW5fcmVhZCArPSByZWFkX3NpemU7CisJCWJ1ZiArPSByZWFkX3NpemUgKiBzaXplb2Yoc3RydWN0IGR0bF9lbnRyeSk7CisJfQorCisJLyogLi4gYW5kIG5vdyB0aGUgaGVhZCAqLworCXJlYWRfc2l6ZSA9IG1pbihuX3JlcSwgY3VyX2lkeCAtIGxhc3RfaWR4KTsKKwlyYyA9IGNvcHlfdG9fdXNlcihidWYsICZkdGwtPmJ1ZltsYXN0X2lkeF0sCisJCQlyZWFkX3NpemUgKiBzaXplb2Yoc3RydWN0IGR0bF9lbnRyeSkpOworCWlmIChyYykKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwluX3JlYWQgKz0gcmVhZF9zaXplOworCWR0bC0+bGFzdF9pZHggKz0gbl9yZWFkOworCisJcmV0dXJuIG5fcmVhZCAqIHNpemVvZihzdHJ1Y3QgZHRsX2VudHJ5KTsKK30KKworc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHRsX2ZvcHMgPSB7CisJLm9wZW4JCT0gZHRsX2ZpbGVfb3BlbiwKKwkucmVsZWFzZQk9IGR0bF9maWxlX3JlbGVhc2UsCisJLnJlYWQJCT0gZHRsX2ZpbGVfcmVhZCwKKwkubGxzZWVrCQk9IG5vX2xsc2VlaywKK307CisKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkdGxfZGlyOworCitzdGF0aWMgaW50IGR0bF9zZXR1cF9maWxlKHN0cnVjdCBkdGwgKmR0bCkKK3sKKwljaGFyIG5hbWVbMTBdOworCisJc3ByaW50ZihuYW1lLCAiY3B1LSVkIiwgZHRsLT5jcHUpOworCisJZHRsLT5maWxlID0gZGVidWdmc19jcmVhdGVfZmlsZShuYW1lLCAwNDAwLCBkdGxfZGlyLCBkdGwsICZkdGxfZm9wcyk7CisJaWYgKCFkdGwtPmZpbGUpCisJCXJldHVybiAtRU5PTUVNOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZHRsX2luaXQodm9pZCkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpldmVudF9tYXNrX2ZpbGUsICpidWZfZW50cmllc19maWxlOworCWludCByYywgaTsKKworCWlmICghZmlybXdhcmVfaGFzX2ZlYXR1cmUoRldfRkVBVFVSRV9TUExQQVIpKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCS8qIHNldCB1cCBjb21tb24gZGVidWdmcyBzdHJ1Y3R1cmUgKi8KKworCXJjID0gLUVOT01FTTsKKwlkdGxfZGlyID0gZGVidWdmc19jcmVhdGVfZGlyKCJkdGwiLCBwb3dlcnBjX2RlYnVnZnNfcm9vdCk7CisJaWYgKCFkdGxfZGlyKSB7CisJCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBjYW4ndCBjcmVhdGUgZHRsIHJvb3QgZGlyXG4iLAorCQkJCV9fZnVuY19fKTsKKwkJZ290byBlcnI7CisJfQorCisJZXZlbnRfbWFza19maWxlID0gZGVidWdmc19jcmVhdGVfeDgoImR0bF9ldmVudF9tYXNrIiwgMDYwMCwKKwkJCQlkdGxfZGlyLCAmZHRsX2V2ZW50X21hc2spOworCWJ1Zl9lbnRyaWVzX2ZpbGUgPSBkZWJ1Z2ZzX2NyZWF0ZV91MzIoImR0bF9idWZfZW50cmllcyIsIDA2MDAsCisJCQkJZHRsX2RpciwgJmR0bF9idWZfZW50cmllcyk7CisKKwlpZiAoIWV2ZW50X21hc2tfZmlsZSB8fCAhYnVmX2VudHJpZXNfZmlsZSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogY2FuJ3QgY3JlYXRlIGR0bCBmaWxlc1xuIiwgX19mdW5jX18pOworCQlnb3RvIGVycl9yZW1vdmVfZGlyOworCX0KKworCS8qIHNldCB1cCB0aGUgcGVyLWNwdSBsb2cgc3RydWN0dXJlcyAqLworCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShpKSB7CisJCXN0cnVjdCBkdGwgKmR0bCA9ICZwZXJfY3B1KGR0bCwgaSk7CisJCWR0bC0+Y3B1ID0gaTsKKworCQlyYyA9IGR0bF9zZXR1cF9maWxlKGR0bCk7CisJCWlmIChyYykKKwkJCWdvdG8gZXJyX3JlbW92ZV9kaXI7CisJfQorCisJcmV0dXJuIDA7CisKK2Vycl9yZW1vdmVfZGlyOgorCWRlYnVnZnNfcmVtb3ZlX3JlY3Vyc2l2ZShkdGxfZGlyKTsKK2VycjoKKwlyZXR1cm4gcmM7Cit9CithcmNoX2luaXRjYWxsKGR0bF9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvZWVoX2RyaXZlci5jCmluZGV4IDBhZDU2ZmYuLjM4MDQyMGYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9lZWhfZHJpdmVyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL2VlaF9kcml2ZXIuYwpAQCAtNzksNiArNzksNDAgQEAKIAlyZXR1cm4gcmM7CiB9CiAKKy8qKgorICogZWVoX2Rpc2FibGVfaXJxIC0gZGlzYWJsZSBpbnRlcnJ1cHQgZm9yIHRoZSByZWNvdmVyaW5nIGRldmljZQorICovCitzdGF0aWMgdm9pZCBlZWhfZGlzYWJsZV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7CisKKwkvKiBEb24ndCBkaXNhYmxlIE1TSSBhbmQgTVNJLVggaW50ZXJydXB0cy4gVGhleSBhcmUKKwkgKiBlZmZlY3RpdmVseSBkaXNhYmxlZCBieSB0aGUgRE1BIFN0b3BwZWQgc3RhdGUKKwkgKiB3aGVuIGFuIEVFSCBlcnJvciBvY2N1cnMuCisJKi8KKwlpZiAoZGV2LT5tc2lfZW5hYmxlZCB8fCBkZXYtPm1zaXhfZW5hYmxlZCkKKwkJcmV0dXJuOworCisJaWYgKCFpcnFfaW5fdXNlKGRldi0+aXJxKSkKKwkJcmV0dXJuOworCisJUENJX0ROKGRuKS0+ZWVoX21vZGUgfD0gRUVIX01PREVfSVJRX0RJU0FCTEVEOworCWRpc2FibGVfaXJxX25vc3luYyhkZXYtPmlycSk7Cit9CisKKy8qKgorICogZWVoX2VuYWJsZV9pcnEgLSBlbmFibGUgaW50ZXJydXB0IGZvciB0aGUgcmVjb3ZlcmluZyBkZXZpY2UKKyAqLworc3RhdGljIHZvaWQgZWVoX2VuYWJsZV9pcnEoc3RydWN0IHBjaV9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7CisKKwlpZiAoKFBDSV9ETihkbiktPmVlaF9tb2RlKSAmIEVFSF9NT0RFX0lSUV9ESVNBQkxFRCkgeworCQlQQ0lfRE4oZG4pLT5lZWhfbW9kZSAmPSB+RUVIX01PREVfSVJRX0RJU0FCTEVEOworCQllbmFibGVfaXJxKGRldi0+aXJxKTsKKwl9Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qKgogICogZWVoX3JlcG9ydF9lcnJvciAtIHJlcG9ydCBwY2kgZXJyb3IgdG8gZWFjaCBkZXZpY2UgZHJpdmVyCkBAIC05OCwxMSArMTMyLDggQEAKIAlpZiAoIWRyaXZlcikKIAkJcmV0dXJuOwogCi0JaWYgKGlycV9pbl91c2UgKGRldi0+aXJxKSkgewotCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7Ci0JCVBDSV9ETihkbiktPmVlaF9tb2RlIHw9IEVFSF9NT0RFX0lSUV9ESVNBQkxFRDsKLQkJZGlzYWJsZV9pcnFfbm9zeW5jKGRldi0+aXJxKTsKLQl9CisJZWVoX2Rpc2FibGVfaXJxKGRldik7CisKIAlpZiAoIWRyaXZlci0+ZXJyX2hhbmRsZXIgfHwKIAkgICAgIWRyaXZlci0+ZXJyX2hhbmRsZXItPmVycm9yX2RldGVjdGVkKQogCQlyZXR1cm47CkBAIC0xNDcsMTUgKzE3OCwxMiBAQAogewogCWVudW0gcGNpX2Vyc19yZXN1bHQgcmMsICpyZXMgPSB1c2VyZGF0YTsKIAlzdHJ1Y3QgcGNpX2RyaXZlciAqZHJpdmVyID0gZGV2LT5kcml2ZXI7Ci0Jc3RydWN0IGRldmljZV9ub2RlICpkbiA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOwogCiAJaWYgKCFkcml2ZXIpCiAJCXJldHVybjsKIAotCWlmICgoUENJX0ROKGRuKS0+ZWVoX21vZGUpICYgRUVIX01PREVfSVJRX0RJU0FCTEVEKSB7Ci0JCVBDSV9ETihkbiktPmVlaF9tb2RlICY9IH5FRUhfTU9ERV9JUlFfRElTQUJMRUQ7Ci0JCWVuYWJsZV9pcnEoZGV2LT5pcnEpOwotCX0KKwllZWhfZW5hYmxlX2lycShkZXYpOworCiAJaWYgKCFkcml2ZXItPmVycl9oYW5kbGVyIHx8CiAJICAgICFkcml2ZXItPmVycl9oYW5kbGVyLT5zbG90X3Jlc2V0KQogCQlyZXR1cm47CkBAIC0xNzQsMTcgKzIwMiwxNCBAQAogc3RhdGljIHZvaWQgZWVoX3JlcG9ydF9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKmRldiwgdm9pZCAqdXNlcmRhdGEpCiB7CiAJc3RydWN0IHBjaV9kcml2ZXIgKmRyaXZlciA9IGRldi0+ZHJpdmVyOwotCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4gPSBwY2lfZGV2aWNlX3RvX09GX25vZGUoZGV2KTsKIAogCWRldi0+ZXJyb3Jfc3RhdGUgPSBwY2lfY2hhbm5lbF9pb19ub3JtYWw7CiAKIAlpZiAoIWRyaXZlcikKIAkJcmV0dXJuOwogCi0JaWYgKChQQ0lfRE4oZG4pLT5lZWhfbW9kZSkgJiBFRUhfTU9ERV9JUlFfRElTQUJMRUQpIHsKLQkJUENJX0ROKGRuKS0+ZWVoX21vZGUgJj0gfkVFSF9NT0RFX0lSUV9ESVNBQkxFRDsKLQkJZW5hYmxlX2lycShkZXYtPmlycSk7Ci0JfQorCWVlaF9lbmFibGVfaXJxKGRldik7CisKIAlpZiAoIWRyaXZlci0+ZXJyX2hhbmRsZXIgfHwKIAkgICAgIWRyaXZlci0+ZXJyX2hhbmRsZXItPnJlc3VtZSkKIAkJcmV0dXJuOwpAQCAtMjA4LDE1ICsyMzMsMTIgQEAKIAlpZiAoIWRyaXZlcikKIAkJcmV0dXJuOwogCi0JaWYgKGlycV9pbl91c2UgKGRldi0+aXJxKSkgewotCQlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7Ci0JCVBDSV9ETihkbiktPmVlaF9tb2RlIHw9IEVFSF9NT0RFX0lSUV9ESVNBQkxFRDsKLQkJZGlzYWJsZV9pcnFfbm9zeW5jKGRldi0+aXJxKTsKLQl9Ci0JaWYgKCFkcml2ZXItPmVycl9oYW5kbGVyKQorCWVlaF9kaXNhYmxlX2lycShkZXYpOworCisJaWYgKCFkcml2ZXItPmVycl9oYW5kbGVyIHx8CisJICAgICFkcml2ZXItPmVycl9oYW5kbGVyLT5lcnJvcl9kZXRlY3RlZCkKIAkJcmV0dXJuOwotCWlmICghZHJpdmVyLT5lcnJfaGFuZGxlci0+ZXJyb3JfZGV0ZWN0ZWQpCi0JCXJldHVybjsKKwogCWRyaXZlci0+ZXJyX2hhbmRsZXItPmVycm9yX2RldGVjdGVkKGRldiwgcGNpX2NoYW5uZWxfaW9fcGVybV9mYWlsdXJlKTsKIH0KIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL21zaS5jCmluZGV4IGYxNTIyMmIuLmJmMmUxYWMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9tc2kuYworKysgYi9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvbXNpLmMKQEAgLTcxLDExICs3MSwxMyBAQAogCX0gd2hpbGUgKHJ0YXNfYnVzeV9kZWxheShyYykpOwogCiAJLyoKLQkgKiBJZiB0aGUgUlRBUyBjYWxsIHN1Y2NlZWRlZCwgY2hlY2sgdGhlIG51bWJlciBvZiBpcnFzIGlzIGFjdHVhbGx5Ci0JICogd2hhdCB3ZSBhc2tlZCBmb3IuIElmIG5vdCwgcmV0dXJuIGFuIGVycm9yLgorCSAqIElmIHRoZSBSVEFTIGNhbGwgc3VjY2VlZGVkLCByZXR1cm4gdGhlIG51bWJlciBvZiBpcnFzIGFsbG9jYXRlZC4KKwkgKiBJZiBub3QsIG1ha2Ugc3VyZSB3ZSByZXR1cm4gYSBuZWdhdGl2ZSBlcnJvciBjb2RlLgogCSAqLwotCWlmIChyYyA9PSAwICYmIHJ0YXNfcmV0WzBdICE9IG51bV9pcnFzKQotCQlyYyA9IC1FTk9TUEM7CisJaWYgKHJjID09IDApCisJCXJjID0gcnRhc19yZXRbMF07CisJZWxzZSBpZiAocmMgPiAwKQorCQlyYyA9IC1yYzsKIAogCXByX2RlYnVnKCJydGFzX21zaTogaWJtLGNoYW5nZV9tc2koZnVuYz0lZCxudW09JWQpLCBnb3QgJWQgcmMgPSAlZFxuIiwKIAkJIGZ1bmMsIG51bV9pcnFzLCBydGFzX3JldFswXSwgcmMpOwpAQCAtOTEsNyArOTMsNyBAQAogCWlmICghcGRuKQogCQlyZXR1cm47CiAKLQlpZiAocnRhc19jaGFuZ2VfbXNpKHBkbiwgUlRBU19DSEFOR0VfRk4sIDApKQorCWlmIChydGFzX2NoYW5nZV9tc2kocGRuLCBSVEFTX0NIQU5HRV9GTiwgMCkgIT0gMCkKIAkJcHJfZGVidWcoInJ0YXNfbXNpOiBTZXR0aW5nIE1TSXMgdG8gMCBmYWlsZWQhXG4iKTsKIH0KIApAQCAtMTMyLDcgKzEzNCw3IEBACiAJcnRhc19kaXNhYmxlX21zaShwZGV2KTsKIH0KIAotc3RhdGljIGludCBjaGVja19yZXFfbXNpKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnZlYykKK3N0YXRpYyBpbnQgY2hlY2tfcmVxKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnZlYywgY2hhciAqcHJvcF9uYW1lKQogewogCXN0cnVjdCBkZXZpY2Vfbm9kZSAqZG47CiAJc3RydWN0IHBjaV9kbiAqcGRuOwpAQCAtMTQ0LDI2ICsxNDYsMjM1IEBACiAKIAlkbiA9IHBkbi0+bm9kZTsKIAotCXJlcV9tc2kgPSBvZl9nZXRfcHJvcGVydHkoZG4sICJpYm0scmVxI21zaSIsIE5VTEwpOworCXJlcV9tc2kgPSBvZl9nZXRfcHJvcGVydHkoZG4sIHByb3BfbmFtZSwgTlVMTCk7CiAJaWYgKCFyZXFfbXNpKSB7Ci0JCXByX2RlYnVnKCJydGFzX21zaTogTm8gaWJtLHJlcSNtc2kgb24gJXNcbiIsIGRuLT5mdWxsX25hbWUpOworCQlwcl9kZWJ1ZygicnRhc19tc2k6IE5vICVzIG9uICVzXG4iLCBwcm9wX25hbWUsIGRuLT5mdWxsX25hbWUpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKIAlpZiAoKnJlcV9tc2kgPCBudmVjKSB7Ci0JCXByX2RlYnVnKCJydGFzX21zaTogaWJtLHJlcSNtc2kgcmVxdWVzdHMgPCAlZCBNU0lzXG4iLCBudmVjKTsKLQkJcmV0dXJuIC1FTk9TUEM7CisJCXByX2RlYnVnKCJydGFzX21zaTogJXMgcmVxdWVzdHMgPCAlZCBNU0lzXG4iLCBwcm9wX25hbWUsIG52ZWMpOworCisJCWlmICgqcmVxX21zaSA9PSAwKSAvKiBCZSBwYXJhbm9pZCAqLworCQkJcmV0dXJuIC1FTk9TUEM7CisKKwkJcmV0dXJuICpyZXFfbXNpOwogCX0KIAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGNoZWNrX3JlcV9tc2koc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudmVjKQoreworCXJldHVybiBjaGVja19yZXEocGRldiwgbnZlYywgImlibSxyZXEjbXNpIik7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfcmVxX21zaXgoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGludCBudmVjKQoreworCXJldHVybiBjaGVja19yZXEocGRldiwgbnZlYywgImlibSxyZXEjbXNpLXgiKTsKK30KKworLyogUXVvdGEgY2FsY3VsYXRpb24gKi8KKworc3RhdGljIHN0cnVjdCBkZXZpY2Vfbm9kZSAqZmluZF9wZV90b3RhbF9tc2koc3RydWN0IHBjaV9kZXYgKmRldiwgaW50ICp0b3RhbCkKK3sKKwlzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuOworCWNvbnN0IHUzMiAqcDsKKworCWRuID0gb2Zfbm9kZV9nZXQocGNpX2RldmljZV90b19PRl9ub2RlKGRldikpOworCXdoaWxlIChkbikgeworCQlwID0gb2ZfZ2V0X3Byb3BlcnR5KGRuLCAiaWJtLHBlLXRvdGFsLSNtc2kiLCBOVUxMKTsKKwkJaWYgKHApIHsKKwkJCXByX2RlYnVnKCJydGFzX21zaTogZm91bmQgcHJvcCBvbiBkbiAlc1xuIiwKKwkJCQlkbi0+ZnVsbF9uYW1lKTsKKwkJCSp0b3RhbCA9ICpwOworCQkJcmV0dXJuIGRuOworCQl9CisKKwkJZG4gPSBvZl9nZXRfbmV4dF9wYXJlbnQoZG4pOworCX0KKworCXJldHVybiBOVUxMOworfQorCitzdGF0aWMgc3RydWN0IGRldmljZV9ub2RlICpmaW5kX3BlX2RuKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCAqdG90YWwpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpkbjsKKworCS8qIEZvdW5kIG91ciBQRSBhbmQgYXNzdW1lIDggYXQgdGhhdCBwb2ludC4gKi8KKworCWRuID0gcGNpX2RldmljZV90b19PRl9ub2RlKGRldik7CisJaWYgKCFkbikKKwkJcmV0dXJuIE5VTEw7CisKKwlkbiA9IGZpbmRfZGV2aWNlX3BlKGRuKTsKKwlpZiAoIWRuKQorCQlyZXR1cm4gTlVMTDsKKworCS8qIFdlIGFjdHVhbGx5IHdhbnQgdGhlIHBhcmVudCAqLworCWRuID0gb2ZfZ2V0X3BhcmVudChkbik7CisJaWYgKCFkbikKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBIYXJkY29kZSBvZiA4IGZvciBvbGQgZmlybXdhcmVzICovCisJKnRvdGFsID0gODsKKwlwcl9kZWJ1ZygicnRhc19tc2k6IHVzaW5nIFBFIGRuICVzXG4iLCBkbi0+ZnVsbF9uYW1lKTsKKworCXJldHVybiBkbjsKK30KKworc3RydWN0IG1zaV9jb3VudHMgeworCXN0cnVjdCBkZXZpY2Vfbm9kZSAqcmVxdWVzdG9yOworCWludCBudW1fZGV2aWNlczsKKwlpbnQgcmVxdWVzdDsKKwlpbnQgcXVvdGE7CisJaW50IHNwYXJlOworCWludCBvdmVyX3F1b3RhOworfTsKKworc3RhdGljIHZvaWQgKmNvdW50X25vbl9icmlkZ2VfZGV2aWNlcyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBtc2lfY291bnRzICpjb3VudHMgPSBkYXRhOworCWNvbnN0IHUzMiAqcDsKKwl1MzIgY2xhc3M7CisKKwlwcl9kZWJ1ZygicnRhc19tc2k6IGNvdW50aW5nICVzXG4iLCBkbi0+ZnVsbF9uYW1lKTsKKworCXAgPSBvZl9nZXRfcHJvcGVydHkoZG4sICJjbGFzcy1jb2RlIiwgTlVMTCk7CisJY2xhc3MgPSBwID8gKnAgOiAwOworCisJaWYgKChjbGFzcyA+PiA4KSAhPSBQQ0lfQ0xBU1NfQlJJREdFX1BDSSkKKwkJY291bnRzLT5udW1fZGV2aWNlcysrOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkICpjb3VudF9zcGFyZV9tc2lzKHN0cnVjdCBkZXZpY2Vfbm9kZSAqZG4sIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IG1zaV9jb3VudHMgKmNvdW50cyA9IGRhdGE7CisJY29uc3QgdTMyICpwOworCWludCByZXE7CisKKwlpZiAoZG4gPT0gY291bnRzLT5yZXF1ZXN0b3IpCisJCXJlcSA9IGNvdW50cy0+cmVxdWVzdDsKKwllbHNlIHsKKwkJLyogV2UgZG9uJ3Qga25vdyBpZiBhIGRyaXZlciB3aWxsIHRyeSB0byB1c2UgTVNJIG9yIE1TSS1YLAorCQkgKiBzbyB3ZSBqdXN0IGhhdmUgdG8gcHVudCBhbmQgdXNlIHRoZSBsYXJnZXIgb2YgdGhlIHR3by4gKi8KKwkJcmVxID0gMDsKKwkJcCA9IG9mX2dldF9wcm9wZXJ0eShkbiwgImlibSxyZXEjbXNpIiwgTlVMTCk7CisJCWlmIChwKQorCQkJcmVxID0gKnA7CisKKwkJcCA9IG9mX2dldF9wcm9wZXJ0eShkbiwgImlibSxyZXEjbXNpLXgiLCBOVUxMKTsKKwkJaWYgKHApCisJCQlyZXEgPSBtYXgocmVxLCAoaW50KSpwKTsKKwl9CisKKwlpZiAocmVxIDwgY291bnRzLT5xdW90YSkKKwkJY291bnRzLT5zcGFyZSArPSBjb3VudHMtPnF1b3RhIC0gcmVxOworCWVsc2UgaWYgKHJlcSA+IGNvdW50cy0+cXVvdGEpCisJCWNvdW50cy0+b3Zlcl9xdW90YSsrOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbnQgbXNpX3F1b3RhX2Zvcl9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHJlcXVlc3QpCit7CisJc3RydWN0IGRldmljZV9ub2RlICpwZV9kbjsKKwlzdHJ1Y3QgbXNpX2NvdW50cyBjb3VudHM7CisJaW50IHRvdGFsOworCisJcHJfZGVidWcoInJ0YXNfbXNpOiBjYWxjIHF1b3RhIGZvciAlcywgcmVxdWVzdCAlZFxuIiwgcGNpX25hbWUoZGV2KSwKKwkJICByZXF1ZXN0KTsKKworCXBlX2RuID0gZmluZF9wZV90b3RhbF9tc2koZGV2LCAmdG90YWwpOworCWlmICghcGVfZG4pCisJCXBlX2RuID0gZmluZF9wZV9kbihkZXYsICZ0b3RhbCk7CisKKwlpZiAoIXBlX2RuKSB7CisJCXByX2VycigicnRhc19tc2k6IGNvdWxkbid0IGZpbmQgUEUgZm9yICVzXG4iLCBwY2lfbmFtZShkZXYpKTsKKwkJZ290byBvdXQ7CisJfQorCisJcHJfZGVidWcoInJ0YXNfbXNpOiBmb3VuZCBQRSAlc1xuIiwgcGVfZG4tPmZ1bGxfbmFtZSk7CisKKwltZW1zZXQoJmNvdW50cywgMCwgc2l6ZW9mKHN0cnVjdCBtc2lfY291bnRzKSk7CisKKwkvKiBXb3JrIG91dCBob3cgbWFueSBkZXZpY2VzIHdlIGhhdmUgYmVsb3cgdGhpcyBQRSAqLworCXRyYXZlcnNlX3BjaV9kZXZpY2VzKHBlX2RuLCBjb3VudF9ub25fYnJpZGdlX2RldmljZXMsICZjb3VudHMpOworCisJaWYgKGNvdW50cy5udW1fZGV2aWNlcyA9PSAwKSB7CisJCXByX2VycigicnRhc19tc2k6IGZvdW5kIDAgZGV2aWNlcyB1bmRlciBQRSBmb3IgJXNcbiIsCisJCQlwY2lfbmFtZShkZXYpKTsKKwkJZ290byBvdXQ7CisJfQorCisJY291bnRzLnF1b3RhID0gdG90YWwgLyBjb3VudHMubnVtX2RldmljZXM7CisJaWYgKHJlcXVlc3QgPD0gY291bnRzLnF1b3RhKQorCQlnb3RvIG91dDsKKworCS8qIGVsc2UsIHdlIGhhdmUgc29tZSBtb3JlIGNhbGN1bGF0aW5nIHRvIGRvICovCisJY291bnRzLnJlcXVlc3RvciA9IHBjaV9kZXZpY2VfdG9fT0Zfbm9kZShkZXYpOworCWNvdW50cy5yZXF1ZXN0ID0gcmVxdWVzdDsKKwl0cmF2ZXJzZV9wY2lfZGV2aWNlcyhwZV9kbiwgY291bnRfc3BhcmVfbXNpcywgJmNvdW50cyk7CisKKwkvKiBJZiB0aGUgcXVvdGEgaXNuJ3QgYW4gaW50ZWdlciBtdWx0aXBsZSBvZiB0aGUgdG90YWwsIHdlIGNhbgorCSAqIHVzZSB0aGUgcmVtYWluZGVyIGFzIHNwYXJlIE1TSXMgZm9yIGFueW9uZSB0aGF0IHdhbnRzIHRoZW0uICovCisJY291bnRzLnNwYXJlICs9IHRvdGFsICUgY291bnRzLm51bV9kZXZpY2VzOworCisJLyogRGl2aWRlIGFueSBzcGFyZSBieSB0aGUgbnVtYmVyIG9mIG92ZXItcXVvdGEgcmVxdWVzdG9ycyAqLworCWlmIChjb3VudHMub3Zlcl9xdW90YSkKKwkJY291bnRzLnF1b3RhICs9IGNvdW50cy5zcGFyZSAvIGNvdW50cy5vdmVyX3F1b3RhOworCisJLyogQW5kIGZpbmFsbHkgY2xhbXAgdGhlIHJlcXVlc3QgdG8gdGhlIHBvc3NpYmx5IGFkanVzdGVkIHF1b3RhICovCisJcmVxdWVzdCA9IG1pbihjb3VudHMucXVvdGEsIHJlcXVlc3QpOworCisJcHJfZGVidWcoInJ0YXNfbXNpOiByZXF1ZXN0IGNsYW1wZWQgdG8gcXVvdGEgJWRcbiIsIHJlcXVlc3QpOworb3V0OgorCW9mX25vZGVfcHV0KHBlX2RuKTsKKworCXJldHVybiByZXF1ZXN0OworfQorCiBzdGF0aWMgaW50IHJ0YXNfbXNpX2NoZWNrX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgaW50IG52ZWMsIGludCB0eXBlKQogewotCWlmICh0eXBlID09IFBDSV9DQVBfSURfTVNJWCkKLQkJcHJfZGVidWcoInJ0YXNfbXNpOiBNU0ktWCB1bnRlc3RlZCwgdHJ5aW5nIGFueXdheS5cbiIpOworCWludCBxdW90YSwgcmM7CiAKLQlyZXR1cm4gY2hlY2tfcmVxX21zaShwZGV2LCBudmVjKTsKKwlpZiAodHlwZSA9PSBQQ0lfQ0FQX0lEX01TSVgpCisJCXJjID0gY2hlY2tfcmVxX21zaXgocGRldiwgbnZlYyk7CisJZWxzZQorCQlyYyA9IGNoZWNrX3JlcV9tc2kocGRldiwgbnZlYyk7CisKKwlpZiAocmMpCisJCXJldHVybiByYzsKKworCXF1b3RhID0gbXNpX3F1b3RhX2Zvcl9kZXZpY2UocGRldiwgbnZlYyk7CisKKwlpZiAocXVvdGEgJiYgcXVvdGEgPCBudmVjKQorCQlyZXR1cm4gcXVvdGE7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjaGVja19tc2l4X2VudHJpZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpCit7CisJc3RydWN0IG1zaV9kZXNjICplbnRyeTsKKwlpbnQgZXhwZWN0ZWQ7CisKKwkvKiBUaGVyZSdzIG5vIHdheSBmb3IgdXMgdG8gZXhwcmVzcyB0byBmaXJtd2FyZSB0aGF0IHdlIHdhbnQKKwkgKiBhIGRpc2NvbnRpZ3VvdXMsIG9yIG5vbi16ZXJvIGJhc2VkLCByYW5nZSBvZiBNU0ktWCBlbnRyaWVzLgorCSAqIFNvIHdlIG11c3QgcmVqZWN0IHN1Y2ggcmVxdWVzdHMuICovCisKKwlleHBlY3RlZCA9IDA7CisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJnBkZXYtPm1zaV9saXN0LCBsaXN0KSB7CisJCWlmIChlbnRyeS0+bXNpX2F0dHJpYi5lbnRyeV9uciAhPSBleHBlY3RlZCkgeworCQkJcHJfZGVidWcoInJ0YXNfbXNpOiBiYWQgTVNJLVggZW50cmllcy5cbiIpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKwkJZXhwZWN0ZWQrKzsKKwl9CisKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBydGFzX3NldHVwX21zaV9pcnFzKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBpbnQgbnZlYywgaW50IHR5cGUpCkBAIC0xNzcsNiArMzg4LDkgQEAKIAlpZiAoIXBkbikKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwlpZiAodHlwZSA9PSBQQ0lfQ0FQX0lEX01TSVggJiYgY2hlY2tfbXNpeF9lbnRyaWVzKHBkZXYpKQorCQlyZXR1cm4gLUVJTlZBTDsKKwogCS8qCiAJICogVHJ5IHRoZSBuZXcgbW9yZSBleHBsaWNpdCBmaXJtd2FyZSBpbnRlcmZhY2UsIGlmIHRoYXQgZmFpbHMgZmFsbAogCSAqIGJhY2sgdG8gdGhlIG9sZCBpbnRlcmZhY2UuIFRoZSBvbGQgaW50ZXJmYWNlIGlzIGtub3duIHRvIG5ldmVyCkBAIC0xODUsMjEgKzM5OSwyMSBAQAogCWlmICh0eXBlID09IFBDSV9DQVBfSURfTVNJKSB7CiAJCXJjID0gcnRhc19jaGFuZ2VfbXNpKHBkbiwgUlRBU19DSEFOR0VfTVNJX0ZOLCBudmVjKTsKIAotCQlpZiAocmMpIHsKKwkJaWYgKHJjIDwgMCkgewogCQkJcHJfZGVidWcoInJ0YXNfbXNpOiB0cnlpbmcgdGhlIG9sZCBmaXJtd2FyZSBjYWxsLlxuIik7CiAJCQlyYyA9IHJ0YXNfY2hhbmdlX21zaShwZG4sIFJUQVNfQ0hBTkdFX0ZOLCBudmVjKTsKIAkJfQogCX0gZWxzZQogCQlyYyA9IHJ0YXNfY2hhbmdlX21zaShwZG4sIFJUQVNfQ0hBTkdFX01TSVhfRk4sIG52ZWMpOwogCi0JaWYgKHJjKSB7CisJaWYgKHJjICE9IG52ZWMpIHsKIAkJcHJfZGVidWcoInJ0YXNfbXNpOiBydGFzX2NoYW5nZV9tc2koKSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gcmM7CiAJfQogCiAJaSA9IDA7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJnBkZXYtPm1zaV9saXN0LCBsaXN0KSB7Ci0JCWh3aXJxID0gcnRhc19xdWVyeV9pcnFfbnVtYmVyKHBkbiwgaSk7CisJCWh3aXJxID0gcnRhc19xdWVyeV9pcnFfbnVtYmVyKHBkbiwgaSsrKTsKIAkJaWYgKGh3aXJxIDwgMCkgewogCQkJcHJfZGVidWcoInJ0YXNfbXNpOiBlcnJvciAoJWQpIGdldHRpbmcgaHdpcnFcbiIsIHJjKTsKIAkJCXJldHVybiBod2lycTsKQEAgLTIzNCw4ICs0NDgsOCBAQAogCX0KIAogCS8qIE5vIE1TSSAtPiBNU0lzIGNhbid0IGhhdmUgYmVlbiBhc3NpZ25lZCBieSBmdywgbGVhdmUgTFNJICovCi0JaWYgKGNoZWNrX3JlcV9tc2kocGRldiwgMSkpIHsKLQkJZGV2X2RiZygmcGRldi0+ZGV2LCAicnRhc19tc2k6IG5vIHJlcSNtc2ksIG5vdGhpbmcgdG8gZG8uXG4iKTsKKwlpZiAoY2hlY2tfcmVxX21zaShwZGV2LCAxKSAmJiBjaGVja19yZXFfbXNpeChwZGV2LCAxKSkgeworCQlkZXZfZGJnKCZwZGV2LT5kZXYsICJydGFzX21zaTogbm8gcmVxI21zaS94LCBub3RoaW5nIHRvIGRvLlxuIik7CiAJCXJldHVybjsKIAl9CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2lfZGxwYXIuYyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wY2lfZGxwYXIuYwppbmRleCA1ZTFlZDNkLi5hZDE1MmEwIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvcGNpX2RscGFyLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BjaV9kbHBhci5jCkBAIC0xMzcsMTEgKzEzNyw5IEBACiBzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKiBfX2RldmluaXQgaW5pdF9waGJfZHluYW1pYyhzdHJ1Y3QgZGV2aWNlX25vZGUgKmRuKQogewogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqcGhiOwotCWludCBwcmltYXJ5OwogCiAJcHJfZGVidWcoIlBDSTogSW5pdGlhbGl6aW5nIG5ldyBob3RwbHVnIFBIQiAlc1xuIiwgZG4tPmZ1bGxfbmFtZSk7CiAKLQlwcmltYXJ5ID0gbGlzdF9lbXB0eSgmaG9zZV9saXN0KTsKIAlwaGIgPSBwY2liaW9zX2FsbG9jX2NvbnRyb2xsZXIoZG4pOwogCWlmICghcGhiKQogCQlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wbHBhcl93cmFwcGVycy5oIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3BscGFyX3dyYXBwZXJzLmgKaW5kZXggZDk2N2MxOC4uYTI0YTZiMjMgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wbHBhcl93cmFwcGVycy5oCisrKyBiL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9wbHBhcl93cmFwcGVycy5oCkBAIC00Myw2ICs0MywxNiBAQAogCXJldHVybiB2cGFfY2FsbCgweDMsIGNwdSwgdnBhKTsKIH0KIAorc3RhdGljIGlubGluZSBsb25nIHVucmVnaXN0ZXJfZHRsKHVuc2lnbmVkIGxvbmcgY3B1LCB1bnNpZ25lZCBsb25nIHZwYSkKK3sKKwlyZXR1cm4gdnBhX2NhbGwoMHg2LCBjcHUsIHZwYSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgbG9uZyByZWdpc3Rlcl9kdGwodW5zaWduZWQgbG9uZyBjcHUsIHVuc2lnbmVkIGxvbmcgdnBhKQoreworCXJldHVybiB2cGFfY2FsbCgweDIsIGNwdSwgdnBhKTsKK30KKwogc3RhdGljIGlubGluZSBsb25nIHBscGFyX3BhZ2Vfc2V0X2xvYW5lZCh1bnNpZ25lZCBsb25nIHZwYSkKIHsKIAl1bnNpZ25lZCBsb25nIGNtb19wYWdlX3N6ID0gY21vX2dldF9wYWdlX3NpemUoKTsKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9yZWNvbmZpZy5jIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3JlY29uZmlnLmMKaW5kZXggYzU5MWEyNS4uYjZmMWIxMyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3JlY29uZmlnLmMKKysrIGIvYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL3JlY29uZmlnLmMKQEAgLTQ2OCw5ICs0NjgsMTMgQEAKIAogCQlyYyA9IGJsb2NraW5nX25vdGlmaWVyX2NhbGxfY2hhaW4oJnBTZXJpZXNfcmVjb25maWdfY2hhaW4sCiAJCQkJCQkgIGFjdGlvbiwgdmFsdWUpOworCQlpZiAocmMgPT0gTk9USUZZX0JBRCkgeworCQkJcmMgPSBwcm9tX3VwZGF0ZV9wcm9wZXJ0eShucCwgb2xkcHJvcCwgbmV3cHJvcCk7CisJCQlyZXR1cm4gLUVOT01FTTsKKwkJfQogCX0KIAotCXJldHVybiByYzsKKwlyZXR1cm4gMDsKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbTIuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMi5jCmluZGV4IGYxYzMzOTUuLmZkOTY5ZjAgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMi5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtMi5jCkBAIC01Miw2ICs1Miw3IEBACiAgKiB0aGUgY29tbXVuaWNhdGlvbiBwcm9jZXNzb3IgZGV2aWNlcy4KICAqLwogY3BtMl9tYXBfdCBfX2lvbWVtICpjcG0yX2ltbXI7CitFWFBPUlRfU1lNQk9MKGNwbTJfaW1tcik7CiAKICNkZWZpbmUgQ1BNX01BUF9TSVpFCSgweDQwMDAwKQkvKiAyNTZrIC0gdGhlIFBRMyByZXNlcnZlIHRoaXMgYW1vdW50CiAJCQkJCSAgIG9mIHNwYWNlIGZvciBDUE0gYXMgaXQgaXMgbGFyZ2VyCkBAIC0xMjksNyArMTMwLDggQEAKIAkJYnJnIC09IDQ7CiAJfQogCWJwICs9IGJyZzsKLQl2YWwgPSAoKChjbGsgLyByYXRlKSAtIDEpIDw8IDEpIHwgQ1BNX0JSR19FTiB8IHNyYzsKKwkvKiBSb3VuZCB0aGUgY2xvY2sgZGl2aWRlciB0byB0aGUgbmVhcmVzdCBpbnRlZ2VyLiAqLworCXZhbCA9ICgoKGNsayAqIDIgLyByYXRlKSAtIDEpICYgfjEpIHwgQ1BNX0JSR19FTiB8IHNyYzsKIAlpZiAoZGl2MTYpCiAJCXZhbCB8PSBDUE1fQlJHX0RJVjE2OwogCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2NwbV9jb21tb24uYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtX2NvbW1vbi5jCmluZGV4IDAwZDNkMTcuLmU0YjZkNjYgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtX2NvbW1vbi5jCisrKyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvY3BtX2NvbW1vbi5jCkBAIC01Niw3ICs1Niw3IEBACiB7CiAJaWYgKGNwbV91ZGJnX3R4ZGVzYykgewogI2lmZGVmIENPTkZJR19DUE0yCi0JCXNldGJhdCgxLCAweGYwMDAwMDAwLCAweGYwMDAwMDAwLCAxMDI0KjEwMjQsIF9QQUdFX0lPKTsKKwkJc2V0YmF0KDEsIDB4ZjAwMDAwMDAsIDB4ZjAwMDAwMDAsIDEwMjQqMTAyNCwgUEFHRV9LRVJORUxfTkNHKTsKICNlbmRpZgogCQl1ZGJnX3B1dGMgPSB1ZGJnX3B1dGNfY3BtOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvZnNsX3BjaS5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMKaW5kZXggOTgxN2Y2My4uNzgwMjFkOCAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfcGNpLmMKQEAgLTEsMTIgKzEsMTYgQEAKIC8qCiAgKiBNUEM4M3h4Lzg1eHgvODZ4eCBQQ0kvUENJRSBzdXBwb3J0IHJvdXRpbmcuCiAgKgotICogQ29weXJpZ2h0IDIwMDcsMjAwOCBGcmVlc2NhbGUgU2VtaWNvbmR1Y3RvciwgSW5jCisgKiBDb3B5cmlnaHQgMjAwNy0yMDA5IEZyZWVzY2FsZSBTZW1pY29uZHVjdG9yLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IE1vbnRhVmlzdGEgU29mdHdhcmUsIEluYy4KICAqCiAgKiBJbml0aWFsIGF1dGhvcjogWGlhbmdodWEgWGlhbyA8eC54aWFvQGZyZWVzY2FsZS5jb20+CiAgKiBSZWNvZGU6IFpIQU5HIFdFSSA8d2VpLnpoYW5nQGZyZWVzY2FsZS5jb20+CiAgKiBSZXdyaXRlIHRoZSByb3V0aW5nIGZvciBGcmVzY2FsZSBQQ0kgYW5kIFBDSSBFeHByZXNzCiAgKiAJUm95IFphbmcgPHRpZS1mZWkuemFuZ0BmcmVlc2NhbGUuY29tPgorICogTVBDODN4eCBQQ0ktRXhwcmVzcyBzdXBwb3J0OgorICogCVRvbnkgTGkgPHRvbnkubGlAZnJlZXNjYWxlLmNvbT4KKyAqIAlBbnRvbiBWb3JvbnRzb3YgPGF2b3JvbnRzb3ZAcnUubXZpc3RhLmNvbT4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgIGl0IGFuZC9vciBtb2RpZnkgaXQKICAqIHVuZGVyICB0aGUgdGVybXMgb2YgIHRoZSBHTlUgR2VuZXJhbCAgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZQpAQCAtMjcsNiArMzEsMjkgQEAKICNpbmNsdWRlIDxzeXNkZXYvZnNsX3NvYy5oPgogI2luY2x1ZGUgPHN5c2Rldi9mc2xfcGNpLmg+CiAKK3N0YXRpYyBpbnQgZnNsX3BjaWVfYnVzX2ZpeHVwOworCitzdGF0aWMgdm9pZCBfX2luaXQgcXVpcmtfZnNsX3BjaWVfaGVhZGVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCit7CisJLyogaWYgd2UgYXJlbid0IGEgUENJZSBkb24ndCBib3RoZXIgKi8KKwlpZiAoIXBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX0VYUCkpCisJCXJldHVybjsKKworCWRldi0+Y2xhc3MgPSBQQ0lfQ0xBU1NfQlJJREdFX1BDSSA8PCA4OworCWZzbF9wY2llX2J1c19maXh1cCA9IDE7CisJcmV0dXJuOworfQorCitzdGF0aWMgaW50IF9faW5pdCBmc2xfcGNpZV9jaGVja19saW5rKHN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSkKK3sKKwl1MzIgdmFsOworCisJZWFybHlfcmVhZF9jb25maWdfZHdvcmQoaG9zZSwgMCwgMCwgUENJRV9MVFNTTSwgJnZhbCk7CisJaWYgKHZhbCA8IFBDSUVfTFRTU01fTDApCisJCXJldHVybiAxOworCXJldHVybiAwOworfQorCiAjaWYgZGVmaW5lZChDT05GSUdfUFBDXzg1eHgpIHx8IGRlZmluZWQoQ09ORklHX1BQQ184Nnh4KQogc3RhdGljIGludCBfX2luaXQgc2V0dXBfb25lX2F0bXUoc3RydWN0IGNjc3JfcGNpIF9faW9tZW0gKnBjaSwKIAl1bnNpZ25lZCBpbnQgaW5kZXgsIGNvbnN0IHN0cnVjdCByZXNvdXJjZSAqcmVzLApAQCAtMTU5LDI4ICsxODYsNiBAQAogI2VuZGlmCiB9CiAKLXN0YXRpYyBpbnQgZnNsX3BjaWVfYnVzX2ZpeHVwOwotCi1zdGF0aWMgdm9pZCBfX2luaXQgcXVpcmtfZnNsX3BjaWVfaGVhZGVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpCi17Ci0JLyogaWYgd2UgYXJlbid0IGEgUENJZSBkb24ndCBib3RoZXIgKi8KLQlpZiAoIXBjaV9maW5kX2NhcGFiaWxpdHkoZGV2LCBQQ0lfQ0FQX0lEX0VYUCkpCi0JCXJldHVybiA7Ci0KLQlkZXYtPmNsYXNzID0gUENJX0NMQVNTX0JSSURHRV9QQ0kgPDwgODsKLQlmc2xfcGNpZV9idXNfZml4dXAgPSAxOwotCXJldHVybiA7Ci19Ci0KLXN0YXRpYyBpbnQgX19pbml0IGZzbF9wY2llX2NoZWNrX2xpbmsoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlKQotewotCXUzMiB2YWw7Ci0JZWFybHlfcmVhZF9jb25maWdfZHdvcmQoaG9zZSwgMCwgMCwgUENJRV9MVFNTTSwgJnZhbCk7Ci0JaWYgKHZhbCA8IFBDSUVfTFRTU01fTDApCi0JCXJldHVybiAxOwotCXJldHVybiAwOwotfQotCiB2b2lkIGZzbF9wY2liaW9zX2ZpeHVwX2J1cyhzdHJ1Y3QgcGNpX2J1cyAqYnVzKQogewogCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IChzdHJ1Y3QgcGNpX2NvbnRyb2xsZXIgKikgYnVzLT5zeXNkYXRhOwpAQCAtMjk0LDggKzI5OSwxODQgQEAKICNlbmRpZiAvKiBDT05GSUdfUFBDXzg1eHggfHwgQ09ORklHX1BQQ184Nnh4ICovCiAKICNpZiBkZWZpbmVkKENPTkZJR19QUENfODN4eCkgfHwgZGVmaW5lZChDT05GSUdfUFBDX01QQzUxMngpCitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoMHgxOTU3LCBQQ0lfREVWSUNFX0lEX01QQzgzMTRFLCBxdWlya19mc2xfcGNpZV9oZWFkZXIpOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKDB4MTk1NywgUENJX0RFVklDRV9JRF9NUEM4MzE0LCBxdWlya19mc2xfcGNpZV9oZWFkZXIpOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKDB4MTk1NywgUENJX0RFVklDRV9JRF9NUEM4MzE1RSwgcXVpcmtfZnNsX3BjaWVfaGVhZGVyKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUigweDE5NTcsIFBDSV9ERVZJQ0VfSURfTVBDODMxNSwgcXVpcmtfZnNsX3BjaWVfaGVhZGVyKTsKK0RFQ0xBUkVfUENJX0ZJWFVQX0hFQURFUigweDE5NTcsIFBDSV9ERVZJQ0VfSURfTVBDODM3N0UsIHF1aXJrX2ZzbF9wY2llX2hlYWRlcik7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoMHgxOTU3LCBQQ0lfREVWSUNFX0lEX01QQzgzNzcsIHF1aXJrX2ZzbF9wY2llX2hlYWRlcik7CitERUNMQVJFX1BDSV9GSVhVUF9IRUFERVIoMHgxOTU3LCBQQ0lfREVWSUNFX0lEX01QQzgzNzhFLCBxdWlya19mc2xfcGNpZV9oZWFkZXIpOworREVDTEFSRV9QQ0lfRklYVVBfSEVBREVSKDB4MTk1NywgUENJX0RFVklDRV9JRF9NUEM4Mzc4LCBxdWlya19mc2xfcGNpZV9oZWFkZXIpOworCitzdHJ1Y3QgbXBjODN4eF9wY2llX3ByaXYgeworCXZvaWQgX19pb21lbSAqY2ZnX3R5cGUwOworCXZvaWQgX19pb21lbSAqY2ZnX3R5cGUxOworCXUzMiBkZXZfYmFzZTsKK307CisKKy8qCisgKiBXaXRoIHRoZSBjb252ZW50aW9uIG9mIHUtYm9vdCwgdGhlIFBDSUUgb3V0Ym91bmQgd2luZG93IDAgc2VydmVzCisgKiBhcyBjb25maWd1cmF0aW9uIHRyYW5zYWN0aW9ucyBvdXRib3VuZC4KKyAqLworI2RlZmluZSBQRVhfT1VUV0lOMF9CQVIJCTB4Q0E0CisjZGVmaW5lIFBFWF9PVVRXSU4wX1RBTAkJMHhDQTgKKyNkZWZpbmUgUEVYX09VVFdJTjBfVEFICQkweENBQworCitzdGF0aWMgaW50IG1wYzgzeHhfcGNpZV9leGNsdWRlX2RldmljZShzdHJ1Y3QgcGNpX2J1cyAqYnVzLCB1bnNpZ25lZCBpbnQgZGV2Zm4pCit7CisJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlID0gYnVzLT5zeXNkYXRhOworCisJaWYgKGhvc2UtPmluZGlyZWN0X3R5cGUgJiBQUENfSU5ESVJFQ1RfVFlQRV9OT19QQ0lFX0xJTkspCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisJLyoKKwkgKiBXb3JrYXJvdW5kIGZvciB0aGUgSFcgYnVnOiBmb3IgVHlwZSAwIGNvbmZpZ3VyZSB0cmFuc2FjdGlvbnMgdGhlCisJICogUENJLUUgY29udHJvbGxlciBkb2VzIG5vdCBjaGVjayB0aGUgZGV2aWNlIG51bWJlciBiaXRzIGFuZCBqdXN0CisJICogYXNzdW1lcyB0aGF0IHRoZSBkZXZpY2UgbnVtYmVyIGJpdHMgYXJlIDAuCisJICovCisJaWYgKGJ1cy0+bnVtYmVyID09IGhvc2UtPmZpcnN0X2J1c25vIHx8CisJCQlidXMtPnByaW1hcnkgPT0gaG9zZS0+Zmlyc3RfYnVzbm8pIHsKKwkJaWYgKGRldmZuICYgMHhmOCkKKwkJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisJfQorCisJaWYgKHBwY19tZC5wY2lfZXhjbHVkZV9kZXZpY2UpIHsKKwkJaWYgKHBwY19tZC5wY2lfZXhjbHVkZV9kZXZpY2UoaG9zZSwgYnVzLT5udW1iZXIsIGRldmZuKSkKKwkJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisJfQorCisJcmV0dXJuIFBDSUJJT1NfU1VDQ0VTU0ZVTDsKK30KKworc3RhdGljIHZvaWQgX19pb21lbSAqbXBjODN4eF9wY2llX3JlbWFwX2NmZyhzdHJ1Y3QgcGNpX2J1cyAqYnVzLAorCQkJCQkgICAgdW5zaWduZWQgaW50IGRldmZuLCBpbnQgb2Zmc2V0KQoreworCXN0cnVjdCBwY2lfY29udHJvbGxlciAqaG9zZSA9IGJ1cy0+c3lzZGF0YTsKKwlzdHJ1Y3QgbXBjODN4eF9wY2llX3ByaXYgKnBjaWUgPSBob3NlLT5kbi0+ZGF0YTsKKwl1OCBidXNfbm8gPSBidXMtPm51bWJlciAtIGhvc2UtPmZpcnN0X2J1c25vOworCXUzMiBkZXZfYmFzZSA9IGJ1c19ubyA8PCAyNCB8IGRldmZuIDw8IDE2OworCWludCByZXQ7CisKKwlyZXQgPSBtcGM4M3h4X3BjaWVfZXhjbHVkZV9kZXZpY2UoYnVzLCBkZXZmbik7CisJaWYgKHJldCkKKwkJcmV0dXJuIE5VTEw7CisKKwlvZmZzZXQgJj0gMHhmZmY7CisKKwkvKiBUeXBlIDAgKi8KKwlpZiAoYnVzLT5udW1iZXIgPT0gaG9zZS0+Zmlyc3RfYnVzbm8pCisJCXJldHVybiBwY2llLT5jZmdfdHlwZTAgKyBvZmZzZXQ7CisKKwlpZiAocGNpZS0+ZGV2X2Jhc2UgPT0gZGV2X2Jhc2UpCisJCWdvdG8gbWFwcGVkOworCisJb3V0X2xlMzIocGNpZS0+Y2ZnX3R5cGUwICsgUEVYX09VVFdJTjBfVEFMLCBkZXZfYmFzZSk7CisKKwlwY2llLT5kZXZfYmFzZSA9IGRldl9iYXNlOworbWFwcGVkOgorCXJldHVybiBwY2llLT5jZmdfdHlwZTEgKyBvZmZzZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXBjODN4eF9wY2llX3JlYWRfY29uZmlnKHN0cnVjdCBwY2lfYnVzICpidXMsIHVuc2lnbmVkIGludCBkZXZmbiwKKwkJCQkgICAgaW50IG9mZnNldCwgaW50IGxlbiwgdTMyICp2YWwpCit7CisJdm9pZCBfX2lvbWVtICpjZmdfYWRkcjsKKworCWNmZ19hZGRyID0gbXBjODN4eF9wY2llX3JlbWFwX2NmZyhidXMsIGRldmZuLCBvZmZzZXQpOworCWlmICghY2ZnX2FkZHIpCisJCXJldHVybiBQQ0lCSU9TX0RFVklDRV9OT1RfRk9VTkQ7CisKKwlzd2l0Y2ggKGxlbikgeworCWNhc2UgMToKKwkJKnZhbCA9IGluXzgoY2ZnX2FkZHIpOworCQlicmVhazsKKwljYXNlIDI6CisJCSp2YWwgPSBpbl9sZTE2KGNmZ19hZGRyKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJKnZhbCA9IGluX2xlMzIoY2ZnX2FkZHIpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gUENJQklPU19TVUNDRVNTRlVMOworfQorCitzdGF0aWMgaW50IG1wYzgzeHhfcGNpZV93cml0ZV9jb25maWcoc3RydWN0IHBjaV9idXMgKmJ1cywgdW5zaWduZWQgaW50IGRldmZuLAorCQkJCSAgICAgaW50IG9mZnNldCwgaW50IGxlbiwgdTMyIHZhbCkKK3sKKwl2b2lkIF9faW9tZW0gKmNmZ19hZGRyOworCisJY2ZnX2FkZHIgPSBtcGM4M3h4X3BjaWVfcmVtYXBfY2ZnKGJ1cywgZGV2Zm4sIG9mZnNldCk7CisJaWYgKCFjZmdfYWRkcikKKwkJcmV0dXJuIFBDSUJJT1NfREVWSUNFX05PVF9GT1VORDsKKworCXN3aXRjaCAobGVuKSB7CisJY2FzZSAxOgorCQlvdXRfOChjZmdfYWRkciwgdmFsKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlvdXRfbGUxNihjZmdfYWRkciwgdmFsKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJb3V0X2xlMzIoY2ZnX2FkZHIsIHZhbCk7CisJCWJyZWFrOworCX0KKworCXJldHVybiBQQ0lCSU9TX1NVQ0NFU1NGVUw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcGNpX29wcyBtcGM4M3h4X3BjaWVfb3BzID0geworCS5yZWFkID0gbXBjODN4eF9wY2llX3JlYWRfY29uZmlnLAorCS53cml0ZSA9IG1wYzgzeHhfcGNpZV93cml0ZV9jb25maWcsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBtcGM4M3h4X3BjaWVfc2V0dXAoc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlLAorCQkJCSAgICAgc3RydWN0IHJlc291cmNlICpyZWcpCit7CisJc3RydWN0IG1wYzgzeHhfcGNpZV9wcml2ICpwY2llOworCXUzMiBjZmdfYmFyOworCWludCByZXQgPSAtRU5PTUVNOworCisJcGNpZSA9IHphbGxvY19tYXliZV9ib290bWVtKHNpemVvZigqcGNpZSksIEdGUF9LRVJORUwpOworCWlmICghcGNpZSkKKwkJcmV0dXJuIHJldDsKKworCXBjaWUtPmNmZ190eXBlMCA9IGlvcmVtYXAocmVnLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyZWcpKTsKKwlpZiAoIXBjaWUtPmNmZ190eXBlMCkKKwkJZ290byBlcnIwOworCisJY2ZnX2JhciA9IGluX2xlMzIocGNpZS0+Y2ZnX3R5cGUwICsgUEVYX09VVFdJTjBfQkFSKTsKKwlpZiAoIWNmZ19iYXIpIHsKKwkJLyogUENJLUUgaXNuJ3QgY29uZmlndXJlZC4gKi8KKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBlcnIxOworCX0KKworCXBjaWUtPmNmZ190eXBlMSA9IGlvcmVtYXAoY2ZnX2JhciwgMHgxMDAwKTsKKwlpZiAoIXBjaWUtPmNmZ190eXBlMSkKKwkJZ290byBlcnIxOworCisJV0FSTl9PTihob3NlLT5kbi0+ZGF0YSk7CisJaG9zZS0+ZG4tPmRhdGEgPSBwY2llOworCWhvc2UtPm9wcyA9ICZtcGM4M3h4X3BjaWVfb3BzOworCisJb3V0X2xlMzIocGNpZS0+Y2ZnX3R5cGUwICsgUEVYX09VVFdJTjBfVEFILCAwKTsKKwlvdXRfbGUzMihwY2llLT5jZmdfdHlwZTAgKyBQRVhfT1VUV0lOMF9UQUwsIDApOworCisJaWYgKGZzbF9wY2llX2NoZWNrX2xpbmsoaG9zZSkpCisJCWhvc2UtPmluZGlyZWN0X3R5cGUgfD0gUFBDX0lORElSRUNUX1RZUEVfTk9fUENJRV9MSU5LOworCisJcmV0dXJuIDA7CitlcnIxOgorCWlvdW5tYXAocGNpZS0+Y2ZnX3R5cGUwKTsKK2VycjA6CisJa2ZyZWUocGNpZSk7CisJcmV0dXJuIHJldDsKKworfQorCiBpbnQgX19pbml0IG1wYzgzeHhfYWRkX2JyaWRnZShzdHJ1Y3QgZGV2aWNlX25vZGUgKmRldikKIHsKKwlpbnQgcmV0OwogCWludCBsZW47CiAJc3RydWN0IHBjaV9jb250cm9sbGVyICpob3NlOwogCXN0cnVjdCByZXNvdXJjZSByc3JjX3JlZzsKQEAgLTMwMyw2ICs0ODQsMTEgQEAKIAljb25zdCBpbnQgKmJ1c19yYW5nZTsKIAlpbnQgcHJpbWFyeTsKIAorCWlmICghb2ZfZGV2aWNlX2lzX2F2YWlsYWJsZShkZXYpKSB7CisJCXByX3dhcm5pbmcoIiVzOiBkaXNhYmxlZCBieSB0aGUgZmlybXdhcmUuXG4iLAorCQkJICAgZGV2LT5mdWxsX25hbWUpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CiAJcHJfZGVidWcoIkFkZGluZyBQQ0kgaG9zdCBicmlkZ2UgJXNcbiIsIGRldi0+ZnVsbF9uYW1lKTsKIAogCS8qIEZldGNoIGhvc3QgYnJpZGdlIHJlZ2lzdGVycyBhZGRyZXNzICovCkBAIC0zNTAsNyArNTM2LDE0IEBACiAJaG9zZS0+Zmlyc3RfYnVzbm8gPSBidXNfcmFuZ2UgPyBidXNfcmFuZ2VbMF0gOiAwOwogCWhvc2UtPmxhc3RfYnVzbm8gPSBidXNfcmFuZ2UgPyBidXNfcmFuZ2VbMV0gOiAweGZmOwogCi0Jc2V0dXBfaW5kaXJlY3RfcGNpKGhvc2UsIHJzcmNfY2ZnLnN0YXJ0LCByc3JjX2NmZy5zdGFydCArIDQsIDApOworCWlmIChvZl9kZXZpY2VfaXNfY29tcGF0aWJsZShkZXYsICJmc2wsbXBjODMxNC1wY2llIikpIHsKKwkJcmV0ID0gbXBjODN4eF9wY2llX3NldHVwKGhvc2UsICZyc3JjX3JlZyk7CisJCWlmIChyZXQpCisJCQlnb3RvIGVycjA7CisJfSBlbHNlIHsKKwkJc2V0dXBfaW5kaXJlY3RfcGNpKGhvc2UsIHJzcmNfY2ZnLnN0YXJ0LAorCQkJCSAgIHJzcmNfY2ZnLnN0YXJ0ICsgNCwgMCk7CisJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiRm91bmQgRlNMIFBDSSBob3N0IGJyaWRnZSBhdCAweCUwMTZsbHguICIKIAkgICAgICAgIkZpcm13YXJlIGJ1cyBudW1iZXI6ICVkLT4lZFxuIiwKQEAgLTM2NSw1ICs1NTgsOCBAQAogCXBjaV9wcm9jZXNzX2JyaWRnZV9PRl9yYW5nZXMoaG9zZSwgZGV2LCBwcmltYXJ5KTsKIAogCXJldHVybiAwOworZXJyMDoKKwlwY2liaW9zX2ZyZWVfY29udHJvbGxlcihob3NlKTsKKwlyZXR1cm4gcmV0OwogfQogI2VuZGlmIC8qIENPTkZJR19QUENfODN4eCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9mc2xfc29jLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuYwppbmRleCAxMTVjYjE2Li5hMDFjODlkIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L2ZzbF9zb2MuYwpAQCAtMjIsNiArMjIsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L3BsYXRmb3JtX2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L29mLmg+CiAjaW5jbHVkZSA8bGludXgvb2ZfcGxhdGZvcm0uaD4KICNpbmNsdWRlIDxsaW51eC9waHkuaD4KICNpbmNsdWRlIDxsaW51eC9waHlfZml4ZWQuaD4KQEAgLTMyOCw2ICszMjksOSBAQAogCQlzdHJ1Y3QgZnNsX3VzYjJfcGxhdGZvcm1fZGF0YSB1c2JfZGF0YTsKIAkJY29uc3QgdW5zaWduZWQgY2hhciAqcHJvcCA9IE5VTEw7CiAKKwkJaWYgKCFvZl9kZXZpY2VfaXNfYXZhaWxhYmxlKG5wKSkKKwkJCWNvbnRpbnVlOworCiAJCW1lbXNldCgmciwgMCwgc2l6ZW9mKHIpKTsKIAkJbWVtc2V0KCZ1c2JfZGF0YSwgMCwgc2l6ZW9mKHVzYl9kYXRhKSk7CiAKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvaXBpYy5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9pcGljLmMKaW5kZXggOWE4OWNkMy4uYTg2ZDNjZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9pcGljLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9pcGljLmMKQEAgLTU2OCw4ICs1NjgsNyBAQAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmlwaWNfbG9jaywgZmxhZ3MpOwogCi0JdGVtcCA9IGlwaWNfcmVhZChpcGljLT5yZWdzLCBpcGljX2luZm9bc3JjXS5hY2spOwotCXRlbXAgfD0gKDEgPDwgKDMxIC0gaXBpY19pbmZvW3NyY10uYml0KSk7CisJdGVtcCA9IDEgPDwgKDMxIC0gaXBpY19pbmZvW3NyY10uYml0KTsKIAlpcGljX3dyaXRlKGlwaWMtPnJlZ3MsIGlwaWNfaW5mb1tzcmNdLmFjaywgdGVtcCk7CiAKIAkvKiBtYigpIGNhbid0IGd1YXJhbnRlZSB0aGF0IGFjayBpcyBmaW5pc2hlZC4gIEJ1dCBpdCBkb2VzIGZpbmlzaApAQCAtNTkyLDggKzU5MSw3IEBACiAJdGVtcCAmPSB+KDEgPDwgKDMxIC0gaXBpY19pbmZvW3NyY10uYml0KSk7CiAJaXBpY193cml0ZShpcGljLT5yZWdzLCBpcGljX2luZm9bc3JjXS5tYXNrLCB0ZW1wKTsKIAotCXRlbXAgPSBpcGljX3JlYWQoaXBpYy0+cmVncywgaXBpY19pbmZvW3NyY10uYWNrKTsKLQl0ZW1wIHw9ICgxIDw8ICgzMSAtIGlwaWNfaW5mb1tzcmNdLmJpdCkpOworCXRlbXAgPSAxIDw8ICgzMSAtIGlwaWNfaW5mb1tzcmNdLmJpdCk7CiAJaXBpY193cml0ZShpcGljLT5yZWdzLCBpcGljX2luZm9bc3JjXS5hY2ssIHRlbXApOwogCiAJLyogbWIoKSBjYW4ndCBndWFyYW50ZWUgdGhhdCBhY2sgaXMgZmluaXNoZWQuICBCdXQgaXQgZG9lcyBmaW5pc2gKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9zeXNkZXYvbXNpX2JpdG1hcC5jIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tc2lfYml0bWFwLmMKaW5kZXggZjg0MjE3Yi4uNWEzMmNiZSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9tc2lfYml0bWFwLmMKKysrIGIvYXJjaC9wb3dlcnBjL3N5c2Rldi9tc2lfYml0bWFwLmMKQEAgLTE0MSw3ICsxNDEsNyBAQAogI2RlZmluZSBjaGVjayh4KQlcCiAJaWYgKCEoeCkpIHByaW50aygibXNpX2JpdG1hcDogdGVzdCBmYWlsZWQgYXQgbGluZSAlZFxuIiwgX19MSU5FX18pOwogCi12b2lkIHRlc3RfYmFzaWNzKHZvaWQpCit2b2lkIF9faW5pdCB0ZXN0X2Jhc2ljcyh2b2lkKQogewogCXN0cnVjdCBtc2lfYml0bWFwIGJtcDsKIAlpbnQgaSwgc2l6ZSA9IDUxMjsKQEAgLTE4Niw3ICsxODYsNyBAQAogCWtmcmVlKGJtcC5iaXRtYXApOwogfQogCi12b2lkIHRlc3Rfb2Zfbm9kZSh2b2lkKQordm9pZCBfX2luaXQgdGVzdF9vZl9ub2RlKHZvaWQpCiB7CiAJdTMyIHByb3BfZGF0YVtdID0geyAxMCwgMTAsIDI1LCAzLCA0MCwgMSwgMTAwLCAxMDAsIDIwMCwgMjAgfTsKIAljb25zdCBjaGFyICpleHBlY3RlZF9zdHIgPSAiMC05LDIwLTI0LDI4LTM5LDQxLTk5LDIyMC0yNTUiOwpAQCAtMjM0LDcgKzIzNCw3IEBACiAJa2ZyZWUoYm1wLmJpdG1hcCk7CiB9CiAKLWludCBtc2lfYml0bWFwX3NlbGZ0ZXN0KHZvaWQpCitpbnQgX19pbml0IG1zaV9iaXRtYXBfc2VsZnRlc3Qodm9pZCkKIHsKIAlwcmludGsoS0VSTl9ERUJVRyAiUnVubmluZyBNU0kgYml0bWFwIHNlbGYtdGVzdHMgLi4uXG4iKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wbWkuYyBiL2FyY2gvcG93ZXJwYy9zeXNkZXYvcG1pLmMKaW5kZXggYzg1ODc0OS4uYWFhOTE1OSAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wbWkuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BtaS5jCkBAIC01MCw3ICs1MCw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgcG1pX2RhdGEgKmRhdGE7CiAKLXN0YXRpYyBpbnQgcG1pX2lycV9oYW5kbGVyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKK3N0YXRpYyBpcnFyZXR1cm5fdCBwbWlfaXJxX2hhbmRsZXIoaW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCXU4IHR5cGU7CiAJaW50IHJjOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL3N5c2Rldi9wcGM0eHhfcGNpLmMgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9wY2kuYwppbmRleCA1NTU4ZDkzLi42YTJkNDczIDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9wY2kuYworKysgYi9hcmNoL3Bvd2VycGMvc3lzZGV2L3BwYzR4eF9wY2kuYwpAQCAtMTgzOSw2ICsxODM5LDggQEAKIHsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwogCisJcHBjX3BjaV9mbGFncyB8PSBQUENfUENJX0VOQUJMRV9QUk9DX0RPTUFJTlMgfCBQUENfUENJX0NPTVBBVF9ET01BSU5fMDsKKwogI2lmZGVmIENPTkZJR19QUEM0eHhfUENJX0VYUFJFU1MKIAlmb3JfZWFjaF9jb21wYXRpYmxlX25vZGUobnAsIE5VTEwsICJpYm0scGxiLXBjaWV4IikKIAkJcHBjNHh4X3Byb2JlX3BjaWV4X2JyaWRnZShucCk7CmRpZmYgLS1naXQgYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jIGIvYXJjaC9zaC9ib2FyZHMvYm9hcmQtYXAzMjVyeGEuYwppbmRleCBhNjRlMzg4Li5lMjc2NTViIDEwMDY0NAotLS0gYS9hcmNoL3NoL2JvYXJkcy9ib2FyZC1hcDMyNXJ4YS5jCisrKyBiL2FyY2gvc2gvYm9hcmRzL2JvYXJkLWFwMzI1cnhhLmMKQEAgLTMxMCw3ICszMTAsOCBAQAogCiBzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9jZXVfaW5mbyBzaF9tb2JpbGVfY2V1X2luZm8gPSB7CiAJLmZsYWdzID0gU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwgU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfAotCVNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fTUFTVEVSIHwgU09DQU1fREFUQVdJRFRIXzgsCisJU09DQU1fVlNZTkNfQUNUSVZFX0hJR0ggfCBTT0NBTV9EQVRBX0FDVElWRV9ISUdIIHwgU09DQU1fTUFTVEVSIHwKKwlTT0NBTV9EQVRBV0lEVEhfOCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgY2V1X3Jlc291cmNlc1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jIGIvYXJjaC9zaC9ib2FyZHMvbWFjaC1taWdvci9zZXR1cC5jCmluZGV4IGJjMzViNGMuLjRmZDZhNzIgMTAwNjQ0Ci0tLSBhL2FyY2gvc2gvYm9hcmRzL21hY2gtbWlnb3Ivc2V0dXAuYworKysgYi9hcmNoL3NoL2JvYXJkcy9tYWNoLW1pZ29yL3NldHVwLmMKQEAgLTM1Miw4ICszNTIsOSBAQAogfQogCiBzdGF0aWMgc3RydWN0IHNoX21vYmlsZV9jZXVfaW5mbyBzaF9tb2JpbGVfY2V1X2luZm8gPSB7Ci0JLmZsYWdzID0gU09DQU1fTUFTVEVSIHwgU09DQU1fREFUQVdJRFRIXzggfCBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgXAotCXwgU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfCBTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCwKKwkuZmxhZ3MgPSBTT0NBTV9NQVNURVIgfCBTT0NBTV9EQVRBV0lEVEhfOCB8IFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORworCXwgU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfCBTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSAorCXwgU09DQU1fREFUQV9BQ1RJVkVfSElHSCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgcmVzb3VyY2UgbWlnb3JfY2V1X3Jlc291cmNlc1tdID0gewpkaWZmIC0tZ2l0IGEvYXJjaC9zcGFyYy9rZXJuZWwvbGVkLmMgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZWQuYwppbmRleCBhZGFhZWQ0Li4wMGQwMzRlIDEwMDY0NAotLS0gYS9hcmNoL3NwYXJjL2tlcm5lbC9sZWQuYworKysgYi9hcmNoL3NwYXJjL2tlcm5lbC9sZWQuYwpAQCAtMTI2LDcgKzEyNiw2IEBACiAJbGVkID0gcHJvY19jcmVhdGUoImxlZCIsIDAsIE5VTEwsICZsZWRfcHJvY19mb3BzKTsKIAlpZiAoIWxlZCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JbGVkLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJcHJpbnRrKEtFUk5fSU5GTwogCSAgICAgICAibGVkOiB2ZXJzaW9uICVzLCBMYXJzIEtvdHRob2ZmIDxtZXRhbGhlYWRAbWV0YWxoZWFkLndzPlxuIiwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IDA2YzAyYzAuLjQ1MTYxYjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcKKysrIGIvYXJjaC94ODYvS2NvbmZpZwpAQCAtNDAsNiArNDAsNyBAQAogCXNlbGVjdCBIQVZFX0dFTkVSSUNfRE1BX0NPSEVSRU5UIGlmIFg4Nl8zMgogCXNlbGVjdCBIQVZFX0VGRklDSUVOVF9VTkFMSUdORURfQUNDRVNTCiAJc2VsZWN0IFVTRVJfU1RBQ0tUUkFDRV9TVVBQT1JUCisJc2VsZWN0IEhBVkVfRE1BX0FQSV9ERUJVRwogCXNlbGVjdCBIQVZFX0tFUk5FTF9HWklQCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0JaSVAyCiAJc2VsZWN0IEhBVkVfS0VSTkVMX0xaTUEKQEAgLTc4Niw2ICs3ODcsMTEgQEAKIAkgICBBZGRpdGlvbmFsIHN1cHBvcnQgZm9yIEFNRCBzcGVjaWZpYyBNQ0UgZmVhdHVyZXMgc3VjaCBhcwogCSAgIHRoZSBEUkFNIEVycm9yIFRocmVzaG9sZC4KIAorY29uZmlnIFg4Nl9NQ0VfVEhSRVNIT0xECisJZGVwZW5kcyBvbiBYODZfTUNFX0FNRCB8fCBYODZfTUNFX0lOVEVMCisJYm9vbAorCWRlZmF1bHQgeQorCiBjb25maWcgWDg2X01DRV9OT05GQVRBTAogCXRyaXN0YXRlICJDaGVjayBmb3Igbm9uLWZhdGFsIGVycm9ycyBvbiBBTUQgQXRobG9uL0R1cm9uIC8gSW50ZWwgUGVudGl1bSA0IgogCWRlcGVuZHMgb24gWDg2XzMyICYmIFg4Nl9NQ0UKQEAgLTkyOSw2ICs5MzUsMTIgQEAKIAkgIHdpdGggbWFqb3IgMjAzIGFuZCBtaW5vcnMgMCB0byAzMSBmb3IgL2Rldi9jcHUvMC9jcHVpZCB0bwogCSAgL2Rldi9jcHUvMzEvY3B1aWQuCiAKK2NvbmZpZyBYODZfQ1BVX0RFQlVHCisJdHJpc3RhdGUgIi9zeXMva2VybmVsL2RlYnVnL3g4Ni9jcHUvKiAtIENQVSBEZWJ1ZyBzdXBwb3J0IgorCS0tLWhlbHAtLS0KKwkgIElmIHlvdSBzZWxlY3QgdGhpcyBvcHRpb24sIHRoaXMgd2lsbCBwcm92aWRlIHZhcmlvdXMgeDg2IENQVXMKKwkgIGluZm9ybWF0aW9uIHRocm91Z2ggZGVidWdmcy4KKwogY2hvaWNlCiAJcHJvbXB0ICJIaWdoIE1lbW9yeSBTdXBwb3J0IgogCWRlZmF1bHQgSElHSE1FTTRHIGlmICFYODZfTlVNQVEKQEAgLTExMjEsNyArMTEzMyw3IEBACiAKIGNvbmZpZyBOT0RFU19TSElGVAogCWludCAiTWF4aW11bSBOVU1BIE5vZGVzIChhcyBhIHBvd2VyIG9mIDIpIiBpZiAhTUFYU01QCi0JcmFuZ2UgMSA5ICAgaWYgWDg2XzY0CisJcmFuZ2UgMSA5CiAJZGVmYXVsdCAiOSIgaWYgTUFYU01QCiAJZGVmYXVsdCAiNiIgaWYgWDg2XzY0CiAJZGVmYXVsdCAiNCIgaWYgWDg2X05VTUFRCkBAIC0xNDI5LDcgKzE0NDEsNyBAQAogY29uZmlnIEtFWEVDX0pVTVAKIAlib29sICJrZXhlYyBqdW1wIChFWFBFUklNRU5UQUwpIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCi0JZGVwZW5kcyBvbiBLRVhFQyAmJiBISUJFUk5BVElPTiAmJiBYODZfMzIKKwlkZXBlbmRzIG9uIEtFWEVDICYmIEhJQkVSTkFUSU9OCiAJLS0taGVscC0tLQogCSAgSnVtcCBiZXR3ZWVuIG9yaWdpbmFsIGtlcm5lbCBhbmQga2V4ZWNlZCBrZXJuZWwgYW5kIGludm9rZQogCSAgY29kZSBpbiBwaHlzaWNhbCBhZGRyZXNzIG1vZGUgdmlhIEtFWEVDCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9LY29uZmlnLmNwdSBiL2FyY2gveDg2L0tjb25maWcuY3B1CmluZGV4IGE5NWVhZjAuLjkyNGUxNTYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L0tjb25maWcuY3B1CisrKyBiL2FyY2gveDg2L0tjb25maWcuY3B1CkBAIC00NTYsMjQgKzQ1Niw5IEBACiAKIAkgIElmIHVuc3VyZSwgc2F5IE4uCiAKLWNvbmZpZyBDUFVfU1VQX0NFTlRBVVJfMzIKK2NvbmZpZyBDUFVfU1VQX0NFTlRBVVIKIAlkZWZhdWx0IHkKIAlib29sICJTdXBwb3J0IENlbnRhdXIgcHJvY2Vzc29ycyIgaWYgUFJPQ0VTU09SX1NFTEVDVAotCWRlcGVuZHMgb24gITY0QklUCi0JLS0taGVscC0tLQotCSAgVGhpcyBlbmFibGVzIGRldGVjdGlvbiwgdHVuaW5ncyBhbmQgcXVpcmtzIGZvciBDZW50YXVyIHByb2Nlc3NvcnMKLQotCSAgWW91IG5lZWQgdGhpcyBlbmFibGVkIGlmIHlvdSB3YW50IHlvdXIga2VybmVsIHRvIHJ1biBvbiBhCi0JICBDZW50YXVyIENQVS4gRGlzYWJsaW5nIHRoaXMgb3B0aW9uIG9uIG90aGVyIHR5cGVzIG9mIENQVXMKLQkgIG1ha2VzIHRoZSBrZXJuZWwgYSB0aW55IGJpdCBzbWFsbGVyLiBEaXNhYmxpbmcgaXQgb24gYSBDZW50YXVyCi0JICBDUFUgbWlnaHQgcmVuZGVyIHRoZSBrZXJuZWwgdW5ib290YWJsZS4KLQotCSAgSWYgdW5zdXJlLCBzYXkgTi4KLQotY29uZmlnIENQVV9TVVBfQ0VOVEFVUl82NAotCWRlZmF1bHQgeQotCWJvb2wgIlN1cHBvcnQgQ2VudGF1ciBwcm9jZXNzb3JzIiBpZiBQUk9DRVNTT1JfU0VMRUNUCi0JZGVwZW5kcyBvbiA2NEJJVAogCS0tLWhlbHAtLS0KIAkgIFRoaXMgZW5hYmxlcyBkZXRlY3Rpb24sIHR1bmluZ3MgYW5kIHF1aXJrcyBmb3IgQ2VudGF1ciBwcm9jZXNzb3JzCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L01ha2VmaWxlIGIvYXJjaC94ODYvTWFrZWZpbGUKaW5kZXggMTgzNjE5MS4uZjA1ZDhjOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvTWFrZWZpbGUKQEAgLTE1MywzNCArMTUzLDIzIEBACiAKIGJvb3QgOj0gYXJjaC94ODYvYm9vdAogCi1QSE9OWSArPSB6SW1hZ2UgYnpJbWFnZSBjb21wcmVzc2VkIHpsaWxvIGJ6bGlsbyBcCi0gICAgICAgICB6ZGlzayBiemRpc2sgZmRpbWFnZSBmZGltYWdlMTQ0IGZkaW1hZ2UyODggaXNvaW1hZ2UgaW5zdGFsbAorQk9PVF9UQVJHRVRTID0gYnpsaWxvIGJ6ZGlzayBmZGltYWdlIGZkaW1hZ2UxNDQgZmRpbWFnZTI4OCBpc29pbWFnZSBpbnN0YWxsCisKK1BIT05ZICs9IGJ6SW1hZ2UgJChCT09UX1RBUkdFVFMpCiAKICMgRGVmYXVsdCBrZXJuZWwgdG8gYnVpbGQKIGFsbDogYnpJbWFnZQogCiAjIEtCVUlMRF9JTUFHRSBzcGVjaWZ5IHRhcmdldCBpbWFnZSBiZWluZyBidWlsdAotICAgICAgICAgICAgICAgICAgICBLQlVJTERfSU1BR0UgOj0gJChib290KS9iekltYWdlCi16SW1hZ2UgemxpbG8gemRpc2s6IEtCVUlMRF9JTUFHRSA6PSAkKGJvb3QpL3pJbWFnZQorS0JVSUxEX0lNQUdFIDo9ICQoYm9vdCkvYnpJbWFnZQogCi16SW1hZ2UgYnpJbWFnZTogdm1saW51eAorYnpJbWFnZTogdm1saW51eAogCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYm9vdCkgJChLQlVJTERfSU1BR0UpCiAJJChRKW1rZGlyIC1wICQob2JqdHJlZSkvYXJjaC8kKFVUU19NQUNISU5FKS9ib290CiAJJChRKWxuIC1mc24gLi4vLi4veDg2L2Jvb3QvYnpJbWFnZSAkKG9ianRyZWUpL2FyY2gvJChVVFNfTUFDSElORSkvYm9vdC8kQAogCi1jb21wcmVzc2VkOiB6SW1hZ2UKLQotemxpbG8gYnpsaWxvOiB2bWxpbnV4Ci0JJChRKSQoTUFLRSkgJChidWlsZCk9JChib290KSBCT09USU1BR0U9JChLQlVJTERfSU1BR0UpIHpsaWxvCi0KLXpkaXNrIGJ6ZGlzazogdm1saW51eAotCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYm9vdCkgQk9PVElNQUdFPSQoS0JVSUxEX0lNQUdFKSB6ZGlzawotCi1mZGltYWdlIGZkaW1hZ2UxNDQgZmRpbWFnZTI4OCBpc29pbWFnZTogdm1saW51eAotCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYm9vdCkgQk9PVElNQUdFPSQoS0JVSUxEX0lNQUdFKSAkQAotCi1pbnN0YWxsOgotCSQoUSkkKE1BS0UpICQoYnVpbGQpPSQoYm9vdCkgQk9PVElNQUdFPSQoS0JVSUxEX0lNQUdFKSBpbnN0YWxsCiskKEJPT1RfVEFSR0VUUyk6IHZtbGludXgKKwkkKFEpJChNQUtFKSAkKGJ1aWxkKT0kKGJvb3QpICRACiAKIFBIT05ZICs9IHZkc29faW5zdGFsbAogdmRzb19pbnN0YWxsOgpAQCAtMjA1LDcgKzE5NCwzIEBACiAgIGVjaG8gICcgICAgICAgICAgICAgICAgICBGREFSR1M9Ii4uLiIgIGFyZ3VtZW50cyBmb3IgdGhlIGJvb3RlZCBrZXJuZWwnCiAgIGVjaG8gICcgICAgICAgICAgICAgICAgICBGRElOSVRSRD1maWxlIGluaXRyZCBmb3IgdGhlIGJvb3RlZCBrZXJuZWwnCiBlbmRlZgotCi1DTEVBTl9GSUxFUyArPSBhcmNoL3g4Ni9ib290L2ZkaW1hZ2UgXAotCSAgICAgICBhcmNoL3g4Ni9ib290L2ltYWdlLmlzbyBcCi0JICAgICAgIGFyY2gveDg2L2Jvb3QvbXRvb2xzLmNvbmYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvTWFrZWZpbGUgYi9hcmNoL3g4Ni9ib290L01ha2VmaWxlCmluZGV4IGM3MGVmZjYuLmZiNzM3Y2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYvYm9vdC9NYWtlZmlsZQpAQCAtNiwyNiArNiwyNCBAQAogIyBmb3IgbW9yZSBkZXRhaWxzLgogIwogIyBDb3B5cmlnaHQgKEMpIDE5OTQgYnkgTGludXMgVG9ydmFsZHMKKyMgQ2hhbmdlZCBieSBtYW55LCBtYW55IGNvbnRyaWJ1dG9ycyBvdmVyIHRoZSB5ZWFycy4KICMKIAogIyBST09UX0RFViBzcGVjaWZpZXMgdGhlIGRlZmF1bHQgcm9vdC1kZXZpY2Ugd2hlbiBtYWtpbmcgdGhlIGltYWdlLgogIyBUaGlzIGNhbiBiZSBlaXRoZXIgRkxPUFBZLCBDVVJSRU5ULCAvZGV2L3h4eHggb3IgZW1wdHksIGluIHdoaWNoIGNhc2UKICMgdGhlIGRlZmF1bHQgb2YgRkxPUFBZIGlzIHVzZWQgYnkgJ2J1aWxkJy4KIAotUk9PVF9ERVYgOj0gQ1VSUkVOVAorUk9PVF9ERVYJOj0gQ1VSUkVOVAogCiAjIElmIHlvdSB3YW50IHRvIHByZXNldCB0aGUgU1ZHQSBtb2RlLCB1bmNvbW1lbnQgdGhlIG5leHQgbGluZSBhbmQKICMgc2V0IFNWR0FfTU9ERSB0byB3aGF0ZXZlciBudW1iZXIgeW91IHdhbnQuCiAjIFNldCBpdCB0byAtRFNWR0FfTU9ERT1OT1JNQUxfVkdBIGlmIHlvdSBqdXN0IHdhbnQgdGhlIEVHQS9WR0EgbW9kZS4KICMgVGhlIG51bWJlciBpcyB0aGUgc2FtZSBhcyB5b3Ugd291bGQgb3JkaW5hcmlseSBwcmVzcyBhdCBib290dXAuCiAKLVNWR0FfTU9ERSA6PSAtRFNWR0FfTU9ERT1OT1JNQUxfVkdBCitTVkdBX01PREUJOj0gLURTVkdBX01PREU9Tk9STUFMX1ZHQQogCi0jIElmIHlvdSB3YW50IHRoZSBSQU0gZGlzayBkZXZpY2UsIGRlZmluZSB0aGlzIHRvIGJlIHRoZSBzaXplIGluIGJsb2Nrcy4KLQotI1JBTURJU0sgOj0gLURSQU1ESVNLPTUxMgotCi10YXJnZXRzCQk6PSB2bWxpbnV4LmJpbiBzZXR1cC5iaW4gc2V0dXAuZWxmIHpJbWFnZSBiekltYWdlCit0YXJnZXRzCQk6PSB2bWxpbnV4LmJpbiBzZXR1cC5iaW4gc2V0dXAuZWxmIGJ6SW1hZ2UKK3RhcmdldHMJCSs9IGZkaW1hZ2UgZmRpbWFnZTE0NCBmZGltYWdlMjg4IGltYWdlLmlzbyBtdG9vbHMuY29uZgogc3ViZGlyLQkJOj0gY29tcHJlc3NlZAogCiBzZXR1cC15CQkrPSBhMjAubyBjbWRsaW5lLm8gY29weS5vIGNwdS5vIGNwdWNoZWNrLm8gZWRkLm8KQEAgLTcxLDE3ICs2OSwxMyBAQAogS0JVSUxEX0NGTEFHUyArPSAgICQoY2FsbCBjYy1vcHRpb24sLW0zMikKIEtCVUlMRF9BRkxBR1MJOj0gJChLQlVJTERfQ0ZMQUdTKSAtRF9fQVNTRU1CTFlfXwogCi0kKG9iaikvekltYWdlOiAgYXNmbGFncy15IDo9ICQoU1ZHQV9NT0RFKSAkKFJBTURJU0spCi0kKG9iaikvYnpJbWFnZTogY2NmbGFncy15IDo9IC1EX19CSUdfS0VSTkVMX18KLSQob2JqKS9iekltYWdlOiBhc2ZsYWdzLXkgOj0gJChTVkdBX01PREUpICQoUkFNRElTSykgLURfX0JJR19LRVJORUxfXwotJChvYmopL2J6SW1hZ2U6IEJVSUxERkxBR1MgICA6PSAtYgorJChvYmopL2J6SW1hZ2U6IGFzZmxhZ3MteSAgOj0gJChTVkdBX01PREUpCiAKIHF1aWV0X2NtZF9pbWFnZSA9IEJVSUxEICAgJEAKLWNtZF9pbWFnZSA9ICQob2JqKS90b29scy9idWlsZCAkKEJVSUxERkxBR1MpICQob2JqKS9zZXR1cC5iaW4gXAotCSAgICAkKG9iaikvdm1saW51eC5iaW4gJChST09UX0RFVikgPiAkQAorY21kX2ltYWdlID0gJChvYmopL3Rvb2xzL2J1aWxkICQob2JqKS9zZXR1cC5iaW4gJChvYmopL3ZtbGludXguYmluIFwKKwkkKFJPT1RfREVWKSA+ICRACiAKLSQob2JqKS96SW1hZ2UgJChvYmopL2J6SW1hZ2U6ICQob2JqKS9zZXR1cC5iaW4gXAotCQkJICAgICAgJChvYmopL3ZtbGludXguYmluICQob2JqKS90b29scy9idWlsZCBGT1JDRQorJChvYmopL2J6SW1hZ2U6ICQob2JqKS9zZXR1cC5iaW4gJChvYmopL3ZtbGludXguYmluICQob2JqKS90b29scy9idWlsZCBGT1JDRQogCSQoY2FsbCBpZl9jaGFuZ2VkLGltYWdlKQogCUBlY2hvICdLZXJuZWw6ICRAIGlzIHJlYWR5JyAnICgjJ2BjYXQgLnZlcnNpb25gJyknCiAKQEAgLTExNiw5ICsxMTAsMTEgQEAKICQob2JqKS9jb21wcmVzc2VkL3ZtbGludXg6IEZPUkNFCiAJJChRKSQoTUFLRSkgJChidWlsZCk9JChvYmopL2NvbXByZXNzZWQgJEAKIAotIyBTZXQgdGhpcyBpZiB5b3Ugd2FudCB0byBwYXNzIGFwcGVuZCBhcmd1bWVudHMgdG8gdGhlIHpkaXNrL2ZkaW1hZ2UvaXNvaW1hZ2Uga2VybmVsCisjIFNldCB0aGlzIGlmIHlvdSB3YW50IHRvIHBhc3MgYXBwZW5kIGFyZ3VtZW50cyB0byB0aGUKKyMgYnpkaXNrL2ZkaW1hZ2UvaXNvaW1hZ2Uga2VybmVsCiBGREFSR1MgPQotIyBTZXQgdGhpcyBpZiB5b3Ugd2FudCBhbiBpbml0cmQgaW5jbHVkZWQgd2l0aCB0aGUgemRpc2svZmRpbWFnZS9pc29pbWFnZSBrZXJuZWwKKyMgU2V0IHRoaXMgaWYgeW91IHdhbnQgYW4gaW5pdHJkIGluY2x1ZGVkIHdpdGggdGhlCisjIGJ6ZGlzay9mZGltYWdlL2lzb2ltYWdlIGtlcm5lbAogRkRJTklUUkQgPQogCiBpbWFnZV9jbWRsaW5lID0gZGVmYXVsdCBsaW51eCAkKEZEQVJHUykgJChpZiAkKEZESU5JVFJEKSxpbml0cmQ9aW5pdHJkLmltZywpCkBAIC0xMjcsNyArMTIzLDcgQEAKIAlzZWQgLWUgJ3N8QE9CSkB8JChvYmopfGcnIDwgJDwgPiAkQAogCiAjIFRoaXMgcmVxdWlyZXMgd3JpdGUgYWNjZXNzIHRvIC9kZXYvZmQwCi16ZGlzazogJChCT09USU1BR0UpICQob2JqKS9tdG9vbHMuY29uZgorYnpkaXNrOiAkKG9iaikvYnpJbWFnZSAkKG9iaikvbXRvb2xzLmNvbmYKIAlNVE9PTFNSQz0kKG9iaikvbXRvb2xzLmNvbmYgbWZvcm1hdCBhOgkJCTsgc3luYwogCXN5c2xpbnV4IC9kZXYvZmQwCQkJCQk7IHN5bmMKIAllY2hvICckKGltYWdlX2NtZGxpbmUpJyB8IFwKQEAgLTEzNSwxMCArMTMxLDEwIEBACiAJaWYgWyAtZiAnJChGRElOSVRSRCknIF0gOyB0aGVuIFwKIAkJTVRPT0xTUkM9JChvYmopL210b29scy5jb25mIG1jb3B5ICckKEZESU5JVFJEKScgYTppbml0cmQuaW1nIDsgXAogCWZpCi0JTVRPT0xTUkM9JChvYmopL210b29scy5jb25mIG1jb3B5ICQoQk9PVElNQUdFKSBhOmxpbnV4CTsgc3luYworCU1UT09MU1JDPSQob2JqKS9tdG9vbHMuY29uZiBtY29weSAkKG9iaikvYnpJbWFnZSBhOmxpbnV4CTsgc3luYwogCiAjIFRoZXNlIHJlcXVpcmUgYmVpbmcgcm9vdCBvciBoYXZpbmcgc3lzbGludXggMi4wMiBvciBoaWdoZXIgaW5zdGFsbGVkCi1mZGltYWdlIGZkaW1hZ2UxNDQ6ICQoQk9PVElNQUdFKSAkKG9iaikvbXRvb2xzLmNvbmYKK2ZkaW1hZ2UgZmRpbWFnZTE0NDogJChvYmopL2J6SW1hZ2UgJChvYmopL210b29scy5jb25mCiAJZGQgaWY9L2Rldi96ZXJvIG9mPSQob2JqKS9mZGltYWdlIGJzPTEwMjQgY291bnQ9MTQ0MAogCU1UT09MU1JDPSQob2JqKS9tdG9vbHMuY29uZiBtZm9ybWF0IHY6CQkJOyBzeW5jCiAJc3lzbGludXggJChvYmopL2ZkaW1hZ2UJCQkJCTsgc3luYwpAQCAtMTQ3LDkgKzE0Myw5IEBACiAJaWYgWyAtZiAnJChGRElOSVRSRCknIF0gOyB0aGVuIFwKIAkJTVRPT0xTUkM9JChvYmopL210b29scy5jb25mIG1jb3B5ICckKEZESU5JVFJEKScgdjppbml0cmQuaW1nIDsgXAogCWZpCi0JTVRPT0xTUkM9JChvYmopL210b29scy5jb25mIG1jb3B5ICQoQk9PVElNQUdFKSB2OmxpbnV4CTsgc3luYworCU1UT09MU1JDPSQob2JqKS9tdG9vbHMuY29uZiBtY29weSAkKG9iaikvYnpJbWFnZSB2OmxpbnV4CTsgc3luYwogCi1mZGltYWdlMjg4OiAkKEJPT1RJTUFHRSkgJChvYmopL210b29scy5jb25mCitmZGltYWdlMjg4OiAkKG9iaikvYnpJbWFnZSAkKG9iaikvbXRvb2xzLmNvbmYKIAlkZCBpZj0vZGV2L3plcm8gb2Y9JChvYmopL2ZkaW1hZ2UgYnM9MTAyNCBjb3VudD0yODgwCiAJTVRPT0xTUkM9JChvYmopL210b29scy5jb25mIG1mb3JtYXQgdzoJCQk7IHN5bmMKIAlzeXNsaW51eCAkKG9iaikvZmRpbWFnZQkJCQkJOyBzeW5jCkBAIC0xNTgsOSArMTU0LDkgQEAKIAlpZiBbIC1mICckKEZESU5JVFJEKScgXSA7IHRoZW4gXAogCQlNVE9PTFNSQz0kKG9iaikvbXRvb2xzLmNvbmYgbWNvcHkgJyQoRkRJTklUUkQpJyB3OmluaXRyZC5pbWcgOyBcCiAJZmkKLQlNVE9PTFNSQz0kKG9iaikvbXRvb2xzLmNvbmYgbWNvcHkgJChCT09USU1BR0UpIHc6bGludXgJOyBzeW5jCisJTVRPT0xTUkM9JChvYmopL210b29scy5jb25mIG1jb3B5ICQob2JqKS9iekltYWdlIHc6bGludXgJOyBzeW5jCiAKLWlzb2ltYWdlOiAkKEJPT1RJTUFHRSkKK2lzb2ltYWdlOiAkKG9iaikvYnpJbWFnZQogCS1ybSAtcmYgJChvYmopL2lzb2ltYWdlCiAJbWtkaXIgJChvYmopL2lzb2ltYWdlCiAJZm9yIGkgaW4gbGliIGxpYjY0IHNoYXJlIGVuZCA7IGRvIFwKQEAgLTE3MCw3ICsxNjYsNyBAQAogCQlmaSA7IFwKIAkJaWYgWyAkJGkgPSBlbmQgXSA7IHRoZW4gZXhpdCAxIDsgZmkgOyBcCiAJZG9uZQotCWNwICQoQk9PVElNQUdFKSAkKG9iaikvaXNvaW1hZ2UvbGludXgKKwljcCAkKG9iaikvYnpJbWFnZSAkKG9iaikvaXNvaW1hZ2UvbGludXgKIAllY2hvICckKGltYWdlX2NtZGxpbmUpJyA+ICQob2JqKS9pc29pbWFnZS9pc29saW51eC5jZmcKIAlpZiBbIC1mICckKEZESU5JVFJEKScgXSA7IHRoZW4gXAogCQljcCAnJChGRElOSVRSRCknICQob2JqKS9pc29pbWFnZS9pbml0cmQuaW1nIDsgXApAQCAtMTgxLDEyICsxNzcsMTMgQEAKIAlpc29oeWJyaWQgJChvYmopL2ltYWdlLmlzbyAyPi9kZXYvbnVsbCB8fCB0cnVlCiAJcm0gLXJmICQob2JqKS9pc29pbWFnZQogCi16bGlsbzogJChCT09USU1BR0UpCitiemxpbG86ICQob2JqKS9iekltYWdlCiAJaWYgWyAtZiAkKElOU1RBTExfUEFUSCkvdm1saW51eiBdOyB0aGVuIG12ICQoSU5TVEFMTF9QQVRIKS92bWxpbnV6ICQoSU5TVEFMTF9QQVRIKS92bWxpbnV6Lm9sZDsgZmkKIAlpZiBbIC1mICQoSU5TVEFMTF9QQVRIKS9TeXN0ZW0ubWFwIF07IHRoZW4gbXYgJChJTlNUQUxMX1BBVEgpL1N5c3RlbS5tYXAgJChJTlNUQUxMX1BBVEgpL1N5c3RlbS5vbGQ7IGZpCi0JY2F0ICQoQk9PVElNQUdFKSA+ICQoSU5TVEFMTF9QQVRIKS92bWxpbnV6CisJY2F0ICQob2JqKS9iekltYWdlID4gJChJTlNUQUxMX1BBVEgpL3ZtbGludXoKIAljcCBTeXN0ZW0ubWFwICQoSU5TVEFMTF9QQVRIKS8KIAlpZiBbIC14IC9zYmluL2xpbG8gXTsgdGhlbiAvc2Jpbi9saWxvOyBlbHNlIC9ldGMvbGlsby9pbnN0YWxsOyBmaQogCiBpbnN0YWxsOgotCXNoICQoc3JjdHJlZSkvJChzcmMpL2luc3RhbGwuc2ggJChLRVJORUxSRUxFQVNFKSAkKEJPT1RJTUFHRSkgU3lzdGVtLm1hcCAiJChJTlNUQUxMX1BBVEgpIgorCXNoICQoc3JjdHJlZSkvJChzcmMpL2luc3RhbGwuc2ggJChLRVJORUxSRUxFQVNFKSAkKG9iaikvYnpJbWFnZSBcCisJCVN5c3RlbS5tYXAgIiQoSU5TVEFMTF9QQVRIKSIKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvaGVhZGVyLlMgYi9hcmNoL3g4Ni9ib290L2hlYWRlci5TCmluZGV4IDdjY2ZmNDguLjVkODRkMWMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvaGVhZGVyLlMKKysrIGIvYXJjaC94ODYvYm9vdC9oZWFkZXIuUwpAQCAtMjQsMTIgKzI0LDggQEAKICNpbmNsdWRlICJib290LmgiCiAjaW5jbHVkZSAib2Zmc2V0cy5oIgogCi1TRVRVUFNFQ1RTCT0gNAkJCS8qIGRlZmF1bHQgbnIgb2Ygc2V0dXAtc2VjdG9ycyAqLwogQk9PVFNFRwkJPSAweDA3QzAJCS8qIG9yaWdpbmFsIGFkZHJlc3Mgb2YgYm9vdC1zZWN0b3IgKi8KLVNZU1NFRwkJPSBERUZfU1lTU0VHCQkvKiBzeXN0ZW0gbG9hZGVkIGF0IDB4MTAwMDAgKDY1NTM2KSAqLwotU1lTU0laRQkJPSBERUZfU1lTU0laRQkJLyogc3lzdGVtIHNpemU6ICMgb2YgMTYtYnl0ZSBjbGlja3MgKi8KLQkJCQkJLyogdG8gYmUgbG9hZGVkICovCi1ST09UX0RFVgk9IDAJCQkvKiBST09UX0RFViBpcyBub3cgd3JpdHRlbiBieSAiYnVpbGQiICovCitTWVNTRUcJCT0gMHgxMDAwCQkvKiBoaXN0b3JpY2FsIGxvYWQgYWRkcmVzcyA+PiA0ICovCiAKICNpZm5kZWYgU1ZHQV9NT0RFCiAjZGVmaW5lIFNWR0FfTU9ERSBBU0tfVkdBCkBAIC05NywxMiArOTMsMTIgQEAKIAkuc2VjdGlvbiAiLmhlYWRlciIsICJhIgogCS5nbG9ibAloZHIKIGhkcjoKLXNldHVwX3NlY3RzOgkuYnl0ZSBTRVRVUFNFQ1RTCitzZXR1cF9zZWN0czoJLmJ5dGUgMAkJCS8qIEZpbGxlZCBpbiBieSBidWlsZC5jICovCiByb290X2ZsYWdzOgkud29yZCBST09UX1JET05MWQotc3lzc2l6ZToJLmxvbmcgU1lTU0laRQotcmFtX3NpemU6CS53b3JkIFJBTURJU0sKK3N5c3NpemU6CS5sb25nIDAJCQkvKiBGaWxsZWQgaW4gYnkgYnVpbGQuYyAqLworcmFtX3NpemU6CS53b3JkIDAJCQkvKiBPYnNvbGV0ZSAqLwogdmlkX21vZGU6CS53b3JkIFNWR0FfTU9ERQotcm9vdF9kZXY6CS53b3JkIFJPT1RfREVWCityb290X2RldjoJLndvcmQgMAkJCS8qIEZpbGxlZCBpbiBieSBidWlsZC5jICovCiBib290X2ZsYWc6CS53b3JkIDB4QUE1NQogCiAJIyBvZmZzZXQgNTEyLCBlbnRyeSBwb2ludApAQCAtMTIzLDE0ICsxMTksMTUgQEAKIAkJCQkJIyBvciBlbHNlIG9sZCBsb2FkbGluLTEuNSB3aWxsIGZhaWwpCiAJCS5nbG9ibCByZWFsbW9kZV9zd3RjaAogcmVhbG1vZGVfc3d0Y2g6CS53b3JkCTAsIDAJCSMgZGVmYXVsdF9zd2l0Y2gsIFNFVFVQU0VHCi1zdGFydF9zeXNfc2VnOgkud29yZAlTWVNTRUcKK3N0YXJ0X3N5c19zZWc6CS53b3JkCVNZU1NFRwkJIyBvYnNvbGV0ZSBhbmQgbWVhbmluZ2xlc3MsIGJ1dCBqdXN0CisJCQkJCSMgaW4gY2FzZSBzb21ldGhpbmcgZGVjaWRlZCB0byAidXNlIiBpdAogCQkud29yZAlrZXJuZWxfdmVyc2lvbi01MTIgIyBwb2ludGluZyB0byBrZXJuZWwgdmVyc2lvbiBzdHJpbmcKIAkJCQkJIyBhYm92ZSBzZWN0aW9uIG9mIGhlYWRlciBpcyBjb21wYXRpYmxlCiAJCQkJCSMgd2l0aCBsb2FkbGluLTEuNSAoaGVhZGVyIHYxLjUpLiBEb24ndAogCQkJCQkjIGNoYW5nZSBpdC4KIAotdHlwZV9vZl9sb2FkZXI6CS5ieXRlCTAJCSMgPSAwLCBvbGQgb25lIChMSUxPLCBMb2FkbGluLAotCQkJCQkjICAgICAgQm9vdGxpbiwgU1lTTFgsIGJvb3RzZWN0Li4uKQordHlwZV9vZl9sb2FkZXI6CS5ieXRlCTAJCSMgMCBtZWFucyBhbmNpZW50IGJvb3Rsb2FkZXIsIG5ld2VyCisJCQkJCSMgYm9vdGxvYWRlcnMga25vdyB0byBjaGFuZ2UgdGhpcy4KIAkJCQkJIyBTZWUgRG9jdW1lbnRhdGlvbi9pMzg2L2Jvb3QudHh0IGZvcgogCQkJCQkjIGFzc2lnbmVkIGlkcwogCkBAIC0xNDIsMTEgKzEzOSw3IEBACiAJCQkJCSMgc3BhY2UgYmVoaW5kIHNldHVwLlMgY2FuIGJlIHVzZWQgZm9yCiAJCQkJCSMgaGVhcCBwdXJwb3Nlcy4KIAkJCQkJIyBPbmx5IHRoZSBsb2FkZXIga25vd3Mgd2hhdCBpcyBmcmVlCi0jaWZuZGVmIF9fQklHX0tFUk5FTF9fCi0JCS5ieXRlCTAKLSNlbHNlCiAJCS5ieXRlCUxPQURFRF9ISUdICi0jZW5kaWYKIAogc2V0dXBfbW92ZV9zaXplOiAud29yZCAgMHg4MDAwCQkjIHNpemUgdG8gbW92ZSwgd2hlbiBzZXR1cCBpcyBub3QKIAkJCQkJIyBsb2FkZWQgYXQgMHg5MDAwMC4gV2Ugd2lsbCBtb3ZlIHNldHVwCkBAIC0xNTcsMTEgKzE1MCw3IEBACiAKIGNvZGUzMl9zdGFydDoJCQkJIyBoZXJlIGxvYWRlcnMgY2FuIHB1dCBhIGRpZmZlcmVudAogCQkJCQkjIHN0YXJ0IGFkZHJlc3MgZm9yIDMyLWJpdCBjb2RlLgotI2lmbmRlZiBfX0JJR19LRVJORUxfXwotCQkubG9uZwkweDEwMDAJCSMgICAweDEwMDAgPSBkZWZhdWx0IGZvciB6SW1hZ2UKLSNlbHNlCiAJCS5sb25nCTB4MTAwMDAwCSMgMHgxMDAwMDAgPSBkZWZhdWx0IGZvciBiaWcga2VybmVsCi0jZW5kaWYKIAogcmFtZGlza19pbWFnZToJLmxvbmcJMAkJIyBhZGRyZXNzIG9mIGxvYWRlZCByYW1kaXNrIGltYWdlCiAJCQkJCSMgSGVyZSB0aGUgbG9hZGVyIHB1dHMgdGhlIDMyLWJpdApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC9wbS5jIGIvYXJjaC94ODYvYm9vdC9wbS5jCmluZGV4IDg1YTFjZDguLjgwNjJmODkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvcG0uYworKysgYi9hcmNoL3g4Ni9ib290L3BtLmMKQEAgLTMzLDQ3ICszMyw2IEBACiB9CiAKIC8qCi0gKiBBIHpJbWFnZSBrZXJuZWwgaXMgbG9hZGVkIGF0IDB4MTAwMDAgYnV0IHdhbnRzIHRvIHJ1biBhdCAweDEwMDAuCi0gKiBBIGJ6SW1hZ2Uga2VybmVsIGlzIGxvYWRlZCBhbmQgcnVucyBhdCAweDEwMDAwMC4KLSAqLwotc3RhdGljIHZvaWQgbW92ZV9rZXJuZWxfYXJvdW5kKHZvaWQpCi17Ci0JLyogTm90ZTogcmVseSBvbiB0aGUgY29tcGlsZS10aW1lIG9wdGlvbiBoZXJlIHJhdGhlciB0aGFuCi0JICAgdGhlIExPQURFRF9ISUdIIGZsYWcuICBUaGUgUWVtdSBrZXJuZWwgbG9hZGVyIHVuY29uZGl0aW9uYWxseQotCSAgIHNldHMgdGhlIGxvYWRmbGFncyB0byB6ZXJvLiAqLwotI2lmbmRlZiBfX0JJR19LRVJORUxfXwotCXUxNiBkc3Rfc2VnLCBzcmNfc2VnOwotCXUzMiBzeXNzaXplOwotCi0JZHN0X3NlZyA9ICAweDEwMDAgPj4gNDsKLQlzcmNfc2VnID0gMHgxMDAwMCA+PiA0OwotCXN5c3NpemUgPSBib290X3BhcmFtcy5oZHIuc3lzc2l6ZTsgLyogU2l6ZSBpbiAxNi1ieXRlIHBhcmFncmFwaHMgKi8KLQotCXdoaWxlIChzeXNzaXplKSB7Ci0JCWludCBwYXJhcyAgPSAoc3lzc2l6ZSA+PSAweDEwMDApID8gMHgxMDAwIDogc3lzc2l6ZTsKLQkJaW50IGR3b3JkcyA9IHBhcmFzIDw8IDI7Ci0KLQkJYXNtIHZvbGF0aWxlKCJwdXNodyAlJWVzIDsgIgotCQkJICAgICAicHVzaHcgJSVkcyA7ICIKLQkJCSAgICAgIm1vdncgJTEsJSVlcyA7ICIKLQkJCSAgICAgIm1vdncgJTIsJSVkcyA7ICIKLQkJCSAgICAgInhvcncgJSVkaSwlJWRpIDsgIgotCQkJICAgICAieG9ydyAlJXNpLCUlc2kgOyAiCi0JCQkgICAgICJyZXA7bW92c2wgOyAiCi0JCQkgICAgICJwb3B3ICUlZHMgOyAiCi0JCQkgICAgICJwb3B3ICUlZXMiCi0JCQkgICAgIDogIitjIiAoZHdvcmRzKQotCQkJICAgICA6ICJyIiAoZHN0X3NlZyksICJyIiAoc3JjX3NlZykKLQkJCSAgICAgOiAiZXNpIiwgImVkaSIpOwotCi0JCXN5c3NpemUgLT0gcGFyYXM7Ci0JCWRzdF9zZWcgKz0gcGFyYXM7Ci0JCXNyY19zZWcgKz0gcGFyYXM7Ci0JfQotI2VuZGlmCi19Ci0KLS8qCiAgKiBEaXNhYmxlIGFsbCBpbnRlcnJ1cHRzIGF0IHRoZSBsZWdhY3kgUElDLgogICovCiBzdGF0aWMgdm9pZCBtYXNrX2FsbF9pbnRlcnJ1cHRzKHZvaWQpCkBAIC0xNDcsOSArMTA2LDYgQEAKIAkvKiBIb29rIGJlZm9yZSBsZWF2aW5nIHJlYWwgbW9kZSwgYWxzbyBkaXNhYmxlcyBpbnRlcnJ1cHRzICovCiAJcmVhbG1vZGVfc3dpdGNoX2hvb2soKTsKIAotCS8qIE1vdmUgdGhlIGtlcm5lbC9zZXR1cCB0byB0aGVpciBmaW5hbCByZXN0aW5nIHBsYWNlcyAqLwotCW1vdmVfa2VybmVsX2Fyb3VuZCgpOwotCiAJLyogRW5hYmxlIHRoZSBBMjAgZ2F0ZSAqLwogCWlmIChlbmFibGVfYTIwKCkpIHsKIAkJcHV0cygiQTIwIGdhdGUgbm90IHJlc3BvbmRpbmcsIHVuYWJsZSB0byBib290Li4uXG4iKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3QvcG1qdW1wLlMgYi9hcmNoL3g4Ni9ib290L3BtanVtcC5TCmluZGV4IDAxOWMxN2EuLjNlMGVkYzYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3QvcG1qdW1wLlMKKysrIGIvYXJjaC94ODYvYm9vdC9wbWp1bXAuUwpAQCAtNDcsNiArNDcsNyBAQAogRU5EUFJPQyhwcm90ZWN0ZWRfbW9kZV9qdW1wKQogCiAJLmNvZGUzMgorCS5zZWN0aW9uICIudGV4dDMyIiwiYXgiCiBHTE9CQUwoaW5fcG0zMikKIAkjIFNldCB1cCBkYXRhIHNlZ21lbnRzIGZvciBmbGF0IDMyLWJpdCBtb2RlCiAJbW92bAklZWN4LCAlZHMKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2Jvb3Qvc2V0dXAubGQgYi9hcmNoL3g4Ni9ib290L3NldHVwLmxkCmluZGV4IGRmOTIzNGIuLmJiOGRjMmQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2Jvb3Qvc2V0dXAubGQKKysrIGIvYXJjaC94ODYvYm9vdC9zZXR1cC5sZApAQCAtMTcsNyArMTcsOCBAQAogCS5oZWFkZXIJCTogeyAqKC5oZWFkZXIpIH0KIAkuaW5pdHRleHQJOiB7ICooLmluaXR0ZXh0KSB9CiAJLmluaXRkYXRhCTogeyAqKC5pbml0ZGF0YSkgfQotCS50ZXh0CQk6IHsgKigudGV4dCopIH0KKwkudGV4dAkJOiB7ICooLnRleHQpIH0KKwkudGV4dDMyCQk6IHsgKigudGV4dDMyKSB9CiAKIAkuID0gQUxJR04oMTYpOwogCS5yb2RhdGEJCTogeyAqKC5yb2RhdGEqKSB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9ib290L3Rvb2xzL2J1aWxkLmMgYi9hcmNoL3g4Ni9ib290L3Rvb2xzL2J1aWxkLmMKaW5kZXggNDRkYzE5Mi4uZWUzYTRlYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC90b29scy9idWlsZC5jCisrKyBiL2FyY2gveDg2L2Jvb3QvdG9vbHMvYnVpbGQuYwpAQCAtMTMwLDcgKzEzMCw3IEBACiAKIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQpCiB7Ci0JZGllKCJVc2FnZTogYnVpbGQgWy1iXSBzZXR1cCBzeXN0ZW0gW3Jvb3RkZXZdIFs+IGltYWdlXSIpOworCWRpZSgiVXNhZ2U6IGJ1aWxkIHNldHVwIHN5c3RlbSBbcm9vdGRldl0gWz4gaW1hZ2VdIik7CiB9CiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICoqIGFyZ3YpCkBAIC0xNDUsMTEgKzE0NSw2IEBACiAJdm9pZCAqa2VybmVsOwogCXUzMiBjcmMgPSAweGZmZmZmZmZmVUw7CiAKLQlpZiAoYXJnYyA+IDIgJiYgIXN0cmNtcChhcmd2WzFdLCAiLWIiKSkKLQkgIHsKLQkgICAgaXNfYmlnX2tlcm5lbCA9IDE7Ci0JICAgIGFyZ2MtLSwgYXJndisrOwotCSAgfQogCWlmICgoYXJnYyA8IDMpIHx8IChhcmdjID4gNCkpCiAJCXVzYWdlKCk7CiAJaWYgKGFyZ2MgPiAzKSB7CkBAIC0yMTYsOCArMjExLDYgQEAKIAkJZGllKCJVbmFibGUgdG8gbW1hcCAnJXMnOiAlbSIsIGFyZ3ZbMl0pOwogCS8qIE51bWJlciBvZiAxNi1ieXRlIHBhcmFncmFwaHMsIGluY2x1ZGluZyBzcGFjZSBmb3IgYSA0LWJ5dGUgQ1JDICovCiAJc3lzX3NpemUgPSAoc3ogKyAxNSArIDQpIC8gMTY7Ci0JaWYgKCFpc19iaWdfa2VybmVsICYmIHN5c19zaXplID4gREVGX1NZU1NJWkUpCi0JCWRpZSgiU3lzdGVtIGlzIHRvbyBiaWcuIFRyeSB1c2luZyBiekltYWdlIG9yIG1vZHVsZXMuIik7CiAKIAkvKiBQYXRjaCB0aGUgc2V0dXAgY29kZSB3aXRoIHRoZSBhcHByb3ByaWF0ZSBzaXplIHBhcmFtZXRlcnMgKi8KIAlidWZbMHgxZjFdID0gc2V0dXBfc2VjdG9ycy0xOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvYm9vdC92aWRlby12Z2EuYyBiL2FyY2gveDg2L2Jvb3QvdmlkZW8tdmdhLmMKaW5kZXggNWQ0NzQyZS4uOTVkODZjZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvYm9vdC92aWRlby12Z2EuYworKysgYi9hcmNoL3g4Ni9ib290L3ZpZGVvLXZnYS5jCkBAIC0xMjksNDEgKzEyOSw0NSBAQAogCXJldHVybiAoaW5iKDB4M2NjKSAmIDEpID8gMHgzZDQgOiAweDNiNDsKIH0KIAotc3RhdGljIHZvaWQgdmdhX3NldF80ODBfc2NhbmxpbmVzKGludCBlbmQpCitzdGF0aWMgdm9pZCB2Z2Ffc2V0XzQ4MF9zY2FubGluZXMoaW50IGxpbmVzKQogewotCXUxNiBjcnRjOwotCXU4ICBjc2VsOworCXUxNiBjcnRjOwkJLyogQ1JUQyBiYXNlIGFkZHJlc3MgKi8KKwl1OCAgY3NlbDsJCS8qIENSVEMgbWlzY2VsbGFuZW91cyBvdXRwdXQgcmVnaXN0ZXIgKi8KKwl1OCAgb3ZmdzsJCS8qIENSVEMgb3ZlcmZsb3cgcmVnaXN0ZXIgKi8KKwlpbnQgZW5kID0gbGluZXMtMTsKIAogCWNydGMgPSB2Z2FfY3J0YygpOwogCisJb3ZmdyA9IDB4M2MgfCAoKGVuZCA+PiAoOC0xKSkgJiAweDAyKSB8ICgoZW5kID4+ICg5LTYpKSAmIDB4NDApOworCiAJb3V0X2lkeCgweDBjLCBjcnRjLCAweDExKTsgLyogVmVydGljYWwgc3luYyBlbmQsIHVubG9jayBDUjAtNyAqLwogCW91dF9pZHgoMHgwYiwgY3J0YywgMHgwNik7IC8qIFZlcnRpY2FsIHRvdGFsICovCi0Jb3V0X2lkeCgweDNlLCBjcnRjLCAweDA3KTsgLyogVmVydGljYWwgb3ZlcmZsb3cgKi8KKwlvdXRfaWR4KG92ZncsIGNydGMsIDB4MDcpOyAvKiBWZXJ0aWNhbCBvdmVyZmxvdyAqLwogCW91dF9pZHgoMHhlYSwgY3J0YywgMHgxMCk7IC8qIFZlcnRpY2FsIHN5bmMgc3RhcnQgKi8KLQlvdXRfaWR4KGVuZCwgY3J0YywgMHgxMik7IC8qIFZlcnRpY2FsIGRpc3BsYXkgZW5kICovCisJb3V0X2lkeChlbmQsICBjcnRjLCAweDEyKTsgLyogVmVydGljYWwgZGlzcGxheSBlbmQgKi8KIAlvdXRfaWR4KDB4ZTcsIGNydGMsIDB4MTUpOyAvKiBWZXJ0aWNhbCBibGFuayBzdGFydCAqLwogCW91dF9pZHgoMHgwNCwgY3J0YywgMHgxNik7IC8qIFZlcnRpY2FsIGJsYW5rIGVuZCAqLwogCWNzZWwgPSBpbmIoMHgzY2MpOwogCWNzZWwgJj0gMHgwZDsKIAljc2VsIHw9IDB4ZTI7Ci0Jb3V0Yihjc2VsLCAweDNjYyk7CisJb3V0Yihjc2VsLCAweDNjMik7CiB9CiAKIHN0YXRpYyB2b2lkIHZnYV9zZXRfODB4MzAodm9pZCkKIHsKLQl2Z2Ffc2V0XzQ4MF9zY2FubGluZXMoMHhkZik7CisJdmdhX3NldF80ODBfc2NhbmxpbmVzKDMwKjE2KTsKIH0KIAogc3RhdGljIHZvaWQgdmdhX3NldF84MHgzNCh2b2lkKQogewogCXZnYV9zZXRfMTRmb250KCk7Ci0JdmdhX3NldF80ODBfc2NhbmxpbmVzKDB4ZGIpOworCXZnYV9zZXRfNDgwX3NjYW5saW5lcygzNCoxNCk7CiB9CiAKIHN0YXRpYyB2b2lkIHZnYV9zZXRfODB4NjAodm9pZCkKIHsKIAl2Z2Ffc2V0Xzhmb250KCk7Ci0JdmdhX3NldF80ODBfc2NhbmxpbmVzKDB4ZGYpOworCXZnYV9zZXRfNDgwX3NjYW5saW5lcyg2MCo4KTsKIH0KIAogc3RhdGljIGludCB2Z2Ffc2V0X21vZGUoc3RydWN0IG1vZGVfaW5mbyAqbW9kZSkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWMuaAppbmRleCA0ZWY5NDljLi5kZjhhMzAwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpYy5oCkBAIC03NSw3ICs3NSw3IEBACiAjZGVmaW5lIHNldHVwX3NlY29uZGFyeV9jbG9jayBzZXR1cF9zZWNvbmRhcnlfQVBJQ19jbG9jawogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfWDg2X1ZTTVAKKyNpZmRlZiBDT05GSUdfWDg2XzY0CiBleHRlcm4gaW50IGlzX3ZzbXBfYm94KHZvaWQpOwogI2Vsc2UKIHN0YXRpYyBpbmxpbmUgaW50IGlzX3ZzbXBfYm94KHZvaWQpCkBAIC0xMDgsNiArMTA4LDE2IEBACiBleHRlcm4gdTY0IG5hdGl2ZV9hcGljX2ljcl9yZWFkKHZvaWQpOwogCiAjaWZkZWYgQ09ORklHX1g4Nl9YMkFQSUMKKy8qCisgKiBNYWtlIHByZXZpb3VzIG1lbW9yeSBvcGVyYXRpb25zIGdsb2JhbGx5IHZpc2libGUgYmVmb3JlCisgKiBzZW5kaW5nIHRoZSBJUEkgdGhyb3VnaCB4MmFwaWMgd3Jtc3IuIFdlIG5lZWQgYSBzZXJpYWxpemluZyBpbnN0cnVjdGlvbiBvcgorICogbWZlbmNlIGZvciB0aGlzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgeDJhcGljX3dybXNyX2ZlbmNlKHZvaWQpCit7CisJYXNtIHZvbGF0aWxlKCJtZmVuY2UiIDogOiA6ICJtZW1vcnkiKTsKK30KKwogc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9hcGljX21zcl93cml0ZSh1MzIgcmVnLCB1MzIgdikKIHsKIAlpZiAocmVnID09IEFQSUNfREZSIHx8IHJlZyA9PSBBUElDX0lEIHx8IHJlZyA9PSBBUElDX0xEUiB8fApAQCAtMTg0LDYgKzE5NCw5IEBACiB7CiAJcmV0dXJuIDA7CiB9CisKKyNkZWZpbmUJeDJhcGljCTAKKwogI2VuZGlmCiAKIGV4dGVybiBpbnQgZ2V0X3BoeXNpY2FsX2Jyb2FkY2FzdCh2b2lkKTsKQEAgLTM3OSw2ICszOTIsNyBAQAogCiBzdGF0aWMgaW5saW5lIHZvaWQgYWNrX0FQSUNfaXJxKHZvaWQpCiB7CisjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCiAJLyoKIAkgKiBhY2tfQVBJQ19pcnEoKSBhY3R1YWxseSBnZXRzIGNvbXBpbGVkIGFzIGEgc2luZ2xlIGluc3RydWN0aW9uCiAJICogLi4uIHl1bW1pZS4KQEAgLTM4Niw2ICs0MDAsNyBAQAogCiAJLyogRG9jcyBzYXkgdXNlIDAgZm9yIGZ1dHVyZSBjb21wYXRpYmlsaXR5ICovCiAJYXBpY193cml0ZShBUElDX0VPSSwgMCk7CisjZW5kaWYKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBkZWZhdWx0X2dldF9hcGljX2lkKHVuc2lnbmVkIGxvbmcgeCkKQEAgLTQ3NCwxMCArNDg5LDE5IEBACiAJcmV0dXJuIHBoeXNpZF9pc3NldChyZWFkX2FwaWNfaWQoKSwgcGh5c19jcHVfcHJlc2VudF9tYXApOwogfQogCitzdGF0aWMgaW5saW5lIGludCBkZWZhdWx0X3BoeXNfcGtnX2lkKGludCBjcHVpZF9hcGljLCBpbnQgaW5kZXhfbXNiKQoreworCXJldHVybiBjcHVpZF9hcGljID4+IGluZGV4X21zYjsKK30KKworZXh0ZXJuIGludCBkZWZhdWx0X2FwaWNpZF90b19ub2RlKGludCBsb2dpY2FsX2FwaWNpZCk7CisKKyNlbmRpZgorCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludAogZGVmYXVsdF9jcHVfbWFza190b19hcGljaWQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2spCiB7Ci0JcmV0dXJuIGNwdW1hc2tfYml0cyhjcHVtYXNrKVswXTsKKwlyZXR1cm4gY3B1bWFza19iaXRzKGNwdW1hc2spWzBdICYgQVBJQ19BTExfQ1BVUzsKIH0KIAogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQKQEAgLTQ5MSwxNSArNTE1LDYgQEAKIAlyZXR1cm4gKHVuc2lnbmVkIGludCkobWFzazEgJiBtYXNrMiAmIG1hc2szKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZGVmYXVsdF9waHlzX3BrZ19pZChpbnQgY3B1aWRfYXBpYywgaW50IGluZGV4X21zYikKLXsKLQlyZXR1cm4gY3B1aWRfYXBpYyA+PiBpbmRleF9tc2I7Ci19Ci0KLWV4dGVybiBpbnQgZGVmYXVsdF9hcGljaWRfdG9fbm9kZShpbnQgbG9naWNhbF9hcGljaWQpOwotCi0jZW5kaWYKLQogc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGRlZmF1bHRfY2hlY2tfYXBpY2lkX3VzZWQocGh5c2lkX21hc2tfdCBiaXRtYXAsIGludCBhcGljaWQpCiB7CiAJcmV0dXJuIHBoeXNpZF9pc3NldChhcGljaWQsIGJpdG1hcCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljZGVmLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9hcGljZGVmLmgKaW5kZXggNjMxMzRlMy4uYmM5NTE0ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYXBpY2RlZi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2FwaWNkZWYuaApAQCAtNTMsNiArNTMsNyBAQAogI2RlZmluZQkJQVBJQ19FU1JfU0VORElMTAkweDAwMDIwCiAjZGVmaW5lCQlBUElDX0VTUl9SRUNWSUxMCTB4MDAwNDAKICNkZWZpbmUJCUFQSUNfRVNSX0lMTFJFR0EJMHgwMDA4MAorI2RlZmluZSAJQVBJQ19MVlRDTUNJCTB4MmYwCiAjZGVmaW5lCUFQSUNfSUNSCTB4MzAwCiAjZGVmaW5lCQlBUElDX0RFU1RfU0VMRgkJMHg0MDAwMAogI2RlZmluZQkJQVBJQ19ERVNUX0FMTElOQwkweDgwMDAwCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ib290LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9ib290LmgKaW5kZXggNjUyNmNmMC4uNmJhMjNkZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vYm9vdC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Jvb3QuaApAQCAtMSwxMCArMSw2IEBACiAjaWZuZGVmIF9BU01fWDg2X0JPT1RfSAogI2RlZmluZSBfQVNNX1g4Nl9CT09UX0gKIAotLyogRG9uJ3QgdG91Y2ggdGhlc2UsIHVubGVzcyB5b3UgcmVhbGx5IGtub3cgd2hhdCB5b3UncmUgZG9pbmcuICovCi0jZGVmaW5lIERFRl9TWVNTRUcJMHgxMDAwCi0jZGVmaW5lIERFRl9TWVNTSVpFCTB4N0YwMAotCiAvKiBJbnRlcm5hbCBzdmdhIHN0YXJ0dXAgY29uc3RhbnRzICovCiAjZGVmaW5lIE5PUk1BTF9WR0EJMHhmZmZmCQkvKiA4MHgyNSBtb2RlICovCiAjZGVmaW5lIEVYVEVOREVEX1ZHQQkweGZmZmUJCS8qIDgweDUwIG1vZGUgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2NhY2hlZmx1c2guaAppbmRleCA1YjMwMWI3Li5iMzg5NGJmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jYWNoZWZsdXNoLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY2FjaGVmbHVzaC5oCkBAIC05MCw2ICs5MCw5IEBACiBpbnQgc2V0X21lbW9yeV9hcnJheV91Yyh1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgYWRkcmluYXJyYXkpOwogaW50IHNldF9tZW1vcnlfYXJyYXlfd2IodW5zaWduZWQgbG9uZyAqYWRkciwgaW50IGFkZHJpbmFycmF5KTsKIAoraW50IHNldF9wYWdlc19hcnJheV91YyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgYWRkcmluYXJyYXkpOworaW50IHNldF9wYWdlc19hcnJheV93YihzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgYWRkcmluYXJyYXkpOworCiAvKgogICogRm9yIGxlZ2FjeSBjb21wYXRpYmlsaXR5IHdpdGggdGhlIG9sZCBBUElzLCBhIGZldyBmdW5jdGlvbnMKICAqIGFyZSBwcm92aWRlZCB0aGF0IHdvcmsgb24gYSAic3RydWN0IHBhZ2UiLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1X2RlYnVnLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9jcHVfZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4yMjI4MDIwCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vY3B1X2RlYnVnLmgKQEAgLTAsMCArMSwyMjYgQEAKKyNpZm5kZWYgX0FTTV9YODZfQ1BVX0RFQlVHX0gKKyNkZWZpbmUgX0FTTV9YODZfQ1BVX0RFQlVHX0gKKworLyoKKyAqIENQVSB4ODYgYXJjaGl0ZWN0dXJlIGRlYnVnCisgKgorICogQ29weXJpZ2h0KEMpIDIwMDkgSmFzd2luZGVyIFNpbmdoIFJhanB1dAorICovCisKKy8qIFJlZ2lzdGVyIGZsYWdzICovCitlbnVtIGNwdV9kZWJ1Z19iaXQgeworLyogTW9kZWwgU3BlY2lmaWMgUmVnaXN0ZXJzIChNU1JzKQkJCQkJKi8KKwlDUFVfTUNfQklULAkJCQkvKiBNYWNoaW5lIENoZWNrCSovCisJQ1BVX01PTklUT1JfQklULAkJCS8qIE1vbml0b3IJCSovCisJQ1BVX1RJTUVfQklULAkJCQkvKiBUaW1lCQkJKi8KKwlDUFVfUE1DX0JJVCwJCQkJLyogUGVyZm9ybWFuY2UgTW9uaXRvcgkqLworCUNQVV9QTEFURk9STV9CSVQsCQkJLyogUGxhdGZvcm0JCSovCisJQ1BVX0FQSUNfQklULAkJCQkvKiBBUElDCQkJKi8KKwlDUFVfUE9XRVJPTl9CSVQsCQkJLyogUG93ZXItb24JCSovCisJQ1BVX0NPTlRST0xfQklULAkJCS8qIENvbnRyb2wJCSovCisJQ1BVX0ZFQVRVUkVTX0JJVCwJCQkvKiBGZWF0dXJlcyBjb250cm9sCSovCisJQ1BVX0xCUkFOQ0hfQklULAkJCS8qIExhc3QgQnJhbmNoCQkqLworCUNQVV9CSU9TX0JJVCwJCQkJLyogQklPUwkJCSovCisJQ1BVX0ZSRVFfQklULAkJCQkvKiBGcmVxdWVuY3kJCSovCisJQ1BVX01UVFJfQklULAkJCQkvKiBNVFJSCQkJKi8KKwlDUFVfUEVSRl9CSVQsCQkJCS8qIFBlcmZvcm1hbmNlCQkqLworCUNQVV9DQUNIRV9CSVQsCQkJCS8qIENhY2hlCQkqLworCUNQVV9TWVNFTlRFUl9CSVQsCQkJLyogU3lzZW50ZXIJCSovCisJQ1BVX1RIRVJNX0JJVCwJCQkJLyogVGhlcm1hbAkJKi8KKwlDUFVfTUlTQ19CSVQsCQkJCS8qIE1pc2NlbGxhbmVvdXMJKi8KKwlDUFVfREVCVUdfQklULAkJCQkvKiBEZWJ1ZwkJKi8KKwlDUFVfUEFUX0JJVCwJCQkJLyogUEFUCQkJKi8KKwlDUFVfVk1YX0JJVCwJCQkJLyogVk1YCQkJKi8KKwlDUFVfQ0FMTF9CSVQsCQkJCS8qIFN5c3RlbSBDYWxsCQkqLworCUNQVV9CQVNFX0JJVCwJCQkJLyogQkFTRSBBZGRyZXNzCQkqLworCUNQVV9WRVJfQklULAkJCQkvKiBWZXJzaW9uIElECQkqLworCUNQVV9DT05GX0JJVCwJCQkJLyogQ29uZmlndXJhdGlvbgkqLworCUNQVV9TTU1fQklULAkJCQkvKiBTeXN0ZW0gbWdtdCBtb2RlCSovCisJQ1BVX1NWTV9CSVQsCQkJCS8qU2VjdXJlIFZpcnR1YWwgTWFjaGluZSovCisJQ1BVX09TVk1fQklULAkJCQkvKiBPUy1WaXNpYmxlIFdvcmthcm91bmQqLworLyogU3RhbmRhcmQgUmVnaXN0ZXJzCQkJCQkJCSovCisJQ1BVX1RTU19CSVQsCQkJCS8qIFRhc2sgU3RhY2sgU2VnbWVudAkqLworCUNQVV9DUl9CSVQsCQkJCS8qIENvbnRyb2wgUmVnaXN0ZXJzCSovCisJQ1BVX0RUX0JJVCwJCQkJLyogRGVzY3JpcHRvciBUYWJsZQkqLworLyogRW5kIG9mIFJlZ2lzdGVycyBmbGFncwkJCQkJCSovCisJQ1BVX1JFR19BTExfQklULAkJCS8qIFNlbGVjdCBhbGwgUmVnaXN0ZXJzCSovCit9OworCisjZGVmaW5lCUNQVV9SRUdfQUxMCQkofjApCQkvKiBTZWxlY3QgYWxsIFJlZ2lzdGVycwkqLworCisjZGVmaW5lCUNQVV9NQwkJCSgxIDw8IENQVV9NQ19CSVQpCisjZGVmaW5lCUNQVV9NT05JVE9SCQkoMSA8PCBDUFVfTU9OSVRPUl9CSVQpCisjZGVmaW5lCUNQVV9USU1FCQkoMSA8PCBDUFVfVElNRV9CSVQpCisjZGVmaW5lCUNQVV9QTUMJCQkoMSA8PCBDUFVfUE1DX0JJVCkKKyNkZWZpbmUJQ1BVX1BMQVRGT1JNCQkoMSA8PCBDUFVfUExBVEZPUk1fQklUKQorI2RlZmluZQlDUFVfQVBJQwkJKDEgPDwgQ1BVX0FQSUNfQklUKQorI2RlZmluZQlDUFVfUE9XRVJPTgkJKDEgPDwgQ1BVX1BPV0VST05fQklUKQorI2RlZmluZQlDUFVfQ09OVFJPTAkJKDEgPDwgQ1BVX0NPTlRST0xfQklUKQorI2RlZmluZQlDUFVfRkVBVFVSRVMJCSgxIDw8IENQVV9GRUFUVVJFU19CSVQpCisjZGVmaW5lCUNQVV9MQlJBTkNICQkoMSA8PCBDUFVfTEJSQU5DSF9CSVQpCisjZGVmaW5lCUNQVV9CSU9TCQkoMSA8PCBDUFVfQklPU19CSVQpCisjZGVmaW5lCUNQVV9GUkVRCQkoMSA8PCBDUFVfRlJFUV9CSVQpCisjZGVmaW5lCUNQVV9NVFJSCQkoMSA8PCBDUFVfTVRUUl9CSVQpCisjZGVmaW5lCUNQVV9QRVJGCQkoMSA8PCBDUFVfUEVSRl9CSVQpCisjZGVmaW5lCUNQVV9DQUNIRQkJKDEgPDwgQ1BVX0NBQ0hFX0JJVCkKKyNkZWZpbmUJQ1BVX1NZU0VOVEVSCQkoMSA8PCBDUFVfU1lTRU5URVJfQklUKQorI2RlZmluZQlDUFVfVEhFUk0JCSgxIDw8IENQVV9USEVSTV9CSVQpCisjZGVmaW5lCUNQVV9NSVNDCQkoMSA8PCBDUFVfTUlTQ19CSVQpCisjZGVmaW5lCUNQVV9ERUJVRwkJKDEgPDwgQ1BVX0RFQlVHX0JJVCkKKyNkZWZpbmUJQ1BVX1BBVAkJCSgxIDw8IENQVV9QQVRfQklUKQorI2RlZmluZQlDUFVfVk1YCQkJKDEgPDwgQ1BVX1ZNWF9CSVQpCisjZGVmaW5lCUNQVV9DQUxMCQkoMSA8PCBDUFVfQ0FMTF9CSVQpCisjZGVmaW5lCUNQVV9CQVNFCQkoMSA8PCBDUFVfQkFTRV9CSVQpCisjZGVmaW5lCUNQVV9WRVIJCQkoMSA8PCBDUFVfVkVSX0JJVCkKKyNkZWZpbmUJQ1BVX0NPTkYJCSgxIDw8IENQVV9DT05GX0JJVCkKKyNkZWZpbmUJQ1BVX1NNTQkJCSgxIDw8IENQVV9TTU1fQklUKQorI2RlZmluZQlDUFVfU1ZNCQkJKDEgPDwgQ1BVX1NWTV9CSVQpCisjZGVmaW5lCUNQVV9PU1ZNCQkoMSA8PCBDUFVfT1NWTV9CSVQpCisjZGVmaW5lCUNQVV9UU1MJCQkoMSA8PCBDUFVfVFNTX0JJVCkKKyNkZWZpbmUJQ1BVX0NSCQkJKDEgPDwgQ1BVX0NSX0JJVCkKKyNkZWZpbmUJQ1BVX0RUCQkJKDEgPDwgQ1BVX0RUX0JJVCkKKworLyogUmVnaXN0ZXIgZmlsZSBmbGFncyAqLworZW51bSBjcHVfZmlsZV9iaXQgeworCUNQVV9JTkRFWF9CSVQsCQkJCS8qIGluZGV4CQkqLworCUNQVV9WQUxVRV9CSVQsCQkJCS8qIHZhbHVlCQkqLworfTsKKworI2RlZmluZQlDUFVfRklMRV9WQUxVRQkJCSgxIDw8IENQVV9WQUxVRV9CSVQpCisKKy8qCisgKiBEaXNwbGF5RmFtaWx5X0Rpc3BsYXlNb2RlbAlQcm9jZXNzb3IgRmFtaWxpZXMvUHJvY2Vzc29yIE51bWJlciBTZXJpZXMKKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICogMDVfMDEsIDA1XzAyLCAwNV8wNAkJUGVudGl1bSwgUGVudGl1bSB3aXRoIE1NWAorICoKKyAqIDA2XzAxCQkJUGVudGl1bSBQcm8KKyAqIDA2XzAzLCAwNl8wNQkJCVBlbnRpdW0gSUkgWGVvbiwgUGVudGl1bSBJSQorICogMDZfMDcsIDA2XzA4LCAwNl8wQSwgMDZfMEIJUGVudGl1bSBJSUkgWGVvbiwgUGVudHVtIElJSQorICoKKyAqIDA2XzA5LCAwNjBECQkJUGVudGl1bSBNCisgKgorICogMDZfMEUJCQlDb3JlIER1bywgQ29yZSBTb2xvCisgKgorICogMDZfMEYJCQlYZW9uIDMwMDAsIDMyMDAsIDUxMDAsIDUzMDAsIDczMDAgc2VyaWVzLAorICoJCQkJQ29yZSAyIFF1YWQsIENvcmUgMiBFeHRyZW1lLCBDb3JlIDIgRHVvLAorICoJCQkJUGVudGl1bSBkdWFsLWNvcmUKKyAqIDA2XzE3CQkJWGVvbiA1MjAwLCA1NDAwIHNlcmllcywgQ29yZSAyIFF1YWQgUTk2NTAKKyAqCisgKiAwNl8xQwkJCUF0b20KKyAqCisgKiAwRl8wMCwgMEZfMDEsIDBGXzAyCQlYZW9uLCBYZW9uIE1QLCBQZW50aXVtIDQKKyAqIDBGXzAzLCAwRl8wNAkJCVhlb24sIFhlb24gTVAsIFBlbnRpdW0gNCwgUGVudGl1bSBECisgKgorICogMEZfMDYJCQlYZW9uIDcxMDAsIDUwMDAgU2VyaWVzLCBYZW9uIE1QLAorICoJCQkJUGVudGl1bSA0LCBQZW50aXVtIEQKKyAqLworCisvKiBSZWdpc3RlciBwcm9jZXNzb3JzIGJpdHMgKi8KK2VudW0gY3B1X3Byb2Nlc3Nvcl9iaXQgeworCUNQVV9OT05FLAorLyogSW50ZWwgKi8KKwlDUFVfSU5URUxfUEVOVElVTV9CSVQsCisJQ1BVX0lOVEVMX1A2X0JJVCwKKwlDUFVfSU5URUxfUEVOVElVTV9NX0JJVCwKKwlDUFVfSU5URUxfQ09SRV9CSVQsCisJQ1BVX0lOVEVMX0NPUkUyX0JJVCwKKwlDUFVfSU5URUxfQVRPTV9CSVQsCisJQ1BVX0lOVEVMX1hFT05fUDRfQklULAorCUNQVV9JTlRFTF9YRU9OX01QX0JJVCwKKy8qIEFNRCAqLworCUNQVV9BTURfSzZfQklULAorCUNQVV9BTURfSzdfQklULAorCUNQVV9BTURfSzhfQklULAorCUNQVV9BTURfMEZfQklULAorCUNQVV9BTURfMTBfQklULAorCUNQVV9BTURfMTFfQklULAorfTsKKworI2RlZmluZQlDUFVfSU5URUxfUEVOVElVTQkoMSA8PCBDUFVfSU5URUxfUEVOVElVTV9CSVQpCisjZGVmaW5lCUNQVV9JTlRFTF9QNgkJKDEgPDwgQ1BVX0lOVEVMX1A2X0JJVCkKKyNkZWZpbmUJQ1BVX0lOVEVMX1BFTlRJVU1fTQkoMSA8PCBDUFVfSU5URUxfUEVOVElVTV9NX0JJVCkKKyNkZWZpbmUJQ1BVX0lOVEVMX0NPUkUJCSgxIDw8IENQVV9JTlRFTF9DT1JFX0JJVCkKKyNkZWZpbmUJQ1BVX0lOVEVMX0NPUkUyCQkoMSA8PCBDUFVfSU5URUxfQ09SRTJfQklUKQorI2RlZmluZQlDUFVfSU5URUxfQVRPTQkJKDEgPDwgQ1BVX0lOVEVMX0FUT01fQklUKQorI2RlZmluZQlDUFVfSU5URUxfWEVPTl9QNAkoMSA8PCBDUFVfSU5URUxfWEVPTl9QNF9CSVQpCisjZGVmaW5lCUNQVV9JTlRFTF9YRU9OX01QCSgxIDw8IENQVV9JTlRFTF9YRU9OX01QX0JJVCkKKworI2RlZmluZQlDUFVfSU5URUxfUFgJCShDUFVfSU5URUxfUDYgfCBDUFVfSU5URUxfUEVOVElVTV9NKQorI2RlZmluZQlDUFVfSU5URUxfQ09SRVgJCShDUFVfSU5URUxfQ09SRSB8IENQVV9JTlRFTF9DT1JFMikKKyNkZWZpbmUJQ1BVX0lOVEVMX1hFT04JCShDUFVfSU5URUxfWEVPTl9QNCB8IENQVV9JTlRFTF9YRU9OX01QKQorI2RlZmluZQlDUFVfQ09fQVQJCShDUFVfSU5URUxfQ09SRSB8IENQVV9JTlRFTF9BVE9NKQorI2RlZmluZQlDUFVfQzJfQVQJCShDUFVfSU5URUxfQ09SRTIgfCBDUFVfSU5URUxfQVRPTSkKKyNkZWZpbmUJQ1BVX0NYX0FUCQkoQ1BVX0lOVEVMX0NPUkVYIHwgQ1BVX0lOVEVMX0FUT00pCisjZGVmaW5lCUNQVV9DWF9YRQkJKENQVV9JTlRFTF9DT1JFWCB8IENQVV9JTlRFTF9YRU9OKQorI2RlZmluZQlDUFVfUDZfWEUJCShDUFVfSU5URUxfUDYgfCBDUFVfSU5URUxfWEVPTikKKyNkZWZpbmUJQ1BVX1BNX0NPX0FUCQkoQ1BVX0lOVEVMX1BFTlRJVU1fTSB8IENQVV9DT19BVCkKKyNkZWZpbmUJQ1BVX0MyX0FUX1hFCQkoQ1BVX0MyX0FUIHwgQ1BVX0lOVEVMX1hFT04pCisjZGVmaW5lCUNQVV9DWF9BVF9YRQkJKENQVV9DWF9BVCB8IENQVV9JTlRFTF9YRU9OKQorI2RlZmluZQlDUFVfUDZfQ1hfQVQJCShDUFVfSU5URUxfUDYgfCBDUFVfQ1hfQVQpCisjZGVmaW5lCUNQVV9QNl9DWF9YRQkJKENQVV9QNl9YRSB8IENQVV9JTlRFTF9DT1JFWCkKKyNkZWZpbmUJQ1BVX1A2X0NYX0FUX1hFCQkoQ1BVX0lOVEVMX1A2IHwgQ1BVX0NYX0FUX1hFKQorI2RlZmluZQlDUFVfUE1fQ1hfQVRfWEUJCShDUFVfSU5URUxfUEVOVElVTV9NIHwgQ1BVX0NYX0FUX1hFKQorI2RlZmluZQlDUFVfUE1fQ1hfQVQJCShDUFVfSU5URUxfUEVOVElVTV9NIHwgQ1BVX0NYX0FUKQorI2RlZmluZQlDUFVfUE1fQ1hfWEUJCShDUFVfSU5URUxfUEVOVElVTV9NIHwgQ1BVX0NYX1hFKQorI2RlZmluZQlDUFVfUFhfQ1hfQVQJCShDUFVfSU5URUxfUFggfCBDUFVfQ1hfQVQpCisjZGVmaW5lCUNQVV9QWF9DWF9BVF9YRQkJKENQVV9JTlRFTF9QWCB8IENQVV9DWF9BVF9YRSkKKworLyogU2VsZWN0IGFsbCBzdXBwb3J0ZWQgSW50ZWwgQ1BVcyAqLworI2RlZmluZQlDUFVfSU5URUxfQUxMCQkoQ1BVX0lOVEVMX1BFTlRJVU0gfCBDUFVfUFhfQ1hfQVRfWEUpCisKKyNkZWZpbmUJQ1BVX0FNRF9LNgkJKDEgPDwgQ1BVX0FNRF9LNl9CSVQpCisjZGVmaW5lCUNQVV9BTURfSzcJCSgxIDw8IENQVV9BTURfSzdfQklUKQorI2RlZmluZQlDUFVfQU1EX0s4CQkoMSA8PCBDUFVfQU1EX0s4X0JJVCkKKyNkZWZpbmUJQ1BVX0FNRF8wRgkJKDEgPDwgQ1BVX0FNRF8wRl9CSVQpCisjZGVmaW5lCUNQVV9BTURfMTAJCSgxIDw8IENQVV9BTURfMTBfQklUKQorI2RlZmluZQlDUFVfQU1EXzExCQkoMSA8PCBDUFVfQU1EXzExX0JJVCkKKworI2RlZmluZQlDUFVfSzEwX1BMVVMJCShDUFVfQU1EXzEwIHwgQ1BVX0FNRF8xMSkKKyNkZWZpbmUJQ1BVX0swRl9QTFVTCQkoQ1BVX0FNRF8wRiB8IENQVV9LMTBfUExVUykKKyNkZWZpbmUJQ1BVX0s4X1BMVVMJCShDUFVfQU1EX0s4IHwgQ1BVX0swRl9QTFVTKQorI2RlZmluZQlDUFVfSzdfUExVUwkJKENQVV9BTURfSzcgfCBDUFVfSzhfUExVUykKKworLyogU2VsZWN0IGFsbCBzdXBwb3J0ZWQgQU1EIENQVXMgKi8KKyNkZWZpbmUJQ1BVX0FNRF9BTEwJCShDUFVfQU1EX0s2IHwgQ1BVX0s3X1BMVVMpCisKKy8qIFNlbGVjdCBhbGwgc3VwcG9ydGVkIENQVXMgKi8KKyNkZWZpbmUJQ1BVX0FMTAkJCShDUFVfSU5URUxfQUxMIHwgQ1BVX0FNRF9BTEwpCisKKyNkZWZpbmUgTUFYX0NQVV9GSUxFUwkJNTEyCisKK3N0cnVjdCBjcHVfcHJpdmF0ZSB7CisJdW5zaWduZWQJCWNwdTsKKwl1bnNpZ25lZAkJdHlwZTsKKwl1bnNpZ25lZAkJcmVnOworCXVuc2lnbmVkCQlmaWxlOworfTsKKworc3RydWN0IGNwdV9kZWJ1Z19iYXNlIHsKKwljaGFyCQkJKm5hbWU7CQkvKiBSZWdpc3RlciBuYW1lCSovCisJdW5zaWduZWQJCWZsYWc7CQkvKiBSZWdpc3RlciBmbGFnCSovCisJdW5zaWduZWQJCXdyaXRlOwkJLyogUmVnaXN0ZXIgd3JpdGUgZmxhZwkqLworfTsKKworLyoKKyAqIEN1cnJlbnRseSBpdCBsb29rcyBzaW1pbGFyIHRvIGNwdV9kZWJ1Z19iYXNlIGJ1dCBvbmNlIHdlIGFkZCBtb3JlIGZpbGVzCisgKiBjcHVfZmlsZV9iYXNlIHdpbGwgZ28gaW4gZGlmZmVyZW50IGRpcmVjdGlvbgorICovCitzdHJ1Y3QgY3B1X2ZpbGVfYmFzZSB7CisJY2hhcgkJCSpuYW1lOwkJLyogUmVnaXN0ZXIgZmlsZSBuYW1lCSovCisJdW5zaWduZWQJCWZsYWc7CQkvKiBSZWdpc3RlciBmaWxlIGZsYWcJKi8KKwl1bnNpZ25lZAkJd3JpdGU7CQkvKiBSZWdpc3RlciB3cml0ZSBmbGFnCSovCit9OworCitzdHJ1Y3QgY3B1X2NwdVhfYmFzZSB7CisJc3RydWN0IGRlbnRyeQkJKmRlbnRyeTsJLyogUmVnaXN0ZXIgZGVudHJ5CSovCisJaW50CQkJaW5pdDsJCS8qIFJlZ2lzdGVyIGluZGV4IGZpbGUJKi8KK307CisKK3N0cnVjdCBjcHVfZGVidWdfcmFuZ2UgeworCXVuc2lnbmVkCQltaW47CQkvKiBSZWdpc3RlciByYW5nZSBtaW4JKi8KKwl1bnNpZ25lZAkJbWF4OwkJLyogUmVnaXN0ZXIgcmFuZ2UgbWF4CSovCisJdW5zaWduZWQJCWZsYWc7CQkvKiBTdXBwb3J0ZWQgZmxhZ3MJKi8KKwl1bnNpZ25lZAkJbW9kZWw7CQkvKiBTdXBwb3J0ZWQgbW9kZWxzCSovCit9OworCisjZW5kaWYgLyogX0FTTV9YODZfQ1BVX0RFQlVHX0ggKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rlc2MuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Rlc2MuaAppbmRleCBkYzI3NzA1Li41NjIzYzUwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kZXNjLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGVzYy5oCkBAIC05MSw3ICs5MSw2IEBACiAjZGVmaW5lIHN0b3JlX2dkdChkdHIpIG5hdGl2ZV9zdG9yZV9nZHQoZHRyKQogI2RlZmluZSBzdG9yZV9pZHQoZHRyKSBuYXRpdmVfc3RvcmVfaWR0KGR0cikKICNkZWZpbmUgc3RvcmVfdHIodHIpICh0ciA9IG5hdGl2ZV9zdG9yZV90cigpKQotI2RlZmluZSBzdG9yZV9sZHQobGR0KSBhc20oInNsZHQgJTAiOiI9bSIgKGxkdCkpCiAKICNkZWZpbmUgbG9hZF9UTFModCwgY3B1KSBuYXRpdmVfbG9hZF90bHModCwgY3B1KQogI2RlZmluZSBzZXRfbGR0IG5hdGl2ZV9zZXRfbGR0CkBAIC0xMTIsNiArMTExLDggQEAKIH0KICNlbmRpZgkvKiBDT05GSUdfUEFSQVZJUlQgKi8KIAorI2RlZmluZSBzdG9yZV9sZHQobGR0KSBhc20oInNsZHQgJTAiIDogIj1tIihsZHQpKQorCiBzdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3dyaXRlX2lkdF9lbnRyeShnYXRlX2Rlc2MgKmlkdCwgaW50IGVudHJ5LAogCQkJCQkgIGNvbnN0IGdhdGVfZGVzYyAqZ2F0ZSkKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RldmljZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGV2aWNlLmgKaW5kZXggM2MwMzRmNC4uNDk5NGEyMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZGV2aWNlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZGV2aWNlLmgKQEAgLTYsNyArNiw3IEBACiAJdm9pZAkqYWNwaV9oYW5kbGU7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfWDg2XzY0Ci1zdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpkbWFfb3BzOworc3RydWN0IGRtYV9tYXBfb3BzICpkbWFfb3BzOwogI2VuZGlmCiAjaWZkZWYgQ09ORklHX0RNQVIKIAl2b2lkICppb21tdTsgLyogaG9vayBmb3IgSU9NTVUgc3BlY2lmaWMgZXh0ZW5zaW9uICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZG1hLW1hcHBpbmcuaAppbmRleCAxMzJhMTM0Li5jZWE3Yjc0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWEtbWFwcGluZy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtYS1tYXBwaW5nLmgKQEAgLTcsNiArNyw4IEBACiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWRlYnVnLmg+CisjaW5jbHVkZSA8bGludXgvZG1hLWF0dHJzLmg+CiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3N3aW90bGIuaD4KICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9kbWEtY29oZXJlbnQuaD4KQEAgLTE2LDQ3ICsxOCw5IEBACiBleHRlcm4gc3RydWN0IGRldmljZSB4ODZfZG1hX2ZhbGxiYWNrX2RldjsKIGV4dGVybiBpbnQgcGFuaWNfb25fb3ZlcmZsb3c7CiAKLXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgewotCWludCAgICAgICAgICAgICAoKm1hcHBpbmdfZXJyb3IpKHN0cnVjdCBkZXZpY2UgKmRldiwKLQkJCQkJIGRtYV9hZGRyX3QgZG1hX2FkZHIpOwotCXZvaWQqICAgICAgICAgICAoKmFsbG9jX2NvaGVyZW50KShzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAotCQkJCWRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCk7Ci0Jdm9pZCAgICAgICAgICAgICgqZnJlZV9jb2hlcmVudCkoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCQl2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKTsKLQlkbWFfYWRkcl90ICAgICAgKCptYXBfc2luZ2xlKShzdHJ1Y3QgZGV2aWNlICpod2RldiwgcGh5c19hZGRyX3QgcHRyLAotCQkJCXNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKLQl2b2lkICAgICAgICAgICAgKCp1bm1hcF9zaW5nbGUpKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyLAotCQkJCXNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKLQl2b2lkICAgICAgICAgICAgKCpzeW5jX3NpbmdsZV9mb3JfY3B1KShzdHJ1Y3QgZGV2aWNlICpod2RldiwKLQkJCQlkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAotCQkJCWludCBkaXJlY3Rpb24pOwotCXZvaWQgICAgICAgICAgICAoKnN5bmNfc2luZ2xlX2Zvcl9kZXZpY2UpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotCQkJCWRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCi0JCQkJaW50IGRpcmVjdGlvbik7Ci0Jdm9pZCAgICAgICAgICAgICgqc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdSkoc3RydWN0IGRldmljZSAqaHdkZXYsCi0JCQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkJCQlzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7Ci0Jdm9pZCAgICAgICAgICAgICgqc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZSkoc3RydWN0IGRldmljZSAqaHdkZXYsCi0JCQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLCB1bnNpZ25lZCBsb25nIG9mZnNldCwKLQkJCQlzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbik7Ci0Jdm9pZCAgICAgICAgICAgICgqc3luY19zZ19mb3JfY3B1KShzdHJ1Y3QgZGV2aWNlICpod2RldiwKLQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVsZW1zLAotCQkJCWludCBkaXJlY3Rpb24pOwotCXZvaWQgICAgICAgICAgICAoKnN5bmNfc2dfZm9yX2RldmljZSkoc3RydWN0IGRldmljZSAqaHdkZXYsCi0JCQkJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbGVtcywKLQkJCQlpbnQgZGlyZWN0aW9uKTsKLQlpbnQgICAgICAgICAgICAgKCptYXBfc2cpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJCWludCBuZW50cywgaW50IGRpcmVjdGlvbik7Ci0Jdm9pZCAgICAgICAgICAgICgqdW5tYXBfc2cpKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LAotCQkJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywKLQkJCQlpbnQgZGlyZWN0aW9uKTsKLQlpbnQgICAgICAgICAgICAgKCpkbWFfc3VwcG9ydGVkKShzdHJ1Y3QgZGV2aWNlICpod2RldiwgdTY0IG1hc2spOwotCWludAkJaXNfcGh5czsKLX07CitleHRlcm4gc3RydWN0IGRtYV9tYXBfb3BzICpkbWFfb3BzOwogCi1leHRlcm4gc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wczsKLQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpnZXRfZG1hX29wcyhzdHJ1Y3QgZGV2aWNlICpkZXYpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkbWFfbWFwX29wcyAqZ2V0X2RtYV9vcHMoc3RydWN0IGRldmljZSAqZGV2KQogewogI2lmZGVmIENPTkZJR19YODZfMzIKIAlyZXR1cm4gZG1hX29wczsKQEAgLTcxLDcgKzM1LDcgQEAKIC8qIE1ha2Ugc3VyZSB3ZSBrZWVwIHRoZSBzYW1lIGJlaGF2aW91ciAqLwogc3RhdGljIGlubGluZSBpbnQgZG1hX21hcHBpbmdfZXJyb3Ioc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKQogewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpOwogCWlmIChvcHMtPm1hcHBpbmdfZXJyb3IpCiAJCXJldHVybiBvcHMtPm1hcHBpbmdfZXJyb3IoZGV2LCBkbWFfYWRkcik7CiAKQEAgLTkwLDEzNyArNTQsMTY3IEBACiAKIHN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdAogZG1hX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqaHdkZXYsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsCi0JICAgICAgIGludCBkaXJlY3Rpb24pCisJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhod2Rldik7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhod2Rldik7CisJZG1hX2FkZHJfdCBhZGRyOwogCi0JQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOwotCXJldHVybiBvcHMtPm1hcF9zaW5nbGUoaHdkZXYsIHZpcnRfdG9fcGh5cyhwdHIpLCBzaXplLCBkaXJlY3Rpb24pOworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXIpKTsKKwlhZGRyID0gb3BzLT5tYXBfcGFnZShod2RldiwgdmlydF90b19wYWdlKHB0ciksCisJCQkgICAgICh1bnNpZ25lZCBsb25nKXB0ciAmIH5QQUdFX01BU0ssIHNpemUsCisJCQkgICAgIGRpciwgTlVMTCk7CisJZGVidWdfZG1hX21hcF9wYWdlKGh3ZGV2LCB2aXJ0X3RvX3BhZ2UocHRyKSwKKwkJCSAgICh1bnNpZ25lZCBsb25nKXB0ciAmIH5QQUdFX01BU0ssIHNpemUsCisJCQkgICBkaXIsIGFkZHIsIHRydWUpOworCXJldHVybiBhZGRyOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKIGRtYV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIsIHNpemVfdCBzaXplLAotCQkgaW50IGRpcmVjdGlvbikKKwkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpOworCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKIAotCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKLQlpZiAob3BzLT51bm1hcF9zaW5nbGUpCi0JCW9wcy0+dW5tYXBfc2luZ2xlKGRldiwgYWRkciwgc2l6ZSwgZGlyZWN0aW9uKTsKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyKSk7CisJaWYgKG9wcy0+dW5tYXBfcGFnZSkKKwkJb3BzLT51bm1hcF9wYWdlKGRldiwgYWRkciwgc2l6ZSwgZGlyLCBOVUxMKTsKKwlkZWJ1Z19kbWFfdW5tYXBfcGFnZShkZXYsIGFkZHIsIHNpemUsIGRpciwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50CiBkbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCSAgIGludCBuZW50cywgaW50IGRpcmVjdGlvbikKKwkgICBpbnQgbmVudHMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhod2Rldik7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhod2Rldik7CisJaW50IGVudHM7CiAKLQlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7Ci0JcmV0dXJuIG9wcy0+bWFwX3NnKGh3ZGV2LCBzZywgbmVudHMsIGRpcmVjdGlvbik7CisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcikpOworCWVudHMgPSBvcHMtPm1hcF9zZyhod2Rldiwgc2csIG5lbnRzLCBkaXIsIE5VTEwpOworCWRlYnVnX2RtYV9tYXBfc2coaHdkZXYsIHNnLCBuZW50cywgZW50cywgZGlyKTsKKworCXJldHVybiBlbnRzOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKIGRtYV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAotCSAgICAgaW50IGRpcmVjdGlvbikKKwkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhod2Rldik7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhod2Rldik7CiAKLQlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcikpOworCWRlYnVnX2RtYV91bm1hcF9zZyhod2Rldiwgc2csIG5lbnRzLCBkaXIpOwogCWlmIChvcHMtPnVubWFwX3NnKQotCQlvcHMtPnVubWFwX3NnKGh3ZGV2LCBzZywgbmVudHMsIGRpcmVjdGlvbik7CisJCW9wcy0+dW5tYXBfc2coaHdkZXYsIHNnLCBuZW50cywgZGlyLCBOVUxMKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCiBkbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAotCQkJc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCisJCQlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKIAotCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyKSk7CiAJaWYgKG9wcy0+c3luY19zaW5nbGVfZm9yX2NwdSkKLQkJb3BzLT5zeW5jX3NpbmdsZV9mb3JfY3B1KGh3ZGV2LCBkbWFfaGFuZGxlLCBzaXplLCBkaXJlY3Rpb24pOworCQlvcHMtPnN5bmNfc2luZ2xlX2Zvcl9jcHUoaHdkZXYsIGRtYV9oYW5kbGUsIHNpemUsIGRpcik7CisJZGVidWdfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoaHdkZXYsIGRtYV9oYW5kbGUsIHNpemUsIGRpcik7CiAJZmx1c2hfd3JpdGVfYnVmZmVycygpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKIGRtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCi0JCQkgICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKKwkJCSAgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7Ci0Jc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoaHdkZXYpOworCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoaHdkZXYpOwogCi0JQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXIpKTsKIAlpZiAob3BzLT5zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKQotCQlvcHMtPnN5bmNfc2luZ2xlX2Zvcl9kZXZpY2UoaHdkZXYsIGRtYV9oYW5kbGUsIHNpemUsIGRpcmVjdGlvbik7CisJCW9wcy0+c3luY19zaW5nbGVfZm9yX2RldmljZShod2RldiwgZG1hX2hhbmRsZSwgc2l6ZSwgZGlyKTsKKwlkZWJ1Z19kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShod2RldiwgZG1hX2hhbmRsZSwgc2l6ZSwgZGlyKTsKIAlmbHVzaF93cml0ZV9idWZmZXJzKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKLQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhod2Rldik7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhod2Rldik7CiAKLQlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcikpOwogCWlmIChvcHMtPnN5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUpCiAJCW9wcy0+c3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShod2RldiwgZG1hX2hhbmRsZSwgb2Zmc2V0LAotCQkJCQkgICAgICAgc2l6ZSwgZGlyZWN0aW9uKTsKKwkJCQkJICAgICAgIHNpemUsIGRpcik7CisJZGVidWdfZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUoaHdkZXYsIGRtYV9oYW5kbGUsCisJCQkJCSAgICBvZmZzZXQsIHNpemUsIGRpcik7CiAJZmx1c2hfd3JpdGVfYnVmZmVycygpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKIGRtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCiAJCQkJIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKLQkJCQkgaW50IGRpcmVjdGlvbikKKwkJCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKQogewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGh3ZGV2KTsKIAotCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXJlY3Rpb24pKTsKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyKSk7CiAJaWYgKG9wcy0+c3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZSkKIAkJb3BzLT5zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKGh3ZGV2LCBkbWFfaGFuZGxlLAotCQkJCQkJICBvZmZzZXQsIHNpemUsIGRpcmVjdGlvbik7CisJCQkJCQkgIG9mZnNldCwgc2l6ZSwgZGlyKTsKKwlkZWJ1Z19kbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShod2RldiwgZG1hX2hhbmRsZSwKKwkJCQkJICAgICAgIG9mZnNldCwgc2l6ZSwgZGlyKTsKIAlmbHVzaF93cml0ZV9idWZmZXJzKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZAogZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJICAgIGludCBuZWxlbXMsIGludCBkaXJlY3Rpb24pCisJCSAgICBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7Ci0Jc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoaHdkZXYpOworCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoaHdkZXYpOwogCi0JQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcmVjdGlvbikpOworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXIpKTsKIAlpZiAob3BzLT5zeW5jX3NnX2Zvcl9jcHUpCi0JCW9wcy0+c3luY19zZ19mb3JfY3B1KGh3ZGV2LCBzZywgbmVsZW1zLCBkaXJlY3Rpb24pOworCQlvcHMtPnN5bmNfc2dfZm9yX2NwdShod2Rldiwgc2csIG5lbGVtcywgZGlyKTsKKwlkZWJ1Z19kbWFfc3luY19zZ19mb3JfY3B1KGh3ZGV2LCBzZywgbmVsZW1zLCBkaXIpOwogCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkCiBkbWFfc3luY19zZ19mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkgICAgICAgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbikKKwkJICAgICAgIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhod2Rldik7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhod2Rldik7CiAKLQlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7CisJQlVHX09OKCF2YWxpZF9kbWFfZGlyZWN0aW9uKGRpcikpOwogCWlmIChvcHMtPnN5bmNfc2dfZm9yX2RldmljZSkKLQkJb3BzLT5zeW5jX3NnX2Zvcl9kZXZpY2UoaHdkZXYsIHNnLCBuZWxlbXMsIGRpcmVjdGlvbik7CisJCW9wcy0+c3luY19zZ19mb3JfZGV2aWNlKGh3ZGV2LCBzZywgbmVsZW1zLCBkaXIpOworCWRlYnVnX2RtYV9zeW5jX3NnX2Zvcl9kZXZpY2UoaHdkZXYsIHNnLCBuZWxlbXMsIGRpcik7CiAKIAlmbHVzaF93cml0ZV9idWZmZXJzKCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgZG1hX2FkZHJfdCBkbWFfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKIAkJCQkgICAgICBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKLQkJCQkgICAgICBpbnQgZGlyZWN0aW9uKQorCQkJCSAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpOworCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKKwlkbWFfYWRkcl90IGFkZHI7CiAKLQlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyZWN0aW9uKSk7Ci0JcmV0dXJuIG9wcy0+bWFwX3NpbmdsZShkZXYsIHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZnNldCwKLQkJCSAgICAgICBzaXplLCBkaXJlY3Rpb24pOworCUJVR19PTighdmFsaWRfZG1hX2RpcmVjdGlvbihkaXIpKTsKKwlhZGRyID0gb3BzLT5tYXBfcGFnZShkZXYsIHBhZ2UsIG9mZnNldCwgc2l6ZSwgZGlyLCBOVUxMKTsKKwlkZWJ1Z19kbWFfbWFwX3BhZ2UoZGV2LCBwYWdlLCBvZmZzZXQsIHNpemUsIGRpciwgYWRkciwgZmFsc2UpOworCisJcmV0dXJuIGFkZHI7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgYWRkciwKLQkJCQkgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQorCQkJCSAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKLQlkbWFfdW5tYXBfc2luZ2xlKGRldiwgYWRkciwgc2l6ZSwgZGlyZWN0aW9uKTsKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7CisKKwlCVUdfT04oIXZhbGlkX2RtYV9kaXJlY3Rpb24oZGlyKSk7CisJaWYgKG9wcy0+dW5tYXBfcGFnZSkKKwkJb3BzLT51bm1hcF9wYWdlKGRldiwgYWRkciwgc2l6ZSwgZGlyLCBOVUxMKTsKKwlkZWJ1Z19kbWFfdW5tYXBfcGFnZShkZXYsIGFkZHIsIHNpemUsIGRpciwgZmFsc2UpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQKQEAgLTI2Niw3ICsyNjAsNyBAQAogZG1hX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsCiAJCWdmcF90IGdmcCkKIHsKLQlzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpOworCXN0cnVjdCBkbWFfbWFwX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKIAl2b2lkICptZW1vcnk7CiAKIAlnZnAgJj0gfihfX0dGUF9ETUEgfCBfX0dGUF9ISUdITUVNIHwgX19HRlBfRE1BMzIpOwpAQCAtMjg1LDIwICsyNzksMjQgQEAKIAlpZiAoIW9wcy0+YWxsb2NfY29oZXJlbnQpCiAJCXJldHVybiBOVUxMOwogCi0JcmV0dXJuIG9wcy0+YWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCBkbWFfaGFuZGxlLAotCQkJCSAgIGRtYV9hbGxvY19jb2hlcmVudF9nZnBfZmxhZ3MoZGV2LCBnZnApKTsKKwltZW1vcnkgPSBvcHMtPmFsbG9jX2NvaGVyZW50KGRldiwgc2l6ZSwgZG1hX2hhbmRsZSwKKwkJCQkgICAgIGRtYV9hbGxvY19jb2hlcmVudF9nZnBfZmxhZ3MoZGV2LCBnZnApKTsKKwlkZWJ1Z19kbWFfYWxsb2NfY29oZXJlbnQoZGV2LCBzaXplLCAqZG1hX2hhbmRsZSwgbWVtb3J5KTsKKworCXJldHVybiBtZW1vcnk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAogCQkJCSAgICAgdm9pZCAqdmFkZHIsIGRtYV9hZGRyX3QgYnVzKQogewotCXN0cnVjdCBkbWFfbWFwcGluZ19vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7CisJc3RydWN0IGRtYV9tYXBfb3BzICpvcHMgPSBnZXRfZG1hX29wcyhkZXYpOwogCiAJV0FSTl9PTihpcnFzX2Rpc2FibGVkKCkpOyAgICAgICAvKiBmb3IgcG9ydGFiaWxpdHkgKi8KIAogCWlmIChkbWFfcmVsZWFzZV9mcm9tX2NvaGVyZW50KGRldiwgZ2V0X29yZGVyKHNpemUpLCB2YWRkcikpCiAJCXJldHVybjsKIAorCWRlYnVnX2RtYV9mcmVlX2NvaGVyZW50KGRldiwgc2l6ZSwgdmFkZHIsIGJ1cyk7CiAJaWYgKG9wcy0+ZnJlZV9jb2hlcmVudCkKIAkJb3BzLT5mcmVlX2NvaGVyZW50KGRldiwgc2l6ZSwgdmFkZHIsIGJ1cyk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9kbWkuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtaS5oCmluZGV4IGJjNjgyMTIuLmZkOGY5ZTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtaS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2RtaS5oCkBAIC0xLDIyICsxLDE1IEBACiAjaWZuZGVmIF9BU01fWDg2X0RNSV9ICiAjZGVmaW5lIF9BU01fWDg2X0RNSV9ICiAKKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKwogI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogCi0jZGVmaW5lIERNSV9NQVhfREFUQSAyMDQ4Ci0KLWV4dGVybiBpbnQgZG1pX2FsbG9jX2luZGV4OwotZXh0ZXJuIGNoYXIgZG1pX2FsbG9jX2RhdGFbRE1JX01BWF9EQVRBXTsKLQotLyogVGhpcyBpcyBzbyBlYXJseSB0aGF0IHRoZXJlIGlzIG5vIGdvb2Qgd2F5IHRvIGFsbG9jYXRlIGR5bmFtaWMgbWVtb3J5LgotICAgQWxsb2NhdGUgZGF0YSBpbiBhbiBCU1MgYXJyYXkuICovCi1zdGF0aWMgaW5saW5lIHZvaWQgKmRtaV9hbGxvYyh1bnNpZ25lZCBsZW4pCitzdGF0aWMgX19hbHdheXNfaW5saW5lIF9faW5pdCB2b2lkICpkbWlfYWxsb2ModW5zaWduZWQgbGVuKQogewotCWludCBpZHggPSBkbWlfYWxsb2NfaW5kZXg7Ci0JaWYgKChkbWlfYWxsb2NfaW5kZXggKyBsZW4pID4gRE1JX01BWF9EQVRBKQotCQlyZXR1cm4gTlVMTDsKLQlkbWlfYWxsb2NfaW5kZXggKz0gbGVuOwotCXJldHVybiBkbWlfYWxsb2NfZGF0YSArIGlkeDsKKwlyZXR1cm4gZXh0ZW5kX2JyayhsZW4sIHNpemVvZihpbnQpKTsKIH0KIAogLyogVXNlIGVhcmx5IElPIG1hcHBpbmdzIGZvciBETUkgYmVjYXVzZSBpdCdzIGluaXRpYWxpemVkIGVhcmx5ICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lODIwLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lODIwLmgKaW5kZXggMDBkNDFjZS4uN2VjYmE0ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZTgyMC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2U4MjAuaApAQCAtNzIsNyArNzIsNyBAQAogZXh0ZXJuIHZvaWQgZTgyMF9hZGRfcmVnaW9uKHU2NCBzdGFydCwgdTY0IHNpemUsIGludCB0eXBlKTsKIGV4dGVybiB2b2lkIGU4MjBfcHJpbnRfbWFwKGNoYXIgKndobyk7CiBleHRlcm4gaW50Ci1zYW5pdGl6ZV9lODIwX21hcChzdHJ1Y3QgZTgyMGVudHJ5ICpiaW9zbWFwLCBpbnQgbWF4X25yX21hcCwgaW50ICpwbnJfbWFwKTsKK3Nhbml0aXplX2U4MjBfbWFwKHN0cnVjdCBlODIwZW50cnkgKmJpb3NtYXAsIGludCBtYXhfbnJfbWFwLCB1MzIgKnBucl9tYXApOwogZXh0ZXJuIHU2NCBlODIwX3VwZGF0ZV9yYW5nZSh1NjQgc3RhcnQsIHU2NCBzaXplLCB1bnNpZ25lZCBvbGRfdHlwZSwKIAkJCSAgICAgICB1bnNpZ25lZCBuZXdfdHlwZSk7CiBleHRlcm4gdTY0IGU4MjBfcmVtb3ZlX3JhbmdlKHU2NCBzdGFydCwgdTY0IHNpemUsIHVuc2lnbmVkIG9sZF90eXBlLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZW50cnlfYXJjaC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZW50cnlfYXJjaC5oCmluZGV4IDg1NGQ1MzguLmMyZTZiZWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2VudHJ5X2FyY2guaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9lbnRyeV9hcmNoLmgKQEAgLTMzLDYgKzMzLDggQEAKIAkJIHNtcF9pbnZhbGlkYXRlX2ludGVycnVwdCkKICNlbmRpZgogCitCVUlMRF9JTlRFUlJVUFQoZ2VuZXJpY19pbnRlcnJ1cHQsIEdFTkVSSUNfSU5URVJSVVBUX1ZFQ1RPUikKKwogLyoKICAqIGV2ZXJ5IHBlbnRpdW0gbG9jYWwgQVBJQyBoYXMgdHdvICdsb2NhbCBpbnRlcnJ1cHRzJywgd2l0aCBhCiAgKiBzb2Z0LWRlZmluYWJsZSB2ZWN0b3IgYXR0YWNoZWQgdG8gYm90aCBpbnRlcnJ1cHRzLCBvbmUgb2YKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2Z0cmFjZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZnRyYWNlLmgKaW5kZXggYjU1YjRhNy4uZGIyNGMyMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vZnRyYWNlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vZnRyYWNlLmgKQEAgLTU1LDI5ICs1NSw0IEBACiAjZW5kaWYgLyogX19BU1NFTUJMWV9fICovCiAjZW5kaWYgLyogQ09ORklHX0ZVTkNUSU9OX1RSQUNFUiAqLwogCi0jaWZkZWYgQ09ORklHX0ZVTkNUSU9OX0dSQVBIX1RSQUNFUgotCi0jaWZuZGVmIF9fQVNTRU1CTFlfXwotCi0vKgotICogU3RhY2sgb2YgcmV0dXJuIGFkZHJlc3NlcyBmb3IgZnVuY3Rpb25zCi0gKiBvZiBhIHRocmVhZC4KLSAqIFVzZWQgaW4gc3RydWN0IHRocmVhZF9pbmZvCi0gKi8KLXN0cnVjdCBmdHJhY2VfcmV0X3N0YWNrIHsKLQl1bnNpZ25lZCBsb25nIHJldDsKLQl1bnNpZ25lZCBsb25nIGZ1bmM7Ci0JdW5zaWduZWQgbG9uZyBsb25nIGNhbGx0aW1lOwotfTsKLQotLyoKLSAqIFByaW1hcnkgaGFuZGxlciBvZiBhIGZ1bmN0aW9uIHJldHVybi4KLSAqIEl0IHJlbGF5cyBvbiBmdHJhY2VfcmV0dXJuX3RvX2hhbmRsZXIuCi0gKiBEZWZpbmVkIGluIGVudHJ5XzMyLzY0LlMKLSAqLwotZXh0ZXJuIHZvaWQgcmV0dXJuX3RvX2hhbmRsZXIodm9pZCk7Ci0KLSNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KLSNlbmRpZiAvKiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSICovCi0KICNlbmRpZiAvKiBfQVNNX1g4Nl9GVFJBQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaGFyZGlycS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaGFyZGlycS5oCmluZGV4IDE3NmYwNTguLjAzOWRiNmEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2hhcmRpcnEuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oYXJkaXJxLmgKQEAgLTEyLDYgKzEyLDcgQEAKIAl1bnNpZ25lZCBpbnQgYXBpY190aW1lcl9pcnFzOwkvKiBhcmNoIGRlcGVuZGVudCAqLwogCXVuc2lnbmVkIGludCBpcnFfc3B1cmlvdXNfY291bnQ7CiAjZW5kaWYKKwl1bnNpZ25lZCBpbnQgZ2VuZXJpY19pcnFzOwkvKiBhcmNoIGRlcGVuZGVudCAqLwogI2lmZGVmIENPTkZJR19TTVAKIAl1bnNpZ25lZCBpbnQgaXJxX3Jlc2NoZWRfY291bnQ7CiAJdW5zaWduZWQgaW50IGlycV9jYWxsX2NvdW50OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaGlnaG1lbS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaGlnaG1lbS5oCmluZGV4IGJmOTI3NmIuLjAxNGMyYjggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2hpZ2htZW0uaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9oaWdobWVtLmgKQEAgLTYzLDYgKzYzLDcgQEAKIHZvaWQgKmttYXBfYXRvbWljKHN0cnVjdCBwYWdlICpwYWdlLCBlbnVtIGttX3R5cGUgdHlwZSk7CiB2b2lkIGt1bm1hcF9hdG9taWModm9pZCAqa3ZhZGRyLCBlbnVtIGttX3R5cGUgdHlwZSk7CiB2b2lkICprbWFwX2F0b21pY19wZm4odW5zaWduZWQgbG9uZyBwZm4sIGVudW0ga21fdHlwZSB0eXBlKTsKK3ZvaWQgKmttYXBfYXRvbWljX3Byb3RfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIGttX3R5cGUgdHlwZSwgcGdwcm90X3QgcHJvdCk7CiBzdHJ1Y3QgcGFnZSAqa21hcF9hdG9taWNfdG9fcGFnZSh2b2lkICpwdHIpOwogCiAjaWZuZGVmIENPTkZJR19QQVJBVklSVApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaHdfaXJxLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaAppbmRleCAzNzBlMWM4Li5iNzYyZWE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9od19pcnEuaApAQCAtMjcsNiArMjcsNyBAQAogCiAvKiBJbnRlcnJ1cHQgaGFuZGxlcnMgcmVnaXN0ZXJlZCBkdXJpbmcgaW5pdF9JUlEgKi8KIGV4dGVybiB2b2lkIGFwaWNfdGltZXJfaW50ZXJydXB0KHZvaWQpOworZXh0ZXJuIHZvaWQgZ2VuZXJpY19pbnRlcnJ1cHQodm9pZCk7CiBleHRlcm4gdm9pZCBlcnJvcl9pbnRlcnJ1cHQodm9pZCk7CiBleHRlcm4gdm9pZCBzcHVyaW91c19pbnRlcnJ1cHQodm9pZCk7CiBleHRlcm4gdm9pZCB0aGVybWFsX2ludGVycnVwdCh2b2lkKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2luaXQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2luaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zNmZiMWE2YQotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2luaXQuaApAQCAtMCwwICsxLDE4IEBACisjaWZuZGVmIF9BU01fWDg2X0lOSVRfMzJfSAorI2RlZmluZSBfQVNNX1g4Nl9JTklUXzMyX0gKKworI2lmZGVmIENPTkZJR19YODZfMzIKK2V4dGVybiB2b2lkIF9faW5pdCBlYXJseV9pb3JlbWFwX3BhZ2VfdGFibGVfcmFuZ2VfaW5pdCh2b2lkKTsKKyNlbmRpZgorCitleHRlcm4gdW5zaWduZWQgbG9uZyBfX2luaXQKK2tlcm5lbF9waHlzaWNhbF9tYXBwaW5nX2luaXQodW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBlbmQsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplX21hc2spOworCisKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgZTgyMF90YWJsZV9zdGFydDsKK2V4dGVybiB1bnNpZ25lZCBsb25nIF9fbWVtaW5pdGRhdGEgZTgyMF90YWJsZV9lbmQ7CitleHRlcm4gdW5zaWduZWQgbG9uZyBfX21lbWluaXRkYXRhIGU4MjBfdGFibGVfdG9wOworCisjZW5kaWYgLyogX0FTTV9YODZfSU5JVF8zMl9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb19hcGljLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb19hcGljLmgKaW5kZXggNTljYjRhMS4uMzczY2MyYiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9fYXBpYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvX2FwaWMuaApAQCAtMTYyLDcgKzE2Miw4IEBACiBleHRlcm4gdm9pZCBpb2FwaWNfaW5pdF9tYXBwaW5ncyh2b2lkKTsKIAogI2lmZGVmIENPTkZJR19YODZfNjQKLWV4dGVybiBpbnQgc2F2ZV9tYXNrX0lPX0FQSUNfc2V0dXAodm9pZCk7CitleHRlcm4gaW50IHNhdmVfSU9fQVBJQ19zZXR1cCh2b2lkKTsKK2V4dGVybiB2b2lkIG1hc2tfSU9fQVBJQ19zZXR1cCh2b2lkKTsKIGV4dGVybiB2b2lkIHJlc3RvcmVfSU9fQVBJQ19zZXR1cCh2b2lkKTsKIGV4dGVybiB2b2lkIHJlaW5pdF9pbnRyX3JlbWFwcGVkX0lPX0FQSUMoaW50KTsKICNlbmRpZgpAQCAtMTcyLDcgKzE3Myw3IEBACiBleHRlcm4gaW50IHNldHVwX2lvYXBpY19lbnRyeShpbnQgYXBpYywgaW50IGlycSwKIAkJCSAgICAgIHN0cnVjdCBJT19BUElDX3JvdXRlX2VudHJ5ICplbnRyeSwKIAkJCSAgICAgIHVuc2lnbmVkIGludCBkZXN0aW5hdGlvbiwgaW50IHRyaWdnZXIsCi0JCQkgICAgICBpbnQgcG9sYXJpdHksIGludCB2ZWN0b3IpOworCQkJICAgICAgaW50IHBvbGFyaXR5LCBpbnQgdmVjdG9yLCBpbnQgcGluKTsKIGV4dGVybiB2b2lkIGlvYXBpY193cml0ZV9lbnRyeShpbnQgYXBpYywgaW50IHBpbiwKIAkJCSAgICAgICBzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlKTsKICNlbHNlICAvKiAhQ09ORklHX1g4Nl9JT19BUElDICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb21tdS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaW9tbXUuaAppbmRleCBhNmVlOWU2Li5hZjMyNmEyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pb21tdS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lvbW11LmgKQEAgLTMsNyArMyw3IEBACiAKIGV4dGVybiB2b2lkIHBjaV9pb21tdV9zaHV0ZG93bih2b2lkKTsKIGV4dGVybiB2b2lkIG5vX2lvbW11X2luaXQodm9pZCk7Ci1leHRlcm4gc3RydWN0IGRtYV9tYXBwaW5nX29wcyBub21tdV9kbWFfb3BzOworZXh0ZXJuIHN0cnVjdCBkbWFfbWFwX29wcyBub21tdV9kbWFfb3BzOwogZXh0ZXJuIGludCBmb3JjZV9pb21tdSwgbm9faW9tbXU7CiBleHRlcm4gaW50IGlvbW11X2RldGVjdGVkOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnEuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycS5oCmluZGV4IDEwN2ViMjEuLmYzODQ4MWIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycS5oCkBAIC0zNiw2ICszNiw3IEBACiBleHRlcm4gdm9pZCBmaXh1cF9pcnFzKHZvaWQpOwogI2VuZGlmCiAKK2V4dGVybiB2b2lkICgqZ2VuZXJpY19pbnRlcnJ1cHRfZXh0ZW5zaW9uKSh2b2lkKTsKIGV4dGVybiB2b2lkIGluaXRfSVJRKHZvaWQpOwogZXh0ZXJuIHZvaWQgbmF0aXZlX2luaXRfSVJRKHZvaWQpOwogZXh0ZXJuIGJvb2wgaGFuZGxlX2lycSh1bnNpZ25lZCBpcnEsIHN0cnVjdCBwdF9yZWdzICpyZWdzKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV9yZW1hcHBpbmcuaAppbmRleCAyMGUxZmQ1Li4wMzk2NzYwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfcmVtYXBwaW5nLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3JlbWFwcGluZy5oCkBAIC0xLDggKzEsNiBAQAogI2lmbmRlZiBfQVNNX1g4Nl9JUlFfUkVNQVBQSU5HX0gKICNkZWZpbmUgX0FTTV9YODZfSVJRX1JFTUFQUElOR19ICiAKLWV4dGVybiBpbnQgeDJhcGljOwotCiAjZGVmaW5lIElSVEVfREVTVChkZXN0KSAoKHgyYXBpYykgPyBkZXN0IDogZGVzdCA8PCA4KQogCiAjZW5kaWYJLyogX0FTTV9YODZfSVJRX1JFTUFQUElOR19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfdmVjdG9ycy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vaXJxX3ZlY3RvcnMuaAppbmRleCA4YTI4NWYzLi4zY2JkNzliIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9pcnFfdmVjdG9ycy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2lycV92ZWN0b3JzLmgKQEAgLTExMiw2ICsxMTIsMTEgQEAKICNkZWZpbmUgTE9DQUxfUEVSRl9WRUNUT1IJCTB4ZWUKIAogLyoKKyAqIEdlbmVyaWMgc3lzdGVtIHZlY3RvciBmb3IgcGxhdGZvcm0gc3BlY2lmaWMgdXNlCisgKi8KKyNkZWZpbmUgR0VORVJJQ19JTlRFUlJVUFRfVkVDVE9SCTB4ZWQKKworLyoKICAqIEZpcnN0IEFQSUMgdmVjdG9yIGF2YWlsYWJsZSB0byBkcml2ZXJzOiAodmVjdG9ycyAweDMwLTB4ZWUpIHdlCiAgKiBzdGFydCBhdCAweDMxKDB4NDEpIHRvIHNwcmVhZCBvdXQgdmVjdG9ycyBldmVubHkgYmV0d2VlbiBwcmlvcml0eQogICogbGV2ZWxzLiAoMHg4MCBpcyB0aGUgc3lzY2FsbCB2ZWN0b3IpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rZXhlYy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20va2V4ZWMuaAppbmRleCAwY2ViNmQxLi4zMTdmZjE3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9rZXhlYy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2tleGVjLmgKQEAgLTksMTMgKzksMTMgQEAKICMgZGVmaW5lIFBBR0VTX05SCQk0CiAjZWxzZQogIyBkZWZpbmUgUEFfQ09OVFJPTF9QQUdFCTAKLSMgZGVmaW5lIFBBX1RBQkxFX1BBR0UJCTEKLSMgZGVmaW5lIFBBR0VTX05SCQkyCisjIGRlZmluZSBWQV9DT05UUk9MX1BBR0UJMQorIyBkZWZpbmUgUEFfVEFCTEVfUEFHRQkJMgorIyBkZWZpbmUgUEFfU1dBUF9QQUdFCQkzCisjIGRlZmluZSBQQUdFU19OUgkJNAogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfWDg2XzMyCiAjIGRlZmluZSBLRVhFQ19DT05UUk9MX0NPREVfTUFYX1NJWkUJMjA0OAotI2VuZGlmCiAKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKQEAgLTEzNiwxMCArMTM2LDExIEBACiAJCXVuc2lnbmVkIGludCBoYXNfcGFlLAogCQl1bnNpZ25lZCBpbnQgcHJlc2VydmVfY29udGV4dCk7CiAjZWxzZQotTk9SRVRfVFlQRSB2b2lkCit1bnNpZ25lZCBsb25nCiByZWxvY2F0ZV9rZXJuZWwodW5zaWduZWQgbG9uZyBpbmRpcmVjdGlvbl9wYWdlLAogCQl1bnNpZ25lZCBsb25nIHBhZ2VfbGlzdCwKLQkJdW5zaWduZWQgbG9uZyBzdGFydF9hZGRyZXNzKSBBVFRSSUJfTk9SRVQ7CisJCXVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkcmVzcywKKwkJdW5zaWduZWQgaW50IHByZXNlcnZlX2NvbnRleHQpOwogI2VuZGlmCiAKICNkZWZpbmUgQVJDSF9IQVNfS0lNQUdFX0FSQ0gKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL2xpbmthZ2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL2xpbmthZ2UuaAppbmRleCA5MzIwZTJhLi4xMmQ1NWU3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9saW5rYWdlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vbGlua2FnZS5oCkBAIC0xLDE0ICsxLDExIEBACiAjaWZuZGVmIF9BU01fWDg2X0xJTktBR0VfSAogI2RlZmluZSBfQVNNX1g4Nl9MSU5LQUdFX0gKIAorI2luY2x1ZGUgPGxpbnV4L3N0cmluZ2lmeS5oPgorCiAjdW5kZWYgbm90cmFjZQogI2RlZmluZSBub3RyYWNlIF9fYXR0cmlidXRlX18oKG5vX2luc3RydW1lbnRfZnVuY3Rpb24pKQogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAotI2RlZmluZSBfX0FMSUdOIC5wMmFsaWduIDQsLDE1Ci0jZGVmaW5lIF9fQUxJR05fU1RSICIucDJhbGlnbiA0LCwxNSIKLSNlbmRpZgotCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgogI2RlZmluZSBhc21saW5rYWdlIENQUF9BU01MSU5LQUdFIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKQogLyoKQEAgLTUwLDE2ICs0NywyMCBAQAogCV9fYXNtbGlua2FnZV9wcm90ZWN0X24ocmV0LCAiZyIgKGFyZzEpLCAiZyIgKGFyZzIpLCAiZyIgKGFyZzMpLCBcCiAJCQkgICAgICAiZyIgKGFyZzQpLCAiZyIgKGFyZzUpLCAiZyIgKGFyZzYpKQogCi0jZW5kaWYKKyNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCisKKyNpZmRlZiBfX0FTU0VNQkxZX18KIAogI2RlZmluZSBHTE9CQUwobmFtZSkJXAogCS5nbG9ibCBuYW1lOwlcCiAJbmFtZToKIAotI2lmZGVmIENPTkZJR19YODZfQUxJR05NRU5UXzE2Ci0jZGVmaW5lIF9fQUxJR04gLmFsaWduIDE2LDB4OTAKLSNkZWZpbmUgX19BTElHTl9TVFIgIi5hbGlnbiAxNiwweDkwIgorI2lmIGRlZmluZWQoQ09ORklHX1g4Nl82NCkgfHwgZGVmaW5lZChDT05GSUdfWDg2X0FMSUdOTUVOVF8xNikKKyNkZWZpbmUgX19BTElHTgkJLnAyYWxpZ24gNCwgMHg5MAorI2RlZmluZSBfX0FMSUdOX1NUUglfX3N0cmluZ2lmeShfX0FMSUdOKQogI2VuZGlmCiAKKyNlbmRpZiAvKiBfX0FTU0VNQkxZX18gKi8KKwogI2VuZGlmIC8qIF9BU01fWDg2X0xJTktBR0VfSCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tY2UuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jZS5oCmluZGV4IDMyYzZlMTcuLjU2MzkzM2UgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL21jZS5oCkBAIC0xMSw2ICsxMSw4IEBACiAgKi8KIAogI2RlZmluZSBNQ0dfQ1RMX1AJICgxVUw8PDgpICAgLyogTUNHX0NBUCByZWdpc3RlciBhdmFpbGFibGUgKi8KKyNkZWZpbmUgTUNHX0VYVF9QCSAoMVVMTDw8OSkgICAvKiBFeHRlbmRlZCByZWdpc3RlcnMgYXZhaWxhYmxlICovCisjZGVmaW5lIE1DR19DTUNJX1AJICgxVUxMPDwxMCkgIC8qIENNQ0kgc3VwcG9ydGVkICovCiAKICNkZWZpbmUgTUNHX1NUQVRVU19SSVBWICAoMVVMPDwwKSAgIC8qIHJlc3RhcnQgaXAgdmFsaWQgKi8KICNkZWZpbmUgTUNHX1NUQVRVU19FSVBWICAoMVVMPDwxKSAgIC8qIGlwIHBvaW50cyB0byBjb3JyZWN0IGluc3RydWN0aW9uICovCkBAIC05MCwxNCArOTIsMjkgQEAKIAogI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KIAordm9pZCBtY2Vfc2V0dXAoc3RydWN0IG1jZSAqbSk7CiB2b2lkIG1jZV9sb2coc3RydWN0IG1jZSAqbSk7CiBERUNMQVJFX1BFUl9DUFUoc3RydWN0IHN5c19kZXZpY2UsIGRldmljZV9tY2UpOwogZXh0ZXJuIHZvaWQgKCp0aHJlc2hvbGRfY3B1X2NhbGxiYWNrKSh1bnNpZ25lZCBsb25nIGFjdGlvbiwgdW5zaWduZWQgaW50IGNwdSk7CiAKKy8qCisgKiBUbyBzdXBwb3J0IG1vcmUgdGhhbiAxMjggd291bGQgbmVlZCB0byBlc2NhcGUgdGhlIHByZWRlZmluZWQKKyAqIExpbnV4IGRlZmluZWQgZXh0ZW5kZWQgYmFua3MgZmlyc3QuCisgKi8KKyNkZWZpbmUgTUFYX05SX0JBTktTIChNQ0VfRVhURU5ERURfQkFOSyAtIDEpCisKICNpZmRlZiBDT05GSUdfWDg2X01DRV9JTlRFTAogdm9pZCBtY2VfaW50ZWxfZmVhdHVyZV9pbml0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYyk7Cit2b2lkIGNtY2lfY2xlYXIodm9pZCk7Cit2b2lkIGNtY2lfcmVlbmFibGUodm9pZCk7Cit2b2lkIGNtY2lfcmVkaXNjb3ZlcihpbnQgZHlpbmcpOwordm9pZCBjbWNpX3JlY2hlY2sodm9pZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIG1jZV9pbnRlbF9mZWF0dXJlX2luaXQoc3RydWN0IGNwdWluZm9feDg2ICpjKSB7IH0KK3N0YXRpYyBpbmxpbmUgdm9pZCBjbWNpX2NsZWFyKHZvaWQpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgY21jaV9yZWVuYWJsZSh2b2lkKSB7fQorc3RhdGljIGlubGluZSB2b2lkIGNtY2lfcmVkaXNjb3ZlcihpbnQgZHlpbmcpIHt9CitzdGF0aWMgaW5saW5lIHZvaWQgY21jaV9yZWNoZWNrKHZvaWQpIHt9CiAjZW5kaWYKIAogI2lmZGVmIENPTkZJR19YODZfTUNFX0FNRApAQCAtMTA2LDExICsxMjMsMjMgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBtY2VfYW1kX2ZlYXR1cmVfaW5pdChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpIHsgfQogI2VuZGlmCiAKLXZvaWQgbWNlX2xvZ190aGVybV90aHJvdF9ldmVudCh1bnNpZ25lZCBpbnQgY3B1LCBfX3U2NCBzdGF0dXMpOworZXh0ZXJuIGludCBtY2VfYXZhaWxhYmxlKHN0cnVjdCBjcHVpbmZvX3g4NiAqYyk7CisKK3ZvaWQgbWNlX2xvZ190aGVybV90aHJvdF9ldmVudChfX3U2NCBzdGF0dXMpOwogCiBleHRlcm4gYXRvbWljX3QgbWNlX2VudHJ5OwogCiBleHRlcm4gdm9pZCBkb19tYWNoaW5lX2NoZWNrKHN0cnVjdCBwdF9yZWdzICosIGxvbmcpOworCit0eXBlZGVmIERFQ0xBUkVfQklUTUFQKG1jZV9iYW5rc190LCBNQVhfTlJfQkFOS1MpOworREVDTEFSRV9QRVJfQ1BVKG1jZV9iYW5rc190LCBtY2VfcG9sbF9iYW5rcyk7CisKK2VudW0gbWNwX2ZsYWdzIHsKKwlNQ1BfVElNRVNUQU1QID0gKDEgPDwgMCksCS8qIGxvZyB0aW1lIHN0YW1wICovCisJTUNQX1VDID0gKDEgPDwgMSksCQkvKiBsb2cgdW5jb3JyZWN0ZWQgZXJyb3JzICovCit9OworZXh0ZXJuIHZvaWQgbWFjaGluZV9jaGVja19wb2xsKGVudW0gbWNwX2ZsYWdzIGZsYWdzLCBtY2VfYmFua3NfdCAqYik7CisKIGV4dGVybiBpbnQgbWNlX25vdGlmeV91c2VyKHZvaWQpOwogCiAjZW5kaWYgLyogIUNPTkZJR19YODZfMzIgKi8KQEAgLTEyMCw4ICsxNDksOCBAQAogI2Vsc2UKICNkZWZpbmUgbWNoZWNrX2luaXQoYykgZG8geyB9IHdoaWxlICgwKQogI2VuZGlmCi1leHRlcm4gdm9pZCBzdG9wX21jZSh2b2lkKTsKLWV4dGVybiB2b2lkIHJlc3RhcnRfbWNlKHZvaWQpOworCitleHRlcm4gdm9pZCAoKm1jZV90aHJlc2hvbGRfdmVjdG9yKSh2b2lkKTsKIAogI2VuZGlmIC8qIF9fS0VSTkVMX18gKi8KICNlbmRpZiAvKiBfQVNNX1g4Nl9NQ0VfSCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNpZGVmLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc2lkZWYuaAppbmRleCA2NzA2YjMwLi40Y2M0OGFmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc2lkZWYuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc2lkZWYuaApAQCAtNDcsNiArNDcsNyBAQAogI2RlZmluZQkgTVNJX0FERFJfREVTVF9JRF9NQVNLCQkweDAwZmZmZjAKICNkZWZpbmUgIE1TSV9BRERSX0RFU1RfSUQoZGVzdCkJCSgoKGRlc3QpIDw8IE1TSV9BRERSX0RFU1RfSURfU0hJRlQpICYgXAogCQkJCQkgTVNJX0FERFJfREVTVF9JRF9NQVNLKQorI2RlZmluZSBNU0lfQUREUl9FWFRfREVTVF9JRChkZXN0KQkoKGRlc3QpICYgMHhmZmZmZmYwMCkKIAogI2RlZmluZSBNU0lfQUREUl9JUl9FWFRfSU5UCQkoMSA8PCA0KQogI2RlZmluZSBNU0lfQUREUl9JUl9TSFYJCQkoMSA8PCAzKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vbXNyLWluZGV4LmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaAppbmRleCBmNGU1MDVmLi5lYzQxZmMxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9tc3ItaW5kZXguaApAQCAtODEsNiArODEsMTEgQEAKICNkZWZpbmUgTVNSX0lBMzJfTUMwX0FERFIJCTB4MDAwMDA0MDIKICNkZWZpbmUgTVNSX0lBMzJfTUMwX01JU0MJCTB4MDAwMDA0MDMKIAorLyogVGhlc2UgYXJlIGNvbnNlY3V0aXZlIGFuZCBub3QgaW4gdGhlIG5vcm1hbCA0ZXIgTUNFIGJhbmsgYmxvY2sgKi8KKyNkZWZpbmUgTVNSX0lBMzJfTUMwX0NUTDIJCTB4MDAwMDAyODAKKyNkZWZpbmUgQ01DSV9FTgkJCSgxVUxMIDw8IDMwKQorI2RlZmluZSBDTUNJX1RIUkVTSE9MRF9NQVNLCQkweGZmZmZVTEwKKwogI2RlZmluZSBNU1JfUDZfUEVSRkNUUjAJCQkweDAwMDAwMGMxCiAjZGVmaW5lIE1TUl9QNl9QRVJGQ1RSMQkJCTB4MDAwMDAwYzIKICNkZWZpbmUgTVNSX1A2X0VWTlRTRUwwCQkJMHgwMDAwMDE4NgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV8zMl90eXBlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV8zMl90eXBlcy5oCmluZGV4IGYxZTRhNzkuLjBmOTE1YWUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfMzJfdHlwZXMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlXzMyX3R5cGVzLmgKQEAgLTM5LDYgKzM5LDExIEBACiAjZGVmaW5lIF9fVklSVFVBTF9NQVNLX1NISUZUCTMyCiAjZW5kaWYJLyogQ09ORklHX1g4Nl9QQUUgKi8KIAorLyoKKyAqIEtlcm5lbCBpbWFnZSBzaXplIGlzIGxpbWl0ZWQgdG8gNTEyIE1CIChzZWUgaW4gYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUykKKyAqLworI2RlZmluZSBLRVJORUxfSU1BR0VfU0laRQkoNTEyICogMTAyNCAqIDEwMjQpCisKICNpZm5kZWYgX19BU1NFTUJMWV9fCiAKIC8qCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlX3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYWdlX3R5cGVzLmgKaW5kZXggMmQ2MjVkYS4uODI2YWQzNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFnZV90eXBlcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhZ2VfdHlwZXMuaApAQCAtNDAsMTQgKzQwLDggQEAKIAogI2lmbmRlZiBfX0FTU0VNQkxZX18KIAotc3RydWN0IHBncHJvdDsKLQogZXh0ZXJuIGludCBwYWdlX2lzX3JhbSh1bnNpZ25lZCBsb25nIHBhZ2Vucik7CiBleHRlcm4gaW50IGRldm1lbV9pc19hbGxvd2VkKHVuc2lnbmVkIGxvbmcgcGFnZW5yKTsKLWV4dGVybiB2b2lkIG1hcF9kZXZtZW0odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgc2l6ZSwKLQkJICAgICAgIHN0cnVjdCBwZ3Byb3Qgdm1hX3Byb3QpOwotZXh0ZXJuIHZvaWQgdW5tYXBfZGV2bWVtKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25nIHNpemUsCi0JCQkgc3RydWN0IHBncHJvdCB2bWFfcHJvdCk7CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIG1heF9sb3dfcGZuX21hcHBlZDsKIGV4dGVybiB1bnNpZ25lZCBsb25nIG1heF9wZm5fbWFwcGVkOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhcmF2aXJ0LmgKaW5kZXggMDYxN2Q1Yy4uNzcyN2FhOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGFyYXZpcnQuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wYXJhdmlydC5oCkBAIC0zMTcsOCArMzE3LDYgQEAKICNpZiBQQUdFVEFCTEVfTEVWRUxTID49IDMKICNpZmRlZiBDT05GSUdfWDg2X1BBRQogCXZvaWQgKCpzZXRfcHRlX2F0b21pYykocHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZXZhbCk7Ci0Jdm9pZCAoKnNldF9wdGVfcHJlc2VudCkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQlwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKTsKIAl2b2lkICgqcHRlX2NsZWFyKShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICBwdGVfdCAqcHRlcCk7CiAJdm9pZCAoKnBtZF9jbGVhcikocG1kX3QgKnBtZHApOwpAQCAtMzg5LDcgKzM4Nyw3IEBACiAKICNkZWZpbmUgcGFyYXZpcnRfdHlwZShvcCkJCQkJXAogCVtwYXJhdmlydF90eXBlbnVtXSAiaSIgKFBBUkFWSVJUX1BBVENIKG9wKSksCVwKLQlbcGFyYXZpcnRfb3BwdHJdICJtIiAob3ApCisJW3BhcmF2aXJ0X29wcHRyXSAiaSIgKCYob3ApKQogI2RlZmluZSBwYXJhdmlydF9jbG9iYmVyKGNsb2JiZXIpCQlcCiAJW3BhcmF2aXJ0X2Nsb2JiZXJdICJpIiAoY2xvYmJlcikKIApAQCAtNDQzLDcgKzQ0MSw3IEBACiAgKiBvZmZzZXQgaW50byB0aGUgcGFyYXZpcnRfcGF0Y2hfdGVtcGxhdGUgc3RydWN0dXJlLCBhbmQgY2FuIHRoZXJlZm9yZSBiZQogICogZnJlZWx5IGNvbnZlcnRlZCBiYWNrIGludG8gYSBzdHJ1Y3R1cmUgb2Zmc2V0LgogICovCi0jZGVmaW5lIFBBUkFWSVJUX0NBTEwJImNhbGwgKiVbcGFyYXZpcnRfb3BwdHJdOyIKKyNkZWZpbmUgUEFSQVZJUlRfQ0FMTAkiY2FsbCAqJWNbcGFyYXZpcnRfb3BwdHJdOyIKIAogLyoKICAqIFRoZXNlIG1hY3JvcyBhcmUgaW50ZW5kZWQgdG8gd3JhcCBjYWxscyB0aHJvdWdoIG9uZSBvZiB0aGUgcGFyYXZpcnQKQEAgLTEzNjUsMTMgKzEzNjMsNiBAQAogCQkgICAgcHRlLnB0ZSwgcHRlLnB0ZSA+PiAzMik7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlX3ByZXNlbnQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQkgICBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQotewotCS8qIDUgYXJnIHdvcmRzICovCi0JcHZfbW11X29wcy5zZXRfcHRlX3ByZXNlbnQobW0sIGFkZHIsIHB0ZXAsIHB0ZSk7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKIAkJCSAgICAgcHRlX3QgKnB0ZXApCiB7CkBAIC0xMzg4LDEyICsxMzc5LDYgQEAKIAlzZXRfcHRlKHB0ZXAsIHB0ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXRfcHRlX3ByZXNlbnQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCQkgICBwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQotewotCXNldF9wdGUocHRlcCwgcHRlKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIHB0ZV9jbGVhcihzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCQkJICAgICBwdGVfdCAqcHRlcCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BhdC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGF0LmgKaW5kZXggYjBlNzAwNS4uMmNkMDdiOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGF0LmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGF0LmgKQEAgLTIsNiArMiw3IEBACiAjZGVmaW5lIF9BU01fWDg2X1BBVF9ICiAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlX3R5cGVzLmg+CiAKICNpZmRlZiBDT05GSUdfWDg2X1BBVAogZXh0ZXJuIGludCBwYXRfZW5hYmxlZDsKQEAgLTE3LDUgKzE4LDkgQEAKIAogZXh0ZXJuIGludCBrZXJuZWxfbWFwX3N5bmNfbWVtdHlwZSh1NjQgYmFzZSwgdW5zaWduZWQgbG9uZyBzaXplLAogCQl1bnNpZ25lZCBsb25nIGZsYWcpOworZXh0ZXJuIHZvaWQgbWFwX2Rldm1lbSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBzaXplLAorCQkgICAgICAgc3RydWN0IHBncHJvdCB2bWFfcHJvdCk7CitleHRlcm4gdm9pZCB1bm1hcF9kZXZtZW0odW5zaWduZWQgbG9uZyBwZm4sIHVuc2lnbmVkIGxvbmcgc2l6ZSwKKwkJCSBzdHJ1Y3QgcGdwcm90IHZtYV9wcm90KTsKIAogI2VuZGlmIC8qIF9BU01fWDg2X1BBVF9IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwuaAppbmRleCBjMTc3NGFjLi4yMzM0OTgyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLmgKQEAgLTI2LDEzICsyNiw2IEBACiAJbmF0aXZlX3NldF9wdGUocHRlcCwgcHRlKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9zZXRfcHRlX3ByZXNlbnQoc3RydWN0IG1tX3N0cnVjdCAqbW0sCi0JCQkJCSAgdW5zaWduZWQgbG9uZyBhZGRyLAotCQkJCQkgIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCi17Ci0JbmF0aXZlX3NldF9wdGUocHRlcCwgcHRlKTsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9wbWRfY2xlYXIocG1kX3QgKnBtZHApCiB7CiAJbmF0aXZlX3NldF9wbWQocG1kcCwgX19wbWQoMCkpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUtM2xldmVsLmgKaW5kZXggM2YxM2NkZi4uMTc3YjAxNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS0zbGV2ZWwuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLTNsZXZlbC5oCkBAIC0zMSwyMyArMzEsNiBAQAogCXB0ZXAtPnB0ZV9sb3cgPSBwdGUucHRlX2xvdzsKIH0KIAotLyoKLSAqIFNpbmNlIHRoaXMgaXMgb25seSBjYWxsZWQgb24gdXNlciBQVEVzLCBhbmQgdGhlIHBhZ2UgZmF1bHQgaGFuZGxlcgotICogbXVzdCBoYW5kbGUgdGhlIGFscmVhZHkgcmFjeSBzaXR1YXRpb24gb2Ygc2ltdWx0YW5lb3VzIHBhZ2UgZmF1bHRzLAotICogd2UgYXJlIGp1c3RpZmllZCBpbiBtZXJlbHkgY2xlYXJpbmcgdGhlIFBURSBwcmVzZW50IGJpdCwgZm9sbG93ZWQKLSAqIGJ5IGEgc2V0LiAgVGhlIG9yZGVyaW5nIGhlcmUgaXMgaW1wb3J0YW50LgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQgbmF0aXZlX3NldF9wdGVfcHJlc2VudChzdHJ1Y3QgbW1fc3RydWN0ICptbSwKLQkJCQkJICB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJCSAgcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKLXsKLQlwdGVwLT5wdGVfbG93ID0gMDsKLQlzbXBfd21iKCk7Ci0JcHRlcC0+cHRlX2hpZ2ggPSBwdGUucHRlX2hpZ2g7Ci0Jc21wX3dtYigpOwotCXB0ZXAtPnB0ZV9sb3cgPSBwdGUucHRlX2xvdzsKLX0KLQogc3RhdGljIGlubGluZSB2b2lkIG5hdGl2ZV9zZXRfcHRlX2F0b21pYyhwdGVfdCAqcHRlcCwgcHRlX3QgcHRlKQogewogCXNldF82NGJpdCgodW5zaWduZWQgbG9uZyBsb25nICopKHB0ZXApLCBuYXRpdmVfcHRlX3ZhbChwdGUpKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCBkMDgxMmUxLi4yOWQ5NmQxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0zMSw4ICszMSw2IEBACiAjZGVmaW5lIHNldF9wdGUocHRlcCwgcHRlKQkJbmF0aXZlX3NldF9wdGUocHRlcCwgcHRlKQogI2RlZmluZSBzZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBwdGUpCW5hdGl2ZV9zZXRfcHRlX2F0KG1tLCBhZGRyLCBwdGVwLCBwdGUpCiAKLSNkZWZpbmUgc2V0X3B0ZV9wcmVzZW50KG1tLCBhZGRyLCBwdGVwLCBwdGUpCQkJCVwKLQluYXRpdmVfc2V0X3B0ZV9wcmVzZW50KG1tLCBhZGRyLCBwdGVwLCBwdGUpCiAjZGVmaW5lIHNldF9wdGVfYXRvbWljKHB0ZXAsIHB0ZSkJCQkJCVwKIAluYXRpdmVfc2V0X3B0ZV9hdG9taWMocHRlcCwgcHRlKQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyLmgKaW5kZXggOTc2MTJmYy4uMzFiZDEyMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMi5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzIuaApAQCAtNDIsOSArNDIsNiBAQAogICovCiAjdW5kZWYgVEVTVF9BQ0NFU1NfT0sKIAotLyogVGhlIGJvb3QgcGFnZSB0YWJsZXMgKGFsbCBjcmVhdGVkIGFzIGEgc2luZ2xlIGFycmF5KSAqLwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcGcwW107Ci0KICNpZmRlZiBDT05GSUdfWDg2X1BBRQogIyBpbmNsdWRlIDxhc20vcGd0YWJsZS0zbGV2ZWwuaD4KICNlbHNlCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyX3R5cGVzLmggYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlXzMyX3R5cGVzLmgKaW5kZXggYmQ4ZGYzYi4uMjczM2ZhZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV8zMl90eXBlcy5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfMzJfdHlwZXMuaApAQCAtMjUsNiArMjUsMTEgQEAKICAqIGFyZWEgZm9yIHRoZSBzYW1lIHJlYXNvbi4gOykKICAqLwogI2RlZmluZSBWTUFMTE9DX09GRlNFVAkoOCAqIDEwMjQgKiAxMDI0KQorCisjaWZuZGVmIF9fQVNTRU1CTEVSX18KK2V4dGVybiBib29sIF9fdm1hbGxvY19zdGFydF9zZXQ7IC8qIHNldCBvbmNlIGhpZ2hfbWVtb3J5IGlzIHNldCAqLworI2VuZGlmCisKICNkZWZpbmUgVk1BTExPQ19TVEFSVAkoKHVuc2lnbmVkIGxvbmcpaGlnaF9tZW1vcnkgKyBWTUFMTE9DX09GRlNFVCkKICNpZmRlZiBDT05GSUdfWDg2X1BBRQogI2RlZmluZSBMQVNUX1BLTUFQIDUxMgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZV90eXBlcy5oCmluZGV4IDRkMjU4YWQuLmI4MjM4ZGMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGVfdHlwZXMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlX3R5cGVzLmgKQEAgLTI3Myw2ICsyNzMsNyBAQAogCiBleHRlcm4gcHRldmFsX3QgX19zdXBwb3J0ZWRfcHRlX21hc2s7CiBleHRlcm4gaW50IG54X2VuYWJsZWQ7CitleHRlcm4gdm9pZCBzZXRfbngodm9pZCk7CiAKICNkZWZpbmUgcGdwcm90X3dyaXRlY29tYmluZQlwZ3Byb3Rfd3JpdGVjb21iaW5lCiBleHRlcm4gcGdwcm90X3QgcGdwcm90X3dyaXRlY29tYmluZShwZ3Byb3RfdCBwcm90KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKaW5kZXggNzYxMzk1MC4uYWU4NWE4ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgKQEAgLTc1LDkgKzc1LDkgQEAKICNlbHNlCiAJLyogTnVtYmVyIG9mIDRLIHBhZ2VzIGluIERUTEIvSVRMQiBjb21iaW5lZChpbiBwYWdlcyk6ICovCiAJaW50CQkJeDg2X3RsYnNpemU7CisjZW5kaWYKIAlfX3U4CQkJeDg2X3ZpcnRfYml0czsKIAlfX3U4CQkJeDg2X3BoeXNfYml0czsKLSNlbmRpZgogCS8qIENQVUlEIHJldHVybmVkIGNvcmUgaWQgYml0czogKi8KIAlfX3U4CQkJeDg2X2NvcmVpZF9iaXRzOwogCS8qIE1heCBleHRlbmRlZCBDUFVJRCBmdW5jdGlvbiBzdXBwb3J0ZWQ6ICovCkBAIC0zOTEsNiArMzkxLDkgQEAKIERFQ0xBUkVfSU5JVF9QRVJfQ1BVKGlycV9zdGFja191bmlvbik7CiAKIERFQ0xBUkVfUEVSX0NQVShjaGFyICosIGlycV9zdGFja19wdHIpOworREVDTEFSRV9QRVJfQ1BVKHVuc2lnbmVkIGludCwgaXJxX2NvdW50KTsKK2V4dGVybiB1bnNpZ25lZCBsb25nIGtlcm5lbF9lZmxhZ3M7CitleHRlcm4gYXNtbGlua2FnZSB2b2lkIGlnbm9yZV9zeXNyZXQodm9pZCk7CiAjZWxzZQkvKiBYODZfNjQgKi8KICNpZmRlZiBDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1IKIERFQ0xBUkVfUEVSX0NQVSh1bnNpZ25lZCBsb25nLCBzdGFja19jYW5hcnkpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2VjdGlvbnMuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NlY3Rpb25zLmgKaW5kZXggMmI4YzUxNi4uMWI3ZWU1ZCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vc2VjdGlvbnMuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZWN0aW9ucy5oCkBAIC0xICsxLDggQEAKKyNpZm5kZWYgX0FTTV9YODZfU0VDVElPTlNfSAorI2RlZmluZSBfQVNNX1g4Nl9TRUNUSU9OU19ICisKICNpbmNsdWRlIDxhc20tZ2VuZXJpYy9zZWN0aW9ucy5oPgorCitleHRlcm4gY2hhciBfX2Jya19iYXNlW10sIF9fYnJrX2xpbWl0W107CisKKyNlbmRpZgkvKiBfQVNNX1g4Nl9TRUNUSU9OU19IICovCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vc2V0dXAuaAppbmRleCAwNWM2ZjZiLi5iZGMyYWRhIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS9zZXR1cC5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3NldHVwLmgKQEAgLTY0LDcgKzY0LDcgQEAKICNpbmNsdWRlIDxhc20vYm9vdHBhcmFtLmg+CiAKIC8qIEludGVycnVwdCBjb250cm9sIGZvciB2U01Qb3dlcmVkIHg4Nl82NCBzeXN0ZW1zICovCi0jaWZkZWYgQ09ORklHX1g4Nl9WU01QCisjaWZkZWYgQ09ORklHX1g4Nl82NAogdm9pZCB2c21wX2luaXQodm9pZCk7CiAjZWxzZQogc3RhdGljIGlubGluZSB2b2lkIHZzbXBfaW5pdCh2b2lkKSB7IH0KQEAgLTEwMCwyMCArMTAwLDUxIEBACiAgKi8KICNkZWZpbmUgTE9XTUVNU0laRSgpCSgweDlmMDAwKQogCisvKiBleGNlZWRpbmdseSBlYXJseSBicmstbGlrZSBhbGxvY2F0b3IgKi8KK2V4dGVybiB1bnNpZ25lZCBsb25nIF9icmtfZW5kOwordm9pZCAqZXh0ZW5kX2JyayhzaXplX3Qgc2l6ZSwgc2l6ZV90IGFsaWduKTsKKworLyoKKyAqIFJlc2VydmUgc3BhY2UgaW4gdGhlIGJyayBzZWN0aW9uLiAgVGhlIG5hbWUgbXVzdCBiZSB1bmlxdWUgd2l0aGluCisgKiB0aGUgZmlsZSwgYW5kIHNvbWV3aGF0IGRlc2NyaXB0aXZlLiAgVGhlIHNpemUgaXMgaW4gYnl0ZXMuICBNdXN0IGJlCisgKiB1c2VkIGF0IGZpbGUgc2NvcGUuCisgKgorICogKFRoaXMgdXNlcyBhIHRlbXAgZnVuY3Rpb24gdG8gd3JhcCB0aGUgYXNtIHNvIHdlIGNhbiBwYXNzIGl0IHRoZQorICogc2l6ZSBwYXJhbWV0ZXI7IG90aGVyd2lzZSB3ZSB3b3VsZG4ndCBiZSBhYmxlIHRvLiAgV2UgY2FuJ3QgdXNlIGEKKyAqICJzZWN0aW9uIiBhdHRyaWJ1dGUgb24gYSBub3JtYWwgdmFyaWFibGUgYmVjYXVzZSBpdCBhbHdheXMgZW5kcyB1cAorICogYmVpbmcgQHByb2diaXRzLCB3aGljaCBlbmRzIHVwIGFsbG9jYXRpbmcgc3BhY2UgaW4gdGhlIHZtbGludXgKKyAqIGV4ZWN1dGFibGUuKQorICovCisjZGVmaW5lIFJFU0VSVkVfQlJLKG5hbWUsc3opCQkJCQkJXAorCXN0YXRpYyB2b2lkIF9fc2VjdGlvbiguZGlzY2FyZCkgX191c2VkCQkJCVwKKwlfX2Jya19yZXNlcnZhdGlvbl9mbl8jI25hbWUjI19fKHZvaWQpIHsJCQkJXAorCQlhc20gdm9sYXRpbGUgKAkJCQkJCVwKKwkJCSIucHVzaHNlY3Rpb24gLmJya19yZXNlcnZhdGlvbixcImF3XCIsQG5vYml0czsiIFwKKwkJCSIuYnJrLiIgI25hbWUgIjoiCQkJCVwKKwkJCSIgMTouc2tpcCAlYzA7IgkJCQkJXAorCQkJIiAuc2l6ZSAuYnJrLiIgI25hbWUgIiwgLiAtIDFiOyIJCVwKKwkJCSIgLnBvcHNlY3Rpb24iCQkJCQlcCisJCQk6IDogImkiIChzeikpOwkJCQkJXAorCX0KKwogI2lmZGVmIF9faTM4Nl9fCiAKIHZvaWQgX19pbml0IGkzODZfc3RhcnRfa2VybmVsKHZvaWQpOwogZXh0ZXJuIHZvaWQgcHJvYmVfcm9tcyh2b2lkKTsKIAotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW5pdF9wZ190YWJsZXNfc3RhcnQ7Ci1leHRlcm4gdW5zaWduZWQgbG9uZyBpbml0X3BnX3RhYmxlc19lbmQ7Ci0KICNlbHNlCiB2b2lkIF9faW5pdCB4ODZfNjRfc3RhcnRfa2VybmVsKGNoYXIgKnJlYWxfbW9kZSk7CiB2b2lkIF9faW5pdCB4ODZfNjRfc3RhcnRfcmVzZXJ2YXRpb25zKGNoYXIgKnJlYWxfbW9kZV9kYXRhKTsKIAogI2VuZGlmIC8qIF9faTM4Nl9fICovCiAjZW5kaWYgLyogX1NFVFVQICovCisjZWxzZQorI2RlZmluZSBSRVNFUlZFX0JSSyhuYW1lLHN6KQkJCQlcCisJLnB1c2hzZWN0aW9uIC5icmtfcmVzZXJ2YXRpb24sImF3IixAbm9iaXRzOwlcCisuYnJrLm5hbWU6CQkJCQkJXAorMToJLnNraXAgc3o7CQkJCQlcCisJLnNpemUgLmJyay5uYW1lLC4tMWI7CQkJCVwKKwkucG9wc2VjdGlvbgogI2VuZGlmIC8qIF9fQVNTRU1CTFlfXyAqLwogI2VuZGlmICAvKiAgX19LRVJORUxfXyAgKi8KIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXIuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3RpbWVyLmgKaW5kZXggYTgxMTk1ZS4uYmQzN2VkNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdGltZXIuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS90aW1lci5oCkBAIC0xMiw5ICsxMiw5IEBACiAKICNpZmRlZiBDT05GSUdfWDg2XzMyCiBleHRlcm4gaW50IHRpbWVyX2FjazsKLWV4dGVybiBpbnQgcmVjYWxpYnJhdGVfY3B1X2toeih2b2lkKTsKIGV4dGVybiBpcnFyZXR1cm5fdCB0aW1lcl9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKTsKICNlbmRpZiAvKiBDT05GSUdfWDg2XzMyICovCitleHRlcm4gaW50IHJlY2FsaWJyYXRlX2NwdV9raHoodm9pZCk7CiAKIGV4dGVybiBpbnQgbm9fdGltZXJfY2hlY2s7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3V2L3V2X2h1Yi5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKaW5kZXggNzc3MzI3ZS4uOWY0ZGZiYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKKysrIGIvYXJjaC94ODYvaW5jbHVkZS9hc20vdXYvdXZfaHViLmgKQEAgLTE5OSw2ICsxOTksMTAgQEAKICNkZWZpbmUgU0NJUl9DUFVfQUNUSVZJVFkJMHgwMgkvKiBub3QgaWRsZSAqLwogI2RlZmluZSBTQ0lSX0NQVV9IQl9JTlRFUlZBTAkoSFopCS8qIG9uY2UgcGVyIHNlY29uZCAqLwogCisvKiBMb29wIHRocm91Z2ggYWxsIGluc3RhbGxlZCBibGFkZXMgKi8KKyNkZWZpbmUgZm9yX2VhY2hfcG9zc2libGVfYmxhZGUoYmlkKQkJXAorCWZvciAoKGJpZCkgPSAwOyAoYmlkKSA8IHV2X251bV9wb3NzaWJsZV9ibGFkZXMoKTsgKGJpZCkrKykKKwogLyoKICAqIE1hY3JvcyBmb3IgY29udmVydGluZyBiZXR3ZWVuIGtlcm5lbCB2aXJ0dWFsIGFkZHJlc3Nlcywgc29ja2V0IGxvY2FsIHBoeXNpY2FsCiAgKiBhZGRyZXNzZXMsIGFuZCBVViBnbG9iYWwgcGh5c2ljYWwgYWRkcmVzc2VzLgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2h5cGVyY2FsbC5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL2h5cGVyY2FsbC5oCmluZGV4IDVlNzljYTYuLjljMzcxZTQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9oeXBlcmNhbGwuaAorKysgYi9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vaHlwZXJjYWxsLmgKQEAgLTI5Niw2ICsyOTYsOCBAQAogc3RhdGljIGlubGluZSBpbnQKIEhZUEVSVklTT1JfdXBkYXRlX2Rlc2NyaXB0b3IodTY0IG1hLCB1NjQgZGVzYykKIHsKKwlpZiAoc2l6ZW9mKHU2NCkgPT0gc2l6ZW9mKGxvbmcpKQorCQlyZXR1cm4gX2h5cGVyY2FsbDIoaW50LCB1cGRhdGVfZGVzY3JpcHRvciwgbWEsIGRlc2MpOwogCXJldHVybiBfaHlwZXJjYWxsNChpbnQsIHVwZGF0ZV9kZXNjcmlwdG9yLCBtYSwgbWE+PjMyLCBkZXNjLCBkZXNjPj4zMik7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZSBiL2FyY2gveDg2L2tlcm5lbC9NYWtlZmlsZQppbmRleCA5NWYyMTZiLi5jNjExYWQ2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva2VybmVsL01ha2VmaWxlCkBAIC03MCw3ICs3MCw2IEBACiBvYmotJChDT05GSUdfS0VYRUMpCQkrPSBtYWNoaW5lX2tleGVjXyQoQklUUykubwogb2JqLSQoQ09ORklHX0tFWEVDKQkJKz0gcmVsb2NhdGVfa2VybmVsXyQoQklUUykubyBjcmFzaC5vCiBvYmotJChDT05GSUdfQ1JBU0hfRFVNUCkJKz0gY3Jhc2hfZHVtcF8kKEJJVFMpLm8KLW9iai0kKENPTkZJR19YODZfVlNNUCkJCSs9IHZzbXBfNjQubwogb2JqLSQoQ09ORklHX0tQUk9CRVMpCQkrPSBrcHJvYmVzLm8KIG9iai0kKENPTkZJR19NT0RVTEVTKQkJKz0gbW9kdWxlXyQoQklUUykubwogb2JqLSQoQ09ORklHX0VGSSkgCQkrPSBlZmkubyBlZmlfJChCSVRTKS5vIGVmaV9zdHViXyQoQklUUykubwpAQCAtMTA2LDEyICsxMDUsMTIgQEAKIAogb2JqLSQoQ09ORklHX1g4Nl9DSEVDS19CSU9TX0NPUlJVUFRJT04pICs9IGNoZWNrLm8KIAotb2JqLSQoQ09ORklHX1NXSU9UTEIpCQkJKz0gcGNpLXN3aW90bGJfNjQubyAjIE5CIHJlbmFtZSB3aXRob3V0IF82NAorb2JqLSQoQ09ORklHX1NXSU9UTEIpCQkJKz0gcGNpLXN3aW90bGIubwogCiAjIyMKICMgNjQgYml0IHNwZWNpZmljIGZpbGVzCiBpZmVxICgkKENPTkZJR19YODZfNjQpLHkpCi0Jb2JqLSQoQ09ORklHX1g4Nl9VVikJCSs9IHRsYl91di5vIGJpb3NfdXYubyB1dl9pcnEubyB1dl9zeXNmcy5vCisJb2JqLSQoQ09ORklHX1g4Nl9VVikJCSs9IHRsYl91di5vIGJpb3NfdXYubyB1dl9pcnEubyB1dl9zeXNmcy5vIHV2X3RpbWUubwogCW9iai0kKENPTkZJR19YODZfUE1fVElNRVIpCSs9IHBtdGltZXJfNjQubwogCW9iai0kKENPTkZJR19BVURJVCkJCSs9IGF1ZGl0XzY0Lm8KIApAQCAtMTIwLDQgKzExOSw1IEBACiAJb2JqLSQoQ09ORklHX0FNRF9JT01NVSkJCSs9IGFtZF9pb21tdV9pbml0Lm8gYW1kX2lvbW11Lm8KIAogCW9iai0kKENPTkZJR19QQ0lfTU1DT05GSUcpCSs9IG1tY29uZi1mYW0xMGhfNjQubworCW9iai15CQkJCSs9IHZzbXBfNjQubwogZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hbHRlcm5hdGl2ZS5jIGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKaW5kZXggNjkwN2I4ZS4uNGM4MGYxNSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FsdGVybmF0aXZlLmMKQEAgLTQxNCw5ICs0MTQsMTcgQEAKIAkgICB0aGF0IG1pZ2h0IGV4ZWN1dGUgdGhlIHRvIGJlIHBhdGNoZWQgY29kZS4KIAkgICBPdGhlciBDUFVzIGFyZSBub3QgcnVubmluZy4gKi8KIAlzdG9wX25taSgpOwotI2lmZGVmIENPTkZJR19YODZfTUNFCi0Jc3RvcF9tY2UoKTsKLSNlbmRpZgorCisJLyoKKwkgKiBEb24ndCBzdG9wIG1hY2hpbmUgY2hlY2sgZXhjZXB0aW9ucyB3aGlsZSBwYXRjaGluZy4KKwkgKiBNQ0VzIG9ubHkgaGFwcGVuIHdoZW4gc29tZXRoaW5nIGdvdCBjb3JydXB0ZWQgYW5kIGluIHRoaXMKKwkgKiBjYXNlIHdlIG11c3QgZG8gc29tZXRoaW5nIGFib3V0IHRoZSBjb3JydXB0aW9uLgorCSAqIElnbm9yaW5nIGl0IGlzIHdvcnNlIHRoYW4gYSB1bmxpa2VseSBwYXRjaGluZyByYWNlLgorCSAqIEFsc28gbWFjaGluZSBjaGVja3MgdGVuZCB0byBiZSBicm9hZGNhc3QgYW5kIGlmIG9uZSBDUFUKKwkgKiBnb2VzIGludG8gbWFjaGluZSBjaGVjayB0aGUgb3RoZXJzIGZvbGxvdyBxdWlja2x5LCBzbyB3ZSBkb24ndAorCSAqIGV4cGVjdCBhIG1hY2hpbmUgY2hlY2sgdG8gY2F1c2UgdW5kdWUgcHJvYmxlbXMgZHVyaW5nIHRvIGNvZGUKKwkgKiBwYXRjaGluZy4KKwkgKi8KIAogCWFwcGx5X2FsdGVybmF0aXZlcyhfX2FsdF9pbnN0cnVjdGlvbnMsIF9fYWx0X2luc3RydWN0aW9uc19lbmQpOwogCkBAIC00NTYsOSArNDY0LDYgQEAKIAkJCQkodW5zaWduZWQgbG9uZylfX3NtcF9sb2Nrc19lbmQpOwogCiAJcmVzdGFydF9ubWkoKTsKLSNpZmRlZiBDT05GSUdfWDg2X01DRQotCXJlc3RhcnRfbWNlKCk7Ci0jZW5kaWYKIH0KIAogLyoqCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYW1kX2lvbW11LmMKaW5kZXggNTExM2MwOC4uYzU5NjJmZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FtZF9pb21tdS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hbWRfaW9tbXUuYwpAQCAtMjIsMTAgKzIyLDkgQEAKICNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2lvbW11LWhlbHBlci5oPgotI2lmZGVmIENPTkZJR19JT01NVV9BUEkKICNpbmNsdWRlIDxsaW51eC9pb21tdS5oPgotI2VuZGlmCiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CiAjaW5jbHVkZSA8YXNtL2lvbW11Lmg+CiAjaW5jbHVkZSA8YXNtL2dhcnQuaD4KQEAgLTEyOTcsOCArMTI5NiwxMCBAQAogLyoKICAqIFRoZSBleHBvcnRlZCBtYXBfc2luZ2xlIGZ1bmN0aW9uIGZvciBkbWFfb3BzLgogICovCi1zdGF0aWMgZG1hX2FkZHJfdCBtYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgcGh5c19hZGRyX3QgcGFkZHIsCi0JCQkgICAgIHNpemVfdCBzaXplLCBpbnQgZGlyKQorc3RhdGljIGRtYV9hZGRyX3QgbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCSAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGFtZF9pb21tdSAqaW9tbXU7CkBAIC0xMzA2LDYgKzEzMDcsNyBAQAogCXUxNiBkZXZpZDsKIAlkbWFfYWRkcl90IGFkZHI7CiAJdTY0IGRtYV9tYXNrOworCXBoeXNfYWRkcl90IHBhZGRyID0gcGFnZV90b19waHlzKHBhZ2UpICsgb2Zmc2V0OwogCiAJSU5DX1NUQVRTX0NPVU5URVIoY250X21hcF9zaW5nbGUpOwogCkBAIC0xMzQwLDggKzEzNDIsOCBAQAogLyoKICAqIFRoZSBleHBvcnRlZCB1bm1hcF9zaW5nbGUgZnVuY3Rpb24gZm9yIGRtYV9vcHMuCiAgKi8KLXN0YXRpYyB2b2lkIHVubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsCi0JCQkgc2l6ZV90IHNpemUsIGludCBkaXIpCitzdGF0aWMgdm9pZCB1bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwgc2l6ZV90IHNpemUsCisJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGFtZF9pb21tdSAqaW9tbXU7CkBAIC0xMzkwLDcgKzEzOTIsOCBAQAogICogbGlzdHMpLgogICovCiBzdGF0aWMgaW50IG1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAotCQkgIGludCBuZWxlbXMsIGludCBkaXIpCisJCSAgaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGFtZF9pb21tdSAqaW9tbXU7CkBAIC0xNDU3LDcgKzE0NjAsOCBAQAogICogbGlzdHMpLgogICovCiBzdGF0aWMgdm9pZCB1bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAotCQkgICAgIGludCBuZWxlbXMsIGludCBkaXIpCisJCSAgICAgaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJc3RydWN0IGFtZF9pb21tdSAqaW9tbXU7CkBAIC0xNjQ0LDExICsxNjQ4LDExIEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGRtYV9tYXBwaW5nX29wcyBhbWRfaW9tbXVfZG1hX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgZG1hX21hcF9vcHMgYW1kX2lvbW11X2RtYV9vcHMgPSB7CiAJLmFsbG9jX2NvaGVyZW50ID0gYWxsb2NfY29oZXJlbnQsCiAJLmZyZWVfY29oZXJlbnQgPSBmcmVlX2NvaGVyZW50LAotCS5tYXBfc2luZ2xlID0gbWFwX3NpbmdsZSwKLQkudW5tYXBfc2luZ2xlID0gdW5tYXBfc2luZ2xlLAorCS5tYXBfcGFnZSA9IG1hcF9wYWdlLAorCS51bm1hcF9wYWdlID0gdW5tYXBfcGFnZSwKIAkubWFwX3NnID0gbWFwX3NnLAogCS51bm1hcF9zZyA9IHVubWFwX3NnLAogCS5kbWFfc3VwcG9ydGVkID0gYW1kX2lvbW11X2RtYV9zdXBwb3J0ZWQsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljLmMKaW5kZXggZjljZWNkZi4uODVlYjhlMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpYy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL2FwaWMuYwpAQCAtNDYsNiArNDYsNyBAQAogI2luY2x1ZGUgPGFzbS9pZGxlLmg+CiAjaW5jbHVkZSA8YXNtL210cnIuaD4KICNpbmNsdWRlIDxhc20vc21wLmg+CisjaW5jbHVkZSA8YXNtL21jZS5oPgogCiB1bnNpZ25lZCBpbnQgbnVtX3Byb2Nlc3NvcnM7CiAKQEAgLTgwOCw3ICs4MDksNyBAQAogCXUzMiB2OwogCiAJLyogQVBJQyBoYXNuJ3QgYmVlbiBtYXBwZWQgeWV0ICovCi0JaWYgKCFhcGljX3BoeXMpCisJaWYgKCF4MmFwaWMgJiYgIWFwaWNfcGh5cykKIAkJcmV0dXJuOwogCiAJbWF4bHZ0ID0gbGFwaWNfZ2V0X21heGx2dCgpOwpAQCAtODQyLDYgKzg0MywxNCBAQAogCQlhcGljX3dyaXRlKEFQSUNfTFZUVEhNUiwgdiB8IEFQSUNfTFZUX01BU0tFRCk7CiAJfQogI2VuZGlmCisjaWZkZWYgQ09ORklHX1g4Nl9NQ0VfSU5URUwKKwlpZiAobWF4bHZ0ID49IDYpIHsKKwkJdiA9IGFwaWNfcmVhZChBUElDX0xWVENNQ0kpOworCQlpZiAoISh2ICYgQVBJQ19MVlRfTUFTS0VEKSkKKwkJCWFwaWNfd3JpdGUoQVBJQ19MVlRDTUNJLCB2IHwgQVBJQ19MVlRfTUFTS0VEKTsKKwl9CisjZW5kaWYKKwogCS8qCiAJICogQ2xlYW4gQVBJQyBzdGF0ZSBmb3Igb3RoZXIgT1NzOgogCSAqLwpAQCAtMTI0MSw2ICsxMjUwLDEyIEBACiAJYXBpY193cml0ZShBUElDX0xWVDEsIHZhbHVlKTsKIAogCXByZWVtcHRfZW5hYmxlKCk7CisKKyNpZmRlZiBDT05GSUdfWDg2X01DRV9JTlRFTAorCS8qIFJlY2hlY2sgQ01DSSBpbmZvcm1hdGlvbiBhZnRlciBsb2NhbCBBUElDIGlzIHVwIG9uIENQVSAjMCAqLworCWlmIChzbXBfcHJvY2Vzc29yX2lkKCkgPT0gMCkKKwkJY21jaV9yZWNoZWNrKCk7CisjZW5kaWYKIH0KIAogdm9pZCBfX2NwdWluaXQgZW5kX2xvY2FsX0FQSUNfc2V0dXAodm9pZCkKQEAgLTEzMTksMTUgKzEzMzQsMTYgQEAKIAkJcmV0dXJuOwogCX0KIAotCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKLQltYXNrXzgyNTlBKCk7Ci0KLQlyZXQgPSBzYXZlX21hc2tfSU9fQVBJQ19zZXR1cCgpOworCXJldCA9IHNhdmVfSU9fQVBJQ19zZXR1cCgpOwogCWlmIChyZXQpIHsKIAkJcHJfaW5mbygiU2F2aW5nIElPLUFQSUMgc3RhdGUgZmFpbGVkOiAlZFxuIiwgcmV0KTsKIAkJZ290byBlbmQ7CiAJfQogCisJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCW1hc2tfSU9fQVBJQ19zZXR1cCgpOworCW1hc2tfODI1OUEoKTsKKwogCXJldCA9IGVuYWJsZV9pbnRyX3JlbWFwcGluZygxKTsKIAogCWlmIChyZXQgJiYgeDJhcGljX3ByZWVuYWJsZWQpIHsKQEAgLTEzNTIsMTAgKzEzNjgsMTAgQEAKIAllbHNlCiAJCXJlaW5pdF9pbnRyX3JlbWFwcGVkX0lPX0FQSUMoeDJhcGljX3ByZWVuYWJsZWQpOwogCi1lbmQ6CiAJdW5tYXNrXzgyNTlBKCk7CiAJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOwogCitlbmQ6CiAJaWYgKCFyZXQpIHsKIAkJaWYgKCF4MmFwaWNfcHJlZW5hYmxlZCkKIAkJCXByX2luZm8oIkVuYWJsZWQgeDJhcGljIGFuZCBpbnRlcnJ1cHQtcmVtYXBwaW5nXG4iKTsKQEAgLTE1MDgsMTIgKzE1MjQsMTAgQEAKICAqLwogdm9pZCBfX2luaXQgaW5pdF9hcGljX21hcHBpbmdzKHZvaWQpCiB7Ci0jaWZkZWYgQ09ORklHX1g4Nl9YMkFQSUMKIAlpZiAoeDJhcGljKSB7CiAJCWJvb3RfY3B1X3BoeXNpY2FsX2FwaWNpZCA9IHJlYWRfYXBpY19pZCgpOwogCQlyZXR1cm47CiAJfQotI2VuZGlmCiAKIAkvKgogCSAqIElmIG5vIGxvY2FsIEFQSUMgY2FuIGJlIGZvdW5kIHRoZW4gc2V0IHVwIGEgZmFrZSBhbGwKQEAgLTE5NTcsMTIgKzE5NzEsOSBAQAogCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCi0jaWZkZWYgQ09ORklHX1g4Nl9YMkFQSUMKIAlpZiAoeDJhcGljKQogCQllbmFibGVfeDJhcGljKCk7Ci0JZWxzZQotI2VuZGlmCi0JeworCWVsc2UgewogCQkvKgogCQkgKiBNYWtlIHN1cmUgdGhlIEFQSUNCQVNFIHBvaW50cyB0byB0aGUgcmlnaHQgYWRkcmVzcwogCQkgKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvYXBpY19mbGF0XzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX2ZsYXRfNjQuYwppbmRleCBmOTMzODIyLi4wMDE0NzE0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX2ZsYXRfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9hcGljX2ZsYXRfNjQuYwpAQCAtMTU5LDIwICsxNTksNiBAQAogCXJldHVybiBwaHlzaWRfaXNzZXQocmVhZF94YXBpY19pZCgpLCBwaHlzX2NwdV9wcmVzZW50X21hcCk7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQgZmxhdF9jcHVfbWFza190b19hcGljaWQoY29uc3Qgc3RydWN0IGNwdW1hc2sgKmNwdW1hc2spCi17Ci0JcmV0dXJuIGNwdW1hc2tfYml0cyhjcHVtYXNrKVswXSAmIEFQSUNfQUxMX0NQVVM7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZmxhdF9jcHVfbWFza190b19hcGljaWRfYW5kKGNvbnN0IHN0cnVjdCBjcHVtYXNrICpjcHVtYXNrLAotCQkJCQkJY29uc3Qgc3RydWN0IGNwdW1hc2sgKmFuZG1hc2spCi17Ci0JdW5zaWduZWQgbG9uZyBtYXNrMSA9IGNwdW1hc2tfYml0cyhjcHVtYXNrKVswXSAmIEFQSUNfQUxMX0NQVVM7Ci0JdW5zaWduZWQgbG9uZyBtYXNrMiA9IGNwdW1hc2tfYml0cyhhbmRtYXNrKVswXSAmIEFQSUNfQUxMX0NQVVM7Ci0KLQlyZXR1cm4gbWFzazEgJiBtYXNrMjsKLX0KLQogc3RhdGljIGludCBmbGF0X3BoeXNfcGtnX2lkKGludCBpbml0aWFsX2FwaWNfaWQsIGludCBpbmRleF9tc2IpCiB7CiAJcmV0dXJuIGhhcmRfc21wX3Byb2Nlc3Nvcl9pZCgpID4+IGluZGV4X21zYjsKQEAgLTIxMyw4ICsxOTksOCBAQAogCS5zZXRfYXBpY19pZAkJCT0gc2V0X2FwaWNfaWQsCiAJLmFwaWNfaWRfbWFzawkJCT0gMHhGRnUgPDwgMjQsCiAKLQkuY3B1X21hc2tfdG9fYXBpY2lkCQk9IGZsYXRfY3B1X21hc2tfdG9fYXBpY2lkLAotCS5jcHVfbWFza190b19hcGljaWRfYW5kCQk9IGZsYXRfY3B1X21hc2tfdG9fYXBpY2lkX2FuZCwKKwkuY3B1X21hc2tfdG9fYXBpY2lkCQk9IGRlZmF1bHRfY3B1X21hc2tfdG9fYXBpY2lkLAorCS5jcHVfbWFza190b19hcGljaWRfYW5kCQk9IGRlZmF1bHRfY3B1X21hc2tfdG9fYXBpY2lkX2FuZCwKIAogCS5zZW5kX0lQSV9tYXNrCQkJPSBmbGF0X3NlbmRfSVBJX21hc2ssCiAJLnNlbmRfSVBJX21hc2tfYWxsYnV0c2VsZgk9IGZsYXRfc2VuZF9JUElfbWFza19hbGxidXRzZWxmLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jIGIvYXJjaC94ODYva2VybmVsL2FwaWMvaW9fYXBpYy5jCmluZGV4IDAwZTYwNzEuLmRhOTlmZmMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL2lvX2FwaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9pb19hcGljLmMKQEAgLTM4OSw2ICszODksOCBAQAogCXVuc2lnbmVkIGludCBpbmRleDsKIAl1bnNpZ25lZCBpbnQgdW51c2VkWzNdOwogCXVuc2lnbmVkIGludCBkYXRhOworCXVuc2lnbmVkIGludCB1bnVzZWQyWzExXTsKKwl1bnNpZ25lZCBpbnQgZW9pOwogfTsKIAogc3RhdGljIF9fYXR0cmlidXRlX2NvbnN0X18gc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpY19iYXNlKGludCBpZHgpCkBAIC0zOTcsNiArMzk5LDEyIEBACiAJCSsgKG1wX2lvYXBpY3NbaWR4XS5hcGljYWRkciAmIH5QQUdFX01BU0spOwogfQogCitzdGF0aWMgaW5saW5lIHZvaWQgaW9fYXBpY19lb2kodW5zaWduZWQgaW50IGFwaWMsIHVuc2lnbmVkIGludCB2ZWN0b3IpCit7CisJc3RydWN0IGlvX2FwaWMgX19pb21lbSAqaW9fYXBpYyA9IGlvX2FwaWNfYmFzZShhcGljKTsKKwl3cml0ZWwodmVjdG9yLCAmaW9fYXBpYy0+ZW9pKTsKK30KKwogc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9fYXBpY19yZWFkKHVuc2lnbmVkIGludCBhcGljLCB1bnNpZ25lZCBpbnQgcmVnKQogewogCXN0cnVjdCBpb19hcGljIF9faW9tZW0gKmlvX2FwaWMgPSBpb19hcGljX2Jhc2UoYXBpYyk7CkBAIC01NDYsMTYgKzU1NCwxMiBAQAogCiAJCWFwaWMgPSBlbnRyeS0+YXBpYzsKIAkJcGluID0gZW50cnktPnBpbjsKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCQkvKgogCQkgKiBXaXRoIGludGVycnVwdC1yZW1hcHBpbmcsIGRlc3RpbmF0aW9uIGluZm9ybWF0aW9uIGNvbWVzCiAJCSAqIGZyb20gaW50ZXJydXB0LXJlbWFwcGluZyB0YWJsZSBlbnRyeS4KIAkJICovCiAJCWlmICghaXJxX3JlbWFwcGVkKGlycSkpCiAJCQlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTEgKyBwaW4qMiwgZGVzdCk7Ci0jZWxzZQotCQlpb19hcGljX3dyaXRlKGFwaWMsIDB4MTEgKyBwaW4qMiwgZGVzdCk7Ci0jZW5kaWYKIAkJcmVnID0gaW9fYXBpY19yZWFkKGFwaWMsIDB4MTAgKyBwaW4qMik7CiAJCXJlZyAmPSB+SU9fQVBJQ19SRURJUl9WRUNUT1JfTUFTSzsKIAkJcmVnIHw9IHZlY3RvcjsKQEAgLTU4OCwxMCArNTkyLDEyIEBACiAJaWYgKGFzc2lnbl9pcnFfdmVjdG9yKGlycSwgY2ZnLCBtYXNrKSkKIAkJcmV0dXJuIEJBRF9BUElDSUQ7CiAKLQljcHVtYXNrX2FuZChkZXNjLT5hZmZpbml0eSwgY2ZnLT5kb21haW4sIG1hc2spOworCS8qIGNoZWNrIHRoYXQgYmVmb3JlIGRlc2MtPmFkZGluaXR5IGdldCB1cGRhdGVkICovCiAJc2V0X2V4dHJhX21vdmVfZGVzYyhkZXNjLCBtYXNrKTsKIAotCXJldHVybiBhcGljLT5jcHVfbWFza190b19hcGljaWRfYW5kKGRlc2MtPmFmZmluaXR5LCBjcHVfb25saW5lX21hc2spOworCWNwdW1hc2tfY29weShkZXNjLT5hZmZpbml0eSwgbWFzayk7CisKKwlyZXR1cm4gYXBpYy0+Y3B1X21hc2tfdG9fYXBpY2lkX2FuZChkZXNjLT5hZmZpbml0eSwgY2ZnLT5kb21haW4pOwogfQogCiBzdGF0aWMgdm9pZApAQCAtODQ5LDkgKzg1NSw5IEBACiBzdGF0aWMgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgKmVhcmx5X2lvYXBpY19lbnRyaWVzW01BWF9JT19BUElDU107CiAKIC8qCi0gKiBTYXZlcyBhbmQgbWFza3MgYWxsIHRoZSB1bm1hc2tlZCBJTy1BUElDIFJURSdzCisgKiBTYXZlcyBhbGwgdGhlIElPLUFQSUMgUlRFJ3MKICAqLwotaW50IHNhdmVfbWFza19JT19BUElDX3NldHVwKHZvaWQpCitpbnQgc2F2ZV9JT19BUElDX3NldHVwKHZvaWQpCiB7CiAJdW5pb24gSU9fQVBJQ19yZWdfMDEgcmVnXzAxOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC04NzYsMTYgKzg4Miw5IEBACiAJfQogCiAJZm9yIChhcGljID0gMDsgYXBpYyA8IG5yX2lvYXBpY3M7IGFwaWMrKykKLQkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdOyBwaW4rKykgewotCQkJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7Ci0KLQkJCWVudHJ5ID0gZWFybHlfaW9hcGljX2VudHJpZXNbYXBpY11bcGluXSA9CisJCWZvciAocGluID0gMDsgcGluIDwgbnJfaW9hcGljX3JlZ2lzdGVyc1thcGljXTsgcGluKyspCisJCQllYXJseV9pb2FwaWNfZW50cmllc1thcGljXVtwaW5dID0KIAkJCQlpb2FwaWNfcmVhZF9lbnRyeShhcGljLCBwaW4pOwotCQkJaWYgKCFlbnRyeS5tYXNrKSB7Ci0JCQkJZW50cnkubWFzayA9IDE7Ci0JCQkJaW9hcGljX3dyaXRlX2VudHJ5KGFwaWMsIHBpbiwgZW50cnkpOwotCQkJfQotCQl9CiAKIAlyZXR1cm4gMDsKIApAQCAtODk4LDYgKzg5NywyNSBAQAogCXJldHVybiAtRU5PTUVNOwogfQogCit2b2lkIG1hc2tfSU9fQVBJQ19zZXR1cCh2b2lkKQoreworCWludCBhcGljLCBwaW47CisKKwlmb3IgKGFwaWMgPSAwOyBhcGljIDwgbnJfaW9hcGljczsgYXBpYysrKSB7CisJCWlmICghZWFybHlfaW9hcGljX2VudHJpZXNbYXBpY10pCisJCQlicmVhazsKKwkJZm9yIChwaW4gPSAwOyBwaW4gPCBucl9pb2FwaWNfcmVnaXN0ZXJzW2FwaWNdOyBwaW4rKykgeworCQkJc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgZW50cnk7CisKKwkJCWVudHJ5ID0gZWFybHlfaW9hcGljX2VudHJpZXNbYXBpY11bcGluXTsKKwkJCWlmICghZW50cnkubWFzaykgeworCQkJCWVudHJ5Lm1hc2sgPSAxOworCQkJCWlvYXBpY193cml0ZV9lbnRyeShhcGljLCBwaW4sIGVudHJ5KTsKKwkJCX0KKwkJfQorCX0KK30KKwogdm9pZCByZXN0b3JlX0lPX0FQSUNfc2V0dXAodm9pZCkKIHsKIAlpbnQgYXBpYywgcGluOwpAQCAtMTQxMSw5ICsxNDI5LDcgQEAKIH0KIAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpb2FwaWNfY2hpcDsKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBpcl9pb2FwaWNfY2hpcDsKLSNlbmRpZgogCiAjZGVmaW5lIElPQVBJQ19BVVRPICAgICAtMQogI2RlZmluZSBJT0FQSUNfRURHRSAgICAgMApAQCAtMTQ1Miw3ICsxNDY4LDYgQEAKIAllbHNlCiAJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX0xFVkVMOwogCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIAlpZiAoaXJxX3JlbWFwcGVkKGlycSkpIHsKIAkJZGVzYy0+c3RhdHVzIHw9IElSUV9NT1ZFX1BDTlRYVDsKIAkJaWYgKHRyaWdnZXIpCkBAIC0xNDY0LDcgKzE0NzksNyBAQAogCQkJCQkJICAgICAgaGFuZGxlX2VkZ2VfaXJxLCAiZWRnZSIpOwogCQlyZXR1cm47CiAJfQotI2VuZGlmCisKIAlpZiAoKHRyaWdnZXIgPT0gSU9BUElDX0FVVE8gJiYgSU9fQVBJQ19pcnFfdHJpZ2dlcihpcnEpKSB8fAogCSAgICB0cmlnZ2VyID09IElPQVBJQ19MRVZFTCkKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmaW9hcGljX2NoaXAsCkBAIC0xNDc4LDE0ICsxNDkzLDEzIEBACiBpbnQgc2V0dXBfaW9hcGljX2VudHJ5KGludCBhcGljX2lkLCBpbnQgaXJxLAogCQkgICAgICAgc3RydWN0IElPX0FQSUNfcm91dGVfZW50cnkgKmVudHJ5LAogCQkgICAgICAgdW5zaWduZWQgaW50IGRlc3RpbmF0aW9uLCBpbnQgdHJpZ2dlciwKLQkJICAgICAgIGludCBwb2xhcml0eSwgaW50IHZlY3RvcikKKwkJICAgICAgIGludCBwb2xhcml0eSwgaW50IHZlY3RvciwgaW50IHBpbikKIHsKIAkvKgogCSAqIGFkZCBpdCB0byB0aGUgSU8tQVBJQyBpcnEtcm91dGluZyB0YWJsZToKIAkgKi8KIAltZW1zZXQoZW50cnksMCxzaXplb2YoKmVudHJ5KSk7CiAKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCWlmIChpbnRyX3JlbWFwcGluZ19lbmFibGVkKSB7CiAJCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUgPSBtYXBfaW9hcGljX3RvX2lyKGFwaWNfaWQpOwogCQlzdHJ1Y3QgaXJ0ZSBpcnRlOwpAQCAtMTUwNCw3ICsxNTE4LDE0IEBACiAKIAkJaXJ0ZS5wcmVzZW50ID0gMTsKIAkJaXJ0ZS5kc3RfbW9kZSA9IGFwaWMtPmlycV9kZXN0X21vZGU7Ci0JCWlydGUudHJpZ2dlcl9tb2RlID0gdHJpZ2dlcjsKKwkJLyoKKwkJICogVHJpZ2dlciBtb2RlIGluIHRoZSBJUlRFIHdpbGwgYWx3YXlzIGJlIGVkZ2UsIGFuZCB0aGUKKwkJICogYWN0dWFsIGxldmVsIG9yIGVkZ2UgdHJpZ2dlciB3aWxsIGJlIHNldHVwIGluIHRoZSBJTy1BUElDCisJCSAqIFJURS4gVGhpcyB3aWxsIGhlbHAgc2ltcGxpZnkgbGV2ZWwgdHJpZ2dlcmVkIGlycSBtaWdyYXRpb24uCisJCSAqIEZvciBtb3JlIGRldGFpbHMsIHNlZSB0aGUgY29tbWVudHMgYWJvdmUgZXhwbGFpbmlnIElPLUFQSUMKKwkJICogaXJxIG1pZ3JhdGlvbiBpbiB0aGUgcHJlc2VuY2Ugb2YgaW50ZXJydXB0LXJlbWFwcGluZy4KKwkJICovCisJCWlydGUudHJpZ2dlcl9tb2RlID0gMDsKIAkJaXJ0ZS5kbHZyeV9tb2RlID0gYXBpYy0+aXJxX2RlbGl2ZXJ5X21vZGU7CiAJCWlydGUudmVjdG9yID0gdmVjdG9yOwogCQlpcnRlLmRlc3RfaWQgPSBJUlRFX0RFU1QoZGVzdGluYXRpb24pOwpAQCAtMTUxNSwxOCArMTUzNiwyMSBAQAogCQlpcl9lbnRyeS0+emVybyA9IDA7CiAJCWlyX2VudHJ5LT5mb3JtYXQgPSAxOwogCQlpcl9lbnRyeS0+aW5kZXggPSAoaW5kZXggJiAweDdmZmYpOwotCX0gZWxzZQotI2VuZGlmCi0JeworCQkvKgorCQkgKiBJTy1BUElDIFJURSB3aWxsIGJlIGNvbmZpZ3VyZWQgd2l0aCB2aXJ0dWFsIHZlY3Rvci4KKwkJICogaXJxIGhhbmRsZXIgd2lsbCBkbyB0aGUgZXhwbGljaXQgRU9JIHRvIHRoZSBpby1hcGljLgorCQkgKi8KKwkJaXJfZW50cnktPnZlY3RvciA9IHBpbjsKKwl9IGVsc2UgewogCQllbnRyeS0+ZGVsaXZlcnlfbW9kZSA9IGFwaWMtPmlycV9kZWxpdmVyeV9tb2RlOwogCQllbnRyeS0+ZGVzdF9tb2RlID0gYXBpYy0+aXJxX2Rlc3RfbW9kZTsKIAkJZW50cnktPmRlc3QgPSBkZXN0aW5hdGlvbjsKKwkJZW50cnktPnZlY3RvciA9IHZlY3RvcjsKIAl9CiAKIAllbnRyeS0+bWFzayA9IDA7CQkJCS8qIGVuYWJsZSBJUlEgKi8KIAllbnRyeS0+dHJpZ2dlciA9IHRyaWdnZXI7CiAJZW50cnktPnBvbGFyaXR5ID0gcG9sYXJpdHk7Ci0JZW50cnktPnZlY3RvciA9IHZlY3RvcjsKIAogCS8qIE1hc2sgbGV2ZWwgdHJpZ2dlcmVkIGlycXMuCiAJICogVXNlIElSUV9ERUxBWUVEX0RJU0FCTEUgZm9yIGVkZ2UgdHJpZ2dlcmVkIGlycXMuCkBAIC0xNTYxLDcgKzE1ODUsNyBAQAogCiAKIAlpZiAoc2V0dXBfaW9hcGljX2VudHJ5KG1wX2lvYXBpY3NbYXBpY19pZF0uYXBpY2lkLCBpcnEsICZlbnRyeSwKLQkJCSAgICAgICBkZXN0LCB0cmlnZ2VyLCBwb2xhcml0eSwgY2ZnLT52ZWN0b3IpKSB7CisJCQkgICAgICAgZGVzdCwgdHJpZ2dlciwgcG9sYXJpdHksIGNmZy0+dmVjdG9yLCBwaW4pKSB7CiAJCXByaW50aygiRmFpbGVkIHRvIHNldHVwIGlvYXBpYyBlbnRyeSBmb3IgaW9hcGljICAlZCwgcGluICVkXG4iLAogCQkgICAgICAgbXBfaW9hcGljc1thcGljX2lkXS5hcGljaWQsIHBpbik7CiAJCV9fY2xlYXJfaXJxX3ZlY3RvcihpcnEsIGNmZyk7CkBAIC0xNjQyLDEwICsxNjY2LDggQEAKIHsKIAlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKIAotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiAJaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpCiAJCXJldHVybjsKLSNlbmRpZgogCiAJbWVtc2V0KCZlbnRyeSwgMCwgc2l6ZW9mKGVudHJ5KSk7CiAKQEAgLTIwNDAsOCArMjA2MiwxMyBAQAogCSAqIElmIHRoZSBpODI1OSBpcyByb3V0ZWQgdGhyb3VnaCBhbiBJT0FQSUMKIAkgKiBQdXQgdGhhdCBJT0FQSUMgaW4gdmlydHVhbCB3aXJlIG1vZGUKIAkgKiBzbyBsZWdhY3kgaW50ZXJydXB0cyBjYW4gYmUgZGVsaXZlcmVkLgorCSAqCisJICogV2l0aCBpbnRlcnJ1cHQtcmVtYXBwaW5nLCBmb3Igbm93IHdlIHdpbGwgdXNlIHZpcnR1YWwgd2lyZSBBIG1vZGUsCisJICogYXMgdmlydHVhbCB3aXJlIEIgaXMgbGl0dGxlIGNvbXBsZXggKG5lZWQgdG8gY29uZmlndXJlIGJvdGgKKwkgKiBJT0FQSUMgUlRFIGFzd2VsbCBhcyBpbnRlcnJ1cHQtcmVtYXBwaW5nIHRhYmxlIGVudHJ5KS4KKwkgKiBBcyB0aGlzIGdldHMgY2FsbGVkIGR1cmluZyBjcmFzaCBkdW1wLCBrZWVwIHRoaXMgc2ltcGxlIGZvciBub3cuCiAJICovCi0JaWYgKGlvYXBpY19pODI1OS5waW4gIT0gLTEpIHsKKwlpZiAoaW9hcGljX2k4MjU5LnBpbiAhPSAtMSAmJiAhaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkgewogCQlzdHJ1Y3QgSU9fQVBJQ19yb3V0ZV9lbnRyeSBlbnRyeTsKIAogCQltZW1zZXQoJmVudHJ5LCAwLCBzaXplb2YoZW50cnkpKTsKQEAgLTIwNjEsNyArMjA4OCwxMCBAQAogCQlpb2FwaWNfd3JpdGVfZW50cnkoaW9hcGljX2k4MjU5LmFwaWMsIGlvYXBpY19pODI1OS5waW4sIGVudHJ5KTsKIAl9CiAKLQlkaXNjb25uZWN0X2JzcF9BUElDKGlvYXBpY19pODI1OS5waW4gIT0gLTEpOworCS8qCisJICogVXNlIHZpcnR1YWwgd2lyZSBBIG1vZGUgd2hlbiBpbnRlcnJ1cHQgcmVtYXBwaW5nIGlzIGVuYWJsZWQuCisJICovCisJZGlzY29ubmVjdF9ic3BfQVBJQyghaW50cl9yZW1hcHBpbmdfZW5hYmxlZCAmJiBpb2FwaWNfaTgyNTkucGluICE9IC0xKTsKIH0KIAogI2lmZGVmIENPTkZJR19YODZfMzIKQEAgLTIzMDMsMzcgKzIzMzMsMjQgQEAKICNpZmRlZiBDT05GSUdfU01QCiAKICNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotc3RhdGljIHZvaWQgaXJfaXJxX21pZ3JhdGlvbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwotCi1zdGF0aWMgREVDTEFSRV9ERUxBWUVEX1dPUksoaXJfbWlncmF0aW9uX3dvcmssIGlyX2lycV9taWdyYXRpb24pOwogCiAvKgogICogTWlncmF0ZSB0aGUgSU8tQVBJQyBpcnEgaW4gdGhlIHByZXNlbmNlIG9mIGludHItcmVtYXBwaW5nLgogICoKLSAqIEZvciBlZGdlIHRyaWdnZXJlZCwgaXJxIG1pZ3JhdGlvbiBpcyBhIHNpbXBsZSBhdG9taWMgdXBkYXRlKG9mIHZlY3RvcgotICogYW5kIGNwdSBkZXN0aW5hdGlvbikgb2YgSVJURSBhbmQgZmx1c2ggdGhlIGhhcmR3YXJlIGNhY2hlLgorICogRm9yIGJvdGggbGV2ZWwgYW5kIGVkZ2UgdHJpZ2dlcmVkLCBpcnEgbWlncmF0aW9uIGlzIGEgc2ltcGxlIGF0b21pYworICogdXBkYXRlKG9mIHZlY3RvciBhbmQgY3B1IGRlc3RpbmF0aW9uKSBvZiBJUlRFIGFuZCBmbHVzaCB0aGUgaGFyZHdhcmUgY2FjaGUuCiAgKgotICogRm9yIGxldmVsIHRyaWdnZXJlZCwgd2UgbmVlZCB0byBtb2RpZnkgdGhlIGlvLWFwaWMgUlRFIGFzd2VsbCB3aXRoIHRoZSB1cGRhdGUKLSAqIHZlY3RvciBpbmZvcm1hdGlvbiwgYWxvbmcgd2l0aCBtb2RpZnlpbmcgSVJURSB3aXRoIHZlY3RvciBhbmQgZGVzdGluYXRpb24uCi0gKiBTbyBpcnEgbWlncmF0aW9uIGZvciBsZXZlbCB0cmlnZ2VyZWQgaXMgbGl0dGxlICBiaXQgbW9yZSBjb21wbGV4IGNvbXBhcmVkIHRvCi0gKiBlZGdlIHRyaWdnZXJlZCBtaWdyYXRpb24uIEJ1dCB0aGUgZ29vZCBuZXdzIGlzLCB3ZSB1c2UgdGhlIHNhbWUgYWxnb3JpdGhtCi0gKiBmb3IgbGV2ZWwgdHJpZ2dlcmVkIG1pZ3JhdGlvbiBhcyB3ZSBoYXZlIHRvZGF5LCBvbmx5IGRpZmZlcmVuY2UgYmVpbmcsCi0gKiB3ZSBub3cgaW5pdGlhdGUgdGhlIGlycSBtaWdyYXRpb24gZnJvbSBwcm9jZXNzIGNvbnRleHQgaW5zdGVhZCBvZiB0aGUKLSAqIGludGVycnVwdCBjb250ZXh0LgotICoKLSAqIEluIGZ1dHVyZSwgd2hlbiB3ZSBkbyBhIGRpcmVjdGVkIEVPSSAoY29tYmluZWQgd2l0aCBjcHUgRU9JIGJyb2FkY2FzdAotICogc3VwcHJlc3Npb24pIHRvIHRoZSBJTy1BUElDLCBsZXZlbCB0cmlnZ2VyZWQgaXJxIG1pZ3JhdGlvbiB3aWxsIGFsc28gYmUKLSAqIGFzIHNpbXBsZSBhcyBlZGdlIHRyaWdnZXJlZCBtaWdyYXRpb24gYW5kIHdlIGNhbiBkbyB0aGUgaXJxIG1pZ3JhdGlvbgotICogd2l0aCBhIHNpbXBsZSBhdG9taWMgdXBkYXRlIHRvIElPLUFQSUMgUlRFLgorICogRm9yIGxldmVsIHRyaWdnZXJlZCwgd2UgZWxpbWluYXRlIHRoZSBpby1hcGljIFJURSBtb2RpZmljYXRpb24gKHdpdGggdGhlCisgKiB1cGRhdGVkIHZlY3RvciBpbmZvcm1hdGlvbiksIGJ5IHVzaW5nIGEgdmlydHVhbCB2ZWN0b3IgKGlvLWFwaWMgcGluIG51bWJlcikuCisgKiBSZWFsIHZlY3RvciB0aGF0IGlzIHVzZWQgZm9yIGludGVycnVwdGluZyBjcHUgd2lsbCBiZSBjb21pbmcgZnJvbQorICogdGhlIGludGVycnVwdC1yZW1hcHBpbmcgdGFibGUgZW50cnkuCiAgKi8KIHN0YXRpYyB2b2lkCiBtaWdyYXRlX2lvYXBpY19pcnFfZGVzYyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKQogewogCXN0cnVjdCBpcnFfY2ZnICpjZmc7CiAJc3RydWN0IGlydGUgaXJ0ZTsKLQlpbnQgbW9kaWZ5X2lvYXBpY19ydGU7CiAJdW5zaWduZWQgaW50IGRlc3Q7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1bnNpZ25lZCBpbnQgaXJxOwogCiAJaWYgKCFjcHVtYXNrX2ludGVyc2VjdHMobWFzaywgY3B1X29ubGluZV9tYXNrKSkKQEAgLTIzNTEsMTMgKzIzNjgsNiBAQAogCiAJZGVzdCA9IGFwaWMtPmNwdV9tYXNrX3RvX2FwaWNpZF9hbmQoY2ZnLT5kb21haW4sIG1hc2spOwogCi0JbW9kaWZ5X2lvYXBpY19ydGUgPSBkZXNjLT5zdGF0dXMgJiBJUlFfTEVWRUw7Ci0JaWYgKG1vZGlmeV9pb2FwaWNfcnRlKSB7Ci0JCXNwaW5fbG9ja19pcnFzYXZlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOwotCQlfX3RhcmdldF9JT19BUElDX2lycShpcnEsIGRlc3QsIGNmZyk7Ci0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvYXBpY19sb2NrLCBmbGFncyk7Ci0JfQotCiAJaXJ0ZS52ZWN0b3IgPSBjZmctPnZlY3RvcjsKIAlpcnRlLmRlc3RfaWQgPSBJUlRFX0RFU1QoZGVzdCk7CiAKQEAgLTIzNzIsNzMgKzIzODIsMTIgQEAKIAljcHVtYXNrX2NvcHkoZGVzYy0+YWZmaW5pdHksIG1hc2spOwogfQogCi1zdGF0aWMgaW50IG1pZ3JhdGVfaXJxX3JlbWFwcGVkX2xldmVsX2Rlc2Moc3RydWN0IGlycV9kZXNjICpkZXNjKQotewotCWludCByZXQgPSAtMTsKLQlzdHJ1Y3QgaXJxX2NmZyAqY2ZnID0gZGVzYy0+Y2hpcF9kYXRhOwotCi0JbWFza19JT19BUElDX2lycV9kZXNjKGRlc2MpOwotCi0JaWYgKGlvX2FwaWNfbGV2ZWxfYWNrX3BlbmRpbmcoY2ZnKSkgewotCQkvKgotCQkgKiBJbnRlcnJ1cHQgaW4gcHJvZ3Jlc3MuIE1pZ3JhdGluZyBpcnEgbm93IHdpbGwgY2hhbmdlIHRoZQotCQkgKiB2ZWN0b3IgaW5mb3JtYXRpb24gaW4gdGhlIElPLUFQSUMgUlRFIGFuZCB0aGF0IHdpbGwgY29uZnVzZQotCQkgKiB0aGUgRU9JIGJyb2FkY2FzdCBwZXJmb3JtZWQgYnkgY3B1LgotCQkgKiBTbywgZGVsYXkgdGhlIGlycSBtaWdyYXRpb24gdG8gdGhlIG5leHQgaW5zdGFuY2UuCi0JCSAqLwotCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmlyX21pZ3JhdGlvbl93b3JrLCAxKTsKLQkJZ290byB1bm1hc2s7Ci0JfQotCi0JLyogZXZlcnRoaW5nIGlzIGNsZWFyLiB3ZSBoYXZlIHJpZ2h0IG9mIHdheSAqLwotCW1pZ3JhdGVfaW9hcGljX2lycV9kZXNjKGRlc2MsIGRlc2MtPnBlbmRpbmdfbWFzayk7Ci0KLQlyZXQgPSAwOwotCWRlc2MtPnN0YXR1cyAmPSB+SVJRX01PVkVfUEVORElORzsKLQljcHVtYXNrX2NsZWFyKGRlc2MtPnBlbmRpbmdfbWFzayk7Ci0KLXVubWFzazoKLQl1bm1hc2tfSU9fQVBJQ19pcnFfZGVzYyhkZXNjKTsKLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyB2b2lkIGlyX2lycV9taWdyYXRpb24oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXVuc2lnbmVkIGludCBpcnE7Ci0Jc3RydWN0IGlycV9kZXNjICpkZXNjOwotCi0JZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKSB7Ci0JCWlmIChkZXNjLT5zdGF0dXMgJiBJUlFfTU9WRV9QRU5ESU5HKSB7Ci0JCQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCi0JCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotCQkJaWYgKCFkZXNjLT5jaGlwLT5zZXRfYWZmaW5pdHkgfHwKLQkJCSAgICAhKGRlc2MtPnN0YXR1cyAmIElSUV9NT1ZFX1BFTkRJTkcpKSB7Ci0JCQkJZGVzYy0+c3RhdHVzICY9IH5JUlFfTU9WRV9QRU5ESU5HOwotCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJZGVzYy0+Y2hpcC0+c2V0X2FmZmluaXR5KGlycSwgZGVzYy0+cGVuZGluZ19tYXNrKTsKLQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKLQkJfQotCX0KLX0KLQogLyoKICAqIE1pZ3JhdGVzIHRoZSBJUlEgZGVzdGluYXRpb24gaW4gdGhlIHByb2Nlc3MgY29udGV4dC4KICAqLwogc3RhdGljIHZvaWQgc2V0X2lyX2lvYXBpY19hZmZpbml0eV9pcnFfZGVzYyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsCiAJCQkJCSAgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKIHsKLQlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX0xFVkVMKSB7Ci0JCWRlc2MtPnN0YXR1cyB8PSBJUlFfTU9WRV9QRU5ESU5HOwotCQljcHVtYXNrX2NvcHkoZGVzYy0+cGVuZGluZ19tYXNrLCBtYXNrKTsKLQkJbWlncmF0ZV9pcnFfcmVtYXBwZWRfbGV2ZWxfZGVzYyhkZXNjKTsKLQkJcmV0dXJuOwotCX0KLQogCW1pZ3JhdGVfaW9hcGljX2lycV9kZXNjKGRlc2MsIG1hc2spOwogfQogc3RhdGljIHZvaWQgc2V0X2lyX2lvYXBpY19hZmZpbml0eV9pcnEodW5zaWduZWQgaW50IGlycSwKQEAgLTI0NDgsNiArMjM5NywxMSBAQAogCiAJc2V0X2lyX2lvYXBpY19hZmZpbml0eV9pcnFfZGVzYyhkZXNjLCBtYXNrKTsKIH0KKyNlbHNlCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2lyX2lvYXBpY19hZmZpbml0eV9pcnFfZGVzYyhzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsCisJCQkJCQkgICBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKK3sKK30KICNlbmRpZgogCiBhc21saW5rYWdlIHZvaWQgc21wX2lycV9tb3ZlX2NsZWFudXBfaW50ZXJydXB0KHZvaWQpCkBAIC0yNDYxLDYgKzI0MTUsNyBAQAogCW1lID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwogCWZvciAodmVjdG9yID0gRklSU1RfRVhURVJOQUxfVkVDVE9SOyB2ZWN0b3IgPCBOUl9WRUNUT1JTOyB2ZWN0b3IrKykgewogCQl1bnNpZ25lZCBpbnQgaXJxOworCQl1bnNpZ25lZCBpbnQgaXJyOwogCQlzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2M7CiAJCXN0cnVjdCBpcnFfY2ZnICpjZmc7CiAJCWlycSA9IF9fZ2V0X2NwdV92YXIodmVjdG9yX2lycSlbdmVjdG9yXTsKQEAgLTI0ODAsNiArMjQzNSwxOCBAQAogCQlpZiAodmVjdG9yID09IGNmZy0+dmVjdG9yICYmIGNwdW1hc2tfdGVzdF9jcHUobWUsIGNmZy0+ZG9tYWluKSkKIAkJCWdvdG8gdW5sb2NrOwogCisJCWlyciA9IGFwaWNfcmVhZChBUElDX0lSUiArICh2ZWN0b3IgLyAzMiAqIDB4MTApKTsKKwkJLyoKKwkJICogQ2hlY2sgaWYgdGhlIHZlY3RvciB0aGF0IG5lZWRzIHRvIGJlIGNsZWFuZWR1cCBpcworCQkgKiByZWdpc3RlcmVkIGF0IHRoZSBjcHUncyBJUlIuIElmIHNvLCB0aGVuIHRoaXMgaXMgbm90CisJCSAqIHRoZSBiZXN0IHRpbWUgdG8gY2xlYW4gaXQgdXAuIExldHMgY2xlYW4gaXQgdXAgaW4gdGhlCisJCSAqIG5leHQgYXR0ZW1wdCBieSBzZW5kaW5nIGFub3RoZXIgSVJRX01PVkVfQ0xFQU5VUF9WRUNUT1IKKwkJICogdG8gbXlzZWxmLgorCQkgKi8KKwkJaWYgKGlyciAgJiAoMSA8PCAodmVjdG9yICUgMzIpKSkgeworCQkJYXBpYy0+c2VuZF9JUElfc2VsZihJUlFfTU9WRV9DTEVBTlVQX1ZFQ1RPUik7CisJCQlnb3RvIHVubG9jazsKKwkJfQogCQlfX2dldF9jcHVfdmFyKHZlY3Rvcl9pcnEpW3ZlY3Rvcl0gPSAtMTsKIAkJY2ZnLT5tb3ZlX2NsZWFudXBfY291bnQtLTsKIHVubG9jazoKQEAgLTI1MjksOSArMjQ5Niw0NCBAQAogI2VuZGlmCiAKICNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorc3RhdGljIHZvaWQgX19lb2lfaW9hcGljX2lycSh1bnNpZ25lZCBpbnQgaXJxLCBzdHJ1Y3QgaXJxX2NmZyAqY2ZnKQoreworCWludCBhcGljLCBwaW47CisJc3RydWN0IGlycV9waW5fbGlzdCAqZW50cnk7CisKKwllbnRyeSA9IGNmZy0+aXJxXzJfcGluOworCWZvciAoOzspIHsKKworCQlpZiAoIWVudHJ5KQorCQkJYnJlYWs7CisKKwkJYXBpYyA9IGVudHJ5LT5hcGljOworCQlwaW4gPSBlbnRyeS0+cGluOworCQlpb19hcGljX2VvaShhcGljLCBwaW4pOworCQllbnRyeSA9IGVudHJ5LT5uZXh0OworCX0KK30KKworc3RhdGljIHZvaWQKK2VvaV9pb2FwaWNfaXJxKHN0cnVjdCBpcnFfZGVzYyAqZGVzYykKK3sKKwlzdHJ1Y3QgaXJxX2NmZyAqY2ZnOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJdW5zaWduZWQgaW50IGlycTsKKworCWlycSA9IGRlc2MtPmlycTsKKwljZmcgPSBkZXNjLT5jaGlwX2RhdGE7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9hcGljX2xvY2ssIGZsYWdzKTsKKwlfX2VvaV9pb2FwaWNfaXJxKGlycSwgY2ZnKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb2FwaWNfbG9jaywgZmxhZ3MpOworfQorCiBzdGF0aWMgdm9pZCBhY2tfeDJhcGljX2xldmVsKHVuc2lnbmVkIGludCBpcnEpCiB7CisJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAlhY2tfeDJBUElDX2lycSgpOworCWVvaV9pb2FwaWNfaXJxKGRlc2MpOwogfQogCiBzdGF0aWMgdm9pZCBhY2tfeDJhcGljX2VkZ2UodW5zaWduZWQgaW50IGlycSkKQEAgLTI2NjIsMjAgKzI2NjQsMjAgQEAKIAkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCiB9OwogCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaXJfaW9hcGljX2NoaXAgX19yZWFkX21vc3RseSA9IHsKIAkubmFtZQkJPSAiSVItSU8tQVBJQyIsCiAJLnN0YXJ0dXAJPSBzdGFydHVwX2lvYXBpY19pcnEsCiAJLm1hc2sJCT0gbWFza19JT19BUElDX2lycSwKIAkudW5tYXNrCQk9IHVubWFza19JT19BUElDX2lycSwKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCS5hY2sJCT0gYWNrX3gyYXBpY19lZGdlLAogCS5lb2kJCT0gYWNrX3gyYXBpY19sZXZlbCwKICNpZmRlZiBDT05GSUdfU01QCiAJLnNldF9hZmZpbml0eQk9IHNldF9pcl9pb2FwaWNfYWZmaW5pdHlfaXJxLAogI2VuZGlmCisjZW5kaWYKIAkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCiB9OwotI2VuZGlmCiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X0lPX0FQSUNfdHJhcHModm9pZCkKIHsKQEAgLTI5MDEsMTAgKzI5MDMsOCBAQAogCSAqIDgyNTlBLgogCSAqLwogCWlmIChwaW4xID09IC0xKSB7Ci0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIAkJaWYgKGludHJfcmVtYXBwaW5nX2VuYWJsZWQpCiAJCQlwYW5pYygiQklPUyBidWc6IHRpbWVyIG5vdCBjb25uZWN0ZWQgdG8gSU8tQVBJQyIpOwotI2VuZGlmCiAJCXBpbjEgPSBwaW4yOwogCQlhcGljMSA9IGFwaWMyOwogCQlub19waW4xID0gMTsKQEAgLTI5NDAsMTAgKzI5NDAsOCBAQAogCQkJCWNsZWFyX0lPX0FQSUNfcGluKDAsIHBpbjEpOwogCQkJZ290byBvdXQ7CiAJCX0KLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCQlpZiAoaW50cl9yZW1hcHBpbmdfZW5hYmxlZCkKIAkJCXBhbmljKCJ0aW1lciBkb2Vzbid0IHdvcmsgdGhyb3VnaCBJbnRlcnJ1cHQtcmVtYXBwZWQgSU8tQVBJQyIpOwotI2VuZGlmCiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJCWNsZWFyX0lPX0FQSUNfcGluKGFwaWMxLCBwaW4xKTsKIAkJaWYgKCFub19waW4xKQpAQCAtMzIzNyw5ICszMjM1LDcgQEAKIAlpZiAoZGVzYykKIAkJZGVzYy0+Y2hpcF9kYXRhID0gY2ZnOwogCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIAlmcmVlX2lydGUoaXJxKTsKLSNlbmRpZgogCXNwaW5fbG9ja19pcnFzYXZlKCZ2ZWN0b3JfbG9jaywgZmxhZ3MpOwogCV9fY2xlYXJfaXJxX3ZlY3RvcihpcnEsIGNmZyk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmVjdG9yX2xvY2ssIGZsYWdzKTsKQEAgLTMyNjUsNyArMzI2MSw2IEBACiAKIAlkZXN0ID0gYXBpYy0+Y3B1X21hc2tfdG9fYXBpY2lkX2FuZChjZmctPmRvbWFpbiwgYXBpYy0+dGFyZ2V0X2NwdXMoKSk7CiAKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCWlmIChpcnFfcmVtYXBwZWQoaXJxKSkgewogCQlzdHJ1Y3QgaXJ0ZSBpcnRlOwogCQlpbnQgaXJfaW5kZXg7CkBAIC0zMjkxLDEwICszMjg2LDEzIEBACiAJCQkJICBNU0lfQUREUl9JUl9TSFYgfAogCQkJCSAgTVNJX0FERFJfSVJfSU5ERVgxKGlyX2luZGV4KSB8CiAJCQkJICBNU0lfQUREUl9JUl9JTkRFWDIoaXJfaW5kZXgpOwotCX0gZWxzZQotI2VuZGlmCi0JewotCQltc2ctPmFkZHJlc3NfaGkgPSBNU0lfQUREUl9CQVNFX0hJOworCX0gZWxzZSB7CisJCWlmICh4MmFwaWNfZW5hYmxlZCgpKQorCQkJbXNnLT5hZGRyZXNzX2hpID0gTVNJX0FERFJfQkFTRV9ISSB8CisJCQkJCSAgTVNJX0FERFJfRVhUX0RFU1RfSUQoZGVzdCk7CisJCWVsc2UKKwkJCW1zZy0+YWRkcmVzc19oaSA9IE1TSV9BRERSX0JBU0VfSEk7CisKIAkJbXNnLT5hZGRyZXNzX2xvID0KIAkJCU1TSV9BRERSX0JBU0VfTE8gfAogCQkJKChhcGljLT5pcnFfZGVzdF9tb2RlID09IDApID8KQEAgLTMzOTQsMTUgKzMzOTIsMTYgQEAKIAkucmV0cmlnZ2VyCT0gaW9hcGljX3JldHJpZ2dlcl9pcnEsCiB9OwogCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIHN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgbXNpX2lyX2NoaXAgPSB7CiAJLm5hbWUJCT0gIklSLVBDSS1NU0kiLAogCS51bm1hc2sJCT0gdW5tYXNrX21zaV9pcnEsCiAJLm1hc2sJCT0gbWFza19tc2lfaXJxLAorI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCiAJLmFjawkJPSBhY2tfeDJhcGljX2VkZ2UsCiAjaWZkZWYgQ09ORklHX1NNUAogCS5zZXRfYWZmaW5pdHkJPSBpcl9zZXRfbXNpX2lycV9hZmZpbml0eSwKICNlbmRpZgorI2VuZGlmCiAJLnJldHJpZ2dlcgk9IGlvYXBpY19yZXRyaWdnZXJfaXJxLAogfTsKIApAQCAtMzQzMiw3ICszNDMxLDYgQEAKIAl9CiAJcmV0dXJuIGluZGV4OwogfQotI2VuZGlmCiAKIHN0YXRpYyBpbnQgc2V0dXBfbXNpX2lycShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBzdHJ1Y3QgbXNpX2Rlc2MgKm1zaWRlc2MsIGludCBpcnEpCiB7CkBAIC0zNDQ2LDcgKzM0NDQsNiBAQAogCXNldF9pcnFfbXNpKGlycSwgbXNpZGVzYyk7CiAJd3JpdGVfbXNpX21zZyhpcnEsICZtc2cpOwogCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIAlpZiAoaXJxX3JlbWFwcGVkKGlycSkpIHsKIAkJc3RydWN0IGlycV9kZXNjICpkZXNjID0gaXJxX3RvX2Rlc2MoaXJxKTsKIAkJLyoKQEAgLTM0NTUsNyArMzQ1Miw2IEBACiAJCWRlc2MtPnN0YXR1cyB8PSBJUlFfTU9WRV9QQ05UWFQ7CiAJCXNldF9pcnFfY2hpcF9hbmRfaGFuZGxlcl9uYW1lKGlycSwgJm1zaV9pcl9jaGlwLCBoYW5kbGVfZWRnZV9pcnEsICJlZGdlIik7CiAJfSBlbHNlCi0jZW5kaWYKIAkJc2V0X2lycV9jaGlwX2FuZF9oYW5kbGVyX25hbWUoaXJxLCAmbXNpX2NoaXAsIGhhbmRsZV9lZGdlX2lycSwgImVkZ2UiKTsKIAogCWRldl9wcmludGsoS0VSTl9ERUJVRywgJmRldi0+ZGV2LCAiaXJxICVkIGZvciBNU0kvTVNJLVhcbiIsIGlycSk7CkBAIC0zNDY5LDExICszNDY1LDggQEAKIAlpbnQgcmV0LCBzdWJfaGFuZGxlOwogCXN0cnVjdCBtc2lfZGVzYyAqbXNpZGVzYzsKIAl1bnNpZ25lZCBpbnQgaXJxX3dhbnQ7Ci0KLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAotCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUgPSAwOworCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUgPSBOVUxMOwogCWludCBpbmRleCA9IDA7Ci0jZW5kaWYKIAogCWlycV93YW50ID0gbnJfaXJxc19nc2k7CiAJc3ViX2hhbmRsZSA9IDA7CkBAIC0zNDgyLDcgKzM0NzUsNiBAQAogCQlpZiAoaXJxID09IDApCiAJCQlyZXR1cm4gLTE7CiAJCWlycV93YW50ID0gaXJxICsgMTsKLSNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAogCQlpZiAoIWludHJfcmVtYXBwaW5nX2VuYWJsZWQpCiAJCQlnb3RvIG5vX2lyOwogCkBAIC0zNTEwLDcgKzM1MDIsNiBAQAogCQkJc2V0X2lydGVfaXJxKGlycSwgaW9tbXUsIGluZGV4LCBzdWJfaGFuZGxlKTsKIAkJfQogbm9faXI6Ci0jZW5kaWYKIAkJcmV0ID0gc2V0dXBfbXNpX2lycShkZXYsIG1zaWRlc2MsIGlycSk7CiAJCWlmIChyZXQgPCAwKQogCQkJZ290byBlcnJvcjsKQEAgLTM1MjgsNyArMzUxOSw3IEBACiAJZGVzdHJveV9pcnEoaXJxKTsKIH0KIAotI2lmZGVmIENPTkZJR19ETUFSCisjaWYgZGVmaW5lZCAoQ09ORklHX0RNQVIpIHx8IGRlZmluZWQgKENPTkZJR19JTlRSX1JFTUFQKQogI2lmZGVmIENPTkZJR19TTVAKIHN0YXRpYyB2b2lkIGRtYXJfbXNpX3NldF9hZmZpbml0eSh1bnNpZ25lZCBpbnQgaXJxLCBjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKIHsKQEAgLTM2MDksNyArMzYwMCw3IEBACiAKICNlbmRpZiAvKiBDT05GSUdfU01QICovCiAKLXN0cnVjdCBpcnFfY2hpcCBocGV0X21zaV90eXBlID0geworc3RhdGljIHN0cnVjdCBpcnFfY2hpcCBocGV0X21zaV90eXBlID0gewogCS5uYW1lID0gIkhQRVRfTVNJIiwKIAkudW5tYXNrID0gaHBldF9tc2lfdW5tYXNrLAogCS5tYXNrID0gaHBldF9tc2lfbWFzaywKQEAgLTQwNDUsMTEgKzQwMzYsOSBAQAogCQkJZWxzZQogCQkJCW1hc2sgPSBhcGljLT50YXJnZXRfY3B1cygpOwogCi0jaWZkZWYgQ09ORklHX0lOVFJfUkVNQVAKIAkJCWlmIChpbnRyX3JlbWFwcGluZ19lbmFibGVkKQogCQkJCXNldF9pcl9pb2FwaWNfYWZmaW5pdHlfaXJxX2Rlc2MoZGVzYywgbWFzayk7CiAJCQllbHNlCi0jZW5kaWYKIAkJCQlzZXRfaW9hcGljX2FmZmluaXR5X2lycV9kZXNjKGRlc2MsIG1hc2spOwogCQl9CiAKQEAgLTQxNDIsOSArNDEzMSwxMiBAQAogCXN0cnVjdCByZXNvdXJjZSAqciA9IGlvYXBpY19yZXNvdXJjZXM7CiAKIAlpZiAoIXIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSCi0JCSAgICAgICAiSU8gQVBJQyByZXNvdXJjZXMgY291bGQgYmUgbm90IGJlIGFsbG9jYXRlZC5cbiIpOwotCQlyZXR1cm4gLTE7CisJCWlmIChucl9pb2FwaWNzID4gMCkgeworCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJIklPIEFQSUMgcmVzb3VyY2VzIGNvdWxkbid0IGJlIGFsbG9jYXRlZC5cbiIpOworCQkJcmV0dXJuIC0xOworCQl9CisJCXJldHVybiAwOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBucl9pb2FwaWNzOyBpKyspIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy9wcm9iZV82NC5jCmluZGV4IDhkNzc0OGUuLjE3ODM2NTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9hcGljL3Byb2JlXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2FwaWMvcHJvYmVfNjQuYwpAQCAtNjgsNiArNjgsMTMgQEAKIAkJCWFwaWMgPSAmYXBpY19waHlzZmxhdDsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiU2V0dGluZyBBUElDIHJvdXRpbmcgdG8gJXNcbiIsIGFwaWMtPm5hbWUpOwogCX0KKworCS8qCisJICogTm93IHRoYXQgYXBpYyByb3V0aW5nIG1vZGVsIGlzIHNlbGVjdGVkLCBjb25maWd1cmUgdGhlCisJICogZmF1bHQgaGFuZGxpbmcgZm9yIGludHIgcmVtYXBwaW5nLgorCSAqLworCWlmIChpbnRyX3JlbWFwcGluZ19lbmFibGVkKQorCQllbmFibGVfZHJoZF9mYXVsdF9oYW5kbGluZygpOwogfQogCiAvKiBTYW1lIGZvciBib3RoIGZsYXQgYW5kIHBoeXNpY2FsLiAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX2NsdXN0ZXIuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY19jbHVzdGVyLmMKaW5kZXggOGZiODdiNi4uNGE5MDNlMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX2NsdXN0ZXIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfY2x1c3Rlci5jCkBAIC01Nyw2ICs1Nyw4IEBACiAJdW5zaWduZWQgbG9uZyBxdWVyeV9jcHU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXgyYXBpY193cm1zcl9mZW5jZSgpOworCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWZvcl9lYWNoX2NwdShxdWVyeV9jcHUsIG1hc2spIHsKIAkJX194MmFwaWNfc2VuZF9JUElfZGVzdCgKQEAgLTczLDYgKzc1LDggQEAKIAl1bnNpZ25lZCBsb25nIHF1ZXJ5X2NwdTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJeDJhcGljX3dybXNyX2ZlbmNlKCk7CisKIAlsb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJZm9yX2VhY2hfY3B1KHF1ZXJ5X2NwdSwgbWFzaykgewogCQlpZiAocXVlcnlfY3B1ID09IHRoaXNfY3B1KQpAQCAtOTAsNiArOTQsOCBAQAogCXVuc2lnbmVkIGxvbmcgcXVlcnlfY3B1OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwl4MmFwaWNfd3Jtc3JfZmVuY2UoKTsKKwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KHF1ZXJ5X2NwdSkgewogCQlpZiAocXVlcnlfY3B1ID09IHRoaXNfY3B1KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3BoeXMuYyBiL2FyY2gveDg2L2tlcm5lbC9hcGljL3gyYXBpY19waHlzLmMKaW5kZXggMjM2MjViOS4uYTI4NDM1OSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwaWMveDJhcGljX3BoeXMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvYXBpYy94MmFwaWNfcGh5cy5jCkBAIC01OCw2ICs1OCw4IEBACiAJdW5zaWduZWQgbG9uZyBxdWVyeV9jcHU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXgyYXBpY193cm1zcl9mZW5jZSgpOworCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWZvcl9lYWNoX2NwdShxdWVyeV9jcHUsIG1hc2spIHsKIAkJX194MmFwaWNfc2VuZF9JUElfZGVzdChwZXJfY3B1KHg4Nl9jcHVfdG9fYXBpY2lkLCBxdWVyeV9jcHUpLApAQCAtNzMsNiArNzUsOCBAQAogCXVuc2lnbmVkIGxvbmcgcXVlcnlfY3B1OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKKwl4MmFwaWNfd3Jtc3JfZmVuY2UoKTsKKwogCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKIAlmb3JfZWFjaF9jcHUocXVlcnlfY3B1LCBtYXNrKSB7CiAJCWlmIChxdWVyeV9jcHUgIT0gdGhpc19jcHUpCkBAIC04OSw2ICs5Myw4IEBACiAJdW5zaWduZWQgbG9uZyBxdWVyeV9jcHU7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXgyYXBpY193cm1zcl9mZW5jZSgpOworCiAJbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOwogCWZvcl9lYWNoX29ubGluZV9jcHUocXVlcnlfY3B1KSB7CiAJCWlmIChxdWVyeV9jcHUgPT0gdGhpc19jcHUpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvYXBtXzMyLmMKaW5kZXggMTAwMzNmZS4uYWM3NzgzYSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2FwbV8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9hcG1fMzIuYwpAQCAtMTE5MCw4ICsxMTkwLDEwIEBACiAJc3RydWN0IGFwbV91c2VyCSphczsKIAogCWRldmljZV9zdXNwZW5kKFBNU0dfU1VTUEVORCk7Ci0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwogCWRldmljZV9wb3dlcl9kb3duKFBNU0dfU1VTUEVORCk7CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCXN5c2Rldl9zdXNwZW5kKFBNU0dfU1VTUEVORCk7CiAKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CkBAIC0xMjA5LDkgKzEyMTEsMTIgQEAKIAlpZiAoZXJyICE9IEFQTV9TVUNDRVNTKQogCQlhcG1fZXJyb3IoInN1c3BlbmQiLCBlcnIpOwogCWVyciA9IChlcnIgPT0gQVBNX1NVQ0NFU1MpID8gMCA6IC1FSU87CisKIAlzeXNkZXZfcmVzdW1lKCk7Ci0JZGV2aWNlX3Bvd2VyX3VwKFBNU0dfUkVTVU1FKTsKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKwlkZXZpY2VfcG93ZXJfdXAoUE1TR19SRVNVTUUpOworCiAJZGV2aWNlX3Jlc3VtZShQTVNHX1JFU1VNRSk7CiAJcXVldWVfZXZlbnQoQVBNX05PUk1BTF9SRVNVTUUsIE5VTEwpOwogCXNwaW5fbG9jaygmdXNlcl9saXN0X2xvY2spOwpAQCAtMTIyOCw4ICsxMjMzLDkgQEAKIHsKIAlpbnQgZXJyOwogCi0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAlkZXZpY2VfcG93ZXJfZG93bihQTVNHX1NVU1BFTkQpOworCisJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAlzeXNkZXZfc3VzcGVuZChQTVNHX1NVU1BFTkQpOwogCWxvY2FsX2lycV9lbmFibGUoKTsKIApAQCAtMTIzOSw4ICsxMjQ1LDkgQEAKIAogCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAJc3lzZGV2X3Jlc3VtZSgpOwotCWRldmljZV9wb3dlcl91cChQTVNHX1JFU1VNRSk7CiAJbG9jYWxfaXJxX2VuYWJsZSgpOworCisJZGV2aWNlX3Bvd2VyX3VwKFBNU0dfUkVTVU1FKTsKIH0KIAogc3RhdGljIGFwbV9ldmVudF90IGdldF9ldmVudCh2b2lkKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NoZWNrLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY2hlY2suYwppbmRleCAyYWMwYWI3Li5mYzk5OWU2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY2hlY2suYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY2hlY2suYwpAQCAtODMsMTUgKzgzLDE1IEBACiAJCXU2NCBzaXplOwogCQlhZGRyID0gZmluZF9lODIwX2FyZWFfc2l6ZShhZGRyLCAmc2l6ZSwgUEFHRV9TSVpFKTsKIAotCQlpZiAoYWRkciA9PSAwKQorCQlpZiAoIShhZGRyICsgMSkpCisJCQlicmVhazsKKworCQlpZiAoYWRkciA+PSBjb3JydXB0aW9uX2NoZWNrX3NpemUpCiAJCQlicmVhazsKIAogCQlpZiAoKGFkZHIgKyBzaXplKSA+IGNvcnJ1cHRpb25fY2hlY2tfc2l6ZSkKIAkJCXNpemUgPSBjb3JydXB0aW9uX2NoZWNrX3NpemUgLSBhZGRyOwogCi0JCWlmIChzaXplID09IDApCi0JCQlicmVhazsKLQogCQllODIwX3VwZGF0ZV9yYW5nZShhZGRyLCBzaXplLCBFODIwX1JBTSwgRTgyMF9SRVNFUlZFRCk7CiAJCXNjYW5fYXJlYXNbbnVtX3NjYW5fYXJlYXNdLmFkZHIgPSBhZGRyOwogCQlzY2FuX2FyZWFzW251bV9zY2FuX2FyZWFzXS5zaXplID0gc2l6ZTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L01ha2VmaWxlCmluZGV4IDgyZGI3ZjQuLjRlMjQyZjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvTWFrZWZpbGUKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9NYWtlZmlsZQpAQCAtMTQsMTEgKzE0LDEyIEBACiBvYmotJChDT05GSUdfWDg2XzMyKQkrPSBidWdzLm8gY21weGNoZy5vCiBvYmotJChDT05GSUdfWDg2XzY0KQkrPSBidWdzXzY0Lm8KIAorb2JqLSQoQ09ORklHX1g4Nl9DUFVfREVCVUcpCQkrPSBjcHVfZGVidWcubworCiBvYmotJChDT05GSUdfQ1BVX1NVUF9JTlRFTCkJCSs9IGludGVsLm8KIG9iai0kKENPTkZJR19DUFVfU1VQX0FNRCkJCSs9IGFtZC5vCiBvYmotJChDT05GSUdfQ1BVX1NVUF9DWVJJWF8zMikJCSs9IGN5cml4Lm8KLW9iai0kKENPTkZJR19DUFVfU1VQX0NFTlRBVVJfMzIpCSs9IGNlbnRhdXIubwotb2JqLSQoQ09ORklHX0NQVV9TVVBfQ0VOVEFVUl82NCkJKz0gY2VudGF1cl82NC5vCitvYmotJChDT05GSUdfQ1BVX1NVUF9DRU5UQVVSKQkJKz0gY2VudGF1ci5vCiBvYmotJChDT05GSUdfQ1BVX1NVUF9UUkFOU01FVEFfMzIpCSs9IHRyYW5zbWV0YS5vCiBvYmotJChDT05GSUdfQ1BVX1NVUF9VTUNfMzIpCQkrPSB1bWMubwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FkZG9uX2NwdWlkX2ZlYXR1cmVzLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FkZG9uX2NwdWlkX2ZlYXR1cmVzLmMKaW5kZXggNjg4MmE3My4uODIyMGFlNiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9hZGRvbl9jcHVpZF9mZWF0dXJlcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYWRkb25fY3B1aWRfZmVhdHVyZXMuYwpAQCAtMjksNyArMjksNyBAQAogCXUzMiByZWdzWzRdOwogCWNvbnN0IHN0cnVjdCBjcHVpZF9iaXQgKmNiOwogCi0Jc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVpZF9iaXQgY3B1aWRfYml0c1tdID0geworCXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1aWRfYml0IF9fY3B1aW5pdGNvbnN0IGNwdWlkX2JpdHNbXSA9IHsKIAkJeyBYODZfRkVBVFVSRV9JREEsIENSX0VBWCwgMSwgMHgwMDAwMDAwNiB9LAogCQl7IDAsIDAsIDAsIDAgfQogCX07CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9hbWQuYwppbmRleCAyNTQyM2E1Li43ZTRhNDU5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2FtZC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvYW1kLmMKQEAgLTUsNiArNSw3IEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL2NwdS5oPgogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogIyBpbmNsdWRlIDxhc20vbnVtYV82NC5oPgpAQCAtMTQxLDYgKzE0Miw1NSBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgX19jcHVpbml0IGFtZF9rN19zbXBfY2hlY2soc3RydWN0IGNwdWluZm9feDg2ICpjKQoreworI2lmZGVmIENPTkZJR19TTVAKKwkvKiBjYWxsaW5nIGlzIGZyb20gaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdSgpID8gKi8KKwlpZiAoYy0+Y3B1X2luZGV4ID09IGJvb3RfY3B1X2lkKQorCQlyZXR1cm47CisKKwkvKgorCSAqIENlcnRhaW4gQXRobG9ucyBtaWdodCB3b3JrIChmb3IgdmFyaW91cyB2YWx1ZXMgb2YgJ3dvcmsnKSBpbiBTTVAKKwkgKiBidXQgdGhleSBhcmUgbm90IGNlcnRpZmllZCBhcyBNUCBjYXBhYmxlLgorCSAqLworCS8qIEF0aGxvbiA2NjAvNjYxIGlzIHZhbGlkLiAqLworCWlmICgoYy0+eDg2X21vZGVsID09IDYpICYmICgoYy0+eDg2X21hc2sgPT0gMCkgfHwKKwkgICAgKGMtPng4Nl9tYXNrID09IDEpKSkKKwkJZ290byB2YWxpZF9rNzsKKworCS8qIER1cm9uIDY3MCBpcyB2YWxpZCAqLworCWlmICgoYy0+eDg2X21vZGVsID09IDcpICYmIChjLT54ODZfbWFzayA9PSAwKSkKKwkJZ290byB2YWxpZF9rNzsKKworCS8qCisJICogQXRobG9uIDY2MiwgRHVyb24gNjcxLCBhbmQgQXRobG9uID5tb2RlbCA3IGhhdmUgY2FwYWJpbGl0eQorCSAqIGJpdC4gSXQncyB3b3J0aCBub3RpbmcgdGhhdCB0aGUgQTUgc3RlcHBpbmcgKDY2Mikgb2Ygc29tZQorCSAqIEF0aGxvbiBYUCdzIGhhdmUgdGhlIE1QIGJpdCBzZXQuCisJICogU2VlIGh0dHA6Ly93d3cuaGVpc2UuZGUvbmV3c3RpY2tlci9kYXRhL2pvdy0xOC4xMC4wMS0wMDAgZm9yCisJICogbW9yZS4KKwkgKi8KKwlpZiAoKChjLT54ODZfbW9kZWwgPT0gNikgJiYgKGMtPng4Nl9tYXNrID49IDIpKSB8fAorCSAgICAoKGMtPng4Nl9tb2RlbCA9PSA3KSAmJiAoYy0+eDg2X21hc2sgPj0gMSkpIHx8CisJICAgICAoYy0+eDg2X21vZGVsID4gNykpCisJCWlmIChjcHVfaGFzX21wKQorCQkJZ290byB2YWxpZF9rNzsKKworCS8qIElmIHdlIGdldCBoZXJlLCBub3QgYSBjZXJ0aWZpZWQgU01QIGNhcGFibGUgQU1EIHN5c3RlbS4gKi8KKworCS8qCisJICogRG9uJ3QgdGFpbnQgaWYgd2UgYXJlIHJ1bm5pbmcgU01QIGtlcm5lbCBvbiBhIHNpbmdsZSBub24tTVAKKwkgKiBhcHByb3ZlZCBBdGhsb24KKwkgKi8KKwlXQVJOX09OQ0UoMSwgIldBUk5JTkc6IFRoaXMgY29tYmluYXRpb24gb2YgQU1EIgorCQkicHJvY2Vzc29ycyBpcyBub3Qgc3VpdGFibGUgZm9yIFNNUC5cbiIpOworCWlmICghdGVzdF90YWludChUQUlOVF9VTlNBRkVfU01QKSkKKwkJYWRkX3RhaW50KFRBSU5UX1VOU0FGRV9TTVApOworCit2YWxpZF9rNzoKKwk7CisjZW5kaWYKK30KKwogc3RhdGljIHZvaWQgX19jcHVpbml0IGluaXRfYW1kX2s3KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKIAl1MzIgbCwgaDsKQEAgLTE3NSw2ICsyMjUsOCBAQAogCX0KIAogCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0s3KTsKKworCWFtZF9rN19zbXBfY2hlY2soYyk7CiB9CiAjZW5kaWYKIApAQCAtNDUwLDcgKzUwMiw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBjcHVfZGV2IGFtZF9jcHVfZGV2IF9fY3B1aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNwdV9kZXYgX19jcHVpbml0Y29uc3QgYW1kX2NwdV9kZXYgPSB7CiAJLmNfdmVuZG9yCT0gIkFNRCIsCiAJLmNfaWRlbnQJPSB7ICJBdXRoZW50aWNBTUQiIH0sCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jZW50YXVyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NlbnRhdXIuYwppbmRleCA4OWJmZGQ5Li5jOTVlODMxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NlbnRhdXIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NlbnRhdXIuYwpAQCAtMSwxMSArMSwxMSBAQAorI2luY2x1ZGUgPGxpbnV4L2JpdG9wcy5oPgogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9iaXRvcHMuaD4KIAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vbXNyLmg+CiAjaW5jbHVkZSA8YXNtL2U4MjAuaD4KICNpbmNsdWRlIDxhc20vbXRyci5oPgorI2luY2x1ZGUgPGFzbS9tc3IuaD4KIAogI2luY2x1ZGUgImNwdS5oIgogCkBAIC0yNzYsNyArMjc2LDcgQEAKIAkJICovCiAJCWMtPng4Nl9jYXBhYmlsaXR5WzVdID0gY3B1aWRfZWR4KDB4QzAwMDAwMDEpOwogCX0KLQorI2lmZGVmIENPTkZJR19YODZfMzIKIAkvKiBDeXJpeCBJSUkgZmFtaWx5IG5lZWRzIENYOCAmIFBHRSBleHBsaWNpdGx5IGVuYWJsZWQuICovCiAJaWYgKGMtPng4Nl9tb2RlbCA+PSA2ICYmIGMtPng4Nl9tb2RlbCA8PSA5KSB7CiAJCXJkbXNyKE1TUl9WSUFfRkNSLCBsbywgaGkpOwpAQCAtMjg4LDYgKzI4OCwxMSBAQAogCS8qIEJlZm9yZSBOZWhlbWlhaCwgdGhlIEMzJ3MgaGFkIDNkTk9XISAqLwogCWlmIChjLT54ODZfbW9kZWwgPj0gNiAmJiBjLT54ODZfbW9kZWwgPCA5KQogCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV8zRE5PVyk7CisjZW5kaWYKKwlpZiAoYy0+eDg2ID09IDB4NiAmJiBjLT54ODZfbW9kZWwgPj0gMHhmKSB7CisJCWMtPng4Nl9jYWNoZV9hbGlnbm1lbnQgPSBjLT54ODZfY2xmbHVzaF9zaXplICogMjsKKwkJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfUkVQX0dPT0QpOworCX0KIAogCWRpc3BsYXlfY2FjaGVpbmZvKGMpOwogfQpAQCAtMzE2LDE2ICszMjEsMjUgQEAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBlYXJseV9pbml0X2NlbnRhdXIoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewogCXN3aXRjaCAoYy0+eDg2KSB7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgogCWNhc2UgNToKIAkJLyogRW11bGF0ZSBNVFJScyB1c2luZyBDZW50YXVyJ3MgTUNSLiAqLwogCQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9DRU5UQVVSX01DUik7CiAJCWJyZWFrOworI2VuZGlmCisJY2FzZSA2OgorCQlpZiAoYy0+eDg2X21vZGVsID49IDB4ZikKKwkJCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQyk7CisJCWJyZWFrOwogCX0KKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfU1lTRU5URVIzMik7CisjZW5kaWYKIH0KIAogc3RhdGljIHZvaWQgX19jcHVpbml0IGluaXRfY2VudGF1cihzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7Ci0KKyNpZmRlZiBDT05GSUdfWDg2XzMyCiAJY2hhciAqbmFtZTsKIAl1MzIgIGZjcl9zZXQgPSAwOwogCXUzMiAgZmNyX2NsciA9IDA7CkBAIC0zMzcsOCArMzUxLDEwIEBACiAJICogM0ROb3cgaXMgSURkIGJ5IGJpdCAzMSBpbiBleHRlbmRlZCBDUFVJRCAoMSozMiszMSkgYW55d2F5CiAJICovCiAJY2xlYXJfY3B1X2NhcChjLCAwKjMyKzMxKTsKLQorI2VuZGlmCisJZWFybHlfaW5pdF9jZW50YXVyKGMpOwogCXN3aXRjaCAoYy0+eDg2KSB7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgogCWNhc2UgNToKIAkJc3dpdGNoIChjLT54ODZfbW9kZWwpIHsKIAkJY2FzZSA0OgpAQCAtNDQyLDE2ICs0NTgsMjAgQEAKIAkJfQogCQlzcHJpbnRmKGMtPng4Nl9tb2RlbF9pZCwgIldpbkNoaXAgJXMiLCBuYW1lKTsKIAkJYnJlYWs7Ci0KKyNlbmRpZgogCWNhc2UgNjoKIAkJaW5pdF9jMyhjKTsKIAkJYnJlYWs7CiAJfQorI2lmZGVmIENPTkZJR19YODZfNjQKKwlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9MRkVOQ0VfUkRUU0MpOworI2VuZGlmCiB9CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgX19jcHVpbml0CiBjZW50YXVyX3NpemVfY2FjaGUoc3RydWN0IGNwdWluZm9feDg2ICpjLCB1bnNpZ25lZCBpbnQgc2l6ZSkKIHsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCiAJLyogVklBIEMzIENQVXMgKDY3MC02OEYpIG5lZWQgZnVydGhlciBzaGlmdGluZy4gKi8KIAlpZiAoKGMtPng4NiA9PSA2KSAmJiAoKGMtPng4Nl9tb2RlbCA9PSA3KSB8fCAoYy0+eDg2X21vZGVsID09IDgpKSkKIAkJc2l6ZSA+Pj0gODsKQEAgLTQ2NCwxMSArNDg0LDExIEBACiAJaWYgKChjLT54ODYgPT0gNikgJiYgKGMtPng4Nl9tb2RlbCA9PSA5KSAmJgogCQkJCShjLT54ODZfbWFzayA9PSAxKSAmJiAoc2l6ZSA9PSA2NSkpCiAJCXNpemUgLT0gMTsKLQorI2VuZGlmCiAJcmV0dXJuIHNpemU7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3B1X2RldiBjZW50YXVyX2NwdV9kZXYgX19jcHVpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1X2RldiBfX2NwdWluaXRjb25zdCBjZW50YXVyX2NwdV9kZXYgPSB7CiAJLmNfdmVuZG9yCT0gIkNlbnRhdXIiLAogCS5jX2lkZW50CT0geyAiQ2VudGF1ckhhdWxzIiB9LAogCS5jX2Vhcmx5X2luaXQJPSBlYXJseV9pbml0X2NlbnRhdXIsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NlbnRhdXJfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY2VudGF1cl82NC5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhMTYyNWY1Li4wMDAwMDAwCi0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY2VudGF1cl82NC5jCisrKyAvZGV2L251bGwKQEAgLTEsMzcgKzAsMCBAQAotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KLQotI2luY2x1ZGUgPGFzbS9jcHVmZWF0dXJlLmg+Ci0jaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgotCi0jaW5jbHVkZSAiY3B1LmgiCi0KLXN0YXRpYyB2b2lkIF9fY3B1aW5pdCBlYXJseV9pbml0X2NlbnRhdXIoc3RydWN0IGNwdWluZm9feDg2ICpjKQotewotCWlmIChjLT54ODYgPT0gMHg2ICYmIGMtPng4Nl9tb2RlbCA+PSAweGYpCi0JCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX0NPTlNUQU5UX1RTQyk7Ci0KLQlzZXRfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9TWVNFTlRFUjMyKTsKLX0KLQotc3RhdGljIHZvaWQgX19jcHVpbml0IGluaXRfY2VudGF1cihzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCi17Ci0JZWFybHlfaW5pdF9jZW50YXVyKGMpOwotCi0JaWYgKGMtPng4NiA9PSAweDYgJiYgYy0+eDg2X21vZGVsID49IDB4ZikgewotCQljLT54ODZfY2FjaGVfYWxpZ25tZW50ID0gYy0+eDg2X2NsZmx1c2hfc2l6ZSAqIDI7Ci0JCXNldF9jcHVfY2FwKGMsIFg4Nl9GRUFUVVJFX1JFUF9HT09EKTsKLQl9Ci0Jc2V0X2NwdV9jYXAoYywgWDg2X0ZFQVRVUkVfTEZFTkNFX1JEVFNDKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjcHVfZGV2IGNlbnRhdXJfY3B1X2RldiBfX2NwdWluaXRkYXRhID0gewotCS5jX3ZlbmRvcgk9ICJDZW50YXVyIiwKLQkuY19pZGVudAk9IHsgIkNlbnRhdXJIYXVscyIgfSwKLQkuY19lYXJseV9pbml0CT0gZWFybHlfaW5pdF9jZW50YXVyLAotCS5jX2luaXQJCT0gaW5pdF9jZW50YXVyLAotCS5jX3g4Nl92ZW5kb3IJPSBYODZfVkVORE9SX0NFTlRBVVIsCi19OwotCi1jcHVfZGV2X3JlZ2lzdGVyKGNlbnRhdXJfY3B1X2Rldik7Ci0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NvbW1vbi5jCmluZGV4IDgyNmQ1YzguLmUyOTYyY2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvY29tbW9uLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9jb21tb24uYwpAQCAtMSw1MiArMSw1MiBAQAotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2Jvb3RtZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+CiAjaW5jbHVkZSA8bGludXgvYml0b3BzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgva2dkYi5oPgotI2luY2x1ZGUgPGxpbnV4L3RvcG9sb2d5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KLSNpbmNsdWRlIDxhc20vaTM4Ny5oPgotI2luY2x1ZGUgPGFzbS9tc3IuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vbGlua2FnZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgva2dkYi5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisKKyNpbmNsdWRlIDxhc20vc3RhY2twcm90ZWN0b3IuaD4KICNpbmNsdWRlIDxhc20vbW11X2NvbnRleHQuaD4KLSNpbmNsdWRlIDxhc20vbXRyci5oPgotI2luY2x1ZGUgPGFzbS9tY2UuaD4KLSNpbmNsdWRlIDxhc20vcGF0Lmg+Ci0jaW5jbHVkZSA8YXNtL2FzbS5oPgotI2luY2x1ZGUgPGFzbS9udW1hLmg+Ci0jaW5jbHVkZSA8YXNtL3NtcC5oPgotI2luY2x1ZGUgPGFzbS9jcHUuaD4KKyNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgorI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vdG9wb2xvZ3kuaD4KICNpbmNsdWRlIDxhc20vY3B1bWFzay5oPgorI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CisjaW5jbHVkZSA8YXNtL2F0b21pYy5oPgorI2luY2x1ZGUgPGFzbS9wcm90by5oPgorI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+CisjaW5jbHVkZSA8YXNtL2Rlc2MuaD4KKyNpbmNsdWRlIDxhc20vaTM4Ny5oPgorI2luY2x1ZGUgPGFzbS9tdHJyLmg+CisjaW5jbHVkZSA8YXNtL251bWEuaD4KKyNpbmNsdWRlIDxhc20vYXNtLmg+CisjaW5jbHVkZSA8YXNtL2NwdS5oPgorI2luY2x1ZGUgPGFzbS9tY2UuaD4KKyNpbmNsdWRlIDxhc20vbXNyLmg+CisjaW5jbHVkZSA8YXNtL3BhdC5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KIAogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwogI2luY2x1ZGUgPGFzbS91di91di5oPgogI2VuZGlmCiAKLSNpbmNsdWRlIDxhc20vcGd0YWJsZS5oPgotI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KLSNpbmNsdWRlIDxhc20vZGVzYy5oPgotI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KLSNpbmNsdWRlIDxhc20vcHJvdG8uaD4KLSNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KLSNpbmNsdWRlIDxhc20vc2V0dXAuaD4KLSNpbmNsdWRlIDxhc20vaHlwZXJ2aXNvci5oPgotI2luY2x1ZGUgPGFzbS9zdGFja3Byb3RlY3Rvci5oPgotCiAjaW5jbHVkZSAiY3B1LmgiCiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAKIC8qIGFsbCBvZiB0aGVzZSBtYXNrcyBhcmUgaW5pdGlhbGl6ZWQgaW4gc2V0dXBfY3B1X2xvY2FsX21hc2tzKCkgKi8KLWNwdW1hc2tfdmFyX3QgY3B1X2NhbGxpbl9tYXNrOwotY3B1bWFza192YXJfdCBjcHVfY2FsbG91dF9tYXNrOwogY3B1bWFza192YXJfdCBjcHVfaW5pdGlhbGl6ZWRfbWFzazsKK2NwdW1hc2tfdmFyX3QgY3B1X2NhbGxvdXRfbWFzazsKK2NwdW1hc2tfdmFyX3QgY3B1X2NhbGxpbl9tYXNrOwogCiAvKiByZXByZXNlbnRpbmcgY3B1cyBmb3Igd2hpY2ggc2libGluZyBtYXBzIGNhbiBiZSBjb21wdXRlZCAqLwogY3B1bWFza192YXJfdCBjcHVfc2libGluZ19zZXR1cF9tYXNrOwpAQCAtNjIsMTUgKzYyLDE1IEBACiAKICNlbHNlIC8qIENPTkZJR19YODZfMzIgKi8KIAotY3B1bWFza190IGNwdV9jYWxsaW5fbWFwOworY3B1bWFza190IGNwdV9zaWJsaW5nX3NldHVwX21hcDsKIGNwdW1hc2tfdCBjcHVfY2FsbG91dF9tYXA7CiBjcHVtYXNrX3QgY3B1X2luaXRpYWxpemVkOwotY3B1bWFza190IGNwdV9zaWJsaW5nX3NldHVwX21hcDsKK2NwdW1hc2tfdCBjcHVfY2FsbGluX21hcDsKIAogI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KIAogCi1zdGF0aWMgc3RydWN0IGNwdV9kZXYgKnRoaXNfY3B1IF9fY3B1aW5pdGRhdGE7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNwdV9kZXYgKnRoaXNfY3B1IF9fY3B1aW5pdGRhdGE7CiAKIERFRklORV9QRVJfQ1BVX1BBR0VfQUxJR05FRChzdHJ1Y3QgZ2R0X3BhZ2UsIGdkdF9wYWdlKSA9IHsgLmdkdCA9IHsKICNpZmRlZiBDT05GSUdfWDg2XzY0CkBAIC03OSw0OCArNzksNDggQEAKIAkgKiBJUkVUIHdpbGwgY2hlY2sgdGhlIHNlZ21lbnQgdHlwZXMgIGtrZWlsIDIwMDAvMTAvMjgKIAkgKiBBbHNvIHN5c3JldCBtYW5kYXRlcyBhIHNwZWNpYWwgR0RUIGxheW91dAogCSAqCi0JICogVGhlIFRMUyBkZXNjcmlwdG9ycyBhcmUgY3VycmVudGx5IGF0IGEgZGlmZmVyZW50IHBsYWNlIGNvbXBhcmVkIHRvIGkzODYuCisJICogVExTIGRlc2NyaXB0b3JzIGFyZSBjdXJyZW50bHkgYXQgYSBkaWZmZXJlbnQgcGxhY2UgY29tcGFyZWQgdG8gaTM4Ni4KIAkgKiBIb3BlZnVsbHkgbm9ib2R5IGV4cGVjdHMgdGhlbSBhdCBhIGZpeGVkIHBsYWNlIChXaW5lPykKIAkgKi8KLQlbR0RUX0VOVFJZX0tFUk5FTDMyX0NTXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZjliMDAgfSB9IH0sCi0JW0dEVF9FTlRSWV9LRVJORUxfQ1NdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGFmOWIwMCB9IH0gfSwKLQlbR0RUX0VOVFJZX0tFUk5FTF9EU10gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2Y5MzAwIH0gfSB9LAotCVtHRFRfRU5UUllfREVGQVVMVF9VU0VSMzJfQ1NdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmZmIwMCB9IH0gfSwKLQlbR0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9EU10gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2ZmMzAwIH0gfSB9LAotCVtHRFRfRU5UUllfREVGQVVMVF9VU0VSX0NTXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBhZmZiMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9LRVJORUwzMl9DU10JCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmOWIwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX0tFUk5FTF9DU10JCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGFmOWIwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX0tFUk5FTF9EU10JCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmOTMwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX0RFRkFVTFRfVVNFUjMyX0NTXQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZmZiMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9ERUZBVUxUX1VTRVJfRFNdCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmZjMwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9DU10JPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwYWZmYjAwIH0gfSB9LAogI2Vsc2UKLQlbR0RUX0VOVFJZX0tFUk5FTF9DU10gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2Y5YTAwIH0gfSB9LAotCVtHRFRfRU5UUllfS0VSTkVMX0RTXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZjkyMDAgfSB9IH0sCi0JW0dEVF9FTlRSWV9ERUZBVUxUX1VTRVJfQ1NdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmZmEwMCB9IH0gfSwKLQlbR0RUX0VOVFJZX0RFRkFVTFRfVVNFUl9EU10gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2ZmMjAwIH0gfSB9LAorCVtHRFRfRU5UUllfS0VSTkVMX0NTXQkJPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2Y5YTAwIH0gfSB9LAorCVtHRFRfRU5UUllfS0VSTkVMX0RTXQkJPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwY2Y5MjAwIH0gfSB9LAorCVtHRFRfRU5UUllfREVGQVVMVF9VU0VSX0NTXQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZmZhMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9ERUZBVUxUX1VTRVJfRFNdCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMGNmZjIwMCB9IH0gfSwKIAkvKgogCSAqIFNlZ21lbnRzIHVzZWQgZm9yIGNhbGxpbmcgUG5QIEJJT1MgaGF2ZSBieXRlIGdyYW51bGFyaXR5LgogCSAqIFRoZXkgY29kZSBzZWdtZW50cyBhbmQgZGF0YSBzZWdtZW50cyBoYXZlIGZpeGVkIDY0ayBsaW1pdHMsCiAJICogdGhlIHRyYW5zZmVyIHNlZ21lbnQgc2l6ZXMgYXJlIHNldCBhdCBydW4gdGltZS4KIAkgKi8KIAkvKiAzMi1iaXQgY29kZSAqLwotCVtHRFRfRU5UUllfUE5QQklPU19DUzMyXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDA0MDlhMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9QTlBCSU9TX0NTMzJdCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMDQwOWEwMCB9IH0gfSwKIAkvKiAxNi1iaXQgY29kZSAqLwotCVtHRFRfRU5UUllfUE5QQklPU19DUzE2XSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDAwMDlhMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9QTlBCSU9TX0NTMTZdCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMDAwOWEwMCB9IH0gfSwKIAkvKiAxNi1iaXQgZGF0YSAqLwotCVtHRFRfRU5UUllfUE5QQklPU19EU10gPSB7IHsgeyAweDAwMDBmZmZmLCAweDAwMDA5MjAwIH0gfSB9LAorCVtHRFRfRU5UUllfUE5QQklPU19EU10JCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMDAwOTIwMCB9IH0gfSwKIAkvKiAxNi1iaXQgZGF0YSAqLwotCVtHRFRfRU5UUllfUE5QQklPU19UUzFdID0geyB7IHsgMHgwMDAwMDAwMCwgMHgwMDAwOTIwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX1BOUEJJT1NfVFMxXQkJPSB7IHsgeyAweDAwMDAwMDAwLCAweDAwMDA5MjAwIH0gfSB9LAogCS8qIDE2LWJpdCBkYXRhICovCi0JW0dEVF9FTlRSWV9QTlBCSU9TX1RTMl0gPSB7IHsgeyAweDAwMDAwMDAwLCAweDAwMDA5MjAwIH0gfSB9LAorCVtHRFRfRU5UUllfUE5QQklPU19UUzJdCQk9IHsgeyB7IDB4MDAwMDAwMDAsIDB4MDAwMDkyMDAgfSB9IH0sCiAJLyoKIAkgKiBUaGUgQVBNIHNlZ21lbnRzIGhhdmUgYnl0ZSBncmFudWxhcml0eSBhbmQgdGhlaXIgYmFzZXMKIAkgKiBhcmUgc2V0IGF0IHJ1biB0aW1lLiAgQWxsIGhhdmUgNjRrIGxpbWl0cy4KIAkgKi8KIAkvKiAzMi1iaXQgY29kZSAqLwotCVtHRFRfRU5UUllfQVBNQklPU19CQVNFXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDA0MDlhMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9BUE1CSU9TX0JBU0VdCT0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMDQwOWEwMCB9IH0gfSwKIAkvKiAxNi1iaXQgY29kZSAqLwotCVtHRFRfRU5UUllfQVBNQklPU19CQVNFKzFdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMDAwOWEwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX0FQTUJJT1NfQkFTRSsxXQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDAwMDlhMDAgfSB9IH0sCiAJLyogZGF0YSAqLwotCVtHRFRfRU5UUllfQVBNQklPU19CQVNFKzJdID0geyB7IHsgMHgwMDAwZmZmZiwgMHgwMDQwOTIwMCB9IH0gfSwKKwlbR0RUX0VOVFJZX0FQTUJJT1NfQkFTRSsyXQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDA0MDkyMDAgfSB9IH0sCiAKLQlbR0RUX0VOVFJZX0VTUEZJWF9TU10gPSB7IHsgeyAweDAwMDAwMDAwLCAweDAwYzA5MjAwIH0gfSB9LAotCVtHRFRfRU5UUllfUEVSQ1BVXSA9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZjkyMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9FU1BGSVhfU1NdCQk9IHsgeyB7IDB4MDAwMDAwMDAsIDB4MDBjMDkyMDAgfSB9IH0sCisJW0dEVF9FTlRSWV9QRVJDUFVdCQk9IHsgeyB7IDB4MDAwMGZmZmYsIDB4MDBjZjkyMDAgfSB9IH0sCiAJR0RUX1NUQUNLX0NBTkFSWV9JTklUCiAjZW5kaWYKIH0gfTsKQEAgLTE2NCwxNiArMTY0LDE3IEBACiAJICogdGhlIENQVUlELiBBZGQgInZvbGF0aWxlIiB0byBub3QgYWxsb3cgZ2NjIHRvCiAJICogb3B0aW1pemUgdGhlIHN1YnNlcXVlbnQgY2FsbHMgdG8gdGhpcyBmdW5jdGlvbi4KIAkgKi8KLQlhc20gdm9sYXRpbGUgKCJwdXNoZmxcblx0IgotCQkgICAgICAicHVzaGZsXG5cdCIKLQkJICAgICAgInBvcGwgJTBcblx0IgotCQkgICAgICAibW92bCAlMCwlMVxuXHQiCi0JCSAgICAgICJ4b3JsICUyLCUwXG5cdCIKLQkJICAgICAgInB1c2hsICUwXG5cdCIKLQkJICAgICAgInBvcGZsXG5cdCIKLQkJICAgICAgInB1c2hmbFxuXHQiCi0JCSAgICAgICJwb3BsICUwXG5cdCIKLQkJICAgICAgInBvcGZsXG5cdCIKKwlhc20gdm9sYXRpbGUgKCJwdXNoZmwJCVxuXHQiCisJCSAgICAgICJwdXNoZmwJCVxuXHQiCisJCSAgICAgICJwb3BsICUwCQlcblx0IgorCQkgICAgICAibW92bCAlMCwgJTEJXG5cdCIKKwkJICAgICAgInhvcmwgJTIsICUwCVxuXHQiCisJCSAgICAgICJwdXNobCAlMAkJXG5cdCIKKwkJICAgICAgInBvcGZsCQlcblx0IgorCQkgICAgICAicHVzaGZsCQlcblx0IgorCQkgICAgICAicG9wbCAlMAkJXG5cdCIKKwkJICAgICAgInBvcGZsCQlcblx0IgorCiAJCSAgICAgIDogIj0mciIgKGYxKSwgIj0mciIgKGYyKQogCQkgICAgICA6ICJpciIgKGZsYWcpKTsKIApAQCAtMTg4LDE4ICsxODksMjIgQEAKIAogc3RhdGljIHZvaWQgX19jcHVpbml0IHNxdWFzaF90aGVfc3R1cGlkX3NlcmlhbF9udW1iZXIoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewotCWlmIChjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX1BOKSAmJiBkaXNhYmxlX3g4Nl9zZXJpYWxfbnIpIHsKLQkJLyogRGlzYWJsZSBwcm9jZXNzb3Igc2VyaWFsIG51bWJlciAqLwotCQl1bnNpZ25lZCBsb25nIGxvLCBoaTsKLQkJcmRtc3IoTVNSX0lBMzJfQkJMX0NSX0NUTCwgbG8sIGhpKTsKLQkJbG8gfD0gMHgyMDAwMDA7Ci0JCXdybXNyKE1TUl9JQTMyX0JCTF9DUl9DVEwsIGxvLCBoaSk7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiQ1BVIHNlcmlhbCBudW1iZXIgZGlzYWJsZWQuXG4iKTsKLQkJY2xlYXJfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9QTik7CisJdW5zaWduZWQgbG9uZyBsbywgaGk7CiAKLQkJLyogRGlzYWJsaW5nIHRoZSBzZXJpYWwgbnVtYmVyIG1heSBhZmZlY3QgdGhlIGNwdWlkIGxldmVsICovCi0JCWMtPmNwdWlkX2xldmVsID0gY3B1aWRfZWF4KDApOwotCX0KKwlpZiAoIWNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfUE4pIHx8ICFkaXNhYmxlX3g4Nl9zZXJpYWxfbnIpCisJCXJldHVybjsKKworCS8qIERpc2FibGUgcHJvY2Vzc29yIHNlcmlhbCBudW1iZXI6ICovCisKKwlyZG1zcihNU1JfSUEzMl9CQkxfQ1JfQ1RMLCBsbywgaGkpOworCWxvIHw9IDB4MjAwMDAwOworCXdybXNyKE1TUl9JQTMyX0JCTF9DUl9DVEwsIGxvLCBoaSk7CisKKwlwcmludGsoS0VSTl9OT1RJQ0UgIkNQVSBzZXJpYWwgbnVtYmVyIGRpc2FibGVkLlxuIik7CisJY2xlYXJfY3B1X2NhcChjLCBYODZfRkVBVFVSRV9QTik7CisKKwkvKiBEaXNhYmxpbmcgdGhlIHNlcmlhbCBudW1iZXIgbWF5IGFmZmVjdCB0aGUgY3B1aWQgbGV2ZWwgKi8KKwljLT5jcHVpZF9sZXZlbCA9IGNwdWlkX2VheCgwKTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgeDg2X3NlcmlhbF9ucl9zZXR1cChjaGFyICpzKQpAQCAtMjMyLDYgKzIzNyw3IEBACiAJdTMyIGZlYXR1cmU7CiAJdTMyIGxldmVsOwogfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVpZF9kZXBlbmRlbnRfZmVhdHVyZSBfX2NwdWluaXRjb25zdAogY3B1aWRfZGVwZW5kZW50X2ZlYXR1cmVzW10gPSB7CiAJeyBYODZfRkVBVFVSRV9NV0FJVCwJCTB4MDAwMDAwMDUgfSwKQEAgLTI0Myw3ICsyNDksMTEgQEAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBmaWx0ZXJfY3B1aWRfZmVhdHVyZXMoc3RydWN0IGNwdWluZm9feDg2ICpjLCBib29sIHdhcm4pCiB7CiAJY29uc3Qgc3RydWN0IGNwdWlkX2RlcGVuZGVudF9mZWF0dXJlICpkZjsKKwogCWZvciAoZGYgPSBjcHVpZF9kZXBlbmRlbnRfZmVhdHVyZXM7IGRmLT5mZWF0dXJlOyBkZisrKSB7CisKKwkJaWYgKCFjcHVfaGFzKGMsIGRmLT5mZWF0dXJlKSkKKwkJCWNvbnRpbnVlOwogCQkvKgogCQkgKiBOb3RlOiBjcHVpZF9sZXZlbCBpcyBzZXQgdG8gLTEgaWYgdW5hdmFpbGFibGUsIGJ1dAogCQkgKiBleHRlbmRlZF9leHRlbmRlZF9sZXZlbCBpcyBzZXQgdG8gMCBpZiB1bmF2YWlsYWJsZQpAQCAtMjUxLDMyICsyNjEsMzIgQEAKIAkJICogd2hlbiBzaWduZWQ7IGhlbmNlIHRoZSB3ZWlyZCBtZXNzaW5nIGFyb3VuZCB3aXRoCiAJCSAqIHNpZ25zIGhlcmUuLi4KIAkJICovCi0JCWlmIChjcHVfaGFzKGMsIGRmLT5mZWF0dXJlKSAmJgotCQkgICAgKChzMzIpZGYtPmxldmVsIDwgMCA/CisJCWlmICghKChzMzIpZGYtPmxldmVsIDwgMCA/CiAJCSAgICAgKHUzMilkZi0+bGV2ZWwgPiAodTMyKWMtPmV4dGVuZGVkX2NwdWlkX2xldmVsIDoKLQkJICAgICAoczMyKWRmLT5sZXZlbCA+IChzMzIpYy0+Y3B1aWRfbGV2ZWwpKSB7Ci0JCQljbGVhcl9jcHVfY2FwKGMsIGRmLT5mZWF0dXJlKTsKLQkJCWlmICh3YXJuKQotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCQkgICAgICAgIkNQVTogQ1BVIGZlYXR1cmUgJXMgZGlzYWJsZWQgIgotCQkJCSAgICAgICAiZHVlIHRvIGxhY2sgb2YgQ1BVSUQgbGV2ZWwgMHgleFxuIiwKLQkJCQkgICAgICAgeDg2X2NhcF9mbGFnc1tkZi0+ZmVhdHVyZV0sCi0JCQkJICAgICAgIGRmLT5sZXZlbCk7Ci0JCX0KKwkJICAgICAoczMyKWRmLT5sZXZlbCA+IChzMzIpYy0+Y3B1aWRfbGV2ZWwpKQorCQkJY29udGludWU7CisKKwkJY2xlYXJfY3B1X2NhcChjLCBkZi0+ZmVhdHVyZSk7CisJCWlmICghd2FybikKKwkJCWNvbnRpbnVlOworCisJCXByaW50ayhLRVJOX1dBUk5JTkcKKwkJICAgICAgICJDUFU6IENQVSBmZWF0dXJlICVzIGRpc2FibGVkLCBubyBDUFVJRCBsZXZlbCAweCV4XG4iLAorCQkJCXg4Nl9jYXBfZmxhZ3NbZGYtPmZlYXR1cmVdLCBkZi0+bGV2ZWwpOwogCX0KIH0KIAogLyoKICAqIE5hbWluZyBjb252ZW50aW9uIHNob3VsZCBiZTogPE5hbWU+IFsoPENvZGVuYW1lPildCiAgKiBUaGlzIHRhYmxlIG9ubHkgaXMgdXNlZCB1bmxlc3MgaW5pdF88dmVuZG9yPigpIGJlbG93IGRvZXNuJ3Qgc2V0IGl0OwotICogaW4gcGFydGljdWxhciwgaWYgQ1BVSUQgbGV2ZWxzIDB4ODAwMDAwMDIuLjQgYXJlIHN1cHBvcnRlZCwgdGhpcyBpc24ndCB1c2VkCi0gKgorICogaW4gcGFydGljdWxhciwgaWYgQ1BVSUQgbGV2ZWxzIDB4ODAwMDAwMDIuLjQgYXJlIHN1cHBvcnRlZCwgdGhpcworICogaXNuJ3QgdXNlZAogICovCiAKIC8qIExvb2sgdXAgQ1BVIG5hbWVzIGJ5IHRhYmxlIGxvb2t1cC4gKi8KLXN0YXRpYyBjaGFyIF9fY3B1aW5pdCAqdGFibGVfbG9va3VwX21vZGVsKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKK3N0YXRpYyBjb25zdCBjaGFyICpfX2NwdWluaXQgdGFibGVfbG9va3VwX21vZGVsKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKLQlzdHJ1Y3QgY3B1X21vZGVsX2luZm8gKmluZm87CisJY29uc3Qgc3RydWN0IGNwdV9tb2RlbF9pbmZvICppbmZvOwogCiAJaWYgKGMtPng4Nl9tb2RlbCA+PSAxNikKIAkJcmV0dXJuIE5VTEw7CS8qIFJhbmdlIGNoZWNrICovCkBAIC0zMDcsOCArMzE3LDEwIEBACiAJbG9hZF9zdGFja19jYW5hcnlfc2VnbWVudCgpOwogfQogCi0vKiBDdXJyZW50IGdkdCBwb2ludHMgJWZzIGF0IHRoZSAibWFzdGVyIiBwZXItY3B1IGFyZWE6IGFmdGVyIHRoaXMsCi0gKiBpdCdzIG9uIHRoZSByZWFsIG9uZS4gKi8KKy8qCisgKiBDdXJyZW50IGdkdCBwb2ludHMgJWZzIGF0IHRoZSAibWFzdGVyIiBwZXItY3B1IGFyZWE6IGFmdGVyIHRoaXMsCisgKiBpdCdzIG9uIHRoZSByZWFsIG9uZS4KKyAqLwogdm9pZCBzd2l0Y2hfdG9fbmV3X2dkdChpbnQgY3B1KQogewogCXN0cnVjdCBkZXNjX3B0ciBnZHRfZGVzY3I7CkBAIC0zMjEsNyArMzMzLDcgQEAKIAlsb2FkX3BlcmNwdV9zZWdtZW50KGNwdSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY3B1X2RldiAqY3B1X2RldnNbWDg2X1ZFTkRPUl9OVU1dID0ge307CitzdGF0aWMgY29uc3Qgc3RydWN0IGNwdV9kZXYgKl9fY3B1aW5pdGRhdGEgY3B1X2RldnNbWDg2X1ZFTkRPUl9OVU1dID0ge307CiAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBkZWZhdWx0X2luaXQoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewpAQCAtMzQwLDcgKzM1Miw3IEBACiAjZW5kaWYKIH0KIAotc3RhdGljIHN0cnVjdCBjcHVfZGV2IF9fY3B1aW5pdGRhdGEgZGVmYXVsdF9jcHUgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGNwdV9kZXYgX19jcHVpbml0Y29uc3QgZGVmYXVsdF9jcHUgPSB7CiAJLmNfaW5pdAk9IGRlZmF1bHRfaW5pdCwKIAkuY192ZW5kb3IgPSAiVW5rbm93biIsCiAJLmNfeDg2X3ZlbmRvciA9IFg4Nl9WRU5ET1JfVU5LTk9XTiwKQEAgLTM1NCwyMiArMzY2LDI0IEBACiAJaWYgKGMtPmV4dGVuZGVkX2NwdWlkX2xldmVsIDwgMHg4MDAwMDAwNCkKIAkJcmV0dXJuOwogCi0JdiA9ICh1bnNpZ25lZCBpbnQgKikgYy0+eDg2X21vZGVsX2lkOworCXYgPSAodW5zaWduZWQgaW50ICopYy0+eDg2X21vZGVsX2lkOwogCWNwdWlkKDB4ODAwMDAwMDIsICZ2WzBdLCAmdlsxXSwgJnZbMl0sICZ2WzNdKTsKIAljcHVpZCgweDgwMDAwMDAzLCAmdls0XSwgJnZbNV0sICZ2WzZdLCAmdls3XSk7CiAJY3B1aWQoMHg4MDAwMDAwNCwgJnZbOF0sICZ2WzldLCAmdlsxMF0sICZ2WzExXSk7CiAJYy0+eDg2X21vZGVsX2lkWzQ4XSA9IDA7CiAKLQkvKiBJbnRlbCBjaGlwcyByaWdodC1qdXN0aWZ5IHRoaXMgc3RyaW5nIGZvciBzb21lIGR1bWIgcmVhc29uOwotCSAgIHVuZG8gdGhhdCBicmFpbiBkYW1hZ2UgKi8KKwkvKgorCSAqIEludGVsIGNoaXBzIHJpZ2h0LWp1c3RpZnkgdGhpcyBzdHJpbmcgZm9yIHNvbWUgZHVtYiByZWFzb247CisJICogdW5kbyB0aGF0IGJyYWluIGRhbWFnZToKKwkgKi8KIAlwID0gcSA9ICZjLT54ODZfbW9kZWxfaWRbMF07CiAJd2hpbGUgKCpwID09ICcgJykKLQkgICAgIHArKzsKKwkJcCsrOwogCWlmIChwICE9IHEpIHsKLQkgICAgIHdoaWxlICgqcCkKLQkJICAqcSsrID0gKnArKzsKLQkgICAgIHdoaWxlIChxIDw9ICZjLT54ODZfbW9kZWxfaWRbNDhdKQotCQkgICpxKysgPSAnXDAnOwkvKiBaZXJvLXBhZCB0aGUgcmVzdCAqLworCQl3aGlsZSAoKnApCisJCQkqcSsrID0gKnArKzsKKwkJd2hpbGUgKHEgPD0gJmMtPng4Nl9tb2RlbF9pZFs0OF0pCisJCQkqcSsrID0gJ1wwJzsJLyogWmVyby1wYWQgdGhlIHJlc3QgKi8KIAl9CiB9CiAKQEAgLTQzOCwyOCArNDUyLDMxIEBACiAKIAlpZiAoc21wX251bV9zaWJsaW5ncyA9PSAxKSB7CiAJCXByaW50ayhLRVJOX0lORk8gICJDUFU6IEh5cGVyLVRocmVhZGluZyBpcyBkaXNhYmxlZFxuIik7Ci0JfSBlbHNlIGlmIChzbXBfbnVtX3NpYmxpbmdzID4gMSkgewotCi0JCWlmIChzbXBfbnVtX3NpYmxpbmdzID4gbnJfY3B1X2lkcykgewotCQkJcHJpbnRrKEtFUk5fV0FSTklORyAiQ1BVOiBVbnN1cHBvcnRlZCBudW1iZXIgb2Ygc2libGluZ3MgJWQiLAotCQkJCQlzbXBfbnVtX3NpYmxpbmdzKTsKLQkJCXNtcF9udW1fc2libGluZ3MgPSAxOwotCQkJcmV0dXJuOwotCQl9Ci0KLQkJaW5kZXhfbXNiID0gZ2V0X2NvdW50X29yZGVyKHNtcF9udW1fc2libGluZ3MpOwotCQljLT5waHlzX3Byb2NfaWQgPSBhcGljLT5waHlzX3BrZ19pZChjLT5pbml0aWFsX2FwaWNpZCwgaW5kZXhfbXNiKTsKLQotCQlzbXBfbnVtX3NpYmxpbmdzID0gc21wX251bV9zaWJsaW5ncyAvIGMtPng4Nl9tYXhfY29yZXM7Ci0KLQkJaW5kZXhfbXNiID0gZ2V0X2NvdW50X29yZGVyKHNtcF9udW1fc2libGluZ3MpOwotCi0JCWNvcmVfYml0cyA9IGdldF9jb3VudF9vcmRlcihjLT54ODZfbWF4X2NvcmVzKTsKLQotCQljLT5jcHVfY29yZV9pZCA9IGFwaWMtPnBoeXNfcGtnX2lkKGMtPmluaXRpYWxfYXBpY2lkLCBpbmRleF9tc2IpICYKLQkJCQkJICAgICAgICgoMSA8PCBjb3JlX2JpdHMpIC0gMSk7CisJCWdvdG8gb3V0OwogCX0KIAorCWlmIChzbXBfbnVtX3NpYmxpbmdzIDw9IDEpCisJCWdvdG8gb3V0OworCisJaWYgKHNtcF9udW1fc2libGluZ3MgPiBucl9jcHVfaWRzKSB7CisJCXByX3dhcm5pbmcoIkNQVTogVW5zdXBwb3J0ZWQgbnVtYmVyIG9mIHNpYmxpbmdzICVkIiwKKwkJCSAgIHNtcF9udW1fc2libGluZ3MpOworCQlzbXBfbnVtX3NpYmxpbmdzID0gMTsKKwkJcmV0dXJuOworCX0KKworCWluZGV4X21zYiA9IGdldF9jb3VudF9vcmRlcihzbXBfbnVtX3NpYmxpbmdzKTsKKwljLT5waHlzX3Byb2NfaWQgPSBhcGljLT5waHlzX3BrZ19pZChjLT5pbml0aWFsX2FwaWNpZCwgaW5kZXhfbXNiKTsKKworCXNtcF9udW1fc2libGluZ3MgPSBzbXBfbnVtX3NpYmxpbmdzIC8gYy0+eDg2X21heF9jb3JlczsKKworCWluZGV4X21zYiA9IGdldF9jb3VudF9vcmRlcihzbXBfbnVtX3NpYmxpbmdzKTsKKworCWNvcmVfYml0cyA9IGdldF9jb3VudF9vcmRlcihjLT54ODZfbWF4X2NvcmVzKTsKKworCWMtPmNwdV9jb3JlX2lkID0gYXBpYy0+cGh5c19wa2dfaWQoYy0+aW5pdGlhbF9hcGljaWQsIGluZGV4X21zYikgJgorCQkJCSAgICAgICAoKDEgPDwgY29yZV9iaXRzKSAtIDEpOworCiBvdXQ6CiAJaWYgKChjLT54ODZfbWF4X2NvcmVzICogc21wX251bV9zaWJsaW5ncykgPiAxKSB7CiAJCXByaW50ayhLRVJOX0lORk8gICJDUFU6IFBoeXNpY2FsIFByb2Nlc3NvciBJRDogJWRcbiIsCkBAIC00NzMsOCArNDkwLDggQEAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdCBnZXRfY3B1X3ZlbmRvcihzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CiAJY2hhciAqdiA9IGMtPng4Nl92ZW5kb3JfaWQ7Ci0JaW50IGk7CiAJc3RhdGljIGludCBwcmludGVkOworCWludCBpOwogCiAJZm9yIChpID0gMDsgaSA8IFg4Nl9WRU5ET1JfTlVNOyBpKyspIHsKIAkJaWYgKCFjcHVfZGV2c1tpXSkKQEAgLTQ4Myw2ICs1MDAsNyBAQAogCQlpZiAoIXN0cmNtcCh2LCBjcHVfZGV2c1tpXS0+Y19pZGVudFswXSkgfHwKIAkJICAgIChjcHVfZGV2c1tpXS0+Y19pZGVudFsxXSAmJgogCQkgICAgICFzdHJjbXAodiwgY3B1X2RldnNbaV0tPmNfaWRlbnRbMV0pKSkgeworCiAJCQl0aGlzX2NwdSA9IGNwdV9kZXZzW2ldOwogCQkJYy0+eDg2X3ZlbmRvciA9IHRoaXNfY3B1LT5jX3g4Nl92ZW5kb3I7CiAJCQlyZXR1cm47CkBAIC00OTEsNyArNTA5LDkgQEAKIAogCWlmICghcHJpbnRlZCkgewogCQlwcmludGVkKys7Ci0JCXByaW50ayhLRVJOX0VSUiAiQ1BVOiB2ZW5kb3JfaWQgJyVzJyB1bmtub3duLCB1c2luZyBnZW5lcmljIGluaXQuXG4iLCB2KTsKKwkJcHJpbnRrKEtFUk5fRVJSCisJCSAgICAiQ1BVOiB2ZW5kb3JfaWQgJyVzJyB1bmtub3duLCB1c2luZyBnZW5lcmljIGluaXQuXG4iLCB2KTsKKwogCQlwcmludGsoS0VSTl9FUlIgIkNQVTogWW91ciBzeXN0ZW0gbWF5IGJlIHVuc3RhYmxlLlxuIik7CiAJfQogCkBAIC01MTEsMTQgKzUzMSwxNyBAQAogCS8qIEludGVsLWRlZmluZWQgZmxhZ3M6IGxldmVsIDB4MDAwMDAwMDEgKi8KIAlpZiAoYy0+Y3B1aWRfbGV2ZWwgPj0gMHgwMDAwMDAwMSkgewogCQl1MzIganVuaywgdGZtcywgY2FwMCwgbWlzYzsKKwogCQljcHVpZCgweDAwMDAwMDAxLCAmdGZtcywgJm1pc2MsICZqdW5rLCAmY2FwMCk7CiAJCWMtPng4NiA9ICh0Zm1zID4+IDgpICYgMHhmOwogCQljLT54ODZfbW9kZWwgPSAodGZtcyA+PiA0KSAmIDB4ZjsKIAkJYy0+eDg2X21hc2sgPSB0Zm1zICYgMHhmOworCiAJCWlmIChjLT54ODYgPT0gMHhmKQogCQkJYy0+eDg2ICs9ICh0Zm1zID4+IDIwKSAmIDB4ZmY7CiAJCWlmIChjLT54ODYgPj0gMHg2KQogCQkJYy0+eDg2X21vZGVsICs9ICgodGZtcyA+PiAxNikgJiAweGYpIDw8IDQ7CisKIAkJaWYgKGNhcDAgJiAoMTw8MTkpKSB7CiAJCQljLT54ODZfY2xmbHVzaF9zaXplID0gKChtaXNjID4+IDgpICYgMHhmZikgKiA4OwogCQkJYy0+eDg2X2NhY2hlX2FsaWdubWVudCA9IGMtPng4Nl9jbGZsdXNoX3NpemU7CkBAIC01MzQsNiArNTU3LDcgQEAKIAkvKiBJbnRlbC1kZWZpbmVkIGZsYWdzOiBsZXZlbCAweDAwMDAwMDAxICovCiAJaWYgKGMtPmNwdWlkX2xldmVsID49IDB4MDAwMDAwMDEpIHsKIAkJdTMyIGNhcGFiaWxpdHksIGV4Y2FwOworCiAJCWNwdWlkKDB4MDAwMDAwMDEsICZ0Zm1zLCAmZWJ4LCAmZXhjYXAsICZjYXBhYmlsaXR5KTsKIAkJYy0+eDg2X2NhcGFiaWxpdHlbMF0gPSBjYXBhYmlsaXR5OwogCQljLT54ODZfY2FwYWJpbGl0eVs0XSA9IGV4Y2FwOwpAQCAtNTQyLDYgKzU2Niw3IEBACiAJLyogQU1ELWRlZmluZWQgZmxhZ3M6IGxldmVsIDB4ODAwMDAwMDEgKi8KIAl4bHZsID0gY3B1aWRfZWF4KDB4ODAwMDAwMDApOwogCWMtPmV4dGVuZGVkX2NwdWlkX2xldmVsID0geGx2bDsKKwogCWlmICgoeGx2bCAmIDB4ZmZmZjAwMDApID09IDB4ODAwMDAwMDApIHsKIAkJaWYgKHhsdmwgPj0gMHg4MDAwMDAwMSkgewogCQkJYy0+eDg2X2NhcGFiaWxpdHlbMV0gPSBjcHVpZF9lZHgoMHg4MDAwMDAwMSk7CkBAIC01NDksMTMgKzU3NCwxNSBAQAogCQl9CiAJfQogCi0jaWZkZWYgQ09ORklHX1g4Nl82NAogCWlmIChjLT5leHRlbmRlZF9jcHVpZF9sZXZlbCA+PSAweDgwMDAwMDA4KSB7CiAJCXUzMiBlYXggPSBjcHVpZF9lYXgoMHg4MDAwMDAwOCk7CiAKIAkJYy0+eDg2X3ZpcnRfYml0cyA9IChlYXggPj4gOCkgJiAweGZmOwogCQljLT54ODZfcGh5c19iaXRzID0gZWF4ICYgMHhmZjsKIAl9CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCWVsc2UgaWYgKGNwdV9oYXMoYywgWDg2X0ZFQVRVUkVfUEFFKSB8fCBjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX1BTRTM2KSkKKwkJYy0+eDg2X3BoeXNfYml0cyA9IDM2OwogI2VuZGlmCiAKIAlpZiAoYy0+ZXh0ZW5kZWRfY3B1aWRfbGV2ZWwgPj0gMHg4MDAwMDAwNykKQEAgLTYwMiw4ICs2MjksMTIgQEAKIHsKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJYy0+eDg2X2NsZmx1c2hfc2l6ZSA9IDY0OworCWMtPng4Nl9waHlzX2JpdHMgPSAzNjsKKwljLT54ODZfdmlydF9iaXRzID0gNDg7CiAjZWxzZQogCWMtPng4Nl9jbGZsdXNoX3NpemUgPSAzMjsKKwljLT54ODZfcGh5c19iaXRzID0gMzI7CisJYy0+eDg2X3ZpcnRfYml0cyA9IDMyOwogI2VuZGlmCiAJYy0+eDg2X2NhY2hlX2FsaWdubWVudCA9IGMtPng4Nl9jbGZsdXNoX3NpemU7CiAKQEAgLTYzNCwxMiArNjY1LDEyIEBACiAKIHZvaWQgX19pbml0IGVhcmx5X2NwdV9pbml0KHZvaWQpCiB7Ci0Jc3RydWN0IGNwdV9kZXYgKipjZGV2OworCWNvbnN0IHN0cnVjdCBjcHVfZGV2ICpjb25zdCAqY2RldjsKIAlpbnQgY291bnQgPSAwOwogCi0JcHJpbnRrKCJLRVJORUwgc3VwcG9ydGVkIGNwdXM6XG4iKTsKKwlwcmludGsoS0VSTl9JTkZPICJLRVJORUwgc3VwcG9ydGVkIGNwdXM6XG4iKTsKIAlmb3IgKGNkZXYgPSBfX3g4Nl9jcHVfZGV2X3N0YXJ0OyBjZGV2IDwgX194ODZfY3B1X2Rldl9lbmQ7IGNkZXYrKykgewotCQlzdHJ1Y3QgY3B1X2RldiAqY3B1ZGV2ID0gKmNkZXY7CisJCWNvbnN0IHN0cnVjdCBjcHVfZGV2ICpjcHVkZXYgPSAqY2RldjsKIAkJdW5zaWduZWQgaW50IGo7CiAKIAkJaWYgKGNvdW50ID49IFg4Nl9WRU5ET1JfTlVNKQpAQCAtNjUwLDcgKzY4MSw3IEBACiAJCWZvciAoaiA9IDA7IGogPCAyOyBqKyspIHsKIAkJCWlmICghY3B1ZGV2LT5jX2lkZW50W2pdKQogCQkJCWNvbnRpbnVlOwotCQkJcHJpbnRrKCIgICVzICVzXG4iLCBjcHVkZXYtPmNfdmVuZG9yLAorCQkJcHJpbnRrKEtFUk5fSU5GTyAiICAlcyAlc1xuIiwgY3B1ZGV2LT5jX3ZlbmRvciwKIAkJCQljcHVkZXYtPmNfaWRlbnRbal0pOwogCQl9CiAJfQpAQCAtNzI2LDkgKzc1NywxMyBAQAogCWMtPng4Nl9jb3JlaWRfYml0cyA9IDA7CiAjaWZkZWYgQ09ORklHX1g4Nl82NAogCWMtPng4Nl9jbGZsdXNoX3NpemUgPSA2NDsKKwljLT54ODZfcGh5c19iaXRzID0gMzY7CisJYy0+eDg2X3ZpcnRfYml0cyA9IDQ4OwogI2Vsc2UKIAljLT5jcHVpZF9sZXZlbCA9IC0xOwkvKiBDUFVJRCBub3QgZGV0ZWN0ZWQgKi8KIAljLT54ODZfY2xmbHVzaF9zaXplID0gMzI7CisJYy0+eDg2X3BoeXNfYml0cyA9IDMyOworCWMtPng4Nl92aXJ0X2JpdHMgPSAzMjsKICNlbmRpZgogCWMtPng4Nl9jYWNoZV9hbGlnbm1lbnQgPSBjLT54ODZfY2xmbHVzaF9zaXplOwogCW1lbXNldCgmYy0+eDg2X2NhcGFiaWxpdHksIDAsIHNpemVvZiBjLT54ODZfY2FwYWJpbGl0eSk7CkBAIC03NTksOCArNzk0LDggQEAKIAlzcXVhc2hfdGhlX3N0dXBpZF9zZXJpYWxfbnVtYmVyKGMpOwogCiAJLyoKLQkgKiBUaGUgdmVuZG9yLXNwZWNpZmljIGZ1bmN0aW9ucyBtaWdodCBoYXZlIGNoYW5nZWQgZmVhdHVyZXMuICBOb3cKLQkgKiB3ZSBkbyAiZ2VuZXJpYyBjaGFuZ2VzLiIKKwkgKiBUaGUgdmVuZG9yLXNwZWNpZmljIGZ1bmN0aW9ucyBtaWdodCBoYXZlIGNoYW5nZWQgZmVhdHVyZXMuCisJICogTm93IHdlIGRvICJnZW5lcmljIGNoYW5nZXMuIgogCSAqLwogCiAJLyogRmlsdGVyIG91dCBhbnl0aGluZyB0aGF0IGRlcGVuZHMgb24gQ1BVSUQgbGV2ZWxzIHdlIGRvbid0IGhhdmUgKi8KQEAgLTc2OCw3ICs4MDMsNyBAQAogCiAJLyogSWYgdGhlIG1vZGVsIG5hbWUgaXMgc3RpbGwgdW5zZXQsIGRvIHRhYmxlIGxvb2t1cC4gKi8KIAlpZiAoIWMtPng4Nl9tb2RlbF9pZFswXSkgewotCQljaGFyICpwOworCQljb25zdCBjaGFyICpwOwogCQlwID0gdGFibGVfbG9va3VwX21vZGVsKGMpOwogCQlpZiAocCkKIAkJCXN0cmNweShjLT54ODZfbW9kZWxfaWQsIHApOwpAQCAtODQzLDExICs4NzgsMTEgQEAKIH0KIAogc3RydWN0IG1zcl9yYW5nZSB7Ci0JdW5zaWduZWQgbWluOwotCXVuc2lnbmVkIG1heDsKKwl1bnNpZ25lZAltaW47CisJdW5zaWduZWQJbWF4OwogfTsKIAotc3RhdGljIHN0cnVjdCBtc3JfcmFuZ2UgbXNyX3JhbmdlX2FycmF5W10gX19jcHVpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbXNyX3JhbmdlIG1zcl9yYW5nZV9hcnJheVtdIF9fY3B1aW5pdGNvbnN0ID0gewogCXsgMHgwMDAwMDAwMCwgMHgwMDAwMDQxOH0sCiAJeyAweGMwMDAwMDAwLCAweGMwMDAwNDBifSwKIAl7IDB4YzAwMTAwMDAsIDB4YzAwMTAxNDJ9LApAQCAtODU2LDE0ICs4OTEsMTUgQEAKIAogc3RhdGljIHZvaWQgX19jcHVpbml0IHByaW50X2NwdV9tc3Iodm9pZCkKIHsKKwl1bnNpZ25lZCBpbmRleF9taW4sIGluZGV4X21heDsKIAl1bnNpZ25lZCBpbmRleDsKIAl1NjQgdmFsOwogCWludCBpOwotCXVuc2lnbmVkIGluZGV4X21pbiwgaW5kZXhfbWF4OwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUobXNyX3JhbmdlX2FycmF5KTsgaSsrKSB7CiAJCWluZGV4X21pbiA9IG1zcl9yYW5nZV9hcnJheVtpXS5taW47CiAJCWluZGV4X21heCA9IG1zcl9yYW5nZV9hcnJheVtpXS5tYXg7CisKIAkJZm9yIChpbmRleCA9IGluZGV4X21pbjsgaW5kZXggPCBpbmRleF9tYXg7IGluZGV4KyspIHsKIAkJCWlmIChyZG1zcmxfYW1kX3NhZmUoaW5kZXgsICZ2YWwpKQogCQkJCWNvbnRpbnVlOwpAQCAtODczLDYgKzkwOSw3IEBACiB9CiAKIHN0YXRpYyBpbnQgc2hvd19tc3IgX19jcHVpbml0ZGF0YTsKKwogc3RhdGljIF9faW5pdCBpbnQgc2V0dXBfc2hvd19tc3IoY2hhciAqYXJnKQogewogCWludCBudW07CkBAIC04OTQsMTIgKzkzMSwxNCBAQAogCiB2b2lkIF9fY3B1aW5pdCBwcmludF9jcHVfaW5mbyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7Ci0JY2hhciAqdmVuZG9yID0gTlVMTDsKKwljb25zdCBjaGFyICp2ZW5kb3IgPSBOVUxMOwogCi0JaWYgKGMtPng4Nl92ZW5kb3IgPCBYODZfVkVORE9SX05VTSkKKwlpZiAoYy0+eDg2X3ZlbmRvciA8IFg4Nl9WRU5ET1JfTlVNKSB7CiAJCXZlbmRvciA9IHRoaXNfY3B1LT5jX3ZlbmRvcjsKLQllbHNlIGlmIChjLT5jcHVpZF9sZXZlbCA+PSAwKQotCQl2ZW5kb3IgPSBjLT54ODZfdmVuZG9yX2lkOworCX0gZWxzZSB7CisJCWlmIChjLT5jcHVpZF9sZXZlbCA+PSAwKQorCQkJdmVuZG9yID0gYy0+eDg2X3ZlbmRvcl9pZDsKKwl9CiAKIAlpZiAodmVuZG9yICYmICFzdHJzdHIoYy0+eDg2X21vZGVsX2lkLCB2ZW5kb3IpKQogCQlwcmludGsoS0VSTl9DT05UICIlcyAiLCB2ZW5kb3IpOwpAQCAtOTI2LDEwICs5NjUsMTIgQEAKIHN0YXRpYyBfX2luaXQgaW50IHNldHVwX2Rpc2FibGVjcHVpZChjaGFyICphcmcpCiB7CiAJaW50IGJpdDsKKwogCWlmIChnZXRfb3B0aW9uKCZhcmcsICZiaXQpICYmIGJpdCA8IE5DQVBJTlRTKjMyKQogCQlzZXR1cF9jbGVhcl9jcHVfY2FwKGJpdCk7CiAJZWxzZQogCQlyZXR1cm4gMDsKKwogCXJldHVybiAxOwogfQogX19zZXR1cCgiY2xlYXJjcHVpZD0iLCBzZXR1cF9kaXNhYmxlY3B1aWQpOwpAQCAtOTM5LDYgKzk4MCw3IEBACiAKIERFRklORV9QRVJfQ1BVX0ZJUlNUKHVuaW9uIGlycV9zdGFja191bmlvbiwKIAkJICAgICBpcnFfc3RhY2tfdW5pb24pIF9fYWxpZ25lZChQQUdFX1NJWkUpOworCiBERUZJTkVfUEVSX0NQVShjaGFyICosIGlycV9zdGFja19wdHIpID0KIAlpbml0X3Blcl9jcHVfdmFyKGlycV9zdGFja191bmlvbi5pcnFfc3RhY2spICsgSVJRX1NUQUNLX1NJWkUgLSA2NDsKIApAQCAtOTQ4LDEyICs5OTAsMjEgQEAKIAogREVGSU5FX1BFUl9DUFUodW5zaWduZWQgaW50LCBpcnFfY291bnQpID0gLTE7CiAKKy8qCisgKiBTcGVjaWFsIElTVCBzdGFja3Mgd2hpY2ggdGhlIENQVSBzd2l0Y2hlcyB0byB3aGVuIGl0IGNhbGxzCisgKiBhbiBJU1QtbWFya2VkIGRlc2NyaXB0b3IgZW50cnkuIFVwIHRvIDcgc3RhY2tzIChoYXJkd2FyZQorICogbGltaXQpLCBhbGwgb2YgdGhlbSBhcmUgNEssIGV4Y2VwdCB0aGUgZGVidWcgc3RhY2sgd2hpY2gKKyAqIGlzIDhLLgorICovCitzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IGV4Y2VwdGlvbl9zdGFja19zaXplc1tOX0VYQ0VQVElPTl9TVEFDS1NdID0geworCSAgWzAgLi4uIE5fRVhDRVBUSU9OX1NUQUNLUyAtIDFdCT0gRVhDRVBUSU9OX1NUS1NaLAorCSAgW0RFQlVHX1NUQUNLIC0gMV0JCQk9IERFQlVHX1NUS1NaCit9OworCiBzdGF0aWMgREVGSU5FX1BFUl9DUFVfUEFHRV9BTElHTkVEKGNoYXIsIGV4Y2VwdGlvbl9zdGFja3MKIAlbKE5fRVhDRVBUSU9OX1NUQUNLUyAtIDEpICogRVhDRVBUSU9OX1NUS1NaICsgREVCVUdfU1RLU1pdKQogCV9fYWxpZ25lZChQQUdFX1NJWkUpOwogCi1leHRlcm4gYXNtbGlua2FnZSB2b2lkIGlnbm9yZV9zeXNyZXQodm9pZCk7Ci0KIC8qIE1heSBub3QgYmUgbWFya2VkIF9faW5pdDogdXNlZCBieSBzb2Z0d2FyZSBzdXNwZW5kICovCiB2b2lkIHN5c2NhbGxfaW5pdCh2b2lkKQogewpAQCAtOTgzLDcgKzEwMzQsNyBAQAogICovCiBERUZJTkVfUEVSX0NQVShzdHJ1Y3Qgb3JpZ19pc3QsIG9yaWdfaXN0KTsKIAotI2Vsc2UJLyogeDg2XzY0ICovCisjZWxzZQkvKiBDT05GSUdfWDg2XzY0ICovCiAKICNpZmRlZiBDT05GSUdfQ0NfU1RBQ0tQUk9URUNUT1IKIERFRklORV9QRVJfQ1BVKHVuc2lnbmVkIGxvbmcsIHN0YWNrX2NhbmFyeSk7CkBAIC05OTUsOSArMTA0NiwyNiBAQAogCW1lbXNldChyZWdzLCAwLCBzaXplb2Yoc3RydWN0IHB0X3JlZ3MpKTsKIAlyZWdzLT5mcyA9IF9fS0VSTkVMX1BFUkNQVTsKIAlyZWdzLT5ncyA9IF9fS0VSTkVMX1NUQUNLX0NBTkFSWTsKKwogCXJldHVybiByZWdzOwogfQotI2VuZGlmCS8qIHg4Nl82NCAqLworI2VuZGlmCS8qIENPTkZJR19YODZfNjQgKi8KKworLyoKKyAqIENsZWFyIGFsbCA2IGRlYnVnIHJlZ2lzdGVyczoKKyAqLworc3RhdGljIHZvaWQgY2xlYXJfYWxsX2RlYnVnX3JlZ3Modm9pZCkKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJLyogSWdub3JlIGRiNCwgZGI1ICovCisJCWlmICgoaSA9PSA0KSB8fCAoaSA9PSA1KSkKKwkJCWNvbnRpbnVlOworCisJCXNldF9kZWJ1Z3JlZygwLCBpKTsKKwl9Cit9CiAKIC8qCiAgKiBjcHVfaW5pdCgpIGluaXRpYWxpemVzIHN0YXRlIHRoYXQgaXMgcGVyLUNQVS4gU29tZSBkYXRhIGlzIGFscmVhZHkKQEAgLTEwMDcsMTUgKzEwNzUsMjAgQEAKICAqIEEgbG90IG9mIHN0YXRlIGlzIGFscmVhZHkgc2V0IHVwIGluIFBEQSBpbml0IGZvciA2NCBiaXQKICAqLwogI2lmZGVmIENPTkZJR19YODZfNjQKKwogdm9pZCBfX2NwdWluaXQgY3B1X2luaXQodm9pZCkKIHsKLQlpbnQgY3B1ID0gc3RhY2tfc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXN0cnVjdCB0c3Nfc3RydWN0ICp0ID0gJnBlcl9jcHUoaW5pdF90c3MsIGNwdSk7Ci0Jc3RydWN0IG9yaWdfaXN0ICpvcmlnX2lzdCA9ICZwZXJfY3B1KG9yaWdfaXN0LCBjcHUpOwotCXVuc2lnbmVkIGxvbmcgdjsKKwlzdHJ1Y3Qgb3JpZ19pc3QgKm9yaWdfaXN0OwogCXN0cnVjdCB0YXNrX3N0cnVjdCAqbWU7CisJc3RydWN0IHRzc19zdHJ1Y3QgKnQ7CisJdW5zaWduZWQgbG9uZyB2OworCWludCBjcHU7CiAJaW50IGk7CiAKKwljcHUgPSBzdGFja19zbXBfcHJvY2Vzc29yX2lkKCk7CisJdCA9ICZwZXJfY3B1KGluaXRfdHNzLCBjcHUpOworCW9yaWdfaXN0ID0gJnBlcl9jcHUob3JpZ19pc3QsIGNwdSk7CisKICNpZmRlZiBDT05GSUdfTlVNQQogCWlmIChjcHUgIT0gMCAmJiBwZXJjcHVfcmVhZChub2RlX251bWJlcikgPT0gMCAmJgogCSAgICBjcHVfdG9fbm9kZShjcHUpICE9IE5VTUFfTk9fTk9ERSkKQEAgLTEwNTYsMTkgKzExMjksMTcgQEAKIAkgKiBzZXQgdXAgYW5kIGxvYWQgdGhlIHBlci1DUFUgVFNTCiAJICovCiAJaWYgKCFvcmlnX2lzdC0+aXN0WzBdKSB7Ci0JCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgc2l6ZXNbTl9FWENFUFRJT05fU1RBQ0tTXSA9IHsKLQkJICBbMCAuLi4gTl9FWENFUFRJT05fU1RBQ0tTIC0gMV0gPSBFWENFUFRJT05fU1RLU1osCi0JCSAgW0RFQlVHX1NUQUNLIC0gMV0gPSBERUJVR19TVEtTWgotCQl9OwogCQljaGFyICplc3RhY2tzID0gcGVyX2NwdShleGNlcHRpb25fc3RhY2tzLCBjcHUpOworCiAJCWZvciAodiA9IDA7IHYgPCBOX0VYQ0VQVElPTl9TVEFDS1M7IHYrKykgewotCQkJZXN0YWNrcyArPSBzaXplc1t2XTsKKwkJCWVzdGFja3MgKz0gZXhjZXB0aW9uX3N0YWNrX3NpemVzW3ZdOwogCQkJb3JpZ19pc3QtPmlzdFt2XSA9IHQtPng4Nl90c3MuaXN0W3ZdID0KIAkJCQkJKHVuc2lnbmVkIGxvbmcpZXN0YWNrczsKIAkJfQogCX0KIAogCXQtPng4Nl90c3MuaW9fYml0bWFwX2Jhc2UgPSBvZmZzZXRvZihzdHJ1Y3QgdHNzX3N0cnVjdCwgaW9fYml0bWFwKTsKKwogCS8qCiAJICogPD0gaXMgcmVxdWlyZWQgYmVjYXVzZSB0aGUgQ1BVIHdpbGwgYWNjZXNzIHVwIHRvCiAJICogOCBiaXRzIGJleW9uZCB0aGUgZW5kIG9mIHRoZSBJTyBwZXJtaXNzaW9uIGJpdG1hcC4KQEAgLTEwNzgsOCArMTE0OSw3IEBACiAKIAlhdG9taWNfaW5jKCZpbml0X21tLm1tX2NvdW50KTsKIAltZS0+YWN0aXZlX21tID0gJmluaXRfbW07Ci0JaWYgKG1lLT5tbSkKLQkJQlVHKCk7CisJQlVHX09OKG1lLT5tbSk7CiAJZW50ZXJfbGF6eV90bGIoJmluaXRfbW0sIG1lKTsKIAogCWxvYWRfc3AwKHQsICZjdXJyZW50LT50aHJlYWQpOwpAQCAtMTA5OCwxNyArMTE2OCw3IEBACiAJCWFyY2hfa2dkYl9vcHMuY29ycmVjdF9od19icmVhaygpOwogCWVsc2UKICNlbmRpZgotCXsKLQkJLyoKLQkJICogQ2xlYXIgYWxsIDYgZGVidWcgcmVnaXN0ZXJzOgotCQkgKi8KLQkJc2V0X2RlYnVncmVnKDBVTCwgMCk7Ci0JCXNldF9kZWJ1Z3JlZygwVUwsIDEpOwotCQlzZXRfZGVidWdyZWcoMFVMLCAyKTsKLQkJc2V0X2RlYnVncmVnKDBVTCwgMyk7Ci0JCXNldF9kZWJ1Z3JlZygwVUwsIDYpOwotCQlzZXRfZGVidWdyZWcoMFVMLCA3KTsKLQl9CisJCWNsZWFyX2FsbF9kZWJ1Z19yZWdzKCk7CiAKIAlmcHVfaW5pdCgpOwogCkBAIC0xMTI5LDcgKzExODksOCBAQAogCiAJaWYgKGNwdW1hc2tfdGVzdF9hbmRfc2V0X2NwdShjcHUsIGNwdV9pbml0aWFsaXplZF9tYXNrKSkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HICJDUFUjJWQgYWxyZWFkeSBpbml0aWFsaXplZCFcbiIsIGNwdSk7Ci0JCWZvciAoOzspIGxvY2FsX2lycV9lbmFibGUoKTsKKwkJZm9yICg7OykKKwkJCWxvY2FsX2lycV9lbmFibGUoKTsKIAl9CiAKIAlwcmludGsoS0VSTl9JTkZPICJJbml0aWFsaXppbmcgQ1BVIyVkXG4iLCBjcHUpOwpAQCAtMTE0NSw4ICsxMjA2LDcgQEAKIAkgKi8KIAlhdG9taWNfaW5jKCZpbml0X21tLm1tX2NvdW50KTsKIAljdXJyLT5hY3RpdmVfbW0gPSAmaW5pdF9tbTsKLQlpZiAoY3Vyci0+bW0pCi0JCUJVRygpOworCUJVR19PTihjdXJyLT5tbSk7CiAJZW50ZXJfbGF6eV90bGIoJmluaXRfbW0sIGN1cnIpOwogCiAJbG9hZF9zcDAodCwgdGhyZWFkKTsKQEAgLTExNTksMTMgKzEyMTksNyBAQAogCV9fc2V0X3Rzc19kZXNjKGNwdSwgR0RUX0VOVFJZX0RPVUJMRUZBVUxUX1RTUywgJmRvdWJsZWZhdWx0X3Rzcyk7CiAjZW5kaWYKIAotCS8qIENsZWFyIGFsbCA2IGRlYnVnIHJlZ2lzdGVyczogKi8KLQlzZXRfZGVidWdyZWcoMCwgMCk7Ci0Jc2V0X2RlYnVncmVnKDAsIDEpOwotCXNldF9kZWJ1Z3JlZygwLCAyKTsKLQlzZXRfZGVidWdyZWcoMCwgMyk7Ci0Jc2V0X2RlYnVncmVnKDAsIDYpOwotCXNldF9kZWJ1Z3JlZygwLCA3KTsKKwljbGVhcl9hbGxfZGVidWdfcmVncygpOwogCiAJLyoKIAkgKiBGb3JjZSBGUFUgaW5pdGlhbGl6YXRpb246CkBAIC0xMTg1LDYgKzEyMzksNCBAQAogCiAJeHNhdmVfaW5pdCgpOwogfQotCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHUuaCBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1LmgKaW5kZXggZGU0MDk0YS4uNmRlOWE5MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHUuaAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2NwdS5oCkBAIC0zLDMzICszLDM0IEBACiAjZGVmaW5lIEFSQ0hfWDg2X0NQVV9ICiAKIHN0cnVjdCBjcHVfbW9kZWxfaW5mbyB7Ci0JaW50IHZlbmRvcjsKLQlpbnQgZmFtaWx5OwotCWNoYXIgKm1vZGVsX25hbWVzWzE2XTsKKwlpbnQJCXZlbmRvcjsKKwlpbnQJCWZhbWlseTsKKwljb25zdCBjaGFyCSptb2RlbF9uYW1lc1sxNl07CiB9OwogCiAvKiBhdHRlbXB0IHRvIGNvbnNvbGlkYXRlIGNwdSBhdHRyaWJ1dGVzICovCiBzdHJ1Y3QgY3B1X2RldiB7Ci0JY2hhcgkqIGNfdmVuZG9yOworCWNvbnN0IGNoYXIJKmNfdmVuZG9yOwogCiAJLyogc29tZSBoYXZlIHR3byBwb3NzaWJpbGl0aWVzIGZvciBjcHVpZCBzdHJpbmcgKi8KLQljaGFyCSogY19pZGVudFsyXTsJCisJY29uc3QgY2hhcgkqY19pZGVudFsyXTsKIAogCXN0cnVjdAkJY3B1X21vZGVsX2luZm8gY19tb2RlbHNbNF07CiAKLQl2b2lkICAgICAgICAgICAgKCpjX2Vhcmx5X2luaXQpKHN0cnVjdCBjcHVpbmZvX3g4NiAqYyk7Ci0Jdm9pZAkJKCpjX2luaXQpKHN0cnVjdCBjcHVpbmZvX3g4NiAqIGMpOwotCXZvaWQJCSgqY19pZGVudGlmeSkoc3RydWN0IGNwdWluZm9feDg2ICogYyk7Ci0JdW5zaWduZWQgaW50CSgqY19zaXplX2NhY2hlKShzdHJ1Y3QgY3B1aW5mb194ODYgKiBjLCB1bnNpZ25lZCBpbnQgc2l6ZSk7Ci0JaW50CWNfeDg2X3ZlbmRvcjsKKwl2b2lkICAgICAgICAgICAgKCpjX2Vhcmx5X2luaXQpKHN0cnVjdCBjcHVpbmZvX3g4NiAqKTsKKwl2b2lkCQkoKmNfaW5pdCkoc3RydWN0IGNwdWluZm9feDg2ICopOworCXZvaWQJCSgqY19pZGVudGlmeSkoc3RydWN0IGNwdWluZm9feDg2ICopOworCXVuc2lnbmVkIGludAkoKmNfc2l6ZV9jYWNoZSkoc3RydWN0IGNwdWluZm9feDg2ICosIHVuc2lnbmVkIGludCk7CisJaW50CQljX3g4Nl92ZW5kb3I7CiB9OwogCiAjZGVmaW5lIGNwdV9kZXZfcmVnaXN0ZXIoY3B1X2RldlgpIFwKLQlzdGF0aWMgc3RydWN0IGNwdV9kZXYgKl9fY3B1X2Rldl8jI2NwdV9kZXZYIF9fdXNlZCBcCisJc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVfZGV2ICpjb25zdCBfX2NwdV9kZXZfIyNjcHVfZGV2WCBfX3VzZWQgXAogCV9fYXR0cmlidXRlX18oKF9fc2VjdGlvbl9fKCIueDg2X2NwdV9kZXYuaW5pdCIpKSkgPSBcCiAJJmNwdV9kZXZYOwogCi1leHRlcm4gc3RydWN0IGNwdV9kZXYgKl9feDg2X2NwdV9kZXZfc3RhcnRbXSwgKl9feDg2X2NwdV9kZXZfZW5kW107CitleHRlcm4gY29uc3Qgc3RydWN0IGNwdV9kZXYgKmNvbnN0IF9feDg2X2NwdV9kZXZfc3RhcnRbXSwKKwkJCSAgICAqY29uc3QgX194ODZfY3B1X2Rldl9lbmRbXTsKIAogZXh0ZXJuIHZvaWQgZGlzcGxheV9jYWNoZWluZm8oc3RydWN0IGNwdWluZm9feDg2ICpjKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9jcHVfZGVidWcuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1X2RlYnVnLmMKbmV3IGZpbGUgbW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uNDZlMjlhYgotLS0gL2Rldi9udWxsCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3B1X2RlYnVnLmMKQEAgLTAsMCArMSw5MDEgQEAKKy8qCisgKiBDUFUgeDg2IGFyY2hpdGVjdHVyZSBkZWJ1ZyBjb2RlCisgKgorICogQ29weXJpZ2h0KEMpIDIwMDkgSmFzd2luZGVyIFNpbmdoIFJhanB1dAorICoKKyAqIEZvciBsaWNlbmNpbmcgZGV0YWlscyBzZWUga2VybmVsLWJhc2UvQ09QWUlORworICovCisKKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKyNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPgorI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2twcm9iZXMuaD4KKyNpbmNsdWRlIDxsaW51eC91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvcGVyY3B1Lmg+CisjaW5jbHVkZSA8bGludXgvc2lnbmFsLmg+CisjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KKyNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KKworI2luY2x1ZGUgPGFzbS9jcHVfZGVidWcuaD4KKyNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KKyNpbmNsdWRlIDxhc20vc3lzdGVtLmg+CisjaW5jbHVkZSA8YXNtL3RyYXBzLmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vZGVzYy5oPgorCitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdV9jcHVYX2Jhc2UsIGNwdV9hcnJbQ1BVX1JFR19BTExfQklUXSk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGNwdV9wcml2YXRlICosIHByaXZfYXJyW01BWF9DUFVfRklMRVNdKTsKK3N0YXRpYyBERUZJTkVfUEVSX0NQVSh1bnNpZ25lZCwgY3B1X21vZGVsZmxhZyk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoaW50LCBjcHVfcHJpdl9jb3VudCk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQsIGNwdV9tb2RlbCk7CisKK3N0YXRpYyBERUZJTkVfTVVURVgoY3B1X2RlYnVnX2xvY2spOworCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqY3B1X2RlYnVnZnNfZGlyOworCitzdGF0aWMgc3RydWN0IGNwdV9kZWJ1Z19iYXNlIGNwdV9iYXNlW10gPSB7CisJeyAibWMiLAkJQ1BVX01DLAkJMAl9LAorCXsgIm1vbml0b3IiLAlDUFVfTU9OSVRPUiwJMAl9LAorCXsgInRpbWUiLAlDUFVfVElNRSwJMAl9LAorCXsgInBtYyIsCUNQVV9QTUMsCTEJfSwKKwl7ICJwbGF0Zm9ybSIsCUNQVV9QTEFURk9STSwJMAl9LAorCXsgImFwaWMiLAlDUFVfQVBJQywJMAl9LAorCXsgInBvd2Vyb24iLAlDUFVfUE9XRVJPTiwJMAl9LAorCXsgImNvbnRyb2wiLAlDUFVfQ09OVFJPTCwJMAl9LAorCXsgImZlYXR1cmVzIiwJQ1BVX0ZFQVRVUkVTLAkwCX0sCisJeyAibGFzdGJyYW5jaCIsCUNQVV9MQlJBTkNILAkwCX0sCisJeyAiYmlvcyIsCUNQVV9CSU9TLAkwCX0sCisJeyAiZnJlcSIsCUNQVV9GUkVRLAkwCX0sCisJeyAibXRyciIsCUNQVV9NVFJSLAkwCX0sCisJeyAicGVyZiIsCUNQVV9QRVJGLAkwCX0sCisJeyAiY2FjaGUiLAlDUFVfQ0FDSEUsCTAJfSwKKwl7ICJzeXNlbnRlciIsCUNQVV9TWVNFTlRFUiwJMAl9LAorCXsgInRoZXJtIiwJQ1BVX1RIRVJNLAkwCX0sCisJeyAibWlzYyIsCUNQVV9NSVNDLAkwCX0sCisJeyAiZGVidWciLAlDUFVfREVCVUcsCTAJfSwKKwl7ICJwYXQiLAlDUFVfUEFULAkwCX0sCisJeyAidm14IiwJQ1BVX1ZNWCwJMAl9LAorCXsgImNhbGwiLAlDUFVfQ0FMTCwJMAl9LAorCXsgImJhc2UiLAlDUFVfQkFTRSwJMAl9LAorCXsgInZlciIsCUNQVV9WRVIsCTAJfSwKKwl7ICJjb25mIiwJQ1BVX0NPTkYsCTAJfSwKKwl7ICJzbW0iLAlDUFVfU01NLAkwCX0sCisJeyAic3ZtIiwJQ1BVX1NWTSwJMAl9LAorCXsgIm9zdm0iLAlDUFVfT1NWTSwJMAl9LAorCXsgInRzcyIsCUNQVV9UU1MsCTAJfSwKKwl7ICJjciIsCQlDUFVfQ1IsCQkwCX0sCisJeyAiZHQiLAkJQ1BVX0RULAkJMAl9LAorCXsgInJlZ2lzdGVycyIsCUNQVV9SRUdfQUxMLAkwCX0sCit9OworCitzdGF0aWMgc3RydWN0IGNwdV9maWxlX2Jhc2UgY3B1X2ZpbGVbXSA9IHsKKwl7ICJpbmRleCIsCUNQVV9SRUdfQUxMLAkwCX0sCisJeyAidmFsdWUiLAlDUFVfUkVHX0FMTCwJMQl9LAorfTsKKworLyogSW50ZWwgUmVnaXN0ZXJzIFJhbmdlICovCitzdGF0aWMgc3RydWN0IGNwdV9kZWJ1Z19yYW5nZSBjcHVfaW50ZWxfcmFuZ2VbXSA9IHsKKwl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDEsIENQVV9NQywJQ1BVX0lOVEVMX0FMTAkJfSwKKwl7IDB4MDAwMDAwMDYsIDB4MDAwMDAwMDcsIENQVV9NT05JVE9SLAlDUFVfQ1hfQVRfWEUJCX0sCisJeyAweDAwMDAwMDEwLCAweDAwMDAwMDEwLCBDUFVfVElNRSwJQ1BVX0lOVEVMX0FMTAkJfSwKKwl7IDB4MDAwMDAwMTEsIDB4MDAwMDAwMTMsIENQVV9QTUMsCUNQVV9JTlRFTF9QRU5USVVNCX0sCisJeyAweDAwMDAwMDE3LCAweDAwMDAwMDE3LCBDUFVfUExBVEZPUk0sCUNQVV9QWF9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDAwMUIsIDB4MDAwMDAwMUIsIENQVV9BUElDLAlDUFVfUDZfQ1hfQVRfWEUJCX0sCisKKwl7IDB4MDAwMDAwMkEsIDB4MDAwMDAwMkEsIENQVV9QT1dFUk9OLAlDUFVfUFhfQ1hfQVRfWEUJCX0sCisJeyAweDAwMDAwMDJCLCAweDAwMDAwMDJCLCBDUFVfUE9XRVJPTiwJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweDAwMDAwMDJDLCAweDAwMDAwMDJDLCBDUFVfRlJFUSwJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweDAwMDAwMDNBLCAweDAwMDAwMDNBLCBDUFVfQ09OVFJPTCwJQ1BVX0NYX0FUX1hFCQl9LAorCisJeyAweDAwMDAwMDQwLCAweDAwMDAwMDQzLCBDUFVfTEJSQU5DSCwJQ1BVX1BNX0NYX0FUX1hFCQl9LAorCXsgMHgwMDAwMDA0NCwgMHgwMDAwMDA0NywgQ1BVX0xCUkFOQ0gsCUNQVV9QTV9DT19BVAkJfSwKKwl7IDB4MDAwMDAwNjAsIDB4MDAwMDAwNjMsIENQVV9MQlJBTkNILAlDUFVfQzJfQVQJCX0sCisJeyAweDAwMDAwMDY0LCAweDAwMDAwMDY3LCBDUFVfTEJSQU5DSCwJQ1BVX0lOVEVMX0FUT00JCX0sCisKKwl7IDB4MDAwMDAwNzksIDB4MDAwMDAwNzksIENQVV9CSU9TLAlDUFVfUDZfQ1hfQVRfWEUJCX0sCisJeyAweDAwMDAwMDg4LCAweDAwMDAwMDhBLCBDUFVfQ0FDSEUsCUNQVV9JTlRFTF9QNgkJfSwKKwl7IDB4MDAwMDAwOEIsIDB4MDAwMDAwOEIsIENQVV9CSU9TLAlDUFVfUDZfQ1hfQVRfWEUJCX0sCisJeyAweDAwMDAwMDlCLCAweDAwMDAwMDlCLCBDUFVfTU9OSVRPUiwJQ1BVX0lOVEVMX1hFT04JCX0sCisKKwl7IDB4MDAwMDAwQzEsIDB4MDAwMDAwQzIsIENQVV9QTUMsCUNQVV9QNl9DWF9BVAkJfSwKKwl7IDB4MDAwMDAwQ0QsIDB4MDAwMDAwQ0QsIENQVV9GUkVRLAlDUFVfQ1hfQVQJCX0sCisJeyAweDAwMDAwMEU3LCAweDAwMDAwMEU4LCBDUFVfUEVSRiwJQ1BVX0NYX0FUCQl9LAorCXsgMHgwMDAwMDBGRSwgMHgwMDAwMDBGRSwgQ1BVX01UUlIsCUNQVV9QNl9DWF9YRQkJfSwKKworCXsgMHgwMDAwMDExNiwgMHgwMDAwMDExNiwgQ1BVX0NBQ0hFLAlDUFVfSU5URUxfUDYJCX0sCisJeyAweDAwMDAwMTE4LCAweDAwMDAwMTE4LCBDUFVfQ0FDSEUsCUNQVV9JTlRFTF9QNgkJfSwKKwl7IDB4MDAwMDAxMTksIDB4MDAwMDAxMTksIENQVV9DQUNIRSwJQ1BVX0lOVEVMX1BYCQl9LAorCXsgMHgwMDAwMDExQSwgMHgwMDAwMDExQiwgQ1BVX0NBQ0hFLAlDUFVfSU5URUxfUDYJCX0sCisJeyAweDAwMDAwMTFFLCAweDAwMDAwMTFFLCBDUFVfQ0FDSEUsCUNQVV9QWF9DWF9BVAkJfSwKKworCXsgMHgwMDAwMDE3NCwgMHgwMDAwMDE3NiwgQ1BVX1NZU0VOVEVSLAlDUFVfUDZfQ1hfQVRfWEUJCX0sCisJeyAweDAwMDAwMTc5LCAweDAwMDAwMTdBLCBDUFVfTUMsCUNQVV9QWF9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDAxN0IsIDB4MDAwMDAxN0IsIENQVV9NQywJQ1BVX1A2X1hFCQl9LAorCXsgMHgwMDAwMDE4NiwgMHgwMDAwMDE4NywgQ1BVX1BNQywJQ1BVX1A2X0NYX0FUCQl9LAorCXsgMHgwMDAwMDE5OCwgMHgwMDAwMDE5OSwgQ1BVX1BFUkYsCUNQVV9QTV9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDAxOUEsIDB4MDAwMDAxOUEsIENQVV9USU1FLAlDUFVfUE1fQ1hfQVRfWEUJCX0sCisJeyAweDAwMDAwMTlCLCAweDAwMDAwMTlELCBDUFVfVEhFUk0sCUNQVV9QTV9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDAxQTAsIDB4MDAwMDAxQTAsIENQVV9NSVNDLAlDUFVfUE1fQ1hfQVRfWEUJCX0sCisKKwl7IDB4MDAwMDAxQzksIDB4MDAwMDAxQzksIENQVV9MQlJBTkNILAlDUFVfUE1fQ1hfQVQJCX0sCisJeyAweDAwMDAwMUQ3LCAweDAwMDAwMUQ4LCBDUFVfTEJSQU5DSCwJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweDAwMDAwMUQ5LCAweDAwMDAwMUQ5LCBDUFVfREVCVUcsCUNQVV9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDAxREEsIDB4MDAwMDAxREEsIENQVV9MQlJBTkNILAlDUFVfSU5URUxfWEVPTgkJfSwKKwl7IDB4MDAwMDAxREIsIDB4MDAwMDAxREIsIENQVV9MQlJBTkNILAlDUFVfUDZfWEUJCX0sCisJeyAweDAwMDAwMURDLCAweDAwMDAwMURDLCBDUFVfTEJSQU5DSCwJQ1BVX0lOVEVMX1A2CQl9LAorCXsgMHgwMDAwMDFERCwgMHgwMDAwMDFERSwgQ1BVX0xCUkFOQ0gsCUNQVV9QWF9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDAxRTAsIDB4MDAwMDAxRTAsIENQVV9MQlJBTkNILAlDUFVfSU5URUxfUDYJCX0sCisKKwl7IDB4MDAwMDAyMDAsIDB4MDAwMDAyMEYsIENQVV9NVFJSLAlDUFVfUDZfQ1hfWEUJCX0sCisJeyAweDAwMDAwMjUwLCAweDAwMDAwMjUwLCBDUFVfTVRSUiwJQ1BVX1A2X0NYX1hFCQl9LAorCXsgMHgwMDAwMDI1OCwgMHgwMDAwMDI1OSwgQ1BVX01UUlIsCUNQVV9QNl9DWF9YRQkJfSwKKwl7IDB4MDAwMDAyNjgsIDB4MDAwMDAyNkYsIENQVV9NVFJSLAlDUFVfUDZfQ1hfWEUJCX0sCisJeyAweDAwMDAwMjc3LCAweDAwMDAwMjc3LCBDUFVfUEFULAlDUFVfQzJfQVRfWEUJCX0sCisJeyAweDAwMDAwMkZGLCAweDAwMDAwMkZGLCBDUFVfTVRSUiwJQ1BVX1A2X0NYX1hFCQl9LAorCisJeyAweDAwMDAwMzAwLCAweDAwMDAwMzA4LCBDUFVfUE1DLAlDUFVfSU5URUxfWEVPTgkJfSwKKwl7IDB4MDAwMDAzMDksIDB4MDAwMDAzMEIsIENQVV9QTUMsCUNQVV9DMl9BVF9YRQkJfSwKKwl7IDB4MDAwMDAzMEMsIDB4MDAwMDAzMTEsIENQVV9QTUMsCUNQVV9JTlRFTF9YRU9OCQl9LAorCXsgMHgwMDAwMDM0NSwgMHgwMDAwMDM0NSwgQ1BVX1BNQywJQ1BVX0MyX0FUCQl9LAorCXsgMHgwMDAwMDM2MCwgMHgwMDAwMDM3MSwgQ1BVX1BNQywJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweDAwMDAwMzhELCAweDAwMDAwMzkwLCBDUFVfUE1DLAlDUFVfQzJfQVQJCX0sCisJeyAweDAwMDAwM0EwLCAweDAwMDAwM0JFLCBDUFVfUE1DLAlDUFVfSU5URUxfWEVPTgkJfSwKKwl7IDB4MDAwMDAzQzAsIDB4MDAwMDAzQ0QsIENQVV9QTUMsCUNQVV9JTlRFTF9YRU9OCQl9LAorCXsgMHgwMDAwMDNFMCwgMHgwMDAwMDNFMSwgQ1BVX1BNQywJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweDAwMDAwM0YwLCAweDAwMDAwM0YwLCBDUFVfUE1DLAlDUFVfSU5URUxfWEVPTgkJfSwKKwl7IDB4MDAwMDAzRjEsIDB4MDAwMDAzRjEsIENQVV9QTUMsCUNQVV9DMl9BVF9YRQkJfSwKKwl7IDB4MDAwMDAzRjIsIDB4MDAwMDAzRjIsIENQVV9QTUMsCUNQVV9JTlRFTF9YRU9OCQl9LAorCisJeyAweDAwMDAwNDAwLCAweDAwMDAwNDAyLCBDUFVfTUMsCUNQVV9QTV9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDA0MDMsIDB4MDAwMDA0MDMsIENQVV9NQywJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweDAwMDAwNDA0LCAweDAwMDAwNDA2LCBDUFVfTUMsCUNQVV9QTV9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDA0MDcsIDB4MDAwMDA0MDcsIENQVV9NQywJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweDAwMDAwNDA4LCAweDAwMDAwNDBBLCBDUFVfTUMsCUNQVV9QTV9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDA0MEIsIDB4MDAwMDA0MEIsIENQVV9NQywJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweDAwMDAwNDBDLCAweDAwMDAwNDBFLCBDUFVfTUMsCUNQVV9QTV9DWF9YRQkJfSwKKwl7IDB4MDAwMDA0MEYsIDB4MDAwMDA0MEYsIENQVV9NQywJQ1BVX0lOVEVMX1hFT04JCX0sCisJeyAweDAwMDAwNDEwLCAweDAwMDAwNDEyLCBDUFVfTUMsCUNQVV9QTV9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDA0MTMsIDB4MDAwMDA0MTcsIENQVV9NQywJQ1BVX0NYX0FUX1hFCQl9LAorCXsgMHgwMDAwMDQ4MCwgMHgwMDAwMDQ4QiwgQ1BVX1ZNWCwJQ1BVX0NYX0FUX1hFCQl9LAorCisJeyAweDAwMDAwNjAwLCAweDAwMDAwNjAwLCBDUFVfREVCVUcsCUNQVV9QTV9DWF9BVF9YRQkJfSwKKwl7IDB4MDAwMDA2ODAsIDB4MDAwMDA2OEYsIENQVV9MQlJBTkNILAlDUFVfSU5URUxfWEVPTgkJfSwKKwl7IDB4MDAwMDA2QzAsIDB4MDAwMDA2Q0YsIENQVV9MQlJBTkNILAlDUFVfSU5URUxfWEVPTgkJfSwKKworCXsgMHgwMDAxMDdDQywgMHgwMDAxMDdEMywgQ1BVX1BNQywJQ1BVX0lOVEVMX1hFT05fTVAJfSwKKworCXsgMHhDMDAwMDA4MCwgMHhDMDAwMDA4MCwgQ1BVX0ZFQVRVUkVTLAlDUFVfSU5URUxfWEVPTgkJfSwKKwl7IDB4QzAwMDAwODEsIDB4QzAwMDAwODIsIENQVV9DQUxMLAlDUFVfSU5URUxfWEVPTgkJfSwKKwl7IDB4QzAwMDAwODQsIDB4QzAwMDAwODQsIENQVV9DQUxMLAlDUFVfSU5URUxfWEVPTgkJfSwKKwl7IDB4QzAwMDAxMDAsIDB4QzAwMDAxMDIsIENQVV9CQVNFLAlDUFVfSU5URUxfWEVPTgkJfSwKK307CisKKy8qIEFNRCBSZWdpc3RlcnMgUmFuZ2UgKi8KK3N0YXRpYyBzdHJ1Y3QgY3B1X2RlYnVnX3JhbmdlIGNwdV9hbWRfcmFuZ2VbXSA9IHsKKwl7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDEsIENQVV9NQywJQ1BVX0sxMF9QTFVTLAkJfSwKKwl7IDB4MDAwMDAwMTAsIDB4MDAwMDAwMTAsIENQVV9USU1FLAlDUFVfSzhfUExVUywJCX0sCisJeyAweDAwMDAwMDFCLCAweDAwMDAwMDFCLCBDUFVfQVBJQywJQ1BVX0s4X1BMVVMsCQl9LAorCXsgMHgwMDAwMDAyQSwgMHgwMDAwMDAyQSwgQ1BVX1BPV0VST04sCUNQVV9LN19QTFVTCQl9LAorCXsgMHgwMDAwMDA4QiwgMHgwMDAwMDA4QiwgQ1BVX1ZFUiwJQ1BVX0s4X1BMVVMJCX0sCisJeyAweDAwMDAwMEZFLCAweDAwMDAwMEZFLCBDUFVfTVRSUiwJQ1BVX0s4X1BMVVMsCQl9LAorCisJeyAweDAwMDAwMTc0LCAweDAwMDAwMTc2LCBDUFVfU1lTRU5URVIsCUNQVV9LOF9QTFVTLAkJfSwKKwl7IDB4MDAwMDAxNzksIDB4MDAwMDAxN0IsIENQVV9NQywJQ1BVX0s4X1BMVVMsCQl9LAorCXsgMHgwMDAwMDFEOSwgMHgwMDAwMDFEOSwgQ1BVX0RFQlVHLAlDUFVfSzhfUExVUywJCX0sCisJeyAweDAwMDAwMURCLCAweDAwMDAwMURFLCBDUFVfTEJSQU5DSCwJQ1BVX0s4X1BMVVMsCQl9LAorCisJeyAweDAwMDAwMjAwLCAweDAwMDAwMjBGLCBDUFVfTVRSUiwJQ1BVX0s4X1BMVVMsCQl9LAorCXsgMHgwMDAwMDI1MCwgMHgwMDAwMDI1MCwgQ1BVX01UUlIsCUNQVV9LOF9QTFVTLAkJfSwKKwl7IDB4MDAwMDAyNTgsIDB4MDAwMDAyNTksIENQVV9NVFJSLAlDUFVfSzhfUExVUywJCX0sCisJeyAweDAwMDAwMjY4LCAweDAwMDAwMjZGLCBDUFVfTVRSUiwJQ1BVX0s4X1BMVVMsCQl9LAorCXsgMHgwMDAwMDI3NywgMHgwMDAwMDI3NywgQ1BVX1BBVCwJQ1BVX0s4X1BMVVMsCQl9LAorCXsgMHgwMDAwMDJGRiwgMHgwMDAwMDJGRiwgQ1BVX01UUlIsCUNQVV9LOF9QTFVTLAkJfSwKKworCXsgMHgwMDAwMDQwMCwgMHgwMDAwMDQxMywgQ1BVX01DLAlDUFVfSzhfUExVUywJCX0sCisKKwl7IDB4QzAwMDAwODAsIDB4QzAwMDAwODAsIENQVV9GRUFUVVJFUywJQ1BVX0FNRF9BTEwsCQl9LAorCXsgMHhDMDAwMDA4MSwgMHhDMDAwMDA4NCwgQ1BVX0NBTEwsCUNQVV9LOF9QTFVTLAkJfSwKKwl7IDB4QzAwMDAxMDAsIDB4QzAwMDAxMDIsIENQVV9CQVNFLAlDUFVfSzhfUExVUywJCX0sCisJeyAweEMwMDAwMTAzLCAweEMwMDAwMTAzLCBDUFVfVElNRSwJQ1BVX0sxMF9QTFVTLAkJfSwKKworCXsgMHhDMDAxMDAwMCwgMHhDMDAxMDAwNywgQ1BVX1BNQywJQ1BVX0s4X1BMVVMsCQl9LAorCXsgMHhDMDAxMDAxMCwgMHhDMDAxMDAxMCwgQ1BVX0NPTkYsCUNQVV9LN19QTFVTLAkJfSwKKwl7IDB4QzAwMTAwMTUsIDB4QzAwMTAwMTUsIENQVV9DT05GLAlDUFVfSzdfUExVUywJCX0sCisJeyAweEMwMDEwMDE2LCAweEMwMDEwMDFBLCBDUFVfTVRSUiwJQ1BVX0s4X1BMVVMsCQl9LAorCXsgMHhDMDAxMDAxRCwgMHhDMDAxMDAxRCwgQ1BVX01UUlIsCUNQVV9LOF9QTFVTLAkJfSwKKwl7IDB4QzAwMTAwMUYsIDB4QzAwMTAwMUYsIENQVV9DT05GLAlDUFVfSzhfUExVUywJCX0sCisJeyAweEMwMDEwMDMwLCAweEMwMDEwMDM1LCBDUFVfQklPUywJQ1BVX0s4X1BMVVMsCQl9LAorCXsgMHhDMDAxMDA0NCwgMHhDMDAxMDA0OCwgQ1BVX01DLAlDUFVfSzhfUExVUywJCX0sCisJeyAweEMwMDEwMDUwLCAweEMwMDEwMDU2LCBDUFVfU01NLAlDUFVfSzBGX1BMVVMsCQl9LAorCXsgMHhDMDAxMDA1OCwgMHhDMDAxMDA1OCwgQ1BVX0NPTkYsCUNQVV9LMTBfUExVUywJCX0sCisJeyAweEMwMDEwMDYwLCAweEMwMDEwMDYwLCBDUFVfQ0FDSEUsCUNQVV9BTURfMTEsCQl9LAorCXsgMHhDMDAxMDA2MSwgMHhDMDAxMDA2OCwgQ1BVX1NNTSwJQ1BVX0sxMF9QTFVTLAkJfSwKKwl7IDB4QzAwMTAwNjksIDB4QzAwMTAwNkIsIENQVV9TTU0sCUNQVV9BTURfMTEsCQl9LAorCXsgMHhDMDAxMDA3MCwgMHhDMDAxMDA3MSwgQ1BVX1NNTSwJQ1BVX0sxMF9QTFVTLAkJfSwKKwl7IDB4QzAwMTAxMTEsIDB4QzAwMTAxMTMsIENQVV9TTU0sCUNQVV9LOF9QTFVTLAkJfSwKKwl7IDB4QzAwMTAxMTQsIDB4QzAwMTAxMTgsIENQVV9TVk0sCUNQVV9LMTBfUExVUywJCX0sCisJeyAweEMwMDEwMTQwLCAweEMwMDEwMTQxLCBDUFVfT1NWTSwJQ1BVX0sxMF9QTFVTLAkJfSwKKwl7IDB4QzAwMTEwMjIsIDB4QzAwMTEwMjMsIENQVV9DT05GLAlDUFVfSzEwX1BMVVMsCQl9LAorfTsKKworCisvKiBJbnRlbCAqLworc3RhdGljIGludCBnZXRfaW50ZWxfbW9kZWxmbGFnKHVuc2lnbmVkIG1vZGVsKQoreworCWludCBmbGFnOworCisJc3dpdGNoIChtb2RlbCkgeworCWNhc2UgMHgwNTAxOgorCWNhc2UgMHgwNTAyOgorCWNhc2UgMHgwNTA0OgorCQlmbGFnID0gQ1BVX0lOVEVMX1BFTlRJVU07CisJCWJyZWFrOworCWNhc2UgMHgwNjAxOgorCWNhc2UgMHgwNjAzOgorCWNhc2UgMHgwNjA1OgorCWNhc2UgMHgwNjA3OgorCWNhc2UgMHgwNjA4OgorCWNhc2UgMHgwNjBBOgorCWNhc2UgMHgwNjBCOgorCQlmbGFnID0gQ1BVX0lOVEVMX1A2OworCQlicmVhazsKKwljYXNlIDB4MDYwOToKKwljYXNlIDB4MDYwRDoKKwkJZmxhZyA9IENQVV9JTlRFTF9QRU5USVVNX007CisJCWJyZWFrOworCWNhc2UgMHgwNjBFOgorCQlmbGFnID0gQ1BVX0lOVEVMX0NPUkU7CisJCWJyZWFrOworCWNhc2UgMHgwNjBGOgorCWNhc2UgMHgwNjE3OgorCQlmbGFnID0gQ1BVX0lOVEVMX0NPUkUyOworCQlicmVhazsKKwljYXNlIDB4MDYxQzoKKwkJZmxhZyA9IENQVV9JTlRFTF9BVE9NOworCQlicmVhazsKKwljYXNlIDB4MEYwMDoKKwljYXNlIDB4MEYwMToKKwljYXNlIDB4MEYwMjoKKwljYXNlIDB4MEYwMzoKKwljYXNlIDB4MEYwNDoKKwkJZmxhZyA9IENQVV9JTlRFTF9YRU9OX1A0OworCQlicmVhazsKKwljYXNlIDB4MEYwNjoKKwkJZmxhZyA9IENQVV9JTlRFTF9YRU9OX01QOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmbGFnID0gQ1BVX05PTkU7CisJCWJyZWFrOworCX0KKworCXJldHVybiBmbGFnOworfQorCisvKiBBTUQgKi8KK3N0YXRpYyBpbnQgZ2V0X2FtZF9tb2RlbGZsYWcodW5zaWduZWQgbW9kZWwpCit7CisJaW50IGZsYWc7CisKKwlzd2l0Y2ggKG1vZGVsID4+IDgpIHsKKwljYXNlIDB4NjoKKwkJZmxhZyA9IENQVV9BTURfSzY7CisJCWJyZWFrOworCWNhc2UgMHg3OgorCQlmbGFnID0gQ1BVX0FNRF9LNzsKKwkJYnJlYWs7CisJY2FzZSAweDg6CisJCWZsYWcgPSBDUFVfQU1EX0s4OworCQlicmVhazsKKwljYXNlIDB4ZjoKKwkJZmxhZyA9IENQVV9BTURfMEY7CisJCWJyZWFrOworCWNhc2UgMHgxMDoKKwkJZmxhZyA9IENQVV9BTURfMTA7CisJCWJyZWFrOworCWNhc2UgMHgxMToKKwkJZmxhZyA9IENQVV9BTURfMTE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWZsYWcgPSBDUFVfTk9ORTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGZsYWc7Cit9CisKK3N0YXRpYyBpbnQgZ2V0X2NwdV9tb2RlbGZsYWcodW5zaWduZWQgY3B1KQoreworCWludCBmbGFnOworCisJZmxhZyA9IHBlcl9jcHUoY3B1X21vZGVsLCBjcHUpOworCisJc3dpdGNoIChmbGFnID4+IDE2KSB7CisJY2FzZSBYODZfVkVORE9SX0lOVEVMOgorCQlmbGFnID0gZ2V0X2ludGVsX21vZGVsZmxhZyhmbGFnKTsKKwkJYnJlYWs7CisJY2FzZSBYODZfVkVORE9SX0FNRDoKKwkJZmxhZyA9IGdldF9hbWRfbW9kZWxmbGFnKGZsYWcgJiAweGZmZmYpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlmbGFnID0gQ1BVX05PTkU7CisJCWJyZWFrOworCX0KKworCXJldHVybiBmbGFnOworfQorCitzdGF0aWMgaW50IGdldF9jcHVfcmFuZ2VfY291bnQodW5zaWduZWQgY3B1KQoreworCWludCBpbmRleDsKKworCXN3aXRjaCAocGVyX2NwdShjcHVfbW9kZWwsIGNwdSkgPj4gMTYpIHsKKwljYXNlIFg4Nl9WRU5ET1JfSU5URUw6CisJCWluZGV4ID0gQVJSQVlfU0laRShjcHVfaW50ZWxfcmFuZ2UpOworCQlicmVhazsKKwljYXNlIFg4Nl9WRU5ET1JfQU1EOgorCQlpbmRleCA9IEFSUkFZX1NJWkUoY3B1X2FtZF9yYW5nZSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWluZGV4ID0gMDsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGluZGV4OworfQorCitzdGF0aWMgaW50IGlzX3R5cGVmbGFnX3ZhbGlkKHVuc2lnbmVkIGNwdSwgdW5zaWduZWQgZmxhZykKK3sKKwl1bnNpZ25lZCB2ZW5kb3IsIG1vZGVsZmxhZzsKKwlpbnQgaSwgaW5kZXg7CisKKwkvKiBTdGFuZGFyZCBSZWdpc3RlcnMgc2hvdWxkIGJlIGFsd2F5cyB2YWxpZCAqLworCWlmIChmbGFnID49IENQVV9UU1MpCisJCXJldHVybiAxOworCisJbW9kZWxmbGFnID0gcGVyX2NwdShjcHVfbW9kZWxmbGFnLCBjcHUpOworCXZlbmRvciA9IHBlcl9jcHUoY3B1X21vZGVsLCBjcHUpID4+IDE2OworCWluZGV4ID0gZ2V0X2NwdV9yYW5nZV9jb3VudChjcHUpOworCisJZm9yIChpID0gMDsgaSA8IGluZGV4OyBpKyspIHsKKwkJc3dpdGNoICh2ZW5kb3IpIHsKKwkJY2FzZSBYODZfVkVORE9SX0lOVEVMOgorCQkJaWYgKChjcHVfaW50ZWxfcmFuZ2VbaV0ubW9kZWwgJiBtb2RlbGZsYWcpICYmCisJCQkgICAgKGNwdV9pbnRlbF9yYW5nZVtpXS5mbGFnICYgZmxhZykpCisJCQkJcmV0dXJuIDE7CisJCQlicmVhazsKKwkJY2FzZSBYODZfVkVORE9SX0FNRDoKKwkJCWlmICgoY3B1X2FtZF9yYW5nZVtpXS5tb2RlbCAmIG1vZGVsZmxhZykgJiYKKwkJCSAgICAoY3B1X2FtZF9yYW5nZVtpXS5mbGFnICYgZmxhZykpCisJCQkJcmV0dXJuIDE7CisJCQlicmVhazsKKwkJfQorCX0KKworCS8qIEludmFsaWQgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGdldF9jcHVfcmFuZ2UodW5zaWduZWQgY3B1LCB1bnNpZ25lZCAqbWluLCB1bnNpZ25lZCAqbWF4LAorCQkJICAgICAgaW50IGluZGV4LCB1bnNpZ25lZCBmbGFnKQoreworCXVuc2lnbmVkIG1vZGVsZmxhZzsKKworCW1vZGVsZmxhZyA9IHBlcl9jcHUoY3B1X21vZGVsZmxhZywgY3B1KTsKKwkqbWF4ID0gMDsKKwlzd2l0Y2ggKHBlcl9jcHUoY3B1X21vZGVsLCBjcHUpID4+IDE2KSB7CisJY2FzZSBYODZfVkVORE9SX0lOVEVMOgorCQlpZiAoKGNwdV9pbnRlbF9yYW5nZVtpbmRleF0ubW9kZWwgJiBtb2RlbGZsYWcpICYmCisJCSAgICAoY3B1X2ludGVsX3JhbmdlW2luZGV4XS5mbGFnICYgZmxhZykpIHsKKwkJCSptaW4gPSBjcHVfaW50ZWxfcmFuZ2VbaW5kZXhdLm1pbjsKKwkJCSptYXggPSBjcHVfaW50ZWxfcmFuZ2VbaW5kZXhdLm1heDsKKwkJfQorCQlicmVhazsKKwljYXNlIFg4Nl9WRU5ET1JfQU1EOgorCQlpZiAoKGNwdV9hbWRfcmFuZ2VbaW5kZXhdLm1vZGVsICYgbW9kZWxmbGFnKSAmJgorCQkgICAgKGNwdV9hbWRfcmFuZ2VbaW5kZXhdLmZsYWcgJiBmbGFnKSkgeworCQkJKm1pbiA9IGNwdV9hbWRfcmFuZ2VbaW5kZXhdLm1pbjsKKwkJCSptYXggPSBjcHVfYW1kX3JhbmdlW2luZGV4XS5tYXg7CisJCX0KKwkJYnJlYWs7CisJfQorCisJcmV0dXJuICptYXg7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gY2FuIGFsc28gYmUgY2FsbGVkIHdpdGggc2VxID0gTlVMTCBmb3IgcHJpbnRrICovCitzdGF0aWMgdm9pZCBwcmludF9jcHVfZGF0YShzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdW5zaWduZWQgdHlwZSwKKwkJCSAgIHUzMiBsb3csIHUzMiBoaWdoKQoreworCXN0cnVjdCBjcHVfcHJpdmF0ZSAqcHJpdjsKKwl1NjQgdmFsID0gaGlnaDsKKworCWlmIChzZXEpIHsKKwkJcHJpdiA9IHNlcS0+cHJpdmF0ZTsKKwkJaWYgKHByaXYtPmZpbGUpIHsKKwkJCXZhbCA9ICh2YWwgPDwgMzIpIHwgbG93OworCQkJc2VxX3ByaW50ZihzZXEsICIweCVsbHhcbiIsIHZhbCk7CisJCX0gZWxzZQorCQkJc2VxX3ByaW50ZihzZXEsICIgJTA4eDogJTA4eF8lMDh4XG4iLAorCQkJCSAgIHR5cGUsIGhpZ2gsIGxvdyk7CisJfSBlbHNlCisJCXByaW50ayhLRVJOX0lORk8gIiAlMDh4OiAlMDh4XyUwOHhcbiIsIHR5cGUsIGhpZ2gsIGxvdyk7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gY2FuIGFsc28gYmUgY2FsbGVkIHdpdGggc2VxID0gTlVMTCBmb3IgcHJpbnRrICovCitzdGF0aWMgdm9pZCBwcmludF9tc3Ioc3RydWN0IHNlcV9maWxlICpzZXEsIHVuc2lnbmVkIGNwdSwgdW5zaWduZWQgZmxhZykKK3sKKwl1bnNpZ25lZCBtc3IsIG1zcl9taW4sIG1zcl9tYXg7CisJc3RydWN0IGNwdV9wcml2YXRlICpwcml2OworCXUzMiBsb3csIGhpZ2g7CisJaW50IGksIHJhbmdlOworCisJaWYgKHNlcSkgeworCQlwcml2ID0gc2VxLT5wcml2YXRlOworCQlpZiAocHJpdi0+ZmlsZSkgeworCQkJaWYgKCFyZG1zcl9zYWZlX29uX2NwdShwcml2LT5jcHUsIHByaXYtPnJlZywKKwkJCQkJICAgICAgICZsb3csICZoaWdoKSkKKwkJCQlwcmludF9jcHVfZGF0YShzZXEsIHByaXYtPnJlZywgbG93LCBoaWdoKTsKKwkJCXJldHVybjsKKwkJfQorCX0KKworCXJhbmdlID0gZ2V0X2NwdV9yYW5nZV9jb3VudChjcHUpOworCisJZm9yIChpID0gMDsgaSA8IHJhbmdlOyBpKyspIHsKKwkJaWYgKCFnZXRfY3B1X3JhbmdlKGNwdSwgJm1zcl9taW4sICZtc3JfbWF4LCBpLCBmbGFnKSkKKwkJCWNvbnRpbnVlOworCisJCWZvciAobXNyID0gbXNyX21pbjsgbXNyIDw9IG1zcl9tYXg7IG1zcisrKSB7CisJCQlpZiAocmRtc3Jfc2FmZV9vbl9jcHUoY3B1LCBtc3IsICZsb3csICZoaWdoKSkKKwkJCQljb250aW51ZTsKKwkJCXByaW50X2NwdV9kYXRhKHNlcSwgbXNyLCBsb3csIGhpZ2gpOworCQl9CisJfQorfQorCitzdGF0aWMgdm9pZCBwcmludF90c3Modm9pZCAqYXJnKQoreworCXN0cnVjdCBwdF9yZWdzICpyZWdzID0gdGFza19wdF9yZWdzKGN1cnJlbnQpOworCXN0cnVjdCBzZXFfZmlsZSAqc2VxID0gYXJnOworCXVuc2lnbmVkIGludCBzZWc7CisKKwlzZXFfcHJpbnRmKHNlcSwgIiBSQVhcdDogJTAxNmx4XG4iLCByZWdzLT5heCk7CisJc2VxX3ByaW50ZihzZXEsICIgUkJYXHQ6ICUwMTZseFxuIiwgcmVncy0+YngpOworCXNlcV9wcmludGYoc2VxLCAiIFJDWFx0OiAlMDE2bHhcbiIsIHJlZ3MtPmN4KTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBSRFhcdDogJTAxNmx4XG4iLCByZWdzLT5keCk7CisKKwlzZXFfcHJpbnRmKHNlcSwgIiBSU0lcdDogJTAxNmx4XG4iLCByZWdzLT5zaSk7CisJc2VxX3ByaW50ZihzZXEsICIgUkRJXHQ6ICUwMTZseFxuIiwgcmVncy0+ZGkpOworCXNlcV9wcmludGYoc2VxLCAiIFJCUFx0OiAlMDE2bHhcbiIsIHJlZ3MtPmJwKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBFU1BcdDogJTAxNmx4XG4iLCByZWdzLT5zcCk7CisKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisJc2VxX3ByaW50ZihzZXEsICIgUjA4XHQ6ICUwMTZseFxuIiwgcmVncy0+cjgpOworCXNlcV9wcmludGYoc2VxLCAiIFIwOVx0OiAlMDE2bHhcbiIsIHJlZ3MtPnI5KTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBSMTBcdDogJTAxNmx4XG4iLCByZWdzLT5yMTApOworCXNlcV9wcmludGYoc2VxLCAiIFIxMVx0OiAlMDE2bHhcbiIsIHJlZ3MtPnIxMSk7CisJc2VxX3ByaW50ZihzZXEsICIgUjEyXHQ6ICUwMTZseFxuIiwgcmVncy0+cjEyKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBSMTNcdDogJTAxNmx4XG4iLCByZWdzLT5yMTMpOworCXNlcV9wcmludGYoc2VxLCAiIFIxNFx0OiAlMDE2bHhcbiIsIHJlZ3MtPnIxNCk7CisJc2VxX3ByaW50ZihzZXEsICIgUjE1XHQ6ICUwMTZseFxuIiwgcmVncy0+cjE1KTsKKyNlbmRpZgorCisJYXNtKCJtb3ZsICUlY3MsJTAiIDogIj1yIiAoc2VnKSk7CisJc2VxX3ByaW50ZihzZXEsICIgQ1NcdDogICAgICAgICAgICAgJTA0eFxuIiwgc2VnKTsKKwlhc20oIm1vdmwgJSVkcywlMCIgOiAiPXIiIChzZWcpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBEU1x0OiAgICAgICAgICAgICAlMDR4XG4iLCBzZWcpOworCXNlcV9wcmludGYoc2VxLCAiIFNTXHQ6ICAgICAgICAgICAgICUwNGx4XG4iLCByZWdzLT5zcyAmIDB4ZmZmZik7CisJYXNtKCJtb3ZsICUlZXMsJTAiIDogIj1yIiAoc2VnKSk7CisJc2VxX3ByaW50ZihzZXEsICIgRVNcdDogICAgICAgICAgICAgJTA0eFxuIiwgc2VnKTsKKwlhc20oIm1vdmwgJSVmcywlMCIgOiAiPXIiIChzZWcpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBGU1x0OiAgICAgICAgICAgICAlMDR4XG4iLCBzZWcpOworCWFzbSgibW92bCAlJWdzLCUwIiA6ICI9ciIgKHNlZykpOworCXNlcV9wcmludGYoc2VxLCAiIEdTXHQ6ICAgICAgICAgICAgICUwNHhcbiIsIHNlZyk7CisKKwlzZXFfcHJpbnRmKHNlcSwgIiBFRkxBR1NcdDogJTAxNmx4XG4iLCByZWdzLT5mbGFncyk7CisKKwlzZXFfcHJpbnRmKHNlcSwgIiBFSVBcdDogJTAxNmx4XG4iLCByZWdzLT5pcCk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2NyKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSA9IGFyZzsKKworCXNlcV9wcmludGYoc2VxLCAiIGNyMFx0OiAlMDE2bHhcbiIsIHJlYWRfY3IwKCkpOworCXNlcV9wcmludGYoc2VxLCAiIGNyMlx0OiAlMDE2bHhcbiIsIHJlYWRfY3IyKCkpOworCXNlcV9wcmludGYoc2VxLCAiIGNyM1x0OiAlMDE2bHhcbiIsIHJlYWRfY3IzKCkpOworCXNlcV9wcmludGYoc2VxLCAiIGNyNFx0OiAlMDE2bHhcbiIsIHJlYWRfY3I0X3NhZmUoKSk7CisjaWZkZWYgQ09ORklHX1g4Nl82NAorCXNlcV9wcmludGYoc2VxLCAiIGNyOFx0OiAlMDE2bHhcbiIsIHJlYWRfY3I4KCkpOworI2VuZGlmCit9CisKK3N0YXRpYyB2b2lkIHByaW50X2Rlc2NfcHRyKGNoYXIgKnN0ciwgc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBkZXNjX3B0ciBkdCkKK3sKKwlzZXFfcHJpbnRmKHNlcSwgIiAlc1x0OiAlMDE2bGx4XG4iLCBzdHIsICh1NjQpKGR0LmFkZHJlc3MgfCBkdC5zaXplKSk7Cit9CisKK3N0YXRpYyB2b2lkIHByaW50X2R0KHZvaWQgKnNlcSkKK3sKKwlzdHJ1Y3QgZGVzY19wdHIgZHQ7CisJdW5zaWduZWQgbG9uZyBsZHQ7CisKKwkvKiBJRFQgKi8KKwlzdG9yZV9pZHQoKHN0cnVjdCBkZXNjX3B0ciAqKSZkdCk7CisJcHJpbnRfZGVzY19wdHIoIklEVCIsIHNlcSwgZHQpOworCisJLyogR0RUICovCisJc3RvcmVfZ2R0KChzdHJ1Y3QgZGVzY19wdHIgKikmZHQpOworCXByaW50X2Rlc2NfcHRyKCJHRFQiLCBzZXEsIGR0KTsKKworCS8qIExEVCAqLworCXN0b3JlX2xkdChsZHQpOworCXNlcV9wcmludGYoc2VxLCAiIExEVFx0OiAlMDE2bHhcbiIsIGxkdCk7CisKKwkvKiBUUiAqLworCXN0b3JlX3RyKGxkdCk7CisJc2VxX3ByaW50ZihzZXEsICIgVFJcdDogJTAxNmx4XG4iLCBsZHQpOworfQorCitzdGF0aWMgdm9pZCBwcmludF9kcih2b2lkICphcmcpCit7CisJc3RydWN0IHNlcV9maWxlICpzZXEgPSBhcmc7CisJdW5zaWduZWQgbG9uZyBkcjsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJLyogSWdub3JlIGRiNCwgZGI1ICovCisJCWlmICgoaSA9PSA0KSB8fCAoaSA9PSA1KSkKKwkJCWNvbnRpbnVlOworCQlnZXRfZGVidWdyZWcoZHIsIGkpOworCQlzZXFfcHJpbnRmKHNlcSwgIiBkciVkXHQ6ICUwMTZseFxuIiwgaSwgZHIpOworCX0KKworCXNlcV9wcmludGYoc2VxLCAiXG4gTVNSXHQ6XG4iKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfYXBpYyh2b2lkICphcmcpCit7CisJc3RydWN0IHNlcV9maWxlICpzZXEgPSBhcmc7CisKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwlzZXFfcHJpbnRmKHNlcSwgIiBMQVBJQ1x0OlxuIik7CisJc2VxX3ByaW50ZihzZXEsICIgSURcdFx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfSUQpID4+IDI0KTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBMVlJcdFx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfTFZSKSk7CisJc2VxX3ByaW50ZihzZXEsICIgVEFTS1BSSVx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfVEFTS1BSSSkpOworCXNlcV9wcmludGYoc2VxLCAiIEFSQlBSSVx0XHQ6ICUwOHhcbiIsICBhcGljX3JlYWQoQVBJQ19BUkJQUkkpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBQUk9DUFJJXHQ6ICUwOHhcbiIsICBhcGljX3JlYWQoQVBJQ19QUk9DUFJJKSk7CisJc2VxX3ByaW50ZihzZXEsICIgTERSXHRcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX0xEUikpOworCXNlcV9wcmludGYoc2VxLCAiIERGUlx0XHQ6ICUwOHhcbiIsICBhcGljX3JlYWQoQVBJQ19ERlIpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBTUElWXHRcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX1NQSVYpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBJU1JcdFx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfSVNSKSk7CisJc2VxX3ByaW50ZihzZXEsICIgRVNSXHRcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX0VTUikpOworCXNlcV9wcmludGYoc2VxLCAiIElDUlx0XHQ6ICUwOHhcbiIsICBhcGljX3JlYWQoQVBJQ19JQ1IpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBJQ1IyXHRcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX0lDUjIpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBMVlRUXHRcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX0xWVFQpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBMVlRUSE1SXHQ6ICUwOHhcbiIsICBhcGljX3JlYWQoQVBJQ19MVlRUSE1SKSk7CisJc2VxX3ByaW50ZihzZXEsICIgTFZUUENcdFx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfTFZUUEMpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBMVlQwXHRcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX0xWVDApKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBMVlQxXHRcdDogJTA4eFxuIiwgIGFwaWNfcmVhZChBUElDX0xWVDEpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBMVlRFUlJcdFx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfTFZURVJSKSk7CisJc2VxX3ByaW50ZihzZXEsICIgVE1JQ1RcdFx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfVE1JQ1QpKTsKKwlzZXFfcHJpbnRmKHNlcSwgIiBUTUNDVFx0XHQ6ICUwOHhcbiIsICBhcGljX3JlYWQoQVBJQ19UTUNDVCkpOworCXNlcV9wcmludGYoc2VxLCAiIFREQ1JcdFx0OiAlMDh4XG4iLCAgYXBpY19yZWFkKEFQSUNfVERDUikpOworI2VuZGlmIC8qIENPTkZJR19YODZfTE9DQUxfQVBJQyAqLworCisJc2VxX3ByaW50ZihzZXEsICJcbiBNU1JcdDpcbiIpOworfQorCitzdGF0aWMgaW50IGNwdV9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgdm9pZCAqdikKK3sKKwlzdHJ1Y3QgY3B1X3ByaXZhdGUgKnByaXYgPSBzZXEtPnByaXZhdGU7CisKKwlpZiAocHJpdiA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN3aXRjaCAoY3B1X2Jhc2VbcHJpdi0+dHlwZV0uZmxhZykgeworCWNhc2UgQ1BVX1RTUzoKKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKHByaXYtPmNwdSwgcHJpbnRfdHNzLCBzZXEsIDEpOworCQlicmVhazsKKwljYXNlIENQVV9DUjoKKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKHByaXYtPmNwdSwgcHJpbnRfY3IsIHNlcSwgMSk7CisJCWJyZWFrOworCWNhc2UgQ1BVX0RUOgorCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUocHJpdi0+Y3B1LCBwcmludF9kdCwgc2VxLCAxKTsKKwkJYnJlYWs7CisJY2FzZSBDUFVfREVCVUc6CisJCWlmIChwcml2LT5maWxlID09IENQVV9JTkRFWF9CSVQpCisJCQlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUocHJpdi0+Y3B1LCBwcmludF9kciwgc2VxLCAxKTsKKwkJcHJpbnRfbXNyKHNlcSwgcHJpdi0+Y3B1LCBjcHVfYmFzZVtwcml2LT50eXBlXS5mbGFnKTsKKwkJYnJlYWs7CisJY2FzZSBDUFVfQVBJQzoKKwkJaWYgKHByaXYtPmZpbGUgPT0gQ1BVX0lOREVYX0JJVCkKKwkJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShwcml2LT5jcHUsIHByaW50X2FwaWMsIHNlcSwgMSk7CisJCXByaW50X21zcihzZXEsIHByaXYtPmNwdSwgY3B1X2Jhc2VbcHJpdi0+dHlwZV0uZmxhZyk7CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJcHJpbnRfbXNyKHNlcSwgcHJpdi0+Y3B1LCBjcHVfYmFzZVtwcml2LT50eXBlXS5mbGFnKTsKKwkJYnJlYWs7CisJfQorCXNlcV9wcmludGYoc2VxLCAiXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCAqY3B1X3NlcV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgbG9mZl90ICpwb3MpCit7CisJaWYgKCpwb3MgPT0gMCkgLyogT25lIHRpbWUgaXMgZW5vdWdoIDstKSAqLworCQlyZXR1cm4gc2VxOworCisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyB2b2lkICpjcHVfc2VxX25leHQoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYsIGxvZmZfdCAqcG9zKQoreworCSgqcG9zKSsrOworCisJcmV0dXJuIGNwdV9zZXFfc3RhcnQoc2VxLCBwb3MpOworfQorCitzdGF0aWMgdm9pZCBjcHVfc2VxX3N0b3Aoc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpCit7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc2VxX29wZXJhdGlvbnMgY3B1X3NlcV9vcHMgPSB7CisJLnN0YXJ0CQk9IGNwdV9zZXFfc3RhcnQsCisJLm5leHQJCT0gY3B1X3NlcV9uZXh0LAorCS5zdG9wCQk9IGNwdV9zZXFfc3RvcCwKKwkuc2hvdwkJPSBjcHVfc2VxX3Nob3csCit9OworCitzdGF0aWMgaW50IGNwdV9zZXFfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgY3B1X3ByaXZhdGUgKnByaXYgPSBpbm9kZS0+aV9wcml2YXRlOworCXN0cnVjdCBzZXFfZmlsZSAqc2VxOworCWludCBlcnI7CisKKwllcnIgPSBzZXFfb3BlbihmaWxlLCAmY3B1X3NlcV9vcHMpOworCWlmICghZXJyKSB7CisJCXNlcSA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwkJc2VxLT5wcml2YXRlID0gcHJpdjsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHdyaXRlX21zcihzdHJ1Y3QgY3B1X3ByaXZhdGUgKnByaXYsIHU2NCB2YWwpCit7CisJdTMyIGxvdywgaGlnaDsKKworCWhpZ2ggPSAodmFsID4+IDMyKSAmIDB4ZmZmZmZmZmY7CisJbG93ID0gdmFsICYgMHhmZmZmZmZmZjsKKworCWlmICghd3Jtc3Jfc2FmZV9vbl9jcHUocHJpdi0+Y3B1LCBwcml2LT5yZWcsIGxvdywgaGlnaCkpCisJCXJldHVybiAwOworCisJcmV0dXJuIC1FUEVSTTsKK30KKworc3RhdGljIGludCB3cml0ZV9jcHVfcmVnaXN0ZXIoc3RydWN0IGNwdV9wcml2YXRlICpwcml2LCBjb25zdCBjaGFyICpidWYpCit7CisJaW50IHJldCA9IC1FUEVSTTsKKwl1NjQgdmFsOworCisJcmV0ID0gc3RyaWN0X3N0cnRvdWxsKGJ1ZiwgMCwgJnZhbCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBTdXBwb3J0aW5nIG9ubHkgTVNScyAqLworCWlmIChwcml2LT50eXBlIDwgQ1BVX1RTU19CSVQpCisJCXJldHVybiB3cml0ZV9tc3IocHJpdiwgdmFsKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGNwdV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKnVidWYsCisJCQkgICAgIHNpemVfdCBjb3VudCwgbG9mZl90ICpvZmYpCit7CisJc3RydWN0IHNlcV9maWxlICpzZXEgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGNwdV9wcml2YXRlICpwcml2ID0gc2VxLT5wcml2YXRlOworCWNoYXIgYnVmWzE5XTsKKworCWlmICgocHJpdiA9PSBOVUxMKSB8fCAoY291bnQgPj0gc2l6ZW9mKGJ1ZikpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChjb3B5X2Zyb21fdXNlcigmYnVmLCB1YnVmLCBjb3VudCkpCisJCXJldHVybiAtRUZBVUxUOworCisJYnVmW2NvdW50XSA9IDA7CisKKwlpZiAoKGNwdV9iYXNlW3ByaXYtPnR5cGVdLndyaXRlKSAmJiAoY3B1X2ZpbGVbcHJpdi0+ZmlsZV0ud3JpdGUpKQorCQlpZiAoIXdyaXRlX2NwdV9yZWdpc3Rlcihwcml2LCBidWYpKQorCQkJcmV0dXJuIGNvdW50OworCisJcmV0dXJuIC1FQUNDRVM7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNwdV9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbgkJPSBjcHVfc2VxX29wZW4sCisJLnJlYWQJCT0gc2VxX3JlYWQsCisJLndyaXRlCQk9IGNwdV93cml0ZSwKKwkubGxzZWVrCQk9IHNlcV9sc2VlaywKKwkucmVsZWFzZQk9IHNlcV9yZWxlYXNlLAorfTsKKworc3RhdGljIGludCBjcHVfY3JlYXRlX2ZpbGUodW5zaWduZWQgY3B1LCB1bnNpZ25lZCB0eXBlLCB1bnNpZ25lZCByZWcsCisJCQkgICB1bnNpZ25lZCBmaWxlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IGNwdV9wcml2YXRlICpwcml2ID0gTlVMTDsKKworCS8qIEFscmVhZHkgaW50aWFsaXplZCAqLworCWlmIChmaWxlID09IENQVV9JTkRFWF9CSVQpCisJCWlmIChwZXJfY3B1KGNwdV9hcnJbdHlwZV0uaW5pdCwgY3B1KSkKKwkJCXJldHVybiAwOworCisJcHJpdiA9IGt6YWxsb2Moc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKHByaXYgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlwcml2LT5jcHUgPSBjcHU7CisJcHJpdi0+dHlwZSA9IHR5cGU7CisJcHJpdi0+cmVnID0gcmVnOworCXByaXYtPmZpbGUgPSBmaWxlOworCW11dGV4X2xvY2soJmNwdV9kZWJ1Z19sb2NrKTsKKwlwZXJfY3B1KHByaXZfYXJyW3R5cGVdLCBjcHUpID0gcHJpdjsKKwlwZXJfY3B1KGNwdV9wcml2X2NvdW50LCBjcHUpKys7CisJbXV0ZXhfdW5sb2NrKCZjcHVfZGVidWdfbG9jayk7CisKKwlpZiAoZmlsZSkKKwkJZGVidWdmc19jcmVhdGVfZmlsZShjcHVfZmlsZVtmaWxlXS5uYW1lLCBTX0lSVUdPLAorCQkJCSAgICBkZW50cnksICh2b2lkICopcHJpdiwgJmNwdV9mb3BzKTsKKwllbHNlIHsKKwkJZGVidWdmc19jcmVhdGVfZmlsZShjcHVfYmFzZVt0eXBlXS5uYW1lLCBTX0lSVUdPLAorCQkJCSAgICBwZXJfY3B1KGNwdV9hcnJbdHlwZV0uZGVudHJ5LCBjcHUpLAorCQkJCSAgICAodm9pZCAqKXByaXYsICZjcHVfZm9wcyk7CisJCW11dGV4X2xvY2soJmNwdV9kZWJ1Z19sb2NrKTsKKwkJcGVyX2NwdShjcHVfYXJyW3R5cGVdLmluaXQsIGNwdSkgPSAxOworCQltdXRleF91bmxvY2soJmNwdV9kZWJ1Z19sb2NrKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjcHVfaW5pdF9yZWdmaWxlcyh1bnNpZ25lZCBjcHUsIHVuc2lnbmVkIGludCB0eXBlLCB1bnNpZ25lZCByZWcsCisJCQkgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwl1bnNpZ25lZCBmaWxlOworCWludCBlcnIgPSAwOworCisJZm9yIChmaWxlID0gMDsgZmlsZSA8ICBBUlJBWV9TSVpFKGNwdV9maWxlKTsgZmlsZSsrKSB7CisJCWVyciA9IGNwdV9jcmVhdGVfZmlsZShjcHUsIHR5cGUsIHJlZywgZmlsZSwgZGVudHJ5KTsKKwkJaWYgKGVycikKKwkJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBjcHVfaW5pdF9tc3IodW5zaWduZWQgY3B1LCB1bnNpZ25lZCB0eXBlLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJc3RydWN0IGRlbnRyeSAqY3B1X2RlbnRyeSA9IE5VTEw7CisJdW5zaWduZWQgcmVnLCByZWdfbWluLCByZWdfbWF4OworCWludCBpLCByYW5nZSwgZXJyID0gMDsKKwljaGFyIHJlZ19kaXJbMTJdOworCXUzMiBsb3csIGhpZ2g7CisKKwlyYW5nZSA9IGdldF9jcHVfcmFuZ2VfY291bnQoY3B1KTsKKworCWZvciAoaSA9IDA7IGkgPCByYW5nZTsgaSsrKSB7CisJCWlmICghZ2V0X2NwdV9yYW5nZShjcHUsICZyZWdfbWluLCAmcmVnX21heCwgaSwKKwkJCQkgICBjcHVfYmFzZVt0eXBlXS5mbGFnKSkKKwkJCWNvbnRpbnVlOworCisJCWZvciAocmVnID0gcmVnX21pbjsgcmVnIDw9IHJlZ19tYXg7IHJlZysrKSB7CisJCQlpZiAocmRtc3Jfc2FmZV9vbl9jcHUoY3B1LCByZWcsICZsb3csICZoaWdoKSkKKwkJCQljb250aW51ZTsKKworCQkJc3ByaW50ZihyZWdfZGlyLCAiMHgleCIsIHJlZyk7CisJCQljcHVfZGVudHJ5ID0gZGVidWdmc19jcmVhdGVfZGlyKHJlZ19kaXIsIGRlbnRyeSk7CisJCQllcnIgPSBjcHVfaW5pdF9yZWdmaWxlcyhjcHUsIHR5cGUsIHJlZywgY3B1X2RlbnRyeSk7CisJCQlpZiAoZXJyKQorCQkJCXJldHVybiBlcnI7CisJCX0KKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGNwdV9pbml0X2FsbHJlZyh1bnNpZ25lZCBjcHUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpjcHVfZGVudHJ5ID0gTlVMTDsKKwl1bnNpZ25lZCB0eXBlOworCWludCBlcnIgPSAwOworCisJZm9yICh0eXBlID0gMDsgdHlwZSA8ICBBUlJBWV9TSVpFKGNwdV9iYXNlKSAtIDE7IHR5cGUrKykgeworCQlpZiAoIWlzX3R5cGVmbGFnX3ZhbGlkKGNwdSwgY3B1X2Jhc2VbdHlwZV0uZmxhZykpCisJCQljb250aW51ZTsKKwkJY3B1X2RlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2RpcihjcHVfYmFzZVt0eXBlXS5uYW1lLCBkZW50cnkpOworCQlwZXJfY3B1KGNwdV9hcnJbdHlwZV0uZGVudHJ5LCBjcHUpID0gY3B1X2RlbnRyeTsKKworCQlpZiAodHlwZSA8IENQVV9UU1NfQklUKQorCQkJZXJyID0gY3B1X2luaXRfbXNyKGNwdSwgdHlwZSwgY3B1X2RlbnRyeSk7CisJCWVsc2UKKwkJCWVyciA9IGNwdV9jcmVhdGVfZmlsZShjcHUsIHR5cGUsIDAsIENQVV9JTkRFWF9CSVQsCisJCQkJCSAgICAgIGNwdV9kZW50cnkpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGNwdV9pbml0X2NwdSh2b2lkKQoreworCXN0cnVjdCBkZW50cnkgKmNwdV9kZW50cnkgPSBOVUxMOworCXN0cnVjdCBjcHVpbmZvX3g4NiAqY3B1aTsKKwljaGFyIGNwdV9kaXJbMTJdOworCXVuc2lnbmVkIGNwdTsKKwlpbnQgZXJyID0gMDsKKworCWZvciAoY3B1ID0gMDsgY3B1IDwgbnJfY3B1X2lkczsgY3B1KyspIHsKKwkJY3B1aSA9ICZjcHVfZGF0YShjcHUpOworCQlpZiAoIWNwdV9oYXMoY3B1aSwgWDg2X0ZFQVRVUkVfTVNSKSkKKwkJCWNvbnRpbnVlOworCQlwZXJfY3B1KGNwdV9tb2RlbCwgY3B1KSA9ICgoY3B1aS0+eDg2X3ZlbmRvciA8PCAxNikgfAorCQkJCQkgICAoY3B1aS0+eDg2IDw8IDgpIHwKKwkJCQkJICAgKGNwdWktPng4Nl9tb2RlbCkpOworCQlwZXJfY3B1KGNwdV9tb2RlbGZsYWcsIGNwdSkgPSBnZXRfY3B1X21vZGVsZmxhZyhjcHUpOworCisJCXNwcmludGYoY3B1X2RpciwgImNwdSVkIiwgY3B1KTsKKwkJY3B1X2RlbnRyeSA9IGRlYnVnZnNfY3JlYXRlX2RpcihjcHVfZGlyLCBjcHVfZGVidWdmc19kaXIpOworCQllcnIgPSBjcHVfaW5pdF9hbGxyZWcoY3B1LCBjcHVfZGVudHJ5KTsKKworCQlwcl9pbmZvKCJjcHUlZCglZCkgZGVidWcgZmlsZXMgJWRcbiIsCisJCQljcHUsIG5yX2NwdV9pZHMsIHBlcl9jcHUoY3B1X3ByaXZfY291bnQsIGNwdSkpOworCQlpZiAocGVyX2NwdShjcHVfcHJpdl9jb3VudCwgY3B1KSA+IE1BWF9DUFVfRklMRVMpIHsKKwkJCXByX2VycigiUmVnaXN0ZXIgZmlsZXMgY291bnQgJWQgZXhjZWVkcyBsaW1pdCAlZFxuIiwKKwkJCQlwZXJfY3B1KGNwdV9wcml2X2NvdW50LCBjcHUpLCBNQVhfQ1BVX0ZJTEVTKTsKKwkJCXBlcl9jcHUoY3B1X3ByaXZfY291bnQsIGNwdSkgPSBNQVhfQ1BVX0ZJTEVTOworCQkJZXJyID0gLUVORklMRTsKKwkJfQorCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwl9CisKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IF9faW5pdCBjcHVfZGVidWdfaW5pdCh2b2lkKQoreworCWNwdV9kZWJ1Z2ZzX2RpciA9IGRlYnVnZnNfY3JlYXRlX2RpcigiY3B1IiwgYXJjaF9kZWJ1Z2ZzX2Rpcik7CisKKwlyZXR1cm4gY3B1X2luaXRfY3B1KCk7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjcHVfZGVidWdfZXhpdCh2b2lkKQoreworCWludCBpLCBjcHU7CisKKwlpZiAoY3B1X2RlYnVnZnNfZGlyKQorCQlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoY3B1X2RlYnVnZnNfZGlyKTsKKworCWZvciAoY3B1ID0gMDsgY3B1IDwgIG5yX2NwdV9pZHM7IGNwdSsrKQorCQlmb3IgKGkgPSAwOyBpIDwgcGVyX2NwdShjcHVfcHJpdl9jb3VudCwgY3B1KTsgaSsrKQorCQkJa2ZyZWUocGVyX2NwdShwcml2X2FycltpXSwgY3B1KSk7Cit9CisKK21vZHVsZV9pbml0KGNwdV9kZWJ1Z19pbml0KTsKK21vZHVsZV9leGl0KGNwdV9kZWJ1Z19leGl0KTsKKworTU9EVUxFX0FVVEhPUigiSmFzd2luZGVyIFNpbmdoIFJhanB1dCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJDUFUgRGVidWcgbW9kdWxlIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L2N5cml4LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2N5cml4LmMKaW5kZXggZmZkMGY1ZS4uNTkzMTcxZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9jeXJpeC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvY3lyaXguYwpAQCAtNjEsMjMgKzYxLDIzIEBACiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBjaGFyIEN4ODZfZGlyMF9tc2IgX19jcHVpbml0ZGF0YSA9IDA7CiAKLXN0YXRpYyBjaGFyIEN4ODZfbW9kZWxbXVs5XSBfX2NwdWluaXRkYXRhID0geworc3RhdGljIGNvbnN0IGNoYXIgX19jcHVpbml0Y29uc3QgQ3g4Nl9tb2RlbFtdWzldID0gewogCSJDeDQ4NiIsICJDeDQ4NiIsICI1eDg2ICIsICI2eDg2IiwgIk1lZGlhR1ggIiwgIjZ4ODZNWCAiLAogCSJNIElJICIsICJVbmtub3duIgogfTsKLXN0YXRpYyBjaGFyIEN4NDg2X25hbWVbXVs1XSBfX2NwdWluaXRkYXRhID0geworc3RhdGljIGNvbnN0IGNoYXIgX19jcHVpbml0Y29uc3QgQ3g0ODZfbmFtZVtdWzVdID0gewogCSJTTEMiLCAiRExDIiwgIlNMQzIiLCAiRExDMiIsICJTUngiLCAiRFJ4IiwKIAkiU1J4MiIsICJEUngyIgogfTsKLXN0YXRpYyBjaGFyIEN4NDg2U19uYW1lW11bNF0gX19jcHVpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyIF9fY3B1aW5pdGNvbnN0IEN4NDg2U19uYW1lW11bNF0gPSB7CiAJIlMiLCAiUzIiLCAiU2UiLCAiUzJlIgogfTsKLXN0YXRpYyBjaGFyIEN4NDg2RF9uYW1lW11bNF0gX19jcHVpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBjaGFyIF9fY3B1aW5pdGNvbnN0IEN4NDg2RF9uYW1lW11bNF0gPSB7CiAJIkRYIiwgIkRYMiIsICI/IiwgIj8iLCAiPyIsICJEWDQiCiB9Owogc3RhdGljIGNoYXIgQ3g4Nl9jYltdIF9fY3B1aW5pdGRhdGEgPSAiPy41eCBDb3JlL0J1cyBDbG9jayI7Ci1zdGF0aWMgY2hhciBjeXJpeF9tb2RlbF9tdWx0MVtdIF9fY3B1aW5pdGRhdGEgPSAiMTI/PzQzIjsKLXN0YXRpYyBjaGFyIGN5cml4X21vZGVsX211bHQyW10gX19jcHVpbml0ZGF0YSA9ICIxMjIzMzQ0NSI7CitzdGF0aWMgY29uc3QgY2hhciBfX2NwdWluaXRjb25zdCBjeXJpeF9tb2RlbF9tdWx0MVtdID0gIjEyPz80MyI7CitzdGF0aWMgY29uc3QgY2hhciBfX2NwdWluaXRjb25zdCBjeXJpeF9tb2RlbF9tdWx0MltdID0gIjEyMjMzNDQ1IjsKIAogLyoKICAqIFJlc2V0IHRoZSBzbG93LWxvb3AgKFNMT1ApIGJpdCBvbiB0aGUgNjg2KEwpIHdoaWNoIGlzIHNldCBieSBzb21lIG9sZApAQCAtNDM1LDcgKzQzNSw3IEBACiAJfQogfQogCi1zdGF0aWMgc3RydWN0IGNwdV9kZXYgY3lyaXhfY3B1X2RldiBfX2NwdWluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVfZGV2IF9fY3B1aW5pdGNvbnN0IGN5cml4X2NwdV9kZXYgPSB7CiAJLmNfdmVuZG9yCT0gIkN5cml4IiwKIAkuY19pZGVudAk9IHsgIkN5cml4SW5zdGVhZCIgfSwKIAkuY19lYXJseV9pbml0CT0gZWFybHlfaW5pdF9jeXJpeCwKQEAgLTQ0Niw3ICs0NDYsNyBAQAogCiBjcHVfZGV2X3JlZ2lzdGVyKGN5cml4X2NwdV9kZXYpOwogCi1zdGF0aWMgc3RydWN0IGNwdV9kZXYgbnNjX2NwdV9kZXYgX19jcHVpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1X2RldiBfX2NwdWluaXRjb25zdCBuc2NfY3B1X2RldiA9IHsKIAkuY192ZW5kb3IJPSAiTlNDIiwKIAkuY19pZGVudAk9IHsgIkdlb2RlIGJ5IE5TQyIgfSwKIAkuY19pbml0CQk9IGluaXRfbnNjLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbC5jCmluZGV4IDFhODlhMmIuLjc0MzdmYTEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWwuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsLmMKQEAgLTE0LDYgKzE0LDcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9kcy5oPgogI2luY2x1ZGUgPGFzbS9idWdzLmg+CisjaW5jbHVkZSA8YXNtL2NwdS5oPgogCiAjaWZkZWYgQ09ORklHX1g4Nl82NAogI2luY2x1ZGUgPGFzbS90b3BvbG9neS5oPgpAQCAtNTQsNiArNTUsMTEgQEAKIAkJYy0+eDg2X2NhY2hlX2FsaWdubWVudCA9IDEyODsKICNlbmRpZgogCisJLyogQ1BVSUQgd29ya2Fyb3VuZCBmb3IgMEYzMy8wRjM0IENQVSAqLworCWlmIChjLT54ODYgPT0gMHhGICYmIGMtPng4Nl9tb2RlbCA9PSAweDMKKwkgICAgJiYgKGMtPng4Nl9tYXNrID09IDB4MyB8fCBjLT54ODZfbWFzayA9PSAweDQpKQorCQljLT54ODZfcGh5c19iaXRzID0gMzY7CisKIAkvKgogCSAqIGMtPng4Nl9wb3dlciBpcyA4MDAwXzAwMDcgZWR4LiBCaXQgOCBpcyBUU0MgcnVucyBhdCBjb25zdGFudCByYXRlCiAJICogd2l0aCBQL1Qgc3RhdGVzIGFuZCBkb2VzIG5vdCBzdG9wIGluIGRlZXAgQy1zdGF0ZXMuCkBAIC0xMTYsNiArMTIyLDI4IEBACiB9CiAjZW5kaWYKIAorc3RhdGljIHZvaWQgX19jcHVpbml0IGludGVsX3NtcF9jaGVjayhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCit7CisjaWZkZWYgQ09ORklHX1NNUAorCS8qIGNhbGxpbmcgaXMgZnJvbSBpZGVudGlmeV9zZWNvbmRhcnlfY3B1KCkgPyAqLworCWlmIChjLT5jcHVfaW5kZXggPT0gYm9vdF9jcHVfaWQpCisJCXJldHVybjsKKworCS8qCisJICogTWFzayBCLCBQZW50aXVtLCBidXQgbm90IFBlbnRpdW0gTU1YCisJICovCisJaWYgKGMtPng4NiA9PSA1ICYmCisJICAgIGMtPng4Nl9tYXNrID49IDEgJiYgYy0+eDg2X21hc2sgPD0gNCAmJgorCSAgICBjLT54ODZfbW9kZWwgPD0gMykgeworCQkvKgorCQkgKiBSZW1lbWJlciB3ZSBoYXZlIEIgc3RlcCBQZW50aWEgd2l0aCBidWdzCisJCSAqLworCQlXQVJOX09OQ0UoMSwgIldBUk5JTkc6IFNNUCBvcGVyYXRpb24gbWF5IGJlIHVucmVsaWFibGUiCisJCQkJICAgICJ3aXRoIEIgc3RlcHBpbmcgcHJvY2Vzc29ycy5cbiIpOworCX0KKyNlbmRpZgorfQorCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgaW50ZWxfd29ya2Fyb3VuZHMoc3RydWN0IGNwdWluZm9feDg2ICpjKQogewogCXVuc2lnbmVkIGxvbmcgbG8sIGhpOwpAQCAtMTkyLDYgKzIyMCw4IEBACiAjaWZkZWYgQ09ORklHX1g4Nl9OVU1BUQogCW51bWFxX3RzY19kaXNhYmxlKCk7CiAjZW5kaWYKKworCWludGVsX3NtcF9jaGVjayhjKTsKIH0KICNlbHNlCiBzdGF0aWMgdm9pZCBfX2NwdWluaXQgaW50ZWxfd29ya2Fyb3VuZHMoc3RydWN0IGNwdWluZm9feDg2ICpjKQpAQCAtMzkxLDcgKzQyMSw3IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIHN0cnVjdCBjcHVfZGV2IGludGVsX2NwdV9kZXYgX19jcHVpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1X2RldiBfX2NwdWluaXRjb25zdCBpbnRlbF9jcHVfZGV2ID0gewogCS5jX3ZlbmRvcgk9ICJJbnRlbCIsCiAJLmNfaWRlbnQJPSB7ICJHZW51aW5lSW50ZWwiIH0sCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvaW50ZWxfY2FjaGVpbmZvLmMKaW5kZXggNzI5MzUwOC4uYzQ3MWViMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9pbnRlbF9jYWNoZWluZm8uYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L2ludGVsX2NhY2hlaW5mby5jCkBAIC0zMiw3ICszMiw3IEBACiB9OwogCiAvKiBhbGwgdGhlIGNhY2hlIGRlc2NyaXB0b3IgdHlwZXMgd2UgY2FyZSBhYm91dCAobm8gVExCIG9yIHRyYWNlIGNhY2hlIGVudHJpZXMpICovCi1zdGF0aWMgc3RydWN0IF9jYWNoZV90YWJsZSBjYWNoZV90YWJsZVtdIF9fY3B1aW5pdGRhdGEgPQorc3RhdGljIGNvbnN0IHN0cnVjdCBfY2FjaGVfdGFibGUgX19jcHVpbml0Y29uc3QgY2FjaGVfdGFibGVbXSA9CiB7CiAJeyAweDA2LCBMVkxfMV9JTlNULCA4IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KIAl7IDB4MDgsIExWTF8xX0lOU1QsIDE2IH0sCS8qIDQtd2F5IHNldCBhc3NvYywgMzIgYnl0ZSBsaW5lIHNpemUgKi8KQEAgLTIwNiwxNSArMjA2LDE1IEBACiAJdW5zaWduZWQgdmFsOwogfTsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IGFzc29jc1tdIF9fY3B1aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgX19jcHVpbml0Y29uc3QgYXNzb2NzW10gPSB7CiAJWzFdID0gMSwgWzJdID0gMiwgWzRdID0gNCwgWzZdID0gOCwKIAlbOF0gPSAxNiwgWzB4YV0gPSAzMiwgWzB4Yl0gPSA0OCwKIAlbMHhjXSA9IDY0LAogCVsweGZdID0gMHhmZmZmIC8vID8/CiB9OwogCi1zdGF0aWMgdW5zaWduZWQgY2hhciBsZXZlbHNbXSBfX2NwdWluaXRkYXRhID0geyAxLCAxLCAyLCAzIH07Ci1zdGF0aWMgdW5zaWduZWQgY2hhciB0eXBlc1tdIF9fY3B1aW5pdGRhdGEgPSB7IDEsIDIsIDMsIDMgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIF9fY3B1aW5pdGNvbnN0IGxldmVsc1tdID0geyAxLCAxLCAyLCAzIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBfX2NwdWluaXRjb25zdCB0eXBlc1tdID0geyAxLCAyLCAzLCAzIH07CiAKIHN0YXRpYyB2b2lkIF9fY3B1aW5pdAogYW1kX2NwdWlkNChpbnQgbGVhZiwgdW5pb24gX2NwdWlkNF9sZWFmX2VheCAqZWF4LApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svTWFrZWZpbGUgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9NYWtlZmlsZQppbmRleCBkN2QyMzIzLi5iMmY4OTgyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9NYWtlZmlsZQpAQCAtNCwzICs0LDQgQEAKIG9iai0kKENPTkZJR19YODZfTUNFX0lOVEVMKQkrPSBtY2VfaW50ZWxfNjQubwogb2JqLSQoQ09ORklHX1g4Nl9NQ0VfQU1EKQkrPSBtY2VfYW1kXzY0Lm8KIG9iai0kKENPTkZJR19YODZfTUNFX05PTkZBVEFMKQkrPSBub24tZmF0YWwubworb2JqLSQoQ09ORklHX1g4Nl9NQ0VfVEhSRVNIT0xEKSArPSB0aHJlc2hvbGQubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfMzIuYwppbmRleCBkZmFlYmNlLi4zNTUyMTE5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfMzIuYwpAQCAtNjAsMjAgKzYwLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIG9sZF9jcjQgX19pbml0ZGF0YTsKLQotdm9pZCBfX2luaXQgc3RvcF9tY2Uodm9pZCkKLXsKLQlvbGRfY3I0ID0gcmVhZF9jcjQoKTsKLQljbGVhcl9pbl9jcjQoWDg2X0NSNF9NQ0UpOwotfQotCi12b2lkIF9faW5pdCByZXN0YXJ0X21jZSh2b2lkKQotewotCWlmIChvbGRfY3I0ICYgWDg2X0NSNF9NQ0UpCi0JCXNldF9pbl9jcjQoWDg2X0NSNF9NQ0UpOwotfQotCiBzdGF0aWMgaW50IF9faW5pdCBtY2hlY2tfZGlzYWJsZShjaGFyICpzdHIpCiB7CiAJbWNlX2Rpc2FibGVkID0gMTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV82NC5jIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzY0LmMKaW5kZXggZmU3OTk4NS4uY2ExNDYwNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlXzY0LmMKQEAgLTMsNiArMyw4IEBACiAgKiBLOCBwYXJ0cyBDb3B5cmlnaHQgMjAwMiwyMDAzIEFuZGkgS2xlZW4sIFN1U0UgTGFicy4KICAqIFJlc3QgZnJvbSB1bmtub3duIGF1dGhvcihzKS4KICAqIDIwMDQgQW5kaSBLbGVlbi4gUmV3cm90ZSBtb3N0IG9mIGl0LgorICogQ29weXJpZ2h0IDIwMDggSW50ZWwgQ29ycG9yYXRpb24KKyAqIEF1dGhvcjogQW5kaSBLbGVlbgogICovCiAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CkBAIC0yNCw2ICsyNiw5IEBACiAjaW5jbHVkZSA8bGludXgvY3R5cGUuaD4KICNpbmNsdWRlIDxsaW51eC9rbW9kLmg+CiAjaW5jbHVkZSA8bGludXgva2RlYnVnLmg+CisjaW5jbHVkZSA8bGludXgva29iamVjdC5oPgorI2luY2x1ZGUgPGxpbnV4L3N5c2ZzLmg+CisjaW5jbHVkZSA8bGludXgvcmF0ZWxpbWl0Lmg+CiAjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgogI2luY2x1ZGUgPGFzbS9tc3IuaD4KICNpbmNsdWRlIDxhc20vbWNlLmg+CkBAIC0zMiw3ICszNyw2IEBACiAjaW5jbHVkZSA8YXNtL2lkbGUuaD4KIAogI2RlZmluZSBNSVNDX01DRUxPR19NSU5PUiAyMjcKLSNkZWZpbmUgTlJfU1lTRlNfQkFOS1MgNgogCiBhdG9taWNfdCBtY2VfZW50cnk7CiAKQEAgLTQ3LDcgKzUxLDcgQEAKICAqLwogc3RhdGljIGludCB0b2xlcmFudCA9IDE7CiBzdGF0aWMgaW50IGJhbmtzOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgYmFua1tOUl9TWVNGU19CQU5LU10gPSB7IFswIC4uLiBOUl9TWVNGU19CQU5LUy0xXSA9IH4wVUwgfTsKK3N0YXRpYyB1NjQgKmJhbms7CiBzdGF0aWMgdW5zaWduZWQgbG9uZyBub3RpZnlfdXNlcjsKIHN0YXRpYyBpbnQgcmlwX21zcjsKIHN0YXRpYyBpbnQgbWNlX2Jvb3Rsb2cgPSAtMTsKQEAgLTU4LDYgKzYyLDE5IEBACiAKIHN0YXRpYyBERUNMQVJFX1dBSVRfUVVFVUVfSEVBRChtY2Vfd2FpdCk7CiAKKy8qIE1DQSBiYW5rcyBwb2xsZWQgYnkgdGhlIHBlcmlvZCBwb2xsaW5nIHRpbWVyIGZvciBjb3JyZWN0ZWQgZXZlbnRzICovCitERUZJTkVfUEVSX0NQVShtY2VfYmFua3NfdCwgbWNlX3BvbGxfYmFua3MpID0geworCVswIC4uLiBCSVRTX1RPX0xPTkdTKE1BWF9OUl9CQU5LUyktMV0gPSB+MFVMCit9OworCisvKiBEbyBpbml0aWFsIGluaXRpYWxpemF0aW9uIG9mIGEgc3RydWN0IG1jZSAqLwordm9pZCBtY2Vfc2V0dXAoc3RydWN0IG1jZSAqbSkKK3sKKwltZW1zZXQobSwgMCwgc2l6ZW9mKHN0cnVjdCBtY2UpKTsKKwltLT5jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJcmR0c2NsbChtLT50c2MpOworfQorCiAvKgogICogTG9ja2xlc3MgTUNFIGxvZ2dpbmcgaW5mcmFzdHJ1Y3R1cmUuCiAgKiBUaGlzIGF2b2lkcyBkZWFkbG9ja3Mgb24gcHJpbnRrIGxvY2tzIHdpdGhvdXQgaGF2aW5nIHRvIGJyZWFrIGxvY2tzLiBBbHNvCkBAIC0xMTksMTEgKzEzNiwxMSBAQAogCQkJcHJpbnRfc3ltYm9sKCJ7JXN9IiwgbS0+aXApOwogCQlwcmludGsoIlxuIik7CiAJfQotCXByaW50ayhLRVJOX0VNRVJHICJUU0MgJUx4ICIsIG0tPnRzYyk7CisJcHJpbnRrKEtFUk5fRU1FUkcgIlRTQyAlbGx4ICIsIG0tPnRzYyk7CiAJaWYgKG0tPmFkZHIpCi0JCXByaW50aygiQUREUiAlTHggIiwgbS0+YWRkcik7CisJCXByaW50aygiQUREUiAlbGx4ICIsIG0tPmFkZHIpOwogCWlmIChtLT5taXNjKQotCQlwcmludGsoIk1JU0MgJUx4ICIsIG0tPm1pc2MpOworCQlwcmludGsoIk1JU0MgJWxseCAiLCBtLT5taXNjKTsKIAlwcmludGsoIlxuIik7CiAJcHJpbnRrKEtFUk5fRU1FUkcgIlRoaXMgaXMgbm90IGEgc29mdHdhcmUgcHJvYmxlbSFcbiIpOwogCXByaW50ayhLRVJOX0VNRVJHICJSdW4gdGhyb3VnaCBtY2Vsb2cgLS1hc2NpaSB0byBkZWNvZGUgIgpAQCAtMTQ5LDggKzE2NiwxMCBAQAogCXBhbmljKG1zZyk7CiB9CiAKLXN0YXRpYyBpbnQgbWNlX2F2YWlsYWJsZShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCitpbnQgbWNlX2F2YWlsYWJsZShzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7CisJaWYgKG1jZV9kb250X2luaXQpCisJCXJldHVybiAwOwogCXJldHVybiBjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX01DRSkgJiYgY3B1X2hhcyhjLCBYODZfRkVBVFVSRV9NQ0EpOwogfQogCkBAIC0xNzIsNyArMTkxLDc3IEBACiB9CiAKIC8qCi0gKiBUaGUgYWN0dWFsIG1hY2hpbmUgY2hlY2sgaGFuZGxlcgorICogUG9sbCBmb3IgY29ycmVjdGVkIGV2ZW50cyBvciBldmVudHMgdGhhdCBoYXBwZW5lZCBiZWZvcmUgcmVzZXQuCisgKiBUaG9zZSBhcmUganVzdCBsb2dnZWQgdGhyb3VnaCAvZGV2L21jZWxvZy4KKyAqCisgKiBUaGlzIGlzIGV4ZWN1dGVkIGluIHN0YW5kYXJkIGludGVycnVwdCBjb250ZXh0LgorICovCit2b2lkIG1hY2hpbmVfY2hlY2tfcG9sbChlbnVtIG1jcF9mbGFncyBmbGFncywgbWNlX2JhbmtzX3QgKmIpCit7CisJc3RydWN0IG1jZSBtOworCWludCBpOworCisJbWNlX3NldHVwKCZtKTsKKworCXJkbXNybChNU1JfSUEzMl9NQ0dfU1RBVFVTLCBtLm1jZ3N0YXR1cyk7CisJZm9yIChpID0gMDsgaSA8IGJhbmtzOyBpKyspIHsKKwkJaWYgKCFiYW5rW2ldIHx8ICF0ZXN0X2JpdChpLCAqYikpCisJCQljb250aW51ZTsKKworCQltLm1pc2MgPSAwOworCQltLmFkZHIgPSAwOworCQltLmJhbmsgPSBpOworCQltLnRzYyA9IDA7CisKKwkJYmFycmllcigpOworCQlyZG1zcmwoTVNSX0lBMzJfTUMwX1NUQVRVUyArIGkqNCwgbS5zdGF0dXMpOworCQlpZiAoIShtLnN0YXR1cyAmIE1DSV9TVEFUVVNfVkFMKSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIFVuY29ycmVjdGVkIGV2ZW50cyBhcmUgaGFuZGxlZCBieSB0aGUgZXhjZXB0aW9uIGhhbmRsZXIKKwkJICogd2hlbiBpdCBpcyBlbmFibGVkLiBCdXQgd2hlbiB0aGUgZXhjZXB0aW9uIGlzIGRpc2FibGVkIGxvZworCQkgKiBldmVyeXRoaW5nLgorCQkgKgorCQkgKiBUQkQgZG8gdGhlIHNhbWUgY2hlY2sgZm9yIE1DSV9TVEFUVVNfRU4gaGVyZT8KKwkJICovCisJCWlmICgobS5zdGF0dXMgJiBNQ0lfU1RBVFVTX1VDKSAmJiAhKGZsYWdzICYgTUNQX1VDKSkKKwkJCWNvbnRpbnVlOworCisJCWlmIChtLnN0YXR1cyAmIE1DSV9TVEFUVVNfTUlTQ1YpCisJCQlyZG1zcmwoTVNSX0lBMzJfTUMwX01JU0MgKyBpKjQsIG0ubWlzYyk7CisJCWlmIChtLnN0YXR1cyAmIE1DSV9TVEFUVVNfQUREUlYpCisJCQlyZG1zcmwoTVNSX0lBMzJfTUMwX0FERFIgKyBpKjQsIG0uYWRkcik7CisKKwkJaWYgKCEoZmxhZ3MgJiBNQ1BfVElNRVNUQU1QKSkKKwkJCW0udHNjID0gMDsKKwkJLyoKKwkJICogRG9uJ3QgZ2V0IHRoZSBJUCBoZXJlIGJlY2F1c2UgaXQncyB1bmxpa2VseSB0bworCQkgKiBoYXZlIGFueXRoaW5nIHRvIGRvIHdpdGggdGhlIGFjdHVhbCBlcnJvciBsb2NhdGlvbi4KKwkJICovCisKKwkJbWNlX2xvZygmbSk7CisJCWFkZF90YWludChUQUlOVF9NQUNISU5FX0NIRUNLKTsKKworCQkvKgorCQkgKiBDbGVhciBzdGF0ZSBmb3IgdGhpcyBiYW5rLgorCQkgKi8KKwkJd3Jtc3JsKE1TUl9JQTMyX01DMF9TVEFUVVMrNCppLCAwKTsKKwl9CisKKwkvKgorCSAqIERvbid0IGNsZWFyIE1DR19TVEFUVVMgaGVyZSBiZWNhdXNlIGl0J3Mgb25seSBkZWZpbmVkIGZvcgorCSAqIGV4Y2VwdGlvbnMuCisJICovCit9CisKKy8qCisgKiBUaGUgYWN0dWFsIG1hY2hpbmUgY2hlY2sgaGFuZGxlci4gVGhpcyBvbmx5IGhhbmRsZXMgcmVhbAorICogZXhjZXB0aW9ucyB3aGVuIHNvbWV0aGluZyBnb3QgY29ycnVwdGVkIGNvbWluZyBpbiB0aHJvdWdoIGludCAxOC4KKyAqCisgKiBUaGlzIGlzIGV4ZWN1dGVkIGluIE5NSSBjb250ZXh0IG5vdCBzdWJqZWN0IHRvIG5vcm1hbCBsb2NraW5nIHJ1bGVzLiBUaGlzCisgKiBpbXBsaWVzIHRoYXQgbW9zdCBrZXJuZWwgc2VydmljZXMgY2Fubm90IGJlIHNhZmVseSB1c2VkLiBEb24ndCBldmVuCisgKiB0aGluayBhYm91dCBwdXR0aW5nIGEgcHJpbnRrIGluIHRoZXJlIQogICovCiB2b2lkIGRvX21hY2hpbmVfY2hlY2soc3RydWN0IHB0X3JlZ3MgKiByZWdzLCBsb25nIGVycm9yX2NvZGUpCiB7CkBAIC0xOTAsMTcgKzI3OSwxOCBAQAogCSAqIGVycm9yLgogCSAqLwogCWludCBraWxsX2l0ID0gMDsKKwlERUNMQVJFX0JJVE1BUCh0b2NsZWFyLCBNQVhfTlJfQkFOS1MpOwogCiAJYXRvbWljX2luYygmbWNlX2VudHJ5KTsKIAotCWlmICgocmVncwotCSAgICAgJiYgbm90aWZ5X2RpZShESUVfTk1JLCAibWFjaGluZSBjaGVjayIsIHJlZ3MsIGVycm9yX2NvZGUsCisJaWYgKG5vdGlmeV9kaWUoRElFX05NSSwgIm1hY2hpbmUgY2hlY2siLCByZWdzLCBlcnJvcl9jb2RlLAogCQkJICAgMTgsIFNJR0tJTEwpID09IE5PVElGWV9TVE9QKQotCSAgICB8fCAhYmFua3MpCisJCWdvdG8gb3V0MjsKKwlpZiAoIWJhbmtzKQogCQlnb3RvIG91dDI7CiAKLQltZW1zZXQoJm0sIDAsIHNpemVvZihzdHJ1Y3QgbWNlKSk7Ci0JbS5jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJbWNlX3NldHVwKCZtKTsKKwogCXJkbXNybChNU1JfSUEzMl9NQ0dfU1RBVFVTLCBtLm1jZ3N0YXR1cyk7CiAJLyogaWYgdGhlIHJlc3RhcnQgSVAgaXMgbm90IHZhbGlkLCB3ZSdyZSBkb25lIGZvciAqLwogCWlmICghKG0ubWNnc3RhdHVzICYgTUNHX1NUQVRVU19SSVBWKSkKQEAgLTIxMCwxOCArMzAwLDMyIEBACiAJYmFycmllcigpOwogCiAJZm9yIChpID0gMDsgaSA8IGJhbmtzOyBpKyspIHsKLQkJaWYgKGkgPCBOUl9TWVNGU19CQU5LUyAmJiAhYmFua1tpXSkKKwkJX19jbGVhcl9iaXQoaSwgdG9jbGVhcik7CisJCWlmICghYmFua1tpXSkKIAkJCWNvbnRpbnVlOwogCiAJCW0ubWlzYyA9IDA7CiAJCW0uYWRkciA9IDA7CiAJCW0uYmFuayA9IGk7Ci0JCW0udHNjID0gMDsKIAogCQlyZG1zcmwoTVNSX0lBMzJfTUMwX1NUQVRVUyArIGkqNCwgbS5zdGF0dXMpOwogCQlpZiAoKG0uc3RhdHVzICYgTUNJX1NUQVRVU19WQUwpID09IDApCiAJCQljb250aW51ZTsKIAorCQkvKgorCQkgKiBOb24gdW5jb3JyZWN0ZWQgZXJyb3JzIGFyZSBoYW5kbGVkIGJ5IG1hY2hpbmVfY2hlY2tfcG9sbAorCQkgKiBMZWF2ZSB0aGVtIGFsb25lLgorCQkgKi8KKwkJaWYgKChtLnN0YXR1cyAmIE1DSV9TVEFUVVNfVUMpID09IDApCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBTZXQgdGFpbnQgZXZlbiB3aGVuIG1hY2hpbmUgY2hlY2sgd2FzIG5vdCBlbmFibGVkLgorCQkgKi8KKwkJYWRkX3RhaW50KFRBSU5UX01BQ0hJTkVfQ0hFQ0spOworCisJCV9fc2V0X2JpdChpLCB0b2NsZWFyKTsKKwogCQlpZiAobS5zdGF0dXMgJiBNQ0lfU1RBVFVTX0VOKSB7CiAJCQkvKiBpZiBQQ0Mgd2FzIHNldCwgdGhlcmUncyBubyB3YXkgb3V0ICovCiAJCQlub193YXlfb3V0IHw9ICEhKG0uc3RhdHVzICYgTUNJX1NUQVRVU19QQ0MpOwpAQCAtMjM1LDYgKzMzOSwxMiBAQAogCQkJCQlub193YXlfb3V0ID0gMTsKIAkJCQlraWxsX2l0ID0gMTsKIAkJCX0KKwkJfSBlbHNlIHsKKwkJCS8qCisJCQkgKiBNYWNoaW5lIGNoZWNrIGV2ZW50IHdhcyBub3QgZW5hYmxlZC4gQ2xlYXIsIGJ1dAorCQkJICogaWdub3JlLgorCQkJICovCisJCQljb250aW51ZTsKIAkJfQogCiAJCWlmIChtLnN0YXR1cyAmIE1DSV9TVEFUVVNfTUlTQ1YpCkBAIC0yNDMsMTAgKzM1Myw3IEBACiAJCQlyZG1zcmwoTVNSX0lBMzJfTUMwX0FERFIgKyBpKjQsIG0uYWRkcik7CiAKIAkJbWNlX2dldF9yaXAoJm0sIHJlZ3MpOwotCQlpZiAoZXJyb3JfY29kZSA+PSAwKQotCQkJcmR0c2NsbChtLnRzYyk7Ci0JCWlmIChlcnJvcl9jb2RlICE9IC0yKQotCQkJbWNlX2xvZygmbSk7CisJCW1jZV9sb2coJm0pOwogCiAJCS8qIERpZCB0aGlzIGJhbmsgY2F1c2UgdGhlIGV4Y2VwdGlvbj8gKi8KIAkJLyogQXNzdW1lIHRoYXQgdGhlIGJhbmsgd2l0aCB1bmNvcnJlY3RhYmxlIGVycm9ycyBkaWQgaXQsCkBAIC0yNTUsMTQgKzM2Miw4IEBACiAJCQlwYW5pY20gPSBtOwogCQkJcGFuaWNtX2ZvdW5kID0gMTsKIAkJfQotCi0JCWFkZF90YWludChUQUlOVF9NQUNISU5FX0NIRUNLKTsKIAl9CiAKLQkvKiBOZXZlciBkbyBhbnl0aGluZyBmaW5hbCBpbiB0aGUgcG9sbGluZyB0aW1lciAqLwotCWlmICghcmVncykKLQkJZ290byBvdXQ7Ci0KIAkvKiBJZiB3ZSBkaWRuJ3QgZmluZCBhbiB1bmNvcnJlY3RhYmxlIGVycm9yLCBwaWNrCiAJICAgdGhlIGxhc3Qgb25lIChzaG91bGRuJ3QgaGFwcGVuLCBqdXN0IGJlaW5nIHNhZmUpLiAqLwogCWlmICghcGFuaWNtX2ZvdW5kKQpAQCAtMzA5LDEwICs0MTAsMTEgQEAKIAkvKiBub3RpZnkgdXNlcnNwYWNlIEFTQVAgKi8KIAlzZXRfdGhyZWFkX2ZsYWcoVElGX01DRV9OT1RJRlkpOwogCi0gb3V0OgogCS8qIHRoZSBsYXN0IHRoaW5nIHdlIGRvIGlzIGNsZWFyIHN0YXRlICovCi0JZm9yIChpID0gMDsgaSA8IGJhbmtzOyBpKyspCi0JCXdybXNybChNU1JfSUEzMl9NQzBfU1RBVFVTKzQqaSwgMCk7CisJZm9yIChpID0gMDsgaSA8IGJhbmtzOyBpKyspIHsKKwkJaWYgKHRlc3RfYml0KGksIHRvY2xlYXIpKQorCQkJd3Jtc3JsKE1TUl9JQTMyX01DMF9TVEFUVVMrNCppLCAwKTsKKwl9CiAJd3Jtc3JsKE1TUl9JQTMyX01DR19TVEFUVVMsIDApOwogIG91dDI6CiAJYXRvbWljX2RlYygmbWNlX2VudHJ5KTsKQEAgLTMzMiwxNSArNDM0LDEzIEBACiAgKiBhbmQgaGlzdG9yaWNhbGx5IGhhcyBiZWVuIHRoZSByZWdpc3RlciB2YWx1ZSBvZiB0aGUKICAqIE1TUl9JQTMyX1RIRVJNQUxfU1RBVFVTIChJbnRlbCkgbXNyLgogICovCi12b2lkIG1jZV9sb2dfdGhlcm1fdGhyb3RfZXZlbnQodW5zaWduZWQgaW50IGNwdSwgX191NjQgc3RhdHVzKQordm9pZCBtY2VfbG9nX3RoZXJtX3Rocm90X2V2ZW50KF9fdTY0IHN0YXR1cykKIHsKIAlzdHJ1Y3QgbWNlIG07CiAKLQltZW1zZXQoJm0sIDAsIHNpemVvZihtKSk7Ci0JbS5jcHUgPSBjcHU7CisJbWNlX3NldHVwKCZtKTsKIAltLmJhbmsgPSBNQ0VfVEhFUk1BTF9CQU5LOwogCW0uc3RhdHVzID0gc3RhdHVzOwotCXJkdHNjbGwobS50c2MpOwogCW1jZV9sb2coJm0pOwogfQogI2VuZGlmIC8qIENPTkZJR19YODZfTUNFX0lOVEVMICovCkBAIC0zNTMsMTggKzQ1MywxOCBAQAogCiBzdGF0aWMgaW50IGNoZWNrX2ludGVydmFsID0gNSAqIDYwOyAvKiA1IG1pbnV0ZXMgKi8KIHN0YXRpYyBpbnQgbmV4dF9pbnRlcnZhbDsgLyogaW4gamlmZmllcyAqLwotc3RhdGljIHZvaWQgbWNoZWNrX3RpbWVyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7Ci1zdGF0aWMgREVDTEFSRV9ERUxBWUVEX1dPUksobWNoZWNrX3dvcmssIG1jaGVja190aW1lcik7CitzdGF0aWMgdm9pZCBtY2hlY2tfdGltZXIodW5zaWduZWQgbG9uZyk7CitzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHRpbWVyX2xpc3QsIG1jZV90aW1lcik7CiAKLXN0YXRpYyB2b2lkIG1jaGVja19jaGVja19jcHUodm9pZCAqaW5mbykKK3N0YXRpYyB2b2lkIG1jaGVja190aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCiB7CisJc3RydWN0IHRpbWVyX2xpc3QgKnQgPSAmcGVyX2NwdShtY2VfdGltZXIsIGRhdGEpOworCisJV0FSTl9PTihzbXBfcHJvY2Vzc29yX2lkKCkgIT0gZGF0YSk7CisKIAlpZiAobWNlX2F2YWlsYWJsZSgmY3VycmVudF9jcHVfZGF0YSkpCi0JCWRvX21hY2hpbmVfY2hlY2soTlVMTCwgMCk7Ci19Ci0KLXN0YXRpYyB2b2lkIG1jaGVja190aW1lcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jb25fZWFjaF9jcHUobWNoZWNrX2NoZWNrX2NwdSwgTlVMTCwgMSk7CisJCW1hY2hpbmVfY2hlY2tfcG9sbChNQ1BfVElNRVNUQU1QLAorCQkJCSZfX2dldF9jcHVfdmFyKG1jZV9wb2xsX2JhbmtzKSk7CiAKIAkvKgogCSAqIEFsZXJ0IHVzZXJzcGFjZSBpZiBuZWVkZWQuICBJZiB3ZSBsb2dnZWQgYW4gTUNFLCByZWR1Y2UgdGhlCkBAIC0zNzcsMzEgKzQ3Nyw0MSBAQAogCQkJCShpbnQpcm91bmRfamlmZmllc19yZWxhdGl2ZShjaGVja19pbnRlcnZhbCpIWikpOwogCX0KIAotCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmbWNoZWNrX3dvcmssIG5leHRfaW50ZXJ2YWwpOworCXQtPmV4cGlyZXMgPSBqaWZmaWVzICsgbmV4dF9pbnRlcnZhbDsKKwlhZGRfdGltZXIodCk7CiB9CiAKK3N0YXRpYyB2b2lkIG1jZV9kb190cmlnZ2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwljYWxsX3VzZXJtb2RlaGVscGVyKHRyaWdnZXIsIHRyaWdnZXJfYXJndiwgTlVMTCwgVU1IX05PX1dBSVQpOworfQorCitzdGF0aWMgREVDTEFSRV9XT1JLKG1jZV90cmlnZ2VyX3dvcmssIG1jZV9kb190cmlnZ2VyKTsKKwogLyoKLSAqIFRoaXMgaXMgb25seSBjYWxsZWQgZnJvbSBwcm9jZXNzIGNvbnRleHQuICBUaGlzIGlzIHdoZXJlIHdlIGRvCi0gKiBhbnl0aGluZyB3ZSBuZWVkIHRvIGFsZXJ0IHVzZXJzcGFjZSBhYm91dCBuZXcgTUNFcy4gIFRoaXMgaXMgY2FsbGVkCi0gKiBkaXJlY3RseSBmcm9tIHRoZSBwb2xsZXIgYW5kIGFsc28gZnJvbSBlbnRyeS5TIGFuZCBpZGxlLCB0aGFua3MgdG8KLSAqIFRJRl9NQ0VfTk9USUZZLgorICogTm90aWZ5IHRoZSB1c2VyKHMpIGFib3V0IG5ldyBtYWNoaW5lIGNoZWNrIGV2ZW50cy4KKyAqIENhbiBiZSBjYWxsZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dCwgYnV0IG5vdCBmcm9tIG1hY2hpbmUgY2hlY2svTk1JCisgKiBjb250ZXh0LgogICovCiBpbnQgbWNlX25vdGlmeV91c2VyKHZvaWQpCiB7CisJLyogTm90IG1vcmUgdGhhbiB0d28gbWVzc2FnZXMgZXZlcnkgbWludXRlICovCisJc3RhdGljIERFRklORV9SQVRFTElNSVRfU1RBVEUocmF0ZWxpbWl0LCA2MCpIWiwgMik7CisKIAljbGVhcl90aHJlYWRfZmxhZyhUSUZfTUNFX05PVElGWSk7CiAJaWYgKHRlc3RfYW5kX2NsZWFyX2JpdCgwLCAmbm90aWZ5X3VzZXIpKSB7Ci0JCXN0YXRpYyB1bnNpZ25lZCBsb25nIGxhc3RfcHJpbnQ7Ci0JCXVuc2lnbmVkIGxvbmcgbm93ID0gamlmZmllczsKLQogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJm1jZV93YWl0KTsKLQkJaWYgKHRyaWdnZXJbMF0pCi0JCQljYWxsX3VzZXJtb2RlaGVscGVyKHRyaWdnZXIsIHRyaWdnZXJfYXJndiwgTlVMTCwKLQkJCQkJCVVNSF9OT19XQUlUKTsKIAotCQlpZiAodGltZV9hZnRlcl9lcShub3csIGxhc3RfcHJpbnQgKyAoY2hlY2tfaW50ZXJ2YWwqSFopKSkgewotCQkJbGFzdF9wcmludCA9IG5vdzsKKwkJLyoKKwkJICogVGhlcmUgaXMgbm8gcmlzayBvZiBtaXNzaW5nIG5vdGlmaWNhdGlvbnMgYmVjYXVzZQorCQkgKiB3b3JrX3BlbmRpbmcgaXMgYWx3YXlzIGNsZWFyZWQgYmVmb3JlIHRoZSBmdW5jdGlvbiBpcworCQkgKiBleGVjdXRlZC4KKwkJICovCisJCWlmICh0cmlnZ2VyWzBdICYmICF3b3JrX3BlbmRpbmcoJm1jZV90cmlnZ2VyX3dvcmspKQorCQkJc2NoZWR1bGVfd29yaygmbWNlX3RyaWdnZXJfd29yayk7CisKKwkJaWYgKF9fcmF0ZWxpbWl0KCZyYXRlbGltaXQpKQogCQkJcHJpbnRrKEtFUk5fSU5GTyAiTWFjaGluZSBjaGVjayBldmVudHMgbG9nZ2VkXG4iKTsKLQkJfQogCiAJCXJldHVybiAxOwogCX0KQEAgLTQyNSw2MyArNTM1LDc4IEBACiAKIHN0YXRpYyBfX2luaXQgaW50IHBlcmlvZGljX21jaGVja19pbml0KHZvaWQpCiB7Ci0JbmV4dF9pbnRlcnZhbCA9IGNoZWNrX2ludGVydmFsICogSFo7Ci0JaWYgKG5leHRfaW50ZXJ2YWwpCi0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmbWNoZWNrX3dvcmssCi0JCQkJICAgICAgcm91bmRfamlmZmllc19yZWxhdGl2ZShuZXh0X2ludGVydmFsKSk7Ci0JaWRsZV9ub3RpZmllcl9yZWdpc3RlcigmbWNlX2lkbGVfbm90aWZpZXIpOwotCXJldHVybiAwOworICAgICAgIGlkbGVfbm90aWZpZXJfcmVnaXN0ZXIoJm1jZV9pZGxlX25vdGlmaWVyKTsKKyAgICAgICByZXR1cm4gMDsKIH0KIF9faW5pdGNhbGwocGVyaW9kaWNfbWNoZWNrX2luaXQpOwogCi0KIC8qCiAgKiBJbml0aWFsaXplIE1hY2hpbmUgQ2hlY2tzIGZvciBhIENQVS4KICAqLwotc3RhdGljIHZvaWQgbWNlX2luaXQodm9pZCAqZHVtbXkpCitzdGF0aWMgaW50IG1jZV9jYXBfaW5pdCh2b2lkKQogewogCXU2NCBjYXA7Ci0JaW50IGk7CisJdW5zaWduZWQgYjsKIAogCXJkbXNybChNU1JfSUEzMl9NQ0dfQ0FQLCBjYXApOwotCWJhbmtzID0gY2FwICYgMHhmZjsKLQlpZiAoYmFua3MgPiBNQ0VfRVhURU5ERURfQkFOSykgewotCQliYW5rcyA9IE1DRV9FWFRFTkRFRF9CQU5LOwotCQlwcmludGsoS0VSTl9JTkZPICJNQ0U6IHdhcm5pbmc6IHVzaW5nIG9ubHkgJWQgYmFua3NcbiIsCi0JCSAgICAgICBNQ0VfRVhURU5ERURfQkFOSyk7CisJYiA9IGNhcCAmIDB4ZmY7CisJaWYgKGIgPiBNQVhfTlJfQkFOS1MpIHsKKwkJcHJpbnRrKEtFUk5fV0FSTklORworCQkgICAgICAgIk1DRTogVXNpbmcgb25seSAldSBtYWNoaW5lIGNoZWNrIGJhbmtzIG91dCBvZiAldVxuIiwKKwkJCU1BWF9OUl9CQU5LUywgYik7CisJCWIgPSBNQVhfTlJfQkFOS1M7CiAJfQorCisJLyogRG9uJ3Qgc3VwcG9ydCBhc3ltbWV0cmljIGNvbmZpZ3VyYXRpb25zIHRvZGF5ICovCisJV0FSTl9PTihiYW5rcyAhPSAwICYmIGIgIT0gYmFua3MpOworCWJhbmtzID0gYjsKKwlpZiAoIWJhbmspIHsKKwkJYmFuayA9IGttYWxsb2MoYmFua3MgKiBzaXplb2YodTY0KSwgR0ZQX0tFUk5FTCk7CisJCWlmICghYmFuaykKKwkJCXJldHVybiAtRU5PTUVNOworCQltZW1zZXQoYmFuaywgMHhmZiwgYmFua3MgKiBzaXplb2YodTY0KSk7CisJfQorCiAJLyogVXNlIGFjY3VyYXRlIFJJUCByZXBvcnRpbmcgaWYgYXZhaWxhYmxlLiAqLwogCWlmICgoY2FwICYgKDE8PDkpKSAmJiAoKGNhcCA+PiAxNikgJiAweGZmKSA+PSA5KQogCQlyaXBfbXNyID0gTVNSX0lBMzJfTUNHX0VJUDsKIAotCS8qIExvZyB0aGUgbWFjaGluZSBjaGVja3MgbGVmdCBvdmVyIGZyb20gdGhlIHByZXZpb3VzIHJlc2V0LgotCSAgIFRoaXMgYWxzbyBjbGVhcnMgYWxsIHJlZ2lzdGVycyAqLwotCWRvX21hY2hpbmVfY2hlY2soTlVMTCwgbWNlX2Jvb3Rsb2cgPyAtMSA6IC0yKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgbWNlX2luaXQodm9pZCAqZHVtbXkpCit7CisJdTY0IGNhcDsKKwlpbnQgaTsKKwltY2VfYmFua3NfdCBhbGxfYmFua3M7CisKKwkvKgorCSAqIExvZyB0aGUgbWFjaGluZSBjaGVja3MgbGVmdCBvdmVyIGZyb20gdGhlIHByZXZpb3VzIHJlc2V0LgorCSAqLworCWJpdG1hcF9maWxsKGFsbF9iYW5rcywgTUFYX05SX0JBTktTKTsKKwltYWNoaW5lX2NoZWNrX3BvbGwoTUNQX1VDLCAmYWxsX2JhbmtzKTsKIAogCXNldF9pbl9jcjQoWDg2X0NSNF9NQ0UpOwogCisJcmRtc3JsKE1TUl9JQTMyX01DR19DQVAsIGNhcCk7CiAJaWYgKGNhcCAmIE1DR19DVExfUCkKIAkJd3Jtc3IoTVNSX0lBMzJfTUNHX0NUTCwgMHhmZmZmZmZmZiwgMHhmZmZmZmZmZik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgYmFua3M7IGkrKykgewotCQlpZiAoaSA8IE5SX1NZU0ZTX0JBTktTKQotCQkJd3Jtc3JsKE1TUl9JQTMyX01DMF9DVEwrNCppLCBiYW5rW2ldKTsKLQkJZWxzZQotCQkJd3Jtc3JsKE1TUl9JQTMyX01DMF9DVEwrNCppLCB+MFVMKTsKLQorCQl3cm1zcmwoTVNSX0lBMzJfTUMwX0NUTCs0KmksIGJhbmtbaV0pOwogCQl3cm1zcmwoTVNSX0lBMzJfTUMwX1NUQVRVUys0KmksIDApOwogCX0KIH0KIAogLyogQWRkIHBlciBDUFUgc3BlY2lmaWMgd29ya2Fyb3VuZHMgaGVyZSAqLwotc3RhdGljIHZvaWQgX19jcHVpbml0IG1jZV9jcHVfcXVpcmtzKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKK3N0YXRpYyB2b2lkIG1jZV9jcHVfcXVpcmtzKHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKIAkvKiBUaGlzIHNob3VsZCBiZSBkaXNhYmxlZCBieSB0aGUgQklPUywgYnV0IGlzbid0IGFsd2F5cyAqLwogCWlmIChjLT54ODZfdmVuZG9yID09IFg4Nl9WRU5ET1JfQU1EKSB7Ci0JCWlmKGMtPng4NiA9PSAxNSkKKwkJaWYgKGMtPng4NiA9PSAxNSAmJiBiYW5rcyA+IDQpCiAJCQkvKiBkaXNhYmxlIEdBUlQgVEJMIHdhbGsgZXJyb3IgcmVwb3J0aW5nLCB3aGljaCB0cmlwcyBvZmYKIAkJCSAgIGluY29ycmVjdGx5IHdpdGggdGhlIElPTU1VICYgM3dhcmUgJiBDZXJiZXJ1cy4gKi8KLQkJCWNsZWFyX2JpdCgxMCwgJmJhbmtbNF0pOworCQkJY2xlYXJfYml0KDEwLCAodW5zaWduZWQgbG9uZyAqKSZiYW5rWzRdKTsKIAkJaWYoYy0+eDg2IDw9IDE3ICYmIG1jZV9ib290bG9nIDwgMCkKIAkJCS8qIExvdHMgb2YgYnJva2VuIEJJT1MgYXJvdW5kIHRoYXQgZG9uJ3QgY2xlYXIgdGhlbQogCQkJICAgYnkgZGVmYXVsdCBhbmQgbGVhdmUgY3JhcCBpbiB0aGVyZS4gRG9uJ3QgbG9nLiAqLwpAQCAtNTA0LDIwICs2MjksMzggQEAKIAl9CiB9CiAKK3N0YXRpYyB2b2lkIG1jZV9pbml0X3RpbWVyKHZvaWQpCit7CisJc3RydWN0IHRpbWVyX2xpc3QgKnQgPSAmX19nZXRfY3B1X3ZhcihtY2VfdGltZXIpOworCisJLyogZGF0YSByYWNlIGhhcm1sZXNzIGJlY2F1c2UgZXZlcnlvbmUgc2V0cyB0byB0aGUgc2FtZSB2YWx1ZSAqLworCWlmICghbmV4dF9pbnRlcnZhbCkKKwkJbmV4dF9pbnRlcnZhbCA9IGNoZWNrX2ludGVydmFsICogSFo7CisJaWYgKCFuZXh0X2ludGVydmFsKQorCQlyZXR1cm47CisJc2V0dXBfdGltZXIodCwgbWNoZWNrX3RpbWVyLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCXQtPmV4cGlyZXMgPSByb3VuZF9qaWZmaWVzKGppZmZpZXMgKyBuZXh0X2ludGVydmFsKTsKKwlhZGRfdGltZXIodCk7Cit9CisKIC8qCiAgKiBDYWxsZWQgZm9yIGVhY2ggYm9vdGVkIENQVSB0byBzZXQgdXAgbWFjaGluZSBjaGVja3MuCiAgKiBNdXN0IGJlIGNhbGxlZCB3aXRoIHByZWVtcHQgb2ZmLgogICovCiB2b2lkIF9fY3B1aW5pdCBtY2hlY2tfaW5pdChzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCiB7Ci0JbWNlX2NwdV9xdWlya3MoYyk7Ci0KLQlpZiAobWNlX2RvbnRfaW5pdCB8fAotCSAgICAhbWNlX2F2YWlsYWJsZShjKSkKKwlpZiAoIW1jZV9hdmFpbGFibGUoYykpCiAJCXJldHVybjsKIAorCWlmIChtY2VfY2FwX2luaXQoKSA8IDApIHsKKwkJbWNlX2RvbnRfaW5pdCA9IDE7CisJCXJldHVybjsKKwl9CisJbWNlX2NwdV9xdWlya3MoYyk7CisKIAltY2VfaW5pdChOVUxMKTsKIAltY2VfY3B1X2ZlYXR1cmVzKGMpOworCW1jZV9pbml0X3RpbWVyKCk7CiB9CiAKIC8qCkBAIC01NzMsNyArNzE2LDcgQEAKIHsKIAl1bnNpZ25lZCBsb25nICpjcHVfdHNjOwogCXN0YXRpYyBERUZJTkVfTVVURVgobWNlX3JlYWRfbXV0ZXgpOwotCXVuc2lnbmVkIG5leHQ7CisJdW5zaWduZWQgcHJldiwgbmV4dDsKIAljaGFyIF9fdXNlciAqYnVmID0gdWJ1ZjsKIAlpbnQgaSwgZXJyOwogCkBAIC01OTIsMjUgKzczNSwzMiBAQAogCX0KIAogCWVyciA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IG5leHQ7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gamlmZmllczsKKwlwcmV2ID0gMDsKKwlkbyB7CisJCWZvciAoaSA9IHByZXY7IGkgPCBuZXh0OyBpKyspIHsKKwkJCXVuc2lnbmVkIGxvbmcgc3RhcnQgPSBqaWZmaWVzOwogCi0JCXdoaWxlICghbWNlbG9nLmVudHJ5W2ldLmZpbmlzaGVkKSB7Ci0JCQlpZiAodGltZV9hZnRlcl9lcShqaWZmaWVzLCBzdGFydCArIDIpKSB7Ci0JCQkJbWVtc2V0KG1jZWxvZy5lbnRyeSArIGksMCwgc2l6ZW9mKHN0cnVjdCBtY2UpKTsKLQkJCQlnb3RvIHRpbWVvdXQ7CisJCQl3aGlsZSAoIW1jZWxvZy5lbnRyeVtpXS5maW5pc2hlZCkgeworCQkJCWlmICh0aW1lX2FmdGVyX2VxKGppZmZpZXMsIHN0YXJ0ICsgMikpIHsKKwkJCQkJbWVtc2V0KG1jZWxvZy5lbnRyeSArIGksIDAsCisJCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IG1jZSkpOworCQkJCQlnb3RvIHRpbWVvdXQ7CisJCQkJfQorCQkJCWNwdV9yZWxheCgpOwogCQkJfQotCQkJY3B1X3JlbGF4KCk7CisJCQlzbXBfcm1iKCk7CisJCQllcnIgfD0gY29weV90b191c2VyKGJ1ZiwgbWNlbG9nLmVudHJ5ICsgaSwKKwkJCQkJICAgIHNpemVvZihzdHJ1Y3QgbWNlKSk7CisJCQlidWYgKz0gc2l6ZW9mKHN0cnVjdCBtY2UpOwordGltZW91dDoKKwkJCTsKIAkJfQotCQlzbXBfcm1iKCk7Ci0JCWVyciB8PSBjb3B5X3RvX3VzZXIoYnVmLCBtY2Vsb2cuZW50cnkgKyBpLCBzaXplb2Yoc3RydWN0IG1jZSkpOwotCQlidWYgKz0gc2l6ZW9mKHN0cnVjdCBtY2UpOwotIHRpbWVvdXQ6Ci0JCTsKLQl9CiAKLQltZW1zZXQobWNlbG9nLmVudHJ5LCAwLCBuZXh0ICogc2l6ZW9mKHN0cnVjdCBtY2UpKTsKLQltY2Vsb2cubmV4dCA9IDA7CisJCW1lbXNldChtY2Vsb2cuZW50cnkgKyBwcmV2LCAwLAorCQkgICAgICAgKG5leHQgLSBwcmV2KSAqIHNpemVvZihzdHJ1Y3QgbWNlKSk7CisJCXByZXYgPSBuZXh0OworCQluZXh0ID0gY21weGNoZygmbWNlbG9nLm5leHQsIHByZXYsIDApOworCX0gd2hpbGUgKG5leHQgIT0gcHJldik7CiAKIAlzeW5jaHJvbml6ZV9zY2hlZCgpOwogCkBAIC02ODAsMjAgKzgzMCw2IEBACiAJJm1jZV9jaHJkZXZfb3BzLAogfTsKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgb2xkX2NyNCBfX2luaXRkYXRhOwotCi12b2lkIF9faW5pdCBzdG9wX21jZSh2b2lkKQotewotCW9sZF9jcjQgPSByZWFkX2NyNCgpOwotCWNsZWFyX2luX2NyNChYODZfQ1I0X01DRSk7Ci19Ci0KLXZvaWQgX19pbml0IHJlc3RhcnRfbWNlKHZvaWQpCi17Ci0JaWYgKG9sZF9jcjQgJiBYODZfQ1I0X01DRSkKLQkJc2V0X2luX2NyNChYODZfQ1I0X01DRSk7Ci19Ci0KIC8qCiAgKiBPbGQgc3R5bGUgYm9vdCBvcHRpb25zIHBhcnNpbmcuIE9ubHkgZm9yIGNvbXBhdGliaWxpdHkuCiAgKi8KQEAgLTcwMyw4ICs4MzksNyBAQAogCXJldHVybiAxOwogfQogCi0vKiBtY2U9b2ZmIGRpc2FibGVzIG1hY2hpbmUgY2hlY2suIE5vdGUgeW91IGNhbiByZS1lbmFibGUgaXQgbGF0ZXIKLSAgIHVzaW5nIHN5c2ZzLgorLyogbWNlPW9mZiBkaXNhYmxlcyBtYWNoaW5lIGNoZWNrLgogICAgbWNlPVRPTEVSQU5DRUxFVkVMIChudW1iZXIsIHNlZSBhYm92ZSkKICAgIG1jZT1ib290bG9nIExvZyBNQ0VzIGZyb20gYmVmb3JlIGJvb3RpbmcuIERpc2FibGVkIGJ5IGRlZmF1bHQgb24gQU1ELgogICAgbWNlPW5vYm9vdGxvZyBEb24ndCBsb2cgTUNFcyBmcm9tIGJlZm9yZSBib290aW5nLiAqLwpAQCAtNzI4LDYgKzg2MywyOSBAQAogICogU3lzZnMgc3VwcG9ydAogICovCiAKKy8qCisgKiBEaXNhYmxlIG1hY2hpbmUgY2hlY2tzIG9uIHN1c3BlbmQgYW5kIHNodXRkb3duLiBXZSBjYW4ndCByZWFsbHkgaGFuZGxlCisgKiB0aGVtIGxhdGVyLgorICovCitzdGF0aWMgaW50IG1jZV9kaXNhYmxlKHZvaWQpCit7CisJaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYmFua3M7IGkrKykKKwkJd3Jtc3JsKE1TUl9JQTMyX01DMF9DVEwgKyBpKjQsIDApOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1jZV9zdXNwZW5kKHN0cnVjdCBzeXNfZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBzdGF0ZSkKK3sKKwlyZXR1cm4gbWNlX2Rpc2FibGUoKTsKK30KKworc3RhdGljIGludCBtY2Vfc2h1dGRvd24oc3RydWN0IHN5c19kZXZpY2UgKmRldikKK3sKKwlyZXR1cm4gbWNlX2Rpc2FibGUoKTsKK30KKwogLyogT24gcmVzdW1lIGNsZWFyIGFsbCBNQ0Ugc3RhdGUuIERvbid0IHdhbnQgdG8gc2VlIGxlZnRvdmVycyBmcm9tIHRoZSBCSU9TLgogICAgT25seSBvbmUgQ1BVIGlzIGFjdGl2ZSBhdCB0aGlzIHRpbWUsIHRoZSBvdGhlcnMgZ2V0IHJlYWRkZWQgbGF0ZXIgdXNpbmcKICAgIENQVSBob3RwbHVnLiAqLwpAQCAtNzM4LDIwICs4OTYsMjQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIHZvaWQgbWNlX2NwdV9yZXN0YXJ0KHZvaWQgKmRhdGEpCit7CisJZGVsX3RpbWVyX3N5bmMoJl9fZ2V0X2NwdV92YXIobWNlX3RpbWVyKSk7CisJaWYgKG1jZV9hdmFpbGFibGUoJmN1cnJlbnRfY3B1X2RhdGEpKQorCQltY2VfaW5pdChOVUxMKTsKKwltY2VfaW5pdF90aW1lcigpOworfQorCiAvKiBSZWluaXQgTUNFcyBhZnRlciB1c2VyIGNvbmZpZ3VyYXRpb24gY2hhbmdlcyAqLwogc3RhdGljIHZvaWQgbWNlX3Jlc3RhcnQodm9pZCkKIHsKLQlpZiAobmV4dF9pbnRlcnZhbCkKLQkJY2FuY2VsX2RlbGF5ZWRfd29yaygmbWNoZWNrX3dvcmspOwotCS8qIFRpbWVyIHJhY2UgaXMgaGFybWxlc3MgaGVyZSAqLwotCW9uX2VhY2hfY3B1KG1jZV9pbml0LCBOVUxMLCAxKTsKIAluZXh0X2ludGVydmFsID0gY2hlY2tfaW50ZXJ2YWwgKiBIWjsKLQlpZiAobmV4dF9pbnRlcnZhbCkKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZtY2hlY2tfd29yaywKLQkJCQkgICAgICByb3VuZF9qaWZmaWVzX3JlbGF0aXZlKG5leHRfaW50ZXJ2YWwpKTsKKwlvbl9lYWNoX2NwdShtY2VfY3B1X3Jlc3RhcnQsIE5VTEwsIDEpOwogfQogCiBzdGF0aWMgc3RydWN0IHN5c2Rldl9jbGFzcyBtY2Vfc3lzY2xhc3MgPSB7CisJLnN1c3BlbmQgPSBtY2Vfc3VzcGVuZCwKKwkuc2h1dGRvd24gPSBtY2Vfc2h1dGRvd24sCiAJLnJlc3VtZSA9IG1jZV9yZXN1bWUsCiAJLm5hbWUgPSAibWFjaGluZWNoZWNrIiwKIH07CkBAIC03NzgsMTYgKzk0MCwyNiBAQAogCX0JCQkJCQkJCVwKIAlzdGF0aWMgU1lTREVWX0FUVFIobmFtZSwgMDY0NCwgc2hvd18gIyMgbmFtZSwgc2V0XyAjIyBuYW1lKTsKIAotLyoKLSAqIFRCRCBzaG91bGQgZ2VuZXJhdGUgdGhlc2UgZHluYW1pY2FsbHkgYmFzZWQgb24gbnVtYmVyIG9mIGF2YWlsYWJsZSBiYW5rcy4KLSAqIEhhdmUgb25seSA2IGNvbnRvbCBiYW5rcyBpbiAvc3lzZnMgdW50aWwgdGhlbi4KLSAqLwotQUNDRVNTT1IoYmFuazBjdGwsYmFua1swXSxtY2VfcmVzdGFydCgpKQotQUNDRVNTT1IoYmFuazFjdGwsYmFua1sxXSxtY2VfcmVzdGFydCgpKQotQUNDRVNTT1IoYmFuazJjdGwsYmFua1syXSxtY2VfcmVzdGFydCgpKQotQUNDRVNTT1IoYmFuazNjdGwsYmFua1szXSxtY2VfcmVzdGFydCgpKQotQUNDRVNTT1IoYmFuazRjdGwsYmFua1s0XSxtY2VfcmVzdGFydCgpKQotQUNDRVNTT1IoYmFuazVjdGwsYmFua1s1XSxtY2VfcmVzdGFydCgpKQorc3RhdGljIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICpiYW5rX2F0dHJzOworCitzdGF0aWMgc3NpemVfdCBzaG93X2Jhbmsoc3RydWN0IHN5c19kZXZpY2UgKnMsIHN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphdHRyLAorCQkJIGNoYXIgKmJ1ZikKK3sKKwl1NjQgYiA9IGJhbmtbYXR0ciAtIGJhbmtfYXR0cnNdOworCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVsbHhcbiIsIGIpOworfQorCitzdGF0aWMgc3NpemVfdCBzZXRfYmFuayhzdHJ1Y3Qgc3lzX2RldmljZSAqcywgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKmF0dHIsCisJCQljb25zdCBjaGFyICpidWYsIHNpemVfdCBzaXopCit7CisJY2hhciAqZW5kOworCXU2NCBuZXcgPSBzaW1wbGVfc3RydG91bGwoYnVmLCAmZW5kLCAwKTsKKwlpZiAoZW5kID09IGJ1ZikKKwkJcmV0dXJuIC1FSU5WQUw7CisJYmFua1thdHRyIC0gYmFua19hdHRyc10gPSBuZXc7CisJbWNlX3Jlc3RhcnQoKTsKKwlyZXR1cm4gZW5kLWJ1ZjsKK30KIAogc3RhdGljIHNzaXplX3Qgc2hvd190cmlnZ2VyKHN0cnVjdCBzeXNfZGV2aWNlICpzLCBzdHJ1Y3Qgc3lzZGV2X2F0dHJpYnV0ZSAqYXR0ciwKIAkJCQljaGFyICpidWYpCkBAIC04MTQsOCArOTg2LDYgQEAKIHN0YXRpYyBTWVNERVZfSU5UX0FUVFIodG9sZXJhbnQsIDA2NDQsIHRvbGVyYW50KTsKIEFDQ0VTU09SKGNoZWNrX2ludGVydmFsLGNoZWNrX2ludGVydmFsLG1jZV9yZXN0YXJ0KCkpCiBzdGF0aWMgc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUgKm1jZV9hdHRyaWJ1dGVzW10gPSB7Ci0JJmF0dHJfYmFuazBjdGwsICZhdHRyX2JhbmsxY3RsLCAmYXR0cl9iYW5rMmN0bCwKLQkmYXR0cl9iYW5rM2N0bCwgJmF0dHJfYmFuazRjdGwsICZhdHRyX2Jhbms1Y3RsLAogCSZhdHRyX3RvbGVyYW50LmF0dHIsICZhdHRyX2NoZWNrX2ludGVydmFsLCAmYXR0cl90cmlnZ2VyLAogCU5VTEwKIH07CkBAIC04NDUsMTEgKzEwMTUsMjIgQEAKIAkJaWYgKGVycikKIAkJCWdvdG8gZXJyb3I7CiAJfQorCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKSB7CisJCWVyciA9IHN5c2Rldl9jcmVhdGVfZmlsZSgmcGVyX2NwdShkZXZpY2VfbWNlLCBjcHUpLAorCQkJCQkmYmFua19hdHRyc1tpXSk7CisJCWlmIChlcnIpCisJCQlnb3RvIGVycm9yMjsKKwl9CiAJY3B1X3NldChjcHUsIG1jZV9kZXZpY2VfaW5pdGlhbGl6ZWQpOwogCiAJcmV0dXJuIDA7CitlcnJvcjI6CisJd2hpbGUgKC0taSA+PSAwKSB7CisJCXN5c2Rldl9yZW1vdmVfZmlsZSgmcGVyX2NwdShkZXZpY2VfbWNlLCBjcHUpLAorCQkJCQkmYmFua19hdHRyc1tpXSk7CisJfQogZXJyb3I6Ci0Jd2hpbGUgKGktLSkgeworCXdoaWxlICgtLWkgPj0gMCkgewogCQlzeXNkZXZfcmVtb3ZlX2ZpbGUoJnBlcl9jcHUoZGV2aWNlX21jZSxjcHUpLAogCQkJCSAgIG1jZV9hdHRyaWJ1dGVzW2ldKTsKIAl9CkBAIC04NjgsMTUgKzEwNDksNDYgQEAKIAlmb3IgKGkgPSAwOyBtY2VfYXR0cmlidXRlc1tpXTsgaSsrKQogCQlzeXNkZXZfcmVtb3ZlX2ZpbGUoJnBlcl9jcHUoZGV2aWNlX21jZSxjcHUpLAogCQkJbWNlX2F0dHJpYnV0ZXNbaV0pOworCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKQorCQlzeXNkZXZfcmVtb3ZlX2ZpbGUoJnBlcl9jcHUoZGV2aWNlX21jZSwgY3B1KSwKKwkJCSZiYW5rX2F0dHJzW2ldKTsKIAlzeXNkZXZfdW5yZWdpc3RlcigmcGVyX2NwdShkZXZpY2VfbWNlLGNwdSkpOwogCWNwdV9jbGVhcihjcHUsIG1jZV9kZXZpY2VfaW5pdGlhbGl6ZWQpOwogfQogCisvKiBNYWtlIHN1cmUgdGhlcmUgYXJlIG5vIG1hY2hpbmUgY2hlY2tzIG9uIG9mZmxpbmVkIENQVXMuICovCitzdGF0aWMgdm9pZCBtY2VfZGlzYWJsZV9jcHUodm9pZCAqaCkKK3sKKwlpbnQgaTsKKwl1bnNpZ25lZCBsb25nIGFjdGlvbiA9ICoodW5zaWduZWQgbG9uZyAqKWg7CisKKwlpZiAoIW1jZV9hdmFpbGFibGUoJmN1cnJlbnRfY3B1X2RhdGEpKQorCQlyZXR1cm47CisJaWYgKCEoYWN0aW9uICYgQ1BVX1RBU0tTX0ZST1pFTikpCisJCWNtY2lfY2xlYXIoKTsKKwlmb3IgKGkgPSAwOyBpIDwgYmFua3M7IGkrKykKKwkJd3Jtc3JsKE1TUl9JQTMyX01DMF9DVEwgKyBpKjQsIDApOworfQorCitzdGF0aWMgdm9pZCBtY2VfcmVlbmFibGVfY3B1KHZvaWQgKmgpCit7CisJaW50IGk7CisJdW5zaWduZWQgbG9uZyBhY3Rpb24gPSAqKHVuc2lnbmVkIGxvbmcgKiloOworCisJaWYgKCFtY2VfYXZhaWxhYmxlKCZjdXJyZW50X2NwdV9kYXRhKSkKKwkJcmV0dXJuOworCWlmICghKGFjdGlvbiAmIENQVV9UQVNLU19GUk9aRU4pKQorCQljbWNpX3JlZW5hYmxlKCk7CisJZm9yIChpID0gMDsgaSA8IGJhbmtzOyBpKyspCisJCXdybXNybChNU1JfSUEzMl9NQzBfQ1RMICsgaSo0LCBiYW5rW2ldKTsKK30KKwogLyogR2V0IG5vdGlmaWVkIHdoZW4gYSBjcHUgY29tZXMgb24vb2ZmLiBCZSBob3RwbHVnIGZyaWVuZGx5LiAqLwogc3RhdGljIGludCBfX2NwdWluaXQgbWNlX2NwdV9jYWxsYmFjayhzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5mYiwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGFjdGlvbiwgdm9pZCAqaGNwdSkKIHsKIAl1bnNpZ25lZCBpbnQgY3B1ID0gKHVuc2lnbmVkIGxvbmcpaGNwdTsKKwlzdHJ1Y3QgdGltZXJfbGlzdCAqdCA9ICZwZXJfY3B1KG1jZV90aW1lciwgY3B1KTsKIAogCXN3aXRjaCAoYWN0aW9uKSB7CiAJY2FzZSBDUFVfT05MSU5FOgpAQCAtODkxLDYgKzExMDMsMjEgQEAKIAkJCXRocmVzaG9sZF9jcHVfY2FsbGJhY2soYWN0aW9uLCBjcHUpOwogCQltY2VfcmVtb3ZlX2RldmljZShjcHUpOwogCQlicmVhazsKKwljYXNlIENQVV9ET1dOX1BSRVBBUkU6CisJY2FzZSBDUFVfRE9XTl9QUkVQQVJFX0ZST1pFTjoKKwkJZGVsX3RpbWVyX3N5bmModCk7CisJCXNtcF9jYWxsX2Z1bmN0aW9uX3NpbmdsZShjcHUsIG1jZV9kaXNhYmxlX2NwdSwgJmFjdGlvbiwgMSk7CisJCWJyZWFrOworCWNhc2UgQ1BVX0RPV05fRkFJTEVEOgorCWNhc2UgQ1BVX0RPV05fRkFJTEVEX0ZST1pFTjoKKwkJdC0+ZXhwaXJlcyA9IHJvdW5kX2ppZmZpZXMoamlmZmllcyArIG5leHRfaW50ZXJ2YWwpOworCQlhZGRfdGltZXJfb24odCwgY3B1KTsKKwkJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGNwdSwgbWNlX3JlZW5hYmxlX2NwdSwgJmFjdGlvbiwgMSk7CisJCWJyZWFrOworCWNhc2UgQ1BVX1BPU1RfREVBRDoKKwkJLyogaW50ZW50aW9uYWxseSBpZ25vcmluZyBmcm96ZW4gaGVyZSAqLworCQljbWNpX3JlZGlzY292ZXIoY3B1KTsKKwkJYnJlYWs7CiAJfQogCXJldHVybiBOT1RJRllfT0s7CiB9CkBAIC04OTksNiArMTEyNiwzNCBAQAogCS5ub3RpZmllcl9jYWxsID0gbWNlX2NwdV9jYWxsYmFjaywKIH07CiAKK3N0YXRpYyBfX2luaXQgaW50IG1jZV9pbml0X2JhbmtzKHZvaWQpCit7CisJaW50IGk7CisKKwliYW5rX2F0dHJzID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN5c2Rldl9hdHRyaWJ1dGUpICogYmFua3MsCisJCQkJR0ZQX0tFUk5FTCk7CisJaWYgKCFiYW5rX2F0dHJzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKSB7CisJCXN0cnVjdCBzeXNkZXZfYXR0cmlidXRlICphID0gJmJhbmtfYXR0cnNbaV07CisJCWEtPmF0dHIubmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiYmFuayVkIiwgaSk7CisJCWlmICghYS0+YXR0ci5uYW1lKQorCQkJZ290byBub21lbTsKKwkJYS0+YXR0ci5tb2RlID0gMDY0NDsKKwkJYS0+c2hvdyA9IHNob3dfYmFuazsKKwkJYS0+c3RvcmUgPSBzZXRfYmFuazsKKwl9CisJcmV0dXJuIDA7CisKK25vbWVtOgorCXdoaWxlICgtLWkgPj0gMCkKKwkJa2ZyZWUoYmFua19hdHRyc1tpXS5hdHRyLm5hbWUpOworCWtmcmVlKGJhbmtfYXR0cnMpOworCWJhbmtfYXR0cnMgPSBOVUxMOworCXJldHVybiAtRU5PTUVNOworfQorCiBzdGF0aWMgX19pbml0IGludCBtY2VfaW5pdF9kZXZpY2Uodm9pZCkKIHsKIAlpbnQgZXJyOwpAQCAtOTA2LDYgKzExNjEsMTEgQEAKIAogCWlmICghbWNlX2F2YWlsYWJsZSgmYm9vdF9jcHVfZGF0YSkpCiAJCXJldHVybiAtRUlPOworCisJZXJyID0gbWNlX2luaXRfYmFua3MoKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCiAJZXJyID0gc3lzZGV2X2NsYXNzX3JlZ2lzdGVyKCZtY2Vfc3lzY2xhc3MpOwogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfYW1kXzY0LmMKaW5kZXggOTgxNzUwNi4uN2QwMWJlOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tY2hlY2svbWNlX2FtZF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9hbWRfNjQuYwpAQCAtNzksNiArNzksOCBAQAogCiBzdGF0aWMgREVGSU5FX1BFUl9DUFUodW5zaWduZWQgY2hhciwgYmFua19tYXApOwkvKiBzZWUgd2hpY2ggYmFua3MgYXJlIG9uICovCiAKK3N0YXRpYyB2b2lkIGFtZF90aHJlc2hvbGRfaW50ZXJydXB0KHZvaWQpOworCiAvKgogICogQ1BVIEluaXRpYWxpemF0aW9uCiAgKi8KQEAgLTkwLDcgKzkyLDggQEAKIH07CiAKIC8qIG11c3QgYmUgY2FsbGVkIHdpdGggY29ycmVjdCBjcHUgYWZmaW5pdHkgKi8KLXN0YXRpYyBsb25nIHRocmVzaG9sZF9yZXN0YXJ0X2Jhbmsodm9pZCAqX3RyKQorLyogQ2FsbGVkIHZpYSBzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoKSAqLworc3RhdGljIHZvaWQgdGhyZXNob2xkX3Jlc3RhcnRfYmFuayh2b2lkICpfdHIpCiB7CiAJc3RydWN0IHRocmVzaF9yZXN0YXJ0ICp0ciA9IF90cjsKIAl1MzIgbWNpX21pc2NfaGksIG1jaV9taXNjX2xvOwpAQCAtMTE3LDcgKzEyMCw2IEBACiAKIAltY2lfbWlzY19oaSB8PSBNQVNLX0NPVU5UX0VOX0hJOwogCXdybXNyKHRyLT5iLT5hZGRyZXNzLCBtY2lfbWlzY19sbywgbWNpX21pc2NfaGkpOwotCXJldHVybiAwOwogfQogCiAvKiBjcHUgaW5pdCBlbnRyeSBwb2ludCwgY2FsbGVkIGZyb20gbWNlLmMgd2l0aCBwcmVlbXB0IG9mZiAqLwpAQCAtMTc0LDYgKzE3Niw4IEBACiAJCQl0ci5yZXNldCA9IDA7CiAJCQl0ci5vbGRfbGltaXQgPSAwOwogCQkJdGhyZXNob2xkX3Jlc3RhcnRfYmFuaygmdHIpOworCisJCQltY2VfdGhyZXNob2xkX3ZlY3RvciA9IGFtZF90aHJlc2hvbGRfaW50ZXJydXB0OwogCQl9CiAJfQogfQpAQCAtMTg3LDE5ICsxOTEsMTMgQEAKICAqIHRoZSBpbnRlcnJ1cHQgZ29lcyBvZmYgd2hlbiBlcnJvcl9jb3VudCByZWFjaGVzIHRocmVzaG9sZF9saW1pdC4KICAqIHRoZSBoYW5kbGVyIHdpbGwgc2ltcGx5IGxvZyBtY2Vsb2cgdy8gc29mdHdhcmUgZGVmaW5lZCBiYW5rIG51bWJlci4KICAqLwotYXNtbGlua2FnZSB2b2lkIG1jZV90aHJlc2hvbGRfaW50ZXJydXB0KHZvaWQpCitzdGF0aWMgdm9pZCBhbWRfdGhyZXNob2xkX2ludGVycnVwdCh2b2lkKQogewogCXVuc2lnbmVkIGludCBiYW5rLCBibG9jazsKIAlzdHJ1Y3QgbWNlIG07CiAJdTMyIGxvdyA9IDAsIGhpZ2ggPSAwLCBhZGRyZXNzID0gMDsKIAotCWFja19BUElDX2lycSgpOwotCWV4aXRfaWRsZSgpOwotCWlycV9lbnRlcigpOwotCi0JbWVtc2V0KCZtLCAwLCBzaXplb2YobSkpOwotCXJkdHNjbGwobS50c2MpOwotCW0uY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOworCW1jZV9zZXR1cCgmbSk7CiAKIAkvKiBhc3N1bWUgZmlyc3QgYmFuayBjYXVzZWQgaXQgKi8KIAlmb3IgKGJhbmsgPSAwOyBiYW5rIDwgTlJfQkFOS1M7ICsrYmFuaykgewpAQCAtMjMzLDcgKzIzMSw4IEBACiAKIAkJCS8qIExvZyB0aGUgbWFjaGluZSBjaGVjayB0aGF0IGNhdXNlZCB0aGUgdGhyZXNob2xkCiAJCQkgICBldmVudC4gKi8KLQkJCWRvX21hY2hpbmVfY2hlY2soTlVMTCwgMCk7CisJCQltYWNoaW5lX2NoZWNrX3BvbGwoTUNQX1RJTUVTVEFNUCwKKwkJCQkJJl9fZ2V0X2NwdV92YXIobWNlX3BvbGxfYmFua3MpKTsKIAogCQkJaWYgKGhpZ2ggJiBNQVNLX09WRVJGTE9XX0hJKSB7CiAJCQkJcmRtc3JsKGFkZHJlc3MsIG0ubWlzYyk7CkBAIC0yNDMsMTMgKzI0MiwxMCBAQAogCQkJCSAgICAgICArIGJhbmsgKiBOUl9CTE9DS1MKIAkJCQkgICAgICAgKyBibG9jazsKIAkJCQltY2VfbG9nKCZtKTsKLQkJCQlnb3RvIG91dDsKKwkJCQlyZXR1cm47CiAJCQl9CiAJCX0KIAl9Ci1vdXQ6Ci0JaW5jX2lycV9zdGF0KGlycV90aHJlc2hvbGRfY291bnQpOwotCWlycV9leGl0KCk7CiB9CiAKIC8qCkBAIC0yODMsNyArMjc5LDcgQEAKIAl0ci5iID0gYjsKIAl0ci5yZXNldCA9IDA7CiAJdHIub2xkX2xpbWl0ID0gMDsKLQl3b3JrX29uX2NwdShiLT5jcHUsIHRocmVzaG9sZF9yZXN0YXJ0X2JhbmssICZ0cik7CisJc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlKGItPmNwdSwgdGhyZXNob2xkX3Jlc3RhcnRfYmFuaywgJnRyLCAxKTsKIAogCXJldHVybiBlbmQgLSBidWY7CiB9CkBAIC0zMDUsMjMgKzMwMSwzMiBAQAogCXRyLmIgPSBiOwogCXRyLnJlc2V0ID0gMDsKIAotCXdvcmtfb25fY3B1KGItPmNwdSwgdGhyZXNob2xkX3Jlc3RhcnRfYmFuaywgJnRyKTsKKwlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoYi0+Y3B1LCB0aHJlc2hvbGRfcmVzdGFydF9iYW5rLCAmdHIsIDEpOwogCiAJcmV0dXJuIGVuZCAtIGJ1ZjsKIH0KIAotc3RhdGljIGxvbmcgbG9jYWxfZXJyb3JfY291bnQodm9pZCAqX2IpCitzdHJ1Y3QgdGhyZXNob2xkX2Jsb2NrX2Nyb3NzX2NwdSB7CisJc3RydWN0IHRocmVzaG9sZF9ibG9jayAqdGI7CisJbG9uZyByZXR2YWw7Cit9OworCitzdGF0aWMgdm9pZCBsb2NhbF9lcnJvcl9jb3VudF9oYW5kbGVyKHZvaWQgKl90YmNjKQogewotCXN0cnVjdCB0aHJlc2hvbGRfYmxvY2sgKmIgPSBfYjsKKwlzdHJ1Y3QgdGhyZXNob2xkX2Jsb2NrX2Nyb3NzX2NwdSAqdGJjYyA9IF90YmNjOworCXN0cnVjdCB0aHJlc2hvbGRfYmxvY2sgKmIgPSB0YmNjLT50YjsKIAl1MzIgbG93LCBoaWdoOwogCiAJcmRtc3IoYi0+YWRkcmVzcywgbG93LCBoaWdoKTsKLQlyZXR1cm4gKGhpZ2ggJiAweEZGRikgLSAoVEhSRVNIT0xEX01BWCAtIGItPnRocmVzaG9sZF9saW1pdCk7CisJdGJjYy0+cmV0dmFsID0gKGhpZ2ggJiAweEZGRikgLSAoVEhSRVNIT0xEX01BWCAtIGItPnRocmVzaG9sZF9saW1pdCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfZXJyb3JfY291bnQoc3RydWN0IHRocmVzaG9sZF9ibG9jayAqYiwgY2hhciAqYnVmKQogewotCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVseFxuIiwgd29ya19vbl9jcHUoYi0+Y3B1LCBsb2NhbF9lcnJvcl9jb3VudCwgYikpOworCXN0cnVjdCB0aHJlc2hvbGRfYmxvY2tfY3Jvc3NfY3B1IHRiY2MgPSB7IC50YiA9IGIsIH07CisKKwlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoYi0+Y3B1LCBsb2NhbF9lcnJvcl9jb3VudF9oYW5kbGVyLCAmdGJjYywgMSk7CisJcmV0dXJuIHNwcmludGYoYnVmLCAiJWx4XG4iLCB0YmNjLnJldHZhbCk7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IHN0b3JlX2Vycm9yX2NvdW50KHN0cnVjdCB0aHJlc2hvbGRfYmxvY2sgKmIsCkBAIC0zMjksNyArMzM0LDcgQEAKIHsKIAlzdHJ1Y3QgdGhyZXNoX3Jlc3RhcnQgdHIgPSB7IC5iID0gYiwgLnJlc2V0ID0gMSwgLm9sZF9saW1pdCA9IDAgfTsKIAotCXdvcmtfb25fY3B1KGItPmNwdSwgdGhyZXNob2xkX3Jlc3RhcnRfYmFuaywgJnRyKTsKKwlzbXBfY2FsbF9mdW5jdGlvbl9zaW5nbGUoYi0+Y3B1LCB0aHJlc2hvbGRfcmVzdGFydF9iYW5rLCAmdHIsIDEpOwogCXJldHVybiAxOwogfQogCkBAIC0zOTgsNyArNDAzLDcgQEAKIAlpZiAoKGJhbmsgPj0gTlJfQkFOS1MpIHx8IChibG9jayA+PSBOUl9CTE9DS1MpKQogCQlyZXR1cm4gMDsKIAotCWlmIChyZG1zcl9zYWZlKGFkZHJlc3MsICZsb3csICZoaWdoKSkKKwlpZiAocmRtc3Jfc2FmZV9vbl9jcHUoY3B1LCBhZGRyZXNzLCAmbG93LCAmaGlnaCkpCiAJCXJldHVybiAwOwogCiAJaWYgKCEoaGlnaCAmIE1BU0tfVkFMSURfSEkpKSB7CkBAIC00NjIsMTIgKzQ2NywxMSBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBfX2NwdWluaXQgbG9uZyBsb2NhbF9hbGxvY2F0ZV90aHJlc2hvbGRfYmxvY2tzKHZvaWQgKl9iYW5rKQorc3RhdGljIF9fY3B1aW5pdCBsb25nCitsb2NhbF9hbGxvY2F0ZV90aHJlc2hvbGRfYmxvY2tzKGludCBjcHUsIHVuc2lnbmVkIGludCBiYW5rKQogewotCXVuc2lnbmVkIGludCAqYmFuayA9IF9iYW5rOwotCi0JcmV0dXJuIGFsbG9jYXRlX3RocmVzaG9sZF9ibG9ja3Moc21wX3Byb2Nlc3Nvcl9pZCgpLCAqYmFuaywgMCwKLQkJCQkJIE1TUl9JQTMyX01DMF9NSVNDICsgKmJhbmsgKiA0KTsKKwlyZXR1cm4gYWxsb2NhdGVfdGhyZXNob2xkX2Jsb2NrcyhjcHUsIGJhbmssIDAsCisJCQkJCSBNU1JfSUEzMl9NQzBfTUlTQyArIGJhbmsgKiA0KTsKIH0KIAogLyogc3ltbGlua3Mgc2libGluZyBzaGFyZWQgYmFua3MgdG8gZmlyc3QgY29yZS4gIGZpcnN0IGNvcmUgb3ducyBkaXIvZmlsZXMuICovCkBAIC01MzAsNyArNTM0LDcgQEAKIAogCXBlcl9jcHUodGhyZXNob2xkX2JhbmtzLCBjcHUpW2JhbmtdID0gYjsKIAotCWVyciA9IHdvcmtfb25fY3B1KGNwdSwgbG9jYWxfYWxsb2NhdGVfdGhyZXNob2xkX2Jsb2NrcywgJmJhbmspOworCWVyciA9IGxvY2FsX2FsbG9jYXRlX3RocmVzaG9sZF9ibG9ja3MoY3B1LCBiYW5rKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dF9mcmVlOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay9tY2VfaW50ZWxfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9pbnRlbF82NC5jCmluZGV4IGFhNWUyODcuLjU3ZGYzZDMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9pbnRlbF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL21jZV9pbnRlbF82NC5jCkBAIC0xLDYgKzEsOCBAQAogLyoKICAqIEludGVsIHNwZWNpZmljIE1DRSBmZWF0dXJlcy4KICAqIENvcHlyaWdodCAyMDA0IFp3YW5lIE13YWlrYW1ibyA8endhbmVAbGludXhwb3dlci5jYT4KKyAqIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBJbnRlbCBDb3Jwb3JhdGlvbgorICogQXV0aG9yOiBBbmRpIEtsZWVuCiAgKi8KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTEzLDYgKzE1LDcgQEAKICNpbmNsdWRlIDxhc20vaHdfaXJxLmg+CiAjaW5jbHVkZSA8YXNtL2lkbGUuaD4KICNpbmNsdWRlIDxhc20vdGhlcm1fdGhyb3QuaD4KKyNpbmNsdWRlIDxhc20vYXBpYy5oPgogCiBhc21saW5rYWdlIHZvaWQgc21wX3RoZXJtYWxfaW50ZXJydXB0KHZvaWQpCiB7CkBAIC0yNSw3ICsyOCw3IEBACiAKIAlyZG1zcmwoTVNSX0lBMzJfVEhFUk1fU1RBVFVTLCBtc3JfdmFsKTsKIAlpZiAodGhlcm1fdGhyb3RfcHJvY2Vzcyhtc3JfdmFsICYgMSkpCi0JCW1jZV9sb2dfdGhlcm1fdGhyb3RfZXZlbnQoc21wX3Byb2Nlc3Nvcl9pZCgpLCBtc3JfdmFsKTsKKwkJbWNlX2xvZ190aGVybV90aHJvdF9ldmVudChtc3JfdmFsKTsKIAogCWluY19pcnFfc3RhdChpcnFfdGhlcm1hbF9jb3VudCk7CiAJaXJxX2V4aXQoKTsKQEAgLTg1LDcgKzg4LDIwOSBAQAogCXJldHVybjsKIH0KIAorLyoKKyAqIFN1cHBvcnQgZm9yIEludGVsIENvcnJlY3QgTWFjaGluZSBDaGVjayBJbnRlcnJ1cHRzLiBUaGlzIGFsbG93cworICogdGhlIENQVSB0byByYWlzZSBhbiBpbnRlcnJ1cHQgd2hlbiBhIGNvcnJlY3RlZCBtYWNoaW5lIGNoZWNrIGhhcHBlbmVkLgorICogTm9ybWFsbHkgd2UgcGljayB0aG9zZSB1cCB1c2luZyBhIHJlZ3VsYXIgcG9sbGluZyB0aW1lci4KKyAqIEFsc28gc3VwcG9ydHMgcmVsaWFibGUgZGlzY292ZXJ5IG9mIHNoYXJlZCBiYW5rcy4KKyAqLworCitzdGF0aWMgREVGSU5FX1BFUl9DUFUobWNlX2JhbmtzX3QsIG1jZV9iYW5rc19vd25lZCk7CisKKy8qCisgKiBjbWNpX2Rpc2NvdmVyX2xvY2sgcHJvdGVjdHMgYWdhaW5zdCBwYXJhbGxlbCBkaXNjb3ZlcnkgYXR0ZW1wdHMKKyAqIHdoaWNoIGNvdWxkIHJhY2UgYWdhaW5zdCBlYWNoIG90aGVyLgorICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNtY2lfZGlzY292ZXJfbG9jayk7CisKKyNkZWZpbmUgQ01DSV9USFJFU0hPTEQgMQorCitzdGF0aWMgaW50IGNtY2lfc3VwcG9ydGVkKGludCAqYmFua3MpCit7CisJdTY0IGNhcDsKKworCS8qCisJICogVmVuZG9yIGNoZWNrIGlzIG5vdCBzdHJpY3RseSBuZWVkZWQsIGJ1dCB0aGUgaW5pdGlhbAorCSAqIGluaXRpYWxpemF0aW9uIGlzIHZlbmRvciBrZXllZCBhbmQgdGhpcworCSAqIG1ha2VzIHN1cmUgbm9uZSBvZiB0aGUgYmFja2Rvb3JzIGFyZSBlbnRlcmVkIG90aGVyd2lzZS4KKwkgKi8KKwlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfSU5URUwpCisJCXJldHVybiAwOworCWlmICghY3B1X2hhc19hcGljIHx8IGxhcGljX2dldF9tYXhsdnQoKSA8IDYpCisJCXJldHVybiAwOworCXJkbXNybChNU1JfSUEzMl9NQ0dfQ0FQLCBjYXApOworCSpiYW5rcyA9IG1pbl90KHVuc2lnbmVkLCBNQVhfTlJfQkFOS1MsIGNhcCAmIDB4ZmYpOworCXJldHVybiAhIShjYXAgJiBNQ0dfQ01DSV9QKTsKK30KKworLyoKKyAqIFRoZSBpbnRlcnJ1cHQgaGFuZGxlci4gVGhpcyBpcyBjYWxsZWQgb24gZXZlcnkgZXZlbnQuCisgKiBKdXN0IGNhbGwgdGhlIHBvbGxlciBkaXJlY3RseSB0byBsb2cgYW55IGV2ZW50cy4KKyAqIFRoaXMgY291bGQgaW4gdGhlb3J5IGluY3JlYXNlIHRoZSB0aHJlc2hvbGQgdW5kZXIgaGlnaCBsb2FkLAorICogYnV0IGRvZXNuJ3QgZm9yIG5vdy4KKyAqLworc3RhdGljIHZvaWQgaW50ZWxfdGhyZXNob2xkX2ludGVycnVwdCh2b2lkKQoreworCW1hY2hpbmVfY2hlY2tfcG9sbChNQ1BfVElNRVNUQU1QLCAmX19nZXRfY3B1X3ZhcihtY2VfYmFua3Nfb3duZWQpKTsKKwltY2Vfbm90aWZ5X3VzZXIoKTsKK30KKworc3RhdGljIHZvaWQgcHJpbnRfdXBkYXRlKGNoYXIgKnR5cGUsIGludCAqaGRyLCBpbnQgbnVtKQoreworCWlmICgqaGRyID09IDApCisJCXByaW50ayhLRVJOX0lORk8gIkNQVSAlZCBNQ0EgYmFua3MiLCBzbXBfcHJvY2Vzc29yX2lkKCkpOworCSpoZHIgPSAxOworCXByaW50ayhLRVJOX0NPTlQgIiAlczolZCIsIHR5cGUsIG51bSk7Cit9CisKKy8qCisgKiBFbmFibGUgQ01DSSAoQ29ycmVjdGVkIE1hY2hpbmUgQ2hlY2sgSW50ZXJydXB0KSBmb3IgYXZhaWxhYmxlIE1DRSBiYW5rcworICogb24gdGhpcyBDUFUuIFVzZSB0aGUgYWxnb3JpdGhtIHJlY29tbWVuZGVkIGluIHRoZSBTRE0gdG8gZGlzY292ZXIgc2hhcmVkCisgKiBiYW5rcy4KKyAqLworc3RhdGljIHZvaWQgY21jaV9kaXNjb3ZlcihpbnQgYmFua3MsIGludCBib290KQoreworCXVuc2lnbmVkIGxvbmcgKm93bmVkID0gKHZvaWQgKikmX19nZXRfY3B1X3ZhcihtY2VfYmFua3Nfb3duZWQpOworCWludCBoZHIgPSAwOworCWludCBpOworCisJc3Bpbl9sb2NrKCZjbWNpX2Rpc2NvdmVyX2xvY2spOworCWZvciAoaSA9IDA7IGkgPCBiYW5rczsgaSsrKSB7CisJCXU2NCB2YWw7CisKKwkJaWYgKHRlc3RfYml0KGksIG93bmVkKSkKKwkJCWNvbnRpbnVlOworCisJCXJkbXNybChNU1JfSUEzMl9NQzBfQ1RMMiArIGksIHZhbCk7CisKKwkJLyogQWxyZWFkeSBvd25lZCBieSBzb21lb25lIGVsc2U/ICovCisJCWlmICh2YWwgJiBDTUNJX0VOKSB7CisJCQlpZiAodGVzdF9hbmRfY2xlYXJfYml0KGksIG93bmVkKSB8fCBib290KQorCQkJCXByaW50X3VwZGF0ZSgiU0hEIiwgJmhkciwgaSk7CisJCQlfX2NsZWFyX2JpdChpLCBfX2dldF9jcHVfdmFyKG1jZV9wb2xsX2JhbmtzKSk7CisJCQljb250aW51ZTsKKwkJfQorCisJCXZhbCB8PSBDTUNJX0VOIHwgQ01DSV9USFJFU0hPTEQ7CisJCXdybXNybChNU1JfSUEzMl9NQzBfQ1RMMiArIGksIHZhbCk7CisJCXJkbXNybChNU1JfSUEzMl9NQzBfQ1RMMiArIGksIHZhbCk7CisKKwkJLyogRGlkIHRoZSBlbmFibGUgYml0IHN0aWNrPyAtLSB0aGUgYmFuayBzdXBwb3J0cyBDTUNJICovCisJCWlmICh2YWwgJiBDTUNJX0VOKSB7CisJCQlpZiAoIXRlc3RfYW5kX3NldF9iaXQoaSwgb3duZWQpIHx8IGJvb3QpCisJCQkJcHJpbnRfdXBkYXRlKCJDTUNJIiwgJmhkciwgaSk7CisJCQlfX2NsZWFyX2JpdChpLCBfX2dldF9jcHVfdmFyKG1jZV9wb2xsX2JhbmtzKSk7CisJCX0gZWxzZSB7CisJCQlXQVJOX09OKCF0ZXN0X2JpdChpLCBfX2dldF9jcHVfdmFyKG1jZV9wb2xsX2JhbmtzKSkpOworCQl9CisJfQorCXNwaW5fdW5sb2NrKCZjbWNpX2Rpc2NvdmVyX2xvY2spOworCWlmIChoZHIpCisJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Cit9CisKKy8qCisgKiBKdXN0IGluIGNhc2Ugd2UgbWlzc2VkIGFuIGV2ZW50IGR1cmluZyBpbml0aWFsaXphdGlvbiBjaGVjaworICogYWxsIHRoZSBDTUNJIG93bmVkIGJhbmtzLgorICovCit2b2lkIGNtY2lfcmVjaGVjayh2b2lkKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IGJhbmtzOworCisJaWYgKCFtY2VfYXZhaWxhYmxlKCZjdXJyZW50X2NwdV9kYXRhKSB8fCAhY21jaV9zdXBwb3J0ZWQoJmJhbmtzKSkKKwkJcmV0dXJuOworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwltYWNoaW5lX2NoZWNrX3BvbGwoTUNQX1RJTUVTVEFNUCwgJl9fZ2V0X2NwdV92YXIobWNlX2JhbmtzX293bmVkKSk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworfQorCisvKgorICogRGlzYWJsZSBDTUNJIG9uIHRoaXMgQ1BVIGZvciBhbGwgYmFua3MgaXQgb3ducyB3aGVuIGl0IGdvZXMgZG93bi4KKyAqIFRoaXMgYWxsb3dzIG90aGVyIENQVXMgdG8gY2xhaW0gdGhlIGJhbmtzIG9uIHJlZGlzY292ZXJ5LgorICovCit2b2lkIGNtY2lfY2xlYXIodm9pZCkKK3sKKwlpbnQgaTsKKwlpbnQgYmFua3M7CisJdTY0IHZhbDsKKworCWlmICghY21jaV9zdXBwb3J0ZWQoJmJhbmtzKSkKKwkJcmV0dXJuOworCXNwaW5fbG9jaygmY21jaV9kaXNjb3Zlcl9sb2NrKTsKKwlmb3IgKGkgPSAwOyBpIDwgYmFua3M7IGkrKykgeworCQlpZiAoIXRlc3RfYml0KGksIF9fZ2V0X2NwdV92YXIobWNlX2JhbmtzX293bmVkKSkpCisJCQljb250aW51ZTsKKwkJLyogRGlzYWJsZSBDTUNJICovCisJCXJkbXNybChNU1JfSUEzMl9NQzBfQ1RMMiArIGksIHZhbCk7CisJCXZhbCAmPSB+KENNQ0lfRU58Q01DSV9USFJFU0hPTERfTUFTSyk7CisJCXdybXNybChNU1JfSUEzMl9NQzBfQ1RMMiArIGksIHZhbCk7CisJCV9fY2xlYXJfYml0KGksIF9fZ2V0X2NwdV92YXIobWNlX2JhbmtzX293bmVkKSk7CisJfQorCXNwaW5fdW5sb2NrKCZjbWNpX2Rpc2NvdmVyX2xvY2spOworfQorCisvKgorICogQWZ0ZXIgYSBDUFUgd2VudCBkb3duIGN5Y2xlIHRocm91Z2ggYWxsIHRoZSBvdGhlcnMgYW5kIHJlZGlzY292ZXIKKyAqIE11c3QgcnVuIGluIHByb2Nlc3MgY29udGV4dC4KKyAqLwordm9pZCBjbWNpX3JlZGlzY292ZXIoaW50IGR5aW5nKQoreworCWludCBiYW5rczsKKwlpbnQgY3B1OworCWNwdW1hc2tfdmFyX3Qgb2xkOworCisJaWYgKCFjbWNpX3N1cHBvcnRlZCgmYmFua3MpKQorCQlyZXR1cm47CisJaWYgKCFhbGxvY19jcHVtYXNrX3Zhcigmb2xkLCBHRlBfS0VSTkVMKSkKKwkJcmV0dXJuOworCWNwdW1hc2tfY29weShvbGQsICZjdXJyZW50LT5jcHVzX2FsbG93ZWQpOworCisJZm9yX2VhY2hfb25saW5lX2NwdSAoY3B1KSB7CisJCWlmIChjcHUgPT0gZHlpbmcpCisJCQljb250aW51ZTsKKwkJaWYgKHNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsICZjcHVtYXNrX29mX2NwdShjcHUpKSkKKwkJCWNvbnRpbnVlOworCQkvKiBSZWNoZWNrIGJhbmtzIGluIGNhc2UgQ1BVcyBkb24ndCBhbGwgaGF2ZSB0aGUgc2FtZSAqLworCQlpZiAoY21jaV9zdXBwb3J0ZWQoJmJhbmtzKSkKKwkJCWNtY2lfZGlzY292ZXIoYmFua3MsIDApOworCX0KKworCXNldF9jcHVzX2FsbG93ZWRfcHRyKGN1cnJlbnQsIG9sZCk7CisJZnJlZV9jcHVtYXNrX3ZhcihvbGQpOworfQorCisvKgorICogUmVlbmFibGUgQ01DSSBvbiB0aGlzIENQVSBpbiBjYXNlIGEgQ1BVIGRvd24gZmFpbGVkLgorICovCit2b2lkIGNtY2lfcmVlbmFibGUodm9pZCkKK3sKKwlpbnQgYmFua3M7CisJaWYgKGNtY2lfc3VwcG9ydGVkKCZiYW5rcykpCisJCWNtY2lfZGlzY292ZXIoYmFua3MsIDApOworfQorCitzdGF0aWMgdm9pZCBpbnRlbF9pbml0X2NtY2kodm9pZCkKK3sKKwlpbnQgYmFua3M7CisKKwlpZiAoIWNtY2lfc3VwcG9ydGVkKCZiYW5rcykpCisJCXJldHVybjsKKworCW1jZV90aHJlc2hvbGRfdmVjdG9yID0gaW50ZWxfdGhyZXNob2xkX2ludGVycnVwdDsKKwljbWNpX2Rpc2NvdmVyKGJhbmtzLCAxKTsKKwkvKgorCSAqIEZvciBDUFUgIzAgdGhpcyBydW5zIHdpdGggc3RpbGwgZGlzYWJsZWQgQVBJQywgYnV0IHRoYXQncworCSAqIG9rIGJlY2F1c2Ugb25seSB0aGUgdmVjdG9yIGlzIHNldCB1cC4gV2Ugc3RpbGwgZG8gYW5vdGhlcgorCSAqIGNoZWNrIGZvciB0aGUgYmFua3MgbGF0ZXIgZm9yIENQVSAjMCBqdXN0IHRvIG1ha2Ugc3VyZQorCSAqIHRvIG5vdCBtaXNzIGFueSBldmVudHMuCisJICovCisJYXBpY193cml0ZShBUElDX0xWVENNQ0ksIFRIUkVTSE9MRF9BUElDX1ZFQ1RPUnxBUElDX0RNX0ZJWEVEKTsKKwljbWNpX3JlY2hlY2soKTsKK30KKwogdm9pZCBtY2VfaW50ZWxfZmVhdHVyZV9pbml0KHN0cnVjdCBjcHVpbmZvX3g4NiAqYykKIHsKIAlpbnRlbF9pbml0X3RoZXJtYWwoYyk7CisJaW50ZWxfaW5pdF9jbWNpKCk7CiB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aHJlc2hvbGQuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbWNoZWNrL3RocmVzaG9sZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjIzZWU5ZTcKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L21jaGVjay90aHJlc2hvbGQuYwpAQCAtMCwwICsxLDI5IEBACisvKgorICogQ29tbW9uIGNvcnJlY3RlZCBNQ0UgdGhyZXNob2xkIGhhbmRsZXIgY29kZToKKyAqLworI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorCisjaW5jbHVkZSA8YXNtL2lycV92ZWN0b3JzLmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vaWRsZS5oPgorI2luY2x1ZGUgPGFzbS9tY2UuaD4KKworc3RhdGljIHZvaWQgZGVmYXVsdF90aHJlc2hvbGRfaW50ZXJydXB0KHZvaWQpCit7CisJcHJpbnRrKEtFUk5fRVJSICJVbmV4cGVjdGVkIHRocmVzaG9sZCBpbnRlcnJ1cHQgYXQgdmVjdG9yICV4XG4iLAorCQkJIFRIUkVTSE9MRF9BUElDX1ZFQ1RPUik7Cit9CisKK3ZvaWQgKCptY2VfdGhyZXNob2xkX3ZlY3Rvcikodm9pZCkgPSBkZWZhdWx0X3RocmVzaG9sZF9pbnRlcnJ1cHQ7CisKK2FzbWxpbmthZ2Ugdm9pZCBtY2VfdGhyZXNob2xkX2ludGVycnVwdCh2b2lkKQoreworCWV4aXRfaWRsZSgpOworCWlycV9lbnRlcigpOworCWluY19pcnFfc3RhdChpcnFfdGhyZXNob2xkX2NvdW50KTsKKwltY2VfdGhyZXNob2xkX3ZlY3RvcigpOworCWlycV9leGl0KCk7CisJLyogQWNrIG9ubHkgYXQgdGhlIGVuZCB0byBhdm9pZCBwb3RlbnRpYWwgcmVlbnRyeSAqLworCWFja19BUElDX2lycSgpOworfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL01ha2VmaWxlIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL01ha2VmaWxlCmluZGV4IDE5MWZjMDUuLmY0MzYxYjUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9NYWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvTWFrZWZpbGUKQEAgLTEsMyArMSwzIEBACi1vYmoteQkJOj0gbWFpbi5vIGlmLm8gZ2VuZXJpYy5vIHN0YXRlLm8KK29iai15CQk6PSBtYWluLm8gaWYubyBnZW5lcmljLm8gc3RhdGUubyBjbGVhbnVwLm8KIG9iai0kKENPTkZJR19YODZfMzIpICs9IGFtZC5vIGN5cml4Lm8gY2VudGF1ci5vCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9jbGVhbnVwLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2xlYW51cC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmNlMGZlNGIKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvY2xlYW51cC5jCkBAIC0wLDAgKzEsMTEwMSBAQAorLyogIE1UUlIgKE1lbW9yeSBUeXBlIFJhbmdlIFJlZ2lzdGVyKSBjbGVhbnVwCisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgWWluZ2hhaSBMdQorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICAgIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMaWJyYXJ5IEdlbmVyYWwgUHVibGljCisgICAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgICAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICAgIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKKyAgICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlCisgICAgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUgPGxpbnV4L2NwdS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvc29ydC5oPgorCisjaW5jbHVkZSA8YXNtL2U4MjAuaD4KKyNpbmNsdWRlIDxhc20vbXRyci5oPgorI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8YXNtL3Byb2Nlc3Nvci5oPgorI2luY2x1ZGUgPGFzbS9tc3IuaD4KKyNpbmNsdWRlIDxhc20va3ZtX3BhcmEuaD4KKyNpbmNsdWRlICJtdHJyLmgiCisKKy8qIHNob3VsZCBiZSByZWxhdGVkIHRvIE1UUlJfVkFSX1JBTkdFUyBudW1zICovCisjZGVmaW5lIFJBTkdFX05VTSAyNTYKKworc3RydWN0IHJlc19yYW5nZSB7CisJdW5zaWduZWQgbG9uZyBzdGFydDsKKwl1bnNpZ25lZCBsb25nIGVuZDsKK307CisKK3N0YXRpYyBpbnQgX19pbml0CithZGRfcmFuZ2Uoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSwgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCS8qIG91dCBvZiBzbG90cyAqLworCWlmIChucl9yYW5nZSA+PSBSQU5HRV9OVU0pCisJCXJldHVybiBucl9yYW5nZTsKKworCXJhbmdlW25yX3JhbmdlXS5zdGFydCA9IHN0YXJ0OworCXJhbmdlW25yX3JhbmdlXS5lbmQgPSBlbmQ7CisKKwlucl9yYW5nZSsrOworCisJcmV0dXJuIG5yX3JhbmdlOworfQorCitzdGF0aWMgaW50IF9faW5pdAorYWRkX3JhbmdlX3dpdGhfbWVyZ2Uoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSwgdW5zaWduZWQgbG9uZyBzdGFydCwKKwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWludCBpOworCisJLyogdHJ5IHRvIG1lcmdlIGl0IHdpdGggb2xkIG9uZSAqLworCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgZmluYWxfc3RhcnQsIGZpbmFsX2VuZDsKKwkJdW5zaWduZWQgbG9uZyBjb21tb25fc3RhcnQsIGNvbW1vbl9lbmQ7CisKKwkJaWYgKCFyYW5nZVtpXS5lbmQpCisJCQljb250aW51ZTsKKworCQljb21tb25fc3RhcnQgPSBtYXgocmFuZ2VbaV0uc3RhcnQsIHN0YXJ0KTsKKwkJY29tbW9uX2VuZCA9IG1pbihyYW5nZVtpXS5lbmQsIGVuZCk7CisJCWlmIChjb21tb25fc3RhcnQgPiBjb21tb25fZW5kICsgMSkKKwkJCWNvbnRpbnVlOworCisJCWZpbmFsX3N0YXJ0ID0gbWluKHJhbmdlW2ldLnN0YXJ0LCBzdGFydCk7CisJCWZpbmFsX2VuZCA9IG1heChyYW5nZVtpXS5lbmQsIGVuZCk7CisKKwkJcmFuZ2VbaV0uc3RhcnQgPSBmaW5hbF9zdGFydDsKKwkJcmFuZ2VbaV0uZW5kID0gIGZpbmFsX2VuZDsKKwkJcmV0dXJuIG5yX3JhbmdlOworCX0KKworCS8qIG5lZWQgdG8gYWRkIHRoYXQgKi8KKwlyZXR1cm4gYWRkX3JhbmdlKHJhbmdlLCBucl9yYW5nZSwgc3RhcnQsIGVuZCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdAorc3VidHJhY3RfcmFuZ2Uoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWludCBpLCBqOworCisJZm9yIChqID0gMDsgaiA8IFJBTkdFX05VTTsgaisrKSB7CisJCWlmICghcmFuZ2Vbal0uZW5kKQorCQkJY29udGludWU7CisKKwkJaWYgKHN0YXJ0IDw9IHJhbmdlW2pdLnN0YXJ0ICYmIGVuZCA+PSByYW5nZVtqXS5lbmQpIHsKKwkJCXJhbmdlW2pdLnN0YXJ0ID0gMDsKKwkJCXJhbmdlW2pdLmVuZCA9IDA7CisJCQljb250aW51ZTsKKwkJfQorCisJCWlmIChzdGFydCA8PSByYW5nZVtqXS5zdGFydCAmJiBlbmQgPCByYW5nZVtqXS5lbmQgJiYKKwkJICAgIHJhbmdlW2pdLnN0YXJ0IDwgZW5kICsgMSkgeworCQkJcmFuZ2Vbal0uc3RhcnQgPSBlbmQgKyAxOworCQkJY29udGludWU7CisJCX0KKworCisJCWlmIChzdGFydCA+IHJhbmdlW2pdLnN0YXJ0ICYmIGVuZCA+PSByYW5nZVtqXS5lbmQgJiYKKwkJICAgIHJhbmdlW2pdLmVuZCA+IHN0YXJ0IC0gMSkgeworCQkJcmFuZ2Vbal0uZW5kID0gc3RhcnQgLSAxOworCQkJY29udGludWU7CisJCX0KKworCQlpZiAoc3RhcnQgPiByYW5nZVtqXS5zdGFydCAmJiBlbmQgPCByYW5nZVtqXS5lbmQpIHsKKwkJCS8qIGZpbmQgdGhlIG5ldyBzcGFyZSAqLworCQkJZm9yIChpID0gMDsgaSA8IFJBTkdFX05VTTsgaSsrKSB7CisJCQkJaWYgKHJhbmdlW2ldLmVuZCA9PSAwKQorCQkJCQlicmVhazsKKwkJCX0KKwkJCWlmIChpIDwgUkFOR0VfTlVNKSB7CisJCQkJcmFuZ2VbaV0uZW5kID0gcmFuZ2Vbal0uZW5kOworCQkJCXJhbmdlW2ldLnN0YXJ0ID0gZW5kICsgMTsKKwkJCX0gZWxzZSB7CisJCQkJcHJpbnRrKEtFUk5fRVJSICJydW4gb2Ygc2xvdCBpbiByYW5nZXNcbiIpOworCQkJfQorCQkJcmFuZ2Vbal0uZW5kID0gc3RhcnQgLSAxOworCQkJY29udGludWU7CisJCX0KKwl9Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IGNtcF9yYW5nZShjb25zdCB2b2lkICp4MSwgY29uc3Qgdm9pZCAqeDIpCit7CisJY29uc3Qgc3RydWN0IHJlc19yYW5nZSAqcjEgPSB4MTsKKwljb25zdCBzdHJ1Y3QgcmVzX3JhbmdlICpyMiA9IHgyOworCWxvbmcgc3RhcnQxLCBzdGFydDI7CisKKwlzdGFydDEgPSByMS0+c3RhcnQ7CisJc3RhcnQyID0gcjItPnN0YXJ0OworCisJcmV0dXJuIHN0YXJ0MSAtIHN0YXJ0MjsKK30KKworc3RydWN0IHZhcl9tdHJyX3JhbmdlX3N0YXRlIHsKKwl1bnNpZ25lZCBsb25nIGJhc2VfcGZuOworCXVuc2lnbmVkIGxvbmcgc2l6ZV9wZm47CisJbXRycl90eXBlIHR5cGU7Cit9OworCitzdGF0aWMgc3RydWN0IHZhcl9tdHJyX3JhbmdlX3N0YXRlIF9faW5pdGRhdGEgcmFuZ2Vfc3RhdGVbUkFOR0VfTlVNXTsKK3N0YXRpYyBpbnQgX19pbml0ZGF0YSBkZWJ1Z19wcmludDsKKworc3RhdGljIGludCBfX2luaXQKK3g4Nl9nZXRfbXRycl9tZW1fcmFuZ2Uoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSwKKwkJICAgICAgIHVuc2lnbmVkIGxvbmcgZXh0cmFfcmVtb3ZlX2Jhc2UsCisJCSAgICAgICB1bnNpZ25lZCBsb25nIGV4dHJhX3JlbW92ZV9zaXplKQoreworCXVuc2lnbmVkIGxvbmcgYmFzZSwgc2l6ZTsKKwltdHJyX3R5cGUgdHlwZTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7CisJCXR5cGUgPSByYW5nZV9zdGF0ZVtpXS50eXBlOworCQlpZiAodHlwZSAhPSBNVFJSX1RZUEVfV1JCQUNLKQorCQkJY29udGludWU7CisJCWJhc2UgPSByYW5nZV9zdGF0ZVtpXS5iYXNlX3BmbjsKKwkJc2l6ZSA9IHJhbmdlX3N0YXRlW2ldLnNpemVfcGZuOworCQlucl9yYW5nZSA9IGFkZF9yYW5nZV93aXRoX21lcmdlKHJhbmdlLCBucl9yYW5nZSwgYmFzZSwKKwkJCQkJCWJhc2UgKyBzaXplIC0gMSk7CisJfQorCWlmIChkZWJ1Z19wcmludCkgeworCQlwcmludGsoS0VSTl9ERUJVRyAiQWZ0ZXIgV0IgY2hlY2tpbmdcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKKwkJCXByaW50ayhLRVJOX0RFQlVHICJNVFJSIE1BUCBQRk46ICUwMTZseCAtICUwMTZseFxuIiwKKwkJCQkgcmFuZ2VbaV0uc3RhcnQsIHJhbmdlW2ldLmVuZCArIDEpOworCX0KKworCS8qIHRha2Ugb3V0IFVDIHJhbmdlcyAqLworCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7CisJCXR5cGUgPSByYW5nZV9zdGF0ZVtpXS50eXBlOworCQlpZiAodHlwZSAhPSBNVFJSX1RZUEVfVU5DQUNIQUJMRSAmJgorCQkgICAgdHlwZSAhPSBNVFJSX1RZUEVfV1JQUk9UKQorCQkJY29udGludWU7CisJCXNpemUgPSByYW5nZV9zdGF0ZVtpXS5zaXplX3BmbjsKKwkJaWYgKCFzaXplKQorCQkJY29udGludWU7CisJCWJhc2UgPSByYW5nZV9zdGF0ZVtpXS5iYXNlX3BmbjsKKwkJaWYgKGJhc2UgPCAoMTw8KDIwLVBBR0VfU0hJRlQpKSAmJiBtdHJyX3N0YXRlLmhhdmVfZml4ZWQgJiYKKwkJICAgIChtdHJyX3N0YXRlLmVuYWJsZWQgJiAxKSkgeworCQkJLyogVmFyIE1UUlIgY29udGFpbnMgVUMgZW50cnkgYmVsb3cgMU0/IFNraXAgaXQ6ICovCisJCQlwcmludGsoS0VSTl9XQVJOSU5HICJXQVJOSU5HOiBCSU9TIGJ1ZzogVkFSIE1UUlIgJWQgIgorCQkJCSJjb250YWlucyBzdHJhbmdlIFVDIGVudHJ5IHVuZGVyIDFNLCBjaGVjayAiCisJCQkJIndpdGggeW91ciBzeXN0ZW0gdmVuZG9yIVxuIiwgaSk7CisJCQlpZiAoYmFzZSArIHNpemUgPD0gKDE8PCgyMC1QQUdFX1NISUZUKSkpCisJCQkJY29udGludWU7CisJCQlzaXplIC09ICgxPDwoMjAtUEFHRV9TSElGVCkpIC0gYmFzZTsKKwkJCWJhc2UgPSAxPDwoMjAtUEFHRV9TSElGVCk7CisJCX0KKwkJc3VidHJhY3RfcmFuZ2UocmFuZ2UsIGJhc2UsIGJhc2UgKyBzaXplIC0gMSk7CisJfQorCWlmIChleHRyYV9yZW1vdmVfc2l6ZSkKKwkJc3VidHJhY3RfcmFuZ2UocmFuZ2UsIGV4dHJhX3JlbW92ZV9iYXNlLAorCQkJCSBleHRyYV9yZW1vdmVfYmFzZSArIGV4dHJhX3JlbW92ZV9zaXplICAtIDEpOworCisJLyogZ2V0IG5ldyByYW5nZSBudW0gKi8KKwlucl9yYW5nZSA9IDA7CisJZm9yIChpID0gMDsgaSA8IFJBTkdFX05VTTsgaSsrKSB7CisJCWlmICghcmFuZ2VbaV0uZW5kKQorCQkJY29udGludWU7CisJCW5yX3JhbmdlKys7CisJfQorCWlmICAoZGVidWdfcHJpbnQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkFmdGVyIFVDIGNoZWNraW5nXG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspCisJCQlwcmludGsoS0VSTl9ERUJVRyAiTVRSUiBNQVAgUEZOOiAlMDE2bHggLSAlMDE2bHhcbiIsCisJCQkJIHJhbmdlW2ldLnN0YXJ0LCByYW5nZVtpXS5lbmQgKyAxKTsKKwl9CisKKwkvKiBzb3J0IHRoZSByYW5nZXMgKi8KKwlzb3J0KHJhbmdlLCBucl9yYW5nZSwgc2l6ZW9mKHN0cnVjdCByZXNfcmFuZ2UpLCBjbXBfcmFuZ2UsIE5VTEwpOworCWlmICAoZGVidWdfcHJpbnQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIkFmdGVyIHNvcnRpbmdcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKKwkJCXByaW50ayhLRVJOX0RFQlVHICJNVFJSIE1BUCBQRk46ICUwMTZseCAtICUwMTZseFxuIiwKKwkJCQkgcmFuZ2VbaV0uc3RhcnQsIHJhbmdlW2ldLmVuZCArIDEpOworCX0KKworCS8qIGNsZWFyIHRob3NlIGlzIG5vdCB1c2VkICovCisJZm9yIChpID0gbnJfcmFuZ2U7IGkgPCBSQU5HRV9OVU07IGkrKykKKwkJbWVtc2V0KCZyYW5nZVtpXSwgMCwgc2l6ZW9mKHJhbmdlW2ldKSk7CisKKwlyZXR1cm4gbnJfcmFuZ2U7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgcmVzX3JhbmdlIF9faW5pdGRhdGEgcmFuZ2VbUkFOR0VfTlVNXTsKK3N0YXRpYyBpbnQgX19pbml0ZGF0YSBucl9yYW5nZTsKKworI2lmZGVmIENPTkZJR19NVFJSX1NBTklUSVpFUgorCitzdGF0aWMgdW5zaWduZWQgbG9uZyBfX2luaXQgc3VtX3JhbmdlcyhzdHJ1Y3QgcmVzX3JhbmdlICpyYW5nZSwgaW50IG5yX3JhbmdlKQoreworCXVuc2lnbmVkIGxvbmcgc3VtOworCWludCBpOworCisJc3VtID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKKwkJc3VtICs9IHJhbmdlW2ldLmVuZCArIDEgLSByYW5nZVtpXS5zdGFydDsKKworCXJldHVybiBzdW07Cit9CisKK3N0YXRpYyBpbnQgZW5hYmxlX210cnJfY2xlYW51cCBfX2luaXRkYXRhID0KKwlDT05GSUdfTVRSUl9TQU5JVElaRVJfRU5BQkxFX0RFRkFVTFQ7CisKK3N0YXRpYyBpbnQgX19pbml0IGRpc2FibGVfbXRycl9jbGVhbnVwX3NldHVwKGNoYXIgKnN0cikKK3sKKwllbmFibGVfbXRycl9jbGVhbnVwID0gMDsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJkaXNhYmxlX210cnJfY2xlYW51cCIsIGRpc2FibGVfbXRycl9jbGVhbnVwX3NldHVwKTsKKworc3RhdGljIGludCBfX2luaXQgZW5hYmxlX210cnJfY2xlYW51cF9zZXR1cChjaGFyICpzdHIpCit7CisJZW5hYmxlX210cnJfY2xlYW51cCA9IDE7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgiZW5hYmxlX210cnJfY2xlYW51cCIsIGVuYWJsZV9tdHJyX2NsZWFudXBfc2V0dXApOworCitzdGF0aWMgaW50IF9faW5pdCBtdHJyX2NsZWFudXBfZGVidWdfc2V0dXAoY2hhciAqc3RyKQoreworCWRlYnVnX3ByaW50ID0gMTsKKwlyZXR1cm4gMDsKK30KK2Vhcmx5X3BhcmFtKCJtdHJyX2NsZWFudXBfZGVidWciLCBtdHJyX2NsZWFudXBfZGVidWdfc2V0dXApOworCitzdHJ1Y3QgdmFyX210cnJfc3RhdGUgeworCXVuc2lnbmVkIGxvbmcJcmFuZ2Vfc3RhcnRrOworCXVuc2lnbmVkIGxvbmcJcmFuZ2Vfc2l6ZWs7CisJdW5zaWduZWQgbG9uZwljaHVua19zaXplazsKKwl1bnNpZ25lZCBsb25nCWdyYW5fc2l6ZWs7CisJdW5zaWduZWQgaW50CXJlZzsKK307CisKK3N0YXRpYyB2b2lkIF9faW5pdAorc2V0X3Zhcl9tdHJyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgYmFzZWssIHVuc2lnbmVkIGxvbmcgc2l6ZWssCisJCXVuc2lnbmVkIGNoYXIgdHlwZSwgdW5zaWduZWQgaW50IGFkZHJlc3NfYml0cykKK3sKKwl1MzIgYmFzZV9sbywgYmFzZV9oaSwgbWFza19sbywgbWFza19oaTsKKwl1NjQgYmFzZSwgbWFzazsKKworCWlmICghc2l6ZWspIHsKKwkJZmlsbF9tdHJyX3Zhcl9yYW5nZShyZWcsIDAsIDAsIDAsIDApOworCQlyZXR1cm47CisJfQorCisJbWFzayA9ICgxVUxMIDw8IGFkZHJlc3NfYml0cykgLSAxOworCW1hc2sgJj0gfigoKCh1NjQpc2l6ZWspIDw8IDEwKSAtIDEpOworCisJYmFzZSAgPSAoKHU2NCliYXNlaykgPDwgMTA7CisKKwliYXNlIHw9IHR5cGU7CisJbWFzayB8PSAweDgwMDsKKworCWJhc2VfbG8gPSBiYXNlICYgKCgxVUxMPDwzMikgLSAxKTsKKwliYXNlX2hpID0gYmFzZSA+PiAzMjsKKworCW1hc2tfbG8gPSBtYXNrICYgKCgxVUxMPDwzMikgLSAxKTsKKwltYXNrX2hpID0gbWFzayA+PiAzMjsKKworCWZpbGxfbXRycl92YXJfcmFuZ2UocmVnLCBiYXNlX2xvLCBiYXNlX2hpLCBtYXNrX2xvLCBtYXNrX2hpKTsKK30KKworc3RhdGljIHZvaWQgX19pbml0CitzYXZlX3Zhcl9tdHJyKHVuc2lnbmVkIGludCByZWcsIHVuc2lnbmVkIGxvbmcgYmFzZWssIHVuc2lnbmVkIGxvbmcgc2l6ZWssCisJCXVuc2lnbmVkIGNoYXIgdHlwZSkKK3sKKwlyYW5nZV9zdGF0ZVtyZWddLmJhc2VfcGZuID0gYmFzZWsgPj4gKFBBR0VfU0hJRlQgLSAxMCk7CisJcmFuZ2Vfc3RhdGVbcmVnXS5zaXplX3BmbiA9IHNpemVrID4+IChQQUdFX1NISUZUIC0gMTApOworCXJhbmdlX3N0YXRlW3JlZ10udHlwZSA9IHR5cGU7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdAorc2V0X3Zhcl9tdHJyX2FsbCh1bnNpZ25lZCBpbnQgYWRkcmVzc19iaXRzKQoreworCXVuc2lnbmVkIGxvbmcgYmFzZWssIHNpemVrOworCXVuc2lnbmVkIGNoYXIgdHlwZTsKKwl1bnNpZ25lZCBpbnQgcmVnOworCisJZm9yIChyZWcgPSAwOyByZWcgPCBudW1fdmFyX3JhbmdlczsgcmVnKyspIHsKKwkJYmFzZWsgPSByYW5nZV9zdGF0ZVtyZWddLmJhc2VfcGZuIDw8IChQQUdFX1NISUZUIC0gMTApOworCQlzaXplayA9IHJhbmdlX3N0YXRlW3JlZ10uc2l6ZV9wZm4gPDwgKFBBR0VfU0hJRlQgLSAxMCk7CisJCXR5cGUgPSByYW5nZV9zdGF0ZVtyZWddLnR5cGU7CisKKwkJc2V0X3Zhcl9tdHJyKHJlZywgYmFzZWssIHNpemVrLCB0eXBlLCBhZGRyZXNzX2JpdHMpOworCX0KK30KKworc3RhdGljIHVuc2lnbmVkIGxvbmcgdG9fc2l6ZV9mYWN0b3IodW5zaWduZWQgbG9uZyBzaXplaywgY2hhciAqZmFjdG9ycCkKK3sKKwljaGFyIGZhY3RvcjsKKwl1bnNpZ25lZCBsb25nIGJhc2UgPSBzaXplazsKKworCWlmIChiYXNlICYgKCgxPDwxMCkgLSAxKSkgeworCQkvKiBub3QgTUIgYWxpZ25tZW50ICovCisJCWZhY3RvciA9ICdLJzsKKwl9IGVsc2UgaWYgKGJhc2UgJiAoKDE8PDIwKSAtIDEpKSB7CisJCWZhY3RvciA9ICdNJzsKKwkJYmFzZSA+Pj0gMTA7CisJfSBlbHNlIHsKKwkJZmFjdG9yID0gJ0cnOworCQliYXNlID4+PSAyMDsKKwl9CisKKwkqZmFjdG9ycCA9IGZhY3RvcjsKKworCXJldHVybiBiYXNlOworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdAorcmFuZ2VfdG9fbXRycih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0aywKKwkgICAgICB1bnNpZ25lZCBsb25nIHJhbmdlX3NpemVrLCB1bnNpZ25lZCBjaGFyIHR5cGUpCit7CisJaWYgKCFyYW5nZV9zaXplayB8fCAocmVnID49IG51bV92YXJfcmFuZ2VzKSkKKwkJcmV0dXJuIHJlZzsKKworCXdoaWxlIChyYW5nZV9zaXplaykgeworCQl1bnNpZ25lZCBsb25nIG1heF9hbGlnbiwgYWxpZ247CisJCXVuc2lnbmVkIGxvbmcgc2l6ZWs7CisKKwkJLyogQ29tcHV0ZSB0aGUgbWF4aW11bSBzaXplIEkgY2FuIG1ha2UgYSByYW5nZSAqLworCQlpZiAocmFuZ2Vfc3RhcnRrKQorCQkJbWF4X2FsaWduID0gZmZzKHJhbmdlX3N0YXJ0aykgLSAxOworCQllbHNlCisJCQltYXhfYWxpZ24gPSAzMjsKKwkJYWxpZ24gPSBmbHMocmFuZ2Vfc2l6ZWspIC0gMTsKKwkJaWYgKGFsaWduID4gbWF4X2FsaWduKQorCQkJYWxpZ24gPSBtYXhfYWxpZ247CisKKwkJc2l6ZWsgPSAxIDw8IGFsaWduOworCQlpZiAoZGVidWdfcHJpbnQpIHsKKwkJCWNoYXIgc3RhcnRfZmFjdG9yID0gJ0snLCBzaXplX2ZhY3RvciA9ICdLJzsKKwkJCXVuc2lnbmVkIGxvbmcgc3RhcnRfYmFzZSwgc2l6ZV9iYXNlOworCisJCQlzdGFydF9iYXNlID0gdG9fc2l6ZV9mYWN0b3IocmFuZ2Vfc3RhcnRrLAorCQkJCQkJCSAmc3RhcnRfZmFjdG9yKSwKKwkJCXNpemVfYmFzZSA9IHRvX3NpemVfZmFjdG9yKHNpemVrLCAmc2l6ZV9mYWN0b3IpLAorCisJCQlwcmludGsoS0VSTl9ERUJVRyAiU2V0dGluZyB2YXJpYWJsZSBNVFJSICVkLCAiCisJCQkJImJhc2U6ICVsZCVjQiwgcmFuZ2U6ICVsZCVjQiwgdHlwZSAlc1xuIiwKKwkJCQlyZWcsIHN0YXJ0X2Jhc2UsIHN0YXJ0X2ZhY3RvciwKKwkJCQlzaXplX2Jhc2UsIHNpemVfZmFjdG9yLAorCQkJCSh0eXBlID09IE1UUlJfVFlQRV9VTkNBQ0hBQkxFKSA/ICJVQyIgOgorCQkJCSAgICgodHlwZSA9PSBNVFJSX1RZUEVfV1JCQUNLKSA/ICJXQiIgOiAiT3RoZXIiKQorCQkJCSk7CisJCX0KKwkJc2F2ZV92YXJfbXRycihyZWcrKywgcmFuZ2Vfc3RhcnRrLCBzaXplaywgdHlwZSk7CisJCXJhbmdlX3N0YXJ0ayArPSBzaXplazsKKwkJcmFuZ2Vfc2l6ZWsgLT0gc2l6ZWs7CisJCWlmIChyZWcgPj0gbnVtX3Zhcl9yYW5nZXMpCisJCQlicmVhazsKKwl9CisJcmV0dXJuIHJlZzsKK30KKworc3RhdGljIHVuc2lnbmVkIF9faW5pdAorcmFuZ2VfdG9fbXRycl93aXRoX2hvbGUoc3RydWN0IHZhcl9tdHJyX3N0YXRlICpzdGF0ZSwgdW5zaWduZWQgbG9uZyBiYXNlaywKKwkJCXVuc2lnbmVkIGxvbmcgc2l6ZWspCit7CisJdW5zaWduZWQgbG9uZyBob2xlX2Jhc2VrLCBob2xlX3NpemVrOworCXVuc2lnbmVkIGxvbmcgc2Vjb25kX2Jhc2VrLCBzZWNvbmRfc2l6ZWs7CisJdW5zaWduZWQgbG9uZyByYW5nZTBfYmFzZWssIHJhbmdlMF9zaXplazsKKwl1bnNpZ25lZCBsb25nIHJhbmdlX2Jhc2VrLCByYW5nZV9zaXplazsKKwl1bnNpZ25lZCBsb25nIGNodW5rX3NpemVrOworCXVuc2lnbmVkIGxvbmcgZ3Jhbl9zaXplazsKKworCWhvbGVfYmFzZWsgPSAwOworCWhvbGVfc2l6ZWsgPSAwOworCXNlY29uZF9iYXNlayA9IDA7CisJc2Vjb25kX3NpemVrID0gMDsKKwljaHVua19zaXplayA9IHN0YXRlLT5jaHVua19zaXplazsKKwlncmFuX3NpemVrID0gc3RhdGUtPmdyYW5fc2l6ZWs7CisKKwkvKiBhbGlnbiB3aXRoIGdyYW4gc2l6ZSwgcHJldmVudCBzbWFsbCBibG9jayB1c2VkIHVwIE1UUlJzICovCisJcmFuZ2VfYmFzZWsgPSBBTElHTihzdGF0ZS0+cmFuZ2Vfc3RhcnRrLCBncmFuX3NpemVrKTsKKwlpZiAoKHJhbmdlX2Jhc2VrID4gYmFzZWspICYmIGJhc2VrKQorCQlyZXR1cm4gc2Vjb25kX3NpemVrOworCXN0YXRlLT5yYW5nZV9zaXplayAtPSAocmFuZ2VfYmFzZWsgLSBzdGF0ZS0+cmFuZ2Vfc3RhcnRrKTsKKwlyYW5nZV9zaXplayA9IEFMSUdOKHN0YXRlLT5yYW5nZV9zaXplaywgZ3Jhbl9zaXplayk7CisKKwl3aGlsZSAocmFuZ2Vfc2l6ZWsgPiBzdGF0ZS0+cmFuZ2Vfc2l6ZWspIHsKKwkJcmFuZ2Vfc2l6ZWsgLT0gZ3Jhbl9zaXplazsKKwkJaWYgKCFyYW5nZV9zaXplaykKKwkJCXJldHVybiAwOworCX0KKwlzdGF0ZS0+cmFuZ2Vfc2l6ZWsgPSByYW5nZV9zaXplazsKKworCS8qIHRyeSB0byBhcHBlbmQgc29tZSBzbWFsbCBob2xlICovCisJcmFuZ2UwX2Jhc2VrID0gc3RhdGUtPnJhbmdlX3N0YXJ0azsKKwlyYW5nZTBfc2l6ZWsgPSBBTElHTihzdGF0ZS0+cmFuZ2Vfc2l6ZWssIGNodW5rX3NpemVrKTsKKworCS8qIG5vIGluY3JlYXNlICovCisJaWYgKHJhbmdlMF9zaXplayA9PSBzdGF0ZS0+cmFuZ2Vfc2l6ZWspIHsKKwkJaWYgKGRlYnVnX3ByaW50KQorCQkJcHJpbnRrKEtFUk5fREVCVUcgInJhbmdlWDogJTAxNmx4IC0gJTAxNmx4XG4iLAorCQkJCXJhbmdlMF9iYXNlazw8MTAsCisJCQkJKHJhbmdlMF9iYXNlayArIHN0YXRlLT5yYW5nZV9zaXplayk8PDEwKTsKKwkJc3RhdGUtPnJlZyA9IHJhbmdlX3RvX210cnIoc3RhdGUtPnJlZywgcmFuZ2UwX2Jhc2VrLAorCQkJCXN0YXRlLT5yYW5nZV9zaXplaywgTVRSUl9UWVBFX1dSQkFDSyk7CisJCXJldHVybiAwOworCX0KKworCS8qIG9ubHkgY3V0IGJhY2ssIHdoZW4gaXQgaXMgbm90IHRoZSBsYXN0ICovCisJaWYgKHNpemVrKSB7CisJCXdoaWxlIChyYW5nZTBfYmFzZWsgKyByYW5nZTBfc2l6ZWsgPiAoYmFzZWsgKyBzaXplaykpIHsKKwkJCWlmIChyYW5nZTBfc2l6ZWsgPj0gY2h1bmtfc2l6ZWspCisJCQkJcmFuZ2UwX3NpemVrIC09IGNodW5rX3NpemVrOworCQkJZWxzZQorCQkJCXJhbmdlMF9zaXplayA9IDA7CisKKwkJCWlmICghcmFuZ2UwX3NpemVrKQorCQkJCWJyZWFrOworCQl9CisJfQorCitzZWNvbmRfdHJ5OgorCXJhbmdlX2Jhc2VrID0gcmFuZ2UwX2Jhc2VrICsgcmFuZ2UwX3NpemVrOworCisJLyogb25lIGhvbGUgaW4gdGhlIG1pZGRsZSAqLworCWlmIChyYW5nZV9iYXNlayA+IGJhc2VrICYmIHJhbmdlX2Jhc2VrIDw9IChiYXNlayArIHNpemVrKSkKKwkJc2Vjb25kX3NpemVrID0gcmFuZ2VfYmFzZWsgLSBiYXNlazsKKworCWlmIChyYW5nZTBfc2l6ZWsgPiBzdGF0ZS0+cmFuZ2Vfc2l6ZWspIHsKKworCQkvKiBvbmUgaG9sZSBpbiBtaWRkbGUgb3IgYXQgZW5kICovCisJCWhvbGVfc2l6ZWsgPSByYW5nZTBfc2l6ZWsgLSBzdGF0ZS0+cmFuZ2Vfc2l6ZWsgLSBzZWNvbmRfc2l6ZWs7CisKKwkJLyogaG9sZSBzaXplIHNob3VsZCBiZSBsZXNzIHRoYW4gaGFsZiBvZiByYW5nZTAgc2l6ZSAqLworCQlpZiAoaG9sZV9zaXplayA+PSAocmFuZ2UwX3NpemVrID4+IDEpICYmCisJCSAgICByYW5nZTBfc2l6ZWsgPj0gY2h1bmtfc2l6ZWspIHsKKwkJCXJhbmdlMF9zaXplayAtPSBjaHVua19zaXplazsKKwkJCXNlY29uZF9zaXplayA9IDA7CisJCQlob2xlX3NpemVrID0gMDsKKworCQkJZ290byBzZWNvbmRfdHJ5OworCQl9CisJfQorCisJaWYgKHJhbmdlMF9zaXplaykgeworCQlpZiAoZGVidWdfcHJpbnQpCisJCQlwcmludGsoS0VSTl9ERUJVRyAicmFuZ2UwOiAlMDE2bHggLSAlMDE2bHhcbiIsCisJCQkJcmFuZ2UwX2Jhc2VrPDwxMCwKKwkJCQkocmFuZ2UwX2Jhc2VrICsgcmFuZ2UwX3NpemVrKTw8MTApOworCQlzdGF0ZS0+cmVnID0gcmFuZ2VfdG9fbXRycihzdGF0ZS0+cmVnLCByYW5nZTBfYmFzZWssCisJCQkJcmFuZ2UwX3NpemVrLCBNVFJSX1RZUEVfV1JCQUNLKTsKKwl9CisKKwlpZiAocmFuZ2UwX3NpemVrIDwgc3RhdGUtPnJhbmdlX3NpemVrKSB7CisJCS8qIG5lZWQgdG8gaGFuZGxlIGxlZnQgb3ZlciAqLworCQlyYW5nZV9zaXplayA9IHN0YXRlLT5yYW5nZV9zaXplayAtIHJhbmdlMF9zaXplazsKKworCQlpZiAoZGVidWdfcHJpbnQpCisJCQlwcmludGsoS0VSTl9ERUJVRyAicmFuZ2U6ICUwMTZseCAtICUwMTZseFxuIiwKKwkJCQkgcmFuZ2VfYmFzZWs8PDEwLAorCQkJCSAocmFuZ2VfYmFzZWsgKyByYW5nZV9zaXplayk8PDEwKTsKKwkJc3RhdGUtPnJlZyA9IHJhbmdlX3RvX210cnIoc3RhdGUtPnJlZywgcmFuZ2VfYmFzZWssCisJCQkJIHJhbmdlX3NpemVrLCBNVFJSX1RZUEVfV1JCQUNLKTsKKwl9CisKKwlpZiAoaG9sZV9zaXplaykgeworCQlob2xlX2Jhc2VrID0gcmFuZ2VfYmFzZWsgLSBob2xlX3NpemVrIC0gc2Vjb25kX3NpemVrOworCQlpZiAoZGVidWdfcHJpbnQpCisJCQlwcmludGsoS0VSTl9ERUJVRyAiaG9sZTogJTAxNmx4IC0gJTAxNmx4XG4iLAorCQkJCSBob2xlX2Jhc2VrPDwxMCwKKwkJCQkgKGhvbGVfYmFzZWsgKyBob2xlX3NpemVrKTw8MTApOworCQlzdGF0ZS0+cmVnID0gcmFuZ2VfdG9fbXRycihzdGF0ZS0+cmVnLCBob2xlX2Jhc2VrLAorCQkJCSBob2xlX3NpemVrLCBNVFJSX1RZUEVfVU5DQUNIQUJMRSk7CisJfQorCisJcmV0dXJuIHNlY29uZF9zaXplazsKK30KKworc3RhdGljIHZvaWQgX19pbml0CitzZXRfdmFyX210cnJfcmFuZ2Uoc3RydWN0IHZhcl9tdHJyX3N0YXRlICpzdGF0ZSwgdW5zaWduZWQgbG9uZyBiYXNlX3BmbiwKKwkJICAgdW5zaWduZWQgbG9uZyBzaXplX3BmbikKK3sKKwl1bnNpZ25lZCBsb25nIGJhc2VrLCBzaXplazsKKwl1bnNpZ25lZCBsb25nIHNlY29uZF9zaXplayA9IDA7CisKKwlpZiAoc3RhdGUtPnJlZyA+PSBudW1fdmFyX3JhbmdlcykKKwkJcmV0dXJuOworCisJYmFzZWsgPSBiYXNlX3BmbiA8PCAoUEFHRV9TSElGVCAtIDEwKTsKKwlzaXplayA9IHNpemVfcGZuIDw8IChQQUdFX1NISUZUIC0gMTApOworCisJLyogU2VlIGlmIEkgY2FuIG1lcmdlIHdpdGggdGhlIGxhc3QgcmFuZ2UgKi8KKwlpZiAoKGJhc2VrIDw9IDEwMjQpIHx8CisJICAgIChzdGF0ZS0+cmFuZ2Vfc3RhcnRrICsgc3RhdGUtPnJhbmdlX3NpemVrID09IGJhc2VrKSkgeworCQl1bnNpZ25lZCBsb25nIGVuZGsgPSBiYXNlayArIHNpemVrOworCQlzdGF0ZS0+cmFuZ2Vfc2l6ZWsgPSBlbmRrIC0gc3RhdGUtPnJhbmdlX3N0YXJ0azsKKwkJcmV0dXJuOworCX0KKwkvKiBXcml0ZSB0aGUgcmFuZ2UgbXRycnMgKi8KKwlpZiAoc3RhdGUtPnJhbmdlX3NpemVrICE9IDApCisJCXNlY29uZF9zaXplayA9IHJhbmdlX3RvX210cnJfd2l0aF9ob2xlKHN0YXRlLCBiYXNlaywgc2l6ZWspOworCisJLyogQWxsb2NhdGUgYW4gbXNyICovCisJc3RhdGUtPnJhbmdlX3N0YXJ0ayA9IGJhc2VrICsgc2Vjb25kX3NpemVrOworCXN0YXRlLT5yYW5nZV9zaXplayAgPSBzaXplayAtIHNlY29uZF9zaXplazsKK30KKworLyogbWluaW51bSBzaXplIG9mIG10cnIgYmxvY2sgdGhhdCBjYW4gdGFrZSBob2xlICovCitzdGF0aWMgdTY0IG10cnJfY2h1bmtfc2l6ZSBfX2luaXRkYXRhID0gKDI1NlVMTDw8MjApOworCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9tdHJyX2NodW5rX3NpemVfb3B0KGNoYXIgKnApCit7CisJaWYgKCFwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltdHJyX2NodW5rX3NpemUgPSBtZW1wYXJzZShwLCAmcCk7CisJcmV0dXJuIDA7Cit9CitlYXJseV9wYXJhbSgibXRycl9jaHVua19zaXplIiwgcGFyc2VfbXRycl9jaHVua19zaXplX29wdCk7CisKKy8qIGdyYW5pdHkgb2YgbXRyciBvZiBibG9jayAqLworc3RhdGljIHU2NCBtdHJyX2dyYW5fc2l6ZSBfX2luaXRkYXRhOworCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9tdHJyX2dyYW5fc2l6ZV9vcHQoY2hhciAqcCkKK3sKKwlpZiAoIXApCisJCXJldHVybiAtRUlOVkFMOworCW10cnJfZ3Jhbl9zaXplID0gbWVtcGFyc2UocCwgJnApOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oIm10cnJfZ3Jhbl9zaXplIiwgcGFyc2VfbXRycl9ncmFuX3NpemVfb3B0KTsKKworc3RhdGljIGludCBucl9tdHJyX3NwYXJlX3JlZyBfX2luaXRkYXRhID0KKwkJCQkgQ09ORklHX01UUlJfU0FOSVRJWkVSX1NQQVJFX1JFR19OUl9ERUZBVUxUOworCitzdGF0aWMgaW50IF9faW5pdCBwYXJzZV9tdHJyX3NwYXJlX3JlZyhjaGFyICphcmcpCit7CisJaWYgKGFyZykKKwkJbnJfbXRycl9zcGFyZV9yZWcgPSBzaW1wbGVfc3RydG91bChhcmcsIE5VTEwsIDApOworCXJldHVybiAwOworfQorCitlYXJseV9wYXJhbSgibXRycl9zcGFyZV9yZWdfbnIiLCBwYXJzZV9tdHJyX3NwYXJlX3JlZyk7CisKK3N0YXRpYyBpbnQgX19pbml0Cit4ODZfc2V0dXBfdmFyX210cnJzKHN0cnVjdCByZXNfcmFuZ2UgKnJhbmdlLCBpbnQgbnJfcmFuZ2UsCisJCSAgICB1NjQgY2h1bmtfc2l6ZSwgdTY0IGdyYW5fc2l6ZSkKK3sKKwlzdHJ1Y3QgdmFyX210cnJfc3RhdGUgdmFyX3N0YXRlOworCWludCBpOworCWludCBudW1fcmVnOworCisJdmFyX3N0YXRlLnJhbmdlX3N0YXJ0awk9IDA7CisJdmFyX3N0YXRlLnJhbmdlX3NpemVrCT0gMDsKKwl2YXJfc3RhdGUucmVnCQk9IDA7CisJdmFyX3N0YXRlLmNodW5rX3NpemVrCT0gY2h1bmtfc2l6ZSA+PiAxMDsKKwl2YXJfc3RhdGUuZ3Jhbl9zaXplawk9IGdyYW5fc2l6ZSA+PiAxMDsKKworCW1lbXNldChyYW5nZV9zdGF0ZSwgMCwgc2l6ZW9mKHJhbmdlX3N0YXRlKSk7CisKKwkvKiBXcml0ZSB0aGUgcmFuZ2UgZXRjICovCisJZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspCisJCXNldF92YXJfbXRycl9yYW5nZSgmdmFyX3N0YXRlLCByYW5nZVtpXS5zdGFydCwKKwkJCQkgICByYW5nZVtpXS5lbmQgLSByYW5nZVtpXS5zdGFydCArIDEpOworCisJLyogV3JpdGUgdGhlIGxhc3QgcmFuZ2UgKi8KKwlpZiAodmFyX3N0YXRlLnJhbmdlX3NpemVrICE9IDApCisJCXJhbmdlX3RvX210cnJfd2l0aF9ob2xlKCZ2YXJfc3RhdGUsIDAsIDApOworCisJbnVtX3JlZyA9IHZhcl9zdGF0ZS5yZWc7CisJLyogQ2xlYXIgb3V0IHRoZSBleHRyYSBNVFJSJ3MgKi8KKwl3aGlsZSAodmFyX3N0YXRlLnJlZyA8IG51bV92YXJfcmFuZ2VzKSB7CisJCXNhdmVfdmFyX210cnIodmFyX3N0YXRlLnJlZywgMCwgMCwgMCk7CisJCXZhcl9zdGF0ZS5yZWcrKzsKKwl9CisKKwlyZXR1cm4gbnVtX3JlZzsKK30KKworc3RydWN0IG10cnJfY2xlYW51cF9yZXN1bHQgeworCXVuc2lnbmVkIGxvbmcgZ3Jhbl9zaXplazsKKwl1bnNpZ25lZCBsb25nIGNodW5rX3NpemVrOworCXVuc2lnbmVkIGxvbmcgbG9zZV9jb3Zlcl9zaXplazsKKwl1bnNpZ25lZCBpbnQgbnVtX3JlZzsKKwlpbnQgYmFkOworfTsKKworLyoKKyAqIGdyYW5fc2l6ZTogNjRLLCAxMjhLLCAyNTZLLCA1MTJLLCAxTSwgMk0sIC4uLiwgMkcKKyAqIGNodW5rIHNpemU6IGdyYW5fc2l6ZSwgLi4uLCAyRworICogc28gd2UgbmVlZCAoMSsxNikqOAorICovCisjZGVmaW5lIE5VTV9SRVNVTFQJMTM2CisjZGVmaW5lIFBTSElGVAkJKFBBR0VfU0hJRlQgLSAxMCkKKworc3RhdGljIHN0cnVjdCBtdHJyX2NsZWFudXBfcmVzdWx0IF9faW5pdGRhdGEgcmVzdWx0W05VTV9SRVNVTFRdOworc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBtaW5fbG9zc19wZm5bUkFOR0VfTlVNXTsKKworc3RhdGljIHZvaWQgX19pbml0IHByaW50X291dF9tdHJyX3JhbmdlX3N0YXRlKHZvaWQpCit7CisJaW50IGk7CisJY2hhciBzdGFydF9mYWN0b3IgPSAnSycsIHNpemVfZmFjdG9yID0gJ0snOworCXVuc2lnbmVkIGxvbmcgc3RhcnRfYmFzZSwgc2l6ZV9iYXNlOworCW10cnJfdHlwZSB0eXBlOworCisJZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKKworCQlzaXplX2Jhc2UgPSByYW5nZV9zdGF0ZVtpXS5zaXplX3BmbiA8PCAoUEFHRV9TSElGVCAtIDEwKTsKKwkJaWYgKCFzaXplX2Jhc2UpCisJCQljb250aW51ZTsKKworCQlzaXplX2Jhc2UgPSB0b19zaXplX2ZhY3RvcihzaXplX2Jhc2UsICZzaXplX2ZhY3RvciksCisJCXN0YXJ0X2Jhc2UgPSByYW5nZV9zdGF0ZVtpXS5iYXNlX3BmbiA8PCAoUEFHRV9TSElGVCAtIDEwKTsKKwkJc3RhcnRfYmFzZSA9IHRvX3NpemVfZmFjdG9yKHN0YXJ0X2Jhc2UsICZzdGFydF9mYWN0b3IpLAorCQl0eXBlID0gcmFuZ2Vfc3RhdGVbaV0udHlwZTsKKworCQlwcmludGsoS0VSTl9ERUJVRyAicmVnICVkLCBiYXNlOiAlbGQlY0IsIHJhbmdlOiAlbGQlY0IsIHR5cGUgJXNcbiIsCisJCQlpLCBzdGFydF9iYXNlLCBzdGFydF9mYWN0b3IsCisJCQlzaXplX2Jhc2UsIHNpemVfZmFjdG9yLAorCQkJKHR5cGUgPT0gTVRSUl9UWVBFX1VOQ0FDSEFCTEUpID8gIlVDIiA6CisJCQkgICAgKCh0eXBlID09IE1UUlJfVFlQRV9XUlBST1QpID8gIldQIiA6CisJCQkgICAgICgodHlwZSA9PSBNVFJSX1RZUEVfV1JCQUNLKSA/ICJXQiIgOiAiT3RoZXIiKSkKKwkJCSk7CisJfQorfQorCitzdGF0aWMgaW50IF9faW5pdCBtdHJyX25lZWRfY2xlYW51cCh2b2lkKQoreworCWludCBpOworCW10cnJfdHlwZSB0eXBlOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKwkvKiBleHRyYSBvbmUgZm9yIGFsbCAwICovCisJaW50IG51bVtNVFJSX05VTV9UWVBFUyArIDFdOworCisJLyogY2hlY2sgZW50cmllcyBudW1iZXIgKi8KKwltZW1zZXQobnVtLCAwLCBzaXplb2YobnVtKSk7CisJZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKKwkJdHlwZSA9IHJhbmdlX3N0YXRlW2ldLnR5cGU7CisJCXNpemUgPSByYW5nZV9zdGF0ZVtpXS5zaXplX3BmbjsKKwkJaWYgKHR5cGUgPj0gTVRSUl9OVU1fVFlQRVMpCisJCQljb250aW51ZTsKKwkJaWYgKCFzaXplKQorCQkJdHlwZSA9IE1UUlJfTlVNX1RZUEVTOworCQlpZiAodHlwZSA9PSBNVFJSX1RZUEVfV1JQUk9UKQorCQkJdHlwZSA9IE1UUlJfVFlQRV9VTkNBQ0hBQkxFOworCQludW1bdHlwZV0rKzsKKwl9CisKKwkvKiBjaGVjayBpZiB3ZSBnb3QgVUMgZW50cmllcyAqLworCWlmICghbnVtW01UUlJfVFlQRV9VTkNBQ0hBQkxFXSkKKwkJcmV0dXJuIDA7CisKKwkvKiBjaGVjayBpZiB3ZSBvbmx5IGhhZCBXQiBhbmQgVUMgKi8KKwlpZiAobnVtW01UUlJfVFlQRV9XUkJBQ0tdICsgbnVtW01UUlJfVFlQRV9VTkNBQ0hBQkxFXSAhPQorCQludW1fdmFyX3JhbmdlcyAtIG51bVtNVFJSX05VTV9UWVBFU10pCisJCXJldHVybiAwOworCisJcmV0dXJuIDE7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgcmFuZ2Vfc3VtczsKK3N0YXRpYyB2b2lkIF9faW5pdCBtdHJyX2NhbGNfcmFuZ2Vfc3RhdGUodTY0IGNodW5rX3NpemUsIHU2NCBncmFuX3NpemUsCisJCQkJCSB1bnNpZ25lZCBsb25nIGV4dHJhX3JlbW92ZV9iYXNlLAorCQkJCQkgdW5zaWduZWQgbG9uZyBleHRyYV9yZW1vdmVfc2l6ZSwKKwkJCQkJIGludCBpKQoreworCWludCBudW1fcmVnOworCXN0YXRpYyBzdHJ1Y3QgcmVzX3JhbmdlIHJhbmdlX25ld1tSQU5HRV9OVU1dOworCXN0YXRpYyBpbnQgbnJfcmFuZ2VfbmV3OworCXVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3Vtc19uZXc7CisKKwkvKiBjb252ZXJ0IHJhbmdlcyB0byB2YXIgcmFuZ2VzIHN0YXRlICovCisJbnVtX3JlZyA9IHg4Nl9zZXR1cF92YXJfbXRycnMocmFuZ2UsIG5yX3JhbmdlLAorCQkJCQkJY2h1bmtfc2l6ZSwgZ3Jhbl9zaXplKTsKKworCS8qIHdlIGdvdCBuZXcgc2V0dGluZyBpbiByYW5nZV9zdGF0ZSwgY2hlY2sgaXQgKi8KKwltZW1zZXQocmFuZ2VfbmV3LCAwLCBzaXplb2YocmFuZ2VfbmV3KSk7CisJbnJfcmFuZ2VfbmV3ID0geDg2X2dldF9tdHJyX21lbV9yYW5nZShyYW5nZV9uZXcsIDAsCisJCQkJZXh0cmFfcmVtb3ZlX2Jhc2UsIGV4dHJhX3JlbW92ZV9zaXplKTsKKwlyYW5nZV9zdW1zX25ldyA9IHN1bV9yYW5nZXMocmFuZ2VfbmV3LCBucl9yYW5nZV9uZXcpOworCisJcmVzdWx0W2ldLmNodW5rX3NpemVrID0gY2h1bmtfc2l6ZSA+PiAxMDsKKwlyZXN1bHRbaV0uZ3Jhbl9zaXplayA9IGdyYW5fc2l6ZSA+PiAxMDsKKwlyZXN1bHRbaV0ubnVtX3JlZyA9IG51bV9yZWc7CisJaWYgKHJhbmdlX3N1bXMgPCByYW5nZV9zdW1zX25ldykgeworCQlyZXN1bHRbaV0ubG9zZV9jb3Zlcl9zaXplayA9CisJCQkocmFuZ2Vfc3Vtc19uZXcgLSByYW5nZV9zdW1zKSA8PCBQU0hJRlQ7CisJCXJlc3VsdFtpXS5iYWQgPSAxOworCX0gZWxzZQorCQlyZXN1bHRbaV0ubG9zZV9jb3Zlcl9zaXplayA9CisJCQkocmFuZ2Vfc3VtcyAtIHJhbmdlX3N1bXNfbmV3KSA8PCBQU0hJRlQ7CisKKwkvKiBkb3VibGUgY2hlY2sgaXQgKi8KKwlpZiAoIXJlc3VsdFtpXS5iYWQgJiYgIXJlc3VsdFtpXS5sb3NlX2NvdmVyX3NpemVrKSB7CisJCWlmIChucl9yYW5nZV9uZXcgIT0gbnJfcmFuZ2UgfHwKKwkJCW1lbWNtcChyYW5nZSwgcmFuZ2VfbmV3LCBzaXplb2YocmFuZ2UpKSkKKwkJCQlyZXN1bHRbaV0uYmFkID0gMTsKKwl9CisKKwlpZiAoIXJlc3VsdFtpXS5iYWQgJiYgKHJhbmdlX3N1bXMgLSByYW5nZV9zdW1zX25ldyA8CisJCQkJbWluX2xvc3NfcGZuW251bV9yZWddKSkgeworCQltaW5fbG9zc19wZm5bbnVtX3JlZ10gPQorCQkJcmFuZ2Vfc3VtcyAtIHJhbmdlX3N1bXNfbmV3OworCX0KK30KKworc3RhdGljIHZvaWQgX19pbml0IG10cnJfcHJpbnRfb3V0X29uZV9yZXN1bHQoaW50IGkpCit7CisJY2hhciBncmFuX2ZhY3RvciwgY2h1bmtfZmFjdG9yLCBsb3NlX2ZhY3RvcjsKKwl1bnNpZ25lZCBsb25nIGdyYW5fYmFzZSwgY2h1bmtfYmFzZSwgbG9zZV9iYXNlOworCisJZ3Jhbl9iYXNlID0gdG9fc2l6ZV9mYWN0b3IocmVzdWx0W2ldLmdyYW5fc2l6ZWssICZncmFuX2ZhY3RvciksCisJY2h1bmtfYmFzZSA9IHRvX3NpemVfZmFjdG9yKHJlc3VsdFtpXS5jaHVua19zaXplaywgJmNodW5rX2ZhY3RvciksCisJbG9zZV9iYXNlID0gdG9fc2l6ZV9mYWN0b3IocmVzdWx0W2ldLmxvc2VfY292ZXJfc2l6ZWssICZsb3NlX2ZhY3RvciksCisJcHJpbnRrKEtFUk5fSU5GTyAiJXNncmFuX3NpemU6ICVsZCVjIFx0Y2h1bmtfc2l6ZTogJWxkJWMgXHQiLAorCQkJcmVzdWx0W2ldLmJhZCA/ICIqQkFEKiIgOiAiICIsCisJCQlncmFuX2Jhc2UsIGdyYW5fZmFjdG9yLCBjaHVua19iYXNlLCBjaHVua19mYWN0b3IpOworCXByaW50ayhLRVJOX0NPTlQgIm51bV9yZWc6ICVkICBcdGxvc2UgY292ZXIgUkFNOiAlcyVsZCVjXG4iLAorCQkJcmVzdWx0W2ldLm51bV9yZWcsIHJlc3VsdFtpXS5iYWQgPyAiLSIgOiAiIiwKKwkJCWxvc2VfYmFzZSwgbG9zZV9mYWN0b3IpOworfQorCitzdGF0aWMgaW50IF9faW5pdCBtdHJyX3NlYXJjaF9vcHRpbWFsX2luZGV4KHZvaWQpCit7CisJaW50IGk7CisJaW50IG51bV9yZWdfZ29vZDsKKwlpbnQgaW5kZXhfZ29vZDsKKworCWlmIChucl9tdHJyX3NwYXJlX3JlZyA+PSBudW1fdmFyX3JhbmdlcykKKwkJbnJfbXRycl9zcGFyZV9yZWcgPSBudW1fdmFyX3JhbmdlcyAtIDE7CisJbnVtX3JlZ19nb29kID0gLTE7CisJZm9yIChpID0gbnVtX3Zhcl9yYW5nZXMgLSBucl9tdHJyX3NwYXJlX3JlZzsgaSA+IDA7IGktLSkgeworCQlpZiAoIW1pbl9sb3NzX3BmbltpXSkKKwkJCW51bV9yZWdfZ29vZCA9IGk7CisJfQorCisJaW5kZXhfZ29vZCA9IC0xOworCWlmIChudW1fcmVnX2dvb2QgIT0gLTEpIHsKKwkJZm9yIChpID0gMDsgaSA8IE5VTV9SRVNVTFQ7IGkrKykgeworCQkJaWYgKCFyZXN1bHRbaV0uYmFkICYmCisJCQkgICAgcmVzdWx0W2ldLm51bV9yZWcgPT0gbnVtX3JlZ19nb29kICYmCisJCQkgICAgIXJlc3VsdFtpXS5sb3NlX2NvdmVyX3NpemVrKSB7CisJCQkJaW5kZXhfZ29vZCA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlyZXR1cm4gaW5kZXhfZ29vZDsKK30KKworCitpbnQgX19pbml0IG10cnJfY2xlYW51cCh1bnNpZ25lZCBhZGRyZXNzX2JpdHMpCit7CisJdW5zaWduZWQgbG9uZyBleHRyYV9yZW1vdmVfYmFzZSwgZXh0cmFfcmVtb3ZlX3NpemU7CisJdW5zaWduZWQgbG9uZyBiYXNlLCBzaXplLCBkZWYsIGR1bW15OworCW10cnJfdHlwZSB0eXBlOworCXU2NCBjaHVua19zaXplLCBncmFuX3NpemU7CisJaW50IGluZGV4X2dvb2Q7CisJaW50IGk7CisKKwlpZiAoIWlzX2NwdShJTlRFTCkgfHwgZW5hYmxlX210cnJfY2xlYW51cCA8IDEpCisJCXJldHVybiAwOworCXJkbXNyKE1UUlJkZWZUeXBlX01TUiwgZGVmLCBkdW1teSk7CisJZGVmICY9IDB4ZmY7CisJaWYgKGRlZiAhPSBNVFJSX1RZUEVfVU5DQUNIQUJMRSkKKwkJcmV0dXJuIDA7CisKKwkvKiBnZXQgaXQgYW5kIHN0b3JlIGl0IGFzaWRlICovCisJbWVtc2V0KHJhbmdlX3N0YXRlLCAwLCBzaXplb2YocmFuZ2Vfc3RhdGUpKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgeworCQltdHJyX2lmLT5nZXQoaSwgJmJhc2UsICZzaXplLCAmdHlwZSk7CisJCXJhbmdlX3N0YXRlW2ldLmJhc2VfcGZuID0gYmFzZTsKKwkJcmFuZ2Vfc3RhdGVbaV0uc2l6ZV9wZm4gPSBzaXplOworCQlyYW5nZV9zdGF0ZVtpXS50eXBlID0gdHlwZTsKKwl9CisKKwkvKiBjaGVjayBpZiB3ZSBuZWVkIGhhbmRsZSBpdCBhbmQgY2FuIGhhbmRsZSBpdCAqLworCWlmICghbXRycl9uZWVkX2NsZWFudXAoKSkKKwkJcmV0dXJuIDA7CisKKwkvKiBwcmludCBvcmlnaW5hbCB2YXIgTVRSUnMgYXQgZmlyc3QsIGZvciBkZWJ1Z2dpbmc6ICovCisJcHJpbnRrKEtFUk5fREVCVUcgIm9yaWdpbmFsIHZhcmlhYmxlIE1UUlJzXG4iKTsKKwlwcmludF9vdXRfbXRycl9yYW5nZV9zdGF0ZSgpOworCisJbWVtc2V0KHJhbmdlLCAwLCBzaXplb2YocmFuZ2UpKTsKKwlleHRyYV9yZW1vdmVfc2l6ZSA9IDA7CisJZXh0cmFfcmVtb3ZlX2Jhc2UgPSAxIDw8ICgzMiAtIFBBR0VfU0hJRlQpOworCWlmIChtdHJyX3RvbTIpCisJCWV4dHJhX3JlbW92ZV9zaXplID0KKwkJCShtdHJyX3RvbTIgPj4gUEFHRV9TSElGVCkgLSBleHRyYV9yZW1vdmVfYmFzZTsKKwlucl9yYW5nZSA9IHg4Nl9nZXRfbXRycl9tZW1fcmFuZ2UocmFuZ2UsIDAsIGV4dHJhX3JlbW92ZV9iYXNlLAorCQkJCQkgIGV4dHJhX3JlbW92ZV9zaXplKTsKKwkvKgorCSAqIFswLCAxTSkgc2hvdWxkIGFsd2F5cyBiZSBjb3ZlcnJlZCBieSB2YXIgbXRyciB3aXRoIFdCCisJICogYW5kIGZpeGVkIG10cnJzIHNob3VsZCB0YWtlIGVmZmVjdGl2ZSBiZWZvcmUgdmFyIG10cnIgZm9yIGl0CisJICovCisJbnJfcmFuZ2UgPSBhZGRfcmFuZ2Vfd2l0aF9tZXJnZShyYW5nZSwgbnJfcmFuZ2UsIDAsCisJCQkJCSgxVUxMPDwoMjAgLSBQQUdFX1NISUZUKSkgLSAxKTsKKwkvKiBzb3J0IHRoZSByYW5nZXMgKi8KKwlzb3J0KHJhbmdlLCBucl9yYW5nZSwgc2l6ZW9mKHN0cnVjdCByZXNfcmFuZ2UpLCBjbXBfcmFuZ2UsIE5VTEwpOworCisJcmFuZ2Vfc3VtcyA9IHN1bV9yYW5nZXMocmFuZ2UsIG5yX3JhbmdlKTsKKwlwcmludGsoS0VSTl9JTkZPICJ0b3RhbCBSQU0gY292ZXJyZWQ6ICVsZE1cbiIsCisJICAgICAgIHJhbmdlX3N1bXMgPj4gKDIwIC0gUEFHRV9TSElGVCkpOworCisJaWYgKG10cnJfY2h1bmtfc2l6ZSAmJiBtdHJyX2dyYW5fc2l6ZSkgeworCQlpID0gMDsKKwkJbXRycl9jYWxjX3JhbmdlX3N0YXRlKG10cnJfY2h1bmtfc2l6ZSwgbXRycl9ncmFuX3NpemUsCisJCQkJICAgICAgZXh0cmFfcmVtb3ZlX2Jhc2UsIGV4dHJhX3JlbW92ZV9zaXplLCBpKTsKKworCQltdHJyX3ByaW50X291dF9vbmVfcmVzdWx0KGkpOworCisJCWlmICghcmVzdWx0W2ldLmJhZCkgeworCQkJc2V0X3Zhcl9tdHJyX2FsbChhZGRyZXNzX2JpdHMpOworCQkJcHJpbnRrKEtFUk5fREVCVUcgIk5ldyB2YXJpYWJsZSBNVFJSc1xuIik7CisJCQlwcmludF9vdXRfbXRycl9yYW5nZV9zdGF0ZSgpOworCQkJcmV0dXJuIDE7CisJCX0KKwkJcHJpbnRrKEtFUk5fSU5GTyAiaW52YWxpZCBtdHJyX2dyYW5fc2l6ZSBvciBtdHJyX2NodW5rX3NpemUsICIKKwkJICAgICAgICJ3aWxsIGZpbmQgb3B0aW1hbCBvbmVcbiIpOworCX0KKworCWkgPSAwOworCW1lbXNldChtaW5fbG9zc19wZm4sIDB4ZmYsIHNpemVvZihtaW5fbG9zc19wZm4pKTsKKwltZW1zZXQocmVzdWx0LCAwLCBzaXplb2YocmVzdWx0KSk7CisJZm9yIChncmFuX3NpemUgPSAoMVVMTDw8MTYpOyBncmFuX3NpemUgPCAoMVVMTDw8MzIpOyBncmFuX3NpemUgPDw9IDEpIHsKKworCQlmb3IgKGNodW5rX3NpemUgPSBncmFuX3NpemU7IGNodW5rX3NpemUgPCAoMVVMTDw8MzIpOworCQkgICAgIGNodW5rX3NpemUgPDw9IDEpIHsKKworCQkJaWYgKGkgPj0gTlVNX1JFU1VMVCkKKwkJCQljb250aW51ZTsKKworCQkJbXRycl9jYWxjX3JhbmdlX3N0YXRlKGNodW5rX3NpemUsIGdyYW5fc2l6ZSwKKwkJCQkgICAgICBleHRyYV9yZW1vdmVfYmFzZSwgZXh0cmFfcmVtb3ZlX3NpemUsIGkpOworCQkJaWYgKGRlYnVnX3ByaW50KSB7CisJCQkJbXRycl9wcmludF9vdXRfb25lX3Jlc3VsdChpKTsKKwkJCQlwcmludGsoS0VSTl9JTkZPICJcbiIpOworCQkJfQorCisJCQlpKys7CisJCX0KKwl9CisKKwkvKiB0cnkgdG8gZmluZCB0aGUgb3B0aW1hbCBpbmRleCAqLworCWluZGV4X2dvb2QgPSBtdHJyX3NlYXJjaF9vcHRpbWFsX2luZGV4KCk7CisKKwlpZiAoaW5kZXhfZ29vZCAhPSAtMSkgeworCQlwcmludGsoS0VSTl9JTkZPICJGb3VuZCBvcHRpbWFsIHNldHRpbmcgZm9yIG10cnIgY2xlYW4gdXBcbiIpOworCQlpID0gaW5kZXhfZ29vZDsKKwkJbXRycl9wcmludF9vdXRfb25lX3Jlc3VsdChpKTsKKworCQkvKiBjb252ZXJ0IHJhbmdlcyB0byB2YXIgcmFuZ2VzIHN0YXRlICovCisJCWNodW5rX3NpemUgPSByZXN1bHRbaV0uY2h1bmtfc2l6ZWs7CisJCWNodW5rX3NpemUgPDw9IDEwOworCQlncmFuX3NpemUgPSByZXN1bHRbaV0uZ3Jhbl9zaXplazsKKwkJZ3Jhbl9zaXplIDw8PSAxMDsKKwkJeDg2X3NldHVwX3Zhcl9tdHJycyhyYW5nZSwgbnJfcmFuZ2UsIGNodW5rX3NpemUsIGdyYW5fc2l6ZSk7CisJCXNldF92YXJfbXRycl9hbGwoYWRkcmVzc19iaXRzKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIk5ldyB2YXJpYWJsZSBNVFJSc1xuIik7CisJCXByaW50X291dF9tdHJyX3JhbmdlX3N0YXRlKCk7CisJCXJldHVybiAxOworCX0gZWxzZSB7CisJCS8qIHByaW50IG91dCBhbGwgKi8KKwkJZm9yIChpID0gMDsgaSA8IE5VTV9SRVNVTFQ7IGkrKykKKwkJCW10cnJfcHJpbnRfb3V0X29uZV9yZXN1bHQoaSk7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAibXRycl9jbGVhbnVwOiBjYW4gbm90IGZpbmQgb3B0aW1hbCB2YWx1ZVxuIik7CisJcHJpbnRrKEtFUk5fSU5GTyAicGxlYXNlIHNwZWNpZnkgbXRycl9ncmFuX3NpemUvbXRycl9jaHVua19zaXplXG4iKTsKKworCXJldHVybiAwOworfQorI2Vsc2UKK2ludCBfX2luaXQgbXRycl9jbGVhbnVwKHVuc2lnbmVkIGFkZHJlc3NfYml0cykKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgorCitzdGF0aWMgaW50IGRpc2FibGVfbXRycl90cmltOworCitzdGF0aWMgaW50IF9faW5pdCBkaXNhYmxlX210cnJfdHJpbV9zZXR1cChjaGFyICpzdHIpCit7CisJZGlzYWJsZV9tdHJyX3RyaW0gPSAxOworCXJldHVybiAwOworfQorZWFybHlfcGFyYW0oImRpc2FibGVfbXRycl90cmltIiwgZGlzYWJsZV9tdHJyX3RyaW1fc2V0dXApOworCisvKgorICogTmV3ZXIgQU1EIEs4cyBhbmQgbGF0ZXIgQ1BVcyBoYXZlIGEgc3BlY2lhbCBtYWdpYyBNU1Igd2F5IHRvIGZvcmNlIFdCCisgKiBmb3IgbWVtb3J5ID40R0IuIENoZWNrIGZvciB0aGF0IGhlcmUuCisgKiBOb3RlIHRoaXMgd29uJ3QgY2hlY2sgaWYgdGhlIE1UUlJzIDwgNEdCIHdoZXJlIHRoZSBtYWdpYyBiaXQgZG9lc24ndAorICogYXBwbHkgdG8gYXJlIHdyb25nLCBidXQgc28gZmFyIHdlIGRvbid0IGtub3cgb2YgYW55IHN1Y2ggY2FzZSBpbiB0aGUgd2lsZC4KKyAqLworI2RlZmluZSBUb20yRW5hYmxlZCAoMVUgPDwgMjEpCisjZGVmaW5lIFRvbTJGb3JjZU1lbVR5cGVXQiAoMVUgPDwgMjIpCisKK2ludCBfX2luaXQgYW1kX3NwZWNpYWxfZGVmYXVsdF9tdHJyKHZvaWQpCit7CisJdTMyIGwsIGg7CisKKwlpZiAoYm9vdF9jcHVfZGF0YS54ODZfdmVuZG9yICE9IFg4Nl9WRU5ET1JfQU1EKQorCQlyZXR1cm4gMDsKKwlpZiAoYm9vdF9jcHVfZGF0YS54ODYgPCAweGYgfHwgYm9vdF9jcHVfZGF0YS54ODYgPiAweDExKQorCQlyZXR1cm4gMDsKKwkvKiBJbiBjYXNlIHNvbWUgaHlwZXJ2aXNvciBkb2Vzbid0IHBhc3MgU1lTQ0ZHIHRocm91Z2ggKi8KKwlpZiAocmRtc3Jfc2FmZShNU1JfSzhfU1lTQ0ZHLCAmbCwgJmgpIDwgMCkKKwkJcmV0dXJuIDA7CisJLyoKKwkgKiBNZW1vcnkgYmV0d2VlbiA0R0IgYW5kIHRvcCBvZiBtZW0gaXMgZm9yY2VkIFdCIGJ5IHRoaXMgbWFnaWMgYml0LgorCSAqIFJlc2VydmVkIGJlZm9yZSBLOFJldkYsIGJ1dCBzaG91bGQgYmUgemVybyB0aGVyZS4KKwkgKi8KKwlpZiAoKGwgJiAoVG9tMkVuYWJsZWQgfCBUb20yRm9yY2VNZW1UeXBlV0IpKSA9PQorCQkgKFRvbTJFbmFibGVkIHwgVG9tMkZvcmNlTWVtVHlwZVdCKSkKKwkJcmV0dXJuIDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1NjQgX19pbml0IHJlYWxfdHJpbV9tZW1vcnkodW5zaWduZWQgbG9uZyBzdGFydF9wZm4sCisJCQkJICAgdW5zaWduZWQgbG9uZyBsaW1pdF9wZm4pCit7CisJdTY0IHRyaW1fc3RhcnQsIHRyaW1fc2l6ZTsKKwl0cmltX3N0YXJ0ID0gc3RhcnRfcGZuOworCXRyaW1fc3RhcnQgPDw9IFBBR0VfU0hJRlQ7CisJdHJpbV9zaXplID0gbGltaXRfcGZuOworCXRyaW1fc2l6ZSA8PD0gUEFHRV9TSElGVDsKKwl0cmltX3NpemUgLT0gdHJpbV9zdGFydDsKKworCXJldHVybiBlODIwX3VwZGF0ZV9yYW5nZSh0cmltX3N0YXJ0LCB0cmltX3NpemUsIEU4MjBfUkFNLAorCQkJCUU4MjBfUkVTRVJWRUQpOworfQorLyoqCisgKiBtdHJyX3RyaW1fdW5jYWNoZWRfbWVtb3J5IC0gdHJpbSBSQU0gbm90IGNvdmVyZWQgYnkgTVRSUnMKKyAqIEBlbmRfcGZuOiBlbmRpbmcgcGFnZSBmcmFtZSBudW1iZXIKKyAqCisgKiBTb21lIGJ1Z2d5IEJJT1NlcyBkb24ndCBzZXR1cCB0aGUgTVRSUnMgcHJvcGVybHkgZm9yIHN5c3RlbXMgd2l0aCBjZXJ0YWluCisgKiBtZW1vcnkgY29uZmlndXJhdGlvbnMuICBUaGlzIHJvdXRpbmUgY2hlY2tzIHRoYXQgdGhlIGhpZ2hlc3QgTVRSUiBtYXRjaGVzCisgKiB0aGUgZW5kIG9mIG1lbW9yeSwgdG8gbWFrZSBzdXJlIHRoZSBNVFJScyBoYXZpbmcgYSB3cml0ZSBiYWNrIHR5cGUgY292ZXIKKyAqIGFsbCBvZiB0aGUgbWVtb3J5IHRoZSBrZXJuZWwgaXMgaW50ZW5kaW5nIHRvIHVzZS4gSWYgbm90LCBpdCdsbCB0cmltIGFueQorICogbWVtb3J5IG9mZiB0aGUgZW5kIGJ5IGFkanVzdGluZyBlbmRfcGZuLCByZW1vdmluZyBpdCBmcm9tIHRoZSBrZXJuZWwncworICogYWxsb2NhdGlvbiBwb29scywgd2FybmluZyB0aGUgdXNlciB3aXRoIGFuIG9ibm94aW91cyBtZXNzYWdlLgorICovCitpbnQgX19pbml0IG10cnJfdHJpbV91bmNhY2hlZF9tZW1vcnkodW5zaWduZWQgbG9uZyBlbmRfcGZuKQoreworCXVuc2lnbmVkIGxvbmcgaSwgYmFzZSwgc2l6ZSwgaGlnaGVzdF9wZm4gPSAwLCBkZWYsIGR1bW15OworCW10cnJfdHlwZSB0eXBlOworCXU2NCB0b3RhbF90cmltX3NpemU7CisKKwkvKiBleHRyYSBvbmUgZm9yIGFsbCAwICovCisJaW50IG51bVtNVFJSX05VTV9UWVBFUyArIDFdOworCS8qCisJICogTWFrZSBzdXJlIHdlIG9ubHkgdHJpbSB1bmNhY2hhYmxlIG1lbW9yeSBvbiBtYWNoaW5lcyB0aGF0CisJICogc3VwcG9ydCB0aGUgSW50ZWwgTVRSUiBhcmNoaXRlY3R1cmU6CisJICovCisJaWYgKCFpc19jcHUoSU5URUwpIHx8IGRpc2FibGVfbXRycl90cmltKQorCQlyZXR1cm4gMDsKKwlyZG1zcihNVFJSZGVmVHlwZV9NU1IsIGRlZiwgZHVtbXkpOworCWRlZiAmPSAweGZmOworCWlmIChkZWYgIT0gTVRSUl9UWVBFX1VOQ0FDSEFCTEUpCisJCXJldHVybiAwOworCisJLyogZ2V0IGl0IGFuZCBzdG9yZSBpdCBhc2lkZSAqLworCW1lbXNldChyYW5nZV9zdGF0ZSwgMCwgc2l6ZW9mKHJhbmdlX3N0YXRlKSk7CisJZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKKwkJbXRycl9pZi0+Z2V0KGksICZiYXNlLCAmc2l6ZSwgJnR5cGUpOworCQlyYW5nZV9zdGF0ZVtpXS5iYXNlX3BmbiA9IGJhc2U7CisJCXJhbmdlX3N0YXRlW2ldLnNpemVfcGZuID0gc2l6ZTsKKwkJcmFuZ2Vfc3RhdGVbaV0udHlwZSA9IHR5cGU7CisJfQorCisJLyogRmluZCBoaWdoZXN0IGNhY2hlZCBwZm4gKi8KKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgeworCQl0eXBlID0gcmFuZ2Vfc3RhdGVbaV0udHlwZTsKKwkJaWYgKHR5cGUgIT0gTVRSUl9UWVBFX1dSQkFDSykKKwkJCWNvbnRpbnVlOworCQliYXNlID0gcmFuZ2Vfc3RhdGVbaV0uYmFzZV9wZm47CisJCXNpemUgPSByYW5nZV9zdGF0ZVtpXS5zaXplX3BmbjsKKwkJaWYgKGhpZ2hlc3RfcGZuIDwgYmFzZSArIHNpemUpCisJCQloaWdoZXN0X3BmbiA9IGJhc2UgKyBzaXplOworCX0KKworCS8qIGt2bS9xZW11IGRvZXNuJ3QgaGF2ZSBtdHJyIHNldCByaWdodCwgZG9uJ3QgdHJpbSB0aGVtIGFsbCAqLworCWlmICghaGlnaGVzdF9wZm4pIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQ1BVIE1UUlJzIGFsbCBibGFuayAtIHZpcnR1YWxpemVkIHN5c3RlbS5cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBjaGVjayBlbnRyaWVzIG51bWJlciAqLworCW1lbXNldChudW0sIDAsIHNpemVvZihudW0pKTsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgeworCQl0eXBlID0gcmFuZ2Vfc3RhdGVbaV0udHlwZTsKKwkJaWYgKHR5cGUgPj0gTVRSUl9OVU1fVFlQRVMpCisJCQljb250aW51ZTsKKwkJc2l6ZSA9IHJhbmdlX3N0YXRlW2ldLnNpemVfcGZuOworCQlpZiAoIXNpemUpCisJCQl0eXBlID0gTVRSUl9OVU1fVFlQRVM7CisJCW51bVt0eXBlXSsrOworCX0KKworCS8qIG5vIGVudHJ5IGZvciBXQj8gKi8KKwlpZiAoIW51bVtNVFJSX1RZUEVfV1JCQUNLXSkKKwkJcmV0dXJuIDA7CisKKwkvKiBjaGVjayBpZiB3ZSBvbmx5IGhhZCBXQiBhbmQgVUMgKi8KKwlpZiAobnVtW01UUlJfVFlQRV9XUkJBQ0tdICsgbnVtW01UUlJfVFlQRV9VTkNBQ0hBQkxFXSAhPQorCQludW1fdmFyX3JhbmdlcyAtIG51bVtNVFJSX05VTV9UWVBFU10pCisJCXJldHVybiAwOworCisJbWVtc2V0KHJhbmdlLCAwLCBzaXplb2YocmFuZ2UpKTsKKwlucl9yYW5nZSA9IDA7CisJaWYgKG10cnJfdG9tMikgeworCQlyYW5nZVtucl9yYW5nZV0uc3RhcnQgPSAoMVVMTDw8KDMyIC0gUEFHRV9TSElGVCkpOworCQlyYW5nZVtucl9yYW5nZV0uZW5kID0gKG10cnJfdG9tMiA+PiBQQUdFX1NISUZUKSAtIDE7CisJCWlmIChoaWdoZXN0X3BmbiA8IHJhbmdlW25yX3JhbmdlXS5lbmQgKyAxKQorCQkJaGlnaGVzdF9wZm4gPSByYW5nZVtucl9yYW5nZV0uZW5kICsgMTsKKwkJbnJfcmFuZ2UrKzsKKwl9CisJbnJfcmFuZ2UgPSB4ODZfZ2V0X210cnJfbWVtX3JhbmdlKHJhbmdlLCBucl9yYW5nZSwgMCwgMCk7CisKKwl0b3RhbF90cmltX3NpemUgPSAwOworCS8qIGNoZWNrIHRoZSBoZWFkICovCisJaWYgKHJhbmdlWzBdLnN0YXJ0KQorCQl0b3RhbF90cmltX3NpemUgKz0gcmVhbF90cmltX21lbW9yeSgwLCByYW5nZVswXS5zdGFydCk7CisJLyogY2hlY2sgdGhlIGhvbGVzICovCisJZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlIC0gMTsgaSsrKSB7CisJCWlmIChyYW5nZVtpXS5lbmQgKyAxIDwgcmFuZ2VbaSsxXS5zdGFydCkKKwkJCXRvdGFsX3RyaW1fc2l6ZSArPSByZWFsX3RyaW1fbWVtb3J5KHJhbmdlW2ldLmVuZCArIDEsCisJCQkJCQkJICAgIHJhbmdlW2krMV0uc3RhcnQpOworCX0KKwkvKiBjaGVjayB0aGUgdG9wICovCisJaSA9IG5yX3JhbmdlIC0gMTsKKwlpZiAocmFuZ2VbaV0uZW5kICsgMSA8IGVuZF9wZm4pCisJCXRvdGFsX3RyaW1fc2l6ZSArPSByZWFsX3RyaW1fbWVtb3J5KHJhbmdlW2ldLmVuZCArIDEsCisJCQkJCQkJIGVuZF9wZm4pOworCisJaWYgKHRvdGFsX3RyaW1fc2l6ZSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJXQVJOSU5HOiBCSU9TIGJ1ZzogQ1BVIE1UUlJzIGRvbid0IGNvdmVyIgorCQkJIiBhbGwgb2YgbWVtb3J5LCBsb3NpbmcgJWxsdU1CIG9mIFJBTS5cbiIsCisJCQl0b3RhbF90cmltX3NpemUgPj4gMjApOworCisJCWlmICghY2hhbmdlZF9ieV9tdHJyX2NsZWFudXApCisJCQlXQVJOX09OKDEpOworCisJCXByaW50ayhLRVJOX0lORk8gInVwZGF0ZSBlODIwIGZvciBtdHJyXG4iKTsKKwkJdXBkYXRlX2U4MjAoKTsKKworCQlyZXR1cm4gMTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9nZW5lcmljLmMKaW5kZXggMGMwYTQ1NS4uMzdmMjhmYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL2dlbmVyaWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvZ2VuZXJpYy5jCkBAIC0zMywxMyArMzMsMzEgQEAKIHN0cnVjdCBtdHJyX3N0YXRlX3R5cGUgbXRycl9zdGF0ZSA9IHt9OwogRVhQT1JUX1NZTUJPTF9HUEwobXRycl9zdGF0ZSk7CiAKLXN0YXRpYyBpbnQgX19pbml0ZGF0YSBtdHJyX3Nob3c7Ci1zdGF0aWMgaW50IF9faW5pdCBtdHJyX2RlYnVnKGNoYXIgKm9wdCkKKy8qKgorICogQklPUyBpcyBleHBlY3RlZCB0byBjbGVhciBNdHJyRml4RHJhbU1vZEVuIGJpdCwgc2VlIGZvciBleGFtcGxlCisgKiAiQklPUyBhbmQgS2VybmVsIERldmVsb3BlcidzIEd1aWRlIGZvciB0aGUgQU1EIEF0aGxvbiA2NCBhbmQgQU1ECisgKiBPcHRlcm9uIFByb2Nlc3NvcnMiICgyNjA5NCBSZXYuIDMuMzAgRmVicnVhcnkgMjAwNiksIHNlY3Rpb24KKyAqICIxMy4yLjEuMiBTWVNDRkcgUmVnaXN0ZXIiOiAiVGhlIE10cnJGaXhEcmFtTW9kRW4gYml0IHNob3VsZCBiZSBzZXQKKyAqIHRvIDEgZHVyaW5nIEJJT1MgaW5pdGFsaXphdGlvbiBvZiB0aGUgZml4ZWQgTVRSUnMsIHRoZW4gY2xlYXJlZCB0bworICogMCBmb3Igb3BlcmF0aW9uLiIKKyAqLworc3RhdGljIGlubGluZSB2b2lkIGs4X2NoZWNrX3N5c2NmZ19kcmFtX21vZF9lbih2b2lkKQogewotCW10cnJfc2hvdyA9IDE7Ci0JcmV0dXJuIDA7CisJdTMyIGxvLCBoaTsKKworCWlmICghKChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpICYmCisJICAgICAgKGJvb3RfY3B1X2RhdGEueDg2ID49IDB4MGYpKSkKKwkJcmV0dXJuOworCisJcmRtc3IoTVNSX0s4X1NZU0NGRywgbG8sIGhpKTsKKwlpZiAobG8gJiBLOF9NVFJSRklYUkFOR0VfRFJBTV9NT0RJRlkpIHsKKwkJcHJpbnRrKEtFUk5fRVJSIEZXX1dBUk4gIk1UUlI6IENQVSAldTogU1lTQ0ZHW010cnJGaXhEcmFtTW9kRW5dIgorCQkgICAgICAgIiBub3QgY2xlYXJlZCBieSBCSU9TLCBjbGVhcmluZyB0aGlzIGJpdFxuIiwKKwkJICAgICAgIHNtcF9wcm9jZXNzb3JfaWQoKSk7CisJCWxvICY9IH5LOF9NVFJSRklYUkFOR0VfRFJBTV9NT0RJRlk7CisJCW10cnJfd3Jtc3IoTVNSX0s4X1NZU0NGRywgbG8sIGhpKTsKKwl9CiB9Ci1lYXJseV9wYXJhbSgibXRyci5zaG93IiwgbXRycl9kZWJ1Zyk7CiAKIC8qCiAgKiBSZXR1cm5zIHRoZSBlZmZlY3RpdmUgTVRSUiB0eXBlIGZvciB0aGUgcmVnaW9uCkBAIC0xNzQsNiArMTkyLDggQEAKIAl1bnNpZ25lZCBpbnQgKnAgPSAodW5zaWduZWQgaW50ICopIGZyczsKIAlpbnQgaTsKIAorCWs4X2NoZWNrX3N5c2NmZ19kcmFtX21vZF9lbigpOworCiAJcmRtc3IoTVRSUmZpeDY0S18wMDAwMF9NU1IsIHBbMF0sIHBbMV0pOwogCiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykKQEAgLTE4OCwxOCArMjA4LDk0IEBACiAJCWdldF9maXhlZF9yYW5nZXMobXRycl9zdGF0ZS5maXhlZF9yYW5nZXMpOwogfQogCi1zdGF0aWMgdm9pZCBwcmludF9maXhlZCh1bnNpZ25lZCBiYXNlLCB1bnNpZ25lZCBzdGVwLCBjb25zdCBtdHJyX3R5cGUqdHlwZXMpCitzdGF0aWMgdW5zaWduZWQgX19pbml0ZGF0YSBsYXN0X2ZpeGVkX3N0YXJ0Oworc3RhdGljIHVuc2lnbmVkIF9faW5pdGRhdGEgbGFzdF9maXhlZF9lbmQ7CitzdGF0aWMgbXRycl90eXBlIF9faW5pdGRhdGEgbGFzdF9maXhlZF90eXBlOworCitzdGF0aWMgdm9pZCBfX2luaXQgcHJpbnRfZml4ZWRfbGFzdCh2b2lkKQoreworCWlmICghbGFzdF9maXhlZF9lbmQpCisJCXJldHVybjsKKworCXByaW50ayhLRVJOX0RFQlVHICIgICUwNVgtJTA1WCAlc1xuIiwgbGFzdF9maXhlZF9zdGFydCwKKwkJbGFzdF9maXhlZF9lbmQgLSAxLCBtdHJyX2F0dHJpYl90b19zdHIobGFzdF9maXhlZF90eXBlKSk7CisKKwlsYXN0X2ZpeGVkX2VuZCA9IDA7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB1cGRhdGVfZml4ZWRfbGFzdCh1bnNpZ25lZCBiYXNlLCB1bnNpZ25lZCBlbmQsCisJCQkJICAgICAgIG10cnJfdHlwZSB0eXBlKQoreworCWxhc3RfZml4ZWRfc3RhcnQgPSBiYXNlOworCWxhc3RfZml4ZWRfZW5kID0gZW5kOworCWxhc3RfZml4ZWRfdHlwZSA9IHR5cGU7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBwcmludF9maXhlZCh1bnNpZ25lZCBiYXNlLCB1bnNpZ25lZCBzdGVwLAorCQkJICAgICAgIGNvbnN0IG10cnJfdHlwZSAqdHlwZXMpCiB7CiAJdW5zaWduZWQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCA4OyArK2ksICsrdHlwZXMsIGJhc2UgKz0gc3RlcCkKLQkJcHJpbnRrKEtFUk5fSU5GTyAiTVRSUiAlMDVYLSUwNVggJXNcbiIsCi0JCQliYXNlLCBiYXNlICsgc3RlcCAtIDEsIG10cnJfYXR0cmliX3RvX3N0cigqdHlwZXMpKTsKKwlmb3IgKGkgPSAwOyBpIDwgODsgKytpLCArK3R5cGVzLCBiYXNlICs9IHN0ZXApIHsKKwkJaWYgKGxhc3RfZml4ZWRfZW5kID09IDApIHsKKwkJCXVwZGF0ZV9maXhlZF9sYXN0KGJhc2UsIGJhc2UgKyBzdGVwLCAqdHlwZXMpOworCQkJY29udGludWU7CisJCX0KKwkJaWYgKGxhc3RfZml4ZWRfZW5kID09IGJhc2UgJiYgbGFzdF9maXhlZF90eXBlID09ICp0eXBlcykgeworCQkJbGFzdF9maXhlZF9lbmQgPSBiYXNlICsgc3RlcDsKKwkJCWNvbnRpbnVlOworCQl9CisJCS8qIG5ldyBzZWdtZW50czogZ2FwIG9yIGRpZmZlcmVudCB0eXBlICovCisJCXByaW50X2ZpeGVkX2xhc3QoKTsKKwkJdXBkYXRlX2ZpeGVkX2xhc3QoYmFzZSwgYmFzZSArIHN0ZXAsICp0eXBlcyk7CisJfQogfQogCiBzdGF0aWMgdm9pZCBwcmVwYXJlX3NldCh2b2lkKTsKIHN0YXRpYyB2b2lkIHBvc3Rfc2V0KHZvaWQpOwogCitzdGF0aWMgdm9pZCBfX2luaXQgcHJpbnRfbXRycl9zdGF0ZSh2b2lkKQoreworCXVuc2lnbmVkIGludCBpOworCWludCBoaWdoX3dpZHRoOworCisJcHJpbnRrKEtFUk5fREVCVUcgIk1UUlIgZGVmYXVsdCB0eXBlOiAlc1xuIiwKKwkJCSBtdHJyX2F0dHJpYl90b19zdHIobXRycl9zdGF0ZS5kZWZfdHlwZSkpOworCWlmIChtdHJyX3N0YXRlLmhhdmVfZml4ZWQpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIk1UUlIgZml4ZWQgcmFuZ2VzICVzYWJsZWQ6XG4iLAorCQkgICAgICAgbXRycl9zdGF0ZS5lbmFibGVkICYgMSA/ICJlbiIgOiAiZGlzIik7CisJCXByaW50X2ZpeGVkKDB4MDAwMDAsIDB4MTAwMDAsIG10cnJfc3RhdGUuZml4ZWRfcmFuZ2VzICsgMCk7CisJCWZvciAoaSA9IDA7IGkgPCAyOyArK2kpCisJCQlwcmludF9maXhlZCgweDgwMDAwICsgaSAqIDB4MjAwMDAsIDB4MDQwMDAsIG10cnJfc3RhdGUuZml4ZWRfcmFuZ2VzICsgKGkgKyAxKSAqIDgpOworCQlmb3IgKGkgPSAwOyBpIDwgODsgKytpKQorCQkJcHJpbnRfZml4ZWQoMHhDMDAwMCArIGkgKiAweDA4MDAwLCAweDAxMDAwLCBtdHJyX3N0YXRlLmZpeGVkX3JhbmdlcyArIChpICsgMykgKiA4KTsKKworCQkvKiB0YWlsICovCisJCXByaW50X2ZpeGVkX2xhc3QoKTsKKwl9CisJcHJpbnRrKEtFUk5fREVCVUcgIk1UUlIgdmFyaWFibGUgcmFuZ2VzICVzYWJsZWQ6XG4iLAorCSAgICAgICBtdHJyX3N0YXRlLmVuYWJsZWQgJiAyID8gImVuIiA6ICJkaXMiKTsKKwloaWdoX3dpZHRoID0gKChzaXplX29yX21hc2sgPyBmZnMoc2l6ZV9vcl9tYXNrKSAtIDEgOiAzMikgLSAoMzIgLSBQQUdFX1NISUZUKSArIDMpIC8gNDsKKwlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7ICsraSkgeworCQlpZiAobXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLm1hc2tfbG8gJiAoMSA8PCAxMSkpCisJCQlwcmludGsoS0VSTl9ERUJVRyAiICAldSBiYXNlICUwKlglMDVYMDAwIG1hc2sgJTAqWCUwNVgwMDAgJXNcbiIsCisJCQkgICAgICAgaSwKKwkJCSAgICAgICBoaWdoX3dpZHRoLAorCQkJICAgICAgIG10cnJfc3RhdGUudmFyX3Jhbmdlc1tpXS5iYXNlX2hpLAorCQkJICAgICAgIG10cnJfc3RhdGUudmFyX3Jhbmdlc1tpXS5iYXNlX2xvID4+IDEyLAorCQkJICAgICAgIGhpZ2hfd2lkdGgsCisJCQkgICAgICAgbXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLm1hc2tfaGksCisJCQkgICAgICAgbXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLm1hc2tfbG8gPj4gMTIsCisJCQkgICAgICAgbXRycl9hdHRyaWJfdG9fc3RyKG10cnJfc3RhdGUudmFyX3Jhbmdlc1tpXS5iYXNlX2xvICYgMHhmZikpOworCQllbHNlCisJCQlwcmludGsoS0VSTl9ERUJVRyAiICAldSBkaXNhYmxlZFxuIiwgaSk7CisJfQorCWlmIChtdHJyX3RvbTIpIHsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlRPTTI6ICUwMTZsbHggYWthICVsbGRNXG4iLAorCQkJCSAgbXRycl90b20yLCBtdHJyX3RvbTI+PjIwKTsKKwl9Cit9CisKIC8qICBHcmFiIGFsbCBvZiB0aGUgTVRSUiBzdGF0ZSBmb3IgdGhpcyBDUFUgaW50byAqc3RhdGUgICovCiB2b2lkIF9faW5pdCBnZXRfbXRycl9zdGF0ZSh2b2lkKQogewpAQCAtMjMxLDQxICszMjcsOSBAQAogCQltdHJyX3RvbTIgfD0gbG93OwogCQltdHJyX3RvbTIgJj0gMHhmZmZmZmY4MDAwMDBVTEw7CiAJfQotCWlmIChtdHJyX3Nob3cpIHsKLQkJaW50IGhpZ2hfd2lkdGg7CiAKLQkJcHJpbnRrKEtFUk5fSU5GTyAiTVRSUiBkZWZhdWx0IHR5cGU6ICVzXG4iLCBtdHJyX2F0dHJpYl90b19zdHIobXRycl9zdGF0ZS5kZWZfdHlwZSkpOwotCQlpZiAobXRycl9zdGF0ZS5oYXZlX2ZpeGVkKSB7Ci0JCQlwcmludGsoS0VSTl9JTkZPICJNVFJSIGZpeGVkIHJhbmdlcyAlc2FibGVkOlxuIiwKLQkJCSAgICAgICBtdHJyX3N0YXRlLmVuYWJsZWQgJiAxID8gImVuIiA6ICJkaXMiKTsKLQkJCXByaW50X2ZpeGVkKDB4MDAwMDAsIDB4MTAwMDAsIG10cnJfc3RhdGUuZml4ZWRfcmFuZ2VzICsgMCk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgMjsgKytpKQotCQkJCXByaW50X2ZpeGVkKDB4ODAwMDAgKyBpICogMHgyMDAwMCwgMHgwNDAwMCwgbXRycl9zdGF0ZS5maXhlZF9yYW5nZXMgKyAoaSArIDEpICogOCk7Ci0JCQlmb3IgKGkgPSAwOyBpIDwgODsgKytpKQotCQkJCXByaW50X2ZpeGVkKDB4QzAwMDAgKyBpICogMHgwODAwMCwgMHgwMTAwMCwgbXRycl9zdGF0ZS5maXhlZF9yYW5nZXMgKyAoaSArIDMpICogOCk7Ci0JCX0KLQkJcHJpbnRrKEtFUk5fSU5GTyAiTVRSUiB2YXJpYWJsZSByYW5nZXMgJXNhYmxlZDpcbiIsCi0JCSAgICAgICBtdHJyX3N0YXRlLmVuYWJsZWQgJiAyID8gImVuIiA6ICJkaXMiKTsKLQkJaGlnaF93aWR0aCA9ICgoc2l6ZV9vcl9tYXNrID8gZmZzKHNpemVfb3JfbWFzaykgLSAxIDogMzIpIC0gKDMyIC0gUEFHRV9TSElGVCkgKyAzKSAvIDQ7Ci0JCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgKytpKSB7Ci0JCQlpZiAobXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLm1hc2tfbG8gJiAoMSA8PCAxMSkpCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiTVRSUiAldSBiYXNlICUwKlglMDVYMDAwIG1hc2sgJTAqWCUwNVgwMDAgJXNcbiIsCi0JCQkJICAgICAgIGksCi0JCQkJICAgICAgIGhpZ2hfd2lkdGgsCi0JCQkJICAgICAgIG10cnJfc3RhdGUudmFyX3Jhbmdlc1tpXS5iYXNlX2hpLAotCQkJCSAgICAgICBtdHJyX3N0YXRlLnZhcl9yYW5nZXNbaV0uYmFzZV9sbyA+PiAxMiwKLQkJCQkgICAgICAgaGlnaF93aWR0aCwKLQkJCQkgICAgICAgbXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLm1hc2tfaGksCi0JCQkJICAgICAgIG10cnJfc3RhdGUudmFyX3Jhbmdlc1tpXS5tYXNrX2xvID4+IDEyLAotCQkJCSAgICAgICBtdHJyX2F0dHJpYl90b19zdHIobXRycl9zdGF0ZS52YXJfcmFuZ2VzW2ldLmJhc2VfbG8gJiAweGZmKSk7Ci0JCQllbHNlCi0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiTVRSUiAldSBkaXNhYmxlZFxuIiwgaSk7Ci0JCX0KLQkJaWYgKG10cnJfdG9tMikgewotCQkJcHJpbnRrKEtFUk5fSU5GTyAiVE9NMjogJTAxNmxseCBha2EgJWxsZE1cbiIsCi0JCQkJCSAgbXRycl90b20yLCBtdHJyX3RvbTI+PjIwKTsKLQkJfQotCX0KKwlwcmludF9tdHJyX3N0YXRlKCk7CisKIAltdHJyX3N0YXRlX3NldCA9IDE7CiAKIAkvKiBQQVQgc2V0dXAgZm9yIEJQLiBXZSBuZWVkIHRvIGdvIHRocm91Z2ggc3luYyBzdGVwcyBoZXJlICovCkBAIC0zMDgsMjcgKzM3MiwxMCBAQAogfQogCiAvKioKLSAqIEVuYWJsZSBhbmQgYWxsb3cgcmVhZC93cml0ZSBvZiBleHRlbmRlZCBmaXhlZC1yYW5nZSBNVFJSIGJpdHMgb24gSzggQ1BVcwotICogc2VlIEFNRCBwdWJsaWNhdGlvbiBuby4gMjQ1OTMsIGNoYXB0ZXIgMy4yLjEgZm9yIG1vcmUgaW5mb3JtYXRpb24KLSAqLwotc3RhdGljIGlubGluZSB2b2lkIGs4X2VuYWJsZV9maXhlZF9pb3Jycyh2b2lkKQotewotCXVuc2lnbmVkIGxvLCBoaTsKLQotCXJkbXNyKE1TUl9LOF9TWVNDRkcsIGxvLCBoaSk7Ci0JbXRycl93cm1zcihNU1JfSzhfU1lTQ0ZHLCBsbwotCQkJCXwgSzhfTVRSUkZJWFJBTkdFX0RSQU1fRU5BQkxFCi0JCQkJfCBLOF9NVFJSRklYUkFOR0VfRFJBTV9NT0RJRlksIGhpKTsKLX0KLQotLyoqCiAgKiBzZXRfZml4ZWRfcmFuZ2UgLSBjaGVja3MgJiB1cGRhdGVzIGEgZml4ZWQtcmFuZ2UgTVRSUiBpZiBpdCBkaWZmZXJzIGZyb20gdGhlIHZhbHVlIGl0IHNob3VsZCBoYXZlCiAgKiBAbXNyOiBNU1IgYWRkcmVzcyBvZiB0aGUgTVRUUiB3aGljaCBzaG91bGQgYmUgY2hlY2tlZCBhbmQgdXBkYXRlZAogICogQGNoYW5nZWQ6IHBvaW50ZXIgd2hpY2ggaW5kaWNhdGVzIHdoZXRoZXIgdGhlIE1UUlIgbmVlZGVkIHRvIGJlIGNoYW5nZWQKICAqIEBtc3J3b3JkczogcG9pbnRlciB0byB0aGUgTVNSIHZhbHVlcyB3aGljaCB0aGUgTVNSIHNob3VsZCBoYXZlCi0gKgotICogSWYgSzggZXh0ZW50aW9ucyBhcmUgd2FudGVkLCB1cGRhdGUgdGhlIEs4IFNZU0NGRyBNU1IgYWxzby4KLSAqIFNlZSBBTUQgcHVibGljYXRpb24gbm8uIDI0NTkzLCBjaGFwdGVyIDcuOC4xLCBwYWdlIDIzMyBmb3IgbW9yZSBpbmZvcm1hdGlvbi4KICAqLwogc3RhdGljIHZvaWQgc2V0X2ZpeGVkX3JhbmdlKGludCBtc3IsIGJvb2wgKmNoYW5nZWQsIHVuc2lnbmVkIGludCAqbXNyd29yZHMpCiB7CkBAIC0zMzcsMTAgKzM4NCw2IEBACiAJcmRtc3IobXNyLCBsbywgaGkpOwogCiAJaWYgKGxvICE9IG1zcndvcmRzWzBdIHx8IGhpICE9IG1zcndvcmRzWzFdKSB7Ci0JCWlmIChib290X2NwdV9kYXRhLng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQgJiYKLQkJICAgIChib290X2NwdV9kYXRhLng4NiA+PSAweDBmICYmIGJvb3RfY3B1X2RhdGEueDg2IDw9IDB4MTEpICYmCi0JCSAgICAoKG1zcndvcmRzWzBdIHwgbXNyd29yZHNbMV0pICYgSzhfTVRSUl9SRE1FTV9XUk1FTV9NQVNLKSkKLQkJCWs4X2VuYWJsZV9maXhlZF9pb3JycygpOwogCQltdHJyX3dybXNyKG1zciwgbXNyd29yZHNbMF0sIG1zcndvcmRzWzFdKTsKIAkJKmNoYW5nZWQgPSB0cnVlOwogCX0KQEAgLTM3NiwyMiArNDE5LDMxIEBACiB7CiAJdW5zaWduZWQgaW50IG1hc2tfbG8sIG1hc2tfaGksIGJhc2VfbG8sIGJhc2VfaGk7CiAJdW5zaWduZWQgaW50IHRtcCwgaGk7CisJaW50IGNwdTsKKworCS8qCisJICogZ2V0X210cnIgZG9lc24ndCBuZWVkIHRvIHVwZGF0ZSBtdHJyX3N0YXRlLCBhbHNvIGl0IGNvdWxkIGJlIGNhbGxlZAorCSAqIGZyb20gYW55IGNwdSwgc28gdHJ5IHRvIHByaW50IGl0IG91dCBkaXJlY3RseS4KKwkgKi8KKwljcHUgPSBnZXRfY3B1KCk7CiAKIAlyZG1zcihNVFJScGh5c01hc2tfTVNSKHJlZyksIG1hc2tfbG8sIG1hc2tfaGkpOworCiAJaWYgKChtYXNrX2xvICYgMHg4MDApID09IDApIHsKIAkJLyogIEludmFsaWQgKGkuZS4gZnJlZSkgcmFuZ2UgICovCiAJCSpiYXNlID0gMDsKIAkJKnNpemUgPSAwOwogCQkqdHlwZSA9IDA7Ci0JCXJldHVybjsKKwkJZ290byBvdXRfcHV0X2NwdTsKIAl9CiAKIAlyZG1zcihNVFJScGh5c0Jhc2VfTVNSKHJlZyksIGJhc2VfbG8sIGJhc2VfaGkpOwogCi0JLyogV29yayBvdXQgdGhlIHNoaWZ0ZWQgYWRkcmVzcyBtYXNrLiAqLworCS8qIFdvcmsgb3V0IHRoZSBzaGlmdGVkIGFkZHJlc3MgbWFzazogKi8KIAl0bXAgPSBtYXNrX2hpIDw8ICgzMiAtIFBBR0VfU0hJRlQpIHwgbWFza19sbyA+PiBQQUdFX1NISUZUOwogCW1hc2tfbG8gPSBzaXplX29yX21hc2sgfCB0bXA7Ci0JLyogRXhwYW5kIHRtcCB3aXRoIGhpZ2ggYml0cyB0byBhbGwgMXMqLworCisJLyogRXhwYW5kIHRtcCB3aXRoIGhpZ2ggYml0cyB0byBhbGwgMXM6ICovCiAJaGkgPSBmbHModG1wKTsKIAlpZiAoaGkgPiAwKSB7CiAJCXRtcCB8PSB+KCgxPDwoaGkgLSAxKSkgLSAxKTsKQEAgLTQwMiwxMSArNDU0LDE5IEBACiAJCX0KIAl9CiAKLQkvKiBUaGlzIHdvcmtzIGNvcnJlY3RseSBpZiBzaXplIGlzIGEgcG93ZXIgb2YgdHdvLCBpLmUuIGEKLQkgICBjb250aWd1b3VzIHJhbmdlLiAqLworCS8qCisJICogVGhpcyB3b3JrcyBjb3JyZWN0bHkgaWYgc2l6ZSBpcyBhIHBvd2VyIG9mIHR3bywgaS5lLiBhCisJICogY29udGlndW91cyByYW5nZToKKwkgKi8KIAkqc2l6ZSA9IC1tYXNrX2xvOwogCSpiYXNlID0gYmFzZV9oaSA8PCAoMzIgLSBQQUdFX1NISUZUKSB8IGJhc2VfbG8gPj4gUEFHRV9TSElGVDsKIAkqdHlwZSA9IGJhc2VfbG8gJiAweGZmOworCisJcHJpbnRrKEtFUk5fREVCVUcgIiAgZ2V0X210cnI6IGNwdSVkIHJlZyUwMmQgYmFzZT0lMDEwbHggc2l6ZT0lMDEwbHggJXNcbiIsCisJCQljcHUsIHJlZywgKmJhc2UsICpzaXplLAorCQkJbXRycl9hdHRyaWJfdG9fc3RyKCp0eXBlICYgMHhmZikpOworb3V0X3B1dF9jcHU6CisJcHV0X2NwdSgpOwogfQogCiAvKioKQEAgLTQxOSw2ICs0NzksOCBAQAogCWJvb2wgY2hhbmdlZCA9IGZhbHNlOwogCWludCBibG9jaz0tMSwgcmFuZ2U7CiAKKwlrOF9jaGVja19zeXNjZmdfZHJhbV9tb2RfZW4oKTsKKwogCXdoaWxlIChmaXhlZF9yYW5nZV9ibG9ja3NbKytibG9ja10ucmFuZ2VzKQogCSAgICBmb3IgKHJhbmdlPTA7IHJhbmdlIDwgZml4ZWRfcmFuZ2VfYmxvY2tzW2Jsb2NrXS5yYW5nZXM7IHJhbmdlKyspCiAJCXNldF9maXhlZF9yYW5nZShmaXhlZF9yYW5nZV9ibG9ja3NbYmxvY2tdLmJhc2VfbXNyICsgcmFuZ2UsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvaWYuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9pZi5jCmluZGV4IDRjNDIxNDYuLmZiNzNhNTIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9pZi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9pZi5jCkBAIC0zNzcsMTAgKzM3Nyw2IEBACiAJLnJlbGVhc2UgPSBtdHJyX2Nsb3NlLAogfTsKIAotCi1zdGF0aWMgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwcm9jX3Jvb3RfbXRycjsKLQotCiBzdGF0aWMgaW50IG10cnJfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKm9mZnNldCkKIHsKIAljaGFyIGZhY3RvcjsKQEAgLTQyMywxMSArNDE5LDcgQEAKIAkgICAgKCFjcHVfaGFzKGMsIFg4Nl9GRUFUVVJFX0NFTlRBVVJfTUNSKSkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JcHJvY19yb290X210cnIgPQotCQlwcm9jX2NyZWF0ZSgibXRyciIsIFNfSVdVU1IgfCBTX0lSVUdPLCBOVUxMLCAmbXRycl9mb3BzKTsKLQotCWlmIChwcm9jX3Jvb3RfbXRycikKLQkJcHJvY19yb290X210cnItPm93bmVyID0gVEhJU19NT0RVTEU7CisJcHJvY19jcmVhdGUoIm10cnIiLCBTX0lXVVNSIHwgU19JUlVHTywgTlVMTCwgJm10cnJfZm9wcyk7CiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbWFpbi5jCmluZGV4IDIzNmE0MDEuLjAzY2RhMDEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tYWluLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL21haW4uYwpAQCAtNTc0LDcgKzU3NCw3IEBACiAJdW5zaWduZWQgbG9uZwlsc2l6ZTsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgbXRycl92YWx1ZSBtdHJyX3N0YXRlW01UUlJfTUFYX1ZBUl9SQU5HRVNdOworc3RhdGljIHN0cnVjdCBtdHJyX3ZhbHVlIG10cnJfdmFsdWVbTVRSUl9NQVhfVkFSX1JBTkdFU107CiAKIHN0YXRpYyBpbnQgbXRycl9zYXZlKHN0cnVjdCBzeXNfZGV2aWNlICogc3lzZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CkBAIC01ODIsOSArNTgyLDkgQEAKIAogCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7CiAJCW10cnJfaWYtPmdldChpLAotCQkJICAgICAmbXRycl9zdGF0ZVtpXS5sYmFzZSwKLQkJCSAgICAgJm10cnJfc3RhdGVbaV0ubHNpemUsCi0JCQkgICAgICZtdHJyX3N0YXRlW2ldLmx0eXBlKTsKKwkJCSAgICAgJm10cnJfdmFsdWVbaV0ubGJhc2UsCisJCQkgICAgICZtdHJyX3ZhbHVlW2ldLmxzaXplLAorCQkJICAgICAmbXRycl92YWx1ZVtpXS5sdHlwZSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNTk0LDExICs1OTQsMTEgQEAKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7Ci0JCWlmIChtdHJyX3N0YXRlW2ldLmxzaXplKSAKKwkJaWYgKG10cnJfdmFsdWVbaV0ubHNpemUpCiAJCQlzZXRfbXRycihpLAotCQkJCSBtdHJyX3N0YXRlW2ldLmxiYXNlLAotCQkJCSBtdHJyX3N0YXRlW2ldLmxzaXplLAotCQkJCSBtdHJyX3N0YXRlW2ldLmx0eXBlKTsKKwkJCQkgbXRycl92YWx1ZVtpXS5sYmFzZSwKKwkJCQkgbXRycl92YWx1ZVtpXS5sc2l6ZSwKKwkJCQkgbXRycl92YWx1ZVtpXS5sdHlwZSk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNjEwLDEwNTggKzYxMCw3IEBACiAJLnJlc3VtZQkJPSBtdHJyX3Jlc3RvcmUsCiB9OwogCi0vKiBzaG91bGQgYmUgcmVsYXRlZCB0byBNVFJSX1ZBUl9SQU5HRVMgbnVtcyAqLwotI2RlZmluZSBSQU5HRV9OVU0gMjU2Ci0KLXN0cnVjdCByZXNfcmFuZ2UgewotCXVuc2lnbmVkIGxvbmcgc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBlbmQ7Ci19OwotCi1zdGF0aWMgaW50IF9faW5pdAotYWRkX3JhbmdlKHN0cnVjdCByZXNfcmFuZ2UgKnJhbmdlLCBpbnQgbnJfcmFuZ2UsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQkvKiBvdXQgb2Ygc2xvdHMgKi8KLQlpZiAobnJfcmFuZ2UgPj0gUkFOR0VfTlVNKQotCQlyZXR1cm4gbnJfcmFuZ2U7Ci0KLQlyYW5nZVtucl9yYW5nZV0uc3RhcnQgPSBzdGFydDsKLQlyYW5nZVtucl9yYW5nZV0uZW5kID0gZW5kOwotCi0JbnJfcmFuZ2UrKzsKLQotCXJldHVybiBucl9yYW5nZTsKLX0KLQotc3RhdGljIGludCBfX2luaXQKLWFkZF9yYW5nZV93aXRoX21lcmdlKHN0cnVjdCByZXNfcmFuZ2UgKnJhbmdlLCBpbnQgbnJfcmFuZ2UsIHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkgICAgICB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlpbnQgaTsKLQotCS8qIHRyeSB0byBtZXJnZSBpdCB3aXRoIG9sZCBvbmUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIGZpbmFsX3N0YXJ0LCBmaW5hbF9lbmQ7Ci0JCXVuc2lnbmVkIGxvbmcgY29tbW9uX3N0YXJ0LCBjb21tb25fZW5kOwotCi0JCWlmICghcmFuZ2VbaV0uZW5kKQotCQkJY29udGludWU7Ci0KLQkJY29tbW9uX3N0YXJ0ID0gbWF4KHJhbmdlW2ldLnN0YXJ0LCBzdGFydCk7Ci0JCWNvbW1vbl9lbmQgPSBtaW4ocmFuZ2VbaV0uZW5kLCBlbmQpOwotCQlpZiAoY29tbW9uX3N0YXJ0ID4gY29tbW9uX2VuZCArIDEpCi0JCQljb250aW51ZTsKLQotCQlmaW5hbF9zdGFydCA9IG1pbihyYW5nZVtpXS5zdGFydCwgc3RhcnQpOwotCQlmaW5hbF9lbmQgPSBtYXgocmFuZ2VbaV0uZW5kLCBlbmQpOwotCi0JCXJhbmdlW2ldLnN0YXJ0ID0gZmluYWxfc3RhcnQ7Ci0JCXJhbmdlW2ldLmVuZCA9ICBmaW5hbF9lbmQ7Ci0JCXJldHVybiBucl9yYW5nZTsKLQl9Ci0KLQkvKiBuZWVkIHRvIGFkZCB0aGF0ICovCi0JcmV0dXJuIGFkZF9yYW5nZShyYW5nZSwgbnJfcmFuZ2UsIHN0YXJ0LCBlbmQpOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQKLXN1YnRyYWN0X3JhbmdlKHN0cnVjdCByZXNfcmFuZ2UgKnJhbmdlLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQlpbnQgaSwgajsKLQotCWZvciAoaiA9IDA7IGogPCBSQU5HRV9OVU07IGorKykgewotCQlpZiAoIXJhbmdlW2pdLmVuZCkKLQkJCWNvbnRpbnVlOwotCi0JCWlmIChzdGFydCA8PSByYW5nZVtqXS5zdGFydCAmJiBlbmQgPj0gcmFuZ2Vbal0uZW5kKSB7Ci0JCQlyYW5nZVtqXS5zdGFydCA9IDA7Ci0JCQlyYW5nZVtqXS5lbmQgPSAwOwotCQkJY29udGludWU7Ci0JCX0KLQotCQlpZiAoc3RhcnQgPD0gcmFuZ2Vbal0uc3RhcnQgJiYgZW5kIDwgcmFuZ2Vbal0uZW5kICYmCi0JCSAgICByYW5nZVtqXS5zdGFydCA8IGVuZCArIDEpIHsKLQkJCXJhbmdlW2pdLnN0YXJ0ID0gZW5kICsgMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQotCQlpZiAoc3RhcnQgPiByYW5nZVtqXS5zdGFydCAmJiBlbmQgPj0gcmFuZ2Vbal0uZW5kICYmCi0JCSAgICByYW5nZVtqXS5lbmQgPiBzdGFydCAtIDEpIHsKLQkJCXJhbmdlW2pdLmVuZCA9IHN0YXJ0IC0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYgKHN0YXJ0ID4gcmFuZ2Vbal0uc3RhcnQgJiYgZW5kIDwgcmFuZ2Vbal0uZW5kKSB7Ci0JCQkvKiBmaW5kIHRoZSBuZXcgc3BhcmUgKi8KLQkJCWZvciAoaSA9IDA7IGkgPCBSQU5HRV9OVU07IGkrKykgewotCQkJCWlmIChyYW5nZVtpXS5lbmQgPT0gMCkKLQkJCQkJYnJlYWs7Ci0JCQl9Ci0JCQlpZiAoaSA8IFJBTkdFX05VTSkgewotCQkJCXJhbmdlW2ldLmVuZCA9IHJhbmdlW2pdLmVuZDsKLQkJCQlyYW5nZVtpXS5zdGFydCA9IGVuZCArIDE7Ci0JCQl9IGVsc2UgewotCQkJCXByaW50ayhLRVJOX0VSUiAicnVuIG9mIHNsb3QgaW4gcmFuZ2VzXG4iKTsKLQkJCX0KLQkJCXJhbmdlW2pdLmVuZCA9IHN0YXJ0IC0gMTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0JfQotfQotCi1zdGF0aWMgaW50IF9faW5pdCBjbXBfcmFuZ2UoY29uc3Qgdm9pZCAqeDEsIGNvbnN0IHZvaWQgKngyKQotewotCWNvbnN0IHN0cnVjdCByZXNfcmFuZ2UgKnIxID0geDE7Ci0JY29uc3Qgc3RydWN0IHJlc19yYW5nZSAqcjIgPSB4MjsKLQlsb25nIHN0YXJ0MSwgc3RhcnQyOwotCi0Jc3RhcnQxID0gcjEtPnN0YXJ0OwotCXN0YXJ0MiA9IHIyLT5zdGFydDsKLQotCXJldHVybiBzdGFydDEgLSBzdGFydDI7Ci19Ci0KLXN0cnVjdCB2YXJfbXRycl9yYW5nZV9zdGF0ZSB7Ci0JdW5zaWduZWQgbG9uZyBiYXNlX3BmbjsKLQl1bnNpZ25lZCBsb25nIHNpemVfcGZuOwotCW10cnJfdHlwZSB0eXBlOwotfTsKLQotc3RhdGljIHN0cnVjdCB2YXJfbXRycl9yYW5nZV9zdGF0ZSBfX2luaXRkYXRhIHJhbmdlX3N0YXRlW1JBTkdFX05VTV07Ci1zdGF0aWMgaW50IF9faW5pdGRhdGEgZGVidWdfcHJpbnQ7Ci0KLXN0YXRpYyBpbnQgX19pbml0Ci14ODZfZ2V0X210cnJfbWVtX3JhbmdlKHN0cnVjdCByZXNfcmFuZ2UgKnJhbmdlLCBpbnQgbnJfcmFuZ2UsCi0JCSAgICAgICB1bnNpZ25lZCBsb25nIGV4dHJhX3JlbW92ZV9iYXNlLAotCQkgICAgICAgdW5zaWduZWQgbG9uZyBleHRyYV9yZW1vdmVfc2l6ZSkKLXsKLQl1bnNpZ25lZCBsb25nIGksIGJhc2UsIHNpemU7Ci0JbXRycl90eXBlIHR5cGU7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgewotCQl0eXBlID0gcmFuZ2Vfc3RhdGVbaV0udHlwZTsKLQkJaWYgKHR5cGUgIT0gTVRSUl9UWVBFX1dSQkFDSykKLQkJCWNvbnRpbnVlOwotCQliYXNlID0gcmFuZ2Vfc3RhdGVbaV0uYmFzZV9wZm47Ci0JCXNpemUgPSByYW5nZV9zdGF0ZVtpXS5zaXplX3BmbjsKLQkJbnJfcmFuZ2UgPSBhZGRfcmFuZ2Vfd2l0aF9tZXJnZShyYW5nZSwgbnJfcmFuZ2UsIGJhc2UsCi0JCQkJCQliYXNlICsgc2l6ZSAtIDEpOwotCX0KLQlpZiAoZGVidWdfcHJpbnQpIHsKLQkJcHJpbnRrKEtFUk5fREVCVUcgIkFmdGVyIFdCIGNoZWNraW5nXG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiTVRSUiBNQVAgUEZOOiAlMDE2bHggLSAlMDE2bHhcbiIsCi0JCQkJIHJhbmdlW2ldLnN0YXJ0LCByYW5nZVtpXS5lbmQgKyAxKTsKLQl9Ci0KLQkvKiB0YWtlIG91dCBVQyByYW5nZXMgKi8KLQlmb3IgKGkgPSAwOyBpIDwgbnVtX3Zhcl9yYW5nZXM7IGkrKykgewotCQl0eXBlID0gcmFuZ2Vfc3RhdGVbaV0udHlwZTsKLQkJaWYgKHR5cGUgIT0gTVRSUl9UWVBFX1VOQ0FDSEFCTEUgJiYKLQkJICAgIHR5cGUgIT0gTVRSUl9UWVBFX1dSUFJPVCkKLQkJCWNvbnRpbnVlOwotCQlzaXplID0gcmFuZ2Vfc3RhdGVbaV0uc2l6ZV9wZm47Ci0JCWlmICghc2l6ZSkKLQkJCWNvbnRpbnVlOwotCQliYXNlID0gcmFuZ2Vfc3RhdGVbaV0uYmFzZV9wZm47Ci0JCXN1YnRyYWN0X3JhbmdlKHJhbmdlLCBiYXNlLCBiYXNlICsgc2l6ZSAtIDEpOwotCX0KLQlpZiAoZXh0cmFfcmVtb3ZlX3NpemUpCi0JCXN1YnRyYWN0X3JhbmdlKHJhbmdlLCBleHRyYV9yZW1vdmVfYmFzZSwKLQkJCQkgZXh0cmFfcmVtb3ZlX2Jhc2UgKyBleHRyYV9yZW1vdmVfc2l6ZSAgLSAxKTsKLQotCS8qIGdldCBuZXcgcmFuZ2UgbnVtICovCi0JbnJfcmFuZ2UgPSAwOwotCWZvciAoaSA9IDA7IGkgPCBSQU5HRV9OVU07IGkrKykgewotCQlpZiAoIXJhbmdlW2ldLmVuZCkKLQkJCWNvbnRpbnVlOwotCQlucl9yYW5nZSsrOwotCX0KLQlpZiAgKGRlYnVnX3ByaW50KSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJBZnRlciBVQyBjaGVja2luZ1xuIik7Ci0JCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZTsgaSsrKQotCQkJcHJpbnRrKEtFUk5fREVCVUcgIk1UUlIgTUFQIFBGTjogJTAxNmx4IC0gJTAxNmx4XG4iLAotCQkJCSByYW5nZVtpXS5zdGFydCwgcmFuZ2VbaV0uZW5kICsgMSk7Ci0JfQotCi0JLyogc29ydCB0aGUgcmFuZ2VzICovCi0Jc29ydChyYW5nZSwgbnJfcmFuZ2UsIHNpemVvZihzdHJ1Y3QgcmVzX3JhbmdlKSwgY21wX3JhbmdlLCBOVUxMKTsKLQlpZiAgKGRlYnVnX3ByaW50KSB7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJBZnRlciBzb3J0aW5nXG4iKTsKLQkJZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiTVRSUiBNQVAgUEZOOiAlMDE2bHggLSAlMDE2bHhcbiIsCi0JCQkJIHJhbmdlW2ldLnN0YXJ0LCByYW5nZVtpXS5lbmQgKyAxKTsKLQl9Ci0KLQkvKiBjbGVhciB0aG9zZSBpcyBub3QgdXNlZCAqLwotCWZvciAoaSA9IG5yX3JhbmdlOyBpIDwgUkFOR0VfTlVNOyBpKyspCi0JCW1lbXNldCgmcmFuZ2VbaV0sIDAsIHNpemVvZihyYW5nZVtpXSkpOwotCi0JcmV0dXJuIG5yX3JhbmdlOwotfQotCi1zdGF0aWMgc3RydWN0IHJlc19yYW5nZSBfX2luaXRkYXRhIHJhbmdlW1JBTkdFX05VTV07Ci1zdGF0aWMgaW50IF9faW5pdGRhdGEgbnJfcmFuZ2U7Ci0KLSNpZmRlZiBDT05GSUdfTVRSUl9TQU5JVElaRVIKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHN1bV9yYW5nZXMoc3RydWN0IHJlc19yYW5nZSAqcmFuZ2UsIGludCBucl9yYW5nZSkKLXsKLQl1bnNpZ25lZCBsb25nIHN1bTsKLQlpbnQgaTsKLQotCXN1bSA9IDA7Ci0JZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspCi0JCXN1bSArPSByYW5nZVtpXS5lbmQgKyAxIC0gcmFuZ2VbaV0uc3RhcnQ7Ci0KLQlyZXR1cm4gc3VtOwotfQotCi1zdGF0aWMgaW50IGVuYWJsZV9tdHJyX2NsZWFudXAgX19pbml0ZGF0YSA9Ci0JQ09ORklHX01UUlJfU0FOSVRJWkVSX0VOQUJMRV9ERUZBVUxUOwotCi1zdGF0aWMgaW50IF9faW5pdCBkaXNhYmxlX210cnJfY2xlYW51cF9zZXR1cChjaGFyICpzdHIpCi17Ci0JZW5hYmxlX210cnJfY2xlYW51cCA9IDA7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgiZGlzYWJsZV9tdHJyX2NsZWFudXAiLCBkaXNhYmxlX210cnJfY2xlYW51cF9zZXR1cCk7Ci0KLXN0YXRpYyBpbnQgX19pbml0IGVuYWJsZV9tdHJyX2NsZWFudXBfc2V0dXAoY2hhciAqc3RyKQotewotCWVuYWJsZV9tdHJyX2NsZWFudXAgPSAxOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oImVuYWJsZV9tdHJyX2NsZWFudXAiLCBlbmFibGVfbXRycl9jbGVhbnVwX3NldHVwKTsKLQotc3RhdGljIGludCBfX2luaXQgbXRycl9jbGVhbnVwX2RlYnVnX3NldHVwKGNoYXIgKnN0cikKLXsKLQlkZWJ1Z19wcmludCA9IDE7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgibXRycl9jbGVhbnVwX2RlYnVnIiwgbXRycl9jbGVhbnVwX2RlYnVnX3NldHVwKTsKLQotc3RydWN0IHZhcl9tdHJyX3N0YXRlIHsKLQl1bnNpZ25lZCBsb25nCXJhbmdlX3N0YXJ0azsKLQl1bnNpZ25lZCBsb25nCXJhbmdlX3NpemVrOwotCXVuc2lnbmVkIGxvbmcJY2h1bmtfc2l6ZWs7Ci0JdW5zaWduZWQgbG9uZwlncmFuX3NpemVrOwotCXVuc2lnbmVkIGludAlyZWc7Ci19OwotCi1zdGF0aWMgdm9pZCBfX2luaXQKLXNldF92YXJfbXRycih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2VrLCB1bnNpZ25lZCBsb25nIHNpemVrLAotCQl1bnNpZ25lZCBjaGFyIHR5cGUsIHVuc2lnbmVkIGludCBhZGRyZXNzX2JpdHMpCi17Ci0JdTMyIGJhc2VfbG8sIGJhc2VfaGksIG1hc2tfbG8sIG1hc2tfaGk7Ci0JdTY0IGJhc2UsIG1hc2s7Ci0KLQlpZiAoIXNpemVrKSB7Ci0JCWZpbGxfbXRycl92YXJfcmFuZ2UocmVnLCAwLCAwLCAwLCAwKTsKLQkJcmV0dXJuOwotCX0KLQotCW1hc2sgPSAoMVVMTCA8PCBhZGRyZXNzX2JpdHMpIC0gMTsKLQltYXNrICY9IH4oKCgodTY0KXNpemVrKSA8PCAxMCkgLSAxKTsKLQotCWJhc2UgID0gKCh1NjQpYmFzZWspIDw8IDEwOwotCi0JYmFzZSB8PSB0eXBlOwotCW1hc2sgfD0gMHg4MDA7Ci0KLQliYXNlX2xvID0gYmFzZSAmICgoMVVMTDw8MzIpIC0gMSk7Ci0JYmFzZV9oaSA9IGJhc2UgPj4gMzI7Ci0KLQltYXNrX2xvID0gbWFzayAmICgoMVVMTDw8MzIpIC0gMSk7Ci0JbWFza19oaSA9IG1hc2sgPj4gMzI7Ci0KLQlmaWxsX210cnJfdmFyX3JhbmdlKHJlZywgYmFzZV9sbywgYmFzZV9oaSwgbWFza19sbywgbWFza19oaSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9faW5pdAotc2F2ZV92YXJfbXRycih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nIGJhc2VrLCB1bnNpZ25lZCBsb25nIHNpemVrLAotCQl1bnNpZ25lZCBjaGFyIHR5cGUpCi17Ci0JcmFuZ2Vfc3RhdGVbcmVnXS5iYXNlX3BmbiA9IGJhc2VrID4+IChQQUdFX1NISUZUIC0gMTApOwotCXJhbmdlX3N0YXRlW3JlZ10uc2l6ZV9wZm4gPSBzaXplayA+PiAoUEFHRV9TSElGVCAtIDEwKTsKLQlyYW5nZV9zdGF0ZVtyZWddLnR5cGUgPSB0eXBlOwotfQotCi1zdGF0aWMgdm9pZCBfX2luaXQKLXNldF92YXJfbXRycl9hbGwodW5zaWduZWQgaW50IGFkZHJlc3NfYml0cykKLXsKLQl1bnNpZ25lZCBsb25nIGJhc2VrLCBzaXplazsKLQl1bnNpZ25lZCBjaGFyIHR5cGU7Ci0JdW5zaWduZWQgaW50IHJlZzsKLQotCWZvciAocmVnID0gMDsgcmVnIDwgbnVtX3Zhcl9yYW5nZXM7IHJlZysrKSB7Ci0JCWJhc2VrID0gcmFuZ2Vfc3RhdGVbcmVnXS5iYXNlX3BmbiA8PCAoUEFHRV9TSElGVCAtIDEwKTsKLQkJc2l6ZWsgPSByYW5nZV9zdGF0ZVtyZWddLnNpemVfcGZuIDw8IChQQUdFX1NISUZUIC0gMTApOwotCQl0eXBlID0gcmFuZ2Vfc3RhdGVbcmVnXS50eXBlOwotCi0JCXNldF92YXJfbXRycihyZWcsIGJhc2VrLCBzaXplaywgdHlwZSwgYWRkcmVzc19iaXRzKTsKLQl9Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIHRvX3NpemVfZmFjdG9yKHVuc2lnbmVkIGxvbmcgc2l6ZWssIGNoYXIgKmZhY3RvcnApCi17Ci0JY2hhciBmYWN0b3I7Ci0JdW5zaWduZWQgbG9uZyBiYXNlID0gc2l6ZWs7Ci0KLQlpZiAoYmFzZSAmICgoMTw8MTApIC0gMSkpIHsKLQkJLyogbm90IE1CIGFsaWdubWVudCAqLwotCQlmYWN0b3IgPSAnSyc7Ci0JfSBlbHNlIGlmIChiYXNlICYgKCgxPDwyMCkgLSAxKSl7Ci0JCWZhY3RvciA9ICdNJzsKLQkJYmFzZSA+Pj0gMTA7Ci0JfSBlbHNlIHsKLQkJZmFjdG9yID0gJ0cnOwotCQliYXNlID4+PSAyMDsKLQl9Ci0KLQkqZmFjdG9ycCA9IGZhY3RvcjsKLQotCXJldHVybiBiYXNlOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IF9faW5pdAotcmFuZ2VfdG9fbXRycih1bnNpZ25lZCBpbnQgcmVnLCB1bnNpZ25lZCBsb25nIHJhbmdlX3N0YXJ0aywKLQkgICAgICB1bnNpZ25lZCBsb25nIHJhbmdlX3NpemVrLCB1bnNpZ25lZCBjaGFyIHR5cGUpCi17Ci0JaWYgKCFyYW5nZV9zaXplayB8fCAocmVnID49IG51bV92YXJfcmFuZ2VzKSkKLQkJcmV0dXJuIHJlZzsKLQotCXdoaWxlIChyYW5nZV9zaXplaykgewotCQl1bnNpZ25lZCBsb25nIG1heF9hbGlnbiwgYWxpZ247Ci0JCXVuc2lnbmVkIGxvbmcgc2l6ZWs7Ci0KLQkJLyogQ29tcHV0ZSB0aGUgbWF4aW11bSBzaXplIEkgY2FuIG1ha2UgYSByYW5nZSAqLwotCQlpZiAocmFuZ2Vfc3RhcnRrKQotCQkJbWF4X2FsaWduID0gZmZzKHJhbmdlX3N0YXJ0aykgLSAxOwotCQllbHNlCi0JCQltYXhfYWxpZ24gPSAzMjsKLQkJYWxpZ24gPSBmbHMocmFuZ2Vfc2l6ZWspIC0gMTsKLQkJaWYgKGFsaWduID4gbWF4X2FsaWduKQotCQkJYWxpZ24gPSBtYXhfYWxpZ247Ci0KLQkJc2l6ZWsgPSAxIDw8IGFsaWduOwotCQlpZiAoZGVidWdfcHJpbnQpIHsKLQkJCWNoYXIgc3RhcnRfZmFjdG9yID0gJ0snLCBzaXplX2ZhY3RvciA9ICdLJzsKLQkJCXVuc2lnbmVkIGxvbmcgc3RhcnRfYmFzZSwgc2l6ZV9iYXNlOwotCi0JCQlzdGFydF9iYXNlID0gdG9fc2l6ZV9mYWN0b3IocmFuZ2Vfc3RhcnRrLCAmc3RhcnRfZmFjdG9yKSwKLQkJCXNpemVfYmFzZSA9IHRvX3NpemVfZmFjdG9yKHNpemVrLCAmc2l6ZV9mYWN0b3IpLAotCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiU2V0dGluZyB2YXJpYWJsZSBNVFJSICVkLCAiCi0JCQkJImJhc2U6ICVsZCVjQiwgcmFuZ2U6ICVsZCVjQiwgdHlwZSAlc1xuIiwKLQkJCQlyZWcsIHN0YXJ0X2Jhc2UsIHN0YXJ0X2ZhY3RvciwKLQkJCQlzaXplX2Jhc2UsIHNpemVfZmFjdG9yLAotCQkJCSh0eXBlID09IE1UUlJfVFlQRV9VTkNBQ0hBQkxFKT8iVUMiOgotCQkJCSAgICAoKHR5cGUgPT0gTVRSUl9UWVBFX1dSQkFDSyk/IldCIjoiT3RoZXIiKQotCQkJCSk7Ci0JCX0KLQkJc2F2ZV92YXJfbXRycihyZWcrKywgcmFuZ2Vfc3RhcnRrLCBzaXplaywgdHlwZSk7Ci0JCXJhbmdlX3N0YXJ0ayArPSBzaXplazsKLQkJcmFuZ2Vfc2l6ZWsgLT0gc2l6ZWs7Ci0JCWlmIChyZWcgPj0gbnVtX3Zhcl9yYW5nZXMpCi0JCQlicmVhazsKLQl9Ci0JcmV0dXJuIHJlZzsKLX0KLQotc3RhdGljIHVuc2lnbmVkIF9faW5pdAotcmFuZ2VfdG9fbXRycl93aXRoX2hvbGUoc3RydWN0IHZhcl9tdHJyX3N0YXRlICpzdGF0ZSwgdW5zaWduZWQgbG9uZyBiYXNlaywKLQkJCXVuc2lnbmVkIGxvbmcgc2l6ZWspCi17Ci0JdW5zaWduZWQgbG9uZyBob2xlX2Jhc2VrLCBob2xlX3NpemVrOwotCXVuc2lnbmVkIGxvbmcgc2Vjb25kX2Jhc2VrLCBzZWNvbmRfc2l6ZWs7Ci0JdW5zaWduZWQgbG9uZyByYW5nZTBfYmFzZWssIHJhbmdlMF9zaXplazsKLQl1bnNpZ25lZCBsb25nIHJhbmdlX2Jhc2VrLCByYW5nZV9zaXplazsKLQl1bnNpZ25lZCBsb25nIGNodW5rX3NpemVrOwotCXVuc2lnbmVkIGxvbmcgZ3Jhbl9zaXplazsKLQotCWhvbGVfYmFzZWsgPSAwOwotCWhvbGVfc2l6ZWsgPSAwOwotCXNlY29uZF9iYXNlayA9IDA7Ci0Jc2Vjb25kX3NpemVrID0gMDsKLQljaHVua19zaXplayA9IHN0YXRlLT5jaHVua19zaXplazsKLQlncmFuX3NpemVrID0gc3RhdGUtPmdyYW5fc2l6ZWs7Ci0KLQkvKiBhbGlnbiB3aXRoIGdyYW4gc2l6ZSwgcHJldmVudCBzbWFsbCBibG9jayB1c2VkIHVwIE1UUlJzICovCi0JcmFuZ2VfYmFzZWsgPSBBTElHTihzdGF0ZS0+cmFuZ2Vfc3RhcnRrLCBncmFuX3NpemVrKTsKLQlpZiAoKHJhbmdlX2Jhc2VrID4gYmFzZWspICYmIGJhc2VrKQotCQlyZXR1cm4gc2Vjb25kX3NpemVrOwotCXN0YXRlLT5yYW5nZV9zaXplayAtPSAocmFuZ2VfYmFzZWsgLSBzdGF0ZS0+cmFuZ2Vfc3RhcnRrKTsKLQlyYW5nZV9zaXplayA9IEFMSUdOKHN0YXRlLT5yYW5nZV9zaXplaywgZ3Jhbl9zaXplayk7Ci0KLQl3aGlsZSAocmFuZ2Vfc2l6ZWsgPiBzdGF0ZS0+cmFuZ2Vfc2l6ZWspIHsKLQkJcmFuZ2Vfc2l6ZWsgLT0gZ3Jhbl9zaXplazsKLQkJaWYgKCFyYW5nZV9zaXplaykKLQkJCXJldHVybiAwOwotCX0KLQlzdGF0ZS0+cmFuZ2Vfc2l6ZWsgPSByYW5nZV9zaXplazsKLQotCS8qIHRyeSB0byBhcHBlbmQgc29tZSBzbWFsbCBob2xlICovCi0JcmFuZ2UwX2Jhc2VrID0gc3RhdGUtPnJhbmdlX3N0YXJ0azsKLQlyYW5nZTBfc2l6ZWsgPSBBTElHTihzdGF0ZS0+cmFuZ2Vfc2l6ZWssIGNodW5rX3NpemVrKTsKLQotCS8qIG5vIGluY3JlYXNlICovCi0JaWYgKHJhbmdlMF9zaXplayA9PSBzdGF0ZS0+cmFuZ2Vfc2l6ZWspIHsKLQkJaWYgKGRlYnVnX3ByaW50KQotCQkJcHJpbnRrKEtFUk5fREVCVUcgInJhbmdlWDogJTAxNmx4IC0gJTAxNmx4XG4iLAotCQkJCXJhbmdlMF9iYXNlazw8MTAsCi0JCQkJKHJhbmdlMF9iYXNlayArIHN0YXRlLT5yYW5nZV9zaXplayk8PDEwKTsKLQkJc3RhdGUtPnJlZyA9IHJhbmdlX3RvX210cnIoc3RhdGUtPnJlZywgcmFuZ2UwX2Jhc2VrLAotCQkJCXN0YXRlLT5yYW5nZV9zaXplaywgTVRSUl9UWVBFX1dSQkFDSyk7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIG9ubHkgY3V0IGJhY2ssIHdoZW4gaXQgaXMgbm90IHRoZSBsYXN0ICovCi0JaWYgKHNpemVrKSB7Ci0JCXdoaWxlIChyYW5nZTBfYmFzZWsgKyByYW5nZTBfc2l6ZWsgPiAoYmFzZWsgKyBzaXplaykpIHsKLQkJCWlmIChyYW5nZTBfc2l6ZWsgPj0gY2h1bmtfc2l6ZWspCi0JCQkJcmFuZ2UwX3NpemVrIC09IGNodW5rX3NpemVrOwotCQkJZWxzZQotCQkJCXJhbmdlMF9zaXplayA9IDA7Ci0KLQkJCWlmICghcmFuZ2UwX3NpemVrKQotCQkJCWJyZWFrOwotCQl9Ci0JfQotCi1zZWNvbmRfdHJ5OgotCXJhbmdlX2Jhc2VrID0gcmFuZ2UwX2Jhc2VrICsgcmFuZ2UwX3NpemVrOwotCi0JLyogb25lIGhvbGUgaW4gdGhlIG1pZGRsZSAqLwotCWlmIChyYW5nZV9iYXNlayA+IGJhc2VrICYmIHJhbmdlX2Jhc2VrIDw9IChiYXNlayArIHNpemVrKSkKLQkJc2Vjb25kX3NpemVrID0gcmFuZ2VfYmFzZWsgLSBiYXNlazsKLQotCWlmIChyYW5nZTBfc2l6ZWsgPiBzdGF0ZS0+cmFuZ2Vfc2l6ZWspIHsKLQotCQkvKiBvbmUgaG9sZSBpbiBtaWRkbGUgb3IgYXQgZW5kICovCi0JCWhvbGVfc2l6ZWsgPSByYW5nZTBfc2l6ZWsgLSBzdGF0ZS0+cmFuZ2Vfc2l6ZWsgLSBzZWNvbmRfc2l6ZWs7Ci0KLQkJLyogaG9sZSBzaXplIHNob3VsZCBiZSBsZXNzIHRoYW4gaGFsZiBvZiByYW5nZTAgc2l6ZSAqLwotCQlpZiAoaG9sZV9zaXplayA+PSAocmFuZ2UwX3NpemVrID4+IDEpICYmCi0JCSAgICByYW5nZTBfc2l6ZWsgPj0gY2h1bmtfc2l6ZWspIHsKLQkJCXJhbmdlMF9zaXplayAtPSBjaHVua19zaXplazsKLQkJCXNlY29uZF9zaXplayA9IDA7Ci0JCQlob2xlX3NpemVrID0gMDsKLQotCQkJZ290byBzZWNvbmRfdHJ5OwotCQl9Ci0JfQotCi0JaWYgKHJhbmdlMF9zaXplaykgewotCQlpZiAoZGVidWdfcHJpbnQpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAicmFuZ2UwOiAlMDE2bHggLSAlMDE2bHhcbiIsCi0JCQkJcmFuZ2UwX2Jhc2VrPDwxMCwKLQkJCQkocmFuZ2UwX2Jhc2VrICsgcmFuZ2UwX3NpemVrKTw8MTApOwotCQlzdGF0ZS0+cmVnID0gcmFuZ2VfdG9fbXRycihzdGF0ZS0+cmVnLCByYW5nZTBfYmFzZWssCi0JCQkJcmFuZ2UwX3NpemVrLCBNVFJSX1RZUEVfV1JCQUNLKTsKLQl9Ci0KLQlpZiAocmFuZ2UwX3NpemVrIDwgc3RhdGUtPnJhbmdlX3NpemVrKSB7Ci0JCS8qIG5lZWQgdG8gaGFuZGxlIGxlZnQgb3ZlciAqLwotCQlyYW5nZV9zaXplayA9IHN0YXRlLT5yYW5nZV9zaXplayAtIHJhbmdlMF9zaXplazsKLQotCQlpZiAoZGVidWdfcHJpbnQpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAicmFuZ2U6ICUwMTZseCAtICUwMTZseFxuIiwKLQkJCQkgcmFuZ2VfYmFzZWs8PDEwLAotCQkJCSAocmFuZ2VfYmFzZWsgKyByYW5nZV9zaXplayk8PDEwKTsKLQkJc3RhdGUtPnJlZyA9IHJhbmdlX3RvX210cnIoc3RhdGUtPnJlZywgcmFuZ2VfYmFzZWssCi0JCQkJIHJhbmdlX3NpemVrLCBNVFJSX1RZUEVfV1JCQUNLKTsKLQl9Ci0KLQlpZiAoaG9sZV9zaXplaykgewotCQlob2xlX2Jhc2VrID0gcmFuZ2VfYmFzZWsgLSBob2xlX3NpemVrIC0gc2Vjb25kX3NpemVrOwotCQlpZiAoZGVidWdfcHJpbnQpCi0JCQlwcmludGsoS0VSTl9ERUJVRyAiaG9sZTogJTAxNmx4IC0gJTAxNmx4XG4iLAotCQkJCSBob2xlX2Jhc2VrPDwxMCwKLQkJCQkgKGhvbGVfYmFzZWsgKyBob2xlX3NpemVrKTw8MTApOwotCQlzdGF0ZS0+cmVnID0gcmFuZ2VfdG9fbXRycihzdGF0ZS0+cmVnLCBob2xlX2Jhc2VrLAotCQkJCSBob2xlX3NpemVrLCBNVFJSX1RZUEVfVU5DQUNIQUJMRSk7Ci0JfQotCi0JcmV0dXJuIHNlY29uZF9zaXplazsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0Ci1zZXRfdmFyX210cnJfcmFuZ2Uoc3RydWN0IHZhcl9tdHJyX3N0YXRlICpzdGF0ZSwgdW5zaWduZWQgbG9uZyBiYXNlX3BmbiwKLQkJICAgdW5zaWduZWQgbG9uZyBzaXplX3BmbikKLXsKLQl1bnNpZ25lZCBsb25nIGJhc2VrLCBzaXplazsKLQl1bnNpZ25lZCBsb25nIHNlY29uZF9zaXplayA9IDA7Ci0KLQlpZiAoc3RhdGUtPnJlZyA+PSBudW1fdmFyX3JhbmdlcykKLQkJcmV0dXJuOwotCi0JYmFzZWsgPSBiYXNlX3BmbiA8PCAoUEFHRV9TSElGVCAtIDEwKTsKLQlzaXplayA9IHNpemVfcGZuIDw8IChQQUdFX1NISUZUIC0gMTApOwotCi0JLyogU2VlIGlmIEkgY2FuIG1lcmdlIHdpdGggdGhlIGxhc3QgcmFuZ2UgKi8KLQlpZiAoKGJhc2VrIDw9IDEwMjQpIHx8Ci0JICAgIChzdGF0ZS0+cmFuZ2Vfc3RhcnRrICsgc3RhdGUtPnJhbmdlX3NpemVrID09IGJhc2VrKSkgewotCQl1bnNpZ25lZCBsb25nIGVuZGsgPSBiYXNlayArIHNpemVrOwotCQlzdGF0ZS0+cmFuZ2Vfc2l6ZWsgPSBlbmRrIC0gc3RhdGUtPnJhbmdlX3N0YXJ0azsKLQkJcmV0dXJuOwotCX0KLQkvKiBXcml0ZSB0aGUgcmFuZ2UgbXRycnMgKi8KLQlpZiAoc3RhdGUtPnJhbmdlX3NpemVrICE9IDApCi0JCXNlY29uZF9zaXplayA9IHJhbmdlX3RvX210cnJfd2l0aF9ob2xlKHN0YXRlLCBiYXNlaywgc2l6ZWspOwotCi0JLyogQWxsb2NhdGUgYW4gbXNyICovCi0Jc3RhdGUtPnJhbmdlX3N0YXJ0ayA9IGJhc2VrICsgc2Vjb25kX3NpemVrOwotCXN0YXRlLT5yYW5nZV9zaXplayAgPSBzaXplayAtIHNlY29uZF9zaXplazsKLX0KLQotLyogbWluaW51bSBzaXplIG9mIG10cnIgYmxvY2sgdGhhdCBjYW4gdGFrZSBob2xlICovCi1zdGF0aWMgdTY0IG10cnJfY2h1bmtfc2l6ZSBfX2luaXRkYXRhID0gKDI1NlVMTDw8MjApOwotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9tdHJyX2NodW5rX3NpemVfb3B0KGNoYXIgKnApCi17Ci0JaWYgKCFwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQltdHJyX2NodW5rX3NpemUgPSBtZW1wYXJzZShwLCAmcCk7Ci0JcmV0dXJuIDA7Ci19Ci1lYXJseV9wYXJhbSgibXRycl9jaHVua19zaXplIiwgcGFyc2VfbXRycl9jaHVua19zaXplX29wdCk7Ci0KLS8qIGdyYW5pdHkgb2YgbXRyciBvZiBibG9jayAqLwotc3RhdGljIHU2NCBtdHJyX2dyYW5fc2l6ZSBfX2luaXRkYXRhOwotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9tdHJyX2dyYW5fc2l6ZV9vcHQoY2hhciAqcCkKLXsKLQlpZiAoIXApCi0JCXJldHVybiAtRUlOVkFMOwotCW10cnJfZ3Jhbl9zaXplID0gbWVtcGFyc2UocCwgJnApOwotCXJldHVybiAwOwotfQotZWFybHlfcGFyYW0oIm10cnJfZ3Jhbl9zaXplIiwgcGFyc2VfbXRycl9ncmFuX3NpemVfb3B0KTsKLQotc3RhdGljIGludCBucl9tdHJyX3NwYXJlX3JlZyBfX2luaXRkYXRhID0KLQkJCQkgQ09ORklHX01UUlJfU0FOSVRJWkVSX1NQQVJFX1JFR19OUl9ERUZBVUxUOwotCi1zdGF0aWMgaW50IF9faW5pdCBwYXJzZV9tdHJyX3NwYXJlX3JlZyhjaGFyICphcmcpCi17Ci0JaWYgKGFyZykKLQkJbnJfbXRycl9zcGFyZV9yZWcgPSBzaW1wbGVfc3RydG91bChhcmcsIE5VTEwsIDApOwotCXJldHVybiAwOwotfQotCi1lYXJseV9wYXJhbSgibXRycl9zcGFyZV9yZWdfbnIiLCBwYXJzZV9tdHJyX3NwYXJlX3JlZyk7Ci0KLXN0YXRpYyBpbnQgX19pbml0Ci14ODZfc2V0dXBfdmFyX210cnJzKHN0cnVjdCByZXNfcmFuZ2UgKnJhbmdlLCBpbnQgbnJfcmFuZ2UsCi0JCSAgICB1NjQgY2h1bmtfc2l6ZSwgdTY0IGdyYW5fc2l6ZSkKLXsKLQlzdHJ1Y3QgdmFyX210cnJfc3RhdGUgdmFyX3N0YXRlOwotCWludCBpOwotCWludCBudW1fcmVnOwotCi0JdmFyX3N0YXRlLnJhbmdlX3N0YXJ0awk9IDA7Ci0JdmFyX3N0YXRlLnJhbmdlX3NpemVrCT0gMDsKLQl2YXJfc3RhdGUucmVnCQk9IDA7Ci0JdmFyX3N0YXRlLmNodW5rX3NpemVrCT0gY2h1bmtfc2l6ZSA+PiAxMDsKLQl2YXJfc3RhdGUuZ3Jhbl9zaXplawk9IGdyYW5fc2l6ZSA+PiAxMDsKLQotCW1lbXNldChyYW5nZV9zdGF0ZSwgMCwgc2l6ZW9mKHJhbmdlX3N0YXRlKSk7Ci0KLQkvKiBXcml0ZSB0aGUgcmFuZ2UgZXRjICovCi0JZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspCi0JCXNldF92YXJfbXRycl9yYW5nZSgmdmFyX3N0YXRlLCByYW5nZVtpXS5zdGFydCwKLQkJCQkgICByYW5nZVtpXS5lbmQgLSByYW5nZVtpXS5zdGFydCArIDEpOwotCi0JLyogV3JpdGUgdGhlIGxhc3QgcmFuZ2UgKi8KLQlpZiAodmFyX3N0YXRlLnJhbmdlX3NpemVrICE9IDApCi0JCXJhbmdlX3RvX210cnJfd2l0aF9ob2xlKCZ2YXJfc3RhdGUsIDAsIDApOwotCi0JbnVtX3JlZyA9IHZhcl9zdGF0ZS5yZWc7Ci0JLyogQ2xlYXIgb3V0IHRoZSBleHRyYSBNVFJSJ3MgKi8KLQl3aGlsZSAodmFyX3N0YXRlLnJlZyA8IG51bV92YXJfcmFuZ2VzKSB7Ci0JCXNhdmVfdmFyX210cnIodmFyX3N0YXRlLnJlZywgMCwgMCwgMCk7Ci0JCXZhcl9zdGF0ZS5yZWcrKzsKLQl9Ci0KLQlyZXR1cm4gbnVtX3JlZzsKLX0KLQotc3RydWN0IG10cnJfY2xlYW51cF9yZXN1bHQgewotCXVuc2lnbmVkIGxvbmcgZ3Jhbl9zaXplazsKLQl1bnNpZ25lZCBsb25nIGNodW5rX3NpemVrOwotCXVuc2lnbmVkIGxvbmcgbG9zZV9jb3Zlcl9zaXplazsKLQl1bnNpZ25lZCBpbnQgbnVtX3JlZzsKLQlpbnQgYmFkOwotfTsKLQotLyoKLSAqIGdyYW5fc2l6ZTogNjRLLCAxMjhLLCAyNTZLLCA1MTJLLCAxTSwgMk0sIC4uLiwgMkcKLSAqIGNodW5rIHNpemU6IGdyYW5fc2l6ZSwgLi4uLCAyRwotICogc28gd2UgbmVlZCAoMSsxNikqOAotICovCi0jZGVmaW5lIE5VTV9SRVNVTFQJMTM2Ci0jZGVmaW5lIFBTSElGVAkJKFBBR0VfU0hJRlQgLSAxMCkKLQotc3RhdGljIHN0cnVjdCBtdHJyX2NsZWFudXBfcmVzdWx0IF9faW5pdGRhdGEgcmVzdWx0W05VTV9SRVNVTFRdOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSBtaW5fbG9zc19wZm5bUkFOR0VfTlVNXTsKLQotc3RhdGljIHZvaWQgX19pbml0IHByaW50X291dF9tdHJyX3JhbmdlX3N0YXRlKHZvaWQpCi17Ci0JaW50IGk7Ci0JY2hhciBzdGFydF9mYWN0b3IgPSAnSycsIHNpemVfZmFjdG9yID0gJ0snOwotCXVuc2lnbmVkIGxvbmcgc3RhcnRfYmFzZSwgc2l6ZV9iYXNlOwotCW10cnJfdHlwZSB0eXBlOwotCi0JZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKLQotCQlzaXplX2Jhc2UgPSByYW5nZV9zdGF0ZVtpXS5zaXplX3BmbiA8PCAoUEFHRV9TSElGVCAtIDEwKTsKLQkJaWYgKCFzaXplX2Jhc2UpCi0JCQljb250aW51ZTsKLQotCQlzaXplX2Jhc2UgPSB0b19zaXplX2ZhY3RvcihzaXplX2Jhc2UsICZzaXplX2ZhY3RvciksCi0JCXN0YXJ0X2Jhc2UgPSByYW5nZV9zdGF0ZVtpXS5iYXNlX3BmbiA8PCAoUEFHRV9TSElGVCAtIDEwKTsKLQkJc3RhcnRfYmFzZSA9IHRvX3NpemVfZmFjdG9yKHN0YXJ0X2Jhc2UsICZzdGFydF9mYWN0b3IpLAotCQl0eXBlID0gcmFuZ2Vfc3RhdGVbaV0udHlwZTsKLQotCQlwcmludGsoS0VSTl9ERUJVRyAicmVnICVkLCBiYXNlOiAlbGQlY0IsIHJhbmdlOiAlbGQlY0IsIHR5cGUgJXNcbiIsCi0JCQlpLCBzdGFydF9iYXNlLCBzdGFydF9mYWN0b3IsCi0JCQlzaXplX2Jhc2UsIHNpemVfZmFjdG9yLAotCQkJKHR5cGUgPT0gTVRSUl9UWVBFX1VOQ0FDSEFCTEUpID8gIlVDIiA6Ci0JCQkgICAgKCh0eXBlID09IE1UUlJfVFlQRV9XUlBST1QpID8gIldQIiA6Ci0JCQkgICAgICgodHlwZSA9PSBNVFJSX1RZUEVfV1JCQUNLKSA/ICJXQiIgOiAiT3RoZXIiKSkKLQkJCSk7Ci0JfQotfQotCi1zdGF0aWMgaW50IF9faW5pdCBtdHJyX25lZWRfY2xlYW51cCh2b2lkKQotewotCWludCBpOwotCW10cnJfdHlwZSB0eXBlOwotCXVuc2lnbmVkIGxvbmcgc2l6ZTsKLQkvKiBleHRyYSBvbmUgZm9yIGFsbCAwICovCi0JaW50IG51bVtNVFJSX05VTV9UWVBFUyArIDFdOwotCi0JLyogY2hlY2sgZW50cmllcyBudW1iZXIgKi8KLQltZW1zZXQobnVtLCAwLCBzaXplb2YobnVtKSk7Ci0JZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKLQkJdHlwZSA9IHJhbmdlX3N0YXRlW2ldLnR5cGU7Ci0JCXNpemUgPSByYW5nZV9zdGF0ZVtpXS5zaXplX3BmbjsKLQkJaWYgKHR5cGUgPj0gTVRSUl9OVU1fVFlQRVMpCi0JCQljb250aW51ZTsKLQkJaWYgKCFzaXplKQotCQkJdHlwZSA9IE1UUlJfTlVNX1RZUEVTOwotCQlpZiAodHlwZSA9PSBNVFJSX1RZUEVfV1JQUk9UKQotCQkJdHlwZSA9IE1UUlJfVFlQRV9VTkNBQ0hBQkxFOwotCQludW1bdHlwZV0rKzsKLQl9Ci0KLQkvKiBjaGVjayBpZiB3ZSBnb3QgVUMgZW50cmllcyAqLwotCWlmICghbnVtW01UUlJfVFlQRV9VTkNBQ0hBQkxFXSkKLQkJcmV0dXJuIDA7Ci0KLQkvKiBjaGVjayBpZiB3ZSBvbmx5IGhhZCBXQiBhbmQgVUMgKi8KLQlpZiAobnVtW01UUlJfVFlQRV9XUkJBQ0tdICsgbnVtW01UUlJfVFlQRV9VTkNBQ0hBQkxFXSAhPQotCQludW1fdmFyX3JhbmdlcyAtIG51bVtNVFJSX05VTV9UWVBFU10pCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIDE7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgcmFuZ2Vfc3VtczsKLXN0YXRpYyB2b2lkIF9faW5pdCBtdHJyX2NhbGNfcmFuZ2Vfc3RhdGUodTY0IGNodW5rX3NpemUsIHU2NCBncmFuX3NpemUsCi0JCQkJCSB1bnNpZ25lZCBsb25nIGV4dHJhX3JlbW92ZV9iYXNlLAotCQkJCQkgdW5zaWduZWQgbG9uZyBleHRyYV9yZW1vdmVfc2l6ZSwKLQkJCQkJIGludCBpKQotewotCWludCBudW1fcmVnOwotCXN0YXRpYyBzdHJ1Y3QgcmVzX3JhbmdlIHJhbmdlX25ld1tSQU5HRV9OVU1dOwotCXN0YXRpYyBpbnQgbnJfcmFuZ2VfbmV3OwotCXVuc2lnbmVkIGxvbmcgcmFuZ2Vfc3Vtc19uZXc7Ci0KLQkvKiBjb252ZXJ0IHJhbmdlcyB0byB2YXIgcmFuZ2VzIHN0YXRlICovCi0JbnVtX3JlZyA9IHg4Nl9zZXR1cF92YXJfbXRycnMocmFuZ2UsIG5yX3JhbmdlLAotCQkJCQkJY2h1bmtfc2l6ZSwgZ3Jhbl9zaXplKTsKLQotCS8qIHdlIGdvdCBuZXcgc2V0dGluZyBpbiByYW5nZV9zdGF0ZSwgY2hlY2sgaXQgKi8KLQltZW1zZXQocmFuZ2VfbmV3LCAwLCBzaXplb2YocmFuZ2VfbmV3KSk7Ci0JbnJfcmFuZ2VfbmV3ID0geDg2X2dldF9tdHJyX21lbV9yYW5nZShyYW5nZV9uZXcsIDAsCi0JCQkJZXh0cmFfcmVtb3ZlX2Jhc2UsIGV4dHJhX3JlbW92ZV9zaXplKTsKLQlyYW5nZV9zdW1zX25ldyA9IHN1bV9yYW5nZXMocmFuZ2VfbmV3LCBucl9yYW5nZV9uZXcpOwotCi0JcmVzdWx0W2ldLmNodW5rX3NpemVrID0gY2h1bmtfc2l6ZSA+PiAxMDsKLQlyZXN1bHRbaV0uZ3Jhbl9zaXplayA9IGdyYW5fc2l6ZSA+PiAxMDsKLQlyZXN1bHRbaV0ubnVtX3JlZyA9IG51bV9yZWc7Ci0JaWYgKHJhbmdlX3N1bXMgPCByYW5nZV9zdW1zX25ldykgewotCQlyZXN1bHRbaV0ubG9zZV9jb3Zlcl9zaXplayA9Ci0JCQkocmFuZ2Vfc3Vtc19uZXcgLSByYW5nZV9zdW1zKSA8PCBQU0hJRlQ7Ci0JCXJlc3VsdFtpXS5iYWQgPSAxOwotCX0gZWxzZQotCQlyZXN1bHRbaV0ubG9zZV9jb3Zlcl9zaXplayA9Ci0JCQkocmFuZ2Vfc3VtcyAtIHJhbmdlX3N1bXNfbmV3KSA8PCBQU0hJRlQ7Ci0KLQkvKiBkb3VibGUgY2hlY2sgaXQgKi8KLQlpZiAoIXJlc3VsdFtpXS5iYWQgJiYgIXJlc3VsdFtpXS5sb3NlX2NvdmVyX3NpemVrKSB7Ci0JCWlmIChucl9yYW5nZV9uZXcgIT0gbnJfcmFuZ2UgfHwKLQkJCW1lbWNtcChyYW5nZSwgcmFuZ2VfbmV3LCBzaXplb2YocmFuZ2UpKSkKLQkJCQlyZXN1bHRbaV0uYmFkID0gMTsKLQl9Ci0KLQlpZiAoIXJlc3VsdFtpXS5iYWQgJiYgKHJhbmdlX3N1bXMgLSByYW5nZV9zdW1zX25ldyA8Ci0JCQkJbWluX2xvc3NfcGZuW251bV9yZWddKSkgewotCQltaW5fbG9zc19wZm5bbnVtX3JlZ10gPQotCQkJcmFuZ2Vfc3VtcyAtIHJhbmdlX3N1bXNfbmV3OwotCX0KLX0KLQotc3RhdGljIHZvaWQgX19pbml0IG10cnJfcHJpbnRfb3V0X29uZV9yZXN1bHQoaW50IGkpCi17Ci0JY2hhciBncmFuX2ZhY3RvciwgY2h1bmtfZmFjdG9yLCBsb3NlX2ZhY3RvcjsKLQl1bnNpZ25lZCBsb25nIGdyYW5fYmFzZSwgY2h1bmtfYmFzZSwgbG9zZV9iYXNlOwotCi0JZ3Jhbl9iYXNlID0gdG9fc2l6ZV9mYWN0b3IocmVzdWx0W2ldLmdyYW5fc2l6ZWssICZncmFuX2ZhY3RvciksCi0JY2h1bmtfYmFzZSA9IHRvX3NpemVfZmFjdG9yKHJlc3VsdFtpXS5jaHVua19zaXplaywgJmNodW5rX2ZhY3RvciksCi0JbG9zZV9iYXNlID0gdG9fc2l6ZV9mYWN0b3IocmVzdWx0W2ldLmxvc2VfY292ZXJfc2l6ZWssICZsb3NlX2ZhY3RvciksCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXNncmFuX3NpemU6ICVsZCVjIFx0Y2h1bmtfc2l6ZTogJWxkJWMgXHQiLAotCQkJcmVzdWx0W2ldLmJhZCA/ICIqQkFEKiIgOiAiICIsCi0JCQlncmFuX2Jhc2UsIGdyYW5fZmFjdG9yLCBjaHVua19iYXNlLCBjaHVua19mYWN0b3IpOwotCXByaW50ayhLRVJOX0NPTlQgIm51bV9yZWc6ICVkICBcdGxvc2UgY292ZXIgUkFNOiAlcyVsZCVjXG4iLAotCQkJcmVzdWx0W2ldLm51bV9yZWcsIHJlc3VsdFtpXS5iYWQgPyAiLSIgOiAiIiwKLQkJCWxvc2VfYmFzZSwgbG9zZV9mYWN0b3IpOwotfQotCi1zdGF0aWMgaW50IF9faW5pdCBtdHJyX3NlYXJjaF9vcHRpbWFsX2luZGV4KHZvaWQpCi17Ci0JaW50IGk7Ci0JaW50IG51bV9yZWdfZ29vZDsKLQlpbnQgaW5kZXhfZ29vZDsKLQotCWlmIChucl9tdHJyX3NwYXJlX3JlZyA+PSBudW1fdmFyX3JhbmdlcykKLQkJbnJfbXRycl9zcGFyZV9yZWcgPSBudW1fdmFyX3JhbmdlcyAtIDE7Ci0JbnVtX3JlZ19nb29kID0gLTE7Ci0JZm9yIChpID0gbnVtX3Zhcl9yYW5nZXMgLSBucl9tdHJyX3NwYXJlX3JlZzsgaSA+IDA7IGktLSkgewotCQlpZiAoIW1pbl9sb3NzX3BmbltpXSkKLQkJCW51bV9yZWdfZ29vZCA9IGk7Ci0JfQotCi0JaW5kZXhfZ29vZCA9IC0xOwotCWlmIChudW1fcmVnX2dvb2QgIT0gLTEpIHsKLQkJZm9yIChpID0gMDsgaSA8IE5VTV9SRVNVTFQ7IGkrKykgewotCQkJaWYgKCFyZXN1bHRbaV0uYmFkICYmCi0JCQkgICAgcmVzdWx0W2ldLm51bV9yZWcgPT0gbnVtX3JlZ19nb29kICYmCi0JCQkgICAgIXJlc3VsdFtpXS5sb3NlX2NvdmVyX3NpemVrKSB7Ci0JCQkJaW5kZXhfZ29vZCA9IGk7Ci0JCQkJYnJlYWs7Ci0JCQl9Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gaW5kZXhfZ29vZDsKLX0KLQotCi1zdGF0aWMgaW50IF9faW5pdCBtdHJyX2NsZWFudXAodW5zaWduZWQgYWRkcmVzc19iaXRzKQotewotCXVuc2lnbmVkIGxvbmcgZXh0cmFfcmVtb3ZlX2Jhc2UsIGV4dHJhX3JlbW92ZV9zaXplOwotCXVuc2lnbmVkIGxvbmcgYmFzZSwgc2l6ZSwgZGVmLCBkdW1teTsKLQltdHJyX3R5cGUgdHlwZTsKLQl1NjQgY2h1bmtfc2l6ZSwgZ3Jhbl9zaXplOwotCWludCBpbmRleF9nb29kOwotCWludCBpOwotCi0JaWYgKCFpc19jcHUoSU5URUwpIHx8IGVuYWJsZV9tdHJyX2NsZWFudXAgPCAxKQotCQlyZXR1cm4gMDsKLQlyZG1zcihNVFJSZGVmVHlwZV9NU1IsIGRlZiwgZHVtbXkpOwotCWRlZiAmPSAweGZmOwotCWlmIChkZWYgIT0gTVRSUl9UWVBFX1VOQ0FDSEFCTEUpCi0JCXJldHVybiAwOwotCi0JLyogZ2V0IGl0IGFuZCBzdG9yZSBpdCBhc2lkZSAqLwotCW1lbXNldChyYW5nZV9zdGF0ZSwgMCwgc2l6ZW9mKHJhbmdlX3N0YXRlKSk7Ci0JZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKLQkJbXRycl9pZi0+Z2V0KGksICZiYXNlLCAmc2l6ZSwgJnR5cGUpOwotCQlyYW5nZV9zdGF0ZVtpXS5iYXNlX3BmbiA9IGJhc2U7Ci0JCXJhbmdlX3N0YXRlW2ldLnNpemVfcGZuID0gc2l6ZTsKLQkJcmFuZ2Vfc3RhdGVbaV0udHlwZSA9IHR5cGU7Ci0JfQotCi0JLyogY2hlY2sgaWYgd2UgbmVlZCBoYW5kbGUgaXQgYW5kIGNhbiBoYW5kbGUgaXQgKi8KLQlpZiAoIW10cnJfbmVlZF9jbGVhbnVwKCkpCi0JCXJldHVybiAwOwotCi0JLyogcHJpbnQgb3JpZ2luYWwgdmFyIE1UUlJzIGF0IGZpcnN0LCBmb3IgZGVidWdnaW5nOiAqLwotCXByaW50ayhLRVJOX0RFQlVHICJvcmlnaW5hbCB2YXJpYWJsZSBNVFJSc1xuIik7Ci0JcHJpbnRfb3V0X210cnJfcmFuZ2Vfc3RhdGUoKTsKLQotCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKHJhbmdlKSk7Ci0JZXh0cmFfcmVtb3ZlX3NpemUgPSAwOwotCWV4dHJhX3JlbW92ZV9iYXNlID0gMSA8PCAoMzIgLSBQQUdFX1NISUZUKTsKLQlpZiAobXRycl90b20yKQotCQlleHRyYV9yZW1vdmVfc2l6ZSA9Ci0JCQkobXRycl90b20yID4+IFBBR0VfU0hJRlQpIC0gZXh0cmFfcmVtb3ZlX2Jhc2U7Ci0JbnJfcmFuZ2UgPSB4ODZfZ2V0X210cnJfbWVtX3JhbmdlKHJhbmdlLCAwLCBleHRyYV9yZW1vdmVfYmFzZSwKLQkJCQkJICBleHRyYV9yZW1vdmVfc2l6ZSk7Ci0JLyoKLQkgKiBbMCwgMU0pIHNob3VsZCBhbHdheXMgYmUgY292ZXJyZWQgYnkgdmFyIG10cnIgd2l0aCBXQgotCSAqIGFuZCBmaXhlZCBtdHJycyBzaG91bGQgdGFrZSBlZmZlY3RpdmUgYmVmb3JlIHZhciBtdHJyIGZvciBpdAotCSAqLwotCW5yX3JhbmdlID0gYWRkX3JhbmdlX3dpdGhfbWVyZ2UocmFuZ2UsIG5yX3JhbmdlLCAwLAotCQkJCQkoMVVMTDw8KDIwIC0gUEFHRV9TSElGVCkpIC0gMSk7Ci0JLyogc29ydCB0aGUgcmFuZ2VzICovCi0Jc29ydChyYW5nZSwgbnJfcmFuZ2UsIHNpemVvZihzdHJ1Y3QgcmVzX3JhbmdlKSwgY21wX3JhbmdlLCBOVUxMKTsKLQotCXJhbmdlX3N1bXMgPSBzdW1fcmFuZ2VzKHJhbmdlLCBucl9yYW5nZSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAidG90YWwgUkFNIGNvdmVycmVkOiAlbGRNXG4iLAotCSAgICAgICByYW5nZV9zdW1zID4+ICgyMCAtIFBBR0VfU0hJRlQpKTsKLQotCWlmIChtdHJyX2NodW5rX3NpemUgJiYgbXRycl9ncmFuX3NpemUpIHsKLQkJaSA9IDA7Ci0JCW10cnJfY2FsY19yYW5nZV9zdGF0ZShtdHJyX2NodW5rX3NpemUsIG10cnJfZ3Jhbl9zaXplLAotCQkJCSAgICAgIGV4dHJhX3JlbW92ZV9iYXNlLCBleHRyYV9yZW1vdmVfc2l6ZSwgaSk7Ci0KLQkJbXRycl9wcmludF9vdXRfb25lX3Jlc3VsdChpKTsKLQotCQlpZiAoIXJlc3VsdFtpXS5iYWQpIHsKLQkJCXNldF92YXJfbXRycl9hbGwoYWRkcmVzc19iaXRzKTsKLQkJCXJldHVybiAxOwotCQl9Ci0JCXByaW50ayhLRVJOX0lORk8gImludmFsaWQgbXRycl9ncmFuX3NpemUgb3IgbXRycl9jaHVua19zaXplLCAiCi0JCSAgICAgICAid2lsbCBmaW5kIG9wdGltYWwgb25lXG4iKTsKLQl9Ci0KLQlpID0gMDsKLQltZW1zZXQobWluX2xvc3NfcGZuLCAweGZmLCBzaXplb2YobWluX2xvc3NfcGZuKSk7Ci0JbWVtc2V0KHJlc3VsdCwgMCwgc2l6ZW9mKHJlc3VsdCkpOwotCWZvciAoZ3Jhbl9zaXplID0gKDFVTEw8PDE2KTsgZ3Jhbl9zaXplIDwgKDFVTEw8PDMyKTsgZ3Jhbl9zaXplIDw8PSAxKSB7Ci0KLQkJZm9yIChjaHVua19zaXplID0gZ3Jhbl9zaXplOyBjaHVua19zaXplIDwgKDFVTEw8PDMyKTsKLQkJICAgICBjaHVua19zaXplIDw8PSAxKSB7Ci0KLQkJCWlmIChpID49IE5VTV9SRVNVTFQpCi0JCQkJY29udGludWU7Ci0KLQkJCW10cnJfY2FsY19yYW5nZV9zdGF0ZShjaHVua19zaXplLCBncmFuX3NpemUsCi0JCQkJICAgICAgZXh0cmFfcmVtb3ZlX2Jhc2UsIGV4dHJhX3JlbW92ZV9zaXplLCBpKTsKLQkJCWlmIChkZWJ1Z19wcmludCkgewotCQkJCW10cnJfcHJpbnRfb3V0X29uZV9yZXN1bHQoaSk7Ci0JCQkJcHJpbnRrKEtFUk5fSU5GTyAiXG4iKTsKLQkJCX0KLQotCQkJaSsrOwotCQl9Ci0JfQotCi0JLyogdHJ5IHRvIGZpbmQgdGhlIG9wdGltYWwgaW5kZXggKi8KLQlpbmRleF9nb29kID0gbXRycl9zZWFyY2hfb3B0aW1hbF9pbmRleCgpOwotCi0JaWYgKGluZGV4X2dvb2QgIT0gLTEpIHsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiRm91bmQgb3B0aW1hbCBzZXR0aW5nIGZvciBtdHJyIGNsZWFuIHVwXG4iKTsKLQkJaSA9IGluZGV4X2dvb2Q7Ci0JCW10cnJfcHJpbnRfb3V0X29uZV9yZXN1bHQoaSk7Ci0KLQkJLyogY29udmVydCByYW5nZXMgdG8gdmFyIHJhbmdlcyBzdGF0ZSAqLwotCQljaHVua19zaXplID0gcmVzdWx0W2ldLmNodW5rX3NpemVrOwotCQljaHVua19zaXplIDw8PSAxMDsKLQkJZ3Jhbl9zaXplID0gcmVzdWx0W2ldLmdyYW5fc2l6ZWs7Ci0JCWdyYW5fc2l6ZSA8PD0gMTA7Ci0JCXg4Nl9zZXR1cF92YXJfbXRycnMocmFuZ2UsIG5yX3JhbmdlLCBjaHVua19zaXplLCBncmFuX3NpemUpOwotCQlzZXRfdmFyX210cnJfYWxsKGFkZHJlc3NfYml0cyk7Ci0JCXByaW50ayhLRVJOX0RFQlVHICJOZXcgdmFyaWFibGUgTVRSUnNcbiIpOwotCQlwcmludF9vdXRfbXRycl9yYW5nZV9zdGF0ZSgpOwotCQlyZXR1cm4gMTsKLQl9IGVsc2UgewotCQkvKiBwcmludCBvdXQgYWxsICovCi0JCWZvciAoaSA9IDA7IGkgPCBOVU1fUkVTVUxUOyBpKyspCi0JCQltdHJyX3ByaW50X291dF9vbmVfcmVzdWx0KGkpOwotCX0KLQotCXByaW50ayhLRVJOX0lORk8gIm10cnJfY2xlYW51cDogY2FuIG5vdCBmaW5kIG9wdGltYWwgdmFsdWVcbiIpOwotCXByaW50ayhLRVJOX0lORk8gInBsZWFzZSBzcGVjaWZ5IG10cnJfZ3Jhbl9zaXplL210cnJfY2h1bmtfc2l6ZVxuIik7Ci0KLQlyZXR1cm4gMDsKLX0KLSNlbHNlCi1zdGF0aWMgaW50IF9faW5pdCBtdHJyX2NsZWFudXAodW5zaWduZWQgYWRkcmVzc19iaXRzKQotewotCXJldHVybiAwOwotfQotI2VuZGlmCi0KLXN0YXRpYyBpbnQgX19pbml0ZGF0YSBjaGFuZ2VkX2J5X210cnJfY2xlYW51cDsKLQotc3RhdGljIGludCBkaXNhYmxlX210cnJfdHJpbTsKLQotc3RhdGljIGludCBfX2luaXQgZGlzYWJsZV9tdHJyX3RyaW1fc2V0dXAoY2hhciAqc3RyKQotewotCWRpc2FibGVfbXRycl90cmltID0gMTsKLQlyZXR1cm4gMDsKLX0KLWVhcmx5X3BhcmFtKCJkaXNhYmxlX210cnJfdHJpbSIsIGRpc2FibGVfbXRycl90cmltX3NldHVwKTsKLQotLyoKLSAqIE5ld2VyIEFNRCBLOHMgYW5kIGxhdGVyIENQVXMgaGF2ZSBhIHNwZWNpYWwgbWFnaWMgTVNSIHdheSB0byBmb3JjZSBXQgotICogZm9yIG1lbW9yeSA+NEdCLiBDaGVjayBmb3IgdGhhdCBoZXJlLgotICogTm90ZSB0aGlzIHdvbid0IGNoZWNrIGlmIHRoZSBNVFJScyA8IDRHQiB3aGVyZSB0aGUgbWFnaWMgYml0IGRvZXNuJ3QKLSAqIGFwcGx5IHRvIGFyZSB3cm9uZywgYnV0IHNvIGZhciB3ZSBkb24ndCBrbm93IG9mIGFueSBzdWNoIGNhc2UgaW4gdGhlIHdpbGQuCi0gKi8KLSNkZWZpbmUgVG9tMkVuYWJsZWQgKDFVIDw8IDIxKQotI2RlZmluZSBUb20yRm9yY2VNZW1UeXBlV0IgKDFVIDw8IDIyKQotCi1pbnQgX19pbml0IGFtZF9zcGVjaWFsX2RlZmF1bHRfbXRycih2b2lkKQotewotCXUzMiBsLCBoOwotCi0JaWYgKGJvb3RfY3B1X2RhdGEueDg2X3ZlbmRvciAhPSBYODZfVkVORE9SX0FNRCkKLQkJcmV0dXJuIDA7Ci0JaWYgKGJvb3RfY3B1X2RhdGEueDg2IDwgMHhmIHx8IGJvb3RfY3B1X2RhdGEueDg2ID4gMHgxMSkKLQkJcmV0dXJuIDA7Ci0JLyogSW4gY2FzZSBzb21lIGh5cGVydmlzb3IgZG9lc24ndCBwYXNzIFNZU0NGRyB0aHJvdWdoICovCi0JaWYgKHJkbXNyX3NhZmUoTVNSX0s4X1NZU0NGRywgJmwsICZoKSA8IDApCi0JCXJldHVybiAwOwotCS8qCi0JICogTWVtb3J5IGJldHdlZW4gNEdCIGFuZCB0b3Agb2YgbWVtIGlzIGZvcmNlZCBXQiBieSB0aGlzIG1hZ2ljIGJpdC4KLQkgKiBSZXNlcnZlZCBiZWZvcmUgSzhSZXZGLCBidXQgc2hvdWxkIGJlIHplcm8gdGhlcmUuCi0JICovCi0JaWYgKChsICYgKFRvbTJFbmFibGVkIHwgVG9tMkZvcmNlTWVtVHlwZVdCKSkgPT0KLQkJIChUb20yRW5hYmxlZCB8IFRvbTJGb3JjZU1lbVR5cGVXQikpCi0JCXJldHVybiAxOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdTY0IF9faW5pdCByZWFsX3RyaW1fbWVtb3J5KHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgbGltaXRfcGZuKQotewotCXU2NCB0cmltX3N0YXJ0LCB0cmltX3NpemU7Ci0JdHJpbV9zdGFydCA9IHN0YXJ0X3BmbjsKLQl0cmltX3N0YXJ0IDw8PSBQQUdFX1NISUZUOwotCXRyaW1fc2l6ZSA9IGxpbWl0X3BmbjsKLQl0cmltX3NpemUgPDw9IFBBR0VfU0hJRlQ7Ci0JdHJpbV9zaXplIC09IHRyaW1fc3RhcnQ7Ci0KLQlyZXR1cm4gZTgyMF91cGRhdGVfcmFuZ2UodHJpbV9zdGFydCwgdHJpbV9zaXplLCBFODIwX1JBTSwKLQkJCQlFODIwX1JFU0VSVkVEKTsKLX0KLS8qKgotICogbXRycl90cmltX3VuY2FjaGVkX21lbW9yeSAtIHRyaW0gUkFNIG5vdCBjb3ZlcmVkIGJ5IE1UUlJzCi0gKiBAZW5kX3BmbjogZW5kaW5nIHBhZ2UgZnJhbWUgbnVtYmVyCi0gKgotICogU29tZSBidWdneSBCSU9TZXMgZG9uJ3Qgc2V0dXAgdGhlIE1UUlJzIHByb3Blcmx5IGZvciBzeXN0ZW1zIHdpdGggY2VydGFpbgotICogbWVtb3J5IGNvbmZpZ3VyYXRpb25zLiAgVGhpcyByb3V0aW5lIGNoZWNrcyB0aGF0IHRoZSBoaWdoZXN0IE1UUlIgbWF0Y2hlcwotICogdGhlIGVuZCBvZiBtZW1vcnksIHRvIG1ha2Ugc3VyZSB0aGUgTVRSUnMgaGF2aW5nIGEgd3JpdGUgYmFjayB0eXBlIGNvdmVyCi0gKiBhbGwgb2YgdGhlIG1lbW9yeSB0aGUga2VybmVsIGlzIGludGVuZGluZyB0byB1c2UuIElmIG5vdCwgaXQnbGwgdHJpbSBhbnkKLSAqIG1lbW9yeSBvZmYgdGhlIGVuZCBieSBhZGp1c3RpbmcgZW5kX3BmbiwgcmVtb3ZpbmcgaXQgZnJvbSB0aGUga2VybmVsJ3MKLSAqIGFsbG9jYXRpb24gcG9vbHMsIHdhcm5pbmcgdGhlIHVzZXIgd2l0aCBhbiBvYm5veGlvdXMgbWVzc2FnZS4KLSAqLwotaW50IF9faW5pdCBtdHJyX3RyaW1fdW5jYWNoZWRfbWVtb3J5KHVuc2lnbmVkIGxvbmcgZW5kX3BmbikKLXsKLQl1bnNpZ25lZCBsb25nIGksIGJhc2UsIHNpemUsIGhpZ2hlc3RfcGZuID0gMCwgZGVmLCBkdW1teTsKLQltdHJyX3R5cGUgdHlwZTsKLQl1NjQgdG90YWxfdHJpbV9zaXplOwotCi0JLyogZXh0cmEgb25lIGZvciBhbGwgMCAqLwotCWludCBudW1bTVRSUl9OVU1fVFlQRVMgKyAxXTsKLQkvKgotCSAqIE1ha2Ugc3VyZSB3ZSBvbmx5IHRyaW0gdW5jYWNoYWJsZSBtZW1vcnkgb24gbWFjaGluZXMgdGhhdAotCSAqIHN1cHBvcnQgdGhlIEludGVsIE1UUlIgYXJjaGl0ZWN0dXJlOgotCSAqLwotCWlmICghaXNfY3B1KElOVEVMKSB8fCBkaXNhYmxlX210cnJfdHJpbSkKLQkJcmV0dXJuIDA7Ci0JcmRtc3IoTVRSUmRlZlR5cGVfTVNSLCBkZWYsIGR1bW15KTsKLQlkZWYgJj0gMHhmZjsKLQlpZiAoZGVmICE9IE1UUlJfVFlQRV9VTkNBQ0hBQkxFKQotCQlyZXR1cm4gMDsKLQotCS8qIGdldCBpdCBhbmQgc3RvcmUgaXQgYXNpZGUgKi8KLQltZW1zZXQocmFuZ2Vfc3RhdGUsIDAsIHNpemVvZihyYW5nZV9zdGF0ZSkpOwotCWZvciAoaSA9IDA7IGkgPCBudW1fdmFyX3JhbmdlczsgaSsrKSB7Ci0JCW10cnJfaWYtPmdldChpLCAmYmFzZSwgJnNpemUsICZ0eXBlKTsKLQkJcmFuZ2Vfc3RhdGVbaV0uYmFzZV9wZm4gPSBiYXNlOwotCQlyYW5nZV9zdGF0ZVtpXS5zaXplX3BmbiA9IHNpemU7Ci0JCXJhbmdlX3N0YXRlW2ldLnR5cGUgPSB0eXBlOwotCX0KLQotCS8qIEZpbmQgaGlnaGVzdCBjYWNoZWQgcGZuICovCi0JZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKLQkJdHlwZSA9IHJhbmdlX3N0YXRlW2ldLnR5cGU7Ci0JCWlmICh0eXBlICE9IE1UUlJfVFlQRV9XUkJBQ0spCi0JCQljb250aW51ZTsKLQkJYmFzZSA9IHJhbmdlX3N0YXRlW2ldLmJhc2VfcGZuOwotCQlzaXplID0gcmFuZ2Vfc3RhdGVbaV0uc2l6ZV9wZm47Ci0JCWlmIChoaWdoZXN0X3BmbiA8IGJhc2UgKyBzaXplKQotCQkJaGlnaGVzdF9wZm4gPSBiYXNlICsgc2l6ZTsKLQl9Ci0KLQkvKiBrdm0vcWVtdSBkb2Vzbid0IGhhdmUgbXRyciBzZXQgcmlnaHQsIGRvbid0IHRyaW0gdGhlbSBhbGwgKi8KLQlpZiAoIWhpZ2hlc3RfcGZuKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIkNQVSBNVFJScyBhbGwgYmxhbmsgLSB2aXJ0dWFsaXplZCBzeXN0ZW0uXG4iKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JLyogY2hlY2sgZW50cmllcyBudW1iZXIgKi8KLQltZW1zZXQobnVtLCAwLCBzaXplb2YobnVtKSk7Ci0JZm9yIChpID0gMDsgaSA8IG51bV92YXJfcmFuZ2VzOyBpKyspIHsKLQkJdHlwZSA9IHJhbmdlX3N0YXRlW2ldLnR5cGU7Ci0JCWlmICh0eXBlID49IE1UUlJfTlVNX1RZUEVTKQotCQkJY29udGludWU7Ci0JCXNpemUgPSByYW5nZV9zdGF0ZVtpXS5zaXplX3BmbjsKLQkJaWYgKCFzaXplKQotCQkJdHlwZSA9IE1UUlJfTlVNX1RZUEVTOwotCQludW1bdHlwZV0rKzsKLQl9Ci0KLQkvKiBubyBlbnRyeSBmb3IgV0I/ICovCi0JaWYgKCFudW1bTVRSUl9UWVBFX1dSQkFDS10pCi0JCXJldHVybiAwOwotCi0JLyogY2hlY2sgaWYgd2Ugb25seSBoYWQgV0IgYW5kIFVDICovCi0JaWYgKG51bVtNVFJSX1RZUEVfV1JCQUNLXSArIG51bVtNVFJSX1RZUEVfVU5DQUNIQUJMRV0gIT0KLQkJbnVtX3Zhcl9yYW5nZXMgLSBudW1bTVRSUl9OVU1fVFlQRVNdKQotCQlyZXR1cm4gMDsKLQotCW1lbXNldChyYW5nZSwgMCwgc2l6ZW9mKHJhbmdlKSk7Ci0JbnJfcmFuZ2UgPSAwOwotCWlmIChtdHJyX3RvbTIpIHsKLQkJcmFuZ2VbbnJfcmFuZ2VdLnN0YXJ0ID0gKDFVTEw8PCgzMiAtIFBBR0VfU0hJRlQpKTsKLQkJcmFuZ2VbbnJfcmFuZ2VdLmVuZCA9IChtdHJyX3RvbTIgPj4gUEFHRV9TSElGVCkgLSAxOwotCQlpZiAoaGlnaGVzdF9wZm4gPCByYW5nZVtucl9yYW5nZV0uZW5kICsgMSkKLQkJCWhpZ2hlc3RfcGZuID0gcmFuZ2VbbnJfcmFuZ2VdLmVuZCArIDE7Ci0JCW5yX3JhbmdlKys7Ci0JfQotCW5yX3JhbmdlID0geDg2X2dldF9tdHJyX21lbV9yYW5nZShyYW5nZSwgbnJfcmFuZ2UsIDAsIDApOwotCi0JdG90YWxfdHJpbV9zaXplID0gMDsKLQkvKiBjaGVjayB0aGUgaGVhZCAqLwotCWlmIChyYW5nZVswXS5zdGFydCkKLQkJdG90YWxfdHJpbV9zaXplICs9IHJlYWxfdHJpbV9tZW1vcnkoMCwgcmFuZ2VbMF0uc3RhcnQpOwotCS8qIGNoZWNrIHRoZSBob2xlcyAqLwotCWZvciAoaSA9IDA7IGkgPCBucl9yYW5nZSAtIDE7IGkrKykgewotCQlpZiAocmFuZ2VbaV0uZW5kICsgMSA8IHJhbmdlW2krMV0uc3RhcnQpCi0JCQl0b3RhbF90cmltX3NpemUgKz0gcmVhbF90cmltX21lbW9yeShyYW5nZVtpXS5lbmQgKyAxLAotCQkJCQkJCSAgICByYW5nZVtpKzFdLnN0YXJ0KTsKLQl9Ci0JLyogY2hlY2sgdGhlIHRvcCAqLwotCWkgPSBucl9yYW5nZSAtIDE7Ci0JaWYgKHJhbmdlW2ldLmVuZCArIDEgPCBlbmRfcGZuKQotCQl0b3RhbF90cmltX3NpemUgKz0gcmVhbF90cmltX21lbW9yeShyYW5nZVtpXS5lbmQgKyAxLAotCQkJCQkJCSBlbmRfcGZuKTsKLQotCWlmICh0b3RhbF90cmltX3NpemUpIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiV0FSTklORzogQklPUyBidWc6IENQVSBNVFJScyBkb24ndCBjb3ZlciIKLQkJCSIgYWxsIG9mIG1lbW9yeSwgbG9zaW5nICVsbHVNQiBvZiBSQU0uXG4iLAotCQkJdG90YWxfdHJpbV9zaXplID4+IDIwKTsKLQotCQlpZiAoIWNoYW5nZWRfYnlfbXRycl9jbGVhbnVwKQotCQkJV0FSTl9PTigxKTsKLQotCQlwcmludGsoS0VSTl9JTkZPICJ1cGRhdGUgZTgyMCBmb3IgbXRyclxuIik7Ci0JCXVwZGF0ZV9lODIwKCk7Ci0KLQkJcmV0dXJuIDE7Ci0JfQotCi0JcmV0dXJuIDA7Ci19CitpbnQgX19pbml0ZGF0YSBjaGFuZ2VkX2J5X210cnJfY2xlYW51cDsKIAogLyoqCiAgKiBtdHJyX2JwX2luaXQgLSBpbml0aWFsaXplIG10cnJzIG9uIHRoZSBib290IENQVQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL210cnIuaCBiL2FyY2gveDg2L2tlcm5lbC9jcHUvbXRyci9tdHJyLmgKaW5kZXggZmZkNjA0MC4uNzdmNjdmNyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS9tdHJyL210cnIuaAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L210cnIvbXRyci5oCkBAIC03OSw2ICs3OSw3IEBACiAKIGV4dGVybiB1bnNpZ25lZCBpbnQgbnVtX3Zhcl9yYW5nZXM7CiBleHRlcm4gdTY0IG10cnJfdG9tMjsKK2V4dGVybiBzdHJ1Y3QgbXRycl9zdGF0ZV90eXBlIG10cnJfc3RhdGU7CiAKIHZvaWQgbXRycl9zdGF0ZV93YXJuKHZvaWQpOwogY29uc3QgY2hhciAqbXRycl9hdHRyaWJfdG9fc3RyKGludCB4KTsKQEAgLTg4LDMgKzg5LDYgQEAKIGludCBhbWRfaW5pdF9tdHJyKHZvaWQpOwogaW50IGN5cml4X2luaXRfbXRycih2b2lkKTsKIGludCBjZW50YXVyX2luaXRfbXRycih2b2lkKTsKKworZXh0ZXJuIGludCBjaGFuZ2VkX2J5X210cnJfY2xlYW51cDsKK2V4dGVybiBpbnQgbXRycl9jbGVhbnVwKHVuc2lnbmVkIGFkZHJlc3NfYml0cyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3RyYW5zbWV0YS5jIGIvYXJjaC94ODYva2VybmVsL2NwdS90cmFuc21ldGEuYwppbmRleCA1MmIzZmVmLi5iYjYyYjNlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3RyYW5zbWV0YS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvdHJhbnNtZXRhLmMKQEAgLTk4LDcgKzk4LDcgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgc3RydWN0IGNwdV9kZXYgdHJhbnNtZXRhX2NwdV9kZXYgX19jcHVpbml0ZGF0YSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3B1X2RldiBfX2NwdWluaXRjb25zdCB0cmFuc21ldGFfY3B1X2RldiA9IHsKIAkuY192ZW5kb3IJPSAiVHJhbnNtZXRhIiwKIAkuY19pZGVudAk9IHsgIkdlbnVpbmVUTXg4NiIsICJUcmFuc21ldGFDUFUiIH0sCiAJLmNfZWFybHlfaW5pdAk9IGVhcmx5X2luaXRfdHJhbnNtZXRhLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2NwdS91bWMuYyBiL2FyY2gveDg2L2tlcm5lbC9jcHUvdW1jLmMKaW5kZXggZTc3N2Y3OS4uZmQyYzM3YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2NwdS91bWMuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3VtYy5jCkBAIC04LDcgKzgsNyBAQAogICogc28gbm8gc3BlY2lhbCBpbml0IHRha2VzIHBsYWNlLgogICovCiAKLXN0YXRpYyBzdHJ1Y3QgY3B1X2RldiB1bWNfY3B1X2RldiBfX2NwdWluaXRkYXRhID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjcHVfZGV2IF9fY3B1aW5pdGNvbnN0IHVtY19jcHVfZGV2ID0gewogCS5jX3ZlbmRvcgk9ICJVTUMiLAogCS5jX2lkZW50CT0geyAiVU1DIFVNQyBVTUMiIH0sCiAJLmNfbW9kZWxzID0gewpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jIGIvYXJjaC94ODYva2VybmVsL2R1bXBzdGFjay5jCmluZGV4IDg3ZDEwM2QuLmRkMjEzMGIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9kdW1wc3RhY2suYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZHVtcHN0YWNrLmMKQEAgLTEwLDYgKzEwLDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZGVidWcuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9wdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KICNpbmNsdWRlIDxsaW51eC9rZXhlYy5oPgogI2luY2x1ZGUgPGxpbnV4L2J1Zy5oPgogI2luY2x1ZGUgPGxpbnV4L25taS5oPgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2U4MjAuYyBiL2FyY2gveDg2L2tlcm5lbC9lODIwLmMKaW5kZXggNTA4YmVjMS4uZWYyYzM1NiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2U4MjAuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZTgyMC5jCkBAIC0xMTAsMTkgKzExMCw1MCBAQAogLyoKICAqIEFkZCBhIG1lbW9yeSByZWdpb24gdG8gdGhlIGtlcm5lbCBlODIwIG1hcC4KICAqLwotdm9pZCBfX2luaXQgZTgyMF9hZGRfcmVnaW9uKHU2NCBzdGFydCwgdTY0IHNpemUsIGludCB0eXBlKQorc3RhdGljIHZvaWQgX19pbml0IF9fZTgyMF9hZGRfcmVnaW9uKHN0cnVjdCBlODIwbWFwICplODIweCwgdTY0IHN0YXJ0LCB1NjQgc2l6ZSwKKwkJCQkJIGludCB0eXBlKQogewotCWludCB4ID0gZTgyMC5ucl9tYXA7CisJaW50IHggPSBlODIweC0+bnJfbWFwOwogCi0JaWYgKHggPT0gQVJSQVlfU0laRShlODIwLm1hcCkpIHsKKwlpZiAoeCA9PSBBUlJBWV9TSVpFKGU4MjB4LT5tYXApKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiT29vcHMhIFRvbyBtYW55IGVudHJpZXMgaW4gdGhlIG1lbW9yeSBtYXAhXG4iKTsKIAkJcmV0dXJuOwogCX0KIAotCWU4MjAubWFwW3hdLmFkZHIgPSBzdGFydDsKLQllODIwLm1hcFt4XS5zaXplID0gc2l6ZTsKLQllODIwLm1hcFt4XS50eXBlID0gdHlwZTsKLQllODIwLm5yX21hcCsrOworCWU4MjB4LT5tYXBbeF0uYWRkciA9IHN0YXJ0OworCWU4MjB4LT5tYXBbeF0uc2l6ZSA9IHNpemU7CisJZTgyMHgtPm1hcFt4XS50eXBlID0gdHlwZTsKKwllODIweC0+bnJfbWFwKys7Cit9CisKK3ZvaWQgX19pbml0IGU4MjBfYWRkX3JlZ2lvbih1NjQgc3RhcnQsIHU2NCBzaXplLCBpbnQgdHlwZSkKK3sKKwlfX2U4MjBfYWRkX3JlZ2lvbigmZTgyMCwgc3RhcnQsIHNpemUsIHR5cGUpOworfQorCitzdGF0aWMgdm9pZCBfX2luaXQgZTgyMF9wcmludF90eXBlKHUzMiB0eXBlKQoreworCXN3aXRjaCAodHlwZSkgeworCWNhc2UgRTgyMF9SQU06CisJY2FzZSBFODIwX1JFU0VSVkVEX0tFUk46CisJCXByaW50ayhLRVJOX0NPTlQgIih1c2FibGUpIik7CisJCWJyZWFrOworCWNhc2UgRTgyMF9SRVNFUlZFRDoKKwkJcHJpbnRrKEtFUk5fQ09OVCAiKHJlc2VydmVkKSIpOworCQlicmVhazsKKwljYXNlIEU4MjBfQUNQSToKKwkJcHJpbnRrKEtFUk5fQ09OVCAiKEFDUEkgZGF0YSkiKTsKKwkJYnJlYWs7CisJY2FzZSBFODIwX05WUzoKKwkJcHJpbnRrKEtFUk5fQ09OVCAiKEFDUEkgTlZTKSIpOworCQlicmVhazsKKwljYXNlIEU4MjBfVU5VU0FCTEU6CisJCXByaW50ayhLRVJOX0NPTlQgIih1bnVzYWJsZSkiKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fQ09OVCAidHlwZSAldSIsIHR5cGUpOworCQlicmVhazsKKwl9CiB9CiAKIHZvaWQgX19pbml0IGU4MjBfcHJpbnRfbWFwKGNoYXIgKndobykKQEAgLTEzNCwyNyArMTY1LDggQEAKIAkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIGU4MjAubWFwW2ldLmFkZHIsCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKQogCQkgICAgICAgKGU4MjAubWFwW2ldLmFkZHIgKyBlODIwLm1hcFtpXS5zaXplKSk7Ci0JCXN3aXRjaCAoZTgyMC5tYXBbaV0udHlwZSkgewotCQljYXNlIEU4MjBfUkFNOgotCQljYXNlIEU4MjBfUkVTRVJWRURfS0VSTjoKLQkJCXByaW50ayhLRVJOX0NPTlQgIih1c2FibGUpXG4iKTsKLQkJCWJyZWFrOwotCQljYXNlIEU4MjBfUkVTRVJWRUQ6Ci0JCQlwcmludGsoS0VSTl9DT05UICIocmVzZXJ2ZWQpXG4iKTsKLQkJCWJyZWFrOwotCQljYXNlIEU4MjBfQUNQSToKLQkJCXByaW50ayhLRVJOX0NPTlQgIihBQ1BJIGRhdGEpXG4iKTsKLQkJCWJyZWFrOwotCQljYXNlIEU4MjBfTlZTOgotCQkJcHJpbnRrKEtFUk5fQ09OVCAiKEFDUEkgTlZTKVxuIik7Ci0JCQlicmVhazsKLQkJY2FzZSBFODIwX1VOVVNBQkxFOgotCQkJcHJpbnRrKCIodW51c2FibGUpXG4iKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fQ09OVCAidHlwZSAldVxuIiwgZTgyMC5tYXBbaV0udHlwZSk7Ci0JCQlicmVhazsKLQkJfQorCQllODIwX3ByaW50X3R5cGUoZTgyMC5tYXBbaV0udHlwZSk7CisJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CiAJfQogfQogCkBAIC0yMjEsNyArMjMzLDcgQEAKICAqLwogCiBpbnQgX19pbml0IHNhbml0aXplX2U4MjBfbWFwKHN0cnVjdCBlODIwZW50cnkgKmJpb3NtYXAsIGludCBtYXhfbnJfbWFwLAotCQkJCWludCAqcG5yX21hcCkKKwkJCSAgICAgdTMyICpwbnJfbWFwKQogewogCXN0cnVjdCBjaGFuZ2VfbWVtYmVyIHsKIAkJc3RydWN0IGU4MjBlbnRyeSAqcGJpb3M7IC8qIHBvaW50ZXIgdG8gb3JpZ2luYWwgYmlvcyBlbnRyeSAqLwpAQCAtNDE3LDExICs0MjksMTIgQEAKIAlyZXR1cm4gX19hcHBlbmRfZTgyMF9tYXAoYmlvc21hcCwgbnJfbWFwKTsKIH0KIAotc3RhdGljIHU2NCBfX2luaXQgZTgyMF91cGRhdGVfcmFuZ2VfbWFwKHN0cnVjdCBlODIwbWFwICplODIweCwgdTY0IHN0YXJ0LAorc3RhdGljIHU2NCBfX2luaXQgX19lODIwX3VwZGF0ZV9yYW5nZShzdHJ1Y3QgZTgyMG1hcCAqZTgyMHgsIHU2NCBzdGFydCwKIAkJCQkJdTY0IHNpemUsIHVuc2lnbmVkIG9sZF90eXBlLAogCQkJCQl1bnNpZ25lZCBuZXdfdHlwZSkKIHsKLQlpbnQgaTsKKwl1NjQgZW5kOworCXVuc2lnbmVkIGludCBpOwogCXU2NCByZWFsX3VwZGF0ZWRfc2l6ZSA9IDA7CiAKIAlCVUdfT04ob2xkX3R5cGUgPT0gbmV3X3R5cGUpOwpAQCAtNDI5LDI3ICs0NDIsNTUgQEAKIAlpZiAoc2l6ZSA+IChVTExPTkdfTUFYIC0gc3RhcnQpKQogCQlzaXplID0gVUxMT05HX01BWCAtIHN0YXJ0OwogCi0JZm9yIChpID0gMDsgaSA8IGU4MjAubnJfbWFwOyBpKyspIHsKKwllbmQgPSBzdGFydCArIHNpemU7CisJcHJpbnRrKEtFUk5fREVCVUcgImU4MjAgdXBkYXRlIHJhbmdlOiAlMDE2THggLSAlMDE2THggIiwKKwkJICAgICAgICh1bnNpZ25lZCBsb25nIGxvbmcpIHN0YXJ0LAorCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZykgZW5kKTsKKwllODIwX3ByaW50X3R5cGUob2xkX3R5cGUpOworCXByaW50ayhLRVJOX0NPTlQgIiA9PT4gIik7CisJZTgyMF9wcmludF90eXBlKG5ld190eXBlKTsKKwlwcmludGsoS0VSTl9DT05UICJcbiIpOworCisJZm9yIChpID0gMDsgaSA8IGU4MjB4LT5ucl9tYXA7IGkrKykgewogCQlzdHJ1Y3QgZTgyMGVudHJ5ICplaSA9ICZlODIweC0+bWFwW2ldOwogCQl1NjQgZmluYWxfc3RhcnQsIGZpbmFsX2VuZDsKKwkJdTY0IGVpX2VuZDsKKwogCQlpZiAoZWktPnR5cGUgIT0gb2xkX3R5cGUpCiAJCQljb250aW51ZTsKLQkJLyogdG90YWxseSBjb3ZlcmVkPyAqLwotCQlpZiAoZWktPmFkZHIgPj0gc3RhcnQgJiYKLQkJICAgIChlaS0+YWRkciArIGVpLT5zaXplKSA8PSAoc3RhcnQgKyBzaXplKSkgeworCisJCWVpX2VuZCA9IGVpLT5hZGRyICsgZWktPnNpemU7CisJCS8qIHRvdGFsbHkgY292ZXJlZCBieSBuZXcgcmFuZ2U/ICovCisJCWlmIChlaS0+YWRkciA+PSBzdGFydCAmJiBlaV9lbmQgPD0gZW5kKSB7CiAJCQllaS0+dHlwZSA9IG5ld190eXBlOwogCQkJcmVhbF91cGRhdGVkX3NpemUgKz0gZWktPnNpemU7CiAJCQljb250aW51ZTsKIAkJfQorCisJCS8qIG5ldyByYW5nZSBpcyB0b3RhbGx5IGNvdmVyZWQ/ICovCisJCWlmIChlaS0+YWRkciA8IHN0YXJ0ICYmIGVpX2VuZCA+IGVuZCkgeworCQkJX19lODIwX2FkZF9yZWdpb24oZTgyMHgsIHN0YXJ0LCBzaXplLCBuZXdfdHlwZSk7CisJCQlfX2U4MjBfYWRkX3JlZ2lvbihlODIweCwgZW5kLCBlaV9lbmQgLSBlbmQsIGVpLT50eXBlKTsKKwkJCWVpLT5zaXplID0gc3RhcnQgLSBlaS0+YWRkcjsKKwkJCXJlYWxfdXBkYXRlZF9zaXplICs9IHNpemU7CisJCQljb250aW51ZTsKKwkJfQorCiAJCS8qIHBhcnRpYWxseSBjb3ZlcmVkICovCiAJCWZpbmFsX3N0YXJ0ID0gbWF4KHN0YXJ0LCBlaS0+YWRkcik7Ci0JCWZpbmFsX2VuZCA9IG1pbihzdGFydCArIHNpemUsIGVpLT5hZGRyICsgZWktPnNpemUpOworCQlmaW5hbF9lbmQgPSBtaW4oZW5kLCBlaV9lbmQpOwogCQlpZiAoZmluYWxfc3RhcnQgPj0gZmluYWxfZW5kKQogCQkJY29udGludWU7Ci0JCWU4MjBfYWRkX3JlZ2lvbihmaW5hbF9zdGFydCwgZmluYWxfZW5kIC0gZmluYWxfc3RhcnQsCi0JCQkJCSBuZXdfdHlwZSk7CisKKwkJX19lODIwX2FkZF9yZWdpb24oZTgyMHgsIGZpbmFsX3N0YXJ0LCBmaW5hbF9lbmQgLSBmaW5hbF9zdGFydCwKKwkJCQkgIG5ld190eXBlKTsKKwogCQlyZWFsX3VwZGF0ZWRfc2l6ZSArPSBmaW5hbF9lbmQgLSBmaW5hbF9zdGFydDsKIAorCQkvKgorCQkgKiBsZWZ0IHJhbmdlIGNvdWxkIGJlIGhlYWQgb3IgdGFpbCwgc28gbmVlZCB0byB1cGRhdGUKKwkJICogc2l6ZSBhdCBmaXJzdC4KKwkJICovCiAJCWVpLT5zaXplIC09IGZpbmFsX2VuZCAtIGZpbmFsX3N0YXJ0OwogCQlpZiAoZWktPmFkZHIgPCBmaW5hbF9zdGFydCkKIAkJCWNvbnRpbnVlOwpAQCAtNDYxLDEzICs1MDIsMTMgQEAKIHU2NCBfX2luaXQgZTgyMF91cGRhdGVfcmFuZ2UodTY0IHN0YXJ0LCB1NjQgc2l6ZSwgdW5zaWduZWQgb2xkX3R5cGUsCiAJCQkgICAgIHVuc2lnbmVkIG5ld190eXBlKQogewotCXJldHVybiBlODIwX3VwZGF0ZV9yYW5nZV9tYXAoJmU4MjAsIHN0YXJ0LCBzaXplLCBvbGRfdHlwZSwgbmV3X3R5cGUpOworCXJldHVybiBfX2U4MjBfdXBkYXRlX3JhbmdlKCZlODIwLCBzdGFydCwgc2l6ZSwgb2xkX3R5cGUsIG5ld190eXBlKTsKIH0KIAogc3RhdGljIHU2NCBfX2luaXQgZTgyMF91cGRhdGVfcmFuZ2Vfc2F2ZWQodTY0IHN0YXJ0LCB1NjQgc2l6ZSwKIAkJCQkJICB1bnNpZ25lZCBvbGRfdHlwZSwgdW5zaWduZWQgbmV3X3R5cGUpCiB7Ci0JcmV0dXJuIGU4MjBfdXBkYXRlX3JhbmdlX21hcCgmZTgyMF9zYXZlZCwgc3RhcnQsIHNpemUsIG9sZF90eXBlLAorCXJldHVybiBfX2U4MjBfdXBkYXRlX3JhbmdlKCZlODIwX3NhdmVkLCBzdGFydCwgc2l6ZSwgb2xkX3R5cGUsCiAJCQkJICAgICBuZXdfdHlwZSk7CiB9CiAKQEAgLTUxMSw3ICs1NTIsNyBAQAogCiB2b2lkIF9faW5pdCB1cGRhdGVfZTgyMCh2b2lkKQogewotCWludCBucl9tYXA7CisJdTMyIG5yX21hcDsKIAogCW5yX21hcCA9IGU4MjAubnJfbWFwOwogCWlmIChzYW5pdGl6ZV9lODIwX21hcChlODIwLm1hcCwgQVJSQVlfU0laRShlODIwLm1hcCksICZucl9tYXApKQpAQCAtNTIyLDcgKzU2Myw3IEBACiB9CiBzdGF0aWMgdm9pZCBfX2luaXQgdXBkYXRlX2U4MjBfc2F2ZWQodm9pZCkKIHsKLQlpbnQgbnJfbWFwOworCXUzMiBucl9tYXA7CiAKIAlucl9tYXAgPSBlODIwX3NhdmVkLm5yX21hcDsKIAlpZiAoc2FuaXRpemVfZTgyMF9tYXAoZTgyMF9zYXZlZC5tYXAsIEFSUkFZX1NJWkUoZTgyMF9zYXZlZC5tYXApLCAmbnJfbWFwKSkKQEAgLTEwMjAsOCArMTA2MSw4IEBACiAJCQljb250aW51ZTsKIAkJcmV0dXJuIGFkZHI7CiAJfQotCXJldHVybiAtMVVMOwogCisJcmV0dXJuIC0xVUxMOwogfQogCiAvKgpAQCAtMTAzNCwxMyArMTA3NSwyMiBAQAogCXU2NCBzdGFydDsKIAogCXN0YXJ0ID0gc3RhcnR0OwotCXdoaWxlIChzaXplIDwgc2l6ZXQpCisJd2hpbGUgKHNpemUgPCBzaXpldCAmJiAoc3RhcnQgKyAxKSkKIAkJc3RhcnQgPSBmaW5kX2U4MjBfYXJlYV9zaXplKHN0YXJ0LCAmc2l6ZSwgYWxpZ24pOwogCiAJaWYgKHNpemUgPCBzaXpldCkKIAkJcmV0dXJuIDA7CiAKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJaWYgKHN0YXJ0ID49IE1BWE1FTSkKKwkJcmV0dXJuIDA7CisJaWYgKHN0YXJ0ICsgc2l6ZSA+IE1BWE1FTSkKKwkJc2l6ZSA9IE1BWE1FTSAtIHN0YXJ0OworI2VuZGlmCisKIAlhZGRyID0gcm91bmRfZG93bihzdGFydCArIHNpemUgLSBzaXpldCwgYWxpZ24pOworCWlmIChhZGRyIDwgc3RhcnQpCisJCXJldHVybiAwOwogCWU4MjBfdXBkYXRlX3JhbmdlKGFkZHIsIHNpemV0LCBFODIwX1JBTSwgRTgyMF9SRVNFUlZFRCk7CiAJZTgyMF91cGRhdGVfcmFuZ2Vfc2F2ZWQoYWRkciwgc2l6ZXQsIEU4MjBfUkFNLCBFODIwX1JFU0VSVkVEKTsKIAlwcmludGsoS0VSTl9JTkZPICJ1cGRhdGUgZTgyMCBmb3IgZWFybHlfcmVzZXJ2ZV9lODIwXG4iKTsKQEAgLTEyNTMsNyArMTMwMyw3IEBACiB2b2lkIF9faW5pdCBmaW5pc2hfZTgyMF9wYXJzaW5nKHZvaWQpCiB7CiAJaWYgKHVzZXJkZWYpIHsKLQkJaW50IG5yID0gZTgyMC5ucl9tYXA7CisJCXUzMiBuciA9IGU4MjAubnJfbWFwOwogCiAJCWlmIChzYW5pdGl6ZV9lODIwX21hcChlODIwLm1hcCwgQVJSQVlfU0laRShlODIwLm1hcCksICZucikgPCAwKQogCQkJZWFybHlfcGFuaWMoIkludmFsaWQgdXNlciBzdXBwbGllZCBtZW1vcnkgbWFwIik7CkBAIC0xMzM2LDcgKzEzODYsNyBAQAogY2hhciAqX19pbml0IGRlZmF1bHRfbWFjaGluZV9zcGVjaWZpY19tZW1vcnlfc2V0dXAodm9pZCkKIHsKIAljaGFyICp3aG8gPSAiQklPUy1lODIwIjsKLQlpbnQgbmV3X25yOworCXUzMiBuZXdfbnI7CiAJLyoKIAkgKiBUcnkgdG8gY29weSB0aGUgQklPUy1zdXBwbGllZCBFODIwLW1hcC4KIAkgKgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jIGIvYXJjaC94ODYva2VybmVsL2Vhcmx5X3ByaW50ay5jCmluZGV4IDYzOWFkOTguLjMzNWYwNDkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lYXJseV9wcmludGsuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvZWFybHlfcHJpbnRrLmMKQEAgLTI1MCw3ICsyNTAsNyBAQAogCXJldHVybiAoY3RybCAmIERCR1BfRVJST1IpID8gLURCR1BfRVJSQ09ERShjdHJsKSA6IERCR1BfTEVOKGN0cmwpOwogfQogCi1zdGF0aWMgdm9pZCBkYmdwX21kZWxheShpbnQgbXMpCitzdGF0aWMgdm9pZCBfX2luaXQgZGJncF9tZGVsYXkoaW50IG1zKQogewogCWludCBpOwogCkBAIC0zMTEsNyArMzExLDcgQEAKIAl3cml0ZWwoaGksICZlaGNpX2RlYnVnLT5kYXRhNDcpOwogfQogCi1zdGF0aWMgdm9pZCBkYmdwX2dldF9kYXRhKHZvaWQgKmJ1ZiwgaW50IHNpemUpCitzdGF0aWMgdm9pZCBfX2luaXQgZGJncF9nZXRfZGF0YSh2b2lkICpidWYsIGludCBzaXplKQogewogCXVuc2lnbmVkIGNoYXIgKmJ5dGVzID0gYnVmOwogCXUzMiBsbywgaGk7CkBAIC0zNTUsNyArMzU1LDcgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGRiZ3BfYnVsa19yZWFkKHVuc2lnbmVkIGRldm51bSwgdW5zaWduZWQgZW5kcG9pbnQsIHZvaWQgKmRhdGEsCitzdGF0aWMgaW50IF9faW5pdCBkYmdwX2J1bGtfcmVhZCh1bnNpZ25lZCBkZXZudW0sIHVuc2lnbmVkIGVuZHBvaW50LCB2b2lkICpkYXRhLAogCQkJCSBpbnQgc2l6ZSkKIHsKIAl1MzIgcGlkcywgYWRkciwgY3RybDsKQEAgLTM4Niw4ICszODYsOCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgZGJncF9jb250cm9sX21zZyh1bnNpZ25lZCBkZXZudW0sIGludCByZXF1ZXN0dHlwZSwgaW50IHJlcXVlc3QsCi0JaW50IHZhbHVlLCBpbnQgaW5kZXgsIHZvaWQgKmRhdGEsIGludCBzaXplKQorc3RhdGljIGludCBfX2luaXQgZGJncF9jb250cm9sX21zZyh1bnNpZ25lZCBkZXZudW0sIGludCByZXF1ZXN0dHlwZSwKKwlpbnQgcmVxdWVzdCwgaW50IHZhbHVlLCBpbnQgaW5kZXgsIHZvaWQgKmRhdGEsIGludCBzaXplKQogewogCXUzMiBwaWRzLCBhZGRyLCBjdHJsOwogCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgcmVxOwpAQCAtNDg5LDcgKzQ4OSw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZWhjaV9yZXNldF9wb3J0KGludCBwb3J0KQorc3RhdGljIGludCBfX2luaXQgZWhjaV9yZXNldF9wb3J0KGludCBwb3J0KQogewogCXUzMiBwb3J0c2M7CiAJdTMyIGRlbGF5X3RpbWUsIGRlbGF5OwpAQCAtNTMyLDcgKzUzMiw3IEBACiAJcmV0dXJuIC1FQlVTWTsKIH0KIAotc3RhdGljIGludCBlaGNpX3dhaXRfZm9yX3BvcnQoaW50IHBvcnQpCitzdGF0aWMgaW50IF9faW5pdCBlaGNpX3dhaXRfZm9yX3BvcnQoaW50IHBvcnQpCiB7CiAJdTMyIHN0YXR1czsKIAlpbnQgcmV0LCByZXBzOwpAQCAtNTU3LDEzICs1NTcsMTMgQEAKIAogdHlwZWRlZiB2b2lkICgqc2V0X2RlYnVnX3BvcnRfdCkoaW50IHBvcnQpOwogCi1zdGF0aWMgdm9pZCBkZWZhdWx0X3NldF9kZWJ1Z19wb3J0KGludCBwb3J0KQorc3RhdGljIHZvaWQgX19pbml0IGRlZmF1bHRfc2V0X2RlYnVnX3BvcnQoaW50IHBvcnQpCiB7CiB9CiAKLXN0YXRpYyBzZXRfZGVidWdfcG9ydF90IHNldF9kZWJ1Z19wb3J0ID0gZGVmYXVsdF9zZXRfZGVidWdfcG9ydDsKK3N0YXRpYyBzZXRfZGVidWdfcG9ydF90IF9faW5pdGRhdGEgc2V0X2RlYnVnX3BvcnQgPSBkZWZhdWx0X3NldF9kZWJ1Z19wb3J0OwogCi1zdGF0aWMgdm9pZCBudmlkaWFfc2V0X2RlYnVnX3BvcnQoaW50IHBvcnQpCitzdGF0aWMgdm9pZCBfX2luaXQgbnZpZGlhX3NldF9kZWJ1Z19wb3J0KGludCBwb3J0KQogewogCXUzMiBkd29yZDsKIAlkd29yZCA9IHJlYWRfcGNpX2NvbmZpZyhlaGNpX2Rldi5idXMsIGVoY2lfZGV2LnNsb3QsIGVoY2lfZGV2LmZ1bmMsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCmluZGV4IDg5OWU4OTMuLmM5MjlhZGQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV8zMi5TCkBAIC00NDIsOCArNDQyLDcgQEAKIAogCUdFVF9USFJFQURfSU5GTyglZWJwKQogCi0JLyogTm90ZSwgX1RJRl9TRUNDT01QIGlzIGJpdCBudW1iZXIgOCwgYW5kIHNvIGl0IG5lZWRzIHRlc3R3IGFuZCBub3QgdGVzdGIgKi8KLQl0ZXN0dyAkX1RJRl9XT1JLX1NZU0NBTExfRU5UUlksVElfZmxhZ3MoJWVicCkKKwl0ZXN0bCAkX1RJRl9XT1JLX1NZU0NBTExfRU5UUlksVElfZmxhZ3MoJWVicCkKIAlqbnogc3lzZW50ZXJfYXVkaXQKIHN5c2VudGVyX2RvX2NhbGw6CiAJY21wbCAkKG5yX3N5c2NhbGxzKSwgJWVheApAQCAtNDU0LDcgKzQ1Myw3IEBACiAJRElTQUJMRV9JTlRFUlJVUFRTKENMQlJfQU5ZKQogCVRSQUNFX0lSUVNfT0ZGCiAJbW92bCBUSV9mbGFncyglZWJwKSwgJWVjeAotCXRlc3R3ICRfVElGX0FMTFdPUktfTUFTSywgJWN4CisJdGVzdGwgJF9USUZfQUxMV09SS19NQVNLLCAlZWN4CiAJam5lIHN5c2V4aXRfYXVkaXQKIHN5c2VudGVyX2V4aXQ6CiAvKiBpZiBzb21ldGhpbmcgbW9kaWZpZXMgcmVnaXN0ZXJzIGl0IG11c3QgYWxzbyBkaXNhYmxlIHN5c2V4aXQgKi8KQEAgLTQ2OCw3ICs0NjcsNyBAQAogCiAjaWZkZWYgQ09ORklHX0FVRElUU1lTQ0FMTAogc3lzZW50ZXJfYXVkaXQ6Ci0JdGVzdHcgJChfVElGX1dPUktfU1lTQ0FMTF9FTlRSWSAmIH5fVElGX1NZU0NBTExfQVVESVQpLFRJX2ZsYWdzKCVlYnApCisJdGVzdGwgJChfVElGX1dPUktfU1lTQ0FMTF9FTlRSWSAmIH5fVElGX1NZU0NBTExfQVVESVQpLFRJX2ZsYWdzKCVlYnApCiAJam56IHN5c2NhbGxfdHJhY2VfZW50cnkKIAlhZGRsICQ0LCVlc3AKIAlDRklfQURKVVNUX0NGQV9PRkZTRVQgLTQKQEAgLTQ4NSw3ICs0ODQsNyBAQAogCWptcCBzeXNlbnRlcl9kb19jYWxsCiAKIHN5c2V4aXRfYXVkaXQ6Ci0JdGVzdHcgJChfVElGX0FMTFdPUktfTUFTSyAmIH5fVElGX1NZU0NBTExfQVVESVQpLCAlY3gKKwl0ZXN0bCAkKF9USUZfQUxMV09SS19NQVNLICYgfl9USUZfU1lTQ0FMTF9BVURJVCksICVlY3gKIAlqbmUgc3lzY2FsbF9leGl0X3dvcmsKIAlUUkFDRV9JUlFTX09OCiAJRU5BQkxFX0lOVEVSUlVQVFMoQ0xCUl9BTlkpCkBAIC00OTgsNyArNDk3LDcgQEAKIAlESVNBQkxFX0lOVEVSUlVQVFMoQ0xCUl9BTlkpCiAJVFJBQ0VfSVJRU19PRkYKIAltb3ZsIFRJX2ZsYWdzKCVlYnApLCAlZWN4Ci0JdGVzdHcgJChfVElGX0FMTFdPUktfTUFTSyAmIH5fVElGX1NZU0NBTExfQVVESVQpLCAlY3gKKwl0ZXN0bCAkKF9USUZfQUxMV09SS19NQVNLICYgfl9USUZfU1lTQ0FMTF9BVURJVCksICVlY3gKIAlqbmUgc3lzY2FsbF9leGl0X3dvcmsKIAltb3ZsIFBUX0VBWCglZXNwKSwlZWF4CS8qIHJlbG9hZCBzeXNjYWxsIHJldHVybiB2YWx1ZSAqLwogCWptcCBzeXNlbnRlcl9leGl0CkBAIC01MjMsOCArNTIyLDcgQEAKIAlTQVZFX0FMTAogCUdFVF9USFJFQURfSU5GTyglZWJwKQogCQkJCQkjIHN5c3RlbSBjYWxsIHRyYWNpbmcgaW4gb3BlcmF0aW9uIC8gZW11bGF0aW9uCi0JLyogTm90ZSwgX1RJRl9TRUNDT01QIGlzIGJpdCBudW1iZXIgOCwgYW5kIHNvIGl0IG5lZWRzIHRlc3R3IGFuZCBub3QgdGVzdGIgKi8KLQl0ZXN0dyAkX1RJRl9XT1JLX1NZU0NBTExfRU5UUlksVElfZmxhZ3MoJWVicCkKKwl0ZXN0bCAkX1RJRl9XT1JLX1NZU0NBTExfRU5UUlksVElfZmxhZ3MoJWVicCkKIAlqbnogc3lzY2FsbF90cmFjZV9lbnRyeQogCWNtcGwgJChucl9zeXNjYWxscyksICVlYXgKIAlqYWUgc3lzY2FsbF9iYWRzeXMKQEAgLTUzOCw3ICs1MzYsNyBAQAogCQkJCQkjIGJldHdlZW4gc2FtcGxpbmcgYW5kIHRoZSBpcmV0CiAJVFJBQ0VfSVJRU19PRkYKIAltb3ZsIFRJX2ZsYWdzKCVlYnApLCAlZWN4Ci0JdGVzdHcgJF9USUZfQUxMV09SS19NQVNLLCAlY3gJIyBjdXJyZW50LT53b3JrCisJdGVzdGwgJF9USUZfQUxMV09SS19NQVNLLCAlZWN4CSMgY3VycmVudC0+d29yawogCWpuZSBzeXNjYWxsX2V4aXRfd29yawogCiByZXN0b3JlX2FsbDoKQEAgLTY3Myw3ICs2NzEsNyBAQAogCSMgcGVyZm9ybSBzeXNjYWxsIGV4aXQgdHJhY2luZwogCUFMSUdOCiBzeXNjYWxsX2V4aXRfd29yazoKLQl0ZXN0YiAkX1RJRl9XT1JLX1NZU0NBTExfRVhJVCwgJWNsCisJdGVzdGwgJF9USUZfV09SS19TWVNDQUxMX0VYSVQsICVlY3gKIAlqeiB3b3JrX3BlbmRpbmcKIAlUUkFDRV9JUlFTX09OCiAJRU5BQkxFX0lOVEVSUlVQVFMoQ0xCUl9BTlkpCSMgY291bGQgbGV0IHN5c2NhbGxfdHJhY2VfbGVhdmUoKSBjYWxsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZW50cnlfNjQuUyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TCmluZGV4IDgzZDE4MzYuLmEzMzFlYzMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9lbnRyeV82NC5TCkBAIC0zNjgsNiArMzY4LDcgQEAKIEVORChzYXZlX3Jlc3QpCiAKIC8qIHNhdmUgY29tcGxldGUgc3RhY2sgZnJhbWUgKi8KKwkucHVzaHNlY3Rpb24gLmtwcm9iZXMudGV4dCwgImF4IgogRU5UUlkoc2F2ZV9wYXJhbm9pZCkKIAlYQ1BUX0ZSQU1FIDEgUkRJKzgKIAljbGQKQEAgLTM5Niw2ICszOTcsNyBAQAogMToJcmV0CiAJQ0ZJX0VORFBST0MKIEVORChzYXZlX3BhcmFub2lkKQorCS5wb3BzZWN0aW9uCiAKIC8qCiAgKiBBIG5ld2x5IGZvcmtlZCBwcm9jZXNzIGRpcmVjdGx5IGNvbnRleHQgc3dpdGNoZXMgaW50byB0aGlzIGFkZHJlc3MuCkBAIC00MTYsNyArNDE4LDYgQEAKIAogCUdFVF9USFJFQURfSU5GTyglcmN4KQogCi0JQ0ZJX1JFTUVNQkVSX1NUQVRFCiAJUkVTVE9SRV9SRVNUCiAKIAl0ZXN0bCAkMywgQ1MtQVJHT0ZGU0VUKCVyc3ApCQkjIGZyb20ga2VybmVsX3RocmVhZD8KQEAgLTQyOCw3ICs0MjksNiBAQAogCVJFU1RPUkVfVE9QX09GX1NUQUNLICVyZGksIC1BUkdPRkZTRVQKIAlqbXAgcmV0X2Zyb21fc3lzX2NhbGwJCQkjIGdvIHRvIHRoZSBTWVNSRVQgZmFzdHBhdGgKIAotCUNGSV9SRVNUT1JFX1NUQVRFCiAJQ0ZJX0VORFBST0MKIEVORChyZXRfZnJvbV9mb3JrKQogCkBAIC05ODQsNiArOTg0LDggQEAKICNlbmRpZgogYXBpY2ludGVycnVwdCBMT0NBTF9USU1FUl9WRUNUT1IgXAogCWFwaWNfdGltZXJfaW50ZXJydXB0IHNtcF9hcGljX3RpbWVyX2ludGVycnVwdAorYXBpY2ludGVycnVwdCBHRU5FUklDX0lOVEVSUlVQVF9WRUNUT1IgXAorCWdlbmVyaWNfaW50ZXJydXB0IHNtcF9nZW5lcmljX2ludGVycnVwdAogCiAjaWZkZWYgQ09ORklHX1NNUAogYXBpY2ludGVycnVwdCBJTlZBTElEQVRFX1RMQl9WRUNUT1JfU1RBUlQrMCBcCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMKaW5kZXggMjMxYmRkMy4uNzZmNzE0MSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9mdHJhY2UuYwpAQCAtMzg5LDc5ICszODksNiBAQAogCiAjZW5kaWYgLyogIUNPTkZJR19EWU5BTUlDX0ZUUkFDRSAqLwogCi0vKiBBZGQgYSBmdW5jdGlvbiByZXR1cm4gYWRkcmVzcyB0byB0aGUgdHJhY2Ugc3RhY2sgb24gdGhyZWFkIGluZm8uKi8KLXN0YXRpYyBpbnQgcHVzaF9yZXR1cm5fdHJhY2UodW5zaWduZWQgbG9uZyByZXQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lLAotCQkJCXVuc2lnbmVkIGxvbmcgZnVuYywgaW50ICpkZXB0aCkKLXsKLQlpbnQgaW5kZXg7Ci0KLQlpZiAoIWN1cnJlbnQtPnJldF9zdGFjaykKLQkJcmV0dXJuIC1FQlVTWTsKLQotCS8qIFRoZSByZXR1cm4gdHJhY2Ugc3RhY2sgaXMgZnVsbCAqLwotCWlmIChjdXJyZW50LT5jdXJyX3JldF9zdGFjayA9PSBGVFJBQ0VfUkVURlVOQ19ERVBUSCAtIDEpIHsKLQkJYXRvbWljX2luYygmY3VycmVudC0+dHJhY2Vfb3ZlcnJ1bik7Ci0JCXJldHVybiAtRUJVU1k7Ci0JfQotCi0JaW5kZXggPSArK2N1cnJlbnQtPmN1cnJfcmV0X3N0YWNrOwotCWJhcnJpZXIoKTsKLQljdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLnJldCA9IHJldDsKLQljdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLmZ1bmMgPSBmdW5jOwotCWN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0uY2FsbHRpbWUgPSB0aW1lOwotCSpkZXB0aCA9IGluZGV4OwotCi0JcmV0dXJuIDA7Ci19Ci0KLS8qIFJldHJpZXZlIGEgZnVuY3Rpb24gcmV0dXJuIGFkZHJlc3MgdG8gdGhlIHRyYWNlIHN0YWNrIG9uIHRocmVhZCBpbmZvLiovCi1zdGF0aWMgdm9pZCBwb3BfcmV0dXJuX3RyYWNlKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSwgdW5zaWduZWQgbG9uZyAqcmV0KQotewotCWludCBpbmRleDsKLQotCWluZGV4ID0gY3VycmVudC0+Y3Vycl9yZXRfc3RhY2s7Ci0KLQlpZiAodW5saWtlbHkoaW5kZXggPCAwKSkgewotCQlmdHJhY2VfZ3JhcGhfc3RvcCgpOwotCQlXQVJOX09OKDEpOwotCQkvKiBNaWdodCBhcyB3ZWxsIHBhbmljLCBvdGhlcndpc2Ugd2UgaGF2ZSBubyB3aGVyZSB0byBnbyAqLwotCQkqcmV0ID0gKHVuc2lnbmVkIGxvbmcpcGFuaWM7Ci0JCXJldHVybjsKLQl9Ci0KLQkqcmV0ID0gY3VycmVudC0+cmV0X3N0YWNrW2luZGV4XS5yZXQ7Ci0JdHJhY2UtPmZ1bmMgPSBjdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLmZ1bmM7Ci0JdHJhY2UtPmNhbGx0aW1lID0gY3VycmVudC0+cmV0X3N0YWNrW2luZGV4XS5jYWxsdGltZTsKLQl0cmFjZS0+b3ZlcnJ1biA9IGF0b21pY19yZWFkKCZjdXJyZW50LT50cmFjZV9vdmVycnVuKTsKLQl0cmFjZS0+ZGVwdGggPSBpbmRleDsKLQliYXJyaWVyKCk7Ci0JY3VycmVudC0+Y3Vycl9yZXRfc3RhY2stLTsKLQotfQotCi0vKgotICogU2VuZCB0aGUgdHJhY2UgdG8gdGhlIHJpbmctYnVmZmVyLgotICogQHJldHVybiB0aGUgb3JpZ2luYWwgcmV0dXJuIGFkZHJlc3MuCi0gKi8KLXVuc2lnbmVkIGxvbmcgZnRyYWNlX3JldHVybl90b19oYW5kbGVyKHZvaWQpCi17Ci0Jc3RydWN0IGZ0cmFjZV9ncmFwaF9yZXQgdHJhY2U7Ci0JdW5zaWduZWQgbG9uZyByZXQ7Ci0KLQlwb3BfcmV0dXJuX3RyYWNlKCZ0cmFjZSwgJnJldCk7Ci0JdHJhY2UucmV0dGltZSA9IGNwdV9jbG9jayhyYXdfc21wX3Byb2Nlc3Nvcl9pZCgpKTsKLQlmdHJhY2VfZ3JhcGhfcmV0dXJuKCZ0cmFjZSk7Ci0KLQlpZiAodW5saWtlbHkoIXJldCkpIHsKLQkJZnRyYWNlX2dyYXBoX3N0b3AoKTsKLQkJV0FSTl9PTigxKTsKLQkJLyogTWlnaHQgYXMgd2VsbCBwYW5pYy4gV2hhdCBlbHNlIHRvIGRvPyAqLwotCQlyZXQgPSAodW5zaWduZWQgbG9uZylwYW5pYzsKLQl9Ci0KLQlyZXR1cm4gcmV0OwotfQotCiAvKgogICogSG9vayB0aGUgcmV0dXJuIGFkZHJlc3MgYW5kIHB1c2ggaXQgaW4gdGhlIHN0YWNrIG9mIHJldHVybiBhZGRycwogICogaW4gY3VycmVudCB0aHJlYWQgaW5mby4KQEAgLTUyMSw3ICs0NDgsNyBAQAogCiAJY2FsbHRpbWUgPSBjcHVfY2xvY2socmF3X3NtcF9wcm9jZXNzb3JfaWQoKSk7CiAKLQlpZiAocHVzaF9yZXR1cm5fdHJhY2Uob2xkLCBjYWxsdGltZSwKKwlpZiAoZnRyYWNlX3B1c2hfcmV0dXJuX3RyYWNlKG9sZCwgY2FsbHRpbWUsCiAJCQkJc2VsZl9hZGRyLCAmdHJhY2UuZGVwdGgpID09IC1FQlVTWSkgewogCQkqcGFyZW50ID0gb2xkOwogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZDMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZDMyLmMKaW5kZXggYWMxMDhkMS4uM2Y4NTc5ZiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2hlYWQzMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkMzIuYwpAQCAtMTgsNyArMTgsNyBAQAogewogCXJlc2VydmVfdHJhbXBvbGluZV9tZW1vcnkoKTsKIAotCXJlc2VydmVfZWFybHkoX19wYV9zeW1ib2woJl90ZXh0KSwgX19wYV9zeW1ib2woJl9lbmQpLCAiVEVYVCBEQVRBIEJTUyIpOworCXJlc2VydmVfZWFybHkoX19wYV9zeW1ib2woJl90ZXh0KSwgX19wYV9zeW1ib2woJl9fYnNzX3N0b3ApLCAiVEVYVCBEQVRBIEJTUyIpOwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECiAJLyogUmVzZXJ2ZSBJTklUUkQgKi8KQEAgLTI5LDkgKzI5LDYgQEAKIAkJcmVzZXJ2ZV9lYXJseShyYW1kaXNrX2ltYWdlLCByYW1kaXNrX2VuZCwgIlJBTURJU0siKTsKIAl9CiAjZW5kaWYKLQlyZXNlcnZlX2Vhcmx5KGluaXRfcGdfdGFibGVzX3N0YXJ0LCBpbml0X3BnX3RhYmxlc19lbmQsCi0JCQkiSU5JVF9QR19UQUJMRSIpOwotCiAJcmVzZXJ2ZV9lYmRhX3JlZ2lvbigpOwogCiAJLyoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9oZWFkNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9oZWFkNjQuYwppbmRleCBmNWIyNzIyLi43MGVhYTg1IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaGVhZDY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL2hlYWQ2NC5jCkBAIC0xMDAsNyArMTAwLDcgQEAKIAogCXJlc2VydmVfdHJhbXBvbGluZV9tZW1vcnkoKTsKIAotCXJlc2VydmVfZWFybHkoX19wYV9zeW1ib2woJl90ZXh0KSwgX19wYV9zeW1ib2woJl9lbmQpLCAiVEVYVCBEQVRBIEJTUyIpOworCXJlc2VydmVfZWFybHkoX19wYV9zeW1ib2woJl90ZXh0KSwgX19wYV9zeW1ib2woJl9fYnNzX3N0b3ApLCAiVEVYVCBEQVRBIEJTUyIpOwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECiAJLyogUmVzZXJ2ZSBJTklUUkQgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMgYi9hcmNoL3g4Ni9rZXJuZWwvaGVhZF8zMi5TCmluZGV4IGMzMmNhMTkuLjMwNjgzODggMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9oZWFkXzMyLlMKKysrIGIvYXJjaC94ODYva2VybmVsL2hlYWRfMzIuUwpAQCAtMzgsNDIgKzM4LDQwIEBACiAjZGVmaW5lIFg4Nl9WRU5ET1JfSUQJbmV3X2NwdV9kYXRhK0NQVUlORk9feDg2X3ZlbmRvcl9pZAogCiAvKgotICogVGhpcyBpcyBob3cgbXVjaCBtZW1vcnkgKmluIGFkZGl0aW9uIHRvIHRoZSBtZW1vcnkgY292ZXJlZCB1cCB0bwotICogYW5kIGluY2x1ZGluZyBfZW5kKiB3ZSBuZWVkIG1hcHBlZCBpbml0aWFsbHkuCisgKiBUaGlzIGlzIGhvdyBtdWNoIG1lbW9yeSBpbiBhZGRpdGlvbiB0byB0aGUgbWVtb3J5IGNvdmVyZWQgdXAgdG8KKyAqIGFuZCBpbmNsdWRpbmcgX2VuZCB3ZSBuZWVkIG1hcHBlZCBpbml0aWFsbHkuCiAgKiBXZSBuZWVkOgotICogIC0gb25lIGJpdCBmb3IgZWFjaCBwb3NzaWJsZSBwYWdlLCBidXQgb25seSBpbiBsb3cgbWVtb3J5LCB3aGljaCBtZWFucwotICogICAgIDJeMzIvNDA5Ni84ID0gMTI4SyB3b3JzdCBjYXNlICg0Ry80RyBzcGxpdC4pCi0gKiAgLSBlbm91Z2ggc3BhY2UgdG8gbWFwIGFsbCBsb3cgbWVtb3J5LCB3aGljaCBtZWFucwotICogICAgICgyXjMyLzQwOTYpIC8gMTAyNCBwYWdlcyAod29yc3QgY2FzZSwgbm9uIFBBRSkKLSAqICAgICAoMl4zMi80MDk2KSAvIDUxMiArIDQgcGFnZXMgKHdvcnN0IGNhc2UgZm9yIFBBRSkKLSAqICAtIGEgZmV3IHBhZ2VzIGZvciBhbGxvY2F0b3IgdXNlIGJlZm9yZSB0aGUga2VybmVsIHBhZ2V0YWJsZSBoYXMKLSAqICAgICBiZWVuIHNldCB1cAorICogICAgIChLRVJORUxfSU1BR0VfU0laRS80MDk2KSAvIDEwMjQgcGFnZXMgKHdvcnN0IGNhc2UsIG5vbiBQQUUpCisgKiAgICAgKEtFUk5FTF9JTUFHRV9TSVpFLzQwOTYpIC8gNTEyICsgNCBwYWdlcyAod29yc3QgY2FzZSBmb3IgUEFFKQogICoKICAqIE1vZHVsbyByb3VuZGluZywgZWFjaCBtZWdhYnl0ZSBhc3NpZ25lZCBoZXJlIHJlcXVpcmVzIGEga2lsb2J5dGUgb2YKICAqIG1lbW9yeSwgd2hpY2ggaXMgY3VycmVudGx5IHVucmVjbGFpbWVkLgogICoKICAqIFRoaXMgc2hvdWxkIGJlIGEgbXVsdGlwbGUgb2YgYSBwYWdlLgorICoKKyAqIEtFUk5FTF9JTUFHRV9TSVpFIHNob3VsZCBiZSBncmVhdGVyIHRoYW4gcGEoX2VuZCkKKyAqIGFuZCBzbWFsbCB0aGFuIG1heF9sb3dfcGZuLCBvdGhlcndpc2Ugd2lsbCB3YXN0ZSBzb21lIHBhZ2UgdGFibGUgZW50cmllcwogICovCi1MT1dfUEFHRVMgPSAxPDwoMzItUEFHRV9TSElGVF9hc20pCi0KLS8qCi0gKiBUbyBwcmVzZXJ2ZSB0aGUgRE1BIHBvb2wgaW4gUEFHRUFMTE9DIGtlcm5lbHMsIHdlJ2xsIGFsbG9jYXRlCi0gKiBwYWdldGFibGVzIGZyb20gYWJvdmUgdGhlIDE2TUIgRE1BIGxpbWl0LCBzbyB3ZSdsbCBoYXZlIHRvIHNldAotICogdXAgcGFnZXRhYmxlcyAxNk1CIG1vcmUgKHdvcnN0LWNhc2UpOgotICovCi0jaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQwotTE9XX1BBR0VTID0gTE9XX1BBR0VTICsgMHgxMDAwMDAwCi0jZW5kaWYKIAogI2lmIFBUUlNfUEVSX1BNRCA+IDEKLVBBR0VfVEFCTEVfU0laRSA9IChMT1dfUEFHRVMgLyBQVFJTX1BFUl9QTUQpICsgUFRSU19QRVJfUEdECisjZGVmaW5lIFBBR0VfVEFCTEVfU0laRShwYWdlcykgKCgocGFnZXMpIC8gUFRSU19QRVJfUE1EKSArIFBUUlNfUEVSX1BHRCkKICNlbHNlCi1QQUdFX1RBQkxFX1NJWkUgPSAoTE9XX1BBR0VTIC8gUFRSU19QRVJfUEdEKQorI2RlZmluZSBQQUdFX1RBQkxFX1NJWkUocGFnZXMpICgocGFnZXMpIC8gUFRSU19QRVJfUEdEKQogI2VuZGlmCi1CT09UQklUTUFQX1NJWkUgPSBMT1dfUEFHRVMgLyA4Ci1BTExPQ0FUT1JfU0xPUCA9IDQKIAotSU5JVF9NQVBfQkVZT05EX0VORCA9IEJPT1RCSVRNQVBfU0laRSArIChQQUdFX1RBQkxFX1NJWkUgKyBBTExPQ0FUT1JfU0xPUCkqUEFHRV9TSVpFX2FzbQorLyogRW5vdWdoIHNwYWNlIHRvIGZpdCBwYWdldGFibGVzIGZvciB0aGUgbG93IG1lbW9yeSBsaW5lYXIgbWFwICovCitNQVBQSU5HX0JFWU9ORF9FTkQgPSBcCisJUEFHRV9UQUJMRV9TSVpFKCgoMTw8MzIpIC0gX19QQUdFX09GRlNFVCkgPj4gUEFHRV9TSElGVCkgPDwgUEFHRV9TSElGVAorCisvKgorICogV29yc3QtY2FzZSBzaXplIG9mIHRoZSBrZXJuZWwgbWFwcGluZyB3ZSBuZWVkIHRvIG1ha2U6CisgKiB0aGUgd29yc3QtY2FzZSBzaXplIG9mIHRoZSBrZXJuZWwgaXRzZWxmLCBwbHVzIHRoZSBleHRyYSB3ZSBuZWVkCisgKiB0byBtYXAgZm9yIHRoZSBsaW5lYXIgbWFwLgorICovCitLRVJORUxfUEFHRVMgPSAoS0VSTkVMX0lNQUdFX1NJWkUgKyBNQVBQSU5HX0JFWU9ORF9FTkQpPj5QQUdFX1NISUZUCisKK0lOSVRfTUFQX1NJWkUgPSBQQUdFX1RBQkxFX1NJWkUoS0VSTkVMX1BBR0VTKSAqIFBBR0VfU0laRV9hc20KK1JFU0VSVkVfQlJLKHBhZ2V0YWJsZXMsIElOSVRfTUFQX1NJWkUpCiAKIC8qCiAgKiAzMi1iaXQga2VybmVsIGVudHJ5cG9pbnQ7IG9ubHkgdXNlZCBieSB0aGUgYm9vdCBDUFUuICBPbiBlbnRyeSwKQEAgLTE2NiwxMCArMTY0LDEwIEBACiAKIC8qCiAgKiBJbml0aWFsaXplIHBhZ2UgdGFibGVzLiAgVGhpcyBjcmVhdGVzIGEgUERFIGFuZCBhIHNldCBvZiBwYWdlCi0gKiB0YWJsZXMsIHdoaWNoIGFyZSBsb2NhdGVkIGltbWVkaWF0ZWx5IGJleW9uZCBfZW5kLiAgVGhlIHZhcmlhYmxlCi0gKiBpbml0X3BnX3RhYmxlc19lbmQgaXMgc2V0IHVwIHRvIHBvaW50IHRvIHRoZSBmaXJzdCAic2FmZSIgbG9jYXRpb24uCisgKiB0YWJsZXMsIHdoaWNoIGFyZSBsb2NhdGVkIGltbWVkaWF0ZWx5IGJleW9uZCBfX2Jya19iYXNlLiAgVGhlIHZhcmlhYmxlCisgKiBfYnJrX2VuZCBpcyBzZXQgdXAgdG8gcG9pbnQgdG8gdGhlIGZpcnN0ICJzYWZlIiBsb2NhdGlvbi4KICAqIE1hcHBpbmdzIGFyZSBjcmVhdGVkIGJvdGggYXQgdmlydHVhbCBhZGRyZXNzIDAgKGlkZW50aXR5IG1hcHBpbmcpCi0gKiBhbmQgUEFHRV9PRkZTRVQgZm9yIHVwIHRvIF9lbmQrc2l6ZW9mKHBhZ2UgdGFibGVzKStJTklUX01BUF9CRVlPTkRfRU5ELgorICogYW5kIFBBR0VfT0ZGU0VUIGZvciB1cCB0byBfZW5kLgogICoKICAqIE5vdGUgdGhhdCB0aGUgc3RhY2sgaXMgbm90IHlldCBzZXQgdXAhCiAgKi8KQEAgLTE5MCw4ICsxODgsNyBAQAogCiAJeG9ybCAlZWJ4LCVlYngJCQkJLyogJWVieCBpcyBrZXB0IGF0IHplcm8gKi8KIAotCW1vdmwgJHBhKHBnMCksICVlZGkKLQltb3ZsICVlZGksIHBhKGluaXRfcGdfdGFibGVzX3N0YXJ0KQorCW1vdmwgJHBhKF9fYnJrX2Jhc2UpLCAlZWRpCiAJbW92bCAkcGEoc3dhcHBlcl9wZ19wbWQpLCAlZWR4CiAJbW92bCAkUFRFX0lERU5UX0FUVFIsICVlYXgKIDEwOgpAQCAtMjA5LDE0ICsyMDYsMTQgQEAKIAlsb29wIDExYgogCiAJLyoKLQkgKiBFbmQgY29uZGl0aW9uOiB3ZSBtdXN0IG1hcCB1cCB0byBhbmQgaW5jbHVkaW5nIElOSVRfTUFQX0JFWU9ORF9FTkQKLQkgKiBieXRlcyBiZXlvbmQgdGhlIGVuZCBvZiBvdXIgb3duIHBhZ2UgdGFibGVzLgorCSAqIEVuZCBjb25kaXRpb246IHdlIG11c3QgbWFwIHVwIHRvIHRoZSBlbmQgKyBNQVBQSU5HX0JFWU9ORF9FTkQuCiAJICovCi0JbGVhbCAoSU5JVF9NQVBfQkVZT05EX0VORCtQVEVfSURFTlRfQVRUUikoJWVkaSksJWVicAorCW1vdmwgJHBhKF9lbmQpICsgTUFQUElOR19CRVlPTkRfRU5EICsgUFRFX0lERU5UX0FUVFIsICVlYnAKIAljbXBsICVlYnAsJWVheAogCWpiIDEwYgogMToKLQltb3ZsICVlZGkscGEoaW5pdF9wZ190YWJsZXNfZW5kKQorCWFkZGwgJF9fUEFHRV9PRkZTRVQsICVlZGkKKwltb3ZsICVlZGksIHBhKF9icmtfZW5kKQogCXNocmwgJDEyLCAlZWF4CiAJbW92bCAlZWF4LCBwYShtYXhfcGZuX21hcHBlZCkKIApAQCAtMjI3LDggKzIyNCw3IEBACiAKIHBhZ2VfcGRlX29mZnNldCA9IChfX1BBR0VfT0ZGU0VUID4+IDIwKTsKIAotCW1vdmwgJHBhKHBnMCksICVlZGkKLQltb3ZsICVlZGksIHBhKGluaXRfcGdfdGFibGVzX3N0YXJ0KQorCW1vdmwgJHBhKF9fYnJrX2Jhc2UpLCAlZWRpCiAJbW92bCAkcGEoc3dhcHBlcl9wZ19kaXIpLCAlZWR4CiAJbW92bCAkUFRFX0lERU5UX0FUVFIsICVlYXgKIDEwOgpAQCAtMjQyLDE0ICsyMzgsMTMgQEAKIAlhZGRsICQweDEwMDAsJWVheAogCWxvb3AgMTFiCiAJLyoKLQkgKiBFbmQgY29uZGl0aW9uOiB3ZSBtdXN0IG1hcCB1cCB0byBhbmQgaW5jbHVkaW5nIElOSVRfTUFQX0JFWU9ORF9FTkQKLQkgKiBieXRlcyBiZXlvbmQgdGhlIGVuZCBvZiBvdXIgb3duIHBhZ2UgdGFibGVzOyB0aGUgKzB4MDA3IGlzCi0JICogdGhlIGF0dHJpYnV0ZSBiaXRzCisJICogRW5kIGNvbmRpdGlvbjogd2UgbXVzdCBtYXAgdXAgdG8gdGhlIGVuZCArIE1BUFBJTkdfQkVZT05EX0VORC4KIAkgKi8KLQlsZWFsIChJTklUX01BUF9CRVlPTkRfRU5EK1BURV9JREVOVF9BVFRSKSglZWRpKSwlZWJwCisJbW92bCAkcGEoX2VuZCkgKyBNQVBQSU5HX0JFWU9ORF9FTkQgKyBQVEVfSURFTlRfQVRUUiwgJWVicAogCWNtcGwgJWVicCwlZWF4CiAJamIgMTBiCi0JbW92bCAlZWRpLHBhKGluaXRfcGdfdGFibGVzX2VuZCkKKwlhZGRsICRfX1BBR0VfT0ZGU0VULCAlZWRpCisJbW92bCAlZWRpLCBwYShfYnJrX2VuZCkKIAlzaHJsICQxMiwgJWVheAogCW1vdmwgJWVheCwgcGEobWF4X3Bmbl9tYXBwZWQpCiAKQEAgLTYzNiw2ICs2MzEsNyBAQAogCS5maWxsIDEwMjQsNCwwCiBFTlRSWShlbXB0eV96ZXJvX3BhZ2UpCiAJLmZpbGwgNDA5NiwxLDAKKwogLyoKICAqIFRoaXMgc3RhcnRzIHRoZSBkYXRhIHNlY3Rpb24uCiAgKi8KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9pODI1My5jIGIvYXJjaC94ODYva2VybmVsL2k4MjUzLmMKaW5kZXggMTBmOTJmYi4uMzQ3NTQ0MCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2k4MjUzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2k4MjUzLmMKQEAgLTMsMTcgKzMsMTcgQEAKICAqCiAgKi8KICNpbmNsdWRlIDxsaW51eC9jbG9ja2NoaXBzLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4KIAotI2luY2x1ZGUgPGFzbS9zbXAuaD4KLSNpbmNsdWRlIDxhc20vZGVsYXkuaD4KICNpbmNsdWRlIDxhc20vaTgyNTMuaD4KLSNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxhc20vaHBldC5oPgorI2luY2x1ZGUgPGFzbS9zbXAuaD4KIAogREVGSU5FX1NQSU5MT0NLKGk4MjUzX2xvY2spOwogRVhQT1JUX1NZTUJPTChpODI1M19sb2NrKTsKQEAgLTQwLDcgKzQwLDcgQEAKIHsKIAlzcGluX2xvY2soJmk4MjUzX2xvY2spOwogCi0Jc3dpdGNoKG1vZGUpIHsKKwlzd2l0Y2ggKG1vZGUpIHsKIAljYXNlIENMT0NLX0VWVF9NT0RFX1BFUklPRElDOgogCQkvKiBiaW5hcnksIG1vZGUgMiwgTFNCL01TQiwgY2ggMCAqLwogCQlvdXRiX3BpdCgweDM0LCBQSVRfTU9ERSk7CkBAIC05NSw3ICs5NSw3IEBACiAgKiByZWdpc3RlcmVkLiBUaGlzIG1lY2hhbmlzbSByZXBsYWNlcyB0aGUgcHJldmlvdXMgI2lmZGVmIExPQ0FMX0FQSUMgLQogICogIXVzaW5nX2FwaWNfdGltZXIgZGVjaXNpb25zIGluIGRvX3RpbWVyX2ludGVycnVwdF9ob29rKCkKICAqLwotc3RhdGljIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgcGl0X2Nsb2NrZXZlbnQgPSB7CitzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBwaXRfY2UgPSB7CiAJLm5hbWUJCT0gInBpdCIsCiAJLmZlYXR1cmVzCT0gQ0xPQ0tfRVZUX0ZFQVRfUEVSSU9ESUMgfCBDTE9DS19FVlRfRkVBVF9PTkVTSE9ULAogCS5zZXRfbW9kZQk9IGluaXRfcGl0X3RpbWVyLApAQCAtMTE0LDE1ICsxMTQsMTMgQEAKIAkgKiBTdGFydCBwaXQgd2l0aCB0aGUgYm9vdCBjcHUgbWFzayBhbmQgbWFrZSBpdCBnbG9iYWwgYWZ0ZXIgdGhlCiAJICogSU9fQVBJQyBoYXMgYmVlbiBpbml0aWFsaXplZC4KIAkgKi8KLQlwaXRfY2xvY2tldmVudC5jcHVtYXNrID0gY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpOwotCXBpdF9jbG9ja2V2ZW50Lm11bHQgPSBkaXZfc2MoQ0xPQ0tfVElDS19SQVRFLCBOU0VDX1BFUl9TRUMsCi0JCQkJICAgICBwaXRfY2xvY2tldmVudC5zaGlmdCk7Ci0JcGl0X2Nsb2NrZXZlbnQubWF4X2RlbHRhX25zID0KLQkJY2xvY2tldmVudF9kZWx0YTJucygweDdGRkYsICZwaXRfY2xvY2tldmVudCk7Ci0JcGl0X2Nsb2NrZXZlbnQubWluX2RlbHRhX25zID0KLQkJY2xvY2tldmVudF9kZWx0YTJucygweEYsICZwaXRfY2xvY2tldmVudCk7Ci0JY2xvY2tldmVudHNfcmVnaXN0ZXJfZGV2aWNlKCZwaXRfY2xvY2tldmVudCk7Ci0JZ2xvYmFsX2Nsb2NrX2V2ZW50ID0gJnBpdF9jbG9ja2V2ZW50OworCXBpdF9jZS5jcHVtYXNrID0gY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpOworCXBpdF9jZS5tdWx0ID0gZGl2X3NjKENMT0NLX1RJQ0tfUkFURSwgTlNFQ19QRVJfU0VDLCBwaXRfY2Uuc2hpZnQpOworCXBpdF9jZS5tYXhfZGVsdGFfbnMgPSBjbG9ja2V2ZW50X2RlbHRhMm5zKDB4N0ZGRiwgJnBpdF9jZSk7CisJcGl0X2NlLm1pbl9kZWx0YV9ucyA9IGNsb2NrZXZlbnRfZGVsdGEybnMoMHhGLCAmcGl0X2NlKTsKKworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZSgmcGl0X2NlKTsKKwlnbG9iYWxfY2xvY2tfZXZlbnQgPSAmcGl0X2NlOwogfQogCiAjaWZuZGVmIENPTkZJR19YODZfNjQKQEAgLTEzMywxMSArMTMxLDExIEBACiAgKi8KIHN0YXRpYyBjeWNsZV90IHBpdF9yZWFkKHZvaWQpCiB7CisJc3RhdGljIGludCBvbGRfY291bnQ7CisJc3RhdGljIHUzMiBvbGRfamlmczsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBjb3VudDsKIAl1MzIgamlmczsKLQlzdGF0aWMgaW50IG9sZF9jb3VudDsKLQlzdGF0aWMgdTMyIG9sZF9qaWZzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjUzX2xvY2ssIGZsYWdzKTsKIAkvKgpAQCAtMTc5LDkgKzE3Nyw5IEBACiAJICogUHJldmlvdXMgYXR0ZW1wdHMgdG8gaGFuZGxlIHRoZXNlIGNhc2VzIGludGVsbGlnZW50bHkgd2VyZQogCSAqIGJ1Z2d5LCBzbyB3ZSBqdXN0IGRvIHRoZSBzaW1wbGUgdGhpbmcgbm93LgogCSAqLwotCWlmIChjb3VudCA+IG9sZF9jb3VudCAmJiBqaWZzID09IG9sZF9qaWZzKSB7CisJaWYgKGNvdW50ID4gb2xkX2NvdW50ICYmIGppZnMgPT0gb2xkX2ppZnMpCiAJCWNvdW50ID0gb2xkX2NvdW50OwotCX0KKwogCW9sZF9jb3VudCA9IGNvdW50OwogCW9sZF9qaWZzID0gamlmczsKIApAQCAtMTkyLDEzICsxOTAsMTMgQEAKIAlyZXR1cm4gKGN5Y2xlX3QpKGppZnMgKiBMQVRDSCkgKyBjb3VudDsKIH0KIAotc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV9waXQgPSB7Ci0JLm5hbWUJPSAicGl0IiwKLQkucmF0aW5nID0gMTEwLAotCS5yZWFkCT0gcGl0X3JlYWQsCi0JLm1hc2sJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKLQkubXVsdAk9IDAsCi0JLnNoaWZ0CT0gMjAsCitzdGF0aWMgc3RydWN0IGNsb2Nrc291cmNlIHBpdF9jcyA9IHsKKwkubmFtZQkJPSAicGl0IiwKKwkucmF0aW5nCQk9IDExMCwKKwkucmVhZAkJPSBwaXRfcmVhZCwKKwkubWFzawkJPSBDTE9DS1NPVVJDRV9NQVNLKDMyKSwKKwkubXVsdAkJPSAwLAorCS5zaGlmdAkJPSAyMCwKIH07CiAKIHN0YXRpYyB2b2lkIHBpdF9kaXNhYmxlX2Nsb2Nrc291cmNlKHZvaWQpCkBAIC0yMDYsOSArMjA0LDkgQEAKIAkvKgogCSAqIFVzZSBtdWx0IHRvIGNoZWNrIHdoZXRoZXIgaXQgaXMgcmVnaXN0ZXJlZCBvciBub3QKIAkgKi8KLQlpZiAoY2xvY2tzb3VyY2VfcGl0Lm11bHQpIHsKLQkJY2xvY2tzb3VyY2VfdW5yZWdpc3RlcigmY2xvY2tzb3VyY2VfcGl0KTsKLQkJY2xvY2tzb3VyY2VfcGl0Lm11bHQgPSAwOworCWlmIChwaXRfY3MubXVsdCkgeworCQljbG9ja3NvdXJjZV91bnJlZ2lzdGVyKCZwaXRfY3MpOworCQlwaXRfY3MubXVsdCA9IDA7CiAJfQogfQogCkBAIC0yMjIsMTMgKzIyMCwxMyBAQAogCSAgKiAtIHdoZW4gbG9jYWwgQVBJQyB0aW1lciBpcyBhY3RpdmUgKFBJVCBpcyBzd2l0Y2hlZCBvZmYpCiAJICAqLwogCWlmIChudW1fcG9zc2libGVfY3B1cygpID4gMSB8fCBpc19ocGV0X2VuYWJsZWQoKSB8fAotCSAgICBwaXRfY2xvY2tldmVudC5tb2RlICE9IENMT0NLX0VWVF9NT0RFX1BFUklPRElDKQorCSAgICBwaXRfY2UubW9kZSAhPSBDTE9DS19FVlRfTU9ERV9QRVJJT0RJQykKIAkJcmV0dXJuIDA7CiAKLQljbG9ja3NvdXJjZV9waXQubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQoQ0xPQ0tfVElDS19SQVRFLAotCQkJCQkJICAgY2xvY2tzb3VyY2VfcGl0LnNoaWZ0KTsKLQlyZXR1cm4gY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX3BpdCk7CisJcGl0X2NzLm11bHQgPSBjbG9ja3NvdXJjZV9oejJtdWx0KENMT0NLX1RJQ0tfUkFURSwgcGl0X2NzLnNoaWZ0KTsKKworCXJldHVybiBjbG9ja3NvdXJjZV9yZWdpc3RlcigmcGl0X2NzKTsKIH0KIGFyY2hfaW5pdGNhbGwoaW5pdF9waXRfY2xvY2tzb3VyY2UpOwogCi0jZW5kaWYKKyNlbmRpZiAvKiAhQ09ORklHX1g4Nl82NCAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL2lvX2RlbGF5LmMgYi9hcmNoL3g4Ni9rZXJuZWwvaW9fZGVsYXkuYwppbmRleCA3MjBkMjYwLi5hOTc5YjViIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaW9fZGVsYXkuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvaW9fZGVsYXkuYwpAQCAtNywxMCArNywxMCBAQAogICovCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2RtaS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAKIGludCBpb19kZWxheV90eXBlIF9fcmVhZF9tb3N0bHkgPSBDT05GSUdfREVGQVVMVF9JT19ERUxBWV9UWVBFOwogCkBAIC00Nyw4ICs0Nyw3IEBACiBzdGF0aWMgaW50IF9faW5pdCBkbWlfaW9fZGVsYXlfMHhlZF9wb3J0KGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICppZCkKIHsKIAlpZiAoaW9fZGVsYXlfdHlwZSA9PSBDT05GSUdfSU9fREVMQVlfVFlQRV8wWDgwKSB7Ci0JCXByaW50ayhLRVJOX05PVElDRSAiJXM6IHVzaW5nIDB4ZWQgSS9PIGRlbGF5IHBvcnRcbiIsCi0JCQlpZC0+aWRlbnQpOworCQlwcl9ub3RpY2UoIiVzOiB1c2luZyAweGVkIEkvTyBkZWxheSBwb3J0XG4iLCBpZC0+aWRlbnQpOwogCQlpb19kZWxheV90eXBlID0gQ09ORklHX0lPX0RFTEFZX1RZUEVfMFhFRDsKIAl9CiAKQEAgLTY0LDQwICs2Myw0MCBAQAogCQkuY2FsbGJhY2sJPSBkbWlfaW9fZGVsYXlfMHhlZF9wb3J0LAogCQkuaWRlbnQJCT0gIkNvbXBhcSBQcmVzYXJpbyBWNjAwMCIsCiAJCS5tYXRjaGVzCT0gewotCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsICJRdWFudGEiKSwKLQkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIjMwQjciKQorCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsCSJRdWFudGEiKSwKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwJIjMwQjciKQogCQl9CiAJfSwKIAl7CiAJCS5jYWxsYmFjawk9IGRtaV9pb19kZWxheV8weGVkX3BvcnQsCiAJCS5pZGVudAkJPSAiSFAgUGF2aWxpb24gZHY5MDAweiIsCiAJCS5tYXRjaGVzCT0gewotCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsICJRdWFudGEiKSwKLQkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwgIjMwQjkiKQorCQkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsCSJRdWFudGEiKSwKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfTkFNRSwJIjMwQjkiKQogCQl9CiAJfSwKIAl7CiAJCS5jYWxsYmFjawk9IGRtaV9pb19kZWxheV8weGVkX3BvcnQsCiAJCS5pZGVudAkJPSAiSFAgUGF2aWxpb24gZHY2MDAwIiwKIAkJLm1hdGNoZXMJPSB7Ci0JCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwgIlF1YW50YSIpLAotCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLCAiMzBCOCIpCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwJIlF1YW50YSIpLAorCQkJRE1JX01BVENIKERNSV9CT0FSRF9OQU1FLAkiMzBCOCIpCiAJCX0KIAl9LAogCXsKIAkJLmNhbGxiYWNrCT0gZG1pX2lvX2RlbGF5XzB4ZWRfcG9ydCwKIAkJLmlkZW50CQk9ICJIUCBQYXZpbGlvbiB0eDEwMDAiLAogCQkubWF0Y2hlcwk9IHsKLQkJCURNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCAiUXVhbnRhIiksCi0JCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICIzMEJGIikKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLAkiUXVhbnRhIiksCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsCSIzMEJGIikKIAkJfQogCX0sCiAJewogCQkuY2FsbGJhY2sJPSBkbWlfaW9fZGVsYXlfMHhlZF9wb3J0LAogCQkuaWRlbnQJCT0gIlByZXNhcmlvIEY3MDAiLAogCQkubWF0Y2hlcwk9IHsKLQkJCURNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLCAiUXVhbnRhIiksCi0JCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsICIzMEQzIikKKwkJCURNSV9NQVRDSChETUlfQk9BUkRfVkVORE9SLAkiUXVhbnRhIiksCisJCQlETUlfTUFUQ0goRE1JX0JPQVJEX05BTUUsCSIzMEQzIikKIAkJfQogCX0sCiAJeyB9CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMgYi9hcmNoL3g4Ni9rZXJuZWwvaXJxLmMKaW5kZXggZjEzY2ExNi4uM2FhZjdiOSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL2lycS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnEuYwpAQCAtMTUsNiArMTUsOSBAQAogCiBhdG9taWNfdCBpcnFfZXJyX2NvdW50OwogCisvKiBGdW5jdGlvbiBwb2ludGVyIGZvciBnZW5lcmljIGludGVycnVwdCB2ZWN0b3IgaGFuZGxpbmcgKi8KK3ZvaWQgKCpnZW5lcmljX2ludGVycnVwdF9leHRlbnNpb24pKHZvaWQpID0gTlVMTDsKKwogLyoKICAqICd3aGF0IHNob3VsZCB3ZSBkbyBpZiB3ZSBnZXQgYSBodyBpcnEgZXZlbnQgb24gYW4gaWxsZWdhbCB2ZWN0b3InLgogICogZWFjaCBhcmNoaXRlY3R1cmUgaGFzIHRvIGFuc3dlciB0aGlzIHRoZW1zZWx2ZXMuCkBAIC00Miw1NSArNDUsNjAgQEAKIC8qCiAgKiAvcHJvYy9pbnRlcnJ1cHRzIHByaW50aW5nOgogICovCi1zdGF0aWMgaW50IHNob3dfb3RoZXJfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnApCitzdGF0aWMgaW50IHNob3dfb3RoZXJfaW50ZXJydXB0cyhzdHJ1Y3Qgc2VxX2ZpbGUgKnAsIGludCBwcmVjKQogewogCWludCBqOwogCi0Jc2VxX3ByaW50ZihwLCAiTk1JOiAiKTsKKwlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJOTUkiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5fX25taV9jb3VudCk7CiAJc2VxX3ByaW50ZihwLCAiICBOb24tbWFza2FibGUgaW50ZXJydXB0c1xuIik7CiAjaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0Jc2VxX3ByaW50ZihwLCAiTE9DOiAiKTsKKwlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJMT0MiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5hcGljX3RpbWVyX2lycXMpOwogCXNlcV9wcmludGYocCwgIiAgTG9jYWwgdGltZXIgaW50ZXJydXB0c1xuIik7CisKKwlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJTUFUiKTsKKwlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCisJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfc3B1cmlvdXNfY291bnQpOworCXNlcV9wcmludGYocCwgIiAgU3B1cmlvdXMgaW50ZXJydXB0c1xuIik7CiAjZW5kaWYKKwlpZiAoZ2VuZXJpY19pbnRlcnJ1cHRfZXh0ZW5zaW9uKSB7CisJCXNlcV9wcmludGYocCwgIlBMVDogIik7CisJCWZvcl9lYWNoX29ubGluZV9jcHUoaikKKwkJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5nZW5lcmljX2lycXMpOworCQlzZXFfcHJpbnRmKHAsICIgIFBsYXRmb3JtIGludGVycnVwdHNcbiIpOworCX0KICNpZmRlZiBDT05GSUdfU01QCi0Jc2VxX3ByaW50ZihwLCAiUkVTOiAiKTsKKwlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJSRVMiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfcmVzY2hlZF9jb3VudCk7CiAJc2VxX3ByaW50ZihwLCAiICBSZXNjaGVkdWxpbmcgaW50ZXJydXB0c1xuIik7Ci0Jc2VxX3ByaW50ZihwLCAiQ0FMOiAiKTsKKwlzZXFfcHJpbnRmKHAsICIlKnM6ICIsIHByZWMsICJDQUwiKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwgaXJxX3N0YXRzKGopLT5pcnFfY2FsbF9jb3VudCk7CiAJc2VxX3ByaW50ZihwLCAiICBGdW5jdGlvbiBjYWxsIGludGVycnVwdHNcbiIpOwotCXNlcV9wcmludGYocCwgIlRMQjogIik7CisJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiVExCIik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+aXJxX3RsYl9jb3VudCk7CiAJc2VxX3ByaW50ZihwLCAiICBUTEIgc2hvb3Rkb3duc1xuIik7CiAjZW5kaWYKICNpZmRlZiBDT05GSUdfWDg2X01DRQotCXNlcV9wcmludGYocCwgIlRSTTogIik7CisJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiVFJNIik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+aXJxX3RoZXJtYWxfY291bnQpOwogCXNlcV9wcmludGYocCwgIiAgVGhlcm1hbCBldmVudCBpbnRlcnJ1cHRzXG4iKTsKICMgaWZkZWYgQ09ORklHX1g4Nl82NAotCXNlcV9wcmludGYocCwgIlRIUjogIik7CisJc2VxX3ByaW50ZihwLCAiJSpzOiAiLCBwcmVjLCAiVEhSIik7CiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+aXJxX3RocmVzaG9sZF9jb3VudCk7CiAJc2VxX3ByaW50ZihwLCAiICBUaHJlc2hvbGQgQVBJQyBpbnRlcnJ1cHRzXG4iKTsKICMgZW5kaWYKICNlbmRpZgotI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwotCXNlcV9wcmludGYocCwgIlNQVTogIik7Ci0JZm9yX2VhY2hfb25saW5lX2NwdShqKQotCQlzZXFfcHJpbnRmKHAsICIlMTB1ICIsIGlycV9zdGF0cyhqKS0+aXJxX3NwdXJpb3VzX2NvdW50KTsKLQlzZXFfcHJpbnRmKHAsICIgIFNwdXJpb3VzIGludGVycnVwdHNcbiIpOwotI2VuZGlmCi0Jc2VxX3ByaW50ZihwLCAiRVJSOiAlMTB1XG4iLCBhdG9taWNfcmVhZCgmaXJxX2Vycl9jb3VudCkpOworCXNlcV9wcmludGYocCwgIiUqczogJTEwdVxuIiwgcHJlYywgIkVSUiIsIGF0b21pY19yZWFkKCZpcnFfZXJyX2NvdW50KSk7CiAjaWYgZGVmaW5lZChDT05GSUdfWDg2X0lPX0FQSUMpCi0Jc2VxX3ByaW50ZihwLCAiTUlTOiAlMTB1XG4iLCBhdG9taWNfcmVhZCgmaXJxX21pc19jb3VudCkpOworCXNlcV9wcmludGYocCwgIiUqczogJTEwdVxuIiwgcHJlYywgIk1JUyIsIGF0b21pY19yZWFkKCZpcnFfbWlzX2NvdW50KSk7CiAjZW5kaWYKIAlyZXR1cm4gMDsKIH0KQEAgLTk4LDE5ICsxMDYsMjIgQEAKIGludCBzaG93X2ludGVycnVwdHMoc3RydWN0IHNlcV9maWxlICpwLCB2b2lkICp2KQogewogCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIGFueV9jb3VudCA9IDA7Ci0JaW50IGkgPSAqKGxvZmZfdCAqKSB2LCBqOworCWludCBpID0gKihsb2ZmX3QgKikgdiwgaiwgcHJlYzsKIAlzdHJ1Y3QgaXJxYWN0aW9uICphY3Rpb247CiAJc3RydWN0IGlycV9kZXNjICpkZXNjOwogCiAJaWYgKGkgPiBucl9pcnFzKQogCQlyZXR1cm4gMDsKIAorCWZvciAocHJlYyA9IDMsIGogPSAxMDAwOyBwcmVjIDwgMTAgJiYgaiA8PSBucl9pcnFzOyArK3ByZWMpCisJCWogKj0gMTA7CisKIAlpZiAoaSA9PSBucl9pcnFzKQotCQlyZXR1cm4gc2hvd19vdGhlcl9pbnRlcnJ1cHRzKHApOworCQlyZXR1cm4gc2hvd19vdGhlcl9pbnRlcnJ1cHRzKHAsIHByZWMpOwogCiAJLyogcHJpbnQgaGVhZGVyICovCiAJaWYgKGkgPT0gMCkgewotCQlzZXFfcHJpbnRmKHAsICIgICAgICAgICAgICIpOworCQlzZXFfcHJpbnRmKHAsICIlKnMiLCBwcmVjICsgOCwgIiIpOwogCQlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCQlzZXFfcHJpbnRmKHAsICJDUFUlLThkIiwgaik7CiAJCXNlcV9wdXRjKHAsICdcbicpOwpAQCAtMTIxLDIzICsxMzIsMTUgQEAKIAkJcmV0dXJuIDA7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOwotI2lmbmRlZiBDT05GSUdfU01QCi0JYW55X2NvdW50ID0ga3N0YXRfaXJxcyhpKTsKLSNlbHNlCiAJZm9yX2VhY2hfb25saW5lX2NwdShqKQogCQlhbnlfY291bnQgfD0ga3N0YXRfaXJxc19jcHUoaSwgaik7Ci0jZW5kaWYKIAlhY3Rpb24gPSBkZXNjLT5hY3Rpb247CiAJaWYgKCFhY3Rpb24gJiYgIWFueV9jb3VudCkKIAkJZ290byBvdXQ7CiAKLQlzZXFfcHJpbnRmKHAsICIlM2Q6ICIsIGkpOwotI2lmbmRlZiBDT05GSUdfU01QCi0Jc2VxX3ByaW50ZihwLCAiJTEwdSAiLCBrc3RhdF9pcnFzKGkpKTsKLSNlbHNlCisJc2VxX3ByaW50ZihwLCAiJSpkOiAiLCBwcmVjLCBpKTsKIAlmb3JfZWFjaF9vbmxpbmVfY3B1KGopCiAJCXNlcV9wcmludGYocCwgIiUxMHUgIiwga3N0YXRfaXJxc19jcHUoaSwgaikpOwotI2VuZGlmCiAJc2VxX3ByaW50ZihwLCAiICU4cyIsIGRlc2MtPmNoaXAtPm5hbWUpOwogCXNlcV9wcmludGYocCwgIi0lLThzIiwgZGVzYy0+bmFtZSk7CiAKQEAgLTE2Miw3ICsxNjUsMTAgQEAKIAogI2lmZGVmIENPTkZJR19YODZfTE9DQUxfQVBJQwogCXN1bSArPSBpcnFfc3RhdHMoY3B1KS0+YXBpY190aW1lcl9pcnFzOworCXN1bSArPSBpcnFfc3RhdHMoY3B1KS0+aXJxX3NwdXJpb3VzX2NvdW50OwogI2VuZGlmCisJaWYgKGdlbmVyaWNfaW50ZXJydXB0X2V4dGVuc2lvbikKKwkJc3VtICs9IGlycV9zdGF0cyhjcHUpLT5nZW5lcmljX2lycXM7CiAjaWZkZWYgQ09ORklHX1NNUAogCXN1bSArPSBpcnFfc3RhdHMoY3B1KS0+aXJxX3Jlc2NoZWRfY291bnQ7CiAJc3VtICs9IGlycV9zdGF0cyhjcHUpLT5pcnFfY2FsbF9jb3VudDsKQEAgLTE3NCw5ICsxODAsNiBAQAogCXN1bSArPSBpcnFfc3RhdHMoY3B1KS0+aXJxX3RocmVzaG9sZF9jb3VudDsKICNlbmRpZgogI2VuZGlmCi0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0Jc3VtICs9IGlycV9zdGF0cyhjcHUpLT5pcnFfc3B1cmlvdXNfY291bnQ7Ci0jZW5kaWYKIAlyZXR1cm4gc3VtOwogfQogCkBAIC0yMjYsNCArMjI5LDI3IEBACiAJcmV0dXJuIDE7CiB9CiAKKy8qCisgKiBIYW5kbGVyIGZvciBHRU5FUklDX0lOVEVSUlVQVF9WRUNUT1IuCisgKi8KK3ZvaWQgc21wX2dlbmVyaWNfaW50ZXJydXB0KHN0cnVjdCBwdF9yZWdzICpyZWdzKQoreworCXN0cnVjdCBwdF9yZWdzICpvbGRfcmVncyA9IHNldF9pcnFfcmVncyhyZWdzKTsKKworCWFja19BUElDX2lycSgpOworCisJZXhpdF9pZGxlKCk7CisKKwlpcnFfZW50ZXIoKTsKKworCWluY19pcnFfc3RhdChnZW5lcmljX2lycXMpOworCisJaWYgKGdlbmVyaWNfaW50ZXJydXB0X2V4dGVuc2lvbikKKwkJZ2VuZXJpY19pbnRlcnJ1cHRfZXh0ZW5zaW9uKCk7CisKKwlpcnFfZXhpdCgpOworCisJc2V0X2lycV9yZWdzKG9sZF9yZWdzKTsKK30KKwogRVhQT1JUX1NZTUJPTF9HUEwodmVjdG9yX3VzZWRfYnlfcGVyY3B1X2lycSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF8zMi5jIGIvYXJjaC94ODYva2VybmVsL2lycWluaXRfMzIuYwppbmRleCA1MGI4YzNhLi5iYzEzMjYxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF8zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzMyLmMKQEAgLTE3NSw2ICsxNzUsOSBAQAogCS8qIHNlbGYgZ2VuZXJhdGVkIElQSSBmb3IgbG9jYWwgQVBJQyB0aW1lciAqLwogCWFsbG9jX2ludHJfZ2F0ZShMT0NBTF9USU1FUl9WRUNUT1IsIGFwaWNfdGltZXJfaW50ZXJydXB0KTsKIAorCS8qIGdlbmVyaWMgSVBJIGZvciBwbGF0Zm9ybSBzcGVjaWZpYyB1c2UgKi8KKwlhbGxvY19pbnRyX2dhdGUoR0VORVJJQ19JTlRFUlJVUFRfVkVDVE9SLCBnZW5lcmljX2ludGVycnVwdCk7CisKIAkvKiBJUEkgdmVjdG9ycyBmb3IgQVBJQyBzcHVyaW91cyBhbmQgZXJyb3IgaW50ZXJydXB0cyAqLwogCWFsbG9jX2ludHJfZ2F0ZShTUFVSSU9VU19BUElDX1ZFQ1RPUiwgc3B1cmlvdXNfaW50ZXJydXB0KTsKIAlhbGxvY19pbnRyX2dhdGUoRVJST1JfQVBJQ19WRUNUT1IsIGVycm9yX2ludGVycnVwdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF82NC5jIGIvYXJjaC94ODYva2VybmVsL2lycWluaXRfNjQuYwppbmRleCBkYTQ4MWExLi5jN2E0OWUwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvaXJxaW5pdF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9pcnFpbml0XzY0LmMKQEAgLTE0Nyw2ICsxNDcsOSBAQAogCS8qIHNlbGYgZ2VuZXJhdGVkIElQSSBmb3IgbG9jYWwgQVBJQyB0aW1lciAqLwogCWFsbG9jX2ludHJfZ2F0ZShMT0NBTF9USU1FUl9WRUNUT1IsIGFwaWNfdGltZXJfaW50ZXJydXB0KTsKIAorCS8qIGdlbmVyaWMgSVBJIGZvciBwbGF0Zm9ybSBzcGVjaWZpYyB1c2UgKi8KKwlhbGxvY19pbnRyX2dhdGUoR0VORVJJQ19JTlRFUlJVUFRfVkVDVE9SLCBnZW5lcmljX2ludGVycnVwdCk7CisKIAkvKiBJUEkgdmVjdG9ycyBmb3IgQVBJQyBzcHVyaW91cyBhbmQgZXJyb3IgaW50ZXJydXB0cyAqLwogCWFsbG9jX2ludHJfZ2F0ZShTUFVSSU9VU19BUElDX1ZFQ1RPUiwgc3B1cmlvdXNfaW50ZXJydXB0KTsKIAlhbGxvY19pbnRyX2dhdGUoRVJST1JfQVBJQ19WRUNUT1IsIGVycm9yX2ludGVycnVwdCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwva2RlYnVnZnMuYyBiL2FyY2gveDg2L2tlcm5lbC9rZGVidWdmcy5jCmluZGV4IGZmN2QzYjAuLmU0NDQzNTcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rZGVidWdmcy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9rZGVidWdmcy5jCkBAIC04LDExICs4LDExIEBACiAgKi8KICNpbmNsdWRlIDxsaW51eC9kZWJ1Z2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgotI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvc3RhdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CiAjaW5jbHVkZSA8bGludXgvbW0uaD4KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KIAogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogCkBAIC0yNiw5ICsyNiw4IEBACiAJdTMyIGxlbjsKIH07CiAKLXN0YXRpYyBzc2l6ZV90Ci1zZXR1cF9kYXRhX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1Ziwgc2l6ZV90IGNvdW50LAotCQlsb2ZmX3QgKnBwb3MpCitzdGF0aWMgc3NpemVfdCBzZXR1cF9kYXRhX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICp1c2VyX2J1ZiwKKwkJCSAgICAgICBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3Qgc2V0dXBfZGF0YV9ub2RlICpub2RlID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXVuc2lnbmVkIGxvbmcgcmVtYWluOwpAQCAtMzksMjAgKzM4LDIxIEBACiAKIAlpZiAocG9zIDwgMCkKIAkJcmV0dXJuIC1FSU5WQUw7CisKIAlpZiAocG9zID49IG5vZGUtPmxlbikKIAkJcmV0dXJuIDA7CiAKIAlpZiAoY291bnQgPiBub2RlLT5sZW4gLSBwb3MpCiAJCWNvdW50ID0gbm9kZS0+bGVuIC0gcG9zOworCiAJcGEgPSBub2RlLT5wYWRkciArIHNpemVvZihzdHJ1Y3Qgc2V0dXBfZGF0YSkgKyBwb3M7CiAJcGcgPSBwZm5fdG9fcGFnZSgocGEgKyBjb3VudCAtIDEpID4+IFBBR0VfU0hJRlQpOwogCWlmIChQYWdlSGlnaE1lbShwZykpIHsKIAkJcCA9IGlvcmVtYXBfY2FjaGUocGEsIGNvdW50KTsKIAkJaWYgKCFwKQogCQkJcmV0dXJuIC1FTlhJTzsKLQl9IGVsc2UgeworCX0gZWxzZQogCQlwID0gX192YShwYSk7Ci0JfQogCiAJcmVtYWluID0gY29weV90b191c2VyKHVzZXJfYnVmLCBwLCBjb3VudCk7CiAKQEAgLTcwLDEyICs3MCwxMyBAQAogc3RhdGljIGludCBzZXR1cF9kYXRhX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gaW5vZGUtPmlfcHJpdmF0ZTsKKwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBmb3BzX3NldHVwX2RhdGEgPSB7Ci0JLnJlYWQgPQkJc2V0dXBfZGF0YV9yZWFkLAotCS5vcGVuID0JCXNldHVwX2RhdGFfb3BlbiwKKwkucmVhZAkJPSBzZXR1cF9kYXRhX3JlYWQsCisJLm9wZW4JCT0gc2V0dXBfZGF0YV9vcGVuLAogfTsKIAogc3RhdGljIGludCBfX2luaXQKQEAgLTg0LDU3ICs4NSw1MCBAQAogewogCXN0cnVjdCBkZW50cnkgKmQsICp0eXBlLCAqZGF0YTsKIAljaGFyIGJ1ZlsxNl07Ci0JaW50IGVycm9yOwogCiAJc3ByaW50ZihidWYsICIlZCIsIG5vKTsKIAlkID0gZGVidWdmc19jcmVhdGVfZGlyKGJ1ZiwgcGFyZW50KTsKLQlpZiAoIWQpIHsKLQkJZXJyb3IgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9yZXR1cm47Ci0JfQorCWlmICghZCkKKwkJcmV0dXJuIC1FTk9NRU07CisKIAl0eXBlID0gZGVidWdmc19jcmVhdGVfeDMyKCJ0eXBlIiwgU19JUlVHTywgZCwgJm5vZGUtPnR5cGUpOwotCWlmICghdHlwZSkgewotCQllcnJvciA9IC1FTk9NRU07CisJaWYgKCF0eXBlKQogCQlnb3RvIGVycl9kaXI7Ci0JfQorCiAJZGF0YSA9IGRlYnVnZnNfY3JlYXRlX2ZpbGUoImRhdGEiLCBTX0lSVUdPLCBkLCBub2RlLCAmZm9wc19zZXR1cF9kYXRhKTsKLQlpZiAoIWRhdGEpIHsKLQkJZXJyb3IgPSAtRU5PTUVNOworCWlmICghZGF0YSkKIAkJZ290byBlcnJfdHlwZTsKLQl9CisKIAlyZXR1cm4gMDsKIAogZXJyX3R5cGU6CiAJZGVidWdmc19yZW1vdmUodHlwZSk7CiBlcnJfZGlyOgogCWRlYnVnZnNfcmVtb3ZlKGQpOwotZXJyX3JldHVybjoKLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIC1FTk9NRU07CiB9CiAKIHN0YXRpYyBpbnQgX19pbml0IGNyZWF0ZV9zZXR1cF9kYXRhX25vZGVzKHN0cnVjdCBkZW50cnkgKnBhcmVudCkKIHsKIAlzdHJ1Y3Qgc2V0dXBfZGF0YV9ub2RlICpub2RlOwogCXN0cnVjdCBzZXR1cF9kYXRhICpkYXRhOwotCWludCBlcnJvciwgbm8gPSAwOworCWludCBlcnJvciA9IC1FTk9NRU07CiAJc3RydWN0IGRlbnRyeSAqZDsKIAlzdHJ1Y3QgcGFnZSAqcGc7CiAJdTY0IHBhX2RhdGE7CisJaW50IG5vID0gMDsKIAogCWQgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoInNldHVwX2RhdGEiLCBwYXJlbnQpOwotCWlmICghZCkgewotCQllcnJvciA9IC1FTk9NRU07Ci0JCWdvdG8gZXJyX3JldHVybjsKLQl9CisJaWYgKCFkKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXBhX2RhdGEgPSBib290X3BhcmFtcy5oZHIuc2V0dXBfZGF0YTsKIAogCXdoaWxlIChwYV9kYXRhKSB7CiAJCW5vZGUgPSBrbWFsbG9jKHNpemVvZigqbm9kZSksIEdGUF9LRVJORUwpOwotCQlpZiAoIW5vZGUpIHsKLQkJCWVycm9yID0gLUVOT01FTTsKKwkJaWYgKCFub2RlKQogCQkJZ290byBlcnJfZGlyOwotCQl9CisKIAkJcGcgPSBwZm5fdG9fcGFnZSgocGFfZGF0YStzaXplb2YoKmRhdGEpLTEpID4+IFBBR0VfU0hJRlQpOwogCQlpZiAoUGFnZUhpZ2hNZW0ocGcpKSB7CiAJCQlkYXRhID0gaW9yZW1hcF9jYWNoZShwYV9kYXRhLCBzaXplb2YoKmRhdGEpKTsKQEAgLTE0Myw5ICsxMzcsOCBAQAogCQkJCWVycm9yID0gLUVOWElPOwogCQkJCWdvdG8gZXJyX2RpcjsKIAkJCX0KLQkJfSBlbHNlIHsKKwkJfSBlbHNlCiAJCQlkYXRhID0gX192YShwYV9kYXRhKTsKLQkJfQogCiAJCW5vZGUtPnBhZGRyID0gcGFfZGF0YTsKIAkJbm9kZS0+dHlwZSA9IGRhdGEtPnR5cGU7CkBAIC0xNTksMTEgKzE1MiwxMSBAQAogCQkJZ290byBlcnJfZGlyOwogCQlubysrOwogCX0KKwogCXJldHVybiAwOwogCiBlcnJfZGlyOgogCWRlYnVnZnNfcmVtb3ZlKGQpOwotZXJyX3JldHVybjoKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTE3NSwyOCArMTY4LDI2IEBACiBzdGF0aWMgaW50IF9faW5pdCBib290X3BhcmFtc19rZGVidWdmc19pbml0KHZvaWQpCiB7CiAJc3RydWN0IGRlbnRyeSAqZGJwLCAqdmVyc2lvbiwgKmRhdGE7Ci0JaW50IGVycm9yOworCWludCBlcnJvciA9IC1FTk9NRU07CiAKIAlkYnAgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImJvb3RfcGFyYW1zIiwgTlVMTCk7Ci0JaWYgKCFkYnApIHsKLQkJZXJyb3IgPSAtRU5PTUVNOwotCQlnb3RvIGVycl9yZXR1cm47Ci0JfQorCWlmICghZGJwKQorCQlyZXR1cm4gLUVOT01FTTsKKwogCXZlcnNpb24gPSBkZWJ1Z2ZzX2NyZWF0ZV94MTYoInZlcnNpb24iLCBTX0lSVUdPLCBkYnAsCiAJCQkJICAgICAmYm9vdF9wYXJhbXMuaGRyLnZlcnNpb24pOwotCWlmICghdmVyc2lvbikgewotCQllcnJvciA9IC1FTk9NRU07CisJaWYgKCF2ZXJzaW9uKQogCQlnb3RvIGVycl9kaXI7Ci0JfQorCiAJZGF0YSA9IGRlYnVnZnNfY3JlYXRlX2Jsb2IoImRhdGEiLCBTX0lSVUdPLCBkYnAsCiAJCQkJICAgJmJvb3RfcGFyYW1zX2Jsb2IpOwotCWlmICghZGF0YSkgewotCQllcnJvciA9IC1FTk9NRU07CisJaWYgKCFkYXRhKQogCQlnb3RvIGVycl92ZXJzaW9uOwotCX0KKwogCWVycm9yID0gY3JlYXRlX3NldHVwX2RhdGFfbm9kZXMoZGJwKTsKIAlpZiAoZXJyb3IpCiAJCWdvdG8gZXJyX2RhdGE7CisKIAlyZXR1cm4gMDsKIAogZXJyX2RhdGE6CkBAIC0yMDUsMTAgKzE5Niw5IEBACiAJZGVidWdmc19yZW1vdmUodmVyc2lvbik7CiBlcnJfZGlyOgogCWRlYnVnZnNfcmVtb3ZlKGRicCk7Ci1lcnJfcmV0dXJuOgogCXJldHVybiBlcnJvcjsKIH0KLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19ERUJVR19CT09UX1BBUkFNUyAqLwogCiBzdGF0aWMgaW50IF9faW5pdCBhcmNoX2tkZWJ1Z2ZzX2luaXQodm9pZCkKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMgYi9hcmNoL3g4Ni9rZXJuZWwva3Byb2Jlcy5jCmluZGV4IDQ1NThkZDMuLjU1Yjk0NjEgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9rcHJvYmVzLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2twcm9iZXMuYwpAQCAtMTkzLDcgKzE5Myw3IEBACiAJa3Byb2JlX29wY29kZV90IG9wY29kZTsKIAlrcHJvYmVfb3Bjb2RlX3QgKm9yaWdfb3Bjb2RlcyA9IG9wY29kZXM7CiAKLQlpZiAoc2VhcmNoX2V4Y2VwdGlvbl90YWJsZXMob3Bjb2RlcykpCisJaWYgKHNlYXJjaF9leGNlcHRpb25fdGFibGVzKCh1bnNpZ25lZCBsb25nKW9wY29kZXMpKQogCQlyZXR1cm4gMDsJLyogUGFnZSBmYXVsdCBtYXkgb2NjdXIgb24gdGhpcyBhZGRyZXNzLiAqLwogCiByZXRyeToKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9rdm0uYyBiL2FyY2gveDg2L2tlcm5lbC9rdm0uYwppbmRleCA0NzhiY2E5Li4zMzAxOWRkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwva3ZtLmMKKysrIGIvYXJjaC94ODYva2VybmVsL2t2bS5jCkBAIC0xMzgsMTIgKzEzOCw2IEBACiAJa3ZtX21tdV93cml0ZShwdGVwLCBwdGVfdmFsKHB0ZSkpOwogfQogCi1zdGF0aWMgdm9pZCBrdm1fc2V0X3B0ZV9wcmVzZW50KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQkJcHRlX3QgKnB0ZXAsIHB0ZV90IHB0ZSkKLXsKLQlrdm1fbW11X3dyaXRlKHB0ZXAsIHB0ZV92YWwocHRlKSk7Ci19Ci0KIHN0YXRpYyB2b2lkIGt2bV9wdGVfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAJCQkgIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZXApCiB7CkBAIC0yMjAsNyArMjE0LDYgQEAKICNpZiBQQUdFVEFCTEVfTEVWRUxTID49IDMKICNpZmRlZiBDT05GSUdfWDg2X1BBRQogCQlwdl9tbXVfb3BzLnNldF9wdGVfYXRvbWljID0ga3ZtX3NldF9wdGVfYXRvbWljOwotCQlwdl9tbXVfb3BzLnNldF9wdGVfcHJlc2VudCA9IGt2bV9zZXRfcHRlX3ByZXNlbnQ7CiAJCXB2X21tdV9vcHMucHRlX2NsZWFyID0ga3ZtX3B0ZV9jbGVhcjsKIAkJcHZfbW11X29wcy5wbWRfY2xlYXIgPSBrdm1fcG1kX2NsZWFyOwogI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY18zMi5jIGIvYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfMzIuYwppbmRleCBmNWZjOGM3Li5lNzM2OGMxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY18zMi5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzMyLmMKQEAgLTE0LDEyICsxNCwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L2Z0cmFjZS5oPgogI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KICNpbmNsdWRlIDxsaW51eC9nZnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgogCiAjaW5jbHVkZSA8YXNtL3BndGFibGUuaD4KICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgogI2luY2x1ZGUgPGFzbS9tbXVfY29udGV4dC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgogI2luY2x1ZGUgPGFzbS9hcGljLmg+CiAjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KICNpbmNsdWRlIDxhc20vZGVzYy5oPgpAQCAtNjMsNyArNjMsNyBAQAogCQkiXHRtb3ZsICUlZWF4LCUlZnNcbiIKIAkJIlx0bW92bCAlJWVheCwlJWdzXG4iCiAJCSJcdG1vdmwgJSVlYXgsJSVzc1xuIgotCQk6OjogImVheCIsICJtZW1vcnkiKTsKKwkJOiA6IDogImVheCIsICJtZW1vcnkiKTsKICN1bmRlZiBTVFIKICN1bmRlZiBfX1NUUgogfQpAQCAtMjA1LDcgKzIwNSw4IEBACiAKIAlpZiAoaW1hZ2UtPnByZXNlcnZlX2NvbnRleHQpIHsKICNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKLQkJLyogV2UgbmVlZCB0byBwdXQgQVBJQ3MgaW4gbGVnYWN5IG1vZGUgc28gdGhhdCB3ZSBjYW4KKwkJLyoKKwkJICogV2UgbmVlZCB0byBwdXQgQVBJQ3MgaW4gbGVnYWN5IG1vZGUgc28gdGhhdCB3ZSBjYW4KIAkJICogZ2V0IHRpbWVyIGludGVycnVwdHMgaW4gc2Vjb25kIGtlcm5lbC4ga2V4ZWMva2R1bXAKIAkJICogcGF0aHMgYWxyZWFkeSBoYXZlIGNhbGxzIHRvIGRpc2FibGVfSU9fQVBJQygpIGluCiAJCSAqIG9uZSBmb3JtIG9yIG90aGVyLiBrZXhlYyBqdW1wIHBhdGggYWxzbyBuZWVkCkBAIC0yMjcsNyArMjI4LDggQEAKIAkJcGFnZV9saXN0W1BBX1NXQVBfUEFHRV0gPSAocGFnZV90b19wZm4oaW1hZ2UtPnN3YXBfcGFnZSkKIAkJCQkJCTw8IFBBR0VfU0hJRlQpOwogCi0JLyogVGhlIHNlZ21lbnQgcmVnaXN0ZXJzIGFyZSBmdW5ueSB0aGluZ3MsIHRoZXkgaGF2ZSBib3RoIGEKKwkvKgorCSAqIFRoZSBzZWdtZW50IHJlZ2lzdGVycyBhcmUgZnVubnkgdGhpbmdzLCB0aGV5IGhhdmUgYm90aCBhCiAJICogdmlzaWJsZSBhbmQgYW4gaW52aXNpYmxlIHBhcnQuICBXaGVuZXZlciB0aGUgdmlzaWJsZSBwYXJ0IGlzCiAJICogc2V0IHRvIGEgc3BlY2lmaWMgc2VsZWN0b3IsIHRoZSBpbnZpc2libGUgcGFydCBpcyBsb2FkZWQKIAkgKiB3aXRoIGZyb20gYSB0YWJsZSBpbiBtZW1vcnkuICBBdCBubyBvdGhlciB0aW1lIGlzIHRoZQpAQCAtMjM3LDExICsyMzksMTIgQEAKIAkgKiBzZWdtZW50cywgYmVmb3JlIEkgemFwIHRoZSBnZHQgd2l0aCBhbiBpbnZhbGlkIHZhbHVlLgogCSAqLwogCWxvYWRfc2VnbWVudHMoKTsKLQkvKiBUaGUgZ2R0ICYgaWR0IGFyZSBub3cgaW52YWxpZC4KKwkvKgorCSAqIFRoZSBnZHQgJiBpZHQgYXJlIG5vdyBpbnZhbGlkLgogCSAqIElmIHlvdSB3YW50IHRvIGxvYWQgdGhlbSB5b3UgbXVzdCBzZXQgdXAgeW91ciBvd24gaWR0ICYgZ2R0LgogCSAqLwotCXNldF9nZHQocGh5c190b192aXJ0KDApLDApOwotCXNldF9pZHQocGh5c190b192aXJ0KDApLDApOworCXNldF9nZHQocGh5c190b192aXJ0KDApLCAwKTsKKwlzZXRfaWR0KHBoeXNfdG9fdmlydCgwKSwgMCk7CiAKIAkvKiBub3cgY2FsbCBpdCAqLwogCWltYWdlLT5zdGFydCA9IHJlbG9jYXRlX2tlcm5lbF9wdHIoKHVuc2lnbmVkIGxvbmcpaW1hZ2UtPmhlYWQsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jIGIvYXJjaC94ODYva2VybmVsL21hY2hpbmVfa2V4ZWNfNjQuYwppbmRleCA2OTkzZDUxLi44OWNlYTRkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvbWFjaGluZV9rZXhlY182NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9tYWNoaW5lX2tleGVjXzY0LmMKQEAgLTEyLDExICsxMiw0NyBAQAogI2luY2x1ZGUgPGxpbnV4L3JlYm9vdC5oPgogI2luY2x1ZGUgPGxpbnV4L251bWEuaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPGxpbnV4L3N1c3BlbmQuaD4KIAogI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+CiAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+CiAjaW5jbHVkZSA8YXNtL21tdV9jb250ZXh0Lmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CisKK3N0YXRpYyBpbnQgaW5pdF9vbmVfbGV2ZWwyX3BhZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UsIHBnZF90ICpwZ2QsCisJCQkJdW5zaWduZWQgbG9uZyBhZGRyKQoreworCXB1ZF90ICpwdWQ7CisJcG1kX3QgKnBtZDsKKwlzdHJ1Y3QgcGFnZSAqcGFnZTsKKwlpbnQgcmVzdWx0ID0gLUVOT01FTTsKKworCWFkZHIgJj0gUE1EX01BU0s7CisJcGdkICs9IHBnZF9pbmRleChhZGRyKTsKKwlpZiAoIXBnZF9wcmVzZW50KCpwZ2QpKSB7CisJCXBhZ2UgPSBraW1hZ2VfYWxsb2NfY29udHJvbF9wYWdlcyhpbWFnZSwgMCk7CisJCWlmICghcGFnZSkKKwkJCWdvdG8gb3V0OworCQlwdWQgPSAocHVkX3QgKilwYWdlX2FkZHJlc3MocGFnZSk7CisJCW1lbXNldChwdWQsIDAsIFBBR0VfU0laRSk7CisJCXNldF9wZ2QocGdkLCBfX3BnZChfX3BhKHB1ZCkgfCBfS0VSTlBHX1RBQkxFKSk7CisJfQorCXB1ZCA9IHB1ZF9vZmZzZXQocGdkLCBhZGRyKTsKKwlpZiAoIXB1ZF9wcmVzZW50KCpwdWQpKSB7CisJCXBhZ2UgPSBraW1hZ2VfYWxsb2NfY29udHJvbF9wYWdlcyhpbWFnZSwgMCk7CisJCWlmICghcGFnZSkKKwkJCWdvdG8gb3V0OworCQlwbWQgPSAocG1kX3QgKilwYWdlX2FkZHJlc3MocGFnZSk7CisJCW1lbXNldChwbWQsIDAsIFBBR0VfU0laRSk7CisJCXNldF9wdWQocHVkLCBfX3B1ZChfX3BhKHBtZCkgfCBfS0VSTlBHX1RBQkxFKSk7CisJfQorCXBtZCA9IHBtZF9vZmZzZXQocHVkLCBhZGRyKTsKKwlpZiAoIXBtZF9wcmVzZW50KCpwbWQpKQorCQlzZXRfcG1kKHBtZCwgX19wbWQoYWRkciB8IF9fUEFHRV9LRVJORUxfTEFSR0VfRVhFQykpOworCXJlc3VsdCA9IDA7CitvdXQ6CisJcmV0dXJuIHJlc3VsdDsKK30KIAogc3RhdGljIHZvaWQgaW5pdF9sZXZlbDJfcGFnZShwbWRfdCAqbGV2ZWwycCwgdW5zaWduZWQgbG9uZyBhZGRyKQogewpAQCAtODMsOSArMTE5LDggQEAKIAkJfQogCQlsZXZlbDNwID0gKHB1ZF90ICopcGFnZV9hZGRyZXNzKHBhZ2UpOwogCQlyZXN1bHQgPSBpbml0X2xldmVsM19wYWdlKGltYWdlLCBsZXZlbDNwLCBhZGRyLCBsYXN0X2FkZHIpOwotCQlpZiAocmVzdWx0KSB7CisJCWlmIChyZXN1bHQpCiAJCQlnb3RvIG91dDsKLQkJfQogCQlzZXRfcGdkKGxldmVsNHArKywgX19wZ2QoX19wYShsZXZlbDNwKSB8IF9LRVJOUEdfVEFCTEUpKTsKIAkJYWRkciArPSBQR0RJUl9TSVpFOwogCX0KQEAgLTE1Niw2ICsxOTEsMTMgQEAKIAlyZXN1bHQgPSBpbml0X2xldmVsNF9wYWdlKGltYWdlLCBsZXZlbDRwLCAwLCBtYXhfcGZuIDw8IFBBR0VfU0hJRlQpOwogCWlmIChyZXN1bHQpCiAJCXJldHVybiByZXN1bHQ7CisJLyoKKwkgKiBpbWFnZS0+c3RhcnQgbWF5IGJlIG91dHNpZGUgMCB+IG1heF9wZm4sIGZvciBleGFtcGxlIHdoZW4KKwkgKiBqdW1wIGJhY2sgdG8gb3JpZ2luYWwga2VybmVsIGZyb20ga2V4ZWNlZCBrZXJuZWwKKwkgKi8KKwlyZXN1bHQgPSBpbml0X29uZV9sZXZlbDJfcGFnZShpbWFnZSwgbGV2ZWw0cCwgaW1hZ2UtPnN0YXJ0KTsKKwlpZiAocmVzdWx0KQorCQlyZXR1cm4gcmVzdWx0OwogCXJldHVybiBpbml0X3RyYW5zaXRpb25fcGd0YWJsZShpbWFnZSwgbGV2ZWw0cCk7CiB9CiAKQEAgLTIyOSwyMCArMjcxLDQ1IEBACiB7CiAJdW5zaWduZWQgbG9uZyBwYWdlX2xpc3RbUEFHRVNfTlJdOwogCXZvaWQgKmNvbnRyb2xfcGFnZTsKKwlpbnQgc2F2ZV9mdHJhY2VfZW5hYmxlZDsKIAotCXRyYWNlcl9kaXNhYmxlKCk7CisjaWZkZWYgQ09ORklHX0tFWEVDX0pVTVAKKwlpZiAoa2V4ZWNfaW1hZ2UtPnByZXNlcnZlX2NvbnRleHQpCisJCXNhdmVfcHJvY2Vzc29yX3N0YXRlKCk7CisjZW5kaWYKKworCXNhdmVfZnRyYWNlX2VuYWJsZWQgPSBfX2Z0cmFjZV9lbmFibGVkX3NhdmUoKTsKIAogCS8qIEludGVycnVwdHMgYXJlbid0IGFjY2VwdGFibGUgd2hpbGUgd2UgcmVib290ICovCiAJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAorCWlmIChpbWFnZS0+cHJlc2VydmVfY29udGV4dCkgeworI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQworCQkvKgorCQkgKiBXZSBuZWVkIHRvIHB1dCBBUElDcyBpbiBsZWdhY3kgbW9kZSBzbyB0aGF0IHdlIGNhbgorCQkgKiBnZXQgdGltZXIgaW50ZXJydXB0cyBpbiBzZWNvbmQga2VybmVsLiBrZXhlYy9rZHVtcAorCQkgKiBwYXRocyBhbHJlYWR5IGhhdmUgY2FsbHMgdG8gZGlzYWJsZV9JT19BUElDKCkgaW4KKwkJICogb25lIGZvcm0gb3Igb3RoZXIuIGtleGVjIGp1bXAgcGF0aCBhbHNvIG5lZWQKKwkJICogb25lLgorCQkgKi8KKwkJZGlzYWJsZV9JT19BUElDKCk7CisjZW5kaWYKKwl9CisKIAljb250cm9sX3BhZ2UgPSBwYWdlX2FkZHJlc3MoaW1hZ2UtPmNvbnRyb2xfY29kZV9wYWdlKSArIFBBR0VfU0laRTsKLQltZW1jcHkoY29udHJvbF9wYWdlLCByZWxvY2F0ZV9rZXJuZWwsIFBBR0VfU0laRSk7CisJbWVtY3B5KGNvbnRyb2xfcGFnZSwgcmVsb2NhdGVfa2VybmVsLCBLRVhFQ19DT05UUk9MX0NPREVfTUFYX1NJWkUpOwogCiAJcGFnZV9saXN0W1BBX0NPTlRST0xfUEFHRV0gPSB2aXJ0X3RvX3BoeXMoY29udHJvbF9wYWdlKTsKKwlwYWdlX2xpc3RbVkFfQ09OVFJPTF9QQUdFXSA9ICh1bnNpZ25lZCBsb25nKWNvbnRyb2xfcGFnZTsKIAlwYWdlX2xpc3RbUEFfVEFCTEVfUEFHRV0gPQogCSAgKHVuc2lnbmVkIGxvbmcpX19wYShwYWdlX2FkZHJlc3MoaW1hZ2UtPmNvbnRyb2xfY29kZV9wYWdlKSk7CiAKLQkvKiBUaGUgc2VnbWVudCByZWdpc3RlcnMgYXJlIGZ1bm55IHRoaW5ncywgdGhleSBoYXZlIGJvdGggYQorCWlmIChpbWFnZS0+dHlwZSA9PSBLRVhFQ19UWVBFX0RFRkFVTFQpCisJCXBhZ2VfbGlzdFtQQV9TV0FQX1BBR0VdID0gKHBhZ2VfdG9fcGZuKGltYWdlLT5zd2FwX3BhZ2UpCisJCQkJCQk8PCBQQUdFX1NISUZUKTsKKworCS8qCisJICogVGhlIHNlZ21lbnQgcmVnaXN0ZXJzIGFyZSBmdW5ueSB0aGluZ3MsIHRoZXkgaGF2ZSBib3RoIGEKIAkgKiB2aXNpYmxlIGFuZCBhbiBpbnZpc2libGUgcGFydC4gIFdoZW5ldmVyIHRoZSB2aXNpYmxlIHBhcnQgaXMKIAkgKiBzZXQgdG8gYSBzcGVjaWZpYyBzZWxlY3RvciwgdGhlIGludmlzaWJsZSBwYXJ0IGlzIGxvYWRlZAogCSAqIHdpdGggZnJvbSBhIHRhYmxlIGluIG1lbW9yeS4gIEF0IG5vIG90aGVyIHRpbWUgaXMgdGhlCkBAIC0yNTIsMTUgKzMxOSwyNSBAQAogCSAqIHNlZ21lbnRzLCBiZWZvcmUgSSB6YXAgdGhlIGdkdCB3aXRoIGFuIGludmFsaWQgdmFsdWUuCiAJICovCiAJbG9hZF9zZWdtZW50cygpOwotCS8qIFRoZSBnZHQgJiBpZHQgYXJlIG5vdyBpbnZhbGlkLgorCS8qCisJICogVGhlIGdkdCAmIGlkdCBhcmUgbm93IGludmFsaWQuCiAJICogSWYgeW91IHdhbnQgdG8gbG9hZCB0aGVtIHlvdSBtdXN0IHNldCB1cCB5b3VyIG93biBpZHQgJiBnZHQuCiAJICovCi0Jc2V0X2dkdChwaHlzX3RvX3ZpcnQoMCksMCk7Ci0Jc2V0X2lkdChwaHlzX3RvX3ZpcnQoMCksMCk7CisJc2V0X2dkdChwaHlzX3RvX3ZpcnQoMCksIDApOworCXNldF9pZHQocGh5c190b192aXJ0KDApLCAwKTsKIAogCS8qIG5vdyBjYWxsIGl0ICovCi0JcmVsb2NhdGVfa2VybmVsKCh1bnNpZ25lZCBsb25nKWltYWdlLT5oZWFkLCAodW5zaWduZWQgbG9uZylwYWdlX2xpc3QsCi0JCQlpbWFnZS0+c3RhcnQpOworCWltYWdlLT5zdGFydCA9IHJlbG9jYXRlX2tlcm5lbCgodW5zaWduZWQgbG9uZylpbWFnZS0+aGVhZCwKKwkJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcpcGFnZV9saXN0LAorCQkJCSAgICAgICBpbWFnZS0+c3RhcnQsCisJCQkJICAgICAgIGltYWdlLT5wcmVzZXJ2ZV9jb250ZXh0KTsKKworI2lmZGVmIENPTkZJR19LRVhFQ19KVU1QCisJaWYgKGtleGVjX2ltYWdlLT5wcmVzZXJ2ZV9jb250ZXh0KQorCQlyZXN0b3JlX3Byb2Nlc3Nvcl9zdGF0ZSgpOworI2VuZGlmCisKKwlfX2Z0cmFjZV9lbmFibGVkX3Jlc3RvcmUoc2F2ZV9mdHJhY2VfZW5hYmxlZCk7CiB9CiAKIHZvaWQgYXJjaF9jcmFzaF9zYXZlX3ZtY29yZWluZm8odm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9tbWNvbmYtZmFtMTBoXzY0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvbW1jb25mLWZhbTEwaF82NC5jCmluZGV4IDY2NmU0M2QuLjcxMmQxNWYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9tbWNvbmYtZmFtMTBoXzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL21tY29uZi1mYW0xMGhfNjQuYwpAQCAtMjI2LDcgKzIyNiw3IEBACiAgICAgICAgIHJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19kZXZpbml0ZGF0YSBtbWNvbmZfZG1pX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19jcHVpbml0Y29uc3QgbW1jb25mX2RtaV90YWJsZVtdID0gewogICAgICAgICB7CiAgICAgICAgICAgICAgICAgLmNhbGxiYWNrID0gc2V0X2NoZWNrX2VuYWJsZV9hbWRfbW1jb25mLAogICAgICAgICAgICAgICAgIC5pZGVudCA9ICJTdW4gTWljcm9zeXN0ZW1zIE1hY2hpbmUiLApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL21wcGFyc2UuYyBiL2FyY2gveDg2L2tlcm5lbC9tcHBhcnNlLmMKaW5kZXggMzdjYjFiZC4uZGNlOTlkYyAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL21wcGFyc2UuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvbXBwYXJzZS5jCkBAIC0xMDksOSArMTA5LDYgQEAKIAl9IGVsc2UKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiVW5rbm93biBidXN0eXBlICVzIC0gaWdub3JpbmdcbiIsIHN0cik7CiB9Ci0jZW5kaWYKLQotI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwogCiBzdGF0aWMgaW50IGJhZF9pb2FwaWModW5zaWduZWQgbG9uZyBhZGRyZXNzKQogewpAQCAtMjI0LDggKzIyMSwxMiBAQAogCWlmICgrK21wX2lycV9lbnRyaWVzID09IE1BWF9JUlFfU09VUkNFUykKIAkJcGFuaWMoIk1heCAjIG9mIGlycSBzb3VyY2VzIGV4Y2VlZGVkISFcbiIpOwogfQorI2Vsc2UgLyogQ09ORklHX1g4Nl9JT19BUElDICovCitzdGF0aWMgaW5saW5lIHZvaWQgX19pbml0IE1QX2J1c19pbmZvKHN0cnVjdCBtcGNfYnVzICptKSB7fQorc3RhdGljIGlubGluZSB2b2lkIF9faW5pdCBNUF9pb2FwaWNfaW5mbyhzdHJ1Y3QgbXBjX2lvYXBpYyAqbSkge30KK3N0YXRpYyBpbmxpbmUgdm9pZCBfX2luaXQgTVBfaW50c3JjX2luZm8oc3RydWN0IG1wY19pbnRzcmMgKm0pIHt9CisjZW5kaWYgLyogQ09ORklHX1g4Nl9JT19BUElDICovCiAKLSNlbmRpZgogCiBzdGF0aWMgdm9pZCBfX2luaXQgTVBfbGludHNyY19pbmZvKHN0cnVjdCBtcGNfbGludHNyYyAqbSkKIHsKQEAgLTI3NSw2ICsyNzYsMjAgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIHZvaWQgc2tpcF9lbnRyeSh1bnNpZ25lZCBjaGFyICoqcHRyLCBpbnQgKmNvdW50LCBpbnQgc2l6ZSkKK3sKKwkqcHRyICs9IHNpemU7CisJKmNvdW50ICs9IHNpemU7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCBzbXBfZHVtcF9tcHRhYmxlKHN0cnVjdCBtcGNfdGFibGUgKm1wYywgdW5zaWduZWQgY2hhciAqbXB0KQoreworCXByaW50ayhLRVJOX0VSUiAiWW91ciBtcHRhYmxlIGlzIHdyb25nLCBjb250YWN0IHlvdXIgSFcgdmVuZG9yIVxuIgorCQkidHlwZSAleFxuIiwgKm1wdCk7CisJcHJpbnRfaGV4X2R1bXAoS0VSTl9FUlIsICIgICIsIERVTVBfUFJFRklYX0FERFJFU1MsIDE2LAorCQkJMSwgbXBjLCBtcGMtPmxlbmd0aCwgMSk7Cit9CisKIHN0YXRpYyBpbnQgX19pbml0IHNtcF9yZWFkX21wYyhzdHJ1Y3QgbXBjX3RhYmxlICptcGMsIHVuc2lnbmVkIGVhcmx5KQogewogCWNoYXIgc3RyWzE2XTsKQEAgLTMxMCw2MSArMzI1LDMwIEBACiAJd2hpbGUgKGNvdW50IDwgbXBjLT5sZW5ndGgpIHsKIAkJc3dpdGNoICgqbXB0KSB7CiAJCWNhc2UgTVBfUFJPQ0VTU09SOgotCQkJewotCQkJCXN0cnVjdCBtcGNfY3B1ICptID0gKHN0cnVjdCBtcGNfY3B1ICopbXB0OwotCQkJCS8qIEFDUEkgbWF5IGhhdmUgYWxyZWFkeSBwcm92aWRlZCB0aGlzIGRhdGEgKi8KLQkJCQlpZiAoIWFjcGlfbGFwaWMpCi0JCQkJCU1QX3Byb2Nlc3Nvcl9pbmZvKG0pOwotCQkJCW1wdCArPSBzaXplb2YoKm0pOwotCQkJCWNvdW50ICs9IHNpemVvZigqbSk7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQkvKiBBQ1BJIG1heSBoYXZlIGFscmVhZHkgcHJvdmlkZWQgdGhpcyBkYXRhICovCisJCQlpZiAoIWFjcGlfbGFwaWMpCisJCQkJTVBfcHJvY2Vzc29yX2luZm8oKHN0cnVjdCBtcGNfY3B1ICopbXB0KTsKKwkJCXNraXBfZW50cnkoJm1wdCwgJmNvdW50LCBzaXplb2Yoc3RydWN0IG1wY19jcHUpKTsKKwkJCWJyZWFrOwogCQljYXNlIE1QX0JVUzoKLQkJCXsKLQkJCQlzdHJ1Y3QgbXBjX2J1cyAqbSA9IChzdHJ1Y3QgbXBjX2J1cyAqKW1wdDsKLSNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKLQkJCQlNUF9idXNfaW5mbyhtKTsKLSNlbmRpZgotCQkJCW1wdCArPSBzaXplb2YoKm0pOwotCQkJCWNvdW50ICs9IHNpemVvZigqbSk7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQlNUF9idXNfaW5mbygoc3RydWN0IG1wY19idXMgKiltcHQpOworCQkJc2tpcF9lbnRyeSgmbXB0LCAmY291bnQsIHNpemVvZihzdHJ1Y3QgbXBjX2J1cykpOworCQkJYnJlYWs7CiAJCWNhc2UgTVBfSU9BUElDOgotCQkJewotI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwotCQkJCXN0cnVjdCBtcGNfaW9hcGljICptID0gKHN0cnVjdCBtcGNfaW9hcGljICopbXB0OwotCQkJCU1QX2lvYXBpY19pbmZvKG0pOwotI2VuZGlmCi0JCQkJbXB0ICs9IHNpemVvZihzdHJ1Y3QgbXBjX2lvYXBpYyk7Ci0JCQkJY291bnQgKz0gc2l6ZW9mKHN0cnVjdCBtcGNfaW9hcGljKTsKLQkJCQlicmVhazsKLQkJCX0KKwkJCU1QX2lvYXBpY19pbmZvKChzdHJ1Y3QgbXBjX2lvYXBpYyAqKW1wdCk7CisJCQlza2lwX2VudHJ5KCZtcHQsICZjb3VudCwgc2l6ZW9mKHN0cnVjdCBtcGNfaW9hcGljKSk7CisJCQlicmVhazsKIAkJY2FzZSBNUF9JTlRTUkM6Ci0JCQl7Ci0jaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCi0JCQkJc3RydWN0IG1wY19pbnRzcmMgKm0gPSAoc3RydWN0IG1wY19pbnRzcmMgKiltcHQ7Ci0KLQkJCQlNUF9pbnRzcmNfaW5mbyhtKTsKLSNlbmRpZgotCQkJCW1wdCArPSBzaXplb2Yoc3RydWN0IG1wY19pbnRzcmMpOwotCQkJCWNvdW50ICs9IHNpemVvZihzdHJ1Y3QgbXBjX2ludHNyYyk7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQlNUF9pbnRzcmNfaW5mbygoc3RydWN0IG1wY19pbnRzcmMgKiltcHQpOworCQkJc2tpcF9lbnRyeSgmbXB0LCAmY291bnQsIHNpemVvZihzdHJ1Y3QgbXBjX2ludHNyYykpOworCQkJYnJlYWs7CiAJCWNhc2UgTVBfTElOVFNSQzoKLQkJCXsKLQkJCQlzdHJ1Y3QgbXBjX2xpbnRzcmMgKm0gPQotCQkJCSAgICAoc3RydWN0IG1wY19saW50c3JjICopbXB0OwotCQkJCU1QX2xpbnRzcmNfaW5mbyhtKTsKLQkJCQltcHQgKz0gc2l6ZW9mKCptKTsKLQkJCQljb3VudCArPSBzaXplb2YoKm0pOwotCQkJCWJyZWFrOwotCQkJfQorCQkJTVBfbGludHNyY19pbmZvKChzdHJ1Y3QgbXBjX2xpbnRzcmMgKiltcHQpOworCQkJc2tpcF9lbnRyeSgmbXB0LCAmY291bnQsIHNpemVvZihzdHJ1Y3QgbXBjX2xpbnRzcmMpKTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJLyogd3JvbmcgbXB0YWJsZSAqLwotCQkJcHJpbnRrKEtFUk5fRVJSICJZb3VyIG1wdGFibGUgaXMgd3JvbmcsIGNvbnRhY3QgeW91ciBIVyB2ZW5kb3IhXG4iKTsKLQkJCXByaW50ayhLRVJOX0VSUiAidHlwZSAleFxuIiwgKm1wdCk7Ci0JCQlwcmludF9oZXhfZHVtcChLRVJOX0VSUiwgIiAgIiwgRFVNUF9QUkVGSVhfQUREUkVTUywgMTYsCi0JCQkJCTEsIG1wYywgbXBjLT5sZW5ndGgsIDEpOworCQkJc21wX2R1bXBfbXB0YWJsZShtcGMsIG1wdCk7CiAJCQljb3VudCA9IG1wYy0+bGVuZ3RoOwogCQkJYnJlYWs7CiAJCX0KQEAgLTU1OCw2ICs1NDIsNjggQEAKIAogc3RhdGljIHN0cnVjdCBtcGZfaW50ZWwgKm1wZl9mb3VuZDsKIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IGdldF9tcGNfc2l6ZSh1bnNpZ25lZCBsb25nIHBoeXNwdHIpCit7CisJc3RydWN0IG1wY190YWJsZSAqbXBjOworCXVuc2lnbmVkIGxvbmcgc2l6ZTsKKworCW1wYyA9IGVhcmx5X2lvcmVtYXAocGh5c3B0ciwgUEFHRV9TSVpFKTsKKwlzaXplID0gbXBjLT5sZW5ndGg7CisJZWFybHlfaW91bm1hcChtcGMsIFBBR0VfU0laRSk7CisJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiICBtcGM6ICVseC0lbHhcbiIsIHBoeXNwdHIsIHBoeXNwdHIgKyBzaXplKTsKKworCXJldHVybiBzaXplOworfQorCitzdGF0aWMgaW50IF9faW5pdCBjaGVja19waHlzcHRyKHN0cnVjdCBtcGZfaW50ZWwgKm1wZiwgdW5zaWduZWQgaW50IGVhcmx5KQoreworCXN0cnVjdCBtcGNfdGFibGUgKm1wYzsKKwl1bnNpZ25lZCBsb25nIHNpemU7CisKKwlzaXplID0gZ2V0X21wY19zaXplKG1wZi0+cGh5c3B0cik7CisJbXBjID0gZWFybHlfaW9yZW1hcChtcGYtPnBoeXNwdHIsIHNpemUpOworCS8qCisJICogUmVhZCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgdGFibGUuICBBbnl0aGluZyBoZXJlIHdpbGwKKwkgKiBvdmVycmlkZSB0aGUgZGVmYXVsdHMuCisJICovCisJaWYgKCFzbXBfcmVhZF9tcGMobXBjLCBlYXJseSkpIHsKKyNpZmRlZiBDT05GSUdfWDg2X0xPQ0FMX0FQSUMKKwkJc21wX2ZvdW5kX2NvbmZpZyA9IDA7CisjZW5kaWYKKwkJcHJpbnRrKEtFUk5fRVJSICJCSU9TIGJ1ZywgTVAgdGFibGUgZXJyb3JzIGRldGVjdGVkIS4uLlxuIgorCQkJIi4uLiBkaXNhYmxpbmcgU01QIHN1cHBvcnQuICh0ZWxsIHlvdXIgaHcgdmVuZG9yKVxuIik7CisJCWVhcmx5X2lvdW5tYXAobXBjLCBzaXplKTsKKwkJcmV0dXJuIC0xOworCX0KKwllYXJseV9pb3VubWFwKG1wYywgc2l6ZSk7CisKKwlpZiAoZWFybHkpCisJCXJldHVybiAtMTsKKworI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQworCS8qCisJICogSWYgdGhlcmUgYXJlIG5vIGV4cGxpY2l0IE1QIElSUSBlbnRyaWVzLCB0aGVuIHdlIGFyZQorCSAqIGJyb2tlbi4gIFdlIHNldCB1cCBtb3N0IG9mIHRoZSBsb3cgMTYgSU8tQVBJQyBwaW5zIHRvCisJICogSVNBIGRlZmF1bHRzIGFuZCBob3BlIGl0IHdpbGwgd29yay4KKwkgKi8KKwlpZiAoIW1wX2lycV9lbnRyaWVzKSB7CisJCXN0cnVjdCBtcGNfYnVzIGJ1czsKKworCQlwcmludGsoS0VSTl9FUlIgIkJJT1MgYnVnLCBubyBleHBsaWNpdCBJUlEgZW50cmllcywgIgorCQkgICAgICAgInVzaW5nIGRlZmF1bHQgbXB0YWJsZS4gKHRlbGwgeW91ciBodyB2ZW5kb3IpXG4iKTsKKworCQlidXMudHlwZSA9IE1QX0JVUzsKKwkJYnVzLmJ1c2lkID0gMDsKKwkJbWVtY3B5KGJ1cy5idXN0eXBlLCAiSVNBICAgIiwgNik7CisJCU1QX2J1c19pbmZvKCZidXMpOworCisJCWNvbnN0cnVjdF9kZWZhdWx0X2lvaXJxX21wdGFibGUoMCk7CisJfQorI2VuZGlmCisKKwlyZXR1cm4gMDsKK30KKwogLyoKICAqIFNjYW4gdGhlIG1lbW9yeSBibG9ja3MgZm9yIGFuIFNNUCBjb25maWd1cmF0aW9uIGJsb2NrLgogICovCkBAIC02MTEsNDUgKzY1Nyw4IEBACiAJCWNvbnN0cnVjdF9kZWZhdWx0X0lTQV9tcHRhYmxlKG1wZi0+ZmVhdHVyZTEpOwogCiAJfSBlbHNlIGlmIChtcGYtPnBoeXNwdHIpIHsKLQotCQkvKgotCQkgKiBSZWFkIHRoZSBwaHlzaWNhbCBoYXJkd2FyZSB0YWJsZS4gIEFueXRoaW5nIGhlcmUgd2lsbAotCQkgKiBvdmVycmlkZSB0aGUgZGVmYXVsdHMuCi0JCSAqLwotCQlpZiAoIXNtcF9yZWFkX21wYyhwaHlzX3RvX3ZpcnQobXBmLT5waHlzcHRyKSwgZWFybHkpKSB7Ci0jaWZkZWYgQ09ORklHX1g4Nl9MT0NBTF9BUElDCi0JCQlzbXBfZm91bmRfY29uZmlnID0gMDsKLSNlbmRpZgotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIkJJT1MgYnVnLCBNUCB0YWJsZSBlcnJvcnMgZGV0ZWN0ZWQhLi4uXG4iKTsKLQkJCXByaW50ayhLRVJOX0VSUiAiLi4uIGRpc2FibGluZyBTTVAgc3VwcG9ydC4gIgotCQkJICAgICAgICIodGVsbCB5b3VyIGh3IHZlbmRvcilcbiIpOworCQlpZiAoY2hlY2tfcGh5c3B0cihtcGYsIGVhcmx5KSkKIAkJCXJldHVybjsKLQkJfQotCi0JCWlmIChlYXJseSkKLQkJCXJldHVybjsKLSNpZmRlZiBDT05GSUdfWDg2X0lPX0FQSUMKLQkJLyoKLQkJICogSWYgdGhlcmUgYXJlIG5vIGV4cGxpY2l0IE1QIElSUSBlbnRyaWVzLCB0aGVuIHdlIGFyZQotCQkgKiBicm9rZW4uICBXZSBzZXQgdXAgbW9zdCBvZiB0aGUgbG93IDE2IElPLUFQSUMgcGlucyB0bwotCQkgKiBJU0EgZGVmYXVsdHMgYW5kIGhvcGUgaXQgd2lsbCB3b3JrLgotCQkgKi8KLQkJaWYgKCFtcF9pcnFfZW50cmllcykgewotCQkJc3RydWN0IG1wY19idXMgYnVzOwotCi0JCQlwcmludGsoS0VSTl9FUlIgIkJJT1MgYnVnLCBubyBleHBsaWNpdCBJUlEgZW50cmllcywgIgotCQkJICAgICAgICJ1c2luZyBkZWZhdWx0IG1wdGFibGUuICIKLQkJCSAgICAgICAiKHRlbGwgeW91ciBodyB2ZW5kb3IpXG4iKTsKLQotCQkJYnVzLnR5cGUgPSBNUF9CVVM7Ci0JCQlidXMuYnVzaWQgPSAwOwotCQkJbWVtY3B5KGJ1cy5idXN0eXBlLCAiSVNBICAgIiwgNik7Ci0JCQlNUF9idXNfaW5mbygmYnVzKTsKLQotCQkJY29uc3RydWN0X2RlZmF1bHRfaW9pcnFfbXB0YWJsZSgwKTsKLQkJfQotI2VuZGlmCiAJfSBlbHNlCiAJCUJVRygpOwogCkBAIC02NzAsNiArNjc5LDMxIEBACiAJX19nZXRfc21wX2NvbmZpZygwKTsKIH0KIAorc3RhdGljIHZvaWQgc21wX3Jlc2VydmVfYm9vdG1lbShzdHJ1Y3QgbXBmX2ludGVsICptcGYpCit7CisJdW5zaWduZWQgbG9uZyBzaXplID0gZ2V0X21wY19zaXplKG1wZi0+cGh5c3B0cik7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCS8qCisJICogV2UgY2Fubm90IGFjY2VzcyB0byBNUEMgdGFibGUgdG8gY29tcHV0ZSB0YWJsZSBzaXplIHlldCwKKwkgKiBhcyBvbmx5IGZldyBtZWdhYnl0ZXMgZnJvbSB0aGUgYm90dG9tIGlzIG1hcHBlZCBub3cuCisJICogUEMtOTgwMCdzIE1QQyB0YWJsZSBwbGFjZXMgb24gdGhlIHZlcnkgbGFzdCBvZiBwaHlzaWNhbAorCSAqIG1lbW9yeTsgc28gdGhhdCBzaW1wbHkgcmVzZXJ2aW5nIFBBR0VfU0laRSBmcm9tIG1wZi0+cGh5c3B0cgorCSAqIHlpZWxkcyBCVUcoKSBpbiByZXNlcnZlX2Jvb3RtZW0uCisJICogYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSBwaHlzcHRyIGlzIGJlbG93IHRoYW4gbWF4X2xvd19wZm4KKwkgKiB3ZSBkb24ndCBuZWVkIHJlc2VydmUgdGhlIGFyZWEgYWJvdmUgbWF4X2xvd19wZm4KKwkgKi8KKwl1bnNpZ25lZCBsb25nIGVuZCA9IG1heF9sb3dfcGZuICogUEFHRV9TSVpFOworCisJaWYgKG1wZi0+cGh5c3B0ciA8IGVuZCkgeworCQlpZiAobXBmLT5waHlzcHRyICsgc2l6ZSA+IGVuZCkKKwkJCXNpemUgPSBlbmQgLSBtcGYtPnBoeXNwdHI7CisJCXJlc2VydmVfYm9vdG1lbV9nZW5lcmljKG1wZi0+cGh5c3B0ciwgc2l6ZSwgQk9PVE1FTV9ERUZBVUxUKTsKKwl9CisjZWxzZQorCXJlc2VydmVfYm9vdG1lbV9nZW5lcmljKG1wZi0+cGh5c3B0ciwgc2l6ZSwgQk9PVE1FTV9ERUZBVUxUKTsKKyNlbmRpZgorfQorCiBzdGF0aWMgaW50IF9faW5pdCBzbXBfc2Nhbl9jb25maWcodW5zaWduZWQgbG9uZyBiYXNlLCB1bnNpZ25lZCBsb25nIGxlbmd0aCwKIAkJCQkgIHVuc2lnbmVkIHJlc2VydmUpCiB7CkBAIC02OTcsMzYgKzczMSwxMCBAQAogCiAJCQlpZiAoIXJlc2VydmUpCiAJCQkJcmV0dXJuIDE7Ci0JCQlyZXNlcnZlX2Jvb3RtZW1fZ2VuZXJpYyh2aXJ0X3RvX3BoeXMobXBmKSwgUEFHRV9TSVpFLAotCQkJCQlCT09UTUVNX0RFRkFVTFQpOwotCQkJaWYgKG1wZi0+cGh5c3B0cikgewotCQkJCXVuc2lnbmVkIGxvbmcgc2l6ZSA9IFBBR0VfU0laRTsKLSNpZmRlZiBDT05GSUdfWDg2XzMyCi0JCQkJLyoKLQkJCQkgKiBXZSBjYW5ub3QgYWNjZXNzIHRvIE1QQyB0YWJsZSB0byBjb21wdXRlCi0JCQkJICogdGFibGUgc2l6ZSB5ZXQsIGFzIG9ubHkgZmV3IG1lZ2FieXRlcyBmcm9tCi0JCQkJICogdGhlIGJvdHRvbSBpcyBtYXBwZWQgbm93LgotCQkJCSAqIFBDLTk4MDAncyBNUEMgdGFibGUgcGxhY2VzIG9uIHRoZSB2ZXJ5IGxhc3QKLQkJCQkgKiBvZiBwaHlzaWNhbCBtZW1vcnk7IHNvIHRoYXQgc2ltcGx5IHJlc2VydmluZwotCQkJCSAqIFBBR0VfU0laRSBmcm9tIG1wZi0+cGh5c3B0ciB5aWVsZHMgQlVHKCkKLQkJCQkgKiBpbiByZXNlcnZlX2Jvb3RtZW0uCi0JCQkJICogYWxzbyBuZWVkIHRvIG1ha2Ugc3VyZSBwaHlzcHRyIGlzIGJlbG93IHRoYW4KLQkJCQkgKiBtYXhfbG93X3BmbgotCQkJCSAqIHdlIGRvbid0IG5lZWQgcmVzZXJ2ZSB0aGUgYXJlYSBhYm92ZSBtYXhfbG93X3BmbgotCQkJCSAqLwotCQkJCXVuc2lnbmVkIGxvbmcgZW5kID0gbWF4X2xvd19wZm4gKiBQQUdFX1NJWkU7Ci0KLQkJCQlpZiAobXBmLT5waHlzcHRyIDwgZW5kKSB7Ci0JCQkJCWlmIChtcGYtPnBoeXNwdHIgKyBzaXplID4gZW5kKQotCQkJCQkJc2l6ZSA9IGVuZCAtIG1wZi0+cGh5c3B0cjsKLQkJCQkJcmVzZXJ2ZV9ib290bWVtX2dlbmVyaWMobXBmLT5waHlzcHRyLCBzaXplLAotCQkJCQkJCUJPT1RNRU1fREVGQVVMVCk7Ci0JCQkJfQotI2Vsc2UKLQkJCQlyZXNlcnZlX2Jvb3RtZW1fZ2VuZXJpYyhtcGYtPnBoeXNwdHIsIHNpemUsCisJCQlyZXNlcnZlX2Jvb3RtZW1fZ2VuZXJpYyh2aXJ0X3RvX3BoeXMobXBmKSwgc2l6ZW9mKCptcGYpLAogCQkJCQkJQk9PVE1FTV9ERUZBVUxUKTsKLSNlbmRpZgotCQkJfQorCQkJaWYgKG1wZi0+cGh5c3B0cikKKwkJCQlzbXBfcmVzZXJ2ZV9ib290bWVtKG1wZik7CiAKIAkJCXJldHVybiAxOwogCQl9CkBAIC04MjksNyArODM3LDU3IEBACiAjZGVmaW5lIFNQQVJFX1NMT1RfTlVNIDIwCiAKIHN0YXRpYyBzdHJ1Y3QgbXBjX2ludHNyYyBfX2luaXRkYXRhICptX3NwYXJlW1NQQVJFX1NMT1RfTlVNXTsKLSNlbmRpZgorCitzdGF0aWMgdm9pZCBjaGVja19pcnFfc3JjKHN0cnVjdCBtcGNfaW50c3JjICptLCBpbnQgKm5yX21fc3BhcmUpCit7CisJaW50IGk7CisKKwlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJPTEQgIik7CisJcHJpbnRfTVBfaW50c3JjX2luZm8obSk7CisKKwlpID0gZ2V0X01QX2ludHNyY19pbmRleChtKTsKKwlpZiAoaSA+IDApIHsKKwkJYXNzaWduX3RvX21wY19pbnRzcmMoJm1wX2lycXNbaV0sIG0pOworCQlhcGljX3ByaW50ayhBUElDX1ZFUkJPU0UsICJORVcgIik7CisJCXByaW50X21wX2lycV9pbmZvKCZtcF9pcnFzW2ldKTsKKwkJcmV0dXJuOworCX0KKwlpZiAoIWkpIHsKKwkJLyogbGVnYWN5LCBkbyBub3RoaW5nICovCisJCXJldHVybjsKKwl9CisJaWYgKCpucl9tX3NwYXJlIDwgU1BBUkVfU0xPVF9OVU0pIHsKKwkJLyoKKwkJICogbm90IGZvdW5kICgtMSksIG9yIGR1cGxpY2F0ZWQgKC0yKSBhcmUgaW52YWxpZCBlbnRyaWVzLAorCQkgKiB3ZSBuZWVkIHRvIHVzZSB0aGUgc2xvdCBsYXRlcgorCQkgKi8KKwkJbV9zcGFyZVsqbnJfbV9zcGFyZV0gPSBtOworCQkqbnJfbV9zcGFyZSArPSAxOworCX0KK30KKyNlbHNlIC8qIENPTkZJR19YODZfSU9fQVBJQyAqLworc3RhdGljIGlubGluZSB2b2lkIGNoZWNrX2lycV9zcmMoc3RydWN0IG1wY19pbnRzcmMgKm0sIGludCAqbnJfbV9zcGFyZSkge30KKyNlbmRpZiAvKiBDT05GSUdfWDg2X0lPX0FQSUMgKi8KKworc3RhdGljIGludCBjaGVja19zbG90KHVuc2lnbmVkIGxvbmcgbXBjX25ld19waHlzLCB1bnNpZ25lZCBsb25nIG1wY19uZXdfbGVuZ3RoLAorCQkgICAgICBpbnQgY291bnQpCit7CisJaWYgKCFtcGNfbmV3X3BoeXMpIHsKKwkJcHJfaW5mbygiTm8gc3BhcmUgc2xvdHMsIHRyeSB0byBhcHBlbmQuLi50YWtlIHlvdXIgcmlzaywgIgorCQkJIm5ldyBtcGNfbGVuZ3RoICV4XG4iLCBjb3VudCk7CisJfSBlbHNlIHsKKwkJaWYgKGNvdW50IDw9IG1wY19uZXdfbGVuZ3RoKQorCQkJcHJfaW5mbygiTm8gc3BhcmUgc2xvdHMsIHRyeSB0byBhcHBlbmQuLi4sICIKKwkJCQkibmV3IG1wY19sZW5ndGggJXhcbiIsIGNvdW50KTsKKwkJZWxzZSB7CisJCQlwcl9lcnIoIm1wY19uZXdfbGVuZ3RoICVseCBpcyB0b28gc21hbGxcbiIsCisJCQkJbXBjX25ld19sZW5ndGgpOworCQkJcmV0dXJuIC0xOworCQl9CisJfQorCisJcmV0dXJuIDA7Cit9CiAKIHN0YXRpYyBpbnQgIF9faW5pdCByZXBsYWNlX2ludHNyY19hbGwoc3RydWN0IG1wY190YWJsZSAqbXBjLAogCQkJCQl1bnNpZ25lZCBsb25nIG1wY19uZXdfcGh5cywKQEAgLTgzNyw3NyArODk1LDMzIEBACiB7CiAjaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCiAJaW50IGk7Ci0JaW50IG5yX21fc3BhcmUgPSAwOwogI2VuZGlmCi0KIAlpbnQgY291bnQgPSBzaXplb2YoKm1wYyk7CisJaW50IG5yX21fc3BhcmUgPSAwOwogCXVuc2lnbmVkIGNoYXIgKm1wdCA9ICgodW5zaWduZWQgY2hhciAqKW1wYykgKyBjb3VudDsKIAogCXByaW50ayhLRVJOX0lORk8gIm1wY19sZW5ndGggJXhcbiIsIG1wYy0+bGVuZ3RoKTsKIAl3aGlsZSAoY291bnQgPCBtcGMtPmxlbmd0aCkgewogCQlzd2l0Y2ggKCptcHQpIHsKIAkJY2FzZSBNUF9QUk9DRVNTT1I6Ci0JCQl7Ci0JCQkJc3RydWN0IG1wY19jcHUgKm0gPSAoc3RydWN0IG1wY19jcHUgKiltcHQ7Ci0JCQkJbXB0ICs9IHNpemVvZigqbSk7Ci0JCQkJY291bnQgKz0gc2l6ZW9mKCptKTsKLQkJCQlicmVhazsKLQkJCX0KKwkJCXNraXBfZW50cnkoJm1wdCwgJmNvdW50LCBzaXplb2Yoc3RydWN0IG1wY19jcHUpKTsKKwkJCWJyZWFrOwogCQljYXNlIE1QX0JVUzoKLQkJCXsKLQkJCQlzdHJ1Y3QgbXBjX2J1cyAqbSA9IChzdHJ1Y3QgbXBjX2J1cyAqKW1wdDsKLQkJCQltcHQgKz0gc2l6ZW9mKCptKTsKLQkJCQljb3VudCArPSBzaXplb2YoKm0pOwotCQkJCWJyZWFrOwotCQkJfQorCQkJc2tpcF9lbnRyeSgmbXB0LCAmY291bnQsIHNpemVvZihzdHJ1Y3QgbXBjX2J1cykpOworCQkJYnJlYWs7CiAJCWNhc2UgTVBfSU9BUElDOgotCQkJewotCQkJCW1wdCArPSBzaXplb2Yoc3RydWN0IG1wY19pb2FwaWMpOwotCQkJCWNvdW50ICs9IHNpemVvZihzdHJ1Y3QgbXBjX2lvYXBpYyk7Ci0JCQkJYnJlYWs7Ci0JCQl9CisJCQlza2lwX2VudHJ5KCZtcHQsICZjb3VudCwgc2l6ZW9mKHN0cnVjdCBtcGNfaW9hcGljKSk7CisJCQlicmVhazsKIAkJY2FzZSBNUF9JTlRTUkM6Ci0JCQl7Ci0jaWZkZWYgQ09ORklHX1g4Nl9JT19BUElDCi0JCQkJc3RydWN0IG1wY19pbnRzcmMgKm0gPSAoc3RydWN0IG1wY19pbnRzcmMgKiltcHQ7Ci0KLQkJCQlwcmludGsoS0VSTl9JTkZPICJPTEQgIik7Ci0JCQkJcHJpbnRfTVBfaW50c3JjX2luZm8obSk7Ci0JCQkJaSA9IGdldF9NUF9pbnRzcmNfaW5kZXgobSk7Ci0JCQkJaWYgKGkgPiAwKSB7Ci0JCQkJCWFzc2lnbl90b19tcGNfaW50c3JjKCZtcF9pcnFzW2ldLCBtKTsKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiTkVXICIpOwotCQkJCQlwcmludF9tcF9pcnFfaW5mbygmbXBfaXJxc1tpXSk7Ci0JCQkJfSBlbHNlIGlmICghaSkgewotCQkJCQkvKiBsZWdhY3ksIGRvIG5vdGhpbmcgKi8KLQkJCQl9IGVsc2UgaWYgKG5yX21fc3BhcmUgPCBTUEFSRV9TTE9UX05VTSkgewotCQkJCQkvKgotCQkJCQkgKiBub3QgZm91bmQgKC0xKSwgb3IgZHVwbGljYXRlZCAoLTIpCi0JCQkJCSAqIGFyZSBpbnZhbGlkIGVudHJpZXMsCi0JCQkJCSAqIHdlIG5lZWQgdG8gdXNlIHRoZSBzbG90ICBsYXRlcgotCQkJCQkgKi8KLQkJCQkJbV9zcGFyZVtucl9tX3NwYXJlXSA9IG07Ci0JCQkJCW5yX21fc3BhcmUrKzsKLQkJCQl9Ci0jZW5kaWYKLQkJCQltcHQgKz0gc2l6ZW9mKHN0cnVjdCBtcGNfaW50c3JjKTsKLQkJCQljb3VudCArPSBzaXplb2Yoc3RydWN0IG1wY19pbnRzcmMpOwotCQkJCWJyZWFrOwotCQkJfQorCQkJY2hlY2tfaXJxX3NyYygoc3RydWN0IG1wY19pbnRzcmMgKiltcHQsICZucl9tX3NwYXJlKTsKKwkJCXNraXBfZW50cnkoJm1wdCwgJmNvdW50LCBzaXplb2Yoc3RydWN0IG1wY19pbnRzcmMpKTsKKwkJCWJyZWFrOwogCQljYXNlIE1QX0xJTlRTUkM6Ci0JCQl7Ci0JCQkJc3RydWN0IG1wY19saW50c3JjICptID0KLQkJCQkgICAgKHN0cnVjdCBtcGNfbGludHNyYyAqKW1wdDsKLQkJCQltcHQgKz0gc2l6ZW9mKCptKTsKLQkJCQljb3VudCArPSBzaXplb2YoKm0pOwotCQkJCWJyZWFrOwotCQkJfQorCQkJc2tpcF9lbnRyeSgmbXB0LCAmY291bnQsIHNpemVvZihzdHJ1Y3QgbXBjX2xpbnRzcmMpKTsKKwkJCWJyZWFrOwogCQlkZWZhdWx0OgogCQkJLyogd3JvbmcgbXB0YWJsZSAqLwotCQkJcHJpbnRrKEtFUk5fRVJSICJZb3VyIG1wdGFibGUgaXMgd3JvbmcsIGNvbnRhY3QgeW91ciBIVyB2ZW5kb3IhXG4iKTsKLQkJCXByaW50ayhLRVJOX0VSUiAidHlwZSAleFxuIiwgKm1wdCk7Ci0JCQlwcmludF9oZXhfZHVtcChLRVJOX0VSUiwgIiAgIiwgRFVNUF9QUkVGSVhfQUREUkVTUywgMTYsCi0JCQkJCTEsIG1wYywgbXBjLT5sZW5ndGgsIDEpOworCQkJc21wX2R1bXBfbXB0YWJsZShtcGMsIG1wdCk7CiAJCQlnb3RvIG91dDsKIAkJfQogCX0KQEAgLTkyNCwyMyArOTM4LDE1IEBACiAJCQljb250aW51ZTsKIAogCQlpZiAobnJfbV9zcGFyZSA+IDApIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIipORVcqIGZvdW5kICIpOworCQkJYXBpY19wcmludGsoQVBJQ19WRVJCT1NFLCAiKk5FVyogZm91bmRcbiIpOwogCQkJbnJfbV9zcGFyZS0tOwogCQkJYXNzaWduX3RvX21wY19pbnRzcmMoJm1wX2lycXNbaV0sIG1fc3BhcmVbbnJfbV9zcGFyZV0pOwogCQkJbV9zcGFyZVtucl9tX3NwYXJlXSA9IE5VTEw7CiAJCX0gZWxzZSB7CiAJCQlzdHJ1Y3QgbXBjX2ludHNyYyAqbSA9IChzdHJ1Y3QgbXBjX2ludHNyYyAqKW1wdDsKIAkJCWNvdW50ICs9IHNpemVvZihzdHJ1Y3QgbXBjX2ludHNyYyk7Ci0JCQlpZiAoIW1wY19uZXdfcGh5cykgewotCQkJCXByaW50ayhLRVJOX0lORk8gIk5vIHNwYXJlIHNsb3RzLCB0cnkgdG8gYXBwZW5kLi4udGFrZSB5b3VyIHJpc2ssIG5ldyBtcGNfbGVuZ3RoICV4XG4iLCBjb3VudCk7Ci0JCQl9IGVsc2UgewotCQkJCWlmIChjb3VudCA8PSBtcGNfbmV3X2xlbmd0aCkKLQkJCQkJcHJpbnRrKEtFUk5fSU5GTyAiTm8gc3BhcmUgc2xvdHMsIHRyeSB0byBhcHBlbmQuLi4sIG5ldyBtcGNfbGVuZ3RoICV4XG4iLCBjb3VudCk7Ci0JCQkJZWxzZSB7Ci0JCQkJCXByaW50ayhLRVJOX0VSUiAibXBjX25ld19sZW5ndGggJWx4IGlzIHRvbyBzbWFsbFxuIiwgbXBjX25ld19sZW5ndGgpOwotCQkJCQlnb3RvIG91dDsKLQkJCQl9Ci0JCQl9CisJCQlpZiAoIWNoZWNrX3Nsb3QobXBjX25ld19waHlzLCBtcGNfbmV3X2xlbmd0aCwgY291bnQpKQorCQkJCWdvdG8gb3V0OwogCQkJYXNzaWduX3RvX21wY19pbnRzcmMoJm1wX2lycXNbaV0sIG0pOwogCQkJbXBjLT5sZW5ndGggPSBjb3VudDsKIAkJCW1wdCArPSBzaXplb2Yoc3RydWN0IG1wY19pbnRzcmMpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BhcmF2aXJ0LmMgYi9hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQuYwppbmRleCA2M2RkMzU4Li44ZTQ1ZjQ0IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcGFyYXZpcnQuYwpAQCAtNDcwLDcgKzQ3MCw2IEBACiAjaWYgUEFHRVRBQkxFX0xFVkVMUyA+PSAzCiAjaWZkZWYgQ09ORklHX1g4Nl9QQUUKIAkuc2V0X3B0ZV9hdG9taWMgPSBuYXRpdmVfc2V0X3B0ZV9hdG9taWMsCi0JLnNldF9wdGVfcHJlc2VudCA9IG5hdGl2ZV9zZXRfcHRlX3ByZXNlbnQsCiAJLnB0ZV9jbGVhciA9IG5hdGl2ZV9wdGVfY2xlYXIsCiAJLnBtZF9jbGVhciA9IG5hdGl2ZV9wbWRfY2xlYXIsCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktY2FsZ2FyeV82NC5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1jYWxnYXJ5XzY0LmMKaW5kZXggZDI4YmJkYy4uNzU1YzIxZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1jYWxnYXJ5XzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1jYWxnYXJ5XzY0LmMKQEAgLTM4MCw4ICszODAsOSBAQAogCXJldHVybiB0Ymw7CiB9CiAKLXN0YXRpYyB2b2lkIGNhbGdhcnlfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LAotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LCBpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKQorc3RhdGljIHZvaWQgY2FsZ2FyeV91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAorCQkJICAgICBpbnQgbmVsZW1zLGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCSAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJc3RydWN0IGlvbW11X3RhYmxlICp0YmwgPSBmaW5kX2lvbW11X3RhYmxlKGRldik7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzOwpAQCAtNDA0LDcgKzQwNSw4IEBACiB9CiAKIHN0YXRpYyBpbnQgY2FsZ2FyeV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCWludCBuZWxlbXMsIGludCBkaXJlY3Rpb24pCisJCQkgIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCSAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJc3RydWN0IGlvbW11X3RhYmxlICp0YmwgPSBmaW5kX2lvbW11X3RhYmxlKGRldik7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzOwpAQCAtNDI5LDE1ICs0MzEsMTQgQEAKIAkJcy0+ZG1hX2FkZHJlc3MgPSAoZW50cnkgPDwgUEFHRV9TSElGVCkgfCBzLT5vZmZzZXQ7CiAKIAkJLyogaW5zZXJ0IGludG8gSFcgdGFibGUgKi8KLQkJdGNlX2J1aWxkKHRibCwgZW50cnksIG5wYWdlcywgdmFkZHIgJiBQQUdFX01BU0ssCi0JCQkgIGRpcmVjdGlvbik7CisJCXRjZV9idWlsZCh0YmwsIGVudHJ5LCBucGFnZXMsIHZhZGRyICYgUEFHRV9NQVNLLCBkaXIpOwogCiAJCXMtPmRtYV9sZW5ndGggPSBzLT5sZW5ndGg7CiAJfQogCiAJcmV0dXJuIG5lbGVtczsKIGVycm9yOgotCWNhbGdhcnlfdW5tYXBfc2coZGV2LCBzZywgbmVsZW1zLCBkaXJlY3Rpb24pOworCWNhbGdhcnlfdW5tYXBfc2coZGV2LCBzZywgbmVsZW1zLCBkaXIsIE5VTEwpOwogCWZvcl9lYWNoX3NnKHNnLCBzLCBuZWxlbXMsIGkpIHsKIAkJc2ctPmRtYV9hZGRyZXNzID0gYmFkX2RtYV9hZGRyZXNzOwogCQlzZy0+ZG1hX2xlbmd0aCA9IDA7CkBAIC00NDUsMTAgKzQ0NiwxMiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgZG1hX2FkZHJfdCBjYWxnYXJ5X21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBwaHlzX2FkZHJfdCBwYWRkciwKLQlzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKK3N0YXRpYyBkbWFfYWRkcl90IGNhbGdhcnlfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkgICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJCSAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewotCXZvaWQgKnZhZGRyID0gcGh5c190b192aXJ0KHBhZGRyKTsKKwl2b2lkICp2YWRkciA9IHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldDsKIAl1bnNpZ25lZCBsb25nIHVhZGRyOwogCXVuc2lnbmVkIGludCBucGFnZXM7CiAJc3RydWN0IGlvbW11X3RhYmxlICp0YmwgPSBmaW5kX2lvbW11X3RhYmxlKGRldik7CkBAIC00NTYsMTcgKzQ1OSwxOCBAQAogCXVhZGRyID0gKHVuc2lnbmVkIGxvbmcpdmFkZHI7CiAJbnBhZ2VzID0gaW9tbXVfbnVtX3BhZ2VzKHVhZGRyLCBzaXplLCBQQUdFX1NJWkUpOwogCi0JcmV0dXJuIGlvbW11X2FsbG9jKGRldiwgdGJsLCB2YWRkciwgbnBhZ2VzLCBkaXJlY3Rpb24pOworCXJldHVybiBpb21tdV9hbGxvYyhkZXYsIHRibCwgdmFkZHIsIG5wYWdlcywgZGlyKTsKIH0KIAotc3RhdGljIHZvaWQgY2FsZ2FyeV91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCi0Jc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCitzdGF0aWMgdm9pZCBjYWxnYXJ5X3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyLAorCQkJICAgICAgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkgICAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJc3RydWN0IGlvbW11X3RhYmxlICp0YmwgPSBmaW5kX2lvbW11X3RhYmxlKGRldik7CiAJdW5zaWduZWQgaW50IG5wYWdlczsKIAotCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhkbWFfaGFuZGxlLCBzaXplLCBQQUdFX1NJWkUpOwotCWlvbW11X2ZyZWUodGJsLCBkbWFfaGFuZGxlLCBucGFnZXMpOworCW5wYWdlcyA9IGlvbW11X251bV9wYWdlcyhkbWFfYWRkciwgc2l6ZSwgUEFHRV9TSVpFKTsKKwlpb21tdV9mcmVlKHRibCwgZG1hX2FkZHIsIG5wYWdlcyk7CiB9CiAKIHN0YXRpYyB2b2lkKiBjYWxnYXJ5X2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCkBAIC01MTUsMTMgKzUxOSwxMyBAQAogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpdmFkZHIsIGdldF9vcmRlcihzaXplKSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIGNhbGdhcnlfZG1hX29wcyA9IHsKK3N0YXRpYyBzdHJ1Y3QgZG1hX21hcF9vcHMgY2FsZ2FyeV9kbWFfb3BzID0gewogCS5hbGxvY19jb2hlcmVudCA9IGNhbGdhcnlfYWxsb2NfY29oZXJlbnQsCiAJLmZyZWVfY29oZXJlbnQgPSBjYWxnYXJ5X2ZyZWVfY29oZXJlbnQsCi0JLm1hcF9zaW5nbGUgPSBjYWxnYXJ5X21hcF9zaW5nbGUsCi0JLnVubWFwX3NpbmdsZSA9IGNhbGdhcnlfdW5tYXBfc2luZ2xlLAogCS5tYXBfc2cgPSBjYWxnYXJ5X21hcF9zZywKIAkudW5tYXBfc2cgPSBjYWxnYXJ5X3VubWFwX3NnLAorCS5tYXBfcGFnZSA9IGNhbGdhcnlfbWFwX3BhZ2UsCisJLnVubWFwX3BhZ2UgPSBjYWxnYXJ5X3VubWFwX3BhZ2UsCiB9OwogCiBzdGF0aWMgaW5saW5lIHZvaWQgX19pb21lbSAqIGJ1c25vX3RvX2JiYXIodW5zaWduZWQgY2hhciBudW0pCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1kbWEuYwppbmRleCBiMjU0Mjg1Li5jN2M0Nzc2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLWRtYS5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktZG1hLmMKQEAgLTEsNCArMSw1IEBACiAjaW5jbHVkZSA8bGludXgvZG1hLW1hcHBpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9kbWEtZGVidWcuaD4KICNpbmNsdWRlIDxsaW51eC9kbWFyLmg+CiAjaW5jbHVkZSA8bGludXgvYm9vdG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgpAQCAtMTIsNyArMTMsNyBAQAogCiBzdGF0aWMgaW50IGZvcmJpZF9kYWMgX19yZWFkX21vc3RseTsKIAotc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqZG1hX29wczsKK3N0cnVjdCBkbWFfbWFwX29wcyAqZG1hX29wczsKIEVYUE9SVF9TWU1CT0woZG1hX29wcyk7CiAKIHN0YXRpYyBpbnQgaW9tbXVfc2FjX2ZvcmNlIF9fcmVhZF9tb3N0bHk7CkBAIC00NCw2ICs0NSw5IEBACiB9OwogRVhQT1JUX1NZTUJPTCh4ODZfZG1hX2ZhbGxiYWNrX2Rldik7CiAKKy8qIE51bWJlciBvZiBlbnRyaWVzIHByZWFsbG9jYXRlZCBmb3IgRE1BLUFQSSBkZWJ1Z2dpbmcgKi8KKyNkZWZpbmUgUFJFQUxMT0NfRE1BX0RFQlVHX0VOVFJJRVMgICAgICAgMzI3NjgKKwogaW50IGRtYV9zZXRfbWFzayhzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKQogewogCWlmICghZGV2LT5kbWFfbWFzayB8fCAhZG1hX3N1cHBvcnRlZChkZXYsIG1hc2spKQpAQCAtMjI0LDcgKzIyOCw3IEBACiAKIGludCBkbWFfc3VwcG9ydGVkKHN0cnVjdCBkZXZpY2UgKmRldiwgdTY0IG1hc2spCiB7Ci0Jc3RydWN0IGRtYV9tYXBwaW5nX29wcyAqb3BzID0gZ2V0X2RtYV9vcHMoZGV2KTsKKwlzdHJ1Y3QgZG1hX21hcF9vcHMgKm9wcyA9IGdldF9kbWFfb3BzKGRldik7CiAKICNpZmRlZiBDT05GSUdfUENJCiAJaWYgKG1hc2sgPiAweGZmZmZmZmZmICYmIGZvcmJpZF9kYWMgPiAwKSB7CkBAIC0yNjUsNiArMjY5LDEyIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHBjaV9pb21tdV9pbml0KHZvaWQpCiB7CisJZG1hX2RlYnVnX2luaXQoUFJFQUxMT0NfRE1BX0RFQlVHX0VOVFJJRVMpOworCisjaWZkZWYgQ09ORklHX1BDSQorCWRtYV9kZWJ1Z19hZGRfYnVzKCZwY2lfYnVzX3R5cGUpOworI2VuZGlmCisKIAljYWxnYXJ5X2lvbW11X2luaXQoKTsKIAogCWludGVsX2lvbW11X2luaXQoKTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wY2ktZ2FydF82NC5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKaW5kZXggZDU3NjhiMS4uYjI4NGI1OCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3BjaS1nYXJ0XzY0LmMKQEAgLTI1NSwxMCArMjU1LDEzIEBACiB9CiAKIC8qIE1hcCBhIHNpbmdsZSBhcmVhIGludG8gdGhlIElPTU1VICovCi1zdGF0aWMgZG1hX2FkZHJfdAotZ2FydF9tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgcGh5c19hZGRyX3QgcGFkZHIsIHNpemVfdCBzaXplLCBpbnQgZGlyKQorc3RhdGljIGRtYV9hZGRyX3QgZ2FydF9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCQllbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkJc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJdW5zaWduZWQgbG9uZyBidXM7CisJcGh5c19hZGRyX3QgcGFkZHIgPSBwYWdlX3RvX3BoeXMocGFnZSkgKyBvZmZzZXQ7CiAKIAlpZiAoIWRldikKIAkJZGV2ID0gJng4Nl9kbWFfZmFsbGJhY2tfZGV2OwpAQCAtMjc1LDggKzI3OCw5IEBACiAvKgogICogRnJlZSBhIERNQSBtYXBwaW5nLgogICovCi1zdGF0aWMgdm9pZCBnYXJ0X3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsCi0JCQkgICAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKK3N0YXRpYyB2b2lkIGdhcnRfdW5tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGRtYV9hZGRyX3QgZG1hX2FkZHIsCisJCQkgICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCSAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAl1bnNpZ25lZCBsb25nIGlvbW11X3BhZ2U7CiAJaW50IG5wYWdlczsKQEAgLTI5OCw4ICszMDIsOCBAQAogLyoKICAqIFdyYXBwZXIgZm9yIHBjaV91bm1hcF9zaW5nbGUgd29ya2luZyB3aXRoIHNjYXR0ZXJsaXN0cy4KICAqLwotc3RhdGljIHZvaWQKLWdhcnRfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsIGludCBkaXIpCitzdGF0aWMgdm9pZCBnYXJ0X3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAorCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXN0cnVjdCBzY2F0dGVybGlzdCAqczsKIAlpbnQgaTsKQEAgLTMwNyw3ICszMTEsNyBAQAogCWZvcl9lYWNoX3NnKHNnLCBzLCBuZW50cywgaSkgewogCQlpZiAoIXMtPmRtYV9sZW5ndGggfHwgIXMtPmxlbmd0aCkKIAkJCWJyZWFrOwotCQlnYXJ0X3VubWFwX3NpbmdsZShkZXYsIHMtPmRtYV9hZGRyZXNzLCBzLT5kbWFfbGVuZ3RoLCBkaXIpOworCQlnYXJ0X3VubWFwX3BhZ2UoZGV2LCBzLT5kbWFfYWRkcmVzcywgcy0+ZG1hX2xlbmd0aCwgZGlyLCBOVUxMKTsKIAl9CiB9CiAKQEAgLTMyOSw3ICszMzMsNyBAQAogCQkJYWRkciA9IGRtYV9tYXBfYXJlYShkZXYsIGFkZHIsIHMtPmxlbmd0aCwgZGlyLCAwKTsKIAkJCWlmIChhZGRyID09IGJhZF9kbWFfYWRkcmVzcykgewogCQkJCWlmIChpID4gMCkKLQkJCQkJZ2FydF91bm1hcF9zZyhkZXYsIHNnLCBpLCBkaXIpOworCQkJCQlnYXJ0X3VubWFwX3NnKGRldiwgc2csIGksIGRpciwgTlVMTCk7CiAJCQkJbmVudHMgPSAwOwogCQkJCXNnWzBdLmRtYV9sZW5ndGggPSAwOwogCQkJCWJyZWFrOwpAQCAtNDAwLDggKzQwNCw4IEBACiAgKiBETUEgbWFwIGFsbCBlbnRyaWVzIGluIGEgc2NhdHRlcmxpc3QuCiAgKiBNZXJnZSBjaHVua3MgdGhhdCBoYXZlIHBhZ2UgYWxpZ25lZCBzaXplcyBpbnRvIGEgY29udGludW91cyBtYXBwaW5nLgogICovCi1zdGF0aWMgaW50Ci1nYXJ0X21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csIGludCBuZW50cywgaW50IGRpcikKK3N0YXRpYyBpbnQgZ2FydF9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCisJCSAgICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXN0cnVjdCBzY2F0dGVybGlzdCAqcywgKnBzLCAqc3RhcnRfc2csICpzZ21hcDsKIAlpbnQgbmVlZCA9IDAsIG5leHRuZWVkLCBpLCBvdXQsIHN0YXJ0OwpAQCAtNDY4LDcgKzQ3Miw3IEBACiAKIGVycm9yOgogCWZsdXNoX2dhcnQoKTsKLQlnYXJ0X3VubWFwX3NnKGRldiwgc2csIG91dCwgZGlyKTsKKwlnYXJ0X3VubWFwX3NnKGRldiwgc2csIG91dCwgZGlyLCBOVUxMKTsKIAogCS8qIFdoZW4gaXQgd2FzIGZvcmNlZCBvciBtZXJnZWQgdHJ5IGFnYWluIGluIGEgZHVtYiB3YXkgKi8KIAlpZiAoZm9yY2VfaW9tbXUgfHwgaW9tbXVfbWVyZ2UpIHsKQEAgLTUyMSw3ICs1MjUsNyBAQAogZ2FydF9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsIHZvaWQgKnZhZGRyLAogCQkgICBkbWFfYWRkcl90IGRtYV9hZGRyKQogewotCWdhcnRfdW5tYXBfc2luZ2xlKGRldiwgZG1hX2FkZHIsIHNpemUsIERNQV9CSURJUkVDVElPTkFMKTsKKwlnYXJ0X3VubWFwX3BhZ2UoZGV2LCBkbWFfYWRkciwgc2l6ZSwgRE1BX0JJRElSRUNUSU9OQUwsIE5VTEwpOwogCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpdmFkZHIsIGdldF9vcmRlcihzaXplKSk7CiB9CiAKQEAgLTcwNywxMSArNzExLDExIEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgc3RydWN0IGRtYV9tYXBwaW5nX29wcyBnYXJ0X2RtYV9vcHMgPSB7Ci0JLm1hcF9zaW5nbGUJCQk9IGdhcnRfbWFwX3NpbmdsZSwKLQkudW5tYXBfc2luZ2xlCQkJPSBnYXJ0X3VubWFwX3NpbmdsZSwKK3N0YXRpYyBzdHJ1Y3QgZG1hX21hcF9vcHMgZ2FydF9kbWFfb3BzID0gewogCS5tYXBfc2cJCQkJPSBnYXJ0X21hcF9zZywKIAkudW5tYXBfc2cJCQk9IGdhcnRfdW5tYXBfc2csCisJLm1hcF9wYWdlCQkJPSBnYXJ0X21hcF9wYWdlLAorCS51bm1hcF9wYWdlCQkJPSBnYXJ0X3VubWFwX3BhZ2UsCiAJLmFsbG9jX2NvaGVyZW50CQkJPSBnYXJ0X2FsbG9jX2NvaGVyZW50LAogCS5mcmVlX2NvaGVyZW50CQkJPSBnYXJ0X2ZyZWVfY29oZXJlbnQsCiB9OwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3BjaS1ub21tdS5jIGIvYXJjaC94ODYva2VybmVsL3BjaS1ub21tdS5jCmluZGV4IGM3MGFiNWEuLmM2ZDcwM2IgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9wY2ktbm9tbXUuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLW5vbW11LmMKQEAgLTEsMTQgKzEsMTQgQEAKIC8qIEZhbGxiYWNrIGZ1bmN0aW9ucyB3aGVuIHRoZSBtYWluIElPTU1VIGNvZGUgaXMgbm90IGNvbXBpbGVkIGluLiBUaGlzCiAgICBjb2RlIGlzIHJvdWdobHkgZXF1aXZhbGVudCB0byBpMzg2LiAqLwotI2luY2x1ZGUgPGxpbnV4L21tLmg+Ci0jaW5jbHVkZSA8bGludXgvaW5pdC5oPgotI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgotI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CiAjaW5jbHVkZSA8bGludXgvc2NhdHRlcmxpc3QuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvcGNpLmg+CisjaW5jbHVkZSA8bGludXgvbW0uaD4KIAotI2luY2x1ZGUgPGFzbS9pb21tdS5oPgogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KKyNpbmNsdWRlIDxhc20vaW9tbXUuaD4KICNpbmNsdWRlIDxhc20vZG1hLmg+CiAKIHN0YXRpYyBpbnQKQEAgLTI1LDE5ICsyNSwxOSBAQAogCXJldHVybiAxOwogfQogCi1zdGF0aWMgZG1hX2FkZHJfdAotbm9tbXVfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgcGh5c19hZGRyX3QgcGFkZHIsIHNpemVfdCBzaXplLAotCSAgICAgICBpbnQgZGlyZWN0aW9uKQorc3RhdGljIGRtYV9hZGRyX3Qgbm9tbXVfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCQkgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJCSBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkJIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewotCWRtYV9hZGRyX3QgYnVzID0gcGFkZHI7CisJZG1hX2FkZHJfdCBidXMgPSBwYWdlX3RvX3BoeXMocGFnZSkgKyBvZmZzZXQ7CiAJV0FSTl9PTihzaXplID09IDApOwotCWlmICghY2hlY2tfYWRkcigibWFwX3NpbmdsZSIsIGh3ZGV2LCBidXMsIHNpemUpKQotCQkJCXJldHVybiBiYWRfZG1hX2FkZHJlc3M7CisJaWYgKCFjaGVja19hZGRyKCJtYXBfc2luZ2xlIiwgZGV2LCBidXMsIHNpemUpKQorCQlyZXR1cm4gYmFkX2RtYV9hZGRyZXNzOwogCWZsdXNoX3dyaXRlX2J1ZmZlcnMoKTsKIAlyZXR1cm4gYnVzOwogfQogCi0KIC8qIE1hcCBhIHNldCBvZiBidWZmZXJzIGRlc2NyaWJlZCBieSBzY2F0dGVybGlzdCBpbiBzdHJlYW1pbmcKICAqIG1vZGUgZm9yIERNQS4gIFRoaXMgaXMgdGhlIHNjYXR0ZXItZ2F0aGVyIHZlcnNpb24gb2YgdGhlCiAgKiBhYm92ZSBwY2lfbWFwX3NpbmdsZSBpbnRlcmZhY2UuICBIZXJlIHRoZSBzY2F0dGVyIGdhdGhlciBsaXN0CkBAIC01NCw3ICs1NCw4IEBACiAgKiB0aGUgc2FtZSBoZXJlLgogICovCiBzdGF0aWMgaW50IG5vbW11X21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkgICAgICAgaW50IG5lbnRzLCBpbnQgZGlyZWN0aW9uKQorCQkJaW50IG5lbnRzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQlzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnM7CiAJaW50IGk7CkBAIC03OCwxMiArNzksMTIgQEAKIAlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXZhZGRyLCBnZXRfb3JkZXIoc2l6ZSkpOwogfQogCi1zdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIG5vbW11X2RtYV9vcHMgPSB7Ci0JLmFsbG9jX2NvaGVyZW50ID0gZG1hX2dlbmVyaWNfYWxsb2NfY29oZXJlbnQsCi0JLmZyZWVfY29oZXJlbnQgPSBub21tdV9mcmVlX2NvaGVyZW50LAotCS5tYXBfc2luZ2xlID0gbm9tbXVfbWFwX3NpbmdsZSwKLQkubWFwX3NnID0gbm9tbXVfbWFwX3NnLAotCS5pc19waHlzID0gMSwKK3N0cnVjdCBkbWFfbWFwX29wcyBub21tdV9kbWFfb3BzID0geworCS5hbGxvY19jb2hlcmVudAk9IGRtYV9nZW5lcmljX2FsbG9jX2NvaGVyZW50LAorCS5mcmVlX2NvaGVyZW50CT0gbm9tbXVfZnJlZV9jb2hlcmVudCwKKwkubWFwX3NnCQk9IG5vbW11X21hcF9zZywKKwkubWFwX3BhZ2UJPSBub21tdV9tYXBfcGFnZSwKKwkuaXNfcGh5cwk9IDEsCiB9OwogCiB2b2lkIF9faW5pdCBub19pb21tdV9pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLXN3aW90bGJfNjQuYyBiL2FyY2gveDg2L2tlcm5lbC9wY2ktc3dpb3RsYi5jCnNpbWlsYXJpdHkgaW5kZXggODAlCnJlbmFtZSBmcm9tIGFyY2gveDg2L2tlcm5lbC9wY2ktc3dpb3RsYl82NC5jCnJlbmFtZSB0byBhcmNoL3g4Ni9rZXJuZWwvcGNpLXN3aW90bGIuYwppbmRleCBkNTljOTE3Li4zNGYxMmU5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcGNpLXN3aW90bGJfNjQuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcGNpLXN3aW90bGIuYwpAQCAtMzMsMTggKzMzLDExIEBACiAJcmV0dXJuIGJhZGRyOwogfQogCi1pbnQgX193ZWFrIHN3aW90bGJfYXJjaF9yYW5nZV9uZWVkc19tYXBwaW5nKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCitpbnQgX193ZWFrIHN3aW90bGJfYXJjaF9yYW5nZV9uZWVkc19tYXBwaW5nKHBoeXNfYWRkcl90IHBhZGRyLCBzaXplX3Qgc2l6ZSkKIHsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGRtYV9hZGRyX3QKLXN3aW90bGJfbWFwX3NpbmdsZV9waHlzKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBwaHlzX2FkZHJfdCBwYWRkciwgc2l6ZV90IHNpemUsCi0JCQlpbnQgZGlyZWN0aW9uKQotewotCXJldHVybiBzd2lvdGxiX21hcF9zaW5nbGUoaHdkZXYsIHBoeXNfdG9fdmlydChwYWRkciksIHNpemUsIGRpcmVjdGlvbik7Ci19Ci0KIHN0YXRpYyB2b2lkICp4ODZfc3dpb3RsYl9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc2l6ZV90IHNpemUsCiAJCQkJCWRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWdzKQogewpAQCAtNTcsMjAgKzUwLDIwIEBACiAJcmV0dXJuIHN3aW90bGJfYWxsb2NfY29oZXJlbnQoaHdkZXYsIHNpemUsIGRtYV9oYW5kbGUsIGZsYWdzKTsKIH0KIAotc3RydWN0IGRtYV9tYXBwaW5nX29wcyBzd2lvdGxiX2RtYV9vcHMgPSB7CitzdHJ1Y3QgZG1hX21hcF9vcHMgc3dpb3RsYl9kbWFfb3BzID0gewogCS5tYXBwaW5nX2Vycm9yID0gc3dpb3RsYl9kbWFfbWFwcGluZ19lcnJvciwKIAkuYWxsb2NfY29oZXJlbnQgPSB4ODZfc3dpb3RsYl9hbGxvY19jb2hlcmVudCwKIAkuZnJlZV9jb2hlcmVudCA9IHN3aW90bGJfZnJlZV9jb2hlcmVudCwKLQkubWFwX3NpbmdsZSA9IHN3aW90bGJfbWFwX3NpbmdsZV9waHlzLAotCS51bm1hcF9zaW5nbGUgPSBzd2lvdGxiX3VubWFwX3NpbmdsZSwKIAkuc3luY19zaW5nbGVfZm9yX2NwdSA9IHN3aW90bGJfc3luY19zaW5nbGVfZm9yX2NwdSwKIAkuc3luY19zaW5nbGVfZm9yX2RldmljZSA9IHN3aW90bGJfc3luY19zaW5nbGVfZm9yX2RldmljZSwKIAkuc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdSA9IHN3aW90bGJfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdSwKIAkuc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZSA9IHN3aW90bGJfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZSwKIAkuc3luY19zZ19mb3JfY3B1ID0gc3dpb3RsYl9zeW5jX3NnX2Zvcl9jcHUsCiAJLnN5bmNfc2dfZm9yX2RldmljZSA9IHN3aW90bGJfc3luY19zZ19mb3JfZGV2aWNlLAotCS5tYXBfc2cgPSBzd2lvdGxiX21hcF9zZywKLQkudW5tYXBfc2cgPSBzd2lvdGxiX3VubWFwX3NnLAorCS5tYXBfc2cgPSBzd2lvdGxiX21hcF9zZ19hdHRycywKKwkudW5tYXBfc2cgPSBzd2lvdGxiX3VubWFwX3NnX2F0dHJzLAorCS5tYXBfcGFnZSA9IHN3aW90bGJfbWFwX3BhZ2UsCisJLnVubWFwX3BhZ2UgPSBzd2lvdGxiX3VubWFwX3BhZ2UsCiAJLmRtYV9zdXBwb3J0ZWQgPSBOVUxMLAogfTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYyBiL2FyY2gveDg2L2tlcm5lbC9wcm9jZXNzLmMKaW5kZXggNmFmYTUyMy4uMTU2Zjg3NSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3Byb2Nlc3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcHJvY2Vzcy5jCkBAIC02NSwxMSArNjUsMTEgQEAKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKm1lID0gY3VycmVudDsKIAlzdHJ1Y3QgdGhyZWFkX3N0cnVjdCAqdCA9ICZtZS0+dGhyZWFkOworCXVuc2lnbmVkIGxvbmcgKmJwID0gdC0+aW9fYml0bWFwX3B0cjsKIAotCWlmIChtZS0+dGhyZWFkLmlvX2JpdG1hcF9wdHIpIHsKKwlpZiAoYnApIHsKIAkJc3RydWN0IHRzc19zdHJ1Y3QgKnRzcyA9ICZwZXJfY3B1KGluaXRfdHNzLCBnZXRfY3B1KCkpOwogCi0JCWtmcmVlKHQtPmlvX2JpdG1hcF9wdHIpOwogCQl0LT5pb19iaXRtYXBfcHRyID0gTlVMTDsKIAkJY2xlYXJfdGhyZWFkX2ZsYWcoVElGX0lPX0JJVE1BUCk7CiAJCS8qCkBAIC03OCw2ICs3OCw3IEBACiAJCW1lbXNldCh0c3MtPmlvX2JpdG1hcCwgMHhmZiwgdC0+aW9fYml0bWFwX21heCk7CiAJCXQtPmlvX2JpdG1hcF9tYXggPSAwOwogCQlwdXRfY3B1KCk7CisJCWtmcmVlKGJwKTsKIAl9CiAKIAlkc19leGl0X3RocmVhZChjdXJyZW50KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYyBiL2FyY2gveDg2L2tlcm5lbC9wdHJhY2UuYwppbmRleCAzZDk2NzJlLi4xOTM3ODcxIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcHRyYWNlLmMKKysrIGIvYXJjaC94ODYva2VybmVsL3B0cmFjZS5jCkBAIC02ODUsOSArNjg1LDggQEAKIAkJaWYgKCFjZmcuc2lnbmFsKQogCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCiAJCWNoaWxkLT50aHJlYWQuYnRzX292Zmxfc2lnbmFsID0gY2ZnLnNpZ25hbDsKKwkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCX0KIAogCWlmICgoY2ZnLmZsYWdzICYgUFRSQUNFX0JUU19PX0FMTE9DKSAmJgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3F1aXJrcy5jIGIvYXJjaC94ODYva2VybmVsL3F1aXJrcy5jCmluZGV4IDY5N2QxYjcuLmU5NTAyMmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9xdWlya3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvcXVpcmtzLmMKQEAgLTc0LDggKzc0LDcgQEAKIAlpZiAoIWZvcmNlX2hwZXRfYWRkcmVzcykKIAkJcmV0dXJuOwogCi0JaWYgKHJjYmFfYmFzZSA9PSBOVUxMKQotCQlCVUcoKTsKKwlCVUdfT04ocmNiYV9iYXNlID09IE5VTEwpOwogCiAJLyogcmVhZCB0aGUgRnVuY3Rpb24gRGlzYWJsZSByZWdpc3RlciwgZHdvcmQgbW9kZSBvbmx5ICovCiAJdmFsID0gcmVhZGwocmNiYV9iYXNlICsgMHgzNDA0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWxfMzIuUyBiL2FyY2gveDg2L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWxfMzIuUwppbmRleCAyMDY0ZDBhLi40MTIzNTUzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzMyLlMKKysrIGIvYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF8zMi5TCkBAIC0xNyw3ICsxNyw4IEBACiAKICNkZWZpbmUgUFRSKHgpICh4IDw8IDIpCiAKLS8qIGNvbnRyb2xfcGFnZSArIEtFWEVDX0NPTlRST0xfQ09ERV9NQVhfU0laRQorLyoKKyAqIGNvbnRyb2xfcGFnZSArIEtFWEVDX0NPTlRST0xfQ09ERV9NQVhfU0laRQogICogfiBjb250cm9sX3BhZ2UgKyBQQUdFX1NJWkUgYXJlIHVzZWQgYXMgZGF0YSBzdG9yYWdlIGFuZCBzdGFjayBmb3IKICAqIGp1bXBpbmcgYmFjawogICovCkBAIC03Niw4ICs3NywxMCBAQAogCW1vdmwJJWVheCwgQ1BfUEFfU1dBUF9QQUdFKCVlZGkpCiAJbW92bAklZWJ4LCBDUF9QQV9CQUNLVVBfUEFHRVNfTUFQKCVlZGkpCiAKLQkvKiBnZXQgcGh5c2ljYWwgYWRkcmVzcyBvZiBjb250cm9sIHBhZ2Ugbm93ICovCi0JLyogdGhpcyBpcyBpbXBvc3NpYmxlIGFmdGVyIHBhZ2UgdGFibGUgc3dpdGNoICovCisJLyoKKwkgKiBnZXQgcGh5c2ljYWwgYWRkcmVzcyBvZiBjb250cm9sIHBhZ2Ugbm93CisJICogdGhpcyBpcyBpbXBvc3NpYmxlIGFmdGVyIHBhZ2UgdGFibGUgc3dpdGNoCisJICovCiAJbW92bAlQVFIoUEFfQ09OVFJPTF9QQUdFKSglZWJwKSwgJWVkaQogCiAJLyogc3dpdGNoIHRvIG5ldyBzZXQgb2YgcGFnZSB0YWJsZXMgKi8KQEAgLTk3LDcgKzEwMCw4IEBACiAJLyogc3RvcmUgdGhlIHN0YXJ0IGFkZHJlc3Mgb24gdGhlIHN0YWNrICovCiAJcHVzaGwgICAlZWR4CiAKLQkvKiBTZXQgY3IwIHRvIGEga25vd24gc3RhdGU6CisJLyoKKwkgKiBTZXQgY3IwIHRvIGEga25vd24gc3RhdGU6CiAJICogIC0gUGFnaW5nIGRpc2FibGVkCiAJICogIC0gQWxpZ25tZW50IGNoZWNrIGRpc2FibGVkCiAJICogIC0gV3JpdGUgcHJvdGVjdCBkaXNhYmxlZApAQCAtMTEzLDcgKzExNyw4IEBACiAJLyogY2xlYXIgY3I0IGlmIGFwcGxpY2FibGUgKi8KIAl0ZXN0bAklZWN4LCAlZWN4CiAJanoJMWYKLQkvKiBTZXQgY3I0IHRvIGEga25vd24gc3RhdGU6CisJLyoKKwkgKiBTZXQgY3I0IHRvIGEga25vd24gc3RhdGU6CiAJICogU2V0dGluZyBldmVyeXRoaW5nIHRvIHplcm8gc2VlbXMgc2FmZS4KIAkgKi8KIAl4b3JsCSVlYXgsICVlYXgKQEAgLTEzMiwxNSArMTM3LDE4IEBACiAJY2FsbAlzd2FwX3BhZ2VzCiAJYWRkbAkkOCwgJWVzcAogCi0JLyogVG8gYmUgY2VydGFpbiBvZiBhdm9pZGluZyBwcm9ibGVtcyB3aXRoIHNlbGYtbW9kaWZ5aW5nIGNvZGUKKwkvKgorCSAqIFRvIGJlIGNlcnRhaW4gb2YgYXZvaWRpbmcgcHJvYmxlbXMgd2l0aCBzZWxmLW1vZGlmeWluZyBjb2RlCiAJICogSSBuZWVkIHRvIGV4ZWN1dGUgYSBzZXJpYWxpemluZyBpbnN0cnVjdGlvbiBoZXJlLgogCSAqIFNvIEkgZmx1c2ggdGhlIFRMQiwgaXQncyBoYW5keSwgYW5kIG5vdCBwcm9jZXNzb3IgZGVwZW5kZW50LgogCSAqLwogCXhvcmwJJWVheCwgJWVheAogCW1vdmwJJWVheCwgJWNyMwogCi0JLyogc2V0IGFsbCBvZiB0aGUgcmVnaXN0ZXJzIHRvIGtub3duIHZhbHVlcyAqLwotCS8qIGxlYXZlICVlc3AgYWxvbmUgKi8KKwkvKgorCSAqIHNldCBhbGwgb2YgdGhlIHJlZ2lzdGVycyB0byBrbm93biB2YWx1ZXMKKwkgKiBsZWF2ZSAlZXNwIGFsb25lCisJICovCiAKIAl0ZXN0bAklZXNpLCAlZXNpCiAJam56IDFmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzY0LlMgYi9hcmNoL3g4Ni9rZXJuZWwvcmVsb2NhdGVfa2VybmVsXzY0LlMKaW5kZXggZDMyY2ZiMi4uNGRlOGY1YiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3JlbG9jYXRlX2tlcm5lbF82NC5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC9yZWxvY2F0ZV9rZXJuZWxfNjQuUwpAQCAtMTksMjkgKzE5LDc3IEBACiAjZGVmaW5lIFBUUih4KSAoeCA8PCAzKQogI2RlZmluZSBQQUdFX0FUVFIgKF9QQUdFX1BSRVNFTlQgfCBfUEFHRV9SVyB8IF9QQUdFX0FDQ0VTU0VEIHwgX1BBR0VfRElSVFkpCiAKKy8qCisgKiBjb250cm9sX3BhZ2UgKyBLRVhFQ19DT05UUk9MX0NPREVfTUFYX1NJWkUKKyAqIH4gY29udHJvbF9wYWdlICsgUEFHRV9TSVpFIGFyZSB1c2VkIGFzIGRhdGEgc3RvcmFnZSBhbmQgc3RhY2sgZm9yCisgKiBqdW1waW5nIGJhY2sKKyAqLworI2RlZmluZSBEQVRBKG9mZnNldCkJCShLRVhFQ19DT05UUk9MX0NPREVfTUFYX1NJWkUrKG9mZnNldCkpCisKKy8qIE1pbmltYWwgQ1BVIHN0YXRlICovCisjZGVmaW5lIFJTUAkJCURBVEEoMHgwKQorI2RlZmluZSBDUjAJCQlEQVRBKDB4OCkKKyNkZWZpbmUgQ1IzCQkJREFUQSgweDEwKQorI2RlZmluZSBDUjQJCQlEQVRBKDB4MTgpCisKKy8qIG90aGVyIGRhdGEgKi8KKyNkZWZpbmUgQ1BfUEFfVEFCTEVfUEFHRQlEQVRBKDB4MjApCisjZGVmaW5lIENQX1BBX1NXQVBfUEFHRQkJREFUQSgweDI4KQorI2RlZmluZSBDUF9QQV9CQUNLVVBfUEFHRVNfTUFQCURBVEEoMHgzMCkKKwogCS50ZXh0CiAJLmFsaWduIFBBR0VfU0laRQogCS5jb2RlNjQKIAkuZ2xvYmwgcmVsb2NhdGVfa2VybmVsCiByZWxvY2F0ZV9rZXJuZWw6Ci0JLyogJXJkaSBpbmRpcmVjdGlvbl9wYWdlCisJLyoKKwkgKiAlcmRpIGluZGlyZWN0aW9uX3BhZ2UKIAkgKiAlcnNpIHBhZ2VfbGlzdAogCSAqICVyZHggc3RhcnQgYWRkcmVzcworCSAqICVyY3ggcHJlc2VydmVfY29udGV4dAogCSAqLwogCisJLyogU2F2ZSB0aGUgQ1BVIGNvbnRleHQsIHVzZWQgZm9yIGp1bXBpbmcgYmFjayAqLworCXB1c2hxICVyYngKKwlwdXNocSAlcmJwCisJcHVzaHEgJXIxMgorCXB1c2hxICVyMTMKKwlwdXNocSAlcjE0CisJcHVzaHEgJXIxNQorCXB1c2hmCisKKwltb3ZxCVBUUihWQV9DT05UUk9MX1BBR0UpKCVyc2kpLCAlcjExCisJbW92cQklcnNwLCBSU1AoJXIxMSkKKwltb3ZxCSVjcjAsICVyYXgKKwltb3ZxCSVyYXgsIENSMCglcjExKQorCW1vdnEJJWNyMywgJXJheAorCW1vdnEJJXJheCwgQ1IzKCVyMTEpCisJbW92cQklY3I0LCAlcmF4CisJbW92cQklcmF4LCBDUjQoJXIxMSkKKwogCS8qIHplcm8gb3V0IGZsYWdzLCBhbmQgZGlzYWJsZSBpbnRlcnJ1cHRzICovCiAJcHVzaHEgJDAKIAlwb3BmcQogCi0JLyogZ2V0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgY29udHJvbCBwYWdlIG5vdyAqLwotCS8qIHRoaXMgaXMgaW1wb3NzaWJsZSBhZnRlciBwYWdlIHRhYmxlIHN3aXRjaCAqLworCS8qCisJICogZ2V0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgY29udHJvbCBwYWdlIG5vdworCSAqIHRoaXMgaXMgaW1wb3NzaWJsZSBhZnRlciBwYWdlIHRhYmxlIHN3aXRjaAorCSAqLwogCW1vdnEJUFRSKFBBX0NPTlRST0xfUEFHRSkoJXJzaSksICVyOAogCiAJLyogZ2V0IHBoeXNpY2FsIGFkZHJlc3Mgb2YgcGFnZSB0YWJsZSBub3cgdG9vICovCi0JbW92cQlQVFIoUEFfVEFCTEVfUEFHRSkoJXJzaSksICVyY3gKKwltb3ZxCVBUUihQQV9UQUJMRV9QQUdFKSglcnNpKSwgJXI5CisKKwkvKiBnZXQgcGh5c2ljYWwgYWRkcmVzcyBvZiBzd2FwIHBhZ2Ugbm93ICovCisJbW92cQlQVFIoUEFfU1dBUF9QQUdFKSglcnNpKSwgJXIxMAorCisJLyogc2F2ZSBzb21lIGluZm9ybWF0aW9uIGZvciBqdW1waW5nIGJhY2sgKi8KKwltb3ZxCSVyOSwgQ1BfUEFfVEFCTEVfUEFHRSglcjExKQorCW1vdnEJJXIxMCwgQ1BfUEFfU1dBUF9QQUdFKCVyMTEpCisJbW92cQklcmRpLCBDUF9QQV9CQUNLVVBfUEFHRVNfTUFQKCVyMTEpCiAKIAkvKiBTd2l0Y2ggdG8gdGhlIGlkZW50aXR5IG1hcHBlZCBwYWdlIHRhYmxlcyAqLwotCW1vdnEJJXJjeCwgJWNyMworCW1vdnEJJXI5LCAlY3IzCiAKIAkvKiBzZXR1cCBhIG5ldyBzdGFjayBhdCB0aGUgZW5kIG9mIHRoZSBwaHlzaWNhbCBjb250cm9sIHBhZ2UgKi8KIAlsZWEJUEFHRV9TSVpFKCVyOCksICVyc3AKQEAgLTU1LDcgKzEwMyw4IEBACiAJLyogc3RvcmUgdGhlIHN0YXJ0IGFkZHJlc3Mgb24gdGhlIHN0YWNrICovCiAJcHVzaHEgICAlcmR4CiAKLQkvKiBTZXQgY3IwIHRvIGEga25vd24gc3RhdGU6CisJLyoKKwkgKiBTZXQgY3IwIHRvIGEga25vd24gc3RhdGU6CiAJICogIC0gUGFnaW5nIGVuYWJsZWQKIAkgKiAgLSBBbGlnbm1lbnQgY2hlY2sgZGlzYWJsZWQKIAkgKiAgLSBXcml0ZSBwcm90ZWN0IGRpc2FibGVkCkBAIC02OCw3ICsxMTcsOCBAQAogCW9ybAkkKFg4Nl9DUjBfUEcgfCBYODZfQ1IwX1BFKSwgJWVheAogCW1vdnEJJXJheCwgJWNyMAogCi0JLyogU2V0IGNyNCB0byBhIGtub3duIHN0YXRlOgorCS8qCisJICogU2V0IGNyNCB0byBhIGtub3duIHN0YXRlOgogCSAqICAtIHBoeXNpY2FsIGFkZHJlc3MgZXh0ZW5zaW9uIGVuYWJsZWQKIAkgKi8KIAltb3ZxCSRYODZfQ1I0X1BBRSwgJXJheApAQCAtNzgsOSArMTI4LDg3IEBACiAxOgogCiAJLyogRmx1c2ggdGhlIFRMQiAobmVlZGVkPykgKi8KLQltb3ZxCSVyY3gsICVjcjMKKwltb3ZxCSVyOSwgJWNyMworCisJbW92cQklcmN4LCAlcjExCisJY2FsbAlzd2FwX3BhZ2VzCisKKwkvKgorCSAqIFRvIGJlIGNlcnRhaW4gb2YgYXZvaWRpbmcgcHJvYmxlbXMgd2l0aCBzZWxmLW1vZGlmeWluZyBjb2RlCisJICogSSBuZWVkIHRvIGV4ZWN1dGUgYSBzZXJpYWxpemluZyBpbnN0cnVjdGlvbiBoZXJlLgorCSAqIFNvIEkgZmx1c2ggdGhlIFRMQiBieSByZWxvYWRpbmcgJWNyMyBoZXJlLCBpdCdzIGhhbmR5LAorCSAqIGFuZCBub3QgcHJvY2Vzc29yIGRlcGVuZGVudC4KKwkgKi8KKwltb3ZxCSVjcjMsICVyYXgKKwltb3ZxCSVyYXgsICVjcjMKKworCS8qCisJICogc2V0IGFsbCBvZiB0aGUgcmVnaXN0ZXJzIHRvIGtub3duIHZhbHVlcworCSAqIGxlYXZlICVyc3AgYWxvbmUKKwkgKi8KKworCXRlc3RxCSVyMTEsICVyMTEKKwlqbnogMWYKKwl4b3JxCSVyYXgsICVyYXgKKwl4b3JxCSVyYngsICVyYngKKwl4b3JxICAgICVyY3gsICVyY3gKKwl4b3JxICAgICVyZHgsICVyZHgKKwl4b3JxICAgICVyc2ksICVyc2kKKwl4b3JxICAgICVyZGksICVyZGkKKwl4b3JxICAgICVyYnAsICVyYnAKKwl4b3JxCSVyOCwgICVyOAorCXhvcnEJJXI5LCAgJXI5CisJeG9ycQklcjEwLCAlcjkKKwl4b3JxCSVyMTEsICVyMTEKKwl4b3JxCSVyMTIsICVyMTIKKwl4b3JxCSVyMTMsICVyMTMKKwl4b3JxCSVyMTQsICVyMTQKKwl4b3JxCSVyMTUsICVyMTUKKworCXJldAorCisxOgorCXBvcHEJJXJkeAorCWxlYXEJUEFHRV9TSVpFKCVyMTApLCAlcnNwCisJY2FsbAkqJXJkeAorCisJLyogZ2V0IHRoZSByZS1lbnRyeSBwb2ludCBvZiB0aGUgcGVlciBzeXN0ZW0gKi8KKwltb3ZxCTAoJXJzcCksICVyYnAKKwljYWxsCTFmCisxOgorCXBvcHEJJXI4CisJc3VicQkkKDFiIC0gcmVsb2NhdGVfa2VybmVsKSwgJXI4CisJbW92cQlDUF9QQV9TV0FQX1BBR0UoJXI4KSwgJXIxMAorCW1vdnEJQ1BfUEFfQkFDS1VQX1BBR0VTX01BUCglcjgpLCAlcmRpCisJbW92cQlDUF9QQV9UQUJMRV9QQUdFKCVyOCksICVyYXgKKwltb3ZxCSVyYXgsICVjcjMKKwlsZWEJUEFHRV9TSVpFKCVyOCksICVyc3AKKwljYWxsCXN3YXBfcGFnZXMKKwltb3ZxCSR2aXJ0dWFsX21hcHBlZCwgJXJheAorCXB1c2hxCSVyYXgKKwlyZXQKKwordmlydHVhbF9tYXBwZWQ6CisJbW92cQlSU1AoJXI4KSwgJXJzcAorCW1vdnEJQ1I0KCVyOCksICVyYXgKKwltb3ZxCSVyYXgsICVjcjQKKwltb3ZxCUNSMyglcjgpLCAlcmF4CisJbW92cQlDUjAoJXI4KSwgJXI4CisJbW92cQklcmF4LCAlY3IzCisJbW92cQklcjgsICVjcjAKKwltb3ZxCSVyYnAsICVyYXgKKworCXBvcGYKKwlwb3BxCSVyMTUKKwlwb3BxCSVyMTQKKwlwb3BxCSVyMTMKKwlwb3BxCSVyMTIKKwlwb3BxCSVyYnAKKwlwb3BxCSVyYngKKwlyZXQKIAogCS8qIERvIHRoZSBjb3BpZXMgKi8KK3N3YXBfcGFnZXM6CiAJbW92cQklcmRpLCAlcmN4IAkvKiBQdXQgdGhlIHBhZ2VfbGlzdCBpbiAlcmN4ICovCiAJeG9ycQklcmRpLCAlcmRpCiAJeG9ycQklcnNpLCAlcnNpCkBAIC0xMTIsMzYgKzI0MCwyNyBAQAogCW1vdnEJJXJjeCwgICAlcnNpICAvKiBGb3IgZXZlciBzb3VyY2UgcGFnZSBkbyBhIGNvcHkgKi8KIAlhbmRxCSQweGZmZmZmZmZmZmZmZmYwMDAsICVyc2kKIAorCW1vdnEJJXJkaSwgJXJkeAorCW1vdnEJJXJzaSwgJXJheAorCisJbW92cQklcjEwLCAlcmRpCiAJbW92cQkkNTEyLCAgICVyY3gKIAlyZXAgOyBtb3ZzcQorCisJbW92cQklcmF4LCAlcmRpCisJbW92cQklcmR4LCAlcnNpCisJbW92cQkkNTEyLCAgICVyY3gKKwlyZXAgOyBtb3ZzcQorCisJbW92cQklcmR4LCAlcmRpCisJbW92cQklcjEwLCAlcnNpCisJbW92cQkkNTEyLCAgICVyY3gKKwlyZXAgOyBtb3ZzcQorCisJbGVhCVBBR0VfU0laRSglcmF4KSwgJXJzaQogCWptcAkwYgogMzoKLQotCS8qIFRvIGJlIGNlcnRhaW4gb2YgYXZvaWRpbmcgcHJvYmxlbXMgd2l0aCBzZWxmLW1vZGlmeWluZyBjb2RlCi0JICogSSBuZWVkIHRvIGV4ZWN1dGUgYSBzZXJpYWxpemluZyBpbnN0cnVjdGlvbiBoZXJlLgotCSAqIFNvIEkgZmx1c2ggdGhlIFRMQiBieSByZWxvYWRpbmcgJWNyMyBoZXJlLCBpdCdzIGhhbmR5LAotCSAqIGFuZCBub3QgcHJvY2Vzc29yIGRlcGVuZGVudC4KLQkgKi8KLQltb3ZxCSVjcjMsICVyYXgKLQltb3ZxCSVyYXgsICVjcjMKLQotCS8qIHNldCBhbGwgb2YgdGhlIHJlZ2lzdGVycyB0byBrbm93biB2YWx1ZXMgKi8KLQkvKiBsZWF2ZSAlcnNwIGFsb25lICovCi0KLQl4b3JxCSVyYXgsICVyYXgKLQl4b3JxCSVyYngsICVyYngKLQl4b3JxICAgICVyY3gsICVyY3gKLQl4b3JxICAgICVyZHgsICVyZHgKLQl4b3JxICAgICVyc2ksICVyc2kKLQl4b3JxICAgICVyZGksICVyZGkKLQl4b3JxICAgICVyYnAsICVyYnAKLQl4b3JxCSVyOCwgICVyOAotCXhvcnEJJXI5LCAgJXI5Ci0JeG9ycQklcjEwLCAlcjkKLQl4b3JxCSVyMTEsICVyMTEKLQl4b3JxCSVyMTIsICVyMTIKLQl4b3JxCSVyMTMsICVyMTMKLQl4b3JxCSVyMTQsICVyMTQKLQl4b3JxCSVyMTUsICVyMTUKLQogCXJldAorCisJLmdsb2JsIGtleGVjX2NvbnRyb2xfY29kZV9zaXplCisuc2V0IGtleGVjX2NvbnRyb2xfY29kZV9zaXplLCAuIC0gcmVsb2NhdGVfa2VybmVsCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvcnRjLmMgYi9hcmNoL3g4Ni9rZXJuZWwvcnRjLmMKaW5kZXggZGQ2ZjJiNy4uNWQ0NjViMiAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3J0Yy5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9ydGMuYwpAQCAtMSwxNCArMSwxNCBAQAogLyoKICAqIFJUQyByZWxhdGVkIGZ1bmN0aW9ucwogICovCisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KICNpbmNsdWRlIDxsaW51eC9hY3BpLmg+CiAjaW5jbHVkZSA8bGludXgvYmNkLmg+Ci0jaW5jbHVkZSA8bGludXgvbWMxNDY4MThydGMuaD4KLSNpbmNsdWRlIDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9wbnAuaD4KIAotI2luY2x1ZGUgPGFzbS90aW1lLmg+CiAjaW5jbHVkZSA8YXNtL3ZzeXNjYWxsLmg+CisjaW5jbHVkZSA8YXNtL3RpbWUuaD4KIAogI2lmZGVmIENPTkZJR19YODZfMzIKIC8qCkBAIC0xNiw5ICsxNiw5IEBACiAgKiByZWdpc3RlciB3ZSBhcmUgd29ya2luZyB3aXRoLiAgSXQgaXMgcmVxdWlyZWQgZm9yIE5NSSBhY2Nlc3MgdG8gdGhlCiAgKiBDTU9TL1JUQyByZWdpc3RlcnMuICBTZWUgaW5jbHVkZS9hc20taTM4Ni9tYzE0NjgxOHJ0Yy5oIGZvciBkZXRhaWxzLgogICovCi12b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNtb3NfbG9jayA9IDA7Cit2b2xhdGlsZSB1bnNpZ25lZCBsb25nIGNtb3NfbG9jazsKIEVYUE9SVF9TWU1CT0woY21vc19sb2NrKTsKLSNlbmRpZgorI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KIAogLyogRm9yIHR3byBkaWdpdCB5ZWFycyBhc3N1bWUgdGltZSBpcyBhbHdheXMgYWZ0ZXIgdGhhdCAqLwogI2RlZmluZSBDTU9TX1lFQVJTX09GRlMgMjAwMApAQCAtMzgsOSArMzgsOSBAQAogICovCiBpbnQgbWFjaF9zZXRfcnRjX21tc3ModW5zaWduZWQgbG9uZyBub3d0aW1lKQogewotCWludCByZXR2YWwgPSAwOwogCWludCByZWFsX3NlY29uZHMsIHJlYWxfbWludXRlcywgY21vc19taW51dGVzOwogCXVuc2lnbmVkIGNoYXIgc2F2ZV9jb250cm9sLCBzYXZlX2ZyZXFfc2VsZWN0OworCWludCByZXR2YWwgPSAwOwogCiAJIC8qIHRlbGwgdGhlIGNsb2NrIGl0J3MgYmVpbmcgc2V0ICovCiAJc2F2ZV9jb250cm9sID0gQ01PU19SRUFEKFJUQ19DT05UUk9MKTsKQEAgLTcyLDggKzcyLDggQEAKIAkJCXJlYWxfc2Vjb25kcyA9IGJpbjJiY2QocmVhbF9zZWNvbmRzKTsKIAkJCXJlYWxfbWludXRlcyA9IGJpbjJiY2QocmVhbF9taW51dGVzKTsKIAkJfQotCQlDTU9TX1dSSVRFKHJlYWxfc2Vjb25kcyxSVENfU0VDT05EUyk7Ci0JCUNNT1NfV1JJVEUocmVhbF9taW51dGVzLFJUQ19NSU5VVEVTKTsKKwkJQ01PU19XUklURShyZWFsX3NlY29uZHMsIFJUQ19TRUNPTkRTKTsKKwkJQ01PU19XUklURShyZWFsX21pbnV0ZXMsIFJUQ19NSU5VVEVTKTsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9XQVJOSU5HCiAJCSAgICAgICAic2V0X3J0Y19tbXNzOiBjYW4ndCB1cGRhdGUgZnJvbSAlZCB0byAlZFxuIiwKQEAgLTE1MSw2ICsxNTEsNyBAQAogCW91dGIoYWRkciwgUlRDX1BPUlQoMCkpOwogCXZhbCA9IGluYihSVENfUE9SVCgxKSk7CiAJbG9ja19jbW9zX3N1ZmZpeChhZGRyKTsKKwogCXJldHVybiB2YWw7CiB9CiBFWFBPUlRfU1lNQk9MKHJ0Y19jbW9zX3JlYWQpOwpAQCAtMTY2LDggKzE2Nyw4IEBACiAKIHN0YXRpYyBpbnQgc2V0X3J0Y19tbXNzKHVuc2lnbmVkIGxvbmcgbm93dGltZSkKIHsKLQlpbnQgcmV0dmFsOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaW50IHJldHZhbDsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZydGNfbG9jaywgZmxhZ3MpOwogCXJldHZhbCA9IHNldF93YWxsY2xvY2sobm93dGltZSk7CkBAIC0yNDIsNiArMjQzLDcgQEAKIAlwbGF0Zm9ybV9kZXZpY2VfcmVnaXN0ZXIoJnJ0Y19kZXZpY2UpOwogCWRldl9pbmZvKCZydGNfZGV2aWNlLmRldiwKIAkJICJyZWdpc3RlcmVkIHBsYXRmb3JtIFJUQyBkZXZpY2UgKG5vIFBOUCBkZXZpY2UgZm91bmQpXG4iKTsKKwogCXJldHVybiAwOwogfQogZGV2aWNlX2luaXRjYWxsKGFkZF9ydGNfY21vcyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2V0dXAuYyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCmluZGV4IGI3NDZkZWIuLmEwZDI2MjMgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zZXR1cC5jCkBAIC0xMTIsOCArMTEyLDEzIEBACiAjZGVmaW5lIEFSQ0hfU0VUVVAKICNlbmRpZgogCitSRVNFUlZFX0JSSyhkbWlfYWxsb2MsIDY1NTM2KTsKKwogdW5zaWduZWQgaW50IGJvb3RfY3B1X2lkIF9fcmVhZF9tb3N0bHk7CiAKK3N0YXRpYyBfX2luaXRkYXRhIHVuc2lnbmVkIGxvbmcgX2Jya19zdGFydCA9ICh1bnNpZ25lZCBsb25nKV9fYnJrX2Jhc2U7Cit1bnNpZ25lZCBsb25nIF9icmtfZW5kID0gKHVuc2lnbmVkIGxvbmcpX19icmtfYmFzZTsKKwogI2lmZGVmIENPTkZJR19YODZfNjQKIGludCBkZWZhdWx0X2NwdV9wcmVzZW50X3RvX2FwaWNpZChpbnQgbXBzX2NwdSkKIHsKQEAgLTE1OCwxMiArMTYzLDYgQEAKIAogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgotLyogVGhpcyB2YWx1ZSBpcyBzZXQgdXAgYnkgdGhlIGVhcmx5IGJvb3QgY29kZSB0byBwb2ludCB0byB0aGUgdmFsdWUKLSAgIGltbWVkaWF0ZWx5IGFmdGVyIHRoZSBib290IHRpbWUgcGFnZSB0YWJsZXMuICBJdCBjb250YWlucyBhICpwaHlzaWNhbCoKLSAgIGFkZHJlc3MsIGFuZCBtdXN0IG5vdCBiZSBpbiB0aGUgLmJzcyBzZWdtZW50ISAqLwotdW5zaWduZWQgbG9uZyBpbml0X3BnX3RhYmxlc19zdGFydCBfX2luaXRkYXRhID0gfjBVTDsKLXVuc2lnbmVkIGxvbmcgaW5pdF9wZ190YWJsZXNfZW5kIF9faW5pdGRhdGEgPSB+MFVMOwotCiBzdGF0aWMgc3RydWN0IHJlc291cmNlIHZpZGVvX3JhbV9yZXNvdXJjZSA9IHsKIAkubmFtZQk9ICJWaWRlbyBSQU0gYXJlYSIsCiAJLnN0YXJ0CT0gMHhhMDAwMCwKQEAgLTIwMiw3ICsyMDEsOSBAQAogI2VuZGlmCiAKICNlbHNlCi1zdHJ1Y3QgY3B1aW5mb194ODYgYm9vdF9jcHVfZGF0YSBfX3JlYWRfbW9zdGx5Oworc3RydWN0IGNwdWluZm9feDg2IGJvb3RfY3B1X2RhdGEgX19yZWFkX21vc3RseSA9IHsKKwkueDg2X3BoeXNfYml0cyA9IE1BWF9QSFlTTUVNX0JJVFMsCit9OwogRVhQT1JUX1NZTUJPTChib290X2NwdV9kYXRhKTsKICNlbmRpZgogCkBAIC0yMTcsMTIgKzIxOCw2IEBACiBpbnQgYm9vdGxvYWRlcl90eXBlOwogCiAvKgotICogRWFybHkgRE1JIG1lbW9yeQotICovCi1pbnQgZG1pX2FsbG9jX2luZGV4OwotY2hhciBkbWlfYWxsb2NfZGF0YVtETUlfTUFYX0RBVEFdOwotCi0vKgogICogU2V0dXAgb3B0aW9ucwogICovCiBzdHJ1Y3Qgc2NyZWVuX2luZm8gc2NyZWVuX2luZm87CkBAIC0yNjcsNiArMjYyLDM1IEBACiB9CiAjZW5kaWYKIAordm9pZCAqIF9faW5pdCBleHRlbmRfYnJrKHNpemVfdCBzaXplLCBzaXplX3QgYWxpZ24pCit7CisJc2l6ZV90IG1hc2sgPSBhbGlnbiAtIDE7CisJdm9pZCAqcmV0OworCisJQlVHX09OKF9icmtfc3RhcnQgPT0gMCk7CisJQlVHX09OKGFsaWduICYgbWFzayk7CisKKwlfYnJrX2VuZCA9IChfYnJrX2VuZCArIG1hc2spICYgfm1hc2s7CisJQlVHX09OKChjaGFyICopKF9icmtfZW5kICsgc2l6ZSkgPiBfX2Jya19saW1pdCk7CisKKwlyZXQgPSAodm9pZCAqKV9icmtfZW5kOworCV9icmtfZW5kICs9IHNpemU7CisKKwltZW1zZXQocmV0LCAwLCBzaXplKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCByZXNlcnZlX2Jyayh2b2lkKQoreworCWlmIChfYnJrX2VuZCA+IF9icmtfc3RhcnQpCisJCXJlc2VydmVfZWFybHkoX19wYShfYnJrX3N0YXJ0KSwgX19wYShfYnJrX2VuZCksICJCUksiKTsKKworCS8qIE1hcmsgYnJrIGFyZWEgYXMgbG9ja2VkIGRvd24gYW5kIG5vIGxvbmdlciB0YWtpbmcgYW55CisJICAgbmV3IGFsbG9jYXRpb25zICovCisJX2Jya19zdGFydCA9IDA7Cit9CisKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKIAogI2lmZGVmIENPTkZJR19YODZfMzIKQEAgLTcxNSwxMSArNzM5LDcgQEAKIAlpbml0X21tLnN0YXJ0X2NvZGUgPSAodW5zaWduZWQgbG9uZykgX3RleHQ7CiAJaW5pdF9tbS5lbmRfY29kZSA9ICh1bnNpZ25lZCBsb25nKSBfZXRleHQ7CiAJaW5pdF9tbS5lbmRfZGF0YSA9ICh1bnNpZ25lZCBsb25nKSBfZWRhdGE7Ci0jaWZkZWYgQ09ORklHX1g4Nl8zMgotCWluaXRfbW0uYnJrID0gaW5pdF9wZ190YWJsZXNfZW5kICsgUEFHRV9PRkZTRVQ7Ci0jZWxzZQotCWluaXRfbW0uYnJrID0gKHVuc2lnbmVkIGxvbmcpICZfZW5kOwotI2VuZGlmCisJaW5pdF9tbS5icmsgPSBfYnJrX2VuZDsKIAogCWNvZGVfcmVzb3VyY2Uuc3RhcnQgPSB2aXJ0X3RvX3BoeXMoX3RleHQpOwogCWNvZGVfcmVzb3VyY2UuZW5kID0gdmlydF90b19waHlzKF9ldGV4dCktMTsKQEAgLTg0MCw2ICs4NjAsOCBAQAogCXNldHVwX2Jpb3NfY29ycnVwdGlvbl9jaGVjaygpOwogI2VuZGlmCiAKKwlyZXNlcnZlX2JyaygpOworCiAJLyogbWF4X3Bmbl9tYXBwZWQgaXMgdXBkYXRlZCBoZXJlICovCiAJbWF4X2xvd19wZm5fbWFwcGVkID0gaW5pdF9tZW1vcnlfbWFwcGluZygwLCBtYXhfbG93X3Bmbjw8UEFHRV9TSElGVCk7CiAJbWF4X3Bmbl9tYXBwZWQgPSBtYXhfbG93X3Bmbl9tYXBwZWQ7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsLmMgYi9hcmNoL3g4Ni9rZXJuZWwvc2lnbmFsLmMKaW5kZXggZDJjYzY0Mi4uZGZjYzc0YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NpZ25hbC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC9zaWduYWwuYwpAQCAtMjExLDMxICsyMTEsMjcgQEAKIHsKIAkvKiBEZWZhdWx0IHRvIHVzaW5nIG5vcm1hbCBzdGFjayAqLwogCXVuc2lnbmVkIGxvbmcgc3AgPSByZWdzLT5zcDsKKwlpbnQgb25zaWdzdGFjayA9IG9uX3NpZ19zdGFjayhzcCk7CiAKICNpZmRlZiBDT05GSUdfWDg2XzY0CiAJLyogcmVkem9uZSAqLwogCXNwIC09IDEyODsKICNlbmRpZiAvKiBDT05GSUdfWDg2XzY0ICovCiAKLQkvKgotCSAqIElmIHdlIGFyZSBvbiB0aGUgYWx0ZXJuYXRlIHNpZ25hbCBzdGFjayBhbmQgd291bGQgb3ZlcmZsb3cgaXQsIGRvbid0LgotCSAqIFJldHVybiBhbiBhbHdheXMtYm9ndXMgYWRkcmVzcyBpbnN0ZWFkIHNvIHdlIHdpbGwgZGllIHdpdGggU0lHU0VHVi4KLQkgKi8KLQlpZiAob25fc2lnX3N0YWNrKHNwKSAmJiAhbGlrZWx5KG9uX3NpZ19zdGFjayhzcCAtIGZyYW1lX3NpemUpKSkKLQkJcmV0dXJuICh2b2lkIF9fdXNlciAqKSAtMUw7Ci0KLQkvKiBUaGlzIGlzIHRoZSBYL09wZW4gc2FuY3Rpb25lZCBzaWduYWwgc3RhY2sgc3dpdGNoaW5nLiAgKi8KLQlpZiAoa2EtPnNhLnNhX2ZsYWdzICYgU0FfT05TVEFDSykgewotCQlpZiAoc2FzX3NzX2ZsYWdzKHNwKSA9PSAwKQotCQkJc3AgPSBjdXJyZW50LT5zYXNfc3Nfc3AgKyBjdXJyZW50LT5zYXNfc3Nfc2l6ZTsKLQl9IGVsc2UgeworCWlmICghb25zaWdzdGFjaykgeworCQkvKiBUaGlzIGlzIHRoZSBYL09wZW4gc2FuY3Rpb25lZCBzaWduYWwgc3RhY2sgc3dpdGNoaW5nLiAgKi8KKwkJaWYgKGthLT5zYS5zYV9mbGFncyAmIFNBX09OU1RBQ0spIHsKKwkJCWlmIChzYXNfc3NfZmxhZ3Moc3ApID09IDApCisJCQkJc3AgPSBjdXJyZW50LT5zYXNfc3Nfc3AgKyBjdXJyZW50LT5zYXNfc3Nfc2l6ZTsKKwkJfSBlbHNlIHsKICNpZmRlZiBDT05GSUdfWDg2XzMyCi0JCS8qIFRoaXMgaXMgdGhlIGxlZ2FjeSBzaWduYWwgc3RhY2sgc3dpdGNoaW5nLiAqLwotCQlpZiAoKHJlZ3MtPnNzICYgMHhmZmZmKSAhPSBfX1VTRVJfRFMgJiYKLQkJCSEoa2EtPnNhLnNhX2ZsYWdzICYgU0FfUkVTVE9SRVIpICYmCi0JCQkJa2EtPnNhLnNhX3Jlc3RvcmVyKQotCQkJc3AgPSAodW5zaWduZWQgbG9uZykga2EtPnNhLnNhX3Jlc3RvcmVyOworCQkJLyogVGhpcyBpcyB0aGUgbGVnYWN5IHNpZ25hbCBzdGFjayBzd2l0Y2hpbmcuICovCisJCQlpZiAoKHJlZ3MtPnNzICYgMHhmZmZmKSAhPSBfX1VTRVJfRFMgJiYKKwkJCQkhKGthLT5zYS5zYV9mbGFncyAmIFNBX1JFU1RPUkVSKSAmJgorCQkJCQlrYS0+c2Euc2FfcmVzdG9yZXIpCisJCQkJc3AgPSAodW5zaWduZWQgbG9uZykga2EtPnNhLnNhX3Jlc3RvcmVyOwogI2VuZGlmIC8qIENPTkZJR19YODZfMzIgKi8KKwkJfQogCX0KIAogCWlmICh1c2VkX21hdGgoKSkgewpAQCAtMjQ0LDEyICsyNDAsMjIgQEAKIAkJc3AgPSByb3VuZF9kb3duKHNwLCA2NCk7CiAjZW5kaWYgLyogQ09ORklHX1g4Nl82NCAqLwogCQkqZnBzdGF0ZSA9ICh2b2lkIF9fdXNlciAqKXNwOwotCi0JCWlmIChzYXZlX2kzODdfeHN0YXRlKCpmcHN0YXRlKSA8IDApCi0JCQlyZXR1cm4gKHZvaWQgX191c2VyICopLTFMOwogCX0KIAotCXJldHVybiAodm9pZCBfX3VzZXIgKilhbGlnbl9zaWdmcmFtZShzcCAtIGZyYW1lX3NpemUpOworCXNwID0gYWxpZ25fc2lnZnJhbWUoc3AgLSBmcmFtZV9zaXplKTsKKworCS8qCisJICogSWYgd2UgYXJlIG9uIHRoZSBhbHRlcm5hdGUgc2lnbmFsIHN0YWNrIGFuZCB3b3VsZCBvdmVyZmxvdyBpdCwgZG9uJ3QuCisJICogUmV0dXJuIGFuIGFsd2F5cy1ib2d1cyBhZGRyZXNzIGluc3RlYWQgc28gd2Ugd2lsbCBkaWUgd2l0aCBTSUdTRUdWLgorCSAqLworCWlmIChvbnNpZ3N0YWNrICYmICFsaWtlbHkob25fc2lnX3N0YWNrKHNwKSkpCisJCXJldHVybiAodm9pZCBfX3VzZXIgKiktMUw7CisKKwkvKiBzYXZlIGkzODcgc3RhdGUgKi8KKwlpZiAodXNlZF9tYXRoKCkgJiYgc2F2ZV9pMzg3X3hzdGF0ZSgqZnBzdGF0ZSkgPCAwKQorCQlyZXR1cm4gKHZvaWQgX191c2VyICopLTFMOworCisJcmV0dXJuICh2b2lkIF9fdXNlciAqKXNwOwogfQogCiAjaWZkZWYgQ09ORklHX1g4Nl8zMgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYyBiL2FyY2gveDg2L2tlcm5lbC9zbXBib290LmMKaW5kZXggMjQ5MzM0Zi4uZWY3ZDEwMSAxMDA2NDQKLS0tIGEvYXJjaC94ODYva2VybmVsL3NtcGJvb3QuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvc21wYm9vdC5jCkBAIC0xMTQsMTAgKzExNCw2IEBACiAKIGF0b21pY190IGluaXRfZGVhc3NlcnRlZDsKIAotCi0vKiBTZXQgaWYgd2UgZmluZCBhIEIgc3RlcHBpbmcgQ1BVICovCi1zdGF0aWMgaW50IF9fY3B1aW5pdGRhdGEgc21wX2Jfc3RlcHBpbmc7Ci0KICNpZiBkZWZpbmVkKENPTkZJR19OVU1BKSAmJiBkZWZpbmVkKENPTkZJR19YODZfMzIpCiAKIC8qIHdoaWNoIGxvZ2ljYWwgQ1BVcyBhcmUgb24gd2hpY2ggbm9kZXMgKi8KQEAgLTI3MSw4ICsyNjcsNiBAQAogCWNwdW1hc2tfc2V0X2NwdShjcHVpZCwgY3B1X2NhbGxpbl9tYXNrKTsKIH0KIAotc3RhdGljIGludCBfX2NwdWluaXRkYXRhIHVuc2FmZV9zbXA7Ci0KIC8qCiAgKiBBY3RpdmF0ZSBhIHNlY29uZGFyeSBwcm9jZXNzb3IuCiAgKi8KQEAgLTM0MCw3NiArMzM0LDYgQEAKIAljcHVfaWRsZSgpOwogfQogCi1zdGF0aWMgdm9pZCBfX2NwdWluaXQgc21wX2FwcGx5X3F1aXJrcyhzdHJ1Y3QgY3B1aW5mb194ODYgKmMpCi17Ci0JLyoKLQkgKiBNYXNrIEIsIFBlbnRpdW0sIGJ1dCBub3QgUGVudGl1bSBNTVgKLQkgKi8KLQlpZiAoYy0+eDg2X3ZlbmRvciA9PSBYODZfVkVORE9SX0lOVEVMICYmCi0JICAgIGMtPng4NiA9PSA1ICYmCi0JICAgIGMtPng4Nl9tYXNrID49IDEgJiYgYy0+eDg2X21hc2sgPD0gNCAmJgotCSAgICBjLT54ODZfbW9kZWwgPD0gMykKLQkJLyoKLQkJICogUmVtZW1iZXIgd2UgaGF2ZSBCIHN0ZXAgUGVudGlhIHdpdGggYnVncwotCQkgKi8KLQkJc21wX2Jfc3RlcHBpbmcgPSAxOwotCi0JLyoKLQkgKiBDZXJ0YWluIEF0aGxvbnMgbWlnaHQgd29yayAoZm9yIHZhcmlvdXMgdmFsdWVzIG9mICd3b3JrJykgaW4gU01QCi0JICogYnV0IHRoZXkgYXJlIG5vdCBjZXJ0aWZpZWQgYXMgTVAgY2FwYWJsZS4KLQkgKi8KLQlpZiAoKGMtPng4Nl92ZW5kb3IgPT0gWDg2X1ZFTkRPUl9BTUQpICYmIChjLT54ODYgPT0gNikpIHsKLQotCQlpZiAobnVtX3Bvc3NpYmxlX2NwdXMoKSA9PSAxKQotCQkJZ290byB2YWxpZF9rNzsKLQotCQkvKiBBdGhsb24gNjYwLzY2MSBpcyB2YWxpZC4gKi8KLQkJaWYgKChjLT54ODZfbW9kZWwgPT0gNikgJiYgKChjLT54ODZfbWFzayA9PSAwKSB8fAotCQkgICAgKGMtPng4Nl9tYXNrID09IDEpKSkKLQkJCWdvdG8gdmFsaWRfazc7Ci0KLQkJLyogRHVyb24gNjcwIGlzIHZhbGlkICovCi0JCWlmICgoYy0+eDg2X21vZGVsID09IDcpICYmIChjLT54ODZfbWFzayA9PSAwKSkKLQkJCWdvdG8gdmFsaWRfazc7Ci0KLQkJLyoKLQkJICogQXRobG9uIDY2MiwgRHVyb24gNjcxLCBhbmQgQXRobG9uID5tb2RlbCA3IGhhdmUgY2FwYWJpbGl0eQotCQkgKiBiaXQuIEl0J3Mgd29ydGggbm90aW5nIHRoYXQgdGhlIEE1IHN0ZXBwaW5nICg2NjIpIG9mIHNvbWUKLQkJICogQXRobG9uIFhQJ3MgaGF2ZSB0aGUgTVAgYml0IHNldC4KLQkJICogU2VlIGh0dHA6Ly93d3cuaGVpc2UuZGUvbmV3c3RpY2tlci9kYXRhL2pvdy0xOC4xMC4wMS0wMDAgZm9yCi0JCSAqIG1vcmUuCi0JCSAqLwotCQlpZiAoKChjLT54ODZfbW9kZWwgPT0gNikgJiYgKGMtPng4Nl9tYXNrID49IDIpKSB8fAotCQkgICAgKChjLT54ODZfbW9kZWwgPT0gNykgJiYgKGMtPng4Nl9tYXNrID49IDEpKSB8fAotCQkgICAgIChjLT54ODZfbW9kZWwgPiA3KSkKLQkJCWlmIChjcHVfaGFzX21wKQotCQkJCWdvdG8gdmFsaWRfazc7Ci0KLQkJLyogSWYgd2UgZ2V0IGhlcmUsIG5vdCBhIGNlcnRpZmllZCBTTVAgY2FwYWJsZSBBTUQgc3lzdGVtLiAqLwotCQl1bnNhZmVfc21wID0gMTsKLQl9Ci0KLXZhbGlkX2s3OgotCTsKLX0KLQotc3RhdGljIHZvaWQgX19jcHVpbml0IHNtcF9jaGVja3Modm9pZCkKLXsKLQlpZiAoc21wX2Jfc3RlcHBpbmcpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgIldBUk5JTkc6IFNNUCBvcGVyYXRpb24gbWF5IGJlIHVucmVsaWFibGUiCi0JCQkJICAgICJ3aXRoIEIgc3RlcHBpbmcgcHJvY2Vzc29ycy5cbiIpOwotCi0JLyoKLQkgKiBEb24ndCB0YWludCBpZiB3ZSBhcmUgcnVubmluZyBTTVAga2VybmVsIG9uIGEgc2luZ2xlIG5vbi1NUAotCSAqIGFwcHJvdmVkIEF0aGxvbgotCSAqLwotCWlmICh1bnNhZmVfc21wICYmIG51bV9vbmxpbmVfY3B1cygpID4gMSkgewotCQlwcmludGsoS0VSTl9JTkZPICJXQVJOSU5HOiBUaGlzIGNvbWJpbmF0aW9uIG9mIEFNRCIKLQkJCSJwcm9jZXNzb3JzIGlzIG5vdCBzdWl0YWJsZSBmb3IgU01QLlxuIik7Ci0JCWFkZF90YWludChUQUlOVF9VTlNBRkVfU01QKTsKLQl9Ci19Ci0KIC8qCiAgKiBUaGUgYm9vdHN0cmFwIGtlcm5lbCBlbnRyeSBjb2RlIGhhcyBzZXQgdGhlc2UgdXAuIFNhdmUgdGhlbSBmb3IKICAqIGEgZ2l2ZW4gQ1BVCkBAIC00MjMsNyArMzQ3LDYgQEAKIAljLT5jcHVfaW5kZXggPSBpZDsKIAlpZiAoaWQgIT0gMCkKIAkJaWRlbnRpZnlfc2Vjb25kYXJ5X2NwdShjKTsKLQlzbXBfYXBwbHlfcXVpcmtzKGMpOwogfQogCiAKQEAgLTExOTMsNyArMTExNiw2IEBACiAJcHJfZGVidWcoIkJvb3QgZG9uZS5cbiIpOwogCiAJaW1wcmVzc19mcmllbmRzKCk7Ci0Jc21wX2NoZWNrcygpOwogI2lmZGVmIENPTkZJR19YODZfSU9fQVBJQwogCXNldHVwX2lvYXBpY19kZXN0KCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC90bGJfdXYuYyBiL2FyY2gveDg2L2tlcm5lbC90bGJfdXYuYwppbmRleCBkMDM4YjljLi43OWMwNzMyIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdGxiX3V2LmMKKysrIGIvYXJjaC94ODYva2VybmVsL3RsYl91di5jCkBAIC03NTAsNyArNzUwLDcgQEAKIAlpbnQgbm9kZTsKIAlpbnQgbmJsYWRlczsKIAlpbnQgbGFzdF9ibGFkZTsKLQlpbnQgY3VyX2NwdSA9IDA7CisJaW50IGN1cl9jcHU7CiAKIAlpZiAoIWlzX3V2X3N5c3RlbSgpKQogCQlyZXR1cm4gMDsKQEAgLTc2MCw2ICs3NjAsNyBAQAogCXV2X21tYXNrID0gKDFVTCA8PCB1dl9odWJfaW5mby0+bl92YWwpIC0gMTsKIAluYmxhZGVzID0gMDsKIAlsYXN0X2JsYWRlID0gLTE7CisJY3VyX2NwdSA9IDA7CiAJZm9yX2VhY2hfb25saW5lX25vZGUobm9kZSkgewogCQlibGFkZSA9IHV2X25vZGVfdG9fYmxhZGVfaWQobm9kZSk7CiAJCWlmIChibGFkZSA9PSBsYXN0X2JsYWRlKQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3RvcG9sb2d5LmMgYi9hcmNoL3g4Ni9rZXJuZWwvdG9wb2xvZ3kuYwppbmRleCAwZmNjOTVhLi43ZTQ1MTU5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdG9wb2xvZ3kuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdG9wb2xvZ3kuYwpAQCAtMjUsMTAgKzI1LDEwIEBACiAgKgogICogU2VuZCBmZWVkYmFjayB0byA8Y29scGF0Y2hAdXMuaWJtLmNvbT4KICAqLwotI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KLSNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxsaW51eC9ub2RlbWFzay5oPgogI2luY2x1ZGUgPGxpbnV4L21tem9uZS5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbXAuaD4KICNpbmNsdWRlIDxhc20vY3B1Lmg+CiAKIHN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgeDg2X2NwdSwgY3B1X2RldmljZXMpOwpAQCAtNDcsNiArNDcsNyBAQAogCSAqLwogCWlmIChudW0pCiAJCXBlcl9jcHUoY3B1X2RldmljZXMsIG51bSkuY3B1LmhvdHBsdWdnYWJsZSA9IDE7CisKIAlyZXR1cm4gcmVnaXN0ZXJfY3B1KCZwZXJfY3B1KGNwdV9kZXZpY2VzLCBudW0pLmNwdSwgbnVtKTsKIH0KIEVYUE9SVF9TWU1CT0woYXJjaF9yZWdpc3Rlcl9jcHUpOwpAQCAtNTYsMTIgKzU3LDEzIEBACiAJdW5yZWdpc3Rlcl9jcHUoJnBlcl9jcHUoY3B1X2RldmljZXMsIG51bSkuY3B1KTsKIH0KIEVYUE9SVF9TWU1CT0woYXJjaF91bnJlZ2lzdGVyX2NwdSk7Ci0jZWxzZQorI2Vsc2UgLyogQ09ORklHX0hPVFBMVUdfQ1BVICovCisKIHN0YXRpYyBpbnQgX19pbml0IGFyY2hfcmVnaXN0ZXJfY3B1KGludCBudW0pCiB7CiAJcmV0dXJuIHJlZ2lzdGVyX2NwdSgmcGVyX2NwdShjcHVfZGV2aWNlcywgbnVtKS5jcHUsIG51bSk7CiB9Ci0jZW5kaWYgLypDT05GSUdfSE9UUExVR19DUFUqLworI2VuZGlmIC8qIENPTkZJR19IT1RQTFVHX0NQVSAqLwogCiBzdGF0aWMgaW50IF9faW5pdCB0b3BvbG9neV9pbml0KHZvaWQpCiB7CkBAIC03MCwxMSArNzIsMTEgQEAKICNpZmRlZiBDT05GSUdfTlVNQQogCWZvcl9lYWNoX29ubGluZV9ub2RlKGkpCiAJCXJlZ2lzdGVyX29uZV9ub2RlKGkpOwotI2VuZGlmIC8qIENPTkZJR19OVU1BICovCisjZW5kaWYKIAogCWZvcl9lYWNoX3ByZXNlbnRfY3B1KGkpCiAJCWFyY2hfcmVnaXN0ZXJfY3B1KGkpOworCiAJcmV0dXJuIDA7CiB9Ci0KIHN1YnN5c19pbml0Y2FsbCh0b3BvbG9neV9pbml0KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2tlcm5lbC91dl90aW1lLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdXZfdGltZS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJmZmI2YzUKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNoL3g4Ni9rZXJuZWwvdXZfdGltZS5jCkBAIC0wLDAgKzEsMzkzIEBACisvKgorICogU0dJIFJUQyBjbG9jay90aW1lciByb3V0aW5lcy4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgU2lsaWNvbiBHcmFwaGljcywgSW5jLiAgQWxsIFJpZ2h0cyBSZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKGMpIERpbWl0cmkgU2l2YW5pY2gKKyAqLworI2luY2x1ZGUgPGxpbnV4L2Nsb2NrY2hpcHMuaD4KKworI2luY2x1ZGUgPGFzbS91di91dl9tbXJzLmg+CisjaW5jbHVkZSA8YXNtL3V2L3V2X2h1Yi5oPgorI2luY2x1ZGUgPGFzbS91di9iaW9zLmg+CisjaW5jbHVkZSA8YXNtL3V2L3V2Lmg+CisjaW5jbHVkZSA8YXNtL2FwaWMuaD4KKyNpbmNsdWRlIDxhc20vY3B1Lmg+CisKKyNkZWZpbmUgUlRDX05BTUUJCSJzZ2lfcnRjIgorCitzdGF0aWMgY3ljbGVfdCB1dl9yZWFkX3J0Yyh2b2lkKTsKK3N0YXRpYyBpbnQgdXZfcnRjX25leHRfZXZlbnQodW5zaWduZWQgbG9uZywgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqKTsKK3N0YXRpYyB2b2lkIHV2X3J0Y190aW1lcl9zZXR1cChlbnVtIGNsb2NrX2V2ZW50X21vZGUsCisJCQkJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqKTsKKworc3RhdGljIHN0cnVjdCBjbG9ja3NvdXJjZSBjbG9ja3NvdXJjZV91diA9IHsKKwkubmFtZQkJPSBSVENfTkFNRSwKKwkucmF0aW5nCQk9IDQwMCwKKwkucmVhZAkJPSB1dl9yZWFkX3J0YywKKwkubWFzawkJPSAoY3ljbGVfdClVVkhfUlRDX1JFQUxfVElNRV9DTE9DS19NQVNLLAorCS5zaGlmdAkJPSAxMCwKKwkuZmxhZ3MJCT0gQ0xPQ0tfU09VUkNFX0lTX0NPTlRJTlVPVVMsCit9OworCitzdGF0aWMgc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSBjbG9ja19ldmVudF9kZXZpY2VfdXYgPSB7CisJLm5hbWUJCT0gUlRDX05BTUUsCisJLmZlYXR1cmVzCT0gQ0xPQ0tfRVZUX0ZFQVRfT05FU0hPVCwKKwkuc2hpZnQJCT0gMjAsCisJLnJhdGluZwkJPSA0MDAsCisJLmlycQkJPSAtMSwKKwkuc2V0X25leHRfZXZlbnQJPSB1dl9ydGNfbmV4dF9ldmVudCwKKwkuc2V0X21vZGUJPSB1dl9ydGNfdGltZXJfc2V0dXAsCisJLmV2ZW50X2hhbmRsZXIJPSBOVUxMLAorfTsKKworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UsIGNwdV9jZWQpOworCisvKiBUaGVyZSBpcyBvbmUgb2YgdGhlc2UgYWxsb2NhdGVkIHBlciBub2RlICovCitzdHJ1Y3QgdXZfcnRjX3RpbWVyX2hlYWQgeworCXNwaW5sb2NrX3QJbG9jazsKKwkvKiBuZXh0IGNwdSB3YWl0aW5nIGZvciB0aW1lciwgbG9jYWwgbm9kZSByZWxhdGl2ZTogKi8KKwlpbnQJCW5leHRfY3B1OworCS8qIG51bWJlciBvZiBjcHVzIG9uIHRoaXMgbm9kZTogKi8KKwlpbnQJCW5jcHVzOworCXN0cnVjdCB7CisJCWludAlsY3B1OwkJLyogc3lzdGVtd2lkZSBsb2dpY2FsIGNwdSBudW1iZXIgKi8KKwkJdTY0CWV4cGlyZXM7CS8qIG5leHQgdGltZXIgZXhwaXJhdGlvbiBmb3IgdGhpcyBjcHUgKi8KKwl9IGNwdVsxXTsKK307CisKKy8qCisgKiBBY2Nlc3MgdG8gdXZfcnRjX3RpbWVyX2hlYWQgdmlhIGJsYWRlIGlkLgorICovCitzdGF0aWMgc3RydWN0IHV2X3J0Y190aW1lcl9oZWFkCQkqKmJsYWRlX2luZm8gX19yZWFkX21vc3RseTsKKworc3RhdGljIGludAkJCQl1dl9ydGNfZW5hYmxlOworCisvKgorICogSGFyZHdhcmUgaW50ZXJmYWNlIHJvdXRpbmVzCisgKi8KKworLyogU2VuZCBJUElzIHRvIGFub3RoZXIgbm9kZSAqLworc3RhdGljIHZvaWQgdXZfcnRjX3NlbmRfSVBJKGludCBjcHUpCit7CisJdW5zaWduZWQgbG9uZyBhcGljaWQsIHZhbDsKKwlpbnQgcG5vZGU7CisKKwlhcGljaWQgPSBjcHVfcGh5c2ljYWxfaWQoY3B1KTsKKwlwbm9kZSA9IHV2X2FwaWNpZF90b19wbm9kZShhcGljaWQpOworCXZhbCA9ICgxVUwgPDwgVVZIX0lQSV9JTlRfU0VORF9TSEZUKSB8CisJICAgICAgKGFwaWNpZCA8PCBVVkhfSVBJX0lOVF9BUElDX0lEX1NIRlQpIHwKKwkgICAgICAoR0VORVJJQ19JTlRFUlJVUFRfVkVDVE9SIDw8IFVWSF9JUElfSU5UX1ZFQ1RPUl9TSEZUKTsKKworCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX0lQSV9JTlQsIHZhbCk7Cit9CisKKy8qIENoZWNrIGZvciBhbiBSVEMgaW50ZXJydXB0IHBlbmRpbmcgKi8KK3N0YXRpYyBpbnQgdXZfaW50cl9wZW5kaW5nKGludCBwbm9kZSkKK3sKKwlyZXR1cm4gdXZfcmVhZF9nbG9iYWxfbW1yNjQocG5vZGUsIFVWSF9FVkVOVF9PQ0NVUlJFRDApICYKKwkJVVZIX0VWRU5UX09DQ1VSUkVEMF9SVEMxX01BU0s7Cit9CisKKy8qIFNldHVwIGludGVycnVwdCBhbmQgcmV0dXJuIG5vbi16ZXJvIGlmIGVhcmx5IGV4cGlyYXRpb24gb2NjdXJyZWQuICovCitzdGF0aWMgaW50IHV2X3NldHVwX2ludHIoaW50IGNwdSwgdTY0IGV4cGlyZXMpCit7CisJdTY0IHZhbDsKKwlpbnQgcG5vZGUgPSB1dl9jcHVfdG9fcG5vZGUoY3B1KTsKKworCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX1JUQzFfSU5UX0NPTkZJRywKKwkJVVZIX1JUQzFfSU5UX0NPTkZJR19NX01BU0spOworCXV2X3dyaXRlX2dsb2JhbF9tbXI2NChwbm9kZSwgVVZIX0lOVF9DTVBCLCAtMUwpOworCisJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLCBVVkhfRVZFTlRfT0NDVVJSRUQwX0FMSUFTLAorCQlVVkhfRVZFTlRfT0NDVVJSRUQwX1JUQzFfTUFTSyk7CisKKwl2YWwgPSAoR0VORVJJQ19JTlRFUlJVUFRfVkVDVE9SIDw8IFVWSF9SVEMxX0lOVF9DT05GSUdfVkVDVE9SX1NIRlQpIHwKKwkJKCh1NjQpY3B1X3BoeXNpY2FsX2lkKGNwdSkgPDwgVVZIX1JUQzFfSU5UX0NPTkZJR19BUElDX0lEX1NIRlQpOworCisJLyogU2V0IGNvbmZpZ3VyYXRpb24gKi8KKwl1dl93cml0ZV9nbG9iYWxfbW1yNjQocG5vZGUsIFVWSF9SVEMxX0lOVF9DT05GSUcsIHZhbCk7CisJLyogSW5pdGlhbGl6ZSBjb21wYXJhdG9yIHZhbHVlICovCisJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLCBVVkhfSU5UX0NNUEIsIGV4cGlyZXMpOworCisJcmV0dXJuIChleHBpcmVzIDwgdXZfcmVhZF9ydGMoKSAmJiAhdXZfaW50cl9wZW5kaW5nKHBub2RlKSk7Cit9CisKKy8qCisgKiBQZXItY3B1IHRpbWVyIHRyYWNraW5nIHJvdXRpbmVzCisgKi8KKworc3RhdGljIF9faW5pdCB2b2lkIHV2X3J0Y19kZWFsbG9jYXRlX3RpbWVycyh2b2lkKQoreworCWludCBiaWQ7CisKKwlmb3JfZWFjaF9wb3NzaWJsZV9ibGFkZShiaWQpIHsKKwkJa2ZyZWUoYmxhZGVfaW5mb1tiaWRdKTsKKwl9CisJa2ZyZWUoYmxhZGVfaW5mbyk7Cit9CisKKy8qIEFsbG9jYXRlIHBlci1ub2RlIGxpc3Qgb2YgY3B1IHRpbWVyIGV4cGlyYXRpb24gdGltZXMuICovCitzdGF0aWMgX19pbml0IGludCB1dl9ydGNfYWxsb2NhdGVfdGltZXJzKHZvaWQpCit7CisJaW50IGNwdTsKKworCWJsYWRlX2luZm8gPSBrbWFsbG9jKHV2X3Bvc3NpYmxlX2JsYWRlcyAqIHNpemVvZih2b2lkICopLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJsYWRlX2luZm8pCisJCXJldHVybiAtRU5PTUVNOworCW1lbXNldChibGFkZV9pbmZvLCAwLCB1dl9wb3NzaWJsZV9ibGFkZXMgKiBzaXplb2Yodm9pZCAqKSk7CisKKwlmb3JfZWFjaF9wcmVzZW50X2NwdShjcHUpIHsKKwkJaW50IG5pZCA9IGNwdV90b19ub2RlKGNwdSk7CisJCWludCBiaWQgPSB1dl9jcHVfdG9fYmxhZGVfaWQoY3B1KTsKKwkJaW50IGJjcHUgPSB1dl9jcHVfaHViX2luZm8oY3B1KS0+YmxhZGVfcHJvY2Vzc29yX2lkOworCQlzdHJ1Y3QgdXZfcnRjX3RpbWVyX2hlYWQgKmhlYWQgPSBibGFkZV9pbmZvW2JpZF07CisKKwkJaWYgKCFoZWFkKSB7CisJCQloZWFkID0ga21hbGxvY19ub2RlKHNpemVvZihzdHJ1Y3QgdXZfcnRjX3RpbWVyX2hlYWQpICsKKwkJCQkodXZfYmxhZGVfbnJfcG9zc2libGVfY3B1cyhiaWQpICoKKwkJCQkJMiAqIHNpemVvZih1NjQpKSwKKwkJCQlHRlBfS0VSTkVMLCBuaWQpOworCQkJaWYgKCFoZWFkKSB7CisJCQkJdXZfcnRjX2RlYWxsb2NhdGVfdGltZXJzKCk7CisJCQkJcmV0dXJuIC1FTk9NRU07CisJCQl9CisJCQlzcGluX2xvY2tfaW5pdCgmaGVhZC0+bG9jayk7CisJCQloZWFkLT5uY3B1cyA9IHV2X2JsYWRlX25yX3Bvc3NpYmxlX2NwdXMoYmlkKTsKKwkJCWhlYWQtPm5leHRfY3B1ID0gLTE7CisJCQlibGFkZV9pbmZvW2JpZF0gPSBoZWFkOworCQl9CisKKwkJaGVhZC0+Y3B1W2JjcHVdLmxjcHUgPSBjcHU7CisJCWhlYWQtPmNwdVtiY3B1XS5leHBpcmVzID0gVUxMT05HX01BWDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogRmluZCBhbmQgc2V0IHRoZSBuZXh0IGV4cGlyaW5nIHRpbWVyLiAgKi8KK3N0YXRpYyB2b2lkIHV2X3J0Y19maW5kX25leHRfdGltZXIoc3RydWN0IHV2X3J0Y190aW1lcl9oZWFkICpoZWFkLCBpbnQgcG5vZGUpCit7CisJdTY0IGxvd2VzdCA9IFVMTE9OR19NQVg7CisJaW50IGMsIGJjcHUgPSAtMTsKKworCWhlYWQtPm5leHRfY3B1ID0gLTE7CisJZm9yIChjID0gMDsgYyA8IGhlYWQtPm5jcHVzOyBjKyspIHsKKwkJdTY0IGV4cCA9IGhlYWQtPmNwdVtjXS5leHBpcmVzOworCQlpZiAoZXhwIDwgbG93ZXN0KSB7CisJCQliY3B1ID0gYzsKKwkJCWxvd2VzdCA9IGV4cDsKKwkJfQorCX0KKwlpZiAoYmNwdSA+PSAwKSB7CisJCWhlYWQtPm5leHRfY3B1ID0gYmNwdTsKKwkJYyA9IGhlYWQtPmNwdVtiY3B1XS5sY3B1OworCQlpZiAodXZfc2V0dXBfaW50cihjLCBsb3dlc3QpKQorCQkJLyogSWYgd2UgZGlkbid0IHNldCBpdCB1cCBpbiB0aW1lLCB0cmlnZ2VyICovCisJCQl1dl9ydGNfc2VuZF9JUEkoYyk7CisJfSBlbHNlIHsKKwkJdXZfd3JpdGVfZ2xvYmFsX21tcjY0KHBub2RlLCBVVkhfUlRDMV9JTlRfQ09ORklHLAorCQkJVVZIX1JUQzFfSU5UX0NPTkZJR19NX01BU0spOworCX0KK30KKworLyoKKyAqIFNldCBleHBpcmF0aW9uIHRpbWUgZm9yIGN1cnJlbnQgY3B1LgorICoKKyAqIFJldHVybnMgMSBpZiB3ZSBtaXNzZWQgdGhlIGV4cGlyYXRpb24gdGltZS4KKyAqLworc3RhdGljIGludCB1dl9ydGNfc2V0X3RpbWVyKGludCBjcHUsIHU2NCBleHBpcmVzKQoreworCWludCBwbm9kZSA9IHV2X2NwdV90b19wbm9kZShjcHUpOworCWludCBiaWQgPSB1dl9jcHVfdG9fYmxhZGVfaWQoY3B1KTsKKwlzdHJ1Y3QgdXZfcnRjX3RpbWVyX2hlYWQgKmhlYWQgPSBibGFkZV9pbmZvW2JpZF07CisJaW50IGJjcHUgPSB1dl9jcHVfaHViX2luZm8oY3B1KS0+YmxhZGVfcHJvY2Vzc29yX2lkOworCXU2NCAqdCA9ICZoZWFkLT5jcHVbYmNwdV0uZXhwaXJlczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCBuZXh0X2NwdTsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZoZWFkLT5sb2NrLCBmbGFncyk7CisKKwluZXh0X2NwdSA9IGhlYWQtPm5leHRfY3B1OworCSp0ID0gZXhwaXJlczsKKwkvKiBXaWxsIHRoaXMgb25lIGJlIG5leHQgdG8gZ28gb2ZmPyAqLworCWlmIChuZXh0X2NwdSA8IDAgfHwgYmNwdSA9PSBuZXh0X2NwdSB8fAorCQkJZXhwaXJlcyA8IGhlYWQtPmNwdVtuZXh0X2NwdV0uZXhwaXJlcykgeworCQloZWFkLT5uZXh0X2NwdSA9IGJjcHU7CisJCWlmICh1dl9zZXR1cF9pbnRyKGNwdSwgZXhwaXJlcykpIHsKKwkJCSp0ID0gVUxMT05HX01BWDsKKwkJCXV2X3J0Y19maW5kX25leHRfdGltZXIoaGVhZCwgcG5vZGUpOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaGVhZC0+bG9jaywgZmxhZ3MpOworCQkJcmV0dXJuIDE7CisJCX0KKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoZWFkLT5sb2NrLCBmbGFncyk7CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBVbnNldCBleHBpcmF0aW9uIHRpbWUgZm9yIGN1cnJlbnQgY3B1LgorICoKKyAqIFJldHVybnMgMSBpZiB0aGlzIHRpbWVyIHdhcyBwZW5kaW5nLgorICovCitzdGF0aWMgaW50IHV2X3J0Y191bnNldF90aW1lcihpbnQgY3B1KQoreworCWludCBwbm9kZSA9IHV2X2NwdV90b19wbm9kZShjcHUpOworCWludCBiaWQgPSB1dl9jcHVfdG9fYmxhZGVfaWQoY3B1KTsKKwlzdHJ1Y3QgdXZfcnRjX3RpbWVyX2hlYWQgKmhlYWQgPSBibGFkZV9pbmZvW2JpZF07CisJaW50IGJjcHUgPSB1dl9jcHVfaHViX2luZm8oY3B1KS0+YmxhZGVfcHJvY2Vzc29yX2lkOworCXU2NCAqdCA9ICZoZWFkLT5jcHVbYmNwdV0uZXhwaXJlczsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCWludCByYyA9IDA7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaGVhZC0+bG9jaywgZmxhZ3MpOworCisJaWYgKGhlYWQtPm5leHRfY3B1ID09IGJjcHUgJiYgdXZfcmVhZF9ydGMoKSA+PSAqdCkKKwkJcmMgPSAxOworCisJKnQgPSBVTExPTkdfTUFYOworCisJLyogV2FzIHRoZSBoYXJkd2FyZSBzZXR1cCBmb3IgdGhpcyB0aW1lcj8gKi8KKwlpZiAoaGVhZC0+bmV4dF9jcHUgPT0gYmNwdSkKKwkJdXZfcnRjX2ZpbmRfbmV4dF90aW1lcihoZWFkLCBwbm9kZSk7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZoZWFkLT5sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gcmM7Cit9CisKKworLyoKKyAqIEtlcm5lbCBpbnRlcmZhY2Ugcm91dGluZXMuCisgKi8KKworLyoKKyAqIFJlYWQgdGhlIFJUQy4KKyAqLworc3RhdGljIGN5Y2xlX3QgdXZfcmVhZF9ydGModm9pZCkKK3sKKwlyZXR1cm4gKGN5Y2xlX3QpdXZfcmVhZF9sb2NhbF9tbXIoVVZIX1JUQyk7Cit9CisKKy8qCisgKiBQcm9ncmFtIHRoZSBuZXh0IGV2ZW50LCByZWxhdGl2ZSB0byBub3cKKyAqLworc3RhdGljIGludCB1dl9ydGNfbmV4dF9ldmVudCh1bnNpZ25lZCBsb25nIGRlbHRhLAorCQkJICAgICBzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZWQpCit7CisJaW50IGNlZF9jcHUgPSBjcHVtYXNrX2ZpcnN0KGNlZC0+Y3B1bWFzayk7CisKKwlyZXR1cm4gdXZfcnRjX3NldF90aW1lcihjZWRfY3B1LCBkZWx0YSArIHV2X3JlYWRfcnRjKCkpOworfQorCisvKgorICogU2V0dXAgdGhlIFJUQyB0aW1lciBpbiBvbmVzaG90IG1vZGUKKyAqLworc3RhdGljIHZvaWQgdXZfcnRjX3RpbWVyX3NldHVwKGVudW0gY2xvY2tfZXZlbnRfbW9kZSBtb2RlLAorCQkJICAgICAgIHN0cnVjdCBjbG9ja19ldmVudF9kZXZpY2UgKmV2dCkKK3sKKwlpbnQgY2VkX2NwdSA9IGNwdW1hc2tfZmlyc3QoZXZ0LT5jcHVtYXNrKTsKKworCXN3aXRjaCAobW9kZSkgeworCWNhc2UgQ0xPQ0tfRVZUX01PREVfUEVSSU9ESUM6CisJY2FzZSBDTE9DS19FVlRfTU9ERV9PTkVTSE9UOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfUkVTVU1FOgorCQkvKiBOb3RoaW5nIHRvIGRvIGhlcmUgeWV0ICovCisJCWJyZWFrOworCWNhc2UgQ0xPQ0tfRVZUX01PREVfVU5VU0VEOgorCWNhc2UgQ0xPQ0tfRVZUX01PREVfU0hVVERPV046CisJCXV2X3J0Y191bnNldF90aW1lcihjZWRfY3B1KTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgdm9pZCB1dl9ydGNfaW50ZXJydXB0KHZvaWQpCit7CisJc3RydWN0IGNsb2NrX2V2ZW50X2RldmljZSAqY2VkID0gJl9fZ2V0X2NwdV92YXIoY3B1X2NlZCk7CisJaW50IGNwdSA9IHNtcF9wcm9jZXNzb3JfaWQoKTsKKworCWlmICghY2VkIHx8ICFjZWQtPmV2ZW50X2hhbmRsZXIpCisJCXJldHVybjsKKworCWlmICh1dl9ydGNfdW5zZXRfdGltZXIoY3B1KSAhPSAxKQorCQlyZXR1cm47CisKKwljZWQtPmV2ZW50X2hhbmRsZXIoY2VkKTsKK30KKworc3RhdGljIGludCBfX2luaXQgdXZfZW5hYmxlX3J0YyhjaGFyICpzdHIpCit7CisJdXZfcnRjX2VuYWJsZSA9IDE7CisKKwlyZXR1cm4gMTsKK30KK19fc2V0dXAoInV2cnRjIiwgdXZfZW5hYmxlX3J0Yyk7CisKK3N0YXRpYyBfX2luaXQgdm9pZCB1dl9ydGNfcmVnaXN0ZXJfY2xvY2tldmVudHMoc3RydWN0IHdvcmtfc3RydWN0ICpkdW1teSkKK3sKKwlzdHJ1Y3QgY2xvY2tfZXZlbnRfZGV2aWNlICpjZWQgPSAmX19nZXRfY3B1X3ZhcihjcHVfY2VkKTsKKworCSpjZWQgPSBjbG9ja19ldmVudF9kZXZpY2VfdXY7CisJY2VkLT5jcHVtYXNrID0gY3B1bWFza19vZihzbXBfcHJvY2Vzc29yX2lkKCkpOworCWNsb2NrZXZlbnRzX3JlZ2lzdGVyX2RldmljZShjZWQpOworfQorCitzdGF0aWMgX19pbml0IGludCB1dl9ydGNfc2V0dXBfY2xvY2sodm9pZCkKK3sKKwlpbnQgcmM7CisKKwlpZiAoIXV2X3J0Y19lbmFibGUgfHwgIWlzX3V2X3N5c3RlbSgpIHx8IGdlbmVyaWNfaW50ZXJydXB0X2V4dGVuc2lvbikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlnZW5lcmljX2ludGVycnVwdF9leHRlbnNpb24gPSB1dl9ydGNfaW50ZXJydXB0OworCisJY2xvY2tzb3VyY2VfdXYubXVsdCA9IGNsb2Nrc291cmNlX2h6Mm11bHQoc25fcnRjX2N5Y2xlc19wZXJfc2Vjb25kLAorCQkJCWNsb2Nrc291cmNlX3V2LnNoaWZ0KTsKKworCXJjID0gY2xvY2tzb3VyY2VfcmVnaXN0ZXIoJmNsb2Nrc291cmNlX3V2KTsKKwlpZiAocmMpIHsKKwkJZ2VuZXJpY19pbnRlcnJ1cHRfZXh0ZW5zaW9uID0gTlVMTDsKKwkJcmV0dXJuIHJjOworCX0KKworCS8qIFNldHVwIGFuZCByZWdpc3RlciBjbG9ja2V2ZW50cyAqLworCXJjID0gdXZfcnRjX2FsbG9jYXRlX3RpbWVycygpOworCWlmIChyYykgeworCQljbG9ja3NvdXJjZV91bnJlZ2lzdGVyKCZjbG9ja3NvdXJjZV91dik7CisJCWdlbmVyaWNfaW50ZXJydXB0X2V4dGVuc2lvbiA9IE5VTEw7CisJCXJldHVybiByYzsKKwl9CisKKwljbG9ja19ldmVudF9kZXZpY2VfdXYubXVsdCA9IGRpdl9zYyhzbl9ydGNfY3ljbGVzX3Blcl9zZWNvbmQsCisJCQkJTlNFQ19QRVJfU0VDLCBjbG9ja19ldmVudF9kZXZpY2VfdXYuc2hpZnQpOworCisJY2xvY2tfZXZlbnRfZGV2aWNlX3V2Lm1pbl9kZWx0YV9ucyA9IE5TRUNfUEVSX1NFQyAvCisJCQkJCQlzbl9ydGNfY3ljbGVzX3Blcl9zZWNvbmQ7CisKKwljbG9ja19ldmVudF9kZXZpY2VfdXYubWF4X2RlbHRhX25zID0gY2xvY2tzb3VyY2VfdXYubWFzayAqCisJCQkJKE5TRUNfUEVSX1NFQyAvIHNuX3J0Y19jeWNsZXNfcGVyX3NlY29uZCk7CisKKwlyYyA9IHNjaGVkdWxlX29uX2VhY2hfY3B1KHV2X3J0Y19yZWdpc3Rlcl9jbG9ja2V2ZW50cyk7CisJaWYgKHJjKSB7CisJCWNsb2Nrc291cmNlX3VucmVnaXN0ZXIoJmNsb2Nrc291cmNlX3V2KTsKKwkJZ2VuZXJpY19pbnRlcnJ1cHRfZXh0ZW5zaW9uID0gTlVMTDsKKwkJdXZfcnRjX2RlYWxsb2NhdGVfdGltZXJzKCk7CisJfQorCisJcmV0dXJuIHJjOworfQorYXJjaF9pbml0Y2FsbCh1dl9ydGNfc2V0dXBfY2xvY2spOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3Zpc3dzX3F1aXJrcy5jIGIvYXJjaC94ODYva2VybmVsL3Zpc3dzX3F1aXJrcy5jCmluZGV4IDE5MWE4NzYuLjMxZmZjMjQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC92aXN3c19xdWlya3MuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdmlzd3NfcXVpcmtzLmMKQEAgLTU3OCw3ICs1NzgsNyBAQAogc3RhdGljIGlycXJldHVybl90IHBpaXg0X21hc3Rlcl9pbnRyKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlpbnQgcmVhbGlycTsKLQlpcnFfZGVzY190ICpkZXNjOworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmk4MjU5QV9sb2NrLCBmbGFncyk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdm1pXzMyLmMgYi9hcmNoL3g4Ni9rZXJuZWwvdm1pXzMyLmMKaW5kZXggMmNjNGE5MC4uOTVkZWI5ZjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC92bWlfMzIuYworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdm1pXzMyLmMKQEAgLTM5NSwxMSArMzk1LDYgQEAKIAl2bWlfb3BzLnVwZGF0ZV9wdGUocHRlcCwgVk1JX1BBR0VfUFQpOwogfQogCi1zdGF0aWMgdm9pZCB2bWlfc2V0X3B0ZV9wcmVzZW50KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGVwLCBwdGVfdCBwdGUpCi17Ci0Jdm1pX29wcy5zZXRfcHRlKHB0ZSwgcHRlcCwgdm1pX2ZsYWdzX2FkZHJfZGVmZXIobW0sIGFkZHIsIFZNSV9QQUdFX1BULCAxKSk7Ci19Ci0KIHN0YXRpYyB2b2lkIHZtaV9zZXRfcHVkKHB1ZF90ICpwdWRwLCBwdWRfdCBwdWR2YWwpCiB7CiAJLyogVW0sIGV3dyAqLwpAQCAtNzUwLDcgKzc0NSw2IEBACiAJCXB2X21tdV9vcHMuc2V0X3BtZCA9IHZtaV9zZXRfcG1kOwogI2lmZGVmIENPTkZJR19YODZfUEFFCiAJCXB2X21tdV9vcHMuc2V0X3B0ZV9hdG9taWMgPSB2bWlfc2V0X3B0ZV9hdG9taWM7Ci0JCXB2X21tdV9vcHMuc2V0X3B0ZV9wcmVzZW50ID0gdm1pX3NldF9wdGVfcHJlc2VudDsKIAkJcHZfbW11X29wcy5zZXRfcHVkID0gdm1pX3NldF9wdWQ7CiAJCXB2X21tdV9vcHMucHRlX2NsZWFyID0gdm1pX3B0ZV9jbGVhcjsKIAkJcHZfbW11X29wcy5wbWRfY2xlYXIgPSB2bWlfcG1kX2NsZWFyOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva2VybmVsL3ZtbGludXhfMzIubGRzLlMgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eF8zMi5sZHMuUwppbmRleCAwZDg2MDk2Li42MmFkNTAwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eF8zMi5sZHMuUworKysgYi9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eF8zMi5sZHMuUwpAQCAtMTg5LDE1ICsxODksMjQgQEAKIAkqKC5ic3MpCiAJLiA9IEFMSUdOKDQpOwogCV9fYnNzX3N0b3AgPSAuOwotICAJX2VuZCA9IC4gOwotCS8qIFRoaXMgaXMgd2hlcmUgdGhlIGtlcm5lbCBjcmVhdGVzIHRoZSBlYXJseSBib290IHBhZ2UgdGFibGVzICovCisgIH0KKworICAuYnJrIDogQVQoQUREUiguYnJrKSAtIExPQURfT0ZGU0VUKSB7CiAJLiA9IEFMSUdOKFBBR0VfU0laRSk7Ci0JcGcwID0gLiA7CisJX19icmtfYmFzZSA9IC4gOworIAkuICs9IDY0ICogMTAyNCA7CS8qIDY0ayBhbGlnbm1lbnQgc2xvcCBzcGFjZSAqLworCSooLmJya19yZXNlcnZhdGlvbikJLyogYXJlYXMgYnJrIHVzZXJzIGhhdmUgcmVzZXJ2ZWQgKi8KKwlfX2Jya19saW1pdCA9IC4gOworICB9CisKKyAgLmVuZCA6IEFUKEFERFIoLmVuZCkgLSBMT0FEX09GRlNFVCkgeworCV9lbmQgPSAuIDsKICAgfQogCiAgIC8qIFNlY3Rpb25zIHRvIGJlIGRpc2NhcmRlZCAqLwogICAvRElTQ0FSRC8gOiB7CiAJKiguZXhpdGNhbGwuZXhpdCkKKwkqKC5kaXNjYXJkKQogCX0KIAogICBTVEFCU19ERUJVRwpAQCAtMjA1LDYgKzIxNCwxMiBAQAogICBEV0FSRl9ERUJVRwogfQogCisvKgorICogQnVpbGQtdGltZSBjaGVjayBvbiB0aGUgaW1hZ2Ugc2l6ZToKKyAqLworQVNTRVJUKChfZW5kIC0gTE9BRF9PRkZTRVQgPD0gS0VSTkVMX0lNQUdFX1NJWkUpLAorCSJrZXJuZWwgaW1hZ2UgYmlnZ2VyIHRoYW4gS0VSTkVMX0lNQUdFX1NJWkUiKQorCiAjaWZkZWYgQ09ORklHX0tFWEVDCiAvKiBMaW5rIHRpbWUgY2hlY2tzICovCiAjaW5jbHVkZSA8YXNtL2tleGVjLmg+CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdm1saW51eF82NC5sZHMuUyBiL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4XzY0Lmxkcy5TCmluZGV4IGZiZmNlZDYuLmM4NzQyNTAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4XzY0Lmxkcy5TCisrKyBiL2FyY2gveDg2L2tlcm5lbC92bWxpbnV4XzY0Lmxkcy5TCkBAIC0yOSw4ICsyOSw4IEBACiB7CiAgIC4gPSBfX1NUQVJUX0tFUk5FTDsKICAgcGh5c19zdGFydHVwXzY0ID0gc3RhcnR1cF82NCAtIExPQURfT0ZGU0VUOwotICBfdGV4dCA9IC47CQkJLyogVGV4dCBhbmQgcmVhZC1vbmx5IGRhdGEgKi8KICAgLnRleHQgOiAgQVQoQUREUigudGV4dCkgLSBMT0FEX09GRlNFVCkgeworCV90ZXh0ID0gLjsJCQkvKiBUZXh0IGFuZCByZWFkLW9ubHkgZGF0YSAqLwogCS8qIEZpcnN0IHRoZSBjb2RlIHRoYXQgaGFzIHRvIGJlIGZpcnN0IGZvciBib290c3RyYXBwaW5nICovCiAJKigudGV4dC5oZWFkKQogCV9zdGV4dCA9IC47CkBAIC02MSwxMyArNjEsMTMgQEAKICAgLmRhdGEgOiBBVChBRERSKC5kYXRhKSAtIExPQURfT0ZGU0VUKSB7CiAJREFUQV9EQVRBCiAJQ09OU1RSVUNUT1JTCisJX2VkYXRhID0gLjsJCQkvKiBFbmQgb2YgZGF0YSBzZWN0aW9uICovCiAJfSA6ZGF0YQogCi0gIF9lZGF0YSA9IC47CQkJLyogRW5kIG9mIGRhdGEgc2VjdGlvbiAqLwogCi0gIC4gPSBBTElHTihQQUdFX1NJWkUpOwotICAuID0gQUxJR04oQ09ORklHX1g4Nl9MMV9DQUNIRV9CWVRFUyk7CiAgIC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkIDogQVQoQUREUiguZGF0YS5jYWNoZWxpbmVfYWxpZ25lZCkgLSBMT0FEX09GRlNFVCkgeworCS4gPSBBTElHTihQQUdFX1NJWkUpOworCS4gPSBBTElHTihDT05GSUdfWDg2X0wxX0NBQ0hFX0JZVEVTKTsKIAkqKC5kYXRhLmNhY2hlbGluZV9hbGlnbmVkKQogICB9CiAgIC4gPSBBTElHTihDT05GSUdfWDg2X0lOVEVSTk9ERV9DQUNIRV9CWVRFUyk7CkBAIC0xMjUsMjkgKzEyNSwyOSBAQAogI3VuZGVmIFZWSVJUX09GRlNFVAogI3VuZGVmIFZWSVJUCiAKLSAgLiA9IEFMSUdOKFRIUkVBRF9TSVpFKTsJLyogaW5pdF90YXNrICovCiAgIC5kYXRhLmluaXRfdGFzayA6IEFUKEFERFIoLmRhdGEuaW5pdF90YXNrKSAtIExPQURfT0ZGU0VUKSB7CisJLiA9IEFMSUdOKFRIUkVBRF9TSVpFKTsJLyogaW5pdF90YXNrICovCiAJKiguZGF0YS5pbml0X3Rhc2spCiAgIH06ZGF0YS5pbml0CiAKLSAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAgIC5kYXRhLnBhZ2VfYWxpZ25lZCA6IEFUKEFERFIoLmRhdGEucGFnZV9hbGlnbmVkKSAtIExPQURfT0ZGU0VUKSB7CisJLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAJKiguZGF0YS5wYWdlX2FsaWduZWQpCiAgIH0KIAotICAvKiBtaWdodCBnZXQgZnJlZWQgYWZ0ZXIgaW5pdCAqLwotICAuID0gQUxJR04oUEFHRV9TSVpFKTsKLSAgX19zbXBfYWx0X2JlZ2luID0gLjsKLSAgX19zbXBfbG9ja3MgPSAuOwogICAuc21wX2xvY2tzIDogQVQoQUREUiguc21wX2xvY2tzKSAtIExPQURfT0ZGU0VUKSB7CisJLyogbWlnaHQgZ2V0IGZyZWVkIGFmdGVyIGluaXQgKi8KKwkuID0gQUxJR04oUEFHRV9TSVpFKTsKKwlfX3NtcF9hbHRfYmVnaW4gPSAuOworCV9fc21wX2xvY2tzID0gLjsKIAkqKC5zbXBfbG9ja3MpCisJX19zbXBfbG9ja3NfZW5kID0gLjsKKwkuID0gQUxJR04oUEFHRV9TSVpFKTsKKwlfX3NtcF9hbHRfZW5kID0gLjsKICAgfQotICBfX3NtcF9sb2Nrc19lbmQgPSAuOwotICAuID0gQUxJR04oUEFHRV9TSVpFKTsKLSAgX19zbXBfYWx0X2VuZCA9IC47CiAKICAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CQkvKiBJbml0IGNvZGUgYW5kIGRhdGEgKi8KLSAgX19pbml0X2JlZ2luID0gLjsKKyAgX19pbml0X2JlZ2luID0gLjsJLyogcGFpcmVkIHdpdGggX19pbml0X2VuZCAqLwogICAuaW5pdC50ZXh0IDogQVQoQUREUiguaW5pdC50ZXh0KSAtIExPQURfT0ZGU0VUKSB7CiAJX3Npbml0dGV4dCA9IC47CiAJSU5JVF9URVhUCkBAIC0xNTksNDAgKzE1OSw0MiBAQAogCV9faW5pdGRhdGFfZW5kID0gLjsKICAgIH0KIAotICAuID0gQUxJR04oMTYpOwotICBfX3NldHVwX3N0YXJ0ID0gLjsKLSAgLmluaXQuc2V0dXAgOiBBVChBRERSKC5pbml0LnNldHVwKSAtIExPQURfT0ZGU0VUKSB7ICooLmluaXQuc2V0dXApIH0KLSAgX19zZXR1cF9lbmQgPSAuOwotICBfX2luaXRjYWxsX3N0YXJ0ID0gLjsKKyAgLmluaXQuc2V0dXAgOiBBVChBRERSKC5pbml0LnNldHVwKSAtIExPQURfT0ZGU0VUKSB7CisJLiA9IEFMSUdOKDE2KTsKKwlfX3NldHVwX3N0YXJ0ID0gLjsKKwkqKC5pbml0LnNldHVwKQorCV9fc2V0dXBfZW5kID0gLjsKKyAgfQogICAuaW5pdGNhbGwuaW5pdCA6IEFUKEFERFIoLmluaXRjYWxsLmluaXQpIC0gTE9BRF9PRkZTRVQpIHsKKwlfX2luaXRjYWxsX3N0YXJ0ID0gLjsKIAlJTklUQ0FMTFMKKwlfX2luaXRjYWxsX2VuZCA9IC47CiAgIH0KLSAgX19pbml0Y2FsbF9lbmQgPSAuOwotICBfX2Nvbl9pbml0Y2FsbF9zdGFydCA9IC47CiAgIC5jb25faW5pdGNhbGwuaW5pdCA6IEFUKEFERFIoLmNvbl9pbml0Y2FsbC5pbml0KSAtIExPQURfT0ZGU0VUKSB7CisJX19jb25faW5pdGNhbGxfc3RhcnQgPSAuOwogCSooLmNvbl9pbml0Y2FsbC5pbml0KQorCV9fY29uX2luaXRjYWxsX2VuZCA9IC47CiAgIH0KLSAgX19jb25faW5pdGNhbGxfZW5kID0gLjsKLSAgX194ODZfY3B1X2Rldl9zdGFydCA9IC47CiAgIC54ODZfY3B1X2Rldi5pbml0IDogQVQoQUREUigueDg2X2NwdV9kZXYuaW5pdCkgLSBMT0FEX09GRlNFVCkgeworCV9feDg2X2NwdV9kZXZfc3RhcnQgPSAuOwogCSooLng4Nl9jcHVfZGV2LmluaXQpCisJX194ODZfY3B1X2Rldl9lbmQgPSAuOwogICB9Ci0gIF9feDg2X2NwdV9kZXZfZW5kID0gLjsKICAgU0VDVVJJVFlfSU5JVAogCiAgIC4gPSBBTElHTig4KTsKICAgLnBhcmFpbnN0cnVjdGlvbnMgOiBBVChBRERSKC5wYXJhaW5zdHJ1Y3Rpb25zKSAtIExPQURfT0ZGU0VUKSB7Ci0gIF9fcGFyYWluc3RydWN0aW9ucyA9IC47CisJX19wYXJhaW5zdHJ1Y3Rpb25zID0gLjsKICAgICAgICAqKC5wYXJhaW5zdHJ1Y3Rpb25zKQotICBfX3BhcmFpbnN0cnVjdGlvbnNfZW5kID0gLjsKKwlfX3BhcmFpbnN0cnVjdGlvbnNfZW5kID0gLjsKICAgfQogCi0gIC4gPSBBTElHTig4KTsKLSAgX19hbHRfaW5zdHJ1Y3Rpb25zID0gLjsKICAgLmFsdGluc3RydWN0aW9ucyA6IEFUKEFERFIoLmFsdGluc3RydWN0aW9ucykgLSBMT0FEX09GRlNFVCkgeworCS4gPSBBTElHTig4KTsKKwlfX2FsdF9pbnN0cnVjdGlvbnMgPSAuOwogCSooLmFsdGluc3RydWN0aW9ucykKKwlfX2FsdF9pbnN0cnVjdGlvbnNfZW5kID0gLjsKICAgfQotICBfX2FsdF9pbnN0cnVjdGlvbnNfZW5kID0gLjsKICAgLmFsdGluc3RyX3JlcGxhY2VtZW50IDogQVQoQUREUiguYWx0aW5zdHJfcmVwbGFjZW1lbnQpIC0gTE9BRF9PRkZTRVQpIHsKIAkqKC5hbHRpbnN0cl9yZXBsYWNlbWVudCkKICAgfQpAQCAtMjA3LDkgKzIwOSwxMSBAQAogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSU5JVFJECiAgIC4gPSBBTElHTihQQUdFX1NJWkUpOwotICBfX2luaXRyYW1mc19zdGFydCA9IC47Ci0gIC5pbml0LnJhbWZzIDogQVQoQUREUiguaW5pdC5yYW1mcykgLSBMT0FEX09GRlNFVCkgeyAqKC5pbml0LnJhbWZzKSB9Ci0gIF9faW5pdHJhbWZzX2VuZCA9IC47CisgIC5pbml0LnJhbWZzIDogQVQoQUREUiguaW5pdC5yYW1mcykgLSBMT0FEX09GRlNFVCkgeworCV9faW5pdHJhbWZzX3N0YXJ0ID0gLjsKKwkqKC5pbml0LnJhbWZzKQorCV9faW5pdHJhbWZzX2VuZCA9IC47CisgIH0KICNlbmRpZgogCiAjaWZkZWYgQ09ORklHX1NNUApAQCAtMjI5LDIwICsyMzMsMjkgQEAKICAgLiA9IEFMSUdOKFBBR0VfU0laRSk7CiAgIF9faW5pdF9lbmQgPSAuOwogCi0gIC4gPSBBTElHTihQQUdFX1NJWkUpOwotICBfX25vc2F2ZV9iZWdpbiA9IC47CiAgIC5kYXRhX25vc2F2ZSA6IEFUKEFERFIoLmRhdGFfbm9zYXZlKSAtIExPQURfT0ZGU0VUKSB7Ci0gICAgICAqKC5kYXRhLm5vc2F2ZSkKKwkuID0gQUxJR04oUEFHRV9TSVpFKTsKKwlfX25vc2F2ZV9iZWdpbiA9IC47CisJKiguZGF0YS5ub3NhdmUpCisJLiA9IEFMSUdOKFBBR0VfU0laRSk7CisJX19ub3NhdmVfZW5kID0gLjsKICAgfSA6ZGF0YS5pbml0MiAvKiB1c2UgYW5vdGhlciBzZWN0aW9uIGRhdGEuaW5pdDIsIHNlZSBQRVJDUFVfVkFERFIoKSBhYm92ZSAqLwotICAuID0gQUxJR04oUEFHRV9TSVpFKTsKLSAgX19ub3NhdmVfZW5kID0gLjsKIAotICBfX2Jzc19zdGFydCA9IC47CQkvKiBCU1MgKi8KICAgLmJzcyA6IEFUKEFERFIoLmJzcykgLSBMT0FEX09GRlNFVCkgeworCS4gPSBBTElHTihQQUdFX1NJWkUpOworCV9fYnNzX3N0YXJ0ID0gLjsJCS8qIEJTUyAqLwogCSooLmJzcy5wYWdlX2FsaWduZWQpCiAJKiguYnNzKQotCX0KLSAgX19ic3Nfc3RvcCA9IC47CisJX19ic3Nfc3RvcCA9IC47CisgIH0KKworICAuYnJrIDogQVQoQUREUiguYnJrKSAtIExPQURfT0ZGU0VUKSB7CisJLiA9IEFMSUdOKFBBR0VfU0laRSk7CisJX19icmtfYmFzZSA9IC4gOworIAkuICs9IDY0ICogMTAyNCA7CS8qIDY0ayBhbGlnbm1lbnQgc2xvcCBzcGFjZSAqLworCSooLmJya19yZXNlcnZhdGlvbikJLyogYXJlYXMgYnJrIHVzZXJzIGhhdmUgcmVzZXJ2ZWQgKi8KKwlfX2Jya19saW1pdCA9IC4gOworICB9CiAKICAgX2VuZCA9IC4gOwogCkBAIC0yNTAsNiArMjYzLDcgQEAKICAgL0RJU0NBUkQvIDogewogCSooLmV4aXRjYWxsLmV4aXQpCiAJKiguZWhfZnJhbWUpCisJKiguZGlzY2FyZCkKIAl9CiAKICAgU1RBQlNfREVCVUcKQEAgLTI3NSwzICsyODksMTAgQEAKIEFTU0VSVCgocGVyX2NwdV9faXJxX3N0YWNrX3VuaW9uID09IDApLAogICAgICAgICAiaXJxX3N0YWNrX3VuaW9uIGlzIG5vdCBhdCBzdGFydCBvZiBwZXItY3B1IGFyZWEiKTsKICNlbmRpZgorCisjaWZkZWYgQ09ORklHX0tFWEVDCisjaW5jbHVkZSA8YXNtL2tleGVjLmg+CisKK0FTU0VSVChrZXhlY19jb250cm9sX2NvZGVfc2l6ZSA8PSBLRVhFQ19DT05UUk9MX0NPREVfTUFYX1NJWkUsCisgICAgICAgImtleGVjIGNvbnRyb2wgY29kZSBzaXplIGlzIHRvbyBiaWciKQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwvdnNtcF82NC5jIGIvYXJjaC94ODYva2VybmVsL3ZzbXBfNjQuYwppbmRleCA3NGRlNTYyLi5hMWQ4MDRiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rZXJuZWwvdnNtcF82NC5jCisrKyBiL2FyY2gveDg2L2tlcm5lbC92c21wXzY0LmMKQEAgLTIyLDcgKzIyLDcgQEAKICNpbmNsdWRlIDxhc20vcGFyYXZpcnQuaD4KICNpbmNsdWRlIDxhc20vc2V0dXAuaD4KIAotI2lmZGVmIENPTkZJR19QQVJBVklSVAorI2lmIGRlZmluZWQgQ09ORklHX1BDSSAmJiBkZWZpbmVkIENPTkZJR19QQVJBVklSVAogLyoKICAqIEludGVycnVwdCBjb250cm9sIG9uIHZTTVBvd2VyZWQgc3lzdGVtczoKICAqIH5BQyBpcyBhIHNoYWRvdyBvZiBJRi4gIElmIElGIGlzICdvbicgQUMgc2hvdWxkIGJlICdvZmYnCkBAIC0xMTQsNiArMTE0LDcgQEAKIH0KICNlbmRpZgogCisjaWZkZWYgQ09ORklHX1BDSQogc3RhdGljIGludCBpc192c21wID0gLTE7CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBkZXRlY3RfdnNtcF9ib3godm9pZCkKQEAgLTEzOSw2ICsxNDAsMTUgQEAKIAl9CiB9CiAKKyNlbHNlCitzdGF0aWMgdm9pZCBfX2luaXQgZGV0ZWN0X3ZzbXBfYm94KHZvaWQpCit7Cit9CitpbnQgaXNfdnNtcF9ib3godm9pZCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZgogdm9pZCBfX2luaXQgdnNtcF9pbml0KHZvaWQpCiB7CiAJZGV0ZWN0X3ZzbXBfYm94KCk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jIGIvYXJjaC94ODYvbGd1ZXN0L2Jvb3QuYwppbmRleCA1YmU5MjkzLi5lOTRhMTFlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9sZ3Vlc3QvYm9vdC5jCisrKyBiL2FyY2gveDg2L2xndWVzdC9ib290LmMKQEAgLTEwODYsMTQgKzEwODYsNiBAQAogCSAqIGxndWVzdF9pbml0KCkgd2hlcmUgdGhlIHJlc3Qgb2YgdGhlIGZhaXJseSBjaGFvdGljIGJvb3Qgc2V0dXAKIAkgKiBvY2N1cnMuICovCiAKLQkvKiBUaGUgbmF0aXZlIGJvb3QgY29kZSBzZXRzIHVwIGluaXRpYWwgcGFnZSB0YWJsZXMgaW1tZWRpYXRlbHkgYWZ0ZXIKLQkgKiB0aGUga2VybmVsIGl0c2VsZiwgYW5kIHNldHMgaW5pdF9wZ190YWJsZXNfZW5kIHNvIHRoZXkncmUgbm90Ci0JICogY2xvYmJlcmVkLiAgVGhlIExhdW5jaGVyIHBsYWNlcyBvdXIgaW5pdGlhbCBwYWdldGFibGVzIHNvbWV3aGVyZSBhdAotCSAqIHRoZSB0b3Agb2Ygb3VyIHBoeXNpY2FsIG1lbW9yeSwgc28gd2UgZG9uJ3QgbmVlZCBleHRyYSBzcGFjZTogc2V0Ci0JICogaW5pdF9wZ190YWJsZXNfZW5kIHRvIHRoZSBlbmQgb2YgdGhlIGtlcm5lbC4gKi8KLQlpbml0X3BnX3RhYmxlc19zdGFydCA9IF9fcGEocGcwKTsKLQlpbml0X3BnX3RhYmxlc19lbmQgPSBfX3BhKHBnMCk7Ci0KIAkvKiBBcyBkZXNjcmliZWQgaW4gaGVhZF8zMi5TLCB3ZSBtYXAgdGhlIGZpcnN0IDEyOE0gb2YgbWVtb3J5LiAqLwogCW1heF9wZm5fbWFwcGVkID0gKDEyOCoxMDI0KjEwMjQpID4+IFBBR0VfU0hJRlQ7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2xpYi9tZW1jcHlfNjQuUyBiL2FyY2gveDg2L2xpYi9tZW1jcHlfNjQuUwppbmRleCBjMjI5ODFmLi5hZDU0NDFlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9saWIvbWVtY3B5XzY0LlMKKysrIGIvYXJjaC94ODYvbGliL21lbWNweV82NC5TCkBAIC0xLDMwICsxLDM4IEBACiAvKiBDb3B5cmlnaHQgMjAwMiBBbmRpIEtsZWVuICovCiAKICNpbmNsdWRlIDxsaW51eC9saW5rYWdlLmg+Ci0jaW5jbHVkZSA8YXNtL2R3YXJmMi5oPgorCiAjaW5jbHVkZSA8YXNtL2NwdWZlYXR1cmUuaD4KKyNpbmNsdWRlIDxhc20vZHdhcmYyLmg+CiAKIC8qCiAgKiBtZW1jcHkgLSBDb3B5IGEgbWVtb3J5IGJsb2NrLgogICoKLSAqIElucHV0OgkKLSAqIHJkaSBkZXN0aW5hdGlvbgotICogcnNpIHNvdXJjZQotICogcmR4IGNvdW50Ci0gKiAKKyAqIElucHV0OgorICogIHJkaSBkZXN0aW5hdGlvbgorICogIHJzaSBzb3VyY2UKKyAqICByZHggY291bnQKKyAqCiAgKiBPdXRwdXQ6CiAgKiByYXggb3JpZ2luYWwgZGVzdGluYXRpb24KLSAqLwkKKyAqLwogCisvKgorICogbWVtY3B5X2MoKSAtIGZhc3Qgc3RyaW5nIG9wcyAoUkVQIE1PVlNRKSBiYXNlZCB2YXJpYW50LgorICoKKyAqIENhbGxzIHRvIHRoaXMgZ2V0IHBhdGNoZWQgaW50byB0aGUga2VybmVsIGltYWdlIHZpYSB0aGUKKyAqIGFsdGVybmF0aXZlIGluc3RydWN0aW9ucyBmcmFtZXdvcms6CisgKi8KIAlBTElHTgogbWVtY3B5X2M6CiAJQ0ZJX1NUQVJUUFJPQwotCW1vdnEgJXJkaSwlcmF4Ci0JbW92bCAlZWR4LCVlY3gKLQlzaHJsICQzLCVlY3gKLQlhbmRsICQ3LCVlZHgKKwltb3ZxICVyZGksICVyYXgKKworCW1vdmwgJWVkeCwgJWVjeAorCXNocmwgJDMsICVlY3gKKwlhbmRsICQ3LCAlZWR4CiAJcmVwIG1vdnNxCi0JbW92bCAlZWR4LCVlY3gKKwltb3ZsICVlZHgsICVlY3gKIAlyZXAgbW92c2IKIAlyZXQKIAlDRklfRU5EUFJPQwpAQCAtMzMsOTkgKzQxLDExMCBAQAogRU5UUlkoX19tZW1jcHkpCiBFTlRSWShtZW1jcHkpCiAJQ0ZJX1NUQVJUUFJPQwotCXB1c2hxICVyYngKLQlDRklfQURKVVNUX0NGQV9PRkZTRVQgOAotCUNGSV9SRUxfT0ZGU0VUIHJieCwgMAotCW1vdnEgJXJkaSwlcmF4CiAKLQltb3ZsICVlZHgsJWVjeAotCXNocmwgJDYsJWVjeAorCS8qCisJICogUHV0IHRoZSBudW1iZXIgb2YgZnVsbCA2NC1ieXRlIGJsb2NrcyBpbnRvICVlY3guCisJICogVGFpbCBwb3J0aW9uIGlzIGhhbmRsZWQgYXQgdGhlIGVuZDoKKwkgKi8KKwltb3ZxICVyZGksICVyYXgKKwltb3ZsICVlZHgsICVlY3gKKwlzaHJsICAgJDYsICVlY3gKIAlqeiAuTGhhbmRsZV90YWlsCiAKIAkucDJhbGlnbiA0CiAuTGxvb3BfNjQ6CisJLyoKKwkgKiBXZSBkZWNyZW1lbnQgdGhlIGxvb3AgaW5kZXggaGVyZSAtIGFuZCB0aGUgemVyby1mbGFnIGlzCisJICogY2hlY2tlZCBhdCB0aGUgZW5kIG9mIHRoZSBsb29wIChpbnN0cnVjdGlvbnMgaW5iZXR3ZWVuIGRvCisJICogbm90IGNoYW5nZSB0aGUgemVybyBmbGFnKToKKwkgKi8KIAlkZWNsICVlY3gKIAotCW1vdnEgKCVyc2kpLCVyMTEKLQltb3ZxIDgoJXJzaSksJXI4CisJLyoKKwkgKiBNb3ZlIGluIGJsb2NrcyBvZiA0eDE2IGJ5dGVzOgorCSAqLworCW1vdnEgMCo4KCVyc2kpLAkJJXIxMQorCW1vdnEgMSo4KCVyc2kpLAkJJXI4CisJbW92cSAlcjExLAkJMCo4KCVyZGkpCisJbW92cSAlcjgsCQkxKjgoJXJkaSkKIAotCW1vdnEgJXIxMSwoJXJkaSkKLQltb3ZxICVyOCwxKjgoJXJkaSkKKwltb3ZxIDIqOCglcnNpKSwJCSVyOQorCW1vdnEgMyo4KCVyc2kpLAkJJXIxMAorCW1vdnEgJXI5LAkJMio4KCVyZGkpCisJbW92cSAlcjEwLAkJMyo4KCVyZGkpCiAKLQltb3ZxIDIqOCglcnNpKSwlcjkKLQltb3ZxIDMqOCglcnNpKSwlcjEwCisJbW92cSA0KjgoJXJzaSksCQklcjExCisJbW92cSA1KjgoJXJzaSksCQklcjgKKwltb3ZxICVyMTEsCQk0KjgoJXJkaSkKKwltb3ZxICVyOCwJCTUqOCglcmRpKQogCi0JbW92cSAlcjksMio4KCVyZGkpCi0JbW92cSAlcjEwLDMqOCglcmRpKQorCW1vdnEgNio4KCVyc2kpLAkJJXI5CisJbW92cSA3KjgoJXJzaSksCQklcjEwCisJbW92cSAlcjksCQk2KjgoJXJkaSkKKwltb3ZxICVyMTAsCQk3KjgoJXJkaSkKIAotCW1vdnEgNCo4KCVyc2kpLCVyMTEKLQltb3ZxIDUqOCglcnNpKSwlcjgKKwlsZWFxIDY0KCVyc2kpLCAlcnNpCisJbGVhcSA2NCglcmRpKSwgJXJkaQogCi0JbW92cSAlcjExLDQqOCglcmRpKQotCW1vdnEgJXI4LDUqOCglcmRpKQotCi0JbW92cSA2KjgoJXJzaSksJXI5Ci0JbW92cSA3KjgoJXJzaSksJXIxMAotCi0JbW92cSAlcjksNio4KCVyZGkpCi0JbW92cSAlcjEwLDcqOCglcmRpKQotCi0JbGVhcSA2NCglcnNpKSwlcnNpCi0JbGVhcSA2NCglcmRpKSwlcmRpCiAJam56ICAuTGxvb3BfNjQKIAogLkxoYW5kbGVfdGFpbDoKLQltb3ZsICVlZHgsJWVjeAotCWFuZGwgJDYzLCVlY3gKLQlzaHJsICQzLCVlY3gKKwltb3ZsICVlZHgsICVlY3gKKwlhbmRsICAkNjMsICVlY3gKKwlzaHJsICAgJDMsICVlY3gKIAlqeiAgIC5MaGFuZGxlXzcKKwogCS5wMmFsaWduIDQKIC5MbG9vcF84OgogCWRlY2wgJWVjeAotCW1vdnEgKCVyc2kpLCVyOAotCW1vdnEgJXI4LCglcmRpKQotCWxlYXEgOCglcmRpKSwlcmRpCi0JbGVhcSA4KCVyc2kpLCVyc2kKKwltb3ZxICglcnNpKSwJCSVyOAorCW1vdnEgJXI4LAkJKCVyZGkpCisJbGVhcSA4KCVyZGkpLAkJJXJkaQorCWxlYXEgOCglcnNpKSwJCSVyc2kKIAlqbnogIC5MbG9vcF84CiAKIC5MaGFuZGxlXzc6Ci0JbW92bCAlZWR4LCVlY3gKLQlhbmRsICQ3LCVlY3gKLQlqeiAuTGVuZGUKKwltb3ZsICVlZHgsICVlY3gKKwlhbmRsICQ3LCAlZWN4CisJanogLkxlbmQKKwogCS5wMmFsaWduIDQKIC5MbG9vcF8xOgotCW1vdmIgKCVyc2kpLCVyOGIKLQltb3ZiICVyOGIsKCVyZGkpCisJbW92YiAoJXJzaSksICVyOGIKKwltb3ZiICVyOGIsICglcmRpKQogCWluY3EgJXJkaQogCWluY3EgJXJzaQogCWRlY2wgJWVjeAogCWpueiAuTGxvb3BfMQogCi0uTGVuZGU6Ci0JcG9wcSAlcmJ4Ci0JQ0ZJX0FESlVTVF9DRkFfT0ZGU0VUIC04Ci0JQ0ZJX1JFU1RPUkUgcmJ4CisuTGVuZDoKIAlyZXQKLS5MZmluYWw6CiAJQ0ZJX0VORFBST0MKIEVORFBST0MobWVtY3B5KQogRU5EUFJPQyhfX21lbWNweSkKIAotCS8qIFNvbWUgQ1BVcyBydW4gZmFzdGVyIHVzaW5nIHRoZSBzdHJpbmcgY29weSBpbnN0cnVjdGlvbnMuCi0JICAgSXQgaXMgYWxzbyBhIGxvdCBzaW1wbGVyLiBVc2UgdGhpcyB3aGVuIHBvc3NpYmxlICovCisJLyoKKwkgKiBTb21lIENQVXMgcnVuIGZhc3RlciB1c2luZyB0aGUgc3RyaW5nIGNvcHkgaW5zdHJ1Y3Rpb25zLgorCSAqIEl0IGlzIGFsc28gYSBsb3Qgc2ltcGxlci4gVXNlIHRoaXMgd2hlbiBwb3NzaWJsZToKKwkgKi8KIAotCS5zZWN0aW9uIC5hbHRpbnN0cl9yZXBsYWNlbWVudCwiYXgiCisJLnNlY3Rpb24gLmFsdGluc3RyX3JlcGxhY2VtZW50LCAiYXgiCiAxOgkuYnl0ZSAweGViCQkJCS8qIGptcCA8ZGlzcDg+ICovCiAJLmJ5dGUgKG1lbWNweV9jIC0gbWVtY3B5KSAtICgyZiAtIDFiKQkvKiBvZmZzZXQgKi8KIDI6CiAJLnByZXZpb3VzCi0JLnNlY3Rpb24gLmFsdGluc3RydWN0aW9ucywiYSIKKworCS5zZWN0aW9uIC5hbHRpbnN0cnVjdGlvbnMsICJhIgogCS5hbGlnbiA4CiAJLnF1YWQgbWVtY3B5CiAJLnF1YWQgMWIKIAkuYnl0ZSBYODZfRkVBVFVSRV9SRVBfR09PRAotCS8qIFJlcGxhY2Ugb25seSBiZWdpbm5pbmcsIG1lbWNweSBpcyB1c2VkIHRvIGFwcGx5IGFsdGVybmF0aXZlcywgc28gaXQKLQkgKiBpcyBzaWxseSB0byBvdmVyd3JpdGUgaXRzZWxmIHdpdGggbm9wcyAtIHJlYm9vdCBpcyBvbmx5IG91dGNvbWUuLi4gKi8KKworCS8qCisJICogUmVwbGFjZSBvbmx5IGJlZ2lubmluZywgbWVtY3B5IGlzIHVzZWQgdG8gYXBwbHkgYWx0ZXJuYXRpdmVzLAorCSAqIHNvIGl0IGlzIHNpbGx5IHRvIG92ZXJ3cml0ZSBpdHNlbGYgd2l0aCBub3BzIC0gcmVib290IGlzIHRoZQorCSAqIG9ubHkgb3V0Y29tZS4uLgorCSAqLwogCS5ieXRlIDJiIC0gMWIKIAkuYnl0ZSAyYiAtIDFiCiAJLnByZXZpb3VzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9oaWdobWVtXzMyLmMgYi9hcmNoL3g4Ni9tbS9oaWdobWVtXzMyLmMKaW5kZXggMDBmMTI3Yy4uNTIyZGI1ZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaGlnaG1lbV8zMi5jCisrKyBiL2FyY2gveDg2L21tL2hpZ2htZW1fMzIuYwpAQCAtMTIxLDIyICsxMjEsMTMgQEAKIAlwYWdlZmF1bHRfZW5hYmxlKCk7CiB9CiAKLS8qIFRoaXMgaXMgdGhlIHNhbWUgYXMga21hcF9hdG9taWMoKSBidXQgY2FuIG1hcCBtZW1vcnkgdGhhdCBkb2Vzbid0CisvKgorICogVGhpcyBpcyB0aGUgc2FtZSBhcyBrbWFwX2F0b21pYygpIGJ1dCBjYW4gbWFwIG1lbW9yeSB0aGF0IGRvZXNuJ3QKICAqIGhhdmUgYSBzdHJ1Y3QgcGFnZSBhc3NvY2lhdGVkIHdpdGggaXQuCiAgKi8KIHZvaWQgKmttYXBfYXRvbWljX3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBrbV90eXBlIHR5cGUpCiB7Ci0JZW51bSBmaXhlZF9hZGRyZXNzZXMgaWR4OwotCXVuc2lnbmVkIGxvbmcgdmFkZHI7Ci0KLQlwYWdlZmF1bHRfZGlzYWJsZSgpOwotCi0JaWR4ID0gdHlwZSArIEtNX1RZUEVfTlIqc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXZhZGRyID0gX19maXhfdG9fdmlydChGSVhfS01BUF9CRUdJTiArIGlkeCk7Ci0Jc2V0X3B0ZShrbWFwX3B0ZS1pZHgsIHBmbl9wdGUocGZuLCBrbWFwX3Byb3QpKTsKLQlhcmNoX2ZsdXNoX2xhenlfbW11X21vZGUoKTsKLQotCXJldHVybiAodm9pZCopIHZhZGRyOworCXJldHVybiBrbWFwX2F0b21pY19wcm90X3BmbihwZm4sIHR5cGUsIGttYXBfcHJvdCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChrbWFwX2F0b21pY19wZm4pOyAvKiB0ZW1wb3JhcmlseSBpbiB1c2UgYnkgaTkxNSBHRU0gdW50aWwgdm1hcCAqLwogCkBAIC0xNTgsNyArMTQ5LDYgQEAKIEVYUE9SVF9TWU1CT0woa21hcF9hdG9taWMpOwogRVhQT1JUX1NZTUJPTChrdW5tYXBfYXRvbWljKTsKIAotI2lmZGVmIENPTkZJR19OVU1BCiB2b2lkIF9faW5pdCBzZXRfaGlnaG1lbV9wYWdlc19pbml0KHZvaWQpCiB7CiAJc3RydWN0IHpvbmUgKnpvbmU7CkBAIC0xODIsMTEgKzE3MiwzIEBACiAJfQogCXRvdGFscmFtX3BhZ2VzICs9IHRvdGFsaGlnaF9wYWdlczsKIH0KLSNlbHNlCi12b2lkIF9faW5pdCBzZXRfaGlnaG1lbV9wYWdlc19pbml0KHZvaWQpCi17Ci0JYWRkX2hpZ2hwYWdlc193aXRoX2FjdGl2ZV9yZWdpb25zKDAsIGhpZ2hzdGFydF9wZm4sIGhpZ2hlbmRfcGZuKTsKLQotCXRvdGFscmFtX3BhZ2VzICs9IHRvdGFsaGlnaF9wYWdlczsKLX0KLSNlbmRpZiAvKiBDT05GSUdfTlVNQSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vaW5pdC5jIGIvYXJjaC94ODYvbW0vaW5pdC5jCmluZGV4IGNlNmE3MjIuLmZkM2RhMWQgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2luaXQuYworKysgYi9hcmNoL3g4Ni9tbS9pbml0LmMKQEAgLTEsOCArMSwzNDUgQEAKKyNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9zd2FwLmg+CisKICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9lODIwLmg+CisjaW5jbHVkZSA8YXNtL2luaXQuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGFzbS9wYWdlX3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CiAjaW5jbHVkZSA8YXNtL3N5c3RlbS5oPgorI2luY2x1ZGUgPGFzbS90bGJmbHVzaC5oPgorCit1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgZTgyMF90YWJsZV9zdGFydDsKK3Vuc2lnbmVkIGxvbmcgX19tZW1pbml0ZGF0YSBlODIwX3RhYmxlX2VuZDsKK3Vuc2lnbmVkIGxvbmcgX19tZW1pbml0ZGF0YSBlODIwX3RhYmxlX3RvcDsKKworaW50IGFmdGVyX2Jvb3RtZW07CisKK2ludCBkaXJlY3RfZ2JwYWdlcworI2lmZGVmIENPTkZJR19ESVJFQ1RfR0JQQUdFUworCQkJCT0gMQorI2VuZGlmCis7CisKK3N0YXRpYyB2b2lkIF9faW5pdCBmaW5kX2Vhcmx5X3RhYmxlX3NwYWNlKHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgdXNlX3BzZSwKKwkJCQkJICBpbnQgdXNlX2dicGFnZXMpCit7CisJdW5zaWduZWQgbG9uZyBwdWRzLCBwbWRzLCBwdGVzLCB0YWJsZXMsIHN0YXJ0OworCisJcHVkcyA9IChlbmQgKyBQVURfU0laRSAtIDEpID4+IFBVRF9TSElGVDsKKwl0YWJsZXMgPSByb3VuZHVwKHB1ZHMgKiBzaXplb2YocHVkX3QpLCBQQUdFX1NJWkUpOworCisJaWYgKHVzZV9nYnBhZ2VzKSB7CisJCXVuc2lnbmVkIGxvbmcgZXh0cmE7CisKKwkJZXh0cmEgPSBlbmQgLSAoKGVuZD4+UFVEX1NISUZUKSA8PCBQVURfU0hJRlQpOworCQlwbWRzID0gKGV4dHJhICsgUE1EX1NJWkUgLSAxKSA+PiBQTURfU0hJRlQ7CisJfSBlbHNlCisJCXBtZHMgPSAoZW5kICsgUE1EX1NJWkUgLSAxKSA+PiBQTURfU0hJRlQ7CisKKwl0YWJsZXMgKz0gcm91bmR1cChwbWRzICogc2l6ZW9mKHBtZF90KSwgUEFHRV9TSVpFKTsKKworCWlmICh1c2VfcHNlKSB7CisJCXVuc2lnbmVkIGxvbmcgZXh0cmE7CisKKwkJZXh0cmEgPSBlbmQgLSAoKGVuZD4+UE1EX1NISUZUKSA8PCBQTURfU0hJRlQpOworI2lmZGVmIENPTkZJR19YODZfMzIKKwkJZXh0cmEgKz0gUE1EX1NJWkU7CisjZW5kaWYKKwkJcHRlcyA9IChleHRyYSArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7CisJfSBlbHNlCisJCXB0ZXMgPSAoZW5kICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKKworCXRhYmxlcyArPSByb3VuZHVwKHB0ZXMgKiBzaXplb2YocHRlX3QpLCBQQUdFX1NJWkUpOworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCS8qIGZvciBmaXhtYXAgKi8KKwl0YWJsZXMgKz0gcm91bmR1cChfX2VuZF9vZl9maXhlZF9hZGRyZXNzZXMgKiBzaXplb2YocHRlX3QpLCBQQUdFX1NJWkUpOworI2VuZGlmCisKKwkvKgorCSAqIFJFRC1QRU4gcHV0dGluZyBwYWdlIHRhYmxlcyBvbmx5IG9uIG5vZGUgMCBjb3VsZAorCSAqIGNhdXNlIGEgaG90c3BvdCBhbmQgZmlsbCB1cCBaT05FX0RNQS4gVGhlIHBhZ2UgdGFibGVzCisJICogbmVlZCByb3VnaGx5IDAuNUtCIHBlciBHQi4KKwkgKi8KKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJc3RhcnQgPSAweDcwMDA7CisJZTgyMF90YWJsZV9zdGFydCA9IGZpbmRfZTgyMF9hcmVhKHN0YXJ0LCBtYXhfcGZuX21hcHBlZDw8UEFHRV9TSElGVCwKKwkJCQkJdGFibGVzLCBQQUdFX1NJWkUpOworI2Vsc2UgLyogQ09ORklHX1g4Nl82NCAqLworCXN0YXJ0ID0gMHg4MDAwOworCWU4MjBfdGFibGVfc3RhcnQgPSBmaW5kX2U4MjBfYXJlYShzdGFydCwgZW5kLCB0YWJsZXMsIFBBR0VfU0laRSk7CisjZW5kaWYKKwlpZiAoZTgyMF90YWJsZV9zdGFydCA9PSAtMVVMKQorCQlwYW5pYygiQ2Fubm90IGZpbmQgc3BhY2UgZm9yIHRoZSBrZXJuZWwgcGFnZSB0YWJsZXMiKTsKKworCWU4MjBfdGFibGVfc3RhcnQgPj49IFBBR0VfU0hJRlQ7CisJZTgyMF90YWJsZV9lbmQgPSBlODIwX3RhYmxlX3N0YXJ0OworCWU4MjBfdGFibGVfdG9wID0gZTgyMF90YWJsZV9zdGFydCArICh0YWJsZXMgPj4gUEFHRV9TSElGVCk7CisKKwlwcmludGsoS0VSTl9ERUJVRyAia2VybmVsIGRpcmVjdCBtYXBwaW5nIHRhYmxlcyB1cCB0byAlbHggQCAlbHgtJWx4XG4iLAorCQllbmQsIGU4MjBfdGFibGVfc3RhcnQgPDwgUEFHRV9TSElGVCwgZTgyMF90YWJsZV90b3AgPDwgUEFHRV9TSElGVCk7Cit9CisKK3N0cnVjdCBtYXBfcmFuZ2UgeworCXVuc2lnbmVkIGxvbmcgc3RhcnQ7CisJdW5zaWduZWQgbG9uZyBlbmQ7CisJdW5zaWduZWQgcGFnZV9zaXplX21hc2s7Cit9OworCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorI2RlZmluZSBOUl9SQU5HRV9NUiAzCisjZWxzZSAvKiBDT05GSUdfWDg2XzY0ICovCisjZGVmaW5lIE5SX1JBTkdFX01SIDUKKyNlbmRpZgorCitzdGF0aWMgaW50IF9fbWVtaW5pdCBzYXZlX21yKHN0cnVjdCBtYXBfcmFuZ2UgKm1yLCBpbnQgbnJfcmFuZ2UsCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sCisJCQkgICAgIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplX21hc2spCit7CisJaWYgKHN0YXJ0X3BmbiA8IGVuZF9wZm4pIHsKKwkJaWYgKG5yX3JhbmdlID49IE5SX1JBTkdFX01SKQorCQkJcGFuaWMoInJ1biBvdXQgb2YgcmFuZ2UgZm9yIGluaXRfbWVtb3J5X21hcHBpbmdcbiIpOworCQltcltucl9yYW5nZV0uc3RhcnQgPSBzdGFydF9wZm48PFBBR0VfU0hJRlQ7CisJCW1yW25yX3JhbmdlXS5lbmQgICA9IGVuZF9wZm48PFBBR0VfU0hJRlQ7CisJCW1yW25yX3JhbmdlXS5wYWdlX3NpemVfbWFzayA9IHBhZ2Vfc2l6ZV9tYXNrOworCQlucl9yYW5nZSsrOworCX0KKworCXJldHVybiBucl9yYW5nZTsKK30KKworI2lmZGVmIENPTkZJR19YODZfNjQKK3N0YXRpYyB2b2lkIF9faW5pdCBpbml0X2dicGFnZXModm9pZCkKK3sKKwlpZiAoZGlyZWN0X2dicGFnZXMgJiYgY3B1X2hhc19nYnBhZ2VzKQorCQlwcmludGsoS0VSTl9JTkZPICJVc2luZyBHQiBwYWdlcyBmb3IgZGlyZWN0IG1hcHBpbmdcbiIpOworCWVsc2UKKwkJZGlyZWN0X2dicGFnZXMgPSAwOworfQorI2Vsc2UKK3N0YXRpYyBpbmxpbmUgdm9pZCBpbml0X2dicGFnZXModm9pZCkKK3sKK30KKyNlbmRpZgorCisvKgorICogU2V0dXAgdGhlIGRpcmVjdCBtYXBwaW5nIG9mIHRoZSBwaHlzaWNhbCBtZW1vcnkgYXQgUEFHRV9PRkZTRVQuCisgKiBUaGlzIHJ1bnMgYmVmb3JlIGJvb3RtZW0gaXMgaW5pdGlhbGl6ZWQgYW5kIGdldHMgcGFnZXMgZGlyZWN0bHkgZnJvbQorICogdGhlIHBoeXNpY2FsIG1lbW9yeS4gVG8gYWNjZXNzIHRoZW0gdGhleSBhcmUgdGVtcG9yYXJpbHkgbWFwcGVkLgorICovCit1bnNpZ25lZCBsb25nIF9faW5pdF9yZWZvayBpbml0X21lbW9yeV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsCisJCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGVuZCkKK3sKKwl1bnNpZ25lZCBsb25nIHBhZ2Vfc2l6ZV9tYXNrID0gMDsKKwl1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgZW5kX3BmbjsKKwl1bnNpZ25lZCBsb25nIHJldCA9IDA7CisJdW5zaWduZWQgbG9uZyBwb3M7CisKKwlzdHJ1Y3QgbWFwX3JhbmdlIG1yW05SX1JBTkdFX01SXTsKKwlpbnQgbnJfcmFuZ2UsIGk7CisJaW50IHVzZV9wc2UsIHVzZV9nYnBhZ2VzOworCisJcHJpbnRrKEtFUk5fSU5GTyAiaW5pdF9tZW1vcnlfbWFwcGluZzogJTAxNmx4LSUwMTZseFxuIiwgc3RhcnQsIGVuZCk7CisKKwlpZiAoIWFmdGVyX2Jvb3RtZW0pCisJCWluaXRfZ2JwYWdlcygpOworCisjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQworCS8qCisJICogRm9yIENPTkZJR19ERUJVR19QQUdFQUxMT0MsIGlkZW50aXR5IG1hcHBpbmcgd2lsbCB1c2Ugc21hbGwgcGFnZXMuCisJICogVGhpcyB3aWxsIHNpbXBsaWZ5IGNwYSgpLCB3aGljaCBvdGhlcndpc2UgbmVlZHMgdG8gc3VwcG9ydCBzcGxpdHRpbmcKKwkgKiBsYXJnZSBwYWdlcyBpbnRvIHNtYWxsIGluIGludGVycnVwdCBjb250ZXh0LCBldGMuCisJICovCisJdXNlX3BzZSA9IHVzZV9nYnBhZ2VzID0gMDsKKyNlbHNlCisJdXNlX3BzZSA9IGNwdV9oYXNfcHNlOworCXVzZV9nYnBhZ2VzID0gZGlyZWN0X2dicGFnZXM7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfMzIKKyNpZmRlZiBDT05GSUdfWDg2X1BBRQorCXNldF9ueCgpOworCWlmIChueF9lbmFibGVkKQorCQlwcmludGsoS0VSTl9JTkZPICJOWCAoRXhlY3V0ZSBEaXNhYmxlKSBwcm90ZWN0aW9uOiBhY3RpdmVcbiIpOworI2VuZGlmCisKKwkvKiBFbmFibGUgUFNFIGlmIGF2YWlsYWJsZSAqLworCWlmIChjcHVfaGFzX3BzZSkKKwkJc2V0X2luX2NyNChYODZfQ1I0X1BTRSk7CisKKwkvKiBFbmFibGUgUEdFIGlmIGF2YWlsYWJsZSAqLworCWlmIChjcHVfaGFzX3BnZSkgeworCQlzZXRfaW5fY3I0KFg4Nl9DUjRfUEdFKTsKKwkJX19zdXBwb3J0ZWRfcHRlX21hc2sgfD0gX1BBR0VfR0xPQkFMOworCX0KKyNlbmRpZgorCisJaWYgKHVzZV9nYnBhZ2VzKQorCQlwYWdlX3NpemVfbWFzayB8PSAxIDw8IFBHX0xFVkVMXzFHOworCWlmICh1c2VfcHNlKQorCQlwYWdlX3NpemVfbWFzayB8PSAxIDw8IFBHX0xFVkVMXzJNOworCisJbWVtc2V0KG1yLCAwLCBzaXplb2YobXIpKTsKKwlucl9yYW5nZSA9IDA7CisKKwkvKiBoZWFkIGlmIG5vdCBiaWcgcGFnZSBhbGlnbm1lbnQgPyAqLworCXN0YXJ0X3BmbiA9IHN0YXJ0ID4+IFBBR0VfU0hJRlQ7CisJcG9zID0gc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQ7CisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCS8qCisJICogRG9uJ3QgdXNlIGEgbGFyZ2UgcGFnZSBmb3IgdGhlIGZpcnN0IDIvNE1CIG9mIG1lbW9yeQorCSAqIGJlY2F1c2UgdGhlcmUgYXJlIG9mdGVuIGZpeGVkIHNpemUgTVRSUnMgaW4gdGhlcmUKKwkgKiBhbmQgb3ZlcmxhcHBpbmcgTVRSUnMgaW50byBsYXJnZSBwYWdlcyBjYW4gY2F1c2UKKwkgKiBzbG93ZG93bnMuCisJICovCisJaWYgKHBvcyA9PSAwKQorCQllbmRfcGZuID0gMTw8KFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOworCWVsc2UKKwkJZW5kX3BmbiA9ICgocG9zICsgKFBNRF9TSVpFIC0gMSkpPj5QTURfU0hJRlQpCisJCQkJIDw8IChQTURfU0hJRlQgLSBQQUdFX1NISUZUKTsKKyNlbHNlIC8qIENPTkZJR19YODZfNjQgKi8KKwllbmRfcGZuID0gKChwb3MgKyAoUE1EX1NJWkUgLSAxKSkgPj4gUE1EX1NISUZUKQorCQkJPDwgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOworI2VuZGlmCisJaWYgKGVuZF9wZm4gPiAoZW5kID4+IFBBR0VfU0hJRlQpKQorCQllbmRfcGZuID0gZW5kID4+IFBBR0VfU0hJRlQ7CisJaWYgKHN0YXJ0X3BmbiA8IGVuZF9wZm4pIHsKKwkJbnJfcmFuZ2UgPSBzYXZlX21yKG1yLCBucl9yYW5nZSwgc3RhcnRfcGZuLCBlbmRfcGZuLCAwKTsKKwkJcG9zID0gZW5kX3BmbiA8PCBQQUdFX1NISUZUOworCX0KKworCS8qIGJpZyBwYWdlICgyTSkgcmFuZ2UgKi8KKwlzdGFydF9wZm4gPSAoKHBvcyArIChQTURfU0laRSAtIDEpKT4+UE1EX1NISUZUKQorCQkJIDw8IChQTURfU0hJRlQgLSBQQUdFX1NISUZUKTsKKyNpZmRlZiBDT05GSUdfWDg2XzMyCisJZW5kX3BmbiA9IChlbmQ+PlBNRF9TSElGVCkgPDwgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOworI2Vsc2UgLyogQ09ORklHX1g4Nl82NCAqLworCWVuZF9wZm4gPSAoKHBvcyArIChQVURfU0laRSAtIDEpKT4+UFVEX1NISUZUKQorCQkJIDw8IChQVURfU0hJRlQgLSBQQUdFX1NISUZUKTsKKwlpZiAoZW5kX3BmbiA+ICgoZW5kPj5QTURfU0hJRlQpPDwoUE1EX1NISUZUIC0gUEFHRV9TSElGVCkpKQorCQllbmRfcGZuID0gKChlbmQ+PlBNRF9TSElGVCk8PChQTURfU0hJRlQgLSBQQUdFX1NISUZUKSk7CisjZW5kaWYKKworCWlmIChzdGFydF9wZm4gPCBlbmRfcGZuKSB7CisJCW5yX3JhbmdlID0gc2F2ZV9tcihtciwgbnJfcmFuZ2UsIHN0YXJ0X3BmbiwgZW5kX3BmbiwKKwkJCQlwYWdlX3NpemVfbWFzayAmICgxPDxQR19MRVZFTF8yTSkpOworCQlwb3MgPSBlbmRfcGZuIDw8IFBBR0VfU0hJRlQ7CisJfQorCisjaWZkZWYgQ09ORklHX1g4Nl82NAorCS8qIGJpZyBwYWdlICgxRykgcmFuZ2UgKi8KKwlzdGFydF9wZm4gPSAoKHBvcyArIChQVURfU0laRSAtIDEpKT4+UFVEX1NISUZUKQorCQkJIDw8IChQVURfU0hJRlQgLSBQQUdFX1NISUZUKTsKKwllbmRfcGZuID0gKGVuZCA+PiBQVURfU0hJRlQpIDw8IChQVURfU0hJRlQgLSBQQUdFX1NISUZUKTsKKwlpZiAoc3RhcnRfcGZuIDwgZW5kX3BmbikgeworCQlucl9yYW5nZSA9IHNhdmVfbXIobXIsIG5yX3JhbmdlLCBzdGFydF9wZm4sIGVuZF9wZm4sCisJCQkJcGFnZV9zaXplX21hc2sgJgorCQkJCSAoKDE8PFBHX0xFVkVMXzJNKXwoMTw8UEdfTEVWRUxfMUcpKSk7CisJCXBvcyA9IGVuZF9wZm4gPDwgUEFHRV9TSElGVDsKKwl9CisKKwkvKiB0YWlsIGlzIG5vdCBiaWcgcGFnZSAoMUcpIGFsaWdubWVudCAqLworCXN0YXJ0X3BmbiA9ICgocG9zICsgKFBNRF9TSVpFIC0gMSkpPj5QTURfU0hJRlQpCisJCQkgPDwgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOworCWVuZF9wZm4gPSAoZW5kID4+IFBNRF9TSElGVCkgPDwgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOworCWlmIChzdGFydF9wZm4gPCBlbmRfcGZuKSB7CisJCW5yX3JhbmdlID0gc2F2ZV9tcihtciwgbnJfcmFuZ2UsIHN0YXJ0X3BmbiwgZW5kX3BmbiwKKwkJCQlwYWdlX3NpemVfbWFzayAmICgxPDxQR19MRVZFTF8yTSkpOworCQlwb3MgPSBlbmRfcGZuIDw8IFBBR0VfU0hJRlQ7CisJfQorI2VuZGlmCisKKwkvKiB0YWlsIGlzIG5vdCBiaWcgcGFnZSAoMk0pIGFsaWdubWVudCAqLworCXN0YXJ0X3BmbiA9IHBvcz4+UEFHRV9TSElGVDsKKwllbmRfcGZuID0gZW5kPj5QQUdFX1NISUZUOworCW5yX3JhbmdlID0gc2F2ZV9tcihtciwgbnJfcmFuZ2UsIHN0YXJ0X3BmbiwgZW5kX3BmbiwgMCk7CisKKwkvKiB0cnkgdG8gbWVyZ2Ugc2FtZSBwYWdlIHNpemUgYW5kIGNvbnRpbnVvdXMgKi8KKwlmb3IgKGkgPSAwOyBucl9yYW5nZSA+IDEgJiYgaSA8IG5yX3JhbmdlIC0gMTsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgb2xkX3N0YXJ0OworCQlpZiAobXJbaV0uZW5kICE9IG1yW2krMV0uc3RhcnQgfHwKKwkJICAgIG1yW2ldLnBhZ2Vfc2l6ZV9tYXNrICE9IG1yW2krMV0ucGFnZV9zaXplX21hc2spCisJCQljb250aW51ZTsKKwkJLyogbW92ZSBpdCAqLworCQlvbGRfc3RhcnQgPSBtcltpXS5zdGFydDsKKwkJbWVtbW92ZSgmbXJbaV0sICZtcltpKzFdLAorCQkJKG5yX3JhbmdlIC0gMSAtIGkpICogc2l6ZW9mKHN0cnVjdCBtYXBfcmFuZ2UpKTsKKwkJbXJbaS0tXS5zdGFydCA9IG9sZF9zdGFydDsKKwkJbnJfcmFuZ2UtLTsKKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKKwkJcHJpbnRrKEtFUk5fREVCVUcgIiAlMDEwbHggLSAlMDEwbHggcGFnZSAlc1xuIiwKKwkJCQltcltpXS5zdGFydCwgbXJbaV0uZW5kLAorCQkJKG1yW2ldLnBhZ2Vfc2l6ZV9tYXNrICYgKDE8PFBHX0xFVkVMXzFHKSk/IjFHIjooCisJCQkgKG1yW2ldLnBhZ2Vfc2l6ZV9tYXNrICYgKDE8PFBHX0xFVkVMXzJNKSk/IjJNIjoiNGsiKSk7CisKKwkvKgorCSAqIEZpbmQgc3BhY2UgZm9yIHRoZSBrZXJuZWwgZGlyZWN0IG1hcHBpbmcgdGFibGVzLgorCSAqCisJICogTGF0ZXIgd2Ugc2hvdWxkIGFsbG9jYXRlIHRoZXNlIHRhYmxlcyBpbiB0aGUgbG9jYWwgbm9kZSBvZiB0aGUKKwkgKiBtZW1vcnkgbWFwcGVkLiBVbmZvcnR1bmF0ZWx5IHRoaXMgaXMgZG9uZSBjdXJyZW50bHkgYmVmb3JlIHRoZQorCSAqIG5vZGVzIGFyZSBkaXNjb3ZlcmVkLgorCSAqLworCWlmICghYWZ0ZXJfYm9vdG1lbSkKKwkJZmluZF9lYXJseV90YWJsZV9zcGFjZShlbmQsIHVzZV9wc2UsIHVzZV9nYnBhZ2VzKTsKKworI2lmZGVmIENPTkZJR19YODZfMzIKKwlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKKwkJa2VybmVsX3BoeXNpY2FsX21hcHBpbmdfaW5pdChtcltpXS5zdGFydCwgbXJbaV0uZW5kLAorCQkJCQkgICAgIG1yW2ldLnBhZ2Vfc2l6ZV9tYXNrKTsKKwlyZXQgPSBlbmQ7CisjZWxzZSAvKiBDT05GSUdfWDg2XzY0ICovCisJZm9yIChpID0gMDsgaSA8IG5yX3JhbmdlOyBpKyspCisJCXJldCA9IGtlcm5lbF9waHlzaWNhbF9tYXBwaW5nX2luaXQobXJbaV0uc3RhcnQsIG1yW2ldLmVuZCwKKwkJCQkJCSAgIG1yW2ldLnBhZ2Vfc2l6ZV9tYXNrKTsKKyNlbmRpZgorCisjaWZkZWYgQ09ORklHX1g4Nl8zMgorCWVhcmx5X2lvcmVtYXBfcGFnZV90YWJsZV9yYW5nZV9pbml0KCk7CisKKwlsb2FkX2NyMyhzd2FwcGVyX3BnX2Rpcik7CisjZW5kaWYKKworI2lmZGVmIENPTkZJR19YODZfNjQKKwlpZiAoIWFmdGVyX2Jvb3RtZW0pCisJCW1tdV9jcjRfZmVhdHVyZXMgPSByZWFkX2NyNCgpOworI2VuZGlmCisJX19mbHVzaF90bGJfYWxsKCk7CisKKwlpZiAoIWFmdGVyX2Jvb3RtZW0gJiYgZTgyMF90YWJsZV9lbmQgPiBlODIwX3RhYmxlX3N0YXJ0KQorCQlyZXNlcnZlX2Vhcmx5KGU4MjBfdGFibGVfc3RhcnQgPDwgUEFHRV9TSElGVCwKKwkJCQkgZTgyMF90YWJsZV9lbmQgPDwgUEFHRV9TSElGVCwgIlBHVEFCTEUiKTsKKworCWlmICghYWZ0ZXJfYm9vdG1lbSkKKwkJZWFybHlfbWVtdGVzdChzdGFydCwgZW5kKTsKKworCXJldHVybiByZXQgPj4gUEFHRV9TSElGVDsKK30KKworCisvKgorICogZGV2bWVtX2lzX2FsbG93ZWQoKSBjaGVja3MgdG8gc2VlIGlmIC9kZXYvbWVtIGFjY2VzcyB0byBhIGNlcnRhaW4gYWRkcmVzcworICogaXMgdmFsaWQuIFRoZSBhcmd1bWVudCBpcyBhIHBoeXNpY2FsIHBhZ2UgbnVtYmVyLgorICoKKyAqCisgKiBPbiB4ODYsIGFjY2VzcyBoYXMgdG8gYmUgZ2l2ZW4gdG8gdGhlIGZpcnN0IG1lZ2FieXRlIG9mIHJhbSBiZWNhdXNlIHRoYXQgYXJlYQorICogY29udGFpbnMgYmlvcyBjb2RlIGFuZCBkYXRhIHJlZ2lvbnMgdXNlZCBieSBYIGFuZCBkb3NlbXUgYW5kIHNpbWlsYXIgYXBwcy4KKyAqIEFjY2VzcyBoYXMgdG8gYmUgZ2l2ZW4gdG8gbm9uLWtlcm5lbC1yYW0gYXJlYXMgYXMgd2VsbCwgdGhlc2UgY29udGFpbiB0aGUgUENJCisgKiBtbWlvIHJlc291cmNlcyBhcyB3ZWxsIGFzIHBvdGVudGlhbCBiaW9zL2FjcGkgZGF0YSByZWdpb25zLgorICovCitpbnQgZGV2bWVtX2lzX2FsbG93ZWQodW5zaWduZWQgbG9uZyBwYWdlbnIpCit7CisJaWYgKHBhZ2VuciA8PSAyNTYpCisJCXJldHVybiAxOworCWlmIChpb21lbV9pc19leGNsdXNpdmUocGFnZW5yIDw8IFBBR0VfU0hJRlQpKQorCQlyZXR1cm4gMDsKKwlpZiAoIXBhZ2VfaXNfcmFtKHBhZ2VucikpCisJCXJldHVybiAxOworCXJldHVybiAwOworfQogCiB2b2lkIGZyZWVfaW5pdF9wYWdlcyhjaGFyICp3aGF0LCB1bnNpZ25lZCBsb25nIGJlZ2luLCB1bnNpZ25lZCBsb25nIGVuZCkKIHsKQEAgLTQ3LDMgKzM4NCwxMCBAQAogCQkJKHVuc2lnbmVkIGxvbmcpKCZfX2luaXRfYmVnaW4pLAogCQkJKHVuc2lnbmVkIGxvbmcpKCZfX2luaXRfZW5kKSk7CiB9CisKKyNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKK3ZvaWQgZnJlZV9pbml0cmRfbWVtKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQoreworCWZyZWVfaW5pdF9wYWdlcygiaW5pdHJkIG1lbW9yeSIsIHN0YXJ0LCBlbmQpOworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0XzMyLmMgYi9hcmNoL3g4Ni9tbS9pbml0XzMyLmMKaW5kZXggNDdkZjBlMS4uZGI4MWU5YSAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vaW5pdF8zMi5jCisrKyBiL2FyY2gveDg2L21tL2luaXRfMzIuYwpAQCAtNDksNiArNDksNyBAQAogI2luY2x1ZGUgPGFzbS9wYXJhdmlydC5oPgogI2luY2x1ZGUgPGFzbS9zZXR1cC5oPgogI2luY2x1ZGUgPGFzbS9jYWNoZWZsdXNoLmg+CisjaW5jbHVkZSA8YXNtL2luaXQuaD4KIAogdW5zaWduZWQgbG9uZyBtYXhfbG93X3Bmbl9tYXBwZWQ7CiB1bnNpZ25lZCBsb25nIG1heF9wZm5fbWFwcGVkOwpAQCAtNTgsMTkgKzU5LDE0IEBACiAKIHN0YXRpYyBub2lubGluZSBpbnQgZG9fdGVzdF93cF9iaXQodm9pZCk7CiAKLQotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0ZGF0YSB0YWJsZV9zdGFydDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbWVtaW5pdGRhdGEgdGFibGVfZW5kOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgX19tZW1pbml0ZGF0YSB0YWJsZV90b3A7Ci0KLXN0YXRpYyBpbnQgX19pbml0ZGF0YSBhZnRlcl9pbml0X2Jvb3RtZW07Citib29sIF9fcmVhZF9tb3N0bHkgX192bWFsbG9jX3N0YXJ0X3NldCA9IGZhbHNlOwogCiBzdGF0aWMgX19pbml0IHZvaWQgKmFsbG9jX2xvd19wYWdlKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBwZm4gPSB0YWJsZV9lbmQrKzsKKwl1bnNpZ25lZCBsb25nIHBmbiA9IGU4MjBfdGFibGVfZW5kKys7CiAJdm9pZCAqYWRyOwogCi0JaWYgKHBmbiA+PSB0YWJsZV90b3ApCisJaWYgKHBmbiA+PSBlODIwX3RhYmxlX3RvcCkKIAkJcGFuaWMoImFsbG9jX2xvd19wYWdlOiByYW4gb3V0IG9mIG1lbW9yeSIpOwogCiAJYWRyID0gX192YShwZm4gKiBQQUdFX1NJWkUpOwpAQCAtOTAsNyArODYsNyBAQAogCiAjaWZkZWYgQ09ORklHX1g4Nl9QQUUKIAlpZiAoIShwZ2RfdmFsKCpwZ2QpICYgX1BBR0VfUFJFU0VOVCkpIHsKLQkJaWYgKGFmdGVyX2luaXRfYm9vdG1lbSkKKwkJaWYgKGFmdGVyX2Jvb3RtZW0pCiAJCQlwbWRfdGFibGUgPSAocG1kX3QgKilhbGxvY19ib290bWVtX2xvd19wYWdlcyhQQUdFX1NJWkUpOwogCQllbHNlCiAJCQlwbWRfdGFibGUgPSAocG1kX3QgKilhbGxvY19sb3dfcGFnZSgpOwpAQCAtMTE3LDcgKzExMyw3IEBACiAJaWYgKCEocG1kX3ZhbCgqcG1kKSAmIF9QQUdFX1BSRVNFTlQpKSB7CiAJCXB0ZV90ICpwYWdlX3RhYmxlID0gTlVMTDsKIAotCQlpZiAoYWZ0ZXJfaW5pdF9ib290bWVtKSB7CisJCWlmIChhZnRlcl9ib290bWVtKSB7CiAjaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQwogCQkJcGFnZV90YWJsZSA9IChwdGVfdCAqKSBhbGxvY19ib290bWVtX3BhZ2VzKFBBR0VfU0laRSk7CiAjZW5kaWYKQEAgLTE2OCwxMiArMTY0LDEyIEBACiAJaWYgKHBtZF9pZHhfa21hcF9iZWdpbiAhPSBwbWRfaWR4X2ttYXBfZW5kCiAJICAgICYmICh2YWRkciA+PiBQTURfU0hJRlQpID49IHBtZF9pZHhfa21hcF9iZWdpbgogCSAgICAmJiAodmFkZHIgPj4gUE1EX1NISUZUKSA8PSBwbWRfaWR4X2ttYXBfZW5kCi0JICAgICYmICgoX19wYShwdGUpID4+IFBBR0VfU0hJRlQpIDwgdGFibGVfc3RhcnQKLQkJfHwgKF9fcGEocHRlKSA+PiBQQUdFX1NISUZUKSA+PSB0YWJsZV9lbmQpKSB7CisJICAgICYmICgoX19wYShwdGUpID4+IFBBR0VfU0hJRlQpIDwgZTgyMF90YWJsZV9zdGFydAorCQl8fCAoX19wYShwdGUpID4+IFBBR0VfU0hJRlQpID49IGU4MjBfdGFibGVfZW5kKSkgewogCQlwdGVfdCAqbmV3cHRlOwogCQlpbnQgaTsKIAotCQlCVUdfT04oYWZ0ZXJfaW5pdF9ib290bWVtKTsKKwkJQlVHX09OKGFmdGVyX2Jvb3RtZW0pOwogCQluZXdwdGUgPSBhbGxvY19sb3dfcGFnZSgpOwogCQlmb3IgKGkgPSAwOyBpIDwgUFRSU19QRVJfUFRFOyBpKyspCiAJCQlzZXRfcHRlKG5ld3B0ZSArIGksIHB0ZVtpXSk7CkBAIC0yNDIsMTEgKzIzOCwxNCBAQAogICogb2YgbWF4X2xvd19wZm4gcGFnZXMsIGJ5IGNyZWF0aW5nIHBhZ2UgdGFibGVzIHN0YXJ0aW5nIGZyb20gYWRkcmVzcwogICogUEFHRV9PRkZTRVQ6CiAgKi8KLXN0YXRpYyB2b2lkIF9faW5pdCBrZXJuZWxfcGh5c2ljYWxfbWFwcGluZ19pbml0KHBnZF90ICpwZ2RfYmFzZSwKLQkJCQkJCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAotCQkJCQkJdW5zaWduZWQgbG9uZyBlbmRfcGZuLAotCQkJCQkJaW50IHVzZV9wc2UpCit1bnNpZ25lZCBsb25nIF9faW5pdAora2VybmVsX3BoeXNpY2FsX21hcHBpbmdfaW5pdCh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJICAgICB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemVfbWFzaykKIHsKKwlpbnQgdXNlX3BzZSA9IHBhZ2Vfc2l6ZV9tYXNrID09ICgxPDxQR19MRVZFTF8yTSk7CisJdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47CisJcGdkX3QgKnBnZF9iYXNlID0gc3dhcHBlcl9wZ19kaXI7CiAJaW50IHBnZF9pZHgsIHBtZF9pZHgsIHB0ZV9vZnM7CiAJdW5zaWduZWQgbG9uZyBwZm47CiAJcGdkX3QgKnBnZDsKQEAgLTI1NSw2ICsyNTQsOSBAQAogCXVuc2lnbmVkIHBhZ2VzXzJtLCBwYWdlc180azsKIAlpbnQgbWFwcGluZ19pdGVyOwogCisJc3RhcnRfcGZuID0gc3RhcnQgPj4gUEFHRV9TSElGVDsKKwllbmRfcGZuID0gZW5kID4+IFBBR0VfU0hJRlQ7CisKIAkvKgogCSAqIEZpcnN0IGl0ZXJhdGlvbiB3aWxsIHNldHVwIGlkZW50aXR5IG1hcHBpbmcgdXNpbmcgbGFyZ2Uvc21hbGwgcGFnZXMKIAkgKiBiYXNlZCBvbiB1c2VfcHNlLCB3aXRoIG90aGVyIGF0dHJpYnV0ZXMgc2FtZSBhcyBzZXQgYnkKQEAgLTM2OSwyNiArMzcxLDYgQEAKIAkJbWFwcGluZ19pdGVyID0gMjsKIAkJZ290byByZXBlYXQ7CiAJfQotfQotCi0vKgotICogZGV2bWVtX2lzX2FsbG93ZWQoKSBjaGVja3MgdG8gc2VlIGlmIC9kZXYvbWVtIGFjY2VzcyB0byBhIGNlcnRhaW4gYWRkcmVzcwotICogaXMgdmFsaWQuIFRoZSBhcmd1bWVudCBpcyBhIHBoeXNpY2FsIHBhZ2UgbnVtYmVyLgotICoKLSAqCi0gKiBPbiB4ODYsIGFjY2VzcyBoYXMgdG8gYmUgZ2l2ZW4gdG8gdGhlIGZpcnN0IG1lZ2FieXRlIG9mIHJhbSBiZWNhdXNlIHRoYXQgYXJlYQotICogY29udGFpbnMgYmlvcyBjb2RlIGFuZCBkYXRhIHJlZ2lvbnMgdXNlZCBieSBYIGFuZCBkb3NlbXUgYW5kIHNpbWlsYXIgYXBwcy4KLSAqIEFjY2VzcyBoYXMgdG8gYmUgZ2l2ZW4gdG8gbm9uLWtlcm5lbC1yYW0gYXJlYXMgYXMgd2VsbCwgdGhlc2UgY29udGFpbiB0aGUgUENJCi0gKiBtbWlvIHJlc291cmNlcyBhcyB3ZWxsIGFzIHBvdGVudGlhbCBiaW9zL2FjcGkgZGF0YSByZWdpb25zLgotICovCi1pbnQgZGV2bWVtX2lzX2FsbG93ZWQodW5zaWduZWQgbG9uZyBwYWdlbnIpCi17Ci0JaWYgKHBhZ2VuciA8PSAyNTYpCi0JCXJldHVybiAxOwotCWlmIChpb21lbV9pc19leGNsdXNpdmUocGFnZW5yIDw8IFBBR0VfU0hJRlQpKQotCQlyZXR1cm4gMDsKLQlpZiAoIXBhZ2VfaXNfcmFtKHBhZ2VucikpCi0JCXJldHVybiAxOwogCXJldHVybiAwOwogfQogCkBAIC01NDUsOCArNTI3LDkgQEAKICAqIGJlIHBhcnRpYWxseSBwb3B1bGF0ZWQsIGFuZCBzbyBpdCBhdm9pZHMgc3RvbXBpbmcgb24gYW55IGV4aXN0aW5nCiAgKiBtYXBwaW5ncy4KICAqLwotc3RhdGljIHZvaWQgX19pbml0IGVhcmx5X2lvcmVtYXBfcGFnZV90YWJsZV9yYW5nZV9pbml0KHBnZF90ICpwZ2RfYmFzZSkKK3ZvaWQgX19pbml0IGVhcmx5X2lvcmVtYXBfcGFnZV90YWJsZV9yYW5nZV9pbml0KHZvaWQpCiB7CisJcGdkX3QgKnBnZF9iYXNlID0gc3dhcHBlcl9wZ19kaXI7CiAJdW5zaWduZWQgbG9uZyB2YWRkciwgZW5kOwogCiAJLyoKQEAgLTY0MSw3ICs2MjQsNyBAQAogfQogZWFybHlfcGFyYW0oIm5vZXhlYyIsIG5vZXhlY19zZXR1cCk7CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBzZXRfbngodm9pZCkKK3ZvaWQgX19pbml0IHNldF9ueCh2b2lkKQogewogCXVuc2lnbmVkIGludCB2WzRdLCBsLCBoOwogCkBAIC03OTMsNiArNzc2LDggQEAKICNpZmRlZiBDT05GSUdfRkxBVE1FTQogCW1heF9tYXBuciA9IG51bV9waHlzcGFnZXM7CiAjZW5kaWYKKwlfX3ZtYWxsb2Nfc3RhcnRfc2V0ID0gdHJ1ZTsKKwogCXByaW50ayhLRVJOX05PVElDRSAiJWxkTUIgTE9XTUVNIGF2YWlsYWJsZS5cbiIsCiAJCQlwYWdlc190b19tYihtYXhfbG93X3BmbikpOwogCkBAIC04MTQsMTc2ICs3OTksNjYgQEAKIAlmcmVlX2FyZWFfaW5pdF9ub2RlcyhtYXhfem9uZV9wZm5zKTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgX19pbml0IHNldHVwX25vZGVfYm9vdG1lbShpbnQgbm9kZWlkLAorCQkJCSB1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwKKwkJCQkgdW5zaWduZWQgbG9uZyBlbmRfcGZuLAorCQkJCSB1bnNpZ25lZCBsb25nIGJvb3RtYXApCit7CisJdW5zaWduZWQgbG9uZyBib290bWFwX3NpemU7CisKKwkvKiBkb24ndCB0b3VjaCBtaW5fbG93X3BmbiAqLworCWJvb3RtYXBfc2l6ZSA9IGluaXRfYm9vdG1lbV9ub2RlKE5PREVfREFUQShub2RlaWQpLAorCQkJCQkgYm9vdG1hcCA+PiBQQUdFX1NISUZULAorCQkJCQkgc3RhcnRfcGZuLCBlbmRfcGZuKTsKKwlwcmludGsoS0VSTl9JTkZPICIgIG5vZGUgJWQgbG93IHJhbTogJTA4bHggLSAlMDhseFxuIiwKKwkJbm9kZWlkLCBzdGFydF9wZm48PFBBR0VfU0hJRlQsIGVuZF9wZm48PFBBR0VfU0hJRlQpOworCXByaW50ayhLRVJOX0lORk8gIiAgbm9kZSAlZCBib290bWFwICUwOGx4IC0gJTA4bHhcbiIsCisJCSBub2RlaWQsIGJvb3RtYXAsIGJvb3RtYXAgKyBib290bWFwX3NpemUpOworCWZyZWVfYm9vdG1lbV93aXRoX2FjdGl2ZV9yZWdpb25zKG5vZGVpZCwgZW5kX3Bmbik7CisJZWFybHlfcmVzX3RvX2Jvb3RtZW0oc3RhcnRfcGZuPDxQQUdFX1NISUZULCBlbmRfcGZuPDxQQUdFX1NISUZUKTsKKworCXJldHVybiBib290bWFwICsgYm9vdG1hcF9zaXplOworfQorCiB2b2lkIF9faW5pdCBzZXR1cF9ib290bWVtX2FsbG9jYXRvcih2b2lkKQogewotCWludCBpOworCWludCBub2RlaWQ7CiAJdW5zaWduZWQgbG9uZyBib290bWFwX3NpemUsIGJvb3RtYXA7CiAJLyoKIAkgKiBJbml0aWFsaXplIHRoZSBib290LXRpbWUgYWxsb2NhdG9yICh3aXRoIGxvdyBtZW1vcnkgb25seSk6CiAJICovCiAJYm9vdG1hcF9zaXplID0gYm9vdG1lbV9ib290bWFwX3BhZ2VzKG1heF9sb3dfcGZuKTw8UEFHRV9TSElGVDsKLQlib290bWFwID0gZmluZF9lODIwX2FyZWEobWluX2xvd19wZm48PFBBR0VfU0hJRlQsCi0JCQkJIG1heF9wZm5fbWFwcGVkPDxQQUdFX1NISUZULCBib290bWFwX3NpemUsCisJYm9vdG1hcCA9IGZpbmRfZTgyMF9hcmVhKDAsIG1heF9wZm5fbWFwcGVkPDxQQUdFX1NISUZULCBib290bWFwX3NpemUsCiAJCQkJIFBBR0VfU0laRSk7CiAJaWYgKGJvb3RtYXAgPT0gLTFMKQogCQlwYW5pYygiQ2Fubm90IGZpbmQgYm9vdG1lbSBtYXAgb2Ygc2l6ZSAlbGRcbiIsIGJvb3RtYXBfc2l6ZSk7CiAJcmVzZXJ2ZV9lYXJseShib290bWFwLCBib290bWFwICsgYm9vdG1hcF9zaXplLCAiQk9PVE1BUCIpOwogCi0JLyogZG9uJ3QgdG91Y2ggbWluX2xvd19wZm4gKi8KLQlib290bWFwX3NpemUgPSBpbml0X2Jvb3RtZW1fbm9kZShOT0RFX0RBVEEoMCksIGJvb3RtYXAgPj4gUEFHRV9TSElGVCwKLQkJCQkJIG1pbl9sb3dfcGZuLCBtYXhfbG93X3Bmbik7CiAJcHJpbnRrKEtFUk5fSU5GTyAiICBtYXBwZWQgbG93IHJhbTogMCAtICUwOGx4XG4iLAogCQkgbWF4X3Bmbl9tYXBwZWQ8PFBBR0VfU0hJRlQpOwotCXByaW50ayhLRVJOX0lORk8gIiAgbG93IHJhbTogJTA4bHggLSAlMDhseFxuIiwKLQkJIG1pbl9sb3dfcGZuPDxQQUdFX1NISUZULCBtYXhfbG93X3Bmbjw8UEFHRV9TSElGVCk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiICBib290bWFwICUwOGx4IC0gJTA4bHhcbiIsCi0JCSBib290bWFwLCBib290bWFwICsgYm9vdG1hcF9zaXplKTsKLQlmb3JfZWFjaF9vbmxpbmVfbm9kZShpKQotCQlmcmVlX2Jvb3RtZW1fd2l0aF9hY3RpdmVfcmVnaW9ucyhpLCBtYXhfbG93X3Bmbik7Ci0JZWFybHlfcmVzX3RvX2Jvb3RtZW0oMCwgbWF4X2xvd19wZm48PFBBR0VfU0hJRlQpOworCXByaW50ayhLRVJOX0lORk8gIiAgbG93IHJhbTogMCAtICUwOGx4XG4iLCBtYXhfbG93X3Bmbjw8UEFHRV9TSElGVCk7CiAKLQlhZnRlcl9pbml0X2Jvb3RtZW0gPSAxOwotfQorCWZvcl9lYWNoX29ubGluZV9ub2RlKG5vZGVpZCkgeworCQkgdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47CiAKLXN0YXRpYyB2b2lkIF9faW5pdCBmaW5kX2Vhcmx5X3RhYmxlX3NwYWNlKHVuc2lnbmVkIGxvbmcgZW5kLCBpbnQgdXNlX3BzZSkKLXsKLQl1bnNpZ25lZCBsb25nIHB1ZHMsIHBtZHMsIHB0ZXMsIHRhYmxlcywgc3RhcnQ7Ci0KLQlwdWRzID0gKGVuZCArIFBVRF9TSVpFIC0gMSkgPj4gUFVEX1NISUZUOwotCXRhYmxlcyA9IHJvdW5kdXAocHVkcyAqIHNpemVvZihwdWRfdCksIFBBR0VfU0laRSk7Ci0KLQlwbWRzID0gKGVuZCArIFBNRF9TSVpFIC0gMSkgPj4gUE1EX1NISUZUOwotCXRhYmxlcyArPSByb3VuZHVwKHBtZHMgKiBzaXplb2YocG1kX3QpLCBQQUdFX1NJWkUpOwotCi0JaWYgKHVzZV9wc2UpIHsKLQkJdW5zaWduZWQgbG9uZyBleHRyYTsKLQotCQlleHRyYSA9IGVuZCAtICgoZW5kPj5QTURfU0hJRlQpIDw8IFBNRF9TSElGVCk7Ci0JCWV4dHJhICs9IFBNRF9TSVpFOwotCQlwdGVzID0gKGV4dHJhICsgUEFHRV9TSVpFIC0gMSkgPj4gUEFHRV9TSElGVDsKLQl9IGVsc2UKLQkJcHRlcyA9IChlbmQgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOwotCi0JdGFibGVzICs9IHJvdW5kdXAocHRlcyAqIHNpemVvZihwdGVfdCksIFBBR0VfU0laRSk7Ci0KLQkvKiBmb3IgZml4bWFwICovCi0JdGFibGVzICs9IHJvdW5kdXAoX19lbmRfb2ZfZml4ZWRfYWRkcmVzc2VzICogc2l6ZW9mKHB0ZV90KSwgUEFHRV9TSVpFKTsKLQotCS8qCi0JICogUkVELVBFTiBwdXR0aW5nIHBhZ2UgdGFibGVzIG9ubHkgb24gbm9kZSAwIGNvdWxkCi0JICogY2F1c2UgYSBob3RzcG90IGFuZCBmaWxsIHVwIFpPTkVfRE1BLiBUaGUgcGFnZSB0YWJsZXMKLQkgKiBuZWVkIHJvdWdobHkgMC41S0IgcGVyIEdCLgotCSAqLwotCXN0YXJ0ID0gMHg3MDAwOwotCXRhYmxlX3N0YXJ0ID0gZmluZF9lODIwX2FyZWEoc3RhcnQsIG1heF9wZm5fbWFwcGVkPDxQQUdFX1NISUZULAotCQkJCQl0YWJsZXMsIFBBR0VfU0laRSk7Ci0JaWYgKHRhYmxlX3N0YXJ0ID09IC0xVUwpCi0JCXBhbmljKCJDYW5ub3QgZmluZCBzcGFjZSBmb3IgdGhlIGtlcm5lbCBwYWdlIHRhYmxlcyIpOwotCi0JdGFibGVfc3RhcnQgPj49IFBBR0VfU0hJRlQ7Ci0JdGFibGVfZW5kID0gdGFibGVfc3RhcnQ7Ci0JdGFibGVfdG9wID0gdGFibGVfc3RhcnQgKyAodGFibGVzPj5QQUdFX1NISUZUKTsKLQotCXByaW50ayhLRVJOX0RFQlVHICJrZXJuZWwgZGlyZWN0IG1hcHBpbmcgdGFibGVzIHVwIHRvICVseCBAICVseC0lbHhcbiIsCi0JCWVuZCwgdGFibGVfc3RhcnQgPDwgUEFHRV9TSElGVCwKLQkJKHRhYmxlX3N0YXJ0IDw8IFBBR0VfU0hJRlQpICsgdGFibGVzKTsKLX0KLQotdW5zaWduZWQgbG9uZyBfX2luaXRfcmVmb2sgaW5pdF9tZW1vcnlfbWFwcGluZyh1bnNpZ25lZCBsb25nIHN0YXJ0LAotCQkJCQkJdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JcGdkX3QgKnBnZF9iYXNlID0gc3dhcHBlcl9wZ19kaXI7Ci0JdW5zaWduZWQgbG9uZyBzdGFydF9wZm4sIGVuZF9wZm47Ci0JdW5zaWduZWQgbG9uZyBiaWdfcGFnZV9zdGFydDsKLSNpZmRlZiBDT05GSUdfREVCVUdfUEFHRUFMTE9DCi0JLyoKLQkgKiBGb3IgQ09ORklHX0RFQlVHX1BBR0VBTExPQywgaWRlbnRpdHkgbWFwcGluZyB3aWxsIHVzZSBzbWFsbCBwYWdlcy4KLQkgKiBUaGlzIHdpbGwgc2ltcGxpZnkgY3BhKCksIHdoaWNoIG90aGVyd2lzZSBuZWVkcyB0byBzdXBwb3J0IHNwbGl0dGluZwotCSAqIGxhcmdlIHBhZ2VzIGludG8gc21hbGwgaW4gaW50ZXJydXB0IGNvbnRleHQsIGV0Yy4KLQkgKi8KLQlpbnQgdXNlX3BzZSA9IDA7CisjaWZkZWYgQ09ORklHX05FRURfTVVMVElQTEVfTk9ERVMKKwkJc3RhcnRfcGZuID0gbm9kZV9zdGFydF9wZm5bbm9kZWlkXTsKKwkJZW5kX3BmbiA9IG5vZGVfZW5kX3Bmbltub2RlaWRdOworCQlpZiAoc3RhcnRfcGZuID4gbWF4X2xvd19wZm4pCisJCQljb250aW51ZTsKKwkJaWYgKGVuZF9wZm4gPiBtYXhfbG93X3BmbikKKwkJCWVuZF9wZm4gPSBtYXhfbG93X3BmbjsKICNlbHNlCi0JaW50IHVzZV9wc2UgPSBjcHVfaGFzX3BzZTsKKwkJc3RhcnRfcGZuID0gMDsKKwkJZW5kX3BmbiA9IG1heF9sb3dfcGZuOwogI2VuZGlmCi0KLQkvKgotCSAqIEZpbmQgc3BhY2UgZm9yIHRoZSBrZXJuZWwgZGlyZWN0IG1hcHBpbmcgdGFibGVzLgotCSAqLwotCWlmICghYWZ0ZXJfaW5pdF9ib290bWVtKQotCQlmaW5kX2Vhcmx5X3RhYmxlX3NwYWNlKGVuZCwgdXNlX3BzZSk7Ci0KLSNpZmRlZiBDT05GSUdfWDg2X1BBRQotCXNldF9ueCgpOwotCWlmIChueF9lbmFibGVkKQotCQlwcmludGsoS0VSTl9JTkZPICJOWCAoRXhlY3V0ZSBEaXNhYmxlKSBwcm90ZWN0aW9uOiBhY3RpdmVcbiIpOwotI2VuZGlmCi0KLQkvKiBFbmFibGUgUFNFIGlmIGF2YWlsYWJsZSAqLwotCWlmIChjcHVfaGFzX3BzZSkKLQkJc2V0X2luX2NyNChYODZfQ1I0X1BTRSk7Ci0KLQkvKiBFbmFibGUgUEdFIGlmIGF2YWlsYWJsZSAqLwotCWlmIChjcHVfaGFzX3BnZSkgewotCQlzZXRfaW5fY3I0KFg4Nl9DUjRfUEdFKTsKLQkJX19zdXBwb3J0ZWRfcHRlX21hc2sgfD0gX1BBR0VfR0xPQkFMOworCQlib290bWFwID0gc2V0dXBfbm9kZV9ib290bWVtKG5vZGVpZCwgc3RhcnRfcGZuLCBlbmRfcGZuLAorCQkJCQkJIGJvb3RtYXApOwogCX0KIAotCS8qCi0JICogRG9uJ3QgdXNlIGEgbGFyZ2UgcGFnZSBmb3IgdGhlIGZpcnN0IDIvNE1CIG9mIG1lbW9yeQotCSAqIGJlY2F1c2UgdGhlcmUgYXJlIG9mdGVuIGZpeGVkIHNpemUgTVRSUnMgaW4gdGhlcmUKLQkgKiBhbmQgb3ZlcmxhcHBpbmcgTVRSUnMgaW50byBsYXJnZSBwYWdlcyBjYW4gY2F1c2UKLQkgKiBzbG93ZG93bnMuCi0JICovCi0JYmlnX3BhZ2Vfc3RhcnQgPSBQTURfU0laRTsKLQotCWlmIChzdGFydCA8IGJpZ19wYWdlX3N0YXJ0KSB7Ci0JCXN0YXJ0X3BmbiA9IHN0YXJ0ID4+IFBBR0VfU0hJRlQ7Ci0JCWVuZF9wZm4gPSBtaW4oYmlnX3BhZ2Vfc3RhcnQ+PlBBR0VfU0hJRlQsIGVuZD4+UEFHRV9TSElGVCk7Ci0JfSBlbHNlIHsKLQkJLyogaGVhZCBpcyBub3QgYmlnIHBhZ2UgYWxpZ25tZW50ID8gKi8KLQkJc3RhcnRfcGZuID0gc3RhcnQgPj4gUEFHRV9TSElGVDsKLQkJZW5kX3BmbiA9ICgoc3RhcnQgKyAoUE1EX1NJWkUgLSAxKSk+PlBNRF9TSElGVCkKLQkJCQkgPDwgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOwotCX0KLQlpZiAoc3RhcnRfcGZuIDwgZW5kX3BmbikKLQkJa2VybmVsX3BoeXNpY2FsX21hcHBpbmdfaW5pdChwZ2RfYmFzZSwgc3RhcnRfcGZuLCBlbmRfcGZuLCAwKTsKLQotCS8qIGJpZyBwYWdlIHJhbmdlICovCi0Jc3RhcnRfcGZuID0gKChzdGFydCArIChQTURfU0laRSAtIDEpKT4+UE1EX1NISUZUKQotCQkJIDw8IChQTURfU0hJRlQgLSBQQUdFX1NISUZUKTsKLQlpZiAoc3RhcnRfcGZuIDwgKGJpZ19wYWdlX3N0YXJ0ID4+IFBBR0VfU0hJRlQpKQotCQlzdGFydF9wZm4gPSAgYmlnX3BhZ2Vfc3RhcnQgPj4gUEFHRV9TSElGVDsKLQllbmRfcGZuID0gKGVuZD4+UE1EX1NISUZUKSA8PCAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7Ci0JaWYgKHN0YXJ0X3BmbiA8IGVuZF9wZm4pCi0JCWtlcm5lbF9waHlzaWNhbF9tYXBwaW5nX2luaXQocGdkX2Jhc2UsIHN0YXJ0X3BmbiwgZW5kX3BmbiwKLQkJCQkJICAgICB1c2VfcHNlKTsKLQotCS8qIHRhaWwgaXMgbm90IGJpZyBwYWdlIGFsaWdubWVudCA/ICovCi0Jc3RhcnRfcGZuID0gZW5kX3BmbjsKLQlpZiAoc3RhcnRfcGZuID4gKGJpZ19wYWdlX3N0YXJ0Pj5QQUdFX1NISUZUKSkgewotCQllbmRfcGZuID0gZW5kID4+IFBBR0VfU0hJRlQ7Ci0JCWlmIChzdGFydF9wZm4gPCBlbmRfcGZuKQotCQkJa2VybmVsX3BoeXNpY2FsX21hcHBpbmdfaW5pdChwZ2RfYmFzZSwgc3RhcnRfcGZuLAotCQkJCQkJCSBlbmRfcGZuLCAwKTsKLQl9Ci0KLQllYXJseV9pb3JlbWFwX3BhZ2VfdGFibGVfcmFuZ2VfaW5pdChwZ2RfYmFzZSk7Ci0KLQlsb2FkX2NyMyhzd2FwcGVyX3BnX2Rpcik7Ci0KLQlfX2ZsdXNoX3RsYl9hbGwoKTsKLQotCWlmICghYWZ0ZXJfaW5pdF9ib290bWVtKQotCQlyZXNlcnZlX2Vhcmx5KHRhYmxlX3N0YXJ0IDw8IFBBR0VfU0hJRlQsCi0JCQkJIHRhYmxlX2VuZCA8PCBQQUdFX1NISUZULCAiUEdUQUJMRSIpOwotCi0JaWYgKCFhZnRlcl9pbml0X2Jvb3RtZW0pCi0JCWVhcmx5X21lbXRlc3Qoc3RhcnQsIGVuZCk7Ci0KLQlyZXR1cm4gZW5kID4+IFBBR0VfU0hJRlQ7CisJYWZ0ZXJfYm9vdG1lbSA9IDE7CiB9CiAKLQogLyoKICAqIHBhZ2luZ19pbml0KCkgc2V0cyB1cCB0aGUgcGFnZSB0YWJsZXMgLSBub3RlIHRoYXQgdGhlIGZpcnN0IDhNQiBhcmUKICAqIGFscmVhZHkgbWFwcGVkIGJ5IGhlYWQuUy4KQEAgLTEyMTcsMTMgKzEwOTIsNiBAQAogfQogI2VuZGlmCiAKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JTklUUkQKLXZvaWQgZnJlZV9pbml0cmRfbWVtKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKQotewotCWZyZWVfaW5pdF9wYWdlcygiaW5pdHJkIG1lbW9yeSIsIHN0YXJ0LCBlbmQpOwotfQotI2VuZGlmCi0KIGludCBfX2luaXQgcmVzZXJ2ZV9ib290bWVtX2dlbmVyaWModW5zaWduZWQgbG9uZyBwaHlzLCB1bnNpZ25lZCBsb25nIGxlbiwKIAkJCQkgICBpbnQgZmxhZ3MpCiB7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9pbml0XzY0LmMgYi9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKaW5kZXggMDdmNDRkNC4uNTRlZmE1N2QgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2luaXRfNjQuYworKysgYi9hcmNoL3g4Ni9tbS9pbml0XzY0LmMKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlIDxhc20va2RlYnVnLmg+CiAjaW5jbHVkZSA8YXNtL251bWEuaD4KICNpbmNsdWRlIDxhc20vY2FjaGVmbHVzaC5oPgorI2luY2x1ZGUgPGFzbS9pbml0Lmg+CiAKIC8qCiAgKiBlbmRfcGZuIG9ubHkgaW5jbHVkZXMgUkFNLCB3aGlsZSBtYXhfcGZuX21hcHBlZCBpbmNsdWRlcyBhbGwgZTgyMCBlbnRyaWVzLgpAQCAtNjEsMTIgKzYyLDYgQEAKIAogREVGSU5FX1BFUl9DUFUoc3RydWN0IG1tdV9nYXRoZXIsIG1tdV9nYXRoZXJzKTsKIAotaW50IGRpcmVjdF9nYnBhZ2VzCi0jaWZkZWYgQ09ORklHX0RJUkVDVF9HQlBBR0VTCi0JCQkJPSAxCi0jZW5kaWYKLTsKLQogc3RhdGljIGludCBfX2luaXQgcGFyc2VfZGlyZWN0X2dicGFnZXNfb2ZmKGNoYXIgKmFyZykKIHsKIAlkaXJlY3RfZ2JwYWdlcyA9IDA7CkBAIC04NywxMiArODIsMTAgQEAKICAqIGFyb3VuZCB3aXRob3V0IGNoZWNraW5nIHRoZSBwZ2QgZXZlcnkgdGltZS4KICAqLwogCi1pbnQgYWZ0ZXJfYm9vdG1lbTsKLQogcHRldmFsX3QgX19zdXBwb3J0ZWRfcHRlX21hc2sgX19yZWFkX21vc3RseSA9IH5fUEFHRV9JT01BUDsKIEVYUE9SVF9TWU1CT0xfR1BMKF9fc3VwcG9ydGVkX3B0ZV9tYXNrKTsKIAotc3RhdGljIGludCBkb19ub3RfbnggX19jcHVpbml0ZGF0YTsKK3N0YXRpYyBpbnQgZGlzYWJsZV9ueCBfX2NwdWluaXRkYXRhOwogCiAvKgogICogbm9leGVjPW9ufG9mZgpAQCAtMTA3LDkgKzEwMCw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmICghc3RybmNtcChzdHIsICJvbiIsIDIpKSB7CiAJCV9fc3VwcG9ydGVkX3B0ZV9tYXNrIHw9IF9QQUdFX05YOwotCQlkb19ub3RfbnggPSAwOworCQlkaXNhYmxlX254ID0gMDsKIAl9IGVsc2UgaWYgKCFzdHJuY21wKHN0ciwgIm9mZiIsIDMpKSB7Ci0JCWRvX25vdF9ueCA9IDE7CisJCWRpc2FibGVfbnggPSAxOwogCQlfX3N1cHBvcnRlZF9wdGVfbWFzayAmPSB+X1BBR0VfTlg7CiAJfQogCXJldHVybiAwOwpAQCAtMTIxLDcgKzExNCw3IEBACiAJdW5zaWduZWQgbG9uZyBlZmVyOwogCiAJcmRtc3JsKE1TUl9FRkVSLCBlZmVyKTsKLQlpZiAoIShlZmVyICYgRUZFUl9OWCkgfHwgZG9fbm90X254KQorCWlmICghKGVmZXIgJiBFRkVSX05YKSB8fCBkaXNhYmxlX254KQogCQlfX3N1cHBvcnRlZF9wdGVfbWFzayAmPSB+X1BBR0VfTlg7CiB9CiAKQEAgLTMyNSwxMyArMzE4LDkgQEAKIAl9CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9faW5pdGRhdGEgdGFibGVfc3RhcnQ7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBfX21lbWluaXRkYXRhIHRhYmxlX2VuZDsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbWVtaW5pdGRhdGEgdGFibGVfdG9wOwotCiBzdGF0aWMgX19yZWYgdm9pZCAqYWxsb2NfbG93X3BhZ2UodW5zaWduZWQgbG9uZyAqcGh5cykKIHsKLQl1bnNpZ25lZCBsb25nIHBmbiA9IHRhYmxlX2VuZCsrOworCXVuc2lnbmVkIGxvbmcgcGZuID0gZTgyMF90YWJsZV9lbmQrKzsKIAl2b2lkICphZHI7CiAKIAlpZiAoYWZ0ZXJfYm9vdG1lbSkgewpAQCAtMzQxLDcgKzMzMCw3IEBACiAJCXJldHVybiBhZHI7CiAJfQogCi0JaWYgKHBmbiA+PSB0YWJsZV90b3ApCisJaWYgKHBmbiA+PSBlODIwX3RhYmxlX3RvcCkKIAkJcGFuaWMoImFsbG9jX2xvd19wYWdlOiByYW4gb3V0IG9mIG1lbW9yeSIpOwogCiAJYWRyID0gZWFybHlfbWVtcmVtYXAocGZuICogUEFHRV9TSVpFLCBQQUdFX1NJWkUpOwpAQCAtNTgxLDU4ICs1NzAsMTAgQEAKIAlyZXR1cm4gcGh5c19wdWRfaW5pdChwdWQsIGFkZHIsIGVuZCwgcGFnZV9zaXplX21hc2spOwogfQogCi1zdGF0aWMgdm9pZCBfX2luaXQgZmluZF9lYXJseV90YWJsZV9zcGFjZSh1bnNpZ25lZCBsb25nIGVuZCwgaW50IHVzZV9wc2UsCi0JCQkJCSAgaW50IHVzZV9nYnBhZ2VzKQotewotCXVuc2lnbmVkIGxvbmcgcHVkcywgcG1kcywgcHRlcywgdGFibGVzLCBzdGFydDsKLQotCXB1ZHMgPSAoZW5kICsgUFVEX1NJWkUgLSAxKSA+PiBQVURfU0hJRlQ7Ci0JdGFibGVzID0gcm91bmR1cChwdWRzICogc2l6ZW9mKHB1ZF90KSwgUEFHRV9TSVpFKTsKLQlpZiAodXNlX2dicGFnZXMpIHsKLQkJdW5zaWduZWQgbG9uZyBleHRyYTsKLQkJZXh0cmEgPSBlbmQgLSAoKGVuZD4+UFVEX1NISUZUKSA8PCBQVURfU0hJRlQpOwotCQlwbWRzID0gKGV4dHJhICsgUE1EX1NJWkUgLSAxKSA+PiBQTURfU0hJRlQ7Ci0JfSBlbHNlCi0JCXBtZHMgPSAoZW5kICsgUE1EX1NJWkUgLSAxKSA+PiBQTURfU0hJRlQ7Ci0JdGFibGVzICs9IHJvdW5kdXAocG1kcyAqIHNpemVvZihwbWRfdCksIFBBR0VfU0laRSk7Ci0KLQlpZiAodXNlX3BzZSkgewotCQl1bnNpZ25lZCBsb25nIGV4dHJhOwotCQlleHRyYSA9IGVuZCAtICgoZW5kPj5QTURfU0hJRlQpIDw8IFBNRF9TSElGVCk7Ci0JCXB0ZXMgPSAoZXh0cmEgKyBQQUdFX1NJWkUgLSAxKSA+PiBQQUdFX1NISUZUOwotCX0gZWxzZQotCQlwdGVzID0gKGVuZCArIFBBR0VfU0laRSAtIDEpID4+IFBBR0VfU0hJRlQ7Ci0JdGFibGVzICs9IHJvdW5kdXAocHRlcyAqIHNpemVvZihwdGVfdCksIFBBR0VfU0laRSk7Ci0KLQkvKgotCSAqIFJFRC1QRU4gcHV0dGluZyBwYWdlIHRhYmxlcyBvbmx5IG9uIG5vZGUgMCBjb3VsZAotCSAqIGNhdXNlIGEgaG90c3BvdCBhbmQgZmlsbCB1cCBaT05FX0RNQS4gVGhlIHBhZ2UgdGFibGVzCi0JICogbmVlZCByb3VnaGx5IDAuNUtCIHBlciBHQi4KLQkgKi8KLQlzdGFydCA9IDB4ODAwMDsKLQl0YWJsZV9zdGFydCA9IGZpbmRfZTgyMF9hcmVhKHN0YXJ0LCBlbmQsIHRhYmxlcywgUEFHRV9TSVpFKTsKLQlpZiAodGFibGVfc3RhcnQgPT0gLTFVTCkKLQkJcGFuaWMoIkNhbm5vdCBmaW5kIHNwYWNlIGZvciB0aGUga2VybmVsIHBhZ2UgdGFibGVzIik7Ci0KLQl0YWJsZV9zdGFydCA+Pj0gUEFHRV9TSElGVDsKLQl0YWJsZV9lbmQgPSB0YWJsZV9zdGFydDsKLQl0YWJsZV90b3AgPSB0YWJsZV9zdGFydCArICh0YWJsZXMgPj4gUEFHRV9TSElGVCk7Ci0KLQlwcmludGsoS0VSTl9ERUJVRyAia2VybmVsIGRpcmVjdCBtYXBwaW5nIHRhYmxlcyB1cCB0byAlbHggQCAlbHgtJWx4XG4iLAotCQllbmQsIHRhYmxlX3N0YXJ0IDw8IFBBR0VfU0hJRlQsIHRhYmxlX3RvcCA8PCBQQUdFX1NISUZUKTsKLX0KLQotc3RhdGljIHZvaWQgX19pbml0IGluaXRfZ2JwYWdlcyh2b2lkKQotewotCWlmIChkaXJlY3RfZ2JwYWdlcyAmJiBjcHVfaGFzX2dicGFnZXMpCi0JCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIEdCIHBhZ2VzIGZvciBkaXJlY3QgbWFwcGluZ1xuIik7Ci0JZWxzZQotCQlkaXJlY3RfZ2JwYWdlcyA9IDA7Ci19Ci0KLXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbWVtaW5pdCBrZXJuZWxfcGh5c2ljYWxfbWFwcGluZ19pbml0KHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkJCQl1bnNpZ25lZCBsb25nIGVuZCwKLQkJCQkJCXVuc2lnbmVkIGxvbmcgcGFnZV9zaXplX21hc2spCit1bnNpZ25lZCBsb25nIF9faW5pdAora2VybmVsX3BoeXNpY2FsX21hcHBpbmdfaW5pdCh1bnNpZ25lZCBsb25nIHN0YXJ0LAorCQkJICAgICB1bnNpZ25lZCBsb25nIGVuZCwKKwkJCSAgICAgdW5zaWduZWQgbG9uZyBwYWdlX3NpemVfbWFzaykKIHsKIAogCXVuc2lnbmVkIGxvbmcgbmV4dCwgbGFzdF9tYXBfYWRkciA9IGVuZDsKQEAgLTY2OSwxNzYgKzYxMCw2IEBACiAJcmV0dXJuIGxhc3RfbWFwX2FkZHI7CiB9CiAKLXN0cnVjdCBtYXBfcmFuZ2UgewotCXVuc2lnbmVkIGxvbmcgc3RhcnQ7Ci0JdW5zaWduZWQgbG9uZyBlbmQ7Ci0JdW5zaWduZWQgcGFnZV9zaXplX21hc2s7Ci19OwotCi0jZGVmaW5lIE5SX1JBTkdFX01SIDUKLQotc3RhdGljIGludCBzYXZlX21yKHN0cnVjdCBtYXBfcmFuZ2UgKm1yLCBpbnQgbnJfcmFuZ2UsCi0JCSAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCB1bnNpZ25lZCBsb25nIGVuZF9wZm4sCi0JCSAgIHVuc2lnbmVkIGxvbmcgcGFnZV9zaXplX21hc2spCi17Ci0KLQlpZiAoc3RhcnRfcGZuIDwgZW5kX3BmbikgewotCQlpZiAobnJfcmFuZ2UgPj0gTlJfUkFOR0VfTVIpCi0JCQlwYW5pYygicnVuIG91dCBvZiByYW5nZSBmb3IgaW5pdF9tZW1vcnlfbWFwcGluZ1xuIik7Ci0JCW1yW25yX3JhbmdlXS5zdGFydCA9IHN0YXJ0X3Bmbjw8UEFHRV9TSElGVDsKLQkJbXJbbnJfcmFuZ2VdLmVuZCAgID0gZW5kX3Bmbjw8UEFHRV9TSElGVDsKLQkJbXJbbnJfcmFuZ2VdLnBhZ2Vfc2l6ZV9tYXNrID0gcGFnZV9zaXplX21hc2s7Ci0JCW5yX3JhbmdlKys7Ci0JfQotCi0JcmV0dXJuIG5yX3JhbmdlOwotfQotCi0vKgotICogU2V0dXAgdGhlIGRpcmVjdCBtYXBwaW5nIG9mIHRoZSBwaHlzaWNhbCBtZW1vcnkgYXQgUEFHRV9PRkZTRVQuCi0gKiBUaGlzIHJ1bnMgYmVmb3JlIGJvb3RtZW0gaXMgaW5pdGlhbGl6ZWQgYW5kIGdldHMgcGFnZXMgZGlyZWN0bHkgZnJvbQotICogdGhlIHBoeXNpY2FsIG1lbW9yeS4gVG8gYWNjZXNzIHRoZW0gdGhleSBhcmUgdGVtcG9yYXJpbHkgbWFwcGVkLgotICovCi11bnNpZ25lZCBsb25nIF9faW5pdF9yZWZvayBpbml0X21lbW9yeV9tYXBwaW5nKHVuc2lnbmVkIGxvbmcgc3RhcnQsCi0JCQkJCSAgICAgICB1bnNpZ25lZCBsb25nIGVuZCkKLXsKLQl1bnNpZ25lZCBsb25nIGxhc3RfbWFwX2FkZHIgPSAwOwotCXVuc2lnbmVkIGxvbmcgcGFnZV9zaXplX21hc2sgPSAwOwotCXVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLCBlbmRfcGZuOwotCXVuc2lnbmVkIGxvbmcgcG9zOwotCi0Jc3RydWN0IG1hcF9yYW5nZSBtcltOUl9SQU5HRV9NUl07Ci0JaW50IG5yX3JhbmdlLCBpOwotCWludCB1c2VfcHNlLCB1c2VfZ2JwYWdlczsKLQotCXByaW50ayhLRVJOX0lORk8gImluaXRfbWVtb3J5X21hcHBpbmc6ICUwMTZseC0lMDE2bHhcbiIsIHN0YXJ0LCBlbmQpOwotCi0JLyoKLQkgKiBGaW5kIHNwYWNlIGZvciB0aGUga2VybmVsIGRpcmVjdCBtYXBwaW5nIHRhYmxlcy4KLQkgKgotCSAqIExhdGVyIHdlIHNob3VsZCBhbGxvY2F0ZSB0aGVzZSB0YWJsZXMgaW4gdGhlIGxvY2FsIG5vZGUgb2YgdGhlCi0JICogbWVtb3J5IG1hcHBlZC4gVW5mb3J0dW5hdGVseSB0aGlzIGlzIGRvbmUgY3VycmVudGx5IGJlZm9yZSB0aGUKLQkgKiBub2RlcyBhcmUgZGlzY292ZXJlZC4KLQkgKi8KLQlpZiAoIWFmdGVyX2Jvb3RtZW0pCi0JCWluaXRfZ2JwYWdlcygpOwotCi0jaWZkZWYgQ09ORklHX0RFQlVHX1BBR0VBTExPQwotCS8qCi0JICogRm9yIENPTkZJR19ERUJVR19QQUdFQUxMT0MsIGlkZW50aXR5IG1hcHBpbmcgd2lsbCB1c2Ugc21hbGwgcGFnZXMuCi0JICogVGhpcyB3aWxsIHNpbXBsaWZ5IGNwYSgpLCB3aGljaCBvdGhlcndpc2UgbmVlZHMgdG8gc3VwcG9ydCBzcGxpdHRpbmcKLQkgKiBsYXJnZSBwYWdlcyBpbnRvIHNtYWxsIGluIGludGVycnVwdCBjb250ZXh0LCBldGMuCi0JICovCi0JdXNlX3BzZSA9IHVzZV9nYnBhZ2VzID0gMDsKLSNlbHNlCi0JdXNlX3BzZSA9IGNwdV9oYXNfcHNlOwotCXVzZV9nYnBhZ2VzID0gZGlyZWN0X2dicGFnZXM7Ci0jZW5kaWYKLQotCWlmICh1c2VfZ2JwYWdlcykKLQkJcGFnZV9zaXplX21hc2sgfD0gMSA8PCBQR19MRVZFTF8xRzsKLQlpZiAodXNlX3BzZSkKLQkJcGFnZV9zaXplX21hc2sgfD0gMSA8PCBQR19MRVZFTF8yTTsKLQotCW1lbXNldChtciwgMCwgc2l6ZW9mKG1yKSk7Ci0JbnJfcmFuZ2UgPSAwOwotCi0JLyogaGVhZCBpZiBub3QgYmlnIHBhZ2UgYWxpZ25tZW50ID8qLwotCXN0YXJ0X3BmbiA9IHN0YXJ0ID4+IFBBR0VfU0hJRlQ7Ci0JcG9zID0gc3RhcnRfcGZuIDw8IFBBR0VfU0hJRlQ7Ci0JZW5kX3BmbiA9ICgocG9zICsgKFBNRF9TSVpFIC0gMSkpID4+IFBNRF9TSElGVCkKLQkJCTw8IChQTURfU0hJRlQgLSBQQUdFX1NISUZUKTsKLQlpZiAoZW5kX3BmbiA+IChlbmQgPj4gUEFHRV9TSElGVCkpCi0JCWVuZF9wZm4gPSBlbmQgPj4gUEFHRV9TSElGVDsKLQlpZiAoc3RhcnRfcGZuIDwgZW5kX3BmbikgewotCQlucl9yYW5nZSA9IHNhdmVfbXIobXIsIG5yX3JhbmdlLCBzdGFydF9wZm4sIGVuZF9wZm4sIDApOwotCQlwb3MgPSBlbmRfcGZuIDw8IFBBR0VfU0hJRlQ7Ci0JfQotCi0JLyogYmlnIHBhZ2UgKDJNKSByYW5nZSovCi0Jc3RhcnRfcGZuID0gKChwb3MgKyAoUE1EX1NJWkUgLSAxKSk+PlBNRF9TSElGVCkKLQkJCSA8PCAoUE1EX1NISUZUIC0gUEFHRV9TSElGVCk7Ci0JZW5kX3BmbiA9ICgocG9zICsgKFBVRF9TSVpFIC0gMSkpPj5QVURfU0hJRlQpCi0JCQkgPDwgKFBVRF9TSElGVCAtIFBBR0VfU0hJRlQpOwotCWlmIChlbmRfcGZuID4gKChlbmQ+PlBNRF9TSElGVCk8PChQTURfU0hJRlQgLSBQQUdFX1NISUZUKSkpCi0JCWVuZF9wZm4gPSAoKGVuZD4+UE1EX1NISUZUKTw8KFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpKTsKLQlpZiAoc3RhcnRfcGZuIDwgZW5kX3BmbikgewotCQlucl9yYW5nZSA9IHNhdmVfbXIobXIsIG5yX3JhbmdlLCBzdGFydF9wZm4sIGVuZF9wZm4sCi0JCQkJcGFnZV9zaXplX21hc2sgJiAoMTw8UEdfTEVWRUxfMk0pKTsKLQkJcG9zID0gZW5kX3BmbiA8PCBQQUdFX1NISUZUOwotCX0KLQotCS8qIGJpZyBwYWdlICgxRykgcmFuZ2UgKi8KLQlzdGFydF9wZm4gPSAoKHBvcyArIChQVURfU0laRSAtIDEpKT4+UFVEX1NISUZUKQotCQkJIDw8IChQVURfU0hJRlQgLSBQQUdFX1NISUZUKTsKLQllbmRfcGZuID0gKGVuZCA+PiBQVURfU0hJRlQpIDw8IChQVURfU0hJRlQgLSBQQUdFX1NISUZUKTsKLQlpZiAoc3RhcnRfcGZuIDwgZW5kX3BmbikgewotCQlucl9yYW5nZSA9IHNhdmVfbXIobXIsIG5yX3JhbmdlLCBzdGFydF9wZm4sIGVuZF9wZm4sCi0JCQkJcGFnZV9zaXplX21hc2sgJgotCQkJCSAoKDE8PFBHX0xFVkVMXzJNKXwoMTw8UEdfTEVWRUxfMUcpKSk7Ci0JCXBvcyA9IGVuZF9wZm4gPDwgUEFHRV9TSElGVDsKLQl9Ci0KLQkvKiB0YWlsIGlzIG5vdCBiaWcgcGFnZSAoMUcpIGFsaWdubWVudCAqLwotCXN0YXJ0X3BmbiA9ICgocG9zICsgKFBNRF9TSVpFIC0gMSkpPj5QTURfU0hJRlQpCi0JCQkgPDwgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOwotCWVuZF9wZm4gPSAoZW5kID4+IFBNRF9TSElGVCkgPDwgKFBNRF9TSElGVCAtIFBBR0VfU0hJRlQpOwotCWlmIChzdGFydF9wZm4gPCBlbmRfcGZuKSB7Ci0JCW5yX3JhbmdlID0gc2F2ZV9tcihtciwgbnJfcmFuZ2UsIHN0YXJ0X3BmbiwgZW5kX3BmbiwKLQkJCQlwYWdlX3NpemVfbWFzayAmICgxPDxQR19MRVZFTF8yTSkpOwotCQlwb3MgPSBlbmRfcGZuIDw8IFBBR0VfU0hJRlQ7Ci0JfQotCi0JLyogdGFpbCBpcyBub3QgYmlnIHBhZ2UgKDJNKSBhbGlnbm1lbnQgKi8KLQlzdGFydF9wZm4gPSBwb3M+PlBBR0VfU0hJRlQ7Ci0JZW5kX3BmbiA9IGVuZD4+UEFHRV9TSElGVDsKLQlucl9yYW5nZSA9IHNhdmVfbXIobXIsIG5yX3JhbmdlLCBzdGFydF9wZm4sIGVuZF9wZm4sIDApOwotCi0JLyogdHJ5IHRvIG1lcmdlIHNhbWUgcGFnZSBzaXplIGFuZCBjb250aW51b3VzICovCi0JZm9yIChpID0gMDsgbnJfcmFuZ2UgPiAxICYmIGkgPCBucl9yYW5nZSAtIDE7IGkrKykgewotCQl1bnNpZ25lZCBsb25nIG9sZF9zdGFydDsKLQkJaWYgKG1yW2ldLmVuZCAhPSBtcltpKzFdLnN0YXJ0IHx8Ci0JCSAgICBtcltpXS5wYWdlX3NpemVfbWFzayAhPSBtcltpKzFdLnBhZ2Vfc2l6ZV9tYXNrKQotCQkJY29udGludWU7Ci0JCS8qIG1vdmUgaXQgKi8KLQkJb2xkX3N0YXJ0ID0gbXJbaV0uc3RhcnQ7Ci0JCW1lbW1vdmUoJm1yW2ldLCAmbXJbaSsxXSwKLQkJCSAobnJfcmFuZ2UgLSAxIC0gaSkgKiBzaXplb2YgKHN0cnVjdCBtYXBfcmFuZ2UpKTsKLQkJbXJbaS0tXS5zdGFydCA9IG9sZF9zdGFydDsKLQkJbnJfcmFuZ2UtLTsKLQl9Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKLQkJcHJpbnRrKEtFUk5fREVCVUcgIiAlMDEwbHggLSAlMDEwbHggcGFnZSAlc1xuIiwKLQkJCQltcltpXS5zdGFydCwgbXJbaV0uZW5kLAotCQkJKG1yW2ldLnBhZ2Vfc2l6ZV9tYXNrICYgKDE8PFBHX0xFVkVMXzFHKSk/IjFHIjooCi0JCQkgKG1yW2ldLnBhZ2Vfc2l6ZV9tYXNrICYgKDE8PFBHX0xFVkVMXzJNKSk/IjJNIjoiNGsiKSk7Ci0KLQlpZiAoIWFmdGVyX2Jvb3RtZW0pCi0JCWZpbmRfZWFybHlfdGFibGVfc3BhY2UoZW5kLCB1c2VfcHNlLCB1c2VfZ2JwYWdlcyk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgbnJfcmFuZ2U7IGkrKykKLQkJbGFzdF9tYXBfYWRkciA9IGtlcm5lbF9waHlzaWNhbF9tYXBwaW5nX2luaXQoCi0JCQkJCW1yW2ldLnN0YXJ0LCBtcltpXS5lbmQsCi0JCQkJCW1yW2ldLnBhZ2Vfc2l6ZV9tYXNrKTsKLQotCWlmICghYWZ0ZXJfYm9vdG1lbSkKLQkJbW11X2NyNF9mZWF0dXJlcyA9IHJlYWRfY3I0KCk7Ci0JX19mbHVzaF90bGJfYWxsKCk7Ci0KLQlpZiAoIWFmdGVyX2Jvb3RtZW0gJiYgdGFibGVfZW5kID4gdGFibGVfc3RhcnQpCi0JCXJlc2VydmVfZWFybHkodGFibGVfc3RhcnQgPDwgUEFHRV9TSElGVCwKLQkJCQkgdGFibGVfZW5kIDw8IFBBR0VfU0hJRlQsICJQR1RBQkxFIik7Ci0KLQlwcmludGsoS0VSTl9JTkZPICJsYXN0X21hcF9hZGRyOiAlbHggZW5kOiAlbHhcbiIsCi0JCQkgbGFzdF9tYXBfYWRkciwgZW5kKTsKLQotCWlmICghYWZ0ZXJfYm9vdG1lbSkKLQkJZWFybHlfbWVtdGVzdChzdGFydCwgZW5kKTsKLQotCXJldHVybiBsYXN0X21hcF9hZGRyID4+IFBBR0VfU0hJRlQ7Ci19Ci0KICNpZm5kZWYgQ09ORklHX05VTUEKIHZvaWQgX19pbml0IGluaXRtZW1faW5pdCh1bnNpZ25lZCBsb25nIHN0YXJ0X3BmbiwgdW5zaWduZWQgbG9uZyBlbmRfcGZuKQogewpAQCAtOTEwLDI4ICs2ODEsNiBAQAogCiAjZW5kaWYgLyogQ09ORklHX01FTU9SWV9IT1RQTFVHICovCiAKLS8qCi0gKiBkZXZtZW1faXNfYWxsb3dlZCgpIGNoZWNrcyB0byBzZWUgaWYgL2Rldi9tZW0gYWNjZXNzIHRvIGEgY2VydGFpbiBhZGRyZXNzCi0gKiBpcyB2YWxpZC4gVGhlIGFyZ3VtZW50IGlzIGEgcGh5c2ljYWwgcGFnZSBudW1iZXIuCi0gKgotICoKLSAqIE9uIHg4NiwgYWNjZXNzIGhhcyB0byBiZSBnaXZlbiB0byB0aGUgZmlyc3QgbWVnYWJ5dGUgb2YgcmFtIGJlY2F1c2UgdGhhdCBhcmVhCi0gKiBjb250YWlucyBiaW9zIGNvZGUgYW5kIGRhdGEgcmVnaW9ucyB1c2VkIGJ5IFggYW5kIGRvc2VtdSBhbmQgc2ltaWxhciBhcHBzLgotICogQWNjZXNzIGhhcyB0byBiZSBnaXZlbiB0byBub24ta2VybmVsLXJhbSBhcmVhcyBhcyB3ZWxsLCB0aGVzZSBjb250YWluIHRoZSBQQ0kKLSAqIG1taW8gcmVzb3VyY2VzIGFzIHdlbGwgYXMgcG90ZW50aWFsIGJpb3MvYWNwaSBkYXRhIHJlZ2lvbnMuCi0gKi8KLWludCBkZXZtZW1faXNfYWxsb3dlZCh1bnNpZ25lZCBsb25nIHBhZ2VucikKLXsKLQlpZiAocGFnZW5yIDw9IDI1NikKLQkJcmV0dXJuIDE7Ci0JaWYgKGlvbWVtX2lzX2V4Y2x1c2l2ZShwYWdlbnIgPDwgUEFHRV9TSElGVCkpCi0JCXJldHVybiAwOwotCWlmICghcGFnZV9pc19yYW0ocGFnZW5yKSkKLQkJcmV0dXJuIDE7Ci0JcmV0dXJuIDA7Ci19Ci0KLQogc3RhdGljIHN0cnVjdCBrY29yZV9saXN0IGtjb3JlX21lbSwga2NvcmVfdm1hbGxvYywga2NvcmVfa2VybmVsLAogCQkJIGtjb3JlX21vZHVsZXMsIGtjb3JlX3ZzeXNjYWxsOwogCkBAIC0xMDE5LDEzICs3NjgsNiBAQAogCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19CTEtfREVWX0lOSVRSRAotdm9pZCBmcmVlX2luaXRyZF9tZW0odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpCi17Ci0JZnJlZV9pbml0X3BhZ2VzKCJpbml0cmQgbWVtb3J5Iiwgc3RhcnQsIGVuZCk7Ci19Ci0jZW5kaWYKLQogaW50IF9faW5pdCByZXNlcnZlX2Jvb3RtZW1fZ2VuZXJpYyh1bnNpZ25lZCBsb25nIHBoeXMsIHVuc2lnbmVkIGxvbmcgbGVuLAogCQkJCSAgIGludCBmbGFncykKIHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2lvbWFwXzMyLmMgYi9hcmNoL3g4Ni9tbS9pb21hcF8zMi5jCmluZGV4IDA0MTAyZDQuLjY5OWM5YjIgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL2lvbWFwXzMyLmMKKysrIGIvYXJjaC94ODYvbW0vaW9tYXBfMzIuYwpAQCAtMzEsMTYgKzMxLDI3IEBACiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpc19pb19tYXBwaW5nX3Bvc3NpYmxlKTsKIAotLyogTWFwICdwZm4nIHVzaW5nIGZpeGVkIG1hcCAndHlwZScgYW5kIHByb3RlY3Rpb25zICdwcm90JwotICovCi12b2lkICoKLWlvbWFwX2F0b21pY19wcm90X3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBrbV90eXBlIHR5cGUsIHBncHJvdF90IHByb3QpCit2b2lkICprbWFwX2F0b21pY19wcm90X3Bmbih1bnNpZ25lZCBsb25nIHBmbiwgZW51bSBrbV90eXBlIHR5cGUsIHBncHJvdF90IHByb3QpCiB7CiAJZW51bSBmaXhlZF9hZGRyZXNzZXMgaWR4OwogCXVuc2lnbmVkIGxvbmcgdmFkZHI7CiAKIAlwYWdlZmF1bHRfZGlzYWJsZSgpOwogCisJaWR4ID0gdHlwZSArIEtNX1RZUEVfTlIgKiBzbXBfcHJvY2Vzc29yX2lkKCk7CisJdmFkZHIgPSBfX2ZpeF90b192aXJ0KEZJWF9LTUFQX0JFR0lOICsgaWR4KTsKKwlzZXRfcHRlKGttYXBfcHRlIC0gaWR4LCBwZm5fcHRlKHBmbiwgcHJvdCkpOworCWFyY2hfZmx1c2hfbGF6eV9tbXVfbW9kZSgpOworCisJcmV0dXJuICh2b2lkICopdmFkZHI7Cit9CisKKy8qCisgKiBNYXAgJ3BmbicgdXNpbmcgZml4ZWQgbWFwICd0eXBlJyBhbmQgcHJvdGVjdGlvbnMgJ3Byb3QnCisgKi8KK3ZvaWQgKgoraW9tYXBfYXRvbWljX3Byb3RfcGZuKHVuc2lnbmVkIGxvbmcgcGZuLCBlbnVtIGttX3R5cGUgdHlwZSwgcGdwcm90X3QgcHJvdCkKK3sKIAkvKgogCSAqIEZvciBub24tUEFUIHN5c3RlbXMsIHByb21vdGUgUEFHRV9LRVJORUxfV0MgdG8gUEFHRV9LRVJORUxfVUNfTUlOVVMuCiAJICogUEFHRV9LRVJORUxfV0MgbWFwcyB0byBQV1QsIHdoaWNoIHRyYW5zbGF0ZXMgdG8gdW5jYWNoZWQgaWYgdGhlCkBAIC01MCwxMiArNjEsNyBAQAogCWlmICghcGF0X2VuYWJsZWQgJiYgcGdwcm90X3ZhbChwcm90KSA9PSBwZ3Byb3RfdmFsKFBBR0VfS0VSTkVMX1dDKSkKIAkJcHJvdCA9IFBBR0VfS0VSTkVMX1VDX01JTlVTOwogCi0JaWR4ID0gdHlwZSArIEtNX1RZUEVfTlIqc21wX3Byb2Nlc3Nvcl9pZCgpOwotCXZhZGRyID0gX19maXhfdG9fdmlydChGSVhfS01BUF9CRUdJTiArIGlkeCk7Ci0Jc2V0X3B0ZShrbWFwX3B0ZS1pZHgsIHBmbl9wdGUocGZuLCBwcm90KSk7Ci0JYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlKCk7Ci0KLQlyZXR1cm4gKHZvaWQqKSB2YWRkcjsKKwlyZXR1cm4ga21hcF9hdG9taWNfcHJvdF9wZm4ocGZuLCB0eXBlLCBwcm90KTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2F0b21pY19wcm90X3Bmbik7CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2lvcmVtYXAuYyBiL2FyY2gveDg2L21tL2lvcmVtYXAuYwppbmRleCA0MzNmN2JkLi4wZGZhMDlkIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9pb3JlbWFwLmMKKysrIGIvYXJjaC94ODYvbW0vaW9yZW1hcC5jCkBAIC0yMiwxMyArMjIsMTcgQEAKICNpbmNsdWRlIDxhc20vcGdhbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9wYXQuaD4KIAotI2lmZGVmIENPTkZJR19YODZfNjQKLQotc3RhdGljIGlubGluZSBpbnQgcGh5c19hZGRyX3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkcikKK3N0YXRpYyBpbmxpbmUgaW50IHBoeXNfYWRkcl92YWxpZChyZXNvdXJjZV9zaXplX3QgYWRkcikKIHsKLQlyZXR1cm4gYWRkciA8ICgxVUwgPDwgYm9vdF9jcHVfZGF0YS54ODZfcGh5c19iaXRzKTsKKyNpZmRlZiBDT05GSUdfUEhZU19BRERSX1RfNjRCSVQKKwlyZXR1cm4gIShhZGRyID4+IGJvb3RfY3B1X2RhdGEueDg2X3BoeXNfYml0cyk7CisjZWxzZQorCXJldHVybiAxOworI2VuZGlmCiB9CiAKKyNpZmRlZiBDT05GSUdfWDg2XzY0CisKIHVuc2lnbmVkIGxvbmcgX19waHlzX2FkZHIodW5zaWduZWQgbG9uZyB4KQogewogCWlmICh4ID49IF9fU1RBUlRfS0VSTkVMX21hcCkgewpAQCAtMzgsOCArNDIsNyBAQAogCX0gZWxzZSB7CiAJCVZJUlRVQUxfQlVHX09OKHggPCBQQUdFX09GRlNFVCk7CiAJCXggLT0gUEFHRV9PRkZTRVQ7Ci0JCVZJUlRVQUxfQlVHX09OKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fQk9PVElORyA/IHggPiBNQVhNRU0gOgotCQkJCQkhcGh5c19hZGRyX3ZhbGlkKHgpKTsKKwkJVklSVFVBTF9CVUdfT04oIXBoeXNfYWRkcl92YWxpZCh4KSk7CiAJfQogCXJldHVybiB4OwogfQpAQCAtNTYsMTAgKzU5LDggQEAKIAkJaWYgKHggPCBQQUdFX09GRlNFVCkKIAkJCXJldHVybiBmYWxzZTsKIAkJeCAtPSBQQUdFX09GRlNFVDsKLQkJaWYgKHN5c3RlbV9zdGF0ZSA9PSBTWVNURU1fQk9PVElORyA/Ci0JCQkJeCA+IE1BWE1FTSA6ICFwaHlzX2FkZHJfdmFsaWQoeCkpIHsKKwkJaWYgKCFwaHlzX2FkZHJfdmFsaWQoeCkpCiAJCQlyZXR1cm4gZmFsc2U7Ci0JCX0KIAl9CiAKIAlyZXR1cm4gcGZuX3ZhbGlkKHggPj4gUEFHRV9TSElGVCk7CkBAIC02OCwxOCArNjksMTIgQEAKIAogI2Vsc2UKIAotc3RhdGljIGlubGluZSBpbnQgcGh5c19hZGRyX3ZhbGlkKHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQlyZXR1cm4gMTsKLX0KLQogI2lmZGVmIENPTkZJR19ERUJVR19WSVJUVUFMCiB1bnNpZ25lZCBsb25nIF9fcGh5c19hZGRyKHVuc2lnbmVkIGxvbmcgeCkKIHsKLQkvKiBWTUFMTE9DXyogYXJlbid0IGNvbnN0YW50czsgbm90IGF2YWlsYWJsZSBhdCB0aGUgYm9vdCB0aW1lICovCisJLyogVk1BTExPQ18qIGFyZW4ndCBjb25zdGFudHMgICovCiAJVklSVFVBTF9CVUdfT04oeCA8IFBBR0VfT0ZGU0VUKTsKLQlWSVJUVUFMX0JVR19PTihzeXN0ZW1fc3RhdGUgIT0gU1lTVEVNX0JPT1RJTkcgJiYKLQkJaXNfdm1hbGxvY19hZGRyKCh2b2lkICopIHgpKTsKKwlWSVJUVUFMX0JVR19PTihfX3ZtYWxsb2Nfc3RhcnRfc2V0ICYmIGlzX3ZtYWxsb2NfYWRkcigodm9pZCAqKSB4KSk7CiAJcmV0dXJuIHggLSBQQUdFX09GRlNFVDsKIH0KIEVYUE9SVF9TWU1CT0woX19waHlzX2FkZHIpOwpAQCAtODksNyArODQsOSBAQAogewogCWlmICh4IDwgUEFHRV9PRkZTRVQpCiAJCXJldHVybiBmYWxzZTsKLQlpZiAoc3lzdGVtX3N0YXRlICE9IFNZU1RFTV9CT09USU5HICYmIGlzX3ZtYWxsb2NfYWRkcigodm9pZCAqKSB4KSkKKwlpZiAoX192bWFsbG9jX3N0YXJ0X3NldCAmJiBpc192bWFsbG9jX2FkZHIoKHZvaWQgKikgeCkpCisJCXJldHVybiBmYWxzZTsKKwlpZiAoeCA+PSBGSVhBRERSX1NUQVJUKQogCQlyZXR1cm4gZmFsc2U7CiAJcmV0dXJuIHBmbl92YWxpZCgoeCAtIFBBR0VfT0ZGU0VUKSA+PiBQQUdFX1NISUZUKTsKIH0KQEAgLTUwOCwxMyArNTA1LDE5IEBACiAJcmV0dXJuICZibV9wdGVbcHRlX2luZGV4KGFkZHIpXTsKIH0KIAorc3RhdGljIHVuc2lnbmVkIGxvbmcgc2xvdF92aXJ0W0ZJWF9CVE1BUFNfU0xPVFNdIF9faW5pdGRhdGE7CisKIHZvaWQgX19pbml0IGVhcmx5X2lvcmVtYXBfaW5pdCh2b2lkKQogewogCXBtZF90ICpwbWQ7CisJaW50IGk7CiAKIAlpZiAoZWFybHlfaW9yZW1hcF9kZWJ1ZykKIAkJcHJpbnRrKEtFUk5fSU5GTyAiZWFybHlfaW9yZW1hcF9pbml0KClcbiIpOwogCisJZm9yIChpID0gMDsgaSA8IEZJWF9CVE1BUFNfU0xPVFM7IGkrKykKKwkJc2xvdF92aXJ0W2ldID0gX19maXhfdG9fdmlydChGSVhfQlRNQVBfQkVHSU4gLSBOUl9GSVhfQlRNQVBTKmkpOworCiAJcG1kID0gZWFybHlfaW9yZW1hcF9wbWQoZml4X3RvX3ZpcnQoRklYX0JUTUFQX0JFR0lOKSk7CiAJbWVtc2V0KGJtX3B0ZSwgMCwgc2l6ZW9mKGJtX3B0ZSkpOwogCXBtZF9wb3B1bGF0ZV9rZXJuZWwoJmluaXRfbW0sIHBtZCwgYm1fcHRlKTsKQEAgLTU4MSw2ICs1ODQsNyBAQAogCiBzdGF0aWMgdm9pZCBfX2lvbWVtICpwcmV2X21hcFtGSVhfQlRNQVBTX1NMT1RTXSBfX2luaXRkYXRhOwogc3RhdGljIHVuc2lnbmVkIGxvbmcgcHJldl9zaXplW0ZJWF9CVE1BUFNfU0xPVFNdIF9faW5pdGRhdGE7CisKIHN0YXRpYyBpbnQgX19pbml0IGNoZWNrX2Vhcmx5X2lvcmVtYXBfbGVhayh2b2lkKQogewogCWludCBjb3VudCA9IDA7CkBAIC02MDIsNyArNjA2LDggQEAKIH0KIGxhdGVfaW5pdGNhbGwoY2hlY2tfZWFybHlfaW9yZW1hcF9sZWFrKTsKIAotc3RhdGljIHZvaWQgX19pbml0IF9faW9tZW0gKl9fZWFybHlfaW9yZW1hcCh1bnNpZ25lZCBsb25nIHBoeXNfYWRkciwgdW5zaWduZWQgbG9uZyBzaXplLCBwZ3Byb3RfdCBwcm90KQorc3RhdGljIHZvaWQgX19pbml0IF9faW9tZW0gKgorX19lYXJseV9pb3JlbWFwKHVuc2lnbmVkIGxvbmcgcGh5c19hZGRyLCB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpCiB7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQsIGxhc3RfYWRkcjsKIAl1bnNpZ25lZCBpbnQgbnJwYWdlczsKQEAgLTY2OCw5ICs2NzMsOSBAQAogCQktLW5ycGFnZXM7CiAJfQogCWlmIChlYXJseV9pb3JlbWFwX2RlYnVnKQotCQlwcmludGsoS0VSTl9DT05UICIlMDhseCArICUwOGx4XG4iLCBvZmZzZXQsIGZpeF90b192aXJ0KGlkeDApKTsKKwkJcHJpbnRrKEtFUk5fQ09OVCAiJTA4bHggKyAlMDhseFxuIiwgb2Zmc2V0LCBzbG90X3ZpcnRbc2xvdF0pOwogCi0JcHJldl9tYXBbc2xvdF0gPSAodm9pZCBfX2lvbWVtICopKG9mZnNldCArIGZpeF90b192aXJ0KGlkeDApKTsKKwlwcmV2X21hcFtzbG90XSA9ICh2b2lkIF9faW9tZW0gKikob2Zmc2V0ICsgc2xvdF92aXJ0W3Nsb3RdKTsKIAlyZXR1cm4gcHJldl9tYXBbc2xvdF07CiB9CiAKQEAgLTczOCw4ICs3NDMsMyBAQAogCX0KIAlwcmV2X21hcFtzbG90XSA9IE5VTEw7CiB9Ci0KLXZvaWQgX190aGlzX2ZpeG1hcF9kb2VzX25vdF9leGlzdCh2b2lkKQotewotCVdBUk5fT04oMSk7Ci19CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9rbW1pby5jIGIvYXJjaC94ODYvbW0va21taW8uYwppbmRleCA2YTUxOGRkLi40ZjExNWUwIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9rbW1pby5jCisrKyBiL2FyY2gveDg2L21tL2ttbWlvLmMKQEAgLTMxMCw3ICszMTAsNyBAQAogCXN0cnVjdCBrbW1pb19jb250ZXh0ICpjdHggPSAmZ2V0X2NwdV92YXIoa21taW9fY3R4KTsKIAogCWlmICghY3R4LT5hY3RpdmUpIHsKLQkJcHJfd2FybmluZygia21taW86IHNwdXJpb3VzIGRlYnVnIHRyYXAgb24gQ1BVICVkLlxuIiwKKwkJcHJfZGVidWcoImttbWlvOiBzcHVyaW91cyBkZWJ1ZyB0cmFwIG9uIENQVSAlZC5cbiIsCiAJCQkJCQkJc21wX3Byb2Nlc3Nvcl9pZCgpKTsKIAkJZ290byBvdXQ7CiAJfQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vbWVtdGVzdC5jIGIvYXJjaC94ODYvbW0vbWVtdGVzdC5jCmluZGV4IDBiY2Q3ODguLjYwNWM4YmUgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL21lbXRlc3QuYworKysgYi9hcmNoL3g4Ni9tbS9tZW10ZXN0LmMKQEAgLTEwMCw2ICsxMDAsOSBAQAogewogCWlmIChhcmcpCiAJCW1lbXRlc3RfcGF0dGVybiA9IHNpbXBsZV9zdHJ0b3VsKGFyZywgTlVMTCwgMCk7CisJZWxzZQorCQltZW10ZXN0X3BhdHRlcm4gPSBBUlJBWV9TSVpFKHBhdHRlcm5zKTsKKwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9udW1hXzMyLmMgYi9hcmNoL3g4Ni9tbS9udW1hXzMyLmMKaW5kZXggNDUxZmU5NS4uM2RhZWZhMCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vbnVtYV8zMi5jCisrKyBiL2FyY2gveDg2L21tL251bWFfMzIuYwpAQCAtNDE2LDEwICs0MTYsMTEgQEAKIAlmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpCiAJCXByb3BhZ2F0ZV9lODIwX21hcF9ub2RlKG5pZCk7CiAKLQlmb3JfZWFjaF9vbmxpbmVfbm9kZShuaWQpCisJZm9yX2VhY2hfb25saW5lX25vZGUobmlkKSB7CiAJCW1lbXNldChOT0RFX0RBVEEobmlkKSwgMCwgc2l6ZW9mKHN0cnVjdCBwZ2xpc3RfZGF0YSkpOworCQlOT0RFX0RBVEEobmlkKS0+YmRhdGEgPSAmYm9vdG1lbV9ub2RlX2RhdGFbbmlkXTsKKwl9CiAKLQlOT0RFX0RBVEEoMCktPmJkYXRhID0gJmJvb3RtZW1fbm9kZV9kYXRhWzBdOwogCXNldHVwX2Jvb3RtZW1fYWxsb2NhdG9yKCk7CiB9CiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMgYi9hcmNoL3g4Ni9tbS9wYWdlYXR0ci5jCmluZGV4IDljNDI5NDkuLmQ3MWUxYjYgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3BhZ2VhdHRyLmMKKysrIGIvYXJjaC94ODYvbW0vcGFnZWF0dHIuYwpAQCAtMTYsNiArMTYsNyBAQAogI2luY2x1ZGUgPGFzbS9wcm9jZXNzb3IuaD4KICNpbmNsdWRlIDxhc20vdGxiZmx1c2guaD4KICNpbmNsdWRlIDxhc20vc2VjdGlvbnMuaD4KKyNpbmNsdWRlIDxhc20vc2V0dXAuaD4KICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGFzbS9wZ2FsbG9jLmg+CiAjaW5jbHVkZSA8YXNtL3Byb3RvLmg+CkBAIC0zMyw2ICszNCw3IEBACiAJdW5zaWduZWQgbG9uZwlwZm47CiAJdW5zaWduZWQJZm9yY2Vfc3BsaXQgOiAxOwogCWludAkJY3VycGFnZTsKKwlzdHJ1Y3QgcGFnZQkqKnBhZ2VzOwogfTsKIAogLyoKQEAgLTQ1LDYgKzQ3LDcgQEAKIAogI2RlZmluZSBDUEFfRkxVU0hUTEIgMQogI2RlZmluZSBDUEFfQVJSQVkgMgorI2RlZmluZSBDUEFfUEFHRVNfQVJSQVkgNAogCiAjaWZkZWYgQ09ORklHX1BST0NfRlMKIHN0YXRpYyB1bnNpZ25lZCBsb25nIGRpcmVjdF9wYWdlc19jb3VudFtQR19MRVZFTF9OVU1dOwpAQCAtOTUsNyArOTgsNyBAQAogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgaGlnaG1hcF9lbmRfcGZuKHZvaWQpCiB7Ci0JcmV0dXJuIF9fcGEocm91bmR1cCgodW5zaWduZWQgbG9uZylfZW5kLCBQTURfU0laRSkpID4+IFBBR0VfU0hJRlQ7CisJcmV0dXJuIF9fcGEocm91bmR1cChfYnJrX2VuZCwgUE1EX1NJWkUpKSA+PiBQQUdFX1NISUZUOwogfQogCiAjZW5kaWYKQEAgLTIwMSwxMCArMjA0LDEwIEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBjcGFfZmx1c2hfYXJyYXkodW5zaWduZWQgbG9uZyAqc3RhcnQsIGludCBudW1wYWdlcywgaW50IGNhY2hlKQorc3RhdGljIHZvaWQgY3BhX2ZsdXNoX2FycmF5KHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCBpbnQgbnVtcGFnZXMsIGludCBjYWNoZSwKKwkJCSAgICBpbnQgaW5fZmxhZ3MsIHN0cnVjdCBwYWdlICoqcGFnZXMpCiB7CiAJdW5zaWduZWQgaW50IGksIGxldmVsOwotCXVuc2lnbmVkIGxvbmcgKmFkZHI7CiAKIAlCVUdfT04oaXJxc19kaXNhYmxlZCgpKTsKIApAQCAtMjI1LDE0ICsyMjgsMjIgQEAKIAkgKiB3aWxsIGNhdXNlIGFsbCBvdGhlciBDUFVzIHRvIGZsdXNoIHRoZSBzYW1lCiAJICogY2FjaGVsaW5lczoKIAkgKi8KLQlmb3IgKGkgPSAwLCBhZGRyID0gc3RhcnQ7IGkgPCBudW1wYWdlczsgaSsrLCBhZGRyKyspIHsKLQkJcHRlX3QgKnB0ZSA9IGxvb2t1cF9hZGRyZXNzKCphZGRyLCAmbGV2ZWwpOworCWZvciAoaSA9IDA7IGkgPCBudW1wYWdlczsgaSsrKSB7CisJCXVuc2lnbmVkIGxvbmcgYWRkcjsKKwkJcHRlX3QgKnB0ZTsKKworCQlpZiAoaW5fZmxhZ3MgJiBDUEFfUEFHRVNfQVJSQVkpCisJCQlhZGRyID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2VzW2ldKTsKKwkJZWxzZQorCQkJYWRkciA9IHN0YXJ0W2ldOworCisJCXB0ZSA9IGxvb2t1cF9hZGRyZXNzKGFkZHIsICZsZXZlbCk7CiAKIAkJLyoKIAkJICogT25seSBmbHVzaCBwcmVzZW50IGFkZHJlc3NlczoKIAkJICovCiAJCWlmIChwdGUgJiYgKHB0ZV92YWwoKnB0ZSkgJiBfUEFHRV9QUkVTRU5UKSkKLQkJCWNsZmx1c2hfY2FjaGVfcmFuZ2UoKHZvaWQgKikgKmFkZHIsIFBBR0VfU0laRSk7CisJCQljbGZsdXNoX2NhY2hlX3JhbmdlKCh2b2lkICopYWRkciwgUEFHRV9TSVpFKTsKIAl9CiB9CiAKQEAgLTU4NCw3ICs1OTUsOSBAQAogCXVuc2lnbmVkIGludCBsZXZlbDsKIAlwdGVfdCAqa3B0ZSwgb2xkX3B0ZTsKIAotCWlmIChjcGEtPmZsYWdzICYgQ1BBX0FSUkFZKQorCWlmIChjcGEtPmZsYWdzICYgQ1BBX1BBR0VTX0FSUkFZKQorCQlhZGRyZXNzID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKGNwYS0+cGFnZXNbY3BhLT5jdXJwYWdlXSk7CisJZWxzZSBpZiAoY3BhLT5mbGFncyAmIENQQV9BUlJBWSkKIAkJYWRkcmVzcyA9IGNwYS0+dmFkZHJbY3BhLT5jdXJwYWdlXTsKIAllbHNlCiAJCWFkZHJlc3MgPSAqY3BhLT52YWRkcjsKQEAgLTY4Nyw3ICs3MDAsOSBAQAogCSAqIE5vIG5lZWQgdG8gcmVkbywgd2hlbiB0aGUgcHJpbWFyeSBjYWxsIHRvdWNoZWQgdGhlIGRpcmVjdAogCSAqIG1hcHBpbmcgYWxyZWFkeToKIAkgKi8KLQlpZiAoY3BhLT5mbGFncyAmIENQQV9BUlJBWSkKKwlpZiAoY3BhLT5mbGFncyAmIENQQV9QQUdFU19BUlJBWSkKKwkJdmFkZHIgPSAodW5zaWduZWQgbG9uZylwYWdlX2FkZHJlc3MoY3BhLT5wYWdlc1tjcGEtPmN1cnBhZ2VdKTsKKwllbHNlIGlmIChjcGEtPmZsYWdzICYgQ1BBX0FSUkFZKQogCQl2YWRkciA9IGNwYS0+dmFkZHJbY3BhLT5jdXJwYWdlXTsKIAllbHNlCiAJCXZhZGRyID0gKmNwYS0+dmFkZHI7CkBAIC02OTgsNyArNzEzLDcgQEAKIAkJYWxpYXNfY3BhID0gKmNwYTsKIAkJdGVtcF9jcGFfdmFkZHIgPSAodW5zaWduZWQgbG9uZykgX192YShjcGEtPnBmbiA8PCBQQUdFX1NISUZUKTsKIAkJYWxpYXNfY3BhLnZhZGRyID0gJnRlbXBfY3BhX3ZhZGRyOwotCQlhbGlhc19jcGEuZmxhZ3MgJj0gfkNQQV9BUlJBWTsKKwkJYWxpYXNfY3BhLmZsYWdzICY9IH4oQ1BBX1BBR0VTX0FSUkFZIHwgQ1BBX0FSUkFZKTsKIAogCiAJCXJldCA9IF9fY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKCZhbGlhc19jcGEsIDApOwpAQCAtNzExLDcgKzcyNiw3IEBACiAJICogTm8gbmVlZCB0byByZWRvLCB3aGVuIHRoZSBwcmltYXJ5IGNhbGwgdG91Y2hlZCB0aGUgaGlnaAogCSAqIG1hcHBpbmcgYWxyZWFkeToKIAkgKi8KLQlpZiAod2l0aGluKHZhZGRyLCAodW5zaWduZWQgbG9uZykgX3RleHQsICh1bnNpZ25lZCBsb25nKSBfZW5kKSkKKwlpZiAod2l0aGluKHZhZGRyLCAodW5zaWduZWQgbG9uZykgX3RleHQsIF9icmtfZW5kKSkKIAkJcmV0dXJuIDA7CiAKIAkvKgpAQCAtNzI0LDcgKzczOSw3IEBACiAJYWxpYXNfY3BhID0gKmNwYTsKIAl0ZW1wX2NwYV92YWRkciA9IChjcGEtPnBmbiA8PCBQQUdFX1NISUZUKSArIF9fU1RBUlRfS0VSTkVMX21hcCAtIHBoeXNfYmFzZTsKIAlhbGlhc19jcGEudmFkZHIgPSAmdGVtcF9jcGFfdmFkZHI7Ci0JYWxpYXNfY3BhLmZsYWdzICY9IH5DUEFfQVJSQVk7CisJYWxpYXNfY3BhLmZsYWdzICY9IH4oQ1BBX1BBR0VTX0FSUkFZIHwgQ1BBX0FSUkFZKTsKIAogCS8qCiAJICogVGhlIGhpZ2ggbWFwcGluZyByYW5nZSBpcyBpbXByZWNpc2UsIHNvIGlnbm9yZSB0aGUgcmV0dXJuIHZhbHVlLgpAQCAtNzQ1LDcgKzc2MCw3IEBACiAJCSAqLwogCQljcGEtPm51bXBhZ2VzID0gbnVtcGFnZXM7CiAJCS8qIGZvciBhcnJheSBjaGFuZ2VzLCB3ZSBjYW4ndCB1c2UgbGFyZ2UgcGFnZSAqLwotCQlpZiAoY3BhLT5mbGFncyAmIENQQV9BUlJBWSkKKwkJaWYgKGNwYS0+ZmxhZ3MgJiAoQ1BBX0FSUkFZIHwgQ1BBX1BBR0VTX0FSUkFZKSkKIAkJCWNwYS0+bnVtcGFnZXMgPSAxOwogCiAJCWlmICghZGVidWdfcGFnZWFsbG9jKQpAQCAtNzY5LDcgKzc4NCw3IEBACiAJCSAqLwogCQlCVUdfT04oY3BhLT5udW1wYWdlcyA+IG51bXBhZ2VzKTsKIAkJbnVtcGFnZXMgLT0gY3BhLT5udW1wYWdlczsKLQkJaWYgKGNwYS0+ZmxhZ3MgJiBDUEFfQVJSQVkpCisJCWlmIChjcGEtPmZsYWdzICYgKENQQV9QQUdFU19BUlJBWSB8IENQQV9BUlJBWSkpCiAJCQljcGEtPmN1cnBhZ2UrKzsKIAkJZWxzZQogCQkJKmNwYS0+dmFkZHIgKz0gY3BhLT5udW1wYWdlcyAqIFBBR0VfU0laRTsKQEAgLTc4Niw3ICs4MDEsOCBAQAogCiBzdGF0aWMgaW50IGNoYW5nZV9wYWdlX2F0dHJfc2V0X2Nscih1bnNpZ25lZCBsb25nICphZGRyLCBpbnQgbnVtcGFnZXMsCiAJCQkJICAgIHBncHJvdF90IG1hc2tfc2V0LCBwZ3Byb3RfdCBtYXNrX2NsciwKLQkJCQkgICAgaW50IGZvcmNlX3NwbGl0LCBpbnQgYXJyYXkpCisJCQkJICAgIGludCBmb3JjZV9zcGxpdCwgaW50IGluX2ZsYWcsCisJCQkJICAgIHN0cnVjdCBwYWdlICoqcGFnZXMpCiB7CiAJc3RydWN0IGNwYV9kYXRhIGNwYTsKIAlpbnQgcmV0LCBjYWNoZSwgY2hlY2thbGlhczsKQEAgLTgwMSwxNSArODE3LDcgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBFbnN1cmUgd2UgYXJlIFBBR0VfU0laRSBhbGlnbmVkICovCi0JaWYgKCFhcnJheSkgewotCQlpZiAoKmFkZHIgJiB+UEFHRV9NQVNLKSB7Ci0JCQkqYWRkciAmPSBQQUdFX01BU0s7Ci0JCQkvKgotCQkJICogUGVvcGxlIHNob3VsZCBub3QgYmUgcGFzc2luZyBpbiB1bmFsaWduZWQgYWRkcmVzc2VzOgotCQkJICovCi0JCQlXQVJOX09OX09OQ0UoMSk7Ci0JCX0KLQl9IGVsc2UgeworCWlmIChpbl9mbGFnICYgQ1BBX0FSUkFZKSB7CiAJCWludCBpOwogCQlmb3IgKGkgPSAwOyBpIDwgbnVtcGFnZXM7IGkrKykgewogCQkJaWYgKGFkZHJbaV0gJiB+UEFHRV9NQVNLKSB7CkBAIC04MTcsNiArODI1LDE4IEBACiAJCQkJV0FSTl9PTl9PTkNFKDEpOwogCQkJfQogCQl9CisJfSBlbHNlIGlmICghKGluX2ZsYWcgJiBDUEFfUEFHRVNfQVJSQVkpKSB7CisJCS8qCisJCSAqIGluX2ZsYWcgb2YgQ1BBX1BBR0VTX0FSUkFZIGltcGxpZXMgaXQgaXMgYWxpZ25lZC4KKwkJICogTm8gbmVlZCB0byBjZWhjayBpbiB0aGF0IGNhc2UKKwkJICovCisJCWlmICgqYWRkciAmIH5QQUdFX01BU0spIHsKKwkJCSphZGRyICY9IFBBR0VfTUFTSzsKKwkJCS8qCisJCQkgKiBQZW9wbGUgc2hvdWxkIG5vdCBiZSBwYXNzaW5nIGluIHVuYWxpZ25lZCBhZGRyZXNzZXM6CisJCQkgKi8KKwkJCVdBUk5fT05fT05DRSgxKTsKKwkJfQogCX0KIAogCS8qIE11c3QgYXZvaWQgYWxpYXNpbmcgbWFwcGluZ3MgaW4gdGhlIGhpZ2htZW0gY29kZSAqLwpAQCAtODMyLDYgKzg1Miw3IEBACiAJYXJjaF9mbHVzaF9sYXp5X21tdV9tb2RlKCk7CiAKIAljcGEudmFkZHIgPSBhZGRyOworCWNwYS5wYWdlcyA9IHBhZ2VzOwogCWNwYS5udW1wYWdlcyA9IG51bXBhZ2VzOwogCWNwYS5tYXNrX3NldCA9IG1hc2tfc2V0OwogCWNwYS5tYXNrX2NsciA9IG1hc2tfY2xyOwpAQCAtODM5LDggKzg2MCw4IEBACiAJY3BhLmN1cnBhZ2UgPSAwOwogCWNwYS5mb3JjZV9zcGxpdCA9IGZvcmNlX3NwbGl0OwogCi0JaWYgKGFycmF5KQotCQljcGEuZmxhZ3MgfD0gQ1BBX0FSUkFZOworCWlmIChpbl9mbGFnICYgKENQQV9BUlJBWSB8IENQQV9QQUdFU19BUlJBWSkpCisJCWNwYS5mbGFncyB8PSBpbl9mbGFnOwogCiAJLyogTm8gYWxpYXMgY2hlY2tpbmcgZm9yIF9OWCBiaXQgbW9kaWZpY2F0aW9ucyAqLwogCWNoZWNrYWxpYXMgPSAocGdwcm90X3ZhbChtYXNrX3NldCkgfCBwZ3Byb3RfdmFsKG1hc2tfY2xyKSkgIT0gX1BBR0VfTlg7CkBAIC04NjYsOSArODg3LDEwIEBACiAJICogd2JpbmR2KToKIAkgKi8KIAlpZiAoIXJldCAmJiBjcHVfaGFzX2NsZmx1c2gpIHsKLQkJaWYgKGNwYS5mbGFncyAmIENQQV9BUlJBWSkKLQkJCWNwYV9mbHVzaF9hcnJheShhZGRyLCBudW1wYWdlcywgY2FjaGUpOwotCQllbHNlCisJCWlmIChjcGEuZmxhZ3MgJiAoQ1BBX1BBR0VTX0FSUkFZIHwgQ1BBX0FSUkFZKSkgeworCQkJY3BhX2ZsdXNoX2FycmF5KGFkZHIsIG51bXBhZ2VzLCBjYWNoZSwKKwkJCQkJY3BhLmZsYWdzLCBwYWdlcyk7CisJCX0gZWxzZQogCQkJY3BhX2ZsdXNoX3JhbmdlKCphZGRyLCBudW1wYWdlcywgY2FjaGUpOwogCX0gZWxzZQogCQljcGFfZmx1c2hfYWxsKGNhY2hlKTsKQEAgLTg4OCwxNCArOTEwLDI4IEBACiAJCQkJICAgICAgIHBncHJvdF90IG1hc2ssIGludCBhcnJheSkKIHsKIAlyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKGFkZHIsIG51bXBhZ2VzLCBtYXNrLCBfX3BncHJvdCgwKSwgMCwKLQkJYXJyYXkpOworCQkoYXJyYXkgPyBDUEFfQVJSQVkgOiAwKSwgTlVMTCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgaW50IGNoYW5nZV9wYWdlX2F0dHJfY2xlYXIodW5zaWduZWQgbG9uZyAqYWRkciwgaW50IG51bXBhZ2VzLAogCQkJCQkgcGdwcm90X3QgbWFzaywgaW50IGFycmF5KQogewogCXJldHVybiBjaGFuZ2VfcGFnZV9hdHRyX3NldF9jbHIoYWRkciwgbnVtcGFnZXMsIF9fcGdwcm90KDApLCBtYXNrLCAwLAotCQlhcnJheSk7CisJCShhcnJheSA/IENQQV9BUlJBWSA6IDApLCBOVUxMKTsKK30KKworc3RhdGljIGlubGluZSBpbnQgY3BhX3NldF9wYWdlc19hcnJheShzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgbnVtcGFnZXMsCisJCQkJICAgICAgIHBncHJvdF90IG1hc2spCit7CisJcmV0dXJuIGNoYW5nZV9wYWdlX2F0dHJfc2V0X2NscihOVUxMLCBudW1wYWdlcywgbWFzaywgX19wZ3Byb3QoMCksIDAsCisJCUNQQV9QQUdFU19BUlJBWSwgcGFnZXMpOworfQorCitzdGF0aWMgaW5saW5lIGludCBjcGFfY2xlYXJfcGFnZXNfYXJyYXkoc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IG51bXBhZ2VzLAorCQkJCQkgcGdwcm90X3QgbWFzaykKK3sKKwlyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKE5VTEwsIG51bXBhZ2VzLCBfX3BncHJvdCgwKSwgbWFzaywgMCwKKwkJQ1BBX1BBR0VTX0FSUkFZLCBwYWdlcyk7CiB9CiAKIGludCBfc2V0X21lbW9yeV91Yyh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcykKQEAgLTEwNDMsNyArMTA3OSw3IEBACiBpbnQgc2V0X21lbW9yeV80ayh1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcykKIHsKIAlyZXR1cm4gY2hhbmdlX3BhZ2VfYXR0cl9zZXRfY2xyKCZhZGRyLCBudW1wYWdlcywgX19wZ3Byb3QoMCksCi0JCQkJCV9fcGdwcm90KDApLCAxLCAwKTsKKwkJCQkJX19wZ3Byb3QoMCksIDEsIDAsIE5VTEwpOwogfQogCiBpbnQgc2V0X3BhZ2VzX3VjKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpCkBAIC0xMDU0LDYgKzEwOTAsMzUgQEAKIH0KIEVYUE9SVF9TWU1CT0woc2V0X3BhZ2VzX3VjKTsKIAoraW50IHNldF9wYWdlc19hcnJheV91YyhzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCBpbnQgYWRkcmluYXJyYXkpCit7CisJdW5zaWduZWQgbG9uZyBzdGFydDsKKwl1bnNpZ25lZCBsb25nIGVuZDsKKwlpbnQgaTsKKwlpbnQgZnJlZV9pZHg7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRkcmluYXJyYXk7IGkrKykgeworCQlzdGFydCA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlc1tpXSk7CisJCWVuZCA9IHN0YXJ0ICsgUEFHRV9TSVpFOworCQlpZiAocmVzZXJ2ZV9tZW10eXBlKHN0YXJ0LCBlbmQsIF9QQUdFX0NBQ0hFX1VDX01JTlVTLCBOVUxMKSkKKwkJCWdvdG8gZXJyX291dDsKKwl9CisKKwlpZiAoY3BhX3NldF9wYWdlc19hcnJheShwYWdlcywgYWRkcmluYXJyYXksCisJCQlfX3BncHJvdChfUEFHRV9DQUNIRV9VQ19NSU5VUykpID09IDApIHsKKwkJcmV0dXJuIDA7IC8qIFN1Y2Nlc3MgKi8KKwl9CitlcnJfb3V0OgorCWZyZWVfaWR4ID0gaTsKKwlmb3IgKGkgPSAwOyBpIDwgZnJlZV9pZHg7IGkrKykgeworCQlzdGFydCA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlc1tpXSk7CisJCWVuZCA9IHN0YXJ0ICsgUEFHRV9TSVpFOworCQlmcmVlX21lbXR5cGUoc3RhcnQsIGVuZCk7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorRVhQT1JUX1NZTUJPTChzZXRfcGFnZXNfYXJyYXlfdWMpOworCiBpbnQgc2V0X3BhZ2VzX3diKHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpOwpAQCAtMTA2Miw2ICsxMTI3LDI2IEBACiB9CiBFWFBPUlRfU1lNQk9MKHNldF9wYWdlc193Yik7CiAKK2ludCBzZXRfcGFnZXNfYXJyYXlfd2Ioc3RydWN0IHBhZ2UgKipwYWdlcywgaW50IGFkZHJpbmFycmF5KQoreworCWludCByZXR2YWw7CisJdW5zaWduZWQgbG9uZyBzdGFydDsKKwl1bnNpZ25lZCBsb25nIGVuZDsKKwlpbnQgaTsKKworCXJldHZhbCA9IGNwYV9jbGVhcl9wYWdlc19hcnJheShwYWdlcywgYWRkcmluYXJyYXksCisJCQlfX3BncHJvdChfUEFHRV9DQUNIRV9NQVNLKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgYWRkcmluYXJyYXk7IGkrKykgeworCQlzdGFydCA9ICh1bnNpZ25lZCBsb25nKXBhZ2VfYWRkcmVzcyhwYWdlc1tpXSk7CisJCWVuZCA9IHN0YXJ0ICsgUEFHRV9TSVpFOworCQlmcmVlX21lbXR5cGUoc3RhcnQsIGVuZCk7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KK0VYUE9SVF9TWU1CT0woc2V0X3BhZ2VzX2FycmF5X3diKTsKKwogaW50IHNldF9wYWdlc194KHN0cnVjdCBwYWdlICpwYWdlLCBpbnQgbnVtcGFnZXMpCiB7CiAJdW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpcGFnZV9hZGRyZXNzKHBhZ2UpOwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0LmMgYi9hcmNoL3g4Ni9tbS9wYXQuYwppbmRleCAyZWQzNzE1Li42NDAzMzllIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYXQuYworKysgYi9hcmNoL3g4Ni9tbS9wYXQuYwpAQCAtNjc3LDEwICs2NzcsMTEgQEAKIAlpc19yYW0gPSBwYXRfcGFnZXJhbmdlX2lzX3JhbShwYWRkciwgcGFkZHIgKyBzaXplKTsKIAogCS8qCi0JICogcmVzZXJ2ZV9wZm5fcmFuZ2UoKSBkb2Vzbid0IHN1cHBvcnQgUkFNIHBhZ2VzLgorCSAqIHJlc2VydmVfcGZuX3JhbmdlKCkgZG9lc24ndCBzdXBwb3J0IFJBTSBwYWdlcy4gTWFpbnRhaW4gdGhlIGN1cnJlbnQKKwkgKiBiZWhhdmlvciB3aXRoIFJBTSBwYWdlcyBieSByZXR1cm5pbmcgc3VjY2Vzcy4KIAkgKi8KIAlpZiAoaXNfcmFtICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCQlyZXR1cm4gMDsKIAogCXJldCA9IHJlc2VydmVfbWVtdHlwZShwYWRkciwgcGFkZHIgKyBzaXplLCB3YW50X2ZsYWdzLCAmZmxhZ3MpOwogCWlmIChyZXQpCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wZ3RhYmxlXzMyLmMgYi9hcmNoL3g4Ni9tbS9wZ3RhYmxlXzMyLmMKaW5kZXggZjJlNDc3Yy4uNDZjODgzNCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGd0YWJsZV8zMi5jCisrKyBiL2FyY2gveDg2L21tL3BndGFibGVfMzIuYwpAQCAtNTAsNyArNTAsNyBAQAogCX0KIAlwdGUgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWQsIHZhZGRyKTsKIAlpZiAocHRlX3ZhbChwdGV2YWwpKQotCQlzZXRfcHRlX3ByZXNlbnQoJmluaXRfbW0sIHZhZGRyLCBwdGUsIHB0ZXZhbCk7CisJCXNldF9wdGVfYXQoJmluaXRfbW0sIHZhZGRyLCBwdGUsIHB0ZXZhbCk7CiAJZWxzZQogCQlwdGVfY2xlYXIoJmluaXRfbW0sIHZhZGRyLCBwdGUpOwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS90bGIuYyBiL2FyY2gveDg2L21tL3RsYi5jCmluZGV4IGE2NTRkNTkuLjgyMWU5NzAgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L21tL3RsYi5jCisrKyBiL2FyY2gveDg2L21tL3RsYi5jCkBAIC0xODcsMTEgKzE4Nyw2IEBACiAJCSAgICAgICBjcHVtYXNrLCBjcHVtYXNrX29mKHNtcF9wcm9jZXNzb3JfaWQoKSkpOwogCiAJLyoKLQkgKiBNYWtlIHRoZSBhYm92ZSBtZW1vcnkgb3BlcmF0aW9ucyBnbG9iYWxseSB2aXNpYmxlIGJlZm9yZQotCSAqIHNlbmRpbmcgdGhlIElQSS4KLQkgKi8KLQlzbXBfbWIoKTsKLQkvKgogCSAqIFdlIGhhdmUgdG8gc2VuZCB0aGUgSVBJIG9ubHkgdG8KIAkgKiBDUFVzIGFmZmVjdGVkLgogCSAqLwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvcGNpL2NvbW1vbi5jIGIvYXJjaC94ODYvcGNpL2NvbW1vbi5jCmluZGV4IDgyZDIyZmMuLjhjMzYyYjkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9jb21tb24uYworKysgYi9hcmNoL3g4Ni9wY2kvY29tbW9uLmMKQEAgLTkwLDcgKzkwLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIGNhbl9za2lwX3BjaXByb2JlX2RtaV90YWJsZVtdIF9fZGV2aW5pdGRhdGEgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgY2FuX3NraXBfcGNpcHJvYmVfZG1pX3RhYmxlW10gX19kZXZpbml0Y29uc3QgPSB7CiAvKgogICogU3lzdGVtcyB3aGVyZSBQQ0kgSU8gcmVzb3VyY2UgSVNBIGFsaWdubWVudCBjYW4gYmUgc2tpcHBlZAogICogd2hlbiB0aGUgSVNBIGVuYWJsZSBiaXQgaW4gdGhlIGJyaWRnZSBjb250cm9sIGlzIG5vdCBzZXQKQEAgLTE4Myw3ICsxODMsNyBAQAogfQogI2VuZGlmCiAKLXN0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2RldmluaXRkYXRhIHBjaXByb2JlX2RtaV90YWJsZVtdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9fZGV2aW5pdGNvbnN0IHBjaXByb2JlX2RtaV90YWJsZVtdID0gewogI2lmZGVmIF9faTM4Nl9fCiAvKgogICogTGFwdG9wcyB3aGljaCBuZWVkIHBjaT1hc3NpZ24tYnVzc2VzIHRvIHNlZSBDYXJkYnVzIGNhcmRzCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9wY2kvZml4dXAuYyBiL2FyY2gveDg2L3BjaS9maXh1cC5jCmluZGV4IDdkMzg4ZDUuLjljNDk5MTkgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9maXh1cC5jCisrKyBiL2FyY2gveDg2L3BjaS9maXh1cC5jCkBAIC0zNTYsNyArMzU2LDcgQEAKIERFQ0xBUkVfUENJX0ZJWFVQX0ZJTkFMKFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIHBjaV9maXh1cF92aWRlbyk7CiAKIAotc3RhdGljIHN0cnVjdCBkbWlfc3lzdGVtX2lkIF9fZGV2aW5pdGRhdGEgbXNpX2s4dF9kbWlfdGFibGVbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2RldmluaXRjb25zdCBtc2lfazh0X2RtaV90YWJsZVtdID0gewogCXsKIAkJLmlkZW50ID0gIk1TSS1LOFQtTmVvMkZpciIsCiAJCS5tYXRjaGVzID0gewpAQCAtNDEzLDcgKzQxMyw3IEBACiAgKi8KIHN0YXRpYyB1MTYgdG9zaGliYV9saW5lX3NpemU7CiAKLXN0YXRpYyBzdHJ1Y3QgZG1pX3N5c3RlbV9pZCBfX2RldmluaXRkYXRhIHRvc2hpYmFfb2hjaTEzOTRfZG1pX3RhYmxlW10gPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19kZXZpbml0Y29uc3QgdG9zaGliYV9vaGNpMTM5NF9kbWlfdGFibGVbXSA9IHsKIAl7CiAJCS5pZGVudCA9ICJUb3NoaWJhIFBTNSBiYXNlZCBsYXB0b3AiLAogCQkubWF0Y2hlcyA9IHsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3BjaS9pMzg2LmMgYi9hcmNoL3g4Ni9wY2kvaTM4Ni5jCmluZGV4IDVlYWQ4MDguLmYyMzRhMzcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3BjaS9pMzg2LmMKKysrIGIvYXJjaC94ODYvcGNpL2kzODYuYwpAQCAtMzE5LDYgKzMxOSw5IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQlmbGFncyA9IG5ld19mbGFnczsKKwkJdm1hLT52bV9wYWdlX3Byb3QgPSBfX3BncHJvdCgKKwkJCShwZ3Byb3RfdmFsKHZtYS0+dm1fcGFnZV9wcm90KSAmIH5fUEFHRV9DQUNIRV9NQVNLKSB8CisJCQlmbGFncyk7CiAJfQogCiAJaWYgKCgodm1hLT52bV9wZ29mZiA8IG1heF9sb3dfcGZuX21hcHBlZCkgfHwKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9tbXUuYyBiL2FyY2gveDg2L3hlbi9tbXUuYwppbmRleCBjYjZhZmE0Li5kYjM4MDJmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vbW11LmMKKysrIGIvYXJjaC94ODYveGVuL21tdS5jCkBAIC0xNzIzLDkgKzE3MjMsOSBAQAogewogCXBtZF90ICprZXJuZWxfcG1kOwogCi0JaW5pdF9wZ190YWJsZXNfc3RhcnQgPSBfX3BhKHBnZCk7Ci0JaW5pdF9wZ190YWJsZXNfZW5kID0gX19wYShwZ2QpICsgeGVuX3N0YXJ0X2luZm8tPm5yX3B0X2ZyYW1lcypQQUdFX1NJWkU7Ci0JbWF4X3Bmbl9tYXBwZWQgPSBQRk5fRE9XTihpbml0X3BnX3RhYmxlc19lbmQgKyA1MTIqMTAyNCk7CisJbWF4X3Bmbl9tYXBwZWQgPSBQRk5fRE9XTihfX3BhKHhlbl9zdGFydF9pbmZvLT5wdF9iYXNlKSArCisJCQkJICB4ZW5fc3RhcnRfaW5mby0+bnJfcHRfZnJhbWVzICogUEFHRV9TSVpFICsKKwkJCQkgIDUxMioxMDI0KTsKIAogCWtlcm5lbF9wbWQgPSBtMnYocGdkW0tFUk5FTF9QR0RfQk9VTkRBUlldLnBnZCk7CiAJbWVtY3B5KGxldmVsMl9rZXJuZWxfcGd0LCBrZXJuZWxfcG1kLCBzaXplb2YocG1kX3QpICogUFRSU19QRVJfUE1EKTsKQEAgLTE4NzAsNyArMTg3MCw2IEBACiAKICNpZmRlZiBDT05GSUdfWDg2X1BBRQogCS5zZXRfcHRlX2F0b21pYyA9IHhlbl9zZXRfcHRlX2F0b21pYywKLQkuc2V0X3B0ZV9wcmVzZW50ID0geGVuX3NldF9wdGVfYXQsCiAJLnB0ZV9jbGVhciA9IHhlbl9wdGVfY2xlYXIsCiAJLnBtZF9jbGVhciA9IHhlbl9wbWRfY2xlYXIsCiAjZW5kaWYJLyogQ09ORklHX1g4Nl9QQUUgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9hYy5jIGIvZHJpdmVycy9hY3BpL2FjLmMKaW5kZXggOWI5MTdkYS4uODhlNDJhYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2FjLmMKKysrIGIvZHJpdmVycy9hY3BpL2FjLmMKQEAgLTE5MSw3ICsxOTEsNiBAQAogCQkJCQkJICAgICBhY3BpX2FjX2Rpcik7CiAJCWlmICghYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpCiAJCQlyZXR1cm4gLUVOT0RFVjsKLQkJYWNwaV9kZXZpY2VfZGlyKGRldmljZSktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJfQogCiAJLyogJ3N0YXRlJyBbUl0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMgYi9kcml2ZXJzL2FjcGkvYmF0dGVyeS5jCmluZGV4IDY5Y2JjNTcuLjNiY2I1YmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9iYXR0ZXJ5LmMKKysrIGIvZHJpdmVycy9hY3BpL2JhdHRlcnkuYwpAQCAtNzYwLDcgKzc2MCw2IEBACiAJCQkJCQkgICAgIGFjcGlfYmF0dGVyeV9kaXIpOwogCQlpZiAoIWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKQogCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpLT5vd25lciA9IFRISVNfTU9EVUxFOwogCX0KIAogCWZvciAoaSA9IDA7IGkgPCBBQ1BJX0JBVFRFUllfTlVNRklMRVM7ICsraSkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL2J1dHRvbi5jIGIvZHJpdmVycy9hY3BpL2J1dHRvbi5jCmluZGV4IDE3MWZkOTEuLmMyZjA2MDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9idXR0b24uYworKysgYi9kcml2ZXJzL2FjcGkvYnV0dG9uLmMKQEAgLTIwMCwxMiArMjAwLDEwIEBACiAKIAlpZiAoIWVudHJ5KQogCQlyZXR1cm4gLUVOT0RFVjsKLQllbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpID0gcHJvY19ta2RpcihhY3BpX2RldmljZV9iaWQoZGV2aWNlKSwgZW50cnkpOwogCWlmICghYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpCiAJCXJldHVybiAtRU5PREVWOwotCWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJLyogJ2luZm8nIFtSXSAqLwogCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YShBQ1BJX0JVVFRPTl9GSUxFX0lORk8sCkBAIC01MjIsNyArNTIwLDYgQEAKIAlhY3BpX2J1dHRvbl9kaXIgPSBwcm9jX21rZGlyKEFDUElfQlVUVE9OX0NMQVNTLCBhY3BpX3Jvb3RfZGlyKTsKIAlpZiAoIWFjcGlfYnV0dG9uX2RpcikKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JYWNwaV9idXR0b25fZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwogCXJlc3VsdCA9IGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9idXR0b25fZHJpdmVyKTsKIAlpZiAocmVzdWx0IDwgMCkgewogCQlyZW1vdmVfcHJvY19lbnRyeShBQ1BJX0JVVFRPTl9DTEFTUywgYWNwaV9yb290X2Rpcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvZmFuLmMgYi9kcml2ZXJzL2FjcGkvZmFuLmMKaW5kZXggZWFhZWUxNi4uOGEwMjk0NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL2Zhbi5jCisrKyBiL2RyaXZlcnMvYWNwaS9mYW4uYwpAQCAtMTkzLDcgKzE5Myw2IEBACiAJCQkJCQkgICAgIGFjcGlfZmFuX2Rpcik7CiAJCWlmICghYWNwaV9kZXZpY2VfZGlyKGRldmljZSkpCiAJCQlyZXR1cm4gLUVOT0RFVjsKLQkJYWNwaV9kZXZpY2VfZGlyKGRldmljZSktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJfQogCiAJLyogJ3N0YXR1cycgW1IvV10gKi8KQEAgLTM0Nyw3ICszNDYsNiBAQAogCWFjcGlfZmFuX2RpciA9IHByb2NfbWtkaXIoQUNQSV9GQU5fQ0xBU1MsIGFjcGlfcm9vdF9kaXIpOwogCWlmICghYWNwaV9mYW5fZGlyKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlhY3BpX2Zhbl9kaXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAjZW5kaWYKIAogCXJlc3VsdCA9IGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYWNwaV9mYW5fZHJpdmVyKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYWNwaS9wcm9jZXNzb3JfY29yZS5jIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKaW5kZXggMGNjMmZkMy4uZmEyZjc0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKKysrIGIvZHJpdmVycy9hY3BpL3Byb2Nlc3Nvcl9jb3JlLmMKQEAgLTM1OSw3ICszNTksNiBAQAogCQlpZiAoIWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKQogCQkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJLyogJ2luZm8nIFtSXSAqLwogCWVudHJ5ID0gcHJvY19jcmVhdGVfZGF0YShBQ1BJX1BST0NFU1NPUl9GSUxFX0lORk8sCkBAIC0xMTM3LDcgKzExMzYsNiBAQAogCWFjcGlfcHJvY2Vzc29yX2RpciA9IHByb2NfbWtkaXIoQUNQSV9QUk9DRVNTT1JfQ0xBU1MsIGFjcGlfcm9vdF9kaXIpOwogCWlmICghYWNwaV9wcm9jZXNzb3JfZGlyKQogCQlyZXR1cm4gLUVOT01FTTsKLQlhY3BpX3Byb2Nlc3Nvcl9kaXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAkvKgogCSAqIENoZWNrIHdoZXRoZXIgdGhlIHN5c3RlbSBpcyBETUkgdGFibGUuIElmIHllcywgT1NQTQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3Nicy5jIGIvZHJpdmVycy9hY3BpL3Nicy5jCmluZGV4IDYwNTBjZTQuLjU5YWZkNTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYWNwaS9zYnMuYworKysgYi9kcml2ZXJzL2FjcGkvc2JzLmMKQEAgLTQ4OCw3ICs0ODgsNiBAQAogCQlpZiAoISpkaXIpIHsKIAkJCXJldHVybiAtRU5PREVWOwogCQl9Ci0JCSgqZGlyKS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAl9CiAKIAkvKiAnaW5mbycgW1JdICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL2FjcGkvdGhlcm1hbC5jIGIvZHJpdmVycy9hY3BpL3RoZXJtYWwuYwppbmRleCA5OWU2ZjFmLi5jMTFmOWFlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdGhlcm1hbC5jCisrKyBiL2RyaXZlcnMvYWNwaS90aGVybWFsLmMKQEAgLTE1MDYsNyArMTUwNiw2IEBACiAJCQkJCQkgICAgIGFjcGlfdGhlcm1hbF9kaXIpOwogCQlpZiAoIWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpKQogCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCWFjcGlfZGV2aWNlX2RpcihkZXZpY2UpLT5vd25lciA9IFRISVNfTU9EVUxFOwogCX0KIAogCS8qICdzdGF0ZScgW1JdICovCkBAIC0xODc1LDcgKzE4NzQsNiBAQAogCWFjcGlfdGhlcm1hbF9kaXIgPSBwcm9jX21rZGlyKEFDUElfVEhFUk1BTF9DTEFTUywgYWNwaV9yb290X2Rpcik7CiAJaWYgKCFhY3BpX3RoZXJtYWxfZGlyKQogCQlyZXR1cm4gLUVOT0RFVjsKLQlhY3BpX3RoZXJtYWxfZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJcmVzdWx0ID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX3RoZXJtYWxfZHJpdmVyKTsKIAlpZiAocmVzdWx0IDwgMCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9hY3BpL3ZpZGVvLmMgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwppbmRleCBiYjVlZDA1Li42N2NjMzZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2FjcGkvdmlkZW8uYworKysgYi9kcml2ZXJzL2FjcGkvdmlkZW8uYwpAQCAtMTEyNSw4ICsxMTI1LDYgQEAKIAlpZiAoIWRldmljZV9kaXIpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZGV2aWNlX2Rpci0+b3duZXIgPSBUSElTX01PRFVMRTsKLQogCS8qICdpbmZvJyBbUl0gKi8KIAllbnRyeSA9IHByb2NfY3JlYXRlX2RhdGEoImluZm8iLCBTX0lSVUdPLCBkZXZpY2VfZGlyLAogCQkJJmFjcGlfdmlkZW9fZGV2aWNlX2luZm9fZm9wcywgYWNwaV9kcml2ZXJfZGF0YShkZXZpY2UpKTsKQEAgLTE0MDMsOCArMTQwMSw2IEBACiAJaWYgKCFkZXZpY2VfZGlyKQogCQlyZXR1cm4gLUVOT01FTTsKIAotCWRldmljZV9kaXItPm93bmVyID0gVEhJU19NT0RVTEU7Ci0KIAkvKiAnaW5mbycgW1JdICovCiAJZW50cnkgPSBwcm9jX2NyZWF0ZV9kYXRhKCJpbmZvIiwgU19JUlVHTywgZGV2aWNlX2RpciwKIAkJCQkgJmFjcGlfdmlkZW9fYnVzX2luZm9fZm9wcywKQEAgLTIxMzEsNyArMjEyNyw2IEBACiAJYWNwaV92aWRlb19kaXIgPSBwcm9jX21rZGlyKEFDUElfVklERU9fQ0xBU1MsIGFjcGlfcm9vdF9kaXIpOwogCWlmICghYWNwaV92aWRlb19kaXIpCiAJCXJldHVybiAtRU5PREVWOwotCWFjcGlfdmlkZW9fZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJcmVzdWx0ID0gYWNwaV9idXNfcmVnaXN0ZXJfZHJpdmVyKCZhY3BpX3ZpZGVvX2J1cyk7CiAJaWYgKHJlc3VsdCA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9pb21tdS5jIGIvZHJpdmVycy9iYXNlL2lvbW11LmMKaW5kZXggNWUwMzlkNC4uYzJkMWVlZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9iYXNlL2lvbW11LmMKKysrIGIvZHJpdmVycy9iYXNlL2lvbW11LmMKQEAgLTMxLDcgKzMxLDcgQEAKIAlpb21tdV9vcHMgPSBvcHM7CiB9CiAKLWJvb2wgaW9tbXVfZm91bmQoKQorYm9vbCBpb21tdV9mb3VuZCh2b2lkKQogewogCXJldHVybiBpb21tdV9vcHMgIT0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMgYi9kcml2ZXJzL2Jhc2UvcG93ZXIvbWFpbi5jCmluZGV4IGUyNTUzNDEuLjY5YjRkZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmFzZS9wb3dlci9tYWluLmMKKysrIGIvZHJpdmVycy9iYXNlL3Bvd2VyL21haW4uYwpAQCAtMjMsNiArMjMsNyBAQAogI2luY2x1ZGUgPGxpbnV4L3BtLmg+CiAjaW5jbHVkZSA8bGludXgvcmVzdW1lLXRyYWNlLmg+CiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KIAogI2luY2x1ZGUgIi4uL2Jhc2UuaCIKICNpbmNsdWRlICJwb3dlci5oIgpAQCAtMzQ5LDcgKzM1MCw4IEBACiAgKglFeGVjdXRlIHRoZSBhcHByb3ByaWF0ZSAibm9pcnEgcmVzdW1lIiBjYWxsYmFjayBmb3IgYWxsIGRldmljZXMgbWFya2VkCiAgKglhcyBEUE1fT0ZGX0lSUS4KICAqCi0gKglNdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQgYW5kIG9ubHkgb25lIENQVSBydW5uaW5nLgorICoJTXVzdCBiZSBjYWxsZWQgdW5kZXIgZHBtX2xpc3RfbXR4LiAgRGV2aWNlIGRyaXZlcnMgc2hvdWxkIG5vdCByZWNlaXZlCisgKglpbnRlcnJ1cHRzIHdoaWxlIGl0J3MgYmVpbmcgZXhlY3V0ZWQuCiAgKi8KIHN0YXRpYyB2b2lkIGRwbV9wb3dlcl91cChwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CkBAIC0zNzAsMTQgKzM3MiwxMyBAQAogICoJZGV2aWNlX3Bvd2VyX3VwIC0gVHVybiBvbiBhbGwgZGV2aWNlcyB0aGF0IG5lZWQgc3BlY2lhbCBhdHRlbnRpb24uCiAgKglAc3RhdGU6IFBNIHRyYW5zaXRpb24gb2YgdGhlIHN5c3RlbSBiZWluZyBjYXJyaWVkIG91dC4KICAqCi0gKglQb3dlciBvbiBzeXN0ZW0gZGV2aWNlcywgdGhlbiBkZXZpY2VzIHRoYXQgcmVxdWlyZWQgd2Ugc2h1dCB0aGVtIGRvd24KLSAqCXdpdGggaW50ZXJydXB0cyBkaXNhYmxlZC4KLSAqCi0gKglNdXN0IGJlIGNhbGxlZCB3aXRoIGludGVycnVwdHMgZGlzYWJsZWQuCisgKglDYWxsIHRoZSAiZWFybHkiIHJlc3VtZSBoYW5kbGVycyBhbmQgZW5hYmxlIGRldmljZSBkcml2ZXJzIHRvIHJlY2VpdmUKKyAqCWludGVycnVwdHMuCiAgKi8KIHZvaWQgZGV2aWNlX3Bvd2VyX3VwKHBtX21lc3NhZ2VfdCBzdGF0ZSkKIHsKIAlkcG1fcG93ZXJfdXAoc3RhdGUpOworCXJlc3VtZV9kZXZpY2VfaXJxcygpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoZGV2aWNlX3Bvd2VyX3VwKTsKIApAQCAtNjAyLDE2ICs2MDMsMTcgQEAKICAqCWRldmljZV9wb3dlcl9kb3duIC0gU2h1dCBkb3duIHNwZWNpYWwgZGV2aWNlcy4KICAqCUBzdGF0ZTogUE0gdHJhbnNpdGlvbiBvZiB0aGUgc3lzdGVtIGJlaW5nIGNhcnJpZWQgb3V0LgogICoKLSAqCVBvd2VyIGRvd24gZGV2aWNlcyB0aGF0IHJlcXVpcmUgaW50ZXJydXB0cyB0byBiZSBkaXNhYmxlZC4KLSAqCVRoZW4gcG93ZXIgZG93biBzeXN0ZW0gZGV2aWNlcy4KKyAqCVByZXZlbnQgZGV2aWNlIGRyaXZlcnMgZnJvbSByZWNlaXZpbmcgaW50ZXJydXB0cyBhbmQgY2FsbCB0aGUgImxhdGUiCisgKglzdXNwZW5kIGhhbmRsZXJzLgogICoKLSAqCU11c3QgYmUgY2FsbGVkIHdpdGggaW50ZXJydXB0cyBkaXNhYmxlZCBhbmQgb25seSBvbmUgQ1BVIHJ1bm5pbmcuCisgKglNdXN0IGJlIGNhbGxlZCB1bmRlciBkcG1fbGlzdF9tdHguCiAgKi8KIGludCBkZXZpY2VfcG93ZXJfZG93bihwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJc3RydWN0IGRldmljZSAqZGV2OwogCWludCBlcnJvciA9IDA7CiAKKwlzdXNwZW5kX2RldmljZV9pcnFzKCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9yZXZlcnNlKGRldiwgJmRwbV9saXN0LCBwb3dlci5lbnRyeSkgewogCQllcnJvciA9IHN1c3BlbmRfZGV2aWNlX25vaXJxKGRldiwgc3RhdGUpOwogCQlpZiAoZXJyb3IpIHsKQEAgLTYyMSw3ICs2MjMsNyBAQAogCQlkZXYtPnBvd2VyLnN0YXR1cyA9IERQTV9PRkZfSVJROwogCX0KIAlpZiAoZXJyb3IpCi0JCWRwbV9wb3dlcl91cChyZXN1bWVfZXZlbnQoc3RhdGUpKTsKKwkJZGV2aWNlX3Bvd2VyX3VwKHJlc3VtZV9ldmVudChzdGF0ZSkpOwogCXJldHVybiBlcnJvcjsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRldmljZV9wb3dlcl9kb3duKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvYmFzZS9zeXMuYyBiL2RyaXZlcnMvYmFzZS9zeXMuYwppbmRleCBjYmQzNmNmLi43NmNlNzViIDEwMDY0NAotLS0gYS9kcml2ZXJzL2Jhc2Uvc3lzLmMKKysrIGIvZHJpdmVycy9iYXNlL3N5cy5jCkBAIC0yMiw2ICsyMiw3IEBACiAjaW5jbHVkZSA8bGludXgvcG0uaD4KICNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAjaW5jbHVkZSAiYmFzZS5oIgogCkBAIC0zNjksNiArMzcwLDEzIEBACiAJc3RydWN0IHN5c2Rldl9kcml2ZXIgKmRydiwgKmVycl9kcnY7CiAJaW50IHJldDsKIAorCXByX2RlYnVnKCJDaGVja2luZyB3YWtlLXVwIGludGVycnVwdHNcbiIpOworCisJLyogUmV0dXJuIGVycm9yIGNvZGUgaWYgdGhlcmUgYXJlIGFueSB3YWtlLXVwIGludGVycnVwdHMgcGVuZGluZyAqLworCXJldCA9IGNoZWNrX3dha2V1cF9pcnFzKCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwogCXByX2RlYnVnKCJTdXNwZW5kaW5nIFN5c3RlbSBEZXZpY2VzXG4iKTsKIAogCWxpc3RfZm9yX2VhY2hfZW50cnlfcmV2ZXJzZShjbHMsICZzeXN0ZW1fa3NldC0+bGlzdCwga3NldC5rb2JqLmVudHJ5KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2Jsb2NrL3BzM3ZyYW0uYyBiL2RyaXZlcnMvYmxvY2svcHMzdnJhbS5jCmluZGV4IDM5M2VkNjcuLjhlZGRlZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvYmxvY2svcHMzdnJhbS5jCisrKyBiL2RyaXZlcnMvYmxvY2svcHMzdnJhbS5jCkBAIC01NTEsOCArNTUxLDYgQEAKIAkJZGV2X3dhcm4oJmRldi0+Y29yZSwgImZhaWxlZCB0byBjcmVhdGUgL3Byb2MgZW50cnlcbiIpOwogCQlyZXR1cm47CiAJfQotCi0JcGRlLT5vd25lciA9IFRISVNfTU9EVUxFOwogCXBkZS0+ZGF0YSA9IHByaXY7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfbXNnaGFuZGxlci5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKaW5kZXggN2E4OGRmZC4uZTkzZmM4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9tc2doYW5kbGVyLmMKQEAgLTE5NDQsNyArMTk0NCw3IEBACiAKIGludCBpcG1pX3NtaV9hZGRfcHJvY19lbnRyeShpcG1pX3NtaV90IHNtaSwgY2hhciAqbmFtZSwKIAkJCSAgICByZWFkX3Byb2NfdCAqcmVhZF9wcm9jLAotCQkJICAgIHZvaWQgKmRhdGEsIHN0cnVjdCBtb2R1bGUgKm93bmVyKQorCQkJICAgIHZvaWQgKmRhdGEpCiB7CiAJaW50ICAgICAgICAgICAgICAgICAgICBydiA9IDA7CiAjaWZkZWYgQ09ORklHX1BST0NfRlMKQEAgLTE5NzAsNyArMTk3MCw2IEBACiAJfSBlbHNlIHsKIAkJZmlsZS0+ZGF0YSA9IGRhdGE7CiAJCWZpbGUtPnJlYWRfcHJvYyA9IHJlYWRfcHJvYzsKLQkJZmlsZS0+b3duZXIgPSBvd25lcjsKIAogCQltdXRleF9sb2NrKCZzbWktPnByb2NfZW50cnlfbG9jayk7CiAJCS8qIFN0aWNrIGl0IG9uIHRoZSBsaXN0LiAqLwpAQCAtMTk5MywyMyArMTk5MiwyMSBAQAogCXNtaS0+cHJvY19kaXIgPSBwcm9jX21rZGlyKHNtaS0+cHJvY19kaXJfbmFtZSwgcHJvY19pcG1pX3Jvb3QpOwogCWlmICghc21pLT5wcm9jX2RpcikKIAkJcnYgPSAtRU5PTUVNOwotCWVsc2UKLQkJc21pLT5wcm9jX2Rpci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCWlmIChydiA9PSAwKQogCQlydiA9IGlwbWlfc21pX2FkZF9wcm9jX2VudHJ5KHNtaSwgInN0YXRzIiwKIAkJCQkJICAgICBzdGF0X2ZpbGVfcmVhZF9wcm9jLAotCQkJCQkgICAgIHNtaSwgVEhJU19NT0RVTEUpOworCQkJCQkgICAgIHNtaSk7CiAKIAlpZiAocnYgPT0gMCkKIAkJcnYgPSBpcG1pX3NtaV9hZGRfcHJvY19lbnRyeShzbWksICJpcG1iIiwKIAkJCQkJICAgICBpcG1iX2ZpbGVfcmVhZF9wcm9jLAotCQkJCQkgICAgIHNtaSwgVEhJU19NT0RVTEUpOworCQkJCQkgICAgIHNtaSk7CiAKIAlpZiAocnYgPT0gMCkKIAkJcnYgPSBpcG1pX3NtaV9hZGRfcHJvY19lbnRyeShzbWksICJ2ZXJzaW9uIiwKIAkJCQkJICAgICB2ZXJzaW9uX2ZpbGVfcmVhZF9wcm9jLAotCQkJCQkgICAgIHNtaSwgVEhJU19NT0RVTEUpOworCQkJCQkgICAgIHNtaSk7CiAjZW5kaWYgLyogQ09ORklHX1BST0NfRlMgKi8KIAogCXJldHVybiBydjsKQEAgLTQyNjUsNyArNDI2Miw2IEBACiAJICAgIHJldHVybiAtRU5PTUVNOwogCX0KIAotCXByb2NfaXBtaV9yb290LT5vd25lciA9IFRISVNfTU9EVUxFOwogI2VuZGlmIC8qIENPTkZJR19QUk9DX0ZTICovCiAKIAlzZXR1cF90aW1lcigmaXBtaV90aW1lciwgaXBtaV90aW1lb3V0LCAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvY2hhci9pcG1pL2lwbWlfc2lfaW50Zi5jIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKaW5kZXggMzAwMDEzNS4uZTU4ZWE0YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKKysrIGIvZHJpdmVycy9jaGFyL2lwbWkvaXBtaV9zaV9pbnRmLmMKQEAgLTI4OTksNyArMjg5OSw3IEBACiAKIAlydiA9IGlwbWlfc21pX2FkZF9wcm9jX2VudHJ5KG5ld19zbWktPmludGYsICJ0eXBlIiwKIAkJCQkgICAgIHR5cGVfZmlsZV9yZWFkX3Byb2MsCi0JCQkJICAgICBuZXdfc21pLCBUSElTX01PRFVMRSk7CisJCQkJICAgICBuZXdfc21pKTsKIAlpZiAocnYpIHsKIAkJcHJpbnRrKEtFUk5fRVJSCiAJCSAgICAgICAiaXBtaV9zaTogVW5hYmxlIHRvIGNyZWF0ZSBwcm9jIGVudHJ5OiAlZFxuIiwKQEAgLTI5MDksNyArMjkwOSw3IEBACiAKIAlydiA9IGlwbWlfc21pX2FkZF9wcm9jX2VudHJ5KG5ld19zbWktPmludGYsICJzaV9zdGF0cyIsCiAJCQkJICAgICBzdGF0X2ZpbGVfcmVhZF9wcm9jLAotCQkJCSAgICAgbmV3X3NtaSwgVEhJU19NT0RVTEUpOworCQkJCSAgICAgbmV3X3NtaSk7CiAJaWYgKHJ2KSB7CiAJCXByaW50ayhLRVJOX0VSUgogCQkgICAgICAgImlwbWlfc2k6IFVuYWJsZSB0byBjcmVhdGUgcHJvYyBlbnRyeTogJWRcbiIsCkBAIC0yOTE5LDcgKzI5MTksNyBAQAogCiAJcnYgPSBpcG1pX3NtaV9hZGRfcHJvY19lbnRyeShuZXdfc21pLT5pbnRmLCAicGFyYW1zIiwKIAkJCQkgICAgIHBhcmFtX3JlYWRfcHJvYywKLQkJCQkgICAgIG5ld19zbWksIFRISVNfTU9EVUxFKTsKKwkJCQkgICAgIG5ld19zbWkpOwogCWlmIChydikgewogCQlwcmludGsoS0VSTl9FUlIKIAkJICAgICAgICJpcG1pX3NpOiBVbmFibGUgdG8gY3JlYXRlIHByb2MgZW50cnk6ICVkXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9jaGFyL3Jhdy5jIGIvZHJpdmVycy9jaGFyL3Jhdy5jCmluZGV4IDk2YWRmMjguLjIwZDkwZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvY2hhci9yYXcuYworKysgYi9kcml2ZXJzL2NoYXIvcmF3LmMKQEAgLTkwLDYgKzkwLDcgQEAKIAlibGtkZXZfcHV0KGJkZXYsIGZpbHAtPmZfbW9kZSk7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZyYXdfbXV0ZXgpOworCXVubG9ja19rZXJuZWwoKTsKIAlyZXR1cm4gZXJyOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMgYi9kcml2ZXJzL2Zpcm13YXJlL2RtaV9zY2FuLmMKaW5kZXggOGYwZjdjNC4uNWYxYjU0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9maXJtd2FyZS9kbWlfc2Nhbi5jCisrKyBiL2RyaXZlcnMvZmlybXdhcmUvZG1pX3NjYW4uYwpAQCAtNjgsNyArNjgsOCBAQAogICoJcG9pbnRpbmcgdG8gY29tcGxldGVseSB0aGUgd3JvbmcgcGxhY2UgZm9yIGV4YW1wbGUKICAqLwogc3RhdGljIHZvaWQgZG1pX3RhYmxlKHU4ICpidWYsIGludCBsZW4sIGludCBudW0sCi0JCSAgICAgIHZvaWQgKCpkZWNvZGUpKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICopKQorCQkgICAgICB2b2lkICgqZGVjb2RlKShjb25zdCBzdHJ1Y3QgZG1pX2hlYWRlciAqLCB2b2lkICopLAorCQkgICAgICB2b2lkICpwcml2YXRlX2RhdGEpCiB7CiAJdTggKmRhdGEgPSBidWY7CiAJaW50IGkgPSAwOwpAQCAtODksNyArOTAsNyBAQAogCQl3aGlsZSAoKGRhdGEgLSBidWYgPCBsZW4gLSAxKSAmJiAoZGF0YVswXSB8fCBkYXRhWzFdKSkKIAkJCWRhdGErKzsKIAkJaWYgKGRhdGEgLSBidWYgPCBsZW4gLSAxKQotCQkJZGVjb2RlKGRtKTsKKwkJCWRlY29kZShkbSwgcHJpdmF0ZV9kYXRhKTsKIAkJZGF0YSArPSAyOwogCQlpKys7CiAJfQpAQCAtOTksNyArMTAwLDggQEAKIHN0YXRpYyB1MTYgZG1pX2xlbjsKIHN0YXRpYyB1MTYgZG1pX251bTsKIAotc3RhdGljIGludCBfX2luaXQgZG1pX3dhbGtfZWFybHkodm9pZCAoKmRlY29kZSkoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKikpCitzdGF0aWMgaW50IF9faW5pdCBkbWlfd2Fsa19lYXJseSh2b2lkICgqZGVjb2RlKShjb25zdCBzdHJ1Y3QgZG1pX2hlYWRlciAqLAorCQl2b2lkICopKQogewogCXU4ICpidWY7CiAKQEAgLTEwNyw3ICsxMDksNyBAQAogCWlmIChidWYgPT0gTlVMTCkKIAkJcmV0dXJuIC0xOwogCi0JZG1pX3RhYmxlKGJ1ZiwgZG1pX2xlbiwgZG1pX251bSwgZGVjb2RlKTsKKwlkbWlfdGFibGUoYnVmLCBkbWlfbGVuLCBkbWlfbnVtLCBkZWNvZGUsIE5VTEwpOwogCiAJZG1pX2lvdW5tYXAoYnVmLCBkbWlfbGVuKTsKIAlyZXR1cm4gMDsKQEAgLTI5NSw3ICsyOTcsNyBAQAogICoJYW5kIG1hY2hpbmUgZW50cmllcy4gRm9yIDIuNSB3ZSBzaG91bGQgcHVsbCB0aGUgc21idXMgY29udHJvbGxlciBpbmZvCiAgKglvdXQgb2YgaGVyZS4KICAqLwotc3RhdGljIHZvaWQgX19pbml0IGRtaV9kZWNvZGUoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKmRtKQorc3RhdGljIHZvaWQgX19pbml0IGRtaV9kZWNvZGUoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKmRtLCB2b2lkICpkdW1teSkKIHsKIAlzd2l0Y2goZG0tPnR5cGUpIHsKIAljYXNlIDA6CQkvKiBCSU9TIEluZm9ybWF0aW9uICovCkBAIC01OTgsMTAgKzYwMCwxMiBAQAogLyoqCiAgKglkbWlfd2FsayAtIFdhbGsgdGhlIERNSSB0YWJsZSBhbmQgZ2V0IGNhbGxlZCBiYWNrIGZvciBldmVyeSByZWNvcmQKICAqCUBkZWNvZGU6IENhbGxiYWNrIGZ1bmN0aW9uCisgKglAcHJpdmF0ZV9kYXRhOiBQcml2YXRlIGRhdGEgdG8gYmUgcGFzc2VkIHRvIHRoZSBjYWxsYmFjayBmdW5jdGlvbgogICoKICAqCVJldHVybnMgLTEgd2hlbiB0aGUgRE1JIHRhYmxlIGNhbid0IGJlIHJlYWNoZWQsIDAgb24gc3VjY2Vzcy4KICAqLwotaW50IGRtaV93YWxrKHZvaWQgKCpkZWNvZGUpKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICopKQoraW50IGRtaV93YWxrKHZvaWQgKCpkZWNvZGUpKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICosIHZvaWQgKiksCisJICAgICB2b2lkICpwcml2YXRlX2RhdGEpCiB7CiAJdTggKmJ1ZjsKIApAQCAtNjEyLDcgKzYxNiw3IEBACiAJaWYgKGJ1ZiA9PSBOVUxMKQogCQlyZXR1cm4gLTE7CiAKLQlkbWlfdGFibGUoYnVmLCBkbWlfbGVuLCBkbWlfbnVtLCBkZWNvZGUpOworCWRtaV90YWJsZShidWYsIGRtaV9sZW4sIGRtaV9udW0sIGRlY29kZSwgcHJpdmF0ZV9kYXRhKTsKIAogCWlvdW5tYXAoYnVmKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hdGlfcGNpZ2FydC5jIGIvZHJpdmVycy9ncHUvZHJtL2F0aV9wY2lnYXJ0LmMKaW5kZXggYzUzM2QwYy4uNjI4ZWFlMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2F0aV9wY2lnYXJ0LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2F0aV9wY2lnYXJ0LmMKQEAgLTc3LDcgKzc3LDcgQEAKIAkJCWlmICghZW50cnktPmJ1c2FkZHJbaV0pCiAJCQkJYnJlYWs7CiAJCQlwY2lfdW5tYXBfcGFnZShkZXYtPnBkZXYsIGVudHJ5LT5idXNhZGRyW2ldLAotCQkJCQkgUEFHRV9TSVpFLCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJCQkJIFBBR0VfU0laRSwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKIAkJfQogCiAJCWlmIChnYXJ0X2luZm8tPmdhcnRfdGFibGVfbG9jYXRpb24gPT0gRFJNX0FUSV9HQVJUX01BSU4pCkBAIC05NSwxMyArOTUsMTQgQEAKIAogaW50IGRybV9hdGlfcGNpZ2FydF9pbml0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fYXRpX3BjaWdhcnRfaW5mbyAqZ2FydF9pbmZvKQogeworCXN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXAgPSAmZ2FydF9pbmZvLT5tYXBwaW5nOwogCXN0cnVjdCBkcm1fc2dfbWVtICplbnRyeSA9IGRldi0+c2c7CiAJdm9pZCAqYWRkcmVzcyA9IE5VTEw7CiAJdW5zaWduZWQgbG9uZyBwYWdlczsKLQl1MzIgKnBjaV9nYXJ0LCBwYWdlX2Jhc2U7CisJdTMyICpwY2lfZ2FydCA9IE5VTEwsIHBhZ2VfYmFzZSwgZ2FydF9pZHg7CiAJZG1hX2FkZHJfdCBidXNfYWRkcmVzcyA9IDA7CiAJaW50IGksIGosIHJldCA9IDA7Ci0JaW50IG1heF9wYWdlczsKKwlpbnQgbWF4X2F0aV9wYWdlcywgbWF4X3JlYWxfcGFnZXM7CiAKIAlpZiAoIWVudHJ5KSB7CiAJCURSTV9FUlJPUigibm8gc2NhdHRlci9nYXRoZXIgbWVtb3J5IVxuIik7CkBAIC0xMTcsNiArMTE4LDcgQEAKIAkJCWdvdG8gZG9uZTsKIAkJfQogCisJCXBjaV9nYXJ0ID0gZ2FydF9pbmZvLT50YWJsZV9oYW5kbGUtPnZhZGRyOwogCQlhZGRyZXNzID0gZ2FydF9pbmZvLT50YWJsZV9oYW5kbGUtPnZhZGRyOwogCQlidXNfYWRkcmVzcyA9IGdhcnRfaW5mby0+dGFibGVfaGFuZGxlLT5idXNhZGRyOwogCX0gZWxzZSB7CkBAIC0xMjcsMTggKzEyOSwyMyBAQAogCQkJICAodW5zaWduZWQgbG9uZylhZGRyZXNzKTsKIAl9CiAKLQlwY2lfZ2FydCA9ICh1MzIgKikgYWRkcmVzczsKIAotCW1heF9wYWdlcyA9IChnYXJ0X2luZm8tPnRhYmxlX3NpemUgLyBzaXplb2YodTMyKSk7Ci0JcGFnZXMgPSAoZW50cnktPnBhZ2VzIDw9IG1heF9wYWdlcykKLQkgICAgPyBlbnRyeS0+cGFnZXMgOiBtYXhfcGFnZXM7CisJbWF4X2F0aV9wYWdlcyA9IChnYXJ0X2luZm8tPnRhYmxlX3NpemUgLyBzaXplb2YodTMyKSk7CisJbWF4X3JlYWxfcGFnZXMgPSBtYXhfYXRpX3BhZ2VzIC8gKFBBR0VfU0laRSAvIEFUSV9QQ0lHQVJUX1BBR0VfU0laRSk7CisJcGFnZXMgPSAoZW50cnktPnBhZ2VzIDw9IG1heF9yZWFsX3BhZ2VzKQorCSAgICA/IGVudHJ5LT5wYWdlcyA6IG1heF9yZWFsX3BhZ2VzOwogCi0JbWVtc2V0KHBjaV9nYXJ0LCAwLCBtYXhfcGFnZXMgKiBzaXplb2YodTMyKSk7CisJaWYgKGdhcnRfaW5mby0+Z2FydF90YWJsZV9sb2NhdGlvbiA9PSBEUk1fQVRJX0dBUlRfTUFJTikgeworCQltZW1zZXQocGNpX2dhcnQsIDAsIG1heF9hdGlfcGFnZXMgKiBzaXplb2YodTMyKSk7CisJfSBlbHNlIHsKKwkJbWVtc2V0X2lvKCh2b2lkIF9faW9tZW0gKiltYXAtPmhhbmRsZSwgMCwgbWF4X2F0aV9wYWdlcyAqIHNpemVvZih1MzIpKTsKKwl9CiAKKwlnYXJ0X2lkeCA9IDA7CiAJZm9yIChpID0gMDsgaSA8IHBhZ2VzOyBpKyspIHsKIAkJLyogd2UgbmVlZCB0byBzdXBwb3J0IGxhcmdlIG1lbW9yeSBjb25maWd1cmF0aW9ucyAqLwogCQllbnRyeS0+YnVzYWRkcltpXSA9IHBjaV9tYXBfcGFnZShkZXYtPnBkZXYsIGVudHJ5LT5wYWdlbGlzdFtpXSwKLQkJCQkJCSAwLCBQQUdFX1NJWkUsIFBDSV9ETUFfVE9ERVZJQ0UpOworCQkJCQkJIDAsIFBBR0VfU0laRSwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKIAkJaWYgKGVudHJ5LT5idXNhZGRyW2ldID09IDApIHsKIAkJCURSTV9FUlJPUigidW5hYmxlIHRvIG1hcCBQQ0lHQVJUIHBhZ2VzIVxuIik7CiAJCQlkcm1fYXRpX3BjaWdhcnRfY2xlYW51cChkZXYsIGdhcnRfaW5mbyk7CkBAIC0xNDksMTkgKzE1NiwyNiBAQAogCQlwYWdlX2Jhc2UgPSAodTMyKSBlbnRyeS0+YnVzYWRkcltpXTsKIAogCQlmb3IgKGogPSAwOyBqIDwgKFBBR0VfU0laRSAvIEFUSV9QQ0lHQVJUX1BBR0VfU0laRSk7IGorKykgeworCQkJdTMyIHZhbDsKKwogCQkJc3dpdGNoKGdhcnRfaW5mby0+Z2FydF9yZWdfaWYpIHsKIAkJCWNhc2UgRFJNX0FUSV9HQVJUX0lHUDoKLQkJCQkqcGNpX2dhcnQgPSBjcHVfdG9fbGUzMigocGFnZV9iYXNlKSB8IDB4Yyk7CisJCQkJdmFsID0gcGFnZV9iYXNlIHwgMHhjOwogCQkJCWJyZWFrOwogCQkJY2FzZSBEUk1fQVRJX0dBUlRfUENJRToKLQkJCQkqcGNpX2dhcnQgPSBjcHVfdG9fbGUzMigocGFnZV9iYXNlID4+IDgpIHwgMHhjKTsKKwkJCQl2YWwgPSAocGFnZV9iYXNlID4+IDgpIHwgMHhjOwogCQkJCWJyZWFrOwogCQkJZGVmYXVsdDoKIAkJCWNhc2UgRFJNX0FUSV9HQVJUX1BDSToKLQkJCQkqcGNpX2dhcnQgPSBjcHVfdG9fbGUzMihwYWdlX2Jhc2UpOworCQkJCXZhbCA9IHBhZ2VfYmFzZTsKIAkJCQlicmVhazsKIAkJCX0KLQkJCXBjaV9nYXJ0Kys7CisJCQlpZiAoZ2FydF9pbmZvLT5nYXJ0X3RhYmxlX2xvY2F0aW9uID09CisJCQkgICAgRFJNX0FUSV9HQVJUX01BSU4pCisJCQkJcGNpX2dhcnRbZ2FydF9pZHhdID0gY3B1X3RvX2xlMzIodmFsKTsKKwkJCWVsc2UKKwkJCQlEUk1fV1JJVEUzMihtYXAsIGdhcnRfaWR4ICogc2l6ZW9mKHUzMiksIHZhbCk7CisJCQlnYXJ0X2lkeCsrOwogCQkJcGFnZV9iYXNlICs9IEFUSV9QQ0lHQVJUX1BBR0VfU0laRTsKIAkJfQogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fYnVmcy5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9idWZzLmMKaW5kZXggMTI3MTVkMy4uNmQ4MGQxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9idWZzLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9idWZzLmMKQEAgLTM0LDE1ICszNCwxNyBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CisjaW5jbHVkZSA8bGludXgvbG9nMi5oPgorI2luY2x1ZGUgPGFzbS9zaG1wYXJhbS5oPgogI2luY2x1ZGUgImRybVAuaCIKIAotdW5zaWduZWQgbG9uZyBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZXNvdXJjZSkKK3Jlc291cmNlX3NpemVfdCBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHVuc2lnbmVkIGludCByZXNvdXJjZSkKIHsKIAlyZXR1cm4gcGNpX3Jlc291cmNlX3N0YXJ0KGRldi0+cGRldiwgcmVzb3VyY2UpOwogfQogRVhQT1JUX1NZTUJPTChkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KTsKIAotdW5zaWduZWQgbG9uZyBkcm1fZ2V0X3Jlc291cmNlX2xlbihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1bnNpZ25lZCBpbnQgcmVzb3VyY2UpCityZXNvdXJjZV9zaXplX3QgZHJtX2dldF9yZXNvdXJjZV9sZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IHJlc291cmNlKQogewogCXJldHVybiBwY2lfcmVzb3VyY2VfbGVuKGRldi0+cGRldiwgcmVzb3VyY2UpOwogfQpAQCAtNTAsMjQgKzUyLDQ0IEBACiBFWFBPUlRfU1lNQk9MKGRybV9nZXRfcmVzb3VyY2VfbGVuKTsKIAogc3RhdGljIHN0cnVjdCBkcm1fbWFwX2xpc3QgKmRybV9maW5kX21hdGNoaW5nX21hcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAotCQkJCQkgICAgIGRybV9sb2NhbF9tYXBfdCAqbWFwKQorCQkJCQkJICBzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwKQogewogCXN0cnVjdCBkcm1fbWFwX2xpc3QgKmVudHJ5OwogCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZkZXYtPm1hcGxpc3QsIGhlYWQpIHsKLQkJaWYgKGVudHJ5LT5tYXAgJiYgKGVudHJ5LT5tYXN0ZXIgPT0gZGV2LT5wcmltYXJ5LT5tYXN0ZXIpICYmIChtYXAtPnR5cGUgPT0gZW50cnktPm1hcC0+dHlwZSkgJiYKLQkJICAgICgoZW50cnktPm1hcC0+b2Zmc2V0ID09IG1hcC0+b2Zmc2V0KSB8fAotCQkgICAgICgobWFwLT50eXBlID09IF9EUk1fU0hNKSAmJiAobWFwLT5mbGFncyZfRFJNX0NPTlRBSU5TX0xPQ0spKSkpIHsKKwkJLyoKKwkJICogQmVjYXVzZSB0aGUga2VybmVsLXVzZXJzcGFjZSBBQkkgaXMgZml4ZWQgYXQgYSAzMi1iaXQgb2Zmc2V0CisJCSAqIHdoaWxlIFBDSSByZXNvdXJjZXMgbWF5IGxpdmUgYWJvdmUgdGhhdCwgd2UgaWdub3JlIHRoZSBtYXAKKwkJICogb2Zmc2V0IGZvciBtYXBzIG9mIHR5cGUgX0RSTV9GUkFNRUJVRkZFUiBvciBfRFJNX1JFR0lTVEVSUy4KKwkJICogSXQgaXMgYXNzdW1lZCB0aGF0IGVhY2ggZHJpdmVyIHdpbGwgaGF2ZSBvbmx5IG9uZSByZXNvdXJjZSBvZgorCQkgKiBlYWNoIHR5cGUuCisJCSAqLworCQlpZiAoIWVudHJ5LT5tYXAgfHwKKwkJICAgIG1hcC0+dHlwZSAhPSBlbnRyeS0+bWFwLT50eXBlIHx8CisJCSAgICBlbnRyeS0+bWFzdGVyICE9IGRldi0+cHJpbWFyeS0+bWFzdGVyKQorCQkJY29udGludWU7CisJCXN3aXRjaCAobWFwLT50eXBlKSB7CisJCWNhc2UgX0RSTV9TSE06CisJCQlpZiAobWFwLT5mbGFncyAhPSBfRFJNX0NPTlRBSU5TX0xPQ0spCisJCQkJYnJlYWs7CisJCWNhc2UgX0RSTV9SRUdJU1RFUlM6CisJCWNhc2UgX0RSTV9GUkFNRV9CVUZGRVI6CiAJCQlyZXR1cm4gZW50cnk7CisJCWRlZmF1bHQ6IC8qIE1ha2UgZ2NjIGhhcHB5ICovCisJCQk7CiAJCX0KKwkJaWYgKGVudHJ5LT5tYXAtPm9mZnNldCA9PSBtYXAtPm9mZnNldCkKKwkJCXJldHVybiBlbnRyeTsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIGludCBkcm1fbWFwX2hhbmRsZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2hhc2hfaXRlbSAqaGFzaCwKLQkJCSAgdW5zaWduZWQgbG9uZyB1c2VyX3Rva2VuLCBpbnQgaGFzaGVkX2hhbmRsZSkKKwkJCSAgdW5zaWduZWQgbG9uZyB1c2VyX3Rva2VuLCBpbnQgaGFzaGVkX2hhbmRsZSwgaW50IHNobSkKIHsKLQlpbnQgdXNlX2hhc2hlZF9oYW5kbGU7CisJaW50IHVzZV9oYXNoZWRfaGFuZGxlLCBzaGlmdDsKKwl1bnNpZ25lZCBsb25nIGFkZDsKKwogI2lmIChCSVRTX1BFUl9MT05HID09IDY0KQogCXVzZV9oYXNoZWRfaGFuZGxlID0gKCh1c2VyX3Rva2VuICYgMHhGRkZGRkZGRjAwMDAwMDAwVUwpIHx8IGhhc2hlZF9oYW5kbGUpOwogI2VsaWYgKEJJVFNfUEVSX0xPTkcgPT0gMzIpCkBAIC04MywzMCArMTA1LDQ3IEBACiAJCWlmIChyZXQgIT0gLUVJTlZBTCkKIAkJCXJldHVybiByZXQ7CiAJfQorCisJc2hpZnQgPSAwOworCWFkZCA9IERSTV9NQVBfSEFTSF9PRkZTRVQgPj4gUEFHRV9TSElGVDsKKwlpZiAoc2htICYmIChTSE1MQkEgPiBQQUdFX1NJWkUpKSB7CisJCWludCBiaXRzID0gaWxvZzIoU0hNTEJBID4+IFBBR0VfU0hJRlQpICsgMTsKKworCQkvKiBGb3Igc2hhcmVkIG1lbW9yeSwgd2UgaGF2ZSB0byBwcmVzZXJ2ZSB0aGUgU0hNTEJBCisJCSAqIGJpdHMgb2YgdGhlIGV2ZW50dWFsIHZtYS0+dm1fcGdvZmYgdmFsdWUgZHVyaW5nCisJCSAqIG1tYXAoKS4gIE90aGVyd2lzZSB3ZSBydW4gaW50byBjYWNoZSBhbGlhc2luZyBwcm9ibGVtcworCQkgKiBvbiBzb21lIHBsYXRmb3Jtcy4gIE9uIHRoZXNlIHBsYXRmb3JtcywgdGhlIHBnb2ZmIG9mCisJCSAqIGEgbW1hcCgpIHJlcXVlc3QgaXMgdXNlZCB0byBwaWNrIGEgc3VpdGFibGUgdmlydHVhbAorCQkgKiBhZGRyZXNzIGZvciB0aGUgbW1hcCgpIHJlZ2lvbiBzdWNoIHRoYXQgaXQgd2lsbCBub3QKKwkJICogY2F1c2UgY2FjaGUgYWxpYXNpbmcgcHJvYmxlbXMuCisJCSAqCisJCSAqIFRoZXJlZm9yZSwgbWFrZSBzdXJlIHRoZSBTSE1MQkEgcmVsZXZhbnQgYml0cyBvZiB0aGUKKwkJICogaGFzaCB2YWx1ZSB3ZSB1c2UgYXJlIGVxdWFsIHRvIHRob3NlIGluIHRoZSBvcmlnaW5hbAorCQkgKiBrZXJuZWwgdmlydHVhbCBhZGRyZXNzLgorCQkgKi8KKwkJc2hpZnQgPSBiaXRzOworCQlhZGQgfD0gKCh1c2VyX3Rva2VuID4+IFBBR0VfU0hJRlQpICYgKCgxVUwgPDwgYml0cykgLSAxVUwpKTsKKwl9CisKIAlyZXR1cm4gZHJtX2h0X2p1c3RfaW5zZXJ0X3BsZWFzZSgmZGV2LT5tYXBfaGFzaCwgaGFzaCwKIAkJCQkJIHVzZXJfdG9rZW4sIDMyIC0gUEFHRV9TSElGVCAtIDMsCi0JCQkJCSAwLCBEUk1fTUFQX0hBU0hfT0ZGU0VUID4+IFBBR0VfU0hJRlQpOworCQkJCQkgc2hpZnQsIGFkZCk7CiB9CiAKIC8qKgotICogSW9jdGwgdG8gc3BlY2lmeSBhIHJhbmdlIG9mIG1lbW9yeSB0aGF0IGlzIGF2YWlsYWJsZSBmb3IgbWFwcGluZyBieSBhIG5vbi1yb290IHByb2Nlc3MuCi0gKgotICogXHBhcmFtIGlub2RlIGRldmljZSBpbm9kZS4KLSAqIFxwYXJhbSBmaWxlX3ByaXYgRFJNIGZpbGUgcHJpdmF0ZS4KLSAqIFxwYXJhbSBjbWQgY29tbWFuZC4KLSAqIFxwYXJhbSBhcmcgcG9pbnRlciB0byBhIGRybV9tYXAgc3RydWN0dXJlLgotICogXHJldHVybiB6ZXJvIG9uIHN1Y2Nlc3Mgb3IgYSBuZWdhdGl2ZSB2YWx1ZSBvbiBlcnJvci4KKyAqIENvcmUgZnVuY3Rpb24gdG8gY3JlYXRlIGEgcmFuZ2Ugb2YgbWVtb3J5IGF2YWlsYWJsZSBmb3IgbWFwcGluZyBieSBhCisgKiBub24tcm9vdCBwcm9jZXNzLgogICoKICAqIEFkanVzdHMgdGhlIG1lbW9yeSBvZmZzZXQgdG8gaXRzIGFic29sdXRlIHZhbHVlIGFjY29yZGluZyB0byB0aGUgbWFwcGluZwogICogdHlwZS4gIEFkZHMgdGhlIG1hcCB0byB0aGUgbWFwIGxpc3QgZHJtX2RldmljZTo6bWFwbGlzdC4gQWRkcyBNVFJSJ3Mgd2hlcmUKICAqIGFwcGxpY2FibGUgYW5kIGlmIHN1cHBvcnRlZCBieSB0aGUga2VybmVsLgogICovCi1zdGF0aWMgaW50IGRybV9hZGRtYXBfY29yZShzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IG9mZnNldCwKK3N0YXRpYyBpbnQgZHJtX2FkZG1hcF9jb3JlKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LAogCQkJICAgdW5zaWduZWQgaW50IHNpemUsIGVudW0gZHJtX21hcF90eXBlIHR5cGUsCiAJCQkgICBlbnVtIGRybV9tYXBfZmxhZ3MgZmxhZ3MsCiAJCQkgICBzdHJ1Y3QgZHJtX21hcF9saXN0ICoqIG1hcGxpc3QpCiB7Ci0Jc3RydWN0IGRybV9tYXAgKm1hcDsKKwlzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwOwogCXN0cnVjdCBkcm1fbWFwX2xpc3QgKmxpc3Q7CiAJZHJtX2RtYV9oYW5kbGVfdCAqZG1haDsKIAl1bnNpZ25lZCBsb25nIHVzZXJfdG9rZW47CkBAIC0xMjksOSArMTY4LDkgQEAKIAkJZHJtX2ZyZWUobWFwLCBzaXplb2YoKm1hcCksIERSTV9NRU1fTUFQUyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlEUk1fREVCVUcoIm9mZnNldCA9IDB4JTA4bHgsIHNpemUgPSAweCUwOGx4LCB0eXBlID0gJWRcbiIsCi0JCSAgbWFwLT5vZmZzZXQsIG1hcC0+c2l6ZSwgbWFwLT50eXBlKTsKLQlpZiAoKG1hcC0+b2Zmc2V0ICYgKH5QQUdFX01BU0spKSB8fCAobWFwLT5zaXplICYgKH5QQUdFX01BU0spKSkgeworCURSTV9ERUJVRygib2Zmc2V0ID0gMHglMDhsbHgsIHNpemUgPSAweCUwOGx4LCB0eXBlID0gJWRcbiIsCisJCSAgKHVuc2lnbmVkIGxvbmcgbG9uZyltYXAtPm9mZnNldCwgbWFwLT5zaXplLCBtYXAtPnR5cGUpOworCWlmICgobWFwLT5vZmZzZXQgJiAofihyZXNvdXJjZV9zaXplX3QpUEFHRV9NQVNLKSkgfHwgKG1hcC0+c2l6ZSAmICh+UEFHRV9NQVNLKSkpIHsKIAkJZHJtX2ZyZWUobWFwLCBzaXplb2YoKm1hcCksIERSTV9NRU1fTUFQUyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTI1OSw3ICsyOTgsOCBAQAogCQkJZHJtX2ZyZWUobWFwLCBzaXplb2YoKm1hcCksIERSTV9NRU1fTUFQUyk7CiAJCQlyZXR1cm4gLUVQRVJNOwogCQl9Ci0JCURSTV9ERUJVRygiQUdQIG9mZnNldCA9IDB4JTA4bHgsIHNpemUgPSAweCUwOGx4XG4iLCBtYXAtPm9mZnNldCwgbWFwLT5zaXplKTsKKwkJRFJNX0RFQlVHKCJBR1Agb2Zmc2V0ID0gMHglMDhsbHgsIHNpemUgPSAweCUwOGx4XG4iLAorCQkJICAodW5zaWduZWQgbG9uZyBsb25nKW1hcC0+b2Zmc2V0LCBtYXAtPnNpemUpOwogCiAJCWJyZWFrOwogCWNhc2UgX0RSTV9HRU06CkBAIC0zMDksNyArMzQ5LDggQEAKIAkvKiBXZSBkbyBpdCBoZXJlIHNvIHRoYXQgZGV2LT5zdHJ1Y3RfbXV0ZXggcHJvdGVjdHMgdGhlIGluY3JlbWVudCAqLwogCXVzZXJfdG9rZW4gPSAobWFwLT50eXBlID09IF9EUk1fU0hNKSA/ICh1bnNpZ25lZCBsb25nKW1hcC0+aGFuZGxlIDoKIAkJbWFwLT5vZmZzZXQ7Ci0JcmV0ID0gZHJtX21hcF9oYW5kbGUoZGV2LCAmbGlzdC0+aGFzaCwgdXNlcl90b2tlbiwgMCk7CisJcmV0ID0gZHJtX21hcF9oYW5kbGUoZGV2LCAmbGlzdC0+aGFzaCwgdXNlcl90b2tlbiwgMCwKKwkJCSAgICAgKG1hcC0+dHlwZSA9PSBfRFJNX1NITSkpOwogCWlmIChyZXQpIHsKIAkJaWYgKG1hcC0+dHlwZSA9PSBfRFJNX1JFR0lTVEVSUykKIAkJCWlvdW5tYXAobWFwLT5oYW5kbGUpOwpAQCAtMzI3LDkgKzM2OCw5IEBACiAJcmV0dXJuIDA7CiAJfQogCi1pbnQgZHJtX2FkZG1hcChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldiwgdW5zaWduZWQgaW50IG9mZnNldCwKK2ludCBkcm1fYWRkbWFwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LAogCSAgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwgZW51bSBkcm1fbWFwX3R5cGUgdHlwZSwKLQkgICAgICAgZW51bSBkcm1fbWFwX2ZsYWdzIGZsYWdzLCBkcm1fbG9jYWxfbWFwX3QgKiogbWFwX3B0cikKKwkgICAgICAgZW51bSBkcm1fbWFwX2ZsYWdzIGZsYWdzLCBzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqKiBtYXBfcHRyKQogewogCXN0cnVjdCBkcm1fbWFwX2xpc3QgKmxpc3Q7CiAJaW50IHJjOwpAQCAtMzQyLDYgKzM4MywxNyBAQAogCiBFWFBPUlRfU1lNQk9MKGRybV9hZGRtYXApOwogCisvKioKKyAqIElvY3RsIHRvIHNwZWNpZnkgYSByYW5nZSBvZiBtZW1vcnkgdGhhdCBpcyBhdmFpbGFibGUgZm9yIG1hcHBpbmcgYnkgYQorICogbm9uLXJvb3QgcHJvY2Vzcy4KKyAqCisgKiBccGFyYW0gaW5vZGUgZGV2aWNlIGlub2RlLgorICogXHBhcmFtIGZpbGVfcHJpdiBEUk0gZmlsZSBwcml2YXRlLgorICogXHBhcmFtIGNtZCBjb21tYW5kLgorICogXHBhcmFtIGFyZyBwb2ludGVyIHRvIGEgZHJtX21hcCBzdHJ1Y3R1cmUuCisgKiBccmV0dXJuIHplcm8gb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yLgorICoKKyAqLwogaW50IGRybV9hZGRtYXBfaW9jdGwoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwKIAkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKQEAgLTM2NywxOSArNDE5LDEzIEBACiAgKiBSZW1vdmUgYSBtYXAgcHJpdmF0ZSBmcm9tIGxpc3QgYW5kIGRlYWxsb2NhdGUgcmVzb3VyY2VzIGlmIHRoZSBtYXBwaW5nCiAgKiBpc24ndCBpbiB1c2UuCiAgKgotICogXHBhcmFtIGlub2RlIGRldmljZSBpbm9kZS4KLSAqIFxwYXJhbSBmaWxlX3ByaXYgRFJNIGZpbGUgcHJpdmF0ZS4KLSAqIFxwYXJhbSBjbWQgY29tbWFuZC4KLSAqIFxwYXJhbSBhcmcgcG9pbnRlciB0byBhIHN0cnVjdCBkcm1fbWFwIHN0cnVjdHVyZS4KLSAqIFxyZXR1cm4gemVybyBvbiBzdWNjZXNzIG9yIGEgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IuCi0gKgogICogU2VhcmNoZXMgdGhlIG1hcCBvbiBkcm1fZGV2aWNlOjptYXBsaXN0LCByZW1vdmVzIGl0IGZyb20gdGhlIGxpc3QsIHNlZSBpZgogICogaXRzIGJlaW5nIHVzZWQsIGFuZCBmcmVlIGFueSBhc3NvY2lhdGUgcmVzb3VyY2UgKHN1Y2ggYXMgTVRSUidzKSBpZiBpdCdzIG5vdAogICogYmVpbmcgb24gdXNlLgogICoKICAqIFxzYSBkcm1fYWRkbWFwCiAgKi8KLWludCBkcm1fcm1tYXBfbG9ja2VkKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGRybV9sb2NhbF9tYXBfdCAqbWFwKQoraW50IGRybV9ybW1hcF9sb2NrZWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCkKIHsKIAlzdHJ1Y3QgZHJtX21hcF9saXN0ICpyX2xpc3QgPSBOVUxMLCAqbGlzdF90OwogCWRybV9kbWFfaGFuZGxlX3QgZG1haDsKQEAgLTQ0Miw3ICs0ODgsNyBAQAogfQogRVhQT1JUX1NZTUJPTChkcm1fcm1tYXBfbG9ja2VkKTsKIAotaW50IGRybV9ybW1hcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBkcm1fbG9jYWxfbWFwX3QgKm1hcCkKK2ludCBkcm1fcm1tYXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCkKIHsKIAlpbnQgcmV0OwogCkBAIC00NjIsMTIgKzUwOCwxOCBAQAogICogT25lIHVzZSBjYXNlIG1pZ2h0IGJlIGFmdGVyIGFkZG1hcCBpcyBhbGxvd2VkIGZvciBub3JtYWwgdXNlcnMgZm9yIFNITSBhbmQKICAqIGdldHMgdXNlZCBieSBkcml2ZXJzIHRoYXQgdGhlIHNlcnZlciBkb2Vzbid0IG5lZWQgdG8gY2FyZSBhYm91dC4gIFRoaXMgc2VlbXMKICAqIHVubGlrZWx5LgorICoKKyAqIFxwYXJhbSBpbm9kZSBkZXZpY2UgaW5vZGUuCisgKiBccGFyYW0gZmlsZV9wcml2IERSTSBmaWxlIHByaXZhdGUuCisgKiBccGFyYW0gY21kIGNvbW1hbmQuCisgKiBccGFyYW0gYXJnIHBvaW50ZXIgdG8gYSBzdHJ1Y3QgZHJtX21hcCBzdHJ1Y3R1cmUuCisgKiBccmV0dXJuIHplcm8gb24gc3VjY2VzcyBvciBhIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yLgogICovCiBpbnQgZHJtX3JtbWFwX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKIAlzdHJ1Y3QgZHJtX21hcCAqcmVxdWVzdCA9IGRhdGE7Ci0JZHJtX2xvY2FsX21hcF90ICptYXAgPSBOVUxMOworCXN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXAgPSBOVUxMOwogCXN0cnVjdCBkcm1fbWFwX2xpc3QgKnJfbGlzdDsKIAlpbnQgcmV0OwogCkBAIC0xNTM0LDcgKzE1ODYsNyBAQAogCQkJJiYgKGRtYS0+ZmxhZ3MgJiBfRFJNX0RNQV9VU0VfU0cpKQogCQkgICAgfHwgKGRybV9jb3JlX2NoZWNrX2ZlYXR1cmUoZGV2LCBEUklWRVJfRkJfRE1BKQogCQkJJiYgKGRtYS0+ZmxhZ3MgJiBfRFJNX0RNQV9VU0VfRkIpKSkgewotCQkJc3RydWN0IGRybV9tYXAgKm1hcCA9IGRldi0+YWdwX2J1ZmZlcl9tYXA7CisJCQlzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwID0gZGV2LT5hZ3BfYnVmZmVyX21hcDsKIAkJCXVuc2lnbmVkIGxvbmcgdG9rZW4gPSBkZXYtPmFncF9idWZmZXJfdG9rZW47CiAKIAkJCWlmICghbWFwKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2NvbnRleHQuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY29udGV4dC5jCmluZGV4IDgwOWVjMGYuLjdkMWU1M2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fY29udGV4dC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fY29udGV4dC5jCkBAIC0xNDMsNyArMTQzLDcgQEAKIAkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQogewogCXN0cnVjdCBkcm1fY3R4X3ByaXZfbWFwICpyZXF1ZXN0ID0gZGF0YTsKLQlzdHJ1Y3QgZHJtX21hcCAqbWFwOworCXN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXA7CiAJc3RydWN0IGRybV9tYXBfbGlzdCAqX2VudHJ5OwogCiAJbXV0ZXhfbG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwpAQCAtMTg2LDcgKzE4Niw3IEBACiAJCSAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKIAlzdHJ1Y3QgZHJtX2N0eF9wcml2X21hcCAqcmVxdWVzdCA9IGRhdGE7Ci0Jc3RydWN0IGRybV9tYXAgKm1hcCA9IE5VTEw7CisJc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCA9IE5VTEw7CiAJc3RydWN0IGRybV9tYXBfbGlzdCAqcl9saXN0ID0gTlVMTDsKIAogCW11dGV4X2xvY2soJmRldi0+c3RydWN0X211dGV4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2Rydi5jCmluZGV4IGVkMzJlZGIuLmM0YWRhOGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9kcnYuYwpAQCAtMjU0LDE1ICsyNTQsMTkgQEAKIGludCBkcm1faW5pdChzdHJ1Y3QgZHJtX2RyaXZlciAqZHJpdmVyKQogewogCXN0cnVjdCBwY2lfZGV2ICpwZGV2ID0gTlVMTDsKLQlzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGlkOworCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwaWQ7CiAJaW50IGk7CiAKIAlEUk1fREVCVUcoIlxuIik7CiAKIAlJTklUX0xJU1RfSEVBRCgmZHJpdmVyLT5kZXZpY2VfbGlzdCk7CiAKKwlpZiAoZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfTU9ERVNFVCkKKwkJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlci0+cGNpX2RyaXZlcik7CisKKwkvKiBJZiBub3QgdXNpbmcgS01TLCBmYWxsIGJhY2sgdG8gc3RlYWx0aCBtb2RlIG1hbnVhbCBzY2FubmluZy4gKi8KIAlmb3IgKGkgPSAwOyBkcml2ZXItPnBjaV9kcml2ZXIuaWRfdGFibGVbaV0udmVuZG9yICE9IDA7IGkrKykgewotCQlwaWQgPSAoc3RydWN0IHBjaV9kZXZpY2VfaWQgKikmZHJpdmVyLT5wY2lfZHJpdmVyLmlkX3RhYmxlW2ldOworCQlwaWQgPSAmZHJpdmVyLT5wY2lfZHJpdmVyLmlkX3RhYmxlW2ldOwogCiAJCS8qIExvb3AgYXJvdW5kIHNldHRpbmcgdXAgYSBEUk0gZGV2aWNlIGZvciBlYWNoIFBDSSBkZXZpY2UKIAkJICogbWF0Y2hpbmcgb3VyIElEIGFuZCBkZXZpY2UgY2xhc3MuICBJZiB3ZSBoYWQgdGhlIGludGVybmFsCkBAIC0yODcsNjggKzI5MSwxNyBAQAogCiBFWFBPUlRfU1lNQk9MKGRybV9pbml0KTsKIAotLyoqCi0gKiBDYWxsZWQgdmlhIGNsZWFudXBfbW9kdWxlKCkgYXQgbW9kdWxlIHVubG9hZCB0aW1lLgotICoKLSAqIENsZWFucyB1cCBhbGwgRFJNIGRldmljZSwgY2FsbGluZyBkcm1fbGFzdGNsb3NlKCkuCi0gKgotICogXHNhIGRybV9pbml0Ci0gKi8KLXN0YXRpYyB2b2lkIGRybV9jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQotewotCXN0cnVjdCBkcm1fbWFwX2xpc3QgKnJfbGlzdCwgKmxpc3RfdGVtcDsKLQlEUk1fREVCVUcoIlxuIik7Ci0KLQlpZiAoIWRldikgewotCQlEUk1fRVJST1IoImNsZWFudXAgY2FsbGVkIG5vIGRldlxuIik7Ci0JCXJldHVybjsKLQl9Ci0KLQlkcm1fdmJsYW5rX2NsZWFudXAoZGV2KTsKLQotCWRybV9sYXN0Y2xvc2UoZGV2KTsKLQotCWlmIChkcm1fY29yZV9oYXNfTVRSUihkZXYpICYmIGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJgotCSAgICBkZXYtPmFncCAmJiBkZXYtPmFncC0+YWdwX210cnIgPj0gMCkgewotCQlpbnQgcmV0dmFsOwotCQlyZXR2YWwgPSBtdHJyX2RlbChkZXYtPmFncC0+YWdwX210cnIsCi0JCQkJICBkZXYtPmFncC0+YWdwX2luZm8uYXBlcl9iYXNlLAotCQkJCSAgZGV2LT5hZ3AtPmFncF9pbmZvLmFwZXJfc2l6ZSAqIDEwMjQgKiAxMDI0KTsKLQkJRFJNX0RFQlVHKCJtdHJyX2RlbD0lZFxuIiwgcmV0dmFsKTsKLQl9Ci0KLQlpZiAoZGV2LT5kcml2ZXItPnVubG9hZCkKLQkJZGV2LT5kcml2ZXItPnVubG9hZChkZXYpOwotCi0JaWYgKGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJiBkZXYtPmFncCkgewotCQlkcm1fZnJlZShkZXYtPmFncCwgc2l6ZW9mKCpkZXYtPmFncCksIERSTV9NRU1fQUdQTElTVFMpOwotCQlkZXYtPmFncCA9IE5VTEw7Ci0JfQotCi0JZHJtX2h0X3JlbW92ZSgmZGV2LT5tYXBfaGFzaCk7Ci0JZHJtX2N0eGJpdG1hcF9jbGVhbnVwKGRldik7Ci0KLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocl9saXN0LCBsaXN0X3RlbXAsICZkZXYtPm1hcGxpc3QsIGhlYWQpCi0JCWRybV9ybW1hcChkZXYsIHJfbGlzdC0+bWFwKTsKLQotCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQotCQlkcm1fcHV0X21pbm9yKCZkZXYtPmNvbnRyb2wpOwotCi0JaWYgKGRldi0+ZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfR0VNKQotCQlkcm1fZ2VtX2Rlc3Ryb3koZGV2KTsKLQotCWRybV9wdXRfbWlub3IoJmRldi0+cHJpbWFyeSk7Ci0JaWYgKGRybV9wdXRfZGV2KGRldikpCi0JCURSTV9FUlJPUigiQ2Fubm90IHVubG9hZCBtb2R1bGVcbiIpOwotfQotCiB2b2lkIGRybV9leGl0KHN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIpCiB7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiwgKnRtcDsKIAlEUk1fREVCVUcoIlxuIik7CiAKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZGV2LCB0bXAsICZkcml2ZXItPmRldmljZV9saXN0LCBkcml2ZXJfaXRlbSkKLQkJZHJtX2NsZWFudXAoZGV2KTsKKwlpZiAoZHJpdmVyLT5kcml2ZXJfZmVhdHVyZXMgJiBEUklWRVJfTU9ERVNFVCkgeworCQlwY2lfdW5yZWdpc3Rlcl9kcml2ZXIoJmRyaXZlci0+cGNpX2RyaXZlcik7CisJfSBlbHNlIHsKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGRldiwgdG1wLCAmZHJpdmVyLT5kZXZpY2VfbGlzdCwgZHJpdmVyX2l0ZW0pCisJCQlkcm1fcHV0X2RldihkZXYpOworCX0KIAogCURSTV9JTkZPKCJNb2R1bGUgdW5sb2FkZWRcbiIpOwogfQpAQCAtNDY4LDYgKzQyMSw3IEBACiAJZHJtX2lvY3RsX3QgKmZ1bmM7CiAJdW5zaWduZWQgaW50IG5yID0gRFJNX0lPQ1RMX05SKGNtZCk7CiAJaW50IHJldGNvZGUgPSAtRUlOVkFMOworCWNoYXIgc3RhY2tfa2RhdGFbMTI4XTsKIAljaGFyICprZGF0YSA9IE5VTEw7CiAKIAlhdG9taWNfaW5jKCZkZXYtPmlvY3RsX2NvdW50KTsKQEAgLTUwNiwxMCArNDYwLDE0IEBACiAJCXJldGNvZGUgPSAtRUFDQ0VTOwogCX0gZWxzZSB7CiAJCWlmIChjbWQgJiAoSU9DX0lOIHwgSU9DX09VVCkpIHsKLQkJCWtkYXRhID0ga21hbGxvYyhfSU9DX1NJWkUoY21kKSwgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAoIWtkYXRhKSB7Ci0JCQkJcmV0Y29kZSA9IC1FTk9NRU07Ci0JCQkJZ290byBlcnJfaTE7CisJCQlpZiAoX0lPQ19TSVpFKGNtZCkgPD0gc2l6ZW9mKHN0YWNrX2tkYXRhKSkgeworCQkJCWtkYXRhID0gc3RhY2tfa2RhdGE7CisJCQl9IGVsc2UgeworCQkJCWtkYXRhID0ga21hbGxvYyhfSU9DX1NJWkUoY21kKSwgR0ZQX0tFUk5FTCk7CisJCQkJaWYgKCFrZGF0YSkgeworCQkJCQlyZXRjb2RlID0gLUVOT01FTTsKKwkJCQkJZ290byBlcnJfaTE7CisJCQkJfQogCQkJfQogCQl9CiAKQEAgLTUzMCw3ICs0ODgsNyBAQAogCX0KIAogICAgICAgZXJyX2kxOgotCWlmIChrZGF0YSkKKwlpZiAoa2RhdGEgIT0gc3RhY2tfa2RhdGEpCiAJCWtmcmVlKGtkYXRhKTsKIAlhdG9taWNfZGVjKCZkZXYtPmlvY3RsX2NvdW50KTsKIAlpZiAocmV0Y29kZSkKQEAgLTU0MCw3ICs0OTgsNyBAQAogCiBFWFBPUlRfU1lNQk9MKGRybV9pb2N0bCk7CiAKLWRybV9sb2NhbF9tYXBfdCAqZHJtX2dldHNhcmVhKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCitzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqZHJtX2dldHNhcmVhKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGRybV9tYXBfbGlzdCAqZW50cnk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZWRpZC5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKaW5kZXggYTgzOWEyOC4uYzY3NDAwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9lZGlkLmMKQEAgLTU1MCwxMSArNTUwLDIwIEBACiB9CiAKICNkZWZpbmUgRERDX0FERFIgMHg1MAotCi11bnNpZ25lZCBjaGFyICpkcm1fZG9fcHJvYmVfZGRjX2VkaWQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorLyoqCisgKiBHZXQgRURJRCBpbmZvcm1hdGlvbiB2aWEgSTJDLgorICoKKyAqIFxwYXJhbSBhZGFwdGVyIDogaTJjIGRldmljZSBhZGFwdG9yCisgKiBccGFyYW0gYnVmICAgICA6IEVESUQgZGF0YSBidWZmZXIgdG8gYmUgZmlsbGVkCisgKiBccGFyYW0gbGVuICAgICA6IEVESUQgZGF0YSBidWZmZXIgbGVuZ3RoCisgKiBccmV0dXJuIDAgb24gc3VjY2VzcyBvciAtMSBvbiBmYWlsdXJlLgorICoKKyAqIFRyeSB0byBmZXRjaCBFRElEIGluZm9ybWF0aW9uIGJ5IGNhbGxpbmcgaTJjIGRyaXZlciBmdW5jdGlvbi4KKyAqLworaW50IGRybV9kb19wcm9iZV9kZGNfZWRpZChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIsCisJCQkgIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAl1bnNpZ25lZCBjaGFyIHN0YXJ0ID0gMHgwOwotCXVuc2lnbmVkIGNoYXIgKmJ1ZiA9IGttYWxsb2MoRURJRF9MRU5HVEgsIEdGUF9LRVJORUwpOwogCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSA9IHsKIAkJewogCQkJLmFkZHIJPSBERENfQUREUiwKQEAgLTU2NCwzMSArNTczLDM2IEBACiAJCX0sIHsKIAkJCS5hZGRyCT0gRERDX0FERFIsCiAJCQkuZmxhZ3MJPSBJMkNfTV9SRCwKLQkJCS5sZW4JPSBFRElEX0xFTkdUSCwKKwkJCS5sZW4JPSBsZW4sCiAJCQkuYnVmCT0gYnVmLAogCQl9CiAJfTsKIAotCWlmICghYnVmKSB7Ci0JCWRldl93YXJuKCZhZGFwdGVyLT5kZXYsICJ1bmFibGUgdG8gYWxsb2NhdGUgbWVtb3J5IGZvciBFRElEICIKLQkJCSAiYmxvY2suXG4iKTsKLQkJcmV0dXJuIE5VTEw7Ci0JfQotCiAJaWYgKGkyY190cmFuc2ZlcihhZGFwdGVyLCBtc2dzLCAyKSA9PSAyKQotCQlyZXR1cm4gYnVmOworCQlyZXR1cm4gMDsKIAogCWRldl9pbmZvKCZhZGFwdGVyLT5kZXYsICJ1bmFibGUgdG8gcmVhZCBFRElEIGJsb2NrLlxuIik7Ci0Ja2ZyZWUoYnVmKTsKLQlyZXR1cm4gTlVMTDsKKwlyZXR1cm4gLTE7CiB9CiBFWFBPUlRfU1lNQk9MKGRybV9kb19wcm9iZV9kZGNfZWRpZCk7CiAKLXN0YXRpYyB1bnNpZ25lZCBjaGFyICpkcm1fZGRjX3JlYWQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQorLyoqCisgKiBHZXQgRURJRCBpbmZvcm1hdGlvbi4KKyAqCisgKiBccGFyYW0gYWRhcHRlciA6IGkyYyBkZXZpY2UgYWRhcHRvci4KKyAqIFxwYXJhbSBidWYgICAgIDogRURJRCBkYXRhIGJ1ZmZlciB0byBiZSBmaWxsZWQKKyAqIFxwYXJhbSBsZW4gICAgIDogRURJRCBkYXRhIGJ1ZmZlciBsZW5ndGgKKyAqIFxyZXR1cm4gMCBvbiBzdWNjZXNzIG9yIC0xIG9uIGZhaWx1cmUuCisgKgorICogSW5pdGlhbGl6ZSBEREMsIHRoZW4gZmV0Y2ggRURJRCBpbmZvcm1hdGlvbgorICogYnkgY2FsbGluZyBkcm1fZG9fcHJvYmVfZGRjX2VkaWQgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBpbnQgZHJtX2RkY19yZWFkKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKKwkJCXVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGxlbikKIHsKIAlzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgKmFsZ29fZGF0YSA9IGFkYXB0ZXItPmFsZ29fZGF0YTsKLQl1bnNpZ25lZCBjaGFyICplZGlkID0gTlVMTDsKIAlpbnQgaSwgajsKKwlpbnQgcmV0ID0gLTE7CiAKIAlhbGdvX2RhdGEtPnNldHNjbChhbGdvX2RhdGEtPmRhdGEsIDEpOwogCkBAIC02MTYsNyArNjMwLDcgQEAKIAkJbXNsZWVwKDE1KTsKIAogCQkvKiBEbyB0aGUgcmVhbCB3b3JrICovCi0JCWVkaWQgPSBkcm1fZG9fcHJvYmVfZGRjX2VkaWQoYWRhcHRlcik7CisJCXJldCA9IGRybV9kb19wcm9iZV9kZGNfZWRpZChhZGFwdGVyLCBidWYsIGxlbik7CiAJCWFsZ29fZGF0YS0+c2V0c2RhKGFsZ29fZGF0YS0+ZGF0YSwgMCk7CiAJCWFsZ29fZGF0YS0+c2V0c2NsKGFsZ29fZGF0YS0+ZGF0YSwgMCk7CiAJCW1zbGVlcCgxNSk7CkBAIC02MzIsNyArNjQ2LDcgQEAKIAkJbXNsZWVwKDE1KTsKIAkJYWxnb19kYXRhLT5zZXRzY2woYWxnb19kYXRhLT5kYXRhLCAwKTsKIAkJYWxnb19kYXRhLT5zZXRzZGEoYWxnb19kYXRhLT5kYXRhLCAwKTsKLQkJaWYgKGVkaWQpCisJCWlmIChyZXQgPT0gMCkKIAkJCWJyZWFrOwogCX0KIAkvKiBSZWxlYXNlIHRoZSBEREMgbGluZXMgd2hlbiBkb25lIG9yIHRoZSBBcHBsZSBDaW5lbWEgSEQgZGlzcGxheQpAQCAtNjQxLDkgKzY1NSwzMSBAQAogCWFsZ29fZGF0YS0+c2V0c2RhKGFsZ29fZGF0YS0+ZGF0YSwgMSk7CiAJYWxnb19kYXRhLT5zZXRzY2woYWxnb19kYXRhLT5kYXRhLCAxKTsKIAotCXJldHVybiBlZGlkOworCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyBpbnQgZHJtX2RkY19yZWFkX2VkaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKKwkJCSAgICAgc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyLAorCQkJICAgICBjaGFyICpidWYsIGludCBsZW4pCit7CisJaW50IHJldDsKKworCXJldCA9IGRybV9kZGNfcmVhZChhZGFwdGVyLCBidWYsIGxlbik7CisJaWYgKHJldCAhPSAwKSB7CisJCWRldl9pbmZvKCZjb25uZWN0b3ItPmRldi0+cGRldi0+ZGV2LCAiJXM6IG5vIEVESUQgZGF0YVxuIiwKKwkJCSBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOworCQlnb3RvIGVuZDsKKwl9CisJaWYgKCFlZGlkX2lzX3ZhbGlkKChzdHJ1Y3QgZWRpZCAqKWJ1ZikpIHsKKwkJZGV2X3dhcm4oJmNvbm5lY3Rvci0+ZGV2LT5wZGV2LT5kZXYsICIlczogRURJRCBpbnZhbGlkLlxuIiwKKwkJCSBkcm1fZ2V0X2Nvbm5lY3Rvcl9uYW1lKGNvbm5lY3RvcikpOworCQlyZXQgPSAtMTsKKwl9CitlbmQ6CisJcmV0dXJuIHJldDsKK30KKworI2RlZmluZSBNQVhfRURJRF9FWFRfTlVNIDQKIC8qKgogICogZHJtX2dldF9lZGlkIC0gZ2V0IEVESUQgZGF0YSwgaWYgYXZhaWxhYmxlCiAgKiBAY29ubmVjdG9yOiBjb25uZWN0b3Igd2UncmUgcHJvYmluZwpAQCAtNjU2LDI3ICs2OTIsMTE4IEBACiBzdHJ1Y3QgZWRpZCAqZHJtX2dldF9lZGlkKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsCiAJCQkgIHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKIHsKKwlpbnQgcmV0OwogCXN0cnVjdCBlZGlkICplZGlkOwogCi0JZWRpZCA9IChzdHJ1Y3QgZWRpZCAqKWRybV9kZGNfcmVhZChhZGFwdGVyKTsKLQlpZiAoIWVkaWQpIHsKLQkJZGV2X2luZm8oJmNvbm5lY3Rvci0+ZGV2LT5wZGV2LT5kZXYsICIlczogbm8gRURJRCBkYXRhXG4iLAotCQkJIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7Ci0JCXJldHVybiBOVUxMOworCWVkaWQgPSBrbWFsbG9jKEVESURfTEVOR1RIICogKE1BWF9FRElEX0VYVF9OVU0gKyAxKSwKKwkJICAgICAgIEdGUF9LRVJORUwpOworCWlmIChlZGlkID09IE5VTEwpIHsKKwkJZGV2X3dhcm4oJmNvbm5lY3Rvci0+ZGV2LT5wZGV2LT5kZXYsCisJCQkgIkZhaWxlZCB0byBhbGxvY2F0ZSBFRElEXG4iKTsKKwkJZ290byBlbmQ7CiAJfQotCWlmICghZWRpZF9pc192YWxpZChlZGlkKSkgewotCQlkZXZfd2FybigmY29ubmVjdG9yLT5kZXYtPnBkZXYtPmRldiwgIiVzOiBFRElEIGludmFsaWQuXG4iLAotCQkJIGRybV9nZXRfY29ubmVjdG9yX25hbWUoY29ubmVjdG9yKSk7Ci0JCWtmcmVlKGVkaWQpOwotCQlyZXR1cm4gTlVMTDsKKworCS8qIFJlYWQgZmlyc3QgRURJRCBibG9jayAqLworCXJldCA9IGRybV9kZGNfcmVhZF9lZGlkKGNvbm5lY3RvciwgYWRhcHRlciwKKwkJCQkodW5zaWduZWQgY2hhciAqKWVkaWQsIEVESURfTEVOR1RIKTsKKwlpZiAocmV0ICE9IDApCisJCWdvdG8gY2xlYW5fdXA7CisKKwkvKiBUaGVyZSBhcmUgRURJRCBleHRlbnNpb25zIHRvIGJlIHJlYWQgKi8KKwlpZiAoZWRpZC0+ZXh0ZW5zaW9ucyAhPSAwKSB7CisJCWludCBlZGlkX2V4dF9udW0gPSBlZGlkLT5leHRlbnNpb25zOworCisJCWlmIChlZGlkX2V4dF9udW0gPiBNQVhfRURJRF9FWFRfTlVNKSB7CisJCQlkZXZfd2FybigmY29ubmVjdG9yLT5kZXYtPnBkZXYtPmRldiwKKwkJCQkgIlRoZSBudW1iZXIgb2YgZXh0ZW5zaW9uKCVkKSBpcyAiCisJCQkJICJvdmVyIG1heCAoJWQpLCBhY3R1YWxseSByZWFkIG51bWJlciAoJWQpXG4iLAorCQkJCSBlZGlkX2V4dF9udW0sIE1BWF9FRElEX0VYVF9OVU0sCisJCQkJIE1BWF9FRElEX0VYVF9OVU0pOworCQkJLyogUmVzZXQgRURJRCBleHRlbnNpb24gbnVtYmVyIHRvIGJlIHJlYWQgKi8KKwkJCWVkaWRfZXh0X251bSA9IE1BWF9FRElEX0VYVF9OVU07CisJCX0KKwkJLyogUmVhZCBFRElEIGluY2x1ZGluZyBleHRlbnNpb25zIHRvbyAqLworCQlyZXQgPSBkcm1fZGRjX3JlYWRfZWRpZChjb25uZWN0b3IsIGFkYXB0ZXIsIChjaGFyICopZWRpZCwKKwkJCQkJRURJRF9MRU5HVEggKiAoZWRpZF9leHRfbnVtICsgMSkpOworCQlpZiAocmV0ICE9IDApCisJCQlnb3RvIGNsZWFuX3VwOworCiAJfQogCiAJY29ubmVjdG9yLT5kaXNwbGF5X2luZm8ucmF3X2VkaWQgPSAoY2hhciAqKWVkaWQ7CisJZ290byBlbmQ7CiAKK2NsZWFuX3VwOgorCWtmcmVlKGVkaWQpOworCWVkaWQgPSBOVUxMOworZW5kOgogCXJldHVybiBlZGlkOworCiB9CiBFWFBPUlRfU1lNQk9MKGRybV9nZXRfZWRpZCk7CiAKKyNkZWZpbmUgSERNSV9JREVOVElGSUVSIDB4MDAwQzAzCisjZGVmaW5lIFZFTkRPUl9CTE9DSyAgICAweDAzCisvKioKKyAqIGRybV9kZXRlY3RfaGRtaV9tb25pdG9yIC0gZGV0ZWN0IHdoZXRoZXIgbW9uaXRvciBpcyBoZG1pLgorICogQGVkaWQ6IG1vbml0b3IgRURJRCBpbmZvcm1hdGlvbgorICoKKyAqIFBhcnNlIHRoZSBDRUEgZXh0ZW5zaW9uIGFjY29yZGluZyB0byBDRUEtODYxLUIuCisgKiBSZXR1cm4gdHJ1ZSBpZiBIRE1JLCBmYWxzZSBpZiBub3Qgb3IgdW5rbm93bi4KKyAqLworYm9vbCBkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihzdHJ1Y3QgZWRpZCAqZWRpZCkKK3sKKwljaGFyICplZGlkX2V4dCA9IE5VTEw7CisJaW50IGksIGhkbWlfaWQsIGVkaWRfZXh0X251bTsKKwlpbnQgc3RhcnRfb2Zmc2V0LCBlbmRfb2Zmc2V0OworCWJvb2wgaXNfaGRtaSA9IGZhbHNlOworCisJLyogTm8gRURJRCBvciBFRElEIGV4dGVuc2lvbnMgKi8KKwlpZiAoZWRpZCA9PSBOVUxMIHx8IGVkaWQtPmV4dGVuc2lvbnMgPT0gMCkKKwkJZ290byBlbmQ7CisKKwkvKiBDaG9zZSByZWFsIEVESUQgZXh0ZW5zaW9uIG51bWJlciAqLworCWVkaWRfZXh0X251bSA9IGVkaWQtPmV4dGVuc2lvbnMgPiBNQVhfRURJRF9FWFRfTlVNID8KKwkJICAgICAgIE1BWF9FRElEX0VYVF9OVU0gOiBlZGlkLT5leHRlbnNpb25zOworCisJLyogRmluZCBDRUEgZXh0ZW5zaW9uICovCisJZm9yIChpID0gMDsgaSA8IGVkaWRfZXh0X251bTsgaSsrKSB7CisJCWVkaWRfZXh0ID0gKGNoYXIgKillZGlkICsgRURJRF9MRU5HVEggKiAoaSArIDEpOworCQkvKiBUaGlzIGJsb2NrIGlzIENFQSBleHRlbnNpb24gKi8KKwkJaWYgKGVkaWRfZXh0WzBdID09IDB4MDIpCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSA9PSBlZGlkX2V4dF9udW0pCisJCWdvdG8gZW5kOworCisJLyogRGF0YSBibG9jayBvZmZzZXQgaW4gQ0VBIGV4dGVuc2lvbiBibG9jayAqLworCXN0YXJ0X29mZnNldCA9IDQ7CisJZW5kX29mZnNldCA9IGVkaWRfZXh0WzJdOworCisJLyoKKwkgKiBCZWNhdXNlIEhETUkgaWRlbnRpZmllciBpcyBpbiBWZW5kb3IgU3BlY2lmaWMgQmxvY2ssCisJICogc2VhcmNoIGl0IGZyb20gYWxsIGRhdGEgYmxvY2tzIG9mIENFQSBleHRlbnNpb24uCisJICovCisJZm9yIChpID0gc3RhcnRfb2Zmc2V0OyBpIDwgZW5kX29mZnNldDsKKwkJLyogSW5jcmVhc2VkIGJ5IGRhdGEgYmxvY2sgbGVuICovCisJCWkgKz0gKChlZGlkX2V4dFtpXSAmIDB4MWYpICsgMSkpIHsKKwkJLyogRmluZCB2ZW5kb3Igc3BlY2lmaWMgYmxvY2sgKi8KKwkJaWYgKChlZGlkX2V4dFtpXSA+PiA1KSA9PSBWRU5ET1JfQkxPQ0spIHsKKwkJCWhkbWlfaWQgPSBlZGlkX2V4dFtpICsgMV0gfCAoZWRpZF9leHRbaSArIDJdIDw8IDgpIHwKKwkJCQkgIGVkaWRfZXh0W2kgKyAzXSA8PCAxNjsKKwkJCS8qIEZpbmQgSERNSSBpZGVudGlmaWVyICovCisJCQlpZiAoaGRtaV9pZCA9PSBIRE1JX0lERU5USUZJRVIpCisJCQkJaXNfaGRtaSA9IHRydWU7CisJCQlicmVhazsKKwkJfQorCX0KKworZW5kOgorCXJldHVybiBpc19oZG1pOworfQorRVhQT1JUX1NZTUJPTChkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcik7CisKIC8qKgogICogZHJtX2FkZF9lZGlkX21vZGVzIC0gYWRkIG1vZGVzIGZyb20gRURJRCBkYXRhLCBpZiBhdmFpbGFibGUKICAqIEBjb25uZWN0b3I6IGNvbm5lY3RvciB3ZSdyZSBwcm9iaW5nCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2ZvcHMuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jCmluZGV4IGUxM2NiNjIuLjA5YTM1NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fZm9wcy5jCkBAIC0yNzQsNiArMjc0LDcgQEAKIAkJLyogY3JlYXRlIGEgbmV3IG1hc3RlciAqLwogCQlwcml2LT5taW5vci0+bWFzdGVyID0gZHJtX21hc3Rlcl9jcmVhdGUocHJpdi0+bWlub3IpOwogCQlpZiAoIXByaXYtPm1pbm9yLT5tYXN0ZXIpIHsKKwkJCW11dGV4X3VubG9jaygmZGV2LT5zdHJ1Y3RfbXV0ZXgpOwogCQkJcmV0ID0gLUVOT01FTTsKIAkJCWdvdG8gb3V0X2ZyZWU7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2dlbS5jCmluZGV4IDg4ZDMzNjguLmMxMTczZDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9nZW0uYwpAQCAtNTAyLDcgKzUwMiw3IEBACiAJc3RydWN0IGRybV9maWxlICpwcml2ID0gZmlscC0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwcml2LT5taW5vci0+ZGV2OwogCXN0cnVjdCBkcm1fZ2VtX21tICptbSA9IGRldi0+bW1fcHJpdmF0ZTsKLQlzdHJ1Y3QgZHJtX21hcCAqbWFwID0gTlVMTDsKKwlzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwID0gTlVMTDsKIAlzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKm9iajsKIAlzdHJ1Y3QgZHJtX2hhc2hfaXRlbSAqaGFzaDsKIAl1bnNpZ25lZCBsb25nIHByb3Q7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2luZm8uYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faW5mby5jCmluZGV4IDFiNjk5NzYuLmYwZjZjNmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1faW5mby5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faW5mby5jCkBAIC03Miw3ICs3Miw3IEBACiB7CiAJc3RydWN0IGRybV9pbmZvX25vZGUgKm5vZGUgPSAoc3RydWN0IGRybV9pbmZvX25vZGUgKikgbS0+cHJpdmF0ZTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gbm9kZS0+bWlub3ItPmRldjsKLQlzdHJ1Y3QgZHJtX21hcCAqbWFwOworCXN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXA7CiAJc3RydWN0IGRybV9tYXBfbGlzdCAqcl9saXN0OwogCiAJLyogSGFyZGNvZGVkIGZyb20gX0RSTV9GUkFNRV9CVUZGRVIsCkBAIC05NCw5ICs5NCw5IEBACiAJCWVsc2UKIAkJCXR5cGUgPSB0eXBlc1ttYXAtPnR5cGVdOwogCi0JCXNlcV9wcmludGYobSwgIiU0ZCAweCUwOGx4IDB4JTA4bHggJTQuNHMgIDB4JTAyeCAweCUwOGx4ICIsCisJCXNlcV9wcmludGYobSwgIiU0ZCAweCUwMTZsbHggMHglMDhseCAlNC40cyAgMHglMDJ4IDB4JTA4bHggIiwKIAkJCSAgIGksCi0JCQkgICBtYXAtPm9mZnNldCwKKwkJCSAgICh1bnNpZ25lZCBsb25nIGxvbmcpbWFwLT5vZmZzZXQsCiAJCQkgICBtYXAtPnNpemUsIHR5cGUsIG1hcC0+ZmxhZ3MsCiAJCQkgICAodW5zaWduZWQgbG9uZykgcl9saXN0LT51c2VyX3Rva2VuKTsKIAkJaWYgKG1hcC0+bXRyciA8IDApCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX2lvYzMyLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX2lvYzMyLmMKaW5kZXggOTIwYjcyZi4uMjgyZDlmZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9pb2MzMi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1faW9jMzIuYwpAQCAtOTU0LDYgKzk1NCw3IEBACiAJCQkgRFJNX0lPQ1RMX1NHX0ZSRUUsICh1bnNpZ25lZCBsb25nKXJlcXVlc3QpOwogfQogCisjaWYgZGVmaW5lZChDT05GSUdfWDg2KSB8fCBkZWZpbmVkKENPTkZJR19JQTY0KQogdHlwZWRlZiBzdHJ1Y3QgZHJtX3VwZGF0ZV9kcmF3MzIgewogCWRybV9kcmF3YWJsZV90IGhhbmRsZTsKIAl1bnNpZ25lZCBpbnQgdHlwZTsKQEAgLTk4NCw2ICs5ODUsNyBAQAogCQkJRFJNX0lPQ1RMX1VQREFURV9EUkFXLCAodW5zaWduZWQgbG9uZylyZXF1ZXN0KTsKIAlyZXR1cm4gZXJyOwogfQorI2VuZGlmCiAKIHN0cnVjdCBkcm1fd2FpdF92YmxhbmtfcmVxdWVzdDMyIHsKIAllbnVtIGRybV92Ymxhbmtfc2VxX3R5cGUgdHlwZTsKQEAgLTEwNjYsNyArMTA2OCw5IEBACiAjZW5kaWYKIAlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9TR19BTExPQzMyKV0gPSBjb21wYXRfZHJtX3NnX2FsbG9jLAogCVtEUk1fSU9DVExfTlIoRFJNX0lPQ1RMX1NHX0ZSRUUzMildID0gY29tcGF0X2RybV9zZ19mcmVlLAorI2lmIGRlZmluZWQoQ09ORklHX1g4NikgfHwgZGVmaW5lZChDT05GSUdfSUE2NCkKIAlbRFJNX0lPQ1RMX05SKERSTV9JT0NUTF9VUERBVEVfRFJBVzMyKV0gPSBjb21wYXRfZHJtX3VwZGF0ZV9kcmF3LAorI2VuZGlmCiAJW0RSTV9JT0NUTF9OUihEUk1fSU9DVExfV0FJVF9WQkxBTkszMildID0gY29tcGF0X2RybV93YWl0X3ZibGFuaywKIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbWVtb3J5LmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX21lbW9yeS5jCmluZGV4IGJjYzg2OWIuLjBjNzA3ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fbWVtb3J5LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9tZW1vcnkuYwpAQCAtMTU5LDcgKzE1OSw3IEBACiAKICNlbmRpZgkJCQkvKiBkZWJ1Z19tZW1vcnkgKi8KIAotdm9pZCBkcm1fY29yZV9pb3JlbWFwKHN0cnVjdCBkcm1fbWFwICptYXAsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit2b2lkIGRybV9jb3JlX2lvcmVtYXAoc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCwgc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKIAlpZiAoZHJtX2NvcmVfaGFzX0FHUChkZXYpICYmCiAJICAgIGRldi0+YWdwICYmIGRldi0+YWdwLT5jYW50X3VzZV9hcGVydHVyZSAmJiBtYXAtPnR5cGUgPT0gX0RSTV9BR1ApCkBAIC0xNjksNyArMTY5LDcgQEAKIH0KIEVYUE9SVF9TWU1CT0woZHJtX2NvcmVfaW9yZW1hcCk7CiAKLXZvaWQgZHJtX2NvcmVfaW9yZW1hcF93YyhzdHJ1Y3QgZHJtX21hcCAqbWFwLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQordm9pZCBkcm1fY29yZV9pb3JlbWFwX3djKHN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXAsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJaWYgKGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJgogCSAgICBkZXYtPmFncCAmJiBkZXYtPmFncC0+Y2FudF91c2VfYXBlcnR1cmUgJiYgbWFwLT50eXBlID09IF9EUk1fQUdQKQpAQCAtMTc5LDcgKzE3OSw3IEBACiB9CiBFWFBPUlRfU1lNQk9MKGRybV9jb3JlX2lvcmVtYXBfd2MpOwogCi12b2lkIGRybV9jb3JlX2lvcmVtYXBmcmVlKHN0cnVjdCBkcm1fbWFwICptYXAsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit2b2lkIGRybV9jb3JlX2lvcmVtYXBmcmVlKHN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXAsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCiB7CiAJaWYgKCFtYXAtPmhhbmRsZSB8fCAhbWFwLT5zaXplKQogCQlyZXR1cm47CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3Byb2MuYyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJvYy5jCmluZGV4IDliM2M1YWYuLmJhZTUzOTEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJvYy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fcHJvYy5jCkBAIC00MCw3ICs0MCw2IEBACiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KICNpbmNsdWRlICJkcm1QLmgiCiAKLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogSW5pdGlhbGl6YXRpb24sIGV0Yy4KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3R1Yi5jIGIvZHJpdmVycy9ncHUvZHJtL2RybV9zdHViLmMKaW5kZXggNDhmMzNiZS4uZDAwOTY2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9zdHViLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2RybV9zdHViLmMKQEAgLTM4MSw2ICszODEsNyBAQAogCX0KIAogCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKSB7CisJCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBkZXYpOwogCQlyZXQgPSBkcm1fZ2V0X21pbm9yKGRldiwgJmRldi0+Y29udHJvbCwgRFJNX01JTk9SX0NPTlRST0wpOwogCQlpZiAocmV0KQogCQkJZ290byBlcnJfZzI7CkBAIC00MDQsOSArNDA1LDkgQEAKIAogCWxpc3RfYWRkX3RhaWwoJmRldi0+ZHJpdmVyX2l0ZW0sICZkcml2ZXItPmRldmljZV9saXN0KTsKIAotCURSTV9JTkZPKCJJbml0aWFsaXplZCAlcyAlZC4lZC4lZCAlcyBvbiBtaW5vciAlZFxuIiwKKwlEUk1fSU5GTygiSW5pdGlhbGl6ZWQgJXMgJWQuJWQuJWQgJXMgZm9yICVzIG9uIG1pbm9yICVkXG4iLAogCQkgZHJpdmVyLT5uYW1lLCBkcml2ZXItPm1ham9yLCBkcml2ZXItPm1pbm9yLCBkcml2ZXItPnBhdGNobGV2ZWwsCi0JCSBkcml2ZXItPmRhdGUsIGRldi0+cHJpbWFyeS0+aW5kZXgpOworCQkgZHJpdmVyLT5kYXRlLCBwY2lfbmFtZShwZGV2KSwgZGV2LT5wcmltYXJ5LT5pbmRleCk7CiAKIAlyZXR1cm4gMDsKIApAQCAtNDE4LDI5ICs0MTksNyBAQAogCWRybV9mcmVlKGRldiwgc2l6ZW9mKCpkZXYpLCBEUk1fTUVNX1NUVUIpOwogCXJldHVybiByZXQ7CiB9Ci0KLS8qKgotICogUHV0IGEgZGV2aWNlIG1pbm9yIG51bWJlci4KLSAqCi0gKiBccGFyYW0gZGV2IGRldmljZSBkYXRhIHN0cnVjdHVyZQotICogXHJldHVybiBhbHdheXMgemVybwotICoKLSAqIENsZWFucyB1cCB0aGUgcHJvYyByZXNvdXJjZXMuIElmIGl0IGlzIHRoZSBsYXN0IG1pbm9yIHRoZW4gcmVsZWFzZSB0aGUgZm9yZWlnbgotICogImRybSIgZGF0YSwgb3RoZXJ3aXNlIHVucmVnaXN0ZXJzIHRoZSAiZHJtIiBkYXRhLCBmcmVlcyB0aGUgZGV2IGxpc3QgYW5kCi0gKiB1bnJlZ2lzdGVycyB0aGUgY2hhcmFjdGVyIGRldmljZS4KLSAqLwotaW50IGRybV9wdXRfZGV2KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KQotewotCURSTV9ERUJVRygicmVsZWFzZSBwcmltYXJ5ICVzXG4iLCBkZXYtPmRyaXZlci0+cGNpX2RyaXZlci5uYW1lKTsKLQotCWlmIChkZXYtPmRldm5hbWUpIHsKLQkJZHJtX2ZyZWUoZGV2LT5kZXZuYW1lLCBzdHJsZW4oZGV2LT5kZXZuYW1lKSArIDEsCi0JCQkgRFJNX01FTV9EUklWRVIpOwotCQlkZXYtPmRldm5hbWUgPSBOVUxMOwotCX0KLQlkcm1fZnJlZShkZXYsIHNpemVvZigqZGV2KSwgRFJNX01FTV9TVFVCKTsKLQlyZXR1cm4gMDsKLX0KK0VYUE9SVF9TWU1CT0woZHJtX2dldF9kZXYpOwogCiAvKioKICAqIFB1dCBhIHNlY29uZGFyeSBtaW5vciBudW1iZXIuCkBAIC00NzIsMyArNDUxLDY3IEBACiAJKm1pbm9yX3AgPSBOVUxMOwogCXJldHVybiAwOwogfQorCisvKioKKyAqIENhbGxlZCB2aWEgZHJtX2V4aXQoKSBhdCBtb2R1bGUgdW5sb2FkIHRpbWUgb3Igd2hlbiBwY2kgZGV2aWNlIGlzCisgKiB1bnBsdWdnZWQuCisgKgorICogQ2xlYW5zIHVwIGFsbCBEUk0gZGV2aWNlLCBjYWxsaW5nIGRybV9sYXN0Y2xvc2UoKS4KKyAqCisgKiBcc2EgZHJtX2luaXQKKyAqLwordm9pZCBkcm1fcHV0X2RldihzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXIgPSBkZXYtPmRyaXZlcjsKKwlzdHJ1Y3QgZHJtX21hcF9saXN0ICpyX2xpc3QsICpsaXN0X3RlbXA7CisKKwlEUk1fREVCVUcoIlxuIik7CisKKwlpZiAoIWRldikgeworCQlEUk1fRVJST1IoImNsZWFudXAgY2FsbGVkIG5vIGRldlxuIik7CisJCXJldHVybjsKKwl9CisKKwlkcm1fdmJsYW5rX2NsZWFudXAoZGV2KTsKKworCWRybV9sYXN0Y2xvc2UoZGV2KTsKKworCWlmIChkcm1fY29yZV9oYXNfTVRSUihkZXYpICYmIGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJgorCSAgICBkZXYtPmFncCAmJiBkZXYtPmFncC0+YWdwX210cnIgPj0gMCkgeworCQlpbnQgcmV0dmFsOworCQlyZXR2YWwgPSBtdHJyX2RlbChkZXYtPmFncC0+YWdwX210cnIsCisJCQkJICBkZXYtPmFncC0+YWdwX2luZm8uYXBlcl9iYXNlLAorCQkJCSAgZGV2LT5hZ3AtPmFncF9pbmZvLmFwZXJfc2l6ZSAqIDEwMjQgKiAxMDI0KTsKKwkJRFJNX0RFQlVHKCJtdHJyX2RlbD0lZFxuIiwgcmV0dmFsKTsKKwl9CisKKwlpZiAoZGV2LT5kcml2ZXItPnVubG9hZCkKKwkJZGV2LT5kcml2ZXItPnVubG9hZChkZXYpOworCisJaWYgKGRybV9jb3JlX2hhc19BR1AoZGV2KSAmJiBkZXYtPmFncCkgeworCQlkcm1fZnJlZShkZXYtPmFncCwgc2l6ZW9mKCpkZXYtPmFncCksIERSTV9NRU1fQUdQTElTVFMpOworCQlkZXYtPmFncCA9IE5VTEw7CisJfQorCisJZHJtX2h0X3JlbW92ZSgmZGV2LT5tYXBfaGFzaCk7CisJZHJtX2N0eGJpdG1hcF9jbGVhbnVwKGRldik7CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUocl9saXN0LCBsaXN0X3RlbXAsICZkZXYtPm1hcGxpc3QsIGhlYWQpCisJCWRybV9ybW1hcChkZXYsIHJfbGlzdC0+bWFwKTsKKworCWlmIChkcm1fY29yZV9jaGVja19mZWF0dXJlKGRldiwgRFJJVkVSX01PREVTRVQpKQorCQlkcm1fcHV0X21pbm9yKCZkZXYtPmNvbnRyb2wpOworCisJaWYgKGRyaXZlci0+ZHJpdmVyX2ZlYXR1cmVzICYgRFJJVkVSX0dFTSkKKwkJZHJtX2dlbV9kZXN0cm95KGRldik7CisKKwlkcm1fcHV0X21pbm9yKCZkZXYtPnByaW1hcnkpOworCisJaWYgKGRldi0+ZGV2bmFtZSkgeworCQlkcm1fZnJlZShkZXYtPmRldm5hbWUsIHN0cmxlbihkZXYtPmRldm5hbWUpICsgMSwKKwkJCSBEUk1fTUVNX0RSSVZFUik7CisJCWRldi0+ZGV2bmFtZSA9IE5VTEw7CisJfQorCWRybV9mcmVlKGRldiwgc2l6ZW9mKCpkZXYpLCBEUk1fTUVNX1NUVUIpOworfQorRVhQT1JUX1NZTUJPTChkcm1fcHV0X2Rldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3N5c2ZzLmMKaW5kZXggMTg2ZDA4MS4uNWRlNTczYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV9zeXNmcy5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fc3lzZnMuYwpAQCAtMzUsNyArMzUsOSBAQAogCXN0cnVjdCBkcm1fbWlub3IgKmRybV9taW5vciA9IHRvX2RybV9taW5vcihkZXYpOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZHJtX21pbm9yLT5kZXY7CiAKLQlpZiAoZHJtX21pbm9yLT50eXBlID09IERSTV9NSU5PUl9MRUdBQ1kgJiYgZHJtX2Rldi0+ZHJpdmVyLT5zdXNwZW5kKQorCWlmIChkcm1fbWlub3ItPnR5cGUgPT0gRFJNX01JTk9SX0xFR0FDWSAmJgorCSAgICAhZHJtX2NvcmVfY2hlY2tfZmVhdHVyZShkcm1fZGV2LCBEUklWRVJfTU9ERVNFVCkgJiYKKwkgICAgZHJtX2Rldi0+ZHJpdmVyLT5zdXNwZW5kKQogCQlyZXR1cm4gZHJtX2Rldi0+ZHJpdmVyLT5zdXNwZW5kKGRybV9kZXYsIHN0YXRlKTsKIAogCXJldHVybiAwOwpAQCAtNTMsNyArNTUsOSBAQAogCXN0cnVjdCBkcm1fbWlub3IgKmRybV9taW5vciA9IHRvX2RybV9taW5vcihkZXYpOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZHJtX21pbm9yLT5kZXY7CiAKLQlpZiAoZHJtX21pbm9yLT50eXBlID09IERSTV9NSU5PUl9MRUdBQ1kgJiYgZHJtX2Rldi0+ZHJpdmVyLT5yZXN1bWUpCisJaWYgKGRybV9taW5vci0+dHlwZSA9PSBEUk1fTUlOT1JfTEVHQUNZICYmCisJICAgICFkcm1fY29yZV9jaGVja19mZWF0dXJlKGRybV9kZXYsIERSSVZFUl9NT0RFU0VUKSAmJgorCSAgICBkcm1fZGV2LT5kcml2ZXItPnJlc3VtZSkKIAkJcmV0dXJuIGRybV9kZXYtPmRyaXZlci0+cmVzdW1lKGRybV9kZXYpOwogCiAJcmV0dXJuIDA7CkBAIC0xMTgsMjAgKzEyMiw2IEBACiAJY2xhc3NfZGVzdHJveShkcm1fY2xhc3MpOwogfQogCi1zdGF0aWMgc3NpemVfdCBzaG93X2RyaShzdHJ1Y3QgZGV2aWNlICpkZXZpY2UsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLAotCQkJY2hhciAqYnVmKQotewotCXN0cnVjdCBkcm1fbWlub3IgKmRybV9taW5vciA9IHRvX2RybV9taW5vcihkZXZpY2UpOwotCXN0cnVjdCBkcm1fZGV2aWNlICpkcm1fZGV2ID0gZHJtX21pbm9yLT5kZXY7Ci0JaWYgKGRybV9kZXYtPmRyaXZlci0+ZHJpX2xpYnJhcnlfbmFtZSkKLQkJcmV0dXJuIGRybV9kZXYtPmRyaXZlci0+ZHJpX2xpYnJhcnlfbmFtZShkcm1fZGV2LCBidWYpOwotCXJldHVybiBzbnByaW50ZihidWYsIFBBR0VfU0laRSwgIiVzXG4iLCBkcm1fZGV2LT5kcml2ZXItPnBjaV9kcml2ZXIubmFtZSk7Ci19Ci0KLXN0YXRpYyBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSBkZXZpY2VfYXR0cnNbXSA9IHsKLQlfX0FUVFIoZHJpX2xpYnJhcnlfbmFtZSwgU19JUlVHTywgc2hvd19kcmksIE5VTEwpLAotfTsKLQogLyoqCiAgKiBkcm1fc3lzZnNfZGV2aWNlX3JlbGVhc2UgLSBkbyBub3RoaW5nCiAgKiBAZGV2OiBMaW51eCBkZXZpY2UKQEAgLTQ3NCw3ICs0NjQsNiBAQAogaW50IGRybV9zeXNmc19kZXZpY2VfYWRkKHN0cnVjdCBkcm1fbWlub3IgKm1pbm9yKQogewogCWludCBlcnI7Ci0JaW50IGksIGo7CiAJY2hhciAqbWlub3Jfc3RyOwogCiAJbWlub3ItPmtkZXYucGFyZW50ID0gJm1pbm9yLT5kZXYtPnBkZXYtPmRldjsKQEAgLTQ5NiwxOCArNDg1LDggQEAKIAkJZ290byBlcnJfb3V0OwogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRldmljZV9hdHRycyk7IGkrKykgewotCQllcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoJm1pbm9yLT5rZGV2LCAmZGV2aWNlX2F0dHJzW2ldKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gZXJyX291dF9maWxlczsKLQl9Ci0KIAlyZXR1cm4gMDsKIAotZXJyX291dF9maWxlczoKLQlpZiAoaSA+IDApCi0JCWZvciAoaiA9IDA7IGogPCBpOyBqKyspCi0JCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoJm1pbm9yLT5rZGV2LCAmZGV2aWNlX2F0dHJzW2pdKTsKIAlkZXZpY2VfdW5yZWdpc3RlcigmbWlub3ItPmtkZXYpOwogZXJyX291dDoKIApAQCAtNTIzLDkgKzUwMiw1IEBACiAgKi8KIHZvaWQgZHJtX3N5c2ZzX2RldmljZV9yZW1vdmUoc3RydWN0IGRybV9taW5vciAqbWlub3IpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkZXZpY2VfYXR0cnMpOyBpKyspCi0JCWRldmljZV9yZW1vdmVfZmlsZSgmbWlub3ItPmtkZXYsICZkZXZpY2VfYXR0cnNbaV0pOwogCWRldmljZV91bnJlZ2lzdGVyKCZtaW5vci0+a2Rldik7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZtLmMgYi9kcml2ZXJzL2dwdS9kcm0vZHJtX3ZtLmMKaW5kZXggM2ZmYWUwMi4uMjJmNzY1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2RybV92bS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9kcm1fdm0uYwpAQCAtOTEsNyArOTEsNyBAQAogewogCXN0cnVjdCBkcm1fZmlsZSAqcHJpdiA9IHZtYS0+dm1fZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwcml2LT5taW5vci0+ZGV2OwotCXN0cnVjdCBkcm1fbWFwICptYXAgPSBOVUxMOworCXN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXAgPSBOVUxMOwogCXN0cnVjdCBkcm1fbWFwX2xpc3QgKnJfbGlzdDsKIAlzdHJ1Y3QgZHJtX2hhc2hfaXRlbSAqaGFzaDsKIApAQCAtMTE1LDkgKzExNSw5IEBACiAJCSAqIFVzaW5nIHZtX3Bnb2ZmIGFzIGEgc2VsZWN0b3IgZm9yY2VzIHVzIHRvIHVzZSB0aGlzIHVudXN1YWwKIAkJICogYWRkcmVzc2luZyBzY2hlbWUuCiAJCSAqLwotCQl1bnNpZ25lZCBsb25nIG9mZnNldCA9ICh1bnNpZ25lZCBsb25nKXZtZi0+dmlydHVhbF9hZGRyZXNzIC0KLQkJCQkJCQkJdm1hLT52bV9zdGFydDsKLQkJdW5zaWduZWQgbG9uZyBiYWRkciA9IG1hcC0+b2Zmc2V0ICsgb2Zmc2V0OworCQlyZXNvdXJjZV9zaXplX3Qgb2Zmc2V0ID0gKHVuc2lnbmVkIGxvbmcpdm1mLT52aXJ0dWFsX2FkZHJlc3MgLQorCQkJdm1hLT52bV9zdGFydDsKKwkJcmVzb3VyY2Vfc2l6ZV90IGJhZGRyID0gbWFwLT5vZmZzZXQgKyBvZmZzZXQ7CiAJCXN0cnVjdCBkcm1fYWdwX21lbSAqYWdwbWVtOwogCQlzdHJ1Y3QgcGFnZSAqcGFnZTsKIApAQCAtMTQ5LDggKzE0OSwxMCBAQAogCQl2bWYtPnBhZ2UgPSBwYWdlOwogCiAJCURSTV9ERUJVRwotCQkgICAgKCJiYWRkciA9IDB4JWx4IHBhZ2UgPSAweCVwLCBvZmZzZXQgPSAweCVseCwgY291bnQ9JWRcbiIsCi0JCSAgICAgYmFkZHIsIF9fdmEoYWdwbWVtLT5tZW1vcnktPm1lbW9yeVtvZmZzZXRdKSwgb2Zmc2V0LAorCQkgICAgKCJiYWRkciA9IDB4JWxseCBwYWdlID0gMHglcCwgb2Zmc2V0ID0gMHglbGx4LCBjb3VudD0lZFxuIiwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKWJhZGRyLAorCQkgICAgIF9fdmEoYWdwbWVtLT5tZW1vcnktPm1lbW9yeVtvZmZzZXRdKSwKKwkJICAgICAodW5zaWduZWQgbG9uZyBsb25nKW9mZnNldCwKIAkJICAgICBwYWdlX2NvdW50KHBhZ2UpKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMTc2LDcgKzE3OCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgZHJtX2RvX3ZtX3NobV9mYXVsdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHZtX2ZhdWx0ICp2bWYpCiB7Ci0Jc3RydWN0IGRybV9tYXAgKm1hcCA9IChzdHJ1Y3QgZHJtX21hcCAqKSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwID0gdm1hLT52bV9wcml2YXRlX2RhdGE7CiAJdW5zaWduZWQgbG9uZyBvZmZzZXQ7CiAJdW5zaWduZWQgbG9uZyBpOwogCXN0cnVjdCBwYWdlICpwYWdlOwpAQCAtMjA5LDcgKzIxMSw3IEBACiAJc3RydWN0IGRybV9maWxlICpwcml2ID0gdm1hLT52bV9maWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHByaXYtPm1pbm9yLT5kZXY7CiAJc3RydWN0IGRybV92bWFfZW50cnkgKnB0LCAqdGVtcDsKLQlzdHJ1Y3QgZHJtX21hcCAqbWFwOworCXN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXA7CiAJc3RydWN0IGRybV9tYXBfbGlzdCAqcl9saXN0OwogCWludCBmb3VuZF9tYXBzID0gMDsKIApAQCAtMzIyLDcgKzMyNCw3IEBACiAgKi8KIHN0YXRpYyBpbnQgZHJtX2RvX3ZtX3NnX2ZhdWx0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZikKIHsKLQlzdHJ1Y3QgZHJtX21hcCAqbWFwID0gKHN0cnVjdCBkcm1fbWFwICopIHZtYS0+dm1fcHJpdmF0ZV9kYXRhOworCXN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXAgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZHJtX2ZpbGUgKnByaXYgPSB2bWEtPnZtX2ZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcHJpdi0+bWlub3ItPmRldjsKIAlzdHJ1Y3QgZHJtX3NnX21lbSAqZW50cnkgPSBkZXYtPnNnOwpAQCAtNTEyLDE0ICs1MTQsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotdW5zaWduZWQgbG9uZyBkcm1fY29yZV9nZXRfbWFwX29mcyhzdHJ1Y3QgZHJtX21hcCAqIG1hcCkKK3Jlc291cmNlX3NpemVfdCBkcm1fY29yZV9nZXRfbWFwX29mcyhzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqIG1hcCkKIHsKIAlyZXR1cm4gbWFwLT5vZmZzZXQ7CiB9CiAKIEVYUE9SVF9TWU1CT0woZHJtX2NvcmVfZ2V0X21hcF9vZnMpOwogCi11bnNpZ25lZCBsb25nIGRybV9jb3JlX2dldF9yZWdfb2ZzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCityZXNvdXJjZV9zaXplX3QgZHJtX2NvcmVfZ2V0X3JlZ19vZnMoc3RydWN0IGRybV9kZXZpY2UgKmRldikKIHsKICNpZmRlZiBfX2FscGhhX18KIAlyZXR1cm4gZGV2LT5ob3NlLT5kZW5zZV9tZW1fYmFzZSAtIGRldi0+aG9zZS0+bWVtX3NwYWNlLT5zdGFydDsKQEAgLTU0Nyw4ICs1NDksOCBAQAogewogCXN0cnVjdCBkcm1fZmlsZSAqcHJpdiA9IGZpbHAtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcHJpdi0+bWlub3ItPmRldjsKLQlzdHJ1Y3QgZHJtX21hcCAqbWFwID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IDA7CisJc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCA9IE5VTEw7CisJcmVzb3VyY2Vfc2l6ZV90IG9mZnNldCA9IDA7CiAJc3RydWN0IGRybV9oYXNoX2l0ZW0gKmhhc2g7CiAKIAlEUk1fREVCVUcoInN0YXJ0ID0gMHglbHgsIGVuZCA9IDB4JWx4LCBwYWdlIG9mZnNldCA9IDB4JWx4XG4iLApAQCAtNjIzLDkgKzYyNSw5IEBACiAJCQkJICAgICAgIHZtYS0+dm1fcGFnZV9wcm90KSkKIAkJCXJldHVybiAtRUFHQUlOOwogCQlEUk1fREVCVUcoIiAgIFR5cGUgPSAlZDsgc3RhcnQgPSAweCVseCwgZW5kID0gMHglbHgsIgotCQkJICAiIG9mZnNldCA9IDB4JWx4XG4iLAorCQkJICAiIG9mZnNldCA9IDB4JWxseFxuIiwKIAkJCSAgbWFwLT50eXBlLAotCQkJICB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwgbWFwLT5vZmZzZXQgKyBvZmZzZXQpOworCQkJICB2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwgKHVuc2lnbmVkIGxvbmcgbG9uZykobWFwLT5vZmZzZXQgKyBvZmZzZXQpKTsKIAkJdm1hLT52bV9vcHMgPSAmZHJtX3ZtX29wczsKIAkJYnJlYWs7CiAJY2FzZSBfRFJNX0NPTlNJU1RFTlQ6CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vaTgxMC9pODEwX2Rydi5oIGIvZHJpdmVycy9ncHUvZHJtL2k4MTAvaTgxMF9kcnYuaAppbmRleCAwMTE4ODQ5Li4yMWUyNjkxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTgxMC9pODEwX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9pODEwL2k4MTBfZHJ2LmgKQEAgLTc3LDggKzc3LDggQEAKIH0gZHJtX2k4MTBfcmluZ19idWZmZXJfdDsKIAogdHlwZWRlZiBzdHJ1Y3QgZHJtX2k4MTBfcHJpdmF0ZSB7Ci0Jc3RydWN0IGRybV9tYXAgKnNhcmVhX21hcDsKLQlzdHJ1Y3QgZHJtX21hcCAqbW1pb19tYXA7CisJc3RydWN0IGRybV9sb2NhbF9tYXAgKnNhcmVhX21hcDsKKwlzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbW1pb19tYXA7CiAKIAlkcm1faTgxMF9zYXJlYV90ICpzYXJlYV9wcml2OwogCWRybV9pODEwX3JpbmdfYnVmZmVyX3QgcmluZzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pODMwL2k4MzBfZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vaTgzMC9pODMwX2Rydi5oCmluZGV4IGI1YmY4Y2MuLmRhODJhZmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pODMwL2k4MzBfZHJ2LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k4MzAvaTgzMF9kcnYuaApAQCAtODQsOCArODQsOCBAQAogfSBkcm1faTgzMF9yaW5nX2J1ZmZlcl90OwogCiB0eXBlZGVmIHN0cnVjdCBkcm1faTgzMF9wcml2YXRlIHsKLQlzdHJ1Y3QgZHJtX21hcCAqc2FyZWFfbWFwOwotCXN0cnVjdCBkcm1fbWFwICptbWlvX21hcDsKKwlzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqc2FyZWFfbWFwOworCXN0cnVjdCBkcm1fbG9jYWxfbWFwICptbWlvX21hcDsKIAogCWRybV9pODMwX3NhcmVhX3QgKnNhcmVhX3ByaXY7CiAJZHJtX2k4MzBfcmluZ19idWZmZXJfdCByaW5nOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZG1hLmMKaW5kZXggYTgxOGIzNy4uODU1NDlmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kbWEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2RtYS5jCkBAIC0xMDk5LDcgKzEwOTksNyBAQAogaW50IGk5MTVfZHJpdmVyX2xvYWQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwotCXVuc2lnbmVkIGxvbmcgYmFzZSwgc2l6ZTsKKwlyZXNvdXJjZV9zaXplX3QgYmFzZSwgc2l6ZTsKIAlpbnQgcmV0ID0gMCwgbW1pb19iYXIgPSBJU19JOVhYKGRldikgPyAwIDogMTsKIAogCS8qIGk5MTUgaGFzIDQgbW9yZSBjb3VudGVycyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZHJ2LmMKaW5kZXggZGNiOTFmNS4uMmMwMTY3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2Rydi5jCkBAIC00Miw2ICs0Miw4IEBACiB1bnNpZ25lZCBpbnQgaTkxNV9mYnBlcmNydGMgPSAwOwogbW9kdWxlX3BhcmFtX25hbWVkKGZicGVyY3J0YywgaTkxNV9mYnBlcmNydGMsIGludCwgMDQwMCk7CiAKK3N0YXRpYyBzdHJ1Y3QgZHJtX2RyaXZlciBkcml2ZXI7CisKIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBwY2lpZGxpc3RbXSA9IHsKIAlpOTE1X1BDSV9JRFMKIH07CkBAIC0xMTcsNiArMTE5LDM2IEBACiAJcmV0dXJuIHJldDsKIH0KIAorc3RhdGljIGludCBfX2RldmluaXQKK2k5MTVfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQoreworCXJldHVybiBkcm1fZ2V0X2RldihwZGV2LCBlbnQsICZkcml2ZXIpOworfQorCitzdGF0aWMgdm9pZAoraTkxNV9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQoreworCXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisKKwlkcm1fcHV0X2RldihkZXYpOworfQorCitzdGF0aWMgaW50CitpOTE1X3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCit7CisJc3RydWN0IGRybV9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCXJldHVybiBpOTE1X3N1c3BlbmQoZGV2LCBzdGF0ZSk7Cit9CisKK3N0YXRpYyBpbnQKK2k5MTVfcGNpX3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKK3sKKwlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCisJcmV0dXJuIGk5MTVfcmVzdW1lKGRldik7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaTkxNV9nZW1fdm1fb3BzID0gewogCS5mYXVsdCA9IGk5MTVfZ2VtX2ZhdWx0LAogCS5vcGVuID0gZHJtX2dlbV92bV9vcGVuLApAQCAtMTc0LDYgKzIwNiwxMiBAQAogCS5wY2lfZHJpdmVyID0gewogCQkgLm5hbWUgPSBEUklWRVJfTkFNRSwKIAkJIC5pZF90YWJsZSA9IHBjaWlkbGlzdCwKKwkJIC5wcm9iZSA9IGk5MTVfcGNpX3Byb2JlLAorCQkgLnJlbW92ZSA9IGk5MTVfcGNpX3JlbW92ZSwKKyNpZmRlZiBDT05GSUdfUE0KKwkJIC5yZXN1bWUgPSBpOTE1X3BjaV9yZXN1bWUsCisJCSAuc3VzcGVuZCA9IGk5MTVfcGNpX3N1c3BlbmQsCisjZW5kaWYKIAl9LAogCiAJLm5hbWUgPSBEUklWRVJfTkFNRSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dlbS5jCmluZGV4IGI1MmNiYTAuLmUwMzg5YWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW0uYwpAQCAtNDQ2LDEzICs0NDYsMTYgQEAKIAkJIGludCBsZW5ndGgpCiB7CiAJY2hhciBfX2lvbWVtICp2YWRkcjsKKwl1bnNpZ25lZCBsb25nIHVud3JpdHRlbjsKIAogCXZhZGRyID0ga21hcF9hdG9taWMocGFnZXNbcGFnZV9iYXNlID4+IFBBR0VfU0hJRlRdLCBLTV9VU0VSMCk7CiAJaWYgKHZhZGRyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCV9fY29weV9mcm9tX3VzZXJfaW5hdG9taWModmFkZHIgKyBwYWdlX29mZnNldCwgZGF0YSwgbGVuZ3RoKTsKKwl1bndyaXR0ZW4gPSBfX2NvcHlfZnJvbV91c2VyX2luYXRvbWljKHZhZGRyICsgcGFnZV9vZmZzZXQsIGRhdGEsIGxlbmd0aCk7CiAJa3VubWFwX2F0b21pYyh2YWRkciwgS01fVVNFUjApOwogCisJaWYgKHVud3JpdHRlbikKKwkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEwOTMsNyArMTA5Niw3IEBACiAJc3RydWN0IGRybV9nZW1fbW0gKm1tID0gZGV2LT5tbV9wcml2YXRlOwogCXN0cnVjdCBkcm1faTkxNV9nZW1fb2JqZWN0ICpvYmpfcHJpdiA9IG9iai0+ZHJpdmVyX3ByaXZhdGU7CiAJc3RydWN0IGRybV9tYXBfbGlzdCAqbGlzdDsKLQlzdHJ1Y3QgZHJtX21hcCAqbWFwOworCXN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXA7CiAJaW50IHJldCA9IDA7CiAKIAkvKiBTZXQgdGhlIG9iamVjdCB1cCBmb3IgbW1hcCdpbmcgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2RtYS5jIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZG1hLmMKaW5kZXggYjQ5YzVmZi4uN2E2YmY5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZG1hLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL21nYS9tZ2FfZG1hLmMKQEAgLTE0OCw4ICsxNDgsOCBAQAogCQlwcmltYXJ5LT5zcGFjZSA9IGhlYWQgLSB0YWlsOwogCX0KIAotCURSTV9ERUJVRygiICAgaGVhZCA9IDB4JTA2bHhcbiIsIGhlYWQgLSBkZXZfcHJpdi0+cHJpbWFyeS0+b2Zmc2V0KTsKLQlEUk1fREVCVUcoIiAgIHRhaWwgPSAweCUwNmx4XG4iLCB0YWlsIC0gZGV2X3ByaXYtPnByaW1hcnktPm9mZnNldCk7CisJRFJNX0RFQlVHKCIgICBoZWFkID0gMHglMDZseFxuIiwgKHVuc2lnbmVkIGxvbmcpKGhlYWQgLSBkZXZfcHJpdi0+cHJpbWFyeS0+b2Zmc2V0KSk7CisJRFJNX0RFQlVHKCIgICB0YWlsID0gMHglMDZseFxuIiwgKHVuc2lnbmVkIGxvbmcpKHRhaWwgLSBkZXZfcHJpdi0+cHJpbWFyeS0+b2Zmc2V0KSk7CiAJRFJNX0RFQlVHKCIgIHNwYWNlID0gMHglMDZ4XG4iLCBwcmltYXJ5LT5zcGFjZSk7CiAKIAltZ2FfZmx1c2hfd3JpdGVfY29tYmluZSgpOwpAQCAtMTg3LDcgKzE4Nyw3IEBACiAJCXByaW1hcnktPnNwYWNlID0gaGVhZCAtIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQ7CiAJfQogCi0JRFJNX0RFQlVHKCIgICBoZWFkID0gMHglMDZseFxuIiwgaGVhZCAtIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQpOworCURSTV9ERUJVRygiICAgaGVhZCA9IDB4JTA2bHhcbiIsICh1bnNpZ25lZCBsb25nKShoZWFkIC0gZGV2X3ByaXYtPnByaW1hcnktPm9mZnNldCkpOwogCURSTV9ERUJVRygiICAgdGFpbCA9IDB4JTA2eFxuIiwgcHJpbWFyeS0+dGFpbCk7CiAJRFJNX0RFQlVHKCIgICB3cmFwID0gJWRcbiIsIHByaW1hcnktPmxhc3Rfd3JhcCk7CiAJRFJNX0RFQlVHKCIgIHNwYWNlID0gMHglMDZ4XG4iLCBwcmltYXJ5LT5zcGFjZSk7CkBAIC0yMzksNyArMjM5LDcgQEAKIAlmb3IgKGVudHJ5ID0gZGV2X3ByaXYtPmhlYWQtPm5leHQ7IGVudHJ5OyBlbnRyeSA9IGVudHJ5LT5uZXh0KSB7CiAJCURSTV9JTkZPKCIgICAlcCAgIGlkeD0lMmQgIGFnZT0weCV4IDB4JTA2bHhcbiIsCiAJCQkgZW50cnksIGVudHJ5LT5idWYtPmlkeCwgZW50cnktPmFnZS5oZWFkLAotCQkJIGVudHJ5LT5hZ2UuaGVhZCAtIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQpOworCQkJICh1bnNpZ25lZCBsb25nKShlbnRyeS0+YWdlLmhlYWQgLSBkZXZfcHJpdi0+cHJpbWFyeS0+b2Zmc2V0KSk7CiAJfQogCURSTV9JTkZPKCJcbiIpOwogfQpAQCAtMzQwLDEwICszNDAsMTAgQEAKIAogCURSTV9ERUJVRygiICAgdGFpbD0weCUwNmx4ICVkXG4iLAogCQkgIHRhaWwtPmFnZS5oZWFkID8KLQkJICB0YWlsLT5hZ2UuaGVhZCAtIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQgOiAwLAorCQkgICh1bnNpZ25lZCBsb25nKSh0YWlsLT5hZ2UuaGVhZCAtIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQpIDogMCwKIAkJICB0YWlsLT5hZ2Uud3JhcCk7CiAJRFJNX0RFQlVHKCIgICBoZWFkPTB4JTA2bHggJWRcbiIsCi0JCSAgaGVhZCAtIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQsIHdyYXApOworCQkgICh1bnNpZ25lZCBsb25nKShoZWFkIC0gZGV2X3ByaXYtPnByaW1hcnktPm9mZnNldCksIHdyYXApOwogCiAJaWYgKFRFU1RfQUdFKCZ0YWlsLT5hZ2UsIGhlYWQsIHdyYXApKSB7CiAJCXByZXYgPSBkZXZfcHJpdi0+dGFpbC0+cHJldjsKQEAgLTM2Niw4ICszNjYsOSBAQAogCWRybV9tZ2FfZnJlZWxpc3RfdCAqaGVhZCwgKmVudHJ5LCAqcHJldjsKIAogCURSTV9ERUJVRygiYWdlPTB4JTA2bHggd3JhcD0lZFxuIiwKLQkJICBidWZfcHJpdi0+bGlzdF9lbnRyeS0+YWdlLmhlYWQgLQotCQkgIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQsIGJ1Zl9wcml2LT5saXN0X2VudHJ5LT5hZ2Uud3JhcCk7CisJCSAgKHVuc2lnbmVkIGxvbmcpKGJ1Zl9wcml2LT5saXN0X2VudHJ5LT5hZ2UuaGVhZCAtCisJCQkJICBkZXZfcHJpdi0+cHJpbWFyeS0+b2Zmc2V0KSwKKwkJICBidWZfcHJpdi0+bGlzdF9lbnRyeS0+YWdlLndyYXApOwogCiAJZW50cnkgPSBidWZfcHJpdi0+bGlzdF9lbnRyeTsKIAloZWFkID0gZGV2X3ByaXYtPmhlYWQ7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9tZ2EvbWdhX2Rydi5oCmluZGV4IDg4MjU3YzIuLjNkMjY0ZjI4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vbWdhL21nYV9kcnYuaApAQCAtMTEzLDggKzExMyw4IEBACiAJICogXHNhIGRybV9tZ2FfcHJpdmF0ZV90OjptbWlvCiAJICovCiAJLypAeyAqLwotCXUzMiBtbWlvX2Jhc2U7CQkgICAvKio8IEJ1cyBhZGRyZXNzIG9mIGJhc2Ugb2YgTU1JTy4gKi8KLQl1MzIgbW1pb19zaXplOwkJICAgLyoqPCBTaXplIG9mIHRoZSBNTUlPIHJlZ2lvbi4gKi8KKwlyZXNvdXJjZV9zaXplX3QgbW1pb19iYXNlOwkgICAvKio8IEJ1cyBhZGRyZXNzIG9mIGJhc2Ugb2YgTU1JTy4gKi8KKwlyZXNvdXJjZV9zaXplX3QgbW1pb19zaXplOwkgICAvKio8IFNpemUgb2YgdGhlIE1NSU8gcmVnaW9uLiAqLwogCS8qQH0gKi8KIAogCXUzMiBjbGVhcl9jbWQ7CkBAIC0zMTcsOCArMzE3LDggQEAKIAkJRFJNX0lORk8oICJcbiIgKTsJCQkJCVwKIAkJRFJNX0lORk8oICIgICB0YWlsPTB4JTA2eCBoZWFkPTB4JTA2bHhcbiIsCQlcCiAJCQkgIGRldl9wcml2LT5wcmltLnRhaWwsCQkJCVwKLQkJCSAgTUdBX1JFQUQoIE1HQV9QUklNQUREUkVTUyApIC0JCQlcCi0JCQkgIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQgKTsJCQlcCisJCQkgICh1bnNpZ25lZCBsb25nKShNR0FfUkVBRChNR0FfUFJJTUFERFJFU1MpIC0JXAorCQkJCQkgIGRldl9wcml2LT5wcmltYXJ5LT5vZmZzZXQpKTsJXAogCX0JCQkJCQkJCVwKIAlpZiAoICF0ZXN0X2JpdCggMCwgJmRldl9wcml2LT5wcmltLndyYXBwZWQgKSApIHsJCVwKIAkJaWYgKCBkZXZfcHJpdi0+cHJpbS5zcGFjZSA8CQkJCVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfY2NlLmMgYi9kcml2ZXJzL2dwdS9kcm0vcjEyOC9yMTI4X2NjZS5jCmluZGV4IGMzMWFmYmQuLjMyZGU0Y2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yMTI4L3IxMjhfY2NlLmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL3IxMjgvcjEyOF9jY2UuYwpAQCAtNTI1LDExICs1MjUsMTIgQEAKIAl9IGVsc2UKICNlbmRpZgogCXsKLQkJZGV2X3ByaXYtPmNjZV9yaW5nLT5oYW5kbGUgPSAodm9pZCAqKWRldl9wcml2LT5jY2VfcmluZy0+b2Zmc2V0OworCQlkZXZfcHJpdi0+Y2NlX3JpbmctPmhhbmRsZSA9CisJCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWRldl9wcml2LT5jY2VfcmluZy0+b2Zmc2V0OwogCQlkZXZfcHJpdi0+cmluZ19ycHRyLT5oYW5kbGUgPQotCQkgICAgKHZvaWQgKilkZXZfcHJpdi0+cmluZ19ycHRyLT5vZmZzZXQ7CisJCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWRldl9wcml2LT5yaW5nX3JwdHItPm9mZnNldDsKIAkJZGV2LT5hZ3BfYnVmZmVyX21hcC0+aGFuZGxlID0KLQkJICAgICh2b2lkICopZGV2LT5hZ3BfYnVmZmVyX21hcC0+b2Zmc2V0OworCQkJKHZvaWQgKikodW5zaWduZWQgbG9uZylkZXYtPmFncF9idWZmZXJfbWFwLT5vZmZzZXQ7CiAJfQogCiAjaWYgX19PU19IQVNfQUdQCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL01ha2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9NYWtlZmlsZQppbmRleCBmZWI1MjFlLi41MmNlNDM5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vTWFrZWZpbGUKQEAgLTMsNyArMyw3IEBACiAjIERpcmVjdCBSZW5kZXJpbmcgSW5mcmFzdHJ1Y3R1cmUgKERSSSkgaW4gWEZyZWU4NiA0LjEuMCBhbmQgaGlnaGVyLgogCiBjY2ZsYWdzLXkgOj0gLUlpbmNsdWRlL2RybQotcmFkZW9uLXkgOj0gcmFkZW9uX2Rydi5vIHJhZGVvbl9jcC5vIHJhZGVvbl9zdGF0ZS5vIHJhZGVvbl9tZW0ubyByYWRlb25faXJxLm8gcjMwMF9jbWRidWYubworcmFkZW9uLXkgOj0gcmFkZW9uX2Rydi5vIHJhZGVvbl9jcC5vIHJhZGVvbl9zdGF0ZS5vIHJhZGVvbl9tZW0ubyByYWRlb25faXJxLm8gcjMwMF9jbWRidWYubyByNjAwX2NwLm8KIAogcmFkZW9uLSQoQ09ORklHX0NPTVBBVCkgKz0gcmFkZW9uX2lvYzMyLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX2NtZGJ1Zi5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX2NtZGJ1Zi5jCmluZGV4IGNhY2UzOTYuLmNiMmU0NzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9jbWRidWYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfY21kYnVmLmMKQEAgLTM3LDYgKzM3LDggQEAKICNpbmNsdWRlICJyYWRlb25fZHJ2LmgiCiAjaW5jbHVkZSAicjMwMF9yZWcuaCIKIAorI2luY2x1ZGUgPGFzbS91bmFsaWduZWQuaD4KKwogI2RlZmluZSBSMzAwX1NJTVVMVEFORU9VU19DTElQUkVDVFMJCTQKIAogLyogVmFsdWVzIGZvciBSMzAwX1JFX0NMSVBSRUNUX0NOVEwgZGVwZW5kaW5nIG9uIHRoZSBudW1iZXIgb2YgY2xpcHJlY3RzCkBAIC0yMDUsNiArMjA3LDEwIEBACiAJQUREX1JBTkdFKDB4NDJDMCwgMik7CiAJQUREX1JBTkdFKFIzMDBfUlNfQ05UTF8wLCAyKTsKIAorCUFERF9SQU5HRShSMzAwX1NVX1JFR19ERVNULCAxKTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUzMCkKKwkJQUREX1JBTkdFKFJWNTMwX0ZHX1pCUkVHX0RFU1QsIDEpOworCiAJQUREX1JBTkdFKFIzMDBfU0NfSFlQRVJaLCAyKTsKIAlBRERfUkFOR0UoMHg0M0U4LCAxKTsKIApAQCAtMjMwLDYgKzIzNiw3IEBACiAJQUREX1JBTkdFKFIzMDBfWkJfREVQVEhQSVRDSCwgMSk7CiAJQUREX1JBTkdFKFIzMDBfWkJfREVQVEhDTEVBUlZBTFVFLCAxKTsKIAlBRERfUkFOR0UoUjMwMF9aQl9aTUFTS19PRkZTRVQsIDEzKTsKKwlBRERfUkFOR0UoUjMwMF9aQl9aUEFTU19EQVRBLCAyKTsgLyogWkJfWlBBU1NfREFUQSwgWkJfWlBBU1NfQUREUiAqLwogCiAJQUREX1JBTkdFKFIzMDBfVFhfRklMVEVSXzAsIDE2KTsKIAlBRERfUkFOR0UoUjMwMF9UWF9GSUxURVIxXzAsIDE2KTsKQEAgLTkxNyw2ICs5MjQsNyBAQAogewogCXUzMiAqcmVmX2FnZV9iYXNlOwogCXUzMiBpLCBidWZfaWR4LCBoX3BlbmRpbmc7CisJdTY0IHB0cl9hZGRyOwogCVJJTkdfTE9DQUxTOwogCiAJaWYgKGNtZGJ1Zi0+YnVmc3ogPApAQCAtOTMwLDcgKzkzOCw4IEBACiAKIAlkZXZfcHJpdi0+c2NyYXRjaF9hZ2VzW2hlYWRlci5zY3JhdGNoLnJlZ10rKzsKIAotCXJlZl9hZ2VfYmFzZSA9ICAodTMyICopKHVuc2lnbmVkIGxvbmcpKigodWludDY0X3QgKiljbWRidWYtPmJ1Zik7CisJcHRyX2FkZHIgPSBnZXRfdW5hbGlnbmVkKCh1NjQgKiljbWRidWYtPmJ1Zik7CisJcmVmX2FnZV9iYXNlID0gKHUzMiAqKSh1bnNpZ25lZCBsb25nKXB0cl9hZGRyOwogCiAJY21kYnVmLT5idWYgKz0gc2l6ZW9mKHU2NCk7CiAJY21kYnVmLT5idWZzeiAtPSBzaXplb2YodTY0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9yZWcuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjMwMF9yZWcuaAppbmRleCBlZTZmODExLi5iZGJjOTVmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3IzMDBfcmVnLmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yMzAwX3JlZy5oCkBAIC0xNzcwLDQgKzE3NzAsOSBAQAogI2RlZmluZSBSNTAwX1JCM0RfQ09MT1JfQ0xFQVJfVkFMVUVfQVIgIDB4NDZjMAogI2RlZmluZSBSNTAwX1JCM0RfQ09OU1RBTlRfQ09MT1JfQVIgICAgIDB4NGVmOAogCisjZGVmaW5lIFIzMDBfU1VfUkVHX0RFU1QgICAgICAgICAgICAgICAgMHg0MmM4CisjZGVmaW5lIFJWNTMwX0ZHX1pCUkVHX0RFU1QgICAgICAgICAgICAgMHg0YmU4CisjZGVmaW5lIFIzMDBfWkJfWlBBU1NfREFUQSAgICAgICAgICAgICAgMHg0ZjU4CisjZGVmaW5lIFIzMDBfWkJfWlBBU1NfQUREUiAgICAgICAgICAgICAgMHg0ZjVjCisKICNlbmRpZiAvKiBfUjMwMF9SRUdfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NwLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3I2MDBfY3AuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45ZDE0ZWVlCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX2NwLmMKQEAgLTAsMCArMSwyMjUzIEBACisvKgorICogQ29weXJpZ2h0IDIwMDgtMjAwOSBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKiBDb3B5cmlnaHQgMjAwOCBSZWQgSGF0IEluYy4KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBIT0xERVIoUykgQU5EL09SIElUUyBTVVBQTElFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAqIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSCisgKiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgICBEYXZlIEFpcmxpZSA8YWlybGllZEByZWRoYXQuY29tPgorICogICAgIEFsZXggRGV1Y2hlciA8YWxleGFuZGVyLmRldWNoZXJAYW1kLmNvbT4KKyAqLworCisjaW5jbHVkZSAiZHJtUC5oIgorI2luY2x1ZGUgImRybS5oIgorI2luY2x1ZGUgInJhZGVvbl9kcm0uaCIKKyNpbmNsdWRlICJyYWRlb25fZHJ2LmgiCisKKyNpbmNsdWRlICJyNjAwX21pY3JvY29kZS5oIgorCisjIGRlZmluZSBBVElfUENJR0FSVF9QQUdFX1NJWkUJCTQwOTYJLyoqPCBQQ0kgR0FSVCBwYWdlIHNpemUgKi8KKyMgZGVmaW5lIEFUSV9QQ0lHQVJUX1BBR0VfTUFTSwkJKH4oQVRJX1BDSUdBUlRfUEFHRV9TSVpFLTEpKQorCisjZGVmaW5lIFI2MDBfUFRFX1ZBTElEICAgICAoMSA8PCAwKQorI2RlZmluZSBSNjAwX1BURV9TWVNURU0gICAgKDEgPDwgMSkKKyNkZWZpbmUgUjYwMF9QVEVfU05PT1BFRCAgICgxIDw8IDIpCisjZGVmaW5lIFI2MDBfUFRFX1JFQURBQkxFICAoMSA8PCA1KQorI2RlZmluZSBSNjAwX1BURV9XUklURUFCTEUgKDEgPDwgNikKKworLyogTUFYIHZhbHVlcyB1c2VkIGZvciBnZnggaW5pdCAqLworI2RlZmluZSBSNlhYX01BWF9TSF9HUFJTICAgICAgICAgICAyNTYKKyNkZWZpbmUgUjZYWF9NQVhfVEVNUF9HUFJTICAgICAgICAgMTYKKyNkZWZpbmUgUjZYWF9NQVhfU0hfVEhSRUFEUyAgICAgICAgMjU2CisjZGVmaW5lIFI2WFhfTUFYX1NIX1NUQUNLX0VOVFJJRVMgIDQwOTYKKyNkZWZpbmUgUjZYWF9NQVhfQkFDS0VORFMgICAgICAgICAgOAorI2RlZmluZSBSNlhYX01BWF9CQUNLRU5EU19NQVNLICAgICAweGZmCisjZGVmaW5lIFI2WFhfTUFYX1NJTURTICAgICAgICAgICAgIDgKKyNkZWZpbmUgUjZYWF9NQVhfU0lNRFNfTUFTSyAgICAgICAgMHhmZgorI2RlZmluZSBSNlhYX01BWF9QSVBFUyAgICAgICAgICAgICA4CisjZGVmaW5lIFI2WFhfTUFYX1BJUEVTX01BU0sgICAgICAgIDB4ZmYKKworI2RlZmluZSBSN1hYX01BWF9TSF9HUFJTICAgICAgICAgICAyNTYKKyNkZWZpbmUgUjdYWF9NQVhfVEVNUF9HUFJTICAgICAgICAgMTYKKyNkZWZpbmUgUjdYWF9NQVhfU0hfVEhSRUFEUyAgICAgICAgMjU2CisjZGVmaW5lIFI3WFhfTUFYX1NIX1NUQUNLX0VOVFJJRVMgIDQwOTYKKyNkZWZpbmUgUjdYWF9NQVhfQkFDS0VORFMgICAgICAgICAgOAorI2RlZmluZSBSN1hYX01BWF9CQUNLRU5EU19NQVNLICAgICAweGZmCisjZGVmaW5lIFI3WFhfTUFYX1NJTURTICAgICAgICAgICAgIDE2CisjZGVmaW5lIFI3WFhfTUFYX1NJTURTX01BU0sgICAgICAgIDB4ZmZmZgorI2RlZmluZSBSN1hYX01BWF9QSVBFUyAgICAgICAgICAgICA4CisjZGVmaW5lIFI3WFhfTUFYX1BJUEVTX01BU0sgICAgICAgIDB4ZmYKKworc3RhdGljIGludCByNjAwX2RvX3dhaXRfZm9yX2ZpZm8oZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LCBpbnQgZW50cmllcykKK3sKKwlpbnQgaTsKKworCWRldl9wcml2LT5zdGF0cy5ib3hlcyB8PSBSQURFT05fQk9YX1dBSVRfSURMRTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXZfcHJpdi0+dXNlY190aW1lb3V0OyBpKyspIHsKKwkJaW50IHNsb3RzOworCQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SVjc3MCkKKwkJCXNsb3RzID0gKFJBREVPTl9SRUFEKFI2MDBfR1JCTV9TVEFUVVMpCisJCQkJICYgUjcwMF9DTURGSUZPX0FWQUlMX01BU0spOworCQllbHNlCisJCQlzbG90cyA9IChSQURFT05fUkVBRChSNjAwX0dSQk1fU1RBVFVTKQorCQkJCSAmIFI2MDBfQ01ERklGT19BVkFJTF9NQVNLKTsKKwkJaWYgKHNsb3RzID49IGVudHJpZXMpCisJCQlyZXR1cm4gMDsKKwkJRFJNX1VERUxBWSgxKTsKKwl9CisJRFJNX0lORk8oIndhaXQgZm9yIGZpZm8gZmFpbGVkIHN0YXR1cyA6IDB4JTA4WCAweCUwOFhcbiIsCisJCSBSQURFT05fUkVBRChSNjAwX0dSQk1fU1RBVFVTKSwKKwkJIFJBREVPTl9SRUFEKFI2MDBfR1JCTV9TVEFUVVMyKSk7CisKKwlyZXR1cm4gLUVCVVNZOworfQorCitzdGF0aWMgaW50IHI2MDBfZG9fd2FpdF9mb3JfaWRsZShkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpCit7CisJaW50IGksIHJldDsKKworCWRldl9wcml2LT5zdGF0cy5ib3hlcyB8PSBSQURFT05fQk9YX1dBSVRfSURMRTsKKworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JWNzcwKQorCQlyZXQgPSByNjAwX2RvX3dhaXRfZm9yX2ZpZm8oZGV2X3ByaXYsIDgpOworCWVsc2UKKwkJcmV0ID0gcjYwMF9kb193YWl0X2Zvcl9maWZvKGRldl9wcml2LCAxNik7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwlmb3IgKGkgPSAwOyBpIDwgZGV2X3ByaXYtPnVzZWNfdGltZW91dDsgaSsrKSB7CisJCWlmICghKFJBREVPTl9SRUFEKFI2MDBfR1JCTV9TVEFUVVMpICYgUjYwMF9HVUlfQUNUSVZFKSkKKwkJCXJldHVybiAwOworCQlEUk1fVURFTEFZKDEpOworCX0KKwlEUk1fSU5GTygid2FpdCBpZGxlIGZhaWxlZCBzdGF0dXMgOiAweCUwOFggMHglMDhYXG4iLAorCQkgUkFERU9OX1JFQUQoUjYwMF9HUkJNX1NUQVRVUyksCisJCSBSQURFT05fUkVBRChSNjAwX0dSQk1fU1RBVFVTMikpOworCisJcmV0dXJuIC1FQlVTWTsKK30KKwordm9pZCByNjAwX3BhZ2VfdGFibGVfY2xlYW51cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2F0aV9wY2lnYXJ0X2luZm8gKmdhcnRfaW5mbykKK3sKKwlzdHJ1Y3QgZHJtX3NnX21lbSAqZW50cnkgPSBkZXYtPnNnOworCWludCBtYXhfcGFnZXM7CisJaW50IHBhZ2VzOworCWludCBpOworCisJaWYgKCFlbnRyeSkKKwkJcmV0dXJuOworCisJaWYgKGdhcnRfaW5mby0+YnVzX2FkZHIpIHsKKwkJbWF4X3BhZ2VzID0gKGdhcnRfaW5mby0+dGFibGVfc2l6ZSAvIHNpemVvZih1NjQpKTsKKwkJcGFnZXMgPSAoZW50cnktPnBhZ2VzIDw9IG1heF9wYWdlcykKKwkJICA/IGVudHJ5LT5wYWdlcyA6IG1heF9wYWdlczsKKworCQlmb3IgKGkgPSAwOyBpIDwgcGFnZXM7IGkrKykgeworCQkJaWYgKCFlbnRyeS0+YnVzYWRkcltpXSkKKwkJCQlicmVhazsKKwkJCXBjaV91bm1hcF9wYWdlKGRldi0+cGRldiwgZW50cnktPmJ1c2FkZHJbaV0sCisJCQkJICAgICAgIFBBR0VfU0laRSwgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwkJfQorCQlpZiAoZ2FydF9pbmZvLT5nYXJ0X3RhYmxlX2xvY2F0aW9uID09IERSTV9BVElfR0FSVF9NQUlOKQorCQkJZ2FydF9pbmZvLT5idXNfYWRkciA9IDA7CisJfQorfQorCisvKiBSNjAwIGhhcyBwYWdlIHRhYmxlIHNldHVwICovCitpbnQgcjYwMF9wYWdlX3RhYmxlX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXN0cnVjdCBkcm1fYXRpX3BjaWdhcnRfaW5mbyAqZ2FydF9pbmZvID0gJmRldl9wcml2LT5nYXJ0X2luZm87CisJc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCA9ICZnYXJ0X2luZm8tPm1hcHBpbmc7CisJc3RydWN0IGRybV9zZ19tZW0gKmVudHJ5ID0gZGV2LT5zZzsKKwlpbnQgcmV0ID0gMDsKKwlpbnQgaSwgajsKKwlpbnQgcGFnZXM7CisJdTY0IHBhZ2VfYmFzZTsKKwlkbWFfYWRkcl90IGVudHJ5X2FkZHI7CisJaW50IG1heF9hdGlfcGFnZXMsIG1heF9yZWFsX3BhZ2VzLCBnYXJ0X2lkeDsKKworCS8qIG9rYXkgcGFnZSB0YWJsZSBpcyBhdmFpbGFibGUgLSBsZXRzIHJvY2sgKi8KKwltYXhfYXRpX3BhZ2VzID0gKGdhcnRfaW5mby0+dGFibGVfc2l6ZSAvIHNpemVvZih1NjQpKTsKKwltYXhfcmVhbF9wYWdlcyA9IG1heF9hdGlfcGFnZXMgLyAoUEFHRV9TSVpFIC8gQVRJX1BDSUdBUlRfUEFHRV9TSVpFKTsKKworCXBhZ2VzID0gKGVudHJ5LT5wYWdlcyA8PSBtYXhfcmVhbF9wYWdlcykgPworCQllbnRyeS0+cGFnZXMgOiBtYXhfcmVhbF9wYWdlczsKKworCW1lbXNldF9pbygodm9pZCBfX2lvbWVtICopbWFwLT5oYW5kbGUsIDAsIG1heF9hdGlfcGFnZXMgKiBzaXplb2YodTY0KSk7CisKKwlnYXJ0X2lkeCA9IDA7CisJZm9yIChpID0gMDsgaSA8IHBhZ2VzOyBpKyspIHsKKwkJZW50cnktPmJ1c2FkZHJbaV0gPSBwY2lfbWFwX3BhZ2UoZGV2LT5wZGV2LAorCQkJCQkJIGVudHJ5LT5wYWdlbGlzdFtpXSwgMCwKKwkJCQkJCSBQQUdFX1NJWkUsCisJCQkJCQkgUENJX0RNQV9CSURJUkVDVElPTkFMKTsKKwkJaWYgKGVudHJ5LT5idXNhZGRyW2ldID09IDApIHsKKwkJCURSTV9FUlJPUigidW5hYmxlIHRvIG1hcCBQQ0lHQVJUIHBhZ2VzIVxuIik7CisJCQlyNjAwX3BhZ2VfdGFibGVfY2xlYW51cChkZXYsIGdhcnRfaW5mbyk7CisJCQlnb3RvIGRvbmU7CisJCX0KKwkJZW50cnlfYWRkciA9IGVudHJ5LT5idXNhZGRyW2ldOworCQlmb3IgKGogPSAwOyBqIDwgKFBBR0VfU0laRSAvIEFUSV9QQ0lHQVJUX1BBR0VfU0laRSk7IGorKykgeworCQkJcGFnZV9iYXNlID0gKHU2NCkgZW50cnlfYWRkciAmIEFUSV9QQ0lHQVJUX1BBR0VfTUFTSzsKKwkJCXBhZ2VfYmFzZSB8PSBSNjAwX1BURV9WQUxJRCB8IFI2MDBfUFRFX1NZU1RFTSB8IFI2MDBfUFRFX1NOT09QRUQ7CisJCQlwYWdlX2Jhc2UgfD0gUjYwMF9QVEVfUkVBREFCTEUgfCBSNjAwX1BURV9XUklURUFCTEU7CisKKwkJCURSTV9XUklURTY0KG1hcCwgZ2FydF9pZHggKiBzaXplb2YodTY0KSwgcGFnZV9iYXNlKTsKKworCQkJZ2FydF9pZHgrKzsKKworCQkJaWYgKChpICUgMTI4KSA9PSAwKQorCQkJCURSTV9ERUJVRygicGFnZSBlbnRyeSAlZDogMHglMDE2bGx4XG4iLAorCQkJCSAgICBpLCAodW5zaWduZWQgbG9uZyBsb25nKXBhZ2VfYmFzZSk7CisJCQllbnRyeV9hZGRyICs9IEFUSV9QQ0lHQVJUX1BBR0VfU0laRTsKKwkJfQorCX0KKwlyZXQgPSAxOworZG9uZToKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgdm9pZCByNjAwX3ZtX2ZsdXNoX2dhcnRfcmFuZ2Uoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCXUzMiByZXNwLCBjb3VudGRvd24gPSAxMDAwOworCVJBREVPTl9XUklURShSNjAwX1ZNX0NPTlRFWFQwX0lOVkFMSURBVElPTl9MT1dfQUREUiwgZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQgPj4gMTIpOworCVJBREVPTl9XUklURShSNjAwX1ZNX0NPTlRFWFQwX0lOVkFMSURBVElPTl9ISUdIX0FERFIsIChkZXZfcHJpdi0+Z2FydF92bV9zdGFydCArIGRldl9wcml2LT5nYXJ0X3NpemUgLSAxKSA+PiAxMik7CisJUkFERU9OX1dSSVRFKFI2MDBfVk1fQ09OVEVYVDBfUkVRVUVTVF9SRVNQT05TRSwgMik7CisKKwlkbyB7CisJCXJlc3AgPSBSQURFT05fUkVBRChSNjAwX1ZNX0NPTlRFWFQwX1JFUVVFU1RfUkVTUE9OU0UpOworCQljb3VudGRvd24tLTsKKwkJRFJNX1VERUxBWSgxKTsKKwl9IHdoaWxlICgoKHJlc3AgJiAweGYwKSA9PSAwKSAmJiBjb3VudGRvd24pOworfQorCitzdGF0aWMgdm9pZCByNjAwX3ZtX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldikKK3sKKwlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOworCS8qIGluaXRpYWxpc2UgdGhlIFZNIHRvIHVzZSB0aGUgcGFnZSB0YWJsZSB3ZSBjb25zdHJ1Y3RlZCB1cCB0aGVyZSAqLworCXUzMiB2bV9jMCwgaTsKKwl1MzIgbWNfcmRfYTsKKwl1MzIgdm1fbDJfY250bCwgdm1fbDJfY250bDM7CisJLyogb2theSBzZXQgdXAgdGhlIFBDSUUgYXBlcnR1cmUgdHlwZSB0aGluZ28gKi8KKwlSQURFT05fV1JJVEUoUjYwMF9NQ19WTV9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIsIGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0ID4+IDEyKTsKKwlSQURFT05fV1JJVEUoUjYwMF9NQ19WTV9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSLCAoZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQgKyBkZXZfcHJpdi0+Z2FydF9zaXplIC0gMSkgPj4gMTIpOworCVJBREVPTl9XUklURShSNjAwX01DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ERUZBVUxUX0FERFIsIDApOworCisJLyogc2V0dXAgTUMgUkQgYSAqLworCW1jX3JkX2EgPSBSNjAwX01DRF9MMV9UTEIgfCBSNjAwX01DRF9MMV9GUkFHX1BST0MgfCBSNjAwX01DRF9TWVNURU1fQUNDRVNTX01PREVfSU5fU1lTIHwKKwkJUjYwMF9NQ0RfU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0FDQ0VTU19QQVNTX1RIUlUgfCBSNjAwX01DRF9FRkZFQ1RJVkVfTDFfVExCX1NJWkUoNSkgfAorCQlSNjAwX01DRF9FRkZFQ1RJVkVfTDFfUVVFVUVfU0laRSg1KSB8IFI2MDBfTUNEX1dBSVRfTDJfUVVFUlk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9NQ0RfUkRfQV9DTlRMLCBtY19yZF9hKTsKKwlSQURFT05fV1JJVEUoUjYwMF9NQ0RfUkRfQl9DTlRMLCBtY19yZF9hKTsKKworCVJBREVPTl9XUklURShSNjAwX01DRF9XUl9BX0NOVEwsIG1jX3JkX2EpOworCVJBREVPTl9XUklURShSNjAwX01DRF9XUl9CX0NOVEwsIG1jX3JkX2EpOworCisJUkFERU9OX1dSSVRFKFI2MDBfTUNEX1JEX0dGWF9DTlRMLCBtY19yZF9hKTsKKwlSQURFT05fV1JJVEUoUjYwMF9NQ0RfV1JfR0ZYX0NOVEwsIG1jX3JkX2EpOworCisJUkFERU9OX1dSSVRFKFI2MDBfTUNEX1JEX1NZU19DTlRMLCBtY19yZF9hKTsKKwlSQURFT05fV1JJVEUoUjYwMF9NQ0RfV1JfU1lTX0NOVEwsIG1jX3JkX2EpOworCisJUkFERU9OX1dSSVRFKFI2MDBfTUNEX1JEX0hEUF9DTlRMLCBtY19yZF9hIHwgUjYwMF9NQ0RfTDFfU1RSSUNUX09SREVSSU5HKTsKKwlSQURFT05fV1JJVEUoUjYwMF9NQ0RfV1JfSERQX0NOVEwsIG1jX3JkX2EgLyp8IFI2MDBfTUNEX0wxX1NUUklDVF9PUkRFUklORyovKTsKKworCVJBREVPTl9XUklURShSNjAwX01DRF9SRF9QRE1BX0NOVEwsIG1jX3JkX2EpOworCVJBREVPTl9XUklURShSNjAwX01DRF9XUl9QRE1BX0NOVEwsIG1jX3JkX2EpOworCisJUkFERU9OX1dSSVRFKFI2MDBfTUNEX1JEX1NFTV9DTlRMLCBtY19yZF9hIHwgUjYwMF9NQ0RfU0VNQVBIT1JFX01PREUpOworCVJBREVPTl9XUklURShSNjAwX01DRF9XUl9TRU1fQ05UTCwgbWNfcmRfYSk7CisKKwl2bV9sMl9jbnRsID0gUjYwMF9WTV9MMl9DQUNIRV9FTiB8IFI2MDBfVk1fTDJfRlJBR19QUk9DIHwgUjYwMF9WTV9FTkFCTEVfUFRFX0NBQ0hFX0xSVV9XOworCXZtX2wyX2NudGwgfD0gUjYwMF9WTV9MMl9DTlRMX1FVRVVFX1NJWkUoNyk7CisJUkFERU9OX1dSSVRFKFI2MDBfVk1fTDJfQ05UTCwgdm1fbDJfY250bCk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9WTV9MMl9DTlRMMiwgMCk7CisJdm1fbDJfY250bDMgPSAoUjYwMF9WTV9MMl9DTlRMM19CQU5LX1NFTEVDVF8wKDApIHwKKwkJICAgICAgIFI2MDBfVk1fTDJfQ05UTDNfQkFOS19TRUxFQ1RfMSgxKSB8CisJCSAgICAgICBSNjAwX1ZNX0wyX0NOVEwzX0NBQ0hFX1VQREFURV9NT0RFKDIpKTsKKwlSQURFT05fV1JJVEUoUjYwMF9WTV9MMl9DTlRMMywgdm1fbDJfY250bDMpOworCisJdm1fYzAgPSBSNjAwX1ZNX0VOQUJMRV9DT05URVhUIHwgUjYwMF9WTV9QQUdFX1RBQkxFX0RFUFRIX0ZMQVQ7CisKKwlSQURFT05fV1JJVEUoUjYwMF9WTV9DT05URVhUMF9DTlRMLCB2bV9jMCk7CisKKwl2bV9jMCAmPSB+UjYwMF9WTV9FTkFCTEVfQ09OVEVYVDsKKworCS8qIGRpc2FibGUgYWxsIG90aGVyIGNvbnRleHRzICovCisJZm9yIChpID0gMTsgaSA8IDg7IGkrKykKKwkJUkFERU9OX1dSSVRFKFI2MDBfVk1fQ09OVEVYVDBfQ05UTCArIChpICogNCksIHZtX2MwKTsKKworCVJBREVPTl9XUklURShSNjAwX1ZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfQkFTRV9BRERSLCBkZXZfcHJpdi0+Z2FydF9pbmZvLmJ1c19hZGRyID4+IDEyKTsKKwlSQURFT05fV1JJVEUoUjYwMF9WTV9DT05URVhUMF9QQUdFX1RBQkxFX1NUQVJUX0FERFIsIGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0ID4+IDEyKTsKKwlSQURFT05fV1JJVEUoUjYwMF9WTV9DT05URVhUMF9QQUdFX1RBQkxFX0VORF9BRERSLCAoZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQgKyBkZXZfcHJpdi0+Z2FydF9zaXplIC0gMSkgPj4gMTIpOworCisJcjYwMF92bV9mbHVzaF9nYXJ0X3JhbmdlKGRldik7Cit9CisKKy8qIGxvYWQgcjYwMCBtaWNyb2NvZGUgKi8KK3N0YXRpYyB2b2lkIHI2MDBfY3BfbG9hZF9taWNyb2NvZGUoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KQoreworCWludCBpOworCisJcjYwMF9kb19jcF9zdG9wKGRldl9wcml2KTsKKworCVJBREVPTl9XUklURShSNjAwX0NQX1JCX0NOVEwsCisJCSAgICAgUjYwMF9SQl9OT19VUERBVEUgfAorCQkgICAgIFI2MDBfUkJfQkxLU1ooMTUpIHwKKwkJICAgICBSNjAwX1JCX0JVRlNaKDMpKTsKKworCVJBREVPTl9XUklURShSNjAwX0dSQk1fU09GVF9SRVNFVCwgUjYwMF9TT0ZUX1JFU0VUX0NQKTsKKwlSQURFT05fUkVBRChSNjAwX0dSQk1fU09GVF9SRVNFVCk7CisJRFJNX1VERUxBWSgxNTAwMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfR1JCTV9TT0ZUX1JFU0VULCAwKTsKKworCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9XQUREUiwgMCk7CisKKwlpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUjYwMCkpIHsKKwkJRFJNX0lORk8oIkxvYWRpbmcgUjYwMCBDUCBNaWNyb2NvZGVcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgUE00X1VDT0RFX1NJWkU7IGkrKykgeworCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCisJCQkJICAgICBSNjAwX2NwX21pY3JvY29kZVtpXVswXSk7CisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKKwkJCQkgICAgIFI2MDBfY3BfbWljcm9jb2RlW2ldWzFdKTsKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAorCQkJCSAgICAgUjYwMF9jcF9taWNyb2NvZGVbaV1bMl0pOworCQl9CisKKwkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOworCQlEUk1fSU5GTygiTG9hZGluZyBSNjAwIFBGUCBNaWNyb2NvZGVcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgUEZQX1VDT0RFX1NJWkU7IGkrKykKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9EQVRBLCBSNjAwX3BmcF9taWNyb2NvZGVbaV0pOworCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY2MTApKSB7CisJCURSTV9JTkZPKCJMb2FkaW5nIFJWNjEwIENQIE1pY3JvY29kZVxuIik7CisJCWZvciAoaSA9IDA7IGkgPCBQTTRfVUNPREVfU0laRTsgaSsrKSB7CisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKKwkJCQkgICAgIFJWNjEwX2NwX21pY3JvY29kZVtpXVswXSk7CisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKKwkJCQkgICAgIFJWNjEwX2NwX21pY3JvY29kZVtpXVsxXSk7CisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKKwkJCQkgICAgIFJWNjEwX2NwX21pY3JvY29kZVtpXVsyXSk7CisJCX0KKworCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7CisJCURSTV9JTkZPKCJMb2FkaW5nIFJWNjEwIFBGUCBNaWNyb2NvZGVcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgUEZQX1VDT0RFX1NJWkU7IGkrKykKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9EQVRBLCBSVjYxMF9wZnBfbWljcm9jb2RlW2ldKTsKKwl9IGVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNjMwKSkgeworCQlEUk1fSU5GTygiTG9hZGluZyBSVjYzMCBDUCBNaWNyb2NvZGVcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgUE00X1VDT0RFX1NJWkU7IGkrKykgeworCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCisJCQkJICAgICBSVjYzMF9jcF9taWNyb2NvZGVbaV1bMF0pOworCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCisJCQkJICAgICBSVjYzMF9jcF9taWNyb2NvZGVbaV1bMV0pOworCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCisJCQkJICAgICBSVjYzMF9jcF9taWNyb2NvZGVbaV1bMl0pOworCQl9CisKKwkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOworCQlEUk1fSU5GTygiTG9hZGluZyBSVjYzMCBQRlAgTWljcm9jb2RlXG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IFBGUF9VQ09ERV9TSVpFOyBpKyspCisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfREFUQSwgUlY2MzBfcGZwX21pY3JvY29kZVtpXSk7CisJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjYyMCkpIHsKKwkJRFJNX0lORk8oIkxvYWRpbmcgUlY2MjAgQ1AgTWljcm9jb2RlXG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IFBNNF9VQ09ERV9TSVpFOyBpKyspIHsKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAorCQkJCSAgICAgUlY2MjBfY3BfbWljcm9jb2RlW2ldWzBdKTsKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAorCQkJCSAgICAgUlY2MjBfY3BfbWljcm9jb2RlW2ldWzFdKTsKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAorCQkJCSAgICAgUlY2MjBfY3BfbWljcm9jb2RlW2ldWzJdKTsKKwkJfQorCisJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9BRERSLCAwKTsKKwkJRFJNX0lORk8oIkxvYWRpbmcgUlY2MjAgUEZQIE1pY3JvY29kZVxuIik7CisJCWZvciAoaSA9IDA7IGkgPCBQRlBfVUNPREVfU0laRTsgaSsrKQorCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0RBVEEsIFJWNjIwX3BmcF9taWNyb2NvZGVbaV0pOworCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY2MzUpKSB7CisJCURSTV9JTkZPKCJMb2FkaW5nIFJWNjM1IENQIE1pY3JvY29kZVxuIik7CisJCWZvciAoaSA9IDA7IGkgPCBQTTRfVUNPREVfU0laRTsgaSsrKSB7CisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKKwkJCQkgICAgIFJWNjM1X2NwX21pY3JvY29kZVtpXVswXSk7CisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKKwkJCQkgICAgIFJWNjM1X2NwX21pY3JvY29kZVtpXVsxXSk7CisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwKKwkJCQkgICAgIFJWNjM1X2NwX21pY3JvY29kZVtpXVsyXSk7CisJCX0KKworCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7CisJCURSTV9JTkZPKCJMb2FkaW5nIFJWNjM1IFBGUCBNaWNyb2NvZGVcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgUEZQX1VDT0RFX1NJWkU7IGkrKykKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9EQVRBLCBSVjYzNV9wZnBfbWljcm9jb2RlW2ldKTsKKwl9IGVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNjcwKSkgeworCQlEUk1fSU5GTygiTG9hZGluZyBSVjY3MCBDUCBNaWNyb2NvZGVcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgUE00X1VDT0RFX1NJWkU7IGkrKykgeworCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCisJCQkJICAgICBSVjY3MF9jcF9taWNyb2NvZGVbaV1bMF0pOworCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCisJCQkJICAgICBSVjY3MF9jcF9taWNyb2NvZGVbaV1bMV0pOworCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsCisJCQkJICAgICBSVjY3MF9jcF9taWNyb2NvZGVbaV1bMl0pOworCQl9CisKKwkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOworCQlEUk1fSU5GTygiTG9hZGluZyBSVjY3MCBQRlAgTWljcm9jb2RlXG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IFBGUF9VQ09ERV9TSVpFOyBpKyspCisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfREFUQSwgUlY2NzBfcGZwX21pY3JvY29kZVtpXSk7CisJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc4MCkpIHsKKwkJRFJNX0lORk8oIkxvYWRpbmcgUlM3ODAgQ1AgTWljcm9jb2RlXG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IFBNNF9VQ09ERV9TSVpFOyBpKyspIHsKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAorCQkJCSAgICAgUlY2NzBfY3BfbWljcm9jb2RlW2ldWzBdKTsKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAorCQkJCSAgICAgUlY2NzBfY3BfbWljcm9jb2RlW2ldWzFdKTsKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLAorCQkJCSAgICAgUlY2NzBfY3BfbWljcm9jb2RlW2ldWzJdKTsKKwkJfQorCisJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9BRERSLCAwKTsKKwkJRFJNX0lORk8oIkxvYWRpbmcgUlM3ODAgUEZQIE1pY3JvY29kZVxuIik7CisJCWZvciAoaSA9IDA7IGkgPCBQRlBfVUNPREVfU0laRTsgaSsrKQorCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0RBVEEsIFJWNjcwX3BmcF9taWNyb2NvZGVbaV0pOworCX0KKwlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX1dBRERSLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fUkFERFIsIDApOworCit9CisKK3N0YXRpYyB2b2lkIHI3MDBfdm1faW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJLyogaW5pdGlhbGlzZSB0aGUgVk0gdG8gdXNlIHRoZSBwYWdlIHRhYmxlIHdlIGNvbnN0cnVjdGVkIHVwIHRoZXJlICovCisJdTMyIHZtX2MwLCBpOworCXUzMiBtY192bV9tZF9sMTsKKwl1MzIgdm1fbDJfY250bCwgdm1fbDJfY250bDM7CisJLyogb2theSBzZXQgdXAgdGhlIFBDSUUgYXBlcnR1cmUgdHlwZSB0aGluZ28gKi8KKwlSQURFT05fV1JJVEUoUjcwMF9NQ19WTV9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIsIGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0ID4+IDEyKTsKKwlSQURFT05fV1JJVEUoUjcwMF9NQ19WTV9TWVNURU1fQVBFUlRVUkVfSElHSF9BRERSLCAoZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQgKyBkZXZfcHJpdi0+Z2FydF9zaXplIC0gMSkgPj4gMTIpOworCVJBREVPTl9XUklURShSNzAwX01DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ERUZBVUxUX0FERFIsIDApOworCisJbWNfdm1fbWRfbDEgPSBSNzAwX0VOQUJMRV9MMV9UTEIgfAorCSAgICBSNzAwX0VOQUJMRV9MMV9GUkFHTUVOVF9QUk9DRVNTSU5HIHwKKwkgICAgUjcwMF9TWVNURU1fQUNDRVNTX01PREVfSU5fU1lTIHwKKwkgICAgUjcwMF9TWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfQUNDRVNTX1BBU1NfVEhSVSB8CisJICAgIFI3MDBfRUZGRUNUSVZFX0wxX1RMQl9TSVpFKDUpIHwKKwkgICAgUjcwMF9FRkZFQ1RJVkVfTDFfUVVFVUVfU0laRSg1KTsKKworCVJBREVPTl9XUklURShSNzAwX01DX1ZNX01EX0wxX1RMQjBfQ05UTCwgbWNfdm1fbWRfbDEpOworCVJBREVPTl9XUklURShSNzAwX01DX1ZNX01EX0wxX1RMQjFfQ05UTCwgbWNfdm1fbWRfbDEpOworCVJBREVPTl9XUklURShSNzAwX01DX1ZNX01EX0wxX1RMQjJfQ05UTCwgbWNfdm1fbWRfbDEpOworCVJBREVPTl9XUklURShSNzAwX01DX1ZNX01CX0wxX1RMQjBfQ05UTCwgbWNfdm1fbWRfbDEpOworCVJBREVPTl9XUklURShSNzAwX01DX1ZNX01CX0wxX1RMQjFfQ05UTCwgbWNfdm1fbWRfbDEpOworCVJBREVPTl9XUklURShSNzAwX01DX1ZNX01CX0wxX1RMQjJfQ05UTCwgbWNfdm1fbWRfbDEpOworCVJBREVPTl9XUklURShSNzAwX01DX1ZNX01CX0wxX1RMQjNfQ05UTCwgbWNfdm1fbWRfbDEpOworCisJdm1fbDJfY250bCA9IFI2MDBfVk1fTDJfQ0FDSEVfRU4gfCBSNjAwX1ZNX0wyX0ZSQUdfUFJPQyB8IFI2MDBfVk1fRU5BQkxFX1BURV9DQUNIRV9MUlVfVzsKKwl2bV9sMl9jbnRsIHw9IFI3MDBfVk1fTDJfQ05UTF9RVUVVRV9TSVpFKDcpOworCVJBREVPTl9XUklURShSNjAwX1ZNX0wyX0NOVEwsIHZtX2wyX2NudGwpOworCisJUkFERU9OX1dSSVRFKFI2MDBfVk1fTDJfQ05UTDIsIDApOworCXZtX2wyX2NudGwzID0gUjcwMF9WTV9MMl9DTlRMM19CQU5LX1NFTEVDVCgwKSB8IFI3MDBfVk1fTDJfQ05UTDNfQ0FDSEVfVVBEQVRFX01PREUoMik7CisJUkFERU9OX1dSSVRFKFI2MDBfVk1fTDJfQ05UTDMsIHZtX2wyX2NudGwzKTsKKworCXZtX2MwID0gUjYwMF9WTV9FTkFCTEVfQ09OVEVYVCB8IFI2MDBfVk1fUEFHRV9UQUJMRV9ERVBUSF9GTEFUOworCisJUkFERU9OX1dSSVRFKFI2MDBfVk1fQ09OVEVYVDBfQ05UTCwgdm1fYzApOworCisJdm1fYzAgJj0gflI2MDBfVk1fRU5BQkxFX0NPTlRFWFQ7CisKKwkvKiBkaXNhYmxlIGFsbCBvdGhlciBjb250ZXh0cyAqLworCWZvciAoaSA9IDE7IGkgPCA4OyBpKyspCisJCVJBREVPTl9XUklURShSNjAwX1ZNX0NPTlRFWFQwX0NOVEwgKyAoaSAqIDQpLCB2bV9jMCk7CisKKwlSQURFT05fV1JJVEUoUjcwMF9WTV9DT05URVhUMF9QQUdFX1RBQkxFX0JBU0VfQUREUiwgZGV2X3ByaXYtPmdhcnRfaW5mby5idXNfYWRkciA+PiAxMik7CisJUkFERU9OX1dSSVRFKFI3MDBfVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9TVEFSVF9BRERSLCBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCA+PiAxMik7CisJUkFERU9OX1dSSVRFKFI3MDBfVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9FTkRfQUREUiwgKGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0ICsgZGV2X3ByaXYtPmdhcnRfc2l6ZSAtIDEpID4+IDEyKTsKKworCXI2MDBfdm1fZmx1c2hfZ2FydF9yYW5nZShkZXYpOworfQorCisvKiBsb2FkIHI2MDAgbWljcm9jb2RlICovCitzdGF0aWMgdm9pZCByNzAwX2NwX2xvYWRfbWljcm9jb2RlKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdikKK3sKKwlpbnQgaTsKKworCXI2MDBfZG9fY3Bfc3RvcChkZXZfcHJpdik7CisKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9DTlRMLAorCQkgICAgIFI2MDBfUkJfTk9fVVBEQVRFIHwKKwkJICAgICAoMTUgPDwgOCkgfAorCQkgICAgICgzIDw8IDApKTsKKworCVJBREVPTl9XUklURShSNjAwX0dSQk1fU09GVF9SRVNFVCwgUjYwMF9TT0ZUX1JFU0VUX0NQKTsKKwlSQURFT05fUkVBRChSNjAwX0dSQk1fU09GVF9SRVNFVCk7CisJRFJNX1VERUxBWSgxNTAwMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfR1JCTV9TT0ZUX1JFU0VULCAwKTsKKworCisJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNzcwKSkgeworCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7CisJCURSTV9JTkZPKCJMb2FkaW5nIFJWNzcwIFBGUCBNaWNyb2NvZGVcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgUjcwMF9QRlBfVUNPREVfU0laRTsgaSsrKQorCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0RBVEEsIFJWNzcwX3BmcF9taWNyb2NvZGVbaV0pOworCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfQUREUiwgMCk7CisKKwkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX1dBRERSLCAwKTsKKwkJRFJNX0lORk8oIkxvYWRpbmcgUlY3NzAgQ1AgTWljcm9jb2RlXG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IFI3MDBfUE00X1VDT0RFX1NJWkU7IGkrKykKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9EQVRBLCBSVjc3MF9jcF9taWNyb2NvZGVbaV0pOworCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fV0FERFIsIDApOworCisJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjczMCkpIHsKKwkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOworCQlEUk1fSU5GTygiTG9hZGluZyBSVjczMCBQRlAgTWljcm9jb2RlXG4iKTsKKwkJZm9yIChpID0gMDsgaSA8IFI3MDBfUEZQX1VDT0RFX1NJWkU7IGkrKykKKwkJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9EQVRBLCBSVjczMF9wZnBfbWljcm9jb2RlW2ldKTsKKwkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOworCisJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9XQUREUiwgMCk7CisJCURSTV9JTkZPKCJMb2FkaW5nIFJWNzMwIENQIE1pY3JvY29kZVxuIik7CisJCWZvciAoaSA9IDA7IGkgPCBSNzAwX1BNNF9VQ09ERV9TSVpFOyBpKyspCisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fREFUQSwgUlY3MzBfY3BfbWljcm9jb2RlW2ldKTsKKwkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX1dBRERSLCAwKTsKKworCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY3MTApKSB7CisJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9BRERSLCAwKTsKKwkJRFJNX0lORk8oIkxvYWRpbmcgUlY3MTAgUEZQIE1pY3JvY29kZVxuIik7CisJCWZvciAoaSA9IDA7IGkgPCBSNzAwX1BGUF9VQ09ERV9TSVpFOyBpKyspCisJCQlSQURFT05fV1JJVEUoUjYwMF9DUF9QRlBfVUNPREVfREFUQSwgUlY3MTBfcGZwX21pY3JvY29kZVtpXSk7CisJCVJBREVPTl9XUklURShSNjAwX0NQX1BGUF9VQ09ERV9BRERSLCAwKTsKKworCQlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9SQU1fV0FERFIsIDApOworCQlEUk1fSU5GTygiTG9hZGluZyBSVjcxMCBDUCBNaWNyb2NvZGVcbiIpOworCQlmb3IgKGkgPSAwOyBpIDwgUjcwMF9QTTRfVUNPREVfU0laRTsgaSsrKQorCQkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX0RBVEEsIFJWNzEwX2NwX21pY3JvY29kZVtpXSk7CisJCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9XQUREUiwgMCk7CisKKwl9CisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUEZQX1VDT0RFX0FERFIsIDApOworCVJBREVPTl9XUklURShSNjAwX0NQX01FX1JBTV9XQUREUiwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfUkFNX1JBRERSLCAwKTsKKworfQorCitzdGF0aWMgdm9pZCByNjAwX3Rlc3Rfd3JpdGViYWNrKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdikKK3sKKwl1MzIgdG1wOworCisJLyogU3RhcnQgd2l0aCBhc3N1bWluZyB0aGF0IHdyaXRlYmFjayBkb2Vzbid0IHdvcmsgKi8KKwlkZXZfcHJpdi0+d3JpdGViYWNrX3dvcmtzID0gMDsKKworCS8qIFdyaXRlYmFjayBkb2Vzbid0IHNlZW0gdG8gd29yayBldmVyeXdoZXJlLCB0ZXN0IGl0IGhlcmUgYW5kIHBvc3NpYmx5CisJICogZW5hYmxlIGl0IGlmIGl0IGFwcGVhcnMgdG8gd29yaworCSAqLworCXJhZGVvbl93cml0ZV9yaW5nX3JwdHIoZGV2X3ByaXYsIFI2MDBfU0NSQVRDSE9GRigxKSwgMCk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9TQ1JBVENIX1JFRzEsIDB4ZGVhZGJlZWYpOworCisJZm9yICh0bXAgPSAwOyB0bXAgPCBkZXZfcHJpdi0+dXNlY190aW1lb3V0OyB0bXArKykgeworCQl1MzIgdmFsOworCisJCXZhbCA9IHJhZGVvbl9yZWFkX3JpbmdfcnB0cihkZXZfcHJpdiwgUjYwMF9TQ1JBVENIT0ZGKDEpKTsKKwkJaWYgKHZhbCA9PSAweGRlYWRiZWVmKQorCQkJYnJlYWs7CisJCURSTV9VREVMQVkoMSk7CisJfQorCisJaWYgKHRtcCA8IGRldl9wcml2LT51c2VjX3RpbWVvdXQpIHsKKwkJZGV2X3ByaXYtPndyaXRlYmFja193b3JrcyA9IDE7CisJCURSTV9JTkZPKCJ3cml0ZWJhY2sgdGVzdCBzdWNjZWVkZWQgaW4gJWQgdXNlY3NcbiIsIHRtcCk7CisJfSBlbHNlIHsKKwkJZGV2X3ByaXYtPndyaXRlYmFja193b3JrcyA9IDA7CisJCURSTV9JTkZPKCJ3cml0ZWJhY2sgdGVzdCBmYWlsZWRcbiIpOworCX0KKwlpZiAocmFkZW9uX25vX3diID09IDEpIHsKKwkJZGV2X3ByaXYtPndyaXRlYmFja193b3JrcyA9IDA7CisJCURSTV9JTkZPKCJ3cml0ZWJhY2sgZm9yY2VkIG9mZlxuIik7CisJfQorCisJaWYgKCFkZXZfcHJpdi0+d3JpdGViYWNrX3dvcmtzKSB7CisJCS8qIERpc2FibGUgd3JpdGViYWNrIHRvIGF2b2lkIHVubmVjZXNzYXJ5IGJ1cyBtYXN0ZXIgdHJhbnNmZXIgKi8KKwkJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfQ05UTCwgUkFERU9OX1JFQUQoUjYwMF9DUF9SQl9DTlRMKSB8CisJCQkgICAgIFJBREVPTl9SQl9OT19VUERBVEUpOworCQlSQURFT05fV1JJVEUoUjYwMF9TQ1JBVENIX1VNU0ssIDApOworCX0KK30KKworaW50IHI2MDBfZG9fZW5naW5lX3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCit7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwl1MzIgY3BfcHRyLCBjcF9tZV9jbnRsLCBjcF9yYl9jbnRsOworCisJRFJNX0lORk8oIlJlc2V0dGluZyBHUFVcbiIpOworCisJY3BfcHRyID0gUkFERU9OX1JFQUQoUjYwMF9DUF9SQl9XUFRSKTsKKwljcF9tZV9jbnRsID0gUkFERU9OX1JFQUQoUjYwMF9DUF9NRV9DTlRMKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9DTlRMLCBSNjAwX0NQX01FX0hBTFQpOworCisJUkFERU9OX1dSSVRFKFI2MDBfR1JCTV9TT0ZUX1JFU0VULCAweDdmZmYpOworCVJBREVPTl9SRUFEKFI2MDBfR1JCTV9TT0ZUX1JFU0VUKTsKKwlEUk1fVURFTEFZKDUwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9HUkJNX1NPRlRfUkVTRVQsIDApOworCVJBREVPTl9SRUFEKFI2MDBfR1JCTV9TT0ZUX1JFU0VUKTsKKworCVJBREVPTl9XUklURShSNjAwX0NQX1JCX1dQVFJfREVMQVksIDApOworCWNwX3JiX2NudGwgPSBSQURFT05fUkVBRChSNjAwX0NQX1JCX0NOVEwpOworCVJBREVPTl9XUklURShSNjAwX0NQX1JCX0NOVEwsIFI2MDBfUkJfUlBUUl9XUl9FTkEpOworCisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfUlBUUl9XUiwgY3BfcHRyKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9XUFRSLCBjcF9wdHIpOworCVJBREVPTl9XUklURShSNjAwX0NQX1JCX0NOVEwsIGNwX3JiX2NudGwpOworCVJBREVPTl9XUklURShSNjAwX0NQX01FX0NOVEwsIGNwX21lX2NudGwpOworCisJLyogUmVzZXQgdGhlIENQIHJpbmcgKi8KKwlyNjAwX2RvX2NwX3Jlc2V0KGRldl9wcml2KTsKKworCS8qIFRoZSBDUCBpcyBubyBsb25nZXIgcnVubmluZyBhZnRlciBhbiBlbmdpbmUgcmVzZXQgKi8KKwlkZXZfcHJpdi0+Y3BfcnVubmluZyA9IDA7CisKKwkvKiBSZXNldCBhbnkgcGVuZGluZyB2ZXJ0ZXgsIGluZGlyZWN0IGJ1ZmZlcnMgKi8KKwlyYWRlb25fZnJlZWxpc3RfcmVzZXQoZGV2KTsKKworCXJldHVybiAwOworCit9CisKK3N0YXRpYyB1MzIgcjYwMF9nZXRfdGlsZV9waXBlX3RvX2JhY2tlbmRfbWFwKHUzMiBudW1fdGlsZV9waXBlcywKKwkJCQkJICAgICB1MzIgbnVtX2JhY2tlbmRzLAorCQkJCQkgICAgIHUzMiBiYWNrZW5kX2Rpc2FibGVfbWFzaykKK3sKKwl1MzIgYmFja2VuZF9tYXAgPSAwOworCXUzMiBlbmFibGVkX2JhY2tlbmRzX21hc2s7CisJdTMyIGVuYWJsZWRfYmFja2VuZHNfY291bnQ7CisJdTMyIGN1cl9waXBlOworCXUzMiBzd2l6emxlX3BpcGVbUjZYWF9NQVhfUElQRVNdOworCXUzMiBjdXJfYmFja2VuZDsKKwl1MzIgaTsKKworCWlmIChudW1fdGlsZV9waXBlcyA+IFI2WFhfTUFYX1BJUEVTKQorCQludW1fdGlsZV9waXBlcyA9IFI2WFhfTUFYX1BJUEVTOworCWlmIChudW1fdGlsZV9waXBlcyA8IDEpCisJCW51bV90aWxlX3BpcGVzID0gMTsKKwlpZiAobnVtX2JhY2tlbmRzID4gUjZYWF9NQVhfQkFDS0VORFMpCisJCW51bV9iYWNrZW5kcyA9IFI2WFhfTUFYX0JBQ0tFTkRTOworCWlmIChudW1fYmFja2VuZHMgPCAxKQorCQludW1fYmFja2VuZHMgPSAxOworCisJZW5hYmxlZF9iYWNrZW5kc19tYXNrID0gMDsKKwllbmFibGVkX2JhY2tlbmRzX2NvdW50ID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgUjZYWF9NQVhfQkFDS0VORFM7ICsraSkgeworCQlpZiAoKChiYWNrZW5kX2Rpc2FibGVfbWFzayA+PiBpKSAmIDEpID09IDApIHsKKwkJCWVuYWJsZWRfYmFja2VuZHNfbWFzayB8PSAoMSA8PCBpKTsKKwkJCSsrZW5hYmxlZF9iYWNrZW5kc19jb3VudDsKKwkJfQorCQlpZiAoZW5hYmxlZF9iYWNrZW5kc19jb3VudCA9PSBudW1fYmFja2VuZHMpCisJCQlicmVhazsKKwl9CisKKwlpZiAoZW5hYmxlZF9iYWNrZW5kc19jb3VudCA9PSAwKSB7CisJCWVuYWJsZWRfYmFja2VuZHNfbWFzayA9IDE7CisJCWVuYWJsZWRfYmFja2VuZHNfY291bnQgPSAxOworCX0KKworCWlmIChlbmFibGVkX2JhY2tlbmRzX2NvdW50ICE9IG51bV9iYWNrZW5kcykKKwkJbnVtX2JhY2tlbmRzID0gZW5hYmxlZF9iYWNrZW5kc19jb3VudDsKKworCW1lbXNldCgodWludDhfdCAqKSZzd2l6emxlX3BpcGVbMF0sIDAsIHNpemVvZih1MzIpICogUjZYWF9NQVhfUElQRVMpOworCXN3aXRjaCAobnVtX3RpbGVfcGlwZXMpIHsKKwljYXNlIDE6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJc3dpenpsZV9waXBlWzFdID0gMTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQlzd2l6emxlX3BpcGVbMV0gPSAxOworCQlzd2l6emxlX3BpcGVbMl0gPSAyOworCQlicmVhazsKKwljYXNlIDQ6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCXN3aXp6bGVfcGlwZVsxXSA9IDE7CisJCXN3aXp6bGVfcGlwZVsyXSA9IDI7CisJCXN3aXp6bGVfcGlwZVszXSA9IDM7CisJCWJyZWFrOworCWNhc2UgNToKKwkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJc3dpenpsZV9waXBlWzFdID0gMTsKKwkJc3dpenpsZV9waXBlWzJdID0gMjsKKwkJc3dpenpsZV9waXBlWzNdID0gMzsKKwkJc3dpenpsZV9waXBlWzRdID0gNDsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQlzd2l6emxlX3BpcGVbMV0gPSAyOworCQlzd2l6emxlX3BpcGVbMl0gPSA0OworCQlzd2l6emxlX3BpcGVbM10gPSA1OworCQlzd2l6emxlX3BpcGVbNF0gPSAxOworCQlzd2l6emxlX3BpcGVbNV0gPSAzOworCQlicmVhazsKKwljYXNlIDc6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCXN3aXp6bGVfcGlwZVsyXSA9IDQ7CisJCXN3aXp6bGVfcGlwZVszXSA9IDY7CisJCXN3aXp6bGVfcGlwZVs0XSA9IDE7CisJCXN3aXp6bGVfcGlwZVs1XSA9IDM7CisJCXN3aXp6bGVfcGlwZVs2XSA9IDU7CisJCWJyZWFrOworCWNhc2UgODoKKwkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJc3dpenpsZV9waXBlWzFdID0gMjsKKwkJc3dpenpsZV9waXBlWzJdID0gNDsKKwkJc3dpenpsZV9waXBlWzNdID0gNjsKKwkJc3dpenpsZV9waXBlWzRdID0gMTsKKwkJc3dpenpsZV9waXBlWzVdID0gMzsKKwkJc3dpenpsZV9waXBlWzZdID0gNTsKKwkJc3dpenpsZV9waXBlWzddID0gNzsKKwkJYnJlYWs7CisJfQorCisJY3VyX2JhY2tlbmQgPSAwOworCWZvciAoY3VyX3BpcGUgPSAwOyBjdXJfcGlwZSA8IG51bV90aWxlX3BpcGVzOyArK2N1cl9waXBlKSB7CisJCXdoaWxlICgoKDEgPDwgY3VyX2JhY2tlbmQpICYgZW5hYmxlZF9iYWNrZW5kc19tYXNrKSA9PSAwKQorCQkJY3VyX2JhY2tlbmQgPSAoY3VyX2JhY2tlbmQgKyAxKSAlIFI2WFhfTUFYX0JBQ0tFTkRTOworCisJCWJhY2tlbmRfbWFwIHw9ICh1MzIpKCgoY3VyX2JhY2tlbmQgJiAzKSA8PCAoc3dpenpsZV9waXBlW2N1cl9waXBlXSAqIDIpKSk7CisKKwkJY3VyX2JhY2tlbmQgPSAoY3VyX2JhY2tlbmQgKyAxKSAlIFI2WFhfTUFYX0JBQ0tFTkRTOworCX0KKworCXJldHVybiBiYWNrZW5kX21hcDsKK30KKworc3RhdGljIGludCByNjAwX2NvdW50X3BpcGVfYml0cyh1aW50MzJfdCB2YWwpCit7CisJaW50IGksIHJldCA9IDA7CisJZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHsKKwkJcmV0ICs9IHZhbCAmIDE7CisJCXZhbCA+Pj0gMTsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHZvaWQgcjYwMF9nZnhfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJICBkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpCit7CisJaW50IGksIGosIG51bV9xZF9waXBlczsKKwl1MzIgc3hfZGVidWdfMTsKKwl1MzIgdGNfY250bDsKKwl1MzIgYXJiX3BvcDsKKwl1MzIgbnVtX2dzX3ZlcnRzX3Blcl90aHJlYWQ7CisJdTMyIHZndF9nc19wZXJfZXM7CisJdTMyIGdzX3ByaW1fYnVmZmVyX2RlcHRoID0gMDsKKwl1MzIgc3FfbXNfZmlmb19zaXplczsKKwl1MzIgc3FfY29uZmlnOworCXUzMiBzcV9ncHJfcmVzb3VyY2VfbWdtdF8xID0gMDsKKwl1MzIgc3FfZ3ByX3Jlc291cmNlX21nbXRfMiA9IDA7CisJdTMyIHNxX3RocmVhZF9yZXNvdXJjZV9tZ210ID0gMDsKKwl1MzIgc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8xID0gMDsKKwl1MzIgc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yID0gMDsKKwl1MzIgaGRwX2hvc3RfcGF0aF9jbnRsOworCXUzMiBiYWNrZW5kX21hcDsKKwl1MzIgZ2JfdGlsaW5nX2NvbmZpZyA9IDA7CisJdTMyIGNjX3JiX2JhY2tlbmRfZGlzYWJsZSA9IDA7CisJdTMyIGNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyA9IDA7CisJdTMyIHJhbWNmZzsKKworCS8qIHNldHVwIGNoaXAgc3BlY3MgKi8KKwlzd2l0Y2ggKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgeworCWNhc2UgQ0hJUF9SNjAwOgorCQlkZXZfcHJpdi0+cjYwMF9tYXhfcGlwZXMgPSA0OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfdGlsZV9waXBlcyA9IDg7CisJCWRldl9wcml2LT5yNjAwX21heF9zaW1kcyA9IDQ7CisJCWRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcyA9IDQ7CisJCWRldl9wcml2LT5yNjAwX21heF9ncHJzID0gMjU2OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfdGhyZWFkcyA9IDE5MjsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X3N0YWNrX2VudHJpZXMgPSAyNTY7CisJCWRldl9wcml2LT5yNjAwX21heF9od19jb250ZXh0cyA9IDg7CisJCWRldl9wcml2LT5yNjAwX21heF9nc190aHJlYWRzID0gMTY7CisJCWRldl9wcml2LT5yNjAwX3N4X21heF9leHBvcnRfc2l6ZSA9IDEyODsKKwkJZGV2X3ByaXYtPnI2MDBfc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSA9IDE2OworCQlkZXZfcHJpdi0+cjYwMF9zeF9tYXhfZXhwb3J0X3NteF9zaXplID0gMTI4OworCQlkZXZfcHJpdi0+cjYwMF9zcV9udW1fY2ZfaW5zdHMgPSAyOworCQlicmVhazsKKwljYXNlIENISVBfUlY2MzA6CisJY2FzZSBDSElQX1JWNjM1OgorCQlkZXZfcHJpdi0+cjYwMF9tYXhfcGlwZXMgPSAyOworCQlkZXZfcHJpdi0+cjYwMF9tYXhfdGlsZV9waXBlcyA9IDI7CisJCWRldl9wcml2LT5yNjAwX21heF9zaW1kcyA9IDM7CisJCWRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcyA9IDE7CisJCWRldl9wcml2LT5yNjAwX21heF9ncHJzID0gMTI4OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfdGhyZWFkcyA9IDE5MjsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X3N0YWNrX2VudHJpZXMgPSAxMjg7CisJCWRldl9wcml2LT5yNjAwX21heF9od19jb250ZXh0cyA9IDg7CisJCWRldl9wcml2LT5yNjAwX21heF9nc190aHJlYWRzID0gNDsKKwkJZGV2X3ByaXYtPnI2MDBfc3hfbWF4X2V4cG9ydF9zaXplID0gMTI4OworCQlkZXZfcHJpdi0+cjYwMF9zeF9tYXhfZXhwb3J0X3Bvc19zaXplID0gMTY7CisJCWRldl9wcml2LT5yNjAwX3N4X21heF9leHBvcnRfc214X3NpemUgPSAxMjg7CisJCWRldl9wcml2LT5yNjAwX3NxX251bV9jZl9pbnN0cyA9IDI7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SVjYxMDoKKwljYXNlIENISVBfUlM3ODA6CisJY2FzZSBDSElQX1JWNjIwOgorCQlkZXZfcHJpdi0+cjYwMF9tYXhfcGlwZXMgPSAxOworCQlkZXZfcHJpdi0+cjYwMF9tYXhfdGlsZV9waXBlcyA9IDE7CisJCWRldl9wcml2LT5yNjAwX21heF9zaW1kcyA9IDI7CisJCWRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcyA9IDE7CisJCWRldl9wcml2LT5yNjAwX21heF9ncHJzID0gMTI4OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfdGhyZWFkcyA9IDE5MjsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X3N0YWNrX2VudHJpZXMgPSAxMjg7CisJCWRldl9wcml2LT5yNjAwX21heF9od19jb250ZXh0cyA9IDQ7CisJCWRldl9wcml2LT5yNjAwX21heF9nc190aHJlYWRzID0gNDsKKwkJZGV2X3ByaXYtPnI2MDBfc3hfbWF4X2V4cG9ydF9zaXplID0gMTI4OworCQlkZXZfcHJpdi0+cjYwMF9zeF9tYXhfZXhwb3J0X3Bvc19zaXplID0gMTY7CisJCWRldl9wcml2LT5yNjAwX3N4X21heF9leHBvcnRfc214X3NpemUgPSAxMjg7CisJCWRldl9wcml2LT5yNjAwX3NxX251bV9jZl9pbnN0cyA9IDE7CisJCWJyZWFrOworCWNhc2UgQ0hJUF9SVjY3MDoKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X3BpcGVzID0gNDsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X3RpbGVfcGlwZXMgPSA0OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfc2ltZHMgPSA0OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfYmFja2VuZHMgPSA0OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfZ3BycyA9IDE5MjsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X3RocmVhZHMgPSAxOTI7CisJCWRldl9wcml2LT5yNjAwX21heF9zdGFja19lbnRyaWVzID0gMjU2OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfaHdfY29udGV4dHMgPSA4OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfZ3NfdGhyZWFkcyA9IDE2OworCQlkZXZfcHJpdi0+cjYwMF9zeF9tYXhfZXhwb3J0X3NpemUgPSAxMjg7CisJCWRldl9wcml2LT5yNjAwX3N4X21heF9leHBvcnRfcG9zX3NpemUgPSAxNjsKKwkJZGV2X3ByaXYtPnI2MDBfc3hfbWF4X2V4cG9ydF9zbXhfc2l6ZSA9IDEyODsKKwkJZGV2X3ByaXYtPnI2MDBfc3FfbnVtX2NmX2luc3RzID0gMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyogSW5pdGlhbGl6ZSBIRFAgKi8KKwlqID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlSQURFT05fV1JJVEUoKDB4MmMxNCArIGopLCAweDAwMDAwMDAwKTsKKwkJUkFERU9OX1dSSVRFKCgweDJjMTggKyBqKSwgMHgwMDAwMDAwMCk7CisJCVJBREVPTl9XUklURSgoMHgyYzFjICsgaiksIDB4MDAwMDAwMDApOworCQlSQURFT05fV1JJVEUoKDB4MmMyMCArIGopLCAweDAwMDAwMDAwKTsKKwkJUkFERU9OX1dSSVRFKCgweDJjMjQgKyBqKSwgMHgwMDAwMDAwMCk7CisJCWogKz0gMHgxODsKKwl9CisKKwlSQURFT05fV1JJVEUoUjYwMF9HUkJNX0NOVEwsIFI2MDBfR1JCTV9SRUFEX1RJTUVPVVQoMHhmZikpOworCisJLyogc2V0dXAgdGlsaW5nLCBzaW1kLCBwaXBlIGNvbmZpZyAqLworCXJhbWNmZyA9IFJBREVPTl9SRUFEKFI2MDBfUkFNQ0ZHKTsKKworCXN3aXRjaCAoZGV2X3ByaXYtPnI2MDBfbWF4X3RpbGVfcGlwZXMpIHsKKwljYXNlIDE6CisJCWdiX3RpbGluZ19jb25maWcgfD0gUjYwMF9QSVBFX1RJTElORygwKTsKKwkJYnJlYWs7CisJY2FzZSAyOgorCQlnYl90aWxpbmdfY29uZmlnIHw9IFI2MDBfUElQRV9USUxJTkcoMSk7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX1BJUEVfVElMSU5HKDIpOworCQlicmVhazsKKwljYXNlIDg6CisJCWdiX3RpbGluZ19jb25maWcgfD0gUjYwMF9QSVBFX1RJTElORygzKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX0JBTktfVElMSU5HKChyYW1jZmcgPj4gUjYwMF9OT09GQkFOS19TSElGVCkgJiBSNjAwX05PT0ZCQU5LX01BU0spOworCisJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX0dST1VQX1NJWkUoMCk7CisKKwlpZiAoKChyYW1jZmcgPj4gUjYwMF9OT09GUk9XU19TSElGVCkgJiBSNjAwX05PT0ZST1dTX01BU0spID4gMykgeworCQlnYl90aWxpbmdfY29uZmlnIHw9IFI2MDBfUk9XX1RJTElORygzKTsKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX1NBTVBMRV9TUExJVCgzKTsKKwl9IGVsc2UgeworCQlnYl90aWxpbmdfY29uZmlnIHw9CisJCQlSNjAwX1JPV19USUxJTkcoKChyYW1jZmcgPj4gUjYwMF9OT09GUk9XU19TSElGVCkgJiBSNjAwX05PT0ZST1dTX01BU0spKTsKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PQorCQkJUjYwMF9TQU1QTEVfU1BMSVQoKChyYW1jZmcgPj4gUjYwMF9OT09GUk9XU19TSElGVCkgJiBSNjAwX05PT0ZST1dTX01BU0spKTsKKwl9CisKKwlnYl90aWxpbmdfY29uZmlnIHw9IFI2MDBfQkFOS19TV0FQUygxKTsKKworCWJhY2tlbmRfbWFwID0gcjYwMF9nZXRfdGlsZV9waXBlX3RvX2JhY2tlbmRfbWFwKGRldl9wcml2LT5yNjAwX21heF90aWxlX3BpcGVzLAorCQkJCQkJCWRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcywKKwkJCQkJCQkoMHhmZiA8PCBkZXZfcHJpdi0+cjYwMF9tYXhfYmFja2VuZHMpICYgMHhmZik7CisJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX0JBQ0tFTkRfTUFQKGJhY2tlbmRfbWFwKTsKKworCWNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyA9CisJCVI2MDBfSU5BQ1RJVkVfUURfUElQRVMoKFI2WFhfTUFYX1BJUEVTX01BU0sgPDwgZGV2X3ByaXYtPnI2MDBfbWF4X3BpcGVzKSAmIFI2WFhfTUFYX1BJUEVTX01BU0spOworCWNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyB8PQorCQlSNjAwX0lOQUNUSVZFX1NJTURTKChSNlhYX01BWF9TSU1EU19NQVNLIDw8IGRldl9wcml2LT5yNjAwX21heF9zaW1kcykgJiBSNlhYX01BWF9TSU1EU19NQVNLKTsKKworCWNjX3JiX2JhY2tlbmRfZGlzYWJsZSA9CisJCVI2MDBfQkFDS0VORF9ESVNBQkxFKChSNlhYX01BWF9CQUNLRU5EU19NQVNLIDw8IGRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcykgJiBSNlhYX01BWF9CQUNLRU5EU19NQVNLKTsKKworCVJBREVPTl9XUklURShSNjAwX0dCX1RJTElOR19DT05GSUcsICAgICAgZ2JfdGlsaW5nX2NvbmZpZyk7CisJUkFERU9OX1dSSVRFKFI2MDBfRENQX1RJTElOR19DT05GSUcsICAgIChnYl90aWxpbmdfY29uZmlnICYgMHhmZmZmKSk7CisJUkFERU9OX1dSSVRFKFI2MDBfSERQX1RJTElOR19DT05GSUcsICAgIChnYl90aWxpbmdfY29uZmlnICYgMHhmZmZmKSk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9DQ19SQl9CQUNLRU5EX0RJU0FCTEUsICAgICAgY2NfcmJfYmFja2VuZF9kaXNhYmxlKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DQ19HQ19TSEFERVJfUElQRV9DT05GSUcsICAgY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnKTsKKwlSQURFT05fV1JJVEUoUjYwMF9HQ19VU0VSX1NIQURFUl9QSVBFX0NPTkZJRywgY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnKTsKKworCW51bV9xZF9waXBlcyA9CisJCVI2WFhfTUFYX0JBQ0tFTkRTIC0gcjYwMF9jb3VudF9waXBlX2JpdHMoY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnICYgUjYwMF9JTkFDVElWRV9RRF9QSVBFU19NQVNLKTsKKwlSQURFT05fV1JJVEUoUjYwMF9WR1RfT1VUX0RFQUxMT0NfQ05UTCwgKG51bV9xZF9waXBlcyAqIDQpICYgUjYwMF9ERUFMTE9DX0RJU1RfTUFTSyk7CisJUkFERU9OX1dSSVRFKFI2MDBfVkdUX1ZFUlRFWF9SRVVTRV9CTE9DS19DTlRMLCAoKG51bV9xZF9waXBlcyAqIDQpIC0gMikgJiBSNjAwX1ZUWF9SRVVTRV9ERVBUSF9NQVNLKTsKKworCS8qIHNldCBIVyBkZWZhdWx0cyBmb3IgM0QgZW5naW5lICovCisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUVVFVUVfVEhSRVNIT0xEUywgKFI2MDBfUk9RX0lCMV9TVEFSVCgweDE2KSB8CisJCQkJCQlSNjAwX1JPUV9JQjJfU1RBUlQoMHgyYikpKTsKKworCVJBREVPTl9XUklURShSNjAwX0NQX01FUV9USFJFU0hPTERTLCAoUjYwMF9NRVFfRU5EKDB4NDApIHwKKwkJCQkJICAgICAgUjYwMF9ST1FfRU5EKDB4NDApKSk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9UQV9DTlRMX0FVWCwgKFI2MDBfRElTQUJMRV9DVUJFX0FOSVNPIHwKKwkJCQkJUjYwMF9TWU5DX0dSQURJRU5UIHwKKwkJCQkJUjYwMF9TWU5DX1dBTEtFUiB8CisJCQkJCVI2MDBfU1lOQ19BTElHTkVSKSk7CisKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjY3MCkKKwkJUkFERU9OX1dSSVRFKFI2MDBfQVJCX0dERUNfUkRfQ05UTCwgMHgwMDAwMDAyMSk7CisKKwlzeF9kZWJ1Z18xID0gUkFERU9OX1JFQUQoUjYwMF9TWF9ERUJVR18xKTsKKwlzeF9kZWJ1Z18xIHw9IFI2MDBfU01YX0VWRU5UX1JFTEVBU0U7CisJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+IENISVBfUjYwMCkpCisJCXN4X2RlYnVnXzEgfD0gUjYwMF9FTkFCTEVfTkVXX1NNWF9BRERSRVNTOworCVJBREVPTl9XUklURShSNjAwX1NYX0RFQlVHXzEsIHN4X2RlYnVnXzEpOworCisJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1I2MDApIHx8CisJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNjMwKSB8fAorCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjYxMCkgfHwKKwkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY2MjApIHx8CisJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzgwKSkKKwkJUkFERU9OX1dSSVRFKFI2MDBfREJfREVCVUcsIFI2MDBfUFJFWl9NVVNUX1dBSVRfRk9SX1BPU1RaX0RPTkUpOworCWVsc2UKKwkJUkFERU9OX1dSSVRFKFI2MDBfREJfREVCVUcsIDApOworCisJUkFERU9OX1dSSVRFKFI2MDBfREJfV0FURVJNQVJLUywgKFI2MDBfREVQVEhfRlJFRSg0KSB8CisJCQkJCSAgUjYwMF9ERVBUSF9GTFVTSCgxNikgfAorCQkJCQkgIFI2MDBfREVQVEhfUEVORElOR19GUkVFKDQpIHwKKwkJCQkJICBSNjAwX0RFUFRIX0NBQ0hFTElORV9GUkVFKDE2KSkpOworCVJBREVPTl9XUklURShSNjAwX1BBX1NDX01VTFRJX0NISVBfQ05UTCwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfVkdUX05VTV9JTlNUQU5DRVMsIDApOworCisJUkFERU9OX1dSSVRFKFI2MDBfU1BJX0NPTkZJR19DTlRMLCBSNjAwX0dQUl9XUklURV9QUklPUklUWSgwKSk7CisJUkFERU9OX1dSSVRFKFI2MDBfU1BJX0NPTkZJR19DTlRMXzEsIFI2MDBfVlRYX0RPTkVfREVMQVkoMCkpOworCisJc3FfbXNfZmlmb19zaXplcyA9IFJBREVPTl9SRUFEKFI2MDBfU1FfTVNfRklGT19TSVpFUyk7CisJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNjEwKSB8fAorCSAgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjYyMCkgfHwKKwkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3ODApKSB7CisJCXNxX21zX2ZpZm9fc2l6ZXMgPSAoUjYwMF9DQUNIRV9GSUZPX1NJWkUoMHhhKSB8CisJCQkJICAgIFI2MDBfRkVUQ0hfRklGT19ISVdBVEVSKDB4YSkgfAorCQkJCSAgICBSNjAwX0RPTkVfRklGT19ISVdBVEVSKDB4ZTApIHwKKwkJCQkgICAgUjYwMF9BTFVfVVBEQVRFX0ZJRk9fSElXQVRFUigweDgpKTsKKwl9IGVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1I2MDApIHx8CisJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNjMwKSkgeworCQlzcV9tc19maWZvX3NpemVzICY9IH5SNjAwX0RPTkVfRklGT19ISVdBVEVSKDB4ZmYpOworCQlzcV9tc19maWZvX3NpemVzIHw9IFI2MDBfRE9ORV9GSUZPX0hJV0FURVIoMHg0KTsKKwl9CisJUkFERU9OX1dSSVRFKFI2MDBfU1FfTVNfRklGT19TSVpFUywgc3FfbXNfZmlmb19zaXplcyk7CisKKwkvKiBTUV9DT05GSUcsIFNRX0dQUl9SRVNPVVJDRV9NR01ULCBTUV9USFJFQURfUkVTT1VSQ0VfTUdNVCwgU1FfU1RBQ0tfUkVTT1VSQ0VfTUdNVAorCSAqIHNob3VsZCBiZSBhZGp1c3RlZCBhcyBuZWVkZWQgYnkgdGhlIDJELzNEIGRyaXZlcnMuICBUaGlzIGp1c3Qgc2V0cyBkZWZhdWx0IHZhbHVlcworCSAqLworCXNxX2NvbmZpZyA9IFJBREVPTl9SRUFEKFI2MDBfU1FfQ09ORklHKTsKKwlzcV9jb25maWcgJj0gfihSNjAwX1BTX1BSSU8oMykgfAorCQkgICAgICAgUjYwMF9WU19QUklPKDMpIHwKKwkJICAgICAgIFI2MDBfR1NfUFJJTygzKSB8CisJCSAgICAgICBSNjAwX0VTX1BSSU8oMykpOworCXNxX2NvbmZpZyB8PSAoUjYwMF9EWDlfQ09OU1RTIHwKKwkJICAgICAgUjYwMF9WQ19FTkFCTEUgfAorCQkgICAgICBSNjAwX1BTX1BSSU8oMCkgfAorCQkgICAgICBSNjAwX1ZTX1BSSU8oMSkgfAorCQkgICAgICBSNjAwX0dTX1BSSU8oMikgfAorCQkgICAgICBSNjAwX0VTX1BSSU8oMykpOworCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUjYwMCkgeworCQlzcV9ncHJfcmVzb3VyY2VfbWdtdF8xID0gKFI2MDBfTlVNX1BTX0dQUlMoMTI0KSB8CisJCQkJCSAgUjYwMF9OVU1fVlNfR1BSUygxMjQpIHwKKwkJCQkJICBSNjAwX05VTV9DTEFVU0VfVEVNUF9HUFJTKDQpKTsKKwkJc3FfZ3ByX3Jlc291cmNlX21nbXRfMiA9IChSNjAwX05VTV9HU19HUFJTKDApIHwKKwkJCQkJICBSNjAwX05VTV9FU19HUFJTKDApKTsKKwkJc3FfdGhyZWFkX3Jlc291cmNlX21nbXQgPSAoUjYwMF9OVU1fUFNfVEhSRUFEUygxMzYpIHwKKwkJCQkJICAgUjYwMF9OVU1fVlNfVEhSRUFEUyg0OCkgfAorCQkJCQkgICBSNjAwX05VTV9HU19USFJFQURTKDQpIHwKKwkJCQkJICAgUjYwMF9OVU1fRVNfVEhSRUFEUyg0KSk7CisJCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMSA9IChSNjAwX05VTV9QU19TVEFDS19FTlRSSUVTKDEyOCkgfAorCQkJCQkgICAgUjYwMF9OVU1fVlNfU1RBQ0tfRU5UUklFUygxMjgpKTsKKwkJc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yID0gKFI2MDBfTlVNX0dTX1NUQUNLX0VOVFJJRVMoMCkgfAorCQkJCQkgICAgUjYwMF9OVU1fRVNfU1RBQ0tfRU5UUklFUygwKSk7CisJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjYxMCkgfHwKKwkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY2MjApIHx8CisJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzgwKSkgeworCQkvKiBubyB2ZXJ0ZXggY2FjaGUgKi8KKwkJc3FfY29uZmlnICY9IH5SNjAwX1ZDX0VOQUJMRTsKKworCQlzcV9ncHJfcmVzb3VyY2VfbWdtdF8xID0gKFI2MDBfTlVNX1BTX0dQUlMoNDQpIHwKKwkJCQkJICBSNjAwX05VTV9WU19HUFJTKDQ0KSB8CisJCQkJCSAgUjYwMF9OVU1fQ0xBVVNFX1RFTVBfR1BSUygyKSk7CisJCXNxX2dwcl9yZXNvdXJjZV9tZ210XzIgPSAoUjYwMF9OVU1fR1NfR1BSUygxNykgfAorCQkJCQkgIFI2MDBfTlVNX0VTX0dQUlMoMTcpKTsKKwkJc3FfdGhyZWFkX3Jlc291cmNlX21nbXQgPSAoUjYwMF9OVU1fUFNfVEhSRUFEUyg3OSkgfAorCQkJCQkgICBSNjAwX05VTV9WU19USFJFQURTKDc4KSB8CisJCQkJCSAgIFI2MDBfTlVNX0dTX1RIUkVBRFMoNCkgfAorCQkJCQkgICBSNjAwX05VTV9FU19USFJFQURTKDMxKSk7CisJCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMSA9IChSNjAwX05VTV9QU19TVEFDS19FTlRSSUVTKDQwKSB8CisJCQkJCSAgICBSNjAwX05VTV9WU19TVEFDS19FTlRSSUVTKDQwKSk7CisJCXNxX3N0YWNrX3Jlc291cmNlX21nbXRfMiA9IChSNjAwX05VTV9HU19TVEFDS19FTlRSSUVTKDMyKSB8CisJCQkJCSAgICBSNjAwX05VTV9FU19TVEFDS19FTlRSSUVTKDE2KSk7CisJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjYzMCkgfHwKKwkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY2MzUpKSB7CisJCXNxX2dwcl9yZXNvdXJjZV9tZ210XzEgPSAoUjYwMF9OVU1fUFNfR1BSUyg0NCkgfAorCQkJCQkgIFI2MDBfTlVNX1ZTX0dQUlMoNDQpIHwKKwkJCQkJICBSNjAwX05VTV9DTEFVU0VfVEVNUF9HUFJTKDIpKTsKKwkJc3FfZ3ByX3Jlc291cmNlX21nbXRfMiA9IChSNjAwX05VTV9HU19HUFJTKDE4KSB8CisJCQkJCSAgUjYwMF9OVU1fRVNfR1BSUygxOCkpOworCQlzcV90aHJlYWRfcmVzb3VyY2VfbWdtdCA9IChSNjAwX05VTV9QU19USFJFQURTKDc5KSB8CisJCQkJCSAgIFI2MDBfTlVNX1ZTX1RIUkVBRFMoNzgpIHwKKwkJCQkJICAgUjYwMF9OVU1fR1NfVEhSRUFEUyg0KSB8CisJCQkJCSAgIFI2MDBfTlVNX0VTX1RIUkVBRFMoMzEpKTsKKwkJc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8xID0gKFI2MDBfTlVNX1BTX1NUQUNLX0VOVFJJRVMoNDApIHwKKwkJCQkJICAgIFI2MDBfTlVNX1ZTX1NUQUNLX0VOVFJJRVMoNDApKTsKKwkJc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yID0gKFI2MDBfTlVNX0dTX1NUQUNLX0VOVFJJRVMoMzIpIHwKKwkJCQkJICAgIFI2MDBfTlVNX0VTX1NUQUNLX0VOVFJJRVMoMTYpKTsKKwl9IGVsc2UgaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY2NzApIHsKKwkJc3FfZ3ByX3Jlc291cmNlX21nbXRfMSA9IChSNjAwX05VTV9QU19HUFJTKDQ0KSB8CisJCQkJCSAgUjYwMF9OVU1fVlNfR1BSUyg0NCkgfAorCQkJCQkgIFI2MDBfTlVNX0NMQVVTRV9URU1QX0dQUlMoMikpOworCQlzcV9ncHJfcmVzb3VyY2VfbWdtdF8yID0gKFI2MDBfTlVNX0dTX0dQUlMoMTcpIHwKKwkJCQkJICBSNjAwX05VTV9FU19HUFJTKDE3KSk7CisJCXNxX3RocmVhZF9yZXNvdXJjZV9tZ210ID0gKFI2MDBfTlVNX1BTX1RIUkVBRFMoNzkpIHwKKwkJCQkJICAgUjYwMF9OVU1fVlNfVEhSRUFEUyg3OCkgfAorCQkJCQkgICBSNjAwX05VTV9HU19USFJFQURTKDQpIHwKKwkJCQkJICAgUjYwMF9OVU1fRVNfVEhSRUFEUygzMSkpOworCQlzcV9zdGFja19yZXNvdXJjZV9tZ210XzEgPSAoUjYwMF9OVU1fUFNfU1RBQ0tfRU5UUklFUyg2NCkgfAorCQkJCQkgICAgUjYwMF9OVU1fVlNfU1RBQ0tfRU5UUklFUyg2NCkpOworCQlzcV9zdGFja19yZXNvdXJjZV9tZ210XzIgPSAoUjYwMF9OVU1fR1NfU1RBQ0tfRU5UUklFUyg2NCkgfAorCQkJCQkgICAgUjYwMF9OVU1fRVNfU1RBQ0tfRU5UUklFUyg2NCkpOworCX0KKworCVJBREVPTl9XUklURShSNjAwX1NRX0NPTkZJRywgc3FfY29uZmlnKTsKKwlSQURFT05fV1JJVEUoUjYwMF9TUV9HUFJfUkVTT1VSQ0VfTUdNVF8xLCAgc3FfZ3ByX3Jlc291cmNlX21nbXRfMSk7CisJUkFERU9OX1dSSVRFKFI2MDBfU1FfR1BSX1JFU09VUkNFX01HTVRfMiwgIHNxX2dwcl9yZXNvdXJjZV9tZ210XzIpOworCVJBREVPTl9XUklURShSNjAwX1NRX1RIUkVBRF9SRVNPVVJDRV9NR01ULCBzcV90aHJlYWRfcmVzb3VyY2VfbWdtdCk7CisJUkFERU9OX1dSSVRFKFI2MDBfU1FfU1RBQ0tfUkVTT1VSQ0VfTUdNVF8xLCBzcV9zdGFja19yZXNvdXJjZV9tZ210XzEpOworCVJBREVPTl9XUklURShSNjAwX1NRX1NUQUNLX1JFU09VUkNFX01HTVRfMiwgc3Ffc3RhY2tfcmVzb3VyY2VfbWdtdF8yKTsKKworCWlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjYxMCkgfHwKKwkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY2MjApIHx8CisJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzgwKSkKKwkJUkFERU9OX1dSSVRFKFI2MDBfVkdUX0NBQ0hFX0lOVkFMSURBVElPTiwgUjYwMF9DQUNIRV9JTlZBTElEQVRJT04oUjYwMF9UQ19PTkxZKSk7CisJZWxzZQorCQlSQURFT05fV1JJVEUoUjYwMF9WR1RfQ0FDSEVfSU5WQUxJREFUSU9OLCBSNjAwX0NBQ0hFX0lOVkFMSURBVElPTihSNjAwX1ZDX0FORF9UQykpOworCisJUkFERU9OX1dSSVRFKFI2MDBfUEFfU0NfQUFfU0FNUExFX0xPQ1NfMlMsIChSNjAwX1MwX1goMHhjKSB8CisJCQkJCQkgICAgUjYwMF9TMF9ZKDB4NCkgfAorCQkJCQkJICAgIFI2MDBfUzFfWCgweDQpIHwKKwkJCQkJCSAgICBSNjAwX1MxX1koMHhjKSkpOworCVJBREVPTl9XUklURShSNjAwX1BBX1NDX0FBX1NBTVBMRV9MT0NTXzRTLCAoUjYwMF9TMF9YKDB4ZSkgfAorCQkJCQkJICAgIFI2MDBfUzBfWSgweGUpIHwKKwkJCQkJCSAgICBSNjAwX1MxX1goMHgyKSB8CisJCQkJCQkgICAgUjYwMF9TMV9ZKDB4MikgfAorCQkJCQkJICAgIFI2MDBfUzJfWCgweGEpIHwKKwkJCQkJCSAgICBSNjAwX1MyX1koMHg2KSB8CisJCQkJCQkgICAgUjYwMF9TM19YKDB4NikgfAorCQkJCQkJICAgIFI2MDBfUzNfWSgweGEpKSk7CisJUkFERU9OX1dSSVRFKFI2MDBfUEFfU0NfQUFfU0FNUExFX0xPQ1NfOFNfV0QwLCAoUjYwMF9TMF9YKDB4ZSkgfAorCQkJCQkJCVI2MDBfUzBfWSgweGIpIHwKKwkJCQkJCQlSNjAwX1MxX1goMHg0KSB8CisJCQkJCQkJUjYwMF9TMV9ZKDB4YykgfAorCQkJCQkJCVI2MDBfUzJfWCgweDEpIHwKKwkJCQkJCQlSNjAwX1MyX1koMHg2KSB8CisJCQkJCQkJUjYwMF9TM19YKDB4YSkgfAorCQkJCQkJCVI2MDBfUzNfWSgweGUpKSk7CisJUkFERU9OX1dSSVRFKFI2MDBfUEFfU0NfQUFfU0FNUExFX0xPQ1NfOFNfV0QxLCAoUjYwMF9TNF9YKDB4NikgfAorCQkJCQkJCVI2MDBfUzRfWSgweDEpIHwKKwkJCQkJCQlSNjAwX1M1X1goMHgwKSB8CisJCQkJCQkJUjYwMF9TNV9ZKDB4MCkgfAorCQkJCQkJCVI2MDBfUzZfWCgweGIpIHwKKwkJCQkJCQlSNjAwX1M2X1koMHg0KSB8CisJCQkJCQkJUjYwMF9TN19YKDB4NykgfAorCQkJCQkJCVI2MDBfUzdfWSgweDgpKSk7CisKKworCXN3aXRjaCAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSB7CisJY2FzZSBDSElQX1I2MDA6CisJY2FzZSBDSElQX1JWNjMwOgorCWNhc2UgQ0hJUF9SVjYzNToKKwkJZ3NfcHJpbV9idWZmZXJfZGVwdGggPSAwOworCQlicmVhazsKKwljYXNlIENISVBfUlY2MTA6CisJY2FzZSBDSElQX1JTNzgwOgorCWNhc2UgQ0hJUF9SVjYyMDoKKwkJZ3NfcHJpbV9idWZmZXJfZGVwdGggPSAzMjsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNjcwOgorCQlnc19wcmltX2J1ZmZlcl9kZXB0aCA9IDEyODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJbnVtX2dzX3ZlcnRzX3Blcl90aHJlYWQgPSBkZXZfcHJpdi0+cjYwMF9tYXhfcGlwZXMgKiAxNjsKKwl2Z3RfZ3NfcGVyX2VzID0gZ3NfcHJpbV9idWZmZXJfZGVwdGggKyBudW1fZ3NfdmVydHNfcGVyX3RocmVhZDsKKwkvKiBNYXggdmFsdWUgZm9yIHRoaXMgaXMgMjU2ICovCisJaWYgKHZndF9nc19wZXJfZXMgPiAyNTYpCisJCXZndF9nc19wZXJfZXMgPSAyNTY7CisKKwlSQURFT05fV1JJVEUoUjYwMF9WR1RfRVNfUEVSX0dTLCAxMjgpOworCVJBREVPTl9XUklURShSNjAwX1ZHVF9HU19QRVJfRVMsIHZndF9nc19wZXJfZXMpOworCVJBREVPTl9XUklURShSNjAwX1ZHVF9HU19QRVJfVlMsIDIpOworCVJBREVPTl9XUklURShSNjAwX1ZHVF9HU19WRVJURVhfUkVVU0UsIDE2KTsKKworCS8qIG1vcmUgZGVmYXVsdCB2YWx1ZXMuIDJELzNEIGRyaXZlciBzaG91bGQgYWRqdXN0IGFzIG5lZWRlZCAqLworCVJBREVPTl9XUklURShSNjAwX1BBX1NDX0xJTkVfU1RJUFBMRV9TVEFURSwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfVkdUX1NUUk1PVVRfRU4sIDApOworCVJBREVPTl9XUklURShSNjAwX1NYX01JU0MsIDApOworCVJBREVPTl9XUklURShSNjAwX1BBX1NDX01PREVfQ05UTCwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfUEFfU0NfQUFfQ09ORklHLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9QQV9TQ19MSU5FX1NUSVBQTEUsIDApOworCVJBREVPTl9XUklURShSNjAwX1NQSV9JTlBVVF9aLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9TUElfUFNfSU5fQ09OVFJPTF8wLCBSNjAwX05VTV9JTlRFUlAoMikpOworCVJBREVPTl9XUklURShSNjAwX0NCX0NPTE9SN19GUkFHLCAwKTsKKworCS8qIGNsZWFyIHJlbmRlciBidWZmZXIgYmFzZSBhZGRyZXNzZXMgKi8KKwlSQURFT05fV1JJVEUoUjYwMF9DQl9DT0xPUjBfQkFTRSwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ0JfQ09MT1IxX0JBU0UsIDApOworCVJBREVPTl9XUklURShSNjAwX0NCX0NPTE9SMl9CQVNFLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DQl9DT0xPUjNfQkFTRSwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ0JfQ09MT1I0X0JBU0UsIDApOworCVJBREVPTl9XUklURShSNjAwX0NCX0NPTE9SNV9CQVNFLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DQl9DT0xPUjZfQkFTRSwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ0JfQ09MT1I3X0JBU0UsIDApOworCisJc3dpdGNoIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spIHsKKwljYXNlIENISVBfUlY2MTA6CisJY2FzZSBDSElQX1JTNzgwOgorCWNhc2UgQ0hJUF9SVjYyMDoKKwkJdGNfY250bCA9IFI2MDBfVENfTDJfU0laRSg4KTsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNjMwOgorCWNhc2UgQ0hJUF9SVjYzNToKKwkJdGNfY250bCA9IFI2MDBfVENfTDJfU0laRSg0KTsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1I2MDA6CisJCXRjX2NudGwgPSBSNjAwX1RDX0wyX1NJWkUoMCkgfCBSNjAwX0wyX0RJU0FCTEVfTEFURV9ISVQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXRjX2NudGwgPSBSNjAwX1RDX0wyX1NJWkUoMCk7CisJCWJyZWFrOworCX0KKworCVJBREVPTl9XUklURShSNjAwX1RDX0NOVEwsIHRjX2NudGwpOworCisJaGRwX2hvc3RfcGF0aF9jbnRsID0gUkFERU9OX1JFQUQoUjYwMF9IRFBfSE9TVF9QQVRIX0NOVEwpOworCVJBREVPTl9XUklURShSNjAwX0hEUF9IT1NUX1BBVEhfQ05UTCwgaGRwX2hvc3RfcGF0aF9jbnRsKTsKKworCWFyYl9wb3AgPSBSQURFT05fUkVBRChSNjAwX0FSQl9QT1ApOworCWFyYl9wb3AgfD0gUjYwMF9FTkFCTEVfVEMxMjg7CisJUkFERU9OX1dSSVRFKFI2MDBfQVJCX1BPUCwgYXJiX3BvcCk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9QQV9TQ19NVUxUSV9DSElQX0NOVEwsIDApOworCVJBREVPTl9XUklURShSNjAwX1BBX0NMX0VOSEFOQ0UsIChSNjAwX0NMSVBfVlRYX1JFT1JERVJfRU5BIHwKKwkJCQkJICBSNjAwX05VTV9DTElQX1NFUSgzKSkpOworCVJBREVPTl9XUklURShSNjAwX1BBX1NDX0VOSEFOQ0UsIFI2MDBfRk9SQ0VfRU9WX01BWF9DTEtfQ05UKDQwOTUpKTsKKworfQorCitzdGF0aWMgdTMyIHI3MDBfZ2V0X3RpbGVfcGlwZV90b19iYWNrZW5kX21hcCh1MzIgbnVtX3RpbGVfcGlwZXMsCisJCQkJCSAgICAgdTMyIG51bV9iYWNrZW5kcywKKwkJCQkJICAgICB1MzIgYmFja2VuZF9kaXNhYmxlX21hc2spCit7CisJdTMyIGJhY2tlbmRfbWFwID0gMDsKKwl1MzIgZW5hYmxlZF9iYWNrZW5kc19tYXNrOworCXUzMiBlbmFibGVkX2JhY2tlbmRzX2NvdW50OworCXUzMiBjdXJfcGlwZTsKKwl1MzIgc3dpenpsZV9waXBlW1I3WFhfTUFYX1BJUEVTXTsKKwl1MzIgY3VyX2JhY2tlbmQ7CisJdTMyIGk7CisKKwlpZiAobnVtX3RpbGVfcGlwZXMgPiBSN1hYX01BWF9QSVBFUykKKwkJbnVtX3RpbGVfcGlwZXMgPSBSN1hYX01BWF9QSVBFUzsKKwlpZiAobnVtX3RpbGVfcGlwZXMgPCAxKQorCQludW1fdGlsZV9waXBlcyA9IDE7CisJaWYgKG51bV9iYWNrZW5kcyA+IFI3WFhfTUFYX0JBQ0tFTkRTKQorCQludW1fYmFja2VuZHMgPSBSN1hYX01BWF9CQUNLRU5EUzsKKwlpZiAobnVtX2JhY2tlbmRzIDwgMSkKKwkJbnVtX2JhY2tlbmRzID0gMTsKKworCWVuYWJsZWRfYmFja2VuZHNfbWFzayA9IDA7CisJZW5hYmxlZF9iYWNrZW5kc19jb3VudCA9IDA7CisJZm9yIChpID0gMDsgaSA8IFI3WFhfTUFYX0JBQ0tFTkRTOyArK2kpIHsKKwkJaWYgKCgoYmFja2VuZF9kaXNhYmxlX21hc2sgPj4gaSkgJiAxKSA9PSAwKSB7CisJCQllbmFibGVkX2JhY2tlbmRzX21hc2sgfD0gKDEgPDwgaSk7CisJCQkrK2VuYWJsZWRfYmFja2VuZHNfY291bnQ7CisJCX0KKwkJaWYgKGVuYWJsZWRfYmFja2VuZHNfY291bnQgPT0gbnVtX2JhY2tlbmRzKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGVuYWJsZWRfYmFja2VuZHNfY291bnQgPT0gMCkgeworCQllbmFibGVkX2JhY2tlbmRzX21hc2sgPSAxOworCQllbmFibGVkX2JhY2tlbmRzX2NvdW50ID0gMTsKKwl9CisKKwlpZiAoZW5hYmxlZF9iYWNrZW5kc19jb3VudCAhPSBudW1fYmFja2VuZHMpCisJCW51bV9iYWNrZW5kcyA9IGVuYWJsZWRfYmFja2VuZHNfY291bnQ7CisKKwltZW1zZXQoKHVpbnQ4X3QgKikmc3dpenpsZV9waXBlWzBdLCAwLCBzaXplb2YodTMyKSAqIFI3WFhfTUFYX1BJUEVTKTsKKwlzd2l0Y2ggKG51bV90aWxlX3BpcGVzKSB7CisJY2FzZSAxOgorCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQlicmVhazsKKwljYXNlIDI6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCXN3aXp6bGVfcGlwZVsxXSA9IDE7CisJCWJyZWFrOworCWNhc2UgMzoKKwkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJc3dpenpsZV9waXBlWzFdID0gMjsKKwkJc3dpenpsZV9waXBlWzJdID0gMTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQlzd2l6emxlX3BpcGVbMV0gPSAyOworCQlzd2l6emxlX3BpcGVbMl0gPSAzOworCQlzd2l6emxlX3BpcGVbM10gPSAxOworCQlicmVhazsKKwljYXNlIDU6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCXN3aXp6bGVfcGlwZVsyXSA9IDQ7CisJCXN3aXp6bGVfcGlwZVszXSA9IDE7CisJCXN3aXp6bGVfcGlwZVs0XSA9IDM7CisJCWJyZWFrOworCWNhc2UgNjoKKwkJc3dpenpsZV9waXBlWzBdID0gMDsKKwkJc3dpenpsZV9waXBlWzFdID0gMjsKKwkJc3dpenpsZV9waXBlWzJdID0gNDsKKwkJc3dpenpsZV9waXBlWzNdID0gNTsKKwkJc3dpenpsZV9waXBlWzRdID0gMzsKKwkJc3dpenpsZV9waXBlWzVdID0gMTsKKwkJYnJlYWs7CisJY2FzZSA3OgorCQlzd2l6emxlX3BpcGVbMF0gPSAwOworCQlzd2l6emxlX3BpcGVbMV0gPSAyOworCQlzd2l6emxlX3BpcGVbMl0gPSA0OworCQlzd2l6emxlX3BpcGVbM10gPSA2OworCQlzd2l6emxlX3BpcGVbNF0gPSAzOworCQlzd2l6emxlX3BpcGVbNV0gPSAxOworCQlzd2l6emxlX3BpcGVbNl0gPSA1OworCQlicmVhazsKKwljYXNlIDg6CisJCXN3aXp6bGVfcGlwZVswXSA9IDA7CisJCXN3aXp6bGVfcGlwZVsxXSA9IDI7CisJCXN3aXp6bGVfcGlwZVsyXSA9IDQ7CisJCXN3aXp6bGVfcGlwZVszXSA9IDY7CisJCXN3aXp6bGVfcGlwZVs0XSA9IDM7CisJCXN3aXp6bGVfcGlwZVs1XSA9IDE7CisJCXN3aXp6bGVfcGlwZVs2XSA9IDc7CisJCXN3aXp6bGVfcGlwZVs3XSA9IDU7CisJCWJyZWFrOworCX0KKworCWN1cl9iYWNrZW5kID0gMDsKKwlmb3IgKGN1cl9waXBlID0gMDsgY3VyX3BpcGUgPCBudW1fdGlsZV9waXBlczsgKytjdXJfcGlwZSkgeworCQl3aGlsZSAoKCgxIDw8IGN1cl9iYWNrZW5kKSAmIGVuYWJsZWRfYmFja2VuZHNfbWFzaykgPT0gMCkKKwkJCWN1cl9iYWNrZW5kID0gKGN1cl9iYWNrZW5kICsgMSkgJSBSN1hYX01BWF9CQUNLRU5EUzsKKworCQliYWNrZW5kX21hcCB8PSAodTMyKSgoKGN1cl9iYWNrZW5kICYgMykgPDwgKHN3aXp6bGVfcGlwZVtjdXJfcGlwZV0gKiAyKSkpOworCisJCWN1cl9iYWNrZW5kID0gKGN1cl9iYWNrZW5kICsgMSkgJSBSN1hYX01BWF9CQUNLRU5EUzsKKwl9CisKKwlyZXR1cm4gYmFja2VuZF9tYXA7Cit9CisKK3N0YXRpYyB2b2lkIHI3MDBfZ2Z4X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCSAgZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KQoreworCWludCBpLCBqLCBudW1fcWRfcGlwZXM7CisJdTMyIHN4X2RlYnVnXzE7CisJdTMyIHNteF9kY19jdGwwOworCXUzMiBudW1fZ3NfdmVydHNfcGVyX3RocmVhZDsKKwl1MzIgdmd0X2dzX3Blcl9lczsKKwl1MzIgZ3NfcHJpbV9idWZmZXJfZGVwdGggPSAwOworCXUzMiBzcV9tc19maWZvX3NpemVzOworCXUzMiBzcV9jb25maWc7CisJdTMyIHNxX3RocmVhZF9yZXNvdXJjZV9tZ210OworCXUzMiBoZHBfaG9zdF9wYXRoX2NudGw7CisJdTMyIHNxX2R5bl9ncHJfc2l6ZV9zaW1kX2FiXzA7CisJdTMyIGJhY2tlbmRfbWFwOworCXUzMiBnYl90aWxpbmdfY29uZmlnID0gMDsKKwl1MzIgY2NfcmJfYmFja2VuZF9kaXNhYmxlID0gMDsKKwl1MzIgY2NfZ2Nfc2hhZGVyX3BpcGVfY29uZmlnID0gMDsKKwl1MzIgbWNfYXJiX3JhbWNmZzsKKwl1MzIgZGJfZGVidWc0OworCisJLyogc2V0dXAgY2hpcCBzcGVjcyAqLworCXN3aXRjaCAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSB7CisJY2FzZSBDSElQX1JWNzcwOgorCQlkZXZfcHJpdi0+cjYwMF9tYXhfcGlwZXMgPSA0OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfdGlsZV9waXBlcyA9IDg7CisJCWRldl9wcml2LT5yNjAwX21heF9zaW1kcyA9IDEwOworCQlkZXZfcHJpdi0+cjYwMF9tYXhfYmFja2VuZHMgPSA0OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfZ3BycyA9IDI1NjsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X3RocmVhZHMgPSAyNDg7CisJCWRldl9wcml2LT5yNjAwX21heF9zdGFja19lbnRyaWVzID0gNTEyOworCQlkZXZfcHJpdi0+cjYwMF9tYXhfaHdfY29udGV4dHMgPSA4OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfZ3NfdGhyZWFkcyA9IDE2ICogMjsKKwkJZGV2X3ByaXYtPnI2MDBfc3hfbWF4X2V4cG9ydF9zaXplID0gMTI4OworCQlkZXZfcHJpdi0+cjYwMF9zeF9tYXhfZXhwb3J0X3Bvc19zaXplID0gMTY7CisJCWRldl9wcml2LT5yNjAwX3N4X21heF9leHBvcnRfc214X3NpemUgPSAxMTI7CisJCWRldl9wcml2LT5yNjAwX3NxX251bV9jZl9pbnN0cyA9IDI7CisKKwkJZGV2X3ByaXYtPnI3MDBfc3hfbnVtX29mX3NldHMgPSA3OworCQlkZXZfcHJpdi0+cjcwMF9zY19wcmltX2ZpZm9fc2l6ZSA9IDB4Rjk7CisJCWRldl9wcml2LT5yNzAwX3NjX2hpel90aWxlX2ZpZm9fc2l6ZSA9IDB4MzA7CisJCWRldl9wcml2LT5yNzAwX3NjX2Vhcmx5el90aWxlX2ZpZm9fZml6ZSA9IDB4MTMwOworCQlicmVhazsKKwljYXNlIENISVBfUlY3MzA6CisJCWRldl9wcml2LT5yNjAwX21heF9waXBlcyA9IDI7CisJCWRldl9wcml2LT5yNjAwX21heF90aWxlX3BpcGVzID0gNDsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X3NpbWRzID0gODsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X2JhY2tlbmRzID0gMjsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X2dwcnMgPSAxMjg7CisJCWRldl9wcml2LT5yNjAwX21heF90aHJlYWRzID0gMjQ4OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfc3RhY2tfZW50cmllcyA9IDI1NjsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X2h3X2NvbnRleHRzID0gODsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X2dzX3RocmVhZHMgPSAxNiAqIDI7CisJCWRldl9wcml2LT5yNjAwX3N4X21heF9leHBvcnRfc2l6ZSA9IDI1NjsKKwkJZGV2X3ByaXYtPnI2MDBfc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSA9IDMyOworCQlkZXZfcHJpdi0+cjYwMF9zeF9tYXhfZXhwb3J0X3NteF9zaXplID0gMjI0OworCQlkZXZfcHJpdi0+cjYwMF9zcV9udW1fY2ZfaW5zdHMgPSAyOworCisJCWRldl9wcml2LT5yNzAwX3N4X251bV9vZl9zZXRzID0gNzsKKwkJZGV2X3ByaXYtPnI3MDBfc2NfcHJpbV9maWZvX3NpemUgPSAweGY5OworCQlkZXZfcHJpdi0+cjcwMF9zY19oaXpfdGlsZV9maWZvX3NpemUgPSAweDMwOworCQlkZXZfcHJpdi0+cjcwMF9zY19lYXJseXpfdGlsZV9maWZvX2ZpemUgPSAweDEzMDsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNzEwOgorCQlkZXZfcHJpdi0+cjYwMF9tYXhfcGlwZXMgPSAyOworCQlkZXZfcHJpdi0+cjYwMF9tYXhfdGlsZV9waXBlcyA9IDI7CisJCWRldl9wcml2LT5yNjAwX21heF9zaW1kcyA9IDI7CisJCWRldl9wcml2LT5yNjAwX21heF9iYWNrZW5kcyA9IDE7CisJCWRldl9wcml2LT5yNjAwX21heF9ncHJzID0gMjU2OworCQlkZXZfcHJpdi0+cjYwMF9tYXhfdGhyZWFkcyA9IDE5MjsKKwkJZGV2X3ByaXYtPnI2MDBfbWF4X3N0YWNrX2VudHJpZXMgPSAyNTY7CisJCWRldl9wcml2LT5yNjAwX21heF9od19jb250ZXh0cyA9IDQ7CisJCWRldl9wcml2LT5yNjAwX21heF9nc190aHJlYWRzID0gOCAqIDI7CisJCWRldl9wcml2LT5yNjAwX3N4X21heF9leHBvcnRfc2l6ZSA9IDEyODsKKwkJZGV2X3ByaXYtPnI2MDBfc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSA9IDE2OworCQlkZXZfcHJpdi0+cjYwMF9zeF9tYXhfZXhwb3J0X3NteF9zaXplID0gMTEyOworCQlkZXZfcHJpdi0+cjYwMF9zcV9udW1fY2ZfaW5zdHMgPSAxOworCisJCWRldl9wcml2LT5yNzAwX3N4X251bV9vZl9zZXRzID0gNzsKKwkJZGV2X3ByaXYtPnI3MDBfc2NfcHJpbV9maWZvX3NpemUgPSAweDQwOworCQlkZXZfcHJpdi0+cjcwMF9zY19oaXpfdGlsZV9maWZvX3NpemUgPSAweDMwOworCQlkZXZfcHJpdi0+cjcwMF9zY19lYXJseXpfdGlsZV9maWZvX2ZpemUgPSAweDEzMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJLyogSW5pdGlhbGl6ZSBIRFAgKi8KKwlqID0gMDsKKwlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeworCQlSQURFT05fV1JJVEUoKDB4MmMxNCArIGopLCAweDAwMDAwMDAwKTsKKwkJUkFERU9OX1dSSVRFKCgweDJjMTggKyBqKSwgMHgwMDAwMDAwMCk7CisJCVJBREVPTl9XUklURSgoMHgyYzFjICsgaiksIDB4MDAwMDAwMDApOworCQlSQURFT05fV1JJVEUoKDB4MmMyMCArIGopLCAweDAwMDAwMDAwKTsKKwkJUkFERU9OX1dSSVRFKCgweDJjMjQgKyBqKSwgMHgwMDAwMDAwMCk7CisJCWogKz0gMHgxODsKKwl9CisKKwlSQURFT05fV1JJVEUoUjYwMF9HUkJNX0NOVEwsIFI2MDBfR1JCTV9SRUFEX1RJTUVPVVQoMHhmZikpOworCisJLyogc2V0dXAgdGlsaW5nLCBzaW1kLCBwaXBlIGNvbmZpZyAqLworCW1jX2FyYl9yYW1jZmcgPSBSQURFT05fUkVBRChSNzAwX01DX0FSQl9SQU1DRkcpOworCisJc3dpdGNoIChkZXZfcHJpdi0+cjYwMF9tYXhfdGlsZV9waXBlcykgeworCWNhc2UgMToKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX1BJUEVfVElMSU5HKDApOworCQlicmVhazsKKwljYXNlIDI6CisJCWdiX3RpbGluZ19jb25maWcgfD0gUjYwMF9QSVBFX1RJTElORygxKTsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlnYl90aWxpbmdfY29uZmlnIHw9IFI2MDBfUElQRV9USUxJTkcoMik7CisJCWJyZWFrOworCWNhc2UgODoKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX1BJUEVfVElMSU5HKDMpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjc3MCkKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX0JBTktfVElMSU5HKDEpOworCWVsc2UKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX0JBTktfVElMSU5HKChtY19hcmJfcmFtY2ZnID4+IFI3MDBfTk9PRkJBTktfU0hJRlQpICYgUjcwMF9OT09GQkFOS19NQVNLKTsKKworCWdiX3RpbGluZ19jb25maWcgfD0gUjYwMF9HUk9VUF9TSVpFKDApOworCisJaWYgKCgobWNfYXJiX3JhbWNmZyA+PiBSNzAwX05PT0ZST1dTX1NISUZUKSAmIFI3MDBfTk9PRlJPV1NfTUFTSykgPiAzKSB7CisJCWdiX3RpbGluZ19jb25maWcgfD0gUjYwMF9ST1dfVElMSU5HKDMpOworCQlnYl90aWxpbmdfY29uZmlnIHw9IFI2MDBfU0FNUExFX1NQTElUKDMpOworCX0gZWxzZSB7CisJCWdiX3RpbGluZ19jb25maWcgfD0KKwkJCVI2MDBfUk9XX1RJTElORygoKG1jX2FyYl9yYW1jZmcgPj4gUjcwMF9OT09GUk9XU19TSElGVCkgJiBSNzAwX05PT0ZST1dTX01BU0spKTsKKwkJZ2JfdGlsaW5nX2NvbmZpZyB8PQorCQkJUjYwMF9TQU1QTEVfU1BMSVQoKChtY19hcmJfcmFtY2ZnID4+IFI3MDBfTk9PRlJPV1NfU0hJRlQpICYgUjcwMF9OT09GUk9XU19NQVNLKSk7CisJfQorCisJZ2JfdGlsaW5nX2NvbmZpZyB8PSBSNjAwX0JBTktfU1dBUFMoMSk7CisKKwliYWNrZW5kX21hcCA9IHI3MDBfZ2V0X3RpbGVfcGlwZV90b19iYWNrZW5kX21hcChkZXZfcHJpdi0+cjYwMF9tYXhfdGlsZV9waXBlcywKKwkJCQkJCQlkZXZfcHJpdi0+cjYwMF9tYXhfYmFja2VuZHMsCisJCQkJCQkJKDB4ZmYgPDwgZGV2X3ByaXYtPnI2MDBfbWF4X2JhY2tlbmRzKSAmIDB4ZmYpOworCWdiX3RpbGluZ19jb25maWcgfD0gUjYwMF9CQUNLRU5EX01BUChiYWNrZW5kX21hcCk7CisKKwljY19nY19zaGFkZXJfcGlwZV9jb25maWcgPQorCQlSNjAwX0lOQUNUSVZFX1FEX1BJUEVTKChSN1hYX01BWF9QSVBFU19NQVNLIDw8IGRldl9wcml2LT5yNjAwX21heF9waXBlcykgJiBSN1hYX01BWF9QSVBFU19NQVNLKTsKKwljY19nY19zaGFkZXJfcGlwZV9jb25maWcgfD0KKwkJUjYwMF9JTkFDVElWRV9TSU1EUygoUjdYWF9NQVhfU0lNRFNfTUFTSyA8PCBkZXZfcHJpdi0+cjYwMF9tYXhfc2ltZHMpICYgUjdYWF9NQVhfU0lNRFNfTUFTSyk7CisKKwljY19yYl9iYWNrZW5kX2Rpc2FibGUgPQorCQlSNjAwX0JBQ0tFTkRfRElTQUJMRSgoUjdYWF9NQVhfQkFDS0VORFNfTUFTSyA8PCBkZXZfcHJpdi0+cjYwMF9tYXhfYmFja2VuZHMpICYgUjdYWF9NQVhfQkFDS0VORFNfTUFTSyk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9HQl9USUxJTkdfQ09ORklHLCAgICAgIGdiX3RpbGluZ19jb25maWcpOworCVJBREVPTl9XUklURShSNjAwX0RDUF9USUxJTkdfQ09ORklHLCAgICAoZ2JfdGlsaW5nX2NvbmZpZyAmIDB4ZmZmZikpOworCVJBREVPTl9XUklURShSNjAwX0hEUF9USUxJTkdfQ09ORklHLCAgICAoZ2JfdGlsaW5nX2NvbmZpZyAmIDB4ZmZmZikpOworCisJUkFERU9OX1dSSVRFKFI2MDBfQ0NfUkJfQkFDS0VORF9ESVNBQkxFLCAgICAgIGNjX3JiX2JhY2tlbmRfZGlzYWJsZSk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ0NfR0NfU0hBREVSX1BJUEVfQ09ORklHLCAgIGNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyk7CisJUkFERU9OX1dSSVRFKFI2MDBfR0NfVVNFUl9TSEFERVJfUElQRV9DT05GSUcsIGNjX2djX3NoYWRlcl9waXBlX2NvbmZpZyk7CisKKwlSQURFT05fV1JJVEUoUjcwMF9DQ19TWVNfUkJfQkFDS0VORF9ESVNBQkxFLCBjY19yYl9iYWNrZW5kX2Rpc2FibGUpOworCVJBREVPTl9XUklURShSNzAwX0NHVFNfU1lTX1RDQ19ESVNBQkxFLCAwKTsKKwlSQURFT05fV1JJVEUoUjcwMF9DR1RTX1RDQ19ESVNBQkxFLCAwKTsKKwlSQURFT05fV1JJVEUoUjcwMF9DR1RTX1VTRVJfU1lTX1RDQ19ESVNBQkxFLCAwKTsKKwlSQURFT05fV1JJVEUoUjcwMF9DR1RTX1VTRVJfVENDX0RJU0FCTEUsIDApOworCisJbnVtX3FkX3BpcGVzID0KKwkJUjdYWF9NQVhfQkFDS0VORFMgLSByNjAwX2NvdW50X3BpcGVfYml0cyhjY19nY19zaGFkZXJfcGlwZV9jb25maWcgJiBSNjAwX0lOQUNUSVZFX1FEX1BJUEVTX01BU0spOworCVJBREVPTl9XUklURShSNjAwX1ZHVF9PVVRfREVBTExPQ19DTlRMLCAobnVtX3FkX3BpcGVzICogNCkgJiBSNjAwX0RFQUxMT0NfRElTVF9NQVNLKTsKKwlSQURFT05fV1JJVEUoUjYwMF9WR1RfVkVSVEVYX1JFVVNFX0JMT0NLX0NOVEwsICgobnVtX3FkX3BpcGVzICogNCkgLSAyKSAmIFI2MDBfVlRYX1JFVVNFX0RFUFRIX01BU0spOworCisJLyogc2V0IEhXIGRlZmF1bHRzIGZvciAzRCBlbmdpbmUgKi8KKwlSQURFT05fV1JJVEUoUjYwMF9DUF9RVUVVRV9USFJFU0hPTERTLCAoUjYwMF9ST1FfSUIxX1NUQVJUKDB4MTYpIHwKKwkJCQkJCVI2MDBfUk9RX0lCMl9TVEFSVCgweDJiKSkpOworCisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVRX1RIUkVTSE9MRFMsIFI3MDBfU1RRX1NQTElUKDB4MzApKTsKKworCVJBREVPTl9XUklURShSNjAwX1RBX0NOVExfQVVYLCAoUjYwMF9ESVNBQkxFX0NVQkVfQU5JU08gfAorCQkJCQlSNjAwX1NZTkNfR1JBRElFTlQgfAorCQkJCQlSNjAwX1NZTkNfV0FMS0VSIHwKKwkJCQkJUjYwMF9TWU5DX0FMSUdORVIpKTsKKworCXN4X2RlYnVnXzEgPSBSQURFT05fUkVBRChSNzAwX1NYX0RFQlVHXzEpOworCXN4X2RlYnVnXzEgfD0gUjcwMF9FTkFCTEVfTkVXX1NNWF9BRERSRVNTOworCVJBREVPTl9XUklURShSNzAwX1NYX0RFQlVHXzEsIHN4X2RlYnVnXzEpOworCisJc214X2RjX2N0bDAgPSBSQURFT05fUkVBRChSNjAwX1NNWF9EQ19DVEwwKTsKKwlzbXhfZGNfY3RsMCAmPSB+UjcwMF9DQUNIRV9ERVBUSCgweDFmZik7CisJc214X2RjX2N0bDAgfD0gUjcwMF9DQUNIRV9ERVBUSCgoZGV2X3ByaXYtPnI3MDBfc3hfbnVtX29mX3NldHMgKiA2NCkgLSAxKTsKKwlSQURFT05fV1JJVEUoUjYwMF9TTVhfRENfQ1RMMCwgc214X2RjX2N0bDApOworCisJUkFERU9OX1dSSVRFKFI3MDBfU01YX0VWRU5UX0NUTCwgKFI3MDBfRVNfRkxVU0hfQ1RMKDQpIHwKKwkJCQkJICBSNzAwX0dTX0ZMVVNIX0NUTCg0KSB8CisJCQkJCSAgUjcwMF9BQ0tfRkxVU0hfQ1RMKDMpIHwKKwkJCQkJICBSNzAwX1NZTkNfRkxVU0hfQ1RMKSk7CisKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjc3MCkKKwkJUkFERU9OX1dSSVRFKFI3MDBfREJfREVCVUczLCBSNzAwX0RCX0NMS19PRkZfREVMQVkoMHgxZikpOworCWVsc2UgeworCQlkYl9kZWJ1ZzQgPSBSQURFT05fUkVBRChSVjcwMF9EQl9ERUJVRzQpOworCQlkYl9kZWJ1ZzQgfD0gUlY3MDBfRElTQUJMRV9USUxFX0NPVkVSRURfRk9SX1BTX0lURVI7CisJCVJBREVPTl9XUklURShSVjcwMF9EQl9ERUJVRzQsIGRiX2RlYnVnNCk7CisJfQorCisJUkFERU9OX1dSSVRFKFI2MDBfU1hfRVhQT1JUX0JVRkZFUl9TSVpFUywgKFI2MDBfQ09MT1JfQlVGRkVSX1NJWkUoKGRldl9wcml2LT5yNjAwX3N4X21heF9leHBvcnRfc2l6ZSAvIDQpIC0gMSkgfAorCQkJCQkJICAgUjYwMF9QT1NJVElPTl9CVUZGRVJfU0laRSgoZGV2X3ByaXYtPnI2MDBfc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZSAvIDQpIC0gMSkgfAorCQkJCQkJICAgUjYwMF9TTVhfQlVGRkVSX1NJWkUoKGRldl9wcml2LT5yNjAwX3N4X21heF9leHBvcnRfc214X3NpemUgLyA0KSAtIDEpKSk7CisKKwlSQURFT05fV1JJVEUoUjcwMF9QQV9TQ19GSUZPX1NJWkVfUjdYWCwgKFI3MDBfU0NfUFJJTV9GSUZPX1NJWkUoZGV2X3ByaXYtPnI3MDBfc2NfcHJpbV9maWZvX3NpemUpIHwKKwkJCQkJCSBSNzAwX1NDX0hJWl9USUxFX0ZJRk9fU0laRShkZXZfcHJpdi0+cjcwMF9zY19oaXpfdGlsZV9maWZvX3NpemUpIHwKKwkJCQkJCSBSNzAwX1NDX0VBUkxZWl9USUxFX0ZJRk9fU0laRShkZXZfcHJpdi0+cjcwMF9zY19lYXJseXpfdGlsZV9maWZvX2ZpemUpKSk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9QQV9TQ19NVUxUSV9DSElQX0NOVEwsIDApOworCisJUkFERU9OX1dSSVRFKFI2MDBfVkdUX05VTV9JTlNUQU5DRVMsIDEpOworCisJUkFERU9OX1dSSVRFKFI2MDBfU1BJX0NPTkZJR19DTlRMLCBSNjAwX0dQUl9XUklURV9QUklPUklUWSgwKSk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9TUElfQ09ORklHX0NOVExfMSwgUjYwMF9WVFhfRE9ORV9ERUxBWSg0KSk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9QRVJGTU9OX0NOVEwsIDApOworCisJc3FfbXNfZmlmb19zaXplcyA9IChSNjAwX0NBQ0hFX0ZJRk9fU0laRSgxNiAqIGRldl9wcml2LT5yNjAwX3NxX251bV9jZl9pbnN0cykgfAorCQkJICAgIFI2MDBfRE9ORV9GSUZPX0hJV0FURVIoMHhlMCkgfAorCQkJICAgIFI2MDBfQUxVX1VQREFURV9GSUZPX0hJV0FURVIoMHg4KSk7CisJc3dpdGNoIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spIHsKKwljYXNlIENISVBfUlY3NzA6CisJCXNxX21zX2ZpZm9fc2l6ZXMgfD0gUjYwMF9GRVRDSF9GSUZPX0hJV0FURVIoMHgxKTsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNzMwOgorCWNhc2UgQ0hJUF9SVjcxMDoKKwlkZWZhdWx0OgorCQlzcV9tc19maWZvX3NpemVzIHw9IFI2MDBfRkVUQ0hfRklGT19ISVdBVEVSKDB4NCk7CisJCWJyZWFrOworCX0KKwlSQURFT05fV1JJVEUoUjYwMF9TUV9NU19GSUZPX1NJWkVTLCBzcV9tc19maWZvX3NpemVzKTsKKworCS8qIFNRX0NPTkZJRywgU1FfR1BSX1JFU09VUkNFX01HTVQsIFNRX1RIUkVBRF9SRVNPVVJDRV9NR01ULCBTUV9TVEFDS19SRVNPVVJDRV9NR01UCisJICogc2hvdWxkIGJlIGFkanVzdGVkIGFzIG5lZWRlZCBieSB0aGUgMkQvM0QgZHJpdmVycy4gIFRoaXMganVzdCBzZXRzIGRlZmF1bHQgdmFsdWVzCisJICovCisJc3FfY29uZmlnID0gUkFERU9OX1JFQUQoUjYwMF9TUV9DT05GSUcpOworCXNxX2NvbmZpZyAmPSB+KFI2MDBfUFNfUFJJTygzKSB8CisJCSAgICAgICBSNjAwX1ZTX1BSSU8oMykgfAorCQkgICAgICAgUjYwMF9HU19QUklPKDMpIHwKKwkJICAgICAgIFI2MDBfRVNfUFJJTygzKSk7CisJc3FfY29uZmlnIHw9IChSNjAwX0RYOV9DT05TVFMgfAorCQkgICAgICBSNjAwX1ZDX0VOQUJMRSB8CisJCSAgICAgIFI2MDBfRVhQT1JUX1NSQ19DIHwKKwkJICAgICAgUjYwMF9QU19QUklPKDApIHwKKwkJICAgICAgUjYwMF9WU19QUklPKDEpIHwKKwkJICAgICAgUjYwMF9HU19QUklPKDIpIHwKKwkJICAgICAgUjYwMF9FU19QUklPKDMpKTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjcxMCkKKwkJLyogbm8gdmVydGV4IGNhY2hlICovCisJCXNxX2NvbmZpZyAmPSB+UjYwMF9WQ19FTkFCTEU7CisKKwlSQURFT05fV1JJVEUoUjYwMF9TUV9DT05GSUcsIHNxX2NvbmZpZyk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9TUV9HUFJfUkVTT1VSQ0VfTUdNVF8xLCAgKFI2MDBfTlVNX1BTX0dQUlMoKGRldl9wcml2LT5yNjAwX21heF9ncHJzICogMjQpLzY0KSB8CisJCQkJCQkgICAgUjYwMF9OVU1fVlNfR1BSUygoZGV2X3ByaXYtPnI2MDBfbWF4X2dwcnMgKiAyNCkvNjQpIHwKKwkJCQkJCSAgICBSNjAwX05VTV9DTEFVU0VfVEVNUF9HUFJTKCgoZGV2X3ByaXYtPnI2MDBfbWF4X2dwcnMgKiAyNCkvNjQpLzIpKSk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9TUV9HUFJfUkVTT1VSQ0VfTUdNVF8yLCAgKFI2MDBfTlVNX0dTX0dQUlMoKGRldl9wcml2LT5yNjAwX21heF9ncHJzICogNykvNjQpIHwKKwkJCQkJCSAgICBSNjAwX05VTV9FU19HUFJTKChkZXZfcHJpdi0+cjYwMF9tYXhfZ3BycyAqIDcpLzY0KSkpOworCisJc3FfdGhyZWFkX3Jlc291cmNlX21nbXQgPSAoUjYwMF9OVU1fUFNfVEhSRUFEUygoZGV2X3ByaXYtPnI2MDBfbWF4X3RocmVhZHMgKiA0KS84KSB8CisJCQkJICAgUjYwMF9OVU1fVlNfVEhSRUFEUygoZGV2X3ByaXYtPnI2MDBfbWF4X3RocmVhZHMgKiAyKS84KSB8CisJCQkJICAgUjYwMF9OVU1fRVNfVEhSRUFEUygoZGV2X3ByaXYtPnI2MDBfbWF4X3RocmVhZHMgKiAxKS84KSk7CisJaWYgKCgoZGV2X3ByaXYtPnI2MDBfbWF4X3RocmVhZHMgKiAxKSAvIDgpID4gZGV2X3ByaXYtPnI2MDBfbWF4X2dzX3RocmVhZHMpCisJCXNxX3RocmVhZF9yZXNvdXJjZV9tZ210IHw9IFI2MDBfTlVNX0dTX1RIUkVBRFMoZGV2X3ByaXYtPnI2MDBfbWF4X2dzX3RocmVhZHMpOworCWVsc2UKKwkJc3FfdGhyZWFkX3Jlc291cmNlX21nbXQgfD0gUjYwMF9OVU1fR1NfVEhSRUFEUygoZGV2X3ByaXYtPnI2MDBfbWF4X2dzX3RocmVhZHMgKiAxKS84KTsKKwlSQURFT05fV1JJVEUoUjYwMF9TUV9USFJFQURfUkVTT1VSQ0VfTUdNVCwgc3FfdGhyZWFkX3Jlc291cmNlX21nbXQpOworCisJUkFERU9OX1dSSVRFKFI2MDBfU1FfU1RBQ0tfUkVTT1VSQ0VfTUdNVF8xLCAoUjYwMF9OVU1fUFNfU1RBQ0tfRU5UUklFUygoZGV2X3ByaXYtPnI2MDBfbWF4X3N0YWNrX2VudHJpZXMgKiAxKS80KSB8CisJCQkJCQkgICAgIFI2MDBfTlVNX1ZTX1NUQUNLX0VOVFJJRVMoKGRldl9wcml2LT5yNjAwX21heF9zdGFja19lbnRyaWVzICogMSkvNCkpKTsKKworCVJBREVPTl9XUklURShSNjAwX1NRX1NUQUNLX1JFU09VUkNFX01HTVRfMiwgKFI2MDBfTlVNX0dTX1NUQUNLX0VOVFJJRVMoKGRldl9wcml2LT5yNjAwX21heF9zdGFja19lbnRyaWVzICogMSkvNCkgfAorCQkJCQkJICAgICBSNjAwX05VTV9FU19TVEFDS19FTlRSSUVTKChkZXZfcHJpdi0+cjYwMF9tYXhfc3RhY2tfZW50cmllcyAqIDEpLzQpKSk7CisKKwlzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wID0gKFI3MDBfU0lNREFfUklORzAoKGRldl9wcml2LT5yNjAwX21heF9ncHJzICogMzgpLzY0KSB8CisJCQkJICAgICBSNzAwX1NJTURBX1JJTkcxKChkZXZfcHJpdi0+cjYwMF9tYXhfZ3BycyAqIDM4KS82NCkgfAorCQkJCSAgICAgUjcwMF9TSU1EQl9SSU5HMCgoZGV2X3ByaXYtPnI2MDBfbWF4X2dwcnMgKiAzOCkvNjQpIHwKKwkJCQkgICAgIFI3MDBfU0lNREJfUklORzEoKGRldl9wcml2LT5yNjAwX21heF9ncHJzICogMzgpLzY0KSk7CisKKwlSQURFT05fV1JJVEUoUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl8wLCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKwlSQURFT05fV1JJVEUoUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl8xLCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKwlSQURFT05fV1JJVEUoUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl8yLCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKwlSQURFT05fV1JJVEUoUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl8zLCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKwlSQURFT05fV1JJVEUoUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl80LCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKwlSQURFT05fV1JJVEUoUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl81LCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKwlSQURFT05fV1JJVEUoUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl82LCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKwlSQURFT05fV1JJVEUoUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl83LCBzcV9keW5fZ3ByX3NpemVfc2ltZF9hYl8wKTsKKworCVJBREVPTl9XUklURShSNzAwX1BBX1NDX0ZPUkNFX0VPVl9NQVhfQ05UUywgKFI3MDBfRk9SQ0VfRU9WX01BWF9DTEtfQ05UKDQwOTUpIHwKKwkJCQkJCSAgICAgUjcwMF9GT1JDRV9FT1ZfTUFYX1JFWl9DTlQoMjU1KSkpOworCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY3MTApCisJCVJBREVPTl9XUklURShSNjAwX1ZHVF9DQUNIRV9JTlZBTElEQVRJT04sIChSNjAwX0NBQ0hFX0lOVkFMSURBVElPTihSNjAwX1RDX09OTFkpIHwKKwkJCQkJCQkgICBSNzAwX0FVVE9fSU5WTERfRU4oUjcwMF9FU19BTkRfR1NfQVVUTykpKTsKKwllbHNlCisJCVJBREVPTl9XUklURShSNjAwX1ZHVF9DQUNIRV9JTlZBTElEQVRJT04sIChSNjAwX0NBQ0hFX0lOVkFMSURBVElPTihSNjAwX1ZDX0FORF9UQykgfAorCQkJCQkJCSAgIFI3MDBfQVVUT19JTlZMRF9FTihSNzAwX0VTX0FORF9HU19BVVRPKSkpOworCisJc3dpdGNoIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spIHsKKwljYXNlIENISVBfUlY3NzA6CisJY2FzZSBDSElQX1JWNzMwOgorCQlnc19wcmltX2J1ZmZlcl9kZXB0aCA9IDM4NDsKKwkJYnJlYWs7CisJY2FzZSBDSElQX1JWNzEwOgorCQlnc19wcmltX2J1ZmZlcl9kZXB0aCA9IDEyODsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJYnJlYWs7CisJfQorCisJbnVtX2dzX3ZlcnRzX3Blcl90aHJlYWQgPSBkZXZfcHJpdi0+cjYwMF9tYXhfcGlwZXMgKiAxNjsKKwl2Z3RfZ3NfcGVyX2VzID0gZ3NfcHJpbV9idWZmZXJfZGVwdGggKyBudW1fZ3NfdmVydHNfcGVyX3RocmVhZDsKKwkvKiBNYXggdmFsdWUgZm9yIHRoaXMgaXMgMjU2ICovCisJaWYgKHZndF9nc19wZXJfZXMgPiAyNTYpCisJCXZndF9nc19wZXJfZXMgPSAyNTY7CisKKwlSQURFT05fV1JJVEUoUjYwMF9WR1RfRVNfUEVSX0dTLCAxMjgpOworCVJBREVPTl9XUklURShSNjAwX1ZHVF9HU19QRVJfRVMsIHZndF9nc19wZXJfZXMpOworCVJBREVPTl9XUklURShSNjAwX1ZHVF9HU19QRVJfVlMsIDIpOworCisJLyogbW9yZSBkZWZhdWx0IHZhbHVlcy4gMkQvM0QgZHJpdmVyIHNob3VsZCBhZGp1c3QgYXMgbmVlZGVkICovCisJUkFERU9OX1dSSVRFKFI2MDBfVkdUX0dTX1ZFUlRFWF9SRVVTRSwgMTYpOworCVJBREVPTl9XUklURShSNjAwX1BBX1NDX0xJTkVfU1RJUFBMRV9TVEFURSwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfVkdUX1NUUk1PVVRfRU4sIDApOworCVJBREVPTl9XUklURShSNjAwX1NYX01JU0MsIDApOworCVJBREVPTl9XUklURShSNjAwX1BBX1NDX01PREVfQ05UTCwgMCk7CisJUkFERU9OX1dSSVRFKFI3MDBfUEFfU0NfRURHRVJVTEUsIDB4YWFhYWFhYWEpOworCVJBREVPTl9XUklURShSNjAwX1BBX1NDX0FBX0NPTkZJRywgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfUEFfU0NfQ0xJUFJFQ1RfUlVMRSwgMHhmZmZmKTsKKwlSQURFT05fV1JJVEUoUjYwMF9QQV9TQ19MSU5FX1NUSVBQTEUsIDApOworCVJBREVPTl9XUklURShSNjAwX1NQSV9JTlBVVF9aLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9TUElfUFNfSU5fQ09OVFJPTF8wLCBSNjAwX05VTV9JTlRFUlAoMikpOworCVJBREVPTl9XUklURShSNjAwX0NCX0NPTE9SN19GUkFHLCAwKTsKKworCS8qIGNsZWFyIHJlbmRlciBidWZmZXIgYmFzZSBhZGRyZXNzZXMgKi8KKwlSQURFT05fV1JJVEUoUjYwMF9DQl9DT0xPUjBfQkFTRSwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ0JfQ09MT1IxX0JBU0UsIDApOworCVJBREVPTl9XUklURShSNjAwX0NCX0NPTE9SMl9CQVNFLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DQl9DT0xPUjNfQkFTRSwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ0JfQ09MT1I0X0JBU0UsIDApOworCVJBREVPTl9XUklURShSNjAwX0NCX0NPTE9SNV9CQVNFLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DQl9DT0xPUjZfQkFTRSwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfQ0JfQ09MT1I3X0JBU0UsIDApOworCisJUkFERU9OX1dSSVRFKFI3MDBfVENQX0NOVEwsIDApOworCisJaGRwX2hvc3RfcGF0aF9jbnRsID0gUkFERU9OX1JFQUQoUjYwMF9IRFBfSE9TVF9QQVRIX0NOVEwpOworCVJBREVPTl9XUklURShSNjAwX0hEUF9IT1NUX1BBVEhfQ05UTCwgaGRwX2hvc3RfcGF0aF9jbnRsKTsKKworCVJBREVPTl9XUklURShSNjAwX1BBX1NDX01VTFRJX0NISVBfQ05UTCwgMCk7CisKKwlSQURFT05fV1JJVEUoUjYwMF9QQV9DTF9FTkhBTkNFLCAoUjYwMF9DTElQX1ZUWF9SRU9SREVSX0VOQSB8CisJCQkJCSAgUjYwMF9OVU1fQ0xJUF9TRVEoMykpKTsKKworfQorCitzdGF0aWMgdm9pZCByNjAwX2NwX2luaXRfcmluZ19idWZmZXIoc3RydWN0IGRybV9kZXZpY2UgKmRldiwKKwkJCQkgICAgICAgZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LAorCQkJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKK3sKKwlzdHJ1Y3QgZHJtX3JhZGVvbl9tYXN0ZXJfcHJpdmF0ZSAqbWFzdGVyX3ByaXY7CisJdTMyIHJpbmdfc3RhcnQ7CisJdTY0IHJwdHJfYWRkcjsKKworCWlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SVjc3MCkpCisJCXI3MDBfZ2Z4X2luaXQoZGV2LCBkZXZfcHJpdik7CisJZWxzZQorCQlyNjAwX2dmeF9pbml0KGRldiwgZGV2X3ByaXYpOworCisJUkFERU9OX1dSSVRFKFI2MDBfR1JCTV9TT0ZUX1JFU0VULCBSNjAwX1NPRlRfUkVTRVRfQ1ApOworCVJBREVPTl9SRUFEKFI2MDBfR1JCTV9TT0ZUX1JFU0VUKTsKKwlEUk1fVURFTEFZKDE1MDAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9HUkJNX1NPRlRfUkVTRVQsIDApOworCisKKwkvKiBTZXQgcmluZyBidWZmZXIgc2l6ZSAqLworI2lmZGVmIF9fQklHX0VORElBTgorCVJBREVPTl9XUklURShSNjAwX0NQX1JCX0NOVEwsCisJCSAgICAgUkFERU9OX0JVRl9TV0FQXzMyQklUIHwKKwkJICAgICBSQURFT05fUkJfTk9fVVBEQVRFIHwKKwkJICAgICAoZGV2X3ByaXYtPnJpbmcucnB0cl91cGRhdGVfbDJxdyA8PCA4KSB8CisJCSAgICAgZGV2X3ByaXYtPnJpbmcuc2l6ZV9sMnF3KTsKKyNlbHNlCisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfQ05UTCwKKwkJICAgICBSQURFT05fUkJfTk9fVVBEQVRFIHwKKwkJICAgICAoZGV2X3ByaXYtPnJpbmcucnB0cl91cGRhdGVfbDJxdyA8PCA4KSB8CisJCSAgICAgZGV2X3ByaXYtPnJpbmcuc2l6ZV9sMnF3KTsKKyNlbmRpZgorCisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfU0VNX1dBSVRfVElNRVIsIDB4NCk7CisKKwkvKiBTZXQgdGhlIHdyaXRlIHBvaW50ZXIgZGVsYXkgKi8KKwlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9XUFRSX0RFTEFZLCAwKTsKKworI2lmZGVmIF9fQklHX0VORElBTgorCVJBREVPTl9XUklURShSNjAwX0NQX1JCX0NOVEwsCisJCSAgICAgUkFERU9OX0JVRl9TV0FQXzMyQklUIHwKKwkJICAgICBSQURFT05fUkJfTk9fVVBEQVRFIHwKKwkJICAgICBSQURFT05fUkJfUlBUUl9XUl9FTkEgfAorCQkgICAgIChkZXZfcHJpdi0+cmluZy5ycHRyX3VwZGF0ZV9sMnF3IDw8IDgpIHwKKwkJICAgICBkZXZfcHJpdi0+cmluZy5zaXplX2wycXcpOworI2Vsc2UKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9DTlRMLAorCQkgICAgIFJBREVPTl9SQl9OT19VUERBVEUgfAorCQkgICAgIFJBREVPTl9SQl9SUFRSX1dSX0VOQSB8CisJCSAgICAgKGRldl9wcml2LT5yaW5nLnJwdHJfdXBkYXRlX2wycXcgPDwgOCkgfAorCQkgICAgIGRldl9wcml2LT5yaW5nLnNpemVfbDJxdyk7CisjZW5kaWYKKworCS8qIEluaXRpYWxpemUgdGhlIHJpbmcgYnVmZmVyJ3MgcmVhZCBhbmQgd3JpdGUgcG9pbnRlcnMgKi8KKwlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9SUFRSX1dSLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9XUFRSLCAwKTsKKwlTRVRfUklOR19IRUFEKGRldl9wcml2LCAwKTsKKwlkZXZfcHJpdi0+cmluZy50YWlsID0gMDsKKworI2lmIF9fT1NfSEFTX0FHUAorCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCXJwdHJfYWRkciA9IGRldl9wcml2LT5yaW5nX3JwdHItPm9mZnNldAorCQkJLSBkZXYtPmFncC0+YmFzZSArCisJCQlkZXZfcHJpdi0+Z2FydF92bV9zdGFydDsKKwl9IGVsc2UKKyNlbmRpZgorCXsKKwkJcnB0cl9hZGRyID0gZGV2X3ByaXYtPnJpbmdfcnB0ci0+b2Zmc2V0CisJCQktICgodW5zaWduZWQgbG9uZykgZGV2LT5zZy0+dmlydHVhbCkKKwkJCSsgZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQ7CisJfQorCVJBREVPTl9XUklURShSNjAwX0NQX1JCX1JQVFJfQUREUiwKKwkJICAgICBycHRyX2FkZHIgJiAweGZmZmZmZmZmKTsKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9SQl9SUFRSX0FERFJfSEksCisJCSAgICAgdXBwZXJfMzJfYml0cyhycHRyX2FkZHIpKTsKKworI2lmZGVmIF9fQklHX0VORElBTgorCVJBREVPTl9XUklURShSNjAwX0NQX1JCX0NOVEwsCisJCSAgICAgUkFERU9OX0JVRl9TV0FQXzMyQklUIHwKKwkJICAgICAoZGV2X3ByaXYtPnJpbmcucnB0cl91cGRhdGVfbDJxdyA8PCA4KSB8CisJCSAgICAgZGV2X3ByaXYtPnJpbmcuc2l6ZV9sMnF3KTsKKyNlbHNlCisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfQ05UTCwKKwkJICAgICAoZGV2X3ByaXYtPnJpbmcucnB0cl91cGRhdGVfbDJxdyA8PCA4KSB8CisJCSAgICAgZGV2X3ByaXYtPnJpbmcuc2l6ZV9sMnF3KTsKKyNlbmRpZgorCisjaWYgX19PU19IQVNfQUdQCisJaWYgKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKKwkJLyogWFhYICovCisJCXJhZGVvbl93cml0ZV9hZ3BfYmFzZShkZXZfcHJpdiwgZGV2LT5hZ3AtPmJhc2UpOworCisJCS8qIFhYWCAqLworCQlyYWRlb25fd3JpdGVfYWdwX2xvY2F0aW9uKGRldl9wcml2LAorCQkJICAgICAoKChkZXZfcHJpdi0+Z2FydF92bV9zdGFydCAtIDEgKworCQkJCWRldl9wcml2LT5nYXJ0X3NpemUpICYgMHhmZmZmMDAwMCkgfAorCQkJICAgICAgKGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0ID4+IDE2KSkpOworCisJCXJpbmdfc3RhcnQgPSAoZGV2X3ByaXYtPmNwX3JpbmctPm9mZnNldAorCQkJICAgICAgLSBkZXYtPmFncC0+YmFzZQorCQkJICAgICAgKyBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCk7CisJfSBlbHNlCisjZW5kaWYKKwkJcmluZ19zdGFydCA9IChkZXZfcHJpdi0+Y3BfcmluZy0+b2Zmc2V0CisJCQkgICAgICAtICh1bnNpZ25lZCBsb25nKWRldi0+c2ctPnZpcnR1YWwKKwkJCSAgICAgICsgZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQpOworCisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfUkJfQkFTRSwgcmluZ19zdGFydCA+PiA4KTsKKworCVJBREVPTl9XUklURShSNjAwX0NQX01FX0NOVEwsIDB4ZmYpOworCisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfREVCVUcsICgxIDw8IDI3KSB8ICgxIDw8IDI4KSk7CisKKwkvKiBJbml0aWFsaXplIHRoZSBzY3JhdGNoIHJlZ2lzdGVyIHBvaW50ZXIuICBUaGlzIHdpbGwgY2F1c2UKKwkgKiB0aGUgc2NyYXRjaCByZWdpc3RlciB2YWx1ZXMgdG8gYmUgd3JpdHRlbiBvdXQgdG8gbWVtb3J5CisJICogd2hlbmV2ZXIgdGhleSBhcmUgdXBkYXRlZC4KKwkgKgorCSAqIFdlIHNpbXBseSBwdXQgdGhpcyBiZWhpbmQgdGhlIHJpbmcgcmVhZCBwb2ludGVyLCB0aGlzIHdvcmtzCisJICogd2l0aCBQQ0kgR0FSVCBhcyB3ZWxsIGFzICh3aGF0ZXZlciBraW5kIG9mKSBBR1AgR0FSVAorCSAqLworCXsKKwkJdTY0IHNjcmF0Y2hfYWRkcjsKKworCQlzY3JhdGNoX2FkZHIgPSBSQURFT05fUkVBRChSNjAwX0NQX1JCX1JQVFJfQUREUik7CisJCXNjcmF0Y2hfYWRkciB8PSAoKHU2NClSQURFT05fUkVBRChSNjAwX0NQX1JCX1JQVFJfQUREUl9ISSkpIDw8IDMyOworCQlzY3JhdGNoX2FkZHIgKz0gUjYwMF9TQ1JBVENIX1JFR19PRkZTRVQ7CisJCXNjcmF0Y2hfYWRkciA+Pj0gODsKKwkJc2NyYXRjaF9hZGRyICY9IDB4ZmZmZmZmZmY7CisKKwkJUkFERU9OX1dSSVRFKFI2MDBfU0NSQVRDSF9BRERSLCAodWludDMyX3Qpc2NyYXRjaF9hZGRyKTsKKwl9CisKKwlSQURFT05fV1JJVEUoUjYwMF9TQ1JBVENIX1VNU0ssIDB4Nyk7CisKKwkvKiBUdXJuIG9uIGJ1cyBtYXN0ZXJpbmcgKi8KKwlyYWRlb25fZW5hYmxlX2JtKGRldl9wcml2KTsKKworCXJhZGVvbl93cml0ZV9yaW5nX3JwdHIoZGV2X3ByaXYsIFI2MDBfU0NSQVRDSE9GRigwKSwgMCk7CisJUkFERU9OX1dSSVRFKFI2MDBfTEFTVF9GUkFNRV9SRUcsIDApOworCisJcmFkZW9uX3dyaXRlX3JpbmdfcnB0cihkZXZfcHJpdiwgUjYwMF9TQ1JBVENIT0ZGKDEpLCAwKTsKKwlSQURFT05fV1JJVEUoUjYwMF9MQVNUX0RJU1BBVENIX1JFRywgMCk7CisKKwlyYWRlb25fd3JpdGVfcmluZ19ycHRyKGRldl9wcml2LCBSNjAwX1NDUkFUQ0hPRkYoMiksIDApOworCVJBREVPTl9XUklURShSNjAwX0xBU1RfQ0xFQVJfUkVHLCAwKTsKKworCS8qIHJlc2V0IHNhcmVhIGNvcGllcyBvZiB0aGVzZSAqLworCW1hc3Rlcl9wcml2ID0gZmlsZV9wcml2LT5tYXN0ZXItPmRyaXZlcl9wcml2OworCWlmIChtYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdikgeworCQltYXN0ZXJfcHJpdi0+c2FyZWFfcHJpdi0+bGFzdF9mcmFtZSA9IDA7CisJCW1hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoID0gMDsKKwkJbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXYtPmxhc3RfY2xlYXIgPSAwOworCX0KKworCXI2MDBfZG9fd2FpdF9mb3JfaWRsZShkZXZfcHJpdik7CisKK30KKworaW50IHI2MDBfZG9fY2xlYW51cF9jcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQoreworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJRFJNX0RFQlVHKCJcbiIpOworCisJLyogTWFrZSBzdXJlIGludGVycnVwdHMgYXJlIGRpc2FibGVkIGhlcmUgYmVjYXVzZSB0aGUgdW5pbnN0YWxsIGlvY3RsCisJICogbWF5IG5vdCBoYXZlIGJlZW4gY2FsbGVkIGZyb20gdXNlcnNwYWNlIGFuZCBhZnRlciBkZXZfcHJpdmF0ZQorCSAqIGlzIGZyZWVkLCBpdCdzIHRvbyBsYXRlLgorCSAqLworCWlmIChkZXYtPmlycV9lbmFibGVkKQorCQlkcm1faXJxX3VuaW5zdGFsbChkZXYpOworCisjaWYgX19PU19IQVNfQUdQCisJaWYgKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApIHsKKwkJaWYgKGRldl9wcml2LT5jcF9yaW5nICE9IE5VTEwpIHsKKwkJCWRybV9jb3JlX2lvcmVtYXBmcmVlKGRldl9wcml2LT5jcF9yaW5nLCBkZXYpOworCQkJZGV2X3ByaXYtPmNwX3JpbmcgPSBOVUxMOworCQl9CisJCWlmIChkZXZfcHJpdi0+cmluZ19ycHRyICE9IE5VTEwpIHsKKwkJCWRybV9jb3JlX2lvcmVtYXBmcmVlKGRldl9wcml2LT5yaW5nX3JwdHIsIGRldik7CisJCQlkZXZfcHJpdi0+cmluZ19ycHRyID0gTlVMTDsKKwkJfQorCQlpZiAoZGV2LT5hZ3BfYnVmZmVyX21hcCAhPSBOVUxMKSB7CisJCQlkcm1fY29yZV9pb3JlbWFwZnJlZShkZXYtPmFncF9idWZmZXJfbWFwLCBkZXYpOworCQkJZGV2LT5hZ3BfYnVmZmVyX21hcCA9IE5VTEw7CisJCX0KKwl9IGVsc2UKKyNlbmRpZgorCXsKKworCQlpZiAoZGV2X3ByaXYtPmdhcnRfaW5mby5idXNfYWRkcikKKwkJCXI2MDBfcGFnZV90YWJsZV9jbGVhbnVwKGRldiwgJmRldl9wcml2LT5nYXJ0X2luZm8pOworCisJCWlmIChkZXZfcHJpdi0+Z2FydF9pbmZvLmdhcnRfdGFibGVfbG9jYXRpb24gPT0gRFJNX0FUSV9HQVJUX0ZCKSB7CisJCQlkcm1fY29yZV9pb3JlbWFwZnJlZSgmZGV2X3ByaXYtPmdhcnRfaW5mby5tYXBwaW5nLCBkZXYpOworCQkJZGV2X3ByaXYtPmdhcnRfaW5mby5hZGRyID0gTlVMTDsKKwkJfQorCX0KKwkvKiBvbmx5IGNsZWFyIHRvIHRoZSBzdGFydCBvZiBmbGFncyAqLworCW1lbXNldChkZXZfcHJpdiwgMCwgb2Zmc2V0b2YoZHJtX3JhZGVvbl9wcml2YXRlX3QsIGZsYWdzKSk7CisKKwlyZXR1cm4gMDsKK30KKworaW50IHI2MDBfZG9faW5pdF9jcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBkcm1fcmFkZW9uX2luaXRfdCAqaW5pdCwKKwkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KQoreworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJc3RydWN0IGRybV9yYWRlb25fbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2ID0gZmlsZV9wcml2LT5tYXN0ZXItPmRyaXZlcl9wcml2OworCisJRFJNX0RFQlVHKCJcbiIpOworCisJLyogaWYgd2UgcmVxdWlyZSBuZXcgbWVtb3J5IG1hcCBidXQgd2UgZG9uJ3QgaGF2ZSBpdCBmYWlsICovCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fTkVXX01FTU1BUCkgJiYgIWRldl9wcml2LT5uZXdfbWVtbWFwKSB7CisJCURSTV9FUlJPUigiQ2Fubm90IGluaXRpYWxpc2UgRFJNIG9uIHRoaXMgY2FyZFxuVGhpcyBjYXJkIHJlcXVpcmVzIGEgbmV3IFgub3JnIEREWCBmb3IgM0RcbiIpOworCQlyNjAwX2RvX2NsZWFudXBfY3AoZGV2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGluaXQtPmlzX3BjaSAmJiAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkpIHsKKwkJRFJNX0RFQlVHKCJGb3JjaW5nIEFHUCBjYXJkIHRvIFBDSSBtb2RlXG4iKTsKKwkJZGV2X3ByaXYtPmZsYWdzICY9IH5SQURFT05fSVNfQUdQOworCQkvKiBUaGUgd3JpdGViYWNrIHRlc3Qgc3VjY2VlZHMsIGJ1dCB3aGVuIHdyaXRlYmFjayBpcyBlbmFibGVkLAorCQkgKiB0aGUgcmluZyBidWZmZXIgcmVhZCBwdHIgdXBkYXRlIGZhaWxzIGFmdGVyIGZpcnN0IDEyOCBieXRlcy4KKwkJICovCisJCXJhZGVvbl9ub193YiA9IDE7CisJfSBlbHNlIGlmICghKGRldl9wcml2LT5mbGFncyAmIChSQURFT05fSVNfQUdQIHwgUkFERU9OX0lTX1BDSSB8IFJBREVPTl9JU19QQ0lFKSkKKwkJICYmICFpbml0LT5pc19wY2kpIHsKKwkJRFJNX0RFQlVHKCJSZXN0b3JpbmcgQUdQIGZsYWdcbiIpOworCQlkZXZfcHJpdi0+ZmxhZ3MgfD0gUkFERU9OX0lTX0FHUDsKKwl9CisKKwlkZXZfcHJpdi0+dXNlY190aW1lb3V0ID0gaW5pdC0+dXNlY190aW1lb3V0OworCWlmIChkZXZfcHJpdi0+dXNlY190aW1lb3V0IDwgMSB8fAorCSAgICBkZXZfcHJpdi0+dXNlY190aW1lb3V0ID4gUkFERU9OX01BWF9VU0VDX1RJTUVPVVQpIHsKKwkJRFJNX0RFQlVHKCJUSU1FT1VUIHByb2JsZW0hXG4iKTsKKwkJcjYwMF9kb19jbGVhbnVwX2NwKGRldik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIEVuYWJsZSB2Ymxhbmsgb24gQ1JUQzEgZm9yIG9sZGVyIFggc2VydmVycworCSAqLworCWRldl9wcml2LT52YmxhbmtfY3J0YyA9IERSTV9SQURFT05fVkJMQU5LX0NSVEMxOworCisJZGV2X3ByaXYtPmNwX21vZGUgPSBpbml0LT5jcF9tb2RlOworCisJLyogV2UgZG9uJ3Qgc3VwcG9ydCBhbnl0aGluZyBvdGhlciB0aGFuIGJ1cy1tYXN0ZXJpbmcgcmluZyBtb2RlLAorCSAqIGJ1dCB0aGUgcmluZyBjYW4gYmUgaW4gZWl0aGVyIEFHUCBvciBQQ0kgc3BhY2UgZm9yIHRoZSByaW5nCisJICogcmVhZCBwb2ludGVyLgorCSAqLworCWlmICgoaW5pdC0+Y3BfbW9kZSAhPSBSQURFT05fQ1NRX1BSSUJNX0lORERJUykgJiYKKwkgICAgKGluaXQtPmNwX21vZGUgIT0gUkFERU9OX0NTUV9QUklCTV9JTkRCTSkpIHsKKwkJRFJNX0RFQlVHKCJCQUQgY3BfbW9kZSAoJXgpIVxuIiwgaW5pdC0+Y3BfbW9kZSk7CisJCXI2MDBfZG9fY2xlYW51cF9jcChkZXYpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlzd2l0Y2ggKGluaXQtPmZiX2JwcCkgeworCWNhc2UgMTY6CisJCWRldl9wcml2LT5jb2xvcl9mbXQgPSBSQURFT05fQ09MT1JfRk9STUFUX1JHQjU2NTsKKwkJYnJlYWs7CisJY2FzZSAzMjoKKwlkZWZhdWx0OgorCQlkZXZfcHJpdi0+Y29sb3JfZm10ID0gUkFERU9OX0NPTE9SX0ZPUk1BVF9BUkdCODg4ODsKKwkJYnJlYWs7CisJfQorCWRldl9wcml2LT5mcm9udF9vZmZzZXQgPSBpbml0LT5mcm9udF9vZmZzZXQ7CisJZGV2X3ByaXYtPmZyb250X3BpdGNoID0gaW5pdC0+ZnJvbnRfcGl0Y2g7CisJZGV2X3ByaXYtPmJhY2tfb2Zmc2V0ID0gaW5pdC0+YmFja19vZmZzZXQ7CisJZGV2X3ByaXYtPmJhY2tfcGl0Y2ggPSBpbml0LT5iYWNrX3BpdGNoOworCisJZGV2X3ByaXYtPnJpbmdfb2Zmc2V0ID0gaW5pdC0+cmluZ19vZmZzZXQ7CisJZGV2X3ByaXYtPnJpbmdfcnB0cl9vZmZzZXQgPSBpbml0LT5yaW5nX3JwdHJfb2Zmc2V0OworCWRldl9wcml2LT5idWZmZXJzX29mZnNldCA9IGluaXQtPmJ1ZmZlcnNfb2Zmc2V0OworCWRldl9wcml2LT5nYXJ0X3RleHR1cmVzX29mZnNldCA9IGluaXQtPmdhcnRfdGV4dHVyZXNfb2Zmc2V0OworCisJbWFzdGVyX3ByaXYtPnNhcmVhID0gZHJtX2dldHNhcmVhKGRldik7CisJaWYgKCFtYXN0ZXJfcHJpdi0+c2FyZWEpIHsKKwkJRFJNX0VSUk9SKCJjb3VsZCBub3QgZmluZCBzYXJlYSFcbiIpOworCQlyNjAwX2RvX2NsZWFudXBfY3AoZGV2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZGV2X3ByaXYtPmNwX3JpbmcgPSBkcm1fY29yZV9maW5kbWFwKGRldiwgaW5pdC0+cmluZ19vZmZzZXQpOworCWlmICghZGV2X3ByaXYtPmNwX3JpbmcpIHsKKwkJRFJNX0VSUk9SKCJjb3VsZCBub3QgZmluZCBjcCByaW5nIHJlZ2lvbiFcbiIpOworCQlyNjAwX2RvX2NsZWFudXBfY3AoZGV2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWRldl9wcml2LT5yaW5nX3JwdHIgPSBkcm1fY29yZV9maW5kbWFwKGRldiwgaW5pdC0+cmluZ19ycHRyX29mZnNldCk7CisJaWYgKCFkZXZfcHJpdi0+cmluZ19ycHRyKSB7CisJCURSTV9FUlJPUigiY291bGQgbm90IGZpbmQgcmluZyByZWFkIHBvaW50ZXIhXG4iKTsKKwkJcjYwMF9kb19jbGVhbnVwX2NwKGRldik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlkZXYtPmFncF9idWZmZXJfdG9rZW4gPSBpbml0LT5idWZmZXJzX29mZnNldDsKKwlkZXYtPmFncF9idWZmZXJfbWFwID0gZHJtX2NvcmVfZmluZG1hcChkZXYsIGluaXQtPmJ1ZmZlcnNfb2Zmc2V0KTsKKwlpZiAoIWRldi0+YWdwX2J1ZmZlcl9tYXApIHsKKwkJRFJNX0VSUk9SKCJjb3VsZCBub3QgZmluZCBkbWEgYnVmZmVyIHJlZ2lvbiFcbiIpOworCQlyNjAwX2RvX2NsZWFudXBfY3AoZGV2KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJaWYgKGluaXQtPmdhcnRfdGV4dHVyZXNfb2Zmc2V0KSB7CisJCWRldl9wcml2LT5nYXJ0X3RleHR1cmVzID0KKwkJICAgIGRybV9jb3JlX2ZpbmRtYXAoZGV2LCBpbml0LT5nYXJ0X3RleHR1cmVzX29mZnNldCk7CisJCWlmICghZGV2X3ByaXYtPmdhcnRfdGV4dHVyZXMpIHsKKwkJCURSTV9FUlJPUigiY291bGQgbm90IGZpbmQgR0FSVCB0ZXh0dXJlIHJlZ2lvbiFcbiIpOworCQkJcjYwMF9kb19jbGVhbnVwX2NwKGRldik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0KKworI2lmIF9fT1NfSEFTX0FHUAorCS8qIFhYWCAqLworCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCWRybV9jb3JlX2lvcmVtYXBfd2MoZGV2X3ByaXYtPmNwX3JpbmcsIGRldik7CisJCWRybV9jb3JlX2lvcmVtYXBfd2MoZGV2X3ByaXYtPnJpbmdfcnB0ciwgZGV2KTsKKwkJZHJtX2NvcmVfaW9yZW1hcF93YyhkZXYtPmFncF9idWZmZXJfbWFwLCBkZXYpOworCQlpZiAoIWRldl9wcml2LT5jcF9yaW5nLT5oYW5kbGUgfHwKKwkJICAgICFkZXZfcHJpdi0+cmluZ19ycHRyLT5oYW5kbGUgfHwKKwkJICAgICFkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUpIHsKKwkJCURSTV9FUlJPUigiY291bGQgbm90IGZpbmQgaW9yZW1hcCBhZ3AgcmVnaW9ucyFcbiIpOworCQkJcjYwMF9kb19jbGVhbnVwX2NwKGRldik7CisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJfQorCX0gZWxzZQorI2VuZGlmCisJeworCQlkZXZfcHJpdi0+Y3BfcmluZy0+aGFuZGxlID0gKHZvaWQgKilkZXZfcHJpdi0+Y3BfcmluZy0+b2Zmc2V0OworCQlkZXZfcHJpdi0+cmluZ19ycHRyLT5oYW5kbGUgPQorCQkgICAgKHZvaWQgKilkZXZfcHJpdi0+cmluZ19ycHRyLT5vZmZzZXQ7CisJCWRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZSA9CisJCSAgICAodm9pZCAqKWRldi0+YWdwX2J1ZmZlcl9tYXAtPm9mZnNldDsKKworCQlEUk1fREVCVUcoImRldl9wcml2LT5jcF9yaW5nLT5oYW5kbGUgJXBcbiIsCisJCQkgIGRldl9wcml2LT5jcF9yaW5nLT5oYW5kbGUpOworCQlEUk1fREVCVUcoImRldl9wcml2LT5yaW5nX3JwdHItPmhhbmRsZSAlcFxuIiwKKwkJCSAgZGV2X3ByaXYtPnJpbmdfcnB0ci0+aGFuZGxlKTsKKwkJRFJNX0RFQlVHKCJkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUgJXBcbiIsCisJCQkgIGRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZSk7CisJfQorCisJZGV2X3ByaXYtPmZiX2xvY2F0aW9uID0gKHJhZGVvbl9yZWFkX2ZiX2xvY2F0aW9uKGRldl9wcml2KSAmIDB4ZmZmZikgPDwgMjQ7CisJZGV2X3ByaXYtPmZiX3NpemUgPQorCQkoKChyYWRlb25fcmVhZF9mYl9sb2NhdGlvbihkZXZfcHJpdikgJiAweGZmZmYwMDAwdSkgPDwgOCkgKyAweDEwMDAwMDApCisJCS0gZGV2X3ByaXYtPmZiX2xvY2F0aW9uOworCisJZGV2X3ByaXYtPmZyb250X3BpdGNoX29mZnNldCA9ICgoKGRldl9wcml2LT5mcm9udF9waXRjaCAvIDY0KSA8PCAyMikgfAorCQkJCQkoKGRldl9wcml2LT5mcm9udF9vZmZzZXQKKwkJCQkJICArIGRldl9wcml2LT5mYl9sb2NhdGlvbikgPj4gMTApKTsKKworCWRldl9wcml2LT5iYWNrX3BpdGNoX29mZnNldCA9ICgoKGRldl9wcml2LT5iYWNrX3BpdGNoIC8gNjQpIDw8IDIyKSB8CisJCQkJICAgICAgICgoZGV2X3ByaXYtPmJhY2tfb2Zmc2V0CisJCQkJCSArIGRldl9wcml2LT5mYl9sb2NhdGlvbikgPj4gMTApKTsKKworCWRldl9wcml2LT5kZXB0aF9waXRjaF9vZmZzZXQgPSAoKChkZXZfcHJpdi0+ZGVwdGhfcGl0Y2ggLyA2NCkgPDwgMjIpIHwKKwkJCQkJKChkZXZfcHJpdi0+ZGVwdGhfb2Zmc2V0CisJCQkJCSAgKyBkZXZfcHJpdi0+ZmJfbG9jYXRpb24pID4+IDEwKSk7CisKKwlkZXZfcHJpdi0+Z2FydF9zaXplID0gaW5pdC0+Z2FydF9zaXplOworCisJLyogTmV3IGxldCdzIHNldCB0aGUgbWVtb3J5IG1hcCAuLi4gKi8KKwlpZiAoZGV2X3ByaXYtPm5ld19tZW1tYXApIHsKKwkJdTMyIGJhc2UgPSAwOworCisJCURSTV9JTkZPKCJTZXR0aW5nIEdBUlQgbG9jYXRpb24gYmFzZWQgb24gbmV3IG1lbW9yeSBtYXBcbiIpOworCisJCS8qIElmIHVzaW5nIEFHUCwgdHJ5IHRvIGxvY2F0ZSB0aGUgQUdQIGFwZXJ0dXJlIGF0IHRoZSBzYW1lCisJCSAqIGxvY2F0aW9uIGluIHRoZSBjYXJkIGFuZCBvbiB0aGUgYnVzLCB0aG91Z2ggd2UgaGF2ZSB0bworCQkgKiBhbGlnbiBpdCBkb3duLgorCQkgKi8KKyNpZiBfX09TX0hBU19BR1AKKwkJLyogWFhYICovCisJCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKSB7CisJCQliYXNlID0gZGV2LT5hZ3AtPmJhc2U7CisJCQkvKiBDaGVjayBpZiB2YWxpZCAqLworCQkJaWYgKChiYXNlICsgZGV2X3ByaXYtPmdhcnRfc2l6ZSAtIDEpID49IGRldl9wcml2LT5mYl9sb2NhdGlvbiAmJgorCQkJICAgIGJhc2UgPCAoZGV2X3ByaXYtPmZiX2xvY2F0aW9uICsgZGV2X3ByaXYtPmZiX3NpemUgLSAxKSkgeworCQkJCURSTV9JTkZPKCJDYW4ndCB1c2UgQUdQIGJhc2UgQDB4JTA4bHgsIHdvbid0IGZpdFxuIiwKKwkJCQkJIGRldi0+YWdwLT5iYXNlKTsKKwkJCQliYXNlID0gMDsKKwkJCX0KKwkJfQorI2VuZGlmCisJCS8qIElmIG5vdCBvciBpZiBBR1AgaXMgYXQgMCAoTWFjcyksIHRyeSB0byBwdXQgaXQgZWxzZXdoZXJlICovCisJCWlmIChiYXNlID09IDApIHsKKwkJCWJhc2UgPSBkZXZfcHJpdi0+ZmJfbG9jYXRpb24gKyBkZXZfcHJpdi0+ZmJfc2l6ZTsKKwkJCWlmIChiYXNlIDwgZGV2X3ByaXYtPmZiX2xvY2F0aW9uIHx8CisJCQkgICAgKChiYXNlICsgZGV2X3ByaXYtPmdhcnRfc2l6ZSkgJiAweGZmZmZmZmZmdWwpIDwgYmFzZSkKKwkJCQliYXNlID0gZGV2X3ByaXYtPmZiX2xvY2F0aW9uCisJCQkJCS0gZGV2X3ByaXYtPmdhcnRfc2l6ZTsKKwkJfQorCQlkZXZfcHJpdi0+Z2FydF92bV9zdGFydCA9IGJhc2UgJiAweGZmYzAwMDAwdTsKKwkJaWYgKGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0ICE9IGJhc2UpCisJCQlEUk1fSU5GTygiR0FSVCBhbGlnbmVkIGRvd24gZnJvbSAweCUwOHggdG8gMHglMDh4XG4iLAorCQkJCSBiYXNlLCBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCk7CisJfQorCisjaWYgX19PU19IQVNfQUdQCisJLyogWFhYICovCisJaWYgKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9JU19BR1ApCisJCWRldl9wcml2LT5nYXJ0X2J1ZmZlcnNfb2Zmc2V0ID0gKGRldi0+YWdwX2J1ZmZlcl9tYXAtPm9mZnNldAorCQkJCQkJIC0gZGV2LT5hZ3AtPmJhc2UKKwkJCQkJCSArIGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0KTsKKwllbHNlCisjZW5kaWYKKwkJZGV2X3ByaXYtPmdhcnRfYnVmZmVyc19vZmZzZXQgPSAoZGV2LT5hZ3BfYnVmZmVyX21hcC0+b2Zmc2V0CisJCQkJCQkgLSAodW5zaWduZWQgbG9uZylkZXYtPnNnLT52aXJ0dWFsCisJCQkJCQkgKyBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCk7CisKKwlEUk1fREVCVUcoImZiIDB4JTA4eCBzaXplICVkXG4iLAorCQkgICh1bnNpZ25lZCBpbnQpIGRldl9wcml2LT5mYl9sb2NhdGlvbiwKKwkJICAodW5zaWduZWQgaW50KSBkZXZfcHJpdi0+ZmJfc2l6ZSk7CisJRFJNX0RFQlVHKCJkZXZfcHJpdi0+Z2FydF9zaXplICVkXG4iLCBkZXZfcHJpdi0+Z2FydF9zaXplKTsKKwlEUk1fREVCVUcoImRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0IDB4JTA4eFxuIiwKKwkJICAodW5zaWduZWQgaW50KSBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCk7CisJRFJNX0RFQlVHKCJkZXZfcHJpdi0+Z2FydF9idWZmZXJzX29mZnNldCAweCUwOGx4XG4iLAorCQkgIGRldl9wcml2LT5nYXJ0X2J1ZmZlcnNfb2Zmc2V0KTsKKworCWRldl9wcml2LT5yaW5nLnN0YXJ0ID0gKHUzMiAqKSBkZXZfcHJpdi0+Y3BfcmluZy0+aGFuZGxlOworCWRldl9wcml2LT5yaW5nLmVuZCA9ICgodTMyICopIGRldl9wcml2LT5jcF9yaW5nLT5oYW5kbGUKKwkJCSAgICAgICsgaW5pdC0+cmluZ19zaXplIC8gc2l6ZW9mKHUzMikpOworCWRldl9wcml2LT5yaW5nLnNpemUgPSBpbml0LT5yaW5nX3NpemU7CisJZGV2X3ByaXYtPnJpbmcuc2l6ZV9sMnF3ID0gZHJtX29yZGVyKGluaXQtPnJpbmdfc2l6ZSAvIDgpOworCisJZGV2X3ByaXYtPnJpbmcucnB0cl91cGRhdGUgPSAvKiBpbml0LT5ycHRyX3VwZGF0ZSAqLyA0MDk2OworCWRldl9wcml2LT5yaW5nLnJwdHJfdXBkYXRlX2wycXcgPSBkcm1fb3JkZXIoLyogaW5pdC0+cnB0cl91cGRhdGUgKi8gNDA5NiAvIDgpOworCisJZGV2X3ByaXYtPnJpbmcuZmV0Y2hfc2l6ZSA9IC8qIGluaXQtPmZldGNoX3NpemUgKi8gMzI7CisJZGV2X3ByaXYtPnJpbmcuZmV0Y2hfc2l6ZV9sMm93ID0gZHJtX29yZGVyKC8qIGluaXQtPmZldGNoX3NpemUgKi8gMzIgLyAxNik7CisKKwlkZXZfcHJpdi0+cmluZy50YWlsX21hc2sgPSAoZGV2X3ByaXYtPnJpbmcuc2l6ZSAvIHNpemVvZih1MzIpKSAtIDE7CisKKwlkZXZfcHJpdi0+cmluZy5oaWdoX21hcmsgPSBSQURFT05fUklOR19ISUdIX01BUks7CisKKyNpZiBfX09TX0hBU19BR1AKKwlpZiAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQkvKiBYWFggdHVybiBvZmYgcGNpZSBnYXJ0ICovCisJfSBlbHNlCisjZW5kaWYKKwl7CisJCWRldl9wcml2LT5nYXJ0X2luZm8udGFibGVfbWFzayA9IERNQV9CSVRfTUFTSygzMik7CisJCS8qIGlmIHdlIGhhdmUgYW4gb2Zmc2V0IHNldCBmcm9tIHVzZXJzcGFjZSAqLworCQlpZiAoIWRldl9wcml2LT5wY2lnYXJ0X29mZnNldF9zZXQpIHsKKwkJCURSTV9FUlJPUigiTmVlZCBnYXJ0IG9mZnNldCBmcm9tIHVzZXJzcGFjZVxuIik7CisJCQlyNjAwX2RvX2NsZWFudXBfY3AoZGV2KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJRFJNX0RFQlVHKCJVc2luZyBnYXJ0IG9mZnNldCAweCUwOGx4XG4iLCBkZXZfcHJpdi0+cGNpZ2FydF9vZmZzZXQpOworCisJCWRldl9wcml2LT5nYXJ0X2luZm8uYnVzX2FkZHIgPQorCQkJZGV2X3ByaXYtPnBjaWdhcnRfb2Zmc2V0ICsgZGV2X3ByaXYtPmZiX2xvY2F0aW9uOworCQlkZXZfcHJpdi0+Z2FydF9pbmZvLm1hcHBpbmcub2Zmc2V0ID0KKwkJCWRldl9wcml2LT5wY2lnYXJ0X29mZnNldCArIGRldl9wcml2LT5mYl9hcGVyX29mZnNldDsKKwkJZGV2X3ByaXYtPmdhcnRfaW5mby5tYXBwaW5nLnNpemUgPQorCQkJZGV2X3ByaXYtPmdhcnRfaW5mby50YWJsZV9zaXplOworCisJCWRybV9jb3JlX2lvcmVtYXBfd2MoJmRldl9wcml2LT5nYXJ0X2luZm8ubWFwcGluZywgZGV2KTsKKwkJaWYgKCFkZXZfcHJpdi0+Z2FydF9pbmZvLm1hcHBpbmcuaGFuZGxlKSB7CisJCQlEUk1fRVJST1IoImlvcmVtYXAgZmFpbGVkLlxuIik7CisJCQlyNjAwX2RvX2NsZWFudXBfY3AoZGV2KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJZGV2X3ByaXYtPmdhcnRfaW5mby5hZGRyID0KKwkJCWRldl9wcml2LT5nYXJ0X2luZm8ubWFwcGluZy5oYW5kbGU7CisKKwkJRFJNX0RFQlVHKCJTZXR0aW5nIHBoeXNfcGNpX2dhcnQgdG8gJXAgJTA4bFhcbiIsCisJCQkgIGRldl9wcml2LT5nYXJ0X2luZm8uYWRkciwKKwkJCSAgZGV2X3ByaXYtPnBjaWdhcnRfb2Zmc2V0KTsKKworCQlpZiAoIXI2MDBfcGFnZV90YWJsZV9pbml0KGRldikpIHsKKwkJCURSTV9FUlJPUigiRmFpbGVkIHRvIGluaXQgR0FSVCB0YWJsZVxuIik7CisJCQlyNjAwX2RvX2NsZWFudXBfY3AoZGV2KTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JWNzcwKSkKKwkJCXI3MDBfdm1faW5pdChkZXYpOworCQllbHNlCisJCQlyNjAwX3ZtX2luaXQoZGV2KTsKKwl9CisKKwlpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlY3NzApKQorCQlyNzAwX2NwX2xvYWRfbWljcm9jb2RlKGRldl9wcml2KTsKKwllbHNlCisJCXI2MDBfY3BfbG9hZF9taWNyb2NvZGUoZGV2X3ByaXYpOworCisJcjYwMF9jcF9pbml0X3JpbmdfYnVmZmVyKGRldiwgZGV2X3ByaXYsIGZpbGVfcHJpdik7CisKKwlkZXZfcHJpdi0+bGFzdF9idWYgPSAwOworCisJcjYwMF9kb19lbmdpbmVfcmVzZXQoZGV2KTsKKwlyNjAwX3Rlc3Rfd3JpdGViYWNrKGRldl9wcml2KTsKKworCXJldHVybiAwOworfQorCitpbnQgcjYwMF9kb19yZXN1bWVfY3Aoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCit7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKworCURSTV9ERUJVRygiXG4iKTsKKwlpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlY3NzApKSB7CisJCXI3MDBfdm1faW5pdChkZXYpOworCQlyNzAwX2NwX2xvYWRfbWljcm9jb2RlKGRldl9wcml2KTsKKwl9IGVsc2UgeworCQlyNjAwX3ZtX2luaXQoZGV2KTsKKwkJcjYwMF9jcF9sb2FkX21pY3JvY29kZShkZXZfcHJpdik7CisJfQorCXI2MDBfY3BfaW5pdF9yaW5nX2J1ZmZlcihkZXYsIGRldl9wcml2LCBmaWxlX3ByaXYpOworCXI2MDBfZG9fZW5naW5lX3Jlc2V0KGRldik7CisKKwlyZXR1cm4gMDsKK30KKworLyogV2FpdCBmb3IgdGhlIENQIHRvIGdvIGlkbGUuCisgKi8KK2ludCByNjAwX2RvX2NwX2lkbGUoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KQoreworCVJJTkdfTE9DQUxTOworCURSTV9ERUJVRygiXG4iKTsKKworCUJFR0lOX1JJTkcoNSk7CisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX0VWRU5UX1dSSVRFLCAwKSk7CisJT1VUX1JJTkcoUjYwMF9DQUNIRV9GTFVTSF9BTkRfSU5WX0VWRU5UKTsKKwkvKiB3YWl0IGZvciAzRCBpZGxlIGNsZWFuICovCisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9DT05GSUdfUkVHLCAxKSk7CisJT1VUX1JJTkcoKFI2MDBfV0FJVF9VTlRJTCAtIFI2MDBfU0VUX0NPTkZJR19SRUdfT0ZGU0VUKSA+PiAyKTsKKwlPVVRfUklORyhSQURFT05fV0FJVF8zRF9JRExFIHwgUkFERU9OX1dBSVRfM0RfSURMRUNMRUFOKTsKKworCUFEVkFOQ0VfUklORygpOworCUNPTU1JVF9SSU5HKCk7CisKKwlyZXR1cm4gcjYwMF9kb193YWl0X2Zvcl9pZGxlKGRldl9wcml2KTsKK30KKworLyogU3RhcnQgdGhlIENvbW1hbmQgUHJvY2Vzc29yLgorICovCit2b2lkIHI2MDBfZG9fY3Bfc3RhcnQoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KQoreworCXUzMiBjcF9tZTsKKwlSSU5HX0xPQ0FMUzsKKwlEUk1fREVCVUcoIlxuIik7CisKKwlCRUdJTl9SSU5HKDcpOworCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9NRV9JTklUSUFMSVpFLCA1KSk7CisJT1VUX1JJTkcoMHgwMDAwMDAwMSk7CisJaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA8IENISVBfUlY3NzApKQorCQlPVVRfUklORygweDAwMDAwMDAzKTsKKwllbHNlCisJCU9VVF9SSU5HKDB4MDAwMDAwMDApOworCU9VVF9SSU5HKChkZXZfcHJpdi0+cjYwMF9tYXhfaHdfY29udGV4dHMgLSAxKSk7CisJT1VUX1JJTkcoUjYwMF9NRV9JTklUSUFMSVpFX0RFVklDRV9JRCgxKSk7CisJT1VUX1JJTkcoMHgwMDAwMDAwMCk7CisJT1VUX1JJTkcoMHgwMDAwMDAwMCk7CisJQURWQU5DRV9SSU5HKCk7CisJQ09NTUlUX1JJTkcoKTsKKworCS8qIHNldCB0aGUgbXV4IGFuZCByZXNldCB0aGUgaGFsdCBiaXQgKi8KKwljcF9tZSA9IDB4ZmY7CisJUkFERU9OX1dSSVRFKFI2MDBfQ1BfTUVfQ05UTCwgY3BfbWUpOworCisJZGV2X3ByaXYtPmNwX3J1bm5pbmcgPSAxOworCit9CisKK3ZvaWQgcjYwMF9kb19jcF9yZXNldChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpCit7CisJdTMyIGN1cl9yZWFkX3B0cjsKKwlEUk1fREVCVUcoIlxuIik7CisKKwljdXJfcmVhZF9wdHIgPSBSQURFT05fUkVBRChSNjAwX0NQX1JCX1JQVFIpOworCVJBREVPTl9XUklURShSNjAwX0NQX1JCX1dQVFIsIGN1cl9yZWFkX3B0cik7CisJU0VUX1JJTkdfSEVBRChkZXZfcHJpdiwgY3VyX3JlYWRfcHRyKTsKKwlkZXZfcHJpdi0+cmluZy50YWlsID0gY3VyX3JlYWRfcHRyOworfQorCit2b2lkIHI2MDBfZG9fY3Bfc3RvcChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpCit7CisJdWludDMyX3QgY3BfbWU7CisKKwlEUk1fREVCVUcoIlxuIik7CisKKwljcF9tZSA9IDB4ZmYgfCBSNjAwX0NQX01FX0hBTFQ7CisKKwlSQURFT05fV1JJVEUoUjYwMF9DUF9NRV9DTlRMLCBjcF9tZSk7CisKKwlkZXZfcHJpdi0+Y3BfcnVubmluZyA9IDA7Cit9CisKK2ludCByNjAwX2NwX2Rpc3BhdGNoX2luZGlyZWN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgZHJtX2J1ZiAqYnVmLCBpbnQgc3RhcnQsIGludCBlbmQpCit7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKKwlSSU5HX0xPQ0FMUzsKKworCWlmIChzdGFydCAhPSBlbmQpIHsKKwkJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAoZGV2X3ByaXYtPmdhcnRfYnVmZmVyc19vZmZzZXQKKwkJCQkJKyBidWYtPm9mZnNldCArIHN0YXJ0KTsKKwkJaW50IGR3b3JkcyA9IChlbmQgLSBzdGFydCArIDMpIC8gc2l6ZW9mKHUzMik7CisKKwkJRFJNX0RFQlVHKCJkd29yZHM6JWRcbiIsIGR3b3Jkcyk7CisJCURSTV9ERUJVRygib2Zmc2V0IDB4JWx4XG4iLCBvZmZzZXQpOworCisKKwkJLyogSW5kaXJlY3QgYnVmZmVyIGRhdGEgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2IGR3b3Jkcy4KKwkJICogcGFkIHRoZSBkYXRhIHdpdGggYSBUeXBlLTIgQ1AgcGFja2V0LgorCQkgKi8KKwkJd2hpbGUgKGR3b3JkcyAmIDB4ZikgeworCQkJdTMyICpkYXRhID0gKHUzMiAqKQorCQkJICAgICgoY2hhciAqKWRldi0+YWdwX2J1ZmZlcl9tYXAtPmhhbmRsZQorCQkJICAgICArIGJ1Zi0+b2Zmc2V0ICsgc3RhcnQpOworCQkJZGF0YVtkd29yZHMrK10gPSBSQURFT05fQ1BfUEFDS0VUMjsKKwkJfQorCisJCS8qIEZpcmUgb2ZmIHRoZSBpbmRpcmVjdCBidWZmZXIgKi8KKwkJQkVHSU5fUklORyg0KTsKKwkJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX0lORElSRUNUX0JVRkZFUiwgMikpOworCQlPVVRfUklORygob2Zmc2V0ICYgMHhmZmZmZmZmYykpOworCQlPVVRfUklORygodXBwZXJfMzJfYml0cyhvZmZzZXQpICYgMHhmZikpOworCQlPVVRfUklORyhkd29yZHMpOworCQlBRFZBTkNFX1JJTkcoKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9taWNyb2NvZGUuaCBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcjYwMF9taWNyb2NvZGUuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NzhjOGI0Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yNjAwX21pY3JvY29kZS5oCkBAIC0wLDAgKzEsMjMyOTcgQEAKKy8qCisgKiBDb3B5cmlnaHQgMjAwOC0yMDA5IEFkdmFuY2VkIE1pY3JvIERldmljZXMsIEluYy4KKyAqIEFsbCBSaWdodHMgUmVzZXJ2ZWQuCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQgT1dORVIoUykgQU5EL09SIElUUyBTVVBQTElFUlMgQkUKKyAqIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04KKyAqIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTgorICogV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKyNpZm5kZWYgUjYwMF9NSUNST0NPREVfSAorI2RlZmluZSBSNjAwX01JQ1JPQ09ERV9ICisKK3N0YXRpYyBjb25zdCBpbnQgTUVfSlVNUF9UQUJMRV9TVEFSVCA9IDE3NjQ7CitzdGF0aWMgY29uc3QgaW50IE1FX0pVTVBfVEFCTEVfRU5EICAgPSAxNzkyOworCisjZGVmaW5lIFBGUF9VQ09ERV9TSVpFIDU3NgorI2RlZmluZSBQTTRfVUNPREVfU0laRSAxNzkyCisjZGVmaW5lIFI3MDBfUEZQX1VDT0RFX1NJWkUgODQ4CisjZGVmaW5lIFI3MDBfUE00X1VDT0RFX1NJWkUgMTM2MAorCitzdGF0aWMgY29uc3QgdTMyIFI2MDBfY3BfbWljcm9jb2RlW11bM10gPSB7CisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODQ2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAxMDAwMCwgMHhjMDI5NDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2MTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWIyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDBmMDAsIDB4MDAyODE2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjExNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMCwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4OGQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMTggfSwKKyAgICB7IDB4MDA0MTIwMDAsIDB4MDA0MDQ4MTEsIDB4MDE5IH0sCisgICAgeyAweDAwNDIyMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4ZTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzEsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDkwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMTE2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIxMWEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyODFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTE0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjExNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZjLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDIyMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCisgICAgeyAweDIwMDAwMDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIxMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjIwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwMzggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDM1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDAzNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA5LCAweDAwNDAxMjJkLCAweDA0NiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwM2ZmZmZjLCAweDAwMjgxMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDAzZSB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDQwMWMxMSwgMHgwNDEgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4N2ZjMDAwMDAsIDB4MDAyODFhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjExYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkwY2M3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODEyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxNDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwNGIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyOTBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmODAwMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2EyYzAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMGUyYiwgMHgwMDAgfSwKKyAgICB7IDB4ZmMwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMWZmZiwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMiwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA2MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwNWYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDVlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwZTJkLCAweDA2MiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwNjIgfSwKKyAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBiLCAweDAwNDAxMjJkLCAweDA2YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAzZmZmZmMsIDB4MDAyODEyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxMjI0LCAweDAwMCB9LAorICAgIHsgMHg3ZmMwMDAwMCwgMHgwMDI4MTYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMxNjI1LCAweDAwMCB9LAorICAgIHsgMHg4MDAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjYTMsIDB4MDAwIH0sCisgICAgeyAweDNmZmZmYzAwLCAweDAwMjkwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDZkIH0sCisgICAgeyAweDAwMDAwMTAwLCAweDAwNDAxYzExLCAweDA3MCB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmMGZmLCAweDAwMjgxYTMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAyOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDE4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgzZmZmZmZmZiwgMHgwMDI4NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyZCwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4MCB9LAorICAgIHsgMHgwMDAwMDAyZSwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwODcgfSwKKyAgICB7IDB4MDAwMDAwMmQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJlLCAweDAwMjAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA4NyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1ZWQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWUxIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOGEgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4YzA0MDM2MjAsIDB4MDkwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA4ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwOGQgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDA0MDBlMmQsIDB4MDhmIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwNDAwZTJkLCAweDA4ZiB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOTUgfSwKKyAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwOWQgfSwKKyAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwOWIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDlhIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwNDAwZTJkLCAweDA5YyB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDQwMGUyZCwgMHgwOWMgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAzZjAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhNCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhNyB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTBlMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDdmLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGRiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDI3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyOGMgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWUzMCwgMHgwMDAgfSwKKyAgICB7IDB4OTk4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxY2U0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwNywgMHgxMjggfSwKKyAgICB7IDB4OWIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHg5YzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzE0NmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDNjMDUsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDEwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDA3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGM1IH0sCisgICAgeyAweDAwZjhmZjA4LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg5ODAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwZDYgfSwKKyAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGEwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwZDQgfSwKKyAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwY2YgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBjZSB9LAorICAgIHsgMHgwMDAwM2YwMCwgMHgwMDQwMGMxMSwgMHgwZDAgfSwKKyAgICB7IDB4MDAwMDFmMDAsIDB4MDA0MDBjMTEsIDB4MGQwIH0sCisgICAgeyAweDAwMDAwZjAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDM4MDAwOSwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4M2YwMDAwMDAsIDB4MDAyODBlMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDQ5NGEyMywgMHgwZDYgfSwKKyAgICB7IDB4MDAzODBmMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDY4MDAwMDA3LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMjAyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMGZmMDAwMCwgMHgwMDI4NGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJlLCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDA4MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGUzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVlNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwZTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWVhIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIyMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAxMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwZWYsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDBmMSB9LAorICAgIHsgMHgwMDAwMDAwYiwgMHgwMDIxMDIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGYxIH0sCisgICAgeyAweDAwMDAwNDAwLCAweDAwMjkyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBmNiB9LAorICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMDQgfSwKKyAgICB7IDB4MDAwMGEzMGYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEzLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MGZkIH0sCisgICAgeyAweGZmZmZmZmZmLCAweDAwNDA0ODExLCAweDEwNCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwNDA0ODExLCAweDEwNCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTAzIH0sCisgICAgeyAweDAwMDAwMGZmLCAweDAwNDA0ODExLCAweDEwNCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMmM0MDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMGIgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE5LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIyNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzA0MjRhMjAsIDB4MTBkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwMTAxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDExNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzEyMjQsIDB4MTEwIH0sCisgICAgeyAweGZmYmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTI3IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMjBlMzAsIDB4MDAwIH0sCisgICAgeyAweGZjMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDdmOGZmMDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDA4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjEzIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwNDA0YzExLCAweDEyZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MmZlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxOWYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTUxIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODA2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjEwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MTQ2MSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3NDE4ODIsIDB4MmE0IH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJjOSB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTM4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MmZlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxOWYgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxNTEgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzA2ODFhMjAsIDB4MmE0IH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJjOSB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTQ5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMDBhMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxN2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MThkIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDJjMDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMWUyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MDQ4ZWIsIDB4MTg5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhNCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHg0MDMzMDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAzMDI0MDksIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MjhjIH0sCisgICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTczIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxNmYgfSwKKyAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDE4NCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzgwNDJhLCAweDJlNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE2NSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAyMTAsIDB4MDA2MDA0MTEsIDB4MmZlIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxODEgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4NDYwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MTlmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE4OCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwODExYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxZTMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMiwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmJmZjA5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDFmZmYsIDB4MDAyOTRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjBlOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDEwMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDA2MjFlMjgsIDB4MTI4IH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwODIyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAyYzAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDA2MDBlMmQsIDB4MWFhIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwNjAwZTJkLCAweDFhYSB9LAorICAgIHsgMHgwMDAwYzAwOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDFhNiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDM5MDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIwLCAweDAwMjAyZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNiMGQ2MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjI0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMTAwMCwgMHgwMDYwMDQxMSwgMHgyZmUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDE5ZiB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDIxMDYyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTksIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjAyYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MjIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEyNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MjYyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFjZCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwODEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwODAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxYzkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWQ2IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMxZTI3LCAweDFjNSB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyODBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjgyYTJhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxYmUgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMzA0YTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzAxZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFkNiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMWUyNywgMHgxZDIgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjYwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMTgxMSwgMHgyYTQgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZTUgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjgsIDB4MDAwIH0sCisgICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjMsIDB4MDAwIH0sCisgICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzMxNTAzLCAweDFmMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MzE1MjQsIDB4MWYyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmQxNGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjAwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDI0MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MTMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYjE0MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwOTAxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MmZlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxOWYgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjk0YTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc0MTQ2NSwgMHgyYTQgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmM5IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjA2IH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxZmYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDQwZiwgMHgyMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWIyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjNSB9LAorICAgIHsgMHgwMDAwMDIxMCwgMHgwMDYwMDQxMSwgMHgyZmUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MThkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE4OSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MjhjIH0sCisgICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyMWYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MjFjIH0sCisgICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDJlNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWIyIH0sCisgICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIxMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDIzNSB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwODAxMDEsIDB4MDAyOTIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgyM2EgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwNjAwNDExLCAweDJmZSB9LAorICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MTlmIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MjY1IH0sCisgICAgeyAweDAwMDAwMDFkLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MjUzIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDFjMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI0OCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA4YzAwMDAwLCAweDI0YiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjExZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MWM0NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjUwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDhjMDAwMDAsIDB4MjUzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYWEgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNWIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwNDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI1YSB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDQwNDgxMSwgMHgyNWYgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDA0MDQ4MTEsIDB4MjVmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDQ0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNWUgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA0MDQ4MTEsIDB4MjVmIH0sCisgICAgeyAweDAwMDAwMDE5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJkMiB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjNmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwODgxYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4MjhjIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzQsIDB4MDAyMDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNzAwMCwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMzLCAweDAwMjAxYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDI3YiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM0LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2OTFjZTIsIDB4MTI4IH0sCisgICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyODYgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwNDAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHhjMDIyMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzIsIDB4MDAyMDM2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMxLCAweGMwNDAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGExMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2UzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2U0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGEzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMWQwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDFkMDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmEsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFkLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MmM1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJjMiB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFkLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MmMyIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyYzUgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGUxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMmMwMDAwMCwgMHgyYzUgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZjMDAwMDAsIDB4MmM1IH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDJjMDAwMDAsIDB4MmM1IH0sCisgICAgeyAweDAwMDAwMDJhLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2YzAwMDAwLCAweDJjNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1ZWQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MjllIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJjNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyOWUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWU0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJjNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyOTAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmM3IH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDgwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2ExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzA4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzgwOGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDg0MSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzMwOGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MzAxIH0sCisgICAgeyAweGZmZmZmZmVmLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGY4ZTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDk3MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4OTcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweGMwNDg0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDQwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHg0MDMwNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4YzAzMDRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMwYTIyLCAweDMzNCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzNkIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNTEgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM1ZSB9LAorICAgIHsgMHgwMDAwMjEwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNTUgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwNDA0ODExLCAweDM0OSB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzQ5IH0sCisgICAgeyAweDAwMDAyMTA0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzNSwgMHgwMDIwMzYyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwNDksIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM2MCB9LAorICAgIHsgMHgwMDAwMDAzNSwgMHgwMDgwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4YzAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE1LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzNzYgfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM4MCB9LAorICAgIHsgMHgwMDAwMDAyMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzhjIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOTggfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM5OCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzlhIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOWYgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwODAwMDAwMCwgMHgwMDI5MGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweGMwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA4MDAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4YzAyMjE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGE0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZlLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzgyIH0sCisgICAgeyAweDAwMDAyMTBlLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzhlIH0sCisgICAgeyAweDAwMDAyMTA4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNWUgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDNiOSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjE0IH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzYWIgfSwKKyAgICB7IDB4MDAwMDIxMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4YmFiZWNhZmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNzAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBhLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2JlIH0sCisgICAgeyAweDhjMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODAwMDAwMDAsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDQwMDAwMDAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2MTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzY2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDE4MDAsIDB4M2NmIH0sCisgICAgeyAweDAwMDAzZmZmLCAweGMwMjgxYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNiwgMHg2MTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZDIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDFjMDAsIDB4M2Q1IH0sCisgICAgeyAweDAwMDAzZmZmLCAweGMwMjgxZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNywgMHg2MTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjBjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0OTQ4ZTgsIDB4MDAwIH0sCisgICAgeyAweGE1ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4M2ZkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweGMwMjEwMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzZTIgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDQ4MTIyMCwgMHgzZWEgfSwKKyAgICB7IDB4YTc4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHgzZmQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDg4MywgMHgwMDAgfSwKKyAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4M2ZkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHhhOTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGMwMDAsIDB4MDA0MDBjMTEsIDB4M2U1IH0sCisgICAgeyAweGFiODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjhlMCwgMHgwMDQwMGMxMSwgMHgzZTUgfSwKKyAgICB7IDB4YWQ4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmODgwLCAweDAwNDAwYzExLCAweDNlNSB9LAorICAgIHsgMHhiMzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGYzZmMsIDB4MDA0MDBjMTEsIDB4M2U1IH0sCisgICAgeyAweGFmODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDQwMGMxMSwgMHgzZTUgfSwKKyAgICB7IDB4YjE4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmMDAwLCAweDAwNDAwYzExLCAweDNlNSB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg0MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWQwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDE4MjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAxOGEwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMThjMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDE4ZjhlMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAxOGY4ODAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMThlMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDE4ZjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAxOGYzZmMsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDg2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4ODUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0YzAyLCAweDQyZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDEwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDNjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAyMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyODBhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NDQgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNCwgMHg2MTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDRkIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NDQ5IH0sCisgICAgeyAweDllMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NDRjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjgyNGYwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDI4MGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ1NCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDRlMDAwMDAsIDB4NDZkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ3YSB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDU5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMmUwMDAwMCwgMHg0NmQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDdhIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NWUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ2ZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0N2EgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ2MyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDZkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ3YSB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDY4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNmUwMDAwMCwgMHg0NmQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDdhIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NmQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA4ZTAwMDAwLCAweDQ2ZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0N2EgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTBhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDQ3NyB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDgwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0YzA4LCAweDQzYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDQwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NDhhIH0sCisgICAgeyAweDAwMDQwMDAwLCAweGMwNDk0YTIwLCAweDQ4YiB9LAorICAgIHsgMHhmZmZiZmZmZiwgMHhjMDI4NGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDQ5NyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NDkzIH0sCisgICAgeyAweGEwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2YiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIxMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGFlIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NGE5IH0sCisgICAgeyAweDllMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NGFjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRiMiB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg2MTQgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRiOSB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGJiIH0sCisgICAgeyAweDAwMDAyMTgwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzMzZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NGViIH0sCisgICAgeyAweDAwMDAwMDM1LCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgxOGUwMGMxMSwgMHg0ZGEgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDhjMDQ4MDAsIDB4NGNlIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM2LCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGM4MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTEgfSwKKyAgICB7IDB4MDAwMDAwMzUsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM2LCAweGMwNDAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMzA0YSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZTAwMDAwMDAsIDB4YzA0ODRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0ZjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDBmZiwgMHgwMDI4MGUzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDRmNiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMyLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJkLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyZSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZTAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJhLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMWZmZiwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHhmMWZmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4YzAyMjBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMzLCAweDQwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHg4NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWY0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4OWQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDQwMjE0YTIwLCAweDAwMCB9LAorICAgIHsgMHg5NjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTE2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIyMjIzLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI3LCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIxMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjgsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMTRhOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjExYTI0LCAweDAwMCB9LAorICAgIHsgMHgxMDAwMDAwMCwgMHgwMDI4MWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4ZWZmZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDkzOGNlLCAweDYwMiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMzAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTQxIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDIwMDAwLCAweDAwMjk0YTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NDkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU1YiB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTQ5IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTViIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NGQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU1YiB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTU5IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NTU0IH0sCisgICAgeyAweDllMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NTU3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAxYzEwLCAweDU1YiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDU1ZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU2ZCB9LAorICAgIHsgMHgwMDAwYTJiNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYjYsIDB4MDA2MDQ0MTEsIDB4NjE0IH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYzQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1NmIgfSwKKyAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJkMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1N2QgfSwKKyAgICB7IDB4MDAwMGEyYmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmJhLCAweDAwNjA0NDExLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmM1LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NTdiIH0sCisgICAgeyAweDAwMDBhMmQyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NThkIH0sCisgICAgeyAweDAwMDBhMmJmLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiZSwgMHgwMDYwNDQxMSwgMHg2MTQgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJjNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDU4YiB9LAorICAgIHsgMHgwMDAwYTJkMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYzMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmMyLCAweDAwNjA0NDExLCAweDYxNCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmM3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NTk5IH0sCisgICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHg4NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAzMDRhLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMTAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NTlmIH0sCisgICAgeyAweGE0MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NWE0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDViNyB9LAorICAgIHsgMHgwMDAwMTAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzQsIDB4MDAyMDM2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDViYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YTQgfSwKKyAgICB7IDB4OTgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg1YmIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODkwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhmZjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2EsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVlMSB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzVlIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMTAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDA5ODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2MTQgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNGMxMSwgMHg1ZGMgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjkxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZiLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjkxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmY3LCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM1ZSB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDEwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDE4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwZmZmZmZmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjE0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MTMgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDA0MDRjMTEsIDB4NWY5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgzOGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwMTIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjgsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAzMDEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMDY0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg2MTIgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxMjIyLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTEwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI3LCAweDAwNDAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjE0IH0sCisgICAgeyAweDlmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NjE3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDEwMDAsIDB4MDA2MDA0MTEsIDB4MmZlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxOWYgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI5LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJhLCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAxMzMwNGVmLCAweDA1OWIwMjM5LCAweDAwMCB9LAorICAgIHsgMHgwMWIwMDE1OSwgMHgwNDI1MDU5YiwgMHgwMDAgfSwKKyAgICB7IDB4MDIxMjAxZjYsIDB4MDIzOTAxNDIsIDB4MDAwIH0sCisgICAgeyAweDAyMTAwMjJlLCAweDAyODkwMjJhLCAweDAwMCB9LAorICAgIHsgMHgwM2MyMDU5YiwgMHgwNTliMDU5YiwgMHgwMDAgfSwKKyAgICB7IDB4MDVjZDA1Y2UsIDB4MDMwODA1OWIsIDB4MDAwIH0sCisgICAgeyAweDA1OWIwNWEwLCAweDAzMDkwMzI5LCAweDAwMCB9LAorICAgIHsgMHgwMzEzMDI2YiwgMHgwMzJiMDMxZCwgMHgwMDAgfSwKKyAgICB7IDB4MDU5YjA1OWIsIDB4MDU5YjA1OWIsIDB4MDAwIH0sCisgICAgeyAweDA1OWIwNTJjLCAweDA1OWIwNTliLCAweDAwMCB9LAorICAgIHsgMHgwM2E1MDU5YiwgMHgwNGEyMDMyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDQ4MTA0MzMsIDB4MDQyMzA1OWIsIDB4MDAwIH0sCisgICAgeyAweDA0YmIwNGVkLCAweDA0MjcwNGM4LCAweDAwMCB9LAorICAgIHsgMHgwNDMzMDRmNCwgMHgwMzNhMDM2NSwgMHgwMDAgfSwKKyAgICB7IDB4MDU5YjA1OWIsIDB4MDU5YjA1OWIsIDB4MDAwIH0sCisgICAgeyAweDA1OWIwNTliLCAweDA1OWIwNTliLCAweDAwMCB9LAorICAgIHsgMHgwNTliMDU5YiwgMHgwNWI5MDVhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDU5YjA1OWIsIDB4MDAwNzA1OWIsIDB4MDAwIH0sCisgICAgeyAweDA1OWIwNTliLCAweDA1OWIwNTliLCAweDAwMCB9LAorICAgIHsgMHgwNTliMDU5YiwgMHgwNTliMDU5YiwgMHgwMDAgfSwKKyAgICB7IDB4MDNlMzAzZDgsIDB4MDNmMzAzZjEsIDB4MDAwIH0sCisgICAgeyAweDAzZjkwM2Y1LCAweDAzZjcwM2ZiLCAweDAwMCB9LAorICAgIHsgMHgwNDA3MDQwMywgMHgwNDBmMDQwYiwgMHgwMDAgfSwKKyAgICB7IDB4MDQxNzA0MTMsIDB4MDQxZjA0MWIsIDB4MDAwIH0sCisgICAgeyAweDA1OWIwNTliLCAweDA1OWIwNTliLCAweDAwMCB9LAorICAgIHsgMHgwNTliMDU5YiwgMHgwNTliMDU5YiwgMHgwMDAgfSwKKyAgICB7IDB4MDU5YjA1OWIsIDB4MDU5YjA1OWIsIDB4MDAwIH0sCisgICAgeyAweDAwMDIwNjAwLCAweDA2MTkwMDA2LCAweDAwMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBSNjAwX3BmcF9taWNyb2NvZGVbXSA9IHsKKzB4ZDQwMDcxLAorMHhkNDAwNzIsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweDgwMDAwMywKKzB4Y2EwNDAwLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4YzQxODM4LAorMHhjYTI0MDAsCisweGNhMjgwMCwKKzB4OTU4MWE4LAorMHhjNDFjM2EsCisweGMzYzAwMCwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweDdjNzQ0YiwKKzB4YzIwMDA1LAorMHg5OWMwMDAsCisweGM0MWMzYSwKKzB4N2M3NDRjLAorMHhjMGZmZjAsCisweDA0MmMwNCwKKzB4MzA5MDAyLAorMHg3ZDI1MDAsCisweDM1MTQwMiwKKzB4N2QzNTBiLAorMHgyNTU0MDMsCisweDdjZDU4MCwKKzB4MjU5YzAzLAorMHg5NWMwMDQsCisweGQ1MDAxYiwKKzB4N2VkZGMxLAorMHg3ZDlkODAsCisweGQ2ODAxYiwKKzB4ZDU4MDFiLAorMHhkNDQwMWUsCisweGQ1NDAxZSwKKzB4ZDY0MDFlLAorMHhkNjgwMWUsCisweGQ0ODAxZSwKKzB4ZDRjMDFlLAorMHg5NzgzZDQsCisweGQ1YzAxZSwKKzB4Y2EwODAwLAorMHg4MDAwMWIsCisweGNhMGMwMCwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweDgwMDAwZCwKKzB4YzQxODM4LAorMHhlNDAxM2UsCisweGQ0MDAxZSwKKzB4ODAwMDBkLAorMHhjNDE4MzgsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGU0MDEzZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4Y2ExODAwLAorMHhkNDQwMWUsCisweGQ1ODAxZSwKKzB4ODAwMDU0LAorMHhkNDAwNzMsCisweGQ0NDAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4ZDQ4MDE5LAorMHhkNGMwMTgsCisweGQ1MDAxNywKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweGQ1MDAxZSwKKzB4ZTIwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjYTA4MDAsCisweGQ0ODA2MCwKKzB4ZDQ0MDFlLAorMHg4MDAwMDIsCisweGQ0ODAxZSwKKzB4Y2EwODAwLAorMHhkNDgwNjEsCisweGQ0NDAxZSwKKzB4ODAwMDAyLAorMHhkNDgwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHhkNDQwMWUsCisweGQ0ODAxNiwKKzB4ZDRjMDE2LAorMHhkNDgwMWUsCisweDgwMDFiOSwKKzB4ZDRjMDFlLAorMHhjNjA4M2UsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHg5NDgwMDQsCisweGNhMTQwMCwKKzB4ZTQyMGYzLAorMHhkNDIwMTMsCisweGQ1NjA2NSwKKzB4ZDRlMDFjLAorMHhkNTIwMWMsCisweGQ1NjAxYywKKzB4ODAwMDAyLAorMHgwNjIwMDEsCisweGM2MDgzZSwKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweDk0ODNmNywKKzB4Y2ExNDAwLAorMHhlNDIwZjMsCisweDgwMDA3YSwKKzB4ZDQyMDEzLAorMHhjNjA4M2UsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHg5ODgzZWYsCisweGNhMTQwMCwKKzB4ZDQwMDY0LAorMHg4MDAwOGUsCisweDAwMDAwMCwKKzB4YzQxNDMyLAorMHhjNjE4M2UsCisweGM0MDgyZiwKKzB4OTU0MDA1LAorMHhjNDBjMzAsCisweGQ0NDAxZSwKKzB4ODAwMDAyLAorMHhlZTAwMWUsCisweDk1ODNmNSwKKzB4YzQxMDMxLAorMHhkNDQwMzMsCisweGQ1MjA2NSwKKzB4ZDRhMDFjLAorMHhkNGUwMWMsCisweGQ1MjAxYywKKzB4ZDQwMDczLAorMHhlNDAxNWUsCisweGQ0MDAxZSwKKzB4ODAwMWI5LAorMHgwNjIwMDEsCisweDBhMjAwMSwKKzB4ZDYwMDc0LAorMHhjNDA4MzYsCisweGM2MTA0MCwKKzB4OTg4MDA3LAorMHhjYzM4MzUsCisweDk1MDEwZiwKKzB4ZDQwMDFmLAorMHhkNDYwNjIsCisweDgwMDAwMiwKKzB4ZDQyMDYyLAorMHhjYzE0MzMsCisweDg0MDFiYywKKzB4ZDQwMDcwLAorMHhkNTQwMWUsCisweDgwMDAwMiwKKzB4ZWUwMDFlLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4ZDRjMDFhLAorMHg4NDAxYmMsCisweGQ1MDAxYSwKKzB4Y2MwNDQzLAorMHgzNTEwMWYsCisweDJjOTQwMSwKKzB4N2QwOThiLAorMHg5ODQwMDUsCisweDdkMTVjYiwKKzB4ZDQwMDFhLAorMHg4MDAxYjksCisweGQ0MDA2ZCwKKzB4MzQ0NDAxLAorMHhjYzBjNDQsCisweDk4NDAzYSwKKzB4Y2MyYzQ2LAorMHg5NTgwMDQsCisweGNjMDQ0NSwKKzB4ODAwMWI5LAorMHhkNDAwMWEsCisweGQ0YzAxYSwKKzB4MjgyODAxLAorMHg4NDAwZjMsCisweGNjMTAwMywKKzB4OTg4MDFiLAorMHgwNDM4MGMsCisweDg0MDBmMywKKzB4Y2MxMDAzLAorMHg5ODgwMTcsCisweDA0MzgwOCwKKzB4ODQwMGYzLAorMHhjYzEwMDMsCisweDk4ODAxMywKKzB4MDQzODA0LAorMHg4NDAwZjMsCisweGNjMTAwMywKKzB4OTg4MDE0LAorMHhjYzEwNDcsCisweDlhODAwOSwKKzB4Y2MxNDQ4LAorMHg5ODQwZGEsCisweGQ0MDA2ZCwKKzB4Y2MxODQ0LAorMHhkNTAwMWEsCisweGQ1NDAxYSwKKzB4ODAwMGNjLAorMHhkNTgwMWEsCisweDk2YzBkMywKKzB4ZDQwMDZkLAorMHg4MDAxYjksCisweGQ0MDA2ZSwKKzB4OWFjMDAzLAorMHhkNDAwNmQsCisweGQ0MDA2ZSwKKzB4ODAwMDAyLAorMHhlYzAwN2YsCisweDlhYzBjYSwKKzB4ZDQwMDZkLAorMHg4MDAxYjksCisweGQ0MDA2ZSwKKzB4Y2MxNDAzLAorMHhjYzE4MDMsCisweGNjMWMwMywKKzB4N2Q5MTAzLAorMHg3ZGQ1ODMsCisweDdkMTkwYywKKzB4MzVjYzFmLAorMHgzNTcwMWYsCisweDdjZjBjYiwKKzB4N2NkMDhiLAorMHg4ODAwMDAsCisweDdlOGU4YiwKKzB4OTVjMDA0LAorMHhkNDAwNmUsCisweDgwMDFiOSwKKzB4ZDQwMDFhLAorMHhkNGMwMWEsCisweGNjMDgwMywKKzB4Y2MwYzAzLAorMHhjYzEwMDMsCisweGNjMTQwMywKKzB4Y2MxODAzLAorMHhjYzFjMDMsCisweGNjMjQwMywKKzB4Y2MyODAzLAorMHgzNWM0MWYsCisweDM2YjAxZiwKKzB4N2M3MDRiLAorMHgzNGYwMWYsCisweDdjNzA0YiwKKzB4MzU3MDFmLAorMHg3YzcwNGIsCisweDdkODg4MSwKKzB4N2RjY2MxLAorMHg3ZTUxMDEsCisweDdlOTU0MSwKKzB4N2M5MDgyLAorMHg3Y2Q0YzIsCisweDdjODQ4YiwKKzB4OWFjMDAzLAorMHg3YzhjOGIsCisweDJjODgwMSwKKzB4OTg4MDljLAorMHhkNDAwNmQsCisweDk4NDA5YSwKKzB4ZDQwMDZlLAorMHhjYzA4NDcsCisweGNjMGM0OCwKKzB4Y2MxMDQ0LAorMHhkNDgwMWEsCisweGQ0YzAxYSwKKzB4ODAwMTA0LAorMHhkNTAwMWEsCisweGNjMDgzMiwKKzB4ZDQwMDMyLAorMHg5NDgyZDgsCisweGNhMGMwMCwKKzB4ZDQ0MDFlLAorMHg4MDAwMDIsCisweGQ0MDAxZSwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweGQ0NDAxZSwKKzB4Y2ExNDAwLAorMHhkNDgwMWUsCisweGQ0YzAxZSwKKzB4ZDUwMDFlLAorMHhkNTQwMWUsCisweGQ1NDAzNCwKKzB4ODAwMDAyLAorMHhlZTAwMWUsCisweDI4MDQwNCwKKzB4ZTIwMDFhLAorMHhlMjAwMWEsCisweGQ0NDAxYSwKKzB4Y2EzODAwLAorMHhjYzA4MDMsCisweGNjMGMwMywKKzB4Y2MwYzAzLAorMHhjYzBjMDMsCisweDk4ODJiYywKKzB4MDAwMDAwLAorMHg4NDAxYmMsCisweGQ3ODA2ZiwKKzB4ODAwMDAyLAorMHhlZTAwMWYsCisweGNhMDQwMCwKKzB4YzJmZjAwLAorMHhjYzA4MzQsCisweGMxM2ZmZiwKKzB4N2M3NGNiLAorMHg3Y2M5MGIsCisweDdkMDEwZiwKKzB4OTkwMmFmLAorMHg3YzczOGIsCisweDg0MDFiYywKKzB4ZDc4MDZmLAorMHg4MDAwMDIsCisweGVlMDAxZiwKKzB4Y2EwODAwLAorMHgyODE5MDAsCisweDdkODk4YiwKKzB4OTU4MDE0LAorMHgyODE0MDQsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHhjYTFjMDAsCisweGNhMjQwMCwKKzB4ZTIwMDFmLAorMHhkNGMwMWEsCisweGQ1MDAxYSwKKzB4ZDU0MDFhLAorMHhjYzE4MDMsCisweGNjMmMwMywKKzB4Y2MyYzAzLAorMHhjYzJjMDMsCisweDdkYTU4YiwKKzB4N2Q5YzQ3LAorMHg5ODQyOTYsCisweDAwMDAwMCwKKzB4ODAwMTY0LAorMHhkNGMwMWEsCisweGQ0NDAxZSwKKzB4ZDQ4MDFlLAorMHg4MDAwMDIsCisweGVlMDAxZSwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhlNDAxM2UsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGNhMDgwMCwKKzB4MjQ4YzA2LAorMHgwY2NjMDYsCisweDk4YzAwNiwKKzB4Y2MxMDQ5LAorMHg5OTAwMDQsCisweGQ0MDA3MSwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZDQ4MDFlLAorMHg4MDAwMDIsCisweGVlMDAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweDM0ZDAxOCwKKzB4MjUxMDAxLAorMHg5NTAwMWYsCisweGMxN2ZmZiwKKzB4Y2ExMDAwLAorMHhjYTE0MDAsCisweGNhMTgwMCwKKzB4ZDQ4MDFkLAorMHhkNGMwMWQsCisweDdkYjE4YiwKKzB4YzE0MjAyLAorMHhjMmMwMDEsCisweGQ1ODAxZCwKKzB4MzRkYzBlLAorMHg3ZDVkNGMsCisweDdmNzM0YywKKzB4ZDc0MDFlLAorMHhkNTAwMWUsCisweGQ1NDAxZSwKKzB4YzE0MjAwLAorMHhjMmMwMDAsCisweDA5OWMwMSwKKzB4MzFkYzEwLAorMHg3ZjVmNGMsCisweDdmNzM0YywKKzB4N2Q4MzgwLAorMHhkNTgwNmYsCisweGQ1ODA2NiwKKzB4ZDc0MDFlLAorMHhlYzAwNWUsCisweGM4MjQwMiwKKzB4ODAwMWI5LAorMHhkNjAwNzQsCisweGQ0NDAxZSwKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweDgwMDAwMiwKKzB4ZWUwMDFlLAorMHg4MDAwMDIsCisweGVlMDAxZiwKKzB4ZDQwMDFmLAorMHg4MDAwMDIsCisweGQ0MDAxZiwKKzB4ZDQwMDFmLAorMHg4ODAwMDAsCisweGQ0MDAxZiwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAxMDE3NCwKKzB4MDIwMTdiLAorMHgwMzAwOTAsCisweDA0MDA4MCwKKzB4MDUwMDA1LAorMHgwNjAwNDAsCisweDA3MDAzMywKKzB4MDgwMTJmLAorMHgwOTAwNDcsCisweDBhMDAzNywKKzB4MTAwMWI3LAorMHgxNzAwYTQsCisweDIyMDEzZCwKKzB4MjMwMTRjLAorMHgyMDAwYjUsCisweDI0MDEyOCwKKzB4MjcwMDRlLAorMHgyODAwNmIsCisweDJhMDA2MSwKKzB4MmIwMDUzLAorMHgyZjAwNjYsCisweDMyMDA4OCwKKzB4MzQwMTgyLAorMHgzYzAxNTksCisweDNmMDA3MywKKzB4NDEwMThmLAorMHg0NDAxMzEsCisweDU1MDE3NiwKKzB4NTYwMTdkLAorMHg2MDAwMGMsCisweDYxMDAzNSwKKzB4NjIwMDM5LAorMHg2MzAwMzksCisweDY0MDAzOSwKKzB4NjUwMDM5LAorMHg2NjAwMzksCisweDY3MDAzOSwKKzB4NjgwMDNiLAorMHg2OTAwNDIsCisweDZhMDA0OSwKKzB4NmIwMDQ5LAorMHg2YzAwNDksCisweDZkMDA0OSwKKzB4NmUwMDQ5LAorMHg2ZjAwNDksCisweDczMDFiNywKKzB4MDAwMDA3LAorMHgwMDAwMDcsCisweDAwMDAwNywKKzB4MDAwMDA3LAorMHgwMDAwMDcsCisweDAwMDAwNywKKzB4MDAwMDA3LAorMHgwMDAwMDcsCisweDAwMDAwNywKKzB4MDAwMDA3LAorMHgwMDAwMDcsCisweDAwMDAwNywKKzB4MDAwMDA3LAorMHgwMDAwMDcsCisweDAwMDAwNywKKzB4MDAwMDA3LAorMHgwMDAwMDcsCisweDAwMDAwNywKK307CisKK3N0YXRpYyBjb25zdCB1MzIgUlY2MTBfY3BfbWljcm9jb2RlW11bM10gPSB7CisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODQ2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAxMDAwMCwgMHhjMDI5NDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjMxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0NSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDBmMDAsIDB4MDAyODE2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjExNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4OGQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMTggfSwKKyAgICB7IDB4MDA0MTIwMDAsIDB4MDA0MDQ4MTEsIDB4MDE5IH0sCisgICAgeyAweDAwNDIyMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4ZTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjgsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDkwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMTE2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIxMWEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyODFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTE0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjExNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZjLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDIyMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCisgICAgeyAweDIwMDAwMDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIxMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjIwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwMzggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDM1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDAzNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA5LCAweDAwNDAxMjJkLCAweDA0NiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwM2ZmZmZjLCAweDAwMjgxMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDAzZSB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDQwMWMxMSwgMHgwNDEgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4N2ZjMDAwMDAsIDB4MDAyODFhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjExYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkwY2M3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODEyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxNDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwNGIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyOTBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBlLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmODAwMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2EyYzAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMGUyYiwgMHgwMDAgfSwKKyAgICB7IDB4ZmMwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMWZmZiwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA2MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwNWYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDVlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwZTJkLCAweDA2MiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwNjIgfSwKKyAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBiLCAweDAwNDAxMjJkLCAweDA2YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAzZmZmZmMsIDB4MDAyODEyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxMjI0LCAweDAwMCB9LAorICAgIHsgMHg3ZmMwMDAwMCwgMHgwMDI4MTYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMxNjI1LCAweDAwMCB9LAorICAgIHsgMHg4MDAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjYTMsIDB4MDAwIH0sCisgICAgeyAweDNmZmZmYzAwLCAweDAwMjkwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDZkIH0sCisgICAgeyAweDAwMDAwMTAwLCAweDAwNDAxYzExLCAweDA3MCB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmMGZmLCAweDAwMjgxYTMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAyOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDE4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgzZmZmZmZmZiwgMHgwMDI4NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyOTE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4MyB9LAorICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4NCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwOGEgfSwKKyAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA4YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NjggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjVjIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOGQgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4YzA0MDM2MjAsIDB4MDkzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA5MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwOTAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDA0MDBlMmQsIDB4MDkyIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwNDAwZTJkLCAweDA5MiB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOTggfSwKKyAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwYTAgfSwKKyAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwOWUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDlkIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwNDAwZTJkLCAweDA5ZiB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDQwMGUyZCwgMHgwOWYgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAzZjAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhNyB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhYSB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTBlMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDdmLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGUxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDI3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDBiMyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWUzMCwgMHgwMDAgfSwKKyAgICB7IDB4OTk4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxY2U0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwNywgMHgxMmYgfSwKKyAgICB7IDB4OWIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHg5YzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzE0NmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDNjMDUsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDEwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDA3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGNiIH0sCisgICAgeyAweDAwZjhmZjA4LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg5ODAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwZGMgfSwKKyAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGEwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwZGEgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZDUgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBkNCB9LAorICAgIHsgMHgwMDAwM2YwMCwgMHgwMDQwMGMxMSwgMHgwZDYgfSwKKyAgICB7IDB4MDAwMDFmMDAsIDB4MDA0MDBjMTEsIDB4MGQ2IH0sCisgICAgeyAweDAwMDAwZjAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDM4MDAwOSwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4M2YwMDAwMDAsIDB4MDAyODBlMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDQ5NGEyMywgMHgwZGMgfSwKKyAgICB7IDB4MDAzODBmMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDY4MDAwMDA3LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMjAyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMGZmMDAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwODAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI3LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwODMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBlYSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MGViIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY2NSB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMjBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMTAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjA2OCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTBjMDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGVmLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjA2OCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwZjggfSwKKyAgICB7IDB4MDAwMDAwMGIsIDB4MDAyMTAyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBmOCB9LAorICAgIHsgMHgwMDAwMDQwMCwgMHgwMDI5MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwZmQgfSwKKyAgICB7IDB4MDAwMGEzMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTBiIH0sCisgICAgeyAweDAwMDBhMzBmLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwNCB9LAorICAgIHsgMHhmZmZmZmZmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwNyB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwYSB9LAorICAgIHsgMHgwMDAwMDBmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDJjNDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTEyIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMjRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwNDI0YTIwLCAweDExNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDEwMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxMWIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMxMjI0LCAweDExNyB9LAorICAgIHsgMHhmZmJmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDEyZSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjIwZTMwLCAweDAwMCB9LAorICAgIHsgMHhmYzAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMGUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDA3ZjhmZjA4LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDY4YyB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNGMxMSwgMHgxMzUgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MTNjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTYwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODA2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjEwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MTQ2MSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3NDE4ODIsIDB4MmJiIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTQ3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxNjAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzA2ODFhMjAsIDB4MmJiIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTU4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMDBhMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxOGYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWEwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDJjMDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMWUyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MDQ4ZWIsIDB4MTljIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiYiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHg0MDMzMDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAzMDI0MDksIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgxODEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDE4NiB9LAorICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDE4NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzA2MjEsIDB4MTgyIH0sCisgICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHgxOTcgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc4MDQyYSwgMHgyZmIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDksIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNzQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMjEwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTk0IH0sCisgICAgeyAweDAwMDAwMDE1LCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4M2Y4MDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDQ2MDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxOWIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgxNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDgxMWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMWUzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhmZmZiZmYwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxZmZmLCAweDAwMjk0YTI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAxMDAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwNjIxZTI4LCAweDEyZiB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDgyMjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMmMwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE1LCAweDAwNjAwZTJkLCAweDFiZCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwMGUyZCwgMHgxYmQgfSwKKyAgICB7IDB4MDAwMGMwMDgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxYjkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAorICAgIHsgMHgzOTAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwMmUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYjBkNjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjI0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDEwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMTA2MmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEzLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODIyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjYyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMjYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjI2MjksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZTAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDgxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDgwLCAweDAwMjAxYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWRjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFlOSB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMWUyNywgMHgxZDggfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjgwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDI4MmEyYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzA2MjEsIDB4MWQxIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDMwNGEyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMwMWUyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxZTkgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzFlMjcsIDB4MWU1IH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjYxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDE4MTEsIDB4MmJiIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWY4IH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxNjI4LCAweDAwMCB9LAorICAgIHsgMHhmZmZmMDAwMCwgMHgwMDI4MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFhMjksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxNjIzLCAweDAwMCB9LAorICAgIHsgMHhmZmZmMDAwMCwgMHgwMDI4MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDczMTUwMywgMHgyMDUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzMxNTI0LCAweDIwNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMTRjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDIwMDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAyNDA0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjhjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmIxNDA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDkwMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDI5NGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTFhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3NDE0NjUsIDB4MmJiIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDIxOSB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjEyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDA0MGYsIDB4MjEzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYzMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDUgfSwKKyAgICB7IDB4MDAwMDAyMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFhMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxOWMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmJiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAorICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgyMzIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDIzNiB9LAorICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDIzNiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgyMzMgfSwKKyAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MmZiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MzEgfSwKKyAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDQwMjEwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MjRjIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDA4MDEwMSwgMHgwMDI5MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMzBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDI1MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDNmODAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyN2MgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjExZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyNmEgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MWMyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjVmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDhjMDAwMDAsIDB4MjYyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQxYzQ3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNjcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwOGMwMDAwMCwgMHgyNmEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJjMSB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjA0NCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjcxIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNDA0ODExLCAweDI3NiB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDQwNDgxMSwgMHgyNzYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwNDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3NSB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDQwNDgxMSwgMHgyNzYgfSwKKyAgICB7IDB4MDAwMDAwMTksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmU5IH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyNTYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzA4ODFhMjAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYzMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHgyYTMgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3MDAwLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNlNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmEsIDB4MDAyMDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjIxYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4MjkyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjAxODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDY5MWNlMiwgMHgxMmYgfSwKKyAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDI5ZCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDA0MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweGMwMjIwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMzYyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjgsIDB4YzA0MDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YTEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYzFjZTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYzFjZTQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmQxZDA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMWQwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmQ5IH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyZDkgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAyYzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGU4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNmMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGUyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMmMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGMyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY2OCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYjUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NWYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwODAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg0NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg0NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzAwOGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzODA4YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzAwODQxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzA4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzMTggfSwKKyAgICB7IDB4ZmZmZmZmZWYsIDB4MDAyODA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjhlMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4OTcwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4YzA0ODRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQ1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDQwMzA0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHhjMDMwNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzBhMjIsIDB4MzRiIH0sCisgICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzNTQgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM2NCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwMiwgMHgzNmUgfSwKKyAgICB7IDB4MDAwMDIxMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MzZhIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDM1ZiB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWMwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgzNWYgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDM2MjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDQ5LCAweDAwMjAxODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNzAgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4Mzg2IH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYjEgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNiNSB9LAorICAgIHsgMHgwMDAwMDAyMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzljIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYTggfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhOCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzkwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDgwMDAwMDAsIDB4MDAyOTBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwODAwMDAsIDB4MDAyODEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweGMwMjIxNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRhNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM5MiB9LAorICAgIHsgMHgwMDAwMjEwZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM5ZSB9LAorICAgIHsgMHgwMDAwMjEwOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4ODAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzYWUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNmUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDNjZSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzYzAgfSwKKyAgICB7IDB4MDAwMDIxMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4YmFiZWNhZmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNzAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBhLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2QzIH0sCisgICAgeyAweDhjMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODAwMDAwMDAsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDQwMDAwMDAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZTEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDE4MDAsIDB4M2U0IH0sCisgICAgeyAweDAwMDAzZmZmLCAweGMwMjgxYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNiwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZTcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDFjMDAsIDB4M2VhIH0sCisgICAgeyAweDAwMDAzZmZmLCAweGMwMjgxZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNywgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjBjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0OTQ4ZTgsIDB4MDAwIH0sCisgICAgeyAweGE1ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDEyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweGMwMjEwMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzZjcgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDQ4MTIyMCwgMHgzZmYgfSwKKyAgICB7IDB4YTc4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDg4MywgMHgwMDAgfSwKKyAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDEyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHhhOTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGMwMDAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweGFiODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjhlMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4YWQ4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmODgwLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHhiMzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGYzZmMsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweGFmODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4YjE4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmMDAwLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg0MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWQwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMTE4MjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDIxOGEwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAzMThjMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwNDE4ZjhlMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDUxOGY4ODAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDA2MThlMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwNzE4ZjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDgxOGYzZmMsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDI5MGM0MCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4ODYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAorICAgIHsgMHg4NTAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIxMDIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NDQ1IH0sCisgICAgeyAweDAwODAwMDAwLCAweGMwNDk0YTIwLCAweDQ0NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDRjMDIsIDB4NDRiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NTkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDIwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDI4MGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ2MSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI0LCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0NjYgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODA1LCAweDY5MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjRmMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDAyODBhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NmQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA0ZTAwMDAwLCAweDQ4NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTMgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDJlMDAwMDAsIDB4NDg2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MyB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDc3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0ODYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkzIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0N2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTMgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4NDg2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MyB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDg2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwOGUwMDAwMCwgMHg0ODYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkzIH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjEwYTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0OTAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ5OSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNGMwOCwgMHg0NTkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHg0MDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDRhMyB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHhjMDQ5NGEyMCwgMHg0YTQgfSwKKyAgICB7IDB4ZmZmYmZmZmYsIDB4YzAyODRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0YjAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRhYyB9LAorICAgIHsgMHhhMDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0YWEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMTBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRjMyB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4NjkyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRjNyB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRjZSB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGQwIH0sCisgICAgeyAweDAwMDAyMTgwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzMzZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NTAwIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgxOGUwMGMxMSwgMHg0ZWYgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDhjMDQ4MDAsIDB4NGUzIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJkLCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGM4MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0YWEgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJkLCAweGMwNDAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTA1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweGI1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YjYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiNzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGMwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGI4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjhlMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YjkwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmODgwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiYTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGJiMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YmMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmM2ZjLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGZmLCAweDAwMjgwZTMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTE5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1MmUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI4LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweGZmZmZlMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxZmZmLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweGYxZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHhjMDIyMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmEsIDB4NDAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDg3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZjQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDlkMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHg0MDIxNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4OTYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDEwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjExNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMjIyMywgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmYwMDAsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMGU4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIwLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDE0YTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMWEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MTAwMDAwMDAsIDB4MDAyODFhMjYsIDB4MDAwIH0sCisgICAgeyAweGVmZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQ5MzhjZSwgMHg2N2IgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4NDAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDMwMCwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDU2NiB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU4LCAweDAwMzAwYTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAyMDAwMCwgMHgwMDI5NGEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTZlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1N2MgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU2ZSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU4LCAweDAwMzAwYTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU3YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTcyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1N2MgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU3YSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4NjkyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAxYzEwLCAweDU3YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDU3ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YzkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU4ZiB9LAorICAgIHsgMHgwMDAwYTJiNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYjYsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMmM0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NThkIH0sCisgICAgeyAweDAwMDBhMmQxLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWEwIH0sCisgICAgeyAweDAwMDBhMmJiLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiYSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEyYzUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1OWUgfSwKKyAgICB7IDB4MDAwMGEyZDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJkMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YjEgfSwKKyAgICB7IDB4MDAwMGEyYmYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmJlLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwYTJjNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDVhZiB9LAorICAgIHsgMHgwMDAwYTJkMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYzMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmMyLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwYTJjNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDViZSB9LAorICAgIHsgMHgwMDAwYTJkNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4ODUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMzA0YSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDEwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDVjNCB9LAorICAgIHsgMHhhNDAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDVjOSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDM2MjEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVkMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDA0MDM2MjEsIDB4NWUzIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2UwMCwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDVlMyB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDkyLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAzMSwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwOTMsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDMyLCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiNiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMzMsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmJhLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAzNCwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYmUsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDM1LCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJjMiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMzYsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjJjIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjJjIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdlMDAsIDB4MDAyODA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MDUgfSwKKyAgICB7IDB4MDAwMGEwOTIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMxLCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTA5MywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzIsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmI2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMywgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYmEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM0LCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJiZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzUsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmMyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzNiwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMWZmLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjJiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MGUgfSwKKyAgICB7IDB4MDAwNGEwMDMsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMDAzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDYxMyB9LAorICAgIHsgMHgwMDA0YTAxMCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYyYiB9LAorICAgIHsgMHgwMDA0YTAxMSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEwMTEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxMiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEwMTIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxMywgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEwMTMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEwMTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEwMTUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEwMTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNywgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEwMTcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDA2MmQsIDB4MDAwIH0sCisgICAgeyAweGZmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwZWUwMDAwMCwgMHg2M2QgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjNiIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAxMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjOSB9LAorICAgIHsgMHg5ODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDY0MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4OTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDQ4MTEsIDB4NjJkIH0sCisgICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDYyZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NWMgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzZlIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDk4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwNDA0YzExLCAweDY1NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjkxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZiLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjkxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmY3LCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzZlIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAxODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjhjIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwNDA0YzExLCAweDY3MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MzhjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFkLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIwLCAweDAwMjAxNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMzAxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDA2NCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NjhiIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMTIyMiwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmYwMDAsIDB4MDAyODEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDQwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFhYzAwMDAwLCAweDY4ZCB9LAorICAgIHsgMHg5ZjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFhZTAwMDAwLCAweDY5MCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjkyIH0sCisgICAgeyAweDllMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4Njk1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDEwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAxNDIwNTAyLCAweDA1YzAwMjUwLCAweDAwMCB9LAorICAgIHsgMHgwMWMzMDE2OCwgMHgwNDNmMDVjMCwgMHgwMDAgfSwKKyAgICB7IDB4MDIyNTAyMDksIDB4MDI1MDAxNTEsIDB4MDAwIH0sCisgICAgeyAweDAyMjMwMjQ1LCAweDAyYTAwMjQxLCAweDAwMCB9LAorICAgIHsgMHgwM2Q3MDVjMCwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKKyAgICB7IDB4MDY0OTA2NGEsIDB4MDMxZjA1YzAsIDB4MDAwIH0sCisgICAgeyAweDA1YzAwNWM1LCAweDAzMjAwMzQwLCAweDAwMCB9LAorICAgIHsgMHgwMzJhMDI4MiwgMHgwMzQyMDMzNCwgMHgwMDAgfSwKKyAgICB7IDB4MDVjMDA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCisgICAgeyAweDA1YzAwNTUxLCAweDA1YzAwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwM2JhMDVjMCwgMHgwNGJiMDM0NCwgMHgwMDAgfSwKKyAgICB7IDB4MDQ5YTA0NTAsIDB4MDQzZDA1YzAsIDB4MDAwIH0sCisgICAgeyAweDA0ZDAwNWMwLCAweDA0NDEwNGRkLCAweDAwMCB9LAorICAgIHsgMHgwNDUwMDUwNywgMHgwMzUxMDM3NSwgMHgwMDAgfSwKKyAgICB7IDB4MDVjMDA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCisgICAgeyAweDA1YzAwNWMwLCAweDA1YzAwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwNWMwMDVjMCwgMHgwNjNmMDVjNywgMHgwMDAgfSwKKyAgICB7IDB4MDVjMDA1YzAsIDB4MDAwNzA1YzAsIDB4MDAwIH0sCisgICAgeyAweDA1YzAwNWMwLCAweDA1YzAwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwNWMwMDVjMCwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKKyAgICB7IDB4MDNmODAzZWQsIDB4MDQwODA0MDYsIDB4MDAwIH0sCisgICAgeyAweDA0MGUwNDBhLCAweDA0MGMwNDEwLCAweDAwMCB9LAorICAgIHsgMHgwNDFjMDQxOCwgMHgwNDI0MDQyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDQyYzA0MjgsIDB4MDQzNDA0MzAsIDB4MDAwIH0sCisgICAgeyAweDA1YzAwNWMwLCAweDA0MzgwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwNWMwMDVjMCwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKKyAgICB7IDB4MDVjMDA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDIwNjc5LCAweDA2OTcwMDA2LCAweDAwMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBSVjYxMF9wZnBfbWljcm9jb2RlW10gPSB7CisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweDdjMDM4YiwKKzB4ODAwMWI4LAorMHg3YzAzOGIsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjNDE4MzgsCisweGNhMjQwMCwKKzB4Y2EyODAwLAorMHg5NTgxYTgsCisweGM0MWMzYSwKKzB4YzNjMDAwLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4N2M3NDRiLAorMHhjMjAwMDUsCisweDk5YzAwMCwKKzB4YzQxYzNhLAorMHg3Yzc0NGMsCisweGMwZmZmMCwKKzB4MDQyYzA0LAorMHgzMDkwMDIsCisweDdkMjUwMCwKKzB4MzUxNDAyLAorMHg3ZDM1MGIsCisweDI1NTQwMywKKzB4N2NkNTgwLAorMHgyNTljMDMsCisweDk1YzAwNCwKKzB4ZDUwMDFiLAorMHg3ZWRkYzEsCisweDdkOWQ4MCwKKzB4ZDY4MDFiLAorMHhkNTgwMWIsCisweGQ0NDAxZSwKKzB4ZDU0MDFlLAorMHhkNjQwMWUsCisweGQ2ODAxZSwKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweDk3ODNkMywKKzB4ZDVjMDFlLAorMHhjYTA4MDAsCisweDgwMDAxYSwKKzB4Y2EwYzAwLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4ODAwMDBjLAorMHhjNDE4MzgsCisweGU0MDEzZSwKKzB4ZDQwMDFlLAorMHg4MDAwMGMsCisweGM0MTgzOCwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4ZTQwMTNlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjYTE4MDAsCisweGQ0NDAxZSwKKzB4ZDU4MDFlLAorMHg4MDAwNTMsCisweGQ0MDA3NSwKKzB4ZDQ0MDFlLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHhkNDgwMTksCisweGQ0YzAxOCwKKzB4ZDUwMDE3LAorMHhkNDgwMWUsCisweGQ0YzAxZSwKKzB4ZDUwMDFlLAorMHhlMjAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGNhMDgwMCwKKzB4ZDQ4MDYwLAorMHhkNDQwMWUsCisweDgwMDAwMCwKKzB4ZDQ4MDFlLAorMHhjYTA4MDAsCisweGQ0ODA2MSwKKzB4ZDQ0MDFlLAorMHg4MDAwMDAsCisweGQ0ODAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweGQ0NDAxZSwKKzB4ZDQ4MDE2LAorMHhkNGMwMTYsCisweGQ0ODAxZSwKKzB4ODAwMWI4LAorMHhkNGMwMWUsCisweGM2MDg0MywKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweDk0ODAwNCwKKzB4Y2ExNDAwLAorMHhlNDIwZjMsCisweGQ0MjAxMywKKzB4ZDU2MDY1LAorMHhkNGUwMWMsCisweGQ1MjAxYywKKzB4ZDU2MDFjLAorMHg4MDAwMDAsCisweDA2MjAwMSwKKzB4YzYwODQzLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4OTQ4M2Y3LAorMHhjYTE0MDAsCisweGU0MjBmMywKKzB4ODAwMDc5LAorMHhkNDIwMTMsCisweGM2MDg0MywKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweDk4ODNlZiwKKzB4Y2ExNDAwLAorMHhkNDAwNjQsCisweDgwMDA4ZCwKKzB4MDAwMDAwLAorMHhjNDE0MzIsCisweGM2MTg0MywKKzB4YzQwODJmLAorMHg5NTQwMDUsCisweGM0MGMzMCwKKzB4ZDQ0MDFlLAorMHg4MDAwMDAsCisweGVlMDAxZSwKKzB4OTU4M2Y1LAorMHhjNDEwMzEsCisweGQ0NDAzMywKKzB4ZDUyMDY1LAorMHhkNGEwMWMsCisweGQ0ZTAxYywKKzB4ZDUyMDFjLAorMHhlNDAxNWUsCisweGQ0MDAxZSwKKzB4ODAwMDAwLAorMHgwNjIwMDEsCisweGNhMTgwMCwKKzB4MGEyMDAxLAorMHhkNjAwNzYsCisweGM0MDgzNiwKKzB4OTg4MDA3LAorMHhjNjEwNDUsCisweDk1MDExMCwKKzB4ZDQwMDFmLAorMHhkNDYwNjIsCisweDgwMDAwMCwKKzB4ZDQyMDYyLAorMHhjYzM4MzUsCisweGNjMTQzMywKKzB4ODQwMWJiLAorMHhkNDAwNzIsCisweGQ1NDAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweGUyMDAxYSwKKzB4ODQwMWJiLAorMHhlMjAwMWEsCisweGNjMTA0YiwKKzB4Y2MwNDQ3LAorMHgyYzk0MDEsCisweDdkMDk4YiwKKzB4OTg0MDA1LAorMHg3ZDE1Y2IsCisweGQ0MDAxYSwKKzB4ODAwMWI4LAorMHhkNDAwNmQsCisweDM0NDQwMSwKKzB4Y2MwYzQ4LAorMHg5ODQwM2EsCisweGNjMmM0YSwKKzB4OTU4MDA0LAorMHhjYzA0NDksCisweDgwMDFiOCwKKzB4ZDQwMDFhLAorMHhkNGMwMWEsCisweDI4MjgwMSwKKzB4ODQwMGYwLAorMHhjYzEwMDMsCisweDk4ODAxYiwKKzB4MDQzODBjLAorMHg4NDAwZjAsCisweGNjMTAwMywKKzB4OTg4MDE3LAorMHgwNDM4MDgsCisweDg0MDBmMCwKKzB4Y2MxMDAzLAorMHg5ODgwMTMsCisweDA0MzgwNCwKKzB4ODQwMGYwLAorMHhjYzEwMDMsCisweDk4ODAxNCwKKzB4Y2MxMDRjLAorMHg5YTgwMDksCisweGNjMTQ0ZCwKKzB4OTg0MGRjLAorMHhkNDAwNmQsCisweGNjMTg0OCwKKzB4ZDUwMDFhLAorMHhkNTQwMWEsCisweDgwMDBjOSwKKzB4ZDU4MDFhLAorMHg5NmMwZDUsCisweGQ0MDA2ZCwKKzB4ODAwMWI4LAorMHhkNDAwNmUsCisweDlhYzAwMywKKzB4ZDQwMDZkLAorMHhkNDAwNmUsCisweDgwMDAwMCwKKzB4ZWMwMDdmLAorMHg5YWMwY2MsCisweGQ0MDA2ZCwKKzB4ODAwMWI4LAorMHhkNDAwNmUsCisweGNjMTQwMywKKzB4Y2MxODAzLAorMHhjYzFjMDMsCisweDdkOTEwMywKKzB4N2RkNTgzLAorMHg3ZDE5MGMsCisweDM1Y2MxZiwKKzB4MzU3MDFmLAorMHg3Y2YwY2IsCisweDdjZDA4YiwKKzB4ODgwMDAwLAorMHg3ZThlOGIsCisweDk1YzAwNCwKKzB4ZDQwMDZlLAorMHg4MDAxYjgsCisweGQ0MDAxYSwKKzB4ZDRjMDFhLAorMHhjYzA4MDMsCisweGNjMGMwMywKKzB4Y2MxMDAzLAorMHhjYzE0MDMsCisweGNjMTgwMywKKzB4Y2MxYzAzLAorMHhjYzI0MDMsCisweGNjMjgwMywKKzB4MzVjNDFmLAorMHgzNmIwMWYsCisweDdjNzA0YiwKKzB4MzRmMDFmLAorMHg3YzcwNGIsCisweDM1NzAxZiwKKzB4N2M3MDRiLAorMHg3ZDg4ODEsCisweDdkY2NjMSwKKzB4N2U1MTAxLAorMHg3ZTk1NDEsCisweDdjOTA4MiwKKzB4N2NkNGMyLAorMHg3Yzg0OGIsCisweDlhYzAwMywKKzB4N2M4YzhiLAorMHgyYzg4MDEsCisweDk4ODA5ZSwKKzB4ZDQwMDZkLAorMHg5ODQwOWMsCisweGQ0MDA2ZSwKKzB4Y2MwODRjLAorMHhjYzBjNGQsCisweGNjMTA0OCwKKzB4ZDQ4MDFhLAorMHhkNGMwMWEsCisweDgwMDEwMSwKKzB4ZDUwMDFhLAorMHhjYzA4MzIsCisweGQ0MDAzMiwKKzB4OTQ4MmQ5LAorMHhjYTBjMDAsCisweGQ0NDAxZSwKKzB4ODAwMDAwLAorMHhkNDAwMWUsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHhkNDQwMWUsCisweGNhMTQwMCwKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweGQ1MDAxZSwKKzB4ZDU0MDFlLAorMHhkNTQwMzQsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHgyODA0MDQsCisweGUyMDAxYSwKKzB4ZTIwMDFhLAorMHhkNDQwMWEsCisweGNhMzgwMCwKKzB4Y2MwODAzLAorMHhjYzBjMDMsCisweGNjMGMwMywKKzB4Y2MwYzAzLAorMHg5ODgyYmQsCisweDAwMDAwMCwKKzB4ODQwMWJiLAorMHhkN2EwNmYsCisweDgwMDAwMCwKKzB4ZWUwMDFmLAorMHhjYTA0MDAsCisweGMyZmYwMCwKKzB4Y2MwODM0LAorMHhjMTNmZmYsCisweDdjNzRjYiwKKzB4N2NjOTBiLAorMHg3ZDAxMGYsCisweDk5MDJiMCwKKzB4N2M3MzhiLAorMHg4NDAxYmIsCisweGQ3YTA2ZiwKKzB4ODAwMDAwLAorMHhlZTAwMWYsCisweGNhMDgwMCwKKzB4MjgxOTAwLAorMHg3ZDg5OGIsCisweDk1ODAxNCwKKzB4MjgxNDA0LAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4Y2ExYzAwLAorMHhjYTI0MDAsCisweGUyMDAxZiwKKzB4ZDRjMDFhLAorMHhkNTAwMWEsCisweGQ1NDAxYSwKKzB4Y2MxODAzLAorMHhjYzJjMDMsCisweGNjMmMwMywKKzB4Y2MyYzAzLAorMHg3ZGE1OGIsCisweDdkOWM0NywKKzB4OTg0Mjk3LAorMHgwMDAwMDAsCisweDgwMDE2MSwKKzB4ZDRjMDFhLAorMHhkNDQwMWUsCisweGQ0ODAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4ZTQwMTNlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjYTA4MDAsCisweDI0OGMwNiwKKzB4MGNjYzA2LAorMHg5OGMwMDYsCisweGNjMTA0ZSwKKzB4OTkwMDA0LAorMHhkNDAwNzMsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGQ0ODAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHgzNGQwMTgsCisweDI1MTAwMSwKKzB4OTUwMDIxLAorMHhjMTdmZmYsCisweGNhMTAwMCwKKzB4Y2ExNDAwLAorMHhjYTE4MDAsCisweGQ0ODAxZCwKKzB4ZDRjMDFkLAorMHg3ZGIxOGIsCisweGMxNDIwMiwKKzB4YzJjMDAxLAorMHhkNTgwMWQsCisweDM0ZGMwZSwKKzB4N2Q1ZDRjLAorMHg3ZjczNGMsCisweGQ3NDAxZSwKKzB4ZDUwMDFlLAorMHhkNTQwMWUsCisweGMxNDIwMCwKKzB4YzJjMDAwLAorMHgwOTljMDEsCisweDMxZGMxMCwKKzB4N2Y1ZjRjLAorMHg3ZjczNGMsCisweDA0MjgwMiwKKzB4N2Q4MzgwLAorMHhkNWE4NmYsCisweGQ1ODA2NiwKKzB4ZDc0MDFlLAorMHhlYzAwNWUsCisweGM4MjQwMiwKKzB4YzgyNDAyLAorMHg4MDAxYjgsCisweGQ2MDA3NiwKKzB4ZDQ0MDFlLAorMHhkNDgwMWUsCisweGQ0YzAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFmLAorMHhkNDAwMWYsCisweDgwMDAwMCwKKzB4ZDQwMDFmLAorMHhkNDAwMWYsCisweDg4MDAwMCwKKzB4ZDQwMDFmLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMTAxNzEsCisweDAyMDE3OCwKKzB4MDMwMDhmLAorMHgwNDAwN2YsCisweDA1MDAwMywKKzB4MDYwMDNmLAorMHgwNzAwMzIsCisweDA4MDEyYywKKzB4MDkwMDQ2LAorMHgwYTAwMzYsCisweDEwMDFiNiwKKzB4MTcwMGEyLAorMHgyMjAxM2EsCisweDIzMDE0OSwKKzB4MjAwMGI0LAorMHgyNDAxMjUsCisweDI3MDA0ZCwKKzB4MjgwMDZhLAorMHgyYTAwNjAsCisweDJiMDA1MiwKKzB4MmYwMDY1LAorMHgzMjAwODcsCisweDM0MDE3ZiwKKzB4M2MwMTU2LAorMHgzZjAwNzIsCisweDQxMDE4YywKKzB4NDQwMTJlLAorMHg1NTAxNzMsCisweDU2MDE3YSwKKzB4NjAwMDBiLAorMHg2MTAwMzQsCisweDYyMDAzOCwKKzB4NjMwMDM4LAorMHg2NDAwMzgsCisweDY1MDAzOCwKKzB4NjYwMDM4LAorMHg2NzAwMzgsCisweDY4MDAzYSwKKzB4NjkwMDQxLAorMHg2YTAwNDgsCisweDZiMDA0OCwKKzB4NmMwMDQ4LAorMHg2ZDAwNDgsCisweDZlMDA0OCwKKzB4NmYwMDQ4LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCit9OworCitzdGF0aWMgY29uc3QgdTMyIFJWNjIwX2NwX21pY3JvY29kZVtdWzNdID0geworICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjg0NjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMTAwMDAsIDB4YzAyOTQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYzMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwZjAwLCAweDAwMjgxNjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDhkMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDE4IH0sCisgICAgeyAweDAwNDEyMDAwLCAweDAwNDA0ODExLCAweDAxOSB9LAorICAgIHsgMHgwMDQyMjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI4LCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHg5MDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjExNjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTksIDB4MDAyMTFhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjgxYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTksIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2ExNDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmYywgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMjBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAorICAgIHsgMHgyMDAwMDAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMTBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIyMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDM4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDAzNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwMzcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDBlMmQsIDB4MDM5IH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOSwgMHgwMDQwMTIyZCwgMHgwNDYgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDBlMmQsIDB4MDM5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDNmZmZmYywgMHgwMDI4MTIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjExZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwM2UgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDA0MDFjMTEsIDB4MDQxIH0sCisgICAgeyAweDAwMDAwMDBkLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDdmYzAwMDAwLCAweDAwMjgxYTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIxMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGNjNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgxMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMTQwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDRiIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjkwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZjgwMDAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMmMwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjBlMmIsIDB4MDAwIH0sCisgICAgeyAweGZjMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDFmZmYsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI3LCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwNjEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDVmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA1ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMGUyZCwgMHgwNjIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDBlMmQsIDB4MDYyIH0sCisgICAgeyAweDAwMDAwMDBhLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYiwgMHgwMDQwMTIyZCwgMHgwNmEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwM2ZmZmZjLCAweDAwMjgxMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4N2ZjMDAwMDAsIDB4MDAyODE2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjExNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4ODAwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkwY2EzLCAweDAwMCB9LAorICAgIHsgMHgzZmZmZmMwMCwgMHgwMDI5MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA2ZCB9LAorICAgIHsgMHgwMDAwMDEwMCwgMHgwMDQwMWMxMSwgMHgwNzAgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGYwLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBkLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZjBmZiwgMHgwMDI4MWEzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGU2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAxOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4M2ZmZmZmZmYsIDB4MDAyODRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjkxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGEzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwODMgfSwKKyAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGE0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwODQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDhhIH0sCisgICAgeyAweDAwMDAwMDI1LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwOGEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjY4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY1YyB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDhkIH0sCisgICAgeyAweDAwMDAwMDEyLCAweGMwNDAzNjIwLCAweDA5MyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwOTEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDkwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwNDAwZTJkLCAweDA5MiB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDQwMGUyZCwgMHgwOTIgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEyLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDk4IH0sCisgICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MGEwIH0sCisgICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDllIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA5ZCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDQwMGUyZCwgMHgwOWYgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDA0MDBlMmQsIDB4MDlmIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTBjMDIsIDB4MDAwIH0sCisgICAgeyAweDAwM2YwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjEwMjJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwYTcgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwYWEgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjEwZTJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDA3ZiwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBlMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgwYjMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMjFlMzAsIDB4MDAwIH0sCisgICAgeyAweDk5ODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjAxODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MWNlNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDQ4MDcsIDB4MTJmIH0sCisgICAgeyAweDliMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4OWMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzMxNDZmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAzYzA1LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBjYiB9LAorICAgIHsgMHgwMGY4ZmYwOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OTgwMDAwMDAsIDB4MDA0MDQ4MTEsIDB4MGRjIH0sCisgICAgeyAweDAwMDAwMGYwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDBhMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MGRhIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGQ1IH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZDQgfSwKKyAgICB7IDB4MDAwMDNmMDAsIDB4MDA0MDBjMTEsIDB4MGQ2IH0sCisgICAgeyAweDAwMDAxZjAwLCAweDAwNDAwYzExLCAweDBkNiB9LAorICAgIHsgMHgwMDAwMGYwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAzODAwMDksIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDNmMDAwMDAwLCAweDAwMjgwZTJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDA0OTRhMjMsIDB4MGRjIH0sCisgICAgeyAweDAwMzgwZjA5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg2ODAwMDAwNywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTIwMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDBmZjAwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDgwLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMDgzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZWEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjYyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDBlYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NjUgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjIwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDEwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwNjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2EwYzAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDBlZiwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwNjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MGY4IH0sCisgICAgeyAweDAwMDAwMDBiLCAweDAwMjEwMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwZjggfSwKKyAgICB7IDB4MDAwMDA0MDAsIDB4MDAyOTIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGZkIH0sCisgICAgeyAweDAwMDBhMzBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDEwYiB9LAorICAgIHsgMHgwMDAwYTMwZiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMDQgfSwKKyAgICB7IDB4ZmZmZmZmZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMDcgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMGEgfSwKKyAgICB7IDB4MDAwMDAwZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAyYzQwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDExMiB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDQwMjI0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDQyNGEyMCwgMHgxMTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEzLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBhLCAweDAwMjAxMDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTFiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMTIyNCwgMHgxMTcgfSwKKyAgICB7IDB4ZmZiZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwMjEwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMmUgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBkLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIyMGUzMCwgMHgwMDAgfSwKKyAgICB7IDB4ZmMwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDEwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDBlLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwN2Y4ZmYwOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2OGMgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDA0MDRjMTEsIDB4MTM1IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDEzYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE2MCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDE0NjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzQxODgyLCAweDJiYiB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE0NyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTYwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwNjgxYTIwLCAweDJiYiB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE1OCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzAwYTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MThmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFhMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyYzA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjFlMjksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzA0OGViLCAweDE5YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4NDAzMzA2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMzAyNDA5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MTgxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgxODYgfSwKKyAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxODYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMwNjIxLCAweDE4MiB9LAorICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4MTk3IH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3ODA0MmEsIDB4MmZiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODA5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTc0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDIxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDE5NCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDNmODAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHg0NjAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTliIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzA4MTFhMjAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjFlMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI5LCAweDAwMjAxYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmYmZmMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMWZmZiwgMHgwMDI5NGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMGU4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMTAwLCAweDAwMjAxODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDYyMWUyOCwgMHgxMmYgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDA4MjIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDJjMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDYwMGUyZCwgMHgxYmQgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDBlMmQsIDB4MWJkIH0sCisgICAgeyAweDAwMDBjMDA4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MWI5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4MzkwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDJlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2IwZDYzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjI0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAxMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwMjEwNjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgyMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTI2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjYyNjI5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWUwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDA4MSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDA4MCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFkYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxZTkgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzFlMjcsIDB4MWQ4IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjAyYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDI4MGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyODJhMmEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMwNjIxLCAweDFkMSB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAzMDRhMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMDFlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWU5IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMxZTI3LCAweDFlNSB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAxODExLCAweDJiYiB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFmOCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMTYyOCwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZjAwMDAsIDB4MDAyODE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgxYTI5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMTYyMywgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZjAwMDAsIDB4MDAyODE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgxYTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MzE1MDMsIDB4MjA1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDczMTUyNCwgMHgyMDUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDE0YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzAwOGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyMDAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMjQwNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDY4YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJiMTQwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA5MDE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyOTRhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzQxNDY1LCAweDJiYiB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyMTkgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDIxMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQ1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwNDBmLCAweDIxMyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MzEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQ1IH0sCisgICAgeyAweDAwMDAwMjEwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxYTAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTljIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKKyAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MjMyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyMzYgfSwKKyAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyMzYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MjMzIH0sCisgICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDJmYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjMxIH0sCisgICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIxMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDI0YyB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwODAxMDEsIDB4MDAyOTIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgyNTEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MjdjIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MjZhIH0sCisgICAgeyAweDAwMDAwMDEyLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDFjMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI1ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA4YzAwMDAwLCAweDI2MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjExZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MWM0NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjY3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDhjMDAwMDAsIDB4MjZhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYzEgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwNDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3MSB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDQwNDgxMSwgMHgyNzYgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDQ0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzUgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCisgICAgeyAweDAwMDAwMDE5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlOSB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjU2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwODgxYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MzEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4MmEzIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNzAwMCwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJhLCAweDAwMjAxYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDI5MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJiLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2OTFjZTIsIDB4MTJmIH0sCisgICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyOWQgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwNDAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHhjMDIyMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI4LCAweGMwNDAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGExMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2UzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2U0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGEzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMWQwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDFkMDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkOSB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MmQ5IH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGUxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMmMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDJjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2YzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NjggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmI1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYjUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjVmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDgwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2ExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzA4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzgwOGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDg0MSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzMwOGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MzE4IH0sCisgICAgeyAweGZmZmZmZmVmLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGY4ZTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDk3MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4OTcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweGMwNDg0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0NSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDQwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHg0MDMwNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4YzAzMDRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMwYTIyLCAweDM0YiB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzU0IH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNjQgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDQ4MDIsIDB4MzZlIH0sCisgICAgeyAweDAwMDAyMTAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM2YSB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgzNWYgfSwKKyAgICB7IDB4MDAwMDAwMjgsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVjMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MzVmIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwMjAzNjI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDA0OSwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMxYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MzcwIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwODAxYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM4NiB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2IxIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYjUgfSwKKyAgICB7IDB4MDAwMDAwMjAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM5YyB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2E4IH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYTggfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDM5MCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDA4MDAwMDAwLCAweDAwMjkwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHg0MDIxMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDgwMDAwLCAweDAwMjgxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHhjMDIyMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YTQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAzLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDE1LCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzOTIgfSwKKyAgICB7IDB4MDAwMDIxMGUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzOWUgfSwKKyAgICB7IDB4MDAwMDIxMDgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDgwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2FlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzZlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFkLCAweDAwMjEwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzY2UgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4M2MwIH0sCisgICAgeyAweDAwMDAyMTAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweGJhYmVjYWZlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTcwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNkMyB9LAorICAgIHsgMHg4YzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4NDAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDgwMDAwMDAwLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHg0MDAwMDAwMCwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjIsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4M2UxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAxODAwLCAweDNlNCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHhjMDI4MWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjYsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4M2U3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAxYzAwLCAweDNlYSB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHhjMDI4MWUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjcsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDQwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyODIwYzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDk0OGU4LCAweDAwMCB9LAorICAgIHsgMHhhNTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwNjA0NDExLCAweDQxMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDQwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDQwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHhjMDIxMDIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2Y3IH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzA0ODEyMjAsIDB4M2ZmIH0sCisgICAgeyAweGE3ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDEyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ODMsIDB4MDAwIH0sCisgICAgeyAweDg0MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWQwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwNjA0NDExLCAweDQxMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4YTk4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBjMDAwLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHhhYjgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGY4ZTAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweGFkODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjg4MCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4YjM4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmM2ZjLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHhhZjgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweGIxODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjAwMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTQ4LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4NDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFkMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDExODIwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAyMThhMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMzE4YzAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDQxOGY4ZTAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDA1MThmODgwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwNjE4ZTAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDcxOGYwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDA4MThmM2ZjLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyOTBjNDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDg2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4ODUwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMTAyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDQ0NSB9LAorICAgIHsgMHgwMDgwMDAwMCwgMHhjMDQ5NGEyMCwgMHg0NDYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0YzAyLCAweDQ0YiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDEwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDU5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAyMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyODBhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NjEgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNCwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDY2IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwNSwgMHg2OTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyODI0ZjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwMjgwYTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDZkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNGUwMDAwMCwgMHg0ODYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkzIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NzIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAyZTAwMDAwLCAweDQ4NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTMgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3NyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDg2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MyB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDdjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0ODYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkzIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0ODEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDQ4NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTMgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDhlMDAwMDAsIDB4NDg2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MyB9LAorICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NDkwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0OTkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDRjMDgsIDB4NDU5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4NDAyMTEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEyLCAweDQwMjExNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0YTMgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4YzA0OTRhMjAsIDB4NGE0IH0sCisgICAgeyAweGZmZmJmZmZmLCAweGMwMjg0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NGIwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0YWMgfSwKKyAgICB7IDB4YTAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZiLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NGFhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjEwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0YzMgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDY5MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0YzcgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHhjMDI5NDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0Y2UgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRkMCB9LAorICAgIHsgMHgwMDAwMjE4MCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDMzM2UyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDUwMCB9LAorICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4MThlMDBjMTEsIDB4NGVmIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ4YzA0ODAwLCAweDRlMyB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyZCwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjODMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NGFhIH0sCisgICAgeyAweDAwMDAwMDJjLCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyZCwgMHhjMDQwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDUwNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHhiNTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGI2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YjcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBjMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGY4ZTAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGI5MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjg4MCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YmEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiYjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGYwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGJjMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjNmYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDBmZiwgMHgwMDI4MGUzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDUxOSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTJlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI5LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI1LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZTAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMWZmZiwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHhmMWZmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4YzAyMjBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJhLCAweDQwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHg4NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWY0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHg5ZDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4NDAyMTRhMjAsIDB4MDAwIH0sCisgICAgeyAweDk2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMTYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFkLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjIyMjMsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmMDAwLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjBlOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjExZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMCwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjE2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzAxNGE4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTFhMjQsIDB4MDAwIH0sCisgICAgeyAweDEwMDAwMDAwLCAweDAwMjgxYTI2LCAweDAwMCB9LAorICAgIHsgMHhlZmZmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0OTM4Y2UsIDB4NjdiIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDQwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAzMDAsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjExMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1NjYgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1OCwgMHgwMDMwMGEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjIsIDB4NjhkIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMjAwMDAsIDB4MDAyOTRhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU2ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTdjIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NmUgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1OCwgMHgwMDMwMGEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjIsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1N2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU3MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTdjIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1N2EgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDY5MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMWMxMCwgMHg1N2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwZWUwMDAwMCwgMHg1N2UgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWM5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1OGYgfSwKKyAgICB7IDB4MDAwMGEyYjcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmI2LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwYTJjNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDU4ZCB9LAorICAgIHsgMHgwMDAwYTJkMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQxLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVhMCB9LAorICAgIHsgMHgwMDAwYTJiYiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYmEsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMmM1LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NTllIH0sCisgICAgeyAweDAwMDBhMmQyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWIxIH0sCisgICAgeyAweDAwMDBhMmJmLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiZSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEyYzYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1YWYgfSwKKyAgICB7IDB4MDAwMGEyZDMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJkMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmMzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJjMiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMGEyYzcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1YmUgfSwKKyAgICB7IDB4MDAwMGEyZDQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJkNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCisgICAgeyAweDg1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDMwNGEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAxMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg1YzQgfSwKKyAgICB7IDB4YTQwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg1YzkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwMjAzNjIxLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1ZDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwNDAzNjIxLCAweDVlMyB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdlMDAsIDB4MDAyODA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg1ZTMgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTA5MiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMzEsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDkzLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAzMiwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYjYsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDMzLCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiYSwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMzQsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmJlLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAzNSwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYzIsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDM2LCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZjQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4ODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYyYyB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYyYyB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3ZTAwLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjA1IH0sCisgICAgeyAweDAwMDBhMDkyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMSwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwOTMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMyLCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJiNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzMsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmJhLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzNCwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYmUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM1LCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJjMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzYsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDFmZiwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYyYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjBlIH0sCisgICAgeyAweDAwMDRhMDAzLCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwYTAwMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MTMgfSwKKyAgICB7IDB4MDAwNGEwMTAsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MmIgfSwKKyAgICB7IDB4MDAwNGEwMTEsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMDExLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwMTIsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMDEyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwMTMsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMDEzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwMTQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMDE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwMTUsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMDE1LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwMTYsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMDE2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwMTcsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDBhMDE3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwODAwNjJkLCAweDAwMCB9LAorICAgIHsgMHhmZjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGVlMDAwMDAsIDB4NjNkIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYzYiB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMTAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YzkgfSwKKyAgICB7IDB4OTgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg2NDEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODkwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNDA0ODExLCAweDYyZCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgxMSwgMHg2MmQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjVjIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM2ZSB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMTAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDA5ODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNGMxMSwgMHg2NTYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDI5MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmYiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDI5MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmNywgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM2ZSB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMTAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMTgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmZmZmYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2OGQgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDY4YyB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDQwNGMxMSwgMHg2NzIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDM4YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMCwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDMwMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwNjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDY4YiB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MWEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjEyMjIsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmMDAwLCAweDAwMjgxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDA0MDM2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxYWMwMDAwMCwgMHg2OGQgfSwKKyAgICB7IDB4OWYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxYWUwMDAwMCwgMHg2OTAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFhYzAwMDAwLCAweDY5MiB9LAorICAgIHsgMHg5ZTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFhZTAwMDAwLCAweDY5NSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAxMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMTQyMDUwMiwgMHgwNWMwMDI1MCwgMHgwMDAgfSwKKyAgICB7IDB4MDFjMzAxNjgsIDB4MDQzZjA1YzAsIDB4MDAwIH0sCisgICAgeyAweDAyMjUwMjA5LCAweDAyNTAwMTUxLCAweDAwMCB9LAorICAgIHsgMHgwMjIzMDI0NSwgMHgwMmEwMDI0MSwgMHgwMDAgfSwKKyAgICB7IDB4MDNkNzA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCisgICAgeyAweDA2NDkwNjRhLCAweDAzMWYwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwNWMwMDVjNSwgMHgwMzIwMDM0MCwgMHgwMDAgfSwKKyAgICB7IDB4MDMyYTAyODIsIDB4MDM0MjAzMzQsIDB4MDAwIH0sCisgICAgeyAweDA1YzAwNWMwLCAweDA1YzAwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwNWMwMDU1MSwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKKyAgICB7IDB4MDNiYTA1YzAsIDB4MDRiYjAzNDQsIDB4MDAwIH0sCisgICAgeyAweDA0OWEwNDUwLCAweDA0M2QwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwNGQwMDVjMCwgMHgwNDQxMDRkZCwgMHgwMDAgfSwKKyAgICB7IDB4MDQ1MDA1MDcsIDB4MDM1MTAzNzUsIDB4MDAwIH0sCisgICAgeyAweDA1YzAwNWMwLCAweDA1YzAwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwNWMwMDVjMCwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKKyAgICB7IDB4MDVjMDA1YzAsIDB4MDYzZjA1YzcsIDB4MDAwIH0sCisgICAgeyAweDA1YzAwNWMwLCAweDAwMDcwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwNWMwMDVjMCwgMHgwNWMwMDVjMCwgMHgwMDAgfSwKKyAgICB7IDB4MDVjMDA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCisgICAgeyAweDAzZjgwM2VkLCAweDA0MDgwNDA2LCAweDAwMCB9LAorICAgIHsgMHgwNDBlMDQwYSwgMHgwNDBjMDQxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDQxYzA0MTgsIDB4MDQyNDA0MjAsIDB4MDAwIH0sCisgICAgeyAweDA0MmMwNDI4LCAweDA0MzQwNDMwLCAweDAwMCB9LAorICAgIHsgMHgwNWMwMDVjMCwgMHgwNDM4MDVjMCwgMHgwMDAgfSwKKyAgICB7IDB4MDVjMDA1YzAsIDB4MDVjMDA1YzAsIDB4MDAwIH0sCisgICAgeyAweDA1YzAwNWMwLCAweDA1YzAwNWMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAyMDY3OSwgMHgwNjk3MDAwNiwgMHgwMDAgfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgUlY2MjBfcGZwX21pY3JvY29kZVtdID0geworMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHg3YzAzOGIsCisweDgwMDFiOCwKKzB4N2MwMzhiLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4YzQxODM4LAorMHhjYTI0MDAsCisweGNhMjgwMCwKKzB4OTU4MWE4LAorMHhjNDFjM2EsCisweGMzYzAwMCwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweDdjNzQ0YiwKKzB4YzIwMDA1LAorMHg5OWMwMDAsCisweGM0MWMzYSwKKzB4N2M3NDRjLAorMHhjMGZmZjAsCisweDA0MmMwNCwKKzB4MzA5MDAyLAorMHg3ZDI1MDAsCisweDM1MTQwMiwKKzB4N2QzNTBiLAorMHgyNTU0MDMsCisweDdjZDU4MCwKKzB4MjU5YzAzLAorMHg5NWMwMDQsCisweGQ1MDAxYiwKKzB4N2VkZGMxLAorMHg3ZDlkODAsCisweGQ2ODAxYiwKKzB4ZDU4MDFiLAorMHhkNDQwMWUsCisweGQ1NDAxZSwKKzB4ZDY0MDFlLAorMHhkNjgwMWUsCisweGQ0ODAxZSwKKzB4ZDRjMDFlLAorMHg5NzgzZDMsCisweGQ1YzAxZSwKKzB4Y2EwODAwLAorMHg4MDAwMWEsCisweGNhMGMwMCwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweDgwMDAwYywKKzB4YzQxODM4LAorMHhlNDAxM2UsCisweGQ0MDAxZSwKKzB4ODAwMDBjLAorMHhjNDE4MzgsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGU0MDEzZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4Y2ExODAwLAorMHhkNDQwMWUsCisweGQ1ODAxZSwKKzB4ODAwMDUzLAorMHhkNDAwNzUsCisweGQ0NDAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4ZDQ4MDE5LAorMHhkNGMwMTgsCisweGQ1MDAxNywKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweGQ1MDAxZSwKKzB4ZTIwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjYTA4MDAsCisweGQ0ODA2MCwKKzB4ZDQ0MDFlLAorMHg4MDAwMDAsCisweGQ0ODAxZSwKKzB4Y2EwODAwLAorMHhkNDgwNjEsCisweGQ0NDAxZSwKKzB4ODAwMDAwLAorMHhkNDgwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHhkNDQwMWUsCisweGQ0ODAxNiwKKzB4ZDRjMDE2LAorMHhkNDgwMWUsCisweDgwMDFiOCwKKzB4ZDRjMDFlLAorMHhjNjA4NDMsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHg5NDgwMDQsCisweGNhMTQwMCwKKzB4ZTQyMGYzLAorMHhkNDIwMTMsCisweGQ1NjA2NSwKKzB4ZDRlMDFjLAorMHhkNTIwMWMsCisweGQ1NjAxYywKKzB4ODAwMDAwLAorMHgwNjIwMDEsCisweGM2MDg0MywKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweDk0ODNmNywKKzB4Y2ExNDAwLAorMHhlNDIwZjMsCisweDgwMDA3OSwKKzB4ZDQyMDEzLAorMHhjNjA4NDMsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHg5ODgzZWYsCisweGNhMTQwMCwKKzB4ZDQwMDY0LAorMHg4MDAwOGQsCisweDAwMDAwMCwKKzB4YzQxNDMyLAorMHhjNjE4NDMsCisweGM0MDgyZiwKKzB4OTU0MDA1LAorMHhjNDBjMzAsCisweGQ0NDAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweDk1ODNmNSwKKzB4YzQxMDMxLAorMHhkNDQwMzMsCisweGQ1MjA2NSwKKzB4ZDRhMDFjLAorMHhkNGUwMWMsCisweGQ1MjAxYywKKzB4ZTQwMTVlLAorMHhkNDAwMWUsCisweDgwMDAwMCwKKzB4MDYyMDAxLAorMHhjYTE4MDAsCisweDBhMjAwMSwKKzB4ZDYwMDc2LAorMHhjNDA4MzYsCisweDk4ODAwNywKKzB4YzYxMDQ1LAorMHg5NTAxMTAsCisweGQ0MDAxZiwKKzB4ZDQ2MDYyLAorMHg4MDAwMDAsCisweGQ0MjA2MiwKKzB4Y2MzODM1LAorMHhjYzE0MzMsCisweDg0MDFiYiwKKzB4ZDQwMDcyLAorMHhkNTQwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHhlMjAwMWEsCisweDg0MDFiYiwKKzB4ZTIwMDFhLAorMHhjYzEwNGIsCisweGNjMDQ0NywKKzB4MmM5NDAxLAorMHg3ZDA5OGIsCisweDk4NDAwNSwKKzB4N2QxNWNiLAorMHhkNDAwMWEsCisweDgwMDFiOCwKKzB4ZDQwMDZkLAorMHgzNDQ0MDEsCisweGNjMGM0OCwKKzB4OTg0MDNhLAorMHhjYzJjNGEsCisweDk1ODAwNCwKKzB4Y2MwNDQ5LAorMHg4MDAxYjgsCisweGQ0MDAxYSwKKzB4ZDRjMDFhLAorMHgyODI4MDEsCisweDg0MDBmMCwKKzB4Y2MxMDAzLAorMHg5ODgwMWIsCisweDA0MzgwYywKKzB4ODQwMGYwLAorMHhjYzEwMDMsCisweDk4ODAxNywKKzB4MDQzODA4LAorMHg4NDAwZjAsCisweGNjMTAwMywKKzB4OTg4MDEzLAorMHgwNDM4MDQsCisweDg0MDBmMCwKKzB4Y2MxMDAzLAorMHg5ODgwMTQsCisweGNjMTA0YywKKzB4OWE4MDA5LAorMHhjYzE0NGQsCisweDk4NDBkYywKKzB4ZDQwMDZkLAorMHhjYzE4NDgsCisweGQ1MDAxYSwKKzB4ZDU0MDFhLAorMHg4MDAwYzksCisweGQ1ODAxYSwKKzB4OTZjMGQ1LAorMHhkNDAwNmQsCisweDgwMDFiOCwKKzB4ZDQwMDZlLAorMHg5YWMwMDMsCisweGQ0MDA2ZCwKKzB4ZDQwMDZlLAorMHg4MDAwMDAsCisweGVjMDA3ZiwKKzB4OWFjMGNjLAorMHhkNDAwNmQsCisweDgwMDFiOCwKKzB4ZDQwMDZlLAorMHhjYzE0MDMsCisweGNjMTgwMywKKzB4Y2MxYzAzLAorMHg3ZDkxMDMsCisweDdkZDU4MywKKzB4N2QxOTBjLAorMHgzNWNjMWYsCisweDM1NzAxZiwKKzB4N2NmMGNiLAorMHg3Y2QwOGIsCisweDg4MDAwMCwKKzB4N2U4ZThiLAorMHg5NWMwMDQsCisweGQ0MDA2ZSwKKzB4ODAwMWI4LAorMHhkNDAwMWEsCisweGQ0YzAxYSwKKzB4Y2MwODAzLAorMHhjYzBjMDMsCisweGNjMTAwMywKKzB4Y2MxNDAzLAorMHhjYzE4MDMsCisweGNjMWMwMywKKzB4Y2MyNDAzLAorMHhjYzI4MDMsCisweDM1YzQxZiwKKzB4MzZiMDFmLAorMHg3YzcwNGIsCisweDM0ZjAxZiwKKzB4N2M3MDRiLAorMHgzNTcwMWYsCisweDdjNzA0YiwKKzB4N2Q4ODgxLAorMHg3ZGNjYzEsCisweDdlNTEwMSwKKzB4N2U5NTQxLAorMHg3YzkwODIsCisweDdjZDRjMiwKKzB4N2M4NDhiLAorMHg5YWMwMDMsCisweDdjOGM4YiwKKzB4MmM4ODAxLAorMHg5ODgwOWUsCisweGQ0MDA2ZCwKKzB4OTg0MDljLAorMHhkNDAwNmUsCisweGNjMDg0YywKKzB4Y2MwYzRkLAorMHhjYzEwNDgsCisweGQ0ODAxYSwKKzB4ZDRjMDFhLAorMHg4MDAxMDEsCisweGQ1MDAxYSwKKzB4Y2MwODMyLAorMHhkNDAwMzIsCisweDk0ODJkOSwKKzB4Y2EwYzAwLAorMHhkNDQwMWUsCisweDgwMDAwMCwKKzB4ZDQwMDFlLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4ZDQ0MDFlLAorMHhjYTE0MDAsCisweGQ0ODAxZSwKKzB4ZDRjMDFlLAorMHhkNTAwMWUsCisweGQ1NDAxZSwKKzB4ZDU0MDM0LAorMHg4MDAwMDAsCisweGVlMDAxZSwKKzB4MjgwNDA0LAorMHhlMjAwMWEsCisweGUyMDAxYSwKKzB4ZDQ0MDFhLAorMHhjYTM4MDAsCisweGNjMDgwMywKKzB4Y2MwYzAzLAorMHhjYzBjMDMsCisweGNjMGMwMywKKzB4OTg4MmJkLAorMHgwMDAwMDAsCisweDg0MDFiYiwKKzB4ZDdhMDZmLAorMHg4MDAwMDAsCisweGVlMDAxZiwKKzB4Y2EwNDAwLAorMHhjMmZmMDAsCisweGNjMDgzNCwKKzB4YzEzZmZmLAorMHg3Yzc0Y2IsCisweDdjYzkwYiwKKzB4N2QwMTBmLAorMHg5OTAyYjAsCisweDdjNzM4YiwKKzB4ODQwMWJiLAorMHhkN2EwNmYsCisweDgwMDAwMCwKKzB4ZWUwMDFmLAorMHhjYTA4MDAsCisweDI4MTkwMCwKKzB4N2Q4OThiLAorMHg5NTgwMTQsCisweDI4MTQwNCwKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweGNhMWMwMCwKKzB4Y2EyNDAwLAorMHhlMjAwMWYsCisweGQ0YzAxYSwKKzB4ZDUwMDFhLAorMHhkNTQwMWEsCisweGNjMTgwMywKKzB4Y2MyYzAzLAorMHhjYzJjMDMsCisweGNjMmMwMywKKzB4N2RhNThiLAorMHg3ZDljNDcsCisweDk4NDI5NywKKzB4MDAwMDAwLAorMHg4MDAxNjEsCisweGQ0YzAxYSwKKzB4ZDQ0MDFlLAorMHhkNDgwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGU0MDEzZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4Y2EwODAwLAorMHgyNDhjMDYsCisweDBjY2MwNiwKKzB4OThjMDA2LAorMHhjYzEwNGUsCisweDk5MDAwNCwKKzB4ZDQwMDczLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhkNDgwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4MzRkMDE4LAorMHgyNTEwMDEsCisweDk1MDAyMSwKKzB4YzE3ZmZmLAorMHhjYTEwMDAsCisweGNhMTQwMCwKKzB4Y2ExODAwLAorMHhkNDgwMWQsCisweGQ0YzAxZCwKKzB4N2RiMThiLAorMHhjMTQyMDIsCisweGMyYzAwMSwKKzB4ZDU4MDFkLAorMHgzNGRjMGUsCisweDdkNWQ0YywKKzB4N2Y3MzRjLAorMHhkNzQwMWUsCisweGQ1MDAxZSwKKzB4ZDU0MDFlLAorMHhjMTQyMDAsCisweGMyYzAwMCwKKzB4MDk5YzAxLAorMHgzMWRjMTAsCisweDdmNWY0YywKKzB4N2Y3MzRjLAorMHgwNDI4MDIsCisweDdkODM4MCwKKzB4ZDVhODZmLAorMHhkNTgwNjYsCisweGQ3NDAxZSwKKzB4ZWMwMDVlLAorMHhjODI0MDIsCisweGM4MjQwMiwKKzB4ODAwMWI4LAorMHhkNjAwNzYsCisweGQ0NDAxZSwKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHg4MDAwMDAsCisweGVlMDAxZiwKKzB4ZDQwMDFmLAorMHg4MDAwMDAsCisweGQ0MDAxZiwKKzB4ZDQwMDFmLAorMHg4ODAwMDAsCisweGQ0MDAxZiwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDEwMTcxLAorMHgwMjAxNzgsCisweDAzMDA4ZiwKKzB4MDQwMDdmLAorMHgwNTAwMDMsCisweDA2MDAzZiwKKzB4MDcwMDMyLAorMHgwODAxMmMsCisweDA5MDA0NiwKKzB4MGEwMDM2LAorMHgxMDAxYjYsCisweDE3MDBhMiwKKzB4MjIwMTNhLAorMHgyMzAxNDksCisweDIwMDBiNCwKKzB4MjQwMTI1LAorMHgyNzAwNGQsCisweDI4MDA2YSwKKzB4MmEwMDYwLAorMHgyYjAwNTIsCisweDJmMDA2NSwKKzB4MzIwMDg3LAorMHgzNDAxN2YsCisweDNjMDE1NiwKKzB4M2YwMDcyLAorMHg0MTAxOGMsCisweDQ0MDEyZSwKKzB4NTUwMTczLAorMHg1NjAxN2EsCisweDYwMDAwYiwKKzB4NjEwMDM0LAorMHg2MjAwMzgsCisweDYzMDAzOCwKKzB4NjQwMDM4LAorMHg2NTAwMzgsCisweDY2MDAzOCwKKzB4NjcwMDM4LAorMHg2ODAwM2EsCisweDY5MDA0MSwKKzB4NmEwMDQ4LAorMHg2YjAwNDgsCisweDZjMDA0OCwKKzB4NmQwMDQ4LAorMHg2ZTAwNDgsCisweDZmMDA0OCwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBSVjYzMF9jcF9taWNyb2NvZGVbXVszXSA9IHsKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4NDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDEwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MmUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMGYwMCwgMHgwMDI4MTYyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHg4ZDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAxOCB9LAorICAgIHsgMHgwMDQxMjAwMCwgMHgwMDQwNDgxMSwgMHgwMTkgfSwKKyAgICB7IDB4MDA0MjIwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhlMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4OTAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIxMTYyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE5LCAweDAwMjExYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDI4MWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE5LCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMTQwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmZmZmMsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGEzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwMjIwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKKyAgICB7IDB4MjAwMDAwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjEwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDAzOCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwMzUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDM3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwZTJkLCAweDAzOSB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDksIDB4MDA0MDEyMmQsIDB4MDQ2IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNDAwZTJkLCAweDAzOSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAzZmZmZmMsIDB4MDAyODEyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDNlIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwNDAxYzExLCAweDA0MSB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHg3ZmMwMDAwMCwgMHgwMDI4MWEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMTFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMxYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjYzcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI3LCAweDAwMjAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MTIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDE0MDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDA0YiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDI5MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhmZmY4MDAwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTJjMDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIwZTJiLCAweDAwMCB9LAorICAgIHsgMHhmYzAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxZmZmLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI5LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDYxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA1ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwNWUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDBlMmQsIDB4MDYyIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNDAwZTJkLCAweDA2MiB9LAorICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGIsIDB4MDA0MDEyMmQsIDB4MDZhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDNmZmZmYywgMHgwMDI4MTIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCisgICAgeyAweDdmYzAwMDAwLCAweDAwMjgxNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzE2MjUsIDB4MDAwIH0sCisgICAgeyAweDgwMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGNhMywgMHgwMDAgfSwKKyAgICB7IDB4M2ZmZmZjMDAsIDB4MDAyOTBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjExZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwNmQgfSwKKyAgICB7IDB4MDAwMDAxMDAsIDB4MDA0MDFjMTEsIDB4MDcwIH0sCisgICAgeyAweDAwMDAwMDBkLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDBmMCwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmYwZmYsIDB4MDAyODFhMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDI4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhlNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMTgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDNmZmZmZmZmLCAweDAwMjg0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAxNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDI5MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI1LCAweDAwMjAxNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MDgzIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAxNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBhNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MDg0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDA4YSB9LAorICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDhhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY2NSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NTkgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDA4ZCB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHhjMDQwMzYyMCwgMHgwOTMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDkxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA5MCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDQwMGUyZCwgMHgwOTIgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDA0MDBlMmQsIDB4MDkyIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDA5OCB9LAorICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDBhMCB9LAorICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA5ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwOWQgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDA0MDBlMmQsIDB4MDlmIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwNDAwZTJkLCAweDA5ZiB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2EwYzAyLCAweDAwMCB9LAorICAgIHsgMHgwMDNmMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGE3IH0sCisgICAgeyAweDAwMDAwMDE2LCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGFhIH0sCisgICAgeyAweDAwMDAwMDE1LCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMGUyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwN2YsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZTEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MjcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MGIzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjIxZTMwLCAweDAwMCB9LAorICAgIHsgMHg5OTgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTFjZTQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODA3LCAweDEyZiB9LAorICAgIHsgMHg5YjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDljMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMTQ2ZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwM2MwNSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwY2IgfSwKKyAgICB7IDB4MDBmOGZmMDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDk4MDAwMDAwLCAweDAwNDA0ODExLCAweDBkYyB9LAorICAgIHsgMHgwMDAwMDBmMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwYTAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDBkYSB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBkNSB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGQ0IH0sCisgICAgeyAweDAwMDAzZjAwLCAweDAwNDAwYzExLCAweDBkNiB9LAorICAgIHsgMHgwMDAwMWYwMCwgMHgwMDQwMGMxMSwgMHgwZDYgfSwKKyAgICB7IDB4MDAwMDBmMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMzgwMDA5LCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgzZjAwMDAwMCwgMHgwMDI4MGUyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwNDk0YTIzLCAweDBkYyB9LAorICAgIHsgMHgwMDM4MGYwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4NjgwMDAwMDcsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyMDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwZmYwMDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDA4MCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDA4MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGVhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY1ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwZWIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjYyIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIyMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAxMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwZWYsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDBmOCB9LAorICAgIHsgMHgwMDAwMDAwYiwgMHgwMDIxMDIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGY4IH0sCisgICAgeyAweDAwMDAwNDAwLCAweDAwMjkyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBmZCB9LAorICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMGIgfSwKKyAgICB7IDB4MDAwMGEzMGYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTA0IH0sCisgICAgeyAweGZmZmZmZmZmLCAweDAwNDA0ODExLCAweDEwYiB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTA3IH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwNDA0ODExLCAweDEwYiB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTBhIH0sCisgICAgeyAweDAwMDAwMGZmLCAweDAwNDA0ODExLCAweDEwYiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMmM0MDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMTIgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEzLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIyNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzA0MjRhMjAsIDB4MTE0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwMTAxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDExYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzEyMjQsIDB4MTE3IH0sCisgICAgeyAweGZmYmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTJlIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMjBlMzAsIDB4MDAwIH0sCisgICAgeyAweGZjMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDdmOGZmMDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDA4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4Njg5IH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwNDA0YzExLCAweDEzNSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgxM2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxNjAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQxNDYxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc0MTg4MiwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNDcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE2MCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjExNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDY4MWEyMCwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNTggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMwMGEyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE4ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxYTAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMmMwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxZTI5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDcwNDhlYiwgMHgxOWMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmJiIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDQwMzMwNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDMwMjQwOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDE4MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MTg2IH0sCisgICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTg2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxODIgfSwKKyAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDE5NyB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzgwNDJhLCAweDJmYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE3NCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAyMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxOTQgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4NDYwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE5YiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwODExYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxZTMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmJmZjA5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDFmZmYsIDB4MDAyOTRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjBlOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDEwMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDA2MjFlMjgsIDB4MTJmIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwODIyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAyYzAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4MDA2MDBlMmQsIDB4MWJkIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNjAwZTJkLCAweDFiZCB9LAorICAgIHsgMHgwMDAwYzAwOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDFiOSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDM5MDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjAyZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNiMGQ2MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjI0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMTAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDIxMDYyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjAyYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MjIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEyNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MjYyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFlMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwODEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwODAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZGMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWU5IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMxZTI3LCAweDFkOCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyODBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjgyYTJhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxZDEgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMzA0YTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzAxZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFlOSB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMWUyNywgMHgxZTUgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjYwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMTgxMSwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZjggfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjgsIDB4MDAwIH0sCisgICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjMsIDB4MDAwIH0sCisgICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzMxNTAzLCAweDIwNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MzE1MjQsIDB4MjA1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmQxNGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjAwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDI0MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2ODkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYjE0MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwOTAxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjk0YTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc0MTQ2NSwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjE5IH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyMTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDQwZiwgMHgyMTMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjJlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0MiB9LAorICAgIHsgMHgwMDAwMDIxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWEwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE5YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCisgICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDIzMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MjM2IH0sCisgICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MjM2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDIzMyB9LAorICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgyZmIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYyZSB9LAorICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMTBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgyNGMgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDgwMTAxLCAweDAwMjkyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEzMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MjUxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4M2Y4MDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDI3YyB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDI2YSB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQxYzI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNWYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwOGMwMDAwMCwgMHgyNjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEyLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDFjNDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI2NyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA4YzAwMDAwLCAweDI2YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmMxIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjAyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjcyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDQ0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzEgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwNDA0ODExLCAweDI3NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjA0NCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4Mjc1IH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwNDA0ODExLCAweDI3NiB9LAorICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTkgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDI1NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTA2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjExNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDg4MWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjJlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDJhMyB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIwMGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJiLCAweDAwMjAxYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDcwMDAsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2U2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYSwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMjFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNmUwMDAwMCwgMHgyOTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjkxY2UyLCAweDEyZiB9LAorICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MjlkIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDQwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4YzAyMjBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI5LCAweDAwMjAzNjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHhjMDQwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhhMTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJjMWNlMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJjMWNlNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDFkMDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmQxZDA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2M0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZDkgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDJkOSB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDJjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBhMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2YzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAyYzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGU4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNmMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjY1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmI1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY1YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmE3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDA4MDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODQ3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODQ3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGMyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzMwOGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM4MDhjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4NDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDMxOCB9LAorICAgIHsgMHhmZmZmZmZlZiwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmOGUwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4OTcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHhjMDQ4NGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHg0MDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4NDAzMDRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweGMwMzA0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMGEyMiwgMHgzNGIgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4YzAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM1NCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MzY0IH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODAyLCAweDM2ZSB9LAorICAgIHsgMHgwMDAwMjEwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNmEgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MzVmIH0sCisgICAgeyAweDAwMDAwMDI4LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YmQgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDM1ZiB9LAorICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMzYyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwNDksIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM3MCB9LAorICAgIHsgMHgwMDAwMDAyYywgMHgwMDgwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4YzAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE1LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzODYgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNiMSB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2I1IH0sCisgICAgeyAweDAwMDAwMDIwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOWMgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhOCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2E4IH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOTAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwODAwMDAwMCwgMHgwMDI5MGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweGMwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA4MDAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4YzAyMjE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGE0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZlLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzkyIH0sCisgICAgeyAweDAwMDAyMTBlLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzllIH0sCisgICAgeyAweDAwMDAyMTA4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHg4MDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNhZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM2ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIxMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4M2NlIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDNjMCB9LAorICAgIHsgMHgwMDAwMjEwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHhiYWJlY2FmZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3MCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzZDMgfSwKKyAgICB7IDB4OGMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDQwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MDAwMDAwMCwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4NDAwMDAwMDAsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDNlMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMTgwMCwgMHgzZTQgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4YzAyODFhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI2LCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDNlNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMWMwMCwgMHgzZWEgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4YzAyODFlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI3LCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjgyMGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQ5NDhlOCwgMHgwMDAgfSwKKyAgICB7IDB4YTU4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHg0MDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4YzAyMTAyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNmNyB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwNDgxMjIwLCAweDNmZiB9LAorICAgIHsgMHhhNzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwNjA0NDExLCAweDQxMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDQwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0ODgzLCAweDAwMCB9LAorICAgIHsgMHg4NDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFkMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweGE5ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYzAwMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4YWI4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmOGUwLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHhhZDgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGY4ODAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweGIzODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjNmYywgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4YWY4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDAwLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHhiMTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGYwMDAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE0OCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAxMTgyMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMjE4YTAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDMxOGMwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDA0MThmOGUwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwNTE4Zjg4MCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDYxOGUwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDA3MThmMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwODE4ZjNmYywgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjkwYzQwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHg4NjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDg1MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNGMwMiwgMHg0NDggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ1NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMjAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjgwYTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDVlIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4MDA2OTQ2MjQsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ2MyB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDQ4MDUsIDB4NjhmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjgyNGYwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDI4MGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ2YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDRlMDAwMDAsIDB4NDgzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDZmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMmUwMDAwMCwgMHg0ODMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NzQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ4MyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3OSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDgzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MCB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDdlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNmUwMDAwMCwgMHg0ODMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0ODMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA4ZTAwMDAwLCAweDQ4MyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTAgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTBhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDQ4ZCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDk2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0YzA4LCAweDQ1NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDQwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NGEwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweGMwNDk0YTIwLCAweDRhMSB9LAorICAgIHsgMHhmZmZiZmZmZiwgMHhjMDI4NGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDRhZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGE5IH0sCisgICAgeyAweGEwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2YiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRhNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIxMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGMwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHg2OGYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NGM0IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4YzAyOTQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGNiIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODEwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0Y2QgfSwKKyAgICB7IDB4MDAwMDIxODAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0ZmQgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDE4ZTAwYzExLCAweDRlYyB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOGMwNDgwMCwgMHg0ZTAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmQsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkwYzgzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRhNyB9LAorICAgIHsgMHgwMDAwMDAyYywgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmQsIDB4YzA0MDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1MDIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4YjUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiNjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGI3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYzAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YjgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmOGUwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiOTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGY4ODAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGJhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YmIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiYzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGYzZmMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwZmYsIDB4MDAyODBlMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1MTYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDUyYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJiLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjgsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE1LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmUwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDFmZmYsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4ZjFmZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweGMwMjIwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYSwgMHg0MDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4OWQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDQwMjE0YTIwLCAweDAwMCB9LAorICAgIHsgMHg5NjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTE2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIyMjIzLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIxMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjAsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMTRhOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjExYTI0LCAweDAwMCB9LAorICAgIHsgMHgxMDAwMDAwMCwgMHgwMDI4MWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4ZWZmZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDkzOGNlLCAweDY3OCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMzAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTYzIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDIwMDAwLCAweDAwMjk0YTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NmIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU3OSB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTZiIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTc5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NmYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU3OSB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTc3IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHg2OGYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDFjMTAsIDB4NTc5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGVlMDAwMDAsIDB4NTdiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjNiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NThjIH0sCisgICAgeyAweDAwMDBhMmI3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiNiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEyYzQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1OGEgfSwKKyAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJkMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1OWQgfSwKKyAgICB7IDB4MDAwMGEyYmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmJhLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTJjNSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDU5YiB9LAorICAgIHsgMHgwMDAwYTJkMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVhZSB9LAorICAgIHsgMHgwMDAwYTJiZiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYmUsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDBhMmM2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NWFjIH0sCisgICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJjMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYzIsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDBhMmM3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NWJiIH0sCisgICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHg4NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAzMDRhLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMTAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NWMxIH0sCisgICAgeyAweGE0MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NWM2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMzYyMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWNkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDQwMzYyMSwgMHg1ZTAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3ZTAwLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NWUwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwOTIsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDMxLCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTA5MywgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMzIsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmI2LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAzMywgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYmEsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDM0LCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiZSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMzUsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmMyLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAzNiwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWY0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MjkgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MjkgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2UwMCwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYwMiB9LAorICAgIHsgMHgwMDAwYTA5MiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzEsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDkzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMiwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYjYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMzLCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJiYSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzQsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmJlLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzNSwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYzIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM2LCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAxZmYsIDB4MDAyODA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MjggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDYwYiB9LAorICAgIHsgMHgwMDA0YTAwMywgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEwMDMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjEwIH0sCisgICAgeyAweDAwMDRhMDEwLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjI4IH0sCisgICAgeyAweDAwMDRhMDExLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTAxMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDEyLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTAxMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDEzLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTAxMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDE0LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTAxNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDE1LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTAxNSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDE2LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTAxNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDE3LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTAxNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAyYywgMHgwMDgwMDYyZCwgMHgwMDAgfSwKKyAgICB7IDB4ZmYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDYzYSB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyODA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MzggfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDEwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJiLCAweDAwMjAzNjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2M2UgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWM2IH0sCisgICAgeyAweDk4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NjNlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg5MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwNDgxMSwgMHg2MmEgfSwKKyAgICB7IDB4OTcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MTEsIDB4NjJhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY1OSB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNmUgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDEwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwOTgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmZmZmYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDA0MDRjMTEsIDB4NjUzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyOTFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmZmZmIsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyOTFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmZmZjcsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNmUgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDEwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDE4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2ODkgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDA0MDRjMTEsIDB4NjZmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgzOGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjAsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAzMDEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMDY0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg2ODggfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxMjIyLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTEwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwNDAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjhhIH0sCisgICAgeyAweDlmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NjhkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxYWMwMDAwMCwgMHg2OGYgfSwKKyAgICB7IDB4OWUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxYWUwMDAwMCwgMHg2OTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMTAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDE0MjA0ZmYsIDB4MDViZDAyNTAsIDB4MDAwIH0sCisgICAgeyAweDAxYzMwMTY4LCAweDA0M2YwNWJkLCAweDAwMCB9LAorICAgIHsgMHgwMjI1MDIwOSwgMHgwMjUwMDE1MSwgMHgwMDAgfSwKKyAgICB7IDB4MDIyMzAyNDUsIDB4MDJhMDAyNDEsIDB4MDAwIH0sCisgICAgeyAweDAzZDcwNWJkLCAweDA1YmQwNWJkLCAweDAwMCB9LAorICAgIHsgMHgwNjQ2MDY0NywgMHgwMzFmMDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDViZDA1YzIsIDB4MDMyMDAzNDAsIDB4MDAwIH0sCisgICAgeyAweDAzMmEwMjgyLCAweDAzNDIwMzM0LCAweDAwMCB9LAorICAgIHsgMHgwNWJkMDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDViZDA1NGUsIDB4MDViZDA1YmQsIDB4MDAwIH0sCisgICAgeyAweDAzYmEwNWJkLCAweDA0YjgwMzQ0LCAweDAwMCB9LAorICAgIHsgMHgwNDk3MDQ0ZCwgMHgwNDNkMDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDRjZDA1YmQsIDB4MDQ0MTA0ZGEsIDB4MDAwIH0sCisgICAgeyAweDA0NGQwNTA0LCAweDAzNTEwMzc1LCAweDAwMCB9LAorICAgIHsgMHgwNWJkMDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDViZDA1YmQsIDB4MDViZDA1YmQsIDB4MDAwIH0sCisgICAgeyAweDA1YmQwNWJkLCAweDA2M2MwNWM0LCAweDAwMCB9LAorICAgIHsgMHgwNWJkMDViZCwgMHgwMDA3MDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDViZDA1YmQsIDB4MDViZDA1YmQsIDB4MDAwIH0sCisgICAgeyAweDA1YmQwNWJkLCAweDA1YmQwNWJkLCAweDAwMCB9LAorICAgIHsgMHgwM2Y4MDNlZCwgMHgwNDA4MDQwNiwgMHgwMDAgfSwKKyAgICB7IDB4MDQwZTA0MGEsIDB4MDQwYzA0MTAsIDB4MDAwIH0sCisgICAgeyAweDA0MWMwNDE4LCAweDA0MjQwNDIwLCAweDAwMCB9LAorICAgIHsgMHgwNDJjMDQyOCwgMHgwNDM0MDQzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDViZDA1YmQsIDB4MDQzODA1YmQsIDB4MDAwIH0sCisgICAgeyAweDA1YmQwNWJkLCAweDA1YmQwNWJkLCAweDAwMCB9LAorICAgIHsgMHgwNWJkMDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMjA2NzYsIDB4MDY5NDAwMDYsIDB4MDAwIH0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIFJWNjMwX3BmcF9taWNyb2NvZGVbXSA9IHsKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4N2MwMzhiLAorMHg4MDAxYjgsCisweDdjMDM4YiwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGM0MTgzOCwKKzB4Y2EyNDAwLAorMHhjYTI4MDAsCisweDk1ODFhOCwKKzB4YzQxYzNhLAorMHhjM2MwMDAsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHg3Yzc0NGIsCisweGMyMDAwNSwKKzB4OTljMDAwLAorMHhjNDFjM2EsCisweDdjNzQ0YywKKzB4YzBmZmYwLAorMHgwNDJjMDQsCisweDMwOTAwMiwKKzB4N2QyNTAwLAorMHgzNTE0MDIsCisweDdkMzUwYiwKKzB4MjU1NDAzLAorMHg3Y2Q1ODAsCisweDI1OWMwMywKKzB4OTVjMDA0LAorMHhkNTAwMWIsCisweDdlZGRjMSwKKzB4N2Q5ZDgwLAorMHhkNjgwMWIsCisweGQ1ODAxYiwKKzB4ZDQ0MDFlLAorMHhkNTQwMWUsCisweGQ2NDAxZSwKKzB4ZDY4MDFlLAorMHhkNDgwMWUsCisweGQ0YzAxZSwKKzB4OTc4M2QzLAorMHhkNWMwMWUsCisweGNhMDgwMCwKKzB4ODAwMDFhLAorMHhjYTBjMDAsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHg4MDAwMGMsCisweGM0MTgzOCwKKzB4ZTQwMTNlLAorMHhkNDAwMWUsCisweDgwMDAwYywKKzB4YzQxODM4LAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhlNDAxM2UsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGNhMTgwMCwKKzB4ZDQ0MDFlLAorMHhkNTgwMWUsCisweDgwMDA1MywKKzB4ZDQwMDc1LAorMHhkNDQwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweGQ0ODAxOSwKKzB4ZDRjMDE4LAorMHhkNTAwMTcsCisweGQ0ODAxZSwKKzB4ZDRjMDFlLAorMHhkNTAwMWUsCisweGUyMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4Y2EwODAwLAorMHhkNDgwNjAsCisweGQ0NDAxZSwKKzB4ODAwMDAwLAorMHhkNDgwMWUsCisweGNhMDgwMCwKKzB4ZDQ4MDYxLAorMHhkNDQwMWUsCisweDgwMDAwMCwKKzB4ZDQ4MDFlLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4ZDQ0MDFlLAorMHhkNDgwMTYsCisweGQ0YzAxNiwKKzB4ZDQ4MDFlLAorMHg4MDAxYjgsCisweGQ0YzAxZSwKKzB4YzYwODQzLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4OTQ4MDA0LAorMHhjYTE0MDAsCisweGU0MjBmMywKKzB4ZDQyMDEzLAorMHhkNTYwNjUsCisweGQ0ZTAxYywKKzB4ZDUyMDFjLAorMHhkNTYwMWMsCisweDgwMDAwMCwKKzB4MDYyMDAxLAorMHhjNjA4NDMsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHg5NDgzZjcsCisweGNhMTQwMCwKKzB4ZTQyMGYzLAorMHg4MDAwNzksCisweGQ0MjAxMywKKzB4YzYwODQzLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4OTg4M2VmLAorMHhjYTE0MDAsCisweGQ0MDA2NCwKKzB4ODAwMDhkLAorMHgwMDAwMDAsCisweGM0MTQzMiwKKzB4YzYxODQzLAorMHhjNDA4MmYsCisweDk1NDAwNSwKKzB4YzQwYzMwLAorMHhkNDQwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHg5NTgzZjUsCisweGM0MTAzMSwKKzB4ZDQ0MDMzLAorMHhkNTIwNjUsCisweGQ0YTAxYywKKzB4ZDRlMDFjLAorMHhkNTIwMWMsCisweGU0MDE1ZSwKKzB4ZDQwMDFlLAorMHg4MDAwMDAsCisweDA2MjAwMSwKKzB4Y2ExODAwLAorMHgwYTIwMDEsCisweGQ2MDA3NiwKKzB4YzQwODM2LAorMHg5ODgwMDcsCisweGM2MTA0NSwKKzB4OTUwMTEwLAorMHhkNDAwMWYsCisweGQ0NjA2MiwKKzB4ODAwMDAwLAorMHhkNDIwNjIsCisweGNjMzgzNSwKKzB4Y2MxNDMzLAorMHg4NDAxYmIsCisweGQ0MDA3MiwKKzB4ZDU0MDFlLAorMHg4MDAwMDAsCisweGVlMDAxZSwKKzB4ZTIwMDFhLAorMHg4NDAxYmIsCisweGUyMDAxYSwKKzB4Y2MxMDRiLAorMHhjYzA0NDcsCisweDJjOTQwMSwKKzB4N2QwOThiLAorMHg5ODQwMDUsCisweDdkMTVjYiwKKzB4ZDQwMDFhLAorMHg4MDAxYjgsCisweGQ0MDA2ZCwKKzB4MzQ0NDAxLAorMHhjYzBjNDgsCisweDk4NDAzYSwKKzB4Y2MyYzRhLAorMHg5NTgwMDQsCisweGNjMDQ0OSwKKzB4ODAwMWI4LAorMHhkNDAwMWEsCisweGQ0YzAxYSwKKzB4MjgyODAxLAorMHg4NDAwZjAsCisweGNjMTAwMywKKzB4OTg4MDFiLAorMHgwNDM4MGMsCisweDg0MDBmMCwKKzB4Y2MxMDAzLAorMHg5ODgwMTcsCisweDA0MzgwOCwKKzB4ODQwMGYwLAorMHhjYzEwMDMsCisweDk4ODAxMywKKzB4MDQzODA0LAorMHg4NDAwZjAsCisweGNjMTAwMywKKzB4OTg4MDE0LAorMHhjYzEwNGMsCisweDlhODAwOSwKKzB4Y2MxNDRkLAorMHg5ODQwZGMsCisweGQ0MDA2ZCwKKzB4Y2MxODQ4LAorMHhkNTAwMWEsCisweGQ1NDAxYSwKKzB4ODAwMGM5LAorMHhkNTgwMWEsCisweDk2YzBkNSwKKzB4ZDQwMDZkLAorMHg4MDAxYjgsCisweGQ0MDA2ZSwKKzB4OWFjMDAzLAorMHhkNDAwNmQsCisweGQ0MDA2ZSwKKzB4ODAwMDAwLAorMHhlYzAwN2YsCisweDlhYzBjYywKKzB4ZDQwMDZkLAorMHg4MDAxYjgsCisweGQ0MDA2ZSwKKzB4Y2MxNDAzLAorMHhjYzE4MDMsCisweGNjMWMwMywKKzB4N2Q5MTAzLAorMHg3ZGQ1ODMsCisweDdkMTkwYywKKzB4MzVjYzFmLAorMHgzNTcwMWYsCisweDdjZjBjYiwKKzB4N2NkMDhiLAorMHg4ODAwMDAsCisweDdlOGU4YiwKKzB4OTVjMDA0LAorMHhkNDAwNmUsCisweDgwMDFiOCwKKzB4ZDQwMDFhLAorMHhkNGMwMWEsCisweGNjMDgwMywKKzB4Y2MwYzAzLAorMHhjYzEwMDMsCisweGNjMTQwMywKKzB4Y2MxODAzLAorMHhjYzFjMDMsCisweGNjMjQwMywKKzB4Y2MyODAzLAorMHgzNWM0MWYsCisweDM2YjAxZiwKKzB4N2M3MDRiLAorMHgzNGYwMWYsCisweDdjNzA0YiwKKzB4MzU3MDFmLAorMHg3YzcwNGIsCisweDdkODg4MSwKKzB4N2RjY2MxLAorMHg3ZTUxMDEsCisweDdlOTU0MSwKKzB4N2M5MDgyLAorMHg3Y2Q0YzIsCisweDdjODQ4YiwKKzB4OWFjMDAzLAorMHg3YzhjOGIsCisweDJjODgwMSwKKzB4OTg4MDllLAorMHhkNDAwNmQsCisweDk4NDA5YywKKzB4ZDQwMDZlLAorMHhjYzA4NGMsCisweGNjMGM0ZCwKKzB4Y2MxMDQ4LAorMHhkNDgwMWEsCisweGQ0YzAxYSwKKzB4ODAwMTAxLAorMHhkNTAwMWEsCisweGNjMDgzMiwKKzB4ZDQwMDMyLAorMHg5NDgyZDksCisweGNhMGMwMCwKKzB4ZDQ0MDFlLAorMHg4MDAwMDAsCisweGQ0MDAxZSwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweGQ0NDAxZSwKKzB4Y2ExNDAwLAorMHhkNDgwMWUsCisweGQ0YzAxZSwKKzB4ZDUwMDFlLAorMHhkNTQwMWUsCisweGQ1NDAzNCwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweDI4MDQwNCwKKzB4ZTIwMDFhLAorMHhlMjAwMWEsCisweGQ0NDAxYSwKKzB4Y2EzODAwLAorMHhjYzA4MDMsCisweGNjMGMwMywKKzB4Y2MwYzAzLAorMHhjYzBjMDMsCisweDk4ODJiZCwKKzB4MDAwMDAwLAorMHg4NDAxYmIsCisweGQ3YTA2ZiwKKzB4ODAwMDAwLAorMHhlZTAwMWYsCisweGNhMDQwMCwKKzB4YzJmZjAwLAorMHhjYzA4MzQsCisweGMxM2ZmZiwKKzB4N2M3NGNiLAorMHg3Y2M5MGIsCisweDdkMDEwZiwKKzB4OTkwMmIwLAorMHg3YzczOGIsCisweDg0MDFiYiwKKzB4ZDdhMDZmLAorMHg4MDAwMDAsCisweGVlMDAxZiwKKzB4Y2EwODAwLAorMHgyODE5MDAsCisweDdkODk4YiwKKzB4OTU4MDE0LAorMHgyODE0MDQsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHhjYTFjMDAsCisweGNhMjQwMCwKKzB4ZTIwMDFmLAorMHhkNGMwMWEsCisweGQ1MDAxYSwKKzB4ZDU0MDFhLAorMHhjYzE4MDMsCisweGNjMmMwMywKKzB4Y2MyYzAzLAorMHhjYzJjMDMsCisweDdkYTU4YiwKKzB4N2Q5YzQ3LAorMHg5ODQyOTcsCisweDAwMDAwMCwKKzB4ODAwMTYxLAorMHhkNGMwMWEsCisweGQ0NDAxZSwKKzB4ZDQ4MDFlLAorMHg4MDAwMDAsCisweGVlMDAxZSwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhlNDAxM2UsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGNhMDgwMCwKKzB4MjQ4YzA2LAorMHgwY2NjMDYsCisweDk4YzAwNiwKKzB4Y2MxMDRlLAorMHg5OTAwMDQsCisweGQ0MDA3MywKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZDQ4MDFlLAorMHg4MDAwMDAsCisweGVlMDAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweDM0ZDAxOCwKKzB4MjUxMDAxLAorMHg5NTAwMjEsCisweGMxN2ZmZiwKKzB4Y2ExMDAwLAorMHhjYTE0MDAsCisweGNhMTgwMCwKKzB4ZDQ4MDFkLAorMHhkNGMwMWQsCisweDdkYjE4YiwKKzB4YzE0MjAyLAorMHhjMmMwMDEsCisweGQ1ODAxZCwKKzB4MzRkYzBlLAorMHg3ZDVkNGMsCisweDdmNzM0YywKKzB4ZDc0MDFlLAorMHhkNTAwMWUsCisweGQ1NDAxZSwKKzB4YzE0MjAwLAorMHhjMmMwMDAsCisweDA5OWMwMSwKKzB4MzFkYzEwLAorMHg3ZjVmNGMsCisweDdmNzM0YywKKzB4MDQyODAyLAorMHg3ZDgzODAsCisweGQ1YTg2ZiwKKzB4ZDU4MDY2LAorMHhkNzQwMWUsCisweGVjMDA1ZSwKKzB4YzgyNDAyLAorMHhjODI0MDIsCisweDgwMDFiOCwKKzB4ZDYwMDc2LAorMHhkNDQwMWUsCisweGQ0ODAxZSwKKzB4ZDRjMDFlLAorMHg4MDAwMDAsCisweGVlMDAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWYsCisweGQ0MDAxZiwKKzB4ODAwMDAwLAorMHhkNDAwMWYsCisweGQ0MDAxZiwKKzB4ODgwMDAwLAorMHhkNDAwMWYsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAxMDE3MSwKKzB4MDIwMTc4LAorMHgwMzAwOGYsCisweDA0MDA3ZiwKKzB4MDUwMDAzLAorMHgwNjAwM2YsCisweDA3MDAzMiwKKzB4MDgwMTJjLAorMHgwOTAwNDYsCisweDBhMDAzNiwKKzB4MTAwMWI2LAorMHgxNzAwYTIsCisweDIyMDEzYSwKKzB4MjMwMTQ5LAorMHgyMDAwYjQsCisweDI0MDEyNSwKKzB4MjcwMDRkLAorMHgyODAwNmEsCisweDJhMDA2MCwKKzB4MmIwMDUyLAorMHgyZjAwNjUsCisweDMyMDA4NywKKzB4MzQwMTdmLAorMHgzYzAxNTYsCisweDNmMDA3MiwKKzB4NDEwMThjLAorMHg0NDAxMmUsCisweDU1MDE3MywKKzB4NTYwMTdhLAorMHg2MDAwMGIsCisweDYxMDAzNCwKKzB4NjIwMDM4LAorMHg2MzAwMzgsCisweDY0MDAzOCwKKzB4NjUwMDM4LAorMHg2NjAwMzgsCisweDY3MDAzOCwKKzB4NjgwMDNhLAorMHg2OTAwNDEsCisweDZhMDA0OCwKKzB4NmIwMDQ4LAorMHg2YzAwNDgsCisweDZkMDA0OCwKKzB4NmUwMDQ4LAorMHg2ZjAwNDgsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgUlY2MzVfY3BfbWljcm9jb2RlW11bM10gPSB7CisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODQ2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAxMDAwMCwgMHhjMDI5NDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjJlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDBmMDAsIDB4MDAyODE2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjExNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4OGQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMTggfSwKKyAgICB7IDB4MDA0MTIwMDAsIDB4MDA0MDQ4MTEsIDB4MDE5IH0sCisgICAgeyAweDAwNDIyMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4ZTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjgsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDkwMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMTE2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIxMWEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyODFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTE0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjExNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZjLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDIyMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCisgICAgeyAweDIwMDAwMDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIxMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjIwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwMzggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDM1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDAzNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA5LCAweDAwNDAxMjJkLCAweDA0NiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwMzkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwM2ZmZmZjLCAweDAwMjgxMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDAzZSB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDQwMWMxMSwgMHgwNDEgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4N2ZjMDAwMDAsIDB4MDAyODFhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjExYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkwY2M3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODEyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxNDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwNGIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyOTBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBlLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmODAwMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2EyYzAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMGUyYiwgMHgwMDAgfSwKKyAgICB7IDB4ZmMwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMWZmZiwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA2MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwNWYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDVlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwZTJkLCAweDA2MiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDQwMGUyZCwgMHgwNjIgfSwKKyAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBiLCAweDAwNDAxMjJkLCAweDA2YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAzZmZmZmMsIDB4MDAyODEyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxMjI0LCAweDAwMCB9LAorICAgIHsgMHg3ZmMwMDAwMCwgMHgwMDI4MTYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMxNjI1LCAweDAwMCB9LAorICAgIHsgMHg4MDAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjYTMsIDB4MDAwIH0sCisgICAgeyAweDNmZmZmYzAwLCAweDAwMjkwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDZkIH0sCisgICAgeyAweDAwMDAwMTAwLCAweDAwNDAxYzExLCAweDA3MCB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmMGZmLCAweDAwMjgxYTMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAyOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDE4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgzZmZmZmZmZiwgMHgwMDI4NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyOTE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4MyB9LAorICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMTYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYTQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDA4NCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwOGEgfSwKKyAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA4YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NjUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjU5IH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOGQgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4YzA0MDM2MjAsIDB4MDkzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA5MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwOTAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDA0MDBlMmQsIDB4MDkyIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwNDAwZTJkLCAweDA5MiB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwOTggfSwKKyAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwYTAgfSwKKyAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwOWUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDlkIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwNDAwZTJkLCAweDA5ZiB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDQwMGUyZCwgMHgwOWYgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAzZjAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhNyB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBhYSB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTBlMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDdmLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGUxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDI3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDBiMyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWUzMCwgMHgwMDAgfSwKKyAgICB7IDB4OTk4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxY2U0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwNywgMHgxMmYgfSwKKyAgICB7IDB4OWIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHg5YzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzE0NmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDNjMDUsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDEwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDA3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGNiIH0sCisgICAgeyAweDAwZjhmZjA4LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg5ODAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwZGMgfSwKKyAgICB7IDB4MDAwMDAwZjAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGEwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwZGEgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZDUgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBkNCB9LAorICAgIHsgMHgwMDAwM2YwMCwgMHgwMDQwMGMxMSwgMHgwZDYgfSwKKyAgICB7IDB4MDAwMDFmMDAsIDB4MDA0MDBjMTEsIDB4MGQ2IH0sCisgICAgeyAweDAwMDAwZjAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDM4MDAwOSwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4M2YwMDAwMDAsIDB4MDAyODBlMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDQ5NGEyMywgMHgwZGMgfSwKKyAgICB7IDB4MDAzODBmMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDY4MDAwMDA3LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMjAyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMGZmMDAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwODAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI3LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwODMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBlYSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NWYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MGViIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY2MiB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMjBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMTAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjA2OCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTBjMDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGVmLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjA2OCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwZjggfSwKKyAgICB7IDB4MDAwMDAwMGIsIDB4MDAyMTAyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBmOCB9LAorICAgIHsgMHgwMDAwMDQwMCwgMHgwMDI5MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwZmQgfSwKKyAgICB7IDB4MDAwMGEzMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTBiIH0sCisgICAgeyAweDAwMDBhMzBmLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwNCB9LAorICAgIHsgMHhmZmZmZmZmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwNyB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDEwYSB9LAorICAgIHsgMHgwMDAwMDBmZiwgMHgwMDQwNDgxMSwgMHgxMGIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDJjNDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTEyIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMjRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwNDI0YTIwLCAweDExNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDEwMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxMWIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMxMjI0LCAweDExNyB9LAorICAgIHsgMHhmZmJmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDEyZSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjIwZTMwLCAweDAwMCB9LAorICAgIHsgMHhmYzAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMGUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDA3ZjhmZjA4LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDY4OSB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNGMxMSwgMHgxMzUgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MTNjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTYwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODA2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjEwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MTQ2MSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3NDE4ODIsIDB4MmJiIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTQ3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxNjAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzA2ODFhMjAsIDB4MmJiIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTU4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMDBhMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxOGYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWEwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDJjMDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMWUyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MDQ4ZWIsIDB4MTljIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiYiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHg0MDMzMDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAzMDI0MDksIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgxODEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDE4NiB9LAorICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDE4NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzA2MjEsIDB4MTgyIH0sCisgICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHgxOTcgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc4MDQyYSwgMHgyZmIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDksIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNzQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMjEwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTk0IH0sCisgICAgeyAweDAwMDAwMDE1LCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4M2Y4MDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDQ2MDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxOWIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgxNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDgxMWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMWUzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhmZmZiZmYwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxZmZmLCAweDAwMjk0YTI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAxMDAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwNjIxZTI4LCAweDEyZiB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDgyMjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMmMwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE1LCAweDAwNjAwZTJkLCAweDFiZCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwMGUyZCwgMHgxYmQgfSwKKyAgICB7IDB4MDAwMGMwMDgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxYjkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAorICAgIHsgMHgzOTAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwMmUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYjBkNjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjI0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDEwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMTA2MmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEzLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODIyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjYyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMjYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjI2MjksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZTAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDgxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDgwLCAweDAwMjAxYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWRjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFlOSB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMWUyNywgMHgxZDggfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjgwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDI4MmEyYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzA2MjEsIDB4MWQxIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDMwNGEyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMwMWUyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxZTkgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzFlMjcsIDB4MWU1IH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjYxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDE4MTEsIDB4MmJiIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWY4IH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxNjI4LCAweDAwMCB9LAorICAgIHsgMHhmZmZmMDAwMCwgMHgwMDI4MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFhMjksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxNjIzLCAweDAwMCB9LAorICAgIHsgMHhmZmZmMDAwMCwgMHgwMDI4MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDczMTUwMywgMHgyMDUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzMxNTI0LCAweDIwNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMTRjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDIwMDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAyNDA0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4Njg5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmIxNDA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDkwMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDI5NGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDM4NGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTFhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3NDE0NjUsIDB4MmJiIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDIxOSB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjEyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDA0MGYsIDB4MjEzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYyZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NDIgfSwKKyAgICB7IDB4MDAwMDAyMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFhMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxOWMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmJiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAorICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgyMzIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDIzNiB9LAorICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDIzNiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgyMzMgfSwKKyAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MmZiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MmUgfSwKKyAgICB7IDB4MDAwMGEwMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDQwMjEwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MjRjIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDA4MDEwMSwgMHgwMDI5MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMzBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDI1MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDNmODAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyN2MgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjExZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyNmEgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MWMyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjVmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDhjMDAwMDAsIDB4MjYyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQxYzQ3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNjcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwOGMwMDAwMCwgMHgyNmEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJjMSB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjA0NCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjcxIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNDA0ODExLCAweDI3NiB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDQwNDgxMSwgMHgyNzYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwNDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3NSB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDQwNDgxMSwgMHgyNzYgfSwKKyAgICB7IDB4MDAwMDAwMTksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmU5IH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyNTYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzA4ODFhMjAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYyZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHgyYTMgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3MDAwLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNlNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmEsIDB4MDAyMDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjIxYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4MjkyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjAxODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDY5MWNlMiwgMHgxMmYgfSwKKyAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg5NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDI5ZCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDA0MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweGMwMjIwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMzYyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjgsIDB4YzA0MDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YTEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYzFjZTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYzFjZTQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmQxZDA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMWQwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmQ5IH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyZDkgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAyYzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGU4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNmMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGUyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMmMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGMyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY2NSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYjUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NWMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwODAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg0NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg0NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzAwOGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzODA4YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzAwODQxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzA4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzMTggfSwKKyAgICB7IDB4ZmZmZmZmZWYsIDB4MDAyODA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjhlMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4OTcwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4YzA0ODRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjQyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDQwMzA0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHhjMDMwNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzBhMjIsIDB4MzRiIH0sCisgICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzNTQgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM2NCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwMiwgMHgzNmUgfSwKKyAgICB7IDB4MDAwMDIxMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MzZhIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDM1ZiB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWJkIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgzNWYgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDM2MjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDQ5LCAweDAwMjAxODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNzAgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4Mzg2IH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYjEgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNiNSB9LAorICAgIHsgMHgwMDAwMDAyMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzljIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYTggfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhOCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzkwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDgwMDAwMDAsIDB4MDAyOTBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwODAwMDAsIDB4MDAyODEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweGMwMjIxNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRhNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM5MiB9LAorICAgIHsgMHgwMDAwMjEwZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM5ZSB9LAorICAgIHsgMHgwMDAwMjEwOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4ODAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzYWUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNmUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDNjZSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzYzAgfSwKKyAgICB7IDB4MDAwMDIxMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4YmFiZWNhZmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNzAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBhLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2QzIH0sCisgICAgeyAweDhjMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODAwMDAwMDAsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDQwMDAwMDAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZTEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDE4MDAsIDB4M2U0IH0sCisgICAgeyAweDAwMDAzZmZmLCAweGMwMjgxYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNiwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZTcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDFjMDAsIDB4M2VhIH0sCisgICAgeyAweDAwMDAzZmZmLCAweGMwMjgxZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNywgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjBjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0OTQ4ZTgsIDB4MDAwIH0sCisgICAgeyAweGE1ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDEyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweGMwMjEwMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzZjcgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDQ4MTIyMCwgMHgzZmYgfSwKKyAgICB7IDB4YTc4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDg4MywgMHgwMDAgfSwKKyAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDEyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHhhOTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGMwMDAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweGFiODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjhlMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4YWQ4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmODgwLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHhiMzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGYzZmMsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweGFmODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4YjE4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmMDAwLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg0MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWQwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMTE4MjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDIxOGEwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAzMThjMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwNDE4ZjhlMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDUxOGY4ODAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDA2MThlMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwNzE4ZjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDgxOGYzZmMsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDI5MGM0MCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4ODYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAorICAgIHsgMHg4NTAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDRjMDIsIDB4NDQ4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NTYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDIwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDI4MGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ1ZSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI0LCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0NjMgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODA1LCAweDY4ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjRmMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDAyODBhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NmEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA0ZTAwMDAwLCAweDQ4MyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ2ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDJlMDAwMDAsIDB4NDgzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDc0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0ODMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NzkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4MyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OTAgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4NDgzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5MCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDgzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwOGUwMDAwMCwgMHg0ODMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDkwIH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjEwYTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0OGQgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ5NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNGMwOCwgMHg0NTYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHg0MDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDRhMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHhjMDQ5NGEyMCwgMHg0YTEgfSwKKyAgICB7IDB4ZmZmYmZmZmYsIDB4YzAyODRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0YWQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRhOSB9LAorICAgIHsgMHhhMDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0YTcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMTBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRjMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4NjhmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRjNCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRjYiB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGNkIH0sCisgICAgeyAweDAwMDAyMTgwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzMzZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NGZkIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgxOGUwMGMxMSwgMHg0ZWMgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDhjMDQ4MDAsIDB4NGUwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJkLCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGM4MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0YTcgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJkLCAweGMwNDAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTAyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweGI1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YjYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiNzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGMwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGI4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjhlMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YjkwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmODgwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiYTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGJiMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YmMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmM2ZjLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGZmLCAweDAwMjgwZTMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTE2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1MmIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI4LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweGZmZmZlMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxZmZmLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweGYxZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHhjMDIyMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmEsIDB4NDAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDg3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZjQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDlkMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHg0MDIxNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4OTYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDEwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjExNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMjIyMywgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmYwMDAsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMGU4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIwLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDE0YTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMWEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MTAwMDAwMDAsIDB4MDAyODFhMjYsIDB4MDAwIH0sCisgICAgeyAweGVmZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQ5MzhjZSwgMHg2NzggfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4NDAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDMwMCwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDU2MyB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU4LCAweDAwMzAwYTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAyMDAwMCwgMHgwMDI5NGEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTZiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1NzkgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU2YiB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU4LCAweDAwMzAwYTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU3OSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTZmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1NzkgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU3NyB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4NjhmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAxYzEwLCAweDU3OSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDU3YiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YzYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU4YyB9LAorICAgIHsgMHgwMDAwYTJiNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYjYsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDBhMmM0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NThhIH0sCisgICAgeyAweDAwMDBhMmQxLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTlkIH0sCisgICAgeyAweDAwMDBhMmJiLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiYSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEyYzUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1OWIgfSwKKyAgICB7IDB4MDAwMGEyZDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJkMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YWUgfSwKKyAgICB7IDB4MDAwMGEyYmYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmJlLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTJjNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDVhYyB9LAorICAgIHsgMHgwMDAwYTJkMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYzMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmMyLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwYTJjNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDViYiB9LAorICAgIHsgMHgwMDAwYTJkNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4ODUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMzA0YSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDEwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDVjMSB9LAorICAgIHsgMHhhNDAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDVjNiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDM2MjEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVjZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDA0MDM2MjEsIDB4NWUwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2UwMCwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDVlMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDkyLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAzMSwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwOTMsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDMyLCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiNiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMzMsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmJhLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAzNCwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYmUsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAwMDM1LCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJjMiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMzYsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjI5IH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjI5IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdlMDAsIDB4MDAyODA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg2MDIgfSwKKyAgICB7IDB4MDAwMGEwOTIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMxLCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTA5MywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzIsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmI2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMywgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYmEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM0LCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJiZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzUsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmMyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzNiwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMWZmLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjI4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MGIgfSwKKyAgICB7IDB4MDAwNGEwMDMsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDBhMDAzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDYxMCB9LAorICAgIHsgMHgwMDA0YTAxMCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYyOCB9LAorICAgIHsgMHgwMDA0YTAxMSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEwMTEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxMiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEwMTIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxMywgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEwMTMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEwMTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNSwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEwMTUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNiwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEwMTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNywgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMGEwMTcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2OGEgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDA2MmQsIDB4MDAwIH0sCisgICAgeyAweGZmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwZWUwMDAwMCwgMHg2M2EgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjM4IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjhhIH0sCisgICAgeyAweDAwMDAxMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjNlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjNiB9LAorICAgIHsgMHg5ODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDYzZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4OTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDQ4MTEsIDB4NjJhIH0sCisgICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDYyYSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NTkgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzZlIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDk4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwNDA0YzExLCAweDY1MyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjkxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZiLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjkxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmY3LCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4MzZlIH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAxODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDY4YSB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4Njg5IH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwNDA0YzExLCAweDY2ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MzhjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFkLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIwLCAweDAwMjAxNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMzAxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDA2NCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4Njg4IH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMTIyMiwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmYwMDAsIDB4MDAyODEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDQwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFhYzAwMDAwLCAweDY4YSB9LAorICAgIHsgMHg5ZjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFhZTAwMDAwLCAweDY4ZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjhmIH0sCisgICAgeyAweDllMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NjkyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDEwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAxNDIwNGZmLCAweDA1YmQwMjUwLCAweDAwMCB9LAorICAgIHsgMHgwMWMzMDE2OCwgMHgwNDNmMDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDIyNTAyMDksIDB4MDI1MDAxNTEsIDB4MDAwIH0sCisgICAgeyAweDAyMjMwMjQ1LCAweDAyYTAwMjQxLCAweDAwMCB9LAorICAgIHsgMHgwM2Q3MDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDY0NjA2NDcsIDB4MDMxZjA1YmQsIDB4MDAwIH0sCisgICAgeyAweDA1YmQwNWMyLCAweDAzMjAwMzQwLCAweDAwMCB9LAorICAgIHsgMHgwMzJhMDI4MiwgMHgwMzQyMDMzNCwgMHgwMDAgfSwKKyAgICB7IDB4MDViZDA1YmQsIDB4MDViZDA1YmQsIDB4MDAwIH0sCisgICAgeyAweDA1YmQwNTRlLCAweDA1YmQwNWJkLCAweDAwMCB9LAorICAgIHsgMHgwM2JhMDViZCwgMHgwNGI4MDM0NCwgMHgwMDAgfSwKKyAgICB7IDB4MDQ5NzA0NGQsIDB4MDQzZDA1YmQsIDB4MDAwIH0sCisgICAgeyAweDA0Y2QwNWJkLCAweDA0NDEwNGRhLCAweDAwMCB9LAorICAgIHsgMHgwNDRkMDUwNCwgMHgwMzUxMDM3NSwgMHgwMDAgfSwKKyAgICB7IDB4MDViZDA1YmQsIDB4MDViZDA1YmQsIDB4MDAwIH0sCisgICAgeyAweDA1YmQwNWJkLCAweDA1YmQwNWJkLCAweDAwMCB9LAorICAgIHsgMHgwNWJkMDViZCwgMHgwNjNjMDVjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDViZDA1YmQsIDB4MDAwNzA1YmQsIDB4MDAwIH0sCisgICAgeyAweDA1YmQwNWJkLCAweDA1YmQwNWJkLCAweDAwMCB9LAorICAgIHsgMHgwNWJkMDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDNmODAzZWQsIDB4MDQwODA0MDYsIDB4MDAwIH0sCisgICAgeyAweDA0MGUwNDBhLCAweDA0MGMwNDEwLCAweDAwMCB9LAorICAgIHsgMHgwNDFjMDQxOCwgMHgwNDI0MDQyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDQyYzA0MjgsIDB4MDQzNDA0MzAsIDB4MDAwIH0sCisgICAgeyAweDA1YmQwNWJkLCAweDA0MzgwNWJkLCAweDAwMCB9LAorICAgIHsgMHgwNWJkMDViZCwgMHgwNWJkMDViZCwgMHgwMDAgfSwKKyAgICB7IDB4MDViZDA1YmQsIDB4MDViZDA1YmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDIwNjc2LCAweDA2OTQwMDA2LCAweDAwMCB9LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBSVjYzNV9wZnBfbWljcm9jb2RlW10gPSB7CisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweDdjMDM4YiwKKzB4ODAwMWI4LAorMHg3YzAzOGIsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjNDE4MzgsCisweGNhMjQwMCwKKzB4Y2EyODAwLAorMHg5NTgxYTgsCisweGM0MWMzYSwKKzB4YzNjMDAwLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4N2M3NDRiLAorMHhjMjAwMDUsCisweDk5YzAwMCwKKzB4YzQxYzNhLAorMHg3Yzc0NGMsCisweGMwZmZmMCwKKzB4MDQyYzA0LAorMHgzMDkwMDIsCisweDdkMjUwMCwKKzB4MzUxNDAyLAorMHg3ZDM1MGIsCisweDI1NTQwMywKKzB4N2NkNTgwLAorMHgyNTljMDMsCisweDk1YzAwNCwKKzB4ZDUwMDFiLAorMHg3ZWRkYzEsCisweDdkOWQ4MCwKKzB4ZDY4MDFiLAorMHhkNTgwMWIsCisweGQ0NDAxZSwKKzB4ZDU0MDFlLAorMHhkNjQwMWUsCisweGQ2ODAxZSwKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweDk3ODNkMywKKzB4ZDVjMDFlLAorMHhjYTA4MDAsCisweDgwMDAxYSwKKzB4Y2EwYzAwLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4ODAwMDBjLAorMHhjNDE4MzgsCisweGU0MDEzZSwKKzB4ZDQwMDFlLAorMHg4MDAwMGMsCisweGM0MTgzOCwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4ZTQwMTNlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjYTE4MDAsCisweGQ0NDAxZSwKKzB4ZDU4MDFlLAorMHg4MDAwNTMsCisweGQ0MDA3NSwKKzB4ZDQ0MDFlLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHhkNDgwMTksCisweGQ0YzAxOCwKKzB4ZDUwMDE3LAorMHhkNDgwMWUsCisweGQ0YzAxZSwKKzB4ZDUwMDFlLAorMHhlMjAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGNhMDgwMCwKKzB4ZDQ4MDYwLAorMHhkNDQwMWUsCisweDgwMDAwMCwKKzB4ZDQ4MDFlLAorMHhjYTA4MDAsCisweGQ0ODA2MSwKKzB4ZDQ0MDFlLAorMHg4MDAwMDAsCisweGQ0ODAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweGQ0NDAxZSwKKzB4ZDQ4MDE2LAorMHhkNGMwMTYsCisweGQ0ODAxZSwKKzB4ODAwMWI4LAorMHhkNGMwMWUsCisweGM2MDg0MywKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweDk0ODAwNCwKKzB4Y2ExNDAwLAorMHhlNDIwZjMsCisweGQ0MjAxMywKKzB4ZDU2MDY1LAorMHhkNGUwMWMsCisweGQ1MjAxYywKKzB4ZDU2MDFjLAorMHg4MDAwMDAsCisweDA2MjAwMSwKKzB4YzYwODQzLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4OTQ4M2Y3LAorMHhjYTE0MDAsCisweGU0MjBmMywKKzB4ODAwMDc5LAorMHhkNDIwMTMsCisweGM2MDg0MywKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweDk4ODNlZiwKKzB4Y2ExNDAwLAorMHhkNDAwNjQsCisweDgwMDA4ZCwKKzB4MDAwMDAwLAorMHhjNDE0MzIsCisweGM2MTg0MywKKzB4YzQwODJmLAorMHg5NTQwMDUsCisweGM0MGMzMCwKKzB4ZDQ0MDFlLAorMHg4MDAwMDAsCisweGVlMDAxZSwKKzB4OTU4M2Y1LAorMHhjNDEwMzEsCisweGQ0NDAzMywKKzB4ZDUyMDY1LAorMHhkNGEwMWMsCisweGQ0ZTAxYywKKzB4ZDUyMDFjLAorMHhlNDAxNWUsCisweGQ0MDAxZSwKKzB4ODAwMDAwLAorMHgwNjIwMDEsCisweGNhMTgwMCwKKzB4MGEyMDAxLAorMHhkNjAwNzYsCisweGM0MDgzNiwKKzB4OTg4MDA3LAorMHhjNjEwNDUsCisweDk1MDExMCwKKzB4ZDQwMDFmLAorMHhkNDYwNjIsCisweDgwMDAwMCwKKzB4ZDQyMDYyLAorMHhjYzM4MzUsCisweGNjMTQzMywKKzB4ODQwMWJiLAorMHhkNDAwNzIsCisweGQ1NDAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweGUyMDAxYSwKKzB4ODQwMWJiLAorMHhlMjAwMWEsCisweGNjMTA0YiwKKzB4Y2MwNDQ3LAorMHgyYzk0MDEsCisweDdkMDk4YiwKKzB4OTg0MDA1LAorMHg3ZDE1Y2IsCisweGQ0MDAxYSwKKzB4ODAwMWI4LAorMHhkNDAwNmQsCisweDM0NDQwMSwKKzB4Y2MwYzQ4LAorMHg5ODQwM2EsCisweGNjMmM0YSwKKzB4OTU4MDA0LAorMHhjYzA0NDksCisweDgwMDFiOCwKKzB4ZDQwMDFhLAorMHhkNGMwMWEsCisweDI4MjgwMSwKKzB4ODQwMGYwLAorMHhjYzEwMDMsCisweDk4ODAxYiwKKzB4MDQzODBjLAorMHg4NDAwZjAsCisweGNjMTAwMywKKzB4OTg4MDE3LAorMHgwNDM4MDgsCisweDg0MDBmMCwKKzB4Y2MxMDAzLAorMHg5ODgwMTMsCisweDA0MzgwNCwKKzB4ODQwMGYwLAorMHhjYzEwMDMsCisweDk4ODAxNCwKKzB4Y2MxMDRjLAorMHg5YTgwMDksCisweGNjMTQ0ZCwKKzB4OTg0MGRjLAorMHhkNDAwNmQsCisweGNjMTg0OCwKKzB4ZDUwMDFhLAorMHhkNTQwMWEsCisweDgwMDBjOSwKKzB4ZDU4MDFhLAorMHg5NmMwZDUsCisweGQ0MDA2ZCwKKzB4ODAwMWI4LAorMHhkNDAwNmUsCisweDlhYzAwMywKKzB4ZDQwMDZkLAorMHhkNDAwNmUsCisweDgwMDAwMCwKKzB4ZWMwMDdmLAorMHg5YWMwY2MsCisweGQ0MDA2ZCwKKzB4ODAwMWI4LAorMHhkNDAwNmUsCisweGNjMTQwMywKKzB4Y2MxODAzLAorMHhjYzFjMDMsCisweDdkOTEwMywKKzB4N2RkNTgzLAorMHg3ZDE5MGMsCisweDM1Y2MxZiwKKzB4MzU3MDFmLAorMHg3Y2YwY2IsCisweDdjZDA4YiwKKzB4ODgwMDAwLAorMHg3ZThlOGIsCisweDk1YzAwNCwKKzB4ZDQwMDZlLAorMHg4MDAxYjgsCisweGQ0MDAxYSwKKzB4ZDRjMDFhLAorMHhjYzA4MDMsCisweGNjMGMwMywKKzB4Y2MxMDAzLAorMHhjYzE0MDMsCisweGNjMTgwMywKKzB4Y2MxYzAzLAorMHhjYzI0MDMsCisweGNjMjgwMywKKzB4MzVjNDFmLAorMHgzNmIwMWYsCisweDdjNzA0YiwKKzB4MzRmMDFmLAorMHg3YzcwNGIsCisweDM1NzAxZiwKKzB4N2M3MDRiLAorMHg3ZDg4ODEsCisweDdkY2NjMSwKKzB4N2U1MTAxLAorMHg3ZTk1NDEsCisweDdjOTA4MiwKKzB4N2NkNGMyLAorMHg3Yzg0OGIsCisweDlhYzAwMywKKzB4N2M4YzhiLAorMHgyYzg4MDEsCisweDk4ODA5ZSwKKzB4ZDQwMDZkLAorMHg5ODQwOWMsCisweGQ0MDA2ZSwKKzB4Y2MwODRjLAorMHhjYzBjNGQsCisweGNjMTA0OCwKKzB4ZDQ4MDFhLAorMHhkNGMwMWEsCisweDgwMDEwMSwKKzB4ZDUwMDFhLAorMHhjYzA4MzIsCisweGQ0MDAzMiwKKzB4OTQ4MmQ5LAorMHhjYTBjMDAsCisweGQ0NDAxZSwKKzB4ODAwMDAwLAorMHhkNDAwMWUsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHhkNDQwMWUsCisweGNhMTQwMCwKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweGQ1MDAxZSwKKzB4ZDU0MDFlLAorMHhkNTQwMzQsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHgyODA0MDQsCisweGUyMDAxYSwKKzB4ZTIwMDFhLAorMHhkNDQwMWEsCisweGNhMzgwMCwKKzB4Y2MwODAzLAorMHhjYzBjMDMsCisweGNjMGMwMywKKzB4Y2MwYzAzLAorMHg5ODgyYmQsCisweDAwMDAwMCwKKzB4ODQwMWJiLAorMHhkN2EwNmYsCisweDgwMDAwMCwKKzB4ZWUwMDFmLAorMHhjYTA0MDAsCisweGMyZmYwMCwKKzB4Y2MwODM0LAorMHhjMTNmZmYsCisweDdjNzRjYiwKKzB4N2NjOTBiLAorMHg3ZDAxMGYsCisweDk5MDJiMCwKKzB4N2M3MzhiLAorMHg4NDAxYmIsCisweGQ3YTA2ZiwKKzB4ODAwMDAwLAorMHhlZTAwMWYsCisweGNhMDgwMCwKKzB4MjgxOTAwLAorMHg3ZDg5OGIsCisweDk1ODAxNCwKKzB4MjgxNDA0LAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4Y2ExYzAwLAorMHhjYTI0MDAsCisweGUyMDAxZiwKKzB4ZDRjMDFhLAorMHhkNTAwMWEsCisweGQ1NDAxYSwKKzB4Y2MxODAzLAorMHhjYzJjMDMsCisweGNjMmMwMywKKzB4Y2MyYzAzLAorMHg3ZGE1OGIsCisweDdkOWM0NywKKzB4OTg0Mjk3LAorMHgwMDAwMDAsCisweDgwMDE2MSwKKzB4ZDRjMDFhLAorMHhkNDQwMWUsCisweGQ0ODAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4ZTQwMTNlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjYTA4MDAsCisweDI0OGMwNiwKKzB4MGNjYzA2LAorMHg5OGMwMDYsCisweGNjMTA0ZSwKKzB4OTkwMDA0LAorMHhkNDAwNzMsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGQ0ODAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHgzNGQwMTgsCisweDI1MTAwMSwKKzB4OTUwMDIxLAorMHhjMTdmZmYsCisweGNhMTAwMCwKKzB4Y2ExNDAwLAorMHhjYTE4MDAsCisweGQ0ODAxZCwKKzB4ZDRjMDFkLAorMHg3ZGIxOGIsCisweGMxNDIwMiwKKzB4YzJjMDAxLAorMHhkNTgwMWQsCisweDM0ZGMwZSwKKzB4N2Q1ZDRjLAorMHg3ZjczNGMsCisweGQ3NDAxZSwKKzB4ZDUwMDFlLAorMHhkNTQwMWUsCisweGMxNDIwMCwKKzB4YzJjMDAwLAorMHgwOTljMDEsCisweDMxZGMxMCwKKzB4N2Y1ZjRjLAorMHg3ZjczNGMsCisweDA0MjgwMiwKKzB4N2Q4MzgwLAorMHhkNWE4NmYsCisweGQ1ODA2NiwKKzB4ZDc0MDFlLAorMHhlYzAwNWUsCisweGM4MjQwMiwKKzB4YzgyNDAyLAorMHg4MDAxYjgsCisweGQ2MDA3NiwKKzB4ZDQ0MDFlLAorMHhkNDgwMWUsCisweGQ0YzAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFmLAorMHhkNDAwMWYsCisweDgwMDAwMCwKKzB4ZDQwMDFmLAorMHhkNDAwMWYsCisweDg4MDAwMCwKKzB4ZDQwMDFmLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMTAxNzEsCisweDAyMDE3OCwKKzB4MDMwMDhmLAorMHgwNDAwN2YsCisweDA1MDAwMywKKzB4MDYwMDNmLAorMHgwNzAwMzIsCisweDA4MDEyYywKKzB4MDkwMDQ2LAorMHgwYTAwMzYsCisweDEwMDFiNiwKKzB4MTcwMGEyLAorMHgyMjAxM2EsCisweDIzMDE0OSwKKzB4MjAwMGI0LAorMHgyNDAxMjUsCisweDI3MDA0ZCwKKzB4MjgwMDZhLAorMHgyYTAwNjAsCisweDJiMDA1MiwKKzB4MmYwMDY1LAorMHgzMjAwODcsCisweDM0MDE3ZiwKKzB4M2MwMTU2LAorMHgzZjAwNzIsCisweDQxMDE4YywKKzB4NDQwMTJlLAorMHg1NTAxNzMsCisweDU2MDE3YSwKKzB4NjAwMDBiLAorMHg2MTAwMzQsCisweDYyMDAzOCwKKzB4NjMwMDM4LAorMHg2NDAwMzgsCisweDY1MDAzOCwKKzB4NjYwMDM4LAorMHg2NzAwMzgsCisweDY4MDAzYSwKKzB4NjkwMDQxLAorMHg2YTAwNDgsCisweDZiMDA0OCwKKzB4NmMwMDQ4LAorMHg2ZDAwNDgsCisweDZlMDA0OCwKKzB4NmYwMDQ4LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCit9OworCitzdGF0aWMgY29uc3QgdTMyIFJWNjcwX2NwX21pY3JvY29kZVtdWzNdID0geworICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjg0NjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMTAwMDAsIDB4YzAyOTQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYyNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MzggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwZjAwLCAweDAwMjgxNjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDhkMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDE4IH0sCisgICAgeyAweDAwNDEyMDAwLCAweDAwNDA0ODExLCAweDAxOSB9LAorICAgIHsgMHgwMDQyMjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI4LCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHg5MDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjExNjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDI4MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTksIDB4MDAyMTFhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjgxYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTksIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2ExNDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmYywgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwODAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMjBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAorICAgIHsgMHgyMDAwMDAwMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMTBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIyMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDM4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDAzNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwMzcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDBlMmQsIDB4MDM5IH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOSwgMHgwMDQwMTIyZCwgMHgwNDYgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDBlMmQsIDB4MDM5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDNmZmZmYywgMHgwMDI4MTIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjExZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwM2UgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDA0MDFjMTEsIDB4MDQxIH0sCisgICAgeyAweDAwMDAwMDBkLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDdmYzAwMDAwLCAweDAwMjgxYTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIxMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGNjNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgxMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMTQwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDRiIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjkwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZjgwMDAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMmMwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjBlMmIsIDB4MDAwIH0sCisgICAgeyAweGZjMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDFmZmYsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI3LCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwNjEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDVmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA1ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMGUyZCwgMHgwNjIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDBlMmQsIDB4MDYyIH0sCisgICAgeyAweDAwMDAwMDBhLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYiwgMHgwMDQwMTIyZCwgMHgwNmEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwM2ZmZmZjLCAweDAwMjgxMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4N2ZjMDAwMDAsIDB4MDAyODE2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjExNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4ODAwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkwY2EzLCAweDAwMCB9LAorICAgIHsgMHgzZmZmZmMwMCwgMHgwMDI5MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDA2ZCB9LAorICAgIHsgMHgwMDAwMDEwMCwgMHgwMDQwMWMxMSwgMHgwNzAgfSwKKyAgICB7IDB4MDAwMDAwMGQsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGYwLCAweDAwMjgxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBkLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZjBmZiwgMHgwMDI4MWEzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGU2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAxOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4M2ZmZmZmZmYsIDB4MDAyODRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjkxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGEzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwODMgfSwKKyAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGE0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgwODQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDhhIH0sCisgICAgeyAweDAwMDAwMDI1LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjEwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwOGEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjU5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDY0ZCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDhkIH0sCisgICAgeyAweDAwMDAwMDEyLCAweGMwNDAzNjIwLCAweDA5MyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwOTEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDkwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwNDAwZTJkLCAweDA5MiB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDQwMGUyZCwgMHgwOTIgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEyLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDk4IH0sCisgICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MGEwIH0sCisgICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDllIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA5ZCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDQwMGUyZCwgMHgwOWYgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDA0MDBlMmQsIDB4MDlmIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTBjMDIsIDB4MDAwIH0sCisgICAgeyAweDAwM2YwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjEwMjJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwYTcgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwYWEgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjEwZTJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDA3ZiwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBlMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgwYjMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTNhIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMjFlMzAsIDB4MDAwIH0sCisgICAgeyAweDk5ODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjAxODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MWNlNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDQ4MDcsIDB4MTJmIH0sCisgICAgeyAweDliMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4OWMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzMxNDZmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzM2UyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAzYzA1LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBjYiB9LAorICAgIHsgMHgwMGY4ZmYwOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OTgwMDAwMDAsIDB4MDA0MDQ4MTEsIDB4MGRjIH0sCisgICAgeyAweDAwMDAwMGYwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDBhMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MGRhIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGQ1IH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZDQgfSwKKyAgICB7IDB4MDAwMDNmMDAsIDB4MDA0MDBjMTEsIDB4MGQ2IH0sCisgICAgeyAweDAwMDAxZjAwLCAweDAwNDAwYzExLCAweDBkNiB9LAorICAgIHsgMHgwMDAwMGYwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAzODAwMDksIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDNmMDAwMDAwLCAweDAwMjgwZTJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDA0OTRhMjMsIDB4MGRjIH0sCisgICAgeyAweDAwMzgwZjA5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg2ODAwMDAwNywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTIwMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDBmZjAwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDgwLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMDgzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZWEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjUzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDBlYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NTYgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjIwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDEwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwNjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2EwYzAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDBlZiwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwNjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MGY4IH0sCisgICAgeyAweDAwMDAwMDBiLCAweDAwMjEwMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwZjggfSwKKyAgICB7IDB4MDAwMDA0MDAsIDB4MDAyOTIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIxMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGZkIH0sCisgICAgeyAweDAwMDBhMzBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDEwYiB9LAorICAgIHsgMHgwMDAwYTMwZiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMDQgfSwKKyAgICB7IDB4ZmZmZmZmZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMDcgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxMGEgfSwKKyAgICB7IDB4MDAwMDAwZmYsIDB4MDA0MDQ4MTEsIDB4MTBiIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAyYzQwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDExMiB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDQwMjI0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDQyNGEyMCwgMHgxMTQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEzLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBhLCAweDAwMjAxMDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTFiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMTIyNCwgMHgxMTcgfSwKKyAgICB7IDB4ZmZiZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwMjEwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMmUgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBkLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIyMGUzMCwgMHgwMDAgfSwKKyAgICB7IDB4ZmMwMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDEwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDBlLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwN2Y4ZmYwOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2N2IgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDA0MDRjMTEsIDB4MTM1IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDEzYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE2MCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDE0NjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzQxODgyLCAweDJiYiB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE0NyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTYwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwNjgxYTIwLCAweDJiYiB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE1OCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzAwYTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MThmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFhMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyYzA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjFlMjksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzA0OGViLCAweDE5YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4NDAzMzA2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMzAyNDA5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MTgxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgxODYgfSwKKyAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxODYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMwNjIxLCAweDE4MiB9LAorICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4MTk3IH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMDYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3ODA0MmEsIDB4MmZiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODA5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTc0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDIxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDE5NCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHhjMDIwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDNmODAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHg0NjAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTliIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MTYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzA4MTFhMjAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjFlMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI5LCAweDAwMjAxYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmYmZmMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMWZmZiwgMHgwMDI5NGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMGU4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDA2MGEwMjAwLCAweDAwMjk0YTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMTAwLCAweDAwMjAxODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDYyMWUyOCwgMHgxMmYgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDA4MjIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDJjMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDYwMGUyZCwgMHgxYmQgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDBlMmQsIDB4MWJkIH0sCisgICAgeyAweDAwMDBjMDA4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MWI5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4MzkwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDJlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2IwZDYzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjI0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAxMDAwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwMjEwNjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDJjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgyMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTI2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjYyNjI5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MWUwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDA4MSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDA4MCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFkYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxZTkgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzFlMjcsIDB4MWQ4IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjAyYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDI4MGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyODJhMmEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMwNjIxLCAweDFkMSB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAzMDRhMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMDFlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWU5IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMxZTI3LCAweDFlNSB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAxODExLCAweDJiYiB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFmOCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMTYyOCwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZjAwMDAsIDB4MDAyODE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgxYTI5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMTYyMywgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZjAwMDAsIDB4MDAyODE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgxYTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MzE1MDMsIDB4MjA1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDczMTUyNCwgMHgyMDUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDE0YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzAwOGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyMDAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMjQwNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDY3YiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJiMTQwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA5MDE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyOTRhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzQxNDY1LCAweDJiYiB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyMTkgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDIxMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjM4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwNDBmLCAweDIxMyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MjQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjM4IH0sCisgICAgeyAweDAwMDAwMjEwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxYTAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MTljIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKKyAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MjMyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyMzYgfSwKKyAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyMzYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MjMzIH0sCisgICAgeyAweDkyMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwNDExLCAweDJmYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjI0IH0sCisgICAgeyAweDAwMDBhMDBjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIxMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDI0YyB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwODAxMDEsIDB4MDAyOTIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgyNTEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwNjAwNDExLCAweDMxNSB9LAorICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MjdjIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MjZhIH0sCisgICAgeyAweDAwMDAwMDEyLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDFjMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI1ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA4YzAwMDAwLCAweDI2MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjExZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MWM0NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjY3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBlNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDhjMDAwMDAsIDB4MjZhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxODA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYzEgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDIwNDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI3MSB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDQwNDgxMSwgMHgyNzYgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDQ0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzUgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCisgICAgeyAweDAwMDAwMDE5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwNjA0NDExLCAweDJlOSB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjU2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwODgxYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2MjQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4MmEzIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNzAwMCwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJhLCAweDAwMjAxYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIyMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDI5MiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJiLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2OTFjZTIsIDB4MTJmIH0sCisgICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4OTUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgyOWQgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwNDAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHhjMDIyMGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI4LCAweGMwNDAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDksIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGExMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2UzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmMxY2U0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGEzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJkMWQwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDFkMDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkOSB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDM2MjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MmQ5IH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjEwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGUxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMmMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDJjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2YzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NTkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmI1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYjUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjUwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MmRlIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDgwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2ExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4NDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMzA4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2EzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4ODcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzgwOGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDg0MSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzMwOGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MzE4IH0sCisgICAgeyAweGZmZmZmZmVmLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGY4ZTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDk3MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4OTcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4YTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweGMwNDg0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDYzOCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDQwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHg0MDMwNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4YzAzMDRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMwYTIyLCAweDM0YiB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHhjMDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MzU0IH0sCisgICAgeyAweDAwMDAwMDE0LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNjIgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODAyLCAweDM2YSB9LAorICAgIHsgMHgwMDAwMjEwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNjYgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDM1ZCB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NWIzIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgzNWQgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDM2MjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDQ5LCAweDAwMjAxODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzNmMgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDFhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzgyIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYWQgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhZiB9LAorICAgIHsgMHgwMDAwMDAyMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4Mzk4IH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYTQgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhNCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MzhjIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDgwMDAwMDAsIDB4MDAyOTBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwODAwMDAsIDB4MDAyODEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE0LCAweGMwMjIxNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MTRhNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM4ZSB9LAorICAgIHsgMHgwMDAwMjEwZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDM5YSB9LAorICAgIHsgMHgwMDAwMjEwOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4ODAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzYWEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM2YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIxMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4M2M0IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDNiOCB9LAorICAgIHsgMHgwMDAwMjEwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHhiYWJlY2FmZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNzAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBhLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4M2M5IH0sCisgICAgeyAweDhjMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODAwMDAwMDAsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDQwMDAwMDAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZDcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDE4MDAsIDB4M2RhIH0sCisgICAgeyAweDAwMDAzZmZmLCAweGMwMjgxYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNiwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgzZGQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDFjMDAsIDB4M2UwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweGMwMjgxZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNywgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjBjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0OTQ4ZTgsIDB4MDAwIH0sCisgICAgeyAweGE1ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDA4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0NDAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweGMwMjEwMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzZWQgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA4MDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDQ4MTIyMCwgMHgzZjUgfSwKKyAgICB7IDB4YTc4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MDggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDg4MywgMHgwMDAgfSwKKyAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDA2MDQ0MTEsIDB4NDA4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHhhOTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGMwMDAsIDB4MDA0MDBjMTEsIDB4M2YwIH0sCisgICAgeyAweGFiODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjhlMCwgMHgwMDQwMGMxMSwgMHgzZjAgfSwKKyAgICB7IDB4YWQ4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmODgwLCAweDAwNDAwYzExLCAweDNmMCB9LAorICAgIHsgMHhiMzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGYzZmMsIDB4MDA0MDBjMTEsIDB4M2YwIH0sCisgICAgeyAweGFmODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwMCwgMHgwMDQwMGMxMSwgMHgzZjAgfSwKKyAgICB7IDB4YjE4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmMDAwLCAweDAwNDAwYzExLCAweDNmMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg0MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWQwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMTE4MjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDIxOGEwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAzMThjMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwNDE4ZjhlMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDUxOGY4ODAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDA2MThlMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwNzE4ZjAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDgxOGYzZmMsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDI5MGM0MCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4ODYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAorICAgIHsgMHg4NTAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDRjMDIsIDB4NDNlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NGMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDIwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDI4MGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDQ1NCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI0LCAweDY3YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0NTkgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODA1LCAweDY4MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI4MjRmMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDcsIDB4MDAyODBhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NjAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA0ZTAwMDAwLCAweDQ3OSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0ODYgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ2NSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDJlMDAwMDAsIDB4NDc5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ4NiB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDZhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NzkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDg2IH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0NmYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3OSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0ODYgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3NCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4NDc5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ4NiB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDc5IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwOGUwMDAwMCwgMHg0NzkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDg2IH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjEwYTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0ODMgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNGMwOCwgMHg0NGMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHg0MDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTIsIDB4NDAyMTE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDQ5NiB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHhjMDQ5NGEyMCwgMHg0OTcgfSwKKyAgICB7IDB4ZmZmYmZmZmYsIDB4YzAyODRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0YTMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDQ5ZiB9LAorICAgIHsgMHhhMDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OWQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMTBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRiNiB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4NjgxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDRiYSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRjMSB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDA0MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0NDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGMzIH0sCisgICAgeyAweDAwMDAyMTgwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzMzZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NGYzIH0sCisgICAgeyAweDAwMDAwMDJjLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgxOGUwMGMxMSwgMHg0ZTIgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDhjMDQ4MDAsIDB4NGQ2IH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJkLCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGM4MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAzMDBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OWQgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJkLCAweGMwNDAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIxMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NGY4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweGI1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YjYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiNzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGMwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGI4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjhlMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YjkwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmODgwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiYTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGJiMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YmMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmM2ZjLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMGZmLCAweDAwMjgwZTMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTBjIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg1MjEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFjLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjksIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI4LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweGZmZmZlMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxZmZmLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweGYxZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHhjMDIyMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTM4NmUsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmEsIDB4NDAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDg3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZjQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDlkMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHg0MDIxNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4OTYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDEwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjExNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMjIyMywgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmYwMDAsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMGU4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMTFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIwLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIyMTYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDE0YTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMWEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MTAwMDAwMDAsIDB4MDAyODFhMjYsIDB4MDAwIH0sCisgICAgeyAweGVmZmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQ5MzhjZSwgMHg2NmEgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4NDAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDMwMCwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDU1OSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU4LCAweDAwMzAwYTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAyMDAwMCwgMHgwMDI5NGEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTYxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1NmYgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU2MSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU4LCAweDAwMzAwYTI0LCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyMiwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU2ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTY1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHg1NmYgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU2ZCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDQ4MDAsIDB4NjgxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAxYzEwLCAweDU2ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDU3MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YmMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDU4MiB9LAorICAgIHsgMHgwMDAwYTJiNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYjYsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDBhMmM0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NTgwIH0sCisgICAgeyAweDAwMDBhMmQxLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTkzIH0sCisgICAgeyAweDAwMDBhMmJiLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiYSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMGEyYzUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1OTEgfSwKKyAgICB7IDB4MDAwMGEyZDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJkMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YTQgfSwKKyAgICB7IDB4MDAwMGEyYmYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmJlLCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAwYTJjNiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDVhMiB9LAorICAgIHsgMHgwMDAwYTJkMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYzMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmMyLCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAwYTJjNywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDViMSB9LAorICAgIHsgMHgwMDAwYTJkNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4ODUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMzA0YSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDEwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDViNyB9LAorICAgIHsgMHhhNDAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDViYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDAyMDM2MjEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVjMyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDA0MDM2MjEsIDB4NWQ2IH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2UwMCwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDVkNiB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMDkyLCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAwMDAzMSwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEwOTMsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDAwMDMyLCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJiNiwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMzMsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDRhMmJhLCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAwMDAzNCwgMHgwMDIwMzYzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNGEyYmUsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDAwMDM1LCAweDAwMjAzNjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTJjMiwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMzYsIDB4MDAyMDM2MzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDY3YyB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjFmIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAwNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjFmIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdlMDAsIDB4MDAyODA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg1ZjggfSwKKyAgICB7IDB4MDAwMGEwOTIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMxLCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTA5MywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzIsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmI2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMywgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYmEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM0LCAweDAwMjA0YTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJiZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzUsIDB4MDAyMDRhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmMyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzNiwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMWZmLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjFlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MDEgfSwKKyAgICB7IDB4MDAwNGEwMDMsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDBhMDAzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTA2MjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDYwNiB9LAorICAgIHsgMHgwMDA0YTAxMCwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMGEwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDYxZSB9LAorICAgIHsgMHgwMDA0YTAxMSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMGEwMTEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxMiwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMGEwMTIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxMywgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMGEwMTMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNCwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMGEwMTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNSwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMGEwMTUsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNiwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMGEwMTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0YTAxNywgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMGEwMTcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODEwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMmMsIDB4MDA4MDA2MmQsIDB4MDAwIH0sCisgICAgeyAweGZmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwZWUwMDAwMCwgMHg2MzAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjgwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NjJlIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIwMDQsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDAxMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NjM0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDViYyB9LAorICAgIHsgMHg5ODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDYzNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4OTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA0MDQ4MTEsIDB4NjIwIH0sCisgICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDYyMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg2NGQgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNjA0ODExLCAweDM2YSB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMTAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDA5ODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjE3ZiwgMHgwMDYwNDQxMSwgMHg2N2MgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDQwNGMxMSwgMHg2NDcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDI5MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmYiwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDI5MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmNywgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDA4MDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNmEgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDEwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDE4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmZmZmZmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjdjIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2N2IgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDA0MDRjMTEsIDB4NjYxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgzOGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWQsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjAsIDB4MDAyMDE2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAxLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAzMDEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMDY0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg2N2EgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxMjIyLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTEwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwNDAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjdjIH0sCisgICAgeyAweDlmMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NjdmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxYWMwMDAwMCwgMHg2ODEgfSwKKyAgICB7IDB4OWUwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxYWUwMDAwMCwgMHg2ODQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMTAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDFlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMTQyMDRmNSwgMHgwNWIzMDI1MCwgMHgwMDAgfSwKKyAgICB7IDB4MDFjMzAxNjgsIDB4MDQzNTA1YjMsIDB4MDAwIH0sCisgICAgeyAweDAyMjUwMjA5LCAweDAyNTAwMTUxLCAweDAwMCB9LAorICAgIHsgMHgwMjIzMDI0NSwgMHgwMmEwMDI0MSwgMHgwMDAgfSwKKyAgICB7IDB4MDNjZDA1YjMsIDB4MDViMzA1YjMsIDB4MDAwIH0sCisgICAgeyAweDA2M2MwNjNkLCAweDAzMWYwNWIzLCAweDAwMCB9LAorICAgIHsgMHgwNWIzMDViOCwgMHgwMzIwMDM0MCwgMHgwMDAgfSwKKyAgICB7IDB4MDMyYTAyODIsIDB4MDM0MjAzMzQsIDB4MDAwIH0sCisgICAgeyAweDA1YjMwNWIzLCAweDA1YjMwNWIzLCAweDAwMCB9LAorICAgIHsgMHgwNWIzMDU0NCwgMHgwNWIzMDViMywgMHgwMDAgfSwKKyAgICB7IDB4MDNiMjA1YjMsIDB4MDRhZTAzNDQsIDB4MDAwIH0sCisgICAgeyAweDA0OGQwNDQzLCAweDA0MzMwNWIzLCAweDAwMCB9LAorICAgIHsgMHgwNGMzMDViMywgMHgwNDM3MDRkMCwgMHgwMDAgfSwKKyAgICB7IDB4MDQ0MzA0ZmEsIDB4MDM1MTAzNzEsIDB4MDAwIH0sCisgICAgeyAweDA1YjMwNWIzLCAweDA1YjMwNWIzLCAweDAwMCB9LAorICAgIHsgMHgwNWIzMDViMywgMHgwNWIzMDViMywgMHgwMDAgfSwKKyAgICB7IDB4MDViMzA1YjMsIDB4MDYzMjA1YmEsIDB4MDAwIH0sCisgICAgeyAweDA1YjMwNWIzLCAweDAwMDcwNWIzLCAweDAwMCB9LAorICAgIHsgMHgwNWIzMDViMywgMHgwNWIzMDViMywgMHgwMDAgfSwKKyAgICB7IDB4MDViMzA1YjMsIDB4MDViMzA1YjMsIDB4MDAwIH0sCisgICAgeyAweDAzZWUwM2UzLCAweDAzZmUwM2ZjLCAweDAwMCB9LAorICAgIHsgMHgwNDA0MDQwMCwgMHgwNDAyMDQwNiwgMHgwMDAgfSwKKyAgICB7IDB4MDQxMjA0MGUsIDB4MDQxYTA0MTYsIDB4MDAwIH0sCisgICAgeyAweDA0MjIwNDFlLCAweDA0MmEwNDI2LCAweDAwMCB9LAorICAgIHsgMHgwNWIzMDViMywgMHgwNDJlMDViMywgMHgwMDAgfSwKKyAgICB7IDB4MDViMzA1YjMsIDB4MDViMzA1YjMsIDB4MDAwIH0sCisgICAgeyAweDA1YjMwNWIzLCAweDA1YjMwNWIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAyMDY2OCwgMHgwNjg2MDAwNiwgMHgwMDAgfSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgUlY2NzBfcGZwX21pY3JvY29kZVtdID0geworMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHg3YzAzOGIsCisweDgwMDFiOCwKKzB4N2MwMzhiLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4YzQxODM4LAorMHhjYTI0MDAsCisweGNhMjgwMCwKKzB4OTU4MWE4LAorMHhjNDFjM2EsCisweGMzYzAwMCwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweDdjNzQ0YiwKKzB4YzIwMDA1LAorMHg5OWMwMDAsCisweGM0MWMzYSwKKzB4N2M3NDRjLAorMHhjMGZmZjAsCisweDA0MmMwNCwKKzB4MzA5MDAyLAorMHg3ZDI1MDAsCisweDM1MTQwMiwKKzB4N2QzNTBiLAorMHgyNTU0MDMsCisweDdjZDU4MCwKKzB4MjU5YzAzLAorMHg5NWMwMDQsCisweGQ1MDAxYiwKKzB4N2VkZGMxLAorMHg3ZDlkODAsCisweGQ2ODAxYiwKKzB4ZDU4MDFiLAorMHhkNDQwMWUsCisweGQ1NDAxZSwKKzB4ZDY0MDFlLAorMHhkNjgwMWUsCisweGQ0ODAxZSwKKzB4ZDRjMDFlLAorMHg5NzgzZDMsCisweGQ1YzAxZSwKKzB4Y2EwODAwLAorMHg4MDAwMWEsCisweGNhMGMwMCwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweDgwMDAwYywKKzB4YzQxODM4LAorMHhlNDAxM2UsCisweGQ0MDAxZSwKKzB4ODAwMDBjLAorMHhjNDE4MzgsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGU0MDEzZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4Y2ExODAwLAorMHhkNDQwMWUsCisweGQ1ODAxZSwKKzB4ODAwMDUzLAorMHhkNDAwNzUsCisweGQ0NDAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4ZDQ4MDE5LAorMHhkNGMwMTgsCisweGQ1MDAxNywKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweGQ1MDAxZSwKKzB4ZTIwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjYTA4MDAsCisweGQ0ODA2MCwKKzB4ZDQ0MDFlLAorMHg4MDAwMDAsCisweGQ0ODAxZSwKKzB4Y2EwODAwLAorMHhkNDgwNjEsCisweGQ0NDAxZSwKKzB4ODAwMDAwLAorMHhkNDgwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHhkNDQwMWUsCisweGQ0ODAxNiwKKzB4ZDRjMDE2LAorMHhkNDgwMWUsCisweDgwMDFiOCwKKzB4ZDRjMDFlLAorMHhjNjA4NDMsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHg5NDgwMDQsCisweGNhMTQwMCwKKzB4ZTQyMGYzLAorMHhkNDIwMTMsCisweGQ1NjA2NSwKKzB4ZDRlMDFjLAorMHhkNTIwMWMsCisweGQ1NjAxYywKKzB4ODAwMDAwLAorMHgwNjIwMDEsCisweGM2MDg0MywKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweDk0ODNmNywKKzB4Y2ExNDAwLAorMHhlNDIwZjMsCisweDgwMDA3OSwKKzB4ZDQyMDEzLAorMHhjNjA4NDMsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHg5ODgzZWYsCisweGNhMTQwMCwKKzB4ZDQwMDY0LAorMHg4MDAwOGQsCisweDAwMDAwMCwKKzB4YzQxNDMyLAorMHhjNjE4NDMsCisweGM0MDgyZiwKKzB4OTU0MDA1LAorMHhjNDBjMzAsCisweGQ0NDAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweDk1ODNmNSwKKzB4YzQxMDMxLAorMHhkNDQwMzMsCisweGQ1MjA2NSwKKzB4ZDRhMDFjLAorMHhkNGUwMWMsCisweGQ1MjAxYywKKzB4ZTQwMTVlLAorMHhkNDAwMWUsCisweDgwMDAwMCwKKzB4MDYyMDAxLAorMHhjYTE4MDAsCisweDBhMjAwMSwKKzB4ZDYwMDc2LAorMHhjNDA4MzYsCisweDk4ODAwNywKKzB4YzYxMDQ1LAorMHg5NTAxMTAsCisweGQ0MDAxZiwKKzB4ZDQ2MDYyLAorMHg4MDAwMDAsCisweGQ0MjA2MiwKKzB4Y2MzODM1LAorMHhjYzE0MzMsCisweDg0MDFiYiwKKzB4ZDQwMDcyLAorMHhkNTQwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHhlMjAwMWEsCisweDg0MDFiYiwKKzB4ZTIwMDFhLAorMHhjYzEwNGIsCisweGNjMDQ0NywKKzB4MmM5NDAxLAorMHg3ZDA5OGIsCisweDk4NDAwNSwKKzB4N2QxNWNiLAorMHhkNDAwMWEsCisweDgwMDFiOCwKKzB4ZDQwMDZkLAorMHgzNDQ0MDEsCisweGNjMGM0OCwKKzB4OTg0MDNhLAorMHhjYzJjNGEsCisweDk1ODAwNCwKKzB4Y2MwNDQ5LAorMHg4MDAxYjgsCisweGQ0MDAxYSwKKzB4ZDRjMDFhLAorMHgyODI4MDEsCisweDg0MDBmMCwKKzB4Y2MxMDAzLAorMHg5ODgwMWIsCisweDA0MzgwYywKKzB4ODQwMGYwLAorMHhjYzEwMDMsCisweDk4ODAxNywKKzB4MDQzODA4LAorMHg4NDAwZjAsCisweGNjMTAwMywKKzB4OTg4MDEzLAorMHgwNDM4MDQsCisweDg0MDBmMCwKKzB4Y2MxMDAzLAorMHg5ODgwMTQsCisweGNjMTA0YywKKzB4OWE4MDA5LAorMHhjYzE0NGQsCisweDk4NDBkYywKKzB4ZDQwMDZkLAorMHhjYzE4NDgsCisweGQ1MDAxYSwKKzB4ZDU0MDFhLAorMHg4MDAwYzksCisweGQ1ODAxYSwKKzB4OTZjMGQ1LAorMHhkNDAwNmQsCisweDgwMDFiOCwKKzB4ZDQwMDZlLAorMHg5YWMwMDMsCisweGQ0MDA2ZCwKKzB4ZDQwMDZlLAorMHg4MDAwMDAsCisweGVjMDA3ZiwKKzB4OWFjMGNjLAorMHhkNDAwNmQsCisweDgwMDFiOCwKKzB4ZDQwMDZlLAorMHhjYzE0MDMsCisweGNjMTgwMywKKzB4Y2MxYzAzLAorMHg3ZDkxMDMsCisweDdkZDU4MywKKzB4N2QxOTBjLAorMHgzNWNjMWYsCisweDM1NzAxZiwKKzB4N2NmMGNiLAorMHg3Y2QwOGIsCisweDg4MDAwMCwKKzB4N2U4ZThiLAorMHg5NWMwMDQsCisweGQ0MDA2ZSwKKzB4ODAwMWI4LAorMHhkNDAwMWEsCisweGQ0YzAxYSwKKzB4Y2MwODAzLAorMHhjYzBjMDMsCisweGNjMTAwMywKKzB4Y2MxNDAzLAorMHhjYzE4MDMsCisweGNjMWMwMywKKzB4Y2MyNDAzLAorMHhjYzI4MDMsCisweDM1YzQxZiwKKzB4MzZiMDFmLAorMHg3YzcwNGIsCisweDM0ZjAxZiwKKzB4N2M3MDRiLAorMHgzNTcwMWYsCisweDdjNzA0YiwKKzB4N2Q4ODgxLAorMHg3ZGNjYzEsCisweDdlNTEwMSwKKzB4N2U5NTQxLAorMHg3YzkwODIsCisweDdjZDRjMiwKKzB4N2M4NDhiLAorMHg5YWMwMDMsCisweDdjOGM4YiwKKzB4MmM4ODAxLAorMHg5ODgwOWUsCisweGQ0MDA2ZCwKKzB4OTg0MDljLAorMHhkNDAwNmUsCisweGNjMDg0YywKKzB4Y2MwYzRkLAorMHhjYzEwNDgsCisweGQ0ODAxYSwKKzB4ZDRjMDFhLAorMHg4MDAxMDEsCisweGQ1MDAxYSwKKzB4Y2MwODMyLAorMHhkNDAwMzIsCisweDk0ODJkOSwKKzB4Y2EwYzAwLAorMHhkNDQwMWUsCisweDgwMDAwMCwKKzB4ZDQwMDFlLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4ZDQ0MDFlLAorMHhjYTE0MDAsCisweGQ0ODAxZSwKKzB4ZDRjMDFlLAorMHhkNTAwMWUsCisweGQ1NDAxZSwKKzB4ZDU0MDM0LAorMHg4MDAwMDAsCisweGVlMDAxZSwKKzB4MjgwNDA0LAorMHhlMjAwMWEsCisweGUyMDAxYSwKKzB4ZDQ0MDFhLAorMHhjYTM4MDAsCisweGNjMDgwMywKKzB4Y2MwYzAzLAorMHhjYzBjMDMsCisweGNjMGMwMywKKzB4OTg4MmJkLAorMHgwMDAwMDAsCisweDg0MDFiYiwKKzB4ZDdhMDZmLAorMHg4MDAwMDAsCisweGVlMDAxZiwKKzB4Y2EwNDAwLAorMHhjMmZmMDAsCisweGNjMDgzNCwKKzB4YzEzZmZmLAorMHg3Yzc0Y2IsCisweDdjYzkwYiwKKzB4N2QwMTBmLAorMHg5OTAyYjAsCisweDdjNzM4YiwKKzB4ODQwMWJiLAorMHhkN2EwNmYsCisweDgwMDAwMCwKKzB4ZWUwMDFmLAorMHhjYTA4MDAsCisweDI4MTkwMCwKKzB4N2Q4OThiLAorMHg5NTgwMTQsCisweDI4MTQwNCwKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweGNhMWMwMCwKKzB4Y2EyNDAwLAorMHhlMjAwMWYsCisweGQ0YzAxYSwKKzB4ZDUwMDFhLAorMHhkNTQwMWEsCisweGNjMTgwMywKKzB4Y2MyYzAzLAorMHhjYzJjMDMsCisweGNjMmMwMywKKzB4N2RhNThiLAorMHg3ZDljNDcsCisweDk4NDI5NywKKzB4MDAwMDAwLAorMHg4MDAxNjEsCisweGQ0YzAxYSwKKzB4ZDQ0MDFlLAorMHhkNDgwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGU0MDEzZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4Y2EwODAwLAorMHgyNDhjMDYsCisweDBjY2MwNiwKKzB4OThjMDA2LAorMHhjYzEwNGUsCisweDk5MDAwNCwKKzB4ZDQwMDczLAorMHhlNDAxMWUsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhkNDgwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4MzRkMDE4LAorMHgyNTEwMDEsCisweDk1MDAyMSwKKzB4YzE3ZmZmLAorMHhjYTEwMDAsCisweGNhMTQwMCwKKzB4Y2ExODAwLAorMHhkNDgwMWQsCisweGQ0YzAxZCwKKzB4N2RiMThiLAorMHhjMTQyMDIsCisweGMyYzAwMSwKKzB4ZDU4MDFkLAorMHgzNGRjMGUsCisweDdkNWQ0YywKKzB4N2Y3MzRjLAorMHhkNzQwMWUsCisweGQ1MDAxZSwKKzB4ZDU0MDFlLAorMHhjMTQyMDAsCisweGMyYzAwMCwKKzB4MDk5YzAxLAorMHgzMWRjMTAsCisweDdmNWY0YywKKzB4N2Y3MzRjLAorMHgwNDI4MDIsCisweDdkODM4MCwKKzB4ZDVhODZmLAorMHhkNTgwNjYsCisweGQ3NDAxZSwKKzB4ZWMwMDVlLAorMHhjODI0MDIsCisweGM4MjQwMiwKKzB4ODAwMWI4LAorMHhkNjAwNzYsCisweGQ0NDAxZSwKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHg4MDAwMDAsCisweGVlMDAxZiwKKzB4ZDQwMDFmLAorMHg4MDAwMDAsCisweGQ0MDAxZiwKKzB4ZDQwMDFmLAorMHg4ODAwMDAsCisweGQ0MDAxZiwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDEwMTcxLAorMHgwMjAxNzgsCisweDAzMDA4ZiwKKzB4MDQwMDdmLAorMHgwNTAwMDMsCisweDA2MDAzZiwKKzB4MDcwMDMyLAorMHgwODAxMmMsCisweDA5MDA0NiwKKzB4MGEwMDM2LAorMHgxMDAxYjYsCisweDE3MDBhMiwKKzB4MjIwMTNhLAorMHgyMzAxNDksCisweDIwMDBiNCwKKzB4MjQwMTI1LAorMHgyNzAwNGQsCisweDI4MDA2YSwKKzB4MmEwMDYwLAorMHgyYjAwNTIsCisweDJmMDA2NSwKKzB4MzIwMDg3LAorMHgzNDAxN2YsCisweDNjMDE1NiwKKzB4M2YwMDcyLAorMHg0MTAxOGMsCisweDQ0MDEyZSwKKzB4NTUwMTczLAorMHg1NjAxN2EsCisweDYwMDAwYiwKKzB4NjEwMDM0LAorMHg2MjAwMzgsCisweDYzMDAzOCwKKzB4NjQwMDM4LAorMHg2NTAwMzgsCisweDY2MDAzOCwKKzB4NjcwMDM4LAorMHg2ODAwM2EsCisweDY5MDA0MSwKKzB4NmEwMDQ4LAorMHg2YjAwNDgsCisweDZjMDA0OCwKKzB4NmQwMDQ4LAorMHg2ZTAwNDgsCisweDZmMDA0OCwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBSUzc4MF9jcF9taWNyb2NvZGVbXVszXSA9IHsKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4NDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDEwMDAwLCAweGMwMjk0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMDA0LCAweDAwNjA0NDExLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1ZDEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWRlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMGYwMCwgMHgwMDI4MTYyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHg4ZDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAxOCB9LAorICAgIHsgMHgwMDQxMjAwMCwgMHgwMDQwNDgxMSwgMHgwMTkgfSwKKyAgICB7IDB4MDA0MjIwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhlMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4OTAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIxMTYyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE5LCAweDAwMjExYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDI4MWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTE0YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE5LCAweDAwMjAzNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMTQwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMTE2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmZmZmMsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGEzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMzYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwMjIwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKKyAgICB7IDB4MjAwMDAwMDAsIDB4MDAyODBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjEwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5Mzg2ZSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDAzOCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyZWUwMDAwMCwgMHgwMzUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmNlMDAwMDAsIDB4MDM3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwZTJkLCAweDAzOSB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDksIDB4MDA0MDEyMmQsIDB4MDQ2IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNDAwZTJkLCAweDAzOSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAzZmZmZmMsIDB4MDAyODEyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDNlIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwNDAxYzExLCAweDA0MSB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHg3ZmMwMDAwMCwgMHgwMDI4MWEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMTFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMxYTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjYzcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI3LCAweDAwMjAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MTIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDE0MDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDA0YiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDI5MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhmZmY4MDAwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzYTJjMDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIwZTJiLCAweDAwMCB9LAorICAgIHsgMHhmYzAwMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAxZmZmLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNywgMHgwMDIwNGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI5LCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDYxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA1ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwNWUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDBlMmQsIDB4MDYyIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNDAwZTJkLCAweDA2MiB9LAorICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGIsIDB4MDA0MDEyMmQsIDB4MDZhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDNmZmZmYywgMHgwMDI4MTIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjEyMjQsIDB4MDAwIH0sCisgICAgeyAweDdmYzAwMDAwLCAweDAwMjgxNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIxMTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzE2MjUsIDB4MDAwIH0sCisgICAgeyAweDgwMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MGNhMywgMHgwMDAgfSwKKyAgICB7IDB4M2ZmZmZjMDAsIDB4MDAyOTBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjExZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgwNmQgfSwKKyAgICB7IDB4MDAwMDAxMDAsIDB4MDA0MDFjMTEsIDB4MDcwIH0sCisgICAgeyAweDAwMDAwMDBkLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDBmMCwgMHgwMDI4MWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmYwZmYsIDB4MDAyODFhMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMDI4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDhlNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMTgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDNmZmZmZmZmLCAweDAwMjg0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAxNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDI5MTYyNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzAsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI1LCAweDAwMjAxNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MDgzIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAxNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBhNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MDg0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDA4YSB9LAorICAgIHsgMHgwMDAwMDAyNSwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjYsIDB4MDAyMDM2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MDhhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVmZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1ZjMgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDA4ZCB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHhjMDQwMzYyMCwgMHgwOTMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MmVlMDAwMDAsIDB4MDkxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJjZTAwMDAwLCAweDA5MCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDQwMGUyZCwgMHgwOTIgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDA0MDBlMmQsIDB4MDkyIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDA5OCB9LAorICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDBhMCB9LAorICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDJlZTAwMDAwLCAweDA5ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgyY2UwMDAwMCwgMHgwOWQgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDA0MDBlMmQsIDB4MDlmIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwNDAwZTJkLCAweDA5ZiB9LAorICAgIHsgMHgwMDAwMDAwYywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwM2EwYzAyLCAweDAwMCB9LAorICAgIHsgMHgwMDNmMDAwMCwgMHgwMDI4MGUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGE3IH0sCisgICAgeyAweDAwMDAwMDE2LCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGFhIH0sCisgICAgeyAweDAwMDAwMDE1LCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMGUyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwN2YsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwZTEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MjcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJhMyB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4MGIzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDEzYSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweDAwMjIxZTMwLCAweDAwMCB9LAorICAgIHsgMHg5OTgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTFjZTQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjA0ODA3LCAweDEyZiB9LAorICAgIHsgMHg5YjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDljMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMTQ2ZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAzMzNlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwM2MwNSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTAxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDcsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwY2IgfSwKKyAgICB7IDB4MDBmOGZmMDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDk4MDAwMDAwLCAweDAwNDA0ODExLCAweDBkYyB9LAorICAgIHsgMHgwMDAwMDBmMCwgMHgwMDI4MGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwYTAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDBkYSB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDBkNSB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGQ0IH0sCisgICAgeyAweDAwMDAzZjAwLCAweDAwNDAwYzExLCAweDBkNiB9LAorICAgIHsgMHgwMDAwMWYwMCwgMHgwMDQwMGMxMSwgMHgwZDYgfSwKKyAgICB7IDB4MDAwMDBmMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMzgwMDA5LCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgzZjAwMDAwMCwgMHgwMDI4MGUyYiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMjBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwNDk0YTIzLCAweDBkYyB9LAorICAgIHsgMHgwMDM4MGYwOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4NjgwMDAwMDcsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjE0YTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDAyOTRhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyMDIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwZmYwMDAwLCAweDAwMjgwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDA4MCwgMHgwMDI5NGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI2LCAweDAwMjAxMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDA4MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MGVhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVmOSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwZWIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWZjIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIyMGUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAxMDAwMDAsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNhMGMwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwZWYsIDB4MDAyODBlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkyMDY4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMTAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDBmOCB9LAorICAgIHsgMHgwMDAwMDAwYiwgMHgwMDIxMDIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MGY4IH0sCisgICAgeyAweDAwMDAwNDAwLCAweDAwMjkyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWMsIDB4MDAyMTBlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDBmZCB9LAorICAgIHsgMHgwMDAwYTMwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMGIgfSwKKyAgICB7IDB4MDAwMGEzMGYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjAwZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTA0IH0sCisgICAgeyAweGZmZmZmZmZmLCAweDAwNDA0ODExLCAweDEwYiB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTA3IH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwNDA0ODExLCAweDEwYiB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MTBhIH0sCisgICAgeyAweDAwMDAwMGZmLCAweDAwNDA0ODExLCAweDEwYiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMmM0MDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgxMTIgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEzLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHg0MDIyNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzA0MjRhMjAsIDB4MTE0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwYSwgMHgwMDIwMTAxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDExYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzEyMjQsIDB4MTE3IH0sCisgICAgeyAweGZmYmZmZmZmLCAweDAwMjgzYTJlLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MTJlIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMjBlMzAsIDB4MDAwIH0sCisgICAgeyAweGZjMDAwMDAwLCAweDAwMjgwZTIzLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZTAwZSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDdmOGZmMDgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMTRhMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDA4MDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxNGEyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjIxIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwNDA0YzExLCAweDEzNSB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjIyIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgxM2MgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxNjAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4YzAyMTBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQxNDYxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc0MTg4MiwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNDcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwM2ZmZiwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE2MCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjExNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDY4MWEyMCwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgxNTggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMwMGEyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MDBiIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE4ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxYTAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMmMwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OTM4MDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxZTI5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDcwNDhlYiwgMHgxOWMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmJiIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDQwMzMwNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDMwMjQwOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYTMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDE4MSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MTg2IH0sCisgICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MTg2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxODIgfSwKKyAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDE5NyB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4MDAyMDA2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzgwNDJhLCAweDJmYiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjgwOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE3NCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAyMTAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxOTQgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4YzAyMDM2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgzZjgwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4NDYwMDAwMDAsIDB4MDA2MDA4MTEsIDB4MWIyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDE5YiB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDgwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgwZTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwODExYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIxZTMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOSwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGUwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGZmZmJmZjA5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDIwMjIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDFmZmYsIDB4MDAyOTRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5MjBlOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwNjBhMDIwMCwgMHgwMDI5NGEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDEwMCwgMHgwMDIwMTgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDA2MjFlMjgsIDB4MTJmIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwODIyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAyYzAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4MDA2MDBlMmQsIDB4MWJkIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwNjAwZTJkLCAweDFiZCB9LAorICAgIHsgMHgwMDAwYzAwOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDBlMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDFiOSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDM5MDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwMjAyZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDNiMGQ2MywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjRhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjI0YTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIyNGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMTAwMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMDAwNywgMHgwMDIxMDYyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTMsIDB4MDAyMDBhMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjAyYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHg0MDI4MjIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjEyNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwZiwgMHgwMDI2MjYyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDI4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDFlMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwODEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwODAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZGMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWU5IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTMxZTI3LCAweDFkOCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyODBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjgyYTJhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMDYyMSwgMHgxZDEgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMzA0YTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzAxZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDFlOSB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUzMWUyNywgMHgxZTUgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjYwZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyNjEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAxNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMTgxMSwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjJiLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgxZjggfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjgsIDB4MDAwIH0sCisgICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMmMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjE2MjMsIDB4MDAwIH0sCisgICAgeyAweGZmZmYwMDAwLCAweDAwMjgxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MWEyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YzUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNzMxNTAzLCAweDIwNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgwNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA3MzE1MjQsIDB4MjA1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmQxNGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAyODAyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMjAwMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDI0MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBmLCAweDAwMjEwMjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg2MjEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyYjE0MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwOTAxNjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDIyNTYsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjk0YTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMzg0YTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDQwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHhjMDIxMWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweGMwMjExNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDc0MTQ2NSwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDA2MDQ0MTEsIDB4MmUwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMwNjIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4MjE5IH0sCisgICAgeyAweDAwMDAzZmZmLCAweDAwMmYwMjJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHgyMTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVkZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDQwZiwgMHgyMTMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWQxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVkZSB9LAorICAgIHsgMHgwMDAwMDIxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MWEwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDE5YyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgyYmIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmEzIH0sCisgICAgeyAweDkzODAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDIzMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgxM2EgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4MjM2IH0sCisgICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MjM2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDIzMyB9LAorICAgIHsgMHg5MjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDQxMSwgMHgyZmIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVkMSB9LAorICAgIHsgMHgwMDAwYTAwYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMTBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHgyNGMgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDgwMTAxLCAweDAwMjkyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNCwgMHgwMDIwMzYyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEzMGMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MDAsIDB4MjUxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDAwYiB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDYwMDQxMSwgMHgzMTUgfSwKKyAgICB7IDB4M2Y4MDAwMDAsIDB4MDAyMDA0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwODExLCAweDFiMiB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDI3YyB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDI2YSB9LAorICAgIHsgMHgwMDAwMDAxMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQxYzI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNWYgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwOGMwMDAwMCwgMHgyNjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDE0MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEyLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzNDFjNDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDEyYzAwMDAwLCAweDI2NyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwZTYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA4YzAwMDAwLCAweDI2YSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmMxIH0sCisgICAgeyAweDAwMDAyMjU2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjAyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4MjcyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzQyMDQ0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxMmMwMDAwMCwgMHgyNzEgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA0MDQ4MTEsIDB4Mjc2IH0sCisgICAgeyAweDAwMDAwMDE4LCAweDAwNDA0ODExLCAweDI3NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM0MjA0NCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTJjMDAwMDAsIDB4Mjc1IH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwNDA0ODExLCAweDI3NiB9LAorICAgIHsgMHgwMDAwMDAxOSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTFmZCwgMHgwMDYwNDQxMSwgMHgyZTkgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4MDAyZjAyMmYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDI1NiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDQwMCwgMHgwMDEgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4NDAyMTA2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDQwMjExNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDg4MWEyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjAwNCwgMHgwMDYwNDQxMSwgMHg2MjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWQxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjAwMDAwLCAweDJhMyB9LAorICAgIHsgMHgwMDAwMDAwNSwgMHgwMDIwMGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyMjBhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJiLCAweDAwMjAxYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDcwMDAsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2U2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYSwgMHgwMDIwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMjFhMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGU2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNmUwMDAwMCwgMHgyOTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDFjMTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyYiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjkxY2UyLCAweDEyZiB9LAorICAgIHsgMHg5MzgwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDk1MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4MjlkIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4OTIwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDQwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4YzAyMjBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI5LCAweDAwMjAzNjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHhjMDQwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA5LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhhMTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJjMWNlMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJjMWNlNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjIsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZDFkMDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmQxZDA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzExY2M0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDgwMzYyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZDkgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFiLCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyMTAyMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDJkOSB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDIzLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJlMDBlMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDJjMDAwMDAsIDB4MmRjIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBhMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2YzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAyNCwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZTAwZTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAyYzAwMDAwLCAweDJkYyB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmUwMGU4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNmMwMDAwMCwgMHgyZGMgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWZmIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDJiNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmI1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVmNiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgyZGUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4MmE3IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDJkZSB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDA4MDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTFjYTMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODQ3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODQ3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMTIwYzQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzEyMGMyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDg4NywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMjBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzMwOGEyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMTIyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMWNhMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0ODg3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIyMGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIxMjIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjIxZTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMxMjBjNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGZmZmYsIDB4MDAyODIyMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDM4MDhjNSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDA4NDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjIwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMzMDhhMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMjEyMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDg5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDMxOCB9LAorICAgIHsgMHhmZmZmZmZlZiwgMHgwMDI4MDYyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmOGUwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4OTQ5MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDYwYTAyMDAsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4OTcwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4YTAwMDAwMCwgMHhjMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGExZmMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDk3MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4OGEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmYywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDFhMWZkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4YzA0ODRhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMjVkLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWRlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAzODRhMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4NDAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDQwMzA0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHhjMDMwNGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MzBhMjIsIDB4MzU1IH0sCisgICAgeyAweDAwMDAwMDNmLCAweGMwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMWY4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxZjksIDB4MDA2MDQ0MTEsIDB4NjIyIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzNWUgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM2YyB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDQ4MDIsIDB4Mzc0IH0sCisgICAgeyAweDAwMDAyMTAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM3MCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDIsIDB4MzY3IH0sCisgICAgeyAweDAwMDAwMDI4LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YmEgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDM2NyB9LAorICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMzYyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwNDksIDB4MDAyMDE4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDMzMWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjYsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDM3NiB9LAorICAgIHsgMHgwMDAwMDAyYywgMHgwMDgwMWEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4YzAyODBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE1LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOGMgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNiNyB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2I5IH0sCisgICAgeyAweDAwMDAwMDIwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzYTIgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjZTAwMDAwLCAweDNhZSB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4M2FlIH0sCisgICAgeyAweDAwMDAwMDFlLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgzOTYgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAyLCAweDAwMCB9LAorICAgIHsgMHgwODAwMDAwMCwgMHgwMDI5MGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4NDAyMTBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBjLCAweGMwMjExMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDA4MDAwMCwgMHgwMDI4MTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTQsIDB4YzAyMjE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxNGE0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ4YTIsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZlLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMywgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAxNSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4Mzk4IH0sCisgICAgeyAweDAwMDAyMTBlLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4M2E0IH0sCisgICAgeyAweDAwMDAyMTA4LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAyLCAweDAwMCB9LAorICAgIHsgMHg4MDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDAwMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNiNCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4Mzc0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDBjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFkLCAweDAwMjEwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHgzY2UgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjFmOCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMWY5LCAweDAwNjA0NDExLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAxMSwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4M2MyIH0sCisgICAgeyAweDAwMDAyMTAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweGJhYmVjYWZlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYTQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3MCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgzZDMgfSwKKyAgICB7IDB4OGMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAzZmZmLCAweDQwMjgwYTIwLCAweDAwMCB9LAorICAgIHsgMHg4MDAwMDAwMCwgMHg0MDI4MGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4NDAwMDAwMDAsIDB4YzAyODEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTQxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDNlMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMTgwMCwgMHgzZTQgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4YzAyODFhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI2LCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMTgxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDNlNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMWMwMCwgMHgzZWEgfSwKKyAgICB7IDB4MDAwMDNmZmYsIDB4YzAyODFlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjI3LCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwMWMxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjgyMGM1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQ5NDhlOCwgMHgwMDAgfSwKKyAgICB7IDB4YTU4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ0MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHg0MDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4YzAyMTAyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDNmNyB9LAorICAgIHsgMHgwMDAwMjAxMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDgwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweGMwNDgxMjIwLCAweDNmZiB9LAorICAgIHsgMHhhNzgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEwMDAsIDB4MDAyMDBjMTEsIDB4MDAwIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwNjA0NDExLCAweDQxMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDQwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHhjMDI4MTIyMCwgMHgwMDAgfSwKKyAgICB7IDB4ODMwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0ODgzLCAweDAwMCB9LAorICAgIHsgMHg4NDAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFkMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg4MzAwMDAwMCwgMHgwMDYwNDQxMSwgMHg0MTIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweGE5ODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYzAwMCwgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4YWI4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmOGUwLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHhhZDgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGY4ODAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweGIzODAwMDAwLCAweDAwMjAwODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjNmYywgMHgwMDQwMGMxMSwgMHgzZmEgfSwKKyAgICB7IDB4YWY4MDAwMDAsIDB4MDAyMDA4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDAwLCAweDAwNDAwYzExLCAweDNmYSB9LAorICAgIHsgMHhiMTgwMDAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGYwMDAsIDB4MDA0MDBjMTEsIDB4M2ZhIH0sCisgICAgeyAweDgzMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE0OCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxZDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAxMTgyMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwMjE4YTAwMCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDMxOGMwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDA0MThmOGUwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwNTE4Zjg4MCwgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDYxOGUwMDAsIDB4YzAzMDQ2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ5MDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDA3MThmMDAwLCAweGMwMzA0NjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhkOTAwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDA0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwYTAwMDBhLCAweDAwMCB9LAorICAgIHsgMHgwODE4ZjNmYywgMHhjMDMwNDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGEwMDAwYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzMsIDB4YzAzMDBhMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAzNDQwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzMCwgMHgwMDIwMGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyOTBjNDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDMwLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBhMDAwMGEsIDB4MDAwIH0sCisgICAgeyAweDg2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4ODUwMDAwMDAsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODAxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE3YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTgsIDB4NDAyMTAyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDQ0NyB9LAorICAgIHsgMHgwMDgwMDAwMCwgMHhjMDQ5NGEyMCwgMHg0NDggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDQ1MCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTcwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0YzAyLCAweDQ1MCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMGMwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDEwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxNDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDA3ZjAwLCAweDAwMjgwYTIxLCAweDAwMCB9LAorICAgIHsgMHgwMDAwNDUwMCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDYxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAyMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDZlMDAwMDAsIDB4NDYxIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMjAyMDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyODBhMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHg0NjkgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHgwMDY5NDYyNCwgMHg2MjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDZlIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwNDgwNSwgMHg2MjcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyODI0ZjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA3LCAweDAwMjgwYTIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDc1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwNGUwMDAwMCwgMHg0OGUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDliIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0N2EgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAyZTAwMDAwLCAweDQ4ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OWIgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ3ZiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNlMDAwMDAsIDB4NDhlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5YiB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGFlMDAwMDAsIDB4NDg0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMGM5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0OGUgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NDliIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0ODkgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAwYzksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDA2ZTAwMDAwLCAweDQ4ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0OWIgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDQ4ZSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDBjOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDhlMDAwMDAsIDB4NDhlIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDQ5YiB9LAorICAgIHsgMHgwMDAwN2YwMCwgMHgwMDI4MGEyMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDQ1MDAsIDB4MDAyZjAyMjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBhZTAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMGEyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NDk4IH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ0MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDdmMDAsIDB4MDAyODBhMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDA0NTAwLCAweDAwMmYwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwYWUwMDAwMCwgMHg0YTEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDRjMDgsIDB4NDYxIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHg0MDIxMGUyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTEsIDB4NDAyMTEyMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDEyLCAweDQwMjExNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjEwMjI1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGUwMDAwMCwgMHg0YWIgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4YzA0OTRhMjAsIDB4NGFjIH0sCisgICAgeyAweGZmZmJmZmZmLCAweGMwMjg0YTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRlMDAwMDAsIDB4NGI4IH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGMsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwMDEwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0YjQgfSwKKyAgICB7IDB4YTAwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTZiLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2YywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2UwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NGIyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjEwYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0Y2IgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2ZCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNjA0ODAwLCAweDYyNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwMDAwMCwgMHg0Y2YgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MDAwMCwgMHhjMDI5NDYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NjIyIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMjEwMjIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHg0ZDYgfSwKKyAgICB7IDB4MDAwMDIxNjksIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweGNhZmViYWJlLCAweDAwNDA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDQ4MTAsIDB4MDAwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxZjgsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDBlLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDA0MjFmOSwgMHgwMDYwNDQxMSwgMHg2MjIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMTAyMzAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDRkOCB9LAorICAgIHsgMHgwMDAwMjE4MCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMywgMHgwMDMzM2UyZiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMTAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0ZTAwMDAwLCAweDUwOCB9LAorICAgIHsgMHgwMDAwMDAyYywgMHgwMDIwMGEyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDAwMDAsIDB4MThlMDBjMTEsIDB4NGY3IH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMzMzZTJmLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGQ4YzA0ODAwLCAweDRlYiB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODAzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDMwMGEyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyZCwgMHgwMDIwMTIyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTBjODMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTY5LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMzAwYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDExLCAweDAwMjEwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NGIyIH0sCisgICAgeyAweDAwMDAwMDJjLCAweGMwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyZCwgMHhjMDQwMzYyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMGYsIDB4MDAyMTAyMjEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDUwZCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4ZDkwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHhiNTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGI2MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YjcwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBjMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiODAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGY4ZTAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGI5MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjg4MCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4YmEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBlMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhiYjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGYwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweGJjMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZjNmYywgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODEwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDBmZiwgMHgwMDI4MGUzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyZjAyMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDUyMSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTM2IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwYzExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYywgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI5LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyOCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTcsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI1LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyNiwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTUsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE2LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZTAwMCwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjEsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMWZmZiwgMHgwMDIwMGMxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjMsIDB4MDAyMDM2MjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDI0LCAweDAwMjAzNjIzLCAweDAwMCB9LAorICAgIHsgMHhmMWZmZmZmZiwgMHgwMDI4M2EyZSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4YzAyMjBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkzODZlLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDJhLCAweDQwMjAzNjIwLCAweDAwMCB9LAorICAgIHsgMHg4NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWY0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4OWQwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDQwMjE0YTIwLCAweDAwMCB9LAorICAgIHsgMHg5NjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDQ4MDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwYzAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMTAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMTE2MjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE0YzAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZCwgMHgwMDIwMzYyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDMsIDB4MDAyODFlMjMsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA4LCAweDAwMjIyMjIzLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZjAwMCwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTIwZTgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjAzNjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxOCwgMHgwMDIxMWUyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjAsIDB4MDAyMDM2MjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMjIxNjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwMTRhOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWUsIDB4MDAyMDM2MjUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjExYTI0LCAweDAwMCB9LAorICAgIHsgMHgxMDAwMDAwMCwgMHgwMDI4MWEyNiwgMHgwMDAgfSwKKyAgICB7IDB4ZWZmZmZmZmYsIDB4MDAyODNhMmUsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDkzOGNlLCAweDYxMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHg0MDI4MGEyMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4NDAyODBlMjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMzAwLCAweGMwMjgxMjIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIxMTIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDE2MjAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAxYTIwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIxMDIyMiwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NTZjIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDUsIDB4MDAwIH0sCisgICAgeyAweDAwMDIwMDAwLCAweDAwMjk0YTI2LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMCwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAyLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NzQgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMTAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU4MiB9LAorICAgIHsgMHgwMDAwMDAwMiwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTc0IH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIyNTgsIDB4MDAzMDBhMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDQwMDAwLCAweDAwNjk0NjIyLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMWMxMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDAwMDAsIDB4NTgyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMmYwMjIzLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1NzggfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzAyMDFjMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwMDAwLCAweDU4MiB9LAorICAgIHsgMHgwMDAwMDAwNCwgMHgwMDJmMDIyMywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTgwIH0sCisgICAgeyAweDgxMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxNmQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjA0ODAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwNDgwMCwgMHg2MjcgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDFjMTAsIDB4NTgyIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwMjAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGVlMDAwMDAsIDB4NTg0IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVjMyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDIyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NTkyIH0sCisgICAgeyAweDAwMDBhMmI3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMzMsIDB4MDAyMDI2MmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFhLCAweDAwMjEyMjI5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwNiwgMHgwMDIyMjYyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyYzQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMzA0OGU5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMGUwMDAwMCwgMHg1OTAgfSwKKyAgICB7IDB4MDAwMGEyZDEsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDA0ODA4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJkMSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDA1MDRhMjgsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwMmYwMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwY2MwMDAwMCwgMHg1YTAgfSwKKyAgICB7IDB4MDAwMGEyYmIsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzNCwgMHgwMDIwMjYyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWEsIDB4MDAyMTIyMjksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA2LCAweDAwMjIyNjI5LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJjNSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAzMDQ4ZTksIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwZTAwMDAwLCAweDU5ZSB9LAorICAgIHsgMHgwMDAwYTJkMiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDQ4MDgsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmQyLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDUwNGEyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDAyZjAyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBjYzAwMDAwLCAweDVhZSB9LAorICAgIHsgMHgwMDAwYTJiZiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM1LCAweDAwMjAyNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MjksIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmM2LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NWFjIH0sCisgICAgeyAweDAwMDBhMmQzLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTJjMywgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDM2LCAweDAwMjAyNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxYSwgMHgwMDIxMjIyOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDYsIDB4MDAyMjI2MjksIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMmM3LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDMwNDhlOSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDBlMDAwMDAsIDB4NWI4IH0sCisgICAgeyAweDAwMDBhMmQ0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgwOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMGEyZDQsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNTA0YTI4LCAweDAwMCB9LAorICAgIHsgMHg4NTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAzMDRhLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMTAwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA0MDAwMDAsIDB4NWJlIH0sCisgICAgeyAweGE0MDAwMDAwLCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDQwNDgwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA2MDAwMDAsIDB4NWMzIH0sCisgICAgeyAweDAwMDAwMDAwLCAweGMwNDAwNDAwLCAweDAwMSB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDNmLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAzZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwM2YsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA1LCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwYTFmNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDg4MDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmYwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDIsIDB4MDA4MDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDBlZTAwMDAwLCAweDVkNiB9LAorICAgIHsgMHgwMDAwMTAwMCwgMHgwMDIwMDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMmIsIDB4MDAyMDM2MjIsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNjAwMDAwLCAweDVkYSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHg1YzMgfSwKKyAgICB7IDB4OTgwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDYwMDAwMCwgMHg1ZGEgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4YzA0MDA0MDAsIDB4MDAxIH0sCisgICAgeyAweDAwMDBhMmE0LCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ODkwMDAwMDAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAxLCAweDAwNDA0ODExLCAweDVjZCB9LAorICAgIHsgMHg5NzAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDhhMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgxMSwgMHg1Y2QgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA2MDAwMDAsIDB4NWYzIH0sCisgICAgeyAweDAwMDFhMmE0LCAweGMwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNiwgMHgwMDYwNDgxMSwgMHgzNzQgfSwKKyAgICB7IDB4MDAwMDIwMTAsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDEwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAyMTdjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwOTgwMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmZmZmYsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNzAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwNDIxN2YsIDB4MDA2MDQ0MTEsIDB4NjIyIH0sCisgICAgeyAweDAwMDAwMDFmLCAweDAwMjEwMjMwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgxNGMwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDA0MDRjMTEsIDB4NWVkIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwNDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDQsIDB4MDAyOTFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmZmZmIsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDgsIDB4MDAyOTFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxNywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmZmZjcsIDB4MDAyODFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDE3LCAweDAwODAzNjI3LCAweDAwMCB9LAorICAgIHsgMHgwMDAxYTJhNCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTYsIDB4MDA2MDQ4MTEsIDB4Mzc0IH0sCisgICAgeyAweDAwMDAyMDEwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAxMDAwMCwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDIxN2MsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAxODAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHhmZmZmZmZmZiwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDE3MDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHg4MTAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDEsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDQyMTdmLCAweDAwNjA0NDExLCAweDYyMiB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDIxMDIzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MTRjMDAwMDAsIDB4NjIxIH0sCisgICAgeyAweDAwMDAwMDEwLCAweDAwNDA0YzExLCAweDYwNyB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHhjMDIwMDQwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MzhjMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDFkLCAweDAwMjAwYTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZSwgMHgwMDIwMGUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWYsIDB4MDAyMDEyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIwLCAweDAwMjAxNjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjE2OSwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MDQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODA1LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDIwNDgwMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDA0LCAweDAwMzAxMjI0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDJmMDA2NCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MGNjMDAwMDAsIDB4NjIwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjgxYTIyLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwOCwgMHgwMDIyMTIyMiwgMHgwMDAgfSwKKyAgICB7IDB4ZmZmZmYwMDAsIDB4MDAyODEyMjQsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjkxMGM0LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxZiwgMHgwMDQwMzYyNCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDA4MDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFhYzAwMDAwLCAweDYyMiB9LAorICAgIHsgMHg5ZjAwMDAwMCwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4Y2FmZWJhYmUsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDFhZTAwMDAwLCAweDYyNSB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDgwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFjMDAwMDAsIDB4NjI3IH0sCisgICAgeyAweDllMDAwMDAwLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHhjYWZlYmFiZSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MWFlMDAwMDAsIDB4NjJhIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwODAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDAwMCwgMHgwMGIgfSwKKyAgICB7IDB4MDAwMDEwMDAsIDB4MDA2MDA0MTEsIDB4MzE1IH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjAwNDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDYwMDgxMSwgMHgxYjIgfSwKKyAgICB7IDB4MDAwMDIyNWMsIDB4MDAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAzLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMjI1NiwgMHgwMDIwNDQxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMWIsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDBhMWZjLCAweDAwMjA0NDExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMSwgMHgwMDIwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMWExZmQsIDB4YzAyMDQ0MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIxLCAweDAwMjAxZTJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAxMCwgMHgwMDIyMWUyNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMjQsIDB4MDAyMDIyMmQsIDB4MDAwIH0sCisgICAgeyAweDAwMDBmZmZmLCAweDAwMjgyMjI4LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDI5NDkwNywgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyMDQ4MTEsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDIyLCAweDAwMjAyMjJkLCAweDAwMCB9LAorICAgIHsgMHgwMDAwZmZmZiwgMHgwMDI4MjIyOCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAyOTQ5MDcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjA0ODExLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAyMywgMHgwMDIwMWUyZCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMTAsIDB4MDAyMjFlMjcsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMjk0OTA3LCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDQwNDgxMSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMDAwMDAsIDB4MDAwMDAwMDAsIDB4MDAwIH0sCisgICAgeyAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMCB9LAorICAgIHsgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAgfSwKKyAgICB7IDB4MDE0MjA1MGEsIDB4MDViYTAyNTAsIDB4MDAwIH0sCisgICAgeyAweDAxYzMwMTY4LCAweDA0NDEwNWJhLCAweDAwMCB9LAorICAgIHsgMHgwMjI1MDIwOSwgMHgwMjUwMDE1MSwgMHgwMDAgfSwKKyAgICB7IDB4MDIyMzAyNDUsIDB4MDJhMDAyNDEsIDB4MDAwIH0sCisgICAgeyAweDAzZDcwNWJhLCAweDA1YmEwNWJhLCAweDAwMCB9LAorICAgIHsgMHgwNWUyMDVlMywgMHgwMzFmMDViYSwgMHgwMDAgfSwKKyAgICB7IDB4MDMyMDA1YmYsIDB4MDMyMDAzNGEsIDB4MDAwIH0sCisgICAgeyAweDAzMzQwMjgyLCAweDAzNGMwMzNlLCAweDAwMCB9LAorICAgIHsgMHgwNWJhMDViYSwgMHgwNWJhMDViYSwgMHgwMDAgfSwKKyAgICB7IDB4MDViYTA1NTcsIDB4MDViYTAzMmEsIDB4MDAwIH0sCisgICAgeyAweDAzYmMwNWJhLCAweDA0YzMwMzRlLCAweDAwMCB9LAorICAgIHsgMHgwNGEyMDQ1NSwgMHgwNDNmMDViYSwgMHgwMDAgfSwKKyAgICB7IDB4MDRkODA1YmEsIDB4MDQ0MzA0ZTUsIDB4MDAwIH0sCisgICAgeyAweDA0NTUwNTBmLCAweDAzNWIwMzdiLCAweDAwMCB9LAorICAgIHsgMHgwNWJhMDViYSwgMHgwNWJhMDViYSwgMHgwMDAgfSwKKyAgICB7IDB4MDViYTA1YmEsIDB4MDViYTA1YmEsIDB4MDAwIH0sCisgICAgeyAweDA1YmEwNWJhLCAweDA1ZDgwNWMxLCAweDAwMCB9LAorICAgIHsgMHgwNWJhMDViYSwgMHgwMDA3MDViYSwgMHgwMDAgfSwKKyAgICB7IDB4MDViYTA1YmEsIDB4MDViYTA1YmEsIDB4MDAwIH0sCisgICAgeyAweDA1YmEwNWJhLCAweDA1YmEwNWJhLCAweDAwMCB9LAorICAgIHsgMHgwM2Y4MDNlZCwgMHgwNDA4MDQwNiwgMHgwMDAgfSwKKyAgICB7IDB4MDQwZTA0MGEsIDB4MDQwYzA0MTAsIDB4MDAwIH0sCisgICAgeyAweDA0MWMwNDE4LCAweDA0MjQwNDIwLCAweDAwMCB9LAorICAgIHsgMHgwNDJjMDQyOCwgMHgwNDM0MDQzMCwgMHgwMDAgfSwKKyAgICB7IDB4MDViYTA1YmEsIDB4MDQzYTA0MzgsIDB4MDAwIH0sCisgICAgeyAweDA1YmEwNWJhLCAweDA1YmEwNWJhLCAweDAwMCB9LAorICAgIHsgMHgwNWJhMDViYSwgMHgwNWJhMDViYSwgMHgwMDAgfSwKKyAgICB7IDB4MDAwMjA2MGUsIDB4MDYyYzAwMDYsIDB4MDAwIH0sCit9OworCitzdGF0aWMgY29uc3QgdTMyIFJTNzgwX3BmcF9taWNyb2NvZGVbXSA9IHsKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4N2MwMzhiLAorMHg4MDAxZGIsCisweDdjMDM4YiwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGM0MTgzOCwKKzB4Y2EyNDAwLAorMHhjYTI4MDAsCisweDk1ODFjYiwKKzB4YzQxYzNhLAorMHhjM2MwMDAsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHg3Yzc0NGIsCisweGMyMDAwNSwKKzB4OTljMDAwLAorMHhjNDFjM2EsCisweDdjNzQ0YywKKzB4YzBmZmUwLAorMHgwNDJjMDgsCisweDMwOTAwMiwKKzB4N2QyNTAwLAorMHgzNTE0MDIsCisweDdkMzUwYiwKKzB4MjU1NDA3LAorMHg3Y2Q1ODAsCisweDI1OWMwNywKKzB4OTVjMDA0LAorMHhkNTAwMWIsCisweDdlZGRjMSwKKzB4N2Q5ZDgwLAorMHhkNjgwMWIsCisweGQ1ODAxYiwKKzB4ZDQ0MDFlLAorMHhkNTQwMWUsCisweGQ2NDAxZSwKKzB4ZDY4MDFlLAorMHhkNDgwMWUsCisweGQ0YzAxZSwKKzB4OTc4M2QzLAorMHhkNWMwMWUsCisweGNhMDgwMCwKKzB4ODAwMDFhLAorMHhjYTBjMDAsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHg4MDAwMGMsCisweGM0MTgzOCwKKzB4ZTQwMTNlLAorMHhkNDAwMWUsCisweDgwMDAwYywKKzB4YzQxODM4LAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4ZTQwMTFlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhlNDAxM2UsCisweGQ0MDAxZSwKKzB4ZDQ0MDFlLAorMHhlZTAwMWUsCisweGNhMDQwMCwKKzB4YTAwMDAwLAorMHg3ZTgyOGIsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHg4MDAxZGIsCisweGQ0ODAyNCwKKzB4Y2EwODAwLAorMHg3YzAwYzAsCisweGM4MTQyNSwKKzB4YzgxODI0LAorMHg3Yzk0ODgsCisweDdjOTg4MCwKKzB4YzIwMDAzLAorMHhkNDAwNzUsCisweDdjNzQ0YywKKzB4ODAwMDY0LAorMHhkNDQwMWUsCisweGNhMTgwMCwKKzB4ZDQ0MDFlLAorMHhkNTgwMWUsCisweDgwMDA2MiwKKzB4ZDQwMDc1LAorMHhkNDQwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweGQ0ODAxOSwKKzB4ZDRjMDE4LAorMHhkNTAwMTcsCisweGQ0ODAxZSwKKzB4ZDRjMDFlLAorMHhkNTAwMWUsCisweGUyMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4ZDQwMDc1LAorMHhkNDQwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweGQ0ODAxOSwKKzB4ZDRjMDE4LAorMHhkNTAwMTcsCisweGQ0ODAxZSwKKzB4ZDRjMDFlLAorMHhkNTAwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4Y2EwODAwLAorMHgyNDhjMDEsCisweGQ0ODA2MCwKKzB4OTRjMDAzLAorMHgwNDEwMDEsCisweDA0MTAwMiwKKzB4ZDUwMDI1LAorMHhkNDQwMWUsCisweDgwMDAwMCwKKzB4ZDQ4MDFlLAorMHhjYTA4MDAsCisweGQ0ODA2MSwKKzB4ZDQ0MDFlLAorMHg4MDAwMDAsCisweGQ0ODAxZSwKKzB4Y2EwODAwLAorMHhjYTBjMDAsCisweGQ0NDAxZSwKKzB4ZDQ4MDE2LAorMHhkNGMwMTYsCisweGQ0ODAxZSwKKzB4ODAwMWRiLAorMHhkNGMwMWUsCisweGM2MDg0MywKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweDk0ODAwNCwKKzB4Y2ExNDAwLAorMHhlNDIwZjMsCisweGQ0MjAxMywKKzB4ZDU2MDY1LAorMHhkNGUwMWMsCisweGQ1MjAxYywKKzB4ZDU2MDFjLAorMHg4MDAwMDAsCisweDA2MjAwMSwKKzB4YzYwODQzLAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4OTQ4M2Y3LAorMHhjYTE0MDAsCisweGU0MjBmMywKKzB4ODAwMDljLAorMHhkNDIwMTMsCisweGM2MDg0MywKKzB4Y2EwYzAwLAorMHhjYTEwMDAsCisweDk4ODNlZiwKKzB4Y2ExNDAwLAorMHhkNDAwNjQsCisweDgwMDBiMCwKKzB4MDAwMDAwLAorMHhjNDE0MzIsCisweGM2MTg0MywKKzB4YzQwODJmLAorMHg5NTQwMDUsCisweGM0MGMzMCwKKzB4ZDQ0MDFlLAorMHg4MDAwMDAsCisweGVlMDAxZSwKKzB4OTU4M2Y1LAorMHhjNDEwMzEsCisweGQ0NDAzMywKKzB4ZDUyMDY1LAorMHhkNGEwMWMsCisweGQ0ZTAxYywKKzB4ZDUyMDFjLAorMHhlNDAxNWUsCisweGQ0MDAxZSwKKzB4ODAwMDAwLAorMHgwNjIwMDEsCisweGNhMTgwMCwKKzB4MGEyMDAxLAorMHhkNjAwNzYsCisweGM0MDgzNiwKKzB4OTg4MDA3LAorMHhjNjEwNDUsCisweDk1MDExMCwKKzB4ZDQwMDFmLAorMHhkNDYwNjIsCisweDgwMDAwMCwKKzB4ZDQyMDYyLAorMHhjYzM4MzUsCisweGNjMTQzMywKKzB4ODQwMWRlLAorMHhkNDAwNzIsCisweGQ1NDAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweGUyMDAxYSwKKzB4ODQwMWRlLAorMHhlMjAwMWEsCisweGNjMTA0YiwKKzB4Y2MwNDQ3LAorMHgyYzk0MDEsCisweDdkMDk4YiwKKzB4OTg0MDA1LAorMHg3ZDE1Y2IsCisweGQ0MDAxYSwKKzB4ODAwMWRiLAorMHhkNDAwNmQsCisweDM0NDQwMSwKKzB4Y2MwYzQ4LAorMHg5ODQwM2EsCisweGNjMmM0YSwKKzB4OTU4MDA0LAorMHhjYzA0NDksCisweDgwMDFkYiwKKzB4ZDQwMDFhLAorMHhkNGMwMWEsCisweDI4MjgwMSwKKzB4ODQwMTEzLAorMHhjYzEwMDMsCisweDk4ODAxYiwKKzB4MDQzODBjLAorMHg4NDAxMTMsCisweGNjMTAwMywKKzB4OTg4MDE3LAorMHgwNDM4MDgsCisweDg0MDExMywKKzB4Y2MxMDAzLAorMHg5ODgwMTMsCisweDA0MzgwNCwKKzB4ODQwMTEzLAorMHhjYzEwMDMsCisweDk4ODAxNCwKKzB4Y2MxMDRjLAorMHg5YTgwMDksCisweGNjMTQ0ZCwKKzB4OTg0MGRjLAorMHhkNDAwNmQsCisweGNjMTg0OCwKKzB4ZDUwMDFhLAorMHhkNTQwMWEsCisweDgwMDBlYywKKzB4ZDU4MDFhLAorMHg5NmMwZDUsCisweGQ0MDA2ZCwKKzB4ODAwMWRiLAorMHhkNDAwNmUsCisweDlhYzAwMywKKzB4ZDQwMDZkLAorMHhkNDAwNmUsCisweDgwMDAwMCwKKzB4ZWMwMDdmLAorMHg5YWMwY2MsCisweGQ0MDA2ZCwKKzB4ODAwMWRiLAorMHhkNDAwNmUsCisweGNjMTQwMywKKzB4Y2MxODAzLAorMHhjYzFjMDMsCisweDdkOTEwMywKKzB4N2RkNTgzLAorMHg3ZDE5MGMsCisweDM1Y2MxZiwKKzB4MzU3MDFmLAorMHg3Y2YwY2IsCisweDdjZDA4YiwKKzB4ODgwMDAwLAorMHg3ZThlOGIsCisweDk1YzAwNCwKKzB4ZDQwMDZlLAorMHg4MDAxZGIsCisweGQ0MDAxYSwKKzB4ZDRjMDFhLAorMHhjYzA4MDMsCisweGNjMGMwMywKKzB4Y2MxMDAzLAorMHhjYzE0MDMsCisweGNjMTgwMywKKzB4Y2MxYzAzLAorMHhjYzI0MDMsCisweGNjMjgwMywKKzB4MzVjNDFmLAorMHgzNmIwMWYsCisweDdjNzA0YiwKKzB4MzRmMDFmLAorMHg3YzcwNGIsCisweDM1NzAxZiwKKzB4N2M3MDRiLAorMHg3ZDg4ODEsCisweDdkY2NjMSwKKzB4N2U1MTAxLAorMHg3ZTk1NDEsCisweDdjOTA4MiwKKzB4N2NkNGMyLAorMHg3Yzg0OGIsCisweDlhYzAwMywKKzB4N2M4YzhiLAorMHgyYzg4MDEsCisweDk4ODA5ZSwKKzB4ZDQwMDZkLAorMHg5ODQwOWMsCisweGQ0MDA2ZSwKKzB4Y2MwODRjLAorMHhjYzBjNGQsCisweGNjMTA0OCwKKzB4ZDQ4MDFhLAorMHhkNGMwMWEsCisweDgwMDEyNCwKKzB4ZDUwMDFhLAorMHhjYzA4MzIsCisweGQ0MDAzMiwKKzB4OTQ4MmI2LAorMHhjYTBjMDAsCisweGQ0NDAxZSwKKzB4ODAwMDAwLAorMHhkNDAwMWUsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhjYTA4MDAsCisweGNhMGMwMCwKKzB4Y2ExMDAwLAorMHhkNDQwMWUsCisweGNhMTQwMCwKKzB4ZDQ4MDFlLAorMHhkNGMwMWUsCisweGQ1MDAxZSwKKzB4ZDU0MDFlLAorMHhkNTQwMzQsCisweDgwMDAwMCwKKzB4ZWUwMDFlLAorMHgyODA0MDQsCisweGUyMDAxYSwKKzB4ZTIwMDFhLAorMHhkNDQwMWEsCisweGNhMzgwMCwKKzB4Y2MwODAzLAorMHhjYzBjMDMsCisweGNjMGMwMywKKzB4Y2MwYzAzLAorMHg5ODgyOWEsCisweDAwMDAwMCwKKzB4ODQwMWRlLAorMHhkN2EwNmYsCisweDgwMDAwMCwKKzB4ZWUwMDFmLAorMHhjYTA0MDAsCisweGMyZmYwMCwKKzB4Y2MwODM0LAorMHhjMTNmZmYsCisweDdjNzRjYiwKKzB4N2NjOTBiLAorMHg3ZDAxMGYsCisweDk5MDI4ZCwKKzB4N2M3MzhiLAorMHg4NDAxZGUsCisweGQ3YTA2ZiwKKzB4ODAwMDAwLAorMHhlZTAwMWYsCisweGNhMDgwMCwKKzB4MjgxOTAwLAorMHg3ZDg5OGIsCisweDk1ODAxNCwKKzB4MjgxNDA0LAorMHhjYTBjMDAsCisweGNhMTAwMCwKKzB4Y2ExYzAwLAorMHhjYTI0MDAsCisweGUyMDAxZiwKKzB4ZDRjMDFhLAorMHhkNTAwMWEsCisweGQ1NDAxYSwKKzB4Y2MxODAzLAorMHhjYzJjMDMsCisweGNjMmMwMywKKzB4Y2MyYzAzLAorMHg3ZGE1OGIsCisweDdkOWM0NywKKzB4OTg0Mjc0LAorMHgwMDAwMDAsCisweDgwMDE4NCwKKzB4ZDRjMDFhLAorMHhkNDQwMWUsCisweGQ0ODAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGVlMDAxZSwKKzB4Y2EwNDAwLAorMHhhMDAwMDAsCisweDdlODI4YiwKKzB4ZTQwMTNlLAorMHhkNDAwMWUsCisweGQ0NDAxZSwKKzB4ZWUwMDFlLAorMHhjYTA0MDAsCisweGEwMDAwMCwKKzB4N2U4MjhiLAorMHhjYTA4MDAsCisweDI0OGMwNiwKKzB4MGNjYzA2LAorMHg5OGMwMDYsCisweGNjMTA0ZSwKKzB4OTkwMDA0LAorMHhkNDAwNzMsCisweGU0MDExZSwKKzB4ZDQwMDFlLAorMHhkNDQwMWUsCisweGQ0ODAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweGNhMDgwMCwKKzB4Y2EwYzAwLAorMHgzNGQwMTgsCisweDI1MTAwMSwKKzB4OTUwMDIxLAorMHhjMTdmZmYsCisweGNhMTAwMCwKKzB4Y2ExNDAwLAorMHhjYTE4MDAsCisweGQ0ODAxZCwKKzB4ZDRjMDFkLAorMHg3ZGIxOGIsCisweGMxNDIwMiwKKzB4YzJjMDAxLAorMHhkNTgwMWQsCisweDM0ZGMwZSwKKzB4N2Q1ZDRjLAorMHg3ZjczNGMsCisweGQ3NDAxZSwKKzB4ZDUwMDFlLAorMHhkNTQwMWUsCisweGMxNDIwMCwKKzB4YzJjMDAwLAorMHgwOTljMDEsCisweDMxZGMxMCwKKzB4N2Y1ZjRjLAorMHg3ZjczNGMsCisweDA0MjgwMiwKKzB4N2Q4MzgwLAorMHhkNWE4NmYsCisweGQ1ODA2NiwKKzB4ZDc0MDFlLAorMHhlYzAwNWUsCisweGM4MjQwMiwKKzB4YzgyNDAyLAorMHg4MDAxZGIsCisweGQ2MDA3NiwKKzB4ZDQ0MDFlLAorMHhkNDgwMWUsCisweGQ0YzAxZSwKKzB4ODAwMDAwLAorMHhlZTAwMWUsCisweDgwMDAwMCwKKzB4ZWUwMDFmLAorMHhkNDAwMWYsCisweDgwMDAwMCwKKzB4ZDQwMDFmLAorMHhkNDAwMWYsCisweDg4MDAwMCwKKzB4ZDQwMDFmLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAwMDAwMCwKKzB4MDAwMDAwLAorMHgwMDAwMDAsCisweDAxMDE5NCwKKzB4MDIwMTliLAorMHgwMzAwYjIsCisweDA0MDBhMiwKKzB4MDUwMDAzLAorMHgwNjAwM2YsCisweDA3MDAzMiwKKzB4MDgwMTRmLAorMHgwOTAwNDYsCisweDBhMDAzNiwKKzB4MTAwMWQ5LAorMHgxNzAwYzUsCisweDIyMDE1ZCwKKzB4MjMwMTZjLAorMHgyMDAwZDcsCisweDI0MDE0OCwKKzB4MjYwMDRkLAorMHgyNzAwNWMsCisweDI4MDA4ZCwKKzB4MjkwMDUxLAorMHgyYTAwN2UsCisweDJiMDA2MSwKKzB4MmYwMDg4LAorMHgzMjAwYWEsCisweDM0MDFhMiwKKzB4MzYwMDZmLAorMHgzYzAxNzksCisweDNmMDA5NSwKKzB4NDEwMWFmLAorMHg0NDAxNTEsCisweDU1MDE5NiwKKzB4NTYwMTlkLAorMHg2MDAwMGIsCisweDYxMDAzNCwKKzB4NjIwMDM4LAorMHg2MzAwMzgsCisweDY0MDAzOCwKKzB4NjUwMDM4LAorMHg2NjAwMzgsCisweDY3MDAzOCwKKzB4NjgwMDNhLAorMHg2OTAwNDEsCisweDZhMDA0OCwKKzB4NmIwMDQ4LAorMHg2YzAwNDgsCisweDZkMDA0OCwKKzB4NmUwMDQ4LAorMHg2ZjAwNDgsCisweDczMDFkOSwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKKzB4MDAwMDA2LAorMHgwMDAwMDYsCisweDAwMDAwNiwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgUlY3NzBfY3BfbWljcm9jb2RlW10gPSB7CisweGNjMDAwM2VhLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHg4MDAwMDAwMSwKKzB4ZDA0MDAwN2YsCisweDgwMDAwMDAxLAorMHhjYzQwMDA0MSwKKzB4N2M0MGMwMDAsCisweGMwMTYwMDA0LAorMHgzMGQwM2ZmZiwKKzB4N2QxNTAwMGMsCisweGNjMTEwMDAwLAorMHgyOGQ4MDAxZSwKKzB4MzE5ODAwMDEsCisweDI4ZGMwMDFmLAorMHhjODIwMDAwNCwKKzB4OTVjMDAwMDYsCisweDdjNDI0MDAwLAorMHhjYzAwMDA2MiwKKzB4N2U1NjgwMGMsCisweGNjMjkwMDAwLAorMHhjODI0MDAwNCwKKzB4N2UyNjAwMGIsCisweDk1ODAwMDA2LAorMHg3YzQyYzAwMCwKKzB4Y2MwMDAwNjIsCisweDdlZDcwMDBjLAorMHhjYzMxMDAwMCwKKzB4YzgyYzAwMDQsCisweDdlMmUwMDBjLAorMHhjYzAwMDA2MiwKKzB4MzExMDNmZmYsCisweDgwMDAwMDAxLAorMHhjZTExMDAwMCwKKzB4N2M0MGMwMDAsCisweDgwMDAwMDAxLAorMHhjYzQwMDA0MCwKKzB4ODAwMDAwMDEsCisweGNjNDEyMjU3LAorMHg3YzQxODAwMCwKKzB4Y2M0MDAwNDUsCisweGNjNDAwMDQ4LAorMHhjYzQxMjI1YywKKzB4Y2M0MWExZmMsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGNjNDAwMDQ1LAorMHhjYzQwMDA0OCwKKzB4N2M0MGMwMDAsCisweGNjNDEyMjVjLAorMHhjYzQxYTFmYywKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4Y2MwMDAwNDUsCisweGNjMDAwMDQ4LAorMHhjYzQxMjI1YywKKzB4Y2M0MWExZmMsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweDA0MGNhMWZkLAorMHhjMDEyMDAwMSwKKzB4Y2MwMDAwNDUsCisweGNjMDAwMDQ4LAorMHg3Y2QwYzAwYywKKzB4Y2M0MTIyNWMsCisweGNjNDFhMWZjLAorMHhkMDRkMDAwMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ODAwMDAwMDEsCisweGNjNDEyMjVkLAorMHg3YzQwODAwMCwKKzB4N2M0MGMwMDAsCisweGMwMmEwMDAyLAorMHg3YzQxMDAwMCwKKzB4N2QyOTAwMGMsCisweDMwOTQwMDAxLAorMHgzMDk4MDAwNiwKKzB4MzA5YzAzMDAsCisweDI5ZGMwMDA4LAorMHg3YzQyMDAwMCwKKzB4N2M0MjQwMDAsCisweDk1NDAwMDBmLAorMHhjMDJlMDAwNCwKKzB4MDVmMDIyNTgsCisweDdmMmYwMDBjLAorMHhjYzMxMDAwMCwKKzB4YzgyODAwMDQsCisweGNjYzEyMTY5LAorMHhjZDAxMjE2YSwKKzB4Y2U4MTIxNmIsCisweDBkYjQwMDAyLAorMHhjYzAxMjE2YywKKzB4OTc0MDAwMGUsCisweDBkYjQwMDAwLAorMHg4MDAwMDA3YiwKKzB4YzgzNDAwMGEsCisweDBkYjQwMDAyLAorMHg5NzQwMDAwOSwKKzB4MGRiNDAwMDAsCisweGMwMmUwMDA0LAorMHgwNWYwMjI1OCwKKzB4N2YyZjAwMGMsCisweGNjMzEwMDAwLAorMHhjODI4MDAwNCwKKzB4ODAwMDAwN2IsCisweGM4MzQwMDBhLAorMHg5NzQwMDAwNCwKKzB4N2UwMjgwMDAsCisweDgwMDAwMDdiLAorMHhjODM0MDAwYSwKKzB4MGRiNDAwMDQsCisweDk3NDBmZjhjLAorMHgwMDAwMDAwMCwKKzB4Y2UwMTIxNmQsCisweGNlNDEyMTZlLAorMHhjODI4MDAwMywKKzB4YzgzNDAwMGEsCisweDliNDAwMDA0LAorMHgwNDNjMDAwNSwKKzB4ODQwMDAyNmQsCisweGNjMDAwMDYyLAorMHgwZGY0MDAwMCwKKzB4OTc0MDAwMGIsCisweGM4MmMwM2U2LAorMHhjZTgxYTJiNywKKzB4YzAzMDAwMDYsCisweDdlZjM0MDI4LAorMHhjMDMwMDAyMCwKKzB4N2Y2YjgwMjAsCisweDdmYjNjMDI5LAorMHhjZjgxYTJjNCwKKzB4ODAwMDAwMDEsCisweGNmYzFhMmQxLAorMHgwZGY0MDAwMSwKKzB4OTc0MDAwMGIsCisweGM4MmMwM2U3LAorMHhjZTgxYTJiYiwKKzB4YzAzMDAwMDYsCisweDdlZjM0MDI4LAorMHhjMDMwMDAyMCwKKzB4N2Y2YjgwMjAsCisweDdmYjNjMDI5LAorMHhjZjgxYTJjNSwKKzB4ODAwMDAwMDEsCisweGNmYzFhMmQyLAorMHgwZGY0MDAwMiwKKzB4OTc0MDAwMGIsCisweGM4MmMwM2U4LAorMHhjZTgxYTJiZiwKKzB4YzAzMDAwMDYsCisweDdlZjM0MDI4LAorMHhjMDMwMDAyMCwKKzB4N2Y2YjgwMjAsCisweDdmYjNjMDI5LAorMHhjZjgxYTJjNiwKKzB4ODAwMDAwMDEsCisweGNmYzFhMmQzLAorMHhjODJjMDNlOSwKKzB4Y2U4MWEyYzMsCisweGMwMzAwMDA2LAorMHg3ZWYzNDAyOCwKKzB4YzAzMDAwMjAsCisweDdmNmI4MDIwLAorMHg3ZmIzYzAyOSwKKzB4Y2Y4MWEyYzcsCisweDgwMDAwMDAxLAorMHhjZmMxYTJkNCwKKzB4ODAwMDAwMDEsCisweGNjNDAwMDQyLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDI5MTQwMDFkLAorMHgzMTU0MDAwMSwKKzB4OTk0MDAwMGQsCisweDMxMTgxMDAwLAorMHhjODFjMDAxMSwKKzB4MDlkYzAwMDEsCisweDk1YzBmZmZmLAorMHhjODFjMDAxMSwKKzB4Y2NjMTIxMDAsCisweGNkMDEyMTAxLAorMHhjY2MxMjEwMiwKKzB4Y2QwMTIxMDMsCisweDA0MTgwMDA0LAorMHg4MDAwMDM5ZiwKKzB4Y2Q4MWEyYTQsCisweGMwMmEwMDA0LAorMHg5NTgwMDAwOCwKKzB4MzZhODIxYTMsCisweGNjMjkwMDAwLAorMHhjODI4MDAwNCwKKzB4YzgxYzAwMTEsCisweDBkZTQwMDQwLAorMHg5NjQwZmZmZiwKKzB4YzgxYzAwMTEsCisweGNjYzEyMTcwLAorMHhjZDAxMjE3MSwKKzB4YzgyMDAwMTIsCisweDk2MDAwMDAwLAorMHhjODIwMDAxMiwKKzB4ODAwMDAzOWYsCisweGNjMDAwMDY0LAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweGNjMDAwMDQ1LAorMHhjYzAwMDA0OCwKKzB4NDBkNDAwMDMsCisweGNkNDEyMjVjLAorMHhjZDAxYTFmYywKKzB4YzAxYTAwMDEsCisweDA0MWNhMWZkLAorMHg3ZGQ5YzAwYywKKzB4N2M0MjAwMDAsCisweDA4Y2MwMDAxLAorMHgwNjI0MDAwMSwKKzB4MDYyODAwMDIsCisweGNlMWQwMDAwLAorMHhjZTVkMDAwMCwKKzB4OThjMGZmZmEsCisweGNlOWQwMDAwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHg3YzQwYzAwMCwKKzB4MzBkMDAwMDEsCisweDI4Y2MwMDAxLAorMHg3YzQxNDAwMCwKKzB4OTUwMDAwMDYsCisweDdjNDE4MDAwLAorMHhjZDQxMjE2ZCwKKzB4Y2Q4MTIxNmUsCisweDgwMDAwMGYzLAorMHhjODFjMDAwMywKKzB4YzAyMjAwMDQsCisweDdlMTYwMDBjLAorMHhjYzIxMDAwMCwKKzB4YzgxYzAwMDQsCisweDdjNDI0MDAwLAorMHg5OGMwMDAwNCwKKzB4N2M0MjgwMDAsCisweDgwMDAwMDAxLAorMHhjZGU1MDAwMCwKKzB4Y2U0MTIxNjksCisweGNlODEyMTZhLAorMHhjZGMxMjE2YiwKKzB4ODAwMDAwMDEsCisweGNjMDEyMTZjLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4N2M0MWMwMDAsCisweDI4YTQwMDA4LAorMHgzMjY0MDBmZiwKKzB4MGU2ODAwM2MsCisweDk2ODAwMDBhLAorMHg3YzAyMDAwMCwKKzB4N2M0MjAwMDAsCisweDFlMzAwMDAzLAorMHhjYzAwMDA2YSwKKzB4OWIwMDAwMDMsCisweDQyMjAwMDA1LAorMHgwNDIwMDA0MCwKKzB4ODAwMDAxMTAsCisweDdjMDI0MDAwLAorMHg3ZTAyNDAwMCwKKzB4OWE0MDAwMDAsCisweDBhNjQwMDAxLAorMHgzMGVjMDAxMCwKKzB4OWFjMDAwMGEsCisweGNjMDAwMDYyLAorMHhjMDJhMDAwNCwKKzB4YzgyYzAwMjEsCisweDdlOTI4MDBjLAorMHhjYzAwMDA0MSwKKzB4Y2MyOTAwMDAsCisweGNlYzAwMDIxLAorMHg4MDAwMDEyMCwKKzB4YzgzMDAwMDQsCisweGNkMDEyMTZkLAorMHhjZDQxMjE2ZSwKKzB4YzgzMDAwMDMsCisweDdmMWYwMDBiLAorMHgzMGY0MDAwNywKKzB4Mjc3ODAwMDEsCisweDk3NDAwMDJhLAorMHgwN2I4MDEyNSwKKzB4OWY4MDAwMDAsCisweDAwMDAwMDAwLAorMHg4MDAwMDEzNSwKKzB4N2YxYjgwMDQsCisweDgwMDAwMTM5LAorMHg3ZjFiODAwNSwKKzB4ODAwMDAxM2QsCisweDdmMWI4MDAyLAorMHg4MDAwMDE0MSwKKzB4N2YxYjgwMDMsCisweDgwMDAwMTQ1LAorMHg3ZjFiODAwNywKKzB4ODAwMDAxNDksCisweDdmMWI4MDA2LAorMHg4MDAwMDE0ZSwKKzB4MjhhNDAwMDgsCisweDliODAwMDE5LAorMHgyOGE0MDAwOCwKKzB4ODAwMDAxNWUsCisweDMyNjQwMGZmLAorMHg5YjgwMDAxNSwKKzB4MjhhNDAwMDgsCisweDgwMDAwMTVlLAorMHgzMjY0MDBmZiwKKzB4OWI4MDAwMTEsCisweDI4YTQwMDA4LAorMHg4MDAwMDE1ZSwKKzB4MzI2NDAwZmYsCisweDliODAwMDBkLAorMHgyOGE0MDAwOCwKKzB4ODAwMDAxNWUsCisweDMyNjQwMGZmLAorMHg5YjgwMDAwOSwKKzB4MjhhNDAwMDgsCisweDgwMDAwMTVlLAorMHgzMjY0MDBmZiwKKzB4OWI4MDAwMDUsCisweDI4YTQwMDA4LAorMHg4MDAwMDE1ZSwKKzB4MzI2NDAwZmYsCisweDI4YTQwMDA4LAorMHgzMjY0MDBmZiwKKzB4MGU2ODAwM2MsCisweDlhODBmZWIxLAorMHgyOGVjMDAwOCwKKzB4N2M0MzQwMDAsCisweDdjNDM4MDAwLAorMHg3YzQzYzAwMCwKKzB4OTZjMDAwMDcsCisweGNjMDAwMDYyLAorMHhjZjQxMjE2OSwKKzB4Y2Y4MTIxNmEsCisweGNmYzEyMTZiLAorMHg4MDAwMDAwMSwKKzB4Y2MwMTIxNmMsCisweDgwMDAwMDAxLAorMHhjZmY1MDAwMCwKKzB4Y2MwMDAwNmIsCisweDg0MDAwM2EyLAorMHgwZTY4MDAzYywKKzB4OWE4MDAwMDQsCisweGM4MjgwMDE1LAorMHg4MDAwMDAwMSwKKzB4ZDA0MDAwN2YsCisweDk2ODBmZmFiLAorMHg3ZTAyNDAwMCwKKzB4ODQwMDAyM2IsCisweGMwMGUwMDAyLAorMHhjYzAwMDA0MSwKKzB4ODAwMDAyMzksCisweGNjYzEzMDRhLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweGMwMWUwMDAxLAorMHgyOTI0MDAxMiwKKzB4YzAyMjAwMDIsCisweDk2NDAwMDA1LAorMHhjMDI2MDAwNCwKKzB4YzAyN2ZmZmIsCisweDdkMjUwMDBiLAorMHhjMDI2MDAwMCwKKzB4N2RkMjgwMGIsCisweDdlMTJjMDBiLAorMHg3ZDI1MDAwYywKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHhjY2MxMjE2OSwKKzB4OWE4MDAwMGEsCisweGNkMDEyMTZhLAorMHhjZDQxMjE2YiwKKzB4OTZjMGZlODIsCisweGNkODEyMTZjLAorMHhjODMwMDAxOCwKKzB4OTcwMDAwMDAsCisweGM4MzAwMDE4LAorMHg4MDAwMDAwMSwKKzB4Y2MwMDAwMTgsCisweDg0MDAwM2EyLAorMHhjYzAwMDA3ZiwKKzB4YzgxNDAwMTMsCisweGM4MTgwMDE0LAorMHhjZDQxMjE2YiwKKzB4OTZjMGZlNzYsCisweGNkODEyMTZjLAorMHg4MDAwMDE4MiwKKzB4YzgzMDAwMTgsCisweGM4MGMwMDA4LAorMHg5OGMwMDAwMCwKKzB4YzgwYzAwMDgsCisweDdjNDEwMDAwLAorMHg5NTAwMDAwMiwKKzB4MDAwMDAwMDAsCisweDdjNDE0MDAwLAorMHhjODIwMDAwOSwKKzB4Y2M0MDAwNDMsCisweGNlMDFhMWY0LAorMHhjYzQwMDA0NCwKKzB4YzAwZTgwMDAsCisweDdjNDI0MDAwLAorMHg3YzQyODAwMCwKKzB4MmFhYzAwMWYsCisweDk2YzBmZTYzLAorMHhjMDM1ZjAwMCwKKzB4Y2U0MDAzZTIsCisweDMyNzgwMDAzLAorMHgyNjdjMDAwOCwKKzB4N2ZmN2MwMGIsCisweDdmZmJjMDBjLAorMHgyYTc4MDAxOCwKKzB4Y2ZjMDAzZTMsCisweGNmODAwM2U0LAorMHgyNmIwMDAwMiwKKzB4N2YzZjAwMDAsCisweGNmMDAwM2U1LAorMHg4MDAwMDMxZiwKKzB4N2M4MGMwMDAsCisweDdjNDBjMDAwLAorMHgyOGQwMDAwOCwKKzB4MzExMDAwMGYsCisweDk1MDAwMDBmLAorMHgyNTI4MDAwMSwKKzB4MDZhODAxYjMsCisweDllODAwMDAwLAorMHgwMDAwMDAwMCwKKzB4ODAwMDAxZDQsCisweGMwMTIwODAwLAorMHg4MDAwMDFlMiwKKzB4YzgxNDAwMGYsCisweDgwMDAwMWU5LAorMHhjODE0MDAxMCwKKzB4ODAwMDAxZjAsCisweGNjYzFhMmE0LAorMHg4MDAwMDFmOSwKKzB4YzgxNDAwMTEsCisweDMwZDAwMDNmLAorMHgwZDI4MDAxNSwKKzB4OWE4MDAwMTIsCisweDBkMjgwMDFlLAorMHg5YTgwMDAxZSwKKzB4MGQyODAwMjAsCisweDlhODAwMDIzLAorMHgwZDI0MDAwZiwKKzB4MGQyODAwMTAsCisweDdlNmE4MDBjLAorMHg5YTgwMDAyNiwKKzB4MGQyMDAwMDQsCisweDBkMjQwMDE0LAorMHgwZDI4MDAyOCwKKzB4N2U2MjQwMGMsCisweDdlYTY4MDBjLAorMHg5YTgwMDAyYSwKKzB4YzgxNDAwMTEsCisweDgwMDAwMDAxLAorMHhjY2MxYTJhNCwKKzB4YzAxMjA4MDAsCisweDdjNDE0MDAwLAorMHg3ZDBjYzAwYywKKzB4YzAxMjAwMDgsCisweDI5NTgwMDAzLAorMHgyOTVjMDAwYywKKzB4N2M0MjAwMDAsCisweDdkZDFjMDBiLAorMHgyNjIwMDAxNCwKKzB4N2UxZTQwMGMsCisweDdlNGU4MDBjLAorMHhjZTgxYTJhNCwKKzB4ODAwMDAwMDEsCisweGNkODFhMWZlLAorMHhjODE0MDAwZiwKKzB4MDQxMDIxMGUsCisweDk1NDAwMDAwLAorMHhjODE0MDAwZiwKKzB4ZDA1MTAwMDAsCisweDgwMDAwMDAxLAorMHhjY2MxYTJhNCwKKzB4YzgxNDAwMTAsCisweDA0MTAyMTA4LAorMHg5NTQwMDAwMCwKKzB4YzgxNDAwMTAsCisweGQwNTEwMDAwLAorMHg4MDAwMDAwMSwKKzB4Y2NjMWEyYTQsCisweGNjYzFhMmE0LAorMHgwNDEwMDAwMSwKKzB4Y2QwMDAwMTksCisweDg0MDAwM2EyLAorMHhjYzAwMDA3ZiwKKzB4YzgxMDAwMTksCisweDk5MDAwMDAwLAorMHhjODEwMDAxOSwKKzB4ODAwMDAwMDIsCisweDdjNDA4MDAwLAorMHgwNDEwMjEwMCwKKzB4MDk1NDAwMDEsCisweDk1NDBmZmZmLAorMHhjODE0MDAxMSwKKzB4ZDA1MTAwMDAsCisweDgwMDAwMzlmLAorMHhjY2MxYTJhNCwKKzB4N2M0MGMwMDAsCisweGNjNDAwMDBkLAorMHg5NGMwZmRmZiwKKzB4Y2M0MDAwMGUsCisweDdjNDEwMDAwLAorMHg5NTAwMDAwNSwKKzB4MDhjYzAwMDEsCisweGM4MTQwMDA1LAorMHg5OTQwMDAxNCwKKzB4MDAwMDAwMDAsCisweDk4YzBmZmZiLAorMHg3YzQxMDAwMCwKKzB4ODAwMDAwMDIsCisweDdkMDA4MDAwLAorMHhjODE0MDAwNSwKKzB4N2M0MGMwMDAsCisweDk5NDAwMDBjLAorMHhjODE4MDAwYywKKzB4N2M0MTAwMDAsCisweDk1ODBmZGVlLAorMHhjODIwMDAwZSwKKzB4YzgxYzAwMGQsCisweDY2MjAwMDIwLAorMHg3ZTFlMDAyYywKKzB4MjUyNDAwMDIsCisweDdlNjI0MDIwLAorMHg4MDAwMDAwMSwKKzB4Y2NlNjAwMDAsCisweDdjNDEwMDAwLAorMHhjYzAwMDA2YywKKzB4Y2MwMDAwNmQsCisweGM4MTgwMDFmLAorMHhjODFjMDAxZSwKKzB4NjU5ODAwMjAsCisweDdkZDljMDJjLAorMHg3Y2Q0YzAwYywKKzB4Y2NkZTAwMDAsCisweDQ1ZGMwMDA0LAorMHhjODI4MDAxNywKKzB4OTY4MDAwMGYsCisweGMwMGUwMDAxLAorMHgyODY4MDAwOCwKKzB4MmFhYzAwMTYsCisweDMyYTgwMGZmLAorMHgwZWIwMDA0OSwKKzB4N2YyZjAwMGIsCisweDk3MDAwMDA2LAorMHgwMDAwMDAwMCwKKzB4YzgxNDAwMDUsCisweDdjNDBjMDAwLAorMHg4MDAwMDIyMywKKzB4N2M0MTAwMDAsCisweDgwMDAwMjI2LAorMHhkMDQwMDA3ZiwKKzB4ODQwMDAyM2IsCisweGNjMDAwMDQxLAorMHhjY2MxMzA0YSwKKzB4OTQwMDAwMDAsCisweGM4M2MwMDFhLAorMHgwNDNjMDAwNSwKKzB4Y2ZjMWEyYTQsCisweGMwMzYxZjkwLAorMHhjMDM4N2ZmZiwKKzB4N2MwM2MwMTAsCisweDdmN2I0MDBjLAorMHhjZjQxMjE3YywKKzB4Y2ZjMTIxN2QsCisweGNjMDEyMTdlLAorMHhjMDNhMDAwNCwKKzB4MDQzNDIxN2YsCisweDdmN2I0MDBjLAorMHhjYzM1MDAwMCwKKzB4YzgzYzAwMDQsCisweDJiZmMwMDFmLAorMHgwNDM4MDAyMCwKKzB4OTdjMDAwMDUsCisweGNjMDAwMDYyLAorMHg5YjgwMDAwMCwKKzB4MGJiODAwMDEsCisweDgwMDAwMjQ3LAorMHhjYzAwMDA3MSwKKzB4Y2MwMWExZjQsCisweDA0MzgwMDE2LAorMHhjMDM2MDAwMiwKKzB4Y2Y4MWEyYTQsCisweDg4MDAwMDAwLAorMHhjZjQxMjAxMCwKKzB4N2M0MGMwMDAsCisweDI4ZDAwMDFjLAorMHg5NTAwMDAwNSwKKzB4MDRkNDAwMDEsCisweGNkNDAwMDY1LAorMHg4MDAwMDAwMSwKKzB4Y2Q0MDAwNjgsCisweDA5NTQwMDAyLAorMHg4MDAwMDAwMSwKKzB4Y2Q0MDAwNjYsCisweDg0MDAwMjZjLAorMHhjODE4MDNlYSwKKzB4N2M0MGMwMDAsCisweDk5ODBmZDlkLAorMHhjODE0MDAxNiwKKzB4MDhkMDAwMDEsCisweDk5NDAwMDJiLAorMHhjZDAwMDA2OCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4MDQzYzAwMDUsCisweGNmYzFhMmE0LAorMHhjYzAxYTFmNCwKKzB4ODQwMDAzYTIsCisweGNjMDAwMDQ2LAorMHg4ODAwMDAwMCwKKzB4Y2MwMDAwN2YsCisweDg0MDAwMjdlLAorMHhjODE4MDNlYSwKKzB4N2M0MGMwMDAsCisweDk5ODBmZDhiLAorMHhjODE0MDAxNiwKKzB4MDhkMDAwMDEsCisweDk5NDAwMDE5LAorMHhjZDAwMDA2OCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4MDQzYzAwMjIsCisweGNmYzFhMmE0LAorMHg4NDAwMDNhMiwKKzB4Y2MwMDAwNDcsCisweDg4MDAwMDAwLAorMHhjYzAwMDA3ZiwKKzB4YzgxMDAwMTYsCisweDk5MDAwMDBkLAorMHhjYzQwMDA2NywKKzB4ODAwMDAwMDIsCisweDdjNDA4MDAwLAorMHhjODE4MDNlYSwKKzB4OTk4MGZkNzcsCisweDdjNDBjMDAwLAorMHg5NGMwMDAwMywKKzB4YzgxMDAwMTYsCisweDk5MDAwMDA0LAorMHhjY2MwMDA2OCwKKzB4ODAwMDAwMDIsCisweDdjNDA4MDAwLAorMHg4NDAwMDIzYiwKKzB4YzAxNDgwMDAsCisweGNjMDAwMDQxLAorMHhjZDQxMzA0YSwKKzB4YzAxNDgwMDAsCisweDk5MDAwMDAwLAorMHhjODEwMDAxNiwKKzB4ODAwMDAwMDIsCisweDdjNDA4MDAwLAorMHhjMDEyMDAwMSwKKzB4N2M1MTQwMGMsCisweDgwMDAwMDAxLAorMHhkMDU1MDAwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweDI5MWMwMDFmLAorMHhjY2MwMDA0YSwKKzB4Y2QwMDAwNGIsCisweDk1YzAwMDAzLAorMHhjMDFjODAwMCwKKzB4Y2RjMTIwMTAsCisweGRkODMwMDAwLAorMHgwNTVjMjAwMCwKKzB4Y2MwMDAwNjIsCisweDgwMDAwMDAxLAorMHhkODFmNDEwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweGNjYzAwMDRjLAorMHhjZDAwMDA0ZCwKKzB4ZGQ4MzAwMDAsCisweDA1NWNhMDAwLAorMHg4MDAwMDAwMSwKKzB4ZDgxZjQxMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHhjY2MwMDA0ZSwKKzB4Y2QwMDAwNGYsCisweGRkODMwMDAwLAorMHgwNTVjYzAwMCwKKzB4ODAwMDAwMDEsCisweGQ4MWY0MTAwLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4Y2NjMDAwNTAsCisweGNkMDAwMDUxLAorMHhkZDgzMDAwMCwKKzB4MDU1Y2Y4ZTAsCisweDgwMDAwMDAxLAorMHhkODFmNDEwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweGNjYzAwMDUyLAorMHhjZDAwMDA1MywKKzB4ZGQ4MzAwMDAsCisweDA1NWNmODgwLAorMHg4MDAwMDAwMSwKKzB4ZDgxZjQxMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHhjY2MwMDA1NCwKKzB4Y2QwMDAwNTUsCisweGRkODMwMDAwLAorMHgwNTVjZTAwMCwKKzB4ODAwMDAwMDEsCisweGQ4MWY0MTAwLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4Y2NjMDAwNTYsCisweGNkMDAwMDU3LAorMHhkZDgzMDAwMCwKKzB4MDU1Y2YwMDAsCisweDgwMDAwMDAxLAorMHhkODFmNDEwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweGNjYzAwMDU4LAorMHhjZDAwMDA1OSwKKzB4ZGQ4MzAwMDAsCisweDA1NWNmM2ZjLAorMHg4MDAwMDAwMSwKKzB4ZDgxZjQxMDAsCisweGQwNDMyMDAwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhkMDQzYTAwMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ZDA0M2MwMDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGQwNDNmOGUwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhkMDQzZjg4MCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ZDA0M2UwMDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGQwNDNmMDAwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhkMDQzZjNmYywKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4YzgxNDAzZTAsCisweGNjNDMwMDAwLAorMHhjYzQzMDAwMCwKKzB4Y2M0MzAwMDAsCisweDdkNDVjMDAwLAorMHhjZGMzMDAwMCwKKzB4ZDA0MzAwMDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweDdjNDBjMDAwLAorMHhjODEwMDNlMiwKKzB4YzgxNDAzZTUsCisweGM4MTgwM2UzLAorMHhjODFjMDNlNCwKKzB4Y2Q4MTIxNjksCisweGNkYzEyMTZhLAorMHhjY2MxMjE2YiwKKzB4Y2MwMTIxNmMsCisweDA0MjAwMDA0LAorMHg3ZGExODAwMCwKKzB4N2Q5NjQwMDIsCisweDk2NDBmY2Q3LAorMHhjZDgwMDNlMywKKzB4MzEyODAwMDMsCisweGMwMmRmMDAwLAorMHgyNTE4MDAwOCwKKzB4N2RhZDgwMGIsCisweDdkYTk4MDBjLAorMHg4MDAwMDAwMSwKKzB4Y2Q4MDAzZTMsCisweDMwOGNmZmZmLAorMHhkMDRkMDAwMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHgyOTI0MDAxOCwKKzB4MzI2NDAwMDEsCisweDlhNDAwMDEzLAorMHhjODE0MDAyMCwKKzB4MTU1ODAwMDIsCisweDk1ODBmZmZmLAorMHhjODE0MDAyMCwKKzB4Y2MwMDAwNmUsCisweGNjYzEyMTgwLAorMHhjZDAxMjE4ZCwKKzB4Y2M0MTIxODEsCisweDI5MTQwMDFmLAorMHgzNDU4ODAwMCwKKzB4Y2Q4MTIxOGMsCisweDk1NDBmY2I5LAorMHhjYzQxMjE4MiwKKzB4YzgxNDAwMjAsCisweDk5NDBmZmZmLAorMHhjODE0MDAyMCwKKzB4ODAwMDAwMDIsCisweDdjNDA4MDAwLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweDdjNDFjMDAwLAorMHg2NWI0MDAyMCwKKzB4N2Y1NzQwMmMsCisweGQ0Mzc4MTAwLAorMHg0Nzc0MDAwNCwKKzB4ZDQzNzgxMDAsCisweDQ3NzQwMDA0LAorMHhkNDM3ODEwMCwKKzB4NDc3NDAwMDQsCisweDA5ZGMwMDA0LAorMHhkNDM3ODEwMCwKKzB4OTljMGZmZjgsCisweDQ3NzQwMDA0LAorMHgyOTI0MDAxZiwKKzB4YzAzODAwMTksCisweDk2NDBmY2ExLAorMHhjMDNlMDAwNCwKKzB4Y2Y4MTIxZjgsCisweDM3ZTAyMWY5LAorMHhjYzIxMDAwMCwKKzB4YzgyMDAwMDQsCisweDJhMjAwMDE4LAorMHgzMjIwMDAwMSwKKzB4OWEwMGZmZmIsCisweGNmODEyMWY4LAorMHg4MDAwMDAwMiwKKzB4N2M0MDgwMDAsCisweDdjNDBjMDAwLAorMHgyOGQwMDAxOCwKKzB4MzExMDAwMDEsCisweGMwMTYwMDgwLAorMHg5NTAwMDAwMywKKzB4YzAyYTAwMDQsCisweDdjZDRjMDBjLAorMHhjY2MxMjE3YywKKzB4Y2M0MTIxN2QsCisweGNjNDEyMTdlLAorMHg3YzQxODAwMCwKKzB4MWRiMDAwMDMsCisweDM2YTAyMTdmLAorMHg5YjAwMDAwMywKKzB4NDE5YzAwMDUsCisweDA0MWMwMDQwLAorMHg5OWMwMDAwMCwKKzB4MDlkYzAwMDEsCisweGNjMjEwMDAwLAorMHhjODI0MDAwNCwKKzB4MmE2YzAwMWYsCisweDQxOWMwMDA1LAorMHg5YWMwZmZmYSwKKzB4Y2M4MDAwNjIsCisweDgwMDAwMDAyLAorMHg3YzQwODAwMCwKKzB4N2M0MGMwMDAsCisweDA0ZDQwM2U2LAorMHg4MDAwMDAwMSwKKzB4Y2M1NDAwMDAsCisweDgwMDAwMzlmLAorMHhjYzQwMDNlYSwKKzB4YzAxYzgwMDAsCisweDA0NGNhMDAwLAorMHhjZGMxMjAxMCwKKzB4N2M0MTAwMDAsCisweGM4MTQwMDA5LAorMHgwNDE4MDAwMCwKKzB4MDQxYzAwMDgsCisweGNkODAwMDcxLAorMHgwOWRjMDAwMSwKKzB4MDU5ODAwMDEsCisweGNkMGQwMDAwLAorMHg5OWMwZmZmYywKKzB4Y2M4MDAwNjIsCisweDgwMDAwMzlmLAorMHhjZDQwMDA3MSwKKzB4YzAwZTAxMDAsCisweGNjMDAwMDQxLAorMHhjY2MxMzA0YSwKKzB4YzgzYzAwN2YsCisweGNjMDAwMDdmLAorMHg4MDAwMDAwMSwKKzB4Y2MwMDAwN2YsCisweGNjMDAwMDdmLAorMHg4ODAwMDAwMCwKKzB4Y2MwMDAwN2YsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMTAzMzMsCisweDAwMTAwMDA0LAorMHgwMDE3MDAwNiwKKzB4MDAyMTAwMDgsCisweDAwMjcwMDI4LAorMHgwMDI4MDAyMywKKzB4MDAyOTAwMjksCisweDAwMmEwMDI2LAorMHgwMDJiMDAyOSwKKzB4MDAyZDAwMzgsCisweDAwMmUwMDNmLAorMHgwMDJmMDA0YSwKKzB4MDAzNDAwNGMsCisweDAwMzYwMDMwLAorMHgwMDM5MDBhZiwKKzB4MDAzYTAwZDAsCisweDAwM2IwMGU1LAorMHgwMDNjMDBmZCwKKzB4MDAzZDAxNmMsCisweDAwM2YwMGFkLAorMHgwMDQxMDMzOCwKKzB4MDA0MzAzNmMsCisweDAwNDQwMThmLAorMHgwMDQ1MDBmZCwKKzB4MDA0NjAxYWQsCisweDAwNDcwMWFkLAorMHgwMDQ4MDIwMCwKKzB4MDA0OTAyMGUsCisweDAwNGEwMjU3LAorMHgwMDRiMDI4NCwKKzB4MDA1MjAyNjEsCisweDAwNTMwMjczLAorMHgwMDU0MDI4OSwKKzB4MDA1NzAyOWIsCisweDAwNjAwMjlmLAorMHgwMDYxMDJhZSwKKzB4MDA2MjAyYjgsCisweDAwNjMwMmMyLAorMHgwMDY0MDJjYywKKzB4MDA2NTAyZDYsCisweDAwNjYwMmUwLAorMHgwMDY3MDJlYSwKKzB4MDA2ODAyZjQsCisweDAwNjkwMmY4LAorMHgwMDZhMDJmYywKKzB4MDA2YjAzMDAsCisweDAwNmMwMzA0LAorMHgwMDZkMDMwOCwKKzB4MDA2ZTAzMGMsCisweDAwNmYwMzEwLAorMHgwMDcwMDMxNCwKKzB4MDA3MjAzODYsCisweDAwNzQwMzhjLAorMHgwMDc5MDM4YSwKKzB4MDA3YzAzMWUsCisweDAwMGYwMzliLAorMHgwMDBmMDM5YiwKKzB4MDAwZjAzOWIsCisweDAwMGYwMzliLAorMHgwMDBmMDM5YiwKKzB4MDAwZjAzOWIsCisweDAwMGYwMzliLAorMHgwMDBmMDM5YiwKKzB4MDAwZjAzOWIsCisweDAwMGYwMzliLAorMHgwMDBmMDM5YiwKKzB4MDAwZjAzOWIsCisweDAwMGYwMzliLAorMHgwMDBmMDM5YiwKKzB4MDAwZjAzOWIsCisweDAwMGYwMzliLAorMHgwMDBmMDM5YiwKKzB4MDAwZjAzOWIsCisweDAwMGYwMzliLAorMHgwMDBmMDM5YiwKKzB4MDAwZjAzOWIsCisweDAwMGYwMzliLAorMHgwMDBmMDM5YiwKKzB4MDAwZjAzOWIsCisweDAwMGYwMzliLAorfTsKKworc3RhdGljIGNvbnN0IHUzMiBSVjc3MF9wZnBfbWljcm9jb2RlW10gPSB7CisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweDgwMDAwMDAwLAorMHhkYzAzMDAwMCwKKzB4Y2M4MDAwNDAsCisweGQwNDAwMDQwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweDdlODI4MDBiLAorMHhjODE4MDAwZSwKKzB4MzE5ODAwMDEsCisweDdjNDI0MDAwLAorMHg5NTgwMDI1MiwKKzB4N2M0MjgwMDAsCisweGM4MWMwMDFjLAorMHhjMDM3YzAwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3Y2I0ODAwYiwKKzB4YzAzNjAwMDMsCisweDk5YzAwMDAwLAorMHhjODFjMDAxYywKKzB4N2NiNDgwMGMsCisweDI0ZDQwMDAyLAorMHg3ZDY1NDAwMCwKKzB4Y2Q0MDAwNDMsCisweGNlODAwMDQzLAorMHhjZDAwMDA0MywKKzB4Y2M4MDAwNDAsCisweGNlNDAwMDQwLAorMHhjZTgwMDA0MCwKKzB4Y2NjMDAwNDAsCisweGRjM2EwMDAwLAorMHg5NzgwZmZkZSwKKzB4Y2QwMDAwNDAsCisweDdjNDBjMDAwLAorMHg4MDAwMDAxOCwKKzB4N2M0MTAwMDAsCisweGQ0MDAwMzQwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGM4MTgwMDBlLAorMHg4MDAwMDAwYywKKzB4MzE5ODAwMDIsCisweGQ0MDAwM2MwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGM4MTgwMDBlLAorMHgyODhjMDAwOCwKKzB4MzBjYzAwMGYsCisweDM0MTAwMDAxLAorMHg3ZDBkMDAwOCwKKzB4ODAwMDAwMGMsCisweDdkOTE4MDBiLAorMHhjYzgwMDA0MCwKKzB4ZDA0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweGQ0MDAwMzQwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhkMDQwMDA0MCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHg3ZTgyODAwYiwKKzB4ZDQwMDAzYzAsCisweGQ0MDAwZmMwLAorMHhkNDAwMGZhMiwKKzB4Y2M4MDAwNDAsCisweGQwNDAwMDQwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweDdlODI4MDBiLAorMHhjYzQwMDNmOSwKKzB4ODAwMDAyNjEsCisweGNjNDAwM2Y4LAorMHhjODIwMDNmOCwKKzB4YzgxYzAzZjksCisweGM4MTgwM2ZiLAorMHhjMDM3ZmZmZiwKKzB4N2M0MTQwMDAsCisweGNmNDFhMjllLAorMHg2NjIwMDAyMCwKKzB4N2RlMWMwMmMsCisweDdkNThjMDA4LAorMHg3Y2RjYzAyMCwKKzB4NjhkMDAwMjAsCisweGMwMzYwMDAzLAorMHhjYzAwMDA1NCwKKzB4N2NiNDgwMGMsCisweDgwMDAwMDZhLAorMHhjYzgwMDA0MCwKKzB4N2M0MTgwMDAsCisweGNkODFhMjllLAorMHhjYzgwMDA0MCwKKzB4Y2Q4MDAwNDAsCisweDgwMDAwMDY4LAorMHhjYzAwMDA1NCwKKzB4YzAxOWZmZmYsCisweGNjODAwMDQwLAorMHhjZDgxYTI5ZSwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4Y2NjMWExZmEsCisweGNkMDFhMWY5LAorMHhjZDQxYTI5ZCwKKzB4Y2NjMDAwNDAsCisweGNkMDAwMDQwLAorMHhjZDQwMDA0MCwKKzB4Y2M0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweGNjMDAwMDU0LAorMHhjYzgwMDA0MCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4Y2NjMWExZmEsCisweGNkMDFhMWY5LAorMHhjZDQxYTI5ZCwKKzB4Y2NjMDAwNDAsCisweGNkMDAwMDQwLAorMHhjZDQwMDA0MCwKKzB4ZDA0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweDdjNDBjMDAwLAorMHgzMGQwMDAwMSwKKzB4Y2NjMWEyOWYsCisweDk1MDAwMDAzLAorMHgwNDE0MDAwMSwKKzB4MDQxNDAwMDIsCisweGNkNDAwM2ZiLAorMHhjYzgwMDA0MCwKKzB4ODAwMDAwMDAsCisweGNjYzAwMDQwLAorMHg3YzQwYzAwMCwKKzB4Y2M4MDAwNDAsCisweGNjYzFhMmEyLAorMHg4MDAwMDAwMCwKKzB4Y2NjMDAwNDAsCisweDdjNDBjMDAwLAorMHgyOGQ0MDAxZiwKKzB4Y2M4MDAwNDAsCisweDk1NDAwMDAzLAorMHg3YzQxMDAwMCwKKzB4Y2NjMDAwNTcsCisweDI5MTgwMDFmLAorMHhjY2MwMDA0MCwKKzB4OTU4MDAwMDMsCisweGNkMDAwMDQwLAorMHhjZDAwMDA1OCwKKzB4ODAwMDAyNjEsCisweGNjMDAwMDdmLAorMHhjODIwMDAxNywKKzB4YzgzMDAwMjIsCisweDlhMDAwMDA2LAorMHgwZTI4MDAwMSwKKzB4YzgyNDAwMWUsCisweDBhNjQwMDAxLAorMHhkNDAwMTI0MCwKKzB4Y2U0MDAwNDAsCisweGMwMzZjMDAwLAorMHg5NjgwMDAwNywKKzB4Mzc3NDc5MDAsCisweDA0MWMwMDAxLAorMHhjZjQwMDA0MCwKKzB4Y2RjMDAwNDAsCisweGNmMDAwM2ZhLAorMHg3YzAzMDAwMCwKKzB4Y2EwYzAwMTAsCisweDdjNDEwMDAwLAorMHg5NGMwMDAwNCwKKzB4N2M0MTQwMDAsCisweGQ0MjAwMmM0LAorMHhjZGUwMDA0NCwKKzB4OWIwMDAwMGIsCisweDdjNDE4MDAwLAorMHhjYzAwMDA0YiwKKzB4Y2RhMDAwNDksCisweGNkMjAwMDQxLAorMHhjZDYwMDA0MSwKKzB4Y2RhMDAwNDEsCisweDA2MjAwMDAxLAorMHhjZTAwMDA1NiwKKzB4ODAwMDAyNjEsCisweGNjMDAwMDdmLAorMHhjODI4MDAyMCwKKzB4YzgyYzAwMjEsCisweGNjMDAwMDYzLAorMHg3ZWVhNDAwMSwKKzB4NjU3NDAwMjAsCisweDdmNTM0MDJjLAorMHgyNjljMDAwMiwKKzB4N2RmNWMwMjAsCisweDY5ZjgwMDIwLAorMHhjZTgwMDA0YiwKKzB4Y2U2MDAwNDksCisweGNkZTAwMDQxLAorMHhjZmEwMDA0MSwKKzB4Y2U2MDAwNDEsCisweDI3MWMwMDAyLAorMHg3ZGY1YzAyMCwKKzB4NjlmODAwMjAsCisweDdkYjI0MDAxLAorMHhjZjAwMDA0YiwKKzB4Y2U2MDAwNDksCisweGNkZTAwMDQxLAorMHhjZmEwMDA0MSwKKzB4ODAwMDAwYmQsCisweGNlNjAwMDQxLAorMHhjODIwMDAxNywKKzB4YzgzMDAwMjIsCisweDlhMDAwMDA2LAorMHgwZTI4MDAwMSwKKzB4YzgyNDAwMWUsCisweDBhNjQwMDAxLAorMHhkNDAwMTI0MCwKKzB4Y2U0MDAwNDAsCisweGNhMGMwMDEwLAorMHg3YzQxMDAwMCwKKzB4OTRjMDAwMGIsCisweGMwMzZjMDAwLAorMHg5NjgwMDAwNywKKzB4Mzc3NDc5MDAsCisweDA0MWMwMDAxLAorMHhjZjQwMDA0MCwKKzB4Y2RjMDAwNDAsCisweGNmMDAwM2ZhLAorMHg3YzAzMDAwMCwKKzB4ODAwMDAwYjYsCisweDdjNDE0MDAwLAorMHhjYzAwMDA0OCwKKzB4ODAwMDAwZWYsCisweDAwMDAwMDAwLAorMHhjODIwMDAxNywKKzB4YzgxYzAwMjMsCisweDBlMjQwMDAyLAorMHg5OWMwMDAxNSwKKzB4N2M0MTgwMDAsCisweDBhMjAwMDAxLAorMHhjZTAwMDA1NiwKKzB4ZDQwMDA0NDAsCisweGNjMDAwMDQwLAorMHhjMDM2YzAwMCwKKzB4Y2ExNDAwMTMsCisweDk2NDAwMDA3LAorMHgzNzc0NzkwMCwKKzB4Y2Y0MDAwNDAsCisweGNjMDAwMDQwLAorMHhjODMwMDNmYSwKKzB4ODAwMDAxMDQsCisweGNmMDAwMDIyLAorMHhjYzAwMDAyMiwKKzB4OTU0MDAxNWQsCisweGNjMDAwMDdmLAorMHhjY2EwMDA0NiwKKzB4ODAwMDAwMDAsCisweGNjMjAwMDQ2LAorMHg4MDAwMDI2MSwKKzB4Y2MwMDAwNjQsCisweGM4MjAwMDE3LAorMHhjODEwMDAxZiwKKzB4OTYwMDAwMDUsCisweDA5MTAwMDAxLAorMHhkNDAwMDQ0MCwKKzB4Y2QwMDAwNDAsCisweGNkMDAwMDIyLAorMHhjYzgwMDA0MCwKKzB4ZDA0MDAwNDAsCisweGM4MGMwMDI1LAorMHg5NGMwZmVlYiwKKzB4YzgxMDAwMDgsCisweGNkMDAwMDQwLAorMHhkNDAwMGZjMCwKKzB4ODAwMDAwMDAsCisweGQ0MDAwZmEyLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweGNjYzAwM2ZkLAorMHhjZDAwMDNmYywKKzB4Y2NjMDAwNDIsCisweGNkMDAwMDQyLAorMHgyOTE0MDAxZiwKKzB4MjkxODAwMTAsCisweDMxOTgwMDA3LAorMHgzYjVjMDAwMSwKKzB4N2Q3NjAwMGIsCisweDk5ODAwMDA1LAorMHg3ZDVlNDAwYiwKKzB4Y2MwMDAwNDIsCisweDgwMDAwMjYxLAorMHhjYzAwMDA0ZCwKKzB4Mjk5ODAwMDEsCisweDI5MmMwMDA4LAorMHg5OTgwMDAzZCwKKzB4MzJlYzAwMDEsCisweDk2MDAwMDA0LAorMHgyOTMwMDAwYywKKzB4ODAwMDAyNjEsCisweGNjMDAwMDQyLAorMHgwNDE0MDAxMCwKKzB4Y2Q0MDAwNDIsCisweDMzMzAwMDAxLAorMHgzNDI4MDAwMSwKKzB4ODQwMDAxNWUsCisweGM4MTQwMDAzLAorMHg5YjQwMDAxYiwKKzB4MDQzODAwMGMsCisweDg0MDAwMTVlLAorMHhjODE0MDAwMywKKzB4OWI0MDAwMTcsCisweDA0MzgwMDA4LAorMHg4NDAwMDE1ZSwKKzB4YzgxNDAwMDMsCisweDliNDAwMDEzLAorMHgwNDM4MDAwNCwKKzB4ODQwMDAxNWUsCisweGM4MTQwMDAzLAorMHg5YjQwMDAxNSwKKzB4YzgwYzAzZmQsCisweDlhODAwMDA5LAorMHhjODEwMDNmYywKKzB4OWIwMDAxMTgsCisweGNjMDAwMDRkLAorMHgwNDE0MDAxMCwKKzB4Y2NjMDAwNDIsCisweGNkMDAwMDQyLAorMHg4MDAwMDEzNiwKKzB4Y2Q0MDAwNDIsCisweDk2YzAwMTExLAorMHhjYzAwMDA0ZCwKKzB4ODAwMDAyNjEsCisweGNjMDAwMDRlLAorMHg5YWMwMDAwMywKKzB4Y2MwMDAwNGQsCisweGNjMDAwMDRlLAorMHhkZjgzMDAwMCwKKzB4ODAwMDAwMDAsCisweGQ4MDMwMWZmLAorMHg5YWMwMDEwNywKKzB4Y2MwMDAwNGQsCisweDgwMDAwMjYxLAorMHhjYzAwMDA0ZSwKKzB4YzgxODAwMDMsCisweGM4MWMwMDAzLAorMHhjODIwMDAwMywKKzB4N2Q1ZDQwMDMsCisweDdkYTFjMDAzLAorMHg3ZDVkNDAwYywKKzB4MmExMDAwMWYsCisweDI5OWMwMDFmLAorMHg3ZDFkMDAwYiwKKzB4N2QxNzQwMGIsCisweDg4MDAwMDAwLAorMHg3ZTkyODAwYiwKKzB4OTY0MDAwMDQsCisweGNjMDAwMDRlLAorMHg4MDAwMDI2MSwKKzB4Y2MwMDAwNDIsCisweDA0MzgwMDA4LAorMHhjZjgwMDA0MiwKKzB4YzgwODAwMDMsCisweGM4MGMwMDAzLAorMHhjODEwMDAwMywKKzB4YzgxNDAwMDMsCisweGM4MTgwMDAzLAorMHhjODFjMDAwMywKKzB4YzgyNDAwMDMsCisweGM4MjgwMDAzLAorMHgyOWZjMDAxZiwKKzB4MmFiMDAwMWYsCisweDdmZjNjMDBiLAorMHgyOGYwMDAxZiwKKzB4N2ZmM2MwMGIsCisweDI5NzAwMDFmLAorMHg3ZmYzYzAwYiwKKzB4N2Q4ODgwMDEsCisweDdkY2NjMDAxLAorMHg3ZTUxMDAwMSwKKzB4N2U5NTQwMDEsCisweDdjOTA4MDAyLAorMHg3Y2Q0YzAwMiwKKzB4N2NiYzgwMGIsCisweDlhYzAwMDAzLAorMHg3YzhmNDAwYiwKKzB4MzhiNDAwMDEsCisweDliNDAwMGQ4LAorMHhjYzAwMDA0ZCwKKzB4OWJjMDAwZDYsCisweGNjMDAwMDRlLAorMHhjODBjMDNmZCwKKzB4YzgxMDAzZmMsCisweGNjYzAwMDQyLAorMHg4MDAwMDE2ZiwKKzB4Y2QwMDAwNDIsCisweGQ0MDAwMzQwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhjYzQwMDA0MCwKKzB4Y2M0MDAwNDAsCisweGNjNDAwMDQwLAorMHg3YzQwYzAwMCwKKzB4Y2NjMDAwNDAsCisweGNjYzAwMDBkLAorMHg4MDAwMDAwMCwKKzB4ZDA0MDAwNDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4NjUxNDAwMjAsCisweDdkNGQ0MDJjLAorMHgyNDU4MDAwMiwKKzB4N2Q1OTgwMjAsCisweDdjNDFjMDAwLAorMHhjZDgwMDA0MiwKKzB4Njk5ODAwMjAsCisweGNkODAwMDQyLAorMHhjZGMwMDA0MiwKKzB4YzAyM2MwMDAsCisweDA1ZTQwMDAyLAorMHg3Y2EwODAwYiwKKzB4MjY2NDAwMTAsCisweDdjYTQ4MDBjLAorMHhjYzgwMDA0MCwKKzB4Y2RjMDAwNDAsCisweGNjYzAwMDQwLAorMHg5NWMwMDAwZSwKKzB4Y2QwMDAwNDAsCisweDA5ZGMwMDAxLAorMHhjODI4MDAwMywKKzB4OTY4MDAwMDgsCisweGNlODAwMDQwLAorMHhjODM0MDAxZCwKKzB4OTc0MDAwMDAsCisweGM4MzQwMDFkLAorMHgyNmE4MDAwOCwKKzB4ODQwMDAyNjQsCisweGNjMmIwMDAwLAorMHg5OWMwZmZmNywKKzB4MDlkYzAwMDEsCisweGRjM2EwMDAwLAorMHg5NzgwMDAwNCwKKzB4N2M0MTgwMDAsCisweDgwMDAwMWEzLAorMHgyNTk4MDAwMiwKKzB4YTAwMDAwMDAsCisweDdkODA4MDAwLAorMHhjODE4MDAxZCwKKzB4N2M0MGMwMDAsCisweDY0ZDAwMDA4LAorMHg5NTgwMDAwMCwKKzB4YzgxODAwMWQsCisweGNjMTMwMDAwLAorMHhjYzgwMDA0MCwKKzB4Y2NjMDAwNDAsCisweDgwMDAwMDAwLAorMHhjYzQwMDA0MCwKKzB4YzgxMDAwMWYsCisweDdjNDBjMDAwLAorMHhjYzgwMDA0MCwKKzB4N2NkMTQwMGMsCisweGNkNDAwMDQwLAorMHgwNTE4MDAwMSwKKzB4ODAwMDAwMDAsCisweGNkODAwMDIyLAorMHg3YzQwYzAwMCwKKzB4NjQ1MDAwMjAsCisweDg0MDAwMjY0LAorMHhjYzAwMDA2MSwKKzB4N2NkMGMwMmMsCisweGM4MjAwMDE3LAorMHhjOGQ2MDAwMCwKKzB4OTk0MDAwMDgsCisweDdjNDM4MDAwLAorMHhkZjgzMDAwMCwKKzB4Y2ZhMDAwNGYsCisweDg0MDAwMjY0LAorMHhjYzAwMDA2MiwKKzB4ODAwMDAwMDAsCisweGQwNDAwMDdmLAorMHg4MDAwMDI2MSwKKzB4Y2MwMDAwNjIsCisweDg0MDAwMjY0LAorMHhjYzAwMDA2MSwKKzB4YzgyMDAwMTcsCisweDdjNDBjMDAwLAorMHhjMDM2ZmYwMCwKKzB4YzgxMDAwMGQsCisweGMwMzAzZmZmLAorMHg3Y2Y1NDAwYiwKKzB4N2Q1MTgwMGIsCisweDdkODE4MDBmLAorMHg5OTgwMDAwOCwKKzB4N2NmMzgwMGIsCisweGRmODMwMDAwLAorMHhjZmEwMDA0ZiwKKzB4ODQwMDAyNjQsCisweGNjMDAwMDYyLAorMHg4MDAwMDAwMCwKKzB4ZDA0MDAwN2YsCisweDgwMDAwMjYxLAorMHhjYzAwMDA2MiwKKzB4ODQwMDAyNjQsCisweDdjNDBjMDAwLAorMHgyOGRjMDAwOCwKKzB4OTVjMDAwMTksCisweDMwZGMwMDEwLAorMHg3YzQxMDAwMCwKKzB4OTljMDAwMDQsCisweDY0NTQwMDIwLAorMHg4MDAwMDIwOSwKKzB4YzkxZDAwMDAsCisweDdkMTUwMDJjLAorMHhjOTFlMDAwMCwKKzB4N2M0MjAwMDAsCisweDdjNDI0MDAwLAorMHg3YzQxODAwMCwKKzB4N2RlNWMwMGIsCisweDdkZTI4MDA3LAorMHg5YTgwMDAwZSwKKzB4NDFhYzAwMDUsCisweDlhYzAwMDAwLAorMHgwYWVjMDAwMSwKKzB4MzBkYzAwMTAsCisweDk5YzAwMDA0LAorMHgwMDAwMDAwMCwKKzB4ODAwMDAyMGMsCisweGM5MWQwMDAwLAorMHg4MDAwMDIwYywKKzB4YzkxZTAwMDAsCisweGNjODAwMDQwLAorMHhjY2MwMDA0MCwKKzB4ZDA0MDAwNDAsCisweGM4MGMwMDI1LAorMHg5NGMwZmRlMywKKzB4YzgxMDAwMDgsCisweGNkMDAwMDQwLAorMHhkNDAwMGZjMCwKKzB4ODAwMDAwMDAsCisweGQ0MDAwZmEyLAorMHhkNDAwMDM0MCwKKzB4ZDQwMDBmYzAsCisweGQ0MDAwZmEyLAorMHhjYzgwMDA0MCwKKzB4ZDA0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweGQ0MDAwM2MwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhkMDQwMDA0MCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHg3ZTgyODAwYiwKKzB4N2M0MGMwMDAsCisweDMwZDAwMDA2LAorMHgwZDEwMDAwNiwKKzB4OTkwMDAwMDcsCisweGM4MTQwMDE1LAorMHg5OTQwMDAwNSwKKzB4Y2MwMDAwNTIsCisweGQ0MDAwMzQwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhjY2MwMDA0MCwKKzB4ODAwMDAwMDAsCisweGQwNDAwMDQwLAorMHg3YzQwYzAwMCwKKzB4Y2M0ZDAwMDAsCisweGRjM2EwMDAwLAorMHg5NzgwZmRiYywKKzB4MDRjYzAwMDEsCisweDgwMDAwMjQzLAorMHhjYzRkMDAwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHgyOTI0MDAxOCwKKzB4MzI2NDAwMDEsCisweDk2NDAwMDBmLAorMHhjYzgwMDA0MCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHg3YzQxYzAwMCwKKzB4Y2NjMDAwNDMsCisweGNkMDAwMDQzLAorMHgzMWRjN2ZmZiwKKzB4Y2RjMDAwNDMsCisweGNjYzAwMDQwLAorMHhjZDAwMDA0MCwKKzB4Y2Q0MDAwNDAsCisweGNkODAwMDQwLAorMHg4MDAwMDAwMCwKKzB4Y2RjMDAwNDAsCisweGNjYzAwMDQwLAorMHhjZDAwMDA0MCwKKzB4ODAwMDAwMDAsCisweGQwNDAwMDQwLAorMHg4MDAwMDAwMCwKKzB4ZDA0MDAwN2YsCisweGNjMDAwMDdmLAorMHg4MDAwMDAwMCwKKzB4Y2MwMDAwN2YsCisweGNjMDAwMDdmLAorMHg4ODAwMDAwMCwKKzB4Y2MwMDAwN2YsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDMwMjIzLAorMHgwMDA0MDIyYiwKKzB4MDAwNTAwYTAsCisweDAwMDIwMDAzLAorMHgwMDA2MDAzYywKKzB4MDAwNzAwMjcsCisweDAwMDgwMTkyLAorMHgwMDA5MDA0NCwKKzB4MDAwYTAwMmQsCisweDAwMTAwMjVmLAorMHgwMDE3MDBmMSwKKzB4MDAyMjAxZDgsCisweDAwMjMwMWU5LAorMHgwMDI2MDA0YywKKzB4MDAyNzAwNWYsCisweDAwMjAwMTFiLAorMHgwMDI4MDA5MywKKzB4MDAyOTAwNGYsCisweDAwMmEwMDg0LAorMHgwMDJiMDA2NSwKKzB4MDAyZjAwOGUsCisweDAwMzIwMGQ5LAorMHgwMDM0MDIzMywKKzB4MDAzNjAwNzUsCisweDAwMzkwMTBiLAorMHgwMDNjMDFmZCwKKzB4MDAzZjAwYTAsCisweDAwNDEwMjQ4LAorMHgwMDQ0MDE5NSwKKzB4MDA0ODAxOWUsCisweDAwNDkwMWM2LAorMHgwMDRhMDFkMCwKKzB4MDA1NTAyMjYsCisweDAwNTYwMjJlLAorMHgwMDYwMDAwYSwKKzB4MDA2MTAwMmEsCisweDAwNjIwMDMwLAorMHgwMDYzMDAzMCwKKzB4MDA2NDAwMzAsCisweDAwNjUwMDMwLAorMHgwMDY2MDAzMCwKKzB4MDA2NzAwMzAsCisweDAwNjgwMDM3LAorMHgwMDY5MDAzZiwKKzB4MDA2YTAwNDcsCisweDAwNmIwMDQ3LAorMHgwMDZjMDA0NywKKzB4MDA2ZDAwNDcsCisweDAwNmUwMDQ3LAorMHgwMDZmMDA0NywKKzB4MDA3MDAwNDcsCisweDAwNzMwMjVmLAorMHgwMDdiMDI0MSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgUlY3MzBfcGZwX21pY3JvY29kZVtdID0geworMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweDdlODI4MDBiLAorMHg4MDAwMDAwMCwKKzB4ZGMwMzAwMDAsCisweGNjODAwMDQwLAorMHhkMDQwMDA0MCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHg3ZTgyODAwYiwKKzB4YzgxODAwMGUsCisweDMxOTgwMDAxLAorMHg3YzQyNDAwMCwKKzB4OTU4MDAyM2EsCisweDdjNDI4MDAwLAorMHhjODFjMDAxYywKKzB4YzAzN2MwMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2NiNDgwMGIsCisweGMwMzYwMDAzLAorMHg5OWMwMDAwMCwKKzB4YzgxYzAwMWMsCisweDdjYjQ4MDBjLAorMHgyNGQ0MDAwMiwKKzB4N2Q2NTQwMDAsCisweGNkNDAwMDQzLAorMHhjZTgwMDA0MywKKzB4Y2QwMDAwNDMsCisweGNjODAwMDQwLAorMHhjZTQwMDA0MCwKKzB4Y2U4MDAwNDAsCisweGNjYzAwMDQwLAorMHhkYzNhMDAwMCwKKzB4OTc4MGZmZGUsCisweGNkMDAwMDQwLAorMHg3YzQwYzAwMCwKKzB4ODAwMDAwMTgsCisweDdjNDEwMDAwLAorMHhkNDAwMDM0MCwKKzB4ZDQwMDBmYzAsCisweGQ0MDAwZmEyLAorMHhjODE4MDAwZSwKKzB4ODAwMDAwMGMsCisweDMxOTgwMDAyLAorMHhkNDAwMDNjMCwKKzB4ZDQwMDBmYzAsCisweGQ0MDAwZmEyLAorMHhjODE4MDAwZSwKKzB4Mjg4YzAwMDgsCisweDMwY2MwMDBmLAorMHgzNDEwMDAwMSwKKzB4N2QwZDAwMDgsCisweDgwMDAwMDBjLAorMHg3ZDkxODAwYiwKKzB4Y2M4MDAwNDAsCisweGQwNDAwMDQwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweDdlODI4MDBiLAorMHhkNDAwMDM0MCwKKzB4ZDQwMDBmYzAsCisweGQ0MDAwZmEyLAorMHhjYzgwMDA0MCwKKzB4ZDA0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweGQ0MDAwM2MwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhkMDQwMDA0MCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHg3ZTgyODAwYiwKKzB4Y2M0MDAzZjksCisweDgwMDAwMjQ5LAorMHhjYzQwMDNmOCwKKzB4YzAzN2ZmZmYsCisweDdjNDE0MDAwLAorMHhjZjQxYTI5ZSwKKzB4YzgyMDAzZjgsCisweGM4MWMwM2Y5LAorMHg2NjIwMDAyMCwKKzB4YzgxODAzZmIsCisweDdkZTFjMDJjLAorMHg3ZDU4YzAwOCwKKzB4N2NkY2MwMjAsCisweDY5MTAwMDIwLAorMHhjMDM2MDAwMywKKzB4Y2MwMDAwNTQsCisweDdjYjQ4MDBjLAorMHg4MDAwMDA2OSwKKzB4Y2M4MDAwNDAsCisweDdjNDE4MDAwLAorMHhjZDgxYTI5ZSwKKzB4Y2M4MDAwNDAsCisweDgwMDAwMDY3LAorMHhjZDgwMDA0MCwKKzB4YzAxOWZmZmYsCisweGNjODAwMDQwLAorMHhjZDgxYTI5ZSwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4Y2NjMWExZmEsCisweGNkMDFhMWY5LAorMHhjZDQxYTI5ZCwKKzB4Y2NjMDAwNDAsCisweGNkMDAwMDQwLAorMHhjZDQwMDA0MCwKKzB4Y2M0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweGNjMDAwMDU0LAorMHhjYzgwMDA0MCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4Y2NjMWExZmEsCisweGNkMDFhMWY5LAorMHhjZDQxYTI5ZCwKKzB4Y2NjMDAwNDAsCisweGNkMDAwMDQwLAorMHhjZDQwMDA0MCwKKzB4ZDA0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweDdjNDBjMDAwLAorMHgzMGQwMDAwMSwKKzB4Y2NjMWEyOWYsCisweDk1MDAwMDAzLAorMHgwNDE0MDAwMSwKKzB4MDQxNDAwMDIsCisweGNkNDAwM2ZiLAorMHhjYzgwMDA0MCwKKzB4ODAwMDAwMDAsCisweGNjYzAwMDQwLAorMHg3YzQwYzAwMCwKKzB4Y2M4MDAwNDAsCisweGNjYzFhMmEyLAorMHg4MDAwMDAwMCwKKzB4Y2NjMDAwNDAsCisweDdjNDBjMDAwLAorMHgyOGQ0MDAxZiwKKzB4Y2M4MDAwNDAsCisweDk1NDAwMDAzLAorMHg3YzQxMDAwMCwKKzB4Y2NjMDAwNTcsCisweDI5MTgwMDFmLAorMHhjY2MwMDA0MCwKKzB4OTU4MDAwMDMsCisweGNkMDAwMDQwLAorMHhjZDAwMDA1OCwKKzB4ODAwMDAyNDksCisweGNjMDAwMDdmLAorMHhjODIwMDAxNywKKzB4YzgzMDAwMjIsCisweDlhMDAwMDA2LAorMHgwZTI4MDAwMSwKKzB4YzgyNDAwMWUsCisweDBhNjQwMDAxLAorMHhkNDAwMTI0MCwKKzB4Y2U0MDAwNDAsCisweGMwMzZjMDAwLAorMHg5NjgwMDAwNywKKzB4Mzc3NDc5MDAsCisweDA0MWMwMDAxLAorMHhjZjQwMDA0MCwKKzB4Y2RjMDAwNDAsCisweGNmMDAwM2ZhLAorMHg3YzAzMDAwMCwKKzB4Y2EwYzAwMTAsCisweDdjNDEwMDAwLAorMHg5NGMwMDAwNCwKKzB4N2M0MTQwMDAsCisweGQ0MjAwMmM0LAorMHhjZGUwMDA0NCwKKzB4OWIwMDAwMGIsCisweDdjNDE4MDAwLAorMHhjYzAwMDA0YiwKKzB4Y2RhMDAwNDksCisweGNkMjAwMDQxLAorMHhjZDYwMDA0MSwKKzB4Y2RhMDAwNDEsCisweDA2MjAwMDAxLAorMHhjZTAwMDA1NiwKKzB4ODAwMDAyNDksCisweGNjMDAwMDdmLAorMHhjODI4MDAyMCwKKzB4YzgyYzAwMjEsCisweGNjMDAwMDYzLAorMHg3ZWVhNDAwMSwKKzB4NjU3NDAwMjAsCisweDdmNTM0MDJjLAorMHgyNjljMDAwMiwKKzB4N2RmNWMwMjAsCisweDY5ZjgwMDIwLAorMHhjZTgwMDA0YiwKKzB4Y2U2MDAwNDksCisweGNkZTAwMDQxLAorMHhjZmEwMDA0MSwKKzB4Y2U2MDAwNDEsCisweDI3MWMwMDAyLAorMHg3ZGY1YzAyMCwKKzB4NjlmODAwMjAsCisweDdkYjI0MDAxLAorMHhjZjAwMDA0YiwKKzB4Y2U2MDAwNDksCisweGNkZTAwMDQxLAorMHhjZmEwMDA0MSwKKzB4ODAwMDAwYmMsCisweGNlNjAwMDQxLAorMHhjODIwMDAxNywKKzB4YzgzMDAwMjIsCisweDlhMDAwMDA2LAorMHgwZTI4MDAwMSwKKzB4YzgyNDAwMWUsCisweDBhNjQwMDAxLAorMHhkNDAwMTI0MCwKKzB4Y2U0MDAwNDAsCisweGNhMGMwMDEwLAorMHg3YzQxMDAwMCwKKzB4OTRjMDAwMGIsCisweGMwMzZjMDAwLAorMHg5NjgwMDAwNywKKzB4Mzc3NDc5MDAsCisweDA0MWMwMDAxLAorMHhjZjQwMDA0MCwKKzB4Y2RjMDAwNDAsCisweGNmMDAwM2ZhLAorMHg3YzAzMDAwMCwKKzB4ODAwMDAwYjUsCisweDdjNDE0MDAwLAorMHhjYzAwMDA0OCwKKzB4ODAwMDAwZWUsCisweDAwMDAwMDAwLAorMHhjODIwMDAxNywKKzB4YzgxYzAwMjMsCisweDBlMjQwMDAyLAorMHg5OWMwMDAxNSwKKzB4N2M0MTgwMDAsCisweDBhMjAwMDAxLAorMHhjZTAwMDA1NiwKKzB4ZDQwMDA0NDAsCisweGNjMDAwMDQwLAorMHhjMDM2YzAwMCwKKzB4Y2ExNDAwMTMsCisweDk2NDAwMDA3LAorMHgzNzc0NzkwMCwKKzB4Y2Y0MDAwNDAsCisweGNjMDAwMDQwLAorMHhjODMwMDNmYSwKKzB4ODAwMDAxMDMsCisweGNmMDAwMDIyLAorMHhjYzAwMDAyMiwKKzB4OTU0MDAxNDYsCisweGNjMDAwMDdmLAorMHhjY2EwMDA0NiwKKzB4ODAwMDAwMDAsCisweGNjMjAwMDQ2LAorMHg4MDAwMDI0OSwKKzB4Y2MwMDAwNjQsCisweGM4MjAwMDE3LAorMHhjODEwMDAxZiwKKzB4OTYwMDAwMDUsCisweDA5MTAwMDAxLAorMHhkNDAwMDQ0MCwKKzB4Y2QwMDAwNDAsCisweGNkMDAwMDIyLAorMHhjYzgwMDA0MCwKKzB4ZDA0MDAwNDAsCisweGM4MGMwMDI1LAorMHg5NGMwZmVlYywKKzB4YzgxMDAwMDgsCisweGNkMDAwMDQwLAorMHhkNDAwMGZjMCwKKzB4ODAwMDAwMDAsCisweGQ0MDAwZmEyLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweGNjYzAwM2ZkLAorMHhjZDAwMDNmYywKKzB4Y2NjMDAwNDIsCisweGNkMDAwMDQyLAorMHgyOTE0MDAxZiwKKzB4MjkxODAwMTAsCisweDMxOTgwMDA3LAorMHgzYjVjMDAwMSwKKzB4N2Q3NjAwMGIsCisweDk5ODAwMDA1LAorMHg3ZDVlNDAwYiwKKzB4Y2MwMDAwNDIsCisweDgwMDAwMjQ5LAorMHhjYzAwMDA0ZCwKKzB4Mjk5ODAwMDEsCisweDI5MmMwMDA4LAorMHg5OTgwMDAzZCwKKzB4MzJlYzAwMDEsCisweDk2MDAwMDA0LAorMHgyOTMwMDAwYywKKzB4ODAwMDAyNDksCisweGNjMDAwMDQyLAorMHgwNDE0MDAxMCwKKzB4Y2Q0MDAwNDIsCisweDMzMzAwMDAxLAorMHgzNDI4MDAwMSwKKzB4ODQwMDAxNWQsCisweGM4MTQwMDAzLAorMHg5YjQwMDAxYiwKKzB4MDQzODAwMGMsCisweDg0MDAwMTVkLAorMHhjODE0MDAwMywKKzB4OWI0MDAwMTcsCisweDA0MzgwMDA4LAorMHg4NDAwMDE1ZCwKKzB4YzgxNDAwMDMsCisweDliNDAwMDEzLAorMHgwNDM4MDAwNCwKKzB4ODQwMDAxNWQsCisweGM4MTQwMDAzLAorMHg5YjQwMDAxNSwKKzB4YzgwYzAzZmQsCisweDlhODAwMDA5LAorMHhjODEwMDNmYywKKzB4OWIwMDAxMDEsCisweGNjMDAwMDRkLAorMHgwNDE0MDAxMCwKKzB4Y2NjMDAwNDIsCisweGNkMDAwMDQyLAorMHg4MDAwMDEzNSwKKzB4Y2Q0MDAwNDIsCisweDk2YzAwMGZhLAorMHhjYzAwMDA0ZCwKKzB4ODAwMDAyNDksCisweGNjMDAwMDRlLAorMHg5YWMwMDAwMywKKzB4Y2MwMDAwNGQsCisweGNjMDAwMDRlLAorMHhkZjgzMDAwMCwKKzB4ODAwMDAwMDAsCisweGQ4MDMwMWZmLAorMHg5YWMwMDBmMCwKKzB4Y2MwMDAwNGQsCisweDgwMDAwMjQ5LAorMHhjYzAwMDA0ZSwKKzB4YzgxODAwMDMsCisweGM4MWMwMDAzLAorMHhjODIwMDAwMywKKzB4N2Q1ZDQwMDMsCisweDdkYTFjMDAzLAorMHg3ZDVkNDAwYywKKzB4MmExMDAwMWYsCisweDI5OWMwMDFmLAorMHg3ZDFkMDAwYiwKKzB4N2QxNzQwMGIsCisweDg4MDAwMDAwLAorMHg3ZTkyODAwYiwKKzB4OTY0MDAwMDQsCisweGNjMDAwMDRlLAorMHg4MDAwMDI0OSwKKzB4Y2MwMDAwNDIsCisweDA0MzgwMDA4LAorMHhjZjgwMDA0MiwKKzB4YzgwODAwMDMsCisweGM4MGMwMDAzLAorMHhjODEwMDAwMywKKzB4YzgxNDAwMDMsCisweGM4MTgwMDAzLAorMHhjODFjMDAwMywKKzB4YzgyNDAwMDMsCisweGM4MjgwMDAzLAorMHgyOWZjMDAxZiwKKzB4MmFiMDAwMWYsCisweDdmZjNjMDBiLAorMHgyOGYwMDAxZiwKKzB4N2ZmM2MwMGIsCisweDI5NzAwMDFmLAorMHg3ZmYzYzAwYiwKKzB4N2Q4ODgwMDEsCisweDdkY2NjMDAxLAorMHg3ZTUxMDAwMSwKKzB4N2U5NTQwMDEsCisweDdjOTA4MDAyLAorMHg3Y2Q0YzAwMiwKKzB4N2NiYzgwMGIsCisweDlhYzAwMDAzLAorMHg3YzhmNDAwYiwKKzB4MzhiNDAwMDEsCisweDliNDAwMGMxLAorMHhjYzAwMDA0ZCwKKzB4OWJjMDAwYmYsCisweGNjMDAwMDRlLAorMHhjODBjMDNmZCwKKzB4YzgxMDAzZmMsCisweGNjYzAwMDQyLAorMHg4MDAwMDE2ZSwKKzB4Y2QwMDAwNDIsCisweGQ0MDAwMzQwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhjYzQwMDA0MCwKKzB4Y2M0MDAwNDAsCisweGNjNDAwMDQwLAorMHg3YzQwYzAwMCwKKzB4Y2NjMDAwNDAsCisweGNjYzAwMDBkLAorMHg4MDAwMDAwMCwKKzB4ZDA0MDAwNDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4NjUxNDAwMjAsCisweDdkNGQ0MDJjLAorMHgyNDU4MDAwMiwKKzB4N2Q1OTgwMjAsCisweDdjNDFjMDAwLAorMHhjZDgwMDA0MiwKKzB4Njk5ODAwMjAsCisweGNkODAwMDQyLAorMHhjZGMwMDA0MiwKKzB4YzAyM2MwMDAsCisweDA1ZTQwMDAyLAorMHg3Y2EwODAwYiwKKzB4MjY2NDAwMTAsCisweDdjYTQ4MDBjLAorMHhjYzgwMDA0MCwKKzB4Y2RjMDAwNDAsCisweGNjYzAwMDQwLAorMHg5NWMwMDAwZSwKKzB4Y2QwMDAwNDAsCisweDA5ZGMwMDAxLAorMHhjODI4MDAwMywKKzB4OTY4MDAwMDgsCisweGNlODAwMDQwLAorMHhjODM0MDAxZCwKKzB4OTc0MDAwMDAsCisweGM4MzQwMDFkLAorMHgyNmE4MDAwOCwKKzB4ODQwMDAyNGMsCisweGNjMmIwMDAwLAorMHg5OWMwZmZmNywKKzB4MDlkYzAwMDEsCisweGRjM2EwMDAwLAorMHg5NzgwMDAwNCwKKzB4N2M0MTgwMDAsCisweDgwMDAwMWEyLAorMHgyNTk4MDAwMiwKKzB4YTAwMDAwMDAsCisweDdkODA4MDAwLAorMHhjODE4MDAxZCwKKzB4N2M0MGMwMDAsCisweDY0ZDAwMDA4LAorMHg5NTgwMDAwMCwKKzB4YzgxODAwMWQsCisweGNjMTMwMDAwLAorMHhjYzgwMDA0MCwKKzB4Y2NjMDAwNDAsCisweDgwMDAwMDAwLAorMHhjYzQwMDA0MCwKKzB4YzgxMDAwMWYsCisweDdjNDBjMDAwLAorMHhjYzgwMDA0MCwKKzB4N2NkMTQwMGMsCisweGNkNDAwMDQwLAorMHgwNTE4MDAwMSwKKzB4ODAwMDAwMDAsCisweGNkODAwMDIyLAorMHg3YzQwYzAwMCwKKzB4NjQ1MDAwMjAsCisweDg0MDAwMjRjLAorMHhjYzAwMDA2MSwKKzB4N2NkMGMwMmMsCisweGM4MjAwMDE3LAorMHhjOGQ2MDAwMCwKKzB4OTk0MDAwMDgsCisweDdjNDM4MDAwLAorMHhkZjgzMDAwMCwKKzB4Y2ZhMDAwNGYsCisweDg0MDAwMjRjLAorMHhjYzAwMDA2MiwKKzB4ODAwMDAwMDAsCisweGQwNDAwMDdmLAorMHg4MDAwMDI0OSwKKzB4Y2MwMDAwNjIsCisweDg0MDAwMjRjLAorMHhjYzAwMDA2MSwKKzB4YzgyMDAwMTcsCisweDdjNDBjMDAwLAorMHhjMDM2ZmYwMCwKKzB4YzgxMDAwMGQsCisweGMwMzAzZmZmLAorMHg3Y2Y1NDAwYiwKKzB4N2Q1MTgwMGIsCisweDdkODE4MDBmLAorMHg5OTgwMDAwOCwKKzB4N2NmMzgwMGIsCisweGRmODMwMDAwLAorMHhjZmEwMDA0ZiwKKzB4ODQwMDAyNGMsCisweGNjMDAwMDYyLAorMHg4MDAwMDAwMCwKKzB4ZDA0MDAwN2YsCisweDgwMDAwMjQ5LAorMHhjYzAwMDA2MiwKKzB4ODQwMDAyNGMsCisweDdjNDBjMDAwLAorMHgyOGRjMDAwOCwKKzB4OTVjMDAwMTksCisweDMwZGMwMDEwLAorMHg3YzQxMDAwMCwKKzB4OTljMDAwMDQsCisweDY0NTQwMDIwLAorMHg4MDAwMDIwOCwKKzB4YzkxZDAwMDAsCisweDdkMTUwMDJjLAorMHhjOTFlMDAwMCwKKzB4N2M0MjAwMDAsCisweDdjNDI0MDAwLAorMHg3YzQxODAwMCwKKzB4N2RlNWMwMGIsCisweDdkZTI4MDA3LAorMHg5YTgwMDAwZSwKKzB4NDFhYzAwMDUsCisweDlhYzAwMDAwLAorMHgwYWVjMDAwMSwKKzB4MzBkYzAwMTAsCisweDk5YzAwMDA0LAorMHgwMDAwMDAwMCwKKzB4ODAwMDAyMGIsCisweGM5MWQwMDAwLAorMHg4MDAwMDIwYiwKKzB4YzkxZTAwMDAsCisweGNjODAwMDQwLAorMHhjY2MwMDA0MCwKKzB4ZDA0MDAwNDAsCisweGM4MGMwMDI1LAorMHg5NGMwZmRlNCwKKzB4YzgxMDAwMDgsCisweGNkMDAwMDQwLAorMHhkNDAwMGZjMCwKKzB4ODAwMDAwMDAsCisweGQ0MDAwZmEyLAorMHhkNDAwMDM0MCwKKzB4ZDQwMDBmYzAsCisweGQ0MDAwZmEyLAorMHhjYzgwMDA0MCwKKzB4ZDA0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweGQ0MDAwM2MwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhkMDQwMDA0MCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHg3ZTgyODAwYiwKKzB4N2M0MGMwMDAsCisweDMwZDAwMDA2LAorMHgwZDEwMDAwNiwKKzB4OTkwMDAwMDcsCisweGM4MTQwMDE1LAorMHg5OTQwMDAwNSwKKzB4Y2MwMDAwNTIsCisweGQ0MDAwMzQwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhjY2MwMDA0MCwKKzB4ODAwMDAwMDAsCisweGQwNDAwMDQwLAorMHg3YzQwYzAwMCwKKzB4Y2M0ZDAwMDAsCisweGRjM2EwMDAwLAorMHg5NzgwZmRiZCwKKzB4MDRjYzAwMDEsCisweDgwMDAwMjQyLAorMHhjYzRkMDAwMCwKKzB4ODAwMDAwMDAsCisweGQwNDAwMDdmLAorMHhjYzAwMDA3ZiwKKzB4ODAwMDAwMDAsCisweGNjMDAwMDdmLAorMHhjYzAwMDA3ZiwKKzB4ODgwMDAwMDAsCisweGNjMDAwMDdmLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAzMDIyMiwKKzB4MDAwNDAyMmEsCisweDAwMDUwMDlmLAorMHgwMDAyMDAwMywKKzB4MDAwNjAwM2MsCisweDAwMDcwMDI3LAorMHgwMDA4MDE5MSwKKzB4MDAwOTAwNDQsCisweDAwMGEwMDJkLAorMHgwMDEwMDI0NywKKzB4MDAxNzAwZjAsCisweDAwMjIwMWQ3LAorMHgwMDIzMDFlOCwKKzB4MDAyNjAwNGMsCisweDAwMjcwMDVmLAorMHgwMDIwMDExYSwKKzB4MDAyODAwOTIsCisweDAwMjkwMDRmLAorMHgwMDJhMDA4MywKKzB4MDAyYjAwNjQsCisweDAwMmYwMDhkLAorMHgwMDMyMDBkOCwKKzB4MDAzNDAyMzIsCisweDAwMzYwMDc0LAorMHgwMDM5MDEwYSwKKzB4MDAzYzAxZmMsCisweDAwM2YwMDlmLAorMHgwMDQxMDAwNSwKKzB4MDA0NDAxOTQsCisweDAwNDgwMTlkLAorMHgwMDQ5MDFjNSwKKzB4MDA0YTAxY2YsCisweDAwNTUwMjI1LAorMHgwMDU2MDIyZCwKKzB4MDA2MDAwMGEsCisweDAwNjEwMDJhLAorMHgwMDYyMDAzMCwKKzB4MDA2MzAwMzAsCisweDAwNjQwMDMwLAorMHgwMDY1MDAzMCwKKzB4MDA2NjAwMzAsCisweDAwNjcwMDMwLAorMHgwMDY4MDAzNywKKzB4MDA2OTAwM2YsCisweDAwNmEwMDQ3LAorMHgwMDZiMDA0NywKKzB4MDA2YzAwNDcsCisweDAwNmQwMDQ3LAorMHgwMDZlMDA0NywKKzB4MDA2ZjAwNDcsCisweDAwNzAwMDQ3LAorMHgwMDczMDI0NywKKzB4MDA3YjAyNDAsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCit9OworCitzdGF0aWMgY29uc3QgdTMyIFJWNzMwX2NwX21pY3JvY29kZVtdID0geworMHhjYzAwMDNlYSwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ODAwMDAwMDEsCisweGQwNDAwMDdmLAorMHg4MDAwMDAwMSwKKzB4Y2M0MDAwNDEsCisweDdjNDBjMDAwLAorMHhjMDE2MDAwNCwKKzB4MzBkMDNmZmYsCisweDdkMTUwMDBjLAorMHhjYzExMDAwMCwKKzB4MjhkODAwMWUsCisweDMxOTgwMDAxLAorMHgyOGRjMDAxZiwKKzB4YzgyMDAwMDQsCisweDk1YzAwMDA2LAorMHg3YzQyNDAwMCwKKzB4Y2MwMDAwNjIsCisweDdlNTY4MDBjLAorMHhjYzI5MDAwMCwKKzB4YzgyNDAwMDQsCisweDdlMjYwMDBiLAorMHg5NTgwMDAwNiwKKzB4N2M0MmMwMDAsCisweGNjMDAwMDYyLAorMHg3ZWQ3MDAwYywKKzB4Y2MzMTAwMDAsCisweGM4MmMwMDA0LAorMHg3ZTJlMDAwYywKKzB4Y2MwMDAwNjIsCisweDMxMTAzZmZmLAorMHg4MDAwMDAwMSwKKzB4Y2UxMTAwMDAsCisweDdjNDBjMDAwLAorMHg4MDAwMDAwMSwKKzB4Y2M0MDAwNDAsCisweDgwMDAwMDAxLAorMHhjYzQxMjI1NywKKzB4N2M0MTgwMDAsCisweGNjNDAwMDQ1LAorMHhjYzQwMDA0OCwKKzB4Y2M0MTIyNWMsCisweGNjNDFhMWZjLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhjYzQwMDA0NSwKKzB4Y2M0MDAwNDgsCisweDdjNDBjMDAwLAorMHhjYzQxMjI1YywKKzB4Y2M0MWExZmMsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGNjMDAwMDQ1LAorMHhjYzAwMDA0OCwKKzB4Y2M0MTIyNWMsCisweGNjNDFhMWZjLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHgwNDBjYTFmZCwKKzB4YzAxMjAwMDEsCisweGNjMDAwMDQ1LAorMHhjYzAwMDA0OCwKKzB4N2NkMGMwMGMsCisweGNjNDEyMjVjLAorMHhjYzQxYTFmYywKKzB4ZDA0ZDAwMDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweDgwMDAwMDAxLAorMHhjYzQxMjI1ZCwKKzB4N2M0MDgwMDAsCisweDdjNDBjMDAwLAorMHhjMDJhMDAwMiwKKzB4N2M0MTAwMDAsCisweDdkMjkwMDBjLAorMHgzMDk0MDAwMSwKKzB4MzA5ODAwMDYsCisweDMwOWMwMzAwLAorMHgyOWRjMDAwOCwKKzB4N2M0MjAwMDAsCisweDdjNDI0MDAwLAorMHg5NTQwMDAwZiwKKzB4YzAyZTAwMDQsCisweDA1ZjAyMjU4LAorMHg3ZjJmMDAwYywKKzB4Y2MzMTAwMDAsCisweGM4MjgwMDA0LAorMHhjY2MxMjE2OSwKKzB4Y2QwMTIxNmEsCisweGNlODEyMTZiLAorMHgwZGI0MDAwMiwKKzB4Y2MwMTIxNmMsCisweDk3NDAwMDBlLAorMHgwZGI0MDAwMCwKKzB4ODAwMDAwN2IsCisweGM4MzQwMDBhLAorMHgwZGI0MDAwMiwKKzB4OTc0MDAwMDksCisweDBkYjQwMDAwLAorMHhjMDJlMDAwNCwKKzB4MDVmMDIyNTgsCisweDdmMmYwMDBjLAorMHhjYzMxMDAwMCwKKzB4YzgyODAwMDQsCisweDgwMDAwMDdiLAorMHhjODM0MDAwYSwKKzB4OTc0MDAwMDQsCisweDdlMDI4MDAwLAorMHg4MDAwMDA3YiwKKzB4YzgzNDAwMGEsCisweDBkYjQwMDA0LAorMHg5NzQwZmY4YywKKzB4MDAwMDAwMDAsCisweGNlMDEyMTZkLAorMHhjZTQxMjE2ZSwKKzB4YzgyODAwMDMsCisweGM4MzQwMDBhLAorMHg5YjQwMDAwNCwKKzB4MDQzYzAwMDUsCisweDg0MDAwMjZiLAorMHhjYzAwMDA2MiwKKzB4MGRmNDAwMDAsCisweDk3NDAwMDBiLAorMHhjODJjMDNlNiwKKzB4Y2U4MWEyYjcsCisweGMwMzAwMDA2LAorMHg3ZWYzNDAyOCwKKzB4YzAzMDAwMjAsCisweDdmNmI4MDIwLAorMHg3ZmIzYzAyOSwKKzB4Y2Y4MWEyYzQsCisweDgwMDAwMDAxLAorMHhjZmMxYTJkMSwKKzB4MGRmNDAwMDEsCisweDk3NDAwMDBiLAorMHhjODJjMDNlNywKKzB4Y2U4MWEyYmIsCisweGMwMzAwMDA2LAorMHg3ZWYzNDAyOCwKKzB4YzAzMDAwMjAsCisweDdmNmI4MDIwLAorMHg3ZmIzYzAyOSwKKzB4Y2Y4MWEyYzUsCisweDgwMDAwMDAxLAorMHhjZmMxYTJkMiwKKzB4MGRmNDAwMDIsCisweDk3NDAwMDBiLAorMHhjODJjMDNlOCwKKzB4Y2U4MWEyYmYsCisweGMwMzAwMDA2LAorMHg3ZWYzNDAyOCwKKzB4YzAzMDAwMjAsCisweDdmNmI4MDIwLAorMHg3ZmIzYzAyOSwKKzB4Y2Y4MWEyYzYsCisweDgwMDAwMDAxLAorMHhjZmMxYTJkMywKKzB4YzgyYzAzZTksCisweGNlODFhMmMzLAorMHhjMDMwMDAwNiwKKzB4N2VmMzQwMjgsCisweGMwMzAwMDIwLAorMHg3ZjZiODAyMCwKKzB4N2ZiM2MwMjksCisweGNmODFhMmM3LAorMHg4MDAwMDAwMSwKKzB4Y2ZjMWEyZDQsCisweDgwMDAwMDAxLAorMHhjYzQwMDA0MiwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHgyOTE0MDAxZCwKKzB4MzE1NDAwMDEsCisweDk5NDAwMDBjLAorMHgzMTE4MTAwMCwKKzB4YzgxYzAwMTEsCisweDk1YzAwMDAwLAorMHhjODFjMDAxMSwKKzB4Y2NjMTIxMDAsCisweGNkMDEyMTAxLAorMHhjY2MxMjEwMiwKKzB4Y2QwMTIxMDMsCisweDA0MTgwMDA0LAorMHg4MDAwMDM3YywKKzB4Y2Q4MWEyYTQsCisweGMwMmEwMDA0LAorMHg5NTgwMDAwOCwKKzB4MzZhODIxYTMsCisweGNjMjkwMDAwLAorMHhjODI4MDAwNCwKKzB4YzgxYzAwMTEsCisweDBkZTQwMDQwLAorMHg5NjQwZmZmZiwKKzB4YzgxYzAwMTEsCisweGNjYzEyMTcwLAorMHhjZDAxMjE3MSwKKzB4YzgyMDAwMTIsCisweDk2MDAwMDAwLAorMHhjODIwMDAxMiwKKzB4ODAwMDAzN2MsCisweGNjMDAwMDY0LAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweGNjMDAwMDQ1LAorMHhjYzAwMDA0OCwKKzB4NDBkNDAwMDMsCisweGNkNDEyMjVjLAorMHhjZDAxYTFmYywKKzB4YzAxYTAwMDEsCisweDA0MWNhMWZkLAorMHg3ZGQ5YzAwYywKKzB4N2M0MjAwMDAsCisweDA4Y2MwMDAxLAorMHgwNjI0MDAwMSwKKzB4MDYyODAwMDIsCisweGNlMWQwMDAwLAorMHhjZTVkMDAwMCwKKzB4OThjMGZmZmEsCisweGNlOWQwMDAwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHg3YzQwYzAwMCwKKzB4MzBkMDAwMDEsCisweDI4Y2MwMDAxLAorMHg3YzQxNDAwMCwKKzB4OTUwMDAwMDYsCisweDdjNDE4MDAwLAorMHhjZDQxMjE2ZCwKKzB4Y2Q4MTIxNmUsCisweDgwMDAwMGYyLAorMHhjODFjMDAwMywKKzB4YzAyMjAwMDQsCisweDdlMTYwMDBjLAorMHhjYzIxMDAwMCwKKzB4YzgxYzAwMDQsCisweDdjNDI0MDAwLAorMHg5OGMwMDAwNCwKKzB4N2M0MjgwMDAsCisweDgwMDAwMDAxLAorMHhjZGU1MDAwMCwKKzB4Y2U0MTIxNjksCisweGNlODEyMTZhLAorMHhjZGMxMjE2YiwKKzB4ODAwMDAwMDEsCisweGNjMDEyMTZjLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4N2M0MWMwMDAsCisweDI4YTQwMDA4LAorMHgzMjY0MDBmZiwKKzB4MGU2ODAwM2MsCisweDk2ODAwMDBhLAorMHg3YzAyMDAwMCwKKzB4N2M0MjAwMDAsCisweDFlMzAwMDAzLAorMHhjYzAwMDA2YSwKKzB4OWIwMDAwMDMsCisweDQyMjAwMDA1LAorMHgwNDIwMDA0MCwKKzB4ODAwMDAxMGYsCisweDdjMDI0MDAwLAorMHg3ZTAyNDAwMCwKKzB4OWE0MDAwMDAsCisweDBhNjQwMDAxLAorMHgzMGVjMDAxMCwKKzB4OWFjMDAwMGEsCisweGNjMDAwMDYyLAorMHhjMDJhMDAwNCwKKzB4YzgyYzAwMjEsCisweDdlOTI4MDBjLAorMHhjYzAwMDA0MSwKKzB4Y2MyOTAwMDAsCisweGNlYzAwMDIxLAorMHg4MDAwMDExZiwKKzB4YzgzMDAwMDQsCisweGNkMDEyMTZkLAorMHhjZDQxMjE2ZSwKKzB4YzgzMDAwMDMsCisweDdmMWYwMDBiLAorMHgzMGY0MDAwNywKKzB4Mjc3ODAwMDEsCisweDk3NDAwMDJhLAorMHgwN2I4MDEyNCwKKzB4OWY4MDAwMDAsCisweDAwMDAwMDAwLAorMHg4MDAwMDEzNCwKKzB4N2YxYjgwMDQsCisweDgwMDAwMTM4LAorMHg3ZjFiODAwNSwKKzB4ODAwMDAxM2MsCisweDdmMWI4MDAyLAorMHg4MDAwMDE0MCwKKzB4N2YxYjgwMDMsCisweDgwMDAwMTQ0LAorMHg3ZjFiODAwNywKKzB4ODAwMDAxNDgsCisweDdmMWI4MDA2LAorMHg4MDAwMDE0ZCwKKzB4MjhhNDAwMDgsCisweDliODAwMDE5LAorMHgyOGE0MDAwOCwKKzB4ODAwMDAxNWQsCisweDMyNjQwMGZmLAorMHg5YjgwMDAxNSwKKzB4MjhhNDAwMDgsCisweDgwMDAwMTVkLAorMHgzMjY0MDBmZiwKKzB4OWI4MDAwMTEsCisweDI4YTQwMDA4LAorMHg4MDAwMDE1ZCwKKzB4MzI2NDAwZmYsCisweDliODAwMDBkLAorMHgyOGE0MDAwOCwKKzB4ODAwMDAxNWQsCisweDMyNjQwMGZmLAorMHg5YjgwMDAwOSwKKzB4MjhhNDAwMDgsCisweDgwMDAwMTVkLAorMHgzMjY0MDBmZiwKKzB4OWI4MDAwMDUsCisweDI4YTQwMDA4LAorMHg4MDAwMDE1ZCwKKzB4MzI2NDAwZmYsCisweDI4YTQwMDA4LAorMHgzMjY0MDBmZiwKKzB4MGU2ODAwM2MsCisweDlhODBmZWIyLAorMHgyOGVjMDAwOCwKKzB4N2M0MzQwMDAsCisweDdjNDM4MDAwLAorMHg3YzQzYzAwMCwKKzB4OTZjMDAwMDcsCisweGNjMDAwMDYyLAorMHhjZjQxMjE2OSwKKzB4Y2Y4MTIxNmEsCisweGNmYzEyMTZiLAorMHg4MDAwMDAwMSwKKzB4Y2MwMTIxNmMsCisweDgwMDAwMDAxLAorMHhjZmY1MDAwMCwKKzB4Y2MwMDAwNmIsCisweDg0MDAwMzdmLAorMHgwZTY4MDAzYywKKzB4OWE4MDAwMDQsCisweGM4MjgwMDE1LAorMHg4MDAwMDAwMSwKKzB4ZDA0MDAwN2YsCisweDk2ODBmZmFiLAorMHg3ZTAyNDAwMCwKKzB4ODQwMDAyMzksCisweGMwMGUwMDAyLAorMHhjYzAwMDA0MSwKKzB4ODAwMDAyMzcsCisweGNjYzEzMDRhLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweGMwMWUwMDAxLAorMHgyOTI0MDAxMiwKKzB4YzAyMjAwMDIsCisweDk2NDAwMDA1LAorMHhjMDI2MDAwNCwKKzB4YzAyN2ZmZmIsCisweDdkMjUwMDBiLAorMHhjMDI2MDAwMCwKKzB4N2RkMjgwMGIsCisweDdlMTJjMDBiLAorMHg3ZDI1MDAwYywKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHhjY2MxMjE2OSwKKzB4OWE4MDAwMGEsCisweGNkMDEyMTZhLAorMHhjZDQxMjE2YiwKKzB4OTZjMGZlODMsCisweGNkODEyMTZjLAorMHhjODMwMDAxOCwKKzB4OTcwMDAwMDAsCisweGM4MzAwMDE4LAorMHg4MDAwMDAwMSwKKzB4Y2MwMDAwMTgsCisweDg0MDAwMzdmLAorMHhjYzAwMDA3ZiwKKzB4YzgxNDAwMTMsCisweGM4MTgwMDE0LAorMHhjZDQxMjE2YiwKKzB4OTZjMGZlNzcsCisweGNkODEyMTZjLAorMHg4MDAwMDE4MSwKKzB4YzgzMDAwMTgsCisweGM4MGMwMDA4LAorMHg5OGMwMDAwMCwKKzB4YzgwYzAwMDgsCisweDdjNDEwMDAwLAorMHg5NTAwMDAwMiwKKzB4MDAwMDAwMDAsCisweDdjNDE0MDAwLAorMHhjODIwMDAwOSwKKzB4Y2M0MDAwNDMsCisweGNlMDFhMWY0LAorMHhjYzQwMDA0NCwKKzB4YzAwZTgwMDAsCisweDdjNDI0MDAwLAorMHg3YzQyODAwMCwKKzB4MmFhYzAwMWYsCisweDk2YzBmZTY0LAorMHhjMDM1ZjAwMCwKKzB4Y2U0MDAzZTIsCisweDMyNzgwMDAzLAorMHgyNjdjMDAwOCwKKzB4N2ZmN2MwMGIsCisweDdmZmJjMDBjLAorMHgyYTc4MDAxOCwKKzB4Y2ZjMDAzZTMsCisweGNmODAwM2U0LAorMHgyNmIwMDAwMiwKKzB4N2YzZjAwMDAsCisweGNmMDAwM2U1LAorMHg4MDAwMDMxZCwKKzB4N2M4MGMwMDAsCisweDdjNDBjMDAwLAorMHgyOGQwMDAwOCwKKzB4MzExMDAwMGYsCisweDk1MDAwMDBmLAorMHgyNTI4MDAwMSwKKzB4MDZhODAxYjIsCisweDllODAwMDAwLAorMHgwMDAwMDAwMCwKKzB4ODAwMDAxZDMsCisweGMwMTIwODAwLAorMHg4MDAwMDFlMSwKKzB4YzgxNDAwMGYsCisweDgwMDAwMWU4LAorMHhjODE0MDAxMCwKKzB4ODAwMDAxZWYsCisweGNjYzFhMmE0LAorMHg4MDAwMDFmOCwKKzB4YzgxNDAwMTEsCisweDMwZDAwMDNmLAorMHgwZDI4MDAxNSwKKzB4OWE4MDAwMTIsCisweDBkMjgwMDFlLAorMHg5YTgwMDAxZSwKKzB4MGQyODAwMjAsCisweDlhODAwMDIzLAorMHgwZDI0MDAwZiwKKzB4MGQyODAwMTAsCisweDdlNmE4MDBjLAorMHg5YTgwMDAyNiwKKzB4MGQyMDAwMDQsCisweDBkMjQwMDE0LAorMHgwZDI4MDAyOCwKKzB4N2U2MjQwMGMsCisweDdlYTY4MDBjLAorMHg5YTgwMDAyYSwKKzB4YzgxNDAwMTEsCisweDgwMDAwMDAxLAorMHhjY2MxYTJhNCwKKzB4YzAxMjA4MDAsCisweDdjNDE0MDAwLAorMHg3ZDBjYzAwYywKKzB4YzAxMjAwMDgsCisweDI5NTgwMDAzLAorMHgyOTVjMDAwYywKKzB4N2M0MjAwMDAsCisweDdkZDFjMDBiLAorMHgyNjIwMDAxNCwKKzB4N2UxZTQwMGMsCisweDdlNGU4MDBjLAorMHhjZTgxYTJhNCwKKzB4ODAwMDAwMDEsCisweGNkODFhMWZlLAorMHhjODE0MDAwZiwKKzB4MDQxMDIxMGUsCisweDk1NDAwMDAwLAorMHhjODE0MDAwZiwKKzB4ZDA1MTAwMDAsCisweDgwMDAwMDAxLAorMHhjY2MxYTJhNCwKKzB4YzgxNDAwMTAsCisweDA0MTAyMTA4LAorMHg5NTQwMDAwMCwKKzB4YzgxNDAwMTAsCisweGQwNTEwMDAwLAorMHg4MDAwMDAwMSwKKzB4Y2NjMWEyYTQsCisweGNjYzFhMmE0LAorMHgwNDEwMDAwMSwKKzB4Y2QwMDAwMTksCisweDg0MDAwMzdmLAorMHhjYzAwMDA3ZiwKKzB4YzgxMDAwMTksCisweDk5MDAwMDAwLAorMHhjODEwMDAxOSwKKzB4ODAwMDAwMDIsCisweDdjNDA4MDAwLAorMHgwNDEwMjEwMCwKKzB4OTU0MDAwMDAsCisweGM4MTQwMDExLAorMHhkMDUxMDAwMCwKKzB4ODAwMDAzN2MsCisweGNjYzFhMmE0LAorMHg3YzQwYzAwMCwKKzB4Y2M0MDAwMGQsCisweDk0YzBmZTAxLAorMHhjYzQwMDAwZSwKKzB4N2M0MTAwMDAsCisweDk1MDAwMDA1LAorMHgwOGNjMDAwMSwKKzB4YzgxNDAwMDUsCisweDk5NDAwMDE0LAorMHgwMDAwMDAwMCwKKzB4OThjMGZmZmIsCisweDdjNDEwMDAwLAorMHg4MDAwMDAwMiwKKzB4N2QwMDgwMDAsCisweGM4MTQwMDA1LAorMHg3YzQwYzAwMCwKKzB4OTk0MDAwMGMsCisweGM4MTgwMDBjLAorMHg3YzQxMDAwMCwKKzB4OTU4MGZkZjAsCisweGM4MjAwMDBlLAorMHhjODFjMDAwZCwKKzB4NjYyMDAwMjAsCisweDdlMWUwMDJjLAorMHgyNTI0MDAwMiwKKzB4N2U2MjQwMjAsCisweDgwMDAwMDAxLAorMHhjY2U2MDAwMCwKKzB4N2M0MTAwMDAsCisweGNjMDAwMDZjLAorMHhjYzAwMDA2ZCwKKzB4YzgxODAwMWYsCisweGM4MWMwMDFlLAorMHg2NTk4MDAyMCwKKzB4N2RkOWMwMmMsCisweDdjZDRjMDBjLAorMHhjY2RlMDAwMCwKKzB4NDVkYzAwMDQsCisweGM4MjgwMDE3LAorMHg5NjgwMDAwZiwKKzB4YzAwZTAwMDEsCisweDI4NjgwMDA4LAorMHgyYWFjMDAxNiwKKzB4MzJhODAwZmYsCisweDBlYjAwMDQ5LAorMHg3ZjJmMDAwYiwKKzB4OTcwMDAwMDYsCisweDAwMDAwMDAwLAorMHhjODE0MDAwNSwKKzB4N2M0MGMwMDAsCisweDgwMDAwMjIxLAorMHg3YzQxMDAwMCwKKzB4ODAwMDAyMjQsCisweGQwNDAwMDdmLAorMHg4NDAwMDIzOSwKKzB4Y2MwMDAwNDEsCisweGNjYzEzMDRhLAorMHg5NDAwMDAwMCwKKzB4YzgzYzAwMWEsCisweDA0M2MwMDA1LAorMHhjZmMxYTJhNCwKKzB4YzAzNjFmOTAsCisweGMwMzg3ZmZmLAorMHg3YzAzYzAxMCwKKzB4N2Y3YjQwMGMsCisweGNmNDEyMTdjLAorMHhjZmMxMjE3ZCwKKzB4Y2MwMTIxN2UsCisweGMwM2EwMDA0LAorMHgwNDM0MjE3ZiwKKzB4N2Y3YjQwMGMsCisweGNjMzUwMDAwLAorMHhjODNjMDAwNCwKKzB4MmJmYzAwMWYsCisweDA0MzgwMDIwLAorMHg5N2MwMDAwNSwKKzB4Y2MwMDAwNjIsCisweDliODAwMDAwLAorMHgwYmI4MDAwMSwKKzB4ODAwMDAyNDUsCisweGNjMDAwMDcxLAorMHhjYzAxYTFmNCwKKzB4MDQzODAwMTYsCisweGMwMzYwMDAyLAorMHhjZjgxYTJhNCwKKzB4ODgwMDAwMDAsCisweGNmNDEyMDEwLAorMHg3YzQwYzAwMCwKKzB4MjhkMDAwMWMsCisweDk1MDAwMDA1LAorMHgwNGQ0MDAwMSwKKzB4Y2Q0MDAwNjUsCisweDgwMDAwMDAxLAorMHhjZDQwMDA2OCwKKzB4MDk1NDAwMDIsCisweDgwMDAwMDAxLAorMHhjZDQwMDA2NiwKKzB4ODQwMDAyNmEsCisweGM4MTgwM2VhLAorMHg3YzQwYzAwMCwKKzB4OTk4MGZkOWYsCisweGM4MTQwMDE2LAorMHgwOGQwMDAwMSwKKzB4OTk0MDAwMmIsCisweGNkMDAwMDY4LAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHgwNDNjMDAwNSwKKzB4Y2ZjMWEyYTQsCisweGNjMDFhMWY0LAorMHg4NDAwMDM3ZiwKKzB4Y2MwMDAwNDYsCisweDg4MDAwMDAwLAorMHhjYzAwMDA3ZiwKKzB4ODQwMDAyN2MsCisweGM4MTgwM2VhLAorMHg3YzQwYzAwMCwKKzB4OTk4MGZkOGQsCisweGM4MTQwMDE2LAorMHgwOGQwMDAwMSwKKzB4OTk0MDAwMTksCisweGNkMDAwMDY4LAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHgwNDNjMDAyMiwKKzB4Y2ZjMWEyYTQsCisweDg0MDAwMzdmLAorMHhjYzAwMDA0NywKKzB4ODgwMDAwMDAsCisweGNjMDAwMDdmLAorMHhjODEwMDAxNiwKKzB4OTkwMDAwMGQsCisweGNjNDAwMDY3LAorMHg4MDAwMDAwMiwKKzB4N2M0MDgwMDAsCisweGM4MTgwM2VhLAorMHg5OTgwZmQ3OSwKKzB4N2M0MGMwMDAsCisweDk0YzAwMDAzLAorMHhjODEwMDAxNiwKKzB4OTkwMDAwMDQsCisweGNjYzAwMDY4LAorMHg4MDAwMDAwMiwKKzB4N2M0MDgwMDAsCisweDg0MDAwMjM5LAorMHhjMDE0ODAwMCwKKzB4Y2MwMDAwNDEsCisweGNkNDEzMDRhLAorMHhjMDE0ODAwMCwKKzB4OTkwMDAwMDAsCisweGM4MTAwMDE2LAorMHg4MDAwMDAwMiwKKzB4N2M0MDgwMDAsCisweGMwMTIwMDAxLAorMHg3YzUxNDAwYywKKzB4ODAwMDAwMDEsCisweGQwNTUwMDAwLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4MjkxYzAwMWYsCisweGNjYzAwMDRhLAorMHhjZDAwMDA0YiwKKzB4OTVjMDAwMDMsCisweGMwMWM4MDAwLAorMHhjZGMxMjAxMCwKKzB4ZGQ4MzAwMDAsCisweDA1NWMyMDAwLAorMHhjYzAwMDA2MiwKKzB4ODAwMDAwMDEsCisweGQ4MWY0MTAwLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4Y2NjMDAwNGMsCisweGNkMDAwMDRkLAorMHhkZDgzMDAwMCwKKzB4MDU1Y2EwMDAsCisweDgwMDAwMDAxLAorMHhkODFmNDEwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweGNjYzAwMDRlLAorMHhjZDAwMDA0ZiwKKzB4ZGQ4MzAwMDAsCisweDA1NWNjMDAwLAorMHg4MDAwMDAwMSwKKzB4ZDgxZjQxMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHhjY2MwMDA1MCwKKzB4Y2QwMDAwNTEsCisweGRkODMwMDAwLAorMHgwNTVjZjhlMCwKKzB4ODAwMDAwMDEsCisweGQ4MWY0MTAwLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4Y2NjMDAwNTIsCisweGNkMDAwMDUzLAorMHhkZDgzMDAwMCwKKzB4MDU1Y2Y4ODAsCisweDgwMDAwMDAxLAorMHhkODFmNDEwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweGNjYzAwMDU0LAorMHhjZDAwMDA1NSwKKzB4ZGQ4MzAwMDAsCisweDA1NWNlMDAwLAorMHg4MDAwMDAwMSwKKzB4ZDgxZjQxMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHhjY2MwMDA1NiwKKzB4Y2QwMDAwNTcsCisweGRkODMwMDAwLAorMHgwNTVjZjAwMCwKKzB4ODAwMDAwMDEsCisweGQ4MWY0MTAwLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4Y2NjMDAwNTgsCisweGNkMDAwMDU5LAorMHhkZDgzMDAwMCwKKzB4MDU1Y2YzZmMsCisweDgwMDAwMDAxLAorMHhkODFmNDEwMCwKKzB4ZDA0MzIwMDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGQwNDNhMDAwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhkMDQzYzAwMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ZDA0M2Y4ZTAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGQwNDNmODgwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhkMDQzZTAwMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ZDA0M2YwMDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGQwNDNmM2ZjLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhjODE0MDNlMCwKKzB4Y2M0MzAwMDAsCisweGNjNDMwMDAwLAorMHhjYzQzMDAwMCwKKzB4N2Q0NWMwMDAsCisweGNkYzMwMDAwLAorMHhkMDQzMDAwMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4N2M0MGMwMDAsCisweGM4MTAwM2UyLAorMHhjODE0MDNlNSwKKzB4YzgxODAzZTMsCisweGM4MWMwM2U0LAorMHhjZDgxMjE2OSwKKzB4Y2RjMTIxNmEsCisweGNjYzEyMTZiLAorMHhjYzAxMjE2YywKKzB4MDQyMDAwMDQsCisweDdkYTE4MDAwLAorMHg3ZDk2NDAwMiwKKzB4OTY0MGZjZDksCisweGNkODAwM2UzLAorMHgzMTI4MDAwMywKKzB4YzAyZGYwMDAsCisweDI1MTgwMDA4LAorMHg3ZGFkODAwYiwKKzB4N2RhOTgwMGMsCisweDgwMDAwMDAxLAorMHhjZDgwMDNlMywKKzB4MzA4Y2ZmZmYsCisweGQwNGQwMDAwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhjODE0MDAyMCwKKzB4MTU1ODAwMDIsCisweDk1ODBmZmZmLAorMHhjODE0MDAyMCwKKzB4Y2MwMDAwNmUsCisweGNjNDEyMTgwLAorMHg3YzQwYzAwMCwKKzB4Y2NjMTIxOGQsCisweGNjNDEyMTgxLAorMHgyOGQwMDAxZiwKKzB4MzQ1ODgwMDAsCisweGNkODEyMThjLAorMHg5NTAwZmNiZiwKKzB4Y2M0MTIxODIsCisweGM4MTQwMDIwLAorMHg5OTQwZmZmZiwKKzB4YzgxNDAwMjAsCisweDgwMDAwMDAyLAorMHg3YzQwODAwMCwKKzB4N2M0MGMwMDAsCisweDI4ZDAwMDE4LAorMHgzMTEwMDAwMSwKKzB4YzAxNjAwODAsCisweDk1MDAwMDAzLAorMHhjMDJhMDAwNCwKKzB4N2NkNGMwMGMsCisweGNjYzEyMTdjLAorMHhjYzQxMjE3ZCwKKzB4Y2M0MTIxN2UsCisweDdjNDE4MDAwLAorMHgxZGIwMDAwMywKKzB4MzZhMDIxN2YsCisweDliMDAwMDAzLAorMHg0MTljMDAwNSwKKzB4MDQxYzAwNDAsCisweDk5YzAwMDAwLAorMHgwOWRjMDAwMSwKKzB4Y2MyMTAwMDAsCisweGM4MjQwMDA0LAorMHgyYTZjMDAxZiwKKzB4NDE5YzAwMDUsCisweDlhYzBmZmZhLAorMHhjYzgwMDA2MiwKKzB4ODAwMDAwMDIsCisweDdjNDA4MDAwLAorMHg3YzQwYzAwMCwKKzB4MDRkNDAzZTYsCisweDgwMDAwMDAxLAorMHhjYzU0MDAwMCwKKzB4ODAwMDAzN2MsCisweGNjNDAwM2VhLAorMHhjMDFjODAwMCwKKzB4MDQ0Y2EwMDAsCisweGNkYzEyMDEwLAorMHg3YzQxMDAwMCwKKzB4YzgxNDAwMDksCisweDA0MTgwMDAwLAorMHgwNDFjMDAwOCwKKzB4Y2Q4MDAwNzEsCisweDA5ZGMwMDAxLAorMHgwNTk4MDAwMSwKKzB4Y2QwZDAwMDAsCisweDk5YzBmZmZjLAorMHhjYzgwMDA2MiwKKzB4ODAwMDAzN2MsCisweGNkNDAwMDcxLAorMHhjMDBlMDEwMCwKKzB4Y2MwMDAwNDEsCisweGNjYzEzMDRhLAorMHhjODNjMDA3ZiwKKzB4Y2MwMDAwN2YsCisweDgwMDAwMDAxLAorMHhjYzAwMDA3ZiwKKzB4Y2MwMDAwN2YsCisweDg4MDAwMDAwLAorMHhjYzAwMDA3ZiwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDEwMzMxLAorMHgwMDEwMDAwNCwKKzB4MDAxNzAwMDYsCisweDAwMjEwMDA4LAorMHgwMDI3MDAyOCwKKzB4MDAyODAwMjMsCisweDAwMjkwMDI5LAorMHgwMDJhMDAyNiwKKzB4MDAyYjAwMjksCisweDAwMmQwMDM4LAorMHgwMDJlMDAzZiwKKzB4MDAyZjAwNGEsCisweDAwMzQwMDRjLAorMHgwMDM2MDAzMCwKKzB4MDAzOTAwYWYsCisweDAwM2EwMGNmLAorMHgwMDNiMDBlNCwKKzB4MDAzYzAwZmMsCisweDAwM2QwMTZiLAorMHgwMDNmMDBhZCwKKzB4MDA0MTAzMzYsCisweDAwNDMwMzQ5LAorMHgwMDQ0MDE4ZSwKKzB4MDA0NTAwZmMsCisweDAwNDYwMWFjLAorMHgwMDQ3MDFhYywKKzB4MDA0ODAxZmUsCisweDAwNDkwMjBjLAorMHgwMDRhMDI1NSwKKzB4MDA0YjAyODIsCisweDAwNTIwMjVmLAorMHgwMDUzMDI3MSwKKzB4MDA1NDAyODcsCisweDAwNTcwMjk5LAorMHgwMDYwMDI5ZCwKKzB4MDA2MTAyYWMsCisweDAwNjIwMmI2LAorMHgwMDYzMDJjMCwKKzB4MDA2NDAyY2EsCisweDAwNjUwMmQ0LAorMHgwMDY2MDJkZSwKKzB4MDA2NzAyZTgsCisweDAwNjgwMmYyLAorMHgwMDY5MDJmNiwKKzB4MDA2YTAyZmEsCisweDAwNmIwMmZlLAorMHgwMDZjMDMwMiwKKzB4MDA2ZDAzMDYsCisweDAwNmUwMzBhLAorMHgwMDZmMDMwZSwKKzB4MDA3MDAzMTIsCisweDAwNzIwMzYzLAorMHgwMDc0MDM2OSwKKzB4MDA3OTAzNjcsCisweDAwN2MwMzFjLAorMHgwMDBmMDM3OCwKKzB4MDAwZjAzNzgsCisweDAwMGYwMzc4LAorMHgwMDBmMDM3OCwKKzB4MDAwZjAzNzgsCisweDAwMGYwMzc4LAorMHgwMDBmMDM3OCwKKzB4MDAwZjAzNzgsCisweDAwMGYwMzc4LAorMHgwMDBmMDM3OCwKKzB4MDAwZjAzNzgsCisweDAwMGYwMzc4LAorMHgwMDBmMDM3OCwKKzB4MDAwZjAzNzgsCisweDAwMGYwMzc4LAorMHgwMDBmMDM3OCwKKzB4MDAwZjAzNzgsCisweDAwMGYwMzc4LAorMHgwMDBmMDM3OCwKKzB4MDAwZjAzNzgsCisweDAwMGYwMzc4LAorMHgwMDBmMDM3OCwKKzB4MDAwZjAzNzgsCisweDAwMGYwMzc4LAorMHgwMDBmMDM3OCwKK307CisKK3N0YXRpYyBjb25zdCB1MzIgUlY3MTBfcGZwX21pY3JvY29kZVtdID0geworMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweDdlODI4MDBiLAorMHg4MDAwMDAwMCwKKzB4ZGMwMzAwMDAsCisweGNjODAwMDQwLAorMHhkMDQwMDA0MCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHg3ZTgyODAwYiwKKzB4YzgxODAwMGUsCisweDMxOTgwMDAxLAorMHg3YzQyNDAwMCwKKzB4OTU4MDAyM2EsCisweDdjNDI4MDAwLAorMHhjODFjMDAxYywKKzB4YzAzN2MwMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2NiNDgwMGIsCisweGMwMzYwMDAzLAorMHg5OWMwMDAwMCwKKzB4YzgxYzAwMWMsCisweDdjYjQ4MDBjLAorMHgyNGQ0MDAwMiwKKzB4N2Q2NTQwMDAsCisweGNkNDAwMDQzLAorMHhjZTgwMDA0MywKKzB4Y2QwMDAwNDMsCisweGNjODAwMDQwLAorMHhjZTQwMDA0MCwKKzB4Y2U4MDAwNDAsCisweGNjYzAwMDQwLAorMHhkYzNhMDAwMCwKKzB4OTc4MGZmZGUsCisweGNkMDAwMDQwLAorMHg3YzQwYzAwMCwKKzB4ODAwMDAwMTgsCisweDdjNDEwMDAwLAorMHhkNDAwMDM0MCwKKzB4ZDQwMDBmYzAsCisweGQ0MDAwZmEyLAorMHhjODE4MDAwZSwKKzB4ODAwMDAwMGMsCisweDMxOTgwMDAyLAorMHhkNDAwMDNjMCwKKzB4ZDQwMDBmYzAsCisweGQ0MDAwZmEyLAorMHhjODE4MDAwZSwKKzB4Mjg4YzAwMDgsCisweDMwY2MwMDBmLAorMHgzNDEwMDAwMSwKKzB4N2QwZDAwMDgsCisweDgwMDAwMDBjLAorMHg3ZDkxODAwYiwKKzB4Y2M4MDAwNDAsCisweGQwNDAwMDQwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweDdlODI4MDBiLAorMHhkNDAwMDM0MCwKKzB4ZDQwMDBmYzAsCisweGQ0MDAwZmEyLAorMHhjYzgwMDA0MCwKKzB4ZDA0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweGQ0MDAwM2MwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhkMDQwMDA0MCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHg3ZTgyODAwYiwKKzB4Y2M0MDAzZjksCisweDgwMDAwMjQ5LAorMHhjYzQwMDNmOCwKKzB4YzAzN2ZmZmYsCisweDdjNDE0MDAwLAorMHhjZjQxYTI5ZSwKKzB4YzgyMDAzZjgsCisweGM4MWMwM2Y5LAorMHg2NjIwMDAyMCwKKzB4YzgxODAzZmIsCisweDdkZTFjMDJjLAorMHg3ZDU4YzAwOCwKKzB4N2NkY2MwMjAsCisweDY5MTAwMDIwLAorMHhjMDM2MDAwMywKKzB4Y2MwMDAwNTQsCisweDdjYjQ4MDBjLAorMHg4MDAwMDA2OSwKKzB4Y2M4MDAwNDAsCisweDdjNDE4MDAwLAorMHhjZDgxYTI5ZSwKKzB4Y2M4MDAwNDAsCisweDgwMDAwMDY3LAorMHhjZDgwMDA0MCwKKzB4YzAxOWZmZmYsCisweGNjODAwMDQwLAorMHhjZDgxYTI5ZSwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4Y2NjMWExZmEsCisweGNkMDFhMWY5LAorMHhjZDQxYTI5ZCwKKzB4Y2NjMDAwNDAsCisweGNkMDAwMDQwLAorMHhjZDQwMDA0MCwKKzB4Y2M0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweGNjMDAwMDU0LAorMHhjYzgwMDA0MCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4Y2NjMWExZmEsCisweGNkMDFhMWY5LAorMHhjZDQxYTI5ZCwKKzB4Y2NjMDAwNDAsCisweGNkMDAwMDQwLAorMHhjZDQwMDA0MCwKKzB4ZDA0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweDdjNDBjMDAwLAorMHgzMGQwMDAwMSwKKzB4Y2NjMWEyOWYsCisweDk1MDAwMDAzLAorMHgwNDE0MDAwMSwKKzB4MDQxNDAwMDIsCisweGNkNDAwM2ZiLAorMHhjYzgwMDA0MCwKKzB4ODAwMDAwMDAsCisweGNjYzAwMDQwLAorMHg3YzQwYzAwMCwKKzB4Y2M4MDAwNDAsCisweGNjYzFhMmEyLAorMHg4MDAwMDAwMCwKKzB4Y2NjMDAwNDAsCisweDdjNDBjMDAwLAorMHgyOGQ0MDAxZiwKKzB4Y2M4MDAwNDAsCisweDk1NDAwMDAzLAorMHg3YzQxMDAwMCwKKzB4Y2NjMDAwNTcsCisweDI5MTgwMDFmLAorMHhjY2MwMDA0MCwKKzB4OTU4MDAwMDMsCisweGNkMDAwMDQwLAorMHhjZDAwMDA1OCwKKzB4ODAwMDAyNDksCisweGNjMDAwMDdmLAorMHhjODIwMDAxNywKKzB4YzgzMDAwMjIsCisweDlhMDAwMDA2LAorMHgwZTI4MDAwMSwKKzB4YzgyNDAwMWUsCisweDBhNjQwMDAxLAorMHhkNDAwMTI0MCwKKzB4Y2U0MDAwNDAsCisweGMwMzZjMDAwLAorMHg5NjgwMDAwNywKKzB4Mzc3NDc5MDAsCisweDA0MWMwMDAxLAorMHhjZjQwMDA0MCwKKzB4Y2RjMDAwNDAsCisweGNmMDAwM2ZhLAorMHg3YzAzMDAwMCwKKzB4Y2EwYzAwMTAsCisweDdjNDEwMDAwLAorMHg5NGMwMDAwNCwKKzB4N2M0MTQwMDAsCisweGQ0MjAwMmM0LAorMHhjZGUwMDA0NCwKKzB4OWIwMDAwMGIsCisweDdjNDE4MDAwLAorMHhjYzAwMDA0YiwKKzB4Y2RhMDAwNDksCisweGNkMjAwMDQxLAorMHhjZDYwMDA0MSwKKzB4Y2RhMDAwNDEsCisweDA2MjAwMDAxLAorMHhjZTAwMDA1NiwKKzB4ODAwMDAyNDksCisweGNjMDAwMDdmLAorMHhjODI4MDAyMCwKKzB4YzgyYzAwMjEsCisweGNjMDAwMDYzLAorMHg3ZWVhNDAwMSwKKzB4NjU3NDAwMjAsCisweDdmNTM0MDJjLAorMHgyNjljMDAwMiwKKzB4N2RmNWMwMjAsCisweDY5ZjgwMDIwLAorMHhjZTgwMDA0YiwKKzB4Y2U2MDAwNDksCisweGNkZTAwMDQxLAorMHhjZmEwMDA0MSwKKzB4Y2U2MDAwNDEsCisweDI3MWMwMDAyLAorMHg3ZGY1YzAyMCwKKzB4NjlmODAwMjAsCisweDdkYjI0MDAxLAorMHhjZjAwMDA0YiwKKzB4Y2U2MDAwNDksCisweGNkZTAwMDQxLAorMHhjZmEwMDA0MSwKKzB4ODAwMDAwYmMsCisweGNlNjAwMDQxLAorMHhjODIwMDAxNywKKzB4YzgzMDAwMjIsCisweDlhMDAwMDA2LAorMHgwZTI4MDAwMSwKKzB4YzgyNDAwMWUsCisweDBhNjQwMDAxLAorMHhkNDAwMTI0MCwKKzB4Y2U0MDAwNDAsCisweGNhMGMwMDEwLAorMHg3YzQxMDAwMCwKKzB4OTRjMDAwMGIsCisweGMwMzZjMDAwLAorMHg5NjgwMDAwNywKKzB4Mzc3NDc5MDAsCisweDA0MWMwMDAxLAorMHhjZjQwMDA0MCwKKzB4Y2RjMDAwNDAsCisweGNmMDAwM2ZhLAorMHg3YzAzMDAwMCwKKzB4ODAwMDAwYjUsCisweDdjNDE0MDAwLAorMHhjYzAwMDA0OCwKKzB4ODAwMDAwZWUsCisweDAwMDAwMDAwLAorMHhjODIwMDAxNywKKzB4YzgxYzAwMjMsCisweDBlMjQwMDAyLAorMHg5OWMwMDAxNSwKKzB4N2M0MTgwMDAsCisweDBhMjAwMDAxLAorMHhjZTAwMDA1NiwKKzB4ZDQwMDA0NDAsCisweGNjMDAwMDQwLAorMHhjMDM2YzAwMCwKKzB4Y2ExNDAwMTMsCisweDk2NDAwMDA3LAorMHgzNzc0NzkwMCwKKzB4Y2Y0MDAwNDAsCisweGNjMDAwMDQwLAorMHhjODMwMDNmYSwKKzB4ODAwMDAxMDMsCisweGNmMDAwMDIyLAorMHhjYzAwMDAyMiwKKzB4OTU0MDAxNDYsCisweGNjMDAwMDdmLAorMHhjY2EwMDA0NiwKKzB4ODAwMDAwMDAsCisweGNjMjAwMDQ2LAorMHg4MDAwMDI0OSwKKzB4Y2MwMDAwNjQsCisweGM4MjAwMDE3LAorMHhjODEwMDAxZiwKKzB4OTYwMDAwMDUsCisweDA5MTAwMDAxLAorMHhkNDAwMDQ0MCwKKzB4Y2QwMDAwNDAsCisweGNkMDAwMDIyLAorMHhjYzgwMDA0MCwKKzB4ZDA0MDAwNDAsCisweGM4MGMwMDI1LAorMHg5NGMwZmVlYywKKzB4YzgxMDAwMDgsCisweGNkMDAwMDQwLAorMHhkNDAwMGZjMCwKKzB4ODAwMDAwMDAsCisweGQ0MDAwZmEyLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweGNjYzAwM2ZkLAorMHhjZDAwMDNmYywKKzB4Y2NjMDAwNDIsCisweGNkMDAwMDQyLAorMHgyOTE0MDAxZiwKKzB4MjkxODAwMTAsCisweDMxOTgwMDA3LAorMHgzYjVjMDAwMSwKKzB4N2Q3NjAwMGIsCisweDk5ODAwMDA1LAorMHg3ZDVlNDAwYiwKKzB4Y2MwMDAwNDIsCisweDgwMDAwMjQ5LAorMHhjYzAwMDA0ZCwKKzB4Mjk5ODAwMDEsCisweDI5MmMwMDA4LAorMHg5OTgwMDAzZCwKKzB4MzJlYzAwMDEsCisweDk2MDAwMDA0LAorMHgyOTMwMDAwYywKKzB4ODAwMDAyNDksCisweGNjMDAwMDQyLAorMHgwNDE0MDAxMCwKKzB4Y2Q0MDAwNDIsCisweDMzMzAwMDAxLAorMHgzNDI4MDAwMSwKKzB4ODQwMDAxNWQsCisweGM4MTQwMDAzLAorMHg5YjQwMDAxYiwKKzB4MDQzODAwMGMsCisweDg0MDAwMTVkLAorMHhjODE0MDAwMywKKzB4OWI0MDAwMTcsCisweDA0MzgwMDA4LAorMHg4NDAwMDE1ZCwKKzB4YzgxNDAwMDMsCisweDliNDAwMDEzLAorMHgwNDM4MDAwNCwKKzB4ODQwMDAxNWQsCisweGM4MTQwMDAzLAorMHg5YjQwMDAxNSwKKzB4YzgwYzAzZmQsCisweDlhODAwMDA5LAorMHhjODEwMDNmYywKKzB4OWIwMDAxMDEsCisweGNjMDAwMDRkLAorMHgwNDE0MDAxMCwKKzB4Y2NjMDAwNDIsCisweGNkMDAwMDQyLAorMHg4MDAwMDEzNSwKKzB4Y2Q0MDAwNDIsCisweDk2YzAwMGZhLAorMHhjYzAwMDA0ZCwKKzB4ODAwMDAyNDksCisweGNjMDAwMDRlLAorMHg5YWMwMDAwMywKKzB4Y2MwMDAwNGQsCisweGNjMDAwMDRlLAorMHhkZjgzMDAwMCwKKzB4ODAwMDAwMDAsCisweGQ4MDMwMWZmLAorMHg5YWMwMDBmMCwKKzB4Y2MwMDAwNGQsCisweDgwMDAwMjQ5LAorMHhjYzAwMDA0ZSwKKzB4YzgxODAwMDMsCisweGM4MWMwMDAzLAorMHhjODIwMDAwMywKKzB4N2Q1ZDQwMDMsCisweDdkYTFjMDAzLAorMHg3ZDVkNDAwYywKKzB4MmExMDAwMWYsCisweDI5OWMwMDFmLAorMHg3ZDFkMDAwYiwKKzB4N2QxNzQwMGIsCisweDg4MDAwMDAwLAorMHg3ZTkyODAwYiwKKzB4OTY0MDAwMDQsCisweGNjMDAwMDRlLAorMHg4MDAwMDI0OSwKKzB4Y2MwMDAwNDIsCisweDA0MzgwMDA4LAorMHhjZjgwMDA0MiwKKzB4YzgwODAwMDMsCisweGM4MGMwMDAzLAorMHhjODEwMDAwMywKKzB4YzgxNDAwMDMsCisweGM4MTgwMDAzLAorMHhjODFjMDAwMywKKzB4YzgyNDAwMDMsCisweGM4MjgwMDAzLAorMHgyOWZjMDAxZiwKKzB4MmFiMDAwMWYsCisweDdmZjNjMDBiLAorMHgyOGYwMDAxZiwKKzB4N2ZmM2MwMGIsCisweDI5NzAwMDFmLAorMHg3ZmYzYzAwYiwKKzB4N2Q4ODgwMDEsCisweDdkY2NjMDAxLAorMHg3ZTUxMDAwMSwKKzB4N2U5NTQwMDEsCisweDdjOTA4MDAyLAorMHg3Y2Q0YzAwMiwKKzB4N2NiYzgwMGIsCisweDlhYzAwMDAzLAorMHg3YzhmNDAwYiwKKzB4MzhiNDAwMDEsCisweDliNDAwMGMxLAorMHhjYzAwMDA0ZCwKKzB4OWJjMDAwYmYsCisweGNjMDAwMDRlLAorMHhjODBjMDNmZCwKKzB4YzgxMDAzZmMsCisweGNjYzAwMDQyLAorMHg4MDAwMDE2ZSwKKzB4Y2QwMDAwNDIsCisweGQ0MDAwMzQwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhjYzQwMDA0MCwKKzB4Y2M0MDAwNDAsCisweGNjNDAwMDQwLAorMHg3YzQwYzAwMCwKKzB4Y2NjMDAwNDAsCisweGNjYzAwMDBkLAorMHg4MDAwMDAwMCwKKzB4ZDA0MDAwNDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4NjUxNDAwMjAsCisweDdkNGQ0MDJjLAorMHgyNDU4MDAwMiwKKzB4N2Q1OTgwMjAsCisweDdjNDFjMDAwLAorMHhjZDgwMDA0MiwKKzB4Njk5ODAwMjAsCisweGNkODAwMDQyLAorMHhjZGMwMDA0MiwKKzB4YzAyM2MwMDAsCisweDA1ZTQwMDAyLAorMHg3Y2EwODAwYiwKKzB4MjY2NDAwMTAsCisweDdjYTQ4MDBjLAorMHhjYzgwMDA0MCwKKzB4Y2RjMDAwNDAsCisweGNjYzAwMDQwLAorMHg5NWMwMDAwZSwKKzB4Y2QwMDAwNDAsCisweDA5ZGMwMDAxLAorMHhjODI4MDAwMywKKzB4OTY4MDAwMDgsCisweGNlODAwMDQwLAorMHhjODM0MDAxZCwKKzB4OTc0MDAwMDAsCisweGM4MzQwMDFkLAorMHgyNmE4MDAwOCwKKzB4ODQwMDAyNGMsCisweGNjMmIwMDAwLAorMHg5OWMwZmZmNywKKzB4MDlkYzAwMDEsCisweGRjM2EwMDAwLAorMHg5NzgwMDAwNCwKKzB4N2M0MTgwMDAsCisweDgwMDAwMWEyLAorMHgyNTk4MDAwMiwKKzB4YTAwMDAwMDAsCisweDdkODA4MDAwLAorMHhjODE4MDAxZCwKKzB4N2M0MGMwMDAsCisweDY0ZDAwMDA4LAorMHg5NTgwMDAwMCwKKzB4YzgxODAwMWQsCisweGNjMTMwMDAwLAorMHhjYzgwMDA0MCwKKzB4Y2NjMDAwNDAsCisweDgwMDAwMDAwLAorMHhjYzQwMDA0MCwKKzB4YzgxMDAwMWYsCisweDdjNDBjMDAwLAorMHhjYzgwMDA0MCwKKzB4N2NkMTQwMGMsCisweGNkNDAwMDQwLAorMHgwNTE4MDAwMSwKKzB4ODAwMDAwMDAsCisweGNkODAwMDIyLAorMHg3YzQwYzAwMCwKKzB4NjQ1MDAwMjAsCisweDg0MDAwMjRjLAorMHhjYzAwMDA2MSwKKzB4N2NkMGMwMmMsCisweGM4MjAwMDE3LAorMHhjOGQ2MDAwMCwKKzB4OTk0MDAwMDgsCisweDdjNDM4MDAwLAorMHhkZjgzMDAwMCwKKzB4Y2ZhMDAwNGYsCisweDg0MDAwMjRjLAorMHhjYzAwMDA2MiwKKzB4ODAwMDAwMDAsCisweGQwNDAwMDdmLAorMHg4MDAwMDI0OSwKKzB4Y2MwMDAwNjIsCisweDg0MDAwMjRjLAorMHhjYzAwMDA2MSwKKzB4YzgyMDAwMTcsCisweDdjNDBjMDAwLAorMHhjMDM2ZmYwMCwKKzB4YzgxMDAwMGQsCisweGMwMzAzZmZmLAorMHg3Y2Y1NDAwYiwKKzB4N2Q1MTgwMGIsCisweDdkODE4MDBmLAorMHg5OTgwMDAwOCwKKzB4N2NmMzgwMGIsCisweGRmODMwMDAwLAorMHhjZmEwMDA0ZiwKKzB4ODQwMDAyNGMsCisweGNjMDAwMDYyLAorMHg4MDAwMDAwMCwKKzB4ZDA0MDAwN2YsCisweDgwMDAwMjQ5LAorMHhjYzAwMDA2MiwKKzB4ODQwMDAyNGMsCisweDdjNDBjMDAwLAorMHgyOGRjMDAwOCwKKzB4OTVjMDAwMTksCisweDMwZGMwMDEwLAorMHg3YzQxMDAwMCwKKzB4OTljMDAwMDQsCisweDY0NTQwMDIwLAorMHg4MDAwMDIwOCwKKzB4YzkxZDAwMDAsCisweDdkMTUwMDJjLAorMHhjOTFlMDAwMCwKKzB4N2M0MjAwMDAsCisweDdjNDI0MDAwLAorMHg3YzQxODAwMCwKKzB4N2RlNWMwMGIsCisweDdkZTI4MDA3LAorMHg5YTgwMDAwZSwKKzB4NDFhYzAwMDUsCisweDlhYzAwMDAwLAorMHgwYWVjMDAwMSwKKzB4MzBkYzAwMTAsCisweDk5YzAwMDA0LAorMHgwMDAwMDAwMCwKKzB4ODAwMDAyMGIsCisweGM5MWQwMDAwLAorMHg4MDAwMDIwYiwKKzB4YzkxZTAwMDAsCisweGNjODAwMDQwLAorMHhjY2MwMDA0MCwKKzB4ZDA0MDAwNDAsCisweGM4MGMwMDI1LAorMHg5NGMwZmRlNCwKKzB4YzgxMDAwMDgsCisweGNkMDAwMDQwLAorMHhkNDAwMGZjMCwKKzB4ODAwMDAwMDAsCisweGQ0MDAwZmEyLAorMHhkNDAwMDM0MCwKKzB4ZDQwMDBmYzAsCisweGQ0MDAwZmEyLAorMHhjYzgwMDA0MCwKKzB4ZDA0MDAwNDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4N2U4MjgwMGIsCisweGQ0MDAwM2MwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhkMDQwMDA0MCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHg3ZTgyODAwYiwKKzB4N2M0MGMwMDAsCisweDMwZDAwMDA2LAorMHgwZDEwMDAwNiwKKzB4OTkwMDAwMDcsCisweGM4MTQwMDE1LAorMHg5OTQwMDAwNSwKKzB4Y2MwMDAwNTIsCisweGQ0MDAwMzQwLAorMHhkNDAwMGZjMCwKKzB4ZDQwMDBmYTIsCisweGNjODAwMDQwLAorMHhjY2MwMDA0MCwKKzB4ODAwMDAwMDAsCisweGQwNDAwMDQwLAorMHg3YzQwYzAwMCwKKzB4Y2M0ZDAwMDAsCisweGRjM2EwMDAwLAorMHg5NzgwZmRiZCwKKzB4MDRjYzAwMDEsCisweDgwMDAwMjQyLAorMHhjYzRkMDAwMCwKKzB4ODAwMDAwMDAsCisweGQwNDAwMDdmLAorMHhjYzAwMDA3ZiwKKzB4ODAwMDAwMDAsCisweGNjMDAwMDdmLAorMHhjYzAwMDA3ZiwKKzB4ODgwMDAwMDAsCisweGNjMDAwMDdmLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAzMDIyMiwKKzB4MDAwNDAyMmEsCisweDAwMDUwMDlmLAorMHgwMDAyMDAwMywKKzB4MDAwNjAwM2MsCisweDAwMDcwMDI3LAorMHgwMDA4MDE5MSwKKzB4MDAwOTAwNDQsCisweDAwMGEwMDJkLAorMHgwMDEwMDI0NywKKzB4MDAxNzAwZjAsCisweDAwMjIwMWQ3LAorMHgwMDIzMDFlOCwKKzB4MDAyNjAwNGMsCisweDAwMjcwMDVmLAorMHgwMDIwMDExYSwKKzB4MDAyODAwOTIsCisweDAwMjkwMDRmLAorMHgwMDJhMDA4MywKKzB4MDAyYjAwNjQsCisweDAwMmYwMDhkLAorMHgwMDMyMDBkOCwKKzB4MDAzNDAyMzIsCisweDAwMzYwMDc0LAorMHgwMDM5MDEwYSwKKzB4MDAzYzAxZmMsCisweDAwM2YwMDlmLAorMHgwMDQxMDAwNSwKKzB4MDA0NDAxOTQsCisweDAwNDgwMTlkLAorMHgwMDQ5MDFjNSwKKzB4MDA0YTAxY2YsCisweDAwNTUwMjI1LAorMHgwMDU2MDIyZCwKKzB4MDA2MDAwMGEsCisweDAwNjEwMDJhLAorMHgwMDYyMDAzMCwKKzB4MDA2MzAwMzAsCisweDAwNjQwMDMwLAorMHgwMDY1MDAzMCwKKzB4MDA2NjAwMzAsCisweDAwNjcwMDMwLAorMHgwMDY4MDAzNywKKzB4MDA2OTAwM2YsCisweDAwNmEwMDQ3LAorMHgwMDZiMDA0NywKKzB4MDA2YzAwNDcsCisweDAwNmQwMDQ3LAorMHgwMDZlMDA0NywKKzB4MDA2ZjAwNDcsCisweDAwNzAwMDQ3LAorMHgwMDczMDI0NywKKzB4MDA3YjAyNDAsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCisweDAwMDAwMDA1LAorMHgwMDAwMDAwNSwKKzB4MDAwMDAwMDUsCit9OworCitzdGF0aWMgY29uc3QgdTMyIFJWNzEwX2NwX21pY3JvY29kZVtdID0geworMHhjYzAwMDNlYSwKKzB4MDQwODAwMDMsCisweGNjODAwMDQzLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHg4MDAwMDAwMywKKzB4ZDA0MDAwN2YsCisweDgwMDAwMDAzLAorMHhjYzQwMDA0MSwKKzB4N2M0MGMwMDAsCisweGMwMTYwMDA0LAorMHgzMGQwM2ZmZiwKKzB4N2QxNTAwMGMsCisweGNjMTEwMDAwLAorMHgyOGQ4MDAxZSwKKzB4MzE5ODAwMDEsCisweDI4ZGMwMDFmLAorMHhjODIwMDAwNCwKKzB4OTVjMDAwMDYsCisweDdjNDI0MDAwLAorMHhjYzAwMDA2MiwKKzB4N2U1NjgwMGMsCisweGNjMjkwMDAwLAorMHhjODI0MDAwNCwKKzB4N2UyNjAwMGIsCisweDk1ODAwMDA2LAorMHg3YzQyYzAwMCwKKzB4Y2MwMDAwNjIsCisweDdlZDcwMDBjLAorMHhjYzMxMDAwMCwKKzB4YzgyYzAwMDQsCisweDdlMmUwMDBjLAorMHhjYzAwMDA2MiwKKzB4MzExMDNmZmYsCisweDgwMDAwMDAzLAorMHhjZTExMDAwMCwKKzB4N2M0MGMwMDAsCisweDgwMDAwMDAzLAorMHhjYzQwMDA0MCwKKzB4ODAwMDAwMDMsCisweGNjNDEyMjU3LAorMHg3YzQxODAwMCwKKzB4Y2M0MDAwNDUsCisweGNjNDAwMDQ4LAorMHhjYzQxMjI1YywKKzB4Y2M0MWExZmMsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGNjNDAwMDQ1LAorMHhjYzQwMDA0OCwKKzB4N2M0MGMwMDAsCisweGNjNDEyMjVjLAorMHhjYzQxYTFmYywKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4Y2MwMDAwNDUsCisweGNjMDAwMDQ4LAorMHhjYzQxMjI1YywKKzB4Y2M0MWExZmMsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweDA0MGNhMWZkLAorMHhjMDEyMDAwMSwKKzB4Y2MwMDAwNDUsCisweGNjMDAwMDQ4LAorMHg3Y2QwYzAwYywKKzB4Y2M0MTIyNWMsCisweGNjNDFhMWZjLAorMHhkMDRkMDAwMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ODAwMDAwMDMsCisweGNjNDEyMjVkLAorMHg3YzQwODAwMCwKKzB4N2M0MGMwMDAsCisweGMwMmEwMDAyLAorMHg3YzQxMDAwMCwKKzB4N2QyOTAwMGMsCisweDMwOTQwMDAxLAorMHgzMDk4MDAwNiwKKzB4MzA5YzAzMDAsCisweDI5ZGMwMDA4LAorMHg3YzQyMDAwMCwKKzB4N2M0MjQwMDAsCisweDk1NDAwMDBmLAorMHhjMDJlMDAwNCwKKzB4MDVmMDIyNTgsCisweDdmMmYwMDBjLAorMHhjYzMxMDAwMCwKKzB4YzgyODAwMDQsCisweGNjYzEyMTY5LAorMHhjZDAxMjE2YSwKKzB4Y2U4MTIxNmIsCisweDBkYjQwMDAyLAorMHhjYzAxMjE2YywKKzB4OTc0MDAwMGUsCisweDBkYjQwMDAwLAorMHg4MDAwMDA3ZCwKKzB4YzgzNDAwMGEsCisweDBkYjQwMDAyLAorMHg5NzQwMDAwOSwKKzB4MGRiNDAwMDAsCisweGMwMmUwMDA0LAorMHgwNWYwMjI1OCwKKzB4N2YyZjAwMGMsCisweGNjMzEwMDAwLAorMHhjODI4MDAwNCwKKzB4ODAwMDAwN2QsCisweGM4MzQwMDBhLAorMHg5NzQwMDAwNCwKKzB4N2UwMjgwMDAsCisweDgwMDAwMDdkLAorMHhjODM0MDAwYSwKKzB4MGRiNDAwMDQsCisweDk3NDBmZjhjLAorMHgwMDAwMDAwMCwKKzB4Y2UwMTIxNmQsCisweGNlNDEyMTZlLAorMHhjODI4MDAwMywKKzB4YzgzNDAwMGEsCisweDliNDAwMDA0LAorMHgwNDNjMDAwNSwKKzB4ODQwMDAyNmQsCisweGNjMDAwMDYyLAorMHgwZGY0MDAwMCwKKzB4OTc0MDAwMGIsCisweGM4MmMwM2U2LAorMHhjZTgxYTJiNywKKzB4YzAzMDAwMDYsCisweDdlZjM0MDI4LAorMHhjMDMwMDAyMCwKKzB4N2Y2YjgwMjAsCisweDdmYjNjMDI5LAorMHhjZjgxYTJjNCwKKzB4ODAwMDAwMDMsCisweGNmYzFhMmQxLAorMHgwZGY0MDAwMSwKKzB4OTc0MDAwMGIsCisweGM4MmMwM2U3LAorMHhjZTgxYTJiYiwKKzB4YzAzMDAwMDYsCisweDdlZjM0MDI4LAorMHhjMDMwMDAyMCwKKzB4N2Y2YjgwMjAsCisweDdmYjNjMDI5LAorMHhjZjgxYTJjNSwKKzB4ODAwMDAwMDMsCisweGNmYzFhMmQyLAorMHgwZGY0MDAwMiwKKzB4OTc0MDAwMGIsCisweGM4MmMwM2U4LAorMHhjZTgxYTJiZiwKKzB4YzAzMDAwMDYsCisweDdlZjM0MDI4LAorMHhjMDMwMDAyMCwKKzB4N2Y2YjgwMjAsCisweDdmYjNjMDI5LAorMHhjZjgxYTJjNiwKKzB4ODAwMDAwMDMsCisweGNmYzFhMmQzLAorMHhjODJjMDNlOSwKKzB4Y2U4MWEyYzMsCisweGMwMzAwMDA2LAorMHg3ZWYzNDAyOCwKKzB4YzAzMDAwMjAsCisweDdmNmI4MDIwLAorMHg3ZmIzYzAyOSwKKzB4Y2Y4MWEyYzcsCisweDgwMDAwMDAzLAorMHhjZmMxYTJkNCwKKzB4ODAwMDAwMDMsCisweGNjNDAwMDQyLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDI5MTQwMDFkLAorMHgzMTU0MDAwMSwKKzB4OTk0MDAwMGMsCisweDMxMTgxMDAwLAorMHhjODFjMDAxMSwKKzB4OTVjMDAwMDAsCisweGM4MWMwMDExLAorMHhjY2MxMjEwMCwKKzB4Y2QwMTIxMDEsCisweGNjYzEyMTAyLAorMHhjZDAxMjEwMywKKzB4MDQxODAwMDQsCisweDgwMDAwMzdlLAorMHhjZDgxYTJhNCwKKzB4YzAyYTAwMDQsCisweDk1ODAwMDA4LAorMHgzNmE4MjFhMywKKzB4Y2MyOTAwMDAsCisweGM4MjgwMDA0LAorMHhjODFjMDAxMSwKKzB4MGRlNDAwNDAsCisweDk2NDBmZmZmLAorMHhjODFjMDAxMSwKKzB4Y2NjMTIxNzAsCisweGNkMDEyMTcxLAorMHhjODIwMDAxMiwKKzB4OTYwMDAwMDAsCisweGM4MjAwMDEyLAorMHg4MDAwMDM3ZSwKKzB4Y2MwMDAwNjQsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4Y2MwMDAwNDUsCisweGNjMDAwMDQ4LAorMHg0MGQ0MDAwMywKKzB4Y2Q0MTIyNWMsCisweGNkMDFhMWZjLAorMHhjMDFhMDAwMSwKKzB4MDQxY2ExZmQsCisweDdkZDljMDBjLAorMHg3YzQyMDAwMCwKKzB4MDhjYzAwMDEsCisweDA2MjQwMDAxLAorMHgwNjI4MDAwMiwKKzB4Y2UxZDAwMDAsCisweGNlNWQwMDAwLAorMHg5OGMwZmZmYSwKKzB4Y2U5ZDAwMDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweDdjNDBjMDAwLAorMHgzMGQwMDAwMSwKKzB4MjhjYzAwMDEsCisweDdjNDE0MDAwLAorMHg5NTAwMDAwNiwKKzB4N2M0MTgwMDAsCisweGNkNDEyMTZkLAorMHhjZDgxMjE2ZSwKKzB4ODAwMDAwZjQsCisweGM4MWMwMDAzLAorMHhjMDIyMDAwNCwKKzB4N2UxNjAwMGMsCisweGNjMjEwMDAwLAorMHhjODFjMDAwNCwKKzB4N2M0MjQwMDAsCisweDk4YzAwMDA0LAorMHg3YzQyODAwMCwKKzB4ODAwMDAwMDMsCisweGNkZTUwMDAwLAorMHhjZTQxMjE2OSwKKzB4Y2U4MTIxNmEsCisweGNkYzEyMTZiLAorMHg4MDAwMDAwMywKKzB4Y2MwMTIxNmMsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHg3YzQxYzAwMCwKKzB4MjhhNDAwMDgsCisweDMyNjQwMGZmLAorMHgwZTY4MDAzYywKKzB4OTY4MDAwMGEsCisweDdjMDIwMDAwLAorMHg3YzQyMDAwMCwKKzB4MWUzMDAwMDMsCisweGNjMDAwMDZhLAorMHg5YjAwMDAwMywKKzB4NDIyMDAwMDUsCisweDA0MjAwMDQwLAorMHg4MDAwMDExMSwKKzB4N2MwMjQwMDAsCisweDdlMDI0MDAwLAorMHg5YTQwMDAwMCwKKzB4MGE2NDAwMDEsCisweDMwZWMwMDEwLAorMHg5YWMwMDAwYSwKKzB4Y2MwMDAwNjIsCisweGMwMmEwMDA0LAorMHhjODJjMDAyMSwKKzB4N2U5MjgwMGMsCisweGNjMDAwMDQxLAorMHhjYzI5MDAwMCwKKzB4Y2VjMDAwMjEsCisweDgwMDAwMTIxLAorMHhjODMwMDAwNCwKKzB4Y2QwMTIxNmQsCisweGNkNDEyMTZlLAorMHhjODMwMDAwMywKKzB4N2YxZjAwMGIsCisweDMwZjQwMDA3LAorMHgyNzc4MDAwMSwKKzB4OTc0MDAwMmEsCisweDA3YjgwMTI2LAorMHg5ZjgwMDAwMCwKKzB4MDAwMDAwMDAsCisweDgwMDAwMTM2LAorMHg3ZjFiODAwNCwKKzB4ODAwMDAxM2EsCisweDdmMWI4MDA1LAorMHg4MDAwMDEzZSwKKzB4N2YxYjgwMDIsCisweDgwMDAwMTQyLAorMHg3ZjFiODAwMywKKzB4ODAwMDAxNDYsCisweDdmMWI4MDA3LAorMHg4MDAwMDE0YSwKKzB4N2YxYjgwMDYsCisweDgwMDAwMTRmLAorMHgyOGE0MDAwOCwKKzB4OWI4MDAwMTksCisweDI4YTQwMDA4LAorMHg4MDAwMDE1ZiwKKzB4MzI2NDAwZmYsCisweDliODAwMDE1LAorMHgyOGE0MDAwOCwKKzB4ODAwMDAxNWYsCisweDMyNjQwMGZmLAorMHg5YjgwMDAxMSwKKzB4MjhhNDAwMDgsCisweDgwMDAwMTVmLAorMHgzMjY0MDBmZiwKKzB4OWI4MDAwMGQsCisweDI4YTQwMDA4LAorMHg4MDAwMDE1ZiwKKzB4MzI2NDAwZmYsCisweDliODAwMDA5LAorMHgyOGE0MDAwOCwKKzB4ODAwMDAxNWYsCisweDMyNjQwMGZmLAorMHg5YjgwMDAwNSwKKzB4MjhhNDAwMDgsCisweDgwMDAwMTVmLAorMHgzMjY0MDBmZiwKKzB4MjhhNDAwMDgsCisweDMyNjQwMGZmLAorMHgwZTY4MDAzYywKKzB4OWE4MGZlYjIsCisweDI4ZWMwMDA4LAorMHg3YzQzNDAwMCwKKzB4N2M0MzgwMDAsCisweDdjNDNjMDAwLAorMHg5NmMwMDAwNywKKzB4Y2MwMDAwNjIsCisweGNmNDEyMTY5LAorMHhjZjgxMjE2YSwKKzB4Y2ZjMTIxNmIsCisweDgwMDAwMDAzLAorMHhjYzAxMjE2YywKKzB4ODAwMDAwMDMsCisweGNmZjUwMDAwLAorMHhjYzAwMDA2YiwKKzB4ODQwMDAzODEsCisweDBlNjgwMDNjLAorMHg5YTgwMDAwNCwKKzB4YzgyODAwMTUsCisweDgwMDAwMDAzLAorMHhkMDQwMDA3ZiwKKzB4OTY4MGZmYWIsCisweDdlMDI0MDAwLAorMHg4NDAwMDIzYiwKKzB4YzAwZTAwMDIsCisweGNjMDAwMDQxLAorMHg4MDAwMDIzOSwKKzB4Y2NjMTMwNGEsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4YzAxZTAwMDEsCisweDI5MjQwMDEyLAorMHhjMDIyMDAwMiwKKzB4OTY0MDAwMDUsCisweGMwMjYwMDA0LAorMHhjMDI3ZmZmYiwKKzB4N2QyNTAwMGIsCisweGMwMjYwMDAwLAorMHg3ZGQyODAwYiwKKzB4N2UxMmMwMGIsCisweDdkMjUwMDBjLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweGNjYzEyMTY5LAorMHg5YTgwMDAwYSwKKzB4Y2QwMTIxNmEsCisweGNkNDEyMTZiLAorMHg5NmMwZmU4MywKKzB4Y2Q4MTIxNmMsCisweGM4MzAwMDE4LAorMHg5NzAwMDAwMCwKKzB4YzgzMDAwMTgsCisweDgwMDAwMDAzLAorMHhjYzAwMDAxOCwKKzB4ODQwMDAzODEsCisweGNjMDAwMDdmLAorMHhjODE0MDAxMywKKzB4YzgxODAwMTQsCisweGNkNDEyMTZiLAorMHg5NmMwZmU3NywKKzB4Y2Q4MTIxNmMsCisweDgwMDAwMTgzLAorMHhjODMwMDAxOCwKKzB4YzgwYzAwMDgsCisweDk4YzAwMDAwLAorMHhjODBjMDAwOCwKKzB4N2M0MTAwMDAsCisweDk1MDAwMDAyLAorMHgwMDAwMDAwMCwKKzB4N2M0MTQwMDAsCisweGM4MjAwMDA5LAorMHhjYzQwMDA0MywKKzB4Y2UwMWExZjQsCisweGNjNDAwMDQ0LAorMHhjMDBlODAwMCwKKzB4N2M0MjQwMDAsCisweDdjNDI4MDAwLAorMHgyYWFjMDAxZiwKKzB4OTZjMGZlNjQsCisweGMwMzVmMDAwLAorMHhjZTQwMDNlMiwKKzB4MzI3ODAwMDMsCisweDI2N2MwMDA4LAorMHg3ZmY3YzAwYiwKKzB4N2ZmYmMwMGMsCisweDJhNzgwMDE4LAorMHhjZmMwMDNlMywKKzB4Y2Y4MDAzZTQsCisweDI2YjAwMDAyLAorMHg3ZjNmMDAwMCwKKzB4Y2YwMDAzZTUsCisweDgwMDAwMzFmLAorMHg3YzgwYzAwMCwKKzB4N2M0MGMwMDAsCisweDI4ZDAwMDA4LAorMHgzMTEwMDAwZiwKKzB4OTUwMDAwMGYsCisweDI1MjgwMDAxLAorMHgwNmE4MDFiNCwKKzB4OWU4MDAwMDAsCisweDAwMDAwMDAwLAorMHg4MDAwMDFkNSwKKzB4YzAxMjA4MDAsCisweDgwMDAwMWUzLAorMHhjODE0MDAwZiwKKzB4ODAwMDAxZWEsCisweGM4MTQwMDEwLAorMHg4MDAwMDFmMSwKKzB4Y2NjMWEyYTQsCisweDgwMDAwMWZhLAorMHhjODE0MDAxMSwKKzB4MzBkMDAwM2YsCisweDBkMjgwMDE1LAorMHg5YTgwMDAxMiwKKzB4MGQyODAwMWUsCisweDlhODAwMDFlLAorMHgwZDI4MDAyMCwKKzB4OWE4MDAwMjMsCisweDBkMjQwMDBmLAorMHgwZDI4MDAxMCwKKzB4N2U2YTgwMGMsCisweDlhODAwMDI2LAorMHgwZDIwMDAwNCwKKzB4MGQyNDAwMTQsCisweDBkMjgwMDI4LAorMHg3ZTYyNDAwYywKKzB4N2VhNjgwMGMsCisweDlhODAwMDJhLAorMHhjODE0MDAxMSwKKzB4ODAwMDAwMDMsCisweGNjYzFhMmE0LAorMHhjMDEyMDgwMCwKKzB4N2M0MTQwMDAsCisweDdkMGNjMDBjLAorMHhjMDEyMDAwOCwKKzB4Mjk1ODAwMDMsCisweDI5NWMwMDBjLAorMHg3YzQyMDAwMCwKKzB4N2RkMWMwMGIsCisweDI2MjAwMDE0LAorMHg3ZTFlNDAwYywKKzB4N2U0ZTgwMGMsCisweGNlODFhMmE0LAorMHg4MDAwMDAwMywKKzB4Y2Q4MWExZmUsCisweGM4MTQwMDBmLAorMHgwNDEwMjEwZSwKKzB4OTU0MDAwMDAsCisweGM4MTQwMDBmLAorMHhkMDUxMDAwMCwKKzB4ODAwMDAwMDMsCisweGNjYzFhMmE0LAorMHhjODE0MDAxMCwKKzB4MDQxMDIxMDgsCisweDk1NDAwMDAwLAorMHhjODE0MDAxMCwKKzB4ZDA1MTAwMDAsCisweDgwMDAwMDAzLAorMHhjY2MxYTJhNCwKKzB4Y2NjMWEyYTQsCisweDA0MTAwMDAxLAorMHhjZDAwMDAxOSwKKzB4ODQwMDAzODEsCisweGNjMDAwMDdmLAorMHhjODEwMDAxOSwKKzB4OTkwMDAwMDAsCisweGM4MTAwMDE5LAorMHg4MDAwMDAwNCwKKzB4N2M0MDgwMDAsCisweDA0MTAyMTAwLAorMHg5NTQwMDAwMCwKKzB4YzgxNDAwMTEsCisweGQwNTEwMDAwLAorMHg4MDAwMDM3ZSwKKzB4Y2NjMWEyYTQsCisweDdjNDBjMDAwLAorMHhjYzQwMDAwZCwKKzB4OTRjMGZlMDEsCisweGNjNDAwMDBlLAorMHg3YzQxMDAwMCwKKzB4OTUwMDAwMDUsCisweDA4Y2MwMDAxLAorMHhjODE0MDAwNSwKKzB4OTk0MDAwMTQsCisweDAwMDAwMDAwLAorMHg5OGMwZmZmYiwKKzB4N2M0MTAwMDAsCisweDgwMDAwMDA0LAorMHg3ZDAwODAwMCwKKzB4YzgxNDAwMDUsCisweDdjNDBjMDAwLAorMHg5OTQwMDAwYywKKzB4YzgxODAwMGMsCisweDdjNDEwMDAwLAorMHg5NTgwZmRmMCwKKzB4YzgyMDAwMGUsCisweGM4MWMwMDBkLAorMHg2NjIwMDAyMCwKKzB4N2UxZTAwMmMsCisweDI1MjQwMDAyLAorMHg3ZTYyNDAyMCwKKzB4ODAwMDAwMDMsCisweGNjZTYwMDAwLAorMHg3YzQxMDAwMCwKKzB4Y2MwMDAwNmMsCisweGNjMDAwMDZkLAorMHhjODE4MDAxZiwKKzB4YzgxYzAwMWUsCisweDY1OTgwMDIwLAorMHg3ZGQ5YzAyYywKKzB4N2NkNGMwMGMsCisweGNjZGUwMDAwLAorMHg0NWRjMDAwNCwKKzB4YzgyODAwMTcsCisweDk2ODAwMDBmLAorMHhjMDBlMDAwMSwKKzB4Mjg2ODAwMDgsCisweDJhYWMwMDE2LAorMHgzMmE4MDBmZiwKKzB4MGViMDAwNDksCisweDdmMmYwMDBiLAorMHg5NzAwMDAwNiwKKzB4MDAwMDAwMDAsCisweGM4MTQwMDA1LAorMHg3YzQwYzAwMCwKKzB4ODAwMDAyMjMsCisweDdjNDEwMDAwLAorMHg4MDAwMDIyNiwKKzB4ZDA0MDAwN2YsCisweDg0MDAwMjNiLAorMHhjYzAwMDA0MSwKKzB4Y2NjMTMwNGEsCisweDk0MDAwMDAwLAorMHhjODNjMDAxYSwKKzB4MDQzYzAwMDUsCisweGNmYzFhMmE0LAorMHhjMDM2MWY5MCwKKzB4YzAzODdmZmYsCisweDdjMDNjMDEwLAorMHg3ZjdiNDAwYywKKzB4Y2Y0MTIxN2MsCisweGNmYzEyMTdkLAorMHhjYzAxMjE3ZSwKKzB4YzAzYTAwMDQsCisweDA0MzQyMTdmLAorMHg3ZjdiNDAwYywKKzB4Y2MzNTAwMDAsCisweGM4M2MwMDA0LAorMHgyYmZjMDAxZiwKKzB4MDQzODAwMjAsCisweDk3YzAwMDA1LAorMHhjYzAwMDA2MiwKKzB4OWI4MDAwMDAsCisweDBiYjgwMDAxLAorMHg4MDAwMDI0NywKKzB4Y2MwMDAwNzEsCisweGNjMDFhMWY0LAorMHgwNDM4MDAxNiwKKzB4YzAzNjAwMDIsCisweGNmODFhMmE0LAorMHg4ODAwMDAwMCwKKzB4Y2Y0MTIwMTAsCisweDdjNDBjMDAwLAorMHgyOGQwMDAxYywKKzB4OTUwMDAwMDUsCisweDA0ZDQwMDAxLAorMHhjZDQwMDA2NSwKKzB4ODAwMDAwMDMsCisweGNkNDAwMDY4LAorMHgwOTU0MDAwMiwKKzB4ODAwMDAwMDMsCisweGNkNDAwMDY2LAorMHg4NDAwMDI2YywKKzB4YzgxODAzZWEsCisweDdjNDBjMDAwLAorMHg5OTgwZmQ5ZiwKKzB4YzgxNDAwMTYsCisweDA4ZDAwMDAxLAorMHg5OTQwMDAyYiwKKzB4Y2QwMDAwNjgsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweDA0M2MwMDA1LAorMHhjZmMxYTJhNCwKKzB4Y2MwMWExZjQsCisweDg0MDAwMzgxLAorMHhjYzAwMDA0NiwKKzB4ODgwMDAwMDAsCisweGNjMDAwMDdmLAorMHg4NDAwMDI3ZSwKKzB4YzgxODAzZWEsCisweDdjNDBjMDAwLAorMHg5OTgwZmQ4ZCwKKzB4YzgxNDAwMTYsCisweDA4ZDAwMDAxLAorMHg5OTQwMDAxOSwKKzB4Y2QwMDAwNjgsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweDA0M2MwMDIyLAorMHhjZmMxYTJhNCwKKzB4ODQwMDAzODEsCisweGNjMDAwMDQ3LAorMHg4ODAwMDAwMCwKKzB4Y2MwMDAwN2YsCisweGM4MTAwMDE2LAorMHg5OTAwMDAwZCwKKzB4Y2M0MDAwNjcsCisweDgwMDAwMDA0LAorMHg3YzQwODAwMCwKKzB4YzgxODAzZWEsCisweDk5ODBmZDc5LAorMHg3YzQwYzAwMCwKKzB4OTRjMDAwMDMsCisweGM4MTAwMDE2LAorMHg5OTAwMDAwNCwKKzB4Y2NjMDAwNjgsCisweDgwMDAwMDA0LAorMHg3YzQwODAwMCwKKzB4ODQwMDAyM2IsCisweGMwMTQ4MDAwLAorMHhjYzAwMDA0MSwKKzB4Y2Q0MTMwNGEsCisweGMwMTQ4MDAwLAorMHg5OTAwMDAwMCwKKzB4YzgxMDAwMTYsCisweDgwMDAwMDA0LAorMHg3YzQwODAwMCwKKzB4YzAxMjAwMDEsCisweDdjNTE0MDBjLAorMHg4MDAwMDAwMywKKzB4ZDA1NTAwMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHgyOTFjMDAxZiwKKzB4Y2NjMDAwNGEsCisweGNkMDAwMDRiLAorMHg5NWMwMDAwMywKKzB4YzAxYzgwMDAsCisweGNkYzEyMDEwLAorMHhkZDgzMDAwMCwKKzB4MDU1YzIwMDAsCisweGNjMDAwMDYyLAorMHg4MDAwMDAwMywKKzB4ZDgxZjQxMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHhjY2MwMDA0YywKKzB4Y2QwMDAwNGQsCisweGRkODMwMDAwLAorMHgwNTVjYTAwMCwKKzB4ODAwMDAwMDMsCisweGQ4MWY0MTAwLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4Y2NjMDAwNGUsCisweGNkMDAwMDRmLAorMHhkZDgzMDAwMCwKKzB4MDU1Y2MwMDAsCisweDgwMDAwMDAzLAorMHhkODFmNDEwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweGNjYzAwMDUwLAorMHhjZDAwMDA1MSwKKzB4ZGQ4MzAwMDAsCisweDA1NWNmOGUwLAorMHg4MDAwMDAwMywKKzB4ZDgxZjQxMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHhjY2MwMDA1MiwKKzB4Y2QwMDAwNTMsCisweGRkODMwMDAwLAorMHgwNTVjZjg4MCwKKzB4ODAwMDAwMDMsCisweGQ4MWY0MTAwLAorMHg3YzQwYzAwMCwKKzB4N2M0MTAwMDAsCisweDdjNDE0MDAwLAorMHg3YzQxODAwMCwKKzB4Y2NjMDAwNTQsCisweGNkMDAwMDU1LAorMHhkZDgzMDAwMCwKKzB4MDU1Y2UwMDAsCisweDgwMDAwMDAzLAorMHhkODFmNDEwMCwKKzB4N2M0MGMwMDAsCisweDdjNDEwMDAwLAorMHg3YzQxNDAwMCwKKzB4N2M0MTgwMDAsCisweGNjYzAwMDU2LAorMHhjZDAwMDA1NywKKzB4ZGQ4MzAwMDAsCisweDA1NWNmMDAwLAorMHg4MDAwMDAwMywKKzB4ZDgxZjQxMDAsCisweDdjNDBjMDAwLAorMHg3YzQxMDAwMCwKKzB4N2M0MTQwMDAsCisweDdjNDE4MDAwLAorMHhjY2MwMDA1OCwKKzB4Y2QwMDAwNTksCisweGRkODMwMDAwLAorMHgwNTVjZjNmYywKKzB4ODAwMDAwMDMsCisweGQ4MWY0MTAwLAorMHhkMDQzMjAwMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ZDA0M2EwMDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGQwNDNjMDAwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhkMDQzZjhlMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ZDA0M2Y4ODAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGQwNDNlMDAwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHhkMDQzZjAwMCwKKzB4N2M0MDgwMDAsCisweGEwMDAwMDAwLAorMHhjYzgwMDA2MiwKKzB4ZDA0M2YzZmMsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGM4MTQwM2UwLAorMHhjYzQzMDAwMCwKKzB4Y2M0MzAwMDAsCisweGNjNDMwMDAwLAorMHg3ZDQ1YzAwMCwKKzB4Y2RjMzAwMDAsCisweGQwNDMwMDAwLAorMHg3YzQwODAwMCwKKzB4YTAwMDAwMDAsCisweGNjODAwMDYyLAorMHg3YzQwYzAwMCwKKzB4YzgxMDAzZTIsCisweGM4MTQwM2U1LAorMHhjODE4MDNlMywKKzB4YzgxYzAzZTQsCisweGNkODEyMTY5LAorMHhjZGMxMjE2YSwKKzB4Y2NjMTIxNmIsCisweGNjMDEyMTZjLAorMHgwNDIwMDAwNCwKKzB4N2RhMTgwMDAsCisweDdkOTY0MDAyLAorMHg5NjQwZmNkOSwKKzB4Y2Q4MDAzZTMsCisweDMxMjgwMDAzLAorMHhjMDJkZjAwMCwKKzB4MjUxODAwMDgsCisweDdkYWQ4MDBiLAorMHg3ZGE5ODAwYywKKzB4ODAwMDAwMDMsCisweGNkODAwM2UzLAorMHgzMDhjZmZmZiwKKzB4ZDA0ZDAwMDAsCisweDdjNDA4MDAwLAorMHhhMDAwMDAwMCwKKzB4Y2M4MDAwNjIsCisweGM4MTQwMDIwLAorMHgxNTU4MDAwMiwKKzB4OTU4MGZmZmYsCisweGM4MTQwMDIwLAorMHhjYzAwMDA2ZSwKKzB4Y2M0MTIxODAsCisweDdjNDBjMDAwLAorMHhjY2MxMjE4ZCwKKzB4Y2M0MTIxODEsCisweDI4ZDAwMDFmLAorMHgzNDU4ODAwMCwKKzB4Y2Q4MTIxOGMsCisweDk1MDBmY2JmLAorMHhjYzQxMjE4MiwKKzB4YzgxNDAwMjAsCisweDk5NDBmZmZmLAorMHhjODE0MDAyMCwKKzB4ODAwMDAwMDQsCisweDdjNDA4MDAwLAorMHg3YzQwYzAwMCwKKzB4MjhkMDAwMTgsCisweDMxMTAwMDAxLAorMHhjMDE2MDA4MCwKKzB4OTUwMDAwMDMsCisweGMwMmEwMDA0LAorMHg3Y2Q0YzAwYywKKzB4Y2NjMTIxN2MsCisweGNjNDEyMTdkLAorMHhjYzQxMjE3ZSwKKzB4N2M0MTgwMDAsCisweDFkYjAwMDAzLAorMHgzNmEwMjE3ZiwKKzB4OWIwMDAwMDMsCisweDQxOWMwMDA1LAorMHgwNDFjMDA0MCwKKzB4OTljMDAwMDAsCisweDA5ZGMwMDAxLAorMHhjYzIxMDAwMCwKKzB4YzgyNDAwMDQsCisweDJhNmMwMDFmLAorMHg0MTljMDAwNSwKKzB4OWFjMGZmZmEsCisweGNjODAwMDYyLAorMHg4MDAwMDAwNCwKKzB4N2M0MDgwMDAsCisweDdjNDBjMDAwLAorMHgwNGQ0MDNlNiwKKzB4ODAwMDAwMDMsCisweGNjNTQwMDAwLAorMHg4MDAwMDM3ZSwKKzB4Y2M0MDAzZWEsCisweGMwMWM4MDAwLAorMHgwNDRjYTAwMCwKKzB4Y2RjMTIwMTAsCisweDdjNDEwMDAwLAorMHhjODE0MDAwOSwKKzB4MDQxODAwMDAsCisweDA0MWMwMDA4LAorMHhjZDgwMDA3MSwKKzB4MDlkYzAwMDEsCisweDA1OTgwMDAxLAorMHhjZDBkMDAwMCwKKzB4OTljMGZmZmMsCisweGNjODAwMDYyLAorMHg4MDAwMDM3ZSwKKzB4Y2Q0MDAwNzEsCisweGMwMGUwMTAwLAorMHhjYzAwMDA0MSwKKzB4Y2NjMTMwNGEsCisweGM4M2MwMDdmLAorMHhjYzAwMDA3ZiwKKzB4ODAwMDAwMDMsCisweGNjMDAwMDdmLAorMHhjYzAwMDA3ZiwKKzB4ODgwMDAwMDAsCisweGNjMDAwMDdmLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDAwMDAwLAorMHgwMDAwMDAwMCwKKzB4MDAwMDAwMDAsCisweDAwMDEwMzMzLAorMHgwMDEwMDAwNiwKKzB4MDAxNzAwMDgsCisweDAwMjEwMDBhLAorMHgwMDI3MDAyYSwKKzB4MDAyODAwMjUsCisweDAwMjkwMDJiLAorMHgwMDJhMDAyOCwKKzB4MDAyYjAwMmIsCisweDAwMmQwMDNhLAorMHgwMDJlMDA0MSwKKzB4MDAyZjAwNGMsCisweDAwMzQwMDRlLAorMHgwMDM2MDAzMiwKKzB4MDAzOTAwYjEsCisweDAwM2EwMGQxLAorMHgwMDNiMDBlNiwKKzB4MDAzYzAwZmUsCisweDAwM2QwMTZkLAorMHgwMDNmMDBhZiwKKzB4MDA0MTAzMzgsCisweDAwNDMwMzRiLAorMHgwMDQ0MDE5MCwKKzB4MDA0NTAwZmUsCisweDAwNDYwMWFlLAorMHgwMDQ3MDFhZSwKKzB4MDA0ODAyMDAsCisweDAwNDkwMjBlLAorMHgwMDRhMDI1NywKKzB4MDA0YjAyODQsCisweDAwNTIwMjYxLAorMHgwMDUzMDI3MywKKzB4MDA1NDAyODksCisweDAwNTcwMjliLAorMHgwMDYwMDI5ZiwKKzB4MDA2MTAyYWUsCisweDAwNjIwMmI4LAorMHgwMDYzMDJjMiwKKzB4MDA2NDAyY2MsCisweDAwNjUwMmQ2LAorMHgwMDY2MDJlMCwKKzB4MDA2NzAyZWEsCisweDAwNjgwMmY0LAorMHgwMDY5MDJmOCwKKzB4MDA2YTAyZmMsCisweDAwNmIwMzAwLAorMHgwMDZjMDMwNCwKKzB4MDA2ZDAzMDgsCisweDAwNmUwMzBjLAorMHgwMDZmMDMxMCwKKzB4MDA3MDAzMTQsCisweDAwNzIwMzY1LAorMHgwMDc0MDM2YiwKKzB4MDA3OTAzNjksCisweDAwN2MwMzFlLAorMHgwMDBmMDM3YSwKKzB4MDAwZjAzN2EsCisweDAwMGYwMzdhLAorMHgwMDBmMDM3YSwKKzB4MDAwZjAzN2EsCisweDAwMGYwMzdhLAorMHgwMDBmMDM3YSwKKzB4MDAwZjAzN2EsCisweDAwMGYwMzdhLAorMHgwMDBmMDM3YSwKKzB4MDAwZjAzN2EsCisweDAwMGYwMzdhLAorMHgwMDBmMDM3YSwKKzB4MDAwZjAzN2EsCisweDAwMGYwMzdhLAorMHgwMDBmMDM3YSwKKzB4MDAwZjAzN2EsCisweDAwMGYwMzdhLAorMHgwMDBmMDM3YSwKKzB4MDAwZjAzN2EsCisweDAwMGYwMzdhLAorMHgwMDBmMDM3YSwKKzB4MDAwZjAzN2EsCisweDAwMGYwMzdhLAorMHgwMDBmMDM3YSwKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3AuYyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX2NwLmMKaW5kZXggOTI5NjVkYi4uNzdhN2E0ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fY3AuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9jcC5jCkBAIC00Myw2ICs0Myw3OCBAQAogc3RhdGljIGludCByYWRlb25fZG9fY2xlYW51cF9jcChzdHJ1Y3QgZHJtX2RldmljZSAqIGRldik7CiBzdGF0aWMgdm9pZCByYWRlb25fZG9fY3Bfc3RhcnQoZHJtX3JhZGVvbl9wcml2YXRlX3QgKiBkZXZfcHJpdik7CiAKK3UzMiByYWRlb25fcmVhZF9yaW5nX3JwdHIoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LCB1MzIgb2ZmKQoreworCXUzMiB2YWw7CisKKwlpZiAoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0lTX0FHUCkgeworCQl2YWwgPSBEUk1fUkVBRDMyKGRldl9wcml2LT5yaW5nX3JwdHIsIG9mZik7CisJfSBlbHNlIHsKKwkJdmFsID0gKigoKHZvbGF0aWxlIHUzMiAqKQorCQkJIGRldl9wcml2LT5yaW5nX3JwdHItPmhhbmRsZSkgKworCQkJKG9mZiAvIHNpemVvZih1MzIpKSk7CisJCXZhbCA9IGxlMzJfdG9fY3B1KHZhbCk7CisJfQorCXJldHVybiB2YWw7Cit9CisKK3UzMiByYWRlb25fZ2V0X3JpbmdfaGVhZChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpCit7CisJaWYgKGRldl9wcml2LT53cml0ZWJhY2tfd29ya3MpCisJCXJldHVybiByYWRlb25fcmVhZF9yaW5nX3JwdHIoZGV2X3ByaXYsIDApOworCWVsc2UgeworCQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQkJcmV0dXJuIFJBREVPTl9SRUFEKFI2MDBfQ1BfUkJfUlBUUik7CisJCWVsc2UKKwkJCXJldHVybiBSQURFT05fUkVBRChSQURFT05fQ1BfUkJfUlBUUik7CisJfQorfQorCit2b2lkIHJhZGVvbl93cml0ZV9yaW5nX3JwdHIoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LCB1MzIgb2ZmLCB1MzIgdmFsKQoreworCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fSVNfQUdQKQorCQlEUk1fV1JJVEUzMihkZXZfcHJpdi0+cmluZ19ycHRyLCBvZmYsIHZhbCk7CisJZWxzZQorCQkqKCgodm9sYXRpbGUgdTMyICopIGRldl9wcml2LT5yaW5nX3JwdHItPmhhbmRsZSkgKworCQkgIChvZmYgLyBzaXplb2YodTMyKSkpID0gY3B1X3RvX2xlMzIodmFsKTsKK30KKwordm9pZCByYWRlb25fc2V0X3JpbmdfaGVhZChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiB2YWwpCit7CisJcmFkZW9uX3dyaXRlX3JpbmdfcnB0cihkZXZfcHJpdiwgMCwgdmFsKTsKK30KKwordTMyIHJhZGVvbl9nZXRfc2NyYXRjaChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBpbmRleCkKK3sKKwlpZiAoZGV2X3ByaXYtPndyaXRlYmFja193b3JrcykgeworCQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQkJcmV0dXJuIHJhZGVvbl9yZWFkX3JpbmdfcnB0cihkZXZfcHJpdiwKKwkJCQkJCSAgICAgUjYwMF9TQ1JBVENIT0ZGKGluZGV4KSk7CisJCWVsc2UKKwkJCXJldHVybiByYWRlb25fcmVhZF9yaW5nX3JwdHIoZGV2X3ByaXYsCisJCQkJCQkgICAgIFJBREVPTl9TQ1JBVENIT0ZGKGluZGV4KSk7CisJfSBlbHNlIHsKKwkJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKKwkJCXJldHVybiBSQURFT05fUkVBRChSNjAwX1NDUkFUQ0hfUkVHMCArIDQqaW5kZXgpOworCQllbHNlCisJCQlyZXR1cm4gUkFERU9OX1JFQUQoUkFERU9OX1NDUkFUQ0hfUkVHMCArIDQqaW5kZXgpOworCX0KK30KKwordTMyIFJBREVPTl9SRUFEX01NKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IGFkZHIpCit7CisJdTMyIHJldDsKKworCWlmIChhZGRyIDwgMHgxMDAwMCkKKwkJcmV0ID0gRFJNX1JFQUQzMihkZXZfcHJpdi0+bW1pbywgYWRkcik7CisJZWxzZSB7CisJCURSTV9XUklURTMyKGRldl9wcml2LT5tbWlvLCBSQURFT05fTU1fSU5ERVgsIGFkZHIpOworCQlyZXQgPSBEUk1fUkVBRDMyKGRldl9wcml2LT5tbWlvLCBSQURFT05fTU1fREFUQSk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHUzMiBSNTAwX1JFQURfTUNJTkQoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LCBpbnQgYWRkcikKIHsKIAl1MzIgcmV0OwpAQCAtNzAsMTEgKzE0MiwyMiBAQAogCXJldHVybiByZXQ7CiB9CiAKK3N0YXRpYyB1MzIgUlM2MDBfUkVBRF9NQ0lORChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBhZGRyKQoreworCXUzMiByZXQ7CisJUkFERU9OX1dSSVRFKFJTNjAwX01DX0lOREVYLCAoKGFkZHIgJiBSUzYwMF9NQ19BRERSX01BU0spIHwKKwkJCQkgICAgICBSUzYwMF9NQ19JTkRfQ0lURl9BUkIwKSk7CisJcmV0ID0gUkFERU9OX1JFQUQoUlM2MDBfTUNfREFUQSk7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIHUzMiBJR1BfUkVBRF9NQ0lORChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBhZGRyKQogewogCWlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwKIAkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKQogCQlyZXR1cm4gUlM2OTBfUkVBRF9NQ0lORChkZXZfcHJpdiwgYWRkcik7CisJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzYwMCkKKwkJcmV0dXJuIFJTNjAwX1JFQURfTUNJTkQoZGV2X3ByaXYsIGFkZHIpOwogCWVsc2UKIAkJcmV0dXJuIFJTNDgwX1JFQURfTUNJTkQoZGV2X3ByaXYsIGFkZHIpOwogfQpAQCAtODIsMTEgKzE2NSwxNyBAQAogdTMyIHJhZGVvbl9yZWFkX2ZiX2xvY2F0aW9uKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdikKIHsKIAotCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JWNTE1KQorCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JWNzcwKQorCQlyZXR1cm4gUkFERU9OX1JFQUQoUjcwMF9NQ19WTV9GQl9MT0NBVElPTik7CisJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQlyZXR1cm4gUkFERU9OX1JFQUQoUjYwMF9NQ19WTV9GQl9MT0NBVElPTik7CisJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkKIAkJcmV0dXJuIFI1MDBfUkVBRF9NQ0lORChkZXZfcHJpdiwgUlY1MTVfTUNfRkJfTE9DQVRJT04pOwogCWVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB8fAogCQkgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKQogCQlyZXR1cm4gUlM2OTBfUkVBRF9NQ0lORChkZXZfcHJpdiwgUlM2OTBfTUNfRkJfTE9DQVRJT04pOworCWVsc2UgaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2MDApCisJCXJldHVybiBSUzYwMF9SRUFEX01DSU5EKGRldl9wcml2LCBSUzYwMF9NQ19GQl9MT0NBVElPTik7CiAJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPiBDSElQX1JWNTE1KQogCQlyZXR1cm4gUjUwMF9SRUFEX01DSU5EKGRldl9wcml2LCBSNTIwX01DX0ZCX0xPQ0FUSU9OKTsKIAllbHNlCkBAIC05NSw0MiArMTg0LDY2IEBACiAKIHN0YXRpYyB2b2lkIHJhZGVvbl93cml0ZV9mYl9sb2NhdGlvbihkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiBmYl9sb2MpCiB7Ci0JaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY1MTUpCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlY3NzApCisJCVJBREVPTl9XUklURShSNzAwX01DX1ZNX0ZCX0xPQ0FUSU9OLCBmYl9sb2MpOworCWVsc2UgaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKKwkJUkFERU9OX1dSSVRFKFI2MDBfTUNfVk1fRkJfTE9DQVRJT04sIGZiX2xvYyk7CisJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkKIAkJUjUwMF9XUklURV9NQ0lORChSVjUxNV9NQ19GQl9MT0NBVElPTiwgZmJfbG9jKTsKIAllbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwKIAkJICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzQwKSkKIAkJUlM2OTBfV1JJVEVfTUNJTkQoUlM2OTBfTUNfRkJfTE9DQVRJT04sIGZiX2xvYyk7CisJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzYwMCkKKwkJUlM2MDBfV1JJVEVfTUNJTkQoUlM2MDBfTUNfRkJfTE9DQVRJT04sIGZiX2xvYyk7CiAJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPiBDSElQX1JWNTE1KQogCQlSNTAwX1dSSVRFX01DSU5EKFI1MjBfTUNfRkJfTE9DQVRJT04sIGZiX2xvYyk7CiAJZWxzZQogCQlSQURFT05fV1JJVEUoUkFERU9OX01DX0ZCX0xPQ0FUSU9OLCBmYl9sb2MpOwogfQogCi1zdGF0aWMgdm9pZCByYWRlb25fd3JpdGVfYWdwX2xvY2F0aW9uKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwgdTMyIGFncF9sb2MpCit2b2lkIHJhZGVvbl93cml0ZV9hZ3BfbG9jYXRpb24oZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LCB1MzIgYWdwX2xvYykKIHsKLQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkKKwkvKlI2eHgvUjd4eDogQUdQX1RPUCBhbmQgQk9UIGFyZSBhY3R1YWxseSAxOCBiaXRzIGVhY2ggKi8KKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SVjc3MCkgeworCQlSQURFT05fV1JJVEUoUjcwMF9NQ19WTV9BR1BfQk9ULCBhZ3BfbG9jICYgMHhmZmZmKTsgLyogRklYIE1FICovCisJCVJBREVPTl9XUklURShSNzAwX01DX1ZNX0FHUF9UT1AsIChhZ3BfbG9jID4+IDE2KSAmIDB4ZmZmZik7CisJfSBlbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I2MDApIHsKKwkJUkFERU9OX1dSSVRFKFI2MDBfTUNfVk1fQUdQX0JPVCwgYWdwX2xvYyAmIDB4ZmZmZik7IC8qIEZJWCBNRSAqLworCQlSQURFT05fV1JJVEUoUjYwMF9NQ19WTV9BR1BfVE9QLCAoYWdwX2xvYyA+PiAxNikgJiAweGZmZmYpOworCX0gZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkKIAkJUjUwMF9XUklURV9NQ0lORChSVjUxNV9NQ19BR1BfTE9DQVRJT04sIGFncF9sb2MpOwogCWVsc2UgaWYgKCgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjkwKSB8fAogCQkgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKQogCQlSUzY5MF9XUklURV9NQ0lORChSUzY5MF9NQ19BR1BfTE9DQVRJT04sIGFncF9sb2MpOworCWVsc2UgaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2MDApCisJCVJTNjAwX1dSSVRFX01DSU5EKFJTNjAwX01DX0FHUF9MT0NBVElPTiwgYWdwX2xvYyk7CiAJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPiBDSElQX1JWNTE1KQogCQlSNTAwX1dSSVRFX01DSU5EKFI1MjBfTUNfQUdQX0xPQ0FUSU9OLCBhZ3BfbG9jKTsKIAllbHNlCiAJCVJBREVPTl9XUklURShSQURFT05fTUNfQUdQX0xPQ0FUSU9OLCBhZ3BfbG9jKTsKIH0KIAotc3RhdGljIHZvaWQgcmFkZW9uX3dyaXRlX2FncF9iYXNlKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwgdTY0IGFncF9iYXNlKQordm9pZCByYWRlb25fd3JpdGVfYWdwX2Jhc2UoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2LCB1NjQgYWdwX2Jhc2UpCiB7CiAJdTMyIGFncF9iYXNlX2hpID0gdXBwZXJfMzJfYml0cyhhZ3BfYmFzZSk7CiAJdTMyIGFncF9iYXNlX2xvID0gYWdwX2Jhc2UgJiAweGZmZmZmZmZmOworCXUzMiByNnh4X2FncF9iYXNlID0gKGFncF9iYXNlID4+IDIyKSAmIDB4M2ZmZmY7CiAKLQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkgeworCS8qIFI2eHgvUjd4eCBtdXN0IGJlIGFsaWduZWQgdG8gYSA0TUIgYm91bmRyeSAqLworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JWNzcwKQorCQlSQURFT05fV1JJVEUoUjcwMF9NQ19WTV9BR1BfQkFTRSwgcjZ4eF9hZ3BfYmFzZSk7CisJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQlSQURFT05fV1JJVEUoUjYwMF9NQ19WTV9BR1BfQkFTRSwgcjZ4eF9hZ3BfYmFzZSk7CisJZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkgewogCQlSNTAwX1dSSVRFX01DSU5EKFJWNTE1X01DX0FHUF9CQVNFLCBhZ3BfYmFzZV9sbyk7CiAJCVI1MDBfV1JJVEVfTUNJTkQoUlY1MTVfTUNfQUdQX0JBU0VfMiwgYWdwX2Jhc2VfaGkpOwogCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApIHx8CiAJCSAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzc0MCkpIHsKIAkJUlM2OTBfV1JJVEVfTUNJTkQoUlM2OTBfTUNfQUdQX0JBU0UsIGFncF9iYXNlX2xvKTsKIAkJUlM2OTBfV1JJVEVfTUNJTkQoUlM2OTBfTUNfQUdQX0JBU0VfMiwgYWdwX2Jhc2VfaGkpOworCX0gZWxzZSBpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzYwMCkgeworCQlSUzYwMF9XUklURV9NQ0lORChSUzYwMF9BR1BfQkFTRSwgYWdwX2Jhc2VfbG8pOworCQlSUzYwMF9XUklURV9NQ0lORChSUzYwMF9BR1BfQkFTRV8yLCBhZ3BfYmFzZV9oaSk7CiAJfSBlbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+IENISVBfUlY1MTUpIHsKIAkJUjUwMF9XUklURV9NQ0lORChSNTIwX01DX0FHUF9CQVNFLCBhZ3BfYmFzZV9sbyk7CiAJCVI1MDBfV1JJVEVfTUNJTkQoUjUyMF9NQ19BR1BfQkFTRV8yLCBhZ3BfYmFzZV9oaSk7CkBAIC0xNDUsNiArMjU4LDI1IEBACiAJfQogfQogCit2b2lkIHJhZGVvbl9lbmFibGVfYm0oc3RydWN0IGRybV9yYWRlb25fcHJpdmF0ZSAqZGV2X3ByaXYpCit7CisJdTMyIHRtcDsKKwkvKiBUdXJuIG9uIGJ1cyBtYXN0ZXJpbmcgKi8KKwlpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2OTApIHx8CisJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzQwKSkgeworCQkvKiByczYwMC9yczY5MC9yczc0MCAqLworCQl0bXAgPSBSQURFT05fUkVBRChSQURFT05fQlVTX0NOVEwpICYgflJTNjAwX0JVU19NQVNURVJfRElTOworCQlSQURFT05fV1JJVEUoUkFERU9OX0JVU19DTlRMLCB0bXApOworCX0gZWxzZSBpZiAoKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spIDw9IENISVBfUlYzNTApIHx8CisJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1I0MjApIHx8CisJCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNDAwKSB8fAorCQkgICAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzQ4MCkpIHsKKwkJLyogcjF4eCwgcjJ4eCwgcjMwMCwgcih2KTM1MCwgcjQyMC9yNDgxLCByczQwMC9yczQ4MCAqLworCQl0bXAgPSBSQURFT05fUkVBRChSQURFT05fQlVTX0NOVEwpICYgflJBREVPTl9CVVNfTUFTVEVSX0RJUzsKKwkJUkFERU9OX1dSSVRFKFJBREVPTl9CVVNfQ05UTCwgdG1wKTsKKwl9IC8qIFBDSUUgY2FyZHMgYXBwZWFycyB0byBub3QgbmVlZCB0aGlzICovCit9CisKIHN0YXRpYyBpbnQgUkFERU9OX1JFQURfUExMKHN0cnVjdCBkcm1fZGV2aWNlICogZGV2LCBpbnQgYWRkcikKIHsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwpAQCAtMzAyLDcgKzQzNCw3IEBACiAKIAlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SVjUxNSkgewogCQlSQURFT05fV1JJVEVfUExMKFI1MDBfRFlOX1NDTEtfUFdNRU1fUElQRSwgKDEgfCAoKGdiX3BpcGVfc2VsID4+IDgpICYgMHhmKSA8PCA0KSk7Ci0JCVJBREVPTl9XUklURShSNTAwX1NVX1JFR19ERVNULCAoKDEgPDwgZGV2X3ByaXYtPm51bV9nYl9waXBlcykgLSAxKSk7CisJCVJBREVPTl9XUklURShSMzAwX1NVX1JFR19ERVNULCAoKDEgPDwgZGV2X3ByaXYtPm51bV9nYl9waXBlcykgLSAxKSk7CiAJfQogCVJBREVPTl9XUklURShSMzAwX0dCX1RJTEVfQ09ORklHLCBnYl90aWxlX2NvbmZpZyk7CiAJcmFkZW9uX2RvX3dhaXRfZm9yX2lkbGUoZGV2X3ByaXYpOwpAQCAtMzgyLDYgKzUxNCwxNCBAQAogCQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fREFUQUwsCiAJCQkJICAgICBSUzY5MF9jcF9taWNyb2NvZGVbaV1bMF0pOwogCQl9CisJfSBlbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjAwKSB7CisJCURSTV9JTkZPKCJMb2FkaW5nIFJTNjAwIE1pY3JvY29kZVxuIik7CisJCWZvciAoaSA9IDA7IGkgPCAyNTY7IGkrKykgeworCQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fREFUQUgsCisJCQkJICAgICBSUzYwMF9jcF9taWNyb2NvZGVbaV1bMV0pOworCQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9NRV9SQU1fREFUQUwsCisJCQkJICAgICBSUzYwMF9jcF9taWNyb2NvZGVbaV1bMF0pOworCQl9CiAJfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SVjUxNSkgfHwKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUjUyMCkgfHwKIAkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlY1MzApIHx8CkBAIC01NjIsNyArNzAyLDYgQEAKIHsKIAlzdHJ1Y3QgZHJtX3JhZGVvbl9tYXN0ZXJfcHJpdmF0ZSAqbWFzdGVyX3ByaXY7CiAJdTMyIHJpbmdfc3RhcnQsIGN1cl9yZWFkX3B0cjsKLQl1MzIgdG1wOwogCiAJLyogSW5pdGlhbGl6ZSB0aGUgbWVtb3J5IGNvbnRyb2xsZXIuIFdpdGggbmV3IG1lbW9yeSBtYXAsIHRoZSBmYiBsb2NhdGlvbgogCSAqIGlzIG5vdCBjaGFuZ2VkLCBpdCBzaG91bGQgaGF2ZSBiZWVuIHByb3Blcmx5IGluaXRpYWxpemVkIGFscmVhZHkuIFBhcnQKQEAgLTYxMSwxNyArNzUwLDEwIEBACiAJfSBlbHNlCiAjZW5kaWYKIAl7Ci0JCXN0cnVjdCBkcm1fc2dfbWVtICplbnRyeSA9IGRldi0+c2c7Ci0JCXVuc2lnbmVkIGxvbmcgdG1wX29mcywgcGFnZV9vZnM7Ci0KLQkJdG1wX29mcyA9IGRldl9wcml2LT5yaW5nX3JwdHItPm9mZnNldCAtCi0JCQkJKHVuc2lnbmVkIGxvbmcpZGV2LT5zZy0+dmlydHVhbDsKLQkJcGFnZV9vZnMgPSB0bXBfb2ZzID4+IFBBR0VfU0hJRlQ7Ci0KLQkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9SQl9SUFRSX0FERFIsIGVudHJ5LT5idXNhZGRyW3BhZ2Vfb2ZzXSk7Ci0JCURSTV9ERUJVRygicmluZyBycHRyOiBvZmZzZXQ9MHglMDhseCBoYW5kbGU9MHglMDhseFxuIiwKLQkJCSAgKHVuc2lnbmVkIGxvbmcpZW50cnktPmJ1c2FkZHJbcGFnZV9vZnNdLAotCQkJICBlbnRyeS0+aGFuZGxlICsgdG1wX29mcyk7CisJCVJBREVPTl9XUklURShSQURFT05fQ1BfUkJfUlBUUl9BRERSLAorCQkJICAgICBkZXZfcHJpdi0+cmluZ19ycHRyLT5vZmZzZXQKKwkJCSAgICAgLSAoKHVuc2lnbmVkIGxvbmcpIGRldi0+c2ctPnZpcnR1YWwpCisJCQkgICAgICsgZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQpOwogCX0KIAogCS8qIFNldCByaW5nIGJ1ZmZlciBzaXplICovCkBAIC02NDksMzQgKzc4MSwxNyBAQAogCVJBREVPTl9XUklURShSQURFT05fU0NSQVRDSF9BRERSLCBSQURFT05fUkVBRChSQURFT05fQ1BfUkJfUlBUUl9BRERSKQogCQkgICAgICsgUkFERU9OX1NDUkFUQ0hfUkVHX09GRlNFVCk7CiAKLQlkZXZfcHJpdi0+c2NyYXRjaCA9ICgoX192b2xhdGlsZV9fIHUzMiAqKQotCQkJICAgICBkZXZfcHJpdi0+cmluZ19ycHRyLT5oYW5kbGUgKwotCQkJICAgICAoUkFERU9OX1NDUkFUQ0hfUkVHX09GRlNFVCAvIHNpemVvZih1MzIpKSk7Ci0KIAlSQURFT05fV1JJVEUoUkFERU9OX1NDUkFUQ0hfVU1TSywgMHg3KTsKIAotCS8qIFR1cm4gb24gYnVzIG1hc3RlcmluZyAqLwotCWlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwKLQkgICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM3NDApKSB7Ci0JCS8qIHJzNjAwL3JzNjkwL3JzNzQwICovCi0JCXRtcCA9IFJBREVPTl9SRUFEKFJBREVPTl9CVVNfQ05UTCkgJiB+UlM2MDBfQlVTX01BU1RFUl9ESVM7Ci0JCVJBREVPTl9XUklURShSQURFT05fQlVTX0NOVEwsIHRtcCk7Ci0JfSBlbHNlIGlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPD0gQ0hJUF9SVjM1MCkgfHwKLQkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUjQyMCkgfHwKLQkJICAgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM0MDApIHx8Ci0JCSAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNDgwKSkgewotCQkvKiByMXh4LCByMnh4LCByMzAwLCByKHYpMzUwLCByNDIwL3I0ODEsIHJzNDAwL3JzNDgwICovCi0JCXRtcCA9IFJBREVPTl9SRUFEKFJBREVPTl9CVVNfQ05UTCkgJiB+UkFERU9OX0JVU19NQVNURVJfRElTOwotCQlSQURFT05fV1JJVEUoUkFERU9OX0JVU19DTlRMLCB0bXApOwotCX0gLyogUENJRSBjYXJkcyBhcHBlYXJzIHRvIG5vdCBuZWVkIHRoaXMgKi8KKwlyYWRlb25fZW5hYmxlX2JtKGRldl9wcml2KTsKIAotCWRldl9wcml2LT5zY3JhdGNoWzBdID0gMDsKKwlyYWRlb25fd3JpdGVfcmluZ19ycHRyKGRldl9wcml2LCBSQURFT05fU0NSQVRDSE9GRigwKSwgMCk7CiAJUkFERU9OX1dSSVRFKFJBREVPTl9MQVNUX0ZSQU1FX1JFRywgMCk7CiAKLQlkZXZfcHJpdi0+c2NyYXRjaFsxXSA9IDA7CisJcmFkZW9uX3dyaXRlX3JpbmdfcnB0cihkZXZfcHJpdiwgUkFERU9OX1NDUkFUQ0hPRkYoMSksIDApOwogCVJBREVPTl9XUklURShSQURFT05fTEFTVF9ESVNQQVRDSF9SRUcsIDApOwogCi0JZGV2X3ByaXYtPnNjcmF0Y2hbMl0gPSAwOworCXJhZGVvbl93cml0ZV9yaW5nX3JwdHIoZGV2X3ByaXYsIFJBREVPTl9TQ1JBVENIT0ZGKDIpLCAwKTsKIAlSQURFT05fV1JJVEUoUkFERU9OX0xBU1RfQ0xFQVJfUkVHLCAwKTsKIAogCS8qIHJlc2V0IHNhcmVhIGNvcGllcyBvZiB0aGVzZSAqLwpAQCAtNzA4LDEyICs4MjMsMTUgQEAKIAkvKiBXcml0ZWJhY2sgZG9lc24ndCBzZWVtIHRvIHdvcmsgZXZlcnl3aGVyZSwgdGVzdCBpdCBoZXJlIGFuZCBwb3NzaWJseQogCSAqIGVuYWJsZSBpdCBpZiBpdCBhcHBlYXJzIHRvIHdvcmsKIAkgKi8KLQlEUk1fV1JJVEUzMihkZXZfcHJpdi0+cmluZ19ycHRyLCBSQURFT05fU0NSQVRDSE9GRigxKSwgMCk7CisJcmFkZW9uX3dyaXRlX3JpbmdfcnB0cihkZXZfcHJpdiwgUkFERU9OX1NDUkFUQ0hPRkYoMSksIDApOworCiAJUkFERU9OX1dSSVRFKFJBREVPTl9TQ1JBVENIX1JFRzEsIDB4ZGVhZGJlZWYpOwogCiAJZm9yICh0bXAgPSAwOyB0bXAgPCBkZXZfcHJpdi0+dXNlY190aW1lb3V0OyB0bXArKykgewotCQlpZiAoRFJNX1JFQUQzMihkZXZfcHJpdi0+cmluZ19ycHRyLCBSQURFT05fU0NSQVRDSE9GRigxKSkgPT0KLQkJICAgIDB4ZGVhZGJlZWYpCisJCXUzMiB2YWw7CisKKwkJdmFsID0gcmFkZW9uX3JlYWRfcmluZ19ycHRyKGRldl9wcml2LCBSQURFT05fU0NSQVRDSE9GRigxKSk7CisJCWlmICh2YWwgPT0gMHhkZWFkYmVlZikKIAkJCWJyZWFrOwogCQlEUk1fVURFTEFZKDEpOwogCX0KQEAgLTgwOSw2ICs5MjcsODIgQEAKIAl9CiB9CiAKKy8qIEVuYWJsZSBvciBkaXNhYmxlIElHUCBHQVJUIG9uIHRoZSBjaGlwICovCitzdGF0aWMgdm9pZCByczYwMF9zZXRfaWdwZ2FydChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBvbikKK3sKKwl1MzIgdGVtcDsKKwlpbnQgaTsKKworCWlmIChvbikgeworCQlEUk1fREVCVUcoInByb2dyYW1taW5nIGlncCBnYXJ0ICUwOFggJTA4bFggJTA4WFxuIiwKKwkJCSBkZXZfcHJpdi0+Z2FydF92bV9zdGFydCwKKwkJCSAobG9uZylkZXZfcHJpdi0+Z2FydF9pbmZvLmJ1c19hZGRyLAorCQkJIGRldl9wcml2LT5nYXJ0X3NpemUpOworCisJCUlHUF9XUklURV9NQ0lORChSUzYwMF9NQ19QVDBfQ05UTCwgKFJTNjAwX0VGRkVDVElWRV9MMl9DQUNIRV9TSVpFKDYpIHwKKwkJCQkJCSAgICBSUzYwMF9FRkZFQ1RJVkVfTDJfUVVFVUVfU0laRSg2KSkpOworCisJCWZvciAoaSA9IDA7IGkgPCAxOTsgaSsrKQorCQkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DTElFTlQwX0NOVEwgKyBpLAorCQkJCQkoUlM2MDBfRU5BQkxFX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUgfAorCQkJCQkgUlM2MDBfU1lTVEVNX0FDQ0VTU19NT0RFX0lOX1NZUyB8CisJCQkJCSBSUzYwMF9TWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfQUNDRVNTX1BBU1NUSFJPVUdIIHwKKwkJCQkJIFJTNjAwX0VGRkVDVElWRV9MMV9DQUNIRV9TSVpFKDMpIHwKKwkJCQkJIFJTNjAwX0VOQUJMRV9GUkFHTUVOVF9QUk9DRVNTSU5HIHwKKwkJCQkJIFJTNjAwX0VGRkVDVElWRV9MMV9RVUVVRV9TSVpFKDMpKSk7CisKKwkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DT05URVhUMF9DTlRMLCAoUlM2MDBfRU5BQkxFX1BBR0VfVEFCTEUgfAorCQkJCQkJCSAgICAgUlM2MDBfUEFHRV9UQUJMRV9UWVBFX0ZMQVQpKTsKKworCQkvKiBkaXNhYmxlIGFsbCBvdGhlciBjb250ZXh0cyAqLworCQlmb3IgKGkgPSAxOyBpIDwgODsgaSsrKQorCQkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DT05URVhUMF9DTlRMICsgaSwgMCk7CisKKwkJLyogc2V0dXAgdGhlIHBhZ2UgdGFibGUgYXBlcnR1cmUgKi8KKwkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DT05URVhUMF9GTEFUX0JBU0VfQUREUiwKKwkJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmJ1c19hZGRyKTsKKwkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DT05URVhUMF9GTEFUX1NUQVJUX0FERFIsCisJCQkJZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQpOworCQlJR1BfV1JJVEVfTUNJTkQoUlM2MDBfTUNfUFQwX0NPTlRFWFQwX0ZMQVRfRU5EX0FERFIsCisJCQkJKGRldl9wcml2LT5nYXJ0X3ZtX3N0YXJ0ICsgZGV2X3ByaXYtPmdhcnRfc2l6ZSAtIDEpKTsKKwkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DT05URVhUMF9ERUZBVUxUX1JFQURfQUREUiwgMCk7CisKKwkJLyogc2V0dXAgdGhlIHN5c3RlbSBhcGVydHVyZSAqLworCQlJR1BfV1JJVEVfTUNJTkQoUlM2MDBfTUNfUFQwX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiwKKwkJCQlkZXZfcHJpdi0+Z2FydF92bV9zdGFydCk7CisJCUlHUF9XUklURV9NQ0lORChSUzYwMF9NQ19QVDBfU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiwKKwkJCQkoZGV2X3ByaXYtPmdhcnRfdm1fc3RhcnQgKyBkZXZfcHJpdi0+Z2FydF9zaXplIC0gMSkpOworCisJCS8qIGVuYWJsZSBwYWdlIHRhYmxlcyAqLworCQl0ZW1wID0gSUdQX1JFQURfTUNJTkQoZGV2X3ByaXYsIFJTNjAwX01DX1BUMF9DTlRMKTsKKwkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DTlRMLCAodGVtcCB8IFJTNjAwX0VOQUJMRV9QVCkpOworCisJCXRlbXAgPSBJR1BfUkVBRF9NQ0lORChkZXZfcHJpdiwgUlM2MDBfTUNfQ05UTDEpOworCQlJR1BfV1JJVEVfTUNJTkQoUlM2MDBfTUNfQ05UTDEsICh0ZW1wIHwgUlM2MDBfRU5BQkxFX1BBR0VfVEFCTEVTKSk7CisKKwkJLyogaW52YWxpZGF0ZSB0aGUgY2FjaGUgKi8KKwkJdGVtcCA9IElHUF9SRUFEX01DSU5EKGRldl9wcml2LCBSUzYwMF9NQ19QVDBfQ05UTCk7CisKKwkJdGVtcCAmPSB+KFJTNjAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMgfCBSUzYwMF9JTlZBTElEQVRFX0wyX0NBQ0hFKTsKKwkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DTlRMLCB0ZW1wKTsKKwkJdGVtcCA9IElHUF9SRUFEX01DSU5EKGRldl9wcml2LCBSUzYwMF9NQ19QVDBfQ05UTCk7CisKKwkJdGVtcCB8PSBSUzYwMF9JTlZBTElEQVRFX0FMTF9MMV9UTEJTIHwgUlM2MDBfSU5WQUxJREFURV9MMl9DQUNIRTsKKwkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DTlRMLCB0ZW1wKTsKKwkJdGVtcCA9IElHUF9SRUFEX01DSU5EKGRldl9wcml2LCBSUzYwMF9NQ19QVDBfQ05UTCk7CisKKwkJdGVtcCAmPSB+KFJTNjAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMgfCBSUzYwMF9JTlZBTElEQVRFX0wyX0NBQ0hFKTsKKwkJSUdQX1dSSVRFX01DSU5EKFJTNjAwX01DX1BUMF9DTlRMLCB0ZW1wKTsKKwkJdGVtcCA9IElHUF9SRUFEX01DSU5EKGRldl9wcml2LCBSUzYwMF9NQ19QVDBfQ05UTCk7CisKKwl9IGVsc2UgeworCQlJR1BfV1JJVEVfTUNJTkQoUlM2MDBfTUNfUFQwX0NOVEwsIDApOworCQl0ZW1wID0gSUdQX1JFQURfTUNJTkQoZGV2X3ByaXYsIFJTNjAwX01DX0NOVEwxKTsKKwkJdGVtcCAmPSB+UlM2MDBfRU5BQkxFX1BBR0VfVEFCTEVTOworCQlJR1BfV1JJVEVfTUNJTkQoUlM2MDBfTUNfQ05UTDEsIHRlbXApOworCX0KK30KKwogc3RhdGljIHZvaWQgcmFkZW9uX3NldF9wY2llZ2FydChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqIGRldl9wcml2LCBpbnQgb24pCiB7CiAJdTMyIHRtcCA9IFJBREVPTl9SRUFEX1BDSUUoZGV2X3ByaXYsIFJBREVPTl9QQ0lFX1RYX0dBUlRfQ05UTCk7CkBAIC04NTAsNiArMTA0NCwxMSBAQAogCQlyZXR1cm47CiAJfQogCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2MDApIHsKKwkJcnM2MDBfc2V0X2lncGdhcnQoZGV2X3ByaXYsIG9uKTsKKwkJcmV0dXJuOworCX0KKwogCWlmIChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fSVNfUENJRSkgewogCQlyYWRlb25fc2V0X3BjaWVnYXJ0KGRldl9wcml2LCBvbik7CiAJCXJldHVybjsKQEAgLTg4MSw2ICsxMDgwLDQ2IEBACiAJfQogfQogCitzdGF0aWMgaW50IHJhZGVvbl9zZXR1cF9wY2lnYXJ0X3N1cmZhY2UoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KQoreworCXN0cnVjdCBkcm1fYXRpX3BjaWdhcnRfaW5mbyAqZ2FydF9pbmZvID0gJmRldl9wcml2LT5nYXJ0X2luZm87CisJc3RydWN0IHJhZGVvbl92aXJ0X3N1cmZhY2UgKnZwOworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IFJBREVPTl9NQVhfU1VSRkFDRVMgKiAyOyBpKyspIHsKKwkJaWYgKCFkZXZfcHJpdi0+dmlydF9zdXJmYWNlc1tpXS5maWxlX3ByaXYgfHwKKwkJICAgIGRldl9wcml2LT52aXJ0X3N1cmZhY2VzW2ldLmZpbGVfcHJpdiA9PSBQQ0lHQVJUX0ZJTEVfUFJJVikKKwkJCWJyZWFrOworCX0KKwlpZiAoaSA+PSAyICogUkFERU9OX01BWF9TVVJGQUNFUykKKwkJcmV0dXJuIC1FTk9NRU07CisJdnAgPSAmZGV2X3ByaXYtPnZpcnRfc3VyZmFjZXNbaV07CisKKwlmb3IgKGkgPSAwOyBpIDwgUkFERU9OX01BWF9TVVJGQUNFUzsgaSsrKSB7CisJCXN0cnVjdCByYWRlb25fc3VyZmFjZSAqc3AgPSAmZGV2X3ByaXYtPnN1cmZhY2VzW2ldOworCQlpZiAoc3AtPnJlZmNvdW50KQorCQkJY29udGludWU7CisKKwkJdnAtPnN1cmZhY2VfaW5kZXggPSBpOworCQl2cC0+bG93ZXIgPSBnYXJ0X2luZm8tPmJ1c19hZGRyOworCQl2cC0+dXBwZXIgPSB2cC0+bG93ZXIgKyBnYXJ0X2luZm8tPnRhYmxlX3NpemU7CisJCXZwLT5mbGFncyA9IDA7CisJCXZwLT5maWxlX3ByaXYgPSBQQ0lHQVJUX0ZJTEVfUFJJVjsKKworCQlzcC0+cmVmY291bnQgPSAxOworCQlzcC0+bG93ZXIgPSB2cC0+bG93ZXI7CisJCXNwLT51cHBlciA9IHZwLT51cHBlcjsKKwkJc3AtPmZsYWdzID0gMDsKKworCQlSQURFT05fV1JJVEUoUkFERU9OX1NVUkZBQ0UwX0lORk8gKyAxNiAqIGksIHNwLT5mbGFncyk7CisJCVJBREVPTl9XUklURShSQURFT05fU1VSRkFDRTBfTE9XRVJfQk9VTkQgKyAxNiAqIGksIHNwLT5sb3dlcik7CisJCVJBREVPTl9XUklURShSQURFT05fU1VSRkFDRTBfVVBQRVJfQk9VTkQgKyAxNiAqIGksIHNwLT51cHBlcik7CisJCXJldHVybiAwOworCX0KKworCXJldHVybiAtRU5PTUVNOworfQorCiBzdGF0aWMgaW50IHJhZGVvbl9kb19pbml0X2NwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGRybV9yYWRlb25faW5pdF90ICppbml0LAogCQkJICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdikKIHsKQEAgLTEwNjIsMTEgKzEzMDEsMTIgQEAKIAl9IGVsc2UKICNlbmRpZgogCXsKLQkJZGV2X3ByaXYtPmNwX3JpbmctPmhhbmRsZSA9ICh2b2lkICopZGV2X3ByaXYtPmNwX3JpbmctPm9mZnNldDsKKwkJZGV2X3ByaXYtPmNwX3JpbmctPmhhbmRsZSA9CisJCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWRldl9wcml2LT5jcF9yaW5nLT5vZmZzZXQ7CiAJCWRldl9wcml2LT5yaW5nX3JwdHItPmhhbmRsZSA9Ci0JCSAgICAodm9pZCAqKWRldl9wcml2LT5yaW5nX3JwdHItPm9mZnNldDsKKwkJCSh2b2lkICopKHVuc2lnbmVkIGxvbmcpZGV2X3ByaXYtPnJpbmdfcnB0ci0+b2Zmc2V0OwogCQlkZXYtPmFncF9idWZmZXJfbWFwLT5oYW5kbGUgPQotCQkgICAgKHZvaWQgKilkZXYtPmFncF9idWZmZXJfbWFwLT5vZmZzZXQ7CisJCQkodm9pZCAqKSh1bnNpZ25lZCBsb25nKWRldi0+YWdwX2J1ZmZlcl9tYXAtPm9mZnNldDsKIAogCQlEUk1fREVCVUcoImRldl9wcml2LT5jcF9yaW5nLT5oYW5kbGUgJXBcbiIsCiAJCQkgIGRldl9wcml2LT5jcF9yaW5nLT5oYW5kbGUpOwpAQCAtMTE3MywxMSArMTQxMywxNCBAQAogCX0gZWxzZQogI2VuZGlmCiAJeworCQl1MzIgc2N0cmw7CisJCWludCByZXQ7CisKIAkJZGV2X3ByaXYtPmdhcnRfaW5mby50YWJsZV9tYXNrID0gRE1BX0JJVF9NQVNLKDMyKTsKIAkJLyogaWYgd2UgaGF2ZSBhbiBvZmZzZXQgc2V0IGZyb20gdXNlcnNwYWNlICovCiAJCWlmIChkZXZfcHJpdi0+cGNpZ2FydF9vZmZzZXRfc2V0KSB7CiAJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmJ1c19hZGRyID0KLQkJCSAgICBkZXZfcHJpdi0+cGNpZ2FydF9vZmZzZXQgKyBkZXZfcHJpdi0+ZmJfbG9jYXRpb247CisJCQkJKHJlc291cmNlX3NpemVfdClkZXZfcHJpdi0+cGNpZ2FydF9vZmZzZXQgKyBkZXZfcHJpdi0+ZmJfbG9jYXRpb247CiAJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLm1hcHBpbmcub2Zmc2V0ID0KIAkJCSAgICBkZXZfcHJpdi0+cGNpZ2FydF9vZmZzZXQgKyBkZXZfcHJpdi0+ZmJfYXBlcl9vZmZzZXQ7CiAJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLm1hcHBpbmcuc2l6ZSA9CkBAIC0xMjE0LDEyICsxNDU3LDMxIEBACiAJCQl9CiAJCX0KIAotCQlpZiAoIWRybV9hdGlfcGNpZ2FydF9pbml0KGRldiwgJmRldl9wcml2LT5nYXJ0X2luZm8pKSB7CisJCXNjdHJsID0gUkFERU9OX1JFQUQoUkFERU9OX1NVUkZBQ0VfQ05UTCk7CisJCVJBREVPTl9XUklURShSQURFT05fU1VSRkFDRV9DTlRMLCAwKTsKKwkJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2MDApCisJCQlyZXQgPSByNjAwX3BhZ2VfdGFibGVfaW5pdChkZXYpOworCQllbHNlCisJCQlyZXQgPSBkcm1fYXRpX3BjaWdhcnRfaW5pdChkZXYsICZkZXZfcHJpdi0+Z2FydF9pbmZvKTsKKwkJUkFERU9OX1dSSVRFKFJBREVPTl9TVVJGQUNFX0NOVEwsIHNjdHJsKTsKKworCQlpZiAoIXJldCkgewogCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gaW5pdCBQQ0kgR0FSVCFcbiIpOwogCQkJcmFkZW9uX2RvX2NsZWFudXBfY3AoZGV2KTsKIAkJCXJldHVybiAtRU5PTUVNOwogCQl9CiAKKwkJcmV0ID0gcmFkZW9uX3NldHVwX3BjaWdhcnRfc3VyZmFjZShkZXZfcHJpdik7CisJCWlmIChyZXQpIHsKKwkJCURSTV9FUlJPUigiZmFpbGVkIHRvIHNldHVwIEdBUlQgc3VyZmFjZSFcbiIpOworCQkJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2MDApCisJCQkJcjYwMF9wYWdlX3RhYmxlX2NsZWFudXAoZGV2LCAmZGV2X3ByaXYtPmdhcnRfaW5mbyk7CisJCQllbHNlCisJCQkJZHJtX2F0aV9wY2lnYXJ0X2NsZWFudXAoZGV2LCAmZGV2X3ByaXYtPmdhcnRfaW5mbyk7CisJCQlyYWRlb25fZG9fY2xlYW51cF9jcChkZXYpOworCQkJcmV0dXJuIHJldDsKKwkJfQorCiAJCS8qIFR1cm4gb24gUENJIEdBUlQgKi8KIAkJcmFkZW9uX3NldF9wY2lnYXJ0KGRldl9wcml2LCAxKTsKIAl9CkBAIC0xMjY4LDE0ICsxNTMwLDE4IEBACiAJCWlmIChkZXZfcHJpdi0+Z2FydF9pbmZvLmJ1c19hZGRyKSB7CiAJCQkvKiBUdXJuIG9mZiBQQ0kgR0FSVCAqLwogCQkJcmFkZW9uX3NldF9wY2lnYXJ0KGRldl9wcml2LCAwKTsKLQkJCWlmICghZHJtX2F0aV9wY2lnYXJ0X2NsZWFudXAoZGV2LCAmZGV2X3ByaXYtPmdhcnRfaW5mbykpCi0JCQkJRFJNX0VSUk9SKCJmYWlsZWQgdG8gY2xlYW51cCBQQ0kgR0FSVCFcbiIpOworCQkJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID09IENISVBfUlM2MDApCisJCQkJcjYwMF9wYWdlX3RhYmxlX2NsZWFudXAoZGV2LCAmZGV2X3ByaXYtPmdhcnRfaW5mbyk7CisJCQllbHNlIHsKKwkJCQlpZiAoIWRybV9hdGlfcGNpZ2FydF9jbGVhbnVwKGRldiwgJmRldl9wcml2LT5nYXJ0X2luZm8pKQorCQkJCQlEUk1fRVJST1IoImZhaWxlZCB0byBjbGVhbnVwIFBDSSBHQVJUIVxuIik7CisJCQl9CiAJCX0KIAogCQlpZiAoZGV2X3ByaXYtPmdhcnRfaW5mby5nYXJ0X3RhYmxlX2xvY2F0aW9uID09IERSTV9BVElfR0FSVF9GQikKIAkJewogCQkJZHJtX2NvcmVfaW9yZW1hcGZyZWUoJmRldl9wcml2LT5nYXJ0X2luZm8ubWFwcGluZywgZGV2KTsKLQkJCWRldl9wcml2LT5nYXJ0X2luZm8uYWRkciA9IDA7CisJCQlkZXZfcHJpdi0+Z2FydF9pbmZvLmFkZHIgPSBOVUxMOwogCQl9CiAJfQogCS8qIG9ubHkgY2xlYXIgdG8gdGhlIHN0YXJ0IG9mIGZsYWdzICovCkBAIC0xMzI2LDYgKzE1OTIsNyBAQAogCiBpbnQgcmFkZW9uX2NwX2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlkcm1fcmFkZW9uX2luaXRfdCAqaW5pdCA9IGRhdGE7CiAKIAlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwpAQCAtMTMzOCw4ICsxNjA1LDEzIEBACiAJY2FzZSBSQURFT05fSU5JVF9SMjAwX0NQOgogCWNhc2UgUkFERU9OX0lOSVRfUjMwMF9DUDoKIAkJcmV0dXJuIHJhZGVvbl9kb19pbml0X2NwKGRldiwgaW5pdCwgZmlsZV9wcml2KTsKKwljYXNlIFJBREVPTl9JTklUX1I2MDBfQ1A6CisJCXJldHVybiByNjAwX2RvX2luaXRfY3AoZGV2LCBpbml0LCBmaWxlX3ByaXYpOwogCWNhc2UgUkFERU9OX0NMRUFOVVBfQ1A6Ci0JCXJldHVybiByYWRlb25fZG9fY2xlYW51cF9jcChkZXYpOworCQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQkJcmV0dXJuIHI2MDBfZG9fY2xlYW51cF9jcChkZXYpOworCQllbHNlCisJCQlyZXR1cm4gcmFkZW9uX2RvX2NsZWFudXBfY3AoZGV2KTsKIAl9CiAKIAlyZXR1cm4gLUVJTlZBTDsKQEAgLTEzNjIsNyArMTYzNCwxMCBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlyYWRlb25fZG9fY3Bfc3RhcnQoZGV2X3ByaXYpOworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I2MDApCisJCXI2MDBfZG9fY3Bfc3RhcnQoZGV2X3ByaXYpOworCWVsc2UKKwkJcmFkZW9uX2RvX2NwX3N0YXJ0KGRldl9wcml2KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTM5Myw3ICsxNjY4LDEwIEBACiAJICogY29kZSBzbyB0aGF0IHRoZSBEUk0gaW9jdGwgd3JhcHBlciBjYW4gdHJ5IGFnYWluLgogCSAqLwogCWlmIChzdG9wLT5pZGxlKSB7Ci0JCXJldCA9IHJhZGVvbl9kb19jcF9pZGxlKGRldl9wcml2KTsKKwkJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKKwkJCXJldCA9IHI2MDBfZG9fY3BfaWRsZShkZXZfcHJpdik7CisJCWVsc2UKKwkJCXJldCA9IHJhZGVvbl9kb19jcF9pZGxlKGRldl9wcml2KTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiByZXQ7CiAJfQpAQCAtMTQwMiwxMCArMTY4MCwxNiBAQAogCSAqIHdlIHdpbGwgZ2V0IHNvbWUgZHJvcHBlZCB0cmlhbmdsZXMgYXMgdGhleSB3b24ndCBiZSBmdWxseQogCSAqIHJlbmRlcmVkIGJlZm9yZSB0aGUgQ1AgaXMgc2h1dCBkb3duLgogCSAqLwotCXJhZGVvbl9kb19jcF9zdG9wKGRldl9wcml2KTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQlyNjAwX2RvX2NwX3N0b3AoZGV2X3ByaXYpOworCWVsc2UKKwkJcmFkZW9uX2RvX2NwX3N0b3AoZGV2X3ByaXYpOwogCiAJLyogUmVzZXQgdGhlIGVuZ2luZSAqLwotCXJhZGVvbl9kb19lbmdpbmVfcmVzZXQoZGV2KTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQlyNjAwX2RvX2VuZ2luZV9yZXNldChkZXYpOworCWVsc2UKKwkJcmFkZW9uX2RvX2VuZ2luZV9yZXNldChkZXYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDE4LDI5ICsxNzAyLDQ3IEBACiAJaWYgKGRldl9wcml2KSB7CiAJCWlmIChkZXZfcHJpdi0+Y3BfcnVubmluZykgewogCQkJLyogU3RvcCB0aGUgY3AgKi8KLQkJCXdoaWxlICgocmV0ID0gcmFkZW9uX2RvX2NwX2lkbGUoZGV2X3ByaXYpKSAhPSAwKSB7Ci0JCQkJRFJNX0RFQlVHKCJyYWRlb25fZG9fY3BfaWRsZSAlZFxuIiwgcmV0KTsKKwkJCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I2MDApIHsKKwkJCQl3aGlsZSAoKHJldCA9IHI2MDBfZG9fY3BfaWRsZShkZXZfcHJpdikpICE9IDApIHsKKwkJCQkJRFJNX0RFQlVHKCJyYWRlb25fZG9fY3BfaWRsZSAlZFxuIiwgcmV0KTsKICNpZmRlZiBfX2xpbnV4X18KLQkJCQlzY2hlZHVsZSgpOworCQkJCQlzY2hlZHVsZSgpOwogI2Vsc2UKLQkJCQl0c2xlZXAoJnJldCwgUFpFUk8sICJyZG5yZWwiLCAxKTsKKwkJCQkJdHNsZWVwKCZyZXQsIFBaRVJPLCAicmRucmVsIiwgMSk7CiAjZW5kaWYKKwkJCQl9CisJCQl9IGVsc2UgeworCQkJCXdoaWxlICgocmV0ID0gcmFkZW9uX2RvX2NwX2lkbGUoZGV2X3ByaXYpKSAhPSAwKSB7CisJCQkJCURSTV9ERUJVRygicmFkZW9uX2RvX2NwX2lkbGUgJWRcbiIsIHJldCk7CisjaWZkZWYgX19saW51eF9fCisJCQkJCXNjaGVkdWxlKCk7CisjZWxzZQorCQkJCQl0c2xlZXAoJnJldCwgUFpFUk8sICJyZG5yZWwiLCAxKTsKKyNlbmRpZgorCQkJCX0KIAkJCX0KLQkJCXJhZGVvbl9kb19jcF9zdG9wKGRldl9wcml2KTsKLQkJCXJhZGVvbl9kb19lbmdpbmVfcmVzZXQoZGV2KTsKKwkJCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I2MDApIHsKKwkJCQlyNjAwX2RvX2NwX3N0b3AoZGV2X3ByaXYpOworCQkJCXI2MDBfZG9fZW5naW5lX3Jlc2V0KGRldik7CisJCQl9IGVsc2UgeworCQkJCXJhZGVvbl9kb19jcF9zdG9wKGRldl9wcml2KTsKKwkJCQlyYWRlb25fZG9fZW5naW5lX3Jlc2V0KGRldik7CisJCQl9CiAJCX0KIAotCQkvKiBEaXNhYmxlICphbGwqIGludGVycnVwdHMgKi8KLQkJaWYgKGRldl9wcml2LT5tbWlvKQkvKiByZW1vdmUgdGhpcyBhZnRlciBwZXJtYW5lbnQgYWRkbWFwcyAqLwotCQkJUkFERU9OX1dSSVRFKFJBREVPTl9HRU5fSU5UX0NOVEwsIDApOworCQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPCBDSElQX1I2MDApIHsKKwkJCS8qIERpc2FibGUgKmFsbCogaW50ZXJydXB0cyAqLworCQkJaWYgKGRldl9wcml2LT5tbWlvKQkvKiByZW1vdmUgdGhpcyBhZnRlciBwZXJtYW5lbnQgYWRkbWFwcyAqLworCQkJCVJBREVPTl9XUklURShSQURFT05fR0VOX0lOVF9DTlRMLCAwKTsKIAotCQlpZiAoZGV2X3ByaXYtPm1taW8pIHsJLyogcmVtb3ZlIGFsbCBzdXJmYWNlcyAqLwotCQkJZm9yIChpID0gMDsgaSA8IFJBREVPTl9NQVhfU1VSRkFDRVM7IGkrKykgewotCQkJCVJBREVPTl9XUklURShSQURFT05fU1VSRkFDRTBfSU5GTyArIDE2ICogaSwgMCk7Ci0JCQkJUkFERU9OX1dSSVRFKFJBREVPTl9TVVJGQUNFMF9MT1dFUl9CT1VORCArCi0JCQkJCSAgICAgMTYgKiBpLCAwKTsKLQkJCQlSQURFT05fV1JJVEUoUkFERU9OX1NVUkZBQ0UwX1VQUEVSX0JPVU5EICsKLQkJCQkJICAgICAxNiAqIGksIDApOworCQkJaWYgKGRldl9wcml2LT5tbWlvKSB7CS8qIHJlbW92ZSBhbGwgc3VyZmFjZXMgKi8KKwkJCQlmb3IgKGkgPSAwOyBpIDwgUkFERU9OX01BWF9TVVJGQUNFUzsgaSsrKSB7CisJCQkJCVJBREVPTl9XUklURShSQURFT05fU1VSRkFDRTBfSU5GTyArIDE2ICogaSwgMCk7CisJCQkJCVJBREVPTl9XUklURShSQURFT05fU1VSRkFDRTBfTE9XRVJfQk9VTkQgKworCQkJCQkJICAgICAxNiAqIGksIDApOworCQkJCQlSQURFT05fV1JJVEUoUkFERU9OX1NVUkZBQ0UwX1VQUEVSX0JPVU5EICsKKwkJCQkJCSAgICAgMTYgKiBpLCAwKTsKKwkJCQl9CiAJCQl9CiAJCX0KIApAQCAtMTQ0OSw3ICsxNzUxLDEwIEBACiAJCXJhZGVvbl9tZW1fdGFrZWRvd24oJihkZXZfcHJpdi0+ZmJfaGVhcCkpOwogCiAJCS8qIGRlYWxsb2NhdGUga2VybmVsIHJlc291cmNlcyAqLwotCQlyYWRlb25fZG9fY2xlYW51cF9jcChkZXYpOworCQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQkJcjYwMF9kb19jbGVhbnVwX2NwKGRldik7CisJCWVsc2UKKwkJCXJhZGVvbl9kb19jbGVhbnVwX2NwKGRldik7CiAJfQogfQogCkBAIC0xNDY3LDcgKzE3NzIsMTAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmFkZW9uX2RvX2NwX3Jlc2V0KGRldl9wcml2KTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQlyNjAwX2RvX2NwX3Jlc2V0KGRldl9wcml2KTsKKwllbHNlCisJCXJhZGVvbl9kb19jcF9yZXNldChkZXZfcHJpdik7CiAKIAkvKiBUaGUgQ1AgaXMgbm8gbG9uZ2VyIHJ1bm5pbmcgYWZ0ZXIgYW4gZW5naW5lIHJlc2V0ICovCiAJZGV2X3ByaXYtPmNwX3J1bm5pbmcgPSAwOwpAQCAtMTQ4MiwyMyArMTc5MCwzNiBAQAogCiAJTE9DS19URVNUX1dJVEhfUkVUVVJOKGRldiwgZmlsZV9wcml2KTsKIAotCXJldHVybiByYWRlb25fZG9fY3BfaWRsZShkZXZfcHJpdik7CisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKKwkJcmV0dXJuIHI2MDBfZG9fY3BfaWRsZShkZXZfcHJpdik7CisJZWxzZQorCQlyZXR1cm4gcmFkZW9uX2RvX2NwX2lkbGUoZGV2X3ByaXYpOwogfQogCiAvKiBBZGRlZCBieSBDaGFybCBQLiBCb3RoYSB0byBjYWxsIHJhZGVvbl9kb19yZXN1bWVfY3AoKS4KICAqLwogaW50IHJhZGVvbl9jcF9yZXN1bWUoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7Ci0JcmV0dXJuIHJhZGVvbl9kb19yZXN1bWVfY3AoZGV2LCBmaWxlX3ByaXYpOworCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CisJRFJNX0RFQlVHKCJcbiIpOworCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKKwkJcmV0dXJuIHI2MDBfZG9fcmVzdW1lX2NwKGRldiwgZmlsZV9wcml2KTsKKwllbHNlCisJCXJldHVybiByYWRlb25fZG9fcmVzdW1lX2NwKGRldiwgZmlsZV9wcml2KTsKIH0KIAogaW50IHJhZGVvbl9lbmdpbmVfcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpCiB7CisJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAlEUk1fREVCVUcoIlxuIik7CiAKIAlMT0NLX1RFU1RfV0lUSF9SRVRVUk4oZGV2LCBmaWxlX3ByaXYpOwogCi0JcmV0dXJuIHJhZGVvbl9kb19lbmdpbmVfcmVzZXQoZGV2KTsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKQorCQlyZXR1cm4gcjYwMF9kb19lbmdpbmVfcmVzZXQoZGV2KTsKKwllbHNlCisJCXJldHVybiByYWRlb25fZG9fZW5naW5lX3Jlc2V0KGRldik7CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTE1NDgsNyArMTg2OSw3IEBACiAJc3RhcnQgPSBkZXZfcHJpdi0+bGFzdF9idWY7CiAKIAlmb3IgKHQgPSAwOyB0IDwgZGV2X3ByaXYtPnVzZWNfdGltZW91dDsgdCsrKSB7Ci0JCXUzMiBkb25lX2FnZSA9IEdFVF9TQ1JBVENIKDEpOworCQl1MzIgZG9uZV9hZ2UgPSBHRVRfU0NSQVRDSChkZXZfcHJpdiwgMSk7CiAJCURSTV9ERUJVRygiZG9uZV9hZ2UgPSAlZFxuIiwgZG9uZV9hZ2UpOwogCQlmb3IgKGkgPSBzdGFydDsgaSA8IGRtYS0+YnVmX2NvdW50OyBpKyspIHsKIAkJCWJ1ZiA9IGRtYS0+YnVmbGlzdFtpXTsKQEAgLTE1ODIsOCArMTkwMyw5IEBACiAJc3RydWN0IGRybV9idWYgKmJ1ZjsKIAlpbnQgaSwgdDsKIAlpbnQgc3RhcnQ7Ci0JdTMyIGRvbmVfYWdlID0gRFJNX1JFQUQzMihkZXZfcHJpdi0+cmluZ19ycHRyLCBSQURFT05fU0NSQVRDSE9GRigxKSk7CisJdTMyIGRvbmVfYWdlOwogCisJZG9uZV9hZ2UgPSByYWRlb25fcmVhZF9yaW5nX3JwdHIoZGV2X3ByaXYsIFJBREVPTl9TQ1JBVENIT0ZGKDEpKTsKIAlpZiAoKytkZXZfcHJpdi0+bGFzdF9idWYgPj0gZG1hLT5idWZfY291bnQpCiAJCWRldl9wcml2LT5sYXN0X2J1ZiA9IDA7CiAKQEAgLTE4NTQsMyArMjE3Niw0MSBAQAogCWRldi0+ZGV2X3ByaXZhdGUgPSBOVUxMOwogCXJldHVybiAwOwogfQorCit2b2lkIHJhZGVvbl9jb21taXRfcmluZyhkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpCit7CisJaW50IGk7CisJdTMyICpyaW5nOworCWludCB0YWlsX2FsaWduZWQ7CisKKwkvKiBjaGVjayBpZiB0aGUgcmluZyBpcyBwYWRkZWQgb3V0IHRvIDE2LWR3b3JkIGFsaWdubWVudCAqLworCisJdGFpbF9hbGlnbmVkID0gZGV2X3ByaXYtPnJpbmcudGFpbCAmIDB4ZjsKKwlpZiAodGFpbF9hbGlnbmVkKSB7CisJCWludCBudW1fcDIgPSAxNiAtIHRhaWxfYWxpZ25lZDsKKworCQlyaW5nID0gZGV2X3ByaXYtPnJpbmcuc3RhcnQ7CisJCS8qIHBhZCB3aXRoIHNvbWUgQ1BfUEFDS0VUMiAqLworCQlmb3IgKGkgPSAwOyBpIDwgbnVtX3AyOyBpKyspCisJCQlyaW5nW2Rldl9wcml2LT5yaW5nLnRhaWwgKyBpXSA9IENQX1BBQ0tFVDIoKTsKKworCQlkZXZfcHJpdi0+cmluZy50YWlsICs9IGk7CisKKwkJZGV2X3ByaXYtPnJpbmcuc3BhY2UgLT0gbnVtX3AyICogc2l6ZW9mKHUzMik7CisJfQorCisJZGV2X3ByaXYtPnJpbmcudGFpbCAmPSBkZXZfcHJpdi0+cmluZy50YWlsX21hc2s7CisKKwlEUk1fTUVNT1JZQkFSUklFUigpOworCUdFVF9SSU5HX0hFQUQoIGRldl9wcml2ICk7CisKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKSB7CisJCVJBREVPTl9XUklURShSNjAwX0NQX1JCX1dQVFIsIGRldl9wcml2LT5yaW5nLnRhaWwpOworCQkvKiByZWFkIGZyb20gUENJIGJ1cyB0byBlbnN1cmUgY29ycmVjdCBwb3N0aW5nICovCisJCVJBREVPTl9SRUFEKFI2MDBfQ1BfUkJfUlBUUik7CisJfSBlbHNlIHsKKwkJUkFERU9OX1dSSVRFKFJBREVPTl9DUF9SQl9XUFRSLCBkZXZfcHJpdi0+cmluZy50YWlsKTsKKwkJLyogcmVhZCBmcm9tIFBDSSBidXMgdG8gZW5zdXJlIGNvcnJlY3QgcG9zdGluZyAqLworCQlSQURFT05fUkVBRChSQURFT05fQ1BfUkJfUlBUUik7CisJfQorfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYwppbmRleCBmZWYyMDc4Li4xM2E2MGY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuYwpAQCAtNDEsMjMgKzQxLDE1IEBACiBNT0RVTEVfUEFSTV9ERVNDKG5vX3diLCAiRGlzYWJsZSBBR1Agd3JpdGViYWNrIGZvciBzY3JhdGNoIHJlZ2lzdGVycyIpOwogbW9kdWxlX3BhcmFtX25hbWVkKG5vX3diLCByYWRlb25fbm9fd2IsIGludCwgMDQ0NCk7CiAKLXN0YXRpYyBpbnQgZHJpX2xpYnJhcnlfbmFtZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBjaGFyICpidWYpCi17Ci0JZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKLQlpbnQgZmFtaWx5ID0gZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLOwotCi0JcmV0dXJuIHNucHJpbnRmKGJ1ZiwgUEFHRV9TSVpFLCAiJXNcbiIsCi0JCSAgICAgICAgKGZhbWlseSA8IENISVBfUjIwMCkgPyAicmFkZW9uIiA6Ci0JCSAgICAgICAgKChmYW1pbHkgPCBDSElQX1IzMDApID8gInIyMDAiIDoKLQkJICAgICAgICAicjMwMCIpKTsKLX0KLQogc3RhdGljIGludCByYWRlb25fc3VzcGVuZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAorCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I2MDApCisJCXJldHVybiAwOworCiAJLyogRGlzYWJsZSAqYWxsKiBpbnRlcnJ1cHRzICovCi0JaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2OTApCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2MDApCiAJCVJBREVPTl9XUklURShSNTAwX0R4TU9ERV9JTlRfTUFTSywgMCk7CiAJUkFERU9OX1dSSVRFKFJBREVPTl9HRU5fSU5UX0NOVEwsIDApOwogCXJldHVybiAwOwpAQCAtNjcsOCArNTksMTEgQEAKIHsKIAlkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYgPSBkZXYtPmRldl9wcml2YXRlOwogCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkKKwkJcmV0dXJuIDA7CisKIAkvKiBSZXN0b3JlIGludGVycnVwdCByZWdpc3RlcnMgKi8KLQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzYwMCkKIAkJUkFERU9OX1dSSVRFKFI1MDBfRHhNT0RFX0lOVF9NQVNLLCBkZXZfcHJpdi0+cjUwMF9kaXNwX2lycV9yZWcpOwogCVJBREVPTl9XUklURShSQURFT05fR0VOX0lOVF9DTlRMLCBkZXZfcHJpdi0+aXJxX2VuYWJsZV9yZWcpOwogCXJldHVybiAwOwpAQCAtOTUsNyArOTAsNiBAQAogCS5nZXRfdmJsYW5rX2NvdW50ZXIgPSByYWRlb25fZ2V0X3ZibGFua19jb3VudGVyLAogCS5lbmFibGVfdmJsYW5rID0gcmFkZW9uX2VuYWJsZV92YmxhbmssCiAJLmRpc2FibGVfdmJsYW5rID0gcmFkZW9uX2Rpc2FibGVfdmJsYW5rLAotCS5kcmlfbGlicmFyeV9uYW1lID0gZHJpX2xpYnJhcnlfbmFtZSwKIAkubWFzdGVyX2NyZWF0ZSA9IHJhZGVvbl9tYXN0ZXJfY3JlYXRlLAogCS5tYXN0ZXJfZGVzdHJveSA9IHJhZGVvbl9tYXN0ZXJfZGVzdHJveSwKIAkuaXJxX3ByZWluc3RhbGwgPSByYWRlb25fZHJpdmVyX2lycV9wcmVpbnN0YWxsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fZHJ2LmggYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaAppbmRleCA0OTBiYzdjLi5lZDRkMjdlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaAorKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9kcnYuaApAQCAtMTI2LDYgKzEyNiw3IEBACiAJQ0hJUF9SVjQxMCwKIAlDSElQX1JTNDAwLAogCUNISVBfUlM0ODAsCisJQ0hJUF9SUzYwMCwKIAlDSElQX1JTNjkwLAogCUNISVBfUlM3NDAsCiAJQ0hJUF9SVjUxNSwKQEAgLTEzNCw2ICsxMzUsMTYgQEAKIAlDSElQX1JWNTYwLAogCUNISVBfUlY1NzAsCiAJQ0hJUF9SNTgwLAorCUNISVBfUjYwMCwKKwlDSElQX1JWNjEwLAorCUNISVBfUlY2MzAsCisJQ0hJUF9SVjYyMCwKKwlDSElQX1JWNjM1LAorCUNISVBfUlY2NzAsCisJQ0hJUF9SUzc4MCwKKwlDSElQX1JWNzcwLAorCUNISVBfUlY3MzAsCisJQ0hJUF9SVjcxMCwKIAlDSElQX0xBU1QsCiB9OwogCkBAIC0xNjAsMTAgKzE3MSw2IEBACiAJUkFERU9OX0lTX0lHUEdBUlQgPSAweDAxMDAwMDAwVUwsCiB9OwogCi0jZGVmaW5lIEdFVF9SSU5HX0hFQUQoZGV2X3ByaXYpCShkZXZfcHJpdi0+d3JpdGViYWNrX3dvcmtzID8gXAotICAgICAgICBEUk1fUkVBRDMyKCAgKGRldl9wcml2KS0+cmluZ19ycHRyLCAwICkgOiBSQURFT05fUkVBRChSQURFT05fQ1BfUkJfUlBUUikpCi0jZGVmaW5lIFNFVF9SSU5HX0hFQUQoZGV2X3ByaXYsdmFsKQlEUk1fV1JJVEUzMiggKGRldl9wcml2KS0+cmluZ19ycHRyLCAwLCAodmFsKSApCi0KIHR5cGVkZWYgc3RydWN0IGRybV9yYWRlb25fZnJlZWxpc3QgewogCXVuc2lnbmVkIGludCBhZ2U7CiAJc3RydWN0IGRybV9idWYgKmJ1ZjsKQEAgLTIyMSwxMCArMjI4LDExIEBACiAJdTMyIHVwcGVyOwogCXUzMiBmbGFnczsKIAlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdjsKKyNkZWZpbmUgUENJR0FSVF9GSUxFX1BSSVYJKCh2b2lkICopIC0xTCkKIH07CiAKLSNkZWZpbmUgUkFERU9OX0ZMVVNIX0VNSVRFRAkoMSA8IDApCi0jZGVmaW5lIFJBREVPTl9QVVJHRV9FTUlURUQJKDEgPCAxKQorI2RlZmluZSBSQURFT05fRkxVU0hfRU1JVEVECSgxIDw8IDApCisjZGVmaW5lIFJBREVPTl9QVVJHRV9FTUlURUQJKDEgPDwgMSkKIAogc3RydWN0IGRybV9yYWRlb25fbWFzdGVyX3ByaXZhdGUgewogCWRybV9sb2NhbF9tYXBfdCAqc2FyZWE7CkBAIC0yNDgsNyArMjU2LDYgQEAKIAlkcm1fcmFkZW9uX2ZyZWVsaXN0X3QgKmhlYWQ7CiAJZHJtX3JhZGVvbl9mcmVlbGlzdF90ICp0YWlsOwogCWludCBsYXN0X2J1ZjsKLQl2b2xhdGlsZSB1MzIgKnNjcmF0Y2g7CiAJaW50IHdyaXRlYmFja193b3JrczsKIAogCWludCB1c2VjX3RpbWVvdXQ7CkBAIC0zMTYsMTEgKzMyMywzMSBAQAogCiAJLyogc3RhcnRpbmcgZnJvbSBoZXJlIG9uLCBkYXRhIGlzIHByZXNlcnZlZCBhY2Nyb3NzIGFuIG9wZW4gKi8KIAl1aW50MzJfdCBmbGFnczsJCS8qIHNlZSByYWRlb25fY2hpcF9mbGFncyAqLwotCXVuc2lnbmVkIGxvbmcgZmJfYXBlcl9vZmZzZXQ7CisJcmVzb3VyY2Vfc2l6ZV90IGZiX2FwZXJfb2Zmc2V0OwogCiAJaW50IG51bV9nYl9waXBlczsKIAlpbnQgdHJhY2tfZmx1c2g7CiAJZHJtX2xvY2FsX21hcF90ICptbWlvOworCisJLyogcjZ4eC9yN3h4IHBpcGUvc2hhZGVyIGNvbmZpZyAqLworCWludCByNjAwX21heF9waXBlczsKKwlpbnQgcjYwMF9tYXhfdGlsZV9waXBlczsKKwlpbnQgcjYwMF9tYXhfc2ltZHM7CisJaW50IHI2MDBfbWF4X2JhY2tlbmRzOworCWludCByNjAwX21heF9ncHJzOworCWludCByNjAwX21heF90aHJlYWRzOworCWludCByNjAwX21heF9zdGFja19lbnRyaWVzOworCWludCByNjAwX21heF9od19jb250ZXh0czsKKwlpbnQgcjYwMF9tYXhfZ3NfdGhyZWFkczsKKwlpbnQgcjYwMF9zeF9tYXhfZXhwb3J0X3NpemU7CisJaW50IHI2MDBfc3hfbWF4X2V4cG9ydF9wb3Nfc2l6ZTsKKwlpbnQgcjYwMF9zeF9tYXhfZXhwb3J0X3NteF9zaXplOworCWludCByNjAwX3NxX251bV9jZl9pbnN0czsKKwlpbnQgcjcwMF9zeF9udW1fb2Zfc2V0czsKKwlpbnQgcjcwMF9zY19wcmltX2ZpZm9fc2l6ZTsKKwlpbnQgcjcwMF9zY19oaXpfdGlsZV9maWZvX3NpemU7CisJaW50IHI3MDBfc2NfZWFybHl6X3RpbGVfZmlmb19maXplOworCiB9IGRybV9yYWRlb25fcHJpdmF0ZV90OwogCiB0eXBlZGVmIHN0cnVjdCBkcm1fcmFkZW9uX2J1Zl9wcml2IHsKQEAgLTMzOCw2ICszNjUsMTIgQEAKIGV4dGVybiBzdHJ1Y3QgZHJtX2lvY3RsX2Rlc2MgcmFkZW9uX2lvY3Rsc1tdOwogZXh0ZXJuIGludCByYWRlb25fbWF4X2lvY3RsOwogCitleHRlcm4gdTMyIHJhZGVvbl9nZXRfcmluZ19oZWFkKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdik7CitleHRlcm4gdm9pZCByYWRlb25fc2V0X3JpbmdfaGVhZChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiB2YWwpOworCisjZGVmaW5lIEdFVF9SSU5HX0hFQUQoZGV2X3ByaXYpCXJhZGVvbl9nZXRfcmluZ19oZWFkKGRldl9wcml2KQorI2RlZmluZSBTRVRfUklOR19IRUFEKGRldl9wcml2LCB2YWwpIHJhZGVvbl9zZXRfcmluZ19oZWFkKGRldl9wcml2LCB2YWwpCisKIC8qIENoZWNrIHdoZXRoZXIgdGhlIGdpdmVuIGhhcmR3YXJlIGFkZHJlc3MgaXMgaW5zaWRlIHRoZSBmcmFtZWJ1ZmZlciBvciB0aGUKICAqIEdBUlQgYXJlYS4KICAqLwpAQCAtMzY0LDYgKzM5Nyw5IEBACiBleHRlcm4gaW50IHJhZGVvbl9mdWxsc2NyZWVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIGV4dGVybiBpbnQgcmFkZW9uX2NwX2J1ZmZlcnMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdm9pZCAqZGF0YSwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwogZXh0ZXJuIHUzMiByYWRlb25fcmVhZF9mYl9sb2NhdGlvbihkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpOworZXh0ZXJuIHZvaWQgcmFkZW9uX3dyaXRlX2FncF9sb2NhdGlvbihkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiBhZ3BfbG9jKTsKK2V4dGVybiB2b2lkIHJhZGVvbl93cml0ZV9hZ3BfYmFzZShkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHU2NCBhZ3BfYmFzZSk7CitleHRlcm4gdTMyIFJBREVPTl9SRUFEX01NKGRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiwgaW50IGFkZHIpOwogCiBleHRlcm4gdm9pZCByYWRlb25fZnJlZWxpc3RfcmVzZXQoc3RydWN0IGRybV9kZXZpY2UgKiBkZXYpOwogZXh0ZXJuIHN0cnVjdCBkcm1fYnVmICpyYWRlb25fZnJlZWxpc3RfZ2V0KHN0cnVjdCBkcm1fZGV2aWNlICogZGV2KTsKQEAgLTM4Myw2ICs0MTksMTAgQEAKIGV4dGVybiB2b2lkIHJhZGVvbl9tZW1fcmVsZWFzZShzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdiwKIAkJCSAgICAgICBzdHJ1Y3QgbWVtX2Jsb2NrICpoZWFwKTsKIAorZXh0ZXJuIHZvaWQgcmFkZW9uX2VuYWJsZV9ibShzdHJ1Y3QgZHJtX3JhZGVvbl9wcml2YXRlICpkZXZfcHJpdik7CitleHRlcm4gdTMyIHJhZGVvbl9yZWFkX3JpbmdfcnB0cihkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiBvZmYpOworZXh0ZXJuIHZvaWQgcmFkZW9uX3dyaXRlX3JpbmdfcnB0cihkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIHUzMiBvZmYsIHUzMiB2YWwpOworCiAJCQkJLyogcmFkZW9uX2lycS5jICovCiBleHRlcm4gdm9pZCByYWRlb25faXJxX3NldF9zdGF0ZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB1MzIgbWFzaywgaW50IHN0YXRlKTsKIGV4dGVybiBpbnQgcmFkZW9uX2lycV9lbWl0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKQEAgLTQyMyw2ICs0NjMsMjEgQEAKIAkJCSAgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYsCiAJCQkgICAgIGRybV9yYWRlb25fa2NtZF9idWZmZXJfdCAqY21kYnVmKTsKIAorLyogcjYwMF9jcC5jICovCitleHRlcm4gaW50IHI2MDBfZG9fZW5naW5lX3Jlc2V0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIGludCByNjAwX2RvX2NsZWFudXBfY3Aoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gaW50IHI2MDBfZG9faW5pdF9jcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBkcm1fcmFkZW9uX2luaXRfdCAqaW5pdCwKKwkJCSAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKK2V4dGVybiBpbnQgcjYwMF9kb19yZXN1bWVfY3Aoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOworZXh0ZXJuIGludCByNjAwX2RvX2NwX2lkbGUoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KTsKK2V4dGVybiB2b2lkIHI2MDBfZG9fY3Bfc3RhcnQoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KTsKK2V4dGVybiB2b2lkIHI2MDBfZG9fY3BfcmVzZXQoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KTsKK2V4dGVybiB2b2lkIHI2MDBfZG9fY3Bfc3RvcChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYpOworZXh0ZXJuIGludCByNjAwX2NwX2Rpc3BhdGNoX2luZGlyZWN0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJICAgICBzdHJ1Y3QgZHJtX2J1ZiAqYnVmLCBpbnQgc3RhcnQsIGludCBlbmQpOworZXh0ZXJuIGludCByNjAwX3BhZ2VfdGFibGVfaW5pdChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIHI2MDBfcGFnZV90YWJsZV9jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fYXRpX3BjaWdhcnRfaW5mbyAqZ2FydF9pbmZvKTsKKwogLyogRmxhZ3MgZm9yIHN0YXRzLmJveGVzCiAgKi8KICNkZWZpbmUgUkFERU9OX0JPWF9ETUFfSURMRSAgICAgIDB4MQpAQCAtNDM0LDYgKzQ4OSw4IEBACiAvKiBSZWdpc3RlciBkZWZpbml0aW9ucywgcmVnaXN0ZXIgYWNjZXNzIG1hY3JvcyBhbmQgZHJtQWRkTWFwIGNvbnN0YW50cwogICogZm9yIFJhZGVvbiBrZXJuZWwgZHJpdmVyLgogICovCisjZGVmaW5lIFJBREVPTl9NTV9JTkRFWAkJICAgICAgICAweDAwMDAKKyNkZWZpbmUgUkFERU9OX01NX0RBVEEJCSAgICAgICAgMHgwMDA0CiAKICNkZWZpbmUgUkFERU9OX0FHUF9DT01NQU5ECQkweDBmNjAKICNkZWZpbmUgUkFERU9OX0FHUF9DT01NQU5EX1BDSV9DT05GSUcgICAweDAwNjAJLyogb2Zmc2V0IGluIFBDSSBjb25maWcgKi8KQEAgLTU1Niw2ICs2MTMsNTYgQEAKICNkZWZpbmUgUlM2OTBfTUNfQUdQX0JBU0UgICAgICAgICAgICAgICAweDEwMgogI2RlZmluZSBSUzY5MF9NQ19BR1BfQkFTRV8yICAgICAgICAgICAgIDB4MTAzCiAKKyNkZWZpbmUgUlM2MDBfTUNfSU5ERVggICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzAKKyMgICAgICAgZGVmaW5lIFJTNjAwX01DX0FERFJfTUFTSyAgICAgICAgICAgICAgIDB4ZmZmZgorIyAgICAgICBkZWZpbmUgUlM2MDBfTUNfSU5EX1NFUV9SQlNfMCAgICAgICAgICAgKDEgPDwgMTYpCisjICAgICAgIGRlZmluZSBSUzYwMF9NQ19JTkRfU0VRX1JCU18xICAgICAgICAgICAoMSA8PCAxNykKKyMgICAgICAgZGVmaW5lIFJTNjAwX01DX0lORF9TRVFfUkJTXzIgICAgICAgICAgICgxIDw8IDE4KQorIyAgICAgICBkZWZpbmUgUlM2MDBfTUNfSU5EX1NFUV9SQlNfMyAgICAgICAgICAgKDEgPDwgMTkpCisjICAgICAgIGRlZmluZSBSUzYwMF9NQ19JTkRfQUlDX1JCUyAgICAgICAgICAgICAoMSA8PCAyMCkKKyMgICAgICAgZGVmaW5lIFJTNjAwX01DX0lORF9DSVRGX0FSQjAgICAgICAgICAgICgxIDw8IDIxKQorIyAgICAgICBkZWZpbmUgUlM2MDBfTUNfSU5EX0NJVEZfQVJCMSAgICAgICAgICAgKDEgPDwgMjIpCisjICAgICAgIGRlZmluZSBSUzYwMF9NQ19JTkRfV1JfRU4gICAgICAgICAgICAgICAoMSA8PCAyMykKKyNkZWZpbmUgUlM2MDBfTUNfREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NzQKKworI2RlZmluZSBSUzYwMF9NQ19TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgMHgwCisjICAgICAgIGRlZmluZSBSUzYwMF9NQ19JRExFICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBSUzYwMF9NQ19GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgMHg0CisjZGVmaW5lIFJTNjAwX01DX0FHUF9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAweDUKKyNkZWZpbmUgUlM2MDBfQUdQX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NgorI2RlZmluZSBSUzYwMF9BR1BfQkFTRV8yICAgICAgICAgICAgICAgICAgICAgICAgMHg3CisjZGVmaW5lIFJTNjAwX01DX0NOVEwxICAgICAgICAgICAgICAgICAgICAgICAgICAweDkKKyMgICAgICAgZGVmaW5lIFJTNjAwX0VOQUJMRV9QQUdFX1RBQkxFUyAgICAgICAgICgxIDw8IDI2KQorI2RlZmluZSBSUzYwMF9NQ19QVDBfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgMHgxMDAKKyMgICAgICAgZGVmaW5lIFJTNjAwX0VOQUJMRV9QVCAgICAgICAgICAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBSUzYwMF9FRkZFQ1RJVkVfTDJfQ0FDSEVfU0laRSh4KSAoKHgpIDw8IDE1KQorIyAgICAgICBkZWZpbmUgUlM2MDBfRUZGRUNUSVZFX0wyX1FVRVVFX1NJWkUoeCkgKCh4KSA8PCAyMSkKKyMgICAgICAgZGVmaW5lIFJTNjAwX0lOVkFMSURBVEVfQUxMX0wxX1RMQlMgICAgICgxIDw8IDI4KQorIyAgICAgICBkZWZpbmUgUlM2MDBfSU5WQUxJREFURV9MMl9DQUNIRSAgICAgICAgKDEgPDwgMjkpCisjZGVmaW5lIFJTNjAwX01DX1BUMF9DT05URVhUMF9DTlRMICAgICAgICAgICAgICAweDEwMgorIyAgICAgICBkZWZpbmUgUlM2MDBfRU5BQkxFX1BBR0VfVEFCTEUgICAgICAgICAgKDEgPDwgMCkKKyMgICAgICAgZGVmaW5lIFJTNjAwX1BBR0VfVEFCTEVfVFlQRV9GTEFUICAgICAgICgwIDw8IDEpCisjZGVmaW5lIFJTNjAwX01DX1BUMF9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIgICAweDExMgorI2RlZmluZSBSUzYwMF9NQ19QVDBfU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiAgMHgxMTQKKyNkZWZpbmUgUlM2MDBfTUNfUFQwX0NPTlRFWFQwX0RFRkFVTFRfUkVBRF9BRERSIDB4MTFjCisjZGVmaW5lIFJTNjAwX01DX1BUMF9DT05URVhUMF9GTEFUX0JBU0VfQUREUiAgICAweDEyYworI2RlZmluZSBSUzYwMF9NQ19QVDBfQ09OVEVYVDBfRkxBVF9TVEFSVF9BRERSICAgMHgxM2MKKyNkZWZpbmUgUlM2MDBfTUNfUFQwX0NPTlRFWFQwX0ZMQVRfRU5EX0FERFIgICAgIDB4MTRjCisjZGVmaW5lIFJTNjAwX01DX1BUMF9DTElFTlQwX0NOVEwgICAgICAgICAgICAgICAweDE2YworIyAgICAgICBkZWZpbmUgUlM2MDBfRU5BQkxFX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUgICAgICAgKDEgPDwgMCkKKyMgICAgICAgZGVmaW5lIFJTNjAwX1RSQU5TTEFUSU9OX01PREVfT1ZFUlJJREUgICAgICAgICAgICAgICgxIDw8IDEpCisjICAgICAgIGRlZmluZSBSUzYwMF9TWVNURU1fQUNDRVNTX01PREVfTUFTSyAgICAgICAgICAgICAgICAoMyA8PCA4KQorIyAgICAgICBkZWZpbmUgUlM2MDBfU1lTVEVNX0FDQ0VTU19NT0RFX1BBX09OTFkgICAgICAgICAgICAgKDAgPDwgOCkKKyMgICAgICAgZGVmaW5lIFJTNjAwX1NZU1RFTV9BQ0NFU1NfTU9ERV9VU0VfU1lTX01BUCAgICAgICAgICgxIDw8IDgpCisjICAgICAgIGRlZmluZSBSUzYwMF9TWVNURU1fQUNDRVNTX01PREVfSU5fU1lTICAgICAgICAgICAgICAoMiA8PCA4KQorIyAgICAgICBkZWZpbmUgUlM2MDBfU1lTVEVNX0FDQ0VTU19NT0RFX05PVF9JTl9TWVMgICAgICAgICAgKDMgPDwgOCkKKyMgICAgICAgZGVmaW5lIFJTNjAwX1NZU1RFTV9BUEVSVFVSRV9VTk1BUFBFRF9BQ0NFU1NfUEFTU1RIUk9VR0ggICAgICAgICgwIDw8IDEwKQorIyAgICAgICBkZWZpbmUgUlM2MDBfU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0FDQ0VTU19ERUZBVUxUX1BBR0UgICAgICAgKDEgPDwgMTApCisjICAgICAgIGRlZmluZSBSUzYwMF9FRkZFQ1RJVkVfTDFfQ0FDSEVfU0laRSh4KSAoKHgpIDw8IDExKQorIyAgICAgICBkZWZpbmUgUlM2MDBfRU5BQkxFX0ZSQUdNRU5UX1BST0NFU1NJTkcgKDEgPDwgMTQpCisjICAgICAgIGRlZmluZSBSUzYwMF9FRkZFQ1RJVkVfTDFfUVVFVUVfU0laRSh4KSAoKHgpIDw8IDE1KQorIyAgICAgICBkZWZpbmUgUlM2MDBfSU5WQUxJREFURV9MMV9UTEIgICAgICAgICAgKDEgPDwgMjApCisKICNkZWZpbmUgUjUyMF9NQ19JTkRfSU5ERVggMHg3MAogI2RlZmluZSBSNTIwX01DX0lORF9XUl9FTiAoMSA8PCAyNCkKICNkZWZpbmUgUjUyMF9NQ19JTkRfREFUQSAgMHg3NApAQCAtNTgwLDcgKzY4Nyw2IEBACiAvKiBwaXBlIGNvbmZpZyByZWdzICovCiAjZGVmaW5lIFI0MDBfR0JfUElQRV9TRUxFQ1QgICAgICAgICAgICAgMHg0MDJjCiAjZGVmaW5lIFI1MDBfRFlOX1NDTEtfUFdNRU1fUElQRSAgICAgICAgMHgwMDBkIC8qIFBMTCAqLwotI2RlZmluZSBSNTAwX1NVX1JFR19ERVNUICAgICAgICAgICAgICAgIDB4NDJjOAogI2RlZmluZSBSMzAwX0dCX1RJTEVfQ09ORklHICAgICAgICAgICAgIDB4NDAxOAogIyAgICAgICBkZWZpbmUgUjMwMF9FTkFCTEVfVElMSU5HICAgICAgICgxIDw8IDApCiAjICAgICAgIGRlZmluZSBSMzAwX1BJUEVfQ09VTlRfUlYzNTAgICAgKDAgPDwgMSkKQEAgLTYzOSw5ICs3NDUsMjIgQEAKIAogI2RlZmluZSBSQURFT05fU0NSQVRDSE9GRiggeCApCQkoUkFERU9OX1NDUkFUQ0hfUkVHX09GRlNFVCArIDQqKHgpKQogCi0jZGVmaW5lIEdFVF9TQ1JBVENIKCB4ICkJKGRldl9wcml2LT53cml0ZWJhY2tfd29ya3MJCQlcCi0JCQkJPyBEUk1fUkVBRDMyKCBkZXZfcHJpdi0+cmluZ19ycHRyLCBSQURFT05fU0NSQVRDSE9GRih4KSApIFwKLQkJCQk6IFJBREVPTl9SRUFEKCBSQURFT05fU0NSQVRDSF9SRUcwICsgNCooeCkgKSApCitleHRlcm4gdTMyIHJhZGVvbl9nZXRfc2NyYXRjaChkcm1fcmFkZW9uX3ByaXZhdGVfdCAqZGV2X3ByaXYsIGludCBpbmRleCk7CisKKyNkZWZpbmUgR0VUX1NDUkFUQ0goZGV2X3ByaXYsIHgpIHJhZGVvbl9nZXRfc2NyYXRjaChkZXZfcHJpdiwgeCkKKworI2RlZmluZSBSNjAwX1NDUkFUQ0hfUkVHMAkJMHg4NTAwCisjZGVmaW5lIFI2MDBfU0NSQVRDSF9SRUcxCQkweDg1MDQKKyNkZWZpbmUgUjYwMF9TQ1JBVENIX1JFRzIJCTB4ODUwOAorI2RlZmluZSBSNjAwX1NDUkFUQ0hfUkVHMwkJMHg4NTBjCisjZGVmaW5lIFI2MDBfU0NSQVRDSF9SRUc0CQkweDg1MTAKKyNkZWZpbmUgUjYwMF9TQ1JBVENIX1JFRzUJCTB4ODUxNAorI2RlZmluZSBSNjAwX1NDUkFUQ0hfUkVHNgkJMHg4NTE4CisjZGVmaW5lIFI2MDBfU0NSQVRDSF9SRUc3CQkweDg1MWMKKyNkZWZpbmUgUjYwMF9TQ1JBVENIX1VNU0sJCTB4ODU0MAorI2RlZmluZSBSNjAwX1NDUkFUQ0hfQUREUgkJMHg4NTQ0CisKKyNkZWZpbmUgUjYwMF9TQ1JBVENIT0ZGKHgpCQkoUjYwMF9TQ1JBVENIX1JFR19PRkZTRVQgKyA0Kih4KSkKIAogI2RlZmluZSBSQURFT05fR0VOX0lOVF9DTlRMCQkweDAwNDAKICMJZGVmaW5lIFJBREVPTl9DUlRDX1ZCTEFOS19NQVNLCQkoMSA8PCAwKQpAQCAtOTIyLDYgKzEwNDEsNyBAQAogI2RlZmluZSBSQURFT05fQ1BfUkJfQ05UTAkJMHgwNzA0CiAjCWRlZmluZSBSQURFT05fQlVGX1NXQVBfMzJCSVQJCSgyIDw8IDE2KQogIwlkZWZpbmUgUkFERU9OX1JCX05PX1VQREFURQkJKDEgPDwgMjcpCisjCWRlZmluZSBSQURFT05fUkJfUlBUUl9XUl9FTkEJCSgxIDw8IDMxKQogI2RlZmluZSBSQURFT05fQ1BfUkJfUlBUUl9BRERSCQkweDA3MGMKICNkZWZpbmUgUkFERU9OX0NQX1JCX1JQVFIJCTB4MDcxMAogI2RlZmluZSBSQURFT05fQ1BfUkJfV1BUUgkJMHgwNzE0CkBAIC05ODMsNiArMTEwMywxNCBAQAogIwlkZWZpbmUgUkFERU9OX0NOVExfQklUQkxUX01VTFRJCQkweDAwMDA5QjAwCiAjCWRlZmluZSBSQURFT05fQ05UTF9TRVRfU0NJU1NPUlMJCTB4QzAwMDFFMDAKIAorIwlkZWZpbmUgUjYwMF9JVF9JTkRJUkVDVF9CVUZGRVIJCTB4MDAwMDMyMDAKKyMJZGVmaW5lIFI2MDBfSVRfTUVfSU5JVElBTElaRQkJMHgwMDAwNDQwMAorIwkgICAgICAgZGVmaW5lIFI2MDBfTUVfSU5JVElBTElaRV9ERVZJQ0VfSUQoeCkgKCh4KSA8PCAxNikKKyMJZGVmaW5lIFI2MDBfSVRfRVZFTlRfV1JJVEUJCTB4MDAwMDQ2MDAKKyMJZGVmaW5lIFI2MDBfSVRfU0VUX0NPTkZJR19SRUcJCTB4MDAwMDY4MDAKKyMJZGVmaW5lIFI2MDBfU0VUX0NPTkZJR19SRUdfT0ZGU0VUICAgICAgIDB4MDAwMDgwMDAKKyMJZGVmaW5lIFI2MDBfU0VUX0NPTkZJR19SRUdfRU5EICAgICAgICAgIDB4MDAwMGFjMDAKKwogI2RlZmluZSBSQURFT05fQ1BfUEFDS0VUX01BU0sJCTB4QzAwMDAwMDAKICNkZWZpbmUgUkFERU9OX0NQX1BBQ0tFVF9DT1VOVF9NQVNLCTB4M2ZmZjAwMDAKICNkZWZpbmUgUkFERU9OX0NQX1BBQ0tFVDBfUkVHX01BU0sJMHgwMDAwMDdmZgpAQCAtMTE4MSw2ICsxMzA5LDQyMiBAQAogI2RlZmluZSBSNTAwX0QxX1ZCTEFOS19JTlRFUlJVUFQgKDEgPDwgNCkKICNkZWZpbmUgUjUwMF9EMl9WQkxBTktfSU5URVJSVVBUICgxIDw8IDUpCiAKKy8qIFI2eHgvUjd4eCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUjYwMF9NQ19WTV9GQl9MT0NBVElPTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE4MAorI2RlZmluZSBSNjAwX01DX1ZNX0FHUF9UT1AgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMTg0CisjZGVmaW5lIFI2MDBfTUNfVk1fQUdQX0JPVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIxODgKKyNkZWZpbmUgUjYwMF9NQ19WTV9BR1BfQkFTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjE4YworI2RlZmluZSBSNjAwX01DX1ZNX1NZU1RFTV9BUEVSVFVSRV9MT1dfQUREUiAgICAgICAgICAgICAgICAgICAgMHgyMTkwCisjZGVmaW5lIFI2MDBfTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0hJR0hfQUREUiAgICAgICAgICAgICAgICAgICAweDIxOTQKKyNkZWZpbmUgUjYwMF9NQ19WTV9TWVNURU1fQVBFUlRVUkVfREVGQVVMVF9BRERSICAgICAgICAgICAgICAgIDB4MjE5OAorCisjZGVmaW5lIFI3MDBfTUNfVk1fRkJfTE9DQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMjQKKyNkZWZpbmUgUjcwMF9NQ19WTV9BR1BfVE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjAyOAorI2RlZmluZSBSNzAwX01DX1ZNX0FHUF9CT1QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMDJjCisjZGVmaW5lIFI3MDBfTUNfVk1fQUdQX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIwMzAKKyNkZWZpbmUgUjcwMF9NQ19WTV9TWVNURU1fQVBFUlRVUkVfTE9XX0FERFIgICAgICAgICAgICAgICAgICAgIDB4MjAzNAorI2RlZmluZSBSNzAwX01DX1ZNX1NZU1RFTV9BUEVSVFVSRV9ISUdIX0FERFIgICAgICAgICAgICAgICAgICAgMHgyMDM4CisjZGVmaW5lIFI3MDBfTUNfVk1fU1lTVEVNX0FQRVJUVVJFX0RFRkFVTFRfQUREUiAgICAgICAgICAgICAgICAweDIwM2MKKworI2RlZmluZSBSNjAwX01DRF9SRF9BX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMTljCisjZGVmaW5lIFI2MDBfTUNEX1JEX0JfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIxYTAKKworI2RlZmluZSBSNjAwX01DRF9XUl9BX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMWE0CisjZGVmaW5lIFI2MDBfTUNEX1dSX0JfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIxYTgKKworI2RlZmluZSBSNjAwX01DRF9SRF9TWVNfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMjAwCisjZGVmaW5lIFI2MDBfTUNEX1dSX1NZU19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyMTQKKworI2RlZmluZSBSNjAwX01DRF9SRF9HRlhfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMWZjCisjZGVmaW5lIFI2MDBfTUNEX1JEX0hEUF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyMDQKKyNkZWZpbmUgUjYwMF9NQ0RfUkRfUERNQV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIwOAorI2RlZmluZSBSNjAwX01DRF9SRF9TRU1fQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMjBjCisjZGVmaW5lIFI2MDBfTUNEX1dSX0dGWF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyMTAKKyNkZWZpbmUgUjYwMF9NQ0RfV1JfSERQX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIxOAorI2RlZmluZSBSNjAwX01DRF9XUl9QRE1BX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMjFjCisjZGVmaW5lIFI2MDBfTUNEX1dSX1NFTV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyMjAKKworIyAgICAgICBkZWZpbmUgUjYwMF9NQ0RfTDFfVExCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfTUNEX0wxX0ZSQUdfUFJPQyAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEpCisjICAgICAgIGRlZmluZSBSNjAwX01DRF9MMV9TVFJJQ1RfT1JERVJJTkcgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyKQorCisjICAgICAgIGRlZmluZSBSNjAwX01DRF9TWVNURU1fQUNDRVNTX01PREVfTUFTSyAgICAgICAgICAgICAgICAoMyA8PCA2KQorIyAgICAgICBkZWZpbmUgUjYwMF9NQ0RfU1lTVEVNX0FDQ0VTU19NT0RFX1BBX09OTFkgICAgICAgICAgICAgKDAgPDwgNikKKyMgICAgICAgZGVmaW5lIFI2MDBfTUNEX1NZU1RFTV9BQ0NFU1NfTU9ERV9VU0VfU1lTX01BUCAgICAgICAgICgxIDw8IDYpCisjICAgICAgIGRlZmluZSBSNjAwX01DRF9TWVNURU1fQUNDRVNTX01PREVfSU5fU1lTICAgICAgICAgICAgICAoMiA8PCA2KQorIyAgICAgICBkZWZpbmUgUjYwMF9NQ0RfU1lTVEVNX0FDQ0VTU19NT0RFX05PVF9JTl9TWVMgICAgICAgICAgKDMgPDwgNikKKworIyAgICAgICBkZWZpbmUgUjYwMF9NQ0RfU1lTVEVNX0FQRVJUVVJFX1VOTUFQUEVEX0FDQ0VTU19QQVNTX1RIUlUgICAgKDAgPDwgOCkKKyMgICAgICAgZGVmaW5lIFI2MDBfTUNEX1NZU1RFTV9BUEVSVFVSRV9VTk1BUFBFRF9BQ0NFU1NfREVGQVVMVF9QQUdFICgxIDw8IDgpCisKKyMgICAgICAgZGVmaW5lIFI2MDBfTUNEX1NFTUFQSE9SRV9NT0RFICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDEwKQorIyAgICAgICBkZWZpbmUgUjYwMF9NQ0RfV0FJVF9MMl9RVUVSWSAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTEpCisjICAgICAgIGRlZmluZSBSNjAwX01DRF9FRkZFQ1RJVkVfTDFfVExCX1NJWkUoeCkgICAgICAgICAgICAgICAoKHgpIDw8IDEyKQorIyAgICAgICBkZWZpbmUgUjYwMF9NQ0RfRUZGRUNUSVZFX0wxX1FVRVVFX1NJWkUoeCkgICAgICAgICAgICAgKCh4KSA8PCAxNSkKKworI2RlZmluZSBSNzAwX01DX1ZNX01EX0wxX1RMQjBfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyNjU0CisjZGVmaW5lIFI3MDBfTUNfVk1fTURfTDFfVExCMV9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI2NTgKKyNkZWZpbmUgUjcwMF9NQ19WTV9NRF9MMV9UTEIyX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjY1YworCisjZGVmaW5lIFI3MDBfTUNfVk1fTUJfTDFfVExCMF9DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyMzQKKyNkZWZpbmUgUjcwMF9NQ19WTV9NQl9MMV9UTEIxX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjIzOAorI2RlZmluZSBSNzAwX01DX1ZNX01CX0wxX1RMQjJfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyMjNjCisjZGVmaW5lIFI3MDBfTUNfVk1fTUJfTDFfVExCM19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDIyNDAKKworIyAgICAgICBkZWZpbmUgUjcwMF9FTkFCTEVfTDFfVExCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI3MDBfRU5BQkxFX0wxX0ZSQUdNRU5UX1BST0NFU1NJTkcgICAgICAgICAgICAgICgxIDw8IDEpCisjICAgICAgIGRlZmluZSBSNzAwX1NZU1RFTV9BQ0NFU1NfTU9ERV9JTl9TWVMgICAgICAgICAgICAgICAgICAoMiA8PCAzKQorIyAgICAgICBkZWZpbmUgUjcwMF9TWVNURU1fQVBFUlRVUkVfVU5NQVBQRURfQUNDRVNTX1BBU1NfVEhSVSAgKDAgPDwgNSkKKyMgICAgICAgZGVmaW5lIFI3MDBfRUZGRUNUSVZFX0wxX1RMQl9TSVpFKHgpICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTUpCisjICAgICAgIGRlZmluZSBSNzAwX0VGRkVDVElWRV9MMV9RVUVVRV9TSVpFKHgpICAgICAgICAgICAgICAgICAoKHgpIDw8IDE4KQorCisjZGVmaW5lIFI3MDBfTUNfQVJCX1JBTUNGRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI3NjAKKyMgICAgICAgZGVmaW5lIFI3MDBfTk9PRkJBTktfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDAKKyMgICAgICAgZGVmaW5lIFI3MDBfTk9PRkJBTktfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MworIyAgICAgICBkZWZpbmUgUjcwMF9OT09GUkFOS19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMgorIyAgICAgICBkZWZpbmUgUjcwMF9OT09GUkFOS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxCisjICAgICAgIGRlZmluZSBSNzAwX05PT0ZST1dTX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjICAgICAgIGRlZmluZSBSNzAwX05PT0ZST1dTX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDcKKyMgICAgICAgZGVmaW5lIFI3MDBfTk9PRkNPTFNfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDYKKyMgICAgICAgZGVmaW5lIFI3MDBfTk9PRkNPTFNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MworIyAgICAgICBkZWZpbmUgUjcwMF9DSEFOU0laRV9TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOAorIyAgICAgICBkZWZpbmUgUjcwMF9DSEFOU0laRV9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxCisjICAgICAgIGRlZmluZSBSNzAwX0JVUlNUTEVOR1RIX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICA5CisjICAgICAgIGRlZmluZSBSNzAwX0JVUlNUTEVOR1RIX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEKKyNkZWZpbmUgUjYwMF9SQU1DRkcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjQwOAorIyAgICAgICBkZWZpbmUgUjYwMF9OT09GQkFOS19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMAorIyAgICAgICBkZWZpbmUgUjYwMF9OT09GQkFOS19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxCisjICAgICAgIGRlZmluZSBSNjAwX05PT0ZSQU5LX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjICAgICAgIGRlZmluZSBSNjAwX05PT0ZSQU5LX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEKKyMgICAgICAgZGVmaW5lIFI2MDBfTk9PRlJPV1NfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDIKKyMgICAgICAgZGVmaW5lIFI2MDBfTk9PRlJPV1NfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4NworIyAgICAgICBkZWZpbmUgUjYwMF9OT09GQ09MU19TSElGVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNQorIyAgICAgICBkZWZpbmUgUjYwMF9OT09GQ09MU19NQVNLICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgzCisjICAgICAgIGRlZmluZSBSNjAwX0NIQU5TSVpFX1NISUZUICAgICAgICAgICAgICAgICAgICAgICAgICAgICA3CisjICAgICAgIGRlZmluZSBSNjAwX0NIQU5TSVpFX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDEKKyMgICAgICAgZGVmaW5lIFI2MDBfQlVSU1RMRU5HVEhfU0hJRlQgICAgICAgICAgICAgICAgICAgICAgICAgIDgKKyMgICAgICAgZGVmaW5lIFI2MDBfQlVSU1RMRU5HVEhfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MQorCisjZGVmaW5lIFI2MDBfVk1fTDJfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MDAKKyMgICAgICAgZGVmaW5lIFI2MDBfVk1fTDJfQ0FDSEVfRU4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX1ZNX0wyX0ZSQUdfUFJPQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorIyAgICAgICBkZWZpbmUgUjYwMF9WTV9FTkFCTEVfUFRFX0NBQ0hFX0xSVV9XICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKKyMgICAgICAgZGVmaW5lIFI2MDBfVk1fTDJfQ05UTF9RVUVVRV9TSVpFKHgpICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTMpCisjICAgICAgIGRlZmluZSBSNzAwX1ZNX0wyX0NOVExfUVVFVUVfU0laRSh4KSAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE0KQorCisjZGVmaW5lIFI2MDBfVk1fTDJfQ05UTDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MDQKKyMgICAgICAgZGVmaW5lIFI2MDBfVk1fTDJfQ05UTDJfSU5WQUxJREFURV9BTExfTDFfVExCUyAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX1ZNX0wyX0NOVEwyX0lOVkFMSURBVEVfTDJfQ0FDSEUgICAgICAgICAgICAoMSA8PCAxKQorI2RlZmluZSBSNjAwX1ZNX0wyX0NOVEwzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDA4CisjICAgICAgIGRlZmluZSBSNjAwX1ZNX0wyX0NOVEwzX0JBTktfU0VMRUNUXzAoeCkgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX1ZNX0wyX0NOVEwzX0JBTktfU0VMRUNUXzEoeCkgICAgICAgICAgICAgICAoKHgpIDw8IDUpCisjICAgICAgIGRlZmluZSBSNjAwX1ZNX0wyX0NOVEwzX0NBQ0hFX1VQREFURV9NT0RFKHgpICAgICAgICAgICAoKHgpIDw8IDEwKQorIyAgICAgICBkZWZpbmUgUjcwMF9WTV9MMl9DTlRMM19CQU5LX1NFTEVDVCh4KSAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjcwMF9WTV9MMl9DTlRMM19DQUNIRV9VUERBVEVfTU9ERSh4KSAgICAgICAgICAgKCh4KSA8PCA2KQorCisjZGVmaW5lIFI2MDBfVk1fTDJfU1RBVFVTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDE0MGMKKworI2RlZmluZSBSNjAwX1ZNX0NPTlRFWFQwX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDEwCisjICAgICAgIGRlZmluZSBSNjAwX1ZNX0VOQUJMRV9DT05URVhUICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9WTV9QQUdFX1RBQkxFX0RFUFRIX0ZMQVQgICAgICAgICAgICAgICAgICAgKDAgPDwgMSkKKworI2RlZmluZSBSNjAwX1ZNX0NPTlRFWFQwX0NOVEwyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgxNDMwCisjZGVmaW5lIFI2MDBfVk1fQ09OVEVYVDBfUkVRVUVTVF9SRVNQT05TRSAgICAgICAgICAgICAgICAgICAgICAweDE0NzAKKyNkZWZpbmUgUjYwMF9WTV9DT05URVhUMF9JTlZBTElEQVRJT05fTE9XX0FERFIgICAgICAgICAgICAgICAgIDB4MTQ5MAorI2RlZmluZSBSNjAwX1ZNX0NPTlRFWFQwX0lOVkFMSURBVElPTl9ISUdIX0FERFIgICAgICAgICAgICAgICAgMHgxNGIwCisjZGVmaW5lIFI2MDBfVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9CQVNFX0FERFIgICAgICAgICAgICAgICAgICAweDE1NzQKKyNkZWZpbmUgUjYwMF9WTV9DT05URVhUMF9QQUdFX1RBQkxFX1NUQVJUX0FERFIgICAgICAgICAgICAgICAgIDB4MTU5NAorI2RlZmluZSBSNjAwX1ZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfRU5EX0FERFIgICAgICAgICAgICAgICAgICAgMHgxNWI0CisKKyNkZWZpbmUgUjcwMF9WTV9DT05URVhUMF9QQUdFX1RBQkxFX0JBU0VfQUREUiAgICAgICAgICAgICAgICAgIDB4MTUzYworI2RlZmluZSBSNzAwX1ZNX0NPTlRFWFQwX1BBR0VfVEFCTEVfU1RBUlRfQUREUiAgICAgICAgICAgICAgICAgMHgxNTVjCisjZGVmaW5lIFI3MDBfVk1fQ09OVEVYVDBfUEFHRV9UQUJMRV9FTkRfQUREUiAgICAgICAgICAgICAgICAgICAweDE1N2MKKworI2RlZmluZSBSNjAwX0hEUF9IT1NUX1BBVEhfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyYzAwCisKKyNkZWZpbmUgUjYwMF9HUkJNX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAwMAorIyAgICAgICBkZWZpbmUgUjYwMF9HUkJNX1JFQURfVElNRU9VVCh4KSAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorCisjZGVmaW5lIFI2MDBfR1JCTV9TVEFUVVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMTAKKyMgICAgICAgZGVmaW5lIFI2MDBfQ01ERklGT19BVkFJTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4MWYKKyMgICAgICAgZGVmaW5lIFI3MDBfQ01ERklGT19BVkFJTF9NQVNLICAgICAgICAgICAgICAgICAgICAgICAgIDB4ZgorIyAgICAgICBkZWZpbmUgUjYwMF9HVUlfQUNUSVZFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCisjZGVmaW5lIFI2MDBfR1JCTV9TVEFUVVMyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDgwMTQKKyNkZWZpbmUgUjYwMF9HUkJNX1NPRlRfUkVTRVQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODAyMAorIyAgICAgICBkZWZpbmUgUjYwMF9TT0ZUX1JFU0VUX0NQICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMCkKKyNkZWZpbmUgUjYwMF9XQUlUX1VOVElMCQkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4MDQwCisKKyNkZWZpbmUgUjYwMF9DUF9TRU1fV0FJVF9USU1FUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODViYworI2RlZmluZSBSNjAwX0NQX01FX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NmQ4CisjICAgICAgIGRlZmluZSBSNjAwX0NQX01FX0hBTFQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyOCkKKyNkZWZpbmUgUjYwMF9DUF9RVUVVRV9USFJFU0hPTERTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODc2MAorIyAgICAgICBkZWZpbmUgUjYwMF9ST1FfSUIxX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9ST1FfSUIyX1NUQVJUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCA4KQorI2RlZmluZSBSNjAwX0NQX01FUV9USFJFU0hPTERTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4NzY0CisjICAgICAgIGRlZmluZSBSNzAwX1NUUV9TUExJVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX01FUV9FTkQoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE2KQorIyAgICAgICBkZWZpbmUgUjYwMF9ST1FfRU5EKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyNCkKKyNkZWZpbmUgUjYwMF9DUF9QRVJGTU9OX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODdmYworI2RlZmluZSBSNjAwX0NQX1JCX0JBU0UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjMTAwCisjZGVmaW5lIFI2MDBfQ1BfUkJfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGMxMDQKKyMgICAgICAgZGVmaW5lIFI2MDBfUkJfQlVGU1ooeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfUkJfQkxLU1ooeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgOCkKKyMgICAgICAgZGVmaW5lIFI2MDBfUkJfTk9fVVBEQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI3KQorIyAgICAgICBkZWZpbmUgUjYwMF9SQl9SUFRSX1dSX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCisjZGVmaW5lIFI2MDBfQ1BfUkJfUlBUUl9XUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGMxMDgKKyNkZWZpbmUgUjYwMF9DUF9SQl9SUFRSX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzEwYworI2RlZmluZSBSNjAwX0NQX1JCX1JQVFJfQUREUl9ISSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjMTEwCisjZGVmaW5lIFI2MDBfQ1BfUkJfV1BUUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGMxMTQKKyNkZWZpbmUgUjYwMF9DUF9SQl9XUFRSX0FERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzExOAorI2RlZmluZSBSNjAwX0NQX1JCX1dQVFJfQUREUl9ISSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjMTFjCisjZGVmaW5lIFI2MDBfQ1BfUkJfUlBUUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg3MDAKKyNkZWZpbmUgUjYwMF9DUF9SQl9XUFRSX0RFTEFZICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODcwNAorI2RlZmluZSBSNjAwX0NQX1BGUF9VQ09ERV9BRERSICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjMTUwCisjZGVmaW5lIFI2MDBfQ1BfUEZQX1VDT0RFX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGMxNTQKKyNkZWZpbmUgUjYwMF9DUF9NRV9SQU1fUkFERFIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzE1OAorI2RlZmluZSBSNjAwX0NQX01FX1JBTV9XQUREUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhjMTVjCisjZGVmaW5lIFI2MDBfQ1BfTUVfUkFNX0RBVEEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGMxNjAKKyNkZWZpbmUgUjYwMF9DUF9ERUJVRyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4YzFmYworCisjZGVmaW5lIFI2MDBfUEFfQ0xfRU5IQU5DRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhhMTQKKyMgICAgICAgZGVmaW5lIFI2MDBfQ0xJUF9WVFhfUkVPUkRFUl9FTkEgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX05VTV9DTElQX1NFUSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDEpCisjZGVmaW5lIFI2MDBfUEFfU0NfTElORV9TVElQUExFX1NUQVRFICAgICAgICAgICAgICAgICAgICAgICAgICAweDhiMTAKKyNkZWZpbmUgUjYwMF9QQV9TQ19NVUxUSV9DSElQX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGIyMAorI2RlZmluZSBSNzAwX1BBX1NDX0ZPUkNFX0VPVl9NQVhfQ05UUyAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YjI0CisjICAgICAgIGRlZmluZSBSNzAwX0ZPUkNFX0VPVl9NQVhfQ0xLX0NOVCh4KSAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNzAwX0ZPUkNFX0VPVl9NQVhfUkVaX0NOVCh4KSAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE2KQorI2RlZmluZSBSNjAwX1BBX1NDX0FBX1NBTVBMRV9MT0NTXzJTICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YjQwCisjZGVmaW5lIFI2MDBfUEFfU0NfQUFfU0FNUExFX0xPQ1NfNFMgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhiNDQKKyNkZWZpbmUgUjYwMF9QQV9TQ19BQV9TQU1QTEVfTE9DU184U19XRDAgICAgICAgICAgICAgICAgICAgICAgIDB4OGI0OAorI2RlZmluZSBSNjAwX1BBX1NDX0FBX1NBTVBMRV9MT0NTXzhTX1dEMSAgICAgICAgICAgICAgICAgICAgICAgMHg4YjRjCisjICAgICAgIGRlZmluZSBSNjAwX1MwX1goeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX1MwX1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDQpCisjICAgICAgIGRlZmluZSBSNjAwX1MxX1goeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDgpCisjICAgICAgIGRlZmluZSBSNjAwX1MxX1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDEyKQorIyAgICAgICBkZWZpbmUgUjYwMF9TMl9YKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxNikKKyMgICAgICAgZGVmaW5lIFI2MDBfUzJfWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMjApCisjICAgICAgIGRlZmluZSBSNjAwX1MzX1goeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDI0KQorIyAgICAgICBkZWZpbmUgUjYwMF9TM19ZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyOCkKKyMgICAgICAgZGVmaW5lIFI2MDBfUzRfWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfUzRfWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgNCkKKyMgICAgICAgZGVmaW5lIFI2MDBfUzVfWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgOCkKKyMgICAgICAgZGVmaW5lIFI2MDBfUzVfWSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTIpCisjICAgICAgIGRlZmluZSBSNjAwX1M2X1goeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE2KQorIyAgICAgICBkZWZpbmUgUjYwMF9TNl9ZKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfUzdfWCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMjQpCisjICAgICAgIGRlZmluZSBSNjAwX1M3X1koeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDI4KQorI2RlZmluZSBSNjAwX1BBX1NDX0ZJRk9fU0laRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YmQwCisjICAgICAgIGRlZmluZSBSNjAwX1NDX1BSSU1fRklGT19TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX1NDX0hJWl9USUxFX0ZJRk9fU0laRSh4KSAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDgpCisjICAgICAgIGRlZmluZSBSNjAwX1NDX0VBUkxZWl9USUxFX0ZJRk9fU0laRSh4KSAgICAgICAgICAgICAgICAoKHgpIDw8IDE2KQorI2RlZmluZSBSNzAwX1BBX1NDX0ZJRk9fU0laRV9SN1hYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4YmNjCisjICAgICAgIGRlZmluZSBSNzAwX1NDX1BSSU1fRklGT19TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNzAwX1NDX0hJWl9USUxFX0ZJRk9fU0laRSh4KSAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDEyKQorIyAgICAgICBkZWZpbmUgUjcwMF9TQ19FQVJMWVpfVElMRV9GSUZPX1NJWkUoeCkgICAgICAgICAgICAgICAgKCh4KSA8PCAyMCkKKyNkZWZpbmUgUjYwMF9QQV9TQ19FTkhBTkNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGJmMAorIyAgICAgICBkZWZpbmUgUjYwMF9GT1JDRV9FT1ZfTUFYX0NMS19DTlQoeCkgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9GT1JDRV9FT1ZfTUFYX1RJTEVfQ05UKHgpICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxMikKKyNkZWZpbmUgUjYwMF9QQV9TQ19DTElQUkVDVF9SVUxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgyMGMKKyNkZWZpbmUgUjcwMF9QQV9TQ19FREdFUlVMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjgyMzAKKyNkZWZpbmUgUjYwMF9QQV9TQ19MSU5FX1NUSVBQTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjhhMGMKKyNkZWZpbmUgUjYwMF9QQV9TQ19NT0RFX0NOVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjhhNGMKKyNkZWZpbmUgUjYwMF9QQV9TQ19BQV9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjhjMDQKKworI2RlZmluZSBSNjAwX1NYX0VYUE9SVF9CVUZGRVJfU0laRVMgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MDBjCisjICAgICAgIGRlZmluZSBSNjAwX0NPTE9SX0JVRkZFUl9TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX1BPU0lUSU9OX0JVRkZFUl9TSVpFKHgpICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDgpCisjICAgICAgIGRlZmluZSBSNjAwX1NNWF9CVUZGRVJfU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE2KQorI2RlZmluZSBSNjAwX1NYX0RFQlVHXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MDU0CisjICAgICAgIGRlZmluZSBSNjAwX1NNWF9FVkVOVF9SRUxFQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9FTkFCTEVfTkVXX1NNWF9BRERSRVNTICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTYpCisjZGVmaW5lIFI3MDBfU1hfREVCVUdfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkwNTgKKyMgICAgICAgZGVmaW5lIFI3MDBfRU5BQkxFX05FV19TTVhfQUREUkVTUyAgICAgICAgICAgICAgICAgICAgICgxIDw8IDE2KQorI2RlZmluZSBSNjAwX1NYX01JU0MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODM1MAorCisjZGVmaW5lIFI2MDBfREJfREVCVUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDk4MzAKKyMgICAgICAgZGVmaW5lIFI2MDBfUFJFWl9NVVNUX1dBSVRfRk9SX1BPU1RaX0RPTkUgICAgICAgICAgICAgICgxIDw8IDMxKQorI2RlZmluZSBSNjAwX0RCX1dBVEVSTUFSS1MgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5ODM4CisjICAgICAgIGRlZmluZSBSNjAwX0RFUFRIX0ZSRUUoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX0RFUFRIX0ZMVVNIKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDUpCisjICAgICAgIGRlZmluZSBSNjAwX0RFUFRIX1BFTkRJTkdfRlJFRSh4KSAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE1KQorIyAgICAgICBkZWZpbmUgUjYwMF9ERVBUSF9DQUNIRUxJTkVfRlJFRSh4KSAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyMCkKKyNkZWZpbmUgUjcwMF9EQl9ERUJVRzMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OThiMAorIyAgICAgICBkZWZpbmUgUjcwMF9EQl9DTEtfT0ZGX0RFTEFZKHgpICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxMSkKKyNkZWZpbmUgUlY3MDBfREJfREVCVUc0ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OWI4YworIyAgICAgICBkZWZpbmUgUlY3MDBfRElTQUJMRV9USUxFX0NPVkVSRURfRk9SX1BTX0lURVIgICAgICAgICAgKDEgPDwgNikKKworI2RlZmluZSBSNjAwX1ZHVF9DQUNIRV9JTlZBTElEQVRJT04gICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OGM0CisjICAgICAgIGRlZmluZSBSNjAwX0NBQ0hFX0lOVkFMSURBVElPTih4KSAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX1ZDX09OTFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjICAgICAgIGRlZmluZSBSNjAwX1RDX09OTFkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjICAgICAgIGRlZmluZSBSNjAwX1ZDX0FORF9UQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjICAgICAgIGRlZmluZSBSNzAwX0FVVE9fSU5WTERfRU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDYpCisjICAgICAgIGRlZmluZSBSNzAwX05PX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwCisjICAgICAgIGRlZmluZSBSNzAwX0VTX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAxCisjICAgICAgIGRlZmluZSBSNzAwX0dTX0FVVE8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAyCisjICAgICAgIGRlZmluZSBSNzAwX0VTX0FORF9HU19BVVRPICAgICAgICAgICAgICAgICAgICAgICAgICAgICAzCisjZGVmaW5lIFI2MDBfVkdUX0dTX1BFUl9FUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4YzgKKyNkZWZpbmUgUjYwMF9WR1RfRVNfUEVSX0dTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODhjYworI2RlZmluZSBSNjAwX1ZHVF9HU19QRVJfVlMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4OGU4CisjZGVmaW5lIFI2MDBfVkdUX0dTX1ZFUlRFWF9SRVVTRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDg4ZDQKKyNkZWZpbmUgUjYwMF9WR1RfTlVNX0lOU1RBTkNFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODk3NAorI2RlZmluZSBSNjAwX1ZHVF9TVFJNT1VUX0VOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyOGFiMAorI2RlZmluZSBSNjAwX1ZHVF9FVkVOVF9JTklUSUFUT1IgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyOGE5MAorIyAgICAgICBkZWZpbmUgUjYwMF9DQUNIRV9GTFVTSF9BTkRfSU5WX0VWRU5UICAgICAgICAgICAgICAgICAgKDB4MTYgPDwgMCkKKyNkZWZpbmUgUjYwMF9WR1RfVkVSVEVYX1JFVVNFX0JMT0NLX0NOVEwgICAgICAgICAgICAgICAgICAgICAgIDB4MjhjNTgKKyMgICAgICAgZGVmaW5lIFI2MDBfVlRYX1JFVVNFX0RFUFRIX01BU0sgICAgICAgICAgICAgICAgICAgICAgIDB4ZmYKKyNkZWZpbmUgUjYwMF9WR1RfT1VUX0RFQUxMT0NfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjhjNWMKKyMgICAgICAgZGVmaW5lIFI2MDBfREVBTExPQ19ESVNUX01BU0sgICAgICAgICAgICAgICAgICAgICAgICAgIDB4N2YKKworI2RlZmluZSBSNjAwX0NCX0NPTE9SMF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA0MAorI2RlZmluZSBSNjAwX0NCX0NPTE9SMV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA0NAorI2RlZmluZSBSNjAwX0NCX0NPTE9SMl9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA0OAorI2RlZmluZSBSNjAwX0NCX0NPTE9SM19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA0YworI2RlZmluZSBSNjAwX0NCX0NPTE9SNF9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA1MAorI2RlZmluZSBSNjAwX0NCX0NPTE9SNV9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA1NAorI2RlZmluZSBSNjAwX0NCX0NPTE9SNl9CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA1OAorI2RlZmluZSBSNjAwX0NCX0NPTE9SN19CQVNFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODA1YworI2RlZmluZSBSNjAwX0NCX0NPTE9SN19GUkFHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODBmYworCisjZGVmaW5lIFI2MDBfVENfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDk2MDgKKyMgICAgICAgZGVmaW5lIFI2MDBfVENfTDJfU0laRSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgNSkKKyMgICAgICAgZGVmaW5lIFI2MDBfTDJfRElTQUJMRV9MQVRFX0hJVCAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDkpCisKKyNkZWZpbmUgUjYwMF9BUkJfUE9QICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4MjQxOAorIyAgICAgICBkZWZpbmUgUjYwMF9FTkFCTEVfVEMxMjggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzApCisjZGVmaW5lIFI2MDBfQVJCX0dERUNfUkRfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI0NmMKKworI2RlZmluZSBSNjAwX1RBX0NOVExfQVVYICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5NTA4CisjICAgICAgIGRlZmluZSBSNjAwX0RJU0FCTEVfQ1VCRV9XUkFQICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9ESVNBQkxFX0NVQkVfQU5JU08gICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMSkKKyMgICAgICAgZGVmaW5lIFI3MDBfR0VUTE9EX1NFTEVDVCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMikKKyMgICAgICAgZGVmaW5lIFI2MDBfU1lOQ19HUkFESUVOVCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI0KQorIyAgICAgICBkZWZpbmUgUjYwMF9TWU5DX1dBTEtFUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMjUpCisjICAgICAgIGRlZmluZSBSNjAwX1NZTkNfQUxJR05FUiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyNikKKyMgICAgICAgZGVmaW5lIFI2MDBfQklMSU5FQVJfUFJFQ0lTSU9OXzZfQklUICAgICAgICAgICAgICAgICAgICgwIDw8IDMxKQorIyAgICAgICBkZWZpbmUgUjYwMF9CSUxJTkVBUl9QUkVDSVNJT05fOF9CSVQgICAgICAgICAgICAgICAgICAgKDEgPDwgMzEpCisKKyNkZWZpbmUgUjcwMF9UQ1BfQ05UTCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OTYxMAorCisjZGVmaW5lIFI2MDBfU01YX0RDX0NUTDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweGEwMjAKKyMgICAgICAgZGVmaW5lIFI3MDBfVVNFX0hBU0hfRlVOQ1RJT04gICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBSNzAwX0NBQ0hFX0RFUFRIKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDEpCisjICAgICAgIGRlZmluZSBSNzAwX0ZMVVNIX0FMTF9PTl9FVkVOVCAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxMCkKKyMgICAgICAgZGVmaW5lIFI3MDBfU1RBTExfT05fRVZFTlQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDExKQorI2RlZmluZSBSNzAwX1NNWF9FVkVOVF9DVEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHhhMDJjCisjICAgICAgIGRlZmluZSBSNzAwX0VTX0ZMVVNIX0NUTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNzAwX0dTX0ZMVVNIX0NUTCh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDMpCisjICAgICAgIGRlZmluZSBSNzAwX0FDS19GTFVTSF9DVEwoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDYpCisjICAgICAgIGRlZmluZSBSNzAwX1NZTkNfRkxVU0hfQ1RMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQorCisjZGVmaW5lIFI2MDBfU1FfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjMDAKKyMgICAgICAgZGVmaW5lIFI2MDBfVkNfRU5BQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX0VYUE9SVF9TUkNfQyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAxKQorIyAgICAgICBkZWZpbmUgUjYwMF9EWDlfQ09OU1RTICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMikKKyMgICAgICAgZGVmaW5lIFI2MDBfQUxVX0lOU1RfUFJFRkVSX1ZFQ1RPUiAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMpCisjICAgICAgIGRlZmluZSBSNjAwX0RYMTBfQ0xBTVAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA0KQorIyAgICAgICBkZWZpbmUgUjYwMF9DTEFVU0VfU0VRX1BSSU8oeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCA4KQorIyAgICAgICBkZWZpbmUgUjYwMF9QU19QUklPKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyNCkKKyMgICAgICAgZGVmaW5lIFI2MDBfVlNfUFJJTyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMjYpCisjICAgICAgIGRlZmluZSBSNjAwX0dTX1BSSU8oeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDI4KQorIyAgICAgICBkZWZpbmUgUjYwMF9FU19QUklPKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAzMCkKKyNkZWZpbmUgUjYwMF9TUV9HUFJfUkVTT1VSQ0VfTUdNVF8xICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGMwNAorIyAgICAgICBkZWZpbmUgUjYwMF9OVU1fUFNfR1BSUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9OVU1fVlNfR1BSUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxNikKKyMgICAgICAgZGVmaW5lIFI3MDBfRFlOX0dQUl9FTkFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI3KQorIyAgICAgICBkZWZpbmUgUjYwMF9OVU1fQ0xBVVNFX1RFTVBfR1BSUyh4KSAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyOCkKKyNkZWZpbmUgUjYwMF9TUV9HUFJfUkVTT1VSQ0VfTUdNVF8yICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGMwOAorIyAgICAgICBkZWZpbmUgUjYwMF9OVU1fR1NfR1BSUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9OVU1fRVNfR1BSUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxNikKKyNkZWZpbmUgUjYwMF9TUV9USFJFQURfUkVTT1VSQ0VfTUdNVCAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGMwYworIyAgICAgICBkZWZpbmUgUjYwMF9OVU1fUFNfVEhSRUFEUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAwKQorIyAgICAgICBkZWZpbmUgUjYwMF9OVU1fVlNfVEhSRUFEUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCA4KQorIyAgICAgICBkZWZpbmUgUjYwMF9OVU1fR1NfVEhSRUFEUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxNikKKyMgICAgICAgZGVmaW5lIFI2MDBfTlVNX0VTX1RIUkVBRFMoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMjQpCisjZGVmaW5lIFI2MDBfU1FfU1RBQ0tfUkVTT1VSQ0VfTUdNVF8xICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjMTAKKyMgICAgICAgZGVmaW5lIFI2MDBfTlVNX1BTX1NUQUNLX0VOVFJJRVMoeCkgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfTlVNX1ZTX1NUQUNLX0VOVFJJRVMoeCkgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTYpCisjZGVmaW5lIFI2MDBfU1FfU1RBQ0tfUkVTT1VSQ0VfTUdNVF8yICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjMTQKKyMgICAgICAgZGVmaW5lIFI2MDBfTlVNX0dTX1NUQUNLX0VOVFJJRVMoeCkgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfTlVNX0VTX1NUQUNLX0VOVFJJRVMoeCkgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTYpCisjZGVmaW5lIFI2MDBfU1FfTVNfRklGT19TSVpFUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDhjZjAKKyMgICAgICAgZGVmaW5lIFI2MDBfQ0FDSEVfRklGT19TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfRkVUQ0hfRklGT19ISVdBVEVSKHgpICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgOCkKKyMgICAgICAgZGVmaW5lIFI2MDBfRE9ORV9GSUZPX0hJV0FURVIoeCkgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTYpCisjICAgICAgIGRlZmluZSBSNjAwX0FMVV9VUERBVEVfRklGT19ISVdBVEVSKHgpICAgICAgICAgICAgICAgICAoKHgpIDw8IDI0KQorI2RlZmluZSBSNzAwX1NRX0RZTl9HUFJfU0laRV9TSU1EX0FCXzAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ZGIwCisjICAgICAgIGRlZmluZSBSNzAwX1NJTURBX1JJTkcwKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNzAwX1NJTURBX1JJTkcxKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDgpCisjICAgICAgIGRlZmluZSBSNzAwX1NJTURCX1JJTkcwKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE2KQorIyAgICAgICBkZWZpbmUgUjcwMF9TSU1EQl9SSU5HMSh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyNCkKKyNkZWZpbmUgUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl8xICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGRiNAorI2RlZmluZSBSNzAwX1NRX0RZTl9HUFJfU0laRV9TSU1EX0FCXzIgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ZGI4CisjZGVmaW5lIFI3MDBfU1FfRFlOX0dQUl9TSVpFX1NJTURfQUJfMyAgICAgICAgICAgICAgICAgICAgICAgICAweDhkYmMKKyNkZWZpbmUgUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl80ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGRjMAorI2RlZmluZSBSNzAwX1NRX0RZTl9HUFJfU0laRV9TSU1EX0FCXzUgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ZGM0CisjZGVmaW5lIFI3MDBfU1FfRFlOX0dQUl9TSVpFX1NJTURfQUJfNiAgICAgICAgICAgICAgICAgICAgICAgICAweDhkYzgKKyNkZWZpbmUgUjcwMF9TUV9EWU5fR1BSX1NJWkVfU0lNRF9BQl83ICAgICAgICAgICAgICAgICAgICAgICAgIDB4OGRjYworCisjZGVmaW5lIFI2MDBfU1BJX1BTX0lOX0NPTlRST0xfMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDI4NmNjCisjICAgICAgIGRlZmluZSBSNjAwX05VTV9JTlRFUlAoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX1BPU0lUSU9OX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQorIyAgICAgICBkZWZpbmUgUjYwMF9QT1NJVElPTl9DRU5UUk9JRCAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgOSkKKyMgICAgICAgZGVmaW5lIFI2MDBfUE9TSVRJT05fQUREUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTApCisjICAgICAgIGRlZmluZSBSNjAwX1BBUkFNX0dFTih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE1KQorIyAgICAgICBkZWZpbmUgUjYwMF9QQVJBTV9HRU5fQUREUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxOSkKKyMgICAgICAgZGVmaW5lIFI2MDBfQkFSWUNfU0FNUExFX0NOVEwoeCkgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMjYpCisjICAgICAgIGRlZmluZSBSNjAwX1BFUlNQX0dSQURJRU5UX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAyOCkKKyMgICAgICAgZGVmaW5lIFI2MDBfTElORUFSX0dSQURJRU5UX0VOQSAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI5KQorIyAgICAgICBkZWZpbmUgUjYwMF9QT1NJVElPTl9TQU1QTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMzApCisjICAgICAgIGRlZmluZSBSNjAwX0JBUllDX0FUX1NBTVBMRV9FTkEgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCAzMSkKKyNkZWZpbmUgUjYwMF9TUElfUFNfSU5fQ09OVFJPTF8xICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4Mjg2ZDAKKyMgICAgICAgZGVmaW5lIFI2MDBfR0VOX0lOREVYX1BJWCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDApCisjICAgICAgIGRlZmluZSBSNjAwX0dFTl9JTkRFWF9QSVhfQUREUih4KSAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDEpCisjICAgICAgIGRlZmluZSBSNjAwX0ZST05UX0ZBQ0VfRU5BICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMSA8PCA4KQorIyAgICAgICBkZWZpbmUgUjYwMF9GUk9OVF9GQUNFX0NIQU4oeCkgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCA5KQorIyAgICAgICBkZWZpbmUgUjYwMF9GUk9OVF9GQUNFX0FMTF9CSVRTICAgICAgICAgICAgICAgICAgICAgICAgKDEgPDwgMTEpCisjICAgICAgIGRlZmluZSBSNjAwX0ZST05UX0ZBQ0VfQUREUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDEyKQorIyAgICAgICBkZWZpbmUgUjYwMF9GT0dfQUREUih4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxNykKKyMgICAgICAgZGVmaW5lIFI2MDBfRklYRURfUFRfUE9TSVRJT05fRU5BICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDI0KQorIyAgICAgICBkZWZpbmUgUjYwMF9GSVhFRF9QVF9QT1NJVElPTl9BRERSKHgpICAgICAgICAgICAgICAgICAgKCh4KSA8PCAyNSkKKyMgICAgICAgZGVmaW5lIFI3MDBfUE9TSVRJT05fVUxDICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDMwKQorI2RlZmluZSBSNjAwX1NQSV9JTlBVVF9aICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHgyODZkOAorCisjZGVmaW5lIFI2MDBfU1BJX0NPTkZJR19DTlRMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxMDAKKyMgICAgICAgZGVmaW5lIFI2MDBfR1BSX1dSSVRFX1BSSU9SSVRZKHgpICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfRElTQUJMRV9JTlRFUlBfMSAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIDw8IDUpCisjZGVmaW5lIFI2MDBfU1BJX0NPTkZJR19DTlRMXzEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxM2MKKyMgICAgICAgZGVmaW5lIFI2MDBfVlRYX0RPTkVfREVMQVkoeCkgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMCkKKyMgICAgICAgZGVmaW5lIFI2MDBfSU5URVJQX09ORV9QUklNX1BFUl9ST1cgICAgICAgICAgICAgICAgICAgICgxIDw8IDQpCisKKyNkZWZpbmUgUjYwMF9HQl9USUxJTkdfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDB4OThmMAorIyAgICAgICBkZWZpbmUgUjYwMF9QSVBFX1RJTElORyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxKQorIyAgICAgICBkZWZpbmUgUjYwMF9CQU5LX1RJTElORyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCA0KQorIyAgICAgICBkZWZpbmUgUjYwMF9HUk9VUF9TSVpFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCA2KQorIyAgICAgICBkZWZpbmUgUjYwMF9ST1dfVElMSU5HKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCA4KQorIyAgICAgICBkZWZpbmUgUjYwMF9CQU5LX1NXQVBTKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxMSkKKyMgICAgICAgZGVmaW5lIFI2MDBfU0FNUExFX1NQTElUKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTQpCisjICAgICAgIGRlZmluZSBSNjAwX0JBQ0tFTkRfTUFQKHgpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDE2KQorI2RlZmluZSBSNjAwX0RDUF9USUxJTkdfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg2Y2EwCisjZGVmaW5lIFI2MDBfSERQX1RJTElOR19DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDJmM2MKKworI2RlZmluZSBSNjAwX0NDX1JCX0JBQ0tFTkRfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5OGY0CisjZGVmaW5lIFI3MDBfQ0NfU1lTX1JCX0JBQ0tFTkRfRElTQUJMRSAgICAgICAgICAgICAgICAgICAgICAgICAweDNmODgKKyMgICAgICAgZGVmaW5lIFI2MDBfQkFDS0VORF9ESVNBQkxFKHgpICAgICAgICAgICAgICAgICAgICAgICAgICgoeCkgPDwgMTYpCisKKyNkZWZpbmUgUjYwMF9DQ19HQ19TSEFERVJfUElQRV9DT05GSUcgICAgICAgICAgICAgICAgICAgICAgICAgIDB4ODk1MAorI2RlZmluZSBSNjAwX0dDX1VTRVJfU0hBREVSX1BJUEVfQ09ORklHICAgICAgICAgICAgICAgICAgICAgICAgMHg4OTU0CisjICAgICAgIGRlZmluZSBSNjAwX0lOQUNUSVZFX1FEX1BJUEVTKHgpICAgICAgICAgICAgICAgICAgICAgICAoKHgpIDw8IDgpCisjICAgICAgIGRlZmluZSBSNjAwX0lOQUNUSVZFX1FEX1BJUEVTX01BU0sgICAgICAgICAgICAgICAgICAgICAoMHhmZiA8PCA4KQorIyAgICAgICBkZWZpbmUgUjYwMF9JTkFDVElWRV9TSU1EUyh4KSAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KSA8PCAxNikKKyMgICAgICAgZGVmaW5lIFI2MDBfSU5BQ1RJVkVfU0lNRFNfTUFTSyAgICAgICAgICAgICAgICAgICAgICAgICgweGZmIDw8IDE2KQorCisjZGVmaW5lIFI3MDBfQ0dUU19TWVNfVENDX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDNmOTAKKyNkZWZpbmUgUjcwMF9DR1RTX1VTRVJfU1lTX1RDQ19ESVNBQkxFICAgICAgICAgICAgICAgICAgICAgICAgIDB4M2Y5NAorI2RlZmluZSBSNzAwX0NHVFNfVENDX0RJU0FCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg5MTQ4CisjZGVmaW5lIFI3MDBfQ0dUU19VU0VSX1RDQ19ESVNBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAweDkxNGMKKwogLyogQ29uc3RhbnRzICovCiAjZGVmaW5lIFJBREVPTl9NQVhfVVNFQ19USU1FT1VUCQkxMDAwMDAJLyogMTAwIG1zICovCiAKQEAgLTExOTAsNiArMTczNCwxMSBAQAogI2RlZmluZSBSQURFT05fTEFTVF9TV0lfUkVHCQlSQURFT05fU0NSQVRDSF9SRUczCiAjZGVmaW5lIFJBREVPTl9MQVNUX0RJU1BBVENICQkxCiAKKyNkZWZpbmUgUjYwMF9MQVNUX0ZSQU1FX1JFRwkJUjYwMF9TQ1JBVENIX1JFRzAKKyNkZWZpbmUgUjYwMF9MQVNUX0RJU1BBVENIX1JFRwkgICAgICAgIFI2MDBfU0NSQVRDSF9SRUcxCisjZGVmaW5lIFI2MDBfTEFTVF9DTEVBUl9SRUcJCVI2MDBfU0NSQVRDSF9SRUcyCisjZGVmaW5lIFI2MDBfTEFTVF9TV0lfUkVHCQlSNjAwX1NDUkFUQ0hfUkVHMworCiAjZGVmaW5lIFJBREVPTl9NQVhfVkJfQUdFCQkweDdmZmZmZmZmCiAjZGVmaW5lIFJBREVPTl9NQVhfVkJfVkVSVFMJCSgweGZmZmYpCiAKQEAgLTExOTgsNyArMTc0NywxNSBAQAogI2RlZmluZSBSQURFT05fUENJR0FSVF9UQUJMRV9TSVpFICAgICAgKDMyKjEwMjQpCiAKICNkZWZpbmUgUkFERU9OX1JFQUQocmVnKQlEUk1fUkVBRDMyKCAgZGV2X3ByaXYtPm1taW8sIChyZWcpICkKLSNkZWZpbmUgUkFERU9OX1dSSVRFKHJlZyx2YWwpCURSTV9XUklURTMyKCBkZXZfcHJpdi0+bW1pbywgKHJlZyksICh2YWwpICkKKyNkZWZpbmUgUkFERU9OX1dSSVRFKHJlZywgdmFsKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKHJlZyA8IDB4MTAwMDApIHsJCQkJICAgICAgICAgICAgICAgIFwKKwkJRFJNX1dSSVRFMzIoZGV2X3ByaXYtPm1taW8sIChyZWcpLCAodmFsKSk7CQlcCisJfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKwkJRFJNX1dSSVRFMzIoZGV2X3ByaXYtPm1taW8sIFJBREVPTl9NTV9JTkRFWCwgKHJlZykpOwlcCisJCURSTV9XUklURTMyKGRldl9wcml2LT5tbWlvLCBSQURFT05fTU1fREFUQSwgKHZhbCkpOwlcCisJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gd2hpbGUgKDApCiAjZGVmaW5lIFJBREVPTl9SRUFEOChyZWcpCURSTV9SRUFEOCggIGRldl9wcml2LT5tbWlvLCAocmVnKSApCiAjZGVmaW5lIFJBREVPTl9XUklURTgocmVnLHZhbCkJRFJNX1dSSVRFOCggZGV2X3ByaXYtPm1taW8sIChyZWcpLCAodmFsKSApCiAKQEAgLTEyMzgsMTEgKzE3OTUsMTkgQEAKIAlSQURFT05fV1JJVEUoUlM2OTBfTUNfSU5ERVgsIFJTNjkwX01DX0lOREVYX1dSX0FDSyk7CVwKIH0gd2hpbGUgKDApCiAKKyNkZWZpbmUgUlM2MDBfV1JJVEVfTUNJTkQoYWRkciwgdmFsKQkJCQlcCitkbyB7CQkJCQkJCSAgICAgICAgXAorCVJBREVPTl9XUklURShSUzYwMF9NQ19JTkRFWCwgUlM2MDBfTUNfSU5EX1dSX0VOIHwgUlM2MDBfTUNfSU5EX0NJVEZfQVJCMCB8ICgoYWRkcikgJiBSUzYwMF9NQ19BRERSX01BU0spKTsgXAorCVJBREVPTl9XUklURShSUzYwMF9NQ19EQVRBLCB2YWwpOyAgICAgICAgICAgICAgICAgICAgICAgXAorfSB3aGlsZSAoMCkKKwogI2RlZmluZSBJR1BfV1JJVEVfTUNJTkQoYWRkciwgdmFsKQkJCQlcCiBkbyB7CQkJCQkJCQkJXAogCWlmICgoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPT0gQ0hJUF9SUzY5MCkgfHwgICBcCiAJICAgICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNzQwKSkgICAgICBcCiAJCVJTNjkwX1dSSVRFX01DSU5EKGFkZHIsIHZhbCk7CQkJCVwKKwllbHNlIGlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA9PSBDSElQX1JTNjAwKSAgXAorCQlSUzYwMF9XUklURV9NQ0lORChhZGRyLCB2YWwpOwkJCQlcCiAJZWxzZQkJCQkJCQkJXAogCQlSUzQ4MF9XUklURV9NQ0lORChhZGRyLCB2YWwpOwkJCQlcCiB9IHdoaWxlICgwKQpAQCAtMTM0Niw3ICsxOTExLDExIEBACiAJc3RydWN0IGRybV9yYWRlb25fbWFzdGVyX3ByaXZhdGUgKm1hc3Rlcl9wcml2ID0gZmlsZV9wcml2LT5tYXN0ZXItPmRyaXZlcl9wcml2OwlcCiAJZHJtX3JhZGVvbl9zYXJlYV90ICpzYXJlYV9wcml2ID0gbWFzdGVyX3ByaXYtPnNhcmVhX3ByaXY7CVwKIAlpZiAoIHNhcmVhX3ByaXYtPmxhc3RfZGlzcGF0Y2ggPj0gUkFERU9OX01BWF9WQl9BR0UgKSB7CQlcCi0JCWludCBfX3JldCA9IHJhZGVvbl9kb19jcF9pZGxlKCBkZXZfcHJpdiApOwkJXAorCQlpbnQgX19yZXQ7CQkJCQkJXAorCQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SNjAwKSBcCisJCQlfX3JldCA9IHI2MDBfZG9fY3BfaWRsZShkZXZfcHJpdik7CQlcCisJCWVsc2UJCQkJCQkJXAorCQkJX19yZXQgPSByYWRlb25fZG9fY3BfaWRsZShkZXZfcHJpdik7CQlcCiAJCWlmICggX19yZXQgKSByZXR1cm4gX19yZXQ7CQkJCVwKIAkJc2FyZWFfcHJpdi0+bGFzdF9kaXNwYXRjaCA9IDA7CQkJCVwKIAkJcmFkZW9uX2ZyZWVsaXN0X3Jlc2V0KCBkZXYgKTsJCQkJXApAQCAtMTM2OCwyMSArMTkzNyw0MCBAQAogCU9VVF9SSU5HKCBhZ2UgKTsJCQkJCQlcCiB9IHdoaWxlICgwKQogCisjZGVmaW5lIFI2MDBfRElTUEFUQ0hfQUdFKGFnZSkgZG8gewkJCQkJXAorCU9VVF9SSU5HKENQX1BBQ0tFVDMoUjYwMF9JVF9TRVRfQ09ORklHX1JFRywgMSkpOwkJXAorCU9VVF9SSU5HKChSNjAwX0xBU1RfRElTUEFUQ0hfUkVHIC0gUjYwMF9TRVRfQ09ORklHX1JFR19PRkZTRVQpID4+IDIpOyAgXAorCU9VVF9SSU5HKGFnZSk7CQkJCQkJCVwKK30gd2hpbGUgKDApCisKKyNkZWZpbmUgUjYwMF9GUkFNRV9BR0UoYWdlKSBkbyB7CQkJCQlcCisJT1VUX1JJTkcoQ1BfUEFDS0VUMyhSNjAwX0lUX1NFVF9DT05GSUdfUkVHLCAxKSk7CQlcCisJT1VUX1JJTkcoKFI2MDBfTEFTVF9GUkFNRV9SRUcgLSBSNjAwX1NFVF9DT05GSUdfUkVHX09GRlNFVCkgPj4gMik7ICBcCisJT1VUX1JJTkcoYWdlKTsJCQkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBSNjAwX0NMRUFSX0FHRShhZ2UpIGRvIHsJCQkJCVwKKwlPVVRfUklORyhDUF9QQUNLRVQzKFI2MDBfSVRfU0VUX0NPTkZJR19SRUcsIDEpKTsJCVwKKwlPVVRfUklORygoUjYwMF9MQVNUX0NMRUFSX1JFRyAtIFI2MDBfU0VUX0NPTkZJR19SRUdfT0ZGU0VUKSA+PiAyKTsgIFwKKwlPVVRfUklORyhhZ2UpOwkJCQkJCQlcCit9IHdoaWxlICgwKQorCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgKiBSaW5nIGNvbnRyb2wKICAqLwogCiAjZGVmaW5lIFJBREVPTl9WRVJCT1NFCTAKIAotI2RlZmluZSBSSU5HX0xPQ0FMUwlpbnQgd3JpdGUsIF9ucjsgdW5zaWduZWQgaW50IG1hc2s7IHUzMiAqcmluZzsKKyNkZWZpbmUgUklOR19MT0NBTFMJaW50IHdyaXRlLCBfbnIsIF9hbGlnbl9ucjsgdW5zaWduZWQgaW50IG1hc2s7IHUzMiAqcmluZzsKIAogI2RlZmluZSBCRUdJTl9SSU5HKCBuICkgZG8gewkJCQkJCVwKIAlpZiAoIFJBREVPTl9WRVJCT1NFICkgewkJCQkJCVwKIAkJRFJNX0lORk8oICJCRUdJTl9SSU5HKCAlZCApXG4iLCAobikpOwkJCVwKIAl9CQkJCQkJCQlcCi0JaWYgKCBkZXZfcHJpdi0+cmluZy5zcGFjZSA8PSAobikgKiBzaXplb2YodTMyKSApIHsJCVwKKwlfYWxpZ25fbnIgPSAobiArIDB4ZikgJiB+MHhmOwkJCQkJXAorCWlmIChkZXZfcHJpdi0+cmluZy5zcGFjZSA8PSAoX2FsaWduX25yICogc2l6ZW9mKHUzMikpKSB7CVwKICAgICAgICAgICAgICAgICBDT01NSVRfUklORygpOwkJCQkJCVwKLQkJcmFkZW9uX3dhaXRfcmluZyggZGV2X3ByaXYsIChuKSAqIHNpemVvZih1MzIpICk7CVwKKwkJcmFkZW9uX3dhaXRfcmluZyggZGV2X3ByaXYsIF9hbGlnbl9uciAqIHNpemVvZih1MzIpKTsJXAogCX0JCQkJCQkJCVwKIAlfbnIgPSBuOyBkZXZfcHJpdi0+cmluZy5zcGFjZSAtPSAobikgKiBzaXplb2YodTMyKTsJCVwKIAlyaW5nID0gZGV2X3ByaXYtPnJpbmcuc3RhcnQ7CQkJCQlcCkBAIC0xMzk5LDE5ICsxOTg3LDE2IEBACiAJCURSTV9FUlJPUigJCQkJCQlcCiAJCQkiQURWQU5DRV9SSU5HKCk6IG1pc21hdGNoOiBucjogJXggd3JpdGU6ICV4IGxpbmU6ICVkXG4iLAlcCiAJCQkoKGRldl9wcml2LT5yaW5nLnRhaWwgKyBfbnIpICYgbWFzayksCQlcCi0JCQl3cml0ZSwgX19MSU5FX18pOwkJCQkJCVwKKwkJCXdyaXRlLCBfX0xJTkVfXyk7CQkJCVwKIAl9IGVsc2UJCQkJCQkJCVwKIAkJZGV2X3ByaXYtPnJpbmcudGFpbCA9IHdyaXRlOwkJCQlcCiB9IHdoaWxlICgwKQogCitleHRlcm4gdm9pZCByYWRlb25fY29tbWl0X3JpbmcoZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2KTsKKwogI2RlZmluZSBDT01NSVRfUklORygpIGRvIHsJCQkJCQlcCi0JLyogRmx1c2ggd3JpdGVzIHRvIHJpbmcgKi8JCQkJCVwKLQlEUk1fTUVNT1JZQkFSUklFUigpOwkJCQkJCVwKLQlHRVRfUklOR19IRUFEKCBkZXZfcHJpdiApOwkJCQkJXAotCVJBREVPTl9XUklURSggUkFERU9OX0NQX1JCX1dQVFIsIGRldl9wcml2LT5yaW5nLnRhaWwgKTsJCVwKLQkvKiByZWFkIGZyb20gUENJIGJ1cyB0byBlbnN1cmUgY29ycmVjdCBwb3N0aW5nICovCQlcCi0JUkFERU9OX1JFQUQoIFJBREVPTl9DUF9SQl9SUFRSICk7CQkJCVwKLX0gd2hpbGUgKDApCisJCXJhZGVvbl9jb21taXRfcmluZyhkZXZfcHJpdik7CQkJCVwKKwl9IHdoaWxlKDApCiAKICNkZWZpbmUgT1VUX1JJTkcoIHggKSBkbyB7CQkJCQkJXAogCWlmICggUkFERU9OX1ZFUkJPU0UgKSB7CQkJCQkJXApkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25faXJxLmMgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnEuYwppbmRleCA4Mjg5ZTE2Li45ODM2YzcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnEuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9pcnEuYwpAQCAtNjUsNyArNjUsNyBAQAogewogCWRybV9yYWRlb25fcHJpdmF0ZV90ICpkZXZfcHJpdiA9IGRldi0+ZGV2X3ByaXZhdGU7CiAKLQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkgeworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JTNjAwKSB7CiAJCXN3aXRjaCAoY3J0YykgewogCQljYXNlIDA6CiAJCQlyNTAwX3ZibF9pcnFfc2V0X3N0YXRlKGRldiwgUjUwMF9EMU1PREVfSU5UX01BU0ssIDEpOwpAQCAtMTAwLDcgKzEwMCw3IEBACiB7CiAJZHJtX3JhZGVvbl9wcml2YXRlX3QgKmRldl9wcml2ID0gZGV2LT5kZXZfcHJpdmF0ZTsKIAotCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JTNjkwKSB7CisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2MDApIHsKIAkJc3dpdGNoIChjcnRjKSB7CiAJCWNhc2UgMDoKIAkJCXI1MDBfdmJsX2lycV9zZXRfc3RhdGUoZGV2LCBSNTAwX0QxTU9ERV9JTlRfTUFTSywgMCk7CkBAIC0xMzUsNyArMTM1LDcgQEAKIAl1MzIgaXJxX21hc2sgPSBSQURFT05fU1dfSU5UX1RFU1Q7CiAKIAkqcjUwMF9kaXNwX2ludCA9IDA7Ci0JaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2OTApIHsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzYwMCkgewogCQkvKiB2YmwgaW50ZXJydXB0cyBpbiBhIGRpZmZlcmVudCBwbGFjZSAqLwogCiAJCWlmIChpcnFzICYgUjUwMF9ESVNQTEFZX0lOVF9TVEFUVVMpIHsKQEAgLTIwMiw3ICsyMDIsNyBAQAogCQlEUk1fV0FLRVVQKCZkZXZfcHJpdi0+c3dpX3F1ZXVlKTsKIAogCS8qIFZCTEFOSyBpbnRlcnJ1cHQgKi8KLQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkgeworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1JTNjAwKSB7CiAJCWlmIChyNTAwX2Rpc3BfaW50ICYgUjUwMF9EMV9WQkxBTktfSU5URVJSVVBUKQogCQkJZHJtX2hhbmRsZV92YmxhbmsoZGV2LCAwKTsKIAkJaWYgKHI1MDBfZGlzcF9pbnQgJiBSNTAwX0QyX1ZCTEFOS19JTlRFUlJVUFQpCkBAIC0yNjUsNyArMjY1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2OTApIHsKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzYwMCkgewogCQlpZiAoY3J0YyA9PSAwKQogCQkJcmV0dXJuIFJBREVPTl9SRUFEKFI1MDBfRDFDUlRDX0ZSQU1FX0NPVU5UKTsKIAkJZWxzZQpAQCAtMzI3LDcgKzMyNyw3IEBACiAJdTMyIGR1bW15OwogCiAJLyogRGlzYWJsZSAqYWxsKiBpbnRlcnJ1cHRzICovCi0JaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2OTApCisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUlM2MDApCiAJCVJBREVPTl9XUklURShSNTAwX0R4TU9ERV9JTlRfTUFTSywgMCk7CiAJUkFERU9OX1dSSVRFKFJBREVPTl9HRU5fSU5UX0NOVEwsIDApOwogCkBAIC0zNTcsNyArMzU3LDcgQEAKIAlpZiAoIWRldl9wcml2KQogCQlyZXR1cm47CiAKLQlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzY5MCkKKwlpZiAoKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9GQU1JTFlfTUFTSykgPj0gQ0hJUF9SUzYwMCkKIAkJUkFERU9OX1dSSVRFKFI1MDBfRHhNT0RFX0lOVF9NQVNLLCAwKTsKIAkvKiBEaXNhYmxlICphbGwqIGludGVycnVwdHMgKi8KIAlSQURFT05fV1JJVEUoUkFERU9OX0dFTl9JTlRfQ05UTCwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zdGF0ZS5jIGIvZHJpdmVycy9ncHUvZHJtL3JhZGVvbi9yYWRlb25fc3RhdGUuYwppbmRleCBlZjk0MGEwLi5mYTcyOGVjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vcmFkZW9uL3JhZGVvbl9zdGF0ZS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9yYWRlb24vcmFkZW9uX3N0YXRlLmMKQEAgLTE1NTYsOSArMTU1NiwxNSBAQAogCWJ1Zl9wcml2LT5hZ2UgPSArK21hc3Rlcl9wcml2LT5zYXJlYV9wcml2LT5sYXN0X2Rpc3BhdGNoOwogCiAJLyogRW1pdCB0aGUgdmVydGV4IGJ1ZmZlciBhZ2UgKi8KLQlCRUdJTl9SSU5HKDIpOwotCVJBREVPTl9ESVNQQVRDSF9BR0UoYnVmX3ByaXYtPmFnZSk7Ci0JQURWQU5DRV9SSU5HKCk7CisJaWYgKChkZXZfcHJpdi0+ZmxhZ3MgJiBSQURFT05fRkFNSUxZX01BU0spID49IENISVBfUjYwMCkgeworCQlCRUdJTl9SSU5HKDMpOworCQlSNjAwX0RJU1BBVENIX0FHRShidWZfcHJpdi0+YWdlKTsKKwkJQURWQU5DRV9SSU5HKCk7CisJfSBlbHNlIHsKKwkJQkVHSU5fUklORygyKTsKKwkJUkFERU9OX0RJU1BBVENIX0FHRShidWZfcHJpdi0+YWdlKTsKKwkJQURWQU5DRV9SSU5HKCk7CisJfQogCiAJYnVmLT5wZW5kaW5nID0gMTsKIAlidWYtPnVzZWQgPSAwOwpAQCAtMTk4MCw3ICsxOTg2LDcgQEAKIAogCS8qIGZpbmQgYSB2aXJ0dWFsIHN1cmZhY2UgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMiAqIFJBREVPTl9NQVhfU1VSRkFDRVM7IGkrKykKLQkJaWYgKGRldl9wcml2LT52aXJ0X3N1cmZhY2VzW2ldLmZpbGVfcHJpdiA9PSAwKQorCQlpZiAoZGV2X3ByaXYtPnZpcnRfc3VyZmFjZXNbaV0uZmlsZV9wcml2ID09IE5VTEwpCiAJCQlicmVhazsKIAlpZiAoaSA9PSAyICogUkFERU9OX01BWF9TVVJGQUNFUykgewogCQlyZXR1cm4gLTE7CkBAIC0yNDczLDI0ICsyNDc5LDI1IEBACiAKIAlidWYtPnVzZWQgPSBpbmRpcmVjdC0+ZW5kOwogCi0JLyogV2FpdCBmb3IgdGhlIDNEIHN0cmVhbSB0byBpZGxlIGJlZm9yZSB0aGUgaW5kaXJlY3QgYnVmZmVyCi0JICogY29udGFpbmluZyAyRCBhY2NlbGVyYXRpb24gY29tbWFuZHMgaXMgcHJvY2Vzc2VkLgotCSAqLwotCUJFR0lOX1JJTkcoMik7Ci0KLQlSQURFT05fV0FJVF9VTlRJTF8zRF9JRExFKCk7Ci0KLQlBRFZBTkNFX1JJTkcoKTsKLQogCS8qIERpc3BhdGNoIHRoZSBpbmRpcmVjdCBidWZmZXIgZnVsbCBvZiBjb21tYW5kcyBmcm9tIHRoZQogCSAqIFggc2VydmVyLiAgVGhpcyBpcyBpbnNlY3VyZSBhbmQgaXMgdGh1cyBvbmx5IGF2YWlsYWJsZSB0bwogCSAqIHByaXZpbGVnZWQgY2xpZW50cy4KIAkgKi8KLQlyYWRlb25fY3BfZGlzcGF0Y2hfaW5kaXJlY3QoZGV2LCBidWYsIGluZGlyZWN0LT5zdGFydCwgaW5kaXJlY3QtPmVuZCk7Ci0JaWYgKGluZGlyZWN0LT5kaXNjYXJkKSB7Ci0JCXJhZGVvbl9jcF9kaXNjYXJkX2J1ZmZlcihkZXYsIGZpbGVfcHJpdi0+bWFzdGVyLCBidWYpOworCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I2MDApCisJCXI2MDBfY3BfZGlzcGF0Y2hfaW5kaXJlY3QoZGV2LCBidWYsIGluZGlyZWN0LT5zdGFydCwgaW5kaXJlY3QtPmVuZCk7CisJZWxzZSB7CisJCS8qIFdhaXQgZm9yIHRoZSAzRCBzdHJlYW0gdG8gaWRsZSBiZWZvcmUgdGhlIGluZGlyZWN0IGJ1ZmZlcgorCQkgKiBjb250YWluaW5nIDJEIGFjY2VsZXJhdGlvbiBjb21tYW5kcyBpcyBwcm9jZXNzZWQuCisJCSAqLworCQlCRUdJTl9SSU5HKDIpOworCQlSQURFT05fV0FJVF9VTlRJTF8zRF9JRExFKCk7CisJCUFEVkFOQ0VfUklORygpOworCQlyYWRlb25fY3BfZGlzcGF0Y2hfaW5kaXJlY3QoZGV2LCBidWYsIGluZGlyZWN0LT5zdGFydCwgaW5kaXJlY3QtPmVuZCk7CiAJfQogCisJaWYgKGluZGlyZWN0LT5kaXNjYXJkKQorCQlyYWRlb25fY3BfZGlzY2FyZF9idWZmZXIoZGV2LCBmaWxlX3ByaXYtPm1hc3RlciwgYnVmKTsKKwogCUNPTU1JVF9SSU5HKCk7CiAJcmV0dXJuIDA7CiB9CkBAIC0zMDEwLDE0ICszMDE3LDE0IEBACiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BBUkFNX0xBU1RfRlJBTUU6CiAJCWRldl9wcml2LT5zdGF0cy5sYXN0X2ZyYW1lX3JlYWRzKys7Ci0JCXZhbHVlID0gR0VUX1NDUkFUQ0goMCk7CisJCXZhbHVlID0gR0VUX1NDUkFUQ0goZGV2X3ByaXYsIDApOwogCQlicmVhazsKIAljYXNlIFJBREVPTl9QQVJBTV9MQVNUX0RJU1BBVENIOgotCQl2YWx1ZSA9IEdFVF9TQ1JBVENIKDEpOworCQl2YWx1ZSA9IEdFVF9TQ1JBVENIKGRldl9wcml2LCAxKTsKIAkJYnJlYWs7CiAJY2FzZSBSQURFT05fUEFSQU1fTEFTVF9DTEVBUjoKIAkJZGV2X3ByaXYtPnN0YXRzLmxhc3RfY2xlYXJfcmVhZHMrKzsKLQkJdmFsdWUgPSBHRVRfU0NSQVRDSCgyKTsKKwkJdmFsdWUgPSBHRVRfU0NSQVRDSChkZXZfcHJpdiwgMik7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BBUkFNX0lSUV9OUjoKIAkJdmFsdWUgPSBkcm1fZGV2X3RvX2lycShkZXYpOwpAQCAtMzA1Miw3ICszMDU5LDEwIEBACiAJY2FzZSBSQURFT05fUEFSQU1fU0NSQVRDSF9PRkZTRVQ6CiAJCWlmICghZGV2X3ByaXYtPndyaXRlYmFja193b3JrcykKIAkJCXJldHVybiAtRUlOVkFMOwotCQl2YWx1ZSA9IFJBREVPTl9TQ1JBVENIX1JFR19PRkZTRVQ7CisJCWlmICgoZGV2X3ByaXYtPmZsYWdzICYgUkFERU9OX0ZBTUlMWV9NQVNLKSA+PSBDSElQX1I2MDApCisJCQl2YWx1ZSA9IFI2MDBfU0NSQVRDSF9SRUdfT0ZGU0VUOworCQllbHNlCisJCQl2YWx1ZSA9IFJBREVPTl9TQ1JBVENIX1JFR19PRkZTRVQ7CiAJCWJyZWFrOwogCWNhc2UgUkFERU9OX1BBUkFNX0NBUkRfVFlQRToKIAkJaWYgKGRldl9wcml2LT5mbGFncyAmIFJBREVPTl9JU19QQ0lFKQpAQCAtMzE1NSw2ICszMTY1LDcgQEAKIAogdm9pZCByYWRlb25fZHJpdmVyX2xhc3RjbG9zZShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogeworCXJhZGVvbl9zdXJmYWNlc19yZWxlYXNlKFBDSUdBUlRfRklMRV9QUklWLCBkZXYtPmRldl9wcml2YXRlKTsKIAlyYWRlb25fZG9fcmVsZWFzZShkZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vc2F2YWdlL3NhdmFnZV9iY2kuYyBiL2RyaXZlcnMvZ3B1L2RybS9zYXZhZ2Uvc2F2YWdlX2JjaS5jCmluZGV4IGQ0NjViMmYuLjQ1NmNkMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9zYXZhZ2Uvc2F2YWdlX2JjaS5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9zYXZhZ2Uvc2F2YWdlX2JjaS5jCkBAIC01OTksOCArNTk5LDggQEAKIAkJCSAgICBkcm1fbXRycl9hZGQoZGV2X3ByaXYtPm10cnJbMl0uYmFzZSwKIAkJCQkJIGRldl9wcml2LT5tdHJyWzJdLnNpemUsIERSTV9NVFJSX1dDKTsKIAkJfSBlbHNlIHsKLQkJCURSTV9FUlJPUigic3RyYW5nZSBwY2lfcmVzb3VyY2VfbGVuICUwOGx4XG4iLAotCQkJCSAgZHJtX2dldF9yZXNvdXJjZV9sZW4oZGV2LCAwKSk7CisJCQlEUk1fRVJST1IoInN0cmFuZ2UgcGNpX3Jlc291cmNlX2xlbiAlMDhsbHhcbiIsCisJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWRybV9nZXRfcmVzb3VyY2VfbGVuKGRldiwgMCkpOwogCQl9CiAJfSBlbHNlIGlmIChkZXZfcHJpdi0+Y2hpcHNldCAhPSBTM19TVVBFUlNBVkFHRSAmJgogCQkgICBkZXZfcHJpdi0+Y2hpcHNldCAhPSBTM19TQVZBR0UyMDAwKSB7CkBAIC02MjAsOCArNjIwLDggQEAKIAkJCSAgICBkcm1fbXRycl9hZGQoZGV2X3ByaXYtPm10cnJbMF0uYmFzZSwKIAkJCQkJIGRldl9wcml2LT5tdHJyWzBdLnNpemUsIERSTV9NVFJSX1dDKTsKIAkJfSBlbHNlIHsKLQkJCURSTV9FUlJPUigic3RyYW5nZSBwY2lfcmVzb3VyY2VfbGVuICUwOGx4XG4iLAotCQkJCSAgZHJtX2dldF9yZXNvdXJjZV9sZW4oZGV2LCAxKSk7CisJCQlEUk1fRVJST1IoInN0cmFuZ2UgcGNpX3Jlc291cmNlX2xlbiAlMDhsbHhcbiIsCisJCQkJICAodW5zaWduZWQgbG9uZyBsb25nKWRybV9nZXRfcmVzb3VyY2VfbGVuKGRldiwgMSkpOwogCQl9CiAJfSBlbHNlIHsKIAkJbW1pb19iYXNlID0gZHJtX2dldF9yZXNvdXJjZV9zdGFydChkZXYsIDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL3ZpYS92aWFfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuYwppbmRleCAwOTkzYjQ0Li5iYzJmNTE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuYworKysgYi9kcml2ZXJzL2dwdS9kcm0vdmlhL3ZpYV9kcnYuYwpAQCAtMjgsMTEgKzI4LDYgQEAKIAogI2luY2x1ZGUgImRybV9wY2lpZHMuaCIKIAotc3RhdGljIGludCBkcmlfbGlicmFyeV9uYW1lKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGNoYXIgKmJ1ZikKLXsKLQlyZXR1cm4gc25wcmludGYoYnVmLCBQQUdFX1NJWkUsICJ1bmljaHJvbWUiKTsKLX0KLQogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHBjaWlkbGlzdFtdID0gewogCXZpYWRydl9QQ0lfSURTCiB9OwpAQCAtNTIsNyArNDcsNiBAQAogCS5pcnFfdW5pbnN0YWxsID0gdmlhX2RyaXZlcl9pcnFfdW5pbnN0YWxsLAogCS5pcnFfaGFuZGxlciA9IHZpYV9kcml2ZXJfaXJxX2hhbmRsZXIsCiAJLmRtYV9xdWllc2NlbnQgPSB2aWFfZHJpdmVyX2RtYV9xdWllc2NlbnQsCi0JLmRyaV9saWJyYXJ5X25hbWUgPSBkcmlfbGlicmFyeV9uYW1lLAogCS5yZWNsYWltX2J1ZmZlcnMgPSBkcm1fY29yZV9yZWNsYWltX2J1ZmZlcnMsCiAJLnJlY2xhaW1fYnVmZmVyc19sb2NrZWQgPSBOVUxMLAogCS5yZWNsYWltX2J1ZmZlcnNfaWRsZWxvY2tlZCA9IHZpYV9yZWNsYWltX2J1ZmZlcnNfbG9ja2VkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9od21vbi9LY29uZmlnIGIvZHJpdmVycy9od21vbi9LY29uZmlnCmluZGV4IGI0ZWVhMDIuLjUxZmY5YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vS2NvbmZpZworKysgYi9kcml2ZXJzL2h3bW9uL0tjb25maWcKQEAgLTM0MywxMiArMzQzLDEzIEBACiAJICB3aWxsIGJlIGNhbGxlZCBmc2Nwb3MuCiAKIGNvbmZpZyBTRU5TT1JTX0ZTQ0hNRAotCXRyaXN0YXRlICJGU0MgUG9zZWlkb24sIFNjeWxsYSwgSGVybWVzLCBIZWltZGFsbCBhbmQgSGVyYWNsZXMiCisJdHJpc3RhdGUgIkZ1aml0c3UgU2llbWVucyBDb21wdXRlcnMgc2Vuc29yIGNoaXBzIgogCWRlcGVuZHMgb24gWDg2ICYmIEkyQwogCWhlbHAKLQkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB2YXJpb3VzIEZ1aml0c3UgU2llbWVucwotCSAgQ29tcHV0ZXJzIHNlbnNvciBjaGlwcywgaW5jbHVkaW5nIHN1cHBvcnQgZm9yIHRoZSBpbnRlZ3JhdGVkCi0JICB3YXRjaGRvZy4KKwkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgZm9sbG93aW5nIEZ1aml0c3UKKwkgIFNpZW1lbnMgQ29tcHV0ZXJzIChGU0MpIHNlbnNvciBjaGlwczogUG9zZWlkb24sIFNjeWxsYSwgSGVybWVzLAorCSAgSGVpbWRhbGwsIEhlcmFjbGVzLCBIYWRlcyBhbmQgU3lsZXVzIGluY2x1ZGluZyBzdXBwb3J0IGZvciB0aGUKKwkgIGludGVncmF0ZWQgd2F0Y2hkb2cuCiAKIAkgIFRoaXMgaXMgYSBtZXJnZWQgZHJpdmVyIGZvciBGU0Mgc2Vuc29yIGNoaXBzIHJlcGxhY2luZyB0aGUgZnNjcG9zLAogCSAgZnNjc2N5IGFuZCBmc2NoZXIgZHJpdmVycyBhbmQgYWRkaW5nIHN1cHBvcnQgZm9yIHNldmVyYWwgb3RoZXIgRlNDCkBAIC02MzUsNiArNjM2LDIwIEBACiAJICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCiAJICB3aWxsIGJlIGNhbGxlZCBwYzg3NDI3LgogCitjb25maWcgU0VOU09SU19QQ0Y4NTkxCisJdHJpc3RhdGUgIlBoaWxpcHMgUENGODU5MSBBREMvREFDIgorCWRlcGVuZHMgb24gSTJDCisJZGVmYXVsdCBuCisJaGVscAorCSAgSWYgeW91IHNheSB5ZXMgaGVyZSB5b3UgZ2V0IHN1cHBvcnQgZm9yIFBoaWxpcHMgUENGODU5MSA0LWNoYW5uZWwKKwkgIEFEQywgMS1jaGFubmVsIERBQyBjaGlwcy4KKworCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQorCSAgd2lsbCBiZSBjYWxsZWQgcGNmODU5MS4KKworCSAgVGhlc2UgZGV2aWNlcyBhcmUgaGFyZCB0byBkZXRlY3QgYW5kIHJhcmVseSBmb3VuZCBvbiBtYWluc3RyZWFtCisJICBoYXJkd2FyZS4gIElmIHVuc3VyZSwgc2F5IE4uCisKIGNvbmZpZyBTRU5TT1JTX1NJUzU1OTUKIAl0cmlzdGF0ZSAiU2lsaWNvbiBJbnRlZ3JhdGVkIFN5c3RlbXMgQ29ycC4gU2lTNTU5NSIKIAlkZXBlbmRzIG9uIFBDSQpAQCAtODI3LDcgKzg0Miw3IEBACiAJICB3aWxsIGJlIGNhbGxlZCB3ODM2MjdoZi4KIAogY29uZmlnIFNFTlNPUlNfVzgzNjI3RUhGCi0JdHJpc3RhdGUgIldpbmJvbmQgVzgzNjI3RUhGL0RIRyIKKwl0cmlzdGF0ZSAiV2luYm9uZCBXODM2MjdFSEYvRUhHL0RIRywgVzgzNjY3SEciCiAJc2VsZWN0IEhXTU9OX1ZJRAogCWhlbHAKIAkgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0IGZvciB0aGUgaGFyZHdhcmUKQEAgLTgzOCw2ICs4NTMsOCBAQAogCSAgY2hpcCBzdWl0ZWQgZm9yIHNwZWNpZmljIEludGVsIHByb2Nlc3NvcnMgdGhhdCB1c2UgUEVDSSBzdWNoIGFzCiAJICB0aGUgQ29yZSAyIER1by4KIAorCSAgVGhpcyBkcml2ZXIgYWxzbyBzdXBwb3J0cyB0aGUgVzgzNjY3SEcgY2hpcC4KKwogCSAgVGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuICBJZiBzbywgdGhlIG1vZHVsZQogCSAgd2lsbCBiZSBjYWxsZWQgdzgzNjI3ZWhmLgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL01ha2VmaWxlIGIvZHJpdmVycy9od21vbi9NYWtlZmlsZQppbmRleCAyZTgwZjM3Li5lMzMyZDYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaHdtb24vTWFrZWZpbGUKQEAgLTcwLDYgKzcwLDcgQEAKIG9iai0kKENPTkZJR19TRU5TT1JTX01BWDY2NTApCSs9IG1heDY2NTAubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfUEM4NzM2MCkJKz0gcGM4NzM2MC5vCiBvYmotJChDT05GSUdfU0VOU09SU19QQzg3NDI3KQkrPSBwYzg3NDI3Lm8KK29iai0kKENPTkZJR19TRU5TT1JTX1BDRjg1OTEpCSs9IHBjZjg1OTEubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfU0lTNTU5NSkJKz0gc2lzNTU5NS5vCiBvYmotJChDT05GSUdfU0VOU09SU19TTVNDNDdCMzk3KSs9IHNtc2M0N2IzOTcubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfU01TQzQ3TTEpCSs9IHNtc2M0N20xLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vZHMxNjIxLmMgYi9kcml2ZXJzL2h3bW9uL2RzMTYyMS5jCmluZGV4IDc0MTUzODEuLjUzZjg4ZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vZHMxNjIxLmMKKysrIGIvZHJpdmVycy9od21vbi9kczE2MjEuYwpAQCAtODEsNzEgKzgxLDg0IEBACiAJdTggY29uZjsJCQkvKiBSZWdpc3RlciBlbmNvZGluZywgY29tYmluZWQgKi8KIH07CiAKLXN0YXRpYyBpbnQgZHMxNjIxX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpOwotc3RhdGljIGludCBkczE2MjFfZGV0ZWN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBraW5kLAotCQkJIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbyk7Ci1zdGF0aWMgdm9pZCBkczE2MjFfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7Ci1zdGF0aWMgaW50IGRzMTYyMV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7Ci1zdGF0aWMgc3RydWN0IGRzMTYyMV9kYXRhICpkczE2MjFfdXBkYXRlX2NsaWVudChzdHJ1Y3QgZGV2aWNlICpkZXYpOwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgZHMxNjIxX2lkW10gPSB7Ci0JeyAiZHMxNjIxIiwgZHMxNjIxIH0sCi0JeyAiZHMxNjI1IiwgZHMxNjIxIH0sCi0JeyB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGRzMTYyMV9pZCk7Ci0KLS8qIFRoaXMgaXMgdGhlIGRyaXZlciB0aGF0IHdpbGwgYmUgaW5zZXJ0ZWQgKi8KLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkczE2MjFfZHJpdmVyID0gewotCS5jbGFzcwkJPSBJMkNfQ0xBU1NfSFdNT04sCi0JLmRyaXZlciA9IHsKLQkJLm5hbWUJPSAiZHMxNjIxIiwKLQl9LAotCS5wcm9iZQkJPSBkczE2MjFfcHJvYmUsCi0JLnJlbW92ZQkJPSBkczE2MjFfcmVtb3ZlLAotCS5pZF90YWJsZQk9IGRzMTYyMV9pZCwKLQkuZGV0ZWN0CQk9IGRzMTYyMV9kZXRlY3QsCi0JLmFkZHJlc3NfZGF0YQk9ICZhZGRyX2RhdGEsCi19OwotCi0vKiBBbGwgcmVnaXN0ZXJzIGFyZSB3b3JkLXNpemVkLCBleGNlcHQgZm9yIHRoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyLgorLyogVGVtcGVyYXR1cmUgcmVnaXN0ZXJzIGFyZSB3b3JkLXNpemVkLgogICAgRFMxNjIxIHVzZXMgYSBoaWdoLWJ5dGUgZmlyc3QgY29udmVudGlvbiwgd2hpY2ggaXMgZXhhY3RseSBvcHBvc2l0ZSB0bwogICAgdGhlIFNNQnVzIHN0YW5kYXJkLiAqLwotc3RhdGljIGludCBkczE2MjFfcmVhZF92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCitzdGF0aWMgaW50IGRzMTYyMV9yZWFkX3RlbXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQogewotCWlmIChyZWcgPT0gRFMxNjIxX1JFR19DT05GKQotCQlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKLQllbHNlCi0JCXJldHVybiBzd2FiMTYoaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGNsaWVudCwgcmVnKSk7CisJaW50IHJldDsKKworCXJldCA9IGkyY19zbWJ1c19yZWFkX3dvcmRfZGF0YShjbGllbnQsIHJlZyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0dXJuIHN3YWIxNihyZXQpOwogfQogCi1zdGF0aWMgaW50IGRzMTYyMV93cml0ZV92YWx1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHUxNiB2YWx1ZSkKK3N0YXRpYyBpbnQgZHMxNjIxX3dyaXRlX3RlbXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1MTYgdmFsdWUpCiB7Ci0JaWYgKHJlZyA9PSBEUzE2MjFfUkVHX0NPTkYpCi0JCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7Ci0JZWxzZQotCQlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX3dvcmRfZGF0YShjbGllbnQsIHJlZywgc3dhYjE2KHZhbHVlKSk7CisJcmV0dXJuIGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoY2xpZW50LCByZWcsIHN3YWIxNih2YWx1ZSkpOwogfQogCiBzdGF0aWMgdm9pZCBkczE2MjFfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlpbnQgcmVnID0gZHMxNjIxX3JlYWRfdmFsdWUoY2xpZW50LCBEUzE2MjFfUkVHX0NPTkYpOworCXU4IGNvbmYsIG5ld19jb25mOworCisJbmV3X2NvbmYgPSBjb25mID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgRFMxNjIxX1JFR19DT05GKTsKIAkvKiBzd2l0Y2ggdG8gY29udGludW91cyBjb252ZXJzaW9uIG1vZGUgKi8KLQlyZWcgJj0gfiBEUzE2MjFfUkVHX0NPTkZJR18xU0hPVDsKKwluZXdfY29uZiAmPSB+RFMxNjIxX1JFR19DT05GSUdfMVNIT1Q7CiAKIAkvKiBzZXR1cCBvdXRwdXQgcG9sYXJpdHkgKi8KIAlpZiAocG9sYXJpdHkgPT0gMCkKLQkJcmVnICY9IH5EUzE2MjFfUkVHX0NPTkZJR19QT0xBUklUWTsKKwkJbmV3X2NvbmYgJj0gfkRTMTYyMV9SRUdfQ09ORklHX1BPTEFSSVRZOwogCWVsc2UgaWYgKHBvbGFyaXR5ID09IDEpCi0JCXJlZyB8PSBEUzE2MjFfUkVHX0NPTkZJR19QT0xBUklUWTsKKwkJbmV3X2NvbmYgfD0gRFMxNjIxX1JFR19DT05GSUdfUE9MQVJJVFk7CiAJCi0JZHMxNjIxX3dyaXRlX3ZhbHVlKGNsaWVudCwgRFMxNjIxX1JFR19DT05GLCByZWcpOworCWlmIChjb25mICE9IG5ld19jb25mKQorCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgRFMxNjIxX1JFR19DT05GLCBuZXdfY29uZik7CiAJCiAJLyogc3RhcnQgY29udmVyc2lvbiAqLwogCWkyY19zbWJ1c193cml0ZV9ieXRlKGNsaWVudCwgRFMxNjIxX0NPTV9TVEFSVCk7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZHMxNjIxX2RhdGEgKmRzMTYyMV91cGRhdGVfY2xpZW50KHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOworCXN0cnVjdCBkczE2MjFfZGF0YSAqZGF0YSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXU4IG5ld19jb25mOworCisJbXV0ZXhfbG9jaygmZGF0YS0+dXBkYXRlX2xvY2spOworCisJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgZGF0YS0+bGFzdF91cGRhdGVkICsgSFogKyBIWiAvIDIpCisJICAgIHx8ICFkYXRhLT52YWxpZCkgeworCQlpbnQgaTsKKworCQlkZXZfZGJnKCZjbGllbnQtPmRldiwgIlN0YXJ0aW5nIGRzMTYyMSB1cGRhdGVcbiIpOworCisJCWRhdGEtPmNvbmYgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBEUzE2MjFfUkVHX0NPTkYpOworCisJCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGRhdGEtPnRlbXApOyBpKyspCisJCQlkYXRhLT50ZW1wW2ldID0gZHMxNjIxX3JlYWRfdGVtcChjbGllbnQsCisJCQkJCQkJIERTMTYyMV9SRUdfVEVNUFtpXSk7CisKKwkJLyogcmVzZXQgYWxhcm1zIGlmIG5lY2Vzc2FyeSAqLworCQluZXdfY29uZiA9IGRhdGEtPmNvbmY7CisJCWlmIChkYXRhLT50ZW1wWzBdID4gZGF0YS0+dGVtcFsxXSkJLyogaW5wdXQgPiBtaW4gKi8KKwkJCW5ld19jb25mICY9IH5EUzE2MjFfQUxBUk1fVEVNUF9MT1c7CisJCWlmIChkYXRhLT50ZW1wWzBdIDwgZGF0YS0+dGVtcFsyXSkJLyogaW5wdXQgPCBtYXggKi8KKwkJCW5ld19jb25mICY9IH5EUzE2MjFfQUxBUk1fVEVNUF9ISUdIOworCQlpZiAoZGF0YS0+Y29uZiAhPSBuZXdfY29uZikKKwkJCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBEUzE2MjFfUkVHX0NPTkYsCisJCQkJCQkgIG5ld19jb25mKTsKKworCQlkYXRhLT5sYXN0X3VwZGF0ZWQgPSBqaWZmaWVzOworCQlkYXRhLT52YWxpZCA9IDE7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CisKKwlyZXR1cm4gZGF0YTsKK30KKwogc3RhdGljIHNzaXplX3Qgc2hvd190ZW1wKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmRhLAogCQkJIGNoYXIgKmJ1ZikKIHsKQEAgLTE2MCwxMyArMTczLDEzIEBACiB7CiAJc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlICphdHRyID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRhKTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdG9faTJjX2NsaWVudChkZXYpOwotCXN0cnVjdCBkczE2MjFfZGF0YSAqZGF0YSA9IGRzMTYyMV91cGRhdGVfY2xpZW50KGRldik7CisJc3RydWN0IGRzMTYyMV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJdTE2IHZhbCA9IExNNzVfVEVNUF9UT19SRUcoc2ltcGxlX3N0cnRvbChidWYsIE5VTEwsIDEwKSk7CiAKIAltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7CiAJZGF0YS0+dGVtcFthdHRyLT5pbmRleF0gPSB2YWw7Ci0JZHMxNjIxX3dyaXRlX3ZhbHVlKGNsaWVudCwgRFMxNjIxX1JFR19URU1QW2F0dHItPmluZGV4XSwKLQkJCSAgIGRhdGEtPnRlbXBbYXR0ci0+aW5kZXhdKTsKKwlkczE2MjFfd3JpdGVfdGVtcChjbGllbnQsIERTMTYyMV9SRUdfVEVNUFthdHRyLT5pbmRleF0sCisJCQkgIGRhdGEtPnRlbXBbYXR0ci0+aW5kZXhdKTsKIAltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKIAlyZXR1cm4gY291bnQ7CiB9CkBAIC0yMjgsMTMgKzI0MSwxNCBAQAogCQkvKiBUaGUgTlZCIGJpdCBzaG91bGQgYmUgbG93IGlmIG5vIEVFUFJPTSB3cml0ZSBoYXMgYmVlbiAKIAkJICAgcmVxdWVzdGVkIGR1cmluZyB0aGUgbGF0ZXN0IDEwbXMsIHdoaWNoIGlzIGhpZ2hseSAKIAkJICAgaW1wcm9iYWJsZSBpbiBvdXIgY2FzZS4gKi8KLQkJY29uZiA9IGRzMTYyMV9yZWFkX3ZhbHVlKGNsaWVudCwgRFMxNjIxX1JFR19DT05GKTsKLQkJaWYgKGNvbmYgJiBEUzE2MjFfUkVHX0NPTkZJR19OVkIpCisJCWNvbmYgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBEUzE2MjFfUkVHX0NPTkYpOworCQlpZiAoY29uZiA8IDAgfHwgY29uZiAmIERTMTYyMV9SRUdfQ09ORklHX05WQikKIAkJCXJldHVybiAtRU5PREVWOwogCQkvKiBUaGUgNyBsb3dlc3QgYml0cyBvZiBhIHRlbXBlcmF0dXJlIHNob3VsZCBhbHdheXMgYmUgMC4gKi8KIAkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoRFMxNjIxX1JFR19URU1QKTsgaSsrKSB7Ci0JCQl0ZW1wID0gZHMxNjIxX3JlYWRfdmFsdWUoY2xpZW50LCBEUzE2MjFfUkVHX1RFTVBbaV0pOwotCQkJaWYgKHRlbXAgJiAweDAwN2YpCisJCQl0ZW1wID0gaTJjX3NtYnVzX3JlYWRfd29yZF9kYXRhKGNsaWVudCwKKwkJCQkJCQlEUzE2MjFfUkVHX1RFTVBbaV0pOworCQkJaWYgKHRlbXAgPCAwIHx8ICh0ZW1wICYgMHg3ZjAwKSkKIAkJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCX0KQEAgLTI5NCw0NSArMzA4LDI1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBkczE2MjFfaWRbXSA9IHsKKwl7ICJkczE2MjEiLCBkczE2MjEgfSwKKwl7ICJkczE2MjUiLCBkczE2MjEgfSwKKwl7IH0KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgZHMxNjIxX2lkKTsKIAotc3RhdGljIHN0cnVjdCBkczE2MjFfZGF0YSAqZHMxNjIxX3VwZGF0ZV9jbGllbnQoc3RydWN0IGRldmljZSAqZGV2KQotewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB0b19pMmNfY2xpZW50KGRldik7Ci0Jc3RydWN0IGRzMTYyMV9kYXRhICpkYXRhID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JdTggbmV3X2NvbmY7Ci0KLQltdXRleF9sb2NrKCZkYXRhLT51cGRhdGVfbG9jayk7Ci0KLQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBkYXRhLT5sYXN0X3VwZGF0ZWQgKyBIWiArIEhaIC8gMikKLQkgICAgfHwgIWRhdGEtPnZhbGlkKSB7Ci0JCWludCBpOwotCi0JCWRldl9kYmcoJmNsaWVudC0+ZGV2LCAiU3RhcnRpbmcgZHMxNjIxIHVwZGF0ZVxuIik7Ci0KLQkJZGF0YS0+Y29uZiA9IGRzMTYyMV9yZWFkX3ZhbHVlKGNsaWVudCwgRFMxNjIxX1JFR19DT05GKTsKLQotCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShkYXRhLT50ZW1wKTsgaSsrKQotCQkJZGF0YS0+dGVtcFtpXSA9IGRzMTYyMV9yZWFkX3ZhbHVlKGNsaWVudCwKLQkJCQkJCQkgIERTMTYyMV9SRUdfVEVNUFtpXSk7Ci0KLQkJLyogcmVzZXQgYWxhcm1zIGlmIG5lY2Vzc2FyeSAqLwotCQluZXdfY29uZiA9IGRhdGEtPmNvbmY7Ci0JCWlmIChkYXRhLT50ZW1wWzBdID4gZGF0YS0+dGVtcFsxXSkJLyogaW5wdXQgPiBtaW4gKi8KLQkJCW5ld19jb25mICY9IH5EUzE2MjFfQUxBUk1fVEVNUF9MT1c7Ci0JCWlmIChkYXRhLT50ZW1wWzBdIDwgZGF0YS0+dGVtcFsyXSkJLyogaW5wdXQgPCBtYXggKi8KLQkJCW5ld19jb25mICY9IH5EUzE2MjFfQUxBUk1fVEVNUF9ISUdIOwotCQlpZiAoZGF0YS0+Y29uZiAhPSBuZXdfY29uZikKLQkJCWRzMTYyMV93cml0ZV92YWx1ZShjbGllbnQsIERTMTYyMV9SRUdfQ09ORiwKLQkJCQkJICAgbmV3X2NvbmYpOwotCi0JCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7Ci0JCWRhdGEtPnZhbGlkID0gMTsKLQl9Ci0KLQltdXRleF91bmxvY2soJmRhdGEtPnVwZGF0ZV9sb2NrKTsKLQotCXJldHVybiBkYXRhOwotfQorLyogVGhpcyBpcyB0aGUgZHJpdmVyIHRoYXQgd2lsbCBiZSBpbnNlcnRlZCAqLworc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGRzMTYyMV9kcml2ZXIgPSB7CisJLmNsYXNzCQk9IEkyQ19DTEFTU19IV01PTiwKKwkuZHJpdmVyID0geworCQkubmFtZQk9ICJkczE2MjEiLAorCX0sCisJLnByb2JlCQk9IGRzMTYyMV9wcm9iZSwKKwkucmVtb3ZlCQk9IGRzMTYyMV9yZW1vdmUsCisJLmlkX3RhYmxlCT0gZHMxNjIxX2lkLAorCS5kZXRlY3QJCT0gZHMxNjIxX2RldGVjdCwKKwkuYWRkcmVzc19kYXRhCT0gJmFkZHJfZGF0YSwKK307CiAKIHN0YXRpYyBpbnQgX19pbml0IGRzMTYyMV9pbml0KHZvaWQpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL2ZzY2htZC5jIGIvZHJpdmVycy9od21vbi9mc2NobWQuYwppbmRleCBkMDdmNGVmLi5lYTk1NWVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2ZzY2htZC5jCisrKyBiL2RyaXZlcnMvaHdtb24vZnNjaG1kLmMKQEAgLTEsNiArMSw2IEBACiAvKiBmc2NobWQuYwogICoKLSAqIENvcHlyaWdodCAoQykgMjAwNywyMDA4IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDcgLSAyMDA5IEhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CkBAIC0xOSw3ICsxOSw3IEBACiAKIC8qCiAgKiAgTWVyZ2VkIEZ1aml0c3UgU2llbWVucyBod21vbiBkcml2ZXIsIHN1cHBvcnRpbmcgdGhlIFBvc2VpZG9uLCBIZXJtZXMsCi0gKiAgU2N5bGxhLCBIZXJhY2xlcyBhbmQgSGVpbWRhbGwgY2hpcHMKKyAqICBTY3lsbGEsIEhlcmFjbGVzLCBIZWltZGFsbCwgSGFkZXMgYW5kIFN5bGV1cyBjaGlwcwogICoKICAqICBCYXNlZCBvbiB0aGUgb3JpZ2luYWwgMi40IGZzY3NjeSwgMi42IGZzY3BvcywgMi42IGZzY2hlciBhbmQgMi42CiAgKiAgKGNhbmRpZGF0ZSkgZnNjaG1kIGRyaXZlcnM6CkBAIC01Niw3ICs1Niw3IEBACiBtb2R1bGVfcGFyYW0obm93YXlvdXQsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKG5vd2F5b3V0LCAiV2F0Y2hkb2cgY2Fubm90IGJlIHN0b3BwZWQgb25jZSBzdGFydGVkIChkZWZhdWx0PSIKIAlfX01PRFVMRV9TVFJJTkcoV0FUQ0hET0dfTk9XQVlPVVQpICIpIik7Ci1JMkNfQ0xJRU5UX0lOU01PRF81KGZzY3BvcywgZnNjaGVyLCBmc2NzY3ksIGZzY2hyYywgZnNjaG1kKTsKK0kyQ19DTElFTlRfSU5TTU9EXzcoZnNjcG9zLCBmc2NoZXIsIGZzY3NjeSwgZnNjaHJjLCBmc2NobWQsIGZzY2hkcywgZnNjc3lsKTsKIAogLyoKICAqIFRoZSBGU0NITUQgcmVnaXN0ZXJzIGFuZCBvdGhlciBkZWZpbmVzCkBAIC03NSw5ICs3NSwxMiBAQAogI2RlZmluZSBGU0NITURfQ09OVFJPTF9BTEVSVF9MRUQJMHgwMQogCiAvKiB3YXRjaGRvZyAqLwotI2RlZmluZSBGU0NITURfUkVHX1dET0dfUFJFU0VUCQkweDI4Ci0jZGVmaW5lIEZTQ0hNRF9SRUdfV0RPR19TVEFURQkJMHgyMwotI2RlZmluZSBGU0NITURfUkVHX1dET0dfQ09OVFJPTAkJMHgyMQorc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfV0RPR19DT05UUk9MWzddID0KKwl7IDB4MjEsIDB4MjEsIDB4MjEsIDB4MjEsIDB4MjEsIDB4MjgsIDB4MjggfTsKK3N0YXRpYyBjb25zdCB1OCBGU0NITURfUkVHX1dET0dfU1RBVEVbN10gPQorCXsgMHgyMywgMHgyMywgMHgyMywgMHgyMywgMHgyMywgMHgyOSwgMHgyOSB9Oworc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfV0RPR19QUkVTRVRbN10gPQorCXsgMHgyOCwgMHgyOCwgMHgyOCwgMHgyOCwgMHgyOCwgMHgyYSwgMHgyYSB9OwogCiAjZGVmaW5lIEZTQ0hNRF9XRE9HX0NPTlRST0xfVFJJR0dFUgkweDEwCiAjZGVmaW5lIEZTQ0hNRF9XRE9HX0NPTlRST0xfU1RBUlRFRAkweDEwIC8qIHRoZSBzYW1lIGFzIHRyaWdnZXIgKi8KQEAgLTg3LDcwICs5MCw5NSBAQAogI2RlZmluZSBGU0NITURfV0RPR19TVEFURV9DQVJEUkVTRVQJMHgwMgogCiAvKiB2b2x0YWdlcywgd2VpcmQgb3JkZXIgaXMgdG8ga2VlcCB0aGUgc2FtZSBvcmRlciBhcyB0aGUgb2xkIGRyaXZlcnMgKi8KLXN0YXRpYyBjb25zdCB1OCBGU0NITURfUkVHX1ZPTFRbM10gPSB7IDB4NDUsIDB4NDIsIDB4NDggfTsKK3N0YXRpYyBjb25zdCB1OCBGU0NITURfUkVHX1ZPTFRbN11bNl0gPSB7CisJeyAweDQ1LCAweDQyLCAweDQ4IH0sCQkJCS8qIHBvcyAqLworCXsgMHg0NSwgMHg0MiwgMHg0OCB9LAkJCQkvKiBoZXIgKi8KKwl7IDB4NDUsIDB4NDIsIDB4NDggfSwJCQkJLyogc2N5ICovCisJeyAweDQ1LCAweDQyLCAweDQ4IH0sCQkJCS8qIGhyYyAqLworCXsgMHg0NSwgMHg0MiwgMHg0OCB9LAkJCQkvKiBobWQgKi8KKwl7IDB4MjEsIDB4MjAsIDB4MjIgfSwJCQkJLyogaGRzICovCisJeyAweDIxLCAweDIwLCAweDIyLCAweDIzLCAweDI0LCAweDI1IH0sCQkvKiBzeWwgKi8KK307CisKK3N0YXRpYyBjb25zdCBpbnQgRlNDSE1EX05PX1ZPTFRfU0VOU09SU1s3XSA9IHsgMywgMywgMywgMywgMywgMywgNiB9OwogCiAvKiBtaW5pbXVtIHB3bSBhdCB3aGljaCB0aGUgZmFuIGlzIGRyaXZlbiAocHdtIGNhbiBieSBpbmNyZWFzZWQgZGVwZW5kaW5nIG9uCiAgICB0aGUgdGVtcC4gTm90aWNlIHRoYXQgZm9yIHRoZSBzY3kgc29tZSBmYW5zIHNoYXJlIHRoZXJlIG1pbmltdW0gc3BlZWQuCiAgICBBbHNvIG5vdGljZSB0aGF0IHdpdGggdGhlIHNjeSB0aGUgc2Vuc29yIG9yZGVyIGlzIGRpZmZlcmVudCB0aGFuIHdpdGggdGhlCiAgICBvdGhlciBjaGlwcywgdGhpcyBvcmRlciB3YXMgaW4gdGhlIDIuNCBkcml2ZXIgYW5kIGtlcHQgZm9yIGNvbnNpc3RlbmN5LiAqLwotc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfRkFOX01JTls1XVs2XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBGU0NITURfUkVHX0ZBTl9NSU5bN11bN10gPSB7CiAJeyAweDU1LCAweDY1IH0sCQkJCQkvKiBwb3MgKi8KIAl7IDB4NTUsIDB4NjUsIDB4YjUgfSwJCQkJLyogaGVyICovCiAJeyAweDY1LCAweDY1LCAweDU1LCAweGE1LCAweDU1LCAweGE1IH0sCQkvKiBzY3kgKi8KIAl7IDB4NTUsIDB4NjUsIDB4YTUsIDB4YjUgfSwJCQkvKiBocmMgKi8KIAl7IDB4NTUsIDB4NjUsIDB4YTUsIDB4YjUsIDB4YzUgfSwJCS8qIGhtZCAqLworCXsgMHg1NSwgMHg2NSwgMHhhNSwgMHhiNSwgMHhjNSB9LAkJLyogaGRzICovCisJeyAweDU0LCAweDY0LCAweDc0LCAweDg0LCAweDk0LCAweGE0LCAweGI0IH0sCS8qIHN5bCAqLwogfTsKIAogLyogYWN0dWFsIGZhbiBzcGVlZCAqLwotc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfRkFOX0FDVFs1XVs2XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBGU0NITURfUkVHX0ZBTl9BQ1RbN11bN10gPSB7CiAJeyAweDBlLCAweDZiLCAweGFiIH0sCQkJCS8qIHBvcyAqLwogCXsgMHgwZSwgMHg2YiwgMHhiYiB9LAkJCQkvKiBoZXIgKi8KIAl7IDB4NmIsIDB4NmMsIDB4MGUsIDB4YWIsIDB4NWMsIDB4YmIgfSwJCS8qIHNjeSAqLwogCXsgMHgwZSwgMHg2YiwgMHhhYiwgMHhiYiB9LAkJCS8qIGhyYyAqLwogCXsgMHg1YiwgMHg2YiwgMHhhYiwgMHhiYiwgMHhjYiB9LAkJLyogaG1kICovCisJeyAweDViLCAweDZiLCAweGFiLCAweGJiLCAweGNiIH0sCQkvKiBoZHMgKi8KKwl7IDB4NTcsIDB4NjcsIDB4NzcsIDB4ODcsIDB4OTcsIDB4YTcsIDB4YjcgfSwJLyogc3lsICovCiB9OwogCiAvKiBmYW4gc3RhdHVzIHJlZ2lzdGVycyAqLwotc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfRkFOX1NUQVRFWzVdWzZdID0geworc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfRkFOX1NUQVRFWzddWzddID0gewogCXsgMHgwZCwgMHg2MiwgMHhhMiB9LAkJCQkvKiBwb3MgKi8KIAl7IDB4MGQsIDB4NjIsIDB4YjIgfSwJCQkJLyogaGVyICovCiAJeyAweDYyLCAweDYxLCAweDBkLCAweGEyLCAweDUyLCAweGIyIH0sCQkvKiBzY3kgKi8KIAl7IDB4MGQsIDB4NjIsIDB4YTIsIDB4YjIgfSwJCQkvKiBocmMgKi8KIAl7IDB4NTIsIDB4NjIsIDB4YTIsIDB4YjIsIDB4YzIgfSwJCS8qIGhtZCAqLworCXsgMHg1MiwgMHg2MiwgMHhhMiwgMHhiMiwgMHhjMiB9LAkJLyogaGRzICovCisJeyAweDUwLCAweDYwLCAweDcwLCAweDgwLCAweDkwLCAweGEwLCAweGIwIH0sCS8qIHN5bCAqLwogfTsKIAogLyogZmFuIHJpcHBsZSAvIGRpdmlkZXIgcmVnaXN0ZXJzICovCi1zdGF0aWMgY29uc3QgdTggRlNDSE1EX1JFR19GQU5fUklQUExFWzVdWzZdID0geworc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfRkFOX1JJUFBMRVs3XVs3XSA9IHsKIAl7IDB4MGYsIDB4NmYsIDB4YWYgfSwJCQkJLyogcG9zICovCiAJeyAweDBmLCAweDZmLCAweGJmIH0sCQkJCS8qIGhlciAqLwogCXsgMHg2ZiwgMHg2ZiwgMHgwZiwgMHhhZiwgMHgwZiwgMHhiZiB9LAkJLyogc2N5ICovCiAJeyAweDBmLCAweDZmLCAweGFmLCAweGJmIH0sCQkJLyogaHJjICovCiAJeyAweDVmLCAweDZmLCAweGFmLCAweGJmLCAweGNmIH0sCQkvKiBobWQgKi8KKwl7IDB4NWYsIDB4NmYsIDB4YWYsIDB4YmYsIDB4Y2YgfSwJCS8qIGhkcyAqLworCXsgMHg1NiwgMHg2NiwgMHg3NiwgMHg4NiwgMHg5NiwgMHhhNiwgMHhiNiB9LAkvKiBzeWwgKi8KIH07CiAKLXN0YXRpYyBjb25zdCBpbnQgRlNDSE1EX05PX0ZBTl9TRU5TT1JTWzVdID0geyAzLCAzLCA2LCA0LCA1IH07CitzdGF0aWMgY29uc3QgaW50IEZTQ0hNRF9OT19GQU5fU0VOU09SU1s3XSA9IHsgMywgMywgNiwgNCwgNSwgNSwgNyB9OwogCiAvKiBGYW4gc3RhdHVzIHJlZ2lzdGVyIGJpdG1hc2tzICovCiAjZGVmaW5lIEZTQ0hNRF9GQU5fQUxBUk0JMHgwNCAvKiBjYWxsZWQgZmF1bHQgYnkgRlNDISAqLwotI2RlZmluZSBGU0NITURfRkFOX05PVF9QUkVTRU5UCTB4MDggLyogbm90IGRvY3VtZW50ZWQgKi8KKyNkZWZpbmUgRlNDSE1EX0ZBTl9OT1RfUFJFU0VOVAkweDA4CisjZGVmaW5lIEZTQ0hNRF9GQU5fRElTQUJMRUQJMHg4MAogCiAKIC8qIGFjdHVhbCB0ZW1wZXJhdHVyZSByZWdpc3RlcnMgKi8KLXN0YXRpYyBjb25zdCB1OCBGU0NITURfUkVHX1RFTVBfQUNUWzVdWzVdID0geworc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfVEVNUF9BQ1RbN11bMTFdID0gewogCXsgMHg2NCwgMHgzMiwgMHgzNSB9LAkJCQkvKiBwb3MgKi8KIAl7IDB4NjQsIDB4MzIsIDB4MzUgfSwJCQkJLyogaGVyICovCiAJeyAweDY0LCAweEQwLCAweDMyLCAweDM1IH0sCQkJLyogc2N5ICovCiAJeyAweDY0LCAweDMyLCAweDM1IH0sCQkJCS8qIGhyYyAqLwogCXsgMHg3MCwgMHg4MCwgMHg5MCwgMHhkMCwgMHhlMCB9LAkJLyogaG1kICovCisJeyAweDcwLCAweDgwLCAweDkwLCAweGQwLCAweGUwIH0sCQkvKiBoZHMgKi8KKwl7IDB4NTgsIDB4NjgsIDB4NzgsIDB4ODgsIDB4OTgsIDB4YTgsCQkvKiBzeWwgKi8KKwkgIDB4YjgsIDB4YzgsIDB4ZDgsIDB4ZTgsIDB4ZjggfSwKIH07CiAKIC8qIHRlbXBlcmF0dXJlIHN0YXRlIHJlZ2lzdGVycyAqLwotc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfVEVNUF9TVEFURVs1XVs1XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBGU0NITURfUkVHX1RFTVBfU1RBVEVbN11bMTFdID0gewogCXsgMHg3MSwgMHg4MSwgMHg5MSB9LAkJCQkvKiBwb3MgKi8KIAl7IDB4NzEsIDB4ODEsIDB4OTEgfSwJCQkJLyogaGVyICovCiAJeyAweDcxLCAweGQxLCAweDgxLCAweDkxIH0sCQkJLyogc2N5ICovCiAJeyAweDcxLCAweDgxLCAweDkxIH0sCQkJCS8qIGhyYyAqLwogCXsgMHg3MSwgMHg4MSwgMHg5MSwgMHhkMSwgMHhlMSB9LAkJLyogaG1kICovCisJeyAweDcxLCAweDgxLCAweDkxLCAweGQxLCAweGUxIH0sCQkvKiBoZHMgKi8KKwl7IDB4NTksIDB4NjksIDB4NzksIDB4ODksIDB4OTksIDB4YTksCQkvKiBzeWwgKi8KKwkgIDB4YjksIDB4YzksIDB4ZDksIDB4ZTksIDB4ZjkgfSwKIH07CiAKIC8qIHRlbXBlcmF0dXJlIGhpZ2ggbGltaXQgcmVnaXN0ZXJzLCBGU0MgZG9lcyBub3QgZG9jdW1lbnQgdGhlc2UuIFByb3ZlbiB0byBiZQpAQCAtMTU4LDI0ICsxODYsMzEgQEAKICAgIGluIHRoZSBmc2NzY3kgMi40IGRyaXZlci4gRlNDIGhhcyBjb25maXJtZWQgdGhhdCB0aGUgZnNjaG1kIGhhcyByZWdpc3RlcnMKICAgIGF0IHRoZXNlIGFkZHJlc3NlcywgYnV0IGRvZXNuJ3Qgd2FudCB0byBjb25maXJtIHRoZXkgYXJlIHRoZSBzYW1lIGFzIHdpdGgKICAgIHRoZSBmc2NoZXI/PyAqLwotc3RhdGljIGNvbnN0IHU4IEZTQ0hNRF9SRUdfVEVNUF9MSU1JVFs1XVs1XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBGU0NITURfUkVHX1RFTVBfTElNSVRbN11bMTFdID0gewogCXsgMCwgMCwgMCB9LAkJCQkJLyogcG9zICovCiAJeyAweDc2LCAweDg2LCAweDk2IH0sCQkJCS8qIGhlciAqLwogCXsgMHg3NiwgMHhkNiwgMHg4NiwgMHg5NiB9LAkJCS8qIHNjeSAqLwogCXsgMHg3NiwgMHg4NiwgMHg5NiB9LAkJCQkvKiBocmMgKi8KIAl7IDB4NzYsIDB4ODYsIDB4OTYsIDB4ZDYsIDB4ZTYgfSwJCS8qIGhtZCAqLworCXsgMHg3NiwgMHg4NiwgMHg5NiwgMHhkNiwgMHhlNiB9LAkJLyogaGRzICovCisJeyAweDVhLCAweDZhLCAweDdhLCAweDhhLCAweDlhLCAweGFhLAkJLyogc3lsICovCisJICAweGJhLCAweGNhLCAweGRhLCAweGVhLCAweGZhIH0sCiB9OwogCiAvKiBUaGVzZSB3ZXJlIGZvdW5kIHRocm91Z2ggZXhwZXJpbWVudGluZyB3aXRoIGFuIGZzY2hlciwgY3VycmVudGx5IHRoZXkgYXJlCiAgICBub3QgdXNlZCwgYnV0IHdlIGtlZXAgdGhlbSBhcm91bmQgZm9yIGZ1dHVyZSByZWZlcmVuY2UuCisgICBPbiB0aGUgZnNjc3lsIEFVVE9QMSBsaXZlcyBhdCAweCNjIChzbyAweDVjIGZvciBmYW4xLCAweDZjIGZvciBmYW4yLCBldGMpLAorICAgQVVUT1AyIGxpdmVzIGF0IDB4I2UsIGFuZCAweCMxIGlzIGEgYml0bWFzayBkZWZpbmluZyB3aGljaCB0ZW1wcyBpbmZsdWVuY2UKKyAgIHRoZSBmYW4gc3BlZWQuCiBzdGF0aWMgY29uc3QgdTggRlNDSEVSX1JFR19URU1QX0FVVE9QMVtdID0JeyAweDczLCAweDgzLCAweDkzIH07CiBzdGF0aWMgY29uc3QgdTggRlNDSEVSX1JFR19URU1QX0FVVE9QMltdID0JeyAweDc1LCAweDg1LCAweDk1IH07ICovCiAKLXN0YXRpYyBjb25zdCBpbnQgRlNDSE1EX05PX1RFTVBfU0VOU09SU1s1XSA9IHsgMywgMywgNCwgMywgNSB9Oworc3RhdGljIGNvbnN0IGludCBGU0NITURfTk9fVEVNUF9TRU5TT1JTWzddID0geyAzLCAzLCA0LCAzLCA1LCA1LCAxMSB9OwogCiAvKiB0ZW1wIHN0YXR1cyByZWdpc3RlciBiaXRtYXNrcyAqLwogI2RlZmluZSBGU0NITURfVEVNUF9XT1JLSU5HCTB4MDEKICNkZWZpbmUgRlNDSE1EX1RFTVBfQUxFUlQJMHgwMgorI2RlZmluZSBGU0NITURfVEVNUF9ESVNBQkxFRAkweDgwCiAvKiB0aGVyZSBvbmx5IHJlYWxseSBpcyBhbiBhbGFybSBpZiB0aGUgc2Vuc29yIGlzIHdvcmtpbmcgYW5kIGFsZXJ0ID09IDEgKi8KICNkZWZpbmUgRlNDSE1EX1RFTVBfQUxBUk1fTUFTSyBcCiAJKEZTQ0hNRF9URU1QX1dPUktJTkcgfCBGU0NITURfVEVNUF9BTEVSVCkKQEAgLTIwMSw2ICsyMzYsOCBAQAogCXsgImZzY3NjeSIsIGZzY3NjeSB9LAogCXsgImZzY2hyYyIsIGZzY2hyYyB9LAogCXsgImZzY2htZCIsIGZzY2htZCB9LAorCXsgImZzY2hkcyIsIGZzY2hkcyB9LAorCXsgImZzY3N5bCIsIGZzY3N5bCB9LAogCXsgfQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBmc2NobWRfaWQpOwpAQCAtMjQyLDE0ICsyNzksMTQgQEAKIAl1OCB3YXRjaGRvZ19jb250cm9sOyAgICAvKiB3YXRjaGRvZyBjb250cm9sIHJlZ2lzdGVyICovCiAJdTggd2F0Y2hkb2dfc3RhdGU7ICAgICAgLyogd2F0Y2hkb2cgc3RhdHVzIHJlZ2lzdGVyICovCiAJdTggd2F0Y2hkb2dfcHJlc2V0OyAgICAgLyogd2F0Y2hkb2cgY291bnRlciBwcmVzZXQgb24gdHJpZ2dlciB2YWwgKi8KLQl1OCB2b2x0WzNdOwkJLyogMTIsIDUsIGJhdHRlcnkgdm9sdGFnZSAqLwotCXU4IHRlbXBfYWN0WzVdOwkJLyogdGVtcGVyYXR1cmUgKi8KLQl1OCB0ZW1wX3N0YXR1c1s1XTsJLyogc3RhdHVzIG9mIHNlbnNvciAqLwotCXU4IHRlbXBfbWF4WzVdOwkJLyogaGlnaCB0ZW1wIGxpbWl0LCBub3RpY2U6IHVuZG9jdW1lbnRlZCEgKi8KLQl1OCBmYW5fYWN0WzZdOwkJLyogZmFucyByZXZvbHV0aW9ucyBwZXIgc2Vjb25kICovCi0JdTggZmFuX3N0YXR1c1s2XTsJLyogZmFuIHN0YXR1cyAqLwotCXU4IGZhbl9taW5bNl07CQkvKiBmYW4gbWluIHZhbHVlIGZvciBycHMgKi8KLQl1OCBmYW5fcmlwcGxlWzZdOwkvKiBkaXZpZGVyIGZvciBycHMgKi8KKwl1OCB2b2x0WzZdOwkJLyogdm9sdGFnZSAqLworCXU4IHRlbXBfYWN0WzExXTsJLyogdGVtcGVyYXR1cmUgKi8KKwl1OCB0ZW1wX3N0YXR1c1sxMV07CS8qIHN0YXR1cyBvZiBzZW5zb3IgKi8KKwl1OCB0ZW1wX21heFsxMV07CS8qIGhpZ2ggdGVtcCBsaW1pdCwgbm90aWNlOiB1bmRvY3VtZW50ZWQhICovCisJdTggZmFuX2FjdFs3XTsJCS8qIGZhbnMgcmV2b2x1dGlvbnMgcGVyIHNlY29uZCAqLworCXU4IGZhbl9zdGF0dXNbN107CS8qIGZhbiBzdGF0dXMgKi8KKwl1OCBmYW5fbWluWzddOwkJLyogZmFuIG1pbiB2YWx1ZSBmb3IgcnBzICovCisJdTggZmFuX3JpcHBsZVs3XTsJLyogZGl2aWRlciBmb3IgcnBzICovCiB9OwogCiAvKiBHbG9iYWwgdmFyaWFibGVzIHRvIGhvbGQgaW5mb3JtYXRpb24gcmVhZCBmcm9tIHNwZWNpYWwgRE1JIHRhYmxlcywgd2hpY2ggYXJlCkBAIC0yNTcsOCArMjk0LDggQEAKICAgIHByb3RlY3QgdGhlc2Ugd2l0aCBhIGxvY2sgYXMgdGhleSBhcmUgb25seSBtb2RpZmllZCBmcm9tIG91ciBhdHRhY2ggZnVuY3Rpb24KICAgIHdoaWNoIGFsd2F5cyBnZXRzIGNhbGxlZCB3aXRoIHRoZSBpMmMtY29yZSBsb2NrIGhlbGQgYW5kIG5ldmVyIGFjY2Vzc2VkCiAgICBiZWZvcmUgdGhlIGF0dGFjaCBmdW5jdGlvbiBpcyBkb25lIHdpdGggdGhlbS4gKi8KLXN0YXRpYyBpbnQgZG1pX211bHRbM10gPSB7IDQ5MCwgMjAwLCAxMDAgfTsKLXN0YXRpYyBpbnQgZG1pX29mZnNldFszXSA9IHsgMCwgMCwgMCB9Oworc3RhdGljIGludCBkbWlfbXVsdFs2XSA9IHsgNDkwLCAyMDAsIDEwMCwgMTAwLCAyMDAsIDEwMCB9Oworc3RhdGljIGludCBkbWlfb2Zmc2V0WzZdID0geyAwLCAwLCAwLCAwLCAwLCAwIH07CiBzdGF0aWMgaW50IGRtaV92cmVmID0gLTE7CiAKIC8qIFNvbWV3aGF0IHVnbHkgOiggZ2xvYmFsIGRhdGEgcG9pbnRlciBsaXN0IHdpdGggYWxsIGZzY2htZCBkZXZpY2VzLCBzbyB0aGF0CkBAIC00NTAsMTAgKzQ4NywxMSBAQAogCXN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICpkZXZhdHRyLCBjaGFyICpidWYpCiB7CiAJaW50IGluZGV4ID0gdG9fc2Vuc29yX2Rldl9hdHRyKGRldmF0dHIpLT5pbmRleDsKLQlpbnQgdmFsID0gZnNjaG1kX3VwZGF0ZV9kZXZpY2UoZGV2KS0+ZmFuX21pbltpbmRleF07CisJc3RydWN0IGZzY2htZF9kYXRhICpkYXRhID0gZnNjaG1kX3VwZGF0ZV9kZXZpY2UoZGV2KTsKKwlpbnQgdmFsID0gZGF0YS0+ZmFuX21pbltpbmRleF07CiAKLQkvKiAwID0gYWxsb3cgdHVybmluZyBvZmYsIDEtMjU1ID0gNTAtMTAwJSAqLwotCWlmICh2YWwpCisJLyogMCA9IGFsbG93IHR1cm5pbmcgb2ZmIChleGNlcHQgb24gdGhlIHN5bCksIDEtMjU1ID0gNTAtMTAwJSAqLworCWlmICh2YWwgfHwgZGF0YS0+a2luZCA9PSBmc2NzeWwgLSAxKQogCQl2YWwgPSB2YWwgLyAyICsgMTI4OwogCiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIHZhbCk7CkBAIC00NjYsOCArNTA0LDggQEAKIAlzdHJ1Y3QgZnNjaG1kX2RhdGEgKmRhdGEgPSBkZXZfZ2V0X2RydmRhdGEoZGV2KTsKIAl1bnNpZ25lZCBsb25nIHYgPSBzaW1wbGVfc3RydG91bChidWYsIE5VTEwsIDEwKTsKIAotCS8qIHJlZ2lzdGVyOiAwID0gYWxsb3cgdHVybmluZyBvZmYsIDEtMjU1ID0gNTAtMTAwJSAqLwotCWlmICh2KSB7CisJLyogcmVnOiAwID0gYWxsb3cgdHVybmluZyBvZmYgKGV4Y2VwdCBvbiB0aGUgc3lsKSwgMS0yNTUgPSA1MC0xMDAlICovCisJaWYgKHYgfHwgZGF0YS0+a2luZCA9PSBmc2NzeWwgLSAxKSB7CiAJCXYgPSBTRU5TT1JTX0xJTUlUKHYsIDEyOCwgMjU1KTsKIAkJdiA9ICh2IC0gMTI4KSAqIDIgKyAxOwogCX0KQEAgLTUyMiwxMSArNTYwLDE1IEBACiAJcmV0dXJuIGNvdW50OwogfQogCitzdGF0aWMgREVWSUNFX0FUVFIoYWxlcnRfbGVkLCAwNjQ0LCBzaG93X2FsZXJ0X2xlZCwgc3RvcmVfYWxlcnRfbGVkKTsKKwogc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBmc2NobWRfYXR0cltdID0gewogCVNFTlNPUl9BVFRSKGluMF9pbnB1dCwgMDQ0NCwgc2hvd19pbl92YWx1ZSwgTlVMTCwgMCksCiAJU0VOU09SX0FUVFIoaW4xX2lucHV0LCAwNDQ0LCBzaG93X2luX3ZhbHVlLCBOVUxMLCAxKSwKIAlTRU5TT1JfQVRUUihpbjJfaW5wdXQsIDA0NDQsIHNob3dfaW5fdmFsdWUsIE5VTEwsIDIpLAotCVNFTlNPUl9BVFRSKGFsZXJ0X2xlZCwgMDY0NCwgc2hvd19hbGVydF9sZWQsIHN0b3JlX2FsZXJ0X2xlZCwgMCksCisJU0VOU09SX0FUVFIoaW4zX2lucHV0LCAwNDQ0LCBzaG93X2luX3ZhbHVlLCBOVUxMLCAzKSwKKwlTRU5TT1JfQVRUUihpbjRfaW5wdXQsIDA0NDQsIHNob3dfaW5fdmFsdWUsIE5VTEwsIDQpLAorCVNFTlNPUl9BVFRSKGluNV9pbnB1dCwgMDQ0NCwgc2hvd19pbl92YWx1ZSwgTlVMTCwgNSksCiB9OwogCiBzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIGZzY2htZF90ZW1wX2F0dHJbXSA9IHsKQEAgLTU1MCw2ICs1OTIsMzAgQEAKIAlTRU5TT1JfQVRUUih0ZW1wNV9tYXgsICAgMDY0NCwgc2hvd190ZW1wX21heCwgc3RvcmVfdGVtcF9tYXgsIDQpLAogCVNFTlNPUl9BVFRSKHRlbXA1X2ZhdWx0LCAwNDQ0LCBzaG93X3RlbXBfZmF1bHQsIE5VTEwsIDQpLAogCVNFTlNPUl9BVFRSKHRlbXA1X2FsYXJtLCAwNDQ0LCBzaG93X3RlbXBfYWxhcm0sIE5VTEwsIDQpLAorCVNFTlNPUl9BVFRSKHRlbXA2X2lucHV0LCAwNDQ0LCBzaG93X3RlbXBfdmFsdWUsIE5VTEwsIDUpLAorCVNFTlNPUl9BVFRSKHRlbXA2X21heCwgICAwNjQ0LCBzaG93X3RlbXBfbWF4LCBzdG9yZV90ZW1wX21heCwgNSksCisJU0VOU09SX0FUVFIodGVtcDZfZmF1bHQsIDA0NDQsIHNob3dfdGVtcF9mYXVsdCwgTlVMTCwgNSksCisJU0VOU09SX0FUVFIodGVtcDZfYWxhcm0sIDA0NDQsIHNob3dfdGVtcF9hbGFybSwgTlVMTCwgNSksCisJU0VOU09SX0FUVFIodGVtcDdfaW5wdXQsIDA0NDQsIHNob3dfdGVtcF92YWx1ZSwgTlVMTCwgNiksCisJU0VOU09SX0FUVFIodGVtcDdfbWF4LCAgIDA2NDQsIHNob3dfdGVtcF9tYXgsIHN0b3JlX3RlbXBfbWF4LCA2KSwKKwlTRU5TT1JfQVRUUih0ZW1wN19mYXVsdCwgMDQ0NCwgc2hvd190ZW1wX2ZhdWx0LCBOVUxMLCA2KSwKKwlTRU5TT1JfQVRUUih0ZW1wN19hbGFybSwgMDQ0NCwgc2hvd190ZW1wX2FsYXJtLCBOVUxMLCA2KSwKKwlTRU5TT1JfQVRUUih0ZW1wOF9pbnB1dCwgMDQ0NCwgc2hvd190ZW1wX3ZhbHVlLCBOVUxMLCA3KSwKKwlTRU5TT1JfQVRUUih0ZW1wOF9tYXgsICAgMDY0NCwgc2hvd190ZW1wX21heCwgc3RvcmVfdGVtcF9tYXgsIDcpLAorCVNFTlNPUl9BVFRSKHRlbXA4X2ZhdWx0LCAwNDQ0LCBzaG93X3RlbXBfZmF1bHQsIE5VTEwsIDcpLAorCVNFTlNPUl9BVFRSKHRlbXA4X2FsYXJtLCAwNDQ0LCBzaG93X3RlbXBfYWxhcm0sIE5VTEwsIDcpLAorCVNFTlNPUl9BVFRSKHRlbXA5X2lucHV0LCAwNDQ0LCBzaG93X3RlbXBfdmFsdWUsIE5VTEwsIDgpLAorCVNFTlNPUl9BVFRSKHRlbXA5X21heCwgICAwNjQ0LCBzaG93X3RlbXBfbWF4LCBzdG9yZV90ZW1wX21heCwgOCksCisJU0VOU09SX0FUVFIodGVtcDlfZmF1bHQsIDA0NDQsIHNob3dfdGVtcF9mYXVsdCwgTlVMTCwgOCksCisJU0VOU09SX0FUVFIodGVtcDlfYWxhcm0sIDA0NDQsIHNob3dfdGVtcF9hbGFybSwgTlVMTCwgOCksCisJU0VOU09SX0FUVFIodGVtcDEwX2lucHV0LCAwNDQ0LCBzaG93X3RlbXBfdmFsdWUsIE5VTEwsIDkpLAorCVNFTlNPUl9BVFRSKHRlbXAxMF9tYXgsICAgMDY0NCwgc2hvd190ZW1wX21heCwgc3RvcmVfdGVtcF9tYXgsIDkpLAorCVNFTlNPUl9BVFRSKHRlbXAxMF9mYXVsdCwgMDQ0NCwgc2hvd190ZW1wX2ZhdWx0LCBOVUxMLCA5KSwKKwlTRU5TT1JfQVRUUih0ZW1wMTBfYWxhcm0sIDA0NDQsIHNob3dfdGVtcF9hbGFybSwgTlVMTCwgOSksCisJU0VOU09SX0FUVFIodGVtcDExX2lucHV0LCAwNDQ0LCBzaG93X3RlbXBfdmFsdWUsIE5VTEwsIDEwKSwKKwlTRU5TT1JfQVRUUih0ZW1wMTFfbWF4LCAgIDA2NDQsIHNob3dfdGVtcF9tYXgsIHN0b3JlX3RlbXBfbWF4LCAxMCksCisJU0VOU09SX0FUVFIodGVtcDExX2ZhdWx0LCAwNDQ0LCBzaG93X3RlbXBfZmF1bHQsIE5VTEwsIDEwKSwKKwlTRU5TT1JfQVRUUih0ZW1wMTFfYWxhcm0sIDA0NDQsIHNob3dfdGVtcF9hbGFybSwgTlVMTCwgMTApLAogfTsKIAogc3RhdGljIHN0cnVjdCBzZW5zb3JfZGV2aWNlX2F0dHJpYnV0ZSBmc2NobWRfZmFuX2F0dHJbXSA9IHsKQEAgLTU4OSw2ICs2NTUsMTIgQEAKIAlTRU5TT1JfQVRUUihmYW42X2ZhdWx0LCAwNDQ0LCBzaG93X2Zhbl9mYXVsdCwgTlVMTCwgNSksCiAJU0VOU09SX0FUVFIocHdtNl9hdXRvX3BvaW50MV9wd20sIDA2NDQsIHNob3dfcHdtX2F1dG9fcG9pbnQxX3B3bSwKIAkJc3RvcmVfcHdtX2F1dG9fcG9pbnQxX3B3bSwgNSksCisJU0VOU09SX0FUVFIoZmFuN19pbnB1dCwgMDQ0NCwgc2hvd19mYW5fdmFsdWUsIE5VTEwsIDYpLAorCVNFTlNPUl9BVFRSKGZhbjdfZGl2LCAgIDA2NDQsIHNob3dfZmFuX2Rpdiwgc3RvcmVfZmFuX2RpdiwgNiksCisJU0VOU09SX0FUVFIoZmFuN19hbGFybSwgMDQ0NCwgc2hvd19mYW5fYWxhcm0sIE5VTEwsIDYpLAorCVNFTlNPUl9BVFRSKGZhbjdfZmF1bHQsIDA0NDQsIHNob3dfZmFuX2ZhdWx0LCBOVUxMLCA2KSwKKwlTRU5TT1JfQVRUUihwd203X2F1dG9fcG9pbnQxX3B3bSwgMDY0NCwgc2hvd19wd21fYXV0b19wb2ludDFfcHdtLAorCQlzdG9yZV9wd21fYXV0b19wb2ludDFfcHdtLCA2KSwKIH07CiAKIApAQCAtNjI0LDEwICs2OTYsMTEgQEAKIAlkYXRhLT53YXRjaGRvZ19wcmVzZXQgPSBESVZfUk9VTkRfVVAodGltZW91dCwgcmVzb2x1dGlvbik7CiAKIAkvKiBXcml0ZSBuZXcgdGltZW91dCB2YWx1ZSAqLwotCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZGF0YS0+Y2xpZW50LCBGU0NITURfUkVHX1dET0dfUFJFU0VULAotCQlkYXRhLT53YXRjaGRvZ19wcmVzZXQpOworCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZGF0YS0+Y2xpZW50LAorCQlGU0NITURfUkVHX1dET0dfUFJFU0VUW2RhdGEtPmtpbmRdLCBkYXRhLT53YXRjaGRvZ19wcmVzZXQpOwogCS8qIFdyaXRlIG5ldyBjb250cm9sIHJlZ2lzdGVyLCBkbyBub3QgdHJpZ2dlciEgKi8KLQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGRhdGEtPmNsaWVudCwgRlNDSE1EX1JFR19XRE9HX0NPTlRST0wsCisJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkYXRhLT5jbGllbnQsCisJCUZTQ0hNRF9SRUdfV0RPR19DT05UUk9MW2RhdGEtPmtpbmRdLAogCQlkYXRhLT53YXRjaGRvZ19jb250cm9sICYgfkZTQ0hNRF9XRE9HX0NPTlRST0xfVFJJR0dFUik7CiAKIAlyZXQgPSBkYXRhLT53YXRjaGRvZ19wcmVzZXQgKiByZXNvbHV0aW9uOwpAQCAtNjYyLDggKzczNSw5IEBACiAJfQogCiAJZGF0YS0+d2F0Y2hkb2dfY29udHJvbCB8PSBGU0NITURfV0RPR19DT05UUk9MX1RSSUdHRVI7Ci0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkYXRhLT5jbGllbnQsIEZTQ0hNRF9SRUdfV0RPR19DT05UUk9MLAotCQkJCQlkYXRhLT53YXRjaGRvZ19jb250cm9sKTsKKwlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGRhdGEtPmNsaWVudCwKKwkJCQkgIEZTQ0hNRF9SRUdfV0RPR19DT05UUk9MW2RhdGEtPmtpbmRdLAorCQkJCSAgZGF0YS0+d2F0Y2hkb2dfY29udHJvbCk7CiBsZWF2ZToKIAltdXRleF91bmxvY2soJmRhdGEtPndhdGNoZG9nX2xvY2spOwogCXJldHVybiByZXQ7CkBAIC02ODIsNyArNzU2LDggQEAKIAlkYXRhLT53YXRjaGRvZ19jb250cm9sICY9IH5GU0NITURfV0RPR19DT05UUk9MX1NUQVJURUQ7CiAJLyogRG9uJ3Qgc3RvcmUgdGhlIHN0b3AgZmxhZyBpbiBvdXIgd2F0Y2hkb2cgY29udHJvbCByZWdpc3RlciBjb3B5LCBhcwogCSAgIGl0cyBhIHdyaXRlIG9ubHkgYml0IChyZWFkIGFsd2F5cyByZXR1cm5zIDApICovCi0JaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShkYXRhLT5jbGllbnQsIEZTQ0hNRF9SRUdfV0RPR19DT05UUk9MLAorCWkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoZGF0YS0+Y2xpZW50LAorCQlGU0NITURfUkVHX1dET0dfQ09OVFJPTFtkYXRhLT5raW5kXSwKIAkJZGF0YS0+d2F0Y2hkb2dfY29udHJvbCB8IEZTQ0hNRF9XRE9HX0NPTlRST0xfU1RPUCk7CiBsZWF2ZToKIAltdXRleF91bmxvY2soJmRhdGEtPndhdGNoZG9nX2xvY2spOwpAQCAtODU2LDcgKzkzMSw3IEBACiAKIC8qIERNSSBkZWNvZGUgcm91dGluZSB0byByZWFkIHZvbHRhZ2Ugc2NhbGluZyBmYWN0b3JzIGZyb20gc3BlY2lhbCBETUkgdGFibGVzLAogICAgd2hpY2ggYXJlIGF2YWlsYWJsZSBvbiBGU0MgbWFjaGluZXMgd2l0aCBhbiBmc2NoZXIgb3IgbGF0ZXIgY2hpcC4gKi8KLXN0YXRpYyB2b2lkIGZzY2htZF9kbWlfZGVjb2RlKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICpoZWFkZXIpCitzdGF0aWMgdm9pZCBmc2NobWRfZG1pX2RlY29kZShjb25zdCBzdHJ1Y3QgZG1pX2hlYWRlciAqaGVhZGVyLCB2b2lkICpkdW1teSkKIHsKIAlpbnQgaSwgbXVsdFszXSA9IHsgMCB9LCBvZmZzZXRbM10gPSB7IDAgfSwgdnJlZiA9IDAsIGZvdW5kID0gMDsKIApAQCAtOTEyLDYgKzk4NywxNSBAQAogCQkJZG1pX211bHRbaV0gPSBtdWx0W2ldICogMTA7CiAJCQlkbWlfb2Zmc2V0W2ldID0gb2Zmc2V0W2ldICogMTA7CiAJCX0KKwkJLyogQWNjb3JkaW5nIHRvIHRoZSBkb2NzIHRoZXJlIHNob3VsZCBiZSBzZXBhcmF0ZSBkbWkgZW50cmllcworCQkgICBmb3IgdGhlIG11bHQncyBhbmQgb2Zmc2V0cyBvZiBpbjMtNSBvZiB0aGUgc3lsLCBidXQgb24KKwkJICAgbXkgdGVzdCBtYWNoaW5lIHRoZXNlIGFyZSBub3QgcHJlc2VudCAqLworCQlkbWlfbXVsdFszXSA9IGRtaV9tdWx0WzJdOworCQlkbWlfbXVsdFs0XSA9IGRtaV9tdWx0WzFdOworCQlkbWlfbXVsdFs1XSA9IGRtaV9tdWx0WzJdOworCQlkbWlfb2Zmc2V0WzNdID0gZG1pX29mZnNldFsyXTsKKwkJZG1pX29mZnNldFs0XSA9IGRtaV9vZmZzZXRbMV07CisJCWRtaV9vZmZzZXRbNV0gPSBkbWlfb2Zmc2V0WzJdOwogCQlkbWlfdnJlZiA9IHZyZWY7CiAJfQogfQpAQCAtOTIwLDggKzEwMDQsNiBAQAogCQkJIHN0cnVjdCBpMmNfYm9hcmRfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIgPSBjbGllbnQtPmFkYXB0ZXI7Ci0JY29uc3QgY2hhciAqIGNvbnN0IGNsaWVudF9uYW1lc1s1XSA9IHsgImZzY3BvcyIsICJmc2NoZXIiLCAiZnNjc2N5IiwKLQkJCQkJCSJmc2NocmMiLCAiZnNjaG1kIiB9OwogCiAJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShhZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQogCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTk0OCwxMSArMTAzMCwxNSBAQAogCQkJa2luZCA9IGZzY2hyYzsKIAkJZWxzZSBpZiAoIXN0cmNtcChpZCwgIkhNRCIpKQogCQkJa2luZCA9IGZzY2htZDsKKwkJZWxzZSBpZiAoIXN0cmNtcChpZCwgIkhEUyIpKQorCQkJa2luZCA9IGZzY2hkczsKKwkJZWxzZSBpZiAoIXN0cmNtcChpZCwgIlNZTCIpKQorCQkJa2luZCA9IGZzY3N5bDsKIAkJZWxzZQogCQkJcmV0dXJuIC1FTk9ERVY7CiAJfQogCi0Jc3RybGNweShpbmZvLT50eXBlLCBjbGllbnRfbmFtZXNba2luZCAtIDFdLCBJMkNfTkFNRV9TSVpFKTsKKwlzdHJsY3B5KGluZm8tPnR5cGUsIGZzY2htZF9pZFtraW5kIC0gMV0ubmFtZSwgSTJDX05BTUVfU0laRSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTk2MSw4ICsxMDQ3LDggQEAKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgZnNjaG1kX2RhdGEgKmRhdGE7Ci0JY29uc3QgY2hhciAqIGNvbnN0IG5hbWVzWzVdID0geyAiUG9zZWlkb24iLCAiSGVybWVzIiwgIlNjeWxsYSIsCi0JCQkJCSJIZXJhY2xlcyIsICJIZWltZGFsbCIgfTsKKwljb25zdCBjaGFyICogY29uc3QgbmFtZXNbN10gPSB7ICJQb3NlaWRvbiIsICJIZXJtZXMiLCAiU2N5bGxhIiwKKwkJCQkiSGVyYWNsZXMiLCAiSGVpbWRhbGwiLCAiSGFkZXMiLCAiU3lsZXVzIiB9OwogCWNvbnN0IGludCB3YXRjaGRvZ19taW5vcnNbXSA9IHsgV0FUQ0hET0dfTUlOT1IsIDIxMiwgMjEzLCAyMTQsIDIxNSB9OwogCWludCBpLCBlcnI7CiAJZW51bSBjaGlwcyBraW5kID0gaWQtPmRyaXZlcl9kYXRhOwpAQCAtOTkxLDcgKzEwNzcsNyBAQAogCiAJLyogUmVhZCB0aGUgc3BlY2lhbCBETUkgdGFibGUgZm9yIGZzY2hlciBhbmQgbmV3ZXIgY2hpcHMgKi8KIAlpZiAoKGtpbmQgPT0gZnNjaGVyIHx8IGtpbmQgPj0gZnNjaHJjKSAmJiBkbWlfdnJlZiA9PSAtMSkgewotCQlkbWlfd2Fsayhmc2NobWRfZG1pX2RlY29kZSk7CisJCWRtaV93YWxrKGZzY2htZF9kbWlfZGVjb2RlLCBOVUxMKTsKIAkJaWYgKGRtaV92cmVmID09IC0xKSB7CiAJCQlkZXZfd2FybigmY2xpZW50LT5kZXYsCiAJCQkJIkNvdWxkbid0IGdldCB2b2x0YWdlIHNjYWxpbmcgZmFjdG9ycyBmcm9tICIKQEAgLTEwMDAsMjEgKzEwODYsMjUgQEAKIAkJfQogCX0KIAorCS8qIGkyYyBraW5kIGdvZXMgZnJvbSAxLTYsIHdlIHdhbnQgZnJvbSAwLTUgdG8gYWRkcmVzcyBhcnJheXMgKi8KKwlkYXRhLT5raW5kID0ga2luZCAtIDE7CisKIAkvKiBSZWFkIGluIHNvbWUgbmV2ZXIgY2hhbmdpbmcgcmVnaXN0ZXJzICovCiAJZGF0YS0+cmV2aXNpb24gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCBGU0NITURfUkVHX1JFVklTSU9OKTsKIAlkYXRhLT5nbG9iYWxfY29udHJvbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCiAJCQkJCUZTQ0hNRF9SRUdfQ09OVFJPTCk7CiAJZGF0YS0+d2F0Y2hkb2dfY29udHJvbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCi0JCQkJCUZTQ0hNRF9SRUdfV0RPR19DT05UUk9MKTsKKwkJCQkJRlNDSE1EX1JFR19XRE9HX0NPTlRST0xbZGF0YS0+a2luZF0pOwogCWRhdGEtPndhdGNoZG9nX3N0YXRlID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJRlNDSE1EX1JFR19XRE9HX1NUQVRFKTsKKwkJCQkJRlNDSE1EX1JFR19XRE9HX1NUQVRFW2RhdGEtPmtpbmRdKTsKIAlkYXRhLT53YXRjaGRvZ19wcmVzZXQgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAotCQkJCQlGU0NITURfUkVHX1dET0dfUFJFU0VUKTsKKwkJCQkJRlNDSE1EX1JFR19XRE9HX1BSRVNFVFtkYXRhLT5raW5kXSk7CiAKLQkvKiBpMmMga2luZCBnb2VzIGZyb20gMS01LCB3ZSB3YW50IGZyb20gMC00IHRvIGFkZHJlc3MgYXJyYXlzICovCi0JZGF0YS0+a2luZCA9IGtpbmQgLSAxOworCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZSgmY2xpZW50LT5kZXYsICZkZXZfYXR0cl9hbGVydF9sZWQpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdF9kZXRhY2g7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmc2NobWRfYXR0cik7IGkrKykgeworCWZvciAoaSA9IDA7IGkgPCBGU0NITURfTk9fVk9MVF9TRU5TT1JTW2RhdGEtPmtpbmRdOyBpKyspIHsKIAkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwKIAkJCQkJJmZzY2htZF9hdHRyW2ldLmRldl9hdHRyKTsKIAkJaWYgKGVycikKQEAgLTEwMjcsNiArMTExNywxNiBAQAogCQkJCXNob3dfdGVtcF9tYXgpCiAJCQljb250aW51ZTsKIAorCQlpZiAoa2luZCA9PSBmc2NzeWwpIHsKKwkJCWlmIChpICUgNCA9PSAwKQorCQkJCWRhdGEtPnRlbXBfc3RhdHVzW2kgLyA0XSA9CisJCQkJCWkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCQlGU0NITURfUkVHX1RFTVBfU1RBVEUKKwkJCQkJCVtkYXRhLT5raW5kXVtpIC8gNF0pOworCQkJaWYgKGRhdGEtPnRlbXBfc3RhdHVzW2kgLyA0XSAmIEZTQ0hNRF9URU1QX0RJU0FCTEVEKQorCQkJCWNvbnRpbnVlOworCQl9CisKIAkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwKIAkJCQkJJmZzY2htZF90ZW1wX2F0dHJbaV0uZGV2X2F0dHIpOwogCQlpZiAoZXJyKQpAQCAtMTA0MCw2ICsxMTQwLDE2IEBACiAJCQkJCSJwd20zX2F1dG9fcG9pbnQxX3B3bSIpKQogCQkJY29udGludWU7CiAKKwkJaWYgKGtpbmQgPT0gZnNjc3lsKSB7CisJCQlpZiAoaSAlIDUgPT0gMCkKKwkJCQlkYXRhLT5mYW5fc3RhdHVzW2kgLyA1XSA9CisJCQkJCWkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsCisJCQkJCQlGU0NITURfUkVHX0ZBTl9TVEFURQorCQkJCQkJW2RhdGEtPmtpbmRdW2kgLyA1XSk7CisJCQlpZiAoZGF0YS0+ZmFuX3N0YXR1c1tpIC8gNV0gJiBGU0NITURfRkFOX0RJU0FCTEVEKQorCQkJCWNvbnRpbnVlOworCQl9CisKIAkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKCZjbGllbnQtPmRldiwKIAkJCQkJJmZzY2htZF9mYW5fYXR0cltpXS5kZXZfYXR0cik7CiAJCWlmIChlcnIpCkBAIC0xMTI2LDcgKzEyMzYsOCBAQAogCWlmIChkYXRhLT5od21vbl9kZXYpCiAJCWh3bW9uX2RldmljZV91bnJlZ2lzdGVyKGRhdGEtPmh3bW9uX2Rldik7CiAKLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShmc2NobWRfYXR0cik7IGkrKykKKwlkZXZpY2VfcmVtb3ZlX2ZpbGUoJmNsaWVudC0+ZGV2LCAmZGV2X2F0dHJfYWxlcnRfbGVkKTsKKwlmb3IgKGkgPSAwOyBpIDwgKEZTQ0hNRF9OT19WT0xUX1NFTlNPUlNbZGF0YS0+a2luZF0pOyBpKyspCiAJCWRldmljZV9yZW1vdmVfZmlsZSgmY2xpZW50LT5kZXYsICZmc2NobWRfYXR0cltpXS5kZXZfYXR0cik7CiAJZm9yIChpID0gMDsgaSA8IChGU0NITURfTk9fVEVNUF9TRU5TT1JTW2RhdGEtPmtpbmRdICogNCk7IGkrKykKIAkJZGV2aWNlX3JlbW92ZV9maWxlKCZjbGllbnQtPmRldiwKQEAgLTExNzEsNyArMTI4Miw3IEBACiAJCQkJCWRhdGEtPnRlbXBfYWN0W2ldIDwgZGF0YS0+dGVtcF9tYXhbaV0pCiAJCQkJaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsCiAJCQkJCUZTQ0hNRF9SRUdfVEVNUF9TVEFURVtkYXRhLT5raW5kXVtpXSwKLQkJCQkJRlNDSE1EX1RFTVBfQUxFUlQpOworCQkJCQlkYXRhLT50ZW1wX3N0YXR1c1tpXSk7CiAJCX0KIAogCQlmb3IgKGkgPSAwOyBpIDwgRlNDSE1EX05PX0ZBTl9TRU5TT1JTW2RhdGEtPmtpbmRdOyBpKyspIHsKQEAgLTExOTMsMTIgKzEzMDQsMTIgQEAKIAkJCQkJZGF0YS0+ZmFuX2FjdFtpXSkKIAkJCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwKIAkJCQkJRlNDSE1EX1JFR19GQU5fU1RBVEVbZGF0YS0+a2luZF1baV0sCi0JCQkJCUZTQ0hNRF9GQU5fQUxBUk0pOworCQkJCQlkYXRhLT5mYW5fc3RhdHVzW2ldKTsKIAkJfQogCi0JCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCWZvciAoaSA9IDA7IGkgPCBGU0NITURfTk9fVk9MVF9TRU5TT1JTW2RhdGEtPmtpbmRdOyBpKyspCiAJCQlkYXRhLT52b2x0W2ldID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwKLQkJCQkJCUZTQ0hNRF9SRUdfVk9MVFtpXSk7CisJCQkJCSAgICAgICBGU0NITURfUkVHX1ZPTFRbZGF0YS0+a2luZF1baV0pOwogCiAJCWRhdGEtPmxhc3RfdXBkYXRlZCA9IGppZmZpZXM7CiAJCWRhdGEtPnZhbGlkID0gMTsKQEAgLTEyMjAsOCArMTMzMSw4IEBACiB9CiAKIE1PRFVMRV9BVVRIT1IoIkhhbnMgZGUgR29lZGUgPGhkZWdvZWRlQHJlZGhhdC5jb20+Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkZTQyBQb3NlaWRvbiwgSGVybWVzLCBTY3lsbGEsIEhlcmFjbGVzIGFuZCAiCi0JCQkiSGVpbWRhbGwgZHJpdmVyIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkZTQyBQb3NlaWRvbiwgSGVybWVzLCBTY3lsbGEsIEhlcmFjbGVzLCBIZWltZGFsbCwgSGFkZXMgIgorCQkJImFuZCBTeWxldXMgZHJpdmVyIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIG1vZHVsZV9pbml0KGZzY2htZF9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vaGRhcHMuYyBiL2RyaXZlcnMvaHdtb24vaGRhcHMuYwppbmRleCBhNGQ5MmQyLi5kMzYxMmExIDEwMDY0NAotLS0gYS9kcml2ZXJzL2h3bW9uL2hkYXBzLmMKKysrIGIvZHJpdmVycy9od21vbi9oZGFwcy5jCkBAIC02NSw2ICs2NSwxMCBAQAogI2RlZmluZSBIREFQU19JTlBVVF9GVVpaCTQJLyogaW5wdXQgZXZlbnQgdGhyZXNob2xkICovCiAjZGVmaW5lIEhEQVBTX0lOUFVUX0ZMQVQJNAogCisjZGVmaW5lIEhEQVBTX1hfQVhJUwkJKDEgPDwgMCkKKyNkZWZpbmUgSERBUFNfWV9BWElTCQkoMSA8PCAxKQorI2RlZmluZSBIREFQU19CT1RIX0FYRVMJCShIREFQU19YX0FYSVMgfCBIREFQU19ZX0FYSVMpCisKIHN0YXRpYyBzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2Owogc3RhdGljIHN0cnVjdCBpbnB1dF9wb2xsZWRfZGV2ICpoZGFwc19pZGV2Owogc3RhdGljIHVuc2lnbmVkIGludCBoZGFwc19pbnZlcnQ7CkBAIC0xODIsMTEgKzE4NiwxMSBAQAogCWttX2FjdGl2aXR5ID0gaW5iKEhEQVBTX1BPUlRfS01BQ1QpOwogCV9fZGV2aWNlX2NvbXBsZXRlKCk7CiAKLQkvKiBpZiBoZGFwc19pbnZlcnQgaXMgc2V0LCBuZWdhdGUgdGhlIHR3byB2YWx1ZXMgKi8KLQlpZiAoaGRhcHNfaW52ZXJ0KSB7CisJLyogaGRhcHNfaW52ZXJ0IGlzIGEgYml0dmVjdG9yIHRvIG5lZ2F0ZSB0aGUgYXhlcyAqLworCWlmIChoZGFwc19pbnZlcnQgJiBIREFQU19YX0FYSVMpCiAJCSp4ID0gLSp4OworCWlmIChoZGFwc19pbnZlcnQgJiBIREFQU19ZX0FYSVMpCiAJCSp5ID0gLSp5OwotCX0KIAogCXJldHVybiAwOwogfQpAQCAtNDM2LDcgKzQ0MCw4IEBACiB7CiAJaW50IGludmVydDsKIAotCWlmIChzc2NhbmYoYnVmLCAiJWQiLCAmaW52ZXJ0KSAhPSAxIHx8IChpbnZlcnQgIT0gMSAmJiBpbnZlcnQgIT0gMCkpCisJaWYgKHNzY2FuZihidWYsICIlZCIsICZpbnZlcnQpICE9IDEgfHwKKwkgICAgaW52ZXJ0IDwgMCB8fCBpbnZlcnQgPiBIREFQU19CT1RIX0FYRVMpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaGRhcHNfaW52ZXJ0ID0gaW52ZXJ0OwpAQCAtNDgzLDU2ICs0ODgsNTIgQEAKIC8qIGhkYXBzX2RtaV9tYXRjaF9pbnZlcnQgLSBmb3VuZCBhbiBpbnZlcnRlZCBtYXRjaC4gKi8KIHN0YXRpYyBpbnQgX19pbml0IGhkYXBzX2RtaV9tYXRjaF9pbnZlcnQoY29uc3Qgc3RydWN0IGRtaV9zeXN0ZW1faWQgKmlkKQogewotCWhkYXBzX2ludmVydCA9IDE7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiaGRhcHM6IGludmVydGluZyBheGlzIHJlYWRpbmdzLlxuIik7CisJaGRhcHNfaW52ZXJ0ID0gKHVuc2lnbmVkIGxvbmcpaWQtPmRyaXZlcl9kYXRhOworCXByaW50ayhLRVJOX0lORk8gImhkYXBzOiBpbnZlcnRpbmcgYXhpcyAoJXUpIHJlYWRpbmdzLlxuIiwKKwkgICAgICAgaGRhcHNfaW52ZXJ0KTsKIAlyZXR1cm4gaGRhcHNfZG1pX21hdGNoKGlkKTsKIH0KIAotI2RlZmluZSBIREFQU19ETUlfTUFUQ0hfTk9STUFMKHZlbmRvciwgbW9kZWwpIHsJCVwKKyNkZWZpbmUgSERBUFNfRE1JX01BVENIX0lOVkVSVCh2ZW5kb3IsIG1vZGVsLCBheGVzKSB7CVwKIAkuaWRlbnQgPSB2ZW5kb3IgIiAiIG1vZGVsLAkJCVwKLQkuY2FsbGJhY2sgPSBoZGFwc19kbWlfbWF0Y2gsCQkJXAorCS5jYWxsYmFjayA9IGhkYXBzX2RtaV9tYXRjaF9pbnZlcnQsCQlcCisJLmRyaXZlcl9kYXRhID0gKHZvaWQgKilheGVzLAkJCVwKIAkubWF0Y2hlcyA9IHsJCQkJCVwKIAkJRE1JX01BVENIKERNSV9CT0FSRF9WRU5ET1IsIHZlbmRvciksCVwKIAkJRE1JX01BVENIKERNSV9QUk9EVUNUX1ZFUlNJT04sIG1vZGVsKQlcCiAJfQkJCQkJCVwKIH0KIAotI2RlZmluZSBIREFQU19ETUlfTUFUQ0hfSU5WRVJUKHZlbmRvciwgbW9kZWwpIHsJCVwKLQkuaWRlbnQgPSB2ZW5kb3IgIiAiIG1vZGVsLAkJCVwKLQkuY2FsbGJhY2sgPSBoZGFwc19kbWlfbWF0Y2hfaW52ZXJ0LAkJXAotCS5tYXRjaGVzID0gewkJCQkJXAotCQlETUlfTUFUQ0goRE1JX0JPQVJEX1ZFTkRPUiwgdmVuZG9yKSwJXAotCQlETUlfTUFUQ0goRE1JX1BST0RVQ1RfVkVSU0lPTiwgbW9kZWwpCVwKLQl9CQkJCQkJXAotfQorI2RlZmluZSBIREFQU19ETUlfTUFUQ0hfTk9STUFMKHZlbmRvciwgbW9kZWwpCQlcCisJSERBUFNfRE1JX01BVENIX0lOVkVSVCh2ZW5kb3IsIG1vZGVsLCAwKQogCiAvKiBOb3RlIHRoYXQgSERBUFNfRE1JX01BVENIX05PUk1BTCgiVGhpbmtQYWQgVDQyIikgd291bGQgbWF0Y2gKICAgICJUaGlua1BhZCBUNDJwIiwgc28gdGhlIG9yZGVyIG9mIHRoZSBlbnRyaWVzIG1hdHRlcnMuCiAgICBJZiB5b3VyIFRoaW5rUGFkIGlzIG5vdCByZWNvZ25pemVkLCBwbGVhc2UgdXBkYXRlIHRvIGxhdGVzdAogICAgQklPUy4gVGhpcyBpcyBlc3BlY2lhbGx5IHRoZSBjYXNlIGZvciBzb21lIFI1MiBUaGlua1BhZHMuICovCiBzdGF0aWMgc3RydWN0IGRtaV9zeXN0ZW1faWQgX19pbml0ZGF0YSBoZGFwc193aGl0ZWxpc3RbXSA9IHsKLQlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJJQk0iLCAiVGhpbmtQYWQgUjUwcCIpLAorCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIklCTSIsICJUaGlua1BhZCBSNTBwIiwgSERBUFNfQk9USF9BWEVTKSwKIAlIREFQU19ETUlfTUFUQ0hfTk9STUFMKCJJQk0iLCAiVGhpbmtQYWQgUjUwIiksCiAJSERBUFNfRE1JX01BVENIX05PUk1BTCgiSUJNIiwgIlRoaW5rUGFkIFI1MSIpLAogCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIklCTSIsICJUaGlua1BhZCBSNTIiKSwKLQlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJMRU5PVk8iLCAiVGhpbmtQYWQgUjYxaSIpLAotCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBSNjEiKSwKLQlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJJQk0iLCAiVGhpbmtQYWQgVDQxcCIpLAorCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBSNjFpIiwgSERBUFNfQk9USF9BWEVTKSwKKwlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJMRU5PVk8iLCAiVGhpbmtQYWQgUjYxIiwgSERBUFNfQk9USF9BWEVTKSwKKwlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJJQk0iLCAiVGhpbmtQYWQgVDQxcCIsIEhEQVBTX0JPVEhfQVhFUyksCiAJSERBUFNfRE1JX01BVENIX05PUk1BTCgiSUJNIiwgIlRoaW5rUGFkIFQ0MSIpLAotCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIklCTSIsICJUaGlua1BhZCBUNDJwIiksCisJSERBUFNfRE1JX01BVENIX0lOVkVSVCgiSUJNIiwgIlRoaW5rUGFkIFQ0MnAiLCBIREFQU19CT1RIX0FYRVMpLAogCUhEQVBTX0RNSV9NQVRDSF9OT1JNQUwoIklCTSIsICJUaGlua1BhZCBUNDIiKSwKIAlIREFQU19ETUlfTUFUQ0hfTk9STUFMKCJJQk0iLCAiVGhpbmtQYWQgVDQzIiksCi0JSERBUFNfRE1JX01BVENIX0lOVkVSVCgiTEVOT1ZPIiwgIlRoaW5rUGFkIFQ2MCIpLAotCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBUNjFwIiksCi0JSERBUFNfRE1JX01BVENIX0lOVkVSVCgiTEVOT1ZPIiwgIlRoaW5rUGFkIFQ2MSIpLAorCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBUNjAiLCBIREFQU19CT1RIX0FYRVMpLAorCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBUNjFwIiwgSERBUFNfQk9USF9BWEVTKSwKKwlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJMRU5PVk8iLCAiVGhpbmtQYWQgVDYxIiwgSERBUFNfQk9USF9BWEVTKSwKIAlIREFQU19ETUlfTUFUQ0hfTk9STUFMKCJJQk0iLCAiVGhpbmtQYWQgWDQwIiksCi0JSERBUFNfRE1JX01BVENIX05PUk1BTCgiSUJNIiwgIlRoaW5rUGFkIFg0MSIpLAotCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBYNjAiKSwKLQlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJMRU5PVk8iLCAiVGhpbmtQYWQgWDYxcyIpLAotCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBYNjEiKSwKKwlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJJQk0iLCAiVGhpbmtQYWQgWDQxIiwgSERBUFNfWV9BWElTKSwKKwlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJMRU5PVk8iLCAiVGhpbmtQYWQgWDYwIiwgSERBUFNfQk9USF9BWEVTKSwKKwlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJMRU5PVk8iLCAiVGhpbmtQYWQgWDYxcyIsIEhEQVBTX0JPVEhfQVhFUyksCisJSERBUFNfRE1JX01BVENIX0lOVkVSVCgiTEVOT1ZPIiwgIlRoaW5rUGFkIFg2MSIsIEhEQVBTX0JPVEhfQVhFUyksCiAJSERBUFNfRE1JX01BVENIX05PUk1BTCgiSUJNIiwgIlRoaW5rUGFkIFo2MG0iKSwKLQlIREFQU19ETUlfTUFUQ0hfSU5WRVJUKCJMRU5PVk8iLCAiVGhpbmtQYWQgWjYxbSIpLAotCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBaNjFwIiksCisJSERBUFNfRE1JX01BVENIX0lOVkVSVCgiTEVOT1ZPIiwgIlRoaW5rUGFkIFo2MW0iLCBIREFQU19CT1RIX0FYRVMpLAorCUhEQVBTX0RNSV9NQVRDSF9JTlZFUlQoIkxFTk9WTyIsICJUaGlua1BhZCBaNjFwIiwgSERBUFNfQk9USF9BWEVTKSwKIAl7IC5pZGVudCA9IE5VTEwgfQogfTsKIApAQCAtNjI3LDggKzYyOCw5IEBACiBtb2R1bGVfaW5pdChoZGFwc19pbml0KTsKIG1vZHVsZV9leGl0KGhkYXBzX2V4aXQpOwogCi1tb2R1bGVfcGFyYW1fbmFtZWQoaW52ZXJ0LCBoZGFwc19pbnZlcnQsIGJvb2wsIDApOwotTU9EVUxFX1BBUk1fREVTQyhpbnZlcnQsICJpbnZlcnQgZGF0YSBhbG9uZyBlYWNoIGF4aXMiKTsKK21vZHVsZV9wYXJhbV9uYW1lZChpbnZlcnQsIGhkYXBzX2ludmVydCwgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW52ZXJ0LCAiaW52ZXJ0IGRhdGEgYWxvbmcgZWFjaCBheGlzLiAxIGludmVydCB4LWF4aXMsICIKKwkJICIyIGludmVydCB5LWF4aXMsIDMgaW52ZXJ0IGJvdGggYXhlcy4iKTsKIAogTU9EVUxFX0FVVEhPUigiUm9iZXJ0IExvdmUiKTsKIE1PRFVMRV9ERVNDUklQVElPTigiSUJNIEhhcmQgRHJpdmUgQWN0aXZlIFByb3RlY3Rpb24gU3lzdGVtIChIREFQUykgZHJpdmVyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9wY2Y4NTkxLmMgYi9kcml2ZXJzL2h3bW9uL3BjZjg1OTEuYwpzaW1pbGFyaXR5IGluZGV4IDk2JQpyZW5hbWUgZnJvbSBkcml2ZXJzL2kyYy9jaGlwcy9wY2Y4NTkxLmMKcmVuYW1lIHRvIGRyaXZlcnMvaHdtb24vcGNmODU5MS5jCmluZGV4IDE2Y2UzZTEuLjFkN2ZmZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL3BjZjg1OTEuYworKysgYi9kcml2ZXJzL2h3bW9uL3BjZjg1OTEuYwpAQCAtMSw2ICsxLDYgQEAKIC8qCiAgICAgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDQgQXVyZWxpZW4gSmFybm8gPGF1cmVsaWVuQGF1cmVsMzIubmV0PgotICAgIFBvcnRlZCB0byBMaW51eCAyLjYgYnkgQXVyZWxpZW4gSmFybm8gPGF1cmVsaWVuQGF1cmVsMzIubmV0PiB3aXRoIAorICAgIFBvcnRlZCB0byBMaW51eCAyLjYgYnkgQXVyZWxpZW4gSmFybm8gPGF1cmVsaWVuQGF1cmVsMzIubmV0PiB3aXRoCiAgICAgdGhlIGhlbHAgb2YgSmVhbiBEZWx2YXJlIDxraGFsaUBsaW51eC1mci5vcmc+CiAKICAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQpAQCAtNDEsMTMgKzQxLDEzIEBACiAJIiAzID0gdHdvIGRpZmZlcmVudGlhbCBpbnB1dHNcbiIpOwogCiAvKiBUaGUgUENGODU5MSBjb250cm9sIGJ5dGUKLSAgICAgIDcgICAgNiAgICA1ICAgIDQgICAgMyAgICAyICAgIDEgICAgMCAgCisgICAgICA3ICAgIDYgICAgNSAgICA0ICAgIDMgICAgMiAgICAxICAgIDAKICAgIHwgIDAgfEFPRUZ8ICAgQUlQICAgfCAgMCB8QUlOQ3wgIEFJQ0ggICB8ICovCiAKIC8qIEFuYWxvZyBPdXRwdXQgRW5hYmxlIEZsYWcgKGFuYWxvZyBvdXRwdXQgYWN0aXZlIGlmIDEpICovCiAjZGVmaW5lIFBDRjg1OTFfQ09OVFJPTF9BT0VGCQkweDQwCi0JCQkJCQotLyogQW5hbG9nIElucHV0IFByb2dyYW1taW5nIAorCisvKiBBbmFsb2cgSW5wdXQgUHJvZ3JhbW1pbmcKICAgIDB4MDAgPSBmb3VyIHNpbmdsZSBlbmRlZCBpbnB1dHMKICAgIDB4MTAgPSB0aHJlZSBkaWZmZXJlbnRpYWwgaW5wdXRzCiAgICAweDIwID0gc2luZ2xlIGVuZGVkIGFuZCBkaWZmZXJlbnRpYWwgbWl4ZWQKQEAgLTU4LDcgKzU4LDcgQEAKICNkZWZpbmUgUENGODU5MV9DT05UUk9MX0FJTkMJCTB4MDQKIAogLyogQ2hhbm5lbCBzZWxlY3Rpb24KLSAgIDB4MDAgPSBjaGFubmVsIDAgCisgICAweDAwID0gY2hhbm5lbCAwCiAgICAweDAxID0gY2hhbm5lbCAxCiAgICAweDAyID0gY2hhbm5lbCAyCiAgICAweDAzID0gY2hhbm5lbCAzICovCkBAIC0xMTQsNyArMTE0LDcgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIERFVklDRV9BVFRSKG91dDBfb3V0cHV0LCBTX0lXVVNSIHwgU19JUlVHTywgCitzdGF0aWMgREVWSUNFX0FUVFIob3V0MF9vdXRwdXQsIFNfSVdVU1IgfCBTX0lSVUdPLAogCQkgICBzaG93X291dDBfb3VwdXQsIHNldF9vdXQwX291dHB1dCk7CiAKIHN0YXRpYyBzc2l6ZV90IHNob3dfb3V0MF9lbmFibGUoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0ciwgY2hhciAqYnVmKQpAQCAtMTM5LDcgKzEzOSw3IEBACiAJcmV0dXJuIGNvdW50OwogfQogCi1zdGF0aWMgREVWSUNFX0FUVFIob3V0MF9lbmFibGUsIFNfSVdVU1IgfCBTX0lSVUdPLCAKK3N0YXRpYyBERVZJQ0VfQVRUUihvdXQwX2VuYWJsZSwgU19JV1VTUiB8IFNfSVJVR08sCiAJCSAgIHNob3dfb3V0MF9lbmFibGUsIHNldF9vdXQwX2VuYWJsZSk7CiAKIHN0YXRpYyBzdHJ1Y3QgYXR0cmlidXRlICpwY2Y4NTkxX2F0dHJpYnV0ZXNbXSA9IHsKQEAgLTE5Niw3ICsxOTYsNyBAQAogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGV4aXQ7CiAJfQotCQorCiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGF0YSk7CiAJbXV0ZXhfaW5pdCgmZGF0YS0+dXBkYXRlX2xvY2spOwogCkBAIC0yNDksOCArMjQ5LDggQEAKIAlkYXRhLT5hb3V0ID0gUENGODU5MV9JTklUX0FPVVQ7CiAKIAlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgZGF0YS0+Y29udHJvbCwgZGF0YS0+YW91dCk7Ci0JCi0JLyogVGhlIGZpcnN0IGJ5dGUgdHJhbnNtaXR0ZWQgY29udGFpbnMgdGhlIGNvbnZlcnNpb24gY29kZSBvZiB0aGUgCisKKwkvKiBUaGUgZmlyc3QgYnl0ZSB0cmFuc21pdHRlZCBjb250YWlucyB0aGUgY29udmVyc2lvbiBjb2RlIG9mIHRoZQogCSAgIHByZXZpb3VzIHJlYWQgY3ljbGUuIEZMVVNIIElUISAqLwogCWkyY19zbWJ1c19yZWFkX2J5dGUoY2xpZW50KTsKIH0KQEAgLTI2Nyw4ICsyNjcsOCBAQAogCQlkYXRhLT5jb250cm9sID0gKGRhdGEtPmNvbnRyb2wgJiB+UENGODU5MV9DT05UUk9MX0FJQ0hfTUFTSykKIAkJCSAgICAgIHwgY2hhbm5lbDsKIAkJaTJjX3NtYnVzX3dyaXRlX2J5dGUoY2xpZW50LCBkYXRhLT5jb250cm9sKTsKLQkKLQkJLyogVGhlIGZpcnN0IGJ5dGUgdHJhbnNtaXR0ZWQgY29udGFpbnMgdGhlIGNvbnZlcnNpb24gY29kZSBvZiAKKworCQkvKiBUaGUgZmlyc3QgYnl0ZSB0cmFuc21pdHRlZCBjb250YWlucyB0aGUgY29udmVyc2lvbiBjb2RlIG9mCiAJCSAgIHRoZSBwcmV2aW91cyByZWFkIGN5Y2xlLiBGTFVTSCBJVCEgKi8KIAkJaTJjX3NtYnVzX3JlYWRfYnl0ZShjbGllbnQpOwogCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaHdtb24vdzgzNjI3ZWhmLmMgYi9kcml2ZXJzL2h3bW9uL3c4MzYyN2VoZi5jCmluZGV4IGZlYWU3NDMuLmU2NGI0MjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaHdtb24vdzgzNjI3ZWhmLmMKKysrIGIvZHJpdmVycy9od21vbi93ODM2MjdlaGYuYwpAQCAtMzYsNiArMzYsNyBAQAogICAgIHc4MzYyN2VoZiAgIDEwICAgICAgNSAgICAgICA0ICAgICAgIDMgICAgICAweDg4NTAgMHg4OCAgICAweDVjYTMKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMHg4ODYwIDB4YTEKICAgICB3ODM2MjdkaGcgICAgOSAgICAgIDUgICAgICAgNCAgICAgICAzICAgICAgMHhhMDIwIDB4YzEgICAgMHg1Y2EzCisgICAgdzgzNjY3aGcgICAgIDkgICAgICA1ICAgICAgIDMgICAgICAgMyAgICAgIDB4YTUxMCAweGMxICAgIDB4NWNhMwogKi8KIAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgpAQCAtNTIsMTIgKzUzLDEzIEBACiAjaW5jbHVkZSA8YXNtL2lvLmg+CiAjaW5jbHVkZSAibG03NS5oIgogCi1lbnVtIGtpbmRzIHsgdzgzNjI3ZWhmLCB3ODM2MjdkaGcgfTsKK2VudW0ga2luZHMgeyB3ODM2MjdlaGYsIHc4MzYyN2RoZywgdzgzNjY3aGcgfTsKIAogLyogdXNlZCB0byBzZXQgZGF0YS0+bmFtZSA9IHc4MzYyN2VoZl9kZXZpY2VfbmFtZXNbZGF0YS0+c2lvX2tpbmRdICovCiBzdGF0aWMgY29uc3QgY2hhciAqIHc4MzYyN2VoZl9kZXZpY2VfbmFtZXNbXSA9IHsKIAkidzgzNjI3ZWhmIiwKIAkidzgzNjI3ZGhnIiwKKwkidzgzNjY3aGciLAogfTsKIAogc3RhdGljIHVuc2lnbmVkIHNob3J0IGZvcmNlX2lkOwpAQCAtNzEsNiArNzMsNyBAQAogICovCiAKICNkZWZpbmUgVzgzNjI3RUhGX0xEX0hXTQkweDBiCisjZGVmaW5lIFc4MzY2N0hHX0xEX1ZJRCAJMHgwZAogCiAjZGVmaW5lIFNJT19SRUdfTERTRUwJCTB4MDcJLyogTG9naWNhbCBkZXZpY2Ugc2VsZWN0ICovCiAjZGVmaW5lIFNJT19SRUdfREVWSUQJCTB4MjAJLyogRGV2aWNlIElEICgyIGJ5dGVzKSAqLwpAQCAtODMsNiArODYsNyBAQAogI2RlZmluZSBTSU9fVzgzNjI3RUhGX0lECTB4ODg1MAogI2RlZmluZSBTSU9fVzgzNjI3RUhHX0lECTB4ODg2MAogI2RlZmluZSBTSU9fVzgzNjI3REhHX0lECTB4YTAyMAorI2RlZmluZSBTSU9fVzgzNjY3SEdfSUQgCTB4YTUxMAogI2RlZmluZSBTSU9fSURfTUFTSwkJMHhGRkYwCiAKIHN0YXRpYyBpbmxpbmUgdm9pZApAQCAtMjg5LDYgKzI5Myw3IEBACiAJdTggcHdtX21vZGVbNF07IC8qIDAtPkRDIHZhcmlhYmxlIHZvbHRhZ2UsIDEtPlBXTSB2YXJpYWJsZSBkdXR5IGN5Y2xlICovCiAJdTggcHdtX2VuYWJsZVs0XTsgLyogMS0+bWFudWFsCiAJCQkgICAgIDItPnRoZXJtYWwgY3J1aXNlIChhbHNvIGNhbGxlZCBTbWFydEZhbiBJKSAqLworCXU4IHB3bV9udW07CQkvKiBudW1iZXIgb2YgcHdtICovCiAJdTggcHdtWzRdOwogCXU4IHRhcmdldF90ZW1wWzRdOwogCXU4IHRvbGVyYW5jZVs0XTsKQEAgLTI5OCw2ICszMDMsOSBAQAogCiAJdTggdmlkOwogCXU4IHZybTsKKworCXU4IHRlbXAzX2Rpc2FibGU7CisJdTggaW42X3NraXA7CiB9OwogCiBzdHJ1Y3QgdzgzNjI3ZWhmX3Npb19kYXRhIHsKQEAgLTg2NiwyNSArODc0LDM3IEBACiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIChpbnQpZGF0YS0+dGVtcF90eXBlW25yXSk7CiB9CiAKLXN0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX3RlbXBbXSA9IHsKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX3RlbXBfaW5wdXRbXSA9IHsKIAlTRU5TT1JfQVRUUih0ZW1wMV9pbnB1dCwgU19JUlVHTywgc2hvd190ZW1wMSwgTlVMTCwgMCksCiAJU0VOU09SX0FUVFIodGVtcDJfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMCksCiAJU0VOU09SX0FUVFIodGVtcDNfaW5wdXQsIFNfSVJVR08sIHNob3dfdGVtcCwgTlVMTCwgMSksCit9OworCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV90ZW1wX21heFtdID0gewogCVNFTlNPUl9BVFRSKHRlbXAxX21heCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdGVtcDFfbWF4LAogCQkgICAgc3RvcmVfdGVtcDFfbWF4LCAwKSwKIAlTRU5TT1JfQVRUUih0ZW1wMl9tYXgsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3RlbXBfbWF4LAogCQkgICAgc3RvcmVfdGVtcF9tYXgsIDApLAogCVNFTlNPUl9BVFRSKHRlbXAzX21heCwgU19JUlVHTyB8IFNfSVdVU1IsIHNob3dfdGVtcF9tYXgsCiAJCSAgICBzdG9yZV90ZW1wX21heCwgMSksCit9OworCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV90ZW1wX21heF9oeXN0W10gPSB7CiAJU0VOU09SX0FUVFIodGVtcDFfbWF4X2h5c3QsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3RlbXAxX21heF9oeXN0LAogCQkgICAgc3RvcmVfdGVtcDFfbWF4X2h5c3QsIDApLAogCVNFTlNPUl9BVFRSKHRlbXAyX21heF9oeXN0LCBTX0lSVUdPIHwgU19JV1VTUiwgc2hvd190ZW1wX21heF9oeXN0LAogCQkgICAgc3RvcmVfdGVtcF9tYXhfaHlzdCwgMCksCiAJU0VOU09SX0FUVFIodGVtcDNfbWF4X2h5c3QsIFNfSVJVR08gfCBTX0lXVVNSLCBzaG93X3RlbXBfbWF4X2h5c3QsCiAJCSAgICBzdG9yZV90ZW1wX21heF9oeXN0LCAxKSwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc2Vuc29yX2RldmljZV9hdHRyaWJ1dGUgc2RhX3RlbXBfYWxhcm1bXSA9IHsKIAlTRU5TT1JfQVRUUih0ZW1wMV9hbGFybSwgU19JUlVHTywgc2hvd19hbGFybSwgTlVMTCwgNCksCiAJU0VOU09SX0FUVFIodGVtcDJfYWxhcm0sIFNfSVJVR08sIHNob3dfYWxhcm0sIE5VTEwsIDUpLAogCVNFTlNPUl9BVFRSKHRlbXAzX2FsYXJtLCBTX0lSVUdPLCBzaG93X2FsYXJtLCBOVUxMLCAxMyksCit9OworCitzdGF0aWMgc3RydWN0IHNlbnNvcl9kZXZpY2VfYXR0cmlidXRlIHNkYV90ZW1wX3R5cGVbXSA9IHsKIAlTRU5TT1JfQVRUUih0ZW1wMV90eXBlLCBTX0lSVUdPLCBzaG93X3RlbXBfdHlwZSwgTlVMTCwgMCksCiAJU0VOU09SX0FUVFIodGVtcDJfdHlwZSwgU19JUlVHTywgc2hvd190ZW1wX3R5cGUsIE5VTEwsIDEpLAogCVNFTlNPUl9BVFRSKHRlbXAzX3R5cGUsIFNfSVJVR08sIHNob3dfdGVtcF90eXBlLCBOVUxMLCAyKSwKQEAgLTExODEsNiArMTIwMSw4IEBACiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoc2RhX3NmM19hcnJheXNfZmFuNCk7IGkrKykKIAkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnNkYV9zZjNfYXJyYXlzX2ZhbjRbaV0uZGV2X2F0dHIpOwogCWZvciAoaSA9IDA7IGkgPCBkYXRhLT5pbl9udW07IGkrKykgeworCQlpZiAoKGkgPT0gNikgJiYgZGF0YS0+aW42X3NraXApCisJCQljb250aW51ZTsKIAkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnNkYV9pbl9pbnB1dFtpXS5kZXZfYXR0cik7CiAJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfaW5fYWxhcm1baV0uZGV2X2F0dHIpOwogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmc2RhX2luX21pbltpXS5kZXZfYXR0cik7CkBAIC0xMTkyLDE1ICsxMjE0LDIyIEBACiAJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfZmFuX2RpdltpXS5kZXZfYXR0cik7CiAJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfZmFuX21pbltpXS5kZXZfYXR0cik7CiAJfQotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+cHdtX251bTsgaSsrKSB7CiAJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfcHdtW2ldLmRldl9hdHRyKTsKIAkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnNkYV9wd21fbW9kZVtpXS5kZXZfYXR0cik7CiAJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfcHdtX2VuYWJsZVtpXS5kZXZfYXR0cik7CiAJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfdGFyZ2V0X3RlbXBbaV0uZGV2X2F0dHIpOwogCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmc2RhX3RvbGVyYW5jZVtpXS5kZXZfYXR0cik7CiAJfQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNkYV90ZW1wKTsgaSsrKQotCQlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmc2RhX3RlbXBbaV0uZGV2X2F0dHIpOworCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJaWYgKChpID09IDIpICYmIGRhdGEtPnRlbXAzX2Rpc2FibGUpCisJCQljb250aW51ZTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnNkYV90ZW1wX2lucHV0W2ldLmRldl9hdHRyKTsKKwkJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJnNkYV90ZW1wX21heFtpXS5kZXZfYXR0cik7CisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfdGVtcF9tYXhfaHlzdFtpXS5kZXZfYXR0cik7CisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfdGVtcF9hbGFybVtpXS5kZXZfYXR0cik7CisJCWRldmljZV9yZW1vdmVfZmlsZShkZXYsICZzZGFfdGVtcF90eXBlW2ldLmRldl9hdHRyKTsKKwl9CiAKIAlkZXZpY2VfcmVtb3ZlX2ZpbGUoZGV2LCAmZGV2X2F0dHJfbmFtZSk7CiAJZGV2aWNlX3JlbW92ZV9maWxlKGRldiwgJmRldl9hdHRyX2NwdTBfdmlkKTsKQEAgLTEyMjIsNiArMTI1MSw4IEBACiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewogCQl0bXAgPSB3ODM2MjdlaGZfcmVhZF92YWx1ZShkYXRhLAogCQkJCQkgICBXODM2MjdFSEZfUkVHX1RFTVBfQ09ORklHW2ldKTsKKwkJaWYgKChpID09IDEpICYmIGRhdGEtPnRlbXAzX2Rpc2FibGUpCisJCQljb250aW51ZTsKIAkJaWYgKHRtcCAmIDB4MDEpCiAJCQl3ODM2MjdlaGZfd3JpdGVfdmFsdWUoZGF0YSwKIAkJCQkJICAgICAgVzgzNjI3RUhGX1JFR19URU1QX0NPTkZJR1tpXSwKQEAgLTEyNzIsOCArMTMwMywxNyBAQAogCWRhdGEtPm5hbWUgPSB3ODM2MjdlaGZfZGV2aWNlX25hbWVzW3Npb19kYXRhLT5raW5kXTsKIAlwbGF0Zm9ybV9zZXRfZHJ2ZGF0YShwZGV2LCBkYXRhKTsKIAotCS8qIDYyN0VIRyBhbmQgNjI3RUhGIGhhdmUgMTAgdm9sdGFnZSBpbnB1dHM7IERIRyBoYXMgOSAqLwotCWRhdGEtPmluX251bSA9IChzaW9fZGF0YS0+a2luZCA9PSB3ODM2MjdkaGcpID8gOSA6IDEwOworCS8qIDYyN0VIRyBhbmQgNjI3RUhGIGhhdmUgMTAgdm9sdGFnZSBpbnB1dHM7IDYyN0RIRyBhbmQgNjY3SEcgaGF2ZSA5ICovCisJZGF0YS0+aW5fbnVtID0gKHNpb19kYXRhLT5raW5kID09IHc4MzYyN2VoZikgPyAxMCA6IDk7CisJLyogNjY3SEcgaGFzIDMgcHdtcyAqLworCWRhdGEtPnB3bV9udW0gPSAoc2lvX2RhdGEtPmtpbmQgPT0gdzgzNjY3aGcpID8gMyA6IDQ7CisKKwkvKiBDaGVjayB0ZW1wMyBjb25maWd1cmF0aW9uIGJpdCBmb3IgNjY3SEcgKi8KKwlpZiAoc2lvX2RhdGEtPmtpbmQgPT0gdzgzNjY3aGcpIHsKKwkJZGF0YS0+dGVtcDNfZGlzYWJsZSA9IHc4MzYyN2VoZl9yZWFkX3ZhbHVlKGRhdGEsCisJCQkJCVc4MzYyN0VIRl9SRUdfVEVNUF9DT05GSUdbMV0pICYgMHgwMTsKKwkJZGF0YS0+aW42X3NraXAgPSAhZGF0YS0+dGVtcDNfZGlzYWJsZTsKKwl9CiAKIAkvKiBJbml0aWFsaXplIHRoZSBjaGlwICovCiAJdzgzNjI3ZWhmX2luaXRfZGV2aWNlKGRhdGEpOwpAQCAtMTI4MSw0NCArMTMyMSw2NCBAQAogCWRhdGEtPnZybSA9IHZpZF93aGljaF92cm0oKTsKIAlzdXBlcmlvX2VudGVyKHNpb19kYXRhLT5zaW9yZWcpOwogCS8qIFJlYWQgVklEIHZhbHVlICovCi0Jc3VwZXJpb19zZWxlY3Qoc2lvX2RhdGEtPnNpb3JlZywgVzgzNjI3RUhGX0xEX0hXTSk7Ci0JaWYgKHN1cGVyaW9faW5iKHNpb19kYXRhLT5zaW9yZWcsIFNJT19SRUdfVklEX0NUUkwpICYgMHg4MCkgewotCQkvKiBTZXQgVklEIGlucHV0IHNlbnNpYmlsaXR5IGlmIG5lZWRlZC4gSW4gdGhlb3J5IHRoZSBCSU9TCi0JCSAgIHNob3VsZCBoYXZlIHNldCBpdCwgYnV0IGluIHByYWN0aWNlIGl0J3Mgbm90IGFsd2F5cyB0aGUKLQkJICAgY2FzZS4gV2Ugb25seSBkbyBpdCBmb3IgdGhlIFc4MzYyN0VIRi9FSEcgYmVjYXVzZSB0aGUKLQkJICAgVzgzNjI3REhHIGlzIG1vcmUgY29tcGxleCBpbiB0aGlzIHJlc3BlY3QuICovCi0JCWlmIChzaW9fZGF0YS0+a2luZCA9PSB3ODM2MjdlaGYpIHsKLQkJCWVuX3ZybTEwID0gc3VwZXJpb19pbmIoc2lvX2RhdGEtPnNpb3JlZywKLQkJCQkJICAgICAgIFNJT19SRUdfRU5fVlJNMTApOwotCQkJaWYgKChlbl92cm0xMCAmIDB4MDgpICYmIGRhdGEtPnZybSA9PSA5MCkgewotCQkJCWRldl93YXJuKGRldiwgIlNldHRpbmcgVklEIGlucHV0IHZvbHRhZ2UgdG8gIgotCQkJCQkgIlRUTFxuIik7Ci0JCQkJc3VwZXJpb19vdXRiKHNpb19kYXRhLT5zaW9yZWcsIFNJT19SRUdfRU5fVlJNMTAsCi0JCQkJCSAgICAgZW5fdnJtMTAgJiB+MHgwOCk7Ci0JCQl9IGVsc2UgaWYgKCEoZW5fdnJtMTAgJiAweDA4KSAmJiBkYXRhLT52cm0gPT0gMTAwKSB7Ci0JCQkJZGV2X3dhcm4oZGV2LCAiU2V0dGluZyBWSUQgaW5wdXQgdm9sdGFnZSB0byAiCi0JCQkJCSAiVlJNMTBcbiIpOwotCQkJCXN1cGVyaW9fb3V0YihzaW9fZGF0YS0+c2lvcmVnLCBTSU9fUkVHX0VOX1ZSTTEwLAotCQkJCQkgICAgIGVuX3ZybTEwIHwgMHgwOCk7Ci0JCQl9Ci0JCX0KLQotCQlkYXRhLT52aWQgPSBzdXBlcmlvX2luYihzaW9fZGF0YS0+c2lvcmVnLCBTSU9fUkVHX1ZJRF9EQVRBKTsKLQkJaWYgKHNpb19kYXRhLT5raW5kID09IHc4MzYyN2VoZikgLyogNiBWSUQgcGlucyBvbmx5ICovCi0JCQlkYXRhLT52aWQgJj0gMHgzZjsKLQorCWlmIChzaW9fZGF0YS0+a2luZCA9PSB3ODM2NjdoZykgeworCQkvKiBXODM2NjdIRyBoYXMgZGlmZmVyZW50IHBpbnMgZm9yIFZJRCBpbnB1dCBhbmQgb3V0cHV0LCBzbworCQl3ZSBjYW4gZ2V0IHRoZSBWSUQgaW5wdXQgdmFsdWVzIGRpcmVjdGx5IGF0IGxvZ2ljYWwgZGV2aWNlIEQKKwkJMHhlMy4gKi8KKwkJc3VwZXJpb19zZWxlY3Qoc2lvX2RhdGEtPnNpb3JlZywgVzgzNjY3SEdfTERfVklEKTsKKwkJZGF0YS0+dmlkID0gc3VwZXJpb19pbmIoc2lvX2RhdGEtPnNpb3JlZywgMHhlMyk7CiAJCWVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZkZXZfYXR0cl9jcHUwX3ZpZCk7CiAJCWlmIChlcnIpCiAJCQlnb3RvIGV4aXRfcmVsZWFzZTsKIAl9IGVsc2UgewotCQlkZXZfaW5mbyhkZXYsICJWSUQgcGlucyBpbiBvdXRwdXQgbW9kZSwgQ1BVIFZJRCBub3QgIgotCQkJICJhdmFpbGFibGVcbiIpOworCQlzdXBlcmlvX3NlbGVjdChzaW9fZGF0YS0+c2lvcmVnLCBXODM2MjdFSEZfTERfSFdNKTsKKwkJaWYgKHN1cGVyaW9faW5iKHNpb19kYXRhLT5zaW9yZWcsIFNJT19SRUdfVklEX0NUUkwpICYgMHg4MCkgeworCQkJLyogU2V0IFZJRCBpbnB1dCBzZW5zaWJpbGl0eSBpZiBuZWVkZWQuIEluIHRoZW9yeSB0aGUKKwkJCSAgIEJJT1Mgc2hvdWxkIGhhdmUgc2V0IGl0LCBidXQgaW4gcHJhY3RpY2UgaXQncyBub3QKKwkJCSAgIGFsd2F5cyB0aGUgY2FzZS4gV2Ugb25seSBkbyBpdCBmb3IgdGhlIFc4MzYyN0VIRi9FSEcKKwkJCSAgIGJlY2F1c2UgdGhlIFc4MzYyN0RIRyBpcyBtb3JlIGNvbXBsZXggaW4gdGhpcworCQkJICAgcmVzcGVjdC4gKi8KKwkJCWlmIChzaW9fZGF0YS0+a2luZCA9PSB3ODM2MjdlaGYpIHsKKwkJCQllbl92cm0xMCA9IHN1cGVyaW9faW5iKHNpb19kYXRhLT5zaW9yZWcsCisJCQkJCQkgICAgICAgU0lPX1JFR19FTl9WUk0xMCk7CisJCQkJaWYgKChlbl92cm0xMCAmIDB4MDgpICYmIGRhdGEtPnZybSA9PSA5MCkgeworCQkJCQlkZXZfd2FybihkZXYsICJTZXR0aW5nIFZJRCBpbnB1dCAiCisJCQkJCQkgInZvbHRhZ2UgdG8gVFRMXG4iKTsKKwkJCQkJc3VwZXJpb19vdXRiKHNpb19kYXRhLT5zaW9yZWcsCisJCQkJCQkgICAgIFNJT19SRUdfRU5fVlJNMTAsCisJCQkJCQkgICAgIGVuX3ZybTEwICYgfjB4MDgpOworCQkJCX0gZWxzZSBpZiAoIShlbl92cm0xMCAmIDB4MDgpCisJCQkJCSAgICYmIGRhdGEtPnZybSA9PSAxMDApIHsKKwkJCQkJZGV2X3dhcm4oZGV2LCAiU2V0dGluZyBWSUQgaW5wdXQgIgorCQkJCQkJICJ2b2x0YWdlIHRvIFZSTTEwXG4iKTsKKwkJCQkJc3VwZXJpb19vdXRiKHNpb19kYXRhLT5zaW9yZWcsCisJCQkJCQkgICAgIFNJT19SRUdfRU5fVlJNMTAsCisJCQkJCQkgICAgIGVuX3ZybTEwIHwgMHgwOCk7CisJCQkJfQorCQkJfQorCisJCQlkYXRhLT52aWQgPSBzdXBlcmlvX2luYihzaW9fZGF0YS0+c2lvcmVnLAorCQkJCQkJU0lPX1JFR19WSURfREFUQSk7CisJCQlpZiAoc2lvX2RhdGEtPmtpbmQgPT0gdzgzNjI3ZWhmKSAvKiA2IFZJRCBwaW5zIG9ubHkgKi8KKwkJCQlkYXRhLT52aWQgJj0gMHgzZjsKKworCQkJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX2NwdTBfdmlkKTsKKwkJCWlmIChlcnIpCisJCQkJZ290byBleGl0X3JlbGVhc2U7CisJCX0gZWxzZSB7CisJCQlkZXZfaW5mbyhkZXYsICJWSUQgcGlucyBpbiBvdXRwdXQgbW9kZSwgQ1BVIFZJRCBub3QgIgorCQkJCSAiYXZhaWxhYmxlXG4iKTsKKwkJfQogCX0KIAogCS8qIGZhbjQgYW5kIGZhbjUgc2hhcmUgc29tZSBwaW5zIHdpdGggdGhlIEdQSU8gYW5kIHNlcmlhbCBmbGFzaCAqLwotCi0JZmFuNXBpbiA9IHN1cGVyaW9faW5iKHNpb19kYXRhLT5zaW9yZWcsIDB4MjQpICYgMHgyOwotCWZhbjRwaW4gPSBzdXBlcmlvX2luYihzaW9fZGF0YS0+c2lvcmVnLCAweDI5KSAmIDB4NjsKKwlpZiAoc2lvX2RhdGEtPmtpbmQgPT0gdzgzNjY3aGcpIHsKKwkJZmFuNXBpbiA9IHN1cGVyaW9faW5iKHNpb19kYXRhLT5zaW9yZWcsIDB4MjcpICYgMHgyMDsKKwkJZmFuNHBpbiA9IHN1cGVyaW9faW5iKHNpb19kYXRhLT5zaW9yZWcsIDB4MjcpICYgMHg0MDsKKwl9IGVsc2UgeworCQlmYW41cGluID0gIShzdXBlcmlvX2luYihzaW9fZGF0YS0+c2lvcmVnLCAweDI0KSAmIDB4MDIpOworCQlmYW40cGluID0gIShzdXBlcmlvX2luYihzaW9fZGF0YS0+c2lvcmVnLCAweDI5KSAmIDB4MDYpOworCX0KIAlzdXBlcmlvX2V4aXQoc2lvX2RhdGEtPnNpb3JlZyk7CiAKIAkvKiBJdCBsb29rcyBsaWtlIGZhbjQgYW5kIGZhbjUgcGlucyBjYW4gYmUgYWx0ZXJuYXRpdmVseSB1c2VkCkBAIC0xMzI5LDkgKzEzODksOSBAQAogCiAJZGF0YS0+aGFzX2ZhbiA9IDB4MDc7IC8qIGZhbjEsIGZhbjIgYW5kIGZhbjMgKi8KIAlpID0gdzgzNjI3ZWhmX3JlYWRfdmFsdWUoZGF0YSwgVzgzNjI3RUhGX1JFR19GQU5ESVYxKTsKLQlpZiAoKGkgJiAoMSA8PCAyKSkgJiYgKCFmYW40cGluKSkKKwlpZiAoKGkgJiAoMSA8PCAyKSkgJiYgZmFuNHBpbikKIAkJZGF0YS0+aGFzX2ZhbiB8PSAoMSA8PCAzKTsKLQlpZiAoIShpICYgKDEgPDwgMSkpICYmICghZmFuNXBpbikpCisJaWYgKCEoaSAmICgxIDw8IDEpKSAmJiBmYW41cGluKQogCQlkYXRhLT5oYXNfZmFuIHw9ICgxIDw8IDQpOwogCiAJLyogUmVhZCBmYW4gY2xvY2sgZGl2aWRlcnMgaW1tZWRpYXRlbHkgKi8KQEAgLTEzNDQsMTQgKzE0MDQsMTYgQEAKIAkJCWdvdG8gZXhpdF9yZW1vdmU7CiAKIAkvKiBpZiBmYW40IGlzIGVuYWJsZWQgY3JlYXRlIHRoZSBzZjMgZmlsZXMgZm9yIGl0ICovCi0JaWYgKGRhdGEtPmhhc19mYW4gJiAoMSA8PCAzKSkKKwlpZiAoKGRhdGEtPmhhc19mYW4gJiAoMSA8PCAzKSkgJiYgZGF0YS0+cHdtX251bSA+PSA0KQogCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzZGFfc2YzX2FycmF5c19mYW40KTsgaSsrKSB7CiAJCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCiAJCQkJJnNkYV9zZjNfYXJyYXlzX2ZhbjRbaV0uZGV2X2F0dHIpKSkKIAkJCQlnb3RvIGV4aXRfcmVtb3ZlOwogCQl9CiAKLQlmb3IgKGkgPSAwOyBpIDwgZGF0YS0+aW5fbnVtOyBpKyspCisJZm9yIChpID0gMDsgaSA8IGRhdGEtPmluX251bTsgaSsrKSB7CisJCWlmICgoaSA9PSA2KSAmJiBkYXRhLT5pbjZfc2tpcCkKKwkJCWNvbnRpbnVlOwogCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZGFfaW5faW5wdXRbaV0uZGV2X2F0dHIpKQogCQkJfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCiAJCQkJJnNkYV9pbl9hbGFybVtpXS5kZXZfYXR0cikpCkBAIC0xMzYwLDYgKzE0MjIsNyBAQAogCQkJfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCiAJCQkJJnNkYV9pbl9tYXhbaV0uZGV2X2F0dHIpKSkKIAkJCWdvdG8gZXhpdF9yZW1vdmU7CisJfQogCiAJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgewogCQlpZiAoZGF0YS0+aGFzX2ZhbiAmICgxIDw8IGkpKSB7CkBAIC0xMzcyLDcgKzE0MzUsNyBAQAogCQkJCXx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAogCQkJCQkmc2RhX2Zhbl9taW5baV0uZGV2X2F0dHIpKSkKIAkJCQlnb3RvIGV4aXRfcmVtb3ZlOwotCQkJaWYgKGkgPCA0ICYmIC8qIHc4MzYyN2VoZiBvbmx5IGhhcyA0IHB3bSAqLworCQkJaWYgKGkgPCBkYXRhLT5wd21fbnVtICYmCiAJCQkJKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAogCQkJCQkmc2RhX3B3bVtpXS5kZXZfYXR0cikpCiAJCQkJfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCkBAIC0xMzg3LDkgKzE0NTAsMjEgQEAKIAkJfQogCX0KIAotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHNkYV90ZW1wKTsgaSsrKQotCQlpZiAoKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsICZzZGFfdGVtcFtpXS5kZXZfYXR0cikpKQorCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspIHsKKwkJaWYgKChpID09IDIpICYmIGRhdGEtPnRlbXAzX2Rpc2FibGUpCisJCQljb250aW51ZTsKKwkJaWYgKChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCSZzZGFfdGVtcF9pbnB1dFtpXS5kZXZfYXR0cikpCisJCQl8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkmc2RhX3RlbXBfbWF4W2ldLmRldl9hdHRyKSkKKwkJCXx8IChlcnIgPSBkZXZpY2VfY3JlYXRlX2ZpbGUoZGV2LAorCQkJCSZzZGFfdGVtcF9tYXhfaHlzdFtpXS5kZXZfYXR0cikpCisJCQl8fCAoZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwKKwkJCQkmc2RhX3RlbXBfYWxhcm1baV0uZGV2X2F0dHIpKQorCQkJfHwgKGVyciA9IGRldmljZV9jcmVhdGVfZmlsZShkZXYsCisJCQkJJnNkYV90ZW1wX3R5cGVbaV0uZGV2X2F0dHIpKSkKIAkJCWdvdG8gZXhpdF9yZW1vdmU7CisJfQogCiAJZXJyID0gZGV2aWNlX2NyZWF0ZV9maWxlKGRldiwgJmRldl9hdHRyX25hbWUpOwogCWlmIChlcnIpCkBAIC0xNDQyLDYgKzE1MTcsNyBAQAogCXN0YXRpYyBjb25zdCBjaGFyIF9faW5pdGRhdGEgc2lvX25hbWVfVzgzNjI3RUhGW10gPSAiVzgzNjI3RUhGIjsKIAlzdGF0aWMgY29uc3QgY2hhciBfX2luaXRkYXRhIHNpb19uYW1lX1c4MzYyN0VIR1tdID0gIlc4MzYyN0VIRyI7CiAJc3RhdGljIGNvbnN0IGNoYXIgX19pbml0ZGF0YSBzaW9fbmFtZV9XODM2MjdESEdbXSA9ICJXODM2MjdESEciOworCXN0YXRpYyBjb25zdCBjaGFyIF9faW5pdGRhdGEgc2lvX25hbWVfVzgzNjY3SEdbXSA9ICJXODM2NjdIRyI7CiAKIAl1MTYgdmFsOwogCWNvbnN0IGNoYXIgKnNpb19uYW1lOwpAQCAtMTQ2Niw2ICsxNTQyLDEwIEBACiAJCXNpb19kYXRhLT5raW5kID0gdzgzNjI3ZGhnOwogCQlzaW9fbmFtZSA9IHNpb19uYW1lX1c4MzYyN0RIRzsKIAkJYnJlYWs7CisJY2FzZSBTSU9fVzgzNjY3SEdfSUQ6CisJCXNpb19kYXRhLT5raW5kID0gdzgzNjY3aGc7CisJCXNpb19uYW1lID0gc2lvX25hbWVfVzgzNjY3SEc7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCWlmICh2YWwgIT0gMHhmZmZmKQogCQkJcHJfZGVidWcoRFJWTkFNRSAiOiB1bnN1cHBvcnRlZCBjaGlwIElEOiAweCUwNHhcbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLWk4MDEuYyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCmluZGV4IDIzMDIzOGQuLjEwNDExODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtaTgwMS5jCkBAIC02NSw2ICs2NSw3IEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bGludXgvZG1pLmg+CiAKIC8qIEk4MDEgU01CdXMgYWRkcmVzcyBvZmZzZXRzICovCiAjZGVmaW5lIFNNQkhTVFNUUwkoMCArIGk4MDFfc21iYSkKQEAgLTYxNiwxMCArNjE3LDgxIEBACiBzdGF0aWMgdm9pZCBfX2luaXQgaW5wdXRfYXBhbmVsX2luaXQodm9pZCkge30KICNlbmRpZgogCisjaWYgZGVmaW5lZCBDT05GSUdfU0VOU09SU19GU0NITUQgfHwgZGVmaW5lZCBDT05GSUdfU0VOU09SU19GU0NITURfTU9EVUxFCitzdHJ1Y3QgZG1pX29uYm9hcmRfZGV2aWNlX2luZm8geworCWNvbnN0IGNoYXIgKm5hbWU7CisJdTggdHlwZTsKKwl1bnNpZ25lZCBzaG9ydCBpMmNfYWRkcjsKKwljb25zdCBjaGFyICppMmNfdHlwZTsKK307CisKK3N0YXRpYyBzdHJ1Y3QgZG1pX29uYm9hcmRfZGV2aWNlX2luZm8gX19kZXZpbml0ZGF0YSBkbWlfZGV2aWNlc1tdID0geworCXsgIlN5bGV1cyIsIERNSV9ERVZfVFlQRV9PVEhFUiwgMHg3MywgImZzY3N5bCIgfSwKKwl7ICJIZXJtZXMiLCBETUlfREVWX1RZUEVfT1RIRVIsIDB4NzMsICJmc2NoZXIiIH0sCisJeyAiSGFkZXMiLCAgRE1JX0RFVl9UWVBFX09USEVSLCAweDczLCAiZnNjaGRzIiB9LAorfTsKKworc3RhdGljIHZvaWQgX19kZXZpbml0IGRtaV9jaGVja19vbmJvYXJkX2RldmljZSh1OCB0eXBlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCQkgICAgICAgc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQoreworCWludCBpOworCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOworCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZG1pX2RldmljZXMpOyBpKyspIHsKKwkJLyogJiB+MHg4MCwgaWdub3JlIGVuYWJsZWQvZGlzYWJsZWQgYml0ICovCisJCWlmICgodHlwZSAmIH4weDgwKSAhPSBkbWlfZGV2aWNlc1tpXS50eXBlKQorCQkJY29udGludWU7CisJCWlmIChzdHJjbXAobmFtZSwgZG1pX2RldmljZXNbaV0ubmFtZSkpCisJCQljb250aW51ZTsKKworCQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihzdHJ1Y3QgaTJjX2JvYXJkX2luZm8pKTsKKwkJaW5mby5hZGRyID0gZG1pX2RldmljZXNbaV0uaTJjX2FkZHI7CisJCXN0cmxjcHkoaW5mby50eXBlLCBkbWlfZGV2aWNlc1tpXS5pMmNfdHlwZSwgSTJDX05BTUVfU0laRSk7CisJCWkyY19uZXdfZGV2aWNlKGFkYXAsICZpbmZvKTsKKwkJYnJlYWs7CisJfQorfQorCisvKiBXZSB1c2Ugb3VyIG93biBmdW5jdGlvbiB0byBjaGVjayBmb3Igb25ib2FyZCBkZXZpY2VzIGluc3RlYWQgb2YKKyAgIGRtaV9maW5kX2RldmljZSgpIGFzIHNvbWUgYnVnZ3kgQklPUydzIGhhdmUgdGhlIGRldmljZXMgd2UgYXJlIGludGVyZXN0ZWQKKyAgIGluIG1hcmtlZCBhcyBkaXNhYmxlZCAqLworc3RhdGljIHZvaWQgX19kZXZpbml0IGRtaV9jaGVja19vbmJvYXJkX2RldmljZXMoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKmRtLAorCQkJCQkJdm9pZCAqYWRhcCkKK3sKKwlpbnQgaSwgY291bnQ7CisKKwlpZiAoZG0tPnR5cGUgIT0gMTApCisJCXJldHVybjsKKworCWNvdW50ID0gKGRtLT5sZW5ndGggLSBzaXplb2Yoc3RydWN0IGRtaV9oZWFkZXIpKSAvIDI7CisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKwkJY29uc3QgdTggKmQgPSAoY2hhciAqKShkbSArIDEpICsgKGkgKiAyKTsKKwkJY29uc3QgY2hhciAqbmFtZSA9ICgoY2hhciAqKSBkbSkgKyBkbS0+bGVuZ3RoOworCQl1OCB0eXBlID0gZFswXTsKKwkJdTggcyA9IGRbMV07CisKKwkJaWYgKCFzKQorCQkJY29udGludWU7CisJCXMtLTsKKwkJd2hpbGUgKHMgPiAwICYmIG5hbWVbMF0pIHsKKwkJCW5hbWUgKz0gc3RybGVuKG5hbWUpICsgMTsKKwkJCXMtLTsKKwkJfQorCQlpZiAobmFtZVswXSA9PSAwKSAvKiBCb2d1cyBzdHJpbmcgcmVmZXJlbmNlICovCisJCQljb250aW51ZTsKKworCQlkbWlfY2hlY2tfb25ib2FyZF9kZXZpY2UodHlwZSwgbmFtZSwgYWRhcCk7CisJfQorfQorI2VuZGlmCisKIHN0YXRpYyBpbnQgX19kZXZpbml0IGk4MDFfcHJvYmUoc3RydWN0IHBjaV9kZXYgKmRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmlkKQogewogCXVuc2lnbmVkIGNoYXIgdGVtcDsKIAlpbnQgZXJyOworI2lmIGRlZmluZWQgQ09ORklHX1NFTlNPUlNfRlNDSE1EIHx8IGRlZmluZWQgQ09ORklHX1NFTlNPUlNfRlNDSE1EX01PRFVMRQorCWNvbnN0IGNoYXIgKnZlbmRvcjsKKyNlbmRpZgogCiAJSTgwMV9kZXYgPSBkZXY7CiAJaTgwMV9mZWF0dXJlcyA9IDA7CkBAIC03MTIsNiArNzg0LDExIEBACiAJCWkyY19uZXdfZGV2aWNlKCZpODAxX2FkYXB0ZXIsICZpbmZvKTsKIAl9CiAjZW5kaWYKKyNpZiBkZWZpbmVkIENPTkZJR19TRU5TT1JTX0ZTQ0hNRCB8fCBkZWZpbmVkIENPTkZJR19TRU5TT1JTX0ZTQ0hNRF9NT0RVTEUKKwl2ZW5kb3IgPSBkbWlfZ2V0X3N5c3RlbV9pbmZvKERNSV9CT0FSRF9WRU5ET1IpOworCWlmICh2ZW5kb3IgJiYgIXN0cmNtcCh2ZW5kb3IsICJGVUpJVFNVIFNJRU1FTlMiKSkKKwkJZG1pX3dhbGsoZG1pX2NoZWNrX29uYm9hcmRfZGV2aWNlcywgJmk4MDFfYWRhcHRlcik7CisjZW5kaWYKIAogCXJldHVybiAwOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jIGIvZHJpdmVycy9pMmMvYnVzc2VzL2kyYy1tcGMuYwppbmRleCAyYjg0N2Q4Li4yNmJmMzcwIDEwMDY0NAotLS0gYS9kcml2ZXJzL2kyYy9idXNzZXMvaTJjLW1wYy5jCisrKyBiL2RyaXZlcnMvaTJjL2J1c3Nlcy9pMmMtbXBjLmMKQEAgLTcwLDcgKzcwLDcgQEAKIAkJLyogUmVhZCBhZ2FpbiB0byBhbGxvdyByZWdpc3RlciB0byBzdGFiaWxpc2UgKi8KIAkJaTJjLT5pbnRlcnJ1cHQgPSByZWFkYihpMmMtPmJhc2UgKyBNUENfSTJDX1NSKTsKIAkJd3JpdGViKDAsIGkyYy0+YmFzZSArIE1QQ19JMkNfU1IpOwotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmkyYy0+cXVldWUpOworCQl3YWtlX3VwKCZpMmMtPnF1ZXVlKTsKIAl9CiAJcmV0dXJuIElSUV9IQU5ETEVEOwogfQpAQCAtMTE1LDEzICsxMTUsMTAgQEAKIAkJd3JpdGViKDAsIGkyYy0+YmFzZSArIE1QQ19JMkNfU1IpOwogCX0gZWxzZSB7CiAJCS8qIEludGVycnVwdCBtb2RlICovCi0JCXJlc3VsdCA9IHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KGkyYy0+cXVldWUsCisJCXJlc3VsdCA9IHdhaXRfZXZlbnRfdGltZW91dChpMmMtPnF1ZXVlLAogCQkJKGkyYy0+aW50ZXJydXB0ICYgQ1NSX01JRiksIHRpbWVvdXQpOwogCi0JCWlmICh1bmxpa2VseShyZXN1bHQgPCAwKSkgewotCQkJcHJfZGVidWcoIkkyQzogd2FpdCBpbnRlcnJ1cHRlZFxuIik7Ci0JCQl3cml0ZWNjcihpMmMsIDApOwotCQl9IGVsc2UgaWYgKHVubGlrZWx5KCEoaTJjLT5pbnRlcnJ1cHQgJiBDU1JfTUlGKSkpIHsKKwkJaWYgKHVubGlrZWx5KCEoaTJjLT5pbnRlcnJ1cHQgJiBDU1JfTUlGKSkpIHsKIAkJCXByX2RlYnVnKCJJMkM6IHdhaXQgdGltZW91dFxuIik7CiAJCQl3cml0ZWNjcihpMmMsIDApOwogCQkJcmVzdWx0ID0gLUVUSU1FRE9VVDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaTJjL2NoaXBzL0tjb25maWcgYi9kcml2ZXJzL2kyYy9jaGlwcy9LY29uZmlnCmluZGV4IGM4MDMxMmMuLjhmOGM4MWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL0tjb25maWcKKysrIGIvZHJpdmVycy9pMmMvY2hpcHMvS2NvbmZpZwpAQCAtNjQsMTkgKzY0LDYgQEAKIAkgIFRoaXMgZHJpdmVyIGlzIGRlcHJlY2F0ZWQgYW5kIHdpbGwgYmUgZHJvcHBlZCBzb29uLiBVc2UKIAkgIGRyaXZlcnMvZ3Bpby9wY2E5NTN4LmMgaW5zdGVhZC4KIAotY29uZmlnIFNFTlNPUlNfUENGODU5MQotCXRyaXN0YXRlICJQaGlsaXBzIFBDRjg1OTEiCi0JZGVwZW5kcyBvbiBFWFBFUklNRU5UQUwKLQlkZWZhdWx0IG4KLQloZWxwCi0JICBJZiB5b3Ugc2F5IHllcyBoZXJlIHlvdSBnZXQgc3VwcG9ydCBmb3IgUGhpbGlwcyBQQ0Y4NTkxIGNoaXBzLgotCi0JICBUaGlzIGRyaXZlciBjYW4gYWxzbyBiZSBidWlsdCBhcyBhIG1vZHVsZS4gIElmIHNvLCB0aGUgbW9kdWxlCi0JICB3aWxsIGJlIGNhbGxlZCBwY2Y4NTkxLgotCi0JICBUaGVzZSBkZXZpY2VzIGFyZSBoYXJkIHRvIGRldGVjdCBhbmQgcmFyZWx5IGZvdW5kIG9uIG1haW5zdHJlYW0KLQkgIGhhcmR3YXJlLiAgSWYgdW5zdXJlLCBzYXkgTi4KLQogY29uZmlnIFNFTlNPUlNfTUFYNjg3NQogCXRyaXN0YXRlICJNYXhpbSBNQVg2ODc1IFBvd2VyIHN1cHBseSBzdXBlcnZpc29yIgogCWRlcGVuZHMgb24gRVhQRVJJTUVOVEFMCmRpZmYgLS1naXQgYS9kcml2ZXJzL2kyYy9jaGlwcy9NYWtlZmlsZSBiL2RyaXZlcnMvaTJjL2NoaXBzL01ha2VmaWxlCmluZGV4IGQxNDJmMjMuLjU1YTM3NjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaTJjL2NoaXBzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvaTJjL2NoaXBzL01ha2VmaWxlCkBAIC0xNSw3ICsxNSw2IEBACiBvYmotJChDT05GSUdfU0VOU09SU19QQ0E5NTM5KQkrPSBwY2E5NTM5Lm8KIG9iai0kKENPTkZJR19TRU5TT1JTX1BDRjg1NzQpCSs9IHBjZjg1NzQubwogb2JqLSQoQ09ORklHX1BDRjg1NzUpCQkrPSBwY2Y4NTc1Lm8KLW9iai0kKENPTkZJR19TRU5TT1JTX1BDRjg1OTEpCSs9IHBjZjg1OTEubwogb2JqLSQoQ09ORklHX1NFTlNPUlNfVFNMMjU1MCkJKz0gdHNsMjU1MC5vCiAKIGlmZXEgKCQoQ09ORklHX0kyQ19ERUJVR19DSElQKSx5KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvYWxpbTE1eDMuYyBiL2RyaXZlcnMvaWRlL2FsaW0xNXgzLmMKaW5kZXggZDM1MTNiNi4uZDUxNjE2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYWxpbTE1eDMuYworKysgYi9kcml2ZXJzL2lkZS9hbGltMTV4My5jCkBAIC0xOTEsMTcgKzE5MSwxOCBAQAogLyoqCiAgKglhbGkxNXgzX2RtYV9zZXR1cAktCWJlZ2luIGEgRE1BIHBoYXNlCiAgKglAZHJpdmU6CXRhcmdldCBkZXZpY2UKKyAqCUBjbWQ6IGNvbW1hbmQKICAqCiAgKglSZXR1cm5zIDEgaWYgdGhlIERNQSBjYW5ub3QgYmUgcGVyZm9ybWVkLCB6ZXJvIG9uIHN1Y2Nlc3MuCiAgKi8KIAotc3RhdGljIGludCBhbGkxNXgzX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgaW50IGFsaTE1eDNfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZiAobTUyMjlfcmV2aXNpb24gPCAweEMyICYmIGRyaXZlLT5tZWRpYSAhPSBpZGVfZGlzaykgewotCQlpZiAocnFfZGF0YV9kaXIoZHJpdmUtPmh3aWYtPnJxKSkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfV1JJVEUpCiAJCQlyZXR1cm4gMTsJLyogdHJ5IFBJTyBpbnN0ZWFkIG9mIERNQSAqLwogCX0KLQlyZXR1cm4gaWRlX2RtYV9zZXR1cChkcml2ZSk7CisJcmV0dXJuIGlkZV9kbWFfc2V0dXAoZHJpdmUsIGNtZCk7CiB9CiAKIC8qKgpAQCAtNTAzLDExICs1MDQsMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgYWxpX2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gYWxpMTV4M19kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gaWRlX2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBpZGVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAogCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCiAJLmRtYV9zZmZfcmVhZF9zdGF0dXMJPSBpZGVfZG1hX3NmZl9yZWFkX3N0YXR1cywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hdDkxX2lkZS5jIGIvZHJpdmVycy9pZGUvYXQ5MV9pZGUuYwppbmRleCAxYmI1MGY0Li4yNzU0NzEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9hdDkxX2lkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2F0OTFfaWRlLmMKQEAgLTE0Myw3ICsxNDMsNyBAQAogCXNldF9zbWNfdGltaW5ncyhjaGlwc2VsZWN0LCBjeWNsZSwgc2V0dXAsIHB1bHNlLCBkYXRhX2Zsb2F0LCB1c2VfaW9yZHkpOwogfQogCi1zdGF0aWMgdm9pZCBhdDkxX2lkZV9pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorc3RhdGljIHZvaWQgYXQ5MV9pZGVfaW5wdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsCiAJCQkJdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKQEAgLTE1NiwxMSArMTU2LDExIEBACiAJbGVuKys7CiAKIAllbnRlcl8xNmJpdChjaGlwc2VsZWN0LCBtb2RlKTsKLQlfX2lkZV9tbV9pbnN3KCh2b2lkIF9faW9tZW0gKikgaW9fcG9ydHMtPmRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKKwlyZWFkc3coKHZvaWQgX19pb21lbSAqKWlvX3BvcnRzLT5kYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gMik7CiAJbGVhdmVfMTZiaXQoY2hpcHNlbGVjdCwgbW9kZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGF0OTFfaWRlX291dHB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorc3RhdGljIHZvaWQgYXQ5MV9pZGVfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLAogCQkJCSB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwpAQCAtMTcxLDcgKzE3MSw3IEBACiAJcGRiZygiY3MgJXUgYnVmICVwIGxlbiAlZFxuIiwgY2hpcHNlbGVjdCwgIGJ1ZiwgbGVuKTsKIAogCWVudGVyXzE2Yml0KGNoaXBzZWxlY3QsIG1vZGUpOwotCV9faWRlX21tX291dHN3KCh2b2lkIF9faW9tZW0gKikgaW9fcG9ydHMtPmRhdGFfYWRkciwgYnVmLCBsZW4gLyAyKTsKKwl3cml0ZXN3KCh2b2lkIF9faW9tZW0gKilpb19wb3J0cy0+ZGF0YV9hZGRyLCBidWYsIGxlbiAvIDIpOwogCWxlYXZlXzE2Yml0KGNoaXBzZWxlY3QsIG1vZGUpOwogfQogCkBAIC0xODUsNTUgKzE4NSw1NSBAQAogCXdyaXRlYih2YWx1ZSwgKHZvaWQgX19pb21lbSAqKSBwb3J0KTsKIH0KIAotc3RhdGljIHZvaWQgYXQ5MV9pZGVfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCitzdGF0aWMgdm9pZCBhdDkxX2lkZV90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7Ci0JdTggSElISSA9ICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgPyAweEUwIDogMHhFRjsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOworCXU4IEhJSEkgPSAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgPyAweEUwIDogMHhFRjsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19GTEFHR0VEKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX0ZURkxBR19GTEFHR0VEKQogCQlISUhJID0gMHhGRjsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREFUQSkgeworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX0ZURkxBR19PVVRfREFUQSkgewogCQl1MTYgZGF0YSA9ICh0Zi0+aG9iX2RhdGEgPDwgOCkgfCB0Zi0+ZGF0YTsKIAogCQlhdDkxX2lkZV9vdXRwdXRfZGF0YShkcml2ZSwgTlVMTCwgJmRhdGEsIDIpOwogCX0KIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFKQogCQlpZGVfbW1fb3V0Yih0Zi0+aG9iX2ZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX05TRUNUKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QpCiAJCWlkZV9tbV9vdXRiKHRmLT5ob2JfbnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFMKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTCkKIAkJaWRlX21tX291dGIodGYtPmhvYl9sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTSkKIAkJaWRlX21tX291dGIodGYtPmhvYl9sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBSCkKIAkJaWRlX21tX291dGIodGYtPmhvYl9sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKIAkJaWRlX21tX291dGIodGYtPmZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTlNFQ1QpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX05TRUNUKQogCQlpZGVfbW1fb3V0Yih0Zi0+bnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCiAJCWlkZV9tbV9vdXRiKHRmLT5sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCiAJCWlkZV9tbV9vdXRiKHRmLT5sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCiAJCWlkZV9tbV9vdXRiKHRmLT5sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCiAJCWlkZV9tbV9vdXRiKCh0Zi0+ZGV2aWNlICYgSElISSkgfCBkcml2ZS0+c2VsZWN0LCBpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwogfQogCi1zdGF0aWMgdm9pZCBhdDkxX2lkZV90Zl9yZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3N0YXRpYyB2b2lkIGF0OTFfaWRlX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RBVEEpIHsKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9GVEZMQUdfSU5fREFUQSkgewogCQl1MTYgZGF0YTsKIAogCQlhdDkxX2lkZV9pbnB1dF9kYXRhKGRyaXZlLCBOVUxMLCAmZGF0YSwgMik7CkBAIC0yNDQsMzEgKzI0NCwzMSBAQAogCS8qIGJlIHN1cmUgd2UncmUgbG9va2luZyBhdCB0aGUgbG93IG9yZGVyIGJpdHMgKi8KIAlpZGVfbW1fb3V0YihBVEFfREVWQ1RMX09CUyAmIH4weDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKIAkJdGYtPmZlYXR1cmUgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKIAkJdGYtPm5zZWN0ICA9IGlkZV9tbV9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUwpCiAJCXRmLT5sYmFsICAgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQU0pCiAJCXRmLT5sYmFtICAgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCiAJCXRmLT5sYmFoICAgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9ERVZJQ0UpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREVWSUNFKQogCQl0Zi0+ZGV2aWNlID0gaWRlX21tX2luYihpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSB7CisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKIAkJaWRlX21tX291dGIoQVRBX0RFVkNUTF9PQlMgfCAweDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRkVBVFVSRSkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUpCiAJCQl0Zi0+aG9iX2ZlYXR1cmUgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX05TRUNUKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCiAJCQl0Zi0+aG9iX25zZWN0ICAgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTCkKIAkJCXRmLT5ob2JfbGJhbCAgICA9IGlkZV9tbV9pbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQU0pCiAJCQl0Zi0+aG9iX2xiYW0gICAgPSBpZGVfbW1faW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQogCQkJdGYtPmhvYl9sYmFoICAgID0gaWRlX21tX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAl9CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9hdTF4eHgtaWRlLmMgYi9kcml2ZXJzL2lkZS9hdTF4eHgtaWRlLmMKaW5kZXggMTU0ZWMyYy4uZDNhOWQ2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYXUxeHh4LWlkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2F1MXh4eC1pZGUuYwpAQCAtODYsMTMgKzg2LDEzIEBACiAJY3RwLT5jdXJfcHRyID0gYXUxeHh4X2RkbWFfZ2V0X25leHRwdHJfdmlydChkcCk7CiB9CiAKLXN0YXRpYyB2b2lkIGF1MXh4eF9pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorc3RhdGljIHZvaWQgYXUxeHh4X2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLAogCQkJICAgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCWF1aWRlX2luc3coZHJpdmUtPmh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkciwgYnVmLCAobGVuICsgMSkgLyAyKTsKIH0KIAotc3RhdGljIHZvaWQgYXUxeHh4X291dHB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorc3RhdGljIHZvaWQgYXUxeHh4X291dHB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwKIAkJCSAgICAgICB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJYXVpZGVfb3V0c3coZHJpdmUtPmh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkciwgYnVmLCAobGVuICsgMSkgLyAyKTsKQEAgLTIwOSwyMyArMjA5LDE3IEBACiAgKi8KIAogI2lmZGVmIENPTkZJR19CTEtfREVWX0lERV9BVTFYWFhfTURNQTJfREJETUEKLXN0YXRpYyBpbnQgYXVpZGVfYnVpbGRfZG1hdGFibGUoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIGludCBhdWlkZV9idWlsZF9kbWF0YWJsZShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7Ci0JaW50IGksIGlzd3JpdGUsIGNvdW50ID0gMDsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+cnE7CiAJX2F1aWRlX2h3aWYgKmFod2lmID0gJmF1aWRlX2h3aWY7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKKwlpbnQgaSA9IGNtZC0+c2dfbmVudHMsIGNvdW50ID0gMDsKKwlpbnQgaXN3cml0ZSA9ICEhKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfV1JJVEUpOwogCi0JaXN3cml0ZSA9IChycV9kYXRhX2RpcihycSkgPT0gV1JJVEUpOwogCS8qIFNhdmUgZm9yIGludGVycnVwdCBjb250ZXh0ICovCiAJYWh3aWYtPmRyaXZlID0gZHJpdmU7CiAKLQlod2lmLT5zZ19uZW50cyA9IGkgPSBpZGVfYnVpbGRfc2dsaXN0KGRyaXZlLCBycSk7Ci0KLQlpZiAoIWkpCi0JCXJldHVybiAwOwotCiAJLyogZmlsbCB0aGUgZGVzY3JpcHRvcnMgKi8KIAlzZyA9IGh3aWYtPnNnX3RhYmxlOwogCXdoaWxlIChpICYmIHNnX2RtYV9sZW4oc2cpKSB7CkBAIC0yODYsMTIgKzI4MCw3IEBACiAKIHN0YXRpYyBpbnQgYXVpZGVfZG1hX2VuZChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCi0JaWYgKGh3aWYtPnNnX25lbnRzKSB7Ci0JCWlkZV9kZXN0cm95X2RtYXRhYmxlKGRyaXZlKTsKLQkJaHdpZi0+c2dfbmVudHMgPSAwOwotCX0KKwlpZGVfZGVzdHJveV9kbWF0YWJsZShkcml2ZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTMwMSwxOSArMjkwLDEwIEBACiB9CiAKIAotc3RhdGljIHZvaWQgYXVpZGVfZG1hX2V4ZWNfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggY29tbWFuZCkKK3N0YXRpYyBpbnQgYXVpZGVfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKLQkvKiBpc3N1ZSBjbWQgdG8gZHJpdmUgKi8KLQlpZGVfZXhlY3V0ZV9jb21tYW5kKGRyaXZlLCBjb21tYW5kLCAmaWRlX2RtYV9pbnRyLAotCQkJICAgICgyKldBSVRfQ01EKSwgTlVMTCk7Ci19Ci0KLXN0YXRpYyBpbnQgYXVpZGVfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+cnE7Ci0KLQlpZiAoIWF1aWRlX2J1aWxkX2RtYXRhYmxlKGRyaXZlKSkgewotCQlpZGVfbWFwX3NnKGRyaXZlLCBycSk7CisJaWYgKGF1aWRlX2J1aWxkX2RtYXRhYmxlKGRyaXZlLCBjbWQpID09IDApIHsKKwkJaWRlX21hcF9zZyhkcml2ZSwgY21kKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0zNjksNyArMzQ5LDYgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgYXUxeHh4X2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBhdWlkZV9kbWFfaG9zdF9zZXQsCiAJLmRtYV9zZXR1cAkJPSBhdWlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBhdWlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBhdWlkZV9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gYXVpZGVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGF1aWRlX2RtYV90ZXN0X2lycSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2J1ZGRoYS5jIGIvZHJpdmVycy9pZGUvYnVkZGhhLmMKaW5kZXggYzVhM2M5ZS4uZDAyOGY4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvYnVkZGhhLmMKKysrIGIvZHJpdmVycy9pZGUvYnVkZGhhLmMKQEAgLTE0Myw2ICsxNDMsMTEgQEAKIAlody0+Y2hpcHNldCA9IGlkZV9nZW5lcmljOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gYnVkZGhhX3BvcnRfaW5mbyA9IHsKKwkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfTU1JTyB8IElERV9IRkxBR19OT19ETUEsCisJLmlycV9mbGFncwkJPSBJUlFGX1NIQVJFRCwKK307CisKICAgICAvKgogICAgICAqICBQcm9iZSBmb3IgYSBCdWRkaGEgb3IgQ2F0d2Vhc2VsIElERSBpbnRlcmZhY2UKICAgICAgKi8KQEAgLTE3MiwxMCArMTc3LDYgQEAKIAkJCiAJCWJvYXJkID0gei0+cmVzb3VyY2Uuc3RhcnQ7CiAKLS8qCi0gKiBGSVhNRTogd2Ugbm93IGhhdmUgc2VsZWN0YWJsZSBtbWlvIHYvcyBpb21pbyB0cmFuc3BvcnRzLgotICovCi0KIAkJaWYodHlwZSAhPSBCT0FSRF9YU1VSRikgewogCQkJaWYgKCFyZXF1ZXN0X21lbV9yZWdpb24oYm9hcmQrQlVEREhBX0JBU0UxLCAweDgwMCwgIklERSIpKQogCQkJCWNvbnRpbnVlOwpAQCAtMjI0LDcgKzIyNSw3IEBACiAJCQlod3NbaV0gPSAmaHdbaV07CiAJCX0KIAotCQlpZGVfaG9zdF9hZGQoTlVMTCwgaHdzLCBOVUxMKTsKKwkJaWRlX2hvc3RfYWRkKCZidWRkaGFfcG9ydF9pbmZvLCBod3MsIE5VTEwpOwogCX0KIAogCXJldHVybiAwOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvY21kNjR4LmMgYi9kcml2ZXJzL2lkZS9jbWQ2NHguYwppbmRleCBhZWVlMDM2Li5iZjBlM2Y0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9jbWQ2NHguYworKysgYi9kcml2ZXJzL2lkZS9jbWQ2NHguYwpAQCAtMzc5LDExICszNzksMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgY21kNjR4X2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gaWRlX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBpZGVfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IGNtZDY0eF9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gY21kNjR4X2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCisJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCiAJLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IGlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKQEAgLTM5MSwxMSArMzkxLDExIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIGNtZDY0Nl9yZXYxX2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gaWRlX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBpZGVfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IGNtZDY0Nl8xX2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBpZGVfZG1hX3Rlc3RfaXJxLAogCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKKwkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKIAkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMsCiB9OwpAQCAtNDAzLDExICs0MDMsMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgY21kNjQ4X2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gaWRlX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBpZGVfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IGNtZDY0OF9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gY21kNjQ4X2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCisJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCiAJLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IGlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2NzNTUzNi5jIGIvZHJpdmVycy9pZGUvY3M1NTM2LmMKaW5kZXggN2E2MmRiNy4uZDVkY2Y0OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvY3M1NTM2LmMKKysrIGIvZHJpdmVycy9pZGUvY3M1NTM2LmMKQEAgLTIzMSwxMSArMjMxLDExIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIGNzNTUzNl9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gY3M1NTM2X2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBjczU1MzZfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAogCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9kZWxraW5fY2IuYyBiL2RyaXZlcnMvaWRlL2RlbGtpbl9jYi5jCmluZGV4IGJhY2IxMTkuLmYxNTNiOTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2RlbGtpbl9jYi5jCisrKyBiL2RyaXZlcnMvaWRlL2RlbGtpbl9jYi5jCkBAIC02Niw2ICs2Niw3IEBACiAJLnBvcnRfb3BzCQk9ICZkZWxraW5fY2JfcG9ydF9vcHMsCiAJLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX0lPXzMyQklUIHwgSURFX0hGTEFHX1VOTUFTS19JUlFTIHwKIAkJCQkgIElERV9IRkxBR19OT19ETUEsCisJLmlycV9mbGFncwkJPSBJUlFGX1NIQVJFRCwKIAkuaW5pdF9jaGlwc2V0CQk9IGRlbGtpbl9jYl9pbml0X2NoaXBzZXQsCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9kdGMyMjc4LmMgYi9kcml2ZXJzL2lkZS9kdGMyMjc4LmMKaW5kZXggNjg5YjJlNC4uYzZiMTM4MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvZHRjMjI3OC5jCisrKyBiL2RyaXZlcnMvaWRlL2R0YzIyNzguYwpAQCAtMTAwLDcgKzEwMCw4IEBACiAJCQkJICBJREVfSEZMQUdfSU9fMzJCSVQgfAogCQkJCSAgLyogZGlzYWxsb3cgLT5pb18zMmJpdCBjaGFuZ2VzICovCiAJCQkJICBJREVfSEZMQUdfTk9fSU9fMzJCSVQgfAotCQkJCSAgSURFX0hGTEFHX05PX0RNQSwKKwkJCQkgIElERV9IRkxBR19OT19ETUEgfAorCQkJCSAgSURFX0hGTEFHX0RUQzIyNzgsCiAJLnBpb19tYXNrCQk9IEFUQV9QSU80LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvZmFsY29uaWRlLmMgYi9kcml2ZXJzL2lkZS9mYWxjb25pZGUuYwppbmRleCBhNjM4ZTk1Li5iMzY4YTVlIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9mYWxjb25pZGUuYworKysgYi9kcml2ZXJzL2lkZS9mYWxjb25pZGUuYwpAQCAtNDAsMjkgKzQwLDQ4IEBACiAgICAgICogIHdoaWNoIGlzIHNoYXJlZCBiZXR3ZWVuIHNldmVyYWwgZHJpdmVycy4KICAgICAgKi8KIAotaW50IGZhbGNvbmlkZV9pbnRyX2xvY2s7Ci1FWFBPUlRfU1lNQk9MKGZhbGNvbmlkZV9pbnRyX2xvY2spOworc3RhdGljIGludCBmYWxjb25pZGVfaW50cl9sb2NrOwogCi1zdGF0aWMgdm9pZCBmYWxjb25pZGVfaW5wdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKK3N0YXRpYyB2b2lkIGZhbGNvbmlkZV9yZWxlYXNlX2xvY2sodm9pZCkKK3sKKwlpZiAoZmFsY29uaWRlX2ludHJfbG9jayA9PSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGJ1Z1xuIiwgX19mdW5jX18pOworCQlyZXR1cm47CisJfQorCWZhbGNvbmlkZV9pbnRyX2xvY2sgPSAwOworCXN0ZG1hX3JlbGVhc2UoKTsKK30KKworc3RhdGljIHZvaWQgZmFsY29uaWRlX2dldF9sb2NrKGlycV9oYW5kbGVyX3QgaGFuZGxlciwgdm9pZCAqZGF0YSkKK3sKKwlpZiAoZmFsY29uaWRlX2ludHJfbG9jayA9PSAwKSB7CisJCWlmIChpbl9pbnRlcnJ1cHQoKSA+IDApCisJCQlwYW5pYygiRmFsY29uIElERSBoYXNuJ3QgU1QtRE1BIGxvY2sgaW4gaW50ZXJydXB0Iik7CisJCXN0ZG1hX2xvY2soaGFuZGxlciwgZGF0YSk7CisJCWZhbGNvbmlkZV9pbnRyX2xvY2sgPSAxOworCX0KK30KKworc3RhdGljIHZvaWQgZmFsY29uaWRlX2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLAogCQkJCSB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJdW5zaWduZWQgbG9uZyBkYXRhX2FkZHIgPSBkcml2ZS0+aHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyOwogCi0JaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzayAmJiBycSAmJiBycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfRlMpCisJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzayAmJiBjbWQgJiYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRlMpKQogCQlyZXR1cm4gaW5zdyhkYXRhX2FkZHIsIGJ1ZiwgKGxlbiArIDEpIC8gMik7CiAKLQlpbnN3X3N3YXB3KGRhdGFfYWRkciwgYnVmLCAobGVuICsgMSkgLyAyKTsKKwlyYXdfaW5zd19zd2FwdygodTE2ICopZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOwogfQogCi1zdGF0aWMgdm9pZCBmYWxjb25pZGVfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCitzdGF0aWMgdm9pZCBmYWxjb25pZGVfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLAogCQkJCSAgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXVuc2lnbmVkIGxvbmcgZGF0YV9hZGRyID0gZHJpdmUtPmh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkcjsKIAotCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2sgJiYgcnEgJiYgcnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0ZTKQorCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2sgJiYgY21kICYmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0ZTKSkKIAkJcmV0dXJuIG91dHN3KGRhdGFfYWRkciwgYnVmLCAobGVuICsgMSkgLyAyKTsKIAotCW91dHN3X3N3YXB3KGRhdGFfYWRkciwgYnVmLCAobGVuICsgMSkgLyAyKTsKKwlyYXdfb3V0c3dfc3dhcHcoKHUxNiAqKWRhdGFfYWRkciwgYnVmLCAobGVuICsgMSkgLyAyKTsKIH0KIAogLyogQXRhcmkgaGFzIGEgYnl0ZS1zd2FwcGVkIElERSBpbnRlcmZhY2UgKi8KQEAgLTgxLDggKzEwMCwxMiBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIGZhbGNvbmlkZV9wb3J0X2luZm8gPSB7CisJLmdldF9sb2NrCQk9IGZhbGNvbmlkZV9nZXRfbG9jaywKKwkucmVsZWFzZV9sb2NrCQk9IGZhbGNvbmlkZV9yZWxlYXNlX2xvY2ssCiAJLnRwX29wcwkJCT0gJmZhbGNvbmlkZV90cF9vcHMsCi0JLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX05PX0RNQSB8IElERV9IRkxBR19TRVJJQUxJWkUsCisJLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX01NSU8gfCBJREVfSEZMQUdfU0VSSUFMSVpFIHwKKwkJCQkgIElERV9IRkxBR19OT19ETUEsCisJLmlycV9mbGFncwkJPSBJUlFGX1NIQVJFRCwKIH07CiAKIHN0YXRpYyB2b2lkIF9faW5pdCBmYWxjb25pZGVfc2V0dXBfcG9ydHMoaHdfcmVnc190ICpodykKQEAgLTEzMiw5ICsxNTUsOSBAQAogCQlnb3RvIGVycjsKIAl9CiAKLQlpZGVfZ2V0X2xvY2soTlVMTCwgTlVMTCk7CisJZmFsY29uaWRlX2dldF9sb2NrKE5VTEwsIE5VTEwpOwogCXJjID0gaWRlX2hvc3RfcmVnaXN0ZXIoaG9zdCwgJmZhbGNvbmlkZV9wb3J0X2luZm8sIGh3cyk7Ci0JaWRlX3JlbGVhc2VfbG9jaygpOworCWZhbGNvbmlkZV9yZWxlYXNlX2xvY2soKTsKIAogCWlmIChyYykKIAkJZ290byBlcnJfZnJlZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2dheWxlLmMgYi9kcml2ZXJzL2lkZS9nYXlsZS5jCmluZGV4IDU5YmQwYmUuLmRjNzc4MjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2dheWxlLmMKKysrIGIvZHJpdmVycy9pZGUvZ2F5bGUuYwpAQCAtMTE4LDcgKzExOCw5IEBACiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBnYXlsZV9wb3J0X2luZm8gPSB7Ci0JLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX1NFUklBTElaRSB8IElERV9IRkxBR19OT19ETUEsCisJLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX01NSU8gfCBJREVfSEZMQUdfU0VSSUFMSVpFIHwKKwkJCQkgIElERV9IRkxBR19OT19ETUEsCisJLmlycV9mbGFncwkJPSBJUlFGX1NIQVJFRCwKIH07CiAKICAgICAvKgpAQCAtMTYzLDkgKzE2NSw2IEBACiAJICAgIGlycXBvcnQgPSAodW5zaWduZWQgbG9uZylaVFdPX1ZBRERSKEdBWUxFX0lSUV8xMjAwKTsKIAkgICAgYWNrX2ludHIgPSBnYXlsZV9hY2tfaW50cl9hMTIwMDsKIAl9Ci0vKgotICogRklYTUU6IHdlIG5vdyBoYXZlIHNlbGVjdGFibGUgbW9kZXMgYmV0d2VlbiBtbWlvIHYvcyBpb21pbwotICovCiAKIAlyZXNfc3RhcnQgPSAoKHVuc2lnbmVkIGxvbmcpcGh5c19iYXNlKSAmIH4oR0FZTEVfTkVYVF9QT1JULTEpOwogCXJlc19uID0gR0FZTEVfSURFUkVHX1NJWkU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9ocHQzNjYuYyBiL2RyaXZlcnMvaWRlL2hwdDM2Ni5jCmluZGV4IGQzYjNlODIuLmRiYWYxODQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2hwdDM2Ni5jCisrKyBiL2RyaXZlcnMvaWRlL2hwdDM2Ni5jCkBAIC0xNDE4LDExICsxNDE4LDExIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIGhwdDM3eF9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gaWRlX2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBocHQzNzRfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGhwdDM3NF9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAogCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCiAJLmRtYV9zZmZfcmVhZF9zdGF0dXMJPSBpZGVfZG1hX3NmZl9yZWFkX3N0YXR1cywKIH07CkBAIC0xNDMwLDExICsxNDMwLDExIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIGhwdDM3MF9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gaHB0MzcwX2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBocHQzNzBfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAogCS5kbWFfdGltZW91dAkJPSBocHQzNzBfZG1hX3RpbWVvdXQsCiAJLmRtYV9zZmZfcmVhZF9zdGF0dXMJPSBpZGVfZG1hX3NmZl9yZWFkX3N0YXR1cywKIH07CkBAIC0xNDQyLDExICsxNDQyLDExIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIGhwdDM2eF9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gaWRlX2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBpZGVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBocHQzNjZfZG1hX2xvc3RfaXJxLAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAogCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCiAJLmRtYV9zZmZfcmVhZF9zdGF0dXMJPSBpZGVfZG1hX3NmZl9yZWFkX3N0YXR1cywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pY3NpZGUuYyBiL2RyaXZlcnMvaWRlL2ljc2lkZS5jCmluZGV4IDQxNWQ3ZTIuLjUxY2U0MDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2ljc2lkZS5jCisrKyBiL2RyaXZlcnMvaWRlL2ljc2lkZS5jCkBAIC0zMDcsMTUgKzMwNywxNCBAQAogCWVuYWJsZV9kbWEoZWMtPmRtYSk7CiB9CiAKLXN0YXRpYyBpbnQgaWNzaWRlX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUpCitzdGF0aWMgaW50IGljc2lkZV9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgZXhwYW5zaW9uX2NhcmQgKmVjID0gRUNBUkRfREVWKGh3aWYtPmRldik7CiAJc3RydWN0IGljc2lkZV9zdGF0ZSAqc3RhdGUgPSBlY2FyZF9nZXRfZHJ2ZGF0YShlYyk7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+cnE7CiAJdW5zaWduZWQgaW50IGRtYV9tb2RlOwogCi0JaWYgKHJxX2RhdGFfZGlyKHJxKSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSkKIAkJZG1hX21vZGUgPSBETUFfTU9ERV9XUklURTsKIAllbHNlCiAJCWRtYV9tb2RlID0gRE1BX01PREVfUkVBRDsKQEAgLTMyNSw4ICszMjQsNiBAQAogCSAqLwogCUJVR19PTihkbWFfY2hhbm5lbF9hY3RpdmUoZWMtPmRtYSkpOwogCi0JaHdpZi0+c2dfbmVudHMgPSBpZGVfYnVpbGRfc2dsaXN0KGRyaXZlLCBycSk7Ci0KIAkvKgogCSAqIEVuc3VyZSB0aGF0IHdlIGhhdmUgdGhlIHJpZ2h0IGludGVycnVwdCByb3V0ZWQuCiAJICovCkBAIC0zNDYsNyArMzQzLDcgQEAKIAkgKiBUZWxsIHRoZSBETUEgZW5naW5lIGFib3V0IHRoZSBTRyB0YWJsZSBhbmQKIAkgKiBkYXRhIGRpcmVjdGlvbi4KIAkgKi8KLQlzZXRfZG1hX3NnKGVjLT5kbWEsIGh3aWYtPnNnX3RhYmxlLCBod2lmLT5zZ19uZW50cyk7CisJc2V0X2RtYV9zZyhlYy0+ZG1hLCBod2lmLT5zZ190YWJsZSwgY21kLT5zZ19uZW50cyk7CiAJc2V0X2RtYV9tb2RlKGVjLT5kbWEsIGRtYV9tb2RlKTsKIAogCWRyaXZlLT53YWl0aW5nX2Zvcl9kbWEgPSAxOwpAQCAtMzU0LDEyICszNTEsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpY3NpZGVfZG1hX2V4ZWNfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggY21kKQotewotCS8qIGlzc3VlIGNtZCB0byBkcml2ZSAqLwotCWlkZV9leGVjdXRlX2NvbW1hbmQoZHJpdmUsIGNtZCwgaWRlX2RtYV9pbnRyLCAyICogV0FJVF9DTUQsIE5VTEwpOwotfQotCiBzdGF0aWMgaW50IGljc2lkZV9kbWFfdGVzdF9pcnEoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKQEAgLTM4Myw3ICszNzQsNiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBpY3NpZGVfdjZfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IGljc2lkZV9kbWFfaG9zdF9zZXQsCiAJLmRtYV9zZXR1cAkJPSBpY3NpZGVfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gaWNzaWRlX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0CQk9IGljc2lkZV9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gaWNzaWRlX2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBpY3NpZGVfZG1hX3Rlc3RfaXJxLApAQCAtNDE5LDYgKzQwOSwxMCBAQAogCWh3LT5jaGlwc2V0ID0gaWRlX2Fjb3JuOwogfQogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gaWNzaWRlX3Y1X3BvcnRfaW5mbyA9IHsKKwkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfTk9fRE1BLAorfTsKKwogc3RhdGljIGludCBfX2RldmluaXQKIGljc2lkZV9yZWdpc3Rlcl92NShzdHJ1Y3QgaWNzaWRlX3N0YXRlICpzdGF0ZSwgc3RydWN0IGV4cGFuc2lvbl9jYXJkICplYykKIHsKQEAgLTQ0NSw3ICs0MzksNyBAQAogCiAJaWNzaWRlX3NldHVwX3BvcnRzKCZodywgYmFzZSwgJmljc2lkZV9jYXJkaW5mb192NSwgZWMpOwogCi0JaG9zdCA9IGlkZV9ob3N0X2FsbG9jKE5VTEwsIGh3cyk7CisJaG9zdCA9IGlkZV9ob3N0X2FsbG9jKCZpY3NpZGVfdjVfcG9ydF9pbmZvLCBod3MpOwogCWlmIChob3N0ID09IE5VTEwpCiAJCXJldHVybiAtRU5PREVWOwogCkBAIC00NTMsNyArNDQ3LDcgQEAKIAogCWVjYXJkX3NldF9kcnZkYXRhKGVjLCBzdGF0ZSk7CiAKLQlyZXQgPSBpZGVfaG9zdF9yZWdpc3Rlcihob3N0LCBOVUxMLCBod3MpOworCXJldCA9IGlkZV9ob3N0X3JlZ2lzdGVyKGhvc3QsICZpY3NpZGVfdjVfcG9ydF9pbmZvLCBod3MpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2ZyZWU7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS00ZHJpdmVzLmMgYi9kcml2ZXJzL2lkZS9pZGUtNGRyaXZlcy5jCmluZGV4IDllODViMWUuLjc4YWNhNzUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS00ZHJpdmVzLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLTRkcml2ZXMuYwpAQCAtMjMsNyArMjMsOCBAQAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gaWRlXzRkcml2ZXNfcG9ydF9pbmZvID0gewogCS5wb3J0X29wcwkJPSAmaWRlXzRkcml2ZXNfcG9ydF9vcHMsCi0JLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX1NFUklBTElaRSB8IElERV9IRkxBR19OT19ETUEsCisJLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX1NFUklBTElaRSB8IElERV9IRkxBR19OT19ETUEgfAorCQkJCSAgSURFX0hGTEFHXzREUklWRVMsCiB9OwogCiBzdGF0aWMgaW50IF9faW5pdCBpZGVfNGRyaXZlc19pbml0KHZvaWQpCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jIGIvZHJpdmVycy9pZGUvaWRlLWFjcGkuYwppbmRleCA1YjcwNGYxLi4xMmY0MzY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtYWNwaS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1hY3BpLmMKQEAgLTMwNCw3ICszMDQsNyBAQAogCS8qIHNlbmQgYWxsIHRhc2tmaWxlIHJlZ2lzdGVycyAoMHgxZjEtMHgxZjcpICppbip0aGF0Km9yZGVyKiAqLwogCWZvciAoaXggPSAwOyBpeCA8IGd0Zl9jb3VudDsgaXgrKykgewogCQl1OCAqZ3RmID0gKHU4ICopKGd0Zl9hZGRyZXNzICsgaXggKiBSRUdTX1BFUl9HVEYpOwotCQlpZGVfdGFza190IHRhc2s7CisJCXN0cnVjdCBpZGVfY21kIGNtZDsKIAogCQlERUJQUklOVCgiKDB4MWYxLTFmNyk6ICIKIAkJCSAiaGV4OiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLApAQCAtMzE3LDExICszMTcsMTEgQEAKIAkJfQogCiAJCS8qIGNvbnZlcnQgR1RGIHRvIHRhc2tmaWxlICovCi0JCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKGlkZV90YXNrX3QpKTsKLQkJbWVtY3B5KCZ0YXNrLnRmX2FycmF5WzddLCBndGYsIFJFR1NfUEVSX0dURik7Ci0JCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOworCQltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCQltZW1jcHkoJmNtZC50Zl9hcnJheVs3XSwgZ3RmLCBSRUdTX1BFUl9HVEYpOworCQljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwogCi0JCWVyciA9IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmdGFzayk7CisJCWVyciA9IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmY21kKTsKIAkJaWYgKGVycikgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaWRlX25vX2RhdGFfdGFza2ZpbGUgZmFpbGVkOiAldVxuIiwKIAkJCQkJX19mdW5jX18sIGVycik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtYXRhcGkuYyBiL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jCmluZGV4IDZhZGM1YjQuLjJmYjVkMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1hdGFwaS5jCkBAIC0zMDIsMTYgKzMwMiwxNiBAQAogCiB2b2lkIGlkZV9yZWFkX2Jjb3VudF9hbmRfaXJlYXNvbihpZGVfZHJpdmVfdCAqZHJpdmUsIHUxNiAqYmNvdW50LCB1OCAqaXJlYXNvbikKIHsKLQlpZGVfdGFza190IHRhc2s7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCi0JbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOwotCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU5fTEJBSCB8IElERV9URkxBR19JTl9MQkFNIHwKLQkJCUlERV9URkxBR19JTl9OU0VDVDsKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCWNtZC50Zl9mbGFncyA9IElERV9URkxBR19JTl9MQkFIIHwgSURFX1RGTEFHX0lOX0xCQU0gfAorCQkgICAgICAgSURFX1RGTEFHX0lOX05TRUNUOwogCi0JZHJpdmUtPmh3aWYtPnRwX29wcy0+dGZfcmVhZChkcml2ZSwgJnRhc2spOworCWRyaXZlLT5od2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsICZjbWQpOwogCi0JKmJjb3VudCA9ICh0YXNrLnRmLmxiYWggPDwgOCkgfCB0YXNrLnRmLmxiYW07Ci0JKmlyZWFzb24gPSB0YXNrLnRmLm5zZWN0ICYgMzsKKwkqYmNvdW50ID0gKGNtZC50Zi5sYmFoIDw8IDgpIHwgY21kLnRmLmxiYW07CisJKmlyZWFzb24gPSBjbWQudGYubnNlY3QgJiAzOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3JlYWRfYmNvdW50X2FuZF9pcmVhc29uKTsKIApAQCAtMzM2LDExICszMzYsNiBAQAogCXRpbWVvdXQgPSAoZHJpdmUtPm1lZGlhID09IGlkZV9mbG9wcHkpID8gV0FJVF9GTE9QUFlfQ01ECiAJCQkJCSAgICAgICA6IFdBSVRfVEFQRV9DTUQ7CiAKLQlpZiAocGMtPmZsYWdzICYgUENfRkxBR19USU1FRE9VVCkgewotCQlkcml2ZS0+cGNfY2FsbGJhY2soZHJpdmUsIDApOwotCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0JfQotCiAJLyogQ2xlYXIgdGhlIGludGVycnVwdCAqLwogCXN0YXQgPSB0cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwogCkBAIC0zNjIsNiArMzU3LDggQEAKIAogCS8qIE5vIG1vcmUgaW50ZXJydXB0cyAqLwogCWlmICgoc3RhdCAmIEFUQV9EUlEpID09IDApIHsKKwkJaW50IHVwdG9kYXRlOworCiAJCWRlYnVnX2xvZygiUGFja2V0IGNvbW1hbmQgY29tcGxldGVkLCAlZCBieXRlcyB0cmFuc2ZlcnJlZFxuIiwKIAkJCSAgcGMtPnhmZXJyZWQpOwogCkBAIC00MDAsNyArMzk3LDIyIEBACiAJCQlkc2MgPSAxOwogCiAJCS8qIENvbW1hbmQgZmluaXNoZWQgLSBDYWxsIHRoZSBjYWxsYmFjayBmdW5jdGlvbiAqLwotCQlkcml2ZS0+cGNfY2FsbGJhY2soZHJpdmUsIGRzYyk7CisJCXVwdG9kYXRlID0gZHJpdmUtPnBjX2NhbGxiYWNrKGRyaXZlLCBkc2MpOworCisJCWlmICh1cHRvZGF0ZSA9PSAwKQorCQkJZHJpdmUtPmZhaWxlZF9wYyA9IE5VTEw7CisKKwkJaWYgKGJsa19zcGVjaWFsX3JlcXVlc3QocnEpKSB7CisJCQlycS0+ZXJyb3JzID0gMDsKKwkJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgMCwgYmxrX3JxX2J5dGVzKHJxKSk7CisJCX0gZWxzZSB7CisJCQlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpID09IDAgJiYgdXB0b2RhdGUgPD0gMCkgeworCQkJCWlmIChycS0+ZXJyb3JzID09IDApCisJCQkJCXJxLT5lcnJvcnMgPSAtRUlPOworCQkJfQorCQkJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCB1cHRvZGF0ZSA/IDAgOiAtRUlPLAorCQkJCQlpZGVfcnFfYnl0ZXMocnEpKTsKKwkJfQogCiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CkBAIC00NTgsNyArNDcwLDggQEAKIAogCQkvKiBGSVhNRTogZG9uJ3QgZG8gcGFydGlhbCBjb21wbGV0aW9ucyAqLwogCQlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9mbG9wcHkpCi0JCQlpZGVfZW5kX3JlcXVlc3QoZHJpdmUsIDEsIGRvbmUgPj4gOSk7CisJCQlpZGVfY29tcGxldGVfcnEoZHJpdmUsIDAsCisJCQkJCWRvbmUgPyBkb25lIDogaWRlX3JxX2J5dGVzKHJxKSk7CiAJfSBlbHNlCiAJCXhmZXJmdW5jKGRyaXZlLCBOVUxMLCBwYy0+Y3VyX3BvcywgYmNvdW50KTsKIApAQCAtNDcwLDM5ICs0ODMsMzIgQEAKIAkJICBycS0+Y21kWzBdLCBiY291bnQpOwogbmV4dF9pcnE6CiAJLyogQW5kIHNldCB0aGUgaW50ZXJydXB0IGhhbmRsZXIgYWdhaW4gKi8KLQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsIGlkZV9wY19pbnRyLCB0aW1lb3V0LCBOVUxMKTsKKwlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsIGlkZV9wY19pbnRyLCB0aW1lb3V0KTsKIAlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZV9wa3RjbWRfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIHUzMiB0Zl9mbGFncywgdTE2IGJjb3VudCkKK3N0YXRpYyB2b2lkIGlkZV9pbml0X3BhY2tldF9jbWQoc3RydWN0IGlkZV9jbWQgKmNtZCwgdTMyIHRmX2ZsYWdzLAorCQkJCXUxNiBiY291bnQsIHU4IGRtYSkKIHsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JaWRlX3Rhc2tfdCB0YXNrOwotCXU4IGRtYSA9IGRyaXZlLT5kbWE7Ci0KLQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7Ci0JdGFzay50Zl9mbGFncyA9IElERV9URkxBR19PVVRfTEJBSCB8IElERV9URkxBR19PVVRfTEJBTSB8Ci0JCQlJREVfVEZMQUdfT1VUX0ZFQVRVUkUgfCB0Zl9mbGFnczsKLQl0YXNrLnRmLmZlYXR1cmUgPSBkbWE7CQkvKiBVc2UgUElPL0RNQSAqLwotCXRhc2sudGYubGJhbSAgICA9IGJjb3VudCAmIDB4ZmY7Ci0JdGFzay50Zi5sYmFoICAgID0gKGJjb3VudCA+PiA4KSAmIDB4ZmY7Ci0KLQlpZGVfdGZfZHVtcChkcml2ZS0+bmFtZSwgJnRhc2sudGYpOwotCWh3aWYtPnRwX29wcy0+c2V0X2lycShod2lmLCAxKTsKLQlTRUxFQ1RfTUFTSyhkcml2ZSwgMCk7Ci0JaHdpZi0+dHBfb3BzLT50Zl9sb2FkKGRyaXZlLCAmdGFzayk7CisJY21kLT5wcm90b2NvbCAgPSBkbWEgPyBBVEFQSV9QUk9UX0RNQSA6IEFUQVBJX1BST1RfUElPOworCWNtZC0+dGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9MQkFIIHwgSURFX1RGTEFHX09VVF9MQkFNIHwKKwkJCSBJREVfVEZMQUdfT1VUX0ZFQVRVUkUgfCB0Zl9mbGFnczsKKwljbWQtPnRmLmNvbW1hbmQgPSBBVEFfQ01EX1BBQ0tFVDsKKwljbWQtPnRmLmZlYXR1cmUgPSBkbWE7CQkvKiBVc2UgUElPL0RNQSAqLworCWNtZC0+dGYubGJhbSAgICA9IGJjb3VudCAmIDB4ZmY7CisJY21kLT50Zi5sYmFoICAgID0gKGJjb3VudCA+PiA4KSAmIDB4ZmY7CiB9CiAKIHN0YXRpYyB1OCBpZGVfcmVhZF9pcmVhc29uKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfdGFza190IHRhc2s7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCi0JbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOwotCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU5fTlNFQ1Q7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU5fTlNFQ1Q7CiAKLQlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9yZWFkKGRyaXZlLCAmdGFzayk7CisJZHJpdmUtPmh3aWYtPnRwX29wcy0+dGZfcmVhZChkcml2ZSwgJmNtZCk7CiAKLQlyZXR1cm4gdGFzay50Zi5uc2VjdCAmIDM7CisJcmV0dXJuIGNtZC50Zi5uc2VjdCAmIDM7CiB9CiAKIHN0YXRpYyB1OCBpZGVfd2FpdF9pcmVhc29uKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggaXJlYXNvbikKQEAgLTU5NywxMSArNjAzLDEzIEBACiAJCX0KIAl9CiAKKwlod2lmLT5leHBpcnkgPSBleHBpcnk7CisKIAkvKiBTZXQgdGhlIGludGVycnVwdCByb3V0aW5lICovCiAJaWRlX3NldF9oYW5kbGVyKGRyaXZlLAogCQkJKGRldl9pc19pZGVjZChkcml2ZSkgPyBkcml2ZS0+aXJxX2hhbmRsZXIKIAkJCQkJICAgICA6IGlkZV9wY19pbnRyKSwKLQkJCXRpbWVvdXQsIGV4cGlyeSk7CisJCQl0aW1lb3V0KTsKIAogCS8qIEJlZ2luIERNQSwgaWYgbmVjZXNzYXJ5ICovCiAJaWYgKGRldl9pc19pZGVjZChkcml2ZSkpIHsKQEAgLTYyMSwyMyArNjI5LDMwIEBACiAJcmV0dXJuIGlkZV9zdGFydGVkOwogfQogCi1pZGVfc3RhcnRzdG9wX3QgaWRlX2lzc3VlX3BjKGlkZV9kcml2ZV90ICpkcml2ZSkKK2lkZV9zdGFydHN0b3BfdCBpZGVfaXNzdWVfcGMoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjOwogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwljb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgKmRtYV9vcHMgPSBod2lmLT5kbWFfb3BzOwogCWlkZV9leHBpcnlfdCAqZXhwaXJ5ID0gTlVMTDsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5ycTsKIAl1bnNpZ25lZCBpbnQgdGltZW91dDsKIAl1MzIgdGZfZmxhZ3M7CiAJdTE2IGJjb3VudDsKKwl1OCBkcnFfaW50ID0gISEoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX0RSUV9JTlRFUlJVUFQpOwogCiAJaWYgKGRldl9pc19pZGVjZChkcml2ZSkpIHsKIAkJdGZfZmxhZ3MgPSBJREVfVEZMQUdfT1VUX05TRUNUIHwgSURFX1RGTEFHX09VVF9MQkFMOwotCQliY291bnQgPSBpZGVfY2RfZ2V0X3hmZXJsZW4oaHdpZi0+cnEpOworCQliY291bnQgPSBpZGVfY2RfZ2V0X3hmZXJsZW4ocnEpOwogCQlleHBpcnkgPSBpZGVfY2RfZXhwaXJ5OwogCQl0aW1lb3V0ID0gQVRBUElfV0FJVF9QQzsKIAotCQlpZiAoZHJpdmUtPmRtYSkKLQkJCWRyaXZlLT5kbWEgPSAhaHdpZi0+ZG1hX29wcy0+ZG1hX3NldHVwKGRyaXZlKTsKKwkJaWYgKGRyaXZlLT5kbWEpIHsKKwkJCWlmIChpZGVfYnVpbGRfc2dsaXN0KGRyaXZlLCBjbWQpKQorCQkJCWRyaXZlLT5kbWEgPSAhZG1hX29wcy0+ZG1hX3NldHVwKGRyaXZlLCBjbWQpOworCQkJZWxzZQorCQkJCWRyaXZlLT5kbWEgPSAwOworCQl9CiAJfSBlbHNlIHsKIAkJcGMgPSBkcml2ZS0+cGM7CiAKQEAgLTY1Niw4ICs2NzEsMTIgQEAKIAkJfQogCiAJCWlmICgocGMtPmZsYWdzICYgUENfRkxBR19ETUFfT0spICYmCi0JCSAgICAgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSkKLQkJCWRyaXZlLT5kbWEgPSAhaHdpZi0+ZG1hX29wcy0+ZG1hX3NldHVwKGRyaXZlKTsKKwkJICAgICAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VU0lOR19ETUEpKSB7CisJCQlpZiAoaWRlX2J1aWxkX3NnbGlzdChkcml2ZSwgY21kKSkKKwkJCQlkcml2ZS0+ZG1hID0gIWRtYV9vcHMtPmRtYV9zZXR1cChkcml2ZSwgY21kKTsKKwkJCWVsc2UKKwkJCQlkcml2ZS0+ZG1hID0gMDsKKwkJfQogCiAJCWlmICghZHJpdmUtPmRtYSkKIAkJCXBjLT5mbGFncyAmPSB+UENfRkxBR19ETUFfT0s7CkBAIC02NjYsMTggKzY4NSwxOCBAQAogCQkJCQkJICAgICAgIDogV0FJVF9UQVBFX0NNRDsKIAl9CiAKLQlpZGVfcGt0Y21kX3RmX2xvYWQoZHJpdmUsIHRmX2ZsYWdzLCBiY291bnQpOworCWlkZV9pbml0X3BhY2tldF9jbWQoY21kLCB0Zl9mbGFncywgYmNvdW50LCBkcml2ZS0+ZG1hKTsKIAotCS8qIElzc3VlIHRoZSBwYWNrZXQgY29tbWFuZCAqLwotCWlmIChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfRFJRX0lOVEVSUlVQVCkgeworCSh2b2lkKWRvX3J3X3Rhc2tmaWxlKGRyaXZlLCBjbWQpOworCisJaWYgKGRycV9pbnQpIHsKIAkJaWYgKGRyaXZlLT5kbWEpCiAJCQlkcml2ZS0+d2FpdGluZ19mb3JfZG1hID0gMDsKLQkJaWRlX2V4ZWN1dGVfY29tbWFuZChkcml2ZSwgQVRBX0NNRF9QQUNLRVQsIGlkZV90cmFuc2Zlcl9wYywKLQkJCQkgICAgdGltZW91dCwgZXhwaXJ5KTsKLQkJcmV0dXJuIGlkZV9zdGFydGVkOwotCX0gZWxzZSB7Ci0JCWlkZV9leGVjdXRlX3BrdF9jbWQoZHJpdmUpOwotCQlyZXR1cm4gaWRlX3RyYW5zZmVyX3BjKGRyaXZlKTsKKwkJaHdpZi0+ZXhwaXJ5ID0gZXhwaXJ5OwogCX0KKworCWlkZV9leGVjdXRlX2NvbW1hbmQoZHJpdmUsIGNtZCwgaWRlX3RyYW5zZmVyX3BjLCB0aW1lb3V0KTsKKworCXJldHVybiBkcnFfaW50ID8gaWRlX3N0YXJ0ZWQgOiBpZGVfdHJhbnNmZXJfcGMoZHJpdmUpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2lzc3VlX3BjKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1jZC5jIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKaW5kZXggMjE3N2NkMS4uM2Y2MzBlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWNkLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWNkLmMKQEAgLTEwMCw4ICsxMDAsNyBAQAogewogCWludCBsb2cgPSAwOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1NFTlNFLCAiQ2FsbCAlcywgc2Vuc2Vfa2V5OiAweCV4XG4iLCBfX2Z1bmNfXywKLQkJICAgICAgc2Vuc2UtPnNlbnNlX2tleSk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1NFTlNFLCAic2Vuc2Vfa2V5OiAweCV4Iiwgc2Vuc2UtPnNlbnNlX2tleSk7CiAKIAlpZiAoIXNlbnNlIHx8ICFycSB8fCAocnEtPmNtZF9mbGFncyAmIFJFUV9RVUlFVCkpCiAJCXJldHVybiAwOwpAQCAtMTUxLDEzICsxNTAsMTIgQEAKIAl1bnNpZ25lZCBsb25nIGJpb19zZWN0b3JzOwogCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1NFTlNFLCAiQ2FsbCAlcywgZXJyb3JfY29kZTogMHgleCwgIgotCQkJInNlbnNlX2tleTogMHgleFxuIiwgX19mdW5jX18sIHNlbnNlLT5lcnJvcl9jb2RlLAotCQkJc2Vuc2UtPnNlbnNlX2tleSk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1NFTlNFLCAiZXJyb3JfY29kZTogMHgleCwgc2Vuc2Vfa2V5OiAweCV4IiwKKwkJCQkgICAgIHNlbnNlLT5lcnJvcl9jb2RlLCBzZW5zZS0+c2Vuc2Vfa2V5KTsKIAogCWlmIChmYWlsZWRfY29tbWFuZCkKLQkJaWRlX2RlYnVnX2xvZyhJREVfREJHX1NFTlNFLCAiJXM6IGZhaWxlZCBjbWQ6IDB4JXhcbiIsCi0JCQkJX19mdW5jX18sIGZhaWxlZF9jb21tYW5kLT5jbWRbMF0pOworCQlpZGVfZGVidWdfbG9nKElERV9EQkdfU0VOU0UsICJmYWlsZWQgY21kOiAweCV4IiwKKwkJCQkJICAgICBmYWlsZWRfY29tbWFuZC0+Y21kWzBdKTsKIAogCWlmICghY2Ryb21fbG9nX3NlbnNlKGRyaXZlLCBmYWlsZWRfY29tbWFuZCwgc2Vuc2UpKQogCQlyZXR1cm47CkBAIC0yMTUsOSArMjEzLDkgQEAKIAkJCQkgICAgICBzdHJ1Y3QgcmVxdWVzdCAqZmFpbGVkX2NvbW1hbmQpCiB7CiAJc3RydWN0IGNkcm9tX2luZm8gKmluZm8JCT0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCXN0cnVjdCByZXF1ZXN0ICpycQkJPSAmaW5mby0+cmVxdWVzdF9zZW5zZV9yZXF1ZXN0OworCXN0cnVjdCByZXF1ZXN0ICpycQkJPSAmZHJpdmUtPnJlcXVlc3Rfc2Vuc2VfcnE7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfU0VOU0UsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1NFTlNFLCAiZW50ZXIiKTsKIAogCWlmIChzZW5zZSA9PSBOVUxMKQogCQlzZW5zZSA9ICZpbmZvLT5zZW5zZV9kYXRhOwpAQCAtMjM5LDggKzIzNyw4IEBACiAJcnEtPmJ1ZmZlciA9ICh2b2lkICopIGZhaWxlZF9jb21tYW5kOwogCiAJaWYgKGZhaWxlZF9jb21tYW5kKQotCQlpZGVfZGVidWdfbG9nKElERV9EQkdfU0VOU0UsICJmYWlsZWRfY21kOiAweCV4XG4iLAotCQkJICAgICAgZmFpbGVkX2NvbW1hbmQtPmNtZFswXSk7CisJCWlkZV9kZWJ1Z19sb2coSURFX0RCR19TRU5TRSwgImZhaWxlZF9jbWQ6IDB4JXgiLAorCQkJCQkgICAgIGZhaWxlZF9jb21tYW5kLT5jbWRbMF0pOwogCiAJZHJpdmUtPmh3aWYtPnJxID0gTlVMTDsKIApAQCAtMjUyLDkgKzI1MCw4IEBACiAJc3RydWN0IHJlcXVlc3QgKnJxID0gZHJpdmUtPmh3aWYtPnJxOwogCWludCBuc2VjdG9ycyA9IHJxLT5oYXJkX2N1cl9zZWN0b3JzOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzLCBjbWQ6IDB4JXgsIHVwdG9kYXRlOiAweCV4LCAiCi0JCSAgICAgICJuc2VjdG9yczogJWRcbiIsIF9fZnVuY19fLCBycS0+Y21kWzBdLCB1cHRvZGF0ZSwKLQkJICAgICAgbnNlY3RvcnMpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiY21kOiAweCV4LCB1cHRvZGF0ZTogMHgleCwgbnNlY3RvcnM6ICVkIiwKKwkJCQkgICAgcnEtPmNtZFswXSwgdXB0b2RhdGUsIG5zZWN0b3JzKTsKIAogCWlmIChibGtfc2Vuc2VfcmVxdWVzdChycSkgJiYgdXB0b2RhdGUpIHsKIAkJLyoKQEAgLTI3NSw4ICsyNzIsOCBAQAogCQkJICogbm93IGVuZCB0aGUgZmFpbGVkIHJlcXVlc3QKIAkJCSAqLwogCQkJaWYgKGJsa19mc19yZXF1ZXN0KGZhaWxlZCkpIHsKLQkJCQlpZiAoaWRlX2VuZF9kZXF1ZXVlZF9yZXF1ZXN0KGRyaXZlLCBmYWlsZWQsIDAsCi0JCQkJCQlmYWlsZWQtPmhhcmRfbnJfc2VjdG9ycykpCisJCQkJaWYgKGlkZV9lbmRfcnEoZHJpdmUsIGZhaWxlZCwgLUVJTywKKwkJCQkJCWZhaWxlZC0+aGFyZF9ucl9zZWN0b3JzIDw8IDkpKQogCQkJCQlCVUcoKTsKIAkJCX0gZWxzZSB7CiAJCQkJaWYgKGJsa19lbmRfcmVxdWVzdChmYWlsZWQsIC1FSU8sCkBAIC0yOTUsMTAgKzI5MiwxMyBAQAogCWlmICghbnNlY3RvcnMpCiAJCW5zZWN0b3JzID0gMTsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiRXhpdCAlcywgdXB0b2RhdGU6IDB4JXgsIG5zZWN0b3JzOiAlZFxuIiwKLQkJICAgICAgX19mdW5jX18sIHVwdG9kYXRlLCBuc2VjdG9ycyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJ1cHRvZGF0ZTogMHgleCwgbnNlY3RvcnM6ICVkIiwKKwkJCQkgICAgdXB0b2RhdGUsIG5zZWN0b3JzKTsKIAotCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgdXB0b2RhdGUsIG5zZWN0b3JzKTsKKwlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpID09IDAgJiYgdXB0b2RhdGUgPD0gMCAmJiBycS0+ZXJyb3JzID09IDApCisJCXJxLT5lcnJvcnMgPSAtRUlPOworCisJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCB1cHRvZGF0ZSA/IDAgOiAtRUlPLCBuc2VjdG9ycyA8PCA5KTsKIH0KIAogc3RhdGljIHZvaWQgaWRlX2R1bXBfc3RhdHVzX25vX3NlbnNlKGlkZV9kcml2ZV90ICpkcml2ZSwgY29uc3QgY2hhciAqbXNnLCB1OCBzdCkKQEAgLTMzOCw5ICszMzgsMTAgQEAKIAkJcmV0dXJuIDE7CiAJfQogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1JRLCAiJXM6IHN0YXQ6IDB4JXgsIGdvb2Rfc3RhdDogMHgleCwgIgotCQkgICAgICAicnEtPmNtZFswXTogMHgleCwgcnEtPmNtZF90eXBlOiAweCV4LCBlcnI6IDB4JXhcbiIsCi0JCSAgICAgIF9fZnVuY19fLCBzdGF0LCBnb29kX3N0YXQsIHJxLT5jbWRbMF0sIHJxLT5jbWRfdHlwZSwgZXJyKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUlEsICJzdGF0OiAweCV4LCBnb29kX3N0YXQ6IDB4JXgsIGNtZFswXTogMHgleCwgIgorCQkJCSAgInJxLT5jbWRfdHlwZTogMHgleCwgZXJyOiAweCV4IiwKKwkJCQkgIHN0YXQsIGdvb2Rfc3RhdCwgcnEtPmNtZFswXSwgcnEtPmNtZF90eXBlLAorCQkJCSAgZXJyKTsKIAogCWlmIChibGtfc2Vuc2VfcmVxdWVzdChycSkpIHsKIAkJLyoKQEAgLTUzMCw4ICs1MzEsNyBAQAogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlcywgaXJlYXNvbjogMHgleCwgcnc6IDB4JXhcbiIsCi0JCSAgICAgIF9fZnVuY19fLCBpcmVhc29uLCBydyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJpcmVhc29uOiAweCV4LCBydzogMHgleCIsIGlyZWFzb24sIHJ3KTsKIAogCS8qCiAJICogaXJlYXNvbiA9PSAwOiB0aGUgZHJpdmUgd2FudHMgdG8gcmVjZWl2ZSBkYXRhIGZyb20gdXMKQEAgLTU3Miw3ICs1NzIsNyBAQAogICovCiBzdGF0aWMgaW50IGlkZV9jZF9jaGVja190cmFuc2Zlcl9zaXplKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IGxlbikKIHsKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXMsIGxlbjogJWRcbiIsIF9fZnVuY19fLCBsZW4pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAibGVuOiAlZCIsIGxlbik7CiAKIAlpZiAoKGxlbiAlIFNFQ1RPUl9TSVpFKSA9PSAwKQogCQlyZXR1cm4gMDsKQEAgLTU5NCw4ICs1OTQsNyBAQAogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVfY2RfcHJlcGFyZV9yd19yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwKIAkJCQkJCSBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1JRLCAiQ2FsbCAlczogcnEtPmNtZF9mbGFnczogMHgleFxuIiwgX19mdW5jX18sCi0JCSAgICAgIHJxLT5jbWRfZmxhZ3MpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19SUSwgInJxLT5jbWRfZmxhZ3M6IDB4JXgiLCBycS0+Y21kX2ZsYWdzKTsKIAogCWlmIChycV9kYXRhX2RpcihycSkgPT0gUkVBRCkgewogCQl1bnNpZ25lZCBzaG9ydCBzZWN0b3JzX3Blcl9mcmFtZSA9CkBAIC02MzksNyArNjM4LDcgQEAKIHN0YXRpYyB2b2lkIGlkZV9jZF9yZXN0b3JlX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgImVudGVyIik7CiAKIAlpZiAocnEtPmJ1ZmZlciAhPSBiaW9fZGF0YShycS0+YmlvKSkgewogCQlzZWN0b3JfdCBuID0KQEAgLTY1OCw4ICs2NTcsNyBAQAogCiBzdGF0aWMgdm9pZCBpZGVfY2RfcmVxdWVzdF9zZW5zZV9maXh1cChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXMsIHJxLT5jbWRbMF06IDB4JXhcbiIsCi0JCSAgICAgIF9fZnVuY19fLCBycS0+Y21kWzBdKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgInJxLT5jbWRbMF06IDB4JXgiLCBycS0+Y21kWzBdKTsKIAogCS8qCiAJICogU29tZSBvZiB0aGUgdHJhaWxpbmcgcmVxdWVzdCBzZW5zZSBmaWVsZHMgYXJlIG9wdGlvbmFsLApAQCAtNjg2LDkgKzY4NCw5IEBACiAJaWYgKCFzZW5zZSkKIAkJc2Vuc2UgPSAmbG9jYWxfc2Vuc2U7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICJDYWxsICVzLCBjbWRbMF06IDB4JXgsIHdyaXRlOiAweCV4LCAiCi0JCSAgICAgICJ0aW1lb3V0OiAlZCwgY21kX2ZsYWdzOiAweCV4XG4iLCBfX2Z1bmNfXywgY21kWzBdLCB3cml0ZSwKLQkJICAgICAgdGltZW91dCwgY21kX2ZsYWdzKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICJjbWRbMF06IDB4JXgsIHdyaXRlOiAweCV4LCB0aW1lb3V0OiAlZCwgIgorCQkJCSAgImNtZF9mbGFnczogMHgleCIsCisJCQkJICBjbWRbMF0sIHdyaXRlLCB0aW1lb3V0LCBjbWRfZmxhZ3MpOwogCiAJLyogc3RhcnQgb2YgcmV0cnkgbG9vcCAqLwogCWRvIHsKQEAgLTc3Miw4ICs3NzAsOCBAQAogCXUxNiBsZW47CiAJdTggaXJlYXNvbjsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QQywgIkNhbGwgJXMsIHJxLT5jbWRbMF06IDB4JXgsIHdyaXRlOiAweCV4XG4iLAotCQkgICAgICBfX2Z1bmNfXywgcnEtPmNtZFswXSwgd3JpdGUpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QQywgImNtZFswXTogMHgleCwgd3JpdGU6IDB4JXgiLAorCQkJCSAgcnEtPmNtZFswXSwgd3JpdGUpOwogCiAJLyogY2hlY2sgZm9yIGVycm9ycyAqLwogCWRtYSA9IGRyaXZlLT5kbWE7CkBAIC03OTUsMTAgKzc5MywxMSBAQAogCQlpZiAoZG1hX2Vycm9yKQogCQkJcmV0dXJuIGlkZV9lcnJvcihkcml2ZSwgImRtYSBlcnJvciIsIHN0YXQpOwogCQlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpKSB7Ci0JCQlpZGVfZW5kX3JlcXVlc3QoZHJpdmUsIDEsIHJxLT5ucl9zZWN0b3JzKTsKKwkJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgMCwgcnEtPm5yX3NlY3RvcnMKKwkJCQk/IChycS0+bnJfc2VjdG9ycyA8PCA5KSA6IGlkZV9ycV9ieXRlcyhycSkpOwogCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCQl9IGVsc2UgaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9BVEFfUEMgJiYgIXJxLT5iaW8pIHsKLQkJCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgMSwgMSk7CisJCQlpZGVfY29tcGxldGVfcnEoZHJpdmUsIDAsIDUxMik7CiAJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJCX0KIAkJZ290byBlbmRfcmVxdWVzdDsKQEAgLTgxMCw4ICs4MDksOCBAQAogCWlmICh0aGlzbGVuID4gbGVuKQogCQl0aGlzbGVuID0gbGVuOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1BDLCAiJXM6IERSUTogc3RhdDogMHgleCwgdGhpc2xlbjogJWRcbiIsCi0JCSAgICAgIF9fZnVuY19fLCBzdGF0LCB0aGlzbGVuKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICJEUlE6IHN0YXQ6IDB4JXgsIHRoaXNsZW46ICVkIiwKKwkJCQkgIHN0YXQsIHRoaXNsZW4pOwogCiAJLyogSWYgRFJRIGlzIGNsZWFyLCB0aGUgY29tbWFuZCBoYXMgY29tcGxldGVkLiAqLwogCWlmICgoc3RhdCAmIEFUQV9EUlEpID09IDApIHsKQEAgLTg3Niw4ICs4NzUsOSBAQAogCQl4ZmVyZnVuYyA9IGh3aWYtPnRwX29wcy0+aW5wdXRfZGF0YTsKIAl9CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICIlczogZGF0YSB0cmFuc2ZlciwgcnEtPmNtZF90eXBlOiAweCV4LCAiCi0JCSAgICAgICJpcmVhc29uOiAweCV4XG4iLCBfX2Z1bmNfXywgcnEtPmNtZF90eXBlLCBpcmVhc29uKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICJkYXRhIHRyYW5zZmVyLCBycS0+Y21kX3R5cGU6IDB4JXgsICIKKwkJCQkgICJpcmVhc29uOiAweCV4IiwKKwkJCQkgIHJxLT5jbWRfdHlwZSwgaXJlYXNvbik7CiAKIAkvKiB0cmFuc2ZlciBkYXRhICovCiAJd2hpbGUgKHRoaXNsZW4gPiAwKSB7CkBAIC05NTksNyArOTU5LDggQEAKIAkJCWV4cGlyeSA9IGlkZV9jZF9leHBpcnk7CiAJfQogCi0JaWRlX3NldF9oYW5kbGVyKGRyaXZlLCBjZHJvbV9uZXdwY19pbnRyLCB0aW1lb3V0LCBleHBpcnkpOworCWh3aWYtPmV4cGlyeSA9IGV4cGlyeTsKKwlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsIGNkcm9tX25ld3BjX2ludHIsIHRpbWVvdXQpOwogCXJldHVybiBpZGVfc3RhcnRlZDsKIAogZW5kX3JlcXVlc3Q6CkBAIC05ODgsOSArOTg5LDkgQEAKIAl1bnNpZ25lZCBzaG9ydCBzZWN0b3JzX3Blcl9mcmFtZSA9CiAJCXF1ZXVlX2hhcmRzZWN0X3NpemUoZHJpdmUtPnF1ZXVlKSA+PiBTRUNUT1JfQklUUzsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19SUSwgIkNhbGwgJXMsIHJxLT5jbWRbMF06IDB4JXgsIHdyaXRlOiAweCV4LCAiCi0JCSAgICAgICJzZWNzX3Blcl9mcmFtZTogJXVcbiIsCi0JCSAgICAgIF9fZnVuY19fLCBycS0+Y21kWzBdLCB3cml0ZSwgc2VjdG9yc19wZXJfZnJhbWUpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19SUSwgInJxLT5jbWRbMF06IDB4JXgsIHdyaXRlOiAweCV4LCAiCisJCQkJICAic2Vjc19wZXJfZnJhbWU6ICV1IiwKKwkJCQkgIHJxLT5jbWRbMF0sIHdyaXRlLCBzZWN0b3JzX3Blcl9mcmFtZSk7CiAKIAlpZiAod3JpdGUpIHsKIAkJLyogZGlzayBoYXMgYmVjb21lIHdyaXRlIHByb3RlY3RlZCAqLwpAQCAtMTAyNiw5ICsxMDI3LDggQEAKIHN0YXRpYyB2b2lkIGNkcm9tX2RvX2Jsb2NrX3BjKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1BDLCAiQ2FsbCAlcywgcnEtPmNtZFswXTogMHgleCwgIgotCQkgICAgICAicnEtPmNtZF90eXBlOiAweCV4XG4iLCBfX2Z1bmNfXywgcnEtPmNtZFswXSwKLQkJICAgICAgcnEtPmNtZF90eXBlKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUEMsICJycS0+Y21kWzBdOiAweCV4LCBycS0+Y21kX3R5cGU6IDB4JXgiLAorCQkJCSAgcnEtPmNtZFswXSwgcnEtPmNtZF90eXBlKTsKIAogCWlmIChibGtfcGNfcmVxdWVzdChycSkpCiAJCXJxLT5jbWRfZmxhZ3MgfD0gUkVRX1FVSUVUOwpAQCAtMTA2NywxMCArMTA2NywxMyBAQAogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVfY2RfZG9fcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKIAkJCQkJc2VjdG9yX3QgYmxvY2spCiB7Ci0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1JRLCAiQ2FsbCAlcywgcnEtPmNtZFswXTogMHgleCwgIgotCQkgICAgICAicnEtPmNtZF90eXBlOiAweCV4LCBibG9jazogJWxsdVxuIiwKLQkJICAgICAgX19mdW5jX18sIHJxLT5jbWRbMF0sIHJxLT5jbWRfdHlwZSwKLQkJICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylibG9jayk7CisJc3RydWN0IGlkZV9jbWQgY21kOworCisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1JRLCAiY21kOiAweCV4LCBibG9jazogJWxsdSIsCisJCQkJICBycS0+Y21kWzBdLCAodW5zaWduZWQgbG9uZyBsb25nKWJsb2NrKTsKKworCWlmIChkcml2ZS0+ZGVidWdfbWFzayAmIElERV9EQkdfUlEpCisJCWJsa19kdW1wX3JxX2ZsYWdzKHJxLCAiaWRlX2NkX2RvX3JlcXVlc3QiKTsKIAogCWlmIChibGtfZnNfcmVxdWVzdChycSkpIHsKIAkJaWYgKGNkcm9tX3N0YXJ0X3J3KGRyaXZlLCBycSkgPT0gaWRlX3N0b3BwZWQpCkBAIC0xMDk0LDcgKzEwOTcsMTQgQEAKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCX0KIAotCXJldHVybiBpZGVfaXNzdWVfcGMoZHJpdmUpOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisKKwlpZiAocnFfZGF0YV9kaXIocnEpKQorCQljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX1dSSVRFOworCisJY21kLnJxID0gcnE7CisKKwlyZXR1cm4gaWRlX2lzc3VlX3BjKGRyaXZlLCAmY21kKTsKIH0KIAogLyoKQEAgLTExMTksNyArMTEyOSw3IEBACiAJc3RydWN0IGNkcm9tX2RldmljZV9pbmZvICpjZGkgPSAmaW5mby0+ZGV2aW5mbzsKIAl1bnNpZ25lZCBjaGFyIGNtZFtCTEtfTUFYX0NEQl07CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgImVudGVyIik7CiAKIAltZW1zZXQoY21kLCAwLCBCTEtfTUFYX0NEQik7CiAJY21kWzBdID0gR1BDTURfVEVTVF9VTklUX1JFQURZOwpAQCAtMTE0Nyw3ICsxMTU3LDcgQEAKIAl1bnNpZ25lZCBsZW4gPSBzaXplb2YoY2FwYnVmKTsKIAl1MzIgYmxvY2tsZW47CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgImVudGVyIik7CiAKIAltZW1zZXQoY21kLCAwLCBCTEtfTUFYX0NEQik7CiAJY21kWzBdID0gR1BDTURfUkVBRF9DRFZEX0NBUEFDSVRZOwpAQCAtMTE3OSw4ICsxMTg5LDggQEAKIAkqY2FwYWNpdHkgPSAxICsgYmUzMl90b19jcHUoY2FwYnVmLmxiYSk7CiAJKnNlY3RvcnNfcGVyX2ZyYW1lID0gYmxvY2tsZW4gPj4gU0VDVE9SX0JJVFM7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICIlczogY2FwOiAlbHUsIHNlY3RvcnNfcGVyX2ZyYW1lOiAlbHVcbiIsCi0JCSAgICAgIF9fZnVuY19fLCAqY2FwYWNpdHksICpzZWN0b3JzX3Blcl9mcmFtZSk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAiY2FwOiAlbHUsIHNlY3RvcnNfcGVyX2ZyYW1lOiAlbHUiLAorCQkJCSAgICAgKmNhcGFjaXR5LCAqc2VjdG9yc19wZXJfZnJhbWUpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTkxLDcgKzEyMDEsNyBAQAogewogCXVuc2lnbmVkIGNoYXIgY21kW0JMS19NQVhfQ0RCXTsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiZW50ZXIiKTsKIAogCW1lbXNldChjbWQsIDAsIEJMS19NQVhfQ0RCKTsKIApAQCAtMTIyMSw3ICsxMjMxLDcgQEAKIAlsb25nIGxhc3Rfd3JpdHRlbjsKIAl1bnNpZ25lZCBsb25nIHNlY3RvcnNfcGVyX2ZyYW1lID0gU0VDVE9SU19QRVJfRlJBTUU7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgImVudGVyIik7CiAKIAlpZiAodG9jID09IE5VTEwpIHsKIAkJLyogdHJ5IHRvIGFsbG9jYXRlIHNwYWNlICovCkBAIC0xMzgzLDcgKzEzOTMsNyBAQAogCXN0cnVjdCBwYWNrZXRfY29tbWFuZCBjZ2M7CiAJaW50IHN0YXQsIGF0dGVtcHRzID0gMywgc2l6ZSA9IEFUQVBJX0NBUEFCSUxJVElFU19QQUdFX1NJWkU7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgImVudGVyIik7CiAKIAlpZiAoKGRyaXZlLT5hdGFwaV9mbGFncyAmIElERV9BRkxBR19GVUxMX0NBUFNfUEFHRSkgPT0gMCkKIAkJc2l6ZSAtPSBBVEFQSV9DQVBBQklMSVRJRVNfUEFHRV9QQURfU0laRTsKQEAgLTE0MDMsNyArMTQxMyw3IEBACiAJc3RydWN0IGNkcm9tX2luZm8gKmNkID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXUxNiBjdXJzcGVlZCwgbWF4c3BlZWQ7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgImVudGVyIik7CiAKIAlpZiAoZHJpdmUtPmF0YXBpX2ZsYWdzICYgSURFX0FGTEFHX0xFX1NQRUVEX0ZJRUxEUykgewogCQljdXJzcGVlZCA9IGxlMTZfdG9fY3B1cCgoX19sZTE2ICopJmJ1Zls4ICsgMTRdKTsKQEAgLTE0MTMsOCArMTQyMyw4IEBACiAJCW1heHNwZWVkID0gYmUxNl90b19jcHVwKChfX2JlMTYgKikmYnVmWzggKyA4XSk7CiAJfQogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAiJXM6IGN1cnNwZWVkOiAldSwgbWF4c3BlZWQ6ICV1XG4iLAotCQkgICAgICBfX2Z1bmNfXywgY3Vyc3BlZWQsIG1heHNwZWVkKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICJjdXJzcGVlZDogJXUsIG1heHNwZWVkOiAldSIsCisJCQkJICAgICBjdXJzcGVlZCwgbWF4c3BlZWQpOwogCiAJY2QtPmN1cnJlbnRfc3BlZWQgPSAoY3Vyc3BlZWQgKyAoMTc2LzIpKSAvIDE3NjsKIAljZC0+bWF4X3NwZWVkID0gKG1heHNwZWVkICsgKDE3Ni8yKSkgLyAxNzY7CkBAIC0xNDQ4LDcgKzE0NTgsNyBAQAogCXN0cnVjdCBjZHJvbV9pbmZvICppbmZvID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBjZHJvbV9kZXZpY2VfaW5mbyAqZGV2aW5mbyA9ICZpbmZvLT5kZXZpbmZvOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAiQ2FsbCAlcywgbnNsb3RzOiAlZFxuIiwgX19mdW5jX18sIG5zbG90cyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAibnNsb3RzOiAlZCIsIG5zbG90cyk7CiAKIAlkZXZpbmZvLT5vcHMgPSAmaWRlX2Nkcm9tX2RvcHM7CiAJZGV2aW5mby0+c3BlZWQgPSBpbmZvLT5jdXJyZW50X3NwZWVkOwpAQCAtMTQ3MSw5ICsxNDgxLDggQEAKIAltZWNodHlwZV90IG1lY2h0eXBlOwogCWludCBuc2xvdHMgPSAxOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAiQ2FsbCAlcywgZHJpdmUtPm1lZGlhOiAweCV4LCAiCi0JCSAgICAgICJkcml2ZS0+YXRhcGlfZmxhZ3M6IDB4JWx4XG4iLCBfX2Z1bmNfXywgZHJpdmUtPm1lZGlhLAotCQkgICAgICBkcml2ZS0+YXRhcGlfZmxhZ3MpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QUk9CRSwgIm1lZGlhOiAweCV4LCBhdGFwaV9mbGFnczogMHglbHgiLAorCQkJCSAgICAgZHJpdmUtPm1lZGlhLCBkcml2ZS0+YXRhcGlfZmxhZ3MpOwogCiAJY2RpLT5tYXNrID0gKENEQ19DRF9SIHwgQ0RDX0NEX1JXIHwgQ0RDX0RWRCB8IENEQ19EVkRfUiB8CiAJCSAgICAgQ0RDX0RWRF9SQU0gfCBDRENfU0VMRUNUX0RJU0MgfCBDRENfUExBWV9BVURJTyB8CkBAIC0xNzU0LDcgKzE3NjMsNyBAQAogCWNoYXIgKmZ3X3JldiA9IChjaGFyICopJmlkW0FUQV9JRF9GV19SRVZdOwogCWludCBuc2xvdHM7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAiZW50ZXIiKTsKIAogCWJsa19xdWV1ZV9wcmVwX3JxKGRyaXZlLT5xdWV1ZSwgaWRlX2Nkcm9tX3ByZXBfZm4pOwogCWJsa19xdWV1ZV9kbWFfYWxpZ25tZW50KGRyaXZlLT5xdWV1ZSwgMzEpOwpAQCAtMTc5Nyw3ICsxODA2LDcgQEAKIHsKIAlzdHJ1Y3QgY2Ryb21faW5mbyAqaW5mbyA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiZW50ZXIiKTsKIAogCWlkZV9wcm9jX3VucmVnaXN0ZXJfZHJpdmVyKGRyaXZlLCBpbmZvLT5kcml2ZXIpOwogCWRldmljZV9kZWwoJmluZm8tPmRldik7CkBAIC0xODE1LDcgKzE4MjQsNyBAQAogCWlkZV9kcml2ZV90ICpkcml2ZSA9IGluZm8tPmRyaXZlOwogCXN0cnVjdCBnZW5kaXNrICpnID0gaW5mby0+ZGlzazsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiZW50ZXIiKTsKIAogCWtmcmVlKGluZm8tPnRvYyk7CiAJaWYgKGRldmluZm8tPmhhbmRsZSA9PSBkcml2ZSkKQEAgLTE4MzksNyArMTg0OCw2IEBACiAJLnJlbW92ZQkJCT0gaWRlX2NkX3JlbW92ZSwKIAkudmVyc2lvbgkJPSBJREVDRF9WRVJTSU9OLAogCS5kb19yZXF1ZXN0CQk9IGlkZV9jZF9kb19yZXF1ZXN0LAotCS5lbmRfcmVxdWVzdAkJPSBpZGVfZW5kX3JlcXVlc3QsCiAjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCiAJLnByb2NfZW50cmllcwkJPSBpZGVfY2RfcHJvY19lbnRyaWVzLAogCS5wcm9jX2RldnNldHMJCT0gaWRlX2NkX3Byb2NfZGV2c2V0cywKQEAgLTE5NzQsOSArMTk4Miw4IEBACiAJc3RydWN0IGdlbmRpc2sgKmc7CiAJc3RydWN0IHJlcXVlc3Rfc2Vuc2Ugc2Vuc2U7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICJDYWxsICVzLCBkcml2ZS0+ZHJpdmVyX3JlcTogJXMsICIKLQkJICAgICAgImRyaXZlLT5tZWRpYTogMHgleFxuIiwgX19mdW5jX18sIGRyaXZlLT5kcml2ZXJfcmVxLAotCQkgICAgICBkcml2ZS0+bWVkaWEpOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QUk9CRSwgImRyaXZlcl9yZXE6ICVzLCBtZWRpYTogMHgleCIsCisJCQkJICAgICBkcml2ZS0+ZHJpdmVyX3JlcSwgZHJpdmUtPm1lZGlhKTsKIAogCWlmICghc3Ryc3RyKCJpZGUtY2Ryb20iLCBkcml2ZS0+ZHJpdmVyX3JlcSkpCiAJCWdvdG8gZmFpbGVkOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWNkLmggYi9kcml2ZXJzL2lkZS9pZGUtY2QuaAppbmRleCBjODc4YmZjLi4xZDk3MTAxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtY2QuaAorKysgYi9kcml2ZXJzL2lkZS9pZGUtY2QuaApAQCAtMTEsNyArMTEsNyBAQAogI2RlZmluZSBJREVDRF9ERUJVR19MT0cJCTAKIAogI2lmIElERUNEX0RFQlVHX0xPRwotI2RlZmluZSBpZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzLi4uKSBfX2lkZV9kZWJ1Z19sb2cobHZsLCBmbXQsIGFyZ3MpCisjZGVmaW5lIGlkZV9kZWJ1Z19sb2cobHZsLCBmbXQsIGFyZ3MuLi4pIF9faWRlX2RlYnVnX2xvZyhsdmwsIGZtdCwgIyMgYXJncykKICNlbHNlCiAjZGVmaW5lIGlkZV9kZWJ1Z19sb2cobHZsLCBmbXQsIGFyZ3MuLi4pIGRvIHt9IHdoaWxlICgwKQogI2VuZGlmCkBAIC05MSw4ICs5MSw2IEBACiAJICAgb24gdGhpcyBkZXZpY2UuICovCiAJc3RydWN0IHJlcXVlc3Rfc2Vuc2Ugc2Vuc2VfZGF0YTsKIAotCXN0cnVjdCByZXF1ZXN0IHJlcXVlc3Rfc2Vuc2VfcmVxdWVzdDsKLQogCXU4IG1heF9zcGVlZDsJCS8qIE1heCBzcGVlZCBvZiB0aGUgZHJpdmUuICovCiAJdTggY3VycmVudF9zcGVlZDsJLyogQ3VycmVudCBzcGVlZCBvZiB0aGUgZHJpdmUuICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1jcy5jIGIvZHJpdmVycy9pZGUvaWRlLWNzLmMKaW5kZXggZjUwMjEwZi4uOWU0N2YzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWNzLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWNzLmMKQEAgLTE1NCw2ICsxNTQsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIGlkZWNzX3BvcnRfaW5mbyA9IHsKIAkucG9ydF9vcHMJCT0gJmlkZWNzX3BvcnRfb3BzLAogCS5ob3N0X2ZsYWdzCQk9IElERV9IRkxBR19OT19ETUEsCisJLmlycV9mbGFncwkJPSBJUlFGX1NIQVJFRCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3QgaWRlX2hvc3QgKmlkZWNzX3JlZ2lzdGVyKHVuc2lnbmVkIGxvbmcgaW8sIHVuc2lnbmVkIGxvbmcgY3RsLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWRldnNldHMuYyBiL2RyaXZlcnMvaWRlL2lkZS1kZXZzZXRzLmMKaW5kZXggN2MzOTUzNC4uNWJmOTU4ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWRldnNldHMuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZGV2c2V0cy5jCkBAIC0xODMsOCArMTgzLDYgQEAKIAllcnIgPSBzZXRmdW5jKGRyaXZlLCAqKGludCAqKSZycS0+Y21kWzFdKTsKIAlpZiAoZXJyKQogCQlycS0+ZXJyb3JzID0gZXJyOwotCWVsc2UKLQkJZXJyID0gMTsKLQlpZGVfZW5kX3JlcXVlc3QoZHJpdmUsIGVyciwgMCk7CisJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCBlcnIsIGlkZV9ycV9ieXRlcyhycSkpOwogCXJldHVybiBpZGVfc3RvcHBlZDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMgYi9kcml2ZXJzL2lkZS9pZGUtZGlzay5jCmluZGV4IDgwNjc2MGQuLmNhOTM0YzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1kaXNrLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRpc2suYwpAQCAtMjgsNyArMjgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvbGVkcy5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgotI2luY2x1ZGUgPGxpbnV4L2hkcmVnLmg+CiAKICNpbmNsdWRlIDxhc20vYnl0ZW9yZGVyLmg+CiAjaW5jbHVkZSA8YXNtL2lycS5oPgpAQCAtNTMsMzMgKzUyLDI2IEBACiAJQVRBX0NNRF9XUklURV9FWFQsCiB9OwogCi1zdGF0aWMgY29uc3QgdTggaWRlX2RhdGFfcGhhc2VzW10gPSB7Ci0JVEFTS0ZJTEVfTVVMVElfSU4sCi0JVEFTS0ZJTEVfTVVMVElfT1VULAotCVRBU0tGSUxFX0lOLAotCVRBU0tGSUxFX09VVCwKLQlUQVNLRklMRV9JTl9ETUEsCi0JVEFTS0ZJTEVfT1VUX0RNQSwKLX07Ci0KLXN0YXRpYyB2b2lkIGlkZV90Zl9zZXRfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaywgdTggZG1hKQorc3RhdGljIHZvaWQgaWRlX3RmX3NldF9jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLCB1OCBkbWEpCiB7CiAJdTggaW5kZXgsIGxiYTQ4LCB3cml0ZTsKIAotCWxiYTQ4ID0gKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSA/IDIgOiAwOwotCXdyaXRlID0gKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX1dSSVRFKSA/IDEgOiAwOworCWxiYTQ4ID0gKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpID8gMiA6IDA7CisJd3JpdGUgPSAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSkgPyAxIDogMDsKIAotCWlmIChkbWEpCisJaWYgKGRtYSkgeworCQljbWQtPnByb3RvY29sID0gQVRBX1BST1RfRE1BOwogCQlpbmRleCA9IDg7Ci0JZWxzZQotCQlpbmRleCA9IGRyaXZlLT5tdWx0X2NvdW50ID8gMCA6IDQ7CisJfSBlbHNlIHsKKwkJY21kLT5wcm90b2NvbCA9IEFUQV9QUk9UX1BJTzsKKwkJaWYgKGRyaXZlLT5tdWx0X2NvdW50KSB7CisJCQljbWQtPnRmX2ZsYWdzIHw9IElERV9URkxBR19NVUxUSV9QSU87CisJCQlpbmRleCA9IDA7CisJCX0gZWxzZQorCQkJaW5kZXggPSA0OworCX0KIAotCXRhc2stPnRmLmNvbW1hbmQgPSBpZGVfcndfY21kc1tpbmRleCArIGxiYTQ4ICsgd3JpdGVdOwotCi0JaWYgKGRtYSkKLQkJaW5kZXggPSA4OyAvKiBmaXh1cCBpbmRleCAqLwotCi0JdGFzay0+ZGF0YV9waGFzZSA9IGlkZV9kYXRhX3BoYXNlc1tpbmRleCAvIDIgKyB3cml0ZV07CisJY21kLT50Zi5jb21tYW5kID0gaWRlX3J3X2NtZHNbaW5kZXggKyBsYmE0OCArIHdyaXRlXTsKIH0KIAogLyoKQEAgLTkzLDggKzg1LDggQEAKIAl1MTYgbnNlY3RvcnMJCT0gKHUxNilycS0+bnJfc2VjdG9yczsKIAl1OCBsYmE0OAkJPSAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQTQ4KTsKIAl1OCBkbWEJCQk9ICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKTsKLQlpZGVfdGFza190CQl0YXNrOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUJKnRmID0gJnRhc2sudGY7CisJc3RydWN0IGlkZV9jbWQJCWNtZDsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlCSp0ZiA9ICZjbWQudGY7CiAJaWRlX3N0YXJ0c3RvcF90CQlyYzsKIAogCWlmICgoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19MQkE0OF9ETUEpICYmIGxiYTQ4ICYmIGRtYSkgewpAQCAtMTA0LDEzICs5Niw4IEBACiAJCQlsYmE0OCA9IDA7CiAJfQogCi0JaWYgKCFkbWEpIHsKLQkJaWRlX2luaXRfc2dfY21kKGRyaXZlLCBycSk7Ci0JCWlkZV9tYXBfc2coZHJpdmUsIHJxKTsKLQl9Ci0KLQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7Ci0JdGFzay50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwogCiAJaWYgKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfTEJBKSB7CiAJCWlmIChsYmE0OCkgewpAQCAtMTI5LDcgKzExNiw3IEBACiAJCQl0Zi0+bGJhbSAgID0gKHU4KShibG9jayA+PiAgOCk7CiAJCQl0Zi0+bGJhaCAgID0gKHU4KShibG9jayA+PiAxNik7CiAKLQkJCXRhc2sudGZfZmxhZ3MgfD0gKElERV9URkxBR19MQkE0OCB8IElERV9URkxBR19IT0IpOworCQkJY21kLnRmX2ZsYWdzIHw9IChJREVfVEZMQUdfTEJBNDggfCBJREVfVEZMQUdfSE9CKTsKIAkJfSBlbHNlIHsKIAkJCXRmLT5uc2VjdCAgPSBuc2VjdG9ycyAmIDB4ZmY7CiAJCQl0Zi0+bGJhbCAgID0gYmxvY2s7CkBAIC0xNTYsMjMgKzE0MywyNyBAQAogCQl0Zi0+ZGV2aWNlID0gaGVhZDsKIAl9CiAKKwljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX0ZTOworCiAJaWYgKHJxX2RhdGFfZGlyKHJxKSkKLQkJdGFzay50Zl9mbGFncyB8PSBJREVfVEZMQUdfV1JJVEU7CisJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfV1JJVEU7CiAKLQlpZGVfdGZfc2V0X2NtZChkcml2ZSwgJnRhc2ssIGRtYSk7Ci0JaWYgKCFkbWEpCi0JCWh3aWYtPmRhdGFfcGhhc2UgPSB0YXNrLmRhdGFfcGhhc2U7Ci0JdGFzay5ycSA9IHJxOworCWlkZV90Zl9zZXRfY21kKGRyaXZlLCAmY21kLCBkbWEpOworCWNtZC5ycSA9IHJxOwogCi0JcmMgPSBkb19yd190YXNrZmlsZShkcml2ZSwgJnRhc2spOworCWlmIChkbWEgPT0gMCkgeworCQlpZGVfaW5pdF9zZ19jbWQoJmNtZCwgbnNlY3RvcnMgPDwgOSk7CisJCWlkZV9tYXBfc2coZHJpdmUsICZjbWQpOworCX0KKworCXJjID0gZG9fcndfdGFza2ZpbGUoZHJpdmUsICZjbWQpOwogCiAJaWYgKHJjID09IGlkZV9zdG9wcGVkICYmIGRtYSkgewogCQkvKiBmYWxsYmFjayB0byBQSU8gKi8KLQkJdGFzay50Zl9mbGFncyB8PSBJREVfVEZMQUdfRE1BX1BJT19GQUxMQkFDSzsKLQkJaWRlX3RmX3NldF9jbWQoZHJpdmUsICZ0YXNrLCAwKTsKLQkJaHdpZi0+ZGF0YV9waGFzZSA9IHRhc2suZGF0YV9waGFzZTsKLQkJaWRlX2luaXRfc2dfY21kKGRyaXZlLCBycSk7Ci0JCXJjID0gZG9fcndfdGFza2ZpbGUoZHJpdmUsICZ0YXNrKTsKKwkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19ETUFfUElPX0ZBTExCQUNLOworCQlpZGVfdGZfc2V0X2NtZChkcml2ZSwgJmNtZCwgMCk7CisJCWlkZV9pbml0X3NnX2NtZCgmY21kLCBuc2VjdG9ycyA8PCA5KTsKKwkJcmMgPSBkb19yd190YXNrZmlsZShkcml2ZSwgJmNtZCk7CiAJfQogCiAJcmV0dXJuIHJjOwpAQCAtMTkzLDcgKzE4NCw5IEBACiAKIAlpZiAoIWJsa19mc19yZXF1ZXN0KHJxKSkgewogCQlibGtfZHVtcF9ycV9mbGFncyhycSwgImlkZV9kb19yd19kaXNrIC0gYmFkIGNvbW1hbmQiKTsKLQkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCAwLCAwKTsKKwkJaWYgKHJxLT5lcnJvcnMgPT0gMCkKKwkJCXJxLT5lcnJvcnMgPSAtRUlPOworCQlpZGVfY29tcGxldGVfcnEoZHJpdmUsIC1FSU8sIGlkZV9ycV9ieXRlcyhycSkpOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQogCkBAIC0yMTYsMjIgKzIwOSwyMiBAQAogICovCiBzdGF0aWMgdTY0IGlkZWRpc2tfcmVhZF9uYXRpdmVfbWF4X2FkZHJlc3MoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgbGJhNDgpCiB7Ci0JaWRlX3Rhc2tfdCBhcmdzOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmFyZ3MudGY7CisJc3RydWN0IGlkZV9jbWQgY21kOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmNtZC50ZjsKIAl1NjQgYWRkciA9IDA7CiAKLQkvKiBDcmVhdGUgSURFL0FUQSBjb21tYW5kIHJlcXVlc3Qgc3RydWN0dXJlICovCi0JbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoaWRlX3Rhc2tfdCkpOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CiAJaWYgKGxiYTQ4KQogCQl0Zi0+Y29tbWFuZCA9IEFUQV9DTURfUkVBRF9OQVRJVkVfTUFYX0VYVDsKIAllbHNlCiAJCXRmLT5jb21tYW5kID0gQVRBX0NNRF9SRUFEX05BVElWRV9NQVg7CiAJdGYtPmRldmljZSAgPSBBVEFfTEJBOwotCWFyZ3MudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOworCisJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKIAlpZiAobGJhNDgpCi0JCWFyZ3MudGZfZmxhZ3MgfD0gKElERV9URkxBR19MQkE0OCB8IElERV9URkxBR19IT0IpOwotCS8qIHN1Ym1pdCBjb21tYW5kIHJlcXVlc3QgKi8KLQlpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJmFyZ3MpOworCQljbWQudGZfZmxhZ3MgfD0gKElERV9URkxBR19MQkE0OCB8IElERV9URkxBR19IT0IpOworCisJaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZjbWQpOwogCiAJLyogaWYgT0ssIGNvbXB1dGUgbWF4aW11bSBhZGRyZXNzIHZhbHVlICovCiAJaWYgKCh0Zi0+c3RhdHVzICYgMHgwMSkgPT0gMCkKQEAgLTI0NiwxMyArMjM5LDEzIEBACiAgKi8KIHN0YXRpYyB1NjQgaWRlZGlza19zZXRfbWF4X2FkZHJlc3MoaWRlX2RyaXZlX3QgKmRyaXZlLCB1NjQgYWRkcl9yZXEsIGludCBsYmE0OCkKIHsKLQlpZGVfdGFza190IGFyZ3M7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmYXJncy50ZjsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLnRmOwogCXU2NCBhZGRyX3NldCA9IDA7CiAKIAlhZGRyX3JlcS0tOwotCS8qIENyZWF0ZSBJREUvQVRBIGNvbW1hbmQgcmVxdWVzdCBzdHJ1Y3R1cmUgKi8KLQltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihpZGVfdGFza190KSk7CisKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwogCXRmLT5sYmFsICAgICA9IChhZGRyX3JlcSA+PiAgMCkgJiAweGZmOwogCXRmLT5sYmFtICAgICA9IChhZGRyX3JlcSA+Pj0gOCkgJiAweGZmOwogCXRmLT5sYmFoICAgICA9IChhZGRyX3JlcSA+Pj0gOCkgJiAweGZmOwpAQCAtMjY2LDExICsyNTksMTMgQEAKIAkJdGYtPmNvbW1hbmQgID0gQVRBX0NNRF9TRVRfTUFYOwogCX0KIAl0Zi0+ZGV2aWNlIHw9IEFUQV9MQkE7Ci0JYXJncy50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CisKKwljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwogCWlmIChsYmE0OCkKLQkJYXJncy50Zl9mbGFncyB8PSAoSURFX1RGTEFHX0xCQTQ4IHwgSURFX1RGTEFHX0hPQik7Ci0JLyogc3VibWl0IGNvbW1hbmQgcmVxdWVzdCAqLwotCWlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmYXJncyk7CisJCWNtZC50Zl9mbGFncyB8PSAoSURFX1RGTEFHX0xCQTQ4IHwgSURFX1RGTEFHX0hPQik7CisKKwlpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJmNtZCk7CisKIAkvKiBpZiBPSywgY29tcHV0ZSBtYXhpbXVtIGFkZHJlc3MgdmFsdWUgKi8KIAlpZiAoKHRmLT5zdGF0dXMgJiAweDAxKSA9PSAwKQogCQlhZGRyX3NldCA9IGlkZV9nZXRfbGJhX2FkZHIodGYsIGxiYTQ4KSArIDE7CkBAIC0zODksMjQgKzM4NCwyNCBAQAogc3RhdGljIHZvaWQgaWRlZGlza19wcmVwYXJlX2ZsdXNoKHN0cnVjdCByZXF1ZXN0X3F1ZXVlICpxLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJaWRlX2RyaXZlX3QgKmRyaXZlID0gcS0+cXVldWVkYXRhOwotCWlkZV90YXNrX3QgKnRhc2sgPSBrbWFsbG9jKHNpemVvZigqdGFzayksIEdGUF9BVE9NSUMpOworCXN0cnVjdCBpZGVfY21kICpjbWQgPSBrbWFsbG9jKHNpemVvZigqY21kKSwgR0ZQX0FUT01JQyk7CiAKIAkvKiBGSVhNRTogbWFwIHN0cnVjdCBpZGVfdGFza2ZpbGUgb24gcnEtPmNtZFtdICovCi0JQlVHX09OKHRhc2sgPT0gTlVMTCk7CisJQlVHX09OKGNtZCA9PSBOVUxMKTsKIAotCW1lbXNldCh0YXNrLCAwLCBzaXplb2YoKnRhc2spKTsKKwltZW1zZXQoY21kLCAwLCBzaXplb2YoKmNtZCkpOwogCWlmIChhdGFfaWRfZmx1c2hfZXh0X2VuYWJsZWQoZHJpdmUtPmlkKSAmJgogCSAgICAoZHJpdmUtPmNhcGFjaXR5NjQgPj0gKDFVTCA8PCAyOCkpKQotCQl0YXNrLT50Zi5jb21tYW5kID0gQVRBX0NNRF9GTFVTSF9FWFQ7CisJCWNtZC0+dGYuY29tbWFuZCA9IEFUQV9DTURfRkxVU0hfRVhUOwogCWVsc2UKLQkJdGFzay0+dGYuY29tbWFuZCA9IEFUQV9DTURfRkxVU0g7Ci0JdGFzay0+dGZfZmxhZ3MJID0gSURFX1RGTEFHX09VVF9URiB8IElERV9URkxBR19PVVRfREVWSUNFIHwKLQkJCSAgIElERV9URkxBR19EWU47Ci0JdGFzay0+ZGF0YV9waGFzZSA9IFRBU0tGSUxFX05PX0RBVEE7CisJCWNtZC0+dGYuY29tbWFuZCA9IEFUQV9DTURfRkxVU0g7CisJY21kLT50Zl9mbGFncyA9IElERV9URkxBR19PVVRfVEYgfCBJREVfVEZMQUdfT1VUX0RFVklDRSB8CisJCQlJREVfVEZMQUdfRFlOOworCWNtZC0+cHJvdG9jb2wgPSBBVEFfUFJPVF9OT0RBVEE7CiAKIAlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9BVEFfVEFTS0ZJTEU7CiAJcnEtPmNtZF9mbGFncyB8PSBSRVFfU09GVEJBUlJJRVI7Ci0JcnEtPnNwZWNpYWwgPSB0YXNrOworCXJxLT5zcGVjaWFsID0gY21kOwogfQogCiBpZGVfZGV2c2V0X2dldChtdWx0Y291bnQsIG11bHRfY291bnQpOwpAQCAtNDU2LDE1ICs0NTEsMTUgQEAKIAogc3RhdGljIGludCBpZGVfZG9fc2V0ZmVhdHVyZShpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGZlYXR1cmUsIHU4IG5zZWN0KQogewotCWlkZV90YXNrX3QgdGFzazsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CiAKLQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7Ci0JdGFzay50Zi5mZWF0dXJlID0gZmVhdHVyZTsKLQl0YXNrLnRmLm5zZWN0ICAgPSBuc2VjdDsKLQl0YXNrLnRmLmNvbW1hbmQgPSBBVEFfQ01EX1NFVF9GRUFUVVJFUzsKLQl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCWNtZC50Zi5mZWF0dXJlID0gZmVhdHVyZTsKKwljbWQudGYubnNlY3QgICA9IG5zZWN0OworCWNtZC50Zi5jb21tYW5kID0gQVRBX0NNRF9TRVRfRkVBVFVSRVM7CisJY21kLnRmX2ZsYWdzICAgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwogCi0JcmV0dXJuIGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmdGFzayk7CisJcmV0dXJuIGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmY21kKTsKIH0KIAogc3RhdGljIHZvaWQgdXBkYXRlX29yZGVyZWQoaWRlX2RyaXZlX3QgKmRyaXZlKQpAQCAtNTMxLDE1ICs1MjYsMTYgQEAKIAogc3RhdGljIGludCBkb19pZGVkaXNrX2ZsdXNoY2FjaGUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV90YXNrX3QgYXJnczsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CiAKLQltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihpZGVfdGFza190KSk7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKIAlpZiAoYXRhX2lkX2ZsdXNoX2V4dF9lbmFibGVkKGRyaXZlLT5pZCkpCi0JCWFyZ3MudGYuY29tbWFuZCA9IEFUQV9DTURfRkxVU0hfRVhUOworCQljbWQudGYuY29tbWFuZCA9IEFUQV9DTURfRkxVU0hfRVhUOwogCWVsc2UKLQkJYXJncy50Zi5jb21tYW5kID0gQVRBX0NNRF9GTFVTSDsKLQlhcmdzLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKLQlyZXR1cm4gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZhcmdzKTsKKwkJY21kLnRmLmNvbW1hbmQgPSBBVEFfQ01EX0ZMVVNIOworCWNtZC50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CisKKwlyZXR1cm4gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZjbWQpOwogfQogCiBpZGVfZGV2c2V0X2dldChhY291c3RpYywgYWNvdXN0aWMpOwpAQCAtNzExLDE3ICs3MDcsMTcgQEAKIHN0YXRpYyBpbnQgaWRlX2Rpc2tfc2V0X2Rvb3Jsb2NrKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGdlbmRpc2sgKmRpc2ssCiAJCQkJIGludCBvbikKIHsKLQlpZGVfdGFza190IHRhc2s7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCWludCByZXQ7CiAKIAlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfRE9PUkxPQ0tJTkcpID09IDApCiAJCXJldHVybiAwOwogCi0JbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOwotCXRhc2sudGYuY29tbWFuZCA9IG9uID8gQVRBX0NNRF9NRURJQV9MT0NLIDogQVRBX0NNRF9NRURJQV9VTkxPQ0s7Ci0JdGFzay50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQudGYuY29tbWFuZCA9IG9uID8gQVRBX0NNRF9NRURJQV9MT0NLIDogQVRBX0NNRF9NRURJQV9VTkxPQ0s7CisJY21kLnRmX2ZsYWdzICAgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwogCi0JcmV0ID0gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZ0YXNrKTsKKwlyZXQgPSBpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJmNtZCk7CiAKIAlpZiAocmV0KQogCQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfRE9PUkxPQ0tJTkc7CkBAIC03MzcsNiArNzMzLDUgQEAKIAkuaW5pdF9tZWRpYQk9IGlkZV9kaXNrX2luaXRfbWVkaWEsCiAJLnNldF9kb29ybG9jawk9IGlkZV9kaXNrX3NldF9kb29ybG9jaywKIAkuZG9fcmVxdWVzdAk9IGlkZV9kb19yd19kaXNrLAotCS5lbmRfcmVxdWVzdAk9IGlkZV9lbmRfcmVxdWVzdCwKIAkuaW9jdGwJCT0gaWRlX2Rpc2tfaW9jdGwsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWRpc2tfcHJvYy5jIGIvZHJpdmVycy9pZGUvaWRlLWRpc2tfcHJvYy5jCmluZGV4IDFmODZkY2IuLmVhZWEzYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1kaXNrX3Byb2MuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZGlza19wcm9jLmMKQEAgLTEsMzggKzEsMzggQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pZGUuaD4KLSNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogCiAjaW5jbHVkZSAiaWRlLWRpc2suaCIKIAogc3RhdGljIGludCBzbWFydF9lbmFibGUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV90YXNrX3QgYXJnczsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZhcmdzLnRmOworCXN0cnVjdCBpZGVfY21kIGNtZDsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQudGY7CiAKLQltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihpZGVfdGFza190KSk7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKIAl0Zi0+ZmVhdHVyZSA9IEFUQV9TTUFSVF9FTkFCTEU7CiAJdGYtPmxiYW0gICAgPSBBVEFfU01BUlRfTEJBTV9QQVNTOwogCXRmLT5sYmFoICAgID0gQVRBX1NNQVJUX0xCQUhfUEFTUzsKIAl0Zi0+Y29tbWFuZCA9IEFUQV9DTURfU01BUlQ7Ci0JYXJncy50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7Ci0JcmV0dXJuIGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmYXJncyk7CisJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKKworCXJldHVybiBpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJmNtZCk7CiB9CiAKIHN0YXRpYyBpbnQgZ2V0X3NtYXJ0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCAqYnVmLCB1OCBzdWJfY21kKQogewotCWlkZV90YXNrX3QgYXJnczsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZhcmdzLnRmOworCXN0cnVjdCBpZGVfY21kIGNtZDsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQudGY7CiAKLQltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihpZGVfdGFza190KSk7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKIAl0Zi0+ZmVhdHVyZSA9IHN1Yl9jbWQ7CiAJdGYtPm5zZWN0ICAgPSAweDAxOwogCXRmLT5sYmFtICAgID0gQVRBX1NNQVJUX0xCQU1fUEFTUzsKIAl0Zi0+bGJhaCAgICA9IEFUQV9TTUFSVF9MQkFIX1BBU1M7CiAJdGYtPmNvbW1hbmQgPSBBVEFfQ01EX1NNQVJUOwotCWFyZ3MudGZfZmxhZ3MJPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwotCWFyZ3MuZGF0YV9waGFzZQk9IFRBU0tGSUxFX0lOOwotCSh2b2lkKSBzbWFydF9lbmFibGUoZHJpdmUpOwotCXJldHVybiBpZGVfcmF3X3Rhc2tmaWxlKGRyaXZlLCAmYXJncywgYnVmLCAxKTsKKwljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOworCWNtZC5wcm90b2NvbCA9IEFUQV9QUk9UX1BJTzsKKworCXJldHVybiBpZGVfcmF3X3Rhc2tmaWxlKGRyaXZlLCAmY21kLCBidWYsIDEpOwogfQogCiBzdGF0aWMgaW50IHByb2NfaWRlZGlza19yZWFkX2NhY2hlCkBAIC02Nyw2ICs2Nyw4IEBACiAJaWRlX2RyaXZlX3QJKmRyaXZlID0gKGlkZV9kcml2ZV90ICopZGF0YTsKIAlpbnQJCWxlbiA9IDAsIGkgPSAwOwogCisJKHZvaWQpc21hcnRfZW5hYmxlKGRyaXZlKTsKKwogCWlmIChnZXRfc21hcnRfZGF0YShkcml2ZSwgcGFnZSwgc3ViX2NtZCkgPT0gMCkgewogCQl1bnNpZ25lZCBzaG9ydCAqdmFsID0gKHVuc2lnbmVkIHNob3J0ICopIHBhZ2U7CiAJCWNoYXIgKm91dCA9IChjaGFyICopdmFsICsgU0VDVE9SX1NJWkU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZG1hLXNmZi5jIGIvZHJpdmVycy9pZGUvaWRlLWRtYS1zZmYuYwppbmRleCAxMjNkMzkzLi43NWE5ZWEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZG1hLXNmZi5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1kbWEtc2ZmLmMKQEAgLTExMSw3ICsxMTEsNyBAQAogICoJTWF5IGFsc28gYmUgaW52b2tlZCBmcm9tIHRybTI5MC5jCiAgKi8KIAotaW50IGlkZV9idWlsZF9kbWF0YWJsZShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKK2ludCBpZGVfYnVpbGRfZG1hdGFibGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlfX2xlMzIgKnRhYmxlID0gKF9fbGUzMiAqKWh3aWYtPmRtYXRhYmxlX2NwdTsKQEAgLTEyMCwxMSArMTIwLDcgQEAKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCXU4IGlzX3RybTI5MCA9ICEhKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfVFJNMjkwKTsKIAotCWh3aWYtPnNnX25lbnRzID0gaWRlX2J1aWxkX3NnbGlzdChkcml2ZSwgcnEpOwotCWlmIChod2lmLT5zZ19uZW50cyA9PSAwKQotCQlyZXR1cm4gMDsKLQotCWZvcl9lYWNoX3NnKGh3aWYtPnNnX3RhYmxlLCBzZywgaHdpZi0+c2dfbmVudHMsIGkpIHsKKwlmb3JfZWFjaF9zZyhod2lmLT5zZ190YWJsZSwgc2csIGNtZC0+c2dfbmVudHMsIGkpIHsKIAkJdTMyIGN1cl9hZGRyLCBjdXJfbGVuLCB4Y291bnQsIGJjb3VudDsKIAogCQljdXJfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKQEAgLTE3OSw2ICsxNzUsNyBAQAogLyoqCiAgKglpZGVfZG1hX3NldHVwCS0JYmVnaW4gYSBETUEgcGhhc2UKICAqCUBkcml2ZTogdGFyZ2V0IGRldmljZQorICoJQGNtZDogY29tbWFuZAogICoKICAqCUJ1aWxkIGFuIElERSBETUEgUFJEIChJREUgc3BlYWsgZm9yIHNjYXR0ZXIgZ2F0aGVyIHRhYmxlKQogICoJYW5kIHRoZW4gc2V0IHVwIHRoZSBETUEgdHJhbnNmZXIgcmVnaXN0ZXJzIGZvciBhIGRldmljZQpAQCAtMTg5LDE3ICsxODYsMTYgQEAKICAqCWlzIHJldHVybmVkLgogICovCiAKLWludCBpZGVfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSkKK2ludCBpZGVfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+cnE7Ci0JdW5zaWduZWQgaW50IHJlYWRpbmcgPSBycV9kYXRhX2RpcihycSkgPyAwIDogQVRBX0RNQV9XUjsKIAl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKKwl1OCBydyA9IChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX1dSSVRFKSA/IDAgOiBBVEFfRE1BX1dSOwogCXU4IGRtYV9zdGF0OwogCiAJLyogZmFsbCBiYWNrIHRvIHBpbyEgKi8KLQlpZiAoIWlkZV9idWlsZF9kbWF0YWJsZShkcml2ZSwgcnEpKSB7Ci0JCWlkZV9tYXBfc2coZHJpdmUsIHJxKTsKKwlpZiAoaWRlX2J1aWxkX2RtYXRhYmxlKGRyaXZlLCBjbWQpID09IDApIHsKKwkJaWRlX21hcF9zZyhkcml2ZSwgY21kKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0yMTIsOSArMjA4LDkgQEAKIAogCS8qIHNwZWNpZnkgci93ICovCiAJaWYgKG1taW8pCi0JCXdyaXRlYihyZWFkaW5nLCAodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpKTsKKwkJd3JpdGViKHJ3LCAodm9pZCBfX2lvbWVtICopKGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpKTsKIAllbHNlCi0JCW91dGIocmVhZGluZywgaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX0NNRCk7CisJCW91dGIocncsIGh3aWYtPmRtYV9iYXNlICsgQVRBX0RNQV9DTUQpOwogCiAJLyogcmVhZCBETUEgc3RhdHVzIGZvciBJTlRSICYgRVJST1IgZmxhZ3MgKi8KIAlkbWFfc3RhdCA9IGh3aWYtPmRtYV9vcHMtPmRtYV9zZmZfcmVhZF9zdGF0dXMoaHdpZik7CkBAIC0yMjgsNyArMjI0LDcgQEAKIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9kbWFfc2V0dXApOwogCiAvKioKLSAqCWRtYV90aW1lcl9leHBpcnkJLQloYW5kbGUgYSBETUEgdGltZW91dAorICoJaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5CS0JaGFuZGxlIGEgRE1BIHRpbWVvdXQKICAqCUBkcml2ZTogRHJpdmUgdGhhdCB0aW1lZCBvdXQKICAqCiAgKglBbiBJREUgRE1BIHRyYW5zZmVyIHRpbWVkIG91dC4gSW4gdGhlIGV2ZW50IG9mIGFuIGVycm9yIHdlIGFzawpAQCAtMjQxLDcgKzIzNyw3IEBACiAgKglUaGlzIGNhbiBvY2N1ciBpZiBhbiBpbnRlcnJ1cHQgaXMgbG9zdCBvciBkdWUgdG8gaGFuZyBvciBidWdzLgogICovCiAKLXN0YXRpYyBpbnQgZG1hX3RpbWVyX2V4cGlyeShpZGVfZHJpdmVfdCAqZHJpdmUpCitpbnQgaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5KGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJdTggZG1hX3N0YXQgPSBod2lmLT5kbWFfb3BzLT5kbWFfc2ZmX3JlYWRfc3RhdHVzKGh3aWYpOwpAQCAtMjY1LDE0ICsyNjEsNyBAQAogCiAJcmV0dXJuIDA7CS8qIFN0YXR1cyBpcyB1bmtub3duIC0tIHJlc2V0IHRoZSBidXMgKi8KIH0KLQotdm9pZCBpZGVfZG1hX2V4ZWNfY21kKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggY29tbWFuZCkKLXsKLQkvKiBpc3N1ZSBjbWQgdG8gZHJpdmUgKi8KLQlpZGVfZXhlY3V0ZV9jb21tYW5kKGRyaXZlLCBjb21tYW5kLCAmaWRlX2RtYV9pbnRyLCAyICogV0FJVF9DTUQsCi0JCQkgICAgZG1hX3RpbWVyX2V4cGlyeSk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfZG1hX2V4ZWNfY21kKTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSk7CiAKIHZvaWQgaWRlX2RtYV9zdGFydChpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CkBAIC0zNDYsMTAgKzMzNSwxMCBAQAogY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIHNmZl9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gaWRlX2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBpZGVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCisJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCiAJLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCiAJLmRtYV9zZmZfcmVhZF9zdGF0dXMJPSBpZGVfZG1hX3NmZl9yZWFkX3N0YXR1cywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1kbWEuYyBiL2RyaXZlcnMvaWRlL2lkZS1kbWEuYwppbmRleCBhODc4ZjQ3Li4zZGJmODBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZG1hLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWRtYS5jCkBAIC05Niw5ICs5NiwxMyBAQAogCiAJaWYgKE9LX1NUQVQoc3RhdCwgRFJJVkVfUkVBRFksIGRyaXZlLT5iYWRfd3N0YXQgfCBBVEFfRFJRKSkgewogCQlpZiAoIWRtYV9zdGF0KSB7Ci0JCQlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBod2lmLT5ycTsKKwkJCXN0cnVjdCBpZGVfY21kICpjbWQgPSAmaHdpZi0+Y21kOwogCi0JCQl0YXNrX2VuZF9yZXF1ZXN0KGRyaXZlLCBycSwgc3RhdCk7CisJCQlpZiAoKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRlMpID09IDApCisJCQkJaWRlX2ZpbmlzaF9jbWQoZHJpdmUsIGNtZCwgc3RhdCk7CisJCQllbHNlCisJCQkJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCAwLAorCQkJCQkJY21kLT5ycS0+bnJfc2VjdG9ycyA8PCA5KTsKIAkJCXJldHVybiBpZGVfc3RvcHBlZDsKIAkJfQogCQlwcmludGsoS0VSTl9FUlIgIiVzOiAlczogYmFkIERNQSBzdGF0dXMgKDB4JTAyeClcbiIsCkBAIC0xMDYsNyArMTEwLDYgQEAKIAl9CiAJcmV0dXJuIGlkZV9lcnJvcihkcml2ZSwgImRtYV9pbnRyIiwgc3RhdCk7CiB9Ci1FWFBPUlRfU1lNQk9MX0dQTChpZGVfZG1hX2ludHIpOwogCiBpbnQgaWRlX2RtYV9nb29kX2RyaXZlKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKQEAgLTExNiw3ICsxMTksNyBAQAogLyoqCiAgKglpZGVfYnVpbGRfc2dsaXN0CS0JbWFwIElERSBzY2F0dGVyIGdhdGhlciBmb3IgRE1BIEkvTwogICoJQGRyaXZlOiB0aGUgZHJpdmUgdG8gYnVpbGQgdGhlIERNQSB0YWJsZSBmb3IKLSAqCUBycTogdGhlIHJlcXVlc3QgaG9sZGluZyB0aGUgc2cgbGlzdAorICoJQGNtZDogY29tbWFuZAogICoKICAqCVBlcmZvcm0gdGhlIERNQSBtYXBwaW5nIG1hZ2ljIG5lY2Vzc2FyeSB0byBhY2Nlc3MgdGhlIHNvdXJjZSBvcgogICoJdGFyZ2V0IGJ1ZmZlcnMgb2YgYSByZXF1ZXN0IHZpYSBETUEuICBUaGUgbG93ZXIgbGF5ZXJzIG9mIHRoZQpAQCAtMTI0LDI4ICsxMjcsMjkgQEAKICAqCW9wZXJhdGUgaW4gYSBwb3J0YWJsZSBmYXNoaW9uLgogICovCiAKLWludCBpZGVfYnVpbGRfc2dsaXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQoraW50IGlkZV9idWlsZF9zZ2xpc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gaHdpZi0+c2dfdGFibGU7CiAJaW50IGk7CiAKLQlpZGVfbWFwX3NnKGRyaXZlLCBycSk7CisJaWRlX21hcF9zZyhkcml2ZSwgY21kKTsKIAotCWlmIChycV9kYXRhX2RpcihycSkgPT0gUkVBRCkKLQkJaHdpZi0+c2dfZG1hX2RpcmVjdGlvbiA9IERNQV9GUk9NX0RFVklDRTsKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSkKKwkJY21kLT5zZ19kbWFfZGlyZWN0aW9uID0gRE1BX1RPX0RFVklDRTsKIAllbHNlCi0JCWh3aWYtPnNnX2RtYV9kaXJlY3Rpb24gPSBETUFfVE9fREVWSUNFOworCQljbWQtPnNnX2RtYV9kaXJlY3Rpb24gPSBETUFfRlJPTV9ERVZJQ0U7CiAKLQlpID0gZG1hX21hcF9zZyhod2lmLT5kZXYsIHNnLCBod2lmLT5zZ19uZW50cywgaHdpZi0+c2dfZG1hX2RpcmVjdGlvbik7Ci0JaWYgKGkpIHsKLQkJaHdpZi0+b3JpZ19zZ19uZW50cyA9IGh3aWYtPnNnX25lbnRzOwotCQlod2lmLT5zZ19uZW50cyA9IGk7CisJaSA9IGRtYV9tYXBfc2coaHdpZi0+ZGV2LCBzZywgY21kLT5zZ19uZW50cywgY21kLT5zZ19kbWFfZGlyZWN0aW9uKTsKKwlpZiAoaSA9PSAwKQorCQlpZGVfbWFwX3NnKGRyaXZlLCBjbWQpOworCWVsc2UgeworCQljbWQtPm9yaWdfc2dfbmVudHMgPSBjbWQtPnNnX25lbnRzOworCQljbWQtPnNnX25lbnRzID0gaTsKIAl9CiAKIAlyZXR1cm4gaTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9idWlsZF9zZ2xpc3QpOwogCiAvKioKICAqCWlkZV9kZXN0cm95X2RtYXRhYmxlCS0JY2xlYW4gdXAgRE1BIG1hcHBpbmcKQEAgLTE2MSw5ICsxNjUsMTAgQEAKIHZvaWQgaWRlX2Rlc3Ryb3lfZG1hdGFibGUoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKKwlzdHJ1Y3QgaWRlX2NtZCAqY21kID0gJmh3aWYtPmNtZDsKIAotCWRtYV91bm1hcF9zZyhod2lmLT5kZXYsIGh3aWYtPnNnX3RhYmxlLCBod2lmLT5vcmlnX3NnX25lbnRzLAotCQkgICAgIGh3aWYtPnNnX2RtYV9kaXJlY3Rpb24pOworCWRtYV91bm1hcF9zZyhod2lmLT5kZXYsIGh3aWYtPnNnX3RhYmxlLCBjbWQtPm9yaWdfc2dfbmVudHMsCisJCSAgICAgY21kLT5zZ19kbWFfZGlyZWN0aW9uKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9kZXN0cm95X2RtYXRhYmxlKTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWVoLmMgYi9kcml2ZXJzL2lkZS9pZGUtZWguYwppbmRleCAxMjMxYjVlLi4xMTY2NDk3IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtZWguYworKysgYi9kcml2ZXJzL2lkZS9pZGUtZWguYwpAQCAtMTIzLDggKzEyMywxOCBAQAogCiAJLyogcmV0cnkgb25seSAibm9ybWFsIiBJL086ICovCiAJaWYgKCFibGtfZnNfcmVxdWVzdChycSkpIHsKLQkJcnEtPmVycm9ycyA9IDE7Ci0JCWlkZV9lbmRfZHJpdmVfY21kKGRyaXZlLCBzdGF0LCBlcnIpOworCQlpZiAocnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0FUQV9UQVNLRklMRSkgeworCQkJc3RydWN0IGlkZV9jbWQgKmNtZCA9IHJxLT5zcGVjaWFsOworCisJCQlpZiAoY21kKQorCQkJCWlkZV9jb21wbGV0ZV9jbWQoZHJpdmUsIGNtZCwgc3RhdCwgZXJyKTsKKwkJfSBlbHNlIGlmIChibGtfcG1fcmVxdWVzdChycSkpIHsKKwkJCXJxLT5lcnJvcnMgPSAxOworCQkJaWRlX2NvbXBsZXRlX3BtX3JxKGRyaXZlLCBycSk7CisJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CisJCX0KKwkJcnEtPmVycm9ycyA9IGVycjsKKwkJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCBlcnIgPyAtRUlPIDogMCwgYmxrX3JxX2J5dGVzKHJxKSk7CiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CiAKQEAgLTEzNiw4ICsxNDYsMTEgQEAKIHsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBkcml2ZS0+aHdpZi0+cnE7CiAKLQlpZiAocnEgJiYgYmxrX3NwZWNpYWxfcmVxdWVzdChycSkgJiYgcnEtPmNtZFswXSA9PSBSRVFfRFJJVkVfUkVTRVQpCi0JCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgZXJyID8gZXJyIDogMSwgMCk7CisJaWYgKHJxICYmIGJsa19zcGVjaWFsX3JlcXVlc3QocnEpICYmIHJxLT5jbWRbMF0gPT0gUkVRX0RSSVZFX1JFU0VUKSB7CisJCWlmIChlcnIgPD0gMCAmJiBycS0+ZXJyb3JzID09IDApCisJCQlycS0+ZXJyb3JzID0gLUVJTzsKKwkJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCBlcnIgPyBlcnIgOiAwLCBpZGVfcnFfYnl0ZXMocnEpKTsKKwl9CiB9CiAKIC8qIG5lZWRlZCBiZWxvdyAqLwpAQCAtMTYyLDggKzE3NSw3IEBACiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBBVEFQSSByZXNldCBjb21wbGV0ZVxuIiwgZHJpdmUtPm5hbWUpOwogCWVsc2UgewogCQlpZiAodGltZV9iZWZvcmUoamlmZmllcywgaHdpZi0+cG9sbF90aW1lb3V0KSkgewotCQkJaWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmYXRhcGlfcmVzZXRfcG9sbGZ1bmMsIEhaLzIwLAotCQkJCQlOVUxMKTsKKwkJCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJmF0YXBpX3Jlc2V0X3BvbGxmdW5jLCBIWi8yMCk7CiAJCQkvKiBjb250aW51ZSBwb2xsaW5nICovCiAJCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CiAJCX0KQEAgLTIyNSw3ICsyMzcsNyBAQAogCiAJaWYgKCFPS19TVEFUKHRtcCwgMCwgQVRBX0JVU1kpKSB7CiAJCWlmICh0aW1lX2JlZm9yZShqaWZmaWVzLCBod2lmLT5wb2xsX3RpbWVvdXQpKSB7Ci0JCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZyZXNldF9wb2xsZnVuYywgSFovMjAsIE5VTEwpOworCQkJaWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmcmVzZXRfcG9sbGZ1bmMsIEhaLzIwKTsKIAkJCS8qIGNvbnRpbnVlIHBvbGxpbmcgKi8KIAkJCXJldHVybiBpZGVfc3RhcnRlZDsKIAkJfQpAQCAtMzQyLDcgKzM1NCw3IEBACiAJCW5kZWxheSg0MDApOwogCQlod2lmLT5wb2xsX3RpbWVvdXQgPSBqaWZmaWVzICsgV0FJVF9XT1JTVENBU0U7CiAJCWh3aWYtPnBvbGxpbmcgPSAxOwotCQlfX2lkZV9zZXRfaGFuZGxlcihkcml2ZSwgJmF0YXBpX3Jlc2V0X3BvbGxmdW5jLCBIWi8yMCwgTlVMTCk7CisJCV9faWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmYXRhcGlfcmVzZXRfcG9sbGZ1bmMsIEhaLzIwKTsKIAkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwogCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CiAJfQpAQCAtNDAyLDcgKzQxNCw3IEBACiAJdWRlbGF5KDEwKTsKIAlod2lmLT5wb2xsX3RpbWVvdXQgPSBqaWZmaWVzICsgV0FJVF9XT1JTVENBU0U7CiAJaHdpZi0+cG9sbGluZyA9IDE7Ci0JX19pZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZyZXNldF9wb2xsZnVuYywgSFovMjAsIE5VTEwpOworCV9faWRlX3NldF9oYW5kbGVyKGRyaXZlLCAmcmVzZXRfcG9sbGZ1bmMsIEhaLzIwKTsKIAogCS8qCiAJICogU29tZSB3ZWlyZCBjb250cm9sbGVyIGxpa2UgcmVzZXR0aW5nIHRoZW1zZWx2ZXMgdG8gYSBzdHJhbmdlCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMgYi9kcml2ZXJzL2lkZS9pZGUtZmxvcHB5LmMKaW5kZXggMzE3ZWM2Mi4uN2FlNjYyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWZsb3BweS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1mbG9wcHkuYwpAQCAtNjEsNTAgKzYxLDYgQEAKICAqLwogI2RlZmluZSBJREVGTE9QUFlfUENfREVMQVkJKEhaLzIwKQkvKiBkZWZhdWx0IGRlbGF5IGZvciBaSVAgMTAwICg1MG1zKSAqLwogCi0vKiBFcnJvciBjb2RlIHJldHVybmVkIGluIHJxLT5lcnJvcnMgdG8gdGhlIGhpZ2hlciBwYXJ0IG9mIHRoZSBkcml2ZXIuICovCi0jZGVmaW5lCUlERUZMT1BQWV9FUlJPUl9HRU5FUkFMCQkxMDEKLQotLyoKLSAqIFVzZWQgdG8gZmluaXNoIHNlcnZpY2luZyBhIHJlcXVlc3QuIEZvciByZWFkL3dyaXRlIHJlcXVlc3RzLCB3ZSB3aWxsIGNhbGwKLSAqIGlkZV9lbmRfcmVxdWVzdCB0byBwYXNzIHRvIHRoZSBuZXh0IGJ1ZmZlci4KLSAqLwotc3RhdGljIGludCBpZGVfZmxvcHB5X2VuZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IHVwdG9kYXRlLCBpbnQgbnNlY3MpCi17Ci0Jc3RydWN0IGlkZV9kaXNrX29iaiAqZmxvcHB5ID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCXN0cnVjdCByZXF1ZXN0ICpycSA9IGRyaXZlLT5od2lmLT5ycTsKLQlpbnQgZXJyb3I7Ci0KLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKLQotCXN3aXRjaCAodXB0b2RhdGUpIHsKLQljYXNlIDA6Ci0JCWVycm9yID0gSURFRkxPUFBZX0VSUk9SX0dFTkVSQUw7Ci0JCWJyZWFrOwotCi0JY2FzZSAxOgotCQllcnJvciA9IDA7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJZXJyb3IgPSB1cHRvZGF0ZTsKLQl9Ci0KLQlpZiAoZXJyb3IpCi0JCWZsb3BweS0+ZmFpbGVkX3BjID0gTlVMTDsKLQkvKiBXaHkgZG9lcyB0aGlzIGhhcHBlbj8gKi8KLQlpZiAoIXJxKQotCQlyZXR1cm4gMDsKLQlpZiAoIWJsa19zcGVjaWFsX3JlcXVlc3QocnEpKSB7Ci0JCS8qIG91ciByZWFsIGxvY2FsIGVuZCByZXF1ZXN0IGZ1bmN0aW9uICovCi0JCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgdXB0b2RhdGUsIG5zZWNzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCXJxLT5lcnJvcnMgPSBlcnJvcjsKLQkvKiBmaXhtZTogbmVlZCB0byBtb3ZlIHRoaXMgbG9jYWwgYWxzbyAqLwotCWlkZV9lbmRfZHJpdmVfY21kKGRyaXZlLCAwLCAwKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgaWRlZmxvcHB5X3VwZGF0ZV9idWZmZXJzKGlkZV9kcml2ZV90ICpkcml2ZSwKIAkJCQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKIHsKQEAgLTExMiwyMiArNjgsMjMgQEAKIAlzdHJ1Y3QgYmlvICpiaW8gPSBycS0+YmlvOwogCiAJd2hpbGUgKChiaW8gPSBycS0+YmlvKSAhPSBOVUxMKQotCQlpZGVfZmxvcHB5X2VuZF9yZXF1ZXN0KGRyaXZlLCAxLCAwKTsKKwkJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCAwLCBpZGVfcnFfYnl0ZXMocnEpKTsKIH0KIAotc3RhdGljIHZvaWQgaWRlX2Zsb3BweV9jYWxsYmFjayhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBkc2MpCitzdGF0aWMgaW50IGlkZV9mbG9wcHlfY2FsbGJhY2soaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgZHNjKQogewogCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYyA9IGRyaXZlLT5wYzsKKwlzdHJ1Y3QgcmVxdWVzdCAqcnEgPSBwYy0+cnE7CiAJaW50IHVwdG9kYXRlID0gcGMtPmVycm9yID8gMCA6IDE7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIkNhbGwgJXNcbiIsIF9fZnVuY19fKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgImVudGVyIik7CiAKLQlpZiAoZmxvcHB5LT5mYWlsZWRfcGMgPT0gcGMpCi0JCWZsb3BweS0+ZmFpbGVkX3BjID0gTlVMTDsKKwlpZiAoZHJpdmUtPmZhaWxlZF9wYyA9PSBwYykKKwkJZHJpdmUtPmZhaWxlZF9wYyA9IE5VTEw7CiAKIAlpZiAocGMtPmNbMF0gPT0gR1BDTURfUkVBRF8xMCB8fCBwYy0+Y1swXSA9PSBHUENNRF9XUklURV8xMCB8fAotCSAgICAocGMtPnJxICYmIGJsa19wY19yZXF1ZXN0KHBjLT5ycSkpKQorCSAgICAocnEgJiYgYmxrX3BjX3JlcXVlc3QocnEpKSkKIAkJdXB0b2RhdGUgPSAxOyAvKiBGSVhNRSAqLwogCWVsc2UgaWYgKHBjLT5jWzBdID09IEdQQ01EX1JFUVVFU1RfU0VOU0UpIHsKIAkJdTggKmJ1ZiA9IHBjLT5idWY7CkBAIC0xMzksMTkgKzk2LDIyIEBACiAJCQlmbG9wcHktPnByb2dyZXNzX2luZGljYXRpb24gPSBidWZbMTVdICYgMHg4MCA/CiAJCQkJKHUxNilnZXRfdW5hbGlnbmVkKCh1MTYgKikmYnVmWzE2XSkgOiAweDEwMDAwOwogCi0JCQlpZiAoZmxvcHB5LT5mYWlsZWRfcGMpCi0JCQkJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BDLCAicGMgPSAleCwgIiwKLQkJCQkJICAgICAgZmxvcHB5LT5mYWlsZWRfcGMtPmNbMF0pOworCQkJaWYgKGRyaXZlLT5mYWlsZWRfcGMpCisJCQkJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BDLCAicGMgPSAleCIsCisJCQkJCSAgICAgIGRyaXZlLT5mYWlsZWRfcGMtPmNbMF0pOwogCiAJCQlpZGVfZGVidWdfbG9nKElERV9EQkdfU0VOU0UsICJzZW5zZSBrZXkgPSAleCwgYXNjID0gJXgsIgotCQkJCSAgICAgICJhc2NxID0gJXhcbiIsIGZsb3BweS0+c2Vuc2Vfa2V5LAorCQkJCSAgICAgICJhc2NxID0gJXgiLCBmbG9wcHktPnNlbnNlX2tleSwKIAkJCQkgICAgICBmbG9wcHktPmFzYywgZmxvcHB5LT5hc2NxKTsKIAkJfSBlbHNlCiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICJFcnJvciBpbiBSRVFVRVNUIFNFTlNFIGl0c2VsZiAtICIKIAkJCSAgICAgICAiQWJvcnRpbmcgcmVxdWVzdCFcbiIpOwogCX0KIAotCWlkZV9mbG9wcHlfZW5kX3JlcXVlc3QoZHJpdmUsIHVwdG9kYXRlLCAwKTsKKwlpZiAoYmxrX3NwZWNpYWxfcmVxdWVzdChycSkpCisJCXJxLT5lcnJvcnMgPSB1cHRvZGF0ZSA/IDAgOiBJREVfRFJWX0VSUk9SX0dFTkVSQUw7CisKKwlyZXR1cm4gdXB0b2RhdGU7CiB9CiAKIHN0YXRpYyB2b2lkIGlkZV9mbG9wcHlfcmVwb3J0X2Vycm9yKHN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSwKQEAgLTE3MCwxNCArMTMwLDE1IEBACiAKIH0KIAotc3RhdGljIGlkZV9zdGFydHN0b3BfdCBpZGVmbG9wcHlfaXNzdWVfcGMoaWRlX2RyaXZlX3QgKmRyaXZlLAotCQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX2Zsb3BweV9pc3N1ZV9wYyhpZGVfZHJpdmVfdCAqZHJpdmUsCisJCQkJCSAgIHN0cnVjdCBpZGVfY21kICpjbWQsCisJCQkJCSAgIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQogewogCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAotCWlmIChmbG9wcHktPmZhaWxlZF9wYyA9PSBOVUxMICYmCisJaWYgKGRyaXZlLT5mYWlsZWRfcGMgPT0gTlVMTCAmJgogCSAgICBwYy0+Y1swXSAhPSBHUENNRF9SRVFVRVNUX1NFTlNFKQotCQlmbG9wcHktPmZhaWxlZF9wYyA9IHBjOworCQlkcml2ZS0+ZmFpbGVkX3BjID0gcGM7CiAKIAkvKiBTZXQgdGhlIGN1cnJlbnQgcGFja2V0IGNvbW1hbmQgKi8KIAlkcml2ZS0+cGMgPSBwYzsKQEAgLTE4NiwxOCArMTQ3LDE4IEBACiAJCWlmICghKHBjLT5mbGFncyAmIFBDX0ZMQUdfU1VQUFJFU1NfRVJST1IpKQogCQkJaWRlX2Zsb3BweV9yZXBvcnRfZXJyb3IoZmxvcHB5LCBwYyk7CiAJCS8qIEdpdmluZyB1cCAqLwotCQlwYy0+ZXJyb3IgPSBJREVGTE9QUFlfRVJST1JfR0VORVJBTDsKKwkJcGMtPmVycm9yID0gSURFX0RSVl9FUlJPUl9HRU5FUkFMOwogCi0JCWZsb3BweS0+ZmFpbGVkX3BjID0gTlVMTDsKKwkJZHJpdmUtPmZhaWxlZF9wYyA9IE5VTEw7CiAJCWRyaXZlLT5wY19jYWxsYmFjayhkcml2ZSwgMCk7CiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIiVzOiBSZXRyeSAjJWRcbiIsIF9fZnVuY19fLCBwYy0+cmV0cmllcyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJyZXRyeSAjJWQiLCBwYy0+cmV0cmllcyk7CiAKIAlwYy0+cmV0cmllcysrOwogCi0JcmV0dXJuIGlkZV9pc3N1ZV9wYyhkcml2ZSk7CisJcmV0dXJuIGlkZV9pc3N1ZV9wYyhkcml2ZSwgY21kKTsKIH0KIAogdm9pZCBpZGVfZmxvcHB5X2NyZWF0ZV9yZWFkX2NhcGFjaXR5X2NtZChzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKQEAgLTI0Miw4ICsyMDMsNyBAQAogCWludCBibG9ja3MgPSBycS0+bnJfc2VjdG9ycyAvIGZsb3BweS0+YnNfZmFjdG9yOwogCWludCBjbWQgPSBycV9kYXRhX2RpcihycSk7CiAKLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIiVzOiBibG9jazogJWQsIGJsb2NrczogJWRcbiIsIF9fZnVuY19fLAotCQkgICAgICBibG9jaywgYmxvY2tzKTsKKwlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgImJsb2NrOiAlZCwgYmxvY2tzOiAlZCIsIGJsb2NrLCBibG9ja3MpOwogCiAJaWRlX2luaXRfcGMocGMpOwogCXBjLT5jWzBdID0gY21kID09IFJFQUQgPyBHUENNRF9SRUFEXzEwIDogR1BDTURfV1JJVEVfMTA7CkBAIC0yODUsMzQgKzI0NSwzNCBAQAogewogCXN0cnVjdCBpZGVfZGlza19vYmogKmZsb3BweSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICIlczogZGV2OiAlcywgY21kOiAweCV4LCBjbWRfdHlwZTogJXgsICIKLQkJICAgICAgImVycm9yczogJWRcbiIsCi0JCSAgICAgIF9fZnVuY19fLCBycS0+cnFfZGlzayA/IHJxLT5ycV9kaXNrLT5kaXNrX25hbWUgOiAiPyIsCi0JCSAgICAgIHJxLT5jbWRbMF0sIHJxLT5jbWRfdHlwZSwgcnEtPmVycm9ycyk7Ci0KLQlpZGVfZGVidWdfbG9nKElERV9EQkdfRlVOQywgIiVzOiBzZWN0b3I6ICVsZCwgbnJfc2VjdG9yczogJWxkLCAiCi0JCSAgICAgICJjdXJyZW50X25yX3NlY3RvcnM6ICVkXG4iLAotCQkgICAgICBfX2Z1bmNfXywgKGxvbmcpcnEtPnNlY3RvciwgcnEtPm5yX3NlY3RvcnMsCi0JCSAgICAgIHJxLT5jdXJyZW50X25yX3NlY3RvcnMpOworCWlmIChkcml2ZS0+ZGVidWdfbWFzayAmIElERV9EQkdfUlEpCisJCWJsa19kdW1wX3JxX2ZsYWdzKHJxLCAocnEtPnJxX2Rpc2sKKwkJCQkJPyBycS0+cnFfZGlzay0+ZGlza19uYW1lCisJCQkJCTogImRldj8iKSk7CiAKIAlpZiAocnEtPmVycm9ycyA+PSBFUlJPUl9NQVgpIHsKLQkJaWYgKGZsb3BweS0+ZmFpbGVkX3BjKQotCQkJaWRlX2Zsb3BweV9yZXBvcnRfZXJyb3IoZmxvcHB5LCBmbG9wcHktPmZhaWxlZF9wYyk7Ci0JCWVsc2UKKwkJaWYgKGRyaXZlLT5mYWlsZWRfcGMpIHsKKwkJCWlkZV9mbG9wcHlfcmVwb3J0X2Vycm9yKGZsb3BweSwgZHJpdmUtPmZhaWxlZF9wYyk7CisJCQlkcml2ZS0+ZmFpbGVkX3BjID0gTlVMTDsKKwkJfSBlbHNlCiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogSS9PIGVycm9yXG4iLCBkcml2ZS0+bmFtZSk7CiAKLQkJaWRlX2Zsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7Ci0JCXJldHVybiBpZGVfc3RvcHBlZDsKKwkJaWYgKGJsa19zcGVjaWFsX3JlcXVlc3QocnEpKSB7CisJCQlycS0+ZXJyb3JzID0gMDsKKwkJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgMCwgYmxrX3JxX2J5dGVzKHJxKSk7CisJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CisJCX0gZWxzZQorCQkJZ290byBvdXRfZW5kOwogCX0KIAlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpKSB7CiAJCWlmICgoKGxvbmcpcnEtPnNlY3RvciAlIGZsb3BweS0+YnNfZmFjdG9yKSB8fAogCQkgICAgKHJxLT5ucl9zZWN0b3JzICUgZmxvcHB5LT5ic19mYWN0b3IpKSB7CiAJCQlwcmludGsoS0VSTl9FUlIgUEZYICIlczogdW5zdXBwb3J0ZWQgci93IHJxIHNpemVcbiIsCiAJCQkJZHJpdmUtPm5hbWUpOwotCQkJaWRlX2Zsb3BweV9lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7Ci0JCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CisJCQlnb3RvIG91dF9lbmQ7CiAJCX0KIAkJcGMgPSAmZmxvcHB5LT5xdWV1ZWRfcGM7CiAJCWlkZWZsb3BweV9jcmVhdGVfcndfY21kKGRyaXZlLCBwYywgcnEsICh1bnNpZ25lZCBsb25nKWJsb2NrKTsKQEAgLTMyMywyMSArMjgzLDMzIEBACiAJCWlkZWZsb3BweV9ibG9ja3BjX2NtZChmbG9wcHksIHBjLCBycSk7CiAJfSBlbHNlIHsKIAkJYmxrX2R1bXBfcnFfZmxhZ3MocnEsIFBGWCAidW5zdXBwb3J0ZWQgY29tbWFuZCBpbiBxdWV1ZSIpOwotCQlpZGVfZmxvcHB5X2VuZF9yZXF1ZXN0KGRyaXZlLCAwLCAwKTsKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOworCQlnb3RvIG91dF9lbmQ7CiAJfQogCisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKworCWlmIChycV9kYXRhX2RpcihycSkpCisJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfV1JJVEU7CisKKwljbWQucnEgPSBycTsKKwogCWlmIChibGtfZnNfcmVxdWVzdChycSkgfHwgcGMtPnJlcV94ZmVyKSB7Ci0JCWlkZV9pbml0X3NnX2NtZChkcml2ZSwgcnEpOwotCQlpZGVfbWFwX3NnKGRyaXZlLCBycSk7CisJCWlkZV9pbml0X3NnX2NtZCgmY21kLCBycS0+bnJfc2VjdG9ycyA8PCA5KTsKKwkJaWRlX21hcF9zZyhkcml2ZSwgJmNtZCk7CiAJfQogCiAJcGMtPnNnID0gaHdpZi0+c2dfdGFibGU7Ci0JcGMtPnNnX2NudCA9IGh3aWYtPnNnX25lbnRzOworCXBjLT5zZ19jbnQgPSBjbWQuc2dfbmVudHM7CiAKIAlwYy0+cnEgPSBycTsKIAotCXJldHVybiBpZGVmbG9wcHlfaXNzdWVfcGMoZHJpdmUsIHBjKTsKKwlyZXR1cm4gaWRlX2Zsb3BweV9pc3N1ZV9wYyhkcml2ZSwgJmNtZCwgcGMpOworb3V0X2VuZDoKKwlkcml2ZS0+ZmFpbGVkX3BjID0gTlVMTDsKKwlpZiAoYmxrX2ZzX3JlcXVlc3QocnEpID09IDAgJiYgcnEtPmVycm9ycyA9PSAwKQorCQlycS0+ZXJyb3JzID0gLUVJTzsKKwlpZGVfY29tcGxldGVfcnEoZHJpdmUsIC1FSU8sIGlkZV9ycV9ieXRlcyhycSkpOworCXJldHVybiBpZGVfc3RvcHBlZDsKIH0KIAogLyoKQEAgLTQzOCw4ICs0MTAsOSBAQAogCQlsZW5ndGggPSBiZTE2X3RvX2NwdXAoKF9fYmUxNiAqKSZwYy5idWZbZGVzY19zdGFydCArIDZdKTsKIAogCQlpZGVfZGVidWdfbG9nKElERV9EQkdfUFJPQkUsICJEZXNjcmlwdG9yICVkOiAlZGtCLCAlZCBibG9ja3MsICIKLQkJCSAgICAgICIlZCBzZWN0b3Igc2l6ZVxuIiwKLQkJCSAgICAgIGksIGJsb2NrcyAqIGxlbmd0aCAvIDEwMjQsIGJsb2NrcywgbGVuZ3RoKTsKKwkJCQkJICAgICAiJWQgc2VjdG9yIHNpemUiLAorCQkJCQkgICAgIGksIGJsb2NrcyAqIGxlbmd0aCAvIDEwMjQsCisJCQkJCSAgICAgYmxvY2tzLCBsZW5ndGgpOwogCiAJCWlmIChpKQogCQkJY29udGludWU7CkBAIC00OTUsOCArNDY4LDggQEAKIAkJCQkiaW4gZHJpdmVcbiIsIGRyaXZlLT5uYW1lKTsKIAkJCWJyZWFrOwogCQl9Ci0JCWlkZV9kZWJ1Z19sb2coSURFX0RCR19QUk9CRSwgIkRlc2NyaXB0b3IgMCBDb2RlOiAlZFxuIiwKLQkJCSAgICAgIHBjLmJ1ZltkZXNjX3N0YXJ0ICsgNF0gJiAweDAzKTsKKwkJaWRlX2RlYnVnX2xvZyhJREVfREJHX1BST0JFLCAiRGVzY3JpcHRvciAwIENvZGU6ICVkIiwKKwkJCQkJICAgICBwYy5idWZbZGVzY19zdGFydCArIDRdICYgMHgwMyk7CiAJfQogCiAJLyogQ2xpayEgZGlzayBkb2VzIG5vdCBzdXBwb3J0IGdldF9mbGV4aWJsZV9kaXNrX3BhZ2UgKi8KQEAgLTU3NSw2ICs1NDgsNSBAQAogCS5pbml0X21lZGlhCT0gaWRlX2Zsb3BweV9pbml0X21lZGlhLAogCS5zZXRfZG9vcmxvY2sJPSBpZGVfc2V0X21lZGlhX2xvY2ssCiAJLmRvX3JlcXVlc3QJPSBpZGVfZmxvcHB5X2RvX3JlcXVlc3QsCi0JLmVuZF9yZXF1ZXN0CT0gaWRlX2Zsb3BweV9lbmRfcmVxdWVzdCwKIAkuaW9jdGwJCT0gaWRlX2Zsb3BweV9pb2N0bCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZ2QuYyBiL2RyaXZlcnMvaWRlL2lkZS1nZC5jCmluZGV4IDA0NzEwOTQuLjFhZWJkZjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1nZC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1nZC5jCkBAIC0xNDUsMTEgKzE0NSw2IEBACiAJcmV0dXJuIGRyaXZlLT5kaXNrX29wcy0+ZG9fcmVxdWVzdChkcml2ZSwgcnEsIHNlY3Rvcik7CiB9CiAKLXN0YXRpYyBpbnQgaWRlX2dkX2VuZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IHVwdG9kYXRlLCBpbnQgbnJzZWNzKQotewotCXJldHVybiBkcml2ZS0+ZGlza19vcHMtPmVuZF9yZXF1ZXN0KGRyaXZlLCB1cHRvZGF0ZSwgbnJzZWNzKTsKLX0KLQogc3RhdGljIHN0cnVjdCBpZGVfZHJpdmVyIGlkZV9nZF9kcml2ZXIgPSB7CiAJLmdlbl9kcml2ZXIgPSB7CiAJCS5vd25lcgkJPSBUSElTX01PRFVMRSwKQEAgLTE2Miw3ICsxNTcsNiBAQAogCS5zaHV0ZG93bgkJPSBpZGVfZ2Rfc2h1dGRvd24sCiAJLnZlcnNpb24JCT0gSURFX0dEX1ZFUlNJT04sCiAJLmRvX3JlcXVlc3QJCT0gaWRlX2dkX2RvX3JlcXVlc3QsCi0JLmVuZF9yZXF1ZXN0CQk9IGlkZV9nZF9lbmRfcmVxdWVzdCwKICNpZmRlZiBDT05GSUdfSURFX1BST0NfRlMKIAkucHJvY19lbnRyaWVzCQk9IGlkZV9kaXNrX3Byb2NfZW50cmllcywKIAkucHJvY19kZXZzZXRzCQk9IGlkZV9kaXNrX3Byb2NfZGV2c2V0cywKQEAgLTE4Miw3ICsxNzYsNyBAQAogCiAJZHJpdmUgPSBpZGtwLT5kcml2ZTsKIAotCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiQ2FsbCAlc1xuIiwgX19mdW5jX18pOworCWlkZV9kZWJ1Z19sb2coSURFX0RCR19GVU5DLCAiZW50ZXIiKTsKIAogCWlka3AtPm9wZW5lcnMrKzsKIApAQCAtMjMyLDcgKzIyNiw3IEBACiAJc3RydWN0IGlkZV9kaXNrX29iaiAqaWRrcCA9IGlkZV9kcnZfZyhkaXNrLCBpZGVfZGlza19vYmopOwogCWlkZV9kcml2ZV90ICpkcml2ZSA9IGlka3AtPmRyaXZlOwogCi0JaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJDYWxsICVzXG4iLCBfX2Z1bmNfXyk7CisJaWRlX2RlYnVnX2xvZyhJREVfREJHX0ZVTkMsICJlbnRlciIpOwogCiAJaWYgKGlka3AtPm9wZW5lcnMgPT0gMSkKIAkJZHJpdmUtPmRpc2tfb3BzLT5mbHVzaChkcml2ZSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtZ2QuaCBiL2RyaXZlcnMvaWRlL2lkZS1nZC5oCmluZGV4IGI2MDRiZGQuLjU1OTcwNzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1nZC5oCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1nZC5oCkBAIC04LDcgKzgsNyBAQAogI2RlZmluZSBJREVfR0RfREVCVUdfTE9HCTAKIAogI2lmIElERV9HRF9ERUJVR19MT0cKLSNkZWZpbmUgaWRlX2RlYnVnX2xvZyhsdmwsIGZtdCwgYXJncy4uLikgX19pZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzKQorI2RlZmluZSBpZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzLi4uKSBfX2lkZV9kZWJ1Z19sb2cobHZsLCBmbXQsICMjIGFyZ3MpCiAjZWxzZQogI2RlZmluZSBpZGVfZGVidWdfbG9nKGx2bCwgZm10LCBhcmdzLi4uKSBkbyB7fSB3aGlsZSAoMCkKICNlbmRpZgpAQCAtMjAsOCArMjAsNiBAQAogCXN0cnVjdCBkZXZpY2UJCWRldjsKIAl1bnNpZ25lZCBpbnQJCW9wZW5lcnM7CS8qIHByb3RlY3RlZCBieSBCS0wgZm9yIG5vdyAqLwogCi0JLyogTGFzdCBmYWlsZWQgcGFja2V0IGNvbW1hbmQgKi8KLQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpmYWlsZWRfcGM7CiAJLyogdXNlZCBmb3IgYmxrX3tmcyxwY31fcmVxdWVzdCgpIHJlcXVlc3RzICovCiAJc3RydWN0IGlkZV9hdGFwaV9wYyBxdWV1ZWRfcGM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1nZW5lcmljLmMgYi9kcml2ZXJzL2lkZS9pZGUtZ2VuZXJpYy5jCmluZGV4IDgxYTUyODIuLjlkMDNlODIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1nZW5lcmljLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWdlbmVyaWMuYwpAQCAtMzIsNiArMzIsMTAgQEAKIG1vZHVsZV9wYXJhbShwcm9iZV9tYXNrLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhwcm9iZV9tYXNrLCAicHJvYmUgbWFzayBmb3IgbGVnYWN5IElTQSBJREUgcG9ydHMiKTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIGlkZV9nZW5lcmljX3BvcnRfaW5mbyA9IHsKKwkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfTk9fRE1BLAorfTsKKwogc3RhdGljIHNzaXplX3Qgc3RvcmVfYWRkKHN0cnVjdCBjbGFzcyAqY2xzLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuKQogewogCXVuc2lnbmVkIGludCBiYXNlLCBjdGw7CkBAIC00Niw3ICs1MCw3IEBACiAJaHcuaXJxID0gaXJxOwogCWh3LmNoaXBzZXQgPSBpZGVfZ2VuZXJpYzsKIAotCXJjID0gaWRlX2hvc3RfYWRkKE5VTEwsIGh3cywgTlVMTCk7CisJcmMgPSBpZGVfaG9zdF9hZGQoJmlkZV9nZW5lcmljX3BvcnRfaW5mbywgaHdzLCBOVUxMKTsKIAlpZiAocmMpCiAJCXJldHVybiByYzsKIApAQCAtMTg0LDcgKzE4OCw3IEBACiAjZW5kaWYKIAkJCWh3LmNoaXBzZXQgPSBpZGVfZ2VuZXJpYzsKIAotCQkJcmMgPSBpZGVfaG9zdF9hZGQoTlVMTCwgaHdzLCBOVUxMKTsKKwkJCXJjID0gaWRlX2hvc3RfYWRkKCZpZGVfZ2VuZXJpY19wb3J0X2luZm8sIGh3cywgTlVMTCk7CiAJCQlpZiAocmMpIHsKIAkJCQlyZWxlYXNlX3JlZ2lvbihpb19hZGRyICsgMHgyMDYsIDEpOwogCQkJCXJlbGVhc2VfcmVnaW9uKGlvX2FkZHIsIDgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWg4MzAwLmMgYi9kcml2ZXJzL2lkZS9pZGUtaDgzMDAuYwppbmRleCA5MjcwZDMyLi5mZjgzMzllIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtaDgzMDAuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtaDgzMDAuYwpAQCAtNDQsNTMgKzQ0LDUzIEBACiAJcmV0dXJuIHI7CiB9CiAKLXN0YXRpYyB2b2lkIGg4MzAwX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQorc3RhdGljIHZvaWQgaDgzMDBfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOwotCXU4IEhJSEkgPSAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpID8gMHhFMCA6IDB4RUY7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLT50ZjsKKwl1OCBISUhJID0gKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpID8gMHhFMCA6IDB4RUY7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRkxBR0dFRCkKKwlpZiAoY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX0ZMQUdHRUQpCiAJCUhJSEkgPSAweEZGOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9EQVRBKQorCWlmIChjbWQtPmZ0Zl9mbGFncyAmIElERV9GVEZMQUdfT1VUX0RBVEEpCiAJCW1tX291dHcoKHRmLT5ob2JfZGF0YSA8PCA4KSB8IHRmLT5kYXRhLCBpb19wb3J0cy0+ZGF0YV9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFKQogCQlvdXRiKHRmLT5ob2JfZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9OU0VDVCkKIAkJb3V0Yih0Zi0+aG9iX25zZWN0LCBpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUwpCiAJCW91dGIodGYtPmhvYl9sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTSkKIAkJb3V0Yih0Zi0+aG9iX2xiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFIKQogCQlvdXRiKHRmLT5ob2JfbGJhaCwgaW9fcG9ydHMtPmxiYWhfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0ZFQVRVUkUpCiAJCW91dGIodGYtPmZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTlNFQ1QpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX05TRUNUKQogCQlvdXRiKHRmLT5uc2VjdCwgaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTCkKIAkJb3V0Yih0Zi0+bGJhbCwgaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFNKQogCQlvdXRiKHRmLT5sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCiAJCW91dGIodGYtPmxiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RFVklDRSkKIAkJb3V0YigodGYtPmRldmljZSAmIEhJSEkpIHwgZHJpdmUtPnNlbGVjdCwKIAkJICAgICBpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwogfQogCi1zdGF0aWMgdm9pZCBoODMwMF90Zl9yZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3N0YXRpYyB2b2lkIGg4MzAwX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RBVEEpIHsKKwlpZiAoY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX0lOX0RBVEEpIHsKIAkJdTE2IGRhdGEgPSBtbV9pbncoaW9fcG9ydHMtPmRhdGFfYWRkcik7CiAKIAkJdGYtPmRhdGEgPSBkYXRhICYgMHhmZjsKQEAgLTEwMCwzMSArMTAwLDMxIEBACiAJLyogYmUgc3VyZSB3ZSdyZSBsb29raW5nIGF0IHRoZSBsb3cgb3JkZXIgYml0cyAqLwogCW91dGIoQVRBX0RFVkNUTF9PQlMgJiB+MHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9GRUFUVVJFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0ZFQVRVUkUpCiAJCXRmLT5mZWF0dXJlID0gaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKIAkJdGYtPm5zZWN0ICA9IGluYihpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUwpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTCkKIAkJdGYtPmxiYWwgICA9IGluYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFNKQogCQl0Zi0+bGJhbSAgID0gaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCiAJCXRmLT5sYmFoICAgPSBpbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RFVklDRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9ERVZJQ0UpCiAJCXRmLT5kZXZpY2UgPSBpbmIoaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgeworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSB7CiAJCW91dGIoQVRBX0RFVkNUTF9PQlMgfCAweDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRkVBVFVSRSkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUpCiAJCQl0Zi0+aG9iX2ZlYXR1cmUgPSBpbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9OU0VDVCkKIAkJCXRmLT5ob2JfbnNlY3QgICA9IGluYihpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTCkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCiAJCQl0Zi0+aG9iX2xiYWwgICAgPSBpbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQU0pCiAJCQl0Zi0+aG9iX2xiYW0gICAgPSBpbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBSCkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCiAJCQl0Zi0+aG9iX2xiYWggICAgPSBpbmIoaW9fcG9ydHMtPmxiYWhfYWRkcik7CiAJfQogfQpAQCAtMTQzLDEzICsxNDMsMTMgQEAKIAkJKmJwID0gYnN3YXAoKih2b2xhdGlsZSB1MTYgKilhZGRyKTsKIH0KIAotc3RhdGljIHZvaWQgaDgzMDBfaW5wdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKK3N0YXRpYyB2b2lkIGg4MzAwX2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLAogCQkJICAgICB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJbW1faW5zdyhkcml2ZS0+aHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOwogfQogCi1zdGF0aWMgdm9pZCBoODMwMF9vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKK3N0YXRpYyB2b2lkIGg4MzAwX291dHB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwKIAkJCSAgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKIHsKIAltbV9vdXRzdyhkcml2ZS0+aHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWlvLXN0ZC5jIGIvZHJpdmVycy9pZGUvaWRlLWlvLXN0ZC5jCmluZGV4IDQ1YjQzZGQuLjJkOWM2ZGMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS1pby1zdGQuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtaW8tc3RkLmMKQEAgLTIsNiArMiwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgogI2luY2x1ZGUgPGxpbnV4L2lkZS5oPgogCisjaWYgZGVmaW5lZChDT05GSUdfQVJNKSB8fCBkZWZpbmVkKENPTkZJR19NNjhLKSB8fCBkZWZpbmVkKENPTkZJR19NSVBTKSB8fCBcCisgICAgZGVmaW5lZChDT05GSUdfUEFSSVNDKSB8fCBkZWZpbmVkKENPTkZJR19QUEMpIHx8IGRlZmluZWQoQ09ORklHX1NQQVJDKQorI2luY2x1ZGUgPGFzbS9pZGUuaD4KKyNlbHNlCisjaW5jbHVkZSA8YXNtLWdlbmVyaWMvaWRlX2lvcHMuaD4KKyNlbmRpZgorCiAvKgogICoJQ29udmVudGlvbmFsIFBJTyBvcGVyYXRpb25zIGZvciBBVEEgZGV2aWNlcwogICovCkBAIC03NSwyNCArODIsMjQgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGlkZV9zZXRfaXJxKTsKIAotdm9pZCBpZGVfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCit2b2lkIGlkZV90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLT50ZjsKIAl2b2lkICgqdGZfb3V0YikodTggYWRkciwgdW5zaWduZWQgbG9uZyBwb3J0KTsKIAl1OCBtbWlvID0gKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTU1JTykgPyAxIDogMDsKLQl1OCBISUhJID0gKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSA/IDB4RTAgOiAweEVGOworCXU4IEhJSEkgPSAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgPyAweEUwIDogMHhFRjsKIAogCWlmIChtbWlvKQogCQl0Zl9vdXRiID0gaWRlX21tX291dGI7CiAJZWxzZQogCQl0Zl9vdXRiID0gaWRlX291dGI7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRkxBR0dFRCkKKwlpZiAoY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX0ZMQUdHRUQpCiAJCUhJSEkgPSAweEZGOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9EQVRBKSB7CisJaWYgKGNtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19PVVRfREFUQSkgewogCQl1MTYgZGF0YSA9ICh0Zi0+aG9iX2RhdGEgPDwgOCkgfCB0Zi0+ZGF0YTsKIAogCQlpZiAobW1pbykKQEAgLTEwMSwzOSArMTA4LDM5IEBACiAJCQlvdXR3KGRhdGEsIGlvX3BvcnRzLT5kYXRhX2FkZHIpOwogCX0KIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFKQogCQl0Zl9vdXRiKHRmLT5ob2JfZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9OU0VDVCkKIAkJdGZfb3V0Yih0Zi0+aG9iX25zZWN0LCBpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUwpCiAJCXRmX291dGIodGYtPmhvYl9sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTSkKIAkJdGZfb3V0Yih0Zi0+aG9iX2xiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFIKQogCQl0Zl9vdXRiKHRmLT5ob2JfbGJhaCwgaW9fcG9ydHMtPmxiYWhfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0ZFQVRVUkUpCiAJCXRmX291dGIodGYtPmZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTlNFQ1QpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX05TRUNUKQogCQl0Zl9vdXRiKHRmLT5uc2VjdCwgaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBTCkKIAkJdGZfb3V0Yih0Zi0+bGJhbCwgaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFNKQogCQl0Zl9vdXRiKHRmLT5sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCiAJCXRmX291dGIodGYtPmxiYWgsIGlvX3BvcnRzLT5sYmFoX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RFVklDRSkKIAkJdGZfb3V0YigodGYtPmRldmljZSAmIEhJSEkpIHwgZHJpdmUtPnNlbGVjdCwKIAkJCSBpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX3RmX2xvYWQpOwogCi12b2lkIGlkZV90Zl9yZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3ZvaWQgaWRlX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOwogCXZvaWQgKCp0Zl9vdXRiKSh1OCBhZGRyLCB1bnNpZ25lZCBsb25nIHBvcnQpOwogCXU4ICgqdGZfaW5iKSh1bnNpZ25lZCBsb25nIHBvcnQpOwogCXU4IG1taW8gPSAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19NTUlPKSA/IDEgOiAwOwpAQCAtMTQ2LDcgKzE1Myw3IEBACiAJCXRmX2luYiAgPSBpZGVfaW5iOwogCX0KIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9EQVRBKSB7CisJaWYgKGNtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19JTl9EQVRBKSB7CiAJCXUxNiBkYXRhOwogCiAJCWlmIChtbWlvKQpAQCAtMTYxLDMxICsxNjgsMzEgQEAKIAkvKiBiZSBzdXJlIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIGxvdyBvcmRlciBiaXRzICovCiAJdGZfb3V0YihBVEFfREVWQ1RMX09CUyAmIH4weDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKIAkJdGYtPmZlYXR1cmUgPSB0Zl9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX05TRUNUKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX05TRUNUKQogCQl0Zi0+bnNlY3QgID0gdGZfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQogCQl0Zi0+bGJhbCAgID0gdGZfaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQU0pCiAJCXRmLT5sYmFtICAgPSB0Zl9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBSCkKIAkJdGYtPmxiYWggICA9IHRmX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREVWSUNFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RFVklDRSkKIAkJdGYtPmRldmljZSA9IHRmX2luYihpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSB7CisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKIAkJdGZfb3V0YihBVEFfREVWQ1RMX09CUyB8IDB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CiAKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9GRUFUVVJFKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRkVBVFVSRSkKIAkJCXRmLT5ob2JfZmVhdHVyZSA9IHRmX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9OU0VDVCkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX05TRUNUKQogCQkJdGYtPmhvYl9uc2VjdCAgID0gdGZfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTCkKIAkJCXRmLT5ob2JfbGJhbCAgICA9IHRmX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFNKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKIAkJCXRmLT5ob2JfbGJhbSAgICA9IHRmX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBSCkKIAkJCXRmLT5ob2JfbGJhaCAgICA9IHRmX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAl9CiB9CkBAIC0yMTIsNyArMjE5LDcgQEAKICAqIHNvIGlmIGFuIG9kZCBsZW4gaXMgc3BlY2lmaWVkLCBiZSBzdXJlIHRoYXQgdGhlcmUncyBhdCBsZWFzdCBvbmUKICAqIGV4dHJhIGJ5dGUgYWxsb2NhdGVkIGZvciB0aGUgYnVmZmVyLgogICovCi12b2lkIGlkZV9pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCB2b2lkICpidWYsCit2b2lkIGlkZV9pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwgdm9pZCAqYnVmLAogCQkgICAgdW5zaWduZWQgaW50IGxlbikKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CkBAIC0yNTgsNyArMjY1LDcgQEAKIC8qCiAgKiBUaGlzIGlzIHVzZWQgZm9yIG1vc3QgUElPIGRhdGEgdHJhbnNmZXJzICp0byogdGhlIElERSBpbnRlcmZhY2UKICAqLwotdm9pZCBpZGVfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIHZvaWQgKmJ1ZiwKK3ZvaWQgaWRlX291dHB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwgdm9pZCAqYnVmLAogCQkgICAgIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWlvLmMgYi9kcml2ZXJzL2lkZS9pZGUtaW8uYwppbmRleCAyZTkyNDk3Li4xYWRjNWUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtaW8uYworKysgYi9kcml2ZXJzL2lkZS9pZGUtaW8uYwpAQCAtNDAsNyArNDAsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaWRlLmg+Ci0jaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9jb21wbGV0aW9uLmg+CiAjaW5jbHVkZSA8bGludXgvcmVib290Lmg+CiAjaW5jbHVkZSA8bGludXgvY2Ryb20uaD4KQEAgLTU1LDI1ICs1NCw5IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KIAotc3RhdGljIGludCBfX2lkZV9lbmRfcmVxdWVzdChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKLQkJCSAgICAgaW50IHVwdG9kYXRlLCB1bnNpZ25lZCBpbnQgbnJfYnl0ZXMsIGludCBkZXF1ZXVlKQoraW50IGlkZV9lbmRfcnEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsIGludCBlcnJvciwKKwkgICAgICAgdW5zaWduZWQgaW50IG5yX2J5dGVzKQogewotCWludCByZXQgPSAxOwotCWludCBlcnJvciA9IDA7Ci0KLQlpZiAodXB0b2RhdGUgPD0gMCkKLQkJZXJyb3IgPSB1cHRvZGF0ZSA/IHVwdG9kYXRlIDogLUVJTzsKLQotCS8qCi0JICogaWYgZmFpbGZhc3QgaXMgc2V0IG9uIGEgcmVxdWVzdCwgb3ZlcnJpZGUgbnVtYmVyIG9mIHNlY3RvcnMgYW5kCi0JICogY29tcGxldGUgdGhlIHdob2xlIHJlcXVlc3QgcmlnaHQgbm93Ci0JICovCi0JaWYgKGJsa19ub3JldHJ5X3JlcXVlc3QocnEpICYmIGVycm9yKQotCQlucl9ieXRlcyA9IHJxLT5oYXJkX25yX3NlY3RvcnMgPDwgOTsKLQotCWlmICghYmxrX2ZzX3JlcXVlc3QocnEpICYmIGVycm9yICYmICFycS0+ZXJyb3JzKQotCQlycS0+ZXJyb3JzID0gLUVJTzsKLQogCS8qCiAJICogZGVjaWRlIHdoZXRoZXIgdG8gcmVlbmFibGUgRE1BIC0tIDMgaXMgYSByYW5kb20gbWFnaWMgZm9yIG5vdywKIAkgKiBpZiB3ZSBETUEgdGltZW91dCBtb3JlIHRoYW4gMyB0aW1lcywganVzdCBzdGF5IGluIFBJTwpAQCAtODQsMTI3ICs2Nyw4NiBAQAogCQlpZGVfZG1hX29uKGRyaXZlKTsKIAl9CiAKLQlpZiAoIWJsa19lbmRfcmVxdWVzdChycSwgZXJyb3IsIG5yX2J5dGVzKSkKLQkJcmV0ID0gMDsKLQotCWlmIChyZXQgPT0gMCAmJiBkZXF1ZXVlKQotCQlkcml2ZS0+aHdpZi0+cnEgPSBOVUxMOwotCi0JcmV0dXJuIHJldDsKKwlyZXR1cm4gYmxrX2VuZF9yZXF1ZXN0KHJxLCBlcnJvciwgbnJfYnl0ZXMpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2VuZF9ycSk7CiAKLS8qKgotICoJaWRlX2VuZF9yZXF1ZXN0CQktCWNvbXBsZXRlIGFuIElERSBJL08KLSAqCUBkcml2ZTogSURFIGRldmljZSBmb3IgdGhlIEkvTwotICoJQHVwdG9kYXRlOgotICoJQG5yX3NlY3RvcnM6IG51bWJlciBvZiBzZWN0b3JzIGNvbXBsZXRlZAotICoKLSAqCVRoaXMgaXMgb3VyIGVuZF9yZXF1ZXN0IHdyYXBwZXIgZnVuY3Rpb24uIFdlIGNvbXBsZXRlIHRoZSBJL08KLSAqCXVwZGF0ZSByYW5kb20gbnVtYmVyIGlucHV0IGFuZCBkZXF1ZXVlIHRoZSByZXF1ZXN0LCB3aGljaCBpZgotICoJaXQgd2FzIHRhZ2dlZCBtYXkgYmUgb3V0IG9mIG9yZGVyLgotICovCi0KLWludCBpZGVfZW5kX3JlcXVlc3QgKGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IHVwdG9kYXRlLCBpbnQgbnJfc2VjdG9ycykKK3ZvaWQgaWRlX2NvbXBsZXRlX2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsIHU4IHN0YXQsIHU4IGVycikKIHsKLQl1bnNpZ25lZCBpbnQgbnJfYnl0ZXMgPSBucl9zZWN0b3JzIDw8IDk7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gZHJpdmUtPmh3aWYtPnJxOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmNtZC0+dGY7CisJc3RydWN0IHJlcXVlc3QgKnJxID0gY21kLT5ycTsKKwl1OCB0Zl9jbWQgPSB0Zi0+Y29tbWFuZDsKIAotCWlmICghbnJfYnl0ZXMpIHsKLQkJaWYgKGJsa19wY19yZXF1ZXN0KHJxKSkKLQkJCW5yX2J5dGVzID0gcnEtPmRhdGFfbGVuOwotCQllbHNlCi0JCQlucl9ieXRlcyA9IHJxLT5oYXJkX2N1cl9zZWN0b3JzIDw8IDk7CisJdGYtPmVycm9yID0gZXJyOworCXRmLT5zdGF0dXMgPSBzdGF0OworCisJZHJpdmUtPmh3aWYtPnRwX29wcy0+dGZfcmVhZChkcml2ZSwgY21kKTsKKworCWlmICgoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19DVVNUT01fSEFORExFUikgJiYKKwkgICAgdGZfY21kID09IEFUQV9DTURfSURMRUlNTUVESUFURSkgeworCQlpZiAodGYtPmxiYWwgIT0gMHhjNCkgeworCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaGVhZCB1bmxvYWQgZmFpbGVkIVxuIiwKKwkJCSAgICAgICBkcml2ZS0+bmFtZSk7CisJCQlpZGVfdGZfZHVtcChkcml2ZS0+bmFtZSwgdGYpOworCQl9IGVsc2UKKwkJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1BBUktFRDsKIAl9CiAKLQlyZXR1cm4gX19pZGVfZW5kX3JlcXVlc3QoZHJpdmUsIHJxLCB1cHRvZGF0ZSwgbnJfYnl0ZXMsIDEpOworCWlmIChycSAmJiBycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQVRBX1RBU0tGSUxFKQorCQltZW1jcHkocnEtPnNwZWNpYWwsIGNtZCwgc2l6ZW9mKCpjbWQpKTsKKworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0RZTikKKwkJa2ZyZWUoY21kKTsKIH0KLUVYUE9SVF9TWU1CT0woaWRlX2VuZF9yZXF1ZXN0KTsKIAotLyoqCi0gKglpZGVfZW5kX2RlcXVldWVkX3JlcXVlc3QJLQljb21wbGV0ZSBhbiBJREUgSS9PCi0gKglAZHJpdmU6IElERSBkZXZpY2UgZm9yIHRoZSBJL08KLSAqCUB1cHRvZGF0ZToKLSAqCUBucl9zZWN0b3JzOiBudW1iZXIgb2Ygc2VjdG9ycyBjb21wbGV0ZWQKLSAqCi0gKglDb21wbGV0ZSBhbiBJL08gdGhhdCBpcyBubyBsb25nZXIgb24gdGhlIHJlcXVlc3QgcXVldWUuIFRoaXMKLSAqCXR5cGljYWxseSBvY2N1cnMgd2hlbiB3ZSBwdWxsIHRoZSByZXF1ZXN0IGFuZCBpc3N1ZSBhIFJFUVVFU1RfU0VOU0UuCi0gKglXZSBtdXN0IHN0aWxsIGZpbmlzaCB0aGUgb2xkIHJlcXVlc3QgYnV0IHdlIG11c3Qgbm90IHRhbXBlciB3aXRoIHRoZQotICoJcXVldWUgaW4gdGhlIG1lYW50aW1lLgotICoKLSAqCU5PVEU6IFRoaXMgcGF0aCBkb2VzIG5vdCBoYW5kbGUgYmFycmllciwgYnV0IGJhcnJpZXIgaXMgbm90IHN1cHBvcnRlZAotICoJb24gaWRlLWNkIGFueXdheS4KLSAqLwotCi1pbnQgaWRlX2VuZF9kZXF1ZXVlZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAotCQkJICAgICBpbnQgdXB0b2RhdGUsIGludCBucl9zZWN0b3JzKQorLyogb2Jzb2xldGUsIGJsa19ycV9ieXRlcygpIHNob3VsZCBiZSB1c2VkIGluc3RlYWQgKi8KK3Vuc2lnbmVkIGludCBpZGVfcnFfYnl0ZXMoc3RydWN0IHJlcXVlc3QgKnJxKQogewotCUJVR19PTighYmxrX3JxX3N0YXJ0ZWQocnEpKTsKLQotCXJldHVybiBfX2lkZV9lbmRfcmVxdWVzdChkcml2ZSwgcnEsIHVwdG9kYXRlLCBucl9zZWN0b3JzIDw8IDksIDApOworCWlmIChibGtfcGNfcmVxdWVzdChycSkpCisJCXJldHVybiBycS0+ZGF0YV9sZW47CisJZWxzZQorCQlyZXR1cm4gcnEtPmhhcmRfY3VyX3NlY3RvcnMgPDwgOTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9lbmRfZGVxdWV1ZWRfcmVxdWVzdCk7CitFWFBPUlRfU1lNQk9MX0dQTChpZGVfcnFfYnl0ZXMpOwogCi0vKioKLSAqCWlkZV9lbmRfZHJpdmVfY21kCS0JZW5kIGFuIGV4cGxpY2l0IGRyaXZlIGNvbW1hbmQKLSAqCUBkcml2ZTogY29tbWFuZCAKLSAqCUBzdGF0OiBzdGF0dXMgYml0cwotICoJQGVycjogZXJyb3IgYml0cwotICoKLSAqCUNsZWFuIHVwIGFmdGVyIHN1Y2Nlc3MvZmFpbHVyZSBvZiBhbiBleHBsaWNpdCBkcml2ZSBjb21tYW5kLgotICoJVGhlc2UgZ2V0IHRocm93biBvbnRvIHRoZSBxdWV1ZSBzbyB0aGV5IGFyZSBzeW5jaHJvbml6ZWQgd2l0aAotICoJcmVhbCBJL08gb3BlcmF0aW9ucyBvbiB0aGUgZHJpdmUuCi0gKgotICoJSW4gTEJBNDggbW9kZSB3ZSBoYXZlIHRvIHJlYWQgdGhlIHJlZ2lzdGVyIHNldCB0d2ljZSB0byBnZXQKLSAqCWFsbCB0aGUgZXh0cmEgaW5mb3JtYXRpb24gb3V0LgotICovCi0gCi12b2lkIGlkZV9lbmRfZHJpdmVfY21kIChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IHN0YXQsIHU4IGVycikKK2ludCBpZGVfY29tcGxldGVfcnEoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgZXJyb3IsIHVuc2lnbmVkIGludCBucl9ieXRlcykKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+cnE7CisJaW50IHJjOwogCi0JaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9BVEFfVEFTS0ZJTEUpIHsKLQkJaWRlX3Rhc2tfdCAqdGFzayA9IChpZGVfdGFza190ICopcnEtPnNwZWNpYWw7CisJLyoKKwkgKiBpZiBmYWlsZmFzdCBpcyBzZXQgb24gYSByZXF1ZXN0LCBvdmVycmlkZSBudW1iZXIgb2Ygc2VjdG9ycworCSAqIGFuZCBjb21wbGV0ZSB0aGUgd2hvbGUgcmVxdWVzdCByaWdodCBub3cKKwkgKi8KKwlpZiAoYmxrX25vcmV0cnlfcmVxdWVzdChycSkgJiYgZXJyb3IgPD0gMCkKKwkJbnJfYnl0ZXMgPSBycS0+aGFyZF9ucl9zZWN0b3JzIDw8IDk7CiAKLQkJaWYgKHRhc2spIHsKLQkJCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOworCXJjID0gaWRlX2VuZF9ycShkcml2ZSwgcnEsIGVycm9yLCBucl9ieXRlcyk7CisJaWYgKHJjID09IDApCisJCWh3aWYtPnJxID0gTlVMTDsKIAotCQkJdGYtPmVycm9yID0gZXJyOwotCQkJdGYtPnN0YXR1cyA9IHN0YXQ7Ci0KLQkJCWRyaXZlLT5od2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsIHRhc2spOwotCi0JCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRFlOKQotCQkJCWtmcmVlKHRhc2spOwotCQl9Ci0JfSBlbHNlIGlmIChibGtfcG1fcmVxdWVzdChycSkpIHsKLQkJc3RydWN0IHJlcXVlc3RfcG1fc3RhdGUgKnBtID0gcnEtPmRhdGE7Ci0KLQkJaWRlX2NvbXBsZXRlX3Bvd2VyX3N0ZXAoZHJpdmUsIHJxKTsKLQkJaWYgKHBtLT5wbV9zdGVwID09IElERV9QTV9DT01QTEVURUQpCi0JCQlpZGVfY29tcGxldGVfcG1fcmVxdWVzdChkcml2ZSwgcnEpOwotCQlyZXR1cm47Ci0JfQotCi0JaHdpZi0+cnEgPSBOVUxMOwotCi0JcnEtPmVycm9ycyA9IGVycjsKLQotCWlmICh1bmxpa2VseShibGtfZW5kX3JlcXVlc3QocnEsIChycS0+ZXJyb3JzID8gLUVJTyA6IDApLAotCQkJCSAgICAgYmxrX3JxX2J5dGVzKHJxKSkpKQotCQlCVUcoKTsKKwlyZXR1cm4gcmM7CiB9Ci1FWFBPUlRfU1lNQk9MKGlkZV9lbmRfZHJpdmVfY21kKTsKK0VYUE9SVF9TWU1CT0woaWRlX2NvbXBsZXRlX3JxKTsKIAogdm9pZCBpZGVfa2lsbF9ycShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKLQlpZiAocnEtPnJxX2Rpc2spIHsKLQkJc3RydWN0IGlkZV9kcml2ZXIgKmRydjsKKwl1OCBkcnZfcmVxID0gYmxrX3NwZWNpYWxfcmVxdWVzdChycSkgJiYgcnEtPnJxX2Rpc2s7CisJdTggbWVkaWEgPSBkcml2ZS0+bWVkaWE7CiAKLQkJZHJ2ID0gKihzdHJ1Y3QgaWRlX2RyaXZlciAqKilycS0+cnFfZGlzay0+cHJpdmF0ZV9kYXRhOwotCQlkcnYtPmVuZF9yZXF1ZXN0KGRyaXZlLCAwLCAwKTsKLQl9IGVsc2UKLQkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCAwLCAwKTsKKwlkcml2ZS0+ZmFpbGVkX3BjID0gTlVMTDsKKworCWlmICgobWVkaWEgPT0gaWRlX2Zsb3BweSB8fCBtZWRpYSA9PSBpZGVfdGFwZSkgJiYgZHJ2X3JlcSkgeworCQlycS0+ZXJyb3JzID0gMDsKKwkJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCAwLCBibGtfcnFfYnl0ZXMocnEpKTsKKwl9IGVsc2UgeworCQlpZiAobWVkaWEgPT0gaWRlX3RhcGUpCisJCQlycS0+ZXJyb3JzID0gSURFX0RSVl9FUlJPUl9HRU5FUkFMOworCQllbHNlIGlmIChibGtfZnNfcmVxdWVzdChycSkgPT0gMCAmJiBycS0+ZXJyb3JzID09IDApCisJCQlycS0+ZXJyb3JzID0gLUVJTzsKKwkJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCAtRUlPLCBpZGVfcnFfYnl0ZXMocnEpKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIGlkZV90Zl9zZXRfc3BlY2lmeV9jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZikKQEAgLTIzMiwyMCArMTc0LDIwIEBACiBzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZV9kaXNrX3NwZWNpYWwoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCXNwZWNpYWxfdCAqcyA9ICZkcml2ZS0+c3BlY2lhbDsKLQlpZGVfdGFza190IGFyZ3M7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCi0JbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoaWRlX3Rhc2tfdCkpOwotCWFyZ3MuZGF0YV9waGFzZSA9IFRBU0tGSUxFX05PX0RBVEE7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQucHJvdG9jb2wgPSBBVEFfUFJPVF9OT0RBVEE7CiAKIAlpZiAocy0+Yi5zZXRfZ2VvbWV0cnkpIHsKIAkJcy0+Yi5zZXRfZ2VvbWV0cnkgPSAwOwotCQlpZGVfdGZfc2V0X3NwZWNpZnlfY21kKGRyaXZlLCAmYXJncy50Zik7CisJCWlkZV90Zl9zZXRfc3BlY2lmeV9jbWQoZHJpdmUsICZjbWQudGYpOwogCX0gZWxzZSBpZiAocy0+Yi5yZWNhbGlicmF0ZSkgewogCQlzLT5iLnJlY2FsaWJyYXRlID0gMDsKLQkJaWRlX3RmX3NldF9yZXN0b3JlX2NtZChkcml2ZSwgJmFyZ3MudGYpOworCQlpZGVfdGZfc2V0X3Jlc3RvcmVfY21kKGRyaXZlLCAmY21kLnRmKTsKIAl9IGVsc2UgaWYgKHMtPmIuc2V0X211bHRtb2RlKSB7CiAJCXMtPmIuc2V0X211bHRtb2RlID0gMDsKLQkJaWRlX3RmX3NldF9zZXRtdWx0X2NtZChkcml2ZSwgJmFyZ3MudGYpOworCQlpZGVfdGZfc2V0X3NldG11bHRfY21kKGRyaXZlLCAmY21kLnRmKTsKIAl9IGVsc2UgaWYgKHMtPmFsbCkgewogCQlpbnQgc3BlY2lhbCA9IHMtPmFsbDsKIAkJcy0+YWxsID0gMDsKQEAgLTI1MywxMCArMTk1LDEwIEBACiAJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CiAKLQlhcmdzLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRSB8Ci0JCQlJREVfVEZMQUdfQ1VTVE9NX0hBTkRMRVI7CisJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRSB8CisJCSAgICAgICBJREVfVEZMQUdfQ1VTVE9NX0hBTkRMRVI7CiAKLQlkb19yd190YXNrZmlsZShkcml2ZSwgJmFyZ3MpOworCWRvX3J3X3Rhc2tmaWxlKGRyaXZlLCAmY21kKTsKIAogCXJldHVybiBpZGVfc3RhcnRlZDsKIH0KQEAgLTI4NiwzMyArMjI4LDI5IEBACiAJcmV0dXJuIGlkZV9zdG9wcGVkOwogfQogCi12b2lkIGlkZV9tYXBfc2coaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCit2b2lkIGlkZV9tYXBfc2coaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gaHdpZi0+c2dfdGFibGU7CisJc3RydWN0IHJlcXVlc3QgKnJxID0gY21kLT5ycTsKIAogCWlmIChycS0+Y21kX3R5cGUgPT0gUkVRX1RZUEVfQVRBX1RBU0tGSUxFKSB7CiAJCXNnX2luaXRfb25lKHNnLCBycS0+YnVmZmVyLCBycS0+bnJfc2VjdG9ycyAqIFNFQ1RPUl9TSVpFKTsKLQkJaHdpZi0+c2dfbmVudHMgPSAxOworCQljbWQtPnNnX25lbnRzID0gMTsKIAl9IGVsc2UgaWYgKCFycS0+YmlvKSB7CiAJCXNnX2luaXRfb25lKHNnLCBycS0+ZGF0YSwgcnEtPmRhdGFfbGVuKTsKLQkJaHdpZi0+c2dfbmVudHMgPSAxOwotCX0gZWxzZSB7Ci0JCWh3aWYtPnNnX25lbnRzID0gYmxrX3JxX21hcF9zZyhkcml2ZS0+cXVldWUsIHJxLCBzZyk7Ci0JfQorCQljbWQtPnNnX25lbnRzID0gMTsKKwl9IGVsc2UKKwkJY21kLT5zZ19uZW50cyA9IGJsa19ycV9tYXBfc2coZHJpdmUtPnF1ZXVlLCBycSwgc2cpOwogfQotCiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfbWFwX3NnKTsKIAotdm9pZCBpZGVfaW5pdF9zZ19jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCit2b2lkIGlkZV9pbml0X3NnX2NtZChzdHJ1Y3QgaWRlX2NtZCAqY21kLCB1bnNpZ25lZCBpbnQgbnJfYnl0ZXMpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCi0JaHdpZi0+bnNlY3QgPSBod2lmLT5ubGVmdCA9IHJxLT5ucl9zZWN0b3JzOwotCWh3aWYtPmN1cnNnX29mcyA9IDA7Ci0JaHdpZi0+Y3Vyc2cgPSBOVUxMOworCWNtZC0+bmJ5dGVzID0gY21kLT5ubGVmdCA9IG5yX2J5dGVzOworCWNtZC0+Y3Vyc2dfb2ZzID0gMDsKKwljbWQtPmN1cnNnID0gTlVMTDsKIH0KLQogRVhQT1JUX1NZTUJPTF9HUEwoaWRlX2luaXRfc2dfY21kKTsKIAogLyoqCkBAIC0zMzAsMjQgKzI2OCwxNSBAQAogc3RhdGljIGlkZV9zdGFydHN0b3BfdCBleGVjdXRlX2RyaXZlX2NtZCAoaWRlX2RyaXZlX3QgKmRyaXZlLAogCQlzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCWlkZV90YXNrX3QgKnRhc2sgPSBycS0+c3BlY2lhbDsKKwlzdHJ1Y3QgaWRlX2NtZCAqY21kID0gcnEtPnNwZWNpYWw7CiAKLQlpZiAodGFzaykgewotCQlod2lmLT5kYXRhX3BoYXNlID0gdGFzay0+ZGF0YV9waGFzZTsKLQotCQlzd2l0Y2ggKGh3aWYtPmRhdGFfcGhhc2UpIHsKLQkJY2FzZSBUQVNLRklMRV9NVUxUSV9PVVQ6Ci0JCWNhc2UgVEFTS0ZJTEVfT1VUOgotCQljYXNlIFRBU0tGSUxFX01VTFRJX0lOOgotCQljYXNlIFRBU0tGSUxFX0lOOgotCQkJaWRlX2luaXRfc2dfY21kKGRyaXZlLCBycSk7Ci0JCQlpZGVfbWFwX3NnKGRyaXZlLCBycSk7Ci0JCWRlZmF1bHQ6Ci0JCQlicmVhazsKKwlpZiAoY21kKSB7CisJCWlmIChjbWQtPnByb3RvY29sID09IEFUQV9QUk9UX1BJTykgeworCQkJaWRlX2luaXRfc2dfY21kKGNtZCwgcnEtPm5yX3NlY3RvcnMgPDwgOSk7CisJCQlpZGVfbWFwX3NnKGRyaXZlLCBjbWQpOwogCQl9CiAKLQkJcmV0dXJuIGRvX3J3X3Rhc2tmaWxlKGRyaXZlLCB0YXNrKTsKKwkJcmV0dXJuIGRvX3J3X3Rhc2tmaWxlKGRyaXZlLCBjbWQpOwogCX0KIAogIAkvKgpAQCAtMzU3LDggKzI4Niw4IEBACiAjaWZkZWYgREVCVUcKICAJcHJpbnRrKCIlczogRFJJVkVfQ01EIChudWxsKVxuIiwgZHJpdmUtPm5hbWUpOwogI2VuZGlmCi0JaWRlX2VuZF9kcml2ZV9jbWQoZHJpdmUsIGh3aWYtPnRwX29wcy0+cmVhZF9zdGF0dXMoaHdpZiksCi0JCQkgIGlkZV9yZWFkX2Vycm9yKGRyaXZlKSk7CisJcnEtPmVycm9ycyA9IDA7CisJaWRlX2NvbXBsZXRlX3JxKGRyaXZlLCAwLCBibGtfcnFfYnl0ZXMocnEpKTsKIAogIAlyZXR1cm4gaWRlX3N0b3BwZWQ7CiB9CkBAIC0zNzYsOSArMzA1LDcgQEAKIAljYXNlIFJFUV9EUklWRV9SRVNFVDoKIAkJcmV0dXJuIGlkZV9kb19yZXNldChkcml2ZSk7CiAJZGVmYXVsdDoKLQkJYmxrX2R1bXBfcnFfZmxhZ3MocnEsICJpZGVfc3BlY2lhbF9ycSAtIGJhZCByZXF1ZXN0Iik7Ci0JCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgMCwgMCk7Ci0JCXJldHVybiBpZGVfc3RvcHBlZDsKKwkJQlVHKCk7CiAJfQogfQogCkBAIC00MzgsNyArMzY1LDcgQEAKIAkJCXN0YXJ0c3RvcCA9IGlkZV9zdGFydF9wb3dlcl9zdGVwKGRyaXZlLCBycSk7CiAJCQlpZiAoc3RhcnRzdG9wID09IGlkZV9zdG9wcGVkICYmCiAJCQkgICAgcG0tPnBtX3N0ZXAgPT0gSURFX1BNX0NPTVBMRVRFRCkKLQkJCQlpZGVfY29tcGxldGVfcG1fcmVxdWVzdChkcml2ZSwgcnEpOworCQkJCWlkZV9jb21wbGV0ZV9wbV9ycShkcml2ZSwgcnEpOwogCQkJcmV0dXJuIHN0YXJ0c3RvcDsKIAkJfSBlbHNlIGlmICghcnEtPnJxX2Rpc2sgJiYgYmxrX3NwZWNpYWxfcmVxdWVzdChycSkpCiAJCQkvKgpAQCAtNTAxLDggKzQyOCw4IEBACiAJaWYgKGhvc3QtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfU0VSSUFMSVpFKSB7CiAJCXJjID0gdGVzdF9hbmRfc2V0X2JpdF9sb2NrKElERV9IT1NUX0JVU1ksICZob3N0LT5ob3N0X2J1c3kpOwogCQlpZiAocmMgPT0gMCkgewotCQkJLyogZm9yIGF0YXJpIG9ubHkgKi8KLQkJCWlkZV9nZXRfbG9jayhpZGVfaW50ciwgaHdpZik7CisJCQlpZiAoaG9zdC0+Z2V0X2xvY2spCisJCQkJaG9zdC0+Z2V0X2xvY2soaWRlX2ludHIsIGh3aWYpOwogCQl9CiAJfQogCXJldHVybiByYzsKQEAgLTUxMSw4ICs0MzgsOCBAQAogc3RhdGljIGlubGluZSB2b2lkIGlkZV91bmxvY2tfaG9zdChzdHJ1Y3QgaWRlX2hvc3QgKmhvc3QpCiB7CiAJaWYgKGhvc3QtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfU0VSSUFMSVpFKSB7Ci0JCS8qIGZvciBhdGFyaSBvbmx5ICovCi0JCWlkZV9yZWxlYXNlX2xvY2soKTsKKwkJaWYgKGhvc3QtPnJlbGVhc2VfbG9jaykKKwkJCWhvc3QtPnJlbGVhc2VfbG9jaygpOwogCQljbGVhcl9iaXRfdW5sb2NrKElERV9IT1NUX0JVU1ksICZob3N0LT5ob3N0X2J1c3kpOwogCX0KIH0KQEAgLTcyNCw2ICs2NTEsNyBAQAogCQkJfQogCQl9CiAJCWh3aWYtPmhhbmRsZXIgPSBOVUxMOworCQlod2lmLT5leHBpcnkgPSBOVUxMOwogCQkvKgogCQkgKiBXZSBuZWVkIHRvIHNpbXVsYXRlIGEgcmVhbCBpbnRlcnJ1cHQgd2hlbiBpbnZva2luZwogCQkgKiB0aGUgaGFuZGxlcigpIGZ1bmN0aW9uLCB3aGljaCBtZWFucyB3ZSBuZWVkIHRvCkBAIC03MzksNyArNjY3LDggQEAKIAkJfSBlbHNlIGlmIChkcml2ZV9pc19yZWFkeShkcml2ZSkpIHsKIAkJCWlmIChkcml2ZS0+d2FpdGluZ19mb3JfZG1hKQogCQkJCWh3aWYtPmRtYV9vcHMtPmRtYV9sb3N0X2lycShkcml2ZSk7Ci0JCQkodm9pZClpZGVfYWNrX2ludHIoaHdpZik7CisJCQlpZiAoaHdpZi0+YWNrX2ludHIpCisJCQkJaHdpZi0+YWNrX2ludHIoaHdpZik7CiAJCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogbG9zdCBpbnRlcnJ1cHRcbiIsCiAJCQkJZHJpdmUtPm5hbWUpOwogCQkJc3RhcnRzdG9wID0gaGFuZGxlcihkcml2ZSk7CkBAIC04NDAsNiArNzY5LDcgQEAKIGlycXJldHVybl90IGlkZV9pbnRyIChpbnQgaXJxLCB2b2lkICpkZXZfaWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IChpZGVfaHdpZl90ICopZGV2X2lkOworCXN0cnVjdCBpZGVfaG9zdCAqaG9zdCA9IGh3aWYtPmhvc3Q7CiAJaWRlX2RyaXZlX3QgKnVuaW5pdGlhbGl6ZWRfdmFyKGRyaXZlKTsKIAlpZGVfaGFuZGxlcl90ICpoYW5kbGVyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC04NDcsMTQgKzc3NywxNCBAQAogCWlycXJldHVybl90IGlycV9yZXQgPSBJUlFfTk9ORTsKIAlpbnQgcGx1Z19kZXZpY2UgPSAwOwogCi0JaWYgKGh3aWYtPmhvc3QtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfU0VSSUFMSVpFKSB7Ci0JCWlmIChod2lmICE9IGh3aWYtPmhvc3QtPmN1cl9wb3J0KQorCWlmIChob3N0LT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX1NFUklBTElaRSkgeworCQlpZiAoaHdpZiAhPSBob3N0LT5jdXJfcG9ydCkKIAkJCWdvdG8gb3V0X2Vhcmx5OwogCX0KIAogCXNwaW5fbG9ja19pcnFzYXZlKCZod2lmLT5sb2NrLCBmbGFncyk7CiAKLQlpZiAoIWlkZV9hY2tfaW50cihod2lmKSkKKwlpZiAoaHdpZi0+YWNrX2ludHIgJiYgaHdpZi0+YWNrX2ludHIoaHdpZikgPT0gMCkKIAkJZ290byBvdXQ7CiAKIAloYW5kbGVyID0gaHdpZi0+aGFuZGxlcjsKQEAgLTg3MSwyNyArODAxLDE5IEBACiAJCSAqCiAJCSAqIEZvciBQQ0ksIHdlIGNhbm5vdCB0ZWxsIHRoZSBkaWZmZXJlbmNlLAogCQkgKiBzbyBpbiB0aGF0IGNhc2Ugd2UganVzdCBpZ25vcmUgaXQgYW5kIGhvcGUgaXQgZ29lcyBhd2F5LgotCQkgKgotCQkgKiBGSVhNRTogdW5leHBlY3RlZF9pbnRyIHNob3VsZCBiZSBod2lmLT4gdGhlbiB3ZSBjYW4KLQkJICogcmVtb3ZlIGFsbCB0aGUgaWZkZWYgUENJIGNyYXAKIAkJICovCi0jaWZkZWYgQ09ORklHX0JMS19ERVZfSURFUENJCi0JCWlmIChod2lmLT5jaGlwc2V0ICE9IGlkZV9wY2kpCi0jZW5kaWYJLyogQ09ORklHX0JMS19ERVZfSURFUENJICovCi0JCXsKKwkJaWYgKChob3N0LT5pcnFfZmxhZ3MgJiBJUlFGX1NIQVJFRCkgPT0gMCkgewogCQkJLyoKIAkJCSAqIFByb2JhYmx5IG5vdCBhIHNoYXJlZCBQQ0kgaW50ZXJydXB0LAogCQkJICogc28gd2UgY2FuIHNhZmVseSB0cnkgdG8gZG8gc29tZXRoaW5nIGFib3V0IGl0OgogCQkJICovCiAJCQl1bmV4cGVjdGVkX2ludHIoaXJxLCBod2lmKTsKLSNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVQQ0kKIAkJfSBlbHNlIHsKIAkJCS8qCiAJCQkgKiBXaGFjayB0aGUgc3RhdHVzIHJlZ2lzdGVyLCBqdXN0IGluIGNhc2UKIAkJCSAqIHdlIGhhdmUgYSBsZWZ0b3ZlciBwZW5kaW5nIElSUS4KIAkJCSAqLwogCQkJKHZvaWQpaHdpZi0+dHBfb3BzLT5yZWFkX3N0YXR1cyhod2lmKTsKLSNlbmRpZiAvKiBDT05GSUdfQkxLX0RFVl9JREVQQ0kgKi8KIAkJfQogCQlnb3RvIG91dDsKIAl9CkBAIC05MDksNiArODMxLDcgQEAKIAkJZ290byBvdXQ7CiAKIAlod2lmLT5oYW5kbGVyID0gTlVMTDsKKwlod2lmLT5leHBpcnkgPSBOVUxMOwogCWh3aWYtPnJlcV9nZW4rKzsKIAlkZWxfdGltZXIoJmh3aWYtPnRpbWVyKTsKIAlzcGluX3VubG9jaygmaHdpZi0+bG9jayk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtaW9jdGxzLmMgYi9kcml2ZXJzL2lkZS9pZGUtaW9jdGxzLmMKaW5kZXggMWJlMjYzZS4uNzcwMTQyNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWlvY3Rscy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1pb2N0bHMuYwpAQCAtMTExLDEzICsxMTEsMTMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBpZGVfY21kX2lvY3RsKGlkZV9kcml2ZV90ICpkcml2ZSwgdW5zaWduZWQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKK3N0YXRpYyBpbnQgaWRlX2NtZF9pb2N0bChpZGVfZHJpdmVfdCAqZHJpdmUsIHVuc2lnbmVkIGxvbmcgYXJnKQogewogCXU4ICpidWYgPSBOVUxMOwogCWludCBidWZzaXplID0gMCwgZXJyID0gMDsKIAl1OCBhcmdzWzRdLCB4ZmVyX3JhdGUgPSAwOwotCWlkZV90YXNrX3QgdGZhcmdzOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRmYXJncy50ZjsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLnRmOwogCXUxNiAqaWQgPSBkcml2ZS0+aWQ7CiAKIAlpZiAoTlVMTCA9PSAodm9pZCAqKSBhcmcpIHsKQEAgLTEzNCwyNCArMTM0LDI0IEBACiAJaWYgKGNvcHlfZnJvbV91c2VyKGFyZ3MsICh2b2lkIF9fdXNlciAqKWFyZywgNCkpCiAJCXJldHVybiAtRUZBVUxUOwogCi0JbWVtc2V0KCZ0ZmFyZ3MsIDAsIHNpemVvZihpZGVfdGFza190KSk7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKIAl0Zi0+ZmVhdHVyZSA9IGFyZ3NbMl07CiAJaWYgKGFyZ3NbMF0gPT0gQVRBX0NNRF9TTUFSVCkgewogCQl0Zi0+bnNlY3QgPSBhcmdzWzNdOwogCQl0Zi0+bGJhbCAgPSBhcmdzWzFdOwogCQl0Zi0+bGJhbSAgPSAweDRmOwogCQl0Zi0+bGJhaCAgPSAweGMyOwotCQl0ZmFyZ3MudGZfZmxhZ3MgPSBJREVfVEZMQUdfT1VUX1RGIHwgSURFX1RGTEFHX0lOX05TRUNUOworCQljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfT1VUX1RGIHwgSURFX1RGTEFHX0lOX05TRUNUOwogCX0gZWxzZSB7CiAJCXRmLT5uc2VjdCA9IGFyZ3NbMV07Ci0JCXRmYXJncy50Zl9mbGFncyA9IElERV9URkxBR19PVVRfRkVBVFVSRSB8Ci0JCQkJICBJREVfVEZMQUdfT1VUX05TRUNUIHwgSURFX1RGTEFHX0lOX05TRUNUOworCQljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfT1VUX0ZFQVRVUkUgfCBJREVfVEZMQUdfT1VUX05TRUNUIHwKKwkJCSAgICAgICBJREVfVEZMQUdfSU5fTlNFQ1Q7CiAJfQogCXRmLT5jb21tYW5kID0gYXJnc1swXTsKLQl0ZmFyZ3MuZGF0YV9waGFzZSA9IGFyZ3NbM10gPyBUQVNLRklMRV9JTiA6IFRBU0tGSUxFX05PX0RBVEE7CisJY21kLnByb3RvY29sID0gYXJnc1szXSA/IEFUQV9QUk9UX1BJTyA6IEFUQV9QUk9UX05PREFUQTsKIAogCWlmIChhcmdzWzNdKSB7Ci0JCXRmYXJncy50Zl9mbGFncyB8PSBJREVfVEZMQUdfSU9fMTZCSVQ7CisJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfSU9fMTZCSVQ7CiAJCWJ1ZnNpemUgPSBTRUNUT1JfU0laRSAqIGFyZ3NbM107CiAJCWJ1ZiA9IGt6YWxsb2MoYnVmc2l6ZSwgR0ZQX0tFUk5FTCk7CiAJCWlmIChidWYgPT0gTlVMTCkKQEAgLTE3Miw3ICsxNzIsNyBAQAogCQl9CiAJfQogCi0JZXJyID0gaWRlX3Jhd190YXNrZmlsZShkcml2ZSwgJnRmYXJncywgYnVmLCBhcmdzWzNdKTsKKwllcnIgPSBpZGVfcmF3X3Rhc2tmaWxlKGRyaXZlLCAmY21kLCBidWYsIGFyZ3NbM10pOwogCiAJYXJnc1swXSA9IHRmLT5zdGF0dXM7CiAJYXJnc1sxXSA9IHRmLT5lcnJvcjsKQEAgLTE5NCwyNSArMTk0LDI1IEBACiAJcmV0dXJuIGVycjsKIH0KIAotc3RhdGljIGludCBpZGVfdGFza19pb2N0bChpZGVfZHJpdmVfdCAqZHJpdmUsIHVuc2lnbmVkIGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgaW50IGlkZV90YXNrX2lvY3RsKGlkZV9kcml2ZV90ICpkcml2ZSwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJdm9pZCBfX3VzZXIgKnAgPSAodm9pZCBfX3VzZXIgKilhcmc7CiAJaW50IGVyciA9IDA7CiAJdTggYXJnc1s3XTsKLQlpZGVfdGFza190IHRhc2s7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCiAJaWYgKGNvcHlfZnJvbV91c2VyKGFyZ3MsIHAsIDcpKQogCQlyZXR1cm4gLUVGQVVMVDsKIAotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKLQltZW1jcHkoJnRhc2sudGZfYXJyYXlbN10sICZhcmdzWzFdLCA2KTsKLQl0YXNrLnRmLmNvbW1hbmQgPSBhcmdzWzBdOwotCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJbWVtY3B5KCZjbWQudGZfYXJyYXlbN10sICZhcmdzWzFdLCA2KTsKKwljbWQudGYuY29tbWFuZCA9IGFyZ3NbMF07CisJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKIAotCWVyciA9IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGRyaXZlLCAmdGFzayk7CisJZXJyID0gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZjbWQpOwogCi0JYXJnc1swXSA9IHRhc2sudGYuY29tbWFuZDsKLQltZW1jcHkoJmFyZ3NbMV0sICZ0YXNrLnRmX2FycmF5WzddLCA2KTsKKwlhcmdzWzBdID0gY21kLnRmLmNvbW1hbmQ7CisJbWVtY3B5KCZhcmdzWzFdLCAmY21kLnRmX2FycmF5WzddLCA2KTsKIAogCWlmIChjb3B5X3RvX3VzZXIocCwgYXJncywgNykpCiAJCWVyciA9IC1FRkFVTFQ7CkBAIC0yNjIsMTcgKzI2MiwxNyBAQAogCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikgfHwgIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpCiAJCQlyZXR1cm4gLUVBQ0NFUzsKIAkJaWYgKGRyaXZlLT5tZWRpYSA9PSBpZGVfZGlzaykKLQkJCXJldHVybiBpZGVfdGFza2ZpbGVfaW9jdGwoZHJpdmUsIGNtZCwgYXJnKTsKKwkJCXJldHVybiBpZGVfdGFza2ZpbGVfaW9jdGwoZHJpdmUsIGFyZyk7CiAJCXJldHVybiAtRU5PTVNHOwogI2VuZGlmCiAJY2FzZSBIRElPX0RSSVZFX0NNRDoKIAkJaWYgKCFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQogCQkJcmV0dXJuIC1FQUNDRVM7Ci0JCXJldHVybiBpZGVfY21kX2lvY3RsKGRyaXZlLCBjbWQsIGFyZyk7CisJCXJldHVybiBpZGVfY21kX2lvY3RsKGRyaXZlLCBhcmcpOwogCWNhc2UgSERJT19EUklWRV9UQVNLOgogCQlpZiAoIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpCiAJCQlyZXR1cm4gLUVBQ0NFUzsKLQkJcmV0dXJuIGlkZV90YXNrX2lvY3RsKGRyaXZlLCBjbWQsIGFyZyk7CisJCXJldHVybiBpZGVfdGFza19pb2N0bChkcml2ZSwgYXJnKTsKIAljYXNlIEhESU9fRFJJVkVfUkVTRVQ6CiAJCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJCXJldHVybiAtRUFDQ0VTOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLWlvcHMuYyBiL2RyaXZlcnMvaWRlL2lkZS1pb3BzLmMKaW5kZXggMzE3YzVkYS4uNTQwM2U0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLWlvcHMuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtaW9wcy5jCkBAIC0zMSwxNSArMzEsMTUgQEAKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJY29uc3Qgc3RydWN0IGlkZV9wb3J0X29wcyAqcG9ydF9vcHMgPSBod2lmLT5wb3J0X29wczsKLQlpZGVfdGFza190IHRhc2s7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCiAJaWYgKHBvcnRfb3BzICYmIHBvcnRfb3BzLT5zZWxlY3Rwcm9jKQogCQlwb3J0X29wcy0+c2VsZWN0cHJvYyhkcml2ZSk7CiAKLQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7Ci0JdGFzay50Zl9mbGFncyA9IElERV9URkxBR19PVVRfREVWSUNFOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX09VVF9ERVZJQ0U7CiAKLQlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9sb2FkKGRyaXZlLCAmdGFzayk7CisJZHJpdmUtPmh3aWYtPnRwX29wcy0+dGZfbG9hZChkcml2ZSwgJmNtZCk7CiB9CiAKIHZvaWQgU0VMRUNUX01BU0soaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgbWFzaykKQEAgLTUyLDE0ICs1MiwxNCBAQAogCiB1OCBpZGVfcmVhZF9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUpCiB7Ci0JaWRlX3Rhc2tfdCB0YXNrOworCXN0cnVjdCBpZGVfY21kIGNtZDsKIAotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKLQl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX0lOX0ZFQVRVUkU7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKKwljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU5fRkVBVFVSRTsKIAotCWRyaXZlLT5od2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsICZ0YXNrKTsKKwlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9yZWFkKGRyaXZlLCAmY21kKTsKIAotCXJldHVybiB0YXNrLnRmLmVycm9yOworCXJldHVybiBjbWQudGYuZXJyb3I7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfcmVhZF9lcnJvcik7CiAKQEAgLTMyOSw3ICszMjksNyBAQAogCXUxNiAqaWQgPSBkcml2ZS0+aWQsIGk7CiAJaW50IGVycm9yID0gMDsKIAl1OCBzdGF0OwotCWlkZV90YXNrX3QgdGFzazsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CiAKICNpZmRlZiBDT05GSUdfQkxLX0RFVl9JREVETUEKIAlpZiAoaHdpZi0+ZG1hX29wcykJLyogY2hlY2sgaWYgaG9zdCBzdXBwb3J0cyBETUEgKi8KQEAgLTM2MSwxMiArMzYxLDEyIEBACiAJdWRlbGF5KDEpOwogCXRwX29wcy0+c2V0X2lycShod2lmLCAwKTsKIAotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKLQl0YXNrLnRmX2ZsYWdzID0gSURFX1RGTEFHX09VVF9GRUFUVVJFIHwgSURFX1RGTEFHX09VVF9OU0VDVDsKLQl0YXNrLnRmLmZlYXR1cmUgPSBTRVRGRUFUVVJFU19YRkVSOwotCXRhc2sudGYubnNlY3QgICA9IHNwZWVkOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX09VVF9GRUFUVVJFIHwgSURFX1RGTEFHX09VVF9OU0VDVDsKKwljbWQudGYuZmVhdHVyZSA9IFNFVEZFQVRVUkVTX1hGRVI7CisJY21kLnRmLm5zZWN0ICAgPSBzcGVlZDsKIAotCXRwX29wcy0+dGZfbG9hZChkcml2ZSwgJnRhc2spOworCXRwX29wcy0+dGZfbG9hZChkcml2ZSwgJmNtZCk7CiAKIAl0cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBBVEFfQ01EX1NFVF9GRUFUVVJFUyk7CiAKQEAgLTQyNSwyNiArNDI1LDI1IEBACiAgKiBTZWUgYWxzbyBpZGVfZXhlY3V0ZV9jb21tYW5kCiAgKi8KIHZvaWQgX19pZGVfc2V0X2hhbmRsZXIoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfaGFuZGxlcl90ICpoYW5kbGVyLAotCQkgICAgICAgdW5zaWduZWQgaW50IHRpbWVvdXQsIGlkZV9leHBpcnlfdCAqZXhwaXJ5KQorCQkgICAgICAgdW5zaWduZWQgaW50IHRpbWVvdXQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCiAJQlVHX09OKGh3aWYtPmhhbmRsZXIpOwogCWh3aWYtPmhhbmRsZXIJCT0gaGFuZGxlcjsKLQlod2lmLT5leHBpcnkJCT0gZXhwaXJ5OwogCWh3aWYtPnRpbWVyLmV4cGlyZXMJPSBqaWZmaWVzICsgdGltZW91dDsKIAlod2lmLT5yZXFfZ2VuX3RpbWVyCT0gaHdpZi0+cmVxX2dlbjsKIAlhZGRfdGltZXIoJmh3aWYtPnRpbWVyKTsKIH0KIAotdm9pZCBpZGVfc2V0X2hhbmRsZXIgKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX2hhbmRsZXJfdCAqaGFuZGxlciwKLQkJICAgICAgdW5zaWduZWQgaW50IHRpbWVvdXQsIGlkZV9leHBpcnlfdCAqZXhwaXJ5KQordm9pZCBpZGVfc2V0X2hhbmRsZXIoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfaGFuZGxlcl90ICpoYW5kbGVyLAorCQkgICAgIHVuc2lnbmVkIGludCB0aW1lb3V0KQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLQlfX2lkZV9zZXRfaGFuZGxlcihkcml2ZSwgaGFuZGxlciwgdGltZW91dCwgZXhwaXJ5KTsKKwlfX2lkZV9zZXRfaGFuZGxlcihkcml2ZSwgaGFuZGxlciwgdGltZW91dCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwogfQogRVhQT1JUX1NZTUJPTChpZGVfc2V0X2hhbmRsZXIpOwpAQCAtNDUyLDEwICs0NTEsOSBAQAogLyoqCiAgKglpZGVfZXhlY3V0ZV9jb21tYW5kCS0JZXhlY3V0ZSBhbiBJREUgY29tbWFuZAogICoJQGRyaXZlOiBJREUgZHJpdmUgdG8gaXNzdWUgdGhlIGNvbW1hbmQgYWdhaW5zdAotICoJQGNvbW1hbmQ6IGNvbW1hbmQgYnl0ZSB0byB3cml0ZQorICoJQGNtZDogY29tbWFuZAogICoJQGhhbmRsZXI6IGhhbmRsZXIgZm9yIG5leHQgcGhhc2UKICAqCUB0aW1lb3V0OiB0aW1lb3V0IGZvciBjb21tYW5kCi0gKglAZXhwaXJ5OiAgaGFuZGxlciB0byBydW4gb24gdGltZW91dAogICoKICAqCUhlbHBlciBmdW5jdGlvbiB0byBpc3N1ZSBhbiBJREUgY29tbWFuZC4gVGhpcyBoYW5kbGVzIHRoZQogICoJYXRvbWljaXR5IHJlcXVpcmVtZW50cywgY29tbWFuZCB0aW1pbmcgYW5kIGVuc3VyZXMgdGhhdCB0aGUKQEAgLTQ2MywxNSArNDYxLDE4IEBACiAgKglzaG91bGQgZ28gdmlhIHRoaXMgZnVuY3Rpb24gb3IgZG8gZXF1aXZhbGVudCBsb2NraW5nLgogICovCiAKLXZvaWQgaWRlX2V4ZWN1dGVfY29tbWFuZChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGNtZCwgaWRlX2hhbmRsZXJfdCAqaGFuZGxlciwKLQkJCSB1bnNpZ25lZCB0aW1lb3V0LCBpZGVfZXhwaXJ5X3QgKmV4cGlyeSkKK3ZvaWQgaWRlX2V4ZWN1dGVfY29tbWFuZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsCisJCQkgaWRlX2hhbmRsZXJfdCAqaGFuZGxlciwgdW5zaWduZWQgdGltZW91dCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZod2lmLT5sb2NrLCBmbGFncyk7Ci0JX19pZGVfc2V0X2hhbmRsZXIoZHJpdmUsIGhhbmRsZXIsIHRpbWVvdXQsIGV4cGlyeSk7Ci0JaHdpZi0+dHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgY21kKTsKKwlpZiAoKGNtZC0+cHJvdG9jb2wgIT0gQVRBUElfUFJPVF9ETUEgJiYKKwkgICAgIGNtZC0+cHJvdG9jb2wgIT0gQVRBUElfUFJPVF9QSU8pIHx8CisJICAgIChkcml2ZS0+YXRhcGlfZmxhZ3MgJiBJREVfQUZMQUdfRFJRX0lOVEVSUlVQVCkpCisJCV9faWRlX3NldF9oYW5kbGVyKGRyaXZlLCBoYW5kbGVyLCB0aW1lb3V0KTsKKwlod2lmLT50cF9vcHMtPmV4ZWNfY29tbWFuZChod2lmLCBjbWQtPnRmLmNvbW1hbmQpOwogCS8qCiAJICogRHJpdmUgdGFrZXMgNDAwblMgdG8gcmVzcG9uZCwgd2UgbXVzdCBhdm9pZCB0aGUgSVJRIGJlaW5nCiAJICogc2VydmljZWQgYmVmb3JlIHRoYXQuCkBAIC00ODEsMTkgKzQ4Miw2IEBACiAJbmRlbGF5KDQwMCk7CiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaHdpZi0+bG9jaywgZmxhZ3MpOwogfQotRVhQT1JUX1NZTUJPTChpZGVfZXhlY3V0ZV9jb21tYW5kKTsKLQotdm9pZCBpZGVfZXhlY3V0ZV9wa3RfY21kKGlkZV9kcml2ZV90ICpkcml2ZSkKLXsKLQlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZod2lmLT5sb2NrLCBmbGFncyk7Ci0JaHdpZi0+dHBfb3BzLT5leGVjX2NvbW1hbmQoaHdpZiwgQVRBX0NNRF9QQUNLRVQpOwotCW5kZWxheSg0MDApOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmh3aWYtPmxvY2ssIGZsYWdzKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKGlkZV9leGVjdXRlX3BrdF9jbWQpOwogCiAvKgogICogaWRlX3dhaXRfbm90X2J1c3koKSB3YWl0cyBmb3IgdGhlIGN1cnJlbnRseSBzZWxlY3RlZCBkZXZpY2Ugb24gdGhlIGh3aWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1saWIuYyBiL2RyaXZlcnMvaWRlL2lkZS1saWIuYwppbmRleCBmNmM2ODNkLi4yMTdiN2ZkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtbGliLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLWxpYi5jCkBAIC0zNCwxOSArMzQsMTkgQEAKIHN0YXRpYyB2b2lkIGlkZV9kdW1wX29wY29kZShpZGVfZHJpdmVfdCAqZHJpdmUpCiB7CiAJc3RydWN0IHJlcXVlc3QgKnJxID0gZHJpdmUtPmh3aWYtPnJxOwotCWlkZV90YXNrX3QgKnRhc2sgPSBOVUxMOworCXN0cnVjdCBpZGVfY21kICpjbWQgPSBOVUxMOwogCiAJaWYgKCFycSkKIAkJcmV0dXJuOwogCiAJaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9BVEFfVEFTS0ZJTEUpCi0JCXRhc2sgPSBycS0+c3BlY2lhbDsKKwkJY21kID0gcnEtPnNwZWNpYWw7CiAKIAlwcmludGsoS0VSTl9FUlIgImlkZTogZmFpbGVkIG9wY29kZSB3YXM6ICIpOwotCWlmICh0YXNrID09IE5VTEwpCisJaWYgKGNtZCA9PSBOVUxMKQogCQlwcmludGsoS0VSTl9DT05UICJ1bmtub3duXG4iKTsKIAllbHNlCi0JCXByaW50ayhLRVJOX0NPTlQgIjB4JTAyeFxuIiwgdGFzay0+dGYuY29tbWFuZCk7CisJCXByaW50ayhLRVJOX0NPTlQgIjB4JTAyeFxuIiwgY21kLT50Zi5jb21tYW5kKTsKIH0KIAogdTY0IGlkZV9nZXRfbGJhX2FkZHIoc3RydWN0IGlkZV90YXNrZmlsZSAqdGYsIGludCBsYmE0OCkKQEAgLTY2LDE4ICs2NiwxOCBAQAogCiBzdGF0aWMgdm9pZCBpZGVfZHVtcF9zZWN0b3IoaWRlX2RyaXZlX3QgKmRyaXZlKQogewotCWlkZV90YXNrX3QgdGFzazsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLnRmOworCXN0cnVjdCBpZGVfY21kIGNtZDsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQudGY7CiAJdTggbGJhNDggPSAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQTQ4KTsKIAotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwogCWlmIChsYmE0OCkKLQkJdGFzay50Zl9mbGFncyA9IElERV9URkxBR19JTl9MQkEgfCBJREVfVEZMQUdfSU5fSE9CX0xCQSB8CisJCWNtZC50Zl9mbGFncyA9IElERV9URkxBR19JTl9MQkEgfCBJREVfVEZMQUdfSU5fSE9CX0xCQSB8CiAJCQkJSURFX1RGTEFHX0xCQTQ4OwogCWVsc2UKLQkJdGFzay50Zl9mbGFncyA9IElERV9URkxBR19JTl9MQkEgfCBJREVfVEZMQUdfSU5fREVWSUNFOworCQljbWQudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU5fTEJBIHwgSURFX1RGTEFHX0lOX0RFVklDRTsKIAotCWRyaXZlLT5od2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsICZ0YXNrKTsKKwlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9yZWFkKGRyaXZlLCAmY21kKTsKIAogCWlmIChsYmE0OCB8fCAodGYtPmRldmljZSAmIEFUQV9MQkEpKQogCQlwcmludGsoS0VSTl9DT05UICIsIExCQXNlY3Q9JWxsdSIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcGFyay5jIGIvZHJpdmVycy9pZGUvaWRlLXBhcmsuYwppbmRleCBmMzBlNTIxLi45NDkwYjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcGFyay5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wYXJrLmMKQEAgLTEsNiArMSw1IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaWRlLmg+Ci0jaW5jbHVkZSA8bGludXgvaGRyZWcuaD4KICNpbmNsdWRlIDxsaW51eC9qaWZmaWVzLmg+CiAjaW5jbHVkZSA8bGludXgvYmxrZGV2Lmg+CiAKQEAgLTYzLDEwICs2MiwxMCBAQAogCiBpZGVfc3RhcnRzdG9wX3QgaWRlX2RvX3BhcmtfdW5wYXJrKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQogewotCWlkZV90YXNrX3QgdGFzazsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLnRmOworCXN0cnVjdCBpZGVfY21kIGNtZDsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQudGY7CiAKLQltZW1zZXQoJnRhc2ssIDAsIHNpemVvZih0YXNrKSk7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKIAlpZiAocnEtPmNtZFswXSA9PSBSRVFfUEFSS19IRUFEUykgewogCQlkcml2ZS0+c2xlZXAgPSAqKHVuc2lnbmVkIGxvbmcgKilycS0+c3BlY2lhbDsKIAkJZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfU0xFRVBJTkc7CkBAIC03NSwxNCArNzQsMTYgQEAKIAkJdGYtPmxiYWwgPSAweDRjOwogCQl0Zi0+bGJhbSA9IDB4NGU7CiAJCXRmLT5sYmFoID0gMHg1NTsKLQkJdGFzay50Zl9mbGFncyB8PSBJREVfVEZMQUdfQ1VTVE9NX0hBTkRMRVI7CisJCWNtZC50Zl9mbGFncyA9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7CiAJfSBlbHNlCQkvKiBjbWQgPT0gUkVRX1VOUEFSS19IRUFEUyAqLwogCQl0Zi0+Y29tbWFuZCA9IEFUQV9DTURfQ0hLX1BPV0VSOwogCi0JdGFzay50Zl9mbGFncyB8PSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOwotCXRhc2sucnEgPSBycTsKLQlkcml2ZS0+aHdpZi0+ZGF0YV9waGFzZSA9IHRhc2suZGF0YV9waGFzZSA9IFRBU0tGSUxFX05PX0RBVEE7Ci0JcmV0dXJuIGRvX3J3X3Rhc2tmaWxlKGRyaXZlLCAmdGFzayk7CisJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19DVVNUT01fSEFORExFUjsKKwljbWQucHJvdG9jb2wgPSBBVEFfUFJPVF9OT0RBVEE7CisKKwljbWQucnEgPSBycTsKKworCXJldHVybiBkb19yd190YXNrZmlsZShkcml2ZSwgJmNtZCk7CiB9CiAKIHNzaXplX3QgaWRlX3Bhcmtfc2hvdyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXBtLmMgYi9kcml2ZXJzL2lkZS9pZGUtcG0uYwppbmRleCA2MDUzOGQ5Li5lYmYyZDIxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcG0uYworKysgYi9kcml2ZXJzL2lkZS9pZGUtcG0uYwpAQCAtMSw2ICsxLDUgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KICNpbmNsdWRlIDxsaW51eC9pZGUuaD4KLSNpbmNsdWRlIDxsaW51eC9oZHJlZy5oPgogCiBpbnQgZ2VuZXJpY19pZGVfc3VzcGVuZChzdHJ1Y3QgZGV2aWNlICpkZXYsIHBtX21lc3NhZ2VfdCBtZXNnKQogewpAQCAtOCw3ICs3LDcgQEAKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IHJlcXVlc3QgKnJxOwogCXN0cnVjdCByZXF1ZXN0X3BtX3N0YXRlIHJxcG07Ci0JaWRlX3Rhc2tfdCBhcmdzOworCXN0cnVjdCBpZGVfY21kIGNtZDsKIAlpbnQgcmV0OwogCiAJLyogY2FsbCBBQ1BJIF9HVE0gb25seSBvbmNlICovCkBAIC0xNiwxMCArMTUsMTAgQEAKIAkJaWRlX2FjcGlfZ2V0X3RpbWluZyhod2lmKTsKIAogCW1lbXNldCgmcnFwbSwgMCwgc2l6ZW9mKHJxcG0pKTsKLQltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CisJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKIAlycSA9IGJsa19nZXRfcmVxdWVzdChkcml2ZS0+cXVldWUsIFJFQUQsIF9fR0ZQX1dBSVQpOwogCXJxLT5jbWRfdHlwZSA9IFJFUV9UWVBFX1BNX1NVU1BFTkQ7Ci0JcnEtPnNwZWNpYWwgPSAmYXJnczsKKwlycS0+c3BlY2lhbCA9ICZjbWQ7CiAJcnEtPmRhdGEgPSAmcnFwbTsKIAlycXBtLnBtX3N0ZXAgPSBJREVfUE1fU1RBUlRfU1VTUEVORDsKIAlpZiAobWVzZy5ldmVudCA9PSBQTV9FVkVOVF9QUkVUSEFXKQpAQCAtNDIsNyArNDEsNyBAQAogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgcmVxdWVzdCAqcnE7CiAJc3RydWN0IHJlcXVlc3RfcG1fc3RhdGUgcnFwbTsKLQlpZGVfdGFza190IGFyZ3M7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCWludCBlcnI7CiAKIAkvKiBjYWxsIEFDUEkgX1BTMCAvIF9TVE0gb25seSBvbmNlICovCkBAIC01NCwxMSArNTMsMTEgQEAKIAlpZGVfYWNwaV9leGVjX3Rmcyhkcml2ZSk7CiAKIAltZW1zZXQoJnJxcG0sIDAsIHNpemVvZihycXBtKSk7Ci0JbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CiAJcnEgPSBibGtfZ2V0X3JlcXVlc3QoZHJpdmUtPnF1ZXVlLCBSRUFELCBfX0dGUF9XQUlUKTsKIAlycS0+Y21kX3R5cGUgPSBSRVFfVFlQRV9QTV9SRVNVTUU7CiAJcnEtPmNtZF9mbGFncyB8PSBSRVFfUFJFRU1QVDsKLQlycS0+c3BlY2lhbCA9ICZhcmdzOworCXJxLT5zcGVjaWFsID0gJmNtZDsKIAlycS0+ZGF0YSA9ICZycXBtOwogCXJxcG0ucG1fc3RlcCA9IElERV9QTV9TVEFSVF9SRVNVTUU7CiAJcnFwbS5wbV9zdGF0ZSA9IFBNX0VWRU5UX09OOwpAQCAtMTA5LDkgKzEwOCw5IEBACiBpZGVfc3RhcnRzdG9wX3QgaWRlX3N0YXJ0X3Bvd2VyX3N0ZXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCiB7CiAJc3RydWN0IHJlcXVlc3RfcG1fc3RhdGUgKnBtID0gcnEtPmRhdGE7Ci0JaWRlX3Rhc2tfdCAqYXJncyA9IHJxLT5zcGVjaWFsOworCXN0cnVjdCBpZGVfY21kICpjbWQgPSBycS0+c3BlY2lhbDsKIAotCW1lbXNldChhcmdzLCAwLCBzaXplb2YoKmFyZ3MpKTsKKwltZW1zZXQoY21kLCAwLCBzaXplb2YoKmNtZCkpOwogCiAJc3dpdGNoIChwbS0+cG1fc3RlcCkgewogCWNhc2UgSURFX1BNX0ZMVVNIX0NBQ0hFOgkvKiBTdXNwZW5kIHN0ZXAgMSAoZmx1c2ggY2FjaGUpICovCkBAIC0xMjQsMTIgKzEyMywxMiBAQAogCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCQl9CiAJCWlmIChhdGFfaWRfZmx1c2hfZXh0X2VuYWJsZWQoZHJpdmUtPmlkKSkKLQkJCWFyZ3MtPnRmLmNvbW1hbmQgPSBBVEFfQ01EX0ZMVVNIX0VYVDsKKwkJCWNtZC0+dGYuY29tbWFuZCA9IEFUQV9DTURfRkxVU0hfRVhUOwogCQllbHNlCi0JCQlhcmdzLT50Zi5jb21tYW5kID0gQVRBX0NNRF9GTFVTSDsKKwkJCWNtZC0+dGYuY29tbWFuZCA9IEFUQV9DTURfRkxVU0g7CiAJCWdvdG8gb3V0X2RvX3RmOwogCWNhc2UgSURFX1BNX1NUQU5EQlk6CQkvKiBTdXNwZW5kIHN0ZXAgMiAoc3RhbmRieSkgKi8KLQkJYXJncy0+dGYuY29tbWFuZCA9IEFUQV9DTURfU1RBTkRCWU5PVzE7CisJCWNtZC0+dGYuY29tbWFuZCA9IEFUQV9DTURfU1RBTkRCWU5PVzE7CiAJCWdvdG8gb3V0X2RvX3RmOwogCWNhc2UgSURFX1BNX1JFU1RPUkVfUElPOgkvKiBSZXN1bWUgc3RlcCAxIChyZXN0b3JlIFBJTykgKi8KIAkJaWRlX3NldF9tYXhfcGlvKGRyaXZlKTsKQEAgLTE0Miw3ICsxNDEsNyBAQAogCQkJaWRlX2NvbXBsZXRlX3Bvd2VyX3N0ZXAoZHJpdmUsIHJxKTsKIAkJcmV0dXJuIGlkZV9zdG9wcGVkOwogCWNhc2UgSURFX1BNX0lETEU6CQkvKiBSZXN1bWUgc3RlcCAyIChpZGxlKSAqLwotCQlhcmdzLT50Zi5jb21tYW5kID0gQVRBX0NNRF9JRExFSU1NRURJQVRFOworCQljbWQtPnRmLmNvbW1hbmQgPSBBVEFfQ01EX0lETEVJTU1FRElBVEU7CiAJCWdvdG8gb3V0X2RvX3RmOwogCWNhc2UgSURFX1BNX1JFU1RPUkVfRE1BOgkvKiBSZXN1bWUgc3RlcCAzIChyZXN0b3JlIERNQSkgKi8KIAkJLyoKQEAgLTE2MCwyNyArMTU5LDM0IEBACiAJfQogCiAJcG0tPnBtX3N0ZXAgPSBJREVfUE1fQ09NUExFVEVEOworCiAJcmV0dXJuIGlkZV9zdG9wcGVkOwogCiBvdXRfZG9fdGY6Ci0JYXJncy0+dGZfZmxhZ3MJID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKLQlhcmdzLT5kYXRhX3BoYXNlID0gVEFTS0ZJTEVfTk9fREFUQTsKLQlyZXR1cm4gZG9fcndfdGFza2ZpbGUoZHJpdmUsIGFyZ3MpOworCWNtZC0+dGZfZmxhZ3MgPSBJREVfVEZMQUdfVEYgfCBJREVfVEZMQUdfREVWSUNFOworCWNtZC0+cHJvdG9jb2wgPSBBVEFfUFJPVF9OT0RBVEE7CisKKwlyZXR1cm4gZG9fcndfdGFza2ZpbGUoZHJpdmUsIGNtZCk7CiB9CiAKIC8qKgotICoJaWRlX2NvbXBsZXRlX3BtX3JlcXVlc3QgLSBlbmQgdGhlIGN1cnJlbnQgUG93ZXIgTWFuYWdlbWVudCByZXF1ZXN0CisgKglpZGVfY29tcGxldGVfcG1fcnEgLSBlbmQgdGhlIGN1cnJlbnQgUG93ZXIgTWFuYWdlbWVudCByZXF1ZXN0CiAgKglAZHJpdmU6IHRhcmdldCBkcml2ZQogICoJQHJxOiByZXF1ZXN0CiAgKgogICoJVGhpcyBmdW5jdGlvbiBjbGVhbnMgdXAgdGhlIGN1cnJlbnQgUE0gcmVxdWVzdCBhbmQgc3RvcHMgdGhlIHF1ZXVlCiAgKglpZiBuZWNlc3NhcnkuCiAgKi8KLXZvaWQgaWRlX2NvbXBsZXRlX3BtX3JlcXVlc3QoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCit2b2lkIGlkZV9jb21wbGV0ZV9wbV9ycShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSkKIHsKIAlzdHJ1Y3QgcmVxdWVzdF9xdWV1ZSAqcSA9IGRyaXZlLT5xdWV1ZTsKKwlzdHJ1Y3QgcmVxdWVzdF9wbV9zdGF0ZSAqcG0gPSBycS0+ZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCisJaWRlX2NvbXBsZXRlX3Bvd2VyX3N0ZXAoZHJpdmUsIHJxKTsKKwlpZiAocG0tPnBtX3N0ZXAgIT0gSURFX1BNX0NPTVBMRVRFRCkKKwkJcmV0dXJuOworCiAjaWZkZWYgREVCVUdfUE0KIAlwcmludGsoIiVzOiBjb21wbGV0aW5nIFBNIHJlcXVlc3QsICVzXG4iLCBkcml2ZS0+bmFtZSwKIAkgICAgICAgYmxrX3BtX3N1c3BlbmRfcmVxdWVzdChycSkgPyAic3VzcGVuZCIgOiAicmVzdW1lIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcG5wLmMgYi9kcml2ZXJzL2lkZS9pZGUtcG5wLmMKaW5kZXggYmFjOWIzOS4uNmU4MGI3NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXBucC5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wbnAuYwpAQCAtMjcsNiArMjcsMTAgQEAKIAl7LmlkID0gIiJ9CiB9OwogCitzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9wb3J0X2luZm8gaWRlX3BucF9wb3J0X2luZm8gPSB7CisJLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX05PX0RNQSwKK307CisKIHN0YXRpYyBpbnQgaWRlcG5wX3Byb2JlKHN0cnVjdCBwbnBfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkICpkZXZfaWQpCiB7CiAJc3RydWN0IGlkZV9ob3N0ICpob3N0OwpAQCAtNjAsNyArNjQsNyBAQAogCWh3LmlycSA9IHBucF9pcnEoZGV2LCAwKTsKIAlody5jaGlwc2V0ID0gaWRlX2dlbmVyaWM7CiAKLQlyYyA9IGlkZV9ob3N0X2FkZChOVUxMLCBod3MsICZob3N0KTsKKwlyYyA9IGlkZV9ob3N0X2FkZCgmaWRlX3BucF9wb3J0X2luZm8sIGh3cywgJmhvc3QpOwogCWlmIChyYykKIAkJZ290byBvdXQ7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2lkZS1wcm9iZS5jIGIvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKaW5kZXggOTc0MDY3MC4uNTQ4ODY0NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKKysrIGIvZHJpdmVycy9pZGUvaWRlLXByb2JlLmMKQEAgLTIyOCwxNSArMjI4LDkgQEAKIAltW0FUQV9JRF9QUk9EX0xFTiAtIDFdID0gJ1wwJzsKIAogCWlmIChzdHJzdHIobSwgIkUgWCBBIEIgWSBUIEUgTiBFIFMgVCIpKQotCQlnb3RvIGVycl9taXNjOwotCi0JZHJpdmUtPmRldl9mbGFncyB8PSBJREVfREZMQUdfUFJFU0VOVDsKLQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfREVBRDsKLQotCXJldHVybjsKLWVycl9taXNjOgotCWtmcmVlKGlkKTsKLQlkcml2ZS0+ZGV2X2ZsYWdzICY9IH5JREVfREZMQUdfUFJFU0VOVDsKKwkJZHJpdmUtPmRldl9mbGFncyAmPSB+SURFX0RGTEFHX1BSRVNFTlQ7CisJZWxzZQorCQlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19QUkVTRU5UOwogfQogCiAvKioKQEAgLTI4OSwxMyArMjgzLDEzIEBACiAJICogaWRlbnRpZnkgY29tbWFuZCB0byBiZSBzdXJlIG9mIHJlcGx5CiAJICovCiAJaWYgKGNtZCA9PSBBVEFfQ01EX0lEX0FUQVBJKSB7Ci0JCWlkZV90YXNrX3QgdGFzazsKKwkJc3RydWN0IGlkZV9jbWQgY21kOwogCi0JCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKKwkJbWVtc2V0KCZjbWQsIDAsIHNpemVvZihjbWQpKTsKIAkJLyogZGlzYWJsZSBETUEgJiBvdmVybGFwICovCi0JCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfT1VUX0ZFQVRVUkU7CisJCWNtZC50Zl9mbGFncyA9IElERV9URkxBR19PVVRfRkVBVFVSRTsKIAotCQl0cF9vcHMtPnRmX2xvYWQoZHJpdmUsICZ0YXNrKTsKKwkJdHBfb3BzLT50Zl9sb2FkKGRyaXZlLCAmY21kKTsKIAl9CiAKIAkvKiBhc2sgZHJpdmUgZm9yIElEICovCkBAIC0zNDMsMTQgKzMzNywxNCBAQAogCiBzdGF0aWMgdTggaWRlX3JlYWRfZGV2aWNlKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKLQlpZGVfdGFza190IHRhc2s7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCi0JbWVtc2V0KCZ0YXNrLCAwLCBzaXplb2YodGFzaykpOwotCXRhc2sudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU5fREVWSUNFOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX0lOX0RFVklDRTsKIAotCWRyaXZlLT5od2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsICZ0YXNrKTsKKwlkcml2ZS0+aHdpZi0+dHBfb3BzLT50Zl9yZWFkKGRyaXZlLCAmY21kKTsKIAotCXJldHVybiB0YXNrLnRmLmRldmljZTsKKwlyZXR1cm4gY21kLnRmLmRldmljZTsKIH0KIAogLyoqCkBAIC01MDUsOCArNDk5LDcgQEAKIAkJfQogCiAJCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19QUkVTRU5UKSA9PSAwKQotCQkJLyogZHJpdmUgbm90IGZvdW5kICovCi0JCQlyZXR1cm4gMDsKKwkJCWdvdG8gb3V0X2ZyZWU7CiAKIAkJLyogaWRlbnRpZmljYXRpb24gZmFpbGVkPyAqLwogCQlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfSURfUkVBRCkgPT0gMCkgewpAQCAtNTMwLDcgKzUyMyw3IEBACiAJfQogCiAJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpID09IDApCi0JCXJldHVybiAwOworCQlnb3RvIG91dF9mcmVlOwogCiAJLyogVGhlIGRyaXZlIHdhc24ndCBiZWluZyBoZWxwZnVsLiBBZGQgZ2VuZXJpYyBpbmZvIG9ubHkgKi8KIAlpZiAoKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfSURfUkVBRCkgPT0gMCkgewpAQCAtNTQzLDcgKzUzNiwxMCBAQAogCQlpZGVfZGlza19pbml0X211bHRfY291bnQoZHJpdmUpOwogCX0KIAotCXJldHVybiAhIShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1BSRVNFTlQpOworCXJldHVybiAxOworb3V0X2ZyZWU6CisJa2ZyZWUoZHJpdmUtPmlkKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgaHdpZl9yZWxlYXNlX2RldihzdHJ1Y3QgZGV2aWNlICpkZXYpCkBAIC04NDEsMzQgKzgzNywxOSBAQAogc3RhdGljIGludCBpbml0X2lycSAoaWRlX2h3aWZfdCAqaHdpZikKIHsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQlpcnFfaGFuZGxlcl90IGlycV9oYW5kbGVyOwotCWludCBzYSA9IDA7CisJc3RydWN0IGlkZV9ob3N0ICpob3N0ID0gaHdpZi0+aG9zdDsKKwlpcnFfaGFuZGxlcl90IGlycV9oYW5kbGVyID0gaG9zdC0+aXJxX2hhbmRsZXI7CisJaW50IHNhID0gaG9zdC0+aXJxX2ZsYWdzOwogCi0JaXJxX2hhbmRsZXIgPSBod2lmLT5ob3N0LT5pcnFfaGFuZGxlcjsKIAlpZiAoaXJxX2hhbmRsZXIgPT0gTlVMTCkKIAkJaXJxX2hhbmRsZXIgPSBpZGVfaW50cjsKIAotI2lmIGRlZmluZWQoX19tYzY4MDAwX18pCi0Jc2EgPSBJUlFGX1NIQVJFRDsKLSNlbmRpZiAvKiBfX21jNjgwMDBfXyAqLwotCi0JaWYgKGh3aWYtPmNoaXBzZXQgPT0gaWRlX3BjaSkKLQkJc2EgPSBJUlFGX1NIQVJFRDsKLQogCWlmIChpb19wb3J0cy0+Y3RsX2FkZHIpCiAJCWh3aWYtPnRwX29wcy0+c2V0X2lycShod2lmLCAxKTsKIAogCWlmIChyZXF1ZXN0X2lycShod2lmLT5pcnEsIGlycV9oYW5kbGVyLCBzYSwgaHdpZi0+bmFtZSwgaHdpZikpCiAJCWdvdG8gb3V0X3VwOwogCi0JaWYgKCFod2lmLT5ycXNpemUpIHsKLQkJaWYgKChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHX05PX0xCQTQ4KSB8fAotCQkgICAgKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fTEJBNDhfRE1BKSkKLQkJCWh3aWYtPnJxc2l6ZSA9IDI1NjsKLQkJZWxzZQotCQkJaHdpZi0+cnFzaXplID0gNjU1MzY7Ci0JfQotCiAjaWYgIWRlZmluZWQoX19tYzY4MDAwX18pCiAJcHJpbnRrKEtFUk5fSU5GTyAiJXMgYXQgMHglMDNseC0weCUwM2x4LDB4JTAzbHggb24gaXJxICVkIiwgaHdpZi0+bmFtZSwKIAkJaW9fcG9ydHMtPmRhdGFfYWRkciwgaW9fcG9ydHMtPnN0YXR1c19hZGRyLApAQCAtMTA4MCw3ICsxMDYxLDcgQEAKIAkJaHdpZi0+dHBfb3BzID0gZC0+dHBfb3BzOwogCiAJLyogLT5zZXRfcGlvX21vZGUgZm9yIERUQzIyNzggaXMgY3VycmVudGx5IGxpbWl0ZWQgdG8gcG9ydCAwICovCi0JaWYgKGh3aWYtPmNoaXBzZXQgIT0gaWRlX2R0YzIyNzggfHwgaHdpZi0+Y2hhbm5lbCA9PSAwKQorCWlmICgoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19EVEMyMjc4KSA9PSAwIHx8IGh3aWYtPmNoYW5uZWwgPT0gMCkKIAkJaHdpZi0+cG9ydF9vcHMgPSBkLT5wb3J0X29wczsKIAogCWh3aWYtPnN3ZG1hX21hc2sgPSBkLT5zd2RtYV9tYXNrOwpAQCAtMTExNCw2ICsxMDk1LDEzIEBACiAKIAlpZiAoZC0+bWF4X3NlY3RvcnMpCiAJCWh3aWYtPnJxc2l6ZSA9IGQtPm1heF9zZWN0b3JzOworCWVsc2UgeworCQlpZiAoKGh3aWYtPmhvc3RfZmxhZ3MgJiBJREVfSEZMQUdfTk9fTEJBNDgpIHx8CisJCSAgICAoaHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19MQkE0OF9ETUEpKQorCQkJaHdpZi0+cnFzaXplID0gMjU2OworCQllbHNlCisJCQlod2lmLT5ycXNpemUgPSA2NTUzNjsKKwl9CiAKIAkvKiBjYWxsIGNoaXBzZXQgc3BlY2lmaWMgcm91dGluZSBmb3IgZWFjaCBlbmFibGVkIHBvcnQgKi8KIAlpZiAoZC0+aW5pdF9od2lmKQpAQCAtMTMyNiw2ICsxMzE0LDggQEAKIAogCWlmIChkKSB7CiAJCWhvc3QtPmluaXRfY2hpcHNldCA9IGQtPmluaXRfY2hpcHNldDsKKwkJaG9zdC0+Z2V0X2xvY2sgICAgID0gZC0+Z2V0X2xvY2s7CisJCWhvc3QtPnJlbGVhc2VfbG9jayA9IGQtPnJlbGVhc2VfbG9jazsKIAkJaG9zdC0+aG9zdF9mbGFncyA9IGQtPmhvc3RfZmxhZ3M7CiAJfQogCkBAIC0xMzcyLDIwICsxMzYyLDE1IEBACiAJCWlkZV9pbml0X3BvcnRfaHcoaHdpZiwgaHdzW2ldKTsKIAkJaWRlX3BvcnRfYXBwbHlfcGFyYW1zKGh3aWYpOwogCi0JCWlmIChkID09IE5VTEwpIHsKLQkJCW1hdGUgPSBOVUxMOwotCQl9IGVsc2UgewotCQkJaWYgKChpICYgMSkgJiYgbWF0ZSkgewotCQkJCWh3aWYtPm1hdGUgPSBtYXRlOwotCQkJCW1hdGUtPm1hdGUgPSBod2lmOwotCQkJfQotCi0JCQltYXRlID0gKGkgJiAxKSA/IE5VTEwgOiBod2lmOwotCi0JCQlpZGVfaW5pdF9wb3J0KGh3aWYsIGkgJiAxLCBkKTsKLQkJCWlkZV9wb3J0X2NhYmxlX2RldGVjdChod2lmKTsKKwkJaWYgKChpICYgMSkgJiYgbWF0ZSkgeworCQkJaHdpZi0+bWF0ZSA9IG1hdGU7CisJCQltYXRlLT5tYXRlID0gaHdpZjsKIAkJfQogCisJCW1hdGUgPSAoaSAmIDEpID8gTlVMTCA6IGh3aWY7CisKKwkJaWRlX2luaXRfcG9ydChod2lmLCBpICYgMSwgZCk7CisJCWlkZV9wb3J0X2NhYmxlX2RldGVjdChod2lmKTsKIAkJaWRlX3BvcnRfaW5pdF9kZXZpY2VzKGh3aWYpOwogCX0KIApAQCAtMTM5Niw4ICsxMzgxLDggQEAKIAkJaWYgKGlkZV9wcm9iZV9wb3J0KGh3aWYpID09IDApCiAJCQlod2lmLT5wcmVzZW50ID0gMTsKIAotCQlpZiAoaHdpZi0+Y2hpcHNldCAhPSBpZGVfNGRyaXZlcyB8fCAhaHdpZi0+bWF0ZSB8fAotCQkgICAgIWh3aWYtPm1hdGUtPnByZXNlbnQpIHsKKwkJaWYgKChod2lmLT5ob3N0X2ZsYWdzICYgSURFX0hGTEFHXzREUklWRVMpID09IDAgfHwKKwkJICAgIGh3aWYtPm1hdGUgPT0gTlVMTCB8fCBod2lmLT5tYXRlLT5wcmVzZW50ID09IDApIHsKIAkJCWlmIChpZGVfcmVnaXN0ZXJfcG9ydChod2lmKSkgewogCQkJCWlkZV9kaXNhYmxlX3BvcnQoaHdpZik7CiAJCQkJY29udGludWU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jIGIvZHJpdmVycy9pZGUvaWRlLXByb2MuYwppbmRleCA0MTdjZGU1Li4xMGE4OGJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9pZGUtcHJvYy5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS1wcm9jLmMKQEAgLTE5NCwyMCArMTk0LDIwIEBACiAKIHN0YXRpYyBpbnQgc2V0X3hmZXJfcmF0ZSAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgYXJnKQogewotCWlkZV90YXNrX3QgdGFzazsKKwlzdHJ1Y3QgaWRlX2NtZCBjbWQ7CiAJaW50IGVycjsKIAogCWlmIChhcmcgPCBYRkVSX1BJT18wIHx8IGFyZyA+IFhGRVJfVURNQV82KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW1lbXNldCgmdGFzaywgMCwgc2l6ZW9mKHRhc2spKTsKLQl0YXNrLnRmLmNvbW1hbmQgPSBBVEFfQ01EX1NFVF9GRUFUVVJFUzsKLQl0YXNrLnRmLmZlYXR1cmUgPSBTRVRGRUFUVVJFU19YRkVSOwotCXRhc2sudGYubnNlY3QgICA9ICh1OClhcmc7Ci0JdGFzay50Zl9mbGFncyA9IElERV9URkxBR19PVVRfRkVBVFVSRSB8IElERV9URkxBR19PVVRfTlNFQ1QgfAotCQkJSURFX1RGTEFHX0lOX05TRUNUOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLnRmLmNvbW1hbmQgPSBBVEFfQ01EX1NFVF9GRUFUVVJFUzsKKwljbWQudGYuZmVhdHVyZSA9IFNFVEZFQVRVUkVTX1hGRVI7CisJY21kLnRmLm5zZWN0ICAgPSAodTgpYXJnOworCWNtZC50Zl9mbGFncyAgID0gSURFX1RGTEFHX09VVF9GRUFUVVJFIHwgSURFX1RGTEFHX09VVF9OU0VDVCB8CisJCQkgSURFX1RGTEFHX0lOX05TRUNUOwogCi0JZXJyID0gaWRlX25vX2RhdGFfdGFza2ZpbGUoZHJpdmUsICZ0YXNrKTsKKwllcnIgPSBpZGVfbm9fZGF0YV90YXNrZmlsZShkcml2ZSwgJmNtZCk7CiAKIAlpZiAoIWVycikgewogCQlpZGVfc2V0X3hmZXJfcmF0ZShkcml2ZSwgKHU4KSBhcmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlLXRhcGUuYyBiL2RyaXZlcnMvaWRlL2lkZS10YXBlLmMKaW5kZXggNGU2MTgxYy4uNjRkZmE3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaWRlLXRhcGUuYworKysgYi9kcml2ZXJzL2lkZS9pZGUtdGFwZS5jCkBAIC0xNTIsMTEgKzE1Miw2IEBACiAjZGVmaW5lIElERVRBUEVfTFVfUkVURU5TSU9OX01BU0sJMgogI2RlZmluZSBJREVUQVBFX0xVX0VPVF9NQVNLCQk0CiAKLS8qIEVycm9yIGNvZGVzIHJldHVybmVkIGluIHJxLT5lcnJvcnMgdG8gdGhlIGhpZ2hlciBwYXJ0IG9mIHRoZSBkcml2ZXIuICovCi0jZGVmaW5lIElERVRBUEVfRVJST1JfR0VORVJBTAkJMTAxCi0jZGVmaW5lIElERVRBUEVfRVJST1JfRklMRU1BUksJCTEwMgotI2RlZmluZSBJREVUQVBFX0VSUk9SX0VPRAkJMTAzCi0KIC8qIFN0cnVjdHVyZXMgcmVsYXRlZCB0byB0aGUgU0VMRUNUIFNFTlNFIC8gTU9ERSBTRU5TRSBwYWNrZXQgY29tbWFuZHMuICovCiAjZGVmaW5lIElERVRBUEVfQkxPQ0tfREVTQ1JJUFRPUgkwCiAjZGVmaW5lIElERVRBUEVfQ0FQQUJJTElUSUVTX1BBR0UJMHgyYQpAQCAtMTcxLDE0ICsxNjYsNiBAQAogCXN0cnVjdCBnZW5kaXNrCQkqZGlzazsKIAlzdHJ1Y3QgZGV2aWNlCQlkZXY7CiAKLQkvKgotCSAqCWZhaWxlZF9wYyBwb2ludHMgdG8gdGhlIGxhc3QgZmFpbGVkIHBhY2tldCBjb21tYW5kLCBvciBjb250YWlucwotCSAqCU5VTEwgaWYgd2UgZG8gbm90IG5lZWQgdG8gcmV0cnkgYW55IHBhY2tldCBjb21tYW5kLiBUaGlzIGlzCi0JICoJcmVxdWlyZWQgc2luY2UgYW4gYWRkaXRpb25hbCBwYWNrZXQgY29tbWFuZCBpcyBuZWVkZWQgYmVmb3JlIHRoZQotCSAqCXJldHJ5LCB0byBnZXQgZGV0YWlsZWQgaW5mb3JtYXRpb24gb24gd2hhdCB3ZW50IHdyb25nLgotCSAqLwotCS8qIExhc3QgZmFpbGVkIHBhY2tldCBjb21tYW5kICovCi0Jc3RydWN0IGlkZV9hdGFwaV9wYyAqZmFpbGVkX3BjOwogCS8qIHVzZWQgYnkgUkVRX0lERVRBUEVfe1JFQUQsV1JJVEV9IHJlcXVlc3RzICovCiAJc3RydWN0IGlkZV9hdGFwaV9wYyBxdWV1ZWRfcGM7CiAKQEAgLTI0NSw5ICsyMzIsNiBAQAogCS8qIFdhc3RlZCBzcGFjZSBpbiBlYWNoIHN0YWdlICovCiAJaW50IGV4Y2Vzc19iaF9zaXplOwogCi0JLyogcHJvdGVjdHMgdGhlIGlkZS10YXBlIHF1ZXVlICovCi0Jc3BpbmxvY2tfdCBsb2NrOwotCiAJLyogTWVhc3VyZXMgYXZlcmFnZSB0YXBlIHNwZWVkICovCiAJdW5zaWduZWQgbG9uZyBhdmdfdGltZTsKIAlpbnQgYXZnX3NpemU7CkBAIC00MDAsNyArMzg0LDcgQEAKIHN0YXRpYyB2b2lkIGlkZXRhcGVfYW5hbHl6ZV9lcnJvcihpZGVfZHJpdmVfdCAqZHJpdmUsIHU4ICpzZW5zZSkKIHsKIAlpZGV0YXBlX3RhcGVfdCAqdGFwZSA9IGRyaXZlLT5kcml2ZXJfZGF0YTsKLQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYyA9IHRhcGUtPmZhaWxlZF9wYzsKKwlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYyA9IGRyaXZlLT5mYWlsZWRfcGM7CiAKIAl0YXBlLT5zZW5zZV9rZXkgPSBzZW5zZVsyXSAmIDB4RjsKIAl0YXBlLT5hc2MgICAgICAgPSBzZW5zZVsxMl07CkBAIC00MzMsMTkgKzQxNywxOSBAQAogCQl9CiAJfQogCWlmIChwYy0+Y1swXSA9PSBSRUFEXzYgJiYgKHNlbnNlWzJdICYgMHg4MCkpIHsKLQkJcGMtPmVycm9yID0gSURFVEFQRV9FUlJPUl9GSUxFTUFSSzsKKwkJcGMtPmVycm9yID0gSURFX0RSVl9FUlJPUl9GSUxFTUFSSzsKIAkJcGMtPmZsYWdzIHw9IFBDX0ZMQUdfQUJPUlQ7CiAJfQogCWlmIChwYy0+Y1swXSA9PSBXUklURV82KSB7CiAJCWlmICgoc2Vuc2VbMl0gJiAweDQwKSB8fCAodGFwZS0+c2Vuc2Vfa2V5ID09IDB4ZAogCQkgICAgICYmIHRhcGUtPmFzYyA9PSAweDAgJiYgdGFwZS0+YXNjcSA9PSAweDIpKSB7Ci0JCQlwYy0+ZXJyb3IgPSBJREVUQVBFX0VSUk9SX0VPRDsKKwkJCXBjLT5lcnJvciA9IElERV9EUlZfRVJST1JfRU9EOwogCQkJcGMtPmZsYWdzIHw9IFBDX0ZMQUdfQUJPUlQ7CiAJCX0KIAl9CiAJaWYgKHBjLT5jWzBdID09IFJFQURfNiB8fCBwYy0+Y1swXSA9PSBXUklURV82KSB7CiAJCWlmICh0YXBlLT5zZW5zZV9rZXkgPT0gOCkgewotCQkJcGMtPmVycm9yID0gSURFVEFQRV9FUlJPUl9FT0Q7CisJCQlwYy0+ZXJyb3IgPSBJREVfRFJWX0VSUk9SX0VPRDsKIAkJCXBjLT5mbGFncyB8PSBQQ19GTEFHX0FCT1JUOwogCQl9CiAJCWlmICghKHBjLT5mbGFncyAmIFBDX0ZMQUdfQUJPUlQpICYmCkBAIC00NzcsNTIgKzQ2MSwyMyBAQAogCX0KIH0KIAotc3RhdGljIGludCBpZGV0YXBlX2VuZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgaW50IHVwdG9kYXRlLCBpbnQgbnJfc2VjdHMpCi17Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gZHJpdmUtPmh3aWYtPnJxOwotCWlkZXRhcGVfdGFwZV90ICp0YXBlID0gZHJpdmUtPmRyaXZlcl9kYXRhOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JaW50IGVycm9yOwotCi0JZGVidWdfbG9nKERCR19QUk9DUywgIkVudGVyICVzXG4iLCBfX2Z1bmNfXyk7Ci0KLQlzd2l0Y2ggKHVwdG9kYXRlKSB7Ci0JY2FzZSAwOgllcnJvciA9IElERVRBUEVfRVJST1JfR0VORVJBTDsgYnJlYWs7Ci0JY2FzZSAxOiBlcnJvciA9IDA7IGJyZWFrOwotCWRlZmF1bHQ6IGVycm9yID0gdXB0b2RhdGU7Ci0JfQotCXJxLT5lcnJvcnMgPSBlcnJvcjsKLQlpZiAoZXJyb3IpCi0JCXRhcGUtPmZhaWxlZF9wYyA9IE5VTEw7Ci0KLQlpZiAoIWJsa19zcGVjaWFsX3JlcXVlc3QocnEpKSB7Ci0JCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgdXB0b2RhdGUsIG5yX3NlY3RzKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnRhcGUtPmxvY2ssIGZsYWdzKTsKLQotCWlkZV9lbmRfZHJpdmVfY21kKGRyaXZlLCAwLCAwKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnRhcGUtPmxvY2ssIGZsYWdzKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHZvaWQgaWRlX3RhcGVfaGFuZGxlX2RzYyhpZGVfZHJpdmVfdCAqKTsKIAotc3RhdGljIHZvaWQgaWRlX3RhcGVfY2FsbGJhY2soaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgZHNjKQorc3RhdGljIGludCBpZGVfdGFwZV9jYWxsYmFjayhpZGVfZHJpdmVfdCAqZHJpdmUsIGludCBkc2MpCiB7CiAJaWRldGFwZV90YXBlX3QgKnRhcGUgPSBkcml2ZS0+ZHJpdmVyX2RhdGE7CiAJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGMgPSBkcml2ZS0+cGM7CisJc3RydWN0IHJlcXVlc3QgKnJxID0gZHJpdmUtPmh3aWYtPnJxOwogCWludCB1cHRvZGF0ZSA9IHBjLT5lcnJvciA/IDAgOiAxOworCWludCBlcnIgPSB1cHRvZGF0ZSA/IDAgOiBJREVfRFJWX0VSUk9SX0dFTkVSQUw7CiAKIAlkZWJ1Z19sb2coREJHX1BST0NTLCAiRW50ZXIgJXNcbiIsIF9fZnVuY19fKTsKIAogCWlmIChkc2MpCiAJCWlkZV90YXBlX2hhbmRsZV9kc2MoZHJpdmUpOwogCi0JaWYgKHRhcGUtPmZhaWxlZF9wYyA9PSBwYykKLQkJdGFwZS0+ZmFpbGVkX3BjID0gTlVMTDsKKwlpZiAoZHJpdmUtPmZhaWxlZF9wYyA9PSBwYykKKwkJZHJpdmUtPmZhaWxlZF9wYyA9IE5VTEw7CiAKIAlpZiAocGMtPmNbMF0gPT0gUkVRVUVTVF9TRU5TRSkgewogCQlpZiAodXB0b2RhdGUpCkBAIC01MzEsNyArNDg2LDYgQEAKIAkJCXByaW50ayhLRVJOX0VSUiAiaWRlLXRhcGU6IEVycm9yIGluIFJFUVVFU1QgU0VOU0UgIgogCQkJCQkiaXRzZWxmIC0gQWJvcnRpbmcgcmVxdWVzdCFcbiIpOwogCX0gZWxzZSBpZiAocGMtPmNbMF0gPT0gUkVBRF82IHx8IHBjLT5jWzBdID09IFdSSVRFXzYpIHsKLQkJc3RydWN0IHJlcXVlc3QgKnJxID0gZHJpdmUtPmh3aWYtPnJxOwogCQlpbnQgYmxvY2tzID0gcGMtPnhmZXJyZWQgLyB0YXBlLT5ibGtfc2l6ZTsKIAogCQl0YXBlLT5hdmdfc2l6ZSArPSBibG9ja3MgKiB0YXBlLT5ibGtfc2l6ZTsKQEAgLTU0Niw4ICs1MDAsMTAgQEAKIAkJdGFwZS0+Zmlyc3RfZnJhbWUgKz0gYmxvY2tzOwogCQlycS0+Y3VycmVudF9ucl9zZWN0b3JzIC09IGJsb2NrczsKIAotCQlpZiAocGMtPmVycm9yKQotCQkJdXB0b2RhdGUgPSBwYy0+ZXJyb3I7CisJCWlmIChwYy0+ZXJyb3IpIHsKKwkJCXVwdG9kYXRlID0gMDsKKwkJCWVyciA9IHBjLT5lcnJvcjsKKwkJfQogCX0gZWxzZSBpZiAocGMtPmNbMF0gPT0gUkVBRF9QT1NJVElPTiAmJiB1cHRvZGF0ZSkgewogCQl1OCAqcmVhZHBvcyA9IHBjLT5idWY7CiAKQEAgLTU2MSw2ICs1MTcsNyBAQAogCQkJCQkgInRvIHRoZSB0YXBlXG4iKTsKIAkJCWNsZWFyX2JpdChJREVfQUZMQUdfQUREUkVTU19WQUxJRCwgJmRyaXZlLT5hdGFwaV9mbGFncyk7CiAJCQl1cHRvZGF0ZSA9IDA7CisJCQllcnIgPSBJREVfRFJWX0VSUk9SX0dFTkVSQUw7CiAJCX0gZWxzZSB7CiAJCQlkZWJ1Z19sb2coREJHX1NFTlNFLCAiQmxvY2sgTG9jYXRpb24gLSAldVxuIiwKIAkJCQkJYmUzMl90b19jcHVwKChfX2JlMzIgKikmcmVhZHBvc1s0XSkpOwpAQCAtNTcxLDcgKzUyOCw5IEBACiAJCX0KIAl9CiAKLQlpZGV0YXBlX2VuZF9yZXF1ZXN0KGRyaXZlLCB1cHRvZGF0ZSwgMCk7CisJcnEtPmVycm9ycyA9IGVycjsKKworCXJldHVybiB1cHRvZGF0ZTsKIH0KIAogLyoKQEAgLTYyMSw3ICs1ODAsNyBAQAogICoKICAqIFRoZSBoYW5kbGluZyB3aWxsIGJlIGRvbmUgaW4gdGhyZWUgc3RhZ2VzOgogICoKLSAqIDEuIGlkZXRhcGVfaXNzdWVfcGMgd2lsbCBzZW5kIHRoZSBwYWNrZXQgY29tbWFuZCB0byB0aGUgZHJpdmUsIGFuZCB3aWxsIHNldAorICogMS4gaWRlX3RhcGVfaXNzdWVfcGMgd2lsbCBzZW5kIHRoZSBwYWNrZXQgY29tbWFuZCB0byB0aGUgZHJpdmUsIGFuZCB3aWxsIHNldAogICogdGhlIGludGVycnVwdCBoYW5kbGVyIHRvIGlkZV9wY19pbnRyLgogICoKICAqIDIuIE9uIGVhY2ggaW50ZXJydXB0LCBpZGVfcGNfaW50ciB3aWxsIGJlIGNhbGxlZC4gVGhpcyBzdGVwIHdpbGwgYmUKQEAgLTY0OSw4ICs2MDgsOSBAQAogICogcmVxdWVzdC4KICAqLwogCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IGlkZXRhcGVfaXNzdWVfcGMoaWRlX2RyaXZlX3QgKmRyaXZlLAotCQlzdHJ1Y3QgaWRlX2F0YXBpX3BjICpwYykKK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgaWRlX3RhcGVfaXNzdWVfcGMoaWRlX2RyaXZlX3QgKmRyaXZlLAorCQkJCQkgc3RydWN0IGlkZV9jbWQgKmNtZCwKKwkJCQkJIHN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjKQogewogCWlkZXRhcGVfdGFwZV90ICp0YXBlID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCkBAIC02NjAsOCArNjIwLDggQEAKIAkJCSJUd28gcmVxdWVzdCBzZW5zZSBpbiBzZXJpYWwgd2VyZSBpc3N1ZWRcbiIpOwogCX0KIAotCWlmICh0YXBlLT5mYWlsZWRfcGMgPT0gTlVMTCAmJiBwYy0+Y1swXSAhPSBSRVFVRVNUX1NFTlNFKQotCQl0YXBlLT5mYWlsZWRfcGMgPSBwYzsKKwlpZiAoZHJpdmUtPmZhaWxlZF9wYyA9PSBOVUxMICYmIHBjLT5jWzBdICE9IFJFUVVFU1RfU0VOU0UpCisJCWRyaXZlLT5mYWlsZWRfcGMgPSBwYzsKIAogCS8qIFNldCB0aGUgY3VycmVudCBwYWNrZXQgY29tbWFuZCAqLwogCWRyaXZlLT5wYyA9IHBjOwpAQCAtNjg1LDkgKzY0NSw5IEBACiAJCQkJCQl0YXBlLT5hc2NxKTsKIAkJCX0KIAkJCS8qIEdpdmluZyB1cCAqLwotCQkJcGMtPmVycm9yID0gSURFVEFQRV9FUlJPUl9HRU5FUkFMOworCQkJcGMtPmVycm9yID0gSURFX0RSVl9FUlJPUl9HRU5FUkFMOwogCQl9Ci0JCXRhcGUtPmZhaWxlZF9wYyA9IE5VTEw7CisJCWRyaXZlLT5mYWlsZWRfcGMgPSBOVUxMOwogCQlkcml2ZS0+cGNfY2FsbGJhY2soZHJpdmUsIDApOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQpAQCAtNjk1LDcgKzY1NSw3IEBACiAKIAlwYy0+cmV0cmllcysrOwogCi0JcmV0dXJuIGlkZV9pc3N1ZV9wYyhkcml2ZSk7CisJcmV0dXJuIGlkZV9pc3N1ZV9wYyhkcml2ZSwgY21kKTsKIH0KIAogLyogQSBtb2RlIHNlbnNlIGNvbW1hbmQgaXMgdXNlZCB0byAic2Vuc2UiIHRhcGUgcGFyYW1ldGVycy4gKi8KQEAgLTc0Niw4ICs3MDYsOCBAQAogCQl9CiAJCXBjLT5lcnJvciA9IDA7CiAJfSBlbHNlIHsKLQkJcGMtPmVycm9yID0gSURFVEFQRV9FUlJPUl9HRU5FUkFMOwotCQl0YXBlLT5mYWlsZWRfcGMgPSBOVUxMOworCQlwYy0+ZXJyb3IgPSBJREVfRFJWX0VSUk9SX0dFTkVSQUw7CisJCWRyaXZlLT5mYWlsZWRfcGMgPSBOVUxMOwogCX0KIAlkcml2ZS0+cGNfY2FsbGJhY2soZHJpdmUsIDApOwogCXJldHVybiBpZGVfc3RvcHBlZDsKQEAgLTc5MCw2ICs3NTAsNyBAQAogCWlkZXRhcGVfdGFwZV90ICp0YXBlID0gZHJpdmUtPmRyaXZlcl9kYXRhOwogCXN0cnVjdCBpZGVfYXRhcGlfcGMgKnBjID0gTlVMTDsKIAlzdHJ1Y3QgcmVxdWVzdCAqcG9zdHBvbmVkX3JxID0gdGFwZS0+cG9zdHBvbmVkX3JxOworCXN0cnVjdCBpZGVfY21kIGNtZDsKIAl1OCBzdGF0OwogCiAJZGVidWdfbG9nKERCR19TRU5TRSwgInNlY3RvcjogJWxsdSwgbnJfc2VjdG9yczogJWx1LCIKQEAgLTgwMSwxMyArNzYyLDE1IEBACiAJCS8qIFdlIGRvIG5vdCBzdXBwb3J0IGJ1ZmZlciBjYWNoZSBvcmlnaW5hdGVkIHJlcXVlc3RzLiAqLwogCQlwcmludGsoS0VSTl9OT1RJQ0UgImlkZS10YXBlOiAlczogVW5zdXBwb3J0ZWQgcmVxdWVzdCBpbiAiCiAJCQkicmVxdWVzdCBxdWV1ZSAoJWQpXG4iLCBkcml2ZS0+bmFtZSwgcnEtPmNtZF90eXBlKTsKLQkJaWRlX2VuZF9yZXF1ZXN0KGRyaXZlLCAwLCAwKTsKKwkJaWYgKGJsa19mc19yZXF1ZXN0KHJxKSA9PSAwICYmIHJxLT5lcnJvcnMgPT0gMCkKKwkJCXJxLT5lcnJvcnMgPSAtRUlPOworCQlpZGVfY29tcGxldGVfcnEoZHJpdmUsIC1FSU8sIGlkZV9ycV9ieXRlcyhycSkpOwogCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJfQogCiAJLyogUmV0cnkgYSBmYWlsZWQgcGFja2V0IGNvbW1hbmQgKi8KLQlpZiAodGFwZS0+ZmFpbGVkX3BjICYmIGRyaXZlLT5wYy0+Y1swXSA9PSBSRVFVRVNUX1NFTlNFKSB7Ci0JCXBjID0gdGFwZS0+ZmFpbGVkX3BjOworCWlmIChkcml2ZS0+ZmFpbGVkX3BjICYmIGRyaXZlLT5wYy0+Y1swXSA9PSBSRVFVRVNUX1NFTlNFKSB7CisJCXBjID0gZHJpdmUtPmZhaWxlZF9wYzsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC04MTUsNyArNzc4LDkgQEAKIAkJaWYgKHJxICE9IHBvc3Rwb25lZF9ycSkgewogCQkJcHJpbnRrKEtFUk5fRVJSICJpZGUtdGFwZTogaWRlLXRhcGUuYyBidWcgLSAiCiAJCQkJCSJUd28gRFNDIHJlcXVlc3RzIHdlcmUgcXVldWVkXG4iKTsKLQkJCWlkZXRhcGVfZW5kX3JlcXVlc3QoZHJpdmUsIDAsIDApOworCQkJZHJpdmUtPmZhaWxlZF9wYyA9IE5VTEw7CisJCQlycS0+ZXJyb3JzID0gMDsKKwkJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgMCwgYmxrX3JxX2J5dGVzKHJxKSk7CiAJCQlyZXR1cm4gaWRlX3N0b3BwZWQ7CiAJCX0KIApAQCAtODgxLDcgKzg0NiwxNCBAQAogCUJVRygpOwogCiBvdXQ6Ci0JcmV0dXJuIGlkZXRhcGVfaXNzdWVfcGMoZHJpdmUsIHBjKTsKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOworCisJaWYgKHJxX2RhdGFfZGlyKHJxKSkKKwkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19XUklURTsKKworCWNtZC5ycSA9IHJxOworCisJcmV0dXJuIGlkZV90YXBlX2lzc3VlX3BjKGRyaXZlLCAmY21kLCBwYyk7CiB9CiAKIC8qCkBAIC0xMjI2LDcgKzExOTgsNyBAQAogCiAJaWYgKHRhcGUtPm1lcmdlX2JoKQogCQlpZGV0YXBlX2luaXRfbWVyZ2VfYnVmZmVyKHRhcGUpOwotCWlmIChlcnJvcnMgPT0gSURFVEFQRV9FUlJPUl9HRU5FUkFMKQorCWlmIChlcnJvcnMgPT0gSURFX0RSVl9FUlJPUl9HRU5FUkFMKQogCQlyZXR1cm4gLUVJTzsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMjE5Miw4ICsyMTY0LDYgQEAKIAlkcml2ZS0+cGNfdXBkYXRlX2J1ZmZlcnMgPSBpZGV0YXBlX3VwZGF0ZV9idWZmZXJzOwogCWRyaXZlLT5wY19pb19idWZmZXJzCSA9IGlkZV90YXBlX2lvX2J1ZmZlcnM7CiAKLQlzcGluX2xvY2tfaW5pdCgmdGFwZS0+bG9jayk7Ci0KIAlkcml2ZS0+ZGV2X2ZsYWdzIHw9IElERV9ERkxBR19EU0NfT1ZFUkxBUDsKIAogCWlmIChkcml2ZS0+aHdpZi0+aG9zdF9mbGFncyAmIElERV9IRkxBR19OT19EU0MpIHsKQEAgLTIzMjUsNyArMjI5NSw2IEBACiAJLnJlbW92ZQkJCT0gaWRlX3RhcGVfcmVtb3ZlLAogCS52ZXJzaW9uCQk9IElERVRBUEVfVkVSU0lPTiwKIAkuZG9fcmVxdWVzdAkJPSBpZGV0YXBlX2RvX3JlcXVlc3QsCi0JLmVuZF9yZXF1ZXN0CQk9IGlkZXRhcGVfZW5kX3JlcXVlc3QsCiAjaWZkZWYgQ09ORklHX0lERV9QUk9DX0ZTCiAJLnByb2NfZW50cmllcwkJPSBpZGVfdGFwZV9wcm9jX2VudHJpZXMsCiAJLnByb2NfZGV2c2V0cwkJPSBpZGVfdGFwZV9wcm9jX2RldnNldHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9pZGUtdGFza2ZpbGUuYyBiL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCmluZGV4IDE2MTM4YmMuLjg0NTMyYmUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCisrKyBiL2RyaXZlcnMvaWRlL2lkZS10YXNrZmlsZS5jCkBAIC0zOSw4OCArMzksODYgQEAKIAogaW50IHRhc2tmaWxlX2xpYl9nZXRfaWRlbnRpZnkgKGlkZV9kcml2ZV90ICpkcml2ZSwgdTggKmJ1ZikKIHsKLQlpZGVfdGFza190IGFyZ3M7CisJc3RydWN0IGlkZV9jbWQgY21kOwogCi0JbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoaWRlX3Rhc2tfdCkpOwotCWFyZ3MudGYubnNlY3QgPSAweDAxOworCW1lbXNldCgmY21kLCAwLCBzaXplb2YoY21kKSk7CisJY21kLnRmLm5zZWN0ID0gMHgwMTsKIAlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrKQotCQlhcmdzLnRmLmNvbW1hbmQgPSBBVEFfQ01EX0lEX0FUQTsKKwkJY21kLnRmLmNvbW1hbmQgPSBBVEFfQ01EX0lEX0FUQTsKIAllbHNlCi0JCWFyZ3MudGYuY29tbWFuZCA9IEFUQV9DTURfSURfQVRBUEk7Ci0JYXJncy50Zl9mbGFncwk9IElERV9URkxBR19URiB8IElERV9URkxBR19ERVZJQ0U7Ci0JYXJncy5kYXRhX3BoYXNlCT0gVEFTS0ZJTEVfSU47Ci0JcmV0dXJuIGlkZV9yYXdfdGFza2ZpbGUoZHJpdmUsICZhcmdzLCBidWYsIDEpOworCQljbWQudGYuY29tbWFuZCA9IEFUQV9DTURfSURfQVRBUEk7CisJY21kLnRmX2ZsYWdzID0gSURFX1RGTEFHX1RGIHwgSURFX1RGTEFHX0RFVklDRTsKKwljbWQucHJvdG9jb2wgPSBBVEFfUFJPVF9QSU87CisKKwlyZXR1cm4gaWRlX3Jhd190YXNrZmlsZShkcml2ZSwgJmNtZCwgYnVmLCAxKTsKIH0KIAogc3RhdGljIGlkZV9zdGFydHN0b3BfdCB0YXNrX25vX2RhdGFfaW50cihpZGVfZHJpdmVfdCAqKTsKLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgcHJlX3Rhc2tfb3V0X2ludHIoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7Ci1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHRhc2tfaW5faW50cihpZGVfZHJpdmVfdCAqKTsKK3N0YXRpYyBpZGVfc3RhcnRzdG9wX3QgcHJlX3Rhc2tfb3V0X2ludHIoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKik7CitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHRhc2tfcGlvX2ludHIoaWRlX2RyaXZlX3QgKik7CiAKLWlkZV9zdGFydHN0b3BfdCBkb19yd190YXNrZmlsZSAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQoraWRlX3N0YXJ0c3RvcF90IGRvX3J3X3Rhc2tmaWxlKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKm9yaWdfY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKKwlzdHJ1Y3QgaWRlX2NtZCAqY21kID0gJmh3aWYtPmNtZDsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOwogCWlkZV9oYW5kbGVyX3QgKmhhbmRsZXIgPSBOVUxMOwogCWNvbnN0IHN0cnVjdCBpZGVfdHBfb3BzICp0cF9vcHMgPSBod2lmLT50cF9vcHM7CiAJY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzICpkbWFfb3BzID0gaHdpZi0+ZG1hX29wczsKIAotCWlmICh0YXNrLT5kYXRhX3BoYXNlID09IFRBU0tGSUxFX01VTFRJX0lOIHx8Ci0JICAgIHRhc2stPmRhdGFfcGhhc2UgPT0gVEFTS0ZJTEVfTVVMVElfT1VUKSB7Ci0JCWlmICghZHJpdmUtPm11bHRfY291bnQpIHsKLQkJCXByaW50ayhLRVJOX0VSUiAiJXM6IG11bHRpbW9kZSBub3Qgc2V0IVxuIiwKLQkJCQkJZHJpdmUtPm5hbWUpOwotCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCQl9CisJaWYgKG9yaWdfY21kLT5wcm90b2NvbCA9PSBBVEFfUFJPVF9QSU8gJiYKKwkgICAgKG9yaWdfY21kLT50Zl9mbGFncyAmIElERV9URkxBR19NVUxUSV9QSU8pICYmCisJICAgIGRyaXZlLT5tdWx0X2NvdW50ID09IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogbXVsdGltb2RlIG5vdCBzZXQhXG4iLCBkcml2ZS0+bmFtZSk7CisJCXJldHVybiBpZGVfc3RvcHBlZDsKIAl9CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRkxBR0dFRCkKLQkJdGFzay0+dGZfZmxhZ3MgfD0gSURFX1RGTEFHX0ZMQUdHRURfU0VUX0lOX0ZMQUdTOworCWlmIChvcmlnX2NtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19GTEFHR0VEKQorCQlvcmlnX2NtZC0+ZnRmX2ZsYWdzIHw9IElERV9GVEZMQUdfU0VUX0lOX0ZMQUdTOwogCi0JbWVtY3B5KCZod2lmLT50YXNrLCB0YXNrLCBzaXplb2YoKnRhc2spKTsKKwltZW1jcHkoY21kLCBvcmlnX2NtZCwgc2l6ZW9mKCpjbWQpKTsKIAotCWlmICgodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRE1BX1BJT19GQUxMQkFDSykgPT0gMCkgeworCWlmICgoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19ETUFfUElPX0ZBTExCQUNLKSA9PSAwKSB7CiAJCWlkZV90Zl9kdW1wKGRyaXZlLT5uYW1lLCB0Zik7CiAJCXRwX29wcy0+c2V0X2lycShod2lmLCAxKTsKIAkJU0VMRUNUX01BU0soZHJpdmUsIDApOwotCQl0cF9vcHMtPnRmX2xvYWQoZHJpdmUsIHRhc2spOworCQl0cF9vcHMtPnRmX2xvYWQoZHJpdmUsIGNtZCk7CiAJfQogCi0Jc3dpdGNoICh0YXNrLT5kYXRhX3BoYXNlKSB7Ci0JY2FzZSBUQVNLRklMRV9NVUxUSV9PVVQ6Ci0JY2FzZSBUQVNLRklMRV9PVVQ6Ci0JCXRwX29wcy0+ZXhlY19jb21tYW5kKGh3aWYsIHRmLT5jb21tYW5kKTsKLQkJbmRlbGF5KDQwMCk7CS8qIEZJWE1FICovCi0JCXJldHVybiBwcmVfdGFza19vdXRfaW50cihkcml2ZSwgdGFzay0+cnEpOwotCWNhc2UgVEFTS0ZJTEVfTVVMVElfSU46Ci0JY2FzZSBUQVNLRklMRV9JTjoKLQkJaGFuZGxlciA9IHRhc2tfaW5faW50cjsKKwlzd2l0Y2ggKGNtZC0+cHJvdG9jb2wpIHsKKwljYXNlIEFUQV9QUk9UX1BJTzoKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfV1JJVEUpIHsKKwkJCXRwX29wcy0+ZXhlY19jb21tYW5kKGh3aWYsIHRmLT5jb21tYW5kKTsKKwkJCW5kZWxheSg0MDApOwkvKiBGSVhNRSAqLworCQkJcmV0dXJuIHByZV90YXNrX291dF9pbnRyKGRyaXZlLCBjbWQpOworCQl9CisJCWhhbmRsZXIgPSB0YXNrX3Bpb19pbnRyOwogCQkvKiBmYWxsLXRocm91Z2ggKi8KLQljYXNlIFRBU0tGSUxFX05PX0RBVEE6CisJY2FzZSBBVEFfUFJPVF9OT0RBVEE6CiAJCWlmIChoYW5kbGVyID09IE5VTEwpCiAJCQloYW5kbGVyID0gdGFza19ub19kYXRhX2ludHI7Ci0JCWlkZV9leGVjdXRlX2NvbW1hbmQoZHJpdmUsIHRmLT5jb21tYW5kLCBoYW5kbGVyLAotCQkJCSAgICBXQUlUX1dPUlNUQ0FTRSwgTlVMTCk7CisJCWlkZV9leGVjdXRlX2NvbW1hbmQoZHJpdmUsIGNtZCwgaGFuZGxlciwgV0FJVF9XT1JTVENBU0UpOwogCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7Ci0JZGVmYXVsdDoKKwljYXNlIEFUQV9QUk9UX0RNQToKIAkJaWYgKChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX1VTSU5HX0RNQSkgPT0gMCB8fAotCQkgICAgZG1hX29wcy0+ZG1hX3NldHVwKGRyaXZlKSkKKwkJICAgIGlkZV9idWlsZF9zZ2xpc3QoZHJpdmUsIGNtZCkgPT0gMCB8fAorCQkgICAgZG1hX29wcy0+ZG1hX3NldHVwKGRyaXZlLCBjbWQpKQogCQkJcmV0dXJuIGlkZV9zdG9wcGVkOwotCQlkbWFfb3BzLT5kbWFfZXhlY19jbWQoZHJpdmUsIHRmLT5jb21tYW5kKTsKKwkJaHdpZi0+ZXhwaXJ5ID0gZG1hX29wcy0+ZG1hX3RpbWVyX2V4cGlyeTsKKwkJaWRlX2V4ZWN1dGVfY29tbWFuZChkcml2ZSwgY21kLCBpZGVfZG1hX2ludHIsIDIgKiBXQUlUX0NNRCk7CiAJCWRtYV9vcHMtPmRtYV9zdGFydChkcml2ZSk7CisJZGVmYXVsdDoKIAkJcmV0dXJuIGlkZV9zdGFydGVkOwogCX0KIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGRvX3J3X3Rhc2tmaWxlKTsKIAotLyoKLSAqIEhhbmRsZXIgZm9yIGNvbW1hbmRzIHdpdGhvdXQgYSBkYXRhIHBoYXNlCi0gKi8KIHN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgdGFza19ub19kYXRhX2ludHIoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKLQlpZGVfdGFza190ICp0YXNrID0gJmh3aWYtPnRhc2s7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7Ci0JaW50IGN1c3RvbSA9ICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19DVVNUT01fSEFORExFUikgPyAxIDogMDsKKwlzdHJ1Y3QgaWRlX2NtZCAqY21kID0gJmh3aWYtPmNtZDsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOworCWludCBjdXN0b20gPSAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19DVVNUT01fSEFORExFUikgPyAxIDogMDsKIAlpbnQgcmV0cmllcyA9IChjdXN0b20gJiYgdGYtPmNvbW1hbmQgPT0gQVRBX0NNRF9JTklUX0RFVl9QQVJBTVMpID8gNSA6IDE7CiAJdTggc3RhdDsKIApAQCAtMTQyLDI4ICsxNDAsMjYgQEAKIAkJfSBlbHNlIGlmIChjdXN0b20gJiYgdGYtPmNvbW1hbmQgPT0gQVRBX0NNRF9JTklUX0RFVl9QQVJBTVMpIHsKIAkJCWlmICgoc3RhdCAmIChBVEFfRVJSIHwgQVRBX0RSUSkpID09IDApIHsKIAkJCQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZ0YXNrX25vX2RhdGFfaW50ciwKLQkJCQkJCVdBSVRfV09SU1RDQVNFLCBOVUxMKTsKKwkJCQkJCVdBSVRfV09SU1RDQVNFKTsKIAkJCQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CiAJCQl9CiAJCX0KIAkJcmV0dXJuIGlkZV9lcnJvcihkcml2ZSwgInRhc2tfbm9fZGF0YV9pbnRyIiwgc3RhdCk7Ci0JCS8qIGNhbGxzIGlkZV9lbmRfZHJpdmVfY21kICovCiAJfQogCi0JaWYgKCFjdXN0b20pCi0JCWlkZV9lbmRfZHJpdmVfY21kKGRyaXZlLCBzdGF0LCBpZGVfcmVhZF9lcnJvcihkcml2ZSkpOwotCWVsc2UgaWYgKHRmLT5jb21tYW5kID09IEFUQV9DTURfSURMRUlNTUVESUFURSkgewotCQlod2lmLT50cF9vcHMtPnRmX3JlYWQoZHJpdmUsIHRhc2spOwotCQlpZiAodGYtPmxiYWwgIT0gMHhjNCkgewotCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaGVhZCB1bmxvYWQgZmFpbGVkIVxuIiwKLQkJCSAgICAgICBkcml2ZS0+bmFtZSk7Ci0JCQlpZGVfdGZfZHVtcChkcml2ZS0+bmFtZSwgdGYpOwotCQl9IGVsc2UKLQkJCWRyaXZlLT5kZXZfZmxhZ3MgfD0gSURFX0RGTEFHX1BBUktFRDsKLQkJaWRlX2VuZF9kcml2ZV9jbWQoZHJpdmUsIHN0YXQsIGlkZV9yZWFkX2Vycm9yKGRyaXZlKSk7Ci0JfSBlbHNlIGlmICh0Zi0+Y29tbWFuZCA9PSBBVEFfQ01EX1NFVF9NVUxUSSkKKwlpZiAoY3VzdG9tICYmIHRmLT5jb21tYW5kID09IEFUQV9DTURfU0VUX01VTFRJKQogCQlkcml2ZS0+bXVsdF9jb3VudCA9IGRyaXZlLT5tdWx0X3JlcTsKIAorCWlmIChjdXN0b20gPT0gMCB8fCB0Zi0+Y29tbWFuZCA9PSBBVEFfQ01EX0lETEVJTU1FRElBVEUgfHwKKwkgICAgdGYtPmNvbW1hbmQgPT0gQVRBX0NNRF9DSEtfUE9XRVIpIHsKKwkJc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+cnE7CisKKwkJaWYgKGJsa19wbV9yZXF1ZXN0KHJxKSkKKwkJCWlkZV9jb21wbGV0ZV9wbV9ycShkcml2ZSwgcnEpOworCQllbHNlCisJCQlpZGVfZmluaXNoX2NtZChkcml2ZSwgY21kLCBzdGF0KTsKKwl9CisKIAlyZXR1cm4gaWRlX3N0b3BwZWQ7CiB9CiAKQEAgLTE5MiwxMiArMTg4LDEyIEBACiAJcmV0dXJuIHN0YXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGlkZV9waW9fc2VjdG9yKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAotCQkJICAgdW5zaWduZWQgaW50IHdyaXRlKQorc3RhdGljIHZvaWQgaWRlX3Bpb19ieXRlcyhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsCisJCQkgIHVuc2lnbmVkIGludCB3cml0ZSwgdW5zaWduZWQgaW50IG5yX2J5dGVzKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnID0gaHdpZi0+c2dfdGFibGU7Ci0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpjdXJzZyA9IGh3aWYtPmN1cnNnOworCXN0cnVjdCBzY2F0dGVybGlzdCAqY3Vyc2cgPSBjbWQtPmN1cnNnOwogCXN0cnVjdCBwYWdlICpwYWdlOwogI2lmZGVmIENPTkZJR19ISUdITUVNCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKQEAgLTIwNSwxNCArMjAxLDE0IEBACiAJdW5zaWduZWQgaW50IG9mZnNldDsKIAl1OCAqYnVmOwogCi0JY3Vyc2cgPSBod2lmLT5jdXJzZzsKKwljdXJzZyA9IGNtZC0+Y3Vyc2c7CiAJaWYgKCFjdXJzZykgewogCQljdXJzZyA9IHNnOwotCQlod2lmLT5jdXJzZyA9IHNnOworCQljbWQtPmN1cnNnID0gc2c7CiAJfQogCiAJcGFnZSA9IHNnX3BhZ2UoY3Vyc2cpOwotCW9mZnNldCA9IGN1cnNnLT5vZmZzZXQgKyBod2lmLT5jdXJzZ19vZnMgKiBTRUNUT1JfU0laRTsKKwlvZmZzZXQgPSBjdXJzZy0+b2Zmc2V0ICsgY21kLT5jdXJzZ19vZnM7CiAKIAkvKiBnZXQgdGhlIGN1cnJlbnQgcGFnZSBhbmQgb2Zmc2V0ICovCiAJcGFnZSA9IG50aF9wYWdlKHBhZ2UsIChvZmZzZXQgPj4gUEFHRV9TSElGVCkpOwpAQCAtMjIzLDE5ICsyMTksMTkgQEAKICNlbmRpZgogCWJ1ZiA9IGttYXBfYXRvbWljKHBhZ2UsIEtNX0JJT19TUkNfSVJRKSArIG9mZnNldDsKIAotCWh3aWYtPm5sZWZ0LS07Ci0JaHdpZi0+Y3Vyc2dfb2ZzKys7CisJY21kLT5ubGVmdCAtPSBucl9ieXRlczsKKwljbWQtPmN1cnNnX29mcyArPSBucl9ieXRlczsKIAotCWlmICgoaHdpZi0+Y3Vyc2dfb2ZzICogU0VDVE9SX1NJWkUpID09IGN1cnNnLT5sZW5ndGgpIHsKLQkJaHdpZi0+Y3Vyc2cgPSBzZ19uZXh0KGh3aWYtPmN1cnNnKTsKLQkJaHdpZi0+Y3Vyc2dfb2ZzID0gMDsKKwlpZiAoY21kLT5jdXJzZ19vZnMgPT0gY3Vyc2ctPmxlbmd0aCkgeworCQljbWQtPmN1cnNnID0gc2dfbmV4dChjbWQtPmN1cnNnKTsKKwkJY21kLT5jdXJzZ19vZnMgPSAwOwogCX0KIAogCS8qIGRvIHRoZSBhY3R1YWwgZGF0YSB0cmFuc2ZlciAqLwogCWlmICh3cml0ZSkKLQkJaHdpZi0+dHBfb3BzLT5vdXRwdXRfZGF0YShkcml2ZSwgcnEsIGJ1ZiwgU0VDVE9SX1NJWkUpOworCQlod2lmLT50cF9vcHMtPm91dHB1dF9kYXRhKGRyaXZlLCBjbWQsIGJ1ZiwgbnJfYnl0ZXMpOwogCWVsc2UKLQkJaHdpZi0+dHBfb3BzLT5pbnB1dF9kYXRhKGRyaXZlLCBycSwgYnVmLCBTRUNUT1JfU0laRSk7CisJCWh3aWYtPnRwX29wcy0+aW5wdXRfZGF0YShkcml2ZSwgY21kLCBidWYsIG5yX2J5dGVzKTsKIAogCWt1bm1hcF9hdG9taWMoYnVmLCBLTV9CSU9fU1JDX0lSUSk7CiAjaWZkZWYgQ09ORklHX0hJR0hNRU0KQEAgLTI0MywxODggKzIzOSwxMzcgQEAKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBpZGVfcGlvX211bHRpKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLAorc3RhdGljIHZvaWQgaWRlX3Bpb19tdWx0aShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsCiAJCQkgIHVuc2lnbmVkIGludCB3cml0ZSkKIHsKIAl1bnNpZ25lZCBpbnQgbnNlY3Q7CiAKLQluc2VjdCA9IG1pbl90KHVuc2lnbmVkIGludCwgZHJpdmUtPmh3aWYtPm5sZWZ0LCBkcml2ZS0+bXVsdF9jb3VudCk7CisJbnNlY3QgPSBtaW5fdCh1bnNpZ25lZCBpbnQsIGNtZC0+bmxlZnQgPj4gOSwgZHJpdmUtPm11bHRfY291bnQpOwogCXdoaWxlIChuc2VjdC0tKQotCQlpZGVfcGlvX3NlY3Rvcihkcml2ZSwgcnEsIHdyaXRlKTsKKwkJaWRlX3Bpb19ieXRlcyhkcml2ZSwgY21kLCB3cml0ZSwgU0VDVE9SX1NJWkUpOwogfQogCi1zdGF0aWMgdm9pZCBpZGVfcGlvX2RhdGFibG9jayhpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKLQkJCQkgICAgIHVuc2lnbmVkIGludCB3cml0ZSkKK3N0YXRpYyB2b2lkIGlkZV9waW9fZGF0YWJsb2NrKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwKKwkJCSAgICAgIHVuc2lnbmVkIGludCB3cml0ZSkKIHsKIAl1OCBzYXZlZF9pb18zMmJpdCA9IGRyaXZlLT5pb18zMmJpdDsKIAotCWlmIChycS0+YmlvKQkvKiBmcyByZXF1ZXN0ICovCi0JCXJxLT5lcnJvcnMgPSAwOworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0ZTKQorCQljbWQtPnJxLT5lcnJvcnMgPSAwOwogCi0JaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9BVEFfVEFTS0ZJTEUpIHsKLQkJaWRlX3Rhc2tfdCAqdGFzayA9IHJxLT5zcGVjaWFsOwotCi0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JT18xNkJJVCkKLQkJCWRyaXZlLT5pb18zMmJpdCA9IDA7Ci0JfQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lPXzE2QklUKQorCQlkcml2ZS0+aW9fMzJiaXQgPSAwOwogCiAJdG91Y2hfc29mdGxvY2t1cF93YXRjaGRvZygpOwogCi0Jc3dpdGNoIChkcml2ZS0+aHdpZi0+ZGF0YV9waGFzZSkgewotCWNhc2UgVEFTS0ZJTEVfTVVMVElfSU46Ci0JY2FzZSBUQVNLRklMRV9NVUxUSV9PVVQ6Ci0JCWlkZV9waW9fbXVsdGkoZHJpdmUsIHJxLCB3cml0ZSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCWlkZV9waW9fc2VjdG9yKGRyaXZlLCBycSwgd3JpdGUpOwotCQlicmVhazsKLQl9CisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTVVMVElfUElPKQorCQlpZGVfcGlvX211bHRpKGRyaXZlLCBjbWQsIHdyaXRlKTsKKwllbHNlCisJCWlkZV9waW9fYnl0ZXMoZHJpdmUsIGNtZCwgd3JpdGUsIFNFQ1RPUl9TSVpFKTsKIAogCWRyaXZlLT5pb18zMmJpdCA9IHNhdmVkX2lvXzMyYml0OwogfQogCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHRhc2tfZXJyb3IoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCi0JCQkJICBjb25zdCBjaGFyICpzLCB1OCBzdGF0KQorc3RhdGljIHZvaWQgaWRlX2Vycm9yX2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7Ci0JaWYgKHJxLT5iaW8pIHsKLQkJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCQlpbnQgc2VjdG9ycyA9IGh3aWYtPm5zZWN0IC0gaHdpZi0+bmxlZnQ7CisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRlMpIHsKKwkJaW50IG5yX2J5dGVzID0gY21kLT5uYnl0ZXMgLSBjbWQtPm5sZWZ0OwogCi0JCXN3aXRjaCAoaHdpZi0+ZGF0YV9waGFzZSkgewotCQljYXNlIFRBU0tGSUxFX0lOOgotCQkJaWYgKGh3aWYtPm5sZWZ0KQotCQkJCWJyZWFrOwotCQkJLyogZmFsbCB0aHJvdWdoICovCi0JCWNhc2UgVEFTS0ZJTEVfT1VUOgotCQkJc2VjdG9ycy0tOwotCQkJYnJlYWs7Ci0JCWNhc2UgVEFTS0ZJTEVfTVVMVElfSU46Ci0JCQlpZiAoaHdpZi0+bmxlZnQpCi0JCQkJYnJlYWs7Ci0JCQkvKiBmYWxsIHRocm91Z2ggKi8KLQkJY2FzZSBUQVNLRklMRV9NVUxUSV9PVVQ6Ci0JCQlzZWN0b3JzIC09IGRyaXZlLT5tdWx0X2NvdW50OwotCQlkZWZhdWx0OgotCQkJYnJlYWs7CisJCWlmIChjbWQtPnByb3RvY29sID09IEFUQV9QUk9UX1BJTyAmJgorCQkgICAgKChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX1dSSVRFKSB8fCBjbWQtPm5sZWZ0ID09IDApKSB7CisJCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19NVUxUSV9QSU8pCisJCQkJbnJfYnl0ZXMgLT0gZHJpdmUtPm11bHRfY291bnQgPDwgOTsKKwkJCWVsc2UKKwkJCQlucl9ieXRlcyAtPSBTRUNUT1JfU0laRTsKIAkJfQogCi0JCWlmIChzZWN0b3JzID4gMCkgewotCQkJc3RydWN0IGlkZV9kcml2ZXIgKmRydjsKLQotCQkJZHJ2ID0gKihzdHJ1Y3QgaWRlX2RyaXZlciAqKilycS0+cnFfZGlzay0+cHJpdmF0ZV9kYXRhOwotCQkJZHJ2LT5lbmRfcmVxdWVzdChkcml2ZSwgMSwgc2VjdG9ycyk7Ci0JCX0KKwkJaWYgKG5yX2J5dGVzID4gMCkKKwkJCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgMCwgbnJfYnl0ZXMpOwogCX0KLQlyZXR1cm4gaWRlX2Vycm9yKGRyaXZlLCBzLCBzdGF0KTsKIH0KIAotdm9pZCB0YXNrX2VuZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxLCB1OCBzdGF0KQordm9pZCBpZGVfZmluaXNoX2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsIHU4IHN0YXQpCiB7Ci0JaWYgKHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9BVEFfVEFTS0ZJTEUpIHsKLQkJdTggZXJyID0gaWRlX3JlYWRfZXJyb3IoZHJpdmUpOworCXN0cnVjdCByZXF1ZXN0ICpycSA9IGRyaXZlLT5od2lmLT5ycTsKKwl1OCBlcnIgPSBpZGVfcmVhZF9lcnJvcihkcml2ZSk7CiAKLQkJaWRlX2VuZF9kcml2ZV9jbWQoZHJpdmUsIHN0YXQsIGVycik7Ci0JCXJldHVybjsKLQl9Ci0KLQlpZiAocnEtPnJxX2Rpc2spIHsKLQkJc3RydWN0IGlkZV9kcml2ZXIgKmRydjsKLQotCQlkcnYgPSAqKHN0cnVjdCBpZGVfZHJpdmVyICoqKXJxLT5ycV9kaXNrLT5wcml2YXRlX2RhdGE7OwotCQlkcnYtPmVuZF9yZXF1ZXN0KGRyaXZlLCAxLCBycS0+bnJfc2VjdG9ycyk7Ci0JfSBlbHNlCi0JCWlkZV9lbmRfcmVxdWVzdChkcml2ZSwgMSwgcnEtPm5yX3NlY3RvcnMpOworCWlkZV9jb21wbGV0ZV9jbWQoZHJpdmUsIGNtZCwgc3RhdCwgZXJyKTsKKwlycS0+ZXJyb3JzID0gZXJyOworCWlkZV9jb21wbGV0ZV9ycShkcml2ZSwgZXJyID8gLUVJTyA6IDAsIGJsa19ycV9ieXRlcyhycSkpOwogfQogCiAvKgotICogV2UgZ290IGFuIGludGVycnVwdCBvbiBhIHRhc2tfaW4gY2FzZSwgYnV0IG5vIGVycm9ycyBhbmQgbm8gRFJRLgotICoKLSAqIEl0IG1pZ2h0IGJlIGEgc3B1cmlvdXMgaXJxIChzaGFyZWQgaXJxKSwgYnV0IGl0IG1pZ2h0IGJlIGEKLSAqIGNvbW1hbmQgdGhhdCBoYWQgbm8gb3V0cHV0LgorICogSGFuZGxlciBmb3IgY29tbWFuZCB3aXRoIFBJTyBkYXRhIHBoYXNlLgogICovCi1zdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHRhc2tfaW5fdW5leHBlY3RlZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgdTggc3RhdCkKLXsKLQkvKiBDb21tYW5kIGFsbCBkb25lPyAqLwotCWlmIChPS19TVEFUKHN0YXQsIEFUQV9EUkRZLCBBVEFfQlVTWSkpIHsKLQkJdGFza19lbmRfcmVxdWVzdChkcml2ZSwgcnEsIHN0YXQpOwotCQlyZXR1cm4gaWRlX3N0b3BwZWQ7Ci0JfQotCi0JLyogQXNzdW1lIGl0IHdhcyBhIHNwdXJpb3VzIGlycSAqLwotCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJnRhc2tfaW5faW50ciwgV0FJVF9XT1JTVENBU0UsIE5VTEwpOwotCXJldHVybiBpZGVfc3RhcnRlZDsKLX0KLQotLyoKLSAqIEhhbmRsZXIgZm9yIGNvbW1hbmQgd2l0aCBQSU8gZGF0YS1pbiBwaGFzZSAoUmVhZC9SZWFkIE11bHRpcGxlKS4KLSAqLwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCB0YXNrX2luX2ludHIoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIGlkZV9zdGFydHN0b3BfdCB0YXNrX3Bpb19pbnRyKGlkZV9kcml2ZV90ICpkcml2ZSkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+cnE7CisJc3RydWN0IGlkZV9jbWQgKmNtZCA9ICZkcml2ZS0+aHdpZi0+Y21kOwogCXU4IHN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOworCXU4IHdyaXRlID0gISEoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSk7CiAKLQkvKiBFcnJvcj8gKi8KLQlpZiAoc3RhdCAmIEFUQV9FUlIpCi0JCXJldHVybiB0YXNrX2Vycm9yKGRyaXZlLCBycSwgX19mdW5jX18sIHN0YXQpOworCWlmICh3cml0ZSA9PSAwKSB7CisJCS8qIEVycm9yPyAqLworCQlpZiAoc3RhdCAmIEFUQV9FUlIpCisJCQlnb3RvIG91dF9lcnI7CiAKLQkvKiBEaWRuJ3Qgd2FudCBhbnkgZGF0YT8gT2RkLiAqLwotCWlmICgoc3RhdCAmIEFUQV9EUlEpID09IDApCi0JCXJldHVybiB0YXNrX2luX3VuZXhwZWN0ZWQoZHJpdmUsIHJxLCBzdGF0KTsKKwkJLyogRGlkbid0IHdhbnQgYW55IGRhdGE/IE9kZC4gKi8KKwkJaWYgKChzdGF0ICYgQVRBX0RSUSkgPT0gMCkgeworCQkJLyogQ29tbWFuZCBhbGwgZG9uZT8gKi8KKwkJCWlmIChPS19TVEFUKHN0YXQsIEFUQV9EUkRZLCBBVEFfQlVTWSkpCisJCQkJZ290byBvdXRfZW5kOwogCi0JaWRlX3Bpb19kYXRhYmxvY2soZHJpdmUsIHJxLCAwKTsKKwkJCS8qIEFzc3VtZSBpdCB3YXMgYSBzcHVyaW91cyBpcnEgKi8KKwkJCWdvdG8gb3V0X3dhaXQ7CisJCX0KKwl9IGVsc2UgeworCQlpZiAoIU9LX1NUQVQoc3RhdCwgRFJJVkVfUkVBRFksIGRyaXZlLT5iYWRfd3N0YXQpKQorCQkJZ290byBvdXRfZXJyOworCisJCS8qIERlYWwgd2l0aCB1bmV4cGVjdGVkIEFUQSBkYXRhIHBoYXNlLiAqLworCQlpZiAoKChzdGF0ICYgQVRBX0RSUSkgPT0gMCkgXiAoY21kLT5ubGVmdCA9PSAwKSkKKwkJCWdvdG8gb3V0X2VycjsKKwl9CisKKwlpZiAod3JpdGUgJiYgY21kLT5ubGVmdCA9PSAwKQorCQlnb3RvIG91dF9lbmQ7CisKKwkvKiBTdGlsbCBkYXRhIGxlZnQgdG8gdHJhbnNmZXIuICovCisJaWRlX3Bpb19kYXRhYmxvY2soZHJpdmUsIGNtZCwgd3JpdGUpOwogCiAJLyogQXJlIHdlIGRvbmU/IENoZWNrIHN0YXR1cyBhbmQgZmluaXNoIHRyYW5zZmVyLiAqLwotCWlmICghaHdpZi0+bmxlZnQpIHsKKwlpZiAod3JpdGUgPT0gMCAmJiBjbWQtPm5sZWZ0ID09IDApIHsKIAkJc3RhdCA9IHdhaXRfZHJpdmVfbm90X2J1c3koZHJpdmUpOwogCQlpZiAoIU9LX1NUQVQoc3RhdCwgMCwgQkFEX1NUQVQpKQotCQkJcmV0dXJuIHRhc2tfZXJyb3IoZHJpdmUsIHJxLCBfX2Z1bmNfXywgc3RhdCk7Ci0JCXRhc2tfZW5kX3JlcXVlc3QoZHJpdmUsIHJxLCBzdGF0KTsKLQkJcmV0dXJuIGlkZV9zdG9wcGVkOworCQkJZ290byBvdXRfZXJyOworCisJCWdvdG8gb3V0X2VuZDsKIAl9Ci0KK291dF93YWl0OgogCS8qIFN0aWxsIGRhdGEgbGVmdCB0byB0cmFuc2Zlci4gKi8KLQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZ0YXNrX2luX2ludHIsIFdBSVRfV09SU1RDQVNFLCBOVUxMKTsKLQorCWlkZV9zZXRfaGFuZGxlcihkcml2ZSwgJnRhc2tfcGlvX2ludHIsIFdBSVRfV09SU1RDQVNFKTsKIAlyZXR1cm4gaWRlX3N0YXJ0ZWQ7CitvdXRfZW5kOgorCWlmICgoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19GUykgPT0gMCkKKwkJaWRlX2ZpbmlzaF9jbWQoZHJpdmUsIGNtZCwgc3RhdCk7CisJZWxzZQorCQlpZGVfY29tcGxldGVfcnEoZHJpdmUsIDAsIGNtZC0+cnEtPm5yX3NlY3RvcnMgPDwgOSk7CisJcmV0dXJuIGlkZV9zdG9wcGVkOworb3V0X2VycjoKKwlpZGVfZXJyb3JfY21kKGRyaXZlLCBjbWQpOworCXJldHVybiBpZGVfZXJyb3IoZHJpdmUsIF9fZnVuY19fLCBzdGF0KTsKIH0KIAotLyoKLSAqIEhhbmRsZXIgZm9yIGNvbW1hbmQgd2l0aCBQSU8gZGF0YS1vdXQgcGhhc2UgKFdyaXRlL1dyaXRlIE11bHRpcGxlKS4KLSAqLwotc3RhdGljIGlkZV9zdGFydHN0b3BfdCB0YXNrX291dF9pbnRyIChpZGVfZHJpdmVfdCAqZHJpdmUpCi17Ci0JaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXN0cnVjdCByZXF1ZXN0ICpycSA9IGh3aWYtPnJxOwotCXU4IHN0YXQgPSBod2lmLT50cF9vcHMtPnJlYWRfc3RhdHVzKGh3aWYpOwotCi0JaWYgKCFPS19TVEFUKHN0YXQsIERSSVZFX1JFQURZLCBkcml2ZS0+YmFkX3dzdGF0KSkKLQkJcmV0dXJuIHRhc2tfZXJyb3IoZHJpdmUsIHJxLCBfX2Z1bmNfXywgc3RhdCk7Ci0KLQkvKiBEZWFsIHdpdGggdW5leHBlY3RlZCBBVEEgZGF0YSBwaGFzZS4gKi8KLQlpZiAoKChzdGF0ICYgQVRBX0RSUSkgPT0gMCkgXiAhaHdpZi0+bmxlZnQpCi0JCXJldHVybiB0YXNrX2Vycm9yKGRyaXZlLCBycSwgX19mdW5jX18sIHN0YXQpOwotCi0JaWYgKCFod2lmLT5ubGVmdCkgewotCQl0YXNrX2VuZF9yZXF1ZXN0KGRyaXZlLCBycSwgc3RhdCk7Ci0JCXJldHVybiBpZGVfc3RvcHBlZDsKLQl9Ci0KLQkvKiBTdGlsbCBkYXRhIGxlZnQgdG8gdHJhbnNmZXIuICovCi0JaWRlX3Bpb19kYXRhYmxvY2soZHJpdmUsIHJxLCAxKTsKLQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZ0YXNrX291dF9pbnRyLCBXQUlUX1dPUlNUQ0FTRSwgTlVMTCk7Ci0KLQlyZXR1cm4gaWRlX3N0YXJ0ZWQ7Ci19Ci0KLXN0YXRpYyBpZGVfc3RhcnRzdG9wX3QgcHJlX3Rhc2tfb3V0X2ludHIoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCitzdGF0aWMgaWRlX3N0YXJ0c3RvcF90IHByZV90YXNrX291dF9pbnRyKGlkZV9kcml2ZV90ICpkcml2ZSwKKwkJCQkJIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJaWRlX3N0YXJ0c3RvcF90IHN0YXJ0c3RvcDsKIAogCWlmIChpZGVfd2FpdF9zdGF0KCZzdGFydHN0b3AsIGRyaXZlLCBBVEFfRFJRLAogCQkJICBkcml2ZS0+YmFkX3dzdGF0LCBXQUlUX0RSUSkpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gRFJRIGFmdGVyIGlzc3VpbmcgJXNXUklURSVzXG4iLAotCQkJZHJpdmUtPm5hbWUsIGRyaXZlLT5od2lmLT5kYXRhX3BoYXNlID8gIk1VTFQiIDogIiIsCisJCQlkcml2ZS0+bmFtZSwKKwkJCShjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX01VTFRJX1BJTykgPyAiTVVMVCIgOiAiIiwKIAkJCShkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQTQ4KSA/ICJfRVhUIiA6ICIiKTsKIAkJcmV0dXJuIHN0YXJ0c3RvcDsKIAl9CkBAIC00MzIsMTMgKzM3NywxNSBAQAogCWlmICgoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19VTk1BU0spID09IDApCiAJCWxvY2FsX2lycV9kaXNhYmxlKCk7CiAKLQlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZ0YXNrX291dF9pbnRyLCBXQUlUX1dPUlNUQ0FTRSwgTlVMTCk7Ci0JaWRlX3Bpb19kYXRhYmxvY2soZHJpdmUsIHJxLCAxKTsKKwlpZGVfc2V0X2hhbmRsZXIoZHJpdmUsICZ0YXNrX3Bpb19pbnRyLCBXQUlUX1dPUlNUQ0FTRSk7CisKKwlpZGVfcGlvX2RhdGFibG9jayhkcml2ZSwgY21kLCAxKTsKIAogCXJldHVybiBpZGVfc3RhcnRlZDsKIH0KIAotaW50IGlkZV9yYXdfdGFza2ZpbGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrLCB1OCAqYnVmLCB1MTYgbnNlY3QpCitpbnQgaWRlX3Jhd190YXNrZmlsZShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsIHU4ICpidWYsCisJCSAgICAgdTE2IG5zZWN0KQogewogCXN0cnVjdCByZXF1ZXN0ICpycTsKIAlpbnQgZXJyb3I7CkBAIC00NTYsMTEgKzQwMywxMSBAQAogCXJxLT5oYXJkX25yX3NlY3RvcnMgPSBycS0+bnJfc2VjdG9ycyA9IG5zZWN0OwogCXJxLT5oYXJkX2N1cl9zZWN0b3JzID0gcnEtPmN1cnJlbnRfbnJfc2VjdG9ycyA9IG5zZWN0OwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX1dSSVRFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX1dSSVRFKQogCQlycS0+Y21kX2ZsYWdzIHw9IFJFUV9SVzsKIAotCXJxLT5zcGVjaWFsID0gdGFzazsKLQl0YXNrLT5ycSA9IHJxOworCXJxLT5zcGVjaWFsID0gY21kOworCWNtZC0+cnEgPSBycTsKIAogCWVycm9yID0gYmxrX2V4ZWN1dGVfcnEoZHJpdmUtPnF1ZXVlLCBOVUxMLCBycSwgMCk7CiAJYmxrX3B1dF9yZXF1ZXN0KHJxKTsKQEAgLTQ3MCwxOSArNDE3LDE5IEBACiAKIEVYUE9SVF9TWU1CT0woaWRlX3Jhd190YXNrZmlsZSk7CiAKLWludCBpZGVfbm9fZGF0YV90YXNrZmlsZShpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCitpbnQgaWRlX25vX2RhdGFfdGFza2ZpbGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewotCXRhc2stPmRhdGFfcGhhc2UgPSBUQVNLRklMRV9OT19EQVRBOworCWNtZC0+cHJvdG9jb2wgPSBBVEFfUFJPVF9OT0RBVEE7CiAKLQlyZXR1cm4gaWRlX3Jhd190YXNrZmlsZShkcml2ZSwgdGFzaywgTlVMTCwgMCk7CisJcmV0dXJuIGlkZV9yYXdfdGFza2ZpbGUoZHJpdmUsIGNtZCwgTlVMTCwgMCk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTChpZGVfbm9fZGF0YV90YXNrZmlsZSk7CiAKICNpZmRlZiBDT05GSUdfSURFX1RBU0tfSU9DVEwKLWludCBpZGVfdGFza2ZpbGVfaW9jdGwgKGlkZV9kcml2ZV90ICpkcml2ZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitpbnQgaWRlX3Rhc2tmaWxlX2lvY3RsKGlkZV9kcml2ZV90ICpkcml2ZSwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CiAJaWRlX3Rhc2tfcmVxdWVzdF90CSpyZXFfdGFzazsKLQlpZGVfdGFza190CQlhcmdzOworCXN0cnVjdCBpZGVfY21kCQljbWQ7CiAJdTggKm91dGJ1ZgkJPSBOVUxMOwogCXU4ICppbmJ1ZgkJPSBOVUxMOwogCXU4ICpkYXRhX2J1ZgkJPSBOVUxMOwpAQCAtNTM2LDUzICs0ODMsNjMgQEAKIAkJfQogCX0KIAotCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGlkZV90YXNrX3QpKTsKKwltZW1zZXQoJmNtZCwgMCwgc2l6ZW9mKGNtZCkpOwogCi0JbWVtY3B5KCZhcmdzLnRmX2FycmF5WzBdLCByZXFfdGFzay0+aG9iX3BvcnRzLCBIRElPX0RSSVZFX0hPQl9IRFJfU0laRSAtIDIpOwotCW1lbWNweSgmYXJncy50Zl9hcnJheVs2XSwgcmVxX3Rhc2stPmlvX3BvcnRzLCBIRElPX0RSSVZFX1RBU0tfSERSX1NJWkUpOworCW1lbWNweSgmY21kLnRmX2FycmF5WzBdLCByZXFfdGFzay0+aG9iX3BvcnRzLAorCSAgICAgICBIRElPX0RSSVZFX0hPQl9IRFJfU0laRSAtIDIpOworCW1lbWNweSgmY21kLnRmX2FycmF5WzZdLCByZXFfdGFzay0+aW9fcG9ydHMsCisJICAgICAgIEhESU9fRFJJVkVfVEFTS19IRFJfU0laRSk7CiAKLQlhcmdzLmRhdGFfcGhhc2UgPSByZXFfdGFzay0+ZGF0YV9waGFzZTsKKwljbWQudGZfZmxhZ3MgICA9IElERV9URkxBR19JT18xNkJJVCB8IElERV9URkxBR19ERVZJQ0UgfAorCQkJIElERV9URkxBR19JTl9URjsKIAotCWFyZ3MudGZfZmxhZ3MgPSBJREVfVEZMQUdfSU9fMTZCSVQgfCBJREVfVEZMQUdfREVWSUNFIHwKLQkJCUlERV9URkxBR19JTl9URjsKIAlpZiAoZHJpdmUtPmRldl9mbGFncyAmIElERV9ERkxBR19MQkE0OCkKLQkJYXJncy50Zl9mbGFncyB8PSAoSURFX1RGTEFHX0xCQTQ4IHwgSURFX1RGTEFHX0lOX0hPQik7CisJCWNtZC50Zl9mbGFncyB8PSAoSURFX1RGTEFHX0xCQTQ4IHwgSURFX1RGTEFHX0lOX0hPQik7CiAKIAlpZiAocmVxX3Rhc2stPm91dF9mbGFncy5hbGwpIHsKLQkJYXJncy50Zl9mbGFncyB8PSBJREVfVEZMQUdfRkxBR0dFRDsKKwkJY21kLmZ0Zl9mbGFncyB8PSBJREVfRlRGTEFHX0ZMQUdHRUQ7CiAKIAkJaWYgKHJlcV90YXNrLT5vdXRfZmxhZ3MuYi5kYXRhKQotCQkJYXJncy50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX0RBVEE7CisJCQljbWQuZnRmX2ZsYWdzIHw9IElERV9GVEZMQUdfT1VUX0RBVEE7CiAKIAkJaWYgKHJlcV90YXNrLT5vdXRfZmxhZ3MuYi5uc2VjdG9yX2hvYikKLQkJCWFyZ3MudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9IT0JfTlNFQ1Q7CisJCQljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9IT0JfTlNFQ1Q7CiAJCWlmIChyZXFfdGFzay0+b3V0X2ZsYWdzLmIuc2VjdG9yX2hvYikKLQkJCWFyZ3MudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9IT0JfTEJBTDsKKwkJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX0hPQl9MQkFMOwogCQlpZiAocmVxX3Rhc2stPm91dF9mbGFncy5iLmxjeWxfaG9iKQotCQkJYXJncy50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX0hPQl9MQkFNOworCQkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfSE9CX0xCQU07CiAJCWlmIChyZXFfdGFzay0+b3V0X2ZsYWdzLmIuaGN5bF9ob2IpCi0JCQlhcmdzLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfSE9CX0xCQUg7CisJCQljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9IT0JfTEJBSDsKIAogCQlpZiAocmVxX3Rhc2stPm91dF9mbGFncy5iLmVycm9yX2ZlYXR1cmUpCi0JCQlhcmdzLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfRkVBVFVSRTsKKwkJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX0ZFQVRVUkU7CiAJCWlmIChyZXFfdGFzay0+b3V0X2ZsYWdzLmIubnNlY3RvcikKLQkJCWFyZ3MudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9OU0VDVDsKKwkJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX05TRUNUOwogCQlpZiAocmVxX3Rhc2stPm91dF9mbGFncy5iLnNlY3RvcikKLQkJCWFyZ3MudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9MQkFMOworCQkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfTEJBTDsKIAkJaWYgKHJlcV90YXNrLT5vdXRfZmxhZ3MuYi5sY3lsKQotCQkJYXJncy50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX0xCQU07CisJCQljbWQudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9MQkFNOwogCQlpZiAocmVxX3Rhc2stPm91dF9mbGFncy5iLmhjeWwpCi0JCQlhcmdzLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfTEJBSDsKKwkJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX0xCQUg7CiAJfSBlbHNlIHsKLQkJYXJncy50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX1RGOwotCQlpZiAoYXJncy50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkKLQkJCWFyZ3MudGZfZmxhZ3MgfD0gSURFX1RGTEFHX09VVF9IT0I7CisJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfT1VUX1RGOworCQlpZiAoY21kLnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KQorCQkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19PVVRfSE9COwogCX0KIAogCWlmIChyZXFfdGFzay0+aW5fZmxhZ3MuYi5kYXRhKQotCQlhcmdzLnRmX2ZsYWdzIHw9IElERV9URkxBR19JTl9EQVRBOworCQljbWQuZnRmX2ZsYWdzIHw9IElERV9GVEZMQUdfSU5fREFUQTsKIAotCXN3aXRjaChyZXFfdGFzay0+ZGF0YV9waGFzZSkgeworCWlmIChyZXFfdGFzay0+cmVxX2NtZCA9PSBJREVfRFJJVkVfVEFTS19SQVdfV1JJVEUpIHsKKwkJLyogZml4dXAgZGF0YSBwaGFzZSBpZiBuZWVkZWQgKi8KKwkJaWYgKHJlcV90YXNrLT5kYXRhX3BoYXNlID09IFRBU0tGSUxFX0lOX0RNQVEgfHwKKwkJICAgIHJlcV90YXNrLT5kYXRhX3BoYXNlID09IFRBU0tGSUxFX0lOX0RNQSkKKwkJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfV1JJVEU7CisJfQorCisJY21kLnByb3RvY29sID0gQVRBX1BST1RfRE1BOworCisJc3dpdGNoIChyZXFfdGFzay0+ZGF0YV9waGFzZSkgewogCQljYXNlIFRBU0tGSUxFX01VTFRJX09VVDoKIAkJCWlmICghZHJpdmUtPm11bHRfY291bnQpIHsKIAkJCQkvKiAoaHMpOiBnaXZlIHVwIGlmIG11bHRjb3VudCBpcyBub3Qgc2V0ICovCkBAIC01OTIsMTEgKzU0OSwxNCBAQAogCQkJCWVyciA9IC1FUEVSTTsKIAkJCQlnb3RvIGFib3J0OwogCQkJfQorCQkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19NVUxUSV9QSU87CiAJCQkvKiBmYWxsIHRocm91Z2ggKi8KIAkJY2FzZSBUQVNLRklMRV9PVVQ6CisJCQljbWQucHJvdG9jb2wgPSBBVEFfUFJPVF9QSU87CiAJCQkvKiBmYWxsIHRocm91Z2ggKi8KIAkJY2FzZSBUQVNLRklMRV9PVVRfRE1BUToKIAkJY2FzZSBUQVNLRklMRV9PVVRfRE1BOgorCQkJY21kLnRmX2ZsYWdzIHw9IElERV9URkxBR19XUklURTsKIAkJCW5zZWN0ID0gdGFza291dCAvIFNFQ1RPUl9TSVpFOwogCQkJZGF0YV9idWYgPSBvdXRidWY7CiAJCQlicmVhazsKQEAgLTYwOSw4ICs1NjksMTAgQEAKIAkJCQllcnIgPSAtRVBFUk07CiAJCQkJZ290byBhYm9ydDsKIAkJCX0KKwkJCWNtZC50Zl9mbGFncyB8PSBJREVfVEZMQUdfTVVMVElfUElPOwogCQkJLyogZmFsbCB0aHJvdWdoICovCiAJCWNhc2UgVEFTS0ZJTEVfSU46CisJCQljbWQucHJvdG9jb2wgPSBBVEFfUFJPVF9QSU87CiAJCQkvKiBmYWxsIHRocm91Z2ggKi8KIAkJY2FzZSBUQVNLRklMRV9JTl9ETUFROgogCQljYXNlIFRBU0tGSUxFX0lOX0RNQToKQEAgLTYxOCw2ICs1ODAsNyBAQAogCQkJZGF0YV9idWYgPSBpbmJ1ZjsKIAkJCWJyZWFrOwogCQljYXNlIFRBU0tGSUxFX05PX0RBVEE6CisJCQljbWQucHJvdG9jb2wgPSBBVEFfUFJPVF9OT0RBVEE7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCWVyciA9IC1FRkFVTFQ7CkBAIC02MjcsNyArNTkwLDcgQEAKIAlpZiAocmVxX3Rhc2stPnJlcV9jbWQgPT0gSURFX0RSSVZFX1RBU0tfTk9fREFUQSkKIAkJbnNlY3QgPSAwOwogCWVsc2UgaWYgKCFuc2VjdCkgewotCQluc2VjdCA9IChhcmdzLnRmLmhvYl9uc2VjdCA8PCA4KSB8IGFyZ3MudGYubnNlY3Q7CisJCW5zZWN0ID0gKGNtZC50Zi5ob2JfbnNlY3QgPDwgOCkgfCBjbWQudGYubnNlY3Q7CiAKIAkJaWYgKCFuc2VjdCkgewogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogaW4vb3V0IGNvbW1hbmQgd2l0aG91dCBkYXRhXG4iLApAQCAtNjM3LDE1ICs2MDAsMTQgQEAKIAkJfQogCX0KIAotCWlmIChyZXFfdGFzay0+cmVxX2NtZCA9PSBJREVfRFJJVkVfVEFTS19SQVdfV1JJVEUpCi0JCWFyZ3MudGZfZmxhZ3MgfD0gSURFX1RGTEFHX1dSSVRFOworCWVyciA9IGlkZV9yYXdfdGFza2ZpbGUoZHJpdmUsICZjbWQsIGRhdGFfYnVmLCBuc2VjdCk7CiAKLQllcnIgPSBpZGVfcmF3X3Rhc2tmaWxlKGRyaXZlLCAmYXJncywgZGF0YV9idWYsIG5zZWN0KTsKKwltZW1jcHkocmVxX3Rhc2stPmhvYl9wb3J0cywgJmNtZC50Zl9hcnJheVswXSwKKwkgICAgICAgSERJT19EUklWRV9IT0JfSERSX1NJWkUgLSAyKTsKKwltZW1jcHkocmVxX3Rhc2stPmlvX3BvcnRzLCAmY21kLnRmX2FycmF5WzZdLAorCSAgICAgICBIRElPX0RSSVZFX1RBU0tfSERSX1NJWkUpOwogCi0JbWVtY3B5KHJlcV90YXNrLT5ob2JfcG9ydHMsICZhcmdzLnRmX2FycmF5WzBdLCBIRElPX0RSSVZFX0hPQl9IRFJfU0laRSAtIDIpOwotCW1lbWNweShyZXFfdGFzay0+aW9fcG9ydHMsICZhcmdzLnRmX2FycmF5WzZdLCBIRElPX0RSSVZFX1RBU0tfSERSX1NJWkUpOwotCi0JaWYgKChhcmdzLnRmX2ZsYWdzICYgSURFX1RGTEFHX0ZMQUdHRURfU0VUX0lOX0ZMQUdTKSAmJgorCWlmICgoY21kLmZ0Zl9mbGFncyAmIElERV9GVEZMQUdfU0VUX0lOX0ZMQUdTKSAmJgogCSAgICByZXFfdGFzay0+aW5fZmxhZ3MuYWxsID09IDApIHsKIAkJcmVxX3Rhc2stPmluX2ZsYWdzLmFsbCA9IElERV9UQVNLRklMRV9TVERfSU5fRkxBR1M7CiAJCWlmIChkcml2ZS0+ZGV2X2ZsYWdzICYgSURFX0RGTEFHX0xCQTQ4KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvaWRlX2FybS5jIGIvZHJpdmVycy9pZGUvaWRlX2FybS5jCmluZGV4IGJkY2FjOTQuLmNmNjM4NTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL2lkZV9hcm0uYworKysgYi9kcml2ZXJzL2lkZS9pZGVfYXJtLmMKQEAgLTE4LDYgKzE4LDEwIEBACiAjZGVmaW5lIElERV9BUk1fSU8JMHgxZjAKICNkZWZpbmUgSURFX0FSTV9JUlEJSVJRX0hBUkRESVNLCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBpZGVfYXJtX3BvcnRfaW5mbyA9IHsKKwkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfTk9fRE1BLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgaWRlX2FybV9pbml0KHZvaWQpCiB7CiAJdW5zaWduZWQgbG9uZyBiYXNlID0gSURFX0FSTV9JTywgY3RsID0gSURFX0FSTV9JTyArIDB4MjA2OwpAQCAtNDEsNyArNDUsNyBAQAogCWh3LmlycSA9IElERV9BUk1fSVJROwogCWh3LmNoaXBzZXQgPSBpZGVfZ2VuZXJpYzsKIAotCXJldHVybiBpZGVfaG9zdF9hZGQoTlVMTCwgaHdzLCBOVUxMKTsKKwlyZXR1cm4gaWRlX2hvc3RfYWRkKCZpZGVfYXJtX3BvcnRfaW5mbywgaHdzLCBOVUxMKTsKIH0KIAogbW9kdWxlX2luaXQoaWRlX2FybV9pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL2l0ODIxeC5jIGIvZHJpdmVycy9pZGUvaXQ4MjF4LmMKaW5kZXggNmI5ZmM5NS4uMGQ0YWM2NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvaXQ4MjF4LmMKKysrIGIvZHJpdmVycy9pZGUvaXQ4MjF4LmMKQEAgLTUwOCwxMCArNTA4LDEwIEBACiBzdGF0aWMgc3RydWN0IGlkZV9kbWFfb3BzIGl0ODIxeF9wYXNzX3Rocm91Z2hfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IGlkZV9kbWFfaG9zdF9zZXQsCiAJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0CQk9IGl0ODIxeF9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gaXQ4MjF4X2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBpZGVfZG1hX3Rlc3RfaXJxLAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAogCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCiAJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9tYWNpZGUuYyBiL2RyaXZlcnMvaWRlL21hY2lkZS5jCmluZGV4IDNjNjAwNjQuLjRiMTcxOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL21hY2lkZS5jCisrKyBiL2RyaXZlcnMvaWRlL21hY2lkZS5jCkBAIC04MCw2ICs4MCwxMSBAQAogCWh3LT5jaGlwc2V0ID0gaWRlX2dlbmVyaWM7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBtYWNpZGVfcG9ydF9pbmZvID0geworCS5ob3N0X2ZsYWdzCQk9IElERV9IRkxBR19NTUlPIHwgSURFX0hGTEFHX05PX0RNQSwKKwkuaXJxX2ZsYWdzCQk9IElSUUZfU0hBUkVELAorfTsKKwogc3RhdGljIGNvbnN0IGNoYXIgKm1hY19pZGVfbmFtZVtdID0KIAl7ICJRdWFkcmEiLCAiUG93ZXJib29rIiwgIlBvd2VyYm9vayBCYWJvb24iIH07CiAKQEAgLTEyMiw3ICsxMjcsNyBAQAogCiAJbWFjaWRlX3NldHVwX3BvcnRzKCZodywgYmFzZSwgaXJxLCBhY2tfaW50cik7CiAKLQlyZXR1cm4gaWRlX2hvc3RfYWRkKE5VTEwsIGh3cywgTlVMTCk7CisJcmV0dXJuIGlkZV9ob3N0X2FkZCgmbWFjaWRlX3BvcnRfaW5mbywgaHdzLCBOVUxMKTsKIH0KIAogbW9kdWxlX2luaXQobWFjaWRlX2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvbnM4NzQxNS5jIGIvZHJpdmVycy9pZGUvbnM4NzQxNS5jCmluZGV4IGVhNDhhM2UuLjdiNjVmZTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL25zODc0MTUuYworKysgYi9kcml2ZXJzL2lkZS9uczg3NDE1LmMKQEAgLTYxLDEyICs2MSwxMiBAQAogCXJldHVybiBzdXBlcmlvX2lkZV9pbmIoaHdpZi0+ZG1hX2Jhc2UgKyBBVEFfRE1BX1NUQVRVUyk7CiB9CiAKLXN0YXRpYyB2b2lkIHN1cGVyaW9fdGZfcmVhZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCitzdGF0aWMgdm9pZCBzdXBlcmlvX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmRyaXZlLT5od2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RBVEEpIHsKKwlpZiAoY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX0lOX0RBVEEpIHsKIAkJdTE2IGRhdGEgPSBpbncoaW9fcG9ydHMtPmRhdGFfYWRkcik7CiAKIAkJdGYtPmRhdGEgPSBkYXRhICYgMHhmZjsKQEAgLTc2LDMxICs3NiwzMSBAQAogCS8qIGJlIHN1cmUgd2UncmUgbG9va2luZyBhdCB0aGUgbG93IG9yZGVyIGJpdHMgKi8KIAlvdXRiKEFUQV9ERVZDVExfT0JTICYgfjB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9GRUFUVVJFKQogCQl0Zi0+ZmVhdHVyZSA9IGluYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTlNFQ1QpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTlNFQ1QpCiAJCXRmLT5uc2VjdCAgPSBpbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUwpCiAJCXRmLT5sYmFsICAgPSBpbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTSkKIAkJdGYtPmxiYW0gICA9IGluYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBSCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFIKQogCQl0Zi0+bGJhaCAgID0gaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9ERVZJQ0UpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREVWSUNFKQogCQl0Zi0+ZGV2aWNlID0gc3VwZXJpb19pZGVfaW5iKGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgewogCQlvdXRiKEFUQV9ERVZDVExfT0JTIHwgMHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKIAotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9GRUFUVVJFKQogCQkJdGYtPmhvYl9mZWF0dXJlID0gaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX05TRUNUKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCiAJCQl0Zi0+aG9iX25zZWN0ICAgPSBpbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQogCQkJdGYtPmhvYl9sYmFsICAgID0gaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQU0pCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFNKQogCQkJdGYtPmhvYl9sYmFtICAgID0gaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQogCQkJdGYtPmhvYl9sYmFoICAgID0gaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOwogCX0KIH0KQEAgLTIxNiwxMSArMjE2LDExIEBACiAJcmV0dXJuIChkbWFfc3RhdCAmIDcpICE9IDQ7CiB9CiAKLXN0YXRpYyBpbnQgbnM4NzQxNV9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIGludCBuczg3NDE1X2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJLyogc2VsZWN0IERNQSB4ZmVyICovCiAJbnM4NzQxNV9wcmVwYXJlX2RyaXZlKGRyaXZlLCAxKTsKLQlpZiAoIWlkZV9kbWFfc2V0dXAoZHJpdmUpKQorCWlmIChpZGVfZG1hX3NldHVwKGRyaXZlLCBjbWQpID09IDApCiAJCXJldHVybiAwOwogCS8qIERNQSBmYWlsZWQ6IHNlbGVjdCBQSU8geGZlciAqLwogCW5zODc0MTVfcHJlcGFyZV9kcml2ZShkcml2ZSwgMCk7CkBAIC0zMDEsMTEgKzMwMSwxMSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyBuczg3NDE1X2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gbnM4NzQxNV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gaWRlX2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBuczg3NDE1X2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBpZGVfZG1hX3Rlc3RfaXJxLAogCS5kbWFfbG9zdF9pcnEJCT0gaWRlX2RtYV9sb3N0X2lycSwKKwkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKIAkuZG1hX3RpbWVvdXQJCT0gaWRlX2RtYV90aW1lb3V0LAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gc3VwZXJpb19kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BhbG1fYmszNzEwLmMgYi9kcml2ZXJzL2lkZS9wYWxtX2JrMzcxMC5jCmluZGV4IGYzOGFhYzcuLmM3YWNjYTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3BhbG1fYmszNzEwLmMKKysrIGIvZHJpdmVycy9pZGUvcGFsbV9iazM3MTAuYwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAJc3RydWN0IGNsayAqY2xrOwogCXN0cnVjdCByZXNvdXJjZSAqbWVtLCAqaXJxOwogCXZvaWQgX19pb21lbSAqYmFzZTsKLQl1bnNpZ25lZCBsb25nIHJhdGU7CisJdW5zaWduZWQgbG9uZyByYXRlLCBtZW1fc2l6ZTsKIAlpbnQgaSwgcmM7CiAJaHdfcmVnc190IGh3LCAqaHdzW10gPSB7ICZodywgTlVMTCwgTlVMTCwgTlVMTCB9OwogCkBAIC0zNzQsMTMgKzM3NCwxOCBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAKLQlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIG1lbS0+ZW5kIC0gbWVtLT5zdGFydCArIDEsCi0JCQkgICAgICAgInBhbG1fYmszNzEwIikgPT0gTlVMTCkgeworCW1lbV9zaXplID0gbWVtLT5lbmQgLSBtZW0tPnN0YXJ0ICsgMTsKKwlpZiAocmVxdWVzdF9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIG1lbV9zaXplLCAicGFsbV9iazM3MTAiKSA9PSBOVUxMKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHJlcXVlc3QgbWVtb3J5IHJlZ2lvblxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JYmFzZSA9IElPX0FERFJFU1MobWVtLT5zdGFydCk7CisJYmFzZSA9IGlvcmVtYXAobWVtLT5zdGFydCwgbWVtX3NpemUpOworCWlmICghYmFzZSkgeworCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBtYXAgSU8gbWVtb3J5XG4iKTsKKwkJcmVsZWFzZV9tZW1fcmVnaW9uKG1lbS0+c3RhcnQsIG1lbV9zaXplKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJLyogQ29uZmlndXJlIHRoZSBQYWxtIENoaXAgY29udHJvbGxlciAqLwogCXBhbG1fYmszNzEwX2NoaXBpbml0KGJhc2UpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvcGRjMjAyeHhfb2xkLmMgYi9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9vbGQuYwppbmRleCBjYmE2NmViLi5mNzUzNmQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9vbGQuYworKysgYi9kcml2ZXJzL2lkZS9wZGMyMDJ4eF9vbGQuYwpAQCAtMzMxLDExICszMzEsMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgcGRjMjAyNDZfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IGlkZV9kbWFfaG9zdF9zZXQsCiAJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0CQk9IGlkZV9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gaWRlX2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBwZGMyMDJ4eF9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBwZGMyMDJ4eF9kbWFfbG9zdF9pcnEsCisJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCiAJLmRtYV90aW1lb3V0CQk9IHBkYzIwMnh4X2RtYV90aW1lb3V0LAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMsCiB9OwpAQCAtMzQzLDExICszNDMsMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgcGRjMjAyNnhfZG1hX29wcyA9IHsKIAkuZG1hX2hvc3Rfc2V0CQk9IGlkZV9kbWFfaG9zdF9zZXQsCiAJLmRtYV9zZXR1cAkJPSBpZGVfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gaWRlX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0CQk9IHBkYzIwMnh4X2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBwZGMyMDJ4eF9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gcGRjMjAyeHhfZG1hX3Rlc3RfaXJxLAogCS5kbWFfbG9zdF9pcnEJCT0gcGRjMjAyeHhfZG1hX2xvc3RfaXJxLAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAogCS5kbWFfdGltZW91dAkJPSBwZGMyMDJ4eF9kbWFfdGltZW91dCwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IGlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3BtYWMuYyBiL2RyaXZlcnMvaWRlL3BtYWMuYwppbmRleCA3NDYyNWU4Li4yYmZjZmVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9wbWFjLmMKKysrIGIvZHJpdmVycy9pZGUvcG1hYy5jCkBAIC00MDQsNyArNDA0LDYgQEAKICNkZWZpbmUgSURFX1dBS0VVUF9ERUxBWQkoMSpIWikKIAogc3RhdGljIGludCBwbWFjX2lkZV9pbml0X2RtYShpZGVfaHdpZl90ICosIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvICopOwotc3RhdGljIGludCBwbWFjX2lkZV9idWlsZF9kbWF0YWJsZShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSk7CiBzdGF0aWMgdm9pZCBwbWFjX2lkZV9zZWxlY3Rwcm9jKGlkZV9kcml2ZV90ICpkcml2ZSk7CiBzdGF0aWMgdm9pZCBwbWFjX2lkZV9rYXVhaV9zZWxlY3Rwcm9jKGlkZV9kcml2ZV90ICpkcml2ZSk7CiAKQEAgLTE0MjIsMTcgKzE0MjEsMTYgQEAKICAqIHBtYWNfaWRlX2J1aWxkX2RtYXRhYmxlIGJ1aWxkcyB0aGUgREJETUEgY29tbWFuZCBsaXN0CiAgKiBmb3IgYSB0cmFuc2ZlciBhbmQgc2V0cyB0aGUgREJETUEgY2hhbm5lbCB0byBwb2ludCB0byBpdC4KICAqLwotc3RhdGljIGludAotcG1hY19pZGVfYnVpbGRfZG1hdGFibGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEpCitzdGF0aWMgaW50IHBtYWNfaWRlX2J1aWxkX2RtYXRhYmxlKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJcG1hY19pZGVfaHdpZl90ICpwbWlmID0KIAkJKHBtYWNfaWRlX2h3aWZfdCAqKWRldl9nZXRfZHJ2ZGF0YShod2lmLT5nZW5kZXYucGFyZW50KTsKIAlzdHJ1Y3QgZGJkbWFfY21kICp0YWJsZTsKLQlpbnQgaSwgY291bnQgPSAwOwogCXZvbGF0aWxlIHN0cnVjdCBkYmRtYV9yZWdzIF9faW9tZW0gKmRtYSA9IHBtaWYtPmRtYV9yZWdzOwogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7Ci0JaW50IHdyID0gKHJxX2RhdGFfZGlyKHJxKSA9PSBXUklURSk7CisJaW50IHdyID0gISEoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSk7CisJaW50IGkgPSBjbWQtPnNnX25lbnRzLCBjb3VudCA9IDA7CiAKIAkvKiBETUEgdGFibGUgaXMgYWxyZWFkeSBhbGlnbmVkICovCiAJdGFibGUgPSAoc3RydWN0IGRiZG1hX2NtZCAqKSBwbWlmLT5kbWFfdGFibGVfY3B1OwpAQCAtMTQ0MiwxMSArMTQ0MCw2IEBACiAJd2hpbGUgKHJlYWRsKCZkbWEtPnN0YXR1cykgJiBSVU4pCiAJCXVkZWxheSgxKTsKIAotCWh3aWYtPnNnX25lbnRzID0gaSA9IGlkZV9idWlsZF9zZ2xpc3QoZHJpdmUsIHJxKTsKLQotCWlmICghaSkKLQkJcmV0dXJuIDA7Ci0KIAkvKiBCdWlsZCBEQkRNQSBjb21tYW5kcyBsaXN0ICovCiAJc2cgPSBod2lmLT5zZ190YWJsZTsKIAl3aGlsZSAoaSAmJiBzZ19kbWFfbGVuKHNnKSkgewpAQCAtMTUwOSwyMyArMTUwMiwyMiBAQAogICogUHJlcGFyZSBhIERNQSB0cmFuc2Zlci4gV2UgYnVpbGQgdGhlIERNQSB0YWJsZSwgYWRqdXN0IHRoZSB0aW1pbmdzIGZvcgogICogYSByZWFkIG9uIEtleUxhcmdvIEFUQS82NiBhbmQgbWFyayB1cyBhcyB3YWl0aW5nIGZvciBETUEgY29tcGxldGlvbgogICovCi1zdGF0aWMgaW50Ci1wbWFjX2lkZV9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIGludCBwbWFjX2lkZV9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlwbWFjX2lkZV9od2lmX3QgKnBtaWYgPQogCQkocG1hY19pZGVfaHdpZl90ICopZGV2X2dldF9kcnZkYXRhKGh3aWYtPmdlbmRldi5wYXJlbnQpOwotCXN0cnVjdCByZXF1ZXN0ICpycSA9IGh3aWYtPnJxOwogCXU4IHVuaXQgPSBkcml2ZS0+ZG4gJiAxLCBhdGE0ID0gKHBtaWYtPmtpbmQgPT0gY29udHJvbGxlcl9rbF9hdGE0KTsKKwl1OCB3cml0ZSA9ICEhKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfV1JJVEUpOwogCi0JaWYgKCFwbWFjX2lkZV9idWlsZF9kbWF0YWJsZShkcml2ZSwgcnEpKSB7Ci0JCWlkZV9tYXBfc2coZHJpdmUsIHJxKTsKKwlpZiAocG1hY19pZGVfYnVpbGRfZG1hdGFibGUoZHJpdmUsIGNtZCkgPT0gMCkgeworCQlpZGVfbWFwX3NnKGRyaXZlLCBjbWQpOwogCQlyZXR1cm4gMTsKIAl9CiAKIAkvKiBBcHBsZSBhZGRzIDYwbnMgdG8gd3JEYXRhU2V0dXAgb24gcmVhZHMgKi8KIAlpZiAoYXRhNCAmJiAocG1pZi0+dGltaW5nc1t1bml0XSAmIFRSXzY2X1VETUFfRU4pKSB7Ci0JCXdyaXRlbChwbWlmLT50aW1pbmdzW3VuaXRdICsgKCFycV9kYXRhX2RpcihycSkgPyAweDAwODAwMDAwVUwgOiAwKSwKKwkJd3JpdGVsKHBtaWYtPnRpbWluZ3NbdW5pdF0gKyAod3JpdGUgPyAwIDogMHgwMDgwMDAwMFVMKSwKIAkJCVBNQUNfSURFX1JFRyhJREVfVElNSU5HX0NPTkZJRykpOwogCQkodm9pZClyZWFkbChQTUFDX0lERV9SRUcoSURFX1RJTUlOR19DT05GSUcpKTsKIAl9CkBAIC0xNTM1LDEzICsxNTI3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQKLXBtYWNfaWRlX2RtYV9leGVjX2NtZChpZGVfZHJpdmVfdCAqZHJpdmUsIHU4IGNvbW1hbmQpCi17Ci0JLyogaXNzdWUgY21kIHRvIGRyaXZlICovCi0JaWRlX2V4ZWN1dGVfY29tbWFuZChkcml2ZSwgY29tbWFuZCwgJmlkZV9kbWFfaW50ciwgMipXQUlUX0NNRCwgTlVMTCk7Ci19Ci0KIC8qCiAgKiBLaWNrIHRoZSBETUEgY29udHJvbGxlciBpbnRvIGxpZmUgYWZ0ZXIgdGhlIERNQSBjb21tYW5kIGhhcyBiZWVuIGlzc3VlZAogICogdG8gdGhlIGRyaXZlLgpAQCAtMTY2Miw3ICsxNjQ3LDYgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgcG1hY19kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gcG1hY19pZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gcG1hY19pZGVfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gcG1hY19pZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gcG1hY19pZGVfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IHBtYWNfaWRlX2RtYV9lbmQsCiAJLmRtYV90ZXN0X2lycQkJPSBwbWFjX2lkZV9kbWFfdGVzdF9pcnEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9xNDBpZGUuYyBiL2RyaXZlcnMvaWRlL3E0MGlkZS5jCmluZGV4IDlmOWMwYjMuLjJhNDNhMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3E0MGlkZS5jCisrKyBiL2RyaXZlcnMvaWRlL3E0MGlkZS5jCkBAIC03MiwyNiArNzIsMjYgQEAKIAlody0+Y2hpcHNldCA9IGlkZV9nZW5lcmljOwogfQogCi1zdGF0aWMgdm9pZCBxNDBpZGVfaW5wdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKK3N0YXRpYyB2b2lkIHE0MGlkZV9pbnB1dF9kYXRhKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCwKIAkJCSAgICAgIHZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKIHsKIAl1bnNpZ25lZCBsb25nIGRhdGFfYWRkciA9IGRyaXZlLT5od2lmLT5pb19wb3J0cy5kYXRhX2FkZHI7CiAKLQlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrICYmIHJxICYmIHJxLT5jbWRfdHlwZSA9PSBSRVFfVFlQRV9GUykKKwlpZiAoZHJpdmUtPm1lZGlhID09IGlkZV9kaXNrICYmIGNtZCAmJiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19GUykpCiAJCXJldHVybiBpbnN3KGRhdGFfYWRkciwgYnVmLCAobGVuICsgMSkgLyAyKTsKIAotCWluc3dfc3dhcHcoZGF0YV9hZGRyLCBidWYsIChsZW4gKyAxKSAvIDIpOworCXJhd19pbnN3X3N3YXB3KCh1MTYgKilkYXRhX2FkZHIsIGJ1ZiwgKGxlbiArIDEpIC8gMik7CiB9CiAKLXN0YXRpYyB2b2lkIHE0MGlkZV9vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKK3N0YXRpYyB2b2lkIHE0MGlkZV9vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsCiAJCQkgICAgICAgdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXVuc2lnbmVkIGxvbmcgZGF0YV9hZGRyID0gZHJpdmUtPmh3aWYtPmlvX3BvcnRzLmRhdGFfYWRkcjsKIAotCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2sgJiYgcnEgJiYgcnEtPmNtZF90eXBlID09IFJFUV9UWVBFX0ZTKQorCWlmIChkcml2ZS0+bWVkaWEgPT0gaWRlX2Rpc2sgJiYgY21kICYmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0ZTKSkKIAkJcmV0dXJuIG91dHN3KGRhdGFfYWRkciwgYnVmLCAobGVuICsgMSkgLyAyKTsKIAotCW91dHN3X3N3YXB3KGRhdGFfYWRkciwgYnVmLCAobGVuICsgMSkgLyAyKTsKKwlyYXdfb3V0c3dfc3dhcHcoKHUxNiAqKWRhdGFfYWRkciwgYnVmLCAobGVuICsgMSkgLyAyKTsKIH0KIAogLyogUTQwIGhhcyBhIGJ5dGUtc3dhcHBlZCBJREUgaW50ZXJmYWNlICovCkBAIC0xMTEsNyArMTExLDggQEAKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfcG9ydF9pbmZvIHE0MGlkZV9wb3J0X2luZm8gPSB7CiAJLnRwX29wcwkJCT0gJnE0MGlkZV90cF9vcHMsCi0JLmhvc3RfZmxhZ3MJCT0gSURFX0hGTEFHX05PX0RNQSwKKwkuaG9zdF9mbGFncwkJPSBJREVfSEZMQUdfTU1JTyB8IElERV9IRkxBR19OT19ETUEsCisJLmlycV9mbGFncwkJPSBJUlFGX1NIQVJFRCwKIH07CiAKIC8qIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2MxMjAwLmMgYi9kcml2ZXJzL2lkZS9zYzEyMDAuYwppbmRleCBkYmRkMjk4Li4xYzNhODI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zYzEyMDAuYworKysgYi9kcml2ZXJzL2lkZS9zYzEyMDAuYwpAQCAtMjg2LDExICsyODYsMTEgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgc2MxMjAwX2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gaWRlX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBpZGVfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IHNjMTIwMF9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gaWRlX2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCisJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCiAJLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IGlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NjY19wYXRhLmMgYi9kcml2ZXJzL2lkZS9zY2NfcGF0YS5jCmluZGV4IDhkMjMxNGIuLjBjYzEzN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NjY19wYXRhLmMKKysrIGIvZHJpdmVycy9pZGUvc2NjX3BhdGEuYwpAQCAtMzAzLDggKzMwMyw5IEBACiB9CiAKIC8qKgotICoJc2NjX2lkZV9kbWFfc2V0dXAJLQliZWdpbiBhIERNQSBwaGFzZQorICoJc2NjX2RtYV9zZXR1cAktCWJlZ2luIGEgRE1BIHBoYXNlCiAgKglAZHJpdmU6IHRhcmdldCBkZXZpY2UKKyAqCUBjbWQ6IGNvbW1hbmQKICAqCiAgKglCdWlsZCBhbiBJREUgRE1BIFBSRCAoSURFIHNwZWFrIGZvciBzY2F0dGVyIGdhdGhlciB0YWJsZSkKICAqCWFuZCB0aGVuIHNldCB1cCB0aGUgRE1BIHRyYW5zZmVyIHJlZ2lzdGVycy4KQEAgLTMxMywyMSArMzE0LDE1IEBACiAgKglpcyByZXR1cm5lZC4KICAqLwogCi1zdGF0aWMgaW50IHNjY19kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIGludCBzY2NfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+cnE7Ci0JdW5zaWduZWQgaW50IHJlYWRpbmc7CisJdTMyIHJ3ID0gKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfV1JJVEUpID8gMCA6IEFUQV9ETUFfV1I7CiAJdTggZG1hX3N0YXQ7CiAKLQlpZiAocnFfZGF0YV9kaXIocnEpKQotCQlyZWFkaW5nID0gMDsKLQllbHNlCi0JCXJlYWRpbmcgPSAxIDw8IDM7Ci0KIAkvKiBmYWxsIGJhY2sgdG8gcGlvISAqLwotCWlmICghaWRlX2J1aWxkX2RtYXRhYmxlKGRyaXZlLCBycSkpIHsKLQkJaWRlX21hcF9zZyhkcml2ZSwgcnEpOworCWlmIChpZGVfYnVpbGRfZG1hdGFibGUoZHJpdmUsIGNtZCkgPT0gMCkgeworCQlpZGVfbWFwX3NnKGRyaXZlLCBjbWQpOwogCQlyZXR1cm4gMTsKIAl9CiAKQEAgLTMzNSw3ICszMzAsNyBAQAogCW91dF9iZTMyKCh2b2lkIF9faW9tZW0gKikoaHdpZi0+ZG1hX2Jhc2UgKyA4KSwgaHdpZi0+ZG1hdGFibGVfZG1hKTsKIAogCS8qIHNwZWNpZnkgci93ICovCi0Jb3V0X2JlMzIoKHZvaWQgX19pb21lbSAqKWh3aWYtPmRtYV9iYXNlLCByZWFkaW5nKTsKKwlvdXRfYmUzMigodm9pZCBfX2lvbWVtICopaHdpZi0+ZG1hX2Jhc2UsIHJ3KTsKIAogCS8qIHJlYWQgRE1BIHN0YXR1cyBmb3IgSU5UUiAmIEVSUk9SIGZsYWdzICovCiAJZG1hX3N0YXQgPSBzY2NfZG1hX3NmZl9yZWFkX3N0YXR1cyhod2lmKTsKQEAgLTY2Niw1MiArNjYxLDUyIEBACiAJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgdm9pZCBzY2NfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCitzdGF0aWMgdm9pZCBzY2NfdGZfbG9hZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmZHJpdmUtPmh3aWYtPmlvX3BvcnRzOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOwotCXU4IEhJSEkgPSAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpID8gMHhFMCA6IDB4RUY7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLT50ZjsKKwl1OCBISUhJID0gKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpID8gMHhFMCA6IDB4RUY7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRkxBR0dFRCkKKwlpZiAoY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX0ZMQUdHRUQpCiAJCUhJSEkgPSAweEZGOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9EQVRBKQorCWlmIChjbWQtPmZ0Zl9mbGFncyAmIElERV9GVEZMQUdfT1VUX0RBVEEpCiAJCW91dF9iZTMyKCh2b2lkICopaW9fcG9ydHMtPmRhdGFfYWRkciwKIAkJCSAodGYtPmhvYl9kYXRhIDw8IDgpIHwgdGYtPmRhdGEpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfRkVBVFVSRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCiAJCXNjY19pZGVfb3V0Yih0Zi0+aG9iX2ZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX05TRUNUKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QpCiAJCXNjY19pZGVfb3V0Yih0Zi0+aG9iX25zZWN0LCBpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUwpCiAJCXNjY19pZGVfb3V0Yih0Zi0+aG9iX2xiYWwsIGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQogCQlzY2NfaWRlX291dGIodGYtPmhvYl9sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBSCkKIAkJc2NjX2lkZV9vdXRiKHRmLT5ob2JfbGJhaCwgaW9fcG9ydHMtPmxiYWhfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0ZFQVRVUkUpCiAJCXNjY19pZGVfb3V0Yih0Zi0+ZmVhdHVyZSwgaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTlNFQ1QpCiAJCXNjY19pZGVfb3V0Yih0Zi0+bnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCiAJCXNjY19pZGVfb3V0Yih0Zi0+bGJhbCwgaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFNKQogCQlzY2NfaWRlX291dGIodGYtPmxiYW0sIGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBSCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTEJBSCkKIAkJc2NjX2lkZV9vdXRiKHRmLT5sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCiAJCXNjY19pZGVfb3V0YigodGYtPmRldmljZSAmIEhJSEkpIHwgZHJpdmUtPnNlbGVjdCwKIAkJCSAgICAgaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKIH0KIAotc3RhdGljIHZvaWQgc2NjX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQorc3RhdGljIHZvaWQgc2NjX3RmX3JlYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmRyaXZlLT5od2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RBVEEpIHsKKwlpZiAoY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX0lOX0RBVEEpIHsKIAkJdTE2IGRhdGEgPSAodTE2KWluX2JlMzIoKHZvaWQgKilpb19wb3J0cy0+ZGF0YV9hZGRyKTsKIAogCQl0Zi0+ZGF0YSA9IGRhdGEgJiAweGZmOwpAQCAtNzIxLDM2ICs3MTYsMzYgQEAKIAkvKiBiZSBzdXJlIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIGxvdyBvcmRlciBiaXRzICovCiAJc2NjX2lkZV9vdXRiKEFUQV9ERVZDVExfT0JTICYgfjB4ODAsIGlvX3BvcnRzLT5jdGxfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9GRUFUVVJFKQogCQl0Zi0+ZmVhdHVyZSA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKIAkJdGYtPm5zZWN0ICA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQogCQl0Zi0+bGJhbCAgID0gc2NjX2lkZV9pbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTSkKIAkJdGYtPmxiYW0gICA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCiAJCXRmLT5sYmFoICAgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREVWSUNFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RFVklDRSkKIAkJdGYtPmRldmljZSA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgewogCQlzY2NfaWRlX291dGIoQVRBX0RFVkNUTF9PQlMgfCAweDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRkVBVFVSRSkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUpCiAJCQl0Zi0+aG9iX2ZlYXR1cmUgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9OU0VDVCkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX05TRUNUKQogCQkJdGYtPmhvYl9uc2VjdCAgID0gc2NjX2lkZV9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQogCQkJdGYtPmhvYl9sYmFsICAgID0gc2NjX2lkZV9pbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQU0pCiAJCQl0Zi0+aG9iX2xiYW0gICAgPSBzY2NfaWRlX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBSCkKIAkJCXRmLT5ob2JfbGJhaCAgICA9IHNjY19pZGVfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOwogCX0KIH0KIAotc3RhdGljIHZvaWQgc2NjX2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCitzdGF0aWMgdm9pZCBzY2NfaW5wdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsCiAJCQkgICB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJdW5zaWduZWQgbG9uZyBkYXRhX2FkZHIgPSBkcml2ZS0+aHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyOwpAQCAtNzY2LDcgKzc2MSw3IEBACiAJCXNjY19pZGVfaW5zdyhkYXRhX2FkZHIsIGJ1ZiwgbGVuIC8gMik7CiB9CiAKLXN0YXRpYyB2b2lkIHNjY19vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqZHJpdmUsICBzdHJ1Y3QgcmVxdWVzdCAqcnEsCitzdGF0aWMgdm9pZCBzY2Nfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKmRyaXZlLCAgc3RydWN0IGlkZV9jbWQgKmNtZCwKIAkJCSAgICB2b2lkICpidWYsIHVuc2lnbmVkIGludCBsZW4pCiB7CiAJdW5zaWduZWQgbG9uZyBkYXRhX2FkZHIgPSBkcml2ZS0+aHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyOwpAQCAtODczLDMwICs4NjgsMjYgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgc2NjX2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBzY2NfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gc2NjX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBzY2NfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IHNjY19kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gc2NjX2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCiAJLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKKwkuZG1hX3RpbWVyX2V4cGlyeQk9IGlkZV9kbWFfc2ZmX3RpbWVyX2V4cGlyeSwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IHNjY19kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKIAotI2RlZmluZSBERUNMQVJFX1NDQ19ERVYobmFtZV9zdHIpCQkJXAotICB7CQkJCQkJCVwKLSAgICAgIC5uYW1lCQk9IG5hbWVfc3RyLAkJCVwKLSAgICAgIC5pbml0X2lvcHMJPSBpbml0X2lvcHNfc2NjLAkJXAotICAgICAgLmluaXRfZG1hCQk9IHNjY19pbml0X2RtYSwJCQlcCi0gICAgICAuaW5pdF9od2lmCT0gaW5pdF9od2lmX3NjYywJCVwKLSAgICAgIC50cF9vcHMJCT0gJnNjY190cF9vcHMsCQlcCi0gICAgICAucG9ydF9vcHMJCT0gJnNjY19wb3J0X29wcywJCVwKLSAgICAgIC5kbWFfb3BzCQk9ICZzY2NfZG1hX29wcywJCQlcCi0gICAgICAuaG9zdF9mbGFncwk9IElERV9IRkxBR19TSU5HTEUsCQlcCi0gICAgICAucGlvX21hc2sJCT0gQVRBX1BJTzQsCQkJXAotICB9Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBzY2NfY2hpcHNldHNbXSBfX2RldmluaXRkYXRhID0gewotCS8qIDAgKi8gREVDTEFSRV9TQ0NfREVWKCJzY2NJREUiKSwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaWRlX3BvcnRfaW5mbyBzY2NfY2hpcHNldCBfX2RldmluaXRkYXRhID0geworCS5uYW1lCQk9ICJzY2NJREUiLAorCS5pbml0X2lvcHMJPSBpbml0X2lvcHNfc2NjLAorCS5pbml0X2RtYQk9IHNjY19pbml0X2RtYSwKKwkuaW5pdF9od2lmCT0gaW5pdF9od2lmX3NjYywKKwkudHBfb3BzCQk9ICZzY2NfdHBfb3BzLAorCS5wb3J0X29wcwk9ICZzY2NfcG9ydF9vcHMsCisJLmRtYV9vcHMJPSAmc2NjX2RtYV9vcHMsCisJLmhvc3RfZmxhZ3MJPSBJREVfSEZMQUdfU0lOR0xFLAorCS5pcnFfZmxhZ3MJPSBJUlFGX1NIQVJFRCwKKwkucGlvX21hc2sJPSBBVEFfUElPNCwKIH07CiAKIC8qKgpAQCAtOTEwLDcgKzkwMSw3IEBACiAKIHN0YXRpYyBpbnQgX19kZXZpbml0IHNjY19pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqaWQpCiB7Ci0JcmV0dXJuIGluaXRfc2V0dXBfc2NjKGRldiwgJnNjY19jaGlwc2V0c1tpZC0+ZHJpdmVyX2RhdGFdKTsKKwlyZXR1cm4gaW5pdF9zZXR1cF9zY2MoZGV2LCAmc2NjX2NoaXBzZXQpOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3NldHVwLXBjaS5jIGIvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKaW5kZXggMjRiYzg4NC4uYTE5ZGJjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKKysrIGIvZHJpdmVycy9pZGUvc2V0dXAtcGNpLmMKQEAgLTU1OCw2ICs1NTgsOCBAQAogCiAJaG9zdC0+aG9zdF9wcml2ID0gcHJpdjsKIAorCWhvc3QtPmlycV9mbGFncyA9IElSUUZfU0hBUkVEOworCiAJcGNpX3NldF9kcnZkYXRhKGRldiwgaG9zdCk7CiAKIAlyZXQgPSBkb19pZGVfc2V0dXBfcGNpX2RldmljZShkZXYsIGQsIDEpOwpAQCAtNjA2LDYgKzYwOCw4IEBACiAKIAlob3N0LT5ob3N0X3ByaXYgPSBwcml2OwogCisJaG9zdC0+aXJxX2ZsYWdzID0gSVJRRl9TSEFSRUQ7CisKIAlwY2lfc2V0X2RydmRhdGEocGRldlswXSwgaG9zdCk7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXZbMV0sIGhvc3QpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zZ2lpb2M0LmMgYi9kcml2ZXJzL2lkZS9zZ2lpb2M0LmMKaW5kZXggZmRiOWQ3MC4uYjEyZGU4MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvc2dpaW9jNC5jCisrKyBiL2RyaXZlcnMvaWRlL3NnaWlvYzQuYwpAQCAtNDI0LDIwICs0MjQsMTMgQEAKIC8qIHwgVXBwZXIgMzIgYml0cyAtIFplcm8JICAgIHxFT0x8IDE1IHVudXNlZCAgICAgfCAxNiBCaXQgTGVuZ3RofCAqLwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBDcmVhdGVzIHRoZSBzY2F0dGVyIGdhdGhlciBsaXN0LCBETUEgVGFibGUgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQKLXNnaWlvYzRfYnVpbGRfZG1hX3RhYmxlKGlkZV9kcml2ZV90ICogZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwgaW50IGRkaXIpCitzdGF0aWMgaW50IHNnaWlvYzRfYnVpbGRfZG1hdGFibGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAl1bnNpZ25lZCBpbnQgKnRhYmxlID0gaHdpZi0+ZG1hdGFibGVfY3B1OwotCXVuc2lnbmVkIGludCBjb3VudCA9IDAsIGkgPSAxOwotCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CisJdW5zaWduZWQgaW50IGNvdW50ID0gMCwgaSA9IGNtZC0+c2dfbmVudHM7CisJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZyA9IGh3aWYtPnNnX3RhYmxlOwogCi0JaHdpZi0+c2dfbmVudHMgPSBpID0gaWRlX2J1aWxkX3NnbGlzdChkcml2ZSwgcnEpOwotCi0JaWYgKCFpKQotCQlyZXR1cm4gMDsJLyogc2dsaXN0IG9mIGxlbmd0aCBaZXJvICovCi0KLQlzZyA9IGh3aWYtPnNnX3RhYmxlOwogCXdoaWxlIChpICYmIHNnX2RtYV9sZW4oc2cpKSB7CiAJCWRtYV9hZGRyX3QgY3VyX2FkZHI7CiAJCWludCBjdXJfbGVuOwpAQCAtNDkwLDI0ICs0ODMsMTggQEAKIAlyZXR1cm4gMDsJCS8qIHJldmVydCB0byBQSU8gZm9yIHRoaXMgcmVxdWVzdCAqLwogfQogCi1zdGF0aWMgaW50IHNnaWlvYzRfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyBpbnQgc2dpaW9jNF9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewotCXN0cnVjdCByZXF1ZXN0ICpycSA9IGRyaXZlLT5od2lmLT5ycTsKLQl1bnNpZ25lZCBpbnQgY291bnQgPSAwOwogCWludCBkZGlyOworCXU4IHdyaXRlID0gISEoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSk7CiAKLQlpZiAocnFfZGF0YV9kaXIocnEpKQotCQlkZGlyID0gUENJX0RNQV9UT0RFVklDRTsKLQllbHNlCi0JCWRkaXIgPSBQQ0lfRE1BX0ZST01ERVZJQ0U7Ci0KLQlpZiAoIShjb3VudCA9IHNnaWlvYzRfYnVpbGRfZG1hX3RhYmxlKGRyaXZlLCBycSwgZGRpcikpKSB7CisJaWYgKHNnaWlvYzRfYnVpbGRfZG1hdGFibGUoZHJpdmUsIGNtZCkgPT0gMCkgewogCQkvKiB0cnkgUElPIGluc3RlYWQgb2YgRE1BICovCi0JCWlkZV9tYXBfc2coZHJpdmUsIHJxKTsKKwkJaWRlX21hcF9zZyhkcml2ZSwgY21kKTsKIAkJcmV0dXJuIDE7CiAJfQogCi0JaWYgKHJxX2RhdGFfZGlyKHJxKSkKKwlpZiAod3JpdGUpCiAJCS8qIFdyaXRlcyBUTyB0aGUgSU9DNCBGUk9NIE1haW4gTWVtb3J5ICovCiAJCWRkaXIgPSBJT0M0X0RNQV9SRUFEOwogCWVsc2UKQEAgLTU1Nyw2ICs1NDQsNyBAQAogCS5wb3J0X29wcwkJPSAmc2dpaW9jNF9wb3J0X29wcywKIAkuZG1hX29wcwkJPSAmc2dpaW9jNF9kbWFfb3BzLAogCS5ob3N0X2ZsYWdzCQk9IElERV9IRkxBR19NTUlPLAorCS5pcnFfZmxhZ3MJCT0gSVJRRl9TSEFSRUQsCiAJLm13ZG1hX21hc2sJCT0gQVRBX01XRE1BMl9PTkxZLAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvc2lpbWFnZS5jIGIvZHJpdmVycy9pZGUvc2lpbWFnZS5jCmluZGV4IDE4MTFhZTkuLjA3NWNiMTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3NpaW1hZ2UuYworKysgYi9kcml2ZXJzL2lkZS9zaWltYWdlLmMKQEAgLTcxMSwxMCArNzExLDEwIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIHNpbF9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gaWRlX2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSBpZGVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IHNpaW1hZ2VfZG1hX3Rlc3RfaXJxLAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAogCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCiAJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS9zbDgyYzEwNS5jIGIvZHJpdmVycy9pZGUvc2w4MmMxMDUuYwppbmRleCBkYmEyMTNjLi5kMjUxMzdiIDEwMDY0NAotLS0gYS9kcml2ZXJzL2lkZS9zbDgyYzEwNS5jCisrKyBiL2RyaXZlcnMvaWRlL3NsODJjMTA1LmMKQEAgLTI5MywxMSArMjkzLDExIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIHNsODJjMTA1X2RtYV9vcHMgPSB7CiAJLmRtYV9ob3N0X3NldAkJPSBpZGVfZG1hX2hvc3Rfc2V0LAogCS5kbWFfc2V0dXAJCT0gaWRlX2RtYV9zZXR1cCwKLQkuZG1hX2V4ZWNfY21kCQk9IGlkZV9kbWFfZXhlY19jbWQsCiAJLmRtYV9zdGFydAkJPSBzbDgyYzEwNV9kbWFfc3RhcnQsCiAJLmRtYV9lbmQJCT0gc2w4MmMxMDVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IGlkZV9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBzbDgyYzEwNV9kbWFfbG9zdF9pcnEsCisJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCiAJLmRtYV90aW1lb3V0CQk9IHNsODJjMTA1X2RtYV90aW1lb3V0LAogCS5kbWFfc2ZmX3JlYWRfc3RhdHVzCT0gaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pZGUvdGM4NmMwMDEuYyBiL2RyaXZlcnMvaWRlL3RjODZjMDAxLmMKaW5kZXggODQxMDlmNS4uNDI3ZDRiMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvdGM4NmMwMDEuYworKysgYi9kcml2ZXJzL2lkZS90Yzg2YzAwMS5jCkBAIC0xODIsMTEgKzE4MiwxMSBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBpZGVfZG1hX29wcyB0Yzg2YzAwMV9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gaWRlX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwCQk9IGlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gdGM4NmMwMDFfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IGlkZV9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gaWRlX2RtYV90ZXN0X2lycSwKIAkuZG1hX2xvc3RfaXJxCQk9IGlkZV9kbWFfbG9zdF9pcnEsCisJLmRtYV90aW1lcl9leHBpcnkJPSBpZGVfZG1hX3NmZl90aW1lcl9leHBpcnksCiAJLmRtYV90aW1lb3V0CQk9IGlkZV9kbWFfdGltZW91dCwKIAkuZG1hX3NmZl9yZWFkX3N0YXR1cwk9IGlkZV9kbWFfc2ZmX3JlYWRfc3RhdHVzLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3RybTI5MC5jIGIvZHJpdmVycy9pZGUvdHJtMjkwLmMKaW5kZXggMWMwOWU1NC4uZWQxNDk2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvdHJtMjkwLmMKKysrIGIvZHJpdmVycy9pZGUvdHJtMjkwLmMKQEAgLTE3NiwxOCArMTc2LDEyIEBACiAJdHJtMjkwX3ByZXBhcmVfZHJpdmUoZHJpdmUsICEhKGRyaXZlLT5kZXZfZmxhZ3MgJiBJREVfREZMQUdfVVNJTkdfRE1BKSk7CiB9CiAKLXN0YXRpYyB2b2lkIHRybTI5MF9kbWFfZXhlY19jbWQoaWRlX2RyaXZlX3QgKmRyaXZlLCB1OCBjb21tYW5kKQotewotCWlkZV9leGVjdXRlX2NvbW1hbmQoZHJpdmUsIGNvbW1hbmQsICZpZGVfZG1hX2ludHIsIFdBSVRfQ01ELCBOVUxMKTsKLX0KLQotc3RhdGljIGludCB0cm0yOTBfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSkKK3N0YXRpYyBpbnQgdHJtMjkwX2RtYV9zZXR1cChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwotCXN0cnVjdCByZXF1ZXN0ICpycSA9IGh3aWYtPnJxOwogCXVuc2lnbmVkIGludCBjb3VudCwgcnc7CiAKLQlpZiAocnFfZGF0YV9kaXIocnEpKSB7CisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfV1JJVEUpIHsKICNpZmRlZiBUUk0yOTBfTk9fRE1BX1dSSVRFUwogCQkvKiBhbHdheXMgdXNlIFBJTyBmb3Igd3JpdGVzICovCiAJCXRybTI5MF9wcmVwYXJlX2RyaXZlKGRyaXZlLCAwKTsJLyogc2VsZWN0IFBJTyB4ZmVyICovCkBAIC0xOTcsNyArMTkxLDkgQEAKIAl9IGVsc2UKIAkJcncgPSAyOwogCi0JaWYgKCEoY291bnQgPSBpZGVfYnVpbGRfZG1hdGFibGUoZHJpdmUsIHJxKSkpIHsKKwljb3VudCA9IGlkZV9idWlsZF9kbWF0YWJsZShkcml2ZSwgY21kKTsKKwlpZiAoY291bnQgPT0gMCkgeworCQlpZGVfbWFwX3NnKGRyaXZlLCBjbWQpOwogCQkvKiB0cnkgUElPIGluc3RlYWQgb2YgRE1BICovCiAJCXRybTI5MF9wcmVwYXJlX2RyaXZlKGRyaXZlLCAwKTsgLyogc2VsZWN0IFBJTyB4ZmVyICovCiAJCXJldHVybiAxOwpAQCAtMzE0LDcgKzMxMCw2IEBACiBzdGF0aWMgc3RydWN0IGlkZV9kbWFfb3BzIHRybTI5MF9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gdHJtMjkwX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwIAkJPSB0cm0yOTBfZG1hX3NldHVwLAotCS5kbWFfZXhlY19jbWQJCT0gdHJtMjkwX2RtYV9leGVjX2NtZCwKIAkuZG1hX3N0YXJ0IAkJPSB0cm0yOTBfZG1hX3N0YXJ0LAogCS5kbWFfZW5kCQk9IHRybTI5MF9kbWFfZW5kLAogCS5kbWFfdGVzdF9pcnEJCT0gdHJtMjkwX2RtYV90ZXN0X2lycSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvaWRlL3R4NDkzOGlkZS5jIGIvZHJpdmVycy9pZGUvdHg0OTM4aWRlLmMKaW5kZXggZDkwOTUzNC4uNjU3YTYxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9pZGUvdHg0OTM4aWRlLmMKKysrIGIvZHJpdmVycy9pZGUvdHg0OTM4aWRlLmMKQEAgLTE1LDYgKzE1LDggQEAKICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CiAjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CiAjaW5jbHVkZSA8bGludXgvaW8uaD4KKworI2luY2x1ZGUgPGFzbS9pZGUuaD4KICNpbmNsdWRlIDxhc20vdHh4OS90eDQ5MzguaD4KIAogc3RhdGljIHZvaWQgdHg0OTM4aWRlX3R1bmVfZWJ1c2ModW5zaWduZWQgaW50IGVidXNfY2gsCkBAIC04MCw1NyArODIsNTcgQEAKIAlfX3Jhd193cml0ZWIodmFsdWUsICh2b2lkIF9faW9tZW0gKilwb3J0KTsKIH0KIAotc3RhdGljIHZvaWQgdHg0OTM4aWRlX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQorc3RhdGljIHZvaWQgdHg0OTM4aWRlX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAlzdHJ1Y3QgaWRlX2lvX3BvcnRzICppb19wb3J0cyA9ICZod2lmLT5pb19wb3J0czsKLQlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZ0YXNrLT50ZjsKLQl1OCBISUhJID0gdGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDggPyAweEUwIDogMHhFRjsKKwlzdHJ1Y3QgaWRlX3Rhc2tmaWxlICp0ZiA9ICZjbWQtPnRmOworCXU4IEhJSEkgPSBjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4ID8gMHhFMCA6IDB4RUY7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfRkxBR0dFRCkKKwlpZiAoY21kLT5mdGZfZmxhZ3MgJiBJREVfRlRGTEFHX0ZMQUdHRUQpCiAJCUhJSEkgPSAweEZGOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9EQVRBKSB7CisJaWYgKGNtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19PVVRfREFUQSkgewogCQl1MTYgZGF0YSA9ICh0Zi0+aG9iX2RhdGEgPDwgOCkgfCB0Zi0+ZGF0YTsKIAogCQkvKiBubyBlbmRpYW4gc3dhcCAqLwogCQlfX3Jhd193cml0ZXcoZGF0YSwgKHZvaWQgX19pb21lbSAqKWlvX3BvcnRzLT5kYXRhX2FkZHIpOwogCX0KIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFKQogCQl0eDQ5MzhpZGVfb3V0Yih0Zi0+aG9iX2ZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX05TRUNUKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QpCiAJCXR4NDkzOGlkZV9vdXRiKHRmLT5ob2JfbnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFMKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTCkKIAkJdHg0OTM4aWRlX291dGIodGYtPmhvYl9sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTSkKIAkJdHg0OTM4aWRlX291dGIodGYtPmhvYl9sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBSCkKIAkJdHg0OTM4aWRlX291dGIodGYtPmhvYl9sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfRkVBVFVSRSkKIAkJdHg0OTM4aWRlX291dGIodGYtPmZlYXR1cmUsIGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfTlNFQ1QpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX05TRUNUKQogCQl0eDQ5MzhpZGVfb3V0Yih0Zi0+bnNlY3QsIGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUwpCiAJCXR4NDkzOGlkZV9vdXRiKHRmLT5sYmFsLCBpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQU0pCiAJCXR4NDkzOGlkZV9vdXRiKHRmLT5sYmFtLCBpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0xCQUgpCiAJCXR4NDkzOGlkZV9vdXRiKHRmLT5sYmFoLCBpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREVWSUNFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpCiAJCXR4NDkzOGlkZV9vdXRiKCh0Zi0+ZGV2aWNlICYgSElISSkgfCBkcml2ZS0+c2VsZWN0LAogCQkJICAgICAgIGlvX3BvcnRzLT5kZXZpY2VfYWRkcik7CiB9CiAKLXN0YXRpYyB2b2lkIHR4NDkzOGlkZV90Zl9yZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3N0YXRpYyB2b2lkIHR4NDkzOGlkZV90Zl9yZWFkKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLT50ZjsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9EQVRBKSB7CisJaWYgKGNtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19JTl9EQVRBKSB7CiAJCXUxNiBkYXRhOwogCiAJCS8qIG5vIGVuZGlhbiBzd2FwICovCkBAIC0xNDIsMzcgKzE0NCwzNyBAQAogCS8qIGJlIHN1cmUgd2UncmUgbG9va2luZyBhdCB0aGUgbG93IG9yZGVyIGJpdHMgKi8KIAl0eDQ5MzhpZGVfb3V0YihBVEFfREVWQ1RMX09CUyAmIH4weDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fRkVBVFVSRSkKIAkJdGYtPmZlYXR1cmUgPSB0eDQ5MzhpZGVfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9OU0VDVCkKIAkJdGYtPm5zZWN0ICA9IHR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUwpCiAJCXRmLT5sYmFsICAgPSB0eDQ5MzhpZGVfaW5iKGlvX3BvcnRzLT5sYmFsX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQU0pCiAJCXRmLT5sYmFtICAgPSB0eDQ5MzhpZGVfaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0xCQUgpCiAJCXRmLT5sYmFoICAgPSB0eDQ5MzhpZGVfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOwotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9ERVZJQ0UpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREVWSUNFKQogCQl0Zi0+ZGV2aWNlID0gdHg0OTM4aWRlX2luYihpb19wb3J0cy0+ZGV2aWNlX2FkZHIpOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSB7CisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfTEJBNDgpIHsKIAkJdHg0OTM4aWRlX291dGIoQVRBX0RFVkNUTF9PQlMgfCAweDgwLCBpb19wb3J0cy0+Y3RsX2FkZHIpOwogCi0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfRkVBVFVSRSkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUpCiAJCQl0Zi0+aG9iX2ZlYXR1cmUgPQogCQkJCXR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPmZlYXR1cmVfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9OU0VDVCkKIAkJCXRmLT5ob2JfbnNlY3QgICA9IHR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPm5zZWN0X2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUwpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQogCQkJdGYtPmhvYl9sYmFsICAgID0gdHg0OTM4aWRlX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFNKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKIAkJCXRmLT5ob2JfbGJhbSAgICA9IHR4NDkzOGlkZV9pbmIoaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBSCkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCiAJCQl0Zi0+aG9iX2xiYWggICAgPSB0eDQ5MzhpZGVfaW5iKGlvX3BvcnRzLT5sYmFoX2FkZHIpOwogCX0KIH0KIAotc3RhdGljIHZvaWQgdHg0OTM4aWRlX2lucHV0X2RhdGFfc3dhcChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCByZXF1ZXN0ICpycSwKK3N0YXRpYyB2b2lkIHR4NDkzOGlkZV9pbnB1dF9kYXRhX3N3YXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kLAogCQkJCXZvaWQgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikKIHsKIAl1bnNpZ25lZCBsb25nIHBvcnQgPSBkcml2ZS0+aHdpZi0+aW9fcG9ydHMuZGF0YV9hZGRyOwpAQCAtMTg0LDcgKzE4Niw3IEBACiAJX19pZGVfZmx1c2hfZGNhY2hlX3JhbmdlKCh1bnNpZ25lZCBsb25nKWJ1Ziwgcm91bmR1cChsZW4sIDIpKTsKIH0KIAotc3RhdGljIHZvaWQgdHg0OTM4aWRlX291dHB1dF9kYXRhX3N3YXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgcmVxdWVzdCAqcnEsCitzdGF0aWMgdm9pZCB0eDQ5MzhpZGVfb3V0cHV0X2RhdGFfc3dhcChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQsCiAJCQkJdm9pZCAqYnVmLCB1bnNpZ25lZCBpbnQgbGVuKQogewogCXVuc2lnbmVkIGxvbmcgcG9ydCA9IGRyaXZlLT5od2lmLT5pb19wb3J0cy5kYXRhX2FkZHI7CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lkZS90eDQ5MzlpZGUuYyBiL2RyaXZlcnMvaWRlL3R4NDkzOWlkZS5jCmluZGV4IDQwYjA4MTIuLmUwZTBhODAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaWRlL3R4NDkzOWlkZS5jCisrKyBiL2RyaXZlcnMvaWRlL3R4NDkzOWlkZS5jCkBAIC0xOCw2ICsxOCw4IEBACiAjaW5jbHVkZSA8bGludXgvaW8uaD4KICNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgogCisjaW5jbHVkZSA8YXNtL2lkZS5oPgorCiAjZGVmaW5lIE1PRE5BTUUJInR4NDkzOWlkZSIKIAogLyogQVRBIFNoYWRvdyBSZWdpc3RlcnMgKDgtYml0IGV4Y2VwdCBmb3IgRGF0YSB3aGljaCBpcyAxNi1iaXQpICovCkBAIC0yMzAsNyArMjMyLDcgQEAKIAogI2lmZGVmIF9fQklHX0VORElBTgogLyogY3VzdG9tIGlkZV9idWlsZF9kbWF0YWJsZSB0byBoYW5kbGUgc3dhcHBlZCBsYXlvdXQgKi8KLXN0YXRpYyBpbnQgdHg0OTM5aWRlX2J1aWxkX2RtYXRhYmxlKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IHJlcXVlc3QgKnJxKQorc3RhdGljIGludCB0eDQ5MzlpZGVfYnVpbGRfZG1hdGFibGUoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAl1MzIgKnRhYmxlID0gKHUzMiAqKWh3aWYtPmRtYXRhYmxlX2NwdTsKQEAgLTIzOCwxMSArMjQwLDcgQEAKIAlpbnQgaTsKIAlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnOwogCi0JaHdpZi0+c2dfbmVudHMgPSBpZGVfYnVpbGRfc2dsaXN0KGRyaXZlLCBycSk7Ci0JaWYgKGh3aWYtPnNnX25lbnRzID09IDApCi0JCXJldHVybiAwOwotCi0JZm9yX2VhY2hfc2coaHdpZi0+c2dfdGFibGUsIHNnLCBod2lmLT5zZ19uZW50cywgaSkgeworCWZvcl9lYWNoX3NnKGh3aWYtPnNnX3RhYmxlLCBzZywgY21kLT5zZ19uZW50cywgaSkgewogCQl1MzIgY3VyX2FkZHIsIGN1cl9sZW4sIGJjb3VudDsKIAogCQljdXJfYWRkciA9IHNnX2RtYV9hZGRyZXNzKHNnKTsKQEAgLTI4OSwyMyArMjg3LDE1IEBACiAjZGVmaW5lIHR4NDkzOWlkZV9idWlsZF9kbWF0YWJsZQlpZGVfYnVpbGRfZG1hdGFibGUKICNlbmRpZgogCi1zdGF0aWMgaW50IHR4NDkzOWlkZV9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQorc3RhdGljIGludCB0eDQ5MzlpZGVfZG1hX3NldHVwKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJdm9pZCBfX2lvbWVtICpiYXNlID0gVFg0OTM5SURFX0JBU0UoaHdpZik7Ci0Jc3RydWN0IHJlcXVlc3QgKnJxID0gaHdpZi0+cnE7Ci0JdTggcmVhZGluZzsKLQlpbnQgbmVudDsKLQotCWlmIChycV9kYXRhX2RpcihycSkpCi0JCXJlYWRpbmcgPSAwOwotCWVsc2UKLQkJcmVhZGluZyA9IEFUQV9ETUFfV1I7CisJdTggcncgPSAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19XUklURSkgPyAwIDogQVRBX0RNQV9XUjsKIAogCS8qIGZhbGwgYmFjayB0byBQSU8hICovCi0JbmVudCA9IHR4NDkzOWlkZV9idWlsZF9kbWF0YWJsZShkcml2ZSwgcnEpOwotCWlmICghbmVudCkgewotCQlpZGVfbWFwX3NnKGRyaXZlLCBycSk7CisJaWYgKHR4NDkzOWlkZV9idWlsZF9kbWF0YWJsZShkcml2ZSwgY21kKSA9PSAwKSB7CisJCWlkZV9tYXBfc2coZHJpdmUsIGNtZCk7CiAJCXJldHVybiAxOwogCX0KIApAQCAtMzEzLDcgKzMwMyw3IEBACiAJdHg0OTM5aWRlX3dyaXRlbChod2lmLT5kbWF0YWJsZV9kbWEsIGJhc2UsIFRYNDkzOUlERV9QUkRfUHRyKTsKIAogCS8qIHNwZWNpZnkgci93ICovCi0JdHg0OTM5aWRlX3dyaXRlYihyZWFkaW5nLCBiYXNlLCBUWDQ5MzlJREVfRE1BX0NtZCk7CisJdHg0OTM5aWRlX3dyaXRlYihydywgYmFzZSwgVFg0OTM5SURFX0RNQV9DbWQpOwogCiAJLyogY2xlYXIgSU5UUiAmIEVSUk9SIGZsYWdzICovCiAJdHg0OTM5aWRlX2NsZWFyX2RtYV9zdGF0dXMoYmFzZSk7CkBAIC0zMjIsNyArMzEyLDkgQEAKIAogCXR4NDkzOWlkZV93cml0ZXcoU0VDVE9SX1NJWkUgLyAyLCBiYXNlLCBkcml2ZS0+ZG4gPwogCQkJIFRYNDkzOUlERV9YZmVyX0NudF8yIDogVFg0OTM5SURFX1hmZXJfQ250XzEpOwotCXR4NDkzOWlkZV93cml0ZXcocnEtPm5yX3NlY3RvcnMsIGJhc2UsIFRYNDkzOUlERV9TZWNfQ250KTsKKworCXR4NDkzOWlkZV93cml0ZXcoY21kLT5ycS0+bnJfc2VjdG9ycywgYmFzZSwgVFg0OTM5SURFX1NlY19DbnQpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQzNyw3ICs0MjksNyBAQAogCXJldHVybiBpZGVfYWxsb2NhdGVfZG1hX2VuZ2luZShod2lmKTsKIH0KIAotc3RhdGljIHZvaWQgdHg0OTM5aWRlX3RmX2xvYWRfZml4dXAoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQorc3RhdGljIHZvaWQgdHg0OTM5aWRlX3RmX2xvYWRfZml4dXAoaWRlX2RyaXZlX3QgKmRyaXZlKQogewogCWlkZV9od2lmX3QgKmh3aWYgPSBkcml2ZS0+aHdpZjsKIAl2b2lkIF9faW9tZW0gKmJhc2UgPSBUWDQ5MzlJREVfQkFTRShod2lmKTsKQEAgLTQ2NSw1OSArNDU3LDU5IEBACiAJX19yYXdfd3JpdGViKHZhbHVlLCAodm9pZCBfX2lvbWVtICopcG9ydCk7CiB9CiAKLXN0YXRpYyB2b2lkIHR4NDkzOWlkZV90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgaWRlX3Rhc2tfdCAqdGFzaykKK3N0YXRpYyB2b2lkIHR4NDkzOWlkZV90Zl9sb2FkKGlkZV9kcml2ZV90ICpkcml2ZSwgc3RydWN0IGlkZV9jbWQgKmNtZCkKIHsKIAlpZGVfaHdpZl90ICpod2lmID0gZHJpdmUtPmh3aWY7CiAJc3RydWN0IGlkZV9pb19wb3J0cyAqaW9fcG9ydHMgPSAmaHdpZi0+aW9fcG9ydHM7Ci0Jc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmdGFzay0+dGY7Ci0JdTggSElISSA9IHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4ID8gMHhFMCA6IDB4RUY7CisJc3RydWN0IGlkZV90YXNrZmlsZSAqdGYgPSAmY21kLT50ZjsKKwl1OCBISUhJID0gY21kLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCA/IDB4RTAgOiAweEVGOwogCi0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0ZMQUdHRUQpCisJaWYgKGNtZC0+ZnRmX2ZsYWdzICYgSURFX0ZURkxBR19GTEFHR0VEKQogCQlISUhJID0gMHhGRjsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfREFUQSkgeworCWlmIChjbWQtPmZ0Zl9mbGFncyAmIElERV9GVEZMQUdfT1VUX0RBVEEpIHsKIAkJdTE2IGRhdGEgPSAodGYtPmhvYl9kYXRhIDw8IDgpIHwgdGYtPmRhdGE7CiAKIAkJLyogbm8gZW5kaWFuIHN3YXAgKi8KIAkJX19yYXdfd3JpdGV3KGRhdGEsICh2b2lkIF9faW9tZW0gKilpb19wb3J0cy0+ZGF0YV9hZGRyKTsKIAl9CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfRkVBVFVSRSkKIAkJdHg0OTM5aWRlX291dGIodGYtPmhvYl9mZWF0dXJlLCBpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0hPQl9OU0VDVCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX05TRUNUKQogCQl0eDQ5MzlpZGVfb3V0Yih0Zi0+aG9iX25zZWN0LCBpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUwpCiAJCXR4NDkzOWlkZV9vdXRiKHRmLT5ob2JfbGJhbCwgaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBTSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQU0pCiAJCXR4NDkzOWlkZV9vdXRiKHRmLT5ob2JfbGJhbSwgaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9IT0JfTEJBSCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19PVVRfSE9CX0xCQUgpCiAJCXR4NDkzOWlkZV9vdXRiKHRmLT5ob2JfbGJhaCwgaW9fcG9ydHMtPmxiYWhfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0ZFQVRVUkUpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0ZFQVRVUkUpCiAJCXR4NDkzOWlkZV9vdXRiKHRmLT5mZWF0dXJlLCBpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX05TRUNUKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9OU0VDVCkKIAkJdHg0OTM5aWRlX291dGIodGYtPm5zZWN0LCBpb19wb3J0cy0+bnNlY3RfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFMKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFMKQogCQl0eDQ5MzlpZGVfb3V0Yih0Zi0+bGJhbCwgaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFNKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFNKQogCQl0eDQ5MzlpZGVfb3V0Yih0Zi0+bGJhbSwgaW9fcG9ydHMtPmxiYW1fYWRkcik7Ci0JaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFIKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9MQkFIKQogCQl0eDQ5MzlpZGVfb3V0Yih0Zi0+bGJhaCwgaW9fcG9ydHMtPmxiYWhfYWRkcik7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RFVklDRSkgeworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX09VVF9ERVZJQ0UpIHsKIAkJdHg0OTM5aWRlX291dGIoKHRmLT5kZXZpY2UgJiBISUhJKSB8IGRyaXZlLT5zZWxlY3QsCiAJCQkgICAgICAgaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKLQkJdHg0OTM5aWRlX3RmX2xvYWRfZml4dXAoZHJpdmUsIHRhc2spOworCQl0eDQ5MzlpZGVfdGZfbG9hZF9maXh1cChkcml2ZSk7CiAJfQogfQogCi1zdGF0aWMgdm9pZCB0eDQ5MzlpZGVfdGZfcmVhZChpZGVfZHJpdmVfdCAqZHJpdmUsIGlkZV90YXNrX3QgKnRhc2spCitzdGF0aWMgdm9pZCB0eDQ5MzlpZGVfdGZfcmVhZChpZGVfZHJpdmVfdCAqZHJpdmUsIHN0cnVjdCBpZGVfY21kICpjbWQpCiB7CiAJaWRlX2h3aWZfdCAqaHdpZiA9IGRyaXZlLT5od2lmOwogCXN0cnVjdCBpZGVfaW9fcG9ydHMgKmlvX3BvcnRzID0gJmh3aWYtPmlvX3BvcnRzOwotCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJnRhc2stPnRmOworCXN0cnVjdCBpZGVfdGFza2ZpbGUgKnRmID0gJmNtZC0+dGY7CiAKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREFUQSkgeworCWlmIChjbWQtPmZ0Zl9mbGFncyAmIElERV9GVEZMQUdfSU5fREFUQSkgewogCQl1MTYgZGF0YTsKIAogCQkvKiBubyBlbmRpYW4gc3dhcCAqLwpAQCAtNTI5LDMyICs1MjEsMzIgQEAKIAkvKiBiZSBzdXJlIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIGxvdyBvcmRlciBiaXRzICovCiAJdHg0OTM5aWRlX291dGIoQVRBX0RFVkNUTF9PQlMgJiB+MHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9GRUFUVVJFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0ZFQVRVUkUpCiAJCXRmLT5mZWF0dXJlID0gdHg0OTM5aWRlX2luYihpb19wb3J0cy0+ZmVhdHVyZV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTlNFQ1QpCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTlNFQ1QpCiAJCXRmLT5uc2VjdCAgPSB0eDQ5MzlpZGVfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFMKQogCQl0Zi0+bGJhbCAgID0gdHg0OTM5aWRlX2luYihpb19wb3J0cy0+bGJhbF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBTSkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFNKQogCQl0Zi0+bGJhbSAgID0gdHg0OTM5aWRlX2luYihpb19wb3J0cy0+bGJhbV9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fTEJBSCkKKwlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9MQkFIKQogCQl0Zi0+bGJhaCAgID0gdHg0OTM5aWRlX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fREVWSUNFKQorCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0RFVklDRSkKIAkJdGYtPmRldmljZSA9IHR4NDkzOWlkZV9pbmIoaW9fcG9ydHMtPmRldmljZV9hZGRyKTsKIAotCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19MQkE0OCkgeworCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0xCQTQ4KSB7CiAJCXR4NDkzOWlkZV9vdXRiKEFUQV9ERVZDVExfT0JTIHwgMHg4MCwgaW9fcG9ydHMtPmN0bF9hZGRyKTsKIAotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0ZFQVRVUkUpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9GRUFUVVJFKQogCQkJdGYtPmhvYl9mZWF0dXJlID0KIAkJCQl0eDQ5MzlpZGVfaW5iKGlvX3BvcnRzLT5mZWF0dXJlX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX05TRUNUKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTlNFQ1QpCiAJCQl0Zi0+aG9iX25zZWN0ICAgPSB0eDQ5MzlpZGVfaW5iKGlvX3BvcnRzLT5uc2VjdF9hZGRyKTsKLQkJaWYgKHRhc2stPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFMKQorCQlpZiAoY21kLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTCkKIAkJCXRmLT5ob2JfbGJhbCAgICA9IHR4NDkzOWlkZV9pbmIoaW9fcG9ydHMtPmxiYWxfYWRkcik7Ci0JCWlmICh0YXNrLT50Zl9mbGFncyAmIElERV9URkxBR19JTl9IT0JfTEJBTSkKKwkJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQU0pCiAJCQl0Zi0+aG9iX2xiYW0gICAgPSB0eDQ5MzlpZGVfaW5iKGlvX3BvcnRzLT5sYmFtX2FkZHIpOwotCQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfSU5fSE9CX0xCQUgpCisJCWlmIChjbWQtPnRmX2ZsYWdzICYgSURFX1RGTEFHX0lOX0hPQl9MQkFIKQogCQkJdGYtPmhvYl9sYmFoICAgID0gdHg0OTM5aWRlX2luYihpb19wb3J0cy0+bGJhaF9hZGRyKTsKIAl9CiB9CkBAIC02MDEsMTEgKzU5MywxMiBAQAogCiAjZWxzZQkvKiBfX0xJVFRMRV9FTkRJQU4gKi8KIAotc3RhdGljIHZvaWQgdHg0OTM5aWRlX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBpZGVfdGFza190ICp0YXNrKQorc3RhdGljIHZvaWQgdHg0OTM5aWRlX3RmX2xvYWQoaWRlX2RyaXZlX3QgKmRyaXZlLCBzdHJ1Y3QgaWRlX2NtZCAqY21kKQogewotCWlkZV90Zl9sb2FkKGRyaXZlLCB0YXNrKTsKLQlpZiAodGFzay0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RFVklDRSkKLQkJdHg0OTM5aWRlX3RmX2xvYWRfZml4dXAoZHJpdmUsIHRhc2spOworCWlkZV90Zl9sb2FkKGRyaXZlLCBjbWQpOworCisJaWYgKGNtZC0+dGZfZmxhZ3MgJiBJREVfVEZMQUdfT1VUX0RFVklDRSkKKwkJdHg0OTM5aWRlX3RmX2xvYWRfZml4dXAoZHJpdmUpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgdHg0OTM5aWRlX3RwX29wcyA9IHsKQEAgLTYzNCwxMSArNjI3LDExIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGlkZV9kbWFfb3BzIHR4NDkzOWlkZV9kbWFfb3BzID0gewogCS5kbWFfaG9zdF9zZXQJCT0gdHg0OTM5aWRlX2RtYV9ob3N0X3NldCwKIAkuZG1hX3NldHVwCQk9IHR4NDkzOWlkZV9kbWFfc2V0dXAsCi0JLmRtYV9leGVjX2NtZAkJPSBpZGVfZG1hX2V4ZWNfY21kLAogCS5kbWFfc3RhcnQJCT0gaWRlX2RtYV9zdGFydCwKIAkuZG1hX2VuZAkJPSB0eDQ5MzlpZGVfZG1hX2VuZCwKIAkuZG1hX3Rlc3RfaXJxCQk9IHR4NDkzOWlkZV9kbWFfdGVzdF9pcnEsCiAJLmRtYV9sb3N0X2lycQkJPSBpZGVfZG1hX2xvc3RfaXJxLAorCS5kbWFfdGltZXJfZXhwaXJ5CT0gaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5LAogCS5kbWFfdGltZW91dAkJPSBpZGVfZG1hX3RpbWVvdXQsCiAJLmRtYV9zZmZfcmVhZF9zdGF0dXMJPSB0eDQ5MzlpZGVfZG1hX3NmZl9yZWFkX3N0YXR1cywKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL2lucHV0L2lucHV0LmMgYi9kcml2ZXJzL2lucHV0L2lucHV0LmMKaW5kZXggMTczMGQ3My4uZWMzZGIzYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9pbnB1dC9pbnB1dC5jCisrKyBiL2RyaXZlcnMvaW5wdXQvaW5wdXQuYwpAQCAtOTAzLDggKzkwMyw2IEBACiAJaWYgKCFwcm9jX2J1c19pbnB1dF9kaXIpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcHJvY19idXNfaW5wdXRfZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwotCiAJZW50cnkgPSBwcm9jX2NyZWF0ZSgiZGV2aWNlcyIsIDAsIHByb2NfYnVzX2lucHV0X2RpciwKIAkJCSAgICAmaW5wdXRfZGV2aWNlc19maWxlb3BzKTsKIAlpZiAoIWVudHJ5KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFzaS5jIGIvZHJpdmVycy9pc2RuL2hhcmR3YXJlL2VpY29uL2RpdmFzaS5jCmluZGV4IGY0OTY5ZmUuLjY5ZTcxZWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaXNkbi9oYXJkd2FyZS9laWNvbi9kaXZhc2kuYworKysgYi9kcml2ZXJzL2lzZG4vaGFyZHdhcmUvZWljb24vZGl2YXNpLmMKQEAgLTExOCw3ICsxMTgsNiBAQAogCQlyZXR1cm4gKDApOwogCiAJdW1faWRpX3Byb2NfZW50cnktPnJlYWRfcHJvYyA9IHVtX2lkaV9wcm9jX3JlYWQ7Ci0JdW1faWRpX3Byb2NfZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAlyZXR1cm4gKDEpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jIGIvZHJpdmVycy9tYWNpbnRvc2gvdGhlcm1fYWR0NzQ2eC5jCmluZGV4IDgyNjA3YWQuLmMwNjIxZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWFjaW50b3NoL3RoZXJtX2FkdDc0NnguYworKysgYi9kcml2ZXJzL21hY2ludG9zaC90aGVybV9hZHQ3NDZ4LmMKQEAgLTQ5OCw4ICs0OTgsOCBAQAogI2RlZmluZSBCVUlMRF9TVE9SRV9GVU5DX0lOVChuYW1lLCBkYXRhKQkJCVwKIHN0YXRpYyBzc2l6ZV90IHN0b3JlXyMjbmFtZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjb25zdCBjaGFyICpidWYsIHNpemVfdCBuKSBcCiB7CQkJCQkJCQlcCi0JdTMyIHZhbDsJCQkJCQlcCi0JdmFsID0gc2ltcGxlX3N0cnRvdWwoYnVmLCBOVUxMLCAxMCk7CQkJXAorCWludCB2YWw7CQkJCQkJXAorCXZhbCA9IHNpbXBsZV9zdHJ0b2woYnVmLCBOVUxMLCAxMCk7CQkJXAogCWlmICh2YWwgPCAwIHx8IHZhbCA+IDI1NSkJCQkJXAogCQlyZXR1cm4gLUVJTlZBTDsJCQkJCVwKIAlwcmludGsoS0VSTl9JTkZPICJTZXR0aW5nIHNwZWNpZmllZCBmYW4gc3BlZWQgdG8gJWRcbiIsIHZhbCk7CVwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvS2NvbmZpZwppbmRleCA5M2VhMjAxLi4yMjNjMzZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9LY29uZmlnCkBAIC0xMTcsNyArMTE3LDcgQEAKIGNvbmZpZyBEQUIKIAlib29sZWFuICJEQUIgYWRhcHRlcnMiCiAJLS0taGVscC0tLQotCSAgQWxsb3cgc2VsZWN0aW5nIHN1cHBvcnQgZm9yIGZvciBEaWdpdGFsIEF1ZGlvIEJyb2FkY2FzdGluZyAoREFCKQorCSAgQWxsb3cgc2VsZWN0aW5nIHN1cHBvcnQgZm9yIERpZ2l0YWwgQXVkaW8gQnJvYWRjYXN0aW5nIChEQUIpCiAJICBSZWNlaXZlciBhZGFwdGVycy4KIAogaWYgREFCCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1rZXltYXBzLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9pci1rZXltYXBzLmMKaW5kZXggZDgyMjlhMC4uM2ZlMTU4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vaXIta2V5bWFwcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL2lyLWtleW1hcHMuYwpAQCAtMTUzLDYgKzE1Myw2NSBAQAogfTsKIEVYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2F2ZXJtZWRpYV9tMTM1YSk7CiAKKy8qIE9sZHJpY2ggSmVkbGlja2EgPG9sZGl1bS5wcm9Ac2V6bmFtLmN6PiAqLworSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXZlcm1lZGlhX2NhcmRidXNbSVJfS0VZVEFCX1NJWkVdID0geworCVsweDAwXSA9IEtFWV9QT1dFUiwKKwlbMHgwMV0gPSBLRVlfVFVORVIsCQkvKiBUVi9GTSAqLworCVsweDAzXSA9IEtFWV9URVhULAkJLyogVGVsZXRleHQgKi8KKwlbMHgwNF0gPSBLRVlfRVBHLAorCVsweDA1XSA9IEtFWV8xLAorCVsweDA2XSA9IEtFWV8yLAorCVsweDA3XSA9IEtFWV8zLAorCVsweDA4XSA9IEtFWV9BVURJTywKKwlbMHgwOV0gPSBLRVlfNCwKKwlbMHgwYV0gPSBLRVlfNSwKKwlbMHgwYl0gPSBLRVlfNiwKKwlbMHgwY10gPSBLRVlfWk9PTSwJCS8qIEZ1bGwgc2NyZWVuICovCisJWzB4MGRdID0gS0VZXzcsCisJWzB4MGVdID0gS0VZXzgsCisJWzB4MGZdID0gS0VZXzksCisJWzB4MTBdID0gS0VZX1BBR0VVUCwJCS8qIDE2LUNIIFBSRVYgKi8KKwlbMHgxMV0gPSBLRVlfMCwKKwlbMHgxMl0gPSBLRVlfSU5GTywKKwlbMHgxM10gPSBLRVlfQUdBSU4sCQkvKiBDSCBSVE4gLSBjaGFubmVsIHJldHVybiAqLworCVsweDE0XSA9IEtFWV9NVVRFLAorCVsweDE1XSA9IEtFWV9FRElULAkJLyogQXV0b3NjYW4gKi8KKwlbMHgxN10gPSBLRVlfU0FWRSwJCS8qIFNjcmVlbnNob3QgKi8KKwlbMHgxOF0gPSBLRVlfUExBWVBBVVNFLAorCVsweDE5XSA9IEtFWV9SRUNPUkQsCisJWzB4MWFdID0gS0VZX1BMQVksCisJWzB4MWJdID0gS0VZX1NUT1AsCisJWzB4MWNdID0gS0VZX0ZBU1RGT1JXQVJELAorCVsweDFkXSA9IEtFWV9SRVdJTkQsCisJWzB4MWVdID0gS0VZX1ZPTFVNRURPV04sCisJWzB4MWZdID0gS0VZX1ZPTFVNRVVQLAorCVsweDIyXSA9IEtFWV9TTEVFUCwJCS8qIFNsZWVwICovCisJWzB4MjNdID0gS0VZX1pPT00sCQkvKiBBc3BlY3QgKi8KKwlbMHgyNl0gPSBLRVlfU0NSRUVOLAkJLyogUG9zICovCisJWzB4MjddID0gS0VZX0FOR0xFLAkJLyogU2l6ZSAqLworCVsweDI4XSA9IEtFWV9TRUxFQ1QsCQkvKiBTZWxlY3QgKi8KKwlbMHgyOV0gPSBLRVlfQkxVRSwJCS8qIEJsdWUvUGljdHVyZSAqLworCVsweDJhXSA9IEtFWV9CQUNLU1BBQ0UsCS8qIEJhY2sgKi8KKwlbMHgyYl0gPSBLRVlfTUVESUEsCQkvKiBQSVAgKFBpY3R1cmUtaW4tcGljdHVyZSkgKi8KKwlbMHgyY10gPSBLRVlfRE9XTiwKKwlbMHgyZV0gPSBLRVlfRE9ULAorCVsweDJmXSA9IEtFWV9UViwJCS8qIExpdmUgVFYgKi8KKwlbMHgzMl0gPSBLRVlfTEVGVCwKKwlbMHgzM10gPSBLRVlfQ0xFQVIsCQkvKiBDbGVhciAqLworCVsweDM1XSA9IEtFWV9SRUQsCQkvKiBSZWQvVFYgKi8KKwlbMHgzNl0gPSBLRVlfVVAsCisJWzB4MzddID0gS0VZX0hPTUUsCQkvKiBIb21lICovCisJWzB4MzldID0gS0VZX0dSRUVOLAkJLyogR3JlZW4vVmlkZW8gKi8KKwlbMHgzZF0gPSBLRVlfWUVMTE9XLAkJLyogWWVsbG93L011c2ljICovCisJWzB4M2VdID0gS0VZX09LLAkJLyogT2sgKi8KKwlbMHgzZl0gPSBLRVlfUklHSFQsCisJWzB4NDBdID0gS0VZX05FWFQsCQkvKiBOZXh0ICovCisJWzB4NDFdID0gS0VZX1BSRVZJT1VTLAkvKiBQcmV2aW91cyAqLworCVsweDQyXSA9IEtFWV9DSEFOTkVMRE9XTiwJLyogQ2hhbm5lbCBkb3duICovCisJWzB4NDNdID0gS0VZX0NIQU5ORUxVUAkvKiBDaGFubmVsIHVwICovCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfYXZlcm1lZGlhX2NhcmRidXMpOworCiAvKiBBdHRpbGEgS29uZG9yb3MgPGF0dGlsYS5rb25kb3Jvc0BjaGVsbG8uaHU+ICovCiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hcGFjX3ZpZXdjb21wW0lSX0tFWVRBQl9TSVpFXSA9IHsKIApAQCAtMjQ1Miw2ICsyNTExLDU1IEBACiB9OwogRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfa3dvcmxkX3BsdXNfdHZfYW5hbG9nKTsKIAorLyogS2Fpb215IFRWblBDIFUyCisgICBNYXVybyBDYXJ2YWxobyBDaGVoYWIgPG1jaGVoYWJAaW5mcmFkZWFkLm9yZz4KKyAqLworSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfa2Fpb215W0lSX0tFWVRBQl9TSVpFXSA9IHsKKwlbMHg0M10gPSBLRVlfUE9XRVIyLAorCVsweDAxXSA9IEtFWV9MSVNULAorCVsweDBiXSA9IEtFWV9aT09NLAorCVsweDAzXSA9IEtFWV9QT1dFUiwKKworCVsweDA0XSA9IEtFWV8xLAorCVsweDA4XSA9IEtFWV8yLAorCVsweDAyXSA9IEtFWV8zLAorCisJWzB4MGZdID0gS0VZXzQsCisJWzB4MDVdID0gS0VZXzUsCisJWzB4MDZdID0gS0VZXzYsCisKKwlbMHgwY10gPSBLRVlfNywKKwlbMHgwZF0gPSBLRVlfOCwKKwlbMHgwYV0gPSBLRVlfOSwKKworCVsweDExXSA9IEtFWV8wLAorCisJWzB4MDldID0gS0VZX0NIQU5ORUxVUCwKKwlbMHgwN10gPSBLRVlfQ0hBTk5FTERPV04sCisKKwlbMHgwZV0gPSBLRVlfVk9MVU1FVVAsCisJWzB4MTNdID0gS0VZX1ZPTFVNRURPV04sCisKKwlbMHgxMF0gPSBLRVlfSE9NRSwKKwlbMHgxMl0gPSBLRVlfRU5URVIsCisKKwlbMHgxNF0gPSBLRVlfUkVDT1JELAorCVsweDE1XSA9IEtFWV9TVE9QLAorCVsweDE2XSA9IEtFWV9QTEFZLAorCVsweDE3XSA9IEtFWV9NVVRFLAorCisJWzB4MThdID0gS0VZX1VQLAorCVsweDE5XSA9IEtFWV9ET1dOLAorCVsweDFhXSA9IEtFWV9MRUZULAorCVsweDFiXSA9IEtFWV9SSUdIVCwKKworCVsweDFjXSA9IEtFWV9SRUQsCisJWzB4MWRdID0gS0VZX0dSRUVOLAorCVsweDFlXSA9IEtFWV9ZRUxMT1csCisJWzB4MWZdID0gS0VZX0JMVUUsCit9OworRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfa2Fpb215KTsKKwogSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXZlcm1lZGlhX2ExNmRbSVJfS0VZVEFCX1NJWkVdID0gewogCVsweDIwXSA9IEtFWV9MSVNULAogCVsweDAwXSA9IEtFWV9QT1dFUiwKQEAgLTI2MDQsMyArMjcxMiw0MSBAQAogfTsKIAogRVhQT1JUX1NZTUJPTF9HUEwoaXJfY29kZXNfYXRpX3R2X3dvbmRlcl9oZF82MDApOworCisvKiBEVkJXb3JsZCByZW1vdGVzCisgICBJZ29yIE0uIExpcGxpYW5pbiA8bGlwbGlhbmluQG1lLmJ5PgorICovCitJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19kbTExMDVfbmVjW0lSX0tFWVRBQl9TSVpFXSA9IHsKKwlbMHgwYV0gPSBLRVlfUSwJCS8qcG93ZXIqLworCVsweDBjXSA9IEtFWV9NLAkJLyptdXRlKi8KKwlbMHgxMV0gPSBLRVlfMSwKKwlbMHgxMl0gPSBLRVlfMiwKKwlbMHgxM10gPSBLRVlfMywKKwlbMHgxNF0gPSBLRVlfNCwKKwlbMHgxNV0gPSBLRVlfNSwKKwlbMHgxNl0gPSBLRVlfNiwKKwlbMHgxN10gPSBLRVlfNywKKwlbMHgxOF0gPSBLRVlfOCwKKwlbMHgxOV0gPSBLRVlfOSwKKwlbMHgxMF0gPSBLRVlfMCwKKwlbMHgxY10gPSBLRVlfUEFHRVVQLAkvKmNoKyovCisJWzB4MGZdID0gS0VZX1BBR0VET1dOLAkvKmNoLSovCisJWzB4MWFdID0gS0VZX08sCQkvKnZvbCsqLworCVsweDBlXSA9IEtFWV9aLAkJLyp2b2wtKi8KKwlbMHgwNF0gPSBLRVlfUiwJCS8qcmVjKi8KKwlbMHgwOV0gPSBLRVlfRCwJCS8qZmF2Ki8KKwlbMHgwOF0gPSBLRVlfQkFDS1NQQUNFLAkvKnJld2luZCovCisJWzB4MDddID0gS0VZX0EsCQkvKmZhc3QqLworCVsweDBiXSA9IEtFWV9QLAkJLypwYXVzZSovCisJWzB4MDJdID0gS0VZX0VTQywJLypjYW5jZWwqLworCVsweDAzXSA9IEtFWV9HLAkJLyp0YWIqLworCVsweDAwXSA9IEtFWV9VUCwJLyp1cCovCisJWzB4MWZdID0gS0VZX0VOVEVSLAkvKm9rKi8KKwlbMHgwMV0gPSBLRVlfRE9XTiwJLypkb3duKi8KKwlbMHgwNV0gPSBLRVlfQywJCS8qY2FwKi8KKwlbMHgwNl0gPSBLRVlfUywJCS8qc3RvcCovCisJWzB4NDBdID0gS0VZX0YsCQkvKmZ1bGwqLworCVsweDFlXSA9IEtFWV9XLAkJLyp0dm1vZGUqLworCVsweDFiXSA9IEtFWV9CLAkJLypyZWNhbGwqLworfTsKK0VYUE9SVF9TWU1CT0xfR1BMKGlyX2NvZGVzX2RtMTEwNV9uZWMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9jb3JlLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2NvcmUuYwppbmRleCBkNTk5ZDM2Li45ODJmMDAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2NvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2NvcmUuYwpAQCAtNDUyLDggKzQ1Miw2IEBACiAJSU5GTygoImZvdW5kIHNhYTcxNDYgQCBtZW0gJXAgKHJldmlzaW9uICVkLCBpcnEgJWQpICgweCUwNHgsMHglMDR4KS5cbiIsIGRldi0+bWVtLCBkZXYtPnJldmlzaW9uLCBwY2ktPmlycSwgcGNpLT5zdWJzeXN0ZW1fdmVuZG9yLCBwY2ktPnN1YnN5c3RlbV9kZXZpY2UpKTsKIAlkZXYtPmV4dCA9IGV4dDsKIAotCXBjaV9zZXRfZHJ2ZGF0YShwY2ksIGRldik7Ci0KIAltdXRleF9pbml0KCZkZXYtPmxvY2spOwogCXNwaW5fbG9ja19pbml0KCZkZXYtPmludF9zbG9jayk7CiAJc3Bpbl9sb2NrX2luaXQoJmRldi0+c2xvY2spOwpAQCAtNDc3LDggKzQ3NSwxMiBAQAogCiAJaWYgKGV4dC0+YXR0YWNoKGRldiwgcGNpX2V4dCkpIHsKIAkJREVCX0QoKCJleHQtPmF0dGFjaCgpIGZhaWxlZCBmb3IgJXAuIHNraXBwaW5nIGRldmljZS5cbiIsZGV2KSk7Ci0JCWdvdG8gZXJyX3VucHJvYmU7CisJCWdvdG8gZXJyX2ZyZWVfaTJjOwogCX0KKwkvKiBWNEwgZXh0ZW5zaW9ucyB3aWxsIHNldCB0aGUgcGNpIGRydmRhdGEgdG8gdGhlIHY0bDJfZGV2aWNlIGluIHRoZQorCSAgIGF0dGFjaCgpIGFib3ZlLiBTbyBmb3IgdGhvc2UgY2FyZHMgdGhhdCBkbyBub3QgdXNlIFY0TCB3ZSBoYXZlIHRvCisJICAgc2V0IGl0IGV4cGxpY2l0bHkuICovCisJcGNpX3NldF9kcnZkYXRhKHBjaSwgJmRldi0+djRsMl9kZXYpOwogCiAJSU5JVF9MSVNUX0hFQUQoJmRldi0+aXRlbSk7CiAJbGlzdF9hZGRfdGFpbCgmZGV2LT5pdGVtLCZzYWE3MTQ2X2RldmljZXMpOwpAQCAtNDg4LDggKzQ5MCw2IEBACiBvdXQ6CiAJcmV0dXJuIGVycjsKIAotZXJyX3VucHJvYmU6Ci0JcGNpX3NldF9kcnZkYXRhKHBjaSwgTlVMTCk7CiBlcnJfZnJlZV9pMmM6CiAJcGNpX2ZyZWVfY29uc2lzdGVudChwY2ksIFNBQTcxNDZfUlBTX01FTSwgZGV2LT5kX2kyYy5jcHVfYWRkciwKIAkJCSAgICBkZXYtPmRfaTJjLmRtYV9oYW5kbGUpOwpAQCAtNTE0LDcgKzUxNCw4IEBACiAKIHN0YXRpYyB2b2lkIHNhYTcxNDZfcmVtb3ZlX29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlzdHJ1Y3Qgc2FhNzE0Nl9kZXYqIGRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpOworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gdG9fc2FhNzE0Nl9kZXYodjRsMl9kZXYpOwogCXN0cnVjdCB7CiAJCXZvaWQgKmFkZHI7CiAJCWRtYV9hZGRyX3QgZG1hOwpAQCAtNTI4LDYgKzUyOSw4IEBACiAJREVCX0VFKCgiZGV2OiVwXG4iLGRldikpOwogCiAJZGV2LT5leHQtPmRldGFjaChkZXYpOworCS8qIFplcm8gdGhlIFBDSSBkcnZkYXRhIGFmdGVyIHVzZS4gKi8KKwlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAKIAkvKiBzaHV0IGRvd24gYWxsIHZpZGVvIGRtYSB0cmFuc2ZlcnMgKi8KIAlzYWE3MTQ2X3dyaXRlKGRldiwgTUMxLCAweDAwZmYwMDAwKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfZm9wcy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMKaW5kZXggY2YwNmY0ZC4uNjIwZjY1NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9mb3BzLmMKQEAgLTMwOCwxNCArMzA4LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGxvbmcgZm9wc19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCi17Ci0vKgotCURFQl9FRSgoImZpbGU6JXAsIGNtZDolZCwgYXJnOiVsaVxuIiwgZmlsZSwgY21kLCBhcmcpKTsKLSovCi0JcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGZpbGUsIGNtZCwgYXJnLCBzYWE3MTQ2X3ZpZGVvX2RvX2lvY3RsKTsKLX0KLQogc3RhdGljIGludCBmb3BzX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSkKIHsKIAlzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CkBAIC00MjUsNyArNDE3LDcgQEAKIAkud3JpdGUJCT0gZm9wc193cml0ZSwKIAkucG9sbAkJPSBmb3BzX3BvbGwsCiAJLm1tYXAJCT0gZm9wc19tbWFwLAotCS5pb2N0bAkJPSBmb3BzX2lvY3RsLAorCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCiB9OwogCiBzdGF0aWMgdm9pZCB2dl9jYWxsYmFjayhzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiwgdW5zaWduZWQgbG9uZyBzdGF0dXMpCkBAIC00NTIsMTkgKzQ0NCwyMiBAQAogCX0KIH0KIAotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgZGV2aWNlX3RlbXBsYXRlID0KLXsKLQkuZm9wcwkJPSAmdmlkZW9fZm9wcywKLQkubWlub3IJCT0gLTEsCi19OwotCiBpbnQgc2FhNzE0Nl92dl9pbml0KHN0cnVjdCBzYWE3MTQ2X2RldiogZGV2LCBzdHJ1Y3Qgc2FhNzE0Nl9leHRfdnYgKmV4dF92dikKIHsKLQlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBremFsbG9jIChzaXplb2Yoc3RydWN0IHNhYTcxNDZfdnYpLEdGUF9LRVJORUwpOwotCWlmKCBOVUxMID09IHZ2ICkgeworCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2djsKKwlpbnQgZXJyOworCisJZXJyID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJmRldi0+cGNpLT5kZXYsICZkZXYtPnY0bDJfZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCisJdnYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FhNzE0Nl92diksIEdGUF9LRVJORUwpOworCWlmICh2diA9PSBOVUxMKSB7CiAJCUVSUigoIm91dCBvZiBtZW1vcnkuIGFib3J0aW5nLlxuIikpOwotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRU5PTUVNOwogCX0KKwlleHRfdnYtPm9wcyA9IHNhYTcxNDZfdmlkZW9faW9jdGxfb3BzOworCWV4dF92di0+Y29yZV9vcHMgPSAmc2FhNzE0Nl92aWRlb19pb2N0bF9vcHM7CiAKIAlERUJfRUUoKCJkZXY6JXBcbiIsZGV2KSk7CiAKQEAgLTUwNyw2ICs1MDIsNyBAQAogCiAJREVCX0VFKCgiZGV2OiVwXG4iLGRldikpOwogCisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7CiAJcGNpX2ZyZWVfY29uc2lzdGVudChkZXYtPnBjaSwgU0FBNzE0Nl9DTElQUElOR19NRU0sIHZ2LT5kX2NsaXBwaW5nLmNwdV9hZGRyLCB2di0+ZF9jbGlwcGluZy5kbWFfaGFuZGxlKTsKIAlrZnJlZSh2dik7CiAJZGV2LT52dl9kYXRhID0gTlVMTDsKQEAgLTUyMSw2ICs1MTcsOCBAQAogewogCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQ7CisJaW50IGVycjsKKwlpbnQgaTsKIAogCURFQl9FRSgoImRldjolcCwgbmFtZTonJXMnLCB0eXBlOiVkXG4iLGRldixuYW1lLHR5cGUpKTsKIApAQCAtNTI5LDE2ICs1MjcsMjAgQEAKIAlpZiAodmZkID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbWVtY3B5KHZmZCwgJmRldmljZV90ZW1wbGF0ZSwgc2l6ZW9mKHN0cnVjdCB2aWRlb19kZXZpY2UpKTsKLQlzdHJsY3B5KHZmZC0+bmFtZSwgbmFtZSwgc2l6ZW9mKHZmZC0+bmFtZSkpOworCXZmZC0+Zm9wcyA9ICZ2aWRlb19mb3BzOworCXZmZC0+aW9jdGxfb3BzID0gJmRldi0+ZXh0X3Z2X2RhdGEtPm9wczsKIAl2ZmQtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKKwl2ZmQtPnR2bm9ybXMgPSAwOworCWZvciAoaSA9IDA7IGkgPCBkZXYtPmV4dF92dl9kYXRhLT5udW1fc3RkczsgaSsrKQorCQl2ZmQtPnR2bm9ybXMgfD0gZGV2LT5leHRfdnZfZGF0YS0+c3Rkc1tpXS5pZDsKKwlzdHJsY3B5KHZmZC0+bmFtZSwgbmFtZSwgc2l6ZW9mKHZmZC0+bmFtZSkpOwogCXZpZGVvX3NldF9kcnZkYXRhKHZmZCwgZGV2KTsKIAotCS8vIGZpeG1lOiAtMSBzaG91bGQgYmUgYW4gaW5zbW9kIHBhcmFtZXRlciAqZm9yIHRoZSBleHRlbnNpb24qIChsaWtlICJ2aWRlb19uciIpOwotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UodmZkLCB0eXBlLCAtMSkgPCAwKSB7CisJZXJyID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZmZCwgdHlwZSwgLTEpOworCWlmIChlcnIgPCAwKSB7CiAJCUVSUigoImNhbm5vdCByZWdpc3RlciB2NGwyIGRldmljZS4gc2tpcHBpbmcuXG4iKSk7CiAJCXZpZGVvX2RldmljZV9yZWxlYXNlKHZmZCk7Ci0JCXJldHVybiAtMTsKKwkJcmV0dXJuIGVycjsKIAl9CiAKIAlpZiggVkZMX1RZUEVfR1JBQkJFUiA9PSB0eXBlICkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9pMmMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfaTJjLmMKaW5kZXggYzExZGE0ZC4uN2U4ZjU2OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl9pMmMuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X2kyYy5jCkBAIC0yOTMsNyArMjkzLDYgQEAKIAlpbnQgaSA9IDAsIGNvdW50ID0gMDsKIAlfX2xlMzIgKmJ1ZmZlciA9IGRldi0+ZF9pMmMuY3B1X2FkZHI7CiAJaW50IGVyciA9IDA7Ci0JaW50IGFkZHJlc3NfZXJyID0gMDsKIAlpbnQgc2hvcnRfZGVsYXkgPSAwOwogCiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZGV2LT5pMmNfbG9jaykpCkBAIC0zMzMsMTcgKzMzMiwxMCBAQAogCQkJCSAgIGkyYyBhZGRyZXNzIHByb2JpbmcsIGhvd2V2ZXIsIGFuZCBhZGRyZXNzIGVycm9ycyBpbmRpY2F0ZSB0aGF0IGEKIAkJCQkgICBkZXZpY2UgaXMgcmVhbGx5ICpub3QqIHRoZXJlLiByZXRyeWluZyBpbiB0aGF0IGNhc2UKIAkJCQkgICBpbmNyZWFzZXMgdGhlIHRpbWUgdGhlIGRldmljZSBuZWVkcyB0byBwcm9iZSBncmVhdGx5LCBzbwotCQkJCSAgIGl0IHNob3VsZCBiZSBhdm9pZGVkLiBiZWNhdXNlIG9mIHRoZSBmYWN0LCB0aGF0IG9ubHkKLQkJCQkgICBhbmFsb2cgYmFzZWQgY2FyZHMgdXNlIGlycSBiYXNlZCBpMmMgdHJhbnNhY3Rpb25zIChmb3IgZHZiCi0JCQkJICAgY2FyZHMsIHRoaXMgc2NyZXdlcyB1cCBvdGhlciBpbnRlcnJ1cHQgc291cmNlcyksIHdlIGJhaWwgb3V0Ci0JCQkJICAgY29tcGxldGVseSBmb3IgYW5hbG9nIGNhcmRzIGFmdGVyIGFuIGFkZHJlc3MgZXJyb3IgYW5kIHRydXN0Ci0JCQkJICAgdGhlIHNhYTcxNDYgYWRkcmVzcyBlcnJvciBkZXRlY3Rpb24uICovCi0JCQkJaWYgKCAtRVJFTU9URUlPID09IGVyciApIHsKLQkJCQkJaWYoIDAgIT0gKFNBQTcxNDZfVVNFX0kyQ19JUlEgJiBkZXYtPmV4dC0+ZmxhZ3MpKSB7Ci0JCQkJCQlnb3RvIG91dDsKLQkJCQkJfQotCQkJCQlhZGRyZXNzX2VycisrOwotCQkJCX0KKwkJCQkgICBpdCBzaG91bGQgYmUgYXZvaWRlZC4gU28gd2UgYmFpbCBvdXQgaW4gaXJxIG1vZGUgYWZ0ZXIgYW4KKwkJCQkgICBhZGRyZXNzIGVycm9yIGFuZCB0cnVzdCB0aGUgc2FhNzE0NiBhZGRyZXNzIGVycm9yIGRldGVjdGlvbi4gKi8KKwkJCQlpZiAoLUVSRU1PVEVJTyA9PSBlcnIgJiYgMCAhPSAoU0FBNzE0Nl9VU0VfSTJDX0lSUSAmIGRldi0+ZXh0LT5mbGFncykpCisJCQkJCWdvdG8gb3V0OwogCQkJCURFQl9JMkMoKCJlcnJvciB3aGlsZSBzZW5kaW5nIG1lc3NhZ2UocykuIHN0YXJ0aW5nIGFnYWluLlxuIikpOwogCQkJCWJyZWFrOwogCQkJfQpAQCAtMzU4LDEwICszNTAsOSBAQAogCiAJfSB3aGlsZSAoZXJyICE9IG51bSAmJiByZXRyaWVzLS0pOwogCi0JLyogaWYgZXZlcnkgcmV0cnkgaGFkIGFuIGFkZHJlc3MgZXJyb3IsIGV4aXQgcmlnaHQgYXdheSAqLwotCWlmIChhZGRyZXNzX2VyciA9PSByZXRyaWVzKSB7CisJLyogcXVpdCBpZiBhbnkgZXJyb3Igb2NjdXJyZWQgKi8KKwlpZiAoZXJyICE9IG51bSkKIAkJZ290byBvdXQ7Ci0JfQogCiAJLyogaWYgYW55IHRoaW5ncyBoYWQgdG8gYmUgcmVhZCwgZ2V0IHRoZSByZXN1bHRzICovCiAJaWYgKCAwICE9IHNhYTcxNDZfaTJjX21zZ19jbGVhbnVwKG1zZ3MsIG51bSwgYnVmZmVyKSkgewpAQCAtMzkwLDcgKzM4MSw4IEBACiAvKiB1dGlsaXR5IGZ1bmN0aW9ucyAqLwogc3RhdGljIGludCBzYWE3MTQ2X2kyY194ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciogYWRhcHRlciwgc3RydWN0IGkyY19tc2cgKm1zZywgaW50IG51bSkKIHsKLQlzdHJ1Y3Qgc2FhNzE0Nl9kZXYqIGRldiA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcHRlcik7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGkyY19nZXRfYWRhcGRhdGEoYWRhcHRlcik7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSB0b19zYWE3MTQ2X2Rldih2NGwyX2Rldik7CiAKIAkvKiB1c2UgaGVscGVyIGZ1bmN0aW9uIHRvIHRyYW5zZmVyIGRhdGEgKi8KIAlyZXR1cm4gc2FhNzE0Nl9pMmNfdHJhbnNmZXIoZGV2LCBtc2csIG51bSwgYWRhcHRlci0+cmV0cmllcyk7CkBAIC00MTcsOSArNDA5LDggQEAKIAlkZXYtPmkyY19iaXRyYXRlID0gYml0cmF0ZTsKIAlzYWE3MTQ2X2kyY19yZXNldChkZXYpOwogCi0JaWYoIE5VTEwgIT0gaTJjX2FkYXB0ZXIgKSB7Ci0JCUJVR19PTighaTJjX2FkYXB0ZXItPmNsYXNzKTsKLQkJaTJjX3NldF9hZGFwZGF0YShpMmNfYWRhcHRlcixkZXYpOworCWlmIChpMmNfYWRhcHRlcikgeworCQlpMmNfc2V0X2FkYXBkYXRhKGkyY19hZGFwdGVyLCAmZGV2LT52NGwyX2Rldik7CiAJCWkyY19hZGFwdGVyLT5kZXYucGFyZW50ICAgID0gJmRldi0+cGNpLT5kZXY7CiAJCWkyY19hZGFwdGVyLT5hbGdvCSAgID0gJnNhYTcxNDZfYWxnbzsKIAkJaTJjX2FkYXB0ZXItPmFsZ29fZGF0YSAgICAgPSBOVUxMOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92aWRlby5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vc2FhNzE0Nl92aWRlby5jCmluZGV4IDQ3ZmVlMDUuLjU1MmRhYjQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3NhYTcxNDZfdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi9zYWE3MTQ2X3ZpZGVvLmMKQEAgLTEsNCArMSw1IEBACiAjaW5jbHVkZSA8bWVkaWEvc2FhNzE0Nl92di5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgogCiBzdGF0aWMgaW50IG1heF9tZW1vcnkgPSAzMjsKIApAQCAtOTcsMTcyICs5OCwxMyBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50IGdfZm10KHN0cnVjdCBzYWE3MTQ2X2ZoICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQotewotCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKLQlERUJfRUUoKCJkZXY6JXAsIGZoOiVwXG4iLGRldixmaCkpOwotCi0Jc3dpdGNoIChmLT50eXBlKSB7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6Ci0JCWYtPmZtdC5waXggPSBmaC0+dmlkZW9fZm10OwotCQlyZXR1cm4gMDsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQkJZi0+Zm10LndpbiA9IGZoLT5vdi53aW47Ci0JCXJldHVybiAwOwotCWNhc2UgVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRToKLQl7Ci0JCWYtPmZtdC52YmkgPSBmaC0+dmJpX2ZtdDsKLQkJcmV0dXJuIDA7Ci0JfQotCWRlZmF1bHQ6Ci0JCURFQl9EKCgiaW52YWxpZCBmb3JtYXQgdHlwZSAnJWQnLlxuIixmLT50eXBlKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLX0KLQotc3RhdGljIGludCB0cnlfd2luKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LCBzdHJ1Y3QgdjRsMl93aW5kb3cgKndpbikKLXsKLQlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7Ci0JZW51bSB2NGwyX2ZpZWxkIGZpZWxkOwotCWludCBtYXh3LCBtYXhoOwotCi0JREVCX0VFKCgiZGV2OiVwXG4iLGRldikpOwotCi0JaWYgKE5VTEwgPT0gdnYtPm92X2ZiLmJhc2UpIHsKLQkJREVCX0QoKCJubyBmYiBiYXNlIHNldC5cbiIpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCWlmIChOVUxMID09IHZ2LT5vdl9mbXQpIHsKLQkJREVCX0QoKCJubyBmYiBmbXQgc2V0LlxuIikpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0JaWYgKHdpbi0+dy53aWR0aCA8IDQ4IHx8IHdpbi0+dy5oZWlnaHQgPCAgMzIpIHsKLQkJREVCX0QoKCJtaW4gd2lkdGgvaGVpZ2h0LiAoJWQsJWQpXG4iLHdpbi0+dy53aWR0aCx3aW4tPncuaGVpZ2h0KSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlpZiAod2luLT5jbGlwY291bnQgPiAxNikgewotCQlERUJfRCgoImNsaXBjb3VudCB0b28gYmlnLlxuIikpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlmaWVsZCA9IHdpbi0+ZmllbGQ7Ci0JbWF4dyAgPSB2di0+c3RhbmRhcmQtPmhfbWF4X291dDsKLQltYXhoICA9IHZ2LT5zdGFuZGFyZC0+dl9tYXhfb3V0OwotCi0JaWYgKFY0TDJfRklFTERfQU5ZID09IGZpZWxkKSB7Ci0JCWZpZWxkID0gKHdpbi0+dy5oZWlnaHQgPiBtYXhoLzIpCi0JCQk/IFY0TDJfRklFTERfSU5URVJMQUNFRAotCQkJOiBWNEwyX0ZJRUxEX1RPUDsKLQkJfQotCXN3aXRjaCAoZmllbGQpIHsKLQljYXNlIFY0TDJfRklFTERfVE9QOgotCWNhc2UgVjRMMl9GSUVMRF9CT1RUT006Ci0JY2FzZSBWNEwyX0ZJRUxEX0FMVEVSTkFURToKLQkJbWF4aCA9IG1heGggLyAyOwotCQlicmVhazsKLQljYXNlIFY0TDJfRklFTERfSU5URVJMQUNFRDoKLQkJYnJlYWs7Ci0JZGVmYXVsdDogewotCQlERUJfRCgoIm5vIGtub3duIGZpZWxkIG1vZGUgJyVkJy5cbiIsZmllbGQpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCX0KLQotCXdpbi0+ZmllbGQgPSBmaWVsZDsKLQlpZiAod2luLT53LndpZHRoID4gbWF4dykKLQkJd2luLT53LndpZHRoID0gbWF4dzsKLQlpZiAod2luLT53LmhlaWdodCA+IG1heGgpCi0JCXdpbi0+dy5oZWlnaHQgPSBtYXhoOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdHJ5X2ZtdChzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKLXsKLQlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9IGZoLT5kZXY7Ci0Jc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOwotCWludCBlcnI7Ci0KLQlzd2l0Y2ggKGYtPnR5cGUpIHsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKLQl7Ci0JCXN0cnVjdCBzYWE3MTQ2X2Zvcm1hdCAqZm10OwotCQllbnVtIHY0bDJfZmllbGQgZmllbGQ7Ci0JCWludCBtYXh3LCBtYXhoOwotCQlpbnQgY2FsY19icGw7Ci0KLQkJREVCX0VFKCgiVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOiBkZXY6JXAsIGZoOiVwXG4iLGRldixmaCkpOwotCi0JCWZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoZGV2LGYtPmZtdC5waXgucGl4ZWxmb3JtYXQpOwotCQlpZiAoTlVMTCA9PSBmbXQpIHsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOwotCQltYXh3ICA9IHZ2LT5zdGFuZGFyZC0+aF9tYXhfb3V0OwotCQltYXhoICA9IHZ2LT5zdGFuZGFyZC0+dl9tYXhfb3V0OwotCi0JCWlmIChWNEwyX0ZJRUxEX0FOWSA9PSBmaWVsZCkgewotCQkJZmllbGQgPSAoZi0+Zm10LnBpeC5oZWlnaHQgPiBtYXhoLzIpCi0JCQkJPyBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQKLQkJCQk6IFY0TDJfRklFTERfQk9UVE9NOwotCQl9Ci0JCXN3aXRjaCAoZmllbGQpIHsKLQkJY2FzZSBWNEwyX0ZJRUxEX0FMVEVSTkFURTogewotCQkJdnYtPmxhc3RfZmllbGQgPSBWNEwyX0ZJRUxEX1RPUDsKLQkJCW1heGggPSBtYXhoIC8gMjsKLQkJCWJyZWFrOwotCQl9Ci0JCWNhc2UgVjRMMl9GSUVMRF9UT1A6Ci0JCWNhc2UgVjRMMl9GSUVMRF9CT1RUT006Ci0JCQl2di0+bGFzdF9maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKLQkJCW1heGggPSBtYXhoIC8gMjsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfRklFTERfSU5URVJMQUNFRDoKLQkJCXZ2LT5sYXN0X2ZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6IHsKLQkJCURFQl9EKCgibm8ga25vd24gZmllbGQgbW9kZSAnJWQnLlxuIixmaWVsZCkpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJfQotCi0JCWYtPmZtdC5waXguZmllbGQgPSBmaWVsZDsKLQkJaWYgKGYtPmZtdC5waXgud2lkdGggPiBtYXh3KQotCQkJZi0+Zm10LnBpeC53aWR0aCA9IG1heHc7Ci0JCWlmIChmLT5mbXQucGl4LmhlaWdodCA+IG1heGgpCi0JCQlmLT5mbXQucGl4LmhlaWdodCA9IG1heGg7Ci0KLQkJY2FsY19icGwgPSAoZi0+Zm10LnBpeC53aWR0aCAqIGZtdC0+ZGVwdGgpLzg7Ci0KLQkJaWYgKGYtPmZtdC5waXguYnl0ZXNwZXJsaW5lIDwgY2FsY19icGwpCi0JCQlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IGNhbGNfYnBsOwotCi0JCWlmIChmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA+ICgyKlBBR0VfU0laRSAqIGZtdC0+ZGVwdGgpLzgpIC8qIGFyYml0cmFyeSBjb25zdHJhaW50ICovCi0JCQlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IGNhbGNfYnBsOwotCi0JCWYtPmZtdC5waXguc2l6ZWltYWdlID0gZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgKiBmLT5mbXQucGl4LmhlaWdodDsKLQkJREVCX0QoKCJ3OiVkLCBoOiVkLCBieXRlc3BlcmxpbmU6JWQsIHNpemVpbWFnZTolZFxuIixmLT5mbXQucGl4LndpZHRoLGYtPmZtdC5waXguaGVpZ2h0LGYtPmZtdC5waXguYnl0ZXNwZXJsaW5lLGYtPmZtdC5waXguc2l6ZWltYWdlKSk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgotCQlERUJfRUUoKCJWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6IGRldjolcCwgZmg6JXBcbiIsZGV2LGZoKSk7Ci0JCWVyciA9IHRyeV93aW4oZGV2LCZmLT5mbXQud2luKTsKLQkJaWYgKDAgIT0gZXJyKSB7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JCXJldHVybiAwOwotCWRlZmF1bHQ6Ci0JCURFQl9FRSgoInVua25vd24gZm9ybWF0IHR5cGUgJyVkJ1xuIixmLT50eXBlKSk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLX0KK3N0YXRpYyBpbnQgdmlkaW9jX3RyeV9mbXRfdmlkX292ZXJsYXkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpOwogCiBpbnQgc2FhNzE0Nl9zdGFydF9wcmV2aWV3KHN0cnVjdCBzYWE3MTQ2X2ZoICpmaCkKIHsKIAlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9IGZoLT5kZXY7CiAJc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOworCXN0cnVjdCB2NGwyX2Zvcm1hdCBmbXQ7CiAJaW50IHJldCA9IDAsIGVyciA9IDA7CiAKIAlERUJfRUUoKCJkZXY6JXAsIGZoOiVwXG4iLGRldixmaCkpOwpAQCAtMjk0LDEyICsxMzYsMTMgQEAKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQllcnIgPSB0cnlfd2luKGRldiwmZmgtPm92Lndpbik7CisJZm10LmZtdC53aW4gPSBmaC0+b3Yud2luOworCWVyciA9IHZpZGlvY190cnlfZm10X3ZpZF9vdmVybGF5KE5VTEwsIGZoLCAmZm10KTsKIAlpZiAoMCAhPSBlcnIpIHsKIAkJc2FhNzE0Nl9yZXNfZnJlZSh2di0+dmlkZW9fZmgsIFJFU09VUkNFX0RNQTFfSFBTfFJFU09VUkNFX0RNQTJfQ0xQKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0KKwlmaC0+b3Yud2luID0gZm10LmZtdC53aW47CiAJdnYtPm92X2RhdGEgPSAmZmgtPm92OwogCiAJREVCX0QoKCIlZHglZCslZCslZCAlcyBmaWVsZD0lc1xuIiwKQEAgLTM1NSw1OCArMTk4LDYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHNhYTcxNDZfc3RvcF9wcmV2aWV3KTsKIAotc3RhdGljIGludCBzX2ZtdChzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKLXsKLQlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9IGZoLT5kZXY7Ci0Jc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOwotCi0JaW50IGVycjsKLQotCXN3aXRjaCAoZi0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQlERUJfRUUoKCJWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6IGRldjolcCwgZmg6JXBcbiIsZGV2LGZoKSk7Ci0JCWlmIChJU19DQVBUVVJFX0FDVElWRShmaCkgIT0gMCkgewotCQkJREVCX0VFKCgic3RyZWFtaW5nIGNhcHR1cmUgaXMgYWN0aXZlXG4iKSk7Ci0JCQlyZXR1cm4gLUVCVVNZOwotCQl9Ci0JCWVyciA9IHRyeV9mbXQoZmgsZik7Ci0JCWlmICgwICE9IGVycikKLQkJCXJldHVybiBlcnI7Ci0JCWZoLT52aWRlb19mbXQgPSBmLT5mbXQucGl4OwotCQlERUJfRUUoKCJzZXQgdG8gcGl4ZWxmb3JtYXQgJyU0LjRzJ1xuIiwoY2hhciAqKSZmaC0+dmlkZW9fZm10LnBpeGVsZm9ybWF0KSk7Ci0JCXJldHVybiAwOwotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgotCQlERUJfRUUoKCJWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6IGRldjolcCwgZmg6JXBcbiIsZGV2LGZoKSk7Ci0JCWVyciA9IHRyeV93aW4oZGV2LCZmLT5mbXQud2luKTsKLQkJaWYgKDAgIT0gZXJyKQotCQkJcmV0dXJuIGVycjsKLQkJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKLQkJZmgtPm92LndpbiAgICA9IGYtPmZtdC53aW47Ci0JCWZoLT5vdi5uY2xpcHMgPSBmLT5mbXQud2luLmNsaXBjb3VudDsKLQkJaWYgKGZoLT5vdi5uY2xpcHMgPiAxNikKLQkJCWZoLT5vdi5uY2xpcHMgPSAxNjsKLQkJaWYgKGNvcHlfZnJvbV91c2VyKGZoLT5vdi5jbGlwcyxmLT5mbXQud2luLmNsaXBzLHNpemVvZihzdHJ1Y3QgdjRsMl9jbGlwKSpmaC0+b3YubmNsaXBzKSkgewotCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwotCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCX0KLQotCQkvKiBmaC0+b3YuZmggaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHdlIGhhdmUgdmFsaWQgb3ZlcmxheSBpbmZvcm1hdGlvbnMsIHRvbyAqLwotCQlmaC0+b3YuZmggPSBmaDsKLQotCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7Ci0KLQkJLyogY2hlY2sgaWYgb3VyIGN1cnJlbnQgb3ZlcmxheSBpcyBhY3RpdmUgKi8KLQkJaWYgKElTX09WRVJMQVlfQUNUSVZFKGZoKSAhPSAwKSB7Ci0JCQlzYWE3MTQ2X3N0b3BfcHJldmlldyhmaCk7Ci0JCQlzYWE3MTQ2X3N0YXJ0X3ByZXZpZXcoZmgpOwotCQl9Ci0JCXJldHVybiAwOwotCWRlZmF1bHQ6Ci0JCURFQl9EKCgidW5rbm93biBmb3JtYXQgdHlwZSAnJWQnXG4iLGYtPnR5cGUpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAvKiBkZXZpY2UgY29udHJvbHMgKi8KIApAQCAtNDE5LDYgKzIxMCw3IEBACiAJCS5zdGVwCQk9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlCT0gMTI4LAogCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkuZmxhZ3MgCQk9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUiwKIAl9LHsKIAkJLmlkCQk9IFY0TDJfQ0lEX0NPTlRSQVNULAogCQkubmFtZQkJPSAiQ29udHJhc3QiLApAQCAtNDI3LDYgKzIxOSw3IEBACiAJCS5zdGVwCQk9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlCT0gNjQsCiAJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5mbGFncyAJCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSLAogCX0sewogCQkuaWQJCT0gVjRMMl9DSURfU0FUVVJBVElPTiwKIAkJLm5hbWUJCT0gIlNhdHVyYXRpb24iLApAQCAtNDM1LDE1ICsyMjgsMTYgQEAKIAkJLnN0ZXAJCT0gMSwKIAkJLmRlZmF1bHRfdmFsdWUJPSA2NCwKIAkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLmZsYWdzIAkJPSBWNEwyX0NUUkxfRkxBR19TTElERVIsCiAJfSx7CiAJCS5pZAkJPSBWNEwyX0NJRF9WRkxJUCwKLQkJLm5hbWUJCT0gIlZlcnRpY2FsIGZsaXAiLAorCQkubmFtZQkJPSAiVmVydGljYWwgRmxpcCIsCiAJCS5taW5pbXVtCT0gMCwKIAkJLm1heGltdW0JPSAxLAogCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAogCX0sewogCQkuaWQJCT0gVjRMMl9DSURfSEZMSVAsCi0JCS5uYW1lCQk9ICJIb3Jpem9udGFsIGZsaXAiLAorCQkubmFtZQkJPSAiSG9yaXpvbnRhbCBGbGlwIiwKIAkJLm1pbmltdW0JPSAwLAogCQkubWF4aW11bQk9IDEsCiAJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCkBAIC00NjMsMTMyICsyNTcsNiBAQAogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW50IGdldF9jb250cm9sKHN0cnVjdCBzYWE3MTQ2X2ZoICpmaCwgc3RydWN0IHY0bDJfY29udHJvbCAqYykKLXsKLQlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9IGZoLT5kZXY7Ci0Jc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOwotCi0JY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsKiBjdHJsOwotCXUzMiB2YWx1ZSA9IDA7Ci0KLQljdHJsID0gY3RybF9ieV9pZChjLT5pZCk7Ci0JaWYgKE5VTEwgPT0gY3RybCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0Jc3dpdGNoIChjLT5pZCkgewotCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLQkJdmFsdWUgPSBzYWE3MTQ2X3JlYWQoZGV2LCBCQ1NfQ1RSTCk7Ci0JCWMtPnZhbHVlID0gMHhmZiAmICh2YWx1ZSA+PiAyNCk7Ci0JCURFQl9EKCgiVjRMMl9DSURfQlJJR0hUTkVTUzogJWRcbiIsYy0+dmFsdWUpKTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJdmFsdWUgPSBzYWE3MTQ2X3JlYWQoZGV2LCBCQ1NfQ1RSTCk7Ci0JCWMtPnZhbHVlID0gMHg3ZiAmICh2YWx1ZSA+PiAxNik7Ci0JCURFQl9EKCgiVjRMMl9DSURfQ09OVFJBU1Q6ICVkXG4iLGMtPnZhbHVlKSk7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKLQkJdmFsdWUgPSBzYWE3MTQ2X3JlYWQoZGV2LCBCQ1NfQ1RSTCk7Ci0JCWMtPnZhbHVlID0gMHg3ZiAmICh2YWx1ZSA+PiAwKTsKLQkJREVCX0QoKCJWNEwyX0NJRF9TQVRVUkFUSU9OOiAlZFxuIixjLT52YWx1ZSkpOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX1ZGTElQOgotCQljLT52YWx1ZSA9IHZ2LT52ZmxpcDsKLQkJREVCX0QoKCJWNEwyX0NJRF9WRkxJUDogJWRcbiIsYy0+dmFsdWUpKTsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX0NJRF9IRkxJUDoKLQkJYy0+dmFsdWUgPSB2di0+aGZsaXA7Ci0JCURFQl9EKCgiVjRMMl9DSURfSEZMSVA6ICVkXG4iLGMtPnZhbHVlKSk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNldF9jb250cm9sKHN0cnVjdCBzYWE3MTQ2X2ZoICpmaCwgc3RydWN0IHY0bDJfY29udHJvbCAqYykKLXsKLQlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9IGZoLT5kZXY7Ci0Jc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOwotCi0JY29uc3Qgc3RydWN0IHY0bDJfcXVlcnljdHJsKiBjdHJsOwotCi0JY3RybCA9IGN0cmxfYnlfaWQoYy0+aWQpOwotCWlmIChOVUxMID09IGN0cmwpIHsKLQkJREVCX0QoKCJ1bmtub3duIGNvbnRyb2wgJWRcbiIsYy0+aWQpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKLQotCXN3aXRjaCAoY3RybC0+dHlwZSkgewotCWNhc2UgVjRMMl9DVFJMX1RZUEVfQk9PTEVBTjoKLQljYXNlIFY0TDJfQ1RSTF9UWVBFX01FTlU6Ci0JY2FzZSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOgotCQlpZiAoYy0+dmFsdWUgPCBjdHJsLT5taW5pbXVtKQotCQkJYy0+dmFsdWUgPSBjdHJsLT5taW5pbXVtOwotCQlpZiAoYy0+dmFsdWUgPiBjdHJsLT5tYXhpbXVtKQotCQkJYy0+dmFsdWUgPSBjdHJsLT5tYXhpbXVtOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQkvKiBub3RoaW5nICovOwotCX07Ci0KLQlzd2l0Y2ggKGMtPmlkKSB7Ci0JY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOiB7Ci0JCXUzMiB2YWx1ZSA9IHNhYTcxNDZfcmVhZChkZXYsIEJDU19DVFJMKTsKLQkJdmFsdWUgJj0gMHgwMGZmZmZmZjsKLQkJdmFsdWUgfD0gKGMtPnZhbHVlIDw8IDI0KTsKLQkJc2FhNzE0Nl93cml0ZShkZXYsIEJDU19DVFJMLCB2YWx1ZSk7Ci0JCXNhYTcxNDZfd3JpdGUoZGV2LCBNQzIsIE1BU0tfMjIgfCBNQVNLXzA2ICk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOiB7Ci0JCXUzMiB2YWx1ZSA9IHNhYTcxNDZfcmVhZChkZXYsIEJDU19DVFJMKTsKLQkJdmFsdWUgJj0gMHhmZjAwZmZmZjsKLQkJdmFsdWUgfD0gKGMtPnZhbHVlIDw8IDE2KTsKLQkJc2FhNzE0Nl93cml0ZShkZXYsIEJDU19DVFJMLCB2YWx1ZSk7Ci0JCXNhYTcxNDZfd3JpdGUoZGV2LCBNQzIsIE1BU0tfMjIgfCBNQVNLXzA2ICk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046IHsKLQkJdTMyIHZhbHVlID0gc2FhNzE0Nl9yZWFkKGRldiwgQkNTX0NUUkwpOwotCQl2YWx1ZSAmPSAweGZmZmZmZjAwOwotCQl2YWx1ZSB8PSAoYy0+dmFsdWUgPDwgMCk7Ci0JCXNhYTcxNDZfd3JpdGUoZGV2LCBCQ1NfQ1RSTCwgdmFsdWUpOwotCQlzYWE3MTQ2X3dyaXRlKGRldiwgTUMyLCBNQVNLXzIyIHwgTUFTS18wNiApOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWNEwyX0NJRF9IRkxJUDoKLQkJLyogZml4bWU6IHdlIGNhbiBzdXBwb3J0IGNoYW5naW5nIFZGTElQIGFuZCBIRkxJUCBoZXJlLi4uICovCi0JCWlmIChJU19DQVBUVVJFX0FDVElWRShmaCkgIT0gMCkgewotCQkJREVCX0QoKCJWNEwyX0NJRF9IRkxJUCB3aGlsZSBhY3RpdmUgY2FwdHVyZS5cbiIpKTsKLQkJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXZ2LT5oZmxpcCA9IGMtPnZhbHVlOwotCQlicmVhazsKLQljYXNlIFY0TDJfQ0lEX1ZGTElQOgotCQlpZiAoSVNfQ0FQVFVSRV9BQ1RJVkUoZmgpICE9IDApIHsKLQkJCURFQl9EKCgiVjRMMl9DSURfVkZMSVAgd2hpbGUgYWN0aXZlIGNhcHR1cmUuXG4iKSk7Ci0JCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQl2di0+dmZsaXAgPSBjLT52YWx1ZTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDogewotCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQl9Ci0JbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwotCi0JaWYgKElTX09WRVJMQVlfQUNUSVZFKGZoKSAhPSAwKSB7Ci0JCXNhYTcxNDZfc3RvcF9wcmV2aWV3KGZoKTsKLQkJc2FhNzE0Nl9zdGFydF9wcmV2aWV3KGZoKTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIC8qIGNvbW1vbiBwYWdldGFibGUgZnVuY3Rpb25zICovCiAKQEAgLTgyOSwyMzEgKzQ5Nyw0NDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyoKLSAqIFRoaXMgZnVuY3Rpb24gaXMgX25vdF8gY2FsbGVkIGRpcmVjdGx5LCBidXQgZnJvbQotICogdmlkZW9fZ2VuZXJpY19pb2N0bCAoYW5kIG1heWJlIG90aGVycykuICB1c2Vyc3BhY2UKLSAqIGNvcHlpbmcgaXMgZG9uZSBhbHJlYWR5LCBhcmcgaXMgYSBrZXJuZWwgcG9pbnRlci4KLSAqLwotCi1sb25nIHNhYTcxNDZfdmlkZW9fZG9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQogewotCXN0cnVjdCBzYWE3MTQ2X2ZoICpmaCAgPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0Jc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCisJc3RyY3B5KChjaGFyICopY2FwLT5kcml2ZXIsICJzYWE3MTQ2IHY0bDIiKTsKKwlzdHJsY3B5KChjaGFyICopY2FwLT5jYXJkLCBkZXYtPmV4dC0+bmFtZSwgc2l6ZW9mKGNhcC0+Y2FyZCkpOworCXNwcmludGYoKGNoYXIgKiljYXAtPmJ1c19pbmZvLCAiUENJOiVzIiwgcGNpX25hbWUoZGV2LT5wY2kpKTsKKwljYXAtPnZlcnNpb24gPSBTQUE3MTQ2X1ZFUlNJT05fQ09ERTsKKwljYXAtPmNhcGFiaWxpdGllcyA9CisJCVY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAorCQlWNEwyX0NBUF9WSURFT19PVkVSTEFZIHwKKwkJVjRMMl9DQVBfUkVBRFdSSVRFIHwKKwkJVjRMMl9DQVBfU1RSRUFNSU5HOworCWNhcC0+Y2FwYWJpbGl0aWVzIHw9IGRldi0+ZXh0X3Z2X2RhdGEtPmNhcGFiaWxpdGllczsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19mYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgKmZiKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OwogCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKIAotCWxvbmcgZXJyID0gMDsKLQlpbnQgcmVzdWx0ID0gMCwgZWUgPSAwOworCSpmYiA9IHZ2LT5vdl9mYjsKKwlmYi0+Y2FwYWJpbGl0eSA9IFY0TDJfRkJVRl9DQVBfTElTVF9DTElQUElORzsKKwlyZXR1cm4gMDsKK30KIAotCXN0cnVjdCBzYWE3MTQ2X3VzZV9vcHMgKm9wczsKLQlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnE7CitzdGF0aWMgaW50IHZpZGlvY19zX2ZidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqZmIpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOworCXN0cnVjdCBzYWE3MTQ2X2Zvcm1hdCAqZm10OwogCi0JLyogY2hlY2sgaWYgZXh0ZW5zaW9uIGhhbmRsZXMgdGhlIGNvbW1hbmQgKi8KLQlmb3IoZWUgPSAwOyBkZXYtPmV4dF92dl9kYXRhLT5pb2N0bHNbZWVdLmZsYWdzICE9IDA7IGVlKyspIHsKLQkJaWYoIGNtZCA9PSBkZXYtPmV4dF92dl9kYXRhLT5pb2N0bHNbZWVdLmNtZCApCi0JCQlicmVhazsKLQl9CisJREVCX0VFKCgiVklESU9DX1NfRkJVRlxuIikpOwogCi0JaWYoIDAgIT0gKGRldi0+ZXh0X3Z2X2RhdGEtPmlvY3Rsc1tlZV0uZmxhZ3MgJiBTQUE3MTQ2X0VYQ0xVU0lWRSkgKSB7Ci0JCURFQl9EKCgiZXh0ZW5zaW9uIGhhbmRsZXMgaW9jdGwgZXhjbHVzaXZlLlxuIikpOwotCQlyZXN1bHQgPSBkZXYtPmV4dF92dl9kYXRhLT5pb2N0bChmaCwgY21kLCBhcmcpOwotCQlyZXR1cm4gcmVzdWx0OwotCX0KLQlpZiggMCAhPSAoZGV2LT5leHRfdnZfZGF0YS0+aW9jdGxzW2VlXS5mbGFncyAmIFNBQTcxNDZfQkVGT1JFKSApIHsKLQkJREVCX0QoKCJleHRlbnNpb24gaGFuZGxlcyBpb2N0bCBiZWZvcmUuXG4iKSk7Ci0JCXJlc3VsdCA9IGRldi0+ZXh0X3Z2X2RhdGEtPmlvY3RsKGZoLCBjbWQsIGFyZyk7Ci0JCWlmKCAtRUFHQUlOICE9IHJlc3VsdCApIHsKLQkJCXJldHVybiByZXN1bHQ7CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pICYmICFjYXBhYmxlKENBUF9TWVNfUkFXSU8pKQorCQlyZXR1cm4gLUVQRVJNOworCisJLyogY2hlY2sgYXJncyAqLworCWZtdCA9IGZvcm1hdF9ieV9mb3VyY2MoZGV2LCBmYi0+Zm10LnBpeGVsZm9ybWF0KTsKKwlpZiAoTlVMTCA9PSBmbXQpCisJCXJldHVybiAtRUlOVkFMOworCisJLyogcGxhbmFyIGZvcm1hdHMgYXJlIG5vdCBhbGxvd2VkIGZvciBvdmVybGF5IHZpZGVvLCBjbGlwcGluZyBhbmQgdmlkZW8gZG1hIHdvdWxkIGNsYXNoICovCisJaWYgKGZtdC0+ZmxhZ3MgJiBGT1JNQVRfSVNfUExBTkFSKQorCQlERUJfUygoInBsYW5hciBwaXhlbGZvcm1hdCAnJTQuNHMnIG5vdCBhbGxvd2VkIGZvciBvdmVybGF5XG4iLAorCQkJCQkoY2hhciAqKSZmbXQtPnBpeGVsZm9ybWF0KSk7CisKKwkvKiBjaGVjayBpZiBvdmVybGF5IGlzIHJ1bm5pbmcgKi8KKwlpZiAoSVNfT1ZFUkxBWV9BQ1RJVkUoZmgpICE9IDApIHsKKwkJaWYgKHZ2LT52aWRlb19maCAhPSBmaCkgeworCQkJREVCX0QoKCJyZWZ1c2luZyB0byBjaGFuZ2UgZnJhbWVidWZmZXIgaW5mb3JtYXRpb25zIHdoaWxlIG92ZXJsYXkgaXMgYWN0aXZlIGluIGFub3RoZXIgb3Blbi5cbiIpKTsKKwkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAl9CiAKLQkvKiBmaXhtZTogYWRkIGhhbmRsZSAiYWZ0ZXIiIGNhc2UgKGlzIGl0IHN0aWxsIG5lZWRlZD8pICovCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAotCXN3aXRjaCAoZmgtPnR5cGUpIHsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTogewotCQlvcHMgPSAmc2FhNzE0Nl92aWRlb191b3BzOwotCQlxID0gJmZoLT52aWRlb19xOworCS8qIG9rLCBhY2NlcHQgaXQgKi8KKwl2di0+b3ZfZmIgPSAqZmI7CisJdnYtPm92X2ZtdCA9IGZtdDsKKwlpZiAoMCA9PSB2di0+b3ZfZmIuZm10LmJ5dGVzcGVybGluZSkKKwkJdnYtPm92X2ZiLmZtdC5ieXRlc3BlcmxpbmUgPQorCQkJdnYtPm92X2ZiLmZtdC53aWR0aCAqIGZtdC0+ZGVwdGggLyA4OworCisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm10ZGVzYyAqZikKK3sKKwlpZiAoZi0+aW5kZXggPj0gTlVNX0ZPUk1BVFMpCisJCXJldHVybiAtRUlOVkFMOworCXN0cmxjcHkoKGNoYXIgKilmLT5kZXNjcmlwdGlvbiwgZm9ybWF0c1tmLT5pbmRleF0ubmFtZSwKKwkJCXNpemVvZihmLT5kZXNjcmlwdGlvbikpOworCWYtPnBpeGVsZm9ybWF0ID0gZm9ybWF0c1tmLT5pbmRleF0ucGl4ZWxmb3JtYXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqYykKK3sKKwljb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmN0cmw7CisKKwlpZiAoKGMtPmlkIDwgIFY0TDJfQ0lEX0JBU0UgfHwKKwkgICAgIGMtPmlkID49IFY0TDJfQ0lEX0xBU1RQMSkgJiYKKwkgICAgKGMtPmlkIDwgIFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSB8fAorCSAgICAgYy0+aWQgPj0gVjRMMl9DSURfUFJJVkFURV9MQVNUUDEpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWN0cmwgPSBjdHJsX2J5X2lkKGMtPmlkKTsKKwlpZiAoY3RybCA9PSBOVUxMKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCURFQl9FRSgoIlZJRElPQ19RVUVSWUNUUkw6IGlkOiVkXG4iLCBjLT5pZCkpOworCSpjID0gKmN0cmw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmMpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOworCWNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqY3RybDsKKwl1MzIgdmFsdWUgPSAwOworCisJY3RybCA9IGN0cmxfYnlfaWQoYy0+aWQpOworCWlmIChOVUxMID09IGN0cmwpCisJCXJldHVybiAtRUlOVkFMOworCXN3aXRjaCAoYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCXZhbHVlID0gc2FhNzE0Nl9yZWFkKGRldiwgQkNTX0NUUkwpOworCQljLT52YWx1ZSA9IDB4ZmYgJiAodmFsdWUgPj4gMjQpOworCQlERUJfRCgoIlY0TDJfQ0lEX0JSSUdIVE5FU1M6ICVkXG4iLCBjLT52YWx1ZSkpOwogCQlicmVhazsKLQkJfQotCWNhc2UgVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTogewotCQlvcHMgPSAmc2FhNzE0Nl92YmlfdW9wczsKLQkJcSA9ICZmaC0+dmJpX3E7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJdmFsdWUgPSBzYWE3MTQ2X3JlYWQoZGV2LCBCQ1NfQ1RSTCk7CisJCWMtPnZhbHVlID0gMHg3ZiAmICh2YWx1ZSA+PiAxNik7CisJCURFQl9EKCgiVjRMMl9DSURfQ09OVFJBU1Q6ICVkXG4iLCBjLT52YWx1ZSkpOwogCQlicmVhazsKLQkJfQorCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJdmFsdWUgPSBzYWE3MTQ2X3JlYWQoZGV2LCBCQ1NfQ1RSTCk7CisJCWMtPnZhbHVlID0gMHg3ZiAmICh2YWx1ZSA+PiAwKTsKKwkJREVCX0QoKCJWNEwyX0NJRF9TQVRVUkFUSU9OOiAlZFxuIiwgYy0+dmFsdWUpKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9WRkxJUDoKKwkJYy0+dmFsdWUgPSB2di0+dmZsaXA7CisJCURFQl9EKCgiVjRMMl9DSURfVkZMSVA6ICVkXG4iLCBjLT52YWx1ZSkpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0hGTElQOgorCQljLT52YWx1ZSA9IHZ2LT5oZmxpcDsKKwkJREVCX0QoKCJWNEwyX0NJRF9IRkxJUDogJWRcbiIsIGMtPnZhbHVlKSk7CisJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCUJVRygpOwotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKKwljb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmN0cmw7CisKKwljdHJsID0gY3RybF9ieV9pZChjLT5pZCk7CisJaWYgKE5VTEwgPT0gY3RybCkgeworCQlERUJfRCgoInVua25vd24gY29udHJvbCAlZFxuIiwgYy0+aWQpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFZJRElPQ19RVUVSWUNBUDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKLQkJbWVtc2V0KGNhcCwwLHNpemVvZigqY2FwKSk7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAotCQlERUJfRUUoKCJWSURJT0NfUVVFUllDQVBcbiIpKTsKLQotCQlzdHJjcHkoKGNoYXIgKiljYXAtPmRyaXZlciwgInNhYTcxNDYgdjRsMiIpOwotCQlzdHJsY3B5KChjaGFyICopY2FwLT5jYXJkLCBkZXYtPmV4dC0+bmFtZSwgc2l6ZW9mKGNhcC0+Y2FyZCkpOwotCQlzcHJpbnRmKChjaGFyICopY2FwLT5idXNfaW5mbywiUENJOiVzIiwgcGNpX25hbWUoZGV2LT5wY2kpKTsKLQkJY2FwLT52ZXJzaW9uID0gU0FBNzE0Nl9WRVJTSU9OX0NPREU7Ci0JCWNhcC0+Y2FwYWJpbGl0aWVzID0KLQkJCVY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAotCQkJVjRMMl9DQVBfVklERU9fT1ZFUkxBWSB8Ci0JCQlWNEwyX0NBUF9SRUFEV1JJVEUgfAotCQkJVjRMMl9DQVBfU1RSRUFNSU5HOwotCQljYXAtPmNhcGFiaWxpdGllcyB8PSBkZXYtPmV4dF92dl9kYXRhLT5jYXBhYmlsaXRpZXM7Ci0JCXJldHVybiAwOworCXN3aXRjaCAoY3RybC0+dHlwZSkgeworCWNhc2UgVjRMMl9DVFJMX1RZUEVfQk9PTEVBTjoKKwljYXNlIFY0TDJfQ1RSTF9UWVBFX01FTlU6CisJY2FzZSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSOgorCQlpZiAoYy0+dmFsdWUgPCBjdHJsLT5taW5pbXVtKQorCQkJYy0+dmFsdWUgPSBjdHJsLT5taW5pbXVtOworCQlpZiAoYy0+dmFsdWUgPiBjdHJsLT5tYXhpbXVtKQorCQkJYy0+dmFsdWUgPSBjdHJsLT5tYXhpbXVtOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBub3RoaW5nICovOwogCX0KLQljYXNlIFZJRElPQ19HX0ZCVUY6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqZmIgPSBhcmc7CiAKLQkJREVCX0VFKCgiVklESU9DX0dfRkJVRlxuIikpOwotCi0JCSpmYiA9IHZ2LT5vdl9mYjsKLQkJZmItPmNhcGFiaWxpdHkgPSBWNEwyX0ZCVUZfQ0FQX0xJU1RfQ0xJUFBJTkc7Ci0JCXJldHVybiAwOworCXN3aXRjaCAoYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6IHsKKwkJdTMyIHZhbHVlID0gc2FhNzE0Nl9yZWFkKGRldiwgQkNTX0NUUkwpOworCQl2YWx1ZSAmPSAweDAwZmZmZmZmOworCQl2YWx1ZSB8PSAoYy0+dmFsdWUgPDwgMjQpOworCQlzYWE3MTQ2X3dyaXRlKGRldiwgQkNTX0NUUkwsIHZhbHVlKTsKKwkJc2FhNzE0Nl93cml0ZShkZXYsIE1DMiwgTUFTS18yMiB8IE1BU0tfMDYpOworCQlicmVhazsKIAl9Ci0JY2FzZSBWSURJT0NfU19GQlVGOgotCXsKLQkJc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgKmZiID0gYXJnOwotCQlzdHJ1Y3Qgc2FhNzE0Nl9mb3JtYXQgKmZtdDsKLQotCQlERUJfRUUoKCJWSURJT0NfU19GQlVGXG4iKSk7Ci0KLQkJaWYoIWNhcGFibGUoQ0FQX1NZU19BRE1JTikgJiYKLQkJICAgIWNhcGFibGUoQ0FQX1NZU19SQVdJTykpCi0JCQlyZXR1cm4gLUVQRVJNOwotCi0JCS8qIGNoZWNrIGFyZ3MgKi8KLQkJZm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhkZXYsZmItPmZtdC5waXhlbGZvcm1hdCk7Ci0JCWlmIChOVUxMID09IGZtdCkgewotCQkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDogeworCQl1MzIgdmFsdWUgPSBzYWE3MTQ2X3JlYWQoZGV2LCBCQ1NfQ1RSTCk7CisJCXZhbHVlICY9IDB4ZmYwMGZmZmY7CisJCXZhbHVlIHw9IChjLT52YWx1ZSA8PCAxNik7CisJCXNhYTcxNDZfd3JpdGUoZGV2LCBCQ1NfQ1RSTCwgdmFsdWUpOworCQlzYWE3MTQ2X3dyaXRlKGRldiwgTUMyLCBNQVNLXzIyIHwgTUFTS18wNik7CisJCWJyZWFrOworCX0KKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046IHsKKwkJdTMyIHZhbHVlID0gc2FhNzE0Nl9yZWFkKGRldiwgQkNTX0NUUkwpOworCQl2YWx1ZSAmPSAweGZmZmZmZjAwOworCQl2YWx1ZSB8PSAoYy0+dmFsdWUgPDwgMCk7CisJCXNhYTcxNDZfd3JpdGUoZGV2LCBCQ1NfQ1RSTCwgdmFsdWUpOworCQlzYWE3MTQ2X3dyaXRlKGRldiwgTUMyLCBNQVNLXzIyIHwgTUFTS18wNik7CisJCWJyZWFrOworCX0KKwljYXNlIFY0TDJfQ0lEX0hGTElQOgorCQkvKiBmaXhtZTogd2UgY2FuIHN1cHBvcnQgY2hhbmdpbmcgVkZMSVAgYW5kIEhGTElQIGhlcmUuLi4gKi8KKwkJaWYgKElTX0NBUFRVUkVfQUNUSVZFKGZoKSAhPSAwKSB7CisJCQlERUJfRCgoIlY0TDJfQ0lEX0hGTElQIHdoaWxlIGFjdGl2ZSBjYXB0dXJlLlxuIikpOworCQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQotCi0JCS8qIHBsYW5hciBmb3JtYXRzIGFyZSBub3QgYWxsb3dlZCBmb3Igb3ZlcmxheSB2aWRlbywgY2xpcHBpbmcgYW5kIHZpZGVvIGRtYSB3b3VsZCBjbGFzaCAqLwotCQlpZiAoMCAhPSAoZm10LT5mbGFncyAmIEZPUk1BVF9JU19QTEFOQVIpKSB7Ci0JCQlERUJfUygoInBsYW5hciBwaXhlbGZvcm1hdCAnJTQuNHMnIG5vdCBhbGxvd2VkIGZvciBvdmVybGF5XG4iLChjaGFyICopJmZtdC0+cGl4ZWxmb3JtYXQpKTsKKwkJdnYtPmhmbGlwID0gYy0+dmFsdWU7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfVkZMSVA6CisJCWlmIChJU19DQVBUVVJFX0FDVElWRShmaCkgIT0gMCkgeworCQkJREVCX0QoKCJWNEwyX0NJRF9WRkxJUCB3aGlsZSBhY3RpdmUgY2FwdHVyZS5cbiIpKTsKKwkJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwkJCXJldHVybiAtRUJVU1k7CiAJCX0KLQotCQkvKiBjaGVjayBpZiBvdmVybGF5IGlzIHJ1bm5pbmcgKi8KLQkJaWYgKElTX09WRVJMQVlfQUNUSVZFKGZoKSAhPSAwKSB7Ci0JCQlpZiAodnYtPnZpZGVvX2ZoICE9IGZoKSB7Ci0JCQkJREVCX0QoKCJyZWZ1c2luZyB0byBjaGFuZ2UgZnJhbWVidWZmZXIgaW5mb3JtYXRpb25zIHdoaWxlIG92ZXJsYXkgaXMgYWN0aXZlIGluIGFub3RoZXIgb3Blbi5cbiIpKTsKLQkJCQlyZXR1cm4gLUVCVVNZOwotCQkJfQotCQl9Ci0KLQkJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKLQotCQkvKiBvaywgYWNjZXB0IGl0ICovCi0JCXZ2LT5vdl9mYiA9ICpmYjsKLQkJdnYtPm92X2ZtdCA9IGZtdDsKLQkJaWYgKDAgPT0gdnYtPm92X2ZiLmZtdC5ieXRlc3BlcmxpbmUpCi0JCQl2di0+b3ZfZmIuZm10LmJ5dGVzcGVybGluZSA9Ci0JCQkJdnYtPm92X2ZiLmZtdC53aWR0aCpmbXQtPmRlcHRoLzg7Ci0KKwkJdnYtPnZmbGlwID0gYy0+dmFsdWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CiAJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKLQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWNhc2UgVklESU9DX0VOVU1fRk1UOgotCXsKLQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZiA9IGFyZzsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAKLQkJc3dpdGNoIChmLT50eXBlKSB7Ci0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQkJCWlmIChmLT5pbmRleCA+PSBOVU1fRk9STUFUUykKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCXN0cmxjcHkoKGNoYXIgKilmLT5kZXNjcmlwdGlvbiwgZm9ybWF0c1tmLT5pbmRleF0ubmFtZSwKLQkJCQkJc2l6ZW9mKGYtPmRlc2NyaXB0aW9uKSk7Ci0JCQlmLT5waXhlbGZvcm1hdCA9IGZvcm1hdHNbZi0+aW5kZXhdLnBpeGVsZm9ybWF0OwotCQkJZi0+ZmxhZ3MgPSAwOwotCQkJbWVtc2V0KGYtPnJlc2VydmVkLCAwLCBzaXplb2YoZi0+cmVzZXJ2ZWQpKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKElTX09WRVJMQVlfQUNUSVZFKGZoKSAhPSAwKSB7CisJCXNhYTcxNDZfc3RvcF9wcmV2aWV3KGZoKTsKKwkJc2FhNzE0Nl9zdGFydF9wcmV2aWV3KGZoKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfcGFybShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCXN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKnBhcm0pCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOworCisJcGFybS0+cGFybS5jYXB0dXJlLnJlYWRidWZmZXJzID0gMTsKKwl2NGwyX3ZpZGVvX3N0ZF9mcmFtZV9wZXJpb2QodnYtPnN0YW5kYXJkLT5pZCwKKwkJCQkgICAgJnBhcm0tPnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCWYtPmZtdC5waXggPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT52aWRlb19mbXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZm10X3ZpZF9vdmVybGF5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCWYtPmZtdC53aW4gPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5vdi53aW47CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZm10X3ZiaV9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJZi0+Zm10LnZiaSA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPnZiaV9mbXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7CisJc3RydWN0IHNhYTcxNDZfZm9ybWF0ICpmbXQ7CisJZW51bSB2NGwyX2ZpZWxkIGZpZWxkOworCWludCBtYXh3LCBtYXhoOworCWludCBjYWxjX2JwbDsKKworCURFQl9FRSgoIlY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTogZGV2OiVwLCBmaDolcFxuIiwgZGV2LCBmaCkpOworCisJZm10ID0gZm9ybWF0X2J5X2ZvdXJjYyhkZXYsIGYtPmZtdC5waXgucGl4ZWxmb3JtYXQpOworCWlmIChOVUxMID09IGZtdCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmaWVsZCA9IGYtPmZtdC5waXguZmllbGQ7CisJbWF4dyAgPSB2di0+c3RhbmRhcmQtPmhfbWF4X291dDsKKwltYXhoICA9IHZ2LT5zdGFuZGFyZC0+dl9tYXhfb3V0OworCisJaWYgKFY0TDJfRklFTERfQU5ZID09IGZpZWxkKSB7CisJCWZpZWxkID0gKGYtPmZtdC5waXguaGVpZ2h0ID4gbWF4aCAvIDIpCisJCQk/IFY0TDJfRklFTERfSU5URVJMQUNFRAorCQkJOiBWNEwyX0ZJRUxEX0JPVFRPTTsKKwl9CisJc3dpdGNoIChmaWVsZCkgeworCWNhc2UgVjRMMl9GSUVMRF9BTFRFUk5BVEU6CisJCXZ2LT5sYXN0X2ZpZWxkID0gVjRMMl9GSUVMRF9UT1A7CisJCW1heGggPSBtYXhoIC8gMjsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0ZJRUxEX1RPUDoKKwljYXNlIFY0TDJfRklFTERfQk9UVE9NOgorCQl2di0+bGFzdF9maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwkJbWF4aCA9IG1heGggLyAyOworCQlicmVhazsKKwljYXNlIFY0TDJfRklFTERfSU5URVJMQUNFRDoKKwkJdnYtPmxhc3RfZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCURFQl9EKCgibm8ga25vd24gZmllbGQgbW9kZSAnJWQnLlxuIiwgZmllbGQpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZi0+Zm10LnBpeC5maWVsZCA9IGZpZWxkOworCWlmIChmLT5mbXQucGl4LndpZHRoID4gbWF4dykKKwkJZi0+Zm10LnBpeC53aWR0aCA9IG1heHc7CisJaWYgKGYtPmZtdC5waXguaGVpZ2h0ID4gbWF4aCkKKwkJZi0+Zm10LnBpeC5oZWlnaHQgPSBtYXhoOworCisJY2FsY19icGwgPSAoZi0+Zm10LnBpeC53aWR0aCAqIGZtdC0+ZGVwdGgpIC8gODsKKworCWlmIChmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA8IGNhbGNfYnBsKQorCQlmLT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IGNhbGNfYnBsOworCisJaWYgKGYtPmZtdC5waXguYnl0ZXNwZXJsaW5lID4gKDIgKiBQQUdFX1NJWkUgKiBmbXQtPmRlcHRoKSAvIDgpIC8qIGFyYml0cmFyeSBjb25zdHJhaW50ICovCisJCWYtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gY2FsY19icGw7CisKKwlmLT5mbXQucGl4LnNpemVpbWFnZSA9IGYtPmZtdC5waXguYnl0ZXNwZXJsaW5lICogZi0+Zm10LnBpeC5oZWlnaHQ7CisJREVCX0QoKCJ3OiVkLCBoOiVkLCBieXRlc3BlcmxpbmU6JWQsIHNpemVpbWFnZTolZFxuIiwgZi0+Zm10LnBpeC53aWR0aCwKKwkJCWYtPmZtdC5waXguaGVpZ2h0LCBmLT5mbXQucGl4LmJ5dGVzcGVybGluZSwgZi0+Zm10LnBpeC5zaXplaW1hZ2UpKTsKKworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgdmlkaW9jX3RyeV9mbXRfdmlkX292ZXJsYXkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOworCXN0cnVjdCB2NGwyX3dpbmRvdyAqd2luID0gJmYtPmZtdC53aW47CisJZW51bSB2NGwyX2ZpZWxkIGZpZWxkOworCWludCBtYXh3LCBtYXhoOworCisJREVCX0VFKCgiZGV2OiVwXG4iLCBkZXYpKTsKKworCWlmIChOVUxMID09IHZ2LT5vdl9mYi5iYXNlKSB7CisJCURFQl9EKCgibm8gZmIgYmFzZSBzZXQuXG4iKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlpZiAoTlVMTCA9PSB2di0+b3ZfZm10KSB7CisJCURFQl9EKCgibm8gZmIgZm10IHNldC5cbiIpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICh3aW4tPncud2lkdGggPCA0OCB8fCB3aW4tPncuaGVpZ2h0IDwgMzIpIHsKKwkJREVCX0QoKCJtaW4gd2lkdGgvaGVpZ2h0LiAoJWQsJWQpXG4iLCB3aW4tPncud2lkdGgsIHdpbi0+dy5oZWlnaHQpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmICh3aW4tPmNsaXBjb3VudCA+IDE2KSB7CisJCURFQl9EKCgiY2xpcGNvdW50IHRvbyBiaWcuXG4iKSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWZpZWxkID0gd2luLT5maWVsZDsKKwltYXh3ICA9IHZ2LT5zdGFuZGFyZC0+aF9tYXhfb3V0OworCW1heGggID0gdnYtPnN0YW5kYXJkLT52X21heF9vdXQ7CisKKwlpZiAoVjRMMl9GSUVMRF9BTlkgPT0gZmllbGQpIHsKKwkJZmllbGQgPSAod2luLT53LmhlaWdodCA+IG1heGggLyAyKQorCQkJPyBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQKKwkJCTogVjRMMl9GSUVMRF9UT1A7CiAJCX0KLQotCQlERUJfRUUoKCJWSURJT0NfRU5VTV9GTVQ6IHR5cGU6JWQsIGluZGV4OiVkXG4iLGYtPnR5cGUsZi0+aW5kZXgpKTsKLQkJcmV0dXJuIDA7CisJc3dpdGNoIChmaWVsZCkgeworCWNhc2UgVjRMMl9GSUVMRF9UT1A6CisJY2FzZSBWNEwyX0ZJRUxEX0JPVFRPTToKKwljYXNlIFY0TDJfRklFTERfQUxURVJOQVRFOgorCQltYXhoID0gbWF4aCAvIDI7CisJCWJyZWFrOworCWNhc2UgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlERUJfRCgoIm5vIGtub3duIGZpZWxkIG1vZGUgJyVkJy5cbiIsIGZpZWxkKSk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KLQljYXNlIFZJRElPQ19RVUVSWUNUUkw6Ci0JewotCQljb25zdCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKmN0cmw7Ci0JCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqYyA9IGFyZzsKIAotCQlpZiAoKGMtPmlkIDwgIFY0TDJfQ0lEX0JBU0UgfHwKLQkJICAgICBjLT5pZCA+PSBWNEwyX0NJRF9MQVNUUDEpICYmCi0JCSAgICAoYy0+aWQgPCAgVjRMMl9DSURfUFJJVkFURV9CQVNFIHx8Ci0JCSAgICAgYy0+aWQgPj0gVjRMMl9DSURfUFJJVkFURV9MQVNUUDEpKQotCQkJcmV0dXJuIC1FSU5WQUw7CisJd2luLT5maWVsZCA9IGZpZWxkOworCWlmICh3aW4tPncud2lkdGggPiBtYXh3KQorCQl3aW4tPncud2lkdGggPSBtYXh3OworCWlmICh3aW4tPncuaGVpZ2h0ID4gbWF4aCkKKwkJd2luLT53LmhlaWdodCA9IG1heGg7CiAKLQkJY3RybCA9IGN0cmxfYnlfaWQoYy0+aWQpOwotCQlpZiggTlVMTCA9PSBjdHJsICkgewotCQkJcmV0dXJuIC1FSU5WQUw7Ci0vKgotCQkJYy0+ZmxhZ3MgPSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRDsKLQkJCXJldHVybiAwOwotKi8KLQkJfQorCXJldHVybiAwOworfQogCi0JCURFQl9FRSgoIlZJRElPQ19RVUVSWUNUUkw6IGlkOiVkXG4iLGMtPmlkKSk7Ci0JCSpjID0gKmN0cmw7Ci0JCXJldHVybiAwOworc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBzYWE3MTQ2X2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKKwlpbnQgZXJyOworCisJREVCX0VFKCgiVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOiBkZXY6JXAsIGZoOiVwXG4iLCBkZXYsIGZoKSk7CisJaWYgKElTX0NBUFRVUkVfQUNUSVZFKGZoKSAhPSAwKSB7CisJCURFQl9FRSgoInN0cmVhbWluZyBjYXB0dXJlIGlzIGFjdGl2ZVxuIikpOworCQlyZXR1cm4gLUVCVVNZOwogCX0KLQljYXNlIFZJRElPQ19HX0NUUkw6IHsKLQkJREVCX0VFKCgiVklESU9DX0dfQ1RSTFxuIikpOwotCQlyZXR1cm4gZ2V0X2NvbnRyb2woZmgsYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfU19DVFJMOgotCXsKLQkJREVCX0VFKCgiVklESU9DX1NfQ1RSTFxuIikpOwotCQllcnIgPSBzZXRfY29udHJvbChmaCxhcmcpOworCWVyciA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAoZmlsZSwgZmgsIGYpOworCWlmICgwICE9IGVycikKIAkJcmV0dXJuIGVycjsKKwlmaC0+dmlkZW9fZm10ID0gZi0+Zm10LnBpeDsKKwlERUJfRUUoKCJzZXQgdG8gcGl4ZWxmb3JtYXQgJyU0LjRzJ1xuIiwgKGNoYXIgKikmZmgtPnZpZGVvX2ZtdC5waXhlbGZvcm1hdCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfb3ZlcmxheShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBzYWE3MTQ2X2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKKwlpbnQgZXJyOworCisJREVCX0VFKCgiVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOiBkZXY6JXAsIGZoOiVwXG4iLCBkZXYsIGZoKSk7CisJZXJyID0gdmlkaW9jX3RyeV9mbXRfdmlkX292ZXJsYXkoZmlsZSwgZmgsIGYpOworCWlmICgwICE9IGVycikKKwkJcmV0dXJuIGVycjsKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCWZoLT5vdi53aW4gICAgPSBmLT5mbXQud2luOworCWZoLT5vdi5uY2xpcHMgPSBmLT5mbXQud2luLmNsaXBjb3VudDsKKwlpZiAoZmgtPm92Lm5jbGlwcyA+IDE2KQorCQlmaC0+b3YubmNsaXBzID0gMTY7CisJaWYgKGNvcHlfZnJvbV91c2VyKGZoLT5vdi5jbGlwcywgZi0+Zm10Lndpbi5jbGlwcywKKwkJCQlzaXplb2Yoc3RydWN0IHY0bDJfY2xpcCkgKiBmaC0+b3YubmNsaXBzKSkgeworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJCXJldHVybiAtRUZBVUxUOwogCX0KLQljYXNlIFZJRElPQ19HX1BBUk06Ci0JewotCQlzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJtID0gYXJnOwotCQlpZiggcGFybS0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgKSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQltZW1zZXQoJnBhcm0tPnBhcm0uY2FwdHVyZSwwLHNpemVvZihzdHJ1Y3QgdjRsMl9jYXB0dXJlcGFybSkpOwotCQlwYXJtLT5wYXJtLmNhcHR1cmUucmVhZGJ1ZmZlcnMgPSAxOwotCQkvLyBmaXhtZTogb25seSBmb3IgUEFMIQotCQlwYXJtLT5wYXJtLmNhcHR1cmUudGltZXBlcmZyYW1lLm51bWVyYXRvciA9IDE7Ci0JCXBhcm0tPnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUuZGVub21pbmF0b3IgPSAyNTsKLQkJcmV0dXJuIDA7CisKKwkvKiBmaC0+b3YuZmggaXMgdXNlZCB0byBpbmRpY2F0ZSB0aGF0IHdlIGhhdmUgdmFsaWQgb3ZlcmxheSBpbmZvcm1hdGlvbnMsIHRvbyAqLworCWZoLT5vdi5maCA9IGZoOworCisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCisJLyogY2hlY2sgaWYgb3VyIGN1cnJlbnQgb3ZlcmxheSBpcyBhY3RpdmUgKi8KKwlpZiAoSVNfT1ZFUkxBWV9BQ1RJVkUoZmgpICE9IDApIHsKKwkJc2FhNzE0Nl9zdG9wX3ByZXZpZXcoZmgpOworCQlzYWE3MTQ2X3N0YXJ0X3ByZXZpZXcoZmgpOwogCX0KLQljYXNlIFZJRElPQ19HX0ZNVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiA9IGFyZzsKLQkJREVCX0VFKCgiVklESU9DX0dfRk1UXG4iKSk7Ci0JCXJldHVybiBnX2ZtdChmaCxmKTsKLQl9Ci0JY2FzZSBWSURJT0NfU19GTVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYgPSBhcmc7Ci0JCURFQl9FRSgoIlZJRElPQ19TX0ZNVFxuIikpOwotCQlyZXR1cm4gc19mbXQoZmgsZik7Ci0JfQotCWNhc2UgVklESU9DX1RSWV9GTVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYgPSBhcmc7Ci0JCURFQl9FRSgoIlZJRElPQ19UUllfRk1UXG4iKSk7Ci0JCXJldHVybiB0cnlfZm10KGZoLGYpOwotCX0KLQljYXNlIFZJRElPQ19HX1NURDoKLQl7Ci0JCXY0bDJfc3RkX2lkICppZCA9IGFyZzsKLQkJREVCX0VFKCgiVklESU9DX0dfU1REXG4iKSk7Ci0JCSppZCA9IHZ2LT5zdGFuZGFyZC0+aWQ7Ci0JCXJldHVybiAwOwotCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB2NGwyX3N0ZF9pZCAqbm9ybSkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3Qgc2FhNzE0Nl92diAqdnYgPSBkZXYtPnZ2X2RhdGE7CisKKwkqbm9ybSA9IHZ2LT5zdGFuZGFyZC0+aWQ7CisJcmV0dXJuIDA7Cit9CisKIAkvKiB0aGUgc2FhNzE0NiBzdXBmaHJ0cyAodXNlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBzYWE3MTExYSBmb3IgZXhhbXBsZSkKIAkgICBQQUwgLyBOVFNDIC8gU0VDQU0uIGlmIHlvdXIgaGFyZHdhcmUgZG9lcyBub3QgKG9yIGRvZXMgbW9yZSkKIAkgICAtLSBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIGluIHlvdXIgZXh0ZW5zaW9uICovCisvKgogCWNhc2UgVklESU9DX0VOVU1TVEQ6CiAJewogCQlzdHJ1Y3QgdjRsMl9zdGFuZGFyZCAqZSA9IGFyZzsKQEAgLTEwNjYsMTYzICs5NDksMjQ2IEBACiAJCX0KIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWNhc2UgVklESU9DX1NfU1REOgotCXsKLQkJdjRsMl9zdGRfaWQgKmlkID0gYXJnOwotCQlpbnQgZm91bmQgPSAwOwotCQlpbnQgaTsKKwkqLwogCi0JCURFQl9FRSgoIlZJRElPQ19TX1NURFxuIikpOworc3RhdGljIGludCB2aWRpb2Nfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB2NGwyX3N0ZF9pZCAqaWQpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOworCWludCBmb3VuZCA9IDA7CisJaW50IGVyciwgaTsKIAotCQlpZiAoKHZ2LT52aWRlb19zdGF0dXMgJiBTVEFUVVNfQ0FQVFVSRSkgPT0gU1RBVFVTX0NBUFRVUkUpIHsKLQkJCURFQl9EKCgiY2Fubm90IGNoYW5nZSB2aWRlbyBzdGFuZGFyZCB3aGlsZSBzdHJlYW1pbmcgY2FwdHVyZSBpcyBhY3RpdmVcbiIpKTsKLQkJCXJldHVybiAtRUJVU1k7Ci0JCX0KKwlERUJfRUUoKCJWSURJT0NfU19TVERcbiIpKTsKIAotCQlpZiAoKHZ2LT52aWRlb19zdGF0dXMgJiBTVEFUVVNfT1ZFUkxBWSkgIT0gMCkgewotCQkJdnYtPm92X3N1c3BlbmQgPSB2di0+dmlkZW9fZmg7Ci0JCQllcnIgPSBzYWE3MTQ2X3N0b3BfcHJldmlldyh2di0+dmlkZW9fZmgpOyAvKiBzaWRlIGVmZmVjdDogdmlkZW9fc3RhdHVzIGlzIG5vdyAwLCB2aWRlb19maCBpcyBOVUxMICovCi0JCQlpZiAoMCAhPSBlcnIpIHsKLQkJCQlERUJfRCgoInN1c3BlbmRpbmcgdmlkZW8gZmFpbGVkLiBhYm9ydGluZ1xuIikpOwotCQkJCXJldHVybiBlcnI7Ci0JCQl9Ci0JCX0KLQotCQltdXRleF9sb2NrKCZkZXYtPmxvY2spOwotCi0JCWZvcihpID0gMDsgaSA8IGRldi0+ZXh0X3Z2X2RhdGEtPm51bV9zdGRzOyBpKyspCi0JCQlpZiAoKmlkICYgZGV2LT5leHRfdnZfZGF0YS0+c3Rkc1tpXS5pZCkKLQkJCQlicmVhazsKLQkJaWYgKGkgIT0gZGV2LT5leHRfdnZfZGF0YS0+bnVtX3N0ZHMpIHsKLQkJCXZ2LT5zdGFuZGFyZCA9ICZkZXYtPmV4dF92dl9kYXRhLT5zdGRzW2ldOwotCQkJaWYoIE5VTEwgIT0gZGV2LT5leHRfdnZfZGF0YS0+c3RkX2NhbGxiYWNrICkKLQkJCQlkZXYtPmV4dF92dl9kYXRhLT5zdGRfY2FsbGJhY2soZGV2LCB2di0+c3RhbmRhcmQpOwotCQkJZm91bmQgPSAxOwotCQl9Ci0KLQkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwotCi0JCWlmICh2di0+b3Zfc3VzcGVuZCAhPSBOVUxMKSB7Ci0JCQlzYWE3MTQ2X3N0YXJ0X3ByZXZpZXcodnYtPm92X3N1c3BlbmQpOwotCQkJdnYtPm92X3N1c3BlbmQgPSBOVUxMOwotCQl9Ci0KLQkJaWYoIDAgPT0gZm91bmQgKSB7Ci0JCQlERUJfRUUoKCJWSURJT0NfU19TVEQ6IHN0YW5kYXJkIG5vdCBmb3VuZC5cbiIpKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJREVCX0VFKCgiVklESU9DX1NfU1REOiBzZXQgdG8gc3RhbmRhcmQgdG8gJyVzJ1xuIix2di0+c3RhbmRhcmQtPm5hbWUpKTsKLQkJcmV0dXJuIDA7CisJaWYgKCh2di0+dmlkZW9fc3RhdHVzICYgU1RBVFVTX0NBUFRVUkUpID09IFNUQVRVU19DQVBUVVJFKSB7CisJCURFQl9EKCgiY2Fubm90IGNoYW5nZSB2aWRlbyBzdGFuZGFyZCB3aGlsZSBzdHJlYW1pbmcgY2FwdHVyZSBpcyBhY3RpdmVcbiIpKTsKKwkJcmV0dXJuIC1FQlVTWTsKIAl9Ci0JY2FzZSBWSURJT0NfT1ZFUkxBWToKLQl7Ci0JCWludCBvbiA9ICooaW50ICopYXJnOwogCi0JCURFQl9EKCgiVklESU9DX09WRVJMQVkgb246JWRcbiIsb24pKTsKLQkJaWYgKG9uICE9IDApIHsKLQkJCWVyciA9IHNhYTcxNDZfc3RhcnRfcHJldmlldyhmaCk7Ci0JCX0gZWxzZSB7Ci0JCQllcnIgPSBzYWE3MTQ2X3N0b3BfcHJldmlldyhmaCk7Ci0JCX0KLQkJcmV0dXJuIGVycjsKLQl9Ci0JY2FzZSBWSURJT0NfUkVRQlVGUzogewotCQlzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcmVxID0gYXJnOwotCQlERUJfRCgoIlZJRElPQ19SRVFCVUZTLCB0eXBlOiVkXG4iLHJlcS0+dHlwZSkpOwotCQlyZXR1cm4gdmlkZW9idWZfcmVxYnVmcyhxLHJlcSk7Ci0JfQotCWNhc2UgVklESU9DX1FVRVJZQlVGOiB7Ci0JCXN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmID0gYXJnOwotCQlERUJfRCgoIlZJRElPQ19RVUVSWUJVRiwgdHlwZTolZCwgb2Zmc2V0OiVkXG4iLGJ1Zi0+dHlwZSxidWYtPm0ub2Zmc2V0KSk7Ci0JCXJldHVybiB2aWRlb2J1Zl9xdWVyeWJ1ZihxLGJ1Zik7Ci0JfQotCWNhc2UgVklESU9DX1FCVUY6IHsKLQkJc3RydWN0IHY0bDJfYnVmZmVyICpidWYgPSBhcmc7Ci0JCWludCByZXQgPSAwOwotCQlyZXQgPSB2aWRlb2J1Zl9xYnVmKHEsYnVmKTsKLQkJREVCX0QoKCJWSURJT0NfUUJVRjogcmV0OiVkLCBpbmRleDolZFxuIixyZXQsYnVmLT5pbmRleCkpOwotCQlyZXR1cm4gcmV0OwotCX0KLQljYXNlIFZJRElPQ19EUUJVRjogewotCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZiA9IGFyZzsKLQkJaW50IHJldCA9IDA7Ci0JCXJldCA9IHZpZGVvYnVmX2RxYnVmKHEsYnVmLGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKTsKLQkJREVCX0QoKCJWSURJT0NfRFFCVUY6IHJldDolZCwgaW5kZXg6JWRcbiIscmV0LGJ1Zi0+aW5kZXgpKTsKLQkJcmV0dXJuIHJldDsKLQl9Ci0JY2FzZSBWSURJT0NfU1RSRUFNT046IHsKLQkJaW50ICp0eXBlID0gYXJnOwotCQlERUJfRCgoIlZJRElPQ19TVFJFQU1PTiwgdHlwZTolZFxuIiwqdHlwZSkpOwotCi0JCWVyciA9IHZpZGVvX2JlZ2luKGZoKTsKLQkJaWYoIDAgIT0gZXJyKSB7Ci0JCQlyZXR1cm4gZXJyOwotCQl9Ci0JCWVyciA9IHZpZGVvYnVmX3N0cmVhbW9uKHEpOwotCQlyZXR1cm4gZXJyOwotCX0KLQljYXNlIFZJRElPQ19TVFJFQU1PRkY6IHsKLQkJaW50ICp0eXBlID0gYXJnOwotCi0JCURFQl9EKCgiVklESU9DX1NUUkVBTU9GRiwgdHlwZTolZFxuIiwqdHlwZSkpOwotCi0JCS8qIHVnbHk6IHdlIG5lZWQgdG8gY29weSBzb21lIGNoZWNrcyBmcm9tIHZpZGVvX2VuZCgpLAotCQkgICBiZWNhdXNlIHZpZGVvYnVmX3N0cmVhbW9mZigpIHJlbGllcyBvbiB0aGUgY2FwdHVyZSBydW5uaW5nLgotCQkgICBjaGVjayBhbmQgZml4IHRoaXMgKi8KLQkJaWYgKCh2di0+dmlkZW9fc3RhdHVzICYgU1RBVFVTX0NBUFRVUkUpICE9IFNUQVRVU19DQVBUVVJFKSB7Ci0JCQlERUJfUygoIm5vdCBjYXB0dXJpbmcuXG4iKSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCi0JCWlmICh2di0+dmlkZW9fZmggIT0gZmgpIHsKLQkJCURFQl9TKCgiY2FwdHVyaW5nLCBidXQgaW4gYW5vdGhlciBvcGVuLlxuIikpOwotCQkJcmV0dXJuIC1FQlVTWTsKLQkJfQotCi0JCWVyciA9IHZpZGVvYnVmX3N0cmVhbW9mZihxKTsKKwlpZiAoKHZ2LT52aWRlb19zdGF0dXMgJiBTVEFUVVNfT1ZFUkxBWSkgIT0gMCkgeworCQl2di0+b3Zfc3VzcGVuZCA9IHZ2LT52aWRlb19maDsKKwkJZXJyID0gc2FhNzE0Nl9zdG9wX3ByZXZpZXcodnYtPnZpZGVvX2ZoKTsgLyogc2lkZSBlZmZlY3Q6IHZpZGVvX3N0YXR1cyBpcyBub3cgMCwgdmlkZW9fZmggaXMgTlVMTCAqLwogCQlpZiAoMCAhPSBlcnIpIHsKLQkJCURFQl9EKCgid2FybmluZzogdmlkZW9idWZfc3RyZWFtb2ZmKCkgZmFpbGVkLlxuIikpOwotCQkJdmlkZW9fZW5kKGZoLCBmaWxlKTsKLQkJfSBlbHNlIHsKLQkJCWVyciA9IHZpZGVvX2VuZChmaCwgZmlsZSk7Ci0JCX0KLQkJcmV0dXJuIGVycjsKLQl9Ci0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0JY2FzZSBWSURJT0NHTUJVRjoKLQl7Ci0JCXN0cnVjdCB2aWRlb19tYnVmICptYnVmID0gYXJnOwotCQlpbnQgaTsKLQotCQkvKiBmaXhtZTogbnVtYmVyIG9mIGNhcHR1cmUgYnVmZmVycyBhbmQgc2l6ZXMgZm9yIHY0bCBhcHBzICovCi0JCWludCBnYnVmZmVycyA9IDI7Ci0JCWludCBnYnVmc2l6ZSA9IDc2OCo1NzYqNDsKLQotCQlERUJfRCgoIlZJRElPQ0dNQlVGIFxuIikpOwotCi0JCXEgPSAmZmgtPnZpZGVvX3E7Ci0JCWVyciA9IHZpZGVvYnVmX21tYXBfc2V0dXAocSxnYnVmZmVycyxnYnVmc2l6ZSwKLQkJCQkJICBWNEwyX01FTU9SWV9NTUFQKTsKLQkJaWYgKGVyciA8IDApCisJCQlERUJfRCgoInN1c3BlbmRpbmcgdmlkZW8gZmFpbGVkLiBhYm9ydGluZ1xuIikpOwogCQkJcmV0dXJuIGVycjsKKwkJfQorCX0KIAotCQlnYnVmZmVycyA9IGVycjsKLQkJbWVtc2V0KG1idWYsMCxzaXplb2YoKm1idWYpKTsKLQkJbWJ1Zi0+ZnJhbWVzID0gZ2J1ZmZlcnM7Ci0JCW1idWYtPnNpemUgICA9IGdidWZmZXJzICogZ2J1ZnNpemU7Ci0JCWZvciAoaSA9IDA7IGkgPCBnYnVmZmVyczsgaSsrKQotCQkJbWJ1Zi0+b2Zmc2V0c1tpXSA9IGkgKiBnYnVmc2l6ZTsKLQkJcmV0dXJuIDA7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXYtPmV4dF92dl9kYXRhLT5udW1fc3RkczsgaSsrKQorCQlpZiAoKmlkICYgZGV2LT5leHRfdnZfZGF0YS0+c3Rkc1tpXS5pZCkKKwkJCWJyZWFrOworCWlmIChpICE9IGRldi0+ZXh0X3Z2X2RhdGEtPm51bV9zdGRzKSB7CisJCXZ2LT5zdGFuZGFyZCA9ICZkZXYtPmV4dF92dl9kYXRhLT5zdGRzW2ldOworCQlpZiAoTlVMTCAhPSBkZXYtPmV4dF92dl9kYXRhLT5zdGRfY2FsbGJhY2spCisJCQlkZXYtPmV4dF92dl9kYXRhLT5zdGRfY2FsbGJhY2soZGV2LCB2di0+c3RhbmRhcmQpOworCQlmb3VuZCA9IDE7CiAJfQotI2VuZGlmCi0JZGVmYXVsdDoKLQkJcmV0dXJuIHY0bF9jb21wYXRfdHJhbnNsYXRlX2lvY3RsKGZpbGUsIGNtZCwgYXJnLAotCQkJCQkJICBzYWE3MTQ2X3ZpZGVvX2RvX2lvY3RsKTsKKworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKworCWlmICh2di0+b3Zfc3VzcGVuZCAhPSBOVUxMKSB7CisJCXNhYTcxNDZfc3RhcnRfcHJldmlldyh2di0+b3Zfc3VzcGVuZCk7CisJCXZ2LT5vdl9zdXNwZW5kID0gTlVMTDsKIAl9CisKKwlpZiAoIWZvdW5kKSB7CisJCURFQl9FRSgoIlZJRElPQ19TX1NURDogc3RhbmRhcmQgbm90IGZvdW5kLlxuIikpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlERUJfRUUoKCJWSURJT0NfU19TVEQ6IHNldCB0byBzdGFuZGFyZCB0byAnJXMnXG4iLCB2di0+c3RhbmRhcmQtPm5hbWUpKTsKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB2aWRpb2Nfb3ZlcmxheShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHVuc2lnbmVkIGludCBvbikKK3sKKwlpbnQgZXJyOworCisJREVCX0QoKCJWSURJT0NfT1ZFUkxBWSBvbjolZFxuIiwgb24pKTsKKwlpZiAob24pCisJCWVyciA9IHNhYTcxNDZfc3RhcnRfcHJldmlldyhmaCk7CisJZWxzZQorCQllcnIgPSBzYWE3MTQ2X3N0b3BfcHJldmlldyhmaCk7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCB2aWRpb2NfcmVxYnVmcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKmIpCit7CisJc3RydWN0IHNhYTcxNDZfZmggKmZoID0gX19maDsKKworCWlmIChiLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIHZpZGVvYnVmX3JlcWJ1ZnMoJmZoLT52aWRlb19xLCBiKTsKKwlpZiAoYi0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKQorCQlyZXR1cm4gdmlkZW9idWZfcmVxYnVmcygmZmgtPnZiaV9xLCBiKTsKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2NfcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBzYWE3MTQ2X2ZoICpmaCA9IF9fZmg7CisKKwlpZiAoYnVmLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIHZpZGVvYnVmX3F1ZXJ5YnVmKCZmaC0+dmlkZW9fcSwgYnVmKTsKKwlpZiAoYnVmLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpCisJCXJldHVybiB2aWRlb2J1Zl9xdWVyeWJ1ZigmZmgtPnZiaV9xLCBidWYpOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHZpZGlvY19xYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmggPSBfX2ZoOworCisJaWYgKGJ1Zi0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiB2aWRlb2J1Zl9xYnVmKCZmaC0+dmlkZW9fcSwgYnVmKTsKKwlpZiAoYnVmLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpCisJCXJldHVybiB2aWRlb2J1Zl9xYnVmKCZmaC0+dmJpX3EsIGJ1Zik7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmggPSBfX2ZoOworCisJaWYgKGJ1Zi0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCXJldHVybiB2aWRlb2J1Zl9kcWJ1ZigmZmgtPnZpZGVvX3EsIGJ1ZiwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCWlmIChidWYtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKKwkJcmV0dXJuIHZpZGVvYnVmX2RxYnVmKCZmaC0+dmJpX3EsIGJ1ZiwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpCit7CisJc3RydWN0IHNhYTcxNDZfZmggKmZoID0gX19maDsKKwlpbnQgZXJyOworCisJREVCX0QoKCJWSURJT0NfU1RSRUFNT04sIHR5cGU6JWRcbiIsIHR5cGUpKTsKKworCWVyciA9IHZpZGVvX2JlZ2luKGZoKTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCWlmICh0eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9uKCZmaC0+dmlkZW9fcSk7CisJaWYgKHR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKKwkJcmV0dXJuIHZpZGVvYnVmX3N0cmVhbW9uKCZmaC0+dmJpX3EpOworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlKQoreworCXN0cnVjdCBzYWE3MTQ2X2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCBzYWE3MTQ2X3Z2ICp2diA9IGRldi0+dnZfZGF0YTsKKwlpbnQgZXJyOworCisJREVCX0QoKCJWSURJT0NfU1RSRUFNT0ZGLCB0eXBlOiVkXG4iLCB0eXBlKSk7CisKKwkvKiB1Z2x5OiB3ZSBuZWVkIHRvIGNvcHkgc29tZSBjaGVja3MgZnJvbSB2aWRlb19lbmQoKSwKKwkgICBiZWNhdXNlIHZpZGVvYnVmX3N0cmVhbW9mZigpIHJlbGllcyBvbiB0aGUgY2FwdHVyZSBydW5uaW5nLgorCSAgIGNoZWNrIGFuZCBmaXggdGhpcyAqLworCWlmICgodnYtPnZpZGVvX3N0YXR1cyAmIFNUQVRVU19DQVBUVVJFKSAhPSBTVEFUVVNfQ0FQVFVSRSkgeworCQlERUJfUygoIm5vdCBjYXB0dXJpbmcuXG4iKSk7CisJCXJldHVybiAwOworCX0KKworCWlmICh2di0+dmlkZW9fZmggIT0gZmgpIHsKKwkJREVCX1MoKCJjYXB0dXJpbmcsIGJ1dCBpbiBhbm90aGVyIG9wZW4uXG4iKSk7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJZXJyID0gLUVJTlZBTDsKKwlpZiAodHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCisJCWVyciA9IHZpZGVvYnVmX3N0cmVhbW9mZigmZmgtPnZpZGVvX3EpOworCWVsc2UgaWYgKHR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkKKwkJZXJyID0gdmlkZW9idWZfc3RyZWFtb2ZmKCZmaC0+dmJpX3EpOworCWlmICgwICE9IGVycikgeworCQlERUJfRCgoIndhcm5pbmc6IHZpZGVvYnVmX3N0cmVhbW9mZigpIGZhaWxlZC5cbiIpKTsKKwkJdmlkZW9fZW5kKGZoLCBmaWxlKTsKKwl9IGVsc2UgeworCQllcnIgPSB2aWRlb19lbmQoZmgsIGZpbGUpOworCX0KKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2NoaXBfaWRlbnQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCXN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBzYWE3MTQ2X2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJY2hpcC0+aWRlbnQgPSBWNEwyX0lERU5UX05PTkU7CisJY2hpcC0+cmV2aXNpb24gPSAwOworCWlmIChjaGlwLT5tYXRjaC50eXBlID09IFY0TDJfQ0hJUF9NQVRDSF9IT1NUICYmICFjaGlwLT5tYXRjaC5hZGRyKSB7CisJCWNoaXAtPmlkZW50ID0gVjRMMl9JREVOVF9TQUE3MTQ2OworCQlyZXR1cm4gMDsKKwl9CisJcmV0dXJuIHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKCZkZXYtPnY0bDJfZGV2LCAwLAorCQkJY29yZSwgZ19jaGlwX2lkZW50LCBjaGlwKTsKK30KKworI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorc3RhdGljIGludCB2aWRpb2NnbWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgc3RydWN0IHZpZGVvX21idWYgKm1idWYpCit7CisJc3RydWN0IHNhYTcxNDZfZmggKmZoID0gX19maDsKKwlzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnEgPSAmZmgtPnZpZGVvX3E7CisJaW50IGVyciwgaTsKKworCS8qIGZpeG1lOiBudW1iZXIgb2YgY2FwdHVyZSBidWZmZXJzIGFuZCBzaXplcyBmb3IgdjRsIGFwcHMgKi8KKwlpbnQgZ2J1ZmZlcnMgPSAyOworCWludCBnYnVmc2l6ZSA9IDc2OCAqIDU3NiAqIDQ7CisKKwlERUJfRCgoIlZJRElPQ0dNQlVGIFxuIikpOworCisJcSA9ICZmaC0+dmlkZW9fcTsKKwllcnIgPSB2aWRlb2J1Zl9tbWFwX3NldHVwKHEsIGdidWZmZXJzLCBnYnVmc2l6ZSwKKwkJCVY0TDJfTUVNT1JZX01NQVApOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gZXJyOworCisJZ2J1ZmZlcnMgPSBlcnI7CisJbWVtc2V0KG1idWYsIDAsIHNpemVvZigqbWJ1ZikpOworCW1idWYtPmZyYW1lcyA9IGdidWZmZXJzOworCW1idWYtPnNpemUgICA9IGdidWZmZXJzICogZ2J1ZnNpemU7CisJZm9yIChpID0gMDsgaSA8IGdidWZmZXJzOyBpKyspCisJCW1idWYtPm9mZnNldHNbaV0gPSBpICogZ2J1ZnNpemU7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHNhYTcxNDZfdmlkZW9faW9jdGxfb3BzID0geworCS52aWRpb2NfcXVlcnljYXAgICAgICAgICAgICAgPSB2aWRpb2NfcXVlcnljYXAsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwICAgICA9IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX292ZXJsYXkgPSB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX2dfZm10X3ZpZF9jYXAgICAgICAgID0gdmlkaW9jX2dfZm10X3ZpZF9jYXAsCisJLnZpZGlvY190cnlfZm10X3ZpZF9jYXAgICAgICA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwICAgICAgICA9IHZpZGlvY19zX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZ19mbXRfdmlkX292ZXJsYXkgICAgPSB2aWRpb2NfZ19mbXRfdmlkX292ZXJsYXksCisJLnZpZGlvY190cnlfZm10X3ZpZF9vdmVybGF5ICA9IHZpZGlvY190cnlfZm10X3ZpZF9vdmVybGF5LAorCS52aWRpb2Nfc19mbXRfdmlkX292ZXJsYXkgICAgPSB2aWRpb2Nfc19mbXRfdmlkX292ZXJsYXksCisJLnZpZGlvY19nX2ZtdF92YmlfY2FwICAgICAgICA9IHZpZGlvY19nX2ZtdF92YmlfY2FwLAorCS52aWRpb2NfZ19jaGlwX2lkZW50ICAgICAgICAgPSB2aWRpb2NfZ19jaGlwX2lkZW50LAorCisJLnZpZGlvY19vdmVybGF5IAkgICAgID0gdmlkaW9jX292ZXJsYXksCisJLnZpZGlvY19nX2ZidWYgIAkgICAgID0gdmlkaW9jX2dfZmJ1ZiwKKwkudmlkaW9jX3NfZmJ1ZiAgCSAgICAgPSB2aWRpb2Nfc19mYnVmLAorCS52aWRpb2NfcmVxYnVmcyAgICAgICAgICAgICAgPSB2aWRpb2NfcmVxYnVmcywKKwkudmlkaW9jX3F1ZXJ5YnVmICAgICAgICAgICAgID0gdmlkaW9jX3F1ZXJ5YnVmLAorCS52aWRpb2NfcWJ1ZiAgICAgICAgICAgICAgICAgPSB2aWRpb2NfcWJ1ZiwKKwkudmlkaW9jX2RxYnVmICAgICAgICAgICAgICAgID0gdmlkaW9jX2RxYnVmLAorCS52aWRpb2NfZ19zdGQgICAgICAgICAgICAgICAgPSB2aWRpb2NfZ19zdGQsCisJLnZpZGlvY19zX3N0ZCAgICAgICAgICAgICAgICA9IHZpZGlvY19zX3N0ZCwKKwkudmlkaW9jX3F1ZXJ5Y3RybCAgICAgICAgICAgID0gdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX2dfY3RybCAgICAgICAgICAgICAgID0gdmlkaW9jX2dfY3RybCwKKwkudmlkaW9jX3NfY3RybCAgICAgICAgICAgICAgID0gdmlkaW9jX3NfY3RybCwKKwkudmlkaW9jX3N0cmVhbW9uICAgICAgICAgICAgID0gdmlkaW9jX3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmICAgICAgICAgICAgPSB2aWRpb2Nfc3RyZWFtb2ZmLAorCS52aWRpb2NfZ19wYXJtIAkJICAgICA9IHZpZGlvY19nX3Bhcm0sCisjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCisJLnZpZGlvY2dtYnVmICAgICAgICAgICAgICAgICA9IHZpZGlvY2dtYnVmLAorI2VuZGlmCit9OworCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogYnVmZmVyIGhhbmRsaW5nIGZ1bmN0aW9ucyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvS2NvbmZpZwppbmRleCA2ZjkyYmVhLi41MmMzZjY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvS2NvbmZpZwpAQCAtMjEsMTYgKzIxLDE3IEBACiAJdHJpc3RhdGUKIAlkZWZhdWx0IFZJREVPX01FRElBICYmIEkyQwogCWRlcGVuZHMgb24gVklERU9fTUVESUEgJiYgSTJDCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1hDMjAyOCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1hDNTAwMCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX01UMjBYWCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1REQTgyOTAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9URUE1NzYxIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfVEVBNTc2NyBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1NJTVBMRSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1REQTk4ODcgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCXNlbGVjdCBNRURJQV9UVU5FUl9YQzIwMjggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9YQzUwMDAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIwWFggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjkwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfVEVBNTc2MSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1RFQTU3NjcgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9TSU1QTEUgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9UREE5ODg3IGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfTUM0NFM4MDMgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCi1tZW51Y29uZmlnIE1FRElBX1RVTkVSX0NVU1RPTUlaRQorbWVudWNvbmZpZyBNRURJQV9UVU5FUl9DVVNUT01JU0UKIAlib29sICJDdXN0b21pemUgYW5hbG9nIGFuZCBoeWJyaWQgdHVuZXIgbW9kdWxlcyB0byBidWlsZCIKIAlkZXBlbmRzIG9uIE1FRElBX1RVTkVSCiAJZGVmYXVsdCBuCkBAIC00MywxMyArNDQsMTMgQEAKIAogCSAgSWYgdW5zdXJlIHNheSBOLgogCi1pZiBNRURJQV9UVU5FUl9DVVNUT01JWkUKK2lmIE1FRElBX1RVTkVSX0NVU1RPTUlTRQogCiBjb25maWcgTUVESUFfVFVORVJfU0lNUExFCiAJdHJpc3RhdGUgIlNpbXBsZSB0dW5lciBzdXBwb3J0IgogCWRlcGVuZHMgb24gVklERU9fTUVESUEgJiYgSTJDCiAJc2VsZWN0IE1FRElBX1RVTkVSX1REQTk4ODcKLQlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciB2YXJpb3VzIHNpbXBsZSB0dW5lcnMuCiAKQEAgLTU4LDI4ICs1OSwyOCBAQAogCWRlcGVuZHMgb24gVklERU9fTUVESUEgJiYgSTJDCiAJc2VsZWN0IE1FRElBX1RVTkVSX1REQTgyN1gKIAlzZWxlY3QgTUVESUFfVFVORVJfVERBMTgyNzEKLQlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBQaGlsaXBzIFREQTgyOTArODI3NShhKSB0dW5lci4KIAogY29uZmlnIE1FRElBX1RVTkVSX1REQTgyN1gKIAl0cmlzdGF0ZSAiUGhpbGlwcyBUREE4MjdYIHNpbGljb24gdHVuZXIiCiAJZGVwZW5kcyBvbiBWSURFT19NRURJQSAmJiBJMkMKLQlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBBIERWQi1UIHNpbGljb24gdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyB0dW5lci4KIAogY29uZmlnIE1FRElBX1RVTkVSX1REQTE4MjcxCiAJdHJpc3RhdGUgIk5YUCBUREExODI3MSBzaWxpY29uIHR1bmVyIgogCWRlcGVuZHMgb24gVklERU9fTUVESUEgJiYgSTJDCi0JZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKKwlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgQSBzaWxpY29uIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgdHVuZXIuCiAKIGNvbmZpZyBNRURJQV9UVU5FUl9UREE5ODg3CiAJdHJpc3RhdGUgIlREQSA5ODg1LzYvNyBhbmFsb2cgSUYgZGVtb2R1bGF0b3IiCiAJZGVwZW5kcyBvbiBWSURFT19NRURJQSAmJiBJMkMKLQlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gaW5jbHVkZSBzdXBwb3J0IGZvciBQaGlsaXBzIFREQTk4ODUvNi83CiAJICBhbmFsb2cgSUYgZGVtb2R1bGF0b3IuCkBAIC04OCw2MyArODksNjMgQEAKIAl0cmlzdGF0ZSAiVEVBIDU3NjEgcmFkaW8gdHVuZXIgKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBWSURFT19NRURJQSAmJiBJMkMKIAlkZXBlbmRzIG9uIEVYUEVSSU1FTlRBTAotCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHRoZSBQaGlsaXBzIFRFQTU3NjEgcmFkaW8gdHVuZXIuCiAKIGNvbmZpZyBNRURJQV9UVU5FUl9URUE1NzY3CiAJdHJpc3RhdGUgIlRFQSA1NzY3IHJhZGlvIHR1bmVyIgogCWRlcGVuZHMgb24gVklERU9fTUVESUEgJiYgSTJDCi0JZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlaRQorCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIFBoaWxpcHMgVEVBNTc2NyByYWRpbyB0dW5lci4KIAogY29uZmlnIE1FRElBX1RVTkVSX01UMjBYWAogCXRyaXN0YXRlICJNaWNyb3R1bmUgMjAzMiAvIDIwNTAgdHVuZXJzIgogCWRlcGVuZHMgb24gVklERU9fTUVESUEgJiYgSTJDCi0JZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlaRQorCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIE1UMjAzMiAvIE1UMjA1MCB0dW5lci4KIAogY29uZmlnIE1FRElBX1RVTkVSX01UMjA2MAogCXRyaXN0YXRlICJNaWNyb3R1bmUgTVQyMDYwIHNpbGljb24gSUYgdHVuZXIiCiAJZGVwZW5kcyBvbiBWSURFT19NRURJQSAmJiBJMkMKLQlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBBIGRyaXZlciBmb3IgdGhlIHNpbGljb24gSUYgdHVuZXIgTVQyMDYwIGZyb20gTWljcm90dW5lLgogCiBjb25maWcgTUVESUFfVFVORVJfTVQyMjY2CiAJdHJpc3RhdGUgIk1pY3JvdHVuZSBNVDIyNjYgc2lsaWNvbiB0dW5lciIKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwotCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIEEgZHJpdmVyIGZvciB0aGUgc2lsaWNvbiBiYXNlYmFuZCB0dW5lciBNVDIyNjYgZnJvbSBNaWNyb3R1bmUuCiAKIGNvbmZpZyBNRURJQV9UVU5FUl9NVDIxMzEKIAl0cmlzdGF0ZSAiTWljcm90dW5lIE1UMjEzMSBzaWxpY29uIHR1bmVyIgogCWRlcGVuZHMgb24gVklERU9fTUVESUEgJiYgSTJDCi0JZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKKwlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgQSBkcml2ZXIgZm9yIHRoZSBzaWxpY29uIGJhc2ViYW5kIHR1bmVyIE1UMjEzMSBmcm9tIE1pY3JvdHVuZS4KIAogY29uZmlnIE1FRElBX1RVTkVSX1FUMTAxMAogCXRyaXN0YXRlICJRdWFudGVrIFFUMTAxMCBzaWxpY29uIHR1bmVyIgogCWRlcGVuZHMgb24gVklERU9fTUVESUEgJiYgSTJDCi0JZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKKwlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgQSBkcml2ZXIgZm9yIHRoZSBzaWxpY29uIHR1bmVyIFFUMTAxMCBmcm9tIFF1YW50ZWsuCiAKIGNvbmZpZyBNRURJQV9UVU5FUl9YQzIwMjgKIAl0cmlzdGF0ZSAiWENlaXZlIHhjMjAyOC94YzMwMjggdHVuZXJzIgogCWRlcGVuZHMgb24gVklERU9fTUVESUEgJiYgSTJDCi0JZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlaRQorCWRlZmF1bHQgbSBpZiBNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGluY2x1ZGUgc3VwcG9ydCBmb3IgdGhlIHhjMjAyOC94YzMwMjggdHVuZXJzLgogCiBjb25maWcgTUVESUFfVFVORVJfWEM1MDAwCiAJdHJpc3RhdGUgIlhjZWl2ZSBYQzUwMDAgc2lsaWNvbiB0dW5lciIKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwotCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIEEgZHJpdmVyIGZvciB0aGUgc2lsaWNvbiB0dW5lciBYQzUwMDAgZnJvbSBYY2VpdmUuCiAJICBUaGlzIGRldmljZSBpcyBvbmx5IHVzZWQgaW5zaWRlIGEgU2lQIGNhbGxlZCB0b2d0aGVyIHdpdGggYQpAQCAtMTUzLDE1ICsxNTQsMjIgQEAKIGNvbmZpZyBNRURJQV9UVU5FUl9NWEw1MDA1UwogCXRyaXN0YXRlICJNYXhMaW5lYXIgTVNMNTAwNVMgc2lsaWNvbiB0dW5lciIKIAlkZXBlbmRzIG9uIFZJREVPX01FRElBICYmIEkyQwotCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCisJZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIEEgZHJpdmVyIGZvciB0aGUgc2lsaWNvbiB0dW5lciBNWEw1MDA1UyBmcm9tIE1heExpbmVhci4KIAogY29uZmlnIE1FRElBX1RVTkVSX01YTDUwMDdUCiAJdHJpc3RhdGUgIk1heExpbmVhciBNeEw1MDA3VCBzaWxpY29uIHR1bmVyIgogCWRlcGVuZHMgb24gVklERU9fTUVESUEgJiYgSTJDCi0JZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKKwlkZWZhdWx0IG0gaWYgTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgQSBkcml2ZXIgZm9yIHRoZSBzaWxpY29uIHR1bmVyIE14TDUwMDdUIGZyb20gTWF4TGluZWFyLgogCi1lbmRpZiAjIE1FRElBX1RVTkVSX0NVU1RPTUlaRQorY29uZmlnIE1FRElBX1RVTkVSX01DNDRTODAzCisJdHJpc3RhdGUgIkZyZWVzY2FsZSBNQzQ0UzgwMyBMb3cgUG93ZXIgQ01PUyBCcm9hZGJhbmQgdHVuZXJzIgorCWRlcGVuZHMgb24gVklERU9fTUVESUEgJiYgSTJDCisJZGVmYXVsdCBtIGlmIE1FRElBX1RVTkVSX0NVU1RPTUlTRQorCWhlbHAKKwkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgRnJlZXNjYWxlIE1DNDRTODAzIGJhc2VkIHR1bmVycworCitlbmRpZiAjIE1FRElBX1RVTkVSX0NVU1RPTUlTRQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL01ha2VmaWxlCmluZGV4IDRkZmJlNWIuLjQxMzJiMmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvTWFrZWZpbGUKQEAgLTIyLDYgKzIyLDcgQEAKIG9iai0kKENPTkZJR19NRURJQV9UVU5FUl9NVDIxMzEpICs9IG10MjEzMS5vCiBvYmotJChDT05GSUdfTUVESUFfVFVORVJfTVhMNTAwNVMpICs9IG14bDUwMDVzLm8KIG9iai0kKENPTkZJR19NRURJQV9UVU5FUl9NWEw1MDA3VCkgKz0gbXhsNTAwN3Qubworb2JqLSQoQ09ORklHX01FRElBX1RVTkVSX01DNDRTODAzKSArPSBtYzQ0czgwMy5vCiAKIEVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlCiBFWFRSQV9DRkxBR1MgKz0gLUlkcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9tYzQ0czgwMy5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL21jNDRzODAzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjBjNDQ4NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9tYzQ0czgwMy5jCkBAIC0wLDAgKzEsMzcxIEBACisvKgorICogIERyaXZlciBmb3IgRnJlZXNjYWxlIE1DNDRTODAzIExvdyBQb3dlciBDTU9TIEJyb2FkYmFuZCBUdW5lcgorICoKKyAqICBDb3B5cmlnaHQgKGMpIDIwMDkgSm9jaGVuIEZyaWVkcmljaCA8am9jaGVuQHNjcmFtLmRlPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLj0KKyAqLworCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKworI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorCisjaW5jbHVkZSAibWM0NHM4MDMuaCIKKyNpbmNsdWRlICJtYzQ0czgwM19wcml2LmgiCisKKyNkZWZpbmUgbWNfcHJpbnRrKGxldmVsLCBmb3JtYXQsIGFyZy4uLikJXAorCXByaW50ayhsZXZlbCAibWM0NHM4MDM6ICIgZm9ybWF0ICwgIyMgYXJnKQorCisvKiBXcml0ZXMgYSBzaW5nbGUgcmVnaXN0ZXIgKi8KK3N0YXRpYyBpbnQgbWM0NHM4MDNfd3JpdGVyZWcoc3RydWN0IG1jNDRzODAzX3ByaXYgKnByaXYsIHUzMiB2YWwpCit7CisJdTggYnVmWzNdOworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIgPSBwcml2LT5jZmctPmkyY19hZGRyZXNzLCAuZmxhZ3MgPSAwLCAuYnVmID0gYnVmLCAubGVuID0gMworCX07CisKKwlidWZbMF0gPSAodmFsICYgMHhmZjAwMDApID4+IDE2OworCWJ1ZlsxXSA9ICh2YWwgJiAweGZmMDApID4+IDg7CisJYnVmWzJdID0gKHZhbCAmIDB4ZmYpOworCisJaWYgKGkyY190cmFuc2Zlcihwcml2LT5pMmMsICZtc2csIDEpICE9IDEpIHsKKwkJbWNfcHJpbnRrKEtFUk5fV0FSTklORywgIkkyQyB3cml0ZSBmYWlsZWRcbiIpOworCQlyZXR1cm4gLUVSRU1PVEVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIFJlYWRzIGEgc2luZ2xlIHJlZ2lzdGVyICovCitzdGF0aWMgaW50IG1jNDRzODAzX3JlYWRyZWcoc3RydWN0IG1jNDRzODAzX3ByaXYgKnByaXYsIHU4IHJlZywgdTMyICp2YWwpCit7CisJdTMyIHd2YWw7CisJdTggYnVmWzNdOworCWludCByZXQ7CisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7CisJCXsgLmFkZHIgPSBwcml2LT5jZmctPmkyY19hZGRyZXNzLCAuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJICAuYnVmID0gYnVmLCAubGVuID0gMyB9LAorCX07CisKKwl3dmFsID0gTUM0NFM4MDNfUkVHX1NNKE1DNDRTODAzX1JFR19EQVRBUkVHLCBNQzQ0UzgwM19BRERSKSB8CisJICAgICAgIE1DNDRTODAzX1JFR19TTShyZWcsIE1DNDRTODAzX0QpOworCisJcmV0ID0gbWM0NHM4MDNfd3JpdGVyZWcocHJpdiwgd3ZhbCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKworCWlmIChpMmNfdHJhbnNmZXIocHJpdi0+aTJjLCBtc2csIDEpICE9IDEpIHsKKwkJbWNfcHJpbnRrKEtFUk5fV0FSTklORywgIkkyQyByZWFkIGZhaWxlZFxuIik7CisJCXJldHVybiAtRVJFTU9URUlPOworCX0KKworCSp2YWwgPSAoYnVmWzBdIDw8IDE2KSB8IChidWZbMV0gPDwgOCkgfCBidWZbMl07CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYzQ0czgwM19yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBtYzQ0czgwM19wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisKKwlmZS0+dHVuZXJfcHJpdiA9IE5VTEw7CisJa2ZyZWUocHJpdik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtYzQ0czgwM19pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBtYzQ0czgwM19wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisJdTMyIHZhbDsKKwlpbnQgZXJyOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKworLyogUmVzZXQgY2hpcCAqLworCXZhbCA9IE1DNDRTODAzX1JFR19TTShNQzQ0UzgwM19SRUdfUkVTRVQsIE1DNDRTODAzX0FERFIpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfUlMpOworCisJZXJyID0gbWM0NHM4MDNfd3JpdGVyZWcocHJpdiwgdmFsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKwl2YWwgPSBNQzQ0UzgwM19SRUdfU00oTUM0NFM4MDNfUkVHX1JFU0VULCBNQzQ0UzgwM19BRERSKTsKKworCWVyciA9IG1jNDRzODAzX3dyaXRlcmVnKHByaXYsIHZhbCk7CisJaWYgKGVycikKKwkJZ290byBleGl0OworCisvKiBQb3dlciBVcCBhbmQgU3RhcnQgT3NjICovCisKKwl2YWwgPSBNQzQ0UzgwM19SRUdfU00oTUM0NFM4MDNfUkVHX1JFRk9TQywgTUM0NFM4MDNfQUREUikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgweEMwLCBNQzQ0UzgwM19SRUZPU0MpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfT1NDU0VMKTsKKworCWVyciA9IG1jNDRzODAzX3dyaXRlcmVnKHByaXYsIHZhbCk7CisJaWYgKGVycikKKwkJZ290byBleGl0OworCisJdmFsID0gTUM0NFM4MDNfUkVHX1NNKE1DNDRTODAzX1JFR19QT1dFUiwgTUM0NFM4MDNfQUREUikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgweDIwMCwgTUM0NFM4MDNfUE9XRVIpOworCisJZXJyID0gbWM0NHM4MDNfd3JpdGVyZWcocHJpdiwgdmFsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKwltc2xlZXAoMTApOworCisJdmFsID0gTUM0NFM4MDNfUkVHX1NNKE1DNDRTODAzX1JFR19SRUZPU0MsIE1DNDRTODAzX0FERFIpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMHg0MCwgTUM0NFM4MDNfUkVGT1NDKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDEsIE1DNDRTODAzX09TQ1NFTCk7CisKKwllcnIgPSBtYzQ0czgwM193cml0ZXJlZyhwcml2LCB2YWwpOworCWlmIChlcnIpCisJCWdvdG8gZXhpdDsKKworCW1zbGVlcCgyMCk7CisKKy8qIFNldHVwIE1peGVyICovCisKKwl2YWwgPSBNQzQ0UzgwM19SRUdfU00oTUM0NFM4MDNfUkVHX01JWEVSLCBNQzQ0UzgwM19BRERSKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDEsIE1DNDRTODAzX1RSSV9TVEFURSkgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgweDdGLCBNQzQ0UzgwM19NSVhFUl9SRVMpOworCisJZXJyID0gbWM0NHM4MDNfd3JpdGVyZWcocHJpdiwgdmFsKTsKKwlpZiAoZXJyKQorCQlnb3RvIGV4aXQ7CisKKy8qIFNldHVwIENpcnF1aXQgQWRqdXN0ICovCisKKwl2YWwgPSBNQzQ0UzgwM19SRUdfU00oTUM0NFM4MDNfUkVHX0NJUkNBREosIE1DNDRTODAzX0FERFIpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfRzEpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfRzMpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMHgzLCBNQzQ0UzgwM19DSVJDQURKX1JFUykgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19HNikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTShwcml2LT5jZmctPmRpZ19vdXQsIE1DNDRTODAzX1MxKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDB4MywgTUM0NFM4MDNfTFApIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfQ0xSRikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19DTElGKTsKKworCWVyciA9IG1jNDRzODAzX3dyaXRlcmVnKHByaXYsIHZhbCk7CisJaWYgKGVycikKKwkJZ290byBleGl0OworCisJdmFsID0gTUM0NFM4MDNfUkVHX1NNKE1DNDRTODAzX1JFR19DSVJDQURKLCBNQzQ0UzgwM19BRERSKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDEsIE1DNDRTODAzX0cxKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDEsIE1DNDRTODAzX0czKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDB4MywgTUM0NFM4MDNfQ0lSQ0FESl9SRVMpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfRzYpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00ocHJpdi0+Y2ZnLT5kaWdfb3V0LCBNQzQ0UzgwM19TMSkgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgweDMsIE1DNDRTODAzX0xQKTsKKworCWVyciA9IG1jNDRzODAzX3dyaXRlcmVnKHByaXYsIHZhbCk7CisJaWYgKGVycikKKwkJZ290byBleGl0OworCisvKiBTZXR1cCBEaWd0dW5lICovCisKKwl2YWwgPSBNQzQ0UzgwM19SRUdfU00oTUM0NFM4MDNfUkVHX0RJR1RVTkUsIE1DNDRTODAzX0FERFIpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMywgTUM0NFM4MDNfWE9EKTsKKworCWVyciA9IG1jNDRzODAzX3dyaXRlcmVnKHByaXYsIHZhbCk7CisJaWYgKGVycikKKwkJZ290byBleGl0OworCisvKiBTZXR1cCBBR0MgKi8KKworCXZhbCA9IE1DNDRTODAzX1JFR19TTShNQzQ0UzgwM19SRUdfTE5BQUdDLCBNQzQ0UzgwM19BRERSKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDEsIE1DNDRTODAzX0FUMSkgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19BVDIpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfQUdDX0FOX0RJRykgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19BR0NfUkVBRF9FTikgfAorCSAgICAgIE1DNDRTODAzX1JFR19TTSgxLCBNQzQ0UzgwM19MTkEwKTsKKworCWVyciA9IG1jNDRzODAzX3dyaXRlcmVnKHByaXYsIHZhbCk7CisJaWYgKGVycikKKwkJZ290byBleGl0OworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKwlyZXR1cm4gMDsKKworZXhpdDoKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCisJbWNfcHJpbnRrKEtFUk5fV0FSTklORywgIkkvTyBFcnJvclxuIik7CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBtYzQ0czgwM19zZXRfcGFyYW1zKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJICAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQoreworCXN0cnVjdCBtYzQ0czgwM19wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisJdTMyIHIxLCByMiwgbjEsIG4yLCBsbzEsIGxvMiwgZnJlcSwgdmFsOworCWludCBlcnI7CisKKwlwcml2LT5mcmVxdWVuY3kgPSBwYXJhbXMtPmZyZXF1ZW5jeTsKKworCXIxID0gTUM0NFM4MDNfT1NDIC8gMTAwMDAwMDsKKwlyMiA9IE1DNDRTODAzX09TQyAvICAxMDAwMDA7CisKKwluMSA9IChwYXJhbXMtPmZyZXF1ZW5jeSArIE1DNDRTODAzX0lGMSArIDUwMDAwMCkgLyAxMDAwMDAwOworCWZyZXEgPSBNQzQ0UzgwM19PU0MgLyByMSAqIG4xOworCWxvMSA9ICgoNjAgKiBuMSkgKyAocjEgLyAyKSkgLyByMTsKKwlmcmVxID0gZnJlcSAtIHBhcmFtcy0+ZnJlcXVlbmN5OworCisJbjIgPSAoZnJlcSAtIE1DNDRTODAzX0lGMiArIDUwMDAwKSAvIDEwMDAwMDsKKwlsbzIgPSAoKDYwICogbjIpICsgKHIyIC8gMikpIC8gcjI7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOworCisJdmFsID0gTUM0NFM4MDNfUkVHX1NNKE1DNDRTODAzX1JFR19SRUZESVYsIE1DNDRTODAzX0FERFIpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00ocjEtMSwgTUM0NFM4MDNfUjEpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00ocjItMSwgTUM0NFM4MDNfUjIpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00oMSwgTUM0NFM4MDNfUkVGQlVGX0VOKTsKKworCWVyciA9IG1jNDRzODAzX3dyaXRlcmVnKHByaXYsIHZhbCk7CisJaWYgKGVycikKKwkJZ290byBleGl0OworCisJdmFsID0gTUM0NFM4MDNfUkVHX1NNKE1DNDRTODAzX1JFR19MTzEsIE1DNDRTODAzX0FERFIpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00objEtMiwgTUM0NFM4MDNfTE8xKTsKKworCWVyciA9IG1jNDRzODAzX3dyaXRlcmVnKHByaXYsIHZhbCk7CisJaWYgKGVycikKKwkJZ290byBleGl0OworCisJdmFsID0gTUM0NFM4MDNfUkVHX1NNKE1DNDRTODAzX1JFR19MTzIsIE1DNDRTODAzX0FERFIpIHwKKwkgICAgICBNQzQ0UzgwM19SRUdfU00objItMiwgTUM0NFM4MDNfTE8yKTsKKworCWVyciA9IG1jNDRzODAzX3dyaXRlcmVnKHByaXYsIHZhbCk7CisJaWYgKGVycikKKwkJZ290byBleGl0OworCisJdmFsID0gTUM0NFM4MDNfUkVHX1NNKE1DNDRTODAzX1JFR19ESUdUVU5FLCBNQzQ0UzgwM19BRERSKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDEsIE1DNDRTODAzX0RBKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKGxvMSwgTUM0NFM4MDNfTE9fUkVGKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDEsIE1DNDRTODAzX0FUKTsKKworCWVyciA9IG1jNDRzODAzX3dyaXRlcmVnKHByaXYsIHZhbCk7CisJaWYgKGVycikKKwkJZ290byBleGl0OworCisJdmFsID0gTUM0NFM4MDNfUkVHX1NNKE1DNDRTODAzX1JFR19ESUdUVU5FLCBNQzQ0UzgwM19BRERSKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDIsIE1DNDRTODAzX0RBKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKGxvMiwgTUM0NFM4MDNfTE9fUkVGKSB8CisJICAgICAgTUM0NFM4MDNfUkVHX1NNKDEsIE1DNDRTODAzX0FUKTsKKworCWVyciA9IG1jNDRzODAzX3dyaXRlcmVnKHByaXYsIHZhbCk7CisJaWYgKGVycikKKwkJZ290byBleGl0OworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKworCXJldHVybiAwOworCitleGl0OgorCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisKKwltY19wcmludGsoS0VSTl9XQVJOSU5HLCAiSS9PIEVycm9yXG4iKTsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IG1jNDRzODAzX2dldF9mcmVxdWVuY3koc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqZnJlcXVlbmN5KQoreworCXN0cnVjdCBtYzQ0czgwM19wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisJKmZyZXF1ZW5jeSA9IHByaXYtPmZyZXF1ZW5jeTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBkdmJfdHVuZXJfb3BzIG1jNDRzODAzX3R1bmVyX29wcyA9IHsKKwkuaW5mbyA9IHsKKwkJLm5hbWUgICAgICAgICAgID0gIkZyZWVzY2FsZSBNQzQ0UzgwMyIsCisJCS5mcmVxdWVuY3lfbWluICA9ICAgNDgwMDAwMDAsCisJCS5mcmVxdWVuY3lfbWF4ICA9IDEwMDAwMDAwMDAsCisJCS5mcmVxdWVuY3lfc3RlcCA9ICAgICAxMDAwMDAsCisJfSwKKworCS5yZWxlYXNlICAgICAgID0gbWM0NHM4MDNfcmVsZWFzZSwKKwkuaW5pdCAgICAgICAgICA9IG1jNDRzODAzX2luaXQsCisJLnNldF9wYXJhbXMgICAgPSBtYzQ0czgwM19zZXRfcGFyYW1zLAorCS5nZXRfZnJlcXVlbmN5ID0gbWM0NHM4MDNfZ2V0X2ZyZXF1ZW5jeQorfTsKKworLyogVGhpcyBmdW5jdGlvbnMgdHJpZXMgdG8gaWRlbnRpZnkgYSBNQzQ0UzgwMyB0dW5lciBieSByZWFkaW5nIHRoZSBJRAorICAgcmVnaXN0ZXIuIFRoaXMgaXMgaGFzdHkuICovCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICptYzQ0czgwM19hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBzdHJ1Y3QgbWM0NHM4MDNfY29uZmlnICpjZmcpCit7CisJc3RydWN0IG1jNDRzODAzX3ByaXYgKnByaXY7CisJdTMyIHJlZzsKKwl1OCBpZDsKKwlpbnQgcmV0OworCisJcmVnID0gMDsKKworCXByaXYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbWM0NHM4MDNfcHJpdiksIEdGUF9LRVJORUwpOworCWlmIChwcml2ID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJcHJpdi0+Y2ZnID0gY2ZnOworCXByaXYtPmkyYyA9IGkyYzsKKwlwcml2LT5mZSAgPSBmZTsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7IC8qIG9wZW4gaTJjX2dhdGUgKi8KKworCXJldCA9IG1jNDRzODAzX3JlYWRyZWcocHJpdiwgTUM0NFM4MDNfUkVHX0lELCAmcmVnKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yOworCisJaWQgPSBNQzQ0UzgwM19SRUdfTVMocmVnLCBNQzQ0UzgwM19JRCk7CisKKwlpZiAoaWQgIT0gMHgxNCkgeworCQltY19wcmludGsoS0VSTl9FUlIsICJ1bnN1cHBvcnRlZCBJRCAiCisJCSAgICAgICAiKCV4IHNob3VsZCBiZSAweDE0KVxuIiwgaWQpOworCQlnb3RvIGVycm9yOworCX0KKworCW1jX3ByaW50ayhLRVJOX0lORk8sICJzdWNjZXNzZnVsbHkgaWRlbnRpZmllZCAoSUQgPSAleClcbiIsIGlkKTsKKwltZW1jcHkoJmZlLT5vcHMudHVuZXJfb3BzLCAmbWM0NHM4MDNfdHVuZXJfb3BzLAorCSAgICAgICBzaXplb2Yoc3RydWN0IGR2Yl90dW5lcl9vcHMpKTsKKworCWZlLT50dW5lcl9wcml2ID0gcHJpdjsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7IC8qIGNsb3NlIGkyY19nYXRlICovCisKKwlyZXR1cm4gZmU7CisKK2Vycm9yOgorCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7IC8qIGNsb3NlIGkyY19nYXRlICovCisKKwlrZnJlZShwcml2KTsKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0wobWM0NHM4MDNfYXR0YWNoKTsKKworTU9EVUxFX0FVVEhPUigiSm9jaGVuIEZyaWVkcmljaCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJGcmVlc2NhbGUgTUM0NFM4MDMgc2lsaWNvbiB0dW5lciBkcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9tYzQ0czgwMy5oIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL21jNDRzODAzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzRmMzg5MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9tYzQ0czgwMy5oCkBAIC0wLDAgKzEsNDYgQEAKKy8qCisgKiAgRHJpdmVyIGZvciBGcmVlc2NhbGUgTUM0NFM4MDMgTG93IFBvd2VyIENNT1MgQnJvYWRiYW5kIFR1bmVyCisgKgorICogIENvcHlyaWdodCAoYykgMjAwOSBKb2NoZW4gRnJpZWRyaWNoIDxqb2NoZW5Ac2NyYW0uZGU+CisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuPQorICovCisKKyNpZm5kZWYgTUM0NFM4MDNfSAorI2RlZmluZSBNQzQ0UzgwM19ICisKK3N0cnVjdCBkdmJfZnJvbnRlbmQ7CitzdHJ1Y3QgaTJjX2FkYXB0ZXI7CisKK3N0cnVjdCBtYzQ0czgwM19jb25maWcgeworCXU4IGkyY19hZGRyZXNzOworCXU4IGRpZ19vdXQ7Cit9OworCisjaWYgZGVmaW5lZChDT05GSUdfTUVESUFfVFVORVJfTUM0NFM4MDMpIHx8IFwKKyAgICAoZGVmaW5lZChDT05GSUdfTUVESUFfVFVORVJfTUM0NFM4MDNfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqbWM0NHM4MDNfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCSBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgc3RydWN0IG1jNDRzODAzX2NvbmZpZyAqY2ZnKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKm1jNDRzODAzX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHN0cnVjdCBtYzQ0czgwM19jb25maWcgKmNmZykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvKiBDT05GSUdfTUVESUFfVFVORVJfTUM0NFM4MDMgKi8KKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbWM0NHM4MDNfcHJpdi5oIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL21jNDRzODAzX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xNGE5Mjc4Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL21jNDRzODAzX3ByaXYuaApAQCAtMCwwICsxLDIwOCBAQAorLyoKKyAqICBEcml2ZXIgZm9yIEZyZWVzY2FsZSBNQzQ0UzgwMyBMb3cgUG93ZXIgQ01PUyBCcm9hZGJhbmQgVHVuZXIKKyAqCisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IEpvY2hlbiBGcmllZHJpY2ggPGpvY2hlbkBzY3JhbS5kZT4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS49CisgKi8KKworI2lmbmRlZiBNQzQ0UzgwM19QUklWX0gKKyNkZWZpbmUgTUM0NFM4MDNfUFJJVl9ICisKKy8qIFRoaXMgZHJpdmVyIGlzIGJhc2VkIG9uIHRoZSBpbmZvcm1hdGlvbiBhdmFpbGFibGUgaW4gdGhlIGRhdGFzaGVldAorICAgaHR0cDovL3d3dy5mcmVlc2NhbGUuY29tL2ZpbGVzL3JmX2lmL2RvYy9kYXRhX3NoZWV0L01DNDRTODAzLnBkZgorCisgICBTUEkgb3IgSTJDIEFkZHJlc3MgOiAweGMwLTB4YzYKKworICAgUmVnLk5vIHwgRnVuY3Rpb24KKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAgICAwMCB8IFBvd2VyIERvd24KKyAgICAgICAwMSB8IFJlZmVyZW5jZSBPc3ppbGxhdG9yCisgICAgICAgMDIgfCBSZWZlcmVuY2UgRGl2aWRlcnMKKyAgICAgICAwMyB8IE1peGVyIGFuZCBSZWZlcmVuY2UgQnVmZmVyCisgICAgICAgMDQgfCBSZXNldC9TZXJpYWwgT3V0CisgICAgICAgMDUgfCBMTyAxCisgICAgICAgMDYgfCBMTyAyCisgICAgICAgMDcgfCBDaXJjdWl0IEFkanVzdAorICAgICAgIDA4IHwgVGVzdAorICAgICAgIDA5IHwgRGlnaXRhbCBUdW5lCisgICAgICAgMEEgfCBMTkEgQUdDCisgICAgICAgMEIgfCBEYXRhIFJlZ2lzdGVyIEFkZHJlc3MKKyAgICAgICAwQyB8IFJlZ3VsYXRvciBUZXN0CisgICAgICAgMEQgfCBWQ08gVGVzdAorICAgICAgIDBFIHwgTE5BIEdhaW4vSW5wdXQgUG93ZXIKKyAgICAgICAwRiB8IElEIEJpdHMKKworKi8KKworI2RlZmluZSBNQzQ0UzgwM19PU0MgMjYwMDAwMDAJLyogMjYgTUh6ICovCisjZGVmaW5lIE1DNDRTODAzX0lGMSAxMDg2MDAwMDAwIC8qIDEwODYgTUh6ICovCisjZGVmaW5lIE1DNDRTODAzX0lGMiAzNjEyNTAwMAkvKiAzNi4xMjUgTUh6ICovCisKKyNkZWZpbmUgTUM0NFM4MDNfUkVHX1BPV0VSCTAKKyNkZWZpbmUgTUM0NFM4MDNfUkVHX1JFRk9TQwkxCisjZGVmaW5lIE1DNDRTODAzX1JFR19SRUZESVYJMgorI2RlZmluZSBNQzQ0UzgwM19SRUdfTUlYRVIJMworI2RlZmluZSBNQzQ0UzgwM19SRUdfUkVTRVQJNAorI2RlZmluZSBNQzQ0UzgwM19SRUdfTE8xCTUKKyNkZWZpbmUgTUM0NFM4MDNfUkVHX0xPMgk2CisjZGVmaW5lIE1DNDRTODAzX1JFR19DSVJDQURKCTcKKyNkZWZpbmUgTUM0NFM4MDNfUkVHX1RFU1QJOAorI2RlZmluZSBNQzQ0UzgwM19SRUdfRElHVFVORQk5CisjZGVmaW5lIE1DNDRTODAzX1JFR19MTkFBR0MJMHgwQQorI2RlZmluZSBNQzQ0UzgwM19SRUdfREFUQVJFRwkweDBCCisjZGVmaW5lIE1DNDRTODAzX1JFR19SRUdURVNUCTB4MEMKKyNkZWZpbmUgTUM0NFM4MDNfUkVHX1ZDT1RFU1QJMHgwRAorI2RlZmluZSBNQzQ0UzgwM19SRUdfTE5BR0FJTgkweDBFCisjZGVmaW5lIE1DNDRTODAzX1JFR19JRAkJMHgwRgorCisvKiBSZWdpc3RlciBkZWZpbml0aW9ucyAqLworI2RlZmluZSBNQzQ0UzgwM19BRERSCQkweDBGCisjZGVmaW5lIE1DNDRTODAzX0FERFJfUwkJMAorLyogUkVHX1BPV0VSICovCisjZGVmaW5lIE1DNDRTODAzX1BPV0VSCQkweEZGRkZGMAorI2RlZmluZSBNQzQ0UzgwM19QT1dFUl9TCTQKKy8qIFJFR19SRUZPU0MgKi8KKyNkZWZpbmUgTUM0NFM4MDNfUkVGT1NDCQkweDFGRjAKKyNkZWZpbmUgTUM0NFM4MDNfUkVGT1NDX1MJNAorI2RlZmluZSBNQzQ0UzgwM19PU0NTRUwJCTB4MjAwMAorI2RlZmluZSBNQzQ0UzgwM19PU0NTRUxfUwkxMworLyogUkVHX1JFRkRJViAqLworI2RlZmluZSBNQzQ0UzgwM19SMgkJMHgxRkYwCisjZGVmaW5lIE1DNDRTODAzX1IyX1MJCTQKKyNkZWZpbmUgTUM0NFM4MDNfUkVGQlVGX0VOCTB4MjAwMAorI2RlZmluZSBNQzQ0UzgwM19SRUZCVUZfRU5fUwkxMworI2RlZmluZSBNQzQ0UzgwM19SMQkJMHg3QzAwMAorI2RlZmluZSBNQzQ0UzgwM19SMV9TCQkxNAorLyogUkVHX01JWEVSICovCisjZGVmaW5lIE1DNDRTODAzX1IzCQkweDcwCisjZGVmaW5lIE1DNDRTODAzX1IzX1MJCTQKKyNkZWZpbmUgTUM0NFM4MDNfTVVYMwkJMHg4MAorI2RlZmluZSBNQzQ0UzgwM19NVVgzX1MJCTcKKyNkZWZpbmUgTUM0NFM4MDNfTVVYNAkJMHgxMDAKKyNkZWZpbmUgTUM0NFM4MDNfTVVYNF9TCQk4CisjZGVmaW5lIE1DNDRTODAzX09TQ19TQ1IJMHgyMDAKKyNkZWZpbmUgTUM0NFM4MDNfT1NDX1NDUl9TCTkKKyNkZWZpbmUgTUM0NFM4MDNfVFJJX1NUQVRFCTB4NDAwCisjZGVmaW5lIE1DNDRTODAzX1RSSV9TVEFURV9TCTEwCisjZGVmaW5lIE1DNDRTODAzX0JVRl9HQUlOCTB4ODAwCisjZGVmaW5lIE1DNDRTODAzX0JVRl9HQUlOX1MJMTEKKyNkZWZpbmUgTUM0NFM4MDNfQlVGX0lPCQkweDEwMDAKKyNkZWZpbmUgTUM0NFM4MDNfQlVGX0lPX1MJMTIKKyNkZWZpbmUgTUM0NFM4MDNfTUlYRVJfUkVTCTB4RkUwMDAKKyNkZWZpbmUgTUM0NFM4MDNfTUlYRVJfUkVTX1MJMTMKKy8qIFJFR19SRVNFVCAqLworI2RlZmluZSBNQzQ0UzgwM19SUwkJMHgxMAorI2RlZmluZSBNQzQ0UzgwM19SU19TCQk0CisjZGVmaW5lIE1DNDRTODAzX1NPCQkweDIwCisjZGVmaW5lIE1DNDRTODAzX1NPX1MJCTUKKy8qIFJFR19MTzEgKi8KKyNkZWZpbmUgTUM0NFM4MDNfTE8xCQkweEZGRjAKKyNkZWZpbmUgTUM0NFM4MDNfTE8xX1MJCTQKKy8qIFJFR19MTzIgKi8KKyNkZWZpbmUgTUM0NFM4MDNfTE8yCQkweDdGRkYwCisjZGVmaW5lIE1DNDRTODAzX0xPMl9TCQk0CisvKiBSRUdfQ0lSQ0FESiAqLworI2RlZmluZSBNQzQ0UzgwM19HMQkJMHgyMAorI2RlZmluZSBNQzQ0UzgwM19HMV9TCQk1CisjZGVmaW5lIE1DNDRTODAzX0czCQkweDgwCisjZGVmaW5lIE1DNDRTODAzX0czX1MJCTcKKyNkZWZpbmUgTUM0NFM4MDNfQ0lSQ0FESl9SRVMJMHgzMDAKKyNkZWZpbmUgTUM0NFM4MDNfQ0lSQ0FESl9SRVNfUwk4CisjZGVmaW5lIE1DNDRTODAzX0c2CQkweDQwMAorI2RlZmluZSBNQzQ0UzgwM19HNl9TCQkxMAorI2RlZmluZSBNQzQ0UzgwM19HNwkJMHg4MDAKKyNkZWZpbmUgTUM0NFM4MDNfRzdfUwkJMTEKKyNkZWZpbmUgTUM0NFM4MDNfUzEJCTB4MTAwMAorI2RlZmluZSBNQzQ0UzgwM19TMV9TCQkxMgorI2RlZmluZSBNQzQ0UzgwM19MUAkJMHg3RTAwMAorI2RlZmluZSBNQzQ0UzgwM19MUF9TCQkxMworI2RlZmluZSBNQzQ0UzgwM19DTFJGCQkweDgwMDAwCisjZGVmaW5lIE1DNDRTODAzX0NMUkZfUwkJMTkKKyNkZWZpbmUgTUM0NFM4MDNfQ0xJRgkJMHgxMDAwMDAKKyNkZWZpbmUgTUM0NFM4MDNfQ0xJRl9TCQkyMAorLyogUkVHX1RFU1QgKi8KKy8qIFJFR19ESUdUVU5FICovCisjZGVmaW5lIE1DNDRTODAzX0RBCQkweEYwCisjZGVmaW5lIE1DNDRTODAzX0RBX1MJCTQKKyNkZWZpbmUgTUM0NFM4MDNfWE9ECQkweDMwMAorI2RlZmluZSBNQzQ0UzgwM19YT0RfUwkJOAorI2RlZmluZSBNQzQ0UzgwM19SU1QJCTB4MTAwMDAKKyNkZWZpbmUgTUM0NFM4MDNfUlNUX1MJCTE2CisjZGVmaW5lIE1DNDRTODAzX0xPX1JFRgkJMHgxRkZGMDAKKyNkZWZpbmUgTUM0NFM4MDNfTE9fUkVGX1MJOAorI2RlZmluZSBNQzQ0UzgwM19BVAkJMHgyMDAwMDAKKyNkZWZpbmUgTUM0NFM4MDNfQVRfUwkJMjEKKyNkZWZpbmUgTUM0NFM4MDNfTVQJCTB4NDAwMDAwCisjZGVmaW5lIE1DNDRTODAzX01UX1MJCTIyCisvKiBSRUdfTE5BQUdDICovCisjZGVmaW5lIE1DNDRTODAzX0cJCTB4M0YwCisjZGVmaW5lIE1DNDRTODAzX0dfUwkJNAorI2RlZmluZSBNQzQ0UzgwM19BVDEJCTB4NDAwCisjZGVmaW5lIE1DNDRTODAzX0FUMV9TCQkxMAorI2RlZmluZSBNQzQ0UzgwM19BVDIJCTB4ODAwCisjZGVmaW5lIE1DNDRTODAzX0FUMl9TCQkxMQorI2RlZmluZSBNQzQ0UzgwM19ITF9HUl9FTgkweDgwMDAKKyNkZWZpbmUgTUM0NFM4MDNfSExfR1JfRU5fUwkxNQorI2RlZmluZSBNQzQ0UzgwM19BR0NfQU5fRElHCTB4MTAwMDAKKyNkZWZpbmUgTUM0NFM4MDNfQUdDX0FOX0RJR19TCTE2CisjZGVmaW5lIE1DNDRTODAzX0FUVEVOX0VOCTB4MjAwMDAKKyNkZWZpbmUgTUM0NFM4MDNfQVRURU5fRU5fUwkxNworI2RlZmluZSBNQzQ0UzgwM19BR0NfUkVBRF9FTgkweDQwMDAwCisjZGVmaW5lIE1DNDRTODAzX0FHQ19SRUFEX0VOX1MJMTgKKyNkZWZpbmUgTUM0NFM4MDNfTE5BMAkJMHg4MDAwMAorI2RlZmluZSBNQzQ0UzgwM19MTkEwX1MJCTE5CisjZGVmaW5lIE1DNDRTODAzX0FHQ19TRUwJMHgxMDAwMDAKKyNkZWZpbmUgTUM0NFM4MDNfQUdDX1NFTF9TCTIwCisjZGVmaW5lIE1DNDRTODAzX0FUMAkJMHgyMDAwMDAKKyNkZWZpbmUgTUM0NFM4MDNfQVQwX1MJCTIxCisjZGVmaW5lIE1DNDRTODAzX0IJCTB4QzAwMDAwCisjZGVmaW5lIE1DNDRTODAzX0JfUwkJMjIKKy8qIFJFR19EQVRBUkVHICovCisjZGVmaW5lIE1DNDRTODAzX0QJCTB4RjAKKyNkZWZpbmUgTUM0NFM4MDNfRF9TCQk0CisvKiBSRUdfUkVHVEVTVCAqLworLyogUkVHX1ZDT1RFU1QgKi8KKy8qIFJFR19MTkFHQUlOICovCisjZGVmaW5lIE1DNDRTODAzX0lGX1BXUgkJMHg3MDAKKyNkZWZpbmUgTUM0NFM4MDNfSUZfUFdSX1MJOAorI2RlZmluZSBNQzQ0UzgwM19SRl9QV1IJCTB4MzgwMAorI2RlZmluZSBNQzQ0UzgwM19SRl9QV1JfUwkxMQorI2RlZmluZSBNQzQ0UzgwM19MTkFfR0FJTgkweEZDMDAwCisjZGVmaW5lIE1DNDRTODAzX0xOQV9HQUlOX1MJMTQKKy8qIFJFR19JRCAqLworI2RlZmluZSBNQzQ0UzgwM19JRAkJMHgzRTAwCisjZGVmaW5lIE1DNDRTODAzX0lEX1MJCTkKKworLyogU29tZSBtYWNyb3MgdG8gcmVhZC93cml0ZSBmaWVsZHMgKi8KKworLyogRmlyc3Qgc2hpZnQsIHRoZW4gbWFzayAqLworI2RlZmluZSBNQzQ0UzgwM19SRUdfU00oX3ZhbCwgX3JlZykJCQkJCVwKKwkoKChfdmFsKSA8PCBfcmVnIyNfUykgJiAoX3JlZykpCisKKy8qIEZpcnN0IG1hc2ssIHRoZW4gc2hpZnQgKi8KKyNkZWZpbmUgTUM0NFM4MDNfUkVHX01TKF92YWwsIF9yZWcpCQkJCQlcCisJKCgoX3ZhbCkgJiAoX3JlZykpID4+IF9yZWcjI19TKQorCitzdHJ1Y3QgbWM0NHM4MDNfcHJpdiB7CisJc3RydWN0IG1jNDRzODAzX2NvbmZpZyAqY2ZnOworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjOworCXN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlOworCisJdTMyIGZyZXF1ZW5jeTsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL210MjA2MC5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL210MjA2MC5jCmluZGV4IDEyMjA2ZDcuLmM3YWJlM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9tdDIwNjAuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXQyMDYwLmMKQEAgLTI3OCw3ICsyNzgsNyBAQAogCXdoaWxlIChpKysgPCAxMCAmJiBtdDIwNjBfcmVhZHJlZyhwcml2LCBSRUdfTUlTQ19TVEFULCAmYikgPT0gMCAmJiAoYiAmICgxIDw8IDYpKSA9PSAwKQogCQltc2xlZXAoMjApOwogCi0JaWYgKGkgPCAxMCkgeworCWlmIChpIDw9IDEwKSB7CiAJCW10MjA2MF9yZWFkcmVnKHByaXYsIFJFR19GTV9GUkVRLCAmcHJpdi0+Zm1mcmVxKTsgLy8gbm93IGZpbmQgb3V0LCB3aGF0IGlzIGZtcmVxIHVzZWQgZm9yIDopCiAJCWRwcmludGsoImNhbGlicmF0aW9uIHdhcyBzdWNjZXNzZnVsOiAlZCIsIChpbnQpcHJpdi0+Zm1mcmVxKTsKIAl9IGVsc2UKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9tdDIweHguYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9tdDIweHguYwppbmRleCAzNWI3NjNhLi40NDYwOGFkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXQyMHh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL210MjB4eC5jCkBAIC02LDcgKzYsNyBAQAogICovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgInR1bmVyLWkyYy5oIgogI2luY2x1ZGUgIm10MjB4eC5oIgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXhsNTAwNXMuYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9teGw1MDA1cy5jCmluZGV4IDMxNTIyZDIuLjA4MDNkYWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9teGw1MDA1cy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy9teGw1MDA1cy5jCkBAIC00MDAzLDEyICs0MDAzLDExIEBACiAJLyogQ2hhbmdlIHR1bmVyIGZvciBuZXcgbW9kdWxhdGlvbiB0eXBlIGlmIHJlcWQgKi8KIAlpZiAocmVxX21vZGUgIT0gc3RhdGUtPmN1cnJlbnRfbW9kZSkgewogCQlzd2l0Y2ggKHJlcV9tb2RlKSB7Ci0JCWNhc2UgVlNCXzg6Ci0JCWNhc2UgUUFNXzY0OgotCQljYXNlIFFBTV8yNTY6Ci0JCWNhc2UgUUFNX0FVVE86CisJCWNhc2UgTVhMX0FUU0M6CisJCWNhc2UgTVhMX1FBTToKIAkJCXJlcV9idyAgPSBNWEw1MDA1U19CQU5EV0lEVEhfNk1IWjsKIAkJCWJyZWFrOworCQljYXNlIE1YTF9EVkJUOgogCQlkZWZhdWx0OgogCQkJLyogQXNzdW1lIERWQi1UICovCiAJCQlzd2l0Y2ggKHBhcmFtcy0+dS5vZmRtLmJhbmR3aWR0aCkgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL214bDUwMDd0LmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXhsNTAwN3QuYwppbmRleCAzZWMyODk0Li4yZDAyNjk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXhsNTAwN3QuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvbXhsNTAwN3QuYwpAQCAtMSw3ICsxLDcgQEAKIC8qCiAgKiAgbXhsNTAwN3QuYyAtIGRyaXZlciBmb3IgdGhlIE1heExpbmVhciBNeEw1MDA3VCBzaWxpY29uIHR1bmVyCiAgKgotICogIENvcHlyaWdodCAoQykgMjAwOCBNaWNoYWVsIEtydWZreSA8bWtydWZreUBsaW51eHR2Lm9yZz4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgTWljaGFlbCBLcnVma3kgPG1rcnVma3lAbGludXh0di5vcmc+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTY2LDIyICs2NiwxNyBAQAogI2RlZmluZSBNSHogMTAwMDAwMAogCiBlbnVtIG14bDUwMDd0X21vZGUgewotCU14TF9NT0RFX09UQV9EVkJUX0FUU0MgICAgICAgID0gICAgMCwKLQlNeExfTU9ERV9PVEFfTlRTQ19QQUxfR0ggICAgICA9ICAgIDEsCi0JTXhMX01PREVfT1RBX1BBTF9JQiAgICAgICAgICAgPSAgICAyLAotCU14TF9NT0RFX09UQV9QQUxfRF9TRUNBTV9LTCAgID0gICAgMywKLQlNeExfTU9ERV9PVEFfSVNEQlQgICAgICAgICAgICA9ICAgIDQsCi0JTXhMX01PREVfQ0FCTEVfRElHSVRBTCAgICAgICAgPSAweDEwLAotCU14TF9NT0RFX0NBQkxFX05UU0NfUEFMX0dIICAgID0gMHgxMSwKLQlNeExfTU9ERV9DQUJMRV9QQUxfSUIgICAgICAgICA9IDB4MTIsCi0JTXhMX01PREVfQ0FCTEVfUEFMX0RfU0VDQU1fS0wgPSAweDEzLAotCU14TF9NT0RFX0NBQkxFX1NDVEU0MCAgICAgICAgID0gMHgxNCwKKwlNeExfTU9ERV9JU0RCVCAgICAgPSAgICAwLAorCU14TF9NT0RFX0RWQlQgICAgICA9ICAgIDEsCisJTXhMX01PREVfQVRTQyAgICAgID0gICAgMiwKKwlNeExfTU9ERV9DQUJMRSAgICAgPSAweDEwLAogfTsKIAogZW51bSBteGw1MDA3dF9jaGlwX3ZlcnNpb24gewogCU14TF9VTktOT1dOX0lEICAgICA9IDB4MDAsCiAJTXhMXzUwMDdfVjFfRjEgICAgID0gMHgxMSwKIAlNeExfNTAwN19WMV9GMiAgICAgPSAweDEyLAorCU14TF81MDA3X1Y0ICAgICAgICA9IDB4MTQsCiAJTXhMXzUwMDdfVjJfMTAwX0YxID0gMHgyMSwKIAlNeExfNTAwN19WMl8xMDBfRjIgPSAweDIyLAogCU14TF81MDA3X1YyXzIwMF9GMSA9IDB4MjMsCkBAIC05Niw2NyArOTEsNjEgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIHN0cnVjdCByZWdfcGFpcl90IGluaXRfdGFiW10gPSB7Ci0JeyAweDBiLCAweDQ0IH0sIC8qIFhUQUwgKi8KLQl7IDB4MGMsIDB4NjAgfSwgLyogSUYgKi8KLQl7IDB4MTAsIDB4MDAgfSwgLyogTUlTQyAqLwotCXsgMHgxMiwgMHhjYSB9LCAvKiBJREFDICovCi0JeyAweDE2LCAweDkwIH0sIC8qIE1PREUgKi8KLQl7IDB4MzIsIDB4MzggfSwgLyogTU9ERSBBbmFsb2cvRGlnaXRhbCAqLwotCXsgMHhkOCwgMHgxOCB9LCAvKiBDTEtfT1VUX0VOQUJMRSAqLwotCXsgMHgyYywgMHgzNCB9LCAvKiBPVkVSUklERSAqLwotCXsgMHg0ZCwgMHg0MCB9LCAvKiBPVkVSUklERSAqLwotCXsgMHg3ZiwgMHgwMiB9LCAvKiBPVkVSUklERSAqLwotCXsgMHg5YSwgMHg1MiB9LCAvKiBPVkVSUklERSAqLwotCXsgMHg0OCwgMHg1YSB9LCAvKiBPVkVSUklERSAqLwotCXsgMHg3NiwgMHgxYSB9LCAvKiBPVkVSUklERSAqLwotCXsgMHg2YSwgMHg0OCB9LCAvKiBPVkVSUklERSAqLwotCXsgMHg2NCwgMHgyOCB9LCAvKiBPVkVSUklERSAqLwotCXsgMHg2NiwgMHhlNiB9LCAvKiBPVkVSUklERSAqLwotCXsgMHgzNSwgMHgwZSB9LCAvKiBPVkVSUklERSAqLwotCXsgMHg3ZSwgMHgwMSB9LCAvKiBPVkVSUklERSAqLwotCXsgMHg4MywgMHgwMCB9LCAvKiBPVkVSUklERSAqLwotCXsgMHgwNCwgMHgwYiB9LCAvKiBPVkVSUklERSAqLwotCXsgMHgwNSwgMHgwMSB9LCAvKiBUT1BfTUFTVEVSX0VOQUJMRSAqLworCXsgMHgwMiwgMHgwNiB9LAorCXsgMHgwMywgMHg0OCB9LAorCXsgMHgwNSwgMHgwNCB9LAorCXsgMHgwNiwgMHgxMCB9LAorCXsgMHgyZSwgMHgxNSB9LCAvKiBPVkVSUklERSAqLworCXsgMHgzMCwgMHgxMCB9LCAvKiBPVkVSUklERSAqLworCXsgMHg0NSwgMHg1OCB9LCAvKiBPVkVSUklERSAqLworCXsgMHg0OCwgMHgxOSB9LCAvKiBPVkVSUklERSAqLworCXsgMHg1MiwgMHgwMyB9LCAvKiBPVkVSUklERSAqLworCXsgMHg1MywgMHg0NCB9LCAvKiBPVkVSUklERSAqLworCXsgMHg2YSwgMHg0YiB9LCAvKiBPVkVSUklERSAqLworCXsgMHg3NiwgMHgwMCB9LCAvKiBPVkVSUklERSAqLworCXsgMHg3OCwgMHgxOCB9LCAvKiBPVkVSUklERSAqLworCXsgMHg3YSwgMHgxNyB9LCAvKiBPVkVSUklERSAqLworCXsgMHg4NSwgMHgwNiB9LCAvKiBPVkVSUklERSAqLworCXsgMHgwMSwgMHgwMSB9LCAvKiBUT1BfTUFTVEVSX0VOQUJMRSAqLwogCXsgMCwgMCB9CiB9OwogCiBzdGF0aWMgc3RydWN0IHJlZ19wYWlyX3QgaW5pdF90YWJfY2FibGVbXSA9IHsKLQl7IDB4MGIsIDB4NDQgfSwgLyogWFRBTCAqLwotCXsgMHgwYywgMHg2MCB9LCAvKiBJRiAqLwotCXsgMHgxMCwgMHgwMCB9LCAvKiBNSVNDICovCi0JeyAweDEyLCAweGNhIH0sIC8qIElEQUMgKi8KLQl7IDB4MTYsIDB4OTAgfSwgLyogTU9ERSAqLwotCXsgMHgzMiwgMHgzOCB9LCAvKiBNT0RFIEEvRCAqLwotCXsgMHg3MSwgMHgzZiB9LCAvKiBUT1AxICovCi0JeyAweDcyLCAweDNmIH0sIC8qIFRPUDIgKi8KLQl7IDB4NzQsIDB4M2YgfSwgLyogVE9QMyAqLwotCXsgMHhkOCwgMHgxOCB9LCAvKiBDTEtfT1VUX0VOQUJMRSAqLwotCXsgMHgyYywgMHgzNCB9LCAvKiBPVkVSUklERSAqLwotCXsgMHg0ZCwgMHg0MCB9LCAvKiBPVkVSUklERSAqLwotCXsgMHg3ZiwgMHgwMiB9LCAvKiBPVkVSUklERSAqLwotCXsgMHg5YSwgMHg1MiB9LCAvKiBPVkVSUklERSAqLwotCXsgMHg0OCwgMHg1YSB9LCAvKiBPVkVSUklERSAqLwotCXsgMHg3NiwgMHgxYSB9LCAvKiBPVkVSUklERSAqLwotCXsgMHg2YSwgMHg0OCB9LCAvKiBPVkVSUklERSAqLwotCXsgMHg2NCwgMHgyOCB9LCAvKiBPVkVSUklERSAqLwotCXsgMHg2NiwgMHhlNiB9LCAvKiBPVkVSUklERSAqLwotCXsgMHgzNSwgMHgwZSB9LCAvKiBPVkVSUklERSAqLwotCXsgMHg3ZSwgMHgwMSB9LCAvKiBPVkVSUklERSAqLwotCXsgMHgwNCwgMHgwYiB9LCAvKiBPVkVSUklERSAqLwotCXsgMHg2OCwgMHhiNCB9LCAvKiBPVkVSUklERSAqLwotCXsgMHgzNiwgMHgwMCB9LCAvKiBPVkVSUklERSAqLwotCXsgMHgwNSwgMHgwMSB9LCAvKiBUT1BfTUFTVEVSX0VOQUJMRSAqLworCXsgMHgwMiwgMHgwNiB9LAorCXsgMHgwMywgMHg0OCB9LAorCXsgMHgwNSwgMHgwNCB9LAorCXsgMHgwNiwgMHgxMCB9LAorCXsgMHgwOSwgMHgzZiB9LAorCXsgMHgwYSwgMHgzZiB9LAorCXsgMHgwYiwgMHgzZiB9LAorCXsgMHgyZSwgMHgxNSB9LCAvKiBPVkVSUklERSAqLworCXsgMHgzMCwgMHgxMCB9LCAvKiBPVkVSUklERSAqLworCXsgMHg0NSwgMHg1OCB9LCAvKiBPVkVSUklERSAqLworCXsgMHg0OCwgMHgxOSB9LCAvKiBPVkVSUklERSAqLworCXsgMHg1MiwgMHgwMyB9LCAvKiBPVkVSUklERSAqLworCXsgMHg1MywgMHg0NCB9LCAvKiBPVkVSUklERSAqLworCXsgMHg2YSwgMHg0YiB9LCAvKiBPVkVSUklERSAqLworCXsgMHg3NiwgMHgwMCB9LCAvKiBPVkVSUklERSAqLworCXsgMHg3OCwgMHgxOCB9LCAvKiBPVkVSUklERSAqLworCXsgMHg3YSwgMHgxNyB9LCAvKiBPVkVSUklERSAqLworCXsgMHg4NSwgMHgwNiB9LCAvKiBPVkVSUklERSAqLworCXsgMHgwMSwgMHgwMSB9LCAvKiBUT1BfTUFTVEVSX0VOQUJMRSAqLwogCXsgMCwgMCB9CiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBzdHJ1Y3QgcmVnX3BhaXJfdCByZWdfcGFpcl9yZnR1bmVbXSA9IHsKLQl7IDB4MTEsIDB4MDAgfSwgLyogYWJvcnQgdHVuZSAqLwotCXsgMHgxMywgMHgxNSB9LAotCXsgMHgxNCwgMHg0MCB9LAotCXsgMHgxNSwgMHgwZSB9LAotCXsgMHgxMSwgMHgwMiB9LCAvKiBzdGFydCB0dW5lICovCisJeyAweDBmLCAweDAwIH0sIC8qIGFib3J0IHR1bmUgKi8KKwl7IDB4MGMsIDB4MTUgfSwKKwl7IDB4MGQsIDB4NDAgfSwKKwl7IDB4MGUsIDB4MGUgfSwKKwl7IDB4MWYsIDB4ODcgfSwgLyogT1ZFUlJJREUgKi8KKwl7IDB4MjAsIDB4MWYgfSwgLyogT1ZFUlJJREUgKi8KKwl7IDB4MjEsIDB4ODcgfSwgLyogT1ZFUlJJREUgKi8KKwl7IDB4MjIsIDB4MWYgfSwgLyogT1ZFUlJJREUgKi8KKwl7IDB4ODAsIDB4MDEgfSwgLyogZnJlcSBkZXBlbmRlbnQgKi8KKwl7IDB4MGYsIDB4MDEgfSwgLyogc3RhcnQgdHVuZSAqLwogCXsgMCwgMCB9CiB9OwogCkBAIC0yMjcsNjMgKzIxNiwyMCBAQAogCQkJCSAgIHMzMiBpZl9kaWZmX291dF9sZXZlbCkKIHsKIAlzd2l0Y2ggKG1vZGUpIHsKLQljYXNlIE14TF9NT0RFX09UQV9EVkJUX0FUU0M6Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MzIsIDB4MGYsIDB4MDYpOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDM1LCAweGZmLCAweDBlKTsKKwljYXNlIE14TF9NT0RFX0FUU0M6CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDYsIDB4MWYsIDB4MTIpOwogCQlicmVhazsKLQljYXNlIE14TF9NT0RFX09UQV9JU0RCVDoKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgzMiwgMHgwZiwgMHgwNik7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MzUsIDB4ZmYsIDB4MTIpOworCWNhc2UgTXhMX01PREVfRFZCVDoKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwNiwgMHgxZiwgMHgxMSk7CiAJCWJyZWFrOwotCWNhc2UgTXhMX01PREVfT1RBX05UU0NfUEFMX0dIOgotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDE2LCAweDcwLCAweDAwKTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgzMiwgMHhmZiwgMHg4NSk7CisJY2FzZSBNeExfTU9ERV9JU0RCVDoKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwNiwgMHgxZiwgMHgxMCk7CiAJCWJyZWFrOwotCWNhc2UgTXhMX01PREVfT1RBX1BBTF9JQjoKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgxNiwgMHg3MCwgMHgxMCk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MzIsIDB4ZmYsIDB4ODUpOwotCQlicmVhazsKLQljYXNlIE14TF9NT0RFX09UQV9QQUxfRF9TRUNBTV9LTDoKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgxNiwgMHg3MCwgMHgyMCk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MzIsIDB4ZmYsIDB4ODUpOwotCQlicmVhazsKLQljYXNlIE14TF9NT0RFX0NBQkxFX0RJR0lUQUw6Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4NzEsIDB4ZmYsIDB4MDEpOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0X2NhYmxlLCAweDcyLCAweGZmLAorCWNhc2UgTXhMX01PREVfQ0FCTEU6CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4MDksIDB4ZmYsIDB4YzEpOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0X2NhYmxlLCAweDBhLCAweGZmLAogCQkJICAgICA4IC0gaWZfZGlmZl9vdXRfbGV2ZWwpOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0X2NhYmxlLCAweDc0LCAweGZmLCAweDE3KTsKLQkJYnJlYWs7Ci0JY2FzZSBNeExfTU9ERV9DQUJMRV9OVFNDX1BBTF9HSDoKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgxNiwgMHg3MCwgMHgwMCk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MzIsIDB4ZmYsIDB4ODUpOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0X2NhYmxlLCAweDcxLCAweGZmLCAweDAxKTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdF9jYWJsZSwgMHg3MiwgMHhmZiwKLQkJCSAgICAgOCAtIGlmX2RpZmZfb3V0X2xldmVsKTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdF9jYWJsZSwgMHg3NCwgMHhmZiwgMHgxNyk7Ci0JCWJyZWFrOwotCWNhc2UgTXhMX01PREVfQ0FCTEVfUEFMX0lCOgotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDE2LCAweDcwLCAweDEwKTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgzMiwgMHhmZiwgMHg4NSk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4NzEsIDB4ZmYsIDB4MDEpOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0X2NhYmxlLCAweDcyLCAweGZmLAotCQkJICAgICA4IC0gaWZfZGlmZl9vdXRfbGV2ZWwpOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0X2NhYmxlLCAweDc0LCAweGZmLCAweDE3KTsKLQkJYnJlYWs7Ci0JY2FzZSBNeExfTU9ERV9DQUJMRV9QQUxfRF9TRUNBTV9LTDoKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgxNiwgMHg3MCwgMHgyMCk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MzIsIDB4ZmYsIDB4ODUpOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0X2NhYmxlLCAweDcxLCAweGZmLCAweDAxKTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdF9jYWJsZSwgMHg3MiwgMHhmZiwKLQkJCSAgICAgOCAtIGlmX2RpZmZfb3V0X2xldmVsKTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdF9jYWJsZSwgMHg3NCwgMHhmZiwgMHgxNyk7Ci0JCWJyZWFrOwotCWNhc2UgTXhMX01PREVfQ0FCTEVfU0NURTQwOgotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0X2NhYmxlLCAweDM2LCAweGZmLCAweDA4KTsKLQkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdF9jYWJsZSwgMHg2OCwgMHhmZiwgMHhiYyk7Ci0JCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXRfY2FibGUsIDB4NzEsIDB4ZmYsIDB4MDEpOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0X2NhYmxlLCAweDcyLCAweGZmLAotCQkJICAgICA4IC0gaWZfZGlmZl9vdXRfbGV2ZWwpOwotCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0X2NhYmxlLCAweDc0LCAweGZmLCAweDE3KTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdF9jYWJsZSwgMHgwYiwgMHhmZiwgMHgxNyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCW14bF9mYWlsKC1FSU5WQUwpOwpAQCAtMzAyLDQzICsyNDgsNDMgQEAKIAkJdmFsID0gMHgwMDsKIAkJYnJlYWs7CiAJY2FzZSBNeExfSUZfNF81X01IWjoKLQkJdmFsID0gMHgyMDsKKwkJdmFsID0gMHgwMjsKIAkJYnJlYWs7CiAJY2FzZSBNeExfSUZfNF81N19NSFo6Ci0JCXZhbCA9IDB4MzA7CisJCXZhbCA9IDB4MDM7CiAJCWJyZWFrOwogCWNhc2UgTXhMX0lGXzVfTUhaOgotCQl2YWwgPSAweDQwOworCQl2YWwgPSAweDA0OwogCQlicmVhazsKIAljYXNlIE14TF9JRl81XzM4X01IWjoKLQkJdmFsID0gMHg1MDsKKwkJdmFsID0gMHgwNTsKIAkJYnJlYWs7CiAJY2FzZSBNeExfSUZfNl9NSFo6Ci0JCXZhbCA9IDB4NjA7CisJCXZhbCA9IDB4MDY7CiAJCWJyZWFrOwogCWNhc2UgTXhMX0lGXzZfMjhfTUhaOgotCQl2YWwgPSAweDcwOworCQl2YWwgPSAweDA3OwogCQlicmVhazsKIAljYXNlIE14TF9JRl85XzE5MTVfTUhaOgotCQl2YWwgPSAweDgwOworCQl2YWwgPSAweDA4OwogCQlicmVhazsKIAljYXNlIE14TF9JRl8zNV8yNV9NSFo6Ci0JCXZhbCA9IDB4OTA7CisJCXZhbCA9IDB4MDk7CiAJCWJyZWFrOwogCWNhc2UgTXhMX0lGXzM2XzE1X01IWjoKLQkJdmFsID0gMHhhMDsKKwkJdmFsID0gMHgwYTsKIAkJYnJlYWs7CiAJY2FzZSBNeExfSUZfNDRfTUhaOgotCQl2YWwgPSAweGIwOworCQl2YWwgPSAweDBiOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlteGxfZmFpbCgtRUlOVkFMKTsKIAkJcmV0dXJuOwogCX0KLQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDBjLCAweGYwLCB2YWwpOworCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDIsIDB4MGYsIHZhbCk7CiAKIAkvKiBzZXQgaW52ZXJ0ZWQgSUYgb3Igbm9ybWFsIElGICovCi0Jc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwYywgMHgwOCwgaW52ZXJ0X2lmID8gMHgwOCA6IDB4MDApOworCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDIsIDB4MTAsIGludmVydF9pZiA/IDB4MTAgOiAweDAwKTsKIAogCXJldHVybjsKIH0KQEAgLTM0Niw1NiArMjkyLDY4IEBACiBzdGF0aWMgdm9pZCBteGw1MDA3dF9zZXRfeHRhbF9mcmVxX2JpdHMoc3RydWN0IG14bDUwMDd0X3N0YXRlICpzdGF0ZSwKIAkJCQkJZW51bSBteGw1MDA3dF94dGFsX2ZyZXEgeHRhbF9mcmVxKQogewotCXU4IHZhbDsKLQogCXN3aXRjaCAoeHRhbF9mcmVxKSB7CiAJY2FzZSBNeExfWFRBTF8xNl9NSFo6Ci0JCXZhbCA9IDB4MDA7IC8qIHNlbGVjdCB4dGFsIGZyZXEgJiBSZWYgRnJlcSAqLworCQkvKiBzZWxlY3QgeHRhbCBmcmVxICYgcmVmIGZyZXEgKi8KKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwMywgMHhmMCwgMHgwMCk7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDUsIDB4MGYsIDB4MDApOwogCQlicmVhazsKIAljYXNlIE14TF9YVEFMXzIwX01IWjoKLQkJdmFsID0gMHgxMTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwMywgMHhmMCwgMHgxMCk7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDUsIDB4MGYsIDB4MDEpOwogCQlicmVhazsKIAljYXNlIE14TF9YVEFMXzIwXzI1X01IWjoKLQkJdmFsID0gMHgyMjsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwMywgMHhmMCwgMHgyMCk7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDUsIDB4MGYsIDB4MDIpOwogCQlicmVhazsKIAljYXNlIE14TF9YVEFMXzIwXzQ4X01IWjoKLQkJdmFsID0gMHgzMzsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwMywgMHhmMCwgMHgzMCk7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDUsIDB4MGYsIDB4MDMpOwogCQlicmVhazsKIAljYXNlIE14TF9YVEFMXzI0X01IWjoKLQkJdmFsID0gMHg0NDsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwMywgMHhmMCwgMHg0MCk7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDUsIDB4MGYsIDB4MDQpOwogCQlicmVhazsKIAljYXNlIE14TF9YVEFMXzI1X01IWjoKLQkJdmFsID0gMHg1NTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwMywgMHhmMCwgMHg1MCk7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDUsIDB4MGYsIDB4MDUpOwogCQlicmVhazsKIAljYXNlIE14TF9YVEFMXzI1XzE0X01IWjoKLQkJdmFsID0gMHg2NjsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwMywgMHhmMCwgMHg2MCk7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDUsIDB4MGYsIDB4MDYpOwogCQlicmVhazsKIAljYXNlIE14TF9YVEFMXzI3X01IWjoKLQkJdmFsID0gMHg3NzsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwMywgMHhmMCwgMHg3MCk7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDUsIDB4MGYsIDB4MDcpOwogCQlicmVhazsKIAljYXNlIE14TF9YVEFMXzI4XzhfTUhaOgotCQl2YWwgPSAweDg4OworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDAzLCAweGYwLCAweDgwKTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwNSwgMHgwZiwgMHgwOCk7CiAJCWJyZWFrOwogCWNhc2UgTXhMX1hUQUxfMzJfTUhaOgotCQl2YWwgPSAweDk5OworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDAzLCAweGYwLCAweDkwKTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwNSwgMHgwZiwgMHgwOSk7CiAJCWJyZWFrOwogCWNhc2UgTXhMX1hUQUxfNDBfTUhaOgotCQl2YWwgPSAweGFhOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDAzLCAweGYwLCAweGEwKTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwNSwgMHgwZiwgMHgwYSk7CiAJCWJyZWFrOwogCWNhc2UgTXhMX1hUQUxfNDRfTUhaOgotCQl2YWwgPSAweGJiOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDAzLCAweGYwLCAweGIwKTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwNSwgMHgwZiwgMHgwYik7CiAJCWJyZWFrOwogCWNhc2UgTXhMX1hUQUxfNDhfTUhaOgotCQl2YWwgPSAweGNjOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDAzLCAweGYwLCAweGMwKTsKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwNSwgMHgwZiwgMHgwYyk7CiAJCWJyZWFrOwogCWNhc2UgTXhMX1hUQUxfNDlfMzgxMV9NSFo6Ci0JCXZhbCA9IDB4ZGQ7CisJCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDMsIDB4ZjAsIDB4ZDApOworCQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDA1LCAweDBmLCAweDBkKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJbXhsX2ZhaWwoLUVJTlZBTCk7CiAJCXJldHVybjsKIAl9Ci0Jc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwYiwgMHhmZiwgdmFsKTsKIAogCXJldHVybjsKIH0KQEAgLTQxMiwxNiArMzcwLDExIEBACiAJbXhsNTAwN3Rfc2V0X2lmX2ZyZXFfYml0cyhzdGF0ZSwgY2ZnLT5pZl9mcmVxX2h6LCBjZmctPmludmVydF9pZik7CiAJbXhsNTAwN3Rfc2V0X3h0YWxfZnJlcV9iaXRzKHN0YXRlLCBjZmctPnh0YWxfZnJlcV9oeik7CiAKLQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDEwLCAweDQwLCBjZmctPmxvb3BfdGhydV9lbmFibGUgPDwgNik7CisJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHgwNCwgMHgwMSwgY2ZnLT5sb29wX3RocnVfZW5hYmxlKTsKKwlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDAzLCAweDA4LCBjZmctPmNsa19vdXRfZW5hYmxlIDw8IDMpOworCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MDMsIDB4MDcsIGNmZy0+Y2xrX291dF9hbXApOwogCi0Jc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgMHhkOCwgMHgwOCwgY2ZnLT5jbGtfb3V0X2VuYWJsZSA8PCAzKTsKLQotCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX2luaXQsIDB4MTAsIDB4MDcsIGNmZy0+Y2xrX291dF9hbXApOwotCi0JLyogc2V0IElEQUMgdG8gYXV0b21hdGljIG1vZGUgY29udHJvbCBieSBBR0MgKi8KLQlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9pbml0LCAweDEyLCAweDgwLCAweDAwKTsKLQotCWlmIChtb2RlID49IE14TF9NT0RFX0NBQkxFX0RJR0lUQUwpIHsKKwlpZiAobW9kZSA+PSBNeExfTU9ERV9DQUJMRSkgewogCQljb3B5X3JlZ19iaXRzKHN0YXRlLT50YWJfaW5pdCwgc3RhdGUtPnRhYl9pbml0X2NhYmxlKTsKIAkJcmV0dXJuIHN0YXRlLT50YWJfaW5pdF9jYWJsZTsKIAl9IGVsc2UKQEAgLTQ0Nyw3ICs0MDAsNyBAQAogCQkJICAgICAqIGFuZCBESUdfTU9ERUlOREVYX0NTRiAqLwogCQlicmVhazsKIAljYXNlIE14TF9CV183TUh6OgotCQl2YWwgPSAweDIxOworCQl2YWwgPSAweDJhOwogCQlicmVhazsKIAljYXNlIE14TF9CV184TUh6OgogCQl2YWwgPSAweDNmOwpAQCAtNDU2LDcgKzQwOSw3IEBACiAJCW14bF9mYWlsKC1FSU5WQUwpOwogCQlyZXR1cm47CiAJfQotCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX3JmdHVuZSwgMHgxMywgMHgzZiwgdmFsKTsKKwlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9yZnR1bmUsIDB4MGMsIDB4M2YsIHZhbCk7CiAKIAlyZXR1cm47CiB9CkBAIC00OTMsOCArNDQ2LDExIEBACiAJaWYgKHRlbXAgPiA3ODEyKQogCQlkaWdfcmZfZnJlcSsrOwogCi0Jc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfcmZ0dW5lLCAweDE0LCAweGZmLCAodTgpZGlnX3JmX2ZyZXEpOwotCXNldF9yZWdfYml0cyhzdGF0ZS0+dGFiX3JmdHVuZSwgMHgxNSwgMHhmZiwgKHU4KShkaWdfcmZfZnJlcSA+PiA4KSk7CisJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfcmZ0dW5lLCAweDBkLCAweGZmLCAodTgpIGRpZ19yZl9mcmVxKTsKKwlzZXRfcmVnX2JpdHMoc3RhdGUtPnRhYl9yZnR1bmUsIDB4MGUsIDB4ZmYsICh1OCkgKGRpZ19yZl9mcmVxID4+IDgpKTsKKworCWlmIChyZl9mcmVxID49IDMzMzAwMDAwMCkKKwkJc2V0X3JlZ19iaXRzKHN0YXRlLT50YWJfcmZ0dW5lLCAweDgwLCAweDQwLCAweDQwKTsKIAogCXJldHVybiBzdGF0ZS0+dGFiX3JmdHVuZTsKIH0KQEAgLTU1MSw5ICs1MDcsMTAgQEAKIHN0YXRpYyBpbnQgbXhsNTAwN3Rfc29mdF9yZXNldChzdHJ1Y3QgbXhsNTAwN3Rfc3RhdGUgKnN0YXRlKQogewogCXU4IGQgPSAweGZmOwotCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBzdGF0ZS0+aTJjX3Byb3BzLmFkZHIsIC5mbGFncyA9IDAsCi0JCQkgICAgICAgLmJ1ZiA9ICZkLCAubGVuID0gMSB9OwotCisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkciA9IHN0YXRlLT5pMmNfcHJvcHMuYWRkciwgLmZsYWdzID0gMCwKKwkJLmJ1ZiA9ICZkLCAubGVuID0gMQorCX07CiAJaW50IHJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjX3Byb3BzLmFkYXAsICZtc2csIDEpOwogCiAJaWYgKHJldCAhPSAxKSB7CkBAIC01ODAsOSArNTM3LDYgQEAKIAlpZiAobXhsX2ZhaWwocmV0KSkKIAkJZ290byBmYWlsOwogCW1kZWxheSgxKTsKLQotCXJldCA9IG14bDUwMDd0X3dyaXRlX3JlZyhzdGF0ZSwgMHgyYywgMHgzNSk7Ci0JbXhsX2ZhaWwocmV0KTsKIGZhaWw6CiAJcmV0dXJuIHJldDsKIH0KQEAgLTYxNSw3ICs1NjksNyBAQAogCSpyZl9sb2NrZWQgPSAwOwogCSpyZWZfbG9ja2VkID0gMDsKIAotCXJldCA9IG14bDUwMDd0X3JlYWRfcmVnKHN0YXRlLCAweGNmLCAmZCk7CisJcmV0ID0gbXhsNTAwN3RfcmVhZF9yZWcoc3RhdGUsIDB4ZDgsICZkKTsKIAlpZiAobXhsX2ZhaWwocmV0KSkKIAkJZ290byBmYWlsOwogCkBAIC02MjgsMzcgKzU4MiwxNCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgbXhsNTAwN3RfY2hlY2tfcmZfaW5wdXRfcG93ZXIoc3RydWN0IG14bDUwMDd0X3N0YXRlICpzdGF0ZSwKLQkJCQkJIHMzMiAqcmZfaW5wdXRfbGV2ZWwpCi17Ci0JdTggZDEsIGQyOwotCWludCByZXQ7Ci0KLQlyZXQgPSBteGw1MDA3dF9yZWFkX3JlZyhzdGF0ZSwgMHhiNywgJmQxKTsKLQlpZiAobXhsX2ZhaWwocmV0KSkKLQkJZ290byBmYWlsOwotCi0JcmV0ID0gbXhsNTAwN3RfcmVhZF9yZWcoc3RhdGUsIDB4YmYsICZkMik7Ci0JaWYgKG14bF9mYWlsKHJldCkpCi0JCWdvdG8gZmFpbDsKLQotCWQyID0gZDIgPj4gNDsKLQlpZiAoZDIgPiA3KQotCQlkMiArPSAweGYwOwotCi0JKnJmX2lucHV0X2xldmVsID0gKHMzMikoZDEgKyBkMiAtIDExMyk7Ci1mYWlsOgotCXJldHVybiByZXQ7Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCBteGw1MDA3dF9nZXRfc3RhdHVzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKnN0YXR1cykKIHsKIAlzdHJ1Y3QgbXhsNTAwN3Rfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7Ci0JaW50IHJmX2xvY2tlZCwgcmVmX2xvY2tlZDsKLQlzMzIgcmZfaW5wdXRfbGV2ZWwgPSAwOwotCWludCByZXQ7CisJaW50IHJmX2xvY2tlZCwgcmVmX2xvY2tlZCwgcmV0OworCisJKnN0YXR1cyA9IDA7CiAKIAlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQogCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwpAQCAtNjY5LDEwICs2MDAsOCBAQAogCW14bF9kZWJ1ZygiJXMlcyIsIHJmX2xvY2tlZCA/ICJyZiBsb2NrZWQgIiA6ICIiLAogCQkgIHJlZl9sb2NrZWQgPyAicmVmIGxvY2tlZCIgOiAiIik7CiAKLQlyZXQgPSBteGw1MDA3dF9jaGVja19yZl9pbnB1dF9wb3dlcihzdGF0ZSwgJnJmX2lucHV0X2xldmVsKTsKLQlpZiAobXhsX2ZhaWwocmV0KSkKLQkJZ290byBmYWlsOwotCW14bF9kZWJ1ZygicmYgaW5wdXQgcG93ZXI6ICVkIiwgcmZfaW5wdXRfbGV2ZWwpOworCWlmICgocmZfbG9ja2VkKSB8fCAocmVmX2xvY2tlZCkpCisJCSpzdGF0dXMgfD0gVFVORVJfU1RBVFVTX0xPQ0tFRDsKIGZhaWw6CiAJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKIAkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKQEAgLTY5NSwxMSArNjI0LDExIEBACiAJCXN3aXRjaCAocGFyYW1zLT51LnZzYi5tb2R1bGF0aW9uKSB7CiAJCWNhc2UgVlNCXzg6CiAJCWNhc2UgVlNCXzE2OgotCQkJbW9kZSA9IE14TF9NT0RFX09UQV9EVkJUX0FUU0M7CisJCQltb2RlID0gTXhMX01PREVfQVRTQzsKIAkJCWJyZWFrOwogCQljYXNlIFFBTV82NDoKIAkJY2FzZSBRQU1fMjU2OgotCQkJbW9kZSA9IE14TF9NT0RFX0NBQkxFX0RJR0lUQUw7CisJCQltb2RlID0gTXhMX01PREVfQ0FCTEU7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCW14bF9lcnIoIm1vZHVsYXRpb24gbm90IHNldCEiKTsKQEAgLTcyMSw3ICs2NTAsNyBAQAogCQkJbXhsX2VycigiYmFuZHdpZHRoIG5vdCBzZXQhIik7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQltb2RlID0gTXhMX01PREVfT1RBX0RWQlRfQVRTQzsKKwkJbW9kZSA9IE14TF9NT0RFX0RWQlQ7CiAJfSBlbHNlIHsKIAkJbXhsX2VycigibW9kdWxhdGlvbiB0eXBlIG5vdCBzdXBwb3J0ZWQhIik7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtNzUyLDk2ICs2ODEsMjAgQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG14bDUwMDd0X3NldF9hbmFsb2dfcGFyYW1zKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAotCQkJCSAgICAgIHN0cnVjdCBhbmFsb2dfcGFyYW1ldGVycyAqcGFyYW1zKQotewotCXN0cnVjdCBteGw1MDA3dF9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKLQllbnVtIG14bDUwMDd0X2J3X21oeiBidyA9IDA7IC8qIEZJWE1FICovCi0JZW51bSBteGw1MDA3dF9tb2RlIGNibF9tb2RlOwotCWVudW0gbXhsNTAwN3RfbW9kZSBvdGFfbW9kZTsKLQljaGFyICptb2RlX25hbWU7Ci0JaW50IHJldDsKLQl1MzIgZnJlcSA9IHBhcmFtcy0+ZnJlcXVlbmN5ICogNjI1MDA7Ci0KLSNkZWZpbmUgY2FibGUgMQotCWlmIChwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX01OKSB7Ci0JCWNibF9tb2RlID0gTXhMX01PREVfQ0FCTEVfTlRTQ19QQUxfR0g7Ci0JCW90YV9tb2RlID0gTXhMX01PREVfT1RBX05UU0NfUEFMX0dIOwotCQltb2RlX25hbWUgPSAiTU4iOwotCX0gZWxzZSBpZiAocGFyYW1zLT5zdGQgJiBWNEwyX1NURF9CKSB7Ci0JCWNibF9tb2RlID0gTXhMX01PREVfQ0FCTEVfUEFMX0lCOwotCQlvdGFfbW9kZSA9IE14TF9NT0RFX09UQV9QQUxfSUI7Ci0JCW1vZGVfbmFtZSA9ICJCIjsKLQl9IGVsc2UgaWYgKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfR0gpIHsKLQkJY2JsX21vZGUgPSBNeExfTU9ERV9DQUJMRV9OVFNDX1BBTF9HSDsKLQkJb3RhX21vZGUgPSBNeExfTU9ERV9PVEFfTlRTQ19QQUxfR0g7Ci0JCW1vZGVfbmFtZSA9ICJHSCI7Ci0JfSBlbHNlIGlmIChwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX1BBTF9JKSB7Ci0JCWNibF9tb2RlID0gTXhMX01PREVfQ0FCTEVfUEFMX0lCOwotCQlvdGFfbW9kZSA9IE14TF9NT0RFX09UQV9QQUxfSUI7Ci0JCW1vZGVfbmFtZSA9ICJJIjsKLQl9IGVsc2UgaWYgKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfREspIHsKLQkJY2JsX21vZGUgPSBNeExfTU9ERV9DQUJMRV9QQUxfRF9TRUNBTV9LTDsKLQkJb3RhX21vZGUgPSBNeExfTU9ERV9PVEFfUEFMX0RfU0VDQU1fS0w7Ci0JCW1vZGVfbmFtZSA9ICJESyI7Ci0JfSBlbHNlIGlmIChwYXJhbXMtPnN0ZCAmIFY0TDJfU1REX1NFQ0FNX0wpIHsKLQkJY2JsX21vZGUgPSBNeExfTU9ERV9DQUJMRV9QQUxfRF9TRUNBTV9LTDsKLQkJb3RhX21vZGUgPSBNeExfTU9ERV9PVEFfUEFMX0RfU0VDQU1fS0w7Ci0JCW1vZGVfbmFtZSA9ICJMIjsKLQl9IGVsc2UgaWYgKHBhcmFtcy0+c3RkICYgVjRMMl9TVERfU0VDQU1fTEMpIHsKLQkJY2JsX21vZGUgPSBNeExfTU9ERV9DQUJMRV9QQUxfRF9TRUNBTV9LTDsKLQkJb3RhX21vZGUgPSBNeExfTU9ERV9PVEFfUEFMX0RfU0VDQU1fS0w7Ci0JCW1vZGVfbmFtZSA9ICJMJyI7Ci0JfSBlbHNlIHsKLQkJbW9kZV9uYW1lID0gInh4IjsKLQkJLyogRklYTUUgKi8KLQkJY2JsX21vZGUgPSBNeExfTU9ERV9DQUJMRV9OVFNDX1BBTF9HSDsKLQkJb3RhX21vZGUgPSBNeExfTU9ERV9PVEFfTlRTQ19QQUxfR0g7Ci0JfQotCW14bF9kZWJ1Zygic2V0dGluZyBteGw1MDA3IHRvIHN5c3RlbSAlcyIsIG1vZGVfbmFtZSk7Ci0KLQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwotCi0JbXV0ZXhfbG9jaygmc3RhdGUtPmxvY2spOwotCi0JcmV0ID0gbXhsNTAwN3RfdHVuZXJfaW5pdChzdGF0ZSwgY2FibGUgPyBjYmxfbW9kZSA6IG90YV9tb2RlKTsKLQlpZiAobXhsX2ZhaWwocmV0KSkKLQkJZ290byBmYWlsOwotCi0JcmV0ID0gbXhsNTAwN3RfdHVuZXJfcmZfdHVuZShzdGF0ZSwgZnJlcSwgYncpOwotCWlmIChteGxfZmFpbChyZXQpKQotCQlnb3RvIGZhaWw7Ci0KLQlzdGF0ZS0+ZnJlcXVlbmN5ID0gZnJlcTsKLQlzdGF0ZS0+YmFuZHdpZHRoID0gMDsKLWZhaWw6Ci0JbXV0ZXhfdW5sb2NrKCZzdGF0ZS0+bG9jayk7Ci0KLQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOwotCi0JcmV0dXJuIHJldDsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgaW50IG14bDUwMDd0X2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJc3RydWN0IG14bDUwMDd0X3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OwogCWludCByZXQ7Ci0JdTggZDsKIAogCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCiAJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CiAKLQlyZXQgPSBteGw1MDA3dF9yZWFkX3JlZyhzdGF0ZSwgMHgwNSwgJmQpOwotCWlmIChteGxfZmFpbChyZXQpKQotCQlnb3RvIGZhaWw7Ci0KLQlyZXQgPSBteGw1MDA3dF93cml0ZV9yZWcoc3RhdGUsIDB4MDUsIGQgfCAweDAxKTsKKwkvKiB3YWtlIGZyb20gc3RhbmRieSAqLworCXJldCA9IG14bDUwMDd0X3dyaXRlX3JlZyhzdGF0ZSwgMHgwMSwgMHgwMSk7CiAJbXhsX2ZhaWwocmV0KTsKLWZhaWw6CisKIAlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQogCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOwogCkBAIC04NTIsMTggKzcwNSwxNiBAQAogewogCXN0cnVjdCBteGw1MDA3dF9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKIAlpbnQgcmV0OwotCXU4IGQ7CiAKIAlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQogCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwogCi0JcmV0ID0gbXhsNTAwN3RfcmVhZF9yZWcoc3RhdGUsIDB4MDUsICZkKTsKLQlpZiAobXhsX2ZhaWwocmV0KSkKLQkJZ290byBmYWlsOwotCi0JcmV0ID0gbXhsNTAwN3Rfd3JpdGVfcmVnKHN0YXRlLCAweDA1LCBkICYgfjB4MDEpOworCS8qIGVudGVyIHN0YW5kYnkgbW9kZSAqLworCXJldCA9IG14bDUwMDd0X3dyaXRlX3JlZyhzdGF0ZSwgMHgwMSwgMHgwMCk7CiAJbXhsX2ZhaWwocmV0KTsKLWZhaWw6CisJcmV0ID0gbXhsNTAwN3Rfd3JpdGVfcmVnKHN0YXRlLCAweDBmLCAweDAwKTsKKwlteGxfZmFpbChyZXQpOworCiAJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKIAkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKIApAQCAtOTExLDcgKzc2Miw2IEBACiAJLmluaXQgICAgICAgICAgICAgID0gbXhsNTAwN3RfaW5pdCwKIAkuc2xlZXAgICAgICAgICAgICAgPSBteGw1MDA3dF9zbGVlcCwKIAkuc2V0X3BhcmFtcyAgICAgICAgPSBteGw1MDA3dF9zZXRfcGFyYW1zLAotCS5zZXRfYW5hbG9nX3BhcmFtcyA9IG14bDUwMDd0X3NldF9hbmFsb2dfcGFyYW1zLAogCS5nZXRfc3RhdHVzICAgICAgICA9IG14bDUwMDd0X2dldF9zdGF0dXMsCiAJLmdldF9mcmVxdWVuY3kgICAgID0gbXhsNTAwN3RfZ2V0X2ZyZXF1ZW5jeSwKIAkuZ2V0X2JhbmR3aWR0aCAgICAgPSBteGw1MDA3dF9nZXRfYmFuZHdpZHRoLApAQCAtOTI0LDcgKzc3NCw3IEBACiAJaW50IHJldDsKIAl1OCBpZDsKIAotCXJldCA9IG14bDUwMDd0X3JlYWRfcmVnKHN0YXRlLCAweGQzLCAmaWQpOworCXJldCA9IG14bDUwMDd0X3JlYWRfcmVnKHN0YXRlLCAweGQ5LCAmaWQpOwogCWlmIChteGxfZmFpbChyZXQpKQogCQlnb3RvIGZhaWw7CiAKQEAgLTk0Nyw4ICs3OTcsMTIgQEAKIAljYXNlIE14TF81MDA3X1YyXzIwMF9GMjoKIAkJbmFtZSA9ICJNeEw1MDA3LnYyLjIwMC5mMiI7CiAJCWJyZWFrOworCWNhc2UgTXhMXzUwMDdfVjQ6CisJCW5hbWUgPSAiTXhMNTAwN1QudjQiOworCQlicmVhazsKIAlkZWZhdWx0OgogCQluYW1lID0gIk14TDUwMDdUIjsKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHVua25vd24gcmV2ICglMDJ4KVxuIiwgX19mdW5jX18sIGlkKTsKIAkJaWQgPSBNeExfVU5LTk9XTl9JRDsKIAl9CiAJc3RhdGUtPmNoaXBfaWQgPSBpZDsKQEAgLTk3NSw3ICs4MjksNyBAQAogCW11dGV4X2xvY2soJm14bDUwMDd0X2xpc3RfbXV0ZXgpOwogCWluc3RhbmNlID0gaHlicmlkX3R1bmVyX3JlcXVlc3Rfc3RhdGUoc3RydWN0IG14bDUwMDd0X3N0YXRlLCBzdGF0ZSwKIAkJCQkJICAgICAgaHlicmlkX3R1bmVyX2luc3RhbmNlX2xpc3QsCi0JCQkJCSAgICAgIGkyYywgYWRkciwgIm14bDUwMDciKTsKKwkJCQkJICAgICAgaTJjLCBhZGRyLCAibXhsNTAwN3QiKTsKIAlzd2l0Y2ggKGluc3RhbmNlKSB7CiAJY2FzZSAwOgogCQlnb3RvIGZhaWw7CkBAIC0xMDE4LDcgKzg3Miw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oIk1heExpbmVhciBNeEw1MDA3VCBTaWxpY29uIElDIHR1bmVyIGRyaXZlciIpOwogTU9EVUxFX0FVVEhPUigiTWljaGFlbCBLcnVma3kgPG1rcnVma3lAbGludXh0di5vcmc+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7Ci1NT0RVTEVfVkVSU0lPTigiMC4xIik7CitNT0RVTEVfVkVSU0lPTigiMC4yIik7CiAKIC8qCiAgKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1jb21tb24uYyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1jb21tb24uYwppbmRleCA2ZmI1YjQ1Li5mYzc2YzMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtY29tbW9uLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWNvbW1vbi5jCkBAIC00OTAsOSArNDkwLDkgQEAKIAkJdGRhX2RiZygic20gPSAlZCwgc21fbHQgPSAlZCwgc21feHQgPSAlZFxuIiwgc20sIHNtX2x0LCBzbV94dCk7CiAKIAlyZWdzW1JfRVAzXSAgJj0gfjB4ZTA7IC8qIGNsZWFyIHNtLCBzbV9sdCwgc21feHQgKi8KLQlyZWdzW1JfRVAzXSAgfD0gc20gICAgPyAoMSA8PCA3KSA6IDAgfAotCQkJc21fbHQgPyAoMSA8PCA2KSA6IDAgfAotCQkJc21feHQgPyAoMSA8PCA1KSA6IDA7CisJcmVnc1tSX0VQM10gIHw9IChzbSAgICA/ICgxIDw8IDcpIDogMCkgfAorCQkJKHNtX2x0ID8gKDEgPDwgNikgOiAwKSB8CisJCQkoc21feHQgPyAoMSA8PCA1KSA6IDApOwogCiAJcmV0dXJuIHRkYTE4MjcxX3dyaXRlX3JlZ3MoZmUsIFJfRVAzLCAxKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1mZS5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMKaW5kZXggMWI0OGI1ZC4uYjEwOTM1NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLWZlLmMKQEAgLTgxOCw2ICs4MTgsMzggQEAKIAlyZXR1cm4gcmV0OwogfQogCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCB0ZGExODI3MV9hZ2Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHRkYTE4MjcxX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAocHJpdi0+Y29uZmlnKSB7CisJY2FzZSAwOgorCQkvKiBubyBMTkEgKi8KKwkJdGRhX2RiZygibm8gYWdjIGNvbmZpZ3VyYXRpb24gcHJvdmlkZWRcbiIpOworCQlicmVhazsKKwljYXNlIDM6CisJCS8qIHN3aXRjaCB3aXRoIEdQSU8gb2Ygc2FhNzEzeCAqLworCQl0ZGFfZGJnKCJpbnZva2luZyBjYWxsYmFja1xuIik7CisJCWlmIChmZS0+Y2FsbGJhY2spCisJCQlyZXQgPSBmZS0+Y2FsbGJhY2socHJpdi0+aTJjX3Byb3BzLmFkYXAtPmFsZ29fZGF0YSwKKwkJCQkJICAgRFZCX0ZST05URU5EX0NPTVBPTkVOVF9UVU5FUiwKKwkJCQkJICAgVERBMTgyNzFfQ0FMTEJBQ0tfQ01EX0FHQ19FTkFCTEUsCisJCQkJCSAgIHByaXYtPm1vZGUpOworCQlicmVhazsKKwljYXNlIDE6CisJY2FzZSAyOgorCWRlZmF1bHQ6CisJCS8qIG4vYSAtIGN1cnJlbnRseSBub3Qgc3VwcG9ydGVkICovCisJCXRkYV9lcnIoInVuc3VwcG9ydGVkIGNvbmZpZ3VyYXRpb246ICVkXG4iLCBwcml2LT5jb25maWcpOworCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCB0ZGExODI3MV90dW5lKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAogCQkJIHN0cnVjdCB0ZGExODI3MV9zdGRfbWFwX2l0ZW0gKm1hcCwgdTMyIGZyZXEsIHUzMiBidykKIHsKQEAgLTgyNyw2ICs4NTksMTAgQEAKIAl0ZGFfZGJnKCJmcmVxID0gJWQsIGlmYyA9ICVkLCBidyA9ICVkLCBhZ2NfbW9kZSA9ICVkLCBzdGQgPSAlZFxuIiwKIAkJZnJlcSwgbWFwLT5pZl9mcmVxLCBidywgbWFwLT5hZ2NfbW9kZSwgbWFwLT5zdGQpOwogCisJcmV0ID0gdGRhMTgyNzFfYWdjKGZlKTsKKwlpZiAodGRhX2ZhaWwocmV0KSkKKwkJdGRhX3dhcm4oImZhaWxlZCB0byBjb25maWd1cmUgYWdjXG4iKTsKKwogCXJldCA9IHRkYTE4MjcxX2luaXQoZmUpOwogCWlmICh0ZGFfZmFpbChyZXQpKQogCQlnb3RvIGZhaWw7CkBAIC0xMTU5LDYgKzExOTUsNyBAQAogCQkvKiBuZXcgdHVuZXIgaW5zdGFuY2UgKi8KIAkJcHJpdi0+Z2F0ZSA9IChjZmcpID8gY2ZnLT5nYXRlIDogVERBMTgyNzFfR0FURV9BVVRPOwogCQlwcml2LT5yb2xlID0gKGNmZykgPyBjZmctPnJvbGUgOiBUREExODI3MV9NQVNURVI7CisJCXByaXYtPmNvbmZpZyA9IChjZmcpID8gY2ZnLT5jb25maWcgOiAwOwogCQlwcml2LT5jYWxfaW5pdGlhbGl6ZWQgPSBmYWxzZTsKIAkJbXV0ZXhfaW5pdCgmcHJpdi0+bG9jayk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1wcml2LmggYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhMTgyNzEtcHJpdi5oCmluZGV4IDgxYTczOTMuLjc0YmViMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS1wcml2LmgKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLXByaXYuaApAQCAtOTEsMTEgKzkxLDYgQEAKIAlUREExODI3MV9DQUxfUExMLAogfTsKIAotZW51bSB0ZGExODI3MV9tb2RlIHsKLQlUREExODI3MV9BTkFMT0csCi0JVERBMTgyNzFfRElHSVRBTCwKLX07Ci0KIHN0cnVjdCB0ZGExODI3MV9tYXBfbGF5b3V0OwogCiBlbnVtIHRkYTE4MjcxX3ZlciB7CkBAIC0xMTQsNiArMTA5LDcgQEAKIAllbnVtIHRkYTE4MjcxX2kyY19nYXRlIGdhdGU7CiAJZW51bSB0ZGExODI3MV92ZXIgaWQ7CiAKKwl1bnNpZ25lZCBpbnQgY29uZmlnOyAvKiBpbnRlcmZhY2UgdG8gc2FhNzEzeCAvIHRkYTgyOXggKi8KIAl1bnNpZ25lZCBpbnQgdG1fcmZjYWw7CiAJdW5zaWduZWQgaW50IGNhbF9pbml0aWFsaXplZDoxOwogCXVuc2lnbmVkIGludCBzbWFsbF9pMmM6MTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGExODI3MS5oIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLmgKaW5kZXggN2RiOTgzMS4uNTNhOTg5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLmgKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTE4MjcxLmgKQEAgLTc5LDYgKzc5LDE2IEBACiAKIAkvKiBzb21lIGkyYyBwcm92aWRlcnMgY2FudCB3cml0ZSBhbGwgMzkgcmVnaXN0ZXJzIGF0IG9uY2UgKi8KIAl1bnNpZ25lZCBpbnQgc21hbGxfaTJjOjE7CisKKwkvKiBpbnRlcmZhY2UgdG8gc2FhNzEzeCAvIHRkYTgyOXggKi8KKwl1bnNpZ25lZCBpbnQgY29uZmlnOworfTsKKworI2RlZmluZSBUREExODI3MV9DQUxMQkFDS19DTURfQUdDX0VOQUJMRSAwCisKK2VudW0gdGRhMTgyNzFfbW9kZSB7CisJVERBMTgyNzFfQU5BTE9HID0gMCwKKwlUREExODI3MV9ESUdJVEFMLAogfTsKIAogI2lmIGRlZmluZWQoQ09ORklHX01FRElBX1RVTkVSX1REQTE4MjcxKSB8fCAoZGVmaW5lZChDT05GSUdfTUVESUFfVFVORVJfVERBMTgyNzFfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhODI3eC5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTgyN3guYwppbmRleCBmNGQ5MzFmLi4zNmE3YmM3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhODI3eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4Mjd4LmMKQEAgLTEzMiwxMSArMTMyLDMxIEBACiAJeyAubG9tYXggPSAgICAgICAgIDAsIC5zcGQgPSAwLCAuYnMgPSAwLCAuYnAgPSAwLCAuY3AgPSAwLCAuZ2MzID0gMCwgLmRpdjFwNSA9IDB9CiB9OwogCitzdGF0aWMgaW50IHR1bmVyX3RyYW5zZmVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJICBzdHJ1Y3QgaTJjX21zZyAqbXNnLAorCQkJICBjb25zdCBpbnQgc2l6ZSkKK3sKKwlpbnQgcmM7CisJc3RydWN0IHRkYTgyN3hfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKwlyYyA9IGkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgbXNnLCBzaXplKTsKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCisJaWYgKHJjID49IDAgJiYgcmMgIT0gc2l6ZSkKKwkJcmV0dXJuIC1FSU87CisKKwlyZXR1cm4gcmM7Cit9CisKIHN0YXRpYyBpbnQgdGRhODI3eG9fc2V0X3BhcmFtcyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKIAkJCSAgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKIHsKIAlzdHJ1Y3QgdGRhODI3eF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CiAJdTggYnVmWzE0XTsKKwlpbnQgcmM7CiAKIAlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gcHJpdi0+aTJjX2FkZHIsIC5mbGFncyA9IDAsCiAJCQkgICAgICAgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IHNpemVvZihidWYpIH07CkBAIC0xODMsMjcgKzIwMywyOSBAQAogCWJ1ZlsxM10gPSAweDQwOwogCiAJbXNnLmxlbiA9IDE0OwotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7Ci0JaWYgKGkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSkgIT0gMSkgewotCQlwcmludGsoIiVzOiBjb3VsZCBub3Qgd3JpdGUgdG8gdHVuZXIgYXQgYWRkcjogMHglMDJ4XG4iLAotCQkgICAgICAgX19mdW5jX18sIHByaXYtPmkyY19hZGRyIDw8IDEpOwotCQlyZXR1cm4gLUVJTzsKLQl9CisJcmMgPSB0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBlcnI7CisKIAltc2xlZXAoNTAwKTsKIAkvKiBjb3JyZWN0IENQIHZhbHVlICovCiAJYnVmWzBdID0gMHgzMDsKIAlidWZbMV0gPSAweDUwICsgdGRhODI3eF90YWJsZVtpXS5jcDsKIAltc2cubGVuID0gMjsKIAotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwlyYyA9IHR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIGVycjsKIAogCXByaXYtPmZyZXF1ZW5jeSA9IHBhcmFtcy0+ZnJlcXVlbmN5OwogCXByaXYtPmJhbmR3aWR0aCA9IChmZS0+b3BzLmluZm8udHlwZSA9PSBGRV9PRkRNKSA/IHBhcmFtcy0+dS5vZmRtLmJhbmR3aWR0aCA6IDA7CiAKIAlyZXR1cm4gMDsKKworZXJyOgorCXByaW50ayhLRVJOX0VSUiAiJXM6IGNvdWxkIG5vdCB3cml0ZSB0byB0dW5lciBhdCBhZGRyOiAweCUwMnhcbiIsCisJICAgICAgIF9fZnVuY19fLCBwcml2LT5pMmNfYWRkciA8PCAxKTsKKwlyZXR1cm4gcmM7CiB9CiAKIHN0YXRpYyBpbnQgdGRhODI3eG9fc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCkBAIC0yMTQsOSArMjM2LDcgQEAKIAkJCSAgICAgICAuYnVmID0gYnVmLCAubGVuID0gc2l6ZW9mKGJ1ZikgfTsKIAogCWRwcmludGsoIiVzOlxuIiwgX19mdW5jX18pOwotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAKIAlpZiAocHJpdi0+Y2ZnICYmIHByaXYtPmNmZy0+c2xlZXApCiAJCXByaXYtPmNmZy0+c2xlZXAoZmUpOwpAQCAtMjY2LDQ0ICsyODYsNDQgQEAKIAogCW1zZy5idWYgPSB0dW5lcl9yZWc7CiAJbXNnLmxlbiA9IDg7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAKIAltc2cuYnVmID0gcmVnMjsKIAltc2cubGVuID0gMjsKIAlyZWcyWzBdID0gMHg4MDsKIAlyZWcyWzFdID0gMDsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCXJlZzJbMF0gPSAweDYwOwogCXJlZzJbMV0gPSAweGJmOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOwogCiAJcmVnMlswXSA9IDB4MzA7CiAJcmVnMlsxXSA9IHR1bmVyX3JlZ1s0XSArIDB4ODA7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAKIAltc2xlZXAoMSk7CiAJcmVnMlswXSA9IDB4MzA7CiAJcmVnMlsxXSA9IHR1bmVyX3JlZ1s0XSArIDQ7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAKIAltc2xlZXAoMSk7CiAJcmVnMlswXSA9IDB4MzA7CiAJcmVnMlsxXSA9IHR1bmVyX3JlZ1s0XTsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKIAogCW1zbGVlcCg1NTApOwogCXJlZzJbMF0gPSAweDMwOwogCXJlZzJbMV0gPSAodHVuZXJfcmVnWzRdICYgMHhmYykgKyB0ZGE4Mjd4X3RhYmxlW2ldLmNwOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOwogCiAJcmVnMlswXSA9IDB4NjA7CiAJcmVnMlsxXSA9IDB4M2Y7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAKIAlyZWcyWzBdID0gMHg4MDsKIAlyZWcyWzFdID0gMHgwODsgICAvKiBWc3luYyBlbiAqLwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOwogCiAJcHJpdi0+ZnJlcXVlbmN5ID0gcGFyYW1zLT5mcmVxdWVuY3k7CiAKQEAgLTMxNyw3ICszMzcsNyBAQAogCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBwcml2LT5pMmNfYWRkciwgLmZsYWdzID0gMCwKIAkJCSAgICAgICAuYnVmID0gZGF0YSwgLmxlbiA9IDJ9OwogCi0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMzMxLDcgKzM1MSw3IEBACiAJdTggIGdjMzsKIH07CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdGRhODI3eGFfZGF0YSB0ZGE4Mjd4YV9kdmJ0W10gPSB7CitzdGF0aWMgc3RydWN0IHRkYTgyN3hhX2RhdGEgdGRhODI3eGFfZHZidFtdID0gewogCXsgLmxvbWF4ID0gIDU2ODc1MDAwLCAuc3ZjbyA9IDMsIC5zcGQgPSA0LCAuc2NyID0gMCwgLnNicyA9IDAsIC5nYzMgPSAxfSwKIAl7IC5sb21heCA9ICA2NzI1MDAwMCwgLnN2Y28gPSAwLCAuc3BkID0gMywgLnNjciA9IDAsIC5zYnMgPSAwLCAuZ2MzID0gMX0sCiAJeyAubG9tYXggPSAgODEyNTAwMDAsIC5zdmNvID0gMSwgLnNwZCA9IDMsIC5zY3IgPSAwLCAuc2JzID0gMCwgLmdjMyA9IDF9LApAQCAtMzYxLDYgKzM4MSwzNiBAQAogCXsgLmxvbWF4ID0gICAgICAgICAwLCAuc3ZjbyA9IDAsIC5zcGQgPSAwLCAuc2NyID0gMCwgLnNicyA9IDAsIC5nYzMgPSAwfQogfTsKIAorc3RhdGljIHN0cnVjdCB0ZGE4Mjd4YV9kYXRhIHRkYTgyN3hhX2R2YmNbXSA9IHsKKwl7IC5sb21heCA9ICA1MDEyNTAwMCwgLnN2Y28gPSAyLCAuc3BkID0gNCwgLnNjciA9IDIsIC5zYnMgPSAwLCAuZ2MzID0gM30sCisJeyAubG9tYXggPSAgNTg1MDAwMDAsIC5zdmNvID0gMywgLnNwZCA9IDQsIC5zY3IgPSAyLCAuc2JzID0gMCwgLmdjMyA9IDN9LAorCXsgLmxvbWF4ID0gIDY5MjUwMDAwLCAuc3ZjbyA9IDAsIC5zcGQgPSAzLCAuc2NyID0gMiwgLnNicyA9IDAsIC5nYzMgPSAzfSwKKwl7IC5sb21heCA9ICA4MzYyNTAwMCwgLnN2Y28gPSAxLCAuc3BkID0gMywgLnNjciA9IDIsIC5zYnMgPSAwLCAuZ2MzID0gM30sCisJeyAubG9tYXggPSAgOTc1MDAwMDAsIC5zdmNvID0gMiwgLnNwZCA9IDMsIC5zY3IgPSAyLCAuc2JzID0gMCwgLmdjMyA9IDN9LAorCXsgLmxvbWF4ID0gMTAwMjUwMDAwLCAuc3ZjbyA9IDIsIC5zcGQgPSAzLCAuc2NyID0gMiwgLnNicyA9IDEsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDExNzAwMDAwMCwgLnN2Y28gPSAzLCAuc3BkID0gMywgLnNjciA9IDIsIC5zYnMgPSAxLCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSAxMzg1MDAwMDAsIC5zdmNvID0gMCwgLnNwZCA9IDIsIC5zY3IgPSAyLCAuc2JzID0gMSwgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gMTY3MjUwMDAwLCAuc3ZjbyA9IDEsIC5zcGQgPSAyLCAuc2NyID0gMiwgLnNicyA9IDEsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDE4NzAwMDAwMCwgLnN2Y28gPSAyLCAuc3BkID0gMiwgLnNjciA9IDIsIC5zYnMgPSAxLCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSAyMDA1MDAwMDAsIC5zdmNvID0gMiwgLnNwZCA9IDIsIC5zY3IgPSAyLCAuc2JzID0gMiwgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gMjM0MDAwMDAwLCAuc3ZjbyA9IDMsIC5zcGQgPSAyLCAuc2NyID0gMiwgLnNicyA9IDIsIC5nYzMgPSAzfSwKKwl7IC5sb21heCA9IDI3NzAwMDAwMCwgLnN2Y28gPSAwLCAuc3BkID0gMSwgLnNjciA9IDIsIC5zYnMgPSAyLCAuZ2MzID0gM30sCisJeyAubG9tYXggPSAzMjUwMDAwMDAsIC5zdmNvID0gMSwgLnNwZCA9IDEsIC5zY3IgPSAyLCAuc2JzID0gMiwgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gMzM0NTAwMDAwLCAuc3ZjbyA9IDEsIC5zcGQgPSAxLCAuc2NyID0gMiwgLnNicyA9IDMsIC5nYzMgPSAzfSwKKwl7IC5sb21heCA9IDQwMTAwMDAwMCwgLnN2Y28gPSAyLCAuc3BkID0gMSwgLnNjciA9IDIsIC5zYnMgPSAzLCAuZ2MzID0gM30sCisJeyAubG9tYXggPSA0NjgwMDAwMDAsIC5zdmNvID0gMywgLnNwZCA9IDEsIC5zY3IgPSAyLCAuc2JzID0gMywgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gNTM1MDAwMDAwLCAuc3ZjbyA9IDAsIC5zcGQgPSAwLCAuc2NyID0gMSwgLnNicyA9IDMsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDU1NDAwMDAwMCwgLnN2Y28gPSAwLCAuc3BkID0gMCwgLnNjciA9IDIsIC5zYnMgPSAzLCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSA2MzgwMDAwMDAsIC5zdmNvID0gMSwgLnNwZCA9IDAsIC5zY3IgPSAxLCAuc2JzID0gNCwgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gNjY5MDAwMDAwLCAuc3ZjbyA9IDEsIC5zcGQgPSAwLCAuc2NyID0gMiwgLnNicyA9IDQsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDcyMDAwMDAwMCwgLnN2Y28gPSAyLCAuc3BkID0gMCwgLnNjciA9IDEsIC5zYnMgPSA0LCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSA4MDIwMDAwMDAsIC5zdmNvID0gMiwgLnNwZCA9IDAsIC5zY3IgPSAyLCAuc2JzID0gNCwgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gODM1MDAwMDAwLCAuc3ZjbyA9IDMsIC5zcGQgPSAwLCAuc2NyID0gMSwgLnNicyA9IDQsIC5nYzMgPSAxfSwKKwl7IC5sb21heCA9IDg4NTAwMDAwMCwgLnN2Y28gPSAzLCAuc3BkID0gMCwgLnNjciA9IDEsIC5zYnMgPSA0LCAuZ2MzID0gMX0sCisJeyAubG9tYXggPSA5MTEwMDAwMDAsIC5zdmNvID0gMywgLnNwZCA9IDAsIC5zY3IgPSAyLCAuc2JzID0gNCwgLmdjMyA9IDF9LAorCXsgLmxvbWF4ID0gICAgICAgICAwLCAuc3ZjbyA9IDAsIC5zcGQgPSAwLCAuc2NyID0gMCwgLnNicyA9IDAsIC5nYzMgPSAwfQorfTsKKwogc3RhdGljIHN0cnVjdCB0ZGE4Mjd4YV9kYXRhIHRkYTgyN3hhX2FuYWxvZ1tdID0gewogCXsgLmxvbWF4ID0gIDU2ODc1MDAwLCAuc3ZjbyA9IDMsIC5zcGQgPSA0LCAuc2NyID0gMCwgLnNicyA9IDAsIC5nYzMgPSAzfSwKIAl7IC5sb21heCA9ICA2NzI1MDAwMCwgLnN2Y28gPSAwLCAuc3BkID0gMywgLnNjciA9IDAsIC5zYnMgPSAwLCAuZ2MzID0gM30sCkBAIC0zOTgsMTMgKzQ0OCw4IEBACiAJCQkgICAgICAgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IHNpemVvZihidWYpIH07CiAKIAlkcHJpbnRrKCIlczpcbiIsIF9fZnVuY19fKTsKLQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwogCi0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKLQotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisJdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOwogCiAJaWYgKHByaXYtPmNmZyAmJiBwcml2LT5jZmctPnNsZWVwKQogCQlwcml2LT5jZmctPnNsZWVwKGZlKTsKQEAgLTQ1NSw3ICs1MDAsNyBAQAogCQlidWZbMV0gPSBoaWdoID8gMCA6IDE7CiAJCWlmIChwcml2LT5jZmctPmNvbmZpZyA9PSAyKQogCQkJYnVmWzFdID0gaGlnaCA/IDEgOiAwOwotCQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCQl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAJCWJyZWFrOwogCWNhc2UgMzogLyogc3dpdGNoIHdpdGggR1BJTyBvZiBzYWE3MTN4ICovCiAJCWlmIChmZS0+Y2FsbGJhY2spCkBAIC00NjksMTIgKzUxNCwxMyBAQAogCQkJICAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW1zKQogewogCXN0cnVjdCB0ZGE4Mjd4X3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwlzdHJ1Y3QgdGRhODI3eGFfZGF0YSAqZnJlcXVlbmN5X21hcCA9IHRkYTgyN3hhX2R2YnQ7CiAJdTggYnVmWzExXTsKIAogCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsgLmFkZHIgPSBwcml2LT5pMmNfYWRkciwgLmZsYWdzID0gMCwKIAkJCSAgICAgICAuYnVmID0gYnVmLCAubGVuID0gc2l6ZW9mKGJ1ZikgfTsKIAotCWludCBpLCB0dW5lcl9mcmVxLCBpZl9mcmVxOworCWludCBpLCB0dW5lcl9mcmVxLCBpZl9mcmVxLCByYzsKIAl1MzIgTjsKIAogCWRwcmludGsoIiVzOlxuIiwgX19mdW5jX18pOwpAQCAtNDk1LDU2ICs1NDEsNTggQEAKIAl9CiAJdHVuZXJfZnJlcSA9IHBhcmFtcy0+ZnJlcXVlbmN5ICsgaWZfZnJlcTsKIAorCWlmIChmZS0+b3BzLmluZm8udHlwZSA9PSBGRV9RQU0pIHsKKwkJZHByaW50aygiJXMgc2VsZWN0IHRkYTgyN3hhX2R2YmNcbiIsIF9fZnVuY19fKTsKKwkJZnJlcXVlbmN5X21hcCA9IHRkYTgyN3hhX2R2YmM7CisJfQorCiAJaSA9IDA7Ci0Jd2hpbGUgKHRkYTgyN3hhX2R2YnRbaV0ubG9tYXggPCB0dW5lcl9mcmVxKSB7Ci0JCWlmKHRkYTgyN3hhX2R2YnRbaSArIDFdLmxvbWF4ID09IDApCisJd2hpbGUgKGZyZXF1ZW5jeV9tYXBbaV0ubG9tYXggPCB0dW5lcl9mcmVxKSB7CisJCWlmIChmcmVxdWVuY3lfbWFwW2kgKyAxXS5sb21heCA9PSAwKQogCQkJYnJlYWs7CiAJCWkrKzsKIAl9CiAKLQlOID0gKCh0dW5lcl9mcmVxICsgMzEyNTApIC8gNjI1MDApIDw8IHRkYTgyN3hhX2R2YnRbaV0uc3BkOworCU4gPSAoKHR1bmVyX2ZyZXEgKyAzMTI1MCkgLyA2MjUwMCkgPDwgZnJlcXVlbmN5X21hcFtpXS5zcGQ7CiAJYnVmWzBdID0gMDsgICAgICAgICAgICAvLyBzdWJhZGRyZXNzCiAJYnVmWzFdID0gTiA+PiA4OwogCWJ1ZlsyXSA9IE4gJiAweGZmOwogCWJ1ZlszXSA9IDA7CiAJYnVmWzRdID0gMHgxNjsKLQlidWZbNV0gPSAodGRhODI3eGFfZHZidFtpXS5zcGQgPDwgNSkgKyAodGRhODI3eGFfZHZidFtpXS5zdmNvIDw8IDMpICsKLQkJCXRkYTgyN3hhX2R2YnRbaV0uc2JzOwotCWJ1Zls2XSA9IDB4NGIgKyAodGRhODI3eGFfZHZidFtpXS5nYzMgPDwgNCk7CisJYnVmWzVdID0gKGZyZXF1ZW5jeV9tYXBbaV0uc3BkIDw8IDUpICsgKGZyZXF1ZW5jeV9tYXBbaV0uc3ZjbyA8PCAzKSArCisJCQlmcmVxdWVuY3lfbWFwW2ldLnNiczsKKwlidWZbNl0gPSAweDRiICsgKGZyZXF1ZW5jeV9tYXBbaV0uZ2MzIDw8IDQpOwogCWJ1Zls3XSA9IDB4MWM7CiAJYnVmWzhdID0gMHgwNjsKIAlidWZbOV0gPSAweDI0OwogCWJ1ZlsxMF0gPSAweDAwOwogCW1zZy5sZW4gPSAxMTsKLQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwotCWlmIChpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEpIHsKLQkJcHJpbnRrKCIlczogY291bGQgbm90IHdyaXRlIHRvIHR1bmVyIGF0IGFkZHI6IDB4JTAyeFxuIiwKLQkJICAgICAgIF9fZnVuY19fLCBwcml2LT5pMmNfYWRkciA8PCAxKTsKLQkJcmV0dXJuIC1FSU87Ci0JfQorCXJjID0gdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOworCWlmIChyYyA8IDApCisJCWdvdG8gZXJyOworCiAJYnVmWzBdID0gMHg5MDsKIAlidWZbMV0gPSAweGZmOwogCWJ1ZlsyXSA9IDB4NjA7CiAJYnVmWzNdID0gMHgwMDsKIAlidWZbNF0gPSAweDU5OyAgLy8gbHBzZWwsIGZvciA2TUh6ICsgMgogCW1zZy5sZW4gPSA1OwotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwlyYyA9IHR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIGVycjsKIAogCWJ1ZlswXSA9IDB4YTA7CiAJYnVmWzFdID0gMHg0MDsKIAltc2cubGVuID0gMjsKLQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJcmMgPSB0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBlcnI7CiAKIAltc2xlZXAoMTEpOwogCW1zZy5mbGFncyA9IEkyQ19NX1JEOwotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwlyYyA9IHR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKKwlpZiAocmMgPCAwKQorCQlnb3RvIGVycjsKIAltc2cuZmxhZ3MgPSAwOwogCiAJYnVmWzFdID4+PSA0OwpAQCAtNTUzLDQ5ICs2MDEsNTUgQEAKIAkJdGRhODI3eGFfbG5hX2dhaW4oZmUsIDAsIE5VTEwpOwogCQlidWZbMF0gPSAweDYwOwogCQlidWZbMV0gPSAweDBjOwotCQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKLQkJaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwkJcmMgPSB0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CisJCWlmIChyYyA8IDApCisJCQlnb3RvIGVycjsKIAl9CiAKIAlidWZbMF0gPSAweGMwOwogCWJ1ZlsxXSA9IDB4OTk7ICAgIC8vIGxwc2VsLCBmb3IgNk1IeiArIDIKLQlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQotCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJcmMgPSB0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBlcnI7CiAKIAlidWZbMF0gPSAweDYwOwogCWJ1ZlsxXSA9IDB4M2M7Ci0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXJjID0gdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOworCWlmIChyYyA8IDApCisJCWdvdG8gZXJyOwogCiAJLyogY29ycmVjdCBDUCB2YWx1ZSAqLwogCWJ1ZlswXSA9IDB4MzA7Ci0JYnVmWzFdID0gMHgxMCArIHRkYTgyN3hhX2R2YnRbaV0uc2NyOwotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwlidWZbMV0gPSAweDEwICsgZnJlcXVlbmN5X21hcFtpXS5zY3I7CisJcmMgPSB0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBlcnI7CiAKIAltc2xlZXAoMTYzKTsKIAlidWZbMF0gPSAweGMwOwogCWJ1ZlsxXSA9IDB4Mzk7ICAvLyBscHNlbCwgZm9yIDZNSHogKyAyCi0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKLQlpMmNfdHJhbnNmZXIocHJpdi0+aTJjX2FkYXAsICZtc2csIDEpOworCXJjID0gdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOworCWlmIChyYyA8IDApCisJCWdvdG8gZXJyOwogCiAJbXNsZWVwKDMpOwogCS8qIGZyZWV6ZSBBR0MxICovCiAJYnVmWzBdID0gMHg1MDsKLQlidWZbMV0gPSAweDRmICsgKHRkYTgyN3hhX2R2YnRbaV0uZ2MzIDw8IDQpOwotCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCi0JCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwlidWZbMV0gPSAweDRmICsgKGZyZXF1ZW5jeV9tYXBbaV0uZ2MzIDw8IDQpOworCXJjID0gdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOworCWlmIChyYyA8IDApCisJCWdvdG8gZXJyOwogCiAJcHJpdi0+ZnJlcXVlbmN5ID0gcGFyYW1zLT5mcmVxdWVuY3k7CiAJcHJpdi0+YmFuZHdpZHRoID0gKGZlLT5vcHMuaW5mby50eXBlID09IEZFX09GRE0pID8gcGFyYW1zLT51Lm9mZG0uYmFuZHdpZHRoIDogMDsKIAorCiAJcmV0dXJuIDA7CisKK2VycjoKKwlwcmludGsoS0VSTl9FUlIgIiVzOiBjb3VsZCBub3Qgd3JpdGUgdG8gdHVuZXIgYXQgYWRkcjogMHglMDJ4XG4iLAorCSAgICAgICBfX2Z1bmNfXywgcHJpdi0+aTJjX2FkZHIgPDwgMSk7CisJcmV0dXJuIHJjOwogfQogCiAKQEAgLTY0Myw3ICs2OTcsNyBAQAogCXR1bmVyX3JlZ1s5XSA9IDB4MjA7CiAJdHVuZXJfcmVnWzEwXSA9IDB4MDA7CiAJbXNnLmxlbiA9IDExOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOwogCiAJdHVuZXJfcmVnWzBdID0gMHg5MDsKIAl0dW5lcl9yZWdbMV0gPSAweGZmOwpAQCAtNjUxLDE5ICs3MDUsMTkgQEAKIAl0dW5lcl9yZWdbM10gPSAwOwogCXR1bmVyX3JlZ1s0XSA9IDB4OTkgKyAocHJpdi0+bHBzZWwgPDwgMSk7CiAJbXNnLmxlbiA9IDU7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAKIAl0dW5lcl9yZWdbMF0gPSAweGEwOwogCXR1bmVyX3JlZ1sxXSA9IDB4YzA7CiAJbXNnLmxlbiA9IDI7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAKIAl0dW5lcl9yZWdbMF0gPSAweDMwOwogCXR1bmVyX3JlZ1sxXSA9IDB4MTAgKyB0ZGE4Mjd4YV9hbmFsb2dbaV0uc2NyOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOwogCiAJbXNnLmZsYWdzID0gSTJDX01fUkQ7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAJbXNnLmZsYWdzID0gMDsKIAl0dW5lcl9yZWdbMV0gPj49IDQ7CiAJZHByaW50aygiQUdDMiBnYWluIGlzOiAlZFxuIiwgdHVuZXJfcmVnWzFdKTsKQEAgLTY3MywyNCArNzI3LDI0IEBACiAJbXNsZWVwKDEwMCk7CiAJdHVuZXJfcmVnWzBdID0gMHg2MDsKIAl0dW5lcl9yZWdbMV0gPSAweDNjOwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOwogCiAJbXNsZWVwKDE2Myk7CiAJdHVuZXJfcmVnWzBdID0gMHg1MDsKIAl0dW5lcl9yZWdbMV0gPSAweDhmICsgKHRkYTgyN3hhX2FuYWxvZ1tpXS5nYzMgPDwgNCk7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAKIAl0dW5lcl9yZWdbMF0gPSAweDgwOwogCXR1bmVyX3JlZ1sxXSA9IDB4Mjg7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAKIAl0dW5lcl9yZWdbMF0gPSAweGIwOwogCXR1bmVyX3JlZ1sxXSA9IDB4MDE7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAKIAl0dW5lcl9yZWdbMF0gPSAweGMwOwogCXR1bmVyX3JlZ1sxXSA9IDB4MTkgKyAocHJpdi0+bHBzZWwgPDwgMSk7Ci0JaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKKwl0dW5lcl90cmFuc2ZlcihmZSwgJm1zZywgMSk7CiAKIAlwcml2LT5mcmVxdWVuY3kgPSBwYXJhbXMtPmZyZXF1ZW5jeTsKIApAQCAtNzAzLDcgKzc1Nyw3IEBACiAJdW5zaWduZWQgY2hhciBkYXRhW10gPSB7MHg4MCwgMHgyY307CiAJc3RydWN0IGkyY19tc2cgbXNnID0gey5hZGRyID0gcHJpdi0+aTJjX2FkZHIsIC5mbGFncyA9IDAsCiAJCQkgICAgICAuYnVmID0gZGF0YSwgLmxlbiA9IDJ9OwotCWkyY190cmFuc2Zlcihwcml2LT5pMmNfYWRhcCwgJm1zZywgMSk7CisJdHVuZXJfdHJhbnNmZXIoZmUsICZtc2csIDEpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTc5MiwxNiArODQ2LDE5IEBACiB9OwogCiBzdGF0aWMgaW50IHRkYTgyN3hfcHJvYmVfdmVyc2lvbihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKLXsJdTggZGF0YTsKK3sKKwl1OCBkYXRhOworCWludCByYzsKIAlzdHJ1Y3QgdGRhODI3eF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CiAJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IHByaXYtPmkyY19hZGRyLCAuZmxhZ3MgPSBJMkNfTV9SRCwKIAkJCSAgICAgICAuYnVmID0gJmRhdGEsIC5sZW4gPSAxIH07Ci0JaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKLQkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKLQlpZiAoaTJjX3RyYW5zZmVyKHByaXYtPmkyY19hZGFwLCAmbXNnLCAxKSAhPSAxKSB7CisKKwlyYyA9IHR1bmVyX3RyYW5zZmVyKGZlLCAmbXNnLCAxKTsKKworCWlmIChyYyA8IDApIHsKIAkJcHJpbnRrKCIlczogY291bGQgbm90IHJlYWQgZnJvbSB0dW5lciBhdCBhZGRyOiAweCUwMnhcbiIsCiAJCSAgICAgICBfX2Z1bmNfXywgbXNnLmFkZHIgPDwgMSk7Ci0JCXJldHVybiAtRUlPOworCQlyZXR1cm4gcmM7CiAJfQogCWlmICgoZGF0YSAmIDB4M2MpID09IDApIHsKIAkJZHByaW50aygidGRhODI3eCB0dW5lciBmb3VuZFxuIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhODI5MC5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RkYTgyOTAuYwppbmRleCA0Yjg2NjJlLi4wNjRkMTRjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGRhODI5MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZGE4MjkwLmMKQEAgLTIyLDcgKzIyLDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlICJ0dW5lci1pMmMuaCIKICNpbmNsdWRlICJ0ZGE4MjkwLmgiCiAjaW5jbHVkZSAidGRhODI3eC5oIgpAQCAtNTY2LDggKzU2NiwxMSBAQAogCXU4IGRhdGE7CiAJc3RydWN0IGkyY19tc2cgbXNnID0geyAuZmxhZ3MgPSBJMkNfTV9SRCwgLmJ1ZiA9ICZkYXRhLCAubGVuID0gMSB9OwogCi0JaWYgKE5VTEwgPT0gYW5hbG9nX29wcy0+aTJjX2dhdGVfY3RybCkKKwlpZiAoIWFuYWxvZ19vcHMtPmkyY19nYXRlX2N0cmwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ0ZGE4MjkwOiBubyBnYXRlIGNvbnRyb2wgd2VyZSBwcm92aWRlZCFcbiIpOworCiAJCXJldHVybiAtRUlOVkFMOworCX0KIAogCWFuYWxvZ19vcHMtPmkyY19nYXRlX2N0cmwoZmUsIDEpOwogCkBAIC02MTUsMTEgKzYxOCwxMyBAQAogCiAJaWYgKHJldCAhPSAxKSB7CiAJCXR1bmVyX3dhcm4oInR1bmVyIGFjY2VzcyBmYWlsZWQhXG4iKTsKKwkJYW5hbG9nX29wcy0+aTJjX2dhdGVfY3RybChmZSwgMCk7CiAJCXJldHVybiAtRVJFTU9URUlPOwogCX0KIAogCWlmICgoZGF0YSA9PSAweDgzKSB8fCAoZGF0YSA9PSAweDg0KSkgewogCQlwcml2LT52ZXIgfD0gVERBMTgyNzE7CisJCXRkYTgyOXhfdGRhMTgyNzFfY29uZmlnLmNvbmZpZyA9IHByaXYtPmNmZy5jb25maWc7CiAJCWR2Yl9hdHRhY2godGRhMTgyNzFfYXR0YWNoLCBmZSwgcHJpdi0+dGRhODI3eF9hZGRyLAogCQkJICAgcHJpdi0+aTJjX3Byb3BzLmFkYXAsICZ0ZGE4Mjl4X3RkYTE4MjcxX2NvbmZpZyk7CiAJfSBlbHNlIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZWE1NzYxLmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGVhNTc2MS5jCmluZGV4IGIyM2RhZGUuLjYwZWQ4NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZWE1NzYxLmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RlYTU3NjEuYwpAQCAtOSw3ICs5LDcgQEAKIAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgogI2luY2x1ZGUgInR1bmVyLWkyYy5oIgogI2luY2x1ZGUgInRlYTU3NjEuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZWE1NzY3LmMgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMvdGVhNTc2Ny5jCmluZGV4IDFmNTY0NjMuLjIyM2EyMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy90ZWE1NzY3LmMKKysrIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3RlYTU3NjcuYwpAQCAtMTIsNyArMTIsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgInR1bmVyLWkyYy5oIgogI2luY2x1ZGUgInRlYTU3NjcuaCIKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3hjNTAwMC5jIGIvZHJpdmVycy9tZWRpYS9jb21tb24vdHVuZXJzL3hjNTAwMC5jCmluZGV4IDQ5M2NlOTMuLmI1NDU5ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvY29tbW9uL3R1bmVycy94YzUwMDAuYworKysgYi9kcml2ZXJzL21lZGlhL2NvbW1vbi90dW5lcnMveGM1MDAwLmMKQEAgLTczOSw3ICs3MzksMTAgQEAKIAlkcHJpbnRrKDEsICIlcygpIGZyZXF1ZW5jeT0lZCAoaW4gdW5pdHMgb2YgNjIuNWtoeilcbiIsCiAJCV9fZnVuY19fLCBwYXJhbXMtPmZyZXF1ZW5jeSk7CiAKLQlwcml2LT5yZl9tb2RlID0gWENfUkZfTU9ERV9DQUJMRTsgLyogRml4IG1lOiBpdCBjb3VsZCBiZSBhaXIuICovCisJLyogRml4IG1lOiBpdCBjb3VsZCBiZSBhaXIuICovCisJcHJpdi0+cmZfbW9kZSA9IHBhcmFtcy0+bW9kZTsKKwlpZiAocGFyYW1zLT5tb2RlID4gWENfUkZfTU9ERV9DQUJMRSkKKwkJcHJpdi0+cmZfbW9kZSA9IFhDX1JGX01PREVfQ0FCTEU7CiAKIAkvKiBwYXJhbXMtPmZyZXF1ZW5jeSBpcyBpbiB1bml0cyBvZiA2Mi41a2h6ICovCiAJcHJpdi0+ZnJlcV9oeiA9IHBhcmFtcy0+ZnJlcXVlbmN5ICogNjI1MDA7CkBAIC05NzAsOCArOTczLDYgQEAKIAljYXNlIDE6CiAJCS8qIG5ldyB0dW5lciBpbnN0YW5jZSAqLwogCQlwcml2LT5iYW5kd2lkdGggPSBCQU5EV0lEVEhfNl9NSFo7Ci0JCXByaXYtPmlmX2toeiA9IGNmZy0+aWZfa2h6OwotCiAJCWZlLT50dW5lcl9wcml2ID0gcHJpdjsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTk4MCw2ICs5ODEsMTMgQEAKIAkJYnJlYWs7CiAJfQogCisJaWYgKHByaXYtPmlmX2toeiA9PSAwKSB7CisJCS8qIElmIHRoZSBJRiBoYXNuJ3QgYmVlbiBzZXQgeWV0LCB1c2UgdGhlIHZhbHVlIHByb3ZpZGVkIGJ5CisJCSAgIHRoZSBjYWxsZXIgKG9jY3VycyBpbiBoeWJyaWQgZGV2aWNlcyB3aGVyZSB0aGUgYW5hbG9nCisJCSAgIGNhbGwgdG8geGM1MDAwX2F0dGFjaCBvY2N1cnMgYmVmb3JlIHRoZSBkaWdpdGFsIHNpZGUpICovCisJCXByaXYtPmlmX2toeiA9IGNmZy0+aWZfa2h6OworCX0KKwogCS8qIENoZWNrIGlmIGZpcm13YXJlIGhhcyBiZWVuIGxvYWRlZC4gSXQgaXMgcG9zc2libGUgdGhhdCBhbm90aGVyCiAJICAgaW5zdGFuY2Ugb2YgdGhlIGRyaXZlciBoYXMgbG9hZGVkIHRoZSBmaXJtd2FyZS4KIAkgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvS2NvbmZpZwppbmRleCBhOGM2MjQ5Li45ZTU3ODE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9LY29uZmlnCkBAIC0xMyw3ICsxMyw3IEBACiAJc2VsZWN0IERWQl9UVU5FUl9JVEQxMDAwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9JU0w2NDIxIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9DWDI0MTIzIGlmICFEVkJfRkVfQ1VTVE9NSVNFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1NJTVBMRSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJc2VsZWN0IE1FRElBX1RVTkVSX1NJTVBMRSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9UVU5FUl9DWDI0MTEzIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgdGhlIGRpZ2l0YWwgVFYgcmVjZWl2ZXIgY2hpcCBtYWRlIGJ5IEIyQzIgSW5jLiBpbmNsdWRlZCBpbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvTWFrZWZpbGUKaW5kZXggZDlkYjA2Ni4uYjk3Y2Y3MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL01ha2VmaWxlCkBAIC0yLDcgKzIsNiBAQAogCWZsZXhjb3Atc3JhbS5vIGZsZXhjb3AtZWVwcm9tLm8gZmxleGNvcC1taXNjLm8gZmxleGNvcC1ody1maWx0ZXIubwogb2JqLSQoQ09ORklHX0RWQl9CMkMyX0ZMRVhDT1ApICs9IGIyYzItZmxleGNvcC5vCiAKLQogaWZuZXEgKCQoQ09ORklHX0RWQl9CMkMyX0ZMRVhDT1BfUENJKSwpCiBiMmMyLWZsZXhjb3Atb2JqcyArPSBmbGV4Y29wLWRtYS5vCiBlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWNvbW1vbi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWNvbW1vbi5oCmluZGV4IDhjZTA2MzMuLjNlMWM0NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1jb21tb24uaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtY29tbW9uLmgKQEAgLTI4LDExICsyOCwxNCBAQAogCiAvKiBTdGVhbCBmcm9tIHVzYi5oICovCiAjdW5kZWYgZXJyCi0jZGVmaW5lIGVycihmb3JtYXQsICBhcmcuLi4pIHByaW50ayhLRVJOX0VSUiAgICAgRkNfTE9HX1BSRUZJWCAiOiAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQorI2RlZmluZSBlcnIoZm9ybWF0LCBhcmcuLi4pIFwKKwlwcmludGsoS0VSTl9FUlIgRkNfTE9HX1BSRUZJWCAiOiAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQogI3VuZGVmIGluZm8KLSNkZWZpbmUgaW5mbyhmb3JtYXQsIGFyZy4uLikgcHJpbnRrKEtFUk5fSU5GTyAgICBGQ19MT0dfUFJFRklYICI6ICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCisjZGVmaW5lIGluZm8oZm9ybWF0LCBhcmcuLi4pIFwKKwlwcmludGsoS0VSTl9JTkZPIEZDX0xPR19QUkVGSVggIjogIiBmb3JtYXQgIlxuIiAsICMjIGFyZykKICN1bmRlZiB3YXJuCi0jZGVmaW5lIHdhcm4oZm9ybWF0LCBhcmcuLi4pIHByaW50ayhLRVJOX1dBUk5JTkcgRkNfTE9HX1BSRUZJWCAiOiAiIGZvcm1hdCAiXG4iICwgIyMgYXJnKQorI2RlZmluZSB3YXJuKGZvcm1hdCwgYXJnLi4uKSBcCisJcHJpbnRrKEtFUk5fV0FSTklORyBGQ19MT0dfUFJFRklYICI6ICIgZm9ybWF0ICJcbiIgLCAjIyBhcmcpCiAKIHN0cnVjdCBmbGV4Y29wX2RtYSB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CkBAIC05MSwxNiArOTQsMTQgQEAKIAlpbnQgZnVsbHRzX3N0cmVhbWluZ19zdGF0ZTsKIAogCS8qIGJ1cyBzcGVjaWZpYyBjYWxsYmFja3MgKi8KLQlmbGV4Y29wX2liaV92YWx1ZSAoKnJlYWRfaWJpX3JlZykgIChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKiwgZmxleGNvcF9pYmlfcmVnaXN0ZXIpOwotCWludCAgICAgICAgICAgICAgICgqd3JpdGVfaWJpX3JlZykgKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqLCBmbGV4Y29wX2liaV9yZWdpc3RlciwgZmxleGNvcF9pYmlfdmFsdWUpOwotCi0KLQlpbnQgKCppMmNfcmVxdWVzdCkgKHN0cnVjdCBmbGV4Y29wX2kyY19hZGFwdGVyKiwKKwlmbGV4Y29wX2liaV92YWx1ZSgqcmVhZF9pYmlfcmVnKSAoc3RydWN0IGZsZXhjb3BfZGV2aWNlICosCisJCQlmbGV4Y29wX2liaV9yZWdpc3Rlcik7CisJaW50ICgqd3JpdGVfaWJpX3JlZykgKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqLAorCQkJZmxleGNvcF9pYmlfcmVnaXN0ZXIsIGZsZXhjb3BfaWJpX3ZhbHVlKTsKKwlpbnQgKCppMmNfcmVxdWVzdCkgKHN0cnVjdCBmbGV4Y29wX2kyY19hZGFwdGVyICosCiAJCWZsZXhjb3BfYWNjZXNzX29wX3QsIHU4IGNoaXBhZGRyLCB1OCBhZGRyLCB1OCAqYnVmLCB1MTYgbGVuKTsKLQlpbnQgKCpzdHJlYW1fY29udHJvbCkgKHN0cnVjdCBmbGV4Y29wX2RldmljZSosIGludCk7Ci0KKwlpbnQgKCpzdHJlYW1fY29udHJvbCkgKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqLCBpbnQpOwogCWludCAoKmdldF9tYWNfYWRkcikgKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGludCBleHRlbmRlZCk7Ci0KIAl2b2lkICpidXNfc3BlY2lmaWM7CiB9OwogCkBAIC0xMTEsMjIgKzExMiwyOCBAQAogdm9pZCBmbGV4Y29wX3Bhc3NfZG14X3BhY2tldHMoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgdTggKmJ1ZiwgdTMyIG5vKTsKIAogc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmbGV4Y29wX2RldmljZV9rbWFsbG9jKHNpemVfdCBidXNfc3BlY2lmaWNfbGVuKTsKLXZvaWQgZmxleGNvcF9kZXZpY2Vfa2ZyZWUoc3RydWN0IGZsZXhjb3BfZGV2aWNlKik7Cit2b2lkIGZsZXhjb3BfZGV2aWNlX2tmcmVlKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqKTsKIAotaW50ICBmbGV4Y29wX2RldmljZV9pbml0aWFsaXplKHN0cnVjdCBmbGV4Y29wX2RldmljZSopOworaW50IGZsZXhjb3BfZGV2aWNlX2luaXRpYWxpemUoc3RydWN0IGZsZXhjb3BfZGV2aWNlICopOwogdm9pZCBmbGV4Y29wX2RldmljZV9leGl0KHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMpOwotCiB2b2lkIGZsZXhjb3BfcmVzZXRfYmxvY2tfMzAwKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMpOwogCiAvKiBmcm9tIGZsZXhjb3AtZG1hLmMgKi8KLWludCBmbGV4Y29wX2RtYV9hbGxvY2F0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgc3RydWN0IGZsZXhjb3BfZG1hICpkbWEsIHUzMiBzaXplKTsKK2ludCBmbGV4Y29wX2RtYV9hbGxvY2F0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJc3RydWN0IGZsZXhjb3BfZG1hICpkbWEsIHUzMiBzaXplKTsKIHZvaWQgZmxleGNvcF9kbWFfZnJlZShzdHJ1Y3QgZmxleGNvcF9kbWEgKmRtYSk7CiAKLWludCBmbGV4Y29wX2RtYV9jb250cm9sX3RpbWVyX2lycShzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX2RtYV9pbmRleF90IG5vLCBpbnQgb25vZmYpOwotaW50IGZsZXhjb3BfZG1hX2NvbnRyb2xfc2l6ZV9pcnEoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9kbWFfaW5kZXhfdCBubywgaW50IG9ub2ZmKTsKLWludCBmbGV4Y29wX2RtYV9jb25maWcoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgc3RydWN0IGZsZXhjb3BfZG1hICpkbWEsIGZsZXhjb3BfZG1hX2luZGV4X3QgZG1hX2lkeCk7Ci1pbnQgZmxleGNvcF9kbWFfeGZlcl9jb250cm9sKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3BfZG1hX2luZGV4X3QgZG1hX2lkeCwgZmxleGNvcF9kbWFfYWRkcl9pbmRleF90IGluZGV4LCBpbnQgb25vZmYpOwotaW50IGZsZXhjb3BfZG1hX2NvbmZpZ190aW1lcihzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX2RtYV9pbmRleF90IGRtYV9pZHgsIHU4IGN5Y2xlcyk7CitpbnQgZmxleGNvcF9kbWFfY29udHJvbF90aW1lcl9pcnEoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJZmxleGNvcF9kbWFfaW5kZXhfdCBubywgaW50IG9ub2ZmKTsKK2ludCBmbGV4Y29wX2RtYV9jb250cm9sX3NpemVfaXJxKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCWZsZXhjb3BfZG1hX2luZGV4X3Qgbm8sIGludCBvbm9mZik7CitpbnQgZmxleGNvcF9kbWFfY29uZmlnKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIHN0cnVjdCBmbGV4Y29wX2RtYSAqZG1hLAorCQlmbGV4Y29wX2RtYV9pbmRleF90IGRtYV9pZHgpOworaW50IGZsZXhjb3BfZG1hX3hmZXJfY29udHJvbChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQlmbGV4Y29wX2RtYV9pbmRleF90IGRtYV9pZHgsIGZsZXhjb3BfZG1hX2FkZHJfaW5kZXhfdCBpbmRleCwKKwkJaW50IG9ub2ZmKTsKK2ludCBmbGV4Y29wX2RtYV9jb25maWdfdGltZXIoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJZmxleGNvcF9kbWFfaW5kZXhfdCBkbWFfaWR4LCB1OCBjeWNsZXMpOwogCiAvKiBmcm9tIGZsZXhjb3AtZWVwcm9tLmMgKi8KIC8qIHRoZSBQQ0kgcGFydCB1c2VzIHRoaXMgY2FsbCB0byBnZXQgdGhlIE1BQyBhZGRyZXNzLCB0aGUgVVNCIHBhcnQgaGFzIGl0cyBvd24gKi8KQEAgLTE0MSwxMyArMTQ4LDE1IEBACiAJdTggY2hpcGFkZHIsIHU4IGFkZHIsIHU4ICpidWYsIHUxNiBsZW4pOwogCiAvKiBmcm9tIGZsZXhjb3Atc3JhbS5jICovCi1pbnQgZmxleGNvcF9zcmFtX3NldF9kZXN0KHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3Bfc3JhbV9kZXN0X3QgZGVzdCwgZmxleGNvcF9zcmFtX2Rlc3RfdGFyZ2V0X3QgdGFyZ2V0KTsKK2ludCBmbGV4Y29wX3NyYW1fc2V0X2Rlc3Qoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9zcmFtX2Rlc3RfdCBkZXN0LAorCWZsZXhjb3Bfc3JhbV9kZXN0X3RhcmdldF90IHRhcmdldCk7CiB2b2lkIGZsZXhjb3Bfd2FuX3NldF9zcGVlZChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX3dhbl9zcGVlZF90IHMpOwotdm9pZCBmbGV4Y29wX3NyYW1fY3RybChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBpbnQgdXNiX3dhbiwgaW50IHNyYW1kbWEsIGludCBtYXhpbXVtZmlsbCk7Cit2b2lkIGZsZXhjb3Bfc3JhbV9jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCWludCB1c2Jfd2FuLCBpbnQgc3JhbWRtYSwgaW50IG1heGltdW1maWxsKTsKIAogLyogZ2xvYmFsIHByb3RvdHlwZXMgZm9yIHRoZSBmbGV4Y29wLWNoaXAgKi8KIC8qIGZyb20gZmxleGNvcC1mZS10dW5lci5jICovCi1pbnQgZmxleGNvcF9mcm9udGVuZF9pbml0KHN0cnVjdCBmbGV4Y29wX2RldmljZSAqY2FyZCk7CitpbnQgZmxleGNvcF9mcm9udGVuZF9pbml0KHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMpOwogdm9pZCBmbGV4Y29wX2Zyb250ZW5kX2V4aXQoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYyk7CiAKIC8qIGZyb20gZmxleGNvcC1pMmMuYyAqLwpAQCAtMTU5LDExICsxNjgsMTQgQEAKIAogLyogZnJvbSBmbGV4Y29wLW1pc2MuYyAqLwogdm9pZCBmbGV4Y29wX2RldGVybWluZV9yZXZpc2lvbihzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjKTsKLXZvaWQgZmxleGNvcF9kZXZpY2VfbmFtZShzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLGNvbnN0IGNoYXIgKnByZWZpeCxjb25zdCBjaGFyICpzdWZmaXgpOwotdm9pZCBmbGV4Y29wX2R1bXBfcmVnKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3BfaWJpX3JlZ2lzdGVyIHJlZywgaW50IG51bSk7Cit2b2lkIGZsZXhjb3BfZGV2aWNlX25hbWUoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJY29uc3QgY2hhciAqcHJlZml4LCBjb25zdCBjaGFyICpzdWZmaXgpOwordm9pZCBmbGV4Y29wX2R1bXBfcmVnKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCWZsZXhjb3BfaWJpX3JlZ2lzdGVyIHJlZywgaW50IG51bSk7CiAKIC8qIGZyb20gZmxleGNvcC1ody1maWx0ZXIuYyAqLwotaW50IGZsZXhjb3BfcGlkX2ZlZWRfY29udHJvbChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmR2YmRteGZlZWQsIGludCBvbm9mZik7CitpbnQgZmxleGNvcF9waWRfZmVlZF9jb250cm9sKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCXN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZHZiZG14ZmVlZCwgaW50IG9ub2ZmKTsKIHZvaWQgZmxleGNvcF9od19maWx0ZXJfaW5pdChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjKTsKIAogdm9pZCBmbGV4Y29wX3NtY19jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGludCBvbm9mZik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtZG1hLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtZG1hLmMKaW5kZXggMjZmMDAxMS4uMjg4MWUwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWRtYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1kbWEuYwpAQCAtMSwxMyArMSwxMiBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpbnV4IGRyaXZlciB0aGUgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCi0gKgotICogZmxleGNvcC1kbWEuYyAtIG1ldGhvZHMgZm9yIGNvbmZpZ3VyaW5nIGFuZCBjb250cm9sbGluZyB0aGUgRE1BIG9mIHRoZSBGbGV4Q29wLgotICoKLSAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4KKyAqIExpbnV4IGRyaXZlciBmb3IgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCisgKiBmbGV4Y29wLWRtYS5jIC0gY29uZmlndXJpbmcgYW5kIGNvbnRyb2xsaW5nIHRoZSBETUEgb2YgdGhlIEZsZXhDb3AKKyAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbgogICovCiAjaW5jbHVkZSAiZmxleGNvcC5oIgogCi1pbnQgZmxleGNvcF9kbWFfYWxsb2NhdGUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIHN0cnVjdCBmbGV4Y29wX2RtYSAqZG1hLCB1MzIgc2l6ZSkKK2ludCBmbGV4Y29wX2RtYV9hbGxvY2F0ZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwKKwkJc3RydWN0IGZsZXhjb3BfZG1hICpkbWEsIHUzMiBzaXplKQogewogCXU4ICp0Y3B1OwogCWRtYV9hZGRyX3QgdGRtYSA9IDA7CkBAIC0zMiw3ICszMSw4IEBACiAKIHZvaWQgZmxleGNvcF9kbWFfZnJlZShzdHJ1Y3QgZmxleGNvcF9kbWEgKmRtYSkKIHsKLQlwY2lfZnJlZV9jb25zaXN0ZW50KGRtYS0+cGRldiwgZG1hLT5zaXplKjIsZG1hLT5jcHVfYWRkcjAsIGRtYS0+ZG1hX2FkZHIwKTsKKwlwY2lfZnJlZV9jb25zaXN0ZW50KGRtYS0+cGRldiwgZG1hLT5zaXplKjIsCisJCQlkbWEtPmNwdV9hZGRyMCwgZG1hLT5kbWFfYWRkcjApOwogCW1lbXNldChkbWEsMCxzaXplb2Yoc3RydWN0IGZsZXhjb3BfZG1hKSk7CiB9CiBFWFBPUlRfU1lNQk9MKGZsZXhjb3BfZG1hX2ZyZWUpOwpAQCAtNDQsOCArNDQsOCBAQAogCWZsZXhjb3BfaWJpX3ZhbHVlIHYweDAsdjB4NCx2MHhjOwogCXYweDAucmF3ID0gdjB4NC5yYXcgPSB2MHhjLnJhdyA9IDA7CiAKLQl2MHgwLmRtYV8weDAuZG1hX2FkZHJlc3MwICAgICAgICA9IGRtYS0+ZG1hX2FkZHIwID4+IDI7Ci0JdjB4Yy5kbWFfMHhjLmRtYV9hZGRyZXNzMSAgICAgICAgPSBkbWEtPmRtYV9hZGRyMSA+PiAyOworCXYweDAuZG1hXzB4MC5kbWFfYWRkcmVzczAgPSBkbWEtPmRtYV9hZGRyMCA+PiAyOworCXYweGMuZG1hXzB4Yy5kbWFfYWRkcmVzczEgPSBkbWEtPmRtYV9hZGRyMSA+PiAyOwogCXYweDQuZG1hXzB4NF93cml0ZS5kbWFfYWRkcl9zaXplID0gZG1hLT5zaXplIC8gNDsKIAogCWlmICgoZG1hX2lkeCAmIEZDX0RNQV8xKSA9PSBkbWFfaWR4KSB7CkBAIC01Nyw3ICs1Nyw4IEBACiAJCWZjLT53cml0ZV9pYmlfcmVnKGZjLGRtYTJfMDE0LHYweDQpOwogCQlmYy0+d3JpdGVfaWJpX3JlZyhmYyxkbWEyXzAxYyx2MHhjKTsKIAl9IGVsc2UgewotCQllcnIoImVpdGhlciBETUExIG9yIERNQTIgY2FuIGJlIGNvbmZpZ3VyZWQgYXQgdGhlIHdpdGhpbiBvbmUgZmxleGNvcF9kbWFfY29uZmlnIGNhbGwuIik7CisJCWVycigiZWl0aGVyIERNQTEgb3IgRE1BMiBjYW4gYmUgY29uZmlndXJlZCB3aXRoaW4gb25lICIKKwkJCSJmbGV4Y29wX2RtYV9jb25maWcgY2FsbC4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC04MSw3ICs4Miw4IEBACiAJCXIweDAgPSBkbWEyXzAxMDsKIAkJcjB4YyA9IGRtYTJfMDFjOwogCX0gZWxzZSB7Ci0JCWVycigiZWl0aGVyIHRyYW5zZmVyIERNQTEgb3IgRE1BMiBjYW4gYmUgc3RhcnRlZCB3aXRoaW4gb25lIGZsZXhjb3BfZG1hX3hmZXJfY29udHJvbCBjYWxsLiIpOworCQllcnIoImVpdGhlciB0cmFuc2ZlciBETUExIG9yIERNQTIgY2FuIGJlIHN0YXJ0ZWQgd2l0aGluIG9uZSAiCisJCQkiZmxleGNvcF9kbWFfeGZlcl9jb250cm9sIGNhbGwuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtMTU0LDggKzE1Niw3IEBACiAKIC8qIDEgY3ljbGVzID0gMS45NyBtc2VjICovCiBpbnQgZmxleGNvcF9kbWFfY29uZmlnX3RpbWVyKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCi0JCWZsZXhjb3BfZG1hX2luZGV4X3QgZG1hX2lkeCwKLQkJdTggY3ljbGVzKQorCQlmbGV4Y29wX2RtYV9pbmRleF90IGRtYV9pZHgsIHU4IGN5Y2xlcykKIHsKIAlmbGV4Y29wX2liaV9yZWdpc3RlciByID0gKGRtYV9pZHggJiBGQ19ETUFfMSkgPyBkbWExXzAwNCA6IGRtYTJfMDE0OwogCWZsZXhjb3BfaWJpX3ZhbHVlIHYgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLHIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWVlcHJvbS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWVlcHJvbS5jCmluZGV4IDhhOGFlOGEuLmEyNTM3M2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1lZXByb20uYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtZWVwcm9tLmMKQEAgLTEsOSArMSw3IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGludXggZHJpdmVyIHRoZSBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKLSAqCi0gKiBmbGV4Y29wLWVlcHJvbS5jIC0gZWVwcm9tIGFjY2VzcyBtZXRob2RzIChjdXJyZW50bHkgb25seSBNQUMgYWRkcmVzcyByZWFkaW5nIGlzIHVzZWQpCi0gKgotICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uLgorICogTGludXggZHJpdmVyIGZvciBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKKyAqIGZsZXhjb3AtZWVwcm9tLmMgLSBlZXByb20gYWNjZXNzIG1ldGhvZHMgKGN1cnJlbnRseSBvbmx5IE1BQyBhZGRyZXNzIHJlYWRpbmcpCisgKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24KICAqLwogI2luY2x1ZGUgImZsZXhjb3AuaCIKIApAQCAtMTQsMTcgKzEyLDE3IEBACiAJcmV0dXJuIGZsZXhfaTJjX3dyaXRlKGFkYXB0ZXIsIDB4MjAwMDAwMDAsIDB4NTAsIGFkZHIsIGJ1ZiwgbGVuKTsKIH0KIAotc3RhdGljIGludCBlZXByb21fbHJjX3dyaXRlKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgdTMyIGxlbiwgdTggKndidWYsIHU4ICpyYnVmLCBpbnQgcmV0cmllcykKK3N0YXRpYyBpbnQgZWVwcm9tX2xyY193cml0ZShzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIGFkZHIsCisJCXUzMiBsZW4sIHU4ICp3YnVmLCB1OCAqcmJ1ZiwgaW50IHJldHJpZXMpCiB7Ci0JaW50IGk7CitpbnQgaTsKIAotCWZvciAoaSA9IDA7IGkgPCByZXRyaWVzOyBpKyspIHsKLQkJaWYgKGVlcHJvbV93cml0ZShhZGFwdGVyLCBhZGRyLCB3YnVmLCBsZW4pID09IGxlbikgewotCQkJaWYgKGVlcHJvbV9scmNfcmVhZChhZGFwdGVyLCBhZGRyLCBsZW4sIHJidWYsIHJldHJpZXMpID09IDEpCi0JCQkJcmV0dXJuIDE7Citmb3IgKGkgPSAwOyBpIDwgcmV0cmllczsgaSsrKSB7CisJaWYgKGVlcHJvbV93cml0ZShhZGFwdGVyLCBhZGRyLCB3YnVmLCBsZW4pID09IGxlbikgeworCQlpZiAoZWVwcm9tX2xyY19yZWFkKGFkYXB0ZXIsIGFkZHIsIGxlbiwgcmJ1ZiwgcmV0cmllcykgPT0gMSkKKwkJCXJldHVybiAxOwogCQl9CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTM5LDEyICszNywxMCBAQAogCQlyZXR1cm4gMDsKIAogCW1lbWNweSh3YnVmLCBrZXksIGxlbik7Ci0KIAl3YnVmWzE2XSA9IDA7CiAJd2J1ZlsxN10gPSAwOwogCXdidWZbMThdID0gMDsKIAl3YnVmWzE5XSA9IGNhbGNfbHJjKHdidWYsIDE5KTsKLQogCXJldHVybiBlZXByb21fbHJjX3dyaXRlKGFkYXB0ZXIsIDB4M2U0LCAyMCwgd2J1ZiwgcmJ1ZiwgNCk7CiB9CiAKQEAgLTU5LDcgKzU1LDYgQEAKIAkJcmV0dXJuIDA7CiAKIAltZW1jcHkoa2V5LCBidWYsIGxlbik7Ci0KIAlyZXR1cm4gMTsKIH0KIApAQCAtNzQsOSArNjksNyBAQAogCQl0bXBbM10gPSBtYWNbNV07CiAJCXRtcFs0XSA9IG1hY1s2XTsKIAkJdG1wWzVdID0gbWFjWzddOwotCiAJfSBlbHNlIHsKLQogCQl0bXBbMF0gPSBtYWNbMF07CiAJCXRtcFsxXSA9IG1hY1sxXTsKIAkJdG1wWzJdID0gbWFjWzJdOwpAQCAtOTAsMTEgKzgzLDExIEBACiAKIAlpZiAoZWVwcm9tX3dyaXRlKGFkYXB0ZXIsIDB4M2Y4LCB0bXAsIDgpID09IDgpCiAJCXJldHVybiAxOwotCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZmxleGNvcF9lZXByb21fcmVhZChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCB1MTYgYWRkciwgdTggKmJ1ZiwgdTE2IGxlbikKK3N0YXRpYyBpbnQgZmxleGNvcF9lZXByb21fcmVhZChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQl1MTYgYWRkciwgdTggKmJ1ZiwgdTE2IGxlbikKIHsKIAlyZXR1cm4gZmMtPmkyY19yZXF1ZXN0KGZjLEZDX1JFQUQsRkNfSTJDX1BPUlRfRUVQUk9NLDB4NTAsYWRkcixidWYsbGVuKTsKIH0KQEAgLTExMCw3ICsxMDMsOCBAQAogCXJldHVybiBzdW07CiB9CiAKLXN0YXRpYyBpbnQgZmxleGNvcF9lZXByb21fcmVxdWVzdChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX2FjY2Vzc19vcF90IG9wLCB1MTYgYWRkciwgdTggKmJ1ZiwgdTE2IGxlbiwgaW50IHJldHJpZXMpCitzdGF0aWMgaW50IGZsZXhjb3BfZWVwcm9tX3JlcXVlc3Qoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwlmbGV4Y29wX2FjY2Vzc19vcF90IG9wLCB1MTYgYWRkciwgdTggKmJ1ZiwgdTE2IGxlbiwgaW50IHJldHJpZXMpCiB7CiAJaW50IGkscmV0ID0gMDsKIAl1OCBjaGlwYWRkciA9ICAweDUwIHwgKChhZGRyID4+IDgpICYgMyk7CkBAIC0xMjMsNyArMTE3LDggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IGZsZXhjb3BfZWVwcm9tX2xyY19yZWFkKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIHUxNiBhZGRyLCB1OCAqYnVmLCB1MTYgbGVuLCBpbnQgcmV0cmllcykKK3N0YXRpYyBpbnQgZmxleGNvcF9lZXByb21fbHJjX3JlYWQoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgdTE2IGFkZHIsCisJCXU4ICpidWYsIHUxNiBsZW4sIGludCByZXRyaWVzKQogewogCWludCByZXQgPSBmbGV4Y29wX2VlcHJvbV9yZXF1ZXN0KGZjLCBGQ19SRUFELCBhZGRyLCBidWYsIGxlbiwgcmV0cmllcyk7CiAJaWYgKHJldCA9PSAwKQpAQCAtMTMzLDggKzEyOCw3IEBACiB9CiAKIC8qIEpKJ3MgY29tbWVudCBhYm91dCBleHRlbmRlZCA9PSAxOiBpdCBpcyBub3QgcHJlc2VudGx5IHVzZWQgYW55d2hlcmUgYnV0IHdhcwotICogYWRkZWQgdG8gdGhlIGxvdy1sZXZlbCBmdW5jdGlvbnMgZm9yIHBvc3NpYmxlIHN1cHBvcnQgb2YgRVVJNjQKLSAqLworICogYWRkZWQgdG8gdGhlIGxvdy1sZXZlbCBmdW5jdGlvbnMgZm9yIHBvc3NpYmxlIHN1cHBvcnQgb2YgRVVJNjQgKi8KIGludCBmbGV4Y29wX2VlcHJvbV9jaGVja19tYWNfYWRkcihzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBpbnQgZXh0ZW5kZWQpCiB7CiAJdTggYnVmWzhdOwpAQCAtMTQyLDEyICsxMzYsOSBAQAogCiAJaWYgKChyZXQgPSBmbGV4Y29wX2VlcHJvbV9scmNfcmVhZChmYywweDNmOCxidWYsOCw0KSkgPT0gMCkgewogCQlpZiAoZXh0ZW5kZWQgIT0gMCkgewotCQkJZXJyKCJUT0RPOiBleHRlbmRlZCAoRVVJNjQpIE1BQyBhZGRyZXNzZXMgYXJlbid0IGNvbXBsZXRlbHkgc3VwcG9ydGVkIHlldCIpOworCQkJZXJyKCJUT0RPOiBleHRlbmRlZCAoRVVJNjQpIE1BQyBhZGRyZXNzZXMgYXJlbid0ICIKKwkJCQkiY29tcGxldGVseSBzdXBwb3J0ZWQgeWV0Iik7CiAJCQlyZXQgPSAtRUlOVkFMOwotLyoJCQltZW1jcHkoZmMtPmR2Yl9hZGFwdGVyLnByb3Bvc2VkX21hYyxidWYsMyk7Ci0JCQltYWNbM10gPSAweGZlOwotCQkJbWFjWzRdID0gMHhmZjsKLQkJCW1lbWNweSgmZmMtPmR2Yl9hZGFwdGVyLnByb3Bvc2VkX21hY1szXSwmYnVmWzVdLDMpOyAqLwogCQl9IGVsc2UKIAkJCW1lbWNweShmYy0+ZHZiX2FkYXB0ZXIucHJvcG9zZWRfbWFjLGJ1Ziw2KTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtZmUtdHVuZXIuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1mZS10dW5lci5jCmluZGV4IDVjZGVkMzcuLmY3YWZhYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1mZS10dW5lci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1mZS10dW5lci5jCkBAIC01OTIsMTQgKzU5MiwxNCBAQAogCQlmYy0+ZmVfc2xlZXAgPSBvcHMtPnNsZWVwOwogCQlvcHMtPnNsZWVwID0gZmxleGNvcF9zbGVlcDsKIAotCQlmYy0+ZGV2X3R5cGUgPSBGQ19TS1k7CisJCWZjLT5kZXZfdHlwZSA9IEZDX1NLWV9SRVYyNjsKIAkJZ290byBmZV9mb3VuZDsKIAl9CiAKIAkvKiB0cnkgdGhlIGFpciBkdmItdCAobXQzNTIvU2Ftc3VuZyB0ZHRjOTI1MWRoMCg/PykpICovCiAJZmMtPmZlID0gZHZiX2F0dGFjaChtdDM1Ml9hdHRhY2gsICZzYW1zdW5nX3RkdGM5MjUxZGgwX2NvbmZpZywgaTJjKTsKIAlpZiAoZmMtPmZlICE9IE5VTEwpIHsKLQkJZmMtPmRldl90eXBlID0gRkNfQUlSX0RWQjsKKwkJZmMtPmRldl90eXBlID0gRkNfQUlSX0RWQlQ7CiAJCWZjLT5mZS0+b3BzLnR1bmVyX29wcy5jYWxjX3JlZ3MgPSBzYW1zdW5nX3RkdGM5MjUxZGgwX2NhbGNfcmVnczsKIAkJZ290byBmZV9mb3VuZDsKIAl9CkBAIC02NTMsNyArNjUzLDcgQEAKIAkJZmMtPmZlX3NsZWVwICAgICAgICAgICAgICAgID0gb3BzLT5zbGVlcDsKIAkJb3BzLT5zbGVlcCAgICAgICAgICAgICAgICAgID0gZmxleGNvcF9zbGVlcDsKIAotCQlmYy0+ZGV2X3R5cGUgICAgICAgICAgICAgICAgPSBGQ19TS1lfT0xEOworCQlmYy0+ZGV2X3R5cGUgICAgICAgICAgICAgICAgPSBGQ19TS1lfUkVWMjM7CiAJCWdvdG8gZmVfZm91bmQ7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtaHctZmlsdGVyLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtaHctZmlsdGVyLmMKaW5kZXggNDUxOTc0Yi4uNzdlNDU0NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWh3LWZpbHRlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1ody1maWx0ZXIuYwpAQCAtMSwzMyArMSwzMCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpbnV4IGRyaXZlciB0aGUgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCi0gKgotICogZmxleGNvcC1ody1maWx0ZXIuYyAtIHBpZCBhbmQgbWFjIGFkZHJlc3MgZmlsdGVyaW5nIGFuZCBjb3JyZXNwb25kaW5nIGNvbnRyb2wgZnVuY3Rpb25zLgotICoKLSAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4KKyAqIExpbnV4IGRyaXZlciBmb3IgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCisgKiBmbGV4Y29wLWh3LWZpbHRlci5jIC0gcGlkIGFuZCBtYWMgYWRkcmVzcyBmaWx0ZXJpbmcgYW5kIGNvbnRyb2wgZnVuY3Rpb25zCisgKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24KICAqLwogI2luY2x1ZGUgImZsZXhjb3AuaCIKIAogc3RhdGljIHZvaWQgZmxleGNvcF9yY3ZfZGF0YV9jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGludCBvbm9mZikKIHsKLQlmbGV4Y29wX3NldF9pYmlfdmFsdWUoY3RybF8yMDgsUmN2X0RhdGFfc2lnLG9ub2ZmKTsKLQotCWRlYl90cygicmN2X2RhdGEgaXMgbm93OiAnJXMnXG4iLG9ub2ZmID8gIm9uIiA6ICJvZmYiKTsKKwlmbGV4Y29wX3NldF9pYmlfdmFsdWUoY3RybF8yMDgsIFJjdl9EYXRhX3NpZywgb25vZmYpOworCWRlYl90cygicmN2X2RhdGEgaXMgbm93OiAnJXMnXG4iLCBvbm9mZiA/ICJvbiIgOiAib2ZmIik7CiB9CiAKIHZvaWQgZmxleGNvcF9zbWNfY3RybChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBpbnQgb25vZmYpCiB7Ci0JZmxleGNvcF9zZXRfaWJpX3ZhbHVlKGN0cmxfMjA4LFNNQ19FbmFibGVfc2lnLG9ub2ZmKTsKKwlmbGV4Y29wX3NldF9pYmlfdmFsdWUoY3RybF8yMDgsIFNNQ19FbmFibGVfc2lnLCBvbm9mZik7CiB9CiAKIHN0YXRpYyB2b2lkIGZsZXhjb3BfbnVsbF9maWx0ZXJfY3RybChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBpbnQgb25vZmYpCiB7Ci0JZmxleGNvcF9zZXRfaWJpX3ZhbHVlKGN0cmxfMjA4LE51bGxfZmlsdGVyX3NpZyxvbm9mZik7CisJZmxleGNvcF9zZXRfaWJpX3ZhbHVlKGN0cmxfMjA4LCBOdWxsX2ZpbHRlcl9zaWcsIG9ub2ZmKTsKIH0KIAogdm9pZCBmbGV4Y29wX3NldF9tYWNfZmlsdGVyKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIHU4IG1hY1s2XSkKIHsKLQlmbGV4Y29wX2liaV92YWx1ZSB2NDE4LHY0MWM7Ci0JdjQxYyA9IGZjLT5yZWFkX2liaV9yZWcoZmMsbWFjX2FkZHJlc3NfNDFjKTsKKwlmbGV4Y29wX2liaV92YWx1ZSB2NDE4LCB2NDFjOworCXY0MWMgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLCBtYWNfYWRkcmVzc180MWMpOwogCiAJdjQxOC5tYWNfYWRkcmVzc180MTguTUFDMSA9IG1hY1swXTsKIAl2NDE4Lm1hY19hZGRyZXNzXzQxOC5NQUMyID0gbWFjWzFdOwpAQCAtMzYsMjcgKzMzLDI4IEBACiAJdjQxYy5tYWNfYWRkcmVzc180MWMuTUFDNyA9IG1hY1s0XTsKIAl2NDFjLm1hY19hZGRyZXNzXzQxYy5NQUM4ID0gbWFjWzVdOwogCi0JZmMtPndyaXRlX2liaV9yZWcoZmMsbWFjX2FkZHJlc3NfNDE4LHY0MTgpOwotCWZjLT53cml0ZV9pYmlfcmVnKGZjLG1hY19hZGRyZXNzXzQxYyx2NDFjKTsKKwlmYy0+d3JpdGVfaWJpX3JlZyhmYywgbWFjX2FkZHJlc3NfNDE4LCB2NDE4KTsKKwlmYy0+d3JpdGVfaWJpX3JlZyhmYywgbWFjX2FkZHJlc3NfNDFjLCB2NDFjKTsKIH0KIAogdm9pZCBmbGV4Y29wX21hY19maWx0ZXJfY3RybChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBpbnQgb25vZmYpCiB7Ci0JZmxleGNvcF9zZXRfaWJpX3ZhbHVlKGN0cmxfMjA4LE1BQ19maWx0ZXJfTW9kZV9zaWcsb25vZmYpOworCWZsZXhjb3Bfc2V0X2liaV92YWx1ZShjdHJsXzIwOCwgTUFDX2ZpbHRlcl9Nb2RlX3NpZywgb25vZmYpOwogfQogCi1zdGF0aWMgdm9pZCBmbGV4Y29wX3BpZF9ncm91cF9maWx0ZXIoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgdTE2IHBpZCwgdTE2IG1hc2spCitzdGF0aWMgdm9pZCBmbGV4Y29wX3BpZF9ncm91cF9maWx0ZXIoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJdTE2IHBpZCwgdTE2IG1hc2spCiB7CiAJLyogaW5kZXhfcmVnXzMxMC5leHRyYV9pbmRleF9yZWcgbmVlZCB0byAwIG9yIDcgdG8gd29yayAqLwogCWZsZXhjb3BfaWJpX3ZhbHVlIHYzMGM7CiAJdjMwYy5waWRfZmlsdGVyXzMwY19leHRfaW5kXzBfNy5Hcm91cF9QSUQgPSBwaWQ7CiAJdjMwYy5waWRfZmlsdGVyXzMwY19leHRfaW5kXzBfNy5Hcm91cF9tYXNrID0gbWFzazsKLQlmYy0+d3JpdGVfaWJpX3JlZyhmYyxwaWRfZmlsdGVyXzMwYyx2MzBjKTsKKwlmYy0+d3JpdGVfaWJpX3JlZyhmYywgcGlkX2ZpbHRlcl8zMGMsIHYzMGMpOwogfQogCiBzdGF0aWMgdm9pZCBmbGV4Y29wX3BpZF9ncm91cF9maWx0ZXJfY3RybChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBpbnQgb25vZmYpCiB7Ci0JZmxleGNvcF9zZXRfaWJpX3ZhbHVlKGN0cmxfMjA4LE1hc2tfZmlsdGVyX3NpZyxvbm9mZik7CisJZmxleGNvcF9zZXRfaWJpX3ZhbHVlKGN0cmxfMjA4LCBNYXNrX2ZpbHRlcl9zaWcsIG9ub2ZmKTsKIH0KIAogLyogdGhpcyBmYW5jeSBkZWZpbmUgcmVkdWNlcyB0aGUgY29kZSBzaXplIG9mIHRoZSBxdWl0ZSBzaW1pbGFyIFBJRCBjb250cm9sbGluZyBvZgpAQCAtNjUsOTEgKzYzLDExMiBAQAogCiAjZGVmaW5lIHBpZF9jdHJsKHZyZWduYW1lLGZpZWxkLGVuYWJsZWZpZWxkLHRyYW5zX2ZpZWxkLHRyYW5zdmFsKSBcCiAJZmxleGNvcF9pYmlfdmFsdWUgdnBpZCA9IGZjLT5yZWFkX2liaV9yZWcoZmMsIHZyZWduYW1lKSwgXAotCQkJCQkgIHYyMDggPSBmYy0+cmVhZF9pYmlfcmVnKGZjLCBjdHJsXzIwOCk7IFwKLVwKLQl2cGlkLnZyZWduYW1lLmZpZWxkID0gb25vZmYgPyBwaWQgOiAweDFmZmY7IFwKLQl2cGlkLnZyZWduYW1lLnRyYW5zX2ZpZWxkID0gdHJhbnN2YWw7IFwKLQl2MjA4LmN0cmxfMjA4LmVuYWJsZWZpZWxkID0gb25vZmY7IFwKLVwKLQlmYy0+d3JpdGVfaWJpX3JlZyhmYyx2cmVnbmFtZSx2cGlkKTsgXAotCWZjLT53cml0ZV9pYmlfcmVnKGZjLGN0cmxfMjA4LHYyMDgpOwordjIwOCA9IGZjLT5yZWFkX2liaV9yZWcoZmMsIGN0cmxfMjA4KTsgXAordnBpZC52cmVnbmFtZS5maWVsZCA9IG9ub2ZmID8gcGlkIDogMHgxZmZmOyBcCit2cGlkLnZyZWduYW1lLnRyYW5zX2ZpZWxkID0gdHJhbnN2YWw7IFwKK3YyMDguY3RybF8yMDguZW5hYmxlZmllbGQgPSBvbm9mZjsgXAorZmMtPndyaXRlX2liaV9yZWcoZmMsIHZyZWduYW1lLCB2cGlkKTsgXAorZmMtPndyaXRlX2liaV9yZWcoZmMsIGN0cmxfMjA4LCB2MjA4KTsKIAotc3RhdGljIHZvaWQgZmxleGNvcF9waWRfU3RyZWFtMV9QSURfY3RybChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCB1MTYgcGlkLCBpbnQgb25vZmYpCitzdGF0aWMgdm9pZCBmbGV4Y29wX3BpZF9TdHJlYW0xX1BJRF9jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCXUxNiBwaWQsIGludCBvbm9mZikKIHsKLQlwaWRfY3RybChwaWRfZmlsdGVyXzMwMCxTdHJlYW0xX1BJRCxTdHJlYW0xX2ZpbHRlcl9zaWcsU3RyZWFtMV90cmFucywwKTsKKwlwaWRfY3RybChwaWRfZmlsdGVyXzMwMCwgU3RyZWFtMV9QSUQsIFN0cmVhbTFfZmlsdGVyX3NpZywKKwkJCVN0cmVhbTFfdHJhbnMsIDApOwogfQogCi1zdGF0aWMgdm9pZCBmbGV4Y29wX3BpZF9TdHJlYW0yX1BJRF9jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIHUxNiBwaWQsIGludCBvbm9mZikKK3N0YXRpYyB2b2lkIGZsZXhjb3BfcGlkX1N0cmVhbTJfUElEX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJdTE2IHBpZCwgaW50IG9ub2ZmKQogewotCXBpZF9jdHJsKHBpZF9maWx0ZXJfMzAwLFN0cmVhbTJfUElELFN0cmVhbTJfZmlsdGVyX3NpZyxTdHJlYW0yX3RyYW5zLDApOworCXBpZF9jdHJsKHBpZF9maWx0ZXJfMzAwLCBTdHJlYW0yX1BJRCwgU3RyZWFtMl9maWx0ZXJfc2lnLAorCQkJU3RyZWFtMl90cmFucywgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGZsZXhjb3BfcGlkX1BDUl9QSURfY3RybChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCB1MTYgcGlkLCBpbnQgb25vZmYpCitzdGF0aWMgdm9pZCBmbGV4Y29wX3BpZF9QQ1JfUElEX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJdTE2IHBpZCwgaW50IG9ub2ZmKQogewotCXBpZF9jdHJsKHBpZF9maWx0ZXJfMzA0LFBDUl9QSUQsUENSX2ZpbHRlcl9zaWcsUENSX3RyYW5zLDApOworCXBpZF9jdHJsKHBpZF9maWx0ZXJfMzA0LCBQQ1JfUElELCBQQ1JfZmlsdGVyX3NpZywgUENSX3RyYW5zLCAwKTsKIH0KIAotc3RhdGljIHZvaWQgZmxleGNvcF9waWRfUE1UX1BJRF9jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIHUxNiBwaWQsIGludCBvbm9mZikKK3N0YXRpYyB2b2lkIGZsZXhjb3BfcGlkX1BNVF9QSURfY3RybChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQl1MTYgcGlkLCBpbnQgb25vZmYpCiB7Ci0JcGlkX2N0cmwocGlkX2ZpbHRlcl8zMDQsUE1UX1BJRCxQTVRfZmlsdGVyX3NpZyxQTVRfdHJhbnMsMCk7CisJcGlkX2N0cmwocGlkX2ZpbHRlcl8zMDQsIFBNVF9QSUQsIFBNVF9maWx0ZXJfc2lnLCBQTVRfdHJhbnMsIDApOwogfQogCi1zdGF0aWMgdm9pZCBmbGV4Y29wX3BpZF9FTU1fUElEX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgdTE2IHBpZCwgaW50IG9ub2ZmKQorc3RhdGljIHZvaWQgZmxleGNvcF9waWRfRU1NX1BJRF9jdHJsKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCXUxNiBwaWQsIGludCBvbm9mZikKIHsKLQlwaWRfY3RybChwaWRfZmlsdGVyXzMwOCxFTU1fUElELEVNTV9maWx0ZXJfc2lnLEVNTV90cmFucywwKTsKKwlwaWRfY3RybChwaWRfZmlsdGVyXzMwOCwgRU1NX1BJRCwgRU1NX2ZpbHRlcl9zaWcsIEVNTV90cmFucywgMCk7CiB9CiAKLXN0YXRpYyB2b2lkIGZsZXhjb3BfcGlkX0VDTV9QSURfY3RybChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCB1MTYgcGlkLCBpbnQgb25vZmYpCitzdGF0aWMgdm9pZCBmbGV4Y29wX3BpZF9FQ01fUElEX2N0cmwoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJdTE2IHBpZCwgaW50IG9ub2ZmKQogewotCXBpZF9jdHJsKHBpZF9maWx0ZXJfMzA4LEVDTV9QSUQsRUNNX2ZpbHRlcl9zaWcsRUNNX3RyYW5zLDApOworCXBpZF9jdHJsKHBpZF9maWx0ZXJfMzA4LCBFQ01fUElELCBFQ01fZmlsdGVyX3NpZywgRUNNX3RyYW5zLCAwKTsKIH0KIAotc3RhdGljIHZvaWQgZmxleGNvcF9waWRfY29udHJvbChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBpbnQgaW5kZXgsIHUxNiBwaWQsaW50IG9ub2ZmKQorc3RhdGljIHZvaWQgZmxleGNvcF9waWRfY29udHJvbChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQlpbnQgaW5kZXgsIHUxNiBwaWQsIGludCBvbm9mZikKIHsKIAlpZiAocGlkID09IDB4MjAwMCkKIAkJcmV0dXJuOwogCi0JZGViX3RzKCJzZXR0aW5nIHBpZDogJTVkICUwNHggYXQgaW5kZXggJWQgJyVzJ1xuIixwaWQscGlkLGluZGV4LG9ub2ZmID8gIm9uIiA6ICJvZmYiKTsKKwlkZWJfdHMoInNldHRpbmcgcGlkOiAlNWQgJTA0eCBhdCBpbmRleCAlZCAnJXMnXG4iLAorCQkJcGlkLCBwaWQsIGluZGV4LCBvbm9mZiA/ICJvbiIgOiAib2ZmIik7CiAKIAkvKiBXZSBjb3VsZCB1c2UgYml0IG1hZ2ljIGhlcmUgdG8gcmVkdWNlIHNvdXJjZSBjb2RlIHNpemUuCiAJICogSSBkZWNpZGVkIGFnYWluc3QgaXQsIGJ1dCB0byB1c2UgdGhlIHJlYWwgcmVnaXN0ZXIgbmFtZXMgKi8KIAlzd2l0Y2ggKGluZGV4KSB7Ci0JCWNhc2UgMDogZmxleGNvcF9waWRfU3RyZWFtMV9QSURfY3RybChmYyxwaWQsb25vZmYpOyBicmVhazsKLQkJY2FzZSAxOiBmbGV4Y29wX3BpZF9TdHJlYW0yX1BJRF9jdHJsKGZjLHBpZCxvbm9mZik7IGJyZWFrOwotCQljYXNlIDI6IGZsZXhjb3BfcGlkX1BDUl9QSURfY3RybChmYyxwaWQsb25vZmYpOyBicmVhazsKLQkJY2FzZSAzOiBmbGV4Y29wX3BpZF9QTVRfUElEX2N0cmwoZmMscGlkLG9ub2ZmKTsgYnJlYWs7Ci0JCWNhc2UgNDogZmxleGNvcF9waWRfRU1NX1BJRF9jdHJsKGZjLHBpZCxvbm9mZik7IGJyZWFrOwotCQljYXNlIDU6CWZsZXhjb3BfcGlkX0VDTV9QSURfY3RybChmYyxwaWQsb25vZmYpOyBicmVhazsKLQkJZGVmYXVsdDoKLQkJCWlmIChmYy0+aGFzXzMyX2h3X3BpZF9maWx0ZXIgJiYgaW5kZXggPCAzOCkgewotCQkJCWZsZXhjb3BfaWJpX3ZhbHVlIHZwaWQsdmlkOworCWNhc2UgMDoKKwkJZmxleGNvcF9waWRfU3RyZWFtMV9QSURfY3RybChmYywgcGlkLCBvbm9mZik7CisJCWJyZWFrOworCWNhc2UgMToKKwkJZmxleGNvcF9waWRfU3RyZWFtMl9QSURfY3RybChmYywgcGlkLCBvbm9mZik7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJZmxleGNvcF9waWRfUENSX1BJRF9jdHJsKGZjLCBwaWQsIG9ub2ZmKTsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQlmbGV4Y29wX3BpZF9QTVRfUElEX2N0cmwoZmMsIHBpZCwgb25vZmYpOworCQlicmVhazsKKwljYXNlIDQ6CisJCWZsZXhjb3BfcGlkX0VNTV9QSURfY3RybChmYywgcGlkLCBvbm9mZik7CisJCWJyZWFrOworCWNhc2UgNToKKwkJZmxleGNvcF9waWRfRUNNX1BJRF9jdHJsKGZjLCBwaWQsIG9ub2ZmKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWYgKGZjLT5oYXNfMzJfaHdfcGlkX2ZpbHRlciAmJiBpbmRleCA8IDM4KSB7CisJCQlmbGV4Y29wX2liaV92YWx1ZSB2cGlkLCB2aWQ7CiAKLQkJCQkvKiBzZXQgdGhlIGluZGV4ICovCi0JCQkJdmlkID0gZmMtPnJlYWRfaWJpX3JlZyhmYyxpbmRleF9yZWdfMzEwKTsKLQkJCQl2aWQuaW5kZXhfcmVnXzMxMC5pbmRleF9yZWcgPSBpbmRleCAtIDY7Ci0JCQkJZmMtPndyaXRlX2liaV9yZWcoZmMsaW5kZXhfcmVnXzMxMCwgdmlkKTsKKwkJCS8qIHNldCB0aGUgaW5kZXggKi8KKwkJCXZpZCA9IGZjLT5yZWFkX2liaV9yZWcoZmMsIGluZGV4X3JlZ18zMTApOworCQkJdmlkLmluZGV4X3JlZ18zMTAuaW5kZXhfcmVnID0gaW5kZXggLSA2OworCQkJZmMtPndyaXRlX2liaV9yZWcoZmMsIGluZGV4X3JlZ18zMTAsIHZpZCk7CiAKLQkJCQl2cGlkID0gZmMtPnJlYWRfaWJpX3JlZyhmYyxwaWRfbl9yZWdfMzE0KTsKLQkJCQl2cGlkLnBpZF9uX3JlZ18zMTQuUElEID0gb25vZmYgPyBwaWQgOiAweDFmZmY7Ci0JCQkJdnBpZC5waWRfbl9yZWdfMzE0LlBJRF9lbmFibGVfYml0ID0gb25vZmY7Ci0JCQkJZmMtPndyaXRlX2liaV9yZWcoZmMscGlkX25fcmVnXzMxNCwgdnBpZCk7Ci0JCQl9Ci0JCQlicmVhazsKKwkJCXZwaWQgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLCBwaWRfbl9yZWdfMzE0KTsKKwkJCXZwaWQucGlkX25fcmVnXzMxNC5QSUQgPSBvbm9mZiA/IHBpZCA6IDB4MWZmZjsKKwkJCXZwaWQucGlkX25fcmVnXzMxNC5QSURfZW5hYmxlX2JpdCA9IG9ub2ZmOworCQkJZmMtPndyaXRlX2liaV9yZWcoZmMsIHBpZF9uX3JlZ18zMTQsIHZwaWQpOworCQl9CisJCWJyZWFrOwogCX0KIH0KIAotc3RhdGljIGludCBmbGV4Y29wX3RvZ2dsZV9mdWxsdHNfc3RyZWFtaW5nKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsaW50IG9ub2ZmKQorc3RhdGljIGludCBmbGV4Y29wX3RvZ2dsZV9mdWxsdHNfc3RyZWFtaW5nKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGludCBvbm9mZikKIHsKIAlpZiAoZmMtPmZ1bGx0c19zdHJlYW1pbmdfc3RhdGUgIT0gb25vZmYpIHsKIAkJZGViX3RzKCIlcyBmdWxsIFRTIHRyYW5zZmVyXG4iLG9ub2ZmID8gImVuYWJsaW5nIiA6ICJkaXNhYmxpbmciKTsKIAkJZmxleGNvcF9waWRfZ3JvdXBfZmlsdGVyKGZjLCAwLCAweDFmZTAgKiAoIW9ub2ZmKSk7Ci0JCWZsZXhjb3BfcGlkX2dyb3VwX2ZpbHRlcl9jdHJsKGZjLG9ub2ZmKTsKKwkJZmxleGNvcF9waWRfZ3JvdXBfZmlsdGVyX2N0cmwoZmMsIG9ub2ZmKTsKIAkJZmMtPmZ1bGx0c19zdHJlYW1pbmdfc3RhdGUgPSBvbm9mZjsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLWludCBmbGV4Y29wX3BpZF9mZWVkX2NvbnRyb2woc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgc3RydWN0IGR2Yl9kZW11eF9mZWVkICpkdmJkbXhmZWVkLCBpbnQgb25vZmYpCitpbnQgZmxleGNvcF9waWRfZmVlZF9jb250cm9sKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCXN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZHZiZG14ZmVlZCwgaW50IG9ub2ZmKQogewogCWludCBtYXhfcGlkX2ZpbHRlciA9IDYgKyBmYy0+aGFzXzMyX2h3X3BpZF9maWx0ZXIqMzI7CiAKQEAgLTE2NCwyNCArMTgzLDI1IEBACiAJICogICAtIG9yIHRoZSByZXF1ZXN0ZWQgcGlkIGlzIDB4MjAwMCAqLwogCiAJaWYgKCFmYy0+cGlkX2ZpbHRlcmluZyAmJiBmYy0+ZmVlZGNvdW50ID09IG9ub2ZmKQotCQlmbGV4Y29wX3RvZ2dsZV9mdWxsdHNfc3RyZWFtaW5nKGZjLG9ub2ZmKTsKKwkJZmxleGNvcF90b2dnbGVfZnVsbHRzX3N0cmVhbWluZyhmYywgb25vZmYpOwogCiAJaWYgKGZjLT5waWRfZmlsdGVyaW5nKSB7Ci0JCWZsZXhjb3BfcGlkX2NvbnRyb2woZmMsZHZiZG14ZmVlZC0+aW5kZXgsZHZiZG14ZmVlZC0+cGlkLG9ub2ZmKTsKKwkJZmxleGNvcF9waWRfY29udHJvbCBcCisJCQkoZmMsIGR2YmRteGZlZWQtPmluZGV4LCBkdmJkbXhmZWVkLT5waWQsIG9ub2ZmKTsKIAogCQlpZiAoZmMtPmV4dHJhX2ZlZWRjb3VudCA+IDApCi0JCQlmbGV4Y29wX3RvZ2dsZV9mdWxsdHNfc3RyZWFtaW5nKGZjLDEpOworCQkJZmxleGNvcF90b2dnbGVfZnVsbHRzX3N0cmVhbWluZyhmYywgMSk7CiAJCWVsc2UgaWYgKGR2YmRteGZlZWQtPnBpZCA9PSAweDIwMDApCi0JCQlmbGV4Y29wX3RvZ2dsZV9mdWxsdHNfc3RyZWFtaW5nKGZjLG9ub2ZmKTsKKwkJCWZsZXhjb3BfdG9nZ2xlX2Z1bGx0c19zdHJlYW1pbmcoZmMsIG9ub2ZmKTsKIAkJZWxzZQotCQkJZmxleGNvcF90b2dnbGVfZnVsbHRzX3N0cmVhbWluZyhmYywwKTsKKwkJCWZsZXhjb3BfdG9nZ2xlX2Z1bGx0c19zdHJlYW1pbmcoZmMsIDApOwogCX0KIAogCS8qIGlmIGl0IHdhcyB0aGUgZmlyc3Qgb3IgbGFzdCBmZWVkIHJlcXVlc3QgY2hhbmdlIHRoZSBzdHJlYW0tc3RhdHVzICovCiAJaWYgKGZjLT5mZWVkY291bnQgPT0gb25vZmYpIHsKLQkJZmxleGNvcF9yY3ZfZGF0YV9jdHJsKGZjLG9ub2ZmKTsKKwkJZmxleGNvcF9yY3ZfZGF0YV9jdHJsKGZjLCBvbm9mZik7CiAJCWlmIChmYy0+c3RyZWFtX2NvbnRyb2wpIC8qIGRldmljZSBzcGVjaWZpYyBzdHJlYW0gY29udHJvbCAqLwotCQkJZmMtPnN0cmVhbV9jb250cm9sKGZjLG9ub2ZmKTsKKwkJCWZjLT5zdHJlYW1fY29udHJvbChmYywgb25vZmYpOwogCiAJCS8qIGZlZWRpbmcgc3RvcHBlZCAtPiByZXNldCB0aGUgZmxleGNvcCBmaWx0ZXIqLwogCQlpZiAob25vZmYgPT0gMCkgewpAQCAtMTg5LDcgKzIwOSw2IEBACiAJCQlmbGV4Y29wX2h3X2ZpbHRlcl9pbml0KGZjKTsKIAkJfQogCX0KLQogCXJldHVybiAwOwogfQogRVhQT1JUX1NZTUJPTChmbGV4Y29wX3BpZF9mZWVkX2NvbnRyb2wpOwpAQCAtMTk5LDE1ICsyMTgsMTUgQEAKIAlpbnQgaTsKIAlmbGV4Y29wX2liaV92YWx1ZSB2OwogCWZvciAoaSA9IDA7IGkgPCA2ICsgMzIqZmMtPmhhc18zMl9od19waWRfZmlsdGVyOyBpKyspCi0JCWZsZXhjb3BfcGlkX2NvbnRyb2woZmMsaSwweDFmZmYsMCk7CisJCWZsZXhjb3BfcGlkX2NvbnRyb2woZmMsIGksIDB4MWZmZiwgMCk7CiAKIAlmbGV4Y29wX3BpZF9ncm91cF9maWx0ZXIoZmMsIDAsIDB4MWZlMCk7Ci0JZmxleGNvcF9waWRfZ3JvdXBfZmlsdGVyX2N0cmwoZmMsMCk7CisJZmxleGNvcF9waWRfZ3JvdXBfZmlsdGVyX2N0cmwoZmMsIDApOwogCi0JdiA9IGZjLT5yZWFkX2liaV9yZWcoZmMscGlkX2ZpbHRlcl8zMDgpOworCXYgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLCBwaWRfZmlsdGVyXzMwOCk7CiAJdi5waWRfZmlsdGVyXzMwOC5FTU1fZmlsdGVyXzQgPSAxOwogCXYucGlkX2ZpbHRlcl8zMDguRU1NX2ZpbHRlcl82ID0gMDsKLQlmYy0+d3JpdGVfaWJpX3JlZyhmYyxwaWRfZmlsdGVyXzMwOCx2KTsKKwlmYy0+d3JpdGVfaWJpX3JlZyhmYywgcGlkX2ZpbHRlcl8zMDgsIHYpOwogCiAJZmxleGNvcF9udWxsX2ZpbHRlcl9jdHJsKGZjLCAxKTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1pMmMuYwppbmRleCBmMTM3ODNmLi5lMmJlZDUwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLWkyYy5jCkBAIC0xLDE3ICsxLDE0IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGludXggZHJpdmVyIHRoZSBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKLSAqCisgKiBMaW51eCBkcml2ZXIgZm9yIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQogICogZmxleGNvcC1pMmMuYyAtIGZsZXhjb3AgaW50ZXJuYWwgMldpcmUgYnVzIChJMkMpIGFuZCBkdmIgaTJjIGluaXRpYWxpemF0aW9uCi0gKgotICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uLgorICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uCiAgKi8KICNpbmNsdWRlICJmbGV4Y29wLmgiCiAKICNkZWZpbmUgRkNfTUFYX0kyQ19SRVRSSUVTIDEwMDAwMAogCi0vKiAjZGVmaW5lIERVTVBfSTJDX01FU1NBR0VTICovCi0KLXN0YXRpYyBpbnQgZmxleGNvcF9pMmNfb3BlcmF0aW9uKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3BfaWJpX3ZhbHVlICpyMTAwKQorc3RhdGljIGludCBmbGV4Y29wX2kyY19vcGVyYXRpb24oc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJZmxleGNvcF9pYmlfdmFsdWUgKnIxMDApCiB7CiAJaW50IGk7CiAJZmxleGNvcF9pYmlfdmFsdWUgcjsKQEAgLTI2LDcgKzIzLDcgQEAKIAkJciA9IGZjLT5yZWFkX2liaV9yZWcoZmMsIHR3X3NtX2NfMTAwKTsKIAogCQlpZiAoIXIudHdfc21fY18xMDAubm9fYmFzZV9hZGRyX2Fja19lcnJvcikgewotCQkJaWYgKHIudHdfc21fY18xMDAuc3RfZG9uZSkgeyAgLyogJiYgIXIudHdfc21fY18xMDAud29ya2luZ19zdGFydCAqLworCQkJaWYgKHIudHdfc21fY18xMDAuc3RfZG9uZSkgewogCQkJCSpyMTAwID0gcjsKIAkJCQlkZWJfaTJjKCJpMmMgc3VjY2Vzc1xuIik7CiAJCQkJcmV0dXJuIDA7CkBAIC0zNiwxNyArMzMsMzEgQEAKIAkJCXJldHVybiAtRVJFTU9URUlPOwogCQl9CiAJfQotCWRlYl9pMmMoInRyaWVkICVkIHRpbWVzIGkyYyBvcGVyYXRpb24sIG5ldmVyIGZpbmlzaGVkIG9yIHRvbyBtYW55IGFjayBlcnJvcnMuXG4iLGkpOworCWRlYl9pMmMoInRyaWVkICVkIHRpbWVzIGkyYyBvcGVyYXRpb24sICIKKwkJCSJuZXZlciBmaW5pc2hlZCBvciB0b28gbWFueSBhY2sgZXJyb3JzLlxuIiwgaSk7CiAJcmV0dXJuIC1FUkVNT1RFSU87CiB9CiAKIHN0YXRpYyBpbnQgZmxleGNvcF9pMmNfcmVhZDQoc3RydWN0IGZsZXhjb3BfaTJjX2FkYXB0ZXIgKmkyYywKLQlmbGV4Y29wX2liaV92YWx1ZSByMTAwLCB1OCAqYnVmKQorCQlmbGV4Y29wX2liaV92YWx1ZSByMTAwLCB1OCAqYnVmKQogewogCWZsZXhjb3BfaWJpX3ZhbHVlIHIxMDQ7Ci0JaW50IGxlbiA9IHIxMDAudHdfc21fY18xMDAudG90YWxfYnl0ZXMsIC8qIHJlbWVtYmVyIHRvdGFsX2J5dGVzIGlzIGJ1Zmxlbi0xICovCisJaW50IGxlbiA9IHIxMDAudHdfc21fY18xMDAudG90YWxfYnl0ZXMsCisJCS8qIHJlbWVtYmVyIHRvdGFsX2J5dGVzIGlzIGJ1Zmxlbi0xICovCiAJCXJldDsKIAorCS8qIHdvcmstYXJvdW5kIHRvIGhhdmUgQ2FibGVTdGFyMiBhbmQgU2t5U3RhcjIgcmV2IDIuNyB3b3JrCisJICogY29ycmVjdGx5OgorCSAqCisJICogdGhlIElURDEwMDAgaXMgYmVoaW5kIGFuIGkyYy1nYXRlIHdoaWNoIGNsb3NlcyBhdXRvbWF0aWNhbGx5CisJICogYWZ0ZXIgYW4gaTJjLXRyYW5zYWN0aW9uIHRoZSBTVFYwMjk3IG5lZWRzIDIgY29uc2VjdXRpdmUgcmVhZHMKKwkgKiBvbmUgd2l0aCBub19iYXNlX2FkZHIgPSAwIGFuZCBvbmUgd2l0aCAxCisJICoKKwkgKiB0aG9zZSB0d28gd29yay1hcm91bmRzIGFyZSBjb25mbGljdGluOiB3ZSBjaGVjayBmb3IgdGhlIGNhcmQKKwkgKiB0eXBlLCBpdCBpcyBzZXQgd2hlbiBwcm9iaW5nIHRoZSBJVEQxMDAwICovCisJaWYgKGkyYy0+ZmMtPmRldl90eXBlID09IEZDX1NLWV9SRVYyNykKKwkJcjEwMC50d19zbV9jXzEwMC5ub19iYXNlX2FkZHJfYWNrX2Vycm9yID0gaTJjLT5ub19iYXNlX2FkZHI7CisKIAlyZXQgPSBmbGV4Y29wX2kyY19vcGVyYXRpb24oaTJjLT5mYywgJnIxMDApOwogCWlmIChyZXQgIT0gMCkgewogCQlkZWJfaTJjKCJSZXRyeWluZyBvcGVyYXRpb25cbiIpOwpAQCAtNjksMTEgKzgwLDExIEBACiAJCWlmIChsZW4gPiAxKSBidWZbMl0gPSByMTA0LnR3X3NtX2NfMTA0LmRhdGEzX3JlZzsKIAkJaWYgKGxlbiA+IDIpIGJ1ZlszXSA9IHIxMDQudHdfc21fY18xMDQuZGF0YTRfcmVnOwogCX0KLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGZsZXhjb3BfaTJjX3dyaXRlNChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX2liaV92YWx1ZSByMTAwLCB1OCAqYnVmKQorc3RhdGljIGludCBmbGV4Y29wX2kyY193cml0ZTQoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJZmxleGNvcF9pYmlfdmFsdWUgcjEwMCwgdTggKmJ1ZikKIHsKIAlmbGV4Y29wX2liaV92YWx1ZSByMTA0OwogCWludCBsZW4gPSByMTAwLnR3X3NtX2NfMTAwLnRvdGFsX2J5dGVzOyAvKiByZW1lbWJlciB0b3RhbF9ieXRlcyBpcyBidWZsZW4tMSAqLwpAQCAtODEsNyArOTIsNiBAQAogCiAJLyogdGhlcmUgaXMgYXQgbGVhc3Qgb25lIGJ5dGUsIG90aGVyd2lzZSB3ZSB3b3VsZG4ndCBiZSBoZXJlICovCiAJcjEwMC50d19zbV9jXzEwMC5kYXRhMV9yZWcgPSBidWZbMF07Ci0KIAlyMTA0LnR3X3NtX2NfMTA0LmRhdGEyX3JlZyA9IGxlbiA+IDAgPyBidWZbMV0gOiAwOwogCXIxMDQudHdfc21fY18xMDQuZGF0YTNfcmVnID0gbGVuID4gMSA/IGJ1ZlsyXSA6IDA7CiAJcjEwNC50d19zbV9jXzEwNC5kYXRhNF9yZWcgPSBsZW4gPiAyID8gYnVmWzNdIDogMDsKQEAgLTk0LDcgKzEwNCw3IEBACiB9CiAKIGludCBmbGV4Y29wX2kyY19yZXF1ZXN0KHN0cnVjdCBmbGV4Y29wX2kyY19hZGFwdGVyICppMmMsCi0JZmxleGNvcF9hY2Nlc3Nfb3BfdCBvcCwgdTggY2hpcGFkZHIsIHU4IGFkZHIsIHU4ICpidWYsIHUxNiBsZW4pCisJCWZsZXhjb3BfYWNjZXNzX29wX3Qgb3AsIHU4IGNoaXBhZGRyLCB1OCBhZGRyLCB1OCAqYnVmLCB1MTYgbGVuKQogewogCWludCByZXQ7CiAKQEAgLTExNyw3ICsxMjcsNiBAQAogCQlwcmludGsoInJkKCIpOwogCWVsc2UKIAkJcHJpbnRrKCJ3cigiKTsKLQogCXByaW50aygiJTAyeCk6ICUwMnggIiwgY2hpcGFkZHIsIGFkZHIpOwogI2VuZGlmCiAKQEAgLTE2Myw3ICsxNzIsOCBAQAogRVhQT1JUX1NZTUJPTChmbGV4Y29wX2kyY19yZXF1ZXN0KTsKIAogLyogbWFzdGVyIHhmZXIgY2FsbGJhY2sgZm9yIGRlbW9kdWxhdG9yICovCi1zdGF0aWMgaW50IGZsZXhjb3BfbWFzdGVyX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgc3RydWN0IGkyY19tc2cgbXNnc1tdLCBpbnQgbnVtKQorc3RhdGljIGludCBmbGV4Y29wX21hc3Rlcl94ZmVyKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCisJCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSwgaW50IG51bSkKIHsKIAlzdHJ1Y3QgZmxleGNvcF9pMmNfYWRhcHRlciAqaTJjID0gaTJjX2dldF9hZGFwZGF0YShpMmNfYWRhcCk7CiAJaW50IGksIHJldCA9IDA7CkBAIC0xODIsMTIgKzE5MiwxMyBAQAogCQkvKiByZWFkaW5nICovCiAJCWlmIChpKzEgPCBudW0gJiYgKG1zZ3NbaSsxXS5mbGFncyA9PSBJMkNfTV9SRCkpIHsKIAkJCXJldCA9IGkyYy0+ZmMtPmkyY19yZXF1ZXN0KGkyYywgRkNfUkVBRCwgbXNnc1tpXS5hZGRyLAotCQkJCW1zZ3NbaV0uYnVmWzBdLCBtc2dzW2krMV0uYnVmLCBtc2dzW2krMV0ubGVuKTsKKwkJCQkJbXNnc1tpXS5idWZbMF0sIG1zZ3NbaSsxXS5idWYsCisJCQkJCW1zZ3NbaSsxXS5sZW4pOwogCQkJaSsrOyAvKiBza2lwIHRoZSBmb2xsb3dpbmcgbWVzc2FnZSAqLwogCQl9IGVsc2UgLyogd3JpdGluZyAqLwogCQkJcmV0ID0gaTJjLT5mYy0+aTJjX3JlcXVlc3QoaTJjLCBGQ19XUklURSwgbXNnc1tpXS5hZGRyLAotCQkJCW1zZ3NbaV0uYnVmWzBdLCAmbXNnc1tpXS5idWZbMV0sCi0JCQkJbXNnc1tpXS5sZW4gLSAxKTsKKwkJCQkJbXNnc1tpXS5idWZbMF0sICZtc2dzW2ldLmJ1ZlsxXSwKKwkJCQkJbXNnc1tpXS5sZW4gLSAxKTsKIAkJaWYgKHJldCA8IDApIHsKIAkJCWVycigiaTJjIG1hc3Rlcl94ZmVyIGZhaWxlZCIpOwogCQkJYnJlYWs7CkBAIC0yMTQsMjMgKzIyNSwyMSBAQAogaW50IGZsZXhjb3BfaTJjX2luaXQoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYykKIHsKIAlpbnQgcmV0OwotCiAJbXV0ZXhfaW5pdCgmZmMtPmkyY19tdXRleCk7CiAKIAlmYy0+ZmNfaTJjX2FkYXBbMF0uZmMgPSBmYzsKIAlmYy0+ZmNfaTJjX2FkYXBbMV0uZmMgPSBmYzsKIAlmYy0+ZmNfaTJjX2FkYXBbMl0uZmMgPSBmYzsKLQogCWZjLT5mY19pMmNfYWRhcFswXS5wb3J0ID0gRkNfSTJDX1BPUlRfREVNT0Q7CiAJZmMtPmZjX2kyY19hZGFwWzFdLnBvcnQgPSBGQ19JMkNfUE9SVF9FRVBST007CiAJZmMtPmZjX2kyY19hZGFwWzJdLnBvcnQgPSBGQ19JMkNfUE9SVF9UVU5FUjsKIAogCXN0cmxjcHkoZmMtPmZjX2kyY19hZGFwWzBdLmkyY19hZGFwLm5hbWUsICJCMkMyIEZsZXhDb3AgSTJDIHRvIGRlbW9kIiwKLQkJc2l6ZW9mKGZjLT5mY19pMmNfYWRhcFswXS5pMmNfYWRhcC5uYW1lKSk7CisJCQlzaXplb2YoZmMtPmZjX2kyY19hZGFwWzBdLmkyY19hZGFwLm5hbWUpKTsKIAlzdHJsY3B5KGZjLT5mY19pMmNfYWRhcFsxXS5pMmNfYWRhcC5uYW1lLCAiQjJDMiBGbGV4Q29wIEkyQyB0byBlZXByb20iLAotCQlzaXplb2YoZmMtPmZjX2kyY19hZGFwWzFdLmkyY19hZGFwLm5hbWUpKTsKKwkJCXNpemVvZihmYy0+ZmNfaTJjX2FkYXBbMV0uaTJjX2FkYXAubmFtZSkpOwogCXN0cmxjcHkoZmMtPmZjX2kyY19hZGFwWzJdLmkyY19hZGFwLm5hbWUsICJCMkMyIEZsZXhDb3AgSTJDIHRvIHR1bmVyIiwKLQkJc2l6ZW9mKGZjLT5mY19pMmNfYWRhcFsyXS5pMmNfYWRhcC5uYW1lKSk7CisJCQlzaXplb2YoZmMtPmZjX2kyY19hZGFwWzJdLmkyY19hZGFwLm5hbWUpKTsKIAogCWkyY19zZXRfYWRhcGRhdGEoJmZjLT5mY19pMmNfYWRhcFswXS5pMmNfYWRhcCwgJmZjLT5mY19pMmNfYWRhcFswXSk7CiAJaTJjX3NldF9hZGFwZGF0YSgmZmMtPmZjX2kyY19hZGFwWzFdLmkyY19hZGFwLCAmZmMtPmZjX2kyY19hZGFwWzFdKTsKQEAgLTI2OCw3ICsyNzcsNiBAQAogCWkyY19kZWxfYWRhcHRlcigmZmMtPmZjX2kyY19hZGFwWzFdLmkyY19hZGFwKTsKIGFkYXBfMV9mYWlsZWQ6CiAJaTJjX2RlbF9hZGFwdGVyKCZmYy0+ZmNfaTJjX2FkYXBbMF0uaTJjX2FkYXApOwotCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjc5LDYgKzI4Nyw1IEBACiAJCWkyY19kZWxfYWRhcHRlcigmZmMtPmZjX2kyY19hZGFwWzFdLmkyY19hZGFwKTsKIAkJaTJjX2RlbF9hZGFwdGVyKCZmYy0+ZmNfaTJjX2FkYXBbMF0uaTJjX2FkYXApOwogCX0KLQogCWZjLT5pbml0X3N0YXRlICY9IH5GQ19TVEFURV9JMkNfSU5JVDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1taXNjLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtbWlzYy5jCmluZGV4IDkzZDIwZTUuLmU1NjYyN2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1taXNjLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLW1pc2MuYwpAQCAtMSw5ICsxLDcgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaW51eCBkcml2ZXIgdGhlIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQotICoKLSAqIGZsZXhjb3AtbWlzYy5jIC0gbWlzY2VsbGFuZW91cyBmdW5jdGlvbnMuCi0gKgotICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uLgorICogTGludXggZHJpdmVyIGZvciBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKKyAqIGZsZXhjb3AtbWlzYy5jIC0gbWlzY2VsbGFuZW91cyBmdW5jdGlvbnMKKyAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbgogICovCiAjaW5jbHVkZSAiZmxleGNvcC5oIgogCkBAIC0xMiwzOSArMTAsNDMgQEAKIAlmbGV4Y29wX2liaV92YWx1ZSB2ID0gZmMtPnJlYWRfaWJpX3JlZyhmYyxtaXNjXzIwNCk7CiAKIAlzd2l0Y2ggKHYubWlzY18yMDQuUmV2X05fc2lnX3JldmlzaW9uX2hpKSB7Ci0JCWNhc2UgMHgyOgotCQkJZGViX2luZm8oImZvdW5kIGEgRmxleENvcElJLlxuIik7Ci0JCQlmYy0+cmV2ID0gRkxFWENPUF9JSTsKLQkJCWJyZWFrOwotCQljYXNlIDB4MzoKLQkJCWRlYl9pbmZvKCJmb3VuZCBhIEZsZXhDb3BJSWIuXG4iKTsKLQkJCWZjLT5yZXYgPSBGTEVYQ09QX0lJQjsKLQkJCWJyZWFrOwotCQljYXNlIDB4MDoKLQkJCWRlYl9pbmZvKCJmb3VuZCBhIEZsZXhDb3BJSUkuXG4iKTsKLQkJCWZjLT5yZXYgPSBGTEVYQ09QX0lJSTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZXJyKCJ1bmtvd24gRmxleENvcCBSZXZpc2lvbjogJXguIFBsZWFzZSByZXBvcnQgdGhlIGxpbnV4LWR2YkBsaW51eHR2Lm9yZy4iLHYubWlzY18yMDQuUmV2X05fc2lnX3JldmlzaW9uX2hpKTsKLQkJCWJyZWFrOworCWNhc2UgMHgyOgorCQlkZWJfaW5mbygiZm91bmQgYSBGbGV4Q29wSUkuXG4iKTsKKwkJZmMtPnJldiA9IEZMRVhDT1BfSUk7CisJCWJyZWFrOworCWNhc2UgMHgzOgorCQlkZWJfaW5mbygiZm91bmQgYSBGbGV4Q29wSUliLlxuIik7CisJCWZjLT5yZXYgPSBGTEVYQ09QX0lJQjsKKwkJYnJlYWs7CisJY2FzZSAweDA6CisJCWRlYl9pbmZvKCJmb3VuZCBhIEZsZXhDb3BJSUkuXG4iKTsKKwkJZmMtPnJldiA9IEZMRVhDT1BfSUlJOworCQlicmVhazsKKwlkZWZhdWx0OgorCQllcnIoInVua25vd24gRmxleENvcCBSZXZpc2lvbjogJXguIFBsZWFzZSByZXBvcnQgdGhpcyB0byAiCisJCQkJImxpbnV4LWR2YkBsaW51eHR2Lm9yZy4iLAorCQkJCXYubWlzY18yMDQuUmV2X05fc2lnX3JldmlzaW9uX2hpKTsKKwkJYnJlYWs7CiAJfQogCiAJaWYgKChmYy0+aGFzXzMyX2h3X3BpZF9maWx0ZXIgPSB2Lm1pc2NfMjA0LlJldl9OX3NpZ19jYXBzKSkKLQkJZGViX2luZm8oInRoaXMgRmxleENvcCBoYXMgdGhlIGFkZGl0aW9uYWwgMzIgaGFyZHdhcmUgcGlkIGZpbHRlci5cbiIpOworCQlkZWJfaW5mbygidGhpcyBGbGV4Q29wIGhhcyAiCisJCQkJInRoZSBhZGRpdGlvbmFsIDMyIGhhcmR3YXJlIHBpZCBmaWx0ZXIuXG4iKTsKIAllbHNlCi0JCWRlYl9pbmZvKCJ0aGlzIEZsZXhDb3AgaGFzIG9ubHkgdGhlIDYgYmFzaWMgbWFpbiBoYXJkd2FyZSBwaWQgZmlsdGVyLlxuIik7CisJCWRlYl9pbmZvKCJ0aGlzIEZsZXhDb3AgaGFzICIKKwkJCQkidGhlIDYgYmFzaWMgbWFpbiBoYXJkd2FyZSBwaWQgZmlsdGVyLlxuIik7CiAJLyogYnVzIHBhcnRzIGhhdmUgdG8gZGVjaWRlIGlmIGh3IHBpZCBmaWx0ZXJpbmcgaXMgdXNlZCBvciBub3QuICovCiB9CiAKIHN0YXRpYyBjb25zdCBjaGFyICpmbGV4Y29wX3JldmlzaW9uX25hbWVzW10gPSB7Ci0JIlVua293biBjaGlwIiwKKwkiVW5rbm93biBjaGlwIiwKIAkiRmxleENvcElJIiwKIAkiRmxleENvcElJYiIsCiAJIkZsZXhDb3BJSUkiLAogfTsKIAogc3RhdGljIGNvbnN0IGNoYXIgKmZsZXhjb3BfZGV2aWNlX25hbWVzW10gPSB7Ci0JIlVua293biBkZXZpY2UiLAorCSJVbmtub3duIGRldmljZSIsCiAJIkFpcjJQQy9BaXJTdGFyIDIgRFZCLVQiLAogCSJBaXIyUEMvQWlyU3RhciAyIEFUU0MgMXN0IGdlbmVyYXRpb24iLAogCSJBaXIyUEMvQWlyU3RhciAyIEFUU0MgMm5kIGdlbmVyYXRpb24iLApAQCAtNjEsMjEgKzYzLDIzIEBACiAJIlBDSSIsCiB9OwogCi12b2lkIGZsZXhjb3BfZGV2aWNlX25hbWUoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYyxjb25zdCBjaGFyICpwcmVmaXgsY29uc3QKLQkJY2hhciAqc3VmZml4KQordm9pZCBmbGV4Y29wX2RldmljZV9uYW1lKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCWNvbnN0IGNoYXIgKnByZWZpeCwgY29uc3QgY2hhciAqc3VmZml4KQogewotCWluZm8oIiVzICclcycgYXQgdGhlICclcycgYnVzIGNvbnRyb2xsZWQgYnkgYSAnJXMnICVzIixwcmVmaXgsCi0JCQlmbGV4Y29wX2RldmljZV9uYW1lc1tmYy0+ZGV2X3R5cGVdLGZsZXhjb3BfYnVzX25hbWVzW2ZjLT5idXNfdHlwZV0sCi0JCQlmbGV4Y29wX3JldmlzaW9uX25hbWVzW2ZjLT5yZXZdLHN1ZmZpeCk7CisJaW5mbygiJXMgJyVzJyBhdCB0aGUgJyVzJyBidXMgY29udHJvbGxlZCBieSBhICclcycgJXMiLAorCQkJcHJlZml4LAlmbGV4Y29wX2RldmljZV9uYW1lc1tmYy0+ZGV2X3R5cGVdLAorCQkJZmxleGNvcF9idXNfbmFtZXNbZmMtPmJ1c190eXBlXSwKKwkJCWZsZXhjb3BfcmV2aXNpb25fbmFtZXNbZmMtPnJldl0sIHN1ZmZpeCk7CiB9CiAKLXZvaWQgZmxleGNvcF9kdW1wX3JlZyhzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX2liaV9yZWdpc3RlciByZWcsIGludCBudW0pCit2b2lkIGZsZXhjb3BfZHVtcF9yZWcoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywKKwkJZmxleGNvcF9pYmlfcmVnaXN0ZXIgcmVnLCBpbnQgbnVtKQogewogCWZsZXhjb3BfaWJpX3ZhbHVlIHY7CiAJaW50IGk7CiAJZm9yIChpID0gMDsgaSA8IG51bTsgaSsrKSB7Ci0JCXYgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLHJlZys0KmkpOwotCQlkZWJfcmR1bXAoIjB4JTAzeDogJTA4eCwgIixyZWcrNCppLCB2LnJhdyk7CisJCXYgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLCByZWcrNCppKTsKKwkJZGViX3JkdW1wKCIweCUwM3g6ICUwOHgsICIsIHJlZys0KmksIHYucmF3KTsKIAl9CiAJZGViX3JkdW1wKCJcbiIpOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXBjaS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXBjaS5jCmluZGV4IDc2ZTM3ZmQuLjIyN2MwMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1wY2kuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtcGNpLmMKQEAgLTEsOSArMSw3IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGludXggZHJpdmVyIHRoZSBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKLSAqCi0gKiBmbGV4Y29wLXBjaS5jIC0gY292ZXJzIHRoZSBQQ0kgcGFydCBpbmNsdWRpbmcgRE1BIHRyYW5zZmVycy4KLSAqCi0gKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24uCisgKiBMaW51eCBkcml2ZXIgdGhlIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQorICogZmxleGNvcC1wY2kuYyAtIGNvdmVycyB0aGUgUENJIHBhcnQgaW5jbHVkaW5nIERNQSB0cmFuc2ZlcnMKKyAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbgogICovCiAKICNkZWZpbmUgRkNfTE9HX1BSRUZJWCAiZmxleGNvcC1wY2kiCkBAIC0xMSw3ICs5LDggQEAKIAogc3RhdGljIGludCBlbmFibGVfcGlkX2ZpbHRlcmluZyA9IDE7CiBtb2R1bGVfcGFyYW0oZW5hYmxlX3BpZF9maWx0ZXJpbmcsIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGVuYWJsZV9waWRfZmlsdGVyaW5nLCAiZW5hYmxlIGhhcmR3YXJlIHBpZCBmaWx0ZXJpbmc6IHN1cHBvcnRlZCB2YWx1ZXM6IDAgKGZ1bGx0cyksIDEiKTsKK01PRFVMRV9QQVJNX0RFU0MoZW5hYmxlX3BpZF9maWx0ZXJpbmcsCisJImVuYWJsZSBoYXJkd2FyZSBwaWQgZmlsdGVyaW5nOiBzdXBwb3J0ZWQgdmFsdWVzOiAwIChmdWxsdHMpLCAxIik7CiAKIHN0YXRpYyBpbnQgaXJxX2Noa19pbnR2ID0gMTAwOwogbW9kdWxlX3BhcmFtKGlycV9jaGtfaW50diwgaW50LCAwNjQ0KTsKQEAgLTI2LDE3ICsyNSwxNyBAQAogI2RlZmluZSBERUJTVEFUVVMgIiAoZGVidWdnaW5nIGlzIG5vdCBlbmFibGVkKSIKICNlbmRpZgogCi0jZGVmaW5lIGRlYl9pbmZvKGFyZ3MuLi4pICBkcHJpbnRrKDB4MDEsYXJncykKLSNkZWZpbmUgZGViX3JlZyhhcmdzLi4uKSAgIGRwcmludGsoMHgwMixhcmdzKQotI2RlZmluZSBkZWJfdHMoYXJncy4uLikgICAgZHByaW50aygweDA0LGFyZ3MpCi0jZGVmaW5lIGRlYl9pcnEoYXJncy4uLikgICBkcHJpbnRrKDB4MDgsYXJncykKLSNkZWZpbmUgZGViX2NoayhhcmdzLi4uKSAgIGRwcmludGsoMHgxMCxhcmdzKQorI2RlZmluZSBkZWJfaW5mbyhhcmdzLi4uKSBkcHJpbnRrKDB4MDEsIGFyZ3MpCisjZGVmaW5lIGRlYl9yZWcoYXJncy4uLikgZHByaW50aygweDAyLCBhcmdzKQorI2RlZmluZSBkZWJfdHMoYXJncy4uLikgZHByaW50aygweDA0LCBhcmdzKQorI2RlZmluZSBkZWJfaXJxKGFyZ3MuLi4pIGRwcmludGsoMHgwOCwgYXJncykKKyNkZWZpbmUgZGViX2NoayhhcmdzLi4uKSBkcHJpbnRrKDB4MTAsIGFyZ3MpCiAKIHN0YXRpYyBpbnQgZGVidWc7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLAogCSJzZXQgZGVidWcgbGV2ZWwgKDE9aW5mbywyPXJlZ3MsND1UUyw4PWlycWRtYSwxNj1jaGVjayAofC1hYmxlKSkuIgotCSBERUJTVEFUVVMpOworCURFQlNUQVRVUyk7CiAKICNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjAuMSIKICNkZWZpbmUgRFJJVkVSX05BTUUgIlRlY2huaXNhdC9CMkMyIEZsZXhDb3AgSUkvSUliL0lJSSBEaWdpdGFsIFRWIFBDSSBEcml2ZXIiCkBAIC01MSwzMCArNTAsMzAgQEAKIAogCXZvaWQgX19pb21lbSAqaW9fbWVtOwogCXUzMiBpcnE7Ci0vKiBidWZmZXJzaXplIChhdCBsZWFzdCBmb3IgRE1BMSwgbmVlZCB0byBiZSAlIDE4OCA9PSAwLAotICogdGhpcyBsb2dpYyBpcyByZXF1aXJlZCAqLworCS8qIGJ1ZmZlcnNpemUgKGF0IGxlYXN0IGZvciBETUExLCBuZWVkIHRvIGJlICUgMTg4ID09IDAsCisJICogdGhpcyBsb2dpYyBpcyByZXF1aXJlZCAqLwogI2RlZmluZSBGQ19ERUZBVUxUX0RNQTFfQlVGU0laRSAoMTI4MCAqIDE4OCkKICNkZWZpbmUgRkNfREVGQVVMVF9ETUEyX0JVRlNJWkUgKDEwICogMTg4KQogCXN0cnVjdCBmbGV4Y29wX2RtYSBkbWFbMl07CiAKIAlpbnQgYWN0aXZlX2RtYTFfYWRkcjsgLyogMCA9IGFkZHIwIG9mIGRtYTE7IDEgPSBhZGRyMSBvZiBkbWExICovCi0JdTMyIGxhc3RfZG1hMV9jdXJfcG9zOyAvKiBwb3NpdGlvbiBvZiB0aGUgcG9pbnRlciBsYXN0IHRpbWUgdGhlIHRpbWVyL3BhY2tldCBpcnEgb2NjdXJlZCAqLworCXUzMiBsYXN0X2RtYTFfY3VyX3BvczsKKwkvKiBwb3NpdGlvbiBvZiB0aGUgcG9pbnRlciBsYXN0IHRpbWUgdGhlIHRpbWVyL3BhY2tldCBpcnEgb2NjdXJlZCAqLwogCWludCBjb3VudDsKIAlpbnQgY291bnRfcHJldjsKIAlpbnQgc3RyZWFtX3Byb2JsZW07CiAKIAlzcGlubG9ja190IGlycV9sb2NrOwotCiAJdW5zaWduZWQgbG9uZyBsYXN0X2lycTsKIAogCXN0cnVjdCBkZWxheWVkX3dvcmsgaXJxX2NoZWNrX3dvcms7Ci0KIAlzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjX2RldjsKIH07CiAKLXN0YXRpYyBpbnQgbGFzdHdyZWcsbGFzdHd2YWwsbGFzdHJyZWcsbGFzdHJ2YWw7CitzdGF0aWMgaW50IGxhc3R3cmVnLCBsYXN0d3ZhbCwgbGFzdHJyZWcsIGxhc3RydmFsOwogCi1zdGF0aWMgZmxleGNvcF9pYmlfdmFsdWUgZmxleGNvcF9wY2lfcmVhZF9pYmlfcmVnIChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX2liaV9yZWdpc3RlciByKQorc3RhdGljIGZsZXhjb3BfaWJpX3ZhbHVlIGZsZXhjb3BfcGNpX3JlYWRfaWJpX3JlZyhzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQlmbGV4Y29wX2liaV9yZWdpc3RlciByKQogewogCXN0cnVjdCBmbGV4Y29wX3BjaSAqZmNfcGNpID0gZmMtPmJ1c19zcGVjaWZpYzsKIAlmbGV4Y29wX2liaV92YWx1ZSB2OwpAQCAtODIsMTkgKzgxLDIwIEBACiAKIAlpZiAobGFzdHJyZWcgIT0gciB8fCBsYXN0cnZhbCAhPSB2LnJhdykgewogCQlsYXN0cnJlZyA9IHI7IGxhc3RydmFsID0gdi5yYXc7Ci0JCWRlYl9yZWcoIm5ldyByZDogJTN4OiAlMDh4XG4iLHIsdi5yYXcpOworCQlkZWJfcmVnKCJuZXcgcmQ6ICUzeDogJTA4eFxuIiwgciwgdi5yYXcpOwogCX0KIAogCXJldHVybiB2OwogfQogCi1zdGF0aWMgaW50IGZsZXhjb3BfcGNpX3dyaXRlX2liaV9yZWcoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9pYmlfcmVnaXN0ZXIgciwgZmxleGNvcF9pYmlfdmFsdWUgdikKK3N0YXRpYyBpbnQgZmxleGNvcF9wY2lfd3JpdGVfaWJpX3JlZyhzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCQlmbGV4Y29wX2liaV9yZWdpc3RlciByLCBmbGV4Y29wX2liaV92YWx1ZSB2KQogewogCXN0cnVjdCBmbGV4Y29wX3BjaSAqZmNfcGNpID0gZmMtPmJ1c19zcGVjaWZpYzsKIAogCWlmIChsYXN0d3JlZyAhPSByIHx8IGxhc3R3dmFsICE9IHYucmF3KSB7CiAJCWxhc3R3cmVnID0gcjsgbGFzdHd2YWwgPSB2LnJhdzsKLQkJZGViX3JlZygibmV3IHdyOiAlM3g6ICUwOHhcbiIscix2LnJhdyk7CisJCWRlYl9yZWcoIm5ldyB3cjogJTN4OiAlMDh4XG4iLCByLCB2LnJhdyk7CiAJfQogCiAJd3JpdGVsKHYucmF3LCBmY19wY2ktPmlvX21lbSArIHIpOwpAQCAtMTEzLDE1ICsxMTMsMTYgQEAKIAkJCWRlYl9jaGsoIm5vIElSUSBzaW5jZSB0aGUgbGFzdCBjaGVja1xuIik7CiAJCQlpZiAoZmNfcGNpLT5zdHJlYW1fcHJvYmxlbSsrID09IDMpIHsKIAkJCQlzdHJ1Y3QgZHZiX2RlbXV4X2ZlZWQgKmZlZWQ7CisJCQkJZGViX2luZm8oImZsZXhjb3AtcGNpOiBzdHJlYW0gcHJvYmxlbSwgcmVzZXR0aW5nIHBpZCBmaWx0ZXJcbiIpOwogCiAJCQkJc3Bpbl9sb2NrX2lycSgmZmMtPmRlbXV4LmxvY2spOwogCQkJCWxpc3RfZm9yX2VhY2hfZW50cnkoZmVlZCwgJmZjLT5kZW11eC5mZWVkX2xpc3QsCi0JCQkJCWxpc3RfaGVhZCkgeworCQkJCQkJbGlzdF9oZWFkKSB7CiAJCQkJCWZsZXhjb3BfcGlkX2ZlZWRfY29udHJvbChmYywgZmVlZCwgMCk7CiAJCQkJfQogCiAJCQkJbGlzdF9mb3JfZWFjaF9lbnRyeShmZWVkLCAmZmMtPmRlbXV4LmZlZWRfbGlzdCwKLQkJCQkJbGlzdF9oZWFkKSB7CisJCQkJCQlsaXN0X2hlYWQpIHsKIAkJCQkJZmxleGNvcF9waWRfZmVlZF9jb250cm9sKGZjLCBmZWVkLCAxKTsKIAkJCQl9CiAJCQkJc3Bpbl91bmxvY2tfaXJxKCZmYy0+ZGVtdXgubG9jayk7CkBAIC0xNDksMTEgKzE1MCwxMCBAQAogCWZsZXhjb3BfaWJpX3ZhbHVlIHY7CiAJaXJxcmV0dXJuX3QgcmV0ID0gSVJRX0hBTkRMRUQ7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmZmNfcGNpLT5pcnFfbG9jayxmbGFncyk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmZjX3BjaS0+aXJxX2xvY2ssIGZsYWdzKTsKKwl2ID0gZmMtPnJlYWRfaWJpX3JlZyhmYywgaXJxXzIwYyk7CiAKLQl2ID0gZmMtPnJlYWRfaWJpX3JlZyhmYyxpcnFfMjBjKTsKLQotICAgLyogZXJyb3JzICovCisJLyogZXJyb3JzICovCiAJaWYgKHYuaXJxXzIwYy5EYXRhX3JlY2VpdmVyX2Vycm9yKQogCQlkZWJfY2hrKCJkYXRhIHJlY2VpdmVyIGVycm9yXG4iKTsKIAlpZiAodi5pcnFfMjBjLkNvbnRpbnVpdHlfZXJyb3JfZmxhZykKQEAgLTE2NCwyNCArMTY0LDI5IEBACiAJCWRlYl9jaGsoIlRyYW5zcG9ydCBlcnJvclxuIik7CiAKIAlpZiAoKGZjX3BjaS0+Y291bnQgJSAxMDAwKSA9PSAwKQotCQlkZWJfY2hrKCIlZCB2YWxpZCBpcnEgdG9vayBwbGFjZSBzbyBmYXJcbiIsZmNfcGNpLT5jb3VudCk7CisJCWRlYl9jaGsoIiVkIHZhbGlkIGlycSB0b29rIHBsYWNlIHNvIGZhclxuIiwgZmNfcGNpLT5jb3VudCk7CiAKIAlpZiAodi5pcnFfMjBjLkRNQTFfSVJRX1N0YXR1cyA9PSAxKSB7CiAJCWlmIChmY19wY2ktPmFjdGl2ZV9kbWExX2FkZHIgPT0gMCkKLQkJCWZsZXhjb3BfcGFzc19kbXhfcGFja2V0cyhmY19wY2ktPmZjX2RldixmY19wY2ktPmRtYVswXS5jcHVfYWRkcjAsZmNfcGNpLT5kbWFbMF0uc2l6ZSAvIDE4OCk7CisJCQlmbGV4Y29wX3Bhc3NfZG14X3BhY2tldHMoZmNfcGNpLT5mY19kZXYsCisJCQkJCWZjX3BjaS0+ZG1hWzBdLmNwdV9hZGRyMCwKKwkJCQkJZmNfcGNpLT5kbWFbMF0uc2l6ZSAvIDE4OCk7CiAJCWVsc2UKLQkJCWZsZXhjb3BfcGFzc19kbXhfcGFja2V0cyhmY19wY2ktPmZjX2RldixmY19wY2ktPmRtYVswXS5jcHVfYWRkcjEsZmNfcGNpLT5kbWFbMF0uc2l6ZSAvIDE4OCk7CisJCQlmbGV4Y29wX3Bhc3NfZG14X3BhY2tldHMoZmNfcGNpLT5mY19kZXYsCisJCQkJCWZjX3BjaS0+ZG1hWzBdLmNwdV9hZGRyMSwKKwkJCQkJZmNfcGNpLT5kbWFbMF0uc2l6ZSAvIDE4OCk7CiAKIAkJZGViX2lycSgicGFnZSBjaGFuZ2UgdG8gcGFnZTogJWRcbiIsIWZjX3BjaS0+YWN0aXZlX2RtYTFfYWRkcik7CiAJCWZjX3BjaS0+YWN0aXZlX2RtYTFfYWRkciA9ICFmY19wY2ktPmFjdGl2ZV9kbWExX2FkZHI7Ci0JfSBlbHNlIGlmICh2LmlycV8yMGMuRE1BMV9UaW1lcl9TdGF0dXMgPT0gMSkgewogCQkvKiBmb3IgdGhlIHRpbWVyIElSUSB3ZSBvbmx5IGNhbiB1c2UgYnVmZmVyIGRteCBmZWVkaW5nLCBiZWNhdXNlIHdlIGRvbid0IGhhdmUKIAkJICogY29tcGxldGUgVFMgcGFja2V0cyB3aGVuIHJlYWRpbmcgZnJvbSB0aGUgRE1BIG1lbW9yeSAqLworCX0gZWxzZSBpZiAodi5pcnFfMjBjLkRNQTFfVGltZXJfU3RhdHVzID09IDEpIHsKIAkJZG1hX2FkZHJfdCBjdXJfYWRkciA9CiAJCQlmYy0+cmVhZF9pYmlfcmVnKGZjLGRtYTFfMDA4KS5kbWFfMHg4LmRtYV9jdXJfYWRkciA8PCAyOwogCQl1MzIgY3VyX3BvcyA9IGN1cl9hZGRyIC0gZmNfcGNpLT5kbWFbMF0uZG1hX2FkZHIwOwogCi0JCWRlYl9pcnEoIiV1IGlycTogJTA4eCBjdXJfYWRkcjogJWxseDogY3VyX3BvczogJTA4eCwgbGFzdF9jdXJfcG9zOiAlMDh4ICIsCisJCWRlYl9pcnEoIiV1IGlycTogJTA4eCBjdXJfYWRkcjogJWxseDogY3VyX3BvczogJTA4eCwgIgorCQkJImxhc3RfY3VyX3BvczogJTA4eCAiLAogCQkJCWppZmZpZXNfdG9fdXNlY3MoamlmZmllcyAtIGZjX3BjaS0+bGFzdF9pcnEpLAogCQkJCXYucmF3LCAodW5zaWduZWQgbG9uZyBsb25nKWN1cl9hZGRyLCBjdXJfcG9zLAogCQkJCWZjX3BjaS0+bGFzdF9kbWExX2N1cl9wb3MpOwpAQCAtMTkxLDMwICsxOTYsMzYgQEAKIAkJICogcGFzcyB0aGUgZGF0YSBmcm9tIGxhc3RfY3VyX3BvcyB0byB0aGUgYnVmZmVyIGVuZCB0byB0aGUgZGVtdXgKIAkJICovCiAJCWlmIChjdXJfcG9zIDwgZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3BvcykgewotCQkJZGViX2lycSgiIGVuZCB3YXMgcmVhY2hlZDogcGFzc2luZyAlZCBieXRlcyAiLChmY19wY2ktPmRtYVswXS5zaXplKjIgLSAxKSAtIGZjX3BjaS0+bGFzdF9kbWExX2N1cl9wb3MpOworCQkJZGViX2lycSgiIGVuZCB3YXMgcmVhY2hlZDogcGFzc2luZyAlZCBieXRlcyAiLAorCQkJCShmY19wY2ktPmRtYVswXS5zaXplKjIgLSAxKSAtCisJCQkJZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3Bvcyk7CiAJCQlmbGV4Y29wX3Bhc3NfZG14X2RhdGEoZmNfcGNpLT5mY19kZXYsCi0JCQkJCWZjX3BjaS0+ZG1hWzBdLmNwdV9hZGRyMCArIGZjX3BjaS0+bGFzdF9kbWExX2N1cl9wb3MsCi0JCQkJCShmY19wY2ktPmRtYVswXS5zaXplKjIpIC0gZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3Bvcyk7CisJCQkJZmNfcGNpLT5kbWFbMF0uY3B1X2FkZHIwICsKKwkJCQkJZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3BvcywKKwkJCQkoZmNfcGNpLT5kbWFbMF0uc2l6ZSoyKSAtCisJCQkJCWZjX3BjaS0+bGFzdF9kbWExX2N1cl9wb3MpOwogCQkJZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3BvcyA9IDA7CiAJCX0KIAogCQlpZiAoY3VyX3BvcyA+IGZjX3BjaS0+bGFzdF9kbWExX2N1cl9wb3MpIHsKLQkJCWRlYl9pcnEoIiBwYXNzaW5nICVkIGJ5dGVzICIsY3VyX3BvcyAtIGZjX3BjaS0+bGFzdF9kbWExX2N1cl9wb3MpOworCQkJZGViX2lycSgiIHBhc3NpbmcgJWQgYnl0ZXMgIiwKKwkJCQljdXJfcG9zIC0gZmNfcGNpLT5sYXN0X2RtYTFfY3VyX3Bvcyk7CiAJCQlmbGV4Y29wX3Bhc3NfZG14X2RhdGEoZmNfcGNpLT5mY19kZXYsCi0JCQkJCWZjX3BjaS0+ZG1hWzBdLmNwdV9hZGRyMCArIGZjX3BjaS0+bGFzdF9kbWExX2N1cl9wb3MsCi0JCQkJCWN1cl9wb3MgLSBmY19wY2ktPmxhc3RfZG1hMV9jdXJfcG9zKTsKKwkJCQlmY19wY2ktPmRtYVswXS5jcHVfYWRkcjAgKworCQkJCQlmY19wY2ktPmxhc3RfZG1hMV9jdXJfcG9zLAorCQkJCWN1cl9wb3MgLSBmY19wY2ktPmxhc3RfZG1hMV9jdXJfcG9zKTsKIAkJfQogCQlkZWJfaXJxKCJcbiIpOwogCiAJCWZjX3BjaS0+bGFzdF9kbWExX2N1cl9wb3MgPSBjdXJfcG9zOwogCQlmY19wY2ktPmNvdW50Kys7CiAJfSBlbHNlIHsKLQkJZGViX2lycSgiaXNyIGZvciBmbGV4Y29wIGNhbGxlZCwgYXBwYXJlbnRseSB3aXRob3V0IHJlYXNvbiAoJTA4eClcbiIsdi5yYXcpOworCQlkZWJfaXJxKCJpc3IgZm9yIGZsZXhjb3AgY2FsbGVkLCAiCisJCQkiYXBwYXJlbnRseSB3aXRob3V0IHJlYXNvbiAoJTA4eClcbiIsIHYucmF3KTsKIAkJcmV0ID0gSVJRX05PTkU7CiAJfQogCi0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZmNfcGNpLT5pcnFfbG9jayxmbGFncyk7Ci0KKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmY19wY2ktPmlycV9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjIyLDUyICsyMzMsNDggQEAKIHsKIAlzdHJ1Y3QgZmxleGNvcF9wY2kgKmZjX3BjaSA9IGZjLT5idXNfc3BlY2lmaWM7CiAJaWYgKG9ub2ZmKSB7Ci0JCWZsZXhjb3BfZG1hX2NvbmZpZyhmYywmZmNfcGNpLT5kbWFbMF0sRkNfRE1BXzEpOwotCQlmbGV4Y29wX2RtYV9jb25maWcoZmMsJmZjX3BjaS0+ZG1hWzFdLEZDX0RNQV8yKTsKLQotCQlmbGV4Y29wX2RtYV9jb25maWdfdGltZXIoZmMsRkNfRE1BXzEsMCk7Ci0KLQkJZmxleGNvcF9kbWFfeGZlcl9jb250cm9sKGZjLEZDX0RNQV8xLEZDX0RNQV9TVUJBRERSXzAgfCBGQ19ETUFfU1VCQUREUl8xLDEpOworCQlmbGV4Y29wX2RtYV9jb25maWcoZmMsICZmY19wY2ktPmRtYVswXSwgRkNfRE1BXzEpOworCQlmbGV4Y29wX2RtYV9jb25maWcoZmMsICZmY19wY2ktPmRtYVsxXSwgRkNfRE1BXzIpOworCQlmbGV4Y29wX2RtYV9jb25maWdfdGltZXIoZmMsIEZDX0RNQV8xLCAwKTsKKwkJZmxleGNvcF9kbWFfeGZlcl9jb250cm9sKGZjLCBGQ19ETUFfMSwKKwkJCQlGQ19ETUFfU1VCQUREUl8wIHwgRkNfRE1BX1NVQkFERFJfMSwgMSk7CiAJCWRlYl9pcnEoIkRNQSB4ZmVyIGVuYWJsZWRcbiIpOwogCiAJCWZjX3BjaS0+bGFzdF9kbWExX2N1cl9wb3MgPSAwOwotCQlmbGV4Y29wX2RtYV9jb250cm9sX3RpbWVyX2lycShmYyxGQ19ETUFfMSwxKTsKKwkJZmxleGNvcF9kbWFfY29udHJvbF90aW1lcl9pcnEoZmMsIEZDX0RNQV8xLCAxKTsKIAkJZGViX2lycSgiSVJRIGVuYWJsZWRcbiIpOwotCiAJCWZjX3BjaS0+Y291bnRfcHJldiA9IGZjX3BjaS0+Y291bnQ7Ci0KLS8vCQlmY19wY2ktPmFjdGl2ZV9kbWExX2FkZHIgPSAwOwotLy8JCWZsZXhjb3BfZG1hX2NvbnRyb2xfc2l6ZV9pcnEoZmMsRkNfRE1BXzEsMSk7Ci0KIAl9IGVsc2UgewotCQlmbGV4Y29wX2RtYV9jb250cm9sX3RpbWVyX2lycShmYyxGQ19ETUFfMSwwKTsKKwkJZmxleGNvcF9kbWFfY29udHJvbF90aW1lcl9pcnEoZmMsIEZDX0RNQV8xLCAwKTsKIAkJZGViX2lycSgiSVJRIGRpc2FibGVkXG4iKTsKIAotLy8JCWZsZXhjb3BfZG1hX2NvbnRyb2xfc2l6ZV9pcnEoZmMsRkNfRE1BXzEsMCk7Ci0KLQkJZmxleGNvcF9kbWFfeGZlcl9jb250cm9sKGZjLEZDX0RNQV8xLEZDX0RNQV9TVUJBRERSXzAgfCBGQ19ETUFfU1VCQUREUl8xLDApOworCQlmbGV4Y29wX2RtYV94ZmVyX2NvbnRyb2woZmMsIEZDX0RNQV8xLAorCQkJIEZDX0RNQV9TVUJBRERSXzAgfCBGQ19ETUFfU1VCQUREUl8xLCAwKTsKIAkJZGViX2lycSgiRE1BIHhmZXIgZGlzYWJsZWRcbiIpOwogCX0KLQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGZsZXhjb3BfcGNpX2RtYV9pbml0KHN0cnVjdCBmbGV4Y29wX3BjaSAqZmNfcGNpKQogewogCWludCByZXQ7Ci0JaWYgKChyZXQgPSBmbGV4Y29wX2RtYV9hbGxvY2F0ZShmY19wY2ktPnBkZXYsJmZjX3BjaS0+ZG1hWzBdLEZDX0RFRkFVTFRfRE1BMV9CVUZTSVpFKSkgIT0gMCkKKwlyZXQgPSBmbGV4Y29wX2RtYV9hbGxvY2F0ZShmY19wY2ktPnBkZXYsICZmY19wY2ktPmRtYVswXSwKKwkJCUZDX0RFRkFVTFRfRE1BMV9CVUZTSVpFKTsKKwlpZiAocmV0ICE9IDApCiAJCXJldHVybiByZXQ7CiAKLQlpZiAoKHJldCA9IGZsZXhjb3BfZG1hX2FsbG9jYXRlKGZjX3BjaS0+cGRldiwmZmNfcGNpLT5kbWFbMV0sRkNfREVGQVVMVF9ETUEyX0JVRlNJWkUpKSAhPSAwKSB7CisJcmV0ID0gZmxleGNvcF9kbWFfYWxsb2NhdGUoZmNfcGNpLT5wZGV2LCAmZmNfcGNpLT5kbWFbMV0sCisJCQlGQ19ERUZBVUxUX0RNQTJfQlVGU0laRSk7CisJaWYgKHJldCAhPSAwKSB7CiAJCWZsZXhjb3BfZG1hX2ZyZWUoJmZjX3BjaS0+ZG1hWzBdKTsKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlmbGV4Y29wX3NyYW1fc2V0X2Rlc3QoZmNfcGNpLT5mY19kZXYsRkNfU1JBTV9ERVNUX01FRElBIHwgRkNfU1JBTV9ERVNUX05FVCwgRkNfU1JBTV9ERVNUX1RBUkdFVF9ETUExKTsKLQlmbGV4Y29wX3NyYW1fc2V0X2Rlc3QoZmNfcGNpLT5mY19kZXYsRkNfU1JBTV9ERVNUX0NBTyAgIHwgRkNfU1JBTV9ERVNUX0NBSSwgRkNfU1JBTV9ERVNUX1RBUkdFVF9ETUEyKTsKLQorCWZsZXhjb3Bfc3JhbV9zZXRfZGVzdChmY19wY2ktPmZjX2RldiwgRkNfU1JBTV9ERVNUX01FRElBIHwKKwkJCUZDX1NSQU1fREVTVF9ORVQsIEZDX1NSQU1fREVTVF9UQVJHRVRfRE1BMSk7CisJZmxleGNvcF9zcmFtX3NldF9kZXN0KGZjX3BjaS0+ZmNfZGV2LCBGQ19TUkFNX0RFU1RfQ0FPIHwKKwkJCUZDX1NSQU1fREVTVF9DQUksIEZDX1NSQU1fREVTVF9UQVJHRVRfRE1BMik7CiAJZmNfcGNpLT5pbml0X3N0YXRlIHw9IEZDX1BDSV9ETUFfSU5JVDsKLQogCXJldHVybiByZXQ7CiB9CiAKQEAgLTI5MCwxMiArMjk3LDggQEAKIAogCWlmICgocmV0ID0gcGNpX2VuYWJsZV9kZXZpY2UoZmNfcGNpLT5wZGV2KSkgIT0gMCkKIAkJcmV0dXJuIHJldDsKLQogCXBjaV9zZXRfbWFzdGVyKGZjX3BjaS0+cGRldik7CiAKLQkvKiBlbmFibGUgaW50ZXJydXB0cyAqLwotCS8vIHBjaV93cml0ZV9jb25maWdfZHdvcmQocGRldiwgMHg2YywgMHg4MDAwKTsKLQogCWlmICgocmV0ID0gcGNpX3JlcXVlc3RfcmVnaW9ucyhmY19wY2ktPnBkZXYsIERSSVZFUl9OQU1FKSkgIT0gMCkKIAkJZ290byBlcnJfcGNpX2Rpc2FibGVfZGV2aWNlOwogCkBAIC0zMzgsOCArMzQxLDggQEAKIAlmY19wY2ktPmluaXRfc3RhdGUgJj0gfkZDX1BDSV9JTklUOwogfQogCi0KLXN0YXRpYyBpbnQgZmxleGNvcF9wY2lfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCitzdGF0aWMgaW50IGZsZXhjb3BfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAorCQljb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KQogewogCXN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmM7CiAJc3RydWN0IGZsZXhjb3BfcGNpICpmY19wY2k7CkBAIC0zNTAsNyArMzUzLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0vKiBnZW5lcmFsIGZsZXhjb3AgaW5pdCAqLworCS8qIGdlbmVyYWwgZmxleGNvcCBpbml0ICovCiAJZmNfcGNpID0gZmMtPmJ1c19zcGVjaWZpYzsKIAlmY19wY2ktPmZjX2RldiA9IGZjOwogCkBAIC0zNTgsNyArMzYxLDYgQEAKIAlmYy0+d3JpdGVfaWJpX3JlZyA9IGZsZXhjb3BfcGNpX3dyaXRlX2liaV9yZWc7CiAJZmMtPmkyY19yZXF1ZXN0ID0gZmxleGNvcF9pMmNfcmVxdWVzdDsKIAlmYy0+Z2V0X21hY19hZGRyID0gZmxleGNvcF9lZXByb21fY2hlY2tfbWFjX2FkZHI7Ci0KIAlmYy0+c3RyZWFtX2NvbnRyb2wgPSBmbGV4Y29wX3BjaV9zdHJlYW1fY29udHJvbDsKIAogCWlmIChlbmFibGVfcGlkX2ZpbHRlcmluZykKQEAgLTM2OCwyOSArMzcwLDI5IEBACiAKIAlmYy0+cGlkX2ZpbHRlcmluZyA9IGVuYWJsZV9waWRfZmlsdGVyaW5nOwogCWZjLT5idXNfdHlwZSA9IEZDX1BDSTsKLQogCWZjLT5kZXYgPSAmcGRldi0+ZGV2OwogCWZjLT5vd25lciA9IFRISVNfTU9EVUxFOwogCi0vKiBidXMgc3BlY2lmaWMgcGFydCAqLworCS8qIGJ1cyBzcGVjaWZpYyBwYXJ0ICovCiAJZmNfcGNpLT5wZGV2ID0gcGRldjsKIAlpZiAoKHJldCA9IGZsZXhjb3BfcGNpX2luaXQoZmNfcGNpKSkgIT0gMCkKIAkJZ290byBlcnJfa2ZyZWU7CiAKLS8qIGluaXQgZmxleGNvcCAqLworCS8qIGluaXQgZmxleGNvcCAqLwogCWlmICgocmV0ID0gZmxleGNvcF9kZXZpY2VfaW5pdGlhbGl6ZShmYykpICE9IDApCiAJCWdvdG8gZXJyX3BjaV9leGl0OwogCi0vKiBpbml0IGRtYSAqLworCS8qIGluaXQgZG1hICovCiAJaWYgKChyZXQgPSBmbGV4Y29wX3BjaV9kbWFfaW5pdChmY19wY2kpKSAhPSAwKQogCQlnb3RvIGVycl9mY19leGl0OwogCiAJSU5JVF9ERUxBWUVEX1dPUksoJmZjX3BjaS0+aXJxX2NoZWNrX3dvcmssIGZsZXhjb3BfcGNpX2lycV9jaGVja193b3JrKTsKIAotCQlpZiAoaXJxX2Noa19pbnR2ID4gMCkKLQkJCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZmNfcGNpLT5pcnFfY2hlY2tfd29yaywKLQkJbXNlY3NfdG9famlmZmllcyhpcnFfY2hrX2ludHYgPCAxMDAgPyAxMDAgOiBpcnFfY2hrX2ludHYpKTsKLQorCWlmIChpcnFfY2hrX2ludHYgPiAwKQorCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmZjX3BjaS0+aXJxX2NoZWNrX3dvcmssCisJCQkJbXNlY3NfdG9famlmZmllcyhpcnFfY2hrX2ludHYgPCAxMDAgPworCQkJCQkxMDAgOgorCQkJCQlpcnFfY2hrX2ludHYpKTsKIAlyZXR1cm4gcmV0OwogCiBlcnJfZmNfZXhpdDoKQEAgLTQyMCw3ICs0MjIsNiBAQAogCiBzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgZmxleGNvcF9wY2lfdGJsW10gPSB7CiAJeyBQQ0lfREVWSUNFKDB4MTNkMCwgMHgyMTAzKSB9LAotLyoJeyBQQ0lfREVWSUNFKDB4MTNkMCwgMHgyMjAwKSB9LCA/ICovCiAJeyB9LAogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXJlZy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXJlZy5oCmluZGV4IDc1OTlmY2MuLmRjNDUyOGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1yZWcuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtcmVnLmgKQEAgLTEsMTQgKzEsMTEgQEAKIC8qCi0gKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBsaW51eCBkcml2ZXIgdGhlIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQotICoKKyAqIExpbnV4IGRyaXZlciBmb3IgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCiAgKiBmbGV4Y29wLXJlZy5oIC0gcmVnaXN0ZXIgYWJzdHJhY3Rpb24gZm9yIEZsZXhDb3BJSSwgRmxleENvcElJYiBhbmQgRmxleENvcElJSQotICoKLSAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4KKyAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbgogICovCiAjaWZuZGVmIF9fRkxFWENPUF9SRUdfSF9fCiAjZGVmaW5lIF9fRkxFWENPUF9SRUdfSF9fCiAKLQogdHlwZWRlZiBlbnVtIHsKIAlGTEVYQ09QX1VOSyA9IDAsCiAJRkxFWENPUF9JSSwKQEAgLTE4LDEzICsxNSwxMyBAQAogCiB0eXBlZGVmIGVudW0gewogCUZDX1VOSyA9IDAsCi0JRkNfQUlSX0RWQiwKKwlGQ19DQUJMRSwKKwlGQ19BSVJfRFZCVCwKIAlGQ19BSVJfQVRTQzEsCiAJRkNfQUlSX0FUU0MyLAotCUZDX1NLWSwKLQlGQ19TS1lfT0xELAotCUZDX0NBQkxFLAogCUZDX0FJUl9BVFNDMywKKwlGQ19TS1lfUkVWMjMsCisJRkNfU0tZX1JFVjI2LAogCUZDX1NLWV9SRVYyNywKIAlGQ19TS1lfUkVWMjgsCiB9IGZsZXhjb3BfZGV2aWNlX3R5cGVfdDsKQEAgLTM2LDEyICszMywxMiBAQAogCiAvKiBGbGV4Q29wIElCSSBSZWdpc3RlcnMgKi8KICNpZiBkZWZpbmVkKF9fTElUVExFX0VORElBTikKLQkjaW5jbHVkZSAiZmxleGNvcF9pYmlfdmFsdWVfbGUuaCIKKyNpbmNsdWRlICJmbGV4Y29wX2liaV92YWx1ZV9sZS5oIgogI2Vsc2UKICNpZiBkZWZpbmVkKF9fQklHX0VORElBTikKLQkjaW5jbHVkZSAiZmxleGNvcF9pYmlfdmFsdWVfYmUuaCIKKyNpbmNsdWRlICJmbGV4Y29wX2liaV92YWx1ZV9iZS5oIgogI2Vsc2UKLQkjZXJyb3Igbm8gZW5kaWFuIGRlZmluZWQKKyNlcnJvciBubyBlbmRpYW4gZGVmaW5lZAogI2VuZGlmCiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXNyYW0uYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC1zcmFtLmMKaW5kZXggY2RhNjk1Mi4uZjIxOTllNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXNyYW0uYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3Atc3JhbS5jCkBAIC0xLDQ1ICsxLDQzIEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGludXggZHJpdmVyIHRoZSBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKLSAqCi0gKiBmbGV4Y29wLXNyYW0uYyAtIGZ1bmN0aW9ucyBmb3IgY29udHJvbGxpbmcgdGhlIFNSQU0uCi0gKgotICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uLgorICogTGludXggZHJpdmVyIGZvciBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKKyAqIGZsZXhjb3Atc3JhbS5jIC0gZnVuY3Rpb25zIGZvciBjb250cm9sbGluZyB0aGUgU1JBTQorICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uCiAgKi8KICNpbmNsdWRlICJmbGV4Y29wLmgiCiAKLXN0YXRpYyB2b2lkIGZsZXhjb3Bfc3JhbV9zZXRfY2hpcCAoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9zcmFtX3R5cGVfdCB0eXBlKQorc3RhdGljIHZvaWQgZmxleGNvcF9zcmFtX3NldF9jaGlwKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCWZsZXhjb3Bfc3JhbV90eXBlX3QgdHlwZSkKIHsKLQlmbGV4Y29wX3NldF9pYmlfdmFsdWUod2FuX2N0cmxfcmVnXzcxYyxzcmFtX2NoaXAsdHlwZSk7CisJZmxleGNvcF9zZXRfaWJpX3ZhbHVlKHdhbl9jdHJsX3JlZ183MWMsIHNyYW1fY2hpcCwgdHlwZSk7CiB9CiAKIGludCBmbGV4Y29wX3NyYW1faW5pdChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjKQogewogCXN3aXRjaCAoZmMtPnJldikgewotCQljYXNlIEZMRVhDT1BfSUk6Ci0JCWNhc2UgRkxFWENPUF9JSUI6Ci0JCQlmbGV4Y29wX3NyYW1fc2V0X2NoaXAoZmMsRkNfU1JBTV8xXzMyS0IpOwotCQkJYnJlYWs7Ci0JCWNhc2UgRkxFWENPUF9JSUk6Ci0JCQlmbGV4Y29wX3NyYW1fc2V0X2NoaXAoZmMsRkNfU1JBTV8xXzQ4S0IpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlIEZMRVhDT1BfSUk6CisJY2FzZSBGTEVYQ09QX0lJQjoKKwkJZmxleGNvcF9zcmFtX3NldF9jaGlwKGZjLCBGQ19TUkFNXzFfMzJLQik7CisJCWJyZWFrOworCWNhc2UgRkxFWENPUF9JSUk6CisJCWZsZXhjb3Bfc3JhbV9zZXRfY2hpcChmYywgRkNfU1JBTV8xXzQ4S0IpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLWludCBmbGV4Y29wX3NyYW1fc2V0X2Rlc3Qoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYywgZmxleGNvcF9zcmFtX2Rlc3RfdCBkZXN0LCBmbGV4Y29wX3NyYW1fZGVzdF90YXJnZXRfdCB0YXJnZXQpCitpbnQgZmxleGNvcF9zcmFtX3NldF9kZXN0KHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3Bfc3JhbV9kZXN0X3QgZGVzdCwKKwkJIGZsZXhjb3Bfc3JhbV9kZXN0X3RhcmdldF90IHRhcmdldCkKIHsKIAlmbGV4Y29wX2liaV92YWx1ZSB2OwotCi0JdiA9IGZjLT5yZWFkX2liaV9yZWcoZmMsc3JhbV9kZXN0X3JlZ183MTQpOworCXYgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLCBzcmFtX2Rlc3RfcmVnXzcxNCk7CiAKIAlpZiAoZmMtPnJldiAhPSBGTEVYQ09QX0lJSSAmJiB0YXJnZXQgPT0gRkNfU1JBTV9ERVNUX1RBUkdFVF9GQzNfQ0EpIHsKIAkJZXJyKCJTUkFNIGRlc3RpbmF0aW9uIHRhcmdldCB0byBhdmFpbGFibGUgb24gRmxleENvcElJKGIpXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCi0JZGViX3NyYW0oInNyYW0gZGVzdDogJXggdGFyZ2V0OiAleFxuIixkZXN0LCB0YXJnZXQpOworCWRlYl9zcmFtKCJzcmFtIGRlc3Q6ICV4IHRhcmdldDogJXhcbiIsIGRlc3QsIHRhcmdldCk7CiAKIAlpZiAoZGVzdCAmIEZDX1NSQU1fREVTVF9ORVQpCiAJCXYuc3JhbV9kZXN0X3JlZ183MTQuTkVUX0Rlc3QgPSB0YXJnZXQ7CkBAIC0xNTQsMTQgKzE1MiwxMiBAQAogCQllbHNlCiAJCQliYW5rID0gMHgxMDAwMDAwMDsKIAl9Ci0KIAlmbGV4X3NyYW1fd3JpdGUoYWRhcHRlciwgYmFuaywgYWRkciAmIDB4N2ZmZiwgYnVmLCBsZW4pOwogfQogCiBzdGF0aWMgdm9pZCBzcmFtX3JlYWRfY2h1bmsoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBhZGRyLCB1OCAqYnVmLCB1MTYgbGVuKQogewogCXUzMiBiYW5rOwotCiAJYmFuayA9IDA7CiAKIAlpZiAoYWRhcHRlci0+ZHdfc3JhbV90eXBlID09IDB4MjAwMDApIHsKQEAgLTE3NCwyNiArMTcwLDIyIEBACiAJCWVsc2UKIAkJCWJhbmsgPSAweDEwMDAwMDAwOwogCX0KLQogCWZsZXhfc3JhbV9yZWFkKGFkYXB0ZXIsIGJhbmssIGFkZHIgJiAweDdmZmYsIGJ1ZiwgbGVuKTsKIH0KIAogc3RhdGljIHZvaWQgc3JhbV9yZWFkKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgYWRkciwgdTggKmJ1ZiwgdTMyIGxlbikKIHsKIAl1MzIgbGVuZ3RoOwotCiAJd2hpbGUgKGxlbiAhPSAwKSB7CiAJCWxlbmd0aCA9IGxlbjsKLQotCQkvLyBjaGVjayBpZiB0aGUgYWRkcmVzcyByYW5nZSBiZWxvbmdzIHRvIHRoZSBzYW1lCi0JCS8vIDMySyBtZW1vcnkgY2hpcC4gSWYgbm90LCB0aGUgZGF0YSBpcyByZWFkIGZyb20KLQkJLy8gb25lIGNoaXAgYXQgYSB0aW1lLgorCQkvKiBjaGVjayBpZiB0aGUgYWRkcmVzcyByYW5nZSBiZWxvbmdzIHRvIHRoZSBzYW1lCisJCSAqIDMySyBtZW1vcnkgY2hpcC4gSWYgbm90LCB0aGUgZGF0YSBpcyByZWFkCisJCSAqIGZyb20gb25lIGNoaXAgYXQgYSB0aW1lICovCiAJCWlmICgoYWRkciA+PiAweDBmKSAhPSAoKGFkZHIgKyBsZW4gLSAxKSA+PiAweDBmKSkgewogCQkJbGVuZ3RoID0gKCgoYWRkciA+PiAweDBmKSArIDEpIDw8IDB4MGYpIC0gYWRkcjsKIAkJfQogCiAJCXNyYW1fcmVhZF9jaHVuayhhZGFwdGVyLCBhZGRyLCBidWYsIGxlbmd0aCk7Ci0KIAkJYWRkciA9IGFkZHIgKyBsZW5ndGg7CiAJCWJ1ZiA9IGJ1ZiArIGxlbmd0aDsKIAkJbGVuID0gbGVuIC0gbGVuZ3RoOwpAQCAtMjAzLDE5ICsxOTUsMTcgQEAKIHN0YXRpYyB2b2lkIHNyYW1fd3JpdGUoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIsIHUzMiBhZGRyLCB1OCAqYnVmLCB1MzIgbGVuKQogewogCXUzMiBsZW5ndGg7Ci0KIAl3aGlsZSAobGVuICE9IDApIHsKIAkJbGVuZ3RoID0gbGVuOwogCi0JCS8vIGNoZWNrIGlmIHRoZSBhZGRyZXNzIHJhbmdlIGJlbG9uZ3MgdG8gdGhlIHNhbWUKLQkJLy8gMzJLIG1lbW9yeSBjaGlwLiBJZiBub3QsIHRoZSBkYXRhIGlzIHdyaXR0ZW4gdG8KLQkJLy8gb25lIGNoaXAgYXQgYSB0aW1lLgorCQkvKiBjaGVjayBpZiB0aGUgYWRkcmVzcyByYW5nZSBiZWxvbmdzIHRvIHRoZSBzYW1lCisJCSAqIDMySyBtZW1vcnkgY2hpcC4gSWYgbm90LCB0aGUgZGF0YSBpcworCQkgKiB3cml0dGVuIHRvIG9uZSBjaGlwIGF0IGEgdGltZSAqLwogCQlpZiAoKGFkZHIgPj4gMHgwZikgIT0gKChhZGRyICsgbGVuIC0gMSkgPj4gMHgwZikpIHsKIAkJCWxlbmd0aCA9ICgoKGFkZHIgPj4gMHgwZikgKyAxKSA8PCAweDBmKSAtIGFkZHI7CiAJCX0KIAogCQlzcmFtX3dyaXRlX2NodW5rKGFkYXB0ZXIsIGFkZHIsIGJ1ZiwgbGVuZ3RoKTsKLQogCQlhZGRyID0gYWRkciArIGxlbmd0aDsKIAkJYnVmID0gYnVmICsgbGVuZ3RoOwogCQlsZW4gPSBsZW4gLSBsZW5ndGg7CkBAIC0yMjQsMzkgKzIxNCwyOSBAQAogCiBzdGF0aWMgdm9pZCBzcmFtX3NldF9zaXplKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyLCB1MzIgbWFzaykKIHsKLQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHg3MWMsIChtYXNrIHwgKH4weDMwMDAwICYgcmVhZF9yZWdfZHcoYWRhcHRlciwgMHg3MWMpKSkpOworCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDcxYywKKwkJCShtYXNrIHwgKH4weDMwMDAwICYgcmVhZF9yZWdfZHcoYWRhcHRlciwgMHg3MWMpKSkpOwogfQogCiBzdGF0aWMgdm9pZCBzcmFtX2luaXQoc3RydWN0IGFkYXB0ZXIgKmFkYXB0ZXIpCiB7CiAJdTMyIHRtcDsKLQogCXRtcCA9IHJlYWRfcmVnX2R3KGFkYXB0ZXIsIDB4NzFjKTsKLQogCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDcxYywgMSk7CiAKIAlpZiAocmVhZF9yZWdfZHcoYWRhcHRlciwgMHg3MWMpICE9IDApIHsKIAkJd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4NzFjLCB0bXApOwotCiAJCWFkYXB0ZXItPmR3X3NyYW1fdHlwZSA9IHRtcCAmIDB4MzAwMDA7Ci0KIAkJZGRwcmludGsoIiVzOiBkd19zcmFtX3R5cGUgPSAleFxuIiwgX19mdW5jX18sIGFkYXB0ZXItPmR3X3NyYW1fdHlwZSk7Ci0KIAl9IGVsc2UgewotCiAJCWFkYXB0ZXItPmR3X3NyYW1fdHlwZSA9IDB4MTAwMDA7Ci0KIAkJZGRwcmludGsoIiVzOiBkd19zcmFtX3R5cGUgPSAleFxuIiwgX19mdW5jX18sIGFkYXB0ZXItPmR3X3NyYW1fdHlwZSk7CiAJfQotCi0JLyogcmV0dXJuIHZhbHVlIGlzIG5ldmVyIHVzZWQ/ICovCi0vKglyZXR1cm4gYWRhcHRlci0+ZHdfc3JhbV90eXBlOyAqLwogfQogCiBzdGF0aWMgaW50IHNyYW1fdGVzdF9sb2NhdGlvbihzdHJ1Y3QgYWRhcHRlciAqYWRhcHRlciwgdTMyIG1hc2ssIHUzMiBhZGRyKQogewogCXU4IHRtcDEsIHRtcDI7Ci0KIAlkcHJpbnRrKCIlczogbWFzayA9ICV4LCBhZGRyID0gJXhcbiIsIF9fZnVuY19fLCBtYXNrLCBhZGRyKTsKIAogCXNyYW1fc2V0X3NpemUoYWRhcHRlciwgbWFzayk7CkBAIC0yNjksNyArMjQ5LDYgQEAKIAlzcmFtX3dyaXRlKGFkYXB0ZXIsIGFkZHIgKyA0LCAmdG1wMSwgMSk7CiAKIAl0bXAyID0gMDsKLQogCW1kZWxheSgyMCk7CiAKIAlzcmFtX3JlYWQoYWRhcHRlciwgYWRkciwgJnRtcDIsIDEpOwpAQCAtMjg3LDcgKzI2Niw2IEBACiAJc3JhbV93cml0ZShhZGFwdGVyLCBhZGRyICsgNCwgJnRtcDEsIDEpOwogCiAJdG1wMiA9IDA7Ci0KIAltZGVsYXkoMjApOwogCiAJc3JhbV9yZWFkKGFkYXB0ZXIsIGFkZHIsICZ0bXAyLCAxKTsKQEAgLTI5NywyNiArMjc1LDI0IEBACiAKIAlpZiAodG1wMiAhPSAweDVhKQogCQlyZXR1cm4gMDsKLQogCXJldHVybiAxOwogfQogCiBzdGF0aWMgdTMyIHNyYW1fbGVuZ3RoKHN0cnVjdCBhZGFwdGVyICphZGFwdGVyKQogewogCWlmIChhZGFwdGVyLT5kd19zcmFtX3R5cGUgPT0gMHgxMDAwMCkKLQkJcmV0dXJuIDMyNzY4OwkvLyAgMzJLCisJCXJldHVybiAzMjc2ODsgLyogMzJLICovCiAJaWYgKGFkYXB0ZXItPmR3X3NyYW1fdHlwZSA9PSAweDAwMDAwKQotCQlyZXR1cm4gNjU1MzY7CS8vICA2NEsKKwkJcmV0dXJuIDY1NTM2OyAvKiA2NEsgKi8KIAlpZiAoYWRhcHRlci0+ZHdfc3JhbV90eXBlID09IDB4MjAwMDApCi0JCXJldHVybiAxMzEwNzI7CS8vIDEyOEsKLQotCXJldHVybiAzMjc2ODsJCS8vIDMySworCQlyZXR1cm4gMTMxMDcyOyAvKiAxMjhLICovCisJcmV0dXJuIDMyNzY4OyAvKiAzMksgKi8KIH0KIAogLyogRmxleGNvcElJIGNhbiB3b3JrIHdpdGggMzJLLCA2NEsgb3IgMTI4SyBvZiBleHRlcm5hbCBTUkFNIG1lbW9yeS4KLSAgICAtIGZvciAxMjhLIHRoZXJlIGFyZSA0eDMySyBjaGlwcyBhdCBiYW5rIDAsMSwyLDMuCi0gICAgLSBmb3IgIDY0SyB0aGVyZSBhcmUgMngzMksgY2hpcHMgYXQgYmFuayAxLDIuCi0gICAgLSBmb3IgIDMySyB0aGVyZSBpcyBvbmUgMzJLIGNoaXAgYXQgYmFuayAwLgorICAgLSBmb3IgMTI4SyB0aGVyZSBhcmUgNHgzMksgY2hpcHMgYXQgYmFuayAwLDEsMiwzLgorICAgLSBmb3IgIDY0SyB0aGVyZSBhcmUgMngzMksgY2hpcHMgYXQgYmFuayAxLDIuCisgICAtIGZvciAgMzJLIHRoZXJlIGlzIG9uZSAzMksgY2hpcCBhdCBiYW5rIDAuCiAKICAgIEZsZXhDb3Agd29ya3Mgb25seSB3aXRoIG9uZSBiYW5rIGF0IGEgdGltZS4gVGhlIGJhbmsgaXMgc2VsZWN0ZWQKICAgIGJ5IGJpdHMgMjgtMjkgb2YgdGhlIDB4NzAwIHJlZ2lzdGVyLgpAQCAtMzI0LDI0ICszMDAsMTggQEAKICAgIGJhbmsgMCBjb3ZlcnMgYWRkcmVzc2VzIDB4MDAwMDAtMHgwN2ZmZgogICAgYmFuayAxIGNvdmVycyBhZGRyZXNzZXMgMHgwODAwMC0weDBmZmZmCiAgICBiYW5rIDIgY292ZXJzIGFkZHJlc3NlcyAweDEwMDAwLTB4MTdmZmYKLSAgIGJhbmsgMyBjb3ZlcnMgYWRkcmVzc2VzIDB4MTgwMDAtMHgxZmZmZgotKi8KKyAgIGJhbmsgMyBjb3ZlcnMgYWRkcmVzc2VzIDB4MTgwMDAtMHgxZmZmZiAqLwogCiBzdGF0aWMgaW50IGZsZXhjb3Bfc3JhbV9kZXRlY3Qoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYykKIHsKLQlmbGV4Y29wX2liaV92YWx1ZSByMjA4LHI3MWNfMCx2cjcxY18xOwotCisJZmxleGNvcF9pYmlfdmFsdWUgcjIwOCwgcjcxY18wLCB2cjcxY18xOwogCXIyMDggPSBmYy0+cmVhZF9pYmlfcmVnKGZjLCBjdHJsXzIwOCk7CiAJZmMtPndyaXRlX2liaV9yZWcoZmMsIGN0cmxfMjA4LCBpYmlfemVybyk7CiAKIAlyNzFjXzAgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLCB3YW5fY3RybF9yZWdfNzFjKTsKLQogCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDcxYywgMSk7Ci0KIAl0bXAzID0gcmVhZF9yZWdfZHcoYWRhcHRlciwgMHg3MWMpOwotCiAJZHByaW50aygiJXM6IHRtcDMgPSAleFxuIiwgX19mdW5jX18sIHRtcDMpOwotCiAJd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4NzFjLCB0bXAyKTsKIAogCS8vIGNoZWNrIGZvciBpbnRlcm5hbCBTUkFNID8/PwpAQCAtMzUwLDkgKzMyMCw3IEBACiAJCXNyYW1fc2V0X3NpemUoYWRhcHRlciwgMHgxMDAwMCk7CiAJCXNyYW1faW5pdChhZGFwdGVyKTsKIAkJd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4MjA4LCB0bXApOwotCiAJCWRwcmludGsoIiVzOiBzcmFtIHNpemUgPSAzMktcbiIsIF9fZnVuY19fKTsKLQogCQlyZXR1cm4gMzI7CiAJfQogCkBAIC0zNjAsOSArMzI4LDcgQEAKIAkJc3JhbV9zZXRfc2l6ZShhZGFwdGVyLCAweDIwMDAwKTsKIAkJc3JhbV9pbml0KGFkYXB0ZXIpOwogCQl3cml0ZV9yZWdfZHcoYWRhcHRlciwgMHgyMDgsIHRtcCk7Ci0KIAkJZHByaW50aygiJXM6IHNyYW0gc2l6ZSA9IDEyOEtcbiIsIF9fZnVuY19fKTsKLQogCQlyZXR1cm4gMTI4OwogCX0KIApAQCAtMzcwLDkgKzMzNiw3IEBACiAJCXNyYW1fc2V0X3NpemUoYWRhcHRlciwgMHgwMDAwMCk7CiAJCXNyYW1faW5pdChhZGFwdGVyKTsKIAkJd3JpdGVfcmVnX2R3KGFkYXB0ZXIsIDB4MjA4LCB0bXApOwotCiAJCWRwcmludGsoIiVzOiBzcmFtIHNpemUgPSA2NEtcbiIsIF9fZnVuY19fKTsKLQogCQlyZXR1cm4gNjQ7CiAJfQogCkBAIC0zODAsMTggKzM0NCwxNCBAQAogCQlzcmFtX3NldF9zaXplKGFkYXB0ZXIsIDB4MTAwMDApOwogCQlzcmFtX2luaXQoYWRhcHRlcik7CiAJCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDIwOCwgdG1wKTsKLQogCQlkcHJpbnRrKCIlczogc3JhbSBzaXplID0gMzJLXG4iLCBfX2Z1bmNfXyk7Ci0KIAkJcmV0dXJuIDMyOwogCX0KIAogCXNyYW1fc2V0X3NpemUoYWRhcHRlciwgMHgxMDAwMCk7CiAJc3JhbV9pbml0KGFkYXB0ZXIpOwogCXdyaXRlX3JlZ19kdyhhZGFwdGVyLCAweDIwOCwgdG1wKTsKLQogCWRwcmludGsoIiVzOiBTUkFNIGRldGVjdGlvbiBmYWlsZWQuIFNldCB0byAzMksgXG4iLCBfX2Z1bmNfXyk7Ci0KIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXVzYi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXVzYi5jCmluZGV4IGFlMGQ3NmEuLmJlZGNmYjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC11c2IuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtdXNiLmMKQEAgLTEsMTEgKzEsOCBAQAogLyoKLSAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpbnV4IGRyaXZlciB0aGUgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCi0gKgotICogZmxleGNvcC11c2IuYyAtIGNvdmVycyB0aGUgVVNCIHBhcnQuCi0gKgotICogc2VlIGZsZXhjb3AuYyBmb3IgY29weXJpZ2h0IGluZm9ybWF0aW9uLgorICogTGludXggZHJpdmVyIGZvciBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKKyAqIGZsZXhjb3AtdXNiLmMgLSBjb3ZlcnMgdGhlIFVTQiBwYXJ0CisgKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24KICAqLwotCiAjZGVmaW5lIEZDX0xPR19QUkVGSVggImZsZXhjb3BfdXNiIgogI2luY2x1ZGUgImZsZXhjb3AtdXNiLmgiCiAjaW5jbHVkZSAiZmxleGNvcC1jb21tb24uaCIKQEAgLTE4LDQyICsxNSw0NyBAQAogLyogZGVidWcgKi8KICNpZmRlZiBDT05GSUdfRFZCX0IyQzJfRkxFWENPUF9ERUJVRwogI2RlZmluZSBkcHJpbnRrKGxldmVsLGFyZ3MuLi4pIFwKLQkgICAgZG8geyBpZiAoKGRlYnVnICYgbGV2ZWwpKSB7IHByaW50ayhhcmdzKTsgfSB9IHdoaWxlICgwKQotI2RlZmluZSBkZWJ1Z19kdW1wKGIsbCxtZXRob2QpIHtcCisJZG8geyBpZiAoKGRlYnVnICYgbGV2ZWwpKSBwcmludGsoYXJncyk7IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgZGVidWdfZHVtcChiLCBsLCBtZXRob2QpIGRvIHtcCiAJaW50IGk7IFwKLQlmb3IgKGkgPSAwOyBpIDwgbDsgaSsrKSBtZXRob2QoIiUwMnggIiwgYltpXSk7IFwKLQltZXRob2QoIlxuIik7XAotfQorCWZvciAoaSA9IDA7IGkgPCBsOyBpKyspIFwKKwkJbWV0aG9kKCIlMDJ4ICIsIGJbaV0pOyBcCisJbWV0aG9kKCJcbiIpOyBcCit9IHdoaWxlICgwKQogCiAjZGVmaW5lIERFQlNUQVRVUyAiIgogI2Vsc2UKLSNkZWZpbmUgZHByaW50ayhsZXZlbCxhcmdzLi4uKQotI2RlZmluZSBkZWJ1Z19kdW1wKGIsbCxtZXRob2QpCisjZGVmaW5lIGRwcmludGsobGV2ZWwsIGFyZ3MuLi4pCisjZGVmaW5lIGRlYnVnX2R1bXAoYiwgbCwgbWV0aG9kKQogI2RlZmluZSBERUJTVEFUVVMgIiAoZGVidWdnaW5nIGlzIG5vdCBlbmFibGVkKSIKICNlbmRpZgogCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInNldCBkZWJ1Z2dpbmcgbGV2ZWwgKDE9aW5mbyx0cz0yLGN0cmw9NCxpMmM9OCx2OG1lbT0xNiAob3ItYWJsZSkpLiIgREVCU1RBVFVTKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWdnaW5nIGxldmVsICgxPWluZm8sdHM9MiwiCisJCSJjdHJsPTQsaTJjPTgsdjhtZW09MTYgKG9yLWFibGUpKS4iIERFQlNUQVRVUyk7CiAjdW5kZWYgREVCU1RBVFVTCiAKLSNkZWZpbmUgZGViX2luZm8oYXJncy4uLikgZHByaW50aygweDAxLGFyZ3MpCi0jZGVmaW5lIGRlYl90cyhhcmdzLi4uKSAgIGRwcmludGsoMHgwMixhcmdzKQotI2RlZmluZSBkZWJfY3RybChhcmdzLi4uKSBkcHJpbnRrKDB4MDQsYXJncykKLSNkZWZpbmUgZGViX2kyYyhhcmdzLi4uKSAgZHByaW50aygweDA4LGFyZ3MpCi0jZGVmaW5lIGRlYl92OChhcmdzLi4uKSAgIGRwcmludGsoMHgxMCxhcmdzKQorI2RlZmluZSBkZWJfaW5mbyhhcmdzLi4uKSBkcHJpbnRrKDB4MDEsIGFyZ3MpCisjZGVmaW5lIGRlYl90cyhhcmdzLi4uKSBkcHJpbnRrKDB4MDIsIGFyZ3MpCisjZGVmaW5lIGRlYl9jdHJsKGFyZ3MuLi4pIGRwcmludGsoMHgwNCwgYXJncykKKyNkZWZpbmUgZGViX2kyYyhhcmdzLi4uKSBkcHJpbnRrKDB4MDgsIGFyZ3MpCisjZGVmaW5lIGRlYl92OChhcmdzLi4uKSBkcHJpbnRrKDB4MTAsIGFyZ3MpCiAKIC8qIEpMUCAxMTE3MDA6IHdlIHdpbGwgaW5jbHVkZSB0aGUgMSBiaXQgZ2FwIGJldHdlZW4gdGhlIHVwcGVyIGFuZCBsb3dlciAzIGJpdHMKICAqIGluIHRoZSBJQkkgYWRkcmVzcywgdG8gbWFrZSB0aGUgVjggY29kZSBzaW1wbGVyLgotICogUENJIEFERFJFU1MgRk9STUFUOiAweDcxQyAtPiAwMDAwIDAxMTEgMDAwMSAxMTAwICh0aGVzZSBhcmUgdGhlIHNpeCBiaXRzIHVzZWQpCisgKiBQQ0kgQUREUkVTUyBGT1JNQVQ6IDB4NzFDIC0+IDAwMDAgMDExMSAwMDAxIDExMDAgKHRoZSBzaXggYml0cyB1c2VkKQogICogICAgICAgICAgICAgICAgICBpbiBnZW5lcmFsOiAwMDAwIDBISEggMDAwTCBMTDAwCiAgKiBJQkkgQUREUkVTUyBGT1JNQVQ6ICAgICAgICAgICAgICAgICAgICBSSEhIIEJMTEwKICAqCiAgKiB3aGVyZSBSIGlzIHRoZSByZWFkKDEpL3dyaXRlKDApIGJpdCwgQiBpcyB0aGUgYnVzeSBiaXQKICAqIGFuZCBISEggYW5kIExMTCBhcmUgdGhlIHR3byBzZXRzIG9mIHRocmVlIGJpdHMgZnJvbSB0aGUgUENJIGFkZHJlc3MuCiAgKi8KLSNkZWZpbmUgQjJDMl9GTEVYX1BDSU9GRlNFVF9UT19JTlRFUk5BTEFERFIodXNQQ0kpICh1OCkgKCgodXNQQ0kgPj4gMikgJiAweDA3KSArICgodXNQQ0kgPj4gNCkgJiAweDcwKSkKLSNkZWZpbmUgQjJDMl9GTEVYX0lOVEVSTkFMQUREUl9UT19QQ0lPRkZTRVQodWNBZGRyKSAodTE2KSAoKCh1Y0FkZHIgJiAweDA3KSA8PCAyKSArICgodWNBZGRyICYgMHg3MCkgPDwgNCkpCisjZGVmaW5lIEIyQzJfRkxFWF9QQ0lPRkZTRVRfVE9fSU5URVJOQUxBRERSKHVzUENJKSAodTgpIFwKKwkoKCh1c1BDSSA+PiAyKSAmIDB4MDcpICsgKCh1c1BDSSA+PiA0KSAmIDB4NzApKQorI2RlZmluZSBCMkMyX0ZMRVhfSU5URVJOQUxBRERSX1RPX1BDSU9GRlNFVCh1Y0FkZHIpICh1MTYpIFwKKwkoKCh1Y0FkZHIgJiAweDA3KSA8PCAyKSArICgodWNBZGRyICYgMHg3MCkgPDwgNCkpCiAKIC8qCiAgKiBES1QgMDIwMjI4CkBAIC02OSwxMiArNzEsMTMgQEAKIAlzdHJ1Y3QgZmxleGNvcF91c2IgKmZjX3VzYiA9IGZjLT5idXNfc3BlY2lmaWM7CiAJdTggcmVxdWVzdCA9IHJlYWQgPyBCMkMyX1VTQl9SRUFEX1JFRyA6IEIyQzJfVVNCX1dSSVRFX1JFRzsKIAl1OCByZXF1ZXN0X3R5cGUgPSAocmVhZCA/IFVTQl9ESVJfSU4gOiBVU0JfRElSX09VVCkgfCBVU0JfVFlQRV9WRU5ET1I7Ci0JdTggd0FkZHJlc3MgPSBCMkMyX0ZMRVhfUENJT0ZGU0VUX1RPX0lOVEVSTkFMQUREUih3UmVnT2Zmc1BDSSkgfCAocmVhZCA/IDB4ODAgOiAwKTsKKwl1OCB3QWRkcmVzcyA9IEIyQzJfRkxFWF9QQ0lPRkZTRVRfVE9fSU5URVJOQUxBRERSKHdSZWdPZmZzUENJKSB8CisJCShyZWFkID8gMHg4MCA6IDApOwogCiAJaW50IGxlbiA9IHVzYl9jb250cm9sX21zZyhmY191c2ItPnVkZXYsCiAJCQlyZWFkID8gQjJDMl9VU0JfQ1RSTF9QSVBFX0lOIDogQjJDMl9VU0JfQ1RSTF9QSVBFX09VVCwKIAkJCXJlcXVlc3QsCi0JCQlyZXF1ZXN0X3R5cGUsICAvKiAweGMwIHJlYWQgb3IgMHg0MCB3cml0ZSovCisJCQlyZXF1ZXN0X3R5cGUsIC8qIDB4YzAgcmVhZCBvciAweDQwIHdyaXRlICovCiAJCQl3QWRkcmVzcywKIAkJCTAsCiAJCQl2YWwsCkBAIC04Miw1NSArODUsNDkgQEAKIAkJCUIyQzJfV0FJVF9GT1JfT1BFUkFUSU9OX1JEVyAqIEhaKTsKIAogCWlmIChsZW4gIT0gc2l6ZW9mKHUzMikpIHsKLQkJZXJyKCJlcnJvciB3aGlsZSAlcyBkd29yZCBmcm9tICVkICglZCkuIixyZWFkID8gInJlYWRpbmciIDogIndyaXRpbmciLAotCQkJd0FkZHJlc3Msd1JlZ09mZnNQQ0kpOworCQllcnIoImVycm9yIHdoaWxlICVzIGR3b3JkIGZyb20gJWQgKCVkKS4iLCByZWFkID8gInJlYWRpbmciIDoKKwkJCQkid3JpdGluZyIsIHdBZGRyZXNzLCB3UmVnT2Zmc1BDSSk7CiAJCXJldHVybiAtRUlPOwogCX0KIAlyZXR1cm4gMDsKIH0KLQogLyoKICAqIERLVCAwMTA4MTcgLSBhZGQgc3VwcG9ydCBmb3IgVjggbWVtb3J5IHJlYWQvd3JpdGUgYW5kIGZsYXNoIHVwZGF0ZQogICovCiBzdGF0aWMgaW50IGZsZXhjb3BfdXNiX3Y4X21lbW9yeV9yZXEoc3RydWN0IGZsZXhjb3BfdXNiICpmY191c2IsCiAJCWZsZXhjb3BfdXNiX3JlcXVlc3RfdCByZXEsIHU4IHBhZ2UsIHUxNiB3QWRkcmVzcywKLQkJdTggKnBiQnVmZmVyLHUzMiBidWZsZW4pCisJCXU4ICpwYkJ1ZmZlciwgdTMyIGJ1ZmxlbikKIHsKLS8vCXU4IGR3UmVxdWVzdFR5cGU7CiAJdTggcmVxdWVzdF90eXBlID0gVVNCX1RZUEVfVkVORE9SOwogCXUxNiB3SW5kZXg7Ci0JaW50IG5XYWl0VGltZSxwaXBlLGxlbjsKLQorCWludCBuV2FpdFRpbWUsIHBpcGUsIGxlbjsKIAl3SW5kZXggPSBwYWdlIDw8IDg7CiAKIAlzd2l0Y2ggKHJlcSkgewotCQljYXNlIEIyQzJfVVNCX1JFQURfVjhfTUVNOgotCQkJbldhaXRUaW1lID0gQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fVjhSRUFEOwotCQkJcmVxdWVzdF90eXBlIHw9IFVTQl9ESVJfSU47Ci0vLwkJCWR3UmVxdWVzdFR5cGUgPSAodTgpIFJUWVBFX1JFQURfVjhfTUVNT1JZOwotCQkJcGlwZSA9IEIyQzJfVVNCX0NUUkxfUElQRV9JTjsKKwljYXNlIEIyQzJfVVNCX1JFQURfVjhfTUVNOgorCQluV2FpdFRpbWUgPSBCMkMyX1dBSVRfRk9SX09QRVJBVElPTl9WOFJFQUQ7CisJCXJlcXVlc3RfdHlwZSB8PSBVU0JfRElSX0lOOworCQlwaXBlID0gQjJDMl9VU0JfQ1RSTF9QSVBFX0lOOwogCQlicmVhazsKLQkJY2FzZSBCMkMyX1VTQl9XUklURV9WOF9NRU06Ci0JCQl3SW5kZXggfD0gcGJCdWZmZXJbMF07Ci0JCQlyZXF1ZXN0X3R5cGUgfD0gVVNCX0RJUl9PVVQ7Ci0JCQluV2FpdFRpbWUgPSBCMkMyX1dBSVRfRk9SX09QRVJBVElPTl9WOFdSSVRFOwotLy8JCQlkd1JlcXVlc3RUeXBlID0gKHU4KSBSVFlQRV9XUklURV9WOF9NRU1PUlk7Ci0JCQlwaXBlID0gQjJDMl9VU0JfQ1RSTF9QSVBFX09VVDsKKwljYXNlIEIyQzJfVVNCX1dSSVRFX1Y4X01FTToKKwkJd0luZGV4IHw9IHBiQnVmZmVyWzBdOworCQlyZXF1ZXN0X3R5cGUgfD0gVVNCX0RJUl9PVVQ7CisJCW5XYWl0VGltZSA9IEIyQzJfV0FJVF9GT1JfT1BFUkFUSU9OX1Y4V1JJVEU7CisJCXBpcGUgPSBCMkMyX1VTQl9DVFJMX1BJUEVfT1VUOwogCQlicmVhazsKLQkJY2FzZSBCMkMyX1VTQl9GTEFTSF9CTE9DSzoKLQkJCXJlcXVlc3RfdHlwZSB8PSBVU0JfRElSX09VVDsKLQkJCW5XYWl0VGltZSA9IEIyQzJfV0FJVF9GT1JfT1BFUkFUSU9OX1Y4RkxBU0g7Ci0vLwkJCWR3UmVxdWVzdFR5cGUgPSAodTgpIFJUWVBFX1dSSVRFX1Y4X0ZMQVNIOwotCQkJcGlwZSA9IEIyQzJfVVNCX0NUUkxfUElQRV9PVVQ7CisJY2FzZSBCMkMyX1VTQl9GTEFTSF9CTE9DSzoKKwkJcmVxdWVzdF90eXBlIHw9IFVTQl9ESVJfT1VUOworCQluV2FpdFRpbWUgPSBCMkMyX1dBSVRfRk9SX09QRVJBVElPTl9WOEZMQVNIOworCQlwaXBlID0gQjJDMl9VU0JfQ1RSTF9QSVBFX09VVDsKIAkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkZWJfaW5mbygidW5zdXBwb3J0ZWQgcmVxdWVzdCBmb3IgdjhfbWVtX3JlcSAleC5cbiIscmVxKTsKKwlkZWZhdWx0OgorCQlkZWJfaW5mbygidW5zdXBwb3J0ZWQgcmVxdWVzdCBmb3IgdjhfbWVtX3JlcSAleC5cbiIsIHJlcSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlkZWJfdjgoInY4bWVtOiAlMDJ4ICUwMnggJTA0eCAlMDR4LCBsZW46ICVkXG4iLHJlcXVlc3RfdHlwZSxyZXEsCi0JCQl3QWRkcmVzcyx3SW5kZXgsYnVmbGVuKTsKKwlkZWJfdjgoInY4bWVtOiAlMDJ4ICUwMnggJTA0eCAlMDR4LCBsZW46ICVkXG4iLCByZXF1ZXN0X3R5cGUsIHJlcSwKKwkJCXdBZGRyZXNzLCB3SW5kZXgsIGJ1Zmxlbik7CiAKLQlsZW4gPSB1c2JfY29udHJvbF9tc2coZmNfdXNiLT51ZGV2LHBpcGUsCisJbGVuID0gdXNiX2NvbnRyb2xfbXNnKGZjX3VzYi0+dWRldiwgcGlwZSwKIAkJCXJlcSwKIAkJCXJlcXVlc3RfdHlwZSwKIAkJCXdBZGRyZXNzLApAQCAtMTM5LDM5ICsxMzYsNTMgQEAKIAkJCWJ1ZmxlbiwKIAkJCW5XYWl0VGltZSAqIEhaKTsKIAotCWRlYnVnX2R1bXAocGJCdWZmZXIsbGVuLGRlYl92OCk7Ci0KKwlkZWJ1Z19kdW1wKHBiQnVmZmVyLCBsZW4sIGRlYl92OCk7CiAJcmV0dXJuIGxlbiA9PSBidWZsZW4gPyAwIDogLUVJTzsKIH0KIAogI2RlZmluZSBieXRlc19sZWZ0X3RvX3JlYWRfb25fcGFnZShwYWRkcixidWZsZW4pIFwKLQkJCSgoVjhfTUVNT1JZX1BBR0VfU0laRSAtIChwYWRkciAmIFY4X01FTU9SWV9QQUdFX01BU0spKSA+IGJ1ZmxlbiBcCi0JCQk/IGJ1ZmxlbiA6IChWOF9NRU1PUllfUEFHRV9TSVpFIC0gKHBhZGRyICYgVjhfTUVNT1JZX1BBR0VfTUFTSykpKQorCSgoVjhfTUVNT1JZX1BBR0VfU0laRSAtIChwYWRkciAmIFY4X01FTU9SWV9QQUdFX01BU0spKSA+IGJ1ZmxlbiBcCisJID8gYnVmbGVuIDogKFY4X01FTU9SWV9QQUdFX1NJWkUgLSAocGFkZHIgJiBWOF9NRU1PUllfUEFHRV9NQVNLKSkpCiAKLXN0YXRpYyBpbnQgZmxleGNvcF91c2JfbWVtb3J5X3JlcShzdHJ1Y3QgZmxleGNvcF91c2IgKmZjX3VzYixmbGV4Y29wX3VzYl9yZXF1ZXN0X3QgcmVxLAotCQlmbGV4Y29wX3VzYl9tZW1fcGFnZV90IHBhZ2Vfc3RhcnQsIHUzMiBhZGRyLCBpbnQgZXh0ZW5kZWQsIHU4ICpidWYsIHUzMiBsZW4pCitzdGF0aWMgaW50IGZsZXhjb3BfdXNiX21lbW9yeV9yZXEoc3RydWN0IGZsZXhjb3BfdXNiICpmY191c2IsCisJCWZsZXhjb3BfdXNiX3JlcXVlc3RfdCByZXEsIGZsZXhjb3BfdXNiX21lbV9wYWdlX3QgcGFnZV9zdGFydCwKKwkJdTMyIGFkZHIsIGludCBleHRlbmRlZCwgdTggKmJ1ZiwgdTMyIGxlbikKIHsKIAlpbnQgaSxyZXQgPSAwOwogCXUxNiB3TWF4OwogCXUzMiBwYWdlY2h1bmsgPSAwOwogCiAJc3dpdGNoKHJlcSkgewotCQljYXNlIEIyQzJfVVNCX1JFQURfVjhfTUVNOiAgd01heCA9IFVTQl9NRU1fUkVBRF9NQVg7IGJyZWFrOwotCQljYXNlIEIyQzJfVVNCX1dSSVRFX1Y4X01FTToJd01heCA9IFVTQl9NRU1fV1JJVEVfTUFYOyBicmVhazsKLQkJY2FzZSBCMkMyX1VTQl9GTEFTSF9CTE9DSzogIHdNYXggPSBVU0JfRkxBU0hfTUFYOyBicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOworCWNhc2UgQjJDMl9VU0JfUkVBRF9WOF9NRU06CisJCXdNYXggPSBVU0JfTUVNX1JFQURfTUFYOworCQlicmVhazsKKwljYXNlIEIyQzJfVVNCX1dSSVRFX1Y4X01FTToKKwkJd01heCA9IFVTQl9NRU1fV1JJVEVfTUFYOworCQlicmVhazsKKwljYXNlIEIyQzJfVVNCX0ZMQVNIX0JMT0NLOgorCQl3TWF4ID0gVVNCX0ZMQVNIX01BWDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CiAJCWJyZWFrOwogCX0KIAlmb3IgKGkgPSAwOyBpIDwgbGVuOykgewotCQlwYWdlY2h1bmsgPSB3TWF4IDwgYnl0ZXNfbGVmdF90b19yZWFkX29uX3BhZ2UoYWRkcixsZW4pID8gd01heCA6IGJ5dGVzX2xlZnRfdG9fcmVhZF9vbl9wYWdlKGFkZHIsbGVuKTsKLQkJZGViX2luZm8oIiV4XG4iLChhZGRyICYgVjhfTUVNT1JZX1BBR0VfTUFTSykgfCAoVjhfTUVNT1JZX0VYVEVOREVEKmV4dGVuZGVkKSk7Ci0JCWlmICgocmV0ID0gZmxleGNvcF91c2JfdjhfbWVtb3J5X3JlcShmY191c2IscmVxLAotCQkJCXBhZ2Vfc3RhcnQgKyAoYWRkciAvIFY4X01FTU9SWV9QQUdFX1NJWkUpLCAvKiBhY3R1YWwgcGFnZSAqLwotCQkJCShhZGRyICYgVjhfTUVNT1JZX1BBR0VfTUFTSykgfCAoVjhfTUVNT1JZX0VYVEVOREVEKmV4dGVuZGVkKSwKLQkJCQkmYnVmW2ldLHBhZ2VjaHVuaykpIDwgMCkKLQkJCXJldHVybiByZXQ7CisJCXBhZ2VjaHVuayA9CisJCQl3TWF4IDwgYnl0ZXNfbGVmdF90b19yZWFkX29uX3BhZ2UoYWRkciwgbGVuKSA/CisJCQkJd01heCA6CisJCQkJYnl0ZXNfbGVmdF90b19yZWFkX29uX3BhZ2UoYWRkciwgbGVuKTsKKwkJZGViX2luZm8oIiV4XG4iLAorCQkJKGFkZHIgJiBWOF9NRU1PUllfUEFHRV9NQVNLKSB8CisJCQkJKFY4X01FTU9SWV9FWFRFTkRFRCpleHRlbmRlZCkpOwogCisJCXJldCA9IGZsZXhjb3BfdXNiX3Y4X21lbW9yeV9yZXEoZmNfdXNiLCByZXEsCisJCQlwYWdlX3N0YXJ0ICsgKGFkZHIgLyBWOF9NRU1PUllfUEFHRV9TSVpFKSwKKwkJCShhZGRyICYgVjhfTUVNT1JZX1BBR0VfTUFTSykgfAorCQkJCShWOF9NRU1PUllfRVhURU5ERUQqZXh0ZW5kZWQpLAorCQkJJmJ1ZltpXSwgcGFnZWNodW5rKTsKKworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CiAJCWFkZHIgKz0gcGFnZWNodW5rOwogCQlsZW4gLT0gcGFnZWNodW5rOwogCX0KQEAgLTE4MCw4ICsxOTEsOSBAQAogCiBzdGF0aWMgaW50IGZsZXhjb3BfdXNiX2dldF9tYWNfYWRkcihzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBpbnQgZXh0ZW5kZWQpCiB7Ci0JcmV0dXJuIGZsZXhjb3BfdXNiX21lbW9yeV9yZXEoZmMtPmJ1c19zcGVjaWZpYyxCMkMyX1VTQl9SRUFEX1Y4X01FTSwKLQkJCVY4X01FTU9SWV9QQUdFX0ZMQVNILDB4MWYwMTAsMSxmYy0+ZHZiX2FkYXB0ZXIucHJvcG9zZWRfbWFjLDYpOworCXJldHVybiBmbGV4Y29wX3VzYl9tZW1vcnlfcmVxKGZjLT5idXNfc3BlY2lmaWMsIEIyQzJfVVNCX1JFQURfVjhfTUVNLAorCQlWOF9NRU1PUllfUEFHRV9GTEFTSCwgMHgxZjAxMCwgMSwKKwkJZmMtPmR2Yl9hZGFwdGVyLnByb3Bvc2VkX21hYywgNik7CiB9CiAKICNpZiAwCkBAIC0xOTEsMTEgKzIwMyw4IEBACiB7CiAJdTE2IHdWYWx1ZTsKIAl1OCByZXF1ZXN0X3R5cGUgPSAoc2V0ID8gVVNCX0RJUl9PVVQgOiBVU0JfRElSX0lOKSB8IFVTQl9UWVBFX1ZFTkRPUjsKLS8vCXU4IGR3UmVxdWVzdFR5cGUgPSAodTgpIFJUWVBFX0dFTkVSSUMsCiAJaW50IG5XYWl0VGltZSA9IDIsCi0JCXBpcGUgPSBzZXQgPyBCMkMyX1VTQl9DVFJMX1BJUEVfT1VUIDogQjJDMl9VU0JfQ1RSTF9QSVBFX0lOLAotCQlsZW47Ci0KKwkgICAgcGlwZSA9IHNldCA/IEIyQzJfVVNCX0NUUkxfUElQRV9PVVQgOiBCMkMyX1VTQl9DVFJMX1BJUEVfSU4sIGxlbjsKIAl3VmFsdWUgPSAoZnVuYyA8PCA4KSB8IGV4dHJhOwogCiAJbGVuID0gdXNiX2NvbnRyb2xfbXNnKGZjX3VzYi0+dWRldixwaXBlLApAQCAtMjE4LDM2ICsyMjcsMzUgQEAKIAlzdHJ1Y3QgZmxleGNvcF91c2IgKmZjX3VzYiA9IGkyYy0+ZmMtPmJ1c19zcGVjaWZpYzsKIAl1MTYgd1ZhbHVlLCB3SW5kZXg7CiAJaW50IG5XYWl0VGltZSxwaXBlLGxlbjsKLS8vCXU4IGR3UmVxdWVzdFR5cGU7CiAJdTggcmVxdWVzdF90eXBlID0gVVNCX1RZUEVfVkVORE9SOwogCiAJc3dpdGNoIChmdW5jKSB7Ci0JCWNhc2UgVVNCX0ZVTkNfSTJDX1dSSVRFOgotCQljYXNlIFVTQl9GVU5DX0kyQ19NVUxUSVdSSVRFOgotCQljYXNlIFVTQl9GVU5DX0kyQ19SRVBFQVRXUklURToKKwljYXNlIFVTQl9GVU5DX0kyQ19XUklURToKKwljYXNlIFVTQl9GVU5DX0kyQ19NVUxUSVdSSVRFOgorCWNhc2UgVVNCX0ZVTkNfSTJDX1JFUEVBVFdSSVRFOgogCQkvKiBES1QgMDIwMjA4IC0gYWRkIHRoaXMgdG8gc3VwcG9ydCBzcGVjaWFsIGNhc2Ugb2YgRGlTRXFDICovCi0JCWNhc2UgVVNCX0ZVTkNfSTJDX0NIRUNLV1JJVEU6Ci0JCQlwaXBlID0gQjJDMl9VU0JfQ1RSTF9QSVBFX09VVDsKLQkJCW5XYWl0VGltZSA9IDI7Ci0vLwkJCWR3UmVxdWVzdFR5cGUgPSAodTgpIFJUWVBFX0dFTkVSSUM7Ci0JCQlyZXF1ZXN0X3R5cGUgfD0gVVNCX0RJUl9PVVQ7CisJY2FzZSBVU0JfRlVOQ19JMkNfQ0hFQ0tXUklURToKKwkJcGlwZSA9IEIyQzJfVVNCX0NUUkxfUElQRV9PVVQ7CisJCW5XYWl0VGltZSA9IDI7CisJCXJlcXVlc3RfdHlwZSB8PSBVU0JfRElSX09VVDsKIAkJYnJlYWs7Ci0JCWNhc2UgVVNCX0ZVTkNfSTJDX1JFQUQ6Ci0JCWNhc2UgVVNCX0ZVTkNfSTJDX1JFUEVBVFJFQUQ6Ci0JCQlwaXBlID0gQjJDMl9VU0JfQ1RSTF9QSVBFX0lOOwotCQkJbldhaXRUaW1lID0gMjsKLS8vCQkJZHdSZXF1ZXN0VHlwZSA9ICh1OCkgUlRZUEVfR0VORVJJQzsKLQkJCXJlcXVlc3RfdHlwZSB8PSBVU0JfRElSX0lOOworCWNhc2UgVVNCX0ZVTkNfSTJDX1JFQUQ6CisJY2FzZSBVU0JfRlVOQ19JMkNfUkVQRUFUUkVBRDoKKwkJcGlwZSA9IEIyQzJfVVNCX0NUUkxfUElQRV9JTjsKKwkJbldhaXRUaW1lID0gMjsKKwkJcmVxdWVzdF90eXBlIHw9IFVTQl9ESVJfSU47CiAJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZGViX2luZm8oInVuc3VwcG9ydGVkIGZ1bmN0aW9uIGZvciBpMmNfcmVxICV4XG4iLGZ1bmMpOwotCQkJcmV0dXJuIC1FSU5WQUw7CisJZGVmYXVsdDoKKwkJZGViX2luZm8oInVuc3VwcG9ydGVkIGZ1bmN0aW9uIGZvciBpMmNfcmVxICV4XG4iLCBmdW5jKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXdWYWx1ZSA9IChmdW5jIDw8IDgpIHwgKGkyYy0+cG9ydCA8PCA0KTsKIAl3SW5kZXggPSAoY2hpcGFkZHIgPDwgOCApIHwgYWRkcjsKIAotCWRlYl9pMmMoImkyYyAlMmQ6ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4XG4iLGZ1bmMscmVxdWVzdF90eXBlLHJlcSwKLQkJd1ZhbHVlICYgMHhmZiwgd1ZhbHVlID4+IDgsIHdJbmRleCAmIDB4ZmYsIHdJbmRleCA+PiA4KTsKKwlkZWJfaTJjKCJpMmMgJTJkOiAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeFxuIiwKKwkJCWZ1bmMsIHJlcXVlc3RfdHlwZSwgcmVxLAorCQkJd1ZhbHVlICYgMHhmZiwgd1ZhbHVlID4+IDgsCisJCQl3SW5kZXggJiAweGZmLCB3SW5kZXggPj4gOCk7CiAKIAlsZW4gPSB1c2JfY29udHJvbF9tc2coZmNfdXNiLT51ZGV2LHBpcGUsCiAJCQlyZXEsCkBAIC0yNTcsNDQgKzI2NSw0OSBAQAogCQkJYnVmLAogCQkJYnVmbGVuLAogCQkJbldhaXRUaW1lICogSFopOwotCiAJcmV0dXJuIGxlbiA9PSBidWZsZW4gPyAwIDogLUVSRU1PVEVJTzsKIH0KIAotLyogYWN0dWFsIGJ1cyBzcGVjaWZpYyBhY2Nlc3MgZnVuY3Rpb25zLCBtYWtlIHN1cmUgcHJvdG90eXBlIGFyZS93aWxsIGJlIGVxdWFsIHRvIHBjaSAqLwotc3RhdGljIGZsZXhjb3BfaWJpX3ZhbHVlIGZsZXhjb3BfdXNiX3JlYWRfaWJpX3JlZyhzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLCBmbGV4Y29wX2liaV9yZWdpc3RlciByZWcpCisvKiBhY3R1YWwgYnVzIHNwZWNpZmljIGFjY2VzcyBmdW5jdGlvbnMsCisgICBtYWtlIHN1cmUgcHJvdG90eXBlIGFyZS93aWxsIGJlIGVxdWFsIHRvIHBjaSAqLworc3RhdGljIGZsZXhjb3BfaWJpX3ZhbHVlIGZsZXhjb3BfdXNiX3JlYWRfaWJpX3JlZyhzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjLAorCWZsZXhjb3BfaWJpX3JlZ2lzdGVyIHJlZykKIHsKIAlmbGV4Y29wX2liaV92YWx1ZSB2YWw7CiAJdmFsLnJhdyA9IDA7Ci0JZmxleGNvcF91c2JfcmVhZHdyaXRlX2R3KGZjLHJlZywgJnZhbC5yYXcsIDEpOworCWZsZXhjb3BfdXNiX3JlYWR3cml0ZV9kdyhmYywgcmVnLCAmdmFsLnJhdywgMSk7CiAJcmV0dXJuIHZhbDsKIH0KIAotc3RhdGljIGludCBmbGV4Y29wX3VzYl93cml0ZV9pYmlfcmVnKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsIGZsZXhjb3BfaWJpX3JlZ2lzdGVyIHJlZywgZmxleGNvcF9pYmlfdmFsdWUgdmFsKQorc3RhdGljIGludCBmbGV4Y29wX3VzYl93cml0ZV9pYmlfcmVnKHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMsCisJCWZsZXhjb3BfaWJpX3JlZ2lzdGVyIHJlZywgZmxleGNvcF9pYmlfdmFsdWUgdmFsKQogewotCXJldHVybiBmbGV4Y29wX3VzYl9yZWFkd3JpdGVfZHcoZmMscmVnLCAmdmFsLnJhdywgMCk7CisJcmV0dXJuIGZsZXhjb3BfdXNiX3JlYWR3cml0ZV9kdyhmYywgcmVnLCAmdmFsLnJhdywgMCk7CiB9CiAKIHN0YXRpYyBpbnQgZmxleGNvcF91c2JfaTJjX3JlcXVlc3Qoc3RydWN0IGZsZXhjb3BfaTJjX2FkYXB0ZXIgKmkyYywKLQlmbGV4Y29wX2FjY2Vzc19vcF90IG9wLCB1OCBjaGlwYWRkciwgdTggYWRkciwgdTggKmJ1ZiwgdTE2IGxlbikKKwkJZmxleGNvcF9hY2Nlc3Nfb3BfdCBvcCwgdTggY2hpcGFkZHIsIHU4IGFkZHIsIHU4ICpidWYsIHUxNiBsZW4pCiB7CiAJaWYgKG9wID09IEZDX1JFQUQpCiAJCXJldHVybiBmbGV4Y29wX3VzYl9pMmNfcmVxKGkyYywgQjJDMl9VU0JfSTJDX1JFUVVFU1QsCi0JCQlVU0JfRlVOQ19JMkNfUkVBRCwgY2hpcGFkZHIsIGFkZHIsIGJ1ZiwgbGVuKTsKKwkJCQlVU0JfRlVOQ19JMkNfUkVBRCwgY2hpcGFkZHIsIGFkZHIsIGJ1ZiwgbGVuKTsKIAllbHNlCiAJCXJldHVybiBmbGV4Y29wX3VzYl9pMmNfcmVxKGkyYywgQjJDMl9VU0JfSTJDX1JFUVVFU1QsCi0JCQlVU0JfRlVOQ19JMkNfV1JJVEUsIGNoaXBhZGRyLCBhZGRyLCBidWYsIGxlbik7CisJCQkJVVNCX0ZVTkNfSTJDX1dSSVRFLCBjaGlwYWRkciwgYWRkciwgYnVmLCBsZW4pOwogfQogCi1zdGF0aWMgdm9pZCBmbGV4Y29wX3VzYl9wcm9jZXNzX2ZyYW1lKHN0cnVjdCBmbGV4Y29wX3VzYiAqZmNfdXNiLCB1OCAqYnVmZmVyLCBpbnQgYnVmZmVyX2xlbmd0aCkKK3N0YXRpYyB2b2lkIGZsZXhjb3BfdXNiX3Byb2Nlc3NfZnJhbWUoc3RydWN0IGZsZXhjb3BfdXNiICpmY191c2IsCisJdTggKmJ1ZmZlciwgaW50IGJ1ZmZlcl9sZW5ndGgpCiB7CiAJdTggKmI7CiAJaW50IGw7CiAKLQlkZWJfdHMoInRtcF9idWZmZXJfbGVuZ3RoPSVkLCBidWZmZXJfbGVuZ3RoPSVkXG4iLCBmY191c2ItPnRtcF9idWZmZXJfbGVuZ3RoLCBidWZmZXJfbGVuZ3RoKTsKKwlkZWJfdHMoInRtcF9idWZmZXJfbGVuZ3RoPSVkLCBidWZmZXJfbGVuZ3RoPSVkXG4iLAorCQlmY191c2ItPnRtcF9idWZmZXJfbGVuZ3RoLCBidWZmZXJfbGVuZ3RoKTsKIAogCWlmIChmY191c2ItPnRtcF9idWZmZXJfbGVuZ3RoID4gMCkgewotCQltZW1jcHkoZmNfdXNiLT50bXBfYnVmZmVyK2ZjX3VzYi0+dG1wX2J1ZmZlcl9sZW5ndGgsIGJ1ZmZlciwgYnVmZmVyX2xlbmd0aCk7CisJCW1lbWNweShmY191c2ItPnRtcF9idWZmZXIrZmNfdXNiLT50bXBfYnVmZmVyX2xlbmd0aCwgYnVmZmVyLAorCQkJCWJ1ZmZlcl9sZW5ndGgpOwogCQlmY191c2ItPnRtcF9idWZmZXJfbGVuZ3RoICs9IGJ1ZmZlcl9sZW5ndGg7CiAJCWIgPSBmY191c2ItPnRtcF9idWZmZXI7CiAJCWwgPSBmY191c2ItPnRtcF9idWZmZXJfbGVuZ3RoOwpAQCAtMzA0LDIzICszMTcsMjYgQEAKIAl9CiAKIAl3aGlsZSAobCA+PSAxOTApIHsKLQkJaWYgKCpiID09IDB4ZmYpCisJCWlmICgqYiA9PSAweGZmKSB7CiAJCQlzd2l0Y2ggKCooYisxKSAmIDB4MDMpIHsKLQkJCQljYXNlIDB4MDE6IC8qIG1lZGlhIHBhY2tldCAqLwotCQkJCQlpZiAoICooYisyKSA9PSAweDQ3ICkKLQkJCQkJCWZsZXhjb3BfcGFzc19kbXhfcGFja2V0cyhmY191c2ItPmZjX2RldiwgYisyLCAxKTsKLQkJCQkJZWxzZQotCQkJCQkJZGViX3RzKCJub3QgdHMgcGFja2V0ICUwMnggJTAyeCAlMDJ4ICUwMnggXG4iLCAqKGIrMiksICooYiszKSwgKihiKzQpLCAqKGIrNSkgKTsKLQotCQkJCQliICs9IDE5MDsKLQkJCQkJbCAtPSAxOTA7CisJCQljYXNlIDB4MDE6IC8qIG1lZGlhIHBhY2tldCAqLworCQkJCWlmICgqKGIrMikgPT0gMHg0NykKKwkJCQkJZmxleGNvcF9wYXNzX2RteF9wYWNrZXRzKAorCQkJCQkJCWZjX3VzYi0+ZmNfZGV2LCBiKzIsIDEpOworCQkJCWVsc2UKKwkJCQkJZGViX3RzKAorCQkJCQkibm90IHRzIHBhY2tldCAlMDJ4ICUwMnggJTAyeCAlMDJ4IFxuIiwKKwkJCQkJCSooYisyKSwgKihiKzMpLAorCQkJCQkJKihiKzQpLCAqKGIrNSkpOworCQkJCWIgKz0gMTkwOworCQkJCWwgLT0gMTkwOwogCQkJCWJyZWFrOwotCQkJCWRlZmF1bHQ6Ci0JCQkJCWRlYl90cygid3JvbmcgcGFja2V0IHR5cGVcbiIpOwotCQkJCQlsID0gMDsKKwkJCWRlZmF1bHQ6CisJCQkJZGViX3RzKCJ3cm9uZyBwYWNrZXQgdHlwZVxuIik7CisJCQkJbCA9IDA7CiAJCQkJYnJlYWs7CiAJCQl9Ci0JCWVsc2UgeworCQl9IGVsc2UgewogCQkJZGViX3RzKCJ3cm9uZyBoZWFkZXJcbiIpOwogCQkJbCA9IDA7CiAJCX0KQEAgLTMzNywyMyArMzUzLDI2IEBACiAJaW50IGk7CiAKIAlpZiAodXJiLT5hY3R1YWxfbGVuZ3RoID4gMCkKLQkJZGViX3RzKCJ1cmIgY29tcGxldGVkLCBidWZzaXplOiAlZCBhY3RsZW47ICVkXG4iLHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwgdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJZGViX3RzKCJ1cmIgY29tcGxldGVkLCBidWZzaXplOiAlZCBhY3RsZW47ICVkXG4iLAorCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLCB1cmItPmFjdHVhbF9sZW5ndGgpOwogCiAJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgewogCQlpZiAodXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMgPCAwKSB7Ci0JCQllcnIoImlzbyBmcmFtZSBkZXNjcmlwdG9yICVkIGhhcyBhbiBlcnJvcjogJWRcbiIsaSx1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyk7CisJCQllcnIoImlzbyBmcmFtZSBkZXNjcmlwdG9yICVkIGhhcyBhbiBlcnJvcjogJWRcbiIsIGksCisJCQkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5zdGF0dXMpOwogCQl9IGVsc2UKIAkJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggPiAwKSB7Ci0JCQkJZGViX3RzKCJwYXNzZWQgJWQgYnl0ZXMgdG8gdGhlIGRlbXV4XG4iLHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCk7CisJCQkJZGViX3RzKCJwYXNzZWQgJWQgYnl0ZXMgdG8gdGhlIGRlbXV4XG4iLAorCQkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGgpOwogCiAJCQkJZmxleGNvcF91c2JfcHJvY2Vzc19mcmFtZShmY191c2IsCi0JCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyICsgdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5vZmZzZXQsCisJCQkJCXVyYi0+dHJhbnNmZXJfYnVmZmVyICsKKwkJCQkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0ub2Zmc2V0LAogCQkJCQl1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGgpOwotCQl9CisJCQl9CiAJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzID0gMDsKIAkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoID0gMDsKIAl9Ci0KIAl1c2Jfc3VibWl0X3VyYih1cmIsR0ZQX0FUT01JQyk7CiB9CiAKQEAgLTM3NCwzNSArMzkzLDQ3IEBACiAJCX0KIAogCWlmIChmY191c2ItPmlzb19idWZmZXIgIT0gTlVMTCkKLQkJcGNpX2ZyZWVfY29uc2lzdGVudChOVUxMLGZjX3VzYi0+YnVmZmVyX3NpemUsIGZjX3VzYi0+aXNvX2J1ZmZlciwgZmNfdXNiLT5kbWFfYWRkcik7CisJCXBjaV9mcmVlX2NvbnNpc3RlbnQoTlVMTCwKKwkJCWZjX3VzYi0+YnVmZmVyX3NpemUsIGZjX3VzYi0+aXNvX2J1ZmZlciwKKwkJCWZjX3VzYi0+ZG1hX2FkZHIpOwogfQogCiBzdGF0aWMgaW50IGZsZXhjb3BfdXNiX3RyYW5zZmVyX2luaXQoc3RydWN0IGZsZXhjb3BfdXNiICpmY191c2IpCiB7Ci0JdTE2IGZyYW1lX3NpemUgPSBsZTE2X3RvX2NwdShmY191c2ItPnVpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZW5kcG9pbnRbMF0uZGVzYy53TWF4UGFja2V0U2l6ZSk7Ci0JaW50IGJ1ZnNpemUgPSBCMkMyX1VTQl9OVU1fSVNPX1VSQiAqIEIyQzJfVVNCX0ZSQU1FU19QRVJfSVNPICogZnJhbWVfc2l6ZSxpLGoscmV0OworCXUxNiBmcmFtZV9zaXplID0gbGUxNl90b19jcHUoCisJCWZjX3VzYi0+dWludGYtPmN1cl9hbHRzZXR0aW5nLT5lbmRwb2ludFswXS5kZXNjLndNYXhQYWNrZXRTaXplKTsKKwlpbnQgYnVmc2l6ZSA9IEIyQzJfVVNCX05VTV9JU09fVVJCICogQjJDMl9VU0JfRlJBTUVTX1BFUl9JU08gKgorCQlmcmFtZV9zaXplLCBpLCBqLCByZXQ7CiAJaW50IGJ1ZmZlcl9vZmZzZXQgPSAwOwogCi0JZGViX3RzKCJjcmVhdGluZyAlZCBpc28tdXJicyB3aXRoICVkIGZyYW1lcyBlYWNoIG9mICVkIGJ5dGVzIHNpemUgPSAlZC5cbiIsCi0JCQlCMkMyX1VTQl9OVU1fSVNPX1VSQiwgQjJDMl9VU0JfRlJBTUVTX1BFUl9JU08sIGZyYW1lX3NpemUsYnVmc2l6ZSk7CisJZGViX3RzKCJjcmVhdGluZyAlZCBpc28tdXJicyB3aXRoICVkIGZyYW1lcyAiCisJCQkiZWFjaCBvZiAlZCBieXRlcyBzaXplID0gJWQuXG4iLCBCMkMyX1VTQl9OVU1fSVNPX1VSQiwKKwkJCUIyQzJfVVNCX0ZSQU1FU19QRVJfSVNPLCBmcmFtZV9zaXplLCBidWZzaXplKTsKIAotCWZjX3VzYi0+aXNvX2J1ZmZlciA9IHBjaV9hbGxvY19jb25zaXN0ZW50KE5VTEwsYnVmc2l6ZSwmZmNfdXNiLT5kbWFfYWRkcik7CisJZmNfdXNiLT5pc29fYnVmZmVyID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQoTlVMTCwKKwkJCWJ1ZnNpemUsICZmY191c2ItPmRtYV9hZGRyKTsKIAlpZiAoZmNfdXNiLT5pc29fYnVmZmVyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOworCiAJbWVtc2V0KGZjX3VzYi0+aXNvX2J1ZmZlciwgMCwgYnVmc2l6ZSk7CiAJZmNfdXNiLT5idWZmZXJfc2l6ZSA9IGJ1ZnNpemU7CiAKIAkvKiBjcmVhdGluZyBpc28gdXJicyAqLwotCWZvciAoaSA9IDA7IGkgPCBCMkMyX1VTQl9OVU1fSVNPX1VSQjsgaSsrKQotCQlpZiAoIShmY191c2ItPmlzb191cmJbaV0gPSB1c2JfYWxsb2NfdXJiKEIyQzJfVVNCX0ZSQU1FU19QRVJfSVNPLEdGUF9BVE9NSUMpKSkgeworCWZvciAoaSA9IDA7IGkgPCBCMkMyX1VTQl9OVU1fSVNPX1VSQjsgaSsrKSB7CisJCWZjX3VzYi0+aXNvX3VyYltpXSA9IHVzYl9hbGxvY191cmIoQjJDMl9VU0JfRlJBTUVTX1BFUl9JU08sCisJCQlHRlBfQVRPTUlDKTsKKwkJaWYgKGZjX3VzYi0+aXNvX3VyYltpXSA9PSBOVUxMKSB7CiAJCQlyZXQgPSAtRU5PTUVNOwogCQkJZ290byB1cmJfZXJyb3I7CiAJCX0KKwl9CisKIAkvKiBpbml0aWFsaXNpbmcgYW5kIHN1Ym1pdHRpbmcgaXNvIHVyYnMgKi8KIAlmb3IgKGkgPSAwOyBpIDwgQjJDMl9VU0JfTlVNX0lTT19VUkI7IGkrKykgewogCQlpbnQgZnJhbWVfb2Zmc2V0ID0gMDsKIAkJc3RydWN0IHVyYiAqdXJiID0gZmNfdXNiLT5pc29fdXJiW2ldOwotCQlkZWJfdHMoImluaXRpYWxpemluZyBhbmQgc3VibWl0dGluZyB1cmIgbm8uICVkIChidWZfb2Zmc2V0OiAlZCkuXG4iLGksYnVmZmVyX29mZnNldCk7CisJCWRlYl90cygiaW5pdGlhbGl6aW5nIGFuZCBzdWJtaXR0aW5nIHVyYiBuby4gJWQgIgorCQkJIihidWZfb2Zmc2V0OiAlZCkuXG4iLCBpLCBidWZmZXJfb2Zmc2V0KTsKIAogCQl1cmItPmRldiA9IGZjX3VzYi0+dWRldjsKIAkJdXJiLT5jb250ZXh0ID0gZmNfdXNiOwpAQCAtNDE2LDI2ICs0NDcsMjYgQEAKIAogCQlidWZmZXJfb2Zmc2V0ICs9IGZyYW1lX3NpemUgKiBCMkMyX1VTQl9GUkFNRVNfUEVSX0lTTzsKIAkJZm9yIChqID0gMDsgaiA8IEIyQzJfVVNCX0ZSQU1FU19QRVJfSVNPOyBqKyspIHsKLQkJCWRlYl90cygidXJiIG5vOiAlZCwgZnJhbWU6ICVkLCBmcmFtZV9vZmZzZXQ6ICVkXG4iLGksaixmcmFtZV9vZmZzZXQpOworCQkJZGViX3RzKCJ1cmIgbm86ICVkLCBmcmFtZTogJWQsIGZyYW1lX29mZnNldDogJWRcbiIsCisJCQkJCWksIGosIGZyYW1lX29mZnNldCk7CiAJCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLm9mZnNldCA9IGZyYW1lX29mZnNldDsKIAkJCXVyYi0+aXNvX2ZyYW1lX2Rlc2Nbal0ubGVuZ3RoID0gZnJhbWVfc2l6ZTsKIAkJCWZyYW1lX29mZnNldCArPSBmcmFtZV9zaXplOwogCQl9CiAKIAkJaWYgKChyZXQgPSB1c2Jfc3VibWl0X3VyYihmY191c2ItPmlzb191cmJbaV0sR0ZQX0FUT01JQykpKSB7Ci0JCQllcnIoInN1Ym1pdHRpbmcgdXJiICVkIGZhaWxlZCB3aXRoICVkLiIsaSxyZXQpOworCQkJZXJyKCJzdWJtaXR0aW5nIHVyYiAlZCBmYWlsZWQgd2l0aCAlZC4iLCBpLCByZXQpOwogCQkJZ290byB1cmJfZXJyb3I7CiAJCX0KIAkJZGViX3RzKCJzdWJtaXR0ZWQgdXJiIG5vLiAlZC5cbiIsaSk7CiAJfQogCi0vKiBTUkFNICovCi0KLQlmbGV4Y29wX3NyYW1fc2V0X2Rlc3QoZmNfdXNiLT5mY19kZXYsRkNfU1JBTV9ERVNUX01FRElBIHwgRkNfU1JBTV9ERVNUX05FVCB8Ci0JCQlGQ19TUkFNX0RFU1RfQ0FPIHwgRkNfU1JBTV9ERVNUX0NBSSwgRkNfU1JBTV9ERVNUX1RBUkdFVF9XQU5fVVNCKTsKLQlmbGV4Y29wX3dhbl9zZXRfc3BlZWQoZmNfdXNiLT5mY19kZXYsRkNfV0FOX1NQRUVEXzhNQklUUyk7Ci0JZmxleGNvcF9zcmFtX2N0cmwoZmNfdXNiLT5mY19kZXYsMSwxLDEpOwotCisJLyogU1JBTSAqLworCWZsZXhjb3Bfc3JhbV9zZXRfZGVzdChmY191c2ItPmZjX2RldiwgRkNfU1JBTV9ERVNUX01FRElBIHwKKwkJCUZDX1NSQU1fREVTVF9ORVQgfCBGQ19TUkFNX0RFU1RfQ0FPIHwgRkNfU1JBTV9ERVNUX0NBSSwKKwkJCUZDX1NSQU1fREVTVF9UQVJHRVRfV0FOX1VTQik7CisJZmxleGNvcF93YW5fc2V0X3NwZWVkKGZjX3VzYi0+ZmNfZGV2LCBGQ19XQU5fU1BFRURfOE1CSVRTKTsKKwlmbGV4Y29wX3NyYW1fY3RybChmY191c2ItPmZjX2RldiwgMSwgMSwgMSk7CiAJcmV0dXJuIDA7CiAKIHVyYl9lcnJvcjoKQEAgLTQ0OCwyMCArNDc5LDIwIEBACiAJLyogdXNlIHRoZSBhbHRlcm5hdGUgc2V0dGluZyB3aXRoIHRoZSBsYXJnZXMgYnVmZmVyICovCiAJdXNiX3NldF9pbnRlcmZhY2UoZmNfdXNiLT51ZGV2LDAsMSk7CiAJc3dpdGNoIChmY191c2ItPnVkZXYtPnNwZWVkKSB7Ci0JCWNhc2UgVVNCX1NQRUVEX0xPVzoKLQkJCWVycigiY2Fubm90IGhhbmRsZSBVU0Igc3BlZWQgYmVjYXVzZSBpdCBpcyB0byBzTE9XLiIpOwotCQkJcmV0dXJuIC1FTk9ERVY7Ci0JCQlicmVhazsKLQkJY2FzZSBVU0JfU1BFRURfRlVMTDoKLQkJCWluZm8oInJ1bm5pbmcgYXQgRlVMTCBzcGVlZC4iKTsKLQkJCWJyZWFrOwotCQljYXNlIFVTQl9TUEVFRF9ISUdIOgotCQkJaW5mbygicnVubmluZyBhdCBISUdIIHNwZWVkLiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVVNCX1NQRUVEX1VOS05PV046IC8qIGZhbGwgdGhyb3VnaCAqLwotCQlkZWZhdWx0OgotCQkJZXJyKCJjYW5ub3QgaGFuZGxlIFVTQiBzcGVlZCBiZWNhdXNlIGl0IGlzIHVua293bi4iKTsKLQkJCXJldHVybiAtRU5PREVWOworCWNhc2UgVVNCX1NQRUVEX0xPVzoKKwkJZXJyKCJjYW5ub3QgaGFuZGxlIFVTQiBzcGVlZCBiZWNhdXNlIGl0IGlzIHRvbyBzbG93LiIpOworCQlyZXR1cm4gLUVOT0RFVjsKKwkJYnJlYWs7CisJY2FzZSBVU0JfU1BFRURfRlVMTDoKKwkJaW5mbygicnVubmluZyBhdCBGVUxMIHNwZWVkLiIpOworCQlicmVhazsKKwljYXNlIFVTQl9TUEVFRF9ISUdIOgorCQlpbmZvKCJydW5uaW5nIGF0IEhJR0ggc3BlZWQuIik7CisJCWJyZWFrOworCWNhc2UgVVNCX1NQRUVEX1VOS05PV046IC8qIGZhbGwgdGhyb3VnaCAqLworCWRlZmF1bHQ6CisJCWVycigiY2Fubm90IGhhbmRsZSBVU0Igc3BlZWQgYmVjYXVzZSBpdCBpcyB1bmtub3duLiIpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJdXNiX3NldF9pbnRmZGF0YShmY191c2ItPnVpbnRmLCBmY191c2IpOwogCXJldHVybiAwOwpAQCAtNDg1LDcgKzUxNiw3IEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotLyogZ2VuZXJhbCBmbGV4Y29wIGluaXQgKi8KKwkvKiBnZW5lcmFsIGZsZXhjb3AgaW5pdCAqLwogCWZjX3VzYiA9IGZjLT5idXNfc3BlY2lmaWM7CiAJZmNfdXNiLT5mY19kZXYgPSBmYzsKIApAQCAtNTAyLDIxICs1MzMsMjEgQEAKIAlmYy0+ZGV2ID0gJnVkZXYtPmRldjsKIAlmYy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAotLyogYnVzIHNwZWNpZmljIHBhcnQgKi8KKwkvKiBidXMgc3BlY2lmaWMgcGFydCAqLwogCWZjX3VzYi0+dWRldiA9IHVkZXY7CiAJZmNfdXNiLT51aW50ZiA9IGludGY7CiAJaWYgKChyZXQgPSBmbGV4Y29wX3VzYl9pbml0KGZjX3VzYikpICE9IDApCiAJCWdvdG8gZXJyX2tmcmVlOwogCi0vKiBpbml0IGZsZXhjb3AgKi8KKwkvKiBpbml0IGZsZXhjb3AgKi8KIAlpZiAoKHJldCA9IGZsZXhjb3BfZGV2aWNlX2luaXRpYWxpemUoZmMpKSAhPSAwKQogCQlnb3RvIGVycl91c2JfZXhpdDsKIAotLyogeGZlciBpbml0ICovCisJLyogeGZlciBpbml0ICovCiAJaWYgKChyZXQgPSBmbGV4Y29wX3VzYl90cmFuc2Zlcl9pbml0KGZjX3VzYikpICE9IDApCiAJCWdvdG8gZXJyX2ZjX2V4aXQ7CiAKLQlpbmZvKCIlcyBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIGNvbm5lY3RlZC4iLERSSVZFUl9OQU1FKTsKKwlpbmZvKCIlcyBzdWNjZXNzZnVsbHkgaW5pdGlhbGl6ZWQgYW5kIGNvbm5lY3RlZC4iLCBEUklWRVJfTkFNRSk7CiAJcmV0dXJuIDA7CiAKIGVycl9mY19leGl0OgpAQCAtNTM1LDEyICs1NjYsMTIgQEAKIAlmbGV4Y29wX2RldmljZV9leGl0KGZjX3VzYi0+ZmNfZGV2KTsKIAlmbGV4Y29wX3VzYl9leGl0KGZjX3VzYik7CiAJZmxleGNvcF9kZXZpY2Vfa2ZyZWUoZmNfdXNiLT5mY19kZXYpOwotCWluZm8oIiVzIHN1Y2Nlc3NmdWxseSBkZWluaXRpYWxpemVkIGFuZCBkaXNjb25uZWN0ZWQuIixEUklWRVJfTkFNRSk7CisJaW5mbygiJXMgc3VjY2Vzc2Z1bGx5IGRlaW5pdGlhbGl6ZWQgYW5kIGRpc2Nvbm5lY3RlZC4iLCBEUklWRVJfTkFNRSk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RldmljZV9pZCBmbGV4Y29wX3VzYl90YWJsZSBbXSA9IHsKLQkgICAgeyBVU0JfREVWSUNFKDB4MGFmNywgMHgwMTAxKSB9LAotCSAgICB7IH0KKwl7IFVTQl9ERVZJQ0UoMHgwYWY3LCAweDAxMDEpIH0sCisJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSAodXNiLCBmbGV4Y29wX3VzYl90YWJsZSk7CiAKQEAgLTU1NywxMCArNTg4LDkgQEAKIHsKIAlpbnQgcmVzdWx0OwogCWlmICgocmVzdWx0ID0gdXNiX3JlZ2lzdGVyKCZmbGV4Y29wX3VzYl9kcml2ZXIpKSkgewotCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuICglZCkiLHJlc3VsdCk7CisJCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZC4gKCVkKSIsIHJlc3VsdCk7CiAJCXJldHVybiByZXN1bHQ7CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC11c2IuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC11c2IuaAppbmRleCA2MzBlNjQ3Li45MjUyOWE5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AtdXNiLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLXVzYi5oCkBAIC0xLDE1ICsxLDIwIEBACisvKgorICogTGludXggZHJpdmVyIGZvciBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKKyAqIGZsZXhjb3AtdXNiLmggLSBoZWFkZXIgZmlsZSBmb3IgdGhlIFVTQiBwYXJ0CisgKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24KKyAqLwogI2lmbmRlZiBfX0ZMRVhDT1BfVVNCX0hfSU5DTFVERURfXwogI2RlZmluZSBfX0ZMRVhDT1BfVVNCX0hfSU5DTFVERURfXwogCiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAKIC8qIHRyYW5zZmVyIHBhcmFtZXRlcnMgKi8KLSNkZWZpbmUgQjJDMl9VU0JfRlJBTUVTX1BFUl9JU08JCTQKLSNkZWZpbmUgQjJDMl9VU0JfTlVNX0lTT19VUkIJCTQKKyNkZWZpbmUgQjJDMl9VU0JfRlJBTUVTX1BFUl9JU08gNAorI2RlZmluZSBCMkMyX1VTQl9OVU1fSVNPX1VSQiA0CiAKLSNkZWZpbmUgQjJDMl9VU0JfQ1RSTF9QSVBFX0lOCQl1c2JfcmN2Y3RybHBpcGUoZmNfdXNiLT51ZGV2LDApCi0jZGVmaW5lIEIyQzJfVVNCX0NUUkxfUElQRV9PVVQJCXVzYl9zbmRjdHJscGlwZShmY191c2ItPnVkZXYsMCkKLSNkZWZpbmUgQjJDMl9VU0JfREFUQV9QSVBFCQkJdXNiX3Jjdmlzb2NwaXBlKGZjX3VzYi0+dWRldiwweDgxKQorI2RlZmluZSBCMkMyX1VTQl9DVFJMX1BJUEVfSU4gdXNiX3JjdmN0cmxwaXBlKGZjX3VzYi0+dWRldiwgMCkKKyNkZWZpbmUgQjJDMl9VU0JfQ1RSTF9QSVBFX09VVCB1c2Jfc25kY3RybHBpcGUoZmNfdXNiLT51ZGV2LCAwKQorI2RlZmluZSBCMkMyX1VTQl9EQVRBX1BJUEUgdXNiX3Jjdmlzb2NwaXBlKGZjX3VzYi0+dWRldiwgMHg4MSkKIAogc3RydWN0IGZsZXhjb3BfdXNiIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldjsKQEAgLTE4LDggKzIzLDggQEAKIAl1OCAqaXNvX2J1ZmZlcjsKIAlpbnQgYnVmZmVyX3NpemU7CiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsKLQlzdHJ1Y3QgdXJiICppc29fdXJiW0IyQzJfVVNCX05VTV9JU09fVVJCXTsKIAorCXN0cnVjdCB1cmIgKmlzb191cmJbQjJDMl9VU0JfTlVNX0lTT19VUkJdOwogCXN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmNfZGV2OwogCiAJdTggdG1wX2J1ZmZlclsxMDIzKzE5MF07CkBAIC0zMCwxNCArMzUsNiBAQAogLyogcmVxdWVzdCB0eXBlcyBUT0RPIFdoYXQgaXMgaXRzIHVzZT8qLwogdHlwZWRlZiBlbnVtIHsKIAotLyogc29tZXRoaW5nIGlzIHdyb25nIHdpdGggdGhpcyBwYXJ0Ci0JUlRZUEVfUkVBRF9EVyAgICAgICAgID0gKDEgPDwgNiksCi0JUlRZUEVfV1JJVEVfRFdfMSAgICAgID0gKDMgPDwgNiksCi0JUlRZUEVfUkVBRF9WOF9NRU1PUlkgID0gKDYgPDwgNiksCi0JUlRZUEVfV1JJVEVfVjhfTUVNT1JZID0gKDcgPDwgNiksCi0JUlRZUEVfV1JJVEVfVjhfRkxBU0ggID0gKDggPDwgNiksCi0JUlRZUEVfR0VORVJJQyAgICAgICAgID0gKDkgPDwgNiksCi0qLwogfSBmbGV4Y29wX3VzYl9yZXF1ZXN0X3R5cGVfdDsKICNlbmRpZgogCkBAIC00Nyw3ICs0NCw2IEBACiAJQjJDMl9VU0JfUkVBRF9WOF9NRU0gID0gMHgwNSwKIAlCMkMyX1VTQl9SRUFEX1JFRyAgICAgPSAweDA4LAogCUIyQzJfVVNCX1dSSVRFX1JFRyAgICA9IDB4MEEsCi0vKglCMkMyX1VTQl9XUklURVJFR0xPICAgPSAweDBBLCAqLwogCUIyQzJfVVNCX1dSSVRFUkVHSEkgICA9IDB4MEIsCiAJQjJDMl9VU0JfRkxBU0hfQkxPQ0sgID0gMHgxMCwKIAlCMkMyX1VTQl9JMkNfUkVRVUVTVCAgPSAweDExLApAQCAtNjIsMTUgKzU4LDEzIEBACiAJVVNCX0ZVTkNfSTJDX1JFUEVBVFdSSVRFID0gMHgwNCwKIAlVU0JfRlVOQ19HRVRfREVTQ1JJUFRPUiAgPSAweDA1LAogCVVTQl9GVU5DX0kyQ19SRVBFQVRSRUFEICA9IDB4MDYsCi0vKiBES1QgMDIwMjA4IC0gYWRkIHRoaXMgdG8gc3VwcG9ydCBzcGVjaWFsIGNhc2Ugb2YgRGlTRXFDICovCisJLyogREtUIDAyMDIwOCAtIGFkZCB0aGlzIHRvIHN1cHBvcnQgc3BlY2lhbCBjYXNlIG9mIERpU0VxQyAqLwogCVVTQl9GVU5DX0kyQ19DSEVDS1dSSVRFICA9IDB4MDcsCiAJVVNCX0ZVTkNfSTJDX0NIRUNLUkVTVUxUID0gMHgwOCwKIH0gZmxleGNvcF91c2JfaTJjX2Z1bmN0aW9uX3Q7CiAKLS8qCi0gKiBmdW5jdGlvbiBkZWZpbml0aW9uIGZvciBVVElMSVRZIHJlcXVlc3QgMHgxMgotICogREtUIDAyMDMwNCAtIG5ldyB1dGlsaXR5IGZ1bmN0aW9uCi0gKi8KKy8qIGZ1bmN0aW9uIGRlZmluaXRpb24gZm9yIFVUSUxJVFkgcmVxdWVzdCAweDEyCisgKiBES1QgMDIwMzA0IC0gbmV3IHV0aWxpdHkgZnVuY3Rpb24gKi8KIHR5cGVkZWYgZW51bSB7CiAJVVRJTElUWV9TRVRfRklMVEVSICAgICAgICAgID0gMHgwMSwKIAlVVElMSVRZX0RBVEFfRU5BQkxFICAgICAgICAgPSAweDAyLApAQCAtODQsNyArNzgsNyBAQAogCVVUSUxJVFlfREFUQV9SRVNFVCAgICAgICAgICA9IDB4MEEsCiAJVVRJTElUWV9HRVRfREFUQV9TVEFUVVMgICAgID0gMHgxMCwKIAlVVElMSVRZX0dFVF9WOF9SRUcgICAgICAgICAgPSAweDExLAotLyogREtUIDAyMDMyNiAtIGFkZCBmdW5jdGlvbiBmb3IgdjEuMTQgKi8KKwkvKiBES1QgMDIwMzI2IC0gYWRkIGZ1bmN0aW9uIGZvciB2MS4xNCAqLwogCVVUSUxJVFlfU1JBTV9XUklURSAgICAgICAgICA9IDB4MTIsCiAJVVRJTElUWV9TUkFNX1JFQUQgICAgICAgICAgID0gMHgxMywKIAlVVElMSVRZX1NSQU1fVEVTVEZJTEwgICAgICAgPSAweDE0LApAQCAtOTIsMTMgKzg2LDEzIEBACiAJVVRJTElUWV9TUkFNX1RFU1RWRVJJRlkgICAgID0gMHgxNiwKIH0gZmxleGNvcF91c2JfdXRpbGl0eV9mdW5jdGlvbl90OwogCi0jZGVmaW5lIEIyQzJfV0FJVF9GT1JfT1BFUkFUSU9OX1JXICAxKkhaICAgICAgIC8qIDEgcyAqLwotI2RlZmluZSBCMkMyX1dBSVRfRk9SX09QRVJBVElPTl9SRFcgMypIWiAgICAgICAvKiAzIHMgKi8KLSNkZWZpbmUgQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fV0RXIDEqSFogICAgICAgLyogMSBzICovCisjZGVmaW5lIEIyQzJfV0FJVF9GT1JfT1BFUkFUSU9OX1JXICgxKkhaKQorI2RlZmluZSBCMkMyX1dBSVRfRk9SX09QRVJBVElPTl9SRFcgKDMqSFopCisjZGVmaW5lIEIyQzJfV0FJVF9GT1JfT1BFUkFUSU9OX1dEVyAoMSpIWikKIAotI2RlZmluZSBCMkMyX1dBSVRfRk9SX09QRVJBVElPTl9WOFJFQUQgICAzKkhaICAvKiAzIHMgKi8KLSNkZWZpbmUgQjJDMl9XQUlUX0ZPUl9PUEVSQVRJT05fVjhXUklURSAgMypIWiAgLyogMyBzICovCi0jZGVmaW5lIEIyQzJfV0FJVF9GT1JfT1BFUkFUSU9OX1Y4RkxBU0ggIDMqSFogIC8qIDMgcyAqLworI2RlZmluZSBCMkMyX1dBSVRfRk9SX09QRVJBVElPTl9WOFJFQUQgKDMqSFopCisjZGVmaW5lIEIyQzJfV0FJVF9GT1JfT1BFUkFUSU9OX1Y4V1JJVEUgKDMqSFopCisjZGVmaW5lIEIyQzJfV0FJVF9GT1JfT1BFUkFUSU9OX1Y4RkxBU0ggKDMqSFopCiAKIHR5cGVkZWYgZW51bSB7CiAJVjhfTUVNT1JZX1BBR0VfRFZCX0NJID0gMHgyMCwKQEAgLTEwNywxMyArMTAxLDExIEBACiAJVjhfTUVNT1JZX1BBR0VfRkxBU0ggID0gMHg4MAogfSBmbGV4Y29wX3VzYl9tZW1fcGFnZV90OwogCi0jZGVmaW5lIFY4X01FTU9SWV9FWFRFTkRFRCAgICAgICgxIDw8IDE1KQotCi0jZGVmaW5lIFVTQl9NRU1fUkVBRF9NQVggICAgICAgICAgICAgICAgMzIKLSNkZWZpbmUgVVNCX01FTV9XUklURV9NQVggICAgICAgICAgICAgICAxCi0jZGVmaW5lIFVTQl9GTEFTSF9NQVggICAgICAgICAgICAgICAgICAgOAotCi0jZGVmaW5lIFY4X01FTU9SWV9QQUdFX1NJWkUgICAgIDB4ODAwMCAgICAgIC8vIDMySwotI2RlZmluZSBWOF9NRU1PUllfUEFHRV9NQVNLICAgICAweDdGRkYKKyNkZWZpbmUgVjhfTUVNT1JZX0VYVEVOREVEICgxIDw8IDE1KQorI2RlZmluZSBVU0JfTUVNX1JFQURfTUFYICAgMzIKKyNkZWZpbmUgVVNCX01FTV9XUklURV9NQVggICAxCisjZGVmaW5lIFVTQl9GTEFTSF9NQVggICAgICAgOAorI2RlZmluZSBWOF9NRU1PUllfUEFHRV9TSVpFIDB4ODAwMCAvKiAzMksgKi8KKyNkZWZpbmUgVjhfTUVNT1JZX1BBR0VfTUFTSyAweDdGRkYKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3AuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC5jCmluZGV4IDkxMDY4OTUuLjJkZjFiMDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC5jCkBAIC0xLDIyICsxLDIwIEBACiAvKgotICogZmxleGNvcC5jIC0gZHJpdmVyIGZvciBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDQtNSBQYXRyaWNrIEJvZXR0Y2hlciA8cGF0cmljay5ib2V0dGNoZXJAZGVzeS5kZT4KLSAqCi0gKiBiYXNlZCBvbiB0aGUgc2t5c3RhcjItZHJpdmVyCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDMgVmFkaW0gQ2F0YW5hLCBza3lzdGFyQG1vbGRvdmEuY2MKKyAqIExpbnV4IGRyaXZlciBmb3IgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCisgKiBmbGV4Y29wLmMgLSBtYWluIG1vZHVsZSBwYXJ0CisgKiBDb3B5cmlnaHQgKEMpIDIwMDQtOSBQYXRyaWNrIEJvZXR0Y2hlciA8cGF0cmljay5ib2V0dGNoZXJAZGVzeS5kZT4KKyAqIGJhc2VkIG9uIHNreXN0YXIyLWRyaXZlciBDb3B5cmlnaHQgKEMpIDIwMDMgVmFkaW0gQ2F0YW5hLCBza3lzdGFyQG1vbGRvdmEuY2MKICAqCiAgKiBBY2tub3dsZWRnZW1lbnRzOgotICogICAgIEpvaG4gSnVycml1cyBmcm9tIEJCVEksIEluYy4gZm9yIGV4dGVuc2l2ZSBzdXBwb3J0IHdpdGgKLSAqICAgICAgICAgY29kZSBleGFtcGxlcyBhbmQgZGF0YSBib29rcwotICoKLSAqICAgICBCamFybmUgU3RlaW5zYm8sIGJqYXJuZSBhdCBzdGVpbnNiby5jb20gKHNvbWUgaWRlYXMgZm9yIHJld3JpdGluZykKKyAqICAgSm9obiBKdXJyaXVzIGZyb20gQkJUSSwgSW5jLiBmb3IgZXh0ZW5zaXZlIHN1cHBvcnQKKyAqICAgICAgICAgICAgICAgICAgICB3aXRoIGNvZGUgZXhhbXBsZXMgYW5kIGRhdGEgYm9va3MKKyAqICAgQmphcm5lIFN0ZWluc2JvLCBiamFybmUgYXQgc3RlaW5zYm8uY29tIChzb21lIGlkZWFzIGZvciByZXdyaXRpbmcpCiAgKgogICogQ29udHJpYnV0aW9ucyB0byB0aGUgc2t5c3RhcjItZHJpdmVyIGhhdmUgYmVlbiBkb25lIGJ5Ci0gKiAgICAgVmluY2Vuem8gRGkgTWFzc2EsIGhhd2suaXQgYXQgdGlzY2FsaW5ldC5pdCAoc2V2ZXJhbCBEaVNFcUMgZml4ZXMpCi0gKiAgICAgUm9iZXJ0byBSYWd1c2EsIHIucmFndXNhIGF0IGxpYmVyby5pdCAocG9saXNoaW5nLCByZXN0eWxpbmcgdGhlIGNvZGUpCi0gKiAgICAgTmlrbGFzIFBlaW5lY2tlLCBwZWluZWNrZSBhdCBnZHYudW5pLWhhbm5vdmVyLmRlIChoYXJkd2FyZSBwaWQvbWFjIGZpbHRlcmluZykKLSAqCisgKiAgIFZpbmNlbnpvIERpIE1hc3NhLCBoYXdrLml0IGF0IHRpc2NhbGluZXQuaXQgKHNldmVyYWwgRGlTRXFDIGZpeGVzKQorICogICBSb2JlcnRvIFJhZ3VzYSwgci5yYWd1c2EgYXQgbGliZXJvLml0IChwb2xpc2hpbmcsIHJlc3R5bGluZyB0aGUgY29kZSkKKyAqICAgVXdlIEJ1Z2xhLCB1d2UuYnVnbGEgYXQgZ214LmRlIChkb2luZyB0ZXN0cywgcmVzdHlsaW5nIGNvZGUsIHdyaXRpbmcgZG9jdSkKKyAqICAgTmlrbGFzIFBlaW5lY2tlLCBwZWluZWNrZSBhdCBnZHYudW5pLWhhbm5vdmVyLmRlIChoYXJkd2FyZSBwaWQvbWFjCisgKiAgICAgICAgICAgICAgIGZpbHRlcmluZykKICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTQ2LDcgKzQ0LDEwIEBACiAKIGludCBiMmMyX2ZsZXhjb3BfZGVidWc7CiBtb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGIyYzJfZmxleGNvcF9kZWJ1ZywgIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAic2V0IGRlYnVnIGxldmVsICgxPWluZm8sMj10dW5lciw0PWkyYyw4PXRzLDE2PXNyYW0sMzI9cmVnICh8LWFibGUpKS4iIERFQlNUQVRVUyk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLAorCQkic2V0IGRlYnVnIGxldmVsICgxPWluZm8sMj10dW5lciw0PWkyYyw4PXRzLCIKKwkJIjE2PXNyYW0sMzI9cmVnICh8LWFibGUpKS4iCisJCURFQlNUQVRVUyk7CiAjdW5kZWYgREVCU1RBVFVTCiAKIERWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOwpAQCAtNTcsMzcgKzU4LDM2IEBACiBzdGF0aWMgaW50IGZsZXhjb3BfZHZiX3N0YXJ0X2ZlZWQoc3RydWN0IGR2Yl9kZW11eF9mZWVkICpkdmJkbXhmZWVkKQogewogCXN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMgPSBkdmJkbXhmZWVkLT5kZW11eC0+cHJpdjsKLQlyZXR1cm4gZmxleGNvcF9waWRfZmVlZF9jb250cm9sKGZjLGR2YmRteGZlZWQsMSk7CisJcmV0dXJuIGZsZXhjb3BfcGlkX2ZlZWRfY29udHJvbChmYywgZHZiZG14ZmVlZCwgMSk7CiB9CiAKIHN0YXRpYyBpbnQgZmxleGNvcF9kdmJfc3RvcF9mZWVkKHN0cnVjdCBkdmJfZGVtdXhfZmVlZCAqZHZiZG14ZmVlZCkKIHsKIAlzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjID0gZHZiZG14ZmVlZC0+ZGVtdXgtPnByaXY7Ci0JcmV0dXJuIGZsZXhjb3BfcGlkX2ZlZWRfY29udHJvbChmYyxkdmJkbXhmZWVkLDApOworCXJldHVybiBmbGV4Y29wX3BpZF9mZWVkX2NvbnRyb2woZmMsIGR2YmRteGZlZWQsIDApOwogfQogCiBzdGF0aWMgaW50IGZsZXhjb3BfZHZiX2luaXQoc3RydWN0IGZsZXhjb3BfZGV2aWNlICpmYykKIHsKIAlpbnQgcmV0ID0gZHZiX3JlZ2lzdGVyX2FkYXB0ZXIoJmZjLT5kdmJfYWRhcHRlciwKLQkJCQkgICAgICAgIkZsZXhDb3AgRGlnaXRhbCBUViBkZXZpY2UiLCBmYy0+b3duZXIsCi0JCQkJICAgICAgIGZjLT5kZXYsIGFkYXB0ZXJfbnIpOworCQkJIkZsZXhDb3AgRGlnaXRhbCBUViBkZXZpY2UiLCBmYy0+b3duZXIsCisJCQlmYy0+ZGV2LCBhZGFwdGVyX25yKTsKIAlpZiAocmV0IDwgMCkgewogCQllcnIoImVycm9yIHJlZ2lzdGVyaW5nIERWQiBhZGFwdGVyIik7CiAJCXJldHVybiByZXQ7CiAJfQogCWZjLT5kdmJfYWRhcHRlci5wcml2ID0gZmM7CiAKLQlmYy0+ZGVtdXguZG14LmNhcGFiaWxpdGllcyA9IChETVhfVFNfRklMVEVSSU5HIHwgRE1YX1NFQ1RJT05fRklMVEVSSU5HIHwgRE1YX01FTU9SWV9CQVNFRF9GSUxURVJJTkcpOworCWZjLT5kZW11eC5kbXguY2FwYWJpbGl0aWVzID0gKERNWF9UU19GSUxURVJJTkcgfCBETVhfU0VDVElPTl9GSUxURVJJTkcKKwkJCXwgRE1YX01FTU9SWV9CQVNFRF9GSUxURVJJTkcpOwogCWZjLT5kZW11eC5wcml2ID0gZmM7Ci0KIAlmYy0+ZGVtdXguZmlsdGVybnVtID0gZmMtPmRlbXV4LmZlZWRudW0gPSBGQ19NQVhfRkVFRDsKLQogCWZjLT5kZW11eC5zdGFydF9mZWVkID0gZmxleGNvcF9kdmJfc3RhcnRfZmVlZDsKIAlmYy0+ZGVtdXguc3RvcF9mZWVkID0gZmxleGNvcF9kdmJfc3RvcF9mZWVkOwogCWZjLT5kZW11eC53cml0ZV90b19kZWNvZGVyID0gTlVMTDsKIAogCWlmICgocmV0ID0gZHZiX2RteF9pbml0KCZmYy0+ZGVtdXgpKSA8IDApIHsKLQkJZXJyKCJkdmJfZG14IGZhaWxlZDogZXJyb3IgJWQiLHJldCk7CisJCWVycigiZHZiX2RteCBmYWlsZWQ6IGVycm9yICVkIiwgcmV0KTsKIAkJZ290byBlcnJfZG14OwogCX0KIApAQCAtOTcsMjMgKzk3LDIzIEBACiAJZmMtPmRteGRldi5kZW11eCA9ICZmYy0+ZGVtdXguZG14OwogCWZjLT5kbXhkZXYuY2FwYWJpbGl0aWVzID0gMDsKIAlpZiAoKHJldCA9IGR2Yl9kbXhkZXZfaW5pdCgmZmMtPmRteGRldiwgJmZjLT5kdmJfYWRhcHRlcikpIDwgMCkgewotCQllcnIoImR2Yl9kbXhkZXZfaW5pdCBmYWlsZWQ6IGVycm9yICVkIixyZXQpOworCQllcnIoImR2Yl9kbXhkZXZfaW5pdCBmYWlsZWQ6IGVycm9yICVkIiwgcmV0KTsKIAkJZ290byBlcnJfZG14X2RldjsKIAl9CiAKIAlpZiAoKHJldCA9IGZjLT5kZW11eC5kbXguYWRkX2Zyb250ZW5kKCZmYy0+ZGVtdXguZG14LCAmZmMtPmh3X2Zyb250ZW5kKSkgPCAwKSB7Ci0JCWVycigiYWRkaW5nIGh3X2Zyb250ZW5kIHRvIGRteCBmYWlsZWQ6IGVycm9yICVkIixyZXQpOworCQllcnIoImFkZGluZyBod19mcm9udGVuZCB0byBkbXggZmFpbGVkOiBlcnJvciAlZCIsIHJldCk7CiAJCWdvdG8gZXJyX2RteF9hZGRfaHdfZnJvbnRlbmQ7CiAJfQogCiAJZmMtPm1lbV9mcm9udGVuZC5zb3VyY2UgPSBETVhfTUVNT1JZX0ZFOwogCWlmICgocmV0ID0gZmMtPmRlbXV4LmRteC5hZGRfZnJvbnRlbmQoJmZjLT5kZW11eC5kbXgsICZmYy0+bWVtX2Zyb250ZW5kKSkgPCAwKSB7Ci0JCWVycigiYWRkaW5nIG1lbV9mcm9udGVuZCB0byBkbXggZmFpbGVkOiBlcnJvciAlZCIscmV0KTsKKwkJZXJyKCJhZGRpbmcgbWVtX2Zyb250ZW5kIHRvIGRteCBmYWlsZWQ6IGVycm9yICVkIiwgcmV0KTsKIAkJZ290byBlcnJfZG14X2FkZF9tZW1fZnJvbnRlbmQ7CiAJfQogCiAJaWYgKChyZXQgPSBmYy0+ZGVtdXguZG14LmNvbm5lY3RfZnJvbnRlbmQoJmZjLT5kZW11eC5kbXgsICZmYy0+aHdfZnJvbnRlbmQpKSA8IDApIHsKLQkJZXJyKCJjb25uZWN0IGZyb250ZW5kIGZhaWxlZDogZXJyb3IgJWQiLHJldCk7CisJCWVycigiY29ubmVjdCBmcm9udGVuZCBmYWlsZWQ6IGVycm9yICVkIiwgcmV0KTsKIAkJZ290byBlcnJfY29ubmVjdF9mcm9udGVuZDsKIAl9CiAKQEAgLTEyMyw5ICsxMjMsOSBAQAogCXJldHVybiAwOwogCiBlcnJfY29ubmVjdF9mcm9udGVuZDoKLQlmYy0+ZGVtdXguZG14LnJlbW92ZV9mcm9udGVuZCgmZmMtPmRlbXV4LmRteCwmZmMtPm1lbV9mcm9udGVuZCk7CisJZmMtPmRlbXV4LmRteC5yZW1vdmVfZnJvbnRlbmQoJmZjLT5kZW11eC5kbXgsICZmYy0+bWVtX2Zyb250ZW5kKTsKIGVycl9kbXhfYWRkX21lbV9mcm9udGVuZDoKLQlmYy0+ZGVtdXguZG14LnJlbW92ZV9mcm9udGVuZCgmZmMtPmRlbXV4LmRteCwmZmMtPmh3X2Zyb250ZW5kKTsKKwlmYy0+ZGVtdXguZG14LnJlbW92ZV9mcm9udGVuZCgmZmMtPmRlbXV4LmRteCwgJmZjLT5od19mcm9udGVuZCk7CiBlcnJfZG14X2FkZF9od19mcm9udGVuZDoKIAlkdmJfZG14ZGV2X3JlbGVhc2UoJmZjLT5kbXhkZXYpOwogZXJyX2RteF9kZXY6CkBAIC0xNDEsMTIgKzE0MSwxMyBAQAogCQlkdmJfbmV0X3JlbGVhc2UoJmZjLT5kdmJuZXQpOwogCiAJCWZjLT5kZW11eC5kbXguY2xvc2UoJmZjLT5kZW11eC5kbXgpOwotCQlmYy0+ZGVtdXguZG14LnJlbW92ZV9mcm9udGVuZCgmZmMtPmRlbXV4LmRteCwmZmMtPm1lbV9mcm9udGVuZCk7Ci0JCWZjLT5kZW11eC5kbXgucmVtb3ZlX2Zyb250ZW5kKCZmYy0+ZGVtdXguZG14LCZmYy0+aHdfZnJvbnRlbmQpOworCQlmYy0+ZGVtdXguZG14LnJlbW92ZV9mcm9udGVuZCgmZmMtPmRlbXV4LmRteCwKKwkJCSZmYy0+bWVtX2Zyb250ZW5kKTsKKwkJZmMtPmRlbXV4LmRteC5yZW1vdmVfZnJvbnRlbmQoJmZjLT5kZW11eC5kbXgsCisJCQkmZmMtPmh3X2Zyb250ZW5kKTsKIAkJZHZiX2RteGRldl9yZWxlYXNlKCZmYy0+ZG14ZGV2KTsKIAkJZHZiX2RteF9yZWxlYXNlKCZmYy0+ZGVtdXgpOwogCQlkdmJfdW5yZWdpc3Rlcl9hZGFwdGVyKCZmYy0+ZHZiX2FkYXB0ZXIpOwotCiAJCWRlYl9pbmZvKCJkZWluaXRpYWxpemVkIGR2YiBzdHVmZlxuIik7CiAJfQogCWZjLT5pbml0X3N0YXRlICY9IH5GQ19TVEFURV9EVkJfSU5JVDsKQEAgLTE2OCw5ICsxNjksOSBAQAogCiBzdGF0aWMgdm9pZCBmbGV4Y29wX3Jlc2V0KHN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMpCiB7Ci0JZmxleGNvcF9pYmlfdmFsdWUgdjIxMCx2MjA0OworCWZsZXhjb3BfaWJpX3ZhbHVlIHYyMTAsIHYyMDQ7CiAKLS8qIHJlc2V0IHRoZSBmbGV4Y29wIGl0c2VsZiAqLworCS8qIHJlc2V0IHRoZSBmbGV4Y29wIGl0c2VsZiAqLwogCWZjLT53cml0ZV9pYmlfcmVnKGZjLGN0cmxfMjA4LGliaV96ZXJvKTsKIAogCXYyMTAucmF3ID0gMDsKQEAgLTE4MywxMyArMTg0LDExIEBACiAJdjIxMC5zd19yZXNldF8yMTAucmVzZXRfYmxvY2tfNjAwID0gMTsKIAl2MjEwLnN3X3Jlc2V0XzIxMC5yZXNldF9ibG9ja183MDAgPSAxOwogCXYyMTAuc3dfcmVzZXRfMjEwLkJsb2NrX3Jlc2V0X2VuYWJsZSA9IDB4YjI7Ci0KIAl2MjEwLnN3X3Jlc2V0XzIxMC5TcGVjaWFsX2NvbnRyb2xzID0gMHhjMjU5OwotCiAJZmMtPndyaXRlX2liaV9yZWcoZmMsc3dfcmVzZXRfMjEwLHYyMTApOwogCW1zbGVlcCgxKTsKIAotLyogcmVzZXQgdGhlIHBlcmlwaGljYWwgZGV2aWNlcyAqLworCS8qIHJlc2V0IHRoZSBwZXJpcGhpY2FsIGRldmljZXMgKi8KIAogCXYyMDQgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLG1pc2NfMjA0KTsKIAl2MjA0Lm1pc2NfMjA0LlBlcl9yZXNldF9zaWcgPSAwOwpAQCAtMjAxLDI1ICsyMDAsMjQgQEAKIAogdm9pZCBmbGV4Y29wX3Jlc2V0X2Jsb2NrXzMwMChzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjKQogewotCWZsZXhjb3BfaWJpX3ZhbHVlIHYyMDhfc2F2ZSA9IGZjLT5yZWFkX2liaV9yZWcoZmMsY3RybF8yMDgpLAotCQkJCQkgIHYyMTAgPSBmYy0+cmVhZF9pYmlfcmVnKGZjLHN3X3Jlc2V0XzIxMCk7CisJZmxleGNvcF9pYmlfdmFsdWUgdjIwOF9zYXZlID0gZmMtPnJlYWRfaWJpX3JlZyhmYywgY3RybF8yMDgpLAorCQkJICB2MjEwID0gZmMtPnJlYWRfaWJpX3JlZyhmYywgc3dfcmVzZXRfMjEwKTsKIAotCWRlYl9yZHVtcCgiMjA4OiAlMDh4LCAyMTA6ICUwOHhcbiIsdjIwOF9zYXZlLnJhdyx2MjEwLnJhdyk7Ci0KKwlkZWJfcmR1bXAoIjIwODogJTA4eCwgMjEwOiAlMDh4XG4iLCB2MjA4X3NhdmUucmF3LCB2MjEwLnJhdyk7CiAJZmMtPndyaXRlX2liaV9yZWcoZmMsY3RybF8yMDgsaWJpX3plcm8pOwogCiAJdjIxMC5zd19yZXNldF8yMTAucmVzZXRfYmxvY2tfMzAwID0gMTsKIAl2MjEwLnN3X3Jlc2V0XzIxMC5CbG9ja19yZXNldF9lbmFibGUgPSAweGIyOwogCiAJZmMtPndyaXRlX2liaV9yZWcoZmMsc3dfcmVzZXRfMjEwLHYyMTApOwotCXVkZWxheSgxMDAwKTsKIAlmYy0+d3JpdGVfaWJpX3JlZyhmYyxjdHJsXzIwOCx2MjA4X3NhdmUpOwogfQogCiBzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZsZXhjb3BfZGV2aWNlX2ttYWxsb2Moc2l6ZV90IGJ1c19zcGVjaWZpY19sZW4pCiB7CiAJdm9pZCAqYnVzOwotCXN0cnVjdCBmbGV4Y29wX2RldmljZSAqZmMgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgZmxleGNvcF9kZXZpY2UpLCBHRlBfS0VSTkVMKTsKKwlzdHJ1Y3QgZmxleGNvcF9kZXZpY2UgKmZjID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGZsZXhjb3BfZGV2aWNlKSwKKwkJCQlHRlBfS0VSTkVMKTsKIAlpZiAoIWZjKSB7CiAJCWVycigibm8gbWVtb3J5Iik7CiAJCXJldHVybiBOVUxMOwpAQCAtMjU0LDcgKzI1Miw2IEBACiAJZmxleGNvcF9kZXRlcm1pbmVfcmV2aXNpb24oZmMpOwogCWZsZXhjb3Bfc3JhbV9pbml0KGZjKTsKIAlmbGV4Y29wX2h3X2ZpbHRlcl9pbml0KGZjKTsKLQogCWZsZXhjb3Bfc21jX2N0cmwoZmMsIDApOwogCiAJaWYgKChyZXQgPSBmbGV4Y29wX2R2Yl9pbml0KGZjKSkpCkBAIC0yNzksNyArMjc2LDYgQEAKIAkJZ290byBlcnJvcjsKIAogCWZsZXhjb3BfZGV2aWNlX25hbWUoZmMsImluaXRpYWxpemF0aW9uIG9mIiwiY29tcGxldGUiKTsKLQogCXJldHVybiAwOwogCiBlcnJvcjoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLmgKaW5kZXggMGNlYmUxZC4uODk3YjEwYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wLmgKQEAgLTEsOSArMSw3IEBACiAvKgotICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgbGludXggZHJpdmVyIHRoZSBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKLSAqCi0gKiBmbGV4Y29wLmggLSBwcml2YXRlIGhlYWRlciBmaWxlIGZvciBhbGwgZmxleGNvcC1jaGlwLXNvdXJjZSBmaWxlcy4KLSAqCi0gKiBzZWUgZmxleGNvcC5jIGZvciBjb3B5cmlnaHQgaW5mb3JtYXRpb24uCisgKiBMaW51eCBkcml2ZXIgZm9yIGRpZ2l0YWwgVFYgZGV2aWNlcyBlcXVpcHBlZCB3aXRoIEIyQzIgRmxleGNvcElJKGIpL0lJSQorICogZmxleGNvcC5oIC0gcHJpdmF0ZSBoZWFkZXIgZmlsZSBmb3IgYWxsIGZsZXhjb3AtY2hpcC1zb3VyY2UgZmlsZXMKKyAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbgogICovCiAjaWZuZGVmIF9fRkxFWENPUF9IX18KICNkZWZpbmUgX19GTEVYQ09QX0hfX18KQEAgLTIxLDExICsxOSwxMSBAQAogI2RlZmluZSBkcHJpbnRrKGxldmVsLGFyZ3MuLi4pCiAjZW5kaWYKIAotI2RlZmluZSBkZWJfaW5mbyhhcmdzLi4uKSAgZHByaW50aygweDAxLGFyZ3MpCi0jZGVmaW5lIGRlYl90dW5lcihhcmdzLi4uKSBkcHJpbnRrKDB4MDIsYXJncykKLSNkZWZpbmUgZGViX2kyYyhhcmdzLi4uKSAgIGRwcmludGsoMHgwNCxhcmdzKQotI2RlZmluZSBkZWJfdHMoYXJncy4uLikgICAgZHByaW50aygweDA4LGFyZ3MpCi0jZGVmaW5lIGRlYl9zcmFtKGFyZ3MuLi4pICBkcHJpbnRrKDB4MTAsYXJncykKLSNkZWZpbmUgZGViX3JkdW1wKGFyZ3MuLi4pICBkcHJpbnRrKDB4MjAsYXJncykKKyNkZWZpbmUgZGViX2luZm8oYXJncy4uLikgZHByaW50aygweDAxLCBhcmdzKQorI2RlZmluZSBkZWJfdHVuZXIoYXJncy4uLikgZHByaW50aygweDAyLCBhcmdzKQorI2RlZmluZSBkZWJfaTJjKGFyZ3MuLi4pIGRwcmludGsoMHgwNCwgYXJncykKKyNkZWZpbmUgZGViX3RzKGFyZ3MuLi4pIGRwcmludGsoMHgwOCwgYXJncykKKyNkZWZpbmUgZGViX3NyYW0oYXJncy4uLikgZHByaW50aygweDEwLCBhcmdzKQorI2RlZmluZSBkZWJfcmR1bXAoYXJncy4uLikgZHByaW50aygweDIwLCBhcmdzKQogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcF9pYmlfdmFsdWVfYmUuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcF9pYmlfdmFsdWVfYmUuaAppbmRleCBlZDlhNjc1Li44ZjY0YmRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3BfaWJpX3ZhbHVlX2JlLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wX2liaV92YWx1ZV9iZS5oCkBAIC0xLDEwICsxLDcgQEAKLS8qIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpbnV4IGRyaXZlciBmb3IgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCi0gKgorLyogTGludXggZHJpdmVyIGZvciBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKICAqIHJlZ2lzdGVyIGRlc2NyaXB0aW9ucwotICoKLSAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4KKyAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbgogICovCi0KIC8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCwgZG8gbm90IGVkaXQgdGhpbmdzIGhlcmUuICovCiAjaWZuZGVmIF9fRkxFWENPUF9JQklfVkFMVUVfSU5DTFVERURfXwogI2RlZmluZSBfX0ZMRVhDT1BfSUJJX1ZBTFVFX0lOQ0xVREVEX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcF9pYmlfdmFsdWVfbGUuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2IyYzIvZmxleGNvcF9pYmlfdmFsdWVfbGUuaAppbmRleCA0OWYyMzE1Li5jNzU4MzBkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9iMmMyL2ZsZXhjb3BfaWJpX3ZhbHVlX2xlLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYjJjMi9mbGV4Y29wX2liaV92YWx1ZV9sZS5oCkBAIC0xLDEwICsxLDcgQEAKLS8qIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIGxpbnV4IGRyaXZlciBmb3IgZGlnaXRhbCBUViBkZXZpY2VzIGVxdWlwcGVkIHdpdGggQjJDMiBGbGV4Y29wSUkoYikvSUlJCi0gKgorLyogTGludXggZHJpdmVyIGZvciBkaWdpdGFsIFRWIGRldmljZXMgZXF1aXBwZWQgd2l0aCBCMkMyIEZsZXhjb3BJSShiKS9JSUkKICAqIHJlZ2lzdGVyIGRlc2NyaXB0aW9ucwotICoKLSAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbi4KKyAqIHNlZSBmbGV4Y29wLmMgZm9yIGNvcHlyaWdodCBpbmZvcm1hdGlvbgogICovCi0KIC8qIFRoaXMgZmlsZSBpcyBhdXRvbWF0aWNhbGx5IGdlbmVyYXRlZCwgZG8gbm90IGVkaXQgdGhpbmdzIGhlcmUuICovCiAjaWZuZGVmIF9fRkxFWENPUF9JQklfVkFMVUVfSU5DTFVERURfXwogI2RlZmluZSBfX0ZMRVhDT1BfSUJJX1ZBTFVFX0lOQ0xVREVEX18KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9LY29uZmlnCmluZGV4IDI3ZWRiMGUuLjg2NjhlNjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvYnQ4eHgvS2NvbmZpZwpAQCAtOCw3ICs4LDcgQEAKIAlzZWxlY3QgRFZCX09SNTEyMTEgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0xHRFQzMzBYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9aTDEwMzUzIGlmICFEVkJfRkVfQ1VTVE9NSVNFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1NJTVBMRSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJc2VsZWN0IE1FRElBX1RVTkVSX1NJTVBMRSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgUENJIGNhcmRzIGJhc2VkIG9uIHRoZSBCdDh4eCBQQ0kgYnJpZGdlLiBFeGFtcGxlcyBhcmUKIAkgIHRoZSBOZWJ1bGEgY2FyZHMsIHRoZSBQaW5uYWNsZSBQQ1RWIGNhcmRzLCB0aGUgVHdpbmhhbiBEU1QgY2FyZHMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kc3RfY2EuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdF9jYS5jCmluZGV4IDAyNTg0NTEuLjQ2MDFiMDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdF9jYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2RzdF9jYS5jCkBAIC01NTIsMTYgKzU1MiwxOSBAQAogCXJldHVybiByZXN1bHQ7CiB9CiAKLXN0YXRpYyBpbnQgZHN0X2NhX2lvY3RsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGlvY3RsX2FyZykKK3N0YXRpYyBsb25nIGRzdF9jYV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBpb2N0bF9hcmcpCiB7Ci0Jc3RydWN0IGR2Yl9kZXZpY2UqIGR2YmRldiA9IChzdHJ1Y3QgZHZiX2RldmljZSopIGZpbGUtPnByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZHN0X3N0YXRlKiBzdGF0ZSA9IChzdHJ1Y3QgZHN0X3N0YXRlKikgZHZiZGV2LT5wcml2OworCXN0cnVjdCBkdmJfZGV2aWNlICpkdmJkZXY7CisJc3RydWN0IGRzdF9zdGF0ZSAqc3RhdGU7CiAJc3RydWN0IGNhX3Nsb3RfaW5mbyAqcF9jYV9zbG90X2luZm87CiAJc3RydWN0IGNhX2NhcHMgKnBfY2FfY2FwczsKIAlzdHJ1Y3QgY2FfbXNnICpwX2NhX21lc3NhZ2U7CiAJdm9pZCBfX3VzZXIgKmFyZyA9ICh2b2lkIF9fdXNlciAqKWlvY3RsX2FyZzsKIAlpbnQgcmVzdWx0ID0gMDsKIAorCWxvY2tfa2VybmVsKCk7CisJZHZiZGV2ID0gKHN0cnVjdCBkdmJfZGV2aWNlICopZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0YXRlID0gKHN0cnVjdCBkc3Rfc3RhdGUgKilkdmJkZXYtPnByaXY7CiAJcF9jYV9tZXNzYWdlID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBjYV9tc2cpLCBHRlBfS0VSTkVMKTsKIAlwX2NhX3Nsb3RfaW5mbyA9IGttYWxsb2Moc2l6ZW9mIChzdHJ1Y3QgY2Ffc2xvdF9pbmZvKSwgR0ZQX0tFUk5FTCk7CiAJcF9jYV9jYXBzID0ga21hbGxvYyhzaXplb2YgKHN0cnVjdCBjYV9jYXBzKSwgR0ZQX0tFUk5FTCk7CkBAIC02NDcsNiArNjUwLDcgQEAKIAlrZnJlZSAocF9jYV9zbG90X2luZm8pOwogCWtmcmVlIChwX2NhX2NhcHMpOwogCisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKQEAgLTY4Miw5ICs2ODYsOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkc3RfY2FfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRzdF9jYV9mb3BzID0gewogCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5pb2N0bCA9IGRzdF9jYV9pb2N0bCwKKwkudW5sb2NrZWRfaW9jdGwgPSBkc3RfY2FfaW9jdGwsCiAJLm9wZW4gPSBkc3RfY2Ffb3BlbiwKIAkucmVsZWFzZSA9IGRzdF9jYV9yZWxlYXNlLAogCS5yZWFkID0gZHN0X2NhX3JlYWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9idDh4eC9kdmItYnQ4eHguYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2R2Yi1idDh4eC5jCmluZGV4IDQ4NzYyYTIuLmIxODU3YzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2R2Yi1idDh4eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2J0OHh4L2R2Yi1idDh4eC5jCkBAIC04MTQsNyArODE0LDcgQEAKIAogCW11dGV4X2luaXQoJmNhcmQtPmxvY2spOwogCWNhcmQtPmJ0dHZfbnIgPSBzdWItPmNvcmUtPm5yOwotCXN0cm5jcHkoY2FyZC0+Y2FyZF9uYW1lLCBzdWItPmNvcmUtPm5hbWUsIHNpemVvZihzdWItPmNvcmUtPm5hbWUpKTsKKwlzdHJsY3B5KGNhcmQtPmNhcmRfbmFtZSwgc3ViLT5jb3JlLT52NGwyX2Rldi5uYW1lLCBzaXplb2YoY2FyZC0+Y2FyZF9uYW1lKSk7CiAJY2FyZC0+aTJjX2FkYXB0ZXIgPSAmc3ViLT5jb3JlLT5pMmNfYWRhcDsKIAogCXN3aXRjaChzdWItPmNvcmUtPnR5cGUpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L0tjb25maWcKaW5kZXggNDNmNGQ0NC4uZGUzZWViMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L0tjb25maWcKQEAgLTgsNiArOCw3IEBACiAJc2VsZWN0IERWQl9TVEI2MDAwIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9DWDI0MTE2IGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9TSTIxWFggaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgVklERU9fSVIKIAloZWxwCiAJICBTdXBwb3J0IGZvciBjYXJkcyBiYXNlZCBvbiB0aGUgU0RNQyBETTExMDUgUENJIGNoaXAgbGlrZQogCSAgRHZiV29ybGQgMjAwMgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L2RtMTEwNS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZG0xMTA1L2RtMTEwNS5jCmluZGV4IGY0OGY3M2EuLjViMjBjZjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2RtMTEwNS9kbTExMDUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kbTExMDUvZG0xMTA1LmMKQEAgLTE1Niw0NiArMTU2LDEyIEBACiAKIERWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOwogCi1zdGF0aWMgdTE2IGlyX2NvZGVzX2RtMTEwNV9uZWNbMTI4XSA9IHsKLQlbMHgwYV0gPSBLRVlfUSwJCS8qcG93ZXIqLwotCVsweDBjXSA9IEtFWV9NLAkJLyptdXRlKi8KLQlbMHgxMV0gPSBLRVlfMSwKLQlbMHgxMl0gPSBLRVlfMiwKLQlbMHgxM10gPSBLRVlfMywKLQlbMHgxNF0gPSBLRVlfNCwKLQlbMHgxNV0gPSBLRVlfNSwKLQlbMHgxNl0gPSBLRVlfNiwKLQlbMHgxN10gPSBLRVlfNywKLQlbMHgxOF0gPSBLRVlfOCwKLQlbMHgxOV0gPSBLRVlfOSwKLQlbMHgxMF0gPSBLRVlfMCwKLQlbMHgxY10gPSBLRVlfUEFHRVVQLAkvKmNoKyovCi0JWzB4MGZdID0gS0VZX1BBR0VET1dOLAkvKmNoLSovCi0JWzB4MWFdID0gS0VZX08sCQkvKnZvbCsqLwotCVsweDBlXSA9IEtFWV9aLAkJLyp2b2wtKi8KLQlbMHgwNF0gPSBLRVlfUiwJCS8qcmVjKi8KLQlbMHgwOV0gPSBLRVlfRCwJCS8qZmF2Ki8KLQlbMHgwOF0gPSBLRVlfQkFDS1NQQUNFLAkvKnJld2luZCovCi0JWzB4MDddID0gS0VZX0EsCQkvKmZhc3QqLwotCVsweDBiXSA9IEtFWV9QLAkJLypwYXVzZSovCi0JWzB4MDJdID0gS0VZX0VTQywJLypjYW5jZWwqLwotCVsweDAzXSA9IEtFWV9HLAkJLyp0YWIqLwotCVsweDAwXSA9IEtFWV9VUCwJLyp1cCovCi0JWzB4MWZdID0gS0VZX0VOVEVSLAkvKm9rKi8KLQlbMHgwMV0gPSBLRVlfRE9XTiwJLypkb3duKi8KLQlbMHgwNV0gPSBLRVlfQywJCS8qY2FwKi8KLQlbMHgwNl0gPSBLRVlfUywJCS8qc3RvcCovCi0JWzB4NDBdID0gS0VZX0YsCQkvKmZ1bGwqLwotCVsweDFlXSA9IEtFWV9XLAkJLyp0dm1vZGUqLwotCVsweDFiXSA9IEtFWV9CLAkJLypyZWNhbGwqLwotfTsKLQogLyogaW5mcmFyZWQgcmVtb3RlIGNvbnRyb2wgKi8KIHN0cnVjdCBpbmZyYXJlZCB7Ci0JdTE2CWtleV9tYXBbMTI4XTsKIAlzdHJ1Y3QgaW5wdXRfZGV2CSppbnB1dF9kZXY7CisJc3RydWN0IGlyX2lucHV0X3N0YXRlCWlyOwogCWNoYXIJCQlpbnB1dF9waHlzWzMyXTsKLQlzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QJaXJfdGFza2xldDsKKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKIAl1MzIJCQlpcl9jb21tYW5kOwogfTsKIApAQCAtMjIwLDEwICsxODYsMTQgQEAKIAkvKiBpMmMgKi8KIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXA7CiAKKwkvKiBpcnEgKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yazsKKwogCS8qIGRtYSAqLwogCWRtYV9hZGRyX3QgZG1hX2FkZHI7CiAJdW5zaWduZWQgY2hhciAqdHNfYnVmOwogCXUzMiB3cnA7CisJdTMyIG5leHR3cnA7CiAJdTMyIGJ1ZmZlcl9zaXplOwogCXVuc2lnbmVkIGludAlQYWNrZXRFcnJvckNvdW50OwogCXVuc2lnbmVkIGludCBkbWFyc3Q7CkBAIC0yMzMsOCArMjAzLDYgQEAKIAogI2RlZmluZSBkbV9pb19tZW0ocmVnKQkoKHVuc2lnbmVkIGxvbmcpKCZkbTExMDVkdmItPmlvX21lbVtyZWddKSkKIAotc3RhdGljIHN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNWR2Yl9sb2NhbDsKLQogc3RhdGljIGludCBkbTExMDVfaTJjX3hmZXIoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKIAkJCSAgICBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkKIHsKQEAgLTQwNywzOCArMzc1LDYxIEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIGlyIHRhc2tsZXQgKi8KLXN0YXRpYyB2b2lkIGRtMTEwNV9lbWl0X2tleSh1bnNpZ25lZCBsb25nIHBhcm0pCisvKiBpciB3b3JrIGhhbmRsZXIgKi8KK3N0YXRpYyB2b2lkIGRtMTEwNV9lbWl0X2tleShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IGluZnJhcmVkICppciA9IChzdHJ1Y3QgaW5mcmFyZWQgKikgcGFybTsKKwlzdHJ1Y3QgaW5mcmFyZWQgKmlyID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpbmZyYXJlZCwgd29yayk7CiAJdTMyIGlyY29tID0gaXItPmlyX2NvbW1hbmQ7CiAJdTggZGF0YTsKLQl1MTYga2V5Y29kZTsKKworCWlmIChpcl9kZWJ1ZykKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IHJlY2VpdmVkIGJ5dGUgMHglMDR4XG4iLCBfX2Z1bmNfXywgaXJjb20pOwogCiAJZGF0YSA9IChpcmNvbSA+PiA4KSAmIDB4N2Y7CiAKLQlpbnB1dF9ldmVudChpci0+aW5wdXRfZGV2LCBFVl9NU0MsIE1TQ19SQVcsICgweDAwMDBmOCA8PCAxNikgfCBkYXRhKTsKLQlpbnB1dF9ldmVudChpci0+aW5wdXRfZGV2LCBFVl9NU0MsIE1TQ19TQ0FOLCBkYXRhKTsKLQlrZXljb2RlID0gaXItPmtleV9tYXBbZGF0YV07CisJaXJfaW5wdXRfa2V5ZG93bihpci0+aW5wdXRfZGV2LCAmaXItPmlyLCBkYXRhLCBkYXRhKTsKKwlpcl9pbnB1dF9ub2tleShpci0+aW5wdXRfZGV2LCAmaXItPmlyKTsKK30KIAotCWlmICgha2V5Y29kZSkKLQkJcmV0dXJuOworLyogd29yayBoYW5kbGVyICovCitzdGF0aWMgdm9pZCBkbTExMDVfZG14X2J1ZmZlcihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IGRtMTEwNWR2YiAqZG0xMTA1ZHZiID0KKwkJCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IGRtMTEwNWR2Yiwgd29yayk7CisJdW5zaWduZWQgaW50IG5icGFja2V0czsKKwl1MzIgb2xkd3JwID0gZG0xMTA1ZHZiLT53cnA7CisJdTMyIG5leHR3cnAgPSBkbTExMDVkdmItPm5leHR3cnA7CiAKLQlpbnB1dF9ldmVudChpci0+aW5wdXRfZGV2LCBFVl9LRVksIGtleWNvZGUsIDEpOwotCWlucHV0X3N5bmMoaXItPmlucHV0X2Rldik7Ci0JaW5wdXRfZXZlbnQoaXItPmlucHV0X2RldiwgRVZfS0VZLCBrZXljb2RlLCAwKTsKLQlpbnB1dF9zeW5jKGlyLT5pbnB1dF9kZXYpOworCWlmICghKChkbTExMDVkdmItPnRzX2J1ZltvbGR3cnBdID09IDB4NDcpICYmCisJCQkoZG0xMTA1ZHZiLT50c19idWZbb2xkd3JwICsgMTg4XSA9PSAweDQ3KSAmJgorCQkJKGRtMTEwNWR2Yi0+dHNfYnVmW29sZHdycCArIDE4OCAqIDJdID09IDB4NDcpKSkgeworCQlkbTExMDVkdmItPlBhY2tldEVycm9yQ291bnQrKzsKKwkJLyogYmFkIHBhY2tldCBmb3VuZCAqLworCQlpZiAoKGRtMTEwNWR2Yi0+UGFja2V0RXJyb3JDb3VudCA+PSAyKSAmJgorCQkJCShkbTExMDVkdmItPmRtYXJzdCA9PSAwKSkgeworCQkJb3V0YigxLCBkbV9pb19tZW0oRE0xMTA1X1JTVCkpOworCQkJZG0xMTA1ZHZiLT53cnAgPSAwOworCQkJZG0xMTA1ZHZiLT5QYWNrZXRFcnJvckNvdW50ID0gMDsKKwkJCWRtMTEwNWR2Yi0+ZG1hcnN0ID0gMDsKKwkJCXJldHVybjsKKwkJfQorCX0KIAorCWlmIChuZXh0d3JwIDwgb2xkd3JwKSB7CisJCW1lbWNweShkbTExMDVkdmItPnRzX2J1ZiArIGRtMTEwNWR2Yi0+YnVmZmVyX3NpemUsCisJCQkJCQlkbTExMDVkdmItPnRzX2J1ZiwgbmV4dHdycCk7CisJCW5icGFja2V0cyA9ICgoZG0xMTA1ZHZiLT5idWZmZXJfc2l6ZSAtIG9sZHdycCkgKyBuZXh0d3JwKSAvIDE4ODsKKwl9IGVsc2UKKwkJbmJwYWNrZXRzID0gKG5leHR3cnAgLSBvbGR3cnApIC8gMTg4OworCisJZG0xMTA1ZHZiLT53cnAgPSBuZXh0d3JwOworCWR2Yl9kbXhfc3dmaWx0ZXJfcGFja2V0cygmZG0xMTA1ZHZiLT5kZW11eCwKKwkJCQkJJmRtMTEwNWR2Yi0+dHNfYnVmW29sZHdycF0sIG5icGFja2V0cyk7CiB9CiAKIHN0YXRpYyBpcnFyZXR1cm5fdCBkbTExMDVkdmJfaXJxKGludCBpcnEsIHZvaWQgKmRldl9pZCkKIHsKIAlzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDVkdmIgPSBkZXZfaWQ7Ci0JdW5zaWduZWQgaW50IHBpZWNlOwotCXVuc2lnbmVkIGludCBuYnBhY2tldHM7Ci0JdTMyIGNvbW1hbmQ7Ci0JdTMyIG5leHR3cnA7Ci0JdTMyIG9sZHdycDsKIAogCS8qIFJlYWQtV3JpdGUgSU5TVFMgQWNrJ3MgSW50ZXJydXB0IGZvciBETTExMDUgY2hpcCAxNi4wMy4yMDA4ICovCiAJdW5zaWduZWQgaW50IGludHN0cyA9IGluYihkbV9pb19tZW0oRE0xMTA1X0lOVFNUUykpOwpAQCAtNDQ3LDcxICs0MzgsMjUgQEAKIAlzd2l0Y2ggKGludHN0cykgewogCWNhc2UgSU5UU1RTX1RTSVJROgogCWNhc2UgKElOVFNUU19UU0lSUSB8IElOVFNUU19JUik6Ci0JCW5leHR3cnAgPSBpbmwoZG1faW9fbWVtKERNMTEwNV9XUlApKSAtCi0JCQlpbmwoZG1faW9fbWVtKERNMTEwNV9TVEFEUikpIDsKLQkJb2xkd3JwID0gZG0xMTA1ZHZiLT53cnA7Ci0JCXNwaW5fbG9jaygmZG0xMTA1ZHZiLT5sb2NrKTsKLQkJaWYgKCEoKGRtMTEwNWR2Yi0+dHNfYnVmW29sZHdycF0gPT0gMHg0NykgJiYKLQkJCQkoZG0xMTA1ZHZiLT50c19idWZbb2xkd3JwICsgMTg4XSA9PSAweDQ3KSAmJgotCQkJCShkbTExMDVkdmItPnRzX2J1ZltvbGR3cnAgKyAxODggKiAyXSA9PSAweDQ3KSkpIHsKLQkJCWRtMTEwNWR2Yi0+UGFja2V0RXJyb3JDb3VudCsrOwotCQkJLyogYmFkIHBhY2tldCBmb3VuZCAqLwotCQkJaWYgKChkbTExMDVkdmItPlBhY2tldEVycm9yQ291bnQgPj0gMikgJiYKLQkJCQkJKGRtMTEwNWR2Yi0+ZG1hcnN0ID09IDApKSB7Ci0JCQkJb3V0YigxLCBkbV9pb19tZW0oRE0xMTA1X1JTVCkpOwotCQkJCWRtMTEwNWR2Yi0+d3JwID0gMDsKLQkJCQlkbTExMDVkdmItPlBhY2tldEVycm9yQ291bnQgPSAwOwotCQkJCWRtMTEwNWR2Yi0+ZG1hcnN0ID0gMDsKLQkJCQlzcGluX3VubG9jaygmZG0xMTA1ZHZiLT5sb2NrKTsKLQkJCQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0JCQl9Ci0JCX0KLQkJaWYgKG5leHR3cnAgPCBvbGR3cnApIHsKLQkJCXBpZWNlID0gZG0xMTA1ZHZiLT5idWZmZXJfc2l6ZSAtIG9sZHdycDsKLQkJCW1lbWNweShkbTExMDVkdmItPnRzX2J1ZiArIGRtMTEwNWR2Yi0+YnVmZmVyX3NpemUsIGRtMTEwNWR2Yi0+dHNfYnVmLCBuZXh0d3JwKTsKLQkJCW5icGFja2V0cyA9IChwaWVjZSArIG5leHR3cnApLzE4ODsKLQkJfSBlbHNlCXsKLQkJCW5icGFja2V0cyA9IChuZXh0d3JwIC0gb2xkd3JwKS8xODg7Ci0JCX0KLQkJZHZiX2RteF9zd2ZpbHRlcl9wYWNrZXRzKCZkbTExMDVkdmItPmRlbXV4LCAmZG0xMTA1ZHZiLT50c19idWZbb2xkd3JwXSwgbmJwYWNrZXRzKTsKLQkJZG0xMTA1ZHZiLT53cnAgPSBuZXh0d3JwOwotCQlzcGluX3VubG9jaygmZG0xMTA1ZHZiLT5sb2NrKTsKKwkJZG0xMTA1ZHZiLT5uZXh0d3JwID0gaW5sKGRtX2lvX21lbShETTExMDVfV1JQKSkgLQorCQkJCQlpbmwoZG1faW9fbWVtKERNMTEwNV9TVEFEUikpOworCQlzY2hlZHVsZV93b3JrKCZkbTExMDVkdmItPndvcmspOwogCQlicmVhazsKIAljYXNlIElOVFNUU19JUjoKLQkJY29tbWFuZCA9IGlubChkbV9pb19tZW0oRE0xMTA1X0lSQ09ERSkpOwotCQlpZiAoaXJfZGVidWcpCi0JCQlwcmludGsoImRtMTEwNTogcmVjZWl2ZWQgYnl0ZSAweCUwNHhcbiIsIGNvbW1hbmQpOwotCi0JCWRtMTEwNWR2Yi0+aXIuaXJfY29tbWFuZCA9IGNvbW1hbmQ7Ci0JCXRhc2tsZXRfc2NoZWR1bGUoJmRtMTEwNWR2Yi0+aXIuaXJfdGFza2xldCk7CisJCWRtMTEwNWR2Yi0+aXIuaXJfY29tbWFuZCA9IGlubChkbV9pb19tZW0oRE0xMTA1X0lSQ09ERSkpOworCQlzY2hlZHVsZV93b3JrKCZkbTExMDVkdmItPmlyLndvcmspOwogCQlicmVhazsKIAl9CisKIAlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci0KLQotfQotCi0vKiByZWdpc3RlciB3aXRoIGlucHV0IGxheWVyICovCi1zdGF0aWMgdm9pZCBpbnB1dF9yZWdpc3Rlcl9rZXlzKHN0cnVjdCBpbmZyYXJlZCAqaXIpCi17Ci0JaW50IGk7Ci0KLQltZW1zZXQoaXItPmlucHV0X2Rldi0+a2V5Yml0LCAwLCBzaXplb2YoaXItPmlucHV0X2Rldi0+a2V5Yml0KSk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpci0+a2V5X21hcCk7IGkrKykKLQkJCXNldF9iaXQoaXItPmtleV9tYXBbaV0sIGlyLT5pbnB1dF9kZXYtPmtleWJpdCk7Ci0KLQlpci0+aW5wdXRfZGV2LT5rZXljb2RlID0gaXItPmtleV9tYXA7Ci0JaXItPmlucHV0X2Rldi0+a2V5Y29kZXNpemUgPSBzaXplb2YoaXItPmtleV9tYXBbMF0pOwotCWlyLT5pbnB1dF9kZXYtPmtleWNvZGVtYXggPSBBUlJBWV9TSVpFKGlyLT5rZXlfbWFwKTsKIH0KIAogaW50IF9fZGV2aW5pdCBkbTExMDVfaXJfaW5pdChzdHJ1Y3QgZG0xMTA1ZHZiICpkbTExMDUpCiB7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXRfZGV2OwotCWludCBlcnI7Ci0KLQlkbTExMDVkdmJfbG9jYWwgPSBkbTExMDU7CisJSVJfS0VZVEFCX1RZUEUgKmlyX2NvZGVzID0gaXJfY29kZXNfZG0xMTA1X25lYzsKKwlpbnQgaXJfdHlwZSA9IElSX1RZUEVfT1RIRVI7CisJaW50IGVyciA9IC1FTk9NRU07CiAKIAlpbnB1dF9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoIWlucHV0X2RldikKQEAgLTUyMSwxMiArNDY2LDExIEBACiAJc25wcmludGYoZG0xMTA1LT5pci5pbnB1dF9waHlzLCBzaXplb2YoZG0xMTA1LT5pci5pbnB1dF9waHlzKSwKIAkJInBjaS0lcy9pcjAiLCBwY2lfbmFtZShkbTExMDUtPnBkZXYpKTsKIAotCWlucHV0X2Rldi0+ZXZiaXRbMF0gPSBCSVQoRVZfS0VZKTsKKwlpcl9pbnB1dF9pbml0KGlucHV0X2RldiwgJmRtMTEwNS0+aXIuaXIsIGlyX3R5cGUsIGlyX2NvZGVzKTsKIAlpbnB1dF9kZXYtPm5hbWUgPSAiRFZCIG9uLWNhcmQgSVIgcmVjZWl2ZXIiOwotCiAJaW5wdXRfZGV2LT5waHlzID0gZG0xMTA1LT5pci5pbnB1dF9waHlzOwogCWlucHV0X2Rldi0+aWQuYnVzdHlwZSA9IEJVU19QQ0k7Ci0JaW5wdXRfZGV2LT5pZC52ZXJzaW9uID0gMjsKKwlpbnB1dF9kZXYtPmlkLnZlcnNpb24gPSAxOwogCWlmIChkbTExMDUtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IpIHsKIAkJaW5wdXRfZGV2LT5pZC52ZW5kb3IgPSBkbTExMDUtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3I7CiAJCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IGRtMTEwNS0+cGRldi0+c3Vic3lzdGVtX2RldmljZTsKQEAgLTUzNCwyNSArNDc4LDIyIEBACiAJCWlucHV0X2Rldi0+aWQudmVuZG9yID0gZG0xMTA1LT5wZGV2LT52ZW5kb3I7CiAJCWlucHV0X2Rldi0+aWQucHJvZHVjdCA9IGRtMTEwNS0+cGRldi0+ZGV2aWNlOwogCX0KKwogCWlucHV0X2Rldi0+ZGV2LnBhcmVudCA9ICZkbTExMDUtPnBkZXYtPmRldjsKLQkvKiBpbml0aWFsIGtleW1hcCAqLwotCW1lbWNweShkbTExMDUtPmlyLmtleV9tYXAsIGlyX2NvZGVzX2RtMTEwNV9uZWMsIHNpemVvZiBkbTExMDUtPmlyLmtleV9tYXApOwotCWlucHV0X3JlZ2lzdGVyX2tleXMoJmRtMTEwNS0+aXIpOworCisJSU5JVF9XT1JLKCZkbTExMDUtPmlyLndvcmssIGRtMTEwNV9lbWl0X2tleSk7CisKIAllcnIgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UoaW5wdXRfZGV2KTsKIAlpZiAoZXJyKSB7CiAJCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0X2Rldik7CiAJCXJldHVybiBlcnI7CiAJfQogCi0JdGFza2xldF9pbml0KCZkbTExMDUtPmlyLmlyX3Rhc2tsZXQsIGRtMTEwNV9lbWl0X2tleSwgKHVuc2lnbmVkIGxvbmcpICZkbTExMDUtPmlyKTsKLQogCXJldHVybiAwOwogfQogCi0KIHZvaWQgX19kZXZleGl0IGRtMTEwNV9pcl9leGl0KHN0cnVjdCBkbTExMDVkdmIgKmRtMTEwNSkKIHsKLQl0YXNrbGV0X2tpbGwoJmRtMTEwNS0+aXIuaXJfdGFza2xldCk7CiAJaW5wdXRfdW5yZWdpc3Rlcl9kZXZpY2UoZG0xMTA1LT5pci5pbnB1dF9kZXYpOwogCiB9CkBAIC03MTAsNyArNjUxLDcgQEAKIAogCWRtMTEwNWR2YiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBkbTExMDVkdmIpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRtMTEwNWR2YikKLQkJZ290byBvdXQ7CisJCXJldHVybiAtRU5PTUVNOwogCiAJZG0xMTA1ZHZiLT5wZGV2ID0gcGRldjsKIAlkbTExMDVkdmItPmJ1ZmZlcl9zaXplID0gNSAqIERNMTEwNV9ETUFfQllURVM7CkBAIC03NDAsMTMgKzY4MSw5IEBACiAJc3Bpbl9sb2NrX2luaXQoJmRtMTEwNWR2Yi0+bG9jayk7CiAJcGNpX3NldF9kcnZkYXRhKHBkZXYsIGRtMTEwNWR2Yik7CiAKLQlyZXQgPSByZXF1ZXN0X2lycShwZGV2LT5pcnEsIGRtMTEwNWR2Yl9pcnEsIElSUUZfU0hBUkVELCBEUklWRVJfTkFNRSwgZG0xMTA1ZHZiKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBlcnJfcGNpX2lvdW5tYXA7Ci0KIAlyZXQgPSBkbTExMDVkdmJfaHdfaW5pdChkbTExMDVkdmIpOwogCWlmIChyZXQgPCAwKQotCQlnb3RvIGVycl9mcmVlX2lycTsKKwkJZ290byBlcnJfcGNpX2lvdW5tYXA7CiAKIAkvKiBpMmMgKi8KIAlpMmNfc2V0X2FkYXBkYXRhKCZkbTExMDVkdmItPmkyY19hZGFwLCBkbTExMDVkdmIpOwpAQCAtODEzLDggKzc1MCwxNSBAQAogCiAJZHZiX25ldF9pbml0KGR2Yl9hZGFwdGVyLCAmZG0xMTA1ZHZiLT5kdmJuZXQsIGRteCk7CiAJZG0xMTA1X2lyX2luaXQoZG0xMTA1ZHZiKTsKLW91dDoKLQlyZXR1cm4gcmV0OworCisJSU5JVF9XT1JLKCZkbTExMDVkdmItPndvcmssIGRtMTEwNV9kbXhfYnVmZmVyKTsKKworCXJldCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgZG0xMTA1ZHZiX2lycSwgSVJRRl9TSEFSRUQsCisJCQkJCQlEUklWRVJfTkFNRSwgZG0xMTA1ZHZiKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJfZnJlZV9pcnE7CisKKwlyZXR1cm4gMDsKIAogZXJyX2Rpc2Nvbm5lY3RfZnJvbnRlbmQ6CiAJZG14LT5kaXNjb25uZWN0X2Zyb250ZW5kKGRteCk7CkBAIC04NDMsNyArNzg3LDcgQEAKIGVycl9rZnJlZToKIAlwY2lfc2V0X2RydmRhdGEocGRldiwgTlVMTCk7CiAJa2ZyZWUoZG0xMTA1ZHZiKTsKLQlnb3RvIG91dDsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgZG0xMTA1X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2RteGRldi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZG14ZGV2LmMKaW5kZXggMDY5ZDg0Ny4uYzM1ZmJiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZG14ZGV2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZG14ZGV2LmMKQEAgLTEwMjQsNyArMTAyNCw3IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHZiX2RlbXV4X2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfZGVtdXhfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkucmVhZCA9IGR2Yl9kZW11eF9yZWFkLAogCS5pb2N0bCA9IGR2Yl9kZW11eF9pb2N0bCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9jYV9lbjUwMjIxLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfY2FfZW41MDIyMS5jCmluZGV4IDdlM2FlYWEuLmNiMjJkYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9jYV9lbjUwMjIxLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX2NhX2VuNTAyMjEuYwpAQCAtMTYwNyw3ICsxNjA3LDcgQEAKIEVYUE9SVF9TWU1CT0woZHZiX2NhX2VuNTAyMjFfaW5pdCk7CiAKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHZiX2NhX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfY2FfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkucmVhZCA9IGR2Yl9jYV9lbjUwMjIxX2lvX3JlYWQsCiAJLndyaXRlID0gZHZiX2NhX2VuNTAyMjFfaW9fd3JpdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfZnJvbnRlbmQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCmluZGV4IDhkY2IzZmIuLmViYzc4MTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9mcm9udGVuZC5jCkBAIC0xODc1LDcgKzE4NzUsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR2Yl9mcm9udGVuZF9mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHZiX2Zyb250ZW5kX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5pb2N0bAkJPSBkdmJfZ2VuZXJpY19pb2N0bCwKIAkucG9sbAkJPSBkdmJfZnJvbnRlbmRfcG9sbCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2Yl9uZXQuYwppbmRleCBmNmJhODQ2Li44MjgwZjhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJfbmV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiX25ldC5jCkBAIC0xNDU5LDcgKzE0NTksNyBAQAogfQogCiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR2Yl9uZXRfZm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR2Yl9uZXRfZm9wcyA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkuaW9jdGwgPSBkdmJfbmV0X2lvY3RsLAogCS5vcGVuID0JZHZiX2dlbmVyaWNfb3BlbiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlL2R2YmRldi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmMKaW5kZXggNmEzMjY4MC4uYTQ1NGVlOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmMKQEAgLTIyOCw4ICsyMjgsOCBAQAogCWR2YmRldi0+Zm9wcyA9IGR2YmRldmZvcHM7CiAJaW5pdF93YWl0cXVldWVfaGVhZCAoJmR2YmRldi0+d2FpdF9xdWV1ZSk7CiAKLQltZW1jcHkoZHZiZGV2LT5mb3BzLCB0ZW1wbGF0ZS0+Zm9wcywgc2l6ZW9mKHN0cnVjdCBmaWxlX29wZXJhdGlvbnMpKTsKLQlkdmJkZXYtPmZvcHMtPm93bmVyID0gYWRhcC0+bW9kdWxlOworCW1lbWNweShkdmJkZXZmb3BzLCB0ZW1wbGF0ZS0+Zm9wcywgc2l6ZW9mKHN0cnVjdCBmaWxlX29wZXJhdGlvbnMpKTsKKwlkdmJkZXZmb3BzLT5vd25lciA9IGFkYXAtPm1vZHVsZTsKIAogCWxpc3RfYWRkX3RhaWwgKCZkdmJkZXYtPmxpc3RfaGVhZCwgJmFkYXAtPmRldmljZV9saXN0KTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUvZHZiZGV2LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuaAppbmRleCBkY2E0OWNmLi43OTkyNzMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItY29yZS9kdmJkZXYuaApAQCAtNzEsNyArNzEsNyBAQAogCiBzdHJ1Y3QgZHZiX2RldmljZSB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0X2hlYWQ7Ci0Jc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqZm9wczsKKwljb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zICpmb3BzOwogCXN0cnVjdCBkdmJfYWRhcHRlciAqYWRhcHRlcjsKIAlpbnQgdHlwZTsKIAlpbnQgbWlub3I7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL0tjb25maWcKaW5kZXggNDlmN2IyMC4uNjEwM2NhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvS2NvbmZpZwpAQCAtMjUsNyArMjUsNyBAQAogCWRlcGVuZHMgb24gRFZCX1VTQgogCXNlbGVjdCBEVkJfRElCMzAwME1DCiAJc2VsZWN0IERWQl9QTEwgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgTUVESUFfVFVORVJfTVQyMDYwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIEFWZXJNZWRpYSBBdmVyVFYgRFZCLVQgVVNCIDIuMCAoQTgwMCkgcmVjZWl2ZXIuCiAKQEAgLTM0LDcgKzM0LDcgQEAKIAlkZXBlbmRzIG9uIERWQl9VU0IKIAlzZWxlY3QgRFZCX1BMTCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfRElCMzAwME1CCi0Jc2VsZWN0IE1FRElBX1RVTkVSX01UMjA2MCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJc2VsZWN0IE1FRElBX1RVTkVSX01UMjA2MCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgVVNCIDEuMSBhbmQgMi4wIERWQi1UIHJlY2VpdmVycyBiYXNlZCBvbiByZWZlcmVuY2UgZGVzaWducyBtYWRlIGJ5CiAJICBEaUJjb20gKDxodHRwOi8vd3d3LmRpYmNvbS5mcj4pIGVxdWlwcGVkIHdpdGggYSBEaUIzMDAwTS1CIGRlbW9kdWxhdG9yLgpAQCAtNTUsNyArNTUsNyBAQAogCXRyaXN0YXRlICJEaUJjb20gVVNCIERWQi1UIGRldmljZXMgKGJhc2VkIG9uIHRoZSBEaUIzMDAwTS1DL1ApIChzZWUgaGVscCBmb3IgZGV2aWNlIGxpc3QpIgogCWRlcGVuZHMgb24gRFZCX1VTQgogCXNlbGVjdCBEVkJfRElCMzAwME1DCi0Jc2VsZWN0IE1FRElBX1RVTkVSX01UMjA2MCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJc2VsZWN0IE1FRElBX1RVTkVSX01UMjA2MCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgVVNCMi4wIERWQi1UIHJlY2VpdmVycyBiYXNlZCBvbiByZWZlcmVuY2UgZGVzaWducyBtYWRlIGJ5CiAJICBEaUJjb20gKDxodHRwOi8vd3d3LmRpYmNvbS5mcj4pIGVxdWlwcGVkIHdpdGggYSBEaUIzMDAwTS1DL1AgZGVtb2R1bGF0b3IuCkBAIC02OSwxNSArNjksMTcgQEAKIGNvbmZpZyBEVkJfVVNCX0RJQjA3MDAKIAl0cmlzdGF0ZSAiRGlCY29tIERpQjA3MDAgVVNCIERWQiBkZXZpY2VzIChzZWUgaGVscCBmb3Igc3VwcG9ydGVkIGRldmljZXMpIgogCWRlcGVuZHMgb24gRFZCX1VTQgotCXNlbGVjdCBEVkJfRElCNzAwMFAKLQlzZWxlY3QgRFZCX0RJQjcwMDBNCi0Jc2VsZWN0IERWQl9ESUIzMDAwTUMKKwlzZWxlY3QgRFZCX0RJQjcwMDBQIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9ESUI3MDAwTSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfRElCMzAwME1DIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9TNUgxNDExIGlmICFEVkJfRkVfQ1VTVE9NSVNFCi0Jc2VsZWN0IERWQl9UVU5FUl9ESUIwMDcwCi0Jc2VsZWN0IE1FRElBX1RVTkVSX01UMjA2MCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX01UMjI2NiBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1hDMjAyOCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1hDNTAwMCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJc2VsZWN0IERWQl9MR0RUMzMwNSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfVFVORVJfRElCMDA3MCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIwNjAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIyNjYgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9YQzIwMjggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9YQzUwMDAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9NWEw1MDA3VCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU3VwcG9ydCBmb3IgVVNCMi4wLzEuMSBEVkIgcmVjZWl2ZXJzIGJhc2VkIG9uIHRoZSBEaUIwNzAwIFVTQiBicmlkZ2UuIFRoZQogCSAgVVNCIGJyaWRnZSBpcyBhbHNvIHByZXNlbnQgaW4gZGV2aWNlcyBoYXZpbmcgdGhlIERpQjc3MDAgRFZCLVQtVVNCCkBAIC05NSw3ICs5Nyw4IEBACiAJZGVwZW5kcyBvbiBEVkJfVVNCCiAJc2VsZWN0IERWQl9QTEwgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0RJQjMwMDBNQwotCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIwNjAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIwNjAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBEVkJfTVQzNTIgaWYgIURWQl9GRV9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIEhhbmZUZWsgVU1ULTAxMCBVU0IyLjAgc3RpY2stc2l6ZWQgRFZCLVQgcmVjZWl2ZXIuCiAKQEAgLTEwOCwxMCArMTExLDExIEBACiAJc2VsZWN0IERWQl9NVDM1MiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfWkwxMDM1MyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfRElCNzAwMFAgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX0xHUzhHTDUgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1RVTkVSX0RJQjAwNzAgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgTUVESUFfVFVORVJfU0lNUExFIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfWEMyMDI4IGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfTVhMNTAwNVMgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCXNlbGVjdCBNRURJQV9UVU5FUl9TSU1QTEUgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9YQzIwMjggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9NWEw1MDA1UyBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBDb25leGFudCBVU0IyLjAgaHlicmlkIHJlZmVyZW5jZSBkZXNpZ24uCiAJICBDdXJyZW50bHksIG9ubHkgRFZCIGFuZCBBVFNDIG1vZGVzIGFyZSBzdXBwb3J0ZWQsIGFuYWxvZyBtb2RlCkBAIC0xMjUsOCArMTI5LDggQEAKIAlkZXBlbmRzIG9uIERWQl9VU0IKIAlzZWxlY3QgRFZCX01UMzUyIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9UREExMDA0WCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQotCXNlbGVjdCBNRURJQV9UVU5FUl9RVDEwMTAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjdYIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgTUVESUFfVFVORVJfUVQxMDEwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfVERBODI3WCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBNU0kgTWVnYSBTa3kgNTgwIFVTQjIuMCBEVkItVCByZWNlaXZlci4KIAkgIEN1cnJlbnRseSwgb25seSBkZXZpY2VzIHdpdGggYSBwcm9kdWN0IGlkIG9mCkBAIC0xMzcsNyArMTQxLDcgQEAKIAl0cmlzdGF0ZSAiR2VuZXN5cyBMb2dpYyBHTDg2MSBVU0IyLjAgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIERWQl9VU0IKIAlzZWxlY3QgRFZCX1pMMTAzNTMgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgTUVESUFfVFVORVJfUVQxMDEwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgTUVESUFfVFVORVJfUVQxMDEwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIE1TSSBNZWdhc2t5IDU4MCAoNTU4MDEpIERWQi1UIFVTQjIuMAogCSAgcmVjZWl2ZXIgd2l0aCBVU0IgSUQgMGRiMDo1NTgxLgpAQCAtMTQ2LDcgKzE1MCw3IEBACiAJdHJpc3RhdGUgIkFsY29yIE1pY3JvIEFVNjYxMCBVU0IyLjAgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIERWQl9VU0IKIAlzZWxlY3QgRFZCX1pMMTAzNTMgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgTUVESUFfVFVORVJfUVQxMDEwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgTUVESUFfVFVORVJfUVQxMDEwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIHN1cHBvcnQgdGhlIFNpZ21hdGVrIERWQi0xMTAgRFZCLVQgVVNCMi4wIHJlY2VpdmVyLgogCkBAIC0xOTksNyArMjAzLDcgQEAKIAlkZXBlbmRzIG9uIERWQl9VU0IKIAlzZWxlY3QgRFZCX0RJQjMwMDBNQwogCXNlbGVjdCBEVkJfUExMIGlmICFEVkJfRkVfQ1VTVE9NSVNFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX01UMjA2MCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJc2VsZWN0IE1FRElBX1RVTkVSX01UMjA2MCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBIYXVwcGF1Z2UgV2luVFYtTk9WQS1UIHVzYjIgRFZCLVQgVVNCMi4wIHJlY2VpdmVyLgogCkBAIC0yMzUsOCArMjM5LDggQEAKIGNvbmZpZyBEVkJfVVNCX0FGOTAwNQogCXRyaXN0YXRlICJBZmF0ZWNoIEFGOTAwNSBEVkItVCBVU0IxLjEgc3VwcG9ydCIKIAlkZXBlbmRzIG9uIERWQl9VU0IgJiYgRVhQRVJJTUVOVEFMCi0Jc2VsZWN0IE1FRElBX1RVTkVSX01UMjA2MCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1FUMTAxMCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJc2VsZWN0IE1FRElBX1RVTkVSX01UMjA2MCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1FUMTAxMCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBBZmF0ZWNoIEFGOTAwNSBiYXNlZCBEVkItVCBVU0IxLjEgcmVjZWl2ZXIKIAkgIGFuZCB0aGUgVGVycmFUZWMgQ2luZXJneSBUIFVTQiBYRSAoUmV2LjEpCkBAIC0yODQsNyArMjg4LDcgQEAKIAl0cmlzdGF0ZSAiQU1FIERUVi01MTAwIFVTQjIuMCBEVkItVCBzdXBwb3J0IgogCWRlcGVuZHMgb24gRFZCX1VTQgogCXNlbGVjdCBEVkJfWkwxMDM1MyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQotCXNlbGVjdCBNRURJQV9UVU5FUl9RVDEwMTAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCXNlbGVjdCBNRURJQV9UVU5FUl9RVDEwMTAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgQU1FIERUVi01MTAwIFVTQjIuMCBEVkItVCByZWNlaXZlci4KIApAQCAtMjkzLDkgKzI5NywxOCBAQAogCWRlcGVuZHMgb24gRFZCX1VTQiAmJiBFWFBFUklNRU5UQUwKIAlzZWxlY3QgRFZCX0FGOTAxMwogCXNlbGVjdCBEVkJfUExMICAgICAgICAgICAgICBpZiAhRFZCX0ZFX0NVU1RPTUlTRQotCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIwNjAgICBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1FUMTAxMCAgIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfVERBMTgyNzEgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9NWEw1MDA1UyBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJc2VsZWN0IE1FRElBX1RVTkVSX01UMjA2MCAgIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfUVQxMDEwICAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9UREExODI3MSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX01YTDUwMDVTIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfTUM0NFM4MDMgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCWhlbHAKIAkgIFNheSBZIGhlcmUgdG8gc3VwcG9ydCB0aGUgQWZhdGVjaCBBRjkwMTUgYmFzZWQgRFZCLVQgVVNCMi4wIHJlY2VpdmVyCisKK2NvbmZpZyBEVkJfVVNCX0NFNjIzMAorCXRyaXN0YXRlICJJbnRlbCBDRTYyMzAgRFZCLVQgVVNCMi4wIHN1cHBvcnQiCisJZGVwZW5kcyBvbiBEVkJfVVNCICYmIEVYUEVSSU1FTlRBTAorCXNlbGVjdCBEVkJfWkwxMDM1MworCXNlbGVjdCBNRURJQV9UVU5FUl9NWEw1MDA1UyBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCisJaGVscAorCSAgU2F5IFkgaGVyZSB0byBzdXBwb3J0IHRoZSBJbnRlbCBDRTYyMzAgRFZCLVQgVVNCMi4wIHJlY2VpdmVyCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9NYWtlZmlsZQppbmRleCAzMTIyYjdjLi5mOTI3MzRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvTWFrZWZpbGUKQEAgLTc2LDYgKzc2LDggQEAKIGR2Yi11c2ItY2luZXJneVQyLW9ianMgPSBjaW5lcmd5VDItY29yZS5vIGNpbmVyZ3lUMi1mZS5vCiBvYmotJChDT05GSUdfRFZCX1VTQl9DSU5FUkdZX1QyKSArPSBkdmItdXNiLWNpbmVyZ3lUMi5vCiAKK2R2Yi11c2ItY2U2MjMwLW9ianMgPSBjZTYyMzAubworb2JqLSQoQ09ORklHX0RWQl9VU0JfQ0U2MjMwKSArPSBkdmItdXNiLWNlNjIzMC5vCiAKIEVYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvZHZiL2R2Yi1jb3JlLyAtSWRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy8KICMgZHVlIHRvIHR1bmVyLXhjMzAyOApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmMKaW5kZXggNmE5N2E0MC4uZjBiYThiMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5jCkBAIC0yNyw5ICsyNyw3IEBACiAjaW5jbHVkZSAicXQxMDEwLmgiCiAjaW5jbHVkZSAidGRhMTgyNzEuaCIKICNpbmNsdWRlICJteGw1MDA1cy5oIgotI2lmIDAKLSNpbmNsdWRlICJtYzQ0czgweC5oIgotI2VuZGlmCisjaW5jbHVkZSAibWM0NHM4MDMuaCIKIAogc3RhdGljIGludCBkdmJfdXNiX2FmOTAxNV9kZWJ1ZzsKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgZHZiX3VzYl9hZjkwMTVfZGVidWcsIGludCwgMDY0NCk7CkBAIC0zNyw5ICszNSw2IEBACiBzdGF0aWMgaW50IGR2Yl91c2JfYWY5MDE1X3JlbW90ZTsKIG1vZHVsZV9wYXJhbV9uYW1lZChyZW1vdGUsIGR2Yl91c2JfYWY5MDE1X3JlbW90ZSwgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MocmVtb3RlLCAic2VsZWN0IHJlbW90ZSIpOwotc3RhdGljIGludCBkdmJfdXNiX2FmOTAxNV9kdWFsX21vZGU7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoZHVhbF9tb2RlLCBkdmJfdXNiX2FmOTAxNV9kdWFsX21vZGUsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGR1YWxfbW9kZSwgImVuYWJsZSBkdWFsIG1vZGUiKTsKIERWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOwogCiBzdGF0aWMgREVGSU5FX01VVEVYKGFmOTAxNV91c2JfbXV0ZXgpOwpAQCAtMjgzLDYgKzI3OCwyMSBAQAogCQkJcmVxLmRhdGEgPSAmbXNnW2krMV0uYnVmWzBdOwogCQkJcmV0ID0gYWY5MDE1X2N0cmxfbXNnKGQsICZyZXEpOwogCQkJaSArPSAyOworCQl9IGVsc2UgaWYgKG1zZ1tpXS5mbGFncyAmIEkyQ19NX1JEKSB7CisJCQlyZXQgPSAtRUlOVkFMOworCQkJaWYgKG1zZ1tpXS5hZGRyID09CisJCQkJYWY5MDE1X2FmOTAxM19jb25maWdbMF0uZGVtb2RfYWRkcmVzcykKKwkJCQlnb3RvIGVycm9yOworCQkJZWxzZQorCQkJCXJlcS5jbWQgPSBSRUFEX0kyQzsKKwkJCXJlcS5pMmNfYWRkciA9IG1zZ1tpXS5hZGRyOworCQkJcmVxLmFkZHIgPSBhZGRyOworCQkJcmVxLm1ib3ggPSBtYm94OworCQkJcmVxLmFkZHJfbGVuID0gYWRkcl9sZW47CisJCQlyZXEuZGF0YV9sZW4gPSBtc2dbaV0ubGVuOworCQkJcmVxLmRhdGEgPSAmbXNnW2ldLmJ1ZlswXTsKKwkJCXJldCA9IGFmOTAxNV9jdHJsX21zZyhkLCAmcmVxKTsKKwkJCWkgKz0gMTsKIAkJfSBlbHNlIHsKIAkJCWlmIChtc2dbaV0uYWRkciA9PQogCQkJCWFmOTAxNV9hZjkwMTNfY29uZmlnWzBdLmRlbW9kX2FkZHJlc3MpCkBAIC03NDgsNiArNzU4LDE2IEBACiAJCQkJYWY5MDE1X2NvbmZpZy5pcl90YWJsZV9zaXplID0KIAkJCQkgIEFSUkFZX1NJWkUoYWY5MDE1X2lyX3RhYmxlX2RpZ2l0dHJhZGUpOwogCQkJCWJyZWFrOworCQkJY2FzZSBBRjkwMTVfUkVNT1RFX0FWRVJNRURJQV9LUzoKKwkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwID0KKwkJCQkgIGFmOTAxNV9yY19rZXlzX2F2ZXJtZWRpYTsKKwkJCQlhZjkwMTVfcHJvcGVydGllc1tpXS5yY19rZXlfbWFwX3NpemUgPQorCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfcmNfa2V5c19hdmVybWVkaWEpOworCQkJCWFmOTAxNV9jb25maWcuaXJfdGFibGUgPQorCQkJCSAgYWY5MDE1X2lyX3RhYmxlX2F2ZXJtZWRpYV9rczsKKwkJCQlhZjkwMTVfY29uZmlnLmlyX3RhYmxlX3NpemUgPQorCQkJCSAgQVJSQVlfU0laRShhZjkwMTVfaXJfdGFibGVfYXZlcm1lZGlhX2tzKTsKKwkJCQlicmVhazsKIAkJCX0KIAkJfSBlbHNlIHsKIAkJCXN3aXRjaCAobGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikpIHsKQEAgLTgzNiw5ICs4NTYsNiBAQAogCQlnb3RvIGVycm9yOwogCWFmOTAxNV9jb25maWcuZHVhbF9tb2RlID0gdmFsOwogCWRlYl9pbmZvKCIlczogVFMgbW9kZTolZFxuIiwgX19mdW5jX18sIGFmOTAxNV9jb25maWcuZHVhbF9tb2RlKTsKLQkvKiBkaXNhYmxlIGR1YWwgbW9kZSBieSBkZWZhdWx0IGJlY2F1c2UgaXQgaXMgYnVnZ3kgKi8KLQlpZiAoIWR2Yl91c2JfYWY5MDE1X2R1YWxfbW9kZSkKLQkJYWY5MDE1X2NvbmZpZy5kdWFsX21vZGUgPSAwOwogCiAJLyogU2V0IGFkYXB0ZXIwIGJ1ZmZlciBzaXplIGFjY29yZGluZyB0byBVU0IgcG9ydCBzcGVlZCwgYWRhcHRlcjEgYnVmZmVyCiAJICAgc2l6ZSBjYW4gYmUgc3RhdGljIGJlY2F1c2UgaXQgaXMgZW5hYmxlZCBvbmx5IFVTQjIuMCAqLwpAQCAtOTM1LDcgKzk1Miw2IEBACiAJCXN3aXRjaCAodmFsKSB7CiAJCWNhc2UgQUY5MDEzX1RVTkVSX0VOVjc3SDExRDU6CiAJCWNhc2UgQUY5MDEzX1RVTkVSX01UMjA2MDoKLQkJY2FzZSBBRjkwMTNfVFVORVJfTUM0NFM4MDM6CiAJCWNhc2UgQUY5MDEzX1RVTkVSX1FUMTAxMDoKIAkJY2FzZSBBRjkwMTNfVFVORVJfVU5LTk9XTjoKIAkJY2FzZSBBRjkwMTNfVFVORVJfTVQyMDYwXzI6CkBAIC05NDgsNiArOTY0LDEwIEBACiAJCWNhc2UgQUY5MDEzX1RVTkVSX01YTDUwMDVSOgogCQkJYWY5MDE1X2FmOTAxM19jb25maWdbaV0ucmZfc3BlY19pbnYgPSAwOwogCQkJYnJlYWs7CisJCWNhc2UgQUY5MDEzX1RVTkVSX01DNDRTODAzOgorCQkJYWY5MDE1X2FmOTAxM19jb25maWdbaV0uZ3Bpb1sxXSA9IEFGOTAxM19HUElPX0xPOworCQkJYWY5MDE1X2FmOTAxM19jb25maWdbaV0ucmZfc3BlY19pbnYgPSAxOworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQl3YXJuKCJ0dW5lciBpZDolZCBub3Qgc3VwcG9ydGVkLCBwbGVhc2UgcmVwb3J0ISIsIHZhbCk7CiAJCQlyZXR1cm4gLUVOT0RFVjsKQEAgLTExMzUsNiArMTE1NSwxMSBAQAogCS5BZ2NNYXN0ZXJCeXRlICAgPSAweDAwLAogfTsKIAorc3RhdGljIHN0cnVjdCBtYzQ0czgwM19jb25maWcgYWY5MDE1X21jNDRzODAzX2NvbmZpZyA9IHsKKwkuaTJjX2FkZHJlc3MgPSAweGMwLAorCS5kaWdfb3V0ID0gMSwKK307CisKIHN0YXRpYyBpbnQgYWY5MDE1X3R1bmVyX2F0dGFjaChzdHJ1Y3QgZHZiX3VzYl9hZGFwdGVyICphZGFwKQogewogCXN0cnVjdCBhZjkwMTVfc3RhdGUgKnN0YXRlID0gYWRhcC0+ZGV2LT5wcml2OwpAQCAtMTE3OSwxNSArMTIwNCw4IEBACiAJCQlEVkJfUExMX1REQTY2NVgpID09IE5VTEwgPyAtRU5PREVWIDogMDsKIAkJYnJlYWs7CiAJY2FzZSBBRjkwMTNfVFVORVJfTUM0NFM4MDM6Ci0jaWYgMAotCQlyZXQgPSBkdmJfYXR0YWNoKG1jNDRzODB4X2F0dGFjaCwgYWRhcC0+ZmUsIGkyY19hZGFwKQotCQkJPT0gTlVMTCA/IC1FTk9ERVYgOiAwOwotI2Vsc2UKLQkJcmV0ID0gLUVOT0RFVjsKLQkJaW5mbygiRnJlZXNjYWxlIE1DNDRTODAzIHR1bmVyIGZvdW5kIGJ1dCBubyBkcml2ZXIgZm9yIHRoYXQiIFwKLQkJCSJ0dW5lci4gTG9vayBhdCB0aGUgTGludXh0di5vcmcgZm9yIHR1bmVyIGRyaXZlciIgXAotCQkJInN0YXR1cy4iKTsKLSNlbmRpZgorCQlyZXQgPSBkdmJfYXR0YWNoKG1jNDRzODAzX2F0dGFjaCwgYWRhcC0+ZmUsIGkyY19hZGFwLAorCQkJJmFmOTAxNV9tYzQ0czgwM19jb25maWcpID09IE5VTEwgPyAtRU5PREVWIDogMDsKIAkJYnJlYWs7CiAJY2FzZSBBRjkwMTNfVFVORVJfVU5LTk9XTjoKIAlkZWZhdWx0OgpAQCAtMTIxOCw2ICsxMjM2LDcgQEAKIAl7VVNCX0RFVklDRShVU0JfVklEX0FWRVJNRURJQSwgVVNCX1BJRF9BVkVSTUVESUFfQTMwOSl9LAogLyogMTUgKi97VVNCX0RFVklDRShVU0JfVklEX01TSV8yLCAgICAgVVNCX1BJRF9NU0lfRElHSV9WT1hfTUlOSV9JSUkpfSwKIAl7VVNCX0RFVklDRShVU0JfVklEX0tXT1JMRF8yLCAgVVNCX1BJRF9LV09STERfMzk1VSl9LAorCXtVU0JfREVWSUNFKFVTQl9WSURfS1dPUkxEXzIsICBVU0JfUElEX0tXT1JMRF8zOTVVXzIpfSwKIAl7MH0sCiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRSh1c2IsIGFmOTAxNV91c2JfdGFibGUpOwpAQCAtMTQxNyw3ICsxNDM2LDggQEAKIAkJCXsKIAkJCQkubmFtZSA9ICJLV29ybGQgVVNCIERWQi1UIFRWIFN0aWNrIElJICIgXAogCQkJCQkiKFZTLURWQi1UIDM5NVUpIiwKLQkJCQkuY29sZF9pZHMgPSB7JmFmOTAxNV91c2JfdGFibGVbMTZdLCBOVUxMfSwKKwkJCQkuY29sZF9pZHMgPSB7JmFmOTAxNV91c2JfdGFibGVbMTZdLAorCQkJCQkgICAgICZhZjkwMTVfdXNiX3RhYmxlWzE3XSwgTlVMTH0sCiAJCQkJLndhcm1faWRzID0ge05VTEx9LAogCQkJfSwKIAkJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvYWY5MDE1LmgKaW5kZXggMjFjNzc4Mi4uMDBlMjU3MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9hZjkwMTUuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2FmOTAxNS5oCkBAIC0xMjQsNiArMTI0LDcgQEAKIAlBRjkwMTVfUkVNT1RFX01TSV9ESUdJVk9YX01JTklfSUlfVjMsCiAJQUY5MDE1X1JFTU9URV9NWUdJQ1RWX1U3MTgsCiAJQUY5MDE1X1JFTU9URV9ESUdJVFRSQURFX0RWQl9ULAorCUFGOTAxNV9SRU1PVEVfQVZFUk1FRElBX0tTLAogfTsKIAogLyogTGVhZHRlayBXaW5GYXN0IERUViBEb25nbGUgR29sZCAqLwpAQCAtNTk3LDYgKzU5OCwzNiBAQAogCTB4MDMsIDB4ZmMsIDB4MDMsIDB4ZmMsIDB4MGUsIDB4MDUsIDB4MDAsCiB9OwogCitzdGF0aWMgdTggYWY5MDE1X2lyX3RhYmxlX2F2ZXJtZWRpYV9rc1tdID0geworCTB4MDUsIDB4ZmEsIDB4MDEsIDB4ZmUsIDB4MTIsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgwMiwgMHhmZCwgMHgwZSwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDAzLCAweGZjLCAweDBkLCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MDQsIDB4ZmIsIDB4MmUsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgwNSwgMHhmYSwgMHgyZCwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDA2LCAweGY5LCAweDEwLCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MDcsIDB4ZjgsIDB4MGYsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgwOCwgMHhmNywgMHgzZCwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDA5LCAweGY2LCAweDFlLCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MGEsIDB4ZjUsIDB4MWYsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgwYiwgMHhmNCwgMHgyMCwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDBjLCAweGYzLCAweDIxLCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MGQsIDB4ZjIsIDB4MjIsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgwZSwgMHhmMSwgMHgyMywgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDBmLCAweGYwLCAweDI0LCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MTAsIDB4ZWYsIDB4MjUsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgxMSwgMHhlZSwgMHgyNiwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDEyLCAweGVkLCAweDI3LCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MTMsIDB4ZWMsIDB4MDQsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgxNSwgMHhlYSwgMHgwYSwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDE2LCAweGU5LCAweDExLCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MTcsIDB4ZTgsIDB4MTUsIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHgxOCwgMHhlNywgMHgxNiwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDFjLCAweGUzLCAweDA1LCAweDA1LCAweDAwLAorCTB4MDUsIDB4ZmEsIDB4MWQsIDB4ZTIsIDB4MDksIDB4MDUsIDB4MDAsCisJMHgwNSwgMHhmYSwgMHg0ZCwgMHhiMiwgMHgzZiwgMHgwNSwgMHgwMCwKKwkweDA1LCAweGZhLCAweDU2LCAweGE5LCAweDNlLCAweDA1LCAweDAwCit9OworCiAvKiBEaWdpdHRyYWRlIERWQi1UIFVTQiBTdGljayAqLwogc3RhdGljIHN0cnVjdCBkdmJfdXNiX3JjX2tleSBhZjkwMTVfcmNfa2V5c19kaWdpdHRyYWRlW10gPSB7CiAJeyAweDAxLCAweDBmLCBLRVlfTEFTVCB9LAkvKiBSRVRVUk4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2U2MjMwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NlNjIzMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjU4NjI4MjAKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2NlNjIzMC5jCkBAIC0wLDAgKzEsMzI4IEBACisvKgorICogRFZCIFVTQiBMaW51eCBkcml2ZXIgZm9yIEludGVsIENFNjIzMCBEVkItVCBVU0IyLjAgcmVjZWl2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+CisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpbmNsdWRlICJjZTYyMzAuaCIKKyNpbmNsdWRlICJ6bDEwMzUzLmgiCisjaW5jbHVkZSAibXhsNTAwNXMuaCIKKworLyogZGVidWcgKi8KK3N0YXRpYyBpbnQgZHZiX3VzYl9jZTYyMzBfZGVidWc7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIGR2Yl91c2JfY2U2MjMwX2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgInNldCBkZWJ1Z2dpbmcgbGV2ZWwiIERWQl9VU0JfREVCVUdfU1RBVFVTKTsKK0RWQl9ERUZJTkVfTU9EX09QVF9BREFQVEVSX05SKGFkYXB0ZXJfbnIpOworCitzdGF0aWMgc3RydWN0IHpsMTAzNTNfY29uZmlnIGNlNjIzMF96bDEwMzUzX2NvbmZpZzsKKworc3RhdGljIGludCBjZTYyMzBfcndfdWRldihzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiwgc3RydWN0IHJlcV90ICpyZXEpCit7CisJaW50IHJldDsKKwl1bnNpZ25lZCBpbnQgcGlwZTsKKwl1OCByZXF1ZXN0OworCXU4IHJlcXVlc3R0eXBlOworCXUxNiB2YWx1ZTsKKwl1MTYgaW5kZXg7CisJdTggYnVmW3JlcS0+ZGF0YV9sZW5dOworCisJcmVxdWVzdCA9IHJlcS0+Y21kOworCXZhbHVlID0gcmVxLT52YWx1ZTsKKwlpbmRleCA9IHJlcS0+aW5kZXg7CisKKwlzd2l0Y2ggKHJlcS0+Y21kKSB7CisJY2FzZSBJMkNfUkVBRDoKKwljYXNlIERFTU9EX1JFQUQ6CisJY2FzZSBSRUdfUkVBRDoKKwkJcmVxdWVzdHR5cGUgPSAoVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9JTik7CisJCWJyZWFrOworCWNhc2UgSTJDX1dSSVRFOgorCWNhc2UgREVNT0RfV1JJVEU6CisJY2FzZSBSRUdfV1JJVEU6CisJCXJlcXVlc3R0eXBlID0gKFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VUKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyKCJ1bmtub3duIGNvbW1hbmQ6JTAyeCIsIHJlcS0+Y21kKTsKKwkJcmV0ID0gLUVQRVJNOworCQlnb3RvIGVycm9yOworCX0KKworCWlmIChyZXF1ZXN0dHlwZSA9PSAoVVNCX1RZUEVfVkVORE9SIHwgVVNCX0RJUl9PVVQpKSB7CisJCS8qIHdyaXRlICovCisJCW1lbWNweShidWYsIHJlcS0+ZGF0YSwgcmVxLT5kYXRhX2xlbik7CisJCXBpcGUgPSB1c2Jfc25kY3RybHBpcGUodWRldiwgMCk7CisJfSBlbHNlIHsKKwkJLyogcmVhZCAqLworCQlwaXBlID0gdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApOworCX0KKworCW1zbGVlcCgxKTsgLyogYXZvaWQgSTJDIGVycm9ycyAqLworCisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsIHBpcGUsIHJlcXVlc3QsIHJlcXVlc3R0eXBlLCB2YWx1ZSwgaW5kZXgsCisJCQkJYnVmLCBzaXplb2YoYnVmKSwgQ0U2MjMwX1VTQl9USU1FT1VUKTsKKworCWNlNjIzMF9kZWJ1Z19kdW1wKHJlcXVlc3QsIHJlcXVlc3R0eXBlLCB2YWx1ZSwgaW5kZXgsIGJ1ZiwKKwkJcmVxLT5kYXRhX2xlbiwgZGViX3hmZXIpOworCisJaWYgKHJldCA8IDApCisJCWRlYl9pbmZvKCIlczogdXNiX2NvbnRyb2xfbXNnIGZhaWxlZDolZFxuIiwgX19mdW5jX18sIHJldCk7CisJZWxzZQorCQlyZXQgPSAwOworCisJLyogcmVhZCByZXF1ZXN0LCBjb3B5IHJldHVybmVkIGRhdGEgdG8gcmV0dXJuIGJ1ZiAqLworCWlmICghcmV0ICYmIHJlcXVlc3R0eXBlID09IChVU0JfVFlQRV9WRU5ET1IgfCBVU0JfRElSX0lOKSkKKwkJbWVtY3B5KHJlcS0+ZGF0YSwgYnVmLCByZXEtPmRhdGFfbGVuKTsKKworZXJyb3I6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBjZTYyMzBfY3RybF9tc2coc3RydWN0IGR2Yl91c2JfZGV2aWNlICpkLCBzdHJ1Y3QgcmVxX3QgKnJlcSkKK3sKKwlyZXR1cm4gY2U2MjMwX3J3X3VkZXYoZC0+dWRldiwgcmVxKTsKK30KKworLyogSTJDICovCitzdGF0aWMgaW50IGNlNjIzMF9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIHN0cnVjdCBpMmNfbXNnIG1zZ1tdLAorCQkJICAgaW50IG51bSkKK3sKKwlzdHJ1Y3QgZHZiX3VzYl9kZXZpY2UgKmQgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXApOworCWludCBpID0gMDsKKwlzdHJ1Y3QgcmVxX3QgcmVxOworCWludCByZXQgPSAwOworCW1lbXNldCgmcmVxLCAwLCBzaXplb2YoJnJlcSkpOworCisJaWYgKG51bSA+IDIpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZC0+aTJjX211dGV4KSA8IDApCisJCXJldHVybiAtRUFHQUlOOworCisJd2hpbGUgKGkgPCBudW0pIHsKKwkJaWYgKG51bSA+IGkgKyAxICYmIChtc2dbaSsxXS5mbGFncyAmIEkyQ19NX1JEKSkgeworCQkJaWYgKG1zZ1tpXS5hZGRyID09CisJCQkJY2U2MjMwX3psMTAzNTNfY29uZmlnLmRlbW9kX2FkZHJlc3MpIHsKKwkJCQlyZXEuY21kID0gREVNT0RfUkVBRDsKKwkJCQlyZXEudmFsdWUgPSBtc2dbaV0uYWRkciA+PiAxOworCQkJCXJlcS5pbmRleCA9IG1zZ1tpXS5idWZbMF07CisJCQkJcmVxLmRhdGFfbGVuID0gbXNnW2krMV0ubGVuOworCQkJCXJlcS5kYXRhID0gJm1zZ1tpKzFdLmJ1ZlswXTsKKwkJCQlyZXQgPSBjZTYyMzBfY3RybF9tc2coZCwgJnJlcSk7CisJCQl9IGVsc2UgeworCQkJCWVycigiaTJjIHJlYWQgbm90IGltcGxlbWVudGVkIik7CisJCQkJcmV0ID0gLUVQRVJNOworCQkJfQorCQkJaSArPSAyOworCQl9IGVsc2UgeworCQkJaWYgKG1zZ1tpXS5hZGRyID09CisJCQkJY2U2MjMwX3psMTAzNTNfY29uZmlnLmRlbW9kX2FkZHJlc3MpIHsKKwkJCQlyZXEuY21kID0gREVNT0RfV1JJVEU7CisJCQkJcmVxLnZhbHVlID0gbXNnW2ldLmFkZHIgPj4gMTsKKwkJCQlyZXEuaW5kZXggPSBtc2dbaV0uYnVmWzBdOworCQkJCXJlcS5kYXRhX2xlbiA9IG1zZ1tpXS5sZW4tMTsKKwkJCQlyZXEuZGF0YSA9ICZtc2dbaV0uYnVmWzFdOworCQkJCXJldCA9IGNlNjIzMF9jdHJsX21zZyhkLCAmcmVxKTsKKwkJCX0gZWxzZSB7CisJCQkJcmVxLmNtZCA9IEkyQ19XUklURTsKKwkJCQlyZXEudmFsdWUgPSAweDIwMDAgKyAobXNnW2ldLmFkZHIgPj4gMSk7CisJCQkJcmVxLmluZGV4ID0gMHgwMDAwOworCQkJCXJlcS5kYXRhX2xlbiA9IG1zZ1tpXS5sZW47CisJCQkJcmVxLmRhdGEgPSAmbXNnW2ldLmJ1ZlswXTsKKwkJCQlyZXQgPSBjZTYyMzBfY3RybF9tc2coZCwgJnJlcSk7CisJCQl9CisJCQlpICs9IDE7CisJCX0KKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCX0KKworCW11dGV4X3VubG9jaygmZC0+aTJjX211dGV4KTsKKwlyZXR1cm4gcmV0ID8gcmV0IDogaTsKK30KKworc3RhdGljIHUzMiBjZTYyMzBfaTJjX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQoreworCXJldHVybiBJMkNfRlVOQ19JMkM7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBjZTYyMzBfaTJjX2FsZ28gPSB7CisJLm1hc3Rlcl94ZmVyICAgPSBjZTYyMzBfaTJjX3hmZXIsCisJLmZ1bmN0aW9uYWxpdHkgPSBjZTYyMzBfaTJjX2Z1bmMsCit9OworCisvKiBDYWxsYmFja3MgZm9yIERWQiBVU0IgKi8KK3N0YXRpYyBzdHJ1Y3QgemwxMDM1M19jb25maWcgY2U2MjMwX3psMTAzNTNfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHgxZSwKKwkuYWRjX2Nsb2NrID0gNDUwMDAwLAorCS5pZjIgPSA0NTcwMCwKKwkubm9fdHVuZXIgPSAxLAorCS5wYXJhbGxlbF90cyA9IDEsCisJLmNsb2NrX2N0bF8xID0gMHgzNCwKKwkucGxsXzAgPSAweDBlLAorfTsKKworc3RhdGljIGludCBjZTYyMzBfemwxMDM1M19mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlkZWJfaW5mbygiJXM6XG4iLCBfX2Z1bmNfXyk7CisJYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKHpsMTAzNTNfYXR0YWNoLCAmY2U2MjMwX3psMTAzNTNfY29uZmlnLAorCQkmYWRhcC0+ZGV2LT5pMmNfYWRhcCk7CisJaWYgKGFkYXAtPmZlID09IE5VTEwpCisJCXJldHVybiAtRU5PREVWOworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IG14bDUwMDVzX2NvbmZpZyBjZTYyMzBfbXhsNTAwM3NfY29uZmlnID0geworCS5pMmNfYWRkcmVzcyAgICAgPSAweGM2LAorCS5pZl9mcmVxICAgICAgICAgPSBJRl9GUkVRXzQ1NzAwMDBIWiwKKwkueHRhbF9mcmVxICAgICAgID0gQ1JZU1RBTF9GUkVRXzE2MDAwMDAwSFosCisJLmFnY19tb2RlICAgICAgICA9IE1YTF9TSU5HTEVfQUdDLAorCS50cmFja2luZ19maWx0ZXIgPSBNWExfVEZfREVGQVVMVCwKKwkucnNzaV9lbmFibGUgICAgID0gTVhMX1JTU0lfRU5BQkxFLAorCS5jYXBfc2VsZWN0ICAgICAgPSBNWExfQ0FQX1NFTF9FTkFCTEUsCisJLmRpdl9vdXQgICAgICAgICA9IE1YTF9ESVZfT1VUXzQsCisJLmNsb2NrX291dCAgICAgICA9IE1YTF9DTE9DS19PVVRfRElTQUJMRSwKKwkub3V0cHV0X2xvYWQgICAgID0gTVhMNTAwNVNfSUZfT1VUUFVUX0xPQURfMjAwX09ITSwKKwkudG9wCQkgPSBNWEw1MDA1U19UT1BfMjVQMiwKKwkubW9kX21vZGUgICAgICAgID0gTVhMX0RJR0lUQUxfTU9ERSwKKwkuaWZfbW9kZSAgICAgICAgID0gTVhMX1pFUk9fSUYsCisJLkFnY01hc3RlckJ5dGUgICA9IDB4MDAsCit9OworCitzdGF0aWMgaW50IGNlNjIzMF9teGw1MDAzc190dW5lcl9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlpbnQgcmV0OworCWRlYl9pbmZvKCIlczpcbiIsIF9fZnVuY19fKTsKKwlyZXQgPSBkdmJfYXR0YWNoKG14bDUwMDVzX2F0dGFjaCwgYWRhcC0+ZmUsICZhZGFwLT5kZXYtPmkyY19hZGFwLAorCQkJJmNlNjIzMF9teGw1MDAzc19jb25maWcpID09IE5VTEwgPyAtRU5PREVWIDogMDsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGNlNjIzMF9wb3dlcl9jdHJsKHN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCwgaW50IG9ub2ZmKQoreworCWludCByZXQ7CisJZGViX2luZm8oIiVzOiBvbm9mZjolZFxuIiwgX19mdW5jX18sIG9ub2ZmKTsKKworCS8qIEludGVyZmFjZU51bWJlciAxIC8gQWx0ZXJuYXRlU2V0dGluZyAwICAgICBpZGxlCisJICAgSW50ZXJmYWNlTnVtYmVyIDEgLyBBbHRlcm5hdGVTZXR0aW5nIDEgICAgIHN0cmVhbWluZyAqLworCXJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKGQtPnVkZXYsIDEsIG9ub2ZmKTsKKwlpZiAocmV0KQorCQllcnIoInVzYl9zZXRfaW50ZXJmYWNlIGZhaWxlZCB3aXRoIGVycm9yOiVkIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKKy8qIERWQiBVU0IgRHJpdmVyIHN0dWZmICovCitzdGF0aWMgc3RydWN0IGR2Yl91c2JfZGV2aWNlX3Byb3BlcnRpZXMgY2U2MjMwX3Byb3BlcnRpZXM7CisKK3N0YXRpYyBpbnQgY2U2MjMwX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAorCQkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCWludCByZXQgPSAwOworCXN0cnVjdCBkdmJfdXNiX2RldmljZSAqZCA9IE5VTEw7CisKKwlkZWJfaW5mbygiJXM6IGludGVyZmFjZTolZFxuIiwgX19mdW5jX18sCisJCWludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIpOworCisJaWYgKGludGYtPmN1cl9hbHRzZXR0aW5nLT5kZXNjLmJJbnRlcmZhY2VOdW1iZXIgPT0gMSkgeworCQlyZXQgPSBkdmJfdXNiX2RldmljZV9pbml0KGludGYsICZjZTYyMzBfcHJvcGVydGllcywgVEhJU19NT0RVTEUsCisJCQkmZCwgYWRhcHRlcl9ucik7CisJCWlmIChyZXQpCisJCQllcnIoImluaXQgZmFpbGVkIHdpdGggZXJyb3I6JWRcbiIsIHJldCk7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGNlNjIzMF90YWJsZVtdID0geworCXsgVVNCX0RFVklDRShVU0JfVklEX0lOVEVMLCBVU0JfUElEX0lOVEVMX0NFOTUwMCkgfSwKKwl7IH0gLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgY2U2MjMwX3RhYmxlKTsKKworc3RhdGljIHN0cnVjdCBkdmJfdXNiX2RldmljZV9wcm9wZXJ0aWVzIGNlNjIzMF9wcm9wZXJ0aWVzID0geworCS5jYXBzID0gRFZCX1VTQl9JU19BTl9JMkNfQURBUFRFUiwKKworCS51c2JfY3RybCA9IERFVklDRV9TUEVDSUZJQywKKwkubm9fcmVjb25uZWN0ID0gMSwKKworCS5zaXplX29mX3ByaXYgPSAwLAorCisJLm51bV9hZGFwdGVycyA9IDEsCisJLmFkYXB0ZXIgPSB7CisJCXsKKwkJCS5mcm9udGVuZF9hdHRhY2ggID0gY2U2MjMwX3psMTAzNTNfZnJvbnRlbmRfYXR0YWNoLAorCQkJLnR1bmVyX2F0dGFjaCAgICAgPSBjZTYyMzBfbXhsNTAwM3NfdHVuZXJfYXR0YWNoLAorCQkJLnN0cmVhbSA9IHsKKwkJCQkudHlwZSA9IFVTQl9CVUxLLAorCQkJCS5jb3VudCA9IDYsCisJCQkJLmVuZHBvaW50ID0gMHg4MiwKKwkJCQkudSA9IHsKKwkJCQkJLmJ1bGsgPSB7CisJCQkJCQkuYnVmZmVyc2l6ZSA9IDUxMiwKKwkJCQkJfQorCQkJCX0KKwkJCX0sCisJCX0KKwl9LAorCisJLnBvd2VyX2N0cmwgPSBjZTYyMzBfcG93ZXJfY3RybCwKKworCS5pMmNfYWxnbyA9ICZjZTYyMzBfaTJjX2FsZ28sCisKKwkubnVtX2RldmljZV9kZXNjcyA9IDEsCisJLmRldmljZXMgPSB7CisJCXsKKwkJCS5uYW1lID0gIkludGVsIENFOTUwMCByZWZlcmVuY2UgZGVzaWduIiwKKwkJCS5jb2xkX2lkcyA9IHtOVUxMfSwKKwkJCS53YXJtX2lkcyA9IHsmY2U2MjMwX3RhYmxlWzBdLCBOVUxMfSwKKwkJfSwKKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgY2U2MjMwX2RyaXZlciA9IHsKKwkubmFtZSAgICAgICA9ICJkdmJfdXNiX2NlNjIzMCIsCisJLnByb2JlICAgICAgPSBjZTYyMzBfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBkdmJfdXNiX2RldmljZV9leGl0LAorCS5pZF90YWJsZSAgID0gY2U2MjMwX3RhYmxlLAorfTsKKworLyogbW9kdWxlIHN0dWZmICovCitzdGF0aWMgaW50IF9faW5pdCBjZTYyMzBfbW9kdWxlX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCWRlYl9pbmZvKCIlczpcbiIsIF9fZnVuY19fKTsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJmNlNjIzMF9kcml2ZXIpOworCWlmIChyZXQpCisJCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZCB3aXRoIGVycm9yOiVkIiwgcmV0KTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBjZTYyMzBfbW9kdWxlX2V4aXQodm9pZCkKK3sKKwlkZWJfaW5mbygiJXM6XG4iLCBfX2Z1bmNfXyk7CisJLyogZGVyZWdpc3RlciB0aGlzIGRyaXZlciBmcm9tIHRoZSBVU0Igc3Vic3lzdGVtICovCisJdXNiX2RlcmVnaXN0ZXIoJmNlNjIzMF9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChjZTYyMzBfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQoY2U2MjMwX21vZHVsZV9leGl0KTsKKworTU9EVUxFX0FVVEhPUigiQW50dGkgUGFsb3NhYXJpIDxjcm9wZUBpa2kuZmk+Iik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRyaXZlciBmb3IgSW50ZWwgQ0U2MjMwIERWQi1UIFVTQjIuMCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9jZTYyMzAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2U2MjMwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOTdjNDI0OAotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvY2U2MjMwLmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIERWQiBVU0IgTGludXggZHJpdmVyIGZvciBJbnRlbCBDRTYyMzAgRFZCLVQgVVNCMi4wIHJlY2VpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFudHRpIFBhbG9zYWFyaSA8Y3JvcGVAaWtpLmZpPgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogICAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqLworCisjaWZuZGVmIF9EVkJfVVNCX0NFNjIzMF9IXworI2RlZmluZSBfRFZCX1VTQl9DRTYyMzBfSF8KKworI2RlZmluZSBEVkJfVVNCX0xPR19QUkVGSVggImNlNjIzMCIKKyNpbmNsdWRlICJkdmItdXNiLmgiCisKKyNkZWZpbmUgZGViX2luZm8oYXJncy4uLikgZHByaW50ayhkdmJfdXNiX2NlNjIzMF9kZWJ1ZywgMHgwMSwgYXJncykKKyNkZWZpbmUgZGViX3JjKGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX2NlNjIzMF9kZWJ1ZywgMHgwMiwgYXJncykKKyNkZWZpbmUgZGViX3hmZXIoYXJncy4uLikgZHByaW50ayhkdmJfdXNiX2NlNjIzMF9kZWJ1ZywgMHgwNCwgYXJncykKKyNkZWZpbmUgZGViX3JlZyhhcmdzLi4uKSAgZHByaW50ayhkdmJfdXNiX2NlNjIzMF9kZWJ1ZywgMHgwOCwgYXJncykKKyNkZWZpbmUgZGViX2kyYyhhcmdzLi4uKSAgZHByaW50ayhkdmJfdXNiX2NlNjIzMF9kZWJ1ZywgMHgxMCwgYXJncykKKyNkZWZpbmUgZGViX2Z3KGFyZ3MuLi4pICAgZHByaW50ayhkdmJfdXNiX2NlNjIzMF9kZWJ1ZywgMHgyMCwgYXJncykKKworI2RlZmluZSBjZTYyMzBfZGVidWdfZHVtcChyLCB0LCB2LCBpLCBiLCBsLCBmdW5jKSB7IFwKKwlpbnQgbG9vcF87IFwKKwlmdW5jKCIlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMngiLCBcCisJCXQsIHIsIHYgJiAweGZmLCB2ID4+IDgsIGkgJiAweGZmLCBpID4+IDgsIGwgJiAweGZmLCBsID4+IDgpOyBcCisJaWYgKHQgPT0gKFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9ESVJfT1VUKSkgXAorCQlmdW5jKCIgPj4+ICIpOyBcCisJZWxzZSBcCisJCWZ1bmMoIiA8PDwgIik7IFwKKwlmb3IgKGxvb3BfID0gMDsgbG9vcF8gPCBsOyBsb29wXysrKSBcCisJCWZ1bmMoIiUwMnggIiwgYltsb29wX10pOyBcCisJZnVuYygiXG4iKTtcCit9CisKKyNkZWZpbmUgQ0U2MjMwX1VTQl9USU1FT1VUIDEwMDAKKworc3RydWN0IHJlcV90IHsKKwl1OCAgY21kOyAgICAgICAvKiBbMV0gKi8KKwl1MTYgdmFsdWU7ICAgICAvKiBbMnwzXSAqLworCXUxNiBpbmRleDsgICAgIC8qIFs0fDVdICovCisJdTE2IGRhdGFfbGVuOyAgLyogWzZ8N10gKi8KKwl1OCAgKmRhdGE7Cit9OworCitlbnVtIGNlNjIzMF9jbWQgeworCUNPTkZJR19SRUFEICAgICAgICAgID0gMHhkMCwgLyogcmQgMCAodW5jbGVhcikgKi8KKwlVTktOT1dOX1dSSVRFICAgICAgICA9IDB4YzcsIC8qIHdyIDcgKHVuY2xlYXIpICovCisJSTJDX1JFQUQgICAgICAgICAgICAgPSAweGQ5LCAvKiByZCA5ICh1bmNsZWFyKSAqLworCUkyQ19XUklURSAgICAgICAgICAgID0gMHhjYSwgLyogd3IgYSAqLworCURFTU9EX1JFQUQgICAgICAgICAgID0gMHhkYiwgLyogcmQgYiAqLworCURFTU9EX1dSSVRFICAgICAgICAgID0gMHhjYywgLyogd3IgYyAqLworCVJFR19SRUFEICAgICAgICAgICAgID0gMHhkZSwgLyogcmQgZSAqLworCVJFR19XUklURSAgICAgICAgICAgID0gMHhjZiwgLyogd3IgZiAqLworfTsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfY29yZS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2NvcmUuYwppbmRleCAyMDBiMjE1Li5kYjdmN2Y3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9jb3JlLmMKQEAgLTE1OCw2ICsxNTgsMTAgQEAKIAkJCQllcnIoImkyYyByZWFkIGVycm9yIChzdGF0dXMgPSAlZClcbiIsIHJlc3VsdCk7CiAJCQkJYnJlYWs7CiAJCQl9CisKKwkJCWRlYl9kYXRhKCI8PDwgIik7CisJCQlkZWJ1Z19kdW1wKG1zZ1tpXS5idWYsIG1zZ1tpXS5sZW4sIGRlYl9kYXRhKTsKKwogCQl9IGVsc2UgewogCQkJLyogV3JpdGUgcmVxdWVzdCAqLwogCQkJYnVmWzBdID0gUkVRVUVTVF9ORVdfSTJDX1dSSVRFOwpAQCAtMTY5LDYgKzE3Myw5IEBACiAJCQkvKiBUaGUgQWN0dWFsIGkyYyBwYXlsb2FkICovCiAJCQltZW1jcHkoJmJ1Zls0XSwgbXNnW2ldLmJ1ZiwgbXNnW2ldLmxlbik7CiAKKwkJCWRlYl9kYXRhKCI+Pj4gIik7CisJCQlkZWJ1Z19kdW1wKGJ1ZiwgbXNnW2ldLmxlbiArIDQsIGRlYl9kYXRhKTsKKwogCQkJcmVzdWx0ID0gdXNiX2NvbnRyb2xfbXNnKGQtPnVkZXYsCiAJCQkJCQkgdXNiX3NuZGN0cmxwaXBlKGQtPnVkZXYsIDApLAogCQkJCQkJIFJFUVVFU1RfTkVXX0kyQ19XUklURSwKQEAgLTIxMSw3ICsyMTgsOCBAQAogCiAJCQkvKiBzcGVjaWFsIHRoaW5nIGluIHRoZSBjdXJyZW50IGZpcm13YXJlOiB3aGVuIGxlbmd0aCBpcyB6ZXJvIHRoZSByZWFkLWZhaWxlZCAqLwogCQkJaWYgKChsZW4gPSBkaWIwNzAwX2N0cmxfcmQoZCwgYnVmLCBtc2dbaV0ubGVuICsgMiwgbXNnW2krMV0uYnVmLCBtc2dbaSsxXS5sZW4pKSA8PSAwKSB7Ci0JCQkJZGViX2luZm8oIkkyQyByZWFkIGZhaWxlZCBvbiBhZGRyZXNzICV4XG4iLCBtc2dbaV0uYWRkcik7CisJCQkJZGViX2luZm8oIkkyQyByZWFkIGZhaWxlZCBvbiBhZGRyZXNzIDB4JTAyeFxuIiwKKwkJCQkJIG1zZ1tpXS5hZGRyKTsKIAkJCQlicmVhazsKIAkJCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZGliMDcwMF9kZXZpY2VzLmMKaW5kZXggNjM1ZDMwYS4uOGRkYmFkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kaWIwNzAwX2RldmljZXMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2RpYjA3MDBfZGV2aWNlcy5jCkBAIC0xNyw2ICsxNyw4IEBACiAjaW5jbHVkZSAieGM1MDAwLmgiCiAjaW5jbHVkZSAiczVoMTQxMS5oIgogI2luY2x1ZGUgImRpYjAwNzAuaCIKKyNpbmNsdWRlICJsZ2R0MzMwNS5oIgorI2luY2x1ZGUgIm14bDUwMDd0LmgiCiAKIHN0YXRpYyBpbnQgZm9yY2VfbG5hX2FjdGl2YXRpb247CiBtb2R1bGVfcGFyYW0oZm9yY2VfbG5hX2FjdGl2YXRpb24sIGludCwgMDY0NCk7CkBAIC0yNjIsNyArMjY0LDEyIEBACiAJCW1zbGVlcCgxMCk7CiAJCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPMTAsIEdQSU9fT1VULCAxKTsKIAkJbXNsZWVwKDEwKTsKLQkJZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uKCZhZGFwLT5kZXYtPmkyY19hZGFwLDEsMTgsc3RrNzcwMGRfZGliNzAwMHBfbXQyMjY2X2NvbmZpZyk7CisJCWlmIChkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24oJmFkYXAtPmRldi0+aTJjX2FkYXAsIDEsIDE4LAorCQkJCQkgICAgIHN0azc3MDBkX2RpYjcwMDBwX210MjI2Nl9jb25maWcpCisJCSAgICAhPSAwKSB7CisJCQllcnIoIiVzOiBkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24gZmFpbGVkLiAgQ2Fubm90IGNvbnRpbnVlXG4iLCBfX2Z1bmNfXyk7CisJCQlyZXR1cm4gLUVOT0RFVjsKKwkJfQogCX0KIAogCWFkYXAtPmZlID0gZHZiX2F0dGFjaChkaWI3MDAwcF9hdHRhY2gsICZhZGFwLT5kZXYtPmkyY19hZGFwLDB4ODArKGFkYXAtPmlkIDw8IDEpLApAQCAtMjg0LDcgKzI5MSwxMiBAQAogCQlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzEwLCBHUElPX09VVCwgMSk7CiAJCW1zbGVlcCgxMCk7CiAJCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPMCwgR1BJT19PVVQsIDEpOwotCQlkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24oJmFkYXAtPmRldi0+aTJjX2FkYXAsMiwxOCxzdGs3NzAwZF9kaWI3MDAwcF9tdDIyNjZfY29uZmlnKTsKKwkJaWYgKGRpYjcwMDBwX2kyY19lbnVtZXJhdGlvbigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgMiwgMTgsCisJCQkJCSAgICAgc3RrNzcwMGRfZGliNzAwMHBfbXQyMjY2X2NvbmZpZykKKwkJICAgICE9IDApIHsKKwkJCWVycigiJXM6IGRpYjcwMDBwX2kyY19lbnVtZXJhdGlvbiBmYWlsZWQuICBDYW5ub3QgY29udGludWVcbiIsIF9fZnVuY19fKTsKKwkJCXJldHVybiAtRU5PREVWOworCQl9CiAJfQogCiAJYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKGRpYjcwMDBwX2F0dGFjaCwgJmFkYXAtPmRldi0+aTJjX2FkYXAsMHg4MCsoYWRhcC0+aWQgPDwgMSksCkBAIC00MjEsOCArNDMzLDEyIEBACiAJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8wLCBHUElPX09VVCwgMSk7CiAJbXNsZWVwKDEwKTsKIAotCWRpYjcwMDBwX2kyY19lbnVtZXJhdGlvbigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgMSwgMTgsCi0JCSZzdGs3NzAwcGhfZGliNzcwMF94YzMwMjhfY29uZmlnKTsKKwlpZiAoZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uKCZhZGFwLT5kZXYtPmkyY19hZGFwLCAxLCAxOCwKKwkJCQkgICAgICZzdGs3NzAwcGhfZGliNzcwMF94YzMwMjhfY29uZmlnKSAhPSAwKSB7CisJCWVycigiJXM6IGRpYjcwMDBwX2kyY19lbnVtZXJhdGlvbiBmYWlsZWQuICBDYW5ub3QgY29udGludWVcbiIsCisJCSAgICBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KIAogCWFkYXAtPmZlID0gZHZiX2F0dGFjaChkaWI3MDAwcF9hdHRhY2gsICZhZGFwLT5kZXYtPmkyY19hZGFwLCAweDgwLAogCQkmc3RrNzcwMHBoX2RpYjc3MDBfeGMzMDI4X2NvbmZpZyk7CkBAIC0xMTg3LDggKzEyMDMsMTIgQEAKIAltc2xlZXAoMTApOwogCWRpYjA3MDBfc2V0X2dwaW8oYWRhcC0+ZGV2LCBHUElPMCwgR1BJT19PVVQsIDEpOwogCi0JZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uKCZhZGFwLT5kZXYtPmkyY19hZGFwLCAxLCAxOCwKLQkJJmRpYjcwNzBwX2RpYjcwMDBwX2NvbmZpZyk7CisJaWYgKGRpYjcwMDBwX2kyY19lbnVtZXJhdGlvbigmYWRhcC0+ZGV2LT5pMmNfYWRhcCwgMSwgMTgsCisJCQkJICAgICAmZGliNzA3MHBfZGliNzAwMHBfY29uZmlnKSAhPSAwKSB7CisJCWVycigiJXM6IGRpYjcwMDBwX2kyY19lbnVtZXJhdGlvbiBmYWlsZWQuICBDYW5ub3QgY29udGludWVcbiIsCisJCSAgICBfX2Z1bmNfXyk7CisJCXJldHVybiAtRU5PREVWOworCX0KIAogCWFkYXAtPmZlID0gZHZiX2F0dGFjaChkaWI3MDAwcF9hdHRhY2gsICZhZGFwLT5kZXYtPmkyY19hZGFwLCAweDgwLAogCQkmZGliNzA3MHBfZGliNzAwMHBfY29uZmlnKTsKQEAgLTEyNDQsNyArMTI2NCwxMiBAQAogCW1zbGVlcCgxMCk7CiAJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU8wLCBHUElPX09VVCwgMSk7CiAKLQlkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24oJmFkYXAtPmRldi0+aTJjX2FkYXAsIDIsIDE4LCBzdGs3MDcwcGRfZGliNzAwMHBfY29uZmlnKTsKKwlpZiAoZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uKCZhZGFwLT5kZXYtPmkyY19hZGFwLCAyLCAxOCwKKwkJCQkgICAgIHN0azcwNzBwZF9kaWI3MDAwcF9jb25maWcpICE9IDApIHsKKwkJZXJyKCIlczogZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uIGZhaWxlZC4gIENhbm5vdCBjb250aW51ZVxuIiwKKwkJICAgIF9fZnVuY19fKTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQogCiAJYWRhcC0+ZmUgPSBkdmJfYXR0YWNoKGRpYjcwMDBwX2F0dGFjaCwgJmFkYXAtPmRldi0+aTJjX2FkYXAsIDB4ODAsICZzdGs3MDcwcGRfZGliNzAwMHBfY29uZmlnWzBdKTsKIAlyZXR1cm4gYWRhcC0+ZmUgPT0gTlVMTCA/IC1FTk9ERVYgOiAwOwpAQCAtMTM0Nyw2ICsxMzcyLDcyIEBACiAJCT09IE5VTEwgPyAtRU5PREVWIDogMDsKIH0KIAorc3RhdGljIHN0cnVjdCBsZ2R0MzMwNV9jb25maWcgaGN3X2xnZHQzMzA1X2NvbmZpZyA9IHsKKwkuaTJjX2FkZHIgICAgICAgICAgID0gMHgwZSwKKwkubXBlZ19tb2RlICAgICAgICAgID0gTEdEVDMzMDVfTVBFR19QQVJBTExFTCwKKwkudHBjbGtfZWRnZSAgICAgICAgID0gTEdEVDMzMDVfVFBDTEtfRkFMTElOR19FREdFLAorCS50cHZhbGlkX3BvbGFyaXR5ICAgPSBMR0RUMzMwNV9UUF9WQUxJRF9MT1csCisJLmRlbnlfaTJjX3JwdHIgICAgICA9IDAsCisJLnNwZWN0cmFsX2ludmVyc2lvbiA9IDEsCisJLnFhbV9pZl9raHogICAgICAgICA9IDYwMDAsCisJLnZzYl9pZl9raHogICAgICAgICA9IDYwMDAsCisJLnVzcmVmXzh2c2IgICAgICAgICA9IDB4MDUwMCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgbXhsNTAwN3RfY29uZmlnIGhjd19teGw1MDA3dF9jb25maWcgPSB7CisJLnh0YWxfZnJlcV9oeiA9IE14TF9YVEFMXzI1X01IWiwKKwkuaWZfZnJlcV9oeiA9IE14TF9JRl82X01IWiwKKwkuaW52ZXJ0X2lmID0gMSwKK307CisKKy8qIFRJR0VSLUFUU0MgbWFwOgorICAgR1BJTzAgIC0gTE5BX0NUUiAgKEg6IExOQSBwb3dlciBlbmFibGVkLCBMOiBMTkEgcG93ZXIgZGlzYWJsZWQpCisgICBHUElPMSAgLSBBTlRfU0VMICAoSDogVlBBLCBMOiBNQ1gpCisgICBHUElPNCAgLSBTQ0wyCisgICBHUElPNiAgLSBFTl9UVU5FUgorICAgR1BJTzcgIC0gU0RBMgorICAgR1BJTzEwIC0gREVNX1JTVAorCisgICBNWEwgaXMgYmVoaW5kIExHJ3MgaTJjIHJlcGVhdGVyLiAgTEcgaXMgb24gU0NMMi9TREEyIGdwaW9zIG9uIHRoZSBESUIKKyAqLworc3RhdGljIGludCBsZ2R0MzMwNV9mcm9udGVuZF9hdHRhY2goc3RydWN0IGR2Yl91c2JfYWRhcHRlciAqYWRhcCkKK3sKKwlzdHJ1Y3QgZGliMDcwMF9zdGF0ZSAqc3QgPSBhZGFwLT5kZXYtPnByaXY7CisKKwkvKiBNYWtlIHVzZSBvZiB0aGUgbmV3IGkyYyBmdW5jdGlvbnMgZnJvbSBGVyAxLjIwICovCisJc3QtPmZ3X3VzZV9uZXdfaTJjX2FwaSA9IDE7CisKKwlzdC0+ZGlzYWJsZV9zdHJlYW1pbmdfbWFzdGVyX21vZGUgPSAxOworCisJLyogZmUgcG93ZXIgZW5hYmxlICovCisJZGliMDcwMF9zZXRfZ3BpbyhhZGFwLT5kZXYsIEdQSU82LCBHUElPX09VVCwgMCk7CisJbXNsZWVwKDMwKTsKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzYsIEdQSU9fT1VULCAxKTsKKwltc2xlZXAoMzApOworCisJLyogZGVtb2QgcmVzZXQgKi8KKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzEwLCBHUElPX09VVCwgMSk7CisJbXNsZWVwKDMwKTsKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzEwLCBHUElPX09VVCwgMCk7CisJbXNsZWVwKDMwKTsKKwlkaWIwNzAwX3NldF9ncGlvKGFkYXAtPmRldiwgR1BJTzEwLCBHUElPX09VVCwgMSk7CisJbXNsZWVwKDMwKTsKKworCWFkYXAtPmZlID0gZHZiX2F0dGFjaChsZ2R0MzMwNV9hdHRhY2gsCisJCQkgICAgICAmaGN3X2xnZHQzMzA1X2NvbmZpZywKKwkJCSAgICAgICZhZGFwLT5kZXYtPmkyY19hZGFwKTsKKworCXJldHVybiBhZGFwLT5mZSA9PSBOVUxMID8gLUVOT0RFViA6IDA7Cit9CisKK3N0YXRpYyBpbnQgbXhsNTAwN3RfdHVuZXJfYXR0YWNoKHN0cnVjdCBkdmJfdXNiX2FkYXB0ZXIgKmFkYXApCit7CisJcmV0dXJuIGR2Yl9hdHRhY2gobXhsNTAwN3RfYXR0YWNoLCBhZGFwLT5mZSwKKwkJCSAgJmFkYXAtPmRldi0+aTJjX2FkYXAsIDB4NjAsCisJCQkgICZoY3dfbXhsNTAwN3RfY29uZmlnKSA9PSBOVUxMID8gLUVOT0RFViA6IDA7Cit9CisKKwogLyogRFZCLVVTQiBhbmQgVVNCIHN0dWZmIGZvbGxvd3MgKi8KIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRpYjA3MDBfdXNiX2lkX3RhYmxlW10gPSB7CiAvKiAwICovCXsgVVNCX0RFVklDRShVU0JfVklEX0RJQkNPTSwgICAgVVNCX1BJRF9ESUJDT01fU1RLNzcwMFApIH0sCkBAIC0xMzk2LDYgKzE0ODcsMTIgQEAKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9URVJSQVRFQywJVVNCX1BJRF9URVJSQVRFQ19DSU5FUkdZX1RfRVhQUkVTUykgfSwKIAl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9URVJSQVRFQywKIAkJCVVTQl9QSURfVEVSUkFURUNfQ0lORVJHWV9EVF9YU19ESVZFUlNJVFlfMikgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9TT05ZLAlVU0JfUElEX1NPTllfUExBWVRWKSB9LAorLyogNDUgKi97IFVTQl9ERVZJQ0UoVVNCX1ZJRF9ZVUFOLCAgICAgIFVTQl9QSURfWVVBTl9QRDM3OFMpIH0sCisJeyBVU0JfREVWSUNFKFVTQl9WSURfSEFVUFBBVUdFLCBVU0JfUElEX0hBVVBQQVVHRV9USUdFUl9BVFNDKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX0hBVVBQQVVHRSwgVVNCX1BJRF9IQVVQUEFVR0VfVElHRVJfQVRTQ19CMjEwKSB9LAorCXsgVVNCX0RFVklDRShVU0JfVklEX1lVQU4sCVVTQl9QSURfWVVBTl9NQzc3MCkgfSwKKwl7IFVTQl9ERVZJQ0UoVVNCX1ZJRF9FTEdBVE8sCVVTQl9QSURfRUxHQVRPX0VZRVRWX0RUVCkgfSwKIAl7IDAgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KIH07CiBNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgZGliMDcwMF91c2JfaWRfdGFibGUpOwpAQCAtMTU5NSw3ICsxNjkyLDcgQEAKIAkJCX0sCiAJCX0sCiAKLQkJLm51bV9kZXZpY2VfZGVzY3MgPSA5LAorCQkubnVtX2RldmljZV9kZXNjcyA9IDExLAogCQkuZGV2aWNlcyA9IHsKIAkJCXsgICAiRGlCY29tIFNUSzcwNzBQIHJlZmVyZW5jZSBkZXNpZ24iLAogCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzE1XSwgTlVMTCB9LApAQCAtMTYzMyw2ICsxNzMwLDE0IEBACiAJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbMzNdLCBOVUxMIH0sCiAJCQkJeyBOVUxMIH0sCiAJCQl9LAorCQkJeyAgICJFbGdhdG8gRXllVFYgRFRUIiwKKwkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs0OV0sIE5VTEwgfSwKKwkJCQl7IE5VTEwgfSwKKwkJCX0sCisJCQl7ICAgIll1YW4gUEQzNzhTIiwKKwkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs0NV0sIE5VTEwgfSwKKwkJCQl7IE5VTEwgfSwKKwkJCX0sCiAJCX0sCiAKIAkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLApAQCAtMTY2MSw3ICsxNzY2LDcgQEAKIAkJCX0KIAkJfSwKIAotCQkubnVtX2RldmljZV9kZXNjcyA9IDUsCisJCS5udW1fZGV2aWNlX2Rlc2NzID0gNiwKIAkJLmRldmljZXMgPSB7CiAJCQl7ICAgIkRpQmNvbSBTVEs3MDcwUEQgcmVmZXJlbmNlIGRlc2lnbiIsCiAJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbMTddLCBOVUxMIH0sCkBAIC0xNjgyLDggKzE3ODcsMTYgQEAKIAkJCXsgICJUZXJyYXRlYyBDaW5lcmd5IERUIFVTQiBYUyBEaXZlcnNpdHkiLAogCQkJCXsgJmRpYjA3MDBfdXNiX2lkX3RhYmxlWzQzXSwgTlVMTCB9LAogCQkJCXsgTlVMTCB9LAorCQkJfSwKKwkJCXsgICJTb255IFBsYXlUViIsCisJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbNDRdLCBOVUxMIH0sCisJCQkJeyBOVUxMIH0sCiAJCQl9Ci0JCX0KKwkJfSwKKwkJLnJjX2ludGVydmFsICAgICAgPSBERUZBVUxUX1JDX0lOVEVSVkFMLAorCQkucmNfa2V5X21hcCAgICAgICA9IGRpYjA3MDBfcmNfa2V5cywKKwkJLnJjX2tleV9tYXBfc2l6ZSAgPSBBUlJBWV9TSVpFKGRpYjA3MDBfcmNfa2V5cyksCisJCS5yY19xdWVyeSAgICAgICAgID0gZGliMDcwMF9yY19xdWVyeQogCX0sIHsgRElCMDcwMF9ERUZBVUxUX0RFVklDRV9QUk9QRVJUSUVTLAogCiAJCS5udW1fYWRhcHRlcnMgPSAxLApAQCAtMTY5OSw3ICsxODEyLDcgQEAKIAkJCX0sCiAJCX0sCiAKLQkJLm51bV9kZXZpY2VfZGVzY3MgPSA1LAorCQkubnVtX2RldmljZV9kZXNjcyA9IDcsCiAJCS5kZXZpY2VzID0gewogCQkJeyAgICJUZXJyYXRlYyBDaW5lcmd5IEhUIFVTQiBYRSIsCiAJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbMjddLCBOVUxMIH0sCkBAIC0xNzI1LDYgKzE4MzgsMTAgQEAKIAkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVszOV0sIE5VTEwgfSwKIAkJCQl7IE5VTEwgfSwKIAkJCX0sCisJCQl7ICAgIllVQU4gSGlnaC1UZWNoIE1DNzcwIiwKKwkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs0OF0sIE5VTEwgfSwKKwkJCQl7IE5VTEwgfSwKKwkJCX0sCiAJCX0sCiAJCS5yY19pbnRlcnZhbCAgICAgID0gREVGQVVMVF9SQ19JTlRFUlZBTCwKIAkJLnJjX2tleV9tYXAgICAgICAgPSBkaWIwNzAwX3JjX2tleXMsCkBAIC0xNzU5LDYgKzE4NzYsMzEgQEAKIAkJLnJjX2tleV9tYXAgICAgICAgPSBkaWIwNzAwX3JjX2tleXMsCiAJCS5yY19rZXlfbWFwX3NpemUgID0gQVJSQVlfU0laRShkaWIwNzAwX3JjX2tleXMpLAogCQkucmNfcXVlcnkgICAgICAgICA9IGRpYjA3MDBfcmNfcXVlcnkKKwl9LCB7IERJQjA3MDBfREVGQVVMVF9ERVZJQ0VfUFJPUEVSVElFUywKKwkJLm51bV9hZGFwdGVycyA9IDEsCisJCS5hZGFwdGVyID0geworCQkJeworCQkJCS5mcm9udGVuZF9hdHRhY2ggID0gbGdkdDMzMDVfZnJvbnRlbmRfYXR0YWNoLAorCQkJCS50dW5lcl9hdHRhY2ggICAgID0gbXhsNTAwN3RfdHVuZXJfYXR0YWNoLAorCisJCQkJRElCMDcwMF9ERUZBVUxUX1NUUkVBTUlOR19DT05GSUcoMHgwMiksCisKKwkJCQkuc2l6ZV9vZl9wcml2ID0gc2l6ZW9mKHN0cnVjdAorCQkJCQkJZGliMDcwMF9hZGFwdGVyX3N0YXRlKSwKKwkJCX0sCisJCX0sCisKKwkJLm51bV9kZXZpY2VfZGVzY3MgPSAyLAorCQkuZGV2aWNlcyA9IHsKKwkJCXsgICAiSGF1cHBhdWdlIEFUU0MgTWluaUNhcmQgKEIyMDApIiwKKwkJCQl7ICZkaWIwNzAwX3VzYl9pZF90YWJsZVs0Nl0sIE5VTEwgfSwKKwkJCQl7IE5VTEwgfSwKKwkJCX0sCisJCQl7ICAgIkhhdXBwYXVnZSBBVFNDIE1pbmlDYXJkIChCMjEwKSIsCisJCQkJeyAmZGliMDcwMF91c2JfaWRfdGFibGVbNDddLCBOVUxMIH0sCisJCQkJeyBOVUxMIH0sCisJCQl9LAorCQl9LAogCX0sCiB9OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2ItaWRzLmgKaW5kZXggMGRiMGMwNi4uZGM3ZWEyMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLWlkcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2R2Yi11c2IvZHZiLXVzYi1pZHMuaApAQCAtMjcsMTIgKzI3LDE0IEBACiAjZGVmaW5lIFVTQl9WSURfRElCQ09NCQkJCTB4MTBiOAogI2RlZmluZSBVU0JfVklEX0RQT1NICQkJCTB4MTQ5OAogI2RlZmluZSBVU0JfVklEX0RWSUNPCQkJCTB4MGZlOQorI2RlZmluZSBVU0JfVklEX0VMR0FUTwkJCQkweDBmZDkKICNkZWZpbmUgVVNCX1ZJRF9FTVBJQQkJCQkweGViMWEKICNkZWZpbmUgVVNCX1ZJRF9HRU5QSVgJCQkJMHgwOWMwCiAjZGVmaW5lIFVTQl9WSURfR1JBTkRURUMJCQkweDUwMzIKICNkZWZpbmUgVVNCX1ZJRF9IQU5GVEVLCQkJCTB4MTVmNAogI2RlZmluZSBVU0JfVklEX0hBVVBQQVVHRQkJCTB4MjA0MAogI2RlZmluZSBVU0JfVklEX0hZUEVSX1BBTFRFSwkJCTB4MTAyNQorI2RlZmluZSBVU0JfVklEX0lOVEVMCQkJCTB4ODA4NgogI2RlZmluZSBVU0JfVklEX0tXT1JMRAkJCQkweGViMmEKICNkZWZpbmUgVVNCX1ZJRF9LV09STERfMgkJCTB4MWI4MAogI2RlZmluZSBVU0JfVklEX0tZRQkJCQkweDA0NTgKQEAgLTQ4LDYgKzUwLDcgQEAKICNkZWZpbmUgVVNCX1ZJRF9URVJSQVRFQwkJCTB4MGNjZAogI2RlZmluZSBVU0JfVklEX1RFTEVTVEFSCQkJMHgxMGI5CiAjZGVmaW5lIFVTQl9WSURfVklTSU9OUExVUwkJCTB4MTNkMworI2RlZmluZSBVU0JfVklEX1NPTlkJCQkJMHgxNDE1CiAjZGVmaW5lIFVTQl9WSURfVFdJTkhBTgkJCQkweDE4MjIKICNkZWZpbmUgVVNCX1ZJRF9VTFRJTUFfRUxFQ1RST05JQwkJMHgwNWQ4CiAjZGVmaW5lIFVTQl9WSURfVU5JV0lMTAkJCQkweDE1ODQKQEAgLTk1LDggKzk4LDEwIEBACiAjZGVmaW5lIFVTQl9QSURfVU5JV0lMTF9TVEs3NzAwUAkJCTB4NjAwMwogI2RlZmluZSBVU0JfUElEX0dSQU5EVEVDX0RWQlRfVVNCX0NPTEQJCQkweDBmYTAKICNkZWZpbmUgVVNCX1BJRF9HUkFORFRFQ19EVkJUX1VTQl9XQVJNCQkJMHgwZmExCisjZGVmaW5lIFVTQl9QSURfSU5URUxfQ0U5NTAwCQkJCTB4OTUwMAogI2RlZmluZSBVU0JfUElEX0tXT1JMRF8zOTlVCQkJCTB4ZTM5OQogI2RlZmluZSBVU0JfUElEX0tXT1JMRF8zOTVVCQkJCTB4ZTM5NgorI2RlZmluZSBVU0JfUElEX0tXT1JMRF8zOTVVXzIJCQkJMHhlMzliCiAjZGVmaW5lIFVTQl9QSURfS1dPUkxEX1BDMTYwXzJUCQkJCTB4YzE2MAogI2RlZmluZSBVU0JfUElEX0tXT1JMRF9WU1RSRUFNX0NPTEQJCQkweDE3ZGUKICNkZWZpbmUgVVNCX1BJRF9LV09STERfVlNUUkVBTV9XQVJNCQkJMHgxN2RmCkBAIC0xNDksNiArMTU0LDggQEAKICNkZWZpbmUgVVNCX1BJRF9IQVVQUEFVR0VfTVlUVl9UCQkJMHg3MDgwCiAjZGVmaW5lIFVTQl9QSURfSEFVUFBBVUdFX05PVkFfVERfU1RJQ0sJCQkweDk1ODAKICNkZWZpbmUgVVNCX1BJRF9IQVVQUEFVR0VfTk9WQV9URF9TVElDS181MjAwOQkJMHg1MjAwCisjZGVmaW5lIFVTQl9QSURfSEFVUFBBVUdFX1RJR0VSX0FUU0MJCQkweGIyMDAKKyNkZWZpbmUgVVNCX1BJRF9IQVVQUEFVR0VfVElHRVJfQVRTQ19CMjEwCQkweGIyMTAKICNkZWZpbmUgVVNCX1BJRF9BVkVSTUVESUFfRVhQUkVTUwkJCTB4YjU2OAogI2RlZmluZSBVU0JfUElEX0FWRVJNRURJQV9WT0xBUgkJCQkweGE4MDcKICNkZWZpbmUgVVNCX1BJRF9BVkVSTUVESUFfVk9MQVJfMgkJCTB4YjgwOApAQCAtMjMyLDkgKzIzOSwxMyBAQAogI2RlZmluZSBVU0JfUElEX0FTVVNfVTMxMDAJCQkJMHgxNzNmCiAjZGVmaW5lIFVTQl9QSURfWVVBTl9FQzM3MlMJCQkJMHgxZWRjCiAjZGVmaW5lIFVTQl9QSURfWVVBTl9TVEs3NzAwUEgJCQkJMHgxZjA4CisjZGVmaW5lIFVTQl9QSURfWVVBTl9QRDM3OFMJCQkJMHgyZWRjCisjZGVmaW5lIFVTQl9QSURfWVVBTl9NQzc3MAkJCQkweDA4NzEKICNkZWZpbmUgVVNCX1BJRF9EVzIxMDIJCQkJCTB4MjEwMgogI2RlZmluZSBVU0JfUElEX1hURU5TSU9OU19YRF8zODAJCQkweDAzODEKICNkZWZpbmUgVVNCX1BJRF9URUxFU1RBUl9TVEFSU1RJQ0tfMgkJCTB4ODAwMAogI2RlZmluZSBVU0JfUElEX01TSV9ESUdJX1ZPWF9NSU5JX0lJSSAgICAgICAgICAgICAgICAgICAweDg4MDcKKyNkZWZpbmUgVVNCX1BJRF9TT05ZX1BMQVlUVgkJCQkweDAwMDMKKyNkZWZpbmUgVVNCX1BJRF9FTEdBVE9fRVlFVFZfRFRUCQkJMHgwMDIxCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZHZiLXVzYi9kdmItdXNiLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2IuaAppbmRleCBiMWRlMGY3Li4yZDUzNTJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2IuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9kdmItdXNiL2R2Yi11c2IuaApAQCAtMjIzLDcgKzIyMyw3IEBACiAJaW50IGdlbmVyaWNfYnVsa19jdHJsX2VuZHBvaW50OwogCiAJaW50IG51bV9kZXZpY2VfZGVzY3M7Ci0Jc3RydWN0IGR2Yl91c2JfZGV2aWNlX2Rlc2NyaXB0aW9uIGRldmljZXNbOV07CisJc3RydWN0IGR2Yl91c2JfZGV2aWNlX2Rlc2NyaXB0aW9uIGRldmljZXNbMTFdOwogfTsKIAogLyoqCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZmlyZXdpcmUvZmlyZWR0di1hdmMuYwppbmRleCAzMjUyNmYxLi4xMmY3NzMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9maXJld2lyZS9maXJlZHR2LWF2Yy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2ZpcmV3aXJlL2ZpcmVkdHYtYXZjLmMKQEAgLTE1MSw3ICsxNTEsNyBAQAogCQlzdWJ1bml0X3R5cGUgPSBkYXRhWzFdID4+IDM7CiAJCXN1YnVuaXRfaWQgPSBkYXRhWzFdICYgNzsKIAkJb3AgPSBzdWJ1bml0X3R5cGUgPT0gMHgxZSB8fCBzdWJ1bml0X2lkID09IDUgPyB+MCA6IGRhdGFbMl07Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzc3U9JXguJXggbD0lZDogJS04cyAtICVzXG4iLAorCQlwcmludGsoS0VSTl9JTkZPICIlc3N1PSV4LiV4IGw9JXp1OiAlLThzIC0gJXNcbiIsCiAJCSAgICAgICBwcmVmaXgsIHN1YnVuaXRfdHlwZSwgc3VidW5pdF9pZCwgbGVuZ3RoLAogCQkgICAgICAgZGVidWdfZmNwX2N0eXBlKGRhdGFbMF0pLAogCQkgICAgICAgZGVidWdfZmNwX29wY29kZShvcCwgZGF0YSwgbGVuZ3RoKSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCmluZGV4IDAwMjY5NTYuLmEyMDZjZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9LY29uZmlnCkBAIC0xLDE3ICsxLDIxIEBACi1tZW51ICJDdXN0b21pc2UgRFZCIEZyb250ZW5kcyIKLQlkZXBlbmRzIG9uIERWQl9DT1JFCi0KIGNvbmZpZyBEVkJfRkVfQ1VTVE9NSVNFCiAJYm9vbCAiQ3VzdG9taXNlIHRoZSBmcm9udGVuZCBtb2R1bGVzIHRvIGJ1aWxkIgorCWRlcGVuZHMgb24gRFZCX0NPUkUKIAlkZWZhdWx0IE4KIAloZWxwCi0JICBUaGlzIGFsbG93cyB0aGUgdXNlciB0byBkZXNlbGVjdCBmcm9udGVuZCBkcml2ZXJzIHVubmVjZXNzYXJ5Ci0JICBmb3IgdGhlaXIgaGFyZHdhcmUgZnJvbSB0aGUgYnVpbGQuIFVzZSB0aGlzIG9wdGlvbiB3aXRoIGNhcmUKLQkgIGFzIGRlc2VsZWN0aW5nIGZyb250ZW5kcyB3aGljaCBhcmUgaW4gZmFjdCBuZWNlc3Nhcnkgd2lsbCByZXN1bHQKLQkgIGluIERWQiBkZXZpY2VzIHdoaWNoIGNhbm5vdCBiZSB0dW5lZCBkdWUgdG8gbGFjayBvZiBkcml2ZXIgc3VwcG9ydC4KKwkgIFRoaXMgYWxsb3dzIHRoZSB1c2VyIHRvIHNlbGVjdC9kZXNlbGVjdCBmcm9udGVuZCBkcml2ZXJzIGZvciB0aGVpcgorCSAgaGFyZHdhcmUgZnJvbSB0aGUgYnVpbGQuCisKKwkgIFVzZSB0aGlzIG9wdGlvbiB3aXRoIGNhcmUgYXMgZGVzZWxlY3RpbmcgZnJvbnRlbmRzIHdoaWNoIGFyZSBpbiBmYWN0CisJICBuZWNlc3Nhcnkgd2lsbCByZXN1bHQgaW4gRFZCIGRldmljZXMgd2hpY2ggY2Fubm90IGJlIHR1bmVkIGR1ZSB0byBsYWNrCisJICBvZiBkcml2ZXIgc3VwcG9ydC4KIAogCSAgSWYgdW5zdXJlIHNheSBOLgogCitpZiBEVkJfRkVfQ1VTVE9NSVNFCisKK21lbnUgIkN1c3RvbWlzZSBEVkIgRnJvbnRlbmRzIgorCiBjb21tZW50ICJNdWx0aXN0YW5kYXJkIChzYXRlbGxpdGUpIGZyb250ZW5kcyIKIAlkZXBlbmRzIG9uIERWQl9DT1JFCiAKQEAgLTU1LDYgKzU5LDEzIEBACiAJaGVscAogCSAgQSBEVkItUyB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgogCitjb25maWcgRFZCX1pMMTAwMzYKKwl0cmlzdGF0ZSAiWmFybGluayBaTDEwMDM2IHNpbGljb24gdHVuZXIiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWhlbHAKKwkgIEEgRFZCLVMgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KKwogY29uZmlnIERWQl9TNUgxNDIwCiAJdHJpc3RhdGUgIlNhbXN1bmcgUzVIMTQyMCBiYXNlZCIKIAlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQwpAQCAtODMsNiArOTQsMjAgQEAKIAloZWxwCiAJICBBIERWQi1TIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiAKK2NvbmZpZyBEVkJfU1RWNjExMAorCXRyaXN0YXRlICJTVCBTVFY2MTEwIHNpbGljb24gdHVuZXIiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCSAgaGVscAorCSAgQSBEVkItUyBzaWxpY29uIHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgdHVuZXIuCisKK2NvbmZpZyBEVkJfU1RWMDkwMAorCXRyaXN0YXRlICJTVCBTVFYwOTAwIGJhc2VkIgorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCisJZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKKwloZWxwCisJICBBIERWQi1TL1MyIGRlbW9kdWxhdG9yLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KKwogY29uZmlnIERWQl9UREE4MDgzCiAJdHJpc3RhdGUgIlBoaWxpcHMgVERBODA4MyBiYXNlZCIKIAlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQwpAQCAtMjg4LDYgKzMxMywxMyBAQAogCWhlbHAKIAkgIEEgRFZCLVQgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50IHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KIAorY29uZmlnIERWQl9BRjkwMTMKKwl0cmlzdGF0ZSAiQWZhdGVjaCBBRjkwMTMgZGVtb2R1bGF0b3IiCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMKKwlkZWZhdWx0IG0gaWYgRFZCX0ZFX0NVU1RPTUlTRQorCWhlbHAKKwkgIFNheSBZIHdoZW4geW91IHdhbnQgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgorCiBjb21tZW50ICJEVkItQyAoY2FibGUpIGZyb250ZW5kcyIKIAlkZXBlbmRzIG9uIERWQl9DT1JFCiAKQEAgLTM4Nyw2ICs0MTksMTQgQEAKIAkgIEFuIEFUU0MgOFZTQiBhbmQgUUFNNjQvMjU2IHR1bmVyIG1vZHVsZS4gU2F5IFkgd2hlbiB5b3Ugd2FudAogCSAgdG8gc3VwcG9ydCB0aGlzIGZyb250ZW5kLgogCitjb25maWcgRFZCX0xHRFQzMzA1CisJdHJpc3RhdGUgIkxHIEVsZWN0cm9uaWNzIExHRFQzMzA1IGJhc2VkIgorCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCisJZGVmYXVsdCBtIGlmIERWQl9GRV9DVVNUT01JU0UKKwloZWxwCisJICBBbiBBVFNDIDhWU0IgYW5kIFFBTTY0LzI1NiB0dW5lciBtb2R1bGUuIFNheSBZIHdoZW4geW91IHdhbnQKKwkgIHRvIHN1cHBvcnQgdGhpcyBmcm9udGVuZC4KKwogY29uZmlnIERWQl9TNUgxNDA5CiAJdHJpc3RhdGUgIlNhbXN1bmcgUzVIMTQwOSBiYXNlZCIKIAlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQwpAQCAtMzk3LDcgKzQzNyw3IEBACiAKIGNvbmZpZyBEVkJfQVU4NTIyCiAJdHJpc3RhdGUgIkF1dml0ZWsgQVU4NTIyIGJhc2VkIgotCWRlcGVuZHMgb24gRFZCX0NPUkUgJiYgSTJDCisJZGVwZW5kcyBvbiBEVkJfQ09SRSAmJiBJMkMgJiYgVklERU9fVjRMMgogCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAogCSAgQW4gQVRTQyA4VlNCIGFuZCBRQU02NC8yNTYgdHVuZXIgbW9kdWxlLiBTYXkgWSB3aGVuIHlvdSB3YW50CkBAIC00NDYsMTEgKzQ4NiwxMSBAQAogCWRlcGVuZHMgb24gRFZCX0NPUkUKIAogY29uZmlnIERWQl9MTkJQMjEKLQl0cmlzdGF0ZSAiTE5CUDIxIFNFQyBjb250cm9sbGVyIgorCXRyaXN0YXRlICJMTkJQMjEvTE5CSDI0IFNFQyBjb250cm9sbGVycyIKIAlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQwogCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCiAJaGVscAotCSAgQW4gU0VDIGNvbnRyb2wgY2hpcC4KKwkgIEFuIFNFQyBjb250cm9sIGNoaXBzLgogCiBjb25maWcgRFZCX0lTTDY0MDUKIAl0cmlzdGF0ZSAiSVNMNjQwNSBTRUMgY29udHJvbGxlciIKQEAgLTQ3OCwxMSArNTE4LDYgQEAKIGNvbmZpZyBEVkJfRFVNTVlfRkUKIAl0cmlzdGF0ZSAiRHVtbXkgZnJvbnRlbmQgZHJpdmVyIgogCWRlZmF1bHQgbgotCi1jb25maWcgRFZCX0FGOTAxMwotCXRyaXN0YXRlICJBZmF0ZWNoIEFGOTAxMyBkZW1vZHVsYXRvciIKLQlkZXBlbmRzIG9uIERWQl9DT1JFICYmIEkyQwotCWRlZmF1bHQgbSBpZiBEVkJfRkVfQ1VTVE9NSVNFCi0JaGVscAotCSAgU2F5IFkgd2hlbiB5b3Ugd2FudCB0byBzdXBwb3J0IHRoaXMgZnJvbnRlbmQuCiBlbmRtZW51CisKK2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvTWFrZWZpbGUKaW5kZXggYWY3YmRmMC4uNjVhMzM2YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9NYWtlZmlsZQpAQCAtNyw2ICs3LDggQEAKIAogczkyMS1vYmpzIDo9IHM5MjFfbW9kdWxlLm8gczkyMV9jb3JlLm8KIHN0YjA4OTktb2JqcyA9IHN0YjA4OTlfZHJ2Lm8gc3RiMDg5OV9hbGdvLm8KK3N0djA5MDAtb2JqcyA9IHN0djA5MDBfY29yZS5vIHN0djA5MDBfc3cubworYXU4NTIyLW9ianMgPSBhdTg1MjJfZGlnLm8gYXU4NTIyX2RlY29kZXIubwogCiBvYmotJChDT05GSUdfRFZCX1BMTCkgKz0gZHZiLXBsbC5vCiBvYmotJChDT05GSUdfRFZCX1NUVjAyOTkpICs9IHN0djAyOTkubwpAQCAtMjgsNiArMzAsNyBAQAogb2JqLSQoQ09ORklHX0RWQl9TUDg4N1gpICs9IHNwODg3eC5vCiBvYmotJChDT05GSUdfRFZCX05YVDYwMDApICs9IG54dDYwMDAubwogb2JqLSQoQ09ORklHX0RWQl9NVDM1MikgKz0gbXQzNTIubworb2JqLSQoQ09ORklHX0RWQl9aTDEwMDM2KSArPSB6bDEwMDM2Lm8KIG9iai0kKENPTkZJR19EVkJfWkwxMDM1MykgKz0gemwxMDM1My5vCiBvYmotJChDT05GSUdfRFZCX0NYMjI3MDIpICs9IGN4MjI3MDIubwogb2JqLSQoQ09ORklHX0RWQl9EUlgzOTdYRCkgKz0gZHJ4Mzk3eEQubwpAQCAtNDEsNiArNDQsNyBAQAogb2JqLSQoQ09ORklHX0RWQl9TNUgxNDIwKSArPSBzNWgxNDIwLm8KIG9iai0kKENPTkZJR19EVkJfTEdEVDMzMFgpICs9IGxnZHQzMzB4Lm8KIG9iai0kKENPTkZJR19EVkJfTEdEVDMzMDQpICs9IGxnZHQzMzA0Lm8KK29iai0kKENPTkZJR19EVkJfTEdEVDMzMDUpICs9IGxnZHQzMzA1Lm8KIG9iai0kKENPTkZJR19EVkJfQ1gyNDEyMykgKz0gY3gyNDEyMy5vCiBvYmotJChDT05GSUdfRFZCX0xOQlAyMSkgKz0gbG5icDIxLm8KIG9iai0kKENPTkZJR19EVkJfSVNMNjQwNSkgKz0gaXNsNjQwNS5vCkBAIC02NCw0ICs2OCw2IEBACiBvYmotJChDT05GSUdfRFZCX1NUVjAyODgpICs9IHN0djAyODgubwogb2JqLSQoQ09ORklHX0RWQl9TVEI2MDAwKSArPSBzdGI2MDAwLm8KIG9iai0kKENPTkZJR19EVkJfUzkyMSkgKz0gczkyMS5vCitvYmotJChDT05GSUdfRFZCX1NUVjYxMTApICs9IHN0djYxMTAubworb2JqLSQoQ09ORklHX0RWQl9TVFYwOTAwKSArPSBzdHYwOTAwLm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMi5oCmluZGV4IDdiOTRmNTUuLjU2NWRjZjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjIuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyLmgKQEAgLTc0LDYgKzc0LDIyIEBACiB9CiAjZW5kaWYgLyogQ09ORklHX0RWQl9BVTg1MjIgKi8KIAorLyogT3RoZXIgbW9kZXMgbWF5IG5lZWQgdG8gYmUgYWRkZWQgbGF0ZXIgKi8KK2VudW0gYXU4NTIyX3ZpZGVvX2lucHV0IHsKKwlBVTg1MjJfQ09NUE9TSVRFX0NIMSA9IDEsCisJQVU4NTIyX0NPTVBPU0lURV9DSDIsCisJQVU4NTIyX0NPTVBPU0lURV9DSDMsCisJQVU4NTIyX0NPTVBPU0lURV9DSDQsCisJQVU4NTIyX0NPTVBPU0lURV9DSDRfU0lGLAorCUFVODUyMl9TVklERU9fQ0gxMywKKwlBVTg1MjJfU1ZJREVPX0NIMjQsCit9OworCitlbnVtIGF1ODUyMl9hdWRpb19pbnB1dCB7CisJQVU4NTIyX0FVRElPX05PTkUsCisJQVU4NTIyX0FVRElPX1NJRiwKK307CisKICNlbmRpZiAvKiBfX0FVODUyMl9IX18gKi8KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjJfZGVjb2Rlci5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMl9kZWNvZGVyLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDYzZTE1MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjJfZGVjb2Rlci5jCkBAIC0wLDAgKzEsODM1IEBACisvKgorICogQXV2aXRlayBBVTg1MjIgUUFNLzhWU0IgZGVtb2R1bGF0b3IgZHJpdmVyIGFuZCB2aWRlbyBkZWNvZGVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IERldmluIEhlaXRtdWVsbGVyIDxkaGVpdG11ZWxsZXJAbGludXh0di5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBBdXZpdGVrIEludGVybmF0aW9uYWwsIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogQXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworLyogRGV2ZWxvcGVyIG5vdGVzOgorICoKKyAqIFZCSSBzdXBwb3J0IGlzIG5vdCB5ZXQgd29ya2luZworICogU2F0dXJhdGlvbiBhbmQgaHVlIHNldHRpbmcgYXJlIG5vdCB5ZXQgd29ya2luZworICogRW5vdWdoIGlzIGltcGxlbWVudGVkIGhlcmUgZm9yIENWQlMgYW5kIFMtVmlkZW8gaW5wdXRzLCBidXQgdGhlIGFjdHVhbAorICogIGFuYWxvZyBkZW1vZHVsYXRvciBjb2RlIGlzbid0IGltcGxlbWVudGVkIChub3QgbmVlZGVkIGZvciB4YzUwMDAgc2luY2UgaXQKKyAqICBoYXMgaXRzIG93biBkZW1vZHVsYXRvciBhbmQgb3V0cHV0cyBDVkJTKQorICoKKyAqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgImF1ODUyMi5oIgorI2luY2x1ZGUgImF1ODUyMl9wcml2LmgiCisKK01PRFVMRV9BVVRIT1IoIkRldmluIEhlaXRtdWVsbGVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgYXU4NTIyX2FuYWxvZ19kZWJ1ZzsKKworCittb2R1bGVfcGFyYW1fbmFtZWQoYW5hbG9nX2RlYnVnLCBhdTg1MjJfYW5hbG9nX2RlYnVnLCBpbnQsIDA2NDQpOworCitNT0RVTEVfUEFSTV9ERVNDKGFuYWxvZ19kZWJ1ZywKKwkJICJBbmFsb2cgZGVidWdnaW5nIG1lc3NhZ2VzIFswPU9mZiAoZGVmYXVsdCkgMT1Pbl0iKTsKKworc3RydWN0IGF1ODUyMl9yZWdpc3Rlcl9jb25maWcgeworCXUxNiByZWdfbmFtZTsKKwl1OCByZWdfdmFsWzhdOworfTsKKworCisvKiBWaWRlbyBEZWNvZGVyIEZpbHRlciBDb2VmZmljaWVudHMKKyAgIFRoZSB2YWx1ZXMgYXJlIGFzIGZvbGxvd3MgZnJvbSBsZWZ0IHRvIHJpZ2h0CisgICAwPSJBVFYgUkYiIDE9IkFUViBSRjEzIiAyPSJDVkJTIiAzPSJTLVZpZGVvIiA0PSJQQUwiIDU9Q1ZCUzEzIiA2PSJTVmlkZW8xMyIKKyovCitzdHJ1Y3QgYXU4NTIyX3JlZ2lzdGVyX2NvbmZpZyBmaWx0ZXJfY29lZltdID0geworCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQxMCwgezB4MjUsIDB4MDAsIDB4MjUsIDB4MjUsIDB4MDAsIDB4MDAsIDB4MDB9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDExLCB7MHgyMCwgMHgwMCwgMHgyMCwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMH0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTIsIHsweDAzLCAweDAwLCAweDAzLCAweDAzLCAweDAwLCAweDAwLCAweDAwfSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQxMywgezB4ZTYsIDB4MDAsIDB4ZTYsIDB4ZTYsIDB4MDAsIDB4MDAsIDB4MDB9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDE0LCB7MHg0MCwgMHgwMCwgMHg0MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMH0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTUsIHsweDFiLCAweDAwLCAweDFiLCAweDFiLCAweDAwLCAweDAwLCAweDAwfSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQxNiwgezB4YzAsIDB4MDAsIDB4YzAsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDB9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDE3LCB7MHgwNCwgMHgwMCwgMHgwNCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMH0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MTgsIHsweDhjLCAweDAwLCAweDhjLCAweDhjLCAweDAwLCAweDAwLCAweDAwfSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQxOSwgezB4YTAsIDB4NDAsIDB4YTAsIDB4YTAsIDB4NDAsIDB4NDAsIDB4NDB9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDFBLCB7MHgyMSwgMHgwOSwgMHgyMSwgMHgyMSwgMHgwOSwgMHgwOSwgMHgwOX0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MUIsIHsweDZjLCAweDM4LCAweDZjLCAweDZjLCAweDM4LCAweDM4LCAweDM4fSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQxQywgezB4MDMsIDB4ZmYsIDB4MDMsIDB4MDMsIDB4ZmYsIDB4ZmYsIDB4ZmZ9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDFELCB7MHhiZiwgMHhjNywgMHhiZiwgMHhiZiwgMHhjNywgMHhjNywgMHhjN30gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MUUsIHsweGEwLCAweGRmLCAweGEwLCAweGEwLCAweGRmLCAweGRmLCAweGRmfSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQxRiwgezB4MTAsIDB4MDYsIDB4MTAsIDB4MTAsIDB4MDYsIDB4MDYsIDB4MDZ9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDIwLCB7MHhhZSwgMHgzMCwgMHhhZSwgMHhhZSwgMHgzMCwgMHgzMCwgMHgzMH0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjEsIHsweGM0LCAweDAxLCAweGM0LCAweGM0LCAweDAxLCAweDAxLCAweDAxfSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQyMiwgezB4NTQsIDB4ZGQsIDB4NTQsIDB4NTQsIDB4ZGQsIDB4ZGQsIDB4ZGR9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDIzLCB7MHhkMCwgMHhhZiwgMHhkMCwgMHhkMCwgMHhhZiwgMHhhZiwgMHhhZn0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjQsIHsweDFjLCAweGY3LCAweDFjLCAweDFjLCAweGY3LCAweGY3LCAweGY3fSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQyNSwgezB4NzYsIDB4ZGIsIDB4NzYsIDB4NzYsIDB4ZGIsIDB4ZGIsIDB4ZGJ9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDI2LCB7MHg2MSwgMHhjMCwgMHg2MSwgMHg2MSwgMHhjMCwgMHhjMCwgMHhjMH0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MjcsIHsweGQxLCAweDJmLCAweGQxLCAweGQxLCAweDJmLCAweDJmLCAweDJmfSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQyOCwgezB4ODQsIDB4ZDgsIDB4ODQsIDB4ODQsIDB4ZDgsIDB4ZDgsIDB4ZDh9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDI5LCB7MHgwNiwgMHhmYiwgMHgwNiwgMHgwNiwgMHhmYiwgMHhmYiwgMHhmYn0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MkEsIHsweDIxLCAweGQ1LCAweDIxLCAweDIxLCAweGQ1LCAweGQ1LCAweGQ1fSB9LAorCXtBVTg1MjJfRklMVEVSX0NPRUZfUjQyQiwgezB4MGEsIDB4M2UsIDB4MGEsIDB4MGEsIDB4M2UsIDB4M2UsIDB4M2V9IH0sCisJe0FVODUyMl9GSUxURVJfQ09FRl9SNDJDLCB7MHhlNiwgMHgxNSwgMHhlNiwgMHhlNiwgMHgxNSwgMHgxNSwgMHgxNX0gfSwKKwl7QVU4NTIyX0ZJTFRFUl9DT0VGX1I0MkQsIHsweDAxLCAweDM0LCAweDAxLCAweDAxLCAweDM0LCAweDM0LCAweDM0fSB9LAorCit9OworI2RlZmluZSBOVU1fRklMVEVSX0NPRUYgKHNpemVvZihmaWx0ZXJfY29lZilcCisJCQkgLyBzaXplb2Yoc3RydWN0IGF1ODUyMl9yZWdpc3Rlcl9jb25maWcpKQorCisKKy8qIFJlZ2lzdGVycyAweDA2MGIgdGhyb3VnaCAweDA2NTIgYXJlIHRoZSBMUCBGaWx0ZXIgY29lZmZpY2llbnRzCisgICBUaGUgdmFsdWVzIGFyZSBhcyBmb2xsb3dzIGZyb20gbGVmdCB0byByaWdodAorICAgMD0iU0lGIiAxPSJBVFZSRi9BVFZSRjEzIgorICAgTm90ZTogdGhlICJBVFZSRi9BVFZSRjEzIiBtb2RlIGhhcyBuZXZlciBiZWVuIHRlc3RlZAorKi8KK3N0cnVjdCBhdTg1MjJfcmVnaXN0ZXJfY29uZmlnIGxwZmlsdGVyX2NvZWZbXSA9IHsKKwl7MHgwNjBiLCB7MHgyMSwgMHgwYn0gfSwKKwl7MHgwNjBjLCB7MHhhZCwgMHhhZH0gfSwKKwl7MHgwNjBkLCB7MHg3MCwgMHhmMH0gfSwKKwl7MHgwNjBlLCB7MHhlYSwgMHhlOX0gfSwKKwl7MHgwNjBmLCB7MHhkZCwgMHhkZH0gfSwKKwl7MHgwNjEwLCB7MHgwOCwgMHg2NH0gfSwKKwl7MHgwNjExLCB7MHg2MCwgMHg2MH0gfSwKKwl7MHgwNjEyLCB7MHhmOCwgMHhiMn0gfSwKKwl7MHgwNjEzLCB7MHgwMSwgMHgwMn0gfSwKKwl7MHgwNjE0LCB7MHhlNCwgMHhiNH0gfSwKKwl7MHgwNjE1LCB7MHgxOSwgMHgwMn0gfSwKKwl7MHgwNjE2LCB7MHhhZSwgMHgyZX0gfSwKKwl7MHgwNjE3LCB7MHhlZSwgMHhjNX0gfSwKKwl7MHgwNjE4LCB7MHg1NiwgMHg1Nn0gfSwKKwl7MHgwNjE5LCB7MHgzMCwgMHg1OH0gfSwKKwl7MHgwNjFhLCB7MHhmOSwgMHhmOH0gfSwKKwl7MHgwNjFiLCB7MHgyNCwgMHg2NH0gfSwKKwl7MHgwNjFjLCB7MHgwNywgMHgwN30gfSwKKwl7MHgwNjFkLCB7MHgzMCwgMHgzMH0gfSwKKwl7MHgwNjFlLCB7MHhhOSwgMHhlZH0gfSwKKwl7MHgwNjFmLCB7MHgwOSwgMHgwYn0gfSwKKwl7MHgwNjIwLCB7MHg0MiwgMHhjMn0gfSwKKwl7MHgwNjIxLCB7MHgxZCwgMHgyYX0gfSwKKwl7MHgwNjIyLCB7MHhkNiwgMHg1Nn0gfSwKKwl7MHgwNjIzLCB7MHg5NSwgMHg4Yn0gfSwKKwl7MHgwNjI0LCB7MHgyYiwgMHgyYn0gfSwKKwl7MHgwNjI1LCB7MHgzMCwgMHgyNH0gfSwKKwl7MHgwNjI2LCB7MHgzZSwgMHgzZX0gfSwKKwl7MHgwNjI3LCB7MHg2MiwgMHhlMn0gfSwKKwl7MHgwNjI4LCB7MHhlOSwgMHhmNX0gfSwKKwl7MHgwNjI5LCB7MHg5OSwgMHgxOX0gfSwKKwl7MHgwNjJhLCB7MHhkNCwgMHgxMX0gfSwKKwl7MHgwNjJiLCB7MHgwMywgMHgwNH0gfSwKKwl7MHgwNjJjLCB7MHhiNSwgMHg4NX0gfSwKKwl7MHgwNjJkLCB7MHgxZSwgMHgyMH0gfSwKKwl7MHgwNjJlLCB7MHgyYSwgMHhlYX0gfSwKKwl7MHgwNjJmLCB7MHhkNywgMHhkMn0gfSwKKwl7MHgwNjMwLCB7MHgxNSwgMHgxNX0gfSwKKwl7MHgwNjMxLCB7MHhhMywgMHhhOX0gfSwKKwl7MHgwNjMyLCB7MHgxZiwgMHgxZn0gfSwKKwl7MHgwNjMzLCB7MHhmOSwgMHhkMX0gfSwKKwl7MHgwNjM0LCB7MHhjMCwgMHhjM30gfSwKKwl7MHgwNjM1LCB7MHg0ZCwgMHg4ZH0gfSwKKwl7MHgwNjM2LCB7MHgyMSwgMHgzMX0gfSwKKwl7MHgwNjM3LCB7MHg4MywgMHg4M30gfSwKKwl7MHgwNjM4LCB7MHgwOCwgMHg4Y30gfSwKKwl7MHgwNjM5LCB7MHgxOSwgMHgxOX0gfSwKKwl7MHgwNjNhLCB7MHg0NSwgMHhhNX0gfSwKKwl7MHgwNjNiLCB7MHhlZiwgMHhlY30gfSwKKwl7MHgwNjNjLCB7MHg4YSwgMHg4YX0gfSwKKwl7MHgwNjNkLCB7MHhmNCwgMHhmNn0gfSwKKwl7MHgwNjNlLCB7MHg4ZiwgMHg4Zn0gfSwKKwl7MHgwNjNmLCB7MHg0NCwgMHgwY30gfSwKKwl7MHgwNjQwLCB7MHhlZiwgMHhmMH0gfSwKKwl7MHgwNjQxLCB7MHg2NiwgMHg2Nn0gfSwKKwl7MHgwNjQyLCB7MHhjYywgMHhkMn0gfSwKKwl7MHgwNjQzLCB7MHg0MSwgMHg0MX0gfSwKKwl7MHgwNjQ0LCB7MHg2MywgMHg5M30gfSwKKwl7MHgwNjQ1LCB7MHg4ZSwgMHg4ZX0gfSwKKwl7MHgwNjQ2LCB7MHhhMiwgMHg0Mn0gfSwKKwl7MHgwNjQ3LCB7MHg3YiwgMHg3Yn0gfSwKKwl7MHgwNjQ4LCB7MHgwNCwgMHgwNH0gfSwKKwl7MHgwNjQ5LCB7MHgwMCwgMHgwMH0gfSwKKwl7MHgwNjRhLCB7MHg0MCwgMHg0MH0gfSwKKwl7MHgwNjRiLCB7MHg4YywgMHg5OH0gfSwKKwl7MHgwNjRjLCB7MHgwMCwgMHgwMH0gfSwKKwl7MHgwNjRkLCB7MHg2MywgMHhjM30gfSwKKwl7MHgwNjRlLCB7MHgwNCwgMHgwNH0gfSwKKwl7MHgwNjRmLCB7MHgyMCwgMHgyMH0gfSwKKwl7MHgwNjUwLCB7MHgwMCwgMHgwMH0gfSwKKwl7MHgwNjUxLCB7MHg0MCwgMHg0MH0gfSwKKwl7MHgwNjUyLCB7MHgwMSwgMHgwMX0gfSwKK307CisjZGVmaW5lIE5VTV9MUEZJTFRFUl9DT0VGIChzaXplb2YobHBmaWx0ZXJfY29lZilcCisJCQkgICAvIHNpemVvZihzdHJ1Y3QgYXU4NTIyX3JlZ2lzdGVyX2NvbmZpZykpCisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGF1ODUyMl9zdGF0ZSAqdG9fc3RhdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3QgYXU4NTIyX3N0YXRlLCBzZCk7Cit9CisKK3N0YXRpYyB2b2lkIHNldHVwX3ZiaShzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSwgaW50IGF1ZF9pbnB1dCkKK3sKKwlpbnQgaTsKKworCS8qIFRoZXNlIGFyZSBzZXQgdG8gemVybyByZWdhcmRsZXNzIG9mIHdoYXQgbW9kZSB3ZSdyZSBpbiAqLworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX1ZCSV9DVFJMX0hfUkVHMDE3SCwgMHgwMCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfVkJJX0NUUkxfTF9SRUcwMThILCAweDAwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19WQklfVVNFUl9UT1RBTF9CSVRTX1JFRzAxOUgsIDB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX1ZCSV9VU0VSX1RVTklUX0hfUkVHMDFBSCwgMHgwMCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfVkJJX1VTRVJfVFVOSVRfTF9SRUcwMUJILCAweDAwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19WQklfVVNFUl9USFJFU0gxX1JFRzAxQ0gsIDB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX1ZCSV9VU0VSX0ZSQU1FX1BBVDJfUkVHMDFFSCwgMHgwMCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfVkJJX1VTRVJfRlJBTUVfUEFUMV9SRUcwMUZILCAweDAwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19WQklfVVNFUl9GUkFNRV9QQVQwX1JFRzAyMEgsIDB4MDApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX1ZCSV9VU0VSX0ZSQU1FX01BU0syX1JFRzAyMUgsCisJCQkweDAwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19WQklfVVNFUl9GUkFNRV9NQVNLMV9SRUcwMjJILAorCQkJMHgwMCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfVkJJX1VTRVJfRlJBTUVfTUFTSzBfUkVHMDIzSCwKKwkJCTB4MDApOworCisJLyogU2V0dXAgdGhlIFZCSSByZWdpc3RlcnMgKi8KKwlmb3IgKGkgPSAweDMwOyBpIDwgMHg2MDsgaSsrKQorCQlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIGksIDB4NDApOworCisJLyogRm9yIHNvbWUgcmVhc29uLCBldmVyeSByZWdpc3RlciBpcyAweDQwIGV4Y2VwdCByZWdpc3RlciAweDQ0CisJICAgKGNvbmZpcm1lZCB2aWEgdGhlIEhWUi05NTBxIFVTQiBjYXB0dXJlKSAqLworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgMHg0NCwgMHg2MCk7CisKKwkvKiBFbmFibGUgVkJJICh3ZSBhbHdheXMgZG8gdGhpcyByZWdhcmRsZXNzIG9mIHdoZXRoZXIgdGhlIHVzZXIgaXMKKwkgICB2aWV3aW5nIGNsb3NlZCBjYXB0aW9uIGluZm8pICovCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfVkJJX0NUUkxfSF9SRUcwMTdILAorCQkJQVU4NTIyX1RWREVDX1ZCSV9DVFJMX0hfUkVHMDE3SF9DQ09OKTsKKworfQorCitzdGF0aWMgdm9pZCBzZXR1cF9kZWNvZGVyX2RlZmF1bHRzKHN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlLCB1OCBpbnB1dF9tb2RlKQoreworCWludCBpOworCWludCBmaWx0ZXJfY29lZl90eXBlOworCisJLyogUHJvdmlkZSByZWFzb25hYmxlIGRlZmF1bHRzIGZvciBwaWN0dXJlIHR1bmluZyB2YWx1ZXMgKi8KKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19TSEFSUE5FU1NSRUcwMDlILCAweDA3KTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19CUklHSFRORVNTX1JFRzAwQUgsIDB4ZWQpOworCXN0YXRlLT5icmlnaHRuZXNzID0gMHhlZCAtIDEyODsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19DT05UUkFTVF9SRUcwMEJILCAweDc5KTsKKwlzdGF0ZS0+Y29udHJhc3QgPSAweDc5OworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX1NBVFVSQVRJT05fQ0JfUkVHMDBDSCwgMHg4MCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfU0FUVVJBVElPTl9DUl9SRUcwMERILCAweDgwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19IVUVfSF9SRUcwMEVILCAweDAwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19IVUVfTF9SRUcwMEZILCAweDAwKTsKKworCS8qIE90aGVyIGRlY29kZXIgcmVnaXN0ZXJzICovCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfSU5UX01BU0tfUkVHMDEwSCwgMHgwMCk7CisKKwlpZiAoaW5wdXRfbW9kZSA9PSAweDIzKSB7CisJCS8qIFMtVmlkZW8gaW5wdXQgbWFwcGluZyAqLworCQlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9WSURFT19NT0RFX1JFRzAxMUgsIDB4MDQpOworCX0gZWxzZSB7CisJCS8qIEFsbCBvdGhlciBtb2RlcyAoQ1ZCUy9BVFZSRiBldGMuKSAqLworCQlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9WSURFT19NT0RFX1JFRzAxMUgsIDB4MDApOworCX0KKworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX1BHQV9SRUcwMTJILAorCQkJQVU4NTIyX1RWREVDX1BHQV9SRUcwMTJIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0NPTUJfTU9ERV9SRUcwMTVILAorCQkJQVU4NTIyX1RWREVDX0NPTUJfTU9ERV9SRUcwMTVIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVEX0RCR19NT0RFX1JFRzA2MEgsCisJCQlBVTg1MjJfVFZERURfREJHX01PREVfUkVHMDYwSF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19GT1JNQVRfQ1RSTDFfUkVHMDYxSCwKKwkJCUFVODUyMl9UVkRFQ19GT1JNQVRfQ1RSTDFfUkVHMDYxSF9DVkJTMTMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0ZPUk1BVF9DVFJMMl9SRUcwNjJILAorCQkJQVU4NTIyX1RWREVDX0ZPUk1BVF9DVFJMMl9SRUcwNjJIX0NWQlMxMyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfVkNSX0RFVF9MTElNX1JFRzA2M0gsCisJCQlBVTg1MjJfVFZERUNfVkNSX0RFVF9MTElNX1JFRzA2M0hfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfVkNSX0RFVF9ITElNX1JFRzA2NEgsCisJCQlBVTg1MjJfVFZERUNfVkNSX0RFVF9ITElNX1JFRzA2NEhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQ09NQl9WRElGX1RIUjFfUkVHMDY1SCwKKwkJCUFVODUyMl9UVkRFQ19DT01CX1ZESUZfVEhSMV9SRUcwNjVIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0NPTUJfVkRJRl9USFIyX1JFRzA2NkgsCisJCQlBVTg1MjJfVFZERUNfQ09NQl9WRElGX1RIUjJfUkVHMDY2SF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19DT01CX1ZESUZfVEhSM19SRUcwNjdILAorCQkJQVU4NTIyX1RWREVDX0NPTUJfVkRJRl9USFIzX1JFRzA2N0hfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQ09NQl9OT1RDSF9USFJfUkVHMDY4SCwKKwkJCUFVODUyMl9UVkRFQ19DT01CX05PVENIX1RIUl9SRUcwNjhIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0NPTUJfSERJRl9USFIxX1JFRzA2OUgsCisJCQlBVTg1MjJfVFZERUNfQ09NQl9IRElGX1RIUjFfUkVHMDY5SF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19DT01CX0hESUZfVEhSMl9SRUcwNkFILAorCQkJQVU4NTIyX1RWREVDX0NPTUJfSERJRl9USFIyX1JFRzA2QUhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQ09NQl9IRElGX1RIUjNfUkVHMDZCSCwKKwkJCUFVODUyMl9UVkRFQ19DT01CX0hESUZfVEhSM19SRUcwNkJIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0NPTUJfRENESUZfVEhSMV9SRUcwNkNILAorCQkJQVU4NTIyX1RWREVDX0NPTUJfRENESUZfVEhSMV9SRUcwNkNIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0NPTUJfRENESUZfVEhSMl9SRUcwNkRILAorCQkJQVU4NTIyX1RWREVDX0NPTUJfRENESUZfVEhSMl9SRUcwNkRIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0NPTUJfRENESUZfVEhSM19SRUcwNkVILAorCQkJQVU4NTIyX1RWREVDX0NPTUJfRENESUZfVEhSM19SRUcwNkVIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX1VWX1NFUF9USFJfUkVHMDZGSCwKKwkJCUFVODUyMl9UVkRFQ19VVl9TRVBfVEhSX1JFRzA2RkhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQ09NQl9EQ19USFIxX05UU0NfUkVHMDcwSCwKKwkJCUFVODUyMl9UVkRFQ19DT01CX0RDX1RIUjFfTlRTQ19SRUcwNzBIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1JFRzA3MUgsIEFVODUyMl9SRUcwNzFIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1JFRzA3MkgsIEFVODUyMl9SRUcwNzJIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0NPTUJfRENfVEhSMl9OVFNDX1JFRzA3M0gsCisJCQlBVTg1MjJfVFZERUNfQ09NQl9EQ19USFIyX05UU0NfUkVHMDczSF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9SRUcwNzRILCBBVTg1MjJfUkVHMDc0SF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9SRUcwNzVILCBBVTg1MjJfUkVHMDc1SF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19EQ0FHQ19DVFJMX1JFRzA3N0gsCisJCQlBVTg1MjJfVFZERUNfRENBR0NfQ1RSTF9SRUcwNzdIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX1BJQ19TVEFSVF9BREpfUkVHMDc4SCwKKwkJCUFVODUyMl9UVkRFQ19QSUNfU1RBUlRfQURKX1JFRzA3OEhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQUdDX0hJR0hfTElNSVRfUkVHMDc5SCwKKwkJCUFVODUyMl9UVkRFQ19BR0NfSElHSF9MSU1JVF9SRUcwNzlIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX01BQ1JPVklTSU9OX1NZTkNfVEhSX1JFRzA3QUgsCisJCQlBVTg1MjJfVFZERUNfTUFDUk9WSVNJT05fU1lOQ19USFJfUkVHMDdBSF9DVkJTKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9UVkRFQ19JTlRSUF9DVFJMX1JFRzA3QkgsCisJCQlBVTg1MjJfVFZERUNfSU5UUlBfQ1RSTF9SRUcwN0JIX0NWQlMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0FHQ19MT1dfTElNSVRfUkVHMEU0SCwKKwkJCUFVODUyMl9UVkRFQ19BR0NfTE9XX0xJTUlUX1JFRzBFNEhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVE9SRUdBQUdDX1JFRzBFNUgsCisJCQlBVTg1MjJfVE9SRUdBQUdDX1JFRzBFNUhfQ1ZCUyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfUkVHMDE2SCwgQVU4NTIyX1JFRzAxNkhfQ1ZCUyk7CisKKwlzZXR1cF92Ymkoc3RhdGUsIDApOworCisJaWYgKGlucHV0X21vZGUgPT0gQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSF9TVklERU9fQ0gxMyB8fAorCSAgICBpbnB1dF9tb2RlID09IEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfU1ZJREVPX0NIMjQpIHsKKwkJLyogRGVzcGl0ZSB3aGF0IHRoZSB0YWJsZSBzYXlzLCBmb3IgdGhlIEhWUi05NTBxIHdlIHN0aWxsIG5lZWQKKwkJICAgdG8gYmUgaW4gQ1ZCUyBtb2RlIGZvciB0aGUgUy1WaWRlbyBpbnB1dCAocmVhc29uIHVrbm93bikuICovCisJCS8qIGZpbHRlcl9jb2VmX3R5cGUgPSAzOyAqLworCQlmaWx0ZXJfY29lZl90eXBlID0gNTsKKwl9IGVsc2UgeworCQlmaWx0ZXJfY29lZl90eXBlID0gNTsKKwl9CisKKwkvKiBMb2FkIHRoZSBWaWRlbyBEZWNvZGVyIEZpbHRlciBDb2VmZmljaWVudHMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZJTFRFUl9DT0VGOyBpKyspIHsKKwkJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBmaWx0ZXJfY29lZltpXS5yZWdfbmFtZSwKKwkJCQlmaWx0ZXJfY29lZltpXS5yZWdfdmFsW2ZpbHRlcl9jb2VmX3R5cGVdKTsKKwl9CisKKwkvKiBJdCdzIG5vdCBjbGVhciB3aGF0IHRoZXNlIHJlZ2lzdGVycyBhcmUgZm9yLCBidXQgdGhleSBhcmUgYWx3YXlzCisJICAgc2V0IHRvIHRoZSBzYW1lIHZhbHVlIHJlZ2FyZGxlc3Mgb2Ygd2hhdCBtb2RlIHdlJ3JlIGluICovCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfUkVHNDJFSCwgMHg4Nyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfUkVHNDJGSCwgMHhhMik7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfUkVHNDMwSCwgMHhiZik7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfUkVHNDMxSCwgMHhjYik7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfUkVHNDMySCwgMHhhMSk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfUkVHNDMzSCwgMHg0MSk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfUkVHNDM0SCwgMHg4OCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfUkVHNDM1SCwgMHhjMik7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfUkVHNDM2SCwgMHgzYyk7Cit9CisKK3N0YXRpYyB2b2lkIGF1ODUyMl9zZXR1cF9jdmJzX21vZGUoc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUpCit7CisJLyogaGVyZSB3ZSdyZSBnb2luZyB0byB0cnkgdGhlIHByZS1wcm9ncmFtbWVkIHJvdXRlICovCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfTU9EVUxFX0NMT0NLX0NPTlRST0xfUkVHMEEzSCwKKwkJCUFVODUyMl9NT0RVTEVfQ0xPQ0tfQ09OVFJPTF9SRUcwQTNIX0NWQlMpOworCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfUEdBX0NPTlRST0xfUkVHMDgySCwgMHgwMCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQ0xBTVBJTkdfQ09OVFJPTF9SRUcwODNILCAweDBlKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9QR0FfQ09OVFJPTF9SRUcwODJILCAweDEwKTsKKworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSCwKKwkJCUFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfQ1ZCU19DSDEpOworCisJc2V0dXBfZGVjb2Rlcl9kZWZhdWx0cyhzdGF0ZSwgQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSF9DVkJTX0NIMSk7CisKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRILAorCQkJQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEhfQ1ZCUyk7Cit9CisKK3N0YXRpYyB2b2lkIGF1ODUyMl9zZXR1cF9jdmJzX3R1bmVyX21vZGUoc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUpCit7CisJLyogaGVyZSB3ZSdyZSBnb2luZyB0byB0cnkgdGhlIHByZS1wcm9ncmFtbWVkIHJvdXRlICovCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfTU9EVUxFX0NMT0NLX0NPTlRST0xfUkVHMEEzSCwKKwkJCUFVODUyMl9NT0RVTEVfQ0xPQ0tfQ09OVFJPTF9SRUcwQTNIX0NWQlMpOworCisJLyogSXQncyBub3QgY2xlYXIgd2h5IHRoZXkgdHVybiBvZmYgdGhlIFBHQSBiZWZvcmUgZW5hYmxpbmcgdGhlIGNsYW1wCisJICAgY29udHJvbCwgYnV0IHRoZSBXaW5kb3dzIHRyYWNlIGRvZXMgaXQgc28gd2Ugd2lsbCB0b28uLi4gKi8KKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9QR0FfQ09OVFJPTF9SRUcwODJILCAweDAwKTsKKworCS8qIEVuYWJsZSBjbGFtcGluZyBjb250cm9sICovCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQ0xBTVBJTkdfQ09OVFJPTF9SRUcwODNILCAweDBlKTsKKworCS8qIFR1cm4gb24gdGhlIFBHQSAqLworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1BHQV9DT05UUk9MX1JFRzA4MkgsIDB4MTApOworCisJLyogU2V0IGlucHV0IG1vZGUgdG8gQ1ZCUyBvbiBjaGFubmVsIDQgd2l0aCBTSUYgYXVkaW8gaW5wdXQgZW5hYmxlZCAqLworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSCwKKwkJCUFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfQ1ZCU19DSDRfU0lGKTsKKworCXNldHVwX2RlY29kZXJfZGVmYXVsdHMoc3RhdGUsCisJCQkgICAgICAgQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSF9DVkJTX0NINF9TSUYpOworCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SCwKKwkJCUFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRIX0NWQlMpOworfQorCitzdGF0aWMgdm9pZCBhdTg1MjJfc2V0dXBfc3ZpZGVvX21vZGUoc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUpCit7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfTU9EVUxFX0NMT0NLX0NPTlRST0xfUkVHMEEzSCwKKwkJCUFVODUyMl9NT0RVTEVfQ0xPQ0tfQ09OVFJPTF9SRUcwQTNIX1NWSURFTyk7CisKKwkvKiBTZXQgaW5wdXQgdG8gWSBvbiBDaGFubmUxLCBDIG9uIENoYW5uZWwgMyAqLworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSCwKKwkJCUFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfU1ZJREVPX0NIMTMpOworCisJLyogRGlzYWJsZSBjbGFtcGluZyBjb250cm9sIChyZXF1aXJlZCBmb3IgUy12aWRlbykgKi8KKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9DTEFNUElOR19DT05UUk9MX1JFRzA4M0gsIDB4MDApOworCisJc2V0dXBfZGVjb2Rlcl9kZWZhdWx0cyhzdGF0ZSwKKwkJCSAgICAgICBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX1NWSURFT19DSDEzKTsKKworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEgsCisJCQlBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SF9DVkJTKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIHZvaWQgZGlzYWJsZV9hdWRpb19pbnB1dChzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSkKK3sKKwkvKiBUaGlzIGNhbiBwcm9iYWJseSBiZSBvcHRpbWl6ZWQgKi8KKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9BVURJT19WT0xVTUVfTF9SRUcwRjJILCAweDAwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9BVURJT19WT0xVTUVfUl9SRUcwRjNILCAweDAwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9BVURJT19WT0xVTUVfUkVHMEY0SCwgMHgwMCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfSTJDX0NPTlRST0xfUkVHMV9SRUcwOTFILCAweDgwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9JMkNfQ09OVFJPTF9SRUcwX1JFRzA5MEgsIDB4ODQpOworCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfRU5BX1VTQl9SRUcxMDFILCAweDAwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9BVURJT19WT0xVTUVfTF9SRUcwRjJILCAweDdGKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9BVURJT19WT0xVTUVfUl9SRUcwRjNILCAweDdGKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9SRUcwRjlILCBBVTg1MjJfUkVHMEY5SF9BVURJTyk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQVVESU9fTU9ERV9SRUcwRjFILCAweDQwKTsKKworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0dQSU9fREFUQV9SRUcwRTJILCAweDExKTsKKwltc2xlZXAoNSk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfR1BJT19EQVRBX1JFRzBFMkgsIDB4MDApOworCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzFfUkVHMEE1SCwgMHgwNCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQVVESU9GUkVRX1JFRzYwNkgsIDB4MDMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0kyU19DVFJMXzJfUkVHMTEySCwgMHgwMik7CisKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRILAorCQkJQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEhfQ1ZCUyk7Cit9CisKKy8qIDA9ZGlzYWJsZSwgMT1TSUYgKi8KK3N0YXRpYyB2b2lkIHNldF9hdWRpb19pbnB1dChzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSwgaW50IGF1ZF9pbnB1dCkKK3sKKwlpbnQgaTsKKworCS8qIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIG5lZWRzIHRvIGJlIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBzZXR0aW5nCisJICAgdGhlIGlucHV0IHJvdXRpbmcgdmlhIHJlZ2lzdGVyIDB4ODEgKi8KKworCWlmIChhdWRfaW5wdXQgPT0gQVU4NTIyX0FVRElPX05PTkUpIHsKKwkJZGlzYWJsZV9hdWRpb19pbnB1dChzdGF0ZSk7CisJCXJldHVybjsKKwl9CisKKwlpZiAoYXVkX2lucHV0ICE9IEFVODUyMl9BVURJT19TSUYpIHsKKwkJLyogVGhlIGNhbGxlciBhc2tlZCBmb3IgYSBtb2RlIHdlIGRvbid0IGN1cnJlbnRseSBzdXBwb3J0ICovCisJCXByaW50ayhLRVJOX0VSUiAiVW5zdXBwb3J0ZWQgYXVkaW8gbW9kZSByZXF1ZXN0ZWQhIG1vZGU9JWRcbiIsCisJCSAgICAgICBhdWRfaW5wdXQpOworCQlyZXR1cm47CisJfQorCisJLyogTG9hZCB0aGUgQXVkaW8gRGVjb2RlciBGaWx0ZXIgQ29lZmZpY2llbnRzICovCisJZm9yIChpID0gMDsgaSA8IE5VTV9MUEZJTFRFUl9DT0VGOyBpKyspIHsKKwkJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBscGZpbHRlcl9jb2VmW2ldLnJlZ19uYW1lLAorCQkJCWxwZmlsdGVyX2NvZWZbaV0ucmVnX3ZhbFswXSk7CisJfQorCisJLyogU2V0dXAgYXVkaW8gKi8KKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9BVURJT19WT0xVTUVfTF9SRUcwRjJILCAweDAwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9BVURJT19WT0xVTUVfUl9SRUcwRjNILCAweDAwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9BVURJT19WT0xVTUVfUkVHMEY0SCwgMHgwMCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfSTJDX0NPTlRST0xfUkVHMV9SRUcwOTFILCAweDgwKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9JMkNfQ09OVFJPTF9SRUcwX1JFRzA5MEgsIDB4ODQpOworCW1zbGVlcCgxNTApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEgsIDB4MDApOworCW1zbGVlcCgxKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRILCAweDlkKTsKKwltc2xlZXAoNTApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPX1ZPTFVNRV9MX1JFRzBGMkgsIDB4N0YpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPX1ZPTFVNRV9SX1JFRzBGM0gsIDB4N0YpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPX1ZPTFVNRV9SRUcwRjRILCAweGZmKTsKKwltc2xlZXAoODApOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPX1ZPTFVNRV9MX1JFRzBGMkgsIDB4N0YpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0FVRElPX1ZPTFVNRV9SX1JFRzBGM0gsIDB4N0YpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1JFRzBGOUgsIEFVODUyMl9SRUcwRjlIX0FVRElPKTsKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9BVURJT19NT0RFX1JFRzBGMUgsIDB4ODIpOworCW1zbGVlcCg3MCk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzFfUkVHMEE1SCwgMHgwOSk7CisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfQVVESU9GUkVRX1JFRzYwNkgsIDB4MDMpOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX0kyU19DVFJMXzJfUkVHMTEySCwgMHhjMik7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgYXU4NTIyX3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJc3RhdGUtPmJyaWdodG5lc3MgPSBjdHJsLT52YWx1ZTsKKwkJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfVFZERUNfQlJJR0hUTkVTU19SRUcwMEFILAorCQkJCWN0cmwtPnZhbHVlIC0gMTI4KTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJc3RhdGUtPmNvbnRyYXN0ID0gY3RybC0+dmFsdWU7CisJCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgQVU4NTIyX1RWREVDX0NPTlRSQVNUX1JFRzAwQkgsCisJCQkJY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgorCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgorCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCS8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdTg1MjJfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisKKwkvKiBOb3RlIHRoYXQgd2UgYXJlIHVzaW5nIHZhbHVlcyBjYWNoZWQgaW4gdGhlIHN0YXRlIHN0cnVjdHVyZSBpbnN0ZWFkCisJICAgb2YgcmVhZGluZyB0aGUgcmVnaXN0ZXJzIGR1ZSB0byBpc3N1ZXMgd2l0aCBpMmMgcmVhZHMgbm90IHdvcmtpbmcKKwkgICBwcm9wZXJseS9jb25zaXN0ZW50bHkgeWV0IG9uIHRoZSBIVlItOTUwcSAqLworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJY3RybC0+dmFsdWUgPSBzdGF0ZS0+YnJpZ2h0bmVzczsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJY3RybC0+dmFsdWUgPSBzdGF0ZS0+Y29udHJhc3Q7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CisJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgorCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJLyogTm90IHlldCBzdXBwb3J0ZWQgKi8KKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBhdTg1MjJfZ19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3dpdGNoIChmbXQtPnR5cGUpIHsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXU4NTIyX3NfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN3aXRjaCAoZm10LT50eXBlKSB7CisJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6CisJCS8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCitzdGF0aWMgaW50IGF1ODUyMl9nX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkgICAgIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKworCWlmICghdjRsMl9jaGlwX21hdGNoX2kyY19jbGllbnQoY2xpZW50LCAmcmVnLT5tYXRjaCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwlyZWctPnZhbCA9IGF1ODUyMl9yZWFkcmVnKHN0YXRlLCByZWctPnJlZyAmIDB4ZmZmZik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXU4NTIyX3NfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSAgICAgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCisJaWYgKCF2NGwyX2NoaXBfbWF0Y2hfaTJjX2NsaWVudChjbGllbnQsICZyZWctPm1hdGNoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgcmVnLT5yZWcsIHJlZy0+dmFsICYgMHhmZik7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCBhdTg1MjJfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKworCWlmIChlbmFibGUpIHsKKwkJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SCwKKwkJCQkweDAxKTsKKwkJbXNsZWVwKDEpOworCQlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRILAorCQkJCUFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRIX0NWQlMpOworCX0gZWxzZSB7CisJCS8qIFRoaXMgZG9lcyBub3QgY29tcGxldGVseSBwb3dlciBkb3duIHRoZSBkZXZpY2UKKwkJICAgKGl0IG9ubHkgcmVkdWNlcyBpdCBmcm9tIGFyb3VuZCAxNDBtYSB0byA4MG1hKSAqLworCQlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRILAorCQkJCTEgPDwgNSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF1ODUyMl9xdWVyeWN0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMjU1LCAxLAorCQkJCQkgICAgQVU4NTIyX1RWREVDX0NPTlRSQVNUX1JFRzAwQkhfQ1ZCUyk7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDI1NSwgMSwgMTI4KTsKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJCS8qIE5vdCB5ZXQgaW1wbGVtZW50ZWQgKi8KKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlxYy0+dHlwZSA9IDA7CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgYXU4NTIyX3Jlc2V0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiB2YWwpCit7CisJc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisKKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIDB4YTQsIDEgPDwgNSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdTg1MjJfc192aWRlb19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJICBjb25zdCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSkKK3sKKwlzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKworCWF1ODUyMl9yZXNldChzZCwgMCk7CisKKwkvKiBKYW0gb3BlbiB0aGUgaTJjIGdhdGUgdG8gdGhlIHR1bmVyLiAgV2UgZG8gdGhpcyBoZXJlIHRvIGhhbmRsZSB0aGUKKwkgICBjYXNlIHdoZXJlIHRoZSB1c2VyIHdlbnQgaW50byBkaWdpdGFsIG1vZGUgKGNhdXNpbmcgdGhlIGdhdGUgdG8gYmUKKwkgICBjbG9zZWQpLCBhbmQgdGhlbiBjYW1lIGJhY2sgdG8gYW5hbG9nIG1vZGUgKi8KKwlhdTg1MjJfd3JpdGVyZWcoc3RhdGUsIDB4MTA2LCAxKTsKKworCWlmIChyb3V0ZS0+aW5wdXQgPT0gQVU4NTIyX0NPTVBPU0lURV9DSDEpIHsKKwkJYXU4NTIyX3NldHVwX2N2YnNfbW9kZShzdGF0ZSk7CisJfSBlbHNlIGlmIChyb3V0ZS0+aW5wdXQgPT0gQVU4NTIyX1NWSURFT19DSDEzKSB7CisJCWF1ODUyMl9zZXR1cF9zdmlkZW9fbW9kZShzdGF0ZSk7CisJfSBlbHNlIGlmIChyb3V0ZS0+aW5wdXQgPT0gQVU4NTIyX0NPTVBPU0lURV9DSDRfU0lGKSB7CisJCWF1ODUyMl9zZXR1cF9jdmJzX3R1bmVyX21vZGUoc3RhdGUpOworCX0gZWxzZSB7CisJCXByaW50ayhLRVJOX0VSUiAiYXU4NTIyIG1vZGUgbm90IGN1cnJlbnRseSBzdXBwb3J0ZWRcbiIpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXU4NTIyX3NfYXVkaW9fcm91dGluZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCSAgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCit7CisJc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJc2V0X2F1ZGlvX2lucHV0KHN0YXRlLCByb3V0ZS0+aW5wdXQpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGF1ODUyMl9nX3R1bmVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3R1bmVyICp2dCkKK3sKKwlpbnQgdmFsID0gMDsKKwlzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwl1OCBsb2NrX3N0YXR1czsKKworCS8qIEludGVycm9nYXRlIHRoZSBkZWNvZGVyIHRvIHNlZSBpZiB3ZSBhcmUgZ2V0dGluZyBhIHJlYWwgc2lnbmFsICovCisJbG9ja19zdGF0dXMgPSBhdTg1MjJfcmVhZHJlZyhzdGF0ZSwgMHgwMCk7CisJaWYgKGxvY2tfc3RhdHVzID09IDB4YTIpCisJCXZ0LT5zaWduYWwgPSAweDAxOworCWVsc2UKKwkJdnQtPnNpZ25hbCA9IDB4MDA7CisKKwl2dC0+Y2FwYWJpbGl0eSB8PQorCQlWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfCBWNEwyX1RVTkVSX0NBUF9MQU5HMSB8CisJCVY0TDJfVFVORVJfQ0FQX0xBTkcyIHwgVjRMMl9UVU5FUl9DQVBfU0FQOworCisJdmFsID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKKwl2dC0+cnhzdWJjaGFucyA9IHZhbDsKKwl2dC0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXU4NTIyX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJICAgICAgIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIHN0YXRlLT5pZCwgc3RhdGUtPnJldik7Cit9CisKK3N0YXRpYyBpbnQgYXU4NTIyX2xvZ19zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwkvKiBGSVhNRTogQWRkIHNvbWUgc3RhdHVzIGluZm8gaGVyZSAqLworCXJldHVybiAwOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGF1ODUyMl9jb3JlX29wcyA9IHsKKwkubG9nX3N0YXR1cyA9IGF1ODUyMl9sb2dfc3RhdHVzLAorCS5nX2NoaXBfaWRlbnQgPSBhdTg1MjJfZ19jaGlwX2lkZW50LAorCS5nX2N0cmwgPSBhdTg1MjJfZ19jdHJsLAorCS5zX2N0cmwgPSBhdTg1MjJfc19jdHJsLAorCS5xdWVyeWN0cmwgPSBhdTg1MjJfcXVlcnljdHJsLAorCS5yZXNldCA9IGF1ODUyMl9yZXNldCwKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLmdfcmVnaXN0ZXIgPSBhdTg1MjJfZ19yZWdpc3RlciwKKwkuc19yZWdpc3RlciA9IGF1ODUyMl9zX3JlZ2lzdGVyLAorI2VuZGlmCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3R1bmVyX29wcyBhdTg1MjJfdHVuZXJfb3BzID0geworCS5nX3R1bmVyID0gYXU4NTIyX2dfdHVuZXIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2F1ZGlvX29wcyBhdTg1MjJfYXVkaW9fb3BzID0geworCS5zX3JvdXRpbmcgPSBhdTg1MjJfc19hdWRpb19yb3V0aW5nLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgYXU4NTIyX3ZpZGVvX29wcyA9IHsKKwkuc19yb3V0aW5nID0gYXU4NTIyX3NfdmlkZW9fcm91dGluZywKKwkuZ19mbXQgPSBhdTg1MjJfZ19mbXQsCisJLnNfZm10ID0gYXU4NTIyX3NfZm10LAorCS5zX3N0cmVhbSA9IGF1ODUyMl9zX3N0cmVhbSwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIGF1ODUyMl9vcHMgPSB7CisJLmNvcmUgPSAmYXU4NTIyX2NvcmVfb3BzLAorCS50dW5lciA9ICZhdTg1MjJfdHVuZXJfb3BzLAorCS5hdWRpbyA9ICZhdTg1MjJfYXVkaW9fb3BzLAorCS52aWRlbyA9ICZhdTg1MjJfdmlkZW9fb3BzLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBhdTg1MjJfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICpkaWQpCit7CisJc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGU7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKwlpbnQgaW5zdGFuY2U7CisJc3RydWN0IGF1ODUyMl9jb25maWcgKmRlbW9kX2NvbmZpZzsKKworCS8qIENoZWNrIGlmIHRoZSBhZGFwdGVyIHN1cHBvcnRzIHRoZSBuZWVkZWQgZmVhdHVyZXMgKi8KKwlpZiAoIWkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwKKwkJCQkgICAgIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpIHsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KKwlpbnN0YW5jZSA9IGF1ODUyMl9nZXRfc3RhdGUoJnN0YXRlLCBjbGllbnQtPmFkYXB0ZXIsIGNsaWVudC0+YWRkcik7CisJc3dpdGNoIChpbnN0YW5jZSkgeworCWNhc2UgMDoKKwkJcHJpbnRrKEtFUk5fRVJSICJhdTg1MjJfZGVjb2RlciBhbGxvY2F0aW9uIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUlPOworCWNhc2UgMToKKwkJLyogbmV3IGRlbW9kIGluc3RhbmNlICovCisJCXByaW50ayhLRVJOX0lORk8gImF1ODUyMl9kZWNvZGVyIGNyZWF0aW5nIG5ldyBpbnN0YW5jZS4uLlxuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIGV4aXN0aW5nIGRlbW9kIGluc3RhbmNlICovCisJCXByaW50ayhLRVJOX0lORk8gImF1ODUyMl9kZWNvZGVyIGF0dGFjaCBleGlzdGluZyBpbnN0YW5jZS5cbiIpOworCQlicmVhazsKKwl9CisKKwlkZW1vZF9jb25maWcgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYXU4NTIyX2NvbmZpZyksIEdGUF9LRVJORUwpOworCWRlbW9kX2NvbmZpZy0+ZGVtb2RfYWRkcmVzcyA9IDB4OGUgPj4gMTsKKworCXN0YXRlLT5jb25maWcgPSBkZW1vZF9jb25maWc7CisJc3RhdGUtPmkyYyA9IGNsaWVudC0+YWRhcHRlcjsKKworCXNkID0gJnN0YXRlLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmYXU4NTIyX29wcyk7CisKKwlzdGF0ZS0+YyA9IGNsaWVudDsKKwlzdGF0ZS0+dmlkX2lucHV0ID0gQVU4NTIyX0NPTVBPU0lURV9DSDE7CisJc3RhdGUtPmF1ZF9pbnB1dCA9IEFVODUyMl9BVURJT19OT05FOworCXN0YXRlLT5pZCA9IDg1MjI7CisJc3RhdGUtPnJldiA9IDA7CisKKwkvKiBKYW0gb3BlbiB0aGUgaTJjIGdhdGUgdG8gdGhlIHR1bmVyICovCisJYXU4NTIyX3dyaXRlcmVnKHN0YXRlLCAweDEwNiwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhdTg1MjJfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCit7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlhdTg1MjJfcmVsZWFzZV9zdGF0ZSh0b19zdGF0ZShzZCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYXU4NTIyX2lkW10gPSB7CisJeyJhdTg1MjIiLCAwfSwKKwl7fQorfTsKKworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGF1ODUyMl9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKKwkubmFtZSA9ICJhdTg1MjIiLAorCS5wcm9iZSA9IGF1ODUyMl9wcm9iZSwKKwkucmVtb3ZlID0gYXU4NTIyX3JlbW92ZSwKKwkuaWRfdGFibGUgPSBhdTg1MjJfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMl9kaWcuYwpzaW1pbGFyaXR5IGluZGV4IDkxJQpyZW5hbWUgZnJvbSBkcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvYXU4NTIyLmMKcmVuYW1lIHRvIGRyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjJfZGlnLmMKaW5kZXggZWFiZjlhNi4uMzU3MzEyNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjJfZGlnLmMKQEAgLTI3LDM1ICsyNywyNSBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCiAjaW5jbHVkZSAiYXU4NTIyLmgiCi0KLXN0cnVjdCBhdTg1MjJfc3RhdGUgewotCi0Jc3RydWN0IGkyY19hZGFwdGVyICppMmM7Ci0KLQkvKiBjb25maWd1cmF0aW9uIHNldHRpbmdzICovCi0JY29uc3Qgc3RydWN0IGF1ODUyMl9jb25maWcgKmNvbmZpZzsKLQotCXN0cnVjdCBkdmJfZnJvbnRlbmQgZnJvbnRlbmQ7Ci0KLQl1MzIgY3VycmVudF9mcmVxdWVuY3k7Ci0JZmVfbW9kdWxhdGlvbl90IGN1cnJlbnRfbW9kdWxhdGlvbjsKLQotCXUzMiBmZV9zdGF0dXM7Ci0JdW5zaWduZWQgaW50IGxlZF9zdGF0ZTsKLX07CisjaW5jbHVkZSAiYXU4NTIyX3ByaXYuaCIKIAogc3RhdGljIGludCBkZWJ1ZzsKIAotI2RlZmluZSBkcHJpbnRrKGFyZy4uLikgZG8gewkJXAotCWlmIChkZWJ1ZykgCQkJXAotCQkgcHJpbnRrKGFyZyk7IAkJXAorLyogRGVzcGl0ZSB0aGUgbmFtZSAiaHlicmlkX3R1bmVyIiwgdGhlIGZyYW1ld29yayB3b3JrcyBqdXN0IGFzIHdlbGwgZm9yCisgICBoeWJyaWQgZGVtb2R1bGF0b3JzIGFzIHdlbGwuLi4gKi8KK3N0YXRpYyBMSVNUX0hFQUQoaHlicmlkX3R1bmVyX2luc3RhbmNlX2xpc3QpOworc3RhdGljIERFRklORV9NVVRFWChhdTg1MjJfbGlzdF9tdXRleCk7CisKKyNkZWZpbmUgZHByaW50ayhhcmcuLi4pXAorCWRvIHsgaWYgKGRlYnVnKVwKKwkJcHJpbnRrKGFyZyk7XAogCX0gd2hpbGUgKDApCiAKIC8qIDE2IGJpdCByZWdpc3RlcnMsIDggYml0IHZhbHVlcyAqLwotc3RhdGljIGludCBhdTg1MjJfd3JpdGVyZWcoc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUsIHUxNiByZWcsIHU4IGRhdGEpCitpbnQgYXU4NTIyX3dyaXRlcmVnKHN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlLCB1MTYgcmVnLCB1OCBkYXRhKQogewogCWludCByZXQ7Ci0JdTggYnVmIFtdID0geyByZWcgPj4gOCwgcmVnICYgMHhmZiwgZGF0YSB9OworCXU4IGJ1ZltdID0geyAocmVnID4+IDgpIHwgMHg4MCwgcmVnICYgMHhmZiwgZGF0YSB9OwogCiAJc3RydWN0IGkyY19tc2cgbXNnID0geyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsCiAJCQkgICAgICAgLmZsYWdzID0gMCwgLmJ1ZiA9IGJ1ZiwgLmxlbiA9IDMgfTsKQEAgLTY5LDEzICs1OSwxMyBAQAogCXJldHVybiAocmV0ICE9IDEpID8gLTEgOiAwOwogfQogCi1zdGF0aWMgdTggYXU4NTIyX3JlYWRyZWcoc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUsIHUxNiByZWcpCit1OCBhdTg1MjJfcmVhZHJlZyhzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSwgdTE2IHJlZykKIHsKIAlpbnQgcmV0OwotCXU4IGIwIFtdID0geyByZWcgPj4gOCwgcmVnICYgMHhmZiB9OwotCXU4IGIxIFtdID0geyAwIH07CisJdTggYjBbXSA9IHsgKHJlZyA+PiA4KSB8IDB4NDAsIHJlZyAmIDB4ZmYgfTsKKwl1OCBiMVtdID0geyAwIH07CiAKLQlzdHJ1Y3QgaTJjX21zZyBtc2cgW10gPSB7CisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7CiAJCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzLCAuZmxhZ3MgPSAwLAogCQkgIC5idWYgPSBiMCwgLmxlbiA9IDIgfSwKIAkJeyAuYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3MsIC5mbGFncyA9IEkyQ19NX1JELApAQCAtNTI4LDcgKzUxOCw3IEBACiAKIC8qIFJlc2V0IHRoZSBkZW1vZCBoYXJkd2FyZSBhbmQgcmVzZXQgYWxsIG9mIHRoZSBjb25maWd1cmF0aW9uIHJlZ2lzdGVycwogICAgdG8gYSBkZWZhdWx0IHN0YXRlLiAqLwotc3RhdGljIGludCBhdTg1MjJfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK2ludCBhdTg1MjJfaW5pdChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKIHsKIAlzdHJ1Y3QgYXU4NTIyX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwogCWRwcmludGsoIiVzKClcbiIsIF9fZnVuY19fKTsKQEAgLTYyNCw3ICs2MTQsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGF1ODUyMl9zbGVlcChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK2ludCBhdTg1MjJfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKIAlkcHJpbnRrKCIlcygpXG4iLCBfX2Z1bmNfXyk7CkBAIC02MzIsNiArNjIyLDkgQEAKIAkvKiB0dXJuIG9mZiBsZWQgKi8KIAlhdTg1MjJfbGVkX2N0cmwoc3RhdGUsIDApOwogCisJLyogUG93ZXIgZG93biB0aGUgY2hpcCAqLworCWF1ODUyMl93cml0ZXJlZyhzdGF0ZSwgMHhhNCwgMSA8PCA1KTsKKwogCXN0YXRlLT5jdXJyZW50X2ZyZXF1ZW5jeSA9IDA7CiAKIAlyZXR1cm4gMDsKQEAgLTc5OCwyMyArNzkxLDU4IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBhdTg1MjJfb3BzOworCitpbnQgYXU4NTIyX2dldF9zdGF0ZShzdHJ1Y3QgYXU4NTIyX3N0YXRlICoqc3RhdGUsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLAorCQkgICAgIHU4IGNsaWVudF9hZGRyZXNzKQoreworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZhdTg1MjJfbGlzdF9tdXRleCk7CisJcmV0ID0gaHlicmlkX3R1bmVyX3JlcXVlc3Rfc3RhdGUoc3RydWN0IGF1ODUyMl9zdGF0ZSwgKCpzdGF0ZSksCisJCQkJCSBoeWJyaWRfdHVuZXJfaW5zdGFuY2VfbGlzdCwKKwkJCQkJIGkyYywgY2xpZW50X2FkZHJlc3MsICJhdTg1MjIiKTsKKwltdXRleF91bmxvY2soJmF1ODUyMl9saXN0X211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK3ZvaWQgYXU4NTIyX3JlbGVhc2Vfc3RhdGUoc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUpCit7CisJbXV0ZXhfbG9jaygmYXU4NTIyX2xpc3RfbXV0ZXgpOworCWlmIChzdGF0ZSAhPSBOVUxMKQorCQloeWJyaWRfdHVuZXJfcmVsZWFzZV9zdGF0ZShzdGF0ZSk7CisJbXV0ZXhfdW5sb2NrKCZhdTg1MjJfbGlzdF9tdXRleCk7Cit9CisKKwogc3RhdGljIHZvaWQgYXU4NTIyX3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCiB7CiAJc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKLQlrZnJlZShzdGF0ZSk7CisJYXU4NTIyX3JlbGVhc2Vfc3RhdGUoc3RhdGUpOwogfQogCi1zdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgYXU4NTIyX29wczsKLQogc3RydWN0IGR2Yl9mcm9udGVuZCAqYXU4NTIyX2F0dGFjaChjb25zdCBzdHJ1Y3QgYXU4NTIyX2NvbmZpZyAqY29uZmlnLAogCQkJCSAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQogewogCXN0cnVjdCBhdTg1MjJfc3RhdGUgKnN0YXRlID0gTlVMTDsKKwlpbnQgaW5zdGFuY2U7CiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLwotCXN0YXRlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGF1ODUyMl9zdGF0ZSksIEdGUF9LRVJORUwpOwotCWlmIChzdGF0ZSA9PSBOVUxMKQotCQlnb3RvIGVycm9yOworCWluc3RhbmNlID0gYXU4NTIyX2dldF9zdGF0ZSgmc3RhdGUsIGkyYywgY29uZmlnLT5kZW1vZF9hZGRyZXNzKTsKKwlzd2l0Y2ggKGluc3RhbmNlKSB7CisJY2FzZSAwOgorCQlkcHJpbnRrKCIlcyBzdGF0ZSBhbGxvY2F0aW9uIGZhaWxlZFxuIiwgX19mdW5jX18pOworCQlicmVhazsKKwljYXNlIDE6CisJCS8qIG5ldyBkZW1vZCBpbnN0YW5jZSAqLworCQlkcHJpbnRrKCIlcyB1c2luZyBuZXcgaW5zdGFuY2VcbiIsIF9fZnVuY19fKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJLyogZXhpc3RpbmcgZGVtb2QgaW5zdGFuY2UgKi8KKwkJZHByaW50aygiJXMgdXNpbmcgZXhpc3RpbmcgaW5zdGFuY2VcbiIsIF9fZnVuY19fKTsKKwkJYnJlYWs7CisJfQogCiAJLyogc2V0dXAgdGhlIHN0YXRlICovCiAJc3RhdGUtPmNvbmZpZyA9IGNvbmZpZzsKQEAgLTgzNiw3ICs4NjQsNyBAQAogCXJldHVybiAmc3RhdGUtPmZyb250ZW5kOwogCiBlcnJvcjoKLQlrZnJlZShzdGF0ZSk7CisJYXU4NTIyX3JlbGVhc2Vfc3RhdGUoc3RhdGUpOwogCXJldHVybiBOVUxMOwogfQogRVhQT1JUX1NZTUJPTChhdTg1MjJfYXR0YWNoKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjJfcHJpdi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2F1ODUyMl9wcml2LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjMyOGYyYgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9hdTg1MjJfcHJpdi5oCkBAIC0wLDAgKzEsNDEyIEBACisvKgorICAgIEF1dml0ZWsgQVU4NTIyIFFBTS84VlNCIGRlbW9kdWxhdG9yIGRyaXZlcgorCisgICAgQ29weXJpZ2h0IChDKSAyMDA4IFN0ZXZlbiBUb3RoIDxzdG90aEBsaW51eHR2Lm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDggRGV2aW4gSGVpdG11ZWxsZXIgPGRoZWl0bXVlbGxlckBsaW51eHR2Lm9yZz4KKyAgICBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBBdXZpdGVrIEludGVybmF0aW9uYWwsIEx0ZC4KKworICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICAgIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAgICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorCisgICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICAgIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorCisqLworCisjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L3N0cmluZy5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisjaW5jbHVkZSAiYXU4NTIyLmgiCisjaW5jbHVkZSAidHVuZXItaTJjLmgiCisKK3N0cnVjdCBhdTg1MjJfc3RhdGUgeworCXN0cnVjdCBpMmNfY2xpZW50ICpjOworCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjOworCisJLyogVXNlZCBmb3Igc2hhcmluZyBvZiB0aGUgc3RhdGUgYmV0d2VlbiBhbmFsb2cgYW5kIGRpZ2l0YWwgbW9kZSAqLworCXN0cnVjdCB0dW5lcl9pMmNfcHJvcHMgaTJjX3Byb3BzOworCXN0cnVjdCBsaXN0X2hlYWQgaHlicmlkX3R1bmVyX2luc3RhbmNlX2xpc3Q7CisKKwkvKiBjb25maWd1cmF0aW9uIHNldHRpbmdzICovCisJY29uc3Qgc3RydWN0IGF1ODUyMl9jb25maWcgKmNvbmZpZzsKKworCXN0cnVjdCBkdmJfZnJvbnRlbmQgZnJvbnRlbmQ7CisKKwl1MzIgY3VycmVudF9mcmVxdWVuY3k7CisJZmVfbW9kdWxhdGlvbl90IGN1cnJlbnRfbW9kdWxhdGlvbjsKKworCXUzMiBmZV9zdGF0dXM7CisJdW5zaWduZWQgaW50IGxlZF9zdGF0ZTsKKworCS8qIEFuYWxvZyBzZXR0aW5ncyAqLworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKKwl2NGwyX3N0ZF9pZCBzdGQ7CisJaW50IHZpZF9pbnB1dDsKKwlpbnQgYXVkX2lucHV0OworCXUzMiBpZDsKKwl1MzIgcmV2OworCXU4IGJyaWdodG5lc3M7CisJdTggY29udHJhc3Q7Cit9OworCisvKiBUaGVzZSBhcmUgcm91dGluZXMgc2hhcmVkIGJ5IGJvdGggdGhlIFZTQi9RQU0gZGVtb2R1bGF0b3IgYW5kIHRoZSBhbmFsb2cKKyAgIGRlY29kZXIgKi8KK2ludCBhdTg1MjJfd3JpdGVyZWcoc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUsIHUxNiByZWcsIHU4IGRhdGEpOwordTggYXU4NTIyX3JlYWRyZWcoc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUsIHUxNiByZWcpOworaW50IGF1ODUyMl9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKTsKK2ludCBhdTg1MjJfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpOworCitpbnQgYXU4NTIyX2dldF9zdGF0ZShzdHJ1Y3QgYXU4NTIyX3N0YXRlICoqc3RhdGUsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLAorCQkgICAgIHU4IGNsaWVudF9hZGRyZXNzKTsKK3ZvaWQgYXU4NTIyX3JlbGVhc2Vfc3RhdGUoc3RydWN0IGF1ODUyMl9zdGF0ZSAqc3RhdGUpOworCisvKiBSRUdJU1RFUlMgKi8KKyNkZWZpbmUgQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSAkJCTB4MDgxCisjZGVmaW5lIEFVODUyMl9QR0FfQ09OVFJPTF9SRUcwODJICQkJMHgwODIKKyNkZWZpbmUgQVU4NTIyX0NMQU1QSU5HX0NPTlRST0xfUkVHMDgzSAkJCTB4MDgzCisKKyNkZWZpbmUgQVU4NTIyX01PRFVMRV9DTE9DS19DT05UUk9MX1JFRzBBM0gJCTB4MEEzCisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRICQkweDBBNAorI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzFfUkVHMEE1SAkJMHgwQTUKKyNkZWZpbmUgQVU4NTIyX0FHQ19DT05UUk9MX1JBTkdFX1JFRzBBNkgJCTB4MEE2CisjZGVmaW5lIEFVODUyMl9TWVNURU1fR0FJTl9DT05UUk9MX1JFRzBBN0gJCTB4MEE3CisjZGVmaW5lIEFVODUyMl9UVU5FUl9BR0NfUkZfU1RPUF9SRUcwQThIICAJCTB4MEE4CisjZGVmaW5lIEFVODUyMl9UVU5FUl9BR0NfUkZfU1RBUlRfUkVHMEE5SAkJMHgwQTkKKyNkZWZpbmUgQVU4NTIyX1RVTkVSX1JGX0FHQ19ERUZBVUxUX1JFRzBBQUgJCTB4MEFBCisjZGVmaW5lIEFVODUyMl9UVU5FUl9BR0NfSUZfU1RPUF9SRUcwQUJICQkweDBBQgorI2RlZmluZSBBVTg1MjJfVFVORVJfQUdDX0lGX1NUQVJUX1JFRzBBQ0gJCTB4MEFDCisjZGVmaW5lIEFVODUyMl9UVU5FUl9BR0NfSUZfREVGQVVMVF9SRUcwQURICQkweDBBRAorI2RlZmluZSBBVTg1MjJfVFVORVJfQUdDX1NURVBfUkVHMEFFSAkJCTB4MEFFCisjZGVmaW5lIEFVODUyMl9UVU5FUl9HQUlOX1NURVBfUkVHMEFGSAkJCTB4MEFGCisKKy8qIFJlY2VpdmVyIHJlZ2lzdGVycyAqLworI2RlZmluZSBBVTg1MjJfRlJNUkVHVEhSRDFfUkVHMEIwSAkJCTB4MEIwCisjZGVmaW5lIEFVODUyMl9GUk1SRUdBR0MxSF9SRUcwQjFIIAkJCTB4MEIxCisjZGVmaW5lIEFVODUyMl9GUk1SRUdTSElGVDFfUkVHMEIySCAJCQkweDBCMgorI2RlZmluZSBBVTg1MjJfVE9SRUdBR0MxX1JFRzBCM0ggCQkJMHgwQjMKKyNkZWZpbmUgQVU4NTIyX1RPUkVHQVNISUZUMV9SRUcwQjRIIAkJCTB4MEI0CisjZGVmaW5lIEFVODUyMl9GUk1SRUdCQkhfUkVHMEI1SAkJCTB4MEI1CisjZGVmaW5lIEFVODUyMl9GUk1SRUdCQk1fUkVHMEI2SCAJCQkweDBCNgorI2RlZmluZSBBVTg1MjJfRlJNUkVHQkJMX1JFRzBCN0ggICAgIAkJCTB4MEI3CisvKiAweEI4IFRPIDB4RDcgYXJlIHRoZSBmaWx0ZXIgY29lZmZpY2llbnRzICovCisjZGVmaW5lIEFVODUyMl9GUk1SRUdUSFJEMl9SRUcwRDhIIAkJCTB4MEQ4CisjZGVmaW5lIEFVODUyMl9GUk1SRUdBR0MySF9SRUcwRDlIIAkJCTB4MEQ5CisjZGVmaW5lIEFVODUyMl9UT1JFR0FHQzJfUkVHMERBSCAJCQkweDBEQQorI2RlZmluZSBBVTg1MjJfVE9SRUdTSElGVDJfUkVHMERCSCAJCQkweDBEQgorI2RlZmluZSBBVTg1MjJfRlJNUkVHUElMT1RIX1JFRzBEQ0gJCQkweDBEQworI2RlZmluZSBBVTg1MjJfRlJNUkVHUElMT1RNX1JFRzBEREgJCQkweDBERAorI2RlZmluZSBBVTg1MjJfRlJNUkVHUElMT1RMX1JFRzBERUgJCQkweDBERQorI2RlZmluZSBBVTg1MjJfVE9SRUdGUkVRX1JFRzBERkgJCQkweDBERgorCisjZGVmaW5lIEFVODUyMl9SWF9QR0FfUkZPVVRfUkVHMEVCSAkJCTB4MEVCCisjZGVmaW5lIEFVODUyMl9SWF9QR0FfSUZPVVRfUkVHMEVDSAkJCTB4MEVDCisjZGVmaW5lIEFVODUyMl9SWF9QR0FfUEdBT1VUX1JFRzBFREgJCQkweDBFRAorCisjZGVmaW5lIEFVODUyMl9DSElQX01PREVfUkVHMEZFSAkJCTB4MEZFCisKKy8qIEkyQyBidXMgY29udHJvbCByZWdpc3RlcnMgKi8KKyNkZWZpbmUgQVU4NTIyX0kyQ19DT05UUk9MX1JFRzBfUkVHMDkwSCAgICAJCTB4MDkwCisjZGVmaW5lIEFVODUyMl9JMkNfQ09OVFJPTF9SRUcxX1JFRzA5MUggICAgCQkweDA5MQorI2RlZmluZSBBVTg1MjJfSTJDX1NUQVRVU19SRUcwOTJIICAgICAgICAgIAkJMHgwOTIKKyNkZWZpbmUgQVU4NTIyX0kyQ19XUl9EQVRBMF9SRUcwOTNICQkJMHgwOTMKKyNkZWZpbmUgQVU4NTIyX0kyQ19XUl9EQVRBMV9SRUcwOTRICQkJMHgwOTQKKyNkZWZpbmUgQVU4NTIyX0kyQ19XUl9EQVRBMl9SRUcwOTVICQkJMHgwOTUKKyNkZWZpbmUgQVU4NTIyX0kyQ19XUl9EQVRBM19SRUcwOTZICQkJMHgwOTYKKyNkZWZpbmUgQVU4NTIyX0kyQ19XUl9EQVRBNF9SRUcwOTdICQkJMHgwOTcKKyNkZWZpbmUgQVU4NTIyX0kyQ19XUl9EQVRBNV9SRUcwOThICQkJMHgwOTgKKyNkZWZpbmUgQVU4NTIyX0kyQ19XUl9EQVRBNl9SRUcwOTlICQkJMHgwOTkKKyNkZWZpbmUgQVU4NTIyX0kyQ19XUl9EQVRBN19SRUcwOUFICQkJMHgwOUEKKyNkZWZpbmUgQVU4NTIyX0kyQ19SRF9EQVRBMF9SRUcwOUJICQkJMHgwOUIKKyNkZWZpbmUgQVU4NTIyX0kyQ19SRF9EQVRBMV9SRUcwOUNICQkJMHgwOUMKKyNkZWZpbmUgQVU4NTIyX0kyQ19SRF9EQVRBMl9SRUcwOURICQkJMHgwOUQKKyNkZWZpbmUgQVU4NTIyX0kyQ19SRF9EQVRBM19SRUcwOUVICQkJMHgwOUUKKyNkZWZpbmUgQVU4NTIyX0kyQ19SRF9EQVRBNF9SRUcwOUZICQkJMHgwOUYKKyNkZWZpbmUgQVU4NTIyX0kyQ19SRF9EQVRBNV9SRUcwQTBICQkJMHgwQTAKKyNkZWZpbmUgQVU4NTIyX0kyQ19SRF9EQVRBNl9SRUcwQTFICQkJMHgwQTEKKyNkZWZpbmUgQVU4NTIyX0kyQ19SRF9EQVRBN19SRUcwQTJICQkJMHgwQTIKKworI2RlZmluZSBBVTg1MjJfRU5BX1VTQl9SRUcxMDFICQkJCTB4MTAxCisKKyNkZWZpbmUgQVU4NTIyX0kyU19DVFJMXzBfUkVHMTEwSCAgCQkJMHgxMTAKKyNkZWZpbmUgQVU4NTIyX0kyU19DVFJMXzFfUkVHMTExSCAJCQkweDExMQorI2RlZmluZSBBVTg1MjJfSTJTX0NUUkxfMl9SRUcxMTJIIAkJCTB4MTEyCisKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0ZGRUNPTlRST0xfUkVHMTIxSCAgICAJCTB4MTIxCisjZGVmaW5lIEFVODUyMl9GUk1SRUdERkVDT05UUk9MX1JFRzEyMkggICAgCQkweDEyMgorCisjZGVmaW5lIEFVODUyMl9DQVJSRlJFUU9GRlNFVDBfUkVHMjAxSCAJCQkweDIwMQorI2RlZmluZSBBVTg1MjJfQ0FSUkZSRVFPRkZTRVQxX1JFRzIwMkgJCQkweDIwMgorCisjZGVmaW5lIEFVODUyMl9ERUNJTUFUSU9OX0dBSU5fUkVHMjFBSAkJCTB4MjFBCisjZGVmaW5lIEFVODUyMl9GUk1SRUdJRlNMUF9SRUcyMUJIIAkJCTB4MjFCCisjZGVmaW5lIEFVODUyMl9GUk1SRUdUSFJETDJfUkVHMjFDSCAJCQkweDIxQworI2RlZmluZSBBVTg1MjJfRlJNUkVHU1RFUDNEQl9SRUcyMURIIAkJCTB4MjFECisjZGVmaW5lIEFVODUyMl9EQUdDX0dBSU5fQURKVVNUTUVOVF9SRUcyMUVICQkweDIxRQorI2RlZmluZSBBVTg1MjJfRlJNUkVHUExMTU9ERV9SRUcyMUZIIAkJCTB4MjFGCisjZGVmaW5lIEFVODUyMl9GUk1SRUdDU1RIUkRfUkVHMjIwSCAJCQkweDIyMAorI2RlZmluZSBBVTg1MjJfRlJNUkVHQ1JMT0NLRE1BWF9SRUcyMjFIIAkJMHgyMjEKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0NSUEVSSU9ETUFTS19SRUcyMjJIIAkJMHgyMjIKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0NSTE9DSzBUSEhfUkVHMjIzSCAJCTB4MjIzCisjZGVmaW5lIEFVODUyMl9GUk1SRUdDUkxPQ0sxVEhIX1JFRzIyNEggCQkweDIyNAorI2RlZmluZSBBVTg1MjJfRlJNUkVHQ1JMT0NLMFRITF9SRUcyMjVIIAkJMHgyMjUKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0NSTE9DSzFUSExfUkVHMjI2SCAJCTB4MjI2CisjZGVmaW5lIEFVX0ZSTVJFR1BMTEFDUVBIQVNFU0NMX1JFRzIyN0gJCQkweDIyNworI2RlZmluZSBBVTg1MjJfRlJNUkVHRlJFUUZCQ1RSTF9SRUcyMjhIIAkJMHgyMjgKKworLyogQW5hbG9nIFRWIERlY29kZXIgKi8KKyNkZWZpbmUgQVU4NTIyX1RWREVDX1NUQVRVU19SRUcwMDBICQkJMHgwMDAKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0lOVF9TVEFUVVNfUkVHMDAxSAkJCTB4MDAxCisjZGVmaW5lIEFVODUyMl9UVkRFQ19NQUNST1ZJU0lPTl9TVEFUVVNfUkVHMDAySCAJMHgwMDIKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1NIQVJQTkVTU1JFRzAwOUgJCQkweDAwOQorI2RlZmluZSBBVTg1MjJfVFZERUNfQlJJR0hUTkVTU19SRUcwMEFICQkJMHgwMEEKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTlRSQVNUX1JFRzAwQkgJCQkweDAwQgorI2RlZmluZSBBVTg1MjJfVFZERUNfU0FUVVJBVElPTl9DQl9SRUcwMENICQkweDAwQworI2RlZmluZSBBVTg1MjJfVFZERUNfU0FUVVJBVElPTl9DUl9SRUcwMERICQkweDAwRAorI2RlZmluZSBBVTg1MjJfVFZERUNfSFVFX0hfUkVHMDBFSAkJCTB4MDBFCisjZGVmaW5lIEFVODUyMl9UVkRFQ19IVUVfTF9SRUcwMEZIICAgICAgICAgICAgICAgICAgIAkweDAwRgorI2RlZmluZSBBVTg1MjJfVFZERUNfSU5UX01BU0tfUkVHMDEwSAkJCTB4MDEwCisjZGVmaW5lIEFVODUyMl9WSURFT19NT0RFX1JFRzAxMUgJCQkweDAxMQorI2RlZmluZSBBVTg1MjJfVFZERUNfUEdBX1JFRzAxMkgJCQkweDAxMgorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9NT0RFX1JFRzAxNUgJCQkweDAxNQorI2RlZmluZSBBVTg1MjJfUkVHMDE2SCAgICAgICAgICAgICAgICAgICAgICAgICAgICAJMHgwMTYKKyNkZWZpbmUgQVU4NTIyX1RWREVEX0RCR19NT0RFX1JFRzA2MEgJCQkweDA2MAorI2RlZmluZSBBVTg1MjJfVFZERUNfRk9STUFUX0NUUkwxX1JFRzA2MUgJCTB4MDYxCisjZGVmaW5lIEFVODUyMl9UVkRFQ19GT1JNQVRfQ1RSTDJfUkVHMDYySAkJMHgwNjIKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZDUl9ERVRfTExJTV9SRUcwNjNICQkweDA2MworI2RlZmluZSBBVTg1MjJfVFZERUNfVkNSX0RFVF9ITElNX1JFRzA2NEgJCTB4MDY0CisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX1ZESUZfVEhSMV9SRUcwNjVICQkweDA2NQorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9WRElGX1RIUjJfUkVHMDY2SAkJMHgwNjYKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfVkRJRl9USFIzX1JFRzA2N0gJCTB4MDY3CisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX05PVENIX1RIUl9SRUcwNjhICQkweDA2OAorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9IRElGX1RIUjFfUkVHMDY5SCAgIAkJMHgwNjkKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfSERJRl9USFIyX1JFRzA2QUgJCTB4MDZBCisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX0hESUZfVEhSM19SRUcwNkJIICAgCQkweDA2QgorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9EQ0RJRl9USFIxX1JFRzA2Q0ggIAkJMHgwNkMKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfRENESUZfVEhSMl9SRUcwNkRIIAkJMHgwNkQKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfRENESUZfVEhSM19SRUcwNkVIICAgICAgIAkweDA2RQorI2RlZmluZSBBVTg1MjJfVFZERUNfVVZfU0VQX1RIUl9SRUcwNkZIICAJCTB4MDZGCisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX0RDX1RIUjFfTlRTQ19SRUcwNzBICQkweDA3MAorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9EQ19USFIyX05UU0NfUkVHMDczSAkJMHgwNzMKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0RDQUdDX0NUUkxfUkVHMDc3SAkJCTB4MDc3CisjZGVmaW5lIEFVODUyMl9UVkRFQ19QSUNfU1RBUlRfQURKX1JFRzA3OEgJCTB4MDc4CisjZGVmaW5lIEFVODUyMl9UVkRFQ19BR0NfSElHSF9MSU1JVF9SRUcwNzlICQkweDA3OQorI2RlZmluZSBBVTg1MjJfVFZERUNfTUFDUk9WSVNJT05fU1lOQ19USFJfUkVHMDdBSAkweDA3QQorI2RlZmluZSBBVTg1MjJfVFZERUNfSU5UUlBfQ1RSTF9SRUcwN0JICQkJMHgwN0IKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1BMTF9TVEFUVVNfUkVHMDdFSAkJCTB4MDdFCisjZGVmaW5lIEFVODUyMl9UVkRFQ19GU0NfRlJFUV9SRUcwN0ZICQkJMHgwN0YKKworI2RlZmluZSBBVTg1MjJfVFZERUNfQUdDX0xPV19MSU1JVF9SRUcwRTRICQkweDBFNAorI2RlZmluZSBBVTg1MjJfVE9SRUdBQUdDX1JFRzBFNUgJCQkweDBFNQorCisjZGVmaW5lIEFVODUyMl9UVkRFQ19DSFJPTUFfQUdDX1JFRzQwMUgJCTB4NDAxCisjZGVmaW5lIEFVODUyMl9UVkRFQ19DSFJPTUFfU0ZUX1JFRzQwMkgJCTB4NDAyCisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDEwICAgICAJCTB4NDEwCisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDExICAgICAJCTB4NDExCisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDEyICAgICAJCTB4NDEyCisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDEzICAgICAJCTB4NDEzCisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDE0ICAgICAJCTB4NDE0CisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDE1ICAgICAJCTB4NDE1CisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDE2ICAgICAJCTB4NDE2CisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDE3ICAgICAJCTB4NDE3CisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDE4ICAgICAJCTB4NDE4CisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDE5ICAgICAJCTB4NDE5CisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDFBICAgICAJCTB4NDFBCisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDFCICAgICAJCTB4NDFCCisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDFDICAgICAJCTB4NDFDCisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDFEICAgICAJCTB4NDFECisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDFFICAgICAJCTB4NDFFCisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDFGICAgICAJCTB4NDFGCisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDIwICAgICAJCTB4NDIwCisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDIxICAgICAJCTB4NDIxCisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDIyICAgICAJCTB4NDIyCisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDIzICAgICAJCTB4NDIzCisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDI0ICAgICAJCTB4NDI0CisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDI1ICAgICAJCTB4NDI1CisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDI2ICAgICAJCTB4NDI2CisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDI3ICAgICAJCTB4NDI3CisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDI4ICAgICAJCTB4NDI4CisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDI5ICAgICAJCTB4NDI5CisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDJBICAgICAJCTB4NDJBCisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDJCICAgICAJCTB4NDJCCisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDJDICAgICAJCTB4NDJDCisjZGVmaW5lIEFVODUyMl9GSUxURVJfQ09FRl9SNDJEICAgICAJCTB4NDJECisKKy8qIFZCSSBDb250cm9sIFJlZ2lzdGVycyAqLworI2RlZmluZSBBVTg1MjJfVFZERUNfVkJJX1JYX0ZJRk9fQ09OVEFJTl9SRUcwMDRIICAJMHgwMDQKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZCSV9UWF9GSUZPX0NPTlRBSU5fUkVHMDA1SCAgCTB4MDA1CisjZGVmaW5lIEFVODUyMl9UVkRFQ19WQklfUlhfRklGT19SRUFEX1JFRzAwNkggICAgICAJMHgwMDYKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZCSV9GSUZPX1NUQVRVU19SRUcwMDdIICAgICAgIAkweDAwNworI2RlZmluZSBBVTg1MjJfVFZERUNfVkJJX0NUUkxfSF9SRUcwMTdICQkJMHgwMTcKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZCSV9DVFJMX0xfUkVHMDE4SAkJCTB4MDE4CisjZGVmaW5lIEFVODUyMl9UVkRFQ19WQklfVVNFUl9UT1RBTF9CSVRTX1JFRzAxOUgJMHgwMTkKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZCSV9VU0VSX1RVTklUX0hfUkVHMDFBSAkJMHgwMUEKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZCSV9VU0VSX1RVTklUX0xfUkVHMDFCSAkJMHgwMUIKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZCSV9VU0VSX1RIUkVTSDFfUkVHMDFDSAkJMHgwMUMKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZCSV9VU0VSX0ZSQU1FX1BBVDJfUkVHMDFFSAkweDAxRQorI2RlZmluZSBBVTg1MjJfVFZERUNfVkJJX1VTRVJfRlJBTUVfUEFUMV9SRUcwMUZIICAgCTB4MDFGCisjZGVmaW5lIEFVODUyMl9UVkRFQ19WQklfVVNFUl9GUkFNRV9QQVQwX1JFRzAyMEggICAJMHgwMjAKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZCSV9VU0VSX0ZSQU1FX01BU0syX1JFRzAyMUggCTB4MDIxCisjZGVmaW5lIEFVODUyMl9UVkRFQ19WQklfVVNFUl9GUkFNRV9NQVNLMV9SRUcwMjJIICAJMHgwMjIKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZCSV9VU0VSX0ZSQU1FX01BU0swX1JFRzAyM0gJMHgwMjMKKworI2RlZmluZSBBVTg1MjJfUkVHMDcxSAkJCQkJMHgwNzEKKyNkZWZpbmUgQVU4NTIyX1JFRzA3MkgJCQkJCTB4MDcyCisjZGVmaW5lIEFVODUyMl9SRUcwNzRICQkJCQkweDA3NAorI2RlZmluZSBBVTg1MjJfUkVHMDc1SAkJCQkJMHgwNzUKKworLyogRGlnaXRhbCBEZW1vZHVsYXRvciBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgQVU4NTIyX0ZSQU1FX0NPVU5UMF9SRUcwODRICQkJMHgwODQKKyNkZWZpbmUgQVU4NTIyX1JTX1NUQVRVU19HMF9SRUcwODVICQkJMHgwODUKKyNkZWZpbmUgQVU4NTIyX1JTX1NUQVRVU19CMF9SRUcwODZICQkJMHgwODYKKyNkZWZpbmUgQVU4NTIyX1JTX1NUQVRVU19FX1JFRzA4N0gJCQkweDA4NworI2RlZmluZSBBVTg1MjJfREVNT0RVTEFUSU9OX1NUQVRVU19SRUcwODhICQkweDA4OAorI2RlZmluZSBBVTg1MjJfVE9SRUdUUkVTVEFUVVNfUkVHMEU2SAkJCTB4MEU2CisjZGVmaW5lIEFVODUyMl9UU1BPUlRfQ09OVFJPTF9SRUcxMEJICQkJMHgxMEIKKyNkZWZpbmUgQVU4NTIyX1RTVEhFU19SRUcxMENICQkJCTB4MTBDCisjZGVmaW5lIEFVODUyMl9GUk1SRUdERkVLRUVQX1JFRzMwMUgJCQkweDMwMQorI2RlZmluZSBBVTg1MjJfREZFX0FWRVJBR0VfUkVHMzAySAkJCTB4MzAyCisjZGVmaW5lIEFVODUyMl9GUk1SRUdFUUxFUlJXSU5fUkVHMzAzSAkJCTB4MzAzCisjZGVmaW5lIEFVODUyMl9GUk1SRUdGRkVLRUVQX1JFRzMwNEgJCQkweDMwNAorI2RlZmluZSBBVTg1MjJfRlJNUkVHREZFQ09OVFJPTDFfUkVHMzA1SAkJMHgzMDUKKyNkZWZpbmUgQVU4NTIyX0ZSTVJFR0VRTEVSUkxPV19SRUczMDZICQkJMHgzMDYKKworI2RlZmluZSBBVTg1MjJfUkVHNDJFSAkJCQkweDQyRQorI2RlZmluZSBBVTg1MjJfUkVHNDJGSAkJCQkweDQyRgorI2RlZmluZSBBVTg1MjJfUkVHNDMwSAkJCQkweDQzMAorI2RlZmluZSBBVTg1MjJfUkVHNDMxSAkJCQkweDQzMQorI2RlZmluZSBBVTg1MjJfUkVHNDMySAkJCQkweDQzMgorI2RlZmluZSBBVTg1MjJfUkVHNDMzSAkJCQkweDQzMworI2RlZmluZSBBVTg1MjJfUkVHNDM0SAkJCQkweDQzNAorI2RlZmluZSBBVTg1MjJfUkVHNDM1SAkJCQkweDQzNQorI2RlZmluZSBBVTg1MjJfUkVHNDM2SAkJCQkweDQzNgorCisvKiBHUElPIFJlZ2lzdGVycyAqLworI2RlZmluZSBBVTg1MjJfR1BJT19DT05UUk9MX1JFRzBFMEgJCQkweDBFMAorI2RlZmluZSBBVTg1MjJfR1BJT19TVEFUVVNfUkVHMEUxSAkJCTB4MEUxCisjZGVmaW5lIEFVODUyMl9HUElPX0RBVEFfUkVHMEUySAkJCTB4MEUyCisKKy8qIEF1ZGlvIENvbnRyb2wgUmVnaXN0ZXJzICovCisjZGVmaW5lIEFVODUyMl9BVURJT0FHQ19SRUcwRUVIIAkJCTB4MEVFCisjZGVmaW5lIEFVODUyMl9BVURJT19TVEFUVVNfUkVHMEYwSCAJCQkweDBGMAorI2RlZmluZSBBVTg1MjJfQVVESU9fTU9ERV9SRUcwRjFIIAkJCTB4MEYxCisjZGVmaW5lIEFVODUyMl9BVURJT19WT0xVTUVfTF9SRUcwRjJIIAkJCTB4MEYyCisjZGVmaW5lIEFVODUyMl9BVURJT19WT0xVTUVfUl9SRUcwRjNIIAkJCTB4MEYzCisjZGVmaW5lIEFVODUyMl9BVURJT19WT0xVTUVfUkVHMEY0SCAJCQkweDBGNAorI2RlZmluZSBBVTg1MjJfRlJNUkVHQVVQSEFTRV9SRUcwRjdIIAkJCTB4MEY3CisjZGVmaW5lIEFVODUyMl9SRUcwRjlICQkJCQkweDBGOQorCisjZGVmaW5lIEFVODUyMl9BVURJT0FHQzJfUkVHNjA1SCAJCQkweDYwNQorI2RlZmluZSBBVTg1MjJfQVVESU9GUkVRX1JFRzYwNkggCQkJMHg2MDYKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyNkZWZpbmUgQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSF9BVFNDICAgICAgICAgICAgICAgCTB4QzQKKyNkZWZpbmUgQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSF9BVFZSRgkJCTB4QzQKKyNkZWZpbmUgQVU4NTIyX0lOUFVUX0NPTlRST0xfUkVHMDgxSF9BVFZSRjEzCQkJMHhDNAorI2RlZmluZSBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX0o4M0I2NCAgICAgICAgICAgICAJMHhDNAorI2RlZmluZSBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX0o4M0IyNTYgICAgICAgICAgICAJMHhDNAorI2RlZmluZSBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX0NWQlMgICAgICAgICAgICAgICAJMHgyMAorI2RlZmluZSBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX0NWQlNfQ0gxCQkJMHhBMgorI2RlZmluZSBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX0NWQlNfQ0gyCQkJMHhBMAorI2RlZmluZSBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX0NWQlNfQ0gzCQkJMHg2OQorI2RlZmluZSBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX0NWQlNfQ0g0CQkJMHg2OAorI2RlZmluZSBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX0NWQlNfQ0g0X1NJRiAgICAgICAgCTB4MjgKKy8qIENIMSBBUyBZLENIMyBBUyBDICovCisjZGVmaW5lIEFVODUyMl9JTlBVVF9DT05UUk9MX1JFRzA4MUhfU1ZJREVPX0NIMTMgICAgICAgIAkweDIzCisvKiBDSDIgQVMgWSxDSDQgQVMgQyAqLworI2RlZmluZSBBVTg1MjJfSU5QVVRfQ09OVFJPTF9SRUcwODFIX1NWSURFT19DSDI0ICAgICAgICAJMHgyMAorI2RlZmluZSBBVTg1MjJfTU9EVUxFX0NMT0NLX0NPTlRST0xfUkVHMEEzSF9BVFNDICAgICAgICAJMHgwQworI2RlZmluZSBBVTg1MjJfTU9EVUxFX0NMT0NLX0NPTlRST0xfUkVHMEEzSF9KODNCNjQgICAgICAJMHgwOQorI2RlZmluZSBBVTg1MjJfTU9EVUxFX0NMT0NLX0NPTlRST0xfUkVHMEEzSF9KODNCMjU2ICAgIAkJMHgwOQorI2RlZmluZSBBVTg1MjJfTU9EVUxFX0NMT0NLX0NPTlRST0xfUkVHMEEzSF9DVkJTICAgICAgICAJMHgxMgorI2RlZmluZSBBVTg1MjJfTU9EVUxFX0NMT0NLX0NPTlRST0xfUkVHMEEzSF9BVFZSRiAgICAgICAJMHgxQQorI2RlZmluZSBBVTg1MjJfTU9EVUxFX0NMT0NLX0NPTlRST0xfUkVHMEEzSF9BVFZSRjEzCQkweDFBCisjZGVmaW5lIEFVODUyMl9NT0RVTEVfQ0xPQ0tfQ09OVFJPTF9SRUcwQTNIX1NWSURFTwkJMHgwMgorCisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRIX0NMRUFSCQkweDAwCisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRIX1NWSURFTwkJMHg5QworI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SF9DVkJTICAgICAJMHg5RAorI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzBfUkVHMEE0SF9BVFNDCQkweEU4CisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRIX0o4M0IyNTYgCQkweENBCisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRIX0o4M0I2NCAgCQkweENBCisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRIX0FUVlJGICAgCQkweERECisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRIX0FUVlJGMTMJCTB4REQKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8wX1JFRzBBNEhfUEFMCQkweERECisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMF9SRUcwQTRIX0ZNCQkweERECisKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8xX1JFRzBBNUhfQVRTQwkJMHg4MAorI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzFfUkVHMEE1SF9KODNCMjU2IAkJMHg4MAorI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzFfUkVHMEE1SF9KODNCNjQgIAkJMHg4MAorI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzFfUkVHMEE1SF9ET05HTEVfQVRTQwkweDQwCisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMV9SRUcwQTVIX0RPTkdMRV9KODNCMjU2CTB4NDAKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8xX1JFRzBBNUhfRE9OR0xFX0o4M0I2NAkweDQwCisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMV9SRUcwQTVIX0RPTkdMRV9DTEVBUgkweDAwCisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMV9SRUcwQTVIX0FUVlJGCQkweDAxCisjZGVmaW5lIEFVODUyMl9TWVNURU1fTU9EVUxFX0NPTlRST0xfMV9SRUcwQTVIX0FUVlJGMTMJCTB4MDEKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8xX1JFRzBBNUhfU1ZJREVPICAJCTB4MDQKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8xX1JFRzBBNUhfQ1ZCUwkJMHgwMQorI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzFfUkVHMEE1SF9QV00gICAgIAkJMHgwMworI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzFfUkVHMEE1SF9JSVMgICAgICAJMHgwOQorI2RlZmluZSBBVTg1MjJfU1lTVEVNX01PRFVMRV9DT05UUk9MXzFfUkVHMEE1SF9QQUwJCTB4MDEKKyNkZWZpbmUgQVU4NTIyX1NZU1RFTV9NT0RVTEVfQ09OVFJPTF8xX1JFRzBBNUhfRk0JCTB4MDEKKworLyogU1RJTEwgTkVFRCBUTyBCRSBSRUZBQ1RPUkVEIEBAQEBAQEBAQEBAQEBAICovCisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT05UUkFTVF9SRUcwMEJIX0NWQlMJCQkweDc5CisjZGVmaW5lIEFVODUyMl9UVkRFQ19TQVRVUkFUSU9OX0NCX1JFRzAwQ0hfQ1ZCUwkJCTB4ODAKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1NBVFVSQVRJT05fQ1JfUkVHMDBESF9DVkJTCQkJMHg4MAorI2RlZmluZSBBVTg1MjJfVFZERUNfSFVFX0hfUkVHMDBFSF9DVkJTCQkJCTB4MDAKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0hVRV9MX1JFRzAwRkhfQ1ZCUwkJCQkweDAwCisjZGVmaW5lIEFVODUyMl9UVkRFQ19QR0FfUkVHMDEySF9DVkJTCQkJCTB4MEYKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfTU9ERV9SRUcwMTVIX0NWQlMJCQkweDAwCisjZGVmaW5lIEFVODUyMl9SRUcwMTZIX0NWQlMJCQkJCTB4MDAKKyNkZWZpbmUgQVU4NTIyX1RWREVEX0RCR19NT0RFX1JFRzA2MEhfQ1ZCUwkJCTB4MDAKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0ZPUk1BVF9DVFJMMV9SRUcwNjFIX0NWQlMJCQkweDBCCisjZGVmaW5lIEFVODUyMl9UVkRFQ19GT1JNQVRfQ1RSTDFfUkVHMDYxSF9DVkJTMTMJCTB4MDMKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0ZPUk1BVF9DVFJMMl9SRUcwNjJIX0NWQlMxMwkJMHgwMAorI2RlZmluZSBBVTg1MjJfVFZERUNfVkNSX0RFVF9MTElNX1JFRzA2M0hfQ1ZCUwkJCTB4MTkKKyNkZWZpbmUgQVU4NTIyX1JFRzBGOUhfQVVESU8JCQkJCTB4MjAKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1ZDUl9ERVRfSExJTV9SRUcwNjRIX0NWQlMJCQkweEE3CisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX1ZESUZfVEhSMV9SRUcwNjVIX0NWQlMJCTB4MEEKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfVkRJRl9USFIyX1JFRzA2NkhfQ1ZCUwkJMHgzMgorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9WRElGX1RIUjNfUkVHMDY3SF9DVkJTCQkweDE5CisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX05PVENIX1RIUl9SRUcwNjhIX0NWQlMJCTB4MjMKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfSERJRl9USFIxX1JFRzA2OUhfQ1ZCUwkJMHg0MQorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9IRElGX1RIUjJfUkVHMDZBSF9DVkJTCQkweDBBCisjZGVmaW5lIEFVODUyMl9UVkRFQ19DT01CX0hESUZfVEhSM19SRUcwNkJIX0NWQlMJCTB4MzIKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfRENESUZfVEhSMV9SRUcwNkNIX0NWQlMJCTB4MzQKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfRENESUZfVEhSMl9SRUcwNkRIX0NWQlMJCTB4MDUKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0NPTUJfRENESUZfVEhSM19SRUcwNkVIX0NWQlMJCTB4NkUKKyNkZWZpbmUgQVU4NTIyX1RWREVDX1VWX1NFUF9USFJfUkVHMDZGSF9DVkJTCQkJMHgwRgorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9EQ19USFIxX05UU0NfUkVHMDcwSF9DVkJTCQkweDgwCisjZGVmaW5lIEFVODUyMl9SRUcwNzFIX0NWQlMJCQkJCTB4MTgKKyNkZWZpbmUgQVU4NTIyX1JFRzA3MkhfQ1ZCUwkJCQkJMHgzMAorI2RlZmluZSBBVTg1MjJfVFZERUNfQ09NQl9EQ19USFIyX05UU0NfUkVHMDczSF9DVkJTCQkweEYwCisjZGVmaW5lIEFVODUyMl9SRUcwNzRIX0NWQlMJCQkJCTB4ODAKKyNkZWZpbmUgQVU4NTIyX1JFRzA3NUhfQ1ZCUwkJCQkJMHhGMAorI2RlZmluZSBBVTg1MjJfVFZERUNfRENBR0NfQ1RSTF9SRUcwNzdIX0NWQlMJCQkweEZCCisjZGVmaW5lIEFVODUyMl9UVkRFQ19QSUNfU1RBUlRfQURKX1JFRzA3OEhfQ1ZCUwkJCTB4MDQKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0FHQ19ISUdIX0xJTUlUX1JFRzA3OUhfQ1ZCUwkJMHgwMAorI2RlZmluZSBBVTg1MjJfVFZERUNfTUFDUk9WSVNJT05fU1lOQ19USFJfUkVHMDdBSF9DVkJTCQkweDAwCisjZGVmaW5lIEFVODUyMl9UVkRFQ19JTlRSUF9DVFJMX1JFRzA3QkhfQ1ZCUwkJCTB4RUUKKyNkZWZpbmUgQVU4NTIyX1RWREVDX0FHQ19MT1dfTElNSVRfUkVHMEU0SF9DVkJTCQkJMHhGRQorI2RlZmluZSBBVTg1MjJfVE9SRUdBQUdDX1JFRzBFNUhfQ1ZCUwkJCQkweDAwCisjZGVmaW5lIEFVODUyMl9UVkRFQ19WQkk2QV9SRUcwMzVIX0NWQlMJCQkJMHg0MAorCisvKiBFbmFibGVzIENsb3NlZCBjYXB0aW9uaW5nICovCisjZGVmaW5lIEFVODUyMl9UVkRFQ19WQklfQ1RSTF9IX1JFRzAxN0hfQ0NPTgkJCTB4MjEKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExMy5jCmluZGV4IGY2ZTdiMDMuLmU0ZmQ1MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTEzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTMuYwpAQCAtNTU5LDcgKzU1OSw3IEBACiAJCWt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBjeDI0MTEzX3N0YXRlKSwgR0ZQX0tFUk5FTCk7CiAJaW50IHJjOwogCWlmIChzdGF0ZSA9PSBOVUxMKSB7Ci0JCWVycigiVW5hYmxlIHRvIGttYWxsb2NcbiIpOworCQllcnIoIlVuYWJsZSB0byBremFsbG9jXG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTE2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDExNi5jCmluZGV4IDI4YWQ2MDkuLjliOWY1NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTE2LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMTYuYwpAQCAtMTUsNiArMTUsOSBAQAogCVNlcHRlbWJlciwgOXRoIDIwMDgKIAkgICAgRml4ZWQgbG9ja2luZyBvbiBoaWdoIHN5bWJvbCByYXRlcyAoPjMwMDAwKS4KIAkgICAgSW1wbGVtZW50IE1QRUcgaW5pdGlhbGl6YXRpb24gcGFyYW1ldGVyLgorCUphbnVhcnksIDE3dGggMjAwOQorCSAgICBGaWxsIHNldF92b2x0YWdlIHdpdGggYWN0dWFsbHkgY29udHJvbCB2b2x0YWdlIGNvZGUuCisJICAgIENvcnJlY3Qgc2V0IHRvbmUgdG8gbm90IGFmZmVjdCB2b2x0YWdlLgogCiAgICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKICAgICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQpAQCAtMTQ2LDcgKzE0OSw3IEBACiAJQ01EX0dFVEFHQyAgICAgID0gMHgxOSwKIAlDTURfTE5CQ09ORklHICAgPSAweDIwLAogCUNNRF9MTkJTRU5EICAgICA9IDB4MjEsIC8qIEZvcm1lcmx5IENNRF9TRU5EX0RJU0VRQyAqLwotCUNNRF9TRVRfVE9ORVBSRSA9IDB4MjIsCisJQ01EX0xOQkRDTEVWRUwgID0gMHgyMiwKIAlDTURfU0VUX1RPTkUgICAgPSAweDIzLAogCUNNRF9VUERGV1ZFUlMgICA9IDB4MzUsCiAJQ01EX1RVTkVSU0xFRVAgID0gMHgzNiwKQEAgLTY2NywxNiArNjcwLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDI0MTE2X3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAotCWZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKLXsKLQkvKiBUaGUgaXNsNjQyMSBtb2R1bGUgd2lsbCBvdmVycmlkZSB0aGlzIGZ1bmN0aW9uIGluIHRoZSBmb3BzLiAqLwotCWRwcmludGsoIiVzKCkgVGhpcyBzaG91bGQgbmV2ZXIgYXBwZWFyIGlmIHRoZSBpc2w2NDIxIG1vZHVsZSAiCi0JCSJpcyBsb2FkZWQgY29ycmVjdGx5XG4iLCBfX2Z1bmNfXyk7Ci0KLQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci19Ci0KIHN0YXRpYyBpbnQgY3gyNDExNl9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZmVfc3RhdHVzX3QgKnN0YXR1cykKIHsKIAlzdHJ1Y3QgY3gyNDExNl9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKQEAgLTgzNyw2ICs4MzAsMzQgQEAKIAlyZXR1cm4gLUVUSU1FRE9VVDsgLyogLUVCVVNZID8gKi8KIH0KIAorc3RhdGljIGludCBjeDI0MTE2X3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCWZlX3NlY192b2x0YWdlX3Qgdm9sdGFnZSkKK3sKKwlzdHJ1Y3QgY3gyNDExNl9jbWQgY21kOworCWludCByZXQ7CisKKwlkcHJpbnRrKCIlczogJXNcbiIsIF9fZnVuY19fLAorCQl2b2x0YWdlID09IFNFQ19WT0xUQUdFXzEzID8gIlNFQ19WT0xUQUdFXzEzIiA6CisJCXZvbHRhZ2UgPT0gU0VDX1ZPTFRBR0VfMTggPyAiU0VDX1ZPTFRBR0VfMTgiIDogIj8/Iik7CisKKwkvKiBXYWl0IGZvciBMTkIgcmVhZHkgKi8KKwlyZXQgPSBjeDI0MTE2X3dhaXRfZm9yX2xuYihmZSk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJLyogV2FpdCBmb3Igdm9sdGFnZS9taW4gcmVwZWF0IGRlbGF5ICovCisJbXNsZWVwKDEwMCk7CisKKwljbWQuYXJnc1sweDAwXSA9IENNRF9MTkJEQ0xFVkVMOworCWNtZC5hcmdzWzB4MDFdID0gKHZvbHRhZ2UgPT0gU0VDX1ZPTFRBR0VfMTggPyAweDAxIDogMHgwMCk7CisJY21kLmxlbiA9IDB4MDI7CisKKwkvKiBNaW4gZGVsYXkgdGltZSBiZWZvcmUgRGlTRXFDIHNlbmQgKi8KKwltc2xlZXAoMTUpOworCisJcmV0dXJuIGN4MjQxMTZfY21kX2V4ZWN1dGUoZmUsICZjbWQpOworfQorCiBzdGF0aWMgaW50IGN4MjQxMTZfc2V0X3RvbmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCiAJZmVfc2VjX3RvbmVfbW9kZV90IHRvbmUpCiB7CkBAIC04NTcsMTQgKzg3OCw2IEBACiAJLyogTWluIGRlbGF5IHRpbWUgYWZ0ZXIgRGlTRXFDIHNlbmQgKi8KIAltc2xlZXAoMTUpOyAvKiBYWFggZGV0ZXJtaW5lIGlzIEZXIGRvZXMgdGhpcywgc2VlIHNlbmRfZGlzZXFjL2J1cnN0ICovCiAKLQkvKiBUaGlzIGlzIGFsd2F5cyBkb25lIGJlZm9yZSB0aGUgdG9uZSBpcyBzZXQgKi8KLQljbWQuYXJnc1sweDAwXSA9IENNRF9TRVRfVE9ORVBSRTsKLQljbWQuYXJnc1sweDAxXSA9IDB4MDA7Ci0JY21kLmxlbiA9IDB4MDI7Ci0JcmV0ID0gY3gyNDExNl9jbWRfZXhlY3V0ZShmZSwgJmNtZCk7Ci0JaWYgKHJldCAhPSAwKQotCQlyZXR1cm4gcmV0OwotCiAJLyogTm93IHdlIHNldCB0aGUgdG9uZSAqLwogCWNtZC5hcmdzWzB4MDBdID0gQ01EX1NFVF9UT05FOwogCWNtZC5hcmdzWzB4MDFdID0gMHgwMDsKQEAgLTEwOTksMTMgKzExMTIsMTAgQEAKIAlkcHJpbnRrKCIlc1xuIiwgX19mdW5jX18pOwogCiAJLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KLQlzdGF0ZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBjeDI0MTE2X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3gyNDExNl9zdGF0ZSksIEdGUF9LRVJORUwpOwogCWlmIChzdGF0ZSA9PSBOVUxMKQogCQlnb3RvIGVycm9yMTsKIAotCS8qIHNldHVwIHRoZSBzdGF0ZSAqLwotCW1lbXNldChzdGF0ZSwgMCwgc2l6ZW9mKHN0cnVjdCBjeDI0MTE2X3N0YXRlKSk7Ci0KIAlzdGF0ZS0+Y29uZmlnID0gY29uZmlnOwogCXN0YXRlLT5pMmMgPSBpMmM7CiAKQEAgLTExNTQsNyArMTE2NCwxMiBAQAogCWlmIChyZXQgIT0gMCkKIAkJcmV0dXJuIHJldDsKIAotCXJldHVybiBjeDI0MTE2X2Rpc2VxY19pbml0KGZlKTsKKwlyZXQgPSBjeDI0MTE2X2Rpc2VxY19pbml0KGZlKTsKKwlpZiAocmV0ICE9IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBIVlItNDAwMCBuZWVkcyB0aGlzICovCisJcmV0dXJuIGN4MjQxMTZfc2V0X3ZvbHRhZ2UoZmUsIFNFQ19WT0xUQUdFXzEzKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvY3gyNDEyMy5jCmluZGV4IDFhOGMzNmYuLjA1OTJmMDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9jeDI0MTIzLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2N4MjQxMjMuYwpAQCAtMTA2OSwxMyArMTA2OSwxMyBAQAogc3RydWN0IGR2Yl9mcm9udGVuZCAqY3gyNDEyM19hdHRhY2goY29uc3Qgc3RydWN0IGN4MjQxMjNfY29uZmlnICpjb25maWcsCiAJCQkJICAgIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQogeworCS8qIGFsbG9jYXRlIG1lbW9yeSBmb3IgdGhlIGludGVybmFsIHN0YXRlICovCiAJc3RydWN0IGN4MjQxMjNfc3RhdGUgKnN0YXRlID0KIAkJa3phbGxvYyhzaXplb2Yoc3RydWN0IGN4MjQxMjNfc3RhdGUpLCBHRlBfS0VSTkVMKTsKIAogCWRwcmludGsoIlxuIik7Ci0JLyogYWxsb2NhdGUgbWVtb3J5IGZvciB0aGUgaW50ZXJuYWwgc3RhdGUgKi8KIAlpZiAoc3RhdGUgPT0gTlVMTCkgewotCQllcnIoIlVuYWJsZSB0byBrbWFsbG9jXG4iKTsKKwkJZXJyKCJVbmFibGUgdG8ga3phbGxvY1xuIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA3MC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjAwNzAuaAppbmRleCAyMWYyYzUxLi45NjcwZjVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMDA3MC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIwMDcwLmgKQEAgLTU4LDYgKzU4LDQgQEAKIH0KICNlbmRpZgogCi1leHRlcm4gdm9pZCBkaWIwMDcwX2N0cmxfYWdjX2ZpbHRlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIHVpbnQ4X3Qgb3Blbik7Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDBtYy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjMwMDBtYy5oCmluZGV4IDQxNDJlZDcuLmQ3NWZmYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWIzMDAwbWMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliMzAwMG1jLmgKQEAgLTM5LDIwICszOSw0NCBAQAogI2RlZmluZSBERUZBVUxUX0RJQjMwMDBNQ19JMkNfQUREUkVTUyAxNgogI2RlZmluZSBERUZBVUxUX0RJQjMwMDBQX0kyQ19BRERSRVNTICAyNAogCi0jaWYgZGVmaW5lZChDT05GSUdfRFZCX0RJQjMwMDBNQykgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9ESUIzMDAwTUNfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCi1leHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqIGRpYjMwMDBtY19hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgdTggaTJjX2FkZHIsIHN0cnVjdCBkaWIzMDAwbWNfY29uZmlnICpjZmcpOworI2lmIGRlZmluZWQoQ09ORklHX0RWQl9ESUIzMDAwTUMpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfRElCMzAwME1DX01PRFVMRSkgJiYgXAorCQkJCSAgICAgIGRlZmluZWQoTU9EVUxFKSkKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkaWIzMDAwbWNfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCisJCQkJCSAgICAgdTggaTJjX2FkZHIsCisJCQkJCSAgICAgc3RydWN0IGRpYjMwMDBtY19jb25maWcgKmNmZyk7CitleHRlcm4gaW50IGRpYjMwMDBtY19pMmNfZW51bWVyYXRpb24oc3RydWN0IGkyY19hZGFwdGVyICppMmMsCisJCQkJICAgICBpbnQgbm9fb2ZfZGVtb2RzLCB1OCBkZWZhdWx0X2FkZHIsCisJCQkJICAgICBzdHJ1Y3QgZGliMzAwMG1jX2NvbmZpZyBjZmdbXSk7CitleHRlcm4KK3N0cnVjdCBpMmNfYWRhcHRlciAqZGliMzAwMG1jX2dldF90dW5lcl9pMmNfbWFzdGVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRlbW9kLAorCQkJCQkJICAgaW50IGdhdGluZyk7CiAjZWxzZQotc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICogZGliMzAwMG1jX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBpMmNfYWRkciwgc3RydWN0IGRpYjMwMDBtY19jb25maWcgKmNmZykKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjMwMDBtY19hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgdTggaTJjX2FkZHIsCisJCQkJICAgICAgc3RydWN0IGRpYjMwMDBtY19jb25maWcgKmNmZykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZQoraW50IGRpYjMwMDBtY19pMmNfZW51bWVyYXRpb24oc3RydWN0IGkyY19hZGFwdGVyICppMmMsCisJCQkgICAgICBpbnQgbm9fb2ZfZGVtb2RzLCB1OCBkZWZhdWx0X2FkZHIsCisJCQkgICAgICBzdHJ1Y3QgZGliMzAwMG1jX2NvbmZpZyBjZmdbXSkKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGlubGluZQorc3RydWN0IGkyY19hZGFwdGVyICpkaWIzMDAwbWNfZ2V0X3R1bmVyX2kyY19tYXN0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZGVtb2QsCisJCQkJCQkgICBpbnQgZ2F0aW5nKQogewogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiBOVUxMOwogfQogI2VuZGlmIC8vIENPTkZJR19EVkJfRElCMzAwME1DCiAKLWV4dGVybiBpbnQgZGliMzAwMG1jX2kyY19lbnVtZXJhdGlvbihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgaW50IG5vX29mX2RlbW9kcywgdTggZGVmYXVsdF9hZGRyLCBzdHJ1Y3QgZGliMzAwMG1jX2NvbmZpZyBjZmdbXSk7Ci0KLWV4dGVybiBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKiBkaWIzMDAwbWNfZ2V0X3R1bmVyX2kyY19tYXN0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZGVtb2QsIGludCBnYXRpbmcpOwotCiBleHRlcm4gaW50IGRpYjMwMDBtY19waWRfY29udHJvbChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgaW50IGluZGV4LCBpbnQgcGlkLGludCBvbm9mZik7CiBleHRlcm4gaW50IGRpYjMwMDBtY19waWRfcGFyc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBvbm9mZik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kaWI3MDAwbS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBtLmgKaW5kZXggNTk3ZTljYy4uMTEzODE5YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBtLmgKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBtLmgKQEAgLTM4LDggKzM4LDMyIEBACiAKICNkZWZpbmUgREVGQVVMVF9ESUI3MDAwTV9JMkNfQUREUkVTUyAxOAogCi1leHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqIGRpYjcwMDBtX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBpMmNfYWRkciwgc3RydWN0IGRpYjcwMDBtX2NvbmZpZyAqY2ZnKTsKLWV4dGVybiBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKiBkaWI3MDAwbV9nZXRfaTJjX21hc3RlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICosIGVudW0gZGlieDAwMF9pMmNfaW50ZXJmYWNlLCBpbnQpOworI2lmIGRlZmluZWQoQ09ORklHX0RWQl9ESUI3MDAwTSkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9ESUI3MDAwTV9NT0RVTEUpICYmIFwKKwkJCQkgICAgIGRlZmluZWQoTU9EVUxFKSkKK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkaWI3MDAwbV9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKKwkJCQkJICAgIHU4IGkyY19hZGRyLAorCQkJCQkgICAgc3RydWN0IGRpYjcwMDBtX2NvbmZpZyAqY2ZnKTsKK2V4dGVybiBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmRpYjcwMDBtX2dldF9pMmNfbWFzdGVyKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwKKwkJCQkJCSAgIGVudW0gZGlieDAwMF9pMmNfaW50ZXJmYWNlLAorCQkJCQkJICAgaW50KTsKKyNlbHNlCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkaWI3MDAwbV9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKKwkJCQkgICAgIHU4IGkyY19hZGRyLCBzdHJ1Y3QgZGliNzAwMG1fY29uZmlnICpjZmcpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUKK3N0cnVjdCBpMmNfYWRhcHRlciAqZGliNzAwMG1fZ2V0X2kyY19tYXN0ZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZGVtb2QsCisJCQkJCSAgICBlbnVtIGRpYngwMDBfaTJjX2ludGVyZmFjZSBpbnRmLAorCQkJCQkgICAgaW50IGdhdGluZykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZgogCiAvKiBUT0RPCiBleHRlcm4gSU5UIGRpYjcwMDBtX3NldF9ncGlvKHN0cnVjdCBkaWJEZW1vZCAqZGVtb2QsIFVDSEFSIG51bSwgVUNIQVIgZGlyLCBVQ0hBUiB2YWwpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2RpYjcwMDBwLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuaAppbmRleCBhYWI4MTEyLi4wMmE0YzgyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZGliNzAwMHAuaApAQCAtMzcsNyArMzcsOCBAQAogCiAjZGVmaW5lIERFRkFVTFRfRElCNzAwMFBfSTJDX0FERFJFU1MgMTgKIAotI2lmIGRlZmluZWQoQ09ORklHX0RWQl9ESUI3MDAwUCkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9ESUI3MDAwUF9NT0RVTEUpICYmIGRlZmluZWQoTU9EVUxFKSkKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfRElCNzAwMFApIHx8IChkZWZpbmVkKENPTkZJR19EVkJfRElCNzAwMFBfTU9EVUxFKSAmJiBcCisJCQkJICAgICBkZWZpbmVkKE1PRFVMRSkpCiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqZGliNzAwMHBfYXR0YWNoKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCiAJCQkJCSAgICB1OCBpMmNfYWRkciwKIAkJCQkJICAgIHN0cnVjdCBkaWI3MDAwcF9jb25maWcgKmNmZyk7CkBAIC00OSwxMCArNTAsMTEgQEAKIAkJCQkgICAgc3RydWN0IGRpYjcwMDBwX2NvbmZpZyBjZmdbXSk7CiBleHRlcm4gaW50IGRpYjcwMDBwX3NldF9ncGlvKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgdTggbnVtLCB1OCBkaXIsIHU4IHZhbCk7CiBleHRlcm4gaW50IGRpYjcwMDBwX3NldF93YmRfcmVmKHN0cnVjdCBkdmJfZnJvbnRlbmQgKiwgdTE2IHZhbHVlKTsKK2V4dGVybiBpbnQgZGliNzAwMHBjX2RldGVjdGlvbihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwKTsKICNlbHNlCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmRpYjcwMDBwX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLAotCQkJCQkJICAgdTggaTJjX2FkZHIsCi0JCQkJCQkgICBzdHJ1Y3QgZGliNzAwMHBfY29uZmlnICpjZmcpCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkaWI3MDAwcF9hdHRhY2goc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgdTggaTJjX2FkZHIsCisJCQkJICAgICBzdHJ1Y3QgZGliNzAwMHBfY29uZmlnICpjZmcpCiB7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIE5VTEw7CkBAIC02MCwzNiArNjIsMzkgQEAKIAogc3RhdGljIGlubGluZQogc3RydWN0IGkyY19hZGFwdGVyICpkaWI3MDAwcF9nZXRfaTJjX21hc3RlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKLQkJCQkJICAgIGVudW0gZGlieDAwMF9pMmNfaW50ZXJmYWNlIGksIGludCB4KQorCQkJCQkgICAgZW51bSBkaWJ4MDAwX2kyY19pbnRlcmZhY2UgaSwKKwkJCQkJICAgIGludCB4KQogewogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiBOVUxMOwogfQogCi1zdGF0aWMgaW5saW5lCi1pbnQgZGliNzAwMHBfaTJjX2VudW1lcmF0aW9uKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLAotCQkJCSAgICBpbnQgbm9fb2ZfZGVtb2RzLCB1OCBkZWZhdWx0X2FkZHIsCi0JCQkJICAgIHN0cnVjdCBkaWI3MDAwcF9jb25maWcgY2ZnW10pCitzdGF0aWMgaW5saW5lIGludCBkaWI3MDAwcF9pMmNfZW51bWVyYXRpb24oc3RydWN0IGkyY19hZGFwdGVyICppMmMsCisJCQkJCSAgIGludCBub19vZl9kZW1vZHMsIHU4IGRlZmF1bHRfYWRkciwKKwkJCQkJICAgc3RydWN0IGRpYjcwMDBwX2NvbmZpZyBjZmdbXSkKIHsKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KIAotc3RhdGljIGlubGluZQotaW50IGRpYjcwMDBwX3NldF9ncGlvKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1OCBudW0sIHU4IGRpciwgdTggdmFsKQorc3RhdGljIGlubGluZSBpbnQgZGliNzAwMHBfc2V0X2dwaW8oc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJICAgIHU4IG51bSwgdTggZGlyLCB1OCB2YWwpCiB7CiAJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CiAJcmV0dXJuIC1FTk9ERVY7CiB9CiAKLXN0YXRpYyBpbmxpbmUKLWludCBkaWI3MDAwcF9zZXRfd2JkX3JlZihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2IHZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgZGliNzAwMHBfc2V0X3diZF9yZWYoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiB2YWx1ZSkKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gLUVOT0RFVjsKK30KKworc3RhdGljIGlubGluZSBpbnQgZGliNzAwMHBjX2RldGVjdGlvbihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwKQogewogCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOwogCXJldHVybiAtRU5PREVWOwogfQogI2VuZGlmCiAKLWV4dGVybiBpbnQgZGliNzAwMHBjX2RldGVjdGlvbihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwKTsKLQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiX2R1bW15X2ZlLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvZHZiX2R1bW15X2ZlLmgKaW5kZXggODIxMGYxOS4uMWZjYjk4NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2R2Yl9kdW1teV9mZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9kdmJfZHVtbXlfZmUuaApAQCAtMjUsOCArMjUsMjcgQEAKICNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KICNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKIAorI2lmIGRlZmluZWQoQ09ORklHX0RWQl9EVU1NWV9GRSkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9EVU1NWV9GRV9NT0RVTEUpICYmIFwKK2RlZmluZWQoTU9EVUxFKSkKIGV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kKiBkdmJfZHVtbXlfZmVfb2ZkbV9hdHRhY2godm9pZCk7CiBleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCogZHZiX2R1bW15X2ZlX3Fwc2tfYXR0YWNoKHZvaWQpOwogZXh0ZXJuIHN0cnVjdCBkdmJfZnJvbnRlbmQqIGR2Yl9kdW1teV9mZV9xYW1fYXR0YWNoKHZvaWQpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqZHZiX2R1bW15X2ZlX29mZG1fYXR0YWNoKHZvaWQpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIE5VTEw7Cit9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmR2Yl9kdW1teV9mZV9xcHNrX2F0dGFjaCh2b2lkKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpkdmJfZHVtbXlfZmVfcWFtX2F0dGFjaCh2b2lkKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQorI2VuZGlmIC8qIENPTkZJR19EVkJfRFVNTVlfRkUgKi8KIAogI2VuZGlmIC8vIERWQl9EVU1NWV9GRV9ICmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvaXRkMTAwMF9wcml2LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvaXRkMTAwMF9wcml2LmgKaW5kZXggOGNkYzU0ZS4uMDhjYTg1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2l0ZDEwMDBfcHJpdi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9pdGQxMDAwX3ByaXYuaApAQCAtMzEsNyArMzEsNyBAQAogCS8qIHVnbHkgd29ya2Fyb3VuZCBmb3IgZmxleGNvcCdzIGluY2FwYWJsZSBpMmMtY29udHJvbGxlcgogCSAqIEZJWE1FLCBpZiBwb3NzaWJsZQogCSAqLwotCXU4IHNoYWRvd1syNTVdOworCXU4IHNoYWRvd1syNTZdOwogfTsKIAogZW51bSBpdGQxMDAwX3JlZ2lzdGVyIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMwNC5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzA0LmMKaW5kZXggM2JiMGM0My4uZWI3MmE5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzA0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzA0LmMKQEAgLTM2Myw3ICszNjMsNiBAQAogCiAJc3RydWN0IGxnZHQzMzA0X3N0YXRlICpzdGF0ZTsKIAlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBsZ2R0MzMwNF9zdGF0ZSksIEdGUF9LRVJORUwpOwotCW1lbXNldChzdGF0ZSwgMHgwLCBzaXplb2Yoc3RydWN0IGxnZHQzMzA0X3N0YXRlKSk7CiAJc3RhdGUtPmFkZHIgPSBjb25maWctPmkyY19hZGRyZXNzOwogCXN0YXRlLT5pMmMgPSBpMmM7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMwNS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzA1LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDkyZDA1NQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMwNS5jCkBAIC0wLDAgKzEsMTA4NyBAQAorLyoKKyAqICAgIFN1cHBvcnQgZm9yIExHRFQzMzA1IC0gVlNCL1FBTQorICoKKyAqICAgIENvcHlyaWdodCAoQykgMjAwOCwgMjAwOSBNaWNoYWVsIEtydWZreSA8bWtydWZreUBsaW51eHR2Lm9yZz4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqICAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICAgIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICAgIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICAgIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqICAgIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgorI2luY2x1ZGUgImR2Yl9tYXRoLmgiCisjaW5jbHVkZSAibGdkdDMzMDUuaCIKKworc3RhdGljIGludCBkZWJ1ZzsKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWcgbGV2ZWwgKGluZm89MSwgcmVnPTIgKG9yLWFibGUpKSIpOworCisjZGVmaW5lIERCR19JTkZPIDEKKyNkZWZpbmUgREJHX1JFRyAgMgorCisjZGVmaW5lIGxnX3ByaW50ayhrZXJuLCBmbXQsIGFyZy4uLikJCQkJCVwKKwlwcmludGsoa2VybiAiJXM6ICIgZm10LCBfX2Z1bmNfXywgIyNhcmcpCisKKyNkZWZpbmUgbGdfaW5mbyhmbXQsIGFyZy4uLikJcHJpbnRrKEtFUk5fSU5GTyAibGdkdDMzMDU6ICIgZm10LCAjI2FyZykKKyNkZWZpbmUgbGdfd2FybihmbXQsIGFyZy4uLikJbGdfcHJpbnRrKEtFUk5fV0FSTklORywgICAgICAgZm10LCAjI2FyZykKKyNkZWZpbmUgbGdfZXJyKGZtdCwgYXJnLi4uKQlsZ19wcmludGsoS0VSTl9FUlIsICAgICAgICAgICBmbXQsICMjYXJnKQorI2RlZmluZSBsZ19kYmcoZm10LCBhcmcuLi4pIGlmIChkZWJ1ZyAmIERCR19JTkZPKQkJCVwKKwkJCQlsZ19wcmludGsoS0VSTl9ERUJVRywgICAgICAgICBmbXQsICMjYXJnKQorI2RlZmluZSBsZ19yZWcoZm10LCBhcmcuLi4pIGlmIChkZWJ1ZyAmIERCR19SRUcpCQkJXAorCQkJCWxnX3ByaW50ayhLRVJOX0RFQlVHLCAgICAgICAgIGZtdCwgIyNhcmcpCisKKyNkZWZpbmUgbGdfZmFpbChyZXQpCQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCWludCBfX3JldDsJCQkJCQkJXAorCV9fcmV0ID0gKHJldCA8IDApOwkJCQkJCVwKKwlpZiAoX19yZXQpCQkJCQkJCVwKKwkJbGdfZXJyKCJlcnJvciAlZCBvbiBsaW5lICVkXG4iLAlyZXQsIF9fTElORV9fKTsJCVwKKwlfX3JldDsJCQkJCQkJCVwKK30pCisKK3N0cnVjdCBsZ2R0MzMwNV9zdGF0ZSB7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcDsKKwljb25zdCBzdHJ1Y3QgbGdkdDMzMDVfY29uZmlnICpjZmc7CisKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kIGZyb250ZW5kOworCisJZmVfbW9kdWxhdGlvbl90IGN1cnJlbnRfbW9kdWxhdGlvbjsKKwl1MzIgY3VycmVudF9mcmVxdWVuY3k7CisJdTMyIHNucjsKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisjZGVmaW5lIExHRFQzMzA1X0dFTl9DVFJMXzEgICAgICAgICAgICAgICAgICAgMHgwMDAwCisjZGVmaW5lIExHRFQzMzA1X0dFTl9DVFJMXzIgICAgICAgICAgICAgICAgICAgMHgwMDAxCisjZGVmaW5lIExHRFQzMzA1X0dFTl9DVFJMXzMgICAgICAgICAgICAgICAgICAgMHgwMDAyCisjZGVmaW5lIExHRFQzMzA1X0dFTl9TVEFUVVMgICAgICAgICAgICAgICAgICAgMHgwMDAzCisjZGVmaW5lIExHRFQzMzA1X0dFTl9DT05UUk9MICAgICAgICAgICAgICAgICAgMHgwMDA3CisjZGVmaW5lIExHRFQzMzA1X0dFTl9DVFJMXzQgICAgICAgICAgICAgICAgICAgMHgwMDBhCisjZGVmaW5lIExHRFQzMzA1X0RHVExfQUdDX1JFRl8xICAgICAgICAgICAgICAgMHgwMDEyCisjZGVmaW5lIExHRFQzMzA1X0RHVExfQUdDX1JFRl8yICAgICAgICAgICAgICAgMHgwMDEzCisjZGVmaW5lIExHRFQzMzA1X0NSX0NUUl9GUkVRXzEgICAgICAgICAgICAgICAgMHgwMTA2CisjZGVmaW5lIExHRFQzMzA1X0NSX0NUUl9GUkVRXzIgICAgICAgICAgICAgICAgMHgwMTA3CisjZGVmaW5lIExHRFQzMzA1X0NSX0NUUl9GUkVRXzMgICAgICAgICAgICAgICAgMHgwMTA4CisjZGVmaW5lIExHRFQzMzA1X0NSX0NUUl9GUkVRXzQgICAgICAgICAgICAgICAgMHgwMTA5CisjZGVmaW5lIExHRFQzMzA1X0NSX01TRV8xICAgICAgICAgICAgICAgICAgICAgMHgwMTFiCisjZGVmaW5lIExHRFQzMzA1X0NSX01TRV8yICAgICAgICAgICAgICAgICAgICAgMHgwMTFjCisjZGVmaW5lIExHRFQzMzA1X0NSX0xPQ0tfU1RBVFVTICAgICAgICAgICAgICAgMHgwMTFkCisjZGVmaW5lIExHRFQzMzA1X0NSX0NUUkxfNyAgICAgICAgICAgICAgICAgICAgMHgwMTI2CisjZGVmaW5lIExHRFQzMzA1X0FHQ19QT1dFUl9SRUZfMSAgICAgICAgICAgICAgMHgwMzAwCisjZGVmaW5lIExHRFQzMzA1X0FHQ19QT1dFUl9SRUZfMiAgICAgICAgICAgICAgMHgwMzAxCisjZGVmaW5lIExHRFQzMzA1X0FHQ19ERUxBWV9QVF8xICAgICAgICAgICAgICAgMHgwMzAyCisjZGVmaW5lIExHRFQzMzA1X0FHQ19ERUxBWV9QVF8yICAgICAgICAgICAgICAgMHgwMzAzCisjZGVmaW5lIExHRFQzMzA1X1JGQUdDX0xPT1BfRkxUUl9CV18xICAgICAgICAgMHgwMzA2CisjZGVmaW5lIExHRFQzMzA1X1JGQUdDX0xPT1BfRkxUUl9CV18yICAgICAgICAgMHgwMzA3CisjZGVmaW5lIExHRFQzMzA1X0lGQldfMSAgICAgICAgICAgICAgICAgICAgICAgMHgwMzA4CisjZGVmaW5lIExHRFQzMzA1X0lGQldfMiAgICAgICAgICAgICAgICAgICAgICAgMHgwMzA5CisjZGVmaW5lIExHRFQzMzA1X0FHQ19DVFJMXzEgICAgICAgICAgICAgICAgICAgMHgwMzBjCisjZGVmaW5lIExHRFQzMzA1X0FHQ19DVFJMXzQgICAgICAgICAgICAgICAgICAgMHgwMzE0CisjZGVmaW5lIExHRFQzMzA1X0VRX01TRV8xICAgICAgICAgICAgICAgICAgICAgMHgwNDEzCisjZGVmaW5lIExHRFQzMzA1X0VRX01TRV8yICAgICAgICAgICAgICAgICAgICAgMHgwNDE0CisjZGVmaW5lIExHRFQzMzA1X0VRX01TRV8zICAgICAgICAgICAgICAgICAgICAgMHgwNDE1CisjZGVmaW5lIExHRFQzMzA1X1BUX01TRV8xICAgICAgICAgICAgICAgICAgICAgMHgwNDE3CisjZGVmaW5lIExHRFQzMzA1X1BUX01TRV8yICAgICAgICAgICAgICAgICAgICAgMHgwNDE4CisjZGVmaW5lIExHRFQzMzA1X1BUX01TRV8zICAgICAgICAgICAgICAgICAgICAgMHgwNDE5CisjZGVmaW5lIExHRFQzMzA1X0ZFQ19CTE9DS19DVFJMICAgICAgICAgICAgICAgMHgwNTA0CisjZGVmaW5lIExHRFQzMzA1X0ZFQ19MT0NLX1NUQVRVUyAgICAgICAgICAgICAgMHgwNTBhCisjZGVmaW5lIExHRFQzMzA1X0ZFQ19QS1RfRVJSXzEgICAgICAgICAgICAgICAgMHgwNTBjCisjZGVmaW5lIExHRFQzMzA1X0ZFQ19QS1RfRVJSXzIgICAgICAgICAgICAgICAgMHgwNTBkCisjZGVmaW5lIExHRFQzMzA1X1RQX0NUUkxfMSAgICAgICAgICAgICAgICAgICAgMHgwNTBlCisjZGVmaW5lIExHRFQzMzA1X0JFUlRfUEVSSU9EICAgICAgICAgICAgICAgICAgMHgwODAxCisjZGVmaW5lIExHRFQzMzA1X0JFUlRfRVJST1JfQ09VTlRfMSAgICAgICAgICAgMHgwODBhCisjZGVmaW5lIExHRFQzMzA1X0JFUlRfRVJST1JfQ09VTlRfMiAgICAgICAgICAgMHgwODBiCisjZGVmaW5lIExHRFQzMzA1X0JFUlRfRVJST1JfQ09VTlRfMyAgICAgICAgICAgMHgwODBjCisjZGVmaW5lIExHRFQzMzA1X0JFUlRfRVJST1JfQ09VTlRfNCAgICAgICAgICAgMHgwODBkCisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfd3JpdGVfcmVnKHN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUsIHUxNiByZWcsIHU4IHZhbCkKK3sKKwlpbnQgcmV0OworCXU4IGJ1ZltdID0geyByZWcgPj4gOCwgcmVnICYgMHhmZiwgdmFsIH07CisJc3RydWN0IGkyY19tc2cgbXNnID0geworCQkuYWRkciA9IHN0YXRlLT5jZmctPmkyY19hZGRyLCAuZmxhZ3MgPSAwLAorCQkuYnVmID0gYnVmLCAubGVuID0gMywKKwl9OworCisJbGdfcmVnKCJyZWc6IDB4JTA0eCwgdmFsOiAweCUwMnhcbiIsIHJlZywgdmFsKTsKKworCXJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjX2FkYXAsICZtc2csIDEpOworCisJaWYgKHJldCAhPSAxKSB7CisJCWxnX2VycigiZXJyb3IgKGFkZHIgJTAyeCAlMDJ4IDwtICUwMngsIGVyciA9ICVpKVxuIiwKKwkJICAgICAgIG1zZy5idWZbMF0sIG1zZy5idWZbMV0sIG1zZy5idWZbMl0sIHJldCk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwkJZWxzZQorCQkJcmV0dXJuIC1FUkVNT1RFSU87CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxnZHQzMzA1X3JlYWRfcmVnKHN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUsIHUxNiByZWcsIHU4ICp2YWwpCit7CisJaW50IHJldDsKKwl1OCByZWdfYnVmW10gPSB7IHJlZyA+PiA4LCByZWcgJiAweGZmIH07CisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7CisJCXsgLmFkZHIgPSBzdGF0ZS0+Y2ZnLT5pMmNfYWRkciwKKwkJICAuZmxhZ3MgPSAwLCAuYnVmID0gcmVnX2J1ZiwgLmxlbiA9IDIgfSwKKwkJeyAuYWRkciA9IHN0YXRlLT5jZmctPmkyY19hZGRyLAorCQkgIC5mbGFncyA9IEkyQ19NX1JELCAuYnVmID0gdmFsLCAubGVuID0gMSB9LAorCX07CisKKwlsZ19yZWcoInJlZzogMHglMDR4XG4iLCByZWcpOworCisJcmV0ID0gaTJjX3RyYW5zZmVyKHN0YXRlLT5pMmNfYWRhcCwgbXNnLCAyKTsKKworCWlmIChyZXQgIT0gMikgeworCQlsZ19lcnIoImVycm9yIChhZGRyICUwMnggcmVnICUwNHggZXJyb3IgKHJldCA9PSAlaSlcbiIsCisJCSAgICAgICBzdGF0ZS0+Y2ZnLT5pMmNfYWRkciwgcmVnLCByZXQpOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJCWVsc2UKKwkJCXJldHVybiAtRVJFTU9URUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworI2RlZmluZSByZWFkX3JlZyhzdGF0ZSwgcmVnKQkJCQkJCVwKKyh7CQkJCQkJCQkJXAorCXU4IF9fdmFsOwkJCQkJCQlcCisJaW50IHJldCA9IGxnZHQzMzA1X3JlYWRfcmVnKHN0YXRlLCByZWcsICZfX3ZhbCk7CQlcCisJaWYgKGxnX2ZhaWwocmV0KSkJCQkJCQlcCisJCV9fdmFsID0gMDsJCQkJCQlcCisJX192YWw7CQkJCQkJCQlcCit9KQorCitzdGF0aWMgaW50IGxnZHQzMzA1X3NldF9yZWdfYml0KHN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUsCisJCQkJdTE2IHJlZywgaW50IGJpdCwgaW50IG9ub2ZmKQoreworCXU4IHZhbDsKKwlpbnQgcmV0OworCisJbGdfcmVnKCJyZWc6IDB4JTA0eCwgYml0OiAlZCwgbGV2ZWw6ICVkXG4iLCByZWcsIGJpdCwgb25vZmYpOworCisJcmV0ID0gbGdkdDMzMDVfcmVhZF9yZWcoc3RhdGUsIHJlZywgJnZhbCk7CisJaWYgKGxnX2ZhaWwocmV0KSkKKwkJZ290byBmYWlsOworCisJdmFsICY9IH4oMSA8PCBiaXQpOworCXZhbCB8PSAob25vZmYgJiAxKSA8PCBiaXQ7CisKKwlyZXQgPSBsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIHJlZywgdmFsKTsKK2ZhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RydWN0IGxnZHQzMzA1X3JlZyB7CisJdTE2IHJlZzsKKwl1OCB2YWw7Cit9OworCitzdGF0aWMgaW50IGxnZHQzMzA1X3dyaXRlX3JlZ3Moc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSwKKwkJCSAgICAgICBzdHJ1Y3QgbGdkdDMzMDVfcmVnICpyZWdzLCBpbnQgbGVuKQoreworCWludCBpLCByZXQ7CisKKwlsZ19yZWcoIndyaXRpbmcgJWQgcmVnaXN0ZXJzLi4uXG4iLCBsZW4pOworCisJZm9yIChpID0gMDsgaSA8IGxlbiAtIDE7IGkrKykgeworCQlyZXQgPSBsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIHJlZ3NbaV0ucmVnLCByZWdzW2ldLnZhbCk7CisJCWlmIChsZ19mYWlsKHJldCkpCisJCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfc29mdF9yZXNldChzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlKQoreworCWludCByZXQ7CisKKwlsZ19kYmcoIlxuIik7CisKKwlyZXQgPSBsZ2R0MzMwNV9zZXRfcmVnX2JpdChzdGF0ZSwgTEdEVDMzMDVfR0VOX0NUUkxfMywgMCwgMCk7CisJaWYgKGxnX2ZhaWwocmV0KSkKKwkJZ290byBmYWlsOworCisJbXNsZWVwKDIwKTsKKwlyZXQgPSBsZ2R0MzMwNV9zZXRfcmVnX2JpdChzdGF0ZSwgTEdEVDMzMDVfR0VOX0NUUkxfMywgMCwgMSk7CitmYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGxnZHQzMzA1X21wZWdfbW9kZShzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlLAorCQkJCSAgICAgZW51bSBsZ2R0MzMwNV9tcGVnX21vZGUgbW9kZSkKK3sKKwlsZ19kYmcoIiglZClcbiIsIG1vZGUpOworCXJldHVybiBsZ2R0MzMwNV9zZXRfcmVnX2JpdChzdGF0ZSwgTEdEVDMzMDVfVFBfQ1RSTF8xLCA1LCBtb2RlKTsKK30KKworc3RhdGljIGludCBsZ2R0MzMwNV9tcGVnX21vZGVfcG9sYXJpdHkoc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSwKKwkJCQkgICAgICAgZW51bSBsZ2R0MzMwNV90cF9jbG9ja19lZGdlIGVkZ2UsCisJCQkJICAgICAgIGVudW0gbGdkdDMzMDVfdHBfdmFsaWRfcG9sYXJpdHkgdmFsaWQpCit7CisJdTggdmFsOworCWludCByZXQ7CisKKwlsZ19kYmcoImVkZ2UgPSAlZCwgdmFsaWQgPSAlZFxuIiwgZWRnZSwgdmFsaWQpOworCisJcmV0ID0gbGdkdDMzMDVfcmVhZF9yZWcoc3RhdGUsIExHRFQzMzA1X1RQX0NUUkxfMSwgJnZhbCk7CisJaWYgKGxnX2ZhaWwocmV0KSkKKwkJZ290byBmYWlsOworCisJdmFsICY9IH4weDA5OworCisJaWYgKGVkZ2UpCisJCXZhbCB8PSAweDA4OworCWlmICh2YWxpZCkKKwkJdmFsIHw9IDB4MDE7CisKKwlyZXQgPSBsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X1RQX0NUUkxfMSwgdmFsKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisKKwlyZXQgPSBsZ2R0MzMwNV9zb2Z0X3Jlc2V0KHN0YXRlKTsKK2ZhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBsZ2R0MzMwNV9zZXRfbW9kdWxhdGlvbihzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlLAorCQkJCSAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW0pCit7CisJdTggb3Blcm1vZGU7CisJaW50IHJldDsKKworCWxnX2RiZygiXG4iKTsKKworCXJldCA9IGxnZHQzMzA1X3JlYWRfcmVnKHN0YXRlLCBMR0RUMzMwNV9HRU5fQ1RSTF8xLCAmb3Blcm1vZGUpOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKworCW9wZXJtb2RlICY9IH4weDAzOworCisJc3dpdGNoIChwYXJhbS0+dS52c2IubW9kdWxhdGlvbikgeworCWNhc2UgVlNCXzg6CisJCW9wZXJtb2RlIHw9IDB4MDM7CisJCWJyZWFrOworCWNhc2UgUUFNXzY0OgorCQlvcGVybW9kZSB8PSAweDAwOworCQlicmVhazsKKwljYXNlIFFBTV8yNTY6CisJCW9wZXJtb2RlIHw9IDB4MDE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXQgPSBsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X0dFTl9DVFJMXzEsIG9wZXJtb2RlKTsKK2ZhaWw6CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBsZ2R0MzMwNV9zZXRfZmlsdGVyX2V4dGVuc2lvbihzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlLAorCQkJCQkgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbSkKK3sKKwlpbnQgdmFsOworCisJc3dpdGNoIChwYXJhbS0+dS52c2IubW9kdWxhdGlvbikgeworCWNhc2UgVlNCXzg6CisJCXZhbCA9IDA7CisJCWJyZWFrOworCWNhc2UgUUFNXzY0OgorCWNhc2UgUUFNXzI1NjoKKwkJdmFsID0gMTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWxnX2RiZygidmFsID0gJWRcbiIsIHZhbCk7CisKKwlyZXR1cm4gbGdkdDMzMDVfc2V0X3JlZ19iaXQoc3RhdGUsIDB4MDQzZiwgMiwgdmFsKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfcGFzc2JhbmRfZGlnaXRhbF9hZ2Moc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSwKKwkJCQkJIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW0pCit7CisJdTE2IGFnY19yZWY7CisKKwlzd2l0Y2ggKHBhcmFtLT51LnZzYi5tb2R1bGF0aW9uKSB7CisJY2FzZSBWU0JfODoKKwkJYWdjX3JlZiA9IDB4MzJjNDsKKwkJYnJlYWs7CisJY2FzZSBRQU1fNjQ6CisJCWFnY19yZWYgPSAweDJhMDA7CisJCWJyZWFrOworCWNhc2UgUUFNXzI1NjoKKwkJYWdjX3JlZiA9IDB4MmE4MDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbGdfZGJnKCJhZ2MgcmVmOiAweCUwNHhcbiIsIGFnY19yZWYpOworCisJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9ER1RMX0FHQ19SRUZfMSwgYWdjX3JlZiA+PiA4KTsKKwlsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X0RHVExfQUdDX1JFRl8yLCBhZ2NfcmVmICYgMHhmZik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsZ2R0MzMwNV9yZmFnY19sb29wKHN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUsCisJCQkgICAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbSkKK3sKKwl1MTYgaWZidywgcmZidywgYWdjZGVsYXk7CisKKwlzd2l0Y2ggKHBhcmFtLT51LnZzYi5tb2R1bGF0aW9uKSB7CisJY2FzZSBWU0JfODoKKwkJYWdjZGVsYXkgPSAweDA0YzA7CisJCXJmYncgICAgID0gMHg4MDAwOworCQlpZmJ3ICAgICA9IDB4ODAwMDsKKwkJYnJlYWs7CisJY2FzZSBRQU1fNjQ6CisJY2FzZSBRQU1fMjU2OgorCQlhZ2NkZWxheSA9IDB4MDQ2YjsKKwkJcmZidyAgICAgPSAweDg4ODk7CisJCWlmYncgICAgID0gMHg4ODg4OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlpZiAoc3RhdGUtPmNmZy0+cmZfYWdjX2xvb3ApIHsKKwkJbGdfZGJnKCJhZ2NkZWxheTogMHglMDR4LCByZmJ3OiAweCUwNHhcbiIsIGFnY2RlbGF5LCByZmJ3KTsKKworCQkvKiByZiBhZ2MgbG9vcCBmaWx0ZXIgYmFuZHdpZHRoICovCisJCWxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfQUdDX0RFTEFZX1BUXzEsCisJCQkJICAgYWdjZGVsYXkgPj4gOCk7CisJCWxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfQUdDX0RFTEFZX1BUXzIsCisJCQkJICAgYWdjZGVsYXkgJiAweGZmKTsKKworCQlsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X1JGQUdDX0xPT1BfRkxUUl9CV18xLAorCQkJCSAgIHJmYncgPj4gOCk7CisJCWxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfUkZBR0NfTE9PUF9GTFRSX0JXXzIsCisJCQkJICAgcmZidyAmIDB4ZmYpOworCX0gZWxzZSB7CisJCWxnX2RiZygiaWZidzogMHglMDR4XG4iLCBpZmJ3KTsKKworCQkvKiBpZiBhZ2MgbG9vcCBmaWx0ZXIgYmFuZHdpZHRoICovCisJCWxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfSUZCV18xLCBpZmJ3ID4+IDgpOworCQlsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X0lGQldfMiwgaWZidyAmIDB4ZmYpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxnZHQzMzA1X2FnY19zZXR1cChzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlLAorCQkJICAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbSkKK3sKKwlpbnQgbG9ja2R0ZW4sIGFjcWVuOworCisJc3dpdGNoIChwYXJhbS0+dS52c2IubW9kdWxhdGlvbikgeworCWNhc2UgVlNCXzg6CisJCWxvY2tkdGVuID0gMDsKKwkJYWNxZW4gPSAwOworCQlicmVhazsKKwljYXNlIFFBTV82NDoKKwljYXNlIFFBTV8yNTY6CisJCWxvY2tkdGVuID0gMTsKKwkJYWNxZW4gPSAxOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlsZ19kYmcoImxvY2tkdGVuID0gJWQsIGFjcWVuID0gJWRcbiIsIGxvY2tkdGVuLCBhY3Flbik7CisKKwkvKiBjb250cm9sIGFnYyBmdW5jdGlvbiAqLworCWxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfQUdDX0NUUkxfNCwgMHhlMSB8IGxvY2tkdGVuIDw8IDEpOworCWxnZHQzMzA1X3NldF9yZWdfYml0KHN0YXRlLCBMR0RUMzMwNV9BR0NfQ1RSTF8xLCAyLCBhY3Flbik7CisKKwlyZXR1cm4gbGdkdDMzMDVfcmZhZ2NfbG9vcChzdGF0ZSwgcGFyYW0pOworfQorCitzdGF0aWMgaW50IGxnZHQzMzA1X3NldF9hZ2NfcG93ZXJfcmVmKHN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUsCisJCQkJICAgICAgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbSkKK3sKKwl1MTYgdXNyZWYgPSAwOworCisJc3dpdGNoIChwYXJhbS0+dS52c2IubW9kdWxhdGlvbikgeworCWNhc2UgVlNCXzg6CisJCWlmIChzdGF0ZS0+Y2ZnLT51c3JlZl84dnNiKQorCQkJdXNyZWYgPSBzdGF0ZS0+Y2ZnLT51c3JlZl84dnNiOworCQlicmVhazsKKwljYXNlIFFBTV82NDoKKwkJaWYgKHN0YXRlLT5jZmctPnVzcmVmX3FhbTY0KQorCQkJdXNyZWYgPSBzdGF0ZS0+Y2ZnLT51c3JlZl9xYW02NDsKKwkJYnJlYWs7CisJY2FzZSBRQU1fMjU2OgorCQlpZiAoc3RhdGUtPmNmZy0+dXNyZWZfcWFtMjU2KQorCQkJdXNyZWYgPSBzdGF0ZS0+Y2ZnLT51c3JlZl9xYW0yNTY7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmICh1c3JlZikgeworCQlsZ19kYmcoInNldCBtYW51YWwgbW9kZTogMHglMDR4XG4iLCB1c3JlZik7CisKKwkJbGdkdDMzMDVfc2V0X3JlZ19iaXQoc3RhdGUsIExHRFQzMzA1X0FHQ19DVFJMXzEsIDMsIDEpOworCisJCWxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfQUdDX1BPV0VSX1JFRl8xLAorCQkJCSAgIDB4ZmYgJiAodXNyZWYgPj4gOCkpOworCQlsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X0FHQ19QT1dFUl9SRUZfMiwKKwkJCQkgICAweGZmICYgKHVzcmVmID4+IDApKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IGxnZHQzMzA1X3NwZWN0cmFsX2ludmVyc2lvbihzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlLAorCQkJCSAgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtLAorCQkJCSAgICAgICBpbnQgaW52ZXJzaW9uKQoreworCWludCByZXQ7CisKKwlsZ19kYmcoIiglZClcbiIsIGludmVyc2lvbik7CisKKwlzd2l0Y2ggKHBhcmFtLT51LnZzYi5tb2R1bGF0aW9uKSB7CisJY2FzZSBWU0JfODoKKwkJcmV0ID0gbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9DUl9DVFJMXzcsCisJCQkJCSBpbnZlcnNpb24gPyAweGY5IDogMHg3OSk7CisJCWJyZWFrOworCWNhc2UgUUFNXzY0OgorCWNhc2UgUUFNXzI1NjoKKwkJcmV0ID0gbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9GRUNfQkxPQ0tfQ1RSTCwKKwkJCQkJIGludmVyc2lvbiA/IDB4ZmQgOiAweGZmKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBsZ2R0MzMwNV9zZXRfaWYoc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSwKKwkJCSAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW0pCit7CisJdTE2IGlmX2ZyZXFfa2h6OworCXU4IG5jbzEsIG5jbzIsIG5jbzMsIG5jbzQ7CisJdTY0IG5jbzsKKworCXN3aXRjaCAocGFyYW0tPnUudnNiLm1vZHVsYXRpb24pIHsKKwljYXNlIFZTQl84OgorCQlpZl9mcmVxX2toeiA9IHN0YXRlLT5jZmctPnZzYl9pZl9raHo7CisJCWJyZWFrOworCWNhc2UgUUFNXzY0OgorCWNhc2UgUUFNXzI1NjoKKwkJaWZfZnJlcV9raHogPSBzdGF0ZS0+Y2ZnLT5xYW1faWZfa2h6OworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwluY28gPSBpZl9mcmVxX2toeiAvIDEwOworCisjZGVmaW5lIExHRFQzMzA1XzY0QklUX0RJVklTSU9OX0VOQUJMRUQgMAorCS8qIEZJWE1FOiA2NGJpdCBkaXZpc2lvbiBkaXNhYmxlZCB0byBhdm9pZCBsaW5raW5nIGVycm9yOgorCSAqIFdBUk5JTkc6ICJfX3VkaXZkaTMiIFtsZ2R0MzMwNS5rb10gdW5kZWZpbmVkIQorCSAqLworCXN3aXRjaCAocGFyYW0tPnUudnNiLm1vZHVsYXRpb24pIHsKKwljYXNlIFZTQl84OgorI2lmIExHRFQzMzA1XzY0QklUX0RJVklTSU9OX0VOQUJMRUQKKwkJbmNvIDw8PSAyNDsKKwkJbmNvIC89IDYyNTsKKyNlbHNlCisJCW5jbyAqPSAoKDEgPDwgMjQpIC8gNjI1KTsKKyNlbmRpZgorCQlicmVhazsKKwljYXNlIFFBTV82NDoKKwljYXNlIFFBTV8yNTY6CisjaWYgTEdEVDMzMDVfNjRCSVRfRElWSVNJT05fRU5BQkxFRAorCQluY28gPDw9IDI4OworCQluY28gLz0gNjI1OworI2Vsc2UKKwkJbmNvICo9ICgoMSA8PCAyOCkgLyA2MjUpOworI2VuZGlmCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW5jbzEgPSAobmNvID4+IDI0KSAmIDB4M2Y7CisJbmNvMSB8PSAweDQwOworCW5jbzIgPSAobmNvID4+IDE2KSAmIDB4ZmY7CisJbmNvMyA9IChuY28gPj4gOCkgJiAweGZmOworCW5jbzQgPSBuY28gJiAweGZmOworCisJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9DUl9DVFJfRlJFUV8xLCBuY28xKTsKKwlsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIExHRFQzMzA1X0NSX0NUUl9GUkVRXzIsIG5jbzIpOworCWxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfQ1JfQ1RSX0ZSRVFfMywgbmNvMyk7CisJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9DUl9DVFJfRlJFUV80LCBuY280KTsKKworCWxnX2RiZygiJWQgS0h6IC0+IFslMDJ4JTAyeCUwMnglMDJ4XVxuIiwKKwkgICAgICAgaWZfZnJlcV9raHosIG5jbzEsIG5jbzIsIG5jbzMsIG5jbzQpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgaW50IGxnZHQzMzA1X2kyY19nYXRlX2N0cmwoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBlbmFibGUpCit7CisJc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJaWYgKHN0YXRlLT5jZmctPmRlbnlfaTJjX3JwdHIpCisJCXJldHVybiAwOworCisJbGdfZGJnKCIoJWQpXG4iLCBlbmFibGUpOworCisJcmV0dXJuIGxnZHQzMzA1X3NldF9yZWdfYml0KHN0YXRlLCBMR0RUMzMwNV9HRU5fQ1RSTF8yLCA1LAorCQkJCSAgICBlbmFibGUgPyAwIDogMSk7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IGdlbl9jdHJsXzMsIGdlbl9jdHJsXzQ7CisKKwlsZ19kYmcoIlxuIik7CisKKwlnZW5fY3RybF8zID0gcmVhZF9yZWcoc3RhdGUsIExHRFQzMzA1X0dFTl9DVFJMXzMpOworCWdlbl9jdHJsXzQgPSByZWFkX3JlZyhzdGF0ZSwgTEdEVDMzMDVfR0VOX0NUUkxfNCk7CisKKwkvKiBob2xkIGluIHNvZnR3YXJlIHJlc2V0IHdoaWxlIHNsZWVwaW5nICovCisJZ2VuX2N0cmxfMyAmPSB+MHgwMTsKKwkvKiB0cmlzdGF0ZSB0aGUgSUYtQUdDIHBpbiAqLworCWdlbl9jdHJsXzMgfD0gIDB4MDI7CisJLyogdHJpc3RhdGUgdGhlIFJGLUFHQyBwaW4gKi8KKwlnZW5fY3RybF8zIHw9ICAweDA0OworCisJLyogZGlzYWJsZSB2c2IvcWFtIG1vZHVsZSAqLworCWdlbl9jdHJsXzQgJj0gfjB4MDE7CisJLyogZGlzYWJsZSBhZGMgbW9kdWxlICovCisJZ2VuX2N0cmxfNCAmPSB+MHgwMjsKKworCWxnZHQzMzA1X3dyaXRlX3JlZyhzdGF0ZSwgTEdEVDMzMDVfR0VOX0NUUkxfMywgZ2VuX2N0cmxfMyk7CisJbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9HRU5fQ1RSTF80LCBnZW5fY3RybF80KTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxnZHQzMzA1X2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWludCByZXQ7CisKKwlzdGF0aWMgc3RydWN0IGxnZHQzMzA1X3JlZyBsZ2R0MzMwNV9pbml0X2RhdGFbXSA9IHsKKwkJeyAucmVnID0gTEdEVDMzMDVfR0VOX0NUUkxfMSwKKwkJICAudmFsID0gMHgwMywgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfR0VOX0NUUkxfMiwKKwkJICAudmFsID0gMHhiMCwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfR0VOX0NUUkxfMywKKwkJICAudmFsID0gMHgwMSwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfR0VOX0NPTlRST0wsCisJCSAgLnZhbCA9IDB4NmYsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0dFTl9DVFJMXzQsCisJCSAgLnZhbCA9IDB4MDMsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0RHVExfQUdDX1JFRl8xLAorCQkgIC52YWwgPSAweDMyLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9ER1RMX0FHQ19SRUZfMiwKKwkJICAudmFsID0gMHhjNCwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfQ1JfQ1RSX0ZSRVFfMSwKKwkJICAudmFsID0gMHgwMCwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfQ1JfQ1RSX0ZSRVFfMiwKKwkJICAudmFsID0gMHgwMCwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfQ1JfQ1RSX0ZSRVFfMywKKwkJICAudmFsID0gMHgwMCwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfQ1JfQ1RSX0ZSRVFfNCwKKwkJICAudmFsID0gMHgwMCwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfQ1JfQ1RSTF83LAorCQkgIC52YWwgPSAweDc5LCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9BR0NfUE9XRVJfUkVGXzEsCisJCSAgLnZhbCA9IDB4MzIsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0FHQ19QT1dFUl9SRUZfMiwKKwkJICAudmFsID0gMHhjNCwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfQUdDX0RFTEFZX1BUXzEsCisJCSAgLnZhbCA9IDB4MGQsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0FHQ19ERUxBWV9QVF8yLAorCQkgIC52YWwgPSAweDMwLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9SRkFHQ19MT09QX0ZMVFJfQldfMSwKKwkJICAudmFsID0gMHg4MCwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfUkZBR0NfTE9PUF9GTFRSX0JXXzIsCisJCSAgLnZhbCA9IDB4MDAsIH0sCisJCXsgLnJlZyA9IExHRFQzMzA1X0lGQldfMSwKKwkJICAudmFsID0gMHg4MCwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfSUZCV18yLAorCQkgIC52YWwgPSAweDAwLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9BR0NfQ1RSTF8xLAorCQkgIC52YWwgPSAweDMwLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9BR0NfQ1RSTF80LAorCQkgIC52YWwgPSAweDYxLCB9LAorCQl7IC5yZWcgPSBMR0RUMzMwNV9GRUNfQkxPQ0tfQ1RSTCwKKwkJICAudmFsID0gMHhmZiwgfSwKKwkJeyAucmVnID0gTEdEVDMzMDVfVFBfQ1RSTF8xLAorCQkgIC52YWwgPSAweDFiLCB9LAorCX07CisKKwlsZ19kYmcoIlxuIik7CisKKwlyZXQgPSBsZ2R0MzMwNV93cml0ZV9yZWdzKHN0YXRlLCBsZ2R0MzMwNV9pbml0X2RhdGEsCisJCQkJICBBUlJBWV9TSVpFKGxnZHQzMzA1X2luaXRfZGF0YSkpOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKworCXJldCA9IGxnZHQzMzA1X3NvZnRfcmVzZXQoc3RhdGUpOworZmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGxnZHQzMzA1X3NldF9wYXJhbWV0ZXJzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCSAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcGFyYW0pCit7CisJc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWludCByZXQ7CisKKwlsZ19kYmcoIiglZCwgJWQpXG4iLCBwYXJhbS0+ZnJlcXVlbmN5LCBwYXJhbS0+dS52c2IubW9kdWxhdGlvbik7CisKKwlpZiAoZmUtPm9wcy50dW5lcl9vcHMuc2V0X3BhcmFtcykgeworCQlyZXQgPSBmZS0+b3BzLnR1bmVyX29wcy5zZXRfcGFyYW1zKGZlLCBwYXJhbSk7CisJCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOworCQlpZiAobGdfZmFpbChyZXQpKQorCQkJZ290byBmYWlsOworCQlzdGF0ZS0+Y3VycmVudF9mcmVxdWVuY3kgPSBwYXJhbS0+ZnJlcXVlbmN5OworCX0KKworCXJldCA9IGxnZHQzMzA1X3NldF9tb2R1bGF0aW9uKHN0YXRlLCBwYXJhbSk7CisJaWYgKGxnX2ZhaWwocmV0KSkKKwkJZ290byBmYWlsOworCisJcmV0ID0gbGdkdDMzMDVfcGFzc2JhbmRfZGlnaXRhbF9hZ2Moc3RhdGUsIHBhcmFtKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisJcmV0ID0gbGdkdDMzMDVfc2V0X2FnY19wb3dlcl9yZWYoc3RhdGUsIHBhcmFtKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisJcmV0ID0gbGdkdDMzMDVfYWdjX3NldHVwKHN0YXRlLCBwYXJhbSk7CisJaWYgKGxnX2ZhaWwocmV0KSkKKwkJZ290byBmYWlsOworCisJLyogbG93IGlmICovCisJcmV0ID0gbGdkdDMzMDVfd3JpdGVfcmVnKHN0YXRlLCBMR0RUMzMwNV9HRU5fQ09OVFJPTCwgMHgyZik7CisJaWYgKGxnX2ZhaWwocmV0KSkKKwkJZ290byBmYWlsOworCXJldCA9IGxnZHQzMzA1X3NldF9yZWdfYml0KHN0YXRlLCBMR0RUMzMwNV9DUl9DVFJfRlJFUV8xLCA2LCAxKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisKKwlyZXQgPSBsZ2R0MzMwNV9zZXRfaWYoc3RhdGUsIHBhcmFtKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisJcmV0ID0gbGdkdDMzMDVfc3BlY3RyYWxfaW52ZXJzaW9uKHN0YXRlLCBwYXJhbSwKKwkJCQkJICBzdGF0ZS0+Y2ZnLT5zcGVjdHJhbF9pbnZlcnNpb24KKwkJCQkJICA/IDEgOiAwKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisKKwlyZXQgPSBsZ2R0MzMwNV9zZXRfZmlsdGVyX2V4dGVuc2lvbihzdGF0ZSwgcGFyYW0pOworCWlmIChsZ19mYWlsKHJldCkpCisJCWdvdG8gZmFpbDsKKworCXN0YXRlLT5jdXJyZW50X21vZHVsYXRpb24gPSBwYXJhbS0+dS52c2IubW9kdWxhdGlvbjsKKworCXJldCA9IGxnZHQzMzA1X21wZWdfbW9kZShzdGF0ZSwgc3RhdGUtPmNmZy0+bXBlZ19tb2RlKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisKKwkvKiBsZ2R0MzMwNV9tcGVnX21vZGVfcG9sYXJpdHkgY2FsbHMgbGdkdDMzMDVfc29mdF9yZXNldCAqLworCXJldCA9IGxnZHQzMzA1X21wZWdfbW9kZV9wb2xhcml0eShzdGF0ZSwKKwkJCQkJICBzdGF0ZS0+Y2ZnLT50cGNsa19lZGdlLAorCQkJCQkgIHN0YXRlLT5jZmctPnRwdmFsaWRfcG9sYXJpdHkpOworZmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGxnZHQzMzA1X2dldF9mcm9udGVuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkgc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzICpwYXJhbSkKK3sKKwlzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlsZ19kYmcoIlxuIik7CisKKwlwYXJhbS0+dS52c2IubW9kdWxhdGlvbiA9IHN0YXRlLT5jdXJyZW50X21vZHVsYXRpb247CisJcGFyYW0tPmZyZXF1ZW5jeSA9IHN0YXRlLT5jdXJyZW50X2ZyZXF1ZW5jeTsKKwlyZXR1cm4gMDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfcmVhZF9jcl9sb2NrX3N0YXR1cyhzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlLAorCQkJCQlpbnQgKmxvY2tlZCkKK3sKKwl1OCB2YWw7CisJaW50IHJldDsKKwljaGFyICpjcl9sb2NrX3N0YXRlID0gIiI7CisKKwkqbG9ja2VkID0gMDsKKworCXJldCA9IGxnZHQzMzA1X3JlYWRfcmVnKHN0YXRlLCBMR0RUMzMwNV9DUl9MT0NLX1NUQVRVUywgJnZhbCk7CisJaWYgKGxnX2ZhaWwocmV0KSkKKwkJZ290byBmYWlsOworCisJc3dpdGNoIChzdGF0ZS0+Y3VycmVudF9tb2R1bGF0aW9uKSB7CisJY2FzZSBRQU1fMjU2OgorCWNhc2UgUUFNXzY0OgorCQlpZiAodmFsICYgKDEgPDwgMSkpCisJCQkqbG9ja2VkID0gMTsKKworCQlzd2l0Y2ggKHZhbCAmIDB4MDcpIHsKKwkJY2FzZSAwOgorCQkJY3JfbG9ja19zdGF0ZSA9ICJRQU0gVU5MT0NLIjsKKwkJCWJyZWFrOworCQljYXNlIDQ6CisJCQljcl9sb2NrX3N0YXRlID0gIlFBTSAxc3RMb2NrIjsKKwkJCWJyZWFrOworCQljYXNlIDY6CisJCQljcl9sb2NrX3N0YXRlID0gIlFBTSAybmRMb2NrIjsKKwkJCWJyZWFrOworCQljYXNlIDc6CisJCQljcl9sb2NrX3N0YXRlID0gIlFBTSBGaW5hbExvY2siOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljcl9sb2NrX3N0YXRlID0gIkNMT0NLUUFNLUlOVkFMSUQhIjsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgVlNCXzg6CisJCWlmICh2YWwgJiAoMSA8PCA3KSkgeworCQkJKmxvY2tlZCA9IDE7CisJCQljcl9sb2NrX3N0YXRlID0gIkNMT0NLVlNCIjsKKwkJfQorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCX0KKwlsZ19kYmcoIiglZCkgJXNcbiIsICpsb2NrZWQsIGNyX2xvY2tfc3RhdGUpOworZmFpbDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGxnZHQzMzA1X3JlYWRfZmVjX2xvY2tfc3RhdHVzKHN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUsCisJCQkJCSBpbnQgKmxvY2tlZCkKK3sKKwl1OCB2YWw7CisJaW50IHJldCwgbXBlZ19sb2NrLCBmZWNfbG9jaywgdml0ZXJiaV9sb2NrOworCisJKmxvY2tlZCA9IDA7CisKKwlzd2l0Y2ggKHN0YXRlLT5jdXJyZW50X21vZHVsYXRpb24pIHsKKwljYXNlIFFBTV8yNTY6CisJY2FzZSBRQU1fNjQ6CisJCXJldCA9IGxnZHQzMzA1X3JlYWRfcmVnKHN0YXRlLAorCQkJCQlMR0RUMzMwNV9GRUNfTE9DS19TVEFUVVMsICZ2YWwpOworCQlpZiAobGdfZmFpbChyZXQpKQorCQkJZ290byBmYWlsOworCisJCW1wZWdfbG9jayAgICA9ICh2YWwgJiAoMSA8PCAwKSkgPyAxIDogMDsKKwkJZmVjX2xvY2sgICAgID0gKHZhbCAmICgxIDw8IDIpKSA/IDEgOiAwOworCQl2aXRlcmJpX2xvY2sgPSAodmFsICYgKDEgPDwgMykpID8gMSA6IDA7CisKKwkJKmxvY2tlZCA9IG1wZWdfbG9jayAmJiBmZWNfbG9jayAmJiB2aXRlcmJpX2xvY2s7CisKKwkJbGdfZGJnKCIoJWQpICVzJXMlc1xuIiwgKmxvY2tlZCwKKwkJICAgICAgIG1wZWdfbG9jayAgICA/ICJtcGVnIGxvY2sgICIgIDogIiIsCisJCSAgICAgICBmZWNfbG9jayAgICAgPyAiZmVjIGxvY2sgICIgICA6ICIiLAorCQkgICAgICAgdml0ZXJiaV9sb2NrID8gInZpdGVyYmkgbG9jayIgOiAiIik7CisJCWJyZWFrOworCWNhc2UgVlNCXzg6CisJZGVmYXVsdDoKKwkJcmV0ID0gLUVJTlZBTDsKKwl9CitmYWlsOgorCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfcmVhZF9zdGF0dXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3N0YXR1c190ICpzdGF0dXMpCit7CisJc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXU4IHZhbDsKKwlpbnQgcmV0LCBzaWduYWwsIGlubG9jaywgbm9mZWNlcnIsIHNucmdvb2QsCisJCWNyX2xvY2ssIGZlY19sb2NrLCBzeW5jX2xvY2s7CisKKwkqc3RhdHVzID0gMDsKKworCXJldCA9IGxnZHQzMzA1X3JlYWRfcmVnKHN0YXRlLCBMR0RUMzMwNV9HRU5fU1RBVFVTLCAmdmFsKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisKKwlzaWduYWwgICAgPSAodmFsICYgKDEgPDwgNCkpID8gMSA6IDA7CisJaW5sb2NrICAgID0gKHZhbCAmICgxIDw8IDMpKSA/IDAgOiAxOworCXN5bmNfbG9jayA9ICh2YWwgJiAoMSA8PCAyKSkgPyAxIDogMDsKKwlub2ZlY2VyciAgPSAodmFsICYgKDEgPDwgMSkpID8gMSA6IDA7CisJc25yZ29vZCAgID0gKHZhbCAmICgxIDw8IDApKSA/IDEgOiAwOworCisJbGdfZGJnKCIlcyVzJXMlcyVzXG4iLAorCSAgICAgICBzaWduYWwgICAgPyAiU0lHTkFMRVhJU1QgIiA6ICIiLAorCSAgICAgICBpbmxvY2sgICAgPyAiSU5MT0NLICIgICAgICA6ICIiLAorCSAgICAgICBzeW5jX2xvY2sgPyAiU1lOQ0xPQ0sgIiAgICA6ICIiLAorCSAgICAgICBub2ZlY2VyciAgPyAiTk9GRUNFUlIgIiAgICA6ICIiLAorCSAgICAgICBzbnJnb29kICAgPyAiU05SR09PRCAiICAgICA6ICIiKTsKKworCXJldCA9IGxnZHQzMzA1X3JlYWRfY3JfbG9ja19zdGF0dXMoc3RhdGUsICZjcl9sb2NrKTsKKwlpZiAobGdfZmFpbChyZXQpKQorCQlnb3RvIGZhaWw7CisKKwlpZiAoc2lnbmFsKQorCQkqc3RhdHVzIHw9IEZFX0hBU19TSUdOQUw7CisJaWYgKGNyX2xvY2spCisJCSpzdGF0dXMgfD0gRkVfSEFTX0NBUlJJRVI7CisJaWYgKG5vZmVjZXJyKQorCQkqc3RhdHVzIHw9IEZFX0hBU19WSVRFUkJJOworCWlmIChzeW5jX2xvY2spCisJCSpzdGF0dXMgfD0gRkVfSEFTX1NZTkM7CisKKwlzd2l0Y2ggKHN0YXRlLT5jdXJyZW50X21vZHVsYXRpb24pIHsKKwljYXNlIFFBTV8yNTY6CisJY2FzZSBRQU1fNjQ6CisJCXJldCA9IGxnZHQzMzA1X3JlYWRfZmVjX2xvY2tfc3RhdHVzKHN0YXRlLCAmZmVjX2xvY2spOworCQlpZiAobGdfZmFpbChyZXQpKQorCQkJZ290byBmYWlsOworCisJCWlmIChmZWNfbG9jaykKKwkJCSpzdGF0dXMgfD0gRkVfSEFTX0xPQ0s7CisJCWJyZWFrOworCWNhc2UgVlNCXzg6CisJCWlmIChpbmxvY2spCisJCQkqc3RhdHVzIHw9IEZFX0hBU19MT0NLOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXQgPSAtRUlOVkFMOworCX0KK2ZhaWw6CisJcmV0dXJuIHJldDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKy8qIGJvcnJvd2VkIGZyb20gbGdkdDMzMHguYyAqLworc3RhdGljIHUzMiBjYWxjdWxhdGVfc25yKHUzMiBtc2UsIHUzMiBjKQoreworCWlmIChtc2UgPT0gMCkgLyogbm8gc2lnbmFsICovCisJCXJldHVybiAwOworCisJbXNlID0gaW50bG9nMTAobXNlKTsKKwlpZiAobXNlID4gYykgeworCQkvKiBOZWdhdGl2ZSBTTlIsIHdoaWNoIGlzIHBvc3NpYmxlLCBidXQgcmVhbGlzdGljbHkgdGhlCisJCWRlbW9kIHdpbGwgbG9zZSBsb2NrIGJlZm9yZSB0aGUgc2lnbmFsIGdldHMgdGhpcyBiYWQuICBUaGUKKwkJQVBJIG9ubHkgYWxsb3dzIGZvciB1bnNpZ25lZCB2YWx1ZXMsIHNvIGp1c3QgcmV0dXJuIDAgKi8KKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiAxMCooYyAtIG1zZSk7Cit9CisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfcmVhZF9zbnIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUxNiAqc25yKQoreworCXN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1MzIgbm9pc2U7CS8qIG5vaXNlIHZhbHVlICovCisJdTMyIGM7CQkvKiBwZXItbW9kdWxhdGlvbiBTTlIgY2FsY3VsYXRpb24gY29uc3RhbnQgKi8KKworCXN3aXRjaCAoc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbikgeworCWNhc2UgVlNCXzg6CisjaWZkZWYgVVNFX1BUTVNFCisJCS8qIFVzZSBQaGFzZSBUcmFja2VyIE1lYW4tU3F1YXJlIEVycm9yIFJlZ2lzdGVyICovCisJCS8qIFNOUiBmb3IgcmFuZ2VzIGZyb20gLTEzLjExIHRvICs0NC4wOCAqLworCQlub2lzZSA9CSgocmVhZF9yZWcoc3RhdGUsIExHRFQzMzA1X1BUX01TRV8xKSAmIDB4MDcpIDw8IDE2KSB8CisJCQkocmVhZF9yZWcoc3RhdGUsIExHRFQzMzA1X1BUX01TRV8yKSA8PCA4KSB8CisJCQkocmVhZF9yZWcoc3RhdGUsIExHRFQzMzA1X1BUX01TRV8zKSAmIDB4ZmYpOworCQljID0gNzM5NTc5OTQ7IC8qIGxvZzEwKDI1KjMyXjIpKjJeMjQgKi8KKyNlbHNlCisJCS8qIFVzZSBFcXVhbGl6ZXIgTWVhbi1TcXVhcmUgRXJyb3IgUmVnaXN0ZXIgKi8KKwkJLyogU05SIGZvciByYW5nZXMgZnJvbSAtMTYuMTIgdG8gKzQ0LjA4ICovCisJCW5vaXNlID0JKChyZWFkX3JlZyhzdGF0ZSwgTEdEVDMzMDVfRVFfTVNFXzEpICYgMHgwZikgPDwgMTYpIHwKKwkJCShyZWFkX3JlZyhzdGF0ZSwgTEdEVDMzMDVfRVFfTVNFXzIpIDw8IDgpIHwKKwkJCShyZWFkX3JlZyhzdGF0ZSwgTEdEVDMzMDVfRVFfTVNFXzMpICYgMHhmZik7CisJCWMgPSA3Mzk1Nzk5NDsgLyogbG9nMTAoMjUqMzJeMikqMl4yNCAqLworI2VuZGlmCisJCWJyZWFrOworCWNhc2UgUUFNXzY0OgorCWNhc2UgUUFNXzI1NjoKKwkJbm9pc2UgPSAocmVhZF9yZWcoc3RhdGUsIExHRFQzMzA1X0NSX01TRV8xKSA8PCA4KSB8CisJCQkocmVhZF9yZWcoc3RhdGUsIExHRFQzMzA1X0NSX01TRV8yKSAmIDB4ZmYpOworCisJCWMgPSAoc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbiA9PSBRQU1fNjQpID8KKwkJCTk3OTM5ODM3IDogOTgwMjYwNjY7CisJCS8qIGxvZzEwKDY4ODEyOCkqMl4yNCBhbmQgbG9nMTAoNjk2MzIwKSoyXjI0ICovCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlzdGF0ZS0+c25yID0gY2FsY3VsYXRlX3Nucihub2lzZSwgYyk7CisJLyogcmVwb3J0IFNOUiBpbiBkQiAqIDEwICovCisJKnNuciA9IChzdGF0ZS0+c25yIC8gKCgxIDw8IDI0KSAvIDEwKSk7CisJbGdfZGJnKCJub2lzZSA9IDB4JTA4eCwgc25yID0gJWQuJTAyZCBkQlxuIiwgbm9pc2UsCisJICAgICAgIHN0YXRlLT5zbnIgPj4gMjQsICgoKHN0YXRlLT5zbnIgPj4gOCkgJiAweGZmZmYpICogMTAwKSA+PiAxNik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBsZ2R0MzMwNV9yZWFkX3NpZ25hbF9zdHJlbmd0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkJIHUxNiAqc3RyZW5ndGgpCit7CisJLyogYm9ycm93ZWQgZnJvbSBsZ2R0MzMweC5jCisJICoKKwkgKiBDYWxjdWxhdGUgc3RyZW5ndGggZnJvbSBTTlIgdXAgdG8gMzVkQgorCSAqIEV2ZW4gdGhvdWdoIHRoZSBTTlIgY2FuIGdvIGhpZ2hlciB0aGFuIDM1ZEIsCisJICogdGhlcmUgaXMgc29tZSBjb21mb3J0IGZhY3RvciBpbiBoYXZpbmcgYSByYW5nZSBvZgorCSAqIHN0cm9uZyBzaWduYWxzIHRoYXQgY2FuIHNob3cgYXQgMTAwJQorCSAqLworCXN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwl1MTYgc25yOworCWludCByZXQ7CisKKwkqc3RyZW5ndGggPSAwOworCisJcmV0ID0gZmUtPm9wcy5yZWFkX3NucihmZSwgJnNucik7CisJaWYgKGxnX2ZhaWwocmV0KSkKKwkJZ290byBmYWlsOworCS8qIFJhdGhlciB0aGFuIHVzZSB0aGUgOC44IHZhbHVlIHNuciwgdXNlIHN0YXRlLT5zbnIgd2hpY2ggaXMgOC4yNCAqLworCS8qIHNjYWxlIHRoZSByYW5nZSAwIC0gMzUqMl4yNCBpbnRvIDAgLSA2NTUzNSAqLworCWlmIChzdGF0ZS0+c25yID49IDg5NjAgKiAweDEwMDAwKQorCQkqc3RyZW5ndGggPSAweGZmZmY7CisJZWxzZQorCQkqc3RyZW5ndGggPSBzdGF0ZS0+c25yIC8gODk2MDsKK2ZhaWw6CisJcmV0dXJuIHJldDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgbGdkdDMzMDVfcmVhZF9iZXIoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqYmVyKQoreworCSpiZXIgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxnZHQzMzA1X3JlYWRfdWNibG9ja3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqdWNibG9ja3MpCit7CisJc3RydWN0IGxnZHQzMzA1X3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJKnVjYmxvY2tzID0KKwkJKHJlYWRfcmVnKHN0YXRlLCBMR0RUMzMwNV9GRUNfUEtUX0VSUl8xKSA8PCA4KSB8CisJCShyZWFkX3JlZyhzdGF0ZSwgTEdEVDMzMDVfRkVDX1BLVF9FUlJfMikgJiAweGZmKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGxnZHQzMzA1X2dldF90dW5lX3NldHRpbmdzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCSAgICAgIHN0cnVjdCBkdmJfZnJvbnRlbmRfdHVuZV9zZXR0aW5ncworCQkJCQkqZmVfdHVuZV9zZXR0aW5ncykKK3sKKwlmZV90dW5lX3NldHRpbmdzLT5taW5fZGVsYXlfbXMgPSA1MDA7CisJbGdfZGJnKCJcbiIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBsZ2R0MzMwNV9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBsZ2R0MzMwNV9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlsZ19kYmcoIlxuIik7CisJa2ZyZWUoc3RhdGUpOworfQorCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgbGdkdDMzMDVfb3BzOworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpsZ2R0MzMwNV9hdHRhY2goY29uc3Qgc3RydWN0IGxnZHQzMzA1X2NvbmZpZyAqY29uZmlnLAorCQkJCSAgICAgc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCkKK3sKKwlzdHJ1Y3QgbGdkdDMzMDVfc3RhdGUgKnN0YXRlID0gTlVMTDsKKwlpbnQgcmV0OworCXU4IHZhbDsKKworCWxnX2RiZygiKCVkLSUwNHgpXG4iLAorCSAgICAgICBpMmNfYWRhcCA/IGkyY19hZGFwdGVyX2lkKGkyY19hZGFwKSA6IDAsCisJICAgICAgIGNvbmZpZyA/IGNvbmZpZy0+aTJjX2FkZHIgOiAwKTsKKworCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGxnZHQzMzA1X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHN0YXRlID09IE5VTEwpCisJCWdvdG8gZmFpbDsKKworCXN0YXRlLT5jZmcgPSBjb25maWc7CisJc3RhdGUtPmkyY19hZGFwID0gaTJjX2FkYXA7CisKKwltZW1jcHkoJnN0YXRlLT5mcm9udGVuZC5vcHMsICZsZ2R0MzMwNV9vcHMsCisJICAgICAgIHNpemVvZihzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcykpOworCXN0YXRlLT5mcm9udGVuZC5kZW1vZHVsYXRvcl9wcml2ID0gc3RhdGU7CisKKwkvKiB2ZXJpZnkgdGhhdCB3ZSdyZSB0YWxraW5nIHRvIGEgbGcgZHQzMzA1ICovCisJcmV0ID0gbGdkdDMzMDVfcmVhZF9yZWcoc3RhdGUsIExHRFQzMzA1X0dFTl9DVFJMXzIsICZ2YWwpOworCWlmICgobGdfZmFpbChyZXQpKSB8ICh2YWwgPT0gMCkpCisJCWdvdG8gZmFpbDsKKwlyZXQgPSBsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIDB4MDgwOCwgMHg4MCk7CisJaWYgKGxnX2ZhaWwocmV0KSkKKwkJZ290byBmYWlsOworCXJldCA9IGxnZHQzMzA1X3JlYWRfcmVnKHN0YXRlLCAweDA4MDgsICZ2YWwpOworCWlmICgobGdfZmFpbChyZXQpKSB8ICh2YWwgIT0gMHg4MCkpCisJCWdvdG8gZmFpbDsKKwlyZXQgPSBsZ2R0MzMwNV93cml0ZV9yZWcoc3RhdGUsIDB4MDgwOCwgMHgwMCk7CisJaWYgKGxnX2ZhaWwocmV0KSkKKwkJZ290byBmYWlsOworCisJc3RhdGUtPmN1cnJlbnRfZnJlcXVlbmN5ID0gLTE7CisJc3RhdGUtPmN1cnJlbnRfbW9kdWxhdGlvbiA9IC0xOworCisJcmV0dXJuICZzdGF0ZS0+ZnJvbnRlbmQ7CitmYWlsOgorCWxnX3dhcm4oInVuYWJsZSB0byBkZXRlY3QgTEdEVDMzMDUgaGFyZHdhcmVcbiIpOworCWtmcmVlKHN0YXRlKTsKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0wobGdkdDMzMDVfYXR0YWNoKTsKKworc3RhdGljIHN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzIGxnZHQzMzA1X29wcyA9IHsKKwkuaW5mbyA9IHsKKwkJLm5hbWUgPSAiTEcgRWxlY3Ryb25pY3MgTEdEVDMzMDUgVlNCL1FBTSBGcm9udGVuZCIsCisJCS50eXBlICAgICAgICAgICAgICAgPSBGRV9BVFNDLAorCQkuZnJlcXVlbmN5X21pbiAgICAgID0gNTQwMDAwMDAsCisJCS5mcmVxdWVuY3lfbWF4ICAgICAgPSA4NTgwMDAwMDAsCisJCS5mcmVxdWVuY3lfc3RlcHNpemUgPSA2MjUwMCwKKwkJLmNhcHMgPSBGRV9DQU5fUUFNXzY0IHwgRkVfQ0FOX1FBTV8yNTYgfCBGRV9DQU5fOFZTQgorCX0sCisJLmkyY19nYXRlX2N0cmwgICAgICAgID0gbGdkdDMzMDVfaTJjX2dhdGVfY3RybCwKKwkuaW5pdCAgICAgICAgICAgICAgICAgPSBsZ2R0MzMwNV9pbml0LAorCS5zbGVlcCAgICAgICAgICAgICAgICA9IGxnZHQzMzA1X3NsZWVwLAorCS5zZXRfZnJvbnRlbmQgICAgICAgICA9IGxnZHQzMzA1X3NldF9wYXJhbWV0ZXJzLAorCS5nZXRfZnJvbnRlbmQgICAgICAgICA9IGxnZHQzMzA1X2dldF9mcm9udGVuZCwKKwkuZ2V0X3R1bmVfc2V0dGluZ3MgICAgPSBsZ2R0MzMwNV9nZXRfdHVuZV9zZXR0aW5ncywKKwkucmVhZF9zdGF0dXMgICAgICAgICAgPSBsZ2R0MzMwNV9yZWFkX3N0YXR1cywKKwkucmVhZF9iZXIgICAgICAgICAgICAgPSBsZ2R0MzMwNV9yZWFkX2JlciwKKwkucmVhZF9zaWduYWxfc3RyZW5ndGggPSBsZ2R0MzMwNV9yZWFkX3NpZ25hbF9zdHJlbmd0aCwKKwkucmVhZF9zbnIgICAgICAgICAgICAgPSBsZ2R0MzMwNV9yZWFkX3NuciwKKwkucmVhZF91Y2Jsb2NrcyAgICAgICAgPSBsZ2R0MzMwNV9yZWFkX3VjYmxvY2tzLAorCS5yZWxlYXNlICAgICAgICAgICAgICA9IGxnZHQzMzA1X3JlbGVhc2UsCit9OworCitNT0RVTEVfREVTQ1JJUFRJT04oIkxHIEVsZWN0cm9uaWNzIExHRFQzMzA1IEFUU0MvUUFNLUIgRGVtb2R1bGF0b3IgRHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEtydWZreSA8bWtydWZreUBsaW51eHR2Lm9yZz4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9WRVJTSU9OKCIwLjEiKTsKKworLyoKKyAqIExvY2FsIHZhcmlhYmxlczoKKyAqIGMtYmFzaWMtb2Zmc2V0OiA4CisgKiBFbmQ6CisgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMwNS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xnZHQzMzA1LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGZhNmU1MgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sZ2R0MzMwNS5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiAgICBTdXBwb3J0IGZvciBMR0RUMzMwNSAtIFZTQi9RQU0KKyAqCisgKiAgICBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgTWljaGFlbCBLcnVma3kgPG1rcnVma3lAbGludXh0di5vcmc+CisgKgorICogICAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogICAgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICAgIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKiAgICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiAgICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogICAgRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKgorICovCisKKyNpZm5kZWYgX0xHRFQzMzA1X0hfCisjZGVmaW5lIF9MR0RUMzMwNV9IXworCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCisKKworZW51bSBsZ2R0MzMwNV9tcGVnX21vZGUgeworCUxHRFQzMzA1X01QRUdfUEFSQUxMRUwgPSAwLAorCUxHRFQzMzA1X01QRUdfU0VSSUFMID0gMSwKK307CisKK2VudW0gbGdkdDMzMDVfdHBfY2xvY2tfZWRnZSB7CisJTEdEVDMzMDVfVFBDTEtfUklTSU5HX0VER0UgPSAwLAorCUxHRFQzMzA1X1RQQ0xLX0ZBTExJTkdfRURHRSA9IDEsCit9OworCitlbnVtIGxnZHQzMzA1X3RwX3ZhbGlkX3BvbGFyaXR5IHsKKwlMR0RUMzMwNV9UUF9WQUxJRF9MT1cgPSAwLAorCUxHRFQzMzA1X1RQX1ZBTElEX0hJR0ggPSAxLAorfTsKKworc3RydWN0IGxnZHQzMzA1X2NvbmZpZyB7CisJdTggaTJjX2FkZHI7CisKKwkvKiB1c2VyIGRlZmluZWQgSUYgZnJlcXVlbmN5IGluIEtIeiAqLworCXUxNiBxYW1faWZfa2h6OworCXUxNiB2c2JfaWZfa2h6OworCisJLyogQUdDIFBvd2VyIHJlZmVyZW5jZSAtIGRlZmF1bHRzIGFyZSB1c2VkIGlmIGxlZnQgdW5zZXQgKi8KKwl1MTYgdXNyZWZfOHZzYjsgICAvKiBkZWZhdWx0OiAweDMyYzQgKi8KKwl1MTYgdXNyZWZfcWFtNjQ7ICAvKiBkZWZhdWx0OiAweDU0MDAgKi8KKwl1MTYgdXNyZWZfcWFtMjU2OyAvKiBkZWZhdWx0OiAweDJhODAgKi8KKworCS8qIGRpc2FibGUgaTJjIHJlcGVhdGVyIC0gMDpyZXBlYXRlciBlbmFibGVkIDE6cmVwZWF0ZXIgZGlzYWJsZWQgKi8KKwlpbnQgZGVueV9pMmNfcnB0cjoxOworCisJLyogc3BlY3RyYWwgaW52ZXJzaW9uIC0gMDpkaXNhYmxlZCAxOmVuYWJsZWQgKi8KKwlpbnQgc3BlY3RyYWxfaW52ZXJzaW9uOjE7CisKKwkvKiB1c2UgUkYgQUdDIGxvb3AgLSAwOmRpc2FibGVkIDE6ZW5hYmxlZCAqLworCWludCByZl9hZ2NfbG9vcDoxOworCisJZW51bSBsZ2R0MzMwNV9tcGVnX21vZGUgbXBlZ19tb2RlOworCWVudW0gbGdkdDMzMDVfdHBfY2xvY2tfZWRnZSB0cGNsa19lZGdlOworCWVudW0gbGdkdDMzMDVfdHBfdmFsaWRfcG9sYXJpdHkgdHB2YWxpZF9wb2xhcml0eTsKK307CisKKyNpZiBkZWZpbmVkKENPTkZJR19EVkJfTEdEVDMzMDUpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfTEdEVDMzMDVfTU9EVUxFKSAmJiBcCisJCQkJICAgICBkZWZpbmVkKE1PRFVMRSkpCitleHRlcm4KK3N0cnVjdCBkdmJfZnJvbnRlbmQgKmxnZHQzMzA1X2F0dGFjaChjb25zdCBzdHJ1Y3QgbGdkdDMzMDVfY29uZmlnICpjb25maWcsCisJCQkJICAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpsZ2R0MzMwNV9hdHRhY2goY29uc3Qgc3RydWN0IGxnZHQzMzA1X2NvbmZpZyAqY29uZmlnLAorCQkJCSAgICAgc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCkKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZiAvKiBDT05GSUdfRFZCX0xHRFQzMzA1ICovCisKKyNlbmRpZiAvKiBfTEdEVDMzMDVfSF8gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJoMjQuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJoMjQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMDU5YjE2Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYmgyNC5oCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBsbmJoMjQuaCAtIGRyaXZlciBmb3IgbG5iIHN1cHBseSBhbmQgY29udHJvbCBpYyBsbmJoMjQKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmV0VVAgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IElnb3IgTS4gTGlwbGlhbmluIDxsaXBsaWFuaW5AbmV0dXAucnU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX0xOQkgyNF9ICisjZGVmaW5lIF9MTkJIMjRfSAorCisvKiBzeXN0ZW0gcmVnaXN0ZXIgYml0cyAqLworI2RlZmluZSBMTkJIMjRfT0xGCTB4MDEKKyNkZWZpbmUgTE5CSDI0X09URgkweDAyCisjZGVmaW5lIExOQkgyNF9FTgkweDA0CisjZGVmaW5lIExOQkgyNF9WU0VMCTB4MDgKKyNkZWZpbmUgTE5CSDI0X0xMQwkweDEwCisjZGVmaW5lIExOQkgyNF9URU4JMHgyMAorI2RlZmluZSBMTkJIMjRfVFRYCTB4NDAKKyNkZWZpbmUgTE5CSDI0X1BDTAkweDgwCisKKyNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KKworI2lmIGRlZmluZWQoQ09ORklHX0RWQl9MTkJQMjEpIHx8IChkZWZpbmVkKENPTkZJR19EVkJfTE5CUDIxX01PRFVMRSkgXAorCQkJCQkJCSYmIGRlZmluZWQoTU9EVUxFKSkKKy8qIG92ZXJyaWRlX3NldCBhbmQgb3ZlcnJpZGVfY2xlYXIgY29udHJvbCB3aGljaAorICAgc3lzdGVtIHJlZ2lzdGVyIGJpdHMgKGFib3ZlKSB0byBhbHdheXMgc2V0ICYgY2xlYXIgKi8KK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpsbmJoMjRfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1OCBvdmVycmlkZV9zZXQsCisJCQkJdTggb3ZlcnJpZGVfY2xlYXIsIHU4IGkyY19hZGRyKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmxuYmgyNF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHU4IG92ZXJyaWRlX3NldCwKKwkJCQl1OCBvdmVycmlkZV9jbGVhciwgdTggaTJjX2FkZHIpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbG5icDIxLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbG5icDIxLmMKaW5kZXggNzZmOTM1ZC4uMWRjYzU2ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYnAyMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJwMjEuYwpAQCAtMSw3ICsxLDggQEAKIC8qCi0gKiBsbmJwMjEuaCAtIGRyaXZlciBmb3IgbG5iIHN1cHBseSBhbmQgY29udHJvbCBpYyBsbmJwMjEKKyAqIGxuYnAyMS5jIC0gZHJpdmVyIGZvciBsbmIgc3VwcGx5IGFuZCBjb250cm9sIGljIGxuYnAyMQogICoKICAqIENvcHlyaWdodCAoQykgMjAwNiBPbGl2ZXIgRW5kcmlzcworICogQ29weXJpZ2h0IChDKSAyMDA5IElnb3IgTS4gTGlwbGlhbmluIDxsaXBsaWFuaW5AbmV0dXAucnU+CiAgKgogICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgogICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKQEAgLTMzLDE4ICszNCwyMSBAQAogCiAjaW5jbHVkZSAiZHZiX2Zyb250ZW5kLmgiCiAjaW5jbHVkZSAibG5icDIxLmgiCisjaW5jbHVkZSAibG5iaDI0LmgiCiAKIHN0cnVjdCBsbmJwMjEgewogCXU4CQkJY29uZmlnOwogCXU4CQkJb3ZlcnJpZGVfb3I7CiAJdTgJCQlvdmVycmlkZV9hbmQ7CiAJc3RydWN0IGkyY19hZGFwdGVyCSppMmM7CisJdTgJCQlpMmNfYWRkcjsKIH07CiAKLXN0YXRpYyBpbnQgbG5icDIxX3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCitzdGF0aWMgaW50IGxuYnAyMV9zZXRfdm9sdGFnZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkJZmVfc2VjX3ZvbHRhZ2VfdCB2b2x0YWdlKQogewogCXN0cnVjdCBsbmJwMjEgKmxuYnAyMSA9IChzdHJ1Y3QgbG5icDIxICopIGZlLT5zZWNfcHJpdjsKLQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CS5hZGRyID0gMHgwOCwgLmZsYWdzID0gMCwKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CS5hZGRyID0gbG5icDIxLT5pMmNfYWRkciwgLmZsYWdzID0gMCwKIAkJCQkuYnVmID0gJmxuYnAyMS0+Y29uZmlnLAogCQkJCS5sZW4gPSBzaXplb2YobG5icDIxLT5jb25maWcpIH07CiAKQEAgLTcyLDcgKzc2LDcgQEAKIHN0YXRpYyBpbnQgbG5icDIxX2VuYWJsZV9oaWdoX2xuYl92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBsb25nIGFyZykKIHsKIAlzdHJ1Y3QgbG5icDIxICpsbmJwMjEgPSAoc3RydWN0IGxuYnAyMSAqKSBmZS0+c2VjX3ByaXY7Ci0Jc3RydWN0IGkyY19tc2cgbXNnID0gewkuYWRkciA9IDB4MDgsIC5mbGFncyA9IDAsCisJc3RydWN0IGkyY19tc2cgbXNnID0gewkuYWRkciA9IGxuYnAyMS0+aTJjX2FkZHIsIC5mbGFncyA9IDAsCiAJCQkJLmJ1ZiA9ICZsbmJwMjEtPmNvbmZpZywKIAkJCQkubGVuID0gc2l6ZW9mKGxuYnAyMS0+Y29uZmlnKSB9OwogCkBAIC05NywxNSArMTAxLDE4IEBACiAJZmUtPnNlY19wcml2ID0gTlVMTDsKIH0KIAotc3RydWN0IGR2Yl9mcm9udGVuZCAqbG5icDIxX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHU4IG92ZXJyaWRlX3NldCwgdTggb3ZlcnJpZGVfY2xlYXIpCitzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZCAqbG5ieDJ4X2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgdTggb3ZlcnJpZGVfc2V0LAorCQkJCXU4IG92ZXJyaWRlX2NsZWFyLCB1OCBpMmNfYWRkciwgdTggY29uZmlnKQogewogCXN0cnVjdCBsbmJwMjEgKmxuYnAyMSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBsbmJwMjEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWxuYnAyMSkKIAkJcmV0dXJuIE5VTEw7CiAKIAkvKiBkZWZhdWx0IGNvbmZpZ3VyYXRpb24gKi8KLQlsbmJwMjEtPmNvbmZpZyA9IExOQlAyMV9JU0VMOworCWxuYnAyMS0+Y29uZmlnID0gY29uZmlnOwogCWxuYnAyMS0+aTJjID0gaTJjOworCWxuYnAyMS0+aTJjX2FkZHIgPSBpMmNfYWRkcjsKIAlmZS0+c2VjX3ByaXYgPSBsbmJwMjE7CiAKIAkvKiBiaXRzIHdoaWNoIHNob3VsZCBiZSBmb3JjZWQgdG8gJzEnICovCkBAIC0xMjYsMTEgKzEzMywyOSBAQAogCS8qIG92ZXJyaWRlIGZyb250ZW5kIG9wcyAqLwogCWZlLT5vcHMuc2V0X3ZvbHRhZ2UgPSBsbmJwMjFfc2V0X3ZvbHRhZ2U7CiAJZmUtPm9wcy5lbmFibGVfaGlnaF9sbmJfdm9sdGFnZSA9IGxuYnAyMV9lbmFibGVfaGlnaF9sbmJfdm9sdGFnZTsKKwlwcmludGsoS0VSTl9JTkZPICJMTkJ4MnggYXR0YWNoZWQgb24gYWRkcj0leCIsIGxuYnAyMS0+aTJjX2FkZHIpOwogCiAJcmV0dXJuIGZlOwogfQorCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpsbmJoMjRfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1OCBvdmVycmlkZV9zZXQsCisJCQkJdTggb3ZlcnJpZGVfY2xlYXIsIHU4IGkyY19hZGRyKQoreworCXJldHVybiBsbmJ4MnhfYXR0YWNoKGZlLCBpMmMsIG92ZXJyaWRlX3NldCwgb3ZlcnJpZGVfY2xlYXIsCisJCQkJCQkJaTJjX2FkZHIsIExOQkgyNF9UVFgpOworfQorRVhQT1JUX1NZTUJPTChsbmJoMjRfYXR0YWNoKTsKKworc3RydWN0IGR2Yl9mcm9udGVuZCAqbG5icDIxX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgdTggb3ZlcnJpZGVfc2V0LAorCQkJCXU4IG92ZXJyaWRlX2NsZWFyKQoreworCXJldHVybiBsbmJ4MnhfYXR0YWNoKGZlLCBpMmMsIG92ZXJyaWRlX3NldCwgb3ZlcnJpZGVfY2xlYXIsCisJCQkJCQkJMHgwOCwgTE5CUDIxX0lTRUwpOworfQogRVhQT1JUX1NZTUJPTChsbmJwMjFfYXR0YWNoKTsKIAotTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIGxuYiBzdXBwbHkgYW5kIGNvbnRyb2wgaWMgbG5icDIxIik7Ci1NT0RVTEVfQVVUSE9SKCJPbGl2ZXIgRW5kcmlzcyIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIGxuYiBzdXBwbHkgYW5kIGNvbnRyb2wgaWMgbG5icDIxLCBsbmJoMjQiKTsKK01PRFVMRV9BVVRIT1IoIk9saXZlciBFbmRyaXNzLCBJZ29yIE0uIExpcGxpYW5pbiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYnAyMS5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL2xuYnAyMS5oCmluZGV4IDhmZTA5NGIuLmZjZGYxYzYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9sbmJwMjEuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvbG5icDIxLmgKQEAgLTI4LDI2ICsyOCw0OCBAQAogI2RlZmluZSBfTE5CUDIxX0gKIAogLyogc3lzdGVtIHJlZ2lzdGVyIGJpdHMgKi8KKy8qIFtST10gMD1PSzsgMT1vdmVyIGN1cnJlbnQgbGltaXQgZmxhZyAqLwogI2RlZmluZSBMTkJQMjFfT0xGCTB4MDEKKy8qIFtST10gMD1PSzsgMT1vdmVyIHRlbXBlcmF0dXJlIGZsYWcgKDE1MCBDKSAqLwogI2RlZmluZSBMTkJQMjFfT1RGCTB4MDIKKy8qIFtSV10gMD1kaXNhYmxlIExOQiBwb3dlciwgZW5hYmxlIGxvb3B0aHJvdWdoCisJMT1lbmFibGUgTE5CIHBvd2VyLCBkaXNhYmxlIGxvb3B0aHJvdWdoICovCiAjZGVmaW5lIExOQlAyMV9FTgkweDA0CisvKiBbUlddIDA9bG93IHZvbHRhZ2UgKDEzLzE0ViwgdmVydCBwb2wpCisJMT1oaWdoIHZvbHRhZ2UgKDE4LzE5Vixob3JpeiBwb2wpICovCiAjZGVmaW5lIExOQlAyMV9WU0VMCTB4MDgKKy8qIFtSV10gaW5jcmVhc2UgTE5CIHZvbHRhZ2UgYnkgMVY6CisJMD0xMy8xOFY7IDE9MTQvMTlWICovCiAjZGVmaW5lIExOQlAyMV9MTEMJMHgxMAorLyogW1JXXSAwPXRvbmUgY29udHJvbGxlZCBieSBEU1FJTiBwaW4KKwkxPXRvbmUgZW5hYmxlLCBkaXNhYmxlIERTUUlOICovCiAjZGVmaW5lIExOQlAyMV9URU4JMHgyMAorLyogW1JXXSBjdXJyZW50IGxpbWl0IHNlbGVjdDoKKwkwOklvdXQ9NTAwLTY1MG1BIElzYz0zMDBtQQorCTE6SW91dD00MDAtNTUwbUEgSXNjPTIwMG1BICovCiAjZGVmaW5lIExOQlAyMV9JU0VMCTB4NDAKKy8qIFtSV10gc2hvcnQtY2lyY3VpdCBwcm90ZWN0OgorCTA9cHVsc2VkIChkeW5hbWljKSBjdXJyIGxpbWl0aW5nCisJMT1zdGF0aWMgY3VyciBsaW1pdGluZyAqLwogI2RlZmluZSBMTkJQMjFfUENMCTB4ODAKIAogI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgogCi0jaWYgZGVmaW5lZChDT05GSUdfRFZCX0xOQlAyMSkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9MTkJQMjFfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCi0vKiBvdmVycmlkZV9zZXQgYW5kIG92ZXJyaWRlX2NsZWFyIGNvbnRyb2wgd2hpY2ggc3lzdGVtIHJlZ2lzdGVyIGJpdHMgKGFib3ZlKSB0byBhbHdheXMgc2V0ICYgY2xlYXIgKi8KLWV4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpsbmJwMjFfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgdTggb3ZlcnJpZGVfc2V0LCB1OCBvdmVycmlkZV9jbGVhcik7CisjaWYgZGVmaW5lZChDT05GSUdfRFZCX0xOQlAyMSkgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9MTkJQMjFfTU9EVUxFKSBcCisJCQkJCQkJJiYgZGVmaW5lZChNT0RVTEUpKQorLyogb3ZlcnJpZGVfc2V0IGFuZCBvdmVycmlkZV9jbGVhciBjb250cm9sIHdoaWNoCisgc3lzdGVtIHJlZ2lzdGVyIGJpdHMgKGFib3ZlKSB0byBhbHdheXMgc2V0ICYgY2xlYXIgKi8KK2V4dGVybiBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpsbmJwMjFfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCB1OCBvdmVycmlkZV9zZXQsCisJCQkJdTggb3ZlcnJpZGVfY2xlYXIpOwogI2Vsc2UKLXN0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqbG5icDIxX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHU4IG92ZXJyaWRlX3NldCwgdTggb3ZlcnJpZGVfY2xlYXIpCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKmxuYnAyMV9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJc3RydWN0IGkyY19hZGFwdGVyICppMmMsIHU4IG92ZXJyaWRlX3NldCwKKwkJCQl1OCBvdmVycmlkZV9jbGVhcikKIHsKIAlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKIAlyZXR1cm4gTlVMTDsKIH0KLSNlbmRpZiAvLyBDT05GSUdfRFZCX0xOQlAyMQorI2VuZGlmCiAKLSNlbmRpZiAvLyBfTE5CUDIxX0gKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3M5MjFfbW9kdWxlLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczkyMV9tb2R1bGUuYwppbmRleCA4OTJhZjhjLi4zZjVhMGUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczkyMV9tb2R1bGUuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvczkyMV9tb2R1bGUuYwpAQCAtMTY5LDcgKzE2OSw2IEBACiAKIAlzdHJ1Y3QgczkyMV9zdGF0ZSAqc3RhdGU7CiAJc3RhdGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgczkyMV9zdGF0ZSksIEdGUF9LRVJORUwpOwotCW1lbXNldChzdGF0ZSwgMHgwLCBzaXplb2Yoc3RydWN0IHM5MjFfc3RhdGUpKTsKIAogCXN0YXRlLT5hZGRyID0gY29uZmlnLT5pMmNfYWRkcmVzczsKIAlzdGF0ZS0+aTJjID0gaTJjOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0YjYxMDBfY2ZnLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiNjEwMF9jZmcuaAppbmRleCBkMzEzMzQwLi42MzE0ZDE4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiNjEwMF9jZmcuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3RiNjEwMF9jZmcuaApAQCAtMzYsNyArMzYsNiBAQAogCQkJcmV0dXJuIGVycjsKIAkJfQogCQkqZnJlcXVlbmN5ID0gdF9zdGF0ZS5mcmVxdWVuY3k7Ci0JCXByaW50aygiJXM6IEZyZXF1ZW5jeT0lZFxuIiwgX19mdW5jX18sIHRfc3RhdGUuZnJlcXVlbmN5KTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC01OSw3ICs1OCw2IEBACiAJCQlyZXR1cm4gZXJyOwogCQl9CiAJfQotCXByaW50aygiJXM6IEZyZXF1ZW5jeT0lZFxuIiwgX19mdW5jX18sIHRfc3RhdGUuZnJlcXVlbmN5KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtODEsNyArNzksNiBAQAogCQl9CiAJCSpiYW5kd2lkdGggPSB0X3N0YXRlLmJhbmR3aWR0aDsKIAl9Ci0JcHJpbnRrKCIlczogQmFuZHdpZHRoPSVkXG4iLCBfX2Z1bmNfXywgdF9zdGF0ZS5iYW5kd2lkdGgpOwogCXJldHVybiAwOwogfQogCkBAIC0xMDMsNiArMTAwLDUgQEAKIAkJCXJldHVybiBlcnI7CiAJCX0KIAl9Ci0JcHJpbnRrKCIlczogQmFuZHdpZHRoPSVkXG4iLCBfX2Z1bmNfXywgdF9zdGF0ZS5iYW5kd2lkdGgpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDAuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uOGExMzMyYwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwLmgKQEAgLTAsMCArMSw2MiBAQAorLyoKKyAqIHN0djA5MDAuaAorICoKKyAqIERyaXZlciBmb3IgU1QgU1RWMDkwMCBzYXRlbGxpdGUgZGVtb2R1bGF0b3IgSUMuCisgKgorICogQ29weXJpZ2h0IChDKSBTVCBNaWNyb2VsZWN0cm9uaWNzLgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5ldFVQIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBJZ29yIE0uIExpcGxpYW5pbiA8bGlwbGlhbmluQG5ldHVwLnJ1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIFNUVjA5MDBfSAorI2RlZmluZSBTVFYwOTAwX0gKKworI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgorI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorCitzdHJ1Y3Qgc3R2MDkwMF9jb25maWcgeworCXU4IGRlbW9kX2FkZHJlc3M7CisJdTMyIHh0YWw7CisJdTggY2xrbW9kZTsvKiAwIGZvciBDTEtJLCAgMiBmb3IgWFRBTEkgKi8KKworCXU4IGRpc2VxY19tb2RlOworCisJdTggcGF0aDFfbW9kZTsKKwl1OCBwYXRoMl9tb2RlOworCisJdTggdHVuMV9tYWRkcmVzczsvKiAwLCAxLCAyLCAzIGZvciAweGMwLCAweGMyLCAweGM0LCAweGM2ICovCisJdTggdHVuMl9tYWRkcmVzczsKKwl1OCB0dW4xX2FkYzsvKiAxIGZvciBzdHY2MTEwLCAyIGZvciBzdGI2MTAwICovCisJdTggdHVuMl9hZGM7Cit9OworCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX1NUVjA5MDApIHx8IChkZWZpbmVkKENPTkZJR19EVkJfU1RWMDkwMF9NT0RVTEUpIFwKKwkJCQkJCQkmJiBkZWZpbmVkKE1PRFVMRSkpCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqc3R2MDkwMF9hdHRhY2goY29uc3Qgc3RydWN0IHN0djA5MDBfY29uZmlnICpjb25maWcsCisJCQkJCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBpbnQgZGVtb2QpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGR2Yl9mcm9udGVuZCAqc3R2MDkwMF9hdHRhY2goY29uc3Qgc3RydWN0IHN0djA5MDBfY29uZmlnICpjb25maWcsCisJCQkJCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjLCBpbnQgZGVtb2QpCit7CisJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IGRyaXZlciBkaXNhYmxlZCBieSBLY29uZmlnXG4iLCBfX2Z1bmNfXyk7CisJcmV0dXJuIE5VTEw7Cit9CisjZW5kaWYKKworI2VuZGlmCisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX2NvcmUuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44NDk5YmNmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfY29yZS5jCkBAIC0wLDAgKzEsMTk0OSBAQAorLyoKKyAqIHN0djA5MDBfY29yZS5jCisgKgorICogRHJpdmVyIGZvciBTVCBTVFYwOTAwIHNhdGVsbGl0ZSBkZW1vZHVsYXRvciBJQy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIFNUIE1pY3JvZWxlY3Ryb25pY3MuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmV0VVAgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IElnb3IgTS4gTGlwbGlhbmluIDxsaXBsaWFuaW5AbmV0dXAucnU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisKKyNpbmNsdWRlICJzdHYwOTAwLmgiCisjaW5jbHVkZSAic3R2MDkwMF9yZWcuaCIKKyNpbmNsdWRlICJzdHYwOTAwX3ByaXYuaCIKKyNpbmNsdWRlICJzdHYwOTAwX2luaXQuaCIKKworc3RhdGljIGludCBzdHZkZWJ1ZyA9IDE7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIHN0dmRlYnVnLCBpbnQsIDA2NDQpOworCisvKiBpbnRlcm5hbCBwYXJhbXMgbm9kZSAqLworc3RydWN0IHN0djA5MDBfaW5vZGUgeworCS8qIHBvaW50ZXIgZm9yIGludGVybmFsIHBhcmFtcywgb25lIGZvciBlYWNoIHBhaXIgb2YgZGVtb2RzICovCisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwJCSppbnRlcm5hbDsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbm9kZQkJKm5leHRfaW5vZGU7Cit9OworCisvKiBmaXJzdCBpbnRlcm5hbCBwYXJhbXMgKi8KK3N0YXRpYyBzdHJ1Y3Qgc3R2MDkwMF9pbm9kZSAqc3R2MDkwMF9maXJzdF9pbm9kZTsKKworLyogZmluZCBjaGlwIGJ5IGkyYyBhZGFwdGVyIGFuZCBpMmMgYWRkcmVzcyAqLworc3RhdGljIHN0cnVjdCBzdHYwOTAwX2lub2RlICpmaW5kX2lub2RlKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCisJCQkJCQkJdTggaTJjX2FkZHIpCit7CisJc3RydWN0IHN0djA5MDBfaW5vZGUgKnRlbXBfY2hpcCA9IHN0djA5MDBfZmlyc3RfaW5vZGU7CisKKwlpZiAodGVtcF9jaGlwICE9IE5VTEwpIHsKKwkJLyoKKwkJIFNlYXJjaCBvZiB0aGUgbGFzdCBzdHYwOTAwIGNoaXAgb3IKKwkJIGZpbmQgaXQgYnkgaTJjIGFkYXB0ZXIgYW5kIGkyYyBhZGRyZXNzICovCisJCXdoaWxlICgodGVtcF9jaGlwICE9IE5VTEwpICYmCisJCQkoKHRlbXBfY2hpcC0+aW50ZXJuYWwtPmkyY19hZGFwICE9IGkyY19hZGFwKSB8fAorCQkJKHRlbXBfY2hpcC0+aW50ZXJuYWwtPmkyY19hZGRyICE9IGkyY19hZGRyKSkpCisKKwkJCXRlbXBfY2hpcCA9IHRlbXBfY2hpcC0+bmV4dF9pbm9kZTsKKworCX0KKworCXJldHVybiB0ZW1wX2NoaXA7Cit9CisKKy8qIGRlYWxsb2NhdGluZyBjaGlwICovCitzdGF0aWMgdm9pZCByZW1vdmVfaW5vZGUoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludGVybmFsKQoreworCXN0cnVjdCBzdHYwOTAwX2lub2RlICpwcmV2X25vZGUgPSBzdHYwOTAwX2ZpcnN0X2lub2RlOworCXN0cnVjdCBzdHYwOTAwX2lub2RlICpkZWxfbm9kZSA9IGZpbmRfaW5vZGUoaW50ZXJuYWwtPmkyY19hZGFwLAorCQkJCQkJaW50ZXJuYWwtPmkyY19hZGRyKTsKKworCWlmIChkZWxfbm9kZSAhPSBOVUxMKSB7CisJCWlmIChkZWxfbm9kZSA9PSBzdHYwOTAwX2ZpcnN0X2lub2RlKSB7CisJCQlzdHYwOTAwX2ZpcnN0X2lub2RlID0gZGVsX25vZGUtPm5leHRfaW5vZGU7CisJCX0gZWxzZSB7CisJCQl3aGlsZSAocHJldl9ub2RlLT5uZXh0X2lub2RlICE9IGRlbF9ub2RlKQorCQkJCXByZXZfbm9kZSA9IHByZXZfbm9kZS0+bmV4dF9pbm9kZTsKKworCQkJaWYgKGRlbF9ub2RlLT5uZXh0X2lub2RlID09IE5VTEwpCisJCQkJcHJldl9ub2RlLT5uZXh0X2lub2RlID0gTlVMTDsKKwkJCWVsc2UKKwkJCQlwcmV2X25vZGUtPm5leHRfaW5vZGUgPQorCQkJCQlwcmV2X25vZGUtPm5leHRfaW5vZGUtPm5leHRfaW5vZGU7CisJCX0KKworCQlrZnJlZShkZWxfbm9kZSk7CisJfQorfQorCisvKiBhbGxvY2F0aW5nIG5ldyBjaGlwICovCitzdGF0aWMgc3RydWN0IHN0djA5MDBfaW5vZGUgKmFwcGVuZF9pbnRlcm5hbChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaW50ZXJuYWwpCit7CisJc3RydWN0IHN0djA5MDBfaW5vZGUgKm5ld19ub2RlID0gc3R2MDkwMF9maXJzdF9pbm9kZTsKKworCWlmIChuZXdfbm9kZSA9PSBOVUxMKSB7CisJCW5ld19ub2RlID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHN0djA5MDBfaW5vZGUpLCBHRlBfS0VSTkVMKTsKKwkJc3R2MDkwMF9maXJzdF9pbm9kZSA9IG5ld19ub2RlOworCX0gZWxzZSB7CisJCXdoaWxlIChuZXdfbm9kZS0+bmV4dF9pbm9kZSAhPSBOVUxMKQorCQkJbmV3X25vZGUgPSBuZXdfbm9kZS0+bmV4dF9pbm9kZTsKKworCQluZXdfbm9kZS0+bmV4dF9pbm9kZSA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdHYwOTAwX2lub2RlKSwgR0ZQX0tFUk5FTCk7CisJCWlmIChuZXdfbm9kZS0+bmV4dF9pbm9kZSAhPSBOVUxMKQorCQkJbmV3X25vZGUgPSBuZXdfbm9kZS0+bmV4dF9pbm9kZTsKKwkJZWxzZQorCQkJbmV3X25vZGUgPSBOVUxMOworCX0KKworCWlmIChuZXdfbm9kZSAhPSBOVUxMKSB7CisJCW5ld19ub2RlLT5pbnRlcm5hbCA9IGludGVybmFsOworCQluZXdfbm9kZS0+bmV4dF9pbm9kZSA9IE5VTEw7CisJfQorCisJcmV0dXJuIG5ld19ub2RlOworfQorCitzMzIgZ2UyY29tcChzMzIgYSwgczMyIHdpZHRoKQoreworCWlmICh3aWR0aCA9PSAzMikKKwkJcmV0dXJuIGE7CisJZWxzZQorCQlyZXR1cm4gKGEgPj0gKDEgPDwgKHdpZHRoIC0gMSkpKSA/IChhIC0gKDEgPDwgd2lkdGgpKSA6IGE7Cit9CisKK3ZvaWQgc3R2MDkwMF93cml0ZV9yZWcoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLCB1MTYgcmVnX2FkZHIsCisJCQkJCQkJCXU4IHJlZ19kYXRhKQoreworCXU4IGRhdGFbM107CisJaW50IHJldDsKKwlzdHJ1Y3QgaTJjX21zZyBpMmNtc2cgPSB7CisJCS5hZGRyICA9IGlfcGFyYW1zLT5pMmNfYWRkciwKKwkJLmZsYWdzID0gMCwKKwkJLmxlbiAgID0gMywKKwkJLmJ1ZiAgID0gZGF0YSwKKwl9OworCisJZGF0YVswXSA9IE1TQihyZWdfYWRkcik7CisJZGF0YVsxXSA9IExTQihyZWdfYWRkcik7CisJZGF0YVsyXSA9IHJlZ19kYXRhOworCisJcmV0ID0gaTJjX3RyYW5zZmVyKGlfcGFyYW1zLT5pMmNfYWRhcCwgJmkyY21zZywgMSk7CisJaWYgKHJldCAhPSAxKQorCQlkcHJpbnRrKEtFUk5fRVJSICIlczogaTJjIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKK30KKwordTggc3R2MDkwMF9yZWFkX3JlZyhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsIHUxNiByZWdfYWRkcikKK3sKKwl1OCBkYXRhWzJdOworCWludCByZXQ7CisJc3RydWN0IGkyY19tc2cgaTJjbXNnID0geworCQkuYWRkciAgPSBpX3BhcmFtcy0+aTJjX2FkZHIsCisJCS5mbGFncyA9IDAsCisJCS5sZW4gICA9IDIsCisJCS5idWYgICA9IGRhdGEsCisJfTsKKworCWRhdGFbMF0gPSBNU0IocmVnX2FkZHIpOworCWRhdGFbMV0gPSBMU0IocmVnX2FkZHIpOworCisJcmV0ID0gaTJjX3RyYW5zZmVyKGlfcGFyYW1zLT5pMmNfYWRhcCwgJmkyY21zZywgMSk7CisJaWYgKHJldCAhPSAxKQorCQlkcHJpbnRrKEtFUk5fRVJSICIlczogaTJjIGVycm9yICVkXG4iLCBfX2Z1bmNfXywgcmV0KTsKKworCWkyY21zZy5mbGFncyA9IEkyQ19NX1JEOworCWkyY21zZy5sZW4gPSAxOworCXJldCA9IGkyY190cmFuc2ZlcihpX3BhcmFtcy0+aTJjX2FkYXAsICZpMmNtc2csIDEpOworCWlmIChyZXQgIT0gMSkKKwkJZHByaW50ayhLRVJOX0VSUiAiJXM6IGkyYyBlcnJvciAlZFxuIiwgX19mdW5jX18sIHJldCk7CisKKwlyZXR1cm4gZGF0YVswXTsKK30KKwordm9pZCBleHRyYWN0X21hc2tfcG9zKHUzMiBsYWJlbCwgdTggKm1hc2ssIHU4ICpwb3MpCit7CisJdTggcG9zaXRpb24gPSAwLCBpID0gMDsKKworCSgqbWFzaykgPSBsYWJlbCAmIDB4ZmY7CisKKwl3aGlsZSAoKHBvc2l0aW9uID09IDApICYmIChpIDwgOCkpIHsKKwkJcG9zaXRpb24gPSAoKCptYXNrKSA+PiBpKSAmIDB4MDE7CisJCWkrKzsKKwl9CisKKwkoKnBvcykgPSAoaSAtIDEpOworfQorCit2b2lkIHN0djA5MDBfd3JpdGVfYml0cyhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsIHUzMiBsYWJlbCwgdTggdmFsKQoreworCXU4IHJlZywgbWFzaywgcG9zOworCisJcmVnID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgKGxhYmVsID4+IDE2KSAmIDB4ZmZmZik7CisJZXh0cmFjdF9tYXNrX3BvcyhsYWJlbCwgJm1hc2ssICZwb3MpOworCisJdmFsID0gbWFzayAmICh2YWwgPDwgcG9zKTsKKworCXJlZyA9IChyZWcgJiAofm1hc2spKSB8IHZhbDsKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgKGxhYmVsID4+IDE2KSAmIDB4ZmZmZiwgcmVnKTsKKworfQorCit1OCBzdHYwOTAwX2dldF9iaXRzKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywgdTMyIGxhYmVsKQoreworCXU4IHZhbCA9IDB4ZmY7CisJdTggbWFzaywgcG9zOworCisJZXh0cmFjdF9tYXNrX3BvcyhsYWJlbCwgJm1hc2ssICZwb3MpOworCisJdmFsID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgbGFiZWwgPj4gMTYpOworCXZhbCA9ICh2YWwgJiBtYXNrKSA+PiBwb3M7CisKKwlyZXR1cm4gdmFsOworfQorCitlbnVtIGZlX3N0djA5MDBfZXJyb3Igc3R2MDkwMF9pbml0aWFsaXplKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcykKK3sKKwlzMzIgaTsKKwllbnVtIGZlX3N0djA5MDBfZXJyb3IgZXJyb3I7CisKKwlpZiAoaV9wYXJhbXMgIT0gTlVMTCkgeworCQlpX3BhcmFtcy0+Y2hpcF9pZCA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX01JRCk7CisJCWlmIChpX3BhcmFtcy0+ZXJycyA9PSBTVFYwOTAwX05PX0VSUk9SKSB7CisJCQkvKlN0YXJ0dXAgc2VxdWVuY2UqLworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHg1Yyk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDVjKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTlJDRkcsIDB4NmMpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1ROUkNGRywgMHg2Zik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfSTJDUlBULCAweDI0KTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9JMkNSUFQsIDB4MjQpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX05DT0FSU0UsIDB4MTMpOworCQkJbXNsZWVwKDMpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX0kyQ0NGRywgMHgwOCk7CisKKwkJCXN3aXRjaCAoaV9wYXJhbXMtPmNsa21vZGUpIHsKKwkJCWNhc2UgMDoKKwkJCWNhc2UgMjoKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfU1lOVENUUkwsIDB4MjAKKwkJCQkJCXwgaV9wYXJhbXMtPmNsa21vZGUpOworCQkJCWJyZWFrOworCQkJZGVmYXVsdDoKKwkJCQkvKiBwcmVzZXJ2ZSBTRUxPU0NJIGJpdCAqLworCQkJCWkgPSAweDAyICYgc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfU1lOVENUUkwpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9TWU5UQ1RSTCwgMHgyMCB8IGkpOworCQkJCWJyZWFrOworCQkJfQorCisJCQltc2xlZXAoMyk7CisJCQlmb3IgKGkgPSAwOyBpIDwgMTgyOyBpKyspCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFNUVjA5MDBfSW5pdFZhbFtpXVswXSwgU1RWMDkwMF9Jbml0VmFsW2ldWzFdKTsKKworCQkJaWYgKHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX01JRCkgPj0gMHgyMCkgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9UU0dFTkVSQUwsIDB4MGMpOworCQkJCWZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKQorCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgU1RWMDkwMF9DdXQyMF9BZGRPblZhbFtpXVswXSwgU1RWMDkwMF9DdXQyMF9BZGRPblZhbFtpXVsxXSk7CisJCQl9CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9GU1BZQ0ZHLCAweDZjKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9GU1BZQ0ZHLCAweDZjKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9UU1RSRVMwLCAweDgwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9UU1RSRVMwLCAweDAwKTsKKwkJfQorCQllcnJvciA9IGlfcGFyYW1zLT5lcnJzOworCX0gZWxzZQorCQllcnJvciA9IFNUVjA5MDBfSU5WQUxJRF9IQU5ETEU7CisKKwlyZXR1cm4gZXJyb3I7CisKK30KKwordTMyIHN0djA5MDBfZ2V0X21jbGtfZnJlcShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsIHUzMiBleHRfY2xrKQoreworCXUzMiBtY2xrID0gOTAwMDAwMDAsIGRpdiA9IDAsIGFkX2RpdiA9IDA7CisKKwlkaXYgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9NX0RJVik7CisJYWRfZGl2ID0gKChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9TRUxYMVJBVElPKSA9PSAxKSA/IDQgOiA2KTsKKworCW1jbGsgPSAoZGl2ICsgMSkgKiBleHRfY2xrIC8gYWRfZGl2OworCisJZHByaW50ayhLRVJOX0lORk8gIiVzOiBDYWxjdWxhdGVkIE1jbGsgPSAlZFxuIiwgX19mdW5jX18sIG1jbGspOworCisJcmV0dXJuIG1jbGs7Cit9CisKK2VudW0gZmVfc3R2MDkwMF9lcnJvciBzdHYwOTAwX3NldF9tY2xrKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywgdTMyIG1jbGspCit7CisJZW51bSBmZV9zdHYwOTAwX2Vycm9yIGVycm9yID0gU1RWMDkwMF9OT19FUlJPUjsKKwl1MzIgbV9kaXYsIGNsa19zZWw7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1jbGsgc2V0IHRvICVkLCBRdWFydHogPSAlZFxuIiwgX19mdW5jX18sIG1jbGssCisJCQlpX3BhcmFtcy0+cXVhcnR6KTsKKworCWlmIChpX3BhcmFtcyA9PSBOVUxMKQorCQllcnJvciA9IFNUVjA5MDBfSU5WQUxJRF9IQU5ETEU7CisJZWxzZSB7CisJCWlmIChpX3BhcmFtcy0+ZXJycykKKwkJCWVycm9yID0gU1RWMDkwMF9JMkNfRVJST1I7CisJCWVsc2UgeworCQkJY2xrX3NlbCA9ICgoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfU0VMWDFSQVRJTykgPT0gMSkgPyA0IDogNik7CisJCQltX2RpdiA9ICgoY2xrX3NlbCAqIG1jbGspIC8gaV9wYXJhbXMtPnF1YXJ0eikgLSAxOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9NX0RJViwgbV9kaXYpOworCQkJaV9wYXJhbXMtPm1jbGsgPSBzdHYwOTAwX2dldF9tY2xrX2ZyZXEoaV9wYXJhbXMsCisJCQkJCQkJaV9wYXJhbXMtPnF1YXJ0eik7CisKKwkJCS8qU2V0IHRoZSBEaXNlcUMgZnJlcXVlbmN5IHRvIDIyS0h6ICovCisJCQkvKgorCQkJCUZvcm11bGE6CisJCQkJRGlzZXFDX1RYX0ZyZXE9IE1hc3RlckNsb2NrLygzMipGMjJUWF9SZWcpCisJCQkJRGlzZXFDX1JYX0ZyZXE9IE1hc3RlckNsb2NrLygzMipGMjJSWF9SZWcpCisJCQkqLworCQkJbV9kaXYgPSBpX3BhcmFtcy0+bWNsayAvIDcwNDAwMDsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9GMjJUWCwgbV9kaXYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0YyMlJYLCBtX2Rpdik7CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9GMjJUWCwgbV9kaXYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0YyMlJYLCBtX2Rpdik7CisKKwkJCWlmICgoaV9wYXJhbXMtPmVycnMpKQorCQkJCWVycm9yID0gU1RWMDkwMF9JMkNfRVJST1I7CisJCX0KKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3UzMiBzdHYwOTAwX2dldF9lcnJfY291bnQoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLCBpbnQgY250ciwKKwkJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwl1MzIgbHNiLCBtc2IsIGhzYiwgZXJyX3ZhbDsKKwlzMzIgZXJyMWZpZWxkX2hzYiwgZXJyMWZpZWxkX21zYiwgZXJyMWZpZWxkX2xzYjsKKwlzMzIgZXJyMmZpZWxkX2hzYiwgZXJyMmZpZWxkX21zYiwgZXJyMmZpZWxkX2xzYjsKKworCWRtZF9yZWcoZXJyMWZpZWxkX2hzYiwgRjA5MDBfUDFfRVJSX0NOVDEyLCBGMDkwMF9QMl9FUlJfQ05UMTIpOworCWRtZF9yZWcoZXJyMWZpZWxkX21zYiwgRjA5MDBfUDFfRVJSX0NOVDExLCBGMDkwMF9QMl9FUlJfQ05UMTEpOworCWRtZF9yZWcoZXJyMWZpZWxkX2xzYiwgRjA5MDBfUDFfRVJSX0NOVDEwLCBGMDkwMF9QMl9FUlJfQ05UMTApOworCisJZG1kX3JlZyhlcnIyZmllbGRfaHNiLCBGMDkwMF9QMV9FUlJfQ05UMjIsIEYwOTAwX1AyX0VSUl9DTlQyMik7CisJZG1kX3JlZyhlcnIyZmllbGRfbXNiLCBGMDkwMF9QMV9FUlJfQ05UMjEsIEYwOTAwX1AyX0VSUl9DTlQyMSk7CisJZG1kX3JlZyhlcnIyZmllbGRfbHNiLCBGMDkwMF9QMV9FUlJfQ05UMjAsIEYwOTAwX1AyX0VSUl9DTlQyMCk7CisKKwlzd2l0Y2ggKGNudHIpIHsKKwljYXNlIDA6CisJZGVmYXVsdDoKKwkJaHNiID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgZXJyMWZpZWxkX2hzYik7CisJCW1zYiA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGVycjFmaWVsZF9tc2IpOworCQlsc2IgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBlcnIxZmllbGRfbHNiKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQloc2IgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBlcnIyZmllbGRfaHNiKTsKKwkJbXNiID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgZXJyMmZpZWxkX21zYik7CisJCWxzYiA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGVycjJmaWVsZF9sc2IpOworCQlicmVhazsKKwl9CisKKwllcnJfdmFsID0gKGhzYiA8PCAxNikgKyAobXNiIDw8IDgpICsgKGxzYik7CisKKwlyZXR1cm4gZXJyX3ZhbDsKK30KKworc3RhdGljIGludCBzdHYwOTAwX2kyY19nYXRlX2N0cmwoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBlbmFibGUpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zID0gc3RhdGUtPmludGVybmFsOworCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QgPSBzdGF0ZS0+ZGVtb2Q7CisKKwl1MzIgZmkyYzsKKworCWRtZF9yZWcoZmkyYywgRjA5MDBfUDFfSTJDVF9PTiwgRjA5MDBfUDJfSTJDVF9PTik7CisJaWYgKGVuYWJsZSkKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBmaTJjLCAxKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzdHYwOTAwX3NldF90c19wYXJhbGxlbF9zZXJpYWwoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCQllbnVtIGZlX3N0djA5MDBfY2xvY2tfdHlwZSBwYXRoMV90cywKKwkJCQkJZW51bSBmZV9zdHYwOTAwX2Nsb2NrX3R5cGUgcGF0aDJfdHMpCit7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKSB7CisJCXN3aXRjaCAocGF0aDFfdHMpIHsKKwkJY2FzZSBTVFYwOTAwX1BBUkFMTEVMX1BVTkNUX0NMT0NLOgorCQljYXNlIFNUVjA5MDBfRFZCQ0lfQ0xPQ0s6CisJCQlzd2l0Y2ggKHBhdGgyX3RzKSB7CisJCQljYXNlIFNUVjA5MDBfU0VSSUFMX1BVTkNUX0NMT0NLOgorCQkJY2FzZSBTVFYwOTAwX1NFUklBTF9DT05UX0NMT0NLOgorCQkJZGVmYXVsdDoKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfVFNHRU5FUkFMLAorCQkJCQkJCTB4MDApOworCQkJCWJyZWFrOworCQkJY2FzZSBTVFYwOTAwX1BBUkFMTEVMX1BVTkNUX0NMT0NLOgorCQkJY2FzZSBTVFYwOTAwX0RWQkNJX0NMT0NLOgorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9UU0dFTkVSQUwsCisJCQkJCQkJMHgwNik7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLAorCQkJCQkJRjA5MDBfUDFfVFNGSUZPX01BTlNQRUVELCAzKTsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsCisJCQkJCQlGMDkwMF9QMl9UU0ZJRk9fTUFOU1BFRUQsIDApOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLAorCQkJCQkJUjA5MDBfUDFfVFNTUEVFRCwgMHgxNCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsCisJCQkJCQlSMDkwMF9QMl9UU1NQRUVELCAweDI4KTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfU0VSSUFMX1BVTkNUX0NMT0NLOgorCQljYXNlIFNUVjA5MDBfU0VSSUFMX0NPTlRfQ0xPQ0s6CisJCWRlZmF1bHQ6CisJCQlzd2l0Y2ggKHBhdGgyX3RzKSB7CisJCQljYXNlIFNUVjA5MDBfU0VSSUFMX1BVTkNUX0NMT0NLOgorCQkJY2FzZSBTVFYwOTAwX1NFUklBTF9DT05UX0NMT0NLOgorCQkJZGVmYXVsdDoKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywKKwkJCQkJCVIwOTAwX1RTR0VORVJBTCwgMHgwQyk7CisJCQkJYnJlYWs7CisJCQljYXNlIFNUVjA5MDBfUEFSQUxMRUxfUFVOQ1RfQ0xPQ0s6CisJCQljYXNlIFNUVjA5MDBfRFZCQ0lfQ0xPQ0s6CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsCisJCQkJCQlSMDkwMF9UU0dFTkVSQUwsIDB4MEEpOworCQkJCWRwcmludGsoS0VSTl9JTkZPICIlczogMHgwYVxuIiwgX19mdW5jX18pOworCQkJCWJyZWFrOworCQkJfQorCQkJYnJlYWs7CisJCX0KKwl9IGVsc2UgeworCQlzd2l0Y2ggKHBhdGgxX3RzKSB7CisJCWNhc2UgU1RWMDkwMF9QQVJBTExFTF9QVU5DVF9DTE9DSzoKKwkJY2FzZSBTVFYwOTAwX0RWQkNJX0NMT0NLOgorCQkJc3dpdGNoIChwYXRoMl90cykgeworCQkJY2FzZSBTVFYwOTAwX1NFUklBTF9QVU5DVF9DTE9DSzoKKwkJCWNhc2UgU1RWMDkwMF9TRVJJQUxfQ09OVF9DTE9DSzoKKwkJCWRlZmF1bHQ6CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1RTR0VORVJBTDFYLAorCQkJCQkJCTB4MTApOworCQkJCWJyZWFrOworCQkJY2FzZSBTVFYwOTAwX1BBUkFMTEVMX1BVTkNUX0NMT0NLOgorCQkJY2FzZSBTVFYwOTAwX0RWQkNJX0NMT0NLOgorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9UU0dFTkVSQUwxWCwKKwkJCQkJCQkweDE2KTsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsCisJCQkJCQlGMDkwMF9QMV9UU0ZJRk9fTUFOU1BFRUQsIDMpOworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywKKwkJCQkJCUYwOTAwX1AyX1RTRklGT19NQU5TUEVFRCwgMCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RTU1BFRUQsCisJCQkJCQkJMHgxNCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RTU1BFRUQsCisJCQkJCQkJMHgyOCk7CisJCQkJYnJlYWs7CisJCQl9CisKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfU0VSSUFMX1BVTkNUX0NMT0NLOgorCQljYXNlIFNUVjA5MDBfU0VSSUFMX0NPTlRfQ0xPQ0s6CisJCWRlZmF1bHQ6CisJCQlzd2l0Y2ggKHBhdGgyX3RzKSB7CisJCQljYXNlIFNUVjA5MDBfU0VSSUFMX1BVTkNUX0NMT0NLOgorCQkJY2FzZSBTVFYwOTAwX1NFUklBTF9DT05UX0NMT0NLOgorCQkJZGVmYXVsdDoKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfVFNHRU5FUkFMMVgsCisJCQkJCQkJMHgxNCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFNUVjA5MDBfUEFSQUxMRUxfUFVOQ1RfQ0xPQ0s6CisJCQljYXNlIFNUVjA5MDBfRFZCQ0lfQ0xPQ0s6CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1RTR0VORVJBTDFYLAorCQkJCQkJCTB4MTIpOworCQkJCWRwcmludGsoS0VSTl9JTkZPICIlczogMHgxMlxuIiwgX19mdW5jX18pOworCQkJCWJyZWFrOworCQkJfQorCisJCQlicmVhazsKKwkJfQorCX0KKworCXN3aXRjaCAocGF0aDFfdHMpIHsKKwljYXNlIFNUVjA5MDBfUEFSQUxMRUxfUFVOQ1RfQ0xPQ0s6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfVFNGSUZPX1NFUklBTCwgMHgwMCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfVFNGSUZPX0RWQkNJLCAweDAwKTsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RWQkNJX0NMT0NLOgorCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1RTRklGT19TRVJJQUwsIDB4MDApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1RTRklGT19EVkJDSSwgMHgwMSk7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9TRVJJQUxfUFVOQ1RfQ0xPQ0s6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfVFNGSUZPX1NFUklBTCwgMHgwMSk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfVFNGSUZPX0RWQkNJLCAweDAwKTsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX1NFUklBTF9DT05UX0NMT0NLOgorCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1RTRklGT19TRVJJQUwsIDB4MDEpOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1RTRklGT19EVkJDSSwgMHgwMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAocGF0aDJfdHMpIHsKKwljYXNlIFNUVjA5MDBfUEFSQUxMRUxfUFVOQ1RfQ0xPQ0s6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfVFNGSUZPX1NFUklBTCwgMHgwMCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfVFNGSUZPX0RWQkNJLCAweDAwKTsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RWQkNJX0NMT0NLOgorCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1RTRklGT19TRVJJQUwsIDB4MDApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1RTRklGT19EVkJDSSwgMHgwMSk7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9TRVJJQUxfUFVOQ1RfQ0xPQ0s6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfVFNGSUZPX1NFUklBTCwgMHgwMSk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfVFNGSUZPX0RWQkNJLCAweDAwKTsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX1NFUklBTF9DT05UX0NMT0NLOgorCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1RTRklGT19TRVJJQUwsIDB4MDEpOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1RTRklGT19EVkJDSSwgMHgwMSk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfUlNUX0hXQVJFLCAxKTsKKwlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1JTVF9IV0FSRSwgMCk7CisJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9SU1RfSFdBUkUsIDEpOworCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfUlNUX0hXQVJFLCAwKTsKK30KKwordm9pZCBzdHYwOTAwX3NldF90dW5lcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyIGZyZXF1ZW5jeSwKKwkJCQkJCQl1MzIgYmFuZHdpZHRoKQoreworCXN0cnVjdCBkdmJfZnJvbnRlbmRfb3BzICpmcm9udGVuZF9vcHMgPSBOVUxMOworCXN0cnVjdCBkdmJfdHVuZXJfb3BzICp0dW5lcl9vcHMgPSBOVUxMOworCisJaWYgKCZmZS0+b3BzKQorCQlmcm9udGVuZF9vcHMgPSAmZmUtPm9wczsKKworCWlmICgmZnJvbnRlbmRfb3BzLT50dW5lcl9vcHMpCisJCXR1bmVyX29wcyA9ICZmcm9udGVuZF9vcHMtPnR1bmVyX29wczsKKworCWlmICh0dW5lcl9vcHMtPnNldF9mcmVxdWVuY3kpIHsKKwkJaWYgKCh0dW5lcl9vcHMtPnNldF9mcmVxdWVuY3koZmUsIGZyZXF1ZW5jeSkpIDwgMCkKKwkJCWRwcmludGsoIiVzOiBJbnZhbGlkIHBhcmFtZXRlclxuIiwgX19mdW5jX18pOworCQllbHNlCisJCQlkcHJpbnRrKCIlczogRnJlcXVlbmN5PSVkXG4iLCBfX2Z1bmNfXywgZnJlcXVlbmN5KTsKKworCX0KKworCWlmICh0dW5lcl9vcHMtPnNldF9iYW5kd2lkdGgpIHsKKwkJaWYgKCh0dW5lcl9vcHMtPnNldF9iYW5kd2lkdGgoZmUsIGJhbmR3aWR0aCkpIDwgMCkKKwkJCWRwcmludGsoIiVzOiBJbnZhbGlkIHBhcmFtZXRlclxuIiwgX19mdW5jX18pOworCQllbHNlCisJCQlkcHJpbnRrKCIlczogQmFuZHdpZHRoPSVkXG4iLCBfX2Z1bmNfXywgYmFuZHdpZHRoKTsKKworCX0KK30KKwordm9pZCBzdHYwOTAwX3NldF9iYW5kd2lkdGgoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiBiYW5kd2lkdGgpCit7CisJc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgKmZyb250ZW5kX29wcyA9IE5VTEw7CisJc3RydWN0IGR2Yl90dW5lcl9vcHMgKnR1bmVyX29wcyA9IE5VTEw7CisKKwlpZiAoJmZlLT5vcHMpCisJCWZyb250ZW5kX29wcyA9ICZmZS0+b3BzOworCisJaWYgKCZmcm9udGVuZF9vcHMtPnR1bmVyX29wcykKKwkJdHVuZXJfb3BzID0gJmZyb250ZW5kX29wcy0+dHVuZXJfb3BzOworCisJaWYgKHR1bmVyX29wcy0+c2V0X2JhbmR3aWR0aCkgeworCQlpZiAoKHR1bmVyX29wcy0+c2V0X2JhbmR3aWR0aChmZSwgYmFuZHdpZHRoKSkgPCAwKQorCQkJZHByaW50aygiJXM6IEludmFsaWQgcGFyYW1ldGVyXG4iLCBfX2Z1bmNfXyk7CisJCWVsc2UKKwkJCWRwcmludGsoIiVzOiBCYW5kd2lkdGg9JWRcbiIsIF9fZnVuY19fLCBiYW5kd2lkdGgpOworCisJfQorfQorCitzdGF0aWMgczMyIHN0djA5MDBfZ2V0X3JmX2xldmVsKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQljb25zdCBzdHJ1Y3Qgc3R2MDkwMF90YWJsZSAqbG9va3VwLAorCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJczMyIGFnY19nYWluID0gMCwKKwkJaW1pbiwKKwkJaW1heCwKKwkJaSwKKwkJcmZfbHZsID0gMDsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKChsb29rdXAgIT0gTlVMTCkgJiYgbG9va3VwLT5zaXplKSB7CisJCXN3aXRjaCAoZGVtb2QpIHsKKwkJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJCWRlZmF1bHQ6CisJCQlhZ2NfZ2FpbiA9IE1BS0VXT1JEKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0FHQ0lRX1ZBTFVFMSksCisJCQkJCQlzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9BR0NJUV9WQUxVRTApKTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJCWFnY19nYWluID0gTUFLRVdPUkQoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfQUdDSVFfVkFMVUUxKSwKKwkJCQkJCXN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0FHQ0lRX1ZBTFVFMCkpOworCQkJYnJlYWs7CisJCX0KKworCQlpbWluID0gMDsKKwkJaW1heCA9IGxvb2t1cC0+c2l6ZSAtIDE7CisJCWlmIChJTlJBTkdFKGxvb2t1cC0+dGFibGVbaW1pbl0ucmVndmFsLCBhZ2NfZ2FpbiwgbG9va3VwLT50YWJsZVtpbWF4XS5yZWd2YWwpKSB7CisJCQl3aGlsZSAoKGltYXggLSBpbWluKSA+IDEpIHsKKwkJCQlpID0gKGltYXggKyBpbWluKSA+PiAxOworCisJCQkJaWYgKElOUkFOR0UobG9va3VwLT50YWJsZVtpbWluXS5yZWd2YWwsIGFnY19nYWluLCBsb29rdXAtPnRhYmxlW2ldLnJlZ3ZhbCkpCisJCQkJCWltYXggPSBpOworCQkJCWVsc2UKKwkJCQkJaW1pbiA9IGk7CisJCQl9CisKKwkJCXJmX2x2bCA9ICgoKHMzMilhZ2NfZ2FpbiAtIGxvb2t1cC0+dGFibGVbaW1pbl0ucmVndmFsKQorCQkJCQkqIChsb29rdXAtPnRhYmxlW2ltYXhdLnJlYWx2YWwgLSBsb29rdXAtPnRhYmxlW2ltaW5dLnJlYWx2YWwpCisJCQkJCS8gKGxvb2t1cC0+dGFibGVbaW1heF0ucmVndmFsIC0gbG9va3VwLT50YWJsZVtpbWluXS5yZWd2YWwpKQorCQkJCQkrIGxvb2t1cC0+dGFibGVbaW1pbl0ucmVhbHZhbDsKKwkJfSBlbHNlIGlmIChhZ2NfZ2FpbiA+IGxvb2t1cC0+dGFibGVbMF0ucmVndmFsKQorCQkJcmZfbHZsID0gNTsKKwkJZWxzZSBpZiAoYWdjX2dhaW4gPCBsb29rdXAtPnRhYmxlW2xvb2t1cC0+c2l6ZS0xXS5yZWd2YWwpCisJCQlyZl9sdmwgPSAtMTAwOworCisJfQorCisJZHByaW50ayhLRVJOX0lORk8gIiVzOiBSRkxldmVsID0gJWRcbiIsIF9fZnVuY19fLCByZl9sdmwpOworCisJcmV0dXJuIHJmX2x2bDsKK30KKworc3RhdGljIGludCBzdHYwOTAwX3JlYWRfc2lnbmFsX3N0cmVuZ3RoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MTYgKnN0cmVuZ3RoKQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppbnRlcm5hbCA9IHN0YXRlLT5pbnRlcm5hbDsKKwlzMzIgcmZsZXZlbCA9IHN0djA5MDBfZ2V0X3JmX2xldmVsKGludGVybmFsLCAmc3R2MDkwMF9yZiwKKwkJCQkJCQkJc3RhdGUtPmRlbW9kKTsKKworCSpzdHJlbmd0aCA9IChyZmxldmVsICsgMTAwKSAqICgxNjM4MyAvIDEwNSk7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgczMyIHN0djA5MDBfY2Fycl9nZXRfcXVhbGl0eShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkJY29uc3Qgc3RydWN0IHN0djA5MDBfdGFibGUgKmxvb2t1cCkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMgPSBzdGF0ZS0+aW50ZXJuYWw7CisJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCA9IHN0YXRlLT5kZW1vZDsKKworCXMzMiBjX24gPSAtMTAwLAorCQlyZWd2YWwsIGltaW4sIGltYXgsCisJCWksCisJCWxvY2tfZmxhZ19maWVsZCwKKwkJbm9pc2VfZmllbGQxLAorCQlub2lzZV9maWVsZDA7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCWRtZF9yZWcobG9ja19mbGFnX2ZpZWxkLCBGMDkwMF9QMV9MT0NLX0RFRklOSVRJRiwKKwkJCQkJRjA5MDBfUDJfTE9DS19ERUZJTklUSUYpOworCWlmIChzdHYwOTAwX2dldF9zdGFuZGFyZChmZSwgZGVtb2QpID09IFNUVjA5MDBfRFZCUzJfU1RBTkRBUkQpIHsKKwkJZG1kX3JlZyhub2lzZV9maWVsZDEsIEYwOTAwX1AxX05PU1BMSFRfTk9STUVEMSwKKwkJCQkJRjA5MDBfUDJfTk9TUExIVF9OT1JNRUQxKTsKKwkJZG1kX3JlZyhub2lzZV9maWVsZDAsIEYwOTAwX1AxX05PU1BMSFRfTk9STUVEMCwKKwkJCQkJRjA5MDBfUDJfTk9TUExIVF9OT1JNRUQwKTsKKwl9IGVsc2UgeworCQlkbWRfcmVnKG5vaXNlX2ZpZWxkMSwgRjA5MDBfUDFfTk9TREFUQVRfTk9STUVEMSwKKwkJCQkJRjA5MDBfUDJfTk9TREFUQVRfTk9STUVEMSk7CisJCWRtZF9yZWcobm9pc2VfZmllbGQwLCBGMDkwMF9QMV9OT1NEQVRBVF9OT1JNRUQwLAorCQkJCQlGMDkwMF9QMl9OT1NEQVRBVF9OT1JNRUQwKTsKKwl9CisKKwlpZiAoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgbG9ja19mbGFnX2ZpZWxkKSkgeworCQlpZiAoKGxvb2t1cCAhPSBOVUxMKSAmJiBsb29rdXAtPnNpemUpIHsKKwkJCXJlZ3ZhbCA9IDA7CisJCQltc2xlZXAoNSk7CisJCQlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgeworCQkJCXJlZ3ZhbCArPSBNQUtFV09SRChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLAorCQkJCQkJCQlub2lzZV9maWVsZDEpLAorCQkJCQkJc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywKKwkJCQkJCQkJbm9pc2VfZmllbGQwKSk7CisJCQkJbXNsZWVwKDEpOworCQkJfQorCisJCQlyZWd2YWwgLz0gMTY7CisJCQlpbWluID0gMDsKKwkJCWltYXggPSBsb29rdXAtPnNpemUgLSAxOworCQkJaWYgKElOUkFOR0UobG9va3VwLT50YWJsZVtpbWluXS5yZWd2YWwsCisJCQkJCXJlZ3ZhbCwKKwkJCQkJbG9va3VwLT50YWJsZVtpbWF4XS5yZWd2YWwpKSB7CisJCQkJd2hpbGUgKChpbWF4IC0gaW1pbikgPiAxKSB7CisJCQkJCWkgPSAoaW1heCArIGltaW4pID4+IDE7CisJCQkJCWlmIChJTlJBTkdFKGxvb2t1cC0+dGFibGVbaW1pbl0ucmVndmFsLAorCQkJCQkJICAgIHJlZ3ZhbCwKKwkJCQkJCSAgICBsb29rdXAtPnRhYmxlW2ldLnJlZ3ZhbCkpCisJCQkJCQlpbWF4ID0gaTsKKwkJCQkJZWxzZQorCQkJCQkJaW1pbiA9IGk7CisJCQkJfQorCisJCQkJY19uID0gKChyZWd2YWwgLSBsb29rdXAtPnRhYmxlW2ltaW5dLnJlZ3ZhbCkKKwkJCQkJCSogKGxvb2t1cC0+dGFibGVbaW1heF0ucmVhbHZhbAorCQkJCQkJLSBsb29rdXAtPnRhYmxlW2ltaW5dLnJlYWx2YWwpCisJCQkJCQkvIChsb29rdXAtPnRhYmxlW2ltYXhdLnJlZ3ZhbAorCQkJCQkJLSBsb29rdXAtPnRhYmxlW2ltaW5dLnJlZ3ZhbCkpCisJCQkJCQkrIGxvb2t1cC0+dGFibGVbaW1pbl0ucmVhbHZhbDsKKwkJCX0gZWxzZSBpZiAocmVndmFsIDwgbG9va3VwLT50YWJsZVtpbWluXS5yZWd2YWwpCisJCQkJY19uID0gMTAwMDsKKwkJfQorCX0KKworCXJldHVybiBjX247Cit9CisKK3N0YXRpYyBpbnQgc3R2MDkwMF9yZWFkX3NucihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTE2ICpzbnIpCit7CisJKnNuciA9IHN0djA5MDBfY2Fycl9nZXRfcXVhbGl0eShmZSwKKwkJCShjb25zdCBzdHJ1Y3Qgc3R2MDkwMF90YWJsZSAqKSZzdHYwOTAwX3MyX2NuKTsKKwkqc25yICs9IDMwOworCSpzbnIgKj0gKDE2MzgzIC8gMTAzMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBzdHYwOTAwX2dldF9iZXIoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJdTMyIGJlciA9IDEwMDAwMDAwLCBpOworCXMzMiBkbWRfc3RhdGVfcmVnOworCXMzMiBkZW1vZF9zdGF0ZTsKKwlzMzIgdnN0YXR1c19yZWc7CisJczMyIHBydml0X2ZpZWxkOworCXMzMiBwZGVsX3N0YXR1c19yZWc7CisJczMyIHBkZWxfbG9ja19maWVsZDsKKworCWRtZF9yZWcoZG1kX3N0YXRlX3JlZywgRjA5MDBfUDFfSEVBREVSX01PREUsIEYwOTAwX1AyX0hFQURFUl9NT0RFKTsKKwlkbWRfcmVnKHZzdGF0dXNfcmVnLCBSMDkwMF9QMV9WU1RBVFVTVklULCBSMDkwMF9QMl9WU1RBVFVTVklUKTsKKwlkbWRfcmVnKHBydml0X2ZpZWxkLCBGMDkwMF9QMV9QUkZWSVQsIEYwOTAwX1AyX1BSRlZJVCk7CisJZG1kX3JlZyhwZGVsX3N0YXR1c19yZWcsIFIwOTAwX1AxX1BERUxTVEFUVVMxLCBSMDkwMF9QMl9QREVMU1RBVFVTMSk7CisJZG1kX3JlZyhwZGVsX2xvY2tfZmllbGQsIEYwOTAwX1AxX1BLVERFTElOX0xPQ0ssCisJCQkJRjA5MDBfUDJfUEtUREVMSU5fTE9DSyk7CisKKwlkZW1vZF9zdGF0ZSA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGRtZF9zdGF0ZV9yZWcpOworCisJc3dpdGNoIChkZW1vZF9zdGF0ZSkgeworCWNhc2UgU1RWMDkwMF9TRUFSQ0g6CisJY2FzZSBTVFYwOTAwX1BMSF9ERVRFQ1RFRDoKKwlkZWZhdWx0OgorCQliZXIgPSAxMDAwMDAwMDsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RWQlNfRk9VTkQ6CisJCWJlciA9IDA7CisJCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJCW1zbGVlcCg1KTsKKwkJCWJlciArPSBzdHYwOTAwX2dldF9lcnJfY291bnQoaV9wYXJhbXMsIDAsIGRlbW9kKTsKKwkJfQorCisJCWJlciAvPSA1OworCQlpZiAoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgcHJ2aXRfZmllbGQpKSB7CisJCQliZXIgKj0gOTc2NjsKKwkJCWJlciA9IGJlciA+PiAxMzsKKwkJfQorCisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9EVkJTMl9GT1VORDoKKwkJYmVyID0gMDsKKwkJZm9yIChpID0gMDsgaSA8IDU7IGkrKykgeworCQkJbXNsZWVwKDUpOworCQkJYmVyICs9IHN0djA5MDBfZ2V0X2Vycl9jb3VudChpX3BhcmFtcywgMCwgZGVtb2QpOworCQl9CisKKwkJYmVyIC89IDU7CisJCWlmIChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBwZGVsX2xvY2tfZmllbGQpKSB7CisJCQliZXIgKj0gOTc2NjsKKwkJCWJlciA9IGJlciA+PiAxMzsKKwkJfQorCisJCWJyZWFrOworCX0KKworCXJldHVybiBiZXI7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDkwMF9yZWFkX2JlcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpiZXIpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmludGVybmFsID0gc3RhdGUtPmludGVybmFsOworCisJKmJlciA9IHN0djA5MDBfZ2V0X2JlcihpbnRlcm5hbCwgc3RhdGUtPmRlbW9kKTsKKworCXJldHVybiAwOworfQorCitpbnQgc3R2MDkwMF9nZXRfZGVtb2RfbG9jayhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kLCBzMzIgdGltZV9vdXQpCit7CisJczMyIHRpbWVyID0gMCwKKwkJbG9jayA9IDAsCisJCWhlYWRlcl9maWVsZCwKKwkJbG9ja19maWVsZDsKKworCWVudW0gZmVfc3R2MDkwMF9zZWFyY2hfc3RhdGUJZG1kX3N0YXRlOworCisJZG1kX3JlZyhoZWFkZXJfZmllbGQsIEYwOTAwX1AxX0hFQURFUl9NT0RFLCBGMDkwMF9QMl9IRUFERVJfTU9ERSk7CisJZG1kX3JlZyhsb2NrX2ZpZWxkLCBGMDkwMF9QMV9MT0NLX0RFRklOSVRJRiwgRjA5MDBfUDJfTE9DS19ERUZJTklUSUYpOworCXdoaWxlICgodGltZXIgPCB0aW1lX291dCkgJiYgKGxvY2sgPT0gMCkpIHsKKwkJZG1kX3N0YXRlID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgaGVhZGVyX2ZpZWxkKTsKKwkJZHByaW50aygiRGVtb2QgU3RhdGUgPSAlZFxuIiwgZG1kX3N0YXRlKTsKKwkJc3dpdGNoIChkbWRfc3RhdGUpIHsKKwkJY2FzZSBTVFYwOTAwX1NFQVJDSDoKKwkJY2FzZSBTVFYwOTAwX1BMSF9ERVRFQ1RFRDoKKwkJZGVmYXVsdDoKKwkJCWxvY2sgPSAwOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9EVkJTMl9GT1VORDoKKwkJY2FzZSBTVFYwOTAwX0RWQlNfRk9VTkQ6CisJCQlsb2NrID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgbG9ja19maWVsZCk7CisJCQlicmVhazsKKwkJfQorCisJCWlmIChsb2NrID09IDApCisJCQltc2xlZXAoMTApOworCisJCXRpbWVyICs9IDEwOworCX0KKworCWlmIChsb2NrKQorCQlkcHJpbnRrKCJERU1PRCBMT0NLIE9LXG4iKTsKKwllbHNlCisJCWRwcmludGsoIkRFTU9EIExPQ0sgRkFJTFxuIik7CisKKwlyZXR1cm4gbG9jazsKK30KKwordm9pZCBzdHYwOTAwX3N0b3BfYWxsX3MyX21vZGNvZChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwlzMzIgcmVnZmxpc3QsCisJaTsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJZG1kX3JlZyhyZWdmbGlzdCwgUjA5MDBfUDFfTU9EQ09ETFNUMCwgUjA5MDBfUDJfTU9EQ09ETFNUMCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHJlZ2ZsaXN0ICsgaSwgMHhmZik7Cit9CisKK3ZvaWQgc3R2MDkwMF9hY3RpdmF0ZV9zMl9tb2Rjb2RlKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCXUzMiBtYXR5cGUsCisJbW9kX2NvZGUsCisJZm1vZCwKKwlyZWdfaW5kZXgsCisJZmllbGRfaW5kZXg7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA8PSAweDExKSB7CisJCW1zbGVlcCg1KTsKKworCQlzd2l0Y2ggKGRlbW9kKSB7CisJCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCQlkZWZhdWx0OgorCQkJbW9kX2NvZGUgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLAorCQkJCQkJCVIwOTAwX1AxX1BMSE1PRENPRCk7CisJCQltYXR5cGUgPSBtb2RfY29kZSAmIDB4MzsKKwkJCW1vZF9jb2RlID0gKG1vZF9jb2RlICYgMHg3ZikgPj4gMjsKKworCQkJcmVnX2luZGV4ID0gUjA5MDBfUDFfTU9EQ09ETFNURiAtIG1vZF9jb2RlIC8gMjsKKwkJCWZpZWxkX2luZGV4ID0gbW9kX2NvZGUgJSAyOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQkJbW9kX2NvZGUgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLAorCQkJCQkJCVIwOTAwX1AyX1BMSE1PRENPRCk7CisJCQltYXR5cGUgPSBtb2RfY29kZSAmIDB4MzsKKwkJCW1vZF9jb2RlID0gKG1vZF9jb2RlICYgMHg3ZikgPj4gMjsKKworCQkJcmVnX2luZGV4ID0gUjA5MDBfUDJfTU9EQ09ETFNURiAtIG1vZF9jb2RlIC8gMjsKKwkJCWZpZWxkX2luZGV4ID0gbW9kX2NvZGUgJSAyOworCQkJYnJlYWs7CisJCX0KKworCisJCXN3aXRjaCAobWF0eXBlKSB7CisJCWNhc2UgMDoKKwkJZGVmYXVsdDoKKwkJCWZtb2QgPSAxNDsKKwkJCWJyZWFrOworCQljYXNlIDE6CisJCQlmbW9kID0gMTM7CisJCQlicmVhazsKKwkJY2FzZSAyOgorCQkJZm1vZCA9IDExOworCQkJYnJlYWs7CisJCWNhc2UgMzoKKwkJCWZtb2QgPSA3OworCQkJYnJlYWs7CisJCX0KKworCQlpZiAoKElOUkFOR0UoU1RWMDkwMF9RUFNLXzEyLCBtb2RfY29kZSwgU1RWMDkwMF84UFNLXzkxMCkpCisJCQkJCQkJJiYgKG1hdHlwZSA8PSAxKSkgeworCQkJaWYgKGZpZWxkX2luZGV4ID09IDApCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHJlZ19pbmRleCwKKwkJCQkJCQkweGYwIHwgZm1vZCk7CisJCQllbHNlCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHJlZ19pbmRleCwKKwkJCQkJCQkoZm1vZCA8PCA0KSB8IDB4Zik7CisJCX0KKwl9IGVsc2UgaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MTIpIHsKKwkJc3dpdGNoIChkZW1vZCkgeworCQljYXNlIFNUVjA5MDBfREVNT0RfMToKKwkJZGVmYXVsdDoKKwkJCWZvciAocmVnX2luZGV4ID0gMDsgcmVnX2luZGV4IDwgNzsgcmVnX2luZGV4KyspCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX01PRENPRExTVDAgKyByZWdfaW5kZXgsIDB4ZmYpOworCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfTU9EQ09ETFNURSwgMHhmZik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfTU9EQ09ETFNURiwgMHhjZik7CisJCQlmb3IgKHJlZ19pbmRleCA9IDA7IHJlZ19pbmRleCA8IDg7IHJlZ19pbmRleCsrKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9NT0RDT0RMU1Q3ICsgcmVnX2luZGV4LCAweGNjKTsKKworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQkJZm9yIChyZWdfaW5kZXggPSAwOyByZWdfaW5kZXggPCA3OyByZWdfaW5kZXgrKykKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfTU9EQ09ETFNUMCArIHJlZ19pbmRleCwgMHhmZik7CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9NT0RDT0RMU1RFLCAweGZmKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9NT0RDT0RMU1RGLCAweGNmKTsKKwkJCWZvciAocmVnX2luZGV4ID0gMDsgcmVnX2luZGV4IDwgODsgcmVnX2luZGV4KyspCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX01PRENPRExTVDcgKyByZWdfaW5kZXgsIDB4Y2MpOworCisJCQlicmVhazsKKwkJfQorCisJfQorfQorCit2b2lkIHN0djA5MDBfYWN0aXZhdGVfczJfbW9kY29kZV9zaW5nbGUoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCXUzMiByZWdfaW5kZXg7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCXN3aXRjaCAoZGVtb2QpIHsKKwljYXNlIFNUVjA5MDBfREVNT0RfMToKKwlkZWZhdWx0OgorCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfTU9EQ09ETFNUMCwgMHhmZik7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9NT0RDT0RMU1QxLCAweGYwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX01PRENPRExTVEYsIDB4MGYpOworCQlmb3IgKHJlZ19pbmRleCA9IDA7IHJlZ19pbmRleCA8IDEzOyByZWdfaW5kZXgrKykKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLAorCQkJCQlSMDkwMF9QMV9NT0RDT0RMU1QyICsgcmVnX2luZGV4LCAwKTsKKworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX01PRENPRExTVDAsIDB4ZmYpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfTU9EQ09ETFNUMSwgMHhmMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9NT0RDT0RMU1RGLCAweDBmKTsKKwkJZm9yIChyZWdfaW5kZXggPSAwOyByZWdfaW5kZXggPCAxMzsgcmVnX2luZGV4KyspCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywKKwkJCQkJUjA5MDBfUDJfTU9EQ09ETFNUMiArIHJlZ19pbmRleCwgMCk7CisKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgZW51bSBkdmJmZV9hbGdvIHN0djA5MDBfZnJvbnRlbmRfYWxnbyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlyZXR1cm4gRFZCRkVfQUxHT19DVVNUT007Cit9CisKK3N0YXRpYyBpbnQgc3RiMDkwMF9zZXRfcHJvcGVydHkoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJc3RydWN0IGR0dl9wcm9wZXJ0eSAqdHZwKQoreworCWRwcmludGsoS0VSTl9JTkZPICIlcyguLilcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0YjA5MDBfZ2V0X3Byb3BlcnR5KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCXN0cnVjdCBkdHZfcHJvcGVydHkgKnR2cCkKK3sKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXMoLi4pXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBzdHYwOTAwX3N0YXJ0X3NlYXJjaChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKworCXN3aXRjaCAoZGVtb2QpIHsKKwljYXNlIFNUVjA5MDBfREVNT0RfMToKKwlkZWZhdWx0OgorCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0kyQ19ERU1PRF9NT0RFLCAweDFmKTsKKworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPT0gMHgxMCkKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DT1JSRUxFWFAsIDB4YWEpOworCisJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA8IDB4MjApCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSSERSLCAweDU1KTsKKworCQlpZiAoaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUgPD0gNTAwMDAwMCkgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkNGRywgMHg0NCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSVVAxLCAweDBmKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJVUDAsIDB4ZmYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUkxPVzEsIDB4ZjApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUkxPVzAsIDB4MDApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1JUQ1MyLCAweDY4KTsKKwkJfSBlbHNlIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJDRkcsIDB4YzQpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1JUQ1MyLCAweDQ0KTsKKwkJfQorCisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMSwgMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMCwgMCk7CisKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9FUVVBTENGRywgMHg0MSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRkZFQ0ZHLCAweDQxKTsKKworCQkJaWYgKChpX3BhcmFtcy0+ZG1kMV9zcmNoX3N0YW5kYXJkID09IFNUVjA5MDBfU0VBUkNIX0RWQlMxKSB8fCAoaV9wYXJhbXMtPmRtZDFfc3JjaF9zdGFuZGFyZCA9PSBTVFYwOTAwX1NFQVJDSF9EU1MpIHx8IChpX3BhcmFtcy0+ZG1kMV9zcmNoX3N0YW5kYXJkID09IFNUVjA5MDBfQVVUT19TRUFSQ0gpKSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1ZJVFNDQUxFLCAweDgyKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVkFWU1JWSVQsIDB4MCk7CisJCQl9CisJCX0KKworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSU1RFUCwgMHgwMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdUSFJJU0UsIDB4ZTApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVE1HVEhGQUxMLCAweGMwKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9TQ0FOX0VOQUJMRSwgMCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfQ0ZSX0FVVE9TQ0FOLCAwKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9TMVMyX1NFUVVFTlRJQUwsIDApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfUlRDLCAweDg4KTsKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHsKKwkJCWlmIChpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSA8IDIwMDAwMDApIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSRlJFUSwgMHgzOSk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkhEUiwgMHg0MCk7CisJCQl9CisKKwkJCWlmIChpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSA8IDEwMDAwMDAwKSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkZSRVEsIDB4NGMpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJIRFIsIDB4MjApOworCQkJfSBlbHNlIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSRlJFUSwgMHg0Yik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkhEUiwgMHgyMCk7CisJCQl9CisKKwkJfSBlbHNlIHsKKwkJCWlmIChpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSA8IDEwMDAwMDAwKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJGUkVRLCAweGVmKTsKKwkJCWVsc2UKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSRlJFUSwgMHhlZCk7CisJCX0KKworCQlzd2l0Y2ggKGlfcGFyYW1zLT5kbWQxX3NyY2hfYWxnbykgeworCQljYXNlIFNUVjA5MDBfV0FSTV9TVEFSVDoKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MWYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxOCk7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0NPTERfU1RBUlQ6CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDFmKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MTUpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0kyQ19ERU1PRF9NT0RFLCAweDFmKTsKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID09IDB4MTApCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ09SUkVMRVhQLCAweGFhKTsKKworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPCAweDIwKQorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkhEUiwgMHg1NSk7CisKKwkJaWYgKGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlIDw9IDUwMDAwMDApIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJDRkcsIDB4NDQpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUlVQMSwgMHgwZik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSVVAwLCAweGZmKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJMT1cxLCAweGYwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJMT1cwLCAweDAwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9SVENTMiwgMHg2OCk7CisJCX0gZWxzZSB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSQ0ZHLCAweGM0KTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9SVENTMiwgMHg0NCk7CisJCX0KKworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDEsIDApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDAsIDApOworCisJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKSB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRVFVQUxDRkcsIDB4NDEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0ZGRUNGRywgMHg0MSk7CisJCQlpZiAoKGlfcGFyYW1zLT5kbWQyX3NyY2hfc3RuZHJkID09IFNUVjA5MDBfU0VBUkNIX0RWQlMxKSB8fCAoaV9wYXJhbXMtPmRtZDJfc3JjaF9zdG5kcmQgPT0gU1RWMDkwMF9TRUFSQ0hfRFNTKSB8fCAoaV9wYXJhbXMtPmRtZDJfc3JjaF9zdG5kcmQgPT0gU1RWMDkwMF9BVVRPX1NFQVJDSCkpIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVklUU0NBTEUsIDB4ODIpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9WQVZTUlZJVCwgMHgwKTsKKwkJCX0KKwkJfQorCisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJTVEVQLCAweDAwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR1RIUklTRSwgMHhlMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9UTUdUSEZBTEwsIDB4YzApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1NDQU5fRU5BQkxFLCAwKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9DRlJfQVVUT1NDQU4sIDApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1MxUzJfU0VRVUVOVElBTCwgMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9SVEMsIDB4ODgpOworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgeworCQkJaWYgKGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlIDwgMjAwMDAwMCkgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJGUkVRLCAweDM5KTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSSERSLCAweDQwKTsKKwkJCX0KKworCQkJaWYgKGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlIDwgMTAwMDAwMDApIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSRlJFUSwgMHg0Yyk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkhEUiwgMHgyMCk7CisJCQl9IGVsc2UgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJGUkVRLCAweDRiKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSSERSLCAweDIwKTsKKwkJCX0KKworCQl9IGVsc2UgeworCQkJaWYgKGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlIDwgMTAwMDAwMDApCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkZSRVEsIDB4ZWYpOworCQkJZWxzZQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJGUkVRLCAweGVkKTsKKwkJfQorCisJCXN3aXRjaCAoaV9wYXJhbXMtPmRtZDJfc3JjaF9hbGdvKSB7CisJCWNhc2UgU1RWMDkwMF9XQVJNX1NUQVJUOgorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHgxZik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDE4KTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfQ09MRF9TVEFSVDoKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MWYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHgxNSk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisKKwkJYnJlYWs7CisJfQorfQorCit1OCBzdHYwOTAwX2dldF9vcHRpbV9jYXJyX2xvb3AoczMyIHNyYXRlLCBlbnVtIGZlX3N0djA5MDBfbW9kY29kZSBtb2Rjb2RlLAorCQkJCQkJCXMzMiBwaWxvdCwgdTggY2hpcF9pZCkKK3sKKwl1OCBhY2xjX3ZhbHVlID0gMHgyOTsKKwlzMzIJaTsKKwljb25zdCBzdHJ1Y3Qgc3R2MDkwMF9jYXJfbG9vcF9vcHRpbSAqY2FyX2xvb3BfczI7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmIChjaGlwX2lkIDw9IDB4MTIpCisJCWNhcl9sb29wX3MyID0gRkVfU1RWMDkwMF9TMkNhckxvb3A7CisJZWxzZSBpZiAoY2hpcF9pZCA9PSAweDIwKQorCQljYXJfbG9vcF9zMiA9IEZFX1NUVjA5MDBfUzJDYXJMb29wQ3V0MjA7CisJZWxzZQorCQljYXJfbG9vcF9zMiA9IEZFX1NUVjA5MDBfUzJDYXJMb29wOworCisJaWYgKG1vZGNvZGUgPCBTVFYwOTAwX1FQU0tfMTIpIHsKKwkJaSA9IDA7CisJCXdoaWxlICgoaSA8IDMpICYmIChtb2Rjb2RlICE9IEZFX1NUVjA5MDBfUzJMb3dRUENhckxvb3BDdXQyMFtpXS5tb2Rjb2RlKSkKKwkJCWkrKzsKKworCQlpZiAoaSA+PSAzKQorCQkJaSA9IDI7CisJfSBlbHNlIHsKKwkJaSA9IDA7CisJCXdoaWxlICgoaSA8IDE0KSAmJiAobW9kY29kZSAhPSBjYXJfbG9vcF9zMltpXS5tb2Rjb2RlKSkKKwkJCWkrKzsKKworCQlpZiAoaSA+PSAxNCkgeworCQkJaSA9IDA7CisJCQl3aGlsZSAoKGkgPCAxMSkgJiYgKG1vZGNvZGUgIT0gRkVfU1RWMDkwMF9TMkFQU0tDYXJMb29wQ3V0MjBbaV0ubW9kY29kZSkpCisJCQkJaSsrOworCisJCQlpZiAoaSA+PSAxMSkKKwkJCQlpID0gMTA7CisJCX0KKwl9CisKKwlpZiAobW9kY29kZSA8PSBTVFYwOTAwX1FQU0tfMjUpIHsKKwkJaWYgKHBpbG90KSB7CisJCQlpZiAoc3JhdGUgPD0gMzAwMDAwMCkKKwkJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMkxvd1FQQ2FyTG9vcEN1dDIwW2ldLmNhcl9sb29wX3BpbG90c19vbl8yOworCQkJZWxzZSBpZiAoc3JhdGUgPD0gNzAwMDAwMCkKKwkJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMkxvd1FQQ2FyTG9vcEN1dDIwW2ldLmNhcl9sb29wX3BpbG90c19vbl81OworCQkJZWxzZSBpZiAoc3JhdGUgPD0gMTUwMDAwMDApCisJCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJMb3dRUENhckxvb3BDdXQyMFtpXS5jYXJfbG9vcF9waWxvdHNfb25fMTA7CisJCQllbHNlIGlmIChzcmF0ZSA8PSAyNTAwMDAwMCkKKwkJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMkxvd1FQQ2FyTG9vcEN1dDIwW2ldLmNhcl9sb29wX3BpbG90c19vbl8yMDsKKwkJCWVsc2UKKwkJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMkxvd1FQQ2FyTG9vcEN1dDIwW2ldLmNhcl9sb29wX3BpbG90c19vbl8zMDsKKwkJfSBlbHNlIHsKKwkJCWlmIChzcmF0ZSA8PSAzMDAwMDAwKQorCQkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyTG93UVBDYXJMb29wQ3V0MjBbaV0uY2FyX2xvb3BfcGlsb3RzX29mZl8yOworCQkJZWxzZSBpZiAoc3JhdGUgPD0gNzAwMDAwMCkKKwkJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMkxvd1FQQ2FyTG9vcEN1dDIwW2ldLmNhcl9sb29wX3BpbG90c19vZmZfNTsKKwkJCWVsc2UgaWYgKHNyYXRlIDw9IDE1MDAwMDAwKQorCQkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyTG93UVBDYXJMb29wQ3V0MjBbaV0uY2FyX2xvb3BfcGlsb3RzX29mZl8xMDsKKwkJCWVsc2UgaWYgKHNyYXRlIDw9IDI1MDAwMDAwKQorCQkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyTG93UVBDYXJMb29wQ3V0MjBbaV0uY2FyX2xvb3BfcGlsb3RzX29mZl8yMDsKKwkJCWVsc2UKKwkJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMkxvd1FQQ2FyTG9vcEN1dDIwW2ldLmNhcl9sb29wX3BpbG90c19vZmZfMzA7CisJCX0KKworCX0gZWxzZSBpZiAobW9kY29kZSA8PSBTVFYwOTAwXzhQU0tfOTEwKSB7CisJCWlmIChwaWxvdCkgeworCQkJaWYgKHNyYXRlIDw9IDMwMDAwMDApCisJCQkJYWNsY192YWx1ZSA9IGNhcl9sb29wX3MyW2ldLmNhcl9sb29wX3BpbG90c19vbl8yOworCQkJZWxzZSBpZiAoc3JhdGUgPD0gNzAwMDAwMCkKKwkJCQlhY2xjX3ZhbHVlID0gY2FyX2xvb3BfczJbaV0uY2FyX2xvb3BfcGlsb3RzX29uXzU7CisJCQllbHNlIGlmIChzcmF0ZSA8PSAxNTAwMDAwMCkKKwkJCQlhY2xjX3ZhbHVlID0gY2FyX2xvb3BfczJbaV0uY2FyX2xvb3BfcGlsb3RzX29uXzEwOworCQkJZWxzZSBpZiAoc3JhdGUgPD0gMjUwMDAwMDApCisJCQkJYWNsY192YWx1ZSA9IGNhcl9sb29wX3MyW2ldLmNhcl9sb29wX3BpbG90c19vbl8yMDsKKwkJCWVsc2UKKwkJCQlhY2xjX3ZhbHVlID0gY2FyX2xvb3BfczJbaV0uY2FyX2xvb3BfcGlsb3RzX29uXzMwOworCQl9IGVsc2UgeworCQkJaWYgKHNyYXRlIDw9IDMwMDAwMDApCisJCQkJYWNsY192YWx1ZSA9IGNhcl9sb29wX3MyW2ldLmNhcl9sb29wX3BpbG90c19vZmZfMjsKKwkJCWVsc2UgaWYgKHNyYXRlIDw9IDcwMDAwMDApCisJCQkJYWNsY192YWx1ZSA9IGNhcl9sb29wX3MyW2ldLmNhcl9sb29wX3BpbG90c19vZmZfNTsKKwkJCWVsc2UgaWYgKHNyYXRlIDw9IDE1MDAwMDAwKQorCQkJCWFjbGNfdmFsdWUgPSBjYXJfbG9vcF9zMltpXS5jYXJfbG9vcF9waWxvdHNfb2ZmXzEwOworCQkJZWxzZSBpZiAoc3JhdGUgPD0gMjUwMDAwMDApCisJCQkJYWNsY192YWx1ZSA9IGNhcl9sb29wX3MyW2ldLmNhcl9sb29wX3BpbG90c19vZmZfMjA7CisJCQllbHNlCisJCQkJYWNsY192YWx1ZSA9IGNhcl9sb29wX3MyW2ldLmNhcl9sb29wX3BpbG90c19vZmZfMzA7CisJCX0KKworCX0gZWxzZSB7CisJCWlmIChzcmF0ZSA8PSAzMDAwMDAwKQorCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJBUFNLQ2FyTG9vcEN1dDIwW2ldLmNhcl9sb29wX3BpbG90c19vbl8yOworCQllbHNlIGlmIChzcmF0ZSA8PSA3MDAwMDAwKQorCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJBUFNLQ2FyTG9vcEN1dDIwW2ldLmNhcl9sb29wX3BpbG90c19vbl81OworCQllbHNlIGlmIChzcmF0ZSA8PSAxNTAwMDAwMCkKKwkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyQVBTS0Nhckxvb3BDdXQyMFtpXS5jYXJfbG9vcF9waWxvdHNfb25fMTA7CisJCWVsc2UgaWYgKHNyYXRlIDw9IDI1MDAwMDAwKQorCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJBUFNLQ2FyTG9vcEN1dDIwW2ldLmNhcl9sb29wX3BpbG90c19vbl8yMDsKKwkJZWxzZQorCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJBUFNLQ2FyTG9vcEN1dDIwW2ldLmNhcl9sb29wX3BpbG90c19vbl8zMDsKKwl9CisKKwlyZXR1cm4gYWNsY192YWx1ZTsKK30KKwordTggc3R2MDkwMF9nZXRfb3B0aW1fc2hvcnRfY2Fycl9sb29wKHMzMiBzcmF0ZSwgZW51bSBmZV9zdHYwOTAwX21vZHVsYXRpb24gbW9kdWxhdGlvbiwgdTggY2hpcF9pZCkKK3sKKwlzMzIgbW9kX2luZGV4ID0gMDsKKworCXU4IGFjbGNfdmFsdWUgPSAweDBiOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlzd2l0Y2ggKG1vZHVsYXRpb24pIHsKKwljYXNlIFNUVjA5MDBfUVBTSzoKKwlkZWZhdWx0OgorCQltb2RfaW5kZXggPSAwOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfOFBTSzoKKwkJbW9kX2luZGV4ID0gMTsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwXzE2QVBTSzoKKwkJbW9kX2luZGV4ID0gMjsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwXzMyQVBTSzoKKwkJbW9kX2luZGV4ID0gMzsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChjaGlwX2lkKSB7CisJY2FzZSAweDIwOgorCQlpZiAoc3JhdGUgPD0gMzAwMDAwMCkKKwkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyU2hvcnRDYXJMb29wW21vZF9pbmRleF0uY2FyX2xvb3BfY3V0MjBfMjsKKwkJZWxzZSBpZiAoc3JhdGUgPD0gNzAwMDAwMCkKKwkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyU2hvcnRDYXJMb29wW21vZF9pbmRleF0uY2FyX2xvb3BfY3V0MjBfNTsKKwkJZWxzZSBpZiAoc3JhdGUgPD0gMTUwMDAwMDApCisJCQlhY2xjX3ZhbHVlID0gRkVfU1RWMDkwMF9TMlNob3J0Q2FyTG9vcFttb2RfaW5kZXhdLmNhcl9sb29wX2N1dDIwXzEwOworCQllbHNlIGlmIChzcmF0ZSA8PSAyNTAwMDAwMCkKKwkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyU2hvcnRDYXJMb29wW21vZF9pbmRleF0uY2FyX2xvb3BfY3V0MjBfMjA7CisJCWVsc2UKKwkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyU2hvcnRDYXJMb29wW21vZF9pbmRleF0uY2FyX2xvb3BfY3V0MjBfMzA7CisKKwkJYnJlYWs7CisJY2FzZSAweDEyOgorCWRlZmF1bHQ6CisJCWlmIChzcmF0ZSA8PSAzMDAwMDAwKQorCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJTaG9ydENhckxvb3BbbW9kX2luZGV4XS5jYXJfbG9vcF9jdXQxMl8yOworCQllbHNlIGlmIChzcmF0ZSA8PSA3MDAwMDAwKQorCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJTaG9ydENhckxvb3BbbW9kX2luZGV4XS5jYXJfbG9vcF9jdXQxMl81OworCQllbHNlIGlmIChzcmF0ZSA8PSAxNTAwMDAwMCkKKwkJCWFjbGNfdmFsdWUgPSBGRV9TVFYwOTAwX1MyU2hvcnRDYXJMb29wW21vZF9pbmRleF0uY2FyX2xvb3BfY3V0MTJfMTA7CisJCWVsc2UgaWYgKHNyYXRlIDw9IDI1MDAwMDAwKQorCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJTaG9ydENhckxvb3BbbW9kX2luZGV4XS5jYXJfbG9vcF9jdXQxMl8yMDsKKwkJZWxzZQorCQkJYWNsY192YWx1ZSA9IEZFX1NUVjA5MDBfUzJTaG9ydENhckxvb3BbbW9kX2luZGV4XS5jYXJfbG9vcF9jdXQxMl8zMDsKKworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gYWNsY192YWx1ZTsKK30KKworc3RhdGljIGVudW0gZmVfc3R2MDkwMF9lcnJvciBzdHYwOTAwX3N0X2R2YnMyX3NpbmdsZShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9tb2RlIExEUENfTW9kZSwKKwkJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwllbnVtIGZlX3N0djA5MDBfZXJyb3IgZXJyb3IgPSBTVFYwOTAwX05PX0VSUk9SOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlzd2l0Y2ggKExEUENfTW9kZSkgeworCWNhc2UgU1RWMDkwMF9EVUFMOgorCWRlZmF1bHQ6CisJCWlmICgoaV9wYXJhbXMtPmRlbW9kX21vZGUgIT0gU1RWMDkwMF9EVUFMKQorCQkJfHwgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX0RERU1PRCkgIT0gMSkpIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9HRU5DRkcsIDB4MWQpOworCisJCQlpX3BhcmFtcy0+ZGVtb2RfbW9kZSA9IFNUVjA5MDBfRFVBTDsKKworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9GUkVTRkVDLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfRlJFU0ZFQywgMCk7CisJCX0KKworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfU0lOR0xFOgorCQlpZiAoZGVtb2QgPT0gU1RWMDkwMF9ERU1PRF8yKQorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX0dFTkNGRywgMHgwNik7CisJCWVsc2UKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9HRU5DRkcsIDB4MDQpOworCisJCWlfcGFyYW1zLT5kZW1vZF9tb2RlID0gU1RWMDkwMF9TSU5HTEU7CisKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9GUkVTRkVDLCAxKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9GUkVTRkVDLCAwKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9BTEdPU1dSU1QsIDEpOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0FMR09TV1JTVCwgMCk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfQUxHT1NXUlNULCAxKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9BTEdPU1dSU1QsIDApOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKK3N0YXRpYyBlbnVtIGZlX3N0djA5MDBfZXJyb3Igc3R2MDkwMF9pbml0X2ludGVybmFsKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQlzdHJ1Y3Qgc3R2MDkwMF9pbml0X3BhcmFtcyAqcF9pbml0KQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCWVudW0gZmVfc3R2MDkwMF9lcnJvciBlcnJvciA9IFNUVjA5MDBfTk9fRVJST1I7CisJZW51bSBmZV9zdHYwOTAwX2Vycm9yIGRlbW9kRXJyb3IgPSBTVFYwOTAwX05PX0VSUk9SOworCWludCBzZWxvc2NpOworCisJc3RydWN0IHN0djA5MDBfaW5vZGUgKnRlbXBfaW50ID0gZmluZF9pbm9kZShzdGF0ZS0+aTJjX2FkYXAsCisJCQkJCQlzdGF0ZS0+Y29uZmlnLT5kZW1vZF9hZGRyZXNzKTsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJaWYgKHRlbXBfaW50ICE9IE5VTEwpIHsKKwkJc3RhdGUtPmludGVybmFsID0gdGVtcF9pbnQtPmludGVybmFsOworCQkoc3RhdGUtPmludGVybmFsLT5kbWRzX3VzZWQpKys7CisJCWRwcmludGsoS0VSTl9JTkZPICIlczogRmluZCBJbnRlcm5hbCBTdHJ1Y3R1cmUhXG4iLCBfX2Z1bmNfXyk7CisJCXJldHVybiBTVFYwOTAwX05PX0VSUk9SOworCX0gZWxzZSB7CisJCXN0YXRlLT5pbnRlcm5hbCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsKSwgR0ZQX0tFUk5FTCk7CisJCXRlbXBfaW50ID0gYXBwZW5kX2ludGVybmFsKHN0YXRlLT5pbnRlcm5hbCk7CisJCXN0YXRlLT5pbnRlcm5hbC0+ZG1kc191c2VkID0gMTsKKwkJc3RhdGUtPmludGVybmFsLT5pMmNfYWRhcCA9IHN0YXRlLT5pMmNfYWRhcDsKKwkJc3RhdGUtPmludGVybmFsLT5pMmNfYWRkciA9IHN0YXRlLT5jb25maWctPmRlbW9kX2FkZHJlc3M7CisJCXN0YXRlLT5pbnRlcm5hbC0+Y2xrbW9kZSA9IHN0YXRlLT5jb25maWctPmNsa21vZGU7CisJCXN0YXRlLT5pbnRlcm5hbC0+ZXJycyA9IFNUVjA5MDBfTk9fRVJST1I7CisJCWRwcmludGsoS0VSTl9JTkZPICIlczogQ3JlYXRlIE5ldyBJbnRlcm5hbCBTdHJ1Y3R1cmUhXG4iLCBfX2Z1bmNfXyk7CisJfQorCisJaWYgKHN0YXRlLT5pbnRlcm5hbCAhPSBOVUxMKSB7CisJCWRlbW9kRXJyb3IgPSBzdHYwOTAwX2luaXRpYWxpemUoc3RhdGUtPmludGVybmFsKTsKKwkJaWYgKGRlbW9kRXJyb3IgPT0gU1RWMDkwMF9OT19FUlJPUikgeworCQkJCWVycm9yID0gU1RWMDkwMF9OT19FUlJPUjsKKwkJfSBlbHNlIHsKKwkJCWlmIChkZW1vZEVycm9yID09IFNUVjA5MDBfSU5WQUxJRF9IQU5ETEUpCisJCQkJZXJyb3IgPSBTVFYwOTAwX0lOVkFMSURfSEFORExFOworCQkJZWxzZQorCQkJCWVycm9yID0gU1RWMDkwMF9JMkNfRVJST1I7CisJCX0KKworCQlpZiAoc3RhdGUtPmludGVybmFsICE9IE5VTEwpIHsKKwkJCWlmIChlcnJvciA9PSBTVFYwOTAwX05PX0VSUk9SKSB7CisJCQkJc3RhdGUtPmludGVybmFsLT5kZW1vZF9tb2RlID0gcF9pbml0LT5kZW1vZF9tb2RlOworCisJCQkJc3R2MDkwMF9zdF9kdmJzMl9zaW5nbGUoc3RhdGUtPmludGVybmFsLCBzdGF0ZS0+aW50ZXJuYWwtPmRlbW9kX21vZGUsIFNUVjA5MDBfREVNT0RfMSk7CisKKwkJCQlzdGF0ZS0+aW50ZXJuYWwtPmNoaXBfaWQgPSBzdHYwOTAwX3JlYWRfcmVnKHN0YXRlLT5pbnRlcm5hbCwgUjA5MDBfTUlEKTsKKwkJCQlzdGF0ZS0+aW50ZXJuYWwtPnJvbGxvZmYgPSBwX2luaXQtPnJvbGxvZmY7CisJCQkJc3RhdGUtPmludGVybmFsLT5xdWFydHogPSBwX2luaXQtPmRtZF9yZWZfY2xrOworCisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKHN0YXRlLT5pbnRlcm5hbCwgRjA5MDBfUDFfUk9MTE9GRl9DT05UUk9MLCBwX2luaXQtPnJvbGxvZmYpOworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhzdGF0ZS0+aW50ZXJuYWwsIEYwOTAwX1AyX1JPTExPRkZfQ09OVFJPTCwgcF9pbml0LT5yb2xsb2ZmKTsKKworCQkJCXN0djA5MDBfc2V0X3RzX3BhcmFsbGVsX3NlcmlhbChzdGF0ZS0+aW50ZXJuYWwsIHBfaW5pdC0+cGF0aDFfdHNfY2xvY2ssIHBfaW5pdC0+cGF0aDJfdHNfY2xvY2spOworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhzdGF0ZS0+aW50ZXJuYWwsIEYwOTAwX1AxX1RVTl9NQUREUkVTUywgcF9pbml0LT50dW4xX21hZGRyZXNzKTsKKwkJCQlzd2l0Y2ggKHBfaW5pdC0+dHVuZXIxX2FkYykgeworCQkJCWNhc2UgMToKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoc3RhdGUtPmludGVybmFsLCBSMDkwMF9UU1RUTlIxLCAweDI2KTsKKwkJCQkJYnJlYWs7CisJCQkJZGVmYXVsdDoKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKHN0YXRlLT5pbnRlcm5hbCwgRjA5MDBfUDJfVFVOX01BRERSRVNTLCBwX2luaXQtPnR1bjJfbWFkZHJlc3MpOworCQkJCXN3aXRjaCAocF9pbml0LT50dW5lcjJfYWRjKSB7CisJCQkJY2FzZSAxOgorCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhzdGF0ZS0+aW50ZXJuYWwsIFIwOTAwX1RTVFROUjMsIDB4MjYpOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlicmVhazsKKwkJCQl9CisKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoc3RhdGUtPmludGVybmFsLCBGMDkwMF9QMV9UVU5fSVFTV0FQLCBwX2luaXQtPnR1bjFfaXFfaW52ZXJzaW9uKTsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoc3RhdGUtPmludGVybmFsLCBGMDkwMF9QMl9UVU5fSVFTV0FQLCBwX2luaXQtPnR1bjJfaXFfaW52ZXJzaW9uKTsKKwkJCQlzdHYwOTAwX3NldF9tY2xrKHN0YXRlLT5pbnRlcm5hbCwgMTM1MDAwMDAwKTsKKwkJCQltc2xlZXAoMyk7CisKKwkJCQlzd2l0Y2ggKHN0YXRlLT5pbnRlcm5hbC0+Y2xrbW9kZSkgeworCQkJCWNhc2UgMDoKKwkJCQljYXNlIDI6CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKHN0YXRlLT5pbnRlcm5hbCwgUjA5MDBfU1lOVENUUkwsIDB4MjAgfCBzdGF0ZS0+aW50ZXJuYWwtPmNsa21vZGUpOworCQkJCQlicmVhazsKKwkJCQlkZWZhdWx0OgorCQkJCQlzZWxvc2NpID0gMHgwMiAmIHN0djA5MDBfcmVhZF9yZWcoc3RhdGUtPmludGVybmFsLCBSMDkwMF9TWU5UQ1RSTCk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKHN0YXRlLT5pbnRlcm5hbCwgUjA5MDBfU1lOVENUUkwsIDB4MjAgfCBzZWxvc2NpKTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCW1zbGVlcCgzKTsKKworCQkJCXN0YXRlLT5pbnRlcm5hbC0+bWNsayA9IHN0djA5MDBfZ2V0X21jbGtfZnJlcShzdGF0ZS0+aW50ZXJuYWwsIHN0YXRlLT5pbnRlcm5hbC0+cXVhcnR6KTsKKwkJCQlpZiAoc3RhdGUtPmludGVybmFsLT5lcnJzKQorCQkJCQllcnJvciA9IFNUVjA5MDBfSTJDX0VSUk9SOworCQkJfQorCQl9IGVsc2UgeworCQkJZXJyb3IgPSBTVFYwOTAwX0lOVkFMSURfSEFORExFOworCQl9CisJfQorCisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IHN0djA5MDBfc3RhdHVzKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwllbnVtIGZlX3N0djA5MDBfc2VhcmNoX3N0YXRlIGRlbW9kX3N0YXRlOworCXMzMiBtb2RlX2ZpZWxkLCBkZWxpbl9maWVsZCwgbG9ja19maWVsZCwgZmlmb19maWVsZCwgbG9ja2Vkdml0X2ZpZWxkOworCWludCBsb2NrZWQgPSBGQUxTRTsKKworCWRtZF9yZWcobW9kZV9maWVsZCwgRjA5MDBfUDFfSEVBREVSX01PREUsIEYwOTAwX1AyX0hFQURFUl9NT0RFKTsKKwlkbWRfcmVnKGxvY2tfZmllbGQsIEYwOTAwX1AxX0xPQ0tfREVGSU5JVElGLCBGMDkwMF9QMl9MT0NLX0RFRklOSVRJRik7CisJZG1kX3JlZyhkZWxpbl9maWVsZCwgRjA5MDBfUDFfUEtUREVMSU5fTE9DSywgRjA5MDBfUDJfUEtUREVMSU5fTE9DSyk7CisJZG1kX3JlZyhmaWZvX2ZpZWxkLCBGMDkwMF9QMV9UU0ZJRk9fTElORU9LLCBGMDkwMF9QMl9UU0ZJRk9fTElORU9LKTsKKwlkbWRfcmVnKGxvY2tlZHZpdF9maWVsZCwgRjA5MDBfUDFfTE9DS0VEVklULCBGMDkwMF9QMl9MT0NLRURWSVQpOworCisJZGVtb2Rfc3RhdGUgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBtb2RlX2ZpZWxkKTsKKwlzd2l0Y2ggKGRlbW9kX3N0YXRlKSB7CisJY2FzZSBTVFYwOTAwX1NFQVJDSDoKKwljYXNlIFNUVjA5MDBfUExIX0RFVEVDVEVEOgorCWRlZmF1bHQ6CisJCWxvY2tlZCA9IEZBTFNFOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfRFZCUzJfRk9VTkQ6CisJCWxvY2tlZCA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGxvY2tfZmllbGQpICYmCisJCQkJc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgZGVsaW5fZmllbGQpICYmCisJCQkJc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgZmlmb19maWVsZCk7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9EVkJTX0ZPVU5EOgorCQlsb2NrZWQgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBsb2NrX2ZpZWxkKSAmJgorCQkJCXN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGxvY2tlZHZpdF9maWVsZCkgJiYKKwkJCQlzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBmaWZvX2ZpZWxkKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGxvY2tlZDsKK30KKworc3RhdGljIGVudW0gZHZiZmVfc2VhcmNoIHN0djA5MDBfc2VhcmNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMgPSBzdGF0ZS0+aW50ZXJuYWw7CisJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzICpjID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7CisKKwlzdHJ1Y3Qgc3R2MDkwMF9zZWFyY2hfcGFyYW1zIHBfc2VhcmNoOworCXN0cnVjdCBzdHYwOTAwX3NpZ25hbF9pbmZvIHBfcmVzdWx0OworCisJZW51bSBmZV9zdHYwOTAwX2Vycm9yIGVycm9yID0gU1RWMDkwMF9OT19FUlJPUjsKKworCWRwcmludGsoS0VSTl9JTkZPICIlczogIiwgX19mdW5jX18pOworCisJcF9yZXN1bHQubG9ja2VkID0gRkFMU0U7CisJcF9zZWFyY2gucGF0aCA9IHN0YXRlLT5kZW1vZDsKKwlwX3NlYXJjaC5mcmVxdWVuY3kgPSBjLT5mcmVxdWVuY3k7CisJcF9zZWFyY2guc3ltYm9sX3JhdGUgPSBjLT5zeW1ib2xfcmF0ZTsKKwlwX3NlYXJjaC5zZWFyY2hfcmFuZ2UgPSAxMDAwMDAwMDsKKwlwX3NlYXJjaC5mZWMgPSBTVFYwOTAwX0ZFQ19VTktOT1dOOworCXBfc2VhcmNoLnN0YW5kYXJkID0gU1RWMDkwMF9BVVRPX1NFQVJDSDsKKwlwX3NlYXJjaC5pcV9pbnZlcnNpb24gPSBTVFYwOTAwX0lRX0FVVE87CisJcF9zZWFyY2guc2VhcmNoX2FsZ28gPSBTVFYwOTAwX0JMSU5EX1NFQVJDSDsKKworCWlmICgoSU5SQU5HRSgxMDAwMDAsIHBfc2VhcmNoLnN5bWJvbF9yYXRlLCA3MDAwMDAwMCkpICYmCisJCQkoSU5SQU5HRSgxMDAwMDAsIHBfc2VhcmNoLnNlYXJjaF9yYW5nZSwgNTAwMDAwMDApKSkgeworCQlzd2l0Y2ggKHBfc2VhcmNoLnBhdGgpIHsKKwkJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJCWRlZmF1bHQ6CisJCQlpX3BhcmFtcy0+ZG1kMV9zcmNoX3N0YW5kYXJkID0gcF9zZWFyY2guc3RhbmRhcmQ7CisJCQlpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSA9IHBfc2VhcmNoLnN5bWJvbF9yYXRlOworCQkJaV9wYXJhbXMtPmRtZDFfc3JjaF9yYW5nZSA9IHBfc2VhcmNoLnNlYXJjaF9yYW5nZTsKKwkJCWlfcGFyYW1zLT50dW5lcjFfZnJlcSA9IHBfc2VhcmNoLmZyZXF1ZW5jeTsKKwkJCWlfcGFyYW1zLT5kbWQxX3NyY2hfYWxnbyA9IHBfc2VhcmNoLnNlYXJjaF9hbGdvOworCQkJaV9wYXJhbXMtPmRtZDFfc3JjaF9pcV9pbnYgPSBwX3NlYXJjaC5pcV9pbnZlcnNpb247CisJCQlpX3BhcmFtcy0+ZG1kMV9mZWMgPSBwX3NlYXJjaC5mZWM7CisJCQlicmVhazsKKworCQljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJCWlfcGFyYW1zLT5kbWQyX3NyY2hfc3RuZHJkID0gcF9zZWFyY2guc3RhbmRhcmQ7CisJCQlpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSA9IHBfc2VhcmNoLnN5bWJvbF9yYXRlOworCQkJaV9wYXJhbXMtPmRtZDJfc3JjaF9yYW5nZSA9IHBfc2VhcmNoLnNlYXJjaF9yYW5nZTsKKwkJCWlfcGFyYW1zLT50dW5lcjJfZnJlcSA9IHBfc2VhcmNoLmZyZXF1ZW5jeTsKKwkJCWlfcGFyYW1zLT5kbWQyX3NyY2hfYWxnbyA9IHBfc2VhcmNoLnNlYXJjaF9hbGdvOworCQkJaV9wYXJhbXMtPmRtZDJfc3JjaF9pcV9pbnYgPSBwX3NlYXJjaC5pcV9pbnZlcnNpb247CisJCQlpX3BhcmFtcy0+ZG1kMl9mZWMgPSBwX3NlYXJjaC5mZWM7CisJCQlicmVhazsKKwkJfQorCisJCWlmICgoc3R2MDkwMF9hbGdvKGZlKSA9PSBTVFYwOTAwX1JBTkdFT0spICYmCisJCQkJCShpX3BhcmFtcy0+ZXJycyA9PSBTVFYwOTAwX05PX0VSUk9SKSkgeworCQkJc3dpdGNoIChwX3NlYXJjaC5wYXRoKSB7CisJCQljYXNlIFNUVjA5MDBfREVNT0RfMToKKwkJCWRlZmF1bHQ6CisJCQkJcF9yZXN1bHQubG9ja2VkID0gaV9wYXJhbXMtPmRtZDFfcnNsdHMubG9ja2VkOworCQkJCXBfcmVzdWx0LnN0YW5kYXJkID0gaV9wYXJhbXMtPmRtZDFfcnNsdHMuc3RhbmRhcmQ7CisJCQkJcF9yZXN1bHQuZnJlcXVlbmN5ID0gaV9wYXJhbXMtPmRtZDFfcnNsdHMuZnJlcXVlbmN5OworCQkJCXBfcmVzdWx0LnN5bWJvbF9yYXRlID0gaV9wYXJhbXMtPmRtZDFfcnNsdHMuc3ltYm9sX3JhdGU7CisJCQkJcF9yZXN1bHQuZmVjID0gaV9wYXJhbXMtPmRtZDFfcnNsdHMuZmVjOworCQkJCXBfcmVzdWx0Lm1vZGNvZGUgPSBpX3BhcmFtcy0+ZG1kMV9yc2x0cy5tb2Rjb2RlOworCQkJCXBfcmVzdWx0LnBpbG90ID0gaV9wYXJhbXMtPmRtZDFfcnNsdHMucGlsb3Q7CisJCQkJcF9yZXN1bHQuZnJhbWVfbGVuZ3RoID0gaV9wYXJhbXMtPmRtZDFfcnNsdHMuZnJhbWVfbGVuZ3RoOworCQkJCXBfcmVzdWx0LnNwZWN0cnVtID0gaV9wYXJhbXMtPmRtZDFfcnNsdHMuc3BlY3RydW07CisJCQkJcF9yZXN1bHQucm9sbG9mZiA9IGlfcGFyYW1zLT5kbWQxX3JzbHRzLnJvbGxvZmY7CisJCQkJcF9yZXN1bHQubW9kdWxhdGlvbiA9IGlfcGFyYW1zLT5kbWQxX3JzbHRzLm1vZHVsYXRpb247CisJCQkJYnJlYWs7CisJCQljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJCQlwX3Jlc3VsdC5sb2NrZWQgPSBpX3BhcmFtcy0+ZG1kMl9yc2x0cy5sb2NrZWQ7CisJCQkJcF9yZXN1bHQuc3RhbmRhcmQgPSBpX3BhcmFtcy0+ZG1kMl9yc2x0cy5zdGFuZGFyZDsKKwkJCQlwX3Jlc3VsdC5mcmVxdWVuY3kgPSBpX3BhcmFtcy0+ZG1kMl9yc2x0cy5mcmVxdWVuY3k7CisJCQkJcF9yZXN1bHQuc3ltYm9sX3JhdGUgPSBpX3BhcmFtcy0+ZG1kMl9yc2x0cy5zeW1ib2xfcmF0ZTsKKwkJCQlwX3Jlc3VsdC5mZWMgPSBpX3BhcmFtcy0+ZG1kMl9yc2x0cy5mZWM7CisJCQkJcF9yZXN1bHQubW9kY29kZSA9IGlfcGFyYW1zLT5kbWQyX3JzbHRzLm1vZGNvZGU7CisJCQkJcF9yZXN1bHQucGlsb3QgPSBpX3BhcmFtcy0+ZG1kMl9yc2x0cy5waWxvdDsKKwkJCQlwX3Jlc3VsdC5mcmFtZV9sZW5ndGggPSBpX3BhcmFtcy0+ZG1kMl9yc2x0cy5mcmFtZV9sZW5ndGg7CisJCQkJcF9yZXN1bHQuc3BlY3RydW0gPSBpX3BhcmFtcy0+ZG1kMl9yc2x0cy5zcGVjdHJ1bTsKKwkJCQlwX3Jlc3VsdC5yb2xsb2ZmID0gaV9wYXJhbXMtPmRtZDJfcnNsdHMucm9sbG9mZjsKKwkJCQlwX3Jlc3VsdC5tb2R1bGF0aW9uID0gaV9wYXJhbXMtPmRtZDJfcnNsdHMubW9kdWxhdGlvbjsKKwkJCQlicmVhazsKKwkJCX0KKworCQl9IGVsc2UgeworCQkJcF9yZXN1bHQubG9ja2VkID0gRkFMU0U7CisJCQlzd2l0Y2ggKHBfc2VhcmNoLnBhdGgpIHsKKwkJCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCQkJCXN3aXRjaCAoaV9wYXJhbXMtPmRtZDFfZXJyKSB7CisJCQkJY2FzZSBTVFYwOTAwX0kyQ19FUlJPUjoKKwkJCQkJZXJyb3IgPSBTVFYwOTAwX0kyQ19FUlJPUjsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBTVFYwOTAwX05PX0VSUk9SOgorCQkJCWRlZmF1bHQ6CisJCQkJCWVycm9yID0gU1RWMDkwMF9TRUFSQ0hfRkFJTEVEOworCQkJCQlicmVhazsKKwkJCQl9CisJCQkJYnJlYWs7CisJCQljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJCQlzd2l0Y2ggKGlfcGFyYW1zLT5kbWQyX2VycikgeworCQkJCWNhc2UgU1RWMDkwMF9JMkNfRVJST1I6CisJCQkJCWVycm9yID0gU1RWMDkwMF9JMkNfRVJST1I7CisJCQkJCWJyZWFrOworCQkJCWNhc2UgU1RWMDkwMF9OT19FUlJPUjoKKwkJCQlkZWZhdWx0OgorCQkJCQllcnJvciA9IFNUVjA5MDBfU0VBUkNIX0ZBSUxFRDsKKwkJCQkJYnJlYWs7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwl9IGVsc2UKKwkJZXJyb3IgPSBTVFYwOTAwX0JBRF9QQVJBTUVURVI7CisKKwlpZiAoKHBfcmVzdWx0LmxvY2tlZCA9PSBUUlVFKSAmJiAoZXJyb3IgPT0gU1RWMDkwMF9OT19FUlJPUikpIHsKKwkJZHByaW50ayhLRVJOX0lORk8gIlNlYXJjaCBTdWNjZXNzXG4iKTsKKwkJcmV0dXJuIERWQkZFX0FMR09fU0VBUkNIX1NVQ0NFU1M7CisJfSBlbHNlIHsKKwkJZHByaW50ayhLRVJOX0lORk8gIlNlYXJjaCBGYWlsXG4iKTsKKwkJcmV0dXJuIERWQkZFX0FMR09fU0VBUkNIX0ZBSUxFRDsKKwl9CisKKwlyZXR1cm4gRFZCRkVfQUxHT19TRUFSQ0hfRVJST1I7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDkwMF9yZWFkX3N0YXR1cyhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgZW51bSBmZV9zdGF0dXMgKnN0YXR1cykKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKworCWRwcmludGsoIiVzOiAiLCBfX2Z1bmNfXyk7CisKKwlpZiAoKHN0djA5MDBfc3RhdHVzKHN0YXRlLT5pbnRlcm5hbCwgc3RhdGUtPmRlbW9kKSkgPT0gVFJVRSkgeworCQlkcHJpbnRrKCJERU1PRCBMT0NLIE9LXG4iKTsKKwkJKnN0YXR1cyA9IEZFX0hBU19DQVJSSUVSCisJCQl8IEZFX0hBU19WSVRFUkJJCisJCQl8IEZFX0hBU19TWU5DCisJCQl8IEZFX0hBU19MT0NLOworCX0gZWxzZQorCQlkcHJpbnRrKCJERU1PRCBMT0NLIEZBSUxcbiIpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDkwMF90cmFjayhzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCXN0cnVjdCBkdmJfZnJvbnRlbmRfcGFyYW1ldGVycyAqcCkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHYwOTAwX3N0b3BfdHMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGludCBzdG9wX3RzKQoreworCisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zID0gc3RhdGUtPmludGVybmFsOworCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QgPSBzdGF0ZS0+ZGVtb2Q7CisJczMyIHJzdF9maWVsZDsKKworCWRtZF9yZWcocnN0X2ZpZWxkLCBGMDkwMF9QMV9SU1RfSFdBUkUsIEYwOTAwX1AyX1JTVF9IV0FSRSk7CisKKwlpZiAoc3RvcF90cyA9PSBUUlVFKQorCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHJzdF9maWVsZCwgMSk7CisJZWxzZQorCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHJzdF9maWVsZCwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHYwOTAwX2Rpc2VxY19pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcyA9IHN0YXRlLT5pbnRlcm5hbDsKKwllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kID0gc3RhdGUtPmRlbW9kOworCXMzMiBtb2RlX2ZpZWxkLCByZXNldF9maWVsZDsKKworCWRtZF9yZWcobW9kZV9maWVsZCwgRjA5MDBfUDFfRElTVFhfTU9ERSwgRjA5MDBfUDJfRElTVFhfTU9ERSk7CisJZG1kX3JlZyhyZXNldF9maWVsZCwgRjA5MDBfUDFfRElTRVFDX1JFU0VULCBGMDkwMF9QMl9ESVNFUUNfUkVTRVQpOworCisJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBtb2RlX2ZpZWxkLCBzdGF0ZS0+Y29uZmlnLT5kaXNlcWNfbW9kZSk7CisJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCByZXNldF9maWVsZCwgMSk7CisJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCByZXNldF9maWVsZCwgMCk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHYwOTAwX2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlzdHYwOTAwX3N0b3BfdHMoZmUsIDEpOworCXN0djA5MDBfZGlzZXFjX2luaXQoZmUpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDkwMF9kaXNlcWNfc2VuZChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMgLCB1OCAqRGF0YSwKKwkJCQl1MzIgTmJEYXRhLCBlbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCXMzMiBpID0gMDsKKworCXN3aXRjaCAoZGVtb2QpIHsKKwljYXNlIFNUVjA5MDBfREVNT0RfMToKKwlkZWZhdWx0OgorCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RJU19QUkVDSEFSR0UsIDEpOworCQl3aGlsZSAoaSA8IE5iRGF0YSkgeworCQkJd2hpbGUgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0ZJRk9fRlVMTCkpCisJCQkJOy8qIGNoZWNrcGF0Y2ggY29tcGxhaW5zICovCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRElTVFhEQVRBLCBEYXRhW2ldKTsKKwkJCWkrKzsKKwkJfQorCisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRElTX1BSRUNIQVJHRSwgMCk7CisJCWkgPSAwOworCQl3aGlsZSAoKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1RYX0lETEUpICE9IDEpICYmIChpIDwgMTApKSB7CisJCQltc2xlZXAoMTApOworCQkJaSsrOworCQl9CisKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRElTX1BSRUNIQVJHRSwgMSk7CisKKwkJd2hpbGUgKGkgPCBOYkRhdGEpIHsKKwkJCXdoaWxlIChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9GSUZPX0ZVTEwpKQorCQkJCTsvKiBjaGVja3BhdGNoIGNvbXBsYWlucyAqLworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RJU1RYREFUQSwgRGF0YVtpXSk7CisJCQlpKys7CisJCX0KKworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RJU19QUkVDSEFSR0UsIDApOworCQlpID0gMDsKKwkJd2hpbGUgKChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9UWF9JRExFKSAhPSAxKSAmJiAoaSA8IDEwKSkgeworCQkJbXNsZWVwKDEwKTsKKwkJCWkrKzsKKwkJfQorCisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djA5MDBfc2VuZF9tYXN0ZXJfY21kKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQlzdHJ1Y3QgZHZiX2Rpc2VxY19tYXN0ZXJfY21kICpjbWQpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisKKwlyZXR1cm4gc3R2MDkwMF9kaXNlcWNfc2VuZChzdGF0ZS0+aW50ZXJuYWwsCisJCQkJY21kLT5tc2csCisJCQkJY21kLT5tc2dfbGVuLAorCQkJCXN0YXRlLT5kZW1vZCk7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDkwMF9zZW5kX2J1cnN0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfbWluaV9jbWRfdCBidXJzdCkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMgPSBzdGF0ZS0+aW50ZXJuYWw7CisJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCA9IHN0YXRlLT5kZW1vZDsKKwlzMzIgbW9kZV9maWVsZDsKKwl1MzIgZGlzZXFjX2ZpZm87CisKKwlkbWRfcmVnKG1vZGVfZmllbGQsIEYwOTAwX1AxX0RJU1RYX01PREUsIEYwOTAwX1AyX0RJU1RYX01PREUpOworCWRtZF9yZWcoZGlzZXFjX2ZpZm8sIFIwOTAwX1AxX0RJU1RYREFUQSwgUjA5MDBfUDJfRElTVFhEQVRBKTsKKworCXN3aXRjaCAoYnVyc3QpIHsKKwljYXNlIFNFQ19NSU5JX0E6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgbW9kZV9maWVsZCwgMyk7LyogVW5tb2R1bGF0ZWQgKi8KKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIGRpc2VxY19maWZvLCAweDAwKTsKKwkJYnJlYWs7CisJY2FzZSBTRUNfTUlOSV9COgorCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIG1vZGVfZmllbGQsIDIpOy8qIE1vZHVsYXRlZCAqLworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgZGlzZXFjX2ZpZm8sIDB4ZmYpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHYwOTAwX3JlY3Zfc2xhdmVfcmVwbHkoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJc3RydWN0IGR2Yl9kaXNlcWNfc2xhdmVfcmVwbHkgKnJlcGx5KQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcyA9IHN0YXRlLT5pbnRlcm5hbDsKKwlzMzIgaSA9IDA7CisKKwlzd2l0Y2ggKHN0YXRlLT5kZW1vZCkgeworCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCWRlZmF1bHQ6CisJCXJlcGx5LT5tc2dfbGVuID0gMDsKKworCQl3aGlsZSAoKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1JYX0VORCkgIT0gMSkgJiYgKGkgPCAxMCkpIHsKKwkJCW1zbGVlcCgxMCk7CisJCQlpKys7CisJCX0KKworCQlpZiAoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfUlhfRU5EKSkgeworCQkJcmVwbHktPm1zZ19sZW4gPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9GSUZPX0JZVEVOQlIpOworCisJCQlmb3IgKGkgPSAwOyBpIDwgcmVwbHktPm1zZ19sZW47IGkrKykKKwkJCQlyZXBseS0+bXNnW2ldID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRElTUlhEQVRBKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJcmVwbHktPm1zZ19sZW4gPSAwOworCisJCXdoaWxlICgoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfUlhfRU5EKSAhPSAxKSAmJiAoaSA8IDEwKSkgeworCQkJbXNsZWVwKDEwKTsKKwkJCWkrKzsKKwkJfQorCisJCWlmIChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9SWF9FTkQpKSB7CisJCQlyZXBseS0+bXNnX2xlbiA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0ZJRk9fQllURU5CUik7CisKKwkJCWZvciAoaSA9IDA7IGkgPCByZXBseS0+bXNnX2xlbjsgaSsrKQorCQkJCXJlcGx5LT5tc2dbaV0gPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ESVNSWERBVEEpOworCQl9CisJCWJyZWFrOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djA5MDBfc2V0X3RvbmUoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIGZlX3NlY190b25lX21vZGVfdCB0b25lKQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcyA9IHN0YXRlLT5pbnRlcm5hbDsKKwllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kID0gc3RhdGUtPmRlbW9kOworCXMzMiBtb2RlX2ZpZWxkLCByZXNldF9maWVsZDsKKworCWRwcmludGsoS0VSTl9JTkZPICIlczogJXNcbiIsIF9fZnVuY19fLCAoKHRvbmUgPT0gMCkgPyAiT2ZmIiA6ICJPbiIpKTsKKworCWRtZF9yZWcobW9kZV9maWVsZCwgRjA5MDBfUDFfRElTVFhfTU9ERSwgRjA5MDBfUDJfRElTVFhfTU9ERSk7CisJZG1kX3JlZyhyZXNldF9maWVsZCwgRjA5MDBfUDFfRElTRVFDX1JFU0VULCBGMDkwMF9QMl9ESVNFUUNfUkVTRVQpOworCisJaWYgKHRvbmUpIHsKKwkJLypTZXQgdGhlIERpc2VxQyBtb2RlIHRvIDIyS2h6IGNvbnRpbnVlcyB0b25lKi8KKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBtb2RlX2ZpZWxkLCAwKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCByZXNldF9maWVsZCwgMSk7CisJCS8qcmVsZWFzZSBEaXNlcUMgcmVzZXQgdG8gZW5hYmxlIHRoZSAyMktIeiB0b25lKi8KKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCByZXNldF9maWVsZCwgMCk7CisJfSBlbHNlIHsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBtb2RlX2ZpZWxkLCAwKTsKKwkJLyptYWludGFpbiB0aGUgRGlzZXFDIHJlc2V0IHRvIGRpc2FibGUgdGhlIDIyS0h6IHRvbmUqLworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHJlc2V0X2ZpZWxkLCAxKTsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQgc3R2MDkwMF9yZWxlYXNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoKC0tKHN0YXRlLT5pbnRlcm5hbC0+ZG1kc191c2VkKSkgPD0gMCkgeworCisJCWRwcmludGsoS0VSTl9JTkZPICIlczogQWN0dWFsbHkgcmVtb3ZpbmdcbiIsIF9fZnVuY19fKTsKKworCQlyZW1vdmVfaW5vZGUoc3RhdGUtPmludGVybmFsKTsKKwkJa2ZyZWUoc3RhdGUtPmludGVybmFsKTsKKwl9CisKKwlrZnJlZShzdGF0ZSk7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcyBzdHYwOTAwX29wcyA9IHsKKworCS5pbmZvID0geworCQkubmFtZQkJCT0gIlNUVjA5MDAgZnJvbnRlbmQiLAorCQkudHlwZQkJCT0gRkVfUVBTSywKKwkJLmZyZXF1ZW5jeV9taW4JCT0gOTUwMDAwLAorCQkuZnJlcXVlbmN5X21heAkJPSAyMTUwMDAwLAorCQkuZnJlcXVlbmN5X3N0ZXBzaXplCT0gMTI1LAorCQkuZnJlcXVlbmN5X3RvbGVyYW5jZQk9IDAsCisJCS5zeW1ib2xfcmF0ZV9taW4JPSAxMDAwMDAwLAorCQkuc3ltYm9sX3JhdGVfbWF4CT0gNDUwMDAwMDAsCisJCS5zeW1ib2xfcmF0ZV90b2xlcmFuY2UJPSA1MDAsCisJCS5jYXBzCQkJPSBGRV9DQU5fRkVDXzFfMiB8IEZFX0NBTl9GRUNfMl8zIHwKKwkJCQkJICBGRV9DQU5fRkVDXzNfNCB8IEZFX0NBTl9GRUNfNV82IHwKKwkJCQkJICBGRV9DQU5fRkVDXzdfOCB8IEZFX0NBTl9RUFNLICAgIHwKKwkJCQkJICBGRV9DQU5fMkdfTU9EVUxBVElPTiB8CisJCQkJCSAgRkVfQ0FOX0ZFQ19BVVRPCisJfSwKKwkucmVsZWFzZQkJCT0gc3R2MDkwMF9yZWxlYXNlLAorCS5pbml0CQkJCT0gc3R2MDkwMF9pbml0LAorCS5nZXRfZnJvbnRlbmRfYWxnbwkJPSBzdHYwOTAwX2Zyb250ZW5kX2FsZ28sCisJLmkyY19nYXRlX2N0cmwJCQk9IHN0djA5MDBfaTJjX2dhdGVfY3RybCwKKwkuZGlzZXFjX3NlbmRfbWFzdGVyX2NtZAkJPSBzdHYwOTAwX3NlbmRfbWFzdGVyX2NtZCwKKwkuZGlzZXFjX3NlbmRfYnVyc3QJCT0gc3R2MDkwMF9zZW5kX2J1cnN0LAorCS5kaXNlcWNfcmVjdl9zbGF2ZV9yZXBseQk9IHN0djA5MDBfcmVjdl9zbGF2ZV9yZXBseSwKKwkuc2V0X3RvbmUJCQk9IHN0djA5MDBfc2V0X3RvbmUsCisJLnNldF9wcm9wZXJ0eQkJCT0gc3RiMDkwMF9zZXRfcHJvcGVydHksCisJLmdldF9wcm9wZXJ0eQkJCT0gc3RiMDkwMF9nZXRfcHJvcGVydHksCisJLnNlYXJjaAkJCQk9IHN0djA5MDBfc2VhcmNoLAorCS50cmFjawkJCQk9IHN0djA5MDBfdHJhY2ssCisJLnJlYWRfc3RhdHVzCQkJPSBzdHYwOTAwX3JlYWRfc3RhdHVzLAorCS5yZWFkX2JlcgkJCT0gc3R2MDkwMF9yZWFkX2JlciwKKwkucmVhZF9zaWduYWxfc3RyZW5ndGgJCT0gc3R2MDkwMF9yZWFkX3NpZ25hbF9zdHJlbmd0aCwKKwkucmVhZF9zbnIJCQk9IHN0djA5MDBfcmVhZF9zbnIsCit9OworCitzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzdHYwOTAwX2F0dGFjaChjb25zdCBzdHJ1Y3Qgc3R2MDkwMF9jb25maWcgKmNvbmZpZywKKwkJCQkJc3RydWN0IGkyY19hZGFwdGVyICppMmMsCisJCQkJCWludCBkZW1vZCkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBOVUxMOworCXN0cnVjdCBzdHYwOTAwX2luaXRfcGFyYW1zIGluaXRfcGFyYW1zOworCWVudW0gZmVfc3R2MDkwMF9lcnJvciBlcnJfc3R2MDkwMDsKKworCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN0djA5MDBfc3RhdGUpLCBHRlBfS0VSTkVMKTsKKwlpZiAoc3RhdGUgPT0gTlVMTCkKKwkJZ290byBlcnJvcjsKKworCXN0YXRlLT5kZW1vZAkJPSBkZW1vZDsKKwlzdGF0ZS0+Y29uZmlnCQk9IGNvbmZpZzsKKwlzdGF0ZS0+aTJjX2FkYXAJCT0gaTJjOworCisJbWVtY3B5KCZzdGF0ZS0+ZnJvbnRlbmQub3BzLCAmc3R2MDkwMF9vcHMsCisJCQlzaXplb2Yoc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMpKTsKKwlzdGF0ZS0+ZnJvbnRlbmQuZGVtb2R1bGF0b3JfcHJpdiA9IHN0YXRlOworCisJc3dpdGNoIChkZW1vZCkgeworCWNhc2UgMDoKKwljYXNlIDE6CisJCWluaXRfcGFyYW1zLmRtZF9yZWZfY2xrICAJPSBjb25maWctPnh0YWw7CisJCWluaXRfcGFyYW1zLmRlbW9kX21vZGUJCT0gU1RWMDkwMF9EVUFMOworCQlpbml0X3BhcmFtcy5yb2xsb2ZmCQk9IFNUVjA5MDBfMzU7CisJCWluaXRfcGFyYW1zLnBhdGgxX3RzX2Nsb2NrCT0gY29uZmlnLT5wYXRoMV9tb2RlOworCQlpbml0X3BhcmFtcy50dW4xX21hZGRyZXNzCT0gY29uZmlnLT50dW4xX21hZGRyZXNzOworCQlpbml0X3BhcmFtcy50dW4xX2lxX2ludmVyc2lvbgk9IFNUVjA5MDBfSVFfTk9STUFMOworCQlpbml0X3BhcmFtcy50dW5lcjFfYWRjCQk9IGNvbmZpZy0+dHVuMV9hZGM7CisJCWluaXRfcGFyYW1zLnBhdGgyX3RzX2Nsb2NrCT0gY29uZmlnLT5wYXRoMl9tb2RlOworCQlpbml0X3BhcmFtcy50dW4yX21hZGRyZXNzCT0gY29uZmlnLT50dW4yX21hZGRyZXNzOworCQlpbml0X3BhcmFtcy50dW5lcjJfYWRjCQk9IGNvbmZpZy0+dHVuMl9hZGM7CisJCWluaXRfcGFyYW1zLnR1bjJfaXFfaW52ZXJzaW9uCT0gU1RWMDkwMF9JUV9TV0FQUEVEOworCisJCWVycl9zdHYwOTAwID0gc3R2MDkwMF9pbml0X2ludGVybmFsKCZzdGF0ZS0+ZnJvbnRlbmQsCisJCQkJCQkJJmluaXRfcGFyYW1zKTsKKworCQlpZiAoZXJyX3N0djA5MDApCisJCQlnb3RvIGVycm9yOworCisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWdvdG8gZXJyb3I7CisJCWJyZWFrOworCX0KKworCWRwcmludGsoIiVzOiBBdHRhY2hpbmcgU1RWMDkwMCBkZW1vZHVsYXRvciglZCkgXG4iLCBfX2Z1bmNfXywgZGVtb2QpOworCXJldHVybiAmc3RhdGUtPmZyb250ZW5kOworCitlcnJvcjoKKwlkcHJpbnRrKCIlczogRmFpbGVkIHRvIGF0dGFjaCBTVFYwOTAwIGRlbW9kdWxhdG9yKCVkKSBcbiIsCisJCV9fZnVuY19fLCBkZW1vZCk7CisJa2ZyZWUoc3RhdGUpOworCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTChzdHYwOTAwX2F0dGFjaCk7CisKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJTZXQgZGVidWciKTsKKworTU9EVUxFX0FVVEhPUigiSWdvciBNLiBMaXBsaWFuaW4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiU1QgU1RWMDkwMCBmcm9udGVuZCIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfaW5pdC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfaW5pdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmZmMzg4YjQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9pbml0LmgKQEAgLTAsMCArMSw0NDEgQEAKKy8qCisgKiBzdHYwOTAwX2luaXQuaAorICoKKyAqIERyaXZlciBmb3IgU1QgU1RWMDkwMCBzYXRlbGxpdGUgZGVtb2R1bGF0b3IgSUMuCisgKgorICogQ29weXJpZ2h0IChDKSBTVCBNaWNyb2VsZWN0cm9uaWNzLgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5ldFVQIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBJZ29yIE0uIExpcGxpYW5pbiA8bGlwbGlhbmluQG5ldHVwLnJ1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIFNUVjA5MDBfSU5JVF9ICisjZGVmaW5lIFNUVjA5MDBfSU5JVF9ICisKKyNpbmNsdWRlICJzdHYwOTAwX3ByaXYuaCIKKworLyogRFZCUzIgQy9OIExvb2stVXAgdGFibGUgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3R2MDkwMF90YWJsZSBzdHYwOTAwX3MyX2NuID0geworCTU1LAorCXsKKwkJeyAtMzAsCTEzMzQ4IH0sIC8qQy9OPS0zZEIqLworCQl7IC0yMCwJMTI2NDAgfSwgLypDL049LTJkQiovCisJCXsgLTEwLAkxMTg4MyB9LCAvKkMvTj0tMWRCKi8KKwkJeyAwLAkxMTEwMSB9LCAvKkMvTj0tMGRCKi8KKwkJeyA1LAkxMDcxOCB9LCAvKkMvTj0wLjVkQiovCisJCXsgMTAsCTEwMzM5IH0sIC8qQy9OPTEuMGRCKi8KKwkJeyAxNSwJOTk0NyB9LCAvKkMvTj0xLjVkQiovCisJCXsgMjAsCTk1NTIgfSwgLypDL049Mi4wZEIqLworCQl7IDI1LAk5MTgzIH0sIC8qQy9OPTIuNWRCKi8KKwkJeyAzMCwJODc5OSB9LCAvKkMvTj0zLjBkQiovCisJCXsgMzUsCTg0MjIgfSwgLypDL049My41ZEIqLworCQl7IDQwLAk4MDYyIH0sIC8qQy9OPTQuMGRCKi8KKwkJeyA0NSwJNzcwNyB9LCAvKkMvTj00LjVkQiovCisJCXsgNTAsCTczNTMgfSwgLypDL049NS4wZEIqLworCQl7IDU1LAk3MDI1IH0sIC8qQy9OPTUuNWRCKi8KKwkJeyA2MCwJNjY4NCB9LCAvKkMvTj02LjBkQiovCisJCXsgNjUsCTYzMzEgfSwgLypDL049Ni41ZEIqLworCQl7IDcwLAk2MDM2IH0sIC8qQy9OPTcuMGRCKi8KKwkJeyA3NSwJNTcyNyB9LCAvKkMvTj03LjVkQiovCisJCXsgODAsCTU0MzcgfSwgLypDL049OC4wZEIqLworCQl7IDg1LAk1MTY0IH0sIC8qQy9OPTguNWRCKi8KKwkJeyA5MCwJNDkwMiB9LCAvKkMvTj05LjBkQiovCisJCXsgOTUsCTQ2NTMgfSwgLypDL049OS41ZEIqLworCQl7IDEwMCwJNDQwOCB9LCAvKkMvTj0xMC4wZEIqLworCQl7IDEwNSwJNDE4NyB9LCAvKkMvTj0xMC41ZEIqLworCQl7IDExMCwJMzk2MSB9LCAvKkMvTj0xMS4wZEIqLworCQl7IDExNSwJMzc1MSB9LCAvKkMvTj0xMS41ZEIqLworCQl7IDEyMCwJMzU1OCB9LCAvKkMvTj0xMi4wZEIqLworCQl7IDEyNSwJMzM2OCB9LCAvKkMvTj0xMi41ZEIqLworCQl7IDEzMCwJMzE5MSB9LCAvKkMvTj0xMy4wZEIqLworCQl7IDEzNSwJMzAxNyB9LCAvKkMvTj0xMy41ZEIqLworCQl7IDE0MCwJMjg2MiB9LCAvKkMvTj0xNC4wZEIqLworCQl7IDE0NSwJMjcxMCB9LCAvKkMvTj0xNC41ZEIqLworCQl7IDE1MCwJMjU2NSB9LCAvKkMvTj0xNS4wZEIqLworCQl7IDE2MCwJMjMwMCB9LCAvKkMvTj0xNi4wZEIqLworCQl7IDE3MCwJMjA1OCB9LCAvKkMvTj0xNy4wZEIqLworCQl7IDE4MCwJMTg0OSB9LCAvKkMvTj0xOC4wZEIqLworCQl7IDE5MCwJMTY2MyB9LCAvKkMvTj0xOS4wZEIqLworCQl7IDIwMCwJMTQ5NSB9LCAvKkMvTj0yMC4wZEIqLworCQl7IDIxMCwJMTM0OSB9LCAvKkMvTj0yMS4wZEIqLworCQl7IDIyMCwJMTIyMiB9LCAvKkMvTj0yMi4wZEIqLworCQl7IDIzMCwJMTExMCB9LCAvKkMvTj0yMy4wZEIqLworCQl7IDI0MCwJMTAxMSB9LCAvKkMvTj0yNC4wZEIqLworCQl7IDI1MCwJOTI1IH0sIC8qQy9OPTI1LjBkQiovCisJCXsgMjYwLAk4NTMgfSwgLypDL049MjYuMGRCKi8KKwkJeyAyNzAsCTc4OSB9LCAvKkMvTj0yNy4wZEIqLworCQl7IDI4MCwJNzM0IH0sIC8qQy9OPTI4LjBkQiovCisJCXsgMjkwLAk2OTAgfSwgLypDL049MjkuMGRCKi8KKwkJeyAzMDAsCTY1MCB9LCAvKkMvTj0zMC4wZEIqLworCQl7IDMxMCwJNjE5IH0sIC8qQy9OPTMxLjBkQiovCisJCXsgMzIwLAk1OTMgfSwgLypDL049MzIuMGRCKi8KKwkJeyAzMzAsCTU3MSB9LCAvKkMvTj0zMy4wZEIqLworCQl7IDQwMCwJNDk4IH0sIC8qQy9OPTQwLjBkQiovCisJCXsgNDUwLAk0ODQgfSwgLypDL049NDUuMGRCKi8KKwkJeyA1MDAsCTQ4MSB9ICAvKkMvTj01MC4wZEIqLworCX0KK307CisKKy8qIFJGIGxldmVsIEMvTiBMb29rLVVwIHRhYmxlICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHN0djA5MDBfdGFibGUgc3R2MDkwMF9yZiA9IHsKKwkxNCwKKwl7CisJCXsgLTUsIDB4Q0FBMSB9LCAvKi01ZEJtKi8KKwkJeyAtMTAsIDB4QzIyOSB9LCAvKi0xMGRCbSovCisJCXsgLTE1LCAweEJCMDggfSwgLyotMTVkQm0qLworCQl7IC0yMCwgMHhCNEJDIH0sIC8qLTIwZEJtKi8KKwkJeyAtMjUsIDB4QUQ1QSB9LCAvKi0yNWRCbSovCisJCXsgLTMwLCAweEEyOTggfSwgLyotMzBkQm0qLworCQl7IC0zNSwgMHg5OEE4IH0sIC8qLTM1ZEJtKi8KKwkJeyAtNDAsIDB4ODM4OSB9LCAvKi00MGRCbSovCisJCXsgLTQ1LCAweDU5QkUgfSwgLyotNDVkQm0qLworCQl7IC01MCwgMHgzQTE0IH0sIC8qLTUwZEJtKi8KKwkJeyAtNTUsIDB4MkQxMSB9LCAvKi01NWRCbSovCisJCXsgLTYwLCAweDIxMEQgfSwgLyotNjBkQm0qLworCQl7IC02NSwgMHhBMTRGIH0sIC8qLTY1ZEJtKi8KKwkJeyAtNzAsIDB4N0FBIH0JLyotNzBkQm0qLworCX0KK307CisKK3N0cnVjdCBzdHYwOTAwX2Nhcl9sb29wX29wdGltIHsKKwllbnVtIGZlX3N0djA5MDBfbW9kY29kZSBtb2Rjb2RlOworCXU4IGNhcl9sb29wX3BpbG90c19vbl8yOworCXU4IGNhcl9sb29wX3BpbG90c19vZmZfMjsKKwl1OCBjYXJfbG9vcF9waWxvdHNfb25fNTsKKwl1OCBjYXJfbG9vcF9waWxvdHNfb2ZmXzU7CisJdTggY2FyX2xvb3BfcGlsb3RzX29uXzEwOworCXU4IGNhcl9sb29wX3BpbG90c19vZmZfMTA7CisJdTggY2FyX2xvb3BfcGlsb3RzX29uXzIwOworCXU4IGNhcl9sb29wX3BpbG90c19vZmZfMjA7CisJdTggY2FyX2xvb3BfcGlsb3RzX29uXzMwOworCXU4IGNhcl9sb29wX3BpbG90c19vZmZfMzA7CisKK307CisKK3N0cnVjdCBzdHYwOTAwX3Nob3J0X2ZyYW1lc19jYXJfbG9vcF9vcHRpbSB7CisJZW51bSBmZV9zdHYwOTAwX21vZHVsYXRpb24gbW9kdWxhdGlvbjsKKwl1OCBjYXJfbG9vcF9jdXQxMl8yOyAgICAvKiBDdXQgMS4yLCAgIFNSPD0zbXNwcyAgICAgKi8KKwl1OCBjYXJfbG9vcF9jdXQyMF8yOyAgICAvKiBDdXQgMi4wLCAgIFNSPDNtc3BzICAgICAgKi8KKwl1OCBjYXJfbG9vcF9jdXQxMl81OyAgICAvKiBDdXQgMS4yLCAgIDM8U1I8PTdtc3BzICAgKi8KKwl1OCBjYXJfbG9vcF9jdXQyMF81OyAgICAvKiBDdXQgMi4wLCAgIDM8U1I8PTdtc3BzICAgKi8KKwl1OCBjYXJfbG9vcF9jdXQxMl8xMDsgICAvKiBDdXQgMS4yLCAgIDc8U1I8PTE1bXNwcyAgKi8KKwl1OCBjYXJfbG9vcF9jdXQyMF8xMDsgICAvKiBDdXQgMi4wLCAgIDc8U1I8PTE1bXNwcyAgKi8KKwl1OCBjYXJfbG9vcF9jdXQxMl8yMDsgICAvKiBDdXQgMS4yLCAgIDEwPFNSPD0yNW1zcHMgKi8KKwl1OCBjYXJfbG9vcF9jdXQyMF8yMDsgICAvKiBDdXQgMi4wLCAgIDEwPFNSPD0yNW1zcHMgKi8KKwl1OCBjYXJfbG9vcF9jdXQxMl8zMDsgICAvKiBDdXQgMS4yLCAgIDI1PFNSPD00NW1zcHMgKi8KKwl1OCBjYXJfbG9vcF9jdXQyMF8zMDsgICAvKiBDdXQgMi4wLCAgIDEwPFNSPD00NW1zcHMgKi8KKworfTsKKworLyogQ3V0IDEueCBUcmFja2luZyBjYXJyaWVyIGxvb3AgY2FycmllciBRUFNLIDEvMiB0byA4UFNLIDkvMTAgbG9uZyBGcmFtZSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzdHYwOTAwX2Nhcl9sb29wX29wdGltCUZFX1NUVjA5MDBfUzJDYXJMb29wWzE0XSA9IHsKKwkvKk1vZGNvZAkJMk1Qb24gCTJNUG9mZgk1TVBvbiAJNU1Qb2ZmCTEwTVBvbiAJMTBNUG9mZgkyME1Qb24gCTIwTVBvZmYJMzBNUG9uIAkzME1Qb2ZmICovCisJeyBTVFYwOTAwX1FQU0tfMTIsCTB4MUMsCTB4MEQsCTB4MUIsCTB4MkMsCTB4M0EsCTB4MUMsCTB4MkEsCTB4M0IsCTB4MkEsCTB4MUIgfSwKKwl7IFNUVjA5MDBfUVBTS18zNSwJMHgyQywJMHgwRCwJMHgyQiwJMHgyQywJMHgzQSwJMHgwQywJMHgzQSwJMHgyQiwJMHgyQSwJMHgwQiB9LAorCXsgU1RWMDkwMF9RUFNLXzIzLAkweDJDLAkweDBELAkweDJCLAkweDJDLAkweDBCLAkweDBDLAkweDNBLAkweDFCLAkweDJBLAkweDNBIH0sCisJeyBTVFYwOTAwX1FQU0tfMzQsCTB4M0MsCTB4MEQsCTB4M0IsCTB4MUMsCTB4MEIsCTB4M0IsCTB4M0EsCTB4MEIsCTB4MkEsCTB4M0EgfSwKKwl7IFNUVjA5MDBfUVBTS180NSwJMHgzQywJMHgwRCwJMHgzQiwJMHgxQywJMHgwQiwJMHgzQiwJMHgzQSwJMHgwQiwJMHgyQSwJMHgzQSB9LAorCXsgU1RWMDkwMF9RUFNLXzU2LAkweDBELAkweDBELAkweDNCLAkweDFDLAkweDBCLAkweDNCLAkweDNBLAkweDBCLAkweDJBLAkweDNBIH0sCisJeyBTVFYwOTAwX1FQU0tfODksCTB4MEQsCTB4MEQsCTB4M0IsCTB4MUMsCTB4MUIsCTB4M0IsCTB4M0EsCTB4MEIsCTB4MkEsCTB4M0EgfSwKKwl7IFNUVjA5MDBfUVBTS185MTAsCTB4MUQsCTB4MEQsCTB4M0IsCTB4MUMsCTB4MUIsCTB4M0IsCTB4M0EsCTB4MEIsCTB4MkEsCTB4M0EgfSwKKwl7IFNUVjA5MDBfOFBTS18zNSwJMHgyOSwJMHgzQiwJMHgwOSwJMHgyQiwJMHgzOCwJMHgwQiwJMHgxOCwJMHgxQSwJMHgwOCwJMHgwQSB9LAorCXsgU1RWMDkwMF84UFNLXzIzLAkweDBBLAkweDNCLAkweDI5LAkweDJCLAkweDE5LAkweDBCLAkweDM4LAkweDFBLAkweDE4LAkweDBBIH0sCisJeyBTVFYwOTAwXzhQU0tfMzQsCTB4M0EsCTB4M0IsCTB4MkEsCTB4MkIsCTB4MzksCTB4MEIsCTB4MTksCTB4MUEsCTB4MzgsCTB4MEEgfSwKKwl7IFNUVjA5MDBfOFBTS181NiwJMHgxQiwJMHgzQiwJMHgwQiwJMHgyQiwJMHgxQSwJMHgwQiwJMHgzOSwJMHgxQSwJMHgxOSwJMHgwQSB9LAorCXsgU1RWMDkwMF84UFNLXzg5LAkweDNCLAkweDNCLAkweDBCLAkweDJCLAkweDJBLAkweDBCLAkweDM5LAkweDFBLAkweDI5LAkweDM5IH0sCisJeyBTVFYwOTAwXzhQU0tfOTEwLAkweDNCLAkweDNCLCAJMHgwQiwJMHgyQiwgCTB4MkEsCTB4MEIsCTB4MzksCTB4MUEsCTB4MjksCTB4MzkgfQorfTsKKworCisvKiBDdXQgMi4wIFRyYWNraW5nIGNhcnJpZXIgbG9vcCBjYXJyaWVyIFFQU0sgMS8yIHRvIDhQU0sgOS8xMCBsb25nIEZyYW1lICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHN0djA5MDBfY2FyX2xvb3Bfb3B0aW0JRkVfU1RWMDkwMF9TMkNhckxvb3BDdXQyMFsxNF0JPSB7CisJLyogTW9kY29kCQkyTVBvbiAJMk1Qb2ZmCTVNUG9uIAk1TVBvZmYJMTBNUG9uIAkxME1Qb2ZmCTIwTVBvbiAJMjBNUG9mZgkzME1Qb24gCTMwTVBvZmYgKi8KKwl7IFNUVjA5MDBfUVBTS18xMiwJMHgxRiwJMHgzRiwJMHgxRSwJMHgzRiwJMHgzRCwJMHgxRiwJMHgzRCwJMHgzRSwJMHgzRCwJMHgxRSB9LAorCXsgU1RWMDkwMF9RUFNLXzM1LAkweDJGLAkweDNGLAkweDJFLAkweDJGLAkweDNELAkweDBGLAkweDBFLAkweDJFLAkweDNELAkweDBFIH0sCisJeyBTVFYwOTAwX1FQU0tfMjMsCTB4MkYsCTB4M0YsCTB4MkUsCTB4MkYsCTB4MEUsCTB4MEYsCTB4MEUsCTB4MUUsCTB4M0QsCTB4M0QgfSwKKwl7IFNUVjA5MDBfUVBTS18zNCwJMHgzRiwJMHgzRiwJMHgzRSwJMHgxRiwJMHgwRSwJMHgzRSwJMHgwRSwJMHgxRSwJMHgzRCwJMHgzRCB9LAorCXsgU1RWMDkwMF9RUFNLXzQ1LAkweDNGLAkweDNGLAkweDNFLAkweDFGLAkweDBFLAkweDNFLAkweDBFLAkweDFFLAkweDNELAkweDNEIH0sCisJeyBTVFYwOTAwX1FQU0tfNTYsCTB4M0YsCTB4M0YsCTB4M0UsCTB4MUYsCTB4MEUsCTB4M0UsCTB4MEUsCTB4MUUsCTB4M0QsCTB4M0QgfSwKKwl7IFNUVjA5MDBfUVBTS184OSwJMHgzRiwJMHgzRiwJMHgzRSwJMHgxRiwJMHgxRSwJMHgzRSwJMHgwRSwJMHgxRSwJMHgzRCwJMHgzRCB9LAorCXsgU1RWMDkwMF9RUFNLXzkxMCwJMHgzRiwJMHgzRiwJMHgzRSwJMHgxRiwJMHgxRSwJMHgzRSwJMHgwRSwJMHgxRSwJMHgzRCwJMHgzRCB9LAorCXsgU1RWMDkwMF84UFNLXzM1LAkweDNjLAkweDBjLAkweDFjLAkweDNiLAkweDBjLAkweDNiLAkweDJiLAkweDJiLAkweDFiLAkweDJiIH0sCisJeyBTVFYwOTAwXzhQU0tfMjMsCTB4MWQsCTB4MGMsCTB4M2MsCTB4MGMsCTB4MmMsCTB4M2IsCTB4MGMsCTB4MmIsCTB4MmIsCTB4MmIgfSwKKwl7IFNUVjA5MDBfOFBTS18zNCwJMHgwZSwJMHgxYywJMHgzZCwJMHgwYywJMHgwZCwJMHgzYiwJMHgyYywJMHgzYiwJMHgwYywJMHgyYiB9LAorCXsgU1RWMDkwMF84UFNLXzU2LAkweDJlLAkweDNlLAkweDFlLAkweDJlLAkweDJkLAkweDFlLAkweDNjLAkweDJkLAkweDJjLAkweDFkIH0sCisJeyBTVFYwOTAwXzhQU0tfODksCTB4M2UsCTB4M2UsCTB4MWUsCTB4MmUsCTB4M2QsCTB4MWUsCTB4MGQsCTB4MmQsCTB4M2MsCTB4MWQgfSwKKwl7IFNUVjA5MDBfOFBTS185MTAsCTB4M2UsCTB4M2UsIAkweDFlLAkweDJlLCAJMHgzZCwJMHgxZSwJMHgxZCwJMHgyZCwJMHgwZCwJMHgxZCB9Cit9OworCisKKworLyogQ3V0IDIuMCBUcmFja2luZyBjYXJyaWVyIGxvb3AgY2FycmllciAxNkFQU0sgMi8zIHRvIDMyQVBTSyA5LzEwIGxvbmcgRnJhbWUgKi8KK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc3R2MDkwMF9jYXJfbG9vcF9vcHRpbSBGRV9TVFYwOTAwX1MyQVBTS0Nhckxvb3BDdXQyMFsxMV0gPSB7CisJLyogTW9kY29kCQkyTVBvbiAJMk1Qb2ZmCTVNUG9uIAk1TVBvZmYJMTBNUG9uIAkxME1Qb2ZmCTIwTVBvbiAJMjBNUG9mZgkzME1Qb24gCTMwTVBvZmYgKi8KKwl7IFNUVjA5MDBfMTZBUFNLXzIzLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDFELAkweDBDLAkweDNDLAkweDBDLAkweDJDLAkweDBDIH0sCisJeyBTVFYwOTAwXzE2QVBTS18zNCwJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwRSwJMHgwQywJMHgyRCwJMHgwQywJMHgxRCwJMHgwQyB9LAorCXsgU1RWMDkwMF8xNkFQU0tfNDUsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MUUsCTB4MEMsCTB4M0QsCTB4MEMsCTB4MkQsCTB4MEMgfSwKKwl7IFNUVjA5MDBfMTZBUFNLXzU2LAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDFFLAkweDBDLAkweDNELAkweDBDLAkweDJELAkweDBDIH0sCisJeyBTVFYwOTAwXzE2QVBTS184OSwJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgyRSwJMHgwQywJMHgwRSwJMHgwQywJMHgzRCwJMHgwQyB9LAorCXsgU1RWMDkwMF8xNkFQU0tfOTEwLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDJFLAkweDBDLAkweDBFLAkweDBDLAkweDNELAkweDBDIH0sCisJeyBTVFYwOTAwXzMyQVBTS18zNCwJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQyB9LAorCXsgU1RWMDkwMF8zMkFQU0tfNDUsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMsCTB4MEMgfSwKKwl7IFNUVjA5MDBfMzJBUFNLXzU2LAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDIH0sCisJeyBTVFYwOTAwXzMyQVBTS184OSwJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQywJMHgwQyB9LAorCXsgU1RWMDkwMF8zMkFQU0tfOTEwLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDLAkweDBDIH0KK307CisKKworLyogQ3V0IDIuMCBUcmFja2luZyBjYXJyaWVyIGxvb3AgY2FycmllciBRUFNLIDEvNCB0byBRUFNLIDIvNSBsb25nIEZyYW1lICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHN0djA5MDBfY2FyX2xvb3Bfb3B0aW0gRkVfU1RWMDkwMF9TMkxvd1FQQ2FyTG9vcEN1dDIwWzNdID0geworCS8qIE1vZGNvZAkJMk1Qb24gCTJNUG9mZgk1TVBvbiAJNU1Qb2ZmCTEwTVBvbiAJMTBNUG9mZgkyME1Qb24gCTIwTVBvZmYJMzBNUG9uIAkzME1Qb2ZmICovCisJeyBTVFYwOTAwX1FQU0tfMTQsCTB4MEYsCTB4M0YsCTB4MEUsCTB4M0YsCTB4MkQsCTB4MkYsCTB4MkQsCTB4MUYsCTB4M0QsCTB4M0UgfSwKKwl7IFNUVjA5MDBfUVBTS18xMywJMHgwRiwJMHgzRiwJMHgwRSwJMHgzRiwJMHgyRCwJMHgyRiwJMHgzRCwJMHgwRiwJMHgzRCwJMHgyRSB9LAorCXsgU1RWMDkwMF9RUFNLXzI1LAkweDFGLAkweDNGLAkweDFFLAkweDNGLAkweDNELAkweDFGLAkweDNELAkweDNFLAkweDNELAkweDJFIH0KK307CisKKworLyogQ3V0IDIuMCBUcmFja2luZyBjYXJyaWVyIGxvb3AgY2FycmllciAgc2hvcnQgRnJhbWUsIGN1dCAxLjIgYW5kIDIuMCAqLworc3RhdGljIGNvbnN0IHN0cnVjdCBzdHYwOTAwX3Nob3J0X2ZyYW1lc19jYXJfbG9vcF9vcHRpbSBGRV9TVFYwOTAwX1MyU2hvcnRDYXJMb29wWzRdCT0geworCS8qTW9kCTJNX2N1dDEuMiAyTV9jdXQyLjAgNU1fY3V0MS4yIDVNX2N1dDIuMCAxME1fY3V0MS4yIDEwTV9jdXQyLjAgMjBNX2N1dDEuMiAyME1fY3V0Mi4wIDMwTV9jdXQxLjIgMzBNX2N1dDIuMCAqLworCXsgU1RWMDkwMF9RUFNLLAkJMHgzQywJMHgyRiwJMHgyQiwJMHgyRSwJMHgwQiwJMHgwRSwJMHgzQSwJMHgwRSwJMHgyQSwJMHgzRCB9LAorCXsgU1RWMDkwMF84UFNLLAkJMHgwQiwJMHgzRSwJMHgyQSwJMHgwRSwJMHgwQSwJMHgyRCwJMHgxOSwJMHgwRCwJMHgwOSwJMHgzQyB9LAorCXsgU1RWMDkwMF8xNkFQU0ssCTB4MUIsCTB4MUUsCTB4MUIsCTB4MUUsCTB4MUIsCTB4MUUsCTB4M0EsCTB4M0QsCTB4MkEsCTB4MkQgfSwKKwl7IFNUVjA5MDBfMzJBUFNLLAkweDFCLAkweDFFLAkweDFCLAkweDFFLAkweDFCLAkweDFFLAkweDNBLAkweDNELAkweDJBLAkweDJEIH0KK307CisKK3N0YXRpYyBjb25zdCB1MTYgU1RWMDkwMF9Jbml0VmFsWzE4Ml1bMl0gPSB7CisJeyBSMDkwMF9PVVRDRkcJCSwgMHgwMAl9LAorCXsgUjA5MDBfTU9ERUNGRwkJLCAweGZmCX0sCisJeyBSMDkwMF9BR0NSRjFDRkcJLCAweDExCX0sCisJeyBSMDkwMF9BR0NSRjJDRkcJLCAweDEzCX0sCisJeyBSMDkwMF9UU0dFTkVSQUwxWAksIDB4MTQJfSwKKwl7IFIwOTAwX1RTVFROUjIJCSwgMHgyMQl9LAorCXsgUjA5MDBfVFNUVE5SNAkJLCAweDIxCX0sCisJeyBSMDkwMF9QMl9ESVNUWENUTAksIDB4MjIJfSwKKwl7IFIwOTAwX1AyX0YyMlRYCSwgMHhjMAl9LAorCXsgUjA5MDBfUDJfRjIyUlgJLCAweGMwCX0sCisJeyBSMDkwMF9QMl9ESVNSWENUTAksIDB4MDAJfSwKKwl7IFIwOTAwX1AyX1ROUlNURVBTCSwgMHg4Nwl9LAorCXsgUjA5MDBfUDJfVE5SR0FJTgksIDB4MDkJfSwKKwl7IFIwOTAwX1AyX0RNRENGR01ECSwgMHhGOQl9LAorCXsgUjA5MDBfUDJfREVNT0QJLCAweDA4CX0sCisJeyBSMDkwMF9QMl9ETURDRkczCSwgMHhjNAl9LAorCXsgUjA5MDBfUDJfQ0FSRlJFUQksIDB4ZWQJfSwKKwl7IFIwOTAwX1AyX1ROUkNGRzIJLCAweDAyCX0sCisJeyBSMDkwMF9QMl9UTlJDRkczCSwgMHgwMgl9LAorCXsgUjA5MDBfUDJfTERUCQksIDB4ZDAJfSwKKwl7IFIwOTAwX1AyX0xEVDIJCSwgMHhiOAl9LAorCXsgUjA5MDBfUDJfVE1HQ0ZHCSwgMHhkMgl9LAorCXsgUjA5MDBfUDJfVE1HVEhSSVNFCSwgMHgyMAl9LAorCXsgUjA5MDBfUDJfVE1HVEhGQUxMCSwgMHgwMAl9LAorCXsgUjA5MDBfUDJfRkVDU1BZCSwgMHg4OAl9LAorCXsgUjA5MDBfUDJfRlNQWURBVEEJLCAweDNhCX0sCisJeyBSMDkwMF9QMl9GQkVSQ1BUNAksIDB4MDAJfSwKKwl7IFIwOTAwX1AyX0ZTUFlCRVIJLCAweDEwCX0sCisJeyBSMDkwMF9QMl9FUlJDVFJMMQksIDB4MzUJfSwKKwl7IFIwOTAwX1AyX0VSUkNUUkwyCSwgMHhjMQl9LAorCXsgUjA5MDBfUDJfQ0ZSSUNGRwksIDB4ZjgJfSwKKwl7IFIwOTAwX1AyX05PU0NGRwksIDB4MWMJfSwKKwl7IFIwOTAwX1AyX0RNRFQwTQksIDB4MjAJfSwKKwl7IFIwOTAwX1AyX0NPUlJFTE1BTlQJLCAweDcwCX0sCisJeyBSMDkwMF9QMl9DT1JSRUxBQlMJLCAweDg4CX0sCisJeyBSMDkwMF9QMl9BR0MyTwksIDB4NWIJfSwKKwl7IFIwOTAwX1AyX0FHQzJSRUYJLCAweDM4CX0sCisJeyBSMDkwMF9QMl9DQVJDRkcJLCAweGU0CX0sCisJeyBSMDkwMF9QMl9BQ0xDCQksIDB4MUEJfSwKKwl7IFIwOTAwX1AyX0JDTEMJCSwgMHgwOQl9LAorCXsgUjA5MDBfUDJfQ0FSSERSCSwgMHgwOAl9LAorCXsgUjA5MDBfUDJfS1JFRlRNRwksIDB4YzEJfSwKKwl7IFIwOTAwX1AyX1NGUlVQUkFUSU8JLCAweGYwCX0sCisJeyBSMDkwMF9QMl9TRlJMT1dSQVRJTwksIDB4NzAJfSwKKwl7IFIwOTAwX1AyX1NGUlNURVAJLCAweDU4CX0sCisJeyBSMDkwMF9QMl9UTUdDRkcyCSwgMHgwMQl9LAorCXsgUjA5MDBfUDJfQ0FSMkNGRwksIDB4MjYJfSwKKwl7IFIwOTAwX1AyX0JDTEMyUzJRCSwgMHg4Ngl9LAorCXsgUjA5MDBfUDJfQkNMQzJTMjgJLCAweDg2CX0sCisJeyBSMDkwMF9QMl9TTUFQQ09FRjcJLCAweDc3CX0sCisJeyBSMDkwMF9QMl9TTUFQQ09FRjYJLCAweDg1CX0sCisJeyBSMDkwMF9QMl9TTUFQQ09FRjUJLCAweDc3CX0sCisJeyBSMDkwMF9QMl9UU0NGR0wJLCAweDIwCX0sCisJeyBSMDkwMF9QMl9ETURDRkcyCSwgMHgzYgl9LAorCXsgUjA5MDBfUDJfTU9EQ09ETFNUMAksIDB4ZmYJfSwKKwl7IFIwOTAwX1AyX01PRENPRExTVDEJLCAweGZmCX0sCisJeyBSMDkwMF9QMl9NT0RDT0RMU1QyCSwgMHhmZgl9LAorCXsgUjA5MDBfUDJfTU9EQ09ETFNUMwksIDB4ZmYJfSwKKwl7IFIwOTAwX1AyX01PRENPRExTVDQJLCAweGZmCX0sCisJeyBSMDkwMF9QMl9NT0RDT0RMU1Q1CSwgMHhmZgl9LAorCXsgUjA5MDBfUDJfTU9EQ09ETFNUNgksIDB4ZmYJfSwKKwl7IFIwOTAwX1AyX01PRENPRExTVDcJLCAweGNjCX0sCisJeyBSMDkwMF9QMl9NT0RDT0RMU1Q4CSwgMHhjYwl9LAorCXsgUjA5MDBfUDJfTU9EQ09ETFNUOQksIDB4Y2MJfSwKKwl7IFIwOTAwX1AyX01PRENPRExTVEEJLCAweGNjCX0sCisJeyBSMDkwMF9QMl9NT0RDT0RMU1RCCSwgMHhjYwl9LAorCXsgUjA5MDBfUDJfTU9EQ09ETFNUQwksIDB4Y2MJfSwKKwl7IFIwOTAwX1AyX01PRENPRExTVEQJLCAweGNjCX0sCisJeyBSMDkwMF9QMl9NT0RDT0RMU1RFCSwgMHhjYwl9LAorCXsgUjA5MDBfUDJfTU9EQ09ETFNURgksIDB4Y2YJfSwKKwl7IFIwOTAwX1AxX0RJU1RYQ1RMCSwgMHgyMgl9LAorCXsgUjA5MDBfUDFfRjIyVFgJLCAweGMwCX0sCisJeyBSMDkwMF9QMV9GMjJSWAksIDB4YzAJfSwKKwl7IFIwOTAwX1AxX0RJU1JYQ1RMCSwgMHgwMAl9LAorCXsgUjA5MDBfUDFfVE5SU1RFUFMJLCAweDg3CX0sCisJeyBSMDkwMF9QMV9UTlJHQUlOCSwgMHgwOQl9LAorCXsgUjA5MDBfUDFfRE1EQ0ZHTUQJLCAweGY5CX0sCisJeyBSMDkwMF9QMV9ERU1PRAksIDB4MDgJfSwKKwl7IFIwOTAwX1AxX0RNRENGRzMJLCAweGM0CX0sCisJeyBSMDkwMF9QMV9ETURUME0JLCAweDIwCX0sCisJeyBSMDkwMF9QMV9DQVJGUkVRCSwgMHhlZAl9LAorCXsgUjA5MDBfUDFfVE5SQ0ZHMgksIDB4ODIJfSwKKwl7IFIwOTAwX1AxX1ROUkNGRzMJLCAweDAyCX0sCisJeyBSMDkwMF9QMV9MRFQJCSwgMHhkMAl9LAorCXsgUjA5MDBfUDFfTERUMgkJLCAweGI4CX0sCisJeyBSMDkwMF9QMV9UTUdDRkcJLCAweGQyCX0sCisJeyBSMDkwMF9QMV9UTUdUSFJJU0UJLCAweDIwCX0sCisJeyBSMDkwMF9QMV9UTUdUSEZBTEwJLCAweDAwCX0sCisJeyBSMDkwMF9QMV9TRlJVUFJBVElPCSwgMHhmMAl9LAorCXsgUjA5MDBfUDFfU0ZSTE9XUkFUSU8JLCAweDcwCX0sCisJeyBSMDkwMF9QMV9UU0NGR0wJLCAweDIwCX0sCisJeyBSMDkwMF9QMV9GRUNTUFkJLCAweDg4CX0sCisJeyBSMDkwMF9QMV9GU1BZREFUQQksIDB4M2EJfSwKKwl7IFIwOTAwX1AxX0ZCRVJDUFQ0CSwgMHgwMAl9LAorCXsgUjA5MDBfUDFfRlNQWUJFUgksIDB4MTAJfSwKKwl7IFIwOTAwX1AxX0VSUkNUUkwxCSwgMHgzNQl9LAorCXsgUjA5MDBfUDFfRVJSQ1RSTDIJLCAweGMxCX0sCisJeyBSMDkwMF9QMV9DRlJJQ0ZHCSwgMHhmOAl9LAorCXsgUjA5MDBfUDFfTk9TQ0ZHCSwgMHgxYwl9LAorCXsgUjA5MDBfUDFfQ09SUkVMTUFOVAksIDB4NzAJfSwKKwl7IFIwOTAwX1AxX0NPUlJFTEFCUwksIDB4ODgJfSwKKwl7IFIwOTAwX1AxX0FHQzJPCSwgMHg1Ygl9LAorCXsgUjA5MDBfUDFfQUdDMlJFRgksIDB4MzgJfSwKKwl7IFIwOTAwX1AxX0NBUkNGRwksIDB4ZTQJfSwKKwl7IFIwOTAwX1AxX0FDTEMJCSwgMHgxQQl9LAorCXsgUjA5MDBfUDFfQkNMQwkJLCAweDA5CX0sCisJeyBSMDkwMF9QMV9DQVJIRFIJLCAweDA4CX0sCisJeyBSMDkwMF9QMV9LUkVGVE1HCSwgMHhjMQl9LAorCXsgUjA5MDBfUDFfU0ZSU1RFUAksIDB4NTgJfSwKKwl7IFIwOTAwX1AxX1RNR0NGRzIJLCAweDAxCX0sCisJeyBSMDkwMF9QMV9DQVIyQ0ZHCSwgMHgyNgl9LAorCXsgUjA5MDBfUDFfQkNMQzJTMlEJLCAweDg2CX0sCisJeyBSMDkwMF9QMV9CQ0xDMlMyOAksIDB4ODYJfSwKKwl7IFIwOTAwX1AxX1NNQVBDT0VGNwksIDB4NzcJfSwKKwl7IFIwOTAwX1AxX1NNQVBDT0VGNgksIDB4ODUJfSwKKwl7IFIwOTAwX1AxX1NNQVBDT0VGNQksIDB4NzcJfSwKKwl7IFIwOTAwX1AxX0RNRENGRzIJLCAweDNiCX0sCisJeyBSMDkwMF9QMV9NT0RDT0RMU1QwCSwgMHhmZgl9LAorCXsgUjA5MDBfUDFfTU9EQ09ETFNUMQksIDB4ZmYJfSwKKwl7IFIwOTAwX1AxX01PRENPRExTVDIJLCAweGZmCX0sCisJeyBSMDkwMF9QMV9NT0RDT0RMU1QzCSwgMHhmZgl9LAorCXsgUjA5MDBfUDFfTU9EQ09ETFNUNAksIDB4ZmYJfSwKKwl7IFIwOTAwX1AxX01PRENPRExTVDUJLCAweGZmCX0sCisJeyBSMDkwMF9QMV9NT0RDT0RMU1Q2CSwgMHhmZgl9LAorCXsgUjA5MDBfUDFfTU9EQ09ETFNUNwksIDB4Y2MJfSwKKwl7IFIwOTAwX1AxX01PRENPRExTVDgJLCAweGNjCX0sCisJeyBSMDkwMF9QMV9NT0RDT0RMU1Q5CSwgMHhjYwl9LAorCXsgUjA5MDBfUDFfTU9EQ09ETFNUQQksIDB4Y2MJfSwKKwl7IFIwOTAwX1AxX01PRENPRExTVEIJLCAweGNjCX0sCisJeyBSMDkwMF9QMV9NT0RDT0RMU1RDCSwgMHhjYwl9LAorCXsgUjA5MDBfUDFfTU9EQ09ETFNURAksIDB4Y2MJfSwKKwl7IFIwOTAwX1AxX01PRENPRExTVEUJLCAweGNjCX0sCisJeyBSMDkwMF9QMV9NT0RDT0RMU1RGCSwgMHhjZgl9LAorCXsgUjA5MDBfR0VOQ0ZHCQksIDB4MWQJfSwKKwl7IFIwOTAwX05CSVRFUl9ORjQJLCAweDM3CX0sCisJeyBSMDkwMF9OQklURVJfTkY1CSwgMHgyOQl9LAorCXsgUjA5MDBfTkJJVEVSX05GNgksIDB4MzcJfSwKKwl7IFIwOTAwX05CSVRFUl9ORjcJLCAweDMzCX0sCisJeyBSMDkwMF9OQklURVJfTkY4CSwgMHgzMQl9LAorCXsgUjA5MDBfTkJJVEVSX05GOQksIDB4MmYJfSwKKwl7IFIwOTAwX05CSVRFUl9ORjEwCSwgMHgzOQl9LAorCXsgUjA5MDBfTkJJVEVSX05GMTEJLCAweDNhCX0sCisJeyBSMDkwMF9OQklURVJfTkYxMgksIDB4MjkJfSwKKwl7IFIwOTAwX05CSVRFUl9ORjEzCSwgMHgzNwl9LAorCXsgUjA5MDBfTkJJVEVSX05GMTQJLCAweDMzCX0sCisJeyBSMDkwMF9OQklURVJfTkYxNQksIDB4MmYJfSwKKwl7IFIwOTAwX05CSVRFUl9ORjE2CSwgMHgzOQl9LAorCXsgUjA5MDBfTkJJVEVSX05GMTcJLCAweDNhCX0sCisJeyBSMDkwMF9OQklURVJOT0VSUgksIDB4MDQJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkY0CSwgMHgwQwl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjUJLCAweDBGCX0sCisJeyBSMDkwMF9HQUlOTExSX05GNgksIDB4MTEJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkY3CSwgMHgxNAl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjgJLCAweDE3CX0sCisJeyBSMDkwMF9HQUlOTExSX05GOQksIDB4MTkJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkYxMAksIDB4MjAJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkYxMQksIDB4MjEJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkYxMgksIDB4MEQJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkYxMwksIDB4MEYJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkYxNAksIDB4MTMJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkYxNQksIDB4MUEJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkYxNgksIDB4MUYJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkYxNwksIDB4MjEJfSwKKwl7IFIwOTAwX1JDQ0ZHSAkJLCAweDIwCX0sCisJeyBSMDkwMF9QMV9GRUNNCQksIDB4MDEJfSwgLypkaXNhYmxlIERTUyBtb2RlcyovCisJeyBSMDkwMF9QMl9GRUNNCQksIDB4MDEJfSwgLypkaXNhYmxlIERTUyBtb2RlcyovCisJeyBSMDkwMF9QMV9QUlZJVAksIDB4MkYJfSwgLypkaXNhYmxlIHB1bmN0dXJlIHJhdGUgNi83Ki8KKwl7IFIwOTAwX1AyX1BSVklUCSwgMHgyRgl9LCAvKmRpc2FibGUgcHVuY3R1cmUgcmF0ZSA2LzcqLworCXsgUjA5MDBfU1RST1VUMUNGRwksIDB4NGMJfSwKKwl7IFIwOTAwX1NUUk9VVDJDRkcJLCAweDRjCX0sCisJeyBSMDkwMF9DTEtPVVQxQ0ZHCSwgMHg1MAl9LAorCXsgUjA5MDBfQ0xLT1VUMkNGRwksIDB4NTAJfSwKKwl7IFIwOTAwX0RQTjFDRkcJCSwgMHg0YQl9LAorCXsgUjA5MDBfRFBOMkNGRwkJLCAweDRhCX0sCisJeyBSMDkwMF9EQVRBNzFDRkcJLCAweDUyCX0sCisJeyBSMDkwMF9EQVRBNzJDRkcJLCAweDUyCX0sCisJeyBSMDkwMF9QMV9UU0NGR00JLCAweGMwCX0sCisJeyBSMDkwMF9QMl9UU0NGR00JLCAweGMwCX0sCisJeyBSMDkwMF9QMV9UU0NGR0gJLCAweGUwCX0sIC8qIERWQi1DSSB0aW1pbmdzICovCisJeyBSMDkwMF9QMl9UU0NGR0gJLCAweGUwCX0sIC8qIERWQi1DSSB0aW1pbmdzICovCisJeyBSMDkwMF9QMV9UU1NQRUVECSwgMHg0MAl9LAorCXsgUjA5MDBfUDJfVFNTUEVFRAksIDB4NDAJfSwKK307CisKK3N0YXRpYyBjb25zdCB1MTYgU1RWMDkwMF9DdXQyMF9BZGRPblZhbFszMl1bMl0gPSB7CisJeyBSMDkwMF9QMl9ETURDRkczCSwgMHhlOAl9LAorCXsgUjA5MDBfUDJfRE1EQ0ZHNAksIDB4MTAJfSwKKwl7IFIwOTAwX1AyX0NBUkZSRVEJLCAweDM4CX0sCisJeyBSMDkwMF9QMl9DQVJIRFIJLCAweDIwCX0sCisJeyBSMDkwMF9QMl9LUkVGVE1HCSwgMHg1YQl9LAorCXsgUjA5MDBfUDJfU01BUENPRUY3CSwgMHgwNgl9LAorCXsgUjA5MDBfUDJfU01BUENPRUY2CSwgMHgwMAl9LAorCXsgUjA5MDBfUDJfU01BUENPRUY1CSwgMHgwNAl9LAorCXsgUjA5MDBfUDJfTk9TQ0ZHCSwgMHgwYwl9LAorCXsgUjA5MDBfUDFfRE1EQ0ZHMwksIDB4ZTgJfSwKKwl7IFIwOTAwX1AxX0RNRENGRzQJLCAweDEwCX0sCisJeyBSMDkwMF9QMV9DQVJGUkVRCSwgMHgzOAl9LAorCXsgUjA5MDBfUDFfQ0FSSERSCSwgMHgyMAl9LAorCXsgUjA5MDBfUDFfS1JFRlRNRwksIDB4NWEJfSwKKwl7IFIwOTAwX1AxX1NNQVBDT0VGNwksIDB4MDYJfSwKKwl7IFIwOTAwX1AxX1NNQVBDT0VGNgksIDB4MDAJfSwKKwl7IFIwOTAwX1AxX1NNQVBDT0VGNQksIDB4MDQJfSwKKwl7IFIwOTAwX1AxX05PU0NGRwksIDB4MGMJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkY0CSwgMHgyMQl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjUJLCAweDIxCX0sCisJeyBSMDkwMF9HQUlOTExSX05GNgksIDB4MjAJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkY3CSwgMHgxRgl9LAorCXsgUjA5MDBfR0FJTkxMUl9ORjgJLCAweDFFCX0sCisJeyBSMDkwMF9HQUlOTExSX05GOQksIDB4MUUJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkYxMAksIDB4MUQJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkYxMQksIDB4MUIJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkYxMgksIDB4MjAJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkYxMwksIDB4MjAJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkYxNAksIDB4MjAJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkYxNQksIDB4MjAJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkYxNgksIDB4MjAJfSwKKwl7IFIwOTAwX0dBSU5MTFJfTkYxNwksIDB4MjEJfQorCit9OworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3ByaXYuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3ByaXYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi43NjJkNWFmCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfcHJpdi5oCkBAIC0wLDAgKzEsNDMwIEBACisvKgorICogc3R2MDkwMF9wcml2LmgKKyAqCisgKiBEcml2ZXIgZm9yIFNUIFNUVjA5MDAgc2F0ZWxsaXRlIGRlbW9kdWxhdG9yIElDLgorICoKKyAqIENvcHlyaWdodCAoQykgU1QgTWljcm9lbGVjdHJvbmljcy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOZXRVUCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBuZXR1cC5ydT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBTVFYwOTAwX1BSSVZfSAorI2RlZmluZSBTVFYwOTAwX1BSSVZfSAorCisjaW5jbHVkZSA8bGludXgvaTJjLmg+CisKKyNkZWZpbmUgQUJTKFgpICgoWCkgPCAwID8gKC0xICogKFgpKSA6IChYKSkKKyNkZWZpbmUgSU5SQU5HRShYLCBZLCBaKSAoKCgoWCkgPD0gKFkpKSAmJiAoKFkpIDw9IChaKSkpIFwKKwkJfHwgKCgoWikgPD0gKFkpKSAmJiAoKFkpIDw9IChYKSkpID8gMSA6IDApCisKKyNpZm5kZWYgTUFLRVdPUkQKKyNkZWZpbmUgTUFLRVdPUkQoWCwgWSkgKCgoWCkgPDwgOCkgKyAoWSkpCisjZW5kaWYKKworI2RlZmluZSBMU0IoWCkgKCgoWCkgJiAweEZGKSkKKyNkZWZpbmUgTVNCKFkpICgoKFkpID4+IDgpICYgMHhGRikKKworI2lmbmRlZiBUUlVFCisjZGVmaW5lIFRSVUUgKDEgPT0gMSkKKyNlbmRpZgorI2lmbmRlZiBGQUxTRQorI2RlZmluZSBGQUxTRSAoIVRSVUUpCisjZW5kaWYKKworI2RlZmluZQlkbWRfcmVnKGEsIGIsIGMpIFwKKwlkbyB7IFwKKwkJYSA9IDA7IFwKKwkJc3dpdGNoIChkZW1vZCkgeyBcCisJCWNhc2UgU1RWMDkwMF9ERU1PRF8xOiBcCisJCWRlZmF1bHQ6IFwKKwkJCWEgPSBiOyBcCisJCQlicmVhazsgXAorCQljYXNlIFNUVjA5MDBfREVNT0RfMjogXAorCQkJYSA9IGM7IFwKKwkJCWJyZWFrOyBcCisJCX0gXAorCX0gd2hpbGUgKDApCisKKyNkZWZpbmUgZG1kX2Nob29zZShhLCBiKQkoZGVtb2QgPSBTVFYwOTAwX0RFTU9EXzIgPyBiIDogYSkpCisKK3N0YXRpYyBpbnQgc3R2ZGVidWc7CisKKyNkZWZpbmUgZHByaW50ayhhcmdzLi4uKSBcCisJZG8geyBcCisJCWlmIChzdHZkZWJ1ZykgXAorCQkJcHJpbnRrKEtFUk5fREVCVUcgYXJncyk7IFwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIFNUVjA5MDBfTUFYTE9PS1VQU0laRSA1MDAKKyNkZWZpbmUgU1RWMDkwMF9CTElORF9TRUFSQ0hfQUdDMl9USCA3MDAKKworLyogT25lIHBvaW50IG9mIHRoZSBsb29rdXAgdGFibGUgKi8KK3N0cnVjdCBzdHYwMDBfbG9va3BvaW50IHsKKwlzMzIgcmVhbHZhbDsvKiByZWFsIHZhbHVlICovCisJczMyIHJlZ3ZhbDsvKiBiaW5hcnkgdmFsdWUgKi8KK307CisKKy8qIExvb2t1cCB0YWJsZSBkZWZpbml0aW9uICovCitzdHJ1Y3Qgc3R2MDkwMF90YWJsZXsKKwlzMzIgc2l6ZTsvKiBTaXplIG9mIHRoZSBsb29rdXAgdGFibGUgKi8KKwlzdHJ1Y3Qgc3R2MDAwX2xvb2twb2ludCB0YWJsZVtTVFYwOTAwX01BWExPT0tVUFNJWkVdOy8qIExvb2t1cCB0YWJsZSAqLworfTsKKworZW51bSBmZV9zdHYwOTAwX2Vycm9yIHsKKwlTVFYwOTAwX05PX0VSUk9SID0gMCwKKwlTVFYwOTAwX0lOVkFMSURfSEFORExFLAorCVNUVjA5MDBfQkFEX1BBUkFNRVRFUiwKKwlTVFYwOTAwX0kyQ19FUlJPUiwKKwlTVFYwOTAwX1NFQVJDSF9GQUlMRUQsCit9OworCitlbnVtIGZlX3N0djA5MDBfY2xvY2tfdHlwZSB7CisJU1RWMDkwMF9VU0VfUkVHSVNURVJTX0RFRkFVTFQsCisJU1RWMDkwMF9TRVJJQUxfUFVOQ1RfQ0xPQ0ssLypTZXJpYWwgcHVuY3R1cmVkIGNsb2NrICovCisJU1RWMDkwMF9TRVJJQUxfQ09OVF9DTE9DSywvKlNlcmlhbCBjb250aW51ZXMgY2xvY2sgKi8KKwlTVFYwOTAwX1BBUkFMTEVMX1BVTkNUX0NMT0NLLC8qUGFyYWxsZWwgcHVuY3R1cmVkIGNsb2NrICovCisJU1RWMDkwMF9EVkJDSV9DTE9DSy8qUGFyYWxsZWwgY29udGludWVzIGNsb2NrIDogRFZCQ0kgKi8KK307CisKK2VudW0gZmVfc3R2MDkwMF9zZWFyY2hfc3RhdGUgeworCVNUVjA5MDBfU0VBUkNIID0gMCwKKwlTVFYwOTAwX1BMSF9ERVRFQ1RFRCwKKwlTVFYwOTAwX0RWQlMyX0ZPVU5ELAorCVNUVjA5MDBfRFZCU19GT1VORAorCit9OworCitlbnVtIGZlX3N0djA5MDBfbGRwY19zdGF0ZSB7CisJU1RWMDkwMF9QQVRIMV9PRkZfUEFUSDJfT0ZGID0gMCwKKwlTVFYwOTAwX1BBVEgxX09OX1BBVEgyX09GRiA9IDEsCisJU1RWMDkwMF9QQVRIMV9PRkZfUEFUSDJfT04gPSAyLAorCVNUVjA5MDBfUEFUSDFfT05fUEFUSDJfT04gPSAzCit9OworCitlbnVtIGZlX3N0djA5MDBfc2lnbmFsX3R5cGUgeworCVNUVjA5MDBfTk9BR0MxID0gMCwKKwlTVFYwOTAwX0FHQzFPSywKKwlTVFYwOTAwX05PVElNSU5HLAorCVNUVjA5MDBfQU5BTE9HQ0FSUklFUiwKKwlTVFYwOTAwX1RJTUlOR09LLAorCVNUVjA5MDBfTk9BR0MyLAorCVNUVjA5MDBfQUdDMk9LLAorCVNUVjA5MDBfTk9DQVJSSUVSLAorCVNUVjA5MDBfQ0FSUklFUk9LLAorCVNUVjA5MDBfTk9EQVRBLAorCVNUVjA5MDBfREFUQU9LLAorCVNUVjA5MDBfT1VUT0ZSQU5HRSwKKwlTVFYwOTAwX1JBTkdFT0sKK307CisKK2VudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0geworCVNUVjA5MDBfREVNT0RfMSwKKwlTVFYwOTAwX0RFTU9EXzIKK307CisKK2VudW0gZmVfc3R2MDkwMF90cmFja2luZ19zdGFuZGFyZCB7CisJU1RWMDkwMF9EVkJTMV9TVEFOREFSRCwvKiBGb3VuZCBTdGFuZGFyZCovCisJU1RWMDkwMF9EVkJTMl9TVEFOREFSRCwKKwlTVFYwOTAwX0RTU19TVEFOREFSRCwKKwlTVFYwOTAwX1RVUkJPQ09ERV9TVEFOREFSRCwKKwlTVFYwOTAwX1VOS05PV05fU1RBTkRBUkQKK307CisKK2VudW0gZmVfc3R2MDkwMF9zZWFyY2hfc3RhbmRhcmQgeworCVNUVjA5MDBfQVVUT19TRUFSQ0gsCisJU1RWMDkwMF9TRUFSQ0hfRFZCUzEsLyogU2VhcmNoIFN0YW5kYXJkKi8KKwlTVFYwOTAwX1NFQVJDSF9EVkJTMiwKKwlTVFYwOTAwX1NFQVJDSF9EU1MsCisJU1RWMDkwMF9TRUFSQ0hfVFVSQk9DT0RFCit9OworCitlbnVtIGZlX3N0djA5MDBfc2VhcmNoX2FsZ28geworCVNUVjA5MDBfQkxJTkRfU0VBUkNILC8qIG9mZnNldCBmcmVxIGFuZCBTUiBhcmUgVW5rbm93biAqLworCVNUVjA5MDBfQ09MRF9TVEFSVCwvKiBvbmx5IHRoZSBTUiBpcyBrbm93biAqLworCVNUVjA5MDBfV0FSTV9TVEFSVC8qIG9mZnNldCBmcmVxIGFuZCBTUiBhcmUga25vd24gKi8KK307CisKK2VudW0gZmVfc3R2MDkwMF9tb2R1bGF0aW9uIHsKKwlTVFYwOTAwX1FQU0ssCisJU1RWMDkwMF84UFNLLAorCVNUVjA5MDBfMTZBUFNLLAorCVNUVjA5MDBfMzJBUFNLLAorCVNUVjA5MDBfVU5LTk9XTgorfTsKKworZW51bSBmZV9zdHYwOTAwX21vZGNvZGUgeworCVNUVjA5MDBfRFVNTVlfUExGLAorCVNUVjA5MDBfUVBTS18xNCwKKwlTVFYwOTAwX1FQU0tfMTMsCisJU1RWMDkwMF9RUFNLXzI1LAorCVNUVjA5MDBfUVBTS18xMiwKKwlTVFYwOTAwX1FQU0tfMzUsCisJU1RWMDkwMF9RUFNLXzIzLAorCVNUVjA5MDBfUVBTS18zNCwKKwlTVFYwOTAwX1FQU0tfNDUsCisJU1RWMDkwMF9RUFNLXzU2LAorCVNUVjA5MDBfUVBTS184OSwKKwlTVFYwOTAwX1FQU0tfOTEwLAorCVNUVjA5MDBfOFBTS18zNSwKKwlTVFYwOTAwXzhQU0tfMjMsCisJU1RWMDkwMF84UFNLXzM0LAorCVNUVjA5MDBfOFBTS181NiwKKwlTVFYwOTAwXzhQU0tfODksCisJU1RWMDkwMF84UFNLXzkxMCwKKwlTVFYwOTAwXzE2QVBTS18yMywKKwlTVFYwOTAwXzE2QVBTS18zNCwKKwlTVFYwOTAwXzE2QVBTS180NSwKKwlTVFYwOTAwXzE2QVBTS181NiwKKwlTVFYwOTAwXzE2QVBTS184OSwKKwlTVFYwOTAwXzE2QVBTS185MTAsCisJU1RWMDkwMF8zMkFQU0tfMzQsCisJU1RWMDkwMF8zMkFQU0tfNDUsCisJU1RWMDkwMF8zMkFQU0tfNTYsCisJU1RWMDkwMF8zMkFQU0tfODksCisJU1RWMDkwMF8zMkFQU0tfOTEwLAorCVNUVjA5MDBfTU9EQ09ERV9VTktOT1dOCit9OworCitlbnVtIGZlX3N0djA5MDBfZmVjIHsvKkRWQlMxLCBEU1MgYW5kIHR1cmJvIGNvZGUgcHVuY3R1cmUgcmF0ZSovCisJU1RWMDkwMF9GRUNfMV8yID0gMCwKKwlTVFYwOTAwX0ZFQ18yXzMsCisJU1RWMDkwMF9GRUNfM180LAorCVNUVjA5MDBfRkVDXzRfNSwvKmZvciB0dXJibyBjb2RlIG9ubHkqLworCVNUVjA5MDBfRkVDXzVfNiwKKwlTVFYwOTAwX0ZFQ182XzcsLypmb3IgRFNTIG9ubHkgKi8KKwlTVFYwOTAwX0ZFQ183XzgsCisJU1RWMDkwMF9GRUNfOF85LC8qZm9yIHR1cmJvIGNvZGUgb25seSovCisJU1RWMDkwMF9GRUNfVU5LTk9XTgorfTsKKworZW51bSBmZV9zdHYwOTAwX2ZyYW1lX2xlbmd0aCB7CisJU1RWMDkwMF9MT05HX0ZSQU1FLAorCVNUVjA5MDBfU0hPUlRfRlJBTUUKK307CisKK2VudW0gZmVfc3R2MDkwMF9waWxvdCB7CisJU1RWMDkwMF9QSUxPVFNfT0ZGLAorCVNUVjA5MDBfUElMT1RTX09OCit9OworCitlbnVtIGZlX3N0djA5MDBfcm9sbG9mZiB7CisJU1RWMDkwMF8zNSwKKwlTVFYwOTAwXzI1LAorCVNUVjA5MDBfMjAKK307CisKK2VudW0gZmVfc3R2MDkwMF9zZWFyY2hfaXEgeworCVNUVjA5MDBfSVFfQVVUTywKKwlTVFYwOTAwX0lRX0FVVE9fTk9STUFMX0ZJUlNULAorCVNUVjA5MDBfSVFfRk9SQ0VfTk9STUFMLAorCVNUVjA5MDBfSVFfRk9SQ0VfU1dBUFBFRAorfTsKKworZW51bSBzdHYwOTAwX2lxX2ludmVyc2lvbiB7CisJU1RWMDkwMF9JUV9OT1JNQUwsCisJU1RWMDkwMF9JUV9TV0FQUEVECit9OworCitlbnVtIGZlX3N0djA5MDBfZGlzZXFjX21vZGUgeworCVNUVjA5MDBfMjJLSFpfQ29udGludWVzID0gMCwKKwlTVFYwOTAwX0RJU0VRQ18yXzNfUFdNID0gMiwKKwlTVFYwOTAwX0RJU0VRQ18zXzNfUFdNID0gMywKKwlTVFYwOTAwX0RJU0VRQ18yXzNfRU5WRUxPUCA9IDQsCisJU1RWMDkwMF9ESVNFUUNfM18zX0VOVkVMT1AgPSA1Cit9OworCitlbnVtIGZlX3N0djA5MDBfZGVtb2RfbW9kZSB7CisJU1RWMDkwMF9TSU5HTEUgPSAwLAorCVNUVjA5MDBfRFVBTAorfTsKKworc3RydWN0IHN0djA5MDBfaW5pdF9wYXJhbXN7CisJdTMyCWRtZF9yZWZfY2xrOy8qIFJlZnJlbmNlLElucHV0IGNsb2NrIGZvciB0aGUgZGVtb2QgaW4gSHogKi8KKworCS8qIERlbW9kdWxhdG9yIFR5cGUgKHNpbmdsZSBkZW1vZCBvciBkdWFsIGRlbW9kKSAqLworCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9tb2RlCWRlbW9kX21vZGU7CisJZW51bSBmZV9zdHYwOTAwX3JvbGxvZmYJCXJvbGxvZmY7CisJZW51bSBmZV9zdHYwOTAwX2Nsb2NrX3R5cGUJcGF0aDFfdHNfY2xvY2s7CisKKwl1OAl0dW4xX21hZGRyZXNzOworCWludAl0dW5lcjFfYWRjOworCisJLyogSVEgZnJvbSB0aGUgdHVuZXIxIHRvIHRoZSBkZW1vZCAqLworCWVudW0gc3R2MDkwMF9pcV9pbnZlcnNpb24JdHVuMV9pcV9pbnZlcnNpb247CisJZW51bSBmZV9zdHYwOTAwX2Nsb2NrX3R5cGUJcGF0aDJfdHNfY2xvY2s7CisKKwl1OAl0dW4yX21hZGRyZXNzOworCWludAl0dW5lcjJfYWRjOworCisJLyogSVEgZnJvbSB0aGUgdHVuZXIyIHRvIHRoZSBkZW1vZCAqLworCWVudW0gc3R2MDkwMF9pcV9pbnZlcnNpb24JdHVuMl9pcV9pbnZlcnNpb247Cit9OworCitzdHJ1Y3Qgc3R2MDkwMF9zZWFyY2hfcGFyYW1zIHsKKwllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtCXBhdGg7LyogUGF0aCBVc2VkIGRlbW9kMSBvciAyICovCisKKwl1MzIJZnJlcXVlbmN5Oy8qIFRyYW5zcG9uZGVyIGZyZXF1ZW5jeSAoaW4gS0h6KSAqLworCXUzMglzeW1ib2xfcmF0ZTsvKiBUcmFuc3BvbmRlciBzeW1ib2wgcmF0ZSAgKGluIGJkcykqLworCXUzMglzZWFyY2hfcmFuZ2U7LyogUmFuZ2Ugb2YgdGhlIHNlYXJjaCAoaW4gSHopICovCisKKwllbnVtIGZlX3N0djA5MDBfc2VhcmNoX3N0YW5kYXJkCXN0YW5kYXJkOworCWVudW0gZmVfc3R2MDkwMF9tb2R1bGF0aW9uCW1vZHVsYXRpb247CisJZW51bSBmZV9zdHYwOTAwX2ZlYwkJZmVjOworCWVudW0gZmVfc3R2MDkwMF9tb2Rjb2RlCQltb2Rjb2RlOworCWVudW0gZmVfc3R2MDkwMF9zZWFyY2hfaXEJaXFfaW52ZXJzaW9uOworCWVudW0gZmVfc3R2MDkwMF9zZWFyY2hfYWxnbwlzZWFyY2hfYWxnbzsKKworfTsKKworc3RydWN0IHN0djA5MDBfc2lnbmFsX2luZm8geworCWludAlsb2NrZWQ7LyogVHJhbnNwb25kZXIgbG9ja2VkICovCisJdTMyCWZyZXF1ZW5jeTsvKiBUcmFuc3BvbmRlciBmcmVxdWVuY3kgKGluIEtIeikgKi8KKwl1MzIJc3ltYm9sX3JhdGU7LyogVHJhbnNwb25kZXIgc3ltYm9sIHJhdGUgIChpbiBNYmRzKSAqLworCisJZW51bSBmZV9zdHYwOTAwX3RyYWNraW5nX3N0YW5kYXJkCXN0YW5kYXJkOworCWVudW0gZmVfc3R2MDkwMF9mZWMJCQlmZWM7CisJZW51bSBmZV9zdHYwOTAwX21vZGNvZGUJCQltb2Rjb2RlOworCWVudW0gZmVfc3R2MDkwMF9tb2R1bGF0aW9uCQltb2R1bGF0aW9uOworCWVudW0gZmVfc3R2MDkwMF9waWxvdAkJCXBpbG90OworCWVudW0gZmVfc3R2MDkwMF9mcmFtZV9sZW5ndGgJCWZyYW1lX2xlbmd0aDsKKwllbnVtIHN0djA5MDBfaXFfaW52ZXJzaW9uCQlzcGVjdHJ1bTsKKwllbnVtIGZlX3N0djA5MDBfcm9sbG9mZgkJCXJvbGxvZmY7CisKKwlzMzIgUG93ZXI7LyogUG93ZXIgb2YgdGhlIFJGIHNpZ25hbCAoZEJtKSAqLworCXMzMiBDX047LyogQ2FycmllciB0byBub2lzZSByYXRpbyAoZEIgeDEwKSovCisJdTMyIEJFUjsvKiBCaXQgZXJyb3IgcmF0ZSAoeDEwXjcpICovCisKK307CisKK3N0cnVjdCBzdHYwOTAwX2ludGVybmFseworCXMzMglxdWFydHo7CisJczMyCW1jbGs7CisJLyogbWFudWFsIFJvbGxPZmYgZm9yIERWQlMxL0RTUyBvbmx5ICovCisJZW51bSBmZV9zdHYwOTAwX3JvbGxvZmYJCXJvbGxvZmY7CisJLyogRGVtb2R1bGF0b3IgdXNlIGZvciBzaW5nbGUgZGVtb2Qgb3IgZm9yIGR1YWwgZGVtb2QpICovCisJZW51bSBmZV9zdHYwOTAwX2RlbW9kX21vZGUJZGVtb2RfbW9kZTsKKworCS8qRGVtb2QgMSovCisJczMyCXR1bmVyMV9mcmVxOworCXMzMgl0dW5lcjFfYnc7CisJczMyCWRtZDFfc3ltYm9sX3JhdGU7CisJczMyCWRtZDFfc3JjaF9yYW5nZTsKKworCS8qIGFsZ29yaXRobSBmb3Igc2VhcmNoIEJsaW5kLCBDb2xkIG9yIFdhcm0qLworCWVudW0gZmVfc3R2MDkwMF9zZWFyY2hfYWxnbwlkbWQxX3NyY2hfYWxnbzsKKwkvKiBzZWFyY2ggc3RhbmRhcmQ6IEF1dG8sIERWQlMxL0RTUyBvbmx5IG9yIERWQlMyIG9ubHkqLworCWVudW0gZmVfc3R2MDkwMF9zZWFyY2hfc3RhbmRhcmQJZG1kMV9zcmNoX3N0YW5kYXJkOworCS8qIGludmVyc2lvbiBzZWFyY2ggOiBhdXRvLCBhdXRvIG5vcm1hIGZpcnN0LCBub3JtYWwgb3IgaW52ZXJ0ZWQgKi8KKwllbnVtIGZlX3N0djA5MDBfc2VhcmNoX2lxCWRtZDFfc3JjaF9pcV9pbnY7CisJZW51bSBmZV9zdHYwOTAwX21vZGNvZGUJCWRtZDFfbW9kY29kZTsKKwllbnVtIGZlX3N0djA5MDBfbW9kdWxhdGlvbglkbWQxX21vZHVsYXRpb247CisJZW51bSBmZV9zdHYwOTAwX2ZlYwkJZG1kMV9mZWM7CisKKwlzdHJ1Y3Qgc3R2MDkwMF9zaWduYWxfaW5mbwlkbWQxX3JzbHRzOworCWVudW0gZmVfc3R2MDkwMF9zaWduYWxfdHlwZQlkbWQxX3N0YXRlOworCisJZW51bSBmZV9zdHYwOTAwX2Vycm9yCQlkbWQxX2VycjsKKworCS8qRGVtb2QgMiovCisJczMyCXR1bmVyMl9mcmVxOworCXMzMgl0dW5lcjJfYnc7CisJczMyCWRtZDJfc3ltYm9sX3JhdGU7CisJczMyCWRtZDJfc3JjaF9yYW5nZTsKKworCWVudW0gZmVfc3R2MDkwMF9zZWFyY2hfYWxnbwlkbWQyX3NyY2hfYWxnbzsKKwllbnVtIGZlX3N0djA5MDBfc2VhcmNoX3N0YW5kYXJkCWRtZDJfc3JjaF9zdG5kcmQ7CisJLyogaW52ZXJzaW9uIHNlYXJjaCA6IGF1dG8sIGF1dG8gbm9ybWFsIGZpcnN0LCBub3JtYWwgb3IgaW52ZXJ0ZWQgKi8KKwllbnVtIGZlX3N0djA5MDBfc2VhcmNoX2lxCWRtZDJfc3JjaF9pcV9pbnY7CisJZW51bSBmZV9zdHYwOTAwX21vZGNvZGUJCWRtZDJfbW9kY29kZTsKKwllbnVtIGZlX3N0djA5MDBfbW9kdWxhdGlvbglkbWQyX21vZHVsYXRpb247CisJZW51bSBmZV9zdHYwOTAwX2ZlYwkJZG1kMl9mZWM7CisKKwkvKiByZXN1bHRzIG9mIHRoZSBzZWFyY2gqLworCXN0cnVjdCBzdHYwOTAwX3NpZ25hbF9pbmZvCWRtZDJfcnNsdHM7CisJLyogY3VycmVudCBzdGF0ZSBvZiB0aGUgc2VhcmNoIGFsZ29yaXRobSAqLworCWVudW0gZmVfc3R2MDkwMF9zaWduYWxfdHlwZQlkbWQyX3N0YXRlOworCisJZW51bSBmZV9zdHYwOTAwX2Vycm9yCQlkbWQyX2VycjsKKworCXN0cnVjdCBpMmNfYWRhcHRlcgkqaTJjX2FkYXA7CisJdTgJCQlpMmNfYWRkcjsKKwl1OAkJCWNsa21vZGU7LyogMCBmb3IgQ0xLSSwgMiBmb3IgWFRBTEkgKi8KKwl1OAkJCWNoaXBfaWQ7CisJZW51bSBmZV9zdHYwOTAwX2Vycm9yCWVycnM7CisJaW50IGRtZHNfdXNlZDsKK307CisKKy8qIHN0YXRlIGZvciBlYWNoIGRlbW9kICovCitzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSB7CisJLyogcG9pbnRlciBmb3IgaW50ZXJuYWwgcGFyYW1zLCBvbmUgZm9yIGVhY2ggcGFpciBvZiBkZW1vZHMgKi8KKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbAkJKmludGVybmFsOworCXN0cnVjdCBpMmNfYWRhcHRlcgkJKmkyY19hZGFwOworCWNvbnN0IHN0cnVjdCBzdHYwOTAwX2NvbmZpZwkqY29uZmlnOworCXN0cnVjdCBkdmJfZnJvbnRlbmQJCWZyb250ZW5kOworCWludCBkZW1vZDsKK307CisKK2V4dGVybiBzMzIgZ2UyY29tcChzMzIgYSwgczMyIHdpZHRoKTsKKworZXh0ZXJuIHZvaWQgc3R2MDkwMF93cml0ZV9yZWcoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCXUxNiByZWdfYWRkciwgdTggcmVnX2RhdGEpOworCitleHRlcm4gdTggc3R2MDkwMF9yZWFkX3JlZyhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJdTE2IHJlZ19hZGRyKTsKKworZXh0ZXJuIHZvaWQgc3R2MDkwMF93cml0ZV9iaXRzKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQl1MzIgbGFiZWwsIHU4IHZhbCk7CisKK2V4dGVybiB1OCBzdHYwOTAwX2dldF9iaXRzKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQl1MzIgbGFiZWwpOworCitleHRlcm4gaW50IHN0djA5MDBfZ2V0X2RlbW9kX2xvY2soc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QsIHMzMiB0aW1lX291dCk7CitleHRlcm4gaW50IHN0djA5MDBfY2hlY2tfc2lnbmFsX3ByZXNlbmNlKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKTsKKworZXh0ZXJuIGVudW0gZmVfc3R2MDkwMF9zaWduYWxfdHlwZSBzdHYwOTAwX2FsZ28oc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpOworCitleHRlcm4gdm9pZCBzdHYwOTAwX3NldF90dW5lcihzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyIGZyZXF1ZW5jeSwKKwkJCQl1MzIgYmFuZHdpZHRoKTsKK2V4dGVybiB2b2lkIHN0djA5MDBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyIGJhbmR3aWR0aCk7CisKK2V4dGVybiB2b2lkIHN0djA5MDBfc3RhcnRfc2VhcmNoKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKTsKKworZXh0ZXJuIHU4IHN0djA5MDBfZ2V0X29wdGltX2NhcnJfbG9vcChzMzIgc3JhdGUsCisJCQkJZW51bSBmZV9zdHYwOTAwX21vZGNvZGUgbW9kY29kZSwKKwkJCQlzMzIgcGlsb3QsIHU4IGNoaXBfaWQpOworCitleHRlcm4gdTggc3R2MDkwMF9nZXRfb3B0aW1fc2hvcnRfY2Fycl9sb29wKHMzMiBzcmF0ZSwKKwkJCQllbnVtIGZlX3N0djA5MDBfbW9kdWxhdGlvbiBtb2R1bGF0aW9uLAorCQkJCXU4IGNoaXBfaWQpOworCitleHRlcm4gdm9pZCBzdHYwOTAwX3N0b3BfYWxsX3MyX21vZGNvZChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCk7CisKK2V4dGVybiB2b2lkIHN0djA5MDBfYWN0aXZhdGVfczJfbW9kY29kZShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCk7CisKK2V4dGVybiB2b2lkIHN0djA5MDBfYWN0aXZhdGVfczJfbW9kY29kZV9zaW5nbGUoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpOworCitleHRlcm4gZW51bSBmZV9zdHYwOTAwX3RyYWNraW5nX3N0YW5kYXJkIHN0djA5MDBfZ2V0X3N0YW5kYXJkKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3JlZy5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfcmVnLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMjY0ZjljZgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHYwOTAwX3JlZy5oCkBAIC0wLDAgKzEsMzc4NyBAQAorLyoKKyAqIHN0djA5MDBfcmVnLmgKKyAqCisgKiBEcml2ZXIgZm9yIFNUIFNUVjA5MDAgc2F0ZWxsaXRlIGRlbW9kdWxhdG9yIElDLgorICoKKyAqIENvcHlyaWdodCAoQykgU1QgTWljcm9lbGVjdHJvbmljcy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOZXRVUCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBuZXR1cC5ydT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBTVFYwOTAwX1JFR19ICisjZGVmaW5lIFNUVjA5MDBfUkVHX0gKKworLypNSUQqLworI2RlZmluZSBSMDkwMF9NSUQgIDB4ZjEwMAorI2RlZmluZSBGMDkwMF9NQ0hJUF9JREVOVCAgMHhmMTAwMDBmMAorI2RlZmluZSBGMDkwMF9NUkVMRUFTRSAgMHhmMTAwMDAwZgorCisvKkRBQ1IxKi8KKyNkZWZpbmUgUjA5MDBfREFDUjEgIDB4ZjExMworI2RlZmluZSBGMDkwMF9EQUNfTU9ERSAgMHhmMTEzMDBlMAorI2RlZmluZSBGMDkwMF9EQUNfVkFMVUUxICAweGYxMTMwMDBmCisKKy8qREFDUjIqLworI2RlZmluZSBSMDkwMF9EQUNSMiAgMHhmMTE0CisjZGVmaW5lIEYwOTAwX0RBQ19WQUxVRTAgIDB4ZjExNDAwZmYKKworLypPVVRDRkcqLworI2RlZmluZSBSMDkwMF9PVVRDRkcgIDB4ZjExYworI2RlZmluZSBGMDkwMF9JTlZfREFUQTYgIDB4ZjExYzAwODAKKyNkZWZpbmUgRjA5MDBfT1VUU0VSUlMxX0haICAweGYxMWMwMDQwCisjZGVmaW5lIEYwOTAwX09VVFNFUlJTMl9IWiAgMHhmMTFjMDAyMAorI2RlZmluZSBGMDkwMF9PVVRTRVJSUzNfSFogIDB4ZjExYzAwMTAKKyNkZWZpbmUgRjA5MDBfT1VUUEFSUlMzX0haICAweGYxMWMwMDA4CisjZGVmaW5lIEYwOTAwX09VVEhaM19DT05UUk9MICAweGYxMWMwMDA3CisKKy8qTU9ERUNGRyovCisjZGVmaW5lIFIwOTAwX01PREVDRkcgIDB4ZjExZAorI2RlZmluZSBGMDkwMF9GRUNTUFlfU0VMXzIgIDB4ZjExZDAwMjAKKyNkZWZpbmUgRjA5MDBfSFdBUkVfU0VMXzIgIDB4ZjExZDAwMTAKKyNkZWZpbmUgRjA5MDBfUEtUREVMX1NFTF8yICAweGYxMWQwMDA4CisjZGVmaW5lIEYwOTAwX0RJU0VRQ19TRUxfMiAgMHhmMTFkMDAwNAorI2RlZmluZSBGMDkwMF9WSVRfU0VMXzIgIDB4ZjExZDAwMDIKKyNkZWZpbmUgRjA5MDBfREVNT0RfU0VMXzIgIDB4ZjExZDAwMDEKKworLypJUlFTVEFUVVMzKi8KKyNkZWZpbmUgUjA5MDBfSVJRU1RBVFVTMyAgMHhmMTIwCisjZGVmaW5lIEYwOTAwX1NQTExfTE9DSyAgMHhmMTIwMDAyMAorI2RlZmluZSBGMDkwMF9TU1RSRUFNX0xDS18zICAweGYxMjAwMDEwCisjZGVmaW5lIEYwOTAwX1NTVFJFQU1fTENLXzIgIDB4ZjEyMDAwMDgKKyNkZWZpbmUgRjA5MDBfU1NUUkVBTV9MQ0tfMSAgMHhmMTIwMDAwNAorI2RlZmluZSBGMDkwMF9TRFZCUzFfUFJGXzIgIDB4ZjEyMDAwMDIKKyNkZWZpbmUgRjA5MDBfU0RWQlMxX1BSRl8xICAweGYxMjAwMDAxCisKKy8qSVJRU1RBVFVTMiovCisjZGVmaW5lIFIwOTAwX0lSUVNUQVRVUzIgIDB4ZjEyMQorI2RlZmluZSBGMDkwMF9TU1BZX0VORFNJTV8zICAweGYxMjEwMDgwCisjZGVmaW5lIEYwOTAwX1NTUFlfRU5EU0lNXzIgIDB4ZjEyMTAwNDAKKyNkZWZpbmUgRjA5MDBfU1NQWV9FTkRTSU1fMSAgMHhmMTIxMDAyMAorI2RlZmluZSBGMDkwMF9TUEtUREVMX0VSUk9SXzIgIDB4ZjEyMTAwMTAKKyNkZWZpbmUgRjA5MDBfU1BLVERFTF9MT0NLQl8yICAweGYxMjEwMDA4CisjZGVmaW5lIEYwOTAwX1NQS1RERUxfTE9DS18yICAweGYxMjEwMDA0CisjZGVmaW5lIEYwOTAwX1NQS1RERUxfRVJST1JfMSAgMHhmMTIxMDAwMgorI2RlZmluZSBGMDkwMF9TUEtUREVMX0xPQ0tCXzEgIDB4ZjEyMTAwMDEKKworLypJUlFTVEFUVVMxKi8KKyNkZWZpbmUgUjA5MDBfSVJRU1RBVFVTMSAgMHhmMTIyCisjZGVmaW5lIEYwOTAwX1NQS1RERUxfTE9DS18xICAweGYxMjIwMDgwCisjZGVmaW5lIEYwOTAwX1NFWFRQSU5CMiAgMHhmMTIyMDA0MAorI2RlZmluZSBGMDkwMF9TRVhUUElOMiAgMHhmMTIyMDAyMAorI2RlZmluZSBGMDkwMF9TRVhUUElOQjEgIDB4ZjEyMjAwMTAKKyNkZWZpbmUgRjA5MDBfU0VYVFBJTjEgIDB4ZjEyMjAwMDgKKyNkZWZpbmUgRjA5MDBfU0RFTU9EX0xPQ0tCXzIgIDB4ZjEyMjAwMDQKKyNkZWZpbmUgRjA5MDBfU0RFTU9EX0xPQ0tfMiAgMHhmMTIyMDAwMgorI2RlZmluZSBGMDkwMF9TREVNT0RfSVJRXzIgIDB4ZjEyMjAwMDEKKworLypJUlFTVEFUVVMwKi8KKyNkZWZpbmUgUjA5MDBfSVJRU1RBVFVTMCAgMHhmMTIzCisjZGVmaW5lIEYwOTAwX1NERU1PRF9MT0NLQl8xICAweGYxMjMwMDgwCisjZGVmaW5lIEYwOTAwX1NERU1PRF9MT0NLXzEgIDB4ZjEyMzAwNDAKKyNkZWZpbmUgRjA5MDBfU0RFTU9EX0lSUV8xICAweGYxMjMwMDIwCisjZGVmaW5lIEYwOTAwX1NCQ0hfRVJSRkxBRyAgMHhmMTIzMDAxMAorI2RlZmluZSBGMDkwMF9TRElTRVFDMlJYX0lSUSAgMHhmMTIzMDAwOAorI2RlZmluZSBGMDkwMF9TRElTRVFDMlRYX0lSUSAgMHhmMTIzMDAwNAorI2RlZmluZSBGMDkwMF9TRElTRVFDMVJYX0lSUSAgMHhmMTIzMDAwMgorI2RlZmluZSBGMDkwMF9TRElTRVFDMVRYX0lSUSAgMHhmMTIzMDAwMQorCisvKklSUU1BU0szKi8KKyNkZWZpbmUgUjA5MDBfSVJRTUFTSzMgIDB4ZjEyNAorI2RlZmluZSBGMDkwMF9NUExMX0xPQ0sgIDB4ZjEyNDAwMjAKKyNkZWZpbmUgRjA5MDBfTVNUUkVBTV9MQ0tfMyAgMHhmMTI0MDAxMAorI2RlZmluZSBGMDkwMF9NU1RSRUFNX0xDS18yICAweGYxMjQwMDA4CisjZGVmaW5lIEYwOTAwX01TVFJFQU1fTENLXzEgIDB4ZjEyNDAwMDQKKyNkZWZpbmUgRjA5MDBfTURWQlMxX1BSRl8yICAweGYxMjQwMDAyCisjZGVmaW5lIEYwOTAwX01EVkJTMV9QUkZfMSAgMHhmMTI0MDAwMQorCisvKklSUU1BU0syKi8KKyNkZWZpbmUgUjA5MDBfSVJRTUFTSzIgIDB4ZjEyNQorI2RlZmluZSBGMDkwMF9NU1BZX0VORFNJTV8zICAweGYxMjUwMDgwCisjZGVmaW5lIEYwOTAwX01TUFlfRU5EU0lNXzIgIDB4ZjEyNTAwNDAKKyNkZWZpbmUgRjA5MDBfTVNQWV9FTkRTSU1fMSAgMHhmMTI1MDAyMAorI2RlZmluZSBGMDkwMF9NUEtUREVMX0VSUk9SXzIgIDB4ZjEyNTAwMTAKKyNkZWZpbmUgRjA5MDBfTVBLVERFTF9MT0NLQl8yICAweGYxMjUwMDA4CisjZGVmaW5lIEYwOTAwX01QS1RERUxfTE9DS18yICAweGYxMjUwMDA0CisjZGVmaW5lIEYwOTAwX01QS1RERUxfRVJST1JfMSAgMHhmMTI1MDAwMgorI2RlZmluZSBGMDkwMF9NUEtUREVMX0xPQ0tCXzEgIDB4ZjEyNTAwMDEKKworLypJUlFNQVNLMSovCisjZGVmaW5lIFIwOTAwX0lSUU1BU0sxICAweGYxMjYKKyNkZWZpbmUgRjA5MDBfTVBLVERFTF9MT0NLXzEgIDB4ZjEyNjAwODAKKyNkZWZpbmUgRjA5MDBfTUVYVFBJTkIyICAweGYxMjYwMDQwCisjZGVmaW5lIEYwOTAwX01FWFRQSU4yICAweGYxMjYwMDIwCisjZGVmaW5lIEYwOTAwX01FWFRQSU5CMSAgMHhmMTI2MDAxMAorI2RlZmluZSBGMDkwMF9NRVhUUElOMSAgMHhmMTI2MDAwOAorI2RlZmluZSBGMDkwMF9NREVNT0RfTE9DS0JfMiAgMHhmMTI2MDAwNAorI2RlZmluZSBGMDkwMF9NREVNT0RfTE9DS18yICAweGYxMjYwMDAyCisjZGVmaW5lIEYwOTAwX01ERU1PRF9JUlFfMiAgMHhmMTI2MDAwMQorCisvKklSUU1BU0swKi8KKyNkZWZpbmUgUjA5MDBfSVJRTUFTSzAgIDB4ZjEyNworI2RlZmluZSBGMDkwMF9NREVNT0RfTE9DS0JfMSAgMHhmMTI3MDA4MAorI2RlZmluZSBGMDkwMF9NREVNT0RfTE9DS18xICAweGYxMjcwMDQwCisjZGVmaW5lIEYwOTAwX01ERU1PRF9JUlFfMSAgMHhmMTI3MDAyMAorI2RlZmluZSBGMDkwMF9NQkNIX0VSUkZMQUcgIDB4ZjEyNzAwMTAKKyNkZWZpbmUgRjA5MDBfTURJU0VRQzJSWF9JUlEgIDB4ZjEyNzAwMDgKKyNkZWZpbmUgRjA5MDBfTURJU0VRQzJUWF9JUlEgIDB4ZjEyNzAwMDQKKyNkZWZpbmUgRjA5MDBfTURJU0VRQzFSWF9JUlEgIDB4ZjEyNzAwMDIKKyNkZWZpbmUgRjA5MDBfTURJU0VRQzFUWF9JUlEgIDB4ZjEyNzAwMDEKKworLypJMkNDRkcqLworI2RlZmluZSBSMDkwMF9JMkNDRkcgIDB4ZjEyOQorI2RlZmluZSBGMDkwMF9JMkMyX0ZBU1RNT0RFICAweGYxMjkwMDgwCisjZGVmaW5lIEYwOTAwX1NUQVRVU19XUjIgIDB4ZjEyOTAwNDAKKyNkZWZpbmUgRjA5MDBfSTJDMkFERFJfSU5DICAweGYxMjkwMDMwCisjZGVmaW5lIEYwOTAwX0kyQ19GQVNUTU9ERSAgMHhmMTI5MDAwOAorI2RlZmluZSBGMDkwMF9TVEFUVVNfV1IgIDB4ZjEyOTAwMDQKKyNkZWZpbmUgRjA5MDBfSTJDQUREUl9JTkMgIDB4ZjEyOTAwMDMKKworLypQMV9JMkNSUFQqLworI2RlZmluZSBSMDkwMF9QMV9JMkNSUFQgIDB4ZjEyYQorI2RlZmluZSBGMDkwMF9QMV9JMkNUX09OICAweGYxMmEwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0VOQVJQVF9MRVZFTCAgMHhmMTJhMDA3MAorI2RlZmluZSBGMDkwMF9QMV9TQ0xUX0RFTEFZICAweGYxMmEwMDA4CisjZGVmaW5lIEYwOTAwX1AxX1NUT1BfRU5BQkxFICAweGYxMmEwMDA0CisjZGVmaW5lIEYwOTAwX1AxX1NUT1BfU0RBVDJTREEgIDB4ZjEyYTAwMDIKKworLypQMl9JMkNSUFQqLworI2RlZmluZSBSMDkwMF9QMl9JMkNSUFQgIDB4ZjEyYgorI2RlZmluZSBGMDkwMF9QMl9JMkNUX09OICAweGYxMmIwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0VOQVJQVF9MRVZFTCAgMHhmMTJiMDA3MAorI2RlZmluZSBGMDkwMF9QMl9TQ0xUX0RFTEFZICAweGYxMmIwMDA4CisjZGVmaW5lIEYwOTAwX1AyX1NUT1BfRU5BQkxFICAweGYxMmIwMDA0CisjZGVmaW5lIEYwOTAwX1AyX1NUT1BfU0RBVDJTREEgIDB4ZjEyYjAwMDIKKworLypDTEtJMkNGRyovCisjZGVmaW5lIFIwOTAwX0NMS0kyQ0ZHICAweGYxNDAKKyNkZWZpbmUgRjA5MDBfQ0xLSTJfT1BEICAweGYxNDAwMDgwCisjZGVmaW5lIEYwOTAwX0NMS0kyX0NPTkZJRyAgMHhmMTQwMDA3ZQorI2RlZmluZSBGMDkwMF9DTEtJMl9YT1IgIDB4ZjE0MDAwMDEKKworLypHUElPMUNGRyovCisjZGVmaW5lIFIwOTAwX0dQSU8xQ0ZHICAweGYxNDEKKyNkZWZpbmUgRjA5MDBfR1BJTzFfT1BEICAweGYxNDEwMDgwCisjZGVmaW5lIEYwOTAwX0dQSU8xX0NPTkZJRyAgMHhmMTQxMDA3ZQorI2RlZmluZSBGMDkwMF9HUElPMV9YT1IgIDB4ZjE0MTAwMDEKKworLypHUElPMkNGRyovCisjZGVmaW5lIFIwOTAwX0dQSU8yQ0ZHICAweGYxNDIKKyNkZWZpbmUgRjA5MDBfR1BJTzJfT1BEICAweGYxNDIwMDgwCisjZGVmaW5lIEYwOTAwX0dQSU8yX0NPTkZJRyAgMHhmMTQyMDA3ZQorI2RlZmluZSBGMDkwMF9HUElPMl9YT1IgIDB4ZjE0MjAwMDEKKworLypHUElPM0NGRyovCisjZGVmaW5lIFIwOTAwX0dQSU8zQ0ZHICAweGYxNDMKKyNkZWZpbmUgRjA5MDBfR1BJTzNfT1BEICAweGYxNDMwMDgwCisjZGVmaW5lIEYwOTAwX0dQSU8zX0NPTkZJRyAgMHhmMTQzMDA3ZQorI2RlZmluZSBGMDkwMF9HUElPM19YT1IgIDB4ZjE0MzAwMDEKKworLypHUElPNENGRyovCisjZGVmaW5lIFIwOTAwX0dQSU80Q0ZHICAweGYxNDQKKyNkZWZpbmUgRjA5MDBfR1BJTzRfT1BEICAweGYxNDQwMDgwCisjZGVmaW5lIEYwOTAwX0dQSU80X0NPTkZJRyAgMHhmMTQ0MDA3ZQorI2RlZmluZSBGMDkwMF9HUElPNF9YT1IgIDB4ZjE0NDAwMDEKKworLypHUElPNUNGRyovCisjZGVmaW5lIFIwOTAwX0dQSU81Q0ZHICAweGYxNDUKKyNkZWZpbmUgRjA5MDBfR1BJTzVfT1BEICAweGYxNDUwMDgwCisjZGVmaW5lIEYwOTAwX0dQSU81X0NPTkZJRyAgMHhmMTQ1MDA3ZQorI2RlZmluZSBGMDkwMF9HUElPNV9YT1IgIDB4ZjE0NTAwMDEKKworLypHUElPNkNGRyovCisjZGVmaW5lIFIwOTAwX0dQSU82Q0ZHICAweGYxNDYKKyNkZWZpbmUgRjA5MDBfR1BJTzZfT1BEICAweGYxNDYwMDgwCisjZGVmaW5lIEYwOTAwX0dQSU82X0NPTkZJRyAgMHhmMTQ2MDA3ZQorI2RlZmluZSBGMDkwMF9HUElPNl9YT1IgIDB4ZjE0NjAwMDEKKworLypHUElPN0NGRyovCisjZGVmaW5lIFIwOTAwX0dQSU83Q0ZHICAweGYxNDcKKyNkZWZpbmUgRjA5MDBfR1BJTzdfT1BEICAweGYxNDcwMDgwCisjZGVmaW5lIEYwOTAwX0dQSU83X0NPTkZJRyAgMHhmMTQ3MDA3ZQorI2RlZmluZSBGMDkwMF9HUElPN19YT1IgIDB4ZjE0NzAwMDEKKworLypHUElPOENGRyovCisjZGVmaW5lIFIwOTAwX0dQSU84Q0ZHICAweGYxNDgKKyNkZWZpbmUgRjA5MDBfR1BJTzhfT1BEICAweGYxNDgwMDgwCisjZGVmaW5lIEYwOTAwX0dQSU84X0NPTkZJRyAgMHhmMTQ4MDA3ZQorI2RlZmluZSBGMDkwMF9HUElPOF9YT1IgIDB4ZjE0ODAwMDEKKworLypHUElPOUNGRyovCisjZGVmaW5lIFIwOTAwX0dQSU85Q0ZHICAweGYxNDkKKyNkZWZpbmUgRjA5MDBfR1BJTzlfT1BEICAweGYxNDkwMDgwCisjZGVmaW5lIEYwOTAwX0dQSU85X0NPTkZJRyAgMHhmMTQ5MDA3ZQorI2RlZmluZSBGMDkwMF9HUElPOV9YT1IgIDB4ZjE0OTAwMDEKKworLypHUElPMTBDRkcqLworI2RlZmluZSBSMDkwMF9HUElPMTBDRkcgIDB4ZjE0YQorI2RlZmluZSBGMDkwMF9HUElPMTBfT1BEICAweGYxNGEwMDgwCisjZGVmaW5lIEYwOTAwX0dQSU8xMF9DT05GSUcgIDB4ZjE0YTAwN2UKKyNkZWZpbmUgRjA5MDBfR1BJTzEwX1hPUiAgMHhmMTRhMDAwMQorCisvKkdQSU8xMUNGRyovCisjZGVmaW5lIFIwOTAwX0dQSU8xMUNGRyAgMHhmMTRiCisjZGVmaW5lIEYwOTAwX0dQSU8xMV9PUEQgIDB4ZjE0YjAwODAKKyNkZWZpbmUgRjA5MDBfR1BJTzExX0NPTkZJRyAgMHhmMTRiMDA3ZQorI2RlZmluZSBGMDkwMF9HUElPMTFfWE9SICAweGYxNGIwMDAxCisKKy8qR1BJTzEyQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfR1BJTzEyQ0ZHICAweGYxNGMKKyNkZWZpbmUgRjA5MDBfR1BJTzEyX09QRCAgMHhmMTRjMDA4MAorI2RlZmluZSBGMDkwMF9HUElPMTJfQ09ORklHICAweGYxNGMwMDdlCisjZGVmaW5lIEYwOTAwX0dQSU8xMl9YT1IgIDB4ZjE0YzAwMDEKKworLypHUElPMTNDRkcqLworI2RlZmluZSBSMDkwMF9HUElPMTNDRkcgIDB4ZjE0ZAorI2RlZmluZSBGMDkwMF9HUElPMTNfT1BEICAweGYxNGQwMDgwCisjZGVmaW5lIEYwOTAwX0dQSU8xM19DT05GSUcgIDB4ZjE0ZDAwN2UKKyNkZWZpbmUgRjA5MDBfR1BJTzEzX1hPUiAgMHhmMTRkMDAwMQorCisvKkNTMENGRyovCisjZGVmaW5lIFIwOTAwX0NTMENGRyAgMHhmMTRlCisjZGVmaW5lIEYwOTAwX0NTMF9PUEQgIDB4ZjE0ZTAwODAKKyNkZWZpbmUgRjA5MDBfQ1MwX0NPTkZJRyAgMHhmMTRlMDA3ZQorI2RlZmluZSBGMDkwMF9DUzBfWE9SICAweGYxNGUwMDAxCisKKy8qQ1MxQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfQ1MxQ0ZHICAweGYxNGYKKyNkZWZpbmUgRjA5MDBfQ1MxX09QRCAgMHhmMTRmMDA4MAorI2RlZmluZSBGMDkwMF9DUzFfQ09ORklHICAweGYxNGYwMDdlCisjZGVmaW5lIEYwOTAwX0NTMV9YT1IgIDB4ZjE0ZjAwMDEKKworLypTVERCWUNGRyovCisjZGVmaW5lIFIwOTAwX1NUREJZQ0ZHICAweGYxNTAKKyNkZWZpbmUgRjA5MDBfU1REQllfT1BEICAweGYxNTAwMDgwCisjZGVmaW5lIEYwOTAwX1NUREJZX0NPTkZJRyAgMHhmMTUwMDA3ZQorI2RlZmluZSBGMDkwMF9TVEJEWV9YT1IgIDB4ZjE1MDAwMDEKKworLypESVJDTEtDRkcqLworI2RlZmluZSBSMDkwMF9ESVJDTEtDRkcgIDB4ZjE1MQorI2RlZmluZSBGMDkwMF9ESVJDTEtfT1BEICAweGYxNTEwMDgwCisjZGVmaW5lIEYwOTAwX0RJUkNMS19DT05GSUcgIDB4ZjE1MTAwN2UKKyNkZWZpbmUgRjA5MDBfRElSQ0xLX1hPUiAgMHhmMTUxMDAwMQorCisvKkFHQ1JGMUNGRyovCisjZGVmaW5lIFIwOTAwX0FHQ1JGMUNGRyAgMHhmMTUyCisjZGVmaW5lIEYwOTAwX0FHQ1JGMV9PUEQgIDB4ZjE1MjAwODAKKyNkZWZpbmUgRjA5MDBfQUdDUkYxX0NPTkZJRyAgMHhmMTUyMDA3ZQorI2RlZmluZSBGMDkwMF9BR0NSRjFfWE9SICAweGYxNTIwMDAxCisKKy8qU0RBVDFDRkcqLworI2RlZmluZSBSMDkwMF9TREFUMUNGRyAgMHhmMTUzCisjZGVmaW5lIEYwOTAwX1NEQVQxX09QRCAgMHhmMTUzMDA4MAorI2RlZmluZSBGMDkwMF9TREFUMV9DT05GSUcgIDB4ZjE1MzAwN2UKKyNkZWZpbmUgRjA5MDBfU0RBVDFfWE9SICAweGYxNTMwMDAxCisKKy8qU0NMVDFDRkcqLworI2RlZmluZSBSMDkwMF9TQ0xUMUNGRyAgMHhmMTU0CisjZGVmaW5lIEYwOTAwX1NDTFQxX09QRCAgMHhmMTU0MDA4MAorI2RlZmluZSBGMDkwMF9TQ0xUMV9DT05GSUcgIDB4ZjE1NDAwN2UKKyNkZWZpbmUgRjA5MDBfU0NMVDFfWE9SICAweGYxNTQwMDAxCisKKy8qRElTRVFDTzFDRkcqLworI2RlZmluZSBSMDkwMF9ESVNFUUNPMUNGRyAgMHhmMTU1CisjZGVmaW5lIEYwOTAwX0RJU0VRQ08xX09QRCAgMHhmMTU1MDA4MAorI2RlZmluZSBGMDkwMF9ESVNFUUNPMV9DT05GSUcgIDB4ZjE1NTAwN2UKKyNkZWZpbmUgRjA5MDBfRElTRVFDMV9YT1IgIDB4ZjE1NTAwMDEKKworLypBR0NSRjJDRkcqLworI2RlZmluZSBSMDkwMF9BR0NSRjJDRkcgIDB4ZjE1NgorI2RlZmluZSBGMDkwMF9BR0NSRjJfT1BEICAweGYxNTYwMDgwCisjZGVmaW5lIEYwOTAwX0FHQ1JGMl9DT05GSUcgIDB4ZjE1NjAwN2UKKyNkZWZpbmUgRjA5MDBfQUdDUkYyX1hPUiAgMHhmMTU2MDAwMQorCisvKlNEQVQyQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfU0RBVDJDRkcgIDB4ZjE1NworI2RlZmluZSBGMDkwMF9TREFUMl9PUEQgIDB4ZjE1NzAwODAKKyNkZWZpbmUgRjA5MDBfU0RBVDJfQ09ORklHICAweGYxNTcwMDdlCisjZGVmaW5lIEYwOTAwX1NEQVQyX1hPUiAgMHhmMTU3MDAwMQorCisvKlNDTFQyQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfU0NMVDJDRkcgIDB4ZjE1OAorI2RlZmluZSBGMDkwMF9TQ0xUMl9PUEQgIDB4ZjE1ODAwODAKKyNkZWZpbmUgRjA5MDBfU0NMVDJfQ09ORklHICAweGYxNTgwMDdlCisjZGVmaW5lIEYwOTAwX1NDTFQyX1hPUiAgMHhmMTU4MDAwMQorCisvKkRJU0VRQ08yQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfRElTRVFDTzJDRkcgIDB4ZjE1OQorI2RlZmluZSBGMDkwMF9ESVNFUUNPMl9PUEQgIDB4ZjE1OTAwODAKKyNkZWZpbmUgRjA5MDBfRElTRVFDTzJfQ09ORklHICAweGYxNTkwMDdlCisjZGVmaW5lIEYwOTAwX0RJU0VRQzJfWE9SICAweGYxNTkwMDAxCisKKy8qQ0xLT1VUMjdDRkcqLworI2RlZmluZSBSMDkwMF9DTEtPVVQyN0NGRyAgMHhmMTVhCisjZGVmaW5lIEYwOTAwX0NMS09VVDI3X09QRCAgMHhmMTVhMDA4MAorI2RlZmluZSBGMDkwMF9DTEtPVVQyN19DT05GSUcgIDB4ZjE1YTAwN2UKKyNkZWZpbmUgRjA5MDBfQ0xLT1VUMjdfWE9SICAweGYxNWEwMDAxCisKKy8qRVJST1IxQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfRVJST1IxQ0ZHICAweGYxNWIKKyNkZWZpbmUgRjA5MDBfRVJST1IxX09QRCAgMHhmMTViMDA4MAorI2RlZmluZSBGMDkwMF9FUlJPUjFfQ09ORklHICAweGYxNWIwMDdlCisjZGVmaW5lIEYwOTAwX0VSUk9SMV9YT1IgIDB4ZjE1YjAwMDEKKworLypEUE4xQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfRFBOMUNGRyAgMHhmMTVjCisjZGVmaW5lIEYwOTAwX0RQTjFfT1BEICAweGYxNWMwMDgwCisjZGVmaW5lIEYwOTAwX0RQTjFfQ09ORklHICAweGYxNWMwMDdlCisjZGVmaW5lIEYwOTAwX0RQTjFfWE9SICAweGYxNWMwMDAxCisKKy8qU1RST1VUMUNGRyovCisjZGVmaW5lIFIwOTAwX1NUUk9VVDFDRkcgIDB4ZjE1ZAorI2RlZmluZSBGMDkwMF9TVFJPVVQxX09QRCAgMHhmMTVkMDA4MAorI2RlZmluZSBGMDkwMF9TVFJPVVQxX0NPTkZJRyAgMHhmMTVkMDA3ZQorI2RlZmluZSBGMDkwMF9TVFJPVVQxX1hPUiAgMHhmMTVkMDAwMQorCisvKkNMS09VVDFDRkcqLworI2RlZmluZSBSMDkwMF9DTEtPVVQxQ0ZHICAweGYxNWUKKyNkZWZpbmUgRjA5MDBfQ0xLT1VUMV9PUEQgIDB4ZjE1ZTAwODAKKyNkZWZpbmUgRjA5MDBfQ0xLT1VUMV9DT05GSUcgIDB4ZjE1ZTAwN2UKKyNkZWZpbmUgRjA5MDBfQ0xLT1VUMV9YT1IgIDB4ZjE1ZTAwMDEKKworLypEQVRBNzFDRkcqLworI2RlZmluZSBSMDkwMF9EQVRBNzFDRkcgIDB4ZjE1ZgorI2RlZmluZSBGMDkwMF9EQVRBNzFfT1BEICAweGYxNWYwMDgwCisjZGVmaW5lIEYwOTAwX0RBVEE3MV9DT05GSUcgIDB4ZjE1ZjAwN2UKKyNkZWZpbmUgRjA5MDBfREFUQTcxX1hPUiAgMHhmMTVmMDAwMQorCisvKkVSUk9SMkNGRyovCisjZGVmaW5lIFIwOTAwX0VSUk9SMkNGRyAgMHhmMTYwCisjZGVmaW5lIEYwOTAwX0VSUk9SMl9PUEQgIDB4ZjE2MDAwODAKKyNkZWZpbmUgRjA5MDBfRVJST1IyX0NPTkZJRyAgMHhmMTYwMDA3ZQorI2RlZmluZSBGMDkwMF9FUlJPUjJfWE9SICAweGYxNjAwMDAxCisKKy8qRFBOMkNGRyovCisjZGVmaW5lIFIwOTAwX0RQTjJDRkcgIDB4ZjE2MQorI2RlZmluZSBGMDkwMF9EUE4yX09QRCAgMHhmMTYxMDA4MAorI2RlZmluZSBGMDkwMF9EUE4yX0NPTkZJRyAgMHhmMTYxMDA3ZQorI2RlZmluZSBGMDkwMF9EUE4yX1hPUiAgMHhmMTYxMDAwMQorCisvKlNUUk9VVDJDRkcqLworI2RlZmluZSBSMDkwMF9TVFJPVVQyQ0ZHICAweGYxNjIKKyNkZWZpbmUgRjA5MDBfU1RST1VUMl9PUEQgIDB4ZjE2MjAwODAKKyNkZWZpbmUgRjA5MDBfU1RST1VUMl9DT05GSUcgIDB4ZjE2MjAwN2UKKyNkZWZpbmUgRjA5MDBfU1RST1VUMl9YT1IgIDB4ZjE2MjAwMDEKKworLypDTEtPVVQyQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfQ0xLT1VUMkNGRyAgMHhmMTYzCisjZGVmaW5lIEYwOTAwX0NMS09VVDJfT1BEICAweGYxNjMwMDgwCisjZGVmaW5lIEYwOTAwX0NMS09VVDJfQ09ORklHICAweGYxNjMwMDdlCisjZGVmaW5lIEYwOTAwX0NMS09VVDJfWE9SICAweGYxNjMwMDAxCisKKy8qREFUQTcyQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfREFUQTcyQ0ZHICAweGYxNjQKKyNkZWZpbmUgRjA5MDBfREFUQTcyX09QRCAgMHhmMTY0MDA4MAorI2RlZmluZSBGMDkwMF9EQVRBNzJfQ09ORklHICAweGYxNjQwMDdlCisjZGVmaW5lIEYwOTAwX0RBVEE3Ml9YT1IgIDB4ZjE2NDAwMDEKKworLypFUlJPUjNDRkcqLworI2RlZmluZSBSMDkwMF9FUlJPUjNDRkcgIDB4ZjE2NQorI2RlZmluZSBGMDkwMF9FUlJPUjNfT1BEICAweGYxNjUwMDgwCisjZGVmaW5lIEYwOTAwX0VSUk9SM19DT05GSUcgIDB4ZjE2NTAwN2UKKyNkZWZpbmUgRjA5MDBfRVJST1IzX1hPUiAgMHhmMTY1MDAwMQorCisvKkRQTjNDRkcqLworI2RlZmluZSBSMDkwMF9EUE4zQ0ZHICAweGYxNjYKKyNkZWZpbmUgRjA5MDBfRFBOM19PUEQgIDB4ZjE2NjAwODAKKyNkZWZpbmUgRjA5MDBfRFBOM19DT05GSUcgIDB4ZjE2NjAwN2UKKyNkZWZpbmUgRjA5MDBfRFBOM19YT1IgIDB4ZjE2NjAwMDEKKworLypTVFJPVVQzQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfU1RST1VUM0NGRyAgMHhmMTY3CisjZGVmaW5lIEYwOTAwX1NUUk9VVDNfT1BEICAweGYxNjcwMDgwCisjZGVmaW5lIEYwOTAwX1NUUk9VVDNfQ09ORklHICAweGYxNjcwMDdlCisjZGVmaW5lIEYwOTAwX1NUUk9VVDNfWE9SICAweGYxNjcwMDAxCisKKy8qQ0xLT1VUM0NGRyovCisjZGVmaW5lIFIwOTAwX0NMS09VVDNDRkcgIDB4ZjE2OAorI2RlZmluZSBGMDkwMF9DTEtPVVQzX09QRCAgMHhmMTY4MDA4MAorI2RlZmluZSBGMDkwMF9DTEtPVVQzX0NPTkZJRyAgMHhmMTY4MDA3ZQorI2RlZmluZSBGMDkwMF9DTEtPVVQzX1hPUiAgMHhmMTY4MDAwMQorCisvKkRBVEE3M0NGRyovCisjZGVmaW5lIFIwOTAwX0RBVEE3M0NGRyAgMHhmMTY5CisjZGVmaW5lIEYwOTAwX0RBVEE3M19PUEQgIDB4ZjE2OTAwODAKKyNkZWZpbmUgRjA5MDBfREFUQTczX0NPTkZJRyAgMHhmMTY5MDA3ZQorI2RlZmluZSBGMDkwMF9EQVRBNzNfWE9SICAweGYxNjkwMDAxCisKKy8qRlNLVEZDMiovCisjZGVmaW5lIFIwOTAwX0ZTS1RGQzIgIDB4ZjE3MAorI2RlZmluZSBGMDkwMF9GU0tUX0tNT0QgIDB4ZjE3MDAwZmMKKyNkZWZpbmUgRjA5MDBfRlNLVF9DQVIyICAweGYxNzAwMDAzCisKKy8qRlNLVEZDMSovCisjZGVmaW5lIFIwOTAwX0ZTS1RGQzEgIDB4ZjE3MQorI2RlZmluZSBGMDkwMF9GU0tUX0NBUjEgIDB4ZjE3MTAwZmYKKworLypGU0tURkMwKi8KKyNkZWZpbmUgUjA5MDBfRlNLVEZDMCAgMHhmMTcyCisjZGVmaW5lIEYwOTAwX0ZTS1RfQ0FSMCAgMHhmMTcyMDBmZgorCisvKkZTS1RERUxUQUYxKi8KKyNkZWZpbmUgUjA5MDBfRlNLVERFTFRBRjEgIDB4ZjE3MworI2RlZmluZSBGMDkwMF9GU0tUX0RFTFRBRjEgIDB4ZjE3MzAwMGYKKworLypGU0tUREVMVEFGMCovCisjZGVmaW5lIFIwOTAwX0ZTS1RERUxUQUYwICAweGYxNzQKKyNkZWZpbmUgRjA5MDBfRlNLVF9ERUxUQUYwICAweGYxNzQwMGZmCisKKy8qRlNLVENUUkwqLworI2RlZmluZSBSMDkwMF9GU0tUQ1RSTCAgMHhmMTc1CisjZGVmaW5lIEYwOTAwX0ZTS1RfRU5fU0dOICAweGYxNzUwMDQwCisjZGVmaW5lIEYwOTAwX0ZTS1RfTU9EX1NHTiAgMHhmMTc1MDAyMAorI2RlZmluZSBGMDkwMF9GU0tUX01PRF9FTiAgMHhmMTc1MDAxYworI2RlZmluZSBGMDkwMF9GU0tUX0RBQ01PREUgIDB4ZjE3NTAwMDMKKworLypGU0tSRkMyKi8KKyNkZWZpbmUgUjA5MDBfRlNLUkZDMiAgMHhmMTc2CisjZGVmaW5lIEYwOTAwX0ZTS1JfREVUU0dOICAweGYxNzYwMDQwCisjZGVmaW5lIEYwOTAwX0ZTS1JfT1VUU0dOICAweGYxNzYwMDIwCisjZGVmaW5lIEYwOTAwX0ZTS1JfS0FHQyAgMHhmMTc2MDAxYworI2RlZmluZSBGMDkwMF9GU0tSX0NBUjIgIDB4ZjE3NjAwMDMKKworLypGU0tSRkMxKi8KKyNkZWZpbmUgUjA5MDBfRlNLUkZDMSAgMHhmMTc3CisjZGVmaW5lIEYwOTAwX0ZTS1JfQ0FSMSAgMHhmMTc3MDBmZgorCisvKkZTS1JGQzAqLworI2RlZmluZSBSMDkwMF9GU0tSRkMwICAweGYxNzgKKyNkZWZpbmUgRjA5MDBfRlNLUl9DQVIwICAweGYxNzgwMGZmCisKKy8qRlNLUksxKi8KKyNkZWZpbmUgUjA5MDBfRlNLUksxICAweGYxNzkKKyNkZWZpbmUgRjA5MDBfRlNLUl9LMV9FWFAgIDB4ZjE3OTAwZTAKKyNkZWZpbmUgRjA5MDBfRlNLUl9LMV9NQU5UICAweGYxNzkwMDFmCisKKy8qRlNLUksyKi8KKyNkZWZpbmUgUjA5MDBfRlNLUksyICAweGYxN2EKKyNkZWZpbmUgRjA5MDBfRlNLUl9LMl9FWFAgIDB4ZjE3YTAwZTAKKyNkZWZpbmUgRjA5MDBfRlNLUl9LMl9NQU5UICAweGYxN2EwMDFmCisKKy8qRlNLUkFHQ1IqLworI2RlZmluZSBSMDkwMF9GU0tSQUdDUiAgMHhmMTdiCisjZGVmaW5lIEYwOTAwX0ZTS1JfT1VUQ1RMICAweGYxN2IwMGMwCisjZGVmaW5lIEYwOTAwX0ZTS1JfQUdDX1JFRiAgMHhmMTdiMDAzZgorCisvKkZTS1JBR0MqLworI2RlZmluZSBSMDkwMF9GU0tSQUdDICAweGYxN2MKKyNkZWZpbmUgRjA5MDBfRlNLUl9BR0NfQUNDVSAgMHhmMTdjMDBmZgorCisvKkZTS1JBTFBIQSovCisjZGVmaW5lIFIwOTAwX0ZTS1JBTFBIQSAgMHhmMTdkCisjZGVmaW5lIEYwOTAwX0ZTS1JfQUxQSEFfRVhQICAweGYxN2QwMDFjCisjZGVmaW5lIEYwOTAwX0ZTS1JfQUxQSEFfTSAgMHhmMTdkMDAwMworCisvKkZTS1JQTFRIMSovCisjZGVmaW5lIFIwOTAwX0ZTS1JQTFRIMSAgMHhmMTdlCisjZGVmaW5lIEYwOTAwX0ZTS1JfQkVUQSAgMHhmMTdlMDBmMAorI2RlZmluZSBGMDkwMF9GU0tSX1BMTF9UUkVTSDEgIDB4ZjE3ZTAwMGYKKworLypGU0tSUExUSDAqLworI2RlZmluZSBSMDkwMF9GU0tSUExUSDAgIDB4ZjE3ZgorI2RlZmluZSBGMDkwMF9GU0tSX1BMTF9UUkVTSDAgIDB4ZjE3ZjAwZmYKKworLypGU0tSREYxKi8KKyNkZWZpbmUgUjA5MDBfRlNLUkRGMSAgMHhmMTgwCisjZGVmaW5lIEYwOTAwX0ZTS1JfT1VUICAweGYxODAwMDgwCisjZGVmaW5lIEYwOTAwX0ZTS1JfREVMVEFGMSAgMHhmMTgwMDAxZgorCisvKkZTS1JERjAqLworI2RlZmluZSBSMDkwMF9GU0tSREYwICAweGYxODEKKyNkZWZpbmUgRjA5MDBfRlNLUl9ERUxUQUYwICAweGYxODEwMGZmCisKKy8qRlNLUlNURVBQKi8KKyNkZWZpbmUgUjA5MDBfRlNLUlNURVBQICAweGYxODIKKyNkZWZpbmUgRjA5MDBfRlNLUl9TVEVQX1BMVVMgIDB4ZjE4MjAwZmYKKworLypGU0tSU1RFUE0qLworI2RlZmluZSBSMDkwMF9GU0tSU1RFUE0gIDB4ZjE4MworI2RlZmluZSBGMDkwMF9GU0tSX1NURVBfTUlOVVMgIDB4ZjE4MzAwZmYKKworLypGU0tSREVUMSovCisjZGVmaW5lIFIwOTAwX0ZTS1JERVQxICAweGYxODQKKyNkZWZpbmUgRjA5MDBfRlNLUl9ERVRFQ1QgIDB4ZjE4NDAwODAKKyNkZWZpbmUgRjA5MDBfRlNLUl9DQVJERVRfQUNDVTEgIDB4ZjE4NDAwMGYKKworLypGU0tSREVUMCovCisjZGVmaW5lIFIwOTAwX0ZTS1JERVQwICAweGYxODUKKyNkZWZpbmUgRjA5MDBfRlNLUl9DQVJERVRfQUNDVTAgIDB4ZjE4NTAwZmYKKworLypGU0tSRFRIMSovCisjZGVmaW5lIFIwOTAwX0ZTS1JEVEgxICAweGYxODYKKyNkZWZpbmUgRjA5MDBfRlNLUl9DQVJMT1NTX1RIUkVTSDEgIDB4ZjE4NjAwZjAKKyNkZWZpbmUgRjA5MDBfRlNLUl9DQVJERVRfVEhSRVNIMSAgMHhmMTg2MDAwZgorCisvKkZTS1JEVEgwKi8KKyNkZWZpbmUgUjA5MDBfRlNLUkRUSDAgIDB4ZjE4NworI2RlZmluZSBGMDkwMF9GU0tSX0NBUkRFVF9USFJFU0gwICAweGYxODcwMGZmCisKKy8qRlNLUkxPU1MqLworI2RlZmluZSBSMDkwMF9GU0tSTE9TUyAgMHhmMTg4CisjZGVmaW5lIEYwOTAwX0ZTS1JfQ0FSTE9TU19USFJFU0gwICAweGYxODgwMGZmCisKKy8qUDJfRElTVFhDVEwqLworI2RlZmluZSBSMDkwMF9QMl9ESVNUWENUTCAgMHhmMTkwCisjZGVmaW5lIEYwOTAwX1AyX1RJTV9PRkYgIDB4ZjE5MDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfRElTRVFDX1JFU0VUICAweGYxOTAwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1RJTV9DTUQgIDB4ZjE5MDAwMzAKKyNkZWZpbmUgRjA5MDBfUDJfRElTX1BSRUNIQVJHRSAgMHhmMTkwMDAwOAorI2RlZmluZSBGMDkwMF9QMl9ESVNUWF9NT0RFICAweGYxOTAwMDA3CisKKy8qUDJfRElTUlhDVEwqLworI2RlZmluZSBSMDkwMF9QMl9ESVNSWENUTCAgMHhmMTkxCisjZGVmaW5lIEYwOTAwX1AyX1JFQ0VJVkVSX09OICAweGYxOTEwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0lHTk9fU0hPUlQyMksgIDB4ZjE5MTAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfT05FQ0hJUF9UUlggIDB4ZjE5MTAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfRVhUX0VOVkVMT1AgIDB4ZjE5MTAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfUElOX1NFTEVDVCAgMHhmMTkxMDAwYworI2RlZmluZSBGMDkwMF9QMl9JUlFfUlhFTkQgIDB4ZjE5MTAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfSVJRXzROQllURVMgIDB4ZjE5MTAwMDEKKworLypQMl9ESVNSWF9TVDAqLworI2RlZmluZSBSMDkwMF9QMl9ESVNSWF9TVDAgIDB4ZjE5NAorI2RlZmluZSBGMDkwMF9QMl9SWF9FTkQgIDB4ZjE5NDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfUlhfQUNUSVZFICAweGYxOTQwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1NIT1JUXzIyS0haICAweGYxOTQwMDIwCisjZGVmaW5lIEYwOTAwX1AyX0NPTlRfVE9ORSAgMHhmMTk0MDAxMAorI2RlZmluZSBGMDkwMF9QMl9GSUZPXzRCUkVBRFkgIDB4ZjE5NDAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfRklGT19FTVBUWSAgMHhmMTk0MDAwNAorI2RlZmluZSBGMDkwMF9QMl9BQk9SVF9ESVNSWCAgMHhmMTk0MDAwMQorCisvKlAyX0RJU1JYX1NUMSovCisjZGVmaW5lIFIwOTAwX1AyX0RJU1JYX1NUMSAgMHhmMTk1CisjZGVmaW5lIEYwOTAwX1AyX1JYX0ZBSUwgIDB4ZjE5NTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfRklGT19QQVJJVFlGQUlMICAweGYxOTUwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1JYX05PTkJZVEUgIDB4ZjE5NTAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfRklGT19PVkVSRkxPVyAgMHhmMTk1MDAxMAorI2RlZmluZSBGMDkwMF9QMl9GSUZPX0JZVEVOQlIgIDB4ZjE5NTAwMGYKKworLypQMl9ESVNSWERBVEEqLworI2RlZmluZSBSMDkwMF9QMl9ESVNSWERBVEEgIDB4ZjE5NgorI2RlZmluZSBGMDkwMF9QMl9ESVNSWF9EQVRBICAweGYxOTYwMGZmCisKKy8qUDJfRElTVFhEQVRBKi8KKyNkZWZpbmUgUjA5MDBfUDJfRElTVFhEQVRBICAweGYxOTcKKyNkZWZpbmUgRjA5MDBfUDJfRElTRVFDX0ZJRk8gIDB4ZjE5NzAwZmYKKworLypQMl9ESVNUWFNUQVRVUyovCisjZGVmaW5lIFIwOTAwX1AyX0RJU1RYU1RBVFVTICAweGYxOTgKKyNkZWZpbmUgRjA5MDBfUDJfVFhfRkFJTCAgMHhmMTk4MDA4MAorI2RlZmluZSBGMDkwMF9QMl9GSUZPX0ZVTEwgIDB4ZjE5ODAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfVFhfSURMRSAgMHhmMTk4MDAyMAorI2RlZmluZSBGMDkwMF9QMl9HQVBfQlVSU1QgIDB4ZjE5ODAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfVFhGSUZPX0JZVEVTICAweGYxOTgwMDBmCisKKy8qUDJfRjIyVFgqLworI2RlZmluZSBSMDkwMF9QMl9GMjJUWCAgMHhmMTk5CisjZGVmaW5lIEYwOTAwX1AyX0YyMl9SRUcgIDB4ZjE5OTAwZmYKKworLypQMl9GMjJSWCovCisjZGVmaW5lIFIwOTAwX1AyX0YyMlJYICAweGYxOWEKKyNkZWZpbmUgRjA5MDBfUDJfRjIyUlhfUkVHICAweGYxOWEwMGZmCisKKy8qUDJfQUNSUFJFU0MqLworI2RlZmluZSBSMDkwMF9QMl9BQ1JQUkVTQyAgMHhmMTljCisjZGVmaW5lIEYwOTAwX1AyX0FDUl9DT0RGUkRZICAweGYxOWMwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0FDUl9QUkVTQyAgMHhmMTljMDAwNworCisvKlAyX0FDUkRJViovCisjZGVmaW5lIFIwOTAwX1AyX0FDUkRJViAgMHhmMTlkCisjZGVmaW5lIEYwOTAwX1AyX0FDUl9ESVYgIDB4ZjE5ZDAwZmYKKworLypQMV9ESVNUWENUTCovCisjZGVmaW5lIFIwOTAwX1AxX0RJU1RYQ1RMICAweGYxYTAKKyNkZWZpbmUgRjA5MDBfUDFfVElNX09GRiAgMHhmMWEwMDA4MAorI2RlZmluZSBGMDkwMF9QMV9ESVNFUUNfUkVTRVQgIDB4ZjFhMDAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfVElNX0NNRCAgMHhmMWEwMDAzMAorI2RlZmluZSBGMDkwMF9QMV9ESVNfUFJFQ0hBUkdFICAweGYxYTAwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0RJU1RYX01PREUgIDB4ZjFhMDAwMDcKKworLypQMV9ESVNSWENUTCovCisjZGVmaW5lIFIwOTAwX1AxX0RJU1JYQ1RMICAweGYxYTEKKyNkZWZpbmUgRjA5MDBfUDFfUkVDRUlWRVJfT04gIDB4ZjFhMTAwODAKKyNkZWZpbmUgRjA5MDBfUDFfSUdOT19TSE9SVDIySyAgMHhmMWExMDA0MAorI2RlZmluZSBGMDkwMF9QMV9PTkVDSElQX1RSWCAgMHhmMWExMDAyMAorI2RlZmluZSBGMDkwMF9QMV9FWFRfRU5WRUxPUCAgMHhmMWExMDAxMAorI2RlZmluZSBGMDkwMF9QMV9QSU5fU0VMRUNUICAweGYxYTEwMDBjCisjZGVmaW5lIEYwOTAwX1AxX0lSUV9SWEVORCAgMHhmMWExMDAwMgorI2RlZmluZSBGMDkwMF9QMV9JUlFfNE5CWVRFUyAgMHhmMWExMDAwMQorCisvKlAxX0RJU1JYX1NUMCovCisjZGVmaW5lIFIwOTAwX1AxX0RJU1JYX1NUMCAgMHhmMWE0CisjZGVmaW5lIEYwOTAwX1AxX1JYX0VORCAgMHhmMWE0MDA4MAorI2RlZmluZSBGMDkwMF9QMV9SWF9BQ1RJVkUgIDB4ZjFhNDAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfU0hPUlRfMjJLSFogIDB4ZjFhNDAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfQ09OVF9UT05FICAweGYxYTQwMDEwCisjZGVmaW5lIEYwOTAwX1AxX0ZJRk9fNEJSRUFEWSAgMHhmMWE0MDAwOAorI2RlZmluZSBGMDkwMF9QMV9GSUZPX0VNUFRZICAweGYxYTQwMDA0CisjZGVmaW5lIEYwOTAwX1AxX0FCT1JUX0RJU1JYICAweGYxYTQwMDAxCisKKy8qUDFfRElTUlhfU1QxKi8KKyNkZWZpbmUgUjA5MDBfUDFfRElTUlhfU1QxICAweGYxYTUKKyNkZWZpbmUgRjA5MDBfUDFfUlhfRkFJTCAgMHhmMWE1MDA4MAorI2RlZmluZSBGMDkwMF9QMV9GSUZPX1BBUklUWUZBSUwgIDB4ZjFhNTAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfUlhfTk9OQllURSAgMHhmMWE1MDAyMAorI2RlZmluZSBGMDkwMF9QMV9GSUZPX09WRVJGTE9XICAweGYxYTUwMDEwCisjZGVmaW5lIEYwOTAwX1AxX0ZJRk9fQllURU5CUiAgMHhmMWE1MDAwZgorCisvKlAxX0RJU1JYREFUQSovCisjZGVmaW5lIFIwOTAwX1AxX0RJU1JYREFUQSAgMHhmMWE2CisjZGVmaW5lIEYwOTAwX1AxX0RJU1JYX0RBVEEgIDB4ZjFhNjAwZmYKKworLypQMV9ESVNUWERBVEEqLworI2RlZmluZSBSMDkwMF9QMV9ESVNUWERBVEEgIDB4ZjFhNworI2RlZmluZSBGMDkwMF9QMV9ESVNFUUNfRklGTyAgMHhmMWE3MDBmZgorCisvKlAxX0RJU1RYU1RBVFVTKi8KKyNkZWZpbmUgUjA5MDBfUDFfRElTVFhTVEFUVVMgIDB4ZjFhOAorI2RlZmluZSBGMDkwMF9QMV9UWF9GQUlMICAweGYxYTgwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0ZJRk9fRlVMTCAgMHhmMWE4MDA0MAorI2RlZmluZSBGMDkwMF9QMV9UWF9JRExFICAweGYxYTgwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0dBUF9CVVJTVCAgMHhmMWE4MDAxMAorI2RlZmluZSBGMDkwMF9QMV9UWEZJRk9fQllURVMgIDB4ZjFhODAwMGYKKworLypQMV9GMjJUWCovCisjZGVmaW5lIFIwOTAwX1AxX0YyMlRYICAweGYxYTkKKyNkZWZpbmUgRjA5MDBfUDFfRjIyX1JFRyAgMHhmMWE5MDBmZgorCisvKlAxX0YyMlJYKi8KKyNkZWZpbmUgUjA5MDBfUDFfRjIyUlggIDB4ZjFhYQorI2RlZmluZSBGMDkwMF9QMV9GMjJSWF9SRUcgIDB4ZjFhYTAwZmYKKworLypQMV9BQ1JQUkVTQyovCisjZGVmaW5lIFIwOTAwX1AxX0FDUlBSRVNDICAweGYxYWMKKyNkZWZpbmUgRjA5MDBfUDFfQUNSX0NPREZSRFkgIDB4ZjFhYzAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfQUNSX1BSRVNDICAweGYxYWMwMDA3CisKKy8qUDFfQUNSRElWKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUNSRElWICAweGYxYWQKKyNkZWZpbmUgRjA5MDBfUDFfQUNSX0RJViAgMHhmMWFkMDBmZgorCisvKk5DT0FSU0UqLworI2RlZmluZSBSMDkwMF9OQ09BUlNFICAweGYxYjMKKyNkZWZpbmUgRjA5MDBfTV9ESVYgIDB4ZjFiMzAwZmYKKworLypTWU5UQ1RSTCovCisjZGVmaW5lIFIwOTAwX1NZTlRDVFJMICAweGYxYjYKKyNkZWZpbmUgRjA5MDBfU1RBTkRCWSAgMHhmMWI2MDA4MAorI2RlZmluZSBGMDkwMF9CWVBBU1NQTExDT1JFICAweGYxYjYwMDQwCisjZGVmaW5lIEYwOTAwX1NFTFgxUkFUSU8gIDB4ZjFiNjAwMjAKKyNkZWZpbmUgRjA5MDBfSTJDX1RVRCAgMHhmMWI2MDAxMAorI2RlZmluZSBGMDkwMF9TVE9QX1BMTCAgMHhmMWI2MDAwOAorI2RlZmluZSBGMDkwMF9CWVBBU1NQTExGU0sgIDB4ZjFiNjAwMDQKKyNkZWZpbmUgRjA5MDBfU0VMT1NDSSAgMHhmMWI2MDAwMgorI2RlZmluZSBGMDkwMF9CWVBBU1NQTExBREMgIDB4ZjFiNjAwMDEKKworLypGSUxUQ1RSTCovCisjZGVmaW5lIFIwOTAwX0ZJTFRDVFJMICAweGYxYjcKKyNkZWZpbmUgRjA5MDBfSU5WX0NMSzEzNSAgMHhmMWI3MDA4MAorI2RlZmluZSBGMDkwMF9QRVJNX0JZUERJUyAgMHhmMWI3MDA0MAorI2RlZmluZSBGMDkwMF9TRUxfRlNLQ0tESVYgIDB4ZjFiNzAwMDQKKyNkZWZpbmUgRjA5MDBfSU5WX0NMS0ZTSyAgMHhmMWI3MDAwMgorI2RlZmluZSBGMDkwMF9CWVBBU1NfQVBQTEkgIDB4ZjFiNzAwMDEKKworLypQTExTVEFUKi8KKyNkZWZpbmUgUjA5MDBfUExMU1RBVCAgMHhmMWI4CisjZGVmaW5lIEYwOTAwX0FDTV9TRUwgIDB4ZjFiODAwODAKKyNkZWZpbmUgRjA5MDBfRFRWX1NFTCAgMHhmMWI4MDA0MAorI2RlZmluZSBGMDkwMF9QTExMT0NLICAweGYxYjgwMDAxCisKKy8qU1RPUENMSzEqLworI2RlZmluZSBSMDkwMF9TVE9QQ0xLMSAgMHhmMWMyCisjZGVmaW5lIEYwOTAwX1NUT1BfQ0xLUEtEVDIgIDB4ZjFjMjAwNDAKKyNkZWZpbmUgRjA5MDBfU1RPUF9DTEtQS0RUMSAgMHhmMWMyMDAyMAorI2RlZmluZSBGMDkwMF9TVE9QX0NMS0ZFQyAgMHhmMWMyMDAxMAorI2RlZmluZSBGMDkwMF9TVE9QX0NMS0FEQ0kyICAweGYxYzIwMDA4CisjZGVmaW5lIEYwOTAwX0lOVl9DTEtBRENJMiAgMHhmMWMyMDAwNAorI2RlZmluZSBGMDkwMF9TVE9QX0NMS0FEQ0kxICAweGYxYzIwMDAyCisjZGVmaW5lIEYwOTAwX0lOVl9DTEtBRENJMSAgMHhmMWMyMDAwMQorCisvKlNUT1BDTEsyKi8KKyNkZWZpbmUgUjA5MDBfU1RPUENMSzIgIDB4ZjFjMworI2RlZmluZSBGMDkwMF9TVE9QX0NMS1NBTVAyICAweGYxYzMwMDEwCisjZGVmaW5lIEYwOTAwX1NUT1BfQ0xLU0FNUDEgIDB4ZjFjMzAwMDgKKyNkZWZpbmUgRjA5MDBfU1RPUF9DTEtWSVQyICAweGYxYzMwMDA0CisjZGVmaW5lIEYwOTAwX1NUT1BfQ0xLVklUMSAgMHhmMWMzMDAwMgorI2RlZmluZSBGMDkwMF9TVE9QX0NMS1RTICAweGYxYzMwMDAxCisKKy8qVFNUVE5SMCovCisjZGVmaW5lIFIwOTAwX1RTVFROUjAgIDB4ZjFkZgorI2RlZmluZSBGMDkwMF9TRUxfRlNLICAweGYxZGYwMDgwCisjZGVmaW5lIEYwOTAwX0ZTS19QT04gIDB4ZjFkZjAwMDQKKyNkZWZpbmUgRjA5MDBfRlNLX09QRU5MT09QICAweGYxZGYwMDAyCisKKy8qVFNUVE5SMSovCisjZGVmaW5lIFIwOTAwX1RTVFROUjEgIDB4ZjFlMAorI2RlZmluZSBGMDkwMF9CWVBBU1NfQURDMSAgMHhmMWUwMDA4MAorI2RlZmluZSBGMDkwMF9JTlZBREMxX0NLT1VUICAweGYxZTAwMDQwCisjZGVmaW5lIEYwOTAwX1NFTElRU1JDMSAgMHhmMWUwMDAzMAorI2RlZmluZSBGMDkwMF9BREMxX1BPTiAgMHhmMWUwMDAwMgorI2RlZmluZSBGMDkwMF9BREMxX0lOTU9ERSAgMHhmMWUwMDAwMQorCisvKlRTVFROUjIqLworI2RlZmluZSBSMDkwMF9UU1RUTlIyICAweGYxZTEKKyNkZWZpbmUgRjA5MDBfRElTRVFDMV9QT04gIDB4ZjFlMTAwMjAKKyNkZWZpbmUgRjA5MDBfRElTRVFDMV9URVNUICAweGYxZTEwMDFmCisKKy8qVFNUVE5SMyovCisjZGVmaW5lIFIwOTAwX1RTVFROUjMgIDB4ZjFlMgorI2RlZmluZSBGMDkwMF9CWVBBU1NfQURDMiAgMHhmMWUyMDA4MAorI2RlZmluZSBGMDkwMF9JTlZBREMyX0NLT1VUICAweGYxZTIwMDQwCisjZGVmaW5lIEYwOTAwX1NFTElRU1JDMiAgMHhmMWUyMDAzMAorI2RlZmluZSBGMDkwMF9BREMyX1BPTiAgMHhmMWUyMDAwMgorI2RlZmluZSBGMDkwMF9BREMyX0lOTU9ERSAgMHhmMWUyMDAwMQorCisvKlRTVFROUjQqLworI2RlZmluZSBSMDkwMF9UU1RUTlI0ICAweGYxZTMKKyNkZWZpbmUgRjA5MDBfRElTRVFDMl9QT04gIDB4ZjFlMzAwMjAKKyNkZWZpbmUgRjA5MDBfRElTRVFDMl9URVNUICAweGYxZTMwMDFmCisKKy8qUDJfSVFDT05TVCovCisjZGVmaW5lIFIwOTAwX1AyX0lRQ09OU1QgIDB4ZjIwMAorI2RlZmluZSBGMDkwMF9QMl9DT05TVEVMX1NFTEVDVCAgMHhmMjAwMDA2MAorI2RlZmluZSBGMDkwMF9QMl9JUVNZTUJfU0VMICAweGYyMDAwMDFmCisKKy8qUDJfTk9TQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDJfTk9TQ0ZHICAweGYyMDEKKyNkZWZpbmUgRjA5MDBfUDJfRFVNTVlQTF9OT1NEQVRBICAweGYyMDEwMDIwCisjZGVmaW5lIEYwOTAwX1AyX05PU1BMSF9CRVRBICAweGYyMDEwMDE4CisjZGVmaW5lIEYwOTAwX1AyX05PU0RBVEFfQkVUQSAgMHhmMjAxMDAwNworCisvKlAyX0lTWU1CKi8KKyNkZWZpbmUgUjA5MDBfUDJfSVNZTUIgIDB4ZjIwMgorI2RlZmluZSBGMDkwMF9QMl9JX1NZTUJPTCAgMHhmMjAyMDFmZgorCisvKlAyX1FTWU1CKi8KKyNkZWZpbmUgUjA5MDBfUDJfUVNZTUIgIDB4ZjIwMworI2RlZmluZSBGMDkwMF9QMl9RX1NZTUJPTCAgMHhmMjAzMDFmZgorCisvKlAyX0FHQzFDRkcqLworI2RlZmluZSBSMDkwMF9QMl9BR0MxQ0ZHICAweGYyMDQKKyNkZWZpbmUgRjA5MDBfUDJfRENfRlJPWkVOICAweGYyMDQwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0RDX0NPUlJFQ1QgIDB4ZjIwNDAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfQU1NX0ZST1pFTiAgMHhmMjA0MDAyMAorI2RlZmluZSBGMDkwMF9QMl9BTU1fQ09SUkVDVCAgMHhmMjA0MDAxMAorI2RlZmluZSBGMDkwMF9QMl9RVUFEX0ZST1pFTiAgMHhmMjA0MDAwOAorI2RlZmluZSBGMDkwMF9QMl9RVUFEX0NPUlJFQ1QgIDB4ZjIwNDAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfRENDT01QX1NMT1cgIDB4ZjIwNDAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfSVFNSVNNX1NMT1cgIDB4ZjIwNDAwMDEKKworLypQMl9BR0MxQ04qLworI2RlZmluZSBSMDkwMF9QMl9BR0MxQ04gIDB4ZjIwNgorI2RlZmluZSBGMDkwMF9QMl9BR0MxX0xPQ0tFRCAgMHhmMjA2MDA4MAorI2RlZmluZSBGMDkwMF9QMl9BR0MxX09WRVJGTE9XICAweGYyMDYwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0FHQzFfTk9TTE9XTEsgIDB4ZjIwNjAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfQUdDMV9NSU5QT1dFUiAgMHhmMjA2MDAxMAorI2RlZmluZSBGMDkwMF9QMl9BR0NPVVRfRkFTVCAgMHhmMjA2MDAwOAorI2RlZmluZSBGMDkwMF9QMl9BR0NJUV9CRVRBICAweGYyMDYwMDA3CisKKy8qUDJfQUdDMVJFRiovCisjZGVmaW5lIFIwOTAwX1AyX0FHQzFSRUYgIDB4ZjIwNworI2RlZmluZSBGMDkwMF9QMl9BR0NJUV9SRUYgIDB4ZjIwNzAwZmYKKworLypQMl9JRENDT01QKi8KKyNkZWZpbmUgUjA5MDBfUDJfSURDQ09NUCAgMHhmMjA4CisjZGVmaW5lIEYwOTAwX1AyX0lBVkVSQUdFX0FESiAgMHhmMjA4MDFmZgorCisvKlAyX1FEQ0NPTVAqLworI2RlZmluZSBSMDkwMF9QMl9RRENDT01QICAweGYyMDkKKyNkZWZpbmUgRjA5MDBfUDJfUUFWRVJBR0VfQURKICAweGYyMDkwMWZmCisKKy8qUDJfUE9XRVJJKi8KKyNkZWZpbmUgUjA5MDBfUDJfUE9XRVJJICAweGYyMGEKKyNkZWZpbmUgRjA5MDBfUDJfUE9XRVJfSSAgMHhmMjBhMDBmZgorCisvKlAyX1BPV0VSUSovCisjZGVmaW5lIFIwOTAwX1AyX1BPV0VSUSAgMHhmMjBiCisjZGVmaW5lIEYwOTAwX1AyX1BPV0VSX1EgIDB4ZjIwYjAwZmYKKworLypQMl9BR0MxQU1NKi8KKyNkZWZpbmUgUjA5MDBfUDJfQUdDMUFNTSAgMHhmMjBjCisjZGVmaW5lIEYwOTAwX1AyX0FNTV9WQUxVRSAgMHhmMjBjMDBmZgorCisvKlAyX0FHQzFRVUFEKi8KKyNkZWZpbmUgUjA5MDBfUDJfQUdDMVFVQUQgIDB4ZjIwZAorI2RlZmluZSBGMDkwMF9QMl9RVUFEX1ZBTFVFICAweGYyMGQwMWZmCisKKy8qUDJfQUdDSVFJTjEqLworI2RlZmluZSBSMDkwMF9QMl9BR0NJUUlOMSAgMHhmMjBlCisjZGVmaW5lIEYwOTAwX1AyX0FHQ0lRX1ZBTFVFMSAgMHhmMjBlMDBmZgorCisvKlAyX0FHQ0lRSU4wKi8KKyNkZWZpbmUgUjA5MDBfUDJfQUdDSVFJTjAgIDB4ZjIwZgorI2RlZmluZSBGMDkwMF9QMl9BR0NJUV9WQUxVRTAgIDB4ZjIwZjAwZmYKKworLypQMl9ERU1PRCovCisjZGVmaW5lIFIwOTAwX1AyX0RFTU9EICAweGYyMTAKKyNkZWZpbmUgRjA5MDBfUDJfREVNT0RfU1RPUCAgMHhmMjEwMDA0MAorI2RlZmluZSBGMDkwMF9QMl9TUEVDSU5WX0NPTlRST0wgIDB4ZjIxMDAwMzAKKyNkZWZpbmUgRjA5MDBfUDJfRk9SQ0VfRU5BU0FNUCAgMHhmMjEwMDAwOAorI2RlZmluZSBGMDkwMF9QMl9NQU5VQUxfUk9MTE9GRiAgMHhmMjEwMDAwNAorI2RlZmluZSBGMDkwMF9QMl9ST0xMT0ZGX0NPTlRST0wgIDB4ZjIxMDAwMDMKKworLypQMl9ETURNT0RDT0QqLworI2RlZmluZSBSMDkwMF9QMl9ETURNT0RDT0QgIDB4ZjIxMQorI2RlZmluZSBGMDkwMF9QMl9NQU5VQUxfTU9EQ09EICAweGYyMTEwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0RFTU9EX01PRENPRCAgMHhmMjExMDA3YworI2RlZmluZSBGMDkwMF9QMl9ERU1PRF9UWVBFICAweGYyMTEwMDAzCisKKy8qUDJfRFNUQVRVUyovCisjZGVmaW5lIFIwOTAwX1AyX0RTVEFUVVMgIDB4ZjIxMgorI2RlZmluZSBGMDkwMF9QMl9DQVJfTE9DSyAgMHhmMjEyMDA4MAorI2RlZmluZSBGMDkwMF9QMl9UTUdMT0NLX1FVQUxJVFkgIDB4ZjIxMjAwNjAKKyNkZWZpbmUgRjA5MDBfUDJfU0RWQlMxX0VOQUJMRSAgMHhmMjEyMDAxMAorI2RlZmluZSBGMDkwMF9QMl9MT0NLX0RFRklOSVRJRiAgMHhmMjEyMDAwOAorI2RlZmluZSBGMDkwMF9QMl9USU1JTkdfSVNfTE9DS0VEICAweGYyMTIwMDA0CisjZGVmaW5lIEYwOTAwX1AyX0NPQVJTRV9UTUdMT0NLICAweGYyMTIwMDAyCisjZGVmaW5lIEYwOTAwX1AyX0NPQVJTRV9DQVJMT0NLICAweGYyMTIwMDAxCisKKy8qUDJfRFNUQVRVUzIqLworI2RlZmluZSBSMDkwMF9QMl9EU1RBVFVTMiAgMHhmMjEzCisjZGVmaW5lIEYwOTAwX1AyX0RFTU9EX0RFTE9DSyAgMHhmMjEzMDA4MAorI2RlZmluZSBGMDkwMF9QMl9ERU1PRF9USU1FT1VUICAweGYyMTMwMDQwCisjZGVmaW5lIEYwOTAwX1AyX01PRENPRFJRX1NZTkNUQUcgIDB4ZjIxMzAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfUE9MWVBIX1NBVEVWRU5UICAweGYyMTMwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0FHQzFfTk9TSUdOQUxBQ0sgIDB4ZjIxMzAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfQUdDMl9PVkVSRkxPVyAgMHhmMjEzMDAwNAorI2RlZmluZSBGMDkwMF9QMl9DRlJfT1ZFUkZMT1cgIDB4ZjIxMzAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfR0FNTUFfT1ZFUlVOREVSICAweGYyMTMwMDAxCisKKy8qUDJfRE1EQ0ZHTUQqLworI2RlZmluZSBSMDkwMF9QMl9ETURDRkdNRCAgMHhmMjE0CisjZGVmaW5lIEYwOTAwX1AyX0RWQlMyX0VOQUJMRSAgMHhmMjE0MDA4MAorI2RlZmluZSBGMDkwMF9QMl9EVkJTMV9FTkFCTEUgIDB4ZjIxNDAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfQ0ZSX0FVVE9TQ0FOICAweGYyMTQwMDIwCisjZGVmaW5lIEYwOTAwX1AyX1NDQU5fRU5BQkxFICAweGYyMTQwMDEwCisjZGVmaW5lIEYwOTAwX1AyX1RVTl9BVVRPU0NBTiAgMHhmMjE0MDAwOAorI2RlZmluZSBGMDkwMF9QMl9OT0ZPUkNFX1JFTE9DSyAgMHhmMjE0MDAwNAorI2RlZmluZSBGMDkwMF9QMl9UVU5fUk5HICAweGYyMTQwMDAzCisKKy8qUDJfRE1EQ0ZHMiovCisjZGVmaW5lIFIwOTAwX1AyX0RNRENGRzIgIDB4ZjIxNQorI2RlZmluZSBGMDkwMF9QMl9BR0MxX1dBSVRMT0NLICAweGYyMTUwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1MxUzJfU0VRVUVOVElBTCAgMHhmMjE1MDA0MAorI2RlZmluZSBGMDkwMF9QMl9PVkVSRkxPV19USU1FT1VUICAweGYyMTUwMDIwCisjZGVmaW5lIEYwOTAwX1AyX1NDQU5GQUlMX1RJTUVPVVQgIDB4ZjIxNTAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfRE1EVE9VVF9CQUNLICAweGYyMTUwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0NBUkxPQ0tfUzFFTkFCTEUgIDB4ZjIxNTAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfQ09BUlNFX0xLM01PREUgIDB4ZjIxNTAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfQ09BUlNFX0xLMk1PREUgIDB4ZjIxNTAwMDEKKworLypQMl9ETURJU1RBVEUqLworI2RlZmluZSBSMDkwMF9QMl9ETURJU1RBVEUgIDB4ZjIxNgorI2RlZmluZSBGMDkwMF9QMl9JMkNfTk9SRVNFVERNT0RFICAweGYyMTYwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0ZPUkNFX0VUQVBFRCAgMHhmMjE2MDA0MAorI2RlZmluZSBGMDkwMF9QMl9TRE1EUlNUX0RJUkNMSyAgMHhmMjE2MDAyMAorI2RlZmluZSBGMDkwMF9QMl9JMkNfREVNT0RfTU9ERSAgMHhmMjE2MDAxZgorCisvKlAyX0RNRFQwTSovCisjZGVmaW5lIFIwOTAwX1AyX0RNRFQwTSAgMHhmMjE3CisjZGVmaW5lIEYwOTAwX1AyX0RNRFQwX01JTiAgMHhmMjE3MDBmZgorCisvKlAyX0RNRFNUQVRFKi8KKyNkZWZpbmUgUjA5MDBfUDJfRE1EU1RBVEUgIDB4ZjIxYgorI2RlZmluZSBGMDkwMF9QMl9ERU1PRF9MT0NLRUQgIDB4ZjIxYjAwODAKKyNkZWZpbmUgRjA5MDBfUDJfSEVBREVSX01PREUgIDB4ZjIxYjAwNjAKKyNkZWZpbmUgRjA5MDBfUDJfREVNT0RfTU9ERSAgMHhmMjFiMDAxZgorCisvKlAyX0RNREZMWVcqLworI2RlZmluZSBSMDkwMF9QMl9ETURGTFlXICAweGYyMWMKKyNkZWZpbmUgRjA5MDBfUDJfSTJDX0lSUVZBTCAgMHhmMjFjMDBmMAorI2RlZmluZSBGMDkwMF9QMl9GTFlXSEVFTF9DUFQgIDB4ZjIxYzAwMGYKKworLypQMl9EU1RBVFVTMyovCisjZGVmaW5lIFIwOTAwX1AyX0RTVEFUVVMzICAweGYyMWQKKyNkZWZpbmUgRjA5MDBfUDJfQ0ZSX1pJR1pBRyAgMHhmMjFkMDA4MAorI2RlZmluZSBGMDkwMF9QMl9ERU1PRF9DRkdNT0RFICAweGYyMWQwMDYwCisjZGVmaW5lIEYwOTAwX1AyX0dBTU1BX0xPV0JBVURSQVRFICAweGYyMWQwMDEwCisjZGVmaW5lIEYwOTAwX1AyX1JFTE9DS19NT0RFICAweGYyMWQwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0RFTU9EX0ZBSUwgIDB4ZjIxZDAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfRVRBUEUxQV9EVkJYTUVNICAweGYyMWQwMDAzCisKKy8qUDJfRE1EQ0ZHMyovCisjZGVmaW5lIFIwOTAwX1AyX0RNRENGRzMgIDB4ZjIxZQorI2RlZmluZSBGMDkwMF9QMl9EVkJTMV9UTUdXQUlUICAweGYyMWUwMDgwCisjZGVmaW5lIEYwOTAwX1AyX05PX0JXQ0VOVEVSSU5HICAweGYyMWUwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0lOVl9TRVFTUkNIICAweGYyMWUwMDIwCisjZGVmaW5lIEYwOTAwX1AyX0RJU19TRlJVUExPV19UUksgIDB4ZjIxZTAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfTk9TVE9QX0ZJRk9GVUxMICAweGYyMWUwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0xPQ0tUSU1FX01PREUgIDB4ZjIxZTAwMDcKKworLypQMl9ETURDRkc0Ki8KKyNkZWZpbmUgUjA5MDBfUDJfRE1EQ0ZHNCAgMHhmMjFmCisjZGVmaW5lIEYwOTAwX1AyX1RVTkVSX05SRUxBVU5DSCAgMHhmMjFmMDAwOAorI2RlZmluZSBGMDkwMF9QMl9ESVNfQ0xLRU5BQkxFICAweGYyMWYwMDA0CisjZGVmaW5lIEYwOTAwX1AyX0RJU19IRFJESVZMT0NLICAweGYyMWYwMDAyCisjZGVmaW5lIEYwOTAwX1AyX05PX1ROUldCSU5JVCAgMHhmMjFmMDAwMQorCisvKlAyX0NPUlJFTE1BTlQqLworI2RlZmluZSBSMDkwMF9QMl9DT1JSRUxNQU5UICAweGYyMjAKKyNkZWZpbmUgRjA5MDBfUDJfQ09SUkVMX01BTlQgIDB4ZjIyMDAwZmYKKworLypQMl9DT1JSRUxBQlMqLworI2RlZmluZSBSMDkwMF9QMl9DT1JSRUxBQlMgIDB4ZjIyMQorI2RlZmluZSBGMDkwMF9QMl9DT1JSRUxfQUJTICAweGYyMjEwMGZmCisKKy8qUDJfQ09SUkVMRVhQKi8KKyNkZWZpbmUgUjA5MDBfUDJfQ09SUkVMRVhQICAweGYyMjIKKyNkZWZpbmUgRjA5MDBfUDJfQ09SUkVMX0FCU0VYUCAgMHhmMjIyMDBmMAorI2RlZmluZSBGMDkwMF9QMl9DT1JSRUxfRVhQICAweGYyMjIwMDBmCisKKy8qUDJfUExITU9EQ09EKi8KKyNkZWZpbmUgUjA5MDBfUDJfUExITU9EQ09EICAweGYyMjQKKyNkZWZpbmUgRjA5MDBfUDJfU1BFQ0lOVl9ERU1PRCAgMHhmMjI0MDA4MAorI2RlZmluZSBGMDkwMF9QMl9QTEhfTU9EQ09EICAweGYyMjQwMDdjCisjZGVmaW5lIEYwOTAwX1AyX1BMSF9UWVBFICAweGYyMjQwMDAzCisKKy8qUDJfQUdDSzMyKi8KKyNkZWZpbmUgUjA5MDBfUDJfQUdDSzMyICAweGYyMmIKKyNkZWZpbmUgRjA5MDBfUDJfUjNBREpPRkZfMzJBUFNLICAweGYyMmIwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1IyQURKT0ZGXzMyQVBTSyAgMHhmMjJiMDA0MAorI2RlZmluZSBGMDkwMF9QMl9SMUFESk9GRl8zMkFQU0sgIDB4ZjIyYjAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfUkFESl8zMkFQU0sgIDB4ZjIyYjAwMWYKKworLypQMl9BR0MyTyovCisjZGVmaW5lIFIwOTAwX1AyX0FHQzJPICAweGYyMmMKKyNkZWZpbmUgRjA5MDBfUDJfQUdDMlJFRl9BREpVU1RJTkcgIDB4ZjIyYzAwODAKKyNkZWZpbmUgRjA5MDBfUDJfQUdDMl9DT0FSU0VGQVNUICAweGYyMmMwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0FHQzJfTEtTUVJUICAweGYyMmMwMDIwCisjZGVmaW5lIEYwOTAwX1AyX0FHQzJfTEtNT0RFICAweGYyMmMwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0FHQzJfTEtFUVVBICAweGYyMmMwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0FHQzJfQ09FRiAgMHhmMjJjMDAwNworCisvKlAyX0FHQzJSRUYqLworI2RlZmluZSBSMDkwMF9QMl9BR0MyUkVGICAweGYyMmQKKyNkZWZpbmUgRjA5MDBfUDJfQUdDMl9SRUYgIDB4ZjIyZDAwZmYKKworLypQMl9BR0MxQURKKi8KKyNkZWZpbmUgUjA5MDBfUDJfQUdDMUFESiAgMHhmMjJlCisjZGVmaW5lIEYwOTAwX1AyX0FHQzFBREpfTUFOVUFMICAweGYyMmUwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0FHQzFfQURKVVNURUQgIDB4ZjIyZTAxN2YKKworLypQMl9BR0MySTEqLworI2RlZmluZSBSMDkwMF9QMl9BR0MySTEgIDB4ZjIzNgorI2RlZmluZSBGMDkwMF9QMl9BR0MyX0lOVEVHUkFUT1IxICAweGYyMzYwMGZmCisKKy8qUDJfQUdDMkkwKi8KKyNkZWZpbmUgUjA5MDBfUDJfQUdDMkkwICAweGYyMzcKKyNkZWZpbmUgRjA5MDBfUDJfQUdDMl9JTlRFR1JBVE9SMCAgMHhmMjM3MDBmZgorCisvKlAyX0NBUkNGRyovCisjZGVmaW5lIFIwOTAwX1AyX0NBUkNGRyAgMHhmMjM4CisjZGVmaW5lIEYwOTAwX1AyX0NGUlVQTE9XX0FVVE8gIDB4ZjIzODAwODAKKyNkZWZpbmUgRjA5MDBfUDJfQ0ZSVVBMT1dfVEVTVCAgMHhmMjM4MDA0MAorI2RlZmluZSBGMDkwMF9QMl9FTl9DQVIyQ0VOVEVSICAweGYyMzgwMDIwCisjZGVmaW5lIEYwOTAwX1AyX0NBUkhEUl9OT0RJVjggIDB4ZjIzODAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfSTJDX1JPVEEgIDB4ZjIzODAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfUk9UQU9OICAweGYyMzgwMDA0CisjZGVmaW5lIEYwOTAwX1AyX1BIX0RFVF9BTEdPICAweGYyMzgwMDAzCisKKy8qUDJfQUNMQyovCisjZGVmaW5lIFIwOTAwX1AyX0FDTEMgIDB4ZjIzOQorI2RlZmluZSBGMDkwMF9QMl9TVE9QX1MyQUxQSEEgIDB4ZjIzOTAwYzAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSX0FMUEhBX01BTlQgIDB4ZjIzOTAwMzAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSX0FMUEhBX0VYUCAgMHhmMjM5MDAwZgorCisvKlAyX0JDTEMqLworI2RlZmluZSBSMDkwMF9QMl9CQ0xDICAweGYyM2EKKyNkZWZpbmUgRjA5MDBfUDJfU1RPUF9TMkJFVEEgIDB4ZjIzYTAwYzAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSX0JFVEFfTUFOVCAgMHhmMjNhMDAzMAorI2RlZmluZSBGMDkwMF9QMl9DQVJfQkVUQV9FWFAgIDB4ZjIzYTAwMGYKKworLypQMl9DQVJGUkVRKi8KKyNkZWZpbmUgUjA5MDBfUDJfQ0FSRlJFUSAgMHhmMjNkCisjZGVmaW5lIEYwOTAwX1AyX0tDX0NPQVJTRV9FWFAgIDB4ZjIzZDAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfQkVUQV9GUkVRICAweGYyM2QwMDBmCisKKy8qUDJfQ0FSSERSKi8KKyNkZWZpbmUgUjA5MDBfUDJfQ0FSSERSICAweGYyM2UKKyNkZWZpbmUgRjA5MDBfUDJfS19GUkVRX0hEUiAgMHhmMjNlMDBmZgorCisvKlAyX0xEVCovCisjZGVmaW5lIFIwOTAwX1AyX0xEVCAgMHhmMjNmCisjZGVmaW5lIEYwOTAwX1AyX0NBUkxPQ0tfVEhSRVMgIDB4ZjIzZjAxZmYKKworLypQMl9MRFQyKi8KKyNkZWZpbmUgUjA5MDBfUDJfTERUMiAgMHhmMjQwCisjZGVmaW5lIEYwOTAwX1AyX0NBUkxPQ0tfVEhSRVMyICAweGYyNDAwMWZmCisKKy8qUDJfQ0ZSSUNGRyovCisjZGVmaW5lIFIwOTAwX1AyX0NGUklDRkcgIDB4ZjI0MQorI2RlZmluZSBGMDkwMF9QMl9DRlJJTklUX1VOVkFMUk5HICAweGYyNDEwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0NGUklOSVRfTFVOVkFMQ1BUICAweGYyNDEwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0NGUklOSVRfQUJPUlREQkwgIDB4ZjI0MTAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfQ0ZSSU5JVF9BQk9SVFBSRUQgIDB4ZjI0MTAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfQ0ZSSU5JVF9VTlZBTFNLSVAgIDB4ZjI0MTAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfQ0ZSSU5JVF9DU1RJTkMgIDB4ZjI0MTAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfTkVHX0NGUlNURVAgIDB4ZjI0MTAwMDEKKworLypQMl9DRlJVUDEqLworI2RlZmluZSBSMDkwMF9QMl9DRlJVUDEgIDB4ZjI0MgorI2RlZmluZSBGMDkwMF9QMl9DRlJfVVAxICAweGYyNDIwMWZmCisKKy8qUDJfQ0ZSVVAwKi8KKyNkZWZpbmUgUjA5MDBfUDJfQ0ZSVVAwICAweGYyNDMKKyNkZWZpbmUgRjA5MDBfUDJfQ0ZSX1VQMCAgMHhmMjQzMDBmZgorCisvKlAyX0NGUkxPVzEqLworI2RlZmluZSBSMDkwMF9QMl9DRlJMT1cxICAweGYyNDYKKyNkZWZpbmUgRjA5MDBfUDJfQ0ZSX0xPVzEgIDB4ZjI0NjAxZmYKKworLypQMl9DRlJMT1cwKi8KKyNkZWZpbmUgUjA5MDBfUDJfQ0ZSTE9XMCAgMHhmMjQ3CisjZGVmaW5lIEYwOTAwX1AyX0NGUl9MT1cwICAweGYyNDcwMGZmCisKKy8qUDJfQ0ZSSU5JVDEqLworI2RlZmluZSBSMDkwMF9QMl9DRlJJTklUMSAgMHhmMjQ4CisjZGVmaW5lIEYwOTAwX1AyX0NGUl9JTklUMSAgMHhmMjQ4MDFmZgorCisvKlAyX0NGUklOSVQwKi8KKyNkZWZpbmUgUjA5MDBfUDJfQ0ZSSU5JVDAgIDB4ZjI0OQorI2RlZmluZSBGMDkwMF9QMl9DRlJfSU5JVDAgIDB4ZjI0OTAwZmYKKworLypQMl9DRlJJTkMxKi8KKyNkZWZpbmUgUjA5MDBfUDJfQ0ZSSU5DMSAgMHhmMjRhCisjZGVmaW5lIEYwOTAwX1AyX01BTlVBTF9DRlJJTkMgIDB4ZjI0YTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfQ0ZSX0lOQzEgIDB4ZjI0YTAxN2YKKworLypQMl9DRlJJTkMwKi8KKyNkZWZpbmUgUjA5MDBfUDJfQ0ZSSU5DMCAgMHhmMjRiCisjZGVmaW5lIEYwOTAwX1AyX0NGUl9JTkMwICAweGYyNGIwMGYwCisKKy8qUDJfQ0ZSMiovCisjZGVmaW5lIFIwOTAwX1AyX0NGUjIgIDB4ZjI0YworI2RlZmluZSBGMDkwMF9QMl9DQVJfRlJFUTIgIDB4ZjI0YzAxZmYKKworLypQMl9DRlIxKi8KKyNkZWZpbmUgUjA5MDBfUDJfQ0ZSMSAgMHhmMjRkCisjZGVmaW5lIEYwOTAwX1AyX0NBUl9GUkVRMSAgMHhmMjRkMDBmZgorCisvKlAyX0NGUjAqLworI2RlZmluZSBSMDkwMF9QMl9DRlIwICAweGYyNGUKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSX0ZSRVEwICAweGYyNGUwMGZmCisKKy8qUDJfTERJKi8KKyNkZWZpbmUgUjA5MDBfUDJfTERJICAweGYyNGYKKyNkZWZpbmUgRjA5MDBfUDJfTE9DS19ERVRfSU5URUdSICAweGYyNGYwMWZmCisKKy8qUDJfVE1HQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE1HQ0ZHICAweGYyNTAKKyNkZWZpbmUgRjA5MDBfUDJfVE1HTE9DS19CRVRBICAweGYyNTAwMGMwCisjZGVmaW5lIEYwOTAwX1AyX05PVE1HX0dST1VQREVMQVkgIDB4ZjI1MDAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfRE9fVElNSU5HX0NPUlIgIDB4ZjI1MDAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfTUFOVUFMX1NDQU4gIDB4ZjI1MDAwMGMKKyNkZWZpbmUgRjA5MDBfUDJfVE1HX01JTkZSRVEgIDB4ZjI1MDAwMDMKKworLypQMl9SVEMqLworI2RlZmluZSBSMDkwMF9QMl9SVEMgIDB4ZjI1MQorI2RlZmluZSBGMDkwMF9QMl9UTUdBTFBIQV9FWFAgIDB4ZjI1MTAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfVE1HQkVUQV9FWFAgIDB4ZjI1MTAwMGYKKworLypQMl9SVENTMiovCisjZGVmaW5lIFIwOTAwX1AyX1JUQ1MyICAweGYyNTIKKyNkZWZpbmUgRjA5MDBfUDJfVE1HQUxQSEFTMl9FWFAgIDB4ZjI1MjAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfVE1HQkVUQVMyX0VYUCAgMHhmMjUyMDAwZgorCisvKlAyX1RNR1RIUklTRSovCisjZGVmaW5lIFIwOTAwX1AyX1RNR1RIUklTRSAgMHhmMjUzCisjZGVmaW5lIEYwOTAwX1AyX1RNR0xPQ0tfVEhSSVNFICAweGYyNTMwMGZmCisKKy8qUDJfVE1HVEhGQUxMKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE1HVEhGQUxMICAweGYyNTQKKyNkZWZpbmUgRjA5MDBfUDJfVE1HTE9DS19USEZBTEwgIDB4ZjI1NDAwZmYKKworLypQMl9TRlJVUFJBVElPKi8KKyNkZWZpbmUgUjA5MDBfUDJfU0ZSVVBSQVRJTyAgMHhmMjU1CisjZGVmaW5lIEYwOTAwX1AyX1NGUl9VUFJBVElPICAweGYyNTUwMGZmCisKKy8qUDJfU0ZSTE9XUkFUSU8qLworI2RlZmluZSBSMDkwMF9QMl9TRlJMT1dSQVRJTyAgMHhmMjU2CisjZGVmaW5lIEYwOTAwX1AyX1NGUl9MT1dSQVRJTyAgMHhmMjU2MDBmZgorCisvKlAyX0tSRUZUTUcqLworI2RlZmluZSBSMDkwMF9QMl9LUkVGVE1HICAweGYyNTgKKyNkZWZpbmUgRjA5MDBfUDJfS1JFRl9UTUcgIDB4ZjI1ODAwZmYKKworLypQMl9TRlJTVEVQKi8KKyNkZWZpbmUgUjA5MDBfUDJfU0ZSU1RFUCAgMHhmMjU5CisjZGVmaW5lIEYwOTAwX1AyX1NGUl9TQ0FOU1RFUCAgMHhmMjU5MDBmMAorI2RlZmluZSBGMDkwMF9QMl9TRlJfQ0VOVEVSU1RFUCAgMHhmMjU5MDAwZgorCisvKlAyX1RNR0NGRzIqLworI2RlZmluZSBSMDkwMF9QMl9UTUdDRkcyICAweGYyNWEKKyNkZWZpbmUgRjA5MDBfUDJfRElTX0FVVE9TQU1QICAweGYyNWEwMDA4CisjZGVmaW5lIEYwOTAwX1AyX1NDQU5JTklUX1FVQVJUICAweGYyNWEwMDA0CisjZGVmaW5lIEYwOTAwX1AyX05PVE1HX0RWQlMxREVSQVQgIDB4ZjI1YTAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfU0ZSUkFUSU9fRklORSAgMHhmMjVhMDAwMQorCisvKlAyX1NGUklOSVQxKi8KKyNkZWZpbmUgUjA5MDBfUDJfU0ZSSU5JVDEgIDB4ZjI1ZQorI2RlZmluZSBGMDkwMF9QMl9TRlJfSU5JVDEgIDB4ZjI1ZTAwZmYKKworLypQMl9TRlJJTklUMCovCisjZGVmaW5lIFIwOTAwX1AyX1NGUklOSVQwICAweGYyNWYKKyNkZWZpbmUgRjA5MDBfUDJfU0ZSX0lOSVQwICAweGYyNWYwMGZmCisKKy8qUDJfU0ZSVVAxKi8KKyNkZWZpbmUgUjA5MDBfUDJfU0ZSVVAxICAweGYyNjAKKyNkZWZpbmUgRjA5MDBfUDJfQVVUT19HVVAgIDB4ZjI2MDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfU1lNQl9GUkVRX1VQMSAgMHhmMjYwMDA3ZgorCisvKlAyX1NGUlVQMCovCisjZGVmaW5lIFIwOTAwX1AyX1NGUlVQMCAgMHhmMjYxCisjZGVmaW5lIEYwOTAwX1AyX1NZTUJfRlJFUV9VUDAgIDB4ZjI2MTAwZmYKKworLypQMl9TRlJMT1cxKi8KKyNkZWZpbmUgUjA5MDBfUDJfU0ZSTE9XMSAgMHhmMjYyCisjZGVmaW5lIEYwOTAwX1AyX0FVVE9fR0xPVyAgMHhmMjYyMDA4MAorI2RlZmluZSBGMDkwMF9QMl9TWU1CX0ZSRVFfTE9XMSAgMHhmMjYyMDA3ZgorCisvKlAyX1NGUkxPVzAqLworI2RlZmluZSBSMDkwMF9QMl9TRlJMT1cwICAweGYyNjMKKyNkZWZpbmUgRjA5MDBfUDJfU1lNQl9GUkVRX0xPVzAgIDB4ZjI2MzAwZmYKKworLypQMl9TRlIzKi8KKyNkZWZpbmUgUjA5MDBfUDJfU0ZSMyAgMHhmMjY0CisjZGVmaW5lIEYwOTAwX1AyX1NZTUJfRlJFUTMgIDB4ZjI2NDAwZmYKKworLypQMl9TRlIyKi8KKyNkZWZpbmUgUjA5MDBfUDJfU0ZSMiAgMHhmMjY1CisjZGVmaW5lIEYwOTAwX1AyX1NZTUJfRlJFUTIgIDB4ZjI2NTAwZmYKKworLypQMl9TRlIxKi8KKyNkZWZpbmUgUjA5MDBfUDJfU0ZSMSAgMHhmMjY2CisjZGVmaW5lIEYwOTAwX1AyX1NZTUJfRlJFUTEgIDB4ZjI2NjAwZmYKKworLypQMl9TRlIwKi8KKyNkZWZpbmUgUjA5MDBfUDJfU0ZSMCAgMHhmMjY3CisjZGVmaW5lIEYwOTAwX1AyX1NZTUJfRlJFUTAgIDB4ZjI2NzAwZmYKKworLypQMl9UTUdSRUcyKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE1HUkVHMiAgMHhmMjY4CisjZGVmaW5lIEYwOTAwX1AyX1RNR1JFRzIgIDB4ZjI2ODAwZmYKKworLypQMl9UTUdSRUcxKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE1HUkVHMSAgMHhmMjY5CisjZGVmaW5lIEYwOTAwX1AyX1RNR1JFRzEgIDB4ZjI2OTAwZmYKKworLypQMl9UTUdSRUcwKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE1HUkVHMCAgMHhmMjZhCisjZGVmaW5lIEYwOTAwX1AyX1RNR1JFRzAgIDB4ZjI2YTAwZmYKKworLypQMl9UTUdMT0NLMSovCisjZGVmaW5lIFIwOTAwX1AyX1RNR0xPQ0sxICAweGYyNmIKKyNkZWZpbmUgRjA5MDBfUDJfVE1HTE9DS19MRVZFTDEgIDB4ZjI2YjAxZmYKKworLypQMl9UTUdMT0NLMCovCisjZGVmaW5lIFIwOTAwX1AyX1RNR0xPQ0swICAweGYyNmMKKyNkZWZpbmUgRjA5MDBfUDJfVE1HTE9DS19MRVZFTDAgIDB4ZjI2YzAwZmYKKworLypQMl9UTUdPQlMqLworI2RlZmluZSBSMDkwMF9QMl9UTUdPQlMgIDB4ZjI2ZAorI2RlZmluZSBGMDkwMF9QMl9ST0xMT0ZGX1NUQVRVUyAgMHhmMjZkMDBjMAorI2RlZmluZSBGMDkwMF9QMl9TQ0FOX1NJR04gIDB4ZjI2ZDAwMzAKKyNkZWZpbmUgRjA5MDBfUDJfVE1HX1NDQU5OSU5HICAweGYyNmQwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0NIQ0VOVEVSSU5HX01PREUgIDB4ZjI2ZDAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfVE1HX1NDQU5GQUlMICAweGYyNmQwMDAyCisKKy8qUDJfRVFVQUxDRkcqLworI2RlZmluZSBSMDkwMF9QMl9FUVVBTENGRyAgMHhmMjZmCisjZGVmaW5lIEYwOTAwX1AyX05PVE1HX05FR0FMV0FJVCAgMHhmMjZmMDA4MAorI2RlZmluZSBGMDkwMF9QMl9FUVVBTF9PTiAgMHhmMjZmMDA0MAorI2RlZmluZSBGMDkwMF9QMl9TRUxfRVFVQUxDT1IgIDB4ZjI2ZjAwMzgKKyNkZWZpbmUgRjA5MDBfUDJfTVVfRVFVQUxERkUgIDB4ZjI2ZjAwMDcKKworLypQMl9FUVVBSTEqLworI2RlZmluZSBSMDkwMF9QMl9FUVVBSTEgIDB4ZjI3MAorI2RlZmluZSBGMDkwMF9QMl9FUVVBX0FDQ0kxICAweGYyNzAwMWZmCisKKy8qUDJfRVFVQVExKi8KKyNkZWZpbmUgUjA5MDBfUDJfRVFVQVExICAweGYyNzEKKyNkZWZpbmUgRjA5MDBfUDJfRVFVQV9BQ0NRMSAgMHhmMjcxMDFmZgorCisvKlAyX0VRVUFJMiovCisjZGVmaW5lIFIwOTAwX1AyX0VRVUFJMiAgMHhmMjcyCisjZGVmaW5lIEYwOTAwX1AyX0VRVUFfQUNDSTIgIDB4ZjI3MjAxZmYKKworLypQMl9FUVVBUTIqLworI2RlZmluZSBSMDkwMF9QMl9FUVVBUTIgIDB4ZjI3MworI2RlZmluZSBGMDkwMF9QMl9FUVVBX0FDQ1EyICAweGYyNzMwMWZmCisKKy8qUDJfRVFVQUkzKi8KKyNkZWZpbmUgUjA5MDBfUDJfRVFVQUkzICAweGYyNzQKKyNkZWZpbmUgRjA5MDBfUDJfRVFVQV9BQ0NJMyAgMHhmMjc0MDFmZgorCisvKlAyX0VRVUFRMyovCisjZGVmaW5lIFIwOTAwX1AyX0VRVUFRMyAgMHhmMjc1CisjZGVmaW5lIEYwOTAwX1AyX0VRVUFfQUNDUTMgIDB4ZjI3NTAxZmYKKworLypQMl9FUVVBSTQqLworI2RlZmluZSBSMDkwMF9QMl9FUVVBSTQgIDB4ZjI3NgorI2RlZmluZSBGMDkwMF9QMl9FUVVBX0FDQ0k0ICAweGYyNzYwMWZmCisKKy8qUDJfRVFVQVE0Ki8KKyNkZWZpbmUgUjA5MDBfUDJfRVFVQVE0ICAweGYyNzcKKyNkZWZpbmUgRjA5MDBfUDJfRVFVQV9BQ0NRNCAgMHhmMjc3MDFmZgorCisvKlAyX0VRVUFJNSovCisjZGVmaW5lIFIwOTAwX1AyX0VRVUFJNSAgMHhmMjc4CisjZGVmaW5lIEYwOTAwX1AyX0VRVUFfQUNDSTUgIDB4ZjI3ODAxZmYKKworLypQMl9FUVVBUTUqLworI2RlZmluZSBSMDkwMF9QMl9FUVVBUTUgIDB4ZjI3OQorI2RlZmluZSBGMDkwMF9QMl9FUVVBX0FDQ1E1ICAweGYyNzkwMWZmCisKKy8qUDJfRVFVQUk2Ki8KKyNkZWZpbmUgUjA5MDBfUDJfRVFVQUk2ICAweGYyN2EKKyNkZWZpbmUgRjA5MDBfUDJfRVFVQV9BQ0NJNiAgMHhmMjdhMDFmZgorCisvKlAyX0VRVUFRNiovCisjZGVmaW5lIFIwOTAwX1AyX0VRVUFRNiAgMHhmMjdiCisjZGVmaW5lIEYwOTAwX1AyX0VRVUFfQUNDUTYgIDB4ZjI3YjAxZmYKKworLypQMl9FUVVBSTcqLworI2RlZmluZSBSMDkwMF9QMl9FUVVBSTcgIDB4ZjI3YworI2RlZmluZSBGMDkwMF9QMl9FUVVBX0FDQ0k3ICAweGYyN2MwMWZmCisKKy8qUDJfRVFVQVE3Ki8KKyNkZWZpbmUgUjA5MDBfUDJfRVFVQVE3ICAweGYyN2QKKyNkZWZpbmUgRjA5MDBfUDJfRVFVQV9BQ0NRNyAgMHhmMjdkMDFmZgorCisvKlAyX0VRVUFJOCovCisjZGVmaW5lIFIwOTAwX1AyX0VRVUFJOCAgMHhmMjdlCisjZGVmaW5lIEYwOTAwX1AyX0VRVUFfQUNDSTggIDB4ZjI3ZTAxZmYKKworLypQMl9FUVVBUTgqLworI2RlZmluZSBSMDkwMF9QMl9FUVVBUTggIDB4ZjI3ZgorI2RlZmluZSBGMDkwMF9QMl9FUVVBX0FDQ1E4ICAweGYyN2YwMWZmCisKKy8qUDJfTk5PU0RBVEFUMSovCisjZGVmaW5lIFIwOTAwX1AyX05OT1NEQVRBVDEgIDB4ZjI4MAorI2RlZmluZSBGMDkwMF9QMl9OT1NEQVRBVF9OT1JNRUQxICAweGYyODAwMGZmCisKKy8qUDJfTk5PU0RBVEFUMCovCisjZGVmaW5lIFIwOTAwX1AyX05OT1NEQVRBVDAgIDB4ZjI4MQorI2RlZmluZSBGMDkwMF9QMl9OT1NEQVRBVF9OT1JNRUQwICAweGYyODEwMGZmCisKKy8qUDJfTk5PU0RBVEExKi8KKyNkZWZpbmUgUjA5MDBfUDJfTk5PU0RBVEExICAweGYyODIKKyNkZWZpbmUgRjA5MDBfUDJfTk9TREFUQV9OT1JNRUQxICAweGYyODIwMGZmCisKKy8qUDJfTk5PU0RBVEEwKi8KKyNkZWZpbmUgUjA5MDBfUDJfTk5PU0RBVEEwICAweGYyODMKKyNkZWZpbmUgRjA5MDBfUDJfTk9TREFUQV9OT1JNRUQwICAweGYyODMwMGZmCisKKy8qUDJfTk5PU1BMSFQxKi8KKyNkZWZpbmUgUjA5MDBfUDJfTk5PU1BMSFQxICAweGYyODQKKyNkZWZpbmUgRjA5MDBfUDJfTk9TUExIVF9OT1JNRUQxICAweGYyODQwMGZmCisKKy8qUDJfTk5PU1BMSFQwKi8KKyNkZWZpbmUgUjA5MDBfUDJfTk5PU1BMSFQwICAweGYyODUKKyNkZWZpbmUgRjA5MDBfUDJfTk9TUExIVF9OT1JNRUQwICAweGYyODUwMGZmCisKKy8qUDJfTk5PU1BMSDEqLworI2RlZmluZSBSMDkwMF9QMl9OTk9TUExIMSAgMHhmMjg2CisjZGVmaW5lIEYwOTAwX1AyX05PU1BMSF9OT1JNRUQxICAweGYyODYwMGZmCisKKy8qUDJfTk5PU1BMSDAqLworI2RlZmluZSBSMDkwMF9QMl9OTk9TUExIMCAgMHhmMjg3CisjZGVmaW5lIEYwOTAwX1AyX05PU1BMSF9OT1JNRUQwICAweGYyODcwMGZmCisKKy8qUDJfTk9TREFUQVQxKi8KKyNkZWZpbmUgUjA5MDBfUDJfTk9TREFUQVQxICAweGYyODgKKyNkZWZpbmUgRjA5MDBfUDJfTk9TREFUQVRfVU5OT1JNRUQxICAweGYyODgwMGZmCisKKy8qUDJfTk9TREFUQVQwKi8KKyNkZWZpbmUgUjA5MDBfUDJfTk9TREFUQVQwICAweGYyODkKKyNkZWZpbmUgRjA5MDBfUDJfTk9TREFUQVRfVU5OT1JNRUQwICAweGYyODkwMGZmCisKKy8qUDJfTk9TREFUQTEqLworI2RlZmluZSBSMDkwMF9QMl9OT1NEQVRBMSAgMHhmMjhhCisjZGVmaW5lIEYwOTAwX1AyX05PU0RBVEFfVU5OT1JNRUQxICAweGYyOGEwMGZmCisKKy8qUDJfTk9TREFUQTAqLworI2RlZmluZSBSMDkwMF9QMl9OT1NEQVRBMCAgMHhmMjhiCisjZGVmaW5lIEYwOTAwX1AyX05PU0RBVEFfVU5OT1JNRUQwICAweGYyOGIwMGZmCisKKy8qUDJfTk9TUExIVDEqLworI2RlZmluZSBSMDkwMF9QMl9OT1NQTEhUMSAgMHhmMjhjCisjZGVmaW5lIEYwOTAwX1AyX05PU1BMSFRfVU5OT1JNRUQxICAweGYyOGMwMGZmCisKKy8qUDJfTk9TUExIVDAqLworI2RlZmluZSBSMDkwMF9QMl9OT1NQTEhUMCAgMHhmMjhkCisjZGVmaW5lIEYwOTAwX1AyX05PU1BMSFRfVU5OT1JNRUQwICAweGYyOGQwMGZmCisKKy8qUDJfTk9TUExIMSovCisjZGVmaW5lIFIwOTAwX1AyX05PU1BMSDEgIDB4ZjI4ZQorI2RlZmluZSBGMDkwMF9QMl9OT1NQTEhfVU5OT1JNRUQxICAweGYyOGUwMGZmCisKKy8qUDJfTk9TUExIMCovCisjZGVmaW5lIFIwOTAwX1AyX05PU1BMSDAgIDB4ZjI4ZgorI2RlZmluZSBGMDkwMF9QMl9OT1NQTEhfVU5OT1JNRUQwICAweGYyOGYwMGZmCisKKy8qUDJfQ0FSMkNGRyovCisjZGVmaW5lIFIwOTAwX1AyX0NBUjJDRkcgIDB4ZjI5MAorI2RlZmluZSBGMDkwMF9QMl9ERVNDUkFNQl9PRkYgIDB4ZjI5MDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfUE40X1NFTEVDVCAgMHhmMjkwMDA0MAorI2RlZmluZSBGMDkwMF9QMl9DRlIyX1NUT1BEVkJTMSAgMHhmMjkwMDAyMAorI2RlZmluZSBGMDkwMF9QMl9TVE9QX0NGUjJVUERBVEUgIDB4ZjI5MDAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfU1RPUF9OQ08yVVBEQVRFICAweGYyOTAwMDA4CisjZGVmaW5lIEYwOTAwX1AyX1JPVEEyT04gIDB4ZjI5MDAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfUEhfREVUX0FMR08yICAweGYyOTAwMDAzCisKKy8qUDJfQUNMQzIqLworI2RlZmluZSBSMDkwMF9QMl9BQ0xDMiAgMHhmMjkxCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJfUFVOQ1RfQURFUkFUICAweGYyOTEwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJfQUxQSEFfTUFOVCAgMHhmMjkxMDAzMAorI2RlZmluZSBGMDkwMF9QMl9DQVIyX0FMUEhBX0VYUCAgMHhmMjkxMDAwZgorCisvKlAyX0JDTEMyKi8KKyNkZWZpbmUgUjA5MDBfUDJfQkNMQzIgIDB4ZjI5MgorI2RlZmluZSBGMDkwMF9QMl9EVkJTMl9OSVAgIDB4ZjI5MjAwODAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMl9QVU5DVF9CREVSQVQgIDB4ZjI5MjAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMl9CRVRBX01BTlQgIDB4ZjI5MjAwMzAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMl9CRVRBX0VYUCAgMHhmMjkyMDAwZgorCisvKlAyX0NGUjIyKi8KKyNkZWZpbmUgUjA5MDBfUDJfQ0ZSMjIgIDB4ZjI5MworI2RlZmluZSBGMDkwMF9QMl9DQVIyX0ZSRVEyICAweGYyOTMwMWZmCisKKy8qUDJfQ0ZSMjEqLworI2RlZmluZSBSMDkwMF9QMl9DRlIyMSAgMHhmMjk0CisjZGVmaW5lIEYwOTAwX1AyX0NBUjJfRlJFUTEgIDB4ZjI5NDAwZmYKKworLypQMl9DRlIyMCovCisjZGVmaW5lIFIwOTAwX1AyX0NGUjIwICAweGYyOTUKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMl9GUkVRMCAgMHhmMjk1MDBmZgorCisvKlAyX0FDTEMyUzJRKi8KKyNkZWZpbmUgUjA5MDBfUDJfQUNMQzJTMlEgIDB4ZjI5NworI2RlZmluZSBGMDkwMF9QMl9FTkFCX1NQU0tTWU1CICAweGYyOTcwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl9RQURFUkFUICAweGYyOTcwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl9RX0FMUEhfTSAgMHhmMjk3MDAzMAorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfUV9BTFBIX0UgIDB4ZjI5NzAwMGYKKworLypQMl9BQ0xDMlMyOCovCisjZGVmaW5lIFIwOTAwX1AyX0FDTEMyUzI4ICAweGYyOTgKKyNkZWZpbmUgRjA5MDBfUDJfT0xESTNRX01PREUgIDB4ZjI5ODAwODAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyXzhBREVSQVQgIDB4ZjI5ODAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyXzhfQUxQSF9NICAweGYyOTgwMDMwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl84X0FMUEhfRSAgMHhmMjk4MDAwZgorCisvKlAyX0FDTEMyUzIxNkEqLworI2RlZmluZSBSMDkwMF9QMl9BQ0xDMlMyMTZBICAweGYyOTkKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyXzE2QURFUkFUICAweGYyOTkwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl8xNkFfQUxQSF9NICAweGYyOTkwMDMwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl8xNkFfQUxQSF9FICAweGYyOTkwMDBmCisKKy8qUDJfQUNMQzJTMjMyQSovCisjZGVmaW5lIFIwOTAwX1AyX0FDTEMyUzIzMkEgIDB4ZjI5YQorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfMzJBREVSQVQgIDB4ZjI5YTAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyXzMyQV9BTFBIX00gIDB4ZjI5YTAwMzAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyXzMyQV9BTFBIX0UgIDB4ZjI5YTAwMGYKKworLypQMl9CQ0xDMlMyUSovCisjZGVmaW5lIFIwOTAwX1AyX0JDTEMyUzJRICAweGYyOWMKKyNkZWZpbmUgRjA5MDBfUDJfRFZCUzJTMlFfTklQICAweGYyOWMwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl9RQkRFUkFUICAweGYyOWMwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl9RX0JFVEFfTSAgMHhmMjljMDAzMAorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfUV9CRVRBX0UgIDB4ZjI5YzAwMGYKKworLypQMl9CQ0xDMlMyOCovCisjZGVmaW5lIFIwOTAwX1AyX0JDTEMyUzI4ICAweGYyOWQKKyNkZWZpbmUgRjA5MDBfUDJfRFZCUzJTMjhfTklQICAweGYyOWQwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl84QkRFUkFUICAweGYyOWQwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl84X0JFVEFfTSAgMHhmMjlkMDAzMAorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfOF9CRVRBX0UgIDB4ZjI5ZDAwMGYKKworLypQMl9CQ0xDMlMyMTZBKi8KKyNkZWZpbmUgUjA5MDBfUDJfQkNMQzJTMjE2QSAgMHhmMjllCisjZGVmaW5lIEYwOTAwX1AyX0RWQlMyUzIxNkFfTklQICAweGYyOWUwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl8xNkJERVJBVCAgMHhmMjllMDA0MAorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfMTZBX0JFVEFfTSAgMHhmMjllMDAzMAorI2RlZmluZSBGMDkwMF9QMl9DQVIyUzJfMTZBX0JFVEFfRSAgMHhmMjllMDAwZgorCisvKlAyX0JDTEMyUzIzMkEqLworI2RlZmluZSBSMDkwMF9QMl9CQ0xDMlMyMzJBICAweGYyOWYKKyNkZWZpbmUgRjA5MDBfUDJfRFZCUzJTMjMyQV9OSVAgIDB4ZjI5ZjAwODAKKyNkZWZpbmUgRjA5MDBfUDJfQ0FSMlMyXzMyQkRFUkFUICAweGYyOWYwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl8zMkFfQkVUQV9NICAweGYyOWYwMDMwCisjZGVmaW5lIEYwOTAwX1AyX0NBUjJTMl8zMkFfQkVUQV9FICAweGYyOWYwMDBmCisKKy8qUDJfUExST09UMiovCisjZGVmaW5lIFIwOTAwX1AyX1BMUk9PVDIgIDB4ZjJhYworI2RlZmluZSBGMDkwMF9QMl9TSE9SVEZSX0RJU0FCTEUgIDB4ZjJhYzAwODAKKyNkZWZpbmUgRjA5MDBfUDJfTE9OR0ZSX0RJU0FCTEUgIDB4ZjJhYzAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfRFVNTVlQTF9ESVNBQkxFICAweGYyYWMwMDIwCisjZGVmaW5lIEYwOTAwX1AyX1NIT1JURlJfQVZPSUQgIDB4ZjJhYzAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfUExTQ1JBTUJfTU9ERSAgMHhmMmFjMDAwYworI2RlZmluZSBGMDkwMF9QMl9QTFNDUkFNQl9ST09UMiAgMHhmMmFjMDAwMworCisvKlAyX1BMUk9PVDEqLworI2RlZmluZSBSMDkwMF9QMl9QTFJPT1QxICAweGYyYWQKKyNkZWZpbmUgRjA5MDBfUDJfUExTQ1JBTUJfUk9PVDEgIDB4ZjJhZDAwZmYKKworLypQMl9QTFJPT1QwKi8KKyNkZWZpbmUgUjA5MDBfUDJfUExST09UMCAgMHhmMmFlCisjZGVmaW5lIEYwOTAwX1AyX1BMU0NSQU1CX1JPT1QwICAweGYyYWUwMGZmCisKKy8qUDJfTU9EQ09ETFNUMCovCisjZGVmaW5lIFIwOTAwX1AyX01PRENPRExTVDAgIDB4ZjJiMAorI2RlZmluZSBGMDkwMF9QMl9FTl9UT0tFTjMxICAweGYyYjAwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1NZTkNUQUdfU0VMRUNUICAweGYyYjAwMDQwCisjZGVmaW5lIEYwOTAwX1AyX01PRENPRFJRX01PREUgIDB4ZjJiMDAwMzAKKworLypQMl9NT0RDT0RMU1QxKi8KKyNkZWZpbmUgUjA5MDBfUDJfTU9EQ09ETFNUMSAgMHhmMmIxCisjZGVmaW5lIEYwOTAwX1AyX0RJU19NT0RDT0QyOSAgMHhmMmIxMDBmMAorI2RlZmluZSBGMDkwMF9QMl9ESVNfMzJQU0tfOV8xMCAgMHhmMmIxMDAwZgorCisvKlAyX01PRENPRExTVDIqLworI2RlZmluZSBSMDkwMF9QMl9NT0RDT0RMU1QyICAweGYyYjIKKyNkZWZpbmUgRjA5MDBfUDJfRElTXzMyUFNLXzhfOSAgMHhmMmIyMDBmMAorI2RlZmluZSBGMDkwMF9QMl9ESVNfMzJQU0tfNV82ICAweGYyYjIwMDBmCisKKy8qUDJfTU9EQ09ETFNUMyovCisjZGVmaW5lIFIwOTAwX1AyX01PRENPRExTVDMgIDB4ZjJiMworI2RlZmluZSBGMDkwMF9QMl9ESVNfMzJQU0tfNF81ICAweGYyYjMwMGYwCisjZGVmaW5lIEYwOTAwX1AyX0RJU18zMlBTS18zXzQgIDB4ZjJiMzAwMGYKKworLypQMl9NT0RDT0RMU1Q0Ki8KKyNkZWZpbmUgUjA5MDBfUDJfTU9EQ09ETFNUNCAgMHhmMmI0CisjZGVmaW5lIEYwOTAwX1AyX0RJU18xNlBTS185XzEwICAweGYyYjQwMGYwCisjZGVmaW5lIEYwOTAwX1AyX0RJU18xNlBTS184XzkgIDB4ZjJiNDAwMGYKKworLypQMl9NT0RDT0RMU1Q1Ki8KKyNkZWZpbmUgUjA5MDBfUDJfTU9EQ09ETFNUNSAgMHhmMmI1CisjZGVmaW5lIEYwOTAwX1AyX0RJU18xNlBTS181XzYgIDB4ZjJiNTAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfRElTXzE2UFNLXzRfNSAgMHhmMmI1MDAwZgorCisvKlAyX01PRENPRExTVDYqLworI2RlZmluZSBSMDkwMF9QMl9NT0RDT0RMU1Q2ICAweGYyYjYKKyNkZWZpbmUgRjA5MDBfUDJfRElTXzE2UFNLXzNfNCAgMHhmMmI2MDBmMAorI2RlZmluZSBGMDkwMF9QMl9ESVNfMTZQU0tfMl8zICAweGYyYjYwMDBmCisKKy8qUDJfTU9EQ09ETFNUNyovCisjZGVmaW5lIFIwOTAwX1AyX01PRENPRExTVDcgIDB4ZjJiNworI2RlZmluZSBGMDkwMF9QMl9ESVNfOFBfOV8xMCAgMHhmMmI3MDBmMAorI2RlZmluZSBGMDkwMF9QMl9ESVNfOFBfOF85ICAweGYyYjcwMDBmCisKKy8qUDJfTU9EQ09ETFNUOCovCisjZGVmaW5lIFIwOTAwX1AyX01PRENPRExTVDggIDB4ZjJiOAorI2RlZmluZSBGMDkwMF9QMl9ESVNfOFBfNV82ICAweGYyYjgwMGYwCisjZGVmaW5lIEYwOTAwX1AyX0RJU184UF8zXzQgIDB4ZjJiODAwMGYKKworLypQMl9NT0RDT0RMU1Q5Ki8KKyNkZWZpbmUgUjA5MDBfUDJfTU9EQ09ETFNUOSAgMHhmMmI5CisjZGVmaW5lIEYwOTAwX1AyX0RJU184UF8yXzMgIDB4ZjJiOTAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfRElTXzhQXzNfNSAgMHhmMmI5MDAwZgorCisvKlAyX01PRENPRExTVEEqLworI2RlZmluZSBSMDkwMF9QMl9NT0RDT0RMU1RBICAweGYyYmEKKyNkZWZpbmUgRjA5MDBfUDJfRElTX1FQXzlfMTAgIDB4ZjJiYTAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfRElTX1FQXzhfOSAgMHhmMmJhMDAwZgorCisvKlAyX01PRENPRExTVEIqLworI2RlZmluZSBSMDkwMF9QMl9NT0RDT0RMU1RCICAweGYyYmIKKyNkZWZpbmUgRjA5MDBfUDJfRElTX1FQXzVfNiAgMHhmMmJiMDBmMAorI2RlZmluZSBGMDkwMF9QMl9ESVNfUVBfNF81ICAweGYyYmIwMDBmCisKKy8qUDJfTU9EQ09ETFNUQyovCisjZGVmaW5lIFIwOTAwX1AyX01PRENPRExTVEMgIDB4ZjJiYworI2RlZmluZSBGMDkwMF9QMl9ESVNfUVBfM180ICAweGYyYmMwMGYwCisjZGVmaW5lIEYwOTAwX1AyX0RJU19RUF8yXzMgIDB4ZjJiYzAwMGYKKworLypQMl9NT0RDT0RMU1REKi8KKyNkZWZpbmUgUjA5MDBfUDJfTU9EQ09ETFNURCAgMHhmMmJkCisjZGVmaW5lIEYwOTAwX1AyX0RJU19RUF8zXzUgIDB4ZjJiZDAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfRElTX1FQXzFfMiAgMHhmMmJkMDAwZgorCisvKlAyX01PRENPRExTVEUqLworI2RlZmluZSBSMDkwMF9QMl9NT0RDT0RMU1RFICAweGYyYmUKKyNkZWZpbmUgRjA5MDBfUDJfRElTX1FQXzJfNSAgMHhmMmJlMDBmMAorI2RlZmluZSBGMDkwMF9QMl9ESVNfUVBfMV8zICAweGYyYmUwMDBmCisKKy8qUDJfTU9EQ09ETFNURiovCisjZGVmaW5lIFIwOTAwX1AyX01PRENPRExTVEYgIDB4ZjJiZgorI2RlZmluZSBGMDkwMF9QMl9ESVNfUVBfMV80ICAweGYyYmYwMGYwCisjZGVmaW5lIEYwOTAwX1AyX0RERU1PRF9TRVQgIDB4ZjJiZjAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfRERFTU9EX01BU0sgIDB4ZjJiZjAwMDEKKworLypQMl9ETURSRVNDRkcqLworI2RlZmluZSBSMDkwMF9QMl9ETURSRVNDRkcgIDB4ZjJjNgorI2RlZmluZSBGMDkwMF9QMl9ETURSRVNfUkVTRVQgIDB4ZjJjNjAwODAKKyNkZWZpbmUgRjA5MDBfUDJfRE1EUkVTX05PSVNFU1FSICAweGYyYzYwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0RNRFJFU19TVFJBTEwgIDB4ZjJjNjAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfRE1EUkVTX05FV09OTFkgIDB4ZjJjNjAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfRE1EUkVTX05PU1RPUkUgIDB4ZjJjNjAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfRE1EUkVTX0FHQzJNRU0gIDB4ZjJjNjAwMDEKKworLypQMl9ETURSRVNBRFIqLworI2RlZmluZSBSMDkwMF9QMl9ETURSRVNBRFIgIDB4ZjJjNworI2RlZmluZSBGMDkwMF9QMl9TVVNQX1BSRURDQU5BTCAgMHhmMmM3MDA4MAorI2RlZmluZSBGMDkwMF9QMl9ETURSRVNfVkFMSURDRlIgIDB4ZjJjNzAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfRE1EUkVTX01FTUZVTEwgIDB4ZjJjNzAwMzAKKyNkZWZpbmUgRjA5MDBfUDJfRE1EUkVTX1JFU05CUiAgMHhmMmM3MDAwZgorCisvKlAyX0RNRFJFU0RBVEE3Ki8KKyNkZWZpbmUgUjA5MDBfUDJfRE1EUkVTREFUQTcgIDB4ZjJjOAorI2RlZmluZSBGMDkwMF9QMl9ETURSRVNfREFUQTcgIDB4ZjJjODAwZmYKKworLypQMl9ETURSRVNEQVRBNiovCisjZGVmaW5lIFIwOTAwX1AyX0RNRFJFU0RBVEE2ICAweGYyYzkKKyNkZWZpbmUgRjA5MDBfUDJfRE1EUkVTX0RBVEE2ICAweGYyYzkwMGZmCisKKy8qUDJfRE1EUkVTREFUQTUqLworI2RlZmluZSBSMDkwMF9QMl9ETURSRVNEQVRBNSAgMHhmMmNhCisjZGVmaW5lIEYwOTAwX1AyX0RNRFJFU19EQVRBNSAgMHhmMmNhMDBmZgorCisvKlAyX0RNRFJFU0RBVEE0Ki8KKyNkZWZpbmUgUjA5MDBfUDJfRE1EUkVTREFUQTQgIDB4ZjJjYgorI2RlZmluZSBGMDkwMF9QMl9ETURSRVNfREFUQTQgIDB4ZjJjYjAwZmYKKworLypQMl9ETURSRVNEQVRBMyovCisjZGVmaW5lIFIwOTAwX1AyX0RNRFJFU0RBVEEzICAweGYyY2MKKyNkZWZpbmUgRjA5MDBfUDJfRE1EUkVTX0RBVEEzICAweGYyY2MwMGZmCisKKy8qUDJfRE1EUkVTREFUQTIqLworI2RlZmluZSBSMDkwMF9QMl9ETURSRVNEQVRBMiAgMHhmMmNkCisjZGVmaW5lIEYwOTAwX1AyX0RNRFJFU19EQVRBMiAgMHhmMmNkMDBmZgorCisvKlAyX0RNRFJFU0RBVEExKi8KKyNkZWZpbmUgUjA5MDBfUDJfRE1EUkVTREFUQTEgIDB4ZjJjZQorI2RlZmluZSBGMDkwMF9QMl9ETURSRVNfREFUQTEgIDB4ZjJjZTAwZmYKKworLypQMl9ETURSRVNEQVRBMCovCisjZGVmaW5lIFIwOTAwX1AyX0RNRFJFU0RBVEEwICAweGYyY2YKKyNkZWZpbmUgRjA5MDBfUDJfRE1EUkVTX0RBVEEwICAweGYyY2YwMGZmCisKKy8qUDJfRkZFSTEqLworI2RlZmluZSBSMDkwMF9QMl9GRkVJMSAgMHhmMmQwCisjZGVmaW5lIEYwOTAwX1AyX0ZGRV9BQ0NJMSAgMHhmMmQwMDFmZgorCisvKlAyX0ZGRVExKi8KKyNkZWZpbmUgUjA5MDBfUDJfRkZFUTEgIDB4ZjJkMQorI2RlZmluZSBGMDkwMF9QMl9GRkVfQUNDUTEgIDB4ZjJkMTAxZmYKKworLypQMl9GRkVJMiovCisjZGVmaW5lIFIwOTAwX1AyX0ZGRUkyICAweGYyZDIKKyNkZWZpbmUgRjA5MDBfUDJfRkZFX0FDQ0kyICAweGYyZDIwMWZmCisKKy8qUDJfRkZFUTIqLworI2RlZmluZSBSMDkwMF9QMl9GRkVRMiAgMHhmMmQzCisjZGVmaW5lIEYwOTAwX1AyX0ZGRV9BQ0NRMiAgMHhmMmQzMDFmZgorCisvKlAyX0ZGRUkzKi8KKyNkZWZpbmUgUjA5MDBfUDJfRkZFSTMgIDB4ZjJkNAorI2RlZmluZSBGMDkwMF9QMl9GRkVfQUNDSTMgIDB4ZjJkNDAxZmYKKworLypQMl9GRkVRMyovCisjZGVmaW5lIFIwOTAwX1AyX0ZGRVEzICAweGYyZDUKKyNkZWZpbmUgRjA5MDBfUDJfRkZFX0FDQ1EzICAweGYyZDUwMWZmCisKKy8qUDJfRkZFSTQqLworI2RlZmluZSBSMDkwMF9QMl9GRkVJNCAgMHhmMmQ2CisjZGVmaW5lIEYwOTAwX1AyX0ZGRV9BQ0NJNCAgMHhmMmQ2MDFmZgorCisvKlAyX0ZGRVE0Ki8KKyNkZWZpbmUgUjA5MDBfUDJfRkZFUTQgIDB4ZjJkNworI2RlZmluZSBGMDkwMF9QMl9GRkVfQUNDUTQgIDB4ZjJkNzAxZmYKKworLypQMl9GRkVDRkcqLworI2RlZmluZSBSMDkwMF9QMl9GRkVDRkcgIDB4ZjJkOAorI2RlZmluZSBGMDkwMF9QMl9FUVVBTEZGRV9PTiAgMHhmMmQ4MDA0MAorI2RlZmluZSBGMDkwMF9QMl9FUVVBTF9VU0VEU1lNQiAgMHhmMmQ4MDAzMAorI2RlZmluZSBGMDkwMF9QMl9NVV9FUVVBTEZGRSAgMHhmMmQ4MDAwNworCisvKlAyX1ROUkNGRyovCisjZGVmaW5lIFIwOTAwX1AyX1ROUkNGRyAgMHhmMmUwCisjZGVmaW5lIEYwOTAwX1AyX1RVTl9BQ0tGQUlMICAweGYyZTAwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1RVTl9UWVBFICAweGYyZTAwMDcwCisjZGVmaW5lIEYwOTAwX1AyX1RVTl9TRUNTVE9QICAweGYyZTAwMDA4CisjZGVmaW5lIEYwOTAwX1AyX1RVTl9WQ09TUkNIICAweGYyZTAwMDA0CisjZGVmaW5lIEYwOTAwX1AyX1RVTl9NQUREUkVTUyAgMHhmMmUwMDAwMworCisvKlAyX1ROUkNGRzIqLworI2RlZmluZSBSMDkwMF9QMl9UTlJDRkcyICAweGYyZTEKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX0lRU1dBUCAgMHhmMmUxMDA4MAorI2RlZmluZSBGMDkwMF9QMl9TVEI2MTEwX1NURVAyTUhaICAweGYyZTEwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1NUQjYxMjBfREJMSTJDICAweGYyZTEwMDIwCisjZGVmaW5lIEYwOTAwX1AyX0RJU19GQ0NLICAweGYyZTEwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0RJU19MUEVOICAweGYyZTEwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0RJU19CV0NBTEMgIDB4ZjJlMTAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfU0hPUlRfV0FJVFNUQVRFUyAgMHhmMmUxMDAwMgorI2RlZmluZSBGMDkwMF9QMl9ESVNfMkJXQUdDMSAgMHhmMmUxMDAwMQorCisvKlAyX1ROUlhUQUwqLworI2RlZmluZSBSMDkwMF9QMl9UTlJYVEFMICAweGYyZTQKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX01DTEtERUNJTUFMICAweGYyZTQwMGUwCisjZGVmaW5lIEYwOTAwX1AyX1RVTl9YVEFMRlJFUSAgMHhmMmU0MDAxZgorCisvKlAyX1ROUlNURVBTKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE5SU1RFUFMgIDB4ZjJlNworI2RlZmluZSBGMDkwMF9QMl9UVU5FUl9CVzFQNiAgMHhmMmU3MDA4MAorI2RlZmluZSBGMDkwMF9QMl9CV0lOQ19PRkZTRVQgIDB4ZjJlNzAwNzAKKyNkZWZpbmUgRjA5MDBfUDJfU09GVFNURVBfUk5HICAweGYyZTcwMDA4CisjZGVmaW5lIEYwOTAwX1AyX1RVTl9CV09GRlNFVCAgMHhmMmU3MDEwNworCisvKlAyX1ROUkdBSU4qLworI2RlZmluZSBSMDkwMF9QMl9UTlJHQUlOICAweGYyZTgKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX0tESVZFTiAgMHhmMmU4MDBjMAorI2RlZmluZSBGMDkwMF9QMl9TVEI2WDAwX09DSyAgMHhmMmU4MDAzMAorI2RlZmluZSBGMDkwMF9QMl9UVU5fR0FJTiAgMHhmMmU4MDAwZgorCisvKlAyX1ROUlJGMSovCisjZGVmaW5lIFIwOTAwX1AyX1ROUlJGMSAgMHhmMmU5CisjZGVmaW5lIEYwOTAwX1AyX1RVTl9SRkZSRVEyICAweGYyZTkwMGZmCisKKy8qUDJfVE5SUkYwKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE5SUkYwICAweGYyZWEKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX1JGRlJFUTEgIDB4ZjJlYTAwZmYKKworLypQMl9UTlJCVyovCisjZGVmaW5lIFIwOTAwX1AyX1ROUkJXICAweGYyZWIKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX1JGRlJFUTAgIDB4ZjJlYjAwYzAKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX0JXICAweGYyZWIwMDNmCisKKy8qUDJfVE5SQURKKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE5SQURKICAweGYyZWMKKyNkZWZpbmUgRjA5MDBfUDJfU1RCNjFYMF9SQ0xLICAweGYyZWMwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1NUQjYxWDBfQ0FMVElNRSAgMHhmMmVjMDA0MAorI2RlZmluZSBGMDkwMF9QMl9TVEI2WDAwX0RMQiAgMHhmMmVjMDAzOAorI2RlZmluZSBGMDkwMF9QMl9TVEI2MDAwX0ZDTCAgMHhmMmVjMDAwNworCisvKlAyX1ROUkNUTDIqLworI2RlZmluZSBSMDkwMF9QMl9UTlJDVEwyICAweGYyZWQKKyNkZWZpbmUgRjA5MDBfUDJfU1RCNjFYMF9MQ1AxX1JDQ0tPRkYgIDB4ZjJlZDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfU1RCNjFYMF9MQ1AwICAweGYyZWQwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1NUQjYxWDBfWFRPVVRfUkZPVVRTICAweGYyZWQwMDIwCisjZGVmaW5lIEYwOTAwX1AyX1NUQjYxWDBfWFRPTl9NQ0tEViAgMHhmMmVkMDAxMAorI2RlZmluZSBGMDkwMF9QMl9TVEI2MVgwX0NBTE9GRl9EQ09GRiAgMHhmMmVkMDAwOAorI2RlZmluZSBGMDkwMF9QMl9TVEI2MTEwX0xQVCAgMHhmMmVkMDAwNAorI2RlZmluZSBGMDkwMF9QMl9TVEI2MTEwX1JYICAweGYyZWQwMDAyCisjZGVmaW5lIEYwOTAwX1AyX1NUQjYxMTBfU1lOICAweGYyZWQwMDAxCisKKy8qUDJfVE5SQ0ZHMyovCisjZGVmaW5lIFIwOTAwX1AyX1ROUkNGRzMgIDB4ZjJlZQorI2RlZmluZSBGMDkwMF9QMl9TVEI2MTIwX0RJU0NUUkwxICAweGYyZWUwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1NUQjYxMjBfSU5WT1JERVIgIDB4ZjJlZTAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfU1RCNjEyMF9FTkNUUkw2ICAweGYyZWUwMDIwCisjZGVmaW5lIEYwOTAwX1AyX1RVTl9QTExGUkVRICAweGYyZWUwMDFjCisjZGVmaW5lIEYwOTAwX1AyX1RVTl9JMkNGUkVRX01PREUgIDB4ZjJlZTAwMDMKKworLypQMl9UTlJMQVVOQ0gqLworI2RlZmluZSBSMDkwMF9QMl9UTlJMQVVOQ0ggIDB4ZjJmMAorCisvKlAyX1ROUkxEKi8KKyNkZWZpbmUgUjA5MDBfUDJfVE5STEQgIDB4ZjJmMAorI2RlZmluZSBGMDkwMF9QMl9UVU5MRF9WQ09JTkcgIDB4ZjJmMDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX1JFRzFGQUlMICAweGYyZjAwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1RVTl9SRUcyRkFJTCAgMHhmMmYwMDAyMAorI2RlZmluZSBGMDkwMF9QMl9UVU5fUkVHM0ZBSUwgIDB4ZjJmMDAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX1JFRzRGQUlMICAweGYyZjAwMDA4CisjZGVmaW5lIEYwOTAwX1AyX1RVTl9SRUc1RkFJTCAgMHhmMmYwMDAwNAorI2RlZmluZSBGMDkwMF9QMl9UVU5fQldJTkcgIDB4ZjJmMDAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX0xPQ0tFRCAgMHhmMmYwMDAwMQorCisvKlAyX1ROUk9CU0wqLworI2RlZmluZSBSMDkwMF9QMl9UTlJPQlNMICAweGYyZjYKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX0kyQ0FCT1JURUQgIDB4ZjJmNjAwODAKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX0xQRU4gIDB4ZjJmNjAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX0ZDQ0sgIDB4ZjJmNjAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX0kyQ0xPQ0tFRCAgMHhmMmY2MDAxMAorI2RlZmluZSBGMDkwMF9QMl9UVU5fUFJPR0RPTkUgIDB4ZjJmNjAwMGMKKyNkZWZpbmUgRjA5MDBfUDJfVFVOX1JGUkVTVEUxICAweGYyZjYwMDAzCisKKy8qUDJfVE5SUkVTVEUqLworI2RlZmluZSBSMDkwMF9QMl9UTlJSRVNURSAgMHhmMmY3CisjZGVmaW5lIEYwOTAwX1AyX1RVTl9SRlJFU1RFMCAgMHhmMmY3MDBmZgorCisvKlAyX1NNQVBDT0VGNyovCisjZGVmaW5lIFIwOTAwX1AyX1NNQVBDT0VGNyAgMHhmMzAwCisjZGVmaW5lIEYwOTAwX1AyX0RJU19RU0NBTEUgIDB4ZjMwMDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfU01BUENPRUZfUV9MTFIxMiAgMHhmMzAwMDE3ZgorCisvKlAyX1NNQVBDT0VGNiovCisjZGVmaW5lIFIwOTAwX1AyX1NNQVBDT0VGNiAgMHhmMzAxCisjZGVmaW5lIEYwOTAwX1AyX0RJU19ORVdTQ0FMRSAgMHhmMzAxMDAwOAorI2RlZmluZSBGMDkwMF9QMl9BREpfOFBTS0xMUjEgIDB4ZjMwMTAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfT0xEXzhQU0tMTFIxICAweGYzMDEwMDAyCisjZGVmaW5lIEYwOTAwX1AyX0RJU19BQjhQU0sgIDB4ZjMwMTAwMDEKKworLypQMl9TTUFQQ09FRjUqLworI2RlZmluZSBSMDkwMF9QMl9TTUFQQ09FRjUgIDB4ZjMwMgorI2RlZmluZSBGMDkwMF9QMl9ESVNfOFNDQUxFICAweGYzMDIwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1NNQVBDT0VGXzhQX0xMUjIzICAweGYzMDIwMTdmCisKKy8qUDJfRE1EUExIU1RBVCovCisjZGVmaW5lIFIwOTAwX1AyX0RNRFBMSFNUQVQgIDB4ZjMyMAorI2RlZmluZSBGMDkwMF9QMl9QTEhfU1RBVElTVElDICAweGYzMjAwMGZmCisKKy8qUDJfTE9DS1RJTUUzKi8KKyNkZWZpbmUgUjA5MDBfUDJfTE9DS1RJTUUzICAweGYzMjIKKyNkZWZpbmUgRjA5MDBfUDJfREVNT0RfTE9DS1RJTUUzICAweGYzMjIwMGZmCisKKy8qUDJfTE9DS1RJTUUyKi8KKyNkZWZpbmUgUjA5MDBfUDJfTE9DS1RJTUUyICAweGYzMjMKKyNkZWZpbmUgRjA5MDBfUDJfREVNT0RfTE9DS1RJTUUyICAweGYzMjMwMGZmCisKKy8qUDJfTE9DS1RJTUUxKi8KKyNkZWZpbmUgUjA5MDBfUDJfTE9DS1RJTUUxICAweGYzMjQKKyNkZWZpbmUgRjA5MDBfUDJfREVNT0RfTE9DS1RJTUUxICAweGYzMjQwMGZmCisKKy8qUDJfTE9DS1RJTUUwKi8KKyNkZWZpbmUgUjA5MDBfUDJfTE9DS1RJTUUwICAweGYzMjUKKyNkZWZpbmUgRjA5MDBfUDJfREVNT0RfTE9DS1RJTUUwICAweGYzMjUwMGZmCisKKy8qUDJfVklUU0NBTEUqLworI2RlZmluZSBSMDkwMF9QMl9WSVRTQ0FMRSAgMHhmMzMyCisjZGVmaW5lIEYwOTAwX1AyX05WVEhfTk9TUkFOR0UgIDB4ZjMzMjAwODAKKyNkZWZpbmUgRjA5MDBfUDJfVkVSUk9SX01BWE1PREUgIDB4ZjMzMjAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfS0RJVl9NT0RFICAweGYzMzIwMDMwCisjZGVmaW5lIEYwOTAwX1AyX05TTE9XU05fTE9DS0VEICAweGYzMzIwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0RFTE9DS19QUkZMT1NTICAweGYzMzIwMDA0CisjZGVmaW5lIEYwOTAwX1AyX0RJU19SU0ZMT0NLICAweGYzMzIwMDAyCisKKy8qUDJfRkVDTSovCisjZGVmaW5lIFIwOTAwX1AyX0ZFQ00gIDB4ZjMzMworI2RlZmluZSBGMDkwMF9QMl9EU1NfRFZCICAweGYzMzMwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0RFTU9EX0JZUEFTUyAgMHhmMzMzMDA0MAorI2RlZmluZSBGMDkwMF9QMl9DTVBfU0xPV01PREUgIDB4ZjMzMzAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfRFNTX1NSQ0ggIDB4ZjMzMzAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfRElGRl9NT0RFVklUICAweGYzMzMwMDA0CisjZGVmaW5lIEYwOTAwX1AyX1NZTkNWSVQgIDB4ZjMzMzAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfSVFJTlYgIDB4ZjMzMzAwMDEKKworLypQMl9WVEgxMiovCisjZGVmaW5lIFIwOTAwX1AyX1ZUSDEyICAweGYzMzQKKyNkZWZpbmUgRjA5MDBfUDJfVlRIMTIgIDB4ZjMzNDAwZmYKKworLypQMl9WVEgyMyovCisjZGVmaW5lIFIwOTAwX1AyX1ZUSDIzICAweGYzMzUKKyNkZWZpbmUgRjA5MDBfUDJfVlRIMjMgIDB4ZjMzNTAwZmYKKworLypQMl9WVEgzNCovCisjZGVmaW5lIFIwOTAwX1AyX1ZUSDM0ICAweGYzMzYKKyNkZWZpbmUgRjA5MDBfUDJfVlRIMzQgIDB4ZjMzNjAwZmYKKworLypQMl9WVEg1NiovCisjZGVmaW5lIFIwOTAwX1AyX1ZUSDU2ICAweGYzMzcKKyNkZWZpbmUgRjA5MDBfUDJfVlRINTYgIDB4ZjMzNzAwZmYKKworLypQMl9WVEg2NyovCisjZGVmaW5lIFIwOTAwX1AyX1ZUSDY3ICAweGYzMzgKKyNkZWZpbmUgRjA5MDBfUDJfVlRINjcgIDB4ZjMzODAwZmYKKworLypQMl9WVEg3OCovCisjZGVmaW5lIFIwOTAwX1AyX1ZUSDc4ICAweGYzMzkKKyNkZWZpbmUgRjA5MDBfUDJfVlRINzggIDB4ZjMzOTAwZmYKKworLypQMl9WSVRDVVJQVU4qLworI2RlZmluZSBSMDkwMF9QMl9WSVRDVVJQVU4gIDB4ZjMzYQorI2RlZmluZSBGMDkwMF9QMl9WSVRfTUFQUElORyAgMHhmMzNhMDBlMAorI2RlZmluZSBGMDkwMF9QMl9WSVRfQ1VSUFVOICAweGYzM2EwMDFmCisKKy8qUDJfVkVSUk9SKi8KKyNkZWZpbmUgUjA5MDBfUDJfVkVSUk9SICAweGYzM2IKKyNkZWZpbmUgRjA5MDBfUDJfUkVHRVJSX1ZJVCAgMHhmMzNiMDBmZgorCisvKlAyX1BSVklUKi8KKyNkZWZpbmUgUjA5MDBfUDJfUFJWSVQgIDB4ZjMzYworI2RlZmluZSBGMDkwMF9QMl9ESVNfVlRITE9DSyAgMHhmMzNjMDA0MAorI2RlZmluZSBGMDkwMF9QMl9FN184VklUICAweGYzM2MwMDIwCisjZGVmaW5lIEYwOTAwX1AyX0U2XzdWSVQgIDB4ZjMzYzAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfRTVfNlZJVCAgMHhmMzNjMDAwOAorI2RlZmluZSBGMDkwMF9QMl9FM180VklUICAweGYzM2MwMDA0CisjZGVmaW5lIEYwOTAwX1AyX0UyXzNWSVQgIDB4ZjMzYzAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfRTFfMlZJVCAgMHhmMzNjMDAwMQorCisvKlAyX1ZBVlNSVklUKi8KKyNkZWZpbmUgUjA5MDBfUDJfVkFWU1JWSVQgIDB4ZjMzZAorI2RlZmluZSBGMDkwMF9QMl9BTVZJVCAgMHhmMzNkMDA4MAorI2RlZmluZSBGMDkwMF9QMl9GUk9aRU5WSVQgIDB4ZjMzZDAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfU05WSVQgIDB4ZjMzZDAwMzAKKyNkZWZpbmUgRjA5MDBfUDJfVE9WVklUICAweGYzM2QwMDBjCisjZGVmaW5lIEYwOTAwX1AyX0hZUFZJVCAgMHhmMzNkMDAwMworCisvKlAyX1ZTVEFUVVNWSVQqLworI2RlZmluZSBSMDkwMF9QMl9WU1RBVFVTVklUICAweGYzM2UKKyNkZWZpbmUgRjA5MDBfUDJfVklURVJCSV9PTiAgMHhmMzNlMDA4MAorI2RlZmluZSBGMDkwMF9QMl9FTkRfTE9PUFZJVCAgMHhmMzNlMDA0MAorI2RlZmluZSBGMDkwMF9QMl9WSVRFUkJJX0RFUFJGICAweGYzM2UwMDIwCisjZGVmaW5lIEYwOTAwX1AyX1BSRlZJVCAgMHhmMzNlMDAxMAorI2RlZmluZSBGMDkwMF9QMl9MT0NLRURWSVQgIDB4ZjMzZTAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfVklURVJCSV9ERUxPQ0sgIDB4ZjMzZTAwMDQKKyNkZWZpbmUgRjA5MDBfUDJfVklUX0RFTU9EU0VMICAweGYzM2UwMDAyCisjZGVmaW5lIEYwOTAwX1AyX1ZJVEVSQklfQ09NUE9VVCAgMHhmMzNlMDAwMQorCisvKlAyX1ZUSElOVVNFKi8KKyNkZWZpbmUgUjA5MDBfUDJfVlRISU5VU0UgIDB4ZjMzZgorI2RlZmluZSBGMDkwMF9QMl9WSVRfSU5VU0UgIDB4ZjMzZjAwZmYKKworLypQMl9LRElWMTIqLworI2RlZmluZSBSMDkwMF9QMl9LRElWMTIgIDB4ZjM0MAorI2RlZmluZSBGMDkwMF9QMl9LRElWMTJfTUFOVUFMICAweGYzNDAwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0tfRElWSURFUl8xMiAgMHhmMzQwMDA3ZgorCisvKlAyX0tESVYyMyovCisjZGVmaW5lIFIwOTAwX1AyX0tESVYyMyAgMHhmMzQxCisjZGVmaW5lIEYwOTAwX1AyX0tESVYyM19NQU5VQUwgIDB4ZjM0MTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfS19ESVZJREVSXzIzICAweGYzNDEwMDdmCisKKy8qUDJfS0RJVjM0Ki8KKyNkZWZpbmUgUjA5MDBfUDJfS0RJVjM0ICAweGYzNDIKKyNkZWZpbmUgRjA5MDBfUDJfS0RJVjM0X01BTlVBTCAgMHhmMzQyMDA4MAorI2RlZmluZSBGMDkwMF9QMl9LX0RJVklERVJfMzQgIDB4ZjM0MjAwN2YKKworLypQMl9LRElWNTYqLworI2RlZmluZSBSMDkwMF9QMl9LRElWNTYgIDB4ZjM0MworI2RlZmluZSBGMDkwMF9QMl9LRElWNTZfTUFOVUFMICAweGYzNDMwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0tfRElWSURFUl81NiAgMHhmMzQzMDA3ZgorCisvKlAyX0tESVY2NyovCisjZGVmaW5lIFIwOTAwX1AyX0tESVY2NyAgMHhmMzQ0CisjZGVmaW5lIEYwOTAwX1AyX0tESVY2N19NQU5VQUwgIDB4ZjM0NDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfS19ESVZJREVSXzY3ICAweGYzNDQwMDdmCisKKy8qUDJfS0RJVjc4Ki8KKyNkZWZpbmUgUjA5MDBfUDJfS0RJVjc4ICAweGYzNDUKKyNkZWZpbmUgRjA5MDBfUDJfS0RJVjc4X01BTlVBTCAgMHhmMzQ1MDA4MAorI2RlZmluZSBGMDkwMF9QMl9LX0RJVklERVJfNzggIDB4ZjM0NTAwN2YKKworLypQMl9QREVMQ1RSTDEqLworI2RlZmluZSBSMDkwMF9QMl9QREVMQ1RSTDEgIDB4ZjM1MAorI2RlZmluZSBGMDkwMF9QMl9JTlZfTUlTTUFTSyAgMHhmMzUwMDA4MAorI2RlZmluZSBGMDkwMF9QMl9GT1JDRV9BQ0NFUFRFRCAgMHhmMzUwMDA0MAorI2RlZmluZSBGMDkwMF9QMl9GSUxURVJfRU4gIDB4ZjM1MDAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfRk9SQ0VfUEtUREVMSU5VU0UgIDB4ZjM1MDAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfSFlTVEVOICAweGYzNTAwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0hZU1RTV1JTVCAgMHhmMzUwMDAwNAorI2RlZmluZSBGMDkwMF9QMl9FTl9NSVMwMCAgMHhmMzUwMDAwMgorI2RlZmluZSBGMDkwMF9QMl9BTEdPU1dSU1QgIDB4ZjM1MDAwMDEKKworLypQMl9QREVMQ1RSTDIqLworI2RlZmluZSBSMDkwMF9QMl9QREVMQ1RSTDIgIDB4ZjM1MQorI2RlZmluZSBGMDkwMF9QMl9GT1JDRV9DT05USU5VT1VTICAweGYzNTEwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1JFU0VUX1VQS09fQ09VTlQgIDB4ZjM1MTAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfVVNFUl9QS1RERUxJTl9OQiAgMHhmMzUxMDAyMAorI2RlZmluZSBGMDkwMF9QMl9GT1JDRV9MT0NLRUQgIDB4ZjM1MTAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfREFUQV9VTkJCU0NSQU0gIDB4ZjM1MTAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfRk9SQ0VfTE9OR1BLVCAgMHhmMzUxMDAwNAorI2RlZmluZSBGMDkwMF9QMl9GUkFNRV9NT0RFICAweGYzNTEwMDAyCisKKy8qUDJfSFlTVFRIUkVTSCovCisjZGVmaW5lIFIwOTAwX1AyX0hZU1RUSFJFU0ggIDB4ZjM1NAorI2RlZmluZSBGMDkwMF9QMl9VTkxDS19USFJFU0ggIDB4ZjM1NDAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfREVMSU5fTENLX1RIUkVTSCAgMHhmMzU0MDAwZgorCisvKlAyX0lTSUVOVFJZKi8KKyNkZWZpbmUgUjA5MDBfUDJfSVNJRU5UUlkgIDB4ZjM1ZQorI2RlZmluZSBGMDkwMF9QMl9JU0lfRU5UUlkgIDB4ZjM1ZTAwZmYKKworLypQMl9JU0lCSVRFTkEqLworI2RlZmluZSBSMDkwMF9QMl9JU0lCSVRFTkEgIDB4ZjM1ZgorI2RlZmluZSBGMDkwMF9QMl9JU0lfQklUX0VOICAweGYzNWYwMGZmCisKKy8qUDJfTUFUU1RSMSovCisjZGVmaW5lIFIwOTAwX1AyX01BVFNUUjEgIDB4ZjM2MAorI2RlZmluZSBGMDkwMF9QMl9NQVRZUEVfQ1VSUkVOVDEgIDB4ZjM2MDAwZmYKKworLypQMl9NQVRTVFIwKi8KKyNkZWZpbmUgUjA5MDBfUDJfTUFUU1RSMCAgMHhmMzYxCisjZGVmaW5lIEYwOTAwX1AyX01BVFlQRV9DVVJSRU5UMCAgMHhmMzYxMDBmZgorCisvKlAyX1VQTFNUUjEqLworI2RlZmluZSBSMDkwMF9QMl9VUExTVFIxICAweGYzNjIKKyNkZWZpbmUgRjA5MDBfUDJfVVBMX0NVUlJFTlQxICAweGYzNjIwMGZmCisKKy8qUDJfVVBMU1RSMCovCisjZGVmaW5lIFIwOTAwX1AyX1VQTFNUUjAgIDB4ZjM2MworI2RlZmluZSBGMDkwMF9QMl9VUExfQ1VSUkVOVDAgIDB4ZjM2MzAwZmYKKworLypQMl9ERkxTVFIxKi8KKyNkZWZpbmUgUjA5MDBfUDJfREZMU1RSMSAgMHhmMzY0CisjZGVmaW5lIEYwOTAwX1AyX0RGTF9DVVJSRU5UMSAgMHhmMzY0MDBmZgorCisvKlAyX0RGTFNUUjAqLworI2RlZmluZSBSMDkwMF9QMl9ERkxTVFIwICAweGYzNjUKKyNkZWZpbmUgRjA5MDBfUDJfREZMX0NVUlJFTlQwICAweGYzNjUwMGZmCisKKy8qUDJfU1lOQ1NUUiovCisjZGVmaW5lIFIwOTAwX1AyX1NZTkNTVFIgIDB4ZjM2NgorI2RlZmluZSBGMDkwMF9QMl9TWU5DX0NVUlJFTlQgIDB4ZjM2NjAwZmYKKworLypQMl9TWU5DRFNUUjEqLworI2RlZmluZSBSMDkwMF9QMl9TWU5DRFNUUjEgIDB4ZjM2NworI2RlZmluZSBGMDkwMF9QMl9TWU5DRF9DVVJSRU5UMSAgMHhmMzY3MDBmZgorCisvKlAyX1NZTkNEU1RSMCovCisjZGVmaW5lIFIwOTAwX1AyX1NZTkNEU1RSMCAgMHhmMzY4CisjZGVmaW5lIEYwOTAwX1AyX1NZTkNEX0NVUlJFTlQwICAweGYzNjgwMGZmCisKKy8qUDJfUERFTFNUQVRVUzEqLworI2RlZmluZSBSMDkwMF9QMl9QREVMU1RBVFVTMSAgMHhmMzY5CisjZGVmaW5lIEYwOTAwX1AyX1BLVERFTElOX0RFTE9DSyAgMHhmMzY5MDA4MAorI2RlZmluZSBGMDkwMF9QMl9TWU5DRFVQREZMX0JBRERGTCAgMHhmMzY5MDA0MAorI2RlZmluZSBGMDkwMF9QMl9DT05USU5VT1VTX1NUUkVBTSAgMHhmMzY5MDAyMAorI2RlZmluZSBGMDkwMF9QMl9VTkFDQ0VQVEVEX1NUUkVBTSAgMHhmMzY5MDAxMAorI2RlZmluZSBGMDkwMF9QMl9CQ0hfRVJST1JfRkxBRyAgMHhmMzY5MDAwOAorI2RlZmluZSBGMDkwMF9QMl9CQkhDUkNLTyAgMHhmMzY5MDAwNAorI2RlZmluZSBGMDkwMF9QMl9QS1RERUxJTl9MT0NLICAweGYzNjkwMDAyCisjZGVmaW5lIEYwOTAwX1AyX0ZJUlNUX0xPQ0sgIDB4ZjM2OTAwMDEKKworLypQMl9QREVMU1RBVFVTMiovCisjZGVmaW5lIFIwOTAwX1AyX1BERUxTVEFUVVMyICAweGYzNmEKKyNkZWZpbmUgRjA5MDBfUDJfUEtUREVMX0RFTU9EU0VMICAweGYzNmEwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0ZSQU1FX01PRENPRCAgMHhmMzZhMDA3YworI2RlZmluZSBGMDkwMF9QMl9GUkFNRV9UWVBFICAweGYzNmEwMDAzCisKKy8qUDJfQkJGQ1JDS08xKi8KKyNkZWZpbmUgUjA5MDBfUDJfQkJGQ1JDS08xICAweGYzNmIKKyNkZWZpbmUgRjA5MDBfUDJfQkJIQ1JDX0tPQ05UMSAgMHhmMzZiMDBmZgorCisvKlAyX0JCRkNSQ0tPMCovCisjZGVmaW5lIFIwOTAwX1AyX0JCRkNSQ0tPMCAgMHhmMzZjCisjZGVmaW5lIEYwOTAwX1AyX0JCSENSQ19LT0NOVDAgIDB4ZjM2YzAwZmYKKworLypQMl9VUENSQ0tPMSovCisjZGVmaW5lIFIwOTAwX1AyX1VQQ1JDS08xICAweGYzNmQKKyNkZWZpbmUgRjA5MDBfUDJfUEtUQ1JDX0tPQ05UMSAgMHhmMzZkMDBmZgorCisvKlAyX1VQQ1JDS08wKi8KKyNkZWZpbmUgUjA5MDBfUDJfVVBDUkNLTzAgIDB4ZjM2ZQorI2RlZmluZSBGMDkwMF9QMl9QS1RDUkNfS09DTlQwICAweGYzNmUwMGZmCisKKy8qUDJfVFNTVEFURU0qLworI2RlZmluZSBSMDkwMF9QMl9UU1NUQVRFTSAgMHhmMzcwCisjZGVmaW5lIEYwOTAwX1AyX1RTRElMX09OICAweGYzNzAwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1RTU0tJUFJTX09OICAweGYzNzAwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1RTUlNfT04gIDB4ZjM3MDAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfVFNERVNDUkFNQl9PTiAgMHhmMzcwMDAxMAorI2RlZmluZSBGMDkwMF9QMl9UU0ZSQU1FX01PREUgIDB4ZjM3MDAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfVFNfRElTQUJMRSAgMHhmMzcwMDAwNAorI2RlZmluZSBGMDkwMF9QMl9UU0FDTV9NT0RFICAweGYzNzAwMDAyCisjZGVmaW5lIEYwOTAwX1AyX1RTT1VUX05PU1lOQyAgMHhmMzcwMDAwMQorCisvKlAyX1RTQ0ZHSCovCisjZGVmaW5lIFIwOTAwX1AyX1RTQ0ZHSCAgMHhmMzcyCisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19EVkJDSSAgMHhmMzcyMDA4MAorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fU0VSSUFMICAweGYzNzIwMDQwCisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19URUlVUERBVEUgIDB4ZjM3MjAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX0RVVFk1MCAgMHhmMzcyMDAxMAorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fSFNHTkxPVVQgIDB4ZjM3MjAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX0VSUk1PREUgIDB4ZjM3MjAwMDYKKyNkZWZpbmUgRjA5MDBfUDJfUlNUX0hXQVJFICAweGYzNzIwMDAxCisKKy8qUDJfVFNDRkdNKi8KKyNkZWZpbmUgUjA5MDBfUDJfVFNDRkdNICAweGYzNzMKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX01BTlNQRUVEICAweGYzNzMwMGMwCisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19QRVJNREFUQSAgMHhmMzczMDAyMAorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fTk9ORVdTR05MICAweGYzNzMwMDEwCisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19CSVRTUEVFRCAgMHhmMzczMDAwOAorI2RlZmluZSBGMDkwMF9QMl9OUERfU1BFQ0RWQlMyICAweGYzNzMwMDA0CisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19TVE9QQ0tESVMgIDB4ZjM3MzAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX0lOVkRBVEEgIDB4ZjM3MzAwMDEKKworLypQMl9UU0NGR0wqLworI2RlZmluZSBSMDkwMF9QMl9UU0NGR0wgIDB4ZjM3NAorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fQkNMS0RFTDFDSyAgMHhmMzc0MDBjMAorI2RlZmluZSBGMDkwMF9QMl9CQ0hFUlJPUl9NT0RFICAweGYzNzQwMDMwCisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19OU0dOTDJEQVRBICAweGYzNzQwMDA4CisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19FTUJJTkRWQiAgMHhmMzc0MDAwNAorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fRFBVTkFDVCAgMHhmMzc0MDAwMgorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fTlBET0ZGICAweGYzNzQwMDAxCisKKy8qUDJfVFNJTlNERUxIKi8KKyNkZWZpbmUgUjA5MDBfUDJfVFNJTlNERUxIICAweGYzNzYKKyNkZWZpbmUgRjA5MDBfUDJfVFNERUxfU1lOQ0JZVEUgIDB4ZjM3NjAwODAKKyNkZWZpbmUgRjA5MDBfUDJfVFNERUxfWFhIRUFERVIgIDB4ZjM3NjAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfVFNERUxfQkJIRUFERVIgIDB4ZjM3NjAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfVFNERUxfREFUQUZJRUxEICAweGYzNzYwMDEwCisjZGVmaW5lIEYwOTAwX1AyX1RTSU5TREVMX0lTQ1IgIDB4ZjM3NjAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfVFNJTlNERUxfTlBEICAweGYzNzYwMDA0CisjZGVmaW5lIEYwOTAwX1AyX1RTSU5TREVMX1JTUEFSSVRZICAweGYzNzYwMDAyCisjZGVmaW5lIEYwOTAwX1AyX1RTSU5TREVMX0NSQzggIDB4ZjM3NjAwMDEKKworLypQMl9UU1NQRUVEKi8KKyNkZWZpbmUgUjA5MDBfUDJfVFNTUEVFRCAgMHhmMzgwCisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19PVVRTUEVFRCAgMHhmMzgwMDBmZgorCisvKlAyX1RTU1RBVFVTKi8KKyNkZWZpbmUgUjA5MDBfUDJfVFNTVEFUVVMgIDB4ZjM4MQorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fTElORU9LICAweGYzODEwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19FUlJPUiAgMHhmMzgxMDA0MAorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fREFUQTcgIDB4ZjM4MTAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX05PU1lOQyAgMHhmMzgxMDAxMAorI2RlZmluZSBGMDkwMF9QMl9JU0NSX0lOSVRJQUxJWkVEICAweGYzODEwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0lTQ1JfVVBEQVRFRCAgMHhmMzgxMDAwNAorI2RlZmluZSBGMDkwMF9QMl9TT0ZGSUZPX1VOUkVHVUwgIDB4ZjM4MTAwMDIKKyNkZWZpbmUgRjA5MDBfUDJfRElMX1JFQURZICAweGYzODEwMDAxCisKKy8qUDJfVFNTVEFUVVMyKi8KKyNkZWZpbmUgUjA5MDBfUDJfVFNTVEFUVVMyICAweGYzODIKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX0RFTU9EU0VMICAweGYzODIwMDgwCisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT1NQRUVEX1NUT1JFICAweGYzODIwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0RJTFhYX1JFU0VUICAweGYzODIwMDIwCisjZGVmaW5lIEYwOTAwX1AyX1RTU0VSSUFMX0lNUE9TICAweGYzODIwMDEwCisjZGVmaW5lIEYwOTAwX1AyX1RTRklGT19MSU5FTk9LICAweGYzODIwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0JJVFNQRUVEX0VWRU5UICAweGYzODIwMDA0CisjZGVmaW5lIEYwOTAwX1AyX1NDUkFNQkRFVEVDVCAgMHhmMzgyMDAwMgorI2RlZmluZSBGMDkwMF9QMl9VTERUVjY3X0ZBTFNFTE9DSyAgMHhmMzgyMDAwMQorCisvKlAyX1RTQklUUkFURTEqLworI2RlZmluZSBSMDkwMF9QMl9UU0JJVFJBVEUxICAweGYzODMKKyNkZWZpbmUgRjA5MDBfUDJfVFNGSUZPX0JJVFJBVEUxICAweGYzODMwMGZmCisKKy8qUDJfVFNCSVRSQVRFMCovCisjZGVmaW5lIFIwOTAwX1AyX1RTQklUUkFURTAgIDB4ZjM4NAorI2RlZmluZSBGMDkwMF9QMl9UU0ZJRk9fQklUUkFURTAgIDB4ZjM4NDAwZmYKKworLypQMl9FUlJDVFJMMSovCisjZGVmaW5lIFIwOTAwX1AyX0VSUkNUUkwxICAweGYzOTgKKyNkZWZpbmUgRjA5MDBfUDJfRVJSX1NPVVJDRTEgIDB4ZjM5ODAwZjAKKyNkZWZpbmUgRjA5MDBfUDJfTlVNX0VWRU5UMSAgMHhmMzk4MDAwNworCisvKlAyX0VSUkNOVDEyKi8KKyNkZWZpbmUgUjA5MDBfUDJfRVJSQ05UMTIgIDB4ZjM5OQorI2RlZmluZSBGMDkwMF9QMl9FUlJDTlQxX09MRFZBTFVFICAweGYzOTkwMDgwCisjZGVmaW5lIEYwOTAwX1AyX0VSUl9DTlQxMiAgMHhmMzk5MDA3ZgorCisvKlAyX0VSUkNOVDExKi8KKyNkZWZpbmUgUjA5MDBfUDJfRVJSQ05UMTEgIDB4ZjM5YQorI2RlZmluZSBGMDkwMF9QMl9FUlJfQ05UMTEgIDB4ZjM5YTAwZmYKKworLypQMl9FUlJDTlQxMCovCisjZGVmaW5lIFIwOTAwX1AyX0VSUkNOVDEwICAweGYzOWIKKyNkZWZpbmUgRjA5MDBfUDJfRVJSX0NOVDEwICAweGYzOWIwMGZmCisKKy8qUDJfRVJSQ1RSTDIqLworI2RlZmluZSBSMDkwMF9QMl9FUlJDVFJMMiAgMHhmMzljCisjZGVmaW5lIEYwOTAwX1AyX0VSUl9TT1VSQ0UyICAweGYzOWMwMGYwCisjZGVmaW5lIEYwOTAwX1AyX05VTV9FVkVOVDIgIDB4ZjM5YzAwMDcKKworLypQMl9FUlJDTlQyMiovCisjZGVmaW5lIFIwOTAwX1AyX0VSUkNOVDIyICAweGYzOWQKKyNkZWZpbmUgRjA5MDBfUDJfRVJSQ05UMl9PTERWQUxVRSAgMHhmMzlkMDA4MAorI2RlZmluZSBGMDkwMF9QMl9FUlJfQ05UMjIgIDB4ZjM5ZDAwN2YKKworLypQMl9FUlJDTlQyMSovCisjZGVmaW5lIFIwOTAwX1AyX0VSUkNOVDIxICAweGYzOWUKKyNkZWZpbmUgRjA5MDBfUDJfRVJSX0NOVDIxICAweGYzOWUwMGZmCisKKy8qUDJfRVJSQ05UMjAqLworI2RlZmluZSBSMDkwMF9QMl9FUlJDTlQyMCAgMHhmMzlmCisjZGVmaW5lIEYwOTAwX1AyX0VSUl9DTlQyMCAgMHhmMzlmMDBmZgorCisvKlAyX0ZFQ1NQWSovCisjZGVmaW5lIFIwOTAwX1AyX0ZFQ1NQWSAgMHhmM2EwCisjZGVmaW5lIEYwOTAwX1AyX1NQWV9FTkFCTEUgIDB4ZjNhMDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfTk9fU1lOQ0JZVEUgIDB4ZjNhMDAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfU0VSSUFMX01PREUgIDB4ZjNhMDAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfVU5VU1VBTF9QQUNLRVQgIDB4ZjNhMDAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfQkVSX1BBQ0tNT0RFICAweGYzYTAwMDA4CisjZGVmaW5lIEYwOTAwX1AyX0JFUk1FVEVSX0xNT0RFICAweGYzYTAwMDAyCisjZGVmaW5lIEYwOTAwX1AyX0JFUk1FVEVSX1JFU0VUICAweGYzYTAwMDAxCisKKy8qUDJfRlNQWUNGRyovCisjZGVmaW5lIFIwOTAwX1AyX0ZTUFlDRkcgIDB4ZjNhMQorI2RlZmluZSBGMDkwMF9QMl9GRUNTUFlfSU5QVVQgIDB4ZjNhMTAwYzAKKyNkZWZpbmUgRjA5MDBfUDJfUlNUX09OX0VSUk9SICAweGYzYTEwMDIwCisjZGVmaW5lIEYwOTAwX1AyX09ORV9TSE9UICAweGYzYTEwMDEwCisjZGVmaW5lIEYwOTAwX1AyX0kyQ19NT0RFICAweGYzYTEwMDBjCisjZGVmaW5lIEYwOTAwX1AyX1NQWV9IWVNURVJFU0lTICAweGYzYTEwMDAzCisKKy8qUDJfRlNQWURBVEEqLworI2RlZmluZSBSMDkwMF9QMl9GU1BZREFUQSAgMHhmM2EyCisjZGVmaW5lIEYwOTAwX1AyX1NQWV9TVFVGRklORyAgMHhmM2EyMDA4MAorI2RlZmluZSBGMDkwMF9QMl9OT0VSUk9SX1BLVEpJVFRFUiAgMHhmM2EyMDA0MAorI2RlZmluZSBGMDkwMF9QMl9TUFlfQ05VTExQS1QgIDB4ZjNhMjAwMjAKKyNkZWZpbmUgRjA5MDBfUDJfU1BZX09VVERBVEFfTU9ERSAgMHhmM2EyMDAxZgorCisvKlAyX0ZTUFlPVVQqLworI2RlZmluZSBSMDkwMF9QMl9GU1BZT1VUICAweGYzYTMKKyNkZWZpbmUgRjA5MDBfUDJfRlNQWV9ESVJFQ1QgIDB4ZjNhMzAwODAKKyNkZWZpbmUgRjA5MDBfUDJfU1BZX09VVERBVEFfQlVTICAweGYzYTMwMDM4CisjZGVmaW5lIEYwOTAwX1AyX1NUVUZGX01PREUgIDB4ZjNhMzAwMDcKKworLypQMl9GU1RBVFVTKi8KKyNkZWZpbmUgUjA5MDBfUDJfRlNUQVRVUyAgMHhmM2E0CisjZGVmaW5lIEYwOTAwX1AyX1NQWV9FTkRTSU0gIDB4ZjNhNDAwODAKKyNkZWZpbmUgRjA5MDBfUDJfVkFMSURfU0lNICAweGYzYTQwMDQwCisjZGVmaW5lIEYwOTAwX1AyX0ZPVU5EX1NJR05BTCAgMHhmM2E0MDAyMAorI2RlZmluZSBGMDkwMF9QMl9EU1NfU1lOQ0JZVEUgIDB4ZjNhNDAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfUkVTVUxUX1NUQVRFICAweGYzYTQwMDBmCisKKy8qUDJfRkJFUkNQVDQqLworI2RlZmluZSBSMDkwMF9QMl9GQkVSQ1BUNCAgMHhmM2E4CisjZGVmaW5lIEYwOTAwX1AyX0ZCRVJNRVRFUl9DUFQ0ICAweGYzYTgwMGZmCisKKy8qUDJfRkJFUkNQVDMqLworI2RlZmluZSBSMDkwMF9QMl9GQkVSQ1BUMyAgMHhmM2E5CisjZGVmaW5lIEYwOTAwX1AyX0ZCRVJNRVRFUl9DUFQzICAweGYzYTkwMGZmCisKKy8qUDJfRkJFUkNQVDIqLworI2RlZmluZSBSMDkwMF9QMl9GQkVSQ1BUMiAgMHhmM2FhCisjZGVmaW5lIEYwOTAwX1AyX0ZCRVJNRVRFUl9DUFQyICAweGYzYWEwMGZmCisKKy8qUDJfRkJFUkNQVDEqLworI2RlZmluZSBSMDkwMF9QMl9GQkVSQ1BUMSAgMHhmM2FiCisjZGVmaW5lIEYwOTAwX1AyX0ZCRVJNRVRFUl9DUFQxICAweGYzYWIwMGZmCisKKy8qUDJfRkJFUkNQVDAqLworI2RlZmluZSBSMDkwMF9QMl9GQkVSQ1BUMCAgMHhmM2FjCisjZGVmaW5lIEYwOTAwX1AyX0ZCRVJNRVRFUl9DUFQwICAweGYzYWMwMGZmCisKKy8qUDJfRkJFUkVSUjIqLworI2RlZmluZSBSMDkwMF9QMl9GQkVSRVJSMiAgMHhmM2FkCisjZGVmaW5lIEYwOTAwX1AyX0ZCRVJNRVRFUl9FUlIyICAweGYzYWQwMGZmCisKKy8qUDJfRkJFUkVSUjEqLworI2RlZmluZSBSMDkwMF9QMl9GQkVSRVJSMSAgMHhmM2FlCisjZGVmaW5lIEYwOTAwX1AyX0ZCRVJNRVRFUl9FUlIxICAweGYzYWUwMGZmCisKKy8qUDJfRkJFUkVSUjAqLworI2RlZmluZSBSMDkwMF9QMl9GQkVSRVJSMCAgMHhmM2FmCisjZGVmaW5lIEYwOTAwX1AyX0ZCRVJNRVRFUl9FUlIwICAweGYzYWYwMGZmCisKKy8qUDJfRlNQWUJFUiovCisjZGVmaW5lIFIwOTAwX1AyX0ZTUFlCRVIgIDB4ZjNiMgorI2RlZmluZSBGMDkwMF9QMl9GU1BZT0JTX1hPUlJFQUQgIDB4ZjNiMjAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfRlNQWUJFUl9PQlNNT0RFICAweGYzYjIwMDIwCisjZGVmaW5lIEYwOTAwX1AyX0ZTUFlCRVJfU1lOQ0JZVEUgIDB4ZjNiMjAwMTAKKyNkZWZpbmUgRjA5MDBfUDJfRlNQWUJFUl9VTlNZTkMgIDB4ZjNiMjAwMDgKKyNkZWZpbmUgRjA5MDBfUDJfRlNQWUJFUl9DVElNRSAgMHhmM2IyMDAwNworCisvKlAxX0lRQ09OU1QqLworI2RlZmluZSBSMDkwMF9QMV9JUUNPTlNUICAweGY0MDAKKyNkZWZpbmUgRjA5MDBfUDFfQ09OU1RFTF9TRUxFQ1QgIDB4ZjQwMDAwNjAKKyNkZWZpbmUgRjA5MDBfUDFfSVFTWU1CX1NFTCAgMHhmNDAwMDAxZgorCisvKlAxX05PU0NGRyovCisjZGVmaW5lIFIwOTAwX1AxX05PU0NGRyAgMHhmNDAxCisjZGVmaW5lIEYwOTAwX1AxX0RVTU1ZUExfTk9TREFUQSAgMHhmNDAxMDAyMAorI2RlZmluZSBGMDkwMF9QMV9OT1NQTEhfQkVUQSAgMHhmNDAxMDAxOAorI2RlZmluZSBGMDkwMF9QMV9OT1NEQVRBX0JFVEEgIDB4ZjQwMTAwMDcKKworLypQMV9JU1lNQiovCisjZGVmaW5lIFIwOTAwX1AxX0lTWU1CICAweGY0MDIKKyNkZWZpbmUgRjA5MDBfUDFfSV9TWU1CT0wgIDB4ZjQwMjAxZmYKKworLypQMV9RU1lNQiovCisjZGVmaW5lIFIwOTAwX1AxX1FTWU1CICAweGY0MDMKKyNkZWZpbmUgRjA5MDBfUDFfUV9TWU1CT0wgIDB4ZjQwMzAxZmYKKworLypQMV9BR0MxQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUdDMUNGRyAgMHhmNDA0CisjZGVmaW5lIEYwOTAwX1AxX0RDX0ZST1pFTiAgMHhmNDA0MDA4MAorI2RlZmluZSBGMDkwMF9QMV9EQ19DT1JSRUNUICAweGY0MDQwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0FNTV9GUk9aRU4gIDB4ZjQwNDAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfQU1NX0NPUlJFQ1QgIDB4ZjQwNDAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfUVVBRF9GUk9aRU4gIDB4ZjQwNDAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfUVVBRF9DT1JSRUNUICAweGY0MDQwMDA0CisjZGVmaW5lIEYwOTAwX1AxX0RDQ09NUF9TTE9XICAweGY0MDQwMDAyCisjZGVmaW5lIEYwOTAwX1AxX0lRTUlTTV9TTE9XICAweGY0MDQwMDAxCisKKy8qUDFfQUdDMUNOKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUdDMUNOICAweGY0MDYKKyNkZWZpbmUgRjA5MDBfUDFfQUdDMV9MT0NLRUQgIDB4ZjQwNjAwODAKKyNkZWZpbmUgRjA5MDBfUDFfQUdDMV9PVkVSRkxPVyAgMHhmNDA2MDA0MAorI2RlZmluZSBGMDkwMF9QMV9BR0MxX05PU0xPV0xLICAweGY0MDYwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0FHQzFfTUlOUE9XRVIgIDB4ZjQwNjAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfQUdDT1VUX0ZBU1QgIDB4ZjQwNjAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfQUdDSVFfQkVUQSAgMHhmNDA2MDAwNworCisvKlAxX0FHQzFSRUYqLworI2RlZmluZSBSMDkwMF9QMV9BR0MxUkVGICAweGY0MDcKKyNkZWZpbmUgRjA5MDBfUDFfQUdDSVFfUkVGICAweGY0MDcwMGZmCisKKy8qUDFfSURDQ09NUCovCisjZGVmaW5lIFIwOTAwX1AxX0lEQ0NPTVAgIDB4ZjQwOAorI2RlZmluZSBGMDkwMF9QMV9JQVZFUkFHRV9BREogIDB4ZjQwODAxZmYKKworLypQMV9RRENDT01QKi8KKyNkZWZpbmUgUjA5MDBfUDFfUURDQ09NUCAgMHhmNDA5CisjZGVmaW5lIEYwOTAwX1AxX1FBVkVSQUdFX0FESiAgMHhmNDA5MDFmZgorCisvKlAxX1BPV0VSSSovCisjZGVmaW5lIFIwOTAwX1AxX1BPV0VSSSAgMHhmNDBhCisjZGVmaW5lIEYwOTAwX1AxX1BPV0VSX0kgIDB4ZjQwYTAwZmYKKworLypQMV9QT1dFUlEqLworI2RlZmluZSBSMDkwMF9QMV9QT1dFUlEgIDB4ZjQwYgorI2RlZmluZSBGMDkwMF9QMV9QT1dFUl9RICAweGY0MGIwMGZmCisKKy8qUDFfQUdDMUFNTSovCisjZGVmaW5lIFIwOTAwX1AxX0FHQzFBTU0gIDB4ZjQwYworI2RlZmluZSBGMDkwMF9QMV9BTU1fVkFMVUUgIDB4ZjQwYzAwZmYKKworLypQMV9BR0MxUVVBRCovCisjZGVmaW5lIFIwOTAwX1AxX0FHQzFRVUFEICAweGY0MGQKKyNkZWZpbmUgRjA5MDBfUDFfUVVBRF9WQUxVRSAgMHhmNDBkMDFmZgorCisvKlAxX0FHQ0lRSU4xKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUdDSVFJTjEgIDB4ZjQwZQorI2RlZmluZSBGMDkwMF9QMV9BR0NJUV9WQUxVRTEgIDB4ZjQwZTAwZmYKKworLypQMV9BR0NJUUlOMCovCisjZGVmaW5lIFIwOTAwX1AxX0FHQ0lRSU4wICAweGY0MGYKKyNkZWZpbmUgRjA5MDBfUDFfQUdDSVFfVkFMVUUwICAweGY0MGYwMGZmCisKKy8qUDFfREVNT0QqLworI2RlZmluZSBSMDkwMF9QMV9ERU1PRCAgMHhmNDEwCisjZGVmaW5lIEYwOTAwX1AxX0RFTU9EX1NUT1AgIDB4ZjQxMDAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfU1BFQ0lOVl9DT05UUk9MICAweGY0MTAwMDMwCisjZGVmaW5lIEYwOTAwX1AxX0ZPUkNFX0VOQVNBTVAgIDB4ZjQxMDAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfTUFOVUFMX1JPTExPRkYgIDB4ZjQxMDAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfUk9MTE9GRl9DT05UUk9MICAweGY0MTAwMDAzCisKKy8qUDFfRE1ETU9EQ09EKi8KKyNkZWZpbmUgUjA5MDBfUDFfRE1ETU9EQ09EICAweGY0MTEKKyNkZWZpbmUgRjA5MDBfUDFfTUFOVUFMX01PRENPRCAgMHhmNDExMDA4MAorI2RlZmluZSBGMDkwMF9QMV9ERU1PRF9NT0RDT0QgIDB4ZjQxMTAwN2MKKyNkZWZpbmUgRjA5MDBfUDFfREVNT0RfVFlQRSAgMHhmNDExMDAwMworCisvKlAxX0RTVEFUVVMqLworI2RlZmluZSBSMDkwMF9QMV9EU1RBVFVTICAweGY0MTIKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSX0xPQ0sgIDB4ZjQxMjAwODAKKyNkZWZpbmUgRjA5MDBfUDFfVE1HTE9DS19RVUFMSVRZICAweGY0MTIwMDYwCisjZGVmaW5lIEYwOTAwX1AxX1NEVkJTMV9FTkFCTEUgIDB4ZjQxMjAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfTE9DS19ERUZJTklUSUYgIDB4ZjQxMjAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfVElNSU5HX0lTX0xPQ0tFRCAgMHhmNDEyMDAwNAorI2RlZmluZSBGMDkwMF9QMV9DT0FSU0VfVE1HTE9DSyAgMHhmNDEyMDAwMgorI2RlZmluZSBGMDkwMF9QMV9DT0FSU0VfQ0FSTE9DSyAgMHhmNDEyMDAwMQorCisvKlAxX0RTVEFUVVMyKi8KKyNkZWZpbmUgUjA5MDBfUDFfRFNUQVRVUzIgIDB4ZjQxMworI2RlZmluZSBGMDkwMF9QMV9ERU1PRF9ERUxPQ0sgIDB4ZjQxMzAwODAKKyNkZWZpbmUgRjA5MDBfUDFfREVNT0RfVElNRU9VVCAgMHhmNDEzMDA0MAorI2RlZmluZSBGMDkwMF9QMV9NT0RDT0RSUV9TWU5DVEFHICAweGY0MTMwMDIwCisjZGVmaW5lIEYwOTAwX1AxX1BPTFlQSF9TQVRFVkVOVCAgMHhmNDEzMDAxMAorI2RlZmluZSBGMDkwMF9QMV9BR0MxX05PU0lHTkFMQUNLICAweGY0MTMwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0FHQzJfT1ZFUkZMT1cgIDB4ZjQxMzAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSX09WRVJGTE9XICAweGY0MTMwMDAyCisjZGVmaW5lIEYwOTAwX1AxX0dBTU1BX09WRVJVTkRFUiAgMHhmNDEzMDAwMQorCisvKlAxX0RNRENGR01EKi8KKyNkZWZpbmUgUjA5MDBfUDFfRE1EQ0ZHTUQgIDB4ZjQxNAorI2RlZmluZSBGMDkwMF9QMV9EVkJTMl9FTkFCTEUgIDB4ZjQxNDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfRFZCUzFfRU5BQkxFICAweGY0MTQwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0NGUl9BVVRPU0NBTiAgMHhmNDE0MDAyMAorI2RlZmluZSBGMDkwMF9QMV9TQ0FOX0VOQUJMRSAgMHhmNDE0MDAxMAorI2RlZmluZSBGMDkwMF9QMV9UVU5fQVVUT1NDQU4gIDB4ZjQxNDAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfTk9GT1JDRV9SRUxPQ0sgIDB4ZjQxNDAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX1JORyAgMHhmNDE0MDAwMworCisvKlAxX0RNRENGRzIqLworI2RlZmluZSBSMDkwMF9QMV9ETURDRkcyICAweGY0MTUKKyNkZWZpbmUgRjA5MDBfUDFfQUdDMV9XQUlUTE9DSyAgMHhmNDE1MDA4MAorI2RlZmluZSBGMDkwMF9QMV9TMVMyX1NFUVVFTlRJQUwgIDB4ZjQxNTAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfT1ZFUkZMT1dfVElNRU9VVCAgMHhmNDE1MDAyMAorI2RlZmluZSBGMDkwMF9QMV9TQ0FORkFJTF9USU1FT1VUICAweGY0MTUwMDEwCisjZGVmaW5lIEYwOTAwX1AxX0RNRFRPVVRfQkFDSyAgMHhmNDE1MDAwOAorI2RlZmluZSBGMDkwMF9QMV9DQVJMT0NLX1MxRU5BQkxFICAweGY0MTUwMDA0CisjZGVmaW5lIEYwOTAwX1AxX0NPQVJTRV9MSzNNT0RFICAweGY0MTUwMDAyCisjZGVmaW5lIEYwOTAwX1AxX0NPQVJTRV9MSzJNT0RFICAweGY0MTUwMDAxCisKKy8qUDFfRE1ESVNUQVRFKi8KKyNkZWZpbmUgUjA5MDBfUDFfRE1ESVNUQVRFICAweGY0MTYKKyNkZWZpbmUgRjA5MDBfUDFfSTJDX05PUkVTRVRETU9ERSAgMHhmNDE2MDA4MAorI2RlZmluZSBGMDkwMF9QMV9GT1JDRV9FVEFQRUQgIDB4ZjQxNjAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfU0RNRFJTVF9ESVJDTEsgIDB4ZjQxNjAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfSTJDX0RFTU9EX01PREUgIDB4ZjQxNjAwMWYKKworLypQMV9ETURUME0qLworI2RlZmluZSBSMDkwMF9QMV9ETURUME0gIDB4ZjQxNworI2RlZmluZSBGMDkwMF9QMV9ETURUMF9NSU4gIDB4ZjQxNzAwZmYKKworLypQMV9ETURTVEFURSovCisjZGVmaW5lIFIwOTAwX1AxX0RNRFNUQVRFICAweGY0MWIKKyNkZWZpbmUgRjA5MDBfUDFfREVNT0RfTE9DS0VEICAweGY0MWIwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0hFQURFUl9NT0RFICAweGY0MWIwMDYwCisjZGVmaW5lIEYwOTAwX1AxX0RFTU9EX01PREUgIDB4ZjQxYjAwMWYKKworLypQMV9ETURGTFlXKi8KKyNkZWZpbmUgUjA5MDBfUDFfRE1ERkxZVyAgMHhmNDFjCisjZGVmaW5lIEYwOTAwX1AxX0kyQ19JUlFWQUwgIDB4ZjQxYzAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfRkxZV0hFRUxfQ1BUICAweGY0MWMwMDBmCisKKy8qUDFfRFNUQVRVUzMqLworI2RlZmluZSBSMDkwMF9QMV9EU1RBVFVTMyAgMHhmNDFkCisjZGVmaW5lIEYwOTAwX1AxX0NGUl9aSUdaQUcgIDB4ZjQxZDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfREVNT0RfQ0ZHTU9ERSAgMHhmNDFkMDA2MAorI2RlZmluZSBGMDkwMF9QMV9HQU1NQV9MT1dCQVVEUkFURSAgMHhmNDFkMDAxMAorI2RlZmluZSBGMDkwMF9QMV9SRUxPQ0tfTU9ERSAgMHhmNDFkMDAwOAorI2RlZmluZSBGMDkwMF9QMV9ERU1PRF9GQUlMICAweGY0MWQwMDA0CisjZGVmaW5lIEYwOTAwX1AxX0VUQVBFMUFfRFZCWE1FTSAgMHhmNDFkMDAwMworCisvKlAxX0RNRENGRzMqLworI2RlZmluZSBSMDkwMF9QMV9ETURDRkczICAweGY0MWUKKyNkZWZpbmUgRjA5MDBfUDFfRFZCUzFfVE1HV0FJVCAgMHhmNDFlMDA4MAorI2RlZmluZSBGMDkwMF9QMV9OT19CV0NFTlRFUklORyAgMHhmNDFlMDA0MAorI2RlZmluZSBGMDkwMF9QMV9JTlZfU0VRU1JDSCAgMHhmNDFlMDAyMAorI2RlZmluZSBGMDkwMF9QMV9ESVNfU0ZSVVBMT1dfVFJLICAweGY0MWUwMDEwCisjZGVmaW5lIEYwOTAwX1AxX05PU1RPUF9GSUZPRlVMTCAgMHhmNDFlMDAwOAorI2RlZmluZSBGMDkwMF9QMV9MT0NLVElNRV9NT0RFICAweGY0MWUwMDA3CisKKy8qUDFfRE1EQ0ZHNCovCisjZGVmaW5lIFIwOTAwX1AxX0RNRENGRzQgIDB4ZjQxZgorI2RlZmluZSBGMDkwMF9QMV9UVU5FUl9OUkVMQVVOQ0ggIDB4ZjQxZjAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfRElTX0NMS0VOQUJMRSAgMHhmNDFmMDAwNAorI2RlZmluZSBGMDkwMF9QMV9ESVNfSERSRElWTE9DSyAgMHhmNDFmMDAwMgorI2RlZmluZSBGMDkwMF9QMV9OT19UTlJXQklOSVQgIDB4ZjQxZjAwMDEKKworLypQMV9DT1JSRUxNQU5UKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ09SUkVMTUFOVCAgMHhmNDIwCisjZGVmaW5lIEYwOTAwX1AxX0NPUlJFTF9NQU5UICAweGY0MjAwMGZmCisKKy8qUDFfQ09SUkVMQUJTKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ09SUkVMQUJTICAweGY0MjEKKyNkZWZpbmUgRjA5MDBfUDFfQ09SUkVMX0FCUyAgMHhmNDIxMDBmZgorCisvKlAxX0NPUlJFTEVYUCovCisjZGVmaW5lIFIwOTAwX1AxX0NPUlJFTEVYUCAgMHhmNDIyCisjZGVmaW5lIEYwOTAwX1AxX0NPUlJFTF9BQlNFWFAgIDB4ZjQyMjAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfQ09SUkVMX0VYUCAgMHhmNDIyMDAwZgorCisvKlAxX1BMSE1PRENPRCovCisjZGVmaW5lIFIwOTAwX1AxX1BMSE1PRENPRCAgMHhmNDI0CisjZGVmaW5lIEYwOTAwX1AxX1NQRUNJTlZfREVNT0QgIDB4ZjQyNDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfUExIX01PRENPRCAgMHhmNDI0MDA3YworI2RlZmluZSBGMDkwMF9QMV9QTEhfVFlQRSAgMHhmNDI0MDAwMworCisvKlAxX0FHQ0szMiovCisjZGVmaW5lIFIwOTAwX1AxX0FHQ0szMiAgMHhmNDJiCisjZGVmaW5lIEYwOTAwX1AxX1IzQURKT0ZGXzMyQVBTSyAgMHhmNDJiMDA4MAorI2RlZmluZSBGMDkwMF9QMV9SMkFESk9GRl8zMkFQU0sgIDB4ZjQyYjAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfUjFBREpPRkZfMzJBUFNLICAweGY0MmIwMDIwCisjZGVmaW5lIEYwOTAwX1AxX1JBREpfMzJBUFNLICAweGY0MmIwMDFmCisKKy8qUDFfQUdDMk8qLworI2RlZmluZSBSMDkwMF9QMV9BR0MyTyAgMHhmNDJjCisjZGVmaW5lIEYwOTAwX1AxX0FHQzJSRUZfQURKVVNUSU5HICAweGY0MmMwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0FHQzJfQ09BUlNFRkFTVCAgMHhmNDJjMDA0MAorI2RlZmluZSBGMDkwMF9QMV9BR0MyX0xLU1FSVCAgMHhmNDJjMDAyMAorI2RlZmluZSBGMDkwMF9QMV9BR0MyX0xLTU9ERSAgMHhmNDJjMDAxMAorI2RlZmluZSBGMDkwMF9QMV9BR0MyX0xLRVFVQSAgMHhmNDJjMDAwOAorI2RlZmluZSBGMDkwMF9QMV9BR0MyX0NPRUYgIDB4ZjQyYzAwMDcKKworLypQMV9BR0MyUkVGKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUdDMlJFRiAgMHhmNDJkCisjZGVmaW5lIEYwOTAwX1AxX0FHQzJfUkVGICAweGY0MmQwMGZmCisKKy8qUDFfQUdDMUFESiovCisjZGVmaW5lIFIwOTAwX1AxX0FHQzFBREogIDB4ZjQyZQorI2RlZmluZSBGMDkwMF9QMV9BR0MxQURKX01BTlVBTCAgMHhmNDJlMDA4MAorI2RlZmluZSBGMDkwMF9QMV9BR0MxX0FESlVTVEVEICAweGY0MmUwMTdmCisKKy8qUDFfQUdDMkkxKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUdDMkkxICAweGY0MzYKKyNkZWZpbmUgRjA5MDBfUDFfQUdDMl9JTlRFR1JBVE9SMSAgMHhmNDM2MDBmZgorCisvKlAxX0FHQzJJMCovCisjZGVmaW5lIFIwOTAwX1AxX0FHQzJJMCAgMHhmNDM3CisjZGVmaW5lIEYwOTAwX1AxX0FHQzJfSU5URUdSQVRPUjAgIDB4ZjQzNzAwZmYKKworLypQMV9DQVJDRkcqLworI2RlZmluZSBSMDkwMF9QMV9DQVJDRkcgIDB4ZjQzOAorI2RlZmluZSBGMDkwMF9QMV9DRlJVUExPV19BVVRPICAweGY0MzgwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0NGUlVQTE9XX1RFU1QgIDB4ZjQzODAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfRU5fQ0FSMkNFTlRFUiAgMHhmNDM4MDAyMAorI2RlZmluZSBGMDkwMF9QMV9DQVJIRFJfTk9ESVY4ICAweGY0MzgwMDEwCisjZGVmaW5lIEYwOTAwX1AxX0kyQ19ST1RBICAweGY0MzgwMDA4CisjZGVmaW5lIEYwOTAwX1AxX1JPVEFPTiAgMHhmNDM4MDAwNAorI2RlZmluZSBGMDkwMF9QMV9QSF9ERVRfQUxHTyAgMHhmNDM4MDAwMworCisvKlAxX0FDTEMqLworI2RlZmluZSBSMDkwMF9QMV9BQ0xDICAweGY0MzkKKyNkZWZpbmUgRjA5MDBfUDFfU1RPUF9TMkFMUEhBICAweGY0MzkwMGMwCisjZGVmaW5lIEYwOTAwX1AxX0NBUl9BTFBIQV9NQU5UICAweGY0MzkwMDMwCisjZGVmaW5lIEYwOTAwX1AxX0NBUl9BTFBIQV9FWFAgIDB4ZjQzOTAwMGYKKworLypQMV9CQ0xDKi8KKyNkZWZpbmUgUjA5MDBfUDFfQkNMQyAgMHhmNDNhCisjZGVmaW5lIEYwOTAwX1AxX1NUT1BfUzJCRVRBICAweGY0M2EwMGMwCisjZGVmaW5lIEYwOTAwX1AxX0NBUl9CRVRBX01BTlQgIDB4ZjQzYTAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSX0JFVEFfRVhQICAweGY0M2EwMDBmCisKKy8qUDFfQ0FSRlJFUSovCisjZGVmaW5lIFIwOTAwX1AxX0NBUkZSRVEgIDB4ZjQzZAorI2RlZmluZSBGMDkwMF9QMV9LQ19DT0FSU0VfRVhQICAweGY0M2QwMGYwCisjZGVmaW5lIEYwOTAwX1AxX0JFVEFfRlJFUSAgMHhmNDNkMDAwZgorCisvKlAxX0NBUkhEUiovCisjZGVmaW5lIFIwOTAwX1AxX0NBUkhEUiAgMHhmNDNlCisjZGVmaW5lIEYwOTAwX1AxX0tfRlJFUV9IRFIgIDB4ZjQzZTAwZmYKKworLypQMV9MRFQqLworI2RlZmluZSBSMDkwMF9QMV9MRFQgIDB4ZjQzZgorI2RlZmluZSBGMDkwMF9QMV9DQVJMT0NLX1RIUkVTICAweGY0M2YwMWZmCisKKy8qUDFfTERUMiovCisjZGVmaW5lIFIwOTAwX1AxX0xEVDIgIDB4ZjQ0MAorI2RlZmluZSBGMDkwMF9QMV9DQVJMT0NLX1RIUkVTMiAgMHhmNDQwMDFmZgorCisvKlAxX0NGUklDRkcqLworI2RlZmluZSBSMDkwMF9QMV9DRlJJQ0ZHICAweGY0NDEKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSSU5JVF9VTlZBTFJORyAgMHhmNDQxMDA4MAorI2RlZmluZSBGMDkwMF9QMV9DRlJJTklUX0xVTlZBTENQVCAgMHhmNDQxMDA0MAorI2RlZmluZSBGMDkwMF9QMV9DRlJJTklUX0FCT1JUREJMICAweGY0NDEwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0NGUklOSVRfQUJPUlRQUkVEICAweGY0NDEwMDEwCisjZGVmaW5lIEYwOTAwX1AxX0NGUklOSVRfVU5WQUxTS0lQICAweGY0NDEwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0NGUklOSVRfQ1NUSU5DICAweGY0NDEwMDA0CisjZGVmaW5lIEYwOTAwX1AxX05FR19DRlJTVEVQICAweGY0NDEwMDAxCisKKy8qUDFfQ0ZSVVAxKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0ZSVVAxICAweGY0NDIKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSX1VQMSAgMHhmNDQyMDFmZgorCisvKlAxX0NGUlVQMCovCisjZGVmaW5lIFIwOTAwX1AxX0NGUlVQMCAgMHhmNDQzCisjZGVmaW5lIEYwOTAwX1AxX0NGUl9VUDAgIDB4ZjQ0MzAwZmYKKworLypQMV9DRlJMT1cxKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0ZSTE9XMSAgMHhmNDQ2CisjZGVmaW5lIEYwOTAwX1AxX0NGUl9MT1cxICAweGY0NDYwMWZmCisKKy8qUDFfQ0ZSTE9XMCovCisjZGVmaW5lIFIwOTAwX1AxX0NGUkxPVzAgIDB4ZjQ0NworI2RlZmluZSBGMDkwMF9QMV9DRlJfTE9XMCAgMHhmNDQ3MDBmZgorCisvKlAxX0NGUklOSVQxKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0ZSSU5JVDEgIDB4ZjQ0OAorI2RlZmluZSBGMDkwMF9QMV9DRlJfSU5JVDEgIDB4ZjQ0ODAxZmYKKworLypQMV9DRlJJTklUMCovCisjZGVmaW5lIFIwOTAwX1AxX0NGUklOSVQwICAweGY0NDkKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSX0lOSVQwICAweGY0NDkwMGZmCisKKy8qUDFfQ0ZSSU5DMSovCisjZGVmaW5lIFIwOTAwX1AxX0NGUklOQzEgIDB4ZjQ0YQorI2RlZmluZSBGMDkwMF9QMV9NQU5VQUxfQ0ZSSU5DICAweGY0NGEwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0NGUl9JTkMxICAweGY0NGEwMTdmCisKKy8qUDFfQ0ZSSU5DMCovCisjZGVmaW5lIFIwOTAwX1AxX0NGUklOQzAgIDB4ZjQ0YgorI2RlZmluZSBGMDkwMF9QMV9DRlJfSU5DMCAgMHhmNDRiMDBmMAorCisvKlAxX0NGUjIqLworI2RlZmluZSBSMDkwMF9QMV9DRlIyICAweGY0NGMKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSX0ZSRVEyICAweGY0NGMwMWZmCisKKy8qUDFfQ0ZSMSovCisjZGVmaW5lIFIwOTAwX1AxX0NGUjEgIDB4ZjQ0ZAorI2RlZmluZSBGMDkwMF9QMV9DQVJfRlJFUTEgIDB4ZjQ0ZDAwZmYKKworLypQMV9DRlIwKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0ZSMCAgMHhmNDRlCisjZGVmaW5lIEYwOTAwX1AxX0NBUl9GUkVRMCAgMHhmNDRlMDBmZgorCisvKlAxX0xESSovCisjZGVmaW5lIFIwOTAwX1AxX0xESSAgMHhmNDRmCisjZGVmaW5lIEYwOTAwX1AxX0xPQ0tfREVUX0lOVEVHUiAgMHhmNDRmMDFmZgorCisvKlAxX1RNR0NGRyovCisjZGVmaW5lIFIwOTAwX1AxX1RNR0NGRyAgMHhmNDUwCisjZGVmaW5lIEYwOTAwX1AxX1RNR0xPQ0tfQkVUQSAgMHhmNDUwMDBjMAorI2RlZmluZSBGMDkwMF9QMV9OT1RNR19HUk9VUERFTEFZICAweGY0NTAwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0RPX1RJTUlOR19DT1JSICAweGY0NTAwMDEwCisjZGVmaW5lIEYwOTAwX1AxX01BTlVBTF9TQ0FOICAweGY0NTAwMDBjCisjZGVmaW5lIEYwOTAwX1AxX1RNR19NSU5GUkVRICAweGY0NTAwMDAzCisKKy8qUDFfUlRDKi8KKyNkZWZpbmUgUjA5MDBfUDFfUlRDICAweGY0NTEKKyNkZWZpbmUgRjA5MDBfUDFfVE1HQUxQSEFfRVhQICAweGY0NTEwMGYwCisjZGVmaW5lIEYwOTAwX1AxX1RNR0JFVEFfRVhQICAweGY0NTEwMDBmCisKKy8qUDFfUlRDUzIqLworI2RlZmluZSBSMDkwMF9QMV9SVENTMiAgMHhmNDUyCisjZGVmaW5lIEYwOTAwX1AxX1RNR0FMUEhBUzJfRVhQICAweGY0NTIwMGYwCisjZGVmaW5lIEYwOTAwX1AxX1RNR0JFVEFTMl9FWFAgIDB4ZjQ1MjAwMGYKKworLypQMV9UTUdUSFJJU0UqLworI2RlZmluZSBSMDkwMF9QMV9UTUdUSFJJU0UgIDB4ZjQ1MworI2RlZmluZSBGMDkwMF9QMV9UTUdMT0NLX1RIUklTRSAgMHhmNDUzMDBmZgorCisvKlAxX1RNR1RIRkFMTCovCisjZGVmaW5lIFIwOTAwX1AxX1RNR1RIRkFMTCAgMHhmNDU0CisjZGVmaW5lIEYwOTAwX1AxX1RNR0xPQ0tfVEhGQUxMICAweGY0NTQwMGZmCisKKy8qUDFfU0ZSVVBSQVRJTyovCisjZGVmaW5lIFIwOTAwX1AxX1NGUlVQUkFUSU8gIDB4ZjQ1NQorI2RlZmluZSBGMDkwMF9QMV9TRlJfVVBSQVRJTyAgMHhmNDU1MDBmZgorCisvKlAxX1NGUkxPV1JBVElPKi8KKyNkZWZpbmUgUjA5MDBfUDFfU0ZSTE9XUkFUSU8gIDB4ZjQ1NgorI2RlZmluZSBGMDkwMF9QMV9TRlJfTE9XUkFUSU8gIDB4ZjQ1NjAwZmYKKworLypQMV9LUkVGVE1HKi8KKyNkZWZpbmUgUjA5MDBfUDFfS1JFRlRNRyAgMHhmNDU4CisjZGVmaW5lIEYwOTAwX1AxX0tSRUZfVE1HICAweGY0NTgwMGZmCisKKy8qUDFfU0ZSU1RFUCovCisjZGVmaW5lIFIwOTAwX1AxX1NGUlNURVAgIDB4ZjQ1OQorI2RlZmluZSBGMDkwMF9QMV9TRlJfU0NBTlNURVAgIDB4ZjQ1OTAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfU0ZSX0NFTlRFUlNURVAgIDB4ZjQ1OTAwMGYKKworLypQMV9UTUdDRkcyKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE1HQ0ZHMiAgMHhmNDVhCisjZGVmaW5lIEYwOTAwX1AxX0RJU19BVVRPU0FNUCAgMHhmNDVhMDAwOAorI2RlZmluZSBGMDkwMF9QMV9TQ0FOSU5JVF9RVUFSVCAgMHhmNDVhMDAwNAorI2RlZmluZSBGMDkwMF9QMV9OT1RNR19EVkJTMURFUkFUICAweGY0NWEwMDAyCisjZGVmaW5lIEYwOTAwX1AxX1NGUlJBVElPX0ZJTkUgIDB4ZjQ1YTAwMDEKKworLypQMV9TRlJJTklUMSovCisjZGVmaW5lIFIwOTAwX1AxX1NGUklOSVQxICAweGY0NWUKKyNkZWZpbmUgRjA5MDBfUDFfU0ZSX0lOSVQxICAweGY0NWUwMGZmCisKKy8qUDFfU0ZSSU5JVDAqLworI2RlZmluZSBSMDkwMF9QMV9TRlJJTklUMCAgMHhmNDVmCisjZGVmaW5lIEYwOTAwX1AxX1NGUl9JTklUMCAgMHhmNDVmMDBmZgorCisvKlAxX1NGUlVQMSovCisjZGVmaW5lIFIwOTAwX1AxX1NGUlVQMSAgMHhmNDYwCisjZGVmaW5lIEYwOTAwX1AxX0FVVE9fR1VQICAweGY0NjAwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1NZTUJfRlJFUV9VUDEgIDB4ZjQ2MDAwN2YKKworLypQMV9TRlJVUDAqLworI2RlZmluZSBSMDkwMF9QMV9TRlJVUDAgIDB4ZjQ2MQorI2RlZmluZSBGMDkwMF9QMV9TWU1CX0ZSRVFfVVAwICAweGY0NjEwMGZmCisKKy8qUDFfU0ZSTE9XMSovCisjZGVmaW5lIFIwOTAwX1AxX1NGUkxPVzEgIDB4ZjQ2MgorI2RlZmluZSBGMDkwMF9QMV9BVVRPX0dMT1cgIDB4ZjQ2MjAwODAKKyNkZWZpbmUgRjA5MDBfUDFfU1lNQl9GUkVRX0xPVzEgIDB4ZjQ2MjAwN2YKKworLypQMV9TRlJMT1cwKi8KKyNkZWZpbmUgUjA5MDBfUDFfU0ZSTE9XMCAgMHhmNDYzCisjZGVmaW5lIEYwOTAwX1AxX1NZTUJfRlJFUV9MT1cwICAweGY0NjMwMGZmCisKKy8qUDFfU0ZSMyovCisjZGVmaW5lIFIwOTAwX1AxX1NGUjMgIDB4ZjQ2NAorI2RlZmluZSBGMDkwMF9QMV9TWU1CX0ZSRVEzICAweGY0NjQwMGZmCisKKy8qUDFfU0ZSMiovCisjZGVmaW5lIFIwOTAwX1AxX1NGUjIgIDB4ZjQ2NQorI2RlZmluZSBGMDkwMF9QMV9TWU1CX0ZSRVEyICAweGY0NjUwMGZmCisKKy8qUDFfU0ZSMSovCisjZGVmaW5lIFIwOTAwX1AxX1NGUjEgIDB4ZjQ2NgorI2RlZmluZSBGMDkwMF9QMV9TWU1CX0ZSRVExICAweGY0NjYwMGZmCisKKy8qUDFfU0ZSMCovCisjZGVmaW5lIFIwOTAwX1AxX1NGUjAgIDB4ZjQ2NworI2RlZmluZSBGMDkwMF9QMV9TWU1CX0ZSRVEwICAweGY0NjcwMGZmCisKKy8qUDFfVE1HUkVHMiovCisjZGVmaW5lIFIwOTAwX1AxX1RNR1JFRzIgIDB4ZjQ2OAorI2RlZmluZSBGMDkwMF9QMV9UTUdSRUcyICAweGY0NjgwMGZmCisKKy8qUDFfVE1HUkVHMSovCisjZGVmaW5lIFIwOTAwX1AxX1RNR1JFRzEgIDB4ZjQ2OQorI2RlZmluZSBGMDkwMF9QMV9UTUdSRUcxICAweGY0NjkwMGZmCisKKy8qUDFfVE1HUkVHMCovCisjZGVmaW5lIFIwOTAwX1AxX1RNR1JFRzAgIDB4ZjQ2YQorI2RlZmluZSBGMDkwMF9QMV9UTUdSRUcwICAweGY0NmEwMGZmCisKKy8qUDFfVE1HTE9DSzEqLworI2RlZmluZSBSMDkwMF9QMV9UTUdMT0NLMSAgMHhmNDZiCisjZGVmaW5lIEYwOTAwX1AxX1RNR0xPQ0tfTEVWRUwxICAweGY0NmIwMWZmCisKKy8qUDFfVE1HTE9DSzAqLworI2RlZmluZSBSMDkwMF9QMV9UTUdMT0NLMCAgMHhmNDZjCisjZGVmaW5lIEYwOTAwX1AxX1RNR0xPQ0tfTEVWRUwwICAweGY0NmMwMGZmCisKKy8qUDFfVE1HT0JTKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE1HT0JTICAweGY0NmQKKyNkZWZpbmUgRjA5MDBfUDFfUk9MTE9GRl9TVEFUVVMgIDB4ZjQ2ZDAwYzAKKyNkZWZpbmUgRjA5MDBfUDFfU0NBTl9TSUdOICAweGY0NmQwMDMwCisjZGVmaW5lIEYwOTAwX1AxX1RNR19TQ0FOTklORyAgMHhmNDZkMDAwOAorI2RlZmluZSBGMDkwMF9QMV9DSENFTlRFUklOR19NT0RFICAweGY0NmQwMDA0CisjZGVmaW5lIEYwOTAwX1AxX1RNR19TQ0FORkFJTCAgMHhmNDZkMDAwMgorCisvKlAxX0VRVUFMQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDFfRVFVQUxDRkcgIDB4ZjQ2ZgorI2RlZmluZSBGMDkwMF9QMV9OT1RNR19ORUdBTFdBSVQgIDB4ZjQ2ZjAwODAKKyNkZWZpbmUgRjA5MDBfUDFfRVFVQUxfT04gIDB4ZjQ2ZjAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfU0VMX0VRVUFMQ09SICAweGY0NmYwMDM4CisjZGVmaW5lIEYwOTAwX1AxX01VX0VRVUFMREZFICAweGY0NmYwMDA3CisKKy8qUDFfRVFVQUkxKi8KKyNkZWZpbmUgUjA5MDBfUDFfRVFVQUkxICAweGY0NzAKKyNkZWZpbmUgRjA5MDBfUDFfRVFVQV9BQ0NJMSAgMHhmNDcwMDFmZgorCisvKlAxX0VRVUFRMSovCisjZGVmaW5lIFIwOTAwX1AxX0VRVUFRMSAgMHhmNDcxCisjZGVmaW5lIEYwOTAwX1AxX0VRVUFfQUNDUTEgIDB4ZjQ3MTAxZmYKKworLypQMV9FUVVBSTIqLworI2RlZmluZSBSMDkwMF9QMV9FUVVBSTIgIDB4ZjQ3MgorI2RlZmluZSBGMDkwMF9QMV9FUVVBX0FDQ0kyICAweGY0NzIwMWZmCisKKy8qUDFfRVFVQVEyKi8KKyNkZWZpbmUgUjA5MDBfUDFfRVFVQVEyICAweGY0NzMKKyNkZWZpbmUgRjA5MDBfUDFfRVFVQV9BQ0NRMiAgMHhmNDczMDFmZgorCisvKlAxX0VRVUFJMyovCisjZGVmaW5lIFIwOTAwX1AxX0VRVUFJMyAgMHhmNDc0CisjZGVmaW5lIEYwOTAwX1AxX0VRVUFfQUNDSTMgIDB4ZjQ3NDAxZmYKKworLypQMV9FUVVBUTMqLworI2RlZmluZSBSMDkwMF9QMV9FUVVBUTMgIDB4ZjQ3NQorI2RlZmluZSBGMDkwMF9QMV9FUVVBX0FDQ1EzICAweGY0NzUwMWZmCisKKy8qUDFfRVFVQUk0Ki8KKyNkZWZpbmUgUjA5MDBfUDFfRVFVQUk0ICAweGY0NzYKKyNkZWZpbmUgRjA5MDBfUDFfRVFVQV9BQ0NJNCAgMHhmNDc2MDFmZgorCisvKlAxX0VRVUFRNCovCisjZGVmaW5lIFIwOTAwX1AxX0VRVUFRNCAgMHhmNDc3CisjZGVmaW5lIEYwOTAwX1AxX0VRVUFfQUNDUTQgIDB4ZjQ3NzAxZmYKKworLypQMV9FUVVBSTUqLworI2RlZmluZSBSMDkwMF9QMV9FUVVBSTUgIDB4ZjQ3OAorI2RlZmluZSBGMDkwMF9QMV9FUVVBX0FDQ0k1ICAweGY0NzgwMWZmCisKKy8qUDFfRVFVQVE1Ki8KKyNkZWZpbmUgUjA5MDBfUDFfRVFVQVE1ICAweGY0NzkKKyNkZWZpbmUgRjA5MDBfUDFfRVFVQV9BQ0NRNSAgMHhmNDc5MDFmZgorCisvKlAxX0VRVUFJNiovCisjZGVmaW5lIFIwOTAwX1AxX0VRVUFJNiAgMHhmNDdhCisjZGVmaW5lIEYwOTAwX1AxX0VRVUFfQUNDSTYgIDB4ZjQ3YTAxZmYKKworLypQMV9FUVVBUTYqLworI2RlZmluZSBSMDkwMF9QMV9FUVVBUTYgIDB4ZjQ3YgorI2RlZmluZSBGMDkwMF9QMV9FUVVBX0FDQ1E2ICAweGY0N2IwMWZmCisKKy8qUDFfRVFVQUk3Ki8KKyNkZWZpbmUgUjA5MDBfUDFfRVFVQUk3ICAweGY0N2MKKyNkZWZpbmUgRjA5MDBfUDFfRVFVQV9BQ0NJNyAgMHhmNDdjMDFmZgorCisvKlAxX0VRVUFRNyovCisjZGVmaW5lIFIwOTAwX1AxX0VRVUFRNyAgMHhmNDdkCisjZGVmaW5lIEYwOTAwX1AxX0VRVUFfQUNDUTcgIDB4ZjQ3ZDAxZmYKKworLypQMV9FUVVBSTgqLworI2RlZmluZSBSMDkwMF9QMV9FUVVBSTggIDB4ZjQ3ZQorI2RlZmluZSBGMDkwMF9QMV9FUVVBX0FDQ0k4ICAweGY0N2UwMWZmCisKKy8qUDFfRVFVQVE4Ki8KKyNkZWZpbmUgUjA5MDBfUDFfRVFVQVE4ICAweGY0N2YKKyNkZWZpbmUgRjA5MDBfUDFfRVFVQV9BQ0NROCAgMHhmNDdmMDFmZgorCisvKlAxX05OT1NEQVRBVDEqLworI2RlZmluZSBSMDkwMF9QMV9OTk9TREFUQVQxICAweGY0ODAKKyNkZWZpbmUgRjA5MDBfUDFfTk9TREFUQVRfTk9STUVEMSAgMHhmNDgwMDBmZgorCisvKlAxX05OT1NEQVRBVDAqLworI2RlZmluZSBSMDkwMF9QMV9OTk9TREFUQVQwICAweGY0ODEKKyNkZWZpbmUgRjA5MDBfUDFfTk9TREFUQVRfTk9STUVEMCAgMHhmNDgxMDBmZgorCisvKlAxX05OT1NEQVRBMSovCisjZGVmaW5lIFIwOTAwX1AxX05OT1NEQVRBMSAgMHhmNDgyCisjZGVmaW5lIEYwOTAwX1AxX05PU0RBVEFfTk9STUVEMSAgMHhmNDgyMDBmZgorCisvKlAxX05OT1NEQVRBMCovCisjZGVmaW5lIFIwOTAwX1AxX05OT1NEQVRBMCAgMHhmNDgzCisjZGVmaW5lIEYwOTAwX1AxX05PU0RBVEFfTk9STUVEMCAgMHhmNDgzMDBmZgorCisvKlAxX05OT1NQTEhUMSovCisjZGVmaW5lIFIwOTAwX1AxX05OT1NQTEhUMSAgMHhmNDg0CisjZGVmaW5lIEYwOTAwX1AxX05PU1BMSFRfTk9STUVEMSAgMHhmNDg0MDBmZgorCisvKlAxX05OT1NQTEhUMCovCisjZGVmaW5lIFIwOTAwX1AxX05OT1NQTEhUMCAgMHhmNDg1CisjZGVmaW5lIEYwOTAwX1AxX05PU1BMSFRfTk9STUVEMCAgMHhmNDg1MDBmZgorCisvKlAxX05OT1NQTEgxKi8KKyNkZWZpbmUgUjA5MDBfUDFfTk5PU1BMSDEgIDB4ZjQ4NgorI2RlZmluZSBGMDkwMF9QMV9OT1NQTEhfTk9STUVEMSAgMHhmNDg2MDBmZgorCisvKlAxX05OT1NQTEgwKi8KKyNkZWZpbmUgUjA5MDBfUDFfTk5PU1BMSDAgIDB4ZjQ4NworI2RlZmluZSBGMDkwMF9QMV9OT1NQTEhfTk9STUVEMCAgMHhmNDg3MDBmZgorCisvKlAxX05PU0RBVEFUMSovCisjZGVmaW5lIFIwOTAwX1AxX05PU0RBVEFUMSAgMHhmNDg4CisjZGVmaW5lIEYwOTAwX1AxX05PU0RBVEFUX1VOTk9STUVEMSAgMHhmNDg4MDBmZgorCisvKlAxX05PU0RBVEFUMCovCisjZGVmaW5lIFIwOTAwX1AxX05PU0RBVEFUMCAgMHhmNDg5CisjZGVmaW5lIEYwOTAwX1AxX05PU0RBVEFUX1VOTk9STUVEMCAgMHhmNDg5MDBmZgorCisvKlAxX05PU0RBVEExKi8KKyNkZWZpbmUgUjA5MDBfUDFfTk9TREFUQTEgIDB4ZjQ4YQorI2RlZmluZSBGMDkwMF9QMV9OT1NEQVRBX1VOTk9STUVEMSAgMHhmNDhhMDBmZgorCisvKlAxX05PU0RBVEEwKi8KKyNkZWZpbmUgUjA5MDBfUDFfTk9TREFUQTAgIDB4ZjQ4YgorI2RlZmluZSBGMDkwMF9QMV9OT1NEQVRBX1VOTk9STUVEMCAgMHhmNDhiMDBmZgorCisvKlAxX05PU1BMSFQxKi8KKyNkZWZpbmUgUjA5MDBfUDFfTk9TUExIVDEgIDB4ZjQ4YworI2RlZmluZSBGMDkwMF9QMV9OT1NQTEhUX1VOTk9STUVEMSAgMHhmNDhjMDBmZgorCisvKlAxX05PU1BMSFQwKi8KKyNkZWZpbmUgUjA5MDBfUDFfTk9TUExIVDAgIDB4ZjQ4ZAorI2RlZmluZSBGMDkwMF9QMV9OT1NQTEhUX1VOTk9STUVEMCAgMHhmNDhkMDBmZgorCisvKlAxX05PU1BMSDEqLworI2RlZmluZSBSMDkwMF9QMV9OT1NQTEgxICAweGY0OGUKKyNkZWZpbmUgRjA5MDBfUDFfTk9TUExIX1VOTk9STUVEMSAgMHhmNDhlMDBmZgorCisvKlAxX05PU1BMSDAqLworI2RlZmluZSBSMDkwMF9QMV9OT1NQTEgwICAweGY0OGYKKyNkZWZpbmUgRjA5MDBfUDFfTk9TUExIX1VOTk9STUVEMCAgMHhmNDhmMDBmZgorCisvKlAxX0NBUjJDRkcqLworI2RlZmluZSBSMDkwMF9QMV9DQVIyQ0ZHICAweGY0OTAKKyNkZWZpbmUgRjA5MDBfUDFfREVTQ1JBTUJfT0ZGICAweGY0OTAwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1BONF9TRUxFQ1QgIDB4ZjQ5MDAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfQ0ZSMl9TVE9QRFZCUzEgIDB4ZjQ5MDAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfU1RPUF9DRlIyVVBEQVRFICAweGY0OTAwMDEwCisjZGVmaW5lIEYwOTAwX1AxX1NUT1BfTkNPMlVQREFURSAgMHhmNDkwMDAwOAorI2RlZmluZSBGMDkwMF9QMV9ST1RBMk9OICAweGY0OTAwMDA0CisjZGVmaW5lIEYwOTAwX1AxX1BIX0RFVF9BTEdPMiAgMHhmNDkwMDAwMworCisvKlAxX0FDTEMyKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUNMQzIgIDB4ZjQ5MQorI2RlZmluZSBGMDkwMF9QMV9DQVIyX1BVTkNUX0FERVJBVCAgMHhmNDkxMDA0MAorI2RlZmluZSBGMDkwMF9QMV9DQVIyX0FMUEhBX01BTlQgIDB4ZjQ5MTAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMl9BTFBIQV9FWFAgIDB4ZjQ5MTAwMGYKKworLypQMV9CQ0xDMiovCisjZGVmaW5lIFIwOTAwX1AxX0JDTEMyICAweGY0OTIKKyNkZWZpbmUgRjA5MDBfUDFfRFZCUzJfTklQICAweGY0OTIwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJfUFVOQ1RfQkRFUkFUICAweGY0OTIwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJfQkVUQV9NQU5UICAweGY0OTIwMDMwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJfQkVUQV9FWFAgIDB4ZjQ5MjAwMGYKKworLypQMV9DRlIyMiovCisjZGVmaW5lIFIwOTAwX1AxX0NGUjIyICAweGY0OTMKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMl9GUkVRMiAgMHhmNDkzMDFmZgorCisvKlAxX0NGUjIxKi8KKyNkZWZpbmUgUjA5MDBfUDFfQ0ZSMjEgIDB4ZjQ5NAorI2RlZmluZSBGMDkwMF9QMV9DQVIyX0ZSRVExICAweGY0OTQwMGZmCisKKy8qUDFfQ0ZSMjAqLworI2RlZmluZSBSMDkwMF9QMV9DRlIyMCAgMHhmNDk1CisjZGVmaW5lIEYwOTAwX1AxX0NBUjJfRlJFUTAgIDB4ZjQ5NTAwZmYKKworLypQMV9BQ0xDMlMyUSovCisjZGVmaW5lIFIwOTAwX1AxX0FDTEMyUzJRICAweGY0OTcKKyNkZWZpbmUgRjA5MDBfUDFfRU5BQl9TUFNLU1lNQiAgMHhmNDk3MDA4MAorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfUUFERVJBVCAgMHhmNDk3MDA0MAorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfUV9BTFBIX00gIDB4ZjQ5NzAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyX1FfQUxQSF9FICAweGY0OTcwMDBmCisKKy8qUDFfQUNMQzJTMjgqLworI2RlZmluZSBSMDkwMF9QMV9BQ0xDMlMyOCAgMHhmNDk4CisjZGVmaW5lIEYwOTAwX1AxX09MREkzUV9NT0RFICAweGY0OTgwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl84QURFUkFUICAweGY0OTgwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl84X0FMUEhfTSAgMHhmNDk4MDAzMAorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfOF9BTFBIX0UgIDB4ZjQ5ODAwMGYKKworLypQMV9BQ0xDMlMyMTZBKi8KKyNkZWZpbmUgUjA5MDBfUDFfQUNMQzJTMjE2QSAgMHhmNDk5CisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl8xNkFERVJBVCAgMHhmNDk5MDA0MAorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfMTZBX0FMUEhfTSAgMHhmNDk5MDAzMAorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfMTZBX0FMUEhfRSAgMHhmNDk5MDAwZgorCisvKlAxX0FDTEMyUzIzMkEqLworI2RlZmluZSBSMDkwMF9QMV9BQ0xDMlMyMzJBICAweGY0OWEKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyXzMyQURFUkFUICAweGY0OWEwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl8zMkFfQUxQSF9NICAweGY0OWEwMDMwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl8zMkFfQUxQSF9FICAweGY0OWEwMDBmCisKKy8qUDFfQkNMQzJTMlEqLworI2RlZmluZSBSMDkwMF9QMV9CQ0xDMlMyUSAgMHhmNDljCisjZGVmaW5lIEYwOTAwX1AxX0RWQlMyUzJRX05JUCAgMHhmNDljMDA4MAorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfUUJERVJBVCAgMHhmNDljMDA0MAorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfUV9CRVRBX00gIDB4ZjQ5YzAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyX1FfQkVUQV9FICAweGY0OWMwMDBmCisKKy8qUDFfQkNMQzJTMjgqLworI2RlZmluZSBSMDkwMF9QMV9CQ0xDMlMyOCAgMHhmNDlkCisjZGVmaW5lIEYwOTAwX1AxX0RWQlMyUzI4X05JUCAgMHhmNDlkMDA4MAorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfOEJERVJBVCAgMHhmNDlkMDA0MAorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfOF9CRVRBX00gIDB4ZjQ5ZDAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyXzhfQkVUQV9FICAweGY0OWQwMDBmCisKKy8qUDFfQkNMQzJTMjE2QSovCisjZGVmaW5lIFIwOTAwX1AxX0JDTEMyUzIxNkEgIDB4ZjQ5ZQorI2RlZmluZSBGMDkwMF9QMV9EVkJTMlMyMTZBX05JUCAgMHhmNDllMDA4MAorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfMTZCREVSQVQgIDB4ZjQ5ZTAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyXzE2QV9CRVRBX00gIDB4ZjQ5ZTAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfQ0FSMlMyXzE2QV9CRVRBX0UgIDB4ZjQ5ZTAwMGYKKworLypQMV9CQ0xDMlMyMzJBKi8KKyNkZWZpbmUgUjA5MDBfUDFfQkNMQzJTMjMyQSAgMHhmNDlmCisjZGVmaW5lIEYwOTAwX1AxX0RWQlMyUzIzMkFfTklQICAweGY0OWYwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0NBUjJTMl8zMkJERVJBVCAgMHhmNDlmMDA0MAorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfMzJBX0JFVEFfTSAgMHhmNDlmMDAzMAorI2RlZmluZSBGMDkwMF9QMV9DQVIyUzJfMzJBX0JFVEFfRSAgMHhmNDlmMDAwZgorCisvKlAxX1BMUk9PVDIqLworI2RlZmluZSBSMDkwMF9QMV9QTFJPT1QyICAweGY0YWMKKyNkZWZpbmUgRjA5MDBfUDFfU0hPUlRGUl9ESVNBQkxFICAweGY0YWMwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0xPTkdGUl9ESVNBQkxFICAweGY0YWMwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0RVTU1ZUExfRElTQUJMRSAgMHhmNGFjMDAyMAorI2RlZmluZSBGMDkwMF9QMV9TSE9SVEZSX0FWT0lEICAweGY0YWMwMDEwCisjZGVmaW5lIEYwOTAwX1AxX1BMU0NSQU1CX01PREUgIDB4ZjRhYzAwMGMKKyNkZWZpbmUgRjA5MDBfUDFfUExTQ1JBTUJfUk9PVDIgIDB4ZjRhYzAwMDMKKworLypQMV9QTFJPT1QxKi8KKyNkZWZpbmUgUjA5MDBfUDFfUExST09UMSAgMHhmNGFkCisjZGVmaW5lIEYwOTAwX1AxX1BMU0NSQU1CX1JPT1QxICAweGY0YWQwMGZmCisKKy8qUDFfUExST09UMCovCisjZGVmaW5lIFIwOTAwX1AxX1BMUk9PVDAgIDB4ZjRhZQorI2RlZmluZSBGMDkwMF9QMV9QTFNDUkFNQl9ST09UMCAgMHhmNGFlMDBmZgorCisvKlAxX01PRENPRExTVDAqLworI2RlZmluZSBSMDkwMF9QMV9NT0RDT0RMU1QwICAweGY0YjAKKyNkZWZpbmUgRjA5MDBfUDFfRU5fVE9LRU4zMSAgMHhmNGIwMDA4MAorI2RlZmluZSBGMDkwMF9QMV9TWU5DVEFHX1NFTEVDVCAgMHhmNGIwMDA0MAorI2RlZmluZSBGMDkwMF9QMV9NT0RDT0RSUV9NT0RFICAweGY0YjAwMDMwCisKKy8qUDFfTU9EQ09ETFNUMSovCisjZGVmaW5lIFIwOTAwX1AxX01PRENPRExTVDEgIDB4ZjRiMQorI2RlZmluZSBGMDkwMF9QMV9ESVNfTU9EQ09EMjkgIDB4ZjRiMTAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfRElTXzMyUFNLXzlfMTAgIDB4ZjRiMTAwMGYKKworLypQMV9NT0RDT0RMU1QyKi8KKyNkZWZpbmUgUjA5MDBfUDFfTU9EQ09ETFNUMiAgMHhmNGIyCisjZGVmaW5lIEYwOTAwX1AxX0RJU18zMlBTS184XzkgIDB4ZjRiMjAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfRElTXzMyUFNLXzVfNiAgMHhmNGIyMDAwZgorCisvKlAxX01PRENPRExTVDMqLworI2RlZmluZSBSMDkwMF9QMV9NT0RDT0RMU1QzICAweGY0YjMKKyNkZWZpbmUgRjA5MDBfUDFfRElTXzMyUFNLXzRfNSAgMHhmNGIzMDBmMAorI2RlZmluZSBGMDkwMF9QMV9ESVNfMzJQU0tfM180ICAweGY0YjMwMDBmCisKKy8qUDFfTU9EQ09ETFNUNCovCisjZGVmaW5lIFIwOTAwX1AxX01PRENPRExTVDQgIDB4ZjRiNAorI2RlZmluZSBGMDkwMF9QMV9ESVNfMTZQU0tfOV8xMCAgMHhmNGI0MDBmMAorI2RlZmluZSBGMDkwMF9QMV9ESVNfMTZQU0tfOF85ICAweGY0YjQwMDBmCisKKy8qUDFfTU9EQ09ETFNUNSovCisjZGVmaW5lIFIwOTAwX1AxX01PRENPRExTVDUgIDB4ZjRiNQorI2RlZmluZSBGMDkwMF9QMV9ESVNfMTZQU0tfNV82ICAweGY0YjUwMGYwCisjZGVmaW5lIEYwOTAwX1AxX0RJU18xNlBTS180XzUgIDB4ZjRiNTAwMGYKKworLypQMV9NT0RDT0RMU1Q2Ki8KKyNkZWZpbmUgUjA5MDBfUDFfTU9EQ09ETFNUNiAgMHhmNGI2CisjZGVmaW5lIEYwOTAwX1AxX0RJU18xNlBTS18zXzQgIDB4ZjRiNjAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfRElTXzE2UFNLXzJfMyAgMHhmNGI2MDAwZgorCisvKlAxX01PRENPRExTVDcqLworI2RlZmluZSBSMDkwMF9QMV9NT0RDT0RMU1Q3ICAweGY0YjcKKyNkZWZpbmUgRjA5MDBfUDFfRElTXzhQXzlfMTAgIDB4ZjRiNzAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfRElTXzhQXzhfOSAgMHhmNGI3MDAwZgorCisvKlAxX01PRENPRExTVDgqLworI2RlZmluZSBSMDkwMF9QMV9NT0RDT0RMU1Q4ICAweGY0YjgKKyNkZWZpbmUgRjA5MDBfUDFfRElTXzhQXzVfNiAgMHhmNGI4MDBmMAorI2RlZmluZSBGMDkwMF9QMV9ESVNfOFBfM180ICAweGY0YjgwMDBmCisKKy8qUDFfTU9EQ09ETFNUOSovCisjZGVmaW5lIFIwOTAwX1AxX01PRENPRExTVDkgIDB4ZjRiOQorI2RlZmluZSBGMDkwMF9QMV9ESVNfOFBfMl8zICAweGY0YjkwMGYwCisjZGVmaW5lIEYwOTAwX1AxX0RJU184UF8zXzUgIDB4ZjRiOTAwMGYKKworLypQMV9NT0RDT0RMU1RBKi8KKyNkZWZpbmUgUjA5MDBfUDFfTU9EQ09ETFNUQSAgMHhmNGJhCisjZGVmaW5lIEYwOTAwX1AxX0RJU19RUF85XzEwICAweGY0YmEwMGYwCisjZGVmaW5lIEYwOTAwX1AxX0RJU19RUF84XzkgIDB4ZjRiYTAwMGYKKworLypQMV9NT0RDT0RMU1RCKi8KKyNkZWZpbmUgUjA5MDBfUDFfTU9EQ09ETFNUQiAgMHhmNGJiCisjZGVmaW5lIEYwOTAwX1AxX0RJU19RUF81XzYgIDB4ZjRiYjAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfRElTX1FQXzRfNSAgMHhmNGJiMDAwZgorCisvKlAxX01PRENPRExTVEMqLworI2RlZmluZSBSMDkwMF9QMV9NT0RDT0RMU1RDICAweGY0YmMKKyNkZWZpbmUgRjA5MDBfUDFfRElTX1FQXzNfNCAgMHhmNGJjMDBmMAorI2RlZmluZSBGMDkwMF9QMV9ESVNfUVBfMl8zICAweGY0YmMwMDBmCisKKy8qUDFfTU9EQ09ETFNURCovCisjZGVmaW5lIFIwOTAwX1AxX01PRENPRExTVEQgIDB4ZjRiZAorI2RlZmluZSBGMDkwMF9QMV9ESVNfUVBfM181ICAweGY0YmQwMGYwCisjZGVmaW5lIEYwOTAwX1AxX0RJU19RUF8xXzIgIDB4ZjRiZDAwMGYKKworLypQMV9NT0RDT0RMU1RFKi8KKyNkZWZpbmUgUjA5MDBfUDFfTU9EQ09ETFNURSAgMHhmNGJlCisjZGVmaW5lIEYwOTAwX1AxX0RJU19RUF8yXzUgIDB4ZjRiZTAwZjAKKyNkZWZpbmUgRjA5MDBfUDFfRElTX1FQXzFfMyAgMHhmNGJlMDAwZgorCisvKlAxX01PRENPRExTVEYqLworI2RlZmluZSBSMDkwMF9QMV9NT0RDT0RMU1RGICAweGY0YmYKKyNkZWZpbmUgRjA5MDBfUDFfRElTX1FQXzFfNCAgMHhmNGJmMDBmMAorI2RlZmluZSBGMDkwMF9QMV9EREVNT0RfU0VUICAweGY0YmYwMDAyCisjZGVmaW5lIEYwOTAwX1AxX0RERU1PRF9NQVNLICAweGY0YmYwMDAxCisKKy8qUDFfRE1EUkVTQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDFfRE1EUkVTQ0ZHICAweGY0YzYKKyNkZWZpbmUgRjA5MDBfUDFfRE1EUkVTX1JFU0VUICAweGY0YzYwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0RNRFJFU19OT0lTRVNRUiAgMHhmNGM2MDAxMAorI2RlZmluZSBGMDkwMF9QMV9ETURSRVNfU1RSQUxMICAweGY0YzYwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0RNRFJFU19ORVdPTkxZICAweGY0YzYwMDA0CisjZGVmaW5lIEYwOTAwX1AxX0RNRFJFU19OT1NUT1JFICAweGY0YzYwMDAyCisjZGVmaW5lIEYwOTAwX1AxX0RNRFJFU19BR0MyTUVNICAweGY0YzYwMDAxCisKKy8qUDFfRE1EUkVTQURSKi8KKyNkZWZpbmUgUjA5MDBfUDFfRE1EUkVTQURSICAweGY0YzcKKyNkZWZpbmUgRjA5MDBfUDFfU1VTUF9QUkVEQ0FOQUwgIDB4ZjRjNzAwODAKKyNkZWZpbmUgRjA5MDBfUDFfRE1EUkVTX1ZBTElEQ0ZSICAweGY0YzcwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0RNRFJFU19NRU1GVUxMICAweGY0YzcwMDMwCisjZGVmaW5lIEYwOTAwX1AxX0RNRFJFU19SRVNOQlIgIDB4ZjRjNzAwMGYKKworLypQMV9ETURSRVNEQVRBNyovCisjZGVmaW5lIFIwOTAwX1AxX0RNRFJFU0RBVEE3ICAweGY0YzgKKyNkZWZpbmUgRjA5MDBfUDFfRE1EUkVTX0RBVEE3ICAweGY0YzgwMGZmCisKKy8qUDFfRE1EUkVTREFUQTYqLworI2RlZmluZSBSMDkwMF9QMV9ETURSRVNEQVRBNiAgMHhmNGM5CisjZGVmaW5lIEYwOTAwX1AxX0RNRFJFU19EQVRBNiAgMHhmNGM5MDBmZgorCisvKlAxX0RNRFJFU0RBVEE1Ki8KKyNkZWZpbmUgUjA5MDBfUDFfRE1EUkVTREFUQTUgIDB4ZjRjYQorI2RlZmluZSBGMDkwMF9QMV9ETURSRVNfREFUQTUgIDB4ZjRjYTAwZmYKKworLypQMV9ETURSRVNEQVRBNCovCisjZGVmaW5lIFIwOTAwX1AxX0RNRFJFU0RBVEE0ICAweGY0Y2IKKyNkZWZpbmUgRjA5MDBfUDFfRE1EUkVTX0RBVEE0ICAweGY0Y2IwMGZmCisKKy8qUDFfRE1EUkVTREFUQTMqLworI2RlZmluZSBSMDkwMF9QMV9ETURSRVNEQVRBMyAgMHhmNGNjCisjZGVmaW5lIEYwOTAwX1AxX0RNRFJFU19EQVRBMyAgMHhmNGNjMDBmZgorCisvKlAxX0RNRFJFU0RBVEEyKi8KKyNkZWZpbmUgUjA5MDBfUDFfRE1EUkVTREFUQTIgIDB4ZjRjZAorI2RlZmluZSBGMDkwMF9QMV9ETURSRVNfREFUQTIgIDB4ZjRjZDAwZmYKKworLypQMV9ETURSRVNEQVRBMSovCisjZGVmaW5lIFIwOTAwX1AxX0RNRFJFU0RBVEExICAweGY0Y2UKKyNkZWZpbmUgRjA5MDBfUDFfRE1EUkVTX0RBVEExICAweGY0Y2UwMGZmCisKKy8qUDFfRE1EUkVTREFUQTAqLworI2RlZmluZSBSMDkwMF9QMV9ETURSRVNEQVRBMCAgMHhmNGNmCisjZGVmaW5lIEYwOTAwX1AxX0RNRFJFU19EQVRBMCAgMHhmNGNmMDBmZgorCisvKlAxX0ZGRUkxKi8KKyNkZWZpbmUgUjA5MDBfUDFfRkZFSTEgIDB4ZjRkMAorI2RlZmluZSBGMDkwMF9QMV9GRkVfQUNDSTEgIDB4ZjRkMDAxZmYKKworLypQMV9GRkVRMSovCisjZGVmaW5lIFIwOTAwX1AxX0ZGRVExICAweGY0ZDEKKyNkZWZpbmUgRjA5MDBfUDFfRkZFX0FDQ1ExICAweGY0ZDEwMWZmCisKKy8qUDFfRkZFSTIqLworI2RlZmluZSBSMDkwMF9QMV9GRkVJMiAgMHhmNGQyCisjZGVmaW5lIEYwOTAwX1AxX0ZGRV9BQ0NJMiAgMHhmNGQyMDFmZgorCisvKlAxX0ZGRVEyKi8KKyNkZWZpbmUgUjA5MDBfUDFfRkZFUTIgIDB4ZjRkMworI2RlZmluZSBGMDkwMF9QMV9GRkVfQUNDUTIgIDB4ZjRkMzAxZmYKKworLypQMV9GRkVJMyovCisjZGVmaW5lIFIwOTAwX1AxX0ZGRUkzICAweGY0ZDQKKyNkZWZpbmUgRjA5MDBfUDFfRkZFX0FDQ0kzICAweGY0ZDQwMWZmCisKKy8qUDFfRkZFUTMqLworI2RlZmluZSBSMDkwMF9QMV9GRkVRMyAgMHhmNGQ1CisjZGVmaW5lIEYwOTAwX1AxX0ZGRV9BQ0NRMyAgMHhmNGQ1MDFmZgorCisvKlAxX0ZGRUk0Ki8KKyNkZWZpbmUgUjA5MDBfUDFfRkZFSTQgIDB4ZjRkNgorI2RlZmluZSBGMDkwMF9QMV9GRkVfQUNDSTQgIDB4ZjRkNjAxZmYKKworLypQMV9GRkVRNCovCisjZGVmaW5lIFIwOTAwX1AxX0ZGRVE0ICAweGY0ZDcKKyNkZWZpbmUgRjA5MDBfUDFfRkZFX0FDQ1E0ICAweGY0ZDcwMWZmCisKKy8qUDFfRkZFQ0ZHKi8KKyNkZWZpbmUgUjA5MDBfUDFfRkZFQ0ZHICAweGY0ZDgKKyNkZWZpbmUgRjA5MDBfUDFfRVFVQUxGRkVfT04gIDB4ZjRkODAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfRVFVQUxfVVNFRFNZTUIgIDB4ZjRkODAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfTVVfRVFVQUxGRkUgIDB4ZjRkODAwMDcKKworLypQMV9UTlJDRkcqLworI2RlZmluZSBSMDkwMF9QMV9UTlJDRkcgIDB4ZjRlMAorI2RlZmluZSBGMDkwMF9QMV9UVU5fQUNLRkFJTCAgMHhmNGUwMDA4MAorI2RlZmluZSBGMDkwMF9QMV9UVU5fVFlQRSAgMHhmNGUwMDA3MAorI2RlZmluZSBGMDkwMF9QMV9UVU5fU0VDU1RPUCAgMHhmNGUwMDAwOAorI2RlZmluZSBGMDkwMF9QMV9UVU5fVkNPU1JDSCAgMHhmNGUwMDAwNAorI2RlZmluZSBGMDkwMF9QMV9UVU5fTUFERFJFU1MgIDB4ZjRlMDAwMDMKKworLypQMV9UTlJDRkcyKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE5SQ0ZHMiAgMHhmNGUxCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9JUVNXQVAgIDB4ZjRlMTAwODAKKyNkZWZpbmUgRjA5MDBfUDFfU1RCNjExMF9TVEVQMk1IWiAgMHhmNGUxMDA0MAorI2RlZmluZSBGMDkwMF9QMV9TVEI2MTIwX0RCTEkyQyAgMHhmNGUxMDAyMAorI2RlZmluZSBGMDkwMF9QMV9ESVNfRkNDSyAgMHhmNGUxMDAxMAorI2RlZmluZSBGMDkwMF9QMV9ESVNfTFBFTiAgMHhmNGUxMDAwOAorI2RlZmluZSBGMDkwMF9QMV9ESVNfQldDQUxDICAweGY0ZTEwMDA0CisjZGVmaW5lIEYwOTAwX1AxX1NIT1JUX1dBSVRTVEFURVMgIDB4ZjRlMTAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfRElTXzJCV0FHQzEgIDB4ZjRlMTAwMDEKKworLypQMV9UTlJYVEFMKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE5SWFRBTCAgMHhmNGU0CisjZGVmaW5lIEYwOTAwX1AxX1RVTl9NQ0xLREVDSU1BTCAgMHhmNGU0MDBlMAorI2RlZmluZSBGMDkwMF9QMV9UVU5fWFRBTEZSRVEgIDB4ZjRlNDAwMWYKKworLypQMV9UTlJTVEVQUyovCisjZGVmaW5lIFIwOTAwX1AxX1ROUlNURVBTICAweGY0ZTcKKyNkZWZpbmUgRjA5MDBfUDFfVFVORVJfQlcxUDYgIDB4ZjRlNzAwODAKKyNkZWZpbmUgRjA5MDBfUDFfQldJTkNfT0ZGU0VUICAweGY0ZTcwMDcwCisjZGVmaW5lIEYwOTAwX1AxX1NPRlRTVEVQX1JORyAgMHhmNGU3MDAwOAorI2RlZmluZSBGMDkwMF9QMV9UVU5fQldPRkZTRVQgIDB4ZjRlNzAxMDcKKworLypQMV9UTlJHQUlOKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE5SR0FJTiAgMHhmNGU4CisjZGVmaW5lIEYwOTAwX1AxX1RVTl9LRElWRU4gIDB4ZjRlODAwYzAKKyNkZWZpbmUgRjA5MDBfUDFfU1RCNlgwMF9PQ0sgIDB4ZjRlODAwMzAKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX0dBSU4gIDB4ZjRlODAwMGYKKworLypQMV9UTlJSRjEqLworI2RlZmluZSBSMDkwMF9QMV9UTlJSRjEgIDB4ZjRlOQorI2RlZmluZSBGMDkwMF9QMV9UVU5fUkZGUkVRMiAgMHhmNGU5MDBmZgorCisvKlAxX1ROUlJGMCovCisjZGVmaW5lIFIwOTAwX1AxX1ROUlJGMCAgMHhmNGVhCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9SRkZSRVExICAweGY0ZWEwMGZmCisKKy8qUDFfVE5SQlcqLworI2RlZmluZSBSMDkwMF9QMV9UTlJCVyAgMHhmNGViCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9SRkZSRVEwICAweGY0ZWIwMGMwCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9CVyAgMHhmNGViMDAzZgorCisvKlAxX1ROUkFESiovCisjZGVmaW5lIFIwOTAwX1AxX1ROUkFESiAgMHhmNGVjCisjZGVmaW5lIEYwOTAwX1AxX1NUQjYxWDBfUkNMSyAgMHhmNGVjMDA4MAorI2RlZmluZSBGMDkwMF9QMV9TVEI2MVgwX0NBTFRJTUUgIDB4ZjRlYzAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfU1RCNlgwMF9ETEIgIDB4ZjRlYzAwMzgKKyNkZWZpbmUgRjA5MDBfUDFfU1RCNjAwMF9GQ0wgIDB4ZjRlYzAwMDcKKworLypQMV9UTlJDVEwyKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE5SQ1RMMiAgMHhmNGVkCisjZGVmaW5lIEYwOTAwX1AxX1NUQjYxWDBfTENQMV9SQ0NLT0ZGICAweGY0ZWQwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1NUQjYxWDBfTENQMCAgMHhmNGVkMDA0MAorI2RlZmluZSBGMDkwMF9QMV9TVEI2MVgwX1hUT1VUX1JGT1VUUyAgMHhmNGVkMDAyMAorI2RlZmluZSBGMDkwMF9QMV9TVEI2MVgwX1hUT05fTUNLRFYgIDB4ZjRlZDAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfU1RCNjFYMF9DQUxPRkZfRENPRkYgIDB4ZjRlZDAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfU1RCNjExMF9MUFQgIDB4ZjRlZDAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfU1RCNjExMF9SWCAgMHhmNGVkMDAwMgorI2RlZmluZSBGMDkwMF9QMV9TVEI2MTEwX1NZTiAgMHhmNGVkMDAwMQorCisvKlAxX1ROUkNGRzMqLworI2RlZmluZSBSMDkwMF9QMV9UTlJDRkczICAweGY0ZWUKKyNkZWZpbmUgRjA5MDBfUDFfU1RCNjEyMF9ESVNDVFJMMSAgMHhmNGVlMDA4MAorI2RlZmluZSBGMDkwMF9QMV9TVEI2MTIwX0lOVk9SREVSICAweGY0ZWUwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1NUQjYxMjBfRU5DVFJMNiAgMHhmNGVlMDAyMAorI2RlZmluZSBGMDkwMF9QMV9UVU5fUExMRlJFUSAgMHhmNGVlMDAxYworI2RlZmluZSBGMDkwMF9QMV9UVU5fSTJDRlJFUV9NT0RFICAweGY0ZWUwMDAzCisKKy8qUDFfVE5STEFVTkNIKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE5STEFVTkNIICAweGY0ZjAKKworLypQMV9UTlJMRCovCisjZGVmaW5lIFIwOTAwX1AxX1ROUkxEICAweGY0ZjAKKyNkZWZpbmUgRjA5MDBfUDFfVFVOTERfVkNPSU5HICAweGY0ZjAwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9SRUcxRkFJTCAgMHhmNGYwMDA0MAorI2RlZmluZSBGMDkwMF9QMV9UVU5fUkVHMkZBSUwgIDB4ZjRmMDAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX1JFRzNGQUlMICAweGY0ZjAwMDEwCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9SRUc0RkFJTCAgMHhmNGYwMDAwOAorI2RlZmluZSBGMDkwMF9QMV9UVU5fUkVHNUZBSUwgIDB4ZjRmMDAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX0JXSU5HICAweGY0ZjAwMDAyCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9MT0NLRUQgIDB4ZjRmMDAwMDEKKworLypQMV9UTlJPQlNMKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE5ST0JTTCAgMHhmNGY2CisjZGVmaW5lIEYwOTAwX1AxX1RVTl9JMkNBQk9SVEVEICAweGY0ZjYwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9MUEVOICAweGY0ZjYwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9GQ0NLICAweGY0ZjYwMDIwCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9JMkNMT0NLRUQgIDB4ZjRmNjAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfVFVOX1BST0dET05FICAweGY0ZjYwMDBjCisjZGVmaW5lIEYwOTAwX1AxX1RVTl9SRlJFU1RFMSAgMHhmNGY2MDAwMworCisvKlAxX1ROUlJFU1RFKi8KKyNkZWZpbmUgUjA5MDBfUDFfVE5SUkVTVEUgIDB4ZjRmNworI2RlZmluZSBGMDkwMF9QMV9UVU5fUkZSRVNURTAgIDB4ZjRmNzAwZmYKKworLypQMV9TTUFQQ09FRjcqLworI2RlZmluZSBSMDkwMF9QMV9TTUFQQ09FRjcgIDB4ZjUwMAorI2RlZmluZSBGMDkwMF9QMV9ESVNfUVNDQUxFICAweGY1MDAwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1NNQVBDT0VGX1FfTExSMTIgIDB4ZjUwMDAxN2YKKworLypQMV9TTUFQQ09FRjYqLworI2RlZmluZSBSMDkwMF9QMV9TTUFQQ09FRjYgIDB4ZjUwMQorI2RlZmluZSBGMDkwMF9QMV9ESVNfTkVXU0NBTEUgIDB4ZjUwMTAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfQURKXzhQU0tMTFIxICAweGY1MDEwMDA0CisjZGVmaW5lIEYwOTAwX1AxX09MRF84UFNLTExSMSAgMHhmNTAxMDAwMgorI2RlZmluZSBGMDkwMF9QMV9ESVNfQUI4UFNLICAweGY1MDEwMDAxCisKKy8qUDFfU01BUENPRUY1Ki8KKyNkZWZpbmUgUjA5MDBfUDFfU01BUENPRUY1ICAweGY1MDIKKyNkZWZpbmUgRjA5MDBfUDFfRElTXzhTQ0FMRSAgMHhmNTAyMDA4MAorI2RlZmluZSBGMDkwMF9QMV9TTUFQQ09FRl84UF9MTFIyMyAgMHhmNTAyMDE3ZgorCisvKlAxX0RNRFBMSFNUQVQqLworI2RlZmluZSBSMDkwMF9QMV9ETURQTEhTVEFUICAweGY1MjAKKyNkZWZpbmUgRjA5MDBfUDFfUExIX1NUQVRJU1RJQyAgMHhmNTIwMDBmZgorCisvKlAxX0xPQ0tUSU1FMyovCisjZGVmaW5lIFIwOTAwX1AxX0xPQ0tUSU1FMyAgMHhmNTIyCisjZGVmaW5lIEYwOTAwX1AxX0RFTU9EX0xPQ0tUSU1FMyAgMHhmNTIyMDBmZgorCisvKlAxX0xPQ0tUSU1FMiovCisjZGVmaW5lIFIwOTAwX1AxX0xPQ0tUSU1FMiAgMHhmNTIzCisjZGVmaW5lIEYwOTAwX1AxX0RFTU9EX0xPQ0tUSU1FMiAgMHhmNTIzMDBmZgorCisvKlAxX0xPQ0tUSU1FMSovCisjZGVmaW5lIFIwOTAwX1AxX0xPQ0tUSU1FMSAgMHhmNTI0CisjZGVmaW5lIEYwOTAwX1AxX0RFTU9EX0xPQ0tUSU1FMSAgMHhmNTI0MDBmZgorCisvKlAxX0xPQ0tUSU1FMCovCisjZGVmaW5lIFIwOTAwX1AxX0xPQ0tUSU1FMCAgMHhmNTI1CisjZGVmaW5lIEYwOTAwX1AxX0RFTU9EX0xPQ0tUSU1FMCAgMHhmNTI1MDBmZgorCisvKlAxX1ZJVFNDQUxFKi8KKyNkZWZpbmUgUjA5MDBfUDFfVklUU0NBTEUgIDB4ZjUzMgorI2RlZmluZSBGMDkwMF9QMV9OVlRIX05PU1JBTkdFICAweGY1MzIwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1ZFUlJPUl9NQVhNT0RFICAweGY1MzIwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0tESVZfTU9ERSAgMHhmNTMyMDAzMAorI2RlZmluZSBGMDkwMF9QMV9OU0xPV1NOX0xPQ0tFRCAgMHhmNTMyMDAwOAorI2RlZmluZSBGMDkwMF9QMV9ERUxPQ0tfUFJGTE9TUyAgMHhmNTMyMDAwNAorI2RlZmluZSBGMDkwMF9QMV9ESVNfUlNGTE9DSyAgMHhmNTMyMDAwMgorCisvKlAxX0ZFQ00qLworI2RlZmluZSBSMDkwMF9QMV9GRUNNICAweGY1MzMKKyNkZWZpbmUgRjA5MDBfUDFfRFNTX0RWQiAgMHhmNTMzMDA4MAorI2RlZmluZSBGMDkwMF9QMV9ERU1PRF9CWVBBU1MgIDB4ZjUzMzAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfQ01QX1NMT1dNT0RFICAweGY1MzMwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0RTU19TUkNIICAweGY1MzMwMDEwCisjZGVmaW5lIEYwOTAwX1AxX0RJRkZfTU9ERVZJVCAgMHhmNTMzMDAwNAorI2RlZmluZSBGMDkwMF9QMV9TWU5DVklUICAweGY1MzMwMDAyCisjZGVmaW5lIEYwOTAwX1AxX0lRSU5WICAweGY1MzMwMDAxCisKKy8qUDFfVlRIMTIqLworI2RlZmluZSBSMDkwMF9QMV9WVEgxMiAgMHhmNTM0CisjZGVmaW5lIEYwOTAwX1AxX1ZUSDEyICAweGY1MzQwMGZmCisKKy8qUDFfVlRIMjMqLworI2RlZmluZSBSMDkwMF9QMV9WVEgyMyAgMHhmNTM1CisjZGVmaW5lIEYwOTAwX1AxX1ZUSDIzICAweGY1MzUwMGZmCisKKy8qUDFfVlRIMzQqLworI2RlZmluZSBSMDkwMF9QMV9WVEgzNCAgMHhmNTM2CisjZGVmaW5lIEYwOTAwX1AxX1ZUSDM0ICAweGY1MzYwMGZmCisKKy8qUDFfVlRINTYqLworI2RlZmluZSBSMDkwMF9QMV9WVEg1NiAgMHhmNTM3CisjZGVmaW5lIEYwOTAwX1AxX1ZUSDU2ICAweGY1MzcwMGZmCisKKy8qUDFfVlRINjcqLworI2RlZmluZSBSMDkwMF9QMV9WVEg2NyAgMHhmNTM4CisjZGVmaW5lIEYwOTAwX1AxX1ZUSDY3ICAweGY1MzgwMGZmCisKKy8qUDFfVlRINzgqLworI2RlZmluZSBSMDkwMF9QMV9WVEg3OCAgMHhmNTM5CisjZGVmaW5lIEYwOTAwX1AxX1ZUSDc4ICAweGY1MzkwMGZmCisKKy8qUDFfVklUQ1VSUFVOKi8KKyNkZWZpbmUgUjA5MDBfUDFfVklUQ1VSUFVOICAweGY1M2EKKyNkZWZpbmUgRjA5MDBfUDFfVklUX01BUFBJTkcgIDB4ZjUzYTAwZTAKKyNkZWZpbmUgRjA5MDBfUDFfVklUX0NVUlBVTiAgMHhmNTNhMDAxZgorCisvKlAxX1ZFUlJPUiovCisjZGVmaW5lIFIwOTAwX1AxX1ZFUlJPUiAgMHhmNTNiCisjZGVmaW5lIEYwOTAwX1AxX1JFR0VSUl9WSVQgIDB4ZjUzYjAwZmYKKworLypQMV9QUlZJVCovCisjZGVmaW5lIFIwOTAwX1AxX1BSVklUICAweGY1M2MKKyNkZWZpbmUgRjA5MDBfUDFfRElTX1ZUSExPQ0sgIDB4ZjUzYzAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfRTdfOFZJVCAgMHhmNTNjMDAyMAorI2RlZmluZSBGMDkwMF9QMV9FNl83VklUICAweGY1M2MwMDEwCisjZGVmaW5lIEYwOTAwX1AxX0U1XzZWSVQgIDB4ZjUzYzAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfRTNfNFZJVCAgMHhmNTNjMDAwNAorI2RlZmluZSBGMDkwMF9QMV9FMl8zVklUICAweGY1M2MwMDAyCisjZGVmaW5lIEYwOTAwX1AxX0UxXzJWSVQgIDB4ZjUzYzAwMDEKKworLypQMV9WQVZTUlZJVCovCisjZGVmaW5lIFIwOTAwX1AxX1ZBVlNSVklUICAweGY1M2QKKyNkZWZpbmUgRjA5MDBfUDFfQU1WSVQgIDB4ZjUzZDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfRlJPWkVOVklUICAweGY1M2QwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1NOVklUICAweGY1M2QwMDMwCisjZGVmaW5lIEYwOTAwX1AxX1RPVlZJVCAgMHhmNTNkMDAwYworI2RlZmluZSBGMDkwMF9QMV9IWVBWSVQgIDB4ZjUzZDAwMDMKKworLypQMV9WU1RBVFVTVklUKi8KKyNkZWZpbmUgUjA5MDBfUDFfVlNUQVRVU1ZJVCAgMHhmNTNlCisjZGVmaW5lIEYwOTAwX1AxX1ZJVEVSQklfT04gIDB4ZjUzZTAwODAKKyNkZWZpbmUgRjA5MDBfUDFfRU5EX0xPT1BWSVQgIDB4ZjUzZTAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfVklURVJCSV9ERVBSRiAgMHhmNTNlMDAyMAorI2RlZmluZSBGMDkwMF9QMV9QUkZWSVQgIDB4ZjUzZTAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfTE9DS0VEVklUICAweGY1M2UwMDA4CisjZGVmaW5lIEYwOTAwX1AxX1ZJVEVSQklfREVMT0NLICAweGY1M2UwMDA0CisjZGVmaW5lIEYwOTAwX1AxX1ZJVF9ERU1PRFNFTCAgMHhmNTNlMDAwMgorI2RlZmluZSBGMDkwMF9QMV9WSVRFUkJJX0NPTVBPVVQgIDB4ZjUzZTAwMDEKKworLypQMV9WVEhJTlVTRSovCisjZGVmaW5lIFIwOTAwX1AxX1ZUSElOVVNFICAweGY1M2YKKyNkZWZpbmUgRjA5MDBfUDFfVklUX0lOVVNFICAweGY1M2YwMGZmCisKKy8qUDFfS0RJVjEyKi8KKyNkZWZpbmUgUjA5MDBfUDFfS0RJVjEyICAweGY1NDAKKyNkZWZpbmUgRjA5MDBfUDFfS0RJVjEyX01BTlVBTCAgMHhmNTQwMDA4MAorI2RlZmluZSBGMDkwMF9QMV9LX0RJVklERVJfMTIgIDB4ZjU0MDAwN2YKKworLypQMV9LRElWMjMqLworI2RlZmluZSBSMDkwMF9QMV9LRElWMjMgIDB4ZjU0MQorI2RlZmluZSBGMDkwMF9QMV9LRElWMjNfTUFOVUFMICAweGY1NDEwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0tfRElWSURFUl8yMyAgMHhmNTQxMDA3ZgorCisvKlAxX0tESVYzNCovCisjZGVmaW5lIFIwOTAwX1AxX0tESVYzNCAgMHhmNTQyCisjZGVmaW5lIEYwOTAwX1AxX0tESVYzNF9NQU5VQUwgIDB4ZjU0MjAwODAKKyNkZWZpbmUgRjA5MDBfUDFfS19ESVZJREVSXzM0ICAweGY1NDIwMDdmCisKKy8qUDFfS0RJVjU2Ki8KKyNkZWZpbmUgUjA5MDBfUDFfS0RJVjU2ICAweGY1NDMKKyNkZWZpbmUgRjA5MDBfUDFfS0RJVjU2X01BTlVBTCAgMHhmNTQzMDA4MAorI2RlZmluZSBGMDkwMF9QMV9LX0RJVklERVJfNTYgIDB4ZjU0MzAwN2YKKworLypQMV9LRElWNjcqLworI2RlZmluZSBSMDkwMF9QMV9LRElWNjcgIDB4ZjU0NAorI2RlZmluZSBGMDkwMF9QMV9LRElWNjdfTUFOVUFMICAweGY1NDQwMDgwCisjZGVmaW5lIEYwOTAwX1AxX0tfRElWSURFUl82NyAgMHhmNTQ0MDA3ZgorCisvKlAxX0tESVY3OCovCisjZGVmaW5lIFIwOTAwX1AxX0tESVY3OCAgMHhmNTQ1CisjZGVmaW5lIEYwOTAwX1AxX0tESVY3OF9NQU5VQUwgIDB4ZjU0NTAwODAKKyNkZWZpbmUgRjA5MDBfUDFfS19ESVZJREVSXzc4ICAweGY1NDUwMDdmCisKKy8qUDFfUERFTENUUkwxKi8KKyNkZWZpbmUgUjA5MDBfUDFfUERFTENUUkwxICAweGY1NTAKKyNkZWZpbmUgRjA5MDBfUDFfSU5WX01JU01BU0sgIDB4ZjU1MDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfRk9SQ0VfQUNDRVBURUQgIDB4ZjU1MDAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfRklMVEVSX0VOICAweGY1NTAwMDIwCisjZGVmaW5lIEYwOTAwX1AxX0ZPUkNFX1BLVERFTElOVVNFICAweGY1NTAwMDEwCisjZGVmaW5lIEYwOTAwX1AxX0hZU1RFTiAgMHhmNTUwMDAwOAorI2RlZmluZSBGMDkwMF9QMV9IWVNUU1dSU1QgIDB4ZjU1MDAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfRU5fTUlTMDAgIDB4ZjU1MDAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfQUxHT1NXUlNUICAweGY1NTAwMDAxCisKKy8qUDFfUERFTENUUkwyKi8KKyNkZWZpbmUgUjA5MDBfUDFfUERFTENUUkwyICAweGY1NTEKKyNkZWZpbmUgRjA5MDBfUDFfRk9SQ0VfQ09OVElOVU9VUyAgMHhmNTUxMDA4MAorI2RlZmluZSBGMDkwMF9QMV9SRVNFVF9VUEtPX0NPVU5UICAweGY1NTEwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1VTRVJfUEtUREVMSU5fTkIgIDB4ZjU1MTAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfRk9SQ0VfTE9DS0VEICAweGY1NTEwMDEwCisjZGVmaW5lIEYwOTAwX1AxX0RBVEFfVU5CQlNDUkFNICAweGY1NTEwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0ZPUkNFX0xPTkdQS1QgIDB4ZjU1MTAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfRlJBTUVfTU9ERSAgMHhmNTUxMDAwMgorCisvKlAxX0hZU1RUSFJFU0gqLworI2RlZmluZSBSMDkwMF9QMV9IWVNUVEhSRVNIICAweGY1NTQKKyNkZWZpbmUgRjA5MDBfUDFfVU5MQ0tfVEhSRVNIICAweGY1NTQwMGYwCisjZGVmaW5lIEYwOTAwX1AxX0RFTElOX0xDS19USFJFU0ggIDB4ZjU1NDAwMGYKKworLypQMV9JU0lFTlRSWSovCisjZGVmaW5lIFIwOTAwX1AxX0lTSUVOVFJZICAweGY1NWUKKyNkZWZpbmUgRjA5MDBfUDFfSVNJX0VOVFJZICAweGY1NWUwMGZmCisKKy8qUDFfSVNJQklURU5BKi8KKyNkZWZpbmUgUjA5MDBfUDFfSVNJQklURU5BICAweGY1NWYKKyNkZWZpbmUgRjA5MDBfUDFfSVNJX0JJVF9FTiAgMHhmNTVmMDBmZgorCisvKlAxX01BVFNUUjEqLworI2RlZmluZSBSMDkwMF9QMV9NQVRTVFIxICAweGY1NjAKKyNkZWZpbmUgRjA5MDBfUDFfTUFUWVBFX0NVUlJFTlQxICAweGY1NjAwMGZmCisKKy8qUDFfTUFUU1RSMCovCisjZGVmaW5lIFIwOTAwX1AxX01BVFNUUjAgIDB4ZjU2MQorI2RlZmluZSBGMDkwMF9QMV9NQVRZUEVfQ1VSUkVOVDAgIDB4ZjU2MTAwZmYKKworLypQMV9VUExTVFIxKi8KKyNkZWZpbmUgUjA5MDBfUDFfVVBMU1RSMSAgMHhmNTYyCisjZGVmaW5lIEYwOTAwX1AxX1VQTF9DVVJSRU5UMSAgMHhmNTYyMDBmZgorCisvKlAxX1VQTFNUUjAqLworI2RlZmluZSBSMDkwMF9QMV9VUExTVFIwICAweGY1NjMKKyNkZWZpbmUgRjA5MDBfUDFfVVBMX0NVUlJFTlQwICAweGY1NjMwMGZmCisKKy8qUDFfREZMU1RSMSovCisjZGVmaW5lIFIwOTAwX1AxX0RGTFNUUjEgIDB4ZjU2NAorI2RlZmluZSBGMDkwMF9QMV9ERkxfQ1VSUkVOVDEgIDB4ZjU2NDAwZmYKKworLypQMV9ERkxTVFIwKi8KKyNkZWZpbmUgUjA5MDBfUDFfREZMU1RSMCAgMHhmNTY1CisjZGVmaW5lIEYwOTAwX1AxX0RGTF9DVVJSRU5UMCAgMHhmNTY1MDBmZgorCisvKlAxX1NZTkNTVFIqLworI2RlZmluZSBSMDkwMF9QMV9TWU5DU1RSICAweGY1NjYKKyNkZWZpbmUgRjA5MDBfUDFfU1lOQ19DVVJSRU5UICAweGY1NjYwMGZmCisKKy8qUDFfU1lOQ0RTVFIxKi8KKyNkZWZpbmUgUjA5MDBfUDFfU1lOQ0RTVFIxICAweGY1NjcKKyNkZWZpbmUgRjA5MDBfUDFfU1lOQ0RfQ1VSUkVOVDEgIDB4ZjU2NzAwZmYKKworLypQMV9TWU5DRFNUUjAqLworI2RlZmluZSBSMDkwMF9QMV9TWU5DRFNUUjAgIDB4ZjU2OAorI2RlZmluZSBGMDkwMF9QMV9TWU5DRF9DVVJSRU5UMCAgMHhmNTY4MDBmZgorCisvKlAxX1BERUxTVEFUVVMxKi8KKyNkZWZpbmUgUjA5MDBfUDFfUERFTFNUQVRVUzEgIDB4ZjU2OQorI2RlZmluZSBGMDkwMF9QMV9QS1RERUxJTl9ERUxPQ0sgIDB4ZjU2OTAwODAKKyNkZWZpbmUgRjA5MDBfUDFfU1lOQ0RVUERGTF9CQURERkwgIDB4ZjU2OTAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfQ09OVElOVU9VU19TVFJFQU0gIDB4ZjU2OTAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfVU5BQ0NFUFRFRF9TVFJFQU0gIDB4ZjU2OTAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfQkNIX0VSUk9SX0ZMQUcgIDB4ZjU2OTAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfQkJIQ1JDS08gIDB4ZjU2OTAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfUEtUREVMSU5fTE9DSyAgMHhmNTY5MDAwMgorI2RlZmluZSBGMDkwMF9QMV9GSVJTVF9MT0NLICAweGY1NjkwMDAxCisKKy8qUDFfUERFTFNUQVRVUzIqLworI2RlZmluZSBSMDkwMF9QMV9QREVMU1RBVFVTMiAgMHhmNTZhCisjZGVmaW5lIEYwOTAwX1AxX1BLVERFTF9ERU1PRFNFTCAgMHhmNTZhMDA4MAorI2RlZmluZSBGMDkwMF9QMV9GUkFNRV9NT0RDT0QgIDB4ZjU2YTAwN2MKKyNkZWZpbmUgRjA5MDBfUDFfRlJBTUVfVFlQRSAgMHhmNTZhMDAwMworCisvKlAxX0JCRkNSQ0tPMSovCisjZGVmaW5lIFIwOTAwX1AxX0JCRkNSQ0tPMSAgMHhmNTZiCisjZGVmaW5lIEYwOTAwX1AxX0JCSENSQ19LT0NOVDEgIDB4ZjU2YjAwZmYKKworLypQMV9CQkZDUkNLTzAqLworI2RlZmluZSBSMDkwMF9QMV9CQkZDUkNLTzAgIDB4ZjU2YworI2RlZmluZSBGMDkwMF9QMV9CQkhDUkNfS09DTlQwICAweGY1NmMwMGZmCisKKy8qUDFfVVBDUkNLTzEqLworI2RlZmluZSBSMDkwMF9QMV9VUENSQ0tPMSAgMHhmNTZkCisjZGVmaW5lIEYwOTAwX1AxX1BLVENSQ19LT0NOVDEgIDB4ZjU2ZDAwZmYKKworLypQMV9VUENSQ0tPMCovCisjZGVmaW5lIFIwOTAwX1AxX1VQQ1JDS08wICAweGY1NmUKKyNkZWZpbmUgRjA5MDBfUDFfUEtUQ1JDX0tPQ05UMCAgMHhmNTZlMDBmZgorCisvKlAxX1RTU1RBVEVNKi8KKyNkZWZpbmUgUjA5MDBfUDFfVFNTVEFURU0gIDB4ZjU3MAorI2RlZmluZSBGMDkwMF9QMV9UU0RJTF9PTiAgMHhmNTcwMDA4MAorI2RlZmluZSBGMDkwMF9QMV9UU1NLSVBSU19PTiAgMHhmNTcwMDA0MAorI2RlZmluZSBGMDkwMF9QMV9UU1JTX09OICAweGY1NzAwMDIwCisjZGVmaW5lIEYwOTAwX1AxX1RTREVTQ1JBTUJfT04gIDB4ZjU3MDAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfVFNGUkFNRV9NT0RFICAweGY1NzAwMDA4CisjZGVmaW5lIEYwOTAwX1AxX1RTX0RJU0FCTEUgIDB4ZjU3MDAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfVFNBQ01fTU9ERSAgMHhmNTcwMDAwMgorI2RlZmluZSBGMDkwMF9QMV9UU09VVF9OT1NZTkMgIDB4ZjU3MDAwMDEKKworLypQMV9UU0NGR0gqLworI2RlZmluZSBSMDkwMF9QMV9UU0NGR0ggIDB4ZjU3MgorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fRFZCQ0kgIDB4ZjU3MjAwODAKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX1NFUklBTCAgMHhmNTcyMDA0MAorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fVEVJVVBEQVRFICAweGY1NzIwMDIwCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19EVVRZNTAgIDB4ZjU3MjAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX0hTR05MT1VUICAweGY1NzIwMDA4CisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19FUlJNT0RFICAweGY1NzIwMDA2CisjZGVmaW5lIEYwOTAwX1AxX1JTVF9IV0FSRSAgMHhmNTcyMDAwMQorCisvKlAxX1RTQ0ZHTSovCisjZGVmaW5lIFIwOTAwX1AxX1RTQ0ZHTSAgMHhmNTczCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19NQU5TUEVFRCAgMHhmNTczMDBjMAorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fUEVSTURBVEEgIDB4ZjU3MzAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX05PTkVXU0dOTCAgMHhmNTczMDAxMAorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fQklUU1BFRUQgIDB4ZjU3MzAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfTlBEX1NQRUNEVkJTMiAgMHhmNTczMDAwNAorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fU1RPUENLRElTICAweGY1NzMwMDAyCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19JTlZEQVRBICAweGY1NzMwMDAxCisKKy8qUDFfVFNDRkdMKi8KKyNkZWZpbmUgUjA5MDBfUDFfVFNDRkdMICAweGY1NzQKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX0JDTEtERUwxQ0sgIDB4ZjU3NDAwYzAKKyNkZWZpbmUgRjA5MDBfUDFfQkNIRVJST1JfTU9ERSAgMHhmNTc0MDAzMAorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fTlNHTkwyREFUQSAgMHhmNTc0MDAwOAorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fRU1CSU5EVkIgIDB4ZjU3NDAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX0RQVU5BQ1QgIDB4ZjU3NDAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX05QRE9GRiAgMHhmNTc0MDAwMQorCisvKlAxX1RTSU5TREVMSCovCisjZGVmaW5lIFIwOTAwX1AxX1RTSU5TREVMSCAgMHhmNTc2CisjZGVmaW5lIEYwOTAwX1AxX1RTREVMX1NZTkNCWVRFICAweGY1NzYwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1RTREVMX1hYSEVBREVSICAweGY1NzYwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1RTREVMX0JCSEVBREVSICAweGY1NzYwMDIwCisjZGVmaW5lIEYwOTAwX1AxX1RTREVMX0RBVEFGSUVMRCAgMHhmNTc2MDAxMAorI2RlZmluZSBGMDkwMF9QMV9UU0lOU0RFTF9JU0NSICAweGY1NzYwMDA4CisjZGVmaW5lIEYwOTAwX1AxX1RTSU5TREVMX05QRCAgMHhmNTc2MDAwNAorI2RlZmluZSBGMDkwMF9QMV9UU0lOU0RFTF9SU1BBUklUWSAgMHhmNTc2MDAwMgorI2RlZmluZSBGMDkwMF9QMV9UU0lOU0RFTF9DUkM4ICAweGY1NzYwMDAxCisKKy8qUDFfVFNTUEVFRCovCisjZGVmaW5lIFIwOTAwX1AxX1RTU1BFRUQgIDB4ZjU4MAorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fT1VUU1BFRUQgIDB4ZjU4MDAwZmYKKworLypQMV9UU1NUQVRVUyovCisjZGVmaW5lIFIwOTAwX1AxX1RTU1RBVFVTICAweGY1ODEKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX0xJTkVPSyAgMHhmNTgxMDA4MAorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fRVJST1IgIDB4ZjU4MTAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX0RBVEE3ICAweGY1ODEwMDIwCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19OT1NZTkMgIDB4ZjU4MTAwMTAKKyNkZWZpbmUgRjA5MDBfUDFfSVNDUl9JTklUSUFMSVpFRCAgMHhmNTgxMDAwOAorI2RlZmluZSBGMDkwMF9QMV9JU0NSX1VQREFURUQgIDB4ZjU4MTAwMDQKKyNkZWZpbmUgRjA5MDBfUDFfU09GRklGT19VTlJFR1VMICAweGY1ODEwMDAyCisjZGVmaW5lIEYwOTAwX1AxX0RJTF9SRUFEWSAgMHhmNTgxMDAwMQorCisvKlAxX1RTU1RBVFVTMiovCisjZGVmaW5lIFIwOTAwX1AxX1RTU1RBVFVTMiAgMHhmNTgyCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19ERU1PRFNFTCAgMHhmNTgyMDA4MAorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9TUEVFRF9TVE9SRSAgMHhmNTgyMDA0MAorI2RlZmluZSBGMDkwMF9QMV9ESUxYWF9SRVNFVCAgMHhmNTgyMDAyMAorI2RlZmluZSBGMDkwMF9QMV9UU1NFUklBTF9JTVBPUyAgMHhmNTgyMDAxMAorI2RlZmluZSBGMDkwMF9QMV9UU0ZJRk9fTElORU5PSyAgMHhmNTgyMDAwOAorI2RlZmluZSBGMDkwMF9QMV9CSVRTUEVFRF9FVkVOVCAgMHhmNTgyMDAwNAorI2RlZmluZSBGMDkwMF9QMV9TQ1JBTUJERVRFQ1QgIDB4ZjU4MjAwMDIKKyNkZWZpbmUgRjA5MDBfUDFfVUxEVFY2N19GQUxTRUxPQ0sgIDB4ZjU4MjAwMDEKKworLypQMV9UU0JJVFJBVEUxKi8KKyNkZWZpbmUgUjA5MDBfUDFfVFNCSVRSQVRFMSAgMHhmNTgzCisjZGVmaW5lIEYwOTAwX1AxX1RTRklGT19CSVRSQVRFMSAgMHhmNTgzMDBmZgorCisvKlAxX1RTQklUUkFURTAqLworI2RlZmluZSBSMDkwMF9QMV9UU0JJVFJBVEUwICAweGY1ODQKKyNkZWZpbmUgRjA5MDBfUDFfVFNGSUZPX0JJVFJBVEUwICAweGY1ODQwMGZmCisKKy8qUDFfRVJSQ1RSTDEqLworI2RlZmluZSBSMDkwMF9QMV9FUlJDVFJMMSAgMHhmNTk4CisjZGVmaW5lIEYwOTAwX1AxX0VSUl9TT1VSQ0UxICAweGY1OTgwMGYwCisjZGVmaW5lIEYwOTAwX1AxX05VTV9FVkVOVDEgIDB4ZjU5ODAwMDcKKworLypQMV9FUlJDTlQxMiovCisjZGVmaW5lIFIwOTAwX1AxX0VSUkNOVDEyICAweGY1OTkKKyNkZWZpbmUgRjA5MDBfUDFfRVJSQ05UMV9PTERWQUxVRSAgMHhmNTk5MDA4MAorI2RlZmluZSBGMDkwMF9QMV9FUlJfQ05UMTIgIDB4ZjU5OTAwN2YKKworLypQMV9FUlJDTlQxMSovCisjZGVmaW5lIFIwOTAwX1AxX0VSUkNOVDExICAweGY1OWEKKyNkZWZpbmUgRjA5MDBfUDFfRVJSX0NOVDExICAweGY1OWEwMGZmCisKKy8qUDFfRVJSQ05UMTAqLworI2RlZmluZSBSMDkwMF9QMV9FUlJDTlQxMCAgMHhmNTliCisjZGVmaW5lIEYwOTAwX1AxX0VSUl9DTlQxMCAgMHhmNTliMDBmZgorCisvKlAxX0VSUkNUUkwyKi8KKyNkZWZpbmUgUjA5MDBfUDFfRVJSQ1RSTDIgIDB4ZjU5YworI2RlZmluZSBGMDkwMF9QMV9FUlJfU09VUkNFMiAgMHhmNTljMDBmMAorI2RlZmluZSBGMDkwMF9QMV9OVU1fRVZFTlQyICAweGY1OWMwMDA3CisKKy8qUDFfRVJSQ05UMjIqLworI2RlZmluZSBSMDkwMF9QMV9FUlJDTlQyMiAgMHhmNTlkCisjZGVmaW5lIEYwOTAwX1AxX0VSUkNOVDJfT0xEVkFMVUUgIDB4ZjU5ZDAwODAKKyNkZWZpbmUgRjA5MDBfUDFfRVJSX0NOVDIyICAweGY1OWQwMDdmCisKKy8qUDFfRVJSQ05UMjEqLworI2RlZmluZSBSMDkwMF9QMV9FUlJDTlQyMSAgMHhmNTllCisjZGVmaW5lIEYwOTAwX1AxX0VSUl9DTlQyMSAgMHhmNTllMDBmZgorCisvKlAxX0VSUkNOVDIwKi8KKyNkZWZpbmUgUjA5MDBfUDFfRVJSQ05UMjAgIDB4ZjU5ZgorI2RlZmluZSBGMDkwMF9QMV9FUlJfQ05UMjAgIDB4ZjU5ZjAwZmYKKworLypQMV9GRUNTUFkqLworI2RlZmluZSBSMDkwMF9QMV9GRUNTUFkgIDB4ZjVhMAorI2RlZmluZSBGMDkwMF9QMV9TUFlfRU5BQkxFICAweGY1YTAwMDgwCisjZGVmaW5lIEYwOTAwX1AxX05PX1NZTkNCWVRFICAweGY1YTAwMDQwCisjZGVmaW5lIEYwOTAwX1AxX1NFUklBTF9NT0RFICAweGY1YTAwMDIwCisjZGVmaW5lIEYwOTAwX1AxX1VOVVNVQUxfUEFDS0VUICAweGY1YTAwMDEwCisjZGVmaW5lIEYwOTAwX1AxX0JFUl9QQUNLTU9ERSAgMHhmNWEwMDAwOAorI2RlZmluZSBGMDkwMF9QMV9CRVJNRVRFUl9MTU9ERSAgMHhmNWEwMDAwMgorI2RlZmluZSBGMDkwMF9QMV9CRVJNRVRFUl9SRVNFVCAgMHhmNWEwMDAwMQorCisvKlAxX0ZTUFlDRkcqLworI2RlZmluZSBSMDkwMF9QMV9GU1BZQ0ZHICAweGY1YTEKKyNkZWZpbmUgRjA5MDBfUDFfRkVDU1BZX0lOUFVUICAweGY1YTEwMGMwCisjZGVmaW5lIEYwOTAwX1AxX1JTVF9PTl9FUlJPUiAgMHhmNWExMDAyMAorI2RlZmluZSBGMDkwMF9QMV9PTkVfU0hPVCAgMHhmNWExMDAxMAorI2RlZmluZSBGMDkwMF9QMV9JMkNfTU9ERSAgMHhmNWExMDAwYworI2RlZmluZSBGMDkwMF9QMV9TUFlfSFlTVEVSRVNJUyAgMHhmNWExMDAwMworCisvKlAxX0ZTUFlEQVRBKi8KKyNkZWZpbmUgUjA5MDBfUDFfRlNQWURBVEEgIDB4ZjVhMgorI2RlZmluZSBGMDkwMF9QMV9TUFlfU1RVRkZJTkcgIDB4ZjVhMjAwODAKKyNkZWZpbmUgRjA5MDBfUDFfTk9FUlJPUl9QS1RKSVRURVIgIDB4ZjVhMjAwNDAKKyNkZWZpbmUgRjA5MDBfUDFfU1BZX0NOVUxMUEtUICAweGY1YTIwMDIwCisjZGVmaW5lIEYwOTAwX1AxX1NQWV9PVVREQVRBX01PREUgIDB4ZjVhMjAwMWYKKworLypQMV9GU1BZT1VUKi8KKyNkZWZpbmUgUjA5MDBfUDFfRlNQWU9VVCAgMHhmNWEzCisjZGVmaW5lIEYwOTAwX1AxX0ZTUFlfRElSRUNUICAweGY1YTMwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1NQWV9PVVREQVRBX0JVUyAgMHhmNWEzMDAzOAorI2RlZmluZSBGMDkwMF9QMV9TVFVGRl9NT0RFICAweGY1YTMwMDA3CisKKy8qUDFfRlNUQVRVUyovCisjZGVmaW5lIFIwOTAwX1AxX0ZTVEFUVVMgIDB4ZjVhNAorI2RlZmluZSBGMDkwMF9QMV9TUFlfRU5EU0lNICAweGY1YTQwMDgwCisjZGVmaW5lIEYwOTAwX1AxX1ZBTElEX1NJTSAgMHhmNWE0MDA0MAorI2RlZmluZSBGMDkwMF9QMV9GT1VORF9TSUdOQUwgIDB4ZjVhNDAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfRFNTX1NZTkNCWVRFICAweGY1YTQwMDEwCisjZGVmaW5lIEYwOTAwX1AxX1JFU1VMVF9TVEFURSAgMHhmNWE0MDAwZgorCisvKlAxX0ZCRVJDUFQ0Ki8KKyNkZWZpbmUgUjA5MDBfUDFfRkJFUkNQVDQgIDB4ZjVhOAorI2RlZmluZSBGMDkwMF9QMV9GQkVSTUVURVJfQ1BUNCAgMHhmNWE4MDBmZgorCisvKlAxX0ZCRVJDUFQzKi8KKyNkZWZpbmUgUjA5MDBfUDFfRkJFUkNQVDMgIDB4ZjVhOQorI2RlZmluZSBGMDkwMF9QMV9GQkVSTUVURVJfQ1BUMyAgMHhmNWE5MDBmZgorCisvKlAxX0ZCRVJDUFQyKi8KKyNkZWZpbmUgUjA5MDBfUDFfRkJFUkNQVDIgIDB4ZjVhYQorI2RlZmluZSBGMDkwMF9QMV9GQkVSTUVURVJfQ1BUMiAgMHhmNWFhMDBmZgorCisvKlAxX0ZCRVJDUFQxKi8KKyNkZWZpbmUgUjA5MDBfUDFfRkJFUkNQVDEgIDB4ZjVhYgorI2RlZmluZSBGMDkwMF9QMV9GQkVSTUVURVJfQ1BUMSAgMHhmNWFiMDBmZgorCisvKlAxX0ZCRVJDUFQwKi8KKyNkZWZpbmUgUjA5MDBfUDFfRkJFUkNQVDAgIDB4ZjVhYworI2RlZmluZSBGMDkwMF9QMV9GQkVSTUVURVJfQ1BUMCAgMHhmNWFjMDBmZgorCisvKlAxX0ZCRVJFUlIyKi8KKyNkZWZpbmUgUjA5MDBfUDFfRkJFUkVSUjIgIDB4ZjVhZAorI2RlZmluZSBGMDkwMF9QMV9GQkVSTUVURVJfRVJSMiAgMHhmNWFkMDBmZgorCisvKlAxX0ZCRVJFUlIxKi8KKyNkZWZpbmUgUjA5MDBfUDFfRkJFUkVSUjEgIDB4ZjVhZQorI2RlZmluZSBGMDkwMF9QMV9GQkVSTUVURVJfRVJSMSAgMHhmNWFlMDBmZgorCisvKlAxX0ZCRVJFUlIwKi8KKyNkZWZpbmUgUjA5MDBfUDFfRkJFUkVSUjAgIDB4ZjVhZgorI2RlZmluZSBGMDkwMF9QMV9GQkVSTUVURVJfRVJSMCAgMHhmNWFmMDBmZgorCisvKlAxX0ZTUFlCRVIqLworI2RlZmluZSBSMDkwMF9QMV9GU1BZQkVSICAweGY1YjIKKyNkZWZpbmUgRjA5MDBfUDFfRlNQWU9CU19YT1JSRUFEICAweGY1YjIwMDQwCisjZGVmaW5lIEYwOTAwX1AxX0ZTUFlCRVJfT0JTTU9ERSAgMHhmNWIyMDAyMAorI2RlZmluZSBGMDkwMF9QMV9GU1BZQkVSX1NZTkNCWVRFICAweGY1YjIwMDEwCisjZGVmaW5lIEYwOTAwX1AxX0ZTUFlCRVJfVU5TWU5DICAweGY1YjIwMDA4CisjZGVmaW5lIEYwOTAwX1AxX0ZTUFlCRVJfQ1RJTUUgIDB4ZjViMjAwMDcKKworLypSQ0NGR0gqLworI2RlZmluZSBSMDkwMF9SQ0NGR0ggIDB4ZjYwMAorI2RlZmluZSBGMDkwMF9UU1JDRklGT19EVkJDSSAgMHhmNjAwMDA4MAorI2RlZmluZSBGMDkwMF9UU1JDRklGT19TRVJJQUwgIDB4ZjYwMDAwNDAKKyNkZWZpbmUgRjA5MDBfVFNSQ0ZJRk9fRElTQUJMRSAgMHhmNjAwMDAyMAorI2RlZmluZSBGMDkwMF9UU0ZJRk9fMlRPUkMgIDB4ZjYwMDAwMTAKKyNkZWZpbmUgRjA5MDBfVFNSQ0ZJRk9fSFNHTkxPVVQgIDB4ZjYwMDAwMDgKKyNkZWZpbmUgRjA5MDBfVFNSQ0ZJRk9fRVJSTU9ERSAgMHhmNjAwMDAwNgorCisvKlRTR0VORVJBTCovCisjZGVmaW5lIFIwOTAwX1RTR0VORVJBTCAgMHhmNjMwCisjZGVmaW5lIEYwOTAwX1RTRklGT19CQ0xLMUFMTCAgMHhmNjMwMDAyMAorI2RlZmluZSBGMDkwMF9NVVhTVFJFQU1fT1VUTU9ERSAgMHhmNjMwMDAwOAorI2RlZmluZSBGMDkwMF9UU0ZJRk9fUEVSTVBBUkFMICAweGY2MzAwMDA2CisjZGVmaW5lIEYwOTAwX1JTVF9SRUVEU09MTyAgMHhmNjMwMDAwMQorCisvKlRTR0VORVJBTDFYKi8KKyNkZWZpbmUgUjA5MDBfVFNHRU5FUkFMMVggIDB4ZjY3MAorI2RlZmluZSBGMDkwMF9UU0ZJRk8xWF9CQ0xLMUFMTCAgMHhmNjcwMDAyMAorI2RlZmluZSBGMDkwMF9NVVhTVFJFQU0xWF9PVVRNT0RFICAweGY2NzAwMDA4CisjZGVmaW5lIEYwOTAwX1RTRklGTzFYX1BFUk1QQVJBTCAgMHhmNjcwMDAwNgorI2RlZmluZSBGMDkwMF9SU1QxWF9SRUVEU09MTyAgMHhmNjcwMDAwMQorCisvKk5CSVRFUl9ORjQqLworI2RlZmluZSBSMDkwMF9OQklURVJfTkY0ICAweGZhMDMKKyNkZWZpbmUgRjA5MDBfTkJJVEVSX05GX1FQXzFfMiAgMHhmYTAzMDBmZgorCisvKk5CSVRFUl9ORjUqLworI2RlZmluZSBSMDkwMF9OQklURVJfTkY1ICAweGZhMDQKKyNkZWZpbmUgRjA5MDBfTkJJVEVSX05GX1FQXzNfNSAgMHhmYTA0MDBmZgorCisvKk5CSVRFUl9ORjYqLworI2RlZmluZSBSMDkwMF9OQklURVJfTkY2ICAweGZhMDUKKyNkZWZpbmUgRjA5MDBfTkJJVEVSX05GX1FQXzJfMyAgMHhmYTA1MDBmZgorCisvKk5CSVRFUl9ORjcqLworI2RlZmluZSBSMDkwMF9OQklURVJfTkY3ICAweGZhMDYKKyNkZWZpbmUgRjA5MDBfTkJJVEVSX05GX1FQXzNfNCAgMHhmYTA2MDBmZgorCisvKk5CSVRFUl9ORjgqLworI2RlZmluZSBSMDkwMF9OQklURVJfTkY4ICAweGZhMDcKKyNkZWZpbmUgRjA5MDBfTkJJVEVSX05GX1FQXzRfNSAgMHhmYTA3MDBmZgorCisvKk5CSVRFUl9ORjkqLworI2RlZmluZSBSMDkwMF9OQklURVJfTkY5ICAweGZhMDgKKyNkZWZpbmUgRjA5MDBfTkJJVEVSX05GX1FQXzVfNiAgMHhmYTA4MDBmZgorCisvKk5CSVRFUl9ORjEwKi8KKyNkZWZpbmUgUjA5MDBfTkJJVEVSX05GMTAgIDB4ZmEwOQorI2RlZmluZSBGMDkwMF9OQklURVJfTkZfUVBfOF85ICAweGZhMDkwMGZmCisKKy8qTkJJVEVSX05GMTEqLworI2RlZmluZSBSMDkwMF9OQklURVJfTkYxMSAgMHhmYTBhCisjZGVmaW5lIEYwOTAwX05CSVRFUl9ORl9RUF85XzEwICAweGZhMGEwMGZmCisKKy8qTkJJVEVSX05GMTIqLworI2RlZmluZSBSMDkwMF9OQklURVJfTkYxMiAgMHhmYTBiCisjZGVmaW5lIEYwOTAwX05CSVRFUl9ORl84UF8zXzUgIDB4ZmEwYjAwZmYKKworLypOQklURVJfTkYxMyovCisjZGVmaW5lIFIwOTAwX05CSVRFUl9ORjEzICAweGZhMGMKKyNkZWZpbmUgRjA5MDBfTkJJVEVSX05GXzhQXzJfMyAgMHhmYTBjMDBmZgorCisvKk5CSVRFUl9ORjE0Ki8KKyNkZWZpbmUgUjA5MDBfTkJJVEVSX05GMTQgIDB4ZmEwZAorI2RlZmluZSBGMDkwMF9OQklURVJfTkZfOFBfM180ICAweGZhMGQwMGZmCisKKy8qTkJJVEVSX05GMTUqLworI2RlZmluZSBSMDkwMF9OQklURVJfTkYxNSAgMHhmYTBlCisjZGVmaW5lIEYwOTAwX05CSVRFUl9ORl84UF81XzYgIDB4ZmEwZTAwZmYKKworLypOQklURVJfTkYxNiovCisjZGVmaW5lIFIwOTAwX05CSVRFUl9ORjE2ICAweGZhMGYKKyNkZWZpbmUgRjA5MDBfTkJJVEVSX05GXzhQXzhfOSAgMHhmYTBmMDBmZgorCisvKk5CSVRFUl9ORjE3Ki8KKyNkZWZpbmUgUjA5MDBfTkJJVEVSX05GMTcgIDB4ZmExMAorI2RlZmluZSBGMDkwMF9OQklURVJfTkZfOFBfOV8xMCAgMHhmYTEwMDBmZgorCisvKk5CSVRFUk5PRVJSKi8KKyNkZWZpbmUgUjA5MDBfTkJJVEVSTk9FUlIgIDB4ZmEzZgorI2RlZmluZSBGMDkwMF9OQklURVJfU1RPUF9DUklUICAweGZhM2YwMDBmCisKKy8qR0FJTkxMUl9ORjQqLworI2RlZmluZSBSMDkwMF9HQUlOTExSX05GNCAgMHhmYTQzCisjZGVmaW5lIEYwOTAwX0dBSU5MTFJfTkZfUVBfMV8yICAweGZhNDMwMDdmCisKKy8qR0FJTkxMUl9ORjUqLworI2RlZmluZSBSMDkwMF9HQUlOTExSX05GNSAgMHhmYTQ0CisjZGVmaW5lIEYwOTAwX0dBSU5MTFJfTkZfUVBfM181ICAweGZhNDQwMDdmCisKKy8qR0FJTkxMUl9ORjYqLworI2RlZmluZSBSMDkwMF9HQUlOTExSX05GNiAgMHhmYTQ1CisjZGVmaW5lIEYwOTAwX0dBSU5MTFJfTkZfUVBfMl8zICAweGZhNDUwMDdmCisKKy8qR0FJTkxMUl9ORjcqLworI2RlZmluZSBSMDkwMF9HQUlOTExSX05GNyAgMHhmYTQ2CisjZGVmaW5lIEYwOTAwX0dBSU5MTFJfTkZfUVBfM180ICAweGZhNDYwMDdmCisKKy8qR0FJTkxMUl9ORjgqLworI2RlZmluZSBSMDkwMF9HQUlOTExSX05GOCAgMHhmYTQ3CisjZGVmaW5lIEYwOTAwX0dBSU5MTFJfTkZfUVBfNF81ICAweGZhNDcwMDdmCisKKy8qR0FJTkxMUl9ORjkqLworI2RlZmluZSBSMDkwMF9HQUlOTExSX05GOSAgMHhmYTQ4CisjZGVmaW5lIEYwOTAwX0dBSU5MTFJfTkZfUVBfNV82ICAweGZhNDgwMDdmCisKKy8qR0FJTkxMUl9ORjEwKi8KKyNkZWZpbmUgUjA5MDBfR0FJTkxMUl9ORjEwICAweGZhNDkKKyNkZWZpbmUgRjA5MDBfR0FJTkxMUl9ORl9RUF84XzkgIDB4ZmE0OTAwN2YKKworLypHQUlOTExSX05GMTEqLworI2RlZmluZSBSMDkwMF9HQUlOTExSX05GMTEgIDB4ZmE0YQorI2RlZmluZSBGMDkwMF9HQUlOTExSX05GX1FQXzlfMTAgIDB4ZmE0YTAwN2YKKworLypHQUlOTExSX05GMTIqLworI2RlZmluZSBSMDkwMF9HQUlOTExSX05GMTIgIDB4ZmE0YgorI2RlZmluZSBGMDkwMF9HQUlOTExSX05GXzhQXzNfNSAgMHhmYTRiMDA3ZgorCisvKkdBSU5MTFJfTkYxMyovCisjZGVmaW5lIFIwOTAwX0dBSU5MTFJfTkYxMyAgMHhmYTRjCisjZGVmaW5lIEYwOTAwX0dBSU5MTFJfTkZfOFBfMl8zICAweGZhNGMwMDdmCisKKy8qR0FJTkxMUl9ORjE0Ki8KKyNkZWZpbmUgUjA5MDBfR0FJTkxMUl9ORjE0ICAweGZhNGQKKyNkZWZpbmUgRjA5MDBfR0FJTkxMUl9ORl84UF8zXzQgIDB4ZmE0ZDAwN2YKKworLypHQUlOTExSX05GMTUqLworI2RlZmluZSBSMDkwMF9HQUlOTExSX05GMTUgIDB4ZmE0ZQorI2RlZmluZSBGMDkwMF9HQUlOTExSX05GXzhQXzVfNiAgMHhmYTRlMDA3ZgorCisvKkdBSU5MTFJfTkYxNiovCisjZGVmaW5lIFIwOTAwX0dBSU5MTFJfTkYxNiAgMHhmYTRmCisjZGVmaW5lIEYwOTAwX0dBSU5MTFJfTkZfOFBfOF85ICAweGZhNGYwMDdmCisKKy8qR0FJTkxMUl9ORjE3Ki8KKyNkZWZpbmUgUjA5MDBfR0FJTkxMUl9ORjE3ICAweGZhNTAKKyNkZWZpbmUgRjA5MDBfR0FJTkxMUl9ORl84UF85XzEwICAweGZhNTAwMDdmCisKKy8qQ0ZHRVhUKi8KKyNkZWZpbmUgUjA5MDBfQ0ZHRVhUICAweGZhODAKKyNkZWZpbmUgRjA5MDBfU1RBR01PREUgIDB4ZmE4MDAwODAKKyNkZWZpbmUgRjA5MDBfQllQQkNIICAweGZhODAwMDQwCisjZGVmaW5lIEYwOTAwX0JZUExEUEMgIDB4ZmE4MDAwMjAKKyNkZWZpbmUgRjA5MDBfTERQQ01PREUgIDB4ZmE4MDAwMTAKKyNkZWZpbmUgRjA5MDBfSU5WTExSU0lHTiAgMHhmYTgwMDAwOAorI2RlZmluZSBGMDkwMF9TSE9SVE1VTFQgIDB4ZmE4MDAwMDQKKyNkZWZpbmUgRjA5MDBfRVhURVJOVFggIDB4ZmE4MDAwMDEKKworLypHRU5DRkcqLworI2RlZmluZSBSMDkwMF9HRU5DRkcgIDB4ZmE4NgorI2RlZmluZSBGMDkwMF9CUk9BRENBU1QgIDB4ZmE4NjAwMTAKKyNkZWZpbmUgRjA5MDBfTk9TSEZSRDIgIDB4ZmE4NjAwMDgKKyNkZWZpbmUgRjA5MDBfQkNIRVJSRkxBRyAgMHhmYTg2MDAwNAorI2RlZmluZSBGMDkwMF9QUklPUklUWSAgMHhmYTg2MDAwMgorI2RlZmluZSBGMDkwMF9EREVNT0QgIDB4ZmE4NjAwMDEKKworLypMRFBDRVJSMSovCisjZGVmaW5lIFIwOTAwX0xEUENFUlIxICAweGZhOTYKKyNkZWZpbmUgRjA5MDBfTERQQ19FUlJPUlNfQ09VTlRFUjEgIDB4ZmE5NjAwZmYKKworLypMRFBDRVJSMCovCisjZGVmaW5lIFIwOTAwX0xEUENFUlIwICAweGZhOTcKKyNkZWZpbmUgRjA5MDBfTERQQ19FUlJPUlNfQ09VTlRFUjAgIDB4ZmE5NzAwZmYKKworLypCQ0hFUlIqLworI2RlZmluZSBSMDkwMF9CQ0hFUlIgIDB4ZmE5OAorI2RlZmluZSBGMDkwMF9FUlJPUkZMQUcgIDB4ZmE5ODAwMTAKKyNkZWZpbmUgRjA5MDBfQkNIX0VSUk9SU19DT1VOVEVSICAweGZhOTgwMDBmCisKKy8qVFNUUkVTMCovCisjZGVmaW5lIFIwOTAwX1RTVFJFUzAgIDB4ZmYxMQorI2RlZmluZSBGMDkwMF9GUkVTRkVDICAweGZmMTEwMDgwCisjZGVmaW5lIEYwOTAwX0ZSRVNUUyAgMHhmZjExMDA0MAorI2RlZmluZSBGMDkwMF9GUkVTVklUMSAgMHhmZjExMDAyMAorI2RlZmluZSBGMDkwMF9GUkVTVklUMiAgMHhmZjExMDAxMAorI2RlZmluZSBGMDkwMF9GUkVTU1lNMSAgMHhmZjExMDAwOAorI2RlZmluZSBGMDkwMF9GUkVTU1lNMiAgMHhmZjExMDAwNAorI2RlZmluZSBGMDkwMF9GUkVTTUFTICAweGZmMTEwMDAyCisjZGVmaW5lIEYwOTAwX0ZSRVNJTlQgIDB4ZmYxMTAwMDEKKworLypQMl9UU1RESVNSWCovCisjZGVmaW5lIFIwOTAwX1AyX1RTVERJU1JYICAweGZmNjUKKyNkZWZpbmUgRjA5MDBfUDJfRU5fRElTUlggIDB4ZmY2NTAwODAKKyNkZWZpbmUgRjA5MDBfUDJfVFNUX0NVUlJTUkMgIDB4ZmY2NTAwNDAKKyNkZWZpbmUgRjA5MDBfUDJfSU5fRElHU0lHTkFMICAweGZmNjUwMDIwCisjZGVmaW5lIEYwOTAwX1AyX0hJWl9DVVJSRU5UU1JDICAweGZmNjUwMDEwCisjZGVmaW5lIEYwOTAwX1RTVF9QMl9QSU5fU0VMRUNUICAweGZmNjUwMDA4CisjZGVmaW5lIEYwOTAwX1AyX1RTVF9ESVNSWCAgMHhmZjY1MDAwNworCisvKlAxX1RTVERJU1JYKi8KKyNkZWZpbmUgUjA5MDBfUDFfVFNURElTUlggIDB4ZmY2NworI2RlZmluZSBGMDkwMF9QMV9FTl9ESVNSWCAgMHhmZjY3MDA4MAorI2RlZmluZSBGMDkwMF9QMV9UU1RfQ1VSUlNSQyAgMHhmZjY3MDA0MAorI2RlZmluZSBGMDkwMF9QMV9JTl9ESUdTSUdOQUwgIDB4ZmY2NzAwMjAKKyNkZWZpbmUgRjA5MDBfUDFfSElaX0NVUlJFTlRTUkMgIDB4ZmY2NzAwMTAKKyNkZWZpbmUgRjA5MDBfVFNUX1AxX1BJTl9TRUxFQ1QgIDB4ZmY2NzAwMDgKKyNkZWZpbmUgRjA5MDBfUDFfVFNUX0RJU1JYICAweGZmNjcwMDA3CisKKyNkZWZpbmUgU1RWMDkwMF9OQlJFR1MJCTY4NAorI2RlZmluZSBTVFYwOTAwX05CRklFTERTCQkxNzAyCisKKyNlbmRpZgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2MDkwMF9zdy5jIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfc3cuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNWEzMTUzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djA5MDBfc3cuYwpAQCAtMCwwICsxLDI4NDcgQEAKKy8qCisgKiBzdHYwOTAwX3N3LmMKKyAqCisgKiBEcml2ZXIgZm9yIFNUIFNUVjA5MDAgc2F0ZWxsaXRlIGRlbW9kdWxhdG9yIElDLgorICoKKyAqIENvcHlyaWdodCAoQykgU1QgTWljcm9lbGVjdHJvbmljcy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBOZXRVUCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBuZXR1cC5ydT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgInN0djA5MDAuaCIKKyNpbmNsdWRlICJzdHYwOTAwX3JlZy5oIgorI2luY2x1ZGUgInN0djA5MDBfcHJpdi5oIgorCitpbnQgc3R2MDkwMF9jaGVja19zaWduYWxfcHJlc2VuY2Uoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCXMzMiBjYXJyX29mZnNldCwKKwlhZ2MyX2ludGVnciwKKwltYXhfY2FycmllcjsKKworCWludCBub19zaWduYWw7CisKKwlzd2l0Y2ggKGRlbW9kKSB7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJZGVmYXVsdDoKKwkJY2Fycl9vZmZzZXQgPSAoc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSMikgPDwgOCkKKwkJCQkJCXwgc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywKKwkJCQkJCVIwOTAwX1AxX0NGUjEpOworCQljYXJyX29mZnNldCA9IGdlMmNvbXAoY2Fycl9vZmZzZXQsIDE2KTsKKwkJYWdjMl9pbnRlZ3IgPSAoc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUdDMkkxKSA8PCA4KQorCQkJCQkJfCBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLAorCQkJCQkJUjA5MDBfUDFfQUdDMkkwKTsKKwkJbWF4X2NhcnJpZXIgPSBpX3BhcmFtcy0+ZG1kMV9zcmNoX3JhbmdlIC8gMTAwMDsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCWNhcnJfb2Zmc2V0ID0gKHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUjIpIDw8IDgpCisJCQkJCQl8IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsCisJCQkJCQlSMDkwMF9QMl9DRlIxKTsKKwkJY2Fycl9vZmZzZXQgPSBnZTJjb21wKGNhcnJfb2Zmc2V0LCAxNik7CisJCWFnYzJfaW50ZWdyID0gKHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FHQzJJMSkgPDwgOCkKKwkJCQkJCXwgc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywKKwkJCQkJCVIwOTAwX1AyX0FHQzJJMCk7CisJCW1heF9jYXJyaWVyID0gaV9wYXJhbXMtPmRtZDJfc3JjaF9yYW5nZSAvIDEwMDA7CisJCWJyZWFrOworCX0KKworCW1heF9jYXJyaWVyICs9IChtYXhfY2FycmllciAvIDEwKTsKKwltYXhfY2FycmllciA9IDY1NTM2ICogKG1heF9jYXJyaWVyIC8gMik7CisJbWF4X2NhcnJpZXIgLz0gaV9wYXJhbXMtPm1jbGsgLyAxMDAwOworCWlmIChtYXhfY2FycmllciA+IDB4NDAwMCkKKwkJbWF4X2NhcnJpZXIgPSAweDQwMDA7CisKKwlpZiAoKGFnYzJfaW50ZWdyID4gMHgyMDAwKQorCQkJfHwgKGNhcnJfb2Zmc2V0ID4gKyAyKm1heF9jYXJyaWVyKQorCQkJfHwgKGNhcnJfb2Zmc2V0IDwgLTIqbWF4X2NhcnJpZXIpKQorCQlub19zaWduYWwgPSBUUlVFOworCWVsc2UKKwkJbm9fc2lnbmFsID0gRkFMU0U7CisKKwlyZXR1cm4gbm9fc2lnbmFsOworfQorCitzdGF0aWMgdm9pZCBzdHYwOTAwX2dldF9zd19sb29wX3BhcmFtcyhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJczMyICpmcmVxdWVuY3lfaW5jLCBzMzIgKnN3X3RpbWVvdXQsCisJCQkJczMyICpzdGVwcywKKwkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCXMzMiB0aW1lb3V0LCBmcmVxX2luYywgbWF4X3N0ZXBzLCBzcmF0ZSwgbWF4X2NhcnJpZXI7CisKKwllbnVtIGZlX3N0djA5MDBfc2VhcmNoX3N0YW5kYXJkCXN0YW5kYXJkOworCisJc3dpdGNoIChkZW1vZCkgeworCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCWRlZmF1bHQ6CisJCXNyYXRlID0gaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGU7CisJCW1heF9jYXJyaWVyID0gaV9wYXJhbXMtPmRtZDFfc3JjaF9yYW5nZSAvIDEwMDA7CisJCW1heF9jYXJyaWVyICs9IG1heF9jYXJyaWVyIC8gMTA7CisJCXN0YW5kYXJkID0gaV9wYXJhbXMtPmRtZDFfc3JjaF9zdGFuZGFyZDsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCXNyYXRlID0gaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGU7CisJCW1heF9jYXJyaWVyID0gaV9wYXJhbXMtPmRtZDJfc3JjaF9yYW5nZSAvIDEwMDA7CisJCW1heF9jYXJyaWVyICs9IG1heF9jYXJyaWVyIC8gMTA7CisJCXN0YW5kYXJkID0gaV9wYXJhbXMtPmRtZDJfc3JjaF9zdG5kcmQ7CisJCWJyZWFrOworCX0KKworCW1heF9jYXJyaWVyID0gNjU1MzYgKiAobWF4X2NhcnJpZXIgLyAyKTsKKwltYXhfY2FycmllciAvPSBpX3BhcmFtcy0+bWNsayAvIDEwMDA7CisKKwlpZiAobWF4X2NhcnJpZXIgPiAweDQwMDApCisJCW1heF9jYXJyaWVyID0gMHg0MDAwOworCisJZnJlcV9pbmMgPSBzcmF0ZTsKKwlmcmVxX2luYyAvPSBpX3BhcmFtcy0+bWNsayA+PiAxMDsKKwlmcmVxX2luYyA9IGZyZXFfaW5jIDw8IDY7CisKKwlzd2l0Y2ggKHN0YW5kYXJkKSB7CisJY2FzZSBTVFYwOTAwX1NFQVJDSF9EVkJTMToKKwljYXNlIFNUVjA5MDBfU0VBUkNIX0RTUzoKKwkJZnJlcV9pbmMgKj0gMzsKKwkJdGltZW91dCA9IDIwOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfU0VBUkNIX0RWQlMyOgorCQlmcmVxX2luYyAqPSA0OworCQl0aW1lb3V0ID0gMjU7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9BVVRPX1NFQVJDSDoKKwlkZWZhdWx0OgorCQlmcmVxX2luYyAqPSAzOworCQl0aW1lb3V0ID0gMjU7CisJCWJyZWFrOworCX0KKworCWZyZXFfaW5jIC89IDEwMDsKKworCWlmICgoZnJlcV9pbmMgPiBtYXhfY2FycmllcikgfHwgKGZyZXFfaW5jIDwgMCkpCisJCWZyZXFfaW5jID0gbWF4X2NhcnJpZXIgLyAyOworCisJdGltZW91dCAqPSAyNzUwMDsKKworCWlmIChzcmF0ZSA+IDApCisJCXRpbWVvdXQgLz0gc3JhdGUgLyAxMDAwOworCisJaWYgKCh0aW1lb3V0ID4gMTAwKSB8fCAodGltZW91dCA8IDApKQorCQl0aW1lb3V0ID0gMTAwOworCisJbWF4X3N0ZXBzID0gKG1heF9jYXJyaWVyIC8gZnJlcV9pbmMpICsgMTsKKworCWlmICgobWF4X3N0ZXBzID4gMTAwKSB8fCAobWF4X3N0ZXBzIDwgMCkpIHsKKwkJbWF4X3N0ZXBzID0gIDEwMDsKKwkJZnJlcV9pbmMgPSBtYXhfY2FycmllciAvIG1heF9zdGVwczsKKwl9CisKKwkqZnJlcXVlbmN5X2luYyA9IGZyZXFfaW5jOworCSpzd190aW1lb3V0ID0gdGltZW91dDsKKwkqc3RlcHMgPSBtYXhfc3RlcHM7CisKK30KKworc3RhdGljIGludCBzdHYwOTAwX3NlYXJjaF9jYXJyX3N3X2xvb3Aoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCXMzMiBGcmVxSW5jciwgczMyIFRpbWVvdXQsIGludCB6aWd6YWcsCisJCQkJczMyIE1heFN0ZXAsIGVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJaW50CW5vX3NpZ25hbCwKKwkJbG9jayA9IEZBTFNFOworCXMzMglzdGVwQ3B0LAorCQlmcmVxT2Zmc2V0LAorCQltYXhfY2FycmllcjsKKworCXN3aXRjaCAoZGVtb2QpIHsKKwljYXNlIFNUVjA5MDBfREVNT0RfMToKKwlkZWZhdWx0OgorCQltYXhfY2FycmllciA9IGlfcGFyYW1zLT5kbWQxX3NyY2hfcmFuZ2UgLyAxMDAwOworCQltYXhfY2FycmllciArPSAobWF4X2NhcnJpZXIgLyAxMCk7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQltYXhfY2FycmllciA9IGlfcGFyYW1zLT5kbWQyX3NyY2hfcmFuZ2UgLyAxMDAwOworCQltYXhfY2FycmllciArPSAobWF4X2NhcnJpZXIgLyAxMCk7CisJCWJyZWFrOworCX0KKworCW1heF9jYXJyaWVyID0gNjU1MzYgKiAobWF4X2NhcnJpZXIgLyAyKTsKKwltYXhfY2FycmllciAvPSBpX3BhcmFtcy0+bWNsayAvIDEwMDA7CisKKwlpZiAobWF4X2NhcnJpZXIgPiAweDQwMDApCisJCW1heF9jYXJyaWVyID0gMHg0MDAwOworCisJaWYgKHppZ3phZyA9PSBUUlVFKQorCQlmcmVxT2Zmc2V0ID0gMDsKKwllbHNlCisJCWZyZXFPZmZzZXQgPSAtbWF4X2NhcnJpZXIgKyBGcmVxSW5jcjsKKworCXN0ZXBDcHQgPSAwOworCisJZG8geworCQlzd2l0Y2ggKGRlbW9kKSB7CisJCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCQlkZWZhdWx0OgorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxQyk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDEsCisJCQkJCShmcmVxT2Zmc2V0IC8gMjU2KSAmIDB4RkYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQwLAorCQkJCQkgZnJlcU9mZnNldCAmIDB4RkYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxOCk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0FMR09TV1JTVCwgMSk7CisKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA9PSAweDEyKSB7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLAorCQkJCQkJRjA5MDBfUDFfUlNUX0hXQVJFLCAxKTsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsCisJCQkJCQlGMDkwMF9QMV9SU1RfSFdBUkUsIDApOworCQkJfQorCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHgxQyk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDEsCisJCQkJCShmcmVxT2Zmc2V0IC8gMjU2KSAmIDB4RkYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUklOSVQwLAorCQkJCQlmcmVxT2Zmc2V0ICYgMHhGRik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDE4KTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfQUxHT1NXUlNULCAxKTsKKworCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID09IDB4MTIpIHsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsCisJCQkJCQlGMDkwMF9QMl9SU1RfSFdBUkUsIDEpOworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywKKwkJCQkJCUYwOTAwX1AyX1JTVF9IV0FSRSwgMCk7CisJCQl9CisJCQlicmVhazsKKwkJfQorCisJCWlmICh6aWd6YWcgPT0gVFJVRSkgeworCQkJaWYgKGZyZXFPZmZzZXQgPj0gMCkKKwkJCQlmcmVxT2Zmc2V0ID0gLWZyZXFPZmZzZXQgLSAyICogRnJlcUluY3I7CisJCQllbHNlCisJCQkJZnJlcU9mZnNldCA9IC1mcmVxT2Zmc2V0OworCQl9IGVsc2UKKwkJCWZyZXFPZmZzZXQgKz0gKyAyICogRnJlcUluY3I7CisKKwkJc3RlcENwdCsrOworCQlsb2NrID0gc3R2MDkwMF9nZXRfZGVtb2RfbG9jayhpX3BhcmFtcywgZGVtb2QsIFRpbWVvdXQpOworCQlub19zaWduYWwgPSBzdHYwOTAwX2NoZWNrX3NpZ25hbF9wcmVzZW5jZShpX3BhcmFtcywgZGVtb2QpOworCisJfSB3aGlsZSAoKGxvY2sgPT0gRkFMU0UpCisJCQkmJiAobm9fc2lnbmFsID09IEZBTFNFKQorCQkJJiYgKChmcmVxT2Zmc2V0IC0gRnJlcUluY3IpIDwgIG1heF9jYXJyaWVyKQorCQkJJiYgKChmcmVxT2Zmc2V0ICsgRnJlcUluY3IpID4gLW1heF9jYXJyaWVyKQorCQkJJiYgKHN0ZXBDcHQgPCBNYXhTdGVwKSk7CisKKwlzd2l0Y2ggKGRlbW9kKSB7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJZGVmYXVsdDoKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9BTEdPU1dSU1QsIDApOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9BTEdPU1dSU1QsIDApOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gbG9jazsKK30KKworaW50IHN0djA5MDBfc3dfYWxnbyhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwlpbnQgbG9jayA9IEZBTFNFOworCisJaW50IG5vX3NpZ25hbCwKKwl6aWd6YWc7CisJczMyIGR2YnMyX2ZseV93aGVlbDsKKworCXMzMiBmcmVxSW5jcmVtZW50LCBzb2Z0U3RlcFRpbWVvdXQsIHRyaWFsQ291bnRlciwgbWF4X3N0ZXBzOworCisJc3R2MDkwMF9nZXRfc3dfbG9vcF9wYXJhbXMoaV9wYXJhbXMsICZmcmVxSW5jcmVtZW50LCAmc29mdFN0ZXBUaW1lb3V0LAorCQkJCQkmbWF4X3N0ZXBzLCBkZW1vZCk7CisJc3dpdGNoIChkZW1vZCkgeworCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCWRlZmF1bHQ6CisJCXN3aXRjaCAoaV9wYXJhbXMtPmRtZDFfc3JjaF9zdGFuZGFyZCkgeworCQljYXNlIFNUVjA5MDBfU0VBUkNIX0RWQlMxOgorCQljYXNlIFNUVjA5MDBfU0VBUkNIX0RTUzoKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJGUkVRLAorCQkJCQkJMHgzQik7CisJCQllbHNlCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkZSRVEsCisJCQkJCQkweGVmKTsKKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRENGR01ELCAweDQ5KTsKKwkJCXppZ3phZyA9IEZBTFNFOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9TRUFSQ0hfRFZCUzI6CisJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ09SUkVMQUJTLAorCQkJCQkJMHg3OSk7CisJCQllbHNlCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NPUlJFTEFCUywKKwkJCQkJCTB4NjgpOworCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1EQ0ZHTUQsCisJCQkJCQkweDg5KTsKKworCQkJemlnemFnID0gVFJVRTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfQVVUT19TRUFSQ0g6CisJCWRlZmF1bHQ6CisJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJGUkVRLAorCQkJCQkJCTB4M0IpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DT1JSRUxBQlMsCisJCQkJCQkJMHg3OSk7CisJCQl9IGVsc2UgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJGUkVRLAorCQkJCQkJCTB4ZWYpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DT1JSRUxBQlMsCisJCQkJCQkJMHg2OCk7CisJCQl9CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURDRkdNRCwKKwkJCQkJCQkweGM5KTsKKwkJCXppZ3phZyA9IEZBTFNFOworCQkJYnJlYWs7CisJCX0KKworCQl0cmlhbENvdW50ZXIgPSAwOworCQlkbyB7CisJCQlsb2NrID0gc3R2MDkwMF9zZWFyY2hfY2Fycl9zd19sb29wKGlfcGFyYW1zLAorCQkJCQkJCWZyZXFJbmNyZW1lbnQsCisJCQkJCQkJc29mdFN0ZXBUaW1lb3V0LAorCQkJCQkJCXppZ3phZywKKwkJCQkJCQltYXhfc3RlcHMsCisJCQkJCQkJZGVtb2QpOworCQkJbm9fc2lnbmFsID0gc3R2MDkwMF9jaGVja19zaWduYWxfcHJlc2VuY2UoaV9wYXJhbXMsCisJCQkJCQkJCWRlbW9kKTsKKwkJCXRyaWFsQ291bnRlcisrOworCQkJaWYgKChsb2NrID09IFRSVUUpCisJCQkJCXx8IChub19zaWduYWwgPT0gVFJVRSkKKwkJCQkJfHwgKHRyaWFsQ291bnRlciA9PSAyKSkgeworCisJCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsCisJCQkJCQkJUjA5MDBfUDFfQ0FSRlJFUSwKKwkJCQkJCQkweDQ5KTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsCisJCQkJCQkJUjA5MDBfUDFfQ09SUkVMQUJTLAorCQkJCQkJCTB4OWUpOworCQkJCX0gZWxzZSB7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLAorCQkJCQkJCVIwOTAwX1AxX0NBUkZSRVEsCisJCQkJCQkJMHhlZCk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLAorCQkJCQkJCVIwOTAwX1AxX0NPUlJFTEFCUywKKwkJCQkJCQkweDg4KTsKKwkJCQl9CisKKwkJCQlpZiAoKGxvY2sgPT0gVFJVRSkgJiYgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0hFQURFUl9NT0RFKSA9PSBTVFYwOTAwX0RWQlMyX0ZPVU5EKSkgeworCQkJCQltc2xlZXAoc29mdFN0ZXBUaW1lb3V0KTsKKwkJCQkJZHZiczJfZmx5X3doZWVsID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRkxZV0hFRUxfQ1BUKTsKKworCQkJCQlpZiAoZHZiczJfZmx5X3doZWVsIDwgMHhkKSB7CisJCQkJCQltc2xlZXAoc29mdFN0ZXBUaW1lb3V0KTsKKwkJCQkJCWR2YnMyX2ZseV93aGVlbCA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0ZMWVdIRUVMX0NQVCk7CisJCQkJCX0KKworCQkJCQlpZiAoZHZiczJfZmx5X3doZWVsIDwgMHhkKSB7CisJCQkJCQlsb2NrID0gRkFMU0U7CisKKwkJCQkJCWlmICh0cmlhbENvdW50ZXIgPCAyKSB7CisJCQkJCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApCisJCQkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DT1JSRUxBQlMsIDB4NzkpOworCQkJCQkJCWVsc2UKKwkJCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NPUlJFTEFCUywgMHg2OCk7CisKKwkJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1EQ0ZHTUQsIDB4ODkpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCX0gd2hpbGUgKChsb2NrID09IEZBTFNFKQorCQkJJiYgKHRyaWFsQ291bnRlciA8IDIpCisJCQkmJiAobm9fc2lnbmFsID09IEZBTFNFKSk7CisKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCXN3aXRjaCAoaV9wYXJhbXMtPmRtZDJfc3JjaF9zdG5kcmQpIHsKKwkJY2FzZSBTVFYwOTAwX1NFQVJDSF9EVkJTMToKKwkJY2FzZSBTVFYwOTAwX1NFQVJDSF9EU1M6CisJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSRlJFUSwKKwkJCQkJCTB4M2IpOworCQkJZWxzZQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJGUkVRLAorCQkJCQkJMHhlZik7CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURDRkdNRCwKKwkJCQkJCTB4NDkpOworCQkJemlnemFnID0gRkFMU0U7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX1NFQVJDSF9EVkJTMjoKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DT1JSRUxBQlMsCisJCQkJCQkweDc5KTsKKwkJCWVsc2UKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ09SUkVMQUJTLAorCQkJCQkJMHg2OCk7CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURDRkdNRCwgMHg4OSk7CisJCQl6aWd6YWcgPSBUUlVFOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9BVVRPX1NFQVJDSDoKKwkJZGVmYXVsdDoKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkZSRVEsCisJCQkJCQkweDNiKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ09SUkVMQUJTLAorCQkJCQkJMHg3OSk7CisJCQl9IGVsc2UgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJGUkVRLAorCQkJCQkJMHhlZik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NPUlJFTEFCUywKKwkJCQkJCTB4NjgpOworCQkJfQorCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1EQ0ZHTUQsIDB4YzkpOworCisJCQl6aWd6YWcgPSBGQUxTRTsKKwkJCWJyZWFrOworCQl9CisKKwkJdHJpYWxDb3VudGVyID0gMDsKKworCQlkbyB7CisJCQlsb2NrID0gc3R2MDkwMF9zZWFyY2hfY2Fycl9zd19sb29wKGlfcGFyYW1zLAorCQkJCQkJCWZyZXFJbmNyZW1lbnQsCisJCQkJCQkJc29mdFN0ZXBUaW1lb3V0LAorCQkJCQkJCXppZ3phZywKKwkJCQkJCQltYXhfc3RlcHMsCisJCQkJCQkJZGVtb2QpOworCQkJbm9fc2lnbmFsID0gc3R2MDkwMF9jaGVja19zaWduYWxfcHJlc2VuY2UoaV9wYXJhbXMsCisJCQkJCQkJCWRlbW9kKTsKKwkJCXRyaWFsQ291bnRlcisrOworCQkJaWYgKChsb2NrID09IFRSVUUpCisJCQkJCXx8IChub19zaWduYWwgPT0gVFJVRSkKKwkJCQkJfHwgKHRyaWFsQ291bnRlciA9PSAyKSkgeworCQkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKSB7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLAorCQkJCQkJCVIwOTAwX1AyX0NBUkZSRVEsCisJCQkJCQkJMHg0OSk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLAorCQkJCQkJCVIwOTAwX1AyX0NPUlJFTEFCUywKKwkJCQkJCQkweDllKTsKKwkJCQl9IGVsc2UgeworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywKKwkJCQkJCQlSMDkwMF9QMl9DQVJGUkVRLAorCQkJCQkJCTB4ZWQpOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywKKwkJCQkJCQlSMDkwMF9QMl9DT1JSRUxBQlMsCisJCQkJCQkJMHg4OCk7CisJCQkJfQorCisJCQkJaWYgKChsb2NrID09IFRSVUUpICYmIChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9IRUFERVJfTU9ERSkgPT0gU1RWMDkwMF9EVkJTMl9GT1VORCkpIHsKKwkJCQkJbXNsZWVwKHNvZnRTdGVwVGltZW91dCk7CisJCQkJCWR2YnMyX2ZseV93aGVlbCA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0ZMWVdIRUVMX0NQVCk7CisJCQkJCWlmIChkdmJzMl9mbHlfd2hlZWwgPCAweGQpIHsKKwkJCQkJCW1zbGVlcChzb2Z0U3RlcFRpbWVvdXQpOworCQkJCQkJZHZiczJfZmx5X3doZWVsID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRkxZV0hFRUxfQ1BUKTsKKwkJCQkJfQorCisJCQkJCWlmIChkdmJzMl9mbHlfd2hlZWwgPCAweGQpIHsKKwkJCQkJCWxvY2sgPSBGQUxTRTsKKwkJCQkJCWlmICh0cmlhbENvdW50ZXIgPCAyKSB7CisJCQkJCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApCisJCQkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DT1JSRUxBQlMsIDB4NzkpOworCQkJCQkJCWVsc2UKKwkJCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NPUlJFTEFCUywgMHg2OCk7CisKKwkJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1EQ0ZHTUQsIDB4ODkpOworCQkJCQkJfQorCQkJCQl9CisJCQkJfQorCQkJfQorCisJCX0gd2hpbGUgKChsb2NrID09IEZBTFNFKSAmJiAodHJpYWxDb3VudGVyIDwgMikgJiYgKG5vX3NpZ25hbCA9PSBGQUxTRSkpOworCisJCWJyZWFrOworCX0KKworCXJldHVybiBsb2NrOworfQorCitzdGF0aWMgdTMyIHN0djA5MDBfZ2V0X3N5bWJvbF9yYXRlKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQkJdTMyIG1jbGssCisJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJczMyIHNmcl9maWVsZDMsIHNmcl9maWVsZDIsIHNmcl9maWVsZDEsIHNmcl9maWVsZDAsCisJcmVtMSwgcmVtMiwgaW50dmFsMSwgaW50dmFsMiwgc3JhdGU7CisKKwlkbWRfcmVnKHNmcl9maWVsZDMsIEYwOTAwX1AxX1NZTUJfRlJFUTMsIEYwOTAwX1AyX1NZTUJfRlJFUTMpOworCWRtZF9yZWcoc2ZyX2ZpZWxkMiwgRjA5MDBfUDFfU1lNQl9GUkVRMiwgRjA5MDBfUDJfU1lNQl9GUkVRMik7CisJZG1kX3JlZyhzZnJfZmllbGQxLCBGMDkwMF9QMV9TWU1CX0ZSRVExLCBGMDkwMF9QMl9TWU1CX0ZSRVExKTsKKwlkbWRfcmVnKHNmcl9maWVsZDAsIEYwOTAwX1AxX1NZTUJfRlJFUTAsIEYwOTAwX1AyX1NZTUJfRlJFUTApOworCisJc3JhdGUgPSAoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgc2ZyX2ZpZWxkMykgPDwgMjQpICsKKwkJKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIHNmcl9maWVsZDIpIDw8IDE2KSArCisJCShzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBzZnJfZmllbGQxKSA8PCA4KSArCisJCShzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBzZnJfZmllbGQwKSk7CisJZHByaW50aygibG9jazogc3JhdGU9JWQgcjA9MHgleCByMT0weCV4IHIyPTB4JXggcjM9MHgleCBcbiIsCisJCXNyYXRlLCBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBzZnJfZmllbGQwKSwKKwkJc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgc2ZyX2ZpZWxkMSksCisJCXN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIHNmcl9maWVsZDIpLAorCQlzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBzZnJfZmllbGQzKSk7CisKKwlpbnR2YWwxID0gKG1jbGspID4+IDE2OworCWludHZhbDIgPSAoc3JhdGUpID4+IDE2OworCisJcmVtMSA9IChtY2xrKSAlIDB4MTAwMDA7CisJcmVtMiA9IChzcmF0ZSkgJSAweDEwMDAwOworCXNyYXRlID0JKGludHZhbDEgKiBpbnR2YWwyKSArCisJCSgoaW50dmFsMSAqIHJlbTIpID4+IDE2KSArCisJCSgoaW50dmFsMiAqIHJlbTEpID4+IDE2KTsKKworCXJldHVybiBzcmF0ZTsKK30KKworc3RhdGljIHZvaWQgc3R2MDkwMF9zZXRfc3ltYm9sX3JhdGUoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCQl1MzIgbWNsaywgdTMyIHNyYXRlLAorCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCXMzMiBzZnJfaW5pdF9yZWc7CisJdTMyIHN5bWI7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IE1jbGsgJWQsIFNSICVkLCBEbWQgJWRcbiIsIF9fZnVuY19fLCBtY2xrLAorCQkJCQkJCXNyYXRlLCBkZW1vZCk7CisKKwlkbWRfcmVnKHNmcl9pbml0X3JlZywgUjA5MDBfUDFfU0ZSSU5JVDEsIFIwOTAwX1AyX1NGUklOSVQxKTsKKworCWlmIChzcmF0ZSA+IDYwMDAwMDAwKSB7CisJCXN5bWIgPSBzcmF0ZSA8PCA0OworCQlzeW1iIC89IChtY2xrID4+IDEyKTsKKwl9IGVsc2UgaWYgKHNyYXRlID4gNjAwMDAwMCkgeworCQlzeW1iID0gc3JhdGUgPDwgNjsKKwkJc3ltYiAvPSAobWNsayA+PiAxMCk7CisJfSBlbHNlIHsKKwkJc3ltYiA9IHNyYXRlIDw8IDk7CisJCXN5bWIgLz0gKG1jbGsgPj4gNyk7CisJfQorCisJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHNmcl9pbml0X3JlZywgKHN5bWIgPj4gOCkgJiAweDdGKTsKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgc2ZyX2luaXRfcmVnICsgMSwgKHN5bWIgJiAweEZGKSk7Cit9CisKK3N0YXRpYyB2b2lkIHN0djA5MDBfc2V0X21heF9zeW1ib2xfcmF0ZShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJCXUzMiBtY2xrLCB1MzIgc3JhdGUsCisJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJczMyIHNmcl9tYXhfcmVnOworCXUzMiBzeW1iOworCisJZG1kX3JlZyhzZnJfbWF4X3JlZywgUjA5MDBfUDFfU0ZSVVAxLCBSMDkwMF9QMl9TRlJVUDEpOworCisJc3JhdGUgPSAxMDUgKiAoc3JhdGUgLyAxMDApOworCisJaWYgKHNyYXRlID4gNjAwMDAwMDApIHsKKwkJc3ltYiA9IHNyYXRlIDw8IDQ7CisJCXN5bWIgLz0gKG1jbGsgPj4gMTIpOworCX0gZWxzZSBpZiAoc3JhdGUgPiA2MDAwMDAwKSB7CisJCXN5bWIgPSBzcmF0ZSA8PCA2OworCQlzeW1iIC89IChtY2xrID4+IDEwKTsKKwl9IGVsc2UgeworCQlzeW1iID0gc3JhdGUgPDwgOTsKKwkJc3ltYiAvPSAobWNsayA+PiA3KTsKKwl9CisKKwlpZiAoc3ltYiA8IDB4N2ZmZikgeworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgc2ZyX21heF9yZWcsIChzeW1iID4+IDgpICYgMHg3Rik7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBzZnJfbWF4X3JlZyArIDEsIChzeW1iICYgMHhGRikpOworCX0gZWxzZSB7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBzZnJfbWF4X3JlZywgMHg3Rik7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBzZnJfbWF4X3JlZyArIDEsIDB4RkYpOworCX0KK30KKworc3RhdGljIHZvaWQgc3R2MDkwMF9zZXRfbWluX3N5bWJvbF9yYXRlKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQkJdTMyIG1jbGssIHUzMiBzcmF0ZSwKKwkJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwlzMzIgc2ZyX21pbl9yZWc7CisJdTMyCXN5bWI7CisKKwlkbWRfcmVnKHNmcl9taW5fcmVnLCBSMDkwMF9QMV9TRlJMT1cxLCBSMDkwMF9QMl9TRlJMT1cxKTsKKworCXNyYXRlID0gOTUgKiAoc3JhdGUgLyAxMDApOworCWlmIChzcmF0ZSA+IDYwMDAwMDAwKSB7CisJCXN5bWIgPSBzcmF0ZSA8PCA0OworCQlzeW1iIC89IChtY2xrID4+IDEyKTsKKworCX0gZWxzZSBpZiAoc3JhdGUgPiA2MDAwMDAwKSB7CisJCXN5bWIgPSBzcmF0ZSA8PCA2OworCQlzeW1iIC89IChtY2xrID4+IDEwKTsKKworCX0gZWxzZSB7CisJCXN5bWIgPSBzcmF0ZSA8PCA5OworCQlzeW1iIC89IChtY2xrID4+IDcpOworCX0KKworCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBzZnJfbWluX3JlZywgKHN5bWIgPj4gOCkgJiAweEZGKTsKKwlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgc2ZyX21pbl9yZWcgKyAxLCAoc3ltYiAmIDB4RkYpKTsKK30KKworc3RhdGljIHMzMiBzdHYwOTAwX2dldF90aW1pbmdfb2Zmc3Qoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCQl1MzIgc3JhdGUsCisJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJczMyIHRtZ3JlZywKKwl0aW1pbmdvZmZzZXQ7CisKKwlkbWRfcmVnKHRtZ3JlZywgUjA5MDBfUDFfVE1HUkVHMiwgUjA5MDBfUDJfVE1HUkVHMik7CisKKwl0aW1pbmdvZmZzZXQgPSAoc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgdG1ncmVnKSA8PCAxNikgKworCQkgICAgICAgKHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIHRtZ3JlZyArIDEpIDw8IDgpICsKKwkJICAgICAgIChzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCB0bWdyZWcgKyAyKSk7CisKKwl0aW1pbmdvZmZzZXQgPSBnZTJjb21wKHRpbWluZ29mZnNldCwgMjQpOworCisKKwlpZiAodGltaW5nb2Zmc2V0ID09IDApCisJCXRpbWluZ29mZnNldCA9IDE7CisKKwl0aW1pbmdvZmZzZXQgPSAoKHMzMilzcmF0ZSAqIDEwKSAvICgoczMyKTB4MTAwMDAwMCAvIHRpbWluZ29mZnNldCk7CisJdGltaW5nb2Zmc2V0IC89IDMyMDsKKworCXJldHVybiB0aW1pbmdvZmZzZXQ7Cit9CisKK3N0YXRpYyB2b2lkIHN0djA5MDBfc2V0X2R2YnMyX3JvbGxvZmYoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCXMzMiByb2xsb2ZmLCBtYW5fZmxkLCBtYXRzdHJfcmVnLCByb2xsb2ZmX2N0bF9mbGQ7CisKKwlkbWRfcmVnKG1hbl9mbGQsIEYwOTAwX1AxX01BTlVBTF9ST0xMT0ZGLCBGMDkwMF9QMl9NQU5VQUxfUk9MTE9GRik7CisJZG1kX3JlZyhtYXRzdHJfcmVnLCBSMDkwMF9QMV9NQVRTVFIxLCBSMDkwMF9QMl9NQVRTVFIxKTsKKwlkbWRfcmVnKHJvbGxvZmZfY3RsX2ZsZCwgRjA5MDBfUDFfUk9MTE9GRl9DT05UUk9MLAorCQkJCUYwOTAwX1AyX1JPTExPRkZfQ09OVFJPTCk7CisKKwlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPT0gMHgxMCkgeworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIG1hbl9mbGQsIDEpOworCQlyb2xsb2ZmID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgbWF0c3RyX3JlZykgJiAweDAzOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHJvbGxvZmZfY3RsX2ZsZCwgcm9sbG9mZik7CisJfSBlbHNlCisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgbWFuX2ZsZCwgMCk7Cit9CisKK3N0YXRpYyB1MzIgc3R2MDkwMF9jYXJyaWVyX3dpZHRoKHUzMiBzcmF0ZSwgZW51bSBmZV9zdHYwOTAwX3JvbGxvZmYgcm8pCit7CisJdTMyIHJvbGxvZmY7CisKKwlzd2l0Y2ggKHJvKSB7CisJY2FzZSBTVFYwOTAwXzIwOgorCQlyb2xsb2ZmID0gMjA7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF8yNToKKwkJcm9sbG9mZiA9IDI1OworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfMzU6CisJZGVmYXVsdDoKKwkJcm9sbG9mZiA9IDM1OworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc3JhdGUgICsgKHNyYXRlICogcm9sbG9mZikgLyAxMDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDkwMF9jaGVja190aW1pbmdfbG9jayhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwlpbnQgdGltaW5nTG9jayA9IEZBTFNFOworCXMzMiBpLAorCXRpbWluZ2NwdCA9IDA7CisJdTggY2FyRnJlcSwKKwl0bWdUSGhpZ2gsCisJdG1nVEhMb3c7CisKKwlzd2l0Y2ggKGRlbW9kKSB7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJZGVmYXVsdDoKKwkJY2FyRnJlcSA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkZSRVEpOworCQl0bWdUSGhpZ2ggPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdUSFJJU0UpOworCQl0bWdUSExvdyA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR1RIRkFMTCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdUSFJJU0UsIDB4MjApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVE1HVEhGQUxMLCAweDApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0NGUl9BVVRPU0NBTiwgMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9SVEMsIDB4ODApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfUlRDUzIsIDB4NDApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSRlJFUSwgMHgwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQxLCAweDApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDAsIDB4MCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BR0MyUkVGLCAweDY1KTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxOCk7CisJCW1zbGVlcCg3KTsKKworCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQkJaWYgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1RNR0xPQ0tfUVVBTElUWSkgPj0gMikKKwkJCQl0aW1pbmdjcHQrKzsKKworCQkJbXNsZWVwKDEpOworCQl9CisKKwkJaWYgKHRpbWluZ2NwdCA+PSAzKQorCQkJdGltaW5nTG9jayA9IFRSVUU7CisKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FHQzJSRUYsIDB4MzgpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfUlRDLCAweDg4KTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1JUQ1MyLCAweDY4KTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkZSRVEsIGNhckZyZXEpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVE1HVEhSSVNFLCB0bWdUSGhpZ2gpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVE1HVEhGQUxMLCB0bWdUSExvdyk7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQljYXJGcmVxID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSRlJFUSk7CisJCXRtZ1RIaGlnaCA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR1RIUklTRSk7CisJCXRtZ1RITG93ID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HVEhGQUxMKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR1RIUklTRSwgMHgyMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9UTUdUSEZBTEwsIDApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0NGUl9BVVRPU0NBTiwgMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9SVEMsIDB4ODApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfUlRDUzIsIDB4NDApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSRlJFUSwgMHgwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUklOSVQxLCAweDApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDAsIDB4MCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BR0MyUkVGLCAweDY1KTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHgxOCk7CisJCW1zbGVlcCg1KTsKKwkJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHsKKwkJCWlmIChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9UTUdMT0NLX1FVQUxJVFkpID49IDIpCisJCQkJdGltaW5nY3B0Kys7CisKKwkJCW1zbGVlcCgxKTsKKwkJfQorCisJCWlmICh0aW1pbmdjcHQgPj0gMykKKwkJCXRpbWluZ0xvY2sgPSBUUlVFOworCisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BR0MyUkVGLCAweDM4KTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1JUQywgMHg4OCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9SVENTMiwgMHg2OCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJGUkVRLCBjYXJGcmVxKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR1RIUklTRSwgdG1nVEhoaWdoKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR1RIRkFMTCwgdG1nVEhMb3cpOworCQlicmVhazsKKwl9CisKKwlyZXR1cm4JdGltaW5nTG9jazsKK30KKworc3RhdGljIGludCBzdHYwOTAwX2dldF9kZW1vZF9jb2xkX2xvY2soc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCXMzMiBkZW1vZF90aW1lb3V0KQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcyA9IHN0YXRlLT5pbnRlcm5hbDsKKwllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kID0gc3RhdGUtPmRlbW9kOworCisJaW50IGxvY2sgPSBGQUxTRTsKKwlzMzIgc3JhdGUsIHNlYXJjaF9yYW5nZSwgbG9ja3RpbWVvdXQsCisJCWN1cnJpZXJfc3RlcCwgbmJfc3RlcHMsIGN1cnJlbnRfc3RlcCwKKwkJZGlyZWN0aW9uLCB0dW5lcl9mcmVxLCB0aW1lb3V0OworCisJc3dpdGNoIChkZW1vZCkgeworCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCWRlZmF1bHQ6CisJCXNyYXRlID0gaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGU7CisJCXNlYXJjaF9yYW5nZSA9IGlfcGFyYW1zLT5kbWQxX3NyY2hfcmFuZ2U7CisJCWJyZWFrOworCisJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCXNyYXRlID0gaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGU7CisJCXNlYXJjaF9yYW5nZSA9IGlfcGFyYW1zLT5kbWQyX3NyY2hfcmFuZ2U7CisJCWJyZWFrOworCX0KKworCWlmIChzcmF0ZSA+PSAxMDAwMDAwMCkKKwkJbG9ja3RpbWVvdXQgPSBkZW1vZF90aW1lb3V0IC8gMzsKKwllbHNlCisJCWxvY2t0aW1lb3V0ID0gZGVtb2RfdGltZW91dCAvIDI7CisKKwlsb2NrID0gc3R2MDkwMF9nZXRfZGVtb2RfbG9jayhpX3BhcmFtcywgZGVtb2QsIGxvY2t0aW1lb3V0KTsKKworCWlmIChsb2NrID09IEZBTFNFKSB7CisJCWlmIChzcmF0ZSA+PSAxMDAwMDAwMCkgeworCQkJaWYgKHN0djA5MDBfY2hlY2tfdGltaW5nX2xvY2soaV9wYXJhbXMsIGRlbW9kKSA9PSBUUlVFKSB7CisJCQkJc3dpdGNoIChkZW1vZCkgeworCQkJCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCQkJCWRlZmF1bHQ6CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MWYpOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDE1KTsKKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MWYpOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDE1KTsKKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJbG9jayA9IHN0djA5MDBfZ2V0X2RlbW9kX2xvY2soaV9wYXJhbXMsIGRlbW9kLCBkZW1vZF90aW1lb3V0KTsKKwkJCX0gZWxzZQorCQkJCWxvY2sgPSBGQUxTRTsKKwkJfSBlbHNlIHsKKwkJCWlmIChzcmF0ZSA8PSA0MDAwMDAwKQorCQkJCWN1cnJpZXJfc3RlcCA9IDEwMDA7CisJCQllbHNlIGlmIChzcmF0ZSA8PSA3MDAwMDAwKQorCQkJCWN1cnJpZXJfc3RlcCA9IDIwMDA7CisJCQllbHNlIGlmIChzcmF0ZSA8PSAxMDAwMDAwMCkKKwkJCQljdXJyaWVyX3N0ZXAgPSAzMDAwOworCQkJZWxzZQorCQkJCWN1cnJpZXJfc3RlcCA9IDUwMDA7CisKKwkJCW5iX3N0ZXBzID0gKChzZWFyY2hfcmFuZ2UgLyAxMDAwKSAvIGN1cnJpZXJfc3RlcCk7CisJCQluYl9zdGVwcyAvPSAyOworCQkJbmJfc3RlcHMgPSAoMiAqIChuYl9zdGVwcyArIDEpKTsKKwkJCWlmIChuYl9zdGVwcyA8IDApCisJCQkJbmJfc3RlcHMgPSAyOworCQkJZWxzZSBpZiAobmJfc3RlcHMgPiAxMikKKwkJCQluYl9zdGVwcyA9IDEyOworCisJCQljdXJyZW50X3N0ZXAgPSAxOworCQkJZGlyZWN0aW9uID0gMTsKKwkJCXRpbWVvdXQgPSAoZGVtb2RfdGltZW91dCAvIDMpOworCQkJaWYgKHRpbWVvdXQgPiAxMDAwKQorCQkJCXRpbWVvdXQgPSAxMDAwOworCisJCQlzd2l0Y2ggKGRlbW9kKSB7CisJCQljYXNlIFNUVjA5MDBfREVNT0RfMToKKwkJCWRlZmF1bHQ6CisJCQkJaWYgKGxvY2sgPT0gRkFMU0UpIHsKKwkJCQkJdHVuZXJfZnJlcSA9IGlfcGFyYW1zLT50dW5lcjFfZnJlcTsKKwkJCQkJaV9wYXJhbXMtPnR1bmVyMV9idyA9IHN0djA5MDBfY2Fycmllcl93aWR0aChpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSwgaV9wYXJhbXMtPnJvbGxvZmYpICsgaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGU7CisKKwkJCQkJd2hpbGUgKChjdXJyZW50X3N0ZXAgPD0gbmJfc3RlcHMpICYmIChsb2NrID09IEZBTFNFKSkgeworCisJCQkJCQlpZiAoZGlyZWN0aW9uID4gMCkKKwkJCQkJCQl0dW5lcl9mcmVxICs9IChjdXJyZW50X3N0ZXAgKiBjdXJyaWVyX3N0ZXApOworCQkJCQkJZWxzZQorCQkJCQkJCXR1bmVyX2ZyZXEgLT0gKGN1cnJlbnRfc3RlcCAqIGN1cnJpZXJfc3RlcCk7CisKKwkJCQkJCXN0djA5MDBfc2V0X3R1bmVyKGZlLCB0dW5lcl9mcmVxLCBpX3BhcmFtcy0+dHVuZXIxX2J3KTsKKwkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MUMpOworCQkJCQkJaWYgKGlfcGFyYW1zLT5kbWQxX3NyY2hfc3RhbmRhcmQgPT0gU1RWMDkwMF9TRUFSQ0hfRFZCUzIpIHsKKwkJCQkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMxX0VOQUJMRSwgMCk7CisJCQkJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9EVkJTMl9FTkFCTEUsIDApOworCQkJCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzFfRU5BQkxFLCAxKTsKKwkJCQkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMyX0VOQUJMRSwgMSk7CisJCQkJCQl9CisKKwkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMSwgMCk7CisJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDAsIDApOworCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxRik7CisJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDE1KTsKKwkJCQkJCWxvY2sgPSBzdHYwOTAwX2dldF9kZW1vZF9sb2NrKGlfcGFyYW1zLCBkZW1vZCwgdGltZW91dCk7CisJCQkJCQlkaXJlY3Rpb24gKj0gLTE7CisJCQkJCQljdXJyZW50X3N0ZXArKzsKKwkJCQkJfQorCQkJCX0KKwkJCQlicmVhazsKKwkJCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQkJCWlmIChsb2NrID09IEZBTFNFKSB7CisJCQkJCXR1bmVyX2ZyZXEgPSBpX3BhcmFtcy0+dHVuZXIyX2ZyZXE7CisJCQkJCWlfcGFyYW1zLT50dW5lcjJfYncgPSBzdHYwOTAwX2NhcnJpZXJfd2lkdGgoc3JhdGUsIGlfcGFyYW1zLT5yb2xsb2ZmKSArIHNyYXRlOworCisJCQkJCXdoaWxlICgoY3VycmVudF9zdGVwIDw9IG5iX3N0ZXBzKSAmJiAobG9jayA9PSBGQUxTRSkpIHsKKworCQkJCQkJaWYgKGRpcmVjdGlvbiA+IDApCisJCQkJCQkJdHVuZXJfZnJlcSArPSAoY3VycmVudF9zdGVwICogY3Vycmllcl9zdGVwKTsKKwkJCQkJCWVsc2UKKwkJCQkJCQl0dW5lcl9mcmVxIC09IChjdXJyZW50X3N0ZXAgKiBjdXJyaWVyX3N0ZXApOworCisJCQkJCQlzdHYwOTAwX3NldF90dW5lcihmZSwgdHVuZXJfZnJlcSwgaV9wYXJhbXMtPnR1bmVyMl9idyk7CisJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDFDKTsKKwkJCQkJCWlmIChpX3BhcmFtcy0+ZG1kMl9zcmNoX3N0bmRyZCA9PSBTVFYwOTAwX1NFQVJDSF9EVkJTMikgeworCQkJCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzFfRU5BQkxFLCAwKTsKKwkJCQkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMyX0VOQUJMRSwgMCk7CisJCQkJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMV9FTkFCTEUsIDEpOworCQkJCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzJfRU5BQkxFLCAxKTsKKwkJCQkJCX0KKworCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUklOSVQxLCAwKTsKKwkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMCwgMCk7CisJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDFGKTsKKwkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURJU1RBVEUsIDB4MTUpOworCQkJCQkJbG9jayA9IHN0djA5MDBfZ2V0X2RlbW9kX2xvY2soaV9wYXJhbXMsIGRlbW9kLCB0aW1lb3V0KTsKKwkJCQkJCWRpcmVjdGlvbiAqPSAtMTsKKwkJCQkJCWN1cnJlbnRfc3RlcCsrOworCQkJCQl9CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisJfQorCisJcmV0dXJuCWxvY2s7Cit9CisKK3N0YXRpYyB2b2lkIHN0djA5MDBfZ2V0X2xvY2tfdGltZW91dChzMzIgKmRlbW9kX3RpbWVvdXQsIHMzMiAqZmVjX3RpbWVvdXQsCisJCQkJCXMzMiBzcmF0ZSwKKwkJCQkJZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9hbGdvIGFsZ28pCit7CisJc3dpdGNoIChhbGdvKSB7CisJY2FzZSBTVFYwOTAwX0JMSU5EX1NFQVJDSDoKKwkJaWYgKHNyYXRlIDw9IDE1MDAwMDApIHsKKwkJCSgqZGVtb2RfdGltZW91dCkgPSAxNTAwOworCQkJKCpmZWNfdGltZW91dCkgPSA0MDA7CisJCX0gZWxzZSBpZiAoc3JhdGUgPD0gNTAwMDAwMCkgeworCQkJKCpkZW1vZF90aW1lb3V0KSA9IDEwMDA7CisJCQkoKmZlY190aW1lb3V0KSA9IDMwMDsKKwkJfSBlbHNlIHsKKwkJCSgqZGVtb2RfdGltZW91dCkgPSA3MDA7CisJCQkoKmZlY190aW1lb3V0KSA9IDEwMDsKKwkJfQorCisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9DT0xEX1NUQVJUOgorCWNhc2UgU1RWMDkwMF9XQVJNX1NUQVJUOgorCWRlZmF1bHQ6CisJCWlmIChzcmF0ZSA8PSAxMDAwMDAwKSB7CisJCQkoKmRlbW9kX3RpbWVvdXQpID0gMzAwMDsKKwkJCSgqZmVjX3RpbWVvdXQpID0gMTcwMDsKKwkJfSBlbHNlIGlmIChzcmF0ZSA8PSAyMDAwMDAwKSB7CisJCQkoKmRlbW9kX3RpbWVvdXQpID0gMjUwMDsKKwkJCSgqZmVjX3RpbWVvdXQpID0gMTEwMDsKKwkJfSBlbHNlIGlmIChzcmF0ZSA8PSA1MDAwMDAwKSB7CisJCQkoKmRlbW9kX3RpbWVvdXQpID0gMTAwMDsKKwkJCSgqZmVjX3RpbWVvdXQpID0gNTUwOworCQl9IGVsc2UgaWYgKHNyYXRlIDw9IDEwMDAwMDAwKSB7CisJCQkoKmRlbW9kX3RpbWVvdXQpID0gNzAwOworCQkJKCpmZWNfdGltZW91dCkgPSAyNTA7CisJCX0gZWxzZSBpZiAoc3JhdGUgPD0gMjAwMDAwMDApIHsKKwkJCSgqZGVtb2RfdGltZW91dCkgPSA0MDA7CisJCQkoKmZlY190aW1lb3V0KSA9IDEzMDsKKwkJfQorCisJCWVsc2UgeworCQkJKCpkZW1vZF90aW1lb3V0KSA9IDMwMDsKKwkJCSgqZmVjX3RpbWVvdXQpID0gMTAwOworCQl9CisKKwkJYnJlYWs7CisKKwl9CisKKwlpZiAoYWxnbyA9PSBTVFYwOTAwX1dBUk1fU1RBUlQpCisJCSgqZGVtb2RfdGltZW91dCkgLz0gMjsKK30KKworc3RhdGljIHZvaWQgc3R2MDkwMF9zZXRfdml0ZXJiaV90cmFjcShzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisKKwlzMzIgdnRoX3JlZzsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJZG1kX3JlZyh2dGhfcmVnLCBSMDkwMF9QMV9WVEgxMiwgUjA5MDBfUDJfVlRIMTIpOworCisJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHZ0aF9yZWcrKywgMHhkMCk7CisJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHZ0aF9yZWcrKywgMHg3ZCk7CisJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHZ0aF9yZWcrKywgMHg1Myk7CisJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHZ0aF9yZWcrKywgMHgyRik7CisJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHZ0aF9yZWcrKywgMHgyNCk7CisJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHZ0aF9yZWcrKywgMHgxRik7Cit9CisKK3N0YXRpYyB2b2lkIHN0djA5MDBfc2V0X3ZpdGVyYmlfc3RhbmRhcmQoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCSAgIGVudW0gZmVfc3R2MDkwMF9zZWFyY2hfc3RhbmRhcmQgU3RhbmRhcmQsCisJCQkJICAgZW51bSBmZV9zdHYwOTAwX2ZlYyBQdW5jdHVyZVJhdGUsCisJCQkJICAgZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKworCXMzMiBmZWNtUmVnLAorCXBydml0UmVnOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzOiBWaXRlcmJpU3RhbmRhcmQgPSAiLCBfX2Z1bmNfXyk7CisKKwlzd2l0Y2ggKGRlbW9kKSB7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJZGVmYXVsdDoKKwkJZmVjbVJlZyA9IFIwOTAwX1AxX0ZFQ007CisJCXBydml0UmVnID0gUjA5MDBfUDFfUFJWSVQ7CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQlmZWNtUmVnID0gUjA5MDBfUDJfRkVDTTsKKwkJcHJ2aXRSZWcgPSBSMDkwMF9QMl9QUlZJVDsKKwkJYnJlYWs7CisJfQorCisJc3dpdGNoIChTdGFuZGFyZCkgeworCWNhc2UgU1RWMDkwMF9BVVRPX1NFQVJDSDoKKwkJZHByaW50aygiQXV0b1xuIik7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBmZWNtUmVnLCAweDEwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHBydml0UmVnLCAweDNGKTsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX1NFQVJDSF9EVkJTMToKKwkJZHByaW50aygiRFZCUzFcbiIpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgZmVjbVJlZywgMHgwMCk7CisJCXN3aXRjaCAoUHVuY3R1cmVSYXRlKSB7CisJCWNhc2UgU1RWMDkwMF9GRUNfVU5LTk9XTjoKKwkJZGVmYXVsdDoKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBwcnZpdFJlZywgMHgyRik7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0ZFQ18xXzI6CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgcHJ2aXRSZWcsIDB4MDEpOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9GRUNfMl8zOgorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHBydml0UmVnLCAweDAyKTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfRkVDXzNfNDoKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBwcnZpdFJlZywgMHgwNCk7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0ZFQ181XzY6CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgcHJ2aXRSZWcsIDB4MDgpOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9GRUNfN184OgorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHBydml0UmVnLCAweDIwKTsKKwkJCWJyZWFrOworCQl9CisKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX1NFQVJDSF9EU1M6CisJCWRwcmludGsoIkRTU1xuIik7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBmZWNtUmVnLCAweDgwKTsKKwkJc3dpdGNoIChQdW5jdHVyZVJhdGUpIHsKKwkJY2FzZSBTVFYwOTAwX0ZFQ19VTktOT1dOOgorCQlkZWZhdWx0OgorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHBydml0UmVnLCAweDEzKTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfRkVDXzFfMjoKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBwcnZpdFJlZywgMHgwMSk7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0ZFQ18yXzM6CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgcHJ2aXRSZWcsIDB4MDIpOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9GRUNfNl83OgorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHBydml0UmVnLCAweDEwKTsKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KK30KKworc3RhdGljIHZvaWQgc3R2MDkwMF90cmFja19vcHRpbWl6YXRpb24oc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zID0gc3RhdGUtPmludGVybmFsOworCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QgPSBzdGF0ZS0+ZGVtb2Q7CisKKwlzMzIgc3JhdGUsIHBpbG90cywgYWNsYywgZnJlcTEsIGZyZXEwLAorCQlpID0gMCwgdGltZWQsIHRpbWVmLCBibGluZFR1blN3ID0gMDsKKworCWVudW0gZmVfc3R2MDkwMF9yb2xsb2ZmIHJvbGxvZmY7CisJZW51bSBmZV9zdHYwOTAwX21vZGNvZGUgZm91bmRNb2Rjb2Q7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCXNyYXRlID0gc3R2MDkwMF9nZXRfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBkZW1vZCk7CisJc3JhdGUgKz0gc3R2MDkwMF9nZXRfdGltaW5nX29mZnN0KGlfcGFyYW1zLCBzcmF0ZSwgZGVtb2QpOworCisJc3dpdGNoIChkZW1vZCkgeworCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCWRlZmF1bHQ6CisJCXN3aXRjaCAoaV9wYXJhbXMtPmRtZDFfcnNsdHMuc3RhbmRhcmQpIHsKKwkJY2FzZSBTVFYwOTAwX0RWQlMxX1NUQU5EQVJEOgorCQkJaWYgKGlfcGFyYW1zLT5kbWQxX3NyY2hfc3RhbmRhcmQgPT0gU1RWMDkwMF9BVVRPX1NFQVJDSCkgeworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzFfRU5BQkxFLCAxKTsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMyX0VOQUJMRSwgMCk7CisJCQl9CisKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfUk9MTE9GRl9DT05UUk9MLCBpX3BhcmFtcy0+cm9sbG9mZik7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX01BTlVBTF9ST0xMT0ZGLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9FUlJDVFJMMSwgMHg3NSk7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0RTU19TVEFOREFSRDoKKwkJCWlmIChpX3BhcmFtcy0+ZG1kMV9zcmNoX3N0YW5kYXJkID09IFNUVjA5MDBfQVVUT19TRUFSQ0gpIHsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMxX0VOQUJMRSwgMSk7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9EVkJTMl9FTkFCTEUsIDApOworCQkJfQorCisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1JPTExPRkZfQ09OVFJPTCwgaV9wYXJhbXMtPnJvbGxvZmYpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9NQU5VQUxfUk9MTE9GRiwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRVJSQ1RSTDEsIDB4NzUpOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9EVkJTMl9TVEFOREFSRDoKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzFfRU5BQkxFLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfRFZCUzJfRU5BQkxFLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BQ0xDLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9CQ0xDLCAwKTsKKwkJCWlmIChpX3BhcmFtcy0+ZG1kMV9yc2x0cy5mcmFtZV9sZW5ndGggPT0gU1RWMDkwMF9MT05HX0ZSQU1FKSB7CisJCQkJZm91bmRNb2Rjb2QgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9ERU1PRF9NT0RDT0QpOworCQkJCXBpbG90cyA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RFTU9EX1RZUEUpICYgMHgwMTsKKwkJCQlhY2xjID0gc3R2MDkwMF9nZXRfb3B0aW1fY2Fycl9sb29wKHNyYXRlLCBmb3VuZE1vZGNvZCwgcGlsb3RzLCBpX3BhcmFtcy0+Y2hpcF9pZCk7CisJCQkJaWYgKGZvdW5kTW9kY29kIDw9IFNUVjA5MDBfUVBTS185MTApCisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BQ0xDMlMyUSwgYWNsYyk7CisJCQkJZWxzZSBpZiAoZm91bmRNb2Rjb2QgPD0gU1RWMDkwMF84UFNLXzkxMCkgeworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUNMQzJTMlEsIDB4MmEpOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUNMQzJTMjgsIGFjbGMpOworCQkJCX0KKworCQkJCWlmICgoaV9wYXJhbXMtPmRlbW9kX21vZGUgPT0gU1RWMDkwMF9TSU5HTEUpICYmIChmb3VuZE1vZGNvZCA+IFNUVjA5MDBfOFBTS185MTApKSB7CisJCQkJCWlmIChmb3VuZE1vZGNvZCA8PSBTVFYwOTAwXzE2QVBTS185MTApIHsKKwkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BQ0xDMlMyUSwgMHgyYSk7CisJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUNMQzJTMjE2QSwgYWNsYyk7CisJCQkJCX0gZWxzZSBpZiAoZm91bmRNb2Rjb2QgPD0gU1RWMDkwMF8zMkFQU0tfOTEwKSB7CisJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUNMQzJTMlEsIDB4MmEpOworCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FDTEMyUzIzMkEsIGFjbGMpOworCQkJCQl9CisJCQkJfQorCisJCQl9IGVsc2UgeworCQkJCWFjbGMgPSBzdHYwOTAwX2dldF9vcHRpbV9zaG9ydF9jYXJyX2xvb3Aoc3JhdGUsIGlfcGFyYW1zLT5kbWQxX3JzbHRzLm1vZHVsYXRpb24sIGlfcGFyYW1zLT5jaGlwX2lkKTsKKwkJCQlpZiAoaV9wYXJhbXMtPmRtZDFfcnNsdHMubW9kdWxhdGlvbiA9PSBTVFYwOTAwX1FQU0spCisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BQ0xDMlMyUSwgYWNsYyk7CisKKwkJCQllbHNlIGlmIChpX3BhcmFtcy0+ZG1kMV9yc2x0cy5tb2R1bGF0aW9uID09IFNUVjA5MDBfOFBTSykgeworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUNMQzJTMlEsIDB4MmEpOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUNMQzJTMjgsIGFjbGMpOworCQkJCX0gZWxzZSBpZiAoaV9wYXJhbXMtPmRtZDFfcnNsdHMubW9kdWxhdGlvbiA9PSBTVFYwOTAwXzE2QVBTSykgeworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUNMQzJTMlEsIDB4MmEpOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUNMQzJTMjE2QSwgYWNsYyk7CisJCQkJfSBlbHNlIGlmIChpX3BhcmFtcy0+ZG1kMV9yc2x0cy5tb2R1bGF0aW9uID09IFNUVjA5MDBfMzJBUFNLKSB7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BQ0xDMlMyUSwgMHgyYSk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BQ0xDMlMyMzJBLCBhY2xjKTsKKwkJCQl9CisKKwkJCX0KKworCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkIDw9IDB4MTEpIHsKKwkJCQlpZiAoaV9wYXJhbXMtPmRlbW9kX21vZGUgIT0gU1RWMDkwMF9TSU5HTEUpCisJCQkJCXN0djA5MDBfYWN0aXZhdGVfczJfbW9kY29kZShpX3BhcmFtcywgZGVtb2QpOworCisJCQl9CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9FUlJDVFJMMSwgMHg2Nyk7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX1VOS05PV05fU1RBTkRBUkQ6CisJCWRlZmF1bHQ6CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMxX0VOQUJMRSwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMyX0VOQUJMRSwgMSk7CisJCQlicmVhazsKKwkJfQorCisJCWZyZXExID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSMik7CisJCWZyZXEwID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSMSk7CisJCXJvbGxvZmYgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9ST0xMT0ZGX1NUQVRVUyk7CisJCWlmIChpX3BhcmFtcy0+ZG1kMV9zcmNoX2FsZ28gPT0gU1RWMDkwMF9CTElORF9TRUFSQ0gpIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJTVEVQLCAweDAwKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfU0NBTl9FTkFCTEUsIDApOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9DRlJfQVVUT1NDQU4sIDApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR0NGRzIsIDB4MDEpOworCQkJc3R2MDkwMF9zZXRfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBzcmF0ZSwgZGVtb2QpOworCQkJc3R2MDkwMF9zZXRfbWF4X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgc3JhdGUsIGRlbW9kKTsKKwkJCXN0djA5MDBfc2V0X21pbl9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIHNyYXRlLCBkZW1vZCk7CisJCQlibGluZFR1blN3ID0gMTsKKwkJfQorCisJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKSB7CisJCQlpZiAoKGlfcGFyYW1zLT5kbWQxX3NyY2hfc3RhbmRhcmQgPT0gU1RWMDkwMF9TRUFSQ0hfRFZCUzEpIHx8IChpX3BhcmFtcy0+ZG1kMV9zcmNoX3N0YW5kYXJkID09IFNUVjA5MDBfU0VBUkNIX0RTUykgfHwgKGlfcGFyYW1zLT5kbWQxX3NyY2hfc3RhbmRhcmQgPT0gU1RWMDkwMF9BVVRPX1NFQVJDSCkpIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVkFWU1JWSVQsIDB4MGEpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9WSVRTQ0FMRSwgMHgwKTsKKwkJCX0KKwkJfQorCisJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA8IDB4MjApCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSSERSLCAweDA4KTsKKworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPT0gMHgxMCkKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DT1JSRUxFWFAsIDB4MEEpOworCisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BR0MyUkVGLCAweDM4KTsKKworCQlpZiAoKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHx8IChibGluZFR1blN3ID09IDEpIHx8IChpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSA8IDEwMDAwMDAwKSkgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQxLCBmcmVxMSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDAsIGZyZXEwKTsKKwkJCWlfcGFyYW1zLT50dW5lcjFfYncgPSBzdHYwOTAwX2NhcnJpZXJfd2lkdGgoc3JhdGUsIGlfcGFyYW1zLT5yb2xsb2ZmKSArIDEwMDAwMDAwOworCisJCQlpZiAoKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHx8IChibGluZFR1blN3ID09IDEpKSB7CisJCQkJaWYgKGlfcGFyYW1zLT5kbWQxX3NyY2hfYWxnbyAhPSBTVFYwOTAwX1dBUk1fU1RBUlQpCisJCQkJCXN0djA5MDBfc2V0X2JhbmR3aWR0aChmZSwgaV9wYXJhbXMtPnR1bmVyMV9idyk7CisJCQl9CisKKwkJCWlmICgoaV9wYXJhbXMtPmRtZDFfc3JjaF9hbGdvID09IFNUVjA5MDBfQkxJTkRfU0VBUkNIKSB8fCAoaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUgPCAxMDAwMDAwMCkpCisJCQkJbXNsZWVwKDUwKTsKKwkJCWVsc2UKKwkJCQltc2xlZXAoNSk7CisKKwkJCXN0djA5MDBfZ2V0X2xvY2tfdGltZW91dCgmdGltZWQsICZ0aW1lZiwgc3JhdGUsIFNUVjA5MDBfV0FSTV9TVEFSVCk7CisKKwkJCWlmIChzdHYwOTAwX2dldF9kZW1vZF9sb2NrKGlfcGFyYW1zLCBkZW1vZCwgdGltZWQgLyAyKSA9PSBGQUxTRSkgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MUYpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMSwgZnJlcTEpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMCwgZnJlcTApOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MTgpOworCQkJCWkgPSAwOworCQkJCXdoaWxlICgoc3R2MDkwMF9nZXRfZGVtb2RfbG9jayhpX3BhcmFtcywgZGVtb2QsIHRpbWVkIC8gMikgPT0gRkFMU0UpICYmIChpIDw9IDIpKSB7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MUYpOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDEsIGZyZXExKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQwLCBmcmVxMCk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MTgpOworCQkJCQlpKys7CisJCQkJfQorCQkJfQorCisJCX0KKworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVJGUkVRLCAweDQ5KTsKKworCQlpZiAoKGlfcGFyYW1zLT5kbWQxX3JzbHRzLnN0YW5kYXJkID09IFNUVjA5MDBfRFZCUzFfU1RBTkRBUkQpIHx8IChpX3BhcmFtcy0+ZG1kMV9yc2x0cy5zdGFuZGFyZCA9PSBTVFYwOTAwX0RTU19TVEFOREFSRCkpCisJCQlzdHYwOTAwX3NldF92aXRlcmJpX3RyYWNxKGlfcGFyYW1zLCBkZW1vZCk7CisKKwkJYnJlYWs7CisKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJc3dpdGNoIChpX3BhcmFtcy0+ZG1kMl9yc2x0cy5zdGFuZGFyZCkgeworCQljYXNlIFNUVjA5MDBfRFZCUzFfU1RBTkRBUkQ6CisKKwkJCWlmIChpX3BhcmFtcy0+ZG1kMl9zcmNoX3N0bmRyZCA9PSBTVFYwOTAwX0FVVE9fU0VBUkNIKSB7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMV9FTkFCTEUsIDEpOworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzJfRU5BQkxFLCAwKTsKKwkJCX0KKworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9ST0xMT0ZGX0NPTlRST0wsIGlfcGFyYW1zLT5yb2xsb2ZmKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfTUFOVUFMX1JPTExPRkYsIDEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0VSUkNUUkwxLCAweDc1KTsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfRFNTX1NUQU5EQVJEOgorCQkJaWYgKGlfcGFyYW1zLT5kbWQyX3NyY2hfc3RuZHJkID09IFNUVjA5MDBfQVVUT19TRUFSQ0gpIHsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMxX0VOQUJMRSwgMSk7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMl9FTkFCTEUsIDApOworCQkJfQorCisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1JPTExPRkZfQ09OVFJPTCwgaV9wYXJhbXMtPnJvbGxvZmYpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9NQU5VQUxfUk9MTE9GRiwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRVJSQ1RSTDEsIDB4NzUpOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9EVkJTMl9TVEFOREFSRDoKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzFfRU5BQkxFLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzJfRU5BQkxFLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9CQ0xDLCAwKTsKKwkJCWlmIChpX3BhcmFtcy0+ZG1kMl9yc2x0cy5mcmFtZV9sZW5ndGggPT0gU1RWMDkwMF9MT05HX0ZSQU1FKSB7CisJCQkJZm91bmRNb2Rjb2QgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9ERU1PRF9NT0RDT0QpOworCQkJCXBpbG90cyA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RFTU9EX1RZUEUpICYgMHgwMTsKKwkJCQlhY2xjID0gc3R2MDkwMF9nZXRfb3B0aW1fY2Fycl9sb29wKHNyYXRlLCBmb3VuZE1vZGNvZCwgcGlsb3RzLCBpX3BhcmFtcy0+Y2hpcF9pZCk7CisJCQkJaWYgKGZvdW5kTW9kY29kIDw9IFNUVjA5MDBfUVBTS185MTApCisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDMlMyUSwgYWNsYyk7CisJCQkJZWxzZSBpZiAoZm91bmRNb2Rjb2QgPD0gU1RWMDkwMF84UFNLXzkxMCkgeworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUNMQzJTMlEsIDB4MmEpOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUNMQzJTMjgsIGFjbGMpOworCQkJCX0KKworCQkJCWlmICgoaV9wYXJhbXMtPmRlbW9kX21vZGUgPT0gU1RWMDkwMF9TSU5HTEUpICYmIChmb3VuZE1vZGNvZCA+IFNUVjA5MDBfOFBTS185MTApKSB7CisJCQkJCWlmIChmb3VuZE1vZGNvZCA8PSBTVFYwOTAwXzE2QVBTS185MTApIHsKKwkJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDMlMyUSwgMHgyYSk7CisJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUNMQzJTMjE2QSwgYWNsYyk7CisJCQkJCX0gZWxzZSBpZiAoZm91bmRNb2Rjb2QgPD0gU1RWMDkwMF8zMkFQU0tfOTEwKSB7CisJCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUNMQzJTMlEsIDB4MmEpOworCQkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FDTEMyUzIzMkEsIGFjbGMpOworCQkJCQl9CisKKwkJCQl9CisKKwkJCX0gZWxzZSB7CisJCQkJYWNsYyA9IHN0djA5MDBfZ2V0X29wdGltX3Nob3J0X2NhcnJfbG9vcChzcmF0ZSwKKwkJCQkJCQkJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLm1vZHVsYXRpb24sCisJCQkJCQkJCQlpX3BhcmFtcy0+Y2hpcF9pZCk7CisKKwkJCQlpZiAoaV9wYXJhbXMtPmRtZDJfcnNsdHMubW9kdWxhdGlvbiA9PSBTVFYwOTAwX1FQU0spCisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDMlMyUSwgYWNsYyk7CisKKwkJCQllbHNlIGlmIChpX3BhcmFtcy0+ZG1kMl9yc2x0cy5tb2R1bGF0aW9uID09IFNUVjA5MDBfOFBTSykgeworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUNMQzJTMlEsIDB4MmEpOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUNMQzJTMjgsIGFjbGMpOworCQkJCX0gZWxzZSBpZiAoaV9wYXJhbXMtPmRtZDJfcnNsdHMubW9kdWxhdGlvbiA9PSBTVFYwOTAwXzE2QVBTSykgeworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUNMQzJTMlEsIDB4MmEpOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUNMQzJTMjE2QSwgYWNsYyk7CisJCQkJfSBlbHNlIGlmIChpX3BhcmFtcy0+ZG1kMl9yc2x0cy5tb2R1bGF0aW9uID09IFNUVjA5MDBfMzJBUFNLKSB7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDMlMyUSwgMHgyYSk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BQ0xDMlMyMzJBLCBhY2xjKTsKKwkJCQl9CisJCQl9CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9FUlJDVFJMMSwgMHg2Nyk7CisKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfVU5LTk9XTl9TVEFOREFSRDoKKwkJZGVmYXVsdDoKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzFfRU5BQkxFLCAxKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfRFZCUzJfRU5BQkxFLCAxKTsKKwkJCWJyZWFrOworCQl9CisKKwkJZnJlcTEgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlIyKTsKKwkJZnJlcTAgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlIxKTsKKwkJcm9sbG9mZiA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1JPTExPRkZfU1RBVFVTKTsKKwkJaWYgKGlfcGFyYW1zLT5kbWQyX3NyY2hfYWxnbyA9PSBTVFYwOTAwX0JMSU5EX1NFQVJDSCkgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUlNURVAsIDB4MDApOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9TQ0FOX0VOQUJMRSwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0NGUl9BVVRPU0NBTiwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HQ0ZHMiwgMHgwMSk7CisJCQlzdHYwOTAwX3NldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIHNyYXRlLCBkZW1vZCk7CisJCQlzdHYwOTAwX3NldF9tYXhfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBzcmF0ZSwgZGVtb2QpOworCQkJc3R2MDkwMF9zZXRfbWluX3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgc3JhdGUsIGRlbW9kKTsKKwkJCWJsaW5kVHVuU3cgPSAxOworCQl9CisKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHsKKwkJCWlmICgoaV9wYXJhbXMtPmRtZDJfc3JjaF9zdG5kcmQgPT0gU1RWMDkwMF9TRUFSQ0hfRFZCUzEpIHx8IChpX3BhcmFtcy0+ZG1kMl9zcmNoX3N0bmRyZCA9PSBTVFYwOTAwX1NFQVJDSF9EU1MpIHx8IChpX3BhcmFtcy0+ZG1kMl9zcmNoX3N0bmRyZCA9PSBTVFYwOTAwX0FVVE9fU0VBUkNIKSkgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9WQVZTUlZJVCwgMHgwYSk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1ZJVFNDQUxFLCAweDApOworCQkJfQorCQl9CisKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkIDwgMHgyMCkKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJIRFIsIDB4MDgpOworCisJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA9PSAweDEwKQorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NPUlJFTEVYUCwgMHgwYSk7CisKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FHQzJSRUYsIDB4MzgpOworCQlpZiAoKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHx8IChibGluZFR1blN3ID09IDEpIHx8IChpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSA8IDEwMDAwMDAwKSkgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUklOSVQxLCBmcmVxMSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDAsIGZyZXEwKTsKKwkJCWlfcGFyYW1zLT50dW5lcjJfYncgPSBzdHYwOTAwX2NhcnJpZXJfd2lkdGgoc3JhdGUsIGlfcGFyYW1zLT5yb2xsb2ZmKSArIDEwMDAwMDAwOworCisJCQlpZiAoKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHx8IChibGluZFR1blN3ID09IDEpKSB7CisJCQkJaWYgKGlfcGFyYW1zLT5kbWQyX3NyY2hfYWxnbyAhPSBTVFYwOTAwX1dBUk1fU1RBUlQpCisJCQkJCXN0djA5MDBfc2V0X2JhbmR3aWR0aChmZSwgaV9wYXJhbXMtPnR1bmVyMl9idyk7CisJCQl9CisKKwkJCWlmICgoaV9wYXJhbXMtPmRtZDJfc3JjaF9hbGdvID09IFNUVjA5MDBfQkxJTkRfU0VBUkNIKSB8fCAoaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUgPCAxMDAwMDAwMCkpCisJCQkJbXNsZWVwKDUwKTsKKwkJCWVsc2UKKwkJCQltc2xlZXAoNSk7CisKKwkJCXN0djA5MDBfZ2V0X2xvY2tfdGltZW91dCgmdGltZWQsICZ0aW1lZiwgc3JhdGUsIFNUVjA5MDBfV0FSTV9TVEFSVCk7CisJCQlpZiAoc3R2MDkwMF9nZXRfZGVtb2RfbG9jayhpX3BhcmFtcywgZGVtb2QsIHRpbWVkIC8gMikgPT0gRkFMU0UpIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDFGKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDEsIGZyZXExKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDAsIGZyZXEwKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDE4KTsKKwkJCQlpID0gMDsKKwkJCQl3aGlsZSAoKHN0djA5MDBfZ2V0X2RlbW9kX2xvY2soaV9wYXJhbXMsIGRlbW9kLCB0aW1lZCAvIDIpID09IEZBTFNFKSAmJiAoaSA8PSAyKSkgeworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDFGKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUklOSVQxLCBmcmVxMSk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMCwgZnJlcTApOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDE4KTsKKwkJCQkJaSsrOworCQkJCX0KKwkJCX0KKwkJfQorCisJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKQorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkZSRVEsIDB4NDkpOworCisJCWlmICgoaV9wYXJhbXMtPmRtZDJfcnNsdHMuc3RhbmRhcmQgPT0gU1RWMDkwMF9EVkJTMV9TVEFOREFSRCkgfHwgKGlfcGFyYW1zLT5kbWQyX3JzbHRzLnN0YW5kYXJkID09IFNUVjA5MDBfRFNTX1NUQU5EQVJEKSkKKwkJCXN0djA5MDBfc2V0X3ZpdGVyYmlfdHJhY3EoaV9wYXJhbXMsIGRlbW9kKTsKKworCQlicmVhazsKKwl9Cit9CisKK3N0YXRpYyBpbnQgc3R2MDkwMF9nZXRfZmVjX2xvY2soc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLCBlbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kLCBzMzIgdGltZV9vdXQpCit7CisJczMyIHRpbWVyID0gMCwgbG9jayA9IDAsIGhlYWRlcl9maWVsZCwgcGt0ZGVsaW5fZmllbGQsIGxvY2tfdml0X2ZpZWxkOworCisJZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9zdGF0ZSBkbWRfc3RhdGU7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCWRtZF9yZWcoaGVhZGVyX2ZpZWxkLCBGMDkwMF9QMV9IRUFERVJfTU9ERSwgRjA5MDBfUDJfSEVBREVSX01PREUpOworCWRtZF9yZWcocGt0ZGVsaW5fZmllbGQsIEYwOTAwX1AxX1BLVERFTElOX0xPQ0ssIEYwOTAwX1AyX1BLVERFTElOX0xPQ0spOworCWRtZF9yZWcobG9ja192aXRfZmllbGQsIEYwOTAwX1AxX0xPQ0tFRFZJVCwgRjA5MDBfUDJfTE9DS0VEVklUKTsKKworCWRtZF9zdGF0ZSA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGhlYWRlcl9maWVsZCk7CisKKwl3aGlsZSAoKHRpbWVyIDwgdGltZV9vdXQpICYmIChsb2NrID09IDApKSB7CisJCXN3aXRjaCAoZG1kX3N0YXRlKSB7CisJCWNhc2UgU1RWMDkwMF9TRUFSQ0g6CisJCWNhc2UgU1RWMDkwMF9QTEhfREVURUNURUQ6CisJCWRlZmF1bHQ6CisJCQlsb2NrID0gMDsKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfRFZCUzJfRk9VTkQ6CisJCQlsb2NrID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgcGt0ZGVsaW5fZmllbGQpOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9EVkJTX0ZPVU5EOgorCQkJbG9jayA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIGxvY2tfdml0X2ZpZWxkKTsKKwkJCWJyZWFrOworCQl9CisKKwkJaWYgKGxvY2sgPT0gMCkgeworCQkJbXNsZWVwKDEwKTsKKwkJCXRpbWVyICs9IDEwOworCQl9CisJfQorCisJaWYgKGxvY2spCisJCWRwcmludGsoIkRFTU9EIEZFQyBMT0NLIE9LXG4iKTsKKwllbHNlCisJCWRwcmludGsoIkRFTU9EIEZFQyBMT0NLIEZBSUxcbiIpOworCisJcmV0dXJuIGxvY2s7Cit9CisKK3N0YXRpYyBpbnQgc3R2MDkwMF93YWl0X2Zvcl9sb2NrKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kLAorCQkJCXMzMiBkbWRfdGltZW91dCwgczMyIGZlY190aW1lb3V0KQoreworCisJczMyIHRpbWVyID0gMCwgbG9jayA9IDAsIHN0cl9tZXJnX3JzdF9mbGQsIHN0cl9tZXJnX2xvY2tfZmxkOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlkbWRfcmVnKHN0cl9tZXJnX3JzdF9mbGQsIEYwOTAwX1AxX1JTVF9IV0FSRSwgRjA5MDBfUDJfUlNUX0hXQVJFKTsKKwlkbWRfcmVnKHN0cl9tZXJnX2xvY2tfZmxkLCBGMDkwMF9QMV9UU0ZJRk9fTElORU9LLCBGMDkwMF9QMl9UU0ZJRk9fTElORU9LKTsKKworCWxvY2sgPSBzdHYwOTAwX2dldF9kZW1vZF9sb2NrKGlfcGFyYW1zLCBkZW1vZCwgZG1kX3RpbWVvdXQpOworCisJaWYgKGxvY2spCisJCWxvY2sgPSBsb2NrICYmIHN0djA5MDBfZ2V0X2ZlY19sb2NrKGlfcGFyYW1zLCBkZW1vZCwgZmVjX3RpbWVvdXQpOworCisJaWYgKGxvY2spIHsKKwkJbG9jayA9IDA7CisKKwkJZHByaW50ayhLRVJOX0lORk8gIiVzOiBUaW1lciA9ICVkLCB0aW1lX291dCA9ICVkXG4iLCBfX2Z1bmNfXywgdGltZXIsIGZlY190aW1lb3V0KTsKKworCQl3aGlsZSAoKHRpbWVyIDwgZmVjX3RpbWVvdXQpICYmIChsb2NrID09IDApKSB7CisJCQlsb2NrID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgc3RyX21lcmdfbG9ja19mbGQpOworCQkJbXNsZWVwKDEpOworCQkJdGltZXIrKzsKKwkJfQorCX0KKworCWlmIChsb2NrKQorCQlkcHJpbnRrKEtFUk5fSU5GTyAiJXM6IERFTU9EIExPQ0sgT0tcbiIsIF9fZnVuY19fKTsKKwllbHNlCisJCWRwcmludGsoS0VSTl9JTkZPICIlczogREVNT0QgTE9DSyBGQUlMXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAobG9jaykKKwkJcmV0dXJuIFRSVUU7CisJZWxzZQorCQlyZXR1cm4gRkFMU0U7Cit9CisKK2VudW0gZmVfc3R2MDkwMF90cmFja2luZ19zdGFuZGFyZCBzdHYwOTAwX2dldF9zdGFuZGFyZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zID0gc3RhdGUtPmludGVybmFsOworCWVudW0gZmVfc3R2MDkwMF90cmFja2luZ19zdGFuZGFyZCBmbmRfc3RhbmRhcmQ7CisJczMyIHN0YXRlX2ZpZWxkLAorCWRzc19kdmJfZmllbGQ7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCWRtZF9yZWcoc3RhdGVfZmllbGQsIEYwOTAwX1AxX0hFQURFUl9NT0RFLCBGMDkwMF9QMl9IRUFERVJfTU9ERSk7CisJZG1kX3JlZyhkc3NfZHZiX2ZpZWxkLCBGMDkwMF9QMV9EU1NfRFZCLCBGMDkwMF9QMl9EU1NfRFZCKTsKKworCWlmIChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBzdGF0ZV9maWVsZCkgPT0gMikKKwkJZm5kX3N0YW5kYXJkID0gU1RWMDkwMF9EVkJTMl9TVEFOREFSRDsKKworCWVsc2UgaWYgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIHN0YXRlX2ZpZWxkKSA9PSAzKSB7CisJCWlmIChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBkc3NfZHZiX2ZpZWxkKSA9PSAxKQorCQkJZm5kX3N0YW5kYXJkID0gU1RWMDkwMF9EU1NfU1RBTkRBUkQ7CisJCWVsc2UKKwkJCWZuZF9zdGFuZGFyZCA9IFNUVjA5MDBfRFZCUzFfU1RBTkRBUkQ7CisJfSBlbHNlCisJCWZuZF9zdGFuZGFyZCA9IFNUVjA5MDBfVU5LTk9XTl9TVEFOREFSRDsKKworCXJldHVybiBmbmRfc3RhbmRhcmQ7Cit9CisKK3N0YXRpYyBzMzIgc3R2MDkwMF9nZXRfY2Fycl9mcmVxKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywgdTMyIG1jbGssCisJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisJczMyIGNmcl9maWVsZDIsIGNmcl9maWVsZDEsIGNmcl9maWVsZDAsCisJCWRlcm90LCByZW0xLCByZW0yLCBpbnR2YWwxLCBpbnR2YWwyOworCisJZG1kX3JlZyhjZnJfZmllbGQyLCBGMDkwMF9QMV9DQVJfRlJFUTIsIEYwOTAwX1AyX0NBUl9GUkVRMik7CisJZG1kX3JlZyhjZnJfZmllbGQxLCBGMDkwMF9QMV9DQVJfRlJFUTEsIEYwOTAwX1AyX0NBUl9GUkVRMSk7CisJZG1kX3JlZyhjZnJfZmllbGQwLCBGMDkwMF9QMV9DQVJfRlJFUTAsIEYwOTAwX1AyX0NBUl9GUkVRMCk7CisKKwlkZXJvdCA9IChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBjZnJfZmllbGQyKSA8PCAxNikgKworCQkoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgY2ZyX2ZpZWxkMSkgPDwgOCkgKworCQkoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgY2ZyX2ZpZWxkMCkpOworCisJZGVyb3QgPSBnZTJjb21wKGRlcm90LCAyNCk7CisJaW50dmFsMSA9IG1jbGsgPj4gMTI7CisJaW50dmFsMiA9IGRlcm90ID4+IDEyOworCXJlbTEgPSBtY2xrICUgMHgxMDAwOworCXJlbTIgPSBkZXJvdCAlIDB4MTAwMDsKKwlkZXJvdCA9IChpbnR2YWwxICogaW50dmFsMikgKworCQkoKGludHZhbDEgKiByZW0yKSA+PiAxMikgKworCQkoKGludHZhbDIgKiByZW0xKSA+PiAxMik7CisKKwlyZXR1cm4gZGVyb3Q7Cit9CisKK3N0YXRpYyB1MzIgc3R2MDkwMF9nZXRfdHVuZXJfZnJlcShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kX29wcwkqZnJvbnRlbmRfb3BzID0gTlVMTDsKKwlzdHJ1Y3QgZHZiX3R1bmVyX29wcyAqdHVuZXJfb3BzID0gTlVMTDsKKwl1MzIgZnJlcXVlbmN5ID0gMDsKKworCWlmICgmZmUtPm9wcykKKwkJZnJvbnRlbmRfb3BzID0gJmZlLT5vcHM7CisKKwlpZiAoJmZyb250ZW5kX29wcy0+dHVuZXJfb3BzKQorCQl0dW5lcl9vcHMgPSAmZnJvbnRlbmRfb3BzLT50dW5lcl9vcHM7CisKKwlpZiAodHVuZXJfb3BzLT5nZXRfZnJlcXVlbmN5KSB7CisJCWlmICgodHVuZXJfb3BzLT5nZXRfZnJlcXVlbmN5KGZlLCAmZnJlcXVlbmN5KSkgPCAwKQorCQkJZHByaW50aygiJXM6IEludmFsaWQgcGFyYW1ldGVyXG4iLCBfX2Z1bmNfXyk7CisJCWVsc2UKKwkJCWRwcmludGsoIiVzOiBGcmVxdWVuY3k9JWRcbiIsIF9fZnVuY19fLCBmcmVxdWVuY3kpOworCisJfQorCisJcmV0dXJuIGZyZXF1ZW5jeTsKK30KKworc3RhdGljIGVudW0gZmVfc3R2MDkwMF9mZWMgc3R2MDkwMF9nZXRfdml0X2ZlYyhzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCXMzMiByYXRlX2ZsZCwgdml0X2N1cnB1bl9mbGQ7CisJZW51bSBmZV9zdHYwOTAwX2ZlYyBwcmF0ZTsKKworCWRtZF9yZWcodml0X2N1cnB1bl9mbGQsIEYwOTAwX1AxX1ZJVF9DVVJQVU4sIEYwOTAwX1AyX1ZJVF9DVVJQVU4pOworCXJhdGVfZmxkID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgdml0X2N1cnB1bl9mbGQpOworCisJc3dpdGNoIChyYXRlX2ZsZCkgeworCWNhc2UgMTM6CisJCXByYXRlID0gU1RWMDkwMF9GRUNfMV8yOworCQlicmVhazsKKwljYXNlIDE4OgorCQlwcmF0ZSA9IFNUVjA5MDBfRkVDXzJfMzsKKwkJYnJlYWs7CisJY2FzZSAyMToKKwkJcHJhdGUgPSBTVFYwOTAwX0ZFQ18zXzQ7CisJCWJyZWFrOworCWNhc2UgMjQ6CisJCXByYXRlID0gU1RWMDkwMF9GRUNfNV82OworCQlicmVhazsKKwljYXNlIDI1OgorCQlwcmF0ZSA9IFNUVjA5MDBfRkVDXzZfNzsKKwkJYnJlYWs7CisJY2FzZSAyNjoKKwkJcHJhdGUgPSBTVFYwOTAwX0ZFQ183Xzg7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXByYXRlID0gU1RWMDkwMF9GRUNfVU5LTk9XTjsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHByYXRlOworfQorCitzdGF0aWMgZW51bSBmZV9zdHYwOTAwX3NpZ25hbF90eXBlIHN0djA5MDBfZ2V0X3NpZ25hbF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zID0gc3RhdGUtPmludGVybmFsOworCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QgPSBzdGF0ZS0+ZGVtb2Q7CisJZW51bSBmZV9zdHYwOTAwX3NpZ25hbF90eXBlIHJhbmdlID0gU1RWMDkwMF9PVVRPRlJBTkdFOworCXMzMiBvZmZzZXRGcmVxLAorCXNyYXRlX29mZnNldCwKKwlpID0gMDsKKworCXU4IHRpbWluZzsKKworCW1zbGVlcCg1KTsKKwlzd2l0Y2ggKGRlbW9kKSB7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJZGVmYXVsdDoKKwkJaWYgKGlfcGFyYW1zLT5kbWQxX3NyY2hfYWxnbyA9PSBTVFYwOTAwX0JMSU5EX1NFQVJDSCkgeworCQkJdGltaW5nID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVE1HUkVHMik7CisJCQlpID0gMDsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJTVEVQLCAweDVjKTsKKworCQkJd2hpbGUgKChpIDw9IDUwKSAmJiAodGltaW5nICE9IDApICYmICh0aW1pbmcgIT0gMHhGRikpIHsKKwkJCQl0aW1pbmcgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdSRUcyKTsKKwkJCQltc2xlZXAoNSk7CisJCQkJaSArPSA1OworCQkJfQorCQl9CisKKwkJaV9wYXJhbXMtPmRtZDFfcnNsdHMuc3RhbmRhcmQgPSBzdHYwOTAwX2dldF9zdGFuZGFyZChmZSwgZGVtb2QpOworCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5mcmVxdWVuY3kgPSBzdHYwOTAwX2dldF90dW5lcl9mcmVxKGZlKTsKKwkJb2Zmc2V0RnJlcSA9IHN0djA5MDBfZ2V0X2NhcnJfZnJlcShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIGRlbW9kKSAvIDEwMDA7CisJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLmZyZXF1ZW5jeSArPSBvZmZzZXRGcmVxOworCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5zeW1ib2xfcmF0ZSA9IHN0djA5MDBfZ2V0X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgZGVtb2QpOworCQlzcmF0ZV9vZmZzZXQgPSBzdHYwOTAwX2dldF90aW1pbmdfb2Zmc3QoaV9wYXJhbXMsIGlfcGFyYW1zLT5kbWQxX3JzbHRzLnN5bWJvbF9yYXRlLCBkZW1vZCk7CisJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLnN5bWJvbF9yYXRlICs9IHNyYXRlX29mZnNldDsKKwkJaV9wYXJhbXMtPmRtZDFfcnNsdHMuZmVjID0gc3R2MDkwMF9nZXRfdml0X2ZlYyhpX3BhcmFtcywgZGVtb2QpOworCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5tb2Rjb2RlID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfREVNT0RfTU9EQ09EKTsKKwkJaV9wYXJhbXMtPmRtZDFfcnNsdHMucGlsb3QgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9ERU1PRF9UWVBFKSAmIDB4MDE7CisJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLmZyYW1lX2xlbmd0aCA9ICgodTMyKXN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RFTU9EX1RZUEUpKSA+PiAxOworCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5yb2xsb2ZmID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfUk9MTE9GRl9TVEFUVVMpOworCQlzd2l0Y2ggKGlfcGFyYW1zLT5kbWQxX3JzbHRzLnN0YW5kYXJkKSB7CisJCWNhc2UgU1RWMDkwMF9EVkJTMl9TVEFOREFSRDoKKwkJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLnNwZWN0cnVtID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfU1BFQ0lOVl9ERU1PRCk7CisJCQlpZiAoaV9wYXJhbXMtPmRtZDFfcnNsdHMubW9kY29kZSA8PSBTVFYwOTAwX1FQU0tfOTEwKQorCQkJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLm1vZHVsYXRpb24gPSBTVFYwOTAwX1FQU0s7CisJCQllbHNlIGlmIChpX3BhcmFtcy0+ZG1kMV9yc2x0cy5tb2Rjb2RlIDw9IFNUVjA5MDBfOFBTS185MTApCisJCQkJaV9wYXJhbXMtPmRtZDFfcnNsdHMubW9kdWxhdGlvbiA9IFNUVjA5MDBfOFBTSzsKKwkJCWVsc2UgaWYgKGlfcGFyYW1zLT5kbWQxX3JzbHRzLm1vZGNvZGUgPD0gU1RWMDkwMF8xNkFQU0tfOTEwKQorCQkJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLm1vZHVsYXRpb24gPSBTVFYwOTAwXzE2QVBTSzsKKwkJCWVsc2UgaWYgKGlfcGFyYW1zLT5kbWQxX3JzbHRzLm1vZGNvZGUgPD0gU1RWMDkwMF8zMkFQU0tfOTEwKQorCQkJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLm1vZHVsYXRpb24gPSBTVFYwOTAwXzMyQVBTSzsKKwkJCWVsc2UKKwkJCQlpX3BhcmFtcy0+ZG1kMV9yc2x0cy5tb2R1bGF0aW9uID0gU1RWMDkwMF9VTktOT1dOOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9EVkJTMV9TVEFOREFSRDoKKwkJY2FzZSBTVFYwOTAwX0RTU19TVEFOREFSRDoKKwkJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLnNwZWN0cnVtID0gc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfSVFJTlYpOworCQkJaV9wYXJhbXMtPmRtZDFfcnNsdHMubW9kdWxhdGlvbiA9IFNUVjA5MDBfUVBTSzsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CisJCX0KKworCQlpZiAoKGlfcGFyYW1zLT5kbWQxX3NyY2hfYWxnbyA9PSBTVFYwOTAwX0JMSU5EX1NFQVJDSCkgfHwgKGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlIDwgMTAwMDAwMDApKSB7CisJCQlvZmZzZXRGcmVxID0JaV9wYXJhbXMtPmRtZDFfcnNsdHMuZnJlcXVlbmN5IC0gaV9wYXJhbXMtPnR1bmVyMV9mcmVxOworCQkJaV9wYXJhbXMtPnR1bmVyMV9mcmVxID0gc3R2MDkwMF9nZXRfdHVuZXJfZnJlcShmZSk7CisJCQlpZiAoQUJTKG9mZnNldEZyZXEpIDw9ICgoaV9wYXJhbXMtPmRtZDFfc3JjaF9yYW5nZSAvIDIwMDApICsgNTAwKSkKKwkJCQlyYW5nZSA9IFNUVjA5MDBfUkFOR0VPSzsKKwkJCWVsc2UKKwkJCQlpZiAoQUJTKG9mZnNldEZyZXEpIDw9IChzdHYwOTAwX2NhcnJpZXJfd2lkdGgoaV9wYXJhbXMtPmRtZDFfcnNsdHMuc3ltYm9sX3JhdGUsIGlfcGFyYW1zLT5kbWQxX3JzbHRzLnJvbGxvZmYpIC8gMjAwMCkpCisJCQkJCXJhbmdlID0gU1RWMDkwMF9SQU5HRU9LOworCQkJCWVsc2UKKwkJCQkJcmFuZ2UgPSBTVFYwOTAwX09VVE9GUkFOR0U7CisKKwkJfSBlbHNlIHsKKwkJCWlmIChBQlMob2Zmc2V0RnJlcSkgPD0gKChpX3BhcmFtcy0+ZG1kMV9zcmNoX3JhbmdlIC8gMjAwMCkgKyA1MDApKQorCQkJCXJhbmdlID0gU1RWMDkwMF9SQU5HRU9LOworCQkJZWxzZQorCQkJCXJhbmdlID0gU1RWMDkwMF9PVVRPRlJBTkdFOworCQl9CisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3JjaF9hbGdvID09IFNUVjA5MDBfQkxJTkRfU0VBUkNIKSB7CisJCQl0aW1pbmcgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9UTUdSRUcyKTsKKwkJCWkgPSAwOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUlNURVAsIDB4NWMpOworCisJCQl3aGlsZSAoKGkgPD0gNTApICYmICh0aW1pbmcgIT0gMCkgJiYgKHRpbWluZyAhPSAweGZmKSkgeworCQkJCXRpbWluZyA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR1JFRzIpOworCQkJCW1zbGVlcCg1KTsKKwkJCQlpICs9IDU7CisJCQl9CisJCX0KKworCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5zdGFuZGFyZCA9IHN0djA5MDBfZ2V0X3N0YW5kYXJkKGZlLCBkZW1vZCk7CisJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLmZyZXF1ZW5jeSA9IHN0djA5MDBfZ2V0X3R1bmVyX2ZyZXEoZmUpOworCQlvZmZzZXRGcmVxID0gc3R2MDkwMF9nZXRfY2Fycl9mcmVxKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgZGVtb2QpIC8gMTAwMDsKKwkJaV9wYXJhbXMtPmRtZDJfcnNsdHMuZnJlcXVlbmN5ICs9IG9mZnNldEZyZXE7CisJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLnN5bWJvbF9yYXRlID0gc3R2MDkwMF9nZXRfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBkZW1vZCk7CisJCXNyYXRlX29mZnNldCA9IHN0djA5MDBfZ2V0X3RpbWluZ19vZmZzdChpX3BhcmFtcywgaV9wYXJhbXMtPmRtZDJfcnNsdHMuc3ltYm9sX3JhdGUsIGRlbW9kKTsKKwkJaV9wYXJhbXMtPmRtZDJfcnNsdHMuc3ltYm9sX3JhdGUgKz0gc3JhdGVfb2Zmc2V0OworCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5mZWMgPSBzdHYwOTAwX2dldF92aXRfZmVjKGlfcGFyYW1zLCBkZW1vZCk7CisJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLm1vZGNvZGUgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9ERU1PRF9NT0RDT0QpOworCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5waWxvdCA9IHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RFTU9EX1RZUEUpICYgMHgwMTsKKwkJaV9wYXJhbXMtPmRtZDJfcnNsdHMuZnJhbWVfbGVuZ3RoID0gKCh1MzIpc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfREVNT0RfVFlQRSkpID4+IDE7CisJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLnJvbGxvZmYgPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9ST0xMT0ZGX1NUQVRVUyk7CisJCXN3aXRjaCAoaV9wYXJhbXMtPmRtZDJfcnNsdHMuc3RhbmRhcmQpIHsKKwkJY2FzZSBTVFYwOTAwX0RWQlMyX1NUQU5EQVJEOgorCQkJaV9wYXJhbXMtPmRtZDJfcnNsdHMuc3BlY3RydW0gPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9TUEVDSU5WX0RFTU9EKTsKKwkJCWlmIChpX3BhcmFtcy0+ZG1kMl9yc2x0cy5tb2Rjb2RlIDw9IFNUVjA5MDBfUVBTS185MTApCisJCQkJaV9wYXJhbXMtPmRtZDJfcnNsdHMubW9kdWxhdGlvbiA9IFNUVjA5MDBfUVBTSzsKKwkJCWVsc2UgaWYgKGlfcGFyYW1zLT5kbWQyX3JzbHRzLm1vZGNvZGUgPD0gU1RWMDkwMF84UFNLXzkxMCkKKwkJCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5tb2R1bGF0aW9uID0gU1RWMDkwMF84UFNLOworCQkJZWxzZSBpZiAoaV9wYXJhbXMtPmRtZDJfcnNsdHMubW9kY29kZSA8PSBTVFYwOTAwXzE2QVBTS185MTApCisJCQkJaV9wYXJhbXMtPmRtZDJfcnNsdHMubW9kdWxhdGlvbiA9IFNUVjA5MDBfMTZBUFNLOworCQkJZWxzZSBpZiAoaV9wYXJhbXMtPmRtZDJfcnNsdHMubW9kY29kZSA8PSBTVFYwOTAwXzMyQVBTS185MTApCisJCQkJaV9wYXJhbXMtPmRtZDJfcnNsdHMubW9kdWxhdGlvbiA9IFNUVjA5MDBfMzJBUFNLOworCQkJZWxzZQorCQkJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLm1vZHVsYXRpb24gPSBTVFYwOTAwX1VOS05PV047CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0RWQlMxX1NUQU5EQVJEOgorCQljYXNlIFNUVjA5MDBfRFNTX1NUQU5EQVJEOgorCQkJaV9wYXJhbXMtPmRtZDJfcnNsdHMuc3BlY3RydW0gPSBzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9JUUlOVik7CisJCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5tb2R1bGF0aW9uID0gU1RWMDkwMF9RUFNLOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlicmVhazsKKwkJfQorCisJCWlmICgoaV9wYXJhbXMtPmRtZDJfc3JjaF9hbGdvID09IFNUVjA5MDBfQkxJTkRfU0VBUkNIKSB8fCAoaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUgPCAxMDAwMDAwMCkpIHsKKwkJCW9mZnNldEZyZXEgPQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5mcmVxdWVuY3kgLSBpX3BhcmFtcy0+dHVuZXIyX2ZyZXE7CisJCQlpX3BhcmFtcy0+dHVuZXIyX2ZyZXEgPSBzdHYwOTAwX2dldF90dW5lcl9mcmVxKGZlKTsKKworCQkJaWYgKEFCUyhvZmZzZXRGcmVxKSA8PSAoKGlfcGFyYW1zLT5kbWQyX3NyY2hfcmFuZ2UgLyAyMDAwKSArIDUwMCkpCisJCQkJcmFuZ2UgPSBTVFYwOTAwX1JBTkdFT0s7CisJCQllbHNlCisJCQkJaWYgKEFCUyhvZmZzZXRGcmVxKSA8PSAoc3R2MDkwMF9jYXJyaWVyX3dpZHRoKGlfcGFyYW1zLT5kbWQyX3JzbHRzLnN5bWJvbF9yYXRlLCBpX3BhcmFtcy0+ZG1kMl9yc2x0cy5yb2xsb2ZmKSAvIDIwMDApKQorCQkJCQlyYW5nZSA9IFNUVjA5MDBfUkFOR0VPSzsKKwkJCQllbHNlCisJCQkJCXJhbmdlID0gU1RWMDkwMF9PVVRPRlJBTkdFOworCQl9IGVsc2UgeworCQkJaWYgKEFCUyhvZmZzZXRGcmVxKSA8PSAoKGlfcGFyYW1zLT5kbWQyX3NyY2hfcmFuZ2UgLyAyMDAwKSArIDUwMCkpCisJCQkJcmFuZ2UgPSBTVFYwOTAwX1JBTkdFT0s7CisJCQllbHNlCisJCQkJcmFuZ2UgPSBTVFYwOTAwX09VVE9GUkFOR0U7CisJCX0KKworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gcmFuZ2U7Cit9CisKK3N0YXRpYyBlbnVtIGZlX3N0djA5MDBfc2lnbmFsX3R5cGUgc3R2MDkwMF9kdmJzMV9hY3Ffd29ya2Fyb3VuZChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3Qgc3R2MDkwMF9zdGF0ZSAqc3RhdGUgPSBmZS0+ZGVtb2R1bGF0b3JfcHJpdjsKKwlzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMgPSBzdGF0ZS0+aW50ZXJuYWw7CisJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCA9IHN0YXRlLT5kZW1vZDsKKworCXMzMiBzcmF0ZSwgZGVtb2RfdGltZW91dCwKKwkJZmVjX3RpbWVvdXQsIGZyZXExLCBmcmVxMDsKKwllbnVtIGZlX3N0djA5MDBfc2lnbmFsX3R5cGUgc2lnbmFsX3R5cGUgPSBTVFYwOTAwX05PREFUQTs7CisKKwlzd2l0Y2ggKGRlbW9kKSB7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJZGVmYXVsdDoKKwkJaV9wYXJhbXMtPmRtZDFfcnNsdHMubG9ja2VkID0gRkFMU0U7CisJCWlmIChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9IRUFERVJfTU9ERSkgPT0gU1RWMDkwMF9EVkJTX0ZPVU5EKSB7CisJCQlzcmF0ZSA9IHN0djA5MDBfZ2V0X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgZGVtb2QpOworCQkJc3JhdGUgKz0gc3R2MDkwMF9nZXRfdGltaW5nX29mZnN0KGlfcGFyYW1zLCBzcmF0ZSwgZGVtb2QpOworCQkJaWYgKGlfcGFyYW1zLT5kbWQxX3NyY2hfYWxnbyA9PSBTVFYwOTAwX0JMSU5EX1NFQVJDSCkKKwkJCQlzdHYwOTAwX3NldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIHNyYXRlLCBkZW1vZCk7CisKKwkJCXN0djA5MDBfZ2V0X2xvY2tfdGltZW91dCgmZGVtb2RfdGltZW91dCwgJmZlY190aW1lb3V0LCBzcmF0ZSwgU1RWMDkwMF9XQVJNX1NUQVJUKTsKKwkJCWZyZXExID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSMik7CisJCQlmcmVxMCA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUjEpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9DRlJfQVVUT1NDQU4sIDApOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9TUEVDSU5WX0NPTlRST0wsIFNUVjA5MDBfSVFfRk9SQ0VfU1dBUFBFRCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDFDKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMSwgZnJlcTEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQwLCBmcmVxMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDE4KTsKKwkJCWlmIChzdHYwOTAwX3dhaXRfZm9yX2xvY2soaV9wYXJhbXMsIGRlbW9kLCBkZW1vZF90aW1lb3V0LCBmZWNfdGltZW91dCkgPT0gVFJVRSkgeworCQkJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLmxvY2tlZCA9IFRSVUU7CisJCQkJc2lnbmFsX3R5cGUgPSBzdHYwOTAwX2dldF9zaWduYWxfcGFyYW1zKGZlKTsKKwkJCQlzdHYwOTAwX3RyYWNrX29wdGltaXphdGlvbihmZSk7CisJCQl9IGVsc2UgeworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfU1BFQ0lOVl9DT05UUk9MLCBTVFYwOTAwX0lRX0ZPUkNFX05PUk1BTCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxYyk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQxLCBmcmVxMSk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQwLCBmcmVxMCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHgxOCk7CisJCQkJaWYgKHN0djA5MDBfd2FpdF9mb3JfbG9jayhpX3BhcmFtcywgZGVtb2QsIGRlbW9kX3RpbWVvdXQsIGZlY190aW1lb3V0KSA9PSBUUlVFKSB7CisJCQkJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLmxvY2tlZCA9IFRSVUU7CisJCQkJCXNpZ25hbF90eXBlID0gc3R2MDkwMF9nZXRfc2lnbmFsX3BhcmFtcyhmZSk7CisJCQkJCXN0djA5MDBfdHJhY2tfb3B0aW1pemF0aW9uKGZlKTsKKwkJCQl9CisKKwkJCX0KKworCQl9IGVsc2UKKwkJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLmxvY2tlZCA9IEZBTFNFOworCisJCWJyZWFrOworCWNhc2UgU1RWMDkwMF9ERU1PRF8yOgorCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5sb2NrZWQgPSBGQUxTRTsKKwkJaWYgKHN0djA5MDBfZ2V0X2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0hFQURFUl9NT0RFKSA9PSBTVFYwOTAwX0RWQlNfRk9VTkQpIHsKKwkJCXNyYXRlID0gc3R2MDkwMF9nZXRfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBkZW1vZCk7CisJCQlzcmF0ZSArPSBzdHYwOTAwX2dldF90aW1pbmdfb2Zmc3QoaV9wYXJhbXMsIHNyYXRlLCBkZW1vZCk7CisKKwkJCWlmIChpX3BhcmFtcy0+ZG1kMl9zcmNoX2FsZ28gPT0gU1RWMDkwMF9CTElORF9TRUFSQ0gpCisJCQkJc3R2MDkwMF9zZXRfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBzcmF0ZSwgZGVtb2QpOworCisJCQlzdHYwOTAwX2dldF9sb2NrX3RpbWVvdXQoJmRlbW9kX3RpbWVvdXQsICZmZWNfdGltZW91dCwgc3JhdGUsIFNUVjA5MDBfV0FSTV9TVEFSVCk7CisJCQlmcmVxMSA9IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUjIpOworCQkJZnJlcTAgPSBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlIxKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfQ0ZSX0FVVE9TQ0FOLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfU1BFQ0lOVl9DT05UUk9MLCBTVFYwOTAwX0lRX0ZPUkNFX1NXQVBQRUQpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHgxQyk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDEsIGZyZXExKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMCwgZnJlcTApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHgxOCk7CisKKwkJCWlmIChzdHYwOTAwX3dhaXRfZm9yX2xvY2soaV9wYXJhbXMsIGRlbW9kLCBkZW1vZF90aW1lb3V0LCBmZWNfdGltZW91dCkgPT0gVFJVRSkgeworCQkJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLmxvY2tlZCA9IFRSVUU7CisJCQkJc2lnbmFsX3R5cGUgPSBzdHYwOTAwX2dldF9zaWduYWxfcGFyYW1zKGZlKTsKKwkJCQlzdHYwOTAwX3RyYWNrX29wdGltaXphdGlvbihmZSk7CisJCQl9IGVsc2UgeworCQkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfU1BFQ0lOVl9DT05UUk9MLCBTVFYwOTAwX0lRX0ZPUkNFX05PUk1BTCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHgxYyk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUklOSVQxLCBmcmVxMSk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUklOSVQwLCBmcmVxMCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHgxOCk7CisKKwkJCQlpZiAoc3R2MDkwMF93YWl0X2Zvcl9sb2NrKGlfcGFyYW1zLCBkZW1vZCwgZGVtb2RfdGltZW91dCwgZmVjX3RpbWVvdXQpID09IFRSVUUpIHsKKwkJCQkJaV9wYXJhbXMtPmRtZDJfcnNsdHMubG9ja2VkID0gVFJVRTsKKwkJCQkJc2lnbmFsX3R5cGUgPSBzdHYwOTAwX2dldF9zaWduYWxfcGFyYW1zKGZlKTsKKwkJCQkJc3R2MDkwMF90cmFja19vcHRpbWl6YXRpb24oZmUpOworCQkJCX0KKworCQkJfQorCisJCX0gZWxzZQorCQkJaV9wYXJhbXMtPmRtZDFfcnNsdHMubG9ja2VkID0gRkFMU0U7CisKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHNpZ25hbF90eXBlOworfQorCitzdGF0aWMgdTE2IHN0djA5MDBfYmxpbmRfY2hlY2tfYWdjMl9taW5fbGV2ZWwoc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zLAorCQkJCQllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kKQoreworCXUzMiBtaW5hZ2MybGV2ZWwgPSAweGZmZmYsCisJCWFnYzJsZXZlbCwKKwkJaW5pdF9mcmVxLCBmcmVxX3N0ZXA7CisKKwlzMzIgaSwgaiwgbmJfc3RlcHMsIGRpcmVjdGlvbjsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJc3dpdGNoIChkZW1vZCkgeworCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCWRlZmF1bHQ6CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BR0MyUkVGLCAweDM4KTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9TQ0FOX0VOQUJMRSwgMSk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfQ0ZSX0FVVE9TQ0FOLCAxKTsKKworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSVVAxLCAweDgzKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUlVQMCwgMHhjMCk7CisKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUkxPVzEsIDB4ODIpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSTE9XMCwgMHhhMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURUME0sIDB4MCk7CisKKwkJc3R2MDkwMF9zZXRfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCAxMDAwMDAwLCBkZW1vZCk7CisJCW5iX3N0ZXBzID0gLTEgKyAoaV9wYXJhbXMtPmRtZDFfc3JjaF9yYW5nZSAvIDEwMDAwMDApOworCQluYl9zdGVwcyAvPSAyOworCQluYl9zdGVwcyA9ICgyICogbmJfc3RlcHMpICsgMTsKKworCQlpZiAobmJfc3RlcHMgPCAwKQorCQkJbmJfc3RlcHMgPSAxOworCisJCWRpcmVjdGlvbiA9IDE7CisKKwkJZnJlcV9zdGVwID0gKDEwMDAwMDAgPDwgOCkgLyAoaV9wYXJhbXMtPm1jbGsgPj4gOCk7CisKKwkJaW5pdF9mcmVxID0gMDsKKworCQlmb3IgKGkgPSAwOyBpIDwgbmJfc3RlcHM7IGkrKykgeworCQkJaWYgKGRpcmVjdGlvbiA+IDApCisJCQkJaW5pdF9mcmVxID0gaW5pdF9mcmVxICsgKGZyZXFfc3RlcCAqIGkpOworCQkJZWxzZQorCQkJCWluaXRfZnJlcSA9IGluaXRfZnJlcSAtIChmcmVxX3N0ZXAgKiBpKTsKKworCQkJZGlyZWN0aW9uICo9IC0xOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHg1Qyk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0ZSSU5JVDEsIChpbml0X2ZyZXEgPj4gOCkgJiAweGZmKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMCwgaW5pdF9mcmVxICAmIDB4ZmYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHg1OCk7CisJCQltc2xlZXAoMTApOworCQkJYWdjMmxldmVsID0gMDsKKworCQkJZm9yIChqID0gMDsgaiA8IDEwOyBqKyspCisJCQkJYWdjMmxldmVsICs9IChzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BR0MySTEpIDw8IDgpCisJCQkJCQl8IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FHQzJJMCk7CisKKwkJCWFnYzJsZXZlbCAvPSAxMDsKKworCQkJaWYgKGFnYzJsZXZlbCA8IG1pbmFnYzJsZXZlbCkKKwkJCQltaW5hZ2MybGV2ZWwgPSBhZ2MybGV2ZWw7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BR0MyUkVGLCAweDM4KTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9TQ0FOX0VOQUJMRSwgMSk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfQ0ZSX0FVVE9TQ0FOLCAxKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUlVQMSwgMHg4Myk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJVUDAsIDB4YzApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSTE9XMSwgMHg4Mik7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJMT1cwLCAweGEwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRFQwTSwgMHgwKTsKKwkJc3R2MDkwMF9zZXRfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCAxMDAwMDAwLCBkZW1vZCk7CisJCW5iX3N0ZXBzID0gLTEgKyAoaV9wYXJhbXMtPmRtZDJfc3JjaF9yYW5nZSAvIDEwMDAwMDApOworCQluYl9zdGVwcyAvPSAyOworCQluYl9zdGVwcyA9ICgyICogbmJfc3RlcHMpICsgMTsKKworCQlpZiAobmJfc3RlcHMgPCAwKQorCQkJbmJfc3RlcHMgPSAxOworCisJCWRpcmVjdGlvbiA9IDE7CisJCWZyZXFfc3RlcCA9ICgxMDAwMDAwIDw8IDgpIC8gKGlfcGFyYW1zLT5tY2xrID4+IDgpOworCQlpbml0X2ZyZXEgPSAwOworCQlmb3IgKGkgPSAwOyBpIDwgbmJfc3RlcHM7IGkrKykgeworCQkJaWYgKGRpcmVjdGlvbiA+IDApCisJCQkJaW5pdF9mcmVxID0gaW5pdF9mcmVxICsgKGZyZXFfc3RlcCAqIGkpOworCQkJZWxzZQorCQkJCWluaXRfZnJlcSA9IGluaXRfZnJlcSAtIChmcmVxX3N0ZXAgKiBpKTsKKworCQkJZGlyZWN0aW9uICo9IC0xOworCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDVDKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMSwgKGluaXRfZnJlcSA+PiA4KSAmIDB4ZmYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NGUklOSVQwLCBpbml0X2ZyZXEgICYgMHhmZik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDU4KTsKKworCQkJbXNsZWVwKDEwKTsKKwkJCWFnYzJsZXZlbCA9IDA7CisJCQlmb3IgKGogPSAwOyBqIDwgMTA7IGorKykKKwkJCQlhZ2MybGV2ZWwgKz0gKHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FHQzJJMSkgPDwgOCkKKwkJCQkJCXwgc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUdDMkkwKTsKKworCQkJYWdjMmxldmVsIC89IDEwOworCisJCQlpZiAoYWdjMmxldmVsIDwgbWluYWdjMmxldmVsKQorCQkJCW1pbmFnYzJsZXZlbCA9IGFnYzJsZXZlbDsKKwkJfQorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gKHUxNiltaW5hZ2MybGV2ZWw7Cit9CisKK3N0YXRpYyB1MzIgc3R2MDkwMF9zZWFyY2hfc3JhdGVfY29hcnNlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcyA9IHN0YXRlLT5pbnRlcm5hbDsKKwllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kID0gc3RhdGUtPmRlbW9kOworCWludCB0aW1pbmdMb2NrID0gRkFMU0U7CisJczMyIGksIHRpbWluZ2NwdCA9IDAsCisJCWRpcmVjdGlvbiA9IDEsCisJCW5iX3N0ZXBzLAorCQljdXJyZW50X3N0ZXAgPSAwLAorCQl0dW5lcl9mcmVxOworCisJdTMyIGNvYXJzZV9zcmF0ZSA9IDAsIGFnYzJfaW50ZWdyID0gMCwgY3Vycmllcl9zdGVwID0gMTIwMDsKKworCXN3aXRjaCAoZGVtb2QpIHsKKwljYXNlIFNUVjA5MDBfREVNT0RfMToKKwlkZWZhdWx0OgorCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0kyQ19ERU1PRF9NT0RFLCAweDFGKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR0NGRywgMHgxMik7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdUSFJJU0UsIDB4ZjApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVE1HVEhGQUxMLCAweGUwKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9TQ0FOX0VOQUJMRSwgMSk7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfQ0ZSX0FVVE9TQ0FOLCAxKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUlVQMSwgMHg4Myk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJVUDAsIDB4YzApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSTE9XMSwgMHg4Mik7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJMT1cwLCAweGEwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRFQwTSwgMHgwKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FHQzJSRUYsIDB4NTApOworCisJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKSB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSRlJFUSwgMHg2YSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSU1RFUCwgMHg5NSk7CisJCX0gZWxzZSB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSRlJFUSwgMHhlZCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSU1RFUCwgMHg3Myk7CisJCX0KKworCQlpZiAoaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUgPD0gMjAwMDAwMCkKKwkJCWN1cnJpZXJfc3RlcCA9IDEwMDA7CisJCWVsc2UgaWYgKGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlIDw9IDUwMDAwMDApCisJCQljdXJyaWVyX3N0ZXAgPSAyMDAwOworCQllbHNlIGlmIChpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSA8PSAxMjAwMDAwMCkKKwkJCWN1cnJpZXJfc3RlcCA9IDMwMDA7CisJCWVsc2UKKwkJCWN1cnJpZXJfc3RlcCA9IDUwMDA7CisKKwkJbmJfc3RlcHMgPSAtMSArICgoaV9wYXJhbXMtPmRtZDFfc3JjaF9yYW5nZSAvIDEwMDApIC8gY3Vycmllcl9zdGVwKTsKKwkJbmJfc3RlcHMgLz0gMjsKKwkJbmJfc3RlcHMgPSAoMiAqIG5iX3N0ZXBzKSArIDE7CisKKwkJaWYgKG5iX3N0ZXBzIDwgMCkKKwkJCW5iX3N0ZXBzID0gMTsKKworCQllbHNlIGlmIChuYl9zdGVwcyA+IDEwKSB7CisJCQluYl9zdGVwcyA9IDExOworCQkJY3Vycmllcl9zdGVwID0gKGlfcGFyYW1zLT5kbWQxX3NyY2hfcmFuZ2UgLyAxMDAwKSAvIDEwOworCQl9CisKKwkJY3VycmVudF9zdGVwID0gMDsKKworCQlkaXJlY3Rpb24gPSAxOworCQl0dW5lcl9mcmVxID0gaV9wYXJhbXMtPnR1bmVyMV9mcmVxOworCisJCXdoaWxlICgodGltaW5nTG9jayA9PSBGQUxTRSkgJiYgKGN1cnJlbnRfc3RlcCA8IG5iX3N0ZXBzKSkgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHg1Rik7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0kyQ19ERU1PRF9NT0RFLCAweDApOworCisJCQltc2xlZXAoNTApOworCisJCQlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgeworCQkJCWlmIChzdHYwOTAwX2dldF9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9UTUdMT0NLX1FVQUxJVFkpID49IDIpCisJCQkJCXRpbWluZ2NwdCsrOworCisJCQkJYWdjMl9pbnRlZ3IgKz0gKHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FHQzJJMSkgPDwgOCkgfCBzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BR0MySTApOworCisJCQl9CisKKwkJCWFnYzJfaW50ZWdyIC89IDEwOworCQkJY29hcnNlX3NyYXRlID0gc3R2MDkwMF9nZXRfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBkZW1vZCk7CisJCQljdXJyZW50X3N0ZXArKzsKKwkJCWRpcmVjdGlvbiAqPSAtMTsKKworCQkJZHByaW50aygibG9jazogSTJDX0RFTU9EX01PREVfRklFTEQgPTAuIFNlYXJjaCBzdGFydGVkLiB0dW5lciBmcmVxPSVkIGFnYzI9MHgleCBzcmF0ZV9jb2Fyc2U9JWQgdG1nX2NwdD0lZFxuIiwgdHVuZXJfZnJlcSwgYWdjMl9pbnRlZ3IsIGNvYXJzZV9zcmF0ZSwgdGltaW5nY3B0KTsKKworCQkJaWYgKCh0aW1pbmdjcHQgPj0gNSkgJiYgKGFnYzJfaW50ZWdyIDwgMHgxRjAwKSAmJiAoY29hcnNlX3NyYXRlIDwgNTUwMDAwMDApICYmIChjb2Fyc2Vfc3JhdGUgPiA4NTAwMDApKSB7CisJCQkJdGltaW5nTG9jayA9IFRSVUU7CisJCQl9CisKKwkJCWVsc2UgaWYgKGN1cnJlbnRfc3RlcCA8IG5iX3N0ZXBzKSB7CisJCQkJaWYgKGRpcmVjdGlvbiA+IDApCisJCQkJCXR1bmVyX2ZyZXEgKz0gKGN1cnJlbnRfc3RlcCAqIGN1cnJpZXJfc3RlcCk7CisJCQkJZWxzZQorCQkJCQl0dW5lcl9mcmVxIC09IChjdXJyZW50X3N0ZXAgKiBjdXJyaWVyX3N0ZXApOworCisJCQkJc3R2MDkwMF9zZXRfdHVuZXIoZmUsIHR1bmVyX2ZyZXEsIGlfcGFyYW1zLT50dW5lcjFfYncpOworCQkJfQorCQl9CisKKwkJaWYgKHRpbWluZ0xvY2sgPT0gRkFMU0UpCisJCQljb2Fyc2Vfc3JhdGUgPSAwOworCQllbHNlCisJCQljb2Fyc2Vfc3JhdGUgPSBzdHYwOTAwX2dldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIGRlbW9kKTsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfSTJDX0RFTU9EX01PREUsIDB4MUYpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HQ0ZHLCAweDEyKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR1RIUklTRSwgMHhmMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9UTUdUSEZBTEwsIDB4ZTApOworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1NDQU5fRU5BQkxFLCAxKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9DRlJfQVVUT1NDQU4sIDEpOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSVVAxLCAweDgzKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUlVQMCwgMHhjMCk7CisJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJMT1cxLCAweDgyKTsKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUkxPVzAsIDB4YTApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1EVDBNLCAweDApOworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUdDMlJFRiwgMHg1MCk7CisKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJGUkVRLCAweDZhKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJTVEVQLCAweDk1KTsKKwkJfSBlbHNlIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJGUkVRLCAweGVkKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJTVEVQLCAweDczKTsKKwkJfQorCisJCWlmIChpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSA8PSAyMDAwMDAwKQorCQkJY3Vycmllcl9zdGVwID0gMTAwMDsKKwkJZWxzZSBpZiAoaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUgPD0gNTAwMDAwMCkKKwkJCWN1cnJpZXJfc3RlcCA9IDIwMDA7CisJCWVsc2UgaWYgKGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlIDw9IDEyMDAwMDAwKQorCQkJY3Vycmllcl9zdGVwID0gMzAwMDsKKwkJZWxzZQorCQkJY3Vycmllcl9zdGVwID0gNTAwMDsKKworCisJCW5iX3N0ZXBzID0gLTEgKyAoKGlfcGFyYW1zLT5kbWQyX3NyY2hfcmFuZ2UgLyAxMDAwKSAvIGN1cnJpZXJfc3RlcCk7CisJCW5iX3N0ZXBzIC89IDI7CisJCW5iX3N0ZXBzID0gKDIgKiBuYl9zdGVwcykgKyAxOworCisJCWlmIChuYl9zdGVwcyA8IDApCisJCQluYl9zdGVwcyA9IDE7CisJCWVsc2UgaWYgKG5iX3N0ZXBzID4gMTApIHsKKwkJCW5iX3N0ZXBzID0gMTE7CisJCQljdXJyaWVyX3N0ZXAgPSAoaV9wYXJhbXMtPmRtZDJfc3JjaF9yYW5nZSAvIDEwMDApIC8gMTA7CisJCX0KKworCQljdXJyZW50X3N0ZXAgPSAwOworCQlkaXJlY3Rpb24gPSAxOworCQl0dW5lcl9mcmVxID0gaV9wYXJhbXMtPnR1bmVyMl9mcmVxOworCisJCXdoaWxlICgodGltaW5nTG9jayA9PSBGQUxTRSkgJiYgKGN1cnJlbnRfc3RlcCA8IG5iX3N0ZXBzKSkgeworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHg1Rik7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0kyQ19ERU1PRF9NT0RFLCAweDApOworCisJCQltc2xlZXAoNTApOworCQkJdGltaW5nY3B0ID0gMDsKKworCQkJZm9yIChpID0gMDsgaSA8IDIwOyBpKyspIHsKKwkJCQlpZiAoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfVE1HTE9DS19RVUFMSVRZKSA+PSAyKQorCQkJCQl0aW1pbmdjcHQrKzsKKwkJCQlhZ2MyX2ludGVnciArPSAoc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUdDMkkxKSA8PCA4KQorCQkJCQkJCQl8IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FHQzJJMCk7CisJCQl9CisKKwkJCWFnYzJfaW50ZWdyIC89IDIwOworCQkJY29hcnNlX3NyYXRlID0gc3R2MDkwMF9nZXRfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBkZW1vZCk7CisJCQlpZiAoKHRpbWluZ2NwdCA+PSAxMCkgJiYgKGFnYzJfaW50ZWdyIDwgMHgxRjAwKSAmJiAoY29hcnNlX3NyYXRlIDwgNTUwMDAwMDApICYmIChjb2Fyc2Vfc3JhdGUgPiA4NTAwMDApKQorCQkJCXRpbWluZ0xvY2sgPSBUUlVFOworCQkJZWxzZSB7CisJCQkJY3VycmVudF9zdGVwKys7CisJCQkJZGlyZWN0aW9uICo9IC0xOworCisJCQkJaWYgKGRpcmVjdGlvbiA+IDApCisJCQkJCXR1bmVyX2ZyZXEgKz0gKGN1cnJlbnRfc3RlcCAqIGN1cnJpZXJfc3RlcCk7CisJCQkJZWxzZQorCQkJCQl0dW5lcl9mcmVxIC09IChjdXJyZW50X3N0ZXAgKiBjdXJyaWVyX3N0ZXApOworCisJCQkJc3R2MDkwMF9zZXRfdHVuZXIoZmUsIHR1bmVyX2ZyZXEsIGlfcGFyYW1zLT50dW5lcjJfYncpOworCQkJfQorCQl9CisKKwkJaWYgKHRpbWluZ0xvY2sgPT0gRkFMU0UpCisJCQljb2Fyc2Vfc3JhdGUgPSAwOworCQllbHNlCisJCQljb2Fyc2Vfc3JhdGUgPSBzdHYwOTAwX2dldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIGRlbW9kKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIGNvYXJzZV9zcmF0ZTsKK30KKworc3RhdGljIHUzMiBzdHYwOTAwX3NlYXJjaF9zcmF0ZV9maW5lKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBzdHYwOTAwX3N0YXRlICpzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OworCXN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcyA9IHN0YXRlLT5pbnRlcm5hbDsKKwllbnVtIGZlX3N0djA5MDBfZGVtb2RfbnVtIGRlbW9kID0gc3RhdGUtPmRlbW9kOworCXUzMiBjb2Fyc2Vfc3JhdGUsCisJY29hcnNlX2ZyZXEsCisJc3ltYjsKKworCWNvYXJzZV9zcmF0ZSA9IHN0djA5MDBfZ2V0X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgZGVtb2QpOworCisJc3dpdGNoIChkZW1vZCkgeworCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCWRlZmF1bHQ6CisJCWNvYXJzZV9mcmVxID0gKHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUjIpIDw8IDgpCisJCQkJCQl8IHN0djA5MDBfcmVhZF9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUjEpOworCQlzeW1iID0gMTMgKiAoY29hcnNlX3NyYXRlIC8gMTApOworCisJCWlmIChzeW1iIDwgaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUpCisJCQljb2Fyc2Vfc3JhdGUgPSAwOworCQllbHNlIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURJU1RBVEUsIDB4MUYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR0NGRzIsIDB4MDEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1RNR1RIUklTRSwgMHgyMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVE1HVEhGQUxMLCAweDAwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdDRkcsIDB4ZDIpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9DRlJfQVVUT1NDQU4sIDApOworCisJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSRlJFUSwgMHg0OSk7CisJCQllbHNlCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkZSRVEsIDB4ZWQpOworCisJCQlpZiAoY29hcnNlX3NyYXRlID4gMzAwMDAwMCkgeworCQkJCXN5bWIgPSAxMyAqIChjb2Fyc2Vfc3JhdGUgLyAxMCk7CisJCQkJc3ltYiA9IChzeW1iIC8gMTAwMCkgKiA2NTUzNjsKKwkJCQlzeW1iIC89IChpX3BhcmFtcy0+bWNsayAvIDEwMDApOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJVUDEsIChzeW1iID4+IDgpICYgMHg3Rik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUlVQMCwgKHN5bWIgJiAweEZGKSk7CisKKwkJCQlzeW1iID0gMTAgKiAoY29hcnNlX3NyYXRlIC8gMTMpOworCQkJCXN5bWIgPSAoc3ltYiAvIDEwMDApICogNjU1MzY7CisJCQkJc3ltYiAvPSAoaV9wYXJhbXMtPm1jbGsgLyAxMDAwKTsKKworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJMT1cxLCAoc3ltYiA+PiA4KSAmIDB4N0YpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJMT1cwLCAoc3ltYiAmIDB4RkYpKTsKKworCQkJCXN5bWIgPSAoY29hcnNlX3NyYXRlIC8gMTAwMCkgKiA2NTUzNjsKKwkJCQlzeW1iIC89IChpX3BhcmFtcy0+bWNsayAvIDEwMDApOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJJTklUMSwgKHN5bWIgPj4gOCkgJiAweEZGKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSSU5JVDAsIChzeW1iICYgMHhGRikpOworCQkJfSBlbHNlIHsKKwkJCQlzeW1iID0gMTMgKiAoY29hcnNlX3NyYXRlIC8gMTApOworCQkJCXN5bWIgPSAoc3ltYiAvIDEwMCkgKiA2NTUzNjsKKwkJCQlzeW1iIC89IChpX3BhcmFtcy0+bWNsayAvIDEwMCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUlVQMSwgKHN5bWIgPj4gOCkgJiAweDdGKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSVVAwLCAoc3ltYiAmIDB4RkYpKTsKKworCQkJCXN5bWIgPSAxMCAqIChjb2Fyc2Vfc3JhdGUgLyAxNCk7CisJCQkJc3ltYiA9IChzeW1iIC8gMTAwKSAqIDY1NTM2OworCQkJCXN5bWIgLz0gKGlfcGFyYW1zLT5tY2xrIC8gMTAwKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSTE9XMSwgKHN5bWIgPj4gOCkgJiAweDdGKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfU0ZSTE9XMCwgKHN5bWIgJiAweEZGKSk7CisKKwkJCQlzeW1iID0gKGNvYXJzZV9zcmF0ZSAvIDEwMCkgKiA2NTUzNjsKKwkJCQlzeW1iIC89IChpX3BhcmFtcy0+bWNsayAvIDEwMCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1NGUklOSVQxLCAoc3ltYiA+PiA4KSAmIDB4RkYpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9TRlJJTklUMCwgKHN5bWIgJiAweEZGKSk7CisJCQl9CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9ETURUME0sIDB4MjApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NGUklOSVQxLCAoY29hcnNlX2ZyZXEgPj4gOCkgJiAweGZmKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DRlJJTklUMCwgY29hcnNlX2ZyZXEgICYgMHhmZik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1ESVNUQVRFLCAweDE1KTsKKwkJfQorCQlicmVhazsKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJY29hcnNlX2ZyZXEgPSAoc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSMikgPDwgOCkKKwkJCQkJCXwgc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSMSk7CisKKwkJc3ltYiA9IDEzICogKGNvYXJzZV9zcmF0ZSAvIDEwKTsKKworCQlpZiAoc3ltYiA8IGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlKQorCQkJY29hcnNlX3NyYXRlID0gMDsKKwkJZWxzZSB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDFGKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9UTUdDRkcyLCAweDAxKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9UTUdUSFJJU0UsIDB4MjApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR1RIRkFMTCwgMHgwMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVE1HQ0ZHLCAweGQyKTsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfQ0ZSX0FVVE9TQ0FOLCAwKTsKKworCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkZSRVEsIDB4NDkpOworCQkJZWxzZQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DQVJGUkVRLCAweGVkKTsKKworCQkJaWYgKGNvYXJzZV9zcmF0ZSA+IDMwMDAwMDApIHsKKwkJCQlzeW1iID0gMTMgKiAoY29hcnNlX3NyYXRlIC8gMTApOworCQkJCXN5bWIgPSAoc3ltYiAvIDEwMDApICogNjU1MzY7CisJCQkJc3ltYiAvPSAoaV9wYXJhbXMtPm1jbGsgLyAxMDAwKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSVVAxLCAoc3ltYiA+PiA4KSAmIDB4N0YpOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJVUDAsIChzeW1iICYgMHhGRikpOworCisJCQkJc3ltYiA9IDEwICogKGNvYXJzZV9zcmF0ZSAvIDEzKTsKKwkJCQlzeW1iID0gKHN5bWIgLyAxMDAwKSAqIDY1NTM2OworCQkJCXN5bWIgLz0gKGlfcGFyYW1zLT5tY2xrIC8gMTAwMCk7CisKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSTE9XMSwgKHN5bWIgPj4gOCkgJiAweDdGKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSTE9XMCwgKHN5bWIgJiAweEZGKSk7CisKKwkJCQlzeW1iID0gKGNvYXJzZV9zcmF0ZSAvIDEwMDApICogNjU1MzY7CisJCQkJc3ltYiAvPSAoaV9wYXJhbXMtPm1jbGsgLyAxMDAwKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSSU5JVDEsIChzeW1iID4+IDgpICYgMHhGRik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUklOSVQwLCAoc3ltYiAmIDB4RkYpKTsKKwkJCX0gZWxzZSB7CisJCQkJc3ltYiA9IDEzICogKGNvYXJzZV9zcmF0ZSAvIDEwKTsKKwkJCQlzeW1iID0gKHN5bWIgLyAxMDApICogNjU1MzY7CisJCQkJc3ltYiAvPSAoaV9wYXJhbXMtPm1jbGsgLyAxMDApOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJVUDEsIChzeW1iID4+IDgpICYgMHg3Rik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUlVQMCwgKHN5bWIgJiAweEZGKSk7CisKKwkJCQlzeW1iID0gMTAgKiAoY29hcnNlX3NyYXRlIC8gMTQpOworCQkJCXN5bWIgPSAoc3ltYiAvIDEwMCkgKiA2NTUzNjsKKwkJCQlzeW1iIC89IChpX3BhcmFtcy0+bWNsayAvIDEwMCk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUkxPVzEsIChzeW1iID4+IDgpICYgMHg3Rik7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1NGUkxPVzAsIChzeW1iICYgMHhGRikpOworCisJCQkJc3ltYiA9IChjb2Fyc2Vfc3JhdGUgLyAxMDApICogNjU1MzY7CisJCQkJc3ltYiAvPSAoaV9wYXJhbXMtPm1jbGsgLyAxMDApOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9TRlJJTklUMSwgKHN5bWIgPj4gOCkgJiAweEZGKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfU0ZSSU5JVDAsIChzeW1iICYgMHhGRikpOworCQkJfQorCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1EVDBNLCAweDIwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DRlJJTklUMSwgKGNvYXJzZV9mcmVxID4+IDgpICYgMHhmZik7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0ZSSU5JVDAsIGNvYXJzZV9mcmVxICAmIDB4ZmYpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0RNRElTVEFURSwgMHgxNSk7CisJCX0KKworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gY29hcnNlX3NyYXRlOworfQorCitzdGF0aWMgaW50IHN0djA5MDBfYmxpbmRfc2VhcmNoX2FsZ28oc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zID0gc3RhdGUtPmludGVybmFsOworCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QgPSBzdGF0ZS0+ZGVtb2Q7CisJdTgga19yZWZfdG1nLCBrX3JlZl90bWdfbWF4LCBrX3JlZl90bWdfbWluOworCXUzMiBjb2Fyc2Vfc3JhdGU7CisJaW50IGxvY2sgPSBGQUxTRSwgY29hcnNlX2ZhaWwgPSBGQUxTRTsKKwlzMzIgZGVtb2RfdGltZW91dCA9IDUwMCwgZmVjX3RpbWVvdXQgPSA1MCwga3JlZl90bWdfcmVnLCBmYWlsX2NwdCwgaSwgYWdjMl9vdmVyZmxvdzsKKwl1MTYgYWdjMl9pbnRlZ3I7CisJdTggZHN0YXR1czI7CisKKwlkcHJpbnRrKEtFUk5fSU5GTyAiJXNcbiIsIF9fZnVuY19fKTsKKworCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA8IDB4MjApIHsKKwkJa19yZWZfdG1nX21heCA9IDIzMzsKKwkJa19yZWZfdG1nX21pbiA9IDE0MzsKKwl9IGVsc2UgeworCQlrX3JlZl90bWdfbWF4ID0gMTIwOworCQlrX3JlZl90bWdfbWluID0gMzA7CisJfQorCisJYWdjMl9pbnRlZ3IgPSBzdHYwOTAwX2JsaW5kX2NoZWNrX2FnYzJfbWluX2xldmVsKGlfcGFyYW1zLCBkZW1vZCk7CisKKwlpZiAoYWdjMl9pbnRlZ3IgPiBTVFYwOTAwX0JMSU5EX1NFQVJDSF9BR0MyX1RIKSB7CisJCWxvY2sgPSBGQUxTRTsKKworCX0gZWxzZSB7CisJCXN3aXRjaCAoZGVtb2QpIHsKKwkJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJCWRlZmF1bHQ6CisJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPT0gMHgxMCkKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ09SUkVMRVhQLCAweEFBKTsKKworCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkIDwgMHgyMCkKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSSERSLCAweDU1KTsKKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUkNGRywgMHhDNCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfUlRDUzIsIDB4NDQpOworCisJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9FUVVBTENGRywgMHg0MSk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0ZGRUNGRywgMHg0MSk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1ZJVFNDQUxFLCAweDgyKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVkFWU1JWSVQsIDB4MCk7CisJCQl9CisKKwkJCWtyZWZfdG1nX3JlZyA9IFIwOTAwX1AxX0tSRUZUTUc7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPT0gMHgxMCkKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ09SUkVMRVhQLCAweEFBKTsKKworCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkIDwgMHgyMCkKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSSERSLCAweDU1KTsKKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUkNGRywgMHhDNCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfUlRDUzIsIDB4NDQpOworCisJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9FUVVBTENGRywgMHg0MSk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0ZGRUNGRywgMHg0MSk7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1ZJVFNDQUxFLCAweDgyKTsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfVkFWU1JWSVQsIDB4MCk7CisJCQl9CisKKwkJCWtyZWZfdG1nX3JlZyA9IFIwOTAwX1AyX0tSRUZUTUc7CisJCQlicmVhazsKKwkJfQorCisJCWtfcmVmX3RtZyA9IGtfcmVmX3RtZ19tYXg7CisKKwkJZG8geworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIGtyZWZfdG1nX3JlZywga19yZWZfdG1nKTsKKwkJCWlmIChzdHYwOTAwX3NlYXJjaF9zcmF0ZV9jb2Fyc2UoZmUpICE9IDApIHsKKwkJCQljb2Fyc2Vfc3JhdGUgPSBzdHYwOTAwX3NlYXJjaF9zcmF0ZV9maW5lKGZlKTsKKworCQkJCWlmIChjb2Fyc2Vfc3JhdGUgIT0gMCkgeworCQkJCQlzdHYwOTAwX2dldF9sb2NrX3RpbWVvdXQoJmRlbW9kX3RpbWVvdXQsICZmZWNfdGltZW91dCwgY29hcnNlX3NyYXRlLCBTVFYwOTAwX0JMSU5EX1NFQVJDSCk7CisJCQkJCWxvY2sgPSBzdHYwOTAwX2dldF9kZW1vZF9sb2NrKGlfcGFyYW1zLCBkZW1vZCwgZGVtb2RfdGltZW91dCk7CisJCQkJfSBlbHNlCisJCQkJCWxvY2sgPSBGQUxTRTsKKwkJCX0gZWxzZSB7CisJCQkJZmFpbF9jcHQgPSAwOworCQkJCWFnYzJfb3ZlcmZsb3cgPSAwOworCisJCQkJc3dpdGNoIChkZW1vZCkgeworCQkJCWNhc2UgU1RWMDkwMF9ERU1PRF8xOgorCQkJCWRlZmF1bHQ6CisJCQkJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCQkJCQlhZ2MyX2ludGVnciA9IChzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BR0MySTEpIDw8IDgpCisJCQkJCQkJCXwgc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUdDMkkwKTsKKworCQkJCQkJaWYgKGFnYzJfaW50ZWdyID49IDB4ZmYwMCkKKwkJCQkJCQlhZ2MyX292ZXJmbG93Kys7CisKKwkJCQkJCWRzdGF0dXMyID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRFNUQVRVUzIpOworCisJCQkJCQlpZiAoKChkc3RhdHVzMiAmIDB4MSkgPT0gMHgxKSAmJiAoKGRzdGF0dXMyID4+IDcpID09IDEpKQorCQkJCQkJCWZhaWxfY3B0Kys7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCQkJCWZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSB7CisJCQkJCQlhZ2MyX2ludGVnciA9IChzdHYwOTAwX3JlYWRfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BR0MySTEpIDw8IDgpCisJCQkJCQkJCXwgc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUdDMkkwKTsKKworCQkJCQkJaWYgKGFnYzJfaW50ZWdyID49IDB4ZmYwMCkKKwkJCQkJCQlhZ2MyX292ZXJmbG93Kys7CisKKwkJCQkJCWRzdGF0dXMyID0gc3R2MDkwMF9yZWFkX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRFNUQVRVUzIpOworCisJCQkJCQlpZiAoKChkc3RhdHVzMiAmIDB4MSkgPT0gMHgxKSAmJiAoKGRzdGF0dXMyID4+IDcpID09IDEpKQorCQkJCQkJCWZhaWxfY3B0Kys7CisJCQkJCX0KKwkJCQkJYnJlYWs7CisJCQkJfQorCisJCQkJaWYgKChmYWlsX2NwdCA+IDcpIHx8IChhZ2MyX292ZXJmbG93ID4gNykpCisJCQkJCWNvYXJzZV9mYWlsID0gVFJVRTsKKworCQkJCWxvY2sgPSBGQUxTRTsKKwkJCX0KKwkJCWtfcmVmX3RtZyAtPSAzMDsKKwkJfSB3aGlsZSAoKGtfcmVmX3RtZyA+PSBrX3JlZl90bWdfbWluKSAmJiAobG9jayA9PSBGQUxTRSkgJiYgKGNvYXJzZV9mYWlsID09IEZBTFNFKSk7CisJfQorCisJcmV0dXJuIGxvY2s7Cit9CisKK3N0YXRpYyB2b2lkIHN0djA5MDBfc2V0X3ZpdGVyYmlfYWNxKHN0cnVjdCBzdHYwOTAwX2ludGVybmFsICppX3BhcmFtcywKKwkJCQkJZW51bSBmZV9zdHYwOTAwX2RlbW9kX251bSBkZW1vZCkKK3sKKwlzMzIgdnRoX3JlZzsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJZG1kX3JlZyh2dGhfcmVnLCBSMDkwMF9QMV9WVEgxMiwgUjA5MDBfUDJfVlRIMTIpOworCisJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHZ0aF9yZWcrKywgMHg5Nik7CisJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHZ0aF9yZWcrKywgMHg2NCk7CisJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHZ0aF9yZWcrKywgMHgzNik7CisJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHZ0aF9yZWcrKywgMHgyMyk7CisJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHZ0aF9yZWcrKywgMHgxRSk7CisJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIHZ0aF9yZWcrKywgMHgxOSk7Cit9CisKK3N0YXRpYyB2b2lkIHN0djA5MDBfc2V0X3NlYXJjaF9zdGFuZGFyZChzdHJ1Y3Qgc3R2MDkwMF9pbnRlcm5hbCAqaV9wYXJhbXMsCisJCQkJCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QpCit7CisKKwlpbnQgc3N0bmRyZDsKKworCWRwcmludGsoS0VSTl9JTkZPICIlc1xuIiwgX19mdW5jX18pOworCisJc3N0bmRyZCA9IGlfcGFyYW1zLT5kbWQxX3NyY2hfc3RhbmRhcmQ7CisJaWYgKGRlbW9kID09IDEpCisJCXNzdG5kcmQgPSBpX3BhcmFtcy0+ZG1kMl9zcmNoX3N0bmRyZDsKKworCXN3aXRjaCAoc3N0bmRyZCkgeworCWNhc2UgU1RWMDkwMF9TRUFSQ0hfRFZCUzE6CisJCWRwcmludGsoIlNlYXJjaCBTdGFuZGFyZCA9IERWQlMxXG4iKTsKKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX1NFQVJDSF9EU1M6CisJCWRwcmludGsoIlNlYXJjaCBTdGFuZGFyZCA9IERTU1xuIik7CisJY2FzZSBTVFYwOTAwX1NFQVJDSF9EVkJTMjoKKwkJYnJlYWs7CisJCWRwcmludGsoIlNlYXJjaCBTdGFuZGFyZCA9IERWQlMyXG4iKTsKKwljYXNlIFNUVjA5MDBfQVVUT19TRUFSQ0g6CisJZGVmYXVsdDoKKwkJZHByaW50aygiU2VhcmNoIFN0YW5kYXJkID0gQVVUT1xuIik7CisJCWJyZWFrOworCX0KKworCXN3aXRjaCAoZGVtb2QpIHsKKwljYXNlIFNUVjA5MDBfREVNT0RfMToKKwlkZWZhdWx0OgorCQlzd2l0Y2ggKGlfcGFyYW1zLT5kbWQxX3NyY2hfc3RhbmRhcmQpIHsKKwkJY2FzZSBTVFYwOTAwX1NFQVJDSF9EVkJTMToKKwkJY2FzZSBTVFYwOTAwX1NFQVJDSF9EU1M6CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMxX0VOQUJMRSwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMyX0VOQUJMRSwgMCk7CisKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfU1RPUF9DTEtWSVQxLCAwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BQ0xDLCAweDFhKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9CQ0xDLCAweDA5KTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DQVIyQ0ZHLCAweDIyKTsKKworCQkJc3R2MDkwMF9zZXRfdml0ZXJiaV9hY3EoaV9wYXJhbXMsIGRlbW9kKTsKKwkJCXN0djA5MDBfc2V0X3ZpdGVyYmlfc3RhbmRhcmQoaV9wYXJhbXMsCisJCQkJCQlpX3BhcmFtcy0+ZG1kMV9zcmNoX3N0YW5kYXJkLAorCQkJCQkJaV9wYXJhbXMtPmRtZDFfZmVjLCBkZW1vZCk7CisKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfU0VBUkNIX0RWQlMyOgorCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9EVkJTMV9FTkFCTEUsIDApOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9EVkJTMl9FTkFCTEUsIDApOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9EVkJTMV9FTkFCTEUsIDEpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMV9EVkJTMl9FTkFCTEUsIDEpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9TVE9QX0NMS1ZJVDEsIDEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0FDTEMsIDB4MWEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0JDTEMsIDB4MDkpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NBUjJDRkcsIDB4MjYpOworCQkJaWYgKGlfcGFyYW1zLT5kZW1vZF9tb2RlICE9IFNUVjA5MDBfU0lOR0xFKSB7CisJCQkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkIDw9IDB4MTEpCisJCQkJCXN0djA5MDBfc3RvcF9hbGxfczJfbW9kY29kKGlfcGFyYW1zLCBkZW1vZCk7CisJCQkJZWxzZQorCQkJCQlzdHYwOTAwX2FjdGl2YXRlX3MyX21vZGNvZGUoaV9wYXJhbXMsIGRlbW9kKTsKKworCQkJfSBlbHNlCisJCQkJc3R2MDkwMF9hY3RpdmF0ZV9zMl9tb2Rjb2RlX3NpbmdsZShpX3BhcmFtcywgZGVtb2QpOworCisJCQlzdHYwOTAwX3NldF92aXRlcmJpX3RyYWNxKGlfcGFyYW1zLCBkZW1vZCk7CisKKwkJCWJyZWFrOworCQljYXNlIFNUVjA5MDBfQVVUT19TRUFSQ0g6CisJCWRlZmF1bHQ6CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMxX0VOQUJMRSwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMyX0VOQUJMRSwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMxX0VOQUJMRSwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX0RWQlMyX0VOQUJMRSwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1NUT1BfQ0xLVklUMSwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQUNMQywgMHgxYSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQkNMQywgMHgwOSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ0FSMkNGRywgMHgyNik7CisJCQlpZiAoaV9wYXJhbXMtPmRlbW9kX21vZGUgIT0gU1RWMDkwMF9TSU5HTEUpIHsKKwkJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPD0gMHgxMSkKKwkJCQkJc3R2MDkwMF9zdG9wX2FsbF9zMl9tb2Rjb2QoaV9wYXJhbXMsIGRlbW9kKTsKKwkJCQllbHNlCisJCQkJCXN0djA5MDBfYWN0aXZhdGVfczJfbW9kY29kZShpX3BhcmFtcywgZGVtb2QpOworCisJCQl9IGVsc2UKKwkJCQlzdHYwOTAwX2FjdGl2YXRlX3MyX21vZGNvZGVfc2luZ2xlKGlfcGFyYW1zLCBkZW1vZCk7CisKKwkJCWlmIChpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSA+PSAyMDAwMDAwKQorCQkJCXN0djA5MDBfc2V0X3ZpdGVyYmlfYWNxKGlfcGFyYW1zLCBkZW1vZCk7CisJCQllbHNlCisJCQkJc3R2MDkwMF9zZXRfdml0ZXJiaV90cmFjcShpX3BhcmFtcywgZGVtb2QpOworCisJCQlzdHYwOTAwX3NldF92aXRlcmJpX3N0YW5kYXJkKGlfcGFyYW1zLCBpX3BhcmFtcy0+ZG1kMV9zcmNoX3N0YW5kYXJkLCBpX3BhcmFtcy0+ZG1kMV9mZWMsIGRlbW9kKTsKKworCQkJYnJlYWs7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCXN3aXRjaCAoaV9wYXJhbXMtPmRtZDJfc3JjaF9zdG5kcmQpIHsKKwkJY2FzZSBTVFYwOTAwX1NFQVJDSF9EVkJTMToKKwkJY2FzZSBTVFYwOTAwX1NFQVJDSF9EU1M6CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMxX0VOQUJMRSwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMyX0VOQUJMRSwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1NUT1BfQ0xLVklUMiwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUNMQywgMHgxYSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQkNMQywgMHgwOSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSMkNGRywgMHgyMik7CisJCQlzdHYwOTAwX3NldF92aXRlcmJpX2FjcShpX3BhcmFtcywgZGVtb2QpOworCQkJc3R2MDkwMF9zZXRfdml0ZXJiaV9zdGFuZGFyZChpX3BhcmFtcywgaV9wYXJhbXMtPmRtZDJfc3JjaF9zdG5kcmQsIGlfcGFyYW1zLT5kbWQyX2ZlYywgZGVtb2QpOworCQkJYnJlYWs7CisJCWNhc2UgU1RWMDkwMF9TRUFSQ0hfRFZCUzI6CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMxX0VOQUJMRSwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMyX0VOQUJMRSwgMCk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMxX0VOQUJMRSwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX0RWQlMyX0VOQUJMRSwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1NUT1BfQ0xLVklUMiwgMSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUNMQywgMHgxYSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQkNMQywgMHgwOSk7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ0FSMkNGRywgMHgyNik7CisJCQlpZiAoaV9wYXJhbXMtPmRlbW9kX21vZGUgIT0gU1RWMDkwMF9TSU5HTEUpCisJCQkJc3R2MDkwMF9hY3RpdmF0ZV9zMl9tb2Rjb2RlKGlfcGFyYW1zLCBkZW1vZCk7CisJCQllbHNlCisJCQkJc3R2MDkwMF9hY3RpdmF0ZV9zMl9tb2Rjb2RlX3NpbmdsZShpX3BhcmFtcywgZGVtb2QpOworCisJCQlzdHYwOTAwX3NldF92aXRlcmJpX3RyYWNxKGlfcGFyYW1zLCBkZW1vZCk7CisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0FVVE9fU0VBUkNIOgorCQlkZWZhdWx0OgorCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMV9FTkFCTEUsIDApOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMl9FTkFCTEUsIDApOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMV9FTkFCTEUsIDEpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9EVkJTMl9FTkFCTEUsIDEpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9TVE9QX0NMS1ZJVDIsIDApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0FDTEMsIDB4MWEpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0JDTEMsIDB4MDkpOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NBUjJDRkcsIDB4MjYpOworCQkJaWYgKGlfcGFyYW1zLT5kZW1vZF9tb2RlICE9IFNUVjA5MDBfU0lOR0xFKQorCQkJCXN0djA5MDBfYWN0aXZhdGVfczJfbW9kY29kZShpX3BhcmFtcywgZGVtb2QpOworCQkJZWxzZQorCQkJCXN0djA5MDBfYWN0aXZhdGVfczJfbW9kY29kZV9zaW5nbGUoaV9wYXJhbXMsIGRlbW9kKTsKKworCQkJaWYgKGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlID49IDIwMDAwMDApCisJCQkJc3R2MDkwMF9zZXRfdml0ZXJiaV9hY3EoaV9wYXJhbXMsIGRlbW9kKTsKKwkJCWVsc2UKKwkJCQlzdHYwOTAwX3NldF92aXRlcmJpX3RyYWNxKGlfcGFyYW1zLCBkZW1vZCk7CisKKwkJCXN0djA5MDBfc2V0X3ZpdGVyYmlfc3RhbmRhcmQoaV9wYXJhbXMsIGlfcGFyYW1zLT5kbWQyX3NyY2hfc3RuZHJkLCBpX3BhcmFtcy0+ZG1kMl9mZWMsIGRlbW9kKTsKKworCQkJYnJlYWs7CisJCX0KKworCQlicmVhazsKKwl9Cit9CisKK2VudW0gZmVfc3R2MDkwMF9zaWduYWxfdHlwZSBzdHYwOTAwX2FsZ28oc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHN0djA5MDBfc3RhdGUgKnN0YXRlID0gZmUtPmRlbW9kdWxhdG9yX3ByaXY7CisJc3RydWN0IHN0djA5MDBfaW50ZXJuYWwgKmlfcGFyYW1zID0gc3RhdGUtPmludGVybmFsOworCWVudW0gZmVfc3R2MDkwMF9kZW1vZF9udW0gZGVtb2QgPSBzdGF0ZS0+ZGVtb2Q7CisKKwlzMzIgZGVtb2RfdGltZW91dCA9IDUwMCwgZmVjX3RpbWVvdXQgPSA1MCwgc3RyZWFtX21lcmdlcl9maWVsZDsKKworCWludCBsb2NrID0gRkFMU0UsIGxvd19zciA9IEZBTFNFOworCisJZW51bSBmZV9zdHYwOTAwX3NpZ25hbF90eXBlIHNpZ25hbF90eXBlID0gU1RWMDkwMF9OT0NBUlJJRVI7CisJZW51bSBmZV9zdHYwOTAwX3NlYXJjaF9hbGdvIGFsZ287CisJaW50IG5vX3NpZ25hbCA9IEZBTFNFOworCisJZHByaW50ayhLRVJOX0lORk8gIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlzd2l0Y2ggKGRlbW9kKSB7CisJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJZGVmYXVsdDoKKwkJYWxnbyA9IGlfcGFyYW1zLT5kbWQxX3NyY2hfYWxnbzsKKworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AxX1JTVF9IV0FSRSwgMSk7CisJCXN0cmVhbV9tZXJnZXJfZmllbGQgPSBGMDkwMF9QMV9SU1RfSFdBUkU7CisKKwkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0RNRElTVEFURSwgMHg1Qyk7CisKKwkJaWYgKGlfcGFyYW1zLT5jaGlwX2lkID49IDB4MjApCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ09SUkVMQUJTLCAweDllKTsKKwkJZWxzZQorCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0NPUlJFTEFCUywgMHg4OCk7CisKKwkJc3R2MDkwMF9nZXRfbG9ja190aW1lb3V0KCZkZW1vZF90aW1lb3V0LCAmZmVjX3RpbWVvdXQsIGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlLCBpX3BhcmFtcy0+ZG1kMV9zcmNoX2FsZ28pOworCisJCWlmIChpX3BhcmFtcy0+ZG1kMV9zcmNoX2FsZ28gPT0gU1RWMDkwMF9CTElORF9TRUFSQ0gpIHsKKwkJCWlfcGFyYW1zLT50dW5lcjFfYncgPSAyICogMzYwMDAwMDA7CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdDRkcyLCAweDAwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DT1JSRUxNQU5ULCAweDcwKTsKKworCQkJc3R2MDkwMF9zZXRfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCAxMDAwMDAwLCBkZW1vZCk7CisJCX0gZWxzZSB7CisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRE1EVDBNLCAweDIwKTsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9UTUdDRkcsIDB4ZDIpOworCisJCQlpZiAoaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUgPCAyMDAwMDAwKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9DT1JSRUxNQU5ULCAweDYzKTsKKwkJCWVsc2UKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfQ09SUkVMTUFOVCwgMHg3MCk7CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9BR0MyUkVGLCAweDM4KTsKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0tSRUZUTUcsIDB4NWEpOworCisJCQkJaWYgKGlfcGFyYW1zLT5kbWQxX3NyY2hfYWxnbyA9PSBTVFYwOTAwX0NPTERfU1RBUlQpCisJCQkJCWlfcGFyYW1zLT50dW5lcjFfYncgPSAoMTUgKiAoc3R2MDkwMF9jYXJyaWVyX3dpZHRoKGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlLCBpX3BhcmFtcy0+cm9sbG9mZikgKyAxMDAwMDAwMCkpIC8gMTA7CisJCQkJZWxzZSBpZiAoaV9wYXJhbXMtPmRtZDFfc3JjaF9hbGdvID09IFNUVjA5MDBfV0FSTV9TVEFSVCkKKwkJCQkJaV9wYXJhbXMtPnR1bmVyMV9idyA9IHN0djA5MDBfY2Fycmllcl93aWR0aChpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSwgaV9wYXJhbXMtPnJvbGxvZmYpICsgMTAwMDAwMDA7CisJCQl9IGVsc2UgeworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9LUkVGVE1HLCAweGMxKTsKKwkJCQlpX3BhcmFtcy0+dHVuZXIxX2J3ID0gKDE1ICogKHN0djA5MDBfY2Fycmllcl93aWR0aChpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSwgaV9wYXJhbXMtPnJvbGxvZmYpICsgMTAwMDAwMDApKSAvIDEwOworCQkJfQorCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfVE1HQ0ZHMiwgMHgwMSk7CisKKwkJCXN0djA5MDBfc2V0X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgaV9wYXJhbXMtPmRtZDFfc3ltYm9sX3JhdGUsIGRlbW9kKTsKKwkJCXN0djA5MDBfc2V0X21heF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlLCBkZW1vZCk7CisJCQlzdHYwOTAwX3NldF9taW5fc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBpX3BhcmFtcy0+ZG1kMV9zeW1ib2xfcmF0ZSwgZGVtb2QpOworCQkJaWYgKGlfcGFyYW1zLT5kbWQxX3N5bWJvbF9yYXRlID49IDEwMDAwMDAwKQorCQkJCWxvd19zciA9IEZBTFNFOworCQkJZWxzZQorCQkJCWxvd19zciA9IFRSVUU7CisKKwkJfQorCisJCXN0djA5MDBfc2V0X3R1bmVyKGZlLCBpX3BhcmFtcy0+dHVuZXIxX2ZyZXEsIGlfcGFyYW1zLT50dW5lcjFfYncpOworCisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfU1BFQ0lOVl9DT05UUk9MLCBpX3BhcmFtcy0+ZG1kMV9zcmNoX2lxX2ludik7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfTUFOVUFMX1JPTExPRkYsIDEpOworCisJCXN0djA5MDBfc2V0X3NlYXJjaF9zdGFuZGFyZChpX3BhcmFtcywgZGVtb2QpOworCisJCWlmIChpX3BhcmFtcy0+ZG1kMV9zcmNoX2FsZ28gIT0gU1RWMDkwMF9CTElORF9TRUFSQ0gpCisJCQlzdHYwOTAwX3N0YXJ0X3NlYXJjaChpX3BhcmFtcywgZGVtb2QpOworCQlicmVhazsKKwljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJYWxnbyA9IGlfcGFyYW1zLT5kbWQyX3NyY2hfYWxnbzsKKworCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIEYwOTAwX1AyX1JTVF9IV0FSRSwgMSk7CisKKwkJc3RyZWFtX21lcmdlcl9maWVsZCA9IEYwOTAwX1AyX1JTVF9IV0FSRTsKKworCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRE1ESVNUQVRFLCAweDVDKTsKKworCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPj0gMHgyMCkKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DT1JSRUxBQlMsIDB4OWUpOworCQllbHNlCisJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQ09SUkVMQUJTLCAweDg4KTsKKworCQlzdHYwOTAwX2dldF9sb2NrX3RpbWVvdXQoJmRlbW9kX3RpbWVvdXQsICZmZWNfdGltZW91dCwgaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUsIGlfcGFyYW1zLT5kbWQyX3NyY2hfYWxnbyk7CisKKwkJaWYgKGlfcGFyYW1zLT5kbWQyX3NyY2hfYWxnbyA9PSBTVFYwOTAwX0JMSU5EX1NFQVJDSCkgeworCQkJaV9wYXJhbXMtPnR1bmVyMl9idyA9IDIgKiAzNjAwMDAwMDsKKworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR0NGRzIsIDB4MDApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NPUlJFTE1BTlQsIDB4NzApOworCisJCQlzdHYwOTAwX3NldF9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIDEwMDAwMDAsIGRlbW9kKTsKKwkJfSBlbHNlIHsKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9ETURUME0sIDB4MjApOworCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1RNR0NGRywgMHhkMik7CisKKwkJCWlmIChpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSA8IDIwMDAwMDApCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0NPUlJFTE1BTlQsIDB4NjMpOworCQkJZWxzZQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9DT1JSRUxNQU5ULCAweDcwKTsKKworCQkJaWYgKGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlID49IDEwMDAwMDAwKQorCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9BR0MyUkVGLCAweDM4KTsKKwkJCWVsc2UKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfQUdDMlJFRiwgMHg2MCk7CisKKwkJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA+PSAweDIwKSB7CisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0tSRUZUTUcsIDB4NWEpOworCisJCQkJaWYgKGlfcGFyYW1zLT5kbWQyX3NyY2hfYWxnbyA9PSBTVFYwOTAwX0NPTERfU1RBUlQpCisJCQkJCWlfcGFyYW1zLT50dW5lcjJfYncgPSAoMTUgKiAoc3R2MDkwMF9jYXJyaWVyX3dpZHRoKGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlLAorCQkJCQkJCWlfcGFyYW1zLT5yb2xsb2ZmKSArIDEwMDAwMDAwKSkgLyAxMDsKKwkJCQllbHNlIGlmIChpX3BhcmFtcy0+ZG1kMl9zcmNoX2FsZ28gPT0gU1RWMDkwMF9XQVJNX1NUQVJUKQorCQkJCQlpX3BhcmFtcy0+dHVuZXIyX2J3ID0gc3R2MDkwMF9jYXJyaWVyX3dpZHRoKGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlLAorCQkJCQkJCWlfcGFyYW1zLT5yb2xsb2ZmKSArIDEwMDAwMDAwOworCQkJfSBlbHNlIHsKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfS1JFRlRNRywgMHhjMSk7CisJCQkJaV9wYXJhbXMtPnR1bmVyMl9idyA9ICgxNSAqIChzdHYwOTAwX2NhcnJpZXJfd2lkdGgoaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUsCisJCQkJCQkJCQlpX3BhcmFtcy0+cm9sbG9mZikgKyAxMDAwMDAwMCkpIC8gMTA7CisJCQl9CisKKwkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9UTUdDRkcyLCAweDAxKTsKKworCQkJc3R2MDkwMF9zZXRfc3ltYm9sX3JhdGUoaV9wYXJhbXMsIGlfcGFyYW1zLT5tY2xrLCBpX3BhcmFtcy0+ZG1kMl9zeW1ib2xfcmF0ZSwgZGVtb2QpOworCQkJc3R2MDkwMF9zZXRfbWF4X3N5bWJvbF9yYXRlKGlfcGFyYW1zLCBpX3BhcmFtcy0+bWNsaywgaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUsIGRlbW9kKTsKKwkJCXN0djA5MDBfc2V0X21pbl9zeW1ib2xfcmF0ZShpX3BhcmFtcywgaV9wYXJhbXMtPm1jbGssIGlfcGFyYW1zLT5kbWQyX3N5bWJvbF9yYXRlLCBkZW1vZCk7CisJCQlpZiAoaV9wYXJhbXMtPmRtZDJfc3ltYm9sX3JhdGUgPj0gMTAwMDAwMDApCisJCQkJbG93X3NyID0gRkFMU0U7CisJCQllbHNlCisJCQkJbG93X3NyID0gVFJVRTsKKworCQl9CisKKwkJc3R2MDkwMF9zZXRfdHVuZXIoZmUsIGlfcGFyYW1zLT50dW5lcjJfZnJlcSwgaV9wYXJhbXMtPnR1bmVyMl9idyk7CisKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9TUEVDSU5WX0NPTlRST0wsIGlfcGFyYW1zLT5kbWQyX3NyY2hfaXFfaW52KTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBGMDkwMF9QMl9NQU5VQUxfUk9MTE9GRiwgMSk7CisKKwkJc3R2MDkwMF9zZXRfc2VhcmNoX3N0YW5kYXJkKGlfcGFyYW1zLCBkZW1vZCk7CisKKwkJaWYgKGlfcGFyYW1zLT5kbWQyX3NyY2hfYWxnbyAhPSBTVFYwOTAwX0JMSU5EX1NFQVJDSCkKKwkJCXN0djA5MDBfc3RhcnRfc2VhcmNoKGlfcGFyYW1zLCBkZW1vZCk7CisJCWJyZWFrOworCX0KKworCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA9PSAweDEyKSB7CisJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgc3RyZWFtX21lcmdlcl9maWVsZCwgMCk7CisJCW1zbGVlcCgzKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBzdHJlYW1fbWVyZ2VyX2ZpZWxkLCAxKTsKKwkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBzdHJlYW1fbWVyZ2VyX2ZpZWxkLCAwKTsKKwl9CisKKwlpZiAoYWxnbyA9PSBTVFYwOTAwX0JMSU5EX1NFQVJDSCkKKwkJbG9jayA9IHN0djA5MDBfYmxpbmRfc2VhcmNoX2FsZ28oZmUpOworCWVsc2UgaWYgKGFsZ28gPT0gU1RWMDkwMF9DT0xEX1NUQVJUKQorCQlsb2NrID0gc3R2MDkwMF9nZXRfZGVtb2RfY29sZF9sb2NrKGZlLCBkZW1vZF90aW1lb3V0KTsKKwllbHNlIGlmIChhbGdvID09IFNUVjA5MDBfV0FSTV9TVEFSVCkKKwkJbG9jayA9IHN0djA5MDBfZ2V0X2RlbW9kX2xvY2soaV9wYXJhbXMsIGRlbW9kLCBkZW1vZF90aW1lb3V0KTsKKworCWlmICgobG9jayA9PSBGQUxTRSkgJiYgKGFsZ28gPT0gU1RWMDkwMF9DT0xEX1NUQVJUKSkgeworCQlpZiAobG93X3NyID09IEZBTFNFKSB7CisJCQlpZiAoc3R2MDkwMF9jaGVja190aW1pbmdfbG9jayhpX3BhcmFtcywgZGVtb2QpID09IFRSVUUpCisJCQkJbG9jayA9IHN0djA5MDBfc3dfYWxnbyhpX3BhcmFtcywgZGVtb2QpOworCQl9CisJfQorCisJaWYgKGxvY2sgPT0gVFJVRSkKKwkJc2lnbmFsX3R5cGUgPSBzdHYwOTAwX2dldF9zaWduYWxfcGFyYW1zKGZlKTsKKworCWlmICgobG9jayA9PSBUUlVFKSAmJiAoc2lnbmFsX3R5cGUgPT0gU1RWMDkwMF9SQU5HRU9LKSkgeworCQlzdHYwOTAwX3RyYWNrX29wdGltaXphdGlvbihmZSk7CisJCWlmIChpX3BhcmFtcy0+Y2hpcF9pZCA8PSAweDExKSB7CisJCQlpZiAoKHN0djA5MDBfZ2V0X3N0YW5kYXJkKGZlLCBTVFYwOTAwX0RFTU9EXzEpID09IFNUVjA5MDBfRFZCUzFfU1RBTkRBUkQpICYmIChzdHYwOTAwX2dldF9zdGFuZGFyZChmZSwgU1RWMDkwMF9ERU1PRF8yKSA9PSBTVFYwOTAwX0RWQlMxX1NUQU5EQVJEKSkgeworCQkJCW1zbGVlcCgyMCk7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBzdHJlYW1fbWVyZ2VyX2ZpZWxkLCAwKTsKKwkJCX0gZWxzZSB7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBzdHJlYW1fbWVyZ2VyX2ZpZWxkLCAwKTsKKwkJCQltc2xlZXAoMyk7CisJCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBzdHJlYW1fbWVyZ2VyX2ZpZWxkLCAxKTsKKwkJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHN0cmVhbV9tZXJnZXJfZmllbGQsIDApOworCQkJfQorCQl9IGVsc2UgaWYgKGlfcGFyYW1zLT5jaGlwX2lkID09IDB4MjApIHsKKwkJCXN0djA5MDBfd3JpdGVfYml0cyhpX3BhcmFtcywgc3RyZWFtX21lcmdlcl9maWVsZCwgMCk7CisJCQltc2xlZXAoMyk7CisJCQlzdHYwOTAwX3dyaXRlX2JpdHMoaV9wYXJhbXMsIHN0cmVhbV9tZXJnZXJfZmllbGQsIDEpOworCQkJc3R2MDkwMF93cml0ZV9iaXRzKGlfcGFyYW1zLCBzdHJlYW1fbWVyZ2VyX2ZpZWxkLCAwKTsKKwkJfQorCisJCWlmIChzdHYwOTAwX3dhaXRfZm9yX2xvY2soaV9wYXJhbXMsIGRlbW9kLCBmZWNfdGltZW91dCwgZmVjX3RpbWVvdXQpID09IFRSVUUpIHsKKwkJCWxvY2sgPSBUUlVFOworCQkJc3dpdGNoIChkZW1vZCkgeworCQkJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJCQlkZWZhdWx0OgorCQkJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLmxvY2tlZCA9IFRSVUU7CisJCQkJaWYgKGlfcGFyYW1zLT5kbWQxX3JzbHRzLnN0YW5kYXJkID09IFNUVjA5MDBfRFZCUzJfU1RBTkRBUkQpIHsKKwkJCQkJc3R2MDkwMF9zZXRfZHZiczJfcm9sbG9mZihpX3BhcmFtcywgZGVtb2QpOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfUERFTENUUkwyLCAweDQwKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX1BERUxDVFJMMiwgMCk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9FUlJDVFJMMSwgMHg2Nyk7CisJCQkJfSBlbHNlIHsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AxX0VSUkNUUkwxLCAweDc1KTsKKwkJCQl9CisKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDFfRkJFUkNQVDQsIDApOworCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMV9FUlJDVFJMMiwgMHhjMSk7CisJCQkJYnJlYWs7CisJCQljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5sb2NrZWQgPSBUUlVFOworCisJCQkJaWYgKGlfcGFyYW1zLT5kbWQyX3JzbHRzLnN0YW5kYXJkID09IFNUVjA5MDBfRFZCUzJfU1RBTkRBUkQpIHsKKwkJCQkJc3R2MDkwMF9zZXRfZHZiczJfcm9sbG9mZihpX3BhcmFtcywgZGVtb2QpOworCQkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfUERFTENUUkwyLCAweDYwKTsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX1BERUxDVFJMMiwgMHgyMCk7CisJCQkJCXN0djA5MDBfd3JpdGVfcmVnKGlfcGFyYW1zLCBSMDkwMF9QMl9FUlJDVFJMMSwgMHg2Nyk7CisJCQkJfSBlbHNlIHsKKwkJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0VSUkNUUkwxLCAweDc1KTsKKwkJCQl9CisKKwkJCQlzdHYwOTAwX3dyaXRlX3JlZyhpX3BhcmFtcywgUjA5MDBfUDJfRkJFUkNQVDQsIDApOworCisJCQkJc3R2MDkwMF93cml0ZV9yZWcoaV9wYXJhbXMsIFIwOTAwX1AyX0VSUkNUUkwyLCAweGMxKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfSBlbHNlIHsKKwkJCWxvY2sgPSBGQUxTRTsKKwkJCXNpZ25hbF90eXBlID0gU1RWMDkwMF9OT0RBVEE7CisJCQlub19zaWduYWwgPSBzdHYwOTAwX2NoZWNrX3NpZ25hbF9wcmVzZW5jZShpX3BhcmFtcywgZGVtb2QpOworCisJCQlzd2l0Y2ggKGRlbW9kKSB7CisJCQljYXNlIFNUVjA5MDBfREVNT0RfMToKKwkJCWRlZmF1bHQ6CisJCQkJaV9wYXJhbXMtPmRtZDFfcnNsdHMubG9ja2VkID0gRkFMU0U7CisJCQkJYnJlYWs7CisJCQljYXNlIFNUVjA5MDBfREVNT0RfMjoKKwkJCQlpX3BhcmFtcy0+ZG1kMl9yc2x0cy5sb2NrZWQgPSBGQUxTRTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWlmICgoc2lnbmFsX3R5cGUgPT0gU1RWMDkwMF9OT0RBVEEpICYmIChub19zaWduYWwgPT0gRkFMU0UpKSB7CisJCXN3aXRjaCAoZGVtb2QpIHsKKwkJY2FzZSBTVFYwOTAwX0RFTU9EXzE6CisJCWRlZmF1bHQ6CisJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPD0gMHgxMSkgeworCQkJCWlmICgoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDFfSEVBREVSX01PREUpID09IFNUVjA5MDBfRFZCU19GT1VORCkgJiYKKwkJCQkJCShpX3BhcmFtcy0+ZG1kMV9zcmNoX2lxX2ludiA8PSBTVFYwOTAwX0lRX0FVVE9fTk9STUFMX0ZJUlNUKSkKKwkJCQkJc2lnbmFsX3R5cGUgPSBzdHYwOTAwX2R2YnMxX2FjcV93b3JrYXJvdW5kKGZlKTsKKwkJCX0gZWxzZQorCQkJCWlfcGFyYW1zLT5kbWQxX3JzbHRzLmxvY2tlZCA9IEZBTFNFOworCisJCQlicmVhazsKKwkJY2FzZSBTVFYwOTAwX0RFTU9EXzI6CisJCQlpZiAoaV9wYXJhbXMtPmNoaXBfaWQgPD0gMHgxMSkgeworCQkJCWlmICgoc3R2MDkwMF9nZXRfYml0cyhpX3BhcmFtcywgRjA5MDBfUDJfSEVBREVSX01PREUpID09IFNUVjA5MDBfRFZCU19GT1VORCkgJiYKKwkJCQkJCShpX3BhcmFtcy0+ZG1kMl9zcmNoX2lxX2ludiA8PSBTVFYwOTAwX0lRX0FVVE9fTk9STUFMX0ZJUlNUKSkKKwkJCQkJc2lnbmFsX3R5cGUgPSBzdHYwOTAwX2R2YnMxX2FjcV93b3JrYXJvdW5kKGZlKTsKKwkJCX0gZWxzZQorCQkJCWlfcGFyYW1zLT5kbWQyX3JzbHRzLmxvY2tlZCA9IEZBTFNFOworCQkJYnJlYWs7CisJCX0KKwl9CisKKwlyZXR1cm4gc2lnbmFsX3R5cGU7Cit9CisKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy9zdHY2MTEwLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwZWZhYzgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMC5jCkBAIC0wLDAgKzEsNDU2IEBACisvKgorICogc3R2NjExMC5jCisgKgorICogRHJpdmVyIGZvciBTVCBTVFY2MTEwIHNhdGVsbGl0ZSB0dW5lciBJQy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmV0VVAgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IElnb3IgTS4gTGlwbGlhbmluIDxsaXBsaWFuaW5AbmV0dXAucnU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9kdmIvZnJvbnRlbmQuaD4KKworI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisKKyNpbmNsdWRlICJzdHY2MTEwLmgiCisKK3N0YXRpYyBpbnQgZGVidWc7CisKK3N0cnVjdCBzdHY2MTEwX3ByaXYgeworCWludCBpMmNfYWRkcmVzczsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYzsKKworCXUzMiBtY2xrOworCXU4IHJlZ3NbOF07Cit9OworCisjZGVmaW5lIGRwcmludGsoYXJncy4uLikgXAorCWRvIHsgXAorCQlpZiAoZGVidWcpIFwKKwkJCXByaW50ayhLRVJOX0RFQlVHIGFyZ3MpOyBcCisJfSB3aGlsZSAoMCkKKworc3RhdGljIHMzMiBhYnNzdWIoczMyIGEsIHMzMiBiKQoreworCWlmIChhID4gYikKKwkJcmV0dXJuIGEgLSBiOworCWVsc2UKKwkJcmV0dXJuIGIgLSBhOworfTsKKworc3RhdGljIGludCBzdHY2MTEwX3JlbGVhc2Uoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJa2ZyZWUoZmUtPnR1bmVyX3ByaXYpOworCWZlLT50dW5lcl9wcml2ID0gTlVMTDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHY2MTEwX3dyaXRlX3JlZ3Moc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHU4IGJ1ZltdLAorCQkJCQkJCWludCBzdGFydCwgaW50IGxlbikKK3sKKwlzdHJ1Y3Qgc3R2NjExMF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisJaW50IHJjOworCXU4IGNtZGJ1ZltsZW4gKyAxXTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyCT0gcHJpdi0+aTJjX2FkZHJlc3MsCisJCS5mbGFncwk9IDAsCisJCS5idWYJPSBjbWRidWYsCisJCS5sZW4JPSBsZW4gKyAxCisJfTsKKworCWRwcmludGsoIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoc3RhcnQgKyBsZW4gPiA4KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW1lbWNweSgmY21kYnVmWzFdLCBidWYsIGxlbik7CisJY21kYnVmWzBdID0gc3RhcnQ7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOworCisJcmMgPSBpMmNfdHJhbnNmZXIocHJpdi0+aTJjLCAmbXNnLCAxKTsKKwlpZiAocmMgIT0gMSkKKwkJZHByaW50aygiJXM6IGkyYyBlcnJvclxuIiwgX19mdW5jX18pOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djYxMTBfcmVhZF9yZWdzKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1OCByZWdzW10sCisJCQkJCQkJaW50IHN0YXJ0LCBpbnQgbGVuKQoreworCXN0cnVjdCBzdHY2MTEwX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwlpbnQgcmM7CisJdTggcmVnW10gPSB7IHN0YXJ0IH07CisJc3RydWN0IGkyY19tc2cgbXNnX3dyID0geworCQkuYWRkcgk9IHByaXYtPmkyY19hZGRyZXNzLAorCQkuZmxhZ3MJPSAwLAorCQkuYnVmCT0gcmVnLAorCQkubGVuCT0gMSwKKwl9OworCisJc3RydWN0IGkyY19tc2cgbXNnX3JkID0geworCQkuYWRkcgk9IHByaXYtPmkyY19hZGRyZXNzLAorCQkuZmxhZ3MJPSBJMkNfTV9SRCwKKwkJLmJ1Zgk9IHJlZ3MsCisJCS5sZW4JPSBsZW4sCisJfTsKKwkvKiB3cml0ZSBzdWJhZGRyICovCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsKKworCXJjID0gaTJjX3RyYW5zZmVyKHByaXYtPmkyYywgJm1zZ193ciwgMSk7CisJaWYgKHJjICE9IDEpCisJCWRwcmludGsoIiVzOiBpMmMgZXJyb3JcbiIsIF9fZnVuY19fKTsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7CisJLyogcmVhZCByZWdpc3RlcnMgKi8KKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOworCisJcmMgPSBpMmNfdHJhbnNmZXIocHJpdi0+aTJjLCAmbXNnX3JkLCAxKTsKKwlpZiAocmMgIT0gMSkKKwkJZHByaW50aygiJXM6IGkyYyBlcnJvclxuIiwgX19mdW5jX18pOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKworCW1lbWNweSgmcHJpdi0+cmVnc1tzdGFydF0sIHJlZ3MsIGxlbik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHY2MTEwX3JlYWRfcmVnKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBpbnQgc3RhcnQpCit7CisJdTggYnVmW10gPSB7IDAgfTsKKwlzdHY2MTEwX3JlYWRfcmVncyhmZSwgYnVmLCBzdGFydCwgMSk7CisKKwlyZXR1cm4gYnVmWzBdOworfQorCitzdGF0aWMgaW50IHN0djYxMTBfc2xlZXAoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJdTggcmVnW10gPSB7IDAgfTsKKwlzdHY2MTEwX3dyaXRlX3JlZ3MoZmUsIHJlZywgMCwgMSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHUzMiBjYXJyaWVyX3dpZHRoKHUzMiBzeW1ib2xfcmF0ZSwgZmVfcm9sbG9mZl90IHJvbGxvZmYpCit7CisJdTMyIHJsZjsKKworCXN3aXRjaCAocm9sbG9mZikgeworCWNhc2UgUk9MTE9GRl8yMDoKKwkJcmxmID0gMjA7CisJCWJyZWFrOworCWNhc2UgUk9MTE9GRl8yNToKKwkJcmxmID0gMjU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJsZiA9IDM1OworCQlicmVhazsKKwl9CisKKwlyZXR1cm4gc3ltYm9sX3JhdGUgICsgKChzeW1ib2xfcmF0ZSAqIHJsZikgLyAxMDApOworfQorCitzdGF0aWMgaW50IHN0djYxMTBfc2V0X2JhbmR3aWR0aChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyIGJhbmR3aWR0aCkKK3sKKwlzdHJ1Y3Qgc3R2NjExMF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisJdTggcjgsIHJldCA9IDB4MDQ7CisJaW50IGk7CisKKwlpZiAoKGJhbmR3aWR0aCAvIDIpID4gMzYwMDAwMDApIC8qQlcvMiBtYXg9MzErNT0zNiBtaHogZm9yIHI4PTMxKi8KKwkJcjggPSAzMTsKKwllbHNlIGlmICgoYmFuZHdpZHRoIC8gMikgPCA1MDAwMDAwKSAvKiBCVy8yIG1pbj01TWh6IGZvciBGPTAgKi8KKwkJcjggPSAwOworCWVsc2UgLyppZiA1IDwgQlcvMiA8IDM2Ki8KKwkJcjggPSAoYmFuZHdpZHRoIC8gMikgLyAxMDAwMDAwIC0gNTsKKworCS8qIGN0cmwzLCBSQ0NMS09GRiA9IDAgQWN0aXZhdGUgdGhlIGNhbGlicmF0aW9uIENsb2NrICovCisJLyogY3RybDMsIENGID0gcjggU2V0IHRoZSBMUEYgdmFsdWUgKi8KKwlwcml2LT5yZWdzW1JTVFY2MTEwX0NUUkwzXSAmPSB+KCgxIDw8IDYpIHwgMHgxZik7CisJcHJpdi0+cmVnc1tSU1RWNjExMF9DVFJMM10gfD0gKHI4ICYgMHgxZik7CisJc3R2NjExMF93cml0ZV9yZWdzKGZlLCAmcHJpdi0+cmVnc1tSU1RWNjExMF9DVFJMM10sIFJTVFY2MTEwX0NUUkwzLCAxKTsKKwkvKiBzdGF0MSwgQ0FMUkNTVFJUID0gMSBTdGFydCBMUEYgYXV0byBjYWxpYnJhdGlvbiovCisJcHJpdi0+cmVnc1tSU1RWNjExMF9TVEFUMV0gfD0gMHgwMjsKKwlzdHY2MTEwX3dyaXRlX3JlZ3MoZmUsICZwcml2LT5yZWdzW1JTVFY2MTEwX1NUQVQxXSwgUlNUVjYxMTBfU1RBVDEsIDEpOworCisJaSA9IDA7CisJLyogV2FpdCBmb3IgQ0FMUkNTVFJUID09IDAgKi8KKwl3aGlsZSAoKGkgPCAxMCkgJiYgKHJldCAhPSAwKSkgeworCQlyZXQgPSAoKHN0djYxMTBfcmVhZF9yZWcoZmUsIFJTVFY2MTEwX1NUQVQxKSkgJiAweDAyKTsKKwkJbWRlbGF5KDEpOwkvKiB3YWl0IGZvciBMUEYgYXV0byBjYWxpYnJhdGlvbiAqLworCQlpKys7CisJfQorCisJLyogUkNDTEtPRkYgPSAxIGNhbGlicmF0aW9uIGRvbmUsIGRlc2FjdGl2YXRlIHRoZSBjYWxpYnJhdGlvbiBDbG9jayAqLworCXByaXYtPnJlZ3NbUlNUVjYxMTBfQ1RSTDNdIHw9ICgxIDw8IDYpOworCXN0djYxMTBfd3JpdGVfcmVncyhmZSwgJnByaXYtPnJlZ3NbUlNUVjYxMTBfQ1RSTDNdLCBSU1RWNjExMF9DVFJMMywgMSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2NjExMF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCBzdHY2MTEwX3ByaXYgKnByaXYgPSBmZS0+dHVuZXJfcHJpdjsKKwl1OCBidWYwW10gPSB7IDB4MDcsIDB4MTEsIDB4ZGMsIDB4ODUsIDB4MTcsIDB4MDEsIDB4ZTYsIDB4MWUgfTsKKworCW1lbWNweShwcml2LT5yZWdzLCBidWYwLCA4KTsKKwkvKiBLID0gKFJlZmVyZW5jZSAvIDEwMDAwMDApIC0gMTYgKi8KKwlwcml2LT5yZWdzW1JTVFY2MTEwX0NUUkwxXSAmPSB+KDB4MWYgPDwgMyk7CisJcHJpdi0+cmVnc1tSU1RWNjExMF9DVFJMMV0gfD0KKwkJCQkoKCgocHJpdi0+bWNsayAvIDEwMDAwMDApIC0gMTYpICYgMHgxZikgPDwgMyk7CisKKwlzdHY2MTEwX3dyaXRlX3JlZ3MoZmUsICZwcml2LT5yZWdzW1JTVFY2MTEwX0NUUkwxXSwgUlNUVjYxMTBfQ1RSTDEsIDgpOworCW1zbGVlcCgxKTsKKwlzdHY2MTEwX3NldF9iYW5kd2lkdGgoZmUsIDcyMDAwMDAwKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djYxMTBfZ2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyICpmcmVxdWVuY3kpCit7CisJc3RydWN0IHN0djYxMTBfcHJpdiAqcHJpdiA9IGZlLT50dW5lcl9wcml2OworCXUzMiBuYnN0ZXBzLCBkaXZpZGVyLCBwc2QyLCBmcmVxOworCXU4IHJlZ3NbXSA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OworCisJc3R2NjExMF9yZWFkX3JlZ3MoZmUsIHJlZ3MsIDAsIDgpOworCS8qTiovCisJZGl2aWRlciA9IChwcml2LT5yZWdzW1JTVFY2MTEwX1RVTklORzJdICYgMHgwZikgPDwgODsKKwlkaXZpZGVyICs9IHByaXYtPnJlZ3NbUlNUVjYxMTBfVFVOSU5HMV07CisKKwkvKlIqLworCW5ic3RlcHMgID0gKHByaXYtPnJlZ3NbUlNUVjYxMTBfVFVOSU5HMl0gPj4gNikgJiAzOworCS8qcCovCisJcHNkMiAgPSAocHJpdi0+cmVnc1tSU1RWNjExMF9UVU5JTkcyXSA+PiA0KSAmIDE7CisKKwlmcmVxID0gZGl2aWRlciAqIChwcml2LT5tY2xrIC8gMTAwMCk7CisJZnJlcSAvPSAoMSA8PCAobmJzdGVwcyArIHBzZDIpKTsKKwlmcmVxIC89IDQ7CisKKwkqZnJlcXVlbmN5ID0gZnJlcTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHN0djYxMTBfc2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwgdTMyIGZyZXF1ZW5jeSkKK3sKKwlzdHJ1Y3Qgc3R2NjExMF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisJc3RydWN0IGR0dl9mcm9udGVuZF9wcm9wZXJ0aWVzICpjID0gJmZlLT5kdHZfcHJvcGVydHlfY2FjaGU7CisJdTggcmV0ID0gMHgwNDsKKwl1MzIgZGl2aWRlciwgcmVmLCBwLCBwcmVzYywgaSwgcmVzdWx0X2ZyZXEsIHZjb19mcmVxOworCXMzMiBwX2NhbGMsIHBfY2FsY19vcHQgPSAxMDAwLCByX2Rpdiwgcl9kaXZfb3B0ID0gMCwgcF92YWw7CisJczMyIHNyYXRlOyB1OCBnYWluOworCisJZHByaW50aygiJXMsIGZyZXE9JWQga0h6LCBtY2xrPSVkIEh6XG4iLCBfX2Z1bmNfXywKKwkJCQkJCWZyZXF1ZW5jeSwgcHJpdi0+bWNsayk7CisKKwkvKiBLID0gKFJlZmVyZW5jZSAvIDEwMDAwMDApIC0gMTYgKi8KKwlwcml2LT5yZWdzW1JTVFY2MTEwX0NUUkwxXSAmPSB+KDB4MWYgPDwgMyk7CisJcHJpdi0+cmVnc1tSU1RWNjExMF9DVFJMMV0gfD0KKwkJCQkoKCgocHJpdi0+bWNsayAvIDEwMDAwMDApIC0gMTYpICYgMHgxZikgPDwgMyk7CisKKwkvKiBCQl9HQUlOID0gZGIvMiAqLworCWlmIChmZS0+b3BzLnNldF9wcm9wZXJ0eSAmJiBmZS0+b3BzLmdldF9wcm9wZXJ0eSkgeworCQlzcmF0ZSA9IGMtPnN5bWJvbF9yYXRlOworCQlkcHJpbnRrKCIlczogR2V0IEZyb250ZW5kIHBhcmFtZXRlcnM6IHNyYXRlPSVkXG4iLAorCQkJCQkJCV9fZnVuY19fLCBzcmF0ZSk7CisJfSBlbHNlCisJCXNyYXRlID0gMTUwMDAwMDA7CisKKwlpZiAoc3JhdGUgPj0gMTUwMDAwMDApCisJCWdhaW4gPSAzOyAvKiArNiBkQiAqLworCWVsc2UgaWYgKHNyYXRlID49IDUwMDAwMDApCisJCWdhaW4gPSAzOyAvKiArNiBkQiAqLworCWVsc2UKKwkJZ2FpbiA9IDM7IC8qICs2IGRCICovCisKKwlwcml2LT5yZWdzW1JTVFY2MTEwX0NUUkwyXSAmPSB+MHgwZjsKKwlwcml2LT5yZWdzW1JTVFY2MTEwX0NUUkwyXSB8PSAoZ2FpbiAmIDB4MGYpOworCisJaWYgKGZyZXF1ZW5jeSA8PSAxMDIzMDAwKSB7CisJCXAgPSAxOworCQlwcmVzYyA9IDA7CisJfSBlbHNlIGlmIChmcmVxdWVuY3kgPD0gMTMwMDAwMCkgeworCQlwID0gMTsKKwkJcHJlc2MgPSAxOworCX0gZWxzZSBpZiAoZnJlcXVlbmN5IDw9IDIwNDYwMDApIHsKKwkJcCA9IDA7CisJCXByZXNjID0gMDsKKwl9IGVsc2UgeworCQlwID0gMDsKKwkJcHJlc2MgPSAxOworCX0KKwkvKiBESVY0U0VMID0gcCovCisJcHJpdi0+cmVnc1tSU1RWNjExMF9UVU5JTkcyXSAmPSB+KDEgPDwgNCk7CisJcHJpdi0+cmVnc1tSU1RWNjExMF9UVU5JTkcyXSB8PSAocCA8PCA0KTsKKworCS8qIFBSRVNDMzJPTiA9IHByZXNjICovCisJcHJpdi0+cmVnc1tSU1RWNjExMF9UVU5JTkcyXSAmPSB+KDEgPDwgNSk7CisJcHJpdi0+cmVnc1tSU1RWNjExMF9UVU5JTkcyXSB8PSAocHJlc2MgPDwgNSk7CisKKwlwX3ZhbCA9IChpbnQpKDEgPDwgKHAgKyAxKSkgKiAxMDsvKiBQID0gMiBvciBQID0gNCAqLworCWZvciAocl9kaXYgPSAwOyByX2RpdiA8PSAzOyByX2RpdisrKSB7CisJCXBfY2FsYyA9IChwcml2LT5tY2xrIC8gMTAwMDAwKTsKKwkJcF9jYWxjIC89ICgxIDw8IChyX2RpdiArIDEpKTsKKwkJaWYgKChhYnNzdWIocF9jYWxjLCBwX3ZhbCkpIDwgKGFic3N1YihwX2NhbGNfb3B0LCBwX3ZhbCkpKQorCQkJcl9kaXZfb3B0ID0gcl9kaXY7CisKKwkJcF9jYWxjX29wdCA9IChwcml2LT5tY2xrIC8gMTAwMDAwKTsKKwkJcF9jYWxjX29wdCAvPSAoMSA8PCAocl9kaXZfb3B0ICsgMSkpOworCX0KKworCXJlZiA9IHByaXYtPm1jbGsgLyAoKDEgPDwgKHJfZGl2X29wdCArIDEpKSAgKiAoMSA8PCAocCArIDEpKSk7CisJZGl2aWRlciA9ICgoKGZyZXF1ZW5jeSAqIDEwMDApICsgKHJlZiA+PiAxKSkgLyByZWYpOworCisJLyogUkRJViA9IHJfZGl2X29wdCAqLworCXByaXYtPnJlZ3NbUlNUVjYxMTBfVFVOSU5HMl0gJj0gfigzIDw8IDYpOworCXByaXYtPnJlZ3NbUlNUVjYxMTBfVFVOSU5HMl0gfD0gKCgocl9kaXZfb3B0KSAmIDMpIDw8IDYpOworCisJLyogTkRJVl9NU0IgPSBNU0IoZGl2aWRlcikgKi8KKwlwcml2LT5yZWdzW1JTVFY2MTEwX1RVTklORzJdICY9IH4weDBmOworCXByaXYtPnJlZ3NbUlNUVjYxMTBfVFVOSU5HMl0gfD0gKCgoZGl2aWRlcikgPj4gOCkgJiAweDBmKTsKKworCS8qIE5ESVZfTFNCLCBMU0IoZGl2aWRlcikgKi8KKwlwcml2LT5yZWdzW1JTVFY2MTEwX1RVTklORzFdID0gKGRpdmlkZXIgJiAweGZmKTsKKworCS8qIENBTFZDT1NUUlQgPSAxIFZDTyBBdXRvIENhbGlicmF0aW9uICovCisJcHJpdi0+cmVnc1tSU1RWNjExMF9TVEFUMV0gfD0gMHgwNDsKKwlzdHY2MTEwX3dyaXRlX3JlZ3MoZmUsICZwcml2LT5yZWdzW1JTVFY2MTEwX0NUUkwxXSwKKwkJCQkJCVJTVFY2MTEwX0NUUkwxLCA4KTsKKworCWkgPSAwOworCS8qIFdhaXQgZm9yIENBTFZDT1NUUlQgPT0gMCAqLworCXdoaWxlICgoaSA8IDEwKSAmJiAocmV0ICE9IDApKSB7CisJCXJldCA9ICgoc3R2NjExMF9yZWFkX3JlZyhmZSwgUlNUVjYxMTBfU1RBVDEpKSAmIDB4MDQpOworCQltc2xlZXAoMSk7IC8qIHdhaXQgZm9yIFZDTyBhdXRvIGNhbGlicmF0aW9uICovCisJCWkrKzsKKwl9CisKKwlyZXQgPSBzdHY2MTEwX3JlYWRfcmVnKGZlLCBSU1RWNjExMF9TVEFUMSk7CisJc3R2NjExMF9nZXRfZnJlcXVlbmN5KGZlLCAmcmVzdWx0X2ZyZXEpOworCisJdmNvX2ZyZXEgPSBkaXZpZGVyICogKChwcml2LT5tY2xrIC8gMTAwMCkgLyAoKDEgPDwgKHJfZGl2X29wdCArIDEpKSkpOworCWRwcmludGsoIiVzLCBzdGF0MT0leCwgbG9fZnJlcT0lZCBrSHosIHZjb19mcmVjPSVkIGtIelxuIiwgX19mdW5jX18sCisJCQkJCQlyZXQsIHJlc3VsdF9mcmVxLCB2Y29fZnJlcSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzdHY2MTEwX3NldF9wYXJhbXMoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkgICAgICBzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgZHR2X2Zyb250ZW5kX3Byb3BlcnRpZXMgKmMgPSAmZmUtPmR0dl9wcm9wZXJ0eV9jYWNoZTsKKwl1MzIgYmFuZHdpZHRoID0gY2Fycmllcl93aWR0aChjLT5zeW1ib2xfcmF0ZSwgYy0+cm9sbG9mZik7CisKKwlzdHY2MTEwX3NldF9mcmVxdWVuY3koZmUsIGMtPmZyZXF1ZW5jeSk7CisJc3R2NjExMF9zZXRfYmFuZHdpZHRoKGZlLCBiYW5kd2lkdGgpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc3R2NjExMF9nZXRfYmFuZHdpZHRoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCB1MzIgKmJhbmR3aWR0aCkKK3sKKwlzdHJ1Y3Qgc3R2NjExMF9wcml2ICpwcml2ID0gZmUtPnR1bmVyX3ByaXY7CisJdTggcjggPSAwOworCXU4IHJlZ3NbXSA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OworCXN0djYxMTBfcmVhZF9yZWdzKGZlLCByZWdzLCAwLCA4KTsKKworCS8qIENGICovCisJcjggPSBwcml2LT5yZWdzW1JTVFY2MTEwX0NUUkwzXSAmIDB4MWY7CisJKmJhbmR3aWR0aCA9IChyOCArIDUpICogMjAwMDAwMDsvKiB4MiBmb3IgWklGIHR1bmVyIEJXLzIgPSBGKzUgTWh6ICovCisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBkdmJfdHVuZXJfb3BzIHN0djYxMTBfdHVuZXJfb3BzID0geworCS5pbmZvID0geworCQkubmFtZSA9ICJTVCBTVFY2MTEwIiwKKwkJLmZyZXF1ZW5jeV9taW4gPSA5NTAwMDAsCisJCS5mcmVxdWVuY3lfbWF4ID0gMjE1MDAwMCwKKwkJLmZyZXF1ZW5jeV9zdGVwID0gMTAwMCwKKwl9LAorCS5pbml0ID0gc3R2NjExMF9pbml0LAorCS5yZWxlYXNlID0gc3R2NjExMF9yZWxlYXNlLAorCS5zbGVlcCA9IHN0djYxMTBfc2xlZXAsCisJLnNldF9wYXJhbXMgPSBzdHY2MTEwX3NldF9wYXJhbXMsCisJLmdldF9mcmVxdWVuY3kgPSBzdHY2MTEwX2dldF9mcmVxdWVuY3ksCisJLnNldF9mcmVxdWVuY3kgPSBzdHY2MTEwX3NldF9mcmVxdWVuY3ksCisJLmdldF9iYW5kd2lkdGggPSBzdHY2MTEwX2dldF9iYW5kd2lkdGgsCisJLnNldF9iYW5kd2lkdGggPSBzdHY2MTEwX3NldF9iYW5kd2lkdGgsCisKK307CisKK3N0cnVjdCBkdmJfZnJvbnRlbmQgKnN0djYxMTBfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQkJCQljb25zdCBzdHJ1Y3Qgc3R2NjExMF9jb25maWcgKmNvbmZpZywKKwkJCQkJc3RydWN0IGkyY19hZGFwdGVyICppMmMpCit7CisJc3RydWN0IHN0djYxMTBfcHJpdiAqcHJpdiA9IE5VTEw7CisJdTggcmVnMFtdID0geyAweDAwLCAweDA3LCAweDExLCAweGRjLCAweDg1LCAweDE3LCAweDAxLCAweGU2LCAweDFlIH07CisKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsKKwkJeworCQkJLmFkZHIgPSBjb25maWctPmkyY19hZGRyZXNzLAorCQkJLmZsYWdzID0gMCwKKwkJCS5idWYgPSByZWcwLAorCQkJLmxlbiA9IDkKKwkJfQorCX07CisJaW50IHJldDsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoaTJjLCBtc2csIDEpOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAwKTsKKworCWlmIChyZXQgIT0gMSkKKwkJcmV0dXJuIE5VTEw7CisKKwlwcml2ID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHN0djYxMTBfcHJpdiksIEdGUF9LRVJORUwpOworCWlmIChwcml2ID09IE5VTEwpCisJCXJldHVybiBOVUxMOworCisJcHJpdi0+aTJjX2FkZHJlc3MgPSBjb25maWctPmkyY19hZGRyZXNzOworCXByaXYtPmkyYyA9IGkyYzsKKwlwcml2LT5tY2xrID0gY29uZmlnLT5tY2xrOworCisJbWVtY3B5KCZwcml2LT5yZWdzLCAmcmVnMFsxXSwgOCk7CisKKwltZW1jcHkoJmZlLT5vcHMudHVuZXJfb3BzLCAmc3R2NjExMF90dW5lcl9vcHMsCisJCQkJc2l6ZW9mKHN0cnVjdCBkdmJfdHVuZXJfb3BzKSk7CisJZmUtPnR1bmVyX3ByaXYgPSBwcml2OworCXByaW50ayhLRVJOX0lORk8gIlNUVjYxMTAgYXR0YWNoZWQgb24gYWRkcj0leCFcbiIsIHByaXYtPmkyY19hZGRyZXNzKTsKKworCXJldHVybiBmZTsKK30KK0VYUE9SVF9TWU1CT0woc3R2NjExMF9hdHRhY2gpOworCittb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiVHVybiBvbi9vZmYgZnJvbnRlbmQgZGVidWdnaW5nIChkZWZhdWx0Om9mZikuIik7CisKK01PRFVMRV9ERVNDUklQVElPTigiU1QgU1RWNjExMCBkcml2ZXIiKTsKK01PRFVMRV9BVVRIT1IoIklnb3IgTS4gTGlwbGlhbmluIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvc3R2NjExMC5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4xYzAzMTRkCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3N0djYxMTAuaApAQCAtMCwwICsxLDYyIEBACisvKgorICogc3R2NjExMC5oCisgKgorICogRHJpdmVyIGZvciBTVCBTVFY2MTEwIHNhdGVsbGl0ZSB0dW5lciBJQy4KKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmV0VVAgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IElnb3IgTS4gTGlwbGlhbmluIDxsaXBsaWFuaW5AbmV0dXAucnU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgX19EVkJfU1RWNjExMF9IX18KKyNkZWZpbmUgX19EVkJfU1RWNjExMF9IX18KKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgImR2Yl9mcm9udGVuZC5oIgorCisvKiByZWdpc3RlcnMgKi8KKyNkZWZpbmUgUlNUVjYxMTBfQ1RSTDEJCTAKKyNkZWZpbmUgUlNUVjYxMTBfQ1RSTDIJCTEKKyNkZWZpbmUgUlNUVjYxMTBfVFVOSU5HMQkyCisjZGVmaW5lIFJTVFY2MTEwX1RVTklORzIJMworI2RlZmluZSBSU1RWNjExMF9DVFJMMwkJNAorI2RlZmluZSBSU1RWNjExMF9TVEFUMQkJNQorI2RlZmluZSBSU1RWNjExMF9TVEFUMgkJNgorI2RlZmluZSBSU1RWNjExMF9TVEFUMwkJNworCitzdHJ1Y3Qgc3R2NjExMF9jb25maWcgeworCXU4IGkyY19hZGRyZXNzOworCXUzMiBtY2xrOworCWludCBpcV93aXJpbmc7Cit9OworCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX1NUVjYxMTApIHx8IChkZWZpbmVkKENPTkZJR19EVkJfU1RWNjExMF9NT0RVTEUpIFwKKwkJCQkJCQkmJiBkZWZpbmVkKE1PRFVMRSkpCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqc3R2NjExMF9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJCWNvbnN0IHN0cnVjdCBzdHY2MTEwX2NvbmZpZyAqY29uZmlnLAorCQkJCQlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyk7CisjZWxzZQorc3RhdGljIGlubGluZSBzdHJ1Y3QgZHZiX2Zyb250ZW5kICpzdHY2MTEwX2F0dGFjaChzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSwKKwkJCQkJY29uc3Qgc3RydWN0IHN0djYxMTBfY29uZmlnICpjb25maWcsCisJCQkJCXN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKQoreworCXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBkcml2ZXIgZGlzYWJsZWQgYnkgS2NvbmZpZ1xuIiwgX19mdW5jX18pOworCXJldHVybiBOVUxMOworfQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3RkYTEwMDR4LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNHguYwppbmRleCAxNDY1ZmY3Li40OTgxY2VmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNHguYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvdGRhMTAwNHguYwpAQCAtMTYyLDcgKzE2Miw3IEBACiAJaWYgKHJldCAhPSAyKSB7CiAJCWRwcmludGsoIiVzOiBlcnJvciByZWc9MHgleCwgcmV0PSVpXG4iLCBfX2Z1bmNfXywgcmVnLAogCQkJcmV0KTsKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlkcHJpbnRrKCIlczogc3VjY2VzcyByZWc9MHgleCwgZGF0YT0weCV4LCByZXQ9JWlcbiIsIF9fZnVuY19fLApAQCAtNDgxLDE2ICs0ODEsMTggQEAKIHN0YXRpYyBpbnQgdGRhMTAwNDZfZnd1cGxvYWQoc3RydWN0IGR2Yl9mcm9udGVuZCogZmUpCiB7CiAJc3RydWN0IHRkYTEwMDR4X3N0YXRlKiBzdGF0ZSA9IGZlLT5kZW1vZHVsYXRvcl9wcml2OwotCWludCByZXQ7CisJaW50IHJldCwgY29uZmM0OwogCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZnc7CiAKIAkvKiByZXNldCArIHdha2UgdXAgY2hpcCAqLwogCWlmIChzdGF0ZS0+Y29uZmlnLT54dGFsX2ZyZXEgPT0gVERBMTAwNDZfWFRBTF80TSkgewotCQl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNFhfQ09ORkM0LCAwKTsKKwkJY29uZmM0ID0gMDsKIAl9IGVsc2UgewogCQlkcHJpbnRrKCIlczogMTZNSHogWHRhbCwgcmVkdWNpbmcgSTJDIHNwZWVkXG4iLCBfX2Z1bmNfXyk7Ci0JCXRkYTEwMDR4X3dyaXRlX2J5dGVJKHN0YXRlLCBUREExMDA0WF9DT05GQzQsIDB4ODApOworCQljb25mYzQgPSAweDgwOwogCX0KKwl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNFhfQ09ORkM0LCBjb25mYzQpOworCiAJdGRhMTAwNHhfd3JpdGVfbWFzayhzdGF0ZSwgVERBMTAwNDZIX0NPTkZfVFJJU1RBVEUxLCAxLCAwKTsKIAkvKiBzZXQgR1BJTyAxIGFuZCAzICovCiAJaWYgKHN0YXRlLT5jb25maWctPmdwaW9fY29uZmlnICE9IFREQTEwMDQ2X0dQVFJJKSB7CkBAIC01MDgsMTMgKzUxMCwyOSBAQAogCWlmICh0ZGExMDA0eF9jaGVja191cGxvYWRfb2soc3RhdGUpID09IDApCiAJCXJldHVybiAwOwogCisJLyoKKwkgICBGb3IgaTJjIG5vcm1hbCB3b3JrLCB3ZSBuZWVkIHRvIHNsb3cgZG93biB0aGUgYnVzIHNwZWVkLgorCSAgIEhvd2V2ZXIsIHRoZSBzbG93IGRvd24gYnJlYWtzIHRoZSBlZXByb20gZmlybXdhcmUgbG9hZC4KKwkgICBTbywgdXNlIG5vcm1hbCBzcGVlZCBmb3IgZWVwcm9tIGJvb3RpbmcgYW5kIHRoZW4gcmVzdG9yZSB0aGUKKwkgICBpMmMgc3BlZWQgYWZ0ZXIgdGhhdC4gVGVzdGVkIHdpdGggTVNJIFRWIEBueXdhcmUgQS9EIGJvYXJkLAorCSAgIHRoYXQgY29tZXMgd2l0aCBmaXJtd2FyZSB2ZXJzaW9uIDI5IGluc2lkZSB0aGVpciBlZXByb20uCisKKwkgICBJdCBzaG91bGQgYWxzbyBiZSBub3RpY2VkIHRoYXQgbm8gb3RoZXIgSTJDIHRyYW5zZmVyIHNob3VsZAorCSAgIGJlIGluIGNvdXJzZSB3aGlsZSBib290aW5nIGZyb20gZWVwcm9tLCBvdGhlcndpc2UsIHRkYTEwMDQ2CisJICAgZ29lcyBpbnRvIGFuIGluc3RhYmxlIHN0YXRlLiBTbywgcHJvcGVyIGxvY2tpbmcgYXJlIG5lZWRlZAorCSAgIGF0IHRoZSBpMmMgYnVzIG1hc3Rlci4KKwkgKi8KIAlwcmludGsoS0VSTl9JTkZPICJ0ZGExMDA0eDogdHJ5aW5nIHRvIGJvb3QgZnJvbSBlZXByb21cbiIpOwotCXRkYTEwMDR4X3dyaXRlX21hc2soc3RhdGUsIFREQTEwMDRYX0NPTkZDNCwgNCwgNCk7CisJdGRhMTAwNHhfd3JpdGVfYnl0ZUkoc3RhdGUsIFREQTEwMDRYX0NPTkZDNCwgNCk7CiAJbXNsZWVwKDMwMCk7Ci0JLyogZG9uJ3QgcmUtdXBsb2FkIHVubGVzcyBuZWNlc3NhcnkgKi8KKwl0ZGExMDA0eF93cml0ZV9ieXRlSShzdGF0ZSwgVERBMTAwNFhfQ09ORkM0LCBjb25mYzQpOworCisJLyogQ2hlY2tzIGlmIGVlcHJvbSBmaXJtd2FyZSB3ZW50IHdpdGhvdXQgdHJvdWJsZXMgKi8KIAlpZiAodGRhMTAwNHhfY2hlY2tfdXBsb2FkX29rKHN0YXRlKSA9PSAwKQogCQlyZXR1cm4gMDsKIAorCS8qIGVlcHJvbSBmaXJtd2FyZSBkaWRuJ3Qgd29yay4gTG9hZCBvbmUgbWFudWFsbHkuICovCisKIAlpZiAoc3RhdGUtPmNvbmZpZy0+cmVxdWVzdF9maXJtd2FyZSAhPSBOVUxMKSB7CiAJCS8qIHJlcXVlc3QgdGhlIGZpcm13YXJlLCB0aGlzIHdpbGwgYmxvY2sgdW50aWwgc29tZW9uZSB1cGxvYWRzIGl0ICovCiAJCXByaW50ayhLRVJOX0lORk8gInRkYTEwMDR4OiB3YWl0aW5nIGZvciBmaXJtd2FyZSB1cGxvYWQuLi5cbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAwMzYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZTIyYTBiMwotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM2LmMKQEAgLTAsMCArMSw1MTkgQEAKKy8qKgorICogRHJpdmVyIGZvciBaYXJsaW5rIHpsMTAwMzYgRFZCLVMgc2lsaWNvbiB0dW5lcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBUaW5vIFJlaWNoYXJkdAorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgTWF0dGhpYXMgU2Nod2Fyem90dCA8enphbUBnZW50b28uZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICoKKyAqKgorICogVGhlIGRhdGEgc2hlZXQgZm9yIHRoaXMgdHVuZXIgY2FuIGJlIGZvdW5kIGF0OgorICogICAgaHR0cDovL3d3dy5tY21pbGsuZGUvcHJvamVjdHMvZHZiLWNhcmQvZGF0YXNoZWV0cy9aTDEwMDM2LnBkZgorICoKKyAqIFRoaXMgb25lIGlzIHdvcmtpbmc6IChhdCBteSBBdmVybWVkaWEgRFZCLVMgUHJvKQorICogLSB6bDEwMDM2ICg0MHBpbiwgRlRBKQorICoKKyAqIEEgZHJpdmVyIGZvciB6bDEwMDM4IHNob3VsZCBiZSB2ZXJ5IHNpbWlsYXIuCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgorI2luY2x1ZGUgPGxpbnV4L2R2Yi9mcm9udGVuZC5oPgorI2luY2x1ZGUgPGFzbS90eXBlcy5oPgorCisjaW5jbHVkZSAiemwxMDAzNi5oIgorCitzdGF0aWMgaW50IHpsMTAwMzZfZGVidWc7CisjZGVmaW5lIGRwcmludGsobGV2ZWwsIGFyZ3MuLi4pIFwKKwlkbyB7IGlmICh6bDEwMDM2X2RlYnVnICYgbGV2ZWwpIHByaW50ayhLRVJOX0RFQlVHICJ6bDEwMDM2OiAiIGFyZ3MpOyBcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBkZWJfaW5mbyhhcmdzLi4uKSAgZHByaW50aygweDAxLCBhcmdzKQorI2RlZmluZSBkZWJfaTJjKGFyZ3MuLi4pICBkcHJpbnRrKDB4MDIsIGFyZ3MpCisKK3N0cnVjdCB6bDEwMDM2X3N0YXRlIHsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYzsKKwljb25zdCBzdHJ1Y3QgemwxMDAzNl9jb25maWcgKmNvbmZpZzsKKwl1MzIgZnJlcXVlbmN5OworCXU4IGJyLCBiZjsKK307CisKKworLyogVGhpcyBkcml2ZXIgYXNzdW1lcyB0aGUgdHVuZXIgaXMgZHJpdmVuIGJ5IGEgMTAuMTExTUh6IENyaXN0YWwgKi8KKyNkZWZpbmUgX1hUQUwgMTAxMTEKKworLyogU29tZSBvZiB0aGUgcG9zc2libGUgZGl2aWRlcnM6CisgKiAgIDY0LCAod3JpdGUgMHgwNSB0byByZWcpLCBmcmVxIHN0ZXAgc2l6ZSAgIDE1OGtIegorICogICAxMCwgKHdyaXRlIDB4MGEgdG8gcmVnKSwgZnJlcSBzdGVwIHNpemUgMS4wMTFrSHogKHVzZWQgaGVyZSkKKyAqICAgIDUsICh3cml0ZSAweDA5IHRvIHJlZyksIGZyZXEgc3RlcCBzaXplIDIuMDIya0h6CisgKi8KKworI2RlZmluZSBfUkRJViAxMAorI2RlZmluZSBfUkRJVl9SRUcgMHgwYQorI2RlZmluZSBfRlIgICAoX1hUQUwvX1JESVYpCisKKyNkZWZpbmUgU1RBVFVTX1BPUiAweDgwIC8qIFBvd2VyIG9uIFJlc2V0ICovCisjZGVmaW5lIFNUQVRVU19GTCAgMHg0MCAvKiBGcmVxdWVuY3kgJiBQaGFzZSBMb2NrICovCisKKy8qIHJlYWQvd3JpdGUgZm9yIHpsMTAwMzYgYW5kIHpsMTAwMzggKi8KKworc3RhdGljIGludCB6bDEwMDM2X3JlYWRfc3RhdHVzX3JlZyhzdHJ1Y3QgemwxMDAzNl9zdGF0ZSAqc3RhdGUpCit7CisJdTggc3RhdHVzOworCXN0cnVjdCBpMmNfbXNnIG1zZ1sxXSA9IHsKKwkJeyAuYWRkciA9IHN0YXRlLT5jb25maWctPnR1bmVyX2FkZHJlc3MsIC5mbGFncyA9IEkyQ19NX1JELAorCQkgIC5idWYgPSAmc3RhdHVzLCAubGVuID0gc2l6ZW9mKHN0YXR1cykgfSwKKwl9OworCisJaWYgKGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCBtc2csIDEpICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaTJjIHJlYWQgZmFpbGVkIGF0IGFkZHI9JTAyeFxuIiwKKwkJCV9fZnVuY19fLCBzdGF0ZS0+Y29uZmlnLT50dW5lcl9hZGRyZXNzKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJZGViX2kyYygiUihzdGF0dXMpOiAlMDJ4ICBbRkw9JWRdXG4iLCBzdGF0dXMsCisJCShzdGF0dXMgJiBTVEFUVVNfRkwpID8gMSA6IDApOworCWlmIChzdGF0dXMgJiBTVEFUVVNfUE9SKQorCQlkZWJfaW5mbygiJXM6IFBvd2VyLU9uLVJlc2V0IGJpdCBlbmFibGVkIC0gIgorCQkJIm5lZWQgdG8gaW5pdGlhbGl6ZSB0aGUgdHVuZXJcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiBzdGF0dXM7Cit9CisKK3N0YXRpYyBpbnQgemwxMDAzNl93cml0ZShzdHJ1Y3QgemwxMDAzNl9zdGF0ZSAqc3RhdGUsIHU4IGJ1ZltdLCB1OCBjb3VudCkKK3sKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbMV0gPSB7CisJCXsgLmFkZHIgPSBzdGF0ZS0+Y29uZmlnLT50dW5lcl9hZGRyZXNzLCAuZmxhZ3MgPSAwLAorCQkgIC5idWYgPSBidWYsIC5sZW4gPSBjb3VudCB9LAorCX07CisJdTggcmVnID0gMDsKKwlpbnQgcmV0OworCisJaWYgKHpsMTAwMzZfZGVidWcgJiAweDAyKSB7CisJCS8qIGV2ZXJ5IDhiaXQtdmFsdWUgc2F0aXNpZmVzIHRoaXMhCisJCSAqIHNvIG9ubHkgY2hlY2sgZm9yIGRlYnVnIGxvZyAqLworCQlpZiAoKGJ1ZlswXSAmIDB4ODApID09IDB4MDApCisJCQlyZWcgPSAyOworCQllbHNlIGlmICgoYnVmWzBdICYgMHhjMCkgPT0gMHg4MCkKKwkJCXJlZyA9IDQ7CisJCWVsc2UgaWYgKChidWZbMF0gJiAweGYwKSA9PSAweGMwKQorCQkJcmVnID0gNjsKKwkJZWxzZSBpZiAoKGJ1ZlswXSAmIDB4ZjApID09IDB4ZDApCisJCQlyZWcgPSA4OworCQllbHNlIGlmICgoYnVmWzBdICYgMHhmMCkgPT0gMHhlMCkKKwkJCXJlZyA9IDEwOworCQllbHNlIGlmICgoYnVmWzBdICYgMHhmMCkgPT0gMHhmMCkKKwkJCXJlZyA9IDEyOworCisJCWRlYl9pMmMoIlcoJWQpOiIsIHJlZyk7CisJCXsKKwkJCWludCBpOworCQkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspCisJCQkJcHJpbnRrKEtFUk5fQ09OVCAiICUwMngiLCBidWZbaV0pOworCQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKKwkJfQorCX0KKworCXJldCA9IGkyY190cmFuc2ZlcihzdGF0ZS0+aTJjLCBtc2csIDEpOworCWlmIChyZXQgIT0gMSkgeworCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpMmMgZXJyb3IsIHJldD0lZFxuIiwgX19mdW5jX18sIHJldCk7CisJCXJldHVybiAtRUlPOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpsMTAwMzZfcmVsZWFzZShzdHJ1Y3QgZHZiX2Zyb250ZW5kICpmZSkKK3sKKwlzdHJ1Y3QgemwxMDAzNl9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKworCWZlLT50dW5lcl9wcml2ID0gTlVMTDsKKwlrZnJlZShzdGF0ZSk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6bDEwMDM2X3NsZWVwKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlKQoreworCXN0cnVjdCB6bDEwMDM2X3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OworCXU4IGJ1ZltdID0geyAweGYwLCAweDgwIH07IC8qIHJlZ3MgMTIvMTMgKi8KKwlpbnQgcmV0OworCisJZGViX2luZm8oIiVzXG4iLCBfX2Z1bmNfXyk7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOyAvKiBvcGVuIGkyY19nYXRlICovCisKKwlyZXQgPSB6bDEwMDM2X3dyaXRlKHN0YXRlLCBidWYsIHNpemVvZihidWYpKTsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7IC8qIGNsb3NlIGkyY19nYXRlICovCisKKwlyZXR1cm4gcmV0OworfQorCisvKioKKyAqIHJlZ2lzdGVyIG1hcCBvZiB0aGUgWkwxMDAzNi9aTDEwMDM4CisgKgorICogcmVnW2RlZmF1bHRdIGNvbnRlbnQKKyAqICAyWzB4MDBdOiAgIDAgfCBOMTQgfCBOMTMgfCBOMTIgfCBOMTEgfCBOMTAgfCAgTjkgfCAgTjgKKyAqICAzWzB4MDBdOiAgTjcgfCAgTjYgfCAgTjUgfCAgTjQgfCAgTjMgfCAgTjIgfCAgTjEgfCAgTjAKKyAqICA0WzB4ODBdOiAgIDEgfCAgIDAgfCBSRkcgfCBCQTEgfCBCQTAgfCBCRzEgfCBCRzAgfCBMRU4KKyAqICA1WzB4MDBdOiAgUDAgfCAgQzEgfCAgQzAgfCAgUjQgfCAgUjMgfCAgUjIgfCAgUjEgfCAgUjAKKyAqICA2WzB4YzBdOiAgIDEgfCAgIDEgfCAgIDAgfCAgIDAgfCBSU0QgfCAgIDAgfCAgIDAgfCAgIDAKKyAqICA3WzB4MjBdOiAgUDEgfCBCRjYgfCBCRjUgfCBCRjQgfCBCRjMgfCBCRjIgfCBCRjEgfCAgIDAKKyAqICA4WzB4ZGJdOiAgIDEgfCAgIDEgfCAgIDAgfCAgIDEgfCAgIDAgfCAgQ0MgfCAgIDEgfCAgIDEKKyAqICA5WzB4MzBdOiBWU0QgfCAgVjIgfCAgVjEgfCAgVjAgfCAgUzMgfCAgUzIgfCAgUzEgfCAgUzAKKyAqIDEwWzB4ZTFdOiAgIDEgfCAgIDEgfCAgIDEgfCAgIDAgfCAgIDAgfCBMUzIgfCBMUzEgfCBMUzAKKyAqIDExWzB4ZjVdOiAgV1MgfCBXSDIgfCBXSDEgfCBXSDAgfCBXTDIgfCBXTDEgfCBXTDAgfCBXUkUKKyAqIDEyWzB4ZjBdOiAgIDEgfCAgIDEgfCAgIDEgfCAgIDEgfCAgIDAgfCAgIDAgfCAgIDAgfCAgIDAKKyAqIDEzWzB4MjhdOiAgUEQgfCBCUjQgfCBCUjMgfCBCUjIgfCBCUjEgfCBCUjAgfCBDTFIgfCAgVEwKKyAqLworCitzdGF0aWMgaW50IHpsMTAwMzZfc2V0X2ZyZXF1ZW5jeShzdHJ1Y3QgemwxMDAzNl9zdGF0ZSAqc3RhdGUsIHUzMiBmcmVxdWVuY3kpCit7CisJdTggYnVmWzJdOworCXUzMiBkaXYsIGZvZmZzZXQ7CisKKwlkaXYgPSAoZnJlcXVlbmN5ICsgX0ZSLzIpIC8gX0ZSOworCXN0YXRlLT5mcmVxdWVuY3kgPSBkaXYgKiBfRlI7CisKKwlmb2Zmc2V0ID0gZnJlcXVlbmN5IC0gc3RhdGUtPmZyZXF1ZW5jeTsKKworCWJ1ZlswXSA9IChkaXYgPj4gOCkgJiAweDdmOworCWJ1ZlsxXSA9IChkaXYgPj4gMCkgJiAweGZmOworCisJZGViX2luZm8oIiVzOiBmdG9kbz0ldSBmcHJpdj0ldSBmZXJyPSVkIGRpdj0ldVxuIiwgX19mdW5jX18sCisJCWZyZXF1ZW5jeSwgc3RhdGUtPmZyZXF1ZW5jeSwgZm9mZnNldCwgZGl2KTsKKworCXJldHVybiB6bDEwMDM2X3dyaXRlKHN0YXRlLCBidWYsIHNpemVvZihidWYpKTsKK30KKworc3RhdGljIGludCB6bDEwMDM2X3NldF9iYW5kd2lkdGgoc3RydWN0IHpsMTAwMzZfc3RhdGUgKnN0YXRlLCB1MzIgZmJ3KQoreworCS8qIGZidyBpcyBtZWFzdXJlZCBpbiBrSHogKi8KKwl1OCBiciwgYmY7CisJaW50IHJldDsKKwl1OCBidWZfYmZbXSA9IHsKKwkJMHhjMCwgMHgwMCwgLyogICA2Lzc6IHJzZD0wIGJmPTAgKi8KKwl9OworCXU4IGJ1Zl9icltdID0geworCQkweGYwLCAweDAwLCAvKiAxMi8xMzogYnI9MHhhIGNscj0wIHRsPTAqLworCX07CisJdTggemwxMDAzNl9yc2Rfb2ZmW10gPSB7IDB4YzggfTsgLyogc2V0IFJTRD0xICovCisKKwkvKiBlbnN1cmUgY29ycmVjdCB2YWx1ZXMgKi8KKwlpZiAoZmJ3ID4gMzUwMDApCisJCWZidyA9IDM1MDAwOworCWlmIChmYncgPCAgODAwMCkKKwkJZmJ3ID0gIDgwMDA7CisKKyNkZWZpbmUgX0JSX01BWElNVU0gKF9YVEFMLzU3NSkgLyogX1hUQUwgLyA1NzVrSHogPSAxNyAqLworCisJLyogPD0gMjgsODIgTUh6ICovCisJaWYgKGZidyA8PSAyODgyMCkgeworCQliciA9IF9CUl9NQVhJTVVNOworCX0gZWxzZSB7CisJCS8qKgorCQkgKiAgZihidyk9MzQsNk1IeiBmKHh0YWwpPTEwLjExMU1IegorCQkgKiAgYnIgPSAoMTAxMTEvMzQ2MDApICogNjMgKiAxL0sgPSAxNDsKKwkJICovCisJCWJyID0gKChfWFRBTCAqIDIxICogMTAwMCkgLyAoZmJ3ICogNDE5KSk7CisJfQorCisJLyogZW5zdXJlIGNvcnJlY3QgdmFsdWVzICovCisJaWYgKGJyIDwgNCkKKwkJYnIgPSA0OworCWlmIChiciA+IF9CUl9NQVhJTVVNKQorCQliciA9IF9CUl9NQVhJTVVNOworCisJLyoKKwkgKiBrID0gMS4yNTcKKwkgKiBiZiA9IGZidy9fWFRBTCAqIGJyICogayAtIDEgKi8KKworCWJmID0gKGZidyAqIGJyICogMTI1NykgLyAoX1hUQUwgKiAxMDAwKSAtIDE7CisKKwkvKiBlbnN1cmUgY29ycmVjdCB2YWx1ZXMgKi8KKwlpZiAoYmYgPiA2MikKKwkJYmYgPSA2MjsKKworCWJ1Zl9iZlsxXSA9IChiZiA8PCAxKSAmIDB4N2U7CisJYnVmX2JyWzFdID0gKGJyIDw8IDIpICYgMHg3YzsKKwlkZWJfaW5mbygiJXM6IEJXPSVkIGJyPSV1IGJmPSV1XG4iLCBfX2Z1bmNfXywgZmJ3LCBiciwgYmYpOworCisJaWYgKGJyICE9IHN0YXRlLT5icikgeworCQlyZXQgPSB6bDEwMDM2X3dyaXRlKHN0YXRlLCBidWZfYnIsIHNpemVvZihidWZfYnIpKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCWlmIChiZiAhPSBzdGF0ZS0+YmYpIHsKKwkJcmV0ID0gemwxMDAzNl93cml0ZShzdGF0ZSwgYnVmX2JmLCBzaXplb2YoYnVmX2JmKSk7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKworCQkvKiB0aW1lID0gYnIvKDMyKiBmeHRhbCkgKi8KKwkJLyogbWluaW1hbCBzbGVlcCB0aW1lIHRvIGJlIGNhbGN1bGF0ZWQKKwkJICogbWF4aW11bSBiciBpcyA2MyAtPiBtYXggdGltZSA9IDIgLzEwIE1IeiA9IDJlLTcgKi8KKwkJbXNsZWVwKDEpOworCisJCXJldCA9IHpsMTAwMzZfd3JpdGUoc3RhdGUsIHpsMTAwMzZfcnNkX29mZiwKKwkJCXNpemVvZih6bDEwMDM2X3JzZF9vZmYpKTsKKwkJaWYgKHJldCA8IDApCisJCQlyZXR1cm4gcmV0OworCX0KKworCXN0YXRlLT5iciA9IGJyOworCXN0YXRlLT5iZiA9IGJmOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgemwxMDAzNl9zZXRfZ2Fpbl9wYXJhbXMoc3RydWN0IHpsMTAwMzZfc3RhdGUgKnN0YXRlLAorCWludCBjKQoreworCXU4IGJ1ZlsyXTsKKwl1OCByZmcsIGJhLCBiZzsKKworCS8qIGRlZmF1bHQgdmFsdWVzICovCisJcmZnID0gMDsgLyogZW5hYmxlIHdoZW4gdXNpbmcgYW4gbG5hICovCisJYmEgPSAxOworCWJnID0gMTsKKworCS8qIHJlZyA0ICovCisJYnVmWzBdID0gMHg4MCB8ICgocmZnIDw8IDUpICYgMHgyMCkKKwkJfCAoKGJhICA8PCAzKSAmIDB4MTgpIHwgKChiZyAgPDwgMSkgJiAweDA2KTsKKworCWlmICghc3RhdGUtPmNvbmZpZy0+cmZfbG9vcF9lbmFibGUpCisJCWJ1ZlswXSB8PSAweDAxOworCisJLyogUDA9MCAqLworCWJ1ZlsxXSA9IF9SRElWX1JFRyB8ICgoYyA8PCA1KSAmIDB4NjApOworCisJZGViX2luZm8oIiVzOiBjPSV1IHJmZz0ldSBiYT0ldSBiZz0ldVxuIiwgX19mdW5jX18sIGMsIHJmZywgYmEsIGJnKTsKKwlyZXR1cm4gemwxMDAzNl93cml0ZShzdGF0ZSwgYnVmLCBzaXplb2YoYnVmKSk7Cit9CisKK3N0YXRpYyBpbnQgemwxMDAzNl9zZXRfcGFyYW1zKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCQlzdHJ1Y3QgZHZiX2Zyb250ZW5kX3BhcmFtZXRlcnMgKnBhcmFtcykKK3sKKwlzdHJ1Y3QgemwxMDAzNl9zdGF0ZSAqc3RhdGUgPSBmZS0+dHVuZXJfcHJpdjsKKwlpbnQgcmV0ID0gMDsKKwl1MzIgZnJlcXVlbmN5ID0gcGFyYW1zLT5mcmVxdWVuY3k7CisJdTMyIGZidzsKKwlpbnQgaTsKKwl1OCBjOworCisJLyogZW5zdXJlIGNvcnJlY3QgdmFsdWVzCisJICogbWF5YmUgcmVkdW5kYW50IGFzIGNvcmUgYWxyZWFkeSBjaGVja3MgdGhpcyAqLworCWlmICgoZnJlcXVlbmN5IDwgZmUtPm9wcy5pbmZvLmZyZXF1ZW5jeV9taW4pCisJfHwgIChmcmVxdWVuY3kgPiBmZS0+b3BzLmluZm8uZnJlcXVlbmN5X21heCkpCisJCXJldHVybiAtRUlOVkFMOworCisJLyoqCisJICogYWxwaGEgPSAxLjM1IGZvciBkdmItcworCSAqIGZCVyA9IChhbHBoYSpzeW1ib2xyYXRlKS8oMiowLjgpCisJICogMS4zNSAvICgyKjAuOCkgPSAyNyAvIDMyCisJICovCisJZmJ3ID0gKDI3ICogcGFyYW1zLT51LnFwc2suc3ltYm9sX3JhdGUpIC8gMzI7CisKKwkvKiBzY2FsZSB0byBrSHogKi8KKwlmYncgLz0gMTAwMDsKKworCS8qIEFkZCBzYWZlIG1hcmdpbiBvZiAzTUh6ICovCisJZmJ3ICs9IDMwMDA7CisKKwkvKiBzZXR0aW5nIHRoZSBjaGFyZ2UgcHVtcCAtIGd1ZXNzZWQgdmFsdWVzICovCisJaWYgKGZyZXF1ZW5jeSA8IDk1MDAwMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJZWxzZSBpZiAoZnJlcXVlbmN5IDwgMTI1MDAwMCkKKwkJYyA9IDA7CisJZWxzZSBpZiAoZnJlcXVlbmN5IDwgMTc1MDAwMCkKKwkJYyA9IDE7CisJZWxzZSBpZiAoZnJlcXVlbmN5IDwgMjE3NTAwMCkKKwkJYyA9IDI7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMSk7IC8qIG9wZW4gaTJjX2dhdGUgKi8KKworCXJldCA9IHpsMTAwMzZfc2V0X2dhaW5fcGFyYW1zKHN0YXRlLCBjKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcjsKKworCXJldCA9IHpsMTAwMzZfc2V0X2ZyZXF1ZW5jeShzdGF0ZSwgcGFyYW1zLT5mcmVxdWVuY3kpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yOworCisJcmV0ID0gemwxMDAzNl9zZXRfYmFuZHdpZHRoKHN0YXRlLCBmYncpOworCWlmIChyZXQgPCAwKQorCQlnb3RvIGVycm9yOworCisJLyogd2FpdCBmb3IgdHVuZXIgbG9jayAtIG5vIGlkZWEgaWYgdGhpcyBpcyByZWFsbHkgbmVlZGVkICovCisJZm9yIChpID0gMDsgaSA8IDIwOyBpKyspIHsKKwkJcmV0ID0gemwxMDAzNl9yZWFkX3N0YXR1c19yZWcoc3RhdGUpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gZXJyb3I7CisKKwkJLyogY2hlY2sgRnJlcXVlbmN5ICYgUGhhc2UgTG9jayBCaXQgKi8KKwkJaWYgKHJldCAmIFNUQVRVU19GTCkKKwkJCWJyZWFrOworCisJCW1zbGVlcCgxMCk7CisJfQorCitlcnJvcjoKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOyAvKiBjbG9zZSBpMmNfZ2F0ZSAqLworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB6bDEwMDM2X2dldF9mcmVxdWVuY3koc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsIHUzMiAqZnJlcXVlbmN5KQoreworCXN0cnVjdCB6bDEwMDM2X3N0YXRlICpzdGF0ZSA9IGZlLT50dW5lcl9wcml2OworCisJKmZyZXF1ZW5jeSA9IHN0YXRlLT5mcmVxdWVuY3k7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6bDEwMDM2X2luaXRfcmVncyhzdHJ1Y3QgemwxMDAzNl9zdGF0ZSAqc3RhdGUpCit7CisJaW50IHJldDsKKwlpbnQgaTsKKworCS8qIGNvdWxkIGFsc28gYmUgb25lIGJsb2NrIGZyb20gcmVnIDIgdG8gMTMgYW5kIGFkZGl0aW9uYWwgMTAvMTEgKi8KKwl1OCB6bDEwMDM2X2luaXRfdGFiW11bMl0gPSB7CisJCXsgMHgwNCwgMHgwMCB9LAkJLyogICAyLzM6IGRpdj0weDQwMCAtIGFyYml0cmFyeSB2YWx1ZSAqLworCQl7IDB4OGIsIF9SRElWX1JFRyB9LAkvKiAgIDQvNTogcmZnPTAgYmE9MSBiZz0xIGxlbj0/ICovCisJCQkJCS8qICAgICAgICBwMD0wIGM9MCByPV9SRElWX1JFRyAqLworCQl7IDB4YzAsIDB4MjAgfSwJCS8qICAgNi83OiByc2Q9MCBiZj0weDEwICovCisJCXsgMHhkMywgMHg0MCB9LAkJLyogICA4Lzk6IGZyb20gZGF0YXNoZWV0ICovCisJCXsgMHhlMywgMHg1YiB9LAkJLyogMTAvMTE6IGxvY2sgd2luZG93IGxldmVsICovCisJCXsgMHhmMCwgMHgyOCB9LAkJLyogMTIvMTM6IGJyPTB4YSBjbHI9MCB0bD0wKi8KKwkJeyAweGUzLCAweGY5IH0sCQkvKiAxMC8xMTogdW5sb2NrIHdpbmRvdyBsZXZlbCAqLworCX07CisKKwkvKiBpbnZhbGlkIHZhbHVlcyB0byB0cmlnZ2VyIHdyaXRpbmcgKi8KKwlzdGF0ZS0+YnIgPSAweGZmOworCXN0YXRlLT5iZiA9IDB4ZmY7CisKKwlpZiAoIXN0YXRlLT5jb25maWctPnJmX2xvb3BfZW5hYmxlKQorCQl6bDEwMDM2X2luaXRfdGFiWzFdWzJdIHw9IDB4MDE7CisKKwlkZWJfaW5mbygiJXNcbiIsIF9fZnVuY19fKTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHpsMTAwMzZfaW5pdF90YWIpOyBpKyspIHsKKwkJcmV0ID0gemwxMDAzNl93cml0ZShzdGF0ZSwgemwxMDAzNl9pbml0X3RhYltpXSwgMik7CisJCWlmIChyZXQgPCAwKQorCQkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6bDEwMDM2X2luaXQoc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUpCit7CisJc3RydWN0IHpsMTAwMzZfc3RhdGUgKnN0YXRlID0gZmUtPnR1bmVyX3ByaXY7CisJaW50IHJldCA9IDA7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOyAvKiBvcGVuIGkyY19nYXRlICovCisKKwlyZXQgPSB6bDEwMDM2X3JlYWRfc3RhdHVzX3JlZyhzdGF0ZSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKiBPbmx5IGluaXQgaWYgUG93ZXItb24tUmVzZXQgYml0IGlzIHNldD8gKi8KKwlyZXQgPSB6bDEwMDM2X2luaXRfcmVncyhzdGF0ZSk7CisKKwlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQorCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDApOyAvKiBjbG9zZSBpMmNfZ2F0ZSAqLworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIHN0cnVjdCBkdmJfdHVuZXJfb3BzIHpsMTAwMzZfdHVuZXJfb3BzID0geworCS5pbmZvID0geworCQkubmFtZSA9ICJaYXJsaW5rIFpMMTAwMzYiLAorCQkuZnJlcXVlbmN5X21pbiA9IDk1MDAwMCwKKwkJLmZyZXF1ZW5jeV9tYXggPSAyMTc1MDAwCisJfSwKKwkuaW5pdCA9IHpsMTAwMzZfaW5pdCwKKwkucmVsZWFzZSA9IHpsMTAwMzZfcmVsZWFzZSwKKwkuc2xlZXAgPSB6bDEwMDM2X3NsZWVwLAorCS5zZXRfcGFyYW1zID0gemwxMDAzNl9zZXRfcGFyYW1zLAorCS5nZXRfZnJlcXVlbmN5ID0gemwxMDAzNl9nZXRfZnJlcXVlbmN5LAorfTsKKworc3RydWN0IGR2Yl9mcm9udGVuZCAqemwxMDAzNl9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJCQkJICAgIGNvbnN0IHN0cnVjdCB6bDEwMDM2X2NvbmZpZyAqY29uZmlnLAorCQkJCSAgICBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwlzdHJ1Y3QgemwxMDAzNl9zdGF0ZSAqc3RhdGUgPSBOVUxMOworCWludCByZXQ7CisKKwlpZiAoTlVMTCA9PSBjb25maWcpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogbm8gY29uZmlnIHNwZWNpZmllZCIsIF9fZnVuY19fKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB6bDEwMDM2X3N0YXRlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKE5VTEwgPT0gc3RhdGUpCisJCXJldHVybiBOVUxMOworCisJc3RhdGUtPmNvbmZpZyA9IGNvbmZpZzsKKwlzdGF0ZS0+aTJjID0gaTJjOworCisJaWYgKGZlLT5vcHMuaTJjX2dhdGVfY3RybCkKKwkJZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKGZlLCAxKTsgLyogb3BlbiBpMmNfZ2F0ZSAqLworCisJcmV0ID0gemwxMDAzNl9yZWFkX3N0YXR1c19yZWcoc3RhdGUpOworCWlmIChyZXQgPCAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXM6IE5vIHpsMTAwMzYgZm91bmRcbiIsIF9fZnVuY19fKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlyZXQgPSB6bDEwMDM2X2luaXRfcmVncyhzdGF0ZSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogdHVuZXIgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iLAorCQkJX19mdW5jX18pOworCQlnb3RvIGVycm9yOworCX0KKworCWlmIChmZS0+b3BzLmkyY19nYXRlX2N0cmwpCisJCWZlLT5vcHMuaTJjX2dhdGVfY3RybChmZSwgMCk7IC8qIGNsb3NlIGkyY19nYXRlICovCisKKwlmZS0+dHVuZXJfcHJpdiA9IHN0YXRlOworCisJbWVtY3B5KCZmZS0+b3BzLnR1bmVyX29wcywgJnpsMTAwMzZfdHVuZXJfb3BzLAorCQlzaXplb2Yoc3RydWN0IGR2Yl90dW5lcl9vcHMpKTsKKwlwcmludGsoS0VSTl9JTkZPICIlczogdHVuZXIgaW5pdGlhbGl6YXRpb24gKCVzIGFkZHI9MHglMDJ4KSBva1xuIiwKKwkJX19mdW5jX18sIGZlLT5vcHMudHVuZXJfb3BzLmluZm8ubmFtZSwgY29uZmlnLT50dW5lcl9hZGRyZXNzKTsKKworCXJldHVybiBmZTsKKworZXJyb3I6CisJemwxMDAzNl9yZWxlYXNlKGZlKTsKKwlyZXR1cm4gTlVMTDsKK30KK0VYUE9SVF9TWU1CT0woemwxMDAzNl9hdHRhY2gpOworCittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIHpsMTAwMzZfZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiVHVybiBvbi9vZmYgZnJvbnRlbmQgZGVidWdnaW5nIChkZWZhdWx0Om9mZikuIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkRWQiBaTDEwMDM2IGRyaXZlciIpOworTU9EVUxFX0FVVEhPUigiVGlubyBSZWljaGFyZHQiKTsKK01PRFVMRV9BVVRIT1IoIk1hdHRoaWFzIFNjaHdhcnpvdHQiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMDM2LmggYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDAzNi5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmQ4NGI4ZjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDAzNi5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qKgorICogRHJpdmVyIGZvciBaYXJsaW5rIFpMMTAwMzYgRFZCLVMgc2lsaWNvbiB0dW5lcgorICoKKyAqIENvcHlyaWdodCAoQykgMjAwNiBUaW5vIFJlaWNoYXJkdAorICogQ29weXJpZ2h0IChDKSAyMDA3LTIwMDkgTWF0dGhpYXMgU2Nod2Fyem90dCA8enphbUBnZW50b28uZGU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyLCBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpZm5kZWYgRFZCX1pMMTAwMzZfSAorI2RlZmluZSBEVkJfWkwxMDAzNl9ICisKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKKworLyoqCisgKiBBdHRhY2ggYSB6bDEwMDM2IHR1bmVyIHRvIHRoZSBzdXBwbGllZCBmcm9udGVuZCBzdHJ1Y3R1cmUuCisgKgorICogQHBhcmFtIGZlIEZyb250ZW5kIHRvIGF0dGFjaCB0by4KKyAqIEBwYXJhbSBjb25maWcgemwxMDAzNl9jb25maWcgc3RydWN0dXJlCisgKiBAcmV0dXJuIEZFIHBvaW50ZXIgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlLgorICovCisKK3N0cnVjdCB6bDEwMDM2X2NvbmZpZyB7CisJdTggdHVuZXJfYWRkcmVzczsKKwlpbnQgcmZfbG9vcF9lbmFibGU7Cit9OworCisjaWYgZGVmaW5lZChDT05GSUdfRFZCX1pMMTAwMzYpIHx8IFwKKwkoZGVmaW5lZChDT05GSUdfRFZCX1pMMTAwMzZfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCitleHRlcm4gc3RydWN0IGR2Yl9mcm9udGVuZCAqemwxMDAzNl9hdHRhY2goc3RydWN0IGR2Yl9mcm9udGVuZCAqZmUsCisJY29uc3Qgc3RydWN0IHpsMTAwMzZfY29uZmlnICpjb25maWcsIHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjKTsKKyNlbHNlCitzdGF0aWMgaW5saW5lIHN0cnVjdCBkdmJfZnJvbnRlbmQgKnpsMTAwMzZfYXR0YWNoKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLAorCWNvbnN0IHN0cnVjdCB6bDEwMDM2X2NvbmZpZyAqY29uZmlnLCBzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYykKK3sKKwlwcmludGsoS0VSTl9XQVJOSU5HICIlczogZHJpdmVyIGRpc2FibGVkIGJ5IEtjb25maWdcbiIsIF9fZnVuY19fKTsKKwlyZXR1cm4gTlVMTDsKK30KKyNlbmRpZgorCisjZW5kaWYgLyogRFZCX1pMMTAwMzZfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmMKaW5kZXggYjE1MGVkMy4uMTQ4YjZmNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1My5jCkBAIC01NzIsNiArNTcyLDEwIEBACiAJCXpsMTAzNTNfZHVtcF9yZWdzKGZlKTsKIAlpZiAoc3RhdGUtPmNvbmZpZy5wYXJhbGxlbF90cykKIAkJemwxMDM1M19yZXNldF9hdHRhY2hbMl0gJj0gfjB4MjA7CisJaWYgKHN0YXRlLT5jb25maWcuY2xvY2tfY3RsXzEpCisJCXpsMTAzNTNfcmVzZXRfYXR0YWNoWzNdID0gc3RhdGUtPmNvbmZpZy5jbG9ja19jdGxfMTsKKwlpZiAoc3RhdGUtPmNvbmZpZy5wbGxfMCkKKwkJemwxMDM1M19yZXNldF9hdHRhY2hbNF0gPSBzdGF0ZS0+Y29uZmlnLnBsbF8wOwogCiAJLyogRG8gYSAiaGFyZCIgcmVzZXQgaWYgbm90IGFscmVhZHkgZG9uZSAqLwogCWlmICh6bDEwMzUzX3JlYWRfcmVnaXN0ZXIoc3RhdGUsIDB4NTApICE9IHpsMTAzNTNfcmVzZXRfYXR0YWNoWzFdIHx8CkBAIC02MTQsNiArNjE4LDcgQEAKIAkJCQkgICAgc3RydWN0IGkyY19hZGFwdGVyICppMmMpCiB7CiAJc3RydWN0IHpsMTAzNTNfc3RhdGUgKnN0YXRlID0gTlVMTDsKKwlpbnQgaWQ7CiAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIHRoZSBpbnRlcm5hbCBzdGF0ZSAqLwogCXN0YXRlID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHpsMTAzNTNfc3RhdGUpLCBHRlBfS0VSTkVMKTsKQEAgLTYyNSw3ICs2MzAsOCBAQAogCW1lbWNweSgmc3RhdGUtPmNvbmZpZywgY29uZmlnLCBzaXplb2Yoc3RydWN0IHpsMTAzNTNfY29uZmlnKSk7CiAKIAkvKiBjaGVjayBpZiB0aGUgZGVtb2QgaXMgdGhlcmUgKi8KLQlpZiAoemwxMDM1M19yZWFkX3JlZ2lzdGVyKHN0YXRlLCBDSElQX0lEKSAhPSBJRF9aTDEwMzUzKQorCWlkID0gemwxMDM1M19yZWFkX3JlZ2lzdGVyKHN0YXRlLCBDSElQX0lEKTsKKwlpZiAoKGlkICE9IElEX1pMMTAzNTMpICYmIChpZCAhPSBJRF9DRTYyMzApICYmIChpZCAhPSBJRF9DRTYyMzEpKQogCQlnb3RvIGVycm9yOwogCiAJLyogY3JlYXRlIGR2Yl9mcm9udGVuZCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuaCBiL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzLmgKaW5kZXggMjI4N2JhYy4uNmUzY2E5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1My5oCkBAIC00MSw2ICs0MSwxMCBAQAogCiAJLyogc2V0IGlmIGkyY19nYXRlX2N0cmwgZGlzYWJsZSBpcyByZXF1aXJlZCAqLwogCXU4IGRpc2FibGVfaTJjX2dhdGVfY3RybDoxOworCisJLyogY2xvY2sgY29udHJvbCByZWdpc3RlcnMgKDB4NTEtMHg1NCkgKi8KKwl1OCBjbG9ja19jdGxfMTsgIC8qIGRlZmF1bHQ6IDB4NDYgKi8KKwl1OCBwbGxfMDsgICAgICAgIC8qIGRlZmF1bHQ6IDB4MTUgKi8KIH07CiAKICNpZiBkZWZpbmVkKENPTkZJR19EVkJfWkwxMDM1MykgfHwgKGRlZmluZWQoQ09ORklHX0RWQl9aTDEwMzUzX01PRFVMRSkgJiYgZGVmaW5lZChNT0RVTEUpKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTNfcHJpdi5oIGIvZHJpdmVycy9tZWRpYS9kdmIvZnJvbnRlbmRzL3psMTAzNTNfcHJpdi5oCmluZGV4IDA1NWZmMWYuLmUwZGQxZDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL2Zyb250ZW5kcy96bDEwMzUzX3ByaXYuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9mcm9udGVuZHMvemwxMDM1M19wcml2LmgKQEAgLTIyLDcgKzIyLDkgQEAKICNpZm5kZWYgX1pMMTAzNTNfUFJJVl8KICNkZWZpbmUgX1pMMTAzNTNfUFJJVl8KIAotI2RlZmluZSBJRF9aTDEwMzUzCTB4MTQKKyNkZWZpbmUgSURfWkwxMDM1MwkweDE0IC8qIFphcmxpbmsgWkwxMDM1MyAqLworI2RlZmluZSBJRF9DRTYyMzAJMHgxOCAvKiBJbnRlbCBDRTYyMzAgKi8KKyNkZWZpbmUgSURfQ0U2MjMxCTB4MTkgLyogSW50ZWwgQ0U2MjMxICovCiAKICNkZWZpbmUgbXNiKHgpICgoKHgpID4+IDgpICYgMHhmZikKICNkZWZpbmUgbHNiKHgpICgoeCkgJiAweGZmKQpAQCAtNTAsNiArNTIsMTAgQEAKIAlUUFNfUkVDRUlWRURfMCAgICAgPSAweDFFLAogCVRQU19DVVJSRU5UXzEgICAgICA9IDB4MUYsCiAJVFBTX0NVUlJFTlRfMCAgICAgID0gMHgyMCwKKwlDTE9DS19DVExfMCAgICAgICAgPSAweDUxLAorCUNMT0NLX0NUTF8xICAgICAgICA9IDB4NTIsCisJUExMXzAgICAgICAgICAgICAgID0gMHg1MywKKwlQTExfMSAgICAgICAgICAgICAgPSAweDU0LAogCVJFU0VUICAgICAgICAgICAgICA9IDB4NTUsCiAJQUdDX1RBUkdFVCAgICAgICAgID0gMHg1NiwKIAlNQ0xLX1JBVElPICAgICAgICAgPSAweDVDLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL3BsdXRvMi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvcGx1dG8yL3BsdXRvMi5jCmluZGV4IGQxMDFiMzAuLmVlODk2MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3BsdXRvMi9wbHV0bzIuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9wbHV0bzIvcGx1dG8yLmMKQEAgLTExNiw2ICsxMTYsNyBAQAogCiAJLyogaXJxICovCiAJdW5zaWduZWQgaW50IG92ZXJmbG93OworCXVuc2lnbmVkIGludCBkZWFkOwogCiAJLyogZG1hICovCiAJZG1hX2FkZHJfdCBkbWFfYWRkcjsKQEAgLTMzNiw4ICszMzcsMTAgQEAKIAkJcmV0dXJuIElSUV9OT05FOwogCiAJaWYgKHRzY3IgPT0gMHhmZmZmZmZmZikgewotCQkvLyBGSVhNRTogbWF5YmUgcmVjb3ZlciBzb21laG93Ci0JCWRldl9lcnIoJnBsdXRvLT5wZGV2LT5kZXYsICJjYXJkIGh1bmcgdXAgOihcbiIpOworCQlpZiAocGx1dG8tPmRlYWQgPT0gMCkKKwkJCWRldl9lcnIoJnBsdXRvLT5wZGV2LT5kZXYsICJjYXJkIGhhcyBodW5nIG9yIGJlZW4gZWplY3RlZC5cbiIpOworCQkvKiBJdCdzIGRlYWQgSmltICovCisJCXBsdXRvLT5kZWFkID0gMTsKIAkJcmV0dXJuIElSUV9IQU5ETEVEOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9NYWtlZmlsZQppbmRleCBlZTA3MzdhLi5iY2Y5M2Y0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9NYWtlZmlsZQpAQCAtMSw2ICsxLDggQEAKLXNtczF4eHgtb2JqcyA6PSBzbXNjb3JlYXBpLm8gc21zdXNiLm8gc21zZHZiLm8gc21zLWNhcmRzLm8KK3NtczF4eHgtb2JqcyA6PSBzbXNjb3JlYXBpLm8gc21zLWNhcmRzLm8KIAogb2JqLSQoQ09ORklHX0RWQl9TSUFOT19TTVMxWFhYKSArPSBzbXMxeHh4Lm8KK29iai0kKENPTkZJR19EVkJfU0lBTk9fU01TMVhYWCkgKz0gc21zdXNiLm8KK29iai0kKENPTkZJR19EVkJfU0lBTk9fU01TMVhYWCkgKz0gc21zZHZiLm8KIAogRVhUUkFfQ0ZMQUdTICs9IC1JZHJpdmVycy9tZWRpYS9kdmIvZHZiLWNvcmUKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYwppbmRleCA0MzA3ZTRlLi42M2U0ZDBlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuYwpAQCAtMTksNTAgKzE5LDkgQEAKIAogI2luY2x1ZGUgInNtcy1jYXJkcy5oIgogCi1zdHJ1Y3QgdXNiX2RldmljZV9pZCBzbXN1c2JfaWRfdGFibGVbXSA9IHsKLSNpZmRlZiBDT05GSUdfRFZCX1NJQU5PX1NNUzFYWFhfU01TX0lEUwotCXsgVVNCX0RFVklDRSgweDE4N2YsIDB4MDAxMCksCi0JCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfU0lBTk9fU1RFTExBUiB9LAotCXsgVVNCX0RFVklDRSgweDE4N2YsIDB4MDEwMCksCi0JCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfU0lBTk9fU1RFTExBUiB9LAotCXsgVVNCX0RFVklDRSgweDE4N2YsIDB4MDIwMCksCi0JCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfU0lBTk9fTk9WQV9BIH0sCi0JeyBVU0JfREVWSUNFKDB4MTg3ZiwgMHgwMjAxKSwKLQkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9TSUFOT19OT1ZBX0IgfSwKLQl7IFVTQl9ERVZJQ0UoMHgxODdmLCAweDAzMDApLAotCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX1NJQU5PX1ZFR0EgfSwKLSNlbmRpZgotCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4MTcwMCksCi0JCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX0NBVEFNT1VOVCB9LAotCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4MTgwMCksCi0JCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX09LRU1PX0EgfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDE4MDEpLAotCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9PS0VNT19CIH0sCi0JeyBVU0JfREVWSUNFKDB4MjA0MCwgMHgyMDAwKSwKLQkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfVElHRVJfTUlOSUNBUkQgfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDIwMDkpLAotCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9USUdFUl9NSU5JQ0FSRF9SMiB9LAotCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4MjAwYSksCi0JCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1RJR0VSX01JTklDQVJEIH0sCi0JeyBVU0JfREVWSUNFKDB4MjA0MCwgMHgyMDEwKSwKLQkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfVElHRVJfTUlOSUNBUkQgfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDIwMTkpLAotCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9USUdFUl9NSU5JQ0FSRCB9LAotCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NTUwMCksCi0JCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDU1MTApLAotCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCi0JeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg1NTIwKSwKLQkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAotCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NTUzMCksCi0JCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKLQl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDU1ODApLAotCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCi0JeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg1NTkwKSwKLQkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAotCXsgfQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KLX07Ci1NT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgc21zdXNiX2lkX3RhYmxlKTsKK3N0YXRpYyBpbnQgc21zX2RiZzsKK21vZHVsZV9wYXJhbV9uYW1lZChjYXJkc19kYmcsIHNtc19kYmcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGNhcmRzX2RiZywgInNldCBkZWJ1ZyBsZXZlbCAoaW5mbz0xLCBhZHY9MiAob3ItYWJsZSkpIik7CiAKIHN0YXRpYyBzdHJ1Y3Qgc21zX2JvYXJkIHNtc19ib2FyZHNbXSA9IHsKIAlbU01TX0JPQVJEX1VOS05PV05dID0gewpAQCAtMTE1LDYgKzc0LDcgQEAKIAkJLnR5cGUJPSBTTVNfTk9WQV9CMCwKIAkJLmZ3W0RFVklDRV9NT0RFX0RWQlRfQkRBXSA9ICJzbXMxeHh4LWhjdy01NXh4eC1kdmJ0LTAyLmZ3IiwKIAkJLmxuYV9jdHJsICA9IDI5LAorCQkucmZfc3dpdGNoID0gMTcsCiAJfSwKIAlbU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfVElHRVJfTUlOSUNBUkRfUjJdID0gewogCQkubmFtZQk9ICJIYXVwcGF1Z2UgV2luVFYgTWluaUNhcmQiLApAQCAtMTMwLDYgKzkwLDcgQEAKIAogCXJldHVybiAmc21zX2JvYXJkc1tpZF07CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzbXNfZ2V0X2JvYXJkKTsKIAogc3RhdGljIGludCBzbXNfc2V0X2dwaW8oc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsIGludCBwaW4sIGludCBlbmFibGUpCiB7CkBAIC0xODIsNiArMTQzLDcgQEAKIAl9CiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzbXNfYm9hcmRfc2V0dXApOwogCiBpbnQgc21zX2JvYXJkX3Bvd2VyKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LCBpbnQgb25vZmYpCiB7CkBAIC0xOTcsMTIgKzE1OSwxMyBAQAogCWNhc2UgU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfVElHRVJfTUlOSUNBUkRfUjI6CiAJY2FzZSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9USUdFUl9NSU5JQ0FSRDoKIAkJLyogTE5BICovCi0JCXNtc19zZXRfZ3Bpbyhjb3JlZGV2LAotCQkJICAgICBib2FyZC0+bG5hX2N0cmwsIG9ub2ZmID8gMSA6IDApOworCQlpZiAoIW9ub2ZmKQorCQkJc21zX3NldF9ncGlvKGNvcmVkZXYsIGJvYXJkLT5sbmFfY3RybCwgMCk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc19ib2FyZF9wb3dlcik7CiAKIGludCBzbXNfYm9hcmRfbGVkX2ZlZWRiYWNrKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LCBpbnQgbGVkKQogewpAQCAtMjI1LDMgKzE4OCw0MCBAQAogCX0KIAlyZXR1cm4gMDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc19ib2FyZF9sZWRfZmVlZGJhY2spOworCitpbnQgc21zX2JvYXJkX2xuYV9jb250cm9sKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LCBpbnQgb25vZmYpCit7CisJaW50IGJvYXJkX2lkID0gc21zY29yZV9nZXRfYm9hcmRfaWQoY29yZWRldik7CisJc3RydWN0IHNtc19ib2FyZCAqYm9hcmQgPSBzbXNfZ2V0X2JvYXJkKGJvYXJkX2lkKTsKKworCXNtc19kZWJ1ZygiJXM6IExOQSAlcyIsIF9fZnVuY19fLCBvbm9mZiA/ICJlbmFibGVkIiA6ICJkaXNhYmxlZCIpOworCisJc3dpdGNoIChib2FyZF9pZCkgeworCWNhc2UgU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfVElHRVJfTUlOSUNBUkRfUjI6CisJY2FzZSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9USUdFUl9NSU5JQ0FSRDoKKwkJc21zX3NldF9ncGlvKGNvcmVkZXYsCisJCQkgICAgIGJvYXJkLT5yZl9zd2l0Y2gsIG9ub2ZmID8gMSA6IDApOworCQlyZXR1cm4gc21zX3NldF9ncGlvKGNvcmVkZXYsCisJCQkJICAgIGJvYXJkLT5sbmFfY3RybCwgb25vZmYgPyAxIDogMCk7CisJfQorCXJldHVybiAtRUlOVkFMOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zX2JvYXJkX2xuYV9jb250cm9sKTsKKworaW50IHNtc19ib2FyZF9sb2FkX21vZHVsZXMoaW50IGlkKQoreworCXN3aXRjaCAoaWQpIHsKKwljYXNlIFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX0NBVEFNT1VOVDoKKwljYXNlIFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX09LRU1PX0E6CisJY2FzZSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9PS0VNT19COgorCWNhc2UgU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTToKKwkJcmVxdWVzdF9tb2R1bGUoInNtc2R2YiIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQkvKiBkbyBub3RoaW5nICovCisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc19ib2FyZF9sb2FkX21vZHVsZXMpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zLWNhcmRzLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuaAppbmRleCA4ZTBmZTlmLi42NGQ3NGM1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXMtY2FyZHMuaApAQCAtNDAsNyArNDAsNyBAQAogCWNoYXIgKm5hbWUsICpmd1tERVZJQ0VfTU9ERV9NQVhdOwogCiAJLyogZ3Bpb3MgKi8KLQlpbnQgbGVkX3Bvd2VyLCBsZWRfaGksIGxlZF9sbywgbG5hX2N0cmw7CisJaW50IGxlZF9wb3dlciwgbGVkX2hpLCBsZWRfbG8sIGxuYV9jdHJsLCByZl9zd2l0Y2g7CiB9OwogCiBzdHJ1Y3Qgc21zX2JvYXJkICpzbXNfZ2V0X2JvYXJkKGludCBpZCk7CkBAIC01Miw3ICs1Miw4IEBACiAjZGVmaW5lIFNNU19MRURfSEkgIDIKIGludCBzbXNfYm9hcmRfbGVkX2ZlZWRiYWNrKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LCBpbnQgbGVkKTsKIGludCBzbXNfYm9hcmRfcG93ZXIoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsIGludCBvbm9mZik7CitpbnQgc21zX2JvYXJkX2xuYV9jb250cm9sKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LCBpbnQgb25vZmYpOwogCi1leHRlcm4gc3RydWN0IHVzYl9kZXZpY2VfaWQgc21zdXNiX2lkX3RhYmxlW107CitleHRlcm4gaW50IHNtc19ib2FyZF9sb2FkX21vZHVsZXMoaW50IGlkKTsKIAogI2VuZGlmIC8qIF9fU01TX0NBUkRTX0hfXyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5jIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zY29yZWFwaS5jCmluZGV4IGNmNjEzZjIuLjdiZDRkMWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmMKQEAgLTMsNyArMyw3IEBACiAgKgogICogIFRoaXMgZmlsZSBjb250YWlucyBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIGludGVyZmFjZSB0byBzbXMgY29yZSBjb21wb25lbnQKICAqCi0gKiAgYXV0aG9yOiBBbmF0b2x5IEdyZWVuYmxhdAorICogIGF1dGhvcjogVXJpIFNoa29sbmlrCiAgKgogICogIENvcHlyaWdodCAoYyksIDIwMDUtMjAwOCBTaWFubyBNb2JpbGUgU2lsaWNvbiwgSW5jLgogICoKQEAgLTM0LDggKzM0LDggQEAKICNpbmNsdWRlICJzbXNjb3JlYXBpLmgiCiAjaW5jbHVkZSAic21zLWNhcmRzLmgiCiAKLWludCBzbXNfZGVidWc7Ci1tb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIHNtc19kZWJ1ZywgaW50LCAwNjQ0KTsKK3N0YXRpYyBpbnQgc21zX2RiZzsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1Zywgc21zX2RiZywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWcgbGV2ZWwgKGluZm89MSwgYWR2PTIgKG9yLWFibGUpKSIpOwogCiBzdHJ1Y3Qgc21zY29yZV9kZXZpY2Vfbm90aWZ5ZWVfdCB7CkBAIC0xMDUsMTEgKzEwNSwxMyBAQAogCQljb3JlLT5sZWRfc3RhdGUgPSBsZWQ7CiAJcmV0dXJuIGNvcmUtPmxlZF9zdGF0ZTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc2NvcmVfc2V0X2JvYXJkX2lkKTsKIAogaW50IHNtc2NvcmVfZ2V0X2JvYXJkX2lkKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlKQogewogCXJldHVybiBjb3JlLT5ib2FyZF9pZDsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc2NvcmVfZ2V0X2JvYXJkX2lkKTsKIAogc3RydWN0IHNtc2NvcmVfcmVnaXN0cnlfZW50cnlfdCB7CiAJc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKQEAgLTE3MCw2ICsxNzIsNyBAQAogCiAJcmV0dXJuIGRlZmF1bHRfbW9kZTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc2NvcmVfcmVnaXN0cnlfZ2V0bW9kZSk7CiAKIHN0YXRpYyBlbnVtIHNtc19kZXZpY2VfdHlwZV9zdCBzbXNjb3JlX3JlZ2lzdHJ5X2dldHR5cGUoY2hhciAqZGV2cGF0aCkKIHsKQEAgLTI2MSw2ICsyNjQsNyBAQAogCiAJcmV0dXJuIHJjOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zY29yZV9yZWdpc3Rlcl9ob3RwbHVnKTsKIAogLyoqCiAgKiB1bnJlZ2lzdGVyIGEgY2xpZW50IGNhbGxiYWNrIHRoYXQgY2FsbGVkIHdoZW4gZGV2aWNlIHBsdWdnZWQgaW4vdW5wbHVnZ2VkCkBAIC0yODksNiArMjkzLDcgQEAKIAogCWttdXRleF91bmxvY2soJmdfc21zY29yZV9kZXZpY2VzbG9jayk7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzbXNjb3JlX3VucmVnaXN0ZXJfaG90cGx1Zyk7CiAKIHN0YXRpYyB2b2lkIHNtc2NvcmVfbm90aWZ5X2NsaWVudHMoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYpCiB7CkBAIC00MzIsNiArNDM3LDcgQEAKIAogCXJldHVybiAwOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zY29yZV9yZWdpc3Rlcl9kZXZpY2UpOwogCiAvKioKICAqIHNldHMgaW5pdGlhbCBkZXZpY2UgbW9kZSBhbmQgbm90aWZpZXMgY2xpZW50IGhvdHBsdWdzIHRoYXQgZGV2aWNlIGlzIHJlYWR5CkBAIC00NjAsNiArNDY2LDcgQEAKIAogCXJldHVybiByYzsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc2NvcmVfc3RhcnRfZGV2aWNlKTsKIAogc3RhdGljIGludCBzbXNjb3JlX3NlbmRyZXF1ZXN0X2FuZF93YWl0KHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LAogCQkJCQl2b2lkICpidWZmZXIsIHNpemVfdCBzaXplLApAQCAtNjg4LDYgKzY5NSw3IEBACiAKIAlzbXNfaW5mbygiZGV2aWNlICVwIGRlc3Ryb3llZCIsIGNvcmVkZXYpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zY29yZV91bnJlZ2lzdGVyX2RldmljZSk7CiAKIHN0YXRpYyBpbnQgc21zY29yZV9kZXRlY3RfbW9kZShzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldikKIHsKQEAgLTczMiw3ICs3NDAsNyBAQAogCS8qRFZCSCovCiAJeyJub25lIiwgImR2Yl9ub3ZhXzEybWh6LmlucCIsICJkdmJfbm92YV8xMm1oel9iMC5pbnAiLCAibm9uZSJ9LAogCS8qVERNQiovCi0JeyJub25lIiwgInRkbWJfbm92YV8xMm1oei5pbnAiLCAibm9uZSIsICJub25lIn0sCisJeyJub25lIiwgInRkbWJfbm92YV8xMm1oei5pbnAiLCAidGRtYl9ub3ZhXzEybWh6X2IwLmlucCIsICJub25lIn0sCiAJLypEQUJJUCovCiAJeyJub25lIiwgIm5vbmUiLCAibm9uZSIsICJub25lIn0sCiAJLypCREEqLwpAQCAtODc5LDYgKzg4Nyw3IEBACiB7CiAJcmV0dXJuIGNvcmVkZXYtPm1vZGU7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzbXNjb3JlX2dldF9kZXZpY2VfbW9kZSk7CiAKIC8qKgogICogZmluZCBjbGllbnQgYnkgcmVzcG9uc2UgaWQgJiB0eXBlIHdpdGhpbiB0aGUgY2xpZW50cyBsaXN0LgpAQCAtMTAwNiw2ICsxMDE1LDcgQEAKIAkJc21zY29yZV9wdXRidWZmZXIoY29yZWRldiwgY2IpOwogCX0KIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc2NvcmVfb25yZXNwb25zZSk7CiAKIC8qKgogICogcmV0dXJuIHBvaW50ZXIgdG8gbmV4dCBmcmVlIGJ1ZmZlciBkZXNjcmlwdG9yIGZyb20gY29yZSBwb29sCkBAIC0xMDMxLDYgKzEwNDEsNyBAQAogCiAJcmV0dXJuIGNiOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zY29yZV9nZXRidWZmZXIpOwogCiAvKioKICAqIHJldHVybiBidWZmZXIgZGVzY3JpcHRvciB0byBhIHBvb2wKQEAgLTEwNDUsNiArMTA1Niw3IEBACiB7CiAJbGlzdF9hZGRfbG9ja2VkKCZjYi0+ZW50cnksICZjb3JlZGV2LT5idWZmZXJzLCAmY29yZWRldi0+YnVmZmVyc2xvY2spOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zY29yZV9wdXRidWZmZXIpOwogCiBzdGF0aWMgaW50IHNtc2NvcmVfdmFsaWRhdGVfY2xpZW50KHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LAogCQkJCSAgIHN0cnVjdCBzbXNjb3JlX2NsaWVudF90ICpjbGllbnQsCkBAIC0xMTI0LDYgKzExMzYsNyBAQAogCiAJcmV0dXJuIDA7CiB9CitFWFBPUlRfU1lNQk9MX0dQTChzbXNjb3JlX3JlZ2lzdGVyX2NsaWVudCk7CiAKIC8qKgogICogZnJlZXMgc21zY2xpZW50IG9iamVjdCBhbmQgYWxsIHN1YmNsaWVudHMgYXNzb2NpYXRlZCB3aXRoIGl0CkBAIC0xMTU0LDYgKzExNjcsNyBAQAogCiAJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmY29yZWRldi0+Y2xpZW50c2xvY2ssIGZsYWdzKTsKIH0KK0VYUE9SVF9TWU1CT0xfR1BMKHNtc2NvcmVfdW5yZWdpc3Rlcl9jbGllbnQpOwogCiAvKioKICAqIHZlcmlmaWVzIHRoYXQgc291cmNlIGlkIGlzIG5vdCB0YWtlbiBieSBhbm90aGVyIGNsaWVudCwKQEAgLTExOTMsNiArMTIwNyw3IEBACiAKIAlyZXR1cm4gY29yZWRldi0+c2VuZHJlcXVlc3RfaGFuZGxlcihjb3JlZGV2LT5jb250ZXh0LCBidWZmZXIsIHNpemUpOwogfQorRVhQT1JUX1NZTUJPTF9HUEwoc21zY2xpZW50X3NlbmRyZXF1ZXN0KTsKIAogCiBpbnQgc21zY29yZV9jb25maWd1cmVfZ3BpbyhzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldiwgdTMyIHBpbiwKQEAgLTEyNzYsMTIgKzEyOTEsMTIgQEAKIAlJTklUX0xJU1RfSEVBRCgmZ19zbXNjb3JlX3JlZ2lzdHJ5KTsKIAlrbXV0ZXhfaW5pdCgmZ19zbXNjb3JlX3JlZ2lzdHJ5bG9jayk7CiAKLQkvKiBVU0IgUmVnaXN0ZXIgKi8KLQlyYyA9IHNtc3VzYl9yZWdpc3RlcigpOwogCi0JLyogRFZCIFJlZ2lzdGVyICovCi0JcmMgPSBzbXNkdmJfcmVnaXN0ZXIoKTsKIAorCisKKworCXJldHVybiByYzsKIAlzbXNfZGVidWcoInJjICVkIiwgcmMpOwogCiAJcmV0dXJuIHJjOwpAQCAtMTI5MCw2ICsxMzA1LDEwIEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgc21zY29yZV9tb2R1bGVfZXhpdCh2b2lkKQogewogCisKKworCisKIAlrbXV0ZXhfbG9jaygmZ19zbXNjb3JlX2RldmljZXNsb2NrKTsKIAl3aGlsZSAoIWxpc3RfZW1wdHkoJmdfc21zY29yZV9ub3RpZnllZXMpKSB7CiAJCXN0cnVjdCBzbXNjb3JlX2RldmljZV9ub3RpZnllZV90ICpub3RpZnllZSA9CkBAIC0xMzEyLDE4ICsxMzMxLDEyIEBACiAJfQogCWttdXRleF91bmxvY2soJmdfc21zY29yZV9yZWdpc3RyeWxvY2spOwogCi0JLyogRFZCIFVuUmVnaXN0ZXIgKi8KLQlzbXNkdmJfdW5yZWdpc3RlcigpOwotCi0JLyogVW5yZWdpc3RlciBVU0IgKi8KLQlzbXN1c2JfdW5yZWdpc3RlcigpOwotCiAJc21zX2RlYnVnKCIiKTsKIH0KIAogbW9kdWxlX2luaXQoc21zY29yZV9tb2R1bGVfaW5pdCk7CiBtb2R1bGVfZXhpdChzbXNjb3JlX21vZHVsZV9leGl0KTsKIAotTU9EVUxFX0RFU0NSSVBUSU9OKCJEcml2ZXIgZm9yIHRoZSBTaWFubyBTTVMxWFhYIFVTQiBkb25nbGUiKTsKLU1PRFVMRV9BVVRIT1IoIlNpYW5vIE1vYmlsZSBTaWxpY29uLCwsIChkb3JvbmNAc2lhbm8tbXMuY29tKSIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJTaWFubyBNRFRWIENvcmUgbW9kdWxlIik7CitNT0RVTEVfQVVUSE9SKCJTaWFubyBNb2JpbGUgU2lsaWNvbiwgSW5jLiAodXJpc0BzaWFuby1tcy5jb20pIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmggYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmgKaW5kZXggNzYwZTIzMy4uNTQ4ZGU5MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2NvcmVhcGkuaAorKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXNjb3JlYXBpLmgKQEAgLTI5LDEzICsyOSwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxhc20vcGFnZS5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNpbmNsdWRlICJkbXhkZXYuaCIKICNpbmNsdWRlICJkdmJkZXYuaCIKICNpbmNsdWRlICJkdmJfZGVtdXguaCIKICNpbmNsdWRlICJkdmJfZnJvbnRlbmQuaCIKIAotI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAKICNkZWZpbmUga211dGV4X2luaXQoX3BfKSBtdXRleF9pbml0KF9wXykKICNkZWZpbmUga211dGV4X2xvY2soX3BfKSBtdXRleF9sb2NrKF9wXykKQEAgLTM2OSwyNyArMzY5LDYgQEAKIAl1OCBvdXRwdXRkcml2aW5nOwogfTsKIAotc3RydWN0IHNtc2R2Yl9jbGllbnRfdCB7Ci0Jc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKLQotCXN0cnVjdCBzbXNjb3JlX2RldmljZV90CSpjb3JlZGV2OwotCXN0cnVjdCBzbXNjb3JlX2NsaWVudF90CSpzbXNjbGllbnQ7Ci0KLQlzdHJ1Y3QgZHZiX2FkYXB0ZXIJYWRhcHRlcjsKLQlzdHJ1Y3QgZHZiX2RlbXV4CWRlbXV4OwotCXN0cnVjdCBkbXhkZXYJCWRteGRldjsKLQlzdHJ1Y3QgZHZiX2Zyb250ZW5kCWZyb250ZW5kOwotCi0JZmVfc3RhdHVzX3QJCWZlX3N0YXR1czsKLQlpbnQJCQlmZV9iZXIsIGZlX3NuciwgZmVfdW5jLCBmZV9zaWduYWxfc3RyZW5ndGg7Ci0KLQlzdHJ1Y3QgY29tcGxldGlvbgl0dW5lX2RvbmUsIHN0YXRfZG9uZTsKLQotCS8qIHRvZG86IHNhdmUgZnJlcS9iYW5kIGluc3RlYWQgd2hvbGUgc3RydWN0ICovCi0Jc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzIGZlX3BhcmFtczsKLQotfTsKLQogZXh0ZXJuIHZvaWQgc21zY29yZV9yZWdpc3RyeV9zZXRtb2RlKGNoYXIgKmRldnBhdGgsIGludCBtb2RlKTsKIGV4dGVybiBpbnQgc21zY29yZV9yZWdpc3RyeV9nZXRtb2RlKGNoYXIgKmRldnBhdGgpOwogCkBAIC00MTgsNiArMzk3LDEzIEBACiBleHRlcm4gdm9pZCBzbXNjb3JlX29ucmVzcG9uc2Uoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsCiAJCQkgICAgICAgc3RydWN0IHNtc2NvcmVfYnVmZmVyX3QgKmNiKTsKIAorZXh0ZXJuIGludCBzbXNjb3JlX2dldF9jb21tb25fYnVmZmVyX3NpemUoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYpOworZXh0ZXJuIGludCBzbXNjb3JlX21hcF9jb21tb25fYnVmZmVyKHN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2LAorCQkJCSAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKK2V4dGVybiBpbnQgc21zY29yZV9nZXRfZndfZmlsZW5hbWUoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsCisJCQkJICAgaW50IG1vZGUsIGNoYXIgKmZpbGVuYW1lKTsKK2V4dGVybiBpbnQgc21zY29yZV9zZW5kX2Z3X2ZpbGUoc3RydWN0IHNtc2NvcmVfZGV2aWNlX3QgKmNvcmVkZXYsCisJCQkJdTggKnVmd2J1ZiwgaW50IHNpemUpOwogCiBleHRlcm4KIHN0cnVjdCBzbXNjb3JlX2J1ZmZlcl90ICpzbXNjb3JlX2dldGJ1ZmZlcihzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZWRldik7CkBAIC00MzMsMTggKzQxOSw5IEBACiAKIGludCBzbXNjb3JlX2xlZF9zdGF0ZShzdHJ1Y3Qgc21zY29yZV9kZXZpY2VfdCAqY29yZSwgaW50IGxlZCk7CiAKLS8qIHNtc2R2Yi5jICovCi1pbnQgc21zZHZiX3JlZ2lzdGVyKHZvaWQpOwotdm9pZCBzbXNkdmJfdW5yZWdpc3Rlcih2b2lkKTsKLQotLyogc21zdXNiLmMgKi8KLWludCBzbXN1c2JfcmVnaXN0ZXIodm9pZCk7Ci12b2lkIHNtc3VzYl91bnJlZ2lzdGVyKHZvaWQpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotZXh0ZXJuIGludCBzbXNfZGVidWc7Ci0KICNkZWZpbmUgREJHX0lORk8gMQogI2RlZmluZSBEQkdfQURWICAyCiAKQEAgLTQ1Miw3ICs0MjksNyBAQAogCXByaW50ayhrZXJuICIlczogIiBmbXQgIlxuIiwgX19mdW5jX18sICMjYXJnKQogCiAjZGVmaW5lIGRwcmludGsoa2VybiwgbHZsLCBmbXQsIGFyZy4uLikgZG8ge1wKLQlpZiAoc21zX2RlYnVnICYgbHZsKSBcCisJaWYgKHNtc19kYmcgJiBsdmwpIFwKIAkJc21zX3ByaW50ayhrZXJuLCBmbXQsICMjYXJnKTsgfSB3aGlsZSAoMCkKIAogI2RlZmluZSBzbXNfbG9nKGZtdCwgYXJnLi4uKSBzbXNfcHJpbnRrKEtFUk5fSU5GTywgZm10LCAjI2FyZykKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3NpYW5vL3Ntc2R2Yi5jIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zZHZiLmMKaW5kZXggMmRhOTUzYS4uYmEwODBiOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zZHZiLmMKQEAgLTEsNyArMSw3IEBACiAvKgogICogIERyaXZlciBmb3IgdGhlIFNpYW5vIFNNUzF4eHggVVNCIGRvbmdsZQogICoKLSAqICBhdXRob3I6IEFuYXRvbHkgR3JlZW5ibGF0CisgKiAgQXV0aG9yOiBVcmkgU2hrb2xuaQogICoKICAqICBDb3B5cmlnaHQgKGMpLCAyMDA1LTIwMDggU2lhbm8gTW9iaWxlIFNpbGljb24sIEluYy4KICAqCkBAIC0yNyw5ICsyNywzMyBAQAogCiBEVkJfREVGSU5FX01PRF9PUFRfQURBUFRFUl9OUihhZGFwdGVyX25yKTsKIAorc3RydWN0IHNtc2R2Yl9jbGllbnRfdCB7CisJc3RydWN0IGxpc3RfaGVhZCBlbnRyeTsKKworCXN0cnVjdCBzbXNjb3JlX2RldmljZV90ICpjb3JlZGV2OworCXN0cnVjdCBzbXNjb3JlX2NsaWVudF90ICpzbXNjbGllbnQ7CisKKwlzdHJ1Y3QgZHZiX2FkYXB0ZXIgICAgICBhZGFwdGVyOworCXN0cnVjdCBkdmJfZGVtdXggICAgICAgIGRlbXV4OworCXN0cnVjdCBkbXhkZXYgICAgICAgICAgIGRteGRldjsKKwlzdHJ1Y3QgZHZiX2Zyb250ZW5kICAgICBmcm9udGVuZDsKKworCWZlX3N0YXR1c190ICAgICAgICAgICAgIGZlX3N0YXR1czsKKwlpbnQgICAgICAgICAgICAgICAgICAgICBmZV9iZXIsIGZlX3NuciwgZmVfdW5jLCBmZV9zaWduYWxfc3RyZW5ndGg7CisKKwlzdHJ1Y3QgY29tcGxldGlvbiAgICAgICB0dW5lX2RvbmUsIHN0YXRfZG9uZTsKKworCS8qIHRvZG86IHNhdmUgZnJlcS9iYW5kIGluc3RlYWQgd2hvbGUgc3RydWN0ICovCisJc3RydWN0IGR2Yl9mcm9udGVuZF9wYXJhbWV0ZXJzIGZlX3BhcmFtczsKK307CisKIHN0YXRpYyBzdHJ1Y3QgbGlzdF9oZWFkIGdfc21zZHZiX2NsaWVudHM7CiBzdGF0aWMgc3RydWN0IG11dGV4IGdfc21zZHZiX2NsaWVudHNsb2NrOwogCitzdGF0aWMgaW50IHNtc19kYmc7Cittb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIHNtc19kYmcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAic2V0IGRlYnVnIGxldmVsIChpbmZvPTEsIGFkdj0yIChvci1hYmxlKSkiKTsKKwogc3RhdGljIGludCBzbXNkdmJfb25yZXNwb25zZSh2b2lkICpjb250ZXh0LCBzdHJ1Y3Qgc21zY29yZV9idWZmZXJfdCAqY2IpCiB7CiAJc3RydWN0IHNtc2R2Yl9jbGllbnRfdCAqY2xpZW50ID0gKHN0cnVjdCBzbXNkdmJfY2xpZW50X3QgKikgY29udGV4dDsKQEAgLTI2Miw2ICsyODYsNyBAQAogCQlzdHJ1Y3QgU21zTXNnSGRyX1NUCU1zZzsKIAkJdTMyCQlEYXRhWzNdOwogCX0gTXNnOworCWludCByZXQ7CiAKIAlNc2cuTXNnLm1zZ1NyY0lkICA9IERWQlRfQkRBX0NPTlRST0xfTVNHX0lEOwogCU1zZy5Nc2cubXNnRHN0SWQgID0gSElGX1RBU0s7CkBAIC0yODIsNiArMzA3LDI0IEBACiAJZGVmYXVsdDogcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJLyogRGlzYWJsZSBMTkEsIGlmIGFueS4gQW4gZXJyb3IgaXMgcmV0dXJuZWQgaWYgbm8gTE5BIGlzIHByZXNlbnQgKi8KKwlyZXQgPSBzbXNfYm9hcmRfbG5hX2NvbnRyb2woY2xpZW50LT5jb3JlZGV2LCAwKTsKKwlpZiAocmV0ID09IDApIHsKKwkJZmVfc3RhdHVzX3Qgc3RhdHVzOworCisJCS8qIHR1bmUgd2l0aCBMTkEgb2ZmIGF0IGZpcnN0ICovCisJCXJldCA9IHNtc2R2Yl9zZW5kcmVxdWVzdF9hbmRfd2FpdChjbGllbnQsICZNc2csIHNpemVvZihNc2cpLAorCQkJCQkJICAmY2xpZW50LT50dW5lX2RvbmUpOworCisJCXNtc2R2Yl9yZWFkX3N0YXR1cyhmZSwgJnN0YXR1cyk7CisKKwkJaWYgKHN0YXR1cyAmIEZFX0hBU19MT0NLKQorCQkJcmV0dXJuIHJldDsKKworCQkvKiBwcmV2aW91cyB0dW5lIGRpZG50IGxvY2sgLSBlbmFibGUgTE5BIGFuZCB0dW5lIGFnYWluICovCisJCXNtc19ib2FyZF9sbmFfY29udHJvbChjbGllbnQtPmNvcmVkZXYsIDEpOworCX0KKwogCXJldHVybiBzbXNkdmJfc2VuZHJlcXVlc3RfYW5kX3dhaXQoY2xpZW50LCAmTXNnLCBzaXplb2YoTXNnKSwKIAkJCQkJICAgJmNsaWVudC0+dHVuZV9kb25lKTsKIH0KQEAgLTMyOSw3ICszNzIsNyBAQAogCiBzdGF0aWMgc3RydWN0IGR2Yl9mcm9udGVuZF9vcHMgc21zZHZiX2ZlX29wcyA9IHsKIAkuaW5mbyA9IHsKLQkJLm5hbWUJCQk9ICJTaWFubyBNb2JpbGUgRGlnaXRhbCBTTVMxeHh4IiwKKwkJLm5hbWUJCQk9ICJTaWFubyBNb2JpbGUgRGlnaXRhbCBNRFRWIFJlY2VpdmVyIiwKIAkJLnR5cGUJCQk9IEZFX09GRE0sCiAJCS5mcmVxdWVuY3lfbWluCQk9IDQ0MjUwMDAwLAogCQkuZnJlcXVlbmN5X21heAkJPSA4NjcyNTAwMDAsCkBAIC0zNzEsNyArNDE0LDcgQEAKIAlpZiAoIWFycml2YWwpCiAJCXJldHVybiAwOwogCi0JaWYgKHNtc2NvcmVfZ2V0X2RldmljZV9tb2RlKGNvcmVkZXYpICE9IDQpIHsKKwlpZiAoc21zY29yZV9nZXRfZGV2aWNlX21vZGUoY29yZWRldikgIT0gREVWSUNFX01PREVfRFZCVF9CREEpIHsKIAkJc21zX2VycigiU01TIERldmljZSBtb2RlIGlzIG5vdCBzZXQgZm9yICIKIAkJCSJEVkIgb3BlcmF0aW9uLiIpOwogCQlyZXR1cm4gMDsKQEAgLTQ3Myw3ICs1MTYsNyBAQAogCXJldHVybiByYzsKIH0KIAotaW50IHNtc2R2Yl9yZWdpc3Rlcih2b2lkKQoraW50IHNtc2R2Yl9tb2R1bGVfaW5pdCh2b2lkKQogewogCWludCByYzsKIApAQCAtNDg3LDcgKzUzMCw3IEBACiAJcmV0dXJuIHJjOwogfQogCi12b2lkIHNtc2R2Yl91bnJlZ2lzdGVyKHZvaWQpCit2b2lkIHNtc2R2Yl9tb2R1bGVfZXhpdCh2b2lkKQogewogCXNtc2NvcmVfdW5yZWdpc3Rlcl9ob3RwbHVnKHNtc2R2Yl9ob3RwbHVnKTsKIApAQCAtNDk5LDMgKzU0MiwxMCBAQAogCiAJa211dGV4X3VubG9jaygmZ19zbXNkdmJfY2xpZW50c2xvY2spOwogfQorCittb2R1bGVfaW5pdChzbXNkdmJfbW9kdWxlX2luaXQpOworbW9kdWxlX2V4aXQoc21zZHZiX21vZHVsZV9leGl0KTsKKworTU9EVUxFX0RFU0NSSVBUSU9OKCJTTVMgRFZCIHN1YnN5c3RlbSBhZGFwdGF0aW9uIG1vZHVsZSIpOworTU9EVUxFX0FVVEhPUigiU2lhbm8gTW9iaWxlIFNpbGljb24sIElOQy4gKHVyaXNAc2lhbm8tbXMuY29tKSIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvc2lhbm8vc21zdXNiLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXN1c2IuYwppbmRleCA1ZDdjYTM0Li43MWM2NWY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXN1c2IuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi9zaWFuby9zbXN1c2IuYwpAQCAtMjcsNiArMjcsMTAgQEAKICNpbmNsdWRlICJzbXNjb3JlYXBpLmgiCiAjaW5jbHVkZSAic21zLWNhcmRzLmgiCiAKK3N0YXRpYyBpbnQgc21zX2RiZzsKK21vZHVsZV9wYXJhbV9uYW1lZChkZWJ1Zywgc21zX2RiZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJzZXQgZGVidWcgbGV2ZWwgKGluZm89MSwgYWR2PTIgKG9yLWFibGUpKSIpOworCiAjZGVmaW5lIFVTQjFfQlVGRkVSX1NJWkUJCTB4MTAwMAogI2RlZmluZSBVU0IyX0JVRkZFUl9TSVpFCQkweDQwMDAKIApAQCAtNDI0LDYgKzQyOCw3IEBACiAKIAlyYyA9IHNtc3VzYl9pbml0X2RldmljZShpbnRmLCBpZC0+ZHJpdmVyX2luZm8pOwogCXNtc19pbmZvKCJyYyAlZCIsIHJjKTsKKwlzbXNfYm9hcmRfbG9hZF9tb2R1bGVzKGlkLT5kcml2ZXJfaW5mbyk7CiAJcmV0dXJuIHJjOwogfQogCkBAIC00MzYsNyArNDQxLDcgQEAKIHsKIAlzdHJ1Y3Qgc21zdXNiX2RldmljZV90ICpkZXYgPQogCQkoc3RydWN0IHNtc3VzYl9kZXZpY2VfdCAqKXVzYl9nZXRfaW50ZmRhdGEoaW50Zik7Ci0JcHJpbnRrKEtFUk5fSU5GTyAiJXMgIEVudGVyaW5nIHN0YXR1cyAlZC5cbiIsIF9fZnVuY19fLCBtc2cuZXZlbnQpOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBFbnRlcmluZyBzdGF0dXMgJWQuXG4iLCBfX2Z1bmNfXywgbXNnLmV2ZW50KTsKIAlzbXN1c2Jfc3RvcF9zdHJlYW1pbmcoZGV2KTsKIAlyZXR1cm4gMDsKIH0KQEAgLTQ0OCw3ICs0NTMsNyBAQAogCQkoc3RydWN0IHNtc3VzYl9kZXZpY2VfdCAqKXVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CiAJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiJXMgIEVudGVyaW5nLlxuIiwgX19mdW5jX18pOworCXByaW50ayhLRVJOX0lORk8gIiVzOiBFbnRlcmluZy5cbiIsIF9fZnVuY19fKTsKIAl1c2JfY2xlYXJfaGFsdCh1ZGV2LCB1c2JfcmN2YnVsa3BpcGUodWRldiwgMHg4MSkpOwogCXVzYl9jbGVhcl9oYWx0KHVkZXYsIHVzYl9yY3ZidWxrcGlwZSh1ZGV2LCAweDAyKSk7CiAKQEAgLTQ2Myw5ICs0NjgsOCBAQAogCQkJCSAgICAgICBpbnRmLT5jdXJfYWx0c2V0dGluZy0+ZGVzYy4KIAkJCQkgICAgICAgYkludGVyZmFjZU51bWJlciwgMCk7CiAJCWlmIChyYyA8IDApIHsKLQkJCXByaW50ayhLRVJOX0lORk8KLQkJCSAgICAgICAiJXMgdXNiX3NldF9pbnRlcmZhY2UgZmFpbGVkLCByYyAlZFxuIiwKLQkJCSAgICAgICBfX2Z1bmNfXywgcmMpOworCQkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgdXNiX3NldF9pbnRlcmZhY2UgZmFpbGVkLCAiCisJCQkgICAgICAgInJjICVkXG4iLCBfX2Z1bmNfXywgcmMpOwogCQkJcmV0dXJuIHJjOwogCQl9CiAJfQpAQCAtNDc0LDggKzQ3OCw1NSBAQAogCXJldHVybiAwOwogfQogCitzdHJ1Y3QgdXNiX2RldmljZV9pZCBzbXN1c2JfaWRfdGFibGVbXSA9IHsKKyNpZmRlZiBDT05GSUdfRFZCX1NJQU5PX1NNUzFYWFhfU01TX0lEUworCXsgVVNCX0RFVklDRSgweDE4N2YsIDB4MDAxMCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfU0lBTk9fU1RFTExBUiB9LAorCXsgVVNCX0RFVklDRSgweDE4N2YsIDB4MDEwMCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfU0lBTk9fU1RFTExBUiB9LAorCXsgVVNCX0RFVklDRSgweDE4N2YsIDB4MDIwMCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfU0lBTk9fTk9WQV9BIH0sCisJeyBVU0JfREVWSUNFKDB4MTg3ZiwgMHgwMjAxKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9TSUFOT19OT1ZBX0IgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxODdmLCAweDAzMDApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX1NJQU5PX1ZFR0EgfSwKKyNlbmRpZgorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4MTcwMCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX0NBVEFNT1VOVCB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4MTgwMCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX09LRU1PX0EgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDE4MDEpLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9PS0VNT19CIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHgyMDAwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfVElHRVJfTUlOSUNBUkQgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDIwMDkpLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9USUdFUl9NSU5JQ0FSRF9SMiB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4MjAwYSksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1RJR0VSX01JTklDQVJEIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHgyMDEwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfVElHRVJfTUlOSUNBUkQgfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDIwMTEpLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9USUdFUl9NSU5JQ0FSRCB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4MjAxOSksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1RJR0VSX01JTklDQVJEIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg1NTAwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NTUxMCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDU1MjApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCisJeyBVU0JfREVWSUNFKDB4MjA0MCwgMHg1NTMwKSwKKwkJLmRyaXZlcl9pbmZvID0gU01TMVhYWF9CT0FSRF9IQVVQUEFVR0VfV0lOREhBTSB9LAorCXsgVVNCX0RFVklDRSgweDIwNDAsIDB4NTU4MCksCisJCS5kcml2ZXJfaW5mbyA9IFNNUzFYWFhfQk9BUkRfSEFVUFBBVUdFX1dJTkRIQU0gfSwKKwl7IFVTQl9ERVZJQ0UoMHgyMDQwLCAweDU1OTApLAorCQkuZHJpdmVyX2luZm8gPSBTTVMxWFhYX0JPQVJEX0hBVVBQQVVHRV9XSU5ESEFNIH0sCisJeyB9CQkvKiBUZXJtaW5hdGluZyBlbnRyeSAqLworfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBzbXN1c2JfaWRfdGFibGUpOworCiBzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc21zdXNiX2RyaXZlciA9IHsKLQkubmFtZQkJCT0gInNtczF4eHgiLAorCS5uYW1lCQkJPSAic21zdXNiIiwKIAkucHJvYmUJCQk9IHNtc3VzYl9wcm9iZSwKIAkuZGlzY29ubmVjdAkJPSBzbXN1c2JfZGlzY29ubmVjdCwKIAkuaWRfdGFibGUJCT0gc21zdXNiX2lkX3RhYmxlLApAQCAtNDg0LDcgKzUzNSw3IEBACiAJLnJlc3VtZQkJCT0gc21zdXNiX3Jlc3VtZSwKIH07CiAKLWludCBzbXN1c2JfcmVnaXN0ZXIodm9pZCkKK2ludCBzbXN1c2JfbW9kdWxlX2luaXQodm9pZCkKIHsKIAlpbnQgcmMgPSB1c2JfcmVnaXN0ZXIoJnNtc3VzYl9kcml2ZXIpOwogCWlmIChyYykKQEAgLTQ5NSwxMCArNTQ2LDE2IEBACiAJcmV0dXJuIHJjOwogfQogCi12b2lkIHNtc3VzYl91bnJlZ2lzdGVyKHZvaWQpCit2b2lkIHNtc3VzYl9tb2R1bGVfZXhpdCh2b2lkKQogewogCXNtc19kZWJ1ZygiIik7CiAJLyogUmVndWxhciBVU0IgQ2xlYW51cCAqLwogCXVzYl9kZXJlZ2lzdGVyKCZzbXN1c2JfZHJpdmVyKTsKIH0KIAorbW9kdWxlX2luaXQoc21zdXNiX21vZHVsZV9pbml0KTsKK21vZHVsZV9leGl0KHNtc3VzYl9tb2R1bGVfZXhpdCk7CisKK01PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciB0aGUgU2lhbm8gU01TMVhYWCBVU0IgZG9uZ2xlIik7CitNT0RVTEVfQVVUSE9SKCJTaWFubyBNb2JpbGUgU2lsaWNvbiwgSU5DLiAodXJpc0BzaWFuby1tcy5jb20pIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvS2NvbmZpZwppbmRleCBhYjBiY2QyLi43NzI5OTA0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL0tjb25maWcKQEAgLTEwOCw3ICsxMDgsNyBAQAogCXNlbGVjdCBEVkJfU1RCNjEwMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfTE5CUDIxIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9UREExMDAyMyBpZiAhRFZCX0ZFX0NVU1RPTUlTRQotCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjdYIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgTUVESUFfVFVORVJfVERBODI3WCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJc2VsZWN0IFZJREVPX0lSCiAJaGVscAogCSAgU3VwcG9ydCBmb3Igc2ltcGxlIFNBQTcxNDYgYmFzZWQgRFZCIGNhcmRzCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTAuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jCmluZGV4IGFhMWZmNTIuLjQ2MjRjZWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMC5jCkBAIC03MjUsNyArNzI1LDcgQEAKIH0KIAogCi1zdGF0aWMgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfb3NkX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfb3NkX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5pb2N0bAkJPSBkdmJfZ2VuZXJpY19pb2N0bCwKIAkub3BlbgkJPSBkdmJfZ2VuZXJpY19vcGVuLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX2F2LmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfYXYuYwppbmRleCBiZGM2MmFjLi5lNGQwOTAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfYXYuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfYXYuYwpAQCAtMTQ1Niw3ICsxNDU2LDcgQEAKICAqIGRyaXZlciByZWdpc3RyYXRpb24KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGR2Yl92aWRlb19mb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHZiX3ZpZGVvX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS53cml0ZQkJPSBkdmJfdmlkZW9fd3JpdGUsCiAJLmlvY3RsCQk9IGR2Yl9nZW5lcmljX2lvY3RsLApAQCAtMTQ3NCw3ICsxNDc0LDcgQEAKIAkua2VybmVsX2lvY3RsCT0gZHZiX3ZpZGVvX2lvY3RsLAogfTsKIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHZiX2F1ZGlvX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfYXVkaW9fZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLndyaXRlCQk9IGR2Yl9hdWRpb193cml0ZSwKIAkuaW9jdGwJCT0gZHZiX2dlbmVyaWNfaW9jdGwsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfY2EuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9jYS5jCmluZGV4IDI2MTEzNWQuLmM3YTY1YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9jYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF9jYS5jCkBAIC0zNDUsNyArMzQ1LDcgQEAKIAlyZXR1cm4gY2lfbGxfcmVhZCgmYXY3MTEwLT5jaV9yYnVmZmVyLCBmaWxlLCBidWYsIGNvdW50LCBwcG9zKTsKIH0KIAotc3RhdGljIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgZHZiX2NhX2ZvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBkdmJfY2FfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCiAJLnJlYWQJCT0gZHZiX2NhX3JlYWQsCiAJLndyaXRlCQk9IGR2Yl9jYV93cml0ZSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF92NGwuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2F2NzExMF92NGwuYwppbmRleCBjNWI5YzcwLi4yMjEwY2ZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9hdjcxMTBfdjRsLmMKKysrIGIvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYXY3MTEwX3Y0bC5jCkBAIC0zMTYsMjUzICszMTYsMjYxIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBsb25nIGF2NzExMF9pb2N0bChzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmgsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl90dW5lciAqdCkKIHsKLQlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9IGZoLT5kZXY7Ci0Jc3RydWN0IGF2NzExMCAqYXY3MTEwID0gKHN0cnVjdCBhdjcxMTAqKSBkZXYtPmV4dF9wcml2OwotCWRwcmludGsoNCwgInNhYTcxNDZfZGV2OiAlcFxuIiwgZGV2KTsKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCAqKWRldi0+ZXh0X3ByaXY7CisJdTE2IHN0ZXJlb19kZXQ7CisJczggc3RlcmVvOwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFZJRElPQ19HX1RVTkVSOgotCXsKLQkJc3RydWN0IHY0bDJfdHVuZXIgKnQgPSBhcmc7Ci0JCXUxNiBzdGVyZW9fZGV0OwotCQlzOCBzdGVyZW87CisJZHByaW50aygyLCAiVklESU9DX0dfVFVORVI6ICVkXG4iLCB0LT5pbmRleCk7CiAKLQkJZHByaW50aygyLCAiVklESU9DX0dfVFVORVI6ICVkXG4iLCB0LT5pbmRleCk7CisJaWYgKCFhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncyB8fCB0LT5pbmRleCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlpZiAoIWF2NzExMC0+YW5hbG9nX3R1bmVyX2ZsYWdzIHx8IHQtPmluZGV4ICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwltZW1zZXQodCwgMCwgc2l6ZW9mKCp0KSk7CisJc3RyY3B5KChjaGFyICopdC0+bmFtZSwgIlRlbGV2aXNpb24iKTsKIAotCQltZW1zZXQodCwgMCwgc2l6ZW9mKCp0KSk7Ci0JCXN0cmNweSgoY2hhciAqKXQtPm5hbWUsICJUZWxldmlzaW9uIik7CisJdC0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOworCXQtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9OT1JNIHwgVjRMMl9UVU5FUl9DQVBfU1RFUkVPIHwKKwkJVjRMMl9UVU5FUl9DQVBfTEFORzEgfCBWNEwyX1RVTkVSX0NBUF9MQU5HMiB8IFY0TDJfVFVORVJfQ0FQX1NBUDsKKwl0LT5yYW5nZWxvdyA9IDc3MjsJLyogNDguMjUgTUhaIC8gNjIuNSBrSHogPSA3NzIsIHNlZSBmaTEyMTZtazItc3BlY3MsIHBhZ2UgMiAqLworCXQtPnJhbmdlaGlnaCA9IDEzNjg0OwkvKiA4NTUuMjUgTUh6IC8gNjIuNSBrSHogPSAxMzY4NCAqLworCS8qIEZJWE1FOiBhZGQgdGhlIHJlYWwgc2lnbmFsIHN0cmVuZ3RoIGhlcmUgKi8KKwl0LT5zaWduYWwgPSAweGZmZmY7CisJdC0+YWZjID0gMDsKIAotCQl0LT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7Ci0JCXQtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9OT1JNIHwgVjRMMl9UVU5FUl9DQVBfU1RFUkVPIHwKLQkJCVY0TDJfVFVORVJfQ0FQX0xBTkcxIHwgVjRMMl9UVU5FUl9DQVBfTEFORzIgfCBWNEwyX1RVTkVSX0NBUF9TQVA7Ci0JCXQtPnJhbmdlbG93ID0gNzcyOwkvKiA0OC4yNSBNSFogLyA2Mi41IGtIeiA9IDc3Miwgc2VlIGZpMTIxNm1rMi1zcGVjcywgcGFnZSAyICovCi0JCXQtPnJhbmdlaGlnaCA9IDEzNjg0OwkvKiA4NTUuMjUgTUh6IC8gNjIuNSBrSHogPSAxMzY4NCAqLwotCQkvKiBGSVhNRTogYWRkIHRoZSByZWFsIHNpZ25hbCBzdHJlbmd0aCBoZXJlICovCi0JCXQtPnNpZ25hbCA9IDB4ZmZmZjsKLQkJdC0+YWZjID0gMDsKKwkvKiBGSVhNRTogc3RhbmRhcmQgLyBzdGVyZW8gZGV0ZWN0aW9uIGlzIHN0aWxsIGJyb2tlbiAqLworCW1zcF9yZWFkcmVnKGF2NzExMCwgTVNQX1JEX0RFTSwgMHgwMDdlLCAmc3RlcmVvX2RldCk7CisJZHByaW50aygxLCAiVklESU9DX0dfVFVORVI6IG1zcDM0MDAgVFYgc3RhbmRhcmQgZGV0ZWN0aW9uOiAweCUwNHhcbiIsIHN0ZXJlb19kZXQpOworCW1zcF9yZWFkcmVnKGF2NzExMCwgTVNQX1JEX0RTUCwgMHgwMDE4LCAmc3RlcmVvX2RldCk7CisJZHByaW50aygxLCAiVklESU9DX0dfVFVORVI6IG1zcDM0MDAgc3RlcmVvIGRldGVjdGlvbjogMHglMDR4XG4iLCBzdGVyZW9fZGV0KTsKKwlzdGVyZW8gPSAoczgpKHN0ZXJlb19kZXQgPj4gOCk7CisJaWYgKHN0ZXJlbyA+IDB4MTApIHsKKwkJLyogc3RlcmVvICovCisJCXQtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU8gfCBWNEwyX1RVTkVSX1NVQl9NT05POworCQl0LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKKwl9IGVsc2UgaWYgKHN0ZXJlbyA8IC0weDEwKSB7CisJCS8qIGJpbGluZ3VhbCAqLworCQl0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTEFORzEgfCBWNEwyX1RVTkVSX1NVQl9MQU5HMjsKKwkJdC0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9MQU5HMTsKKwl9IGVsc2UgLyogbW9ubyAqLworCQl0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKIAotCQkvLyBGSVhNRTogc3RhbmRhcmQgLyBzdGVyZW8gZGV0ZWN0aW9uIGlzIHN0aWxsIGJyb2tlbgotCQltc3BfcmVhZHJlZyhhdjcxMTAsIE1TUF9SRF9ERU0sIDB4MDA3ZSwgJnN0ZXJlb19kZXQpOwotCQlkcHJpbnRrKDEsICJWSURJT0NfR19UVU5FUjogbXNwMzQwMCBUViBzdGFuZGFyZCBkZXRlY3Rpb246IDB4JTA0eFxuIiwgc3RlcmVvX2RldCk7Ci0JCW1zcF9yZWFkcmVnKGF2NzExMCwgTVNQX1JEX0RTUCwgMHgwMDE4LCAmc3RlcmVvX2RldCk7Ci0JCWRwcmludGsoMSwgIlZJRElPQ19HX1RVTkVSOiBtc3AzNDAwIHN0ZXJlbyBkZXRlY3Rpb246IDB4JTA0eFxuIiwgc3RlcmVvX2RldCk7Ci0JCXN0ZXJlbyA9IChzOCkoc3RlcmVvX2RldCA+PiA4KTsKLQkJaWYgKHN0ZXJlbyA+IDB4MTApIHsKLQkJCS8qIHN0ZXJlbyAqLwotCQkJdC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX1NURVJFTyB8IFY0TDJfVFVORVJfU1VCX01PTk87Ci0JCQl0LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKLQkJfQotCQllbHNlIGlmIChzdGVyZW8gPCAtMHgxMCkgewotCQkJLyogYmlsaW5ndWFsICovCi0JCQl0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTEFORzEgfCBWNEwyX1RVTkVSX1NVQl9MQU5HMjsKLQkJCXQtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTEFORzE7Ci0JCX0KLQkJZWxzZSAvKiBtb25vICovCi0JCQl0LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKKwlyZXR1cm4gMDsKK30KIAotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfU19UVU5FUjoKLQl7Ci0JCXN0cnVjdCB2NGwyX3R1bmVyICp0ID0gYXJnOwotCQl1MTYgZm1fbWF0cml4LCBzcmM7Ci0JCWRwcmludGsoMiwgIlZJRElPQ19TX1RVTkVSOiAlZFxuIiwgdC0+aW5kZXgpOworc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3R1bmVyICp0KQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwICopZGV2LT5leHRfcHJpdjsKKwl1MTYgZm1fbWF0cml4LCBzcmM7CisJZHByaW50aygyLCAiVklESU9DX1NfVFVORVI6ICVkXG4iLCB0LT5pbmRleCk7CiAKLQkJaWYgKCFhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncyB8fCBhdjcxMTAtPmN1cnJlbnRfaW5wdXQgIT0gMSkKLQkJCXJldHVybiAtRUlOVkFMOworCWlmICghYXY3MTEwLT5hbmFsb2dfdHVuZXJfZmxhZ3MgfHwgYXY3MTEwLT5jdXJyZW50X2lucHV0ICE9IDEpCisJCXJldHVybiAtRUlOVkFMOwogCi0JCXN3aXRjaCAodC0+YXVkbW9kZSkgewotCQljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86Ci0JCQlkcHJpbnRrKDIsICJWSURJT0NfU19UVU5FUjogVjRMMl9UVU5FUl9NT0RFX1NURVJFT1xuIik7Ci0JCQlmbV9tYXRyaXggPSAweDMwMDE7IC8vIHN0ZXJlbwotCQkJc3JjID0gMHgwMDIwOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyOgotCQkJZHByaW50aygyLCAiVklESU9DX1NfVFVORVI6IFY0TDJfVFVORVJfTU9ERV9MQU5HMV9MQU5HMlxuIik7Ci0JCQlmbV9tYXRyaXggPSAweDMwMDA7IC8vIGJpbGluZ3VhbAotCQkJc3JjID0gMHgwMDIwOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxOgotCQkJZHByaW50aygyLCAiVklESU9DX1NfVFVORVI6IFY0TDJfVFVORVJfTU9ERV9MQU5HMVxuIik7Ci0JCQlmbV9tYXRyaXggPSAweDMwMDA7IC8vIG1vbm8KLQkJCXNyYyA9IDB4MDAwMDsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMjoKLQkJCWRwcmludGsoMiwgIlZJRElPQ19TX1RVTkVSOiBWNEwyX1RVTkVSX01PREVfTEFORzJcbiIpOwotCQkJZm1fbWF0cml4ID0gMHgzMDAwOyAvLyBtb25vCi0JCQlzcmMgPSAweDAwMTA7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDogLyogY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzogKi8KLQkJCWRwcmludGsoMiwgIlZJRElPQ19TX1RVTkVSOiBUREE5ODQwX1NFVF9NT05PXG4iKTsKLQkJCWZtX21hdHJpeCA9IDB4MzAwMDsgLy8gbW9ubwotCQkJc3JjID0gMHgwMDMwOwotCQkJYnJlYWs7Ci0JCX0KLQkJbXNwX3dyaXRlcmVnKGF2NzExMCwgTVNQX1dSX0RTUCwgMHgwMDBlLCBmbV9tYXRyaXgpOwotCQltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMDgsIHNyYyk7Ci0JCW1zcF93cml0ZXJlZyhhdjcxMTAsIE1TUF9XUl9EU1AsIDB4MDAwOSwgc3JjKTsKLQkJbXNwX3dyaXRlcmVnKGF2NzExMCwgTVNQX1dSX0RTUCwgMHgwMDBhLCBzcmMpOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfR19GUkVRVUVOQ1k6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7Ci0KLQkJZHByaW50aygyLCAiVklESU9DX0dfRlJFUTogZnJlcToweCUwOHguXG4iLCBmLT5mcmVxdWVuY3kpOwotCi0JCWlmICghYXY3MTEwLT5hbmFsb2dfdHVuZXJfZmxhZ3MgfHwgYXY3MTEwLT5jdXJyZW50X2lucHV0ICE9IDEpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQltZW1zZXQoZiwgMCwgc2l6ZW9mKCpmKSk7Ci0JCWYtPnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKLQkJZi0+ZnJlcXVlbmN5ID0JYXY3MTEwLT5jdXJyZW50X2ZyZXE7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19TX0ZSRVFVRU5DWToKLQl7Ci0JCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZiA9IGFyZzsKLQotCQlkcHJpbnRrKDIsICJWSURJT0NfU19GUkVRVUVOQ1k6IGZyZXE6MHglMDh4LlxuIiwgZi0+ZnJlcXVlbmN5KTsKLQotCQlpZiAoIWF2NzExMC0+YW5hbG9nX3R1bmVyX2ZsYWdzIHx8IGF2NzExMC0+Y3VycmVudF9pbnB1dCAhPSAxKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKFY0TDJfVFVORVJfQU5BTE9HX1RWICE9IGYtPnR5cGUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMDAsIDB4ZmZlMCk7IC8vIGZhc3QgbXV0ZQotCQltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMDcsIDB4ZmZlMCk7Ci0KLQkJLyogdHVuZSBpbiBkZXNpcmVkIGZyZXF1ZW5jeSAqLwotCQlpZiAoYXY3MTEwLT5hbmFsb2dfdHVuZXJfZmxhZ3MgJiBBTkFMT0dfVFVORVJfVkVTMTgyMCkgewotCQkJdmVzMTgyMF9zZXRfdHZfZnJlcShkZXYsIGYtPmZyZXF1ZW5jeSk7Ci0JCX0gZWxzZSBpZiAoYXY3MTEwLT5hbmFsb2dfdHVuZXJfZmxhZ3MgJiBBTkFMT0dfVFVORVJfU1RWMDI5NykgewotCQkJc3R2MDI5N19zZXRfdHZfZnJlcShkZXYsIGYtPmZyZXF1ZW5jeSk7Ci0JCX0KLQkJYXY3MTEwLT5jdXJyZW50X2ZyZXEgPSBmLT5mcmVxdWVuY3k7Ci0KLQkJbXNwX3dyaXRlcmVnKGF2NzExMCwgTVNQX1dSX0RTUCwgMHgwMDE1LCAweDAwM2YpOyAvLyBzdGFydCBzdGVyZW8gZGV0ZWN0aW9uCi0JCW1zcF93cml0ZXJlZyhhdjcxMTAsIE1TUF9XUl9EU1AsIDB4MDAxNSwgMHgwMDAwKTsKLQkJbXNwX3dyaXRlcmVnKGF2NzExMCwgTVNQX1dSX0RTUCwgMHgwMDAwLCAweDRmMDApOyAvLyBsb3Vkc3BlYWtlciArIGhlYWRwaG9uZQotCQltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMDcsIDB4NGYwMCk7IC8vIFNDQVJUIDEgdm9sdW1lCi0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19FTlVNSU5QVVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaSA9IGFyZzsKLQotCQlkcHJpbnRrKDIsICJWSURJT0NfRU5VTUlOUFVUOiAlZFxuIiwgaS0+aW5kZXgpOwotCi0JCWlmIChhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncykgewotCQkJaWYgKGktPmluZGV4IDwgMCB8fCBpLT5pbmRleCA+PSA0KQotCQkJCXJldHVybiAtRUlOVkFMOwotCQl9IGVsc2UgewotCQkJaWYgKGktPmluZGV4ICE9IDApCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQltZW1jcHkoaSwgJmlucHV0c1tpLT5pbmRleF0sIHNpemVvZihzdHJ1Y3QgdjRsMl9pbnB1dCkpOwotCi0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19HX0lOUFVUOgotCXsKLQkJaW50ICppbnB1dCA9IChpbnQgKilhcmc7Ci0JCSppbnB1dCA9IGF2NzExMC0+Y3VycmVudF9pbnB1dDsKLQkJZHByaW50aygyLCAiVklESU9DX0dfSU5QVVQ6ICVkXG4iLCAqaW5wdXQpOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfU19JTlBVVDoKLQl7Ci0JCWludCBpbnB1dCA9ICooaW50ICopYXJnOwotCi0JCWRwcmludGsoMiwgIlZJRElPQ19TX0lOUFVUOiAlZFxuIiwgaW5wdXQpOwotCi0JCWlmICghYXY3MTEwLT5hbmFsb2dfdHVuZXJfZmxhZ3MpCi0JCQlyZXR1cm4gMDsKLQotCQlpZiAoaW5wdXQgPCAwIHx8IGlucHV0ID49IDQpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlhdjcxMTAtPmN1cnJlbnRfaW5wdXQgPSBpbnB1dDsKLQkJcmV0dXJuIGF2NzExMF9kdmJfY19zd2l0Y2goZmgpOwotCX0KLQljYXNlIFZJRElPQ19HX0FVRElPOgotCXsKLQkJc3RydWN0IHY0bDJfYXVkaW8gKmEgPSBhcmc7Ci0KLQkJZHByaW50aygyLCAiVklESU9DX0dfQVVESU86ICVkXG4iLCBhLT5pbmRleCk7Ci0JCWlmIChhLT5pbmRleCAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCW1lbWNweShhLCAmbXNwMzQwMF92NGwyX2F1ZGlvLCBzaXplb2Yoc3RydWN0IHY0bDJfYXVkaW8pKTsKKwlzd2l0Y2ggKHQtPmF1ZG1vZGUpIHsKKwljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86CisJCWRwcmludGsoMiwgIlZJRElPQ19TX1RVTkVSOiBWNEwyX1RVTkVSX01PREVfU1RFUkVPXG4iKTsKKwkJZm1fbWF0cml4ID0gMHgzMDAxOyAvKiBzdGVyZW8gKi8KKwkJc3JjID0gMHgwMDIwOworCQlicmVhazsKKwljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMV9MQU5HMjoKKwkJZHByaW50aygyLCAiVklESU9DX1NfVFVORVI6IFY0TDJfVFVORVJfTU9ERV9MQU5HMV9MQU5HMlxuIik7CisJCWZtX21hdHJpeCA9IDB4MzAwMDsgLyogYmlsaW5ndWFsICovCisJCXNyYyA9IDB4MDAyMDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzE6CisJCWRwcmludGsoMiwgIlZJRElPQ19TX1RVTkVSOiBWNEwyX1RVTkVSX01PREVfTEFORzFcbiIpOworCQlmbV9tYXRyaXggPSAweDMwMDA7IC8qIG1vbm8gKi8KKwkJc3JjID0gMHgwMDAwOworCQlicmVhazsKKwljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMjoKKwkJZHByaW50aygyLCAiVklESU9DX1NfVFVORVI6IFY0TDJfVFVORVJfTU9ERV9MQU5HMlxuIik7CisJCWZtX21hdHJpeCA9IDB4MzAwMDsgLyogbW9ubyAqLworCQlzcmMgPSAweDAwMTA7CisJCWJyZWFrOworCWRlZmF1bHQ6IC8qIGNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86ICovCisJCWRwcmludGsoMiwgIlZJRElPQ19TX1RVTkVSOiBUREE5ODQwX1NFVF9NT05PXG4iKTsKKwkJZm1fbWF0cml4ID0gMHgzMDAwOyAvKiBtb25vICovCisJCXNyYyA9IDB4MDAzMDsKIAkJYnJlYWs7CiAJfQotCWNhc2UgVklESU9DX1NfQVVESU86Ci0JewotCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSA9IGFyZzsKLQkJZHByaW50aygyLCAiVklESU9DX1NfQVVESU86ICVkXG4iLCBhLT5pbmRleCk7Ci0JCWJyZWFrOworCW1zcF93cml0ZXJlZyhhdjcxMTAsIE1TUF9XUl9EU1AsIDB4MDAwZSwgZm1fbWF0cml4KTsKKwltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMDgsIHNyYyk7CisJbXNwX3dyaXRlcmVnKGF2NzExMCwgTVNQX1dSX0RTUCwgMHgwMDA5LCBzcmMpOworCW1zcF93cml0ZXJlZyhhdjcxMTAsIE1TUF9XUl9EU1AsIDB4MDAwYSwgc3JjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IGF2NzExMCAqYXY3MTEwID0gKHN0cnVjdCBhdjcxMTAgKilkZXYtPmV4dF9wcml2OworCisJZHByaW50aygyLCAiVklESU9DX0dfRlJFUTogZnJlcToweCUwOHguXG4iLCBmLT5mcmVxdWVuY3kpOworCisJaWYgKCFhdjcxMTAtPmFuYWxvZ190dW5lcl9mbGFncyB8fCBhdjcxMTAtPmN1cnJlbnRfaW5wdXQgIT0gMSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1zZXQoZiwgMCwgc2l6ZW9mKCpmKSk7CisJZi0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOworCWYtPmZyZXF1ZW5jeSA9CWF2NzExMC0+Y3VycmVudF9mcmVxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCAqKWRldi0+ZXh0X3ByaXY7CisKKwlkcHJpbnRrKDIsICJWSURJT0NfU19GUkVRVUVOQ1k6IGZyZXE6MHglMDh4LlxuIiwgZi0+ZnJlcXVlbmN5KTsKKworCWlmICghYXY3MTEwLT5hbmFsb2dfdHVuZXJfZmxhZ3MgfHwgYXY3MTEwLT5jdXJyZW50X2lucHV0ICE9IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKFY0TDJfVFVORVJfQU5BTE9HX1RWICE9IGYtPnR5cGUpCisJCXJldHVybiAtRUlOVkFMOworCisJbXNwX3dyaXRlcmVnKGF2NzExMCwgTVNQX1dSX0RTUCwgMHgwMDAwLCAweGZmZTApOyAvKiBmYXN0IG11dGUgKi8KKwltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMDcsIDB4ZmZlMCk7CisKKwkvKiB0dW5lIGluIGRlc2lyZWQgZnJlcXVlbmN5ICovCisJaWYgKGF2NzExMC0+YW5hbG9nX3R1bmVyX2ZsYWdzICYgQU5BTE9HX1RVTkVSX1ZFUzE4MjApCisJCXZlczE4MjBfc2V0X3R2X2ZyZXEoZGV2LCBmLT5mcmVxdWVuY3kpOworCWVsc2UgaWYgKGF2NzExMC0+YW5hbG9nX3R1bmVyX2ZsYWdzICYgQU5BTE9HX1RVTkVSX1NUVjAyOTcpCisJCXN0djAyOTdfc2V0X3R2X2ZyZXEoZGV2LCBmLT5mcmVxdWVuY3kpOworCWF2NzExMC0+Y3VycmVudF9mcmVxID0gZi0+ZnJlcXVlbmN5OworCisJbXNwX3dyaXRlcmVnKGF2NzExMCwgTVNQX1dSX0RTUCwgMHgwMDE1LCAweDAwM2YpOyAvKiBzdGFydCBzdGVyZW8gZGV0ZWN0aW9uICovCisJbXNwX3dyaXRlcmVnKGF2NzExMCwgTVNQX1dSX0RTUCwgMHgwMDE1LCAweDAwMDApOworCW1zcF93cml0ZXJlZyhhdjcxMTAsIE1TUF9XUl9EU1AsIDB4MDAwMCwgMHg0ZjAwKTsgLyogbG91ZHNwZWFrZXIgKyBoZWFkcGhvbmUgKi8KKwltc3Bfd3JpdGVyZWcoYXY3MTEwLCBNU1BfV1JfRFNQLCAweDAwMDcsIDB4NGYwMCk7IC8qIFNDQVJUIDEgdm9sdW1lICovCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9pbnB1dCAqaSkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCAqKWRldi0+ZXh0X3ByaXY7CisKKwlkcHJpbnRrKDIsICJWSURJT0NfRU5VTUlOUFVUOiAlZFxuIiwgaS0+aW5kZXgpOworCisJaWYgKGF2NzExMC0+YW5hbG9nX3R1bmVyX2ZsYWdzKSB7CisJCWlmIChpLT5pbmRleCA8IDAgfHwgaS0+aW5kZXggPj0gNCkKKwkJCXJldHVybiAtRUlOVkFMOworCX0gZWxzZSB7CisJCWlmIChpLT5pbmRleCAhPSAwKQorCQkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWNhc2UgVklESU9DX0dfU0xJQ0VEX1ZCSV9DQVA6Ci0JewotCQlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2NhcCAqY2FwID0gYXJnOwotCQlkcHJpbnRrKDIsICJWSURJT0NfR19TTElDRURfVkJJX0NBUFxuIik7Ci0JCW1lbXNldChjYXAsIDAsIHNpemVvZiAqY2FwKTsKLQkJaWYgKEZXX1ZFUlNJT04oYXY3MTEwLT5hcm1fYXBwKSA+PSAweDI2MjMpIHsKLQkJCWNhcC0+c2VydmljZV9zZXQgPSBWNEwyX1NMSUNFRF9XU1NfNjI1OwotCQkJY2FwLT5zZXJ2aWNlX2xpbmVzWzBdWzIzXSA9IFY0TDJfU0xJQ0VEX1dTU182MjU7Ci0JCX0KLQkJYnJlYWs7CisKKwltZW1jcHkoaSwgJmlucHV0c1tpLT5pbmRleF0sIHNpemVvZihzdHJ1Y3QgdjRsMl9pbnB1dCkpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgKmlucHV0KQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwICopZGV2LT5leHRfcHJpdjsKKworCSppbnB1dCA9IGF2NzExMC0+Y3VycmVudF9pbnB1dDsKKwlkcHJpbnRrKDIsICJWSURJT0NfR19JTlBVVDogJWRcbiIsICppbnB1dCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgaW5wdXQpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IGF2NzExMCAqYXY3MTEwID0gKHN0cnVjdCBhdjcxMTAgKilkZXYtPmV4dF9wcml2OworCisJZHByaW50aygyLCAiVklESU9DX1NfSU5QVVQ6ICVkXG4iLCBpbnB1dCk7CisKKwlpZiAoIWF2NzExMC0+YW5hbG9nX3R1bmVyX2ZsYWdzKQorCQlyZXR1cm4gMDsKKworCWlmIChpbnB1dCA8IDAgfHwgaW5wdXQgPj0gNCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlhdjcxMTAtPmN1cnJlbnRfaW5wdXQgPSBpbnB1dDsKKwlyZXR1cm4gYXY3MTEwX2R2Yl9jX3N3aXRjaChmaCk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlkcHJpbnRrKDIsICJWSURJT0NfR19BVURJTzogJWRcbiIsIGEtPmluZGV4KTsKKwlpZiAoYS0+aW5kZXggIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJbWVtY3B5KGEsICZtc3AzNDAwX3Y0bDJfYXVkaW8sIHNpemVvZihzdHJ1Y3QgdjRsMl9hdWRpbykpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJZHByaW50aygyLCAiVklESU9DX1NfQVVESU86ICVkXG4iLCBhLT5pbmRleCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfc2xpY2VkX3ZiaV9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCQlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2NhcCAqY2FwKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBhdjcxMTAgKmF2NzExMCA9IChzdHJ1Y3QgYXY3MTEwICopZGV2LT5leHRfcHJpdjsKKworCWRwcmludGsoMiwgIlZJRElPQ19HX1NMSUNFRF9WQklfQ0FQXG4iKTsKKwlpZiAoY2FwLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9PVVRQVVQpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChGV19WRVJTSU9OKGF2NzExMC0+YXJtX2FwcCkgPj0gMHgyNjIzKSB7CisJCWNhcC0+c2VydmljZV9zZXQgPSBWNEwyX1NMSUNFRF9XU1NfNjI1OworCQljYXAtPnNlcnZpY2VfbGluZXNbMF1bMjNdID0gVjRMMl9TTElDRURfV1NTXzYyNTsKIAl9Ci0JY2FzZSBWSURJT0NfR19GTVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYgPSBhcmc7Ci0JCWRwcmludGsoMiwgIlZJRElPQ19HX0ZNVDpcbiIpOwotCQlpZiAoZi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfT1VUUFVUIHx8Ci0JCSAgICBGV19WRVJTSU9OKGF2NzExMC0+YXJtX2FwcCkgPCAweDI2MjMpCi0JCQlyZXR1cm4gLUVBR0FJTjsgLyogaGFuZGxlZCBieSBjb3JlIGRyaXZlciAqLwotCQltZW1zZXQoJmYtPmZtdC5zbGljZWQsIDAsIHNpemVvZiBmLT5mbXQuc2xpY2VkKTsKLQkJaWYgKGF2NzExMC0+d3NzTW9kZSkgewotCQkJZi0+Zm10LnNsaWNlZC5zZXJ2aWNlX3NldCA9IFY0TDJfU0xJQ0VEX1dTU182MjU7Ci0JCQlmLT5mbXQuc2xpY2VkLnNlcnZpY2VfbGluZXNbMF1bMjNdID0gVjRMMl9TTElDRURfV1NTXzYyNTsKLQkJCWYtPmZtdC5zbGljZWQuaW9fc2l6ZSA9IHNpemVvZiAoc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhKTsKLQkJfQotCQlicmVhazsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19mbXRfc2xpY2VkX3ZiaV9vdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAorCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IGF2NzExMCAqYXY3MTEwID0gKHN0cnVjdCBhdjcxMTAgKilkZXYtPmV4dF9wcml2OworCisJZHByaW50aygyLCAiVklESU9DX0dfRk1UOlxuIik7CisJaWYgKEZXX1ZFUlNJT04oYXY3MTEwLT5hcm1fYXBwKSA8IDB4MjYyMykKKwkJcmV0dXJuIC1FSU5WQUw7CisJbWVtc2V0KCZmLT5mbXQuc2xpY2VkLCAwLCBzaXplb2YgZi0+Zm10LnNsaWNlZCk7CisJaWYgKGF2NzExMC0+d3NzTW9kZSkgeworCQlmLT5mbXQuc2xpY2VkLnNlcnZpY2Vfc2V0ID0gVjRMMl9TTElDRURfV1NTXzYyNTsKKwkJZi0+Zm10LnNsaWNlZC5zZXJ2aWNlX2xpbmVzWzBdWzIzXSA9IFY0TDJfU0xJQ0VEX1dTU182MjU7CisJCWYtPmZtdC5zbGljZWQuaW9fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEpOwogCX0KLQljYXNlIFZJRElPQ19TX0ZNVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZiA9IGFyZzsKLQkJZHByaW50aygyLCAiVklESU9DX1NfRk1UXG4iKTsKLQkJaWYgKGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX09VVFBVVCB8fAotCQkgICAgRldfVkVSU0lPTihhdjcxMTAtPmFybV9hcHApIDwgMHgyNjIzKQotCQkJcmV0dXJuIC1FQUdBSU47IC8qIGhhbmRsZWQgYnkgY29yZSBkcml2ZXIgKi8KLQkJaWYgKGYtPmZtdC5zbGljZWQuc2VydmljZV9zZXQgIT0gVjRMMl9TTElDRURfV1NTXzYyNSAmJgotCQkgICAgZi0+Zm10LnNsaWNlZC5zZXJ2aWNlX2xpbmVzWzBdWzIzXSAhPSBWNEwyX1NMSUNFRF9XU1NfNjI1KSB7Ci0JCQltZW1zZXQoJmYtPmZtdC5zbGljZWQsIDAsIHNpemVvZiBmLT5mbXQuc2xpY2VkKTsKLQkJCS8qIFdTUyBjb250cm9sbGVkIGJ5IGZpcm13YXJlICovCi0JCQlhdjcxMTAtPndzc01vZGUgPSAwOwotCQkJYXY3MTEwLT53c3NEYXRhID0gMDsKLQkJCXJldHVybiBhdjcxMTBfZndfY21kKGF2NzExMCwgQ09NVFlQRV9FTkNPREVSLAotCQkJCQkgICAgIFNldFdTU0NvbmZpZywgMSwgMCk7Ci0JCX0gZWxzZSB7Ci0JCQltZW1zZXQoJmYtPmZtdC5zbGljZWQsIDAsIHNpemVvZiBmLT5mbXQuc2xpY2VkKTsKLQkJCWYtPmZtdC5zbGljZWQuc2VydmljZV9zZXQgPSBWNEwyX1NMSUNFRF9XU1NfNjI1OwotCQkJZi0+Zm10LnNsaWNlZC5zZXJ2aWNlX2xpbmVzWzBdWzIzXSA9IFY0TDJfU0xJQ0VEX1dTU182MjU7Ci0JCQlmLT5mbXQuc2xpY2VkLmlvX3NpemUgPSBzaXplb2YgKHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSk7Ci0JCQkvKiBXU1MgY29udHJvbGxlZCBieSB1c2Vyc3BhY2UgKi8KLQkJCWF2NzExMC0+d3NzTW9kZSA9IDE7Ci0JCQlhdjcxMTAtPndzc0RhdGEgPSAwOwotCQl9Ci0JCWJyZWFrOwotCX0KLQlkZWZhdWx0OgotCQlwcmludGsoIm5vIHN1Y2ggaW9jdGxcbiIpOwotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2ZtdF9zbGljZWRfdmJpX291dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgYXY3MTEwICphdjcxMTAgPSAoc3RydWN0IGF2NzExMCAqKWRldi0+ZXh0X3ByaXY7CisKKwlkcHJpbnRrKDIsICJWSURJT0NfU19GTVRcbiIpOworCWlmIChGV19WRVJTSU9OKGF2NzExMC0+YXJtX2FwcCkgPCAweDI2MjMpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChmLT5mbXQuc2xpY2VkLnNlcnZpY2Vfc2V0ICE9IFY0TDJfU0xJQ0VEX1dTU182MjUgJiYKKwkgICAgZi0+Zm10LnNsaWNlZC5zZXJ2aWNlX2xpbmVzWzBdWzIzXSAhPSBWNEwyX1NMSUNFRF9XU1NfNjI1KSB7CisJCW1lbXNldCgmZi0+Zm10LnNsaWNlZCwgMCwgc2l6ZW9mKGYtPmZtdC5zbGljZWQpKTsKKwkJLyogV1NTIGNvbnRyb2xsZWQgYnkgZmlybXdhcmUgKi8KKwkJYXY3MTEwLT53c3NNb2RlID0gMDsKKwkJYXY3MTEwLT53c3NEYXRhID0gMDsKKwkJcmV0dXJuIGF2NzExMF9md19jbWQoYXY3MTEwLCBDT01UWVBFX0VOQ09ERVIsCisJCQkJICAgICBTZXRXU1NDb25maWcsIDEsIDApOworCX0gZWxzZSB7CisJCW1lbXNldCgmZi0+Zm10LnNsaWNlZCwgMCwgc2l6ZW9mKGYtPmZtdC5zbGljZWQpKTsKKwkJZi0+Zm10LnNsaWNlZC5zZXJ2aWNlX3NldCA9IFY0TDJfU0xJQ0VEX1dTU182MjU7CisJCWYtPmZtdC5zbGljZWQuc2VydmljZV9saW5lc1swXVsyM10gPSBWNEwyX1NMSUNFRF9XU1NfNjI1OworCQlmLT5mbXQuc2xpY2VkLmlvX3NpemUgPSBzaXplb2Yoc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhKTsKKwkJLyogV1NTIGNvbnRyb2xsZWQgYnkgdXNlcnNwYWNlICovCisJCWF2NzExMC0+d3NzTW9kZSA9IDE7CisJCWF2NzExMC0+d3NzRGF0YSA9IDA7CiAJfQogCXJldHVybiAwOwogfQpAQCAtNjA5LDIyICs2MTcsNiBAQAogICogSU5JVElBTElaQVRJT04KICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCi1zdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uX2lvY3RscyBpb2N0bHNbXSA9IHsKLQl7IFZJRElPQ19FTlVNSU5QVVQsCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfR19JTlBVVCwJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19TX0lOUFVULAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX0dfRlJFUVVFTkNZLAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX1NfRlJFUVVFTkNZLAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX0dfVFVORVIsCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfU19UVU5FUiwJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19HX0FVRElPLAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX1NfQVVESU8sCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfR19TTElDRURfVkJJX0NBUCwgU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19HX0ZNVCwJCVNBQTcxNDZfQkVGT1JFIH0sCi0JeyBWSURJT0NfU19GTVQsCQlTQUE3MTQ2X0JFRk9SRSB9LAotCXsgMCwgMCB9Ci19OwotCiBzdGF0aWMgdTggc2FhNzExM19pbml0X3JlZ3NbXSA9IHsKIAkweDAyLCAweGQwLAogCTB4MDMsIDB4MjMsCkBAIC03ODgsMjAgKzc4MCwzNCBAQAogaW50IGF2NzExMF9pbml0X3Y0bChzdHJ1Y3QgYXY3MTEwICphdjcxMTApCiB7CiAJc3RydWN0IHNhYTcxNDZfZGV2KiBkZXYgPSBhdjcxMTAtPmRldjsKKwlzdHJ1Y3Qgc2FhNzE0Nl9leHRfdnYgKnZ2X2RhdGE7CiAJaW50IHJldDsKIAogCS8qIHNwZWNpYWwgY2FzZSBEVkItQzogdGhlc2UgY2FyZHMgaGF2ZSBhbiBhbmFsb2cgdHVuZXIKIAkgICBwbHVzIG5lZWQgc29tZSBzcGVjaWFsIGhhbmRsaW5nLCBzbyB3ZSBoYXZlIHNlcGFyYXRlCiAJICAgc2FhNzE0Nl9leHRfdnYgZGF0YSBmb3IgdGhlc2UuLi4gKi8KIAlpZiAoYXY3MTEwLT5hbmFsb2dfdHVuZXJfZmxhZ3MpCi0JCXJldCA9IHNhYTcxNDZfdnZfaW5pdChkZXYsICZhdjcxMTBfdnZfZGF0YV9jKTsKKwkJdnZfZGF0YSA9ICZhdjcxMTBfdnZfZGF0YV9jOwogCWVsc2UKLQkJcmV0ID0gc2FhNzE0Nl92dl9pbml0KGRldiwgJmF2NzExMF92dl9kYXRhX3N0KTsKKwkJdnZfZGF0YSA9ICZhdjcxMTBfdnZfZGF0YV9zdDsKKwlyZXQgPSBzYWE3MTQ2X3Z2X2luaXQoZGV2LCB2dl9kYXRhKTsKIAogCWlmIChyZXQpIHsKIAkJRVJSKCgiY2Fubm90IGluaXQgY2FwdHVyZSBkZXZpY2UuIHNraXBwaW5nLlxuIikpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CisJdnZfZGF0YS0+b3BzLnZpZGlvY19lbnVtX2lucHV0ID0gdmlkaW9jX2VudW1faW5wdXQ7CisJdnZfZGF0YS0+b3BzLnZpZGlvY19nX2lucHV0ID0gdmlkaW9jX2dfaW5wdXQ7CisJdnZfZGF0YS0+b3BzLnZpZGlvY19zX2lucHV0ID0gdmlkaW9jX3NfaW5wdXQ7CisJdnZfZGF0YS0+b3BzLnZpZGlvY19nX3R1bmVyID0gdmlkaW9jX2dfdHVuZXI7CisJdnZfZGF0YS0+b3BzLnZpZGlvY19zX3R1bmVyID0gdmlkaW9jX3NfdHVuZXI7CisJdnZfZGF0YS0+b3BzLnZpZGlvY19nX2ZyZXF1ZW5jeSA9IHZpZGlvY19nX2ZyZXF1ZW5jeTsKKwl2dl9kYXRhLT5vcHMudmlkaW9jX3NfZnJlcXVlbmN5ID0gdmlkaW9jX3NfZnJlcXVlbmN5OworCXZ2X2RhdGEtPm9wcy52aWRpb2NfZ19hdWRpbyA9IHZpZGlvY19nX2F1ZGlvOworCXZ2X2RhdGEtPm9wcy52aWRpb2Nfc19hdWRpbyA9IHZpZGlvY19zX2F1ZGlvOworCXZ2X2RhdGEtPm9wcy52aWRpb2NfZ19zbGljZWRfdmJpX2NhcCA9IHZpZGlvY19nX3NsaWNlZF92YmlfY2FwOworCXZ2X2RhdGEtPm9wcy52aWRpb2NfZ19mbXRfc2xpY2VkX3ZiaV9vdXQgPSB2aWRpb2NfZ19mbXRfc2xpY2VkX3ZiaV9vdXQ7CisJdnZfZGF0YS0+b3BzLnZpZGlvY19zX2ZtdF9zbGljZWRfdmJpX291dCA9IHZpZGlvY19zX2ZtdF9zbGljZWRfdmJpX291dDsKIAogCWlmIChzYWE3MTQ2X3JlZ2lzdGVyX2RldmljZSgmYXY3MTEwLT52NGxfZGV2LCBkZXYsICJhdjcxMTAiLCBWRkxfVFlQRV9HUkFCQkVSKSkgewogCQlFUlIoKCJjYW5ub3QgcmVnaXN0ZXIgY2FwdHVyZSBkZXZpY2UuIHNraXBwaW5nLlxuIikpOwpAQCAtOTAwLDkgKzkwNiw2IEBACiAJLm51bV9zdGRzCT0gQVJSQVlfU0laRShzdGFuZGFyZCksCiAJLnN0ZF9jYWxsYmFjawk9ICZzdGRfY2FsbGJhY2ssCiAKLQkuaW9jdGxzCQk9ICZpb2N0bHNbMF0sCi0JLmlvY3RsCQk9IGF2NzExMF9pb2N0bCwKLQogCS52YmlfZm9wcy5vcGVuCT0gYXY3MTEwX3ZiaV9yZXNldCwKIAkudmJpX2ZvcHMucmVsZWFzZSA9IGF2NzExMF92YmlfcmVzZXQsCiAJLnZiaV9mb3BzLndyaXRlCT0gYXY3MTEwX3ZiaV93cml0ZSwKQEAgLTkxOCw5ICs5MjEsNiBAQAogCS5udW1fc3Rkcwk9IEFSUkFZX1NJWkUoc3RhbmRhcmQpLAogCS5zdGRfY2FsbGJhY2sJPSAmc3RkX2NhbGxiYWNrLAogCi0JLmlvY3RscwkJPSAmaW9jdGxzWzBdLAotCS5pb2N0bAkJPSBhdjcxMTBfaW9jdGwsCi0KIAkudmJpX2ZvcHMub3Blbgk9IGF2NzExMF92YmlfcmVzZXQsCiAJLnZiaV9mb3BzLnJlbGVhc2UgPSBhdjcxMTBfdmJpX3Jlc2V0LAogCS52YmlfZm9wcy53cml0ZQk9IGF2NzExMF92Ymlfd3JpdGUsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtYXYuYyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jCmluZGV4IDQxODIxMjEuLjg1NWZlNzQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvZHZiL3R0cGNpL2J1ZGdldC1hdi5jCkBAIC0xNDA0LDYgKzE0MDQsNDEgQEAKIAlyZXR1cm4gZXJyOwogfQogCisjZGVmaW5lIEtOQzFfSU5QVVRTIDIKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pbnB1dCBrbmMxX2lucHV0c1tLTkMxX0lOUFVUU10gPSB7CisJezAsICJDb21wb3NpdGUiLCBWNEwyX0lOUFVUX1RZUEVfVFVORVIsIDEsIDAsIFY0TDJfU1REX1BBTF9CRyB8IFY0TDJfU1REX05UU0NfTSwgMH0sCisJezEsICJTLVZpZGVvIiwgVjRMMl9JTlBVVF9UWVBFX0NBTUVSQSwgMiwgMCwgVjRMMl9TVERfUEFMX0JHIHwgVjRMMl9TVERfTlRTQ19NLCAwfSwKK307CisKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9pbnB1dCAqaSkKK3sKKwlkcHJpbnRrKDEsICJWSURJT0NfRU5VTUlOUFVUICVkLlxuIiwgaS0+aW5kZXgpOworCWlmIChpLT5pbmRleCA8IDAgfHwgaS0+aW5kZXggPj0gS05DMV9JTlBVVFMpCisJCXJldHVybiAtRUlOVkFMOworCW1lbWNweShpLCAma25jMV9pbnB1dHNbaS0+aW5kZXhdLCBzaXplb2Yoc3RydWN0IHY0bDJfaW5wdXQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHVuc2lnbmVkIGludCAqaSkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgYnVkZ2V0X2F2ICpidWRnZXRfYXYgPSAoc3RydWN0IGJ1ZGdldF9hdiAqKWRldi0+ZXh0X3ByaXY7CisKKwkqaSA9IGJ1ZGdldF9hdi0+Y3VyX2lucHV0OworCisJZHByaW50aygxLCAiVklESU9DX0dfSU5QVVQgJWQuXG4iLCAqaSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgaW5wdXQpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IGJ1ZGdldF9hdiAqYnVkZ2V0X2F2ID0gKHN0cnVjdCBidWRnZXRfYXYgKilkZXYtPmV4dF9wcml2OworCisJZHByaW50aygxLCAiVklESU9DX1NfSU5QVVQgJWQuXG4iLCBpbnB1dCk7CisJcmV0dXJuIHNhYTcxMTNfc2V0aW5wdXQoYnVkZ2V0X2F2LCBpbnB1dCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRfdnYgdnZfZGF0YTsKIAogc3RhdGljIGludCBidWRnZXRfYXZfYXR0YWNoKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LCBzdHJ1Y3Qgc2FhNzE0Nl9wY2lfZXh0ZW5zaW9uX2RhdGEgKmluZm8pCkBAIC0xNDQyLDYgKzE0NzcsOSBAQAogCQkJRVJSKCgiY2Fubm90IGluaXQgdnYgc3Vic3lzdGVtLlxuIikpOwogCQkJcmV0dXJuIGVycjsKIAkJfQorCQl2dl9kYXRhLm9wcy52aWRpb2NfZW51bV9pbnB1dCA9IHZpZGlvY19lbnVtX2lucHV0OworCQl2dl9kYXRhLm9wcy52aWRpb2NfZ19pbnB1dCA9IHZpZGlvY19nX2lucHV0OworCQl2dl9kYXRhLm9wcy52aWRpb2Nfc19pbnB1dCA9IHZpZGlvY19zX2lucHV0OwogCiAJCWlmICgoZXJyID0gc2FhNzE0Nl9yZWdpc3Rlcl9kZXZpY2UoJmJ1ZGdldF9hdi0+dmQsIGRldiwgImtuYzEiLCBWRkxfVFlQRV9HUkFCQkVSKSkpIHsKIAkJCS8qIGZpeG1lOiBwcm9wZXIgY2xlYW51cCBoZXJlICovCkBAIC0xNDgwLDU0ICsxNTE4LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotI2RlZmluZSBLTkMxX0lOUFVUUyAyCi1zdGF0aWMgc3RydWN0IHY0bDJfaW5wdXQga25jMV9pbnB1dHNbS05DMV9JTlBVVFNdID0gewotCXswLCAiQ29tcG9zaXRlIiwgVjRMMl9JTlBVVF9UWVBFX1RVTkVSLCAxLCAwLCBWNEwyX1NURF9QQUxfQkcgfCBWNEwyX1NURF9OVFNDX00sIDB9LAotCXsxLCAiUy1WaWRlbyIsIFY0TDJfSU5QVVRfVFlQRV9DQU1FUkEsIDIsIDAsIFY0TDJfU1REX1BBTF9CRyB8IFY0TDJfU1REX05UU0NfTSwgMH0sCi19OwotCi1zdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uX2lvY3RscyBpb2N0bHNbXSA9IHsKLQl7VklESU9DX0VOVU1JTlBVVCwgU0FBNzE0Nl9FWENMVVNJVkV9LAotCXtWSURJT0NfR19JTlBVVCwgU0FBNzE0Nl9FWENMVVNJVkV9LAotCXtWSURJT0NfU19JTlBVVCwgU0FBNzE0Nl9FWENMVVNJVkV9LAotCXswLCAwfQotfTsKLQotc3RhdGljIGxvbmcgYXZfaW9jdGwoc3RydWN0IHNhYTcxNDZfZmggKmZoLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSBmaC0+ZGV2OwotCXN0cnVjdCBidWRnZXRfYXYgKmJ1ZGdldF9hdiA9IChzdHJ1Y3QgYnVkZ2V0X2F2ICopIGRldi0+ZXh0X3ByaXY7Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX0VOVU1JTlBVVDp7Ci0JCXN0cnVjdCB2NGwyX2lucHV0ICppID0gYXJnOwotCi0JCWRwcmludGsoMSwgIlZJRElPQ19FTlVNSU5QVVQgJWQuXG4iLCBpLT5pbmRleCk7Ci0JCWlmIChpLT5pbmRleCA8IDAgfHwgaS0+aW5kZXggPj0gS05DMV9JTlBVVFMpIHsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCW1lbWNweShpLCAma25jMV9pbnB1dHNbaS0+aW5kZXhdLCBzaXplb2Yoc3RydWN0IHY0bDJfaW5wdXQpKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX0dfSU5QVVQ6ewotCQlpbnQgKmlucHV0ID0gKGludCAqKSBhcmc7Ci0KLQkJKmlucHV0ID0gYnVkZ2V0X2F2LT5jdXJfaW5wdXQ7Ci0KLQkJZHByaW50aygxLCAiVklESU9DX0dfSU5QVVQgJWQuXG4iLCAqaW5wdXQpOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfU19JTlBVVDp7Ci0JCWludCBpbnB1dCA9ICooaW50ICopIGFyZzsKLQkJZHByaW50aygxLCAiVklESU9DX1NfSU5QVVQgJWQuXG4iLCBpbnB1dCk7Ci0JCXJldHVybiBzYWE3MTEzX3NldGlucHV0KGJ1ZGdldF9hdiwgaW5wdXQpOwotCX0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCX0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIHN0cnVjdCBzYWE3MTQ2X3N0YW5kYXJkIHN0YW5kYXJkW10gPSB7CiAJey5uYW1lID0gIlBBTCIsLmlkID0gVjRMMl9TVERfUEFMLAogCSAudl9vZmZzZXQgPSAweDE3LC52X2ZpZWxkID0gMjg4LApAQCAtMTU0Niw4ICsxNTM2LDYgQEAKIAkuZmxhZ3MgPSAwLAogCS5zdGRzID0gJnN0YW5kYXJkWzBdLAogCS5udW1fc3RkcyA9IEFSUkFZX1NJWkUoc3RhbmRhcmQpLAotCS5pb2N0bHMgPSAmaW9jdGxzWzBdLAotCS5pb2N0bCA9IGF2X2lvY3RsLAogfTsKIAogc3RhdGljIHN0cnVjdCBzYWE3MTQ2X2V4dGVuc2lvbiBidWRnZXRfZXh0ZW5zaW9uOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9kdmIvdHRwY2kvYnVkZ2V0LWNpLmMgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYwppbmRleCBiY2JjNWQ0Li4zNzFhNzE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYworKysgYi9kcml2ZXJzL21lZGlhL2R2Yi90dHBjaS9idWRnZXQtY2kuYwpAQCAtMTA3Niw2ICsxMDc2LDEwIEBACiAJLmRlbHRhZiA9IDB4YTUxMSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdGRhODI3eF9jb25maWcgdGRhODI3eF9jb25maWcgPSB7CisJLmNvbmZpZyA9IDAsCit9OworCiAvKiBUVCBTMi0zMjAwIERWQi1TIChTVEIwODk5KSBJbml0dGFiICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHN0YjA4OTlfczFfcmVnIHR0MzIwMF9zdGIwODk5X3MxX2luaXRfMVtdID0gewogCkBAIC0xNDE0LDcgKzE0MTgsNyBAQAogCWNhc2UgMHgxMDFhOiAvKiBUVCBCdWRnZXQtQy0xNTAxIChwaGlsaXBzIHRkYTEwMDIzL3BoaWxpcHMgdGRhODI3NEEpICovCiAJCWJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZCA9IGR2Yl9hdHRhY2godGRhMTAwMjNfYXR0YWNoLCAmdGRhMTAwMjNfY29uZmlnLCAmYnVkZ2V0X2NpLT5idWRnZXQuaTJjX2FkYXAsIDB4NDgpOwogCQlpZiAoYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kKSB7Ci0JCQlpZiAoZHZiX2F0dGFjaCh0ZGE4Mjd4X2F0dGFjaCwgYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kLCAweDYxLCAmYnVkZ2V0X2NpLT5idWRnZXQuaTJjX2FkYXAsIE5VTEwpID09IE5VTEwpIHsKKwkJCWlmIChkdmJfYXR0YWNoKHRkYTgyN3hfYXR0YWNoLCBidWRnZXRfY2ktPmJ1ZGdldC5kdmJfZnJvbnRlbmQsIDB4NjEsICZidWRnZXRfY2ktPmJ1ZGdldC5pMmNfYWRhcCwgJnRkYTgyN3hfY29uZmlnKSA9PSBOVUxMKSB7CiAJCQkJcHJpbnRrKEtFUk5fRVJSICIlczogTm8gdGRhODI3eCBmb3VuZCFcbiIsIF9fZnVuY19fKTsKIAkJCQlkdmJfZnJvbnRlbmRfZGV0YWNoKGJ1ZGdldF9jaS0+YnVkZ2V0LmR2Yl9mcm9udGVuZCk7CiAJCQkJYnVkZ2V0X2NpLT5idWRnZXQuZHZiX2Zyb250ZW5kID0gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vZHNicjEwMC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9kc2JyMTAwLmMKaW5kZXggMjAxNGViYy4uY2M1NGVkNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9kc2JyMTAwLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9kc2JyMTAwLmMKQEAgLTM5MCw5ICszOTAsMTEgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2KQogeworCXN0cnVjdCBkc2JyMTAwX2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCiAJc3RybGNweSh2LT5kcml2ZXIsICJkc2JyMTAwIiwgc2l6ZW9mKHYtPmRyaXZlcikpOwogCXN0cmxjcHkodi0+Y2FyZCwgIkQtTGluayBSLTEwMCBVU0IgRk0gUmFkaW8iLCBzaXplb2Yodi0+Y2FyZCkpOwotCXNwcmludGYodi0+YnVzX2luZm8sICJVU0IiKTsKKwl1c2JfbWFrZV9wYXRoKHJhZGlvLT51c2JkZXYsIHYtPmJ1c19pbmZvLCBzaXplb2Yodi0+YnVzX2luZm8pKTsKIAl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKIAl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKIAlyZXR1cm4gMDsKQEAgLTQ1MCw3ICs0NTIsMTAgQEAKIAlpZiAocmFkaW8tPnJlbW92ZWQpCiAJCXJldHVybiAtRUlPOwogCisJbXV0ZXhfbG9jaygmcmFkaW8tPmxvY2spOwogCXJhZGlvLT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OworCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOworCiAJcmV0dmFsID0gZHNicjEwMF9zZXRmcmVxKHJhZGlvLCByYWRpby0+Y3VyZnJlcSk7CiAJaWYgKHJldHZhbCA8IDApCiAJCWRldl93YXJuKCZyYWRpby0+dXNiZGV2LT5kZXYsICJTZXQgZnJlcXVlbmN5IGZhaWxlZFxuIik7CkBAIC02MDEsNyArNjA2LDEwIEBACiAJaWYgKCFyYWRpbykKIAkJcmV0dXJuIC1FTk9ERVY7CiAKKwltdXRleF9sb2NrKCZyYWRpby0+bG9jayk7CiAJcmFkaW8tPnVzZXJzID0gMDsKKwltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKKwogCWlmICghcmFkaW8tPnJlbW92ZWQpIHsKIAkJcmV0dmFsID0gZHNicjEwMF9zdG9wKHJhZGlvKTsKIAkJaWYgKHJldHZhbCA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYWltc2xhYi5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1haW1zbGFiLmMKaW5kZXggYmZhMTNiOC4uYWM4MmUzMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1haW1zbGFiLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1haW1zbGFiLmMKQEAgLTMyLDE0ICszMiwxNSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4JCS8qIEluaXRkYXRhCQkJKi8KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogcmVxdWVzdF9yZWdpb24JCSovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogdWRlbGF5CQkJKi8KLSNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG91dGIsIG91dGJfcAkJCSovCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4JLyogY29weSB0by9mcm9tIHVzZXIJCSovCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzCQkqLwotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgkvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8JKi8KKyNpbmNsdWRlIDxsaW51eC9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4JLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPCSovCi0jZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwwLDIpCitNT0RVTEVfQVVUSE9SKCJNLktpcmt3b29kIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgUmFkaW9UcmFjay9SYWRpb1JldmVhbCByYWRpbyBjYXJkLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAjaWZuZGVmIENPTkZJR19SQURJT19SVFJBQ0tfUE9SVAogI2RlZmluZSBDT05GSUdfUkFESU9fUlRSQUNLX1BPUlQgLTEKQEAgLTQ3LDg2ICs0OCw5NSBAQAogCiBzdGF0aWMgaW50IGlvID0gQ09ORklHX1JBRElPX1JUUkFDS19QT1JUOwogc3RhdGljIGludCByYWRpb19uciA9IC0xOwotc3RhdGljIHN0cnVjdCBtdXRleCBsb2NrOwogCi1zdHJ1Y3QgcnRfZGV2aWNlCittb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIFJhZGlvVHJhY2sgY2FyZCAoMHgyMGYgb3IgMHgzMGYpIik7Cittb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7CisKKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAwLCAyKQorCitzdHJ1Y3QgcnRyYWNrCiB7Ci0JdW5zaWduZWQgbG9uZyBpbl91c2U7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmRldjsKIAlpbnQgcG9ydDsKIAlpbnQgY3Vydm9sOwogCXVuc2lnbmVkIGxvbmcgY3VyZnJlcTsKIAlpbnQgbXV0ZWQ7CisJaW50IGlvOworCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIAorc3RhdGljIHN0cnVjdCBydHJhY2sgcnRyYWNrX2NhcmQ7CiAKIC8qIGxvY2FsIHRoaW5ncyAqLwogCiBzdGF0aWMgdm9pZCBzbGVlcF9kZWxheShsb25nIG4pCiB7CiAJLyogU2xlZXAgbmljZWx5IGZvciAnbicgdVMgKi8KLQlpbnQgZD1uL21zZWNzX3RvX2ppZmZpZXMoMTAwMCk7Ci0JaWYoIWQpCisJaW50IGQgPSBuIC8gbXNlY3NfdG9famlmZmllcygxMDAwKTsKKwlpZiAoIWQpCiAJCXVkZWxheShuKTsKIAllbHNlCiAJCW1zbGVlcChqaWZmaWVzX3RvX21zZWNzKGQpKTsKIH0KIAotc3RhdGljIHZvaWQgcnRfZGVjdm9sKHZvaWQpCitzdGF0aWMgdm9pZCBydF9kZWN2b2woc3RydWN0IHJ0cmFjayAqcnQpCiB7Ci0Jb3V0YigweDU4LCBpbyk7CQkvKiB2b2x1bWUgZG93biArIHNpZ3N0ciArIG9uCSovCisJb3V0YigweDU4LCBydC0+aW8pOwkJLyogdm9sdW1lIGRvd24gKyBzaWdzdHIgKyBvbgkqLwogCXNsZWVwX2RlbGF5KDEwMDAwMCk7Ci0Jb3V0YigweGQ4LCBpbyk7CQkvKiB2b2x1bWUgc3RlYWR5ICsgc2lnc3RyICsgb24JKi8KKwlvdXRiKDB4ZDgsIHJ0LT5pbyk7CQkvKiB2b2x1bWUgc3RlYWR5ICsgc2lnc3RyICsgb24JKi8KIH0KIAotc3RhdGljIHZvaWQgcnRfaW5jdm9sKHZvaWQpCitzdGF0aWMgdm9pZCBydF9pbmN2b2woc3RydWN0IHJ0cmFjayAqcnQpCiB7Ci0Jb3V0YigweDk4LCBpbyk7CQkvKiB2b2x1bWUgdXAgKyBzaWdzdHIgKyBvbgkqLworCW91dGIoMHg5OCwgcnQtPmlvKTsJCS8qIHZvbHVtZSB1cCArIHNpZ3N0ciArIG9uCSovCiAJc2xlZXBfZGVsYXkoMTAwMDAwKTsKLQlvdXRiKDB4ZDgsIGlvKTsJCS8qIHZvbHVtZSBzdGVhZHkgKyBzaWdzdHIgKyBvbgkqLworCW91dGIoMHhkOCwgcnQtPmlvKTsJCS8qIHZvbHVtZSBzdGVhZHkgKyBzaWdzdHIgKyBvbgkqLwogfQogCi1zdGF0aWMgdm9pZCBydF9tdXRlKHN0cnVjdCBydF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHJ0X211dGUoc3RydWN0IHJ0cmFjayAqcnQpCiB7Ci0JZGV2LT5tdXRlZCA9IDE7Ci0JbXV0ZXhfbG9jaygmbG9jayk7Ci0Jb3V0YigweGQwLCBpbyk7CQkJLyogdm9sdW1lIHN0ZWFkeSwgb2ZmCQkqLwotCW11dGV4X3VubG9jaygmbG9jayk7CisJcnQtPm11dGVkID0gMTsKKwltdXRleF9sb2NrKCZydC0+bG9jayk7CisJb3V0YigweGQwLCBydC0+aW8pOwkJLyogdm9sdW1lIHN0ZWFkeSwgb2ZmCQkqLworCW11dGV4X3VubG9jaygmcnQtPmxvY2spOwogfQogCi1zdGF0aWMgaW50IHJ0X3NldHZvbChzdHJ1Y3QgcnRfZGV2aWNlICpkZXYsIGludCB2b2wpCitzdGF0aWMgaW50IHJ0X3NldHZvbChzdHJ1Y3QgcnRyYWNrICpydCwgaW50IHZvbCkKIHsKIAlpbnQgaTsKIAotCW11dGV4X2xvY2soJmxvY2spOworCW11dGV4X2xvY2soJnJ0LT5sb2NrKTsKIAotCWlmKHZvbCA9PSBkZXYtPmN1cnZvbCkgewkvKiByZXF1ZXN0ZWQgdm9sdW1lID0gY3VycmVudCAqLwotCQlpZiAoZGV2LT5tdXRlZCkgewkvKiB1c2VyIGlzIHVubXV0aW5nIHRoZSBjYXJkICAqLwotCQkJZGV2LT5tdXRlZCA9IDA7Ci0JCQlvdXRiICgweGQ4LCBpbyk7CS8qIGVuYWJsZSBjYXJkICovCisJaWYgKHZvbCA9PSBydC0+Y3Vydm9sKSB7CS8qIHJlcXVlc3RlZCB2b2x1bWUgPSBjdXJyZW50ICovCisJCWlmIChydC0+bXV0ZWQpIHsJLyogdXNlciBpcyB1bm11dGluZyB0aGUgY2FyZCAgKi8KKwkJCXJ0LT5tdXRlZCA9IDA7CisJCQlvdXRiKDB4ZDgsIHJ0LT5pbyk7CS8qIGVuYWJsZSBjYXJkICovCiAJCX0KLQkJbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwkJbXV0ZXhfdW5sb2NrKCZydC0+bG9jayk7CiAJCXJldHVybiAwOwogCX0KIAotCWlmKHZvbCA9PSAwKSB7CQkJLyogdm9sdW1lID0gMCBtZWFucyBtdXRlIHRoZSBjYXJkICovCi0JCW91dGIoMHg0OCwgaW8pOwkJLyogdm9sdW1lIGRvd24gYnV0IHN0aWxsICJvbiIJKi8KKwlpZiAodm9sID09IDApIHsJCQkvKiB2b2x1bWUgPSAwIG1lYW5zIG11dGUgdGhlIGNhcmQgKi8KKwkJb3V0YigweDQ4LCBydC0+aW8pOwkvKiB2b2x1bWUgZG93biBidXQgc3RpbGwgIm9uIgkqLwogCQlzbGVlcF9kZWxheSgyMDAwMDAwKTsJLyogbWFrZSBzdXJlIGl0J3MgdG90YWxseSBkb3duCSovCi0JCW91dGIoMHhkMCwgaW8pOwkJLyogdm9sdW1lIHN0ZWFkeSwgb2ZmCQkqLwotCQlkZXYtPmN1cnZvbCA9IDA7CS8qIHRyYWNrIHRoZSB2b2x1bWUgc3RhdGUhCSovCi0JCW11dGV4X3VubG9jaygmbG9jayk7CisJCW91dGIoMHhkMCwgcnQtPmlvKTsJLyogdm9sdW1lIHN0ZWFkeSwgb2ZmCQkqLworCQlydC0+Y3Vydm9sID0gMDsJCS8qIHRyYWNrIHRoZSB2b2x1bWUgc3RhdGUhCSovCisJCW11dGV4X3VubG9jaygmcnQtPmxvY2spOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlkZXYtPm11dGVkID0gMDsKLQlpZih2b2wgPiBkZXYtPmN1cnZvbCkKLQkJZm9yKGkgPSBkZXYtPmN1cnZvbDsgaSA8IHZvbDsgaSsrKQotCQkJcnRfaW5jdm9sKCk7CisJcnQtPm11dGVkID0gMDsKKwlpZiAodm9sID4gcnQtPmN1cnZvbCkKKwkJZm9yIChpID0gcnQtPmN1cnZvbDsgaSA8IHZvbDsgaSsrKQorCQkJcnRfaW5jdm9sKHJ0KTsKIAllbHNlCi0JCWZvcihpID0gZGV2LT5jdXJ2b2w7IGkgPiB2b2w7IGktLSkKLQkJCXJ0X2RlY3ZvbCgpOworCQlmb3IgKGkgPSBydC0+Y3Vydm9sOyBpID4gdm9sOyBpLS0pCisJCQlydF9kZWN2b2wocnQpOwogCi0JZGV2LT5jdXJ2b2wgPSB2b2w7Ci0JbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwlydC0+Y3Vydm9sID0gdm9sOworCW11dGV4X3VubG9jaygmcnQtPmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xMzUsMTU1ICsxNDUsMTM3IEBACiAgKiBhbmQgYml0IDQgKCsxNikgaXMgdG8ga2VlcCB0aGUgc2lnbmFsIHN0cmVuZ3RoIG1ldGVyIGVuYWJsZWQKICAqLwogCi1zdGF0aWMgdm9pZCBzZW5kXzBfYnl0ZShpbnQgcG9ydCwgc3RydWN0IHJ0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgc2VuZF8wX2J5dGUoc3RydWN0IHJ0cmFjayAqcnQpCiB7Ci0JaWYgKChkZXYtPmN1cnZvbCA9PSAwKSB8fCAoZGV2LT5tdXRlZCkpIHsKLQkJb3V0Yl9wKDEyOCs2NCsxNisgIDEsIHBvcnQpOyAgIC8qIHdyLWVuYWJsZSArIGRhdGEgbG93ICovCi0JCW91dGJfcCgxMjgrNjQrMTYrMisxLCBwb3J0KTsgICAvKiBjbG9jayAqLworCWlmIChydC0+Y3Vydm9sID09IDAgfHwgcnQtPm11dGVkKSB7CisJCW91dGJfcCgxMjgrNjQrMTYrICAxLCBydC0+aW8pOyAgIC8qIHdyLWVuYWJsZSArIGRhdGEgbG93ICovCisJCW91dGJfcCgxMjgrNjQrMTYrMisxLCBydC0+aW8pOyAgIC8qIGNsb2NrICovCiAJfQogCWVsc2UgewotCQlvdXRiX3AoMTI4KzY0KzE2KzgrICAxLCBwb3J0KTsgIC8qIG9uICsgd3ItZW5hYmxlICsgZGF0YSBsb3cgKi8KLQkJb3V0Yl9wKDEyOCs2NCsxNis4KzIrMSwgcG9ydCk7ICAvKiBjbG9jayAqLworCQlvdXRiX3AoMTI4KzY0KzE2KzgrICAxLCBydC0+aW8pOyAgLyogb24gKyB3ci1lbmFibGUgKyBkYXRhIGxvdyAqLworCQlvdXRiX3AoMTI4KzY0KzE2KzgrMisxLCBydC0+aW8pOyAgLyogY2xvY2sgKi8KIAl9CiAJc2xlZXBfZGVsYXkoMTAwMCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNlbmRfMV9ieXRlKGludCBwb3J0LCBzdHJ1Y3QgcnRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBzZW5kXzFfYnl0ZShzdHJ1Y3QgcnRyYWNrICpydCkKIHsKLQlpZiAoKGRldi0+Y3Vydm9sID09IDApIHx8IChkZXYtPm11dGVkKSkgewotCQlvdXRiX3AoMTI4KzY0KzE2KzQgICsxLCBwb3J0KTsgICAvKiB3ci1lbmFibGUrZGF0YSBoaWdoICovCi0JCW91dGJfcCgxMjgrNjQrMTYrNCsyKzEsIHBvcnQpOyAgIC8qIGNsb2NrICovCisJaWYgKHJ0LT5jdXJ2b2wgPT0gMCB8fCBydC0+bXV0ZWQpIHsKKwkJb3V0Yl9wKDEyOCs2NCsxNis0ICArMSwgcnQtPmlvKTsgICAvKiB3ci1lbmFibGUrZGF0YSBoaWdoICovCisJCW91dGJfcCgxMjgrNjQrMTYrNCsyKzEsIHJ0LT5pbyk7ICAgLyogY2xvY2sgKi8KIAl9CiAJZWxzZSB7Ci0JCW91dGJfcCgxMjgrNjQrMTYrOCs0ICArMSwgcG9ydCk7IC8qIG9uK3dyLWVuYWJsZStkYXRhIGhpZ2ggKi8KLQkJb3V0Yl9wKDEyOCs2NCsxNis4KzQrMisxLCBwb3J0KTsgLyogY2xvY2sgKi8KKwkJb3V0Yl9wKDEyOCs2NCsxNis4KzQgICsxLCBydC0+aW8pOyAvKiBvbit3ci1lbmFibGUrZGF0YSBoaWdoICovCisJCW91dGJfcCgxMjgrNjQrMTYrOCs0KzIrMSwgcnQtPmlvKTsgLyogY2xvY2sgKi8KIAl9CiAKIAlzbGVlcF9kZWxheSgxMDAwKTsKIH0KIAotc3RhdGljIGludCBydF9zZXRmcmVxKHN0cnVjdCBydF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmcmVxKQorc3RhdGljIGludCBydF9zZXRmcmVxKHN0cnVjdCBydHJhY2sgKnJ0LCB1bnNpZ25lZCBsb25nIGZyZXEpCiB7CiAJaW50IGk7CiAKLQkvKiBhZGFwdGVkIGZyb20gcmFkaW8tYXp0ZWNoLmMgKi8KKwltdXRleF9sb2NrKCZydC0+bG9jayk7CQkJLyogU3RvcCBvdGhlciBvcHMgaW50ZXJmZXJpbmcgKi8KKworCXJ0LT5jdXJmcmVxID0gZnJlcTsKIAogCS8qIG5vdyB1c2VzIFZJREVPX1RVTkVSX0xPVyBmb3IgZmluZSB0dW5pbmcgKi8KIAogCWZyZXEgKz0gMTcxMjAwOwkJCS8qIEFkZCAxMC43IE1IeiBJRiAJCSovCiAJZnJlcSAvPSA4MDA7CQkJLyogQ29udmVydCB0byA1MCBrSHogdW5pdHMJKi8KIAotCW11dGV4X2xvY2soJmxvY2spOwkJCS8qIFN0b3Agb3RoZXIgb3BzIGludGVyZmVyaW5nICovCi0KLQlzZW5kXzBfYnl0ZSAoaW8sIGRldik7CQkvKiAgMDogTFNCIG9mIGZyZXF1ZW5jeQkJKi8KKwlzZW5kXzBfYnl0ZShydCk7CQkvKiAgMDogTFNCIG9mIGZyZXF1ZW5jeQkJKi8KIAogCWZvciAoaSA9IDA7IGkgPCAxMzsgaSsrKQkvKiAgIDogZnJlcXVlbmN5IGJpdHMgKDEtMTMpCSovCiAJCWlmIChmcmVxICYgKDEgPDwgaSkpCi0JCQlzZW5kXzFfYnl0ZSAoaW8sIGRldik7CisJCQlzZW5kXzFfYnl0ZShydCk7CiAJCWVsc2UKLQkJCXNlbmRfMF9ieXRlIChpbywgZGV2KTsKKwkJCXNlbmRfMF9ieXRlKHJ0KTsKIAotCXNlbmRfMF9ieXRlIChpbywgZGV2KTsJCS8qIDE0OiB0ZXN0IGJpdCAtIGFsd2F5cyAwICAgICovCi0Jc2VuZF8wX2J5dGUgKGlvLCBkZXYpOwkJLyogMTU6IHRlc3QgYml0IC0gYWx3YXlzIDAgICAgKi8KKwlzZW5kXzBfYnl0ZShydCk7CQkvKiAxNDogdGVzdCBiaXQgLSBhbHdheXMgMCAgICAqLworCXNlbmRfMF9ieXRlKHJ0KTsJCS8qIDE1OiB0ZXN0IGJpdCAtIGFsd2F5cyAwICAgICovCiAKLQlzZW5kXzBfYnl0ZSAoaW8sIGRldik7CQkvKiAxNjogYmFuZCBkYXRhIDAgLSBhbHdheXMgMCAqLwotCXNlbmRfMF9ieXRlIChpbywgZGV2KTsJCS8qIDE3OiBiYW5kIGRhdGEgMSAtIGFsd2F5cyAwICovCi0Jc2VuZF8wX2J5dGUgKGlvLCBkZXYpOwkJLyogMTg6IGJhbmQgZGF0YSAyIC0gYWx3YXlzIDAgKi8KLQlzZW5kXzBfYnl0ZSAoaW8sIGRldik7CQkvKiAxOTogdGltZSBiYXNlIC0gYWx3YXlzIDAgICAqLworCXNlbmRfMF9ieXRlKHJ0KTsJCS8qIDE2OiBiYW5kIGRhdGEgMCAtIGFsd2F5cyAwICovCisJc2VuZF8wX2J5dGUocnQpOwkJLyogMTc6IGJhbmQgZGF0YSAxIC0gYWx3YXlzIDAgKi8KKwlzZW5kXzBfYnl0ZShydCk7CQkvKiAxODogYmFuZCBkYXRhIDIgLSBhbHdheXMgMCAqLworCXNlbmRfMF9ieXRlKHJ0KTsJCS8qIDE5OiB0aW1lIGJhc2UgLSBhbHdheXMgMCAgICovCiAKLQlzZW5kXzBfYnl0ZSAoaW8sIGRldik7CQkvKiAyMDogc3BhY2luZyAoMCA9IDI1IGtIeikgICAqLwotCXNlbmRfMV9ieXRlIChpbywgZGV2KTsJCS8qIDIxOiBzcGFjaW5nICgxID0gMjUga0h6KSAgICovCi0Jc2VuZF8wX2J5dGUgKGlvLCBkZXYpOwkJLyogMjI6IHNwYWNpbmcgKDAgPSAyNSBrSHopICAgKi8KLQlzZW5kXzFfYnl0ZSAoaW8sIGRldik7CQkvKiAyMzogQU0vRk0gKEZNID0gMSwgYWx3YXlzKSAqLworCXNlbmRfMF9ieXRlKHJ0KTsJCS8qIDIwOiBzcGFjaW5nICgwID0gMjUga0h6KSAgICovCisJc2VuZF8xX2J5dGUocnQpOwkJLyogMjE6IHNwYWNpbmcgKDEgPSAyNSBrSHopICAgKi8KKwlzZW5kXzBfYnl0ZShydCk7CQkvKiAyMjogc3BhY2luZyAoMCA9IDI1IGtIeikgICAqLworCXNlbmRfMV9ieXRlKHJ0KTsJCS8qIDIzOiBBTS9GTSAoRk0gPSAxLCBhbHdheXMpICovCiAKLQlpZiAoKGRldi0+Y3Vydm9sID09IDApIHx8IChkZXYtPm11dGVkKSkKLQkJb3V0YiAoMHhkMCwgaW8pOwkvKiB2b2x1bWUgc3RlYWR5ICsgc2lnc3RyICovCisJaWYgKHJ0LT5jdXJ2b2wgPT0gMCB8fCBydC0+bXV0ZWQpCisJCW91dGIoMHhkMCwgcnQtPmlvKTsJLyogdm9sdW1lIHN0ZWFkeSArIHNpZ3N0ciAqLwogCWVsc2UKLQkJb3V0YiAoMHhkOCwgaW8pOwkvKiB2b2x1bWUgc3RlYWR5ICsgc2lnc3RyICsgb24gKi8KKwkJb3V0YigweGQ4LCBydC0+aW8pOwkvKiB2b2x1bWUgc3RlYWR5ICsgc2lnc3RyICsgb24gKi8KIAotCW11dGV4X3VubG9jaygmbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZydC0+bG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBydF9nZXRzaWdzdHIoc3RydWN0IHJ0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBydF9nZXRzaWdzdHIoc3RydWN0IHJ0cmFjayAqcnQpCiB7Ci0JaWYgKGluYihpbykgJiAyKQkvKiBiaXQgc2V0ID0gbm8gc2lnbmFsIHByZXNlbnQJKi8KLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIDE7CQkvKiBzaWduYWwgcHJlc2VudAkJKi8KLX0KKwlpbnQgc2lnID0gMTsKIAotc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCByYWRpb19xY3RybFtdID0gewotCXsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19NVVRFLAotCQkubmFtZSAgICAgICAgICA9ICJNdXRlIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMSwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCX0sewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwKLQkJLm5hbWUgICAgICAgICAgPSAiVm9sdW1lIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDB4ZmYsCi0JCS5zdGVwICAgICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAweGZmLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JfQotfTsKKwltdXRleF9sb2NrKCZydC0+bG9jayk7CisJaWYgKGluYihydC0+aW8pICYgMikJLyogYml0IHNldCA9IG5vIHNpZ25hbCBwcmVzZW50CSovCisJCXNpZyA9IDA7CisJbXV0ZXhfdW5sb2NrKCZydC0+bG9jayk7CisJcmV0dXJuIHNpZzsKK30KIAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2KQogewogCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tYWltc2xhYiIsIHNpemVvZih2LT5kcml2ZXIpKTsKIAlzdHJsY3B5KHYtPmNhcmQsICJSYWRpb1RyYWNrIiwgc2l6ZW9mKHYtPmNhcmQpKTsKLQlzcHJpbnRmKHYtPmJ1c19pbmZvLCAiSVNBIik7CisJc3RybGNweSh2LT5idXNfaW5mbywgIklTQSIsIHNpemVvZih2LT5idXNfaW5mbykpOwogCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwotCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcnRyYWNrICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKKwlzdHJsY3B5KHYtPm5hbWUsICJGTSIsIHNpemVvZih2LT5uYW1lKSk7CiAJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87Ci0Jdi0+cmFuZ2Vsb3cgPSAoODcqMTYwMDApOwotCXYtPnJhbmdlaGlnaCA9ICgxMDgqMTYwMDApOworCXYtPnJhbmdlbG93ID0gODcgKiAxNjAwMDsKKwl2LT5yYW5nZWhpZ2ggPSAxMDggKiAxNjAwMDsKIAl2LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKIAl2LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTE9XOwogCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKLQl2LT5zaWduYWwgPSAweGZmZmYqcnRfZ2V0c2lnc3RyKHJ0KTsKKwl2LT5zaWduYWwgPSAweGZmZmYgKiBydF9nZXRzaWdzdHIocnQpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlpZiAodi0+aW5kZXggPiAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gdi0+aW5kZXggPyAtRUlOVkFMIDogMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgcnRfZGV2aWNlICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHJ0cmFjayAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCi0JcnQtPmN1cmZyZXEgPSBmLT5mcmVxdWVuY3k7Ci0JcnRfc2V0ZnJlcShydCwgcnQtPmN1cmZyZXEpOworCXJ0X3NldGZyZXEocnQsIGYtPmZyZXF1ZW5jeSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHJ0X2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBydHJhY2sgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCWYtPmZyZXF1ZW5jeSA9IHJ0LT5jdXJmcmVxOwpAQCAtMjkzLDE0ICsyODUsMTEgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7Ci0JCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7Ci0JCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAotCQkJCQkJc2l6ZW9mKCpxYykpOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAxKTsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAweGZmLCAxLCAweGZmKTsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0zMDgsMTQgKzI5NywxNCBAQAogc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcnRyYWNrICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgogCQljdHJsLT52YWx1ZSA9IHJ0LT5tdXRlZDsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCWN0cmwtPnZhbHVlID0gcnQtPmN1cnZvbCAqIDY1NTQ7CisJCWN0cmwtPnZhbHVlID0gcnQtPmN1cnZvbDsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRUlOVkFMOwpAQCAtMzI0LDMzICszMTMsMjIgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgcnRfZGV2aWNlICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHJ0cmFjayAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKIAkJaWYgKGN0cmwtPnZhbHVlKQogCQkJcnRfbXV0ZShydCk7CiAJCWVsc2UKLQkJCXJ0X3NldHZvbChydCxydC0+Y3Vydm9sKTsKKwkJCXJ0X3NldHZvbChydCwgcnQtPmN1cnZvbCk7CiAJCXJldHVybiAwOwogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQlydF9zZXR2b2wocnQsY3RybC0+dmFsdWUpOworCQlydF9zZXR2b2wocnQsIGN0cmwtPnZhbHVlKTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCi17Ci0JaWYgKGEtPmluZGV4ID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzdHJjcHkoYS0+bmFtZSwgIlJhZGlvIik7Ci0JYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQogewogCSppID0gMDsKQEAgLTM1OSwzNiArMzM3LDM4IEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQogewotCWlmIChpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiBpID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCWEtPmluZGV4ID0gMDsKKwlzdHJsY3B5KGEtPm5hbWUsICJSYWRpbyIsIHNpemVvZihhLT5uYW1lKSk7CisJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCiB7Ci0JaWYgKGEtPmluZGV4ICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiBhLT5pbmRleCA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHJ0cmFja19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHJ0X2RldmljZSBydHJhY2tfdW5pdDsKLQotc3RhdGljIGludCBydHJhY2tfZXhjbHVzaXZlX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IHJ0cmFja19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZydHJhY2tfdW5pdC5pbl91c2UpID8gLUVCVVNZIDogMDsKLX0KLQotc3RhdGljIGludCBydHJhY2tfZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JY2xlYXJfYml0KDAsICZydHJhY2tfdW5pdC5pbl91c2UpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHJ0cmFja19mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICAgICAgICAgPSBydHJhY2tfZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UgICAgICAgID0gcnRyYWNrX2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuICAgICAgICAgICA9IHJ0cmFja19vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IHJ0cmFja19yZWxlYXNlLAogCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCiB9OwogCkBAIC00MDcsNjQgKzM4Nyw2OSBAQAogCS52aWRpb2Nfc19jdHJsICAgICAgPSB2aWRpb2Nfc19jdHJsLAogfTsKIAotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgcnRyYWNrX3JhZGlvID0gewotCS5uYW1lCQk9ICJSYWRpb1RyYWNrIHJhZGlvIiwKLQkuZm9wcyAgICAgICAgICAgPSAmcnRyYWNrX2ZvcHMsCi0JLmlvY3RsX29wcyAJPSAmcnRyYWNrX2lvY3RsX29wcywKLQkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAotfTsKLQogc3RhdGljIGludCBfX2luaXQgcnRyYWNrX2luaXQodm9pZCkKIHsKLQlpZihpbz09LTEpCi0JewotCQlwcmludGsoS0VSTl9FUlIgIllvdSBtdXN0IHNldCBhbiBJL08gYWRkcmVzcyB3aXRoIGlvPTB4Pz8/XG4iKTsKKwlzdHJ1Y3QgcnRyYWNrICpydCA9ICZydHJhY2tfY2FyZDsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gJnJ0LT52NGwyX2RldjsKKwlpbnQgcmVzOworCisJc3RybGNweSh2NGwyX2Rldi0+bmFtZSwgInJ0cmFjayIsIHNpemVvZih2NGwyX2Rldi0+bmFtZSkpOworCXJ0LT5pbyA9IGlvOworCisJaWYgKHJ0LT5pbyA9PSAtMSkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgInlvdSBtdXN0IHNldCBhbiBJL08gYWRkcmVzcyB3aXRoIGlvPTB4MjBmIG9yIDB4MzBmXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihpbywgMiwgInJ0cmFjayIpKQotCXsKLQkJcHJpbnRrKEtFUk5fRVJSICJydHJhY2s6IHBvcnQgMHgleCBhbHJlYWR5IGluIHVzZVxuIiwgaW8pOworCWlmICghcmVxdWVzdF9yZWdpb24ocnQtPmlvLCAyLCAicnRyYWNrIikpIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJwb3J0IDB4JXggYWxyZWFkeSBpbiB1c2VcbiIsIHJ0LT5pbyk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JdmlkZW9fc2V0X2RydmRhdGEoJnJ0cmFja19yYWRpbywgJnJ0cmFja191bml0KTsKKwlyZXMgPSB2NGwyX2RldmljZV9yZWdpc3RlcihOVUxMLCB2NGwyX2Rldik7CisJaWYgKHJlcyA8IDApIHsKKwkJcmVsZWFzZV9yZWdpb24ocnQtPmlvLCAyKTsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgdjRsMl9kZXZpY2VcbiIpOworCQlyZXR1cm4gcmVzOworCX0KIAotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnJ0cmFja19yYWRpbywgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKLQkJcmVsZWFzZV9yZWdpb24oaW8sIDIpOworCXN0cmxjcHkocnQtPnZkZXYubmFtZSwgdjRsMl9kZXYtPm5hbWUsIHNpemVvZihydC0+dmRldi5uYW1lKSk7CisJcnQtPnZkZXYudjRsMl9kZXYgPSB2NGwyX2RldjsKKwlydC0+dmRldi5mb3BzID0gJnJ0cmFja19mb3BzOworCXJ0LT52ZGV2LmlvY3RsX29wcyA9ICZydHJhY2tfaW9jdGxfb3BzOworCXJ0LT52ZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmcnQtPnZkZXYsIHJ0KTsKKworCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnJ0LT52ZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgeworCQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZydC0+djRsMl9kZXYpOworCQlyZWxlYXNlX3JlZ2lvbihydC0+aW8sIDIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAiQUlNU2xhYiBSYWRpb1RyYWNrL1JhZGlvUmV2ZWFsIGNhcmQgZHJpdmVyLlxuIik7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAiQUlNU2xhYiBSYWRpb1RyYWNrL1JhZGlvUmV2ZWFsIGNhcmQgZHJpdmVyLlxuIik7CiAKIAkvKiBTZXQgdXAgdGhlIEkvTyBsb2NraW5nICovCiAKLQltdXRleF9pbml0KCZsb2NrKTsKKwltdXRleF9pbml0KCZydC0+bG9jayk7CiAKIAkvKiBtdXRlIGNhcmQgLSBwcmV2ZW50cyBub2lzeSBib290dXBzICovCiAKIAkvKiB0aGlzIGVuc3VyZXMgdGhhdCB0aGUgdm9sdW1lIGlzIGFsbCB0aGUgd2F5IGRvd24gICovCi0Jb3V0YigweDQ4LCBpbyk7CQkvKiB2b2x1bWUgZG93biBidXQgc3RpbGwgIm9uIgkqLworCW91dGIoMHg0OCwgcnQtPmlvKTsJCS8qIHZvbHVtZSBkb3duIGJ1dCBzdGlsbCAib24iCSovCiAJc2xlZXBfZGVsYXkoMjAwMDAwMCk7CS8qIG1ha2Ugc3VyZSBpdCdzIHRvdGFsbHkgZG93bgkqLwotCW91dGIoMHhjMCwgaW8pOwkJLyogc3RlYWR5IHZvbHVtZSwgbXV0ZSBjYXJkCSovCi0JcnRyYWNrX3VuaXQuY3Vydm9sID0gMDsKKwlvdXRiKDB4YzAsIHJ0LT5pbyk7CQkvKiBzdGVhZHkgdm9sdW1lLCBtdXRlIGNhcmQJKi8KIAogCXJldHVybiAwOwogfQogCi1NT0RVTEVfQVVUSE9SKCJNLktpcmt3b29kIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgUmFkaW9UcmFjay9SYWRpb1JldmVhbCByYWRpbyBjYXJkLiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1tb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIFJhZGlvVHJhY2sgY2FyZCAoMHgyMGYgb3IgMHgzMGYpIik7Ci1tb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBjbGVhbnVwX3J0cmFja19tb2R1bGUodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBydHJhY2tfZXhpdCh2b2lkKQogewotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZydHJhY2tfcmFkaW8pOwotCXJlbGVhc2VfcmVnaW9uKGlvLDIpOworCXN0cnVjdCBydHJhY2sgKnJ0ID0gJnJ0cmFja19jYXJkOworCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnJ0LT52ZGV2KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZydC0+djRsMl9kZXYpOworCXJlbGVhc2VfcmVnaW9uKHJ0LT5pbywgMik7CiB9CiAKIG1vZHVsZV9pbml0KHJ0cmFja19pbml0KTsKLW1vZHVsZV9leGl0KGNsZWFudXBfcnRyYWNrX21vZHVsZSk7Cittb2R1bGVfZXhpdChydHJhY2tfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYXp0ZWNoLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWF6dGVjaC5jCmluZGV4IDU2MDRlODguLjQ5Mjk5ZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tYXp0ZWNoLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1henRlY2guYwpAQCAtMjksMzMgKzI5LDE1IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkJLyogSW5pdGRhdGEJCQkqLwogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiByZXF1ZXN0X3JlZ2lvbgkJKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgkvKiB1ZGVsYXkJCQkqLwotI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgkvKiBjb3B5IHRvL2Zyb20gdXNlcgkJKi8KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4JLyoga2VybmVsIHJhZGlvIHN0cnVjdHMJCSovCi0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLworI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KLSNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLDAsMikKLQotc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCByYWRpb19xY3RybFtdID0gewotCXsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19NVVRFLAotCQkubmFtZSAgICAgICAgICA9ICJNdXRlIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMSwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCX0sewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX1ZPTFVNRSwKLQkJLm5hbWUgICAgICAgICAgPSAiVm9sdW1lIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDB4ZmYsCi0JCS5zdGVwICAgICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAweGZmLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JfQotfTsKK01PRFVMRV9BVVRIT1IoIlJ1c3NlbGwgS3JvbGwsIFF1YXkgTHUsIERvbmFsZCBTb25nLCBKYXNvbiBMZXdpcywgU2NvdHQgTWNHcmF0aCwgV2lsbGlhbSBNY0dyYXRoIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgQXp0ZWNoIHJhZGlvIGNhcmQuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIC8qIGFjY2VwdGFibGUgcG9ydHM6IDB4MzUwIChKUDMgc2hvcnRlZCksIDB4MzU4IChKUDMgb3BlbikgKi8KIApAQCAtNjYsNTUgKzQ4LDY0IEBACiBzdGF0aWMgaW50IGlvID0gQ09ORklHX1JBRElPX0FaVEVDSF9QT1JUOwogc3RhdGljIGludCByYWRpb19uciA9IC0xOwogc3RhdGljIGludCByYWRpb193YWl0X3RpbWUgPSAxMDAwOwotc3RhdGljIHN0cnVjdCBtdXRleCBsb2NrOwogCi1zdHJ1Y3QgYXpfZGV2aWNlCittb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7Cittb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIEF6dGVjaCBjYXJkICgweDM1MCBvciAweDM1OCkiKTsKKworI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDIpCisKK3N0cnVjdCBhenRlY2gKIHsKLQl1bnNpZ25lZCBsb25nIGluX3VzZTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OworCWludCBpbzsKIAlpbnQgY3Vydm9sOwogCXVuc2lnbmVkIGxvbmcgY3VyZnJlcTsKIAlpbnQgc3RlcmVvOworCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIAorc3RhdGljIHN0cnVjdCBhenRlY2ggYXp0ZWNoX2NhcmQ7CisKIHN0YXRpYyBpbnQgdm9sY29udmVydChpbnQgbGV2ZWwpCiB7Ci0JbGV2ZWw+Pj0xNDsJCS8qIE1hcCAxNmJpdHMgZG93biB0byAyIGJpdCAqLwotCWxldmVsJj0zOworCWxldmVsID4+PSAxNDsJCS8qIE1hcCAxNmJpdHMgZG93biB0byAyIGJpdCAqLworCWxldmVsICY9IDM7CiAKIAkvKiBjb252ZXJ0IHRvIGNhcmQtZnJpZW5kbHkgdmFsdWVzICovCi0Jc3dpdGNoIChsZXZlbCkKLQl7Ci0JCWNhc2UgMDoKLQkJCXJldHVybiAwOwotCQljYXNlIDE6Ci0JCQlyZXR1cm4gMTsKLQkJY2FzZSAyOgotCQkJcmV0dXJuIDQ7Ci0JCWNhc2UgMzoKLQkJCXJldHVybiA1OworCXN3aXRjaCAobGV2ZWwpIHsKKwljYXNlIDA6CisJCXJldHVybiAwOworCWNhc2UgMToKKwkJcmV0dXJuIDE7CisJY2FzZSAyOgorCQlyZXR1cm4gNDsKKwljYXNlIDM6CisJCXJldHVybiA1OwogCX0KIAlyZXR1cm4gMDsJLyogUXVpZXRlbiBnY2MgKi8KIH0KIAotc3RhdGljIHZvaWQgc2VuZF8wX2J5dGUgKHN0cnVjdCBhel9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHNlbmRfMF9ieXRlKHN0cnVjdCBhenRlY2ggKmF6KQogewogCXVkZWxheShyYWRpb193YWl0X3RpbWUpOwotCW91dGJfcCgyK3ZvbGNvbnZlcnQoZGV2LT5jdXJ2b2wpLCBpbyk7Ci0Jb3V0Yl9wKDY0KzIrdm9sY29udmVydChkZXYtPmN1cnZvbCksIGlvKTsKKwlvdXRiX3AoMiArIHZvbGNvbnZlcnQoYXotPmN1cnZvbCksIGF6LT5pbyk7CisJb3V0Yl9wKDY0ICsgMiArIHZvbGNvbnZlcnQoYXotPmN1cnZvbCksIGF6LT5pbyk7CiB9CiAKLXN0YXRpYyB2b2lkIHNlbmRfMV9ieXRlIChzdHJ1Y3QgYXpfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBzZW5kXzFfYnl0ZShzdHJ1Y3QgYXp0ZWNoICpheikKIHsKIAl1ZGVsYXkgKHJhZGlvX3dhaXRfdGltZSk7Ci0Jb3V0Yl9wKDEyOCsyK3ZvbGNvbnZlcnQoZGV2LT5jdXJ2b2wpLCBpbyk7Ci0Jb3V0Yl9wKDEyOCs2NCsyK3ZvbGNvbnZlcnQoZGV2LT5jdXJ2b2wpLCBpbyk7CisJb3V0Yl9wKDEyOCArIDIgKyB2b2xjb252ZXJ0KGF6LT5jdXJ2b2wpLCBhei0+aW8pOworCW91dGJfcCgxMjggKyA2NCArIDIgKyB2b2xjb252ZXJ0KGF6LT5jdXJ2b2wpLCBhei0+aW8pOwogfQogCi1zdGF0aWMgaW50IGF6X3NldHZvbChzdHJ1Y3QgYXpfZGV2aWNlICpkZXYsIGludCB2b2wpCitzdGF0aWMgaW50IGF6X3NldHZvbChzdHJ1Y3QgYXp0ZWNoICpheiwgaW50IHZvbCkKIHsKLQltdXRleF9sb2NrKCZsb2NrKTsKLQlvdXRiICh2b2xjb252ZXJ0KHZvbCksIGlvKTsKLQltdXRleF91bmxvY2soJmxvY2spOworCW11dGV4X2xvY2soJmF6LT5sb2NrKTsKKwlvdXRiKHZvbGNvbnZlcnQodm9sKSwgYXotPmlvKTsKKwltdXRleF91bmxvY2soJmF6LT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI2LDExNiArMTE3LDExMCBAQAogICoKICAqLwogCi1zdGF0aWMgaW50IGF6X2dldHNpZ3N0cihzdHJ1Y3QgYXpfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IGF6X2dldHNpZ3N0cihzdHJ1Y3QgYXp0ZWNoICpheikKIHsKLQlpZiAoaW5iKGlvKSAmIDIpCS8qIGJpdCBzZXQgPSBubyBzaWduYWwgcHJlc2VudCAqLwotCQlyZXR1cm4gMDsKLQlyZXR1cm4gMTsJCS8qIHNpZ25hbCBwcmVzZW50ICovCisJaW50IHNpZyA9IDE7CisKKwltdXRleF9sb2NrKCZhei0+bG9jayk7CisJaWYgKGluYihhei0+aW8pICYgMikJLyogYml0IHNldCA9IG5vIHNpZ25hbCBwcmVzZW50ICovCisJCXNpZyA9IDA7CisJbXV0ZXhfdW5sb2NrKCZhei0+bG9jayk7CisJcmV0dXJuIHNpZzsKIH0KIAotc3RhdGljIGludCBhel9nZXRzdGVyZW8oc3RydWN0IGF6X2RldmljZSAqZGV2KQorc3RhdGljIGludCBhel9nZXRzdGVyZW8oc3RydWN0IGF6dGVjaCAqYXopCiB7Ci0JaWYgKGluYihpbykgJiAxKSAJLyogYml0IHNldCA9IG1vbm8gKi8KLQkJcmV0dXJuIDA7Ci0JcmV0dXJuIDE7CQkvKiBzdGVyZW8gKi8KKwlpbnQgc3RlcmVvID0gMTsKKworCW11dGV4X2xvY2soJmF6LT5sb2NrKTsKKwlpZiAoaW5iKGF6LT5pbykgJiAxKSAJLyogYml0IHNldCA9IG1vbm8gKi8KKwkJc3RlcmVvID0gMDsKKwltdXRleF91bmxvY2soJmF6LT5sb2NrKTsKKwlyZXR1cm4gc3RlcmVvOwogfQogCi1zdGF0aWMgaW50IGF6X3NldGZyZXEoc3RydWN0IGF6X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZyZXF1ZW5jeSkKK3N0YXRpYyBpbnQgYXpfc2V0ZnJlcShzdHJ1Y3QgYXp0ZWNoICpheiwgdW5zaWduZWQgbG9uZyBmcmVxdWVuY3kpCiB7CiAJaW50ICBpOwogCisJbXV0ZXhfbG9jaygmYXotPmxvY2spOworCisJYXotPmN1cmZyZXEgPSBmcmVxdWVuY3k7CiAJZnJlcXVlbmN5ICs9IDE3MTIwMDsJCS8qIEFkZCAxMC43IE1IeiBJRgkJKi8KIAlmcmVxdWVuY3kgLz0gODAwOwkJLyogQ29udmVydCB0byA1MCBrSHogdW5pdHMJKi8KIAotCW11dGV4X2xvY2soJmxvY2spOwotCi0Jc2VuZF8wX2J5dGUgKGRldik7CQkvKiAgMDogTFNCIG9mIGZyZXF1ZW5jeSAgICAgICAqLworCXNlbmRfMF9ieXRlKGF6KTsJCS8qICAwOiBMU0Igb2YgZnJlcXVlbmN5ICAgICAgICovCiAKIAlmb3IgKGkgPSAwOyBpIDwgMTM7IGkrKykJLyogICA6IGZyZXF1ZW5jeSBiaXRzICgxLTEzKSAgKi8KIAkJaWYgKGZyZXF1ZW5jeSAmICgxIDw8IGkpKQotCQkJc2VuZF8xX2J5dGUgKGRldik7CisJCQlzZW5kXzFfYnl0ZShheik7CiAJCWVsc2UKLQkJCXNlbmRfMF9ieXRlIChkZXYpOworCQkJc2VuZF8wX2J5dGUoYXopOwogCi0Jc2VuZF8wX2J5dGUgKGRldik7CQkvKiAxNDogdGVzdCBiaXQgLSBhbHdheXMgMCAgICAqLwotCXNlbmRfMF9ieXRlIChkZXYpOwkJLyogMTU6IHRlc3QgYml0IC0gYWx3YXlzIDAgICAgKi8KLQlzZW5kXzBfYnl0ZSAoZGV2KTsJCS8qIDE2OiBiYW5kIGRhdGEgMCAtIGFsd2F5cyAwICovCi0JaWYgKGRldi0+c3RlcmVvKQkJLyogMTc6IHN0ZXJlbyAoMSB0byBlbmFibGUpICAgKi8KLQkJc2VuZF8xX2J5dGUgKGRldik7CisJc2VuZF8wX2J5dGUoYXopOwkJLyogMTQ6IHRlc3QgYml0IC0gYWx3YXlzIDAgICAgKi8KKwlzZW5kXzBfYnl0ZShheik7CQkvKiAxNTogdGVzdCBiaXQgLSBhbHdheXMgMCAgICAqLworCXNlbmRfMF9ieXRlKGF6KTsJCS8qIDE2OiBiYW5kIGRhdGEgMCAtIGFsd2F5cyAwICovCisJaWYgKGF6LT5zdGVyZW8pCQkvKiAxNzogc3RlcmVvICgxIHRvIGVuYWJsZSkgICAqLworCQlzZW5kXzFfYnl0ZShheik7CiAJZWxzZQotCQlzZW5kXzBfYnl0ZSAoZGV2KTsKKwkJc2VuZF8wX2J5dGUoYXopOwogCi0Jc2VuZF8xX2J5dGUgKGRldik7CQkvKiAxODogYmFuZCBkYXRhIDEgLSB1bmtub3duICAqLwotCXNlbmRfMF9ieXRlIChkZXYpOwkJLyogMTk6IHRpbWUgYmFzZSAtIGFsd2F5cyAwICAgKi8KLQlzZW5kXzBfYnl0ZSAoZGV2KTsJCS8qIDIwOiBzcGFjaW5nICgwID0gMjUga0h6KSAgICovCi0Jc2VuZF8xX2J5dGUgKGRldik7CQkvKiAyMTogc3BhY2luZyAoMSA9IDI1IGtIeikgICAqLwotCXNlbmRfMF9ieXRlIChkZXYpOwkJLyogMjI6IHNwYWNpbmcgKDAgPSAyNSBrSHopICAgKi8KLQlzZW5kXzFfYnl0ZSAoZGV2KTsJCS8qIDIzOiBBTS9GTSAoRk0gPSAxLCBhbHdheXMpICovCisJc2VuZF8xX2J5dGUoYXopOwkJLyogMTg6IGJhbmQgZGF0YSAxIC0gdW5rbm93biAgKi8KKwlzZW5kXzBfYnl0ZShheik7CQkvKiAxOTogdGltZSBiYXNlIC0gYWx3YXlzIDAgICAqLworCXNlbmRfMF9ieXRlKGF6KTsJCS8qIDIwOiBzcGFjaW5nICgwID0gMjUga0h6KSAgICovCisJc2VuZF8xX2J5dGUoYXopOwkJLyogMjE6IHNwYWNpbmcgKDEgPSAyNSBrSHopICAgKi8KKwlzZW5kXzBfYnl0ZShheik7CQkvKiAyMjogc3BhY2luZyAoMCA9IDI1IGtIeikgICAqLworCXNlbmRfMV9ieXRlKGF6KTsJCS8qIDIzOiBBTS9GTSAoRk0gPSAxLCBhbHdheXMpICovCiAKIAkvKiBsYXRjaCBmcmVxdWVuY3kgKi8KIAotCXVkZWxheSAocmFkaW9fd2FpdF90aW1lKTsKLQlvdXRiX3AoMTI4KzY0K3ZvbGNvbnZlcnQoZGV2LT5jdXJ2b2wpLCBpbyk7CisJdWRlbGF5KHJhZGlvX3dhaXRfdGltZSk7CisJb3V0Yl9wKDEyOCArIDY0ICsgdm9sY29udmVydChhei0+Y3Vydm9sKSwgYXotPmlvKTsKIAotCW11dGV4X3VubG9jaygmbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZhei0+bG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqdikKIHsKLQlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLWF6dGVjaCIsIHNpemVvZiAodi0+ZHJpdmVyKSk7Ci0Jc3RybGNweSh2LT5jYXJkLCAiQXp0ZWNoIFJhZGlvIiwgc2l6ZW9mICh2LT5jYXJkKSk7Ci0Jc3ByaW50Zih2LT5idXNfaW5mbywiSVNBIik7CisJc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby1henRlY2giLCBzaXplb2Yodi0+ZHJpdmVyKSk7CisJc3RybGNweSh2LT5jYXJkLCAiQXp0ZWNoIFJhZGlvIiwgc2l6ZW9mKHYtPmNhcmQpKTsKKwlzdHJsY3B5KHYtPmJ1c19pbmZvLCAiSVNBIiwgc2l6ZW9mKHYtPmJ1c19pbmZvKSk7CiAJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047Ci0Jdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZ190dW5lciAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCXN0cnVjdCBhel9kZXZpY2UgKmF6ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgYXp0ZWNoICpheiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKKwlzdHJsY3B5KHYtPm5hbWUsICJGTSIsIHNpemVvZih2LT5uYW1lKSk7CiAJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAKLQl2LT5yYW5nZWxvdz0oODcqMTYwMDApOwotCXYtPnJhbmdlaGlnaD0oMTA4KjE2MDAwKTsKLQl2LT5yeHN1YmNoYW5zID1WNEwyX1RVTkVSX1NVQl9NT05PfFY0TDJfVFVORVJfU1VCX1NURVJFTzsKLQl2LT5jYXBhYmlsaXR5PVY0TDJfVFVORVJfQ0FQX0xPVzsKLQlpZihhel9nZXRzdGVyZW8oYXopKQorCXYtPnJhbmdlbG93ID0gODcgKiAxNjAwMDsKKwl2LT5yYW5nZWhpZ2ggPSAxMDggKiAxNjAwMDsKKwl2LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTyB8IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKKwl2LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTE9XOworCWlmIChhel9nZXRzdGVyZW8oYXopKQogCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKIAllbHNlCiAJCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKLQl2LT5zaWduYWw9MHhGRkZGKmF6X2dldHNpZ3N0cihheik7CisJdi0+c2lnbmFsID0gMHhGRkZGICogYXpfZ2V0c2lnc3RyKGF6KTsKIAogCXJldHVybiAwOwogfQogCi0KLXN0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlpZiAodi0+aW5kZXggPiAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCSAgIHN0cnVjdCB2NGwyX2F1ZGlvICphKQotewotCWlmIChhLT5pbmRleCA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3RyY3B5KGEtPm5hbWUsICJSYWRpbyIpOwotCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHYtPmluZGV4ID8gLUVJTlZBTCA6IDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKQEAgLTI0NiwxMTMgKzIzMSwxMDcgQEAKIAogc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCiB7Ci0JaWYgKGkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGkgPyAtRUlOVkFMIDogMDsKIH0KIAotCi1zdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKIHsKLQlpZiAoYS0+aW5kZXggIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KKwlhLT5pbmRleCA9IDA7CisJc3RybGNweShhLT5uYW1lLCAiUmFkaW8iLCBzaXplb2YoYS0+bmFtZSkpOworCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5IChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlyZXR1cm4gYS0+aW5kZXggPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCBhel9kZXZpY2UgKmF6ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgYXp0ZWNoICpheiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKLQlhei0+Y3VyZnJlcSA9IGYtPmZyZXF1ZW5jeTsKLQlhel9zZXRmcmVxKGF6LCBhei0+Y3VyZnJlcSk7CisJYXpfc2V0ZnJlcShheiwgZi0+ZnJlcXVlbmN5KTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3kgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCBhel9kZXZpY2UgKmF6ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgYXp0ZWNoICpheiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAlmLT5mcmVxdWVuY3kgPSBhei0+Y3VyZnJlcTsKLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7IGkrKykgewotCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgewotCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwKLQkJCQkJCXNpemVvZigqcWMpKTsKLQkJCXJldHVybiAoMCk7Ci0JCX0KKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAxKTsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAweGZmLCAxLCAweGZmKTsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICAgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgYXpfZGV2aWNlICpheiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IGF6dGVjaCAqYXogPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewotCQljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCQlpZiAoYXotPmN1cnZvbD09MCkKLQkJCQljdHJsLT52YWx1ZT0xOwotCQkJZWxzZQotCQkJCWN0cmwtPnZhbHVlPTA7Ci0JCQlyZXR1cm4gKDApOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJCWN0cmwtPnZhbHVlPWF6LT5jdXJ2b2wgKiA2NTU0OwotCQkJcmV0dXJuICgwKTsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCWlmIChhei0+Y3Vydm9sID09IDApCisJCQljdHJsLT52YWx1ZSA9IDE7CisJCWVsc2UKKwkJCWN0cmwtPnZhbHVlID0gMDsKKwkJcmV0dXJuIDA7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCWN0cmwtPnZhbHVlID0gYXotPmN1cnZvbCAqIDY1NTQ7CisJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCB2aWRpb2Nfc19jdHJsIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBhel9kZXZpY2UgKmF6ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgYXp0ZWNoICpheiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJCWlmIChjdHJsLT52YWx1ZSkgewotCQkJCWF6X3NldHZvbChheiwwKTsKLQkJCX0gZWxzZSB7Ci0JCQkJYXpfc2V0dm9sKGF6LGF6LT5jdXJ2b2wpOwotCQkJfQotCQkJcmV0dXJuICgwKTsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCQlhel9zZXR2b2woYXosY3RybC0+dmFsdWUpOwotCQkJcmV0dXJuICgwKTsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCWlmIChjdHJsLT52YWx1ZSkKKwkJCWF6X3NldHZvbChheiwgMCk7CisJCWVsc2UKKwkJCWF6X3NldHZvbChheiwgYXotPmN1cnZvbCk7CisJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQlhel9zZXR2b2woYXosIGN0cmwtPnZhbHVlKTsKKwkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgc3RydWN0IGF6X2RldmljZSBhenRlY2hfdW5pdDsKLQotc3RhdGljIGludCBhenRlY2hfZXhjbHVzaXZlX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IGF6dGVjaF9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZhenRlY2hfdW5pdC5pbl91c2UpID8gLUVCVVNZIDogMDsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBhenRlY2hfZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IGF6dGVjaF9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQogewotCWNsZWFyX2JpdCgwLCAmYXp0ZWNoX3VuaXQuaW5fdXNlKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBhenRlY2hfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4gICAgICAgICAgID0gYXp0ZWNoX2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IGF6dGVjaF9leGNsdXNpdmVfcmVsZWFzZSwKKwkub3BlbiAgICAgICAgICAgPSBhenRlY2hfb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSBhenRlY2hfcmVsZWFzZSwKIAkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAogfTsKIApAQCAtMzcxLDU3ICszNTAsNjAgQEAKIAkudmlkaW9jX3NfY3RybCAgICAgID0gdmlkaW9jX3NfY3RybCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGF6dGVjaF9yYWRpbyA9IHsKLQkubmFtZQkJPSAiQXp0ZWNoIHJhZGlvIiwKLQkuZm9wcyAgICAgICAgICAgPSAmYXp0ZWNoX2ZvcHMsCi0JLmlvY3RsX29wcyAJPSAmYXp0ZWNoX2lvY3RsX29wcywKLQkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAotfTsKLQotbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLGF6dGVjaF9yYWRpby5kZWJ1ZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsImFjdGl2YXRlcyBkZWJ1ZyBpbmZvIik7Ci0KIHN0YXRpYyBpbnQgX19pbml0IGF6dGVjaF9pbml0KHZvaWQpCiB7Ci0JaWYoaW89PS0xKQotCXsKLQkJcHJpbnRrKEtFUk5fRVJSICJZb3UgbXVzdCBzZXQgYW4gSS9PIGFkZHJlc3Mgd2l0aCBpbz0weD8/P1xuIik7CisJc3RydWN0IGF6dGVjaCAqYXogPSAmYXp0ZWNoX2NhcmQ7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9ICZhei0+djRsMl9kZXY7CisJaW50IHJlczsKKworCXN0cmxjcHkodjRsMl9kZXYtPm5hbWUsICJhenRlY2giLCBzaXplb2YodjRsMl9kZXYtPm5hbWUpKTsKKwlhei0+aW8gPSBpbzsKKworCWlmIChhei0+aW8gPT0gLTEpIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJ5b3UgbXVzdCBzZXQgYW4gSS9PIGFkZHJlc3Mgd2l0aCBpbz0weDM1MCBvciAweDM1OFxuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmICghcmVxdWVzdF9yZWdpb24oaW8sIDIsICJhenRlY2giKSkKLQl7Ci0JCXByaW50ayhLRVJOX0VSUiAiYXp0ZWNoOiBwb3J0IDB4JXggYWxyZWFkeSBpbiB1c2VcbiIsIGlvKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGF6LT5pbywgMiwgImF6dGVjaCIpKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAicG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLCBhei0+aW8pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCW11dGV4X2luaXQoJmxvY2spOwotCXZpZGVvX3NldF9kcnZkYXRhKCZhenRlY2hfcmFkaW8sICZhenRlY2hfdW5pdCk7CisJcmVzID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoTlVMTCwgdjRsMl9kZXYpOworCWlmIChyZXMgPCAwKSB7CisJCXJlbGVhc2VfcmVnaW9uKGF6LT5pbywgMik7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHY0bDJfZGV2aWNlXG4iKTsKKwkJcmV0dXJuIHJlczsKKwl9CiAKLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZhenRlY2hfcmFkaW8sIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7Ci0JCXJlbGVhc2VfcmVnaW9uKGlvLDIpOworCW11dGV4X2luaXQoJmF6LT5sb2NrKTsKKwlzdHJsY3B5KGF6LT52ZGV2Lm5hbWUsIHY0bDJfZGV2LT5uYW1lLCBzaXplb2YoYXotPnZkZXYubmFtZSkpOworCWF6LT52ZGV2LnY0bDJfZGV2ID0gdjRsMl9kZXY7CisJYXotPnZkZXYuZm9wcyA9ICZhenRlY2hfZm9wczsKKwlhei0+dmRldi5pb2N0bF9vcHMgPSAmYXp0ZWNoX2lvY3RsX29wczsKKwlhei0+dmRldi5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHk7CisJdmlkZW9fc2V0X2RydmRhdGEoJmF6LT52ZGV2LCBheik7CisKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZhei0+dmRldiwgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKKwkJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcih2NGwyX2Rldik7CisJCXJlbGVhc2VfcmVnaW9uKGF6LT5pbywgMik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIkF6dGVjaCByYWRpbyBjYXJkIGRyaXZlciB2MS4wMC8xOTk5MDIyNCBya3JvbGxAZXhwbG9pdHMub3JnXG4iKTsKKwl2NGwyX2luZm8odjRsMl9kZXYsICJBenRlY2ggcmFkaW8gY2FyZCBkcml2ZXIgdjEuMDAvMTk5OTAyMjQgcmtyb2xsQGV4cGxvaXRzLm9yZ1xuIik7CiAJLyogbXV0ZSBjYXJkIC0gcHJldmVudHMgbm9pc3kgYm9vdHVwcyAqLwotCW91dGIgKDAsIGlvKTsKKwlvdXRiKDAsIGF6LT5pbyk7CiAJcmV0dXJuIDA7CiB9CiAKLU1PRFVMRV9BVVRIT1IoIlJ1c3NlbGwgS3JvbGwsIFF1YXkgTHUsIERvbmFsZCBTb25nLCBKYXNvbiBMZXdpcywgU2NvdHQgTWNHcmF0aCwgV2lsbGlhbSBNY0dyYXRoIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgQXp0ZWNoIHJhZGlvIGNhcmQuIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLW1vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKLW1vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgQXp0ZWNoIGNhcmQgKDB4MzUwIG9yIDB4MzU4KSIpOwotCi1zdGF0aWMgdm9pZCBfX2V4aXQgYXp0ZWNoX2NsZWFudXAodm9pZCkKK3N0YXRpYyB2b2lkIF9fZXhpdCBhenRlY2hfZXhpdCh2b2lkKQogewotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZhenRlY2hfcmFkaW8pOwotCXJlbGVhc2VfcmVnaW9uKGlvLDIpOworCXN0cnVjdCBhenRlY2ggKmF6ID0gJmF6dGVjaF9jYXJkOworCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmF6LT52ZGV2KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZhei0+djRsMl9kZXYpOworCXJlbGVhc2VfcmVnaW9uKGF6LT5pbywgMik7CiB9CiAKIG1vZHVsZV9pbml0KGF6dGVjaF9pbml0KTsKLW1vZHVsZV9leGl0KGF6dGVjaF9jbGVhbnVwKTsKK21vZHVsZV9leGl0KGF6dGVjaF9leGl0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tY2FkZXQuYwppbmRleCBjYjMwNzVhLi5kMzBmYzBjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWNhZGV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1jYWRldC5jCkBAIC0zNSwzMzMgKzM1LDMxOCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4JCS8qIEluaXRkYXRhCQkJKi8KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogcmVxdWVzdF9yZWdpb24JCSovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogdWRlbGF5CQkJKi8KLSNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG91dGIsIG91dGJfcAkJCSovCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4JLyogY29weSB0by9mcm9tIHVzZXIJCSovCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CS8qIFY0TDIgQVBJIGRlZnMJCSovCi0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvcGFyYW0uaD4KICNpbmNsdWRlIDxsaW51eC9wbnAuaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKworTU9EVUxFX0FVVEhPUigiRnJlZCBHbGVhc29uLCBSdXNzZWxsIEtyb2xsLCBRdWF5IEx1LCBEb25hbGQgU29uZywgSmFzb24gTGV3aXMsIFNjb3R0IE1jR3JhdGgsIFdpbGxpYW0gTWNHcmF0aCIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIEFEUyBDYWRldCBBTS9GTS9SRFMgcmFkaW8gY2FyZC4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworc3RhdGljIGludCBpbyA9IC0xOwkJLyogZGVmYXVsdCB0byBpc2FwbnAgYWN0aXZhdGlvbiAqLworc3RhdGljIGludCByYWRpb19uciA9IC0xOworCittb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgQ2FkZXQgY2FyZCAoMHgzMzAsMHgzMzIsMHgzMzQsMHgzMzYsMHgzMzgsMHgzM2EsMHgzM2MsMHgzM2UpIik7Cittb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7CisKKyNkZWZpbmUgQ0FERVRfVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAzLCAzKQogCiAjZGVmaW5lIFJEU19CVUZGRVIgMjU2CiAjZGVmaW5lIFJEU19SWF9GTEFHIDEKICNkZWZpbmUgTUJTX1JYX0ZMQUcgMgogCi0jZGVmaW5lIENBREVUX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwzLDMpCi0KLXN0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKLQl7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKLQkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQl9LHsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCi0JCS5uYW1lICAgICAgICAgID0gIlZvbHVtZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSAweGZmLAotCQkuc3RlcCAgICAgICAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMHhmZiwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCX0KK3N0cnVjdCBjYWRldCB7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmRldjsKKwlpbnQgaW87CisJaW50IHVzZXJzOworCWludCBjdXJ0dW5lcjsKKwlpbnQgdHVuZXN0YXQ7CisJaW50IHNpZ3N0cmVuZ3RoOworCXdhaXRfcXVldWVfaGVhZF90IHJlYWRfcXVldWU7CisJc3RydWN0IHRpbWVyX2xpc3QgcmVhZHRpbWVyOworCV9fdTggcmRzaW4sIHJkc291dCwgcmRzc3RhdDsKKwl1bnNpZ25lZCBjaGFyIHJkc2J1ZltSRFNfQlVGRkVSXTsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwlpbnQgcmVhZGluZzsKIH07CiAKLXN0YXRpYyBpbnQgaW89LTE7CQkvKiBkZWZhdWx0IHRvIGlzYXBucCBhY3RpdmF0aW9uICovCi1zdGF0aWMgaW50IHJhZGlvX25yID0gLTE7Ci1zdGF0aWMgaW50IHVzZXJzOwotc3RhdGljIGludCBjdXJ0dW5lcjsKLXN0YXRpYyBpbnQgdHVuZXN0YXQ7Ci1zdGF0aWMgaW50IHNpZ3N0cmVuZ3RoOwotc3RhdGljIHdhaXRfcXVldWVfaGVhZF90IHJlYWRfcXVldWU7Ci1zdGF0aWMgc3RydWN0IHRpbWVyX2xpc3QgcmVhZHRpbWVyOwotc3RhdGljIF9fdTggcmRzaW4sIHJkc291dCwgcmRzc3RhdDsKLXN0YXRpYyB1bnNpZ25lZCBjaGFyIHJkc2J1ZltSRFNfQlVGRkVSXTsKLXN0YXRpYyBzcGlubG9ja190IGNhZGV0X2lvX2xvY2s7Ci0KLXN0YXRpYyBpbnQgY2FkZXRfcHJvYmUodm9pZCk7CitzdGF0aWMgc3RydWN0IGNhZGV0IGNhZGV0X2NhcmQ7CiAKIC8qCiAgKiBTaWduYWwgU3RyZW5ndGggVGhyZXNob2xkIFZhbHVlcwogICogVGhlIFY0TCBBUEkgc3BlYyBkb2VzIG5vdCBkZWZpbmUgYW55IHBhcnRpY3VsYXIgdW5pdCBmb3IgdGhlIHNpZ25hbAogICogc3RyZW5ndGggdmFsdWUuICBUaGVzZSB2YWx1ZXMgYXJlIGluIG1pY3Jvdm9sdHMgb2YgUkYgYXQgdGhlIHR1bmVyJ3MgaW5wdXQuCiAgKi8KLXN0YXRpYyBfX3UxNiBzaWd0YWJsZVsyXVs0XT17ezUsMTAsMzAsMTUwfSx7MjgsNDAsNjMsMTAwMH19Oworc3RhdGljIF9fdTE2IHNpZ3RhYmxlWzJdWzRdID0geworCXsgIDUsIDEwLCAzMCwgIDE1MCB9LAorCXsgMjgsIDQwLCA2MywgMTAwMCB9Cit9OwogCiAKLXN0YXRpYyBpbnQKLWNhZGV0X2dldHN0ZXJlbyh2b2lkKQorc3RhdGljIGludCBjYWRldF9nZXRzdGVyZW8oc3RydWN0IGNhZGV0ICpkZXYpCiB7CiAJaW50IHJldCA9IFY0TDJfVFVORVJfU1VCX01PTk87Ci0JaWYoY3VydHVuZXIgIT0gMCkJLyogT25seSBGTSBoYXMgc3RlcmVvIGNhcGFiaWxpdHkhICovCisKKwlpZiAoZGV2LT5jdXJ0dW5lciAhPSAwKQkvKiBPbmx5IEZNIGhhcyBzdGVyZW8gY2FwYWJpbGl0eSEgKi8KIAkJcmV0dXJuIFY0TDJfVFVORVJfU1VCX01PTk87CiAKLQlzcGluX2xvY2soJmNhZGV0X2lvX2xvY2spOwotCW91dGIoNyxpbyk7ICAgICAgICAgIC8qIFNlbGVjdCB0dW5lciBjb250cm9sICovCi0JaWYoIChpbmIoaW8rMSkgJiAweDQwKSA9PSAwKQorCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJb3V0Yig3LCBkZXYtPmlvKTsgICAgICAgICAgLyogU2VsZWN0IHR1bmVyIGNvbnRyb2wgKi8KKwlpZiAoKGluYihkZXYtPmlvICsgMSkgJiAweDQwKSA9PSAwKQogCQlyZXQgPSBWNEwyX1RVTkVSX1NVQl9TVEVSRU87Ci0Jc3Bpbl91bmxvY2soJmNhZGV0X2lvX2xvY2spOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdW5zaWduZWQKLWNhZGV0X2dldHR1bmUodm9pZCkKK3N0YXRpYyB1bnNpZ25lZCBjYWRldF9nZXR0dW5lKHN0cnVjdCBjYWRldCAqZGV2KQogewotCWludCBjdXJ2b2wsaTsKLQl1bnNpZ25lZCBmaWZvPTA7CisJaW50IGN1cnZvbCwgaTsKKwl1bnNpZ25lZCBmaWZvID0gMDsKIAogCS8qCiAJICogUHJlcGFyZSBmb3IgcmVhZAogCSAqLwogCi0Jc3Bpbl9sb2NrKCZjYWRldF9pb19sb2NrKTsKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCi0Jb3V0Yig3LGlvKTsgICAgICAgLyogU2VsZWN0IHR1bmVyIGNvbnRyb2wgKi8KLQljdXJ2b2w9aW5iKGlvKzEpOyAvKiBTYXZlIGN1cnJlbnQgdm9sdW1lL211dGUgc2V0dGluZyAqLwotCW91dGIoMHgwMCxpbysxKTsgIC8qIEVuc3VyZSBXUklURS1FTkFCTEUgaXMgTE9XICovCi0JdHVuZXN0YXQ9MHhmZmZmOworCW91dGIoNywgZGV2LT5pbyk7ICAgICAgIC8qIFNlbGVjdCB0dW5lciBjb250cm9sICovCisJY3Vydm9sID0gaW5iKGRldi0+aW8gKyAxKTsgLyogU2F2ZSBjdXJyZW50IHZvbHVtZS9tdXRlIHNldHRpbmcgKi8KKwlvdXRiKDB4MDAsIGRldi0+aW8gKyAxKTsgIC8qIEVuc3VyZSBXUklURS1FTkFCTEUgaXMgTE9XICovCisJZGV2LT50dW5lc3RhdCA9IDB4ZmZmZjsKIAogCS8qCiAJICogUmVhZCB0aGUgc2hpZnQgcmVnaXN0ZXIKIAkgKi8KLQlmb3IoaT0wO2k8MjU7aSsrKSB7Ci0JCWZpZm89KGZpZm88PDEpfCgoaW5iKGlvKzEpPj43KSYweDAxKTsKLQkJaWYoaTwyNCkgewotCQkJb3V0YigweDAxLGlvKzEpOwotCQkJdHVuZXN0YXQmPWluYihpbysxKTsKLQkJCW91dGIoMHgwMCxpbysxKTsKKwlmb3IgKGkgPSAwOyBpIDwgMjU7IGkrKykgeworCQlmaWZvID0gKGZpZm8gPDwgMSkgfCAoKGluYihkZXYtPmlvICsgMSkgPj4gNykgJiAweDAxKTsKKwkJaWYgKGkgPCAyNCkgeworCQkJb3V0YigweDAxLCBkZXYtPmlvICsgMSk7CisJCQlkZXYtPnR1bmVzdGF0ICY9IGluYihkZXYtPmlvICsgMSk7CisJCQlvdXRiKDB4MDAsIGRldi0+aW8gKyAxKTsKIAkJfQogCX0KIAogCS8qCiAJICogUmVzdG9yZSB2b2x1bWUvbXV0ZSBzZXR0aW5nCiAJICovCi0Jb3V0YihjdXJ2b2wsaW8rMSk7Ci0Jc3Bpbl91bmxvY2soJmNhZGV0X2lvX2xvY2spOworCW91dGIoY3Vydm9sLCBkZXYtPmlvICsgMSk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCiAJcmV0dXJuIGZpZm87CiB9CiAKLXN0YXRpYyB1bnNpZ25lZAotY2FkZXRfZ2V0ZnJlcSh2b2lkKQorc3RhdGljIHVuc2lnbmVkIGNhZGV0X2dldGZyZXEoc3RydWN0IGNhZGV0ICpkZXYpCiB7CiAJaW50IGk7Ci0JdW5zaWduZWQgZnJlcT0wLHRlc3QsZmlmbz0wOworCXVuc2lnbmVkIGZyZXEgPSAwLCB0ZXN0LCBmaWZvID0gMDsKIAogCS8qCiAJICogUmVhZCBjdXJyZW50IHR1bmluZwogCSAqLwotCWZpZm89Y2FkZXRfZ2V0dHVuZSgpOworCWZpZm8gPSBjYWRldF9nZXR0dW5lKGRldik7CiAKIAkvKgogCSAqIENvbnZlcnQgdG8gYWN0dWFsIGZyZXF1ZW5jeQogCSAqLwotCWlmKGN1cnR1bmVyPT0wKSB7ICAgIC8qIEZNICovCi0JCXRlc3Q9MTI1MDA7Ci0JCWZvcihpPTA7aTwxNDtpKyspIHsKLQkJCWlmKChmaWZvJjB4MDEpIT0wKSB7Ci0JCQkJZnJlcSs9dGVzdDsKLQkJCX0KLQkJCXRlc3Q9dGVzdDw8MTsKLQkJCWZpZm89Zmlmbz4+MTsKKwlpZiAoZGV2LT5jdXJ0dW5lciA9PSAwKSB7ICAgIC8qIEZNICovCisJCXRlc3QgPSAxMjUwMDsKKwkJZm9yIChpID0gMDsgaSA8IDE0OyBpKyspIHsKKwkJCWlmICgoZmlmbyAmIDB4MDEpICE9IDApCisJCQkJZnJlcSArPSB0ZXN0OworCQkJdGVzdCA9IHRlc3QgPDwgMTsKKwkJCWZpZm8gPSBmaWZvID4+IDE7CiAJCX0KLQkJZnJlcS09MTA3MDAwMDA7ICAgICAgICAgICAvKiBJRiBmcmVxdWVuY3kgaXMgMTAuNyBNSHogKi8KLQkJZnJlcT0oZnJlcSoxNikvMTAwMDAwMDsgICAvKiBNYWtlIGl0IDEvMTYgTUh6ICovCisJCWZyZXEgLT0gMTA3MDAwMDA7ICAgICAgICAgICAvKiBJRiBmcmVxdWVuY3kgaXMgMTAuNyBNSHogKi8KKwkJZnJlcSA9IChmcmVxICogMTYpIC8gMTAwMDAwMDsgICAvKiBNYWtlIGl0IDEvMTYgTUh6ICovCiAJfQotCWlmKGN1cnR1bmVyPT0xKSB7ICAgIC8qIEFNICovCi0JCWZyZXE9KChmaWZvJjB4N2ZmZiktMjAxMCkqMTY7Ci0JfQorCWlmIChkZXYtPmN1cnR1bmVyID09IDEpICAgIC8qIEFNICovCisJCWZyZXEgPSAoKGZpZm8gJiAweDdmZmYpIC0gMjAxMCkgKiAxNjsKIAogCXJldHVybiBmcmVxOwogfQogCi1zdGF0aWMgdm9pZAotY2FkZXRfc2V0dHVuZSh1bnNpZ25lZCBmaWZvKQorc3RhdGljIHZvaWQgY2FkZXRfc2V0dHVuZShzdHJ1Y3QgY2FkZXQgKmRldiwgdW5zaWduZWQgZmlmbykKIHsKIAlpbnQgaTsKIAl1bnNpZ25lZCB0ZXN0OwogCi0Jc3Bpbl9sb2NrKCZjYWRldF9pb19sb2NrKTsKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCi0Jb3V0Yig3LGlvKTsgICAgICAgICAgICAgICAgLyogU2VsZWN0IHR1bmVyIGNvbnRyb2wgKi8KKwlvdXRiKDcsIGRldi0+aW8pOyAgICAgICAgICAgICAgICAvKiBTZWxlY3QgdHVuZXIgY29udHJvbCAqLwogCS8qCiAJICogV3JpdGUgdGhlIHNoaWZ0IHJlZ2lzdGVyCiAJICovCi0JdGVzdD0wOwotCXRlc3Q9KGZpZm8+PjIzKSYweDAyOyAgICAgIC8qIEFsaWduIGRhdGEgZm9yIFNETyAqLwotCXRlc3R8PTB4MWM7ICAgICAgICAgICAgICAgIC8qIFNETT0xLCBTV0U9MSwgU0VOPTEsIFNDSz0wICovCi0Jb3V0Yig3LGlvKTsgICAgICAgICAgICAgICAgLyogU2VsZWN0IHR1bmVyIGNvbnRyb2wgKi8KLQlvdXRiKHRlc3QsaW8rMSk7ICAgICAgICAgICAvKiBJbml0aWFsaXplIGZvciB3cml0ZSAqLwotCWZvcihpPTA7aTwyNTtpKyspIHsKLQkJdGVzdHw9MHgwMTsgICAgICAgICAgICAgIC8qIFRvZ2dsZSBTQ0sgSGlnaCAqLwotCQlvdXRiKHRlc3QsaW8rMSk7Ci0JCXRlc3QmPTB4ZmU7ICAgICAgICAgICAgICAvKiBUb2dnbGUgU0NLIExvdyAqLwotCQlvdXRiKHRlc3QsaW8rMSk7Ci0JCWZpZm89Zmlmbzw8MTsgICAgICAgICAgICAvKiBQcmVwYXJlIHRoZSBuZXh0IGJpdCAqLwotCQl0ZXN0PTB4MWN8KChmaWZvPj4yMykmMHgwMik7Ci0JCW91dGIodGVzdCxpbysxKTsKKwl0ZXN0ID0gMDsKKwl0ZXN0ID0gKGZpZm8gPj4gMjMpICYgMHgwMjsgICAgICAvKiBBbGlnbiBkYXRhIGZvciBTRE8gKi8KKwl0ZXN0IHw9IDB4MWM7ICAgICAgICAgICAgICAgIC8qIFNETT0xLCBTV0U9MSwgU0VOPTEsIFNDSz0wICovCisJb3V0Yig3LCBkZXYtPmlvKTsgICAgICAgICAgICAgICAgLyogU2VsZWN0IHR1bmVyIGNvbnRyb2wgKi8KKwlvdXRiKHRlc3QsIGRldi0+aW8gKyAxKTsgICAgICAgICAgIC8qIEluaXRpYWxpemUgZm9yIHdyaXRlICovCisJZm9yIChpID0gMDsgaSA8IDI1OyBpKyspIHsKKwkJdGVzdCB8PSAweDAxOyAgICAgICAgICAgICAgLyogVG9nZ2xlIFNDSyBIaWdoICovCisJCW91dGIodGVzdCwgZGV2LT5pbyArIDEpOworCQl0ZXN0ICY9IDB4ZmU7ICAgICAgICAgICAgICAvKiBUb2dnbGUgU0NLIExvdyAqLworCQlvdXRiKHRlc3QsIGRldi0+aW8gKyAxKTsKKwkJZmlmbyA9IGZpZm8gPDwgMTsgICAgICAgICAgICAvKiBQcmVwYXJlIHRoZSBuZXh0IGJpdCAqLworCQl0ZXN0ID0gMHgxYyB8ICgoZmlmbyA+PiAyMykgJiAweDAyKTsKKwkJb3V0Yih0ZXN0LCBkZXYtPmlvICsgMSk7CiAJfQotCXNwaW5fdW5sb2NrKCZjYWRldF9pb19sb2NrKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkCi1jYWRldF9zZXRmcmVxKHVuc2lnbmVkIGZyZXEpCitzdGF0aWMgdm9pZCBjYWRldF9zZXRmcmVxKHN0cnVjdCBjYWRldCAqZGV2LCB1bnNpZ25lZCBmcmVxKQogewogCXVuc2lnbmVkIGZpZm87Ci0JaW50IGksaix0ZXN0OworCWludCBpLCBqLCB0ZXN0OwogCWludCBjdXJ2b2w7CiAKIAkvKgogCSAqIEZvcm11bGF0ZSBhIGZpZm8gY29tbWFuZAogCSAqLwotCWZpZm89MDsKLQlpZihjdXJ0dW5lcj09MCkgeyAgICAvKiBGTSAqLwotCQl0ZXN0PTEwMjQwMDsKLQkJZnJlcT0oZnJlcSoxMDAwKS8xNjsgICAgICAgLyogTWFrZSBpdCBrSHogKi8KLQkJZnJlcSs9MTA3MDA7ICAgICAgICAgICAgICAgLyogSUYgaXMgMTA3MDAga0h6ICovCi0JCWZvcihpPTA7aTwxNDtpKyspIHsKLQkJCWZpZm89Zmlmbzw8MTsKLQkJCWlmKGZyZXE+PXRlc3QpIHsKLQkJCQlmaWZvfD0weDAxOwotCQkJCWZyZXEtPXRlc3Q7CisJZmlmbyA9IDA7CisJaWYgKGRldi0+Y3VydHVuZXIgPT0gMCkgeyAgICAvKiBGTSAqLworCQl0ZXN0ID0gMTAyNDAwOworCQlmcmVxID0gKGZyZXEgKiAxMDAwKSAvIDE2OyAgICAgICAvKiBNYWtlIGl0IGtIeiAqLworCQlmcmVxICs9IDEwNzAwOyAgICAgICAgICAgICAgIC8qIElGIGlzIDEwNzAwIGtIeiAqLworCQlmb3IgKGkgPSAwOyBpIDwgMTQ7IGkrKykgeworCQkJZmlmbyA9IGZpZm8gPDwgMTsKKwkJCWlmIChmcmVxID49IHRlc3QpIHsKKwkJCQlmaWZvIHw9IDB4MDE7CisJCQkJZnJlcSAtPSB0ZXN0OwogCQkJfQotCQkJdGVzdD10ZXN0Pj4xOworCQkJdGVzdCA9IHRlc3QgPj4gMTsKIAkJfQogCX0KLQlpZihjdXJ0dW5lcj09MSkgeyAgICAvKiBBTSAqLwotCQlmaWZvPShmcmVxLzE2KSsyMDEwOyAgICAgICAgICAgIC8qIE1ha2UgaXQga0h6ICovCi0JCWZpZm98PTB4MTAwMDAwOyAgICAgICAgICAgIC8qIFNlbGVjdCBBTSBCYW5kICovCisJaWYgKGRldi0+Y3VydHVuZXIgPT0gMSkgeyAgICAvKiBBTSAqLworCQlmaWZvID0gKGZyZXEgLyAxNikgKyAyMDEwOyAgICAgICAgICAgIC8qIE1ha2UgaXQga0h6ICovCisJCWZpZm8gfD0gMHgxMDAwMDA7ICAgICAgICAgICAgLyogU2VsZWN0IEFNIEJhbmQgKi8KIAl9CiAKIAkvKgogCSAqIFNhdmUgY3VycmVudCB2b2x1bWUvbXV0ZSBzZXR0aW5nCiAJICovCiAKLQlzcGluX2xvY2soJmNhZGV0X2lvX2xvY2spOwotCW91dGIoNyxpbyk7ICAgICAgICAgICAgICAgIC8qIFNlbGVjdCB0dW5lciBjb250cm9sICovCi0JY3Vydm9sPWluYihpbysxKTsKLQlzcGluX3VubG9jaygmY2FkZXRfaW9fbG9jayk7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlvdXRiKDcsIGRldi0+aW8pOyAgICAgICAgICAgICAgICAvKiBTZWxlY3QgdHVuZXIgY29udHJvbCAqLworCWN1cnZvbCA9IGluYihkZXYtPmlvICsgMSk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCiAJLyoKIAkgKiBUdW5lIHRoZSBjYXJkCiAJICovCi0JZm9yKGo9MztqPi0xO2otLSkgewotCQljYWRldF9zZXR0dW5lKGZpZm98KGo8PDE2KSk7CisJZm9yIChqID0gMzsgaiA+IC0xOyBqLS0pIHsKKwkJY2FkZXRfc2V0dHVuZShkZXYsIGZpZm8gfCAoaiA8PCAxNikpOwogCi0JCXNwaW5fbG9jaygmY2FkZXRfaW9fbG9jayk7Ci0JCW91dGIoNyxpbyk7ICAgICAgICAgLyogU2VsZWN0IHR1bmVyIGNvbnRyb2wgKi8KLQkJb3V0YihjdXJ2b2wsaW8rMSk7Ci0JCXNwaW5fdW5sb2NrKCZjYWRldF9pb19sb2NrKTsKKwkJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwkJb3V0Yig3LCBkZXYtPmlvKTsgICAgICAgICAvKiBTZWxlY3QgdHVuZXIgY29udHJvbCAqLworCQlvdXRiKGN1cnZvbCwgZGV2LT5pbyArIDEpOworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAKIAkJbXNsZWVwKDEwMCk7CiAKLQkJY2FkZXRfZ2V0dHVuZSgpOwotCQlpZigodHVuZXN0YXQgJiAweDQwKSA9PSAwKSB7ICAgLyogVHVuZWQgKi8KLQkJCXNpZ3N0cmVuZ3RoPXNpZ3RhYmxlW2N1cnR1bmVyXVtqXTsKKwkJY2FkZXRfZ2V0dHVuZShkZXYpOworCQlpZiAoKGRldi0+dHVuZXN0YXQgJiAweDQwKSA9PSAwKSB7ICAgLyogVHVuZWQgKi8KKwkJCWRldi0+c2lnc3RyZW5ndGggPSBzaWd0YWJsZVtkZXYtPmN1cnR1bmVyXVtqXTsKIAkJCXJldHVybjsKIAkJfQogCX0KLQlzaWdzdHJlbmd0aD0wOworCWRldi0+c2lnc3RyZW5ndGggPSAwOwogfQogCiAKLXN0YXRpYyBpbnQKLWNhZGV0X2dldHZvbCh2b2lkKQorc3RhdGljIGludCBjYWRldF9nZXR2b2woc3RydWN0IGNhZGV0ICpkZXYpCiB7CiAJaW50IHJldCA9IDA7CiAKLQlzcGluX2xvY2soJmNhZGV0X2lvX2xvY2spOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAKLQlvdXRiKDcsaW8pOyAgICAgICAgICAgICAgICAvKiBTZWxlY3QgdHVuZXIgY29udHJvbCAqLwotCWlmKChpbmIoaW8gKyAxKSAmIDB4MjApICE9IDApCisJb3V0Yig3LCBkZXYtPmlvKTsgICAgICAgICAgICAgICAgLyogU2VsZWN0IHR1bmVyIGNvbnRyb2wgKi8KKwlpZiAoKGluYihkZXYtPmlvICsgMSkgJiAweDIwKSAhPSAwKQogCQlyZXQgPSAweGZmZmY7CiAKLQlzcGluX3VubG9jaygmY2FkZXRfaW9fbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCXJldHVybiByZXQ7CiB9CiAKIAotc3RhdGljIHZvaWQKLWNhZGV0X3NldHZvbChpbnQgdm9sKQorc3RhdGljIHZvaWQgY2FkZXRfc2V0dm9sKHN0cnVjdCBjYWRldCAqZGV2LCBpbnQgdm9sKQogewotCXNwaW5fbG9jaygmY2FkZXRfaW9fbG9jayk7Ci0Jb3V0Yig3LGlvKTsgICAgICAgICAgICAgICAgLyogU2VsZWN0IHR1bmVyIGNvbnRyb2wgKi8KLQlpZih2b2w+MCkKLQkJb3V0YigweDIwLGlvKzEpOworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJb3V0Yig3LCBkZXYtPmlvKTsgICAgICAgICAgICAgICAgLyogU2VsZWN0IHR1bmVyIGNvbnRyb2wgKi8KKwlpZiAodm9sID4gMCkKKwkJb3V0YigweDIwLCBkZXYtPmlvICsgMSk7CiAJZWxzZQotCQlvdXRiKDB4MDAsaW8rMSk7Ci0Jc3Bpbl91bmxvY2soJmNhZGV0X2lvX2xvY2spOworCQlvdXRiKDB4MDAsIGRldi0+aW8gKyAxKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkCi1jYWRldF9oYW5kbGVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyB2b2lkIGNhZGV0X2hhbmRsZXIodW5zaWduZWQgbG9uZyBkYXRhKQogewotCS8qCi0JICogU2VydmljZSB0aGUgUkRTIGZpZm8KLQkgKi8KKwlzdHJ1Y3QgY2FkZXQgKmRldiA9ICh2b2lkICopZGF0YTsKIAotCWlmKHNwaW5fdHJ5bG9jaygmY2FkZXRfaW9fbG9jaykpCi0JewotCQlvdXRiKDB4Myxpbyk7ICAgICAgIC8qIFNlbGVjdCBSRFMgRGVjb2RlciBDb250cm9sICovCi0JCWlmKChpbmIoaW8rMSkmMHgyMCkhPTApIHsKKwkvKiBTZXJ2aWNlIHRoZSBSRFMgZmlmbyAqLworCWlmIChtdXRleF90cnlsb2NrKCZkZXYtPmxvY2spKSB7CisJCW91dGIoMHgzLCBkZXYtPmlvKTsgICAgICAgLyogU2VsZWN0IFJEUyBEZWNvZGVyIENvbnRyb2wgKi8KKwkJaWYgKChpbmIoZGV2LT5pbyArIDEpICYgMHgyMCkgIT0gMCkKIAkJCXByaW50ayhLRVJOX0NSSVQgImNhZGV0OiBSRFMgZmlmbyBvdmVyZmxvd1xuIik7Ci0JCX0KLQkJb3V0YigweDgwLGlvKTsgICAgICAvKiBTZWxlY3QgUkRTIGZpZm8gKi8KLQkJd2hpbGUoKGluYihpbykmMHg4MCkhPTApIHsKLQkJCXJkc2J1ZltyZHNpbl09aW5iKGlvKzEpOwotCQkJaWYocmRzaW49PXJkc291dCkKKwkJb3V0YigweDgwLCBkZXYtPmlvKTsgICAgICAvKiBTZWxlY3QgUkRTIGZpZm8gKi8KKwkJd2hpbGUgKChpbmIoZGV2LT5pbykgJiAweDgwKSAhPSAwKSB7CisJCQlkZXYtPnJkc2J1ZltkZXYtPnJkc2luXSA9IGluYihkZXYtPmlvICsgMSk7CisJCQlpZiAoZGV2LT5yZHNpbiA9PSBkZXYtPnJkc291dCkKIAkJCQlwcmludGsoS0VSTl9XQVJOSU5HICJjYWRldDogUkRTIGJ1ZmZlciBvdmVyZmxvd1xuIik7CiAJCQllbHNlCi0JCQkJcmRzaW4rKzsKKwkJCQlkZXYtPnJkc2luKys7CiAJCX0KLQkJc3Bpbl91bmxvY2soJmNhZGV0X2lvX2xvY2spOworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJfQogCiAJLyoKIAkgKiBTZXJ2aWNlIHBlbmRpbmcgcmVhZAogCSAqLwotCWlmKCByZHNpbiE9cmRzb3V0KQotCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnJlYWRfcXVldWUpOworCWlmIChkZXYtPnJkc2luICE9IGRldi0+cmRzb3V0KQorCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmRldi0+cmVhZF9xdWV1ZSk7CiAKIAkvKgogCSAqIENsZWFuIHVwIGFuZCBleGl0CiAJICovCi0JaW5pdF90aW1lcigmcmVhZHRpbWVyKTsKLQlyZWFkdGltZXIuZnVuY3Rpb249Y2FkZXRfaGFuZGxlcjsKLQlyZWFkdGltZXIuZGF0YT0odW5zaWduZWQgbG9uZykwOwotCXJlYWR0aW1lci5leHBpcmVzPWppZmZpZXMrbXNlY3NfdG9famlmZmllcyg1MCk7Ci0JYWRkX3RpbWVyKCZyZWFkdGltZXIpOworCWluaXRfdGltZXIoJmRldi0+cmVhZHRpbWVyKTsKKwlkZXYtPnJlYWR0aW1lci5mdW5jdGlvbiA9IGNhZGV0X2hhbmRsZXI7CisJZGV2LT5yZWFkdGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKTA7CisJZGV2LT5yZWFkdGltZXIuZXhwaXJlcyA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDUwKTsKKwlhZGRfdGltZXIoJmRldi0+cmVhZHRpbWVyKTsKIH0KIAogCi0KLXN0YXRpYyBzc2l6ZV90Ci1jYWRldF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqZGF0YSwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCitzdGF0aWMgc3NpemVfdCBjYWRldF9yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqZGF0YSwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0JaW50IGk9MDsKKwlzdHJ1Y3QgY2FkZXQgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJdW5zaWduZWQgY2hhciByZWFkYnVmW1JEU19CVUZGRVJdOworCWludCBpID0gMDsKIAotCWlmKHJkc3N0YXQ9PTApIHsKLQkJc3Bpbl9sb2NrKCZjYWRldF9pb19sb2NrKTsKLQkJcmRzc3RhdD0xOwotCQlvdXRiKDB4ODAsaW8pOyAgICAgICAgLyogU2VsZWN0IFJEUyBmaWZvICovCi0JCXNwaW5fdW5sb2NrKCZjYWRldF9pb19sb2NrKTsKLQkJaW5pdF90aW1lcigmcmVhZHRpbWVyKTsKLQkJcmVhZHRpbWVyLmZ1bmN0aW9uPWNhZGV0X2hhbmRsZXI7Ci0JCXJlYWR0aW1lci5kYXRhPSh1bnNpZ25lZCBsb25nKTA7Ci0JCXJlYWR0aW1lci5leHBpcmVzPWppZmZpZXMrbXNlY3NfdG9famlmZmllcyg1MCk7Ci0JCWFkZF90aW1lcigmcmVhZHRpbWVyKTsKKwlpZiAoZGV2LT5yZHNzdGF0ID09IDApIHsKKwkJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwkJZGV2LT5yZHNzdGF0ID0gMTsKKwkJb3V0YigweDgwLCBkZXYtPmlvKTsgICAgICAgIC8qIFNlbGVjdCBSRFMgZmlmbyAqLworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJCWluaXRfdGltZXIoJmRldi0+cmVhZHRpbWVyKTsKKwkJZGV2LT5yZWFkdGltZXIuZnVuY3Rpb24gPSBjYWRldF9oYW5kbGVyOworCQlkZXYtPnJlYWR0aW1lci5kYXRhID0gKHVuc2lnbmVkIGxvbmcpZGV2OworCQlkZXYtPnJlYWR0aW1lci5leHBpcmVzID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNTApOworCQlhZGRfdGltZXIoJmRldi0+cmVhZHRpbWVyKTsKIAl9Ci0JaWYocmRzaW49PXJkc291dCkgeworCWlmIChkZXYtPnJkc2luID09IGRldi0+cmRzb3V0KSB7CiAJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykKIAkJCXJldHVybiAtRVdPVUxEQkxPQ0s7Ci0JCWludGVycnVwdGlibGVfc2xlZXBfb24oJnJlYWRfcXVldWUpOworCQlpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKCZkZXYtPnJlYWRfcXVldWUpOwogCX0KLQl3aGlsZSggaTxjb3VudCAmJiByZHNpbiE9cmRzb3V0KQotCQlyZWFkYnVmW2krK109cmRzYnVmW3Jkc291dCsrXTsKKwl3aGlsZSAoaSA8IGNvdW50ICYmIGRldi0+cmRzaW4gIT0gZGV2LT5yZHNvdXQpCisJCXJlYWRidWZbaSsrXSA9IGRldi0+cmRzYnVmW2Rldi0+cmRzb3V0KytdOwogCi0JaWYgKGNvcHlfdG9fdXNlcihkYXRhLHJlYWRidWYsaSkpCisJaWYgKGNvcHlfdG9fdXNlcihkYXRhLCByZWFkYnVmLCBpKSkKIAkJcmV0dXJuIC1FRkFVTFQ7CiAJcmV0dXJuIGk7CiB9CkBAIC0zNzAsMzggKzM1NSw0MCBAQAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqdikKIHsKLQl2LT5jYXBhYmlsaXRpZXMgPQotCQlWNEwyX0NBUF9UVU5FUiB8Ci0JCVY0TDJfQ0FQX1JFQURXUklURTsKKwlzdHJsY3B5KHYtPmRyaXZlciwgIkFEUyBDYWRldCIsIHNpemVvZih2LT5kcml2ZXIpKTsKKwlzdHJsY3B5KHYtPmNhcmQsICJBRFMgQ2FkZXQiLCBzaXplb2Yodi0+Y2FyZCkpOworCXN0cmxjcHkodi0+YnVzX2luZm8sICJJU0EiLCBzaXplb2Yodi0+YnVzX2luZm8pKTsKIAl2LT52ZXJzaW9uID0gQ0FERVRfVkVSU0lPTjsKLQlzdHJjcHkodi0+ZHJpdmVyLCAiQURTIENhZGV0Iik7Ci0Jc3RyY3B5KHYtPmNhcmQsICJBRFMgQ2FkZXQiKTsKKwl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPIHwgVjRMMl9DQVBfUkVBRFdSSVRFOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogeworCXN0cnVjdCBjYWRldCAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwogCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCXN3aXRjaCAodi0+aW5kZXgpIHsKIAljYXNlIDA6Ci0JCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKKwkJc3RybGNweSh2LT5uYW1lLCAiRk0iLCBzaXplb2Yodi0+bmFtZSkpOwogCQl2LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfU1RFUkVPOwogCQl2LT5yYW5nZWxvdyA9IDE0MDA7ICAgICAvKiA4Ny41IE1IeiAqLwogCQl2LT5yYW5nZWhpZ2ggPSAxNzI4OyAgICAvKiAxMDguMCBNSHogKi8KLQkJdi0+cnhzdWJjaGFucz1jYWRldF9nZXRzdGVyZW8oKTsKLQkJc3dpdGNoICh2LT5yeHN1YmNoYW5zKXsKKwkJdi0+cnhzdWJjaGFucyA9IGNhZGV0X2dldHN0ZXJlbyhkZXYpOworCQlzd2l0Y2ggKHYtPnJ4c3ViY2hhbnMpIHsKIAkJY2FzZSBWNEwyX1RVTkVSX1NVQl9NT05POgogCQkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POwogCQkJYnJlYWs7CiAJCWNhc2UgVjRMMl9UVU5FUl9TVUJfU1RFUkVPOgogCQkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CiAJCQlicmVhazsKLQkJZGVmYXVsdDogOworCQlkZWZhdWx0OgorCQkJYnJlYWs7CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSAxOgotCQlzdHJjcHkodi0+bmFtZSwgIkFNIik7CisJCXN0cmxjcHkodi0+bmFtZSwgIkFNIiwgc2l6ZW9mKHYtPm5hbWUpKTsKIAkJdi0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX0xPVzsKIAkJdi0+cmFuZ2Vsb3cgPSA4MzIwOyAgICAgIC8qIDUyMCBrSHogKi8KIAkJdi0+cmFuZ2VoaWdoID0gMjY0MDA7ICAgIC8qIDE2NTAga0h6ICovCkBAIC00MTEsMjUgKzM5OCwyOSBAQAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQl2LT5zaWduYWwgPSBzaWdzdHJlbmd0aDsgLyogV2UgbWlnaHQgbmVlZCB0byBtb2RpZnkgc2NhbGluZyBvZiB0aGlzICovCisJdi0+c2lnbmFsID0gZGV2LT5zaWdzdHJlbmd0aDsgLyogV2UgbWlnaHQgbmVlZCB0byBtb2RpZnkgc2NhbGluZyBvZiB0aGlzICovCiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0JaWYoKHYtPmluZGV4ICE9IDApJiYodi0+aW5kZXggIT0gMSkpCisJc3RydWN0IGNhZGV0ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJaWYgKHYtPmluZGV4ICE9IDAgJiYgdi0+aW5kZXggIT0gMSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JY3VydHVuZXIgPSB2LT5pbmRleDsKKwlkZXYtPmN1cnR1bmVyID0gdi0+aW5kZXg7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlmLT50dW5lciA9IGN1cnR1bmVyOworCXN0cnVjdCBjYWRldCAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCWYtPnR1bmVyID0gZGV2LT5jdXJ0dW5lcjsKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKLQlmLT5mcmVxdWVuY3kgPSBjYWRldF9nZXRmcmVxKCk7CisJZi0+ZnJlcXVlbmN5ID0gY2FkZXRfZ2V0ZnJlcShkZXYpOwogCXJldHVybiAwOwogfQogCkBAIC00MzcsMjcgKzQyOCwyNiBAQAogc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogeworCXN0cnVjdCBjYWRldCAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwogCWlmIChmLT50eXBlICE9IFY0TDJfVFVORVJfUkFESU8pCiAJCXJldHVybiAtRUlOVkFMOwotCWlmKChjdXJ0dW5lcj09MCkmJigoZi0+ZnJlcXVlbmN5PDE0MDApfHwoZi0+ZnJlcXVlbmN5PjE3MjgpKSkKKwlpZiAoZGV2LT5jdXJ0dW5lciA9PSAwICYmIChmLT5mcmVxdWVuY3kgPCAxNDAwIHx8IGYtPmZyZXF1ZW5jeSA+IDE3MjgpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlpZigoY3VydHVuZXI9PTEpJiYoKGYtPmZyZXF1ZW5jeTw4MzIwKXx8KGYtPmZyZXF1ZW5jeT4yNjQwMCkpKQorCWlmIChkZXYtPmN1cnR1bmVyID09IDEgJiYgKGYtPmZyZXF1ZW5jeSA8IDgzMjAgfHwgZi0+ZnJlcXVlbmN5ID4gMjY0MDApKQogCQlyZXR1cm4gLUVJTlZBTDsKLQljYWRldF9zZXRmcmVxKGYtPmZyZXF1ZW5jeSk7CisJY2FkZXRfc2V0ZnJlcShkZXYsIGYtPmZyZXF1ZW5jeSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQogewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW9fcWN0cmwpOyBpKyspIHsKLQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gcmFkaW9fcWN0cmxbaV0uaWQpIHsKLQkJCW1lbWNweShxYywgJihyYWRpb19xY3RybFtpXSksCi0JCQkJCQlzaXplb2YoKnFjKSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDEpOworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDB4ZmYsIDEsIDB4ZmYpOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTQ2NSwxMiArNDU1LDE0IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzd2l0Y2ggKGN0cmwtPmlkKXsKKwlzdHJ1Y3QgY2FkZXQgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOiAvKiBUT0RPOiBIYW5kbGUgdGhpcyBjb3JyZWN0bHkgKi8KLQkJY3RybC0+dmFsdWUgPSAoY2FkZXRfZ2V0dm9sKCkgPT0gMCk7CisJCWN0cmwtPnZhbHVlID0gKGNhZGV0X2dldHZvbChkZXYpID09IDApOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJY3RybC0+dmFsdWUgPSBjYWRldF9nZXR2b2woKTsKKwkJY3RybC0+dmFsdWUgPSBjYWRldF9nZXR2b2woZGV2KTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00ODEsMTUgKzQ3MywxNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7CisJc3RydWN0IGNhZGV0ICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCiAJc3dpdGNoIChjdHJsLT5pZCl7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOiAvKiBUT0RPOiBIYW5kbGUgdGhpcyBjb3JyZWN0bHkgKi8KIAkJaWYgKGN0cmwtPnZhbHVlKQotCQkJY2FkZXRfc2V0dm9sKDApOworCQkJY2FkZXRfc2V0dm9sKGRldiwgMCk7CiAJCWVsc2UKLQkJCWNhZGV0X3NldHZvbCgweGZmZmYpOworCQkJY2FkZXRfc2V0dm9sKGRldiwgMHhmZmZmKTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCWNhZGV0X3NldHZvbChjdHJsLT52YWx1ZSk7CisJCWNhZGV0X3NldHZvbChkZXYsIGN0cmwtPnZhbHVlKTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC00OTcsMTYgKzQ5MSw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCi17Ci0JaWYgKGEtPmluZGV4ID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0Jc3RyY3B5KGEtPm5hbWUsICJSYWRpbyIpOwotCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKIHsKIAkqaSA9IDA7CkBAIC01MTUsNDMgKzQ5OSw1MiBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKIHsKLQlpZiAoaSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gaSA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCWEtPmluZGV4ID0gMDsKKwlzdHJsY3B5KGEtPm5hbWUsICJSYWRpbyIsIHNpemVvZihhLT5uYW1lKSk7CisJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKIHsKLQlpZiAoYS0+aW5kZXggIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGEtPmluZGV4ID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgY2FkZXRfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKKwlzdHJ1Y3QgY2FkZXQgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwlkZXYtPnVzZXJzKys7CisJaWYgKDEgPT0gZGV2LT51c2VycykKKwkJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT5yZWFkX3F1ZXVlKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotY2FkZXRfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgY2FkZXRfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQl1c2VycysrOwotCWlmICgxID09IHVzZXJzKSBpbml0X3dhaXRxdWV1ZV9oZWFkKCZyZWFkX3F1ZXVlKTsKLQlyZXR1cm4gMDsKLX0KKwlzdHJ1Y3QgY2FkZXQgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKLXN0YXRpYyBpbnQKLWNhZGV0X3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JdXNlcnMtLTsKLQlpZiAoMCA9PSB1c2Vycyl7Ci0JCWRlbF90aW1lcl9zeW5jKCZyZWFkdGltZXIpOwotCQlyZHNzdGF0PTA7CisJZGV2LT51c2Vycy0tOworCWlmICgwID09IGRldi0+dXNlcnMpIHsKKwkJZGVsX3RpbWVyX3N5bmMoJmRldi0+cmVhZHRpbWVyKTsKKwkJZGV2LT5yZHNzdGF0ID0gMDsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1bnNpZ25lZCBpbnQKLWNhZGV0X3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCkKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2FkZXRfcG9sbChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICp3YWl0KQogewotCXBvbGxfd2FpdChmaWxlLCZyZWFkX3F1ZXVlLHdhaXQpOwotCWlmKHJkc2luICE9IHJkc291dCkKKwlzdHJ1Y3QgY2FkZXQgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwlwb2xsX3dhaXQoZmlsZSwgJmRldi0+cmVhZF9xdWV1ZSwgd2FpdCk7CisJaWYgKGRldi0+cmRzaW4gIT0gZGV2LT5yZHNvdXQpCiAJCXJldHVybiBQT0xMSU4gfCBQT0xMUkROT1JNOwogCXJldHVybiAwOwogfQpAQCAtNTgxLDEzICs1NzQsNiBAQAogCS52aWRpb2Nfc19pbnB1dCAgICAgPSB2aWRpb2Nfc19pbnB1dCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGNhZGV0X3JhZGlvID0gewotCS5uYW1lCQk9ICJDYWRldCByYWRpbyIsCi0JLmZvcHMgICAgICAgICAgID0gJmNhZGV0X2ZvcHMsCi0JLmlvY3RsX29wcyAJPSAmY2FkZXRfaW9jdGxfb3BzLAotCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCi19OwotCiAjaWZkZWYgQ09ORklHX1BOUAogCiBzdGF0aWMgc3RydWN0IHBucF9kZXZpY2VfaWQgY2FkZXRfcG5wX2RldmljZXNbXSA9IHsKQEAgLTU5OCw3ICs1ODQsNyBAQAogCiBNT0RVTEVfREVWSUNFX1RBQkxFKHBucCwgY2FkZXRfcG5wX2RldmljZXMpOwogCi1zdGF0aWMgaW50IGNhZGV0X3BucF9wcm9iZShzdHJ1Y3QgcG5wX2RldiAqIGRldiwgY29uc3Qgc3RydWN0IHBucF9kZXZpY2VfaWQgKmRldl9pZCkKK3N0YXRpYyBpbnQgY2FkZXRfcG5wX3Byb2JlKHN0cnVjdCBwbnBfZGV2ICpkZXYsIGNvbnN0IHN0cnVjdCBwbnBfZGV2aWNlX2lkICpkZXZfaWQpCiB7CiAJaWYgKCFkZXYpCiAJCXJldHVybiAtRU5PREVWOwpAQCAtNjA2LDEzICs1OTIsMTIgQEAKIAlpZiAoaW8gPiAwKQogCQlyZXR1cm4gLUVCVVNZOwogCi0JaWYgKCFwbnBfcG9ydF92YWxpZChkZXYsIDApKSB7CisJaWYgKCFwbnBfcG9ydF92YWxpZChkZXYsIDApKQogCQlyZXR1cm4gLUVOT0RFVjsKLQl9CiAKIAlpbyA9IHBucF9wb3J0X3N0YXJ0KGRldiwgMCk7CiAKLQlwcmludGsgKCJyYWRpby1jYWRldDogUG5QIHJlcG9ydHMgZGV2aWNlIGF0ICUjeFxuIiwgaW8pOworCXByaW50ayhLRVJOX0lORk8gInJhZGlvLWNhZGV0OiBQblAgcmVwb3J0cyBkZXZpY2UgYXQgJSN4XG4iLCBpbyk7CiAKIAlyZXR1cm4gaW87CiB9CkBAIC02MjgsMjMgKzYxMywyMyBAQAogc3RhdGljIHN0cnVjdCBwbnBfZHJpdmVyIGNhZGV0X3BucF9kcml2ZXI7CiAjZW5kaWYKIAotc3RhdGljIGludCBjYWRldF9wcm9iZSh2b2lkKQorc3RhdGljIHZvaWQgY2FkZXRfcHJvYmUoc3RydWN0IGNhZGV0ICpkZXYpCiB7Ci0Jc3RhdGljIGludCBpb3ZhbHNbOF09ezB4MzMwLDB4MzMyLDB4MzM0LDB4MzM2LDB4MzM4LDB4MzNhLDB4MzNjLDB4MzNlfTsKKwlzdGF0aWMgaW50IGlvdmFsc1s4XSA9IHsgMHgzMzAsIDB4MzMyLCAweDMzNCwgMHgzMzYsIDB4MzM4LCAweDMzYSwgMHgzM2MsIDB4MzNlIH07CiAJaW50IGk7CiAKLQlmb3IoaT0wO2k8ODtpKyspIHsKLQkJaW89aW92YWxzW2ldOwotCQlpZiAocmVxdWVzdF9yZWdpb24oaW8sIDIsICJjYWRldC1wcm9iZSIpKSB7Ci0JCQljYWRldF9zZXRmcmVxKDE0MTApOwotCQkJaWYoY2FkZXRfZ2V0ZnJlcSgpPT0xNDEwKSB7Ci0JCQkJcmVsZWFzZV9yZWdpb24oaW8sIDIpOwotCQkJCXJldHVybiBpbzsKKwlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB7CisJCWRldi0+aW8gPSBpb3ZhbHNbaV07CisJCWlmIChyZXF1ZXN0X3JlZ2lvbihkZXYtPmlvLCAyLCAiY2FkZXQtcHJvYmUiKSkgeworCQkJY2FkZXRfc2V0ZnJlcShkZXYsIDE0MTApOworCQkJaWYgKGNhZGV0X2dldGZyZXEoZGV2KSA9PSAxNDEwKSB7CisJCQkJcmVsZWFzZV9yZWdpb24oZGV2LT5pbywgMik7CisJCQkJcmV0dXJuOwogCQkJfQotCQkJcmVsZWFzZV9yZWdpb24oaW8sIDIpOworCQkJcmVsZWFzZV9yZWdpb24oZGV2LT5pbywgMik7CiAJCX0KIAl9Ci0JcmV0dXJuIC0xOworCWRldi0+aW8gPSAtMTsKIH0KIAogLyoKQEAgLTY1NCw1OSArNjM5LDY5IEBACiAKIHN0YXRpYyBpbnQgX19pbml0IGNhZGV0X2luaXQodm9pZCkKIHsKLQlzcGluX2xvY2tfaW5pdCgmY2FkZXRfaW9fbG9jayk7CisJc3RydWN0IGNhZGV0ICpkZXYgPSAmY2FkZXRfY2FyZDsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gJmRldi0+djRsMl9kZXY7CisJaW50IHJlczsKIAotCS8qCi0JICoJSWYgYSBwcm9iZSB3YXMgcmVxdWVzdGVkIHRoZW4gcHJvYmUgSVNBUG5QIGZpcnN0IChzYWZlc3QpCi0JICovCisJc3RybGNweSh2NGwyX2Rldi0+bmFtZSwgImNhZGV0Iiwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSk7CisJbXV0ZXhfaW5pdCgmZGV2LT5sb2NrKTsKKworCS8qIElmIGEgcHJvYmUgd2FzIHJlcXVlc3RlZCB0aGVuIHByb2JlIElTQVBuUCBmaXJzdCAoc2FmZXN0KSAqLwogCWlmIChpbyA8IDApCiAJCXBucF9yZWdpc3Rlcl9kcml2ZXIoJmNhZGV0X3BucF9kcml2ZXIpOwotCS8qCi0JICoJSWYgdGhhdCBmYWlscyB0aGVuIHByb2JlIHVuc2FmZWx5IGlmIHByb2JlIGlzIHJlcXVlc3RlZAotCSAqLwotCWlmKGlvIDwgMCkKLQkJaW8gPSBjYWRldF9wcm9iZSAoKTsKKwlkZXYtPmlvID0gaW87CiAKLQkvKgotCSAqCUVsc2Ugd2UgYmFpbCBvdXQKLQkgKi8KKwkvKiBJZiB0aGF0IGZhaWxzIHRoZW4gcHJvYmUgdW5zYWZlbHkgaWYgcHJvYmUgaXMgcmVxdWVzdGVkICovCisJaWYgKGRldi0+aW8gPCAwKQorCQljYWRldF9wcm9iZShkZXYpOwogCi0JaWYoaW8gPCAwKSB7CisJLyogRWxzZSB3ZSBiYWlsIG91dCAqLworCWlmIChkZXYtPmlvIDwgMCkgewogI2lmZGVmIE1PRFVMRQotCQlwcmludGsoS0VSTl9FUlIgIllvdSBtdXN0IHNldCBhbiBJL08gYWRkcmVzcyB3aXRoIGlvPTB4Pz8/XG4iKTsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJ5b3UgbXVzdCBzZXQgYW4gSS9PIGFkZHJlc3Mgd2l0aCBpbz0weDMzMCwgMHgzMzIsIDB4MzM0LFxuIik7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiMHgzMzYsIDB4MzM4LCAweDMzYSwgMHgzM2Mgb3IgMHgzM2VcbiIpOwogI2VuZGlmCiAJCWdvdG8gZmFpbDsKIAl9Ci0JaWYgKCFyZXF1ZXN0X3JlZ2lvbihpbywyLCJjYWRldCIpKQorCWlmICghcmVxdWVzdF9yZWdpb24oZGV2LT5pbywgMiwgImNhZGV0IikpCiAJCWdvdG8gZmFpbDsKLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZjYWRldF9yYWRpbywgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKLQkJcmVsZWFzZV9yZWdpb24oaW8sMik7CisKKwlyZXMgPSB2NGwyX2RldmljZV9yZWdpc3RlcihOVUxMLCB2NGwyX2Rldik7CisJaWYgKHJlcyA8IDApIHsKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pbywgMik7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiY291bGQgbm90IHJlZ2lzdGVyIHY0bDJfZGV2aWNlXG4iKTsKIAkJZ290byBmYWlsOwogCX0KLQlwcmludGsoS0VSTl9JTkZPICJBRFMgQ2FkZXQgUmFkaW8gQ2FyZCBhdCAweCV4XG4iLGlvKTsKKworCXN0cmxjcHkoZGV2LT52ZGV2Lm5hbWUsIHY0bDJfZGV2LT5uYW1lLCBzaXplb2YoZGV2LT52ZGV2Lm5hbWUpKTsKKwlkZXYtPnZkZXYudjRsMl9kZXYgPSB2NGwyX2RldjsKKwlkZXYtPnZkZXYuZm9wcyA9ICZjYWRldF9mb3BzOworCWRldi0+dmRldi5pb2N0bF9vcHMgPSAmY2FkZXRfaW9jdGxfb3BzOworCWRldi0+dmRldi5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHk7CisJdmlkZW9fc2V0X2RydmRhdGEoJmRldi0+dmRldiwgZGV2KTsKKworCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmRldi0+dmRldiwgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKKwkJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcih2NGwyX2Rldik7CisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW8sIDIpOworCQlnb3RvIGZhaWw7CisJfQorCXY0bDJfaW5mbyh2NGwyX2RldiwgIkFEUyBDYWRldCBSYWRpbyBDYXJkIGF0IDB4JXhcbiIsIGRldi0+aW8pOwogCXJldHVybiAwOwogZmFpbDoKIAlwbnBfdW5yZWdpc3Rlcl9kcml2ZXIoJmNhZGV0X3BucF9kcml2ZXIpOwotCXJldHVybiAtMTsKKwlyZXR1cm4gLUVOT0RFVjsKIH0KIAotCi0KLU1PRFVMRV9BVVRIT1IoIkZyZWQgR2xlYXNvbiwgUnVzc2VsbCBLcm9sbCwgUXVheSBMdSwgRG9uYWxkIFNvbmcsIEphc29uIExld2lzLCBTY290dCBNY0dyYXRoLCBXaWxsaWFtIE1jR3JhdGgiKTsKLU1PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBBRFMgQ2FkZXQgQU0vRk0vUkRTIHJhZGlvIGNhcmQuIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLW1vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiBDYWRldCBjYXJkICgweDMzMCwweDMzMiwweDMzNCwweDMzNiwweDMzOCwweDMzYSwweDMzYywweDMzZSkiKTsKLW1vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKLQotc3RhdGljIHZvaWQgX19leGl0IGNhZGV0X2NsZWFudXBfbW9kdWxlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgY2FkZXRfZXhpdCh2b2lkKQogewotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZjYWRldF9yYWRpbyk7Ci0JcmVsZWFzZV9yZWdpb24oaW8sMik7CisJc3RydWN0IGNhZGV0ICpkZXYgPSAmY2FkZXRfY2FyZDsKKworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZkZXYtPnZkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+djRsMl9kZXYpOworCXJlbGVhc2VfcmVnaW9uKGRldi0+aW8sIDIpOwogCXBucF91bnJlZ2lzdGVyX2RyaXZlcigmY2FkZXRfcG5wX2RyaXZlcik7CiB9CiAKIG1vZHVsZV9pbml0KGNhZGV0X2luaXQpOwotbW9kdWxlX2V4aXQoY2FkZXRfY2xlYW51cF9tb2R1bGUpOworbW9kdWxlX2V4aXQoY2FkZXRfZXhpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLXBjaS5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWstcGNpLmMKaW5kZXggMGM5NmJmOC4uMDkyNjVkMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWstcGNpLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWstcGNpLmMKQEAgLTQ1LDM0ICs0NSwyNSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgotCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KLSNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLDAsMikKKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogCi1zdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7Ci0JewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCi0JCS5uYW1lICAgICAgICAgID0gIk11dGUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JfSx7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fVk9MVU1FLAotCQkubmFtZSAgICAgICAgICA9ICJWb2x1bWUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gNjU1MzUsCi0JCS5zdGVwICAgICAgICAgID0gNjU1MzUsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMHhmZiwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCX0KLX07CitNT0RVTEVfQVVUSE9SKCJWbGFkaW1pciBTaGVib3JkYWV2IDx2c2hlYm9yZGFldkBtYWlsLnJ1PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJUaGUgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUgR2VtdGVrIFBDSSBSYWRpbyBDYXJkIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLSNpbmNsdWRlIDxhc20vaW8uaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorc3RhdGljIGludCBucl9yYWRpbyA9IC0xOworc3RhdGljIGludCBteCA9IDE7CisKK21vZHVsZV9wYXJhbShteCwgYm9vbCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKG14LCAic2luZ2xlIGRpZ2l0OiAxIC0gdHVybiBvZmYgdGhlIHR1cm5lciB1cG9uIG1vZHVsZSBleGl0IChkZWZhdWx0KSwgMCAtIGRvIG5vdCIpOworbW9kdWxlX3BhcmFtKG5yX3JhZGlvLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhucl9yYWRpbywgInZpZGVvNGxpbnV4IGRldmljZSBudW1iZXIgdG8gdXNlIik7CisKKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAwLCAyKQogCiAjaWZuZGVmIFBDSV9WRU5ET1JfSURfR0VNVEVLCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfR0VNVEVLIDB4NTA0NgpAQCAtOTAsOCArODEsMTEgQEAKICNkZWZpbmUgR0VNVEVLX1BDSV9SQU5HRV9ISUdIICgxMDgqMTYwMDApCiAjZW5kaWYKIAotc3RydWN0IGdlbXRla19wY2lfY2FyZCB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9kZXY7CitzdHJ1Y3QgZ2VtdGVrX3BjaSB7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmRldjsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKIAogCXUzMiBpb2Jhc2U7CiAJdTMyIGxlbmd0aDsKQEAgLTEwMCwxMTYgKzk0LDEzMyBAQAogCXU4ICBtdXRlOwogfTsKIAotc3RhdGljIGludCBucl9yYWRpbyA9IC0xOwotc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5fdXNlOwotCi1zdGF0aWMgaW5saW5lIHU4IGdlbXRla19wY2lfb3V0KCB1MTYgdmFsdWUsIHUzMiBwb3J0ICkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGdlbXRla19wY2kgKnRvX2dlbXRla19wY2koc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldikKIHsKLQlvdXR3KCB2YWx1ZSwgcG9ydCApOworCXJldHVybiBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBnZW10ZWtfcGNpLCB2NGwyX2Rldik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdTggZ2VtdGVrX3BjaV9vdXQodTE2IHZhbHVlLCB1MzIgcG9ydCkKK3sKKwlvdXR3KHZhbHVlLCBwb3J0KTsKIAogCXJldHVybiAodTgpdmFsdWU7CiB9CiAKLSNkZWZpbmUgX2IwKCB2ICkgKigodTggKikmdikKLXN0YXRpYyB2b2lkIF9fZ2VtdGVrX3BjaV9jbWQoIHUxNiB2YWx1ZSwgdTMyIHBvcnQsIHU4ICpsYXN0X2J5dGUsIGludCBrZWVwICkKLXsKLQlyZWdpc3RlciB1OCBieXRlID0gKmxhc3RfYnl0ZTsKKyNkZWZpbmUgX2IwKHYpICgqKCh1OCAqKSZ2KSkKIAotCWlmICggIXZhbHVlICkgewotCQlpZiAoICFrZWVwICkKK3N0YXRpYyB2b2lkIF9fZ2VtdGVrX3BjaV9jbWQodTE2IHZhbHVlLCB1MzIgcG9ydCwgdTggKmxhc3RfYnl0ZSwgaW50IGtlZXApCit7CisJdTggYnl0ZSA9ICpsYXN0X2J5dGU7CisKKwlpZiAoIXZhbHVlKSB7CisJCWlmICgha2VlcCkKIAkJCXZhbHVlID0gKHUxNilwb3J0OwogCQlieXRlICY9IDB4ZmQ7CiAJfSBlbHNlCiAJCWJ5dGUgfD0gMjsKIAotCV9iMCggdmFsdWUgKSA9IGJ5dGU7Ci0Jb3V0dyggdmFsdWUsIHBvcnQgKTsKKwlfYjAodmFsdWUpID0gYnl0ZTsKKwlvdXR3KHZhbHVlLCBwb3J0KTsKIAlieXRlIHw9IDE7Ci0JX2IwKCB2YWx1ZSApID0gYnl0ZTsKLQlvdXR3KCB2YWx1ZSwgcG9ydCApOworCV9iMCh2YWx1ZSkgPSBieXRlOworCW91dHcodmFsdWUsIHBvcnQpOwogCWJ5dGUgJj0gMHhmZTsKLQlfYjAoIHZhbHVlICkgPSBieXRlOwotCW91dHcoIHZhbHVlLCBwb3J0ICk7CisJX2IwKHZhbHVlKSA9IGJ5dGU7CisJb3V0dyh2YWx1ZSwgcG9ydCk7CiAKIAkqbGFzdF9ieXRlID0gYnl0ZTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGdlbXRla19wY2lfbmlsKCB1MzIgcG9ydCwgdTggKmxhc3RfYnl0ZSApCitzdGF0aWMgaW5saW5lIHZvaWQgZ2VtdGVrX3BjaV9uaWwodTMyIHBvcnQsIHU4ICpsYXN0X2J5dGUpCiB7Ci0JX19nZW10ZWtfcGNpX2NtZCggMHgwMCwgcG9ydCwgbGFzdF9ieXRlLCBmYWxzZSApOworCV9fZ2VtdGVrX3BjaV9jbWQoMHgwMCwgcG9ydCwgbGFzdF9ieXRlLCBmYWxzZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBnZW10ZWtfcGNpX2NtZCggdTE2IGNtZCwgdTMyIHBvcnQsIHU4ICpsYXN0X2J5dGUgKQorc3RhdGljIGlubGluZSB2b2lkIGdlbXRla19wY2lfY21kKHUxNiBjbWQsIHUzMiBwb3J0LCB1OCAqbGFzdF9ieXRlKQogewotCV9fZ2VtdGVrX3BjaV9jbWQoIGNtZCwgcG9ydCwgbGFzdF9ieXRlLCB0cnVlICk7CisJX19nZW10ZWtfcGNpX2NtZChjbWQsIHBvcnQsIGxhc3RfYnl0ZSwgdHJ1ZSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdlbXRla19wY2lfc2V0ZnJlcXVlbmN5KCBzdHJ1Y3QgZ2VtdGVrX3BjaV9jYXJkICpjYXJkLCB1bnNpZ25lZCBsb25nIGZyZXF1ZW5jeSApCitzdGF0aWMgdm9pZCBnZW10ZWtfcGNpX3NldGZyZXF1ZW5jeShzdHJ1Y3QgZ2VtdGVrX3BjaSAqY2FyZCwgdW5zaWduZWQgbG9uZyBmcmVxdWVuY3kpCiB7Ci0JcmVnaXN0ZXIgaW50IGk7Ci0JcmVnaXN0ZXIgdTMyIHZhbHVlID0gZnJlcXVlbmN5IC8gMjAwICsgODU2OwotCXJlZ2lzdGVyIHUxNiBtYXNrID0gMHg4MDAwOworCWludCBpOworCXUzMiB2YWx1ZSA9IGZyZXF1ZW5jeSAvIDIwMCArIDg1NjsKKwl1MTYgbWFzayA9IDB4ODAwMDsKIAl1OCBsYXN0X2J5dGU7CiAJdTMyIHBvcnQgPSBjYXJkLT5pb2Jhc2U7CiAKLQlsYXN0X2J5dGUgPSBnZW10ZWtfcGNpX291dCggMHgwNiwgcG9ydCApOworCW11dGV4X2xvY2soJmNhcmQtPmxvY2spOworCWNhcmQtPmN1cnJlbnRfZnJlcXVlbmN5ID0gZnJlcXVlbmN5OworCWxhc3RfYnl0ZSA9IGdlbXRla19wY2lfb3V0KDB4MDYsIHBvcnQpOwogCiAJaSA9IDA7CiAJZG8gewotCQlnZW10ZWtfcGNpX25pbCggcG9ydCwgJmxhc3RfYnl0ZSApOworCQlnZW10ZWtfcGNpX25pbChwb3J0LCAmbGFzdF9ieXRlKTsKIAkJaSsrOwotCX0gd2hpbGUgKCBpIDwgOSApOworCX0gd2hpbGUgKGkgPCA5KTsKIAogCWkgPSAwOwogCWRvIHsKLQkJZ2VtdGVrX3BjaV9jbWQoIHZhbHVlICYgbWFzaywgcG9ydCwgJmxhc3RfYnl0ZSApOworCQlnZW10ZWtfcGNpX2NtZCh2YWx1ZSAmIG1hc2ssIHBvcnQsICZsYXN0X2J5dGUpOwogCQltYXNrID4+PSAxOwogCQlpKys7Ci0JfSB3aGlsZSAoIGkgPCAxNiApOworCX0gd2hpbGUgKGkgPCAxNik7CiAKLQlvdXR3KCAweDEwLCBwb3J0ICk7CisJb3V0dygweDEwLCBwb3J0KTsKKwltdXRleF91bmxvY2soJmNhcmQtPmxvY2spOwogfQogCiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBnZW10ZWtfcGNpX211dGUoIHN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKmNhcmQgKQorc3RhdGljIHZvaWQgZ2VtdGVrX3BjaV9tdXRlKHN0cnVjdCBnZW10ZWtfcGNpICpjYXJkKQogewotCW91dGIoIDB4MWYsIGNhcmQtPmlvYmFzZSApOworCW11dGV4X2xvY2soJmNhcmQtPmxvY2spOworCW91dGIoMHgxZiwgY2FyZC0+aW9iYXNlKTsKIAljYXJkLT5tdXRlID0gdHJ1ZTsKKwltdXRleF91bmxvY2soJmNhcmQtPmxvY2spOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZ2VtdGVrX3BjaV91bm11dGUoIHN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKmNhcmQgKQorc3RhdGljIHZvaWQgZ2VtdGVrX3BjaV91bm11dGUoc3RydWN0IGdlbXRla19wY2kgKmNhcmQpCiB7Ci0JaWYgKCBjYXJkLT5tdXRlICkgewotCQlnZW10ZWtfcGNpX3NldGZyZXF1ZW5jeSggY2FyZCwgY2FyZC0+Y3VycmVudF9mcmVxdWVuY3kgKTsKKwltdXRleF9sb2NrKCZjYXJkLT5sb2NrKTsKKwlpZiAoY2FyZC0+bXV0ZSkgeworCQlnZW10ZWtfcGNpX3NldGZyZXF1ZW5jeShjYXJkLCBjYXJkLT5jdXJyZW50X2ZyZXF1ZW5jeSk7CiAJCWNhcmQtPm11dGUgPSBmYWxzZTsKIAl9CisJbXV0ZXhfdW5sb2NrKCZjYXJkLT5sb2NrKTsKIH0KIAotc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgZ2VtdGVrX3BjaV9nZXRzaWduYWwoIHN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKmNhcmQgKQorc3RhdGljIGludCBnZW10ZWtfcGNpX2dldHNpZ25hbChzdHJ1Y3QgZ2VtdGVrX3BjaSAqY2FyZCkKIHsKLQlyZXR1cm4gKCBpbmIoIGNhcmQtPmlvYmFzZSApICYgMHgwOCApID8gMCA6IDE7CisJaW50IHNpZzsKKworCW11dGV4X2xvY2soJmNhcmQtPmxvY2spOworCXNpZyA9IChpbmIoY2FyZC0+aW9iYXNlKSAmIDB4MDgpID8gMCA6IDE7CisJbXV0ZXhfdW5sb2NrKCZjYXJkLT5sb2NrKTsKKwlyZXR1cm4gc2lnOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqdikKIHsKKwlzdHJ1Y3QgZ2VtdGVrX3BjaSAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKIAlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLWdlbXRlay1wY2kiLCBzaXplb2Yodi0+ZHJpdmVyKSk7CiAJc3RybGNweSh2LT5jYXJkLCAiR2VtVGVrIFBDSSBSYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7Ci0Jc3ByaW50Zih2LT5idXNfaW5mbywgIklTQSIpOworCXNucHJpbnRmKHYtPmJ1c19pbmZvLCBzaXplb2Yodi0+YnVzX2luZm8pLCAiUENJOiVzIiwgcGNpX25hbWUoY2FyZC0+cGRldikpOwogCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwotCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCXN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBnZW10ZWtfcGNpICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmICh2LT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3RyY3B5KHYtPm5hbWUsICJGTSIpOworCXN0cmxjcHkodi0+bmFtZSwgIkZNIiwgc2l6ZW9mKHYtPm5hbWUpKTsKIAl2LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAl2LT5yYW5nZWxvdyA9IEdFTVRFS19QQ0lfUkFOR0VfTE9XOwogCXYtPnJhbmdlaGlnaCA9IEdFTVRFS19QQ0lfUkFOR0VfSElHSDsKQEAgLTIyMywyMSArMjM0LDE4IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlpZiAodi0+aW5kZXggPiAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gdi0+aW5kZXggPyAtRUlOVkFMIDogMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgZ2VtdGVrX3BjaV9jYXJkICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgZ2VtdGVrX3BjaSAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKLQlpZiAoIChmLT5mcmVxdWVuY3kgPCBHRU1URUtfUENJX1JBTkdFX0xPVykgfHwKLQkJCShmLT5mcmVxdWVuY3kgPiBHRU1URUtfUENJX1JBTkdFX0hJR0gpICkKKwlpZiAoZi0+ZnJlcXVlbmN5IDwgR0VNVEVLX1BDSV9SQU5HRV9MT1cgfHwKKwkgICAgZi0+ZnJlcXVlbmN5ID4gR0VNVEVLX1BDSV9SQU5HRV9ISUdIKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlnZW10ZWtfcGNpX3NldGZyZXF1ZW5jeShjYXJkLCBmLT5mcmVxdWVuY3kpOwotCWNhcmQtPmN1cnJlbnRfZnJlcXVlbmN5ID0gZi0+ZnJlcXVlbmN5OwogCWNhcmQtPm11dGUgPSBmYWxzZTsKIAlyZXR1cm4gMDsKIH0KQEAgLTI0NSw3ICsyNTMsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgZ2VtdGVrX3BjaV9jYXJkICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgZ2VtdGVrX3BjaSAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAlmLT5mcmVxdWVuY3kgPSBjYXJkLT5jdXJyZW50X2ZyZXF1ZW5jeTsKQEAgLTI1NSwxMyArMjYzLDExIEBACiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0JaW50IGk7Ci0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW9fcWN0cmwpOyBpKyspIHsKLQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gcmFkaW9fcWN0cmxbaV0uaWQpIHsKLQkJCW1lbWNweShxYywgJihyYWRpb19xY3RybFtpXSksCi0JCQkJCQlzaXplb2YoKnFjKSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDEpOworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LCA2NTUzNSwgNjU1MzUpOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTI2OSw3ICsyNzUsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBnZW10ZWtfcGNpICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0yODgsNyArMjk0LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgZ2VtdGVrX3BjaV9jYXJkICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgZ2VtdGVrX3BjaSAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMzA3LDE3ICszMTMsNiBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKLXsKLQlpZiAoYS0+aW5kZXggPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN0cmNweShhLT5uYW1lLCAiUmFkaW8iKTsKLQlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCiB7CiAJKmkgPSAwOwpAQCAtMzI2LDE3ICszMjEsMjIgQEAKIAogc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCiB7Ci0JaWYgKGkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJYS0+aW5kZXggPSAwOworCXN0cmxjcHkoYS0+bmFtZSwgIlJhZGlvIiwgc2l6ZW9mKGEtPm5hbWUpKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKIHsKLQlpZiAoYS0+aW5kZXggIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIGEtPmluZGV4ID8gLUVJTlZBTCA6IDA7CiB9CiAKIGVudW0gewpAQCAtMzU0LDI1ICszNTQsMjIgQEAKIAl7IDAgfQogfTsKIAotTU9EVUxFX0RFVklDRV9UQUJMRSggcGNpLCBnZW10ZWtfcGNpX2lkICk7CitNT0RVTEVfREVWSUNFX1RBQkxFKHBjaSwgZ2VtdGVrX3BjaV9pZCk7CiAKLXN0YXRpYyBpbnQgbXggPSAxOwotCi1zdGF0aWMgaW50IGdlbXRla19wY2lfZXhjbHVzaXZlX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IGdlbXRla19wY2lfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmaW5fdXNlKSA/IC1FQlVTWSA6IDA7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZ2VtdGVrX3BjaV9leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgZ2VtdGVrX3BjaV9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQogewotCWNsZWFyX2JpdCgwLCAmaW5fdXNlKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBnZW10ZWtfcGNpX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IGdlbXRla19wY2lfZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UgICAgICAgID0gZ2VtdGVrX3BjaV9leGNsdXNpdmVfcmVsZWFzZSwKKwkub3BlbiAgICAgICAgICAgPSBnZW10ZWtfcGNpX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gZ2VtdGVrX3BjaV9yZWxlYXNlLAogCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCiB9OwogCkBAIC0zOTEsMTA4ICszODgsMTAwIEBACiAJLnZpZGlvY19zX2N0cmwgICAgICA9IHZpZGlvY19zX2N0cmwsCiB9OwogCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2X3RlbXBsYXRlID0gewotCS5uYW1lICAgICAgICAgIAk9ICJHZW10ZWsgUENJIFJhZGlvIiwKLQkuZm9wcyAgICAgICAgICAJPSAmZ2VtdGVrX3BjaV9mb3BzLAotCS5pb2N0bF9vcHMgCT0gJmdlbXRla19wY2lfaW9jdGxfb3BzLAotCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCi19OwotCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBnZW10ZWtfcGNpX3Byb2JlKCBzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKnBjaV9pZCApCitzdGF0aWMgaW50IF9fZGV2aW5pdCBnZW10ZWtfcGNpX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqcGNpX2lkKQogewotCXN0cnVjdCBnZW10ZWtfcGNpX2NhcmQgKmNhcmQ7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2cmFkaW87CisJc3RydWN0IGdlbXRla19wY2kgKmNhcmQ7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldjsKKwlpbnQgcmVzOwogCi0JaWYgKCAoY2FyZCA9IGt6YWxsb2MoIHNpemVvZiggc3RydWN0IGdlbXRla19wY2lfY2FyZCApLCBHRlBfS0VSTkVMICkpID09IE5VTEwgKSB7Ci0JCXByaW50ayggS0VSTl9FUlIgImdlbXRla19wY2k6IG91dCBvZiBtZW1vcnlcbiIgKTsKKwljYXJkID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGdlbXRla19wY2kpLCBHRlBfS0VSTkVMKTsKKwlpZiAoY2FyZCA9PSBOVUxMKSB7CisJCWRldl9lcnIoJnBkZXYtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKLQlpZiAoIHBjaV9lbmFibGVfZGV2aWNlKCBwY2lfZGV2ICkgKQorCXY0bDJfZGV2ID0gJmNhcmQtPnY0bDJfZGV2OworCW11dGV4X2luaXQoJmNhcmQtPmxvY2spOworCWNhcmQtPnBkZXYgPSBwZGV2OworCisJc3RybGNweSh2NGwyX2Rldi0+bmFtZSwgImdlbXRla19wY2kiLCBzaXplb2YodjRsMl9kZXYtPm5hbWUpKTsKKworCXJlcyA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYsIHY0bDJfZGV2KTsKKwlpZiAocmVzIDwgMCkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgIkNvdWxkIG5vdCByZWdpc3RlciB2NGwyX2RldmljZVxuIik7CisJCWtmcmVlKGNhcmQpOworCQlyZXR1cm4gcmVzOworCX0KKworCWlmIChwY2lfZW5hYmxlX2RldmljZShwZGV2KSkKIAkJZ290byBlcnJfcGNpOwogCi0JY2FyZC0+aW9iYXNlID0gcGNpX3Jlc291cmNlX3N0YXJ0KCBwY2lfZGV2LCAwICk7Ci0JY2FyZC0+bGVuZ3RoID0gcGNpX3Jlc291cmNlX2xlbiggcGNpX2RldiwgMCApOworCWNhcmQtPmlvYmFzZSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTsKKwljYXJkLT5sZW5ndGggPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApOwogCi0JaWYgKCByZXF1ZXN0X3JlZ2lvbiggY2FyZC0+aW9iYXNlLCBjYXJkLT5sZW5ndGgsIGNhcmRfbmFtZXNbcGNpX2lkLT5kcml2ZXJfZGF0YV0gKSA9PSBOVUxMICkgewotCQlwcmludGsoIEtFUk5fRVJSICJnZW10ZWtfcGNpOiBpL28gcG9ydCBhbHJlYWR5IGluIHVzZVxuIiApOworCWlmIChyZXF1ZXN0X3JlZ2lvbihjYXJkLT5pb2Jhc2UsIGNhcmQtPmxlbmd0aCwgY2FyZF9uYW1lc1twY2lfaWQtPmRyaXZlcl9kYXRhXSkgPT0gTlVMTCkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgImkvbyBwb3J0IGFscmVhZHkgaW4gdXNlXG4iKTsKIAkJZ290byBlcnJfcGNpOwogCX0KIAotCXBjaV9zZXRfZHJ2ZGF0YSggcGNpX2RldiwgY2FyZCApOworCXN0cmxjcHkoY2FyZC0+dmRldi5uYW1lLCB2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKGNhcmQtPnZkZXYubmFtZSkpOworCWNhcmQtPnZkZXYudjRsMl9kZXYgPSB2NGwyX2RldjsKKwljYXJkLT52ZGV2LmZvcHMgPSAmZ2VtdGVrX3BjaV9mb3BzOworCWNhcmQtPnZkZXYuaW9jdGxfb3BzID0gJmdlbXRla19wY2lfaW9jdGxfb3BzOworCWNhcmQtPnZkZXYucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5OworCXZpZGVvX3NldF9kcnZkYXRhKCZjYXJkLT52ZGV2LCBjYXJkKTsKIAotCWlmICggKGRldnJhZGlvID0ga21hbGxvYyggc2l6ZW9mKCBzdHJ1Y3QgdmlkZW9fZGV2aWNlICksIEdGUF9LRVJORUwgKSkgPT0gTlVMTCApIHsKLQkJcHJpbnRrKCBLRVJOX0VSUiAiZ2VtdGVrX3BjaTogb3V0IG9mIG1lbW9yeVxuIiApOworCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmNhcmQtPnZkZXYsIFZGTF9UWVBFX1JBRElPLCBucl9yYWRpbykgPCAwKQogCQlnb3RvIGVycl92aWRlbzsKLQl9Ci0JKmRldnJhZGlvID0gdmRldl90ZW1wbGF0ZTsKIAotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoZGV2cmFkaW8sIFZGTF9UWVBFX1JBRElPLCBucl9yYWRpbykgPCAwKSB7Ci0JCWtmcmVlKCBkZXZyYWRpbyApOwotCQlnb3RvIGVycl92aWRlbzsKLQl9CisJZ2VtdGVrX3BjaV9tdXRlKGNhcmQpOwogCi0JY2FyZC0+dmlkZW9kZXYgPSBkZXZyYWRpbzsKLQl2aWRlb19zZXRfZHJ2ZGF0YShkZXZyYWRpbywgY2FyZCk7Ci0JZ2VtdGVrX3BjaV9tdXRlKCBjYXJkICk7Ci0KLQlwcmludGsoIEtFUk5fSU5GTyAiR2VtdGVrIFBDSSBSYWRpbyAocmV2LiAlZCkgZm91bmQgYXQgMHglMDR4LTB4JTA0eC5cbiIsCi0JCXBjaV9kZXYtPnJldmlzaW9uLCBjYXJkLT5pb2Jhc2UsIGNhcmQtPmlvYmFzZSArIGNhcmQtPmxlbmd0aCAtIDEgKTsKKwl2NGwyX2luZm8odjRsMl9kZXYsICJHZW10ZWsgUENJIFJhZGlvIChyZXYuICVkKSBmb3VuZCBhdCAweCUwNHgtMHglMDR4LlxuIiwKKwkJcGRldi0+cmV2aXNpb24sIGNhcmQtPmlvYmFzZSwgY2FyZC0+aW9iYXNlICsgY2FyZC0+bGVuZ3RoIC0gMSk7CiAKIAlyZXR1cm4gMDsKIAogZXJyX3ZpZGVvOgotCXJlbGVhc2VfcmVnaW9uKCBjYXJkLT5pb2Jhc2UsIGNhcmQtPmxlbmd0aCApOworCXJlbGVhc2VfcmVnaW9uKGNhcmQtPmlvYmFzZSwgY2FyZC0+bGVuZ3RoKTsKIAogZXJyX3BjaToKLQlrZnJlZSggY2FyZCApOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIodjRsMl9kZXYpOworCWtmcmVlKGNhcmQpOwogCXJldHVybiAtRU5PREVWOwogfQogCi1zdGF0aWMgdm9pZCBfX2RldmV4aXQgZ2VtdGVrX3BjaV9yZW1vdmUoIHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ICkKK3N0YXRpYyB2b2lkIF9fZGV2ZXhpdCBnZW10ZWtfcGNpX3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKLQlzdHJ1Y3QgZ2VtdGVrX3BjaV9jYXJkICpjYXJkID0gcGNpX2dldF9kcnZkYXRhKCBwY2lfZGV2ICk7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlzdHJ1Y3QgZ2VtdGVrX3BjaSAqY2FyZCA9IHRvX2dlbXRla19wY2kodjRsMl9kZXYpOwogCi0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoIGNhcmQtPnZpZGVvZGV2ICk7Ci0Ja2ZyZWUoIGNhcmQtPnZpZGVvZGV2ICk7CisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmNhcmQtPnZkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIodjRsMl9kZXYpOwogCi0JcmVsZWFzZV9yZWdpb24oIGNhcmQtPmlvYmFzZSwgY2FyZC0+bGVuZ3RoICk7CisJcmVsZWFzZV9yZWdpb24oY2FyZC0+aW9iYXNlLCBjYXJkLT5sZW5ndGgpOwogCi0JaWYgKCBteCApCi0JCWdlbXRla19wY2lfbXV0ZSggY2FyZCApOworCWlmIChteCkKKwkJZ2VtdGVrX3BjaV9tdXRlKGNhcmQpOwogCi0Ja2ZyZWUoIGNhcmQgKTsKLQotCXBjaV9zZXRfZHJ2ZGF0YSggcGNpX2RldiwgTlVMTCApOworCWtmcmVlKGNhcmQpOwogfQogCi1zdGF0aWMgc3RydWN0IHBjaV9kcml2ZXIgZ2VtdGVrX3BjaV9kcml2ZXIgPQoteworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIGdlbXRla19wY2lfZHJpdmVyID0gewogCS5uYW1lCQk9ICJnZW10ZWtfcGNpIiwKIAkuaWRfdGFibGUJPSBnZW10ZWtfcGNpX2lkLAogCS5wcm9iZQkJPSBnZW10ZWtfcGNpX3Byb2JlLAogCS5yZW1vdmUJCT0gX19kZXZleGl0X3AoZ2VtdGVrX3BjaV9yZW1vdmUpLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgZ2VtdGVrX3BjaV9pbml0X21vZHVsZSggdm9pZCApCitzdGF0aWMgaW50IF9faW5pdCBnZW10ZWtfcGNpX2luaXQodm9pZCkKIHsKLQlyZXR1cm4gcGNpX3JlZ2lzdGVyX2RyaXZlciggJmdlbXRla19wY2lfZHJpdmVyICk7CisJcmV0dXJuIHBjaV9yZWdpc3Rlcl9kcml2ZXIoJmdlbXRla19wY2lfZHJpdmVyKTsKIH0KIAotc3RhdGljIHZvaWQgX19leGl0IGdlbXRla19wY2lfY2xlYW51cF9tb2R1bGUoIHZvaWQgKQorc3RhdGljIHZvaWQgX19leGl0IGdlbXRla19wY2lfZXhpdCh2b2lkKQogewogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmZ2VtdGVrX3BjaV9kcml2ZXIpOwogfQogCi1NT0RVTEVfQVVUSE9SKCAiVmxhZGltaXIgU2hlYm9yZGFldiA8dnNoZWJvcmRhZXZAbWFpbC5ydT4iICk7Ci1NT0RVTEVfREVTQ1JJUFRJT04oICJUaGUgdmlkZW80bGludXggZHJpdmVyIGZvciB0aGUgR2VtdGVrIFBDSSBSYWRpbyBDYXJkIiApOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1tb2R1bGVfcGFyYW0obXgsIGJvb2wsIDApOwotTU9EVUxFX1BBUk1fREVTQyggbXgsICJzaW5nbGUgZGlnaXQ6IDEgLSB0dXJuIG9mZiB0aGUgdHVybmVyIHVwb24gbW9kdWxlIGV4aXQgKGRlZmF1bHQpLCAwIC0gZG8gbm90IiApOwotbW9kdWxlX3BhcmFtKG5yX3JhZGlvLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyggbnJfcmFkaW8sICJ2aWRlbzRsaW51eCBkZXZpY2UgbnVtYmVyIHRvIHVzZSIpOwotCi1tb2R1bGVfaW5pdCggZ2VtdGVrX3BjaV9pbml0X21vZHVsZSApOwotbW9kdWxlX2V4aXQoIGdlbXRla19wY2lfY2xlYW51cF9tb2R1bGUgKTsKLQorbW9kdWxlX2luaXQoZ2VtdGVrX3BjaV9pbml0KTsKK21vZHVsZV9leGl0KGdlbXRla19wY2lfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1nZW10ZWsuYwppbmRleCAyYjY4YmU3Li4xNTA0NjQ0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLWdlbXRlay5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tZ2VtdGVrLmMKQEAgLTIwLDE2ICsyMCwxNCBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4JCS8qIEluaXRkYXRhCQkJKi8KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogcmVxdWVzdF9yZWdpb24JCSovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogdWRlbGF5CQkJKi8KLSNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG91dGIsIG91dGJfcAkJCSovCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4JLyogY29weSB0by9mcm9tIHVzZXIJCSovCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzCQkqLwotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CS8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTwkqLwotI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsMCwzKQotI2RlZmluZSBSQURJT19CQU5ORVIgIkdlbVRlayBSYWRpbyBjYXJkIGRyaXZlcjogdjAuMC4zIgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvaW8uaD4JCS8qIG91dGIsIG91dGJfcAkJCSovCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisKKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAwLCAzKQogCiAvKgogICogTW9kdWxlIGluZm8uCkBAIC01Nyw3ICs1NSw2IEBACiBzdGF0aWMgaW50IGtlZXBtdXRlZAk9IDE7CiBzdGF0aWMgaW50IGluaXRtdXRlCT0gMTsKIHN0YXRpYyBpbnQgcmFkaW9fbnIJPSAtMTsKLXN0YXRpYyB1bnNpZ25lZCBsb25nIGluX3VzZTsKIAogbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpbywgIkZvcmNlIEkvTyBwb3J0IGZvciB0aGUgR2VtVGVrIFJhZGlvIGNhcmQgaWYgYXV0b21hdGljICIKQEAgLTExMiwxMiArMTA5LDE5IEBACiAjZGVmaW5lIFNIT1JUX0RFTEFZIDUJCS8qIHVzZWMgKi8KICNkZWZpbmUgTE9OR19ERUxBWSA3NQkJLyogdXNlYyAqLwogCi1zdHJ1Y3QgZ2VtdGVrX2RldmljZSB7CitzdHJ1Y3QgZ2VtdGVrIHsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OworCXN0cnVjdCBtdXRleCBsb2NrOwogCXVuc2lnbmVkIGxvbmcgbGFzdGZyZXE7CiAJaW50IG11dGVkOworCWludCB2ZXJpZmllZDsKKwlpbnQgaW87CiAJdTMyIGJ1MjYxNGRhdGE7CiB9OwogCitzdGF0aWMgc3RydWN0IGdlbXRlayBnZW10ZWtfY2FyZDsKKwogI2RlZmluZSBCVTI2MTRfRlJFUV9CSVRTIAkxNiAvKiBEMC4uRDE1LCBGcmVxdWVuY3kgZGF0YQkJKi8KICNkZWZpbmUgQlUyNjE0X1BPUlRfQklUUwkzIC8qIFAwLi5QMiwgT3V0cHV0IHBvcnQgY29udHJvbCBkYXRhCSovCiAjZGVmaW5lIEJVMjYxNF9WT0lEX0JJVFMJNCAvKiB1bnVzZWQgCQkJCSovCkBAIC0xNTMsMTAgKzE1Nyw2IEBACiAjZGVmaW5lIEJVMjYxNF9GTVVOX01BU0sJTUtNQVNLKEZNVU4pCiAjZGVmaW5lIEJVMjYxNF9URVNUX01BU0sJTUtNQVNLKFRFU1QpCiAKLXN0YXRpYyBzdHJ1Y3QgZ2VtdGVrX2RldmljZSBnZW10ZWtfdW5pdDsKLQotc3RhdGljIHNwaW5sb2NrX3QgbG9jazsKLQogLyoKICAqIFNldCBkYXRhIHdoaWNoIHdpbGwgYmUgc2VudCB0byBCVTI2MTRGUy4KICAqLwpAQCAtMTY2LDMzICsxNjYsMzMgQEAKIC8qCiAgKiBUcmFuc21pdCBzZXR0aW5ncyB0byBCVTI2MTRGUyBvdmVyIEdlbVRlayBJQy4KICAqLwotc3RhdGljIHZvaWQgZ2VtdGVrX2J1MjYxNF90cmFuc21pdChzdHJ1Y3QgZ2VtdGVrX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgZ2VtdGVrX2J1MjYxNF90cmFuc21pdChzdHJ1Y3QgZ2VtdGVrICpndCkKIHsKIAlpbnQgaSwgYml0LCBxLCBtdXRlOwogCi0Jc3Bpbl9sb2NrKCZsb2NrKTsKKwltdXRleF9sb2NrKCZndC0+bG9jayk7CiAKLQltdXRlID0gZGV2LT5tdXRlZCA/IEdFTVRFS19NVCA6IDB4MDA7CisJbXV0ZSA9IGd0LT5tdXRlZCA/IEdFTVRFS19NVCA6IDB4MDA7CiAKLQlvdXRiX3AobXV0ZSB8IEdFTVRFS19EQSB8IEdFTVRFS19DSywgaW8pOworCW91dGJfcChtdXRlIHwgR0VNVEVLX0RBIHwgR0VNVEVLX0NLLCBndC0+aW8pOwogCXVkZWxheShTSE9SVF9ERUxBWSk7Ci0Jb3V0Yl9wKG11dGUgfCBHRU1URUtfQ0UgfCBHRU1URUtfREEgfCBHRU1URUtfQ0ssIGlvKTsKKwlvdXRiX3AobXV0ZSB8IEdFTVRFS19DRSB8IEdFTVRFS19EQSB8IEdFTVRFS19DSywgZ3QtPmlvKTsKIAl1ZGVsYXkoTE9OR19ERUxBWSk7CiAKLQlmb3IgKGkgPSAwLCBxID0gZGV2LT5idTI2MTRkYXRhOyBpIDwgMzI7IGkrKywgcSA+Pj0gMSkgewotCSAgICBiaXQgPSAocSAmIDEpID8gR0VNVEVLX0RBIDogMDsKLQkgICAgb3V0Yl9wKG11dGUgfCBHRU1URUtfQ0UgfCBiaXQsIGlvKTsKLQkgICAgdWRlbGF5KFNIT1JUX0RFTEFZKTsKLQkgICAgb3V0Yl9wKG11dGUgfCBHRU1URUtfQ0UgfCBiaXQgfCBHRU1URUtfQ0ssIGlvKTsKLQkgICAgdWRlbGF5KFNIT1JUX0RFTEFZKTsKKwlmb3IgKGkgPSAwLCBxID0gZ3QtPmJ1MjYxNGRhdGE7IGkgPCAzMjsgaSsrLCBxID4+PSAxKSB7CisJCWJpdCA9IChxICYgMSkgPyBHRU1URUtfREEgOiAwOworCQlvdXRiX3AobXV0ZSB8IEdFTVRFS19DRSB8IGJpdCwgZ3QtPmlvKTsKKwkJdWRlbGF5KFNIT1JUX0RFTEFZKTsKKwkJb3V0Yl9wKG11dGUgfCBHRU1URUtfQ0UgfCBiaXQgfCBHRU1URUtfQ0ssIGd0LT5pbyk7CisJCXVkZWxheShTSE9SVF9ERUxBWSk7CiAJfQogCi0Jb3V0Yl9wKG11dGUgfCBHRU1URUtfREEgfCBHRU1URUtfQ0ssIGlvKTsKKwlvdXRiX3AobXV0ZSB8IEdFTVRFS19EQSB8IEdFTVRFS19DSywgZ3QtPmlvKTsKIAl1ZGVsYXkoU0hPUlRfREVMQVkpOwotCW91dGJfcChtdXRlIHwgR0VNVEVLX0NFIHwgR0VNVEVLX0RBIHwgR0VNVEVLX0NLLCBpbyk7CisJb3V0Yl9wKG11dGUgfCBHRU1URUtfQ0UgfCBHRU1URUtfREEgfCBHRU1URUtfQ0ssIGd0LT5pbyk7CiAJdWRlbGF5KExPTkdfREVMQVkpOwogCi0Jc3Bpbl91bmxvY2soJmxvY2spOworCW11dGV4X3VubG9jaygmZ3QtPmxvY2spOwogfQogCiAvKgpAQCAtMjA2LDEwNyArMjA2LDEwOSBAQAogLyoKICAqIFNldCBGTS1mcmVxdWVuY3kuCiAgKi8KLXN0YXRpYyB2b2lkIGdlbXRla19zZXRmcmVxKHN0cnVjdCBnZW10ZWtfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZnJlcSkKK3N0YXRpYyB2b2lkIGdlbXRla19zZXRmcmVxKHN0cnVjdCBnZW10ZWsgKmd0LCB1bnNpZ25lZCBsb25nIGZyZXEpCiB7Ci0KLQlpZiAoa2VlcG11dGVkICYmIGhhcmRtdXRlICYmIGRldi0+bXV0ZWQpCisJaWYgKGtlZXBtdXRlZCAmJiBoYXJkbXV0ZSAmJiBndC0+bXV0ZWQpCiAJCXJldHVybjsKIAotCWlmIChmcmVxIDwgR0VNVEVLX0xPV0ZSRVEpCi0JCWZyZXEgPSBHRU1URUtfTE9XRlJFUTsKLQllbHNlIGlmIChmcmVxID4gR0VNVEVLX0hJR0hGUkVRKQotCQlmcmVxID0gR0VNVEVLX0hJR0hGUkVROworCWZyZXEgPSBjbGFtcF92YWwoZnJlcSwgR0VNVEVLX0xPV0ZSRVEsIEdFTVRFS19ISUdIRlJFUSk7CiAKLQlkZXYtPmxhc3RmcmVxID0gZnJlcTsKLQlkZXYtPm11dGVkID0gMDsKKwlndC0+bGFzdGZyZXEgPSBmcmVxOworCWd0LT5tdXRlZCA9IDA7CiAKLQlnZW10ZWtfYnUyNjE0X3NldChkZXYsIEJVMjYxNF9QT1JULCAwKTsKLQlnZW10ZWtfYnUyNjE0X3NldChkZXYsIEJVMjYxNF9GTUVTLCAwKTsKLQlnZW10ZWtfYnUyNjE0X3NldChkZXYsIEJVMjYxNF9TV0lOLCAwKTsJLyogRk0tbW9kZQkqLwotCWdlbXRla19idTI2MTRfc2V0KGRldiwgQlUyNjE0X1NXQUwsIDApOwotCWdlbXRla19idTI2MTRfc2V0KGRldiwgQlUyNjE0X0ZNVU4sIDEpOwkvKiBHVCBiaXQgc2V0CSovCi0JZ2VtdGVrX2J1MjYxNF9zZXQoZGV2LCBCVTI2MTRfVEVTVCwgMCk7CisJZ2VtdGVrX2J1MjYxNF9zZXQoZ3QsIEJVMjYxNF9QT1JULCAwKTsKKwlnZW10ZWtfYnUyNjE0X3NldChndCwgQlUyNjE0X0ZNRVMsIDApOworCWdlbXRla19idTI2MTRfc2V0KGd0LCBCVTI2MTRfU1dJTiwgMCk7CS8qIEZNLW1vZGUJKi8KKwlnZW10ZWtfYnUyNjE0X3NldChndCwgQlUyNjE0X1NXQUwsIDApOworCWdlbXRla19idTI2MTRfc2V0KGd0LCBCVTI2MTRfRk1VTiwgMSk7CS8qIEdUIGJpdCBzZXQJKi8KKwlnZW10ZWtfYnUyNjE0X3NldChndCwgQlUyNjE0X1RFU1QsIDApOwogCi0JZ2VtdGVrX2J1MjYxNF9zZXQoZGV2LCBCVTI2MTRfU1RERiwgR0VNVEVLX1NUREZfM18xMjVfS0haKTsKLQlnZW10ZWtfYnUyNjE0X3NldChkZXYsIEJVMjYxNF9GUkVRLCBnZW10ZWtfY29udmZyZXEoZnJlcSkpOworCWdlbXRla19idTI2MTRfc2V0KGd0LCBCVTI2MTRfU1RERiwgR0VNVEVLX1NUREZfM18xMjVfS0haKTsKKwlnZW10ZWtfYnUyNjE0X3NldChndCwgQlUyNjE0X0ZSRVEsIGdlbXRla19jb252ZnJlcShmcmVxKSk7CiAKLQlnZW10ZWtfYnUyNjE0X3RyYW5zbWl0KGRldik7CisJZ2VtdGVrX2J1MjYxNF90cmFuc21pdChndCk7CiB9CiAKIC8qCiAgKiBTZXQgbXV0ZSBmbGFnLgogICovCi1zdGF0aWMgdm9pZCBnZW10ZWtfbXV0ZShzdHJ1Y3QgZ2VtdGVrX2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgZ2VtdGVrX211dGUoc3RydWN0IGdlbXRlayAqZ3QpCiB7CiAJaW50IGk7Ci0JZGV2LT5tdXRlZCA9IDE7CisKKwlndC0+bXV0ZWQgPSAxOwogCiAJaWYgKGhhcmRtdXRlKSB7CiAJCS8qIFR1cm4gb2ZmIFBMTCwgZGlzYWJsZSBkYXRhIG91dHB1dCAqLwotCQlnZW10ZWtfYnUyNjE0X3NldChkZXYsIEJVMjYxNF9QT1JULCAwKTsKLQkJZ2VtdGVrX2J1MjYxNF9zZXQoZGV2LCBCVTI2MTRfRk1FUywgMCk7CS8qIENUIGJpdCBvZmYJKi8KLQkJZ2VtdGVrX2J1MjYxNF9zZXQoZGV2LCBCVTI2MTRfU1dJTiwgMCk7CS8qIEZNLW1vZGUJKi8KLQkJZ2VtdGVrX2J1MjYxNF9zZXQoZGV2LCBCVTI2MTRfU1dBTCwgMCk7Ci0JCWdlbXRla19idTI2MTRfc2V0KGRldiwgQlUyNjE0X0ZNVU4sIDApOwkvKiBHVCBiaXQgb2ZmCSovCi0JCWdlbXRla19idTI2MTRfc2V0KGRldiwgQlUyNjE0X1RFU1QsIDApOwotCQlnZW10ZWtfYnUyNjE0X3NldChkZXYsIEJVMjYxNF9TVERGLCBHRU1URUtfUExMX09GRik7Ci0JCWdlbXRla19idTI2MTRfc2V0KGRldiwgQlUyNjE0X0ZSRVEsIDApOwotCQlnZW10ZWtfYnUyNjE0X3RyYW5zbWl0KGRldik7Ci0JfSBlbHNlIHsKLQkJc3Bpbl9sb2NrKCZsb2NrKTsKLQotCQkvKiBSZWFkIGJ1cyBjb250ZW50cyAoQ0UsIENLIGFuZCBEQSkuICovCi0JCWkgPSBpbmJfcChpbyk7Ci0JCS8qIFdyaXRlIGl0IGJhY2sgd2l0aCBtdXRlIGZsYWcgc2V0LiAqLwotCQlvdXRiX3AoKGkgPj4gNSkgfCBHRU1URUtfTVQsIGlvKTsKLQkJdWRlbGF5KFNIT1JUX0RFTEFZKTsKLQotCQlzcGluX3VubG9jaygmbG9jayk7CisJCWdlbXRla19idTI2MTRfc2V0KGd0LCBCVTI2MTRfUE9SVCwgMCk7CisJCWdlbXRla19idTI2MTRfc2V0KGd0LCBCVTI2MTRfRk1FUywgMCk7CS8qIENUIGJpdCBvZmYJKi8KKwkJZ2VtdGVrX2J1MjYxNF9zZXQoZ3QsIEJVMjYxNF9TV0lOLCAwKTsJLyogRk0tbW9kZQkqLworCQlnZW10ZWtfYnUyNjE0X3NldChndCwgQlUyNjE0X1NXQUwsIDApOworCQlnZW10ZWtfYnUyNjE0X3NldChndCwgQlUyNjE0X0ZNVU4sIDApOwkvKiBHVCBiaXQgb2ZmCSovCisJCWdlbXRla19idTI2MTRfc2V0KGd0LCBCVTI2MTRfVEVTVCwgMCk7CisJCWdlbXRla19idTI2MTRfc2V0KGd0LCBCVTI2MTRfU1RERiwgR0VNVEVLX1BMTF9PRkYpOworCQlnZW10ZWtfYnUyNjE0X3NldChndCwgQlUyNjE0X0ZSRVEsIDApOworCQlnZW10ZWtfYnUyNjE0X3RyYW5zbWl0KGd0KTsKKwkJcmV0dXJuOwogCX0KKworCW11dGV4X2xvY2soJmd0LT5sb2NrKTsKKworCS8qIFJlYWQgYnVzIGNvbnRlbnRzIChDRSwgQ0sgYW5kIERBKS4gKi8KKwlpID0gaW5iX3AoZ3QtPmlvKTsKKwkvKiBXcml0ZSBpdCBiYWNrIHdpdGggbXV0ZSBmbGFnIHNldC4gKi8KKwlvdXRiX3AoKGkgPj4gNSkgfCBHRU1URUtfTVQsIGd0LT5pbyk7CisJdWRlbGF5KFNIT1JUX0RFTEFZKTsKKworCW11dGV4X3VubG9jaygmZ3QtPmxvY2spOwogfQogCiAvKgogICogVW5zZXQgbXV0ZSBmbGFnLgogICovCi1zdGF0aWMgdm9pZCBnZW10ZWtfdW5tdXRlKHN0cnVjdCBnZW10ZWtfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCBnZW10ZWtfdW5tdXRlKHN0cnVjdCBnZW10ZWsgKmd0KQogewogCWludCBpOwotCWRldi0+bXV0ZWQgPSAwOwogCisJZ3QtPm11dGVkID0gMDsKIAlpZiAoaGFyZG11dGUpIHsKIAkJLyogVHVybiBQTEwgYmFjayBvbi4gKi8KLQkJZ2VtdGVrX3NldGZyZXEoZGV2LCBkZXYtPmxhc3RmcmVxKTsKLQl9IGVsc2UgewotCQlzcGluX2xvY2soJmxvY2spOwotCi0JCWkgPSBpbmJfcChpbyk7Ci0JCW91dGJfcChpID4+IDUsIGlvKTsKLQkJdWRlbGF5KFNIT1JUX0RFTEFZKTsKLQotCQlzcGluX3VubG9jaygmbG9jayk7CisJCWdlbXRla19zZXRmcmVxKGd0LCBndC0+bGFzdGZyZXEpOworCQlyZXR1cm47CiAJfQorCW11dGV4X2xvY2soJmd0LT5sb2NrKTsKKworCWkgPSBpbmJfcChndC0+aW8pOworCW91dGJfcChpID4+IDUsIGd0LT5pbyk7CisJdWRlbGF5KFNIT1JUX0RFTEFZKTsKKworCW11dGV4X3VubG9jaygmZ3QtPmxvY2spOwogfQogCiAvKgogICogR2V0IHNpZ25hbCBzdHJlbmd0aCAoPSBzdGVyZW8gc3RhdHVzKS4KICAqLwotc3RhdGljIGlubGluZSBpbnQgZ2VtdGVrX2dldHNpZ3N0cih2b2lkKQorc3RhdGljIGlubGluZSBpbnQgZ2VtdGVrX2dldHNpZ3N0cihzdHJ1Y3QgZ2VtdGVrICpndCkKIHsKLQlyZXR1cm4gaW5iX3AoaW8pICYgR0VNVEVLX05TID8gMCA6IDE7CisJaW50IHNpZzsKKworCW11dGV4X2xvY2soJmd0LT5sb2NrKTsKKwlzaWcgPSBpbmJfcChndC0+aW8pICYgR0VNVEVLX05TID8gMCA6IDE7CisJbXV0ZXhfdW5sb2NrKCZndC0+bG9jayk7CisJcmV0dXJuIHNpZzsKIH0KIAogLyoKICAqIENoZWNrIGlmIHJlcXVlc3RlZCBjYXJkIGFjdHMgbGlrZSBHZW1UZWsgUmFkaW8gY2FyZC4KICAqLwotc3RhdGljIGludCBnZW10ZWtfdmVyaWZ5KGludCBwb3J0KQorc3RhdGljIGludCBnZW10ZWtfdmVyaWZ5KHN0cnVjdCBnZW10ZWsgKmd0LCBpbnQgcG9ydCkKIHsKLQlzdGF0aWMgaW50IHZlcmlmaWVkID0gLTE7CiAJaW50IGksIHE7CiAKLQlpZiAodmVyaWZpZWQgPT0gcG9ydCkKKwlpZiAoZ3QtPnZlcmlmaWVkID09IHBvcnQpCiAJCXJldHVybiAxOwogCi0Jc3Bpbl9sb2NrKCZsb2NrKTsKKwltdXRleF9sb2NrKCZndC0+bG9jayk7CiAKIAlxID0gaW5iX3AocG9ydCk7CS8qIFJlYWQgYnVzIGNvbnRlbnRzIGJlZm9yZSBwcm9iaW5nLiAqLwogCS8qIFRyeSB0byB0dXJuIG9uIENFLCBDSyBhbmQgREEgcmVzcGVjdGl2ZWx5IGFuZCBjaGVjayBpZiBjYXJkIHJlc3BvbmRzCkBAIC0zMTYsMTUgKzMxOCwxNSBAQAogCQl1ZGVsYXkoU0hPUlRfREVMQVkpOwogCiAJCWlmICgoaW5iX3AocG9ydCkgJiAofkdFTVRFS19OUykpICE9ICgweDE3IHwgKDEgPDwgKGkgKyA1KSkpKSB7Ci0JCQlzcGluX3VubG9jaygmbG9jayk7CisJCQltdXRleF91bmxvY2soJmd0LT5sb2NrKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQogCW91dGJfcChxID4+IDUsIHBvcnQpOwkvKiBXcml0ZSBidXMgY29udGVudHMgYmFjay4gKi8KIAl1ZGVsYXkoU0hPUlRfREVMQVkpOwogCi0Jc3Bpbl91bmxvY2soJmxvY2spOwotCXZlcmlmaWVkID0gcG9ydDsKKwltdXRleF91bmxvY2soJmd0LT5sb2NrKTsKKwlndC0+dmVyaWZpZWQgPSBwb3J0OwogCiAJcmV0dXJuIDE7CiB9CkBAIC0zMzIsODMgKzMzNCw2MSBAQAogLyoKICAqIEF1dG9tYXRpYyBwcm9iaW5nIGZvciBjYXJkLgogICovCi1zdGF0aWMgaW50IGdlbXRla19wcm9iZSh2b2lkKQorc3RhdGljIGludCBnZW10ZWtfcHJvYmUoc3RydWN0IGdlbXRlayAqZ3QpCiB7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9ICZndC0+djRsMl9kZXY7CiAJaW50IGlvcG9ydHNbXSA9IHsgMHgyMGMsIDB4MzBjLCAweDI0YywgMHgzNGMsIDB4MjQ4LCAweDI4YyB9OwogCWludCBpOwogCiAJaWYgKCFwcm9iZSkgewotCQlwcmludGsoS0VSTl9JTkZPICJBdXRvbWF0aWMgZGV2aWNlIHByb2JpbmcgZGlzYWJsZWQuXG4iKTsKKwkJdjRsMl9pbmZvKHY0bDJfZGV2LCAiQXV0b21hdGljIGRldmljZSBwcm9iaW5nIGRpc2FibGVkLlxuIik7CiAJCXJldHVybiAtMTsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJBdXRvbWF0aWMgZGV2aWNlIHByb2JpbmcgZW5hYmxlZC5cbiIpOworCXY0bDJfaW5mbyh2NGwyX2RldiwgIkF1dG9tYXRpYyBkZXZpY2UgcHJvYmluZyBlbmFibGVkLlxuIik7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShpb3BvcnRzKTsgKytpKSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIlRyeWluZyBJL08gcG9ydCAweCV4Li4uXG4iLCBpb3BvcnRzW2ldKTsKKwkJdjRsMl9pbmZvKHY0bDJfZGV2LCAiVHJ5aW5nIEkvTyBwb3J0IDB4JXguLi5cbiIsIGlvcG9ydHNbaV0pOwogCiAJCWlmICghcmVxdWVzdF9yZWdpb24oaW9wb3J0c1tpXSwgMSwgImdlbXRlay1wcm9iZSIpKSB7Ci0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJJL08gcG9ydCAweCV4IGJ1c3khXG4iLAorCQkJdjRsMl93YXJuKHY0bDJfZGV2LCAiSS9PIHBvcnQgMHgleCBidXN5IVxuIiwKIAkJCSAgICAgICBpb3BvcnRzW2ldKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKGdlbXRla192ZXJpZnkoaW9wb3J0c1tpXSkpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIkNhcmQgZm91bmQgZnJvbSBJL08gcG9ydCAiCisJCWlmIChnZW10ZWtfdmVyaWZ5KGd0LCBpb3BvcnRzW2ldKSkgeworCQkJdjRsMl9pbmZvKHY0bDJfZGV2LCAiQ2FyZCBmb3VuZCBmcm9tIEkvTyBwb3J0ICIKIAkJCSAgICAgICAiMHgleCFcbiIsIGlvcG9ydHNbaV0pOwogCiAJCQlyZWxlYXNlX3JlZ2lvbihpb3BvcnRzW2ldLCAxKTsKLQotCQkJaW8gPSBpb3BvcnRzW2ldOwotCQkJcmV0dXJuIGlvOworCQkJZ3QtPmlvID0gaW9wb3J0c1tpXTsKKwkJCXJldHVybiBndC0+aW87CiAJCX0KIAogCQlyZWxlYXNlX3JlZ2lvbihpb3BvcnRzW2ldLCAxKTsKIAl9CiAKLQlwcmludGsoS0VSTl9FUlIgIkF1dG9tYXRpYyBwcm9iaW5nIGZhaWxlZCFcbiIpOwotCisJdjRsMl9lcnIodjRsMl9kZXYsICJBdXRvbWF0aWMgcHJvYmluZyBmYWlsZWQhXG4iKTsKIAlyZXR1cm4gLTE7CiB9CiAKIC8qCiAgKiBWaWRlbyA0IExpbnV4IHN0dWZmLgogICovCi0KLXN0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKLQl7Ci0JCS5pZCA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCi0JCS5uYW1lID0gIk11dGUiLAotCQkubWluaW11bSA9IDAsCi0JCS5tYXhpbXVtID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxLAotCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JfSwgewotCQkuaWQgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCi0JCS5uYW1lID0gIlZvbHVtZSIsCi0JCS5taW5pbXVtID0gMCwKLQkJLm1heGltdW0gPSA2NTUzNSwKLQkJLnN0ZXAgPSA2NTUzNSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAweGZmLAotCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JfQotfTsKLQotc3RhdGljIGludCBnZW10ZWtfZXhjbHVzaXZlX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IGdlbXRla19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZpbl91c2UpID8gLUVCVVNZIDogMDsKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBnZW10ZWtfZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IGdlbXRla19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQogewotCWNsZWFyX2JpdCgwLCAmaW5fdXNlKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBnZW10ZWtfZm9wcyA9IHsKIAkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4JCT0gZ2VtdGVrX2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlCT0gZ2VtdGVrX2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuCQk9IGdlbXRla19vcGVuLAorCS5yZWxlYXNlCT0gZ2VtdGVrX3JlbGVhc2UsCiAJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKIH07CiAKQEAgLTQxNywyMyArMzk3LDI1IEBACiB7CiAJc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby1nZW10ZWsiLCBzaXplb2Yodi0+ZHJpdmVyKSk7CiAJc3RybGNweSh2LT5jYXJkLCAiR2VtVGVrIiwgc2l6ZW9mKHYtPmNhcmQpKTsKLQlzcHJpbnRmKHYtPmJ1c19pbmZvLCAiSVNBIik7CisJc3RybGNweSh2LT5idXNfaW5mbywgIklTQSIsIHNpemVvZih2LT5idXNfaW5mbykpOwogCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwotCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX3R1bmVyICp2KQogeworCXN0cnVjdCBnZW10ZWsgKmd0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwogCWlmICh2LT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3RyY3B5KHYtPm5hbWUsICJGTSIpOworCXN0cmxjcHkodi0+bmFtZSwgIkZNIiwgc2l6ZW9mKHYtPm5hbWUpKTsKIAl2LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAl2LT5yYW5nZWxvdyA9IEdFTVRFS19MT1dGUkVROwogCXYtPnJhbmdlaGlnaCA9IEdFTVRFS19ISUdIRlJFUTsKIAl2LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTE9XIHwgVjRMMl9UVU5FUl9DQVBfU1RFUkVPOwotCXYtPnNpZ25hbCA9IDB4ZmZmZiAqIGdlbXRla19nZXRzaWdzdHIoKTsKKwl2LT5zaWduYWwgPSAweGZmZmYgKiBnZW10ZWtfZ2V0c2lnc3RyKGd0KTsKIAlpZiAodi0+c2lnbmFsKSB7CiAJCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwogCQl2LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwpAQCAtNDQxLDY1ICs0MjMsNTYgQEAKIAkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POwogCQl2LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0JaWYgKHYtPmluZGV4ID4gMCkKKwlyZXR1cm4gKHYtPmluZGV4ICE9IDApID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgICAgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQoreworCXN0cnVjdCBnZW10ZWsgKmd0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCWlmIChmLT50dW5lciAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKKwlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKKwlmLT5mcmVxdWVuY3kgPSBndC0+bGFzdGZyZXE7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgICAgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCBnZW10ZWtfZGV2aWNlICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IGdlbXRlayAqZ3QgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCi0JZ2VtdGVrX3NldGZyZXEocnQsIGYtPmZyZXF1ZW5jeSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkgICAgICBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCi17Ci0Jc3RydWN0IGdlbXRla19kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQotCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwotCWYtPmZyZXF1ZW5jeSA9IHJ0LT5sYXN0ZnJlcTsKKwlpZiAoZi0+dHVuZXIgIT0gMCB8fCBmLT50eXBlICE9IFY0TDJfVFVORVJfUkFESU8pCisJCXJldHVybiAtRUlOVkFMOworCWdlbXRla19zZXRmcmVxKGd0LCBmLT5mcmVxdWVuY3kpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICAgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgKytpKSB7Ci0JCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7Ci0JCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLCBzaXplb2YoKnFjKSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDApOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOwogCX0KLQlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IGdlbXRla19kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgZ2VtdGVrICpndCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQljdHJsLT52YWx1ZSA9IHJ0LT5tdXRlZDsKLQkJcmV0dXJuIDA7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCWlmIChydC0+bXV0ZWQpCi0JCQljdHJsLT52YWx1ZSA9IDA7Ci0JCWVsc2UKLQkJCWN0cmwtPnZhbHVlID0gNjU1MzU7CisJCWN0cmwtPnZhbHVlID0gZ3QtPm11dGVkOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CkBAIC01MDgsMzUgKzQ4MSwxOSBAQAogc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IGdlbXRla19kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgZ2VtdGVrICpndCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgogCQlpZiAoY3RybC0+dmFsdWUpCi0JCQlnZW10ZWtfbXV0ZShydCk7CisJCQlnZW10ZWtfbXV0ZShndCk7CiAJCWVsc2UKLQkJCWdlbXRla191bm11dGUocnQpOwotCQlyZXR1cm4gMDsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJaWYgKGN0cmwtPnZhbHVlKQotCQkJZ2VtdGVrX3VubXV0ZShydCk7Ci0JCWVsc2UKLQkJCWdlbXRla19tdXRlKHJ0KTsKKwkJCWdlbXRla191bm11dGUoZ3QpOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2F1ZGlvICphKQotewotCWlmIChhLT5pbmRleCA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3RyY3B5KGEtPm5hbWUsICJSYWRpbyIpOwotCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKIHsKIAkqaSA9IDA7CkBAIC01NDUsMTYgKzUwMiwyMCBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKIHsKLQlpZiAoaSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gKGkgIT0gMCkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJYS0+aW5kZXggPSAwOworCXN0cmxjcHkoYS0+bmFtZSwgIlJhZGlvIiwgc2l6ZW9mKGEtPm5hbWUpKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKIHsKLQlpZiAoYS0+aW5kZXggIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIChhLT5pbmRleCAhPSAwKSA/IC1FSU5WQUwgOiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIGdlbXRla19pb2N0bF9vcHMgPSB7CkBAIC01NzIsNjIgKzUzMyw3MyBAQAogCS52aWRpb2Nfc19jdHJsCQk9IHZpZGlvY19zX2N0cmwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGdlbXRla19yYWRpbyA9IHsKLQkubmFtZQkJPSAiR2VtVGVrIFJhZGlvIGNhcmQiLAotCS5mb3BzCQk9ICZnZW10ZWtfZm9wcywKLQkuaW9jdGxfb3BzIAk9ICZnZW10ZWtfaW9jdGxfb3BzLAotCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCi19OwotCiAvKgogICogSW5pdGlhbGl6YXRpb24gLyBjbGVhbnVwIHJlbGF0ZWQgc3R1ZmYuCiAgKi8KIAotLyoKLSAqIEluaXRpbGl6ZSBjYXJkLgotICovCiBzdGF0aWMgaW50IF9faW5pdCBnZW10ZWtfaW5pdCh2b2lkKQogewotCXByaW50ayhLRVJOX0lORk8gUkFESU9fQkFOTkVSICJcbiIpOworCXN0cnVjdCBnZW10ZWsgKmd0ID0gJmdlbXRla19jYXJkOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmZ3QtPnY0bDJfZGV2OworCWludCByZXM7CiAKLQlzcGluX2xvY2tfaW5pdCgmbG9jayk7CisJc3RybGNweSh2NGwyX2Rldi0+bmFtZSwgImdlbXRlayIsIHNpemVvZih2NGwyX2Rldi0+bmFtZSkpOwogCi0JZ2VtdGVrX3Byb2JlKCk7Ci0JaWYgKGlvKSB7Ci0JCWlmICghcmVxdWVzdF9yZWdpb24oaW8sIDEsICJnZW10ZWsiKSkgewotCQkJcHJpbnRrKEtFUk5fRVJSICJJL08gcG9ydCAweCV4IGFscmVhZHkgaW4gdXNlLlxuIiwgaW8pOworCXY0bDJfaW5mbyh2NGwyX2RldiwgIkdlbVRlayBSYWRpbyBjYXJkIGRyaXZlcjogdjAuMC4zXG4iKTsKKworCW11dGV4X2luaXQoJmd0LT5sb2NrKTsKKworCWd0LT52ZXJpZmllZCA9IC0xOworCWd0LT5pbyA9IGlvOworCWdlbXRla19wcm9iZShndCk7CisJaWYgKGd0LT5pbykgeworCQlpZiAoIXJlcXVlc3RfcmVnaW9uKGd0LT5pbywgMSwgImdlbXRlayIpKSB7CisJCQl2NGwyX2Vycih2NGwyX2RldiwgIkkvTyBwb3J0IDB4JXggYWxyZWFkeSBpbiB1c2UuXG4iLCBndC0+aW8pOwogCQkJcmV0dXJuIC1FQlVTWTsKIAkJfQogCi0JCWlmICghZ2VtdGVrX3ZlcmlmeShpbykpCi0JCQlwcmludGsoS0VSTl9XQVJOSU5HICJDYXJkIGF0IEkvTyBwb3J0IDB4JXggZG9lcyBub3QgIgorCQlpZiAoIWdlbXRla192ZXJpZnkoZ3QsIGd0LT5pbykpCisJCQl2NGwyX3dhcm4odjRsMl9kZXYsICJDYXJkIGF0IEkvTyBwb3J0IDB4JXggZG9lcyBub3QgIgogCQkJICAgICAgICJyZXNwb25kIHByb3Blcmx5LCBjaGVjayB5b3VyICIKLQkJCSAgICAgICAiY29uZmlndXJhdGlvbi5cbiIsIGlvKTsKKwkJCSAgICAgICAiY29uZmlndXJhdGlvbi5cbiIsIGd0LT5pbyk7CiAJCWVsc2UKLQkJCXByaW50ayhLRVJOX0lORk8gIlVzaW5nIEkvTyBwb3J0IDB4JXguXG4iLCBpbyk7CisJCQl2NGwyX2luZm8odjRsMl9kZXYsICJVc2luZyBJL08gcG9ydCAweCV4LlxuIiwgZ3QtPmlvKTsKIAl9IGVsc2UgaWYgKHByb2JlKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiQXV0b21hdGljIHByb2JpbmcgZmFpbGVkIGFuZCBubyAiCisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiQXV0b21hdGljIHByb2JpbmcgZmFpbGVkIGFuZCBubyAiCiAJCSAgICAgICAiZml4ZWQgSS9PIHBvcnQgZGVmaW5lZC5cbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9FUlIgIkF1dG9tYXRpYyBwcm9iaW5nIGRpc2FibGVkIGJ1dCBubyBmaXhlZCAiCisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiQXV0b21hdGljIHByb2JpbmcgZGlzYWJsZWQgYnV0IG5vIGZpeGVkICIKIAkJICAgICAgICJJL08gcG9ydCBkZWZpbmVkLiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQl2aWRlb19zZXRfZHJ2ZGF0YSgmZ2VtdGVrX3JhZGlvLCAmZ2VtdGVrX3VuaXQpOworCXJlcyA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsIHY0bDJfZGV2KTsKKwlpZiAocmVzIDwgMCkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgIkNvdWxkIG5vdCByZWdpc3RlciB2NGwyX2RldmljZVxuIik7CisJCXJlbGVhc2VfcmVnaW9uKGd0LT5pbywgMSk7CisJCXJldHVybiByZXM7CisJfQogCi0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmZ2VtdGVrX3JhZGlvLCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgewotCQlyZWxlYXNlX3JlZ2lvbihpbywgMSk7CisJc3RybGNweShndC0+dmRldi5uYW1lLCB2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKGd0LT52ZGV2Lm5hbWUpKTsKKwlndC0+dmRldi52NGwyX2RldiA9IHY0bDJfZGV2OworCWd0LT52ZGV2LmZvcHMgPSAmZ2VtdGVrX2ZvcHM7CisJZ3QtPnZkZXYuaW9jdGxfb3BzID0gJmdlbXRla19pb2N0bF9vcHM7CisJZ3QtPnZkZXYucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5OworCXZpZGVvX3NldF9kcnZkYXRhKCZndC0+dmRldiwgZ3QpOworCisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmZ3QtPnZkZXYsIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7CisJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIodjRsMl9kZXYpOworCQlyZWxlYXNlX3JlZ2lvbihndC0+aW8sIDEpOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCS8qIFNldCBkZWZhdWx0cyAqLwotCWdlbXRla191bml0Lmxhc3RmcmVxID0gR0VNVEVLX0xPV0ZSRVE7Ci0JZ2VtdGVrX3VuaXQuYnUyNjE0ZGF0YSA9IDA7CisJZ3QtPmxhc3RmcmVxID0gR0VNVEVLX0xPV0ZSRVE7CisJZ3QtPmJ1MjYxNGRhdGEgPSAwOwogCiAJaWYgKGluaXRtdXRlKQotCQlnZW10ZWtfbXV0ZSgmZ2VtdGVrX3VuaXQpOworCQlnZW10ZWtfbXV0ZShndCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTYzNywxNSArNjA5LDE5IEBACiAgKi8KIHN0YXRpYyB2b2lkIF9fZXhpdCBnZW10ZWtfZXhpdCh2b2lkKQogeworCXN0cnVjdCBnZW10ZWsgKmd0ID0gJmdlbXRla19jYXJkOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmZ3QtPnY0bDJfZGV2OworCiAJaWYgKHNodXRkb3duKSB7CiAJCWhhcmRtdXRlID0gMTsJLyogVHVybiBvZmYgUExMICovCi0JCWdlbXRla19tdXRlKCZnZW10ZWtfdW5pdCk7CisJCWdlbXRla19tdXRlKGd0KTsKIAl9IGVsc2UgewotCQlwcmludGsoS0VSTl9JTkZPICJNb2R1bGUgdW5sb2FkZWQgYnV0IGNhcmQgbm90IG11dGVkIVxuIik7CisJCXY0bDJfaW5mbyh2NGwyX2RldiwgIk1vZHVsZSB1bmxvYWRlZCBidXQgY2FyZCBub3QgbXV0ZWQhXG4iKTsKIAl9CiAKLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmZ2VtdGVrX3JhZGlvKTsKLQlyZWxlYXNlX3JlZ2lvbihpbywgMSk7CisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmd0LT52ZGV2KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZndC0+djRsMl9kZXYpOworCXJlbGVhc2VfcmVnaW9uKGd0LT5pbywgMSk7CiB9CiAKIG1vZHVsZV9pbml0KGdlbXRla19pbml0KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWFlc3Ryby5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYWVzdHJvLmMKaW5kZXggYmEzYTEzYS4uMDFhNmQyMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYWVzdHJvLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYWVzdHJvLmMKQEAgLTIyLDI3ICsyMiwyMiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLwotI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsMCw2KQotI2RlZmluZSBEUklWRVJfVkVSU0lPTgkiMC4wNiIKK01PRFVMRV9BVVRIT1IoIkFkYW0gVGxhbGthLCBhdGxrYUBwZy5nZGEucGwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiUmFkaW8gZHJpdmVyIGZvciB0aGUgTWFlc3RybyBQQ0kgc291bmQgY2FyZCByYWRpby4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCByYWRpb19xY3RybFtdID0gewotCXsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19NVVRFLAotCQkubmFtZSAgICAgICAgICA9ICJNdXRlIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMSwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCX0KLX07CitzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7Cittb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7CisKKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAwLCA2KQorI2RlZmluZSBEUklWRVJfVkVSU0lPTgkiMC4wNiIKIAogI2RlZmluZSBHUElPX0RBVEEJMHg2MCAgIC8qIHBvcnQgb2Zmc2V0IGZyb20gRVNTX0lPX0JBU0UgKi8KIApAQCAtNzIsNjIgKzY3LDI3IEBACiAKICNkZWZpbmUgQklUUzJGUkVRKHgpCSgoeCkgKiBGUkVRX1NURVAgLSBGUkVRX0lGKQogCi1zdGF0aWMgaW50IHJhZGlvX25yID0gLTE7Ci1tb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7CitzdHJ1Y3QgbWFlc3RybyB7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmRldjsKKwlzdHJ1Y3QgcGNpX2RldiAqcGRldjsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKIAotc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5fdXNlOworCXUxNglpbzsJLyogYmFzZSBvZiBNYWVzdHJvIGNhcmQgcmFkaW8gaW8gKEdQSU9fREFUQSkqLworCXUxNgltdXRlZDsJLyogVklERU9fQVVESU9fTVVURSAqLworCXUxNglzdGVyZW87CS8qIFZJREVPX1RVTkVSX1NURVJFT19PTiAqLworCXUxNgl0dW5lZDsJLyogc2lnbmFsIHN0cmVuZ3RoICgwIG9yIDB4ZmZmZikgKi8KK307CiAKLXN0YXRpYyBpbnQgbWFlc3Ryb19wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCk7Ci0KLXN0YXRpYyBpbnQgbWFlc3Ryb19leGNsdXNpdmVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1hZXN0cm8gKnRvX21hZXN0cm8oc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldikKIHsKLQlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmaW5fdXNlKSA/IC1FQlVTWSA6IDA7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IG1hZXN0cm8sIHY0bDJfZGV2KTsKIH0KIAotc3RhdGljIGludCBtYWVzdHJvX2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIHUzMiByYWRpb19iaXRzX2dldChzdHJ1Y3QgbWFlc3RybyAqZGV2KQogewotCWNsZWFyX2JpdCgwLCAmaW5fdXNlKTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgbWFlc3Ryb19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpOwotCi1zdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbWFlc3Ryb19yX3BjaV90YmxbXSA9IHsKLQl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9FU1MsIFBDSV9ERVZJQ0VfSURfRVNTX0VTUzE5NjgpLAotCQkuY2xhc3MgPSBQQ0lfQ0xBU1NfTVVMVElNRURJQV9BVURJTyA8PCA4LAotCQkuY2xhc3NfbWFzayA9IDB4ZmZmZjAwIH0sCi0JeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfRVNTLCBQQ0lfREVWSUNFX0lEX0VTU19FU1MxOTc4KSwKLQkJLmNsYXNzID0gUENJX0NMQVNTX01VTFRJTUVESUFfQVVESU8gPDwgOCwKLQkJLmNsYXNzX21hc2sgPSAweGZmZmYwMCB9LAotCXsgMCB9Ci19OwotTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG1hZXN0cm9fcl9wY2lfdGJsKTsKLQotc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG1hZXN0cm9fcl9kcml2ZXIgPSB7Ci0JLm5hbWUJCT0gIm1hZXN0cm9fcmFkaW8iLAotCS5pZF90YWJsZQk9IG1hZXN0cm9fcl9wY2lfdGJsLAotCS5wcm9iZQkJPSBtYWVzdHJvX3Byb2JlLAotCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobWFlc3Ryb19yZW1vdmUpLAotfTsKLQotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBtYWVzdHJvX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IG1hZXN0cm9fZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UgICAgICAgID0gbWFlc3Ryb19leGNsdXNpdmVfcmVsZWFzZSwKLQkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAotfTsKLQotc3RydWN0IHJhZGlvX2RldmljZSB7Ci0JdTE2CWlvLAkvKiBiYXNlIG9mIE1hZXN0cm8gY2FyZCByYWRpbyBpbyAoR1BJT19EQVRBKSovCi0JCW11dGVkLAkvKiBWSURFT19BVURJT19NVVRFICovCi0JCXN0ZXJlbywJLyogVklERU9fVFVORVJfU1RFUkVPX09OICovCi0JCXR1bmVkOwkvKiBzaWduYWwgc3RyZW5ndGggKDAgb3IgMHhmZmZmKSAqLwotfTsKLQotc3RhdGljIHUzMiByYWRpb19iaXRzX2dldChzdHJ1Y3QgcmFkaW9fZGV2aWNlICpkZXYpCi17Ci0JcmVnaXN0ZXIgdTE2IGlvPWRldi0+aW8sIGwsIHJkYXRhOwotCXJlZ2lzdGVyIHUzMiBkYXRhPTA7CisJdTE2IGlvID0gZGV2LT5pbywgbCwgcmRhdGE7CisJdTMyIGRhdGEgPSAwOwogCXUxNiBvbWFzazsKIAogCW9tYXNrID0gaW53KGlvICsgSU9fTUFTSyk7CkBAIC0xMzUsMjUgKzk1LDIzIEBACiAJb3V0dygwLCBpbyk7CiAJdWRlbGF5KDE2KTsKIAotCWZvciAobD0yNDtsLS07KSB7CisJZm9yIChsID0gMjQ7IGwtLTspIHsKIAkJb3V0dyhTVFJfQ0xLLCBpbyk7CQkvKiBISSBzdGF0ZSAqLwogCQl1ZGVsYXkoMik7Ci0JCWlmKCFsKQorCQlpZiAoIWwpCiAJCQlkZXYtPnR1bmVkID0gaW53KGlvKSAmIFNUUl9NT1NUID8gMCA6IDB4ZmZmZjsKIAkJb3V0dygwLCBpbyk7CQkJLyogTE8gc3RhdGUgKi8KIAkJdWRlbGF5KDIpOwogCQlkYXRhIDw8PSAxOwkJCS8qIHNoaWZ0IGRhdGEgKi8KIAkJcmRhdGEgPSBpbncoaW8pOwotCQlpZighbCkKLQkJCWRldi0+c3RlcmVvID0gIHJkYXRhICYgU1RSX01PU1QgPwotCQkJMCA6IDE7Ci0JCWVsc2UKLQkJCWlmKHJkYXRhICYgU1RSX0RBVEEpCi0JCQkJZGF0YSsrOworCQlpZiAoIWwpCisJCQlkZXYtPnN0ZXJlbyA9IChyZGF0YSAmIFNUUl9NT1NUKSA/ICAwIDogMTsKKwkJZWxzZSBpZiAocmRhdGEgJiBTVFJfREFUQSkKKwkJCWRhdGErKzsKIAkJdWRlbGF5KDIpOwogCX0KIAotCWlmKGRldi0+bXV0ZWQpCisJaWYgKGRldi0+bXV0ZWQpCiAJCW91dHcoU1RSX1dSRU4sIGlvKTsKIAogCXVkZWxheSg0KTsKQEAgLTE2MiwxOCArMTIwLDE4IEBACiAJcmV0dXJuIGRhdGEgJiAweDNmZmU7CiB9CiAKLXN0YXRpYyB2b2lkIHJhZGlvX2JpdHNfc2V0KHN0cnVjdCByYWRpb19kZXZpY2UgKmRldiwgdTMyIGRhdGEpCitzdGF0aWMgdm9pZCByYWRpb19iaXRzX3NldChzdHJ1Y3QgbWFlc3RybyAqZGV2LCB1MzIgZGF0YSkKIHsKLQlyZWdpc3RlciB1MTYgaW89ZGV2LT5pbywgbCwgYml0czsKKwl1MTYgaW8gPSBkZXYtPmlvLCBsLCBiaXRzOwogCXUxNiBvbWFzaywgb2RpcjsKIAogCW9tYXNrID0gaW53KGlvICsgSU9fTUFTSyk7Ci0Jb2RpciAgPSAoaW53KGlvICsgSU9fRElSKSAmIH5TVFJfREFUQSkgfCAoU1RSX0NMSyB8IFNUUl9XUkVOKTsKKwlvZGlyID0gKGludyhpbyArIElPX0RJUikgJiB+U1RSX0RBVEEpIHwgKFNUUl9DTEsgfCBTVFJfV1JFTik7CiAJb3V0dyhvZGlyIHwgU1RSX0RBVEEsIGlvICsgSU9fRElSKTsKIAlvdXR3KH4oU1RSX0RBVEEgfCBTVFJfQ0xLIHwgU1RSX1dSRU4pLCBpbyArIElPX01BU0spOwogCXVkZWxheSgxNik7Ci0JZm9yIChsPTI1O2w7bC0tKSB7Ci0JCWJpdHMgPSAoKGRhdGEgPj4gMTgpICYgU1RSX0RBVEEpIHwgU1RSX1dSRU4gOworCWZvciAobCA9IDI1OyBsOyBsLS0pIHsKKwkJYml0cyA9ICgoZGF0YSA+PiAxOCkgJiBTVFJfREFUQSkgfCBTVFJfV1JFTjsKIAkJZGF0YSA8PD0gMTsJCQkvKiBzaGlmdCBkYXRhICovCiAJCW91dHcoYml0cywgaW8pOwkJCS8qIHN0YXJ0IHN0cm9iZSAqLwogCQl1ZGVsYXkoMik7CkBAIC0xODMsNyArMTQxLDcgQEAKIAkJdWRlbGF5KDQpOwogCX0KIAotCWlmKCFkZXYtPm11dGVkKQorCWlmICghZGV2LT5tdXRlZCkKIAkJb3V0dygwLCBpbyk7CiAKIAl1ZGVsYXkoNCk7CkBAIC0xOTUsNzggKzE1Myw3OSBAQAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICp2KQogeworCXN0cnVjdCBtYWVzdHJvICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCiAJc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby1tYWVzdHJvIiwgc2l6ZW9mKHYtPmRyaXZlcikpOwogCXN0cmxjcHkodi0+Y2FyZCwgIk1hZXN0cm8gUmFkaW8iLCBzaXplb2Yodi0+Y2FyZCkpOwotCXNwcmludGYodi0+YnVzX2luZm8sICJQQ0kiKTsKKwlzbnByaW50Zih2LT5idXNfaW5mbywgc2l6ZW9mKHYtPmJ1c19pbmZvKSwgIlBDSTolcyIsIHBjaV9uYW1lKGRldi0+cGRldikpOwogCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwotCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBtYWVzdHJvICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQkodm9pZClyYWRpb19iaXRzX2dldChjYXJkKTsKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCXJhZGlvX2JpdHNfZ2V0KGRldik7CiAKLQlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJc3RybGNweSh2LT5uYW1lLCAiRk0iLCBzaXplb2Yodi0+bmFtZSkpOwogCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCXYtPnJhbmdlbG93ID0gRlJFUV9MTzsKIAl2LT5yYW5nZWhpZ2ggPSBGUkVRX0hJOwotCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PfFY0TDJfVFVORVJfU1VCX1NURVJFTzsKKwl2LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTyB8IFY0TDJfVFVORVJfU1VCX1NURVJFTzsKIAl2LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTE9XOwotCWlmKGNhcmQtPnN0ZXJlbykKKwlpZiAoZGV2LT5zdGVyZW8pCiAJCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwogCWVsc2UKIAkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POwotCXYtPnNpZ25hbCA9IGNhcmQtPnR1bmVkOworCXYtPnNpZ25hbCA9IGRldi0+dHVuZWQ7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlpZiAodi0+aW5kZXggPiAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gdi0+aW5kZXggPyAtRUlOVkFMIDogMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgbWFlc3RybyAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmIChmLT5mcmVxdWVuY3kgPCBGUkVRX0xPIHx8IGYtPmZyZXF1ZW5jeSA+IEZSRVFfSEkpCiAJCXJldHVybiAtRUlOVkFMOwotCXJhZGlvX2JpdHNfc2V0KGNhcmQsIEZSRVEyQklUUyhmLT5mcmVxdWVuY3kpKTsKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCXJhZGlvX2JpdHNfc2V0KGRldiwgRlJFUTJCSVRTKGYtPmZyZXF1ZW5jeSkpOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgbWFlc3RybyAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwotCWYtPmZyZXF1ZW5jeSA9IEJJVFMyRlJFUShyYWRpb19iaXRzX2dldChjYXJkKSk7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlmLT5mcmVxdWVuY3kgPSBCSVRTMkZSRVEocmFkaW9fYml0c19nZXQoZGV2KSk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7IGkrKykgewotCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgewotCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwKLQkJCQkJCXNpemVvZigqcWMpKTsKLQkJCXJldHVybiAwOwotCQl9CisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMSk7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMjc0LDExICsyMzMsMTEgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgbWFlc3RybyAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCWN0cmwtPnZhbHVlID0gY2FyZC0+bXV0ZWQ7CisJCWN0cmwtPnZhbHVlID0gZGV2LT5tdXRlZDsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRUlOVkFMOwpAQCAtMjg3LDM0ICsyNDYsMjYgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQlyZWdpc3RlciB1MTYgaW8gPSBjYXJkLT5pbzsKLQlyZWdpc3RlciB1MTYgb21hc2sgPSBpbncoaW8gKyBJT19NQVNLKTsKKwlzdHJ1Y3QgbWFlc3RybyAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwl1MTYgaW8gPSBkZXYtPmlvOworCXUxNiBvbWFzazsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJCW9tYXNrID0gaW53KGlvICsgSU9fTUFTSyk7CiAJCW91dHcoflNUUl9XUkVOLCBpbyArIElPX01BU0spOwotCQlvdXR3KChjYXJkLT5tdXRlZCA9IGN0cmwtPnZhbHVlICkgPwotCQkJCVNUUl9XUkVOIDogMCwgaW8pOworCQlkZXYtPm11dGVkID0gY3RybC0+dmFsdWU7CisJCW91dHcoZGV2LT5tdXRlZCA/IFNUUl9XUkVOIDogMCwgaW8pOwogCQl1ZGVsYXkoNCk7CiAJCW91dHcob21hc2ssIGlvICsgSU9fTUFTSyk7CiAJCW1zbGVlcCgxMjUpOworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCi17Ci0JaWYgKGEtPmluZGV4ID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzdHJjcHkoYS0+bmFtZSwgIlJhZGlvIik7Ci0JYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQogewogCSppID0gMDsKQEAgLTMyMywyMCArMjc0LDU3IEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQogewotCWlmIChpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiBpID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCWEtPmluZGV4ID0gMDsKKwlzdHJsY3B5KGEtPm5hbWUsICJSYWRpbyIsIHNpemVvZihhLT5uYW1lKSk7CisJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCiB7Ci0JaWYgKGEtPmluZGV4ICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiBhLT5pbmRleCA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IG1hZXN0cm9fb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHUxNiBfX2RldmluaXQgcmFkaW9fcG93ZXJfb24oc3RydWN0IHJhZGlvX2RldmljZSAqZGV2KQorc3RhdGljIGludCBtYWVzdHJvX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgbWFlc3Ryb19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbiAgICAgICAgICAgPSBtYWVzdHJvX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gbWFlc3Ryb19yZWxlYXNlLAorCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIG1hZXN0cm9faW9jdGxfb3BzID0geworCS52aWRpb2NfcXVlcnljYXAgICAgPSB2aWRpb2NfcXVlcnljYXAsCisJLnZpZGlvY19nX3R1bmVyICAgICA9IHZpZGlvY19nX3R1bmVyLAorCS52aWRpb2Nfc190dW5lciAgICAgPSB2aWRpb2Nfc190dW5lciwKKwkudmlkaW9jX2dfYXVkaW8gICAgID0gdmlkaW9jX2dfYXVkaW8sCisJLnZpZGlvY19zX2F1ZGlvICAgICA9IHZpZGlvY19zX2F1ZGlvLAorCS52aWRpb2NfZ19pbnB1dCAgICAgPSB2aWRpb2NfZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQgICAgID0gdmlkaW9jX3NfaW5wdXQsCisJLnZpZGlvY19nX2ZyZXF1ZW5jeSA9IHZpZGlvY19nX2ZyZXF1ZW5jeSwKKwkudmlkaW9jX3NfZnJlcXVlbmN5ID0gdmlkaW9jX3NfZnJlcXVlbmN5LAorCS52aWRpb2NfcXVlcnljdHJsICAgPSB2aWRpb2NfcXVlcnljdHJsLAorCS52aWRpb2NfZ19jdHJsICAgICAgPSB2aWRpb2NfZ19jdHJsLAorCS52aWRpb2Nfc19jdHJsICAgICAgPSB2aWRpb2Nfc19jdHJsLAorfTsKKworc3RhdGljIHUxNiBfX2RldmluaXQgcmFkaW9fcG93ZXJfb24oc3RydWN0IG1hZXN0cm8gKmRldikKIHsKIAlyZWdpc3RlciB1MTYgaW8gPSBkZXYtPmlvOwogCXJlZ2lzdGVyIHUzMiBvZnJlcTsKQEAgLTM2MCwzMyArMzQ4LDExIEBACiAJcmV0dXJuIChvZnJlcSA9PSByYWRpb19iaXRzX2dldChkZXYpKTsKIH0KIAotc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBtYWVzdHJvX2lvY3RsX29wcyA9IHsKLQkudmlkaW9jX3F1ZXJ5Y2FwICAgID0gdmlkaW9jX3F1ZXJ5Y2FwLAotCS52aWRpb2NfZ190dW5lciAgICAgPSB2aWRpb2NfZ190dW5lciwKLQkudmlkaW9jX3NfdHVuZXIgICAgID0gdmlkaW9jX3NfdHVuZXIsCi0JLnZpZGlvY19nX2F1ZGlvICAgICA9IHZpZGlvY19nX2F1ZGlvLAotCS52aWRpb2Nfc19hdWRpbyAgICAgPSB2aWRpb2Nfc19hdWRpbywKLQkudmlkaW9jX2dfaW5wdXQgICAgID0gdmlkaW9jX2dfaW5wdXQsCi0JLnZpZGlvY19zX2lucHV0ICAgICA9IHZpZGlvY19zX2lucHV0LAotCS52aWRpb2NfZ19mcmVxdWVuY3kgPSB2aWRpb2NfZ19mcmVxdWVuY3ksCi0JLnZpZGlvY19zX2ZyZXF1ZW5jeSA9IHZpZGlvY19zX2ZyZXF1ZW5jeSwKLQkudmlkaW9jX3F1ZXJ5Y3RybCAgID0gdmlkaW9jX3F1ZXJ5Y3RybCwKLQkudmlkaW9jX2dfY3RybCAgICAgID0gdmlkaW9jX2dfY3RybCwKLQkudmlkaW9jX3NfY3RybCAgICAgID0gdmlkaW9jX3NfY3RybCwKLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIG1hZXN0cm9fcmFkaW8gPSB7Ci0JLm5hbWUgICAgICAgICAgID0gIk1hZXN0cm8gcmFkaW8iLAotCS5mb3BzICAgICAgICAgICA9ICZtYWVzdHJvX2ZvcHMsCi0JLmlvY3RsX29wcyAJPSAmbWFlc3Ryb19pb2N0bF9vcHMsCi0JLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZSwKLX07Ci0KIHN0YXRpYyBpbnQgX19kZXZpbml0IG1hZXN0cm9fcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKLQlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpyYWRpb191bml0OwotCXN0cnVjdCB2aWRlb19kZXZpY2UgKm1hZXN0cm9fcmFkaW9faW5zdDsKKwlzdHJ1Y3QgbWFlc3RybyAqZGV2OworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXY7CiAJaW50IHJldHZhbDsKIAogCXJldHZhbCA9IHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpOwpAQCAtMzk3LDQ2ICszNjMsNTMgQEAKIAogCXJldHZhbCA9IC1FTk9NRU07CiAKLQlyYWRpb191bml0ID0ga3phbGxvYyhzaXplb2YoKnJhZGlvX3VuaXQpLCBHRlBfS0VSTkVMKTsKLQlpZiAocmFkaW9fdW5pdCA9PSBOVUxMKSB7CisJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCWlmIChkZXYgPT0gTlVMTCkgewogCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJub3QgZW5vdWdoIG1lbW9yeVxuIik7CiAJCWdvdG8gZXJyOwogCX0KIAotCXJhZGlvX3VuaXQtPmlvID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApICsgR1BJT19EQVRBOworCXY0bDJfZGV2ID0gJmRldi0+djRsMl9kZXY7CisJbXV0ZXhfaW5pdCgmZGV2LT5sb2NrKTsKKwlkZXYtPnBkZXYgPSBwZGV2OwogCi0JbWFlc3Ryb19yYWRpb19pbnN0ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7Ci0JaWYgKG1hZXN0cm9fcmFkaW9faW5zdCA9PSBOVUxMKSB7Ci0JCWRldl9lcnIoJnBkZXYtPmRldiwgIm5vdCBlbm91Z2ggbWVtb3J5XG4iKTsKKwlzdHJsY3B5KHY0bDJfZGV2LT5uYW1lLCAibWFlc3RybyIsIHNpemVvZih2NGwyX2Rldi0+bmFtZSkpOworCisJcmV0dmFsID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJnBkZXYtPmRldiwgdjRsMl9kZXYpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHY0bDJfZGV2aWNlXG4iKTsKIAkJZ290byBlcnJmcjsKIAl9CiAKLQltZW1jcHkobWFlc3Ryb19yYWRpb19pbnN0LCAmbWFlc3Ryb19yYWRpbywgc2l6ZW9mKG1hZXN0cm9fcmFkaW8pKTsKLQl2aWRlb19zZXRfZHJ2ZGF0YShtYWVzdHJvX3JhZGlvX2luc3QsIHJhZGlvX3VuaXQpOwotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBtYWVzdHJvX3JhZGlvX2luc3QpOworCWRldi0+aW8gPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCkgKyBHUElPX0RBVEE7CiAKLQlyZXR2YWwgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UobWFlc3Ryb19yYWRpb19pbnN0LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpOworCXN0cmxjcHkoZGV2LT52ZGV2Lm5hbWUsIHY0bDJfZGV2LT5uYW1lLCBzaXplb2YoZGV2LT52ZGV2Lm5hbWUpKTsKKwlkZXYtPnZkZXYudjRsMl9kZXYgPSB2NGwyX2RldjsKKwlkZXYtPnZkZXYuZm9wcyA9ICZtYWVzdHJvX2ZvcHM7CisJZGV2LT52ZGV2LmlvY3RsX29wcyA9ICZtYWVzdHJvX2lvY3RsX29wczsKKwlkZXYtPnZkZXYucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5OworCXZpZGVvX3NldF9kcnZkYXRhKCZkZXYtPnZkZXYsIGRldik7CisKKwlyZXR2YWwgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmRldi0+dmRldiwgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKTsKIAlpZiAocmV0dmFsKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiY2FuJ3QgcmVnaXN0ZXIgdmlkZW8gZGV2aWNlIVxuIik7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiY2FuJ3QgcmVnaXN0ZXIgdmlkZW8gZGV2aWNlIVxuIik7CiAJCWdvdG8gZXJyZnIxOwogCX0KIAotCWlmICghcmFkaW9fcG93ZXJfb24ocmFkaW9fdW5pdCkpIHsKKwlpZiAoIXJhZGlvX3Bvd2VyX29uKGRldikpIHsKIAkJcmV0dmFsID0gLUVJTzsKIAkJZ290byBlcnJ1bnI7CiAJfQogCi0JZGV2X2luZm8oJnBkZXYtPmRldiwgInZlcnNpb24gIiBEUklWRVJfVkVSU0lPTiAiIHRpbWUgIiBfX1RJTUVfXyAiICAiCi0JCSBfX0RBVEVfXyAiXG4iKTsKLQlkZXZfaW5mbygmcGRldi0+ZGV2LCAicmFkaW8gY2hpcCBpbml0aWFsaXplZFxuIik7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAidmVyc2lvbiAiIERSSVZFUl9WRVJTSU9OICJcbiIpOwogCiAJcmV0dXJuIDA7CiBlcnJ1bnI6Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UobWFlc3Ryb19yYWRpb19pbnN0KTsKKwl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmZGV2LT52ZGV2KTsKIGVycmZyMToKLQl2aWRlb19kZXZpY2VfcmVsZWFzZShtYWVzdHJvX3JhZGlvX2luc3QpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIodjRsMl9kZXYpOwogZXJyZnI6Ci0Ja2ZyZWUocmFkaW9fdW5pdCk7CisJa2ZyZWUoZGV2KTsKIGVycjoKIAlyZXR1cm4gcmV0dmFsOwogCkBAIC00NDQsMTEgKzQxNywzMSBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgbWFlc3Ryb19yZW1vdmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCBtYWVzdHJvICpkZXYgPSB0b19tYWVzdHJvKHY0bDJfZGV2KTsKIAotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZkZXYpOworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZkZXYtPnZkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+djRsMl9kZXYpOwogfQogCitzdGF0aWMgc3RydWN0IHBjaV9kZXZpY2VfaWQgbWFlc3Ryb19yX3BjaV90YmxbXSA9IHsKKwl7IFBDSV9ERVZJQ0UoUENJX1ZFTkRPUl9JRF9FU1MsIFBDSV9ERVZJQ0VfSURfRVNTX0VTUzE5NjgpLAorCQkuY2xhc3MgPSBQQ0lfQ0xBU1NfTVVMVElNRURJQV9BVURJTyA8PCA4LAorCQkuY2xhc3NfbWFzayA9IDB4ZmZmZjAwIH0sCisJeyBQQ0lfREVWSUNFKFBDSV9WRU5ET1JfSURfRVNTLCBQQ0lfREVWSUNFX0lEX0VTU19FU1MxOTc4KSwKKwkJLmNsYXNzID0gUENJX0NMQVNTX01VTFRJTUVESUFfQVVESU8gPDwgOCwKKwkJLmNsYXNzX21hc2sgPSAweGZmZmYwMCB9LAorCXsgMCB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShwY2ksIG1hZXN0cm9fcl9wY2lfdGJsKTsKKworc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIG1hZXN0cm9fcl9kcml2ZXIgPSB7CisJLm5hbWUJCT0gIm1hZXN0cm9fcmFkaW8iLAorCS5pZF90YWJsZQk9IG1hZXN0cm9fcl9wY2lfdGJsLAorCS5wcm9iZQkJPSBtYWVzdHJvX3Byb2JlLAorCS5yZW1vdmUJCT0gX19kZXZleGl0X3AobWFlc3Ryb19yZW1vdmUpLAorfTsKKwogc3RhdGljIGludCBfX2luaXQgbWFlc3Ryb19yYWRpb19pbml0KHZvaWQpCiB7CiAJaW50IHJldHZhbCA9IHBjaV9yZWdpc3Rlcl9kcml2ZXIoJm1hZXN0cm9fcl9kcml2ZXIpOwpAQCAtNDY2LDcgKzQ1OSwzIEBACiAKIG1vZHVsZV9pbml0KG1hZXN0cm9fcmFkaW9faW5pdCk7CiBtb2R1bGVfZXhpdChtYWVzdHJvX3JhZGlvX2V4aXQpOwotCi1NT0RVTEVfQVVUSE9SKCJBZGFtIFRsYWxrYSwgYXRsa2FAcGcuZ2RhLnBsIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlJhZGlvIGRyaXZlciBmb3IgdGhlIE1hZXN0cm8gUENJIHNvdW5kIGNhcmQgcmFkaW8uIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1heGlyYWRpby5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tYXhpcmFkaW8uYwppbmRleCBjNWRjMDBhLi4yNjA2ZjBiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1heGlyYWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbWF4aXJhZGlvLmMKQEAgLTM3LDM4ICszNywzMiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLQogI2luY2x1ZGUgPGxpbnV4L3BjaS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogCitNT0RVTEVfQVVUSE9SKCJEaW1pdHJvbWFub2xha2lzIEFwb3N0b2xvcywgYXBkaW1AZ3JlY2lhbi5uZXQiKTsKK01PRFVMRV9ERVNDUklQVElPTigiUmFkaW8gZHJpdmVyIGZvciB0aGUgR3VpbGxlbW90IE1heGkgUmFkaW8gRk0yMDAwIHJhZGlvLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOworCitzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7Cittb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7CisKK3N0YXRpYyBpbnQgZGVidWc7CisKK21vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJhY3RpdmF0ZXMgZGVidWcgaW5mbyIpOworCiAjZGVmaW5lIERSSVZFUl9WRVJTSU9OCSIwLjc3IgogCi0jaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KLSNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLDcsNykKKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCA3LCA3KQogCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBtYXhpcmFkaW9fcmFkaW87Ci0KLSNkZWZpbmUgZHByaW50ayhudW0sIGZtdCwgYXJnLi4uKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQlkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotCQlpZiAobWF4aXJhZGlvX3JhZGlvLmRlYnVnID49IG51bSkgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogIiBmbXQsICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCQltYXhpcmFkaW9fcmFkaW8ubmFtZSwgIyMgYXJnKTsgfSB3aGlsZSAoMCkKLQotc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCByYWRpb19xY3RybFtdID0gewotCXsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19NVVRFLAotCQkubmFtZSAgICAgICAgICA9ICJNdXRlIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMSwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAotCX0KLX07CisjZGVmaW5lIGRwcmludGsoZGV2LCBudW0sIGZtdCwgYXJnLi4uKSBcCisJdjRsMl9kYmcobnVtLCBkZWJ1ZywgJmRldi0+djRsMl9kZXYsIGZtdCwgIyMgYXJnKQogCiAjaWZuZGVmIFBDSV9WRU5ET1JfSURfR1VJTExFTU9UCiAjZGVmaW5lIFBDSV9WRU5ET1JfSURfR1VJTExFTU9UIDB4NTA0NgpAQCAtODAsOTAgKzc0LDcwIEBACiAKIAogLyogVEVBNTc1NyBwaW4gbWFwcGluZ3MgKi8KLXN0YXRpYyBjb25zdCBpbnQgY2xrID0gMSwgZGF0YSA9IDIsIHdyZW4gPSA0LCBtb19zdCA9IDgsIHBvd2VyID0gMTYgOworc3RhdGljIGNvbnN0IGludCBjbGsgPSAxLCBkYXRhID0gMiwgd3JlbiA9IDQsIG1vX3N0ID0gOCwgcG93ZXIgPSAxNjsKIAotc3RhdGljIGludCByYWRpb19uciA9IC0xOwotbW9kdWxlX3BhcmFtKHJhZGlvX25yLCBpbnQsIDApOwotCi1zdGF0aWMgdW5zaWduZWQgbG9uZyBpbl91c2U7Ci0KLSNkZWZpbmUgRlJFUV9MTwkJIDUwKjE2MDAwCi0jZGVmaW5lIEZSRVFfSEkJCTE1MCoxNjAwMAorI2RlZmluZSBGUkVRX0xPCQkoNTAgKiAxNjAwMCkKKyNkZWZpbmUgRlJFUV9ISQkJKDE1MCAqIDE2MDAwKQogCiAjZGVmaW5lIEZSRVFfSUYgICAgICAgICAxNzEyMDAgLyogMTAuNyoxNjAwMCAgICovCiAjZGVmaW5lIEZSRVFfU1RFUCAgICAgICAyMDAgICAgLyogMTIuNSoxNiAgICAgICovCiAKIC8qICh4PT1mbWh6KjE2KjEwMDApIC0+IGJpdHMgKi8KLSNkZWZpbmUgRlJFUTJCSVRTKHgpCSgoKCAodW5zaWduZWQgaW50KSh4KStGUkVRX0lGKyhGUkVRX1NURVA8PDEpKSBcCi0JCQkvKEZSRVFfU1RFUDw8MikpPDwyKQorI2RlZmluZSBGUkVRMkJJVFMoeCkgXAorICAoKCgodW5zaWduZWQgaW50KSh4KSArIEZSRVFfSUYgKyAoRlJFUV9TVEVQIDw8IDEpKSAvIChGUkVRX1NURVAgPDwgMikpIDw8IDIpCiAKICNkZWZpbmUgQklUUzJGUkVRKHgpCSgoeCkgKiBGUkVRX1NURVAgLSBGUkVRX0lGKQogCiAKLXN0YXRpYyBpbnQgbWF4aXJhZGlvX2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorc3RydWN0IG1heGlyYWRpbwogewotCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZpbl91c2UpID8gLUVCVVNZIDogMDsKLX0KKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CisJc3RydWN0IHZpZGVvX2RldmljZSB2ZGV2OworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwogCi1zdGF0aWMgaW50IG1heGlyYWRpb19leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQljbGVhcl9iaXQoMCwgJmluX3VzZSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgbWF4aXJhZGlvX2ZvcHMgPSB7Ci0JLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IG1heGlyYWRpb19leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSBtYXhpcmFkaW9fZXhjbHVzaXZlX3JlbGVhc2UsCi0JLmlvY3RsICAgICAgICAgID0gdmlkZW9faW9jdGwyLAotfTsKLQotc3RhdGljIHN0cnVjdCByYWRpb19kZXZpY2UKLXsKLQlfX3UxNglpbywJLyogYmFzZSBvZiByYWRpbyBpbyAqLwotCQltdXRlZCwJLyogVklERU9fQVVESU9fTVVURSAqLwotCQlzdGVyZW8sCS8qIFZJREVPX1RVTkVSX1NURVJFT19PTiAqLwotCQl0dW5lZDsJLyogc2lnbmFsIHN0cmVuZ3RoICgwIG9yIDB4ZmZmZikgKi8KKwl1MTYJaW87CS8qIGJhc2Ugb2YgcmFkaW8gaW8gKi8KKwl1MTYJbXV0ZWQ7CS8qIFZJREVPX0FVRElPX01VVEUgKi8KKwl1MTYJc3RlcmVvOwkvKiBWSURFT19UVU5FUl9TVEVSRU9fT04gKi8KKwl1MTYJdHVuZWQ7CS8qIHNpZ25hbCBzdHJlbmd0aCAoMCBvciAweGZmZmYpICovCiAKIAl1bnNpZ25lZCBsb25nIGZyZXE7CiAKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKLX0gcmFkaW9fdW5pdCA9IHsKLQkubXV0ZWQgPTEsCi0JLmZyZXEgPSBGUkVRX0xPLAogfTsKIAotc3RhdGljIHZvaWQgb3V0Yml0KHVuc2lnbmVkIGxvbmcgYml0LCBfX3UxNiBpbykKK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1heGlyYWRpbyAqdG9fbWF4aXJhZGlvKHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpCiB7Ci0JaWYgKGJpdCAhPSAwKQotCQl7Ci0JCQlvdXRiKCAgcG93ZXJ8d3JlbnxkYXRhICAgICAsaW8pOyB1ZGVsYXkoNCk7Ci0JCQlvdXRiKCAgcG93ZXJ8d3JlbnxkYXRhfGNsayAsaW8pOyB1ZGVsYXkoNCk7Ci0JCQlvdXRiKCAgcG93ZXJ8d3JlbnxkYXRhICAgICAsaW8pOyB1ZGVsYXkoNCk7Ci0JCX0KLQllbHNlCi0JCXsKLQkJCW91dGIoICBwb3dlcnx3cmVuICAgICAgICAgICxpbyk7IHVkZWxheSg0KTsKLQkJCW91dGIoICBwb3dlcnx3cmVufGNsayAgICAgICxpbyk7IHVkZWxheSg0KTsKLQkJCW91dGIoICBwb3dlcnx3cmVuICAgICAgICAgICxpbyk7IHVkZWxheSg0KTsKLQkJfQorCXJldHVybiBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBtYXhpcmFkaW8sIHY0bDJfZGV2KTsKIH0KIAotc3RhdGljIHZvaWQgdHVybl9wb3dlcihfX3UxNiBpbywgaW50IHApCitzdGF0aWMgdm9pZCBvdXRiaXQodW5zaWduZWQgbG9uZyBiaXQsIHUxNiBpbykKK3sKKwlpbnQgdmFsID0gcG93ZXIgfCB3cmVuIHwgKGJpdCA/IGRhdGEgOiAwKTsKKworCW91dGIodmFsLCBpbyk7CisJdWRlbGF5KDQpOworCW91dGIodmFsIHwgY2xrLCBpbyk7CisJdWRlbGF5KDQpOworCW91dGIodmFsLCBpbyk7CisJdWRlbGF5KDQpOworfQorCitzdGF0aWMgdm9pZCB0dXJuX3Bvd2VyKHN0cnVjdCBtYXhpcmFkaW8gKmRldiwgaW50IHApCiB7CiAJaWYgKHAgIT0gMCkgewotCQlkcHJpbnRrKDEsICJSYWRpbyBwb3dlcmVkIG9uXG4iKTsKLQkJb3V0Yihwb3dlciwgaW8pOworCQlkcHJpbnRrKGRldiwgMSwgIlJhZGlvIHBvd2VyZWQgb25cbiIpOworCQlvdXRiKHBvd2VyLCBkZXYtPmlvKTsKIAl9IGVsc2UgewotCQlkcHJpbnRrKDEsICJSYWRpbyBwb3dlcmVkIG9mZlxuIik7Ci0JCW91dGIoMCxpbyk7CisJCWRwcmludGsoZGV2LCAxLCAiUmFkaW8gcG93ZXJlZCBvZmZcbiIpOworCQlvdXRiKDAsIGRldi0+aW8pOwogCX0KIH0KIAotc3RhdGljIHZvaWQgc2V0X2ZyZXEoX191MTYgaW8sIF9fdTMyIGZyZXEpCitzdGF0aWMgdm9pZCBzZXRfZnJlcShzdHJ1Y3QgbWF4aXJhZGlvICpkZXYsIHUzMiBmcmVxKQogewogCXVuc2lnbmVkIGxvbmcgaW50IHNpOwogCWludCBibDsKKwlpbnQgaW8gPSBkZXYtPmlvOwogCWludCB2YWwgPSBGUkVRMkJJVFMoZnJlcSk7CiAKIAkvKiBURUE1NzU3IHNoaWZ0IHJlZ2lzdGVyIGJpdHMgKHNlZSBwZGYpICovCkBAIC0xODgsMTQgKzE2MiwxNCBAQAogCQlzaSA+Pj0gMTsKIAl9CiAKLQlkcHJpbnRrKDEsICJSYWRpbyBmcmVxIHNldCB0byAlZC4lMDJkIE1IelxuIiwKKwlkcHJpbnRrKGRldiwgMSwgIlJhZGlvIGZyZXEgc2V0IHRvICVkLiUwMmQgTUh6XG4iLAogCQkJCWZyZXEgLyAxNjAwMCwKIAkJCQlmcmVxICUgMTYwMDAgKiAxMDAgLyAxNjAwMCk7CiAKLQl0dXJuX3Bvd2VyKGlvLCAxKTsKKwl0dXJuX3Bvd2VyKGRldiwgMSk7CiB9CiAKLXN0YXRpYyBpbnQgZ2V0X3N0ZXJlbyhfX3UxNiBpbykKK3N0YXRpYyBpbnQgZ2V0X3N0ZXJlbyh1MTYgaW8pCiB7CiAJb3V0Yihwb3dlcixpbyk7CiAJdWRlbGF5KDQpOwpAQCAtMjAzLDcgKzE3Nyw3IEBACiAJcmV0dXJuICEoaW5iKGlvKSAmIG1vX3N0KTsKIH0KIAotc3RhdGljIGludCBnZXRfdHVuZShfX3UxNiBpbykKK3N0YXRpYyBpbnQgZ2V0X3R1bmUodTE2IGlvKQogewogCW91dGIocG93ZXIrY2xrLGlvKTsKIAl1ZGVsYXkoNCk7CkBAIC0yMTIsOTUgKzE4Niw4NCBAQAogfQogCiAKLXN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCiAJCQkgICAgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqdikKIHsKLQlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLW1heGlyYWRpbyIsIHNpemVvZiAodi0+ZHJpdmVyKSk7Ci0Jc3RybGNweSh2LT5jYXJkLCAiTWF4aSBSYWRpbyBGTTIwMDAgcmFkaW8iLCBzaXplb2YgKHYtPmNhcmQpKTsKLQlzcHJpbnRmKHYtPmJ1c19pbmZvLCJJU0EiKTsKLQl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKLQl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKKwlzdHJ1Y3QgbWF4aXJhZGlvICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCisJc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby1tYXhpcmFkaW8iLCBzaXplb2Yodi0+ZHJpdmVyKSk7CisJc3RybGNweSh2LT5jYXJkLCAiTWF4aSBSYWRpbyBGTTIwMDAgcmFkaW8iLCBzaXplb2Yodi0+Y2FyZCkpOworCXNucHJpbnRmKHYtPmJ1c19pbmZvLCBzaXplb2Yodi0+YnVzX2luZm8pLCAiUENJOiVzIiwgcGNpX25hbWUoZGV2LT5wZGV2KSk7CisJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047CisJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZ190dW5lciAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0Jc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IG1heGlyYWRpbyAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmICh2LT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtc2V0KHYsMCxzaXplb2YoKnYpKTsKLQlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlzdHJsY3B5KHYtPm5hbWUsICJGTSIsIHNpemVvZih2LT5uYW1lKSk7CiAJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87Ci0KLQl2LT5yYW5nZWxvdz1GUkVRX0xPOwotCXYtPnJhbmdlaGlnaD1GUkVRX0hJOwotCXYtPnJ4c3ViY2hhbnMgPVY0TDJfVFVORVJfU1VCX01PTk98VjRMMl9UVU5FUl9TVUJfU1RFUkVPOwotCXYtPmNhcGFiaWxpdHk9VjRMMl9UVU5FUl9DQVBfTE9XOwotCWlmKGdldF9zdGVyZW8oY2FyZC0+aW8pKQorCXYtPnJhbmdlbG93ID0gRlJFUV9MTzsKKwl2LT5yYW5nZWhpZ2ggPSBGUkVRX0hJOworCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PIHwgVjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCXYtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1c7CisJaWYgKGdldF9zdGVyZW8oZGV2LT5pbykpCiAJCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwogCWVsc2UKIAkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POwotCXYtPnNpZ25hbD0weGZmZmYqZ2V0X3R1bmUoY2FyZC0+aW8pOworCXYtPnNpZ25hbCA9IDB4ZmZmZiAqIGdldF90dW5lKGRldi0+aW8pOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKK3N0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgICBzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlpZiAodi0+aW5kZXggPiAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCSAgIHN0cnVjdCB2NGwyX2F1ZGlvICphKQotewotCWlmIChhLT5pbmRleCA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3RyY3B5KGEtPm5hbWUsICJGTSIpOwotCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHYtPmluZGV4ID8gLUVJTlZBTCA6IDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKIHsKIAkqaSA9IDA7Ci0KIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCiB7Ci0JaWYgKGkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gaSA/IC1FSU5WQUwgOiAwOwogfQogCi0KLXN0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8gKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgIHN0cnVjdCB2NGwyX2F1ZGlvICphKQogewotCWlmIChhLT5pbmRleCAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQorCWEtPmluZGV4ID0gMDsKKwlzdHJsY3B5KGEtPm5hbWUsICJSYWRpbyIsIHNpemVvZihhLT5uYW1lKSk7CisJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3kgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCitzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJcmV0dXJuIGEtPmluZGV4ID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgICAgIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgcmFkaW9fZGV2aWNlICpjYXJkID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgbWF4aXJhZGlvICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKGYtPmZyZXF1ZW5jeSA8IEZSRVFfTE8gfHwgZi0+ZnJlcXVlbmN5ID4gRlJFUV9ISSkgewotCQlkcHJpbnRrKDEsICJyYWRpbyBmcmVxICglZC4lMDJkIE1Ieikgb3V0IG9mIHJhbmdlICglZC0lZClcbiIsCisJCWRwcmludGsoZGV2LCAxLCAicmFkaW8gZnJlcSAoJWQuJTAyZCBNSHopIG91dCBvZiByYW5nZSAoJWQtJWQpXG4iLAogCQkJCQlmLT5mcmVxdWVuY3kgLyAxNjAwMCwKIAkJCQkJZi0+ZnJlcXVlbmN5ICUgMTYwMDAgKiAxMDAgLyAxNjAwMCwKIAkJCQkJRlJFUV9MTyAvIDE2MDAwLCBGUkVRX0hJIC8gMTYwMDApOwpAQCAtMzA4LDc1ICsyNzEsOTEgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JY2FyZC0+ZnJlcSA9IGYtPmZyZXF1ZW5jeTsKLQlzZXRfZnJlcShjYXJkLT5pbywgY2FyZC0+ZnJlcSk7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlkZXYtPmZyZXEgPSBmLT5mcmVxdWVuY3k7CisJc2V0X2ZyZXEoZGV2LCBkZXYtPmZyZXEpOwogCW1zbGVlcCgxMjUpOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeSAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCitzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSAgICAgICBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IG1heGlyYWRpbyAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwotCWYtPmZyZXF1ZW5jeSA9IGNhcmQtPmZyZXE7CisJZi0+ZnJlcXVlbmN5ID0gZGV2LT5mcmVxOwogCi0JZHByaW50ayg0LCAicmFkaW8gZnJlcSBpcyAlZC4lMDJkIE1IeiIsCisJZHByaW50ayhkZXYsIDQsICJyYWRpbyBmcmVxIGlzICVkLiUwMmQgTUh6IiwKIAkJCQlmLT5mcmVxdWVuY3kgLyAxNjAwMCwKIAkJCQlmLT5mcmVxdWVuY3kgJSAxNjAwMCAqIDEwMCAvIDE2MDAwKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwgKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJICAgICBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQogewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW9fcWN0cmwpOyBpKyspIHsKLQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gcmFkaW9fcWN0cmxbaV0uaWQpIHsKLQkJCW1lbWNweShxYywgJihyYWRpb19xY3RybFtpXSksIHNpemVvZigqcWMpKTsKLQkJCXJldHVybiAoMCk7Ci0JCX0KKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAxKTsKIAl9Ci0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZ19jdHJsIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCSAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQorc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCByYWRpb19kZXZpY2UgKmNhcmQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBtYXhpcmFkaW8gKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJCWN0cmwtPnZhbHVlPWNhcmQtPm11dGVkOwotCQkJcmV0dXJuICgwKTsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCWN0cmwtPnZhbHVlID0gZGV2LT5tdXRlZDsKKwkJcmV0dXJuIDA7CiAJfQogCiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybCAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHJhZGlvX2RldmljZSAqY2FyZCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IG1heGlyYWRpbyAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQkJY2FyZC0+bXV0ZWQgPSBjdHJsLT52YWx1ZTsKLQkJCWlmKGNhcmQtPm11dGVkKQotCQkJCXR1cm5fcG93ZXIoY2FyZC0+aW8sIDApOwotCQkJZWxzZQotCQkJCXNldF9mcmVxKGNhcmQtPmlvLCBjYXJkLT5mcmVxKTsKLQkJCXJldHVybiAwOworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwkJZGV2LT5tdXRlZCA9IGN0cmwtPnZhbHVlOworCQlpZiAoZGV2LT5tdXRlZCkKKwkJCXR1cm5fcG93ZXIoZGV2LCAwKTsKKwkJZWxzZQorCQkJc2V0X2ZyZXEoZGV2LCBkZXYtPmZyZXEpOworCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJCXJldHVybiAwOwogCX0KIAogCXJldHVybiAtRUlOVkFMOwogfQogCitzdGF0aWMgaW50IG1heGlyYWRpb19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1heGlyYWRpb19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIG1heGlyYWRpb19mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbiAgICAgICAgICAgPSBtYXhpcmFkaW9fb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSBtYXhpcmFkaW9fcmVsZWFzZSwKKwkuaW9jdGwgICAgICAgICAgPSB2aWRlb19pb2N0bDIsCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIG1heGlyYWRpb19pb2N0bF9vcHMgPSB7CiAJLnZpZGlvY19xdWVyeWNhcCAgICA9IHZpZGlvY19xdWVyeWNhcCwKIAkudmlkaW9jX2dfdHVuZXIgICAgID0gdmlkaW9jX2dfdHVuZXIsCkBAIC0zOTIsNjAgKzM3MSw4NCBAQAogCS52aWRpb2Nfc19jdHJsICAgICAgPSB2aWRpb2Nfc19jdHJsLAogfTsKIAotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgbWF4aXJhZGlvX3JhZGlvID0gewotCS5uYW1lCQk9ICJNYXhpIFJhZGlvIEZNMjAwMCByYWRpbyIsCi0JLmZvcHMgICAgICAgICAgID0gJm1heGlyYWRpb19mb3BzLAotCS5pb2N0bF9vcHMgCT0gJm1heGlyYWRpb19pb2N0bF9vcHMsCi0JLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKLX07Ci0KIHN0YXRpYyBpbnQgX19kZXZpbml0IG1heGlyYWRpb19pbml0X29uZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKIHsKLQlpZighcmVxdWVzdF9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLAorCXN0cnVjdCBtYXhpcmFkaW8gKmRldjsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2OworCWludCByZXR2YWwgPSAtRU5PTUVNOworCisJZGV2ID0ga3phbGxvYyhzaXplb2YoKmRldiksIEdGUF9LRVJORUwpOworCWlmIChkZXYgPT0gTlVMTCkgeworCQlkZXZfZXJyKCZwZGV2LT5kZXYsICJub3QgZW5vdWdoIG1lbW9yeVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCXY0bDJfZGV2ID0gJmRldi0+djRsMl9kZXY7CisJbXV0ZXhfaW5pdCgmZGV2LT5sb2NrKTsKKwlkZXYtPnBkZXYgPSBwZGV2OworCWRldi0+bXV0ZWQgPSAxOworCWRldi0+ZnJlcSA9IEZSRVFfTE87CisKKwlzdHJsY3B5KHY0bDJfZGV2LT5uYW1lLCAibWF4aXJhZGlvIiwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSk7CisKKwlyZXR2YWwgPSB2NGwyX2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2LCB2NGwyX2Rldik7CisJaWYgKHJldHZhbCA8IDApIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgdjRsMl9kZXZpY2VcbiIpOworCQlnb3RvIGVycmZyOworCX0KKworCWlmICghcmVxdWVzdF9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLAogCQkJICAgcGNpX3Jlc291cmNlX2xlbihwZGV2LCAwKSwgIk1heGkgUmFkaW8gRk0gMjAwMCIpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicmFkaW8tbWF4aXJhZGlvOiBjYW4ndCByZXNlcnZlIEkvTyBwb3J0c1xuIik7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiY2FuJ3QgcmVzZXJ2ZSBJL08gcG9ydHNcbiIpOwogCQlnb3RvIGVycl9vdXQ7CiAJfQogCiAJaWYgKHBjaV9lbmFibGVfZGV2aWNlKHBkZXYpKQogCQlnb3RvIGVycl9vdXRfZnJlZV9yZWdpb247CiAKLQlyYWRpb191bml0LmlvID0gcGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApOwotCW11dGV4X2luaXQoJnJhZGlvX3VuaXQubG9jayk7Ci0JdmlkZW9fc2V0X2RydmRhdGEoJm1heGlyYWRpb19yYWRpbywgJnJhZGlvX3VuaXQpOworCWRldi0+aW8gPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CisJc3RybGNweShkZXYtPnZkZXYubmFtZSwgdjRsMl9kZXYtPm5hbWUsIHNpemVvZihkZXYtPnZkZXYubmFtZSkpOworCWRldi0+dmRldi52NGwyX2RldiA9IHY0bDJfZGV2OworCWRldi0+dmRldi5mb3BzID0gJm1heGlyYWRpb19mb3BzOworCWRldi0+dmRldi5pb2N0bF9vcHMgPSAmbWF4aXJhZGlvX2lvY3RsX29wczsKKwlkZXYtPnZkZXYucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5OworCXZpZGVvX3NldF9kcnZkYXRhKCZkZXYtPnZkZXYsIGRldik7CiAKLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZtYXhpcmFkaW9fcmFkaW8sIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7Ci0JCXByaW50aygicmFkaW8tbWF4aXJhZGlvOiBjYW4ndCByZWdpc3RlciBkZXZpY2UhIik7CisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmZGV2LT52ZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgImNhbid0IHJlZ2lzdGVyIGRldmljZSEiKTsKIAkJZ290byBlcnJfb3V0X2ZyZWVfcmVnaW9uOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gInJhZGlvLW1heGlyYWRpbzogdmVyc2lvbiAiCi0JICAgICAgIERSSVZFUl9WRVJTSU9OCi0JICAgICAgICIgdGltZSAiCi0JICAgICAgIF9fVElNRV9fICIgICIKLQkgICAgICAgX19EQVRFX18KLQkgICAgICAgIlxuIik7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAidmVyc2lvbiAiIERSSVZFUl9WRVJTSU9OCisJCQkiIHRpbWUgIiBfX1RJTUVfXyAiICAiIF9fREFURV9fICJcbiIpOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAicmFkaW8tbWF4aXJhZGlvOiBmb3VuZCBHdWlsbGVtb3QgTUFYSSBSYWRpbyBkZXZpY2UgKGlvID0gMHgleClcbiIsCi0JICAgICAgIHJhZGlvX3VuaXQuaW8pOworCXY0bDJfaW5mbyh2NGwyX2RldiwgImZvdW5kIEd1aWxsZW1vdCBNQVhJIFJhZGlvIGRldmljZSAoaW8gPSAweCV4KVxuIiwKKwkgICAgICAgZGV2LT5pbyk7CiAJcmV0dXJuIDA7CiAKIGVycl9vdXRfZnJlZV9yZWdpb246CiAJcmVsZWFzZV9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLCBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKIGVycl9vdXQ6CisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcih2NGwyX2Rldik7CitlcnJmcjoKKwlrZnJlZShkZXYpOwogCXJldHVybiAtRU5PREVWOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgbWF4aXJhZGlvX3JlbW92ZV9vbmUoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiB7Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJm1heGlyYWRpb19yYWRpbyk7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlzdHJ1Y3QgbWF4aXJhZGlvICpkZXYgPSB0b19tYXhpcmFkaW8odjRsMl9kZXYpOworCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmRldi0+dmRldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7CiAJcmVsZWFzZV9yZWdpb24ocGNpX3Jlc291cmNlX3N0YXJ0KHBkZXYsIDApLCBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApKTsKIH0KIAogc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIG1heGlyYWRpb19wY2lfdGJsW10gPSB7CiAJeyBQQ0lfVkVORE9SX0lEX0dVSUxMRU1PVCwgUENJX0RFVklDRV9JRF9HVUlMTEVNT1RfTUFYSVJBRElPLAogCQlQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCB9LAotCXsgMCx9CisJeyAwIH0KIH07CiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBtYXhpcmFkaW9fcGNpX3RibCk7CkBAIC00NjksMTAgKzQ3MiwzIEBACiAKIG1vZHVsZV9pbml0KG1heGlyYWRpb19yYWRpb19pbml0KTsKIG1vZHVsZV9leGl0KG1heGlyYWRpb19yYWRpb19leGl0KTsKLQotTU9EVUxFX0FVVEhPUigiRGltaXRyb21hbm9sYWtpcyBBcG9zdG9sb3MsIGFwZGltQGdyZWNpYW4ubmV0Iik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIlJhZGlvIGRyaXZlciBmb3IgdGhlIEd1aWxsZW1vdCBNYXhpIFJhZGlvIEZNMjAwMCByYWRpby4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLG1heGlyYWRpb19yYWRpby5kZWJ1ZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsImFjdGl2YXRlcyBkZWJ1ZyBpbmZvIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1yODAwLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLW1yODAwLmMKaW5kZXggZmRmYzdiZi4uZGVkMjViZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1tcjgwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tbXI4MDAuYwpAQCAtMjIsNyArMjIsNyBAQAogICovCiAKIC8qCi0gKiBCaWcgdGhhbmtzIHRvIGF1dGhvcnMgb2YgZHNicjEwMC5jIGFuZCByYWRpby1zaTQ3MHguYworICogQmlnIHRoYW5rcyB0byBhdXRob3JzIGFuZCBjb250cmlidXRvcnMgb2YgZHNicjEwMC5jIGFuZCByYWRpby1zaTQ3MHguYwogICoKICAqIFdoZW4gd29yayB3YXMgbG9va2VkIHByZXR0eSBnb29kLCBpIGRpc2NvdmVyIHRoaXM6CiAgKiBodHRwOi8vYXYtdXNicmFkaW8uc291cmNlZm9yZ2UubmV0L2luZGV4LnBocApAQCAtMzAsMTggKzMwLDIzIEBACiAgKiBMYXRlc3QgcmVsZWFzZSBvZiB0aGVpcnMgcHJvamVjdCB3YXMgaW4gMjAwNS4KICAqIFByb2JhYmx5LCB0aGlzIGRyaXZlciBjb3VsZCBiZSBpbXByb3ZlZCB0cm91Z2ggdXNpbmcgdGhlaXIKICAqIGFjaGlldmVtZW50cyAoc3BlY2lmaWNhdGlvbnMgZ2l2ZW4pLgotICogU28sIHdlIGhhdmUgc210aCB0byBiZWdpbiB3aXRoLgorICogQWxzbywgRmFpZG9uIExpYW1ib3RpcyA8cGFyYXZvaWRAZGViaWFuLm9yZz4gd3JvdGUgbmljZSBkcml2ZXIgZm9yIHRoaXMgcmFkaW8KKyAqIGluIDIwMDcuIEhlIGFsbG93ZWQgdG8gdXNlIGhpcyBkcml2ZXIgdG8gaW1wcm92ZSBjdXJyZW50IG1yODAwIHJhZGlvIGRyaXZlci4KKyAqIGh0dHA6Ly9rZXJuZWx0cmFwLm9yZy9tYWlsYXJjaGl2ZS9saW51eC11c2ItZGV2ZWwvMjAwNy8xMC8xMS8zNDI0OTIKICAqCi0gKiBIaXN0b3J5OgogICogVmVyc2lvbiAwLjAxOglGaXJzdCB3b3JraW5nIHZlcnNpb24uCiAgKiAJCQlJdCdzIHJlcXVpcmVkIHRvIGJsYWNrbGlzdCBBdmVyTWVkaWEgVVNCIFJhZGlvCiAgKiAJCQlpbiB1c2JoaWQvaGlkLXF1aXJrcy5jCisgKiBWZXJzaW9uIDAuMTA6CUEgbG90IG9mIGNsZWFudXBzIGFuZCBmaXhlczogdW5wbHVnaW5nIHRoZSBkZXZpY2UsCisgKiAJCQlmZXcgbXV0ZXggbG9ja3Mgd2VyZSBhZGRlZCwgY29kaW5zdHlsZSBpc3N1ZXMsIGV0Yy4KKyAqIAkJCUFkZGVkIHN0ZXJlbyBzdXBwb3J0LiBUaGFua3MgdG8KKyAqIAkJCURvdWdsYXMgU2NoaWxsaW5nIExhbmRncmFmIDxkb3Vnc2xhbmRAZ21haWwuY29tPiBhbmQKKyAqIAkJCURhdmlkIEVsbGluZ3N3b3J0aCA8ZGF2aWRAaWRlbnRkLmR5bmRucy5vcmc+CisgKiAJCQlmb3IgZGlzY3Vzc2lvbiwgaGVscCBhbmQgc3VwcG9ydC4KICAqCiAgKiBNYW55IHRoaW5ncyB0byBkbzoKICAqIAktIENvcnJlY3QgcG93ZXIgbWFuYWdtZW50IG9mIGRldmljZSAoc3VzcGVuZCAmIHJlc3VtZSkKLSAqIAktIE1ha2UgeDg2IGluZGVwZW5kYW5jZSAobGl0dGxlLWVuZGlhbiBhbmQgYmlnLWVuZGlhbiBzdHVmZikKICAqIAktIEFkZCBjb2RlIGZvciBzY2FubmluZyBhbmQgc21vb3RoIHR1bmluZwotICogCS0gQ2hlY2tlZCBhbmQgYWRkIHN0ZXJlbyZtb25vIHN0dWZmCiAgKiAJLSBBZGQgY29kZSBmb3Igc2Vuc2l0aXZpdHkgdmFsdWUKICAqIAktIENvcnJlY3QgbWlzdGFrZXMKICAqIAktIEluIEphcGFuIGFub3RoZXIgRlJFUV9NSU4gYW5kIEZSRVFfTUFYCkBAIC02Miw4ICs2Nyw4IEBACiAvKiBkcml2ZXIgYW5kIG1vZHVsZSBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBEUklWRVJfQVVUSE9SICJBbGV4ZXkgS2xpbW92IDxrbGltb3YubGludXhAZ21haWwuY29tPiIKICNkZWZpbmUgRFJJVkVSX0RFU0MgIkF2ZXJNZWRpYSBNUiA4MDAgVVNCIEZNIHJhZGlvIGRyaXZlciIKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjAuMDEiCi0jZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwgMCwgMSkKKyNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjAuMTAiCisjZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwgMSwgMCkKIAogTU9EVUxFX0FVVEhPUihEUklWRVJfQVVUSE9SKTsKIE1PRFVMRV9ERVNDUklQVElPTihEUklWRVJfREVTQyk7CkBAIC04Nyw2ICs5MiwyMiBAQAogI2RlZmluZSBGUkVRX01BWCAxMDguMAogI2RlZmluZSBGUkVRX01VTCAxNjAwMAogCisvKgorICogQ29tbWFuZHMgdGhhdCBkZXZpY2Ugc2hvdWxkIHVuZGVyc3RhbmQKKyAqIExpc3QgaXNudCBmdWxsIGFuZCB3aWxsIGJlIHVwZGF0ZWQgd2l0aCBpbXBsZW1lbnRhdGlvbiBvZiBuZXcgZnVuY3Rpb25zCisgKi8KKyNkZWZpbmUgQU1SQURJT19TRVRfRlJFUQkweGE0CisjZGVmaW5lIEFNUkFESU9fU0VUX01VVEUJMHhhYgorI2RlZmluZSBBTVJBRElPX1NFVF9NT05PCTB4YWUKKworLyogQ29tZm9ydGFibGUgZGVmaW5lcyBmb3IgYW1yYWRpb19zZXRfbXV0ZSAqLworI2RlZmluZSBBTVJBRElPX1NUQVJUCQkweDAwCisjZGVmaW5lIEFNUkFESU9fU1RPUAkJMHgwMQorCisvKiBDb21mb3J0YWJsZSBkZWZpbmVzIGZvciBhbXJhZGlvX3NldF9zdGVyZW8gKi8KKyNkZWZpbmUgV0FOVF9TVEVSRU8JCTB4MDAKKyNkZWZpbmUgV0FOVF9NT05PCQkweDAxCisKIC8qIG1vZHVsZSBwYXJhbWV0ZXIgKi8KIHN0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKIG1vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKQEAgLTE2OSw0MCArMTkwLDggQEAKIAkuc3VwcG9ydHNfYXV0b3N1c3BlbmQJPSAwLAogfTsKIAotLyogc3dpdGNoIG9uIHJhZGlvLiBTZW5kIDggYnl0ZXMgdG8gZGV2aWNlLiAqLwotc3RhdGljIGludCBhbXJhZGlvX3N0YXJ0KHN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW8pCi17Ci0JaW50IHJldHZhbDsKLQlpbnQgc2l6ZTsKLQotCW11dGV4X2xvY2soJnJhZGlvLT5sb2NrKTsKLQotCXJhZGlvLT5idWZmZXJbMF0gPSAweDAwOwotCXJhZGlvLT5idWZmZXJbMV0gPSAweDU1OwotCXJhZGlvLT5idWZmZXJbMl0gPSAweGFhOwotCXJhZGlvLT5idWZmZXJbM10gPSAweDAwOwotCXJhZGlvLT5idWZmZXJbNF0gPSAweGFiOwotCXJhZGlvLT5idWZmZXJbNV0gPSAweDAwOwotCXJhZGlvLT5idWZmZXJbNl0gPSAweDAwOwotCXJhZGlvLT5idWZmZXJbN10gPSAweDAwOwotCi0JcmV0dmFsID0gdXNiX2J1bGtfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9zbmRpbnRwaXBlKHJhZGlvLT51c2JkZXYsIDIpLAotCQkodm9pZCAqKSAocmFkaW8tPmJ1ZmZlciksIEJVRkZFUl9MRU5HVEgsICZzaXplLCBVU0JfVElNRU9VVCk7Ci0KLQlpZiAocmV0dmFsKSB7Ci0JCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOwotCQlyZXR1cm4gcmV0dmFsOwotCX0KLQotCXJhZGlvLT5tdXRlZCA9IDA7Ci0KLQltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKLQotCXJldHVybiByZXR2YWw7Ci19Ci0KLS8qIHN3aXRjaCBvZmYgcmFkaW8gKi8KLXN0YXRpYyBpbnQgYW1yYWRpb19zdG9wKHN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW8pCisvKiBzd2l0Y2ggb24vb2ZmIHRoZSByYWRpby4gU2VuZCA4IGJ5dGVzIHRvIGRldmljZSAqLworc3RhdGljIGludCBhbXJhZGlvX3NldF9tdXRlKHN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW8sIGNoYXIgYXJndW1lbnQpCiB7CiAJaW50IHJldHZhbDsKIAlpbnQgc2l6ZTsKQEAgLTIxNywyMCArMjA2LDIwIEBACiAJcmFkaW8tPmJ1ZmZlclsxXSA9IDB4NTU7CiAJcmFkaW8tPmJ1ZmZlclsyXSA9IDB4YWE7CiAJcmFkaW8tPmJ1ZmZlclszXSA9IDB4MDA7Ci0JcmFkaW8tPmJ1ZmZlcls0XSA9IDB4YWI7Ci0JcmFkaW8tPmJ1ZmZlcls1XSA9IDB4MDE7CisJcmFkaW8tPmJ1ZmZlcls0XSA9IEFNUkFESU9fU0VUX01VVEU7CisJcmFkaW8tPmJ1ZmZlcls1XSA9IGFyZ3VtZW50OwogCXJhZGlvLT5idWZmZXJbNl0gPSAweDAwOwogCXJhZGlvLT5idWZmZXJbN10gPSAweDAwOwogCiAJcmV0dmFsID0gdXNiX2J1bGtfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9zbmRpbnRwaXBlKHJhZGlvLT51c2JkZXYsIDIpLAogCQkodm9pZCAqKSAocmFkaW8tPmJ1ZmZlciksIEJVRkZFUl9MRU5HVEgsICZzaXplLCBVU0JfVElNRU9VVCk7CiAKLQlpZiAocmV0dmFsKSB7CisJaWYgKHJldHZhbCA8IDAgfHwgc2l6ZSAhPSBCVUZGRVJfTEVOR1RIKSB7CiAJCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAotCXJhZGlvLT5tdXRlZCA9IDE7CisJcmFkaW8tPm11dGVkID0gYXJndW1lbnQ7CiAKIAltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKIApAQCAtMjQyLDcgKzIzMSw3IEBACiB7CiAJaW50IHJldHZhbDsKIAlpbnQgc2l6ZTsKLQl1bnNpZ25lZCBzaG9ydCBmcmVxX3NlbmQgPSAweDEzICsgKGZyZXEgPj4gMykgLyAyNTsKKwl1bnNpZ25lZCBzaG9ydCBmcmVxX3NlbmQgPSAweDEwICsgKGZyZXEgPj4gMykgLyAyNTsKIAogCS8qIHNhZmV0eSBjaGVjayAqLwogCWlmIChyYWRpby0+cmVtb3ZlZCkKQEAgLTI1NCw3ICsyNDMsNyBAQAogCXJhZGlvLT5idWZmZXJbMV0gPSAweDU1OwogCXJhZGlvLT5idWZmZXJbMl0gPSAweGFhOwogCXJhZGlvLT5idWZmZXJbM10gPSAweDAzOwotCXJhZGlvLT5idWZmZXJbNF0gPSAweGE0OworCXJhZGlvLT5idWZmZXJbNF0gPSBBTVJBRElPX1NFVF9GUkVROwogCXJhZGlvLT5idWZmZXJbNV0gPSAweDAwOwogCXJhZGlvLT5idWZmZXJbNl0gPSAweDAwOwogCXJhZGlvLT5idWZmZXJbN10gPSAweDA4OwpAQCAtMjYyLDcgKzI1MSw3IEBACiAJcmV0dmFsID0gdXNiX2J1bGtfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9zbmRpbnRwaXBlKHJhZGlvLT51c2JkZXYsIDIpLAogCQkodm9pZCAqKSAocmFkaW8tPmJ1ZmZlciksIEJVRkZFUl9MRU5HVEgsICZzaXplLCBVU0JfVElNRU9VVCk7CiAKLQlpZiAocmV0dmFsKSB7CisJaWYgKHJldHZhbCA8IDAgfHwgc2l6ZSAhPSBCVUZGRVJfTEVOR1RIKSB7CiAJCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KQEAgLTI3OSwyNCArMjY4LDU3IEBACiAJcmV0dmFsID0gdXNiX2J1bGtfbXNnKHJhZGlvLT51c2JkZXYsIHVzYl9zbmRpbnRwaXBlKHJhZGlvLT51c2JkZXYsIDIpLAogCQkodm9pZCAqKSAocmFkaW8tPmJ1ZmZlciksIEJVRkZFUl9MRU5HVEgsICZzaXplLCBVU0JfVElNRU9VVCk7CiAKLQlpZiAocmV0dmFsKSB7CisJaWYgKHJldHZhbCA8IDAgfHwgc2l6ZSAhPSBCVUZGRVJfTEVOR1RIKSB7CiAJCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOwogCQlyZXR1cm4gcmV0dmFsOwogCX0KIAotCXJhZGlvLT5zdGVyZW8gPSAwOwotCiAJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CiAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi0vKiBVU0Igc3Vic3lzdGVtIGludGVyZmFjZSBiZWdpbnMgaGVyZSAqLworc3RhdGljIGludCBhbXJhZGlvX3NldF9zdGVyZW8oc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbywgY2hhciBhcmd1bWVudCkKK3sKKwlpbnQgcmV0dmFsOworCWludCBzaXplOwogCi0vKiBoYW5kbGUgdW5wbHVnZ2luZyBvZiB0aGUgZGV2aWNlLCByZWxlYXNlIGRhdGEgc3RydWN0dXJlcwotaWYgbm90aGluZyBrZWVwcyB1cyBmcm9tIGRvaW5nIGl0LiAgSWYgc29tZXRoaW5nIGlzIHN0aWxsCi1rZWVwaW5nIHVzIGJ1c3ksIHRoZSByZWxlYXNlIGNhbGxiYWNrIG9mIHY0bCB3aWxsIHRha2UgY2FyZQotb2YgcmVsZWFzaW5nIGl0LiAqLworCS8qIHNhZmV0eSBjaGVjayAqLworCWlmIChyYWRpby0+cmVtb3ZlZCkKKwkJcmV0dXJuIC1FSU87CisKKwltdXRleF9sb2NrKCZyYWRpby0+bG9jayk7CisKKwlyYWRpby0+YnVmZmVyWzBdID0gMHgwMDsKKwlyYWRpby0+YnVmZmVyWzFdID0gMHg1NTsKKwlyYWRpby0+YnVmZmVyWzJdID0gMHhhYTsKKwlyYWRpby0+YnVmZmVyWzNdID0gMHgwMDsKKwlyYWRpby0+YnVmZmVyWzRdID0gQU1SQURJT19TRVRfTU9OTzsKKwlyYWRpby0+YnVmZmVyWzVdID0gYXJndW1lbnQ7CisJcmFkaW8tPmJ1ZmZlcls2XSA9IDB4MDA7CisJcmFkaW8tPmJ1ZmZlcls3XSA9IDB4MDA7CisKKwlyZXR2YWwgPSB1c2JfYnVsa19tc2cocmFkaW8tPnVzYmRldiwgdXNiX3NuZGludHBpcGUocmFkaW8tPnVzYmRldiwgMiksCisJCSh2b2lkICopIChyYWRpby0+YnVmZmVyKSwgQlVGRkVSX0xFTkdUSCwgJnNpemUsIFVTQl9USU1FT1VUKTsKKworCWlmIChyZXR2YWwgPCAwIHx8IHNpemUgIT0gQlVGRkVSX0xFTkdUSCkgeworCQlyYWRpby0+c3RlcmVvID0gLTE7CisJCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCXJhZGlvLT5zdGVyZW8gPSAxOworCisJbXV0ZXhfdW5sb2NrKCZyYWRpby0+bG9jayk7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCisvKiBIYW5kbGUgdW5wbHVnZ2luZyB0aGUgZGV2aWNlLgorICogV2UgY2FsbCB2aWRlb191bnJlZ2lzdGVyX2RldmljZSBpbiBhbnkgY2FzZS4KKyAqIFRoZSBsYXN0IGZ1bmN0aW9uIGNhbGxlZCBpbiB0aGlzIHByb2NlZHVyZSBpcworICogdXNiX2FtcmFkaW9fZGV2aWNlX3JlbGVhc2UuCisgKi8KIHN0YXRpYyB2b2lkIHVzYl9hbXJhZGlvX2Rpc2Nvbm5lY3Qoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CkBAIC0zMTMsOSArMzM1LDExIEBACiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqdikKIHsKKwlzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwogCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tbXI4MDAiLCBzaXplb2Yodi0+ZHJpdmVyKSk7CiAJc3RybGNweSh2LT5jYXJkLCAiQXZlck1lZGlhIE1SIDgwMCBVU0IgRk0gUmFkaW8iLCBzaXplb2Yodi0+Y2FyZCkpOwotCXNwcmludGYodi0+YnVzX2luZm8sICJVU0IiKTsKKwl1c2JfbWFrZV9wYXRoKHJhZGlvLT51c2JkZXYsIHYtPmJ1c19pbmZvLCBzaXplb2Yodi0+YnVzX2luZm8pKTsKIAl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKIAl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKIAlyZXR1cm4gMDsKQEAgLTMyNiw2ICszNTAsNyBAQAogCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewogCXN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwlpbnQgcmV0dmFsOwogCiAJLyogc2FmZXR5IGNoZWNrICovCiAJaWYgKHJhZGlvLT5yZW1vdmVkKQpAQCAtMzM3LDcgKzM2MiwxNiBAQAogLyogVE9ETzogQWRkIGZ1bmN0aW9uIHdoaWNoIGxvb2sgaXMgc2lnbmFsIHN0ZXJlbyBvciBub3QKICAqIAlhbXJhZGlvX2dldHN0YXQocmFkaW8pOwogICovCi0JcmFkaW8tPnN0ZXJlbyA9IC0xOworCisvKiB3ZSBjYWxsIGFtcmFkaW9fc2V0X3N0ZXJlbyB0byBzZXQgcmFkaW8tPnN0ZXJlbworICogSG9uZXN0bHksIGFtcmFkaW9fZ2V0c3RhdCBzaG91bGQgY292ZXIgdGhpcyBpbiBmdXR1cmUgYW5kCisgKiBhbXJhZGlvX3NldF9zdGVyZW8gc2hvdWxkbid0IGJlIGhlcmUKKyAqLworCXJldHZhbCA9IGFtcmFkaW9fc2V0X3N0ZXJlbyhyYWRpbywgV0FOVF9TVEVSRU8pOworCWlmIChyZXR2YWwgPCAwKQorCQlhbXJhZGlvX2Rldl93YXJuKCZyYWRpby0+dmlkZW9kZXYtPmRldiwKKwkJCSJzZXQgc3RlcmVvIGZhaWxlZFxuIik7CisKIAlzdHJjcHkodi0+bmFtZSwgIkZNIik7CiAJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJdi0+cmFuZ2Vsb3cgPSBGUkVRX01JTiAqIEZSRVFfTVVMOwpAQCAtMzU4LDYgKzM5Miw3IEBACiAJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7CiAJc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbyA9IHZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCWludCByZXR2YWw7CiAKIAkvKiBzYWZldHkgY2hlY2sgKi8KIAlpZiAocmFkaW8tPnJlbW92ZWQpCkBAIC0zNjUsNiArNDAwLDI1IEBACiAKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIG1vbm8vc3RlcmVvIHNlbGVjdG9yICovCisJc3dpdGNoICh2LT5hdWRtb2RlKSB7CisJY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzoKKwkJcmV0dmFsID0gYW1yYWRpb19zZXRfc3RlcmVvKHJhZGlvLCBXQU5UX01PTk8pOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCWFtcmFkaW9fZGV2X3dhcm4oJnJhZGlvLT52aWRlb2Rldi0+ZGV2LAorCQkJCSJzZXQgbW9ubyBmYWlsZWRcbiIpOworCQlicmVhazsKKwljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86CisJCXJldHZhbCA9IGFtcmFkaW9fc2V0X3N0ZXJlbyhyYWRpbywgV0FOVF9TVEVSRU8pOworCQlpZiAocmV0dmFsIDwgMCkKKwkJCWFtcmFkaW9fZGV2X3dhcm4oJnJhZGlvLT52aWRlb2Rldi0+ZGV2LAorCQkJCSJzZXQgc3RlcmVvIGZhaWxlZFxuIik7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwogCXJldHVybiAwOwogfQogCkBAIC0zNzMsMTMgKzQyNywxOCBAQAogCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKIAlzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJaW50IHJldHZhbDsKIAogCS8qIHNhZmV0eSBjaGVjayAqLwogCWlmIChyYWRpby0+cmVtb3ZlZCkKIAkJcmV0dXJuIC1FSU87CiAKKwltdXRleF9sb2NrKCZyYWRpby0+bG9jayk7CiAJcmFkaW8tPmN1cmZyZXEgPSBmLT5mcmVxdWVuY3k7Ci0JaWYgKGFtcmFkaW9fc2V0ZnJlcShyYWRpbywgcmFkaW8tPmN1cmZyZXEpIDwgMCkKKwltdXRleF91bmxvY2soJnJhZGlvLT5sb2NrKTsKKworCXJldHZhbCA9IGFtcmFkaW9fc2V0ZnJlcShyYWRpbywgcmFkaW8tPmN1cmZyZXEpOworCWlmIChyZXR2YWwgPCAwKQogCQlhbXJhZGlvX2Rldl93YXJuKCZyYWRpby0+dmlkZW9kZXYtPmRldiwKIAkJCSJzZXQgZnJlcXVlbmN5IGZhaWxlZFxuIik7CiAJcmV0dXJuIDA7CkBAIC00MzgsNiArNDk3LDcgQEAKIAkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewogCXN0cnVjdCBhbXJhZGlvX2RldmljZSAqcmFkaW8gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXZkYXRhKGZpbGUpKTsKKwlpbnQgcmV0dmFsOwogCiAJLyogc2FmZXR5IGNoZWNrICovCiAJaWYgKHJhZGlvLT5yZW1vdmVkKQpAQCAtNDQ2LDEzICs1MDYsMTUgQEAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgogCQlpZiAoY3RybC0+dmFsdWUpIHsKLQkJCWlmIChhbXJhZGlvX3N0b3AocmFkaW8pIDwgMCkgeworCQkJcmV0dmFsID0gYW1yYWRpb19zZXRfbXV0ZShyYWRpbywgQU1SQURJT19TVE9QKTsKKwkJCWlmIChyZXR2YWwgPCAwKSB7CiAJCQkJYW1yYWRpb19kZXZfd2FybigmcmFkaW8tPnZpZGVvZGV2LT5kZXYsCiAJCQkJCSJhbXJhZGlvX3N0b3AgZmFpbGVkXG4iKTsKIAkJCQlyZXR1cm4gLTE7CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQlpZiAoYW1yYWRpb19zdGFydChyYWRpbykgPCAwKSB7CisJCQlyZXR2YWwgPSBhbXJhZGlvX3NldF9tdXRlKHJhZGlvLCBBTVJBRElPX1NUQVJUKTsKKwkJCWlmIChyZXR2YWwgPCAwKSB7CiAJCQkJYW1yYWRpb19kZXZfd2FybigmcmFkaW8tPnZpZGVvZGV2LT5kZXYsCiAJCQkJCSJhbXJhZGlvX3N0YXJ0IGZhaWxlZFxuIik7CiAJCQkJcmV0dXJuIC0xOwpAQCAtNTAzLDIwICs1NjUsMjkgQEAKIHN0YXRpYyBpbnQgdXNiX2FtcmFkaW9fb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvID0gdmlkZW9fZ2V0X2RydmRhdGEodmlkZW9fZGV2ZGF0YShmaWxlKSk7CisJaW50IHJldHZhbDsKIAogCWxvY2tfa2VybmVsKCk7CiAKIAlyYWRpby0+dXNlcnMgPSAxOwogCXJhZGlvLT5tdXRlZCA9IDE7CiAKLQlpZiAoYW1yYWRpb19zdGFydChyYWRpbykgPCAwKSB7CisJcmV0dmFsID0gYW1yYWRpb19zZXRfbXV0ZShyYWRpbywgQU1SQURJT19TVEFSVCk7CisJaWYgKHJldHZhbCA8IDApIHsKIAkJYW1yYWRpb19kZXZfd2FybigmcmFkaW8tPnZpZGVvZGV2LT5kZXYsCiAJCQkicmFkaW8gZGlkIG5vdCBzdGFydCB1cCBwcm9wZXJseVxuIik7CiAJCXJhZGlvLT51c2VycyA9IDA7CiAJCXVubG9ja19rZXJuZWwoKTsKIAkJcmV0dXJuIC1FSU87CiAJfQotCWlmIChhbXJhZGlvX3NldGZyZXEocmFkaW8sIHJhZGlvLT5jdXJmcmVxKSA8IDApCisKKwlyZXR2YWwgPSBhbXJhZGlvX3NldF9zdGVyZW8ocmFkaW8sIFdBTlRfU1RFUkVPKTsKKwlpZiAocmV0dmFsIDwgMCkKKwkJYW1yYWRpb19kZXZfd2FybigmcmFkaW8tPnZpZGVvZGV2LT5kZXYsCisJCQkic2V0IHN0ZXJlbyBmYWlsZWRcbiIpOworCisJcmV0dmFsID0gYW1yYWRpb19zZXRmcmVxKHJhZGlvLCByYWRpby0+Y3VyZnJlcSk7CisJaWYgKHJldHZhbCA8IDApCiAJCWFtcmFkaW9fZGV2X3dhcm4oJnJhZGlvLT52aWRlb2Rldi0+ZGV2LAogCQkJInNldCBmcmVxdWVuY3kgZmFpbGVkXG4iKTsKIApAQCAtNTMzLDEwICs2MDQsMTIgQEAKIAlpZiAoIXJhZGlvKQogCQlyZXR1cm4gLUVOT0RFVjsKIAorCW11dGV4X2xvY2soJnJhZGlvLT5sb2NrKTsKIAlyYWRpby0+dXNlcnMgPSAwOworCW11dGV4X3VubG9jaygmcmFkaW8tPmxvY2spOwogCiAJaWYgKCFyYWRpby0+cmVtb3ZlZCkgewotCQlyZXR2YWwgPSBhbXJhZGlvX3N0b3AocmFkaW8pOworCQlyZXR2YWwgPSBhbXJhZGlvX3NldF9tdXRlKHJhZGlvLCBBTVJBRElPX1NUT1ApOwogCQlpZiAocmV0dmFsIDwgMCkKIAkJCWFtcmFkaW9fZGV2X3dhcm4oJnJhZGlvLT52aWRlb2Rldi0+ZGV2LAogCQkJCSJhbXJhZGlvX3N0b3AgZmFpbGVkXG4iKTsKQEAgLTU0OSw4ICs2MjIsMTAgQEAKIHN0YXRpYyBpbnQgdXNiX2FtcmFkaW9fc3VzcGVuZChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwgcG1fbWVzc2FnZV90IG1lc3NhZ2UpCiB7CiAJc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJaW50IHJldHZhbDsKIAotCWlmIChhbXJhZGlvX3N0b3AocmFkaW8pIDwgMCkKKwlyZXR2YWwgPSBhbXJhZGlvX3NldF9tdXRlKHJhZGlvLCBBTVJBRElPX1NUT1ApOworCWlmIChyZXR2YWwgPCAwKQogCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAiYW1yYWRpb19zdG9wIGZhaWxlZFxuIik7CiAKIAlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiZ29pbmcgaW50byBzdXNwZW5kLi5cbiIpOwpAQCAtNTYyLDggKzYzNywxMCBAQAogc3RhdGljIGludCB1c2JfYW1yYWRpb19yZXN1bWUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYpCiB7CiAJc3RydWN0IGFtcmFkaW9fZGV2aWNlICpyYWRpbyA9IHVzYl9nZXRfaW50ZmRhdGEoaW50Zik7CisJaW50IHJldHZhbDsKIAotCWlmIChhbXJhZGlvX3N0YXJ0KHJhZGlvKSA8IDApCisJcmV0dmFsID0gYW1yYWRpb19zZXRfbXV0ZShyYWRpbywgQU1SQURJT19TVEFSVCk7CisJaWYgKHJldHZhbCA8IDApCiAJCWRldl93YXJuKCZpbnRmLT5kZXYsICJhbXJhZGlvX3N0YXJ0IGZhaWxlZFxuIik7CiAKIAlkZXZfaW5mbygmaW50Zi0+ZGV2LCAiY29taW5nIG91dCBvZiBzdXNwZW5kLi5cbiIpOwpAQCAtNjE0LDI4ICs2OTEsMzIgQEAKIAkucmVsZWFzZQk9IHVzYl9hbXJhZGlvX2RldmljZV9yZWxlYXNlLAogfTsKIAotLyogY2hlY2sgaWYgdGhlIGRldmljZSBpcyBwcmVzZW50IGFuZCByZWdpc3RlciB3aXRoIHY0bCBhbmQKLXVzYiBpZiBpdCBpcyAqLworLyogY2hlY2sgaWYgdGhlIGRldmljZSBpcyBwcmVzZW50IGFuZCByZWdpc3RlciB3aXRoIHY0bCBhbmQgdXNiIGlmIGl0IGlzICovCiBzdGF0aWMgaW50IHVzYl9hbXJhZGlvX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRmLAogCQkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgYW1yYWRpb19kZXZpY2UgKnJhZGlvOworCWludCByZXR2YWw7CiAKIAlyYWRpbyA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCBhbXJhZGlvX2RldmljZSksIEdGUF9LRVJORUwpOwogCi0JaWYgKCEocmFkaW8pKQorCWlmICghcmFkaW8pIHsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAia21hbGxvYyBmb3IgYW1yYWRpb19kZXZpY2UgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CisJfQogCiAJcmFkaW8tPmJ1ZmZlciA9IGttYWxsb2MoQlVGRkVSX0xFTkdUSCwgR0ZQX0tFUk5FTCk7CiAKLQlpZiAoIShyYWRpby0+YnVmZmVyKSkgeworCWlmICghcmFkaW8tPmJ1ZmZlcikgeworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJrbWFsbG9jIGZvciByYWRpby0+YnVmZmVyIGZhaWxlZFxuIik7CiAJCWtmcmVlKHJhZGlvKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJcmFkaW8tPnZpZGVvZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CiAKLQlpZiAoIShyYWRpby0+dmlkZW9kZXYpKSB7CisJaWYgKCFyYWRpby0+dmlkZW9kZXYpIHsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAidmlkZW9fZGV2aWNlX2FsbG9jIGZhaWxlZFxuIik7CiAJCWtmcmVlKHJhZGlvLT5idWZmZXIpOwogCQlrZnJlZShyYWRpbyk7CiAJCXJldHVybiAtRU5PTUVNOwpAQCAtNjQ4LDEyICs3MjksMTQgQEAKIAlyYWRpby0+dXNlcnMgPSAwOwogCXJhZGlvLT51c2JkZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOwogCXJhZGlvLT5jdXJmcmVxID0gOTUuMTYgKiBGUkVRX01VTDsKKwlyYWRpby0+c3RlcmVvID0gLTE7CiAKIAltdXRleF9pbml0KCZyYWRpby0+bG9jayk7CiAKIAl2aWRlb19zZXRfZHJ2ZGF0YShyYWRpby0+dmlkZW9kZXYsIHJhZGlvKTsKLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHJhZGlvLT52aWRlb2RldiwgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSkgewotCQlkZXZfd2FybigmaW50Zi0+ZGV2LCAiY291bGQgbm90IHJlZ2lzdGVyIHZpZGVvIGRldmljZVxuIik7CisJcmV0dmFsID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHJhZGlvLT52aWRlb2RldiwJVkZMX1RZUEVfUkFESU8sCXJhZGlvX25yKTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlkZXZfZXJyKCZpbnRmLT5kZXYsICJjb3VsZCBub3QgcmVnaXN0ZXIgdmlkZW8gZGV2aWNlXG4iKTsKIAkJdmlkZW9fZGV2aWNlX3JlbGVhc2UocmFkaW8tPnZpZGVvZGV2KTsKIAkJa2ZyZWUocmFkaW8tPmJ1ZmZlcik7CiAJCWtmcmVlKHJhZGlvKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tcnRyYWNrMi5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1ydHJhY2syLmMKaW5kZXggMjU4NzIyNy4uZDFlNmIwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1ydHJhY2syLmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1ydHJhY2syLmMKQEAgLTEzLDM0ICsxMywxNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4JCS8qIEluaXRkYXRhCQkJKi8KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogcmVxdWVzdF9yZWdpb24JCSovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogdWRlbGF5CQkJKi8KLSNpbmNsdWRlIDxhc20vaW8uaD4JCS8qIG91dGIsIG91dGJfcAkJCSovCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4JLyogY29weSB0by9mcm9tIHVzZXIJCSovCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzCQkqLwotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gICAgICovCi0jZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwwLDIpCisjaW5jbHVkZSA8bGludXgvaW8uaD4JCS8qIG91dGIsIG91dGJfcAkJCSovCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAKLXN0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKLQl7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKLQkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQl9LHsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCi0JCS5uYW1lICAgICAgICAgID0gIlZvbHVtZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSA2NTUzNSwKLQkJLnN0ZXAgICAgICAgICAgPSA2NTUzNSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAweGZmLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JfQotfTsKK01PRFVMRV9BVVRIT1IoIkJlbiBQZmFmZiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIFJhZGlvVHJhY2sgSUkgcmFkaW8gY2FyZC4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogI2lmbmRlZiBDT05GSUdfUkFESU9fUlRSQUNLMl9QT1JUCiAjZGVmaW5lIENPTkZJR19SQURJT19SVFJBQ0syX1BPUlQgLTEKQEAgLTQ4LDc5ICszMCw4OCBAQAogCiBzdGF0aWMgaW50IGlvID0gQ09ORklHX1JBRElPX1JUUkFDSzJfUE9SVDsKIHN0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKLXN0YXRpYyBzcGlubG9ja190IGxvY2s7CiAKLXN0cnVjdCBydF9kZXZpY2UKK21vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgUmFkaW9UcmFjayBjYXJkICgweDIwYyBvciAweDMwYykiKTsKK21vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKKworI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDIpCisKK3N0cnVjdCBydHJhY2syCiB7Ci0JdW5zaWduZWQgbG9uZyBpbl91c2U7Ci0JaW50IHBvcnQ7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmRldjsKKwlpbnQgaW87CiAJdW5zaWduZWQgbG9uZyBjdXJmcmVxOwogCWludCBtdXRlZDsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgcnRyYWNrMiBydHJhY2syX2NhcmQ7CisKIAogLyogbG9jYWwgdGhpbmdzICovCiAKLXN0YXRpYyB2b2lkIHJ0X211dGUoc3RydWN0IHJ0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgcnRfbXV0ZShzdHJ1Y3QgcnRyYWNrMiAqZGV2KQogewotCWlmKGRldi0+bXV0ZWQpCisJaWYgKGRldi0+bXV0ZWQpCiAJCXJldHVybjsKLQlzcGluX2xvY2soJmxvY2spOwotCW91dGIoMSwgaW8pOwotCXNwaW5fdW5sb2NrKCZsb2NrKTsKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCW91dGIoMSwgZGV2LT5pbyk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCWRldi0+bXV0ZWQgPSAxOwogfQogCi1zdGF0aWMgdm9pZCBydF91bm11dGUoc3RydWN0IHJ0X2RldmljZSAqZGV2KQorc3RhdGljIHZvaWQgcnRfdW5tdXRlKHN0cnVjdCBydHJhY2syICpkZXYpCiB7CiAJaWYoZGV2LT5tdXRlZCA9PSAwKQogCQlyZXR1cm47Ci0Jc3Bpbl9sb2NrKCZsb2NrKTsKLQlvdXRiKDAsIGlvKTsKLQlzcGluX3VubG9jaygmbG9jayk7CisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlvdXRiKDAsIGRldi0+aW8pOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAlkZXYtPm11dGVkID0gMDsKIH0KIAotc3RhdGljIHZvaWQgemVybyh2b2lkKQorc3RhdGljIHZvaWQgemVybyhzdHJ1Y3QgcnRyYWNrMiAqZGV2KQogewotCW91dGJfcCgxLCBpbyk7Ci0Jb3V0Yl9wKDMsIGlvKTsKLQlvdXRiX3AoMSwgaW8pOworCW91dGJfcCgxLCBkZXYtPmlvKTsKKwlvdXRiX3AoMywgZGV2LT5pbyk7CisJb3V0Yl9wKDEsIGRldi0+aW8pOwogfQogCi1zdGF0aWMgdm9pZCBvbmUodm9pZCkKK3N0YXRpYyB2b2lkIG9uZShzdHJ1Y3QgcnRyYWNrMiAqZGV2KQogewotCW91dGJfcCg1LCBpbyk7Ci0Jb3V0Yl9wKDcsIGlvKTsKLQlvdXRiX3AoNSwgaW8pOworCW91dGJfcCg1LCBkZXYtPmlvKTsKKwlvdXRiX3AoNywgZGV2LT5pbyk7CisJb3V0Yl9wKDUsIGRldi0+aW8pOwogfQogCi1zdGF0aWMgaW50IHJ0X3NldGZyZXEoc3RydWN0IHJ0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZyZXEpCitzdGF0aWMgaW50IHJ0X3NldGZyZXEoc3RydWN0IHJ0cmFjazIgKmRldiwgdW5zaWduZWQgbG9uZyBmcmVxKQogewogCWludCBpOwogCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlkZXYtPmN1cmZyZXEgPSBmcmVxOwogCWZyZXEgPSBmcmVxIC8gMjAwICsgODU2OwogCi0Jc3Bpbl9sb2NrKCZsb2NrKTsKLQotCW91dGJfcCgweGM4LCBpbyk7Ci0Jb3V0Yl9wKDB4YzksIGlvKTsKLQlvdXRiX3AoMHhjOSwgaW8pOworCW91dGJfcCgweGM4LCBkZXYtPmlvKTsKKwlvdXRiX3AoMHhjOSwgZGV2LT5pbyk7CisJb3V0Yl9wKDB4YzksIGRldi0+aW8pOwogCiAJZm9yIChpID0gMDsgaSA8IDEwOyBpKyspCi0JCXplcm8gKCk7CisJCXplcm8oZGV2KTsKIAogCWZvciAoaSA9IDE0OyBpID49IDA7IGktLSkKIAkJaWYgKGZyZXEgJiAoMSA8PCBpKSkKLQkJCW9uZSAoKTsKKwkJCW9uZShkZXYpOwogCQllbHNlCi0JCQl6ZXJvICgpOworCQkJemVybyhkZXYpOwogCi0Jb3V0Yl9wKDB4YzgsIGlvKTsKKwlvdXRiX3AoMHhjOCwgZGV2LT5pbyk7CiAJaWYgKCFkZXYtPm11dGVkKQotCQlvdXRiX3AoMCwgaW8pOworCQlvdXRiX3AoMCwgZGV2LT5pbyk7CiAKLQlzcGluX3VubG9jaygmbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCXJldHVybiAwOwogfQogCkBAIC0xMjksNjEgKzEyMCw2MSBAQAogewogCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tcnRyYWNrMiIsIHNpemVvZih2LT5kcml2ZXIpKTsKIAlzdHJsY3B5KHYtPmNhcmQsICJSYWRpb1RyYWNrIElJIiwgc2l6ZW9mKHYtPmNhcmQpKTsKLQlzcHJpbnRmKHYtPmJ1c19pbmZvLCAiSVNBIik7CisJc3RybGNweSh2LT5idXNfaW5mbywgIklTQSIsIHNpemVvZih2LT5idXNfaW5mbykpOwogCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwotCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0JaWYgKHYtPmluZGV4ID4gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlyZXR1cm4gMDsKKwlyZXR1cm4gdi0+aW5kZXggPyAtRUlOVkFMIDogMDsKIH0KIAotc3RhdGljIGludCBydF9nZXRzaWdzdHIoc3RydWN0IHJ0X2RldmljZSAqZGV2KQorc3RhdGljIGludCBydF9nZXRzaWdzdHIoc3RydWN0IHJ0cmFjazIgKmRldikKIHsKLQlpZiAoaW5iKGlvKSAmIDIpCS8qIGJpdCBzZXQgPSBubyBzaWduYWwgcHJlc2VudAkqLwotCQlyZXR1cm4gMDsKLQlyZXR1cm4gMTsJCS8qIHNpZ25hbCBwcmVzZW50CQkqLworCWludCBzaWcgPSAxOworCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlpZiAoaW5iKGRldi0+aW8pICYgMikJLyogYml0IHNldCA9IG5vIHNpZ25hbCBwcmVzZW50CSovCisJCXNpZyA9IDA7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCXJldHVybiBzaWc7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0Jc3RydWN0IHJ0X2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBydHJhY2syICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKKwlzdHJsY3B5KHYtPm5hbWUsICJGTSIsIHNpemVvZih2LT5uYW1lKSk7CiAJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87Ci0Jdi0+cmFuZ2Vsb3cgPSAoODgqMTYwMDApOwotCXYtPnJhbmdlaGlnaCA9ICgxMDgqMTYwMDApOworCXYtPnJhbmdlbG93ID0gODggKiAxNjAwMDsKKwl2LT5yYW5nZWhpZ2ggPSAxMDggKiAxNjAwMDsKIAl2LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKIAl2LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTE9XOwogCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKLQl2LT5zaWduYWwgPSAweEZGRkYqcnRfZ2V0c2lnc3RyKHJ0KTsKKwl2LT5zaWduYWwgPSAweEZGRkYgKiBydF9nZXRzaWdzdHIocnQpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IHJ0X2RldmljZSAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBydHJhY2syICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKLQlydC0+Y3VyZnJlcSA9IGYtPmZyZXF1ZW5jeTsKLQlydF9zZXRmcmVxKHJ0LCBydC0+Y3VyZnJlcSk7CisJcnRfc2V0ZnJlcShydCwgZi0+ZnJlcXVlbmN5KTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcnRyYWNrMiAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJZi0+ZnJlcXVlbmN5ID0gcnQtPmN1cmZyZXE7CkBAIC0xOTMsMTQgKzE4NCwxMSBAQAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7IGkrKykgewotCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgewotCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwKLQkJCQkJCXNpemVvZigqcWMpKTsKLQkJCXJldHVybiAwOwotCQl9CisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMSk7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsIDY1NTM1LCA2NTUzNSk7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMjA4LDcgKzE5Niw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgcnRfZGV2aWNlICpydCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHJ0cmFjazIgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0yMjcsNyArMjE1LDcgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBydF9kZXZpY2UgKnJ0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgcnRyYWNrMiAqcnQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTI0NiwxNyArMjM0LDYgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKLXsKLQlpZiAoYS0+aW5kZXggPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN0cmNweShhLT5uYW1lLCAiUmFkaW8iKTsKLQlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCiB7CiAJKmkgPSAwOwpAQCAtMjY1LDM2ICsyNDIsMzggQEAKIAogc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCiB7Ci0JaWYgKGkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlhLT5pbmRleCA9IDA7CisJc3RybGNweShhLT5uYW1lLCAiUmFkaW8iLCBzaXplb2YoYS0+bmFtZSkpOworCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCiB7Ci0JaWYgKGEtPmluZGV4ICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiBhLT5pbmRleCA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHJ0cmFjazJfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBydF9kZXZpY2UgcnRyYWNrMl91bml0OwotCi1zdGF0aWMgaW50IHJ0cmFjazJfZXhjbHVzaXZlX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IHJ0cmFjazJfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmcnRyYWNrMl91bml0LmluX3VzZSkgPyAtRUJVU1kgOiAwOwotfQotCi1zdGF0aWMgaW50IHJ0cmFjazJfZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JY2xlYXJfYml0KDAsICZydHJhY2syX3VuaXQuaW5fdXNlKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBydHJhY2syX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IHJ0cmFjazJfZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UgICAgICAgID0gcnRyYWNrMl9leGNsdXNpdmVfcmVsZWFzZSwKKwkub3BlbiAgICAgICAgICAgPSBydHJhY2syX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gcnRyYWNrMl9yZWxlYXNlLAogCS5pb2N0bAkJPSB2aWRlb19pb2N0bDIsCiB9OwogCkBAIC0zMTMsNjIgKzI5Miw2MSBAQAogCS52aWRpb2Nfc19pbnB1dCAgICAgPSB2aWRpb2Nfc19pbnB1dCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHJ0cmFjazJfcmFkaW8gPSB7Ci0JLm5hbWUJCT0gIlJhZGlvVHJhY2sgSUkgcmFkaW8iLAotCS5mb3BzICAgICAgICAgICA9ICZydHJhY2syX2ZvcHMsCi0JLmlvY3RsX29wcyAJPSAmcnRyYWNrMl9pb2N0bF9vcHMsCi0JLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKLX07Ci0KIHN0YXRpYyBpbnQgX19pbml0IHJ0cmFjazJfaW5pdCh2b2lkKQogewotCWlmKGlvPT0tMSkKLQl7Ci0JCXByaW50ayhLRVJOX0VSUiAiWW91IG11c3Qgc2V0IGFuIEkvTyBhZGRyZXNzIHdpdGggaW89MHgyMGMgb3IgaW89MHgzMGNcbiIpOworCXN0cnVjdCBydHJhY2syICpkZXYgPSAmcnRyYWNrMl9jYXJkOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmZGV2LT52NGwyX2RldjsKKwlpbnQgcmVzOworCisJc3RybGNweSh2NGwyX2Rldi0+bmFtZSwgInJ0cmFjazIiLCBzaXplb2YodjRsMl9kZXYtPm5hbWUpKTsKKwlkZXYtPmlvID0gaW87CisJaWYgKGRldi0+aW8gPT0gLTEpIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJZb3UgbXVzdCBzZXQgYW4gSS9PIGFkZHJlc3Mgd2l0aCBpbz0weDIwYyBvciBpbz0weDMwY1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvLCA0LCAicnRyYWNrMiIpKQotCXsKLQkJcHJpbnRrKEtFUk5fRVJSICJydHJhY2syOiBwb3J0IDB4JXggYWxyZWFkeSBpbiB1c2VcbiIsIGlvKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGRldi0+aW8sIDQsICJydHJhY2syIikpIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJwb3J0IDB4JXggYWxyZWFkeSBpbiB1c2VcbiIsIGRldi0+aW8pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCXZpZGVvX3NldF9kcnZkYXRhKCZydHJhY2syX3JhZGlvLCAmcnRyYWNrMl91bml0KTsKKwlyZXMgPSB2NGwyX2RldmljZV9yZWdpc3RlcihOVUxMLCB2NGwyX2Rldik7CisJaWYgKHJlcyA8IDApIHsKKwkJcmVsZWFzZV9yZWdpb24oZGV2LT5pbywgNCk7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHY0bDJfZGV2aWNlXG4iKTsKKwkJcmV0dXJuIHJlczsKKwl9CiAKLQlzcGluX2xvY2tfaW5pdCgmbG9jayk7Ci0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmcnRyYWNrMl9yYWRpbywgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKLQkJcmVsZWFzZV9yZWdpb24oaW8sIDQpOworCXN0cmxjcHkoZGV2LT52ZGV2Lm5hbWUsIHY0bDJfZGV2LT5uYW1lLCBzaXplb2YoZGV2LT52ZGV2Lm5hbWUpKTsKKwlkZXYtPnZkZXYudjRsMl9kZXYgPSB2NGwyX2RldjsKKwlkZXYtPnZkZXYuZm9wcyA9ICZydHJhY2syX2ZvcHM7CisJZGV2LT52ZGV2LmlvY3RsX29wcyA9ICZydHJhY2syX2lvY3RsX29wczsKKwlkZXYtPnZkZXYucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5OworCXZpZGVvX3NldF9kcnZkYXRhKCZkZXYtPnZkZXYsIGRldik7CisKKwltdXRleF9pbml0KCZkZXYtPmxvY2spOworCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmRldi0+dmRldiwgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKKwkJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcih2NGwyX2Rldik7CisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW8sIDQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJBSU1TbGFiIFJhZGlvdHJhY2sgSUkgY2FyZCBkcml2ZXIuXG4iKTsKKwl2NGwyX2luZm8odjRsMl9kZXYsICJBSU1TbGFiIFJhZGlvdHJhY2sgSUkgY2FyZCBkcml2ZXIuXG4iKTsKIAogCS8qIG11dGUgY2FyZCAtIHByZXZlbnRzIG5vaXN5IGJvb3R1cHMgKi8KLQlvdXRiKDEsIGlvKTsKLQlydHJhY2syX3VuaXQubXV0ZWQgPSAxOworCW91dGIoMSwgZGV2LT5pbyk7CisJZGV2LT5tdXRlZCA9IDE7CiAKIAlyZXR1cm4gMDsKIH0KIAotTU9EVUxFX0FVVEhPUigiQmVuIFBmYWZmIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgUmFkaW9UcmFjayBJSSByYWRpbyBjYXJkLiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1tb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIFJhZGlvVHJhY2sgY2FyZCAoMHgyMGMgb3IgMHgzMGMpIik7Ci1tb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBydHJhY2syX2NsZWFudXBfbW9kdWxlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgcnRyYWNrMl9leGl0KHZvaWQpCiB7Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnJ0cmFjazJfcmFkaW8pOwotCXJlbGVhc2VfcmVnaW9uKGlvLDQpOworCXN0cnVjdCBydHJhY2syICpkZXYgPSAmcnRyYWNrMl9jYXJkOworCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmRldi0+dmRldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7CisJcmVsZWFzZV9yZWdpb24oZGV2LT5pbywgNCk7CiB9CiAKIG1vZHVsZV9pbml0KHJ0cmFjazJfaW5pdCk7Ci1tb2R1bGVfZXhpdChydHJhY2syX2NsZWFudXBfbW9kdWxlKTsKLQotLyoKLSAgTG9jYWwgdmFyaWFibGVzOgotICBjb21waWxlLWNvbW1hbmQ6ICJtbWFrZSIKLSAgRW5kOgotKi8KK21vZHVsZV9leGl0KHJ0cmFjazJfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbWkuYyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtaS5jCmluZGV4IGQzNThlNDguLmY0Nzg0ZjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtaS5jCkBAIC0yMiwxMTMgKzIyLDEwOSBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4JCS8qIEluaXRkYXRhCQkJKi8KICNpbmNsdWRlIDxsaW51eC9pb3BvcnQuaD4JLyogcmVxdWVzdF9yZWdpb24JCSovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4JLyogdWRlbGF5CQkJKi8KLSNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4JLyoga2VybmVsIHJhZGlvIHN0cnVjdHMJCSovCi0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvaXNhcG5wLmg+Ci0jaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLwotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGNvcHkgdG8vZnJvbSB1c2VyCQkqLwogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzCQkqLworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLworI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogCi0jZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwwLDIpCi0KLXN0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKLQl7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKLQkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQl9Ci19OwotCi1zdHJ1Y3QgZm1pX2RldmljZQotewotCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwotCWludCBwb3J0OwotCWludCBjdXJ2b2w7IC8qIDEgb3IgMCAqLwotCXVuc2lnbmVkIGxvbmcgY3VyZnJlcTsgLyogZnJlcSBpbiBrSHogKi8KLQlfX3UzMiBmbGFnczsKLX07CitNT0RVTEVfQVVUSE9SKCJQZXRyIFZhbmRyb3ZlYywgdmFuZHJvdmVAdmMuY3Z1dC5jeiBhbmQgTS4gS2lya3dvb2QiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBTRjE2TUkgcmFkaW8uIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKIHN0YXRpYyBpbnQgaW8gPSAtMTsKIHN0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKLXN0YXRpYyBzdHJ1Y3QgcG5wX2RldiAqZGV2ID0gTlVMTDsKLXN0YXRpYyBzdHJ1Y3QgbXV0ZXggbG9jazsKKworbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIHRoZSBTRjE2TUkgY2FyZCAoMHgyODQgb3IgMHgzODQpIik7Cittb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7CisKKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAwLCAyKQorCitzdHJ1Y3QgZm1pCit7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmRldjsKKwlpbnQgaW87CisJaW50IGN1cnZvbDsgLyogMSBvciAwICovCisJdW5zaWduZWQgbG9uZyBjdXJmcmVxOyAvKiBmcmVxIGluIGtIeiAqLworCV9fdTMyIGZsYWdzOworCXN0cnVjdCBtdXRleCBsb2NrOworfTsKKworc3RhdGljIHN0cnVjdCBmbWkgZm1pX2NhcmQ7CitzdGF0aWMgc3RydWN0IHBucF9kZXYgKmRldjsKIAogLyogZnJlcSBpcyBpbiAxLzE2IGtIeiB0byBpbnRlcm5hbCBudW1iZXIsIGh3IHByZWNpc2lvbiBpcyA1MCBrSHogKi8KIC8qIEl0IGlzIG9ubHkgdXNlZnVsIHRvIGdpdmUgZnJlcSBpbiBpbnRlcnZhbGwgb2YgODAwICg9MC4wNU1oeiksCiAgKiBvdGhlciBiaXRzIHdpbGwgYmUgdHJ1bmNhdGVkLCBlLmcgOTIuNzQwMDAxNiAtPiA5Mi43LCBidXQKICAqIDkyLjc0MDAwMTcgLT4gOTIuNzUKICAqLwotI2RlZmluZSBSU0YxNl9FTkNPREUoeCkJKCh4KS84MDArMjE0KQotI2RlZmluZSBSU0YxNl9NSU5GUkVRIDg3KjE2MDAwCi0jZGVmaW5lIFJTRjE2X01BWEZSRVEgMTA4KjE2MDAwCisjZGVmaW5lIFJTRjE2X0VOQ09ERSh4KQkoKHgpIC8gODAwICsgMjE0KQorI2RlZmluZSBSU0YxNl9NSU5GUkVRICg4NyAqIDE2MDAwKQorI2RlZmluZSBSU0YxNl9NQVhGUkVRICgxMDggKiAxNjAwMCkKIAotc3RhdGljIHZvaWQgb3V0Yml0cyhpbnQgYml0cywgdW5zaWduZWQgaW50IGRhdGEsIGludCBwb3J0KQorc3RhdGljIHZvaWQgb3V0Yml0cyhpbnQgYml0cywgdW5zaWduZWQgaW50IGRhdGEsIGludCBpbykKIHsKLQl3aGlsZShiaXRzLS0pIHsKLQkJaWYoZGF0YSAmIDEpIHsKLQkJCW91dGIoNSwgcG9ydCk7CisJd2hpbGUgKGJpdHMtLSkgeworCQlpZiAoZGF0YSAmIDEpIHsKKwkJCW91dGIoNSwgaW8pOwogCQkJdWRlbGF5KDYpOwotCQkJb3V0Yig3LCBwb3J0KTsKKwkJCW91dGIoNywgaW8pOwogCQkJdWRlbGF5KDYpOwogCQl9IGVsc2UgewotCQkJb3V0YigxLCBwb3J0KTsKKwkJCW91dGIoMSwgaW8pOwogCQkJdWRlbGF5KDYpOwotCQkJb3V0YigzLCBwb3J0KTsKKwkJCW91dGIoMywgaW8pOwogCQkJdWRlbGF5KDYpOwogCQl9Ci0JCWRhdGE+Pj0xOworCQlkYXRhID4+PSAxOwogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZtaV9tdXRlKGludCBwb3J0KQorc3RhdGljIGlubGluZSB2b2lkIGZtaV9tdXRlKHN0cnVjdCBmbWkgKmZtaSkKIHsKLQltdXRleF9sb2NrKCZsb2NrKTsKLQlvdXRiKDB4MDAsIHBvcnQpOwotCW11dGV4X3VubG9jaygmbG9jayk7CisJbXV0ZXhfbG9jaygmZm1pLT5sb2NrKTsKKwlvdXRiKDB4MDAsIGZtaS0+aW8pOworCW11dGV4X3VubG9jaygmZm1pLT5sb2NrKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZtaV91bm11dGUoaW50IHBvcnQpCitzdGF0aWMgaW5saW5lIHZvaWQgZm1pX3VubXV0ZShzdHJ1Y3QgZm1pICpmbWkpCiB7Ci0JbXV0ZXhfbG9jaygmbG9jayk7Ci0Jb3V0YigweDA4LCBwb3J0KTsKLQltdXRleF91bmxvY2soJmxvY2spOworCW11dGV4X2xvY2soJmZtaS0+bG9jayk7CisJb3V0YigweDA4LCBmbWktPmlvKTsKKwltdXRleF91bmxvY2soJmZtaS0+bG9jayk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGZtaV9zZXRmcmVxKHN0cnVjdCBmbWlfZGV2aWNlICpkZXYpCitzdGF0aWMgaW5saW5lIGludCBmbWlfc2V0ZnJlcShzdHJ1Y3QgZm1pICpmbWksIHVuc2lnbmVkIGxvbmcgZnJlcSkKIHsKLQlpbnQgbXlwb3J0ID0gZGV2LT5wb3J0OwotCXVuc2lnbmVkIGxvbmcgZnJlcSA9IGRldi0+Y3VyZnJlcTsKKwltdXRleF9sb2NrKCZmbWktPmxvY2spOworCWZtaS0+Y3VyZnJlcSA9IGZyZXE7CiAKLQltdXRleF9sb2NrKCZsb2NrKTsKLQotCW91dGJpdHMoMTYsIFJTRjE2X0VOQ09ERShmcmVxKSwgbXlwb3J0KTsKLQlvdXRiaXRzKDgsIDB4QzAsIG15cG9ydCk7CisJb3V0Yml0cygxNiwgUlNGMTZfRU5DT0RFKGZyZXEpLCBmbWktPmlvKTsKKwlvdXRiaXRzKDgsIDB4QzAsIGZtaS0+aW8pOwogCW1zbGVlcCgxNDMpOwkJLyogd2FzIHNjaGVkdWxlX3RpbWVvdXQoSFovNykgKi8KLQltdXRleF91bmxvY2soJmxvY2spOwotCWlmIChkZXYtPmN1cnZvbCkgZm1pX3VubXV0ZShteXBvcnQpOworCW11dGV4X3VubG9jaygmZm1pLT5sb2NrKTsKKwlpZiAoZm1pLT5jdXJ2b2wpCisJCWZtaV91bm11dGUoZm1pKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZm1pX2dldHNpZ3N0cihzdHJ1Y3QgZm1pX2RldmljZSAqZGV2KQorc3RhdGljIGlubGluZSBpbnQgZm1pX2dldHNpZ3N0cihzdHJ1Y3QgZm1pICpmbWkpCiB7CiAJaW50IHZhbDsKIAlpbnQgcmVzOwotCWludCBteXBvcnQgPSBkZXYtPnBvcnQ7CiAKLQotCW11dGV4X2xvY2soJmxvY2spOwotCXZhbCA9IGRldi0+Y3Vydm9sID8gMHgwOCA6IDB4MDA7CS8qIHVubXV0ZS9tdXRlICovCi0Jb3V0Yih2YWwsIG15cG9ydCk7Ci0Jb3V0Yih2YWwgfCAweDEwLCBteXBvcnQpOworCW11dGV4X2xvY2soJmZtaS0+bG9jayk7CisJdmFsID0gZm1pLT5jdXJ2b2wgPyAweDA4IDogMHgwMDsJLyogdW5tdXRlL211dGUgKi8KKwlvdXRiKHZhbCwgZm1pLT5pbyk7CisJb3V0Yih2YWwgfCAweDEwLCBmbWktPmlvKTsKIAltc2xlZXAoMTQzKTsgCQkvKiB3YXMgc2NoZWR1bGVfdGltZW91dChIWi83KSAqLwotCXJlcyA9IChpbnQpaW5iKG15cG9ydCsxKTsKLQlvdXRiKHZhbCwgbXlwb3J0KTsKKwlyZXMgPSAoaW50KWluYihmbWktPmlvICsgMSk7CisJb3V0Yih2YWwsIGZtaS0+aW8pOwogCi0JbXV0ZXhfdW5sb2NrKCZsb2NrKTsKKwltdXRleF91bmxvY2soJmZtaS0+bG9jayk7CiAJcmV0dXJuIChyZXMgJiAyKSA/IDAgOiAweEZGRkY7CiB9CiAKQEAgLTEzNyw5ICsxMzMsOSBAQAogewogCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tc2YxNmZtaSIsIHNpemVvZih2LT5kcml2ZXIpKTsKIAlzdHJsY3B5KHYtPmNhcmQsICJTRjE2LUZNeCByYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7Ci0Jc3ByaW50Zih2LT5idXNfaW5mbywgIklTQSIpOworCXN0cmxjcHkodi0+YnVzX2luZm8sICJJU0EiLCBzaXplb2Yodi0+YnVzX2luZm8pKTsKIAl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKLQl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKKwl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOwogCXJldHVybiAwOwogfQogCkBAIC0xNDcsMTggKzE0MywxOCBAQAogCQkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKIAlpbnQgbXVsdDsKLQlzdHJ1Y3QgZm1pX2RldmljZSAqZm1pID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgZm1pICpmbWkgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJc3RybGNweSh2LT5uYW1lLCAiRk0iLCBzaXplb2Yodi0+bmFtZSkpOwogCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCW11bHQgPSAoZm1pLT5mbGFncyAmIFY0TDJfVFVORVJfQ0FQX0xPVykgPyAxIDogMTAwMDsKLQl2LT5yYW5nZWxvdyA9IFJTRjE2X01JTkZSRVEvbXVsdDsKLQl2LT5yYW5nZWhpZ2ggPSBSU0YxNl9NQVhGUkVRL211bHQ7CisJdi0+cmFuZ2Vsb3cgPSBSU0YxNl9NSU5GUkVRIC8gbXVsdDsKKwl2LT5yYW5nZWhpZ2ggPSBSU0YxNl9NQVhGUkVRIC8gbXVsdDsKIAl2LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTyB8IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87Ci0Jdi0+Y2FwYWJpbGl0eSA9IGZtaS0+ZmxhZ3MmVjRMMl9UVU5FUl9DQVBfTE9XOworCXYtPmNhcGFiaWxpdHkgPSBmbWktPmZsYWdzICYgVjRMMl9UVU5FUl9DQVBfTE9XOwogCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOwogCXYtPnNpZ25hbCA9IGZtaV9nZXRzaWdzdHIoZm1pKTsKIAlyZXR1cm4gMDsKQEAgLTE2NywzMiArMTYzLDI5IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlpZiAodi0+aW5kZXggPiAwKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gMDsKKwlyZXR1cm4gdi0+aW5kZXggPyAtRUlOVkFMIDogMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgZm1pX2RldmljZSAqZm1pID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgZm1pICpmbWkgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKCEoZm1pLT5mbGFncyAmIFY0TDJfVFVORVJfQ0FQX0xPVykpCiAJCWYtPmZyZXF1ZW5jeSAqPSAxMDAwOwogCWlmIChmLT5mcmVxdWVuY3kgPCBSU0YxNl9NSU5GUkVRIHx8Ci0JCQlmLT5mcmVxdWVuY3kgPiBSU0YxNl9NQVhGUkVRICkKKwkJCWYtPmZyZXF1ZW5jeSA+IFJTRjE2X01BWEZSRVEpCiAJCXJldHVybiAtRUlOVkFMOwotCS8qcm91bmRpbmcgaW4gc3RlcHMgb2YgODAwIHRvIG1hdGNoIHRoIGZyZXEKLQl0aGF0IHdpbGwgYmUgdXNlZCAqLwotCWZtaS0+Y3VyZnJlcSA9IChmLT5mcmVxdWVuY3kvODAwKSo4MDA7Ci0JZm1pX3NldGZyZXEoZm1pKTsKKwkvKiByb3VuZGluZyBpbiBzdGVwcyBvZiA4MDAgdG8gbWF0Y2ggdGhlIGZyZXEKKwkgICB0aGF0IHdpbGwgYmUgdXNlZCAqLworCWZtaV9zZXRmcmVxKGZtaSwgKGYtPmZyZXF1ZW5jeSAvIDgwMCkgKiA4MDApOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCBmbWlfZGV2aWNlICpmbWkgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBmbWkgKmZtaSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAlmLT5mcmVxdWVuY3kgPSBmbWktPmN1cmZyZXE7CkBAIC0yMDQsMTQgKzE5Nyw5IEBACiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7IGkrKykgewotCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgewotCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwKLQkJCQkJCXNpemVvZigqcWMpKTsKLQkJCXJldHVybiAwOwotCQl9CisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMSk7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMjE5LDcgKzIwNyw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IGZtaV9kZXZpY2UgKmZtaSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IGZtaSAqZm1pID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0yMzIsMzEgKzIyMCwyMCBAQAogc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBmbWlfZGV2aWNlICpmbWkgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBmbWkgKmZtaSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgogCQlpZiAoY3RybC0+dmFsdWUpCi0JCQlmbWlfbXV0ZShmbWktPnBvcnQpOworCQkJZm1pX211dGUoZm1pKTsKIAkJZWxzZQotCQkJZm1pX3VubXV0ZShmbWktPnBvcnQpOworCQkJZm1pX3VubXV0ZShmbWkpOwogCQlmbWktPmN1cnZvbCA9IGN0cmwtPnZhbHVlOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQotewotCWlmIChhLT5pbmRleCA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3RyY3B5KGEtPm5hbWUsICJSYWRpbyIpOwotCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKIHsKIAkqaSA9IDA7CkBAIC0yNjUsMzYgKzI0MiwzOCBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKIHsKLQlpZiAoaSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gaSA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlhLT5pbmRleCA9IDA7CisJc3RybGNweShhLT5uYW1lLCAiUmFkaW8iLCBzaXplb2YoYS0+bmFtZSkpOworCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQogewotCWlmIChhLT5pbmRleCAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gYS0+aW5kZXggPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCBmbWlfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBmbWlfZGV2aWNlIGZtaV91bml0OwotCi1zdGF0aWMgaW50IGZtaV9leGNsdXNpdmVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgZm1pX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJmZtaV91bml0LmluX3VzZSkgPyAtRUJVU1kgOiAwOwotfQotCi1zdGF0aWMgaW50IGZtaV9leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQljbGVhcl9iaXQoMCwgJmZtaV91bml0LmluX3VzZSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgZm1pX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IGZtaV9leGNsdXNpdmVfb3BlbiwKLQkucmVsZWFzZSAgICAgICAgPSBmbWlfZXhjbHVzaXZlX3JlbGVhc2UsCisJLm9wZW4gICAgICAgICAgID0gZm1pX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gZm1pX3JlbGVhc2UsCiAJLmlvY3RsCQk9IHZpZGVvX2lvY3RsMiwKIH07CiAKQEAgLTMxMywxMyArMjkyLDYgQEAKIAkudmlkaW9jX3NfY3RybCAgICAgID0gdmlkaW9jX3NfY3RybCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIGZtaV9yYWRpbyA9IHsKLQkubmFtZQkJPSAiU0YxNkZNeCByYWRpbyIsCi0JLmZvcHMgICAgICAgICAgID0gJmZtaV9mb3BzLAotCS5pb2N0bF9vcHMgCT0gJmZtaV9pb2N0bF9vcHMsCi0JLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eSwKLX07Ci0KIC8qIGxhZGlzOiB0aGlzIGlzIG15IGNhcmQuIGRvZXMgYW55IG90aGVyIHR5cGVzIGV4aXN0PyAqLwogc3RhdGljIHN0cnVjdCBpc2FwbnBfZGV2aWNlX2lkIGlkX3RhYmxlW10gX19kZXZpbml0ZGF0YSA9IHsKIAl7CUlTQVBOUF9BTllfSUQsIElTQVBOUF9BTllfSUQsCkBAIC0zNDQsNyArMzE2LDcgQEAKIAlpZiAocG5wX2RldmljZV9hdHRhY2goZGV2KSA8IDApCiAJCXJldHVybiAtRUFHQUlOOwogCWlmIChwbnBfYWN0aXZhdGVfZGV2KGRldikgPCAwKSB7Ci0JCXByaW50ayAoInJhZGlvLXNmMTZmbWk6IFBuUCBjb25maWd1cmUgZmFpbGVkIChvdXQgb2YgcmVzb3VyY2VzPylcbiIpOworCQlwcmludGsoS0VSTl9FUlIgInJhZGlvLXNmMTZmbWk6IFBuUCBjb25maWd1cmUgZmFpbGVkIChvdXQgb2YgcmVzb3VyY2VzPylcbiIpOwogCQlwbnBfZGV2aWNlX2RldGFjaChkZXYpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CkBAIC0zNTQsNTkgKzMyNiw3MiBAQAogCX0KIAogCWkgPSBwbnBfcG9ydF9zdGFydChkZXYsIDApOwotCXByaW50ayAoInJhZGlvLXNmMTZmbWk6IFBuUCByZXBvcnRzIGNhcmQgYXQgJSN4XG4iLCBpKTsKKwlwcmludGsoS0VSTl9JTkZPICJyYWRpby1zZjE2Zm1pOiBQblAgcmVwb3J0cyBjYXJkIGF0ICUjeFxuIiwgaSk7CiAKIAlyZXR1cm4gaTsKIH0KIAogc3RhdGljIGludCBfX2luaXQgZm1pX2luaXQodm9pZCkKIHsKKwlzdHJ1Y3QgZm1pICpmbWkgPSAmZm1pX2NhcmQ7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9ICZmbWktPnY0bDJfZGV2OworCWludCByZXM7CisKIAlpZiAoaW8gPCAwKQogCQlpbyA9IGlzYXBucF9mbWlfcHJvYmUoKTsKLQlpZiAoaW8gPCAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicmFkaW8tc2YxNmZtaTogTm8gUG5QIGNhcmQgZm91bmQuXG4iKTsKLQkJcmV0dXJuIGlvOworCXN0cmxjcHkodjRsMl9kZXYtPm5hbWUsICJzZjE2Zm1pIiwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSk7CisJZm1pLT5pbyA9IGlvOworCWlmIChmbWktPmlvIDwgMCkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgIk5vIFBuUCBjYXJkIGZvdW5kLlxuIik7CisJCXJldHVybiBmbWktPmlvOwogCX0KIAlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvLCAyLCAicmFkaW8tc2YxNmZtaSIpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicmFkaW8tc2YxNmZtaTogcG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLCBpbyk7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAicG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLCBmbWktPmlvKTsKIAkJcG5wX2RldmljZV9kZXRhY2goZGV2KTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQlmbWlfdW5pdC5wb3J0ID0gaW87Ci0JZm1pX3VuaXQuY3Vydm9sID0gMDsKLQlmbWlfdW5pdC5jdXJmcmVxID0gMDsKLQlmbWlfdW5pdC5mbGFncyA9IFY0TDJfVFVORVJfQ0FQX0xPVzsKLQl2aWRlb19zZXRfZHJ2ZGF0YSgmZm1pX3JhZGlvLCAmZm1pX3VuaXQpOworCXJlcyA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsIHY0bDJfZGV2KTsKKwlpZiAocmVzIDwgMCkgeworCQlyZWxlYXNlX3JlZ2lvbihmbWktPmlvLCAyKTsKKwkJcG5wX2RldmljZV9kZXRhY2goZGV2KTsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgdjRsMl9kZXZpY2VcbiIpOworCQlyZXR1cm4gcmVzOworCX0KIAotCW11dGV4X2luaXQoJmxvY2spOworCWZtaS0+ZmxhZ3MgPSBWNEwyX1RVTkVSX0NBUF9MT1c7CisJc3RybGNweShmbWktPnZkZXYubmFtZSwgdjRsMl9kZXYtPm5hbWUsIHNpemVvZihmbWktPnZkZXYubmFtZSkpOworCWZtaS0+dmRldi52NGwyX2RldiA9IHY0bDJfZGV2OworCWZtaS0+dmRldi5mb3BzID0gJmZtaV9mb3BzOworCWZtaS0+dmRldi5pb2N0bF9vcHMgPSAmZm1pX2lvY3RsX29wczsKKwlmbWktPnZkZXYucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5OworCXZpZGVvX3NldF9kcnZkYXRhKCZmbWktPnZkZXYsIGZtaSk7CiAKLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZmbWlfcmFkaW8sIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7Ci0JCXJlbGVhc2VfcmVnaW9uKGlvLCAyKTsKKwltdXRleF9pbml0KCZmbWktPmxvY2spOworCisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmZm1pLT52ZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgeworCQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKHY0bDJfZGV2KTsKKwkJcmVsZWFzZV9yZWdpb24oZm1pLT5pbywgMik7CisJCXBucF9kZXZpY2VfZGV0YWNoKGRldik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXByaW50ayhLRVJOX0lORk8gIlNGMTZGTXggcmFkaW8gY2FyZCBkcml2ZXIgYXQgMHgleFxuIiwgaW8pOworCXY0bDJfaW5mbyh2NGwyX2RldiwgImNhcmQgZHJpdmVyIGF0IDB4JXhcbiIsIGZtaS0+aW8pOwogCS8qIG11dGUgY2FyZCAtIHByZXZlbnRzIG5vaXN5IGJvb3R1cHMgKi8KLQlmbWlfbXV0ZShpbyk7CisJZm1pX211dGUoZm1pKTsKIAlyZXR1cm4gMDsKIH0KIAotTU9EVUxFX0FVVEhPUigiUGV0ciBWYW5kcm92ZWMsIHZhbmRyb3ZlQHZjLmN2dXQuY3ogYW5kIE0uIEtpcmt3b29kIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgU0YxNk1JIHJhZGlvLiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1tb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIFNGMTZNSSBjYXJkICgweDI4NCBvciAweDM4NCkiKTsKLW1vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKLQotc3RhdGljIHZvaWQgX19leGl0IGZtaV9jbGVhbnVwX21vZHVsZSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IGZtaV9leGl0KHZvaWQpCiB7Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmZtaV9yYWRpbyk7Ci0JcmVsZWFzZV9yZWdpb24oaW8sIDIpOworCXN0cnVjdCBmbWkgKmZtaSA9ICZmbWlfY2FyZDsKKworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZmbWktPnZkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmZtaS0+djRsMl9kZXYpOworCXJlbGVhc2VfcmVnaW9uKGZtaS0+aW8sIDIpOwogCWlmIChkZXYpCiAJCXBucF9kZXZpY2VfZGV0YWNoKGRldik7CiB9CiAKIG1vZHVsZV9pbml0KGZtaV9pbml0KTsKLW1vZHVsZV9leGl0KGZtaV9jbGVhbnVwX21vZHVsZSk7Cittb2R1bGVfZXhpdChmbWlfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbXIyLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNmMTZmbXIyLmMKaW5kZXggOTJmMTdhMy4uMGJhOWQ4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zZjE2Zm1yMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2YxNmZtcjIuYwpAQCAtMTgsNDAgKzE4LDI4IEBACiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgkJLyogSW5pdGRhdGEJCQkqLwogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiByZXF1ZXN0X3JlZ2lvbgkJKi8KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgkvKiB1ZGVsYXkJCQkqLwotI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgkvKiBjb3B5IHRvL2Zyb20gdXNlcgkJKi8KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4JLyoga2VybmVsIHJhZGlvIHN0cnVjdHMJCSovCi0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLQotc3RhdGljIHN0cnVjdCBtdXRleCBsb2NrOwotCiAjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KKyNpbmNsdWRlIDxsaW51eC9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wCQkJKi8KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKworTU9EVUxFX0FVVEhPUigiWmlnbGlvIEZyZWRpYW5vLCBmcmVkZHk3N0BhbmdlbGZpcmUuY29tIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgU0YxNkZNUjIgcmFkaW8uIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKK3N0YXRpYyBpbnQgaW8gPSAweDM4NDsKK3N0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKKworbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDApOworTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIHRoZSBTRjE2Rk1SMiBjYXJkIChzaG91bGQgYmUgMHgzODQsIGlmIGRvIG5vdCB3b3JrIHRyeSAweDI4NCkiKTsKK21vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKKwogI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsMCwyKQogCiAjZGVmaW5lIEFVRF9WT0xfSU5ERVggMQogCi1zdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7Ci0JewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCi0JCS5uYW1lICAgICAgICAgID0gIk11dGUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JfSwKLQlbQVVEX1ZPTF9JTkRFWF0gPSB7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fVk9MVU1FLAotCQkubmFtZSAgICAgICAgICA9ICJWb2x1bWUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMTUsCi0JCS5zdGVwICAgICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAwLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JfQotfTsKLQogI3VuZGVmIERFQlVHCiAvLyNkZWZpbmUgREVCVUcgMQogCkBAIC02MiwxNTYgKzUwLDE2MCBAQAogI2VuZGlmCiAKIC8qIHRoaXMgc2hvdWxkIGJlIHN0YXRpYyB2YXJzIGZvciBtb2R1bGUgc2l6ZSAqLwotc3RydWN0IGZtcjJfZGV2aWNlCitzdHJ1Y3QgZm1yMgogewotCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwotCWludCBwb3J0OworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CisJc3RydWN0IG11dGV4IGxvY2s7CisJaW50IGlvOwogCWludCBjdXJ2b2w7IC8qIDAtMTUgKi8KIAlpbnQgbXV0ZTsKIAlpbnQgc3RlcmVvOyAvKiBjYXJkIGlzIHByb2R1Y2luZyBzdGVyZW8gYXVkaW8gKi8KIAl1bnNpZ25lZCBsb25nIGN1cmZyZXE7IC8qIGZyZXEgaW4ga0h6ICovCiAJaW50IGNhcmRfdHlwZTsKLQlfX3UzMiBmbGFnczsKKwl1MzIgZmxhZ3M7CiB9OwogCi1zdGF0aWMgaW50IGlvID0gMHgzODQ7Ci1zdGF0aWMgaW50IHJhZGlvX25yID0gLTE7CitzdGF0aWMgc3RydWN0IGZtcjIgZm1yMl9jYXJkOwogCiAvKiBodyBwcmVjaXNpb24gaXMgMTIuNSBrSHoKICAqIEl0IGlzIG9ubHkgdXNlZnVsIHRvIGdpdmUgZnJlcSBpbiBpbnRlcnZhbGwgb2YgMjAwICg9MC4wMTI1TWh6KSwKICAqIG90aGVyIGJpdHMgd2lsbCBiZSB0cnVuY2F0ZWQKICAqLwotI2RlZmluZSBSU0YxNl9FTkNPREUoeCkJKCh4KS8yMDArODU2KQotI2RlZmluZSBSU0YxNl9NSU5GUkVRIDg3KjE2MDAwCi0jZGVmaW5lIFJTRjE2X01BWEZSRVEgMTA4KjE2MDAwCisjZGVmaW5lIFJTRjE2X0VOQ09ERSh4KQkoKHgpIC8gMjAwICsgODU2KQorI2RlZmluZSBSU0YxNl9NSU5GUkVRICg4NyAqIDE2MDAwKQorI2RlZmluZSBSU0YxNl9NQVhGUkVRICgxMDggKiAxNjAwMCkKIAotc3RhdGljIGlubGluZSB2b2lkIHdhaXQoaW50IG4saW50IHBvcnQpCitzdGF0aWMgaW5saW5lIHZvaWQgd2FpdChpbnQgbiwgaW50IGlvKQogewotCWZvciAoO247LS1uKSBpbmIocG9ydCk7CisJZm9yICg7IG47IC0tbikKKwkJaW5iKGlvKTsKIH0KIAotc3RhdGljIHZvaWQgb3V0Yml0cyhpbnQgYml0cywgdW5zaWduZWQgaW50IGRhdGEsIGludCBuV2FpdCwgaW50IHBvcnQpCitzdGF0aWMgdm9pZCBvdXRiaXRzKGludCBiaXRzLCB1bnNpZ25lZCBpbnQgZGF0YSwgaW50IG5XYWl0LCBpbnQgaW8pCiB7CiAJaW50IGJpdDsKLQlmb3IoOy0tYml0cz49MDspIHsKLQkJYml0ID0gKGRhdGE+PmJpdHMpICYgMTsKLQkJb3V0YihiaXQscG9ydCk7Ci0JCXdhaXQobldhaXQscG9ydCk7Ci0JCW91dGIoYml0fDIscG9ydCk7Ci0JCXdhaXQobldhaXQscG9ydCk7Ci0JCW91dGIoYml0LHBvcnQpOwotCQl3YWl0KG5XYWl0LHBvcnQpOworCisJZm9yICg7IC0tYml0cyA+PSAwOykgeworCQliaXQgPSAoZGF0YSA+PiBiaXRzKSAmIDE7CisJCW91dGIoYml0LCBpbyk7CisJCXdhaXQobldhaXQsIGlvKTsKKwkJb3V0YihiaXQgfCAyLCBpbyk7CisJCXdhaXQobldhaXQsIGlvKTsKKwkJb3V0YihiaXQsIGlvKTsKKwkJd2FpdChuV2FpdCwgaW8pOwogCX0KIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGZtcjJfbXV0ZShpbnQgcG9ydCkKK3N0YXRpYyBpbmxpbmUgdm9pZCBmbXIyX211dGUoaW50IGlvKQogewotCW91dGIoMHgwMCwgcG9ydCk7Ci0Jd2FpdCg0LHBvcnQpOworCW91dGIoMHgwMCwgaW8pOworCXdhaXQoNCwgaW8pOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgZm1yMl91bm11dGUoaW50IHBvcnQpCitzdGF0aWMgaW5saW5lIHZvaWQgZm1yMl91bm11dGUoaW50IGlvKQogewotCW91dGIoMHgwNCwgcG9ydCk7Ci0Jd2FpdCg0LHBvcnQpOworCW91dGIoMHgwNCwgaW8pOworCXdhaXQoNCwgaW8pOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBmbXIyX3N0ZXJlb19tb2RlKGludCBwb3J0KQorc3RhdGljIGlubGluZSBpbnQgZm1yMl9zdGVyZW9fbW9kZShpbnQgaW8pCiB7Ci0JaW50IG4gPSBpbmIocG9ydCk7Ci0Jb3V0Yig2LHBvcnQpOwotCWluYihwb3J0KTsKLQluID0gKChuPj4zKSYxKV4xOworCWludCBuID0gaW5iKGlvKTsKKworCW91dGIoNiwgaW8pOworCWluYihpbyk7CisJbiA9ICgobiA+PiAzKSAmIDEpIF4gMTsKIAlkZWJ1Z19wcmludCgoS0VSTl9ERUJVRyAic3RlcmVvOiAlZFxuIiwgbikpOwogCXJldHVybiBuOwogfQogCi1zdGF0aWMgaW50IGZtcjJfcHJvZHVjdF9pbmZvKHN0cnVjdCBmbXIyX2RldmljZSAqZGV2KQorc3RhdGljIGludCBmbXIyX3Byb2R1Y3RfaW5mbyhzdHJ1Y3QgZm1yMiAqZGV2KQogewotCWludCBuID0gaW5iKGRldi0+cG9ydCk7CisJaW50IG4gPSBpbmIoZGV2LT5pbyk7CisKIAluICY9IDB4QzE7Ci0JaWYgKG4gPT0gMCkKLQl7CisJaWYgKG4gPT0gMCkgewogCQkvKiB0aGlzIHNob3VsZCBzdXBwb3J0IHZvbHVtZSBzZXQgKi8KIAkJZGV2LT5jYXJkX3R5cGUgPSAxMjsKIAkJcmV0dXJuIDA7CiAJfQogCS8qIG5vdCB2b2x1bWUgKG1pbmUgaXMgMTEpICovCi0JZGV2LT5jYXJkX3R5cGUgPSAobj09MTI4KT8xMTowOworCWRldi0+Y2FyZF90eXBlID0gKG4gPT0gMTI4KSA/IDExIDogMDsKIAlyZXR1cm4gbjsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgZm1yMl9nZXRzaWdzdHIoc3RydWN0IGZtcjJfZGV2aWNlICpkZXYpCitzdGF0aWMgaW5saW5lIGludCBmbXIyX2dldHNpZ3N0cihzdHJ1Y3QgZm1yMiAqZGV2KQogewotCS8qICEhISB3b3JrIG9ubHkgaWYgc2Nhbm5pbmcgZnJlcSAqLwotCWludCBwb3J0ID0gZGV2LT5wb3J0LCByZXMgPSAweGZmZmY7Ci0Jb3V0Yig1LHBvcnQpOwotCXdhaXQoNCxwb3J0KTsKLQlpZiAoIShpbmIocG9ydCkmMSkpIHJlcyA9IDA7CisJLyogISEhIHdvcmtzIG9ubHkgaWYgc2Nhbm5pbmcgZnJlcSAqLworCWludCByZXMgPSAweGZmZmY7CisKKwlvdXRiKDUsIGRldi0+aW8pOworCXdhaXQoNCwgZGV2LT5pbyk7CisJaWYgKCEoaW5iKGRldi0+aW8pICYgMSkpCisJCXJlcyA9IDA7CiAJZGVidWdfcHJpbnQoKEtFUk5fREVCVUcgInNpZ25hbDogJWRcbiIsIHJlcykpOwogCXJldHVybiByZXM7CiB9CiAKIC8qIHNldCBmcmVxdWVuY3kgYW5kIHVubXV0ZSBjYXJkICovCi1zdGF0aWMgaW50IGZtcjJfc2V0ZnJlcShzdHJ1Y3QgZm1yMl9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgZm1yMl9zZXRmcmVxKHN0cnVjdCBmbXIyICpkZXYpCiB7Ci0JaW50IHBvcnQgPSBkZXYtPnBvcnQ7CiAJdW5zaWduZWQgbG9uZyBmcmVxID0gZGV2LT5jdXJmcmVxOwogCi0JZm1yMl9tdXRlKHBvcnQpOworCWZtcjJfbXV0ZShkZXYtPmlvKTsKIAogCS8qIDB4NDIgZm9yIG1vbm8gb3V0cHV0CiAJICogMHgxMDIgZm9yd2FyZCBzY2FubmluZwogCSAqIDB4MTgyIHNjYW5zaW9uZSBhdmFudGkKIAkgKi8KLQlvdXRiaXRzKDksMHgyLDMscG9ydCk7Ci0Jb3V0Yml0cygxNixSU0YxNl9FTkNPREUoZnJlcSksMixwb3J0KTsKKwlvdXRiaXRzKDksIDB4MiwgMywgZGV2LT5pbyk7CisJb3V0Yml0cygxNiwgUlNGMTZfRU5DT0RFKGZyZXEpLCAyLCBkZXYtPmlvKTsKIAotCWZtcjJfdW5tdXRlKHBvcnQpOworCWZtcjJfdW5tdXRlKGRldi0+aW8pOwogCiAJLyogd2FpdCAwLjExIHNlYyAqLwogCW1zbGVlcCgxMTApOwogCiAJLyogTk9URSBpZiBtdXRlIHRoaXMgc3RvcCByYWRpbwogCSAgIHlvdSBtdXN0IHNldCBmcmVxIG9uIHVubXV0ZSAqLwotCWRldi0+c3RlcmVvID0gZm1yMl9zdGVyZW9fbW9kZShwb3J0KTsKKwlkZXYtPnN0ZXJlbyA9IGZtcjJfc3RlcmVvX21vZGUoZGV2LT5pbyk7CiAJcmV0dXJuIDA7CiB9CiAKIC8qICEhISBub3QgdGVzdGVkLCBpbiBteSBjYXJkIHRoaXMgZG9lcyd0IHdvcmsgISEhICovCi1zdGF0aWMgaW50IGZtcjJfc2V0dm9sdW1lKHN0cnVjdCBmbXIyX2RldmljZSAqZGV2KQorc3RhdGljIGludCBmbXIyX3NldHZvbHVtZShzdHJ1Y3QgZm1yMiAqZGV2KQogewogCWludCB2b2xbMTZdID0geyAweDAyMSwgMHgwODQsIDB4MDkwLCAweDEwNCwKIAkJCTB4MTEwLCAweDIwNCwgMHgyMTAsIDB4NDAyLAogCQkJMHg0MDQsIDB4NDA4LCAweDQxMCwgMHg4MDEsCiAJCQkweDgwMiwgMHg4MDQsIDB4ODA4LCAweDgxMCB9OwotCWludCBpLCBhLCBwb3J0ID0gZGV2LT5wb3J0OworCWludCBpLCBhOwogCWludCBuID0gdm9sW2Rldi0+Y3Vydm9sICYgMHgwZl07CiAKIAlpZiAoZGV2LT5jYXJkX3R5cGUgIT0gMTEpCiAJCXJldHVybiAxOwogCiAJZm9yIChpID0gMTI7IC0taSA+PSAwOyApIHsKLQkJYSA9ICgobiA+PiBpKSAmIDEpIDw8IDY7IC8qIGlmIChhPTApIGE9IDA7IGVsc2UgYT0gMHg0MDsgKi8KLQkJb3V0YihhIHwgNCwgcG9ydCk7Ci0JCXdhaXQoNCwgcG9ydCk7Ci0JCW91dGIoYSB8IDB4MjQsIHBvcnQpOwotCQl3YWl0KDQsIHBvcnQpOwotCQlvdXRiKGEgfCA0LCBwb3J0KTsKLQkJd2FpdCg0LCBwb3J0KTsKKwkJYSA9ICgobiA+PiBpKSAmIDEpIDw8IDY7IC8qIGlmIChhPT0wKSBhID0gMDsgZWxzZSBhID0gMHg0MDsgKi8KKwkJb3V0YihhIHwgNCwgZGV2LT5pbyk7CisJCXdhaXQoNCwgZGV2LT5pbyk7CisJCW91dGIoYSB8IDB4MjQsIGRldi0+aW8pOworCQl3YWl0KDQsIGRldi0+aW8pOworCQlvdXRiKGEgfCA0LCBkZXYtPmlvKTsKKwkJd2FpdCg0LCBkZXYtPmlvKTsKIAl9CiAJZm9yIChpID0gNjsgLS1pID49IDA7ICkgewogCQlhID0gKCgweDE4ID4+IGkpICYgMSkgPDwgNjsKLQkJb3V0YihhIHwgNCwgcG9ydCk7Ci0JCXdhaXQoNCxwb3J0KTsKLQkJb3V0YihhIHwgMHgyNCwgcG9ydCk7Ci0JCXdhaXQoNCxwb3J0KTsKLQkJb3V0YihhfDQsIHBvcnQpOwotCQl3YWl0KDQscG9ydCk7CisJCW91dGIoYSB8IDQsIGRldi0+aW8pOworCQl3YWl0KDQsIGRldi0+aW8pOworCQlvdXRiKGEgfCAweDI0LCBkZXYtPmlvKTsKKwkJd2FpdCg0LCBkZXYtPmlvKTsKKwkJb3V0YihhIHwgNCwgZGV2LT5pbyk7CisJCXdhaXQoNCwgZGV2LT5pbyk7CiAJfQotCXdhaXQoNCwgcG9ydCk7Ci0Jb3V0YigweDE0LCBwb3J0KTsKLQorCXdhaXQoNCwgZGV2LT5pbyk7CisJb3V0YigweDE0LCBkZXYtPmlvKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjIwLDkgKzIxMiw5IEBACiB7CiAJc3RybGNweSh2LT5kcml2ZXIsICJyYWRpby1zZjE2Zm1yMiIsIHNpemVvZih2LT5kcml2ZXIpKTsKIAlzdHJsY3B5KHYtPmNhcmQsICJTRjE2LUZNUjIgcmFkaW8iLCBzaXplb2Yodi0+Y2FyZCkpOwotCXNwcmludGYodi0+YnVzX2luZm8sICJJU0EiKTsKKwlzdHJsY3B5KHYtPmJ1c19pbmZvLCAiSVNBIiwgc2l6ZW9mKHYtPmJ1c19pbmZvKSk7CiAJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047Ci0Jdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9SQURJTzsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjMwLDU0ICsyMjIsNTIgQEAKIAkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7CiAJaW50IG11bHQ7Ci0Jc3RydWN0IGZtcjJfZGV2aWNlICpmbXIyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgZm1yMiAqZm1yMiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKKwlzdHJsY3B5KHYtPm5hbWUsICJGTSIsIHNpemVvZih2LT5uYW1lKSk7CiAJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAKIAltdWx0ID0gKGZtcjItPmZsYWdzICYgVjRMMl9UVU5FUl9DQVBfTE9XKSA/IDEgOiAxMDAwOwotCXYtPnJhbmdlbG93ID0gUlNGMTZfTUlORlJFUS9tdWx0OwotCXYtPnJhbmdlaGlnaCA9IFJTRjE2X01BWEZSRVEvbXVsdDsKKwl2LT5yYW5nZWxvdyA9IFJTRjE2X01JTkZSRVEgLyBtdWx0OworCXYtPnJhbmdlaGlnaCA9IFJTRjE2X01BWEZSRVEgLyBtdWx0OwogCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PIHwgVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKIAl2LT5jYXBhYmlsaXR5ID0gZm1yMi0+ZmxhZ3MmVjRMMl9UVU5FUl9DQVBfTE9XOwogCXYtPmF1ZG1vZGUgPSBmbXIyLT5zdGVyZW8gPyBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgogCQkJCVY0TDJfVFVORVJfTU9ERV9NT05POwotCW11dGV4X2xvY2soJmxvY2spOworCW11dGV4X2xvY2soJmZtcjItPmxvY2spOwogCXYtPnNpZ25hbCA9IGZtcjJfZ2V0c2lnc3RyKGZtcjIpOwotCW11dGV4X3VubG9jaygmbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZmbXIyLT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7Ci0JaWYgKHYtPmluZGV4ID4gMCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIDA7CisJcmV0dXJuIHYtPmluZGV4ID8gLUVJTlZBTCA6IDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7Ci0Jc3RydWN0IGZtcjJfZGV2aWNlICpmbXIyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgZm1yMiAqZm1yMiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlpZiAoIShmbXIyLT5mbGFncyAmIFY0TDJfVFVORVJfQ0FQX0xPVykpCiAJCWYtPmZyZXF1ZW5jeSAqPSAxMDAwOwogCWlmIChmLT5mcmVxdWVuY3kgPCBSU0YxNl9NSU5GUkVRIHx8Ci0JCQlmLT5mcmVxdWVuY3kgPiBSU0YxNl9NQVhGUkVRICkKKwkJCWYtPmZyZXF1ZW5jeSA+IFJTRjE2X01BWEZSRVEpCiAJCXJldHVybiAtRUlOVkFMOwotCS8qcm91bmRpbmcgaW4gc3RlcHMgb2YgMjAwIHRvIG1hdGNoIHRoIGZyZXEKLQl0aGF0IHdpbGwgYmUgdXNlZCAqLwotCWZtcjItPmN1cmZyZXEgPSAoZi0+ZnJlcXVlbmN5LzIwMCkqMjAwOworCS8qIHJvdW5kaW5nIGluIHN0ZXBzIG9mIDIwMCB0byBtYXRjaCB0aGUgZnJlcQorCSAgIHRoYXQgd2lsbCBiZSB1c2VkICovCisJZm1yMi0+Y3VyZnJlcSA9IChmLT5mcmVxdWVuY3kgLyAyMDApICogMjAwOwogCiAJLyogc2V0IGNhcmQgZnJlcSAoaWYgbm90IG11dGVkKSAqLwogCWlmIChmbXIyLT5jdXJ2b2wgJiYgIWZtcjItPm11dGUpIHsKLQkJbXV0ZXhfbG9jaygmbG9jayk7CisJCW11dGV4X2xvY2soJmZtcjItPmxvY2spOwogCQlmbXIyX3NldGZyZXEoZm1yMik7Ci0JCW11dGV4X3VubG9jaygmbG9jayk7CisJCW11dGV4X3VubG9jaygmZm1yMi0+bG9jayk7CiAJfQogCXJldHVybiAwOwogfQpAQCAtMjg1LDcgKzI3NSw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCBmbXIyX2RldmljZSAqZm1yMiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IGZtcjIgKmZtcjIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJZi0+ZnJlcXVlbmN5ID0gZm1yMi0+Y3VyZnJlcTsKQEAgLTI5NywxMyArMjg3LDE2IEBACiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0JaW50IGk7CisJc3RydWN0IGZtcjIgKmZtcjIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW9fcWN0cmwpOyBpKyspIHsKLQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gcmFkaW9fcWN0cmxbaV0uaWQpIHsKLQkJCW1lbWNweShxYywgJnJhZGlvX3FjdHJsW2ldLCBzaXplb2YoKnFjKSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDEpOworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQkvKiBPbmx5IGNhcmRfdHlwZSA9PSAxMSBpbXBsZW1lbnRzIHZvbHVtZSAqLworCQlpZiAoZm1yMi0+Y2FyZF90eXBlID09IDExKQorCQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxNSwgMSwgMCk7CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMCk7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQpAQCAtMzExLDcgKzMwNCw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IGZtcjJfZGV2aWNlICpmbXIyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgZm1yMiAqZm1yMiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMzI3LDE4ICszMjAsMTQgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgZm1yMl9kZXZpY2UgKmZtcjIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCBmbXIyICpmbXIyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CiAJCWZtcjItPm11dGUgPSBjdHJsLT52YWx1ZTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCWlmIChjdHJsLT52YWx1ZSA+IHJhZGlvX3FjdHJsW0FVRF9WT0xfSU5ERVhdLm1heGltdW0pCi0JCQlmbXIyLT5jdXJ2b2wgPSByYWRpb19xY3RybFtBVURfVk9MX0lOREVYXS5tYXhpbXVtOwotCQllbHNlCi0JCQlmbXIyLT5jdXJ2b2wgPSBjdHJsLT52YWx1ZTsKLQorCQlmbXIyLT5jdXJ2b2wgPSBjdHJsLT52YWx1ZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0zNTEsMjUgKzM0MCwxNCBAQAogCQlwcmludGsoS0VSTl9ERUJVRyAibXV0ZVxuIik7CiAjZW5kaWYKIAotCW11dGV4X2xvY2soJmxvY2spOworCW11dGV4X2xvY2soJmZtcjItPmxvY2spOwogCWlmIChmbXIyLT5jdXJ2b2wgJiYgIWZtcjItPm11dGUpIHsKIAkJZm1yMl9zZXR2b2x1bWUoZm1yMik7CiAJCS8qIFNldCBmcmVxdWVuY3kgYW5kIHVubXV0ZSBjYXJkICovCiAJCWZtcjJfc2V0ZnJlcShmbXIyKTsKIAl9IGVsc2UKLQkJZm1yMl9tdXRlKGZtcjItPnBvcnQpOwotCW11dGV4X3VubG9jaygmbG9jayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQotewotCWlmIChhLT5pbmRleCA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3RyY3B5KGEtPm5hbWUsICJSYWRpbyIpOwotCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CisJCWZtcjJfbXV0ZShmbXIyLT5pbyk7CisJbXV0ZXhfdW5sb2NrKCZmbXIyLT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzgxLDM2ICszNTksMzggQEAKIAogc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCiB7Ci0JaWYgKGkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJYS0+aW5kZXggPSAwOworCXN0cmxjcHkoYS0+bmFtZSwgIlJhZGlvIiwgc2l6ZW9mKGEtPm5hbWUpKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKIHsKLQlpZiAoYS0+aW5kZXggIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGEtPmluZGV4ID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgZm1yMl9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGZtcjJfZGV2aWNlIGZtcjJfdW5pdDsKLQotc3RhdGljIGludCBmbXIyX2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCBmbXIyX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCiB7Ci0JcmV0dXJuIHRlc3RfYW5kX3NldF9iaXQoMCwgJmZtcjJfdW5pdC5pbl91c2UpID8gLUVCVVNZIDogMDsKLX0KLQotc3RhdGljIGludCBmbXIyX2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQotewotCWNsZWFyX2JpdCgwLCAmZm1yMl91bml0LmluX3VzZSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgZm1yMl9mb3BzID0gewogCS5vd25lciAgICAgICAgICA9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IGZtcjJfZXhjbHVzaXZlX29wZW4sCi0JLnJlbGVhc2UgICAgICAgID0gZm1yMl9leGNsdXNpdmVfcmVsZWFzZSwKKwkub3BlbiAgICAgICAgICAgPSBmbXIyX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gZm1yMl9yZWxlYXNlLAogCS5pb2N0bCAgICAgICAgICA9IHZpZGVvX2lvY3RsMiwKIH07CiAKQEAgLTQyOSw2NyArNDA5LDY0IEBACiAJLnZpZGlvY19zX2N0cmwgICAgICA9IHZpZGlvY19zX2N0cmwsCiB9OwogCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBmbXIyX3JhZGlvID0gewotCS5uYW1lCQk9ICJTRjE2Rk1SMiByYWRpbyIsCi0JLmZvcHMJCT0gJmZtcjJfZm9wcywKLQkuaW9jdGxfb3BzIAk9ICZmbXIyX2lvY3RsX29wcywKLQkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAotfTsKLQogc3RhdGljIGludCBfX2luaXQgZm1yMl9pbml0KHZvaWQpCiB7Ci0JZm1yMl91bml0LnBvcnQgPSBpbzsKLQlmbXIyX3VuaXQuY3Vydm9sID0gMDsKLQlmbXIyX3VuaXQubXV0ZSA9IDA7Ci0JZm1yMl91bml0LmN1cmZyZXEgPSAwOwotCWZtcjJfdW5pdC5zdGVyZW8gPSAxOwotCWZtcjJfdW5pdC5mbGFncyA9IFY0TDJfVFVORVJfQ0FQX0xPVzsKLQlmbXIyX3VuaXQuY2FyZF90eXBlID0gMDsKLQl2aWRlb19zZXRfZHJ2ZGF0YSgmZm1yMl9yYWRpbywgJmZtcjJfdW5pdCk7CisJc3RydWN0IGZtcjIgKmZtcjIgPSAmZm1yMl9jYXJkOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmZm1yMi0+djRsMl9kZXY7CisJaW50IHJlczsKIAotCW11dGV4X2luaXQoJmxvY2spOworCXN0cmxjcHkodjRsMl9kZXYtPm5hbWUsICJzZjE2Zm1yMiIsIHNpemVvZih2NGwyX2Rldi0+bmFtZSkpOworCWZtcjItPmlvID0gaW87CisJZm1yMi0+c3RlcmVvID0gMTsKKwlmbXIyLT5mbGFncyA9IFY0TDJfVFVORVJfQ0FQX0xPVzsKKwltdXRleF9pbml0KCZmbXIyLT5sb2NrKTsKIAotCWlmICghcmVxdWVzdF9yZWdpb24oaW8sIDIsICJzZjE2Zm1yMiIpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicmFkaW8tc2YxNmZtcjI6IHJlcXVlc3RfcmVnaW9uIGZhaWxlZCFcbiIpOworCWlmICghcmVxdWVzdF9yZWdpb24oZm1yMi0+aW8sIDIsICJzZjE2Zm1yMiIpKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAicmVxdWVzdF9yZWdpb24gZmFpbGVkIVxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmZm1yMl9yYWRpbywgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKLQkJcmVsZWFzZV9yZWdpb24oaW8sIDIpOworCXJlcyA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsIHY0bDJfZGV2KTsKKwlpZiAocmVzIDwgMCkgeworCQlyZWxlYXNlX3JlZ2lvbihmbXIyLT5pbywgMik7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHY0bDJfZGV2aWNlXG4iKTsKKwkJcmV0dXJuIHJlczsKKwl9CisKKwlzdHJsY3B5KGZtcjItPnZkZXYubmFtZSwgdjRsMl9kZXYtPm5hbWUsIHNpemVvZihmbXIyLT52ZGV2Lm5hbWUpKTsKKwlmbXIyLT52ZGV2LnY0bDJfZGV2ID0gdjRsMl9kZXY7CisJZm1yMi0+dmRldi5mb3BzID0gJmZtcjJfZm9wczsKKwlmbXIyLT52ZGV2LmlvY3RsX29wcyA9ICZmbXIyX2lvY3RsX29wczsKKwlmbXIyLT52ZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmZm1yMi0+dmRldiwgZm1yMik7CisKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZmbXIyLT52ZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgeworCQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKHY0bDJfZGV2KTsKKwkJcmVsZWFzZV9yZWdpb24oZm1yMi0+aW8sIDIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJTRjE2Rk1SMiByYWRpbyBjYXJkIGRyaXZlciBhdCAweCV4LlxuIiwgaW8pOworCXY0bDJfaW5mbyh2NGwyX2RldiwgIlNGMTZGTVIyIHJhZGlvIGNhcmQgZHJpdmVyIGF0IDB4JXguXG4iLCBmbXIyLT5pbyk7CiAJLyogbXV0ZSBjYXJkIC0gcHJldmVudHMgbm9pc3kgYm9vdHVwcyAqLwotCW11dGV4X2xvY2soJmxvY2spOwotCWZtcjJfbXV0ZShpbyk7Ci0JZm1yMl9wcm9kdWN0X2luZm8oJmZtcjJfdW5pdCk7Ci0JbXV0ZXhfdW5sb2NrKCZsb2NrKTsKLQlkZWJ1Z19wcmludCgoS0VSTl9ERUJVRyAiY2FyZF90eXBlICVkXG4iLCBmbXIyX3VuaXQuY2FyZF90eXBlKSk7Ci0KLQkvKiBPbmx5IGNhcmRfdHlwZSA9PSAxMSBpbXBsZW1lbnRzIHZvbHVtZSAqLwotCWlmIChmbXIyX3VuaXQuY2FyZF90eXBlICE9IDExKQotCQlyYWRpb19xY3RybFtBVURfVk9MX0lOREVYXS5tYXhpbXVtID0gMTsKLQorCW11dGV4X2xvY2soJmZtcjItPmxvY2spOworCWZtcjJfbXV0ZShmbXIyLT5pbyk7CisJZm1yMl9wcm9kdWN0X2luZm8oZm1yMik7CisJbXV0ZXhfdW5sb2NrKCZmbXIyLT5sb2NrKTsKKwlkZWJ1Z19wcmludCgoS0VSTl9ERUJVRyAiY2FyZF90eXBlICVkXG4iLCBmbXIyLT5jYXJkX3R5cGUpKTsKIAlyZXR1cm4gMDsKIH0KIAotTU9EVUxFX0FVVEhPUigiWmlnbGlvIEZyZWRpYW5vLCBmcmVkZHk3N0BhbmdlbGZpcmUuY29tIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgU0YxNkZNUjIgcmFkaW8uIik7Ci1NT0RVTEVfTElDRU5TRSgiR1BMIik7Ci0KLW1vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgU0YxNkZNUjIgY2FyZCAoc2hvdWxkIGJlIDB4Mzg0LCBpZiBkbyBub3Qgd29yayB0cnkgMHgyODQpIik7Ci1tb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBmbXIyX2NsZWFudXBfbW9kdWxlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgZm1yMl9leGl0KHZvaWQpCiB7Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmZtcjJfcmFkaW8pOwotCXJlbGVhc2VfcmVnaW9uKGlvLDIpOworCXN0cnVjdCBmbXIyICpmbXIyID0gJmZtcjJfY2FyZDsKKworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZmbXIyLT52ZGV2KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZmbXIyLT52NGwyX2Rldik7CisJcmVsZWFzZV9yZWdpb24oZm1yMi0+aW8sIDIpOwogfQogCiBtb2R1bGVfaW5pdChmbXIyX2luaXQpOwotbW9kdWxlX2V4aXQoZm1yMl9jbGVhbnVwX21vZHVsZSk7Cittb2R1bGVfZXhpdChmbXIyX2V4aXQpOwogCiAjaWZuZGVmIE1PRFVMRQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDcweC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby1zaTQ3MHguYwppbmRleCA0ZGZlZDZhLi43MTNlMjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXNpNDcweC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tc2k0NzB4LmMKQEAgLTUsOCArNSw5IEBACiAgKiAgIC0gU2lsaWNvbiBMYWJzIFVTQiBGTSBSYWRpbyBSZWZlcmVuY2UgRGVzaWduCiAgKiAgIC0gQURTL1RlY2ggRk0gUmFkaW8gUmVjZWl2ZXIgKGZvcm1lcmx5IEluc3RhbnQgRk0gTXVzaWMpIChSRFgtMTU1LUVGKQogICogICAtIEtXb3JsZCBVU0IgRk0gUmFkaW8gU25hcE11c2ljIE1vYmlsZSA3MDAgKEZNNzAwKQorICogICAtIFNhbmVpIEVsZWN0cmljLCBJbmMuIEZNIFVTQiBSYWRpbyAoc29sZCBhcyBEZWFsRXh0cmVtZS5jb20gUENlYXIpCiAgKgotICogIENvcHlyaWdodCAoYykgMjAwOCBUb2JpYXMgTG9yZW56IDx0b2JpYXMubG9yZW56QGdteC5uZXQ+CisgKiAgQ29weXJpZ2h0IChjKSAyMDA5IFRvYmlhcyBMb3JlbnogPHRvYmlhcy5sb3JlbnpAZ214Lm5ldD4KICAqCiAgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTI5LDcgKzMwLDcgQEAKICAqIDIwMDgtMDEtMTIJVG9iaWFzIExvcmVueiA8dG9iaWFzLmxvcmVuekBnbXgubmV0PgogICoJCVZlcnNpb24gMS4wLjAKICAqCQktIEZpcnN0IHdvcmtpbmcgdmVyc2lvbgotICogMjAwOC0wMS0xMyAgIFRvYmlhcyBMb3JlbnogPHRvYmlhcy5sb3JlbnpAZ214Lm5ldD4KKyAqIDIwMDgtMDEtMTMJVG9iaWFzIExvcmVueiA8dG9iaWFzLmxvcmVuekBnbXgubmV0PgogICoJCVZlcnNpb24gMS4wLjEKICAqCQktIEltcHJvdmVkIGVycm9yIGhhbmRsaW5nLCBldmVyeSBmdW5jdGlvbiBub3cgcmV0dXJucyBlcnJubwogICoJCS0gSW1wcm92ZWQgbXVsdGkgdXNlciBhY2Nlc3MgKHN0YXJ0L211dGUvc3RvcCkKQEAgLTEwNCw2ICsxMDUsNyBAQAogICogMjAwOS0wMS0zMQlSaWNrIEJyb25zb24gPHJpY2tAZWZuLm9yZz4KICAqCQlUb2JpYXMgTG9yZW56IDx0b2JpYXMubG9yZW56QGdteC5uZXQ+CiAgKgkJLSBhZGQgTEVEIHN0YXR1cyBvdXRwdXQKKyAqCQktIGdldCBIVy9TVyB2ZXJzaW9uIGZyb20gc2NyYXRjaHBhZAogICoKICAqIFRvRG86CiAgKiAtIGFkZCBmaXJtd2FyZSBkb3dubG9hZC91cGRhdGUgc3VwcG9ydApAQCAtMTE0LDEwICsxMTYsMTAgQEAKIC8qIGRyaXZlciBkZWZpbml0aW9ucyAqLwogI2RlZmluZSBEUklWRVJfQVVUSE9SICJUb2JpYXMgTG9yZW56IDx0b2JpYXMubG9yZW56QGdteC5uZXQ+IgogI2RlZmluZSBEUklWRVJfTkFNRSAicmFkaW8tc2k0NzB4IgotI2RlZmluZSBEUklWRVJfS0VSTkVMX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMSwgMCwgOCkKKyNkZWZpbmUgRFJJVkVSX0tFUk5FTF9WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDEsIDAsIDkpCiAjZGVmaW5lIERSSVZFUl9DQVJEICJTaWxpY29uIExhYnMgU2k0NzB4IEZNIFJhZGlvIFJlY2VpdmVyIgogI2RlZmluZSBEUklWRVJfREVTQyAiVVNCIHJhZGlvIGRyaXZlciBmb3IgU2k0NzB4IEZNIFJhZGlvIFJlY2VpdmVycyIKLSNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gIjEuMC44IgorI2RlZmluZSBEUklWRVJfVkVSU0lPTiAiMS4wLjkiCiAKIAogLyoga2VybmVsIGluY2x1ZGVzICovCkBAIC0xNDUsNyArMTQ3LDcgQEAKIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MDZlMSwgMHhhMTU1LCBVU0JfQ0xBU1NfSElELCAwLCAwKSB9LAogCS8qIEtXb3JsZCBVU0IgRk0gUmFkaW8gU25hcE11c2ljIE1vYmlsZSA3MDAgKEZNNzAwKSAqLwogCXsgVVNCX0RFVklDRV9BTkRfSU5URVJGQUNFX0lORk8oMHgxYjgwLCAweGQ3MDAsIFVTQl9DTEFTU19ISUQsIDAsIDApIH0sCi0JLyogRGVhbEV4dHJlbWUgVVNCIFJhZGlvICovCisJLyogU2FuZWkgRWxlY3RyaWMsIEluYy4gRk0gVVNCIFJhZGlvIChzb2xkIGFzIERlYWxFeHRyZW1lLmNvbSBQQ2VhcikgKi8KIAl7IFVTQl9ERVZJQ0VfQU5EX0lOVEVSRkFDRV9JTkZPKDB4MTBjNSwgMHg4MTlhLCBVU0JfQ0xBU1NfSElELCAwLCAwKSB9LAogCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiAJeyB9CkBAIC0zNDUsNyArMzQ3LDcgQEAKIAogLyogUmVwb3J0IDE5OiBzdHJlYW0gKi8KICNkZWZpbmUgU1RSRUFNX1JFUE9SVF9TSVpFCTMKLSNkZWZpbmUJU1RSRUFNX1JFUE9SVAkJMTkKKyNkZWZpbmUgU1RSRUFNX1JFUE9SVAkJMTkKIAogLyogUmVwb3J0IDIwOiBzY3JhdGNoICovCiAjZGVmaW5lIFNDUkFUQ0hfUEFHRV9TSVpFCTYzCkBAIC0zNTMsOSArMzU1LDEzIEBACiAjZGVmaW5lIFNDUkFUQ0hfUkVQT1JUCQkyMAogCiAvKiBSZXBvcnRzIDE5LTIyOiBmbGFzaCB1cGdyYWRlIG9mIHRoZSBDODA1MUYzMjEgKi8KKyNkZWZpbmUgV1JJVEVfUkVQT1JUX1NJWkUJNAogI2RlZmluZSBXUklURV9SRVBPUlQJCTE5CisjZGVmaW5lIEZMQVNIX1JFUE9SVF9TSVpFCTY0CiAjZGVmaW5lIEZMQVNIX1JFUE9SVAkJMjAKKyNkZWZpbmUgQ1JDX1JFUE9SVF9TSVpFCQkzCiAjZGVmaW5lIENSQ19SRVBPUlQJCTIxCisjZGVmaW5lIFJFU1BPTlNFX1JFUE9SVF9TSVpFCTIKICNkZWZpbmUgUkVTUE9OU0VfUkVQT1JUCQkyMgogCiAvKiBSZXBvcnQgMjM6IGN1cnJlbnRseSB1bnVzZWQsIGJ1dCBjYW4gYWNjZXB0IDYwIGJ5dGUgcmVwb3J0cyBvbiB0aGUgSElEICovCkBAIC00MTQsNyArNDIwLDcgQEAKIAogLyogYm9vdGxvYWRlciBjb21tYW5kcyAqLwogI2RlZmluZSBHRVRfU1dfVkVSU0lPTl9DT01NQU5ECTB4MDAKLSNkZWZpbmUJU0VUX1BBR0VfQ09NTUFORAkweDAxCisjZGVmaW5lIFNFVF9QQUdFX0NPTU1BTkQJMHgwMQogI2RlZmluZSBFUkFTRV9QQUdFX0NPTU1BTkQJMHgwMgogI2RlZmluZSBXUklURV9QQUdFX0NPTU1BTkQJMHgwMwogI2RlZmluZSBDUkNfT05fUEFHRV9DT01NQU5ECTB4MDQKQEAgLTQyOCwxMiArNDM0LDYgQEAKICNkZWZpbmUgQ09NTUFORF9GQUlMRUQJCTB4MDIKICNkZWZpbmUgQ09NTUFORF9QRU5ESU5HCQkweDAzCiAKLS8qIGJ1ZmZlciBzaXplcyAqLwotI2RlZmluZSBDT01NQU5EX0JVRkZFUl9TSVpFCTQKLSNkZWZpbmUgUkVTUE9OU0VfQlVGRkVSX1NJWkUJMgotI2RlZmluZSBGTEFTSF9CVUZGRVJfU0laRQk2NAotI2RlZmluZSBDUkNfQlVGRkVSX1NJWkUJCTMKLQogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgpAQCAtNDY1LDYgKzQ2NSwxMCBAQAogCXVuc2lnbmVkIGludCBidWZfc2l6ZTsKIAl1bnNpZ25lZCBpbnQgcmRfaW5kZXg7CiAJdW5zaWduZWQgaW50IHdyX2luZGV4OworCisJLyogc2NyYXRjaCBwYWdlICovCisJdW5zaWduZWQgY2hhciBzb2Z0d2FyZV92ZXJzaW9uOworCXVuc2lnbmVkIGNoYXIgaGFyZHdhcmVfdmVyc2lvbjsKIH07CiAKIApAQCAtNDgwLDcgKzQ4NCw3IEBACiAKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCi0gKiBHZW5lcmFsIERyaXZlciBGdW5jdGlvbnMKKyAqIEdlbmVyYWwgRHJpdmVyIEZ1bmN0aW9ucyAtIFJFR0lTVEVSX1JFUE9SVHMKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAogLyoKQEAgLTU2Niw2MCArNTcwLDYgQEAKIAogCiAvKgotICogc2k0NzB4X2dldF9hbGxfcmVnaXN0ZXJzIC0gcmVhZCBlbnRpcmUgcmVnaXN0ZXJzCi0gKi8KLXN0YXRpYyBpbnQgc2k0NzB4X2dldF9hbGxfcmVnaXN0ZXJzKHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbykKLXsKLQl1bnNpZ25lZCBjaGFyIGJ1ZltFTlRJUkVfUkVQT1JUX1NJWkVdOwotCWludCByZXR2YWw7Ci0JdW5zaWduZWQgY2hhciByZWducjsKLQotCWJ1ZlswXSA9IEVOVElSRV9SRVBPUlQ7Ci0KLQlyZXR2YWwgPSBzaTQ3MHhfZ2V0X3JlcG9ydChyYWRpbywgKHZvaWQgKikgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOwotCi0JaWYgKHJldHZhbCA+PSAwKQotCQlmb3IgKHJlZ25yID0gMDsgcmVnbnIgPCBSQURJT19SRUdJU1RFUl9OVU07IHJlZ25yKyspCi0JCQlyYWRpby0+cmVnaXN0ZXJzW3JlZ25yXSA9IGdldF91bmFsaWduZWRfYmUxNigKLQkJCQkmYnVmW3JlZ25yICogUkFESU9fUkVHSVNURVJfU0laRSArIDFdKTsKLQotCXJldHVybiAocmV0dmFsIDwgMCkgPyAtRUlOVkFMIDogMDsKLX0KLQotCi0vKgotICogc2k0NzB4X2dldF9yZHNfcmVnaXN0ZXJzIC0gcmVhZCByZHMgcmVnaXN0ZXJzCi0gKi8KLXN0YXRpYyBpbnQgc2k0NzB4X2dldF9yZHNfcmVnaXN0ZXJzKHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbykKLXsKLQl1bnNpZ25lZCBjaGFyIGJ1ZltSRFNfUkVQT1JUX1NJWkVdOwotCWludCByZXR2YWw7Ci0JaW50IHNpemU7Ci0JdW5zaWduZWQgY2hhciByZWducjsKLQotCWJ1ZlswXSA9IFJEU19SRVBPUlQ7Ci0KLQlyZXR2YWwgPSB1c2JfaW50ZXJydXB0X21zZyhyYWRpby0+dXNiZGV2LAotCQl1c2JfcmN2aW50cGlwZShyYWRpby0+dXNiZGV2LCAxKSwKLQkJKHZvaWQgKikgJmJ1Ziwgc2l6ZW9mKGJ1ZiksICZzaXplLCB1c2JfdGltZW91dCk7Ci0JaWYgKHNpemUgIT0gc2l6ZW9mKGJ1ZikpCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUgIjogc2k0NzB4X2dldF9yZHNfcmVnaXN0ZXJzOiAiCi0JCQkicmV0dXJuIHNpemUgZGlmZmVyczogJWQgIT0gJXp1XG4iLCBzaXplLCBzaXplb2YoYnVmKSk7Ci0JaWYgKHJldHZhbCA8IDApCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUgIjogc2k0NzB4X2dldF9yZHNfcmVnaXN0ZXJzOiAiCi0JCQkidXNiX2ludGVycnVwdF9tc2cgcmV0dXJuZWQgJWRcbiIsIHJldHZhbCk7Ci0KLQlpZiAocmV0dmFsID49IDApCi0JCWZvciAocmVnbnIgPSAwOyByZWduciA8IFJEU19SRUdJU1RFUl9OVU07IHJlZ25yKyspCi0JCQlyYWRpby0+cmVnaXN0ZXJzW1NUQVRVU1JTU0kgKyByZWducl0gPQotCQkJCWdldF91bmFsaWduZWRfYmUxNigKLQkJCQkmYnVmW3JlZ25yICogUkFESU9fUkVHSVNURVJfU0laRSArIDFdKTsKLQotCXJldHVybiAocmV0dmFsIDwgMCkgPyAtRUlOVkFMIDogMDsKLX0KLQotCi0vKgogICogc2k0NzB4X3NldF9jaGFuIC0gc2V0IHRoZSBjaGFubmVsCiAgKi8KIHN0YXRpYyBpbnQgc2k0NzB4X3NldF9jaGFuKHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbywgdW5zaWduZWQgc2hvcnQgY2hhbikKQEAgLTg4Nyw2ICs4MzcsNzAgQEAKIAogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdlbmVyYWwgRHJpdmVyIEZ1bmN0aW9ucyAtIEVOVElSRV9SRVBPUlQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIHNpNDcweF9nZXRfYWxsX3JlZ2lzdGVycyAtIHJlYWQgZW50aXJlIHJlZ2lzdGVycworICovCitzdGF0aWMgaW50IHNpNDcweF9nZXRfYWxsX3JlZ2lzdGVycyhzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8pCit7CisJdW5zaWduZWQgY2hhciBidWZbRU5USVJFX1JFUE9SVF9TSVpFXTsKKwlpbnQgcmV0dmFsOworCXVuc2lnbmVkIGNoYXIgcmVnbnI7CisKKwlidWZbMF0gPSBFTlRJUkVfUkVQT1JUOworCisJcmV0dmFsID0gc2k0NzB4X2dldF9yZXBvcnQocmFkaW8sICh2b2lkICopICZidWYsIHNpemVvZihidWYpKTsKKworCWlmIChyZXR2YWwgPj0gMCkKKwkJZm9yIChyZWduciA9IDA7IHJlZ25yIDwgUkFESU9fUkVHSVNURVJfTlVNOyByZWducisrKQorCQkJcmFkaW8tPnJlZ2lzdGVyc1tyZWducl0gPSBnZXRfdW5hbGlnbmVkX2JlMTYoCisJCQkJJmJ1ZltyZWduciAqIFJBRElPX1JFR0lTVEVSX1NJWkUgKyAxXSk7CisKKwlyZXR1cm4gKHJldHZhbCA8IDApID8gLUVJTlZBTCA6IDA7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAqIEdlbmVyYWwgRHJpdmVyIEZ1bmN0aW9ucyAtIFJEU19SRVBPUlQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIHNpNDcweF9nZXRfcmRzX3JlZ2lzdGVycyAtIHJlYWQgcmRzIHJlZ2lzdGVycworICovCitzdGF0aWMgaW50IHNpNDcweF9nZXRfcmRzX3JlZ2lzdGVycyhzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8pCit7CisJdW5zaWduZWQgY2hhciBidWZbUkRTX1JFUE9SVF9TSVpFXTsKKwlpbnQgcmV0dmFsOworCWludCBzaXplOworCXVuc2lnbmVkIGNoYXIgcmVnbnI7CisKKwlidWZbMF0gPSBSRFNfUkVQT1JUOworCisJcmV0dmFsID0gdXNiX2ludGVycnVwdF9tc2cocmFkaW8tPnVzYmRldiwKKwkJdXNiX3JjdmludHBpcGUocmFkaW8tPnVzYmRldiwgMSksCisJCSh2b2lkICopICZidWYsIHNpemVvZihidWYpLCAmc2l6ZSwgdXNiX3RpbWVvdXQpOworCWlmIChzaXplICE9IHNpemVvZihidWYpKQorCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FICI6IHNpNDcweF9nZXRfcmRzX3JlZ2lzdGVyczogIgorCQkJInJldHVybiBzaXplIGRpZmZlcnM6ICVkICE9ICV6dVxuIiwgc2l6ZSwgc2l6ZW9mKGJ1ZikpOworCWlmIChyZXR2YWwgPCAwKQorCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FICI6IHNpNDcweF9nZXRfcmRzX3JlZ2lzdGVyczogIgorCQkJInVzYl9pbnRlcnJ1cHRfbXNnIHJldHVybmVkICVkXG4iLCByZXR2YWwpOworCisJaWYgKHJldHZhbCA+PSAwKQorCQlmb3IgKHJlZ25yID0gMDsgcmVnbnIgPCBSRFNfUkVHSVNURVJfTlVNOyByZWducisrKQorCQkJcmFkaW8tPnJlZ2lzdGVyc1tTVEFUVVNSU1NJICsgcmVnbnJdID0KKwkJCQlnZXRfdW5hbGlnbmVkX2JlMTYoCisJCQkJJmJ1ZltyZWduciAqIFJBRElPX1JFR0lTVEVSX1NJWkUgKyAxXSk7CisKKwlyZXR1cm4gKHJldHZhbCA8IDApID8gLUVJTlZBTCA6IDA7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIEdlbmVyYWwgRHJpdmVyIEZ1bmN0aW9ucyAtIExFRF9SRVBPUlQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIApAQCAtOTExLDYgKzkyNSwzNSBAQAogCiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICogR2VuZXJhbCBEcml2ZXIgRnVuY3Rpb25zIC0gU0NSQVRDSF9SRVBPUlQKKyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworLyoKKyAqIHNpNDcweF9nZXRfc2NyYXRjaF92ZXJzaW9ucyAtIGdldHMgdGhlIHNjcmF0Y2ggcGFnZSBhbmQgdmVyc2lvbiBpbmZvcworICovCitzdGF0aWMgaW50IHNpNDcweF9nZXRfc2NyYXRjaF9wYWdlX3ZlcnNpb25zKHN0cnVjdCBzaTQ3MHhfZGV2aWNlICpyYWRpbykKK3sKKwl1bnNpZ25lZCBjaGFyIGJ1ZltTQ1JBVENIX1JFUE9SVF9TSVpFXTsKKwlpbnQgcmV0dmFsOworCisJYnVmWzBdID0gU0NSQVRDSF9SRVBPUlQ7CisKKwlyZXR2YWwgPSBzaTQ3MHhfZ2V0X3JlcG9ydChyYWRpbywgKHZvaWQgKikgJmJ1Ziwgc2l6ZW9mKGJ1ZikpOworCisJaWYgKHJldHZhbCA8IDApCisJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUgIjogc2k0NzB4X2dldF9zY3JhdGNoOiAiCisJCQkic2k0NzB4X2dldF9yZXBvcnQgcmV0dXJuZWQgJWRcbiIsIHJldHZhbCk7CisJZWxzZSB7CisJCXJhZGlvLT5zb2Z0d2FyZV92ZXJzaW9uID0gYnVmWzFdOworCQlyYWRpby0+aGFyZHdhcmVfdmVyc2lvbiA9IGJ1ZlsyXTsKKwl9CisKKwlyZXR1cm4gKHJldHZhbCA8IDApID8gLUVJTlZBTCA6IDA7Cit9CisKKworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIFJEUyBEcml2ZXIgRnVuY3Rpb25zCiAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKQEAgLTExMjQsNiArMTE2Nyw3IEBACiAJfQogCiAJaWYgKHJhZGlvLT51c2VycyA9PSAxKSB7CisJCS8qIHN0YXJ0IHJhZGlvICovCiAJCXJldHZhbCA9IHNpNDcweF9zdGFydChyYWRpbyk7CiAJCWlmIChyZXR2YWwgPCAwKQogCQkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHJhZGlvLT5pbnRmKTsKQEAgLTExNjUsNiArMTIwOSw3IEBACiAJCS8qIGNhbmNlbCByZWFkIHByb2Nlc3NlcyAqLwogCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnJhZGlvLT5yZWFkX3F1ZXVlKTsKIAorCQkvKiBzdG9wIHJhZGlvICovCiAJCXJldHZhbCA9IHNpNDcweF9zdG9wKHJhZGlvKTsKIAkJdXNiX2F1dG9wbV9wdXRfaW50ZXJmYWNlKHJhZGlvLT5pbnRmKTsKIAl9CkBAIC0xMjI2LDkgKzEyNzEsMTEgQEAKIHN0YXRpYyBpbnQgc2k0NzB4X3ZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwYWJpbGl0eSkKIHsKKwlzdHJ1Y3Qgc2k0NzB4X2RldmljZSAqcmFkaW8gPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCiAJc3RybGNweShjYXBhYmlsaXR5LT5kcml2ZXIsIERSSVZFUl9OQU1FLCBzaXplb2YoY2FwYWJpbGl0eS0+ZHJpdmVyKSk7CiAJc3RybGNweShjYXBhYmlsaXR5LT5jYXJkLCBEUklWRVJfQ0FSRCwgc2l6ZW9mKGNhcGFiaWxpdHktPmNhcmQpKTsKLQlzcHJpbnRmKGNhcGFiaWxpdHktPmJ1c19pbmZvLCAiVVNCIik7CisJdXNiX21ha2VfcGF0aChyYWRpby0+dXNiZGV2LCBjYXBhYmlsaXR5LT5idXNfaW5mbywgc2l6ZW9mKGNhcGFiaWxpdHktPmJ1c19pbmZvKSk7CiAJY2FwYWJpbGl0eS0+dmVyc2lvbiA9IERSSVZFUl9LRVJORUxfVkVSU0lPTjsKIAljYXBhYmlsaXR5LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9IV19GUkVRX1NFRUsgfAogCQlWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOwpAQCAtMTYzNiw3ICsxNjgzLDcgQEAKIAkJCXNpemVvZihzaTQ3MHhfdmlkZGV2X3RlbXBsYXRlKSk7CiAJdmlkZW9fc2V0X2RydmRhdGEocmFkaW8tPnZpZGVvZGV2LCByYWRpbyk7CiAKLQkvKiBzaG93IHNvbWUgaW5mb3MgYWJvdXQgdGhlIHNwZWNpZmljIGRldmljZSAqLworCS8qIHNob3cgc29tZSBpbmZvcyBhYm91dCB0aGUgc3BlY2lmaWMgc2k0NzB4IGRldmljZSAqLwogCWlmIChzaTQ3MHhfZ2V0X2FsbF9yZWdpc3RlcnMocmFkaW8pIDwgMCkgewogCQlyZXR2YWwgPSAtRUlPOwogCQlnb3RvIGVycl9hbGw7CkBAIC0xNjQ0LDcgKzE2OTEsMTYgQEAKIAlwcmludGsoS0VSTl9JTkZPIERSSVZFUl9OQU1FICI6IERldmljZUlEPTB4JTQuNGh4IENoaXBJRD0weCU0LjRoeFxuIiwKIAkJCXJhZGlvLT5yZWdpc3RlcnNbREVWSUNFSURdLCByYWRpby0+cmVnaXN0ZXJzW0NISVBJRF0pOwogCi0JLyogY2hlY2sgaWYgZmlybXdhcmUgaXMgY3VycmVudCAqLworCS8qIGdldCBzb2Z0d2FyZSBhbmQgaGFyZHdhcmUgdmVyc2lvbnMgKi8KKwlpZiAoc2k0NzB4X2dldF9zY3JhdGNoX3BhZ2VfdmVyc2lvbnMocmFkaW8pIDwgMCkgeworCQlyZXR2YWwgPSAtRUlPOworCQlnb3RvIGVycl9hbGw7CisJfQorCXByaW50ayhLRVJOX0lORk8gRFJJVkVSX05BTUUKKwkJCSI6IHNvZnR3YXJlIHZlcnNpb24gJWQsIGhhcmR3YXJlIHZlcnNpb24gJWRcbiIsCisJCQlyYWRpby0+c29mdHdhcmVfdmVyc2lvbiwgcmFkaW8tPmhhcmR3YXJlX3ZlcnNpb24pOworCisJLyogY2hlY2sgaWYgZGV2aWNlIGFuZCBmaXJtd2FyZSBpcyBjdXJyZW50ICovCiAJaWYgKChyYWRpby0+cmVnaXN0ZXJzW0NISVBJRF0gJiBDSElQSURfRklSTVdBUkUpCiAJCQk8IFJBRElPX1NXX1ZFUlNJT05fQ1VSUkVOVCkgewogCQlwcmludGsoS0VSTl9XQVJOSU5HIERSSVZFUl9OQU1FCkBAIC0xNjU3LDcgKzE3MTMsNyBAQAogCQkJIjogSWYgeW91IGhhdmUgc29tZSB0cm91YmxlIHVzaW5nIHRoaXMgZHJpdmVyLFxuIik7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJJVkVSX05BTUUKIAkJCSI6IHBsZWFzZSByZXBvcnQgdG8gVjRMIE1MIGF0ICIKLQkJCSJ2aWRlbzRsaW51eC1saXN0QHJlZGhhdC5jb21cbiIpOworCQkJImxpbnV4LW1lZGlhQHZnZXIua2VybmVsLm9yZ1xuIik7CiAJfQogCiAJLyogc2V0IGluaXRpYWwgZnJlcXVlbmN5ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRlcnJhdGVjLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRlcnJhdGVjLmMKaW5kZXggMDc5OGQ3MS4uNWIwMDdmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10ZXJyYXRlYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdGVycmF0ZWMuYwpAQCAtMjcsMTYgKzI3LDI5IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CS8qIE1vZHVsZXMgCQkJKi8KICNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CQkvKiBJbml0ZGF0YQkJCSovCiAjaW5jbHVkZSA8bGludXgvaW9wb3J0Lmg+CS8qIHJlcXVlc3RfcmVnaW9uCQkqLwotI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIHVkZWxheQkJCSovCi0jaW5jbHVkZSA8YXNtL2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLwotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CS8qIGNvcHkgdG8vZnJvbSB1c2VyCQkqLwogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgkvKiBrZXJuZWwgcmFkaW8gc3RydWN0cwkJKi8KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KLSNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgotCisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLwotI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsMCwyKQorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AJCQkqLworI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgorCitNT0RVTEVfQVVUSE9SKCJSLk9GRkVSTUFOTlMgJiBvdGhlcnMiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBUZXJyYVRlYyBBY3RpdmVSYWRpbyBTdGFuZGFsb25lIHJhZGlvIGNhcmQuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKyNpZm5kZWYgQ09ORklHX1JBRElPX1RFUlJBVEVDX1BPUlQKKyNkZWZpbmUgQ09ORklHX1JBRElPX1RFUlJBVEVDX1BPUlQgMHg1OTAKKyNlbmRpZgorCitzdGF0aWMgaW50IGlvID0gQ09ORklHX1JBRElPX1RFUlJBVEVDX1BPUlQ7CitzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7CisKK21vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgVGVycmFUZWMgQWN0aXZlUmFkaW8gY2FyZCAoMHg1OTAgb3IgMHg1OTEpIik7Cittb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7CisKKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAwLCAyKQogCiBzdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7CiAJewpAQCAtNTcsMTMgKzcwLDYgQEAKIAl9CiB9OwogCi0jaWZuZGVmIENPTkZJR19SQURJT19URVJSQVRFQ19QT1JUCi0jZGVmaW5lIENPTkZJR19SQURJT19URVJSQVRFQ19QT1JUIDB4NTkwCi0jZW5kaWYKLQotLyoqKioqKioqKioqKioqKiogdGhpcyBvbmVzIGFyZSBmb3IgdGhlIHRlcnJhdGVjICoqKioqKioqKioqKioqKioqKiovCi0jZGVmaW5lIEJBU0VQT1JUIAkweDU5MAotI2RlZmluZSBWT0xQT1JUIAkweDU5MQogI2RlZmluZSBXUlRfRElTIAkweDAwCiAjZGVmaW5lIENMS19PRkYJCTB4MDAKICNkZWZpbmUgSUlDX0RBVEEJMHgwMQpAQCAtNzEsMTM4ICs3NywxMjQgQEAKICNkZWZpbmUgREFUQQkJMHgwNAogI2RlZmluZSBDTEtfT04gCQkweDA4CiAjZGVmaW5lIFdSVF9FTgkJMHgxMAotLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLXN0YXRpYyBpbnQgaW8gPSBDT05GSUdfUkFESU9fVEVSUkFURUNfUE9SVDsKLXN0YXRpYyBpbnQgcmFkaW9fbnIgPSAtMTsKLXN0YXRpYyBzcGlubG9ja190IGxvY2s7Ci0KLXN0cnVjdCB0dF9kZXZpY2UKK3N0cnVjdCB0ZXJyYXRlYwogewotCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwotCWludCBwb3J0OworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CisJaW50IGlvOwogCWludCBjdXJ2b2w7CiAJdW5zaWduZWQgbG9uZyBjdXJmcmVxOwogCWludCBtdXRlZDsKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgdGVycmF0ZWMgdGVycmF0ZWNfY2FyZDsKIAogLyogbG9jYWwgdGhpbmdzICovCiAKLXN0YXRpYyB2b2lkIGNhcmRXcml0ZVZvbChpbnQgdm9sdW1lKQorc3RhdGljIHZvaWQgdHRfd3JpdGVfdm9sKHN0cnVjdCB0ZXJyYXRlYyAqdHQsIGludCB2b2x1bWUpCiB7CiAJaW50IGk7Ci0Jdm9sdW1lID0gdm9sdW1lKyh2b2x1bWUgKiAzMik7IC8vIGNoYW5nZSBib3RoIGNoYW5uZWxzCi0Jc3Bpbl9sb2NrKCZsb2NrKTsKLQlmb3IgKGk9MDtpPDg7aSsrKQotCXsKLQkJaWYgKHZvbHVtZSAmICgweDgwPj5pKSkKLQkJCW91dGIoMHg4MCwgVk9MUE9SVCk7Ci0JCWVsc2Ugb3V0YigweDAwLCBWT0xQT1JUKTsKKworCXZvbHVtZSA9IHZvbHVtZSArICh2b2x1bWUgKiAzMik7IC8qIGNoYW5nZSBib3RoIGNoYW5uZWxzICovCisJbXV0ZXhfbG9jaygmdHQtPmxvY2spOworCWZvciAoaSA9IDA7IGkgPCA4OyBpKyspIHsKKwkJaWYgKHZvbHVtZSAmICgweDgwID4+IGkpKQorCQkJb3V0YigweDgwLCB0dC0+aW8gKyAxKTsKKwkJZWxzZQorCQkJb3V0YigweDAwLCB0dC0+aW8gKyAxKTsKIAl9Ci0Jc3Bpbl91bmxvY2soJmxvY2spOworCW11dGV4X3VubG9jaygmdHQtPmxvY2spOwogfQogCiAKIAotc3RhdGljIHZvaWQgdHRfbXV0ZShzdHJ1Y3QgdHRfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCB0dF9tdXRlKHN0cnVjdCB0ZXJyYXRlYyAqdHQpCiB7Ci0JZGV2LT5tdXRlZCA9IDE7Ci0JY2FyZFdyaXRlVm9sKDApOworCXR0LT5tdXRlZCA9IDE7CisJdHRfd3JpdGVfdm9sKHR0LCAwKTsKIH0KIAotc3RhdGljIGludCB0dF9zZXR2b2woc3RydWN0IHR0X2RldmljZSAqZGV2LCBpbnQgdm9sKQorc3RhdGljIGludCB0dF9zZXR2b2woc3RydWN0IHRlcnJhdGVjICp0dCwgaW50IHZvbCkKIHsKLQotLy8JcHJpbnRrKEtFUk5fRVJSICJzZXR2b2wgY2FsbGVkLCB2b2wgPSAlZFxuIiwgdm9sKTsKLQotCWlmKHZvbCA9PSBkZXYtPmN1cnZvbCkgewkvKiByZXF1ZXN0ZWQgdm9sdW1lID0gY3VycmVudCAqLwotCQlpZiAoZGV2LT5tdXRlZCkgewkvKiB1c2VyIGlzIHVubXV0aW5nIHRoZSBjYXJkICAqLwotCQkJZGV2LT5tdXRlZCA9IDA7Ci0JCQljYXJkV3JpdGVWb2wodm9sKTsJLyogZW5hYmxlIGNhcmQgKi8KKwlpZiAodm9sID09IHR0LT5jdXJ2b2wpIHsJLyogcmVxdWVzdGVkIHZvbHVtZSA9IGN1cnJlbnQgKi8KKwkJaWYgKHR0LT5tdXRlZCkgewkvKiB1c2VyIGlzIHVubXV0aW5nIHRoZSBjYXJkICAqLworCQkJdHQtPm11dGVkID0gMDsKKwkJCXR0X3dyaXRlX3ZvbCh0dCwgdm9sKTsJLyogZW5hYmxlIGNhcmQgKi8KIAkJfQotCiAJCXJldHVybiAwOwogCX0KIAotCWlmKHZvbCA9PSAwKSB7CQkJLyogdm9sdW1lID0gMCBtZWFucyBtdXRlIHRoZSBjYXJkICovCi0JCWNhcmRXcml0ZVZvbCgwKTsJLyogInR1cm4gb2ZmIGNhcmQiIGJ5IHNldHRpbmcgdm9sIHRvIDAgKi8KLQkJZGV2LT5jdXJ2b2wgPSB2b2w7CS8qIHRyYWNrIHRoZSB2b2x1bWUgc3RhdGUhCSovCisJaWYgKHZvbCA9PSAwKSB7CQkJLyogdm9sdW1lID0gMCBtZWFucyBtdXRlIHRoZSBjYXJkICovCisJCXR0X3dyaXRlX3ZvbCh0dCwgMCk7CS8qICJ0dXJuIG9mZiBjYXJkIiBieSBzZXR0aW5nIHZvbCB0byAwICovCisJCXR0LT5jdXJ2b2wgPSB2b2w7CS8qIHRyYWNrIHRoZSB2b2x1bWUgc3RhdGUhCSovCiAJCXJldHVybiAwOwogCX0KIAotCWRldi0+bXV0ZWQgPSAwOwotCi0JY2FyZFdyaXRlVm9sKHZvbCk7Ci0KLQlkZXYtPmN1cnZvbCA9IHZvbDsKLQorCXR0LT5tdXRlZCA9IDA7CisJdHRfd3JpdGVfdm9sKHR0LCB2b2wpOworCXR0LT5jdXJ2b2wgPSB2b2w7CiAJcmV0dXJuIDA7Ci0KIH0KIAogCiAvKiB0aGlzIGlzIHRoZSB3b3JzdCBwYXJ0IGluIHRoaXMgZHJpdmVyICovCiAvKiBtYW55IG1vcmUgb3IgbGVzcyBzdHJhbmdlIHRoaW5ncyBhcmUgZ29pbmcgb24gaGVyZSwgYnV0IGhleSwgaXQgd29ya3MgOikgKi8KIAotc3RhdGljIGludCB0dF9zZXRmcmVxKHN0cnVjdCB0dF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmcmVxMSkKK3N0YXRpYyBpbnQgdHRfc2V0ZnJlcShzdHJ1Y3QgdGVycmF0ZWMgKnR0LCB1bnNpZ25lZCBsb25nIGZyZXExKQogewogCWludCBmcmVxOwogCWludCBpOwogCWludCBwOwogCWludCAgdGVtcDsKIAlsb25nIHJlc3Q7Ci0KIAl1bnNpZ25lZCBjaGFyIGJ1ZmZlclsyNV07CQkvKiB3ZSBoYXZlIHRvIGJpdCBzaGlmdCAyNSByZWdpc3RlcnMgKi8KLQlmcmVxID0gZnJlcTEvMTYwOwkJCS8qIGNvbnZlcnQgdGhlIGZyZXEuIHRvIGEgbmljZSB0byBoYW5kbGUgdmFsdWUgKi8KLQlmb3IoaT0yNDtpPi0xO2ktLSkKLQkJYnVmZmVyW2ldPTA7CiAKLQlyZXN0ID0gZnJlcSoxMCsxMDcwMDsJCS8qIGkgb25jZSBoYWQgdW5kZXJzdG9vZCB3aGF0IGlzIGdvaW5nIG9uIGhlcmUgKi8KKwltdXRleF9sb2NrKCZ0dC0+bG9jayk7CisKKwl0dC0+Y3VyZnJlcSA9IGZyZXExOworCisJZnJlcSA9IGZyZXExIC8gMTYwOwkJCS8qIGNvbnZlcnQgdGhlIGZyZXEuIHRvIGEgbmljZSB0byBoYW5kbGUgdmFsdWUgKi8KKwltZW1zZXQoYnVmZmVyLCAwLCBzaXplb2YoYnVmZmVyKSk7CisKKwlyZXN0ID0gZnJlcSAqIDEwICsgMTA3MDA7CS8qIEkgb25jZSBoYWQgdW5kZXJzdG9vZCB3aGF0IGlzIGdvaW5nIG9uIGhlcmUgKi8KIAkJCQkJLyogbWF5YmUgc29tZSB3aXNlIGd1eSAoZnJpZWRoZWxtPykgY2FuIGNvbW1lbnQgdGhpcyBzdHVmZiAqLwotCWk9MTM7Ci0JcD0xMDsKLQl0ZW1wPTEwMjQwMDsKLQl3aGlsZSAocmVzdCE9MCkKLQl7Ci0JCWlmIChyZXN0JXRlbXAgID09IHJlc3QpCisJaSA9IDEzOworCXAgPSAxMDsKKwl0ZW1wID0gMTAyNDAwOworCXdoaWxlIChyZXN0ICE9IDApIHsKKwkJaWYgKHJlc3QgJSB0ZW1wICA9PSByZXN0KQogCQkJYnVmZmVyW2ldID0gMDsKLQkJZWxzZQotCQl7CisJCWVsc2UgewogCQkJYnVmZmVyW2ldID0gMTsKLQkJCXJlc3QgPSByZXN0LXRlbXA7CisJCQlyZXN0ID0gcmVzdCAtIHRlbXA7CiAJCX0KIAkJaS0tOwogCQlwLS07Ci0JCXRlbXAgPSB0ZW1wLzI7CisJCXRlbXAgPSB0ZW1wIC8gMjsKIAl9CiAKLQlzcGluX2xvY2soJmxvY2spOwotCi0JZm9yIChpPTI0O2k+LTE7aS0tKQkJCS8qIGJpdCBzaGlmdCB0aGUgdmFsdWVzIHRvIHRoZSByYWRpb2NhcmQgKi8KLQl7Ci0JCWlmIChidWZmZXJbaV09PTEpCi0JCXsKLQkJCW91dGIoV1JUX0VOfERBVEEsIEJBU0VQT1JUKTsKLQkJCW91dGIoV1JUX0VOfERBVEF8Q0xLX09OICAsIEJBU0VQT1JUKTsKLQkJCW91dGIoV1JUX0VOfERBVEEsIEJBU0VQT1JUKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCW91dGIoV1JUX0VOfDB4MDAsIEJBU0VQT1JUKTsKLQkJCW91dGIoV1JUX0VOfDB4MDB8Q0xLX09OICAsIEJBU0VQT1JUKTsKKwlmb3IgKGkgPSAyNDsgaSA+IC0xOyBpLS0pIHsJLyogYml0IHNoaWZ0IHRoZSB2YWx1ZXMgdG8gdGhlIHJhZGlvY2FyZCAqLworCQlpZiAoYnVmZmVyW2ldID09IDEpIHsKKwkJCW91dGIoV1JUX0VOIHwgREFUQSwgdHQtPmlvKTsKKwkJCW91dGIoV1JUX0VOIHwgREFUQSB8IENMS19PTiwgdHQtPmlvKTsKKwkJCW91dGIoV1JUX0VOIHwgREFUQSwgdHQtPmlvKTsKKwkJfSBlbHNlIHsKKwkJCW91dGIoV1JUX0VOIHwgMHgwMCwgdHQtPmlvKTsKKwkJCW91dGIoV1JUX0VOIHwgMHgwMCB8IENMS19PTiwgdHQtPmlvKTsKIAkJfQogCX0KLQlvdXRiKDB4MDAsIEJBU0VQT1JUKTsKKwlvdXRiKDB4MDAsIHR0LT5pbyk7CiAKLQlzcGluX3VubG9jaygmbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ0dC0+bG9jayk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0dF9nZXRzaWdzdHIoc3RydWN0IHR0X2RldmljZSAqZGV2KQkJLyogVE9ETyAqLworc3RhdGljIGludCB0dF9nZXRzaWdzdHIoc3RydWN0IHRlcnJhdGVjICp0dCkKIHsKLQlpZiAoaW5iKGlvKSAmIDIpCS8qIGJpdCBzZXQgPSBubyBzaWduYWwgcHJlc2VudAkqLworCWlmIChpbmIodHQtPmlvKSAmIDIpCS8qIGJpdCBzZXQgPSBubyBzaWduYWwgcHJlc2VudAkqLwogCQlyZXR1cm4gMDsKIAlyZXR1cm4gMTsJCS8qIHNpZ25hbCBwcmVzZW50CQkqLwogfQpAQCAtMjEyLDUzICsyMDQsNTAgQEAKIHsKIAlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLXRlcnJhdGVjIiwgc2l6ZW9mKHYtPmRyaXZlcikpOwogCXN0cmxjcHkodi0+Y2FyZCwgIkFjdGl2ZVJhZGlvIiwgc2l6ZW9mKHYtPmNhcmQpKTsKLQlzcHJpbnRmKHYtPmJ1c19pbmZvLCAiSVNBIik7CisJc3RybGNweSh2LT5idXNfaW5mbywgIklTQSIsIHNpemVvZih2LT5idXNfaW5mbykpOwogCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwotCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCXN0cnVjdCB0dF9kZXZpY2UgKnR0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdGVycmF0ZWMgKnR0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWlmICh2LT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3RyY3B5KHYtPm5hbWUsICJGTSIpOworCXN0cmxjcHkodi0+bmFtZSwgIkZNIiwgc2l6ZW9mKHYtPm5hbWUpKTsKIAl2LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKLQl2LT5yYW5nZWxvdyA9ICg4NyoxNjAwMCk7Ci0Jdi0+cmFuZ2VoaWdoID0gKDEwOCoxNjAwMCk7CisJdi0+cmFuZ2Vsb3cgPSA4NyAqIDE2MDAwOworCXYtPnJhbmdlaGlnaCA9IDEwOCAqIDE2MDAwOwogCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05POwogCXYtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1c7CiAJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POwotCXYtPnNpZ25hbCA9IDB4RkZGRip0dF9nZXRzaWdzdHIodHQpOworCXYtPnNpZ25hbCA9IDB4RkZGRiAqIHR0X2dldHNpZ3N0cih0dCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCWlmICh2LT5pbmRleCA+IDApCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiAwOworCXJldHVybiB2LT5pbmRleCA/IC1FSU5WQUwgOiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCB0dF9kZXZpY2UgKnR0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdGVycmF0ZWMgKnR0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAotCXR0LT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OwotCXR0X3NldGZyZXEodHQsIHR0LT5jdXJmcmVxKTsKKwl0dF9zZXRmcmVxKHR0LCBmLT5mcmVxdWVuY3kpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCB0dF9kZXZpY2UgKnR0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdGVycmF0ZWMgKnR0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwogCWYtPmZyZXF1ZW5jeSA9IHR0LT5jdXJmcmVxOwpAQCAtMjcyLDggKzI2MSw3IEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShyYWRpb19xY3RybCk7IGkrKykgewogCQlpZiAocWMtPmlkICYmIHFjLT5pZCA9PSByYWRpb19xY3RybFtpXS5pZCkgewotCQkJbWVtY3B5KHFjLCAmKHJhZGlvX3FjdHJsW2ldKSwKLQkJCQkJCXNpemVvZigqcWMpKTsKKwkJCW1lbWNweShxYywgJihyYWRpb19xY3RybFtpXSksIHNpemVvZigqcWMpKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtMjgzLDcgKzI3MSw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHR0X2RldmljZSAqdHQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB0ZXJyYXRlYyAqdHQgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKQEAgLTMwMiw3ICsyOTAsNyBAQAogc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCB0dF9kZXZpY2UgKnR0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdGVycmF0ZWMgKnR0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0zMTgsMTcgKzMwNiw2IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQotewotCWlmIChhLT5pbmRleCA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3RyY3B5KGEtPm5hbWUsICJSYWRpbyIpOwotCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKIHsKIAkqaSA9IDA7CkBAIC0zMzcsMzYgKzMxNCwzOCBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKIHsKLQlpZiAoaSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gaSA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlhLT5pbmRleCA9IDA7CisJc3RybGNweShhLT5uYW1lLCAiUmFkaW8iLCBzaXplb2YoYS0+bmFtZSkpOworCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQogewotCWlmIChhLT5pbmRleCAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gYS0+aW5kZXggPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB0ZXJyYXRlY19vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHR0X2RldmljZSB0ZXJyYXRlY191bml0OwotCi1zdGF0aWMgaW50IHRlcnJhdGVjX2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIGludCB0ZXJyYXRlY19yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQogewotCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZ0ZXJyYXRlY191bml0LmluX3VzZSkgPyAtRUJVU1kgOiAwOwotfQotCi1zdGF0aWMgaW50IHRlcnJhdGVjX2V4Y2x1c2l2ZV9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQotewotCWNsZWFyX2JpdCgwLCAmdGVycmF0ZWNfdW5pdC5pbl91c2UpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHRlcnJhdGVjX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IHRlcnJhdGVjX2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IHRlcnJhdGVjX2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuICAgICAgICAgICA9IHRlcnJhdGVjX29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gdGVycmF0ZWNfcmVsZWFzZSwKIAkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAogfTsKIApAQCAtMzg1LDYwICszNjQsNjMgQEAKIAkudmlkaW9jX3NfaW5wdXQgICAgID0gdmlkaW9jX3NfaW5wdXQsCiB9OwogCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSB0ZXJyYXRlY19yYWRpbyA9IHsKLQkubmFtZQkJPSAiVGVycmFUZWMgQWN0aXZlUmFkaW8iLAotCS5mb3BzICAgICAgICAgICA9ICZ0ZXJyYXRlY19mb3BzLAotCS5pb2N0bF9vcHMgCT0gJnRlcnJhdGVjX2lvY3RsX29wcywKLQkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAotfTsKLQogc3RhdGljIGludCBfX2luaXQgdGVycmF0ZWNfaW5pdCh2b2lkKQogewotCWlmKGlvPT0tMSkKLQl7Ci0JCXByaW50ayhLRVJOX0VSUiAiWW91IG11c3Qgc2V0IGFuIEkvTyBhZGRyZXNzIHdpdGggaW89MHg/Pz9cbiIpOworCXN0cnVjdCB0ZXJyYXRlYyAqdHQgPSAmdGVycmF0ZWNfY2FyZDsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gJnR0LT52NGwyX2RldjsKKwlpbnQgcmVzOworCisJc3RybGNweSh2NGwyX2Rldi0+bmFtZSwgInRlcnJhdGVjIiwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSk7CisJdHQtPmlvID0gaW87CisJaWYgKHR0LT5pbyA9PSAtMSkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgInlvdSBtdXN0IHNldCBhbiBJL08gYWRkcmVzcyB3aXRoIGlvPTB4NTkwIG9yIDB4NTkxXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWlmICghcmVxdWVzdF9yZWdpb24oaW8sIDIsICJ0ZXJyYXRlYyIpKQotCXsKLQkJcHJpbnRrKEtFUk5fRVJSICJUZXJyYVRlYzogcG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLCBpbyk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbih0dC0+aW8sIDIsICJ0ZXJyYXRlYyIpKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAicG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLCBpbyk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JdmlkZW9fc2V0X2RydmRhdGEoJnRlcnJhdGVjX3JhZGlvLCAmdGVycmF0ZWNfdW5pdCk7CisJcmVzID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoTlVMTCwgdjRsMl9kZXYpOworCWlmIChyZXMgPCAwKSB7CisJCXJlbGVhc2VfcmVnaW9uKHR0LT5pbywgMik7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHY0bDJfZGV2aWNlXG4iKTsKKwkJcmV0dXJuIHJlczsKKwl9CiAKLQlzcGluX2xvY2tfaW5pdCgmbG9jayk7CisJc3RybGNweSh0dC0+dmRldi5uYW1lLCB2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKHR0LT52ZGV2Lm5hbWUpKTsKKwl0dC0+dmRldi52NGwyX2RldiA9IHY0bDJfZGV2OworCXR0LT52ZGV2LmZvcHMgPSAmdGVycmF0ZWNfZm9wczsKKwl0dC0+dmRldi5pb2N0bF9vcHMgPSAmdGVycmF0ZWNfaW9jdGxfb3BzOworCXR0LT52ZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmdHQtPnZkZXYsIHR0KTsKIAotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnRlcnJhdGVjX3JhZGlvLCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgewotCQlyZWxlYXNlX3JlZ2lvbihpbywyKTsKKwltdXRleF9pbml0KCZ0dC0+bG9jayk7CisKKwlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZ0dC0+dmRldiwgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKKwkJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmdHQtPnY0bDJfZGV2KTsKKwkJcmVsZWFzZV9yZWdpb24odHQtPmlvLCAyKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcHJpbnRrKEtFUk5fSU5GTyAiVEVSUkFURUMgQWN0aXZSYWRpbyBTdGFuZGFsb25lIGNhcmQgZHJpdmVyLlxuIik7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAiVEVSUkFURUMgQWN0aXZSYWRpbyBTdGFuZGFsb25lIGNhcmQgZHJpdmVyLlxuIik7CiAKIAkvKiBtdXRlIGNhcmQgLSBwcmV2ZW50cyBub2lzeSBib290dXBzICovCi0KLQkvKiB0aGlzIGVuc3VyZXMgdGhhdCB0aGUgdm9sdW1lIGlzIGFsbCB0aGUgd2F5IGRvd24gICovCi0JY2FyZFdyaXRlVm9sKDApOwotCXRlcnJhdGVjX3VuaXQuY3Vydm9sID0gMDsKLQorCXR0X3dyaXRlX3ZvbCh0dCwgMCk7CiAJcmV0dXJuIDA7CiB9CiAKLU1PRFVMRV9BVVRIT1IoIlIuT0ZGRVJNQU5OUyAmIG90aGVycyIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIFRlcnJhVGVjIEFjdGl2ZVJhZGlvIFN0YW5kYWxvbmUgcmFkaW8gY2FyZC4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLW1vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKLU1PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgVGVycmFUZWMgQWN0aXZlUmFkaW8gY2FyZCAoMHg1OTAgb3IgMHg1OTEpIik7Ci1tb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB0ZXJyYXRlY19jbGVhbnVwX21vZHVsZSh2b2lkKQorc3RhdGljIHZvaWQgX19leGl0IHRlcnJhdGVjX2V4aXQodm9pZCkKIHsKLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSgmdGVycmF0ZWNfcmFkaW8pOwotCXJlbGVhc2VfcmVnaW9uKGlvLDIpOwotCXByaW50ayhLRVJOX0lORk8gIlRFUlJBVEVDIEFjdGl2UmFkaW8gU3RhbmRhbG9uZSBjYXJkIGRyaXZlciB1bmxvYWRlZC5cbiIpOworCXN0cnVjdCB0ZXJyYXRlYyAqdHQgPSAmdGVycmF0ZWNfY2FyZDsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gJnR0LT52NGwyX2RldjsKKworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZ0dC0+dmRldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmdHQtPnY0bDJfZGV2KTsKKwlyZWxlYXNlX3JlZ2lvbih0dC0+aW8sIDIpOworCXY0bDJfaW5mbyh2NGwyX2RldiwgIlRFUlJBVEVDIEFjdGl2UmFkaW8gU3RhbmRhbG9uZSBjYXJkIGRyaXZlciB1bmxvYWRlZC5cbiIpOwogfQogCiBtb2R1bGVfaW5pdCh0ZXJyYXRlY19pbml0KTsKLW1vZHVsZV9leGl0KHRlcnJhdGVjX2NsZWFudXBfbW9kdWxlKTsKK21vZHVsZV9leGl0KHRlcnJhdGVjX2V4aXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRydXN0LmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXRydXN0LmMKaW5kZXggYmRmOWNiNi4uZDFiZTY0OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10cnVzdC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tdHJ1c3QuYwpAQCAtMTksNDkgKzE5LDE1IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgotI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2lvLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLwotI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsMCwyKQotCi1zdGF0aWMgc3RydWN0IHY0bDJfcXVlcnljdHJsIHJhZGlvX3FjdHJsW10gPSB7Ci0JewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX01VVEUsCi0JCS5uYW1lICAgICAgICAgID0gIk11dGUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gMSwKLQkJLmRlZmF1bHRfdmFsdWUgPSAxLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JfSx7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fVk9MVU1FLAotCQkubmFtZSAgICAgICAgICA9ICJWb2x1bWUiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gNjU1MzUsCi0JCS5zdGVwICAgICAgICAgID0gMjA0OCwKLQkJLmRlZmF1bHRfdmFsdWUgPSA2NTUzNSwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCX0sewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX0JBU1MsCi0JCS5uYW1lICAgICAgICAgID0gIkJhc3MiLAotCQkubWluaW11bSAgICAgICA9IDAsCi0JCS5tYXhpbXVtICAgICAgID0gNjU1MzUsCi0JCS5zdGVwICAgICAgICAgID0gNDM3MCwKLQkJLmRlZmF1bHRfdmFsdWUgPSAzMjc2OCwKLQkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCX0sewotCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0FVRElPX1RSRUJMRSwKLQkJLm5hbWUgICAgICAgICAgPSAiVHJlYmxlIiwKLQkJLm1pbmltdW0gICAgICAgPSAwLAotCQkubWF4aW11bSAgICAgICA9IDY1NTM1LAotCQkuc3RlcCAgICAgICAgICA9IDQzNzAsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMzI3NjgsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQl9LAotfTsKK01PRFVMRV9BVVRIT1IoIkVyaWMgTGFtbWVydHMsIFJ1c3NlbGwgS3JvbGwsIFF1YXkgTHUsIERvbmFsZCBTb25nLCBKYXNvbiBMZXdpcywgU2NvdHQgTWNHcmF0aCwgV2lsbGlhbSBNY0dyYXRoIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgVHJ1c3QgRk0gUmFkaW8gY2FyZC4iKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAogLyogYWNjZXB0YWJsZSBwb3J0czogMHgzNTAgKEpQMyBzaG9ydGVkKSwgMHgzNTggKEpQMyBvcGVuKSAqLwogCkBAIC03MSwyNiArMzcsNDEgQEAKIAogc3RhdGljIGludCBpbyA9IENPTkZJR19SQURJT19UUlVTVF9QT1JUOwogc3RhdGljIGludCByYWRpb19uciA9IC0xOwotc3RhdGljIGludCBpb3ZhbCA9IDB4ZjsKLXN0YXRpYyBfX3UxNiBjdXJ2b2w7Ci1zdGF0aWMgX191MTYgY3VyYmFzczsKLXN0YXRpYyBfX3UxNiBjdXJ0cmVibGU7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBjdXJmcmVxOwotc3RhdGljIGludCBjdXJzdGVyZW87Ci1zdGF0aWMgaW50IGN1cm11dGU7Ci1zdGF0aWMgdW5zaWduZWQgbG9uZyBpbl91c2U7CisKK21vZHVsZV9wYXJhbShpbywgaW50LCAwKTsKK01PRFVMRV9QQVJNX0RFU0MoaW8sICJJL08gYWRkcmVzcyBvZiB0aGUgVHJ1c3QgRk0gUmFkaW8gY2FyZCAoMHgzNTAgb3IgMHgzNTgpIik7Cittb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7CisKKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAwLCAyKQorCitzdHJ1Y3QgdHJ1c3QgeworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CisJaW50IGlvOworCWludCBpb3ZhbDsKKwlfX3UxNiBjdXJ2b2w7CisJX191MTYgY3VyYmFzczsKKwlfX3UxNiBjdXJ0cmVibGU7CisJaW50IG11dGVkOworCXVuc2lnbmVkIGxvbmcgY3VyZnJlcTsKKwlpbnQgY3Vyc3RlcmVvOworCWludCBjdXJtdXRlOworCXN0cnVjdCBtdXRleCBsb2NrOworfTsKKworc3RhdGljIHN0cnVjdCB0cnVzdCB0cnVzdF9jYXJkOwogCiAvKiBpMmMgYWRkcmVzc2VzICovCiAjZGVmaW5lIFREQTczMThfQUREUiAweDg4CiAjZGVmaW5lIFRTQTYwNjBUX0FERFIgMHhjNAogCi0jZGVmaW5lIFRSX0RFTEFZIGRvIHsgaW5iKGlvKTsgaW5iKGlvKTsgaW5iKGlvKTsgfSB3aGlsZSgwKQotI2RlZmluZSBUUl9TRVRfU0NMIG91dGIoaW92YWwgfD0gMiwgaW8pCi0jZGVmaW5lIFRSX0NMUl9TQ0wgb3V0Yihpb3ZhbCAmPSAweGZkLCBpbykKLSNkZWZpbmUgVFJfU0VUX1NEQSBvdXRiKGlvdmFsIHw9IDEsIGlvKQotI2RlZmluZSBUUl9DTFJfU0RBIG91dGIoaW92YWwgJj0gMHhmZSwgaW8pCisjZGVmaW5lIFRSX0RFTEFZIGRvIHsgaW5iKHRyLT5pbyk7IGluYih0ci0+aW8pOyBpbmIodHItPmlvKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgVFJfU0VUX1NDTCBvdXRiKHRyLT5pb3ZhbCB8PSAyLCB0ci0+aW8pCisjZGVmaW5lIFRSX0NMUl9TQ0wgb3V0Yih0ci0+aW92YWwgJj0gMHhmZCwgdHItPmlvKQorI2RlZmluZSBUUl9TRVRfU0RBIG91dGIodHItPmlvdmFsIHw9IDEsIHRyLT5pbykKKyNkZWZpbmUgVFJfQ0xSX1NEQSBvdXRiKHRyLT5pb3ZhbCAmPSAweGZlLCB0ci0+aW8pCiAKLXN0YXRpYyB2b2lkIHdyaXRlX2kyYyhpbnQgbiwgLi4uKQorc3RhdGljIHZvaWQgd3JpdGVfaTJjKHN0cnVjdCB0cnVzdCAqdHIsIGludCBuLCAuLi4pCiB7CiAJdW5zaWduZWQgY2hhciB2YWwsIG1hc2s7CiAJdmFfbGlzdCBhcmdzOwpAQCAtMTM2LDYyICsxMTcsNzcgQEAKIAl2YV9lbmQoYXJncyk7CiB9CiAKLXN0YXRpYyB2b2lkIHRyX3NldHZvbChfX3UxNiB2b2wpCitzdGF0aWMgdm9pZCB0cl9zZXR2b2woc3RydWN0IHRydXN0ICp0ciwgX191MTYgdm9sKQogewotCWN1cnZvbCA9IHZvbCAvIDIwNDg7Ci0Jd3JpdGVfaTJjKDIsIFREQTczMThfQUREUiwgY3Vydm9sIF4gMHgxZik7CisJbXV0ZXhfbG9jaygmdHItPmxvY2spOworCXRyLT5jdXJ2b2wgPSB2b2wgLyAyMDQ4OworCXdyaXRlX2kyYyh0ciwgMiwgVERBNzMxOF9BRERSLCB0ci0+Y3Vydm9sIF4gMHgxZik7CisJbXV0ZXhfdW5sb2NrKCZ0ci0+bG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgYmFzc3RyZWJsZTJjaGlwWzE1XSA9IHsKIAkwLCAxLCAyLCAzLCA0LCA1LCA2LCA3LCAxNCwgMTMsIDEyLCAxMSwgMTAsIDksIDgKIH07CiAKLXN0YXRpYyB2b2lkIHRyX3NldGJhc3MoX191MTYgYmFzcykKK3N0YXRpYyB2b2lkIHRyX3NldGJhc3Moc3RydWN0IHRydXN0ICp0ciwgX191MTYgYmFzcykKIHsKLQljdXJiYXNzID0gYmFzcyAvIDQzNzA7Ci0Jd3JpdGVfaTJjKDIsIFREQTczMThfQUREUiwgMHg2MCB8IGJhc3N0cmVibGUyY2hpcFtjdXJiYXNzXSk7CisJbXV0ZXhfbG9jaygmdHItPmxvY2spOworCXRyLT5jdXJiYXNzID0gYmFzcyAvIDQzNzA7CisJd3JpdGVfaTJjKHRyLCAyLCBUREE3MzE4X0FERFIsIDB4NjAgfCBiYXNzdHJlYmxlMmNoaXBbdHItPmN1cmJhc3NdKTsKKwltdXRleF91bmxvY2soJnRyLT5sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgdHJfc2V0dHJlYmxlKF9fdTE2IHRyZWJsZSkKK3N0YXRpYyB2b2lkIHRyX3NldHRyZWJsZShzdHJ1Y3QgdHJ1c3QgKnRyLCBfX3UxNiB0cmVibGUpCiB7Ci0JY3VydHJlYmxlID0gdHJlYmxlIC8gNDM3MDsKLQl3cml0ZV9pMmMoMiwgVERBNzMxOF9BRERSLCAweDcwIHwgYmFzc3RyZWJsZTJjaGlwW2N1cnRyZWJsZV0pOworCW11dGV4X2xvY2soJnRyLT5sb2NrKTsKKwl0ci0+Y3VydHJlYmxlID0gdHJlYmxlIC8gNDM3MDsKKwl3cml0ZV9pMmModHIsIDIsIFREQTczMThfQUREUiwgMHg3MCB8IGJhc3N0cmVibGUyY2hpcFt0ci0+Y3VydHJlYmxlXSk7CisJbXV0ZXhfdW5sb2NrKCZ0ci0+bG9jayk7CiB9CiAKLXN0YXRpYyB2b2lkIHRyX3NldHN0ZXJlbyhpbnQgc3RlcmVvKQorc3RhdGljIHZvaWQgdHJfc2V0c3RlcmVvKHN0cnVjdCB0cnVzdCAqdHIsIGludCBzdGVyZW8pCiB7Ci0JY3Vyc3RlcmVvID0gISFzdGVyZW87Ci0JaW92YWwgPSAoaW92YWwgJiAweGZiKSB8ICghY3Vyc3RlcmVvIDw8IDIpOwotCW91dGIoaW92YWwsIGlvKTsKKwltdXRleF9sb2NrKCZ0ci0+bG9jayk7CisJdHItPmN1cnN0ZXJlbyA9ICEhc3RlcmVvOworCXRyLT5pb3ZhbCA9ICh0ci0+aW92YWwgJiAweGZiKSB8ICghdHItPmN1cnN0ZXJlbyA8PCAyKTsKKwlvdXRiKHRyLT5pb3ZhbCwgdHItPmlvKTsKKwltdXRleF91bmxvY2soJnRyLT5sb2NrKTsKIH0KIAotc3RhdGljIHZvaWQgdHJfc2V0bXV0ZShpbnQgbXV0ZSkKK3N0YXRpYyB2b2lkIHRyX3NldG11dGUoc3RydWN0IHRydXN0ICp0ciwgaW50IG11dGUpCiB7Ci0JY3VybXV0ZSA9ICEhbXV0ZTsKLQlpb3ZhbCA9IChpb3ZhbCAmIDB4ZjcpIHwgKGN1cm11dGUgPDwgMyk7Ci0Jb3V0Yihpb3ZhbCwgaW8pOworCW11dGV4X2xvY2soJnRyLT5sb2NrKTsKKwl0ci0+Y3VybXV0ZSA9ICEhbXV0ZTsKKwl0ci0+aW92YWwgPSAodHItPmlvdmFsICYgMHhmNykgfCAodHItPmN1cm11dGUgPDwgMyk7CisJb3V0Yih0ci0+aW92YWwsIHRyLT5pbyk7CisJbXV0ZXhfdW5sb2NrKCZ0ci0+bG9jayk7CiB9CiAKLXN0YXRpYyBpbnQgdHJfZ2V0c2lnc3RyKHZvaWQpCitzdGF0aWMgaW50IHRyX2dldHNpZ3N0cihzdHJ1Y3QgdHJ1c3QgKnRyKQogewogCWludCBpLCB2OwogCi0JZm9yKGkgPSAwLCB2ID0gMDsgaSA8IDEwMDsgaSsrKSB2IHw9IGluYihpbyk7Ci0JcmV0dXJuICh2ICYgMSk/IDAgOiAweGZmZmY7CisJbXV0ZXhfbG9jaygmdHItPmxvY2spOworCWZvciAoaSA9IDAsIHYgPSAwOyBpIDwgMTAwOyBpKyspCisJCXYgfD0gaW5iKHRyLT5pbyk7CisJbXV0ZXhfdW5sb2NrKCZ0ci0+bG9jayk7CisJcmV0dXJuICh2ICYgMSkgPyAwIDogMHhmZmZmOwogfQogCi1zdGF0aWMgaW50IHRyX2dldHN0ZXJlbyh2b2lkKQorc3RhdGljIGludCB0cl9nZXRzdGVyZW8oc3RydWN0IHRydXN0ICp0cikKIHsKIAkvKiBkb24ndCBrbm93IGhvdyB0byBkZXRlcm1pbmUgaXQsIGp1c3QgcmV0dXJuIHRoZSBzZXR0aW5nICovCi0JcmV0dXJuIGN1cnN0ZXJlbzsKKwlyZXR1cm4gdHItPmN1cnN0ZXJlbzsKIH0KIAotc3RhdGljIHZvaWQgdHJfc2V0ZnJlcSh1bnNpZ25lZCBsb25nIGYpCitzdGF0aWMgdm9pZCB0cl9zZXRmcmVxKHN0cnVjdCB0cnVzdCAqdHIsIHVuc2lnbmVkIGxvbmcgZikKIHsKKwltdXRleF9sb2NrKCZ0ci0+bG9jayk7CisJdHItPmN1cmZyZXEgPSBmOwogCWYgLz0gMTYwOwkvKiBDb252ZXJ0IHRvIDEwIGtIeiB1bml0cwkqLwotCWYgKz0gMTA3MDsJLyogQWRkIDEwLjcgTUh6IElGCQkJKi8KLQotCXdyaXRlX2kyYyg1LCBUU0E2MDYwVF9BRERSLCAoZiA8PCAxKSB8IDEsIGYgPj4gNywgMHg2MCB8ICgoZiA+PiAxNSkgJiAxKSwgMCk7CisJZiArPSAxMDcwOwkvKiBBZGQgMTAuNyBNSHogSUYJCSovCisJd3JpdGVfaTJjKHRyLCA1LCBUU0E2MDYwVF9BRERSLCAoZiA8PCAxKSB8IDEsIGYgPj4gNywgMHg2MCB8ICgoZiA+PiAxNSkgJiAxKSwgMCk7CisJbXV0ZXhfdW5sb2NrKCZ0ci0+bG9jayk7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LApAQCAtMTk5LDY4ICsxOTUsNzUgQEAKIHsKIAlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLXRydXN0Iiwgc2l6ZW9mKHYtPmRyaXZlcikpOwogCXN0cmxjcHkodi0+Y2FyZCwgIlRydXN0IEZNIFJhZGlvIiwgc2l6ZW9mKHYtPmNhcmQpKTsKLQlzcHJpbnRmKHYtPmJ1c19pbmZvLCAiSVNBIik7CisJc3RybGNweSh2LT5idXNfaW5mbywgIklTQSIsIHNpemVvZih2LT5idXNfaW5mbykpOwogCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwotCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7CisJc3RydWN0IHRydXN0ICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKIAlpZiAodi0+aW5kZXggPiAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXN0cmNweSh2LT5uYW1lLCAiRk0iKTsKKwlzdHJsY3B5KHYtPm5hbWUsICJGTSIsIHNpemVvZih2LT5uYW1lKSk7CiAJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87Ci0Jdi0+cmFuZ2Vsb3cgPSAoODcuNSoxNjAwMCk7Ci0Jdi0+cmFuZ2VoaWdoID0gKDEwOCoxNjAwMCk7Ci0Jdi0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk98VjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCXYtPnJhbmdlbG93ID0gODcuNSAqIDE2MDAwOworCXYtPnJhbmdlaGlnaCA9IDEwOCAqIDE2MDAwOworCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PIHwgVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwogCXYtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1c7Ci0JaWYgKHRyX2dldHN0ZXJlbygpKQorCWlmICh0cl9nZXRzdGVyZW8odHIpKQogCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKIAllbHNlCiAJCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKLQl2LT5zaWduYWwgPSB0cl9nZXRzaWdzdHIoKTsKKwl2LT5zaWduYWwgPSB0cl9nZXRzaWdzdHIodHIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCWlmICh2LT5pbmRleCA+IDApCi0JCXJldHVybiAtRUlOVkFMOworCXN0cnVjdCB0cnVzdCAqdHIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCisJaWYgKHYtPmluZGV4KQorCQlyZXR1cm4gLUVJTlZBTDsKKwl0cl9zZXRzdGVyZW8odHIsIHYtPmF1ZG1vZGUgPT0gVjRMMl9UVU5FUl9NT0RFX1NURVJFTyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQljdXJmcmVxID0gZi0+ZnJlcXVlbmN5OwotCXRyX3NldGZyZXEoY3VyZnJlcSk7CisJc3RydWN0IHRydXN0ICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwl0cl9zZXRmcmVxKHRyLCBmLT5mcmVxdWVuY3kpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCiB7CisJc3RydWN0IHRydXN0ICp0ciA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKIAlmLT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKLQlmLT5mcmVxdWVuY3kgPSBjdXJmcmVxOworCWYtPmZyZXF1ZW5jeSA9IHRyLT5jdXJmcmVxOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7Ci0JCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7Ci0JCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAotCQkJCQkJc2l6ZW9mKCpxYykpOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAxKTsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwgMjA0OCwgNjU1MzUpOworCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwgNDM3MCwgMzI3NjgpOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTI2OCwxOCArMjcxLDIwIEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKKwlzdHJ1Y3QgdHJ1c3QgKnRyID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCWN0cmwtPnZhbHVlID0gY3VybXV0ZTsKKwkJY3RybC0+dmFsdWUgPSB0ci0+Y3VybXV0ZTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCWN0cmwtPnZhbHVlID0gY3Vydm9sICogMjA0ODsKKwkJY3RybC0+dmFsdWUgPSB0ci0+Y3Vydm9sICogMjA0ODsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgotCQljdHJsLT52YWx1ZSA9IGN1cmJhc3MgKiA0MzcwOworCQljdHJsLT52YWx1ZSA9IHRyLT5jdXJiYXNzICogNDM3MDsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCWN0cmwtPnZhbHVlID0gY3VydHJlYmxlICogNDM3MDsKKwkJY3RybC0+dmFsdWUgPSB0ci0+Y3VydHJlYmxlICogNDM3MDsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRUlOVkFMOwpAQCAtMjg4LDM0ICsyOTMsMjUgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogeworCXN0cnVjdCB0cnVzdCAqdHIgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJdHJfc2V0bXV0ZShjdHJsLT52YWx1ZSk7CisJCXRyX3NldG11dGUodHIsIGN0cmwtPnZhbHVlKTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCXRyX3NldHZvbChjdHJsLT52YWx1ZSk7CisJCXRyX3NldHZvbCh0ciwgY3RybC0+dmFsdWUpOwogCQlyZXR1cm4gMDsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6Ci0JCXRyX3NldGJhc3MoY3RybC0+dmFsdWUpOworCQl0cl9zZXRiYXNzKHRyLCBjdHJsLT52YWx1ZSk7CiAJCXJldHVybiAwOwogCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgotCQl0cl9zZXR0cmVibGUoY3RybC0+dmFsdWUpOworCQl0cl9zZXR0cmVibGUodHIsIGN0cmwtPnZhbHVlKTsKIAkJcmV0dXJuIDA7CiAJfQogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQotewotCWlmIChhLT5pbmRleCA+IDEpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3RyY3B5KGEtPm5hbWUsICJSYWRpbyIpOwotCWEtPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCAqaSkKIHsKIAkqaSA9IDA7CkBAIC0zMjQsMzQgKzMyMCwzOCBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKIHsKLQlpZiAoaSAhPSAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gaSA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCWEtPmluZGV4ID0gMDsKKwlzdHJsY3B5KGEtPm5hbWUsICJSYWRpbyIsIHNpemVvZihhLT5uYW1lKSk7CisJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKIHsKLQlpZiAoYS0+aW5kZXggIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGEtPmluZGV4ID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdHJ1c3Rfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3sKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB0cnVzdF9leGNsdXNpdmVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgdHJ1c3RfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmaW5fdXNlKSA/IC1FQlVTWSA6IDA7Ci19Ci0KLXN0YXRpYyBpbnQgdHJ1c3RfZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JY2xlYXJfYml0KDAsICZpbl91c2UpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHRydXN0X2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAotCS5vcGVuICAgICAgICAgICA9IHRydXN0X2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IHRydXN0X2V4Y2x1c2l2ZV9yZWxlYXNlLAorCS5vcGVuICAgICAgICAgICA9IHRydXN0X29wZW4sCisJLnJlbGVhc2UgICAgICAgID0gdHJ1c3RfcmVsZWFzZSwKIAkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAogfTsKIApAQCAtMzcwLDU5ICszNzAsNzIgQEAKIAkudmlkaW9jX3NfaW5wdXQgICAgID0gdmlkaW9jX3NfaW5wdXQsCiB9OwogCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSB0cnVzdF9yYWRpbyA9IHsKLQkubmFtZQkJPSAiVHJ1c3QgRk0gUmFkaW8iLAotCS5mb3BzICAgICAgICAgICA9ICZ0cnVzdF9mb3BzLAotCS5pb2N0bF9vcHMgCT0gJnRydXN0X2lvY3RsX29wcywKLQkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAotfTsKLQogc3RhdGljIGludCBfX2luaXQgdHJ1c3RfaW5pdCh2b2lkKQogewotCWlmKGlvID09IC0xKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiWW91IG11c3Qgc2V0IGFuIEkvTyBhZGRyZXNzIHdpdGggaW89MHg/Pz9cbiIpOworCXN0cnVjdCB0cnVzdCAqdHIgPSAmdHJ1c3RfY2FyZDsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gJnRyLT52NGwyX2RldjsKKwlpbnQgcmVzOworCisJc3RybGNweSh2NGwyX2Rldi0+bmFtZSwgInRydXN0Iiwgc2l6ZW9mKHY0bDJfZGV2LT5uYW1lKSk7CisJdHItPmlvID0gaW87CisJdHItPmlvdmFsID0gMHhmOworCW11dGV4X2luaXQoJnRyLT5sb2NrKTsKKworCWlmICh0ci0+aW8gPT0gLTEpIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJZb3UgbXVzdCBzZXQgYW4gSS9PIGFkZHJlc3Mgd2l0aCBpbz0weDB4MzUwIG9yIDB4MzU4XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCWlmKCFyZXF1ZXN0X3JlZ2lvbihpbywgMiwgIlRydXN0IEZNIFJhZGlvIikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ0cnVzdDogcG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLCBpbyk7CisJaWYgKCFyZXF1ZXN0X3JlZ2lvbih0ci0+aW8sIDIsICJUcnVzdCBGTSBSYWRpbyIpKSB7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAicG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLCB0ci0+aW8pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZ0cnVzdF9yYWRpbywgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKLQkJcmVsZWFzZV9yZWdpb24oaW8sIDIpOworCisJcmVzID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoTlVMTCwgdjRsMl9kZXYpOworCWlmIChyZXMgPCAwKSB7CisJCXJlbGVhc2VfcmVnaW9uKHRyLT5pbywgMik7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHY0bDJfZGV2aWNlXG4iKTsKKwkJcmV0dXJuIHJlczsKKwl9CisKKwlzdHJsY3B5KHRyLT52ZGV2Lm5hbWUsIHY0bDJfZGV2LT5uYW1lLCBzaXplb2YodHItPnZkZXYubmFtZSkpOworCXRyLT52ZGV2LnY0bDJfZGV2ID0gdjRsMl9kZXY7CisJdHItPnZkZXYuZm9wcyA9ICZ0cnVzdF9mb3BzOworCXRyLT52ZGV2LmlvY3RsX29wcyA9ICZ0cnVzdF9pb2N0bF9vcHM7CisJdHItPnZkZXYucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5OworCXZpZGVvX3NldF9kcnZkYXRhKCZ0ci0+dmRldiwgdHIpOworCisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmdHItPnZkZXYsIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7CisJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIodjRsMl9kZXYpOworCQlyZWxlYXNlX3JlZ2lvbih0ci0+aW8sIDIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlwcmludGsoS0VSTl9JTkZPICJUcnVzdCBGTSBSYWRpbyBjYXJkIGRyaXZlciB2MS4wLlxuIik7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAiVHJ1c3QgRk0gUmFkaW8gY2FyZCBkcml2ZXIgdjEuMC5cbiIpOwogCi0Jd3JpdGVfaTJjKDIsIFREQTczMThfQUREUiwgMHg4MCk7CS8qIHNwZWFrZXIgYXR0LiBMRiA9IDAgZEIgKi8KLQl3cml0ZV9pMmMoMiwgVERBNzMxOF9BRERSLCAweGEwKTsJLyogc3BlYWtlciBhdHQuIFJGID0gMCBkQiAqLwotCXdyaXRlX2kyYygyLCBUREE3MzE4X0FERFIsIDB4YzApOwkvKiBzcGVha2VyIGF0dC4gTFIgPSAwIGRCICovCi0Jd3JpdGVfaTJjKDIsIFREQTczMThfQUREUiwgMHhlMCk7CS8qIHNwZWFrZXIgYXR0LiBSUiA9IDAgZEIgKi8KLQl3cml0ZV9pMmMoMiwgVERBNzMxOF9BRERSLCAweDQwKTsJLyogc3RlcmVvIDEgaW5wdXQsIGdhaW4gPSAxOC43NSBkQiAqLworCXdyaXRlX2kyYyh0ciwgMiwgVERBNzMxOF9BRERSLCAweDgwKTsJLyogc3BlYWtlciBhdHQuIExGID0gMCBkQiAqLworCXdyaXRlX2kyYyh0ciwgMiwgVERBNzMxOF9BRERSLCAweGEwKTsJLyogc3BlYWtlciBhdHQuIFJGID0gMCBkQiAqLworCXdyaXRlX2kyYyh0ciwgMiwgVERBNzMxOF9BRERSLCAweGMwKTsJLyogc3BlYWtlciBhdHQuIExSID0gMCBkQiAqLworCXdyaXRlX2kyYyh0ciwgMiwgVERBNzMxOF9BRERSLCAweGUwKTsJLyogc3BlYWtlciBhdHQuIFJSID0gMCBkQiAqLworCXdyaXRlX2kyYyh0ciwgMiwgVERBNzMxOF9BRERSLCAweDQwKTsJLyogc3RlcmVvIDEgaW5wdXQsIGdhaW4gPSAxOC43NSBkQiAqLwogCi0JdHJfc2V0dm9sKDB4ODAwMCk7Ci0JdHJfc2V0YmFzcygweDgwMDApOwotCXRyX3NldHRyZWJsZSgweDgwMDApOwotCXRyX3NldHN0ZXJlbygxKTsKKwl0cl9zZXR2b2wodHIsIDB4ZmZmZik7CisJdHJfc2V0YmFzcyh0ciwgMHg4MDAwKTsKKwl0cl9zZXR0cmVibGUodHIsIDB4ODAwMCk7CisJdHJfc2V0c3RlcmVvKHRyLCAxKTsKIAogCS8qIG11dGUgY2FyZCAtIHByZXZlbnRzIG5vaXN5IGJvb3R1cHMgKi8KLQl0cl9zZXRtdXRlKDEpOworCXRyX3NldG11dGUodHIsIDEpOwogCiAJcmV0dXJuIDA7CiB9CiAKLU1PRFVMRV9BVVRIT1IoIkVyaWMgTGFtbWVydHMsIFJ1c3NlbGwgS3JvbGwsIFF1YXkgTHUsIERvbmFsZCBTb25nLCBKYXNvbiBMZXdpcywgU2NvdHQgTWNHcmF0aCwgV2lsbGlhbSBNY0dyYXRoIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgVHJ1c3QgRk0gUmFkaW8gY2FyZC4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotbW9kdWxlX3BhcmFtKGlvLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhpbywgIkkvTyBhZGRyZXNzIG9mIHRoZSBUcnVzdCBGTSBSYWRpbyBjYXJkICgweDM1MCBvciAweDM1OCkiKTsKLW1vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKLQogc3RhdGljIHZvaWQgX19leGl0IGNsZWFudXBfdHJ1c3RfbW9kdWxlKHZvaWQpCiB7Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnRydXN0X3JhZGlvKTsKLQlyZWxlYXNlX3JlZ2lvbihpbywgMik7CisJc3RydWN0IHRydXN0ICp0ciA9ICZ0cnVzdF9jYXJkOworCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnRyLT52ZGV2KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZ0ci0+djRsMl9kZXYpOworCXJlbGVhc2VfcmVnaW9uKHRyLT5pbywgMik7CiB9CiAKIG1vZHVsZV9pbml0KHRydXN0X2luaXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby10eXBob29uLmMgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXR5cGhvb24uYwppbmRleCA1YzNiMzE5Li45MmQ5MjNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXR5cGhvb24uYworKysgYi9kcml2ZXJzL21lZGlhL3JhZGlvL3JhZGlvLXR5cGhvb24uYwpAQCAtMzQsMzcgKzM0LDE1IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CS8qIE1vZHVsZXMgICAgICAgICAgICAgICAgICAgICAgICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4JCS8qIEluaXRkYXRhICAgICAgICAgICAgICAgICAgICAgICAqLwogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiByZXF1ZXN0X3JlZ2lvbgkJICAqLwotI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4JLyogcmFkaW8gY2FyZCBzdGF0dXMgcmVwb3J0CSAgKi8KLSNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgotI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wICAgICAgICAgICAgICAgICAgICovCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4JLyogY29weSB0by9mcm9tIHVzZXIgICAgICAgICAgICAgICovCisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPiAgICAgIC8qIGZvciBLRVJORUxfVkVSU0lPTiBNQUNSTyAgICAgKi8KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4JLyoga2VybmVsIHJhZGlvIHN0cnVjdHMgICAgICAgICAgICovCi0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wICAgICAgICAgICAgICAgICAgICovCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAKLSNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLwotI2RlZmluZSBSQURJT19WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKDAsMSwxKQotI2RlZmluZSBCQU5ORVIgIlR5cGhvb24gUmFkaW8gQ2FyZCBkcml2ZXIgdjAuMS4xXG4iCi0KLXN0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKLQl7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKLQkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQl9LHsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCi0JCS5uYW1lICAgICAgICAgID0gIlZvbHVtZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSA2NTUzNSwKLQkJLnN0ZXAgICAgICAgICAgPSAxPDwxNCwKLQkJLmRlZmF1bHRfdmFsdWUgPSAweGZmLAotCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JfQotfTsKLQorTU9EVUxFX0FVVEhPUigiRHIuIEhlbnJpayBTZWlkZWwiKTsKK01PRFVMRV9ERVNDUklQVElPTigiQSBkcml2ZXIgZm9yIHRoZSBUeXBob29uIHJhZGlvIGNhcmQgKGEuay5hLiBFY29SYWRpbykuIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKICNpZm5kZWYgQ09ORklHX1JBRElPX1RZUEhPT05fUE9SVAogI2RlZmluZSBDT05GSUdfUkFESU9fVFlQSE9PTl9QT1JUIC0xCkBAIC03NCwxMyArNTIsMjYgQEAKICNkZWZpbmUgQ09ORklHX1JBRElPX1RZUEhPT05fTVVURUZSRVEgMAogI2VuZGlmCiAKLSNpZm5kZWYgQ09ORklHX1BST0NfRlMKLSN1bmRlZiBDT05GSUdfUkFESU9fVFlQSE9PTl9QUk9DX0ZTCi0jZW5kaWYKK3N0YXRpYyBpbnQgaW8gPSBDT05GSUdfUkFESU9fVFlQSE9PTl9QT1JUOworc3RhdGljIGludCByYWRpb19uciA9IC0xOwogCi1zdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgewotCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwotCWludCBpb2Jhc2U7Cittb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIFR5cGhvb24gY2FyZCAoMHgzMTYgb3IgMHgzMzYpIik7CisKK21vZHVsZV9wYXJhbShyYWRpb19uciwgaW50LCAwKTsKKworc3RhdGljIHVuc2lnbmVkIGxvbmcgbXV0ZWZyZXEgPSBDT05GSUdfUkFESU9fVFlQSE9PTl9NVVRFRlJFUTsKK21vZHVsZV9wYXJhbShtdXRlZnJlcSwgdWxvbmcsIDApOworTU9EVUxFX1BBUk1fREVTQyhtdXRlZnJlcSwgIkZyZXF1ZW5jeSB1c2VkIHdoZW4gbXV0aW5nIHRoZSBjYXJkIChpbiBrSHopIik7CisKKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAxLCAxKQorCisjZGVmaW5lIEJBTk5FUiAiVHlwaG9vbiBSYWRpbyBDYXJkIGRyaXZlciB2MC4xLjFcbiIKKworc3RydWN0IHR5cGhvb24geworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXY7CisJaW50IGlvOwogCWludCBjdXJ2b2w7CiAJaW50IG11dGVkOwogCXVuc2lnbmVkIGxvbmcgY3VyZnJlcTsKQEAgLTg4LDI1ICs3OSwxOSBAQAogCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIAotc3RhdGljIHZvaWQgdHlwaG9vbl9zZXR2b2xfZ2VuZXJpYyhzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgKmRldiwgaW50IHZvbCk7Ci1zdGF0aWMgaW50IHR5cGhvb25fc2V0ZnJlcV9nZW5lcmljKHN0cnVjdCB0eXBob29uX2RldmljZSAqZGV2LAotCQkJCSAgIHVuc2lnbmVkIGxvbmcgZnJlcXVlbmN5KTsKLXN0YXRpYyBpbnQgdHlwaG9vbl9zZXRmcmVxKHN0cnVjdCB0eXBob29uX2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZyZXF1ZW5jeSk7Ci1zdGF0aWMgdm9pZCB0eXBob29uX211dGUoc3RydWN0IHR5cGhvb25fZGV2aWNlICpkZXYpOwotc3RhdGljIHZvaWQgdHlwaG9vbl91bm11dGUoc3RydWN0IHR5cGhvb25fZGV2aWNlICpkZXYpOwotc3RhdGljIGludCB0eXBob29uX3NldHZvbChzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgKmRldiwgaW50IHZvbCk7CitzdGF0aWMgc3RydWN0IHR5cGhvb24gdHlwaG9vbl9jYXJkOwogCi1zdGF0aWMgdm9pZCB0eXBob29uX3NldHZvbF9nZW5lcmljKHN0cnVjdCB0eXBob29uX2RldmljZSAqZGV2LCBpbnQgdm9sKQorc3RhdGljIHZvaWQgdHlwaG9vbl9zZXR2b2xfZ2VuZXJpYyhzdHJ1Y3QgdHlwaG9vbiAqZGV2LCBpbnQgdm9sKQogewogCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAJdm9sID4+PSAxNDsJCQkJLyogTWFwIDE2IGJpdCB0byAyIGJpdCAqLwogCXZvbCAmPSAzOwotCW91dGJfcCh2b2wgLyAyLCBkZXYtPmlvYmFzZSk7CQkvKiBTZXQgdGhlIHZvbHVtZSwgaGlnaCBiaXQuICovCi0Jb3V0Yl9wKHZvbCAlIDIsIGRldi0+aW9iYXNlICsgMik7CS8qIFNldCB0aGUgdm9sdW1lLCBsb3cgYml0LiAqLworCW91dGJfcCh2b2wgLyAyLCBkZXYtPmlvKTsJCS8qIFNldCB0aGUgdm9sdW1lLCBoaWdoIGJpdC4gKi8KKwlvdXRiX3Aodm9sICUgMiwgZGV2LT5pbyArIDIpOwkvKiBTZXQgdGhlIHZvbHVtZSwgbG93IGJpdC4gKi8KIAltdXRleF91bmxvY2soJmRldi0+bG9jayk7CiB9CiAKLXN0YXRpYyBpbnQgdHlwaG9vbl9zZXRmcmVxX2dlbmVyaWMoc3RydWN0IHR5cGhvb25fZGV2aWNlICpkZXYsCitzdGF0aWMgaW50IHR5cGhvb25fc2V0ZnJlcV9nZW5lcmljKHN0cnVjdCB0eXBob29uICpkZXYsCiAJCQkJICAgdW5zaWduZWQgbG9uZyBmcmVxdWVuY3kpCiB7CiAJdW5zaWduZWQgbG9uZyBvdXR2YWw7CkBAIC0xMzAsMjIgKzExNSwyMiBAQAogCW91dHZhbCAtPSAoMTAgKiB4ICogeCArIDEwNDMzKSAvIDIwODY2OwogCW91dHZhbCArPSA0ICogeCAtIDExNTA1OwogCi0Jb3V0Yl9wKChvdXR2YWwgPj4gOCkgJiAweDAxLCBkZXYtPmlvYmFzZSArIDQpOwotCW91dGJfcChvdXR2YWwgPj4gOSwgZGV2LT5pb2Jhc2UgKyA2KTsKLQlvdXRiX3Aob3V0dmFsICYgMHhmZiwgZGV2LT5pb2Jhc2UgKyA4KTsKKwlvdXRiX3AoKG91dHZhbCA+PiA4KSAmIDB4MDEsIGRldi0+aW8gKyA0KTsKKwlvdXRiX3Aob3V0dmFsID4+IDksIGRldi0+aW8gKyA2KTsKKwlvdXRiX3Aob3V0dmFsICYgMHhmZiwgZGV2LT5pbyArIDgpOwogCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHR5cGhvb25fc2V0ZnJlcShzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmcmVxdWVuY3kpCitzdGF0aWMgaW50IHR5cGhvb25fc2V0ZnJlcShzdHJ1Y3QgdHlwaG9vbiAqZGV2LCB1bnNpZ25lZCBsb25nIGZyZXF1ZW5jeSkKIHsKIAl0eXBob29uX3NldGZyZXFfZ2VuZXJpYyhkZXYsIGZyZXF1ZW5jeSk7CiAJZGV2LT5jdXJmcmVxID0gZnJlcXVlbmN5OwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCB0eXBob29uX211dGUoc3RydWN0IHR5cGhvb25fZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCB0eXBob29uX211dGUoc3RydWN0IHR5cGhvb24gKmRldikKIHsKIAlpZiAoZGV2LT5tdXRlZCA9PSAxKQogCQlyZXR1cm47CkBAIC0xNTQsNyArMTM5LDcgQEAKIAlkZXYtPm11dGVkID0gMTsKIH0KIAotc3RhdGljIHZvaWQgdHlwaG9vbl91bm11dGUoc3RydWN0IHR5cGhvb25fZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCB0eXBob29uX3VubXV0ZShzdHJ1Y3QgdHlwaG9vbiAqZGV2KQogewogCWlmIChkZXYtPm11dGVkID09IDApCiAJCXJldHVybjsKQEAgLTE2Myw3ICsxNDgsNyBAQAogCWRldi0+bXV0ZWQgPSAwOwogfQogCi1zdGF0aWMgaW50IHR5cGhvb25fc2V0dm9sKHN0cnVjdCB0eXBob29uX2RldmljZSAqZGV2LCBpbnQgdm9sKQorc3RhdGljIGludCB0eXBob29uX3NldHZvbChzdHJ1Y3QgdHlwaG9vbiAqZGV2LCBpbnQgdm9sKQogewogCWlmIChkZXYtPm11dGVkICYmIHZvbCAhPSAwKSB7CS8qIHVzZXIgaXMgdW5tdXRpbmcgdGhlIGNhcmQgKi8KIAkJZGV2LT5jdXJ2b2wgPSB2b2w7CkBAIC0xODgsOSArMTczLDkgQEAKIHsKIAlzdHJsY3B5KHYtPmRyaXZlciwgInJhZGlvLXR5cGhvb24iLCBzaXplb2Yodi0+ZHJpdmVyKSk7CiAJc3RybGNweSh2LT5jYXJkLCAiVHlwaG9vbiBSYWRpbyIsIHNpemVvZih2LT5jYXJkKSk7Ci0Jc3ByaW50Zih2LT5idXNfaW5mbywgIklTQSIpOworCXN0cmxjcHkodi0+YnVzX2luZm8sICJJU0EiLCBzaXplb2Yodi0+YnVzX2luZm8pKTsKIAl2LT52ZXJzaW9uID0gUkFESU9fVkVSU0lPTjsKLQl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUjsKKwl2LT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9UVU5FUiB8IFY0TDJfQ0FQX1JBRElPOwogCXJldHVybiAwOwogfQogCkBAIC0yMDAsMTAgKzE4NSwxMCBAQAogCWlmICh2LT5pbmRleCA+IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0Jc3RyY3B5KHYtPm5hbWUsICJGTSIpOworCXN0cmxjcHkodi0+bmFtZSwgIkZNIiwgc2l6ZW9mKHYtPm5hbWUpKTsKIAl2LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKLQl2LT5yYW5nZWxvdyA9ICg4Ny41KjE2MDAwKTsKLQl2LT5yYW5nZWhpZ2ggPSAoMTA4KjE2MDAwKTsKKwl2LT5yYW5nZWxvdyA9IDg3LjUgKiAxNjAwMDsKKwl2LT5yYW5nZWhpZ2ggPSAxMDggKiAxNjAwMDsKIAl2LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKIAl2LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfTE9XOwogCXYtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTU9OTzsKQEAgLTIxNCw0NCArMTk5LDM3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl90dW5lciAqdikKIHsKLQlpZiAodi0+aW5kZXggPiAwKQotCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gdi0+aW5kZXggPyAtRUlOVkFMIDogMDsKK30KIAorc3RhdGljIGludCB2aWRpb2NfZ19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKK3sKKwlzdHJ1Y3QgdHlwaG9vbiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOworCWYtPmZyZXF1ZW5jeSA9IGRldi0+Y3VyZnJlcTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19mcmVxdWVuY3koc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKIHsKLQlzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgKnR5cGhvb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB0eXBob29uICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCi0JdHlwaG9vbi0+Y3VyZnJlcSA9IGYtPmZyZXF1ZW5jeTsKLQl0eXBob29uX3NldGZyZXEodHlwaG9vbiwgdHlwaG9vbi0+Y3VyZnJlcSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCi17Ci0Jc3RydWN0IHR5cGhvb25fZGV2aWNlICp0eXBob29uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQotCWYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwotCWYtPmZyZXF1ZW5jeSA9IHR5cGhvb24tPmN1cmZyZXE7Ci0KKwlkZXYtPmN1cmZyZXEgPSBmLT5mcmVxdWVuY3k7CisJdHlwaG9vbl9zZXRmcmVxKGRldiwgZGV2LT5jdXJmcmVxKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQogewotCWludCBpOwotCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUocmFkaW9fcWN0cmwpOyBpKyspIHsKLQkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gcmFkaW9fcWN0cmxbaV0uaWQpIHsKLQkJCW1lbWNweShxYywgJihyYWRpb19xY3RybFtpXSksCi0JCQkJCQlzaXplb2YoKnFjKSk7Ci0JCQlyZXR1cm4gMDsKLQkJfQorCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDEpOworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LCAxNjM4NCwgNjU1MzUpOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTI1OSwxNCArMjM3LDE0IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHR5cGhvb25fZGV2aWNlICp0eXBob29uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3QgdHlwaG9vbiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCWN0cmwtPnZhbHVlID0gdHlwaG9vbi0+bXV0ZWQ7CisJCWN0cmwtPnZhbHVlID0gZGV2LT5tdXRlZDsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCWN0cmwtPnZhbHVlID0gdHlwaG9vbi0+Y3Vydm9sOworCQljdHJsLT52YWx1ZSA9IGRldi0+Y3Vydm9sOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CkBAIC0yNzUsMzMgKzI1MywyMiBAQAogc3RhdGljIGludCB2aWRpb2Nfc19jdHJsIChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgKnR5cGhvb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB0eXBob29uICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKIAkJaWYgKGN0cmwtPnZhbHVlKQotCQkJdHlwaG9vbl9tdXRlKHR5cGhvb24pOworCQkJdHlwaG9vbl9tdXRlKGRldik7CiAJCWVsc2UKLQkJCXR5cGhvb25fdW5tdXRlKHR5cGhvb24pOworCQkJdHlwaG9vbl91bm11dGUoZGV2KTsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCXR5cGhvb25fc2V0dm9sKHR5cGhvb24sIGN0cmwtPnZhbHVlKTsKKwkJdHlwaG9vbl9zZXR2b2woZGV2LCBjdHJsLT52YWx1ZSk7CiAJCXJldHVybiAwOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKLQkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCi17Ci0JaWYgKGEtPmluZGV4ID4gMSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlzdHJjcHkoYS0+bmFtZSwgIlJhZGlvIik7Ci0JYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50ICppKQogewogCSppID0gMDsKQEAgLTMxMCw0NSArMjc3LDYyIEBACiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQogewotCWlmIChpICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiBpID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCWEtPmluZGV4ID0gMDsKKwlzdHJsY3B5KGEtPm5hbWUsICJSYWRpbyIsIHNpemVvZihhLT5uYW1lKSk7CisJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCiB7Ci0JaWYgKGEtPmluZGV4ICE9IDApCi0JCXJldHVybiAtRUlOVkFMOworCXJldHVybiBhLT5pbmRleCA/IC1FSU5WQUwgOiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19sb2dfc3RhdHVzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2KQoreworCXN0cnVjdCB0eXBob29uICpkZXYgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmZGV2LT52NGwyX2RldjsKKworCXY0bDJfaW5mbyh2NGwyX2RldiwgQkFOTkVSKTsKKyNpZmRlZiBNT0RVTEUKKwl2NGwyX2luZm8odjRsMl9kZXYsICJMb2FkIHR5cGU6IERyaXZlciBsb2FkZWQgYXMgYSBtb2R1bGVcblxuIik7CisjZWxzZQorCXY0bDJfaW5mbyh2NGwyX2RldiwgIkxvYWQgdHlwZTogRHJpdmVyIGNvbXBpbGVkIGludG8ga2VybmVsXG5cbiIpOworI2VuZGlmCisJdjRsMl9pbmZvKHY0bDJfZGV2LCAiZnJlcXVlbmN5ID0gJWx1IGtIelxuIiwgZGV2LT5jdXJmcmVxID4+IDQpOworCXY0bDJfaW5mbyh2NGwyX2RldiwgInZvbHVtZSA9ICVkXG4iLCBkZXYtPmN1cnZvbCk7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAibXV0ZSA9ICVzXG4iLCBkZXYtPm11dGVkID8gICJvbiIgOiAib2ZmIik7CisJdjRsMl9pbmZvKHY0bDJfZGV2LCAiaW8gPSAweCV4XG4iLCBkZXYtPmlvKTsKKwl2NGwyX2luZm8odjRsMl9kZXYsICJtdXRlIGZyZXF1ZW5jeSA9ICVsdSBrSHpcbiIsIGRldi0+bXV0ZWZyZXEgPj4gNCk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgdHlwaG9vbl9kZXZpY2UgdHlwaG9vbl91bml0ID0KK3N0YXRpYyBpbnQgdHlwaG9vbl9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQogewotCS5pb2Jhc2UJCT0gQ09ORklHX1JBRElPX1RZUEhPT05fUE9SVCwKLQkuY3VyZnJlcQk9IENPTkZJR19SQURJT19UWVBIT09OX01VVEVGUkVRLAotCS5tdXRlZnJlcQk9IENPTkZJR19SQURJT19UWVBIT09OX01VVEVGUkVRLAotfTsKLQotc3RhdGljIGludCB0eXBob29uX2V4Y2x1c2l2ZV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXJldHVybiB0ZXN0X2FuZF9zZXRfYml0KDAsICZ0eXBob29uX3VuaXQuaW5fdXNlKSA/IC1FQlVTWSA6IDA7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdHlwaG9vbl9leGNsdXNpdmVfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQgdHlwaG9vbl9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQogewotCWNsZWFyX2JpdCgwLCAmdHlwaG9vbl91bml0LmluX3VzZSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdHlwaG9vbl9mb3BzID0gewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICAgICAgICAgPSB0eXBob29uX2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IHR5cGhvb25fZXhjbHVzaXZlX3JlbGVhc2UsCisJLm9wZW4gICAgICAgICAgID0gdHlwaG9vbl9vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IHR5cGhvb25fcmVsZWFzZSwKIAkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB0eXBob29uX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX2xvZ19zdGF0dXMgID0gdmlkaW9jX2xvZ19zdGF0dXMsCiAJLnZpZGlvY19xdWVyeWNhcCAgICA9IHZpZGlvY19xdWVyeWNhcCwKIAkudmlkaW9jX2dfdHVuZXIgICAgID0gdmlkaW9jX2dfdHVuZXIsCiAJLnZpZGlvY19zX3R1bmVyICAgICA9IHZpZGlvY19zX3R1bmVyLApAQCAtMzYzLDEyNSArMzQ3LDcyIEBACiAJLnZpZGlvY19zX2N0cmwgICAgICA9IHZpZGlvY19zX2N0cmwsCiB9OwogCi1zdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSB0eXBob29uX3JhZGlvID0gewotCS5uYW1lCQk9ICJUeXBob29uIFJhZGlvIiwKLQkuZm9wcyAgICAgICAgICAgPSAmdHlwaG9vbl9mb3BzLAotCS5pb2N0bF9vcHMgCT0gJnR5cGhvb25faW9jdGxfb3BzLAotCS5yZWxlYXNlCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2VfZW1wdHksCi19OwotCi0jaWZkZWYgQ09ORklHX1JBRElPX1RZUEhPT05fUFJPQ19GUwotCi1zdGF0aWMgaW50IHR5cGhvb25fcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKLXsKLQkjaWZkZWYgTU9EVUxFCi0JICAgICNkZWZpbmUgTU9EVUxFUFJPQ1NUUklORyAiRHJpdmVyIGxvYWRlZCBhcyBhIG1vZHVsZSIKLQkjZWxzZQotCSAgICAjZGVmaW5lIE1PRFVMRVBST0NTVFJJTkcgIkRyaXZlciBjb21waWxlZCBpbnRvIGtlcm5lbCIKLQkjZW5kaWYKLQotCXNlcV9wdXRzKG0sIEJBTk5FUik7Ci0Jc2VxX3B1dHMobSwgIkxvYWQgdHlwZTogIiBNT0RVTEVQUk9DU1RSSU5HICJcblxuIik7Ci0Jc2VxX3ByaW50ZihtLCAiZnJlcXVlbmN5ID0gJWx1IGtIelxuIiwKLQkJdHlwaG9vbl91bml0LmN1cmZyZXEgPj4gNCk7Ci0Jc2VxX3ByaW50ZihtLCAidm9sdW1lID0gJWRcbiIsIHR5cGhvb25fdW5pdC5jdXJ2b2wpOwotCXNlcV9wcmludGYobSwgIm11dGUgPSAlc1xuIiwgdHlwaG9vbl91bml0Lm11dGVkID8KLQkJIm9uIiA6ICJvZmYiKTsKLQlzZXFfcHJpbnRmKG0sICJpb2Jhc2UgPSAweCV4XG4iLCB0eXBob29uX3VuaXQuaW9iYXNlKTsKLQlzZXFfcHJpbnRmKG0sICJtdXRlIGZyZXF1ZW5jeSA9ICVsdSBrSHpcbiIsCi0JCXR5cGhvb25fdW5pdC5tdXRlZnJlcSA+PiA0KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB0eXBob29uX3Byb2Nfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKLXsKLQlyZXR1cm4gc2luZ2xlX29wZW4oZmlsZSwgdHlwaG9vbl9wcm9jX3Nob3csIE5VTEwpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB0eXBob29uX3Byb2NfZm9wcyA9IHsKLQkub3duZXIJCT0gVEhJU19NT0RVTEUsCi0JLm9wZW4JCT0gdHlwaG9vbl9wcm9jX29wZW4sCi0JLnJlYWQJCT0gc2VxX3JlYWQsCi0JLmxsc2VlawkJPSBzZXFfbHNlZWssCi0JLnJlbGVhc2UJPSBzaW5nbGVfcmVsZWFzZSwKLX07Ci0jZW5kaWYgLyogQ09ORklHX1JBRElPX1RZUEhPT05fUFJPQ19GUyAqLwotCi1NT0RVTEVfQVVUSE9SKCJEci4gSGVucmlrIFNlaWRlbCIpOwotTU9EVUxFX0RFU0NSSVBUSU9OKCJBIGRyaXZlciBmb3IgdGhlIFR5cGhvb24gcmFkaW8gY2FyZCAoYS5rLmEuIEVjb1JhZGlvKS4iKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotc3RhdGljIGludCBpbyA9IC0xOwotc3RhdGljIGludCByYWRpb19uciA9IC0xOwotCi1tb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIFR5cGhvb24gY2FyZCAoMHgzMTYgb3IgMHgzMzYpIik7Ci1tb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7Ci0KLSNpZmRlZiBNT0RVTEUKLXN0YXRpYyB1bnNpZ25lZCBsb25nIG11dGVmcmVxOwotbW9kdWxlX3BhcmFtKG11dGVmcmVxLCB1bG9uZywgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG11dGVmcmVxLCAiRnJlcXVlbmN5IHVzZWQgd2hlbiBtdXRpbmcgdGhlIGNhcmQgKGluIGtIeikiKTsKLSNlbmRpZgotCiBzdGF0aWMgaW50IF9faW5pdCB0eXBob29uX2luaXQodm9pZCkKIHsKLSNpZmRlZiBNT0RVTEUKLQlpZiAoaW8gPT0gLTEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJyYWRpby10eXBob29uOiBZb3UgbXVzdCBzZXQgYW4gSS9PIGFkZHJlc3Mgd2l0aCBpbz0weDMxNiBvciBpbz0weDMzNlxuIik7CisJc3RydWN0IHR5cGhvb24gKmRldiA9ICZ0eXBob29uX2NhcmQ7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9ICZkZXYtPnY0bDJfZGV2OworCWludCByZXM7CisKKwlzdHJsY3B5KHY0bDJfZGV2LT5uYW1lLCAidHlwaG9vbiIsIHNpemVvZih2NGwyX2Rldi0+bmFtZSkpOworCWRldi0+aW8gPSBpbzsKKwlkZXYtPmN1cmZyZXEgPSBkZXYtPm11dGVmcmVxID0gbXV0ZWZyZXE7CisKKwlpZiAoZGV2LT5pbyA9PSAtMSkgeworCQl2NGwyX2Vycih2NGwyX2RldiwgIllvdSBtdXN0IHNldCBhbiBJL08gYWRkcmVzcyB3aXRoIGlvPTB4MzE2IG9yIGlvPTB4MzM2XG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCXR5cGhvb25fdW5pdC5pb2Jhc2UgPSBpbzsKIAotCWlmIChtdXRlZnJlcSA8IDg3MDAwIHx8IG11dGVmcmVxID4gMTA4NTAwKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicmFkaW8tdHlwaG9vbjogWW91IG11c3Qgc2V0IGEgZnJlcXVlbmN5IChpbiBrSHopIHVzZWQgd2hlbiBtdXRpbmcgdGhlIGNhcmQsXG4iKTsKLQkJcHJpbnRrKEtFUk5fRVJSICJyYWRpby10eXBob29uOiBlLmcuIHdpdGggXCJtdXRlZnJlcT04NzUwMFwiICg4NzAwMCA8PSBtdXRlZnJlcSA8PSAxMDg1MDApXG4iKTsKKwlpZiAoZGV2LT5tdXRlZnJlcSA8IDg3MDAwIHx8IGRldi0+bXV0ZWZyZXEgPiAxMDg1MDApIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJZb3UgbXVzdCBzZXQgYSBmcmVxdWVuY3kgKGluIGtIeikgdXNlZCB3aGVuIG11dGluZyB0aGUgY2FyZCxcbiIpOworCQl2NGwyX2Vycih2NGwyX2RldiwgImUuZy4gd2l0aCBcIm11dGVmcmVxPTg3NTAwXCIgKDg3MDAwIDw9IG11dGVmcmVxIDw9IDEwODUwMClcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JdHlwaG9vbl91bml0Lm11dGVmcmVxID0gbXV0ZWZyZXE7Ci0jZW5kaWYgLyogTU9EVUxFICovCiAKLQlwcmludGsoS0VSTl9JTkZPIEJBTk5FUik7Ci0JbXV0ZXhfaW5pdCgmdHlwaG9vbl91bml0LmxvY2spOwotCWlvID0gdHlwaG9vbl91bml0LmlvYmFzZTsKLQlpZiAoIXJlcXVlc3RfcmVnaW9uKGlvLCA4LCAidHlwaG9vbiIpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAicmFkaW8tdHlwaG9vbjogcG9ydCAweCV4IGFscmVhZHkgaW4gdXNlXG4iLAotCQkgICAgICAgdHlwaG9vbl91bml0LmlvYmFzZSk7CisJbXV0ZXhfaW5pdCgmZGV2LT5sb2NrKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKGRldi0+aW8sIDgsICJ0eXBob29uIikpIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJwb3J0IDB4JXggYWxyZWFkeSBpbiB1c2VcbiIsCisJCSAgICAgICBkZXYtPmlvKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLQl2aWRlb19zZXRfZHJ2ZGF0YSgmdHlwaG9vbl9yYWRpbywgJnR5cGhvb25fdW5pdCk7Ci0JaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmdHlwaG9vbl9yYWRpbywgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKLQkJcmVsZWFzZV9yZWdpb24oaW8sIDgpOworCXJlcyA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsIHY0bDJfZGV2KTsKKwlpZiAocmVzIDwgMCkgeworCQlyZWxlYXNlX3JlZ2lvbihkZXYtPmlvLCA4KTsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJDb3VsZCBub3QgcmVnaXN0ZXIgdjRsMl9kZXZpY2VcbiIpOworCQlyZXR1cm4gcmVzOworCX0KKwl2NGwyX2luZm8odjRsMl9kZXYsIEJBTk5FUik7CisKKwlzdHJsY3B5KGRldi0+dmRldi5uYW1lLCB2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKGRldi0+dmRldi5uYW1lKSk7CisJZGV2LT52ZGV2LnY0bDJfZGV2ID0gdjRsMl9kZXY7CisJZGV2LT52ZGV2LmZvcHMgPSAmdHlwaG9vbl9mb3BzOworCWRldi0+dmRldi5pb2N0bF9vcHMgPSAmdHlwaG9vbl9pb2N0bF9vcHM7CisJZGV2LT52ZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmZGV2LT52ZGV2LCBkZXYpOworCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmRldi0+dmRldiwgVkZMX1RZUEVfUkFESU8sIHJhZGlvX25yKSA8IDApIHsKKwkJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7CisJCXJlbGVhc2VfcmVnaW9uKGRldi0+aW8sIDgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JcHJpbnRrKEtFUk5fSU5GTyAicmFkaW8tdHlwaG9vbjogcG9ydCAweCV4LlxuIiwgdHlwaG9vbl91bml0LmlvYmFzZSk7Ci0JcHJpbnRrKEtFUk5fSU5GTyAicmFkaW8tdHlwaG9vbjogbXV0ZSBmcmVxdWVuY3kgaXMgJWx1IGtIei5cbiIsCi0JICAgICAgIHR5cGhvb25fdW5pdC5tdXRlZnJlcSk7Ci0JdHlwaG9vbl91bml0Lm11dGVmcmVxIDw8PSA0OworCXY0bDJfaW5mbyh2NGwyX2RldiwgInBvcnQgMHgleC5cbiIsIGRldi0+aW8pOworCXY0bDJfaW5mbyh2NGwyX2RldiwgIm11dGUgZnJlcXVlbmN5IGlzICVsdSBrSHouXG4iLCBkZXYtPm11dGVmcmVxKTsKKwlkZXYtPm11dGVmcmVxIDw8PSA0OwogCiAJLyogbXV0ZSBjYXJkIC0gcHJldmVudHMgbm9pc3kgYm9vdHVwcyAqLwotCXR5cGhvb25fbXV0ZSgmdHlwaG9vbl91bml0KTsKLQotI2lmZGVmIENPTkZJR19SQURJT19UWVBIT09OX1BST0NfRlMKLQlpZiAoIXByb2NfY3JlYXRlKCJkcml2ZXIvcmFkaW8tdHlwaG9vbiIsIDAsIE5VTEwsICZ0eXBob29uX3Byb2NfZm9wcykpCi0JCXByaW50ayhLRVJOX0VSUiAicmFkaW8tdHlwaG9vbjogcmVnaXN0ZXJpbmcgL3Byb2MvZHJpdmVyL3JhZGlvLXR5cGhvb24gZmFpbGVkXG4iKTsKLSNlbmRpZgorCXR5cGhvb25fbXV0ZShkZXYpOwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCB0eXBob29uX2NsZWFudXBfbW9kdWxlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgdHlwaG9vbl9leGl0KHZvaWQpCiB7CisJc3RydWN0IHR5cGhvb24gKmRldiA9ICZ0eXBob29uX2NhcmQ7CiAKLSNpZmRlZiBDT05GSUdfUkFESU9fVFlQSE9PTl9QUk9DX0ZTCi0JcmVtb3ZlX3Byb2NfZW50cnkoImRyaXZlci9yYWRpby10eXBob29uIiwgTlVMTCk7Ci0jZW5kaWYKLQotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZ0eXBob29uX3JhZGlvKTsKLQlyZWxlYXNlX3JlZ2lvbihpbywgOCk7CisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmRldi0+dmRldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7CisJcmVsZWFzZV9yZWdpb24oZGV2LT5pbywgOCk7CiB9CiAKIG1vZHVsZV9pbml0KHR5cGhvb25faW5pdCk7Ci1tb2R1bGVfZXhpdCh0eXBob29uX2NsZWFudXBfbW9kdWxlKTsKK21vZHVsZV9leGl0KHR5cGhvb25fZXhpdCk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvcmFkaW8vcmFkaW8tem9sdHJpeC5jIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby16b2x0cml4LmMKaW5kZXggZDJhYzE3ZS4uMWY4NWYyMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby16b2x0cml4LmMKKysrIGIvZHJpdmVycy9tZWRpYS9yYWRpby9yYWRpby16b2x0cml4LmMKQEAgLTMzLDMzICszMywxNiBAQAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4JCS8qIEluaXRkYXRhICAgICAgICAgICAgICAgICAgICAgICAqLwogI2luY2x1ZGUgPGxpbnV4L2lvcG9ydC5oPgkvKiByZXF1ZXN0X3JlZ2lvbgkJICAqLwogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CS8qIHVkZWxheSwgbXNsZWVwICAgICAgICAgICAgICAgICAqLwotI2luY2x1ZGUgPGFzbS9pby5oPgkJLyogb3V0Yiwgb3V0Yl9wICAgICAgICAgICAgICAgICAgICovCi0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4JLyogY29weSB0by9mcm9tIHVzZXIgICAgICAgICAgICAgICovCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CS8qIGtlcm5lbCByYWRpbyBzdHJ1Y3RzICAgICAgICAgICAqLwotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+ICAgICAgLyogZm9yIEtFUk5FTF9WRVJTSU9OIE1BQ1JPICAgICAqLworI2luY2x1ZGUgPGxpbnV4L2lvLmg+CQkvKiBvdXRiLCBvdXRiX3AgICAgICAgICAgICAgICAgICAgKi8KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KIAotI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4gICAgICAvKiBmb3IgS0VSTkVMX1ZFUlNJT04gTUFDUk8gICAgICovCi0jZGVmaW5lIFJBRElPX1ZFUlNJT04gS0VSTkVMX1ZFUlNJT04oMCwwLDIpCi0KLXN0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKLQl7Ci0JCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKLQkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSAxLAotCQkuZGVmYXVsdF92YWx1ZSA9IDEsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQl9LHsKLQkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9BVURJT19WT0xVTUUsCi0JCS5uYW1lICAgICAgICAgID0gIlZvbHVtZSIsCi0JCS5taW5pbXVtICAgICAgID0gMCwKLQkJLm1heGltdW0gICAgICAgPSA2NTUzNSwKLQkJLnN0ZXAgICAgICAgICAgPSA0MDk2LAotCQkuZGVmYXVsdF92YWx1ZSA9IDB4ZmYsCi0JCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQl9Ci19OworTU9EVUxFX0FVVEhPUigiQy52YW4gU2NoYWlrIik7CitNT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgWm9sdHJpeCBSYWRpbyBQbHVzLiIpOworTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAjaWZuZGVmIENPTkZJR19SQURJT19aT0xUUklYX1BPUlQKICNkZWZpbmUgQ09ORklHX1JBRElPX1pPTFRSSVhfUE9SVCAtMQpAQCAtNjgsOSArNTEsMTYgQEAKIHN0YXRpYyBpbnQgaW8gPSBDT05GSUdfUkFESU9fWk9MVFJJWF9QT1JUOwogc3RhdGljIGludCByYWRpb19uciA9IC0xOwogCi1zdHJ1Y3Qgem9sX2RldmljZSB7Ci0JdW5zaWduZWQgbG9uZyBpbl91c2U7Ci0JaW50IHBvcnQ7Cittb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7CitNT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIFpvbHRyaXggUmFkaW8gUGx1cyAoMHgyMGMgb3IgMHgzMGMpIik7Cittb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7CisKKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAwLCAyKQorCitzdHJ1Y3Qgem9sdHJpeCB7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmRldjsKKwlpbnQgaW87CiAJaW50IGN1cnZvbDsKIAl1bnNpZ25lZCBsb25nIGN1cmZyZXE7CiAJaW50IG11dGVkOwpAQCAtNzgsMTYxICs2OCwxNTggQEAKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKIH07CiAKLXN0YXRpYyBpbnQgem9sX3NldHZvbChzdHJ1Y3Qgem9sX2RldmljZSAqZGV2LCBpbnQgdm9sKQorc3RhdGljIHN0cnVjdCB6b2x0cml4IHpvbHRyaXhfY2FyZDsKKworc3RhdGljIGludCB6b2xfc2V0dm9sKHN0cnVjdCB6b2x0cml4ICp6b2wsIGludCB2b2wpCiB7Ci0JZGV2LT5jdXJ2b2wgPSB2b2w7Ci0JaWYgKGRldi0+bXV0ZWQpCisJem9sLT5jdXJ2b2wgPSB2b2w7CisJaWYgKHpvbC0+bXV0ZWQpCiAJCXJldHVybiAwOwogCi0JbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwltdXRleF9sb2NrKCZ6b2wtPmxvY2spOwogCWlmICh2b2wgPT0gMCkgewotCQlvdXRiKDAsIGlvKTsKLQkJb3V0YigwLCBpbyk7Ci0JCWluYihpbyArIDMpOyAgICAvKiBab2x0cml4IG5lZWRzIHRvIGJlIHJlYWQgdG8gY29uZmlybSAqLwotCQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJCW91dGIoMCwgem9sLT5pbyk7CisJCW91dGIoMCwgem9sLT5pbyk7CisJCWluYih6b2wtPmlvICsgMyk7ICAgIC8qIFpvbHRyaXggbmVlZHMgdG8gYmUgcmVhZCB0byBjb25maXJtICovCisJCW11dGV4X3VubG9jaygmem9sLT5sb2NrKTsKIAkJcmV0dXJuIDA7CiAJfQogCi0Jb3V0YihkZXYtPmN1cnZvbC0xLCBpbyk7CisJb3V0Yih6b2wtPmN1cnZvbC0xLCB6b2wtPmlvKTsKIAltc2xlZXAoMTApOwotCWluYihpbyArIDIpOwotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwlpbmIoem9sLT5pbyArIDIpOworCW11dGV4X3VubG9jaygmem9sLT5sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgem9sX211dGUoc3RydWN0IHpvbF9kZXZpY2UgKmRldikKK3N0YXRpYyB2b2lkIHpvbF9tdXRlKHN0cnVjdCB6b2x0cml4ICp6b2wpCiB7Ci0JZGV2LT5tdXRlZCA9IDE7Ci0JbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKLQlvdXRiKDAsIGlvKTsKLQlvdXRiKDAsIGlvKTsKLQlpbmIoaW8gKyAzKTsgICAgICAgICAgICAvKiBab2x0cml4IG5lZWRzIHRvIGJlIHJlYWQgdG8gY29uZmlybSAqLwotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwl6b2wtPm11dGVkID0gMTsKKwltdXRleF9sb2NrKCZ6b2wtPmxvY2spOworCW91dGIoMCwgem9sLT5pbyk7CisJb3V0YigwLCB6b2wtPmlvKTsKKwlpbmIoem9sLT5pbyArIDMpOyAgICAgICAgICAgIC8qIFpvbHRyaXggbmVlZHMgdG8gYmUgcmVhZCB0byBjb25maXJtICovCisJbXV0ZXhfdW5sb2NrKCZ6b2wtPmxvY2spOwogfQogCi1zdGF0aWMgdm9pZCB6b2xfdW5tdXRlKHN0cnVjdCB6b2xfZGV2aWNlICpkZXYpCitzdGF0aWMgdm9pZCB6b2xfdW5tdXRlKHN0cnVjdCB6b2x0cml4ICp6b2wpCiB7Ci0JZGV2LT5tdXRlZCA9IDA7Ci0Jem9sX3NldHZvbChkZXYsIGRldi0+Y3Vydm9sKTsKKwl6b2wtPm11dGVkID0gMDsKKwl6b2xfc2V0dm9sKHpvbCwgem9sLT5jdXJ2b2wpOwogfQogCi1zdGF0aWMgaW50IHpvbF9zZXRmcmVxKHN0cnVjdCB6b2xfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZnJlcSkKK3N0YXRpYyBpbnQgem9sX3NldGZyZXEoc3RydWN0IHpvbHRyaXggKnpvbCwgdW5zaWduZWQgbG9uZyBmcmVxKQogewogCS8qIHR1bmVzIHRoZSByYWRpbyB0byB0aGUgZGVzaXJlZCBmcmVxdWVuY3kgKi8KKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gJnpvbC0+djRsMl9kZXY7CiAJdW5zaWduZWQgbG9uZyBsb25nIGJpdG1hc2ssIGYsIG07Ci0JdW5zaWduZWQgaW50IHN0ZXJlbyA9IGRldi0+c3RlcmVvOworCXVuc2lnbmVkIGludCBzdGVyZW8gPSB6b2wtPnN0ZXJlbzsKIAlpbnQgaTsKIAogCWlmIChmcmVxID09IDApIHsKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiem9sdHJpeDogcmVjZWl2ZWQgemVybyBmcmVxLiBGYWlsZWQgdG8gc2V0LlxuIik7CisJCXY0bDJfd2Fybih2NGwyX2RldiwgImNhbm5vdCBzZXQgYSBmcmVxdWVuY3kgb2YgMC5cbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAltID0gKGZyZXEgLyAxNjAgLSA4ODAwKSAqIDI7Ci0JZiA9ICh1bnNpZ25lZCBsb25nIGxvbmcpIG0gKyAweDRkMWM7CisJZiA9ICh1bnNpZ25lZCBsb25nIGxvbmcpbSArIDB4NGQxYzsKIAogCWJpdG1hc2sgPSAweGM0ODA0MDJjMTAwODAwMDB1bGw7CiAJaSA9IDQ1OwogCi0JbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwltdXRleF9sb2NrKCZ6b2wtPmxvY2spOwogCi0Jb3V0YigwLCBpbyk7Ci0Jb3V0YigwLCBpbyk7Ci0JaW5iKGlvICsgMyk7ICAgICAgICAgICAgLyogWm9sdHJpeCBuZWVkcyB0byBiZSByZWFkIHRvIGNvbmZpcm0gKi8KKwl6b2wtPmN1cmZyZXEgPSBmcmVxOwogCi0Jb3V0YigweDQwLCBpbyk7Ci0Jb3V0YigweGMwLCBpbyk7CisJb3V0YigwLCB6b2wtPmlvKTsKKwlvdXRiKDAsIHpvbC0+aW8pOworCWluYih6b2wtPmlvICsgMyk7ICAgICAgICAgICAgLyogWm9sdHJpeCBuZWVkcyB0byBiZSByZWFkIHRvIGNvbmZpcm0gKi8KIAotCWJpdG1hc2sgPSAoYml0bWFzayBeICgoZiAmIDB4ZmYpIDw8IDQ3KSBeICgoZiAmIDB4ZmYwMCkgPDwgMzApIF4gKCBzdGVyZW8gPDwgMzEpKTsKKwlvdXRiKDB4NDAsIHpvbC0+aW8pOworCW91dGIoMHhjMCwgem9sLT5pbyk7CisKKwliaXRtYXNrID0gKGJpdG1hc2sgXiAoKGYgJiAweGZmKSA8PCA0NykgXiAoKGYgJiAweGZmMDApIDw8IDMwKSBeIChzdGVyZW8gPDwgMzEpKTsKIAl3aGlsZSAoaS0tKSB7CiAJCWlmICgoYml0bWFzayAmIDB4ODAwMDAwMDAwMDAwMDAwMHVsbCkgIT0gMCkgewotCQkJb3V0YigweDgwLCBpbyk7CisJCQlvdXRiKDB4ODAsIHpvbC0+aW8pOwogCQkJdWRlbGF5KDUwKTsKLQkJCW91dGIoMHgwMCwgaW8pOworCQkJb3V0YigweDAwLCB6b2wtPmlvKTsKIAkJCXVkZWxheSg1MCk7Ci0JCQlvdXRiKDB4ODAsIGlvKTsKKwkJCW91dGIoMHg4MCwgem9sLT5pbyk7CiAJCQl1ZGVsYXkoNTApOwogCQl9IGVsc2UgewotCQkJb3V0YigweGMwLCBpbyk7CisJCQlvdXRiKDB4YzAsIHpvbC0+aW8pOwogCQkJdWRlbGF5KDUwKTsKLQkJCW91dGIoMHg0MCwgaW8pOworCQkJb3V0YigweDQwLCB6b2wtPmlvKTsKIAkJCXVkZWxheSg1MCk7Ci0JCQlvdXRiKDB4YzAsIGlvKTsKKwkJCW91dGIoMHhjMCwgem9sLT5pbyk7CiAJCQl1ZGVsYXkoNTApOwogCQl9CiAJCWJpdG1hc2sgKj0gMjsKIAl9CiAJLyogdGVybWluYXRpb24gc2VxdWVuY2UgKi8KLQlvdXRiKDB4ODAsIGlvKTsKLQlvdXRiKDB4YzAsIGlvKTsKLQlvdXRiKDB4NDAsIGlvKTsKKwlvdXRiKDB4ODAsIHpvbC0+aW8pOworCW91dGIoMHhjMCwgem9sLT5pbyk7CisJb3V0YigweDQwLCB6b2wtPmlvKTsKIAl1ZGVsYXkoMTAwMCk7Ci0JaW5iKGlvKzIpOworCWluYih6b2wtPmlvICsgMik7CiAKIAl1ZGVsYXkoMTAwMCk7CiAKLQlpZiAoZGV2LT5tdXRlZCkKLQl7Ci0JCW91dGIoMCwgaW8pOwotCQlvdXRiKDAsIGlvKTsKLQkJaW5iKGlvICsgMyk7CisJaWYgKHpvbC0+bXV0ZWQpIHsKKwkJb3V0YigwLCB6b2wtPmlvKTsKKwkJb3V0YigwLCB6b2wtPmlvKTsKKwkJaW5iKHpvbC0+aW8gKyAzKTsKIAkJdWRlbGF5KDEwMDApOwogCX0KIAotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwltdXRleF91bmxvY2soJnpvbC0+bG9jayk7CiAKLQlpZighZGV2LT5tdXRlZCkKLQl7Ci0JCXpvbF9zZXR2b2woZGV2LCBkZXYtPmN1cnZvbCk7Ci0JfQorCWlmICghem9sLT5tdXRlZCkKKwkJem9sX3NldHZvbCh6b2wsIHpvbC0+Y3Vydm9sKTsKIAlyZXR1cm4gMDsKIH0KIAogLyogR2V0IHNpZ25hbCBzdHJlbmd0aCAqLwotCi1zdGF0aWMgaW50IHpvbF9nZXRzaWdzdHIoc3RydWN0IHpvbF9kZXZpY2UgKmRldikKK3N0YXRpYyBpbnQgem9sX2dldHNpZ3N0cihzdHJ1Y3Qgem9sdHJpeCAqem9sKQogewogCWludCBhLCBiOwogCi0JbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKLQlvdXRiKDB4MDAsIGlvKTsgICAgICAgICAvKiBUaGlzIHN0dWZmIEkgZm91bmQgdG8gZG8gbm90aGluZyAqLwotCW91dGIoZGV2LT5jdXJ2b2wsIGlvKTsKKwltdXRleF9sb2NrKCZ6b2wtPmxvY2spOworCW91dGIoMHgwMCwgem9sLT5pbyk7ICAgICAgICAgLyogVGhpcyBzdHVmZiBJIGZvdW5kIHRvIGRvIG5vdGhpbmcgKi8KKwlvdXRiKHpvbC0+Y3Vydm9sLCB6b2wtPmlvKTsKIAltc2xlZXAoMjApOwogCi0JYSA9IGluYihpbyk7CisJYSA9IGluYih6b2wtPmlvKTsKIAltc2xlZXAoMTApOwotCWIgPSBpbmIoaW8pOworCWIgPSBpbmIoem9sLT5pbyk7CiAKLQltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJbXV0ZXhfdW5sb2NrKCZ6b2wtPmxvY2spOwogCiAJaWYgKGEgIT0gYikKLQkJcmV0dXJuICgwKTsKKwkJcmV0dXJuIDA7CiAKLQlpZiAoKGEgPT0gMHhjZikgfHwgKGEgPT0gMHhkZikgIC8qIEkgZm91bmQgdGhpcyBvdXQgYnkgcGxheWluZyAqLwotCQl8fCAoYSA9PSAweGVmKSkgICAgICAgLyogd2l0aCBhIGJpbmFyeSBzY2FubmVyIG9uIHRoZSBjYXJkIGlvICovCi0JCXJldHVybiAoMSk7Ci0JcmV0dXJuICgwKTsKKwkvKiBJIGZvdW5kIHRoaXMgb3V0IGJ5IHBsYXlpbmcgd2l0aCBhIGJpbmFyeSBzY2FubmVyIG9uIHRoZSBjYXJkIGlvICovCisJcmV0dXJuIGEgPT0gMHhjZiB8fCBhID09IDB4ZGYgfHwgYSA9PSAweGVmOwogfQogCi1zdGF0aWMgaW50IHpvbF9pc19zdGVyZW8gKHN0cnVjdCB6b2xfZGV2aWNlICpkZXYpCitzdGF0aWMgaW50IHpvbF9pc19zdGVyZW8oc3RydWN0IHpvbHRyaXggKnpvbCkKIHsKIAlpbnQgeDEsIHgyOwogCi0JbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwltdXRleF9sb2NrKCZ6b2wtPmxvY2spOwogCi0Jb3V0YigweDAwLCBpbyk7Ci0Jb3V0YihkZXYtPmN1cnZvbCwgaW8pOworCW91dGIoMHgwMCwgem9sLT5pbyk7CisJb3V0Yih6b2wtPmN1cnZvbCwgem9sLT5pbyk7CiAJbXNsZWVwKDIwKTsKIAotCXgxID0gaW5iKGlvKTsKKwl4MSA9IGluYih6b2wtPmlvKTsKIAltc2xlZXAoMTApOwotCXgyID0gaW5iKGlvKTsKKwl4MiA9IGluYih6b2wtPmlvKTsKIAotCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwltdXRleF91bmxvY2soJnpvbC0+bG9jayk7CiAKLQlpZiAoKHgxID09IHgyKSAmJiAoeDEgPT0gMHhjZikpCi0JCXJldHVybiAxOwotCXJldHVybiAwOworCXJldHVybiB4MSA9PSB4MiAmJiB4MSA9PSAweGNmOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCkBAIC0yNDAsNTkgKzIyNyw1NCBAQAogewogCXN0cmxjcHkodi0+ZHJpdmVyLCAicmFkaW8tem9sdHJpeCIsIHNpemVvZih2LT5kcml2ZXIpKTsKIAlzdHJsY3B5KHYtPmNhcmQsICJab2x0cml4IFJhZGlvIiwgc2l6ZW9mKHYtPmNhcmQpKTsKLQlzcHJpbnRmKHYtPmJ1c19pbmZvLCAiSVNBIik7CisJc3RybGNweSh2LT5idXNfaW5mbywgIklTQSIsIHNpemVvZih2LT5idXNfaW5mbykpOwogCXYtPnZlcnNpb24gPSBSQURJT19WRVJTSU9OOwotCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSOworCXYtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1RVTkVSIHwgVjRMMl9DQVBfUkFESU87CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCXN0cnVjdCB6b2xfZGV2aWNlICp6b2wgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB6b2x0cml4ICp6b2wgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJaWYgKHYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJc3RybGNweSh2LT5uYW1lLCAiRk0iLCBzaXplb2Yodi0+bmFtZSkpOwogCXYtPnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwotCXYtPnJhbmdlbG93ID0gKDg4KjE2MDAwKTsKLQl2LT5yYW5nZWhpZ2ggPSAoMTA4KjE2MDAwKTsKLQl2LT5yeHN1YmNoYW5zID0gVjRMMl9UVU5FUl9TVUJfTU9OT3xWNEwyX1RVTkVSX1NVQl9TVEVSRU87CisJdi0+cmFuZ2Vsb3cgPSA4OCAqIDE2MDAwOworCXYtPnJhbmdlaGlnaCA9IDEwOCAqIDE2MDAwOworCXYtPnJ4c3ViY2hhbnMgPSBWNEwyX1RVTkVSX1NVQl9NT05PIHwgVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwogCXYtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1c7CiAJaWYgKHpvbF9pc19zdGVyZW8oem9sKSkKIAkJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9TVEVSRU87CiAJZWxzZQogCQl2LT5hdWRtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87Ci0Jdi0+c2lnbmFsID0gMHhGRkZGKnpvbF9nZXRzaWdzdHIoem9sKTsKKwl2LT5zaWduYWwgPSAweEZGRkYgKiB6b2xfZ2V0c2lnc3RyKHpvbCk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJCXN0cnVjdCB2NGwyX3R1bmVyICp2KQogewotCWlmICh2LT5pbmRleCA+IDApCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiAwOworCXJldHVybiB2LT5pbmRleCA/IC1FSU5WQUwgOiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCB6b2xfZGV2aWNlICp6b2wgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB6b2x0cml4ICp6b2wgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCi0Jem9sLT5jdXJmcmVxID0gZi0+ZnJlcXVlbmN5OwotCWlmICh6b2xfc2V0ZnJlcSh6b2wsIHpvbC0+Y3VyZnJlcSkgIT0gMCkgewotCQlwcmludGsoS0VSTl9XQVJOSU5HICJ6b2x0cml4OiBTZXQgZnJlcXVlbmN5IGZhaWxlZC5cbiIpOworCWlmICh6b2xfc2V0ZnJlcSh6b2wsIGYtPmZyZXF1ZW5jeSkgIT0gMCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQogewotCXN0cnVjdCB6b2xfZGV2aWNlICp6b2wgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXN0cnVjdCB6b2x0cml4ICp6b2wgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CiAJZi0+ZnJlcXVlbmN5ID0gem9sLT5jdXJmcmVxOwpAQCAtMzAyLDE0ICsyODQsMTEgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKIHsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7Ci0JCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7Ci0JCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAotCQkJCQkJc2l6ZW9mKCpxYykpOwotCQkJcmV0dXJuIDA7Ci0JCX0KKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAxKTsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwgNDA5NiwgNjU1MzUpOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KQEAgLTMxNyw3ICsyOTYsNyBAQAogc3RhdGljIGludCB2aWRpb2NfZ19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHpvbF9kZXZpY2UgKnpvbCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisJc3RydWN0IHpvbHRyaXggKnpvbCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgpAQCAtMzMzLDcgKzMxMiw3IEBACiBzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3Qgem9sX2RldmljZSAqem9sID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3Qgem9sdHJpeCAqem9sID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0zNDEsNDMgKzMyMCwzMCBAQAogCQkJem9sX211dGUoem9sKTsKIAkJZWxzZSB7CiAJCQl6b2xfdW5tdXRlKHpvbCk7Ci0JCQl6b2xfc2V0dm9sKHpvbCx6b2wtPmN1cnZvbCk7CisJCQl6b2xfc2V0dm9sKHpvbCwgem9sLT5jdXJ2b2wpOwogCQl9CiAJCXJldHVybiAwOwogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQl6b2xfc2V0dm9sKHpvbCxjdHJsLT52YWx1ZS80MDk2KTsKKwkJem9sX3NldHZvbCh6b2wsIGN0cmwtPnZhbHVlIC8gNDA5Nik7CiAJCXJldHVybiAwOwogCX0KIAl6b2wtPnN0ZXJlbyA9IDE7Ci0JaWYgKHpvbF9zZXRmcmVxKHpvbCwgem9sLT5jdXJmcmVxKSAhPSAwKSB7Ci0JCXByaW50ayhLRVJOX1dBUk5JTkcgInpvbHRyaXg6IFNldCBmcmVxdWVuY3kgZmFpbGVkLlxuIik7CisJaWYgKHpvbF9zZXRmcmVxKHpvbCwgem9sLT5jdXJmcmVxKSAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9CiAjaWYgMAogLyogRklYTUU6IEltcGxlbWVudCBzdGVyZW8vbW9ubyBzd2l0Y2ggb24gVjRMMiAqLwotCQkJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9TVEVSRU8pIHsKLQkJCQl6b2wtPnN0ZXJlbyA9IDE7Ci0JCQkJem9sX3NldGZyZXEoem9sLCB6b2wtPmN1cmZyZXEpOwotCQkJfQotCQkJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9NT05PKSB7Ci0JCQkJem9sLT5zdGVyZW8gPSAwOwotCQkJCXpvbF9zZXRmcmVxKHpvbCwgem9sLT5jdXJmcmVxKTsKLQkJCX0KKwlpZiAodi0+bW9kZSAmIFZJREVPX1NPVU5EX1NURVJFTykgeworCQl6b2wtPnN0ZXJlbyA9IDE7CisJCXpvbF9zZXRmcmVxKHpvbCwgem9sLT5jdXJmcmVxKTsKKwl9CisJaWYgKHYtPm1vZGUgJiBWSURFT19TT1VORF9NT05PKSB7CisJCXpvbC0+c3RlcmVvID0gMDsKKwkJem9sX3NldGZyZXEoem9sLCB6b2wtPmN1cmZyZXEpOworCX0KICNlbmRpZgogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAotCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKLXsKLQlpZiAoYS0+aW5kZXggPiAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCXN0cmNweShhLT5uYW1lLCAiUmFkaW8iKTsKLQlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCiB7CiAJKmkgPSAwOwpAQCAtMzg2LDM3ICszNTIsMzkgQEAKIAogc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwgdW5zaWduZWQgaW50IGkpCiB7Ci0JaWYgKGkgIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGkgPyAtRUlOVkFMIDogMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfYXVkaW8gKmEpCit7CisJYS0+aW5kZXggPSAwOworCXN0cmxjcHkoYS0+bmFtZSwgIlJhZGlvIiwgc2l6ZW9mKGEtPm5hbWUpKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKIHsKLQlpZiAoYS0+aW5kZXggIT0gMCkKLQkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIGEtPmluZGV4ID8gLUVJTlZBTCA6IDA7Cit9CisKK3N0YXRpYyBpbnQgem9sdHJpeF9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQorewogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHpvbF9kZXZpY2Ugem9sdHJpeF91bml0OwotCi1zdGF0aWMgaW50IHpvbHRyaXhfZXhjbHVzaXZlX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgaW50IHpvbHRyaXhfcmVsZWFzZShzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKLQlyZXR1cm4gdGVzdF9hbmRfc2V0X2JpdCgwLCAmem9sdHJpeF91bml0LmluX3VzZSkgPyAtRUJVU1kgOiAwOwotfQotCi1zdGF0aWMgaW50IHpvbHRyaXhfZXhjbHVzaXZlX3JlbGVhc2Uoc3RydWN0IGZpbGUgKmZpbGUpCi17Ci0JY2xlYXJfYml0KDAsICZ6b2x0cml4X3VuaXQuaW5fdXNlKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB6b2x0cml4X2ZvcHMgPQogewogCS5vd25lcgkJPSBUSElTX01PRFVMRSwKLQkub3BlbiAgICAgICAgICAgPSB6b2x0cml4X2V4Y2x1c2l2ZV9vcGVuLAotCS5yZWxlYXNlICAgICAgICA9IHpvbHRyaXhfZXhjbHVzaXZlX3JlbGVhc2UsCisJLm9wZW4gICAgICAgICAgID0gem9sdHJpeF9vcGVuLAorCS5yZWxlYXNlICAgICAgICA9IHpvbHRyaXhfcmVsZWFzZSwKIAkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAogfTsKIApAQCAtNDM1LDY3ICs0MDMsNzUgQEAKIAkudmlkaW9jX3NfY3RybCAgICAgID0gdmlkaW9jX3NfY3RybCwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHpvbHRyaXhfcmFkaW8gPSB7Ci0JLm5hbWUJCT0gIlpvbHRyaXggUmFkaW8gUGx1cyIsCi0JLmZvcHMgICAgICAgICAgID0gJnpvbHRyaXhfZm9wcywKLQkuaW9jdGxfb3BzIAk9ICZ6b2x0cml4X2lvY3RsX29wcywKLQkucmVsZWFzZQk9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAotfTsKLQogc3RhdGljIGludCBfX2luaXQgem9sdHJpeF9pbml0KHZvaWQpCiB7Ci0JaWYgKGlvID09IC0xKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiWW91IG11c3Qgc2V0IGFuIEkvTyBhZGRyZXNzIHdpdGggaW89MHg/Pz9cbiIpOworCXN0cnVjdCB6b2x0cml4ICp6b2wgPSAmem9sdHJpeF9jYXJkOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSAmem9sLT52NGwyX2RldjsKKwlpbnQgcmVzOworCisJc3RybGNweSh2NGwyX2Rldi0+bmFtZSwgInpvbHRyaXgiLCBzaXplb2YodjRsMl9kZXYtPm5hbWUpKTsKKwl6b2wtPmlvID0gaW87CisJaWYgKHpvbC0+aW8gPT0gLTEpIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJZb3UgbXVzdCBzZXQgYW4gSS9PIGFkZHJlc3Mgd2l0aCBpbz0weDIwYyBvciAweDMwY1xuIik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlpZiAoKGlvICE9IDB4MjBjKSAmJiAoaW8gIT0gMHgzMGMpKSB7Ci0JCXByaW50ayhLRVJOX0VSUiAiem9sdHJpeDogaW52YWxpZCBwb3J0LCB0cnkgMHgyMGMgb3IgMHgzMGNcbiIpOworCWlmICh6b2wtPmlvICE9IDB4MjBjICYmIHpvbC0+aW8gIT0gMHgzMGMpIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJpbnZhbGlkIHBvcnQsIHRyeSAweDIwYyBvciAweDMwY1xuIik7CiAJCXJldHVybiAtRU5YSU87CiAJfQogCi0JdmlkZW9fc2V0X2RydmRhdGEoJnpvbHRyaXhfcmFkaW8sICZ6b2x0cml4X3VuaXQpOwotCWlmICghcmVxdWVzdF9yZWdpb24oaW8sIDIsICJ6b2x0cml4IikpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ6b2x0cml4OiBwb3J0IDB4JXggYWxyZWFkeSBpbiB1c2VcbiIsIGlvKTsKKwlpZiAoIXJlcXVlc3RfcmVnaW9uKHpvbC0+aW8sIDIsICJ6b2x0cml4IikpIHsKKwkJdjRsMl9lcnIodjRsMl9kZXYsICJwb3J0IDB4JXggYWxyZWFkeSBpbiB1c2VcbiIsIHpvbC0+aW8pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCWlmICh2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJnpvbHRyaXhfcmFkaW8sIFZGTF9UWVBFX1JBRElPLCByYWRpb19ucikgPCAwKSB7Ci0JCXJlbGVhc2VfcmVnaW9uKGlvLCAyKTsKKwlyZXMgPSB2NGwyX2RldmljZV9yZWdpc3RlcihOVUxMLCB2NGwyX2Rldik7CisJaWYgKHJlcyA8IDApIHsKKwkJcmVsZWFzZV9yZWdpb24oem9sLT5pbywgMik7CisJCXY0bDJfZXJyKHY0bDJfZGV2LCAiQ291bGQgbm90IHJlZ2lzdGVyIHY0bDJfZGV2aWNlXG4iKTsKKwkJcmV0dXJuIHJlczsKKwl9CisKKwlzdHJsY3B5KHpvbC0+dmRldi5uYW1lLCB2NGwyX2Rldi0+bmFtZSwgc2l6ZW9mKHpvbC0+dmRldi5uYW1lKSk7CisJem9sLT52ZGV2LnY0bDJfZGV2ID0gdjRsMl9kZXY7CisJem9sLT52ZGV2LmZvcHMgPSAmem9sdHJpeF9mb3BzOworCXpvbC0+dmRldi5pb2N0bF9vcHMgPSAmem9sdHJpeF9pb2N0bF9vcHM7CisJem9sLT52ZGV2LnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZV9lbXB0eTsKKwl2aWRlb19zZXRfZHJ2ZGF0YSgmem9sLT52ZGV2LCB6b2wpOworCisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmem9sLT52ZGV2LCBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpIDwgMCkgeworCQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKHY0bDJfZGV2KTsKKwkJcmVsZWFzZV9yZWdpb24oem9sLT5pbywgMik7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQlwcmludGsoS0VSTl9JTkZPICJab2x0cml4IFJhZGlvIFBsdXMgY2FyZCBkcml2ZXIuXG4iKTsKKwl2NGwyX2luZm8odjRsMl9kZXYsICJab2x0cml4IFJhZGlvIFBsdXMgY2FyZCBkcml2ZXIuXG4iKTsKIAotCW11dGV4X2luaXQoJnpvbHRyaXhfdW5pdC5sb2NrKTsKKwltdXRleF9pbml0KCZ6b2wtPmxvY2spOwogCiAJLyogbXV0ZSBjYXJkIC0gcHJldmVudHMgbm9pc3kgYm9vdHVwcyAqLwogCiAJLyogdGhpcyBlbnN1cmVzIHRoYXQgdGhlIHZvbHVtZSBpcyBhbGwgdGhlIHdheSBkb3duICAqLwogCi0Jb3V0YigwLCBpbyk7Ci0Jb3V0YigwLCBpbyk7CisJb3V0YigwLCB6b2wtPmlvKTsKKwlvdXRiKDAsIHpvbC0+aW8pOwogCW1zbGVlcCgyMCk7Ci0JaW5iKGlvICsgMyk7CisJaW5iKHpvbC0+aW8gKyAzKTsKIAotCXpvbHRyaXhfdW5pdC5jdXJ2b2wgPSAwOwotCXpvbHRyaXhfdW5pdC5zdGVyZW8gPSAxOworCXpvbC0+Y3Vydm9sID0gMDsKKwl6b2wtPnN0ZXJlbyA9IDE7CiAKIAlyZXR1cm4gMDsKIH0KIAotTU9EVUxFX0FVVEhPUigiQy52YW4gU2NoYWlrIik7Ci1NT0RVTEVfREVTQ1JJUFRJT04oIkEgZHJpdmVyIGZvciB0aGUgWm9sdHJpeCBSYWRpbyBQbHVzLiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1tb2R1bGVfcGFyYW0oaW8sIGludCwgMCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGlvLCAiSS9PIGFkZHJlc3Mgb2YgdGhlIFpvbHRyaXggUmFkaW8gUGx1cyAoMHgyMGMgb3IgMHgzMGMpIik7Ci1tb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCB6b2x0cml4X2NsZWFudXBfbW9kdWxlKHZvaWQpCitzdGF0aWMgdm9pZCBfX2V4aXQgem9sdHJpeF9leGl0KHZvaWQpCiB7Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJnpvbHRyaXhfcmFkaW8pOwotCXJlbGVhc2VfcmVnaW9uKGlvLCAyKTsKKwlzdHJ1Y3Qgem9sdHJpeCAqem9sID0gJnpvbHRyaXhfY2FyZDsKKworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZ6b2wtPnZkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnpvbC0+djRsMl9kZXYpOworCXJlbGVhc2VfcmVnaW9uKHpvbC0+aW8sIDIpOwogfQogCiBtb2R1bGVfaW5pdCh6b2x0cml4X2luaXQpOwotbW9kdWxlX2V4aXQoem9sdHJpeF9jbGVhbnVwX21vZHVsZSk7Cittb2R1bGVfZXhpdCh6b2x0cml4X2V4aXQpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL0tjb25maWcKaW5kZXggMTljZjNiOC4uNzZiYWQ1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vS2NvbmZpZwpAQCAtMjQ5LDExICsyNDksMjUgQEAKIAkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQogCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHZwMjdzbXB4LgogCitjb21tZW50ICJSRFMgZGVjb2RlcnMiCisKK2NvbmZpZyBWSURFT19TQUE2NTg4CisJdHJpc3RhdGUgIlNBQTY1ODggUmFkaW8gQ2hpcCBSRFMgZGVjb2RlciBzdXBwb3J0IgorCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMKKworCWhlbHAKKwkgIFN1cHBvcnQgZm9yIHRoaXMgUmFkaW8gRGF0YSBTeXN0ZW0gKFJEUykgZGVjb2Rlci4gVGhpcyBhbGxvd3MKKwkgIHNlZWluZyByYWRpbyBzdGF0aW9uIGlkZW50aWZpY2F0aW9uIHRyYW5zbWl0dGVkIHVzaW5nIHRoaXMKKwkgIHN0YW5kYXJkLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzYWE2NTg4LgorCiBjb21tZW50ICJWaWRlbyBkZWNvZGVycyIKIAogY29uZmlnIFZJREVPX0JUODE5CiAJdHJpc3RhdGUgIkJUODE5QSBWaWRlb1N0cmVhbSBkZWNvZGVyIgotCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBJMkMKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgQlQ4MTlBIHZpZGVvIGRlY29kZXIuCiAKQEAgLTI2Miw3ICsyNzYsNyBAQAogCiBjb25maWcgVklERU9fQlQ4NTYKIAl0cmlzdGF0ZSAiQlQ4NTYgVmlkZW9TdHJlYW0gZGVjb2RlciIKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQwogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIEJUODU2IHZpZGVvIGRlY29kZXIuCiAKQEAgLTI3MSw3ICsyODUsNyBAQAogCiBjb25maWcgVklERU9fQlQ4NjYKIAl0cmlzdGF0ZSAiQlQ4NjYgVmlkZW9TdHJlYW0gZGVjb2RlciIKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQwogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIEJUODY2IHZpZGVvIGRlY29kZXIuCiAKQEAgLTI4MCw3ICsyOTQsNyBAQAogCiBjb25maWcgVklERU9fS1MwMTI3CiAJdHJpc3RhdGUgIktTMDEyNyB2aWRlbyBkZWNvZGVyIgotCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBJMkMKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgS1MwMTI3IHZpZGVvIGRlY29kZXIuCiAKQEAgLTMwNywzOCArMzIxLDE4IEBACiAKIGNvbmZpZyBWSURFT19TQUE3MTEwCiAJdHJpc3RhdGUgIlBoaWxpcHMgU0FBNzExMCB2aWRlbyBkZWNvZGVyIgotCWRlcGVuZHMgb24gVklERU9fVjRMMSAmJiBJMkMKKwlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgSTJDCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgdGhlIFBoaWxpcHMgU0FBNzExMCB2aWRlbyBkZWNvZGVycy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2FhNzExMC4KIAotY29uZmlnIFZJREVPX1NBQTcxMTEKLQl0cmlzdGF0ZSAiUGhpbGlwcyBTQUE3MTExIHZpZGVvIGRlY29kZXIiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQwotCS0tLWhlbHAtLS0KLQkgIFN1cHBvcnQgZm9yIHRoZSBQaGlsaXBzIFNBQTcxMSB2aWRlbyBkZWNvZGVyLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzYWE3MTExLgotCi1jb25maWcgVklERU9fU0FBNzExNAotCXRyaXN0YXRlICJQaGlsaXBzIFNBQTcxMTQgdmlkZW8gZGVjb2RlciIKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCi0JLS0taGVscC0tLQotCSAgU3VwcG9ydCBmb3IgdGhlIFBoaWxpcHMgU0FBNzExNCB2aWRlbyBkZWNvZGVyLiBUaGlzIGRyaXZlcgotCSAgaXMgdXNlZCBvbmx5IG9uIFpvcmFuIGRyaXZlciBhbmQgc2hvdWxkIGJlIG1vdmVkIHNvb24gdG8KLQkgIFNBQTcxMXggbW9kdWxlLgotCi0JICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKLQkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBzYWE3MTE0LgotCiBjb25maWcgVklERU9fU0FBNzExWAotCXRyaXN0YXRlICJQaGlsaXBzIFNBQTcxMTMvNC81IHZpZGVvIGRlY29kZXJzIgorCXRyaXN0YXRlICJQaGlsaXBzIFNBQTcxMTEvMy80LzUgdmlkZW8gZGVjb2RlcnMiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQwogCS0tLWhlbHAtLS0KLQkgIFN1cHBvcnQgZm9yIHRoZSBQaGlsaXBzIFNBQTcxMTMvNC81IHZpZGVvIGRlY29kZXJzLgorCSAgU3VwcG9ydCBmb3IgdGhlIFBoaWxpcHMgU0FBNzExMS8zLzQvNSB2aWRlbyBkZWNvZGVycy4KIAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgc2FhNzExNS4KQEAgLTM4Myw3ICszNzcsNyBAQAogCiBjb25maWcgVklERU9fVlBYMzIyMAogCXRyaXN0YXRlICJ2cHgzMjIwYSwgdnB4MzIxNmIgJiB2cHgzMjE0YyB2aWRlbyBkZWNvZGVycyIKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQwogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIFZQWDMyMnggdmlkZW8gZGVjb2RlcnMuCiAKQEAgLTQyMSw3ICs0MTUsNyBAQAogCiBjb25maWcgVklERU9fU0FBNzE4NQogCXRyaXN0YXRlICJQaGlsaXBzIFNBQTcxODUgdmlkZW8gZW5jb2RlciIKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQwogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIHRoZSBQaGlsaXBzIFNBQTcxODUgdmlkZW8gZW5jb2Rlci4KIApAQCAtNDMwLDcgKzQyNCw3IEBACiAKIGNvbmZpZyBWSURFT19BRFY3MTcwCiAJdHJpc3RhdGUgIkFuYWxvZyBEZXZpY2VzIEFEVjcxNzAgdmlkZW8gZW5jb2RlciIKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDEgJiYgSTJDCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIEkyQwogCS0tLWhlbHAtLS0KIAkgIFN1cHBvcnQgZm9yIHRoZSBBbmFsb2cgRGV2aWNlcyBBRFY3MTcwIHZpZGVvIGVuY29kZXIgZHJpdmVyCiAKQEAgLTQzOSw3ICs0MzMsNyBAQAogCiBjb25maWcgVklERU9fQURWNzE3NQogCXRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBBRFY3MTc1IHZpZGVvIGVuY29kZXIiCi0JZGVwZW5kcyBvbiBWSURFT19WNEwxICYmIEkyQworCWRlcGVuZHMgb24gVklERU9fVjRMMiAmJiBJMkMKIAktLS1oZWxwLS0tCiAJICBTdXBwb3J0IGZvciB0aGUgQW5hbG9nIERldmljZXMgQURWNzE3NSB2aWRlbyBlbmNvZGVyIGRyaXZlcgogCkBAIC00ODcsMTggKzQ4MSw2IEBACiAKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9LY29uZmlnIgogCi1jb25maWcgVklERU9fU0FBNjU4OAotCXRyaXN0YXRlICJTQUE2NTg4IFJhZGlvIENoaXAgUkRTIGRlY29kZXIgc3VwcG9ydCBvbiBCVDg0OCBjYXJkcyIKLQlkZXBlbmRzIG9uIEkyQyAmJiBWSURFT19CVDg0OAotCi0JaGVscAotCSAgU3VwcG9ydCBmb3IgIFJhZGlvIERhdGEgU3lzdGVtIChSRFMpIGRlY29kZXIuIFRoaXMgYWxsb3dzIHNlZWluZwotCSAgcmFkaW8gc3RhdGlvbiBpZGVudGlmaWNhdGlvbiB0cmFuc21pdHRlZCB1c2luZyB0aGlzIHN0YW5kYXJkLgotCSAgQ3VycmVudGx5LCBpdCB3b3JrcyBvbmx5IHdpdGggYnQ4eDggY2hpcHMuCi0KLQkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQotCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIHNhYTY1ODguCi0KIGNvbmZpZyBWSURFT19QTVMKIAl0cmlzdGF0ZSAiTWVkaWF2aXNpb24gUHJvIE1vdmllIFN0dWRpbyBWaWRlbyBGb3IgTGludXgiCiAJZGVwZW5kcyBvbiBJU0EgJiYgVklERU9fVjRMMQpAQCAtNjAyLDcgKzU4NCw2IEBACiBjb25maWcgVklERU9fVklOTwogCXRyaXN0YXRlICJTR0kgVmlubyBWaWRlbyBGb3IgTGludXggKEVYUEVSSU1FTlRBTCkiCiAJZGVwZW5kcyBvbiBJMkMgJiYgU0dJX0lQMjIgJiYgRVhQRVJJTUVOVEFMICYmIFZJREVPX1Y0TDIKLQlzZWxlY3QgSTJDX0FMR09fU0dJCiAJc2VsZWN0IFZJREVPX1NBQTcxOTEgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAloZWxwCiAJICBTYXkgWSBoZXJlIHRvIGJ1aWxkIGluIHN1cHBvcnQgZm9yIHRoZSBWaW5vIHZpZGVvIGlucHV0IHN5c3RlbSBmb3VuZApAQCAtNjM5LDcgKzYyMCw3IEBACiAJZGVwZW5kcyBvbiBQQ0kgJiYgVklERU9fVjRMMSAmJiBJMkMKIAlzZWxlY3QgVklERU9fU0FBNzE0Nl9WVgogCXNlbGVjdCBWSURFT19UVU5FUgotCXNlbGVjdCBWSURFT19TQUE3MTE1IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCisJc2VsZWN0IFZJREVPX1NBQTcxMVggaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAlzZWxlY3QgVklERU9fVERBOTg0MCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCXNlbGVjdCBWSURFT19URUE2NDE1QyBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCXNlbGVjdCBWSURFT19URUE2NDIwIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCkBAIC03MjgsMTMgKzcwOSw2IEBACiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNVDlNMDAxIGNhbWVyYXMgZnJvbSBNaWNyb24sIG1vbm9jaHJvbWUKIAkgIGFuZCBjb2xvdXIgbW9kZWxzLgogCi1jb25maWcgTVQ5TTAwMV9QQ0E5NTM2X1NXSVRDSAotCWJvb2wgInBjYTk1MzYgZGF0YXdpZHRoIHN3aXRjaCBmb3IgbXQ5bTAwMSIKLQlkZXBlbmRzIG9uIFNPQ19DQU1FUkFfTVQ5TTAwMSAmJiBHRU5FUklDX0dQSU8KLQloZWxwCi0JICBTZWxlY3QgdGhpcyBpZiB5b3VyIE1UOU0wMDEgY2FtZXJhIHVzZXMgYSBQQ0E5NTM2IEkyQyBHUElPCi0JICBleHRlbmRlciB0byBzd2l0Y2ggYmV0d2VlbiA4IGFuZCAxMCBiaXQgZGF0YXdpZHRoIG1vZGVzCi0KIGNvbmZpZyBTT0NfQ0FNRVJBX01UOU0xMTEKIAl0cmlzdGF0ZSAibXQ5bTExMSBhbmQgbXQ5bTExMiBzdXBwb3J0IgogCWRlcGVuZHMgb24gU09DX0NBTUVSQSAmJiBJMkMKQEAgLTc1NCwxMyArNzI4LDYgQEAKIAloZWxwCiAJICBUaGlzIGRyaXZlciBzdXBwb3J0cyBNVDlWMDIyIGNhbWVyYXMgZnJvbSBNaWNyb24KIAotY29uZmlnIE1UOVYwMjJfUENBOTUzNl9TV0lUQ0gKLQlib29sICJwY2E5NTM2IGRhdGF3aWR0aCBzd2l0Y2ggZm9yIG10OXYwMjIiCi0JZGVwZW5kcyBvbiBTT0NfQ0FNRVJBX01UOVYwMjIgJiYgR0VORVJJQ19HUElPCi0JaGVscAotCSAgU2VsZWN0IHRoaXMgaWYgeW91ciBNVDlWMDIyIGNhbWVyYSB1c2VzIGEgUENBOTUzNiBJMkMgR1BJTwotCSAgZXh0ZW5kZXIgdG8gc3dpdGNoIGJldHdlZW4gOCBhbmQgMTAgYml0IGRhdGF3aWR0aCBtb2RlcwotCiBjb25maWcgU09DX0NBTUVSQV9UVzk5MTAKIAl0cmlzdGF0ZSAidHc5OTEwIHN1cHBvcnQiCiAJZGVwZW5kcyBvbiBTT0NfQ0FNRVJBICYmIEkyQwpAQCAtNzc5LDYgKzc0NiwxMyBAQAogCWhlbHAKIAkgIFRoaXMgaXMgYSBvdjc3MnggY2FtZXJhIGRyaXZlcgogCitjb25maWcgVklERU9fTVgzCisJdHJpc3RhdGUgImkuTVgzeCBDYW1lcmEgU2Vuc29yIEludGVyZmFjZSBkcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19ERVYgJiYgTVgzX0lQVSAmJiBTT0NfQ0FNRVJBCisJc2VsZWN0IFZJREVPQlVGX0RNQV9DT05USUcKKwktLS1oZWxwLS0tCisJICBUaGlzIGlzIGEgdjRsMiBkcml2ZXIgZm9yIHRoZSBpLk1YM3ggQ2FtZXJhIFNlbnNvciBJbnRlcmZhY2UKKwogY29uZmlnIFZJREVPX1BYQTI3eAogCXRyaXN0YXRlICJQWEEyN3ggUXVpY2sgQ2FwdHVyZSBJbnRlcmZhY2UgZHJpdmVyIgogCWRlcGVuZHMgb24gVklERU9fREVWICYmIFBYQTI3eCAmJiBTT0NfQ0FNRVJBCkBAIC04MTcsNiArNzkxLDggQEAKIAogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvS2NvbmZpZyIKIAorc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL0tjb25maWciCisKIHNvdXJjZSAiZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvS2NvbmZpZyIKIAogc291cmNlICJkcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi9LY29uZmlnIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZSBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vTWFrZWZpbGUKaW5kZXggNzJmNmQwMy4uYjkwNDY3NCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL01ha2VmaWxlCkBAIC0zMCw3ICszMCw2IEBACiBvYmotJChDT05GSUdfVklERU9fVFZBVURJTykgKz0gdHZhdWRpby5vCiBvYmotJChDT05GSUdfVklERU9fVERBNzQzMikgKz0gdGRhNzQzMi5vCiBvYmotJChDT05GSUdfVklERU9fVERBOTg3NSkgKz0gdGRhOTg3NS5vCi1vYmotJChDT05GSUdfU09VTkRfVFZNSVhFUikgKz0gdHZtaXhlci5vCiAKIG9iai0kKENPTkZJR19WSURFT19TQUE2NTg4KSArPSBzYWE2NTg4Lm8KIG9iai0kKENPTkZJR19WSURFT19TQUE1MjQ2QSkgKz0gc2FhNTI0NmEubwpAQCAtNDMsOCArNDIsNiBAQAogb2JqLSQoQ09ORklHX1ZJREVPX1RFQTY0MTVDKSArPSB0ZWE2NDE1Yy5vCiBvYmotJChDT05GSUdfVklERU9fVEVBNjQyMCkgKz0gdGVhNjQyMC5vCiBvYmotJChDT05GSUdfVklERU9fU0FBNzExMCkgKz0gc2FhNzExMC5vCi1vYmotJChDT05GSUdfVklERU9fU0FBNzExMSkgKz0gc2FhNzExMS5vCi1vYmotJChDT05GSUdfVklERU9fU0FBNzExNCkgKz0gc2FhNzExNC5vCiBvYmotJChDT05GSUdfVklERU9fU0FBNzExWCkgKz0gc2FhNzExNS5vCiBvYmotJChDT05GSUdfVklERU9fU0FBNzE3WCkgKz0gc2FhNzE3eC5vCiBvYmotJChDT05GSUdfVklERU9fU0FBNzEyNykgKz0gc2FhNzEyNy5vCkBAIC0xMjIsNiArMTE5LDggQEAKIG9iai0kKENPTkZJR19VU0JfWkMwMzAxKSAgICAgICAgKz0gemMwMzAxLwogb2JqLSQoQ09ORklHX1VTQl9HU1BDQSkgICAgICAgICArPSBnc3BjYS8KIAorb2JqLSQoQ09ORklHX1ZJREVPX0hEUFZSKQkrPSBoZHB2ci8KKwogb2JqLSQoQ09ORklHX1VTQl9JQk1DQU0pICAgICAgICArPSB1c2J2aWRlby8KIG9iai0kKENPTkZJR19VU0JfS09OSUNBV0MpICAgICAgKz0gdXNidmlkZW8vCiBvYmotJChDT05GSUdfVVNCX1ZJQ0FNKSAgICAgICAgICs9IHVzYnZpZGVvLwpAQCAtMTM0LDEwICsxMzMsMTEgQEAKIG9iai0kKENPTkZJR19WSURFT19WSVZJKSArPSB2aXZpLm8KIG9iai0kKENPTkZJR19WSURFT19DWDIzODg1KSArPSBjeDIzODg1LwogCi1vYmotJChDT05GSUdfVklERU9fUFhBMjd4KQkrPSBweGFfY2FtZXJhLm8KK29iai0kKENPTkZJR19WSURFT19NWDMpCQkJKz0gbXgzX2NhbWVyYS5vCitvYmotJChDT05GSUdfVklERU9fUFhBMjd4KQkJKz0gcHhhX2NhbWVyYS5vCiBvYmotJChDT05GSUdfVklERU9fU0hfTU9CSUxFX0NFVSkJKz0gc2hfbW9iaWxlX2NldV9jYW1lcmEubwogb2JqLSQoQ09ORklHX1ZJREVPX09NQVAyKQkJKz0gb21hcDJjYW0ubwotb2JqLSQoQ09ORklHX1NPQ19DQU1FUkEpCSs9IHNvY19jYW1lcmEubworb2JqLSQoQ09ORklHX1NPQ19DQU1FUkEpCQkrPSBzb2NfY2FtZXJhLm8KIG9iai0kKENPTkZJR19TT0NfQ0FNRVJBX01UOU0wMDEpCSs9IG10OW0wMDEubwogb2JqLSQoQ09ORklHX1NPQ19DQU1FUkFfTVQ5TTExMSkJKz0gbXQ5bTExMS5vCiBvYmotJChDT05GSUdfU09DX0NBTUVSQV9NVDlUMDMxKQkrPSBtdDl0MDMxLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYWR2NzE3MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTcwLmMKaW5kZXggZTBlYjRmMy4uODczYzMwYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTcwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTcwLmMKQEAgLTM0LDE1ICszNCwxNiBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19lbmNvZGVyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJBbmFsb2cgRGV2aWNlcyBBRFY3MTcwIHZpZGVvIGVuY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJNYXhpbSBZZXZ0eXVzaGtpbiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCisKIHN0YXRpYyBpbnQgZGVidWc7CiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKQEAgLTUwLDM4ICs1MSw0MyBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IGFkdjcxNzAgeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAl1bnNpZ25lZCBjaGFyIHJlZ1sxMjhdOwogCi0JaW50IG5vcm07CisJdjRsMl9zdGRfaWQgbm9ybTsKIAlpbnQgaW5wdXQ7Ci0JaW50IGVuYWJsZTsKLQlpbnQgYnJpZ2h0OwotCWludCBjb250cmFzdDsKLQlpbnQgaHVlOwotCWludCBzYXQ7CiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBhZHY3MTcwICp0b19hZHY3MTcwKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IGFkdjcxNzAsIHNkKTsKK30KKwogc3RhdGljIGNoYXIgKmlucHV0c1tdID0geyAicGFzc190aHJvdWdoIiwgInBsYXlfYmFjayIgfTsKLXN0YXRpYyBjaGFyICpub3Jtc1tdID0geyAiUEFMIiwgIk5UU0MiIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IGFkdjcxNzBfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGFkdjcxNzBfd3JpdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKLQlzdHJ1Y3QgYWR2NzE3MCAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlzdHJ1Y3QgYWR2NzE3MCAqZW5jb2RlciA9IHRvX2FkdjcxNzAoc2QpOwogCiAJZW5jb2Rlci0+cmVnW3JlZ10gPSB2YWx1ZTsKIAlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCBhZHY3MTcwX3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQorc3RhdGljIGlubGluZSBpbnQgYWR2NzE3MF9yZWFkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZykKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKIAlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKIH0KIAotc3RhdGljIGludCBhZHY3MTcwX3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCitzdGF0aWMgaW50IGFkdjcxNzBfd3JpdGVfYmxvY2soc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKIAkJICAgICBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IGFkdjcxNzAgKmVuY29kZXIgPSB0b19hZHY3MTcwKHNkKTsKIAlpbnQgcmV0ID0gLTE7CiAJdTggcmVnOwogCkBAIC04OSw3ICs5NSw2IEBACiAJICogdGhlIGFkYXB0ZXIgdW5kZXJzdGFuZHMgcmF3IEkyQyAqLwogCWlmIChpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpIHsKIAkJLyogZG8gcmF3IEkyQywgbm90IHNtYnVzIGNvbXBhdGlibGUgKi8KLQkJc3RydWN0IGFkdjcxNzAgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAkJdTggYmxvY2tfZGF0YVszMl07CiAJCWludCBibG9ja19sZW47CiAKQEAgLTExMCw3ICsxMTUsNyBAQAogCQkvKiBkbyBzb21lIHNsb3cgSTJDIGVtdWxhdGlvbiBraW5kIG9mIHRoaW5nICovCiAJCXdoaWxlIChsZW4gPj0gMikgewogCQkJcmVnID0gKmRhdGErKzsKLQkJCXJldCA9IGFkdjcxNzBfd3JpdGUoY2xpZW50LCByZWcsICpkYXRhKyspOworCQkJcmV0ID0gYWR2NzE3MF93cml0ZShzZCwgcmVnLCAqZGF0YSsrKTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwogCQkJbGVuIC09IDI7CkBAIC0xMjgsMjAzICsxMzMsMTYxIEBACiAjZGVmaW5lIFRSMVBMQVkJICAgIDB4MDAKIAogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW5pdF9OVFNDW10gPSB7Ci0JMHgwMCwgMHgxMCwJCS8vIE1SMAotCTB4MDEsIDB4MjAsCQkvLyBNUjEKLQkweDAyLCAweDBlLAkJLy8gTVIyIFJUQyBjb250cm9sOiBiaXRzIDIgYW5kIDEKLQkweDAzLCAweDgwLAkJLy8gTVIzCi0JMHgwNCwgMHgzMCwJCS8vIE1SNAotCTB4MDUsIDB4MDAsCQkvLyBSZXNlcnZlZAotCTB4MDYsIDB4MDAsCQkvLyBSZXNlcnZlZAotCTB4MDcsIFRSME1PREUsCQkvLyBUTTAKLQkweDA4LCBUUjFDQVBULAkJLy8gVE0xCi0JMHgwOSwgMHgxNiwJCS8vIEZzYzAKLQkweDBhLCAweDdjLAkJLy8gRnNjMQotCTB4MGIsIDB4ZjAsCQkvLyBGc2MyCi0JMHgwYywgMHgyMSwJCS8vIEZzYzMKLQkweDBkLCAweDAwLAkJLy8gU3ViY2FycmllciBQaGFzZQotCTB4MGUsIDB4MDAsCQkvLyBDbG9zZWQgQ2FwdC4gRXh0IDAKLQkweDBmLCAweDAwLAkJLy8gQ2xvc2VkIENhcHQuIEV4dCAxCi0JMHgxMCwgMHgwMCwJCS8vIENsb3NlZCBDYXB0LiAwCi0JMHgxMSwgMHgwMCwJCS8vIENsb3NlZCBDYXB0LiAxCi0JMHgxMiwgMHgwMCwJCS8vIFBlZGVzdGFsIEN0bCAwCi0JMHgxMywgMHgwMCwJCS8vIFBlZGVzdGFsIEN0bCAxCi0JMHgxNCwgMHgwMCwJCS8vIFBlZGVzdGFsIEN0bCAyCi0JMHgxNSwgMHgwMCwJCS8vIFBlZGVzdGFsIEN0bCAzCi0JMHgxNiwgMHgwMCwJCS8vIENHTVNfV1NTXzAKLQkweDE3LCAweDAwLAkJLy8gQ0dNU19XU1NfMQotCTB4MTgsIDB4MDAsCQkvLyBDR01TX1dTU18yCi0JMHgxOSwgMHgwMCwJCS8vIFRlbGV0ZXh0IEN0bAorCTB4MDAsIDB4MTAsCQkvKiBNUjAgKi8KKwkweDAxLCAweDIwLAkJLyogTVIxICovCisJMHgwMiwgMHgwZSwJCS8qIE1SMiBSVEMgY29udHJvbDogYml0cyAyIGFuZCAxICovCisJMHgwMywgMHg4MCwJCS8qIE1SMyAqLworCTB4MDQsIDB4MzAsCQkvKiBNUjQgKi8KKwkweDA1LCAweDAwLAkJLyogUmVzZXJ2ZWQgKi8KKwkweDA2LCAweDAwLAkJLyogUmVzZXJ2ZWQgKi8KKwkweDA3LCBUUjBNT0RFLAkJLyogVE0wICovCisJMHgwOCwgVFIxQ0FQVCwJCS8qIFRNMSAqLworCTB4MDksIDB4MTYsCQkvKiBGc2MwICovCisJMHgwYSwgMHg3YywJCS8qIEZzYzEgKi8KKwkweDBiLCAweGYwLAkJLyogRnNjMiAqLworCTB4MGMsIDB4MjEsCQkvKiBGc2MzICovCisJMHgwZCwgMHgwMCwJCS8qIFN1YmNhcnJpZXIgUGhhc2UgKi8KKwkweDBlLCAweDAwLAkJLyogQ2xvc2VkIENhcHQuIEV4dCAwICovCisJMHgwZiwgMHgwMCwJCS8qIENsb3NlZCBDYXB0LiBFeHQgMSAqLworCTB4MTAsIDB4MDAsCQkvKiBDbG9zZWQgQ2FwdC4gMCAqLworCTB4MTEsIDB4MDAsCQkvKiBDbG9zZWQgQ2FwdC4gMSAqLworCTB4MTIsIDB4MDAsCQkvKiBQZWRlc3RhbCBDdGwgMCAqLworCTB4MTMsIDB4MDAsCQkvKiBQZWRlc3RhbCBDdGwgMSAqLworCTB4MTQsIDB4MDAsCQkvKiBQZWRlc3RhbCBDdGwgMiAqLworCTB4MTUsIDB4MDAsCQkvKiBQZWRlc3RhbCBDdGwgMyAqLworCTB4MTYsIDB4MDAsCQkvKiBDR01TX1dTU18wICovCisJMHgxNywgMHgwMCwJCS8qIENHTVNfV1NTXzEgKi8KKwkweDE4LCAweDAwLAkJLyogQ0dNU19XU1NfMiAqLworCTB4MTksIDB4MDAsCQkvKiBUZWxldGV4dCBDdGwgKi8KIH07CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIGluaXRfUEFMW10gPSB7Ci0JMHgwMCwgMHg3MSwJCS8vIE1SMAotCTB4MDEsIDB4MjAsCQkvLyBNUjEKLQkweDAyLCAweDBlLAkJLy8gTVIyIFJUQyBjb250cm9sOiBiaXRzIDIgYW5kIDEKLQkweDAzLCAweDgwLAkJLy8gTVIzCi0JMHgwNCwgMHgzMCwJCS8vIE1SNAotCTB4MDUsIDB4MDAsCQkvLyBSZXNlcnZlZAotCTB4MDYsIDB4MDAsCQkvLyBSZXNlcnZlZAotCTB4MDcsIFRSME1PREUsCQkvLyBUTTAKLQkweDA4LCBUUjFDQVBULAkJLy8gVE0xCi0JMHgwOSwgMHhjYiwJCS8vIEZzYzAKLQkweDBhLCAweDhhLAkJLy8gRnNjMQotCTB4MGIsIDB4MDksCQkvLyBGc2MyCi0JMHgwYywgMHgyYSwJCS8vIEZzYzMKLQkweDBkLCAweDAwLAkJLy8gU3ViY2FycmllciBQaGFzZQotCTB4MGUsIDB4MDAsCQkvLyBDbG9zZWQgQ2FwdC4gRXh0IDAKLQkweDBmLCAweDAwLAkJLy8gQ2xvc2VkIENhcHQuIEV4dCAxCi0JMHgxMCwgMHgwMCwJCS8vIENsb3NlZCBDYXB0LiAwCi0JMHgxMSwgMHgwMCwJCS8vIENsb3NlZCBDYXB0LiAxCi0JMHgxMiwgMHgwMCwJCS8vIFBlZGVzdGFsIEN0bCAwCi0JMHgxMywgMHgwMCwJCS8vIFBlZGVzdGFsIEN0bCAxCi0JMHgxNCwgMHgwMCwJCS8vIFBlZGVzdGFsIEN0bCAyCi0JMHgxNSwgMHgwMCwJCS8vIFBlZGVzdGFsIEN0bCAzCi0JMHgxNiwgMHgwMCwJCS8vIENHTVNfV1NTXzAKLQkweDE3LCAweDAwLAkJLy8gQ0dNU19XU1NfMQotCTB4MTgsIDB4MDAsCQkvLyBDR01TX1dTU18yCi0JMHgxOSwgMHgwMCwJCS8vIFRlbGV0ZXh0IEN0bAorCTB4MDAsIDB4NzEsCQkvKiBNUjAgKi8KKwkweDAxLCAweDIwLAkJLyogTVIxICovCisJMHgwMiwgMHgwZSwJCS8qIE1SMiBSVEMgY29udHJvbDogYml0cyAyIGFuZCAxICovCisJMHgwMywgMHg4MCwJCS8qIE1SMyAqLworCTB4MDQsIDB4MzAsCQkvKiBNUjQgKi8KKwkweDA1LCAweDAwLAkJLyogUmVzZXJ2ZWQgKi8KKwkweDA2LCAweDAwLAkJLyogUmVzZXJ2ZWQgKi8KKwkweDA3LCBUUjBNT0RFLAkJLyogVE0wICovCisJMHgwOCwgVFIxQ0FQVCwJCS8qIFRNMSAqLworCTB4MDksIDB4Y2IsCQkvKiBGc2MwICovCisJMHgwYSwgMHg4YSwJCS8qIEZzYzEgKi8KKwkweDBiLCAweDA5LAkJLyogRnNjMiAqLworCTB4MGMsIDB4MmEsCQkvKiBGc2MzICovCisJMHgwZCwgMHgwMCwJCS8qIFN1YmNhcnJpZXIgUGhhc2UgKi8KKwkweDBlLCAweDAwLAkJLyogQ2xvc2VkIENhcHQuIEV4dCAwICovCisJMHgwZiwgMHgwMCwJCS8qIENsb3NlZCBDYXB0LiBFeHQgMSAqLworCTB4MTAsIDB4MDAsCQkvKiBDbG9zZWQgQ2FwdC4gMCAqLworCTB4MTEsIDB4MDAsCQkvKiBDbG9zZWQgQ2FwdC4gMSAqLworCTB4MTIsIDB4MDAsCQkvKiBQZWRlc3RhbCBDdGwgMCAqLworCTB4MTMsIDB4MDAsCQkvKiBQZWRlc3RhbCBDdGwgMSAqLworCTB4MTQsIDB4MDAsCQkvKiBQZWRlc3RhbCBDdGwgMiAqLworCTB4MTUsIDB4MDAsCQkvKiBQZWRlc3RhbCBDdGwgMyAqLworCTB4MTYsIDB4MDAsCQkvKiBDR01TX1dTU18wICovCisJMHgxNywgMHgwMCwJCS8qIENHTVNfV1NTXzEgKi8KKwkweDE4LCAweDAwLAkJLyogQ0dNU19XU1NfMiAqLworCTB4MTksIDB4MDAsCQkvKiBUZWxldGV4dCBDdGwgKi8KIH07CiAKIAotc3RhdGljIGludCBhZHY3MTcwX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGFkdjcxNzBfc19zdGRfb3V0cHV0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkIHN0ZCkKIHsKLQlzdHJ1Y3QgYWR2NzE3MCAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBhZHY3MTcwICplbmNvZGVyID0gdG9fYWR2NzE3MChzZCk7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgMDoKLSNpZiAwCi0JCS8qIFRoaXMgaXMganVzdCBmb3IgdGVzdGluZyEhISAqLwotCQlhZHY3MTcwX3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9jb21tb24sCi0JCQkJICAgIHNpemVvZihpbml0X2NvbW1vbikpOwotCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7Ci0JCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKLSNlbmRpZgotCQlicmVhazsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzZXQgbm9ybSAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXN0ZCk7CiAKLQljYXNlIEVOQ09ERVJfR0VUX0NBUEFCSUxJVElFUzoKLQl7Ci0JCXN0cnVjdCB2aWRlb19lbmNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKLQotCQljYXAtPmZsYWdzID0gVklERU9fRU5DT0RFUl9QQUwgfAotCQkJICAgICBWSURFT19FTkNPREVSX05UU0M7Ci0JCWNhcC0+aW5wdXRzID0gMjsKLQkJY2FwLT5vdXRwdXRzID0gMTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX1NFVF9OT1JNOgotCXsKLQkJaW50IGlhcmcgPSAqKGludCAqKSBhcmc7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IG5vcm0gJWRcbiIsIGlhcmcpOwotCi0JCXN3aXRjaCAoaWFyZykgewotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCWFkdjcxNzBfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X05UU0MsCi0JCQkJCSAgICBzaXplb2YoaW5pdF9OVFNDKSk7Ci0JCQlpZiAoZW5jb2Rlci0+aW5wdXQgPT0gMCkKLQkJCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwMiwgMHgwZSk7CS8vIEVuYWJsZSBnZW5sb2NrCi0JCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7Ci0JCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJYWR2NzE3MF93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfUEFMLAotCQkJCQkgICAgc2l6ZW9mKGluaXRfUEFMKSk7Ci0JCQlpZiAoZW5jb2Rlci0+aW5wdXQgPT0gMCkKLQkJCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwMiwgMHgwZSk7CS8vIEVuYWJsZSBnZW5sb2NrCi0JCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7Ci0JCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaWxsZWdhbCBub3JtOiAlZFxuIiwgaWFyZyk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzd2l0Y2hlZCB0byAlc1xuIiwgbm9ybXNbaWFyZ10pOwotCQllbmNvZGVyLT5ub3JtID0gaWFyZzsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX1NFVF9JTlBVVDoKLQl7Ci0JCWludCBpYXJnID0gKihpbnQgKikgYXJnOwotCi0JCS8qIFJKOiAqaWFyZyA9IDA6IGlucHV0IGlzIGZyb20gZGVjb2RlcgotCQkgKmlhcmcgPSAxOiBpbnB1dCBpcyBmcm9tIFpSMzYwNjAKLQkJICppYXJnID0gMjogY29sb3IgYmFyICovCi0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IGlucHV0IGZyb20gJXNcbiIsCi0JCQlpYXJnID09IDAgPyAiZGVjb2RlciIgOiAiWlIzNjA2MCIpOwotCi0JCXN3aXRjaCAoaWFyZykgewotCQljYXNlIDA6Ci0JCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwMSwgMHgyMCk7Ci0JCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwOCwgVFIxQ0FQVCk7CS8qIFRSMSAqLwotCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDIsIDB4MGUpOwkvLyBFbmFibGUgZ2VubG9jawotCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOwotCQkJYWR2NzE3MF93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwotCQkJLyogdWRlbGF5KDEwKTsgKi8KLQkJCWJyZWFrOwotCi0JCWNhc2UgMToKLQkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDAxLCAweDAwKTsKLQkJCWFkdjcxNzBfd3JpdGUoY2xpZW50LCAweDA4LCBUUjFQTEFZKTsJLyogVFIxICovCi0JCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwMiwgMHgwOCk7Ci0JCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7Ci0JCQlhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7Ci0JCQkvKiB1ZGVsYXkoMTApOyAqLwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImlsbGVnYWwgaW5wdXQ6ICVkXG4iLCBpYXJnKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvICVzXG4iLCBpbnB1dHNbaWFyZ10pOwotCQllbmNvZGVyLT5pbnB1dCA9IGlhcmc7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgRU5DT0RFUl9TRVRfT1VUUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCS8qIG5vdCBtdWNoIGNob2ljZSBvZiBvdXRwdXRzICovCi0JCWlmICgqaWFyZyAhPSAwKSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQljYXNlIEVOQ09ERVJfRU5BQkxFX09VVFBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQllbmNvZGVyLT5lbmFibGUgPSAhISppYXJnOwotCQlicmVhazsKLQl9Ci0KLQlkZWZhdWx0OgorCWlmIChzdGQgJiBWNEwyX1NURF9OVFNDKSB7CisJCWFkdjcxNzBfd3JpdGVfYmxvY2soc2QsIGluaXRfTlRTQywgc2l6ZW9mKGluaXRfTlRTQykpOworCQlpZiAoZW5jb2Rlci0+aW5wdXQgPT0gMCkKKwkJCWFkdjcxNzBfd3JpdGUoc2QsIDB4MDIsIDB4MGUpOwkvKiBFbmFibGUgZ2VubG9jayAqLworCQlhZHY3MTcwX3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKKwkJYWR2NzE3MF93cml0ZShzZCwgMHgwNywgVFIwTU9ERSk7CisJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9QQUwpIHsKKwkJYWR2NzE3MF93cml0ZV9ibG9jayhzZCwgaW5pdF9QQUwsIHNpemVvZihpbml0X1BBTCkpOworCQlpZiAoZW5jb2Rlci0+aW5wdXQgPT0gMCkKKwkJCWFkdjcxNzBfd3JpdGUoc2QsIDB4MDIsIDB4MGUpOwkvKiBFbmFibGUgZ2VubG9jayAqLworCQlhZHY3MTcwX3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKKwkJYWR2NzE3MF93cml0ZShzZCwgMHgwNywgVFIwTU9ERSk7CisJfSBlbHNlIHsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiaWxsZWdhbCBub3JtOiAlbGx4XG4iLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpc3RkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3dpdGNoZWQgdG8gJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzdGQpOworCWVuY29kZXItPm5vcm0gPSBzdGQ7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYWR2NzE3MF9zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCit7CisJc3RydWN0IGFkdjcxNzAgKmVuY29kZXIgPSB0b19hZHY3MTcwKHNkKTsKKworCS8qIFJKOiByb3V0ZS0+aW5wdXQgPSAwOiBpbnB1dCBpcyBmcm9tIGRlY29kZXIKKwkgICByb3V0ZS0+aW5wdXQgPSAxOiBpbnB1dCBpcyBmcm9tIFpSMzYwNjAKKwkgICByb3V0ZS0+aW5wdXQgPSAyOiBjb2xvciBiYXIgKi8KKworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInNldCBpbnB1dCBmcm9tICVzXG4iLAorCQkJcm91dGUtPmlucHV0ID09IDAgPyAiZGVjb2RlciIgOiAiWlIzNjA2MCIpOworCisJc3dpdGNoIChyb3V0ZS0+aW5wdXQpIHsKKwljYXNlIDA6CisJCWFkdjcxNzBfd3JpdGUoc2QsIDB4MDEsIDB4MjApOworCQlhZHY3MTcwX3dyaXRlKHNkLCAweDA4LCBUUjFDQVBUKTsJLyogVFIxICovCisJCWFkdjcxNzBfd3JpdGUoc2QsIDB4MDIsIDB4MGUpOwkvKiBFbmFibGUgZ2VubG9jayAqLworCQlhZHY3MTcwX3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKKwkJYWR2NzE3MF93cml0ZShzZCwgMHgwNywgVFIwTU9ERSk7CisJCS8qIHVkZWxheSgxMCk7ICovCisJCWJyZWFrOworCisJY2FzZSAxOgorCQlhZHY3MTcwX3dyaXRlKHNkLCAweDAxLCAweDAwKTsKKwkJYWR2NzE3MF93cml0ZShzZCwgMHgwOCwgVFIxUExBWSk7CS8qIFRSMSAqLworCQlhZHY3MTcwX3dyaXRlKHNkLCAweDAyLCAweDA4KTsKKwkJYWR2NzE3MF93cml0ZShzZCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7CisJCWFkdjcxNzBfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUpOworCQkvKiB1ZGVsYXkoMTApOyAqLworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImlsbGVnYWwgaW5wdXQ6ICVkXG4iLCByb3V0ZS0+aW5wdXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3dpdGNoZWQgdG8gJXNcbiIsIGlucHV0c1tyb3V0ZS0+aW5wdXRdKTsKKwllbmNvZGVyLT5pbnB1dCA9IHJvdXRlLT5pbnB1dDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhZHY3MTcwX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX0FEVjcxNzAsIDApOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gewotCTB4ZDQgPj4gMSwgMHhkNiA+PiAxLAkvKiBhZHY3MTcwIElEcyAqLwotCTB4NTQgPj4gMSwgMHg1NiA+PiAxLAkvKiBhZHY3MTcxIElEcyAqLwotCUkyQ19DTElFTlRfRU5ECitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGFkdjcxNzBfY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IGFkdjcxNzBfZ19jaGlwX2lkZW50LAogfTsKIAotSTJDX0NMSUVOVF9JTlNNT0Q7CitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBhZHY3MTcwX3ZpZGVvX29wcyA9IHsKKwkuc19zdGRfb3V0cHV0ID0gYWR2NzE3MF9zX3N0ZF9vdXRwdXQsCisJLnNfcm91dGluZyA9IGFkdjcxNzBfc19yb3V0aW5nLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgYWR2NzE3MF9vcHMgPSB7CisJLmNvcmUgPSAmYWR2NzE3MF9jb3JlX29wcywKKwkudmlkZW8gPSAmYWR2NzE3MF92aWRlb19vcHMsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgaW50IGFkdjcxNzBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3QgYWR2NzE3MCAqZW5jb2RlcjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCWludCBpOwogCiAJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLwpAQCAtMzM3LDI2ICszMDAsMjkgQEAKIAllbmNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFkdjcxNzApLCBHRlBfS0VSTkVMKTsKIAlpZiAoZW5jb2RlciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQllbmNvZGVyLT5ub3JtID0gVklERU9fTU9ERV9OVFNDOworCXNkID0gJmVuY29kZXItPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZhZHY3MTcwX29wcyk7CisJZW5jb2Rlci0+bm9ybSA9IFY0TDJfU1REX05UU0M7CiAJZW5jb2Rlci0+aW5wdXQgPSAwOwotCWVuY29kZXItPmVuYWJsZSA9IDE7Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZW5jb2Rlcik7CiAKLQlpID0gYWR2NzE3MF93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfTlRTQywgc2l6ZW9mKGluaXRfTlRTQykpOworCWkgPSBhZHY3MTcwX3dyaXRlX2Jsb2NrKHNkLCBpbml0X05UU0MsIHNpemVvZihpbml0X05UU0MpKTsKIAlpZiAoaSA+PSAwKSB7Ci0JCWkgPSBhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7Ci0JCWkgPSBhZHY3MTcwX3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7Ci0JCWkgPSBhZHY3MTcwX3JlYWQoY2xpZW50LCAweDEyKTsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAicmV2aXNpb24gJWRcbiIsIGkgJiAxKTsKKwkJaSA9IGFkdjcxNzBfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOworCQlpID0gYWR2NzE3MF93cml0ZShzZCwgMHgwNywgVFIwTU9ERSk7CisJCWkgPSBhZHY3MTcwX3JlYWQoc2QsIDB4MTIpOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJyZXZpc2lvbiAlZFxuIiwgaSAmIDEpOwogCX0KIAlpZiAoaSA8IDApCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImluaXQgZXJyb3IgMHgleFxuIiwgaSk7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImluaXQgZXJyb3IgMHgleFxuIiwgaSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYWR2NzE3MF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCWtmcmVlKHRvX2FkdjcxNzAoc2QpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzcxLDggKzMzNyw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJhZHY3MTcwIiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfQURWNzE3MCwKLQkuY29tbWFuZCA9IGFkdjcxNzBfY29tbWFuZCwKIAkucHJvYmUgPSBhZHY3MTcwX3Byb2JlLAogCS5yZW1vdmUgPSBhZHY3MTcwX3JlbW92ZSwKIAkuaWRfdGFibGUgPSBhZHY3MTcwX2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hZHY3MTc1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzUuYwppbmRleCA2MDA4ZTg0Li5mZjEyMTAzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2FkdjcxNzUuYwpAQCAtMzAsMTUgKzMwLDE5IEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2VuY29kZXIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkFuYWxvZyBEZXZpY2VzIEFEVjcxNzUgdmlkZW8gZW5jb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkRhdmUgUGVya3MiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAorI2RlZmluZSAgIEkyQ19BRFY3MTc1ICAgICAgICAweGQ0CisjZGVmaW5lICAgSTJDX0FEVjcxNzYgICAgICAgIDB4NTQKKworCiBzdGF0aWMgaW50IGRlYnVnOwogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CkBAIC00NiwzNiArNTAsMzggQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0cnVjdCBhZHY3MTc1IHsKLQlpbnQgbm9ybTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CisJdjRsMl9zdGRfaWQgbm9ybTsKIAlpbnQgaW5wdXQ7Ci0JaW50IGVuYWJsZTsKLQlpbnQgYnJpZ2h0OwotCWludCBjb250cmFzdDsKLQlpbnQgaHVlOwotCWludCBzYXQ7CiB9OwogCi0jZGVmaW5lICAgSTJDX0FEVjcxNzUgICAgICAgIDB4ZDQKLSNkZWZpbmUgICBJMkNfQURWNzE3NiAgICAgICAgMHg1NAorc3RhdGljIGlubGluZSBzdHJ1Y3QgYWR2NzE3NSAqdG9fYWR2NzE3NShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBhZHY3MTc1LCBzZCk7Cit9CiAKIHN0YXRpYyBjaGFyICppbnB1dHNbXSA9IHsgInBhc3NfdGhyb3VnaCIsICJwbGF5X2JhY2siLCAiY29sb3JfYmFyIiB9Owotc3RhdGljIGNoYXIgKm5vcm1zW10gPSB7ICJQQUwiLCAiTlRTQyIsICJTRUNBTS0+UEFMIChtYXkgbm90IHdvcmshKSIgfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGlubGluZSBpbnQgYWR2NzE3NV93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgYWR2NzE3NV93cml0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsIHU4IHZhbHVlKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwogCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGFkdjcxNzVfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCitzdGF0aWMgaW5saW5lIGludCBhZHY3MTc1X3JlYWQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwogCXJldHVybiBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCByZWcpOwogfQogCi1zdGF0aWMgaW50IGFkdjcxNzVfd3JpdGVfYmxvY2soc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKK3N0YXRpYyBpbnQgYWR2NzE3NV93cml0ZV9ibG9jayhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAogCQkgICAgIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAlpbnQgcmV0ID0gLTE7CiAJdTggcmVnOwogCkBAIC0xMDMsNyArMTA5LDcgQEAKIAkJLyogZG8gc29tZSBzbG93IEkyQyBlbXVsYXRpb24ga2luZCBvZiB0aGluZyAqLwogCQl3aGlsZSAobGVuID49IDIpIHsKIAkJCXJlZyA9ICpkYXRhKys7Ci0JCQlyZXQgPSBhZHY3MTc1X3dyaXRlKGNsaWVudCwgcmVnLCAqZGF0YSsrKTsKKwkJCXJldCA9IGFkdjcxNzVfd3JpdGUoc2QsIHJlZywgKmRhdGErKyk7CiAJCQlpZiAocmV0IDwgMCkKIAkJCQlicmVhazsKIAkJCWxlbiAtPSAyOwpAQCAtMTEzLDE4ICsxMTksMTggQEAKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgdm9pZCBzZXRfc3ViY2Fycmllcl9mcmVxKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBwYXNzX3Rocm91Z2gpCitzdGF0aWMgdm9pZCBzZXRfc3ViY2Fycmllcl9mcmVxKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBwYXNzX3Rocm91Z2gpCiB7CiAJLyogZm9yIHNvbWUgcmVhc29uIHBhc3NfdGhyb3VnaCBOVFNDIG5lZWRzCiAJICogYSBkaWZmZXJlbnQgc3ViLWNhcnJpZXIgZnJlcSB0byByZW1haW4gc3RhYmxlLiAqLwogCWlmIChwYXNzX3Rocm91Z2gpCi0JCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDAyLCAweDAwKTsKKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwMiwgMHgwMCk7CiAJZWxzZQotCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwMiwgMHg1NSk7CisJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDIsIDB4NTUpOwogCi0JYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDMsIDB4NTUpOwotCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA0LCAweDU1KTsKLQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNSwgMHgyNSk7CisJYWR2NzE3NV93cml0ZShzZCwgMHgwMywgMHg1NSk7CisJYWR2NzE3NV93cml0ZShzZCwgMHgwNCwgMHg1NSk7CisJYWR2NzE3NV93cml0ZShzZCwgMHgwNSwgMHgyNSk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xODQsMTgwICsxOTAsMTQ0IEBACiAJMHgwNiwgMHgxYSwJCS8qIHN1YmMuIHBoYXNlICovCiB9OwogCi1zdGF0aWMgaW50IGFkdjcxNzVfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgYWR2NzE3NV9pbml0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiB2YWwpCiB7Ci0Jc3RydWN0IGFkdjcxNzUgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwkvKiBUaGlzIGlzIGp1c3QgZm9yIHRlc3RpbmchISEgKi8KKwlhZHY3MTc1X3dyaXRlX2Jsb2NrKHNkLCBpbml0X2NvbW1vbiwgc2l6ZW9mKGluaXRfY29tbW9uKSk7CisJYWR2NzE3NV93cml0ZShzZCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7CisJYWR2NzE3NV93cml0ZShzZCwgMHgwNywgVFIwTU9ERSk7CisJcmV0dXJuIDA7Cit9CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgMDoKLQkJLyogVGhpcyBpcyBqdXN0IGZvciB0ZXN0aW5nISEhICovCi0JCWFkdjcxNzVfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X2NvbW1vbiwKLQkJCQkgICAgc2l6ZW9mKGluaXRfY29tbW9uKSk7Ci0JCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKLQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwotCQlicmVhazsKK3N0YXRpYyBpbnQgYWR2NzE3NV9zX3N0ZF9vdXRwdXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgc3RkKQoreworCXN0cnVjdCBhZHY3MTc1ICplbmNvZGVyID0gdG9fYWR2NzE3NShzZCk7CiAKLQljYXNlIEVOQ09ERVJfR0VUX0NBUEFCSUxJVElFUzoKLQl7Ci0JCXN0cnVjdCB2aWRlb19lbmNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKLQotCQljYXAtPmZsYWdzID0gVklERU9fRU5DT0RFUl9QQUwgfAotCQkJICAgICBWSURFT19FTkNPREVSX05UU0MgfAotCQkJICAgICBWSURFT19FTkNPREVSX1NFQ0FNOyAvKiB3ZWxsLCBoYWNreSAqLwotCQljYXAtPmlucHV0cyA9IDI7Ci0JCWNhcC0+b3V0cHV0cyA9IDE7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgRU5DT0RFUl9TRVRfTk9STToKLQl7Ci0JCWludCBpYXJnID0gKihpbnQgKikgYXJnOwotCi0JCXN3aXRjaCAoaWFyZykgewotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCWFkdjcxNzVfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X250c2MsCi0JCQkJCSAgICBzaXplb2YoaW5pdF9udHNjKSk7Ci0JCQlpZiAoZW5jb2Rlci0+aW5wdXQgPT0gMCkKLQkJCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwZCwgMHg0Zik7CS8vIEVuYWJsZSBnZW5sb2NrCi0JCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7Ci0JCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJYWR2NzE3NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfcGFsLAotCQkJCQkgICAgc2l6ZW9mKGluaXRfcGFsKSk7Ci0JCQlpZiAoZW5jb2Rlci0+aW5wdXQgPT0gMCkKLQkJCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwZCwgMHg0Zik7CS8vIEVuYWJsZSBnZW5sb2NrCi0JCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7Ci0JCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwNywgVFIwTU9ERSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFZJREVPX01PREVfU0VDQU06CS8vIFdBUk5JTkchIEFEVjcxNzYgZG9lcyBub3Qgc3VwcG9ydCBTRUNBTS4KLQkJCS8qIFRoaXMgaXMgYW4gYXR0ZW1wdCB0byBjb252ZXJ0Ci0JCQkgKiBTRUNBTS0+UEFMICh0eXBpY2FsbHkgaXQgZG9lcyBub3Qgd29yawotCQkJICogZHVlIHRvIGdlbmxvY2s6IHdoZW4gZGVjb2RlciBpcyBpbiBTRUNBTQotCQkJICogYW5kIGVuY29kZXIgaW4gaW4gUEFMIHRoZSBzdWJjYXJyaWVyIGNhbgotCQkJICogbm90IGJlIHN5bmNyb25pemVkIHdpdGggaG9yaXpvbnRhbAotCQkJICogcXVlbmN5KSAqLwotCQkJYWR2NzE3NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfcGFsLAotCQkJCQkgICAgc2l6ZW9mKGluaXRfcGFsKSk7Ci0JCQlpZiAoZW5jb2Rlci0+aW5wdXQgPT0gMCkKLQkJCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwZCwgMHg0OSk7CS8vIERpc2FibGUgZ2VubG9jawotCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOwotCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbGxlZ2FsIG5vcm06ICVkXG4iLCBpYXJnKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvICVzXG4iLCBub3Jtc1tpYXJnXSk7Ci0JCWVuY29kZXItPm5vcm0gPSBpYXJnOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIEVOQ09ERVJfU0VUX0lOUFVUOgotCXsKLQkJaW50IGlhcmcgPSAqKGludCAqKSBhcmc7Ci0KLQkJLyogUko6ICppYXJnID0gMDogaW5wdXQgaXMgZnJvbSBTQUE3MTEwCi0JCSAqaWFyZyA9IDE6IGlucHV0IGlzIGZyb20gWlIzNjA2MAotCQkgKmlhcmcgPSAyOiBjb2xvciBiYXIgKi8KLQotCQlzd2l0Y2ggKGlhcmcpIHsKLQkJY2FzZSAwOgotCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDEsIDB4MDApOwotCi0JCQlpZiAoZW5jb2Rlci0+bm9ybSA9PSBWSURFT19NT0RFX05UU0MpCi0JCQkJc2V0X3N1YmNhcnJpZXJfZnJlcShjbGllbnQsIDEpOwotCi0JCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwYywgVFIxQ0FQVCk7CS8qIFRSMSAqLwotCQkJaWYgKGVuY29kZXItPm5vcm0gPT0gVklERU9fTU9ERV9TRUNBTSkKLQkJCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwZCwgMHg0OSk7CS8vIERpc2FibGUgZ2VubG9jawotCQkJZWxzZQotCQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDBkLCAweDRmKTsJLy8gRW5hYmxlIGdlbmxvY2sKLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKLQkJCS8vdWRlbGF5KDEwKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgMToKLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDAxLCAweDAwKTsKLQotCQkJaWYgKGVuY29kZXItPm5vcm0gPT0gVklERU9fTU9ERV9OVFNDKQotCQkJCXNldF9zdWJjYXJyaWVyX2ZyZXEoY2xpZW50LCAwKTsKLQotCQkJYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MGMsIFRSMVBMQVkpOwkvKiBUUjEgKi8KLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDBkLCAweDQ5KTsKLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKLQkJCS8qIHVkZWxheSgxMCk7ICovCi0JCQlicmVhazsKLQotCQljYXNlIDI6Ci0JCQlhZHY3MTc1X3dyaXRlKGNsaWVudCwgMHgwMSwgMHg4MCk7Ci0KLQkJCWlmIChlbmNvZGVyLT5ub3JtID09IFZJREVPX01PREVfTlRTQykKLQkJCQlzZXRfc3ViY2Fycmllcl9mcmVxKGNsaWVudCwgMCk7Ci0KLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDBkLCAweDQ5KTsKLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKLQkJCWFkdjcxNzVfd3JpdGUoY2xpZW50LCAweDA3LCBUUjBNT0RFKTsKLQkJCS8qIHVkZWxheSgxMCk7ICovCi0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaWxsZWdhbCBpbnB1dDogJWRcbiIsIGlhcmcpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3dpdGNoZWQgdG8gJXNcbiIsIGlucHV0c1tpYXJnXSk7Ci0JCWVuY29kZXItPmlucHV0ID0gaWFyZzsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX1NFVF9PVVRQVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KLQkJaWYgKCppYXJnICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX0VOQUJMRV9PVVRQVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJZW5jb2Rlci0+ZW5hYmxlID0gISEqaWFyZzsKLQkJYnJlYWs7Ci0JfQotCi0JZGVmYXVsdDoKKwlpZiAoc3RkICYgVjRMMl9TVERfTlRTQykgeworCQlhZHY3MTc1X3dyaXRlX2Jsb2NrKHNkLCBpbml0X250c2MsIHNpemVvZihpbml0X250c2MpKTsKKwkJaWYgKGVuY29kZXItPmlucHV0ID09IDApCisJCQlhZHY3MTc1X3dyaXRlKHNkLCAweDBkLCAweDRmKTsJLyogRW5hYmxlIGdlbmxvY2sgKi8KKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7CisJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUpOworCX0gZWxzZSBpZiAoc3RkICYgVjRMMl9TVERfUEFMKSB7CisJCWFkdjcxNzVfd3JpdGVfYmxvY2soc2QsIGluaXRfcGFsLCBzaXplb2YoaW5pdF9wYWwpKTsKKwkJaWYgKGVuY29kZXItPmlucHV0ID09IDApCisJCQlhZHY3MTc1X3dyaXRlKHNkLCAweDBkLCAweDRmKTsJLyogRW5hYmxlIGdlbmxvY2sgKi8KKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7CisJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUpOworCX0gZWxzZSBpZiAoc3RkICYgVjRMMl9TVERfU0VDQU0pIHsKKwkJLyogVGhpcyBpcyBhbiBhdHRlbXB0IHRvIGNvbnZlcnQKKwkJICogU0VDQU0tPlBBTCAodHlwaWNhbGx5IGl0IGRvZXMgbm90IHdvcmsKKwkJICogZHVlIHRvIGdlbmxvY2s6IHdoZW4gZGVjb2RlciBpcyBpbiBTRUNBTQorCQkgKiBhbmQgZW5jb2RlciBpbiBpbiBQQUwgdGhlIHN1YmNhcnJpZXIgY2FuCisJCSAqIG5vdCBiZSBzeW5jcm9uaXplZCB3aXRoIGhvcml6b250YWwKKwkJICogcXVlbmN5KSAqLworCQlhZHY3MTc1X3dyaXRlX2Jsb2NrKHNkLCBpbml0X3BhbCwgc2l6ZW9mKGluaXRfcGFsKSk7CisJCWlmIChlbmNvZGVyLT5pbnB1dCA9PSAwKQorCQkJYWR2NzE3NV93cml0ZShzZCwgMHgwZCwgMHg0OSk7CS8qIERpc2FibGUgZ2VubG9jayAqLworCQlhZHY3MTc1X3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwNywgVFIwTU9ERSk7CisJfSBlbHNlIHsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiaWxsZWdhbCBub3JtOiAlbGx4XG4iLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpc3RkKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3dpdGNoZWQgdG8gJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzdGQpOworCWVuY29kZXItPm5vcm0gPSBzdGQ7CiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgYWR2NzE3NV9zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCit7CisJc3RydWN0IGFkdjcxNzUgKmVuY29kZXIgPSB0b19hZHY3MTc1KHNkKTsKKworCS8qIFJKOiByb3V0ZS0+aW5wdXQgPSAwOiBpbnB1dCBpcyBmcm9tIGRlY29kZXIKKwkgICByb3V0ZS0+aW5wdXQgPSAxOiBpbnB1dCBpcyBmcm9tIFpSMzYwNjAKKwkgICByb3V0ZS0+aW5wdXQgPSAyOiBjb2xvciBiYXIgKi8KKworCXN3aXRjaCAocm91dGUtPmlucHV0KSB7CisJY2FzZSAwOgorCQlhZHY3MTc1X3dyaXRlKHNkLCAweDAxLCAweDAwKTsKKworCQlpZiAoZW5jb2Rlci0+bm9ybSAmIFY0TDJfU1REX05UU0MpCisJCQlzZXRfc3ViY2Fycmllcl9mcmVxKHNkLCAxKTsKKworCQlhZHY3MTc1X3dyaXRlKHNkLCAweDBjLCBUUjFDQVBUKTsJLyogVFIxICovCisJCWlmIChlbmNvZGVyLT5ub3JtICYgVjRMMl9TVERfU0VDQU0pCisJCQlhZHY3MTc1X3dyaXRlKHNkLCAweDBkLCAweDQ5KTsJLyogRGlzYWJsZSBnZW5sb2NrICovCisJCWVsc2UKKwkJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MGQsIDB4NGYpOwkvKiBFbmFibGUgZ2VubG9jayAqLworCQlhZHY3MTc1X3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwNywgVFIwTU9ERSk7CisJCS8qdWRlbGF5KDEwKTsqLworCQlicmVhazsKKworCWNhc2UgMToKKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwMSwgMHgwMCk7CisKKwkJaWYgKGVuY29kZXItPm5vcm0gJiBWNEwyX1NURF9OVFNDKQorCQkJc2V0X3N1YmNhcnJpZXJfZnJlcShzZCwgMCk7CisKKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwYywgVFIxUExBWSk7CS8qIFRSMSAqLworCQlhZHY3MTc1X3dyaXRlKHNkLCAweDBkLCAweDQ5KTsKKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwNywgVFIwTU9ERSB8IFRSMFJTVCk7CisJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUpOworCQkvKiB1ZGVsYXkoMTApOyAqLworCQlicmVhazsKKworCWNhc2UgMjoKKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwMSwgMHg4MCk7CisKKwkJaWYgKGVuY29kZXItPm5vcm0gJiBWNEwyX1NURF9OVFNDKQorCQkJc2V0X3N1YmNhcnJpZXJfZnJlcShzZCwgMCk7CisKKwkJYWR2NzE3NV93cml0ZShzZCwgMHgwZCwgMHg0OSk7CisJCWFkdjcxNzVfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOworCQlhZHY3MTc1X3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFKTsKKwkJLyogdWRlbGF5KDEwKTsgKi8KKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJpbGxlZ2FsIGlucHV0OiAlZFxuIiwgcm91dGUtPmlucHV0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInN3aXRjaGVkIHRvICVzXG4iLCBpbnB1dHNbcm91dGUtPmlucHV0XSk7CisJZW5jb2Rlci0+aW5wdXQgPSByb3V0ZS0+aW5wdXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYWR2NzE3NV9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgVjRMMl9JREVOVF9BRFY3MTc1LCAwKTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotLyoKLSAqIEdlbmVyaWMgaTJjIHByb2JlCi0gKiBjb25jZXJuaW5nIHRoZSBhZGRyZXNzZXM6IGkyYyB3YW50cyA3IGJpdCAod2l0aG91dCB0aGUgci93IGJpdCksIHNvICc+PjEnCi0gKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7Ci0JSTJDX0FEVjcxNzUgPj4gMSwgKEkyQ19BRFY3MTc1ID4+IDEpICsgMSwKLQlJMkNfQURWNzE3NiA+PiAxLCAoSTJDX0FEVjcxNzYgPj4gMSkgKyAxLAotCUkyQ19DTElFTlRfRU5ECitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGFkdjcxNzVfY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IGFkdjcxNzVfZ19jaGlwX2lkZW50LAorCS5pbml0ID0gYWR2NzE3NV9pbml0LAogfTsKIAotSTJDX0NMSUVOVF9JTlNNT0Q7CitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBhZHY3MTc1X3ZpZGVvX29wcyA9IHsKKwkuc19zdGRfb3V0cHV0ID0gYWR2NzE3NV9zX3N0ZF9vdXRwdXQsCisJLnNfcm91dGluZyA9IGFkdjcxNzVfc19yb3V0aW5nLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgYWR2NzE3NV9vcHMgPSB7CisJLmNvcmUgPSAmYWR2NzE3NV9jb3JlX29wcywKKwkudmlkZW8gPSAmYWR2NzE3NV92aWRlb19vcHMsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgaW50IGFkdjcxNzVfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlpbnQgaTsKIAlzdHJ1Y3QgYWR2NzE3NSAqZW5jb2RlcjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCiAJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLwogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQpAQCAtMzY5LDI2ICszMzksMjkgQEAKIAllbmNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGFkdjcxNzUpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZW5jb2RlciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQllbmNvZGVyLT5ub3JtID0gVklERU9fTU9ERV9QQUw7CisJc2QgPSAmZW5jb2Rlci0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJmFkdjcxNzVfb3BzKTsKKwllbmNvZGVyLT5ub3JtID0gVjRMMl9TVERfTlRTQzsKIAllbmNvZGVyLT5pbnB1dCA9IDA7Ci0JZW5jb2Rlci0+ZW5hYmxlID0gMTsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBlbmNvZGVyKTsKIAotCWkgPSBhZHY3MTc1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9jb21tb24sIHNpemVvZihpbml0X2NvbW1vbikpOworCWkgPSBhZHY3MTc1X3dyaXRlX2Jsb2NrKHNkLCBpbml0X2NvbW1vbiwgc2l6ZW9mKGluaXRfY29tbW9uKSk7CiAJaWYgKGkgPj0gMCkgewotCQlpID0gYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUgfCBUUjBSU1QpOwotCQlpID0gYWR2NzE3NV93cml0ZShjbGllbnQsIDB4MDcsIFRSME1PREUpOwotCQlpID0gYWR2NzE3NV9yZWFkKGNsaWVudCwgMHgxMik7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInJldmlzaW9uICVkXG4iLCBpICYgMSk7CisJCWkgPSBhZHY3MTc1X3dyaXRlKHNkLCAweDA3LCBUUjBNT0RFIHwgVFIwUlNUKTsKKwkJaSA9IGFkdjcxNzVfd3JpdGUoc2QsIDB4MDcsIFRSME1PREUpOworCQlpID0gYWR2NzE3NV9yZWFkKHNkLCAweDEyKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAicmV2aXNpb24gJWRcbiIsIGkgJiAxKTsKIAl9CiAJaWYgKGkgPCAwKQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbml0IGVycm9yIDB4JXhcbiIsIGkpOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJpbml0IGVycm9yIDB4JXhcbiIsIGkpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGFkdjcxNzVfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Ja2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZSh0b19hZHY3MTc1KHNkKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQwMyw4ICszNzYsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAiYWR2NzE3NSIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX0FEVjcxNzUsCi0JLmNvbW1hbmQgPSBhZHY3MTc1X2NvbW1hbmQsCiAJLnByb2JlID0gYWR2NzE3NV9wcm9iZSwKIAkucmVtb3ZlID0gYWR2NzE3NV9yZW1vdmUsCiAJLmlkX3RhYmxlID0gYWR2NzE3NV9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9LY29uZmlnCmluZGV4IDAxOGY3MmIuLjA1Y2RmNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvS2NvbmZpZwpAQCAtMSwxMyArMSwxMyBAQAogCiBjb25maWcgVklERU9fQVUwODI4CiAJdHJpc3RhdGUgIkF1dml0ZWsgQVUwODI4IHN1cHBvcnQiCi0JZGVwZW5kcyBvbiBJMkMgJiYgSU5QVVQgJiYgRFZCX0NPUkUgJiYgVVNCCisJZGVwZW5kcyBvbiBJMkMgJiYgSU5QVVQgJiYgRFZCX0NPUkUgJiYgVVNCICYmIFZJREVPX1Y0TDIKIAlzZWxlY3QgSTJDX0FMR09CSVQKIAlzZWxlY3QgVklERU9fVFZFRVBST00KLQlzZWxlY3QgRFZCX0FVODUyMiBpZiAhRFZCX0ZFX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9YQzUwMDAgaWYgIURWQl9GRV9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfTVhMNTAwN1QgaWYgIURWQl9GRV9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfVERBMTgyNzEgaWYgIURWQl9GRV9DVVNUT01JWkUKKwlzZWxlY3QgRFZCX0FVODUyMiBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9YQzUwMDAgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9NWEw1MDA3VCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1REQTE4MjcxIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciBBdXZpdGVrJ3MgVVNCIGRldmljZS4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9NYWtlZmlsZQppbmRleCBjZDJjNTgyLi40ZDI2MjMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9NYWtlZmlsZQpAQCAtMSw0ICsxLDQgQEAKLWF1MDgyOC1vYmpzCTo9IGF1MDgyOC1jb3JlLm8gYXUwODI4LWkyYy5vIGF1MDgyOC1jYXJkcy5vIGF1MDgyOC1kdmIubworYXUwODI4LW9ianMJOj0gYXUwODI4LWNvcmUubyBhdTA4MjgtaTJjLm8gYXUwODI4LWNhcmRzLm8gYXUwODI4LWR2Yi5vIGF1MDgyOC12aWRlby5vCiAKIG9iai0kKENPTkZJR19WSURFT19BVTA4MjgpICs9IGF1MDgyOC5vCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWNhcmRzLmMKaW5kZXggZDYwMTIzYi4uMWFhYmFhNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWNhcmRzLmMKQEAgLTIxLDI1ICsyMSw4OSBAQAogCiAjaW5jbHVkZSAiYXUwODI4LmgiCiAjaW5jbHVkZSAiYXUwODI4LWNhcmRzLmgiCisjaW5jbHVkZSAiYXU4NTIyLmgiCisjaW5jbHVkZSAibWVkaWEvdHVuZXIuaCIKKyNpbmNsdWRlICJtZWRpYS92NGwyLWNvbW1vbi5oIgorCit2b2lkIGh2cjk1MHFfY3M1MzQwX2F1ZGlvKHZvaWQgKnByaXYsIGludCBlbmFibGUpCit7CisJLyogQmVjYXVzZSB0aGUgSFZSLTk1MHEgc2hhcmVzIGFuIGkycyBidXMgYmV0d2VlbiB0aGUgY3M1MzQwIGFuZCB0aGUKKwkgICBhdTg1MjIsIHdlIG5lZWQgdG8gaG9sZCBjczUzNDAgaW4gcmVzZXQgd2hlbiB1c2luZyB0aGUgYXU4NTIyICovCisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IHByaXY7CisJaWYgKGVuYWJsZSA9PSAxKQorCQlhdTA4Mjhfc2V0KGRldiwgUkVHXzAwMCwgMHgxMCk7CisJZWxzZQorCQlhdTA4MjhfY2xlYXIoZGV2LCBSRUdfMDAwLCAweDEwKTsKK30KIAogc3RydWN0IGF1MDgyOF9ib2FyZCBhdTA4MjhfYm9hcmRzW10gPSB7CiAJW0FVMDgyOF9CT0FSRF9VTktOT1dOXSA9IHsKIAkJLm5hbWUJPSAiVW5rbm93biBib2FyZCIsCisJCS50dW5lcl90eXBlID0gVU5TRVQsCisJCS50dW5lcl9hZGRyID0gQUREUl9VTlNFVCwKIAl9LAogCVtBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjg1MF0gPSB7CiAJCS5uYW1lCT0gIkhhdXBwYXVnZSBIVlI4NTAiLAorCQkudHVuZXJfdHlwZSA9IFRVTkVSX1hDNTAwMCwKKwkJLnR1bmVyX2FkZHIgPSAweDYxLAorCQkuaW5wdXQgPSB7CisJCQl7CisJCQkJLnR5cGUgPSBBVTA4MjhfVk1VWF9URUxFVklTSU9OLAorCQkJCS52bXV4ID0gQVU4NTIyX0NPTVBPU0lURV9DSDRfU0lGLAorCQkJCS5hbXV4ID0gQVU4NTIyX0FVRElPX1NJRiwKKwkJCX0sCisJCQl7CisJCQkJLnR5cGUgPSBBVTA4MjhfVk1VWF9DT01QT1NJVEUsCisJCQkJLnZtdXggPSBBVTg1MjJfQ09NUE9TSVRFX0NIMSwKKwkJCQkuYW11eCA9IEFVODUyMl9BVURJT19OT05FLAorCQkJCS5hdWRpb19zZXR1cCA9IGh2cjk1MHFfY3M1MzQwX2F1ZGlvLAorCQkJfSwKKwkJCXsKKwkJCQkudHlwZSA9IEFVMDgyOF9WTVVYX1NWSURFTywKKwkJCQkudm11eCA9IEFVODUyMl9TVklERU9fQ0gxMywKKwkJCQkuYW11eCA9IEFVODUyMl9BVURJT19OT05FLAorCQkJCS5hdWRpb19zZXR1cCA9IGh2cjk1MHFfY3M1MzQwX2F1ZGlvLAorCQkJfSwKKwkJfSwKIAl9LAogCVtBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjk1MFFdID0gewogCQkubmFtZQk9ICJIYXVwcGF1Z2UgSFZSOTUwUSIsCisJCS50dW5lcl90eXBlID0gVFVORVJfWEM1MDAwLAorCQkudHVuZXJfYWRkciA9IDB4NjEsCisJCS5pbnB1dCA9IHsKKwkJCXsKKwkJCQkudHlwZSA9IEFVMDgyOF9WTVVYX1RFTEVWSVNJT04sCisJCQkJLnZtdXggPSBBVTg1MjJfQ09NUE9TSVRFX0NINF9TSUYsCisJCQkJLmFtdXggPSBBVTg1MjJfQVVESU9fU0lGLAorCQkJfSwKKwkJCXsKKwkJCQkudHlwZSA9IEFVMDgyOF9WTVVYX0NPTVBPU0lURSwKKwkJCQkudm11eCA9IEFVODUyMl9DT01QT1NJVEVfQ0gxLAorCQkJCS5hbXV4ID0gQVU4NTIyX0FVRElPX05PTkUsCisJCQkJLmF1ZGlvX3NldHVwID0gaHZyOTUwcV9jczUzNDBfYXVkaW8sCisJCQl9LAorCQkJeworCQkJCS50eXBlID0gQVUwODI4X1ZNVVhfU1ZJREVPLAorCQkJCS52bXV4ID0gQVU4NTIyX1NWSURFT19DSDEzLAorCQkJCS5hbXV4ID0gQVU4NTIyX0FVRElPX05PTkUsCisJCQkJLmF1ZGlvX3NldHVwID0gaHZyOTUwcV9jczUzNDBfYXVkaW8sCisJCQl9LAorCQl9LAogCX0sCiAJW0FVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSOTUwUV9NWExdID0gewogCQkubmFtZQk9ICJIYXVwcGF1Z2UgSFZSOTUwUSByZXYgeHhGOCIsCisJCS50dW5lcl90eXBlID0gVU5TRVQsCisJCS50dW5lcl9hZGRyID0gQUREUl9VTlNFVCwKIAl9LAogCVtBVTA4MjhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVjddID0gewogCQkubmFtZQk9ICJEVmlDTyBGdXNpb25IRFRWIFVTQiIsCisJCS50dW5lcl90eXBlID0gVU5TRVQsCisJCS50dW5lcl9hZGRyID0gQUREUl9VTlNFVCwKIAl9LAogCVtBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX1dPT0RCVVJZXSA9IHsKIAkJLm5hbWUgPSAiSGF1cHBhdWdlIFdvb2RidXJ5IiwKKwkJLnR1bmVyX3R5cGUgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgPSBBRERSX1VOU0VULAogCX0sCiB9OwogCkBAIC01Miw3ICsxMTYsNyBAQAogCiAJZHByaW50aygxLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCi0Jc3dpdGNoIChkZXYtPmJvYXJkKSB7CisJc3dpdGNoIChkZXYtPmJvYXJkbnIpIHsKIAljYXNlIEFVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSODUwOgogCWNhc2UgQVUwODI4X0JPQVJEX0hBVVBQQVVHRV9IVlI5NTBROgogCWNhc2UgQVUwODI4X0JPQVJEX0hBVVBQQVVHRV9IVlI5NTBRX01YTDoKQEAgLTgxLDE3ICsxNDUsMTggQEAKIAlzdHJ1Y3QgdHZlZXByb20gdHY7CiAKIAl0dmVlcHJvbV9oYXVwcGF1Z2VfYW5hbG9nKCZkZXYtPmkyY19jbGllbnQsICZ0diwgZWVwcm9tX2RhdGEpOworCWRldi0+Ym9hcmQudHVuZXJfdHlwZSA9IHR2LnR1bmVyX3R5cGU7CiAKIAkvKiBNYWtlIHN1cmUgd2Ugc3VwcG9ydCB0aGUgYm9hcmQgbW9kZWwgKi8KIAlzd2l0Y2ggKHR2Lm1vZGVsKSB7CiAJY2FzZSA3MjAwMDogLyogV2luVFYtSFZSOTUwcSAoUmV0YWlsLCBJUiwgQVRTQy9RQU0gKi8KLQljYXNlIDcyMDAxOiAvKiBXaW5UVi1IVlI5NTBxIChSZXRhaWwsIElSLCBBVFNDL1FBTSBhbmQgYmFzaWMgYW5hbG9nIHZpZGVvICovCi0JY2FzZSA3MjIxMTogLyogV2luVFYtSFZSOTUwcSAoT0VNLCBJUiwgQVRTQy9RQU0gYW5kIGJhc2ljIGFuYWxvZyB2aWRlbyAqLwotCWNhc2UgNzIyMjE6IC8qIFdpblRWLUhWUjk1MHEgKE9FTSwgSVIsIEFUU0MvUUFNIGFuZCBiYXNpYyBhbmFsb2cgdmlkZW8gKi8KLQljYXNlIDcyMjMxOiAvKiBXaW5UVi1IVlI5NTBxIChPRU0sIElSLCBBVFNDL1FBTSBhbmQgYmFzaWMgYW5hbG9nIHZpZGVvICovCi0JY2FzZSA3MjI0MTogLyogV2luVFYtSFZSOTUwcSAoT0VNLCBObyBJUiwgQVRTQy9RQU0gYW5kIGJhc2ljIGFuYWxvZyB2aWRlbyAqLwotCWNhc2UgNzIyNTE6IC8qIFdpblRWLUhWUjk1MHEgKFJldGFpbCwgSVIsIEFUU0MvUUFNIGFuZCBiYXNpYyBhbmFsb2cgdmlkZW8gKi8KLQljYXNlIDcyMzAxOiAvKiBXaW5UVi1IVlI4NTAgKFJldGFpbCwgSVIsIEFUU0MgYW5kIGJhc2ljIGFuYWxvZyB2aWRlbyAqLworCWNhc2UgNzIwMDE6IC8qIFdpblRWLUhWUjk1MHEgKFJldGFpbCwgSVIsIEFUU0MvUUFNIGFuZCBhbmFsb2cgdmlkZW8gKi8KKwljYXNlIDcyMjExOiAvKiBXaW5UVi1IVlI5NTBxIChPRU0sIElSLCBBVFNDL1FBTSBhbmQgYW5hbG9nIHZpZGVvICovCisJY2FzZSA3MjIyMTogLyogV2luVFYtSFZSOTUwcSAoT0VNLCBJUiwgQVRTQy9RQU0gYW5kIGFuYWxvZyB2aWRlbyAqLworCWNhc2UgNzIyMzE6IC8qIFdpblRWLUhWUjk1MHEgKE9FTSwgSVIsIEFUU0MvUUFNIGFuZCBhbmFsb2cgdmlkZW8gKi8KKwljYXNlIDcyMjQxOiAvKiBXaW5UVi1IVlI5NTBxIChPRU0sIE5vIElSLCBBVFNDL1FBTSBhbmQgYW5hbG9nIHZpZGVvICovCisJY2FzZSA3MjI1MTogLyogV2luVFYtSFZSOTUwcSAoUmV0YWlsLCBJUiwgQVRTQy9RQU0gYW5kIGFuYWxvZyB2aWRlbyAqLworCWNhc2UgNzIzMDE6IC8qIFdpblRWLUhWUjg1MCAoUmV0YWlsLCBJUiwgQVRTQyBhbmQgYW5hbG9nIHZpZGVvICovCiAJY2FzZSA3MjUwMDogLyogV2luVFYtSFZSOTUwcSAoT0VNLCBObyBJUiwgQVRTQy9RQU0gKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKQEAgLTEwNywxNSArMTcyLDIxIEBACiB2b2lkIGF1MDgyOF9jYXJkX3NldHVwKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYpCiB7CiAJc3RhdGljIHU4IGVlcHJvbVsyNTZdOworCXN0cnVjdCB0dW5lcl9zZXR1cCB0dW5fc2V0dXA7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKwl1bnNpZ25lZCBpbnQgbW9kZV9tYXNrID0gVF9BTkFMT0dfVFYgfAorCQkJCSBUX0RJR0lUQUxfVFY7CiAKIAlkcHJpbnRrKDEsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKKwltZW1jcHkoJmRldi0+Ym9hcmQsICZhdTA4MjhfYm9hcmRzW2Rldi0+Ym9hcmRucl0sIHNpemVvZihkZXYtPmJvYXJkKSk7CisKIAlpZiAoZGV2LT5pMmNfcmMgPT0gMCkgewogCQlkZXYtPmkyY19jbGllbnQuYWRkciA9IDB4YTAgPj4gMTsKIAkJdHZlZXByb21fcmVhZCgmZGV2LT5pMmNfY2xpZW50LCBlZXByb20sIHNpemVvZihlZXByb20pKTsKIAl9CiAKLQlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKKwlzd2l0Y2ggKGRldi0+Ym9hcmRucikgewogCWNhc2UgQVUwODI4X0JPQVJEX0hBVVBQQVVHRV9IVlI4NTA6CiAJY2FzZSBBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjk1MFE6CiAJY2FzZSBBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjk1MFFfTVhMOgpAQCAtMTI0LDYgKzE5NSwzMiBAQAogCQkJaGF1cHBhdWdlX2VlcHJvbShkZXYsIGVlcHJvbSsweGEwKTsKIAkJYnJlYWs7CiAJfQorCisJaWYgKEFVVklfSU5QVVQoMCkudHlwZSAhPSBBVTA4MjhfVk1VWF9VTkRFRklORUQpIHsKKwkJLyogTG9hZCB0aGUgYW5hbG9nIGRlbW9kdWxhdG9yIGRyaXZlciAobm90ZSB0aGlzIHdvdWxkIG5lZWQgdG8KKwkJICAgYmUgYWJzdHJhY3RlZCBvdXQgaWYgd2UgZXZlciBuZWVkIHRvIHN1cHBvcnQgYSBkaWZmZXJlbnQKKwkJICAgZGVtb2QpICovCisJCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT5pMmNfYWRhcCwgImF1ODUyMiIsICJhdTg1MjIiLAorCQkJCQkgMHg4ZSA+PiAxKTsKKwkJaWYgKHNkID09IE5VTEwpCisJCQlwcmludGsoS0VSTl9FUlIgImFuYWxvZyBzdWJkZXYgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CisJfQorCisJLyogU2V0dXAgdHVuZXJzICovCisJaWYgKGRldi0+Ym9hcmQudHVuZXJfdHlwZSAhPSBUVU5FUl9BQlNFTlQpIHsKKwkJLyogTG9hZCB0aGUgdHVuZXIgbW9kdWxlLCB3aGljaCBkb2VzIHRoZSBhdHRhY2ggKi8KKwkJc2QgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPmkyY19hZGFwLCAidHVuZXIiLCAidHVuZXIiLAorCQkJCQkgZGV2LT5ib2FyZC50dW5lcl9hZGRyKTsKKwkJaWYgKHNkID09IE5VTEwpCisJCQlwcmludGsoS0VSTl9FUlIgInR1bmVyIHN1YmRldiByZWdpc3RyYXRpb24gZmFpbFxuIik7CisKKwkJdHVuX3NldHVwLm1vZGVfbWFzayAgICAgID0gbW9kZV9tYXNrOworCQl0dW5fc2V0dXAudHlwZSAgICAgICAgICAgPSBkZXYtPmJvYXJkLnR1bmVyX3R5cGU7CisJCXR1bl9zZXR1cC5hZGRyICAgICAgICAgICA9IGRldi0+Ym9hcmQudHVuZXJfYWRkcjsKKwkJdHVuX3NldHVwLnR1bmVyX2NhbGxiYWNrID0gYXUwODI4X3R1bmVyX2NhbGxiYWNrOworCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgdHVuZXIsIHNfdHlwZV9hZGRyLAorCQkJCSAgICAgJnR1bl9zZXR1cCk7CisJfQogfQogCiAvKgpAQCAtMTM1LDcgKzIzMiw3IEBACiB7CiAJZHByaW50aygxLCAiJXMoKVxuIiwgX19mdW5jX18pOwogCi0Jc3dpdGNoIChkZXYtPmJvYXJkKSB7CisJc3dpdGNoIChkZXYtPmJvYXJkbnIpIHsKIAljYXNlIEFVMDgyOF9CT0FSRF9IQVVQUEFVR0VfSFZSODUwOgogCWNhc2UgQVUwODI4X0JPQVJEX0hBVVBQQVVHRV9IVlI5NTBROgogCWNhc2UgQVUwODI4X0JPQVJEX0hBVVBQQVVHRV9IVlI5NTBRX01YTDoKQEAgLTE0NCwyMSArMjQxLDIzIEBACiAJCSAqIDQgLSBDUzUzNDAKIAkJICogNSAtIEFVODUyMiBEZW1vZHVsYXRvcgogCQkgKiA2IC0gZWVwcm9tIFcvUAorCQkgKiA3IC0gcG93ZXIgc3VwcGx5CiAJCSAqIDkgLSBYQzUwMDAgVHVuZXIKIAkJICovCiAKIAkJLyogSW50byByZXNldCAqLwogCQlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMDAzLCAweDAyKTsKLQkJYXUwODI4X3dyaXRlKGRldiwgUkVHXzAwMiwgMHg4OCB8IDB4MjApOworCQlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMDAyLCAweDgwIHwgMHgyMCB8IDB4MTApOwogCQlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMDAxLCAweDApOwogCQlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMDAwLCAweDApOwogCQltc2xlZXAoMTAwKTsKIAotCQkvKiBPdXQgb2YgcmVzZXQgKi8KKwkJLyogT3V0IG9mIHJlc2V0IChsZWF2ZSB0aGUgY3M1MzQwIGluIHJlc2V0IHVudGlsIG5lZWRlZCkgKi8KIAkJYXUwODI4X3dyaXRlKGRldiwgUkVHXzAwMywgMHgwMik7CiAJCWF1MDgyOF93cml0ZShkZXYsIFJFR18wMDEsIDB4MDIpOwotCQlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMDAyLCAweDg4IHwgMHgyMCk7Ci0JCWF1MDgyOF93cml0ZShkZXYsIFJFR18wMDAsIDB4ODggfCAweDIwIHwgMHg0MCk7CisJCWF1MDgyOF93cml0ZShkZXYsIFJFR18wMDIsIDB4ODAgfCAweDIwIHwgMHgxMCk7CisJCWF1MDgyOF93cml0ZShkZXYsIFJFR18wMDAsIDB4ODAgfCAweDQwIHwgMHgyMCk7CisKIAkJbXNsZWVwKDI1MCk7CiAJCWJyZWFrOwogCWNhc2UgQVUwODI4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFY3OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1jb3JlLmMKaW5kZXggNTc2NWU4Ni4uOGM3NjFkMTY0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1jb3JlLmMKQEAgLTM2LDYgKzM2LDggQEAKIG1vZHVsZV9wYXJhbV9uYW1lZChkZWJ1ZywgYXUwODI4X2RlYnVnLCBpbnQsIDA2NDQpOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyIpOwogCitzdGF0aWMgYXRvbWljX3QgYXUwODI4X2luc3RhbmNlID0gQVRPTUlDX0lOSVQoMCk7CisKICNkZWZpbmUgX0FVMDgyOF9CVUxLUElQRSAweDAzCiAjZGVmaW5lIF9CVUxLUElQRVNJWkUgMHhmZmZmCiAKQEAgLTUxLDEzICs1MywxMyBAQAogdTMyIGF1MDgyOF9yZWFkcmVnKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYsIHUxNiByZWcpCiB7CiAJcmVjdl9jb250cm9sX21zZyhkZXYsIENNRF9SRVFVRVNUX0lOLCAwLCByZWcsIGRldi0+Y3RybG1zZywgMSk7Ci0JZHByaW50ayg4LCAiJXMoMHgleCkgPSAweCV4XG4iLCBfX2Z1bmNfXywgcmVnLCBkZXYtPmN0cmxtc2dbMF0pOworCWRwcmludGsoOCwgIiVzKDB4JTA0eCkgPSAweCUwMnhcbiIsIF9fZnVuY19fLCByZWcsIGRldi0+Y3RybG1zZ1swXSk7CiAJcmV0dXJuIGRldi0+Y3RybG1zZ1swXTsKIH0KIAogdTMyIGF1MDgyOF93cml0ZXJlZyhzdHJ1Y3QgYXUwODI4X2RldiAqZGV2LCB1MTYgcmVnLCB1MzIgdmFsKQogewotCWRwcmludGsoOCwgIiVzKDB4JXgsIDB4JXgpXG4iLCBfX2Z1bmNfXywgcmVnLCB2YWwpOworCWRwcmludGsoOCwgIiVzKDB4JTA0eCwgMHglMDJ4KVxuIiwgX19mdW5jX18sIHJlZywgdmFsKTsKIAlyZXR1cm4gc2VuZF9jb250cm9sX21zZyhkZXYsIENNRF9SRVFVRVNUX09VVCwgdmFsLCByZWcsCiAJCQkJZGV2LT5jdHJsbXNnLCAwKTsKIH0KQEAgLTE0Niw5ICsxNDgsMTQgQEAKIAkvKiBEaWdpdGFsIFRWICovCiAJYXUwODI4X2R2Yl91bnJlZ2lzdGVyKGRldik7CiAKKwlpZiAoQVVWSV9JTlBVVCgwKS50eXBlICE9IEFVMDgyOF9WTVVYX1VOREVGSU5FRCkKKwkJYXUwODI4X2FuYWxvZ191bnJlZ2lzdGVyKGRldik7CisKIAkvKiBJMkMgKi8KIAlhdTA4MjhfaTJjX3VucmVnaXN0ZXIoZGV2KTsKIAorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+djRsMl9kZXYpOworCiAJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOwogCiAJbXV0ZXhfbG9jaygmZGV2LT5tdXRleCk7CkBAIC0xNjIsNyArMTY5LDcgQEAKIHN0YXRpYyBpbnQgYXUwODI4X3VzYl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlLAogCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKLQlpbnQgaWZudW07CisJaW50IGlmbnVtLCByZXR2YWwsIGk7CiAJc3RydWN0IGF1MDgyOF9kZXYgKmRldjsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiZGV2ID0gaW50ZXJmYWNlX3RvX3VzYmRldihpbnRlcmZhY2UpOwogCkBAIC0xODUsMTAgKzE5MiwyMiBAQAogCW11dGV4X2luaXQoJmRldi0+bXV0ZXgpOwogCW11dGV4X2luaXQoJmRldi0+ZHZiLmxvY2spOwogCWRldi0+dXNiZGV2ID0gdXNiZGV2OwotCWRldi0+Ym9hcmQgPSBpZC0+ZHJpdmVyX2luZm87CisJZGV2LT5ib2FyZG5yID0gaWQtPmRyaXZlcl9pbmZvOwogCiAJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIGRldik7CiAKKwkvKiBDcmVhdGUgdGhlIHY0bDJfZGV2aWNlICovCisJaSA9IGF0b21pY19pbmNfcmV0dXJuKCZhdTA4MjhfaW5zdGFuY2UpIC0gMTsKKwlzbnByaW50ZihkZXYtPnY0bDJfZGV2Lm5hbWUsIHNpemVvZihkZXYtPnY0bDJfZGV2Lm5hbWUpLCAiJXMtJTAzZCIsCisJCSAiYXUwODI4IiwgaSk7CisJcmV0dmFsID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJmRldi0+dXNiZGV2LT5kZXYsICZkZXYtPnY0bDJfZGV2KTsKKwlpZiAocmV0dmFsKSB7CisJCXByaW50ayhLRVJOX0VSUiAiJXMoKSB2NGwyX2RldmljZV9yZWdpc3RlciBmYWlsZWRcbiIsCisJCSAgICAgICBfX2Z1bmNfXyk7CisJCWtmcmVlKGRldik7CisJCXJldHVybiAtRUlPOworCX0KKwogCS8qIFBvd2VyIFVwIHRoZSBicmlkZ2UgKi8KIAlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfNjAwLCAxIDw8IDQpOwogCkBAIC0yMDEsMTIgKzIyMCwxNSBAQAogCS8qIFNldHVwICovCiAJYXUwODI4X2NhcmRfc2V0dXAoZGV2KTsKIAorCS8qIEFuYWxvZyBUViAqLworCWlmIChBVVZJX0lOUFVUKDApLnR5cGUgIT0gQVUwODI4X1ZNVVhfVU5ERUZJTkVEKQorCQlhdTA4MjhfYW5hbG9nX3JlZ2lzdGVyKGRldiwgaW50ZXJmYWNlKTsKKwogCS8qIERpZ2l0YWwgVFYgKi8KIAlhdTA4MjhfZHZiX3JlZ2lzdGVyKGRldik7CiAKIAlwcmludGsoS0VSTl9JTkZPICJSZWdpc3RlcmVkIGRldmljZSBBVTA4MjggWyVzXVxuIiwKLQkJYXUwODI4X2JvYXJkc1tkZXYtPmJvYXJkXS5uYW1lID09IE5VTEwgPyAiVW5zZXQiIDoKLQkJYXUwODI4X2JvYXJkc1tkZXYtPmJvYXJkXS5uYW1lKTsKKwkJZGV2LT5ib2FyZC5uYW1lID09IE5VTEwgPyAiVW5zZXQiIDogZGV2LT5ib2FyZC5uYW1lKTsKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWR2Yi5jCmluZGV4IGE4ODJjZjUuLjE0YmFmZmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1kdmIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtZHZiLmMKQEAgLTM3OCw3ICszNzgsNyBAQAogCWRwcmludGsoMSwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCS8qIGluaXQgZnJvbnRlbmQgKi8KLQlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKKwlzd2l0Y2ggKGRldi0+Ym9hcmRucikgewogCWNhc2UgQVUwODI4X0JPQVJEX0hBVVBQQVVHRV9IVlI4NTA6CiAJY2FzZSBBVTA4MjhfQk9BUkRfSEFVUFBBVUdFX0hWUjk1MFE6CiAJCWR2Yi0+ZnJvbnRlbmQgPSBkdmJfYXR0YWNoKGF1ODUyMl9hdHRhY2gsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtaTJjLmMKaW5kZXggZDYxOGZiYS4uZjlhOTU4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1pMmMuYwpAQCAtMTQwLDEzICsxNDAsMzkgQEAKIAlkcHJpbnRrKDQsICIlcygpXG4iLCBfX2Z1bmNfXyk7CiAKIAlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMkZGLCAweDAxKTsKLQlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMjAyLCAweDA3KTsKKworCS8qIEZJWE1FOiBUaGVyZSBpcyBhIHByb2JsZW0gd2l0aCBpMmMgY29tbXVuaWNhdGlvbnMgd2l0aCB4YzUwMDAgdGhhdAorCSAgIHJlcXVpcmVzIHVzIHRvIHNsb3cgZG93biB0aGUgaTJjIGNsb2NrIHVudGlsIHdlIGhhdmUgYSBiZXR0ZXIKKwkgICBzdHJhdGVneSAoc3VjaCBhcyB1c2luZyB0aGUgc2Vjb25kYXJ5IGkyYyBidXMgdG8gZG8gZmlybXdhcmUKKwkgICBsb2FkaW5nICovCisJaWYgKChtc2ctPmFkZHIgPDwgMSkgPT0gMHhjMikKKwkJYXUwODI4X3dyaXRlKGRldiwgUkVHXzIwMiwgMHg0MCk7CisJZWxzZQorCQlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMjAyLCAweDA3KTsKIAogCS8qIEhhcmR3YXJlIG5lZWRzIDggYml0IGFkZHJlc3NlcyAqLwogCWF1MDgyOF93cml0ZShkZXYsIFJFR18yMDMsIG1zZy0+YWRkciA8PCAxKTsKIAogCWRwcmludGsoNCwgIlNFTkQ6ICUwMnhcbiIsIG1zZy0+YWRkcik7CiAKKwkvKiBEZWFsIHdpdGggaTJjX3NjYW4gKi8KKwlpZiAobXNnLT5sZW4gPT0gMCkgeworCQkvKiBUaGUgYW5hbG9nIHR1bmVyIGRldGVjdGlvbiBjb2RlIG1ha2VzIHVzZSBvZiB0aGUgU01CVVNfUVVJQ0sKKwkJICAgbWVzc2FnZSAod2hpY2ggaW52b2x2ZXMgYSB6ZXJvIGxlbmd0aCBpMmMgd3JpdGUpLiAgVG8gYXZvaWQKKwkJICAgY2hlY2tpbmcgdGhlIHN0YXR1cyByZWdpc3RlciB3aGVuIHdlIGRpZG4ndCBzdHJvYmUgb3V0IGFueQorCQkgICBhY3R1YWwgYnl0ZXMgdG8gdGhlIGJ1cywganVzdCBkbyBhIHJlYWQgY2hlY2suICBUaGlzIGlzCisJCSAgIGNvbnNpc3RlbnQgd2l0aCBob3cgSSBzYXcgaTJjIGRldmljZSBjaGVja2luZyBkb25lIGluIHRoZQorCQkgICBVU0IgdHJhY2Ugb2YgdGhlIFdpbmRvd3MgZHJpdmVyICovCisJCWF1MDgyOF93cml0ZShkZXYsIFJFR18yMDAsIDB4MjApOworCQlpZiAoIWkyY193YWl0X2RvbmUoaTJjX2FkYXApKQorCQkJcmV0dXJuIC1FSU87CisKKwkJaWYgKGkyY193YWl0X3JlYWRfYWNrKGkyY19hZGFwKSkKKwkJCXJldHVybiAtRUlPOworCisJCXJldHVybiAwOworCX0KKwogCWZvciAoaSA9IDA7IGkgPCBtc2ctPmxlbjspIHsKIAogCQlkcHJpbnRrKDQsICIgJTAyeFxuIiwgbXNnLT5idWZbaV0pOwpAQCAtMTkxLDcgKzIxNywxNSBAQAogCWRwcmludGsoNCwgIiVzKClcbiIsIF9fZnVuY19fKTsKIAogCWF1MDgyOF93cml0ZShkZXYsIFJFR18yRkYsIDB4MDEpOwotCWF1MDgyOF93cml0ZShkZXYsIFJFR18yMDIsIDB4MDcpOworCisJLyogRklYTUU6IFRoZXJlIGlzIGEgcHJvYmxlbSB3aXRoIGkyYyBjb21tdW5pY2F0aW9ucyB3aXRoIHhjNTAwMCB0aGF0CisJICAgcmVxdWlyZXMgdXMgdG8gc2xvdyBkb3duIHRoZSBpMmMgY2xvY2sgdW50aWwgd2UgaGF2ZSBhIGJldHRlcgorCSAgIHN0cmF0ZWd5IChzdWNoIGFzIHVzaW5nIHRoZSBzZWNvbmRhcnkgaTJjIGJ1cyB0byBkbyBmaXJtd2FyZQorCSAgIGxvYWRpbmcgKi8KKwlpZiAoKG1zZy0+YWRkciA8PCAxKSA9PSAweGMyKQorCQlhdTA4Mjhfd3JpdGUoZGV2LCBSRUdfMjAyLCAweDQwKTsKKwllbHNlCisJCWF1MDgyOF93cml0ZShkZXYsIFJFR18yMDIsIDB4MDcpOwogCiAJLyogSGFyZHdhcmUgbmVlZHMgOCBiaXQgYWRkcmVzc2VzICovCiAJYXUwODI4X3dyaXRlKGRldiwgUkVHXzIwMywgbXNnLT5hZGRyIDw8IDEpOwpAQCAtMjY1LDMzICsyOTksNiBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLXN0YXRpYyBpbnQgYXR0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCWRwcmludGsoMSwgIiVzIGkyYyBhdHRhY2ggW2FkZHI9MHgleCxjbGllbnQ9JXNdXG4iLAotCQljbGllbnQtPmRyaXZlci0+ZHJpdmVyLm5hbWUsIGNsaWVudC0+YWRkciwgY2xpZW50LT5uYW1lKTsKLQotCWlmICghY2xpZW50LT5kcml2ZXItPmNvbW1hbmQpCi0JCXJldHVybiAwOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgZGV0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCWRwcmludGsoMSwgImkyYyBkZXRhY2ggW2NsaWVudD0lc11cbiIsIGNsaWVudC0+bmFtZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBhdTA4MjhfY2FsbF9pMmNfY2xpZW50cyhzdHJ1Y3QgYXUwODI4X2RldiAqZGV2LAotCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCWlmIChkZXYtPmkyY19yYyAhPSAwKQotCQlyZXR1cm47Ci0KLQlpMmNfY2xpZW50c19jb21tYW5kKCZkZXYtPmkyY19hZGFwLCBjbWQsIGFyZyk7Ci19Ci0KIHN0YXRpYyB1MzIgYXUwODI4X2Z1bmN0aW9uYWxpdHkoc3RydWN0IGkyY19hZGFwdGVyICphZGFwKQogewogCXJldHVybiBJMkNfRlVOQ19TTUJVU19FTVVMIHwgSTJDX0ZVTkNfSTJDOwpAQCAtMzA5LDkgKzMxNiw2IEBACiAJLm93bmVyICAgICAgICAgICAgID0gVEhJU19NT0RVTEUsCiAJLmlkICAgICAgICAgICAgICAgID0gSTJDX0hXX0JfQVUwODI4LAogCS5hbGdvICAgICAgICAgICAgICA9ICZhdTA4MjhfaTJjX2FsZ29fdGVtcGxhdGUsCi0JLmNsYXNzICAgICAgICAgICAgID0gSTJDX0NMQVNTX1RWX0FOQUxPRywKLQkuY2xpZW50X3JlZ2lzdGVyICAgPSBhdHRhY2hfaW5mb3JtLAotCS5jbGllbnRfdW5yZWdpc3RlciA9IGRldGFjaF9pbmZvcm0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgYXUwODI4X2kyY19jbGllbnRfdGVtcGxhdGUgPSB7CkBAIC0zNTYsOSArMzYwLDkgQEAKIAlzdHJsY3B5KGRldi0+aTJjX2FkYXAubmFtZSwgRFJJVkVSX05BTUUsCiAJCXNpemVvZihkZXYtPmkyY19hZGFwLm5hbWUpKTsKIAotCWRldi0+aTJjX2FsZ28uZGF0YSA9IGRldjsKKwlkZXYtPmkyY19hZGFwLmFsZ28gPSAmZGV2LT5pMmNfYWxnbzsKIAlkZXYtPmkyY19hZGFwLmFsZ29fZGF0YSA9IGRldjsKLQlpMmNfc2V0X2FkYXBkYXRhKCZkZXYtPmkyY19hZGFwLCBkZXYpOworCWkyY19zZXRfYWRhcGRhdGEoJmRldi0+aTJjX2FkYXAsICZkZXYtPnY0bDJfZGV2KTsKIAlpMmNfYWRkX2FkYXB0ZXIoJmRldi0+aTJjX2FkYXApOwogCiAJZGV2LT5pMmNfY2xpZW50LmFkYXB0ZXIgPSAmZGV2LT5pMmNfYWRhcDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1yZWcuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1yZWcuaAppbmRleCAxZTg3ZmEwYzYuLmIxNWU0YTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYXUwODI4L2F1MDgyOC1yZWcuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtcmVnLmgKQEAgLTI3LDYgKzI3LDkgQEAKICNkZWZpbmUgUkVHXzAwMiAweDAwMgogI2RlZmluZSBSRUdfMDAzIDB4MDAzCiAKKyNkZWZpbmUgQVUwODI4X1NFTlNPUkNUUkxfMTAwIDB4MTAwCisjZGVmaW5lIEFVMDgyOF9TRU5TT1JDVFJMX1ZCSV8xMDMgMHgxMDMKKwogI2RlZmluZSBSRUdfMjAwIDB4MjAwCiAjZGVmaW5lIFJFR18yMDEgMHgyMDEKICNkZWZpbmUgUkVHXzIwMiAweDIwMgpAQCAtMzUsNCArMzgsNyBAQAogI2RlZmluZSBSRUdfMjA5IDB4MjA5CiAjZGVmaW5lIFJFR18yRkYgMHgyZmYKIAorLyogQXVkaW8gcmVnaXN0ZXJzICovCisjZGVmaW5lIEFVMDgyOF9BVURJT0NUUkxfNTBDIDB4NTBDCisKICNkZWZpbmUgUkVHXzYwMCAweDYwMApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjgtdmlkZW8uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5mN2FkNDk1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LXZpZGVvLmMKQEAgLTAsMCArMSwxNzEyIEBACisvKgorICogQXV2aXRlayBBVTA4MjggVVNCIEJyaWRnZSAoQW5hbG9nIHZpZGVvIHN1cHBvcnQpCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IERldmluIEhlaXRtdWVsbGVyIDxkaGVpdG11ZWxsZXJAbGludXh0di5vcmc+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDUtMjAwOCBBdXZpdGVrIEludGVybmF0aW9uYWwsIEx0ZC4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogQXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIKKyAqIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BCisgKiAwMjExMC0xMzAxLCBVU0EuCisgKi8KKworLyogRGV2ZWxvcGVyIE5vdGVzOgorICoKKyAqIFZCSSBzdXBwb3J0IGlzIG5vdCB5ZXQgd29ya2luZworICogVGhlIGhhcmR3YXJlIHNjYWxlciBzdXBwb3J0ZWQgaXMgdW5pbXBsZW1lbnRlZAorICogQUM5NyBhdWRpbyBzdXBwb3J0IGlzIHVuaW1wbGVtZW50ZWQgKG9ubHkgaTJzIGF1ZGlvIG1vZGUpCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbml0Lmg+CisjaW5jbHVkZSA8bGludXgvZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvc3VzcGVuZC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgorI2luY2x1ZGUgImF1MDgyOC5oIgorI2luY2x1ZGUgImF1MDgyOC1yZWcuaCIKKworc3RhdGljIExJU1RfSEVBRChhdTA4MjhfZGV2bGlzdCk7CitzdGF0aWMgREVGSU5FX01VVEVYKGF1MDgyOF9zeXNmc19sb2NrKTsKKworI2RlZmluZSBBVTA4MjhfVkVSU0lPTl9DT0RFIEtFUk5FTF9WRVJTSU9OKDAsIDAsIDEpCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorCVZpZGVvYnVmIG9wZXJhdGlvbnMKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaXNvY19kZWJ1ZzsKK21vZHVsZV9wYXJhbShpc29jX2RlYnVnLCBpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhpc29jX2RlYnVnLCAiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIFtpc29jIHRyYW5zZmVyc10iKTsKKworI2RlZmluZSBhdTA4MjhfaXNvY2RiZyhmbXQsIGFyZy4uLikgXAorZG8ge1wKKwlpZiAoaXNvY19kZWJ1ZykgeyBcCisJCXByaW50ayhLRVJOX0lORk8gImF1MDgyOCAlcyA6ImZtdCwgXAorCQkgICAgICAgX19mdW5jX18gLCAjI2FyZyk7CSAgIFwKKwl9IFwKKyAgfSB3aGlsZSAoMCkKKworc3RhdGljIGlubGluZSB2b2lkIHByaW50X2Vycl9zdGF0dXMoc3RydWN0IGF1MDgyOF9kZXYgKmRldiwKKwkJCQkgICAgaW50IHBhY2tldCwgaW50IHN0YXR1cykKK3sKKwljaGFyICplcnJtc2cgPSAiVW5rbm93biI7CisKKwlzd2l0Y2ggKHN0YXR1cykgeworCWNhc2UgLUVOT0VOVDoKKwkJZXJybXNnID0gInVubGlua2VkIHN5bmNocm9udW91c2x5IjsKKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDoKKwkJZXJybXNnID0gInVubGlua2VkIGFzeW5jaHJvbnVvdXNseSI7CisJCWJyZWFrOworCWNhc2UgLUVOT1NSOgorCQllcnJtc2cgPSAiQnVmZmVyIGVycm9yIChvdmVycnVuKSI7CisJCWJyZWFrOworCWNhc2UgLUVQSVBFOgorCQllcnJtc2cgPSAiU3RhbGxlZCAoZGV2aWNlIG5vdCByZXNwb25kaW5nKSI7CisJCWJyZWFrOworCWNhc2UgLUVPVkVSRkxPVzoKKwkJZXJybXNnID0gIkJhYmJsZSAoYmFkIGNhYmxlPykiOworCQlicmVhazsKKwljYXNlIC1FUFJPVE86CisJCWVycm1zZyA9ICJCaXQtc3R1ZmYgZXJyb3IgKGJhZCBjYWJsZT8pIjsKKwkJYnJlYWs7CisJY2FzZSAtRUlMU0VROgorCQllcnJtc2cgPSAiQ1JDL1RpbWVvdXQgKGNvdWxkIGJlIGFueXRoaW5nKSI7CisJCWJyZWFrOworCWNhc2UgLUVUSU1FOgorCQllcnJtc2cgPSAiRGV2aWNlIGRvZXMgbm90IHJlc3BvbmQiOworCQlicmVhazsKKwl9CisJaWYgKHBhY2tldCA8IDApIHsKKwkJYXUwODI4X2lzb2NkYmcoIlVSQiBzdGF0dXMgJWQgWyVzXS5cbiIsCXN0YXR1cywgZXJybXNnKTsKKwl9IGVsc2UgeworCQlhdTA4MjhfaXNvY2RiZygiVVJCIHBhY2tldCAlZCwgc3RhdHVzICVkIFslc10uXG4iLAorCQkJICAgICAgIHBhY2tldCwgc3RhdHVzLCBlcnJtc2cpOworCX0KK30KKworc3RhdGljIGludCBjaGVja19kZXYoc3RydWN0IGF1MDgyOF9kZXYgKmRldikKK3sKKwlpZiAoZGV2LT5kZXZfc3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB7CisJCXByaW50ayhLRVJOX0lORk8gInY0bDIgaW9jdGw6IGRldmljZSBub3QgcHJlc2VudFxuIik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWlmIChkZXYtPmRldl9zdGF0ZSAmIERFVl9NSVNDT05GSUdVUkVEKSB7CisJCXByaW50ayhLRVJOX0lORk8gInY0bDIgaW9jdGw6IGRldmljZSBpcyBtaXNjb25maWd1cmVkOyAiCisJCSAgICAgICAiY2xvc2UgYW5kIG9wZW4gaXQgYWdhaW5cbiIpOworCQlyZXR1cm4gLUVJTzsKKwl9CisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiBJUlEgY2FsbGJhY2ssIGNhbGxlZCBieSBVUkIgY2FsbGJhY2sKKyAqLworc3RhdGljIHZvaWQgYXUwODI4X2lycV9jYWxsYmFjayhzdHJ1Y3QgdXJiICp1cmIpCit7CisJc3RydWN0IGF1MDgyOF9kbWFxdWV1ZSAgKmRtYV9xID0gdXJiLT5jb250ZXh0OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBjb250YWluZXJfb2YoZG1hX3EsIHN0cnVjdCBhdTA4MjhfZGV2LCB2aWRxKTsKKwlpbnQgcmMsIGk7CisKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOiAgICAgICAgICAgICAvKiBzdWNjZXNzICovCisJY2FzZSAtRVRJTUVET1VUOiAgICAvKiBOQUsgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDogICAvKiBraWxsICovCisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJYXUwODI4X2lzb2NkYmcoImF1MDgyOF9pcnFfY2FsbGJhY2sgY2FsbGVkOiBzdGF0dXMga2lsbFxuIik7CisJCXJldHVybjsKKwlkZWZhdWx0OiAgICAgICAgICAgIC8qIHVua25vd24gZXJyb3IgKi8KKwkJYXUwODI4X2lzb2NkYmcoInVyYiBjb21wbGV0aXRpb24gZXJyb3IgJWQuXG4iLCB1cmItPnN0YXR1cyk7CisJCWJyZWFrOworCX0KKworCS8qIENvcHkgZGF0YSBmcm9tIFVSQiAqLworCXNwaW5fbG9jaygmZGV2LT5zbG9jayk7CisJcmMgPSBkZXYtPmlzb2NfY3RsLmlzb2NfY29weShkZXYsIHVyYik7CisJc3Bpbl91bmxvY2soJmRldi0+c2xvY2spOworCisJLyogUmVzZXQgdXJiIGJ1ZmZlcnMgKi8KKwlmb3IgKGkgPSAwOyBpIDwgdXJiLT5udW1iZXJfb2ZfcGFja2V0czsgaSsrKSB7CisJCXVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzID0gMDsKKwkJdXJiLT5pc29fZnJhbWVfZGVzY1tpXS5hY3R1YWxfbGVuZ3RoID0gMDsKKwl9CisJdXJiLT5zdGF0dXMgPSAwOworCisJdXJiLT5zdGF0dXMgPSB1c2Jfc3VibWl0X3VyYih1cmIsIEdGUF9BVE9NSUMpOworCWlmICh1cmItPnN0YXR1cykgeworCQlhdTA4MjhfaXNvY2RiZygidXJiIHJlc3VibWl0IGZhaWxlZCAoZXJyb3I9JWkpXG4iLAorCQkJICAgICAgIHVyYi0+c3RhdHVzKTsKKwl9Cit9CisKKy8qCisgKiBTdG9wIGFuZCBEZWFsbG9jYXRlIFVSQnMKKyAqLwordm9pZCBhdTA4MjhfdW5pbml0X2lzb2Moc3RydWN0IGF1MDgyOF9kZXYgKmRldikKK3sKKwlzdHJ1Y3QgdXJiICp1cmI7CisJaW50IGk7CisKKwlhdTA4MjhfaXNvY2RiZygiYXUwODI4OiBjYWxsZWQgYXUwODI4X3VuaW5pdF9pc29jXG4iKTsKKworCWRldi0+aXNvY19jdGwubmZpZWxkcyA9IC0xOworCWZvciAoaSA9IDA7IGkgPCBkZXYtPmlzb2NfY3RsLm51bV9idWZzOyBpKyspIHsKKwkJdXJiID0gZGV2LT5pc29jX2N0bC51cmJbaV07CisJCWlmICh1cmIpIHsKKwkJCWlmICghaXJxc19kaXNhYmxlZCgpKQorCQkJCXVzYl9raWxsX3VyYih1cmIpOworCQkJZWxzZQorCQkJCXVzYl91bmxpbmtfdXJiKHVyYik7CisKKwkJCWlmIChkZXYtPmlzb2NfY3RsLnRyYW5zZmVyX2J1ZmZlcltpXSkgeworCQkJCXVzYl9idWZmZXJfZnJlZShkZXYtPnVzYmRldiwKKwkJCQkJdXJiLT50cmFuc2Zlcl9idWZmZXJfbGVuZ3RoLAorCQkJCQlkZXYtPmlzb2NfY3RsLnRyYW5zZmVyX2J1ZmZlcltpXSwKKwkJCQkJdXJiLT50cmFuc2Zlcl9kbWEpOworCQkJfQorCQkJdXNiX2ZyZWVfdXJiKHVyYik7CisJCQlkZXYtPmlzb2NfY3RsLnVyYltpXSA9IE5VTEw7CisJCX0KKwkJZGV2LT5pc29jX2N0bC50cmFuc2Zlcl9idWZmZXJbaV0gPSBOVUxMOworCX0KKworCWtmcmVlKGRldi0+aXNvY19jdGwudXJiKTsKKwlrZnJlZShkZXYtPmlzb2NfY3RsLnRyYW5zZmVyX2J1ZmZlcik7CisKKwlkZXYtPmlzb2NfY3RsLnVyYiA9IE5VTEw7CisJZGV2LT5pc29jX2N0bC50cmFuc2Zlcl9idWZmZXIgPSBOVUxMOworCWRldi0+aXNvY19jdGwubnVtX2J1ZnMgPSAwOworfQorCisvKgorICogQWxsb2NhdGUgVVJCcyBhbmQgc3RhcnQgSVJRCisgKi8KK2ludCBhdTA4MjhfaW5pdF9pc29jKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYsIGludCBtYXhfcGFja2V0cywKKwkJICAgICBpbnQgbnVtX2J1ZnMsIGludCBtYXhfcGt0X3NpemUsCisJCSAgICAgaW50ICgqaXNvY19jb3B5KSAoc3RydWN0IGF1MDgyOF9kZXYgKmRldiwgc3RydWN0IHVyYiAqdXJiKSkKK3sKKwlzdHJ1Y3QgYXUwODI4X2RtYXF1ZXVlICpkbWFfcSA9ICZkZXYtPnZpZHE7CisJaW50IGk7CisJaW50IHNiX3NpemUsIHBpcGU7CisJc3RydWN0IHVyYiAqdXJiOworCWludCBqLCBrOworCWludCByYzsKKworCWF1MDgyOF9pc29jZGJnKCJhdTA4Mjg6IGNhbGxlZCBhdTA4MjhfcHJlcGFyZV9pc29jXG4iKTsKKworCS8qIERlLWFsbG9jYXRlcyBhbGwgcGVuZGluZyBzdHVmZiAqLworCWF1MDgyOF91bmluaXRfaXNvYyhkZXYpOworCisJZGV2LT5pc29jX2N0bC5pc29jX2NvcHkgPSBpc29jX2NvcHk7CisJZGV2LT5pc29jX2N0bC5udW1fYnVmcyA9IG51bV9idWZzOworCisJZGV2LT5pc29jX2N0bC51cmIgPSBremFsbG9jKHNpemVvZih2b2lkICopKm51bV9idWZzLCAgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPmlzb2NfY3RsLnVyYikgeworCQlhdTA4MjhfaXNvY2RiZygiY2Fubm90IGFsbG9jIG1lbW9yeSBmb3IgdXNiIGJ1ZmZlcnNcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlkZXYtPmlzb2NfY3RsLnRyYW5zZmVyX2J1ZmZlciA9IGt6YWxsb2Moc2l6ZW9mKHZvaWQgKikqbnVtX2J1ZnMsCisJCQkJCSAgICAgIEdGUF9LRVJORUwpOworCWlmICghZGV2LT5pc29jX2N0bC50cmFuc2Zlcl9idWZmZXIpIHsKKwkJYXUwODI4X2lzb2NkYmcoImNhbm5vdCBhbGxvY2F0ZSBtZW1vcnkgZm9yIHVzYiB0cmFuc2ZlclxuIik7CisJCWtmcmVlKGRldi0+aXNvY19jdGwudXJiKTsKKwkJcmV0dXJuIC1FTk9NRU07CisJfQorCisJZGV2LT5pc29jX2N0bC5tYXhfcGt0X3NpemUgPSBtYXhfcGt0X3NpemU7CisJZGV2LT5pc29jX2N0bC5idWYgPSBOVUxMOworCisJc2Jfc2l6ZSA9IG1heF9wYWNrZXRzICogZGV2LT5pc29jX2N0bC5tYXhfcGt0X3NpemU7CisKKwkvKiBhbGxvY2F0ZSB1cmJzIGFuZCB0cmFuc2ZlciBidWZmZXJzICovCisJZm9yIChpID0gMDsgaSA8IGRldi0+aXNvY19jdGwubnVtX2J1ZnM7IGkrKykgeworCQl1cmIgPSB1c2JfYWxsb2NfdXJiKG1heF9wYWNrZXRzLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCF1cmIpIHsKKwkJCWF1MDgyOF9pc29jZGJnKCJjYW5ub3QgYWxsb2MgaXNvY19jdGwudXJiICVpXG4iLCBpKTsKKwkJCWF1MDgyOF91bmluaXRfaXNvYyhkZXYpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJZGV2LT5pc29jX2N0bC51cmJbaV0gPSB1cmI7CisKKwkJZGV2LT5pc29jX2N0bC50cmFuc2Zlcl9idWZmZXJbaV0gPSB1c2JfYnVmZmVyX2FsbG9jKGRldi0+dXNiZGV2LAorCQkJc2Jfc2l6ZSwgR0ZQX0tFUk5FTCwgJnVyYi0+dHJhbnNmZXJfZG1hKTsKKwkJaWYgKCFkZXYtPmlzb2NfY3RsLnRyYW5zZmVyX2J1ZmZlcltpXSkgeworCQkJcHJpbnRrKCJ1bmFibGUgdG8gYWxsb2NhdGUgJWkgYnl0ZXMgZm9yIHRyYW5zZmVyIgorCQkJCQkiIGJ1ZmZlciAlaSVzXG4iLAorCQkJCQlzYl9zaXplLCBpLAorCQkJCQlpbl9pbnRlcnJ1cHQoKSA/ICIgd2hpbGUgaW4gaW50IiA6ICIiKTsKKwkJCWF1MDgyOF91bmluaXRfaXNvYyhkZXYpOworCQkJcmV0dXJuIC1FTk9NRU07CisJCX0KKwkJbWVtc2V0KGRldi0+aXNvY19jdGwudHJhbnNmZXJfYnVmZmVyW2ldLCAwLCBzYl9zaXplKTsKKworCQlwaXBlID0gdXNiX3Jjdmlzb2NwaXBlKGRldi0+dXNiZGV2LAorCQkJCSAgICAgICBkZXYtPmlzb2NfaW5fZW5kcG9pbnRhZGRyKSwKKworCQl1c2JfZmlsbF9pbnRfdXJiKHVyYiwgZGV2LT51c2JkZXYsIHBpcGUsCisJCQkJIGRldi0+aXNvY19jdGwudHJhbnNmZXJfYnVmZmVyW2ldLCBzYl9zaXplLAorCQkJCSBhdTA4MjhfaXJxX2NhbGxiYWNrLCBkbWFfcSwgMSk7CisKKwkJdXJiLT5udW1iZXJfb2ZfcGFja2V0cyA9IG1heF9wYWNrZXRzOworCQl1cmItPnRyYW5zZmVyX2ZsYWdzID0gVVJCX0lTT19BU0FQIHwgVVJCX05PX1RSQU5TRkVSX0RNQV9NQVA7CisKKwkJayA9IDA7CisJCWZvciAoaiA9IDA7IGogPCBtYXhfcGFja2V0czsgaisrKSB7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLm9mZnNldCA9IGs7CisJCQl1cmItPmlzb19mcmFtZV9kZXNjW2pdLmxlbmd0aCA9CisJCQkJCQlkZXYtPmlzb2NfY3RsLm1heF9wa3Rfc2l6ZTsKKwkJCWsgKz0gZGV2LT5pc29jX2N0bC5tYXhfcGt0X3NpemU7CisJCX0KKwl9CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkbWFfcS0+d3EpOworCisJLyogc3VibWl0IHVyYnMgYW5kIGVuYWJsZXMgSVJRICovCisJZm9yIChpID0gMDsgaSA8IGRldi0+aXNvY19jdGwubnVtX2J1ZnM7IGkrKykgeworCQlyYyA9IHVzYl9zdWJtaXRfdXJiKGRldi0+aXNvY19jdGwudXJiW2ldLCBHRlBfQVRPTUlDKTsKKwkJaWYgKHJjKSB7CisJCQlhdTA4MjhfaXNvY2RiZygic3VibWl0IG9mIHVyYiAlaSBmYWlsZWQgKGVycm9yPSVpKVxuIiwKKwkJCQkgICAgICAgaSwgcmMpOworCQkJYXUwODI4X3VuaW5pdF9pc29jKGRldik7CisJCQlyZXR1cm4gcmM7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIEFubm91bmNlcyB0aGF0IGEgYnVmZmVyIHdlcmUgZmlsbGVkIGFuZCByZXF1ZXN0IHRoZSBuZXh0CisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBidWZmZXJfZmlsbGVkKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYsCisJCQkJICBzdHJ1Y3QgYXUwODI4X2RtYXF1ZXVlICpkbWFfcSwKKwkJCQkgIHN0cnVjdCBhdTA4MjhfYnVmZmVyICpidWYpCit7CisJLyogQWR2aWNlIHRoYXQgYnVmZmVyIHdhcyBmaWxsZWQgKi8KKwlhdTA4MjhfaXNvY2RiZygiWyVwLyVkXSB3YWtldXBcbiIsIGJ1ZiwgYnVmLT52Yi5pKTsKKworCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9ET05FOworCWJ1Zi0+dmIuZmllbGRfY291bnQrKzsKKwlkb19nZXR0aW1lb2ZkYXkoJmJ1Zi0+dmIudHMpOworCisJZGV2LT5pc29jX2N0bC5idWYgPSBOVUxMOworCisJbGlzdF9kZWwoJmJ1Zi0+dmIucXVldWUpOworCXdha2VfdXAoJmJ1Zi0+dmIuZG9uZSk7Cit9CisKKy8qCisgKiBJZGVudGlmeSB0aGUgYnVmZmVyIGhlYWRlciB0eXBlIGFuZCBwcm9wZXJseSBoYW5kbGVzCisgKi8KK3N0YXRpYyB2b2lkIGF1MDgyOF9jb3B5X3ZpZGVvKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYsCisJCQkgICAgICBzdHJ1Y3QgYXUwODI4X2RtYXF1ZXVlICAqZG1hX3EsCisJCQkgICAgICBzdHJ1Y3QgYXUwODI4X2J1ZmZlciAqYnVmLAorCQkJICAgICAgdW5zaWduZWQgY2hhciAqcCwKKwkJCSAgICAgIHVuc2lnbmVkIGNoYXIgKm91dHAsIHVuc2lnbmVkIGxvbmcgbGVuKQoreworCXZvaWQgKmZpZWxkc3RhcnQsICpzdGFydHdyaXRlLCAqc3RhcnRyZWFkOworCWludCAgbGluZXNkb25lLCBjdXJybGluZWRvbmUsIG9mZnNldCwgbGVuY29weSwgcmVtYWluOworCWludCBieXRlc3BlcmxpbmUgPSBkZXYtPndpZHRoIDw8IDE7IC8qIEFzc3VtZXMgMTYtYml0IGRlcHRoIEBAQEAgKi8KKworCWlmIChkbWFfcS0+cG9zICsgbGVuID4gYnVmLT52Yi5zaXplKQorCQlsZW4gPSBidWYtPnZiLnNpemUgLSBkbWFfcS0+cG9zOworCisJc3RhcnRyZWFkID0gcDsKKwlyZW1haW4gPSBsZW47CisKKwkvKiBJbnRlcmxhY2VzIGZyYW1lICovCisJaWYgKGJ1Zi0+dG9wX2ZpZWxkKQorCQlmaWVsZHN0YXJ0ID0gb3V0cDsKKwllbHNlCisJCWZpZWxkc3RhcnQgPSBvdXRwICsgYnl0ZXNwZXJsaW5lOworCisJbGluZXNkb25lID0gZG1hX3EtPnBvcyAvIGJ5dGVzcGVybGluZTsKKwljdXJybGluZWRvbmUgPSBkbWFfcS0+cG9zICUgYnl0ZXNwZXJsaW5lOworCW9mZnNldCA9IGxpbmVzZG9uZSAqIGJ5dGVzcGVybGluZSAqIDIgKyBjdXJybGluZWRvbmU7CisJc3RhcnR3cml0ZSA9IGZpZWxkc3RhcnQgKyBvZmZzZXQ7CisJbGVuY29weSA9IGJ5dGVzcGVybGluZSAtIGN1cnJsaW5lZG9uZTsKKwlsZW5jb3B5ID0gbGVuY29weSA+IHJlbWFpbiA/IHJlbWFpbiA6IGxlbmNvcHk7CisKKwlpZiAoKGNoYXIgKilzdGFydHdyaXRlICsgbGVuY29weSA+IChjaGFyICopb3V0cCArIGJ1Zi0+dmIuc2l6ZSkgeworCQlhdTA4MjhfaXNvY2RiZygiT3ZlcmZsb3cgb2YgJXppIGJ5dGVzIHBhc3QgYnVmZmVyIGVuZCAoMSlcbiIsCisJCQkgICAgICAgKChjaGFyICopc3RhcnR3cml0ZSArIGxlbmNvcHkpIC0KKwkJCSAgICAgICAoKGNoYXIgKilvdXRwICsgYnVmLT52Yi5zaXplKSk7CisJCXJlbWFpbiA9IChjaGFyICopb3V0cCArIGJ1Zi0+dmIuc2l6ZSAtIChjaGFyICopc3RhcnR3cml0ZTsKKwkJbGVuY29weSA9IHJlbWFpbjsKKwl9CisJaWYgKGxlbmNvcHkgPD0gMCkKKwkJcmV0dXJuOworCW1lbWNweShzdGFydHdyaXRlLCBzdGFydHJlYWQsIGxlbmNvcHkpOworCisJcmVtYWluIC09IGxlbmNvcHk7CisKKwl3aGlsZSAocmVtYWluID4gMCkgeworCQlzdGFydHdyaXRlICs9IGxlbmNvcHkgKyBieXRlc3BlcmxpbmU7CisJCXN0YXJ0cmVhZCArPSBsZW5jb3B5OworCQlpZiAoYnl0ZXNwZXJsaW5lID4gcmVtYWluKQorCQkJbGVuY29weSA9IHJlbWFpbjsKKwkJZWxzZQorCQkJbGVuY29weSA9IGJ5dGVzcGVybGluZTsKKworCQlpZiAoKGNoYXIgKilzdGFydHdyaXRlICsgbGVuY29weSA+IChjaGFyICopb3V0cCArCisJCSAgICBidWYtPnZiLnNpemUpIHsKKwkJCWF1MDgyOF9pc29jZGJnKCJPdmVyZmxvdyAlemkgYnl0ZXMgcGFzdCBidWYgZW5kICgyKVxuIiwKKwkJCQkgICAgICAgKChjaGFyICopc3RhcnR3cml0ZSArIGxlbmNvcHkpIC0KKwkJCQkgICAgICAgKChjaGFyICopb3V0cCArIGJ1Zi0+dmIuc2l6ZSkpOworCQkJbGVuY29weSA9IHJlbWFpbiA9IChjaGFyICopb3V0cCArIGJ1Zi0+dmIuc2l6ZSAtCisJCQkJCSAgIChjaGFyICopc3RhcnR3cml0ZTsKKwkJfQorCQlpZiAobGVuY29weSA8PSAwKQorCQkJYnJlYWs7CisKKwkJbWVtY3B5KHN0YXJ0d3JpdGUsIHN0YXJ0cmVhZCwgbGVuY29weSk7CisKKwkJcmVtYWluIC09IGxlbmNvcHk7CisJfQorCisJaWYgKG9mZnNldCA+IDE0NDApIHsKKwkJLyogV2UgaGF2ZSBlbm91Z2ggZGF0YSB0byBjaGVjayBmb3IgZ3JlZW5zY3JlZW4gKi8KKwkJaWYgKG91dHBbMF0gPCAweDYwICYmIG91dHBbMTQ0MF0gPCAweDYwKQorCQkJZGV2LT5ncmVlbnNjcmVlbl9kZXRlY3RlZCA9IDE7CisJfQorCisJZG1hX3EtPnBvcyArPSBsZW47Cit9CisKKy8qCisgKiB2aWRlby1idWYgZ2VuZXJpYyByb3V0aW5lIHRvIGdldCB0aGUgbmV4dCBhdmFpbGFibGUgYnVmZmVyCisgKi8KK3N0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbmV4dF9idWYoc3RydWN0IGF1MDgyOF9kbWFxdWV1ZSAqZG1hX3EsCisJCQkJc3RydWN0IGF1MDgyOF9idWZmZXIgKipidWYpCit7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGNvbnRhaW5lcl9vZihkbWFfcSwgc3RydWN0IGF1MDgyOF9kZXYsIHZpZHEpOworCisJaWYgKGxpc3RfZW1wdHkoJmRtYV9xLT5hY3RpdmUpKSB7CisJCWF1MDgyOF9pc29jZGJnKCJObyBhY3RpdmUgcXVldWUgdG8gc2VydmVcbiIpOworCQlkZXYtPmlzb2NfY3RsLmJ1ZiA9IE5VTEw7CisJCSpidWYgPSBOVUxMOworCQlyZXR1cm47CisJfQorCisJLyogR2V0IHRoZSBuZXh0IGJ1ZmZlciAqLworCSpidWYgPSBsaXN0X2VudHJ5KGRtYV9xLT5hY3RpdmUubmV4dCwgc3RydWN0IGF1MDgyOF9idWZmZXIsIHZiLnF1ZXVlKTsKKwlkZXYtPmlzb2NfY3RsLmJ1ZiA9ICpidWY7CisKKwlyZXR1cm47Cit9CisKKy8qCisgKiBDb250cm9scyB0aGUgaXNvYyBjb3B5IG9mIGVhY2ggdXJiIHBhY2tldAorICovCitzdGF0aWMgaW5saW5lIGludCBhdTA4MjhfaXNvY19jb3B5KHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYsIHN0cnVjdCB1cmIgKnVyYikKK3sKKwlzdHJ1Y3QgYXUwODI4X2J1ZmZlciAgICAqYnVmOworCXN0cnVjdCBhdTA4MjhfZG1hcXVldWUgICpkbWFfcSA9IHVyYi0+Y29udGV4dDsKKwl1bnNpZ25lZCBjaGFyICpvdXRwID0gTlVMTDsKKwlpbnQgaSwgbGVuID0gMCwgcmMgPSAxOworCXVuc2lnbmVkIGNoYXIgKnA7CisJdW5zaWduZWQgY2hhciBmYnl0ZTsKKworCWlmICghZGV2KQorCQlyZXR1cm4gMDsKKworCWlmICgoZGV2LT5kZXZfc3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB8fAorCSAgICAoZGV2LT5kZXZfc3RhdGUgJiBERVZfTUlTQ09ORklHVVJFRCkpCisJCXJldHVybiAwOworCisJaWYgKHVyYi0+c3RhdHVzIDwgMCkgeworCQlwcmludF9lcnJfc3RhdHVzKGRldiwgLTEsIHVyYi0+c3RhdHVzKTsKKwkJaWYgKHVyYi0+c3RhdHVzID09IC1FTk9FTlQpCisJCQlyZXR1cm4gMDsKKwl9CisKKwlidWYgPSBkZXYtPmlzb2NfY3RsLmJ1ZjsKKwlpZiAoYnVmICE9IE5VTEwpCisJCW91dHAgPSB2aWRlb2J1Zl90b192bWFsbG9jKCZidWYtPnZiKTsKKworCWZvciAoaSA9IDA7IGkgPCB1cmItPm51bWJlcl9vZl9wYWNrZXRzOyBpKyspIHsKKwkJaW50IHN0YXR1cyA9IHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzOworCisJCWlmIChzdGF0dXMgPCAwKSB7CisJCQlwcmludF9lcnJfc3RhdHVzKGRldiwgaSwgc3RhdHVzKTsKKwkJCWlmICh1cmItPmlzb19mcmFtZV9kZXNjW2ldLnN0YXR1cyAhPSAtRVBST1RPKQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCA8PSAwKQorCQkJY29udGludWU7CisKKwkJaWYgKHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uYWN0dWFsX2xlbmd0aCA+CisJCQkJCQlkZXYtPm1heF9wa3Rfc2l6ZSkgeworCQkJYXUwODI4X2lzb2NkYmcoInBhY2tldCBiaWdnZXIgdGhhbiBwYWNrZXQgc2l6ZSIpOworCQkJY29udGludWU7CisJCX0KKworCQlwID0gdXJiLT50cmFuc2Zlcl9idWZmZXIgKyB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldDsKKwkJZmJ5dGUgPSBwWzBdOworCQlsZW4gPSB1cmItPmlzb19mcmFtZV9kZXNjW2ldLmFjdHVhbF9sZW5ndGggLSA0OworCQlwICs9IDQ7CisKKwkJaWYgKGZieXRlICYgMHg4MCkgeworCQkJbGVuIC09IDQ7CisJCQlwICs9IDQ7CisJCQlhdTA4MjhfaXNvY2RiZygiVmlkZW8gZnJhbWUgJXNcbiIsCisJCQkJICAgICAgIChmYnl0ZSAmIDB4NDApID8gIm9kZCIgOiAiZXZlbiIpOworCQkJaWYgKCEoZmJ5dGUgJiAweDQwKSkgeworCQkJCWlmIChidWYgIT0gTlVMTCkKKwkJCQkJYnVmZmVyX2ZpbGxlZChkZXYsIGRtYV9xLCBidWYpOworCQkJCWdldF9uZXh0X2J1ZihkbWFfcSwgJmJ1Zik7CisJCQkJaWYgKGJ1ZiA9PSBOVUxMKQorCQkJCQlvdXRwID0gTlVMTDsKKwkJCQllbHNlCisJCQkJCW91dHAgPSB2aWRlb2J1Zl90b192bWFsbG9jKCZidWYtPnZiKTsKKwkJCX0KKworCQkJaWYgKGJ1ZiAhPSBOVUxMKSB7CisJCQkJaWYgKGZieXRlICYgMHg0MCkKKwkJCQkJYnVmLT50b3BfZmllbGQgPSAxOworCQkJCWVsc2UKKwkJCQkJYnVmLT50b3BfZmllbGQgPSAwOworCQkJfQorCisJCQlkbWFfcS0+cG9zID0gMDsKKwkJfQorCQlpZiAoYnVmICE9IE5VTEwpCisJCQlhdTA4MjhfY29weV92aWRlbyhkZXYsIGRtYV9xLCBidWYsIHAsIG91dHAsIGxlbik7CisJfQorCXJldHVybiByYzsKK30KKworc3RhdGljIGludAorYnVmZmVyX3NldHVwKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHVuc2lnbmVkIGludCAqY291bnQsCisJICAgICB1bnNpZ25lZCBpbnQgKnNpemUpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSB2cS0+cHJpdl9kYXRhOworCSpzaXplID0gKGZoLT5kZXYtPndpZHRoICogZmgtPmRldi0+aGVpZ2h0ICogMTYgKyA3KSA+PiAzOworCisJaWYgKDAgPT0gKmNvdW50KQorCQkqY291bnQgPSBBVTA4MjhfREVGX0JVRjsKKworCWlmICgqY291bnQgPCBBVTA4MjhfTUlOX0JVRikKKwkJKmNvdW50ID0gQVUwODI4X01JTl9CVUY7CisJcmV0dXJuIDA7Cit9CisKKy8qIFRoaXMgaXMgY2FsbGVkICp3aXRob3V0KiBkZXYtPnNsb2NrIGhlbGQ7IHBsZWFzZSBrZWVwIGl0IHRoYXQgd2F5ICovCitzdGF0aWMgdm9pZCBmcmVlX2J1ZmZlcihzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgYXUwODI4X2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCBhdTA4MjhfZmggICAgICpmaCAgPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCBhdTA4MjhfZGV2ICAgICpkZXYgPSBmaC0+ZGV2OworCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSAwOworCWlmIChpbl9pbnRlcnJ1cHQoKSkKKwkJQlVHKCk7CisKKwkvKiBXZSB1c2VkIHRvIHdhaXQgZm9yIHRoZSBidWZmZXIgdG8gZmluaXNoIGhlcmUsIGJ1dCB0aGlzIGRpZG4ndCB3b3JrCisJICAgYmVjYXVzZSwgYXMgd2Ugd2VyZSBrZWVwaW5nIHRoZSBzdGF0ZSBhcyBWSURFT0JVRl9RVUVVRUQsCisJICAgdmlkZW9idWZfcXVldWVfY2FuY2VsIG1hcmtlZCBpdCBhcyBmaW5pc2hlZCBmb3IgdXMuCisJICAgKEFsc28sIGl0IGNvdWxkIHdlZGdlIGZvcmV2ZXIgaWYgdGhlIGhhcmR3YXJlIHdhcyBtaXNjb25maWd1cmVkLikKKworCSAgIFRoaXMgc2hvdWxkIGJlIHNhZmU7IGJ5IHRoZSB0aW1lIHdlIGdldCBoZXJlLCB0aGUgYnVmZmVyIGlzbid0CisJICAgcXVldWVkIGFueW1vcmUuIElmIHdlIGV2ZXIgc3RhcnQgbWFya2luZyB0aGUgYnVmZmVycyBhcworCSAgIFZJREVPQlVGX0FDVElWRSwgaXQgd29uJ3QgYmUsIHRob3VnaC4KKwkqLworCXNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPnNsb2NrLCBmbGFncyk7CisJaWYgKGRldi0+aXNvY19jdGwuYnVmID09IGJ1ZikKKwkJZGV2LT5pc29jX2N0bC5idWYgPSBOVUxMOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRldi0+c2xvY2ssIGZsYWdzKTsKKworCXZpZGVvYnVmX3ZtYWxsb2NfZnJlZSgmYnVmLT52Yik7CisJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7Cit9CisKK3N0YXRpYyBpbnQKK2J1ZmZlcl9wcmVwYXJlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLAorCQkJCQkJZW51bSB2NGwyX2ZpZWxkIGZpZWxkKQoreworCXN0cnVjdCBhdTA4MjhfZmggICAgICpmaCAgPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCBhdTA4MjhfYnVmZmVyICpidWYgPSBjb250YWluZXJfb2YodmIsIHN0cnVjdCBhdTA4MjhfYnVmZmVyLCB2Yik7CisJc3RydWN0IGF1MDgyOF9kZXYgICAgKmRldiA9IGZoLT5kZXY7CisJaW50ICAgICAgICAgICAgICAgICAgcmMgPSAwLCB1cmJfaW5pdCA9IDA7CisKKwlidWYtPnZiLnNpemUgPSAoZmgtPmRldi0+d2lkdGggKiBmaC0+ZGV2LT5oZWlnaHQgKiAxNiArIDcpID4+IDM7CisKKwlpZiAoMCAhPSBidWYtPnZiLmJhZGRyICAmJiAgYnVmLT52Yi5ic2l6ZSA8IGJ1Zi0+dmIuc2l6ZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlidWYtPnZiLndpZHRoICA9IGRldi0+d2lkdGg7CisJYnVmLT52Yi5oZWlnaHQgPSBkZXYtPmhlaWdodDsKKwlidWYtPnZiLmZpZWxkICA9IGZpZWxkOworCisJaWYgKFZJREVPQlVGX05FRURTX0lOSVQgPT0gYnVmLT52Yi5zdGF0ZSkgeworCQlyYyA9IHZpZGVvYnVmX2lvbG9jayh2cSwgJmJ1Zi0+dmIsIE5VTEwpOworCQlpZiAocmMgPCAwKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJ2aWRlb2J1Zl9pb2xvY2sgZmFpbGVkXG4iKTsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCX0KKworCWlmICghZGV2LT5pc29jX2N0bC5udW1fYnVmcykKKwkJdXJiX2luaXQgPSAxOworCisJaWYgKHVyYl9pbml0KSB7CisJCXJjID0gYXUwODI4X2luaXRfaXNvYyhkZXYsIEFVMDgyOF9JU09fUEFDS0VUU19QRVJfVVJCLAorCQkJCSAgICAgIEFVMDgyOF9NQVhfSVNPX0JVRlMsIGRldi0+bWF4X3BrdF9zaXplLAorCQkJCSAgICAgIGF1MDgyOF9pc29jX2NvcHkpOworCQlpZiAocmMgPCAwKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICJhdTA4MjhfaW5pdF9pc29jIGZhaWxlZFxuIik7CisJCQlnb3RvIGZhaWw7CisJCX0KKwl9CisKKwlidWYtPnZiLnN0YXRlID0gVklERU9CVUZfUFJFUEFSRUQ7CisJcmV0dXJuIDA7CisKK2ZhaWw6CisJZnJlZV9idWZmZXIodnEsIGJ1Zik7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgdm9pZAorYnVmZmVyX3F1ZXVlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBhdTA4MjhfYnVmZmVyICAgICpidWYgICAgID0gY29udGFpbmVyX29mKHZiLAorCQkJCQkJCXN0cnVjdCBhdTA4MjhfYnVmZmVyLAorCQkJCQkJCXZiKTsKKwlzdHJ1Y3QgYXUwODI4X2ZoICAgICAgICAqZmggICAgICA9IHZxLT5wcml2X2RhdGE7CisJc3RydWN0IGF1MDgyOF9kZXYgICAgICAgKmRldiAgICAgPSBmaC0+ZGV2OworCXN0cnVjdCBhdTA4MjhfZG1hcXVldWUgICp2aWRxICAgID0gJmRldi0+dmlkcTsKKworCWJ1Zi0+dmIuc3RhdGUgPSBWSURFT0JVRl9RVUVVRUQ7CisJbGlzdF9hZGRfdGFpbCgmYnVmLT52Yi5xdWV1ZSwgJnZpZHEtPmFjdGl2ZSk7Cit9CisKK3N0YXRpYyB2b2lkIGJ1ZmZlcl9yZWxlYXNlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsCisJCQkJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCit7CisJc3RydWN0IGF1MDgyOF9idWZmZXIgICAqYnVmICA9IGNvbnRhaW5lcl9vZih2YiwKKwkJCQkJCSAgICBzdHJ1Y3QgYXUwODI4X2J1ZmZlciwKKwkJCQkJCSAgICB2Yik7CisKKwlmcmVlX2J1ZmZlcih2cSwgYnVmKTsKK30KKworc3RhdGljIHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZV9vcHMgYXUwODI4X3ZpZGVvX3FvcHMgPSB7CisJLmJ1Zl9zZXR1cCAgICAgID0gYnVmZmVyX3NldHVwLAorCS5idWZfcHJlcGFyZSAgICA9IGJ1ZmZlcl9wcmVwYXJlLAorCS5idWZfcXVldWUgICAgICA9IGJ1ZmZlcl9xdWV1ZSwKKwkuYnVmX3JlbGVhc2UgICAgPSBidWZmZXJfcmVsZWFzZSwKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgVjRMMiBpbnRlcmZhY2UKKyAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCisKK3N0YXRpYyBpbnQgYXUwODI4X2kyc19pbml0KHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYpCit7CisJLyogRW5hYmxlIGkycyBtb2RlICovCisJYXUwODI4X3dyaXRlcmVnKGRldiwgQVUwODI4X0FVRElPQ1RSTF81MEMsIDB4MDEpOworCXJldHVybiAwOworfQorCisvKgorICogQXV2aXRlayBhdTA4MjggYW5hbG9nIHN0cmVhbSBlbmFibGUKKyAqIFBsZWFzZSBzZXQgaW50ZXJmYWNlMCB0byBBUzUgYmVmb3JlIGVuYWJsZSB0aGUgc3RyZWFtCisgKi8KK2ludCBhdTA4MjhfYW5hbG9nX3N0cmVhbV9lbmFibGUoc3RydWN0IGF1MDgyOF9kZXYgKmQpCit7CisJZHByaW50aygxLCAiYXUwODI4X2FuYWxvZ19zdHJlYW1fZW5hYmxlIGNhbGxlZFxuIik7CisJYXUwODI4X3dyaXRlcmVnKGQsIEFVMDgyOF9TRU5TT1JDVFJMX1ZCSV8xMDMsIDB4MDApOworCWF1MDgyOF93cml0ZXJlZyhkLCAweDEwNiwgMHgwMCk7CisJLyogc2V0IHggcG9zaXRpb24gKi8KKwlhdTA4Mjhfd3JpdGVyZWcoZCwgMHgxMTAsIDB4MDApOworCWF1MDgyOF93cml0ZXJlZyhkLCAweDExMSwgMHgwMCk7CisJYXUwODI4X3dyaXRlcmVnKGQsIDB4MTE0LCAweGEwKTsKKwlhdTA4Mjhfd3JpdGVyZWcoZCwgMHgxMTUsIDB4MDUpOworCS8qIHNldCB5IHBvc2l0aW9uICovCisJYXUwODI4X3dyaXRlcmVnKGQsIDB4MTEyLCAweDAyKTsKKwlhdTA4Mjhfd3JpdGVyZWcoZCwgMHgxMTMsIDB4MDApOworCWF1MDgyOF93cml0ZXJlZyhkLCAweDExNiwgMHhmMik7CisJYXUwODI4X3dyaXRlcmVnKGQsIDB4MTE3LCAweDAwKTsKKwlhdTA4Mjhfd3JpdGVyZWcoZCwgQVUwODI4X1NFTlNPUkNUUkxfMTAwLCAweGIzKTsKKworCXJldHVybiAwOworfQorCitpbnQgYXUwODI4X2FuYWxvZ19zdHJlYW1fZGlzYWJsZShzdHJ1Y3QgYXUwODI4X2RldiAqZCkKK3sKKwlkcHJpbnRrKDEsICJhdTA4MjhfYW5hbG9nX3N0cmVhbV9kaXNhYmxlIGNhbGxlZFxuIik7CisJYXUwODI4X3dyaXRlcmVnKGQsIEFVMDgyOF9TRU5TT1JDVFJMXzEwMCwgMHgwKTsKKwlyZXR1cm4gMDsKK30KKwordm9pZCBhdTA4MjhfYW5hbG9nX3N0cmVhbV9yZXNldChzdHJ1Y3QgYXUwODI4X2RldiAqZGV2KQoreworCWRwcmludGsoMSwgImF1MDgyOF9hbmFsb2dfc3RyZWFtX3Jlc2V0IGNhbGxlZFxuIik7CisJYXUwODI4X3dyaXRlcmVnKGRldiwgQVUwODI4X1NFTlNPUkNUUkxfMTAwLCAweDApOworCW1kZWxheSgzMCk7CisJYXUwODI4X3dyaXRlcmVnKGRldiwgQVUwODI4X1NFTlNPUkNUUkxfMTAwLCAweGIzKTsKK30KKworLyoKKyAqIFNvbWUgb3BlcmF0aW9ucyBuZWVkcyB0byBzdG9wIGN1cnJlbnQgc3RyZWFtaW5nCisgKi8KK3N0YXRpYyBpbnQgYXUwODI4X3N0cmVhbV9pbnRlcnJ1cHQoc3RydWN0IGF1MDgyOF9kZXYgKmRldikKK3sKKwlpbnQgcmV0ID0gMDsKKworCWRldi0+c3RyZWFtX3N0YXRlID0gU1RSRUFNX0lOVEVSUlVQVDsKKwlpZiAoZGV2LT5kZXZfc3RhdGUgPT0gREVWX0RJU0NPTk5FQ1RFRCkKKwkJcmV0dXJuIC1FTk9ERVY7CisJZWxzZSBpZiAocmV0KSB7CisJCWRldi0+ZGV2X3N0YXRlID0gREVWX01JU0NPTkZJR1VSRUQ7CisJCWRwcmludGsoMSwgIiVzIGRldmljZSBpcyBtaXNjb25maWd1cmVkIVxuIiwgX19mdW5jX18pOworCQlyZXR1cm4gcmV0OworCX0KKwlyZXR1cm4gMDsKK30KKworLyoKKyAqIGF1MDgyOF9yZWxlYXNlX3Jlc291cmNlcworICogdW5yZWdpc3RlciB2NGwyIGRldmljZXMKKyAqLwordm9pZCBhdTA4MjhfYW5hbG9nX3VucmVnaXN0ZXIoc3RydWN0IGF1MDgyOF9kZXYgKmRldikKK3sKKwlkcHJpbnRrKDEsICJhdTA4MjhfcmVsZWFzZV9yZXNvdXJjZXMgY2FsbGVkXG4iKTsKKwltdXRleF9sb2NrKCZhdTA4Mjhfc3lzZnNfbG9jayk7CisKKwlpZiAoZGV2LT52ZGV2KSB7CisJCWxpc3RfZGVsKCZkZXYtPmF1MDgyOGxpc3QpOworCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPnZkZXYpOworCX0KKwlpZiAoZGV2LT52YmlfZGV2KQorCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPnZiaV9kZXYpOworCisJbXV0ZXhfdW5sb2NrKCZhdTA4Mjhfc3lzZnNfbG9jayk7Cit9CisKKworLyogVXNhZ2UgbG9jayBjaGVjayBmdW5jdGlvbnMgKi8KK3N0YXRpYyBpbnQgcmVzX2dldChzdHJ1Y3QgYXUwODI4X2ZoICpmaCkKK3sKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKwlpbnQJCSByYyAgID0gMDsKKworCS8qIFRoaXMgaW5zdGFuY2UgYWxyZWFkeSBoYXMgc3RyZWFtX29uICovCisJaWYgKGZoLT5zdHJlYW1fb24pCisJCXJldHVybiByYzsKKworCWlmIChkZXYtPnN0cmVhbV9vbikKKwkJcmV0dXJuIC1FQlVTWTsKKworCWRldi0+c3RyZWFtX29uID0gMTsKKwlmaC0+c3RyZWFtX29uICA9IDE7CisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHJlc19jaGVjayhzdHJ1Y3QgYXUwODI4X2ZoICpmaCkKK3sKKwlyZXR1cm4gZmgtPnN0cmVhbV9vbjsKK30KKworc3RhdGljIHZvaWQgcmVzX2ZyZWUoc3RydWN0IGF1MDgyOF9maCAqZmgpCit7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlmaC0+c3RyZWFtX29uID0gMDsKKwlkZXYtPnN0cmVhbV9vbiA9IDA7Cit9CisKK3N0YXRpYyBpbnQgYXUwODI4X3Y0bDJfb3BlbihzdHJ1Y3QgZmlsZSAqZmlscCkKK3sKKwlpbnQgbWlub3IgPSB2aWRlb19kZXZkYXRhKGZpbHApLT5taW5vcjsKKwlpbnQgcmV0ID0gMDsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqaCwgKmRldiA9IE5VTEw7CisJc3RydWN0IGF1MDgyOF9maCAqZmg7CisJaW50IHR5cGUgPSAwOworCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7CisKKwlsaXN0X2Zvcl9lYWNoKGxpc3QsICZhdTA4MjhfZGV2bGlzdCkgeworCQloID0gbGlzdF9lbnRyeShsaXN0LCBzdHJ1Y3QgYXUwODI4X2RldiwgYXUwODI4bGlzdCk7CisJCWlmIChoLT52ZGV2LT5taW5vciA9PSBtaW5vcikgeworCQkJZGV2ID0gaDsKKwkJCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCX0KKyNpZmRlZiBWQklfSVNfV09SS0lORworCQlpZiAoaC0+dmJpX2Rldi0+bWlub3IgPT0gbWlub3IpIHsKKwkJCWRldiA9IGg7CisJCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKKwkJfQorI2VuZGlmCisJfQorCisJaWYgKE5VTEwgPT0gZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWZoID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGF1MDgyOF9maCksIEdGUF9LRVJORUwpOworCWlmIChOVUxMID09IGZoKSB7CisJCWRwcmludGsoMSwgIkZhaWxlZCBhbGxvY2F0ZSBhdTA4MjhfZmggc3RydWN0IVxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKworCWZoLT50eXBlID0gdHlwZTsKKwlmaC0+ZGV2ID0gZGV2OworCWZpbHAtPnByaXZhdGVfZGF0YSA9IGZoOworCisJaWYgKGZoLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSAmJiBkZXYtPnVzZXJzID09IDApIHsKKwkJLyogc2V0IGF1MDgyOCBpbnRlcmZhY2UwIHRvIEFTNSBoZXJlIGFnYWluICovCisJCXJldCA9IHVzYl9zZXRfaW50ZXJmYWNlKGRldi0+dXNiZGV2LCAwLCA1KTsKKwkJaWYgKHJldCA8IDApIHsKKwkJCXByaW50ayhLRVJOX0lORk8gIkF1MDgyOCBjYW4ndCBzZXQgYWx0ZXJuYXRlIHRvIDUhXG4iKTsKKwkJCXJldHVybiAtRUJVU1k7CisJCX0KKwkJZGV2LT53aWR0aCA9IE5UU0NfU1REX1c7CisJCWRldi0+aGVpZ2h0ID0gTlRTQ19TVERfSDsKKwkJZGV2LT5mcmFtZV9zaXplID0gZGV2LT53aWR0aCAqIGRldi0+aGVpZ2h0ICogMjsKKwkJZGV2LT5maWVsZF9zaXplID0gZGV2LT53aWR0aCAqIGRldi0+aGVpZ2h0OworCQlkZXYtPmJ5dGVzcGVybGluZSA9IGRldi0+d2lkdGggKiAyOworCisJCWF1MDgyOF9hbmFsb2dfc3RyZWFtX2VuYWJsZShkZXYpOworCQlhdTA4MjhfYW5hbG9nX3N0cmVhbV9yZXNldChkZXYpOworCisJCS8qIElmIHdlIHdlcmUgZG9pbmcgYWM5NyBpbnN0ZWFkIG9mIGkycywgaXQgd291bGQgZ28gaGVyZS4uLiovCisJCWF1MDgyOF9pMnNfaW5pdChkZXYpOworCisJCWRldi0+c3RyZWFtX3N0YXRlID0gU1RSRUFNX09GRjsKKwkJZGV2LT5kZXZfc3RhdGUgfD0gREVWX0lOSVRJQUxJWkVEOworCX0KKworCWRldi0+dXNlcnMrKzsKKworCXZpZGVvYnVmX3F1ZXVlX3ZtYWxsb2NfaW5pdCgmZmgtPnZiX3ZpZHEsICZhdTA4MjhfdmlkZW9fcW9wcywKKwkJCQkgICAgTlVMTCwgJmRldi0+c2xvY2ssIGZoLT50eXBlLAorCQkJCSAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQsCisJCQkJICAgIHNpemVvZihzdHJ1Y3QgYXUwODI4X2J1ZmZlciksIGZoKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgYXUwODI4X3Y0bDJfY2xvc2Uoc3RydWN0IGZpbGUgKmZpbHApCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJaWYgKHJlc19jaGVjayhmaCkpCisJCXJlc19mcmVlKGZoKTsKKworCWlmIChkZXYtPnVzZXJzID09IDEpIHsKKwkJdmlkZW9idWZfc3RvcCgmZmgtPnZiX3ZpZHEpOworCQl2aWRlb2J1Zl9tbWFwX2ZyZWUoJmZoLT52Yl92aWRxKTsKKworCQlpZiAoZGV2LT5kZXZfc3RhdGUgJiBERVZfRElTQ09OTkVDVEVEKSB7CisJCQlhdTA4MjhfYW5hbG9nX3VucmVnaXN0ZXIoZGV2KTsKKwkJCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKwkJCWtmcmVlKGRldik7CisJCQlyZXR1cm4gMDsKKwkJfQorCisJCWF1MDgyOF9hbmFsb2dfc3RyZWFtX2Rpc2FibGUoZGV2KTsKKworCQlhdTA4MjhfdW5pbml0X2lzb2MoZGV2KTsKKworCQkvKiBXaGVuIGNsb3NlIHRoZSBkZXZpY2UsIHNldCB0aGUgdXNiIGludGYwIGludG8gYWx0MCB0byBmcmVlCisJCSAgIFVTQiBiYW5kd2lkdGggKi8KKwkJcmV0ID0gdXNiX3NldF9pbnRlcmZhY2UoZGV2LT51c2JkZXYsIDAsIDApOworCQlpZiAocmV0IDwgMCkKKwkJCXByaW50ayhLRVJOX0lORk8gIkF1MDgyOCBjYW4ndCBzZXQgYWx0ZXJuYXRlIHRvIDAhXG4iKTsKKwl9CisKKwlrZnJlZShmaCk7CisJZGV2LT51c2Vycy0tOworCXdha2VfdXBfaW50ZXJydXB0aWJsZV9ucigmZGV2LT5vcGVuLCAxKTsKKwltdXRleF91bmxvY2soJmRldi0+bG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IGF1MDgyOF92NGwyX3JlYWQoc3RydWN0IGZpbGUgKmZpbHAsIGNoYXIgX191c2VyICpidWYsCisJCQkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKwlpbnQgcmM7CisKKwlyYyA9IGNoZWNrX2RldihkZXYpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCWlmIChmaC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwkJcmMgPSByZXNfZ2V0KGZoKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCisJCWlmICh1bmxpa2VseShyYyA8IDApKQorCQkJcmV0dXJuIHJjOworCisJCXJldHVybiB2aWRlb2J1Zl9yZWFkX3N0cmVhbSgmZmgtPnZiX3ZpZHEsIGJ1ZiwgY291bnQsIHBvcywgMCwKKwkJCQkJZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHVuc2lnbmVkIGludCBhdTA4MjhfdjRsMl9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBwb2xsX3RhYmxlICp3YWl0KQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCByYzsKKworCXJjID0gY2hlY2tfZGV2KGRldik7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlyYyA9IHJlc19nZXQoZmgpOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKworCWlmICh1bmxpa2VseShyYyA8IDApKQorCQlyZXR1cm4gUE9MTEVSUjsKKworCWlmIChWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgIT0gZmgtPnR5cGUpCisJCXJldHVybiBQT0xMRVJSOworCisJcmV0dXJuIHZpZGVvYnVmX3BvbGxfc3RyZWFtKGZpbHAsICZmaC0+dmJfdmlkcSwgd2FpdCk7Cit9CisKK3N0YXRpYyBpbnQgYXUwODI4X3Y0bDJfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggICAgPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiAgID0gZmgtPmRldjsKKwlpbnQJCSByYzsKKworCXJjID0gY2hlY2tfZGV2KGRldik7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKKwlyYyA9IHJlc19nZXQoZmgpOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKworCWlmICh1bmxpa2VseShyYyA8IDApKQorCQlyZXR1cm4gcmM7CisKKwlyYyA9IHZpZGVvYnVmX21tYXBfbWFwcGVyKCZmaC0+dmJfdmlkcSwgdm1hKTsKKworCWRwcmludGsoMiwgInZtYSBzdGFydD0weCUwOGx4LCBzaXplPSVsZCwgcmV0PSVkXG4iLAorCQkodW5zaWduZWQgbG9uZyl2bWEtPnZtX3N0YXJ0LAorCQkodW5zaWduZWQgbG9uZyl2bWEtPnZtX2VuZC0odW5zaWduZWQgbG9uZyl2bWEtPnZtX3N0YXJ0LAorCQlyYyk7CisKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgYXUwODI4X3NldF9mb3JtYXQoc3RydWN0IGF1MDgyOF9kZXYgKmRldiwgdW5zaWduZWQgaW50IGNtZCwKKwkJCSAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmb3JtYXQpCit7CisJaW50IHJldDsKKwlpbnQgd2lkdGggPSBmb3JtYXQtPmZtdC5waXgud2lkdGg7CisJaW50IGhlaWdodCA9IGZvcm1hdC0+Zm10LnBpeC5oZWlnaHQ7CisJdW5zaWduZWQgaW50IG1heHdpZHRoLCBtYXhoZWlnaHQ7CisKKwltYXh3aWR0aCA9IDcyMDsKKwltYXhoZWlnaHQgPSA0ODA7CisKKyNpZmRlZiBWQklfSVNfV09SS0lORworCWlmIChmb3JtYXQtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkUpIHsKKwkJZHByaW50aygxLCAiVkJJIGZvcm1hdCBzZXQ6IHRvIGJlIHN1cHBvcnRlZCFcbiIpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKGZvcm1hdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFKQorCQlyZXR1cm4gMDsKKyNlbmRpZgorCWlmIChmb3JtYXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCS8qIElmIHRoZXkgYXJlIGRlbWFuZGluZyBhIGZvcm1hdCBvdGhlciB0aGFuIHRoZSBvbmUgd2Ugc3VwcG9ydCwKKwkgICBiYWlsIG91dCAodHZ0aW1lIGFza3MgZm9yIFVZVlkgYW5kIHRoZW4gcmV0cmllcyB3aXRoIFlVWVYpICovCisJaWYgKGZvcm1hdC0+Zm10LnBpeC5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfVVlWWSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBmb3JtYXQtPmZtdC5waXgud2lkdGggb25seSBzdXBwb3J0IDcyMCBhbmQgaGVpZ2h0IDQ4MCAqLworCWlmICh3aWR0aCAhPSA3MjApCisJCXdpZHRoID0gNzIwOworCWlmIChoZWlnaHQgIT0gNDgwKQorCQloZWlnaHQgPSA0ODA7CisKKwlmb3JtYXQtPmZtdC5waXgud2lkdGggPSB3aWR0aDsKKwlmb3JtYXQtPmZtdC5waXguaGVpZ2h0ID0gaGVpZ2h0OworCWZvcm1hdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9VWVZZOworCWZvcm1hdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSB3aWR0aCAqIDI7CisJZm9ybWF0LT5mbXQucGl4LnNpemVpbWFnZSA9IHdpZHRoICogaGVpZ2h0ICogMjsKKwlmb3JtYXQtPmZtdC5waXguY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME07CisJZm9ybWF0LT5mbXQucGl4LmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCisJaWYgKGNtZCA9PSBWSURJT0NfVFJZX0ZNVCkKKwkJcmV0dXJuIDA7CisKKwkvKiBtYXliZSBzZXQgbmV3IGltYWdlIGZvcm1hdCwgZHJpdmVyIGN1cnJlbnQgb25seSBzdXBwb3J0IDcyMCo0ODAgKi8KKwlkZXYtPndpZHRoID0gd2lkdGg7CisJZGV2LT5oZWlnaHQgPSBoZWlnaHQ7CisJZGV2LT5mcmFtZV9zaXplID0gd2lkdGggKiBoZWlnaHQgKiAyOworCWRldi0+ZmllbGRfc2l6ZSA9IHdpZHRoICogaGVpZ2h0OworCWRldi0+Ynl0ZXNwZXJsaW5lID0gd2lkdGggKiAyOworCisJaWYgKGRldi0+c3RyZWFtX3N0YXRlID09IFNUUkVBTV9PTikgeworCQlkcHJpbnRrKDEsICJWSURJT0NfU0VUX0ZNVDogaW50ZXJydXB0aW5nIHN0cmVhbSFcbiIpOworCQlyZXQgPSBhdTA4Mjhfc3RyZWFtX2ludGVycnVwdChkZXYpOworCQlpZiAocmV0ICE9IDApIHsKKwkJCWRwcmludGsoMSwgImVycm9yIGludGVycnVwdGluZyB2aWRlbyBzdHJlYW0hXG4iKTsKKwkJCXJldHVybiByZXQ7CisJCX0KKwl9CisKKwkvKiBzZXQgYXUwODI4IGludGVyZmFjZTAgdG8gQVM1IGhlcmUgYWdhaW4gKi8KKwlyZXQgPSB1c2Jfc2V0X2ludGVyZmFjZShkZXYtPnVzYmRldiwgMCwgNSk7CisJaWYgKHJldCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiQXUwODI4IGNhbid0IHNldCBhbHQgc2V0dGluZyB0byA1IVxuIik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJYXUwODI4X2FuYWxvZ19zdHJlYW1fZW5hYmxlKGRldik7CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIGNvcmUsIHF1ZXJ5Y3RybCwgcWMpOworCWlmIChxYy0+dHlwZSkKKwkJcmV0dXJuIDA7CisJZWxzZQorCQlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorCQkJICAgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoICA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlzdHJsY3B5KGNhcC0+ZHJpdmVyLCAiYXUwODI4Iiwgc2l6ZW9mKGNhcC0+ZHJpdmVyKSk7CisJc3RybGNweShjYXAtPmNhcmQsIGRldi0+Ym9hcmQubmFtZSwgc2l6ZW9mKGNhcC0+Y2FyZCkpOworCXN0cmxjcHkoY2FwLT5idXNfaW5mbywgZGV2LT52NGwyX2Rldi5uYW1lLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOworCisJY2FwLT52ZXJzaW9uID0gQVUwODI4X1ZFUlNJT05fQ09ERTsKKworCS8qc2V0IHRoZSBkZXZpY2UgY2FwYWJpbGl0aWVzICovCisJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKKyNpZmRlZiBWQklfSVNfV09SS0lORworCQlWNEwyX0NBUF9WQklfQ0FQVFVSRSB8CisjZW5kaWYKKwkJVjRMMl9DQVBfQVVESU8gfAorCQlWNEwyX0NBUF9SRUFEV1JJVEUgfAorCQlWNEwyX0NBUF9TVFJFQU1JTkcgfAorCQlWNEwyX0NBUF9UVU5FUjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCit7CisJaWYgKGYtPmluZGV4KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJc3RyY3B5KGYtPmRlc2NyaXB0aW9uLCAiUGFja2VkIFlVVjIiKTsKKworCWYtPmZsYWdzID0gMDsKKwlmLT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9VWVZZOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCAgPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJZi0+Zm10LnBpeC53aWR0aCA9IGRldi0+d2lkdGg7CisJZi0+Zm10LnBpeC5oZWlnaHQgPSBkZXYtPmhlaWdodDsKKwlmLT5mbXQucGl4LnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX1VZVlk7CisJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSBkZXYtPmJ5dGVzcGVybGluZTsKKwlmLT5mbXQucGl4LnNpemVpbWFnZSA9IGRldi0+ZnJhbWVfc2l6ZTsKKwlmLT5mbXQucGl4LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOyAvKiBOVFNDL1BBTCAqLworCWYtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCAgPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJcmV0dXJuIGF1MDgyOF9zZXRfZm9ybWF0KGRldiwgVklESU9DX1RSWV9GTVQsIGYpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCAgPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCByYzsKKworCWlmICh2aWRlb2J1Zl9xdWV1ZV9pc19idXN5KCZmaC0+dmJfdmlkcSkpIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgcXVldWUgYnVzeVxuIiwgX19mdW5jX18pOworCQlyYyA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKGRldi0+c3RyZWFtX29uICYmICFmaC0+c3RyZWFtX29uKSB7CisJCXByaW50ayhLRVJOX0lORk8gIiVzIGRldmljZSBpbiB1c2UgYnkgYW5vdGhlciBmaFxuIiwgX19mdW5jX18pOworCQlyYyA9IC1FQlVTWTsKKwkJZ290byBvdXQ7CisJfQorCisJcmV0dXJuIGF1MDgyOF9zZXRfZm9ybWF0KGRldiwgVklESU9DX1NfRk1ULCBmKTsKK291dDoKKwlyZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3Nfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCAqIG5vcm0pCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJLyogRklYTUU6IHdoZW4gd2Ugc3VwcG9ydCBzb21ldGhpbmcgb3RoZXIgdGhhbiBOVFNDLCB3ZSBhcmUgZ29pbmcgdG8KKwkgICBoYXZlIHRvIG1ha2UgdGhlIGF1MDgyOCBicmlkZ2UgYWRqdXN0IHRoZSBzaXplIG9mIGl0cyBjYXB0dXJlCisJICAgYnVmZmVyLCB3aGljaCBpcyBjdXJyZW50bHkgaGFyZGNvZGVkIGF0IDcyMHg0ODAgKi8KKworCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCB0dW5lciwgc19zdGQsICpub3JtKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZW51bV9pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5wdXQpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXVuc2lnbmVkIGludCB0bXA7CisKKwlzdGF0aWMgY29uc3QgY2hhciAqaW5hbWVzW10gPSB7CisJCVtBVTA4MjhfVk1VWF9VTkRFRklORURdID0gIlVuZGVmaW5lZCIsCisJCVtBVTA4MjhfVk1VWF9DT01QT1NJVEVdID0gIkNvbXBvc2l0ZSIsCisJCVtBVTA4MjhfVk1VWF9TVklERU9dID0gIlMtVmlkZW8iLAorCQlbQVUwODI4X1ZNVVhfQ0FCTEVdID0gIkNhYmxlIFRWIiwKKwkJW0FVMDgyOF9WTVVYX1RFTEVWSVNJT05dID0gIlRlbGV2aXNpb24iLAorCQlbQVUwODI4X1ZNVVhfRFZCXSA9ICJEVkIiLAorCQlbQVUwODI4X1ZNVVhfREVCVUddID0gInR2IGRlYnVnIgorCX07CisKKwl0bXAgPSBpbnB1dC0+aW5kZXg7CisKKwlpZiAodG1wID4gQVUwODI4X01BWF9JTlBVVCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKEFVVklfSU5QVVQodG1wKS50eXBlID09IDApCisJCXJldHVybiAtRUlOVkFMOworCisJaW5wdXQtPmluZGV4ID0gdG1wOworCXN0cmNweShpbnB1dC0+bmFtZSwgaW5hbWVzW0FVVklfSU5QVVQodG1wKS50eXBlXSk7CisJaWYgKChBVVZJX0lOUFVUKHRtcCkudHlwZSA9PSBBVTA4MjhfVk1VWF9URUxFVklTSU9OKSB8fAorCSAgICAoQVVWSV9JTlBVVCh0bXApLnR5cGUgPT0gQVUwODI4X1ZNVVhfQ0FCTEUpKQorCQlpbnB1dC0+dHlwZSB8PSBWNEwyX0lOUFVUX1RZUEVfVFVORVI7CisJZWxzZQorCQlpbnB1dC0+dHlwZSB8PSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOworCisJaW5wdXQtPnN0ZCA9IGRldi0+dmRldi0+dHZub3JtczsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCSppID0gZGV2LT5jdHJsX2lucHV0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCBpOworCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7CisKKwlkcHJpbnRrKDEsICJWSURJT0NfU19JTlBVVCBpbiBmdW5jdGlvbiAlcywgaW5wdXQ9JWRcbiIsIF9fZnVuY19fLAorCQlpbmRleCk7CisJaWYgKGluZGV4ID49IEFVMDgyOF9NQVhfSU5QVVQpCisJCXJldHVybiAtRUlOVkFMOworCWlmIChBVVZJX0lOUFVUKGluZGV4KS50eXBlID09IDApCisJCXJldHVybiAtRUlOVkFMOworCWRldi0+Y3RybF9pbnB1dCA9IGluZGV4OworCisJc3dpdGNoIChBVVZJX0lOUFVUKGluZGV4KS50eXBlKSB7CisJY2FzZSBBVTA4MjhfVk1VWF9TVklERU86CisJCWRldi0+aW5wdXRfdHlwZSA9IEFVMDgyOF9WTVVYX1NWSURFTzsKKwkJYnJlYWs7CisJY2FzZSBBVTA4MjhfVk1VWF9DT01QT1NJVEU6CisJCWRldi0+aW5wdXRfdHlwZSA9IEFVMDgyOF9WTVVYX0NPTVBPU0lURTsKKwkJYnJlYWs7CisJY2FzZSBBVTA4MjhfVk1VWF9URUxFVklTSU9OOgorCQlkZXYtPmlucHV0X3R5cGUgPSBBVTA4MjhfVk1VWF9URUxFVklTSU9OOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlkcHJpbnRrKDEsICJWSURJT0NfU19JTlBVVCB1bmtub3duIGlucHV0IHR5cGUgc2V0IFslZF1cbiIsCisJCQlBVVZJX0lOUFVUKGluZGV4KS50eXBlKTsKKwkJYnJlYWs7CisJfQorCisJcm91dGUuaW5wdXQgPSBBVVZJX0lOUFVUKGluZGV4KS52bXV4OworCXJvdXRlLm91dHB1dCA9IDA7CisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIHZpZGVvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVUwODI4X01BWF9JTlBVVDsgaSsrKSB7CisJCWludCBlbmFibGUgPSAwOworCQlpZiAoQVVWSV9JTlBVVChpKS5hdWRpb19zZXR1cCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJaWYgKGkgPT0gaW5kZXgpCisJCQllbmFibGUgPSAxOworCQllbHNlCisJCQllbmFibGUgPSAwOworCQlpZiAoZW5hYmxlKSB7CisJCQkoQVVWSV9JTlBVVChpKS5hdWRpb19zZXR1cCkoZGV2LCBlbmFibGUpOworCQl9IGVsc2UgeworCQkJLyogTWFrZSBzdXJlIHdlIGxlYXZlIGl0IHR1cm5lZCBvbiBpZiBzb21lCisJCQkgICBvdGhlciBpbnB1dCBpcyByb3V0ZWQgdG8gdGhpcyBjYWxsYmFjayAqLworCQkJaWYgKChBVVZJX0lOUFVUKGkpLmF1ZGlvX3NldHVwKSAhPQorCQkJICAgICgoQVVWSV9JTlBVVChpbmRleCkuYXVkaW9fc2V0dXApKSkgeworCQkJCShBVVZJX0lOUFVUKGkpLmF1ZGlvX3NldHVwKShkZXYsIGVuYWJsZSk7CisJCQl9CisJCX0KKwl9CisKKwlyb3V0ZS5pbnB1dCA9IEFVVklfSU5QVVQoaW5kZXgpLmFtdXg7CisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIGF1ZGlvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKwl1bnNpZ25lZCBpbnQgaW5kZXggPSBhLT5pbmRleDsKKworCWlmIChhLT5pbmRleCA+IDEpCisJCXJldHVybiAtRUlOVkFMOworCisJaW5kZXggPSBkZXYtPmN0cmxfYWlucHV0OworCWlmIChpbmRleCA9PSAwKQorCQlzdHJjcHkoYS0+bmFtZSwgIlRlbGV2aXNpb24iKTsKKwllbHNlCisJCXN0cmNweShhLT5uYW1lLCAiTGluZSBpbiIpOworCisJYS0+Y2FwYWJpbGl0eSA9IFY0TDJfQVVEQ0FQX1NURVJFTzsKKwlhLT5pbmRleCA9IGluZGV4OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJaWYgKGEtPmluZGV4ICE9IGRldi0+Y3RybF9haW5wdXQpCisJCXJldHVybiAtRUlOVkFMOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgY29yZSwgZ19jdHJsLCBjdHJsKTsKKwlyZXR1cm4gMDsKKworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIGNvcmUsIHNfY3RybCwgY3RybCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX3R1bmVyICp0KQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKworCWlmICh0LT5pbmRleCAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0cmNweSh0LT5uYW1lLCAiQXV2aXRlayB0dW5lciIpOworCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCB0dW5lciwgZ190dW5lciwgdCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnQpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJaWYgKHQtPmluZGV4ICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCisJdC0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOworCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCB0dW5lciwgc190dW5lciwgdCk7CisJZHByaW50aygxLCAiVklESU9DX1NfVFVORVI6IHNpZ25hbCA9ICV4LCBhZmMgPSAleFxuIiwgdC0+c2lnbmFsLAorCQl0LT5hZmMpOworCXJldHVybiAwOworCit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZnJlcSkKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlmcmVxLT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CisJZnJlcS0+ZnJlcXVlbmN5ID0gZGV2LT5jdHJsX2ZyZXE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZnJlcSkKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlpZiAoZnJlcS0+dHVuZXIgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGZyZXEtPnR5cGUgIT0gVjRMMl9UVU5FUl9BTkFMT0dfVFYpCisJCXJldHVybiAtRUlOVkFMOworCisJZGV2LT5jdHJsX2ZyZXEgPSBmcmVxLT5mcmVxdWVuY3k7CisKKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgdHVuZXIsIHNfZnJlcXVlbmN5LCBmcmVxKTsKKworCWF1MDgyOF9hbmFsb2dfc3RyZWFtX3Jlc2V0KGRldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19jaGlwX2lkZW50KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCSAgICAgICBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJY2hpcC0+aWRlbnQgPSBWNEwyX0lERU5UX05PTkU7CisJY2hpcC0+cmV2aXNpb24gPSAwOworCisJaWYgKHY0bDJfY2hpcF9tYXRjaF9ob3N0KCZjaGlwLT5tYXRjaCkpIHsKKwkJY2hpcC0+aWRlbnQgPSBWNEwyX0lERU5UX0FVMDgyODsKKwkJcmV0dXJuIDA7CisJfQorCisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIGNvcmUsIGdfY2hpcF9pZGVudCwgY2hpcCk7CisJaWYgKGNoaXAtPmlkZW50ID09IFY0TDJfSURFTlRfTk9ORSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfY3JvcGNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgc3RydWN0IHY0bDJfY3JvcGNhcCAqY2MpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJaWYgKGNjLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwljYy0+Ym91bmRzLmxlZnQgPSAwOworCWNjLT5ib3VuZHMudG9wID0gMDsKKwljYy0+Ym91bmRzLndpZHRoID0gZGV2LT53aWR0aDsKKwljYy0+Ym91bmRzLmhlaWdodCA9IGRldi0+aGVpZ2h0OworCisJY2MtPmRlZnJlY3QgPSBjYy0+Ym91bmRzOworCisJY2MtPnBpeGVsYXNwZWN0Lm51bWVyYXRvciA9IDU0OworCWNjLT5waXhlbGFzcGVjdC5kZW5vbWluYXRvciA9IDU5OworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3N0cmVhbW9uKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCByYzsKKworCXJjID0gY2hlY2tfZGV2KGRldik7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJaWYgKHR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CisJCWF1MDgyOF9hbmFsb2dfc3RyZWFtX2VuYWJsZShkZXYpOworCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgdmlkZW8sIHNfc3RyZWFtLCAxKTsKKwl9CisKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCXJjID0gcmVzX2dldChmaCk7CisKKwlpZiAobGlrZWx5KHJjID49IDApKQorCQlyYyA9IHZpZGVvYnVmX3N0cmVhbW9uKCZmaC0+dmJfdmlkcSk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOworCisJcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zdHJlYW1vZmYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCBpOworCWludCByZXQ7CisJaW50IHJjOworCisJcmMgPSBjaGVja19kZXYoZGV2KTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlpZiAoZmgtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAodHlwZSAhPSBmaC0+dHlwZSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpZiAodHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmRldi0+djRsMl9kZXYsIDAsIHZpZGVvLCBzX3N0cmVhbSwgMCk7CisJCXJldCA9IGF1MDgyOF9zdHJlYW1faW50ZXJydXB0KGRldik7CisJCWlmIChyZXQgIT0gMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJZm9yIChpID0gMDsgaSA8IEFVMDgyOF9NQVhfSU5QVVQ7IGkrKykgeworCQlpZiAoQVVWSV9JTlBVVChpKS5hdWRpb19zZXR1cCA9PSBOVUxMKQorCQkJY29udGludWU7CisJCShBVVZJX0lOUFVUKGkpLmF1ZGlvX3NldHVwKShkZXYsIDApOworCX0KKworCW11dGV4X2xvY2soJmRldi0+bG9jayk7CisJdmlkZW9idWZfc3RyZWFtb2ZmKCZmaC0+dmJfdmlkcSk7CisJcmVzX2ZyZWUoZmgpOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKKworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworc3RhdGljIGludCB2aWRpb2NfZ19yZWdpc3RlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgICAgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJc3dpdGNoIChyZWctPm1hdGNoLnR5cGUpIHsKKwljYXNlIFY0TDJfQ0hJUF9NQVRDSF9JMkNfRFJJVkVSOgorCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgY29yZSwgZ19yZWdpc3RlciwgcmVnKTsKKwkJcmV0dXJuIDA7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorfQorCitzdGF0aWMgaW50IHZpZGlvY19zX3JlZ2lzdGVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgICBzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisKKwlzd2l0Y2ggKHJlZy0+bWF0Y2gudHlwZSkgeworCWNhc2UgVjRMMl9DSElQX01BVENIX0kyQ19EUklWRVI6CisJCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZkZXYtPnY0bDJfZGV2LCAwLCBjb3JlLCBzX3JlZ2lzdGVyLCByZWcpOworCQlyZXR1cm4gMDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGludCB2aWRpb2NfcmVxYnVmcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnJiKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKwlpbnQgcmM7CisKKwlyYyA9IGNoZWNrX2RldihkZXYpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCXJldHVybiB2aWRlb2J1Zl9yZXFidWZzKCZmaC0+dmJfdmlkcSwgcmIpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCSAgIHN0cnVjdCB2NGwyX2J1ZmZlciAqYikKK3sKKwlzdHJ1Y3QgYXUwODI4X2ZoICpmaCA9IHByaXY7CisJc3RydWN0IGF1MDgyOF9kZXYgKmRldiA9IGZoLT5kZXY7CisJaW50IHJjOworCisJcmMgPSBjaGVja19kZXYoZGV2KTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlyZXR1cm4gdmlkZW9idWZfcXVlcnlidWYoJmZoLT52Yl92aWRxLCBiKTsKK30KKworc3RhdGljIGludCB2aWRpb2NfcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfYnVmZmVyICpiKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3QgYXUwODI4X2RldiAqZGV2ID0gZmgtPmRldjsKKwlpbnQgcmM7CisKKwlyYyA9IGNoZWNrX2RldihkZXYpOworCWlmIChyYyA8IDApCisJCXJldHVybiByYzsKKworCXJldHVybiB2aWRlb2J1Zl9xYnVmKCZmaC0+dmJfdmlkcSwgYik7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIpCit7CisJc3RydWN0IGF1MDgyOF9maCAqZmggPSBwcml2OworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXYgPSBmaC0+ZGV2OworCWludCByYzsKKworCXJjID0gY2hlY2tfZGV2KGRldik7CisJaWYgKHJjIDwgMCkKKwkJcmV0dXJuIHJjOworCisJLyogV29ya2Fyb3VuZCBmb3IgYSBidWcgaW4gdGhlIGF1MDgyOCBoYXJkd2FyZSBkZXNpZ24gdGhhdCBzb21ldGltZXMKKwkgICByZXN1bHRzIGluIHRoZSBjb2xvcnNwYWNlIGJlaW5nIGludmVydGVkICovCisJaWYgKGRldi0+Z3JlZW5zY3JlZW5fZGV0ZWN0ZWQgPT0gMSkgeworCQlkcHJpbnRrKDEsICJEZXRlY3RlZCBncmVlbiBmcmFtZS4gIFJlc2V0dGluZyBzdHJlYW0uLi5cbiIpOworCQlhdTA4MjhfYW5hbG9nX3N0cmVhbV9yZXNldChkZXYpOworCQlkZXYtPmdyZWVuc2NyZWVuX2RldGVjdGVkID0gMDsKKwl9CisKKwlyZXR1cm4gdmlkZW9idWZfZHFidWYoJmZoLT52Yl92aWRxLCBiLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Cit9CisKKyNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKK3N0YXRpYyBpbnQgdmlkaW9jZ21idWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2aWRlb19tYnVmICptYnVmKQoreworCXN0cnVjdCBhdTA4MjhfZmggKmZoID0gcHJpdjsKKworCXJldHVybiB2aWRlb2J1Zl9jZ21idWYoJmZoLT52Yl92aWRxLCBtYnVmLCA4KTsKK30KKyNlbmRpZgorCitzdGF0aWMgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIGF1MDgyOF92NGxfZm9wcyA9IHsKKwkub3duZXIgICAgICA9IFRISVNfTU9EVUxFLAorCS5vcGVuICAgICAgID0gYXUwODI4X3Y0bDJfb3BlbiwKKwkucmVsZWFzZSAgICA9IGF1MDgyOF92NGwyX2Nsb3NlLAorCS5yZWFkICAgICAgID0gYXUwODI4X3Y0bDJfcmVhZCwKKwkucG9sbCAgICAgICA9IGF1MDgyOF92NGwyX3BvbGwsCisJLm1tYXAgICAgICAgPSBhdTA4MjhfdjRsMl9tbWFwLAorCS5pb2N0bCAgICAgID0gdmlkZW9faW9jdGwyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB2aWRlb19pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcCAgICAgICAgICAgID0gdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcCAgICA9IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZ19mbXRfdmlkX2NhcCAgICAgICA9IHZpZGlvY19nX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwICAgICA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAsCisJLnZpZGlvY19zX2ZtdF92aWRfY2FwICAgICAgID0gdmlkaW9jX3NfZm10X3ZpZF9jYXAsCisjaWZkZWYgVkJJX0lTX1dPUktJTkcKKwkudmlkaW9jX2dfZm10X3ZiaV9jYXAgICAgICAgPSB2aWRpb2NfZ19mbXRfdmJpX2NhcCwKKwkudmlkaW9jX3RyeV9mbXRfdmJpX2NhcCAgICAgPSB2aWRpb2Nfc19mbXRfdmJpX2NhcCwKKwkudmlkaW9jX3NfZm10X3ZiaV9jYXAgICAgICAgPSB2aWRpb2Nfc19mbXRfdmJpX2NhcCwKKyNlbmRpZgorCS52aWRpb2NfZ19hdWRpbyAgICAgICAgICAgICA9IHZpZGlvY19nX2F1ZGlvLAorCS52aWRpb2Nfc19hdWRpbyAgICAgICAgICAgICA9IHZpZGlvY19zX2F1ZGlvLAorCS52aWRpb2NfY3JvcGNhcCAgICAgICAgICAgICA9IHZpZGlvY19jcm9wY2FwLAorI2lmZGVmIFZCSV9JU19XT1JLSU5HCisJLnZpZGlvY19nX2ZtdF9zbGljZWRfdmJpX2NhcCAgID0gdmlkaW9jX2dfZm10X3NsaWNlZF92YmlfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF9zbGljZWRfdmJpX2NhcCA9IHZpZGlvY190cnlfc2V0X3NsaWNlZF92YmlfY2FwLAorCS52aWRpb2Nfc19mbXRfc2xpY2VkX3ZiaV9jYXAgICA9IHZpZGlvY190cnlfc2V0X3NsaWNlZF92YmlfY2FwLAorI2VuZGlmCisJLnZpZGlvY19yZXFidWZzICAgICAgICAgICAgID0gdmlkaW9jX3JlcWJ1ZnMsCisJLnZpZGlvY19xdWVyeWJ1ZiAgICAgICAgICAgID0gdmlkaW9jX3F1ZXJ5YnVmLAorCS52aWRpb2NfcWJ1ZiAgICAgICAgICAgICAgICA9IHZpZGlvY19xYnVmLAorCS52aWRpb2NfZHFidWYgICAgICAgICAgICAgICA9IHZpZGlvY19kcWJ1ZiwKKwkudmlkaW9jX3Nfc3RkICAgICAgICAgICAgICAgPSB2aWRpb2Nfc19zdGQsCisJLnZpZGlvY19lbnVtX2lucHV0ICAgICAgICAgID0gdmlkaW9jX2VudW1faW5wdXQsCisJLnZpZGlvY19nX2lucHV0ICAgICAgICAgICAgID0gdmlkaW9jX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0ICAgICAgICAgICAgID0gdmlkaW9jX3NfaW5wdXQsCisJLnZpZGlvY19xdWVyeWN0cmwgICAgICAgICAgID0gdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX2dfY3RybCAgICAgICAgICAgICAgPSB2aWRpb2NfZ19jdHJsLAorCS52aWRpb2Nfc19jdHJsICAgICAgICAgICAgICA9IHZpZGlvY19zX2N0cmwsCisJLnZpZGlvY19zdHJlYW1vbiAgICAgICAgICAgID0gdmlkaW9jX3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmICAgICAgICAgICA9IHZpZGlvY19zdHJlYW1vZmYsCisJLnZpZGlvY19nX3R1bmVyICAgICAgICAgICAgID0gdmlkaW9jX2dfdHVuZXIsCisJLnZpZGlvY19zX3R1bmVyICAgICAgICAgICAgID0gdmlkaW9jX3NfdHVuZXIsCisJLnZpZGlvY19nX2ZyZXF1ZW5jeSAgICAgICAgID0gdmlkaW9jX2dfZnJlcXVlbmN5LAorCS52aWRpb2Nfc19mcmVxdWVuY3kgICAgICAgICA9IHZpZGlvY19zX2ZyZXF1ZW5jeSwKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCisJLnZpZGlvY19nX3JlZ2lzdGVyICAgICAgICAgID0gdmlkaW9jX2dfcmVnaXN0ZXIsCisJLnZpZGlvY19zX3JlZ2lzdGVyICAgICAgICAgID0gdmlkaW9jX3NfcmVnaXN0ZXIsCisjZW5kaWYKKwkudmlkaW9jX2dfY2hpcF9pZGVudCAgICAgICAgPSB2aWRpb2NfZ19jaGlwX2lkZW50LAorI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorCS52aWRpb2NnbWJ1ZiAgICAgICAgICAgICAgICA9IHZpZGlvY2dtYnVmLAorI2VuZGlmCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHZpZGVvX2RldmljZSBhdTA4MjhfdmlkZW9fdGVtcGxhdGUgPSB7CisJLmZvcHMgICAgICAgICAgICAgICAgICAgICAgID0gJmF1MDgyOF92NGxfZm9wcywKKwkucmVsZWFzZSAgICAgICAgICAgICAgICAgICAgPSB2aWRlb19kZXZpY2VfcmVsZWFzZSwKKwkuaW9jdGxfb3BzIAkJICAgID0gJnZpZGVvX2lvY3RsX29wcywKKwkubWlub3IgICAgICAgICAgICAgICAgICAgICAgPSAtMSwKKwkudHZub3JtcyAgICAgICAgICAgICAgICAgICAgPSBWNEwyX1NURF9OVFNDX00sCisJLmN1cnJlbnRfbm9ybSAgICAgICAgICAgICAgID0gVjRMMl9TVERfTlRTQ19NLAorfTsKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCitpbnQgYXUwODI4X2FuYWxvZ19yZWdpc3RlcihzdHJ1Y3QgYXUwODI4X2RldiAqZGV2LAorCQkJICAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSkKK3sKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKwlzdHJ1Y3QgdXNiX2hvc3RfaW50ZXJmYWNlICppZmFjZV9kZXNjOworCXN0cnVjdCB1c2JfZW5kcG9pbnRfZGVzY3JpcHRvciAqZW5kcG9pbnQ7CisJaW50IGk7CisKKwlkcHJpbnRrKDEsICJhdTA4MjhfYW5hbG9nX3JlZ2lzdGVyIGNhbGxlZCFcbiIpOworCisJLyogc2V0IGF1MDgyOCB1c2IgaW50ZXJmYWNlMCB0byBhczUgKi8KKwlyZXR2YWwgPSB1c2Jfc2V0X2ludGVyZmFjZShkZXYtPnVzYmRldiwKKwkJCWludGVyZmFjZS0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlciwgNSk7CisJaWYgKHJldHZhbCAhPSAwKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkZhaWx1cmUgc2V0dGluZyB1c2IgaW50ZXJmYWNlMCB0byBhczVcbiIpOworCQlyZXR1cm4gcmV0dmFsOworCX0KKworCS8qIEZpZ3VyZSBvdXQgd2hpY2ggZW5kcG9pbnQgaGFzIHRoZSBpc29jIGludGVyZmFjZSAqLworCWlmYWNlX2Rlc2MgPSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nOworCWZvciAoaSA9IDA7IGkgPCBpZmFjZV9kZXNjLT5kZXNjLmJOdW1FbmRwb2ludHM7IGkrKykgeworCQllbmRwb2ludCA9ICZpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjOworCQlpZiAoKChlbmRwb2ludC0+YkVuZHBvaW50QWRkcmVzcyAmIFVTQl9FTkRQT0lOVF9ESVJfTUFTSykKKwkJICAgICA9PSBVU0JfRElSX0lOKSAmJgorCQkgICAgKChlbmRwb2ludC0+Ym1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0spCisJCSAgICAgPT0gVVNCX0VORFBPSU5UX1hGRVJfSVNPQykpIHsKKworCQkJLyogd2UgZmluZCBvdXIgaXNvYyBpbiBlbmRwb2ludCAqLworCQkJdTE2IHRtcCA9IGxlMTZfdG9fY3B1KGVuZHBvaW50LT53TWF4UGFja2V0U2l6ZSk7CisJCQlkZXYtPm1heF9wa3Rfc2l6ZSA9ICh0bXAgJiAweDA3ZmYpICoKKwkJCQkoKCh0bXAgJiAweDE4MDApID4+IDExKSArIDEpOworCQkJZGV2LT5pc29jX2luX2VuZHBvaW50YWRkciA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCQl9CisJfQorCWlmICghKGRldi0+aXNvY19pbl9lbmRwb2ludGFkZHIpKSB7CisJCXByaW50ayhLRVJOX0lORk8gIkNvdWxkIG5vdCBsb2NhdGUgaXNvYyBlbmRwb2ludFxuIik7CisJCWtmcmVlKGRldik7CisJCXJldHVybiAtRU5PREVWOworCX0KKworCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRldi0+b3Blbik7CisJc3Bpbl9sb2NrX2luaXQoJmRldi0+c2xvY2spOworCW11dGV4X2luaXQoJmRldi0+bG9jayk7CisKKwlJTklUX0xJU1RfSEVBRCgmZGV2LT52aWRxLmFjdGl2ZSk7CisJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmlkcS5xdWV1ZWQpOworCisJZGV2LT53aWR0aCA9IE5UU0NfU1REX1c7CisJZGV2LT5oZWlnaHQgPSBOVFNDX1NURF9IOworCWRldi0+ZmllbGRfc2l6ZSA9IGRldi0+d2lkdGggKiBkZXYtPmhlaWdodDsKKwlkZXYtPmZyYW1lX3NpemUgPSBkZXYtPmZpZWxkX3NpemUgPDwgMTsKKwlkZXYtPmJ5dGVzcGVybGluZSA9IGRldi0+d2lkdGggPDwgMTsKKwlkZXYtPmN0cmxfYWlucHV0ID0gMDsKKworCS8qIGFsbG9jYXRlIGFuZCBmaWxsIHY0bDIgdmlkZW8gc3RydWN0ICovCisJZGV2LT52ZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKE5VTEwgPT0gZGV2LT52ZGV2KSB7CisJCWRwcmludGsoMSwgIkNhbid0IGFsbG9jYXRlIHZpZGVvX2RldmljZS5cbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKyNpZmRlZiBWQklfSVNfV09SS0lORworCWRldi0+dmJpX2RldiA9IHZpZGVvX2RldmljZV9hbGxvYygpOworCWlmIChOVUxMID09IGRldi0+dmJpX2RldikgeworCQlkcHJpbnRrKDEsICJDYW4ndCBhbGxvY2F0ZSB2YmlfZGV2aWNlLlxuIik7CisJCWtmcmVlKGRldi0+dmRldik7CisJCXJldHVybiAtRU5PTUVNOworCX0KKyNlbmRpZgorCisJLyogRmlsbCB0aGUgdmlkZW8gY2FwdHVyZSBkZXZpY2Ugc3RydWN0ICovCisJKmRldi0+dmRldiA9IGF1MDgyOF92aWRlb190ZW1wbGF0ZTsKKwlkZXYtPnZkZXYtPnBhcmVudCA9ICZkZXYtPnVzYmRldi0+ZGV2OworCXN0cmNweShkZXYtPnZkZXYtPm5hbWUsICJhdTA4MjhhIHZpZGVvIik7CisKKyNpZmRlZiBWQklfSVNfV09SS0lORworCS8qIFNldHVwIHRoZSBWQkkgZGV2aWNlICovCisJKmRldi0+dmJpX2RldiA9IGF1MDgyOF92aWRlb190ZW1wbGF0ZTsKKwlkZXYtPnZiaV9kZXYtPnBhcmVudCA9ICZkZXYtPnVzYmRldi0+ZGV2OworCXN0cmNweShkZXYtPnZiaV9kZXYtPm5hbWUsICJhdTA4MjhhIHZiaSIpOworI2VuZGlmCisKKwlsaXN0X2FkZF90YWlsKCZkZXYtPmF1MDgyOGxpc3QsICZhdTA4MjhfZGV2bGlzdCk7CisKKwkvKiBSZWdpc3RlciB0aGUgdjRsMiBkZXZpY2UgKi8KKwlyZXR2YWwgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoZGV2LT52ZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCAtMSk7CisJaWYgKHJldHZhbCAhPSAwKSB7CisJCWRwcmludGsoMSwgInVuYWJsZSB0byByZWdpc3RlciB2aWRlbyBkZXZpY2UgKGVycm9yID0gJWQpLlxuIiwKKwkJCXJldHZhbCk7CisJCWxpc3RfZGVsKCZkZXYtPmF1MDgyOGxpc3QpOworCQl2aWRlb19kZXZpY2VfcmVsZWFzZShkZXYtPnZkZXYpOworCQlyZXR1cm4gLUVOT0RFVjsKKwl9CisKKyNpZmRlZiBWQklfSVNfV09SS0lORworCS8qIFJlZ2lzdGVyIHRoZSB2YmkgZGV2aWNlICovCisJcmV0dmFsID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKGRldi0+dmJpX2RldiwgVkZMX1RZUEVfVkJJLCAtMSk7CisJaWYgKHJldHZhbCAhPSAwKSB7CisJCWRwcmludGsoMSwgInVuYWJsZSB0byByZWdpc3RlciB2YmkgZGV2aWNlIChlcnJvciA9ICVkKS5cbiIsCisJCQlyZXR2YWwpOworCQlsaXN0X2RlbCgmZGV2LT5hdTA4MjhsaXN0KTsKKwkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoZGV2LT52YmlfZGV2KTsKKwkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoZGV2LT52ZGV2KTsKKwkJcmV0dXJuIC1FTk9ERVY7CisJfQorI2VuZGlmCisKKwlkcHJpbnRrKDEsICIlcyBjb21wbGV0ZWQhXG4iLCBfX2Z1bmNfXyk7CisKKwlyZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9hdTA4MjgvYXUwODI4LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjguaAppbmRleCA5ZDZhMTE2Li42ZWQxYTYxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjguaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2F1MDgyOC9hdTA4MjguaApAQCAtMjQsNiArMjQsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KICNpbmNsdWRlIDxtZWRpYS90dmVlcHJvbS5oPgogCisvKiBBbmFsb2cgKi8KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi12bWFsbG9jLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKwogLyogRFZCICovCiAjaW5jbHVkZSAiZGVtdXguaCIKICNpbmNsdWRlICJkbXhkZXYuaCIKQEAgLTM5LDggKzQ0LDQ1IEBACiAjZGVmaW5lIFVSQl9DT1VOVCAgIDE2CiAjZGVmaW5lIFVSQl9CVUZTSVpFICgweGU1MjIpCiAKKy8qIEFuYWxvZyBjb25zdGFudHMgKi8KKyNkZWZpbmUgTlRTQ19TVERfVyAgICAgIDcyMAorI2RlZmluZSBOVFNDX1NURF9IICAgICAgNDgwCisKKyNkZWZpbmUgQVUwODI4X0lOVEVSTEFDRURfREVGQVVMVCAgICAgICAxCisjZGVmaW5lIFY0TDJfQ0lEX1BSSVZBVEVfU0hBUlBORVNTICAoVjRMMl9DSURfUFJJVkFURV9CQVNFICsgMCkKKworLyogRGVmaW5hdGlvbiBmb3IgQVUwODI4IFVTQiB0cmFuc2ZlciAqLworI2RlZmluZSBBVTA4MjhfTUFYX0lTT19CVUZTICAgIDEyICAvKiBtYXliZSByZXNpemUgdGhpcyB2YWx1ZSBpbiB0aGUgZnV0dXJlICovCisjZGVmaW5lIEFVMDgyOF9JU09fUEFDS0VUU19QRVJfVVJCICAgICAgMTAKKworI2RlZmluZSBBVTA4MjhfTUlOX0JVRiA0CisjZGVmaW5lIEFVMDgyOF9ERUZfQlVGIDgKKworI2RlZmluZSBBVTA4MjhfTUFYX0lOUFVUICAgICAgICA0CisKK2VudW0gYXUwODI4X2l0eXBlIHsKKwlBVTA4MjhfVk1VWF9VTkRFRklORUQgPSAwLAorCUFVMDgyOF9WTVVYX0NPTVBPU0lURSwKKwlBVTA4MjhfVk1VWF9TVklERU8sCisJQVUwODI4X1ZNVVhfQ0FCTEUsCisJQVUwODI4X1ZNVVhfVEVMRVZJU0lPTiwKKwlBVTA4MjhfVk1VWF9EVkIsCisJQVUwODI4X1ZNVVhfREVCVUcKK307CisKK3N0cnVjdCBhdTA4MjhfaW5wdXQgeworCWVudW0gYXUwODI4X2l0eXBlIHR5cGU7CisJdW5zaWduZWQgaW50IHZtdXg7CisJdW5zaWduZWQgaW50IGFtdXg7CisJdm9pZCAoKmF1ZGlvX3NldHVwKSAodm9pZCAqcHJpdiwgaW50IGVuYWJsZSk7Cit9OworCiBzdHJ1Y3QgYXUwODI4X2JvYXJkIHsKIAljaGFyICpuYW1lOworCXVuc2lnbmVkIGludCB0dW5lcl90eXBlOworCXVuc2lnbmVkIGNoYXIgdHVuZXJfYWRkcjsKKwlzdHJ1Y3QgYXUwODI4X2lucHV0IGlucHV0W0FVMDgyOF9NQVhfSU5QVVRdOworCiB9OwogCiBzdHJ1Y3QgYXUwODI4X2R2YiB7CkBAIC01NSwzMSArOTcsMTQzIEBACiAJaW50IGZlZWRpbmc7CiB9OwogCitlbnVtIGF1MDgyOF9zdHJlYW1fc3RhdGUgeworCVNUUkVBTV9PRkYsCisJU1RSRUFNX0lOVEVSUlVQVCwKKwlTVFJFQU1fT04KK307CisKKyNkZWZpbmUgQVVWSV9JTlBVVChucikgKGRldi0+Ym9hcmQuaW5wdXRbbnJdKQorCisvKiBkZXZpY2Ugc3RhdGUgKi8KK2VudW0gYXUwODI4X2Rldl9zdGF0ZSB7CisJREVWX0lOSVRJQUxJWkVEID0gMHgwMSwKKwlERVZfRElTQ09OTkVDVEVEID0gMHgwMiwKKwlERVZfTUlTQ09ORklHVVJFRCA9IDB4MDQKK307CisKK3N0cnVjdCBhdTA4MjhfZmggeworCXN0cnVjdCBhdTA4MjhfZGV2ICpkZXY7CisJdW5zaWduZWQgaW50ICBzdHJlYW1fb246MTsJLyogTG9ja3Mgc3RyZWFtcyAqLworCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAgICAgICAgdmJfdmlkcTsKKwllbnVtIHY0bDJfYnVmX3R5cGUgICAgICAgICAgIHR5cGU7Cit9OworCitzdHJ1Y3QgYXUwODI4X3VzYl9pc29jX2N0bCB7CisJCS8qIG1heCBwYWNrZXQgc2l6ZSBvZiBpc29jIHRyYW5zYWN0aW9uICovCisJaW50CQkJCW1heF9wa3Rfc2l6ZTsKKworCQkvKiBudW1iZXIgb2YgYWxsb2NhdGVkIHVyYnMgKi8KKwlpbnQJCQkJbnVtX2J1ZnM7CisKKwkJLyogdXJiIGZvciBpc29jIHRyYW5zZmVycyAqLworCXN0cnVjdCB1cmIJCQkqKnVyYjsKKworCQkvKiB0cmFuc2ZlciBidWZmZXJzIGZvciBpc29jIHRyYW5zZmVyICovCisJY2hhcgkJCQkqKnRyYW5zZmVyX2J1ZmZlcjsKKworCQkvKiBMYXN0IGJ1ZmZlciBjb21tYW5kIGFuZCByZWdpb24gKi8KKwl1OAkJCQljbWQ7CisJaW50CQkJCXBvcywgc2l6ZSwgcGt0c2l6ZTsKKworCQkvKiBMYXN0IGZpZWxkOiBPREQgb3IgRVZFTj8gKi8KKwlpbnQJCQkJZmllbGQ7CisKKwkJLyogU3RvcmVzIGluY29tcGxldGUgY29tbWFuZHMgKi8KKwl1MzIJCQkJdG1wX2J1ZjsKKwlpbnQJCQkJdG1wX2J1Zl9sZW47CisKKwkJLyogU3RvcmVzIGFscmVhZHkgcmVxdWVzdGVkIGJ1ZmZlcnMgKi8KKwlzdHJ1Y3QgYXUwODI4X2J1ZmZlciAgICAJKmJ1ZjsKKworCQkvKiBTdG9yZXMgdGhlIG51bWJlciBvZiByZWNlaXZlZCBmaWVsZHMgKi8KKwlpbnQJCQkJbmZpZWxkczsKKworCQkvKiBpc29jIHVyYiBjYWxsYmFjayAqLworCWludCAoKmlzb2NfY29weSkgKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYsIHN0cnVjdCB1cmIgKnVyYik7CisKK307CisKKy8qIGJ1ZmZlciBmb3Igb25lIHZpZGVvIGZyYW1lICovCitzdHJ1Y3QgYXUwODI4X2J1ZmZlciB7CisJLyogY29tbW9uIHY0bCBidWZmZXIgc3R1ZmYgLS0gbXVzdCBiZSBmaXJzdCAqLworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgdmI7CisKKwlzdHJ1Y3QgbGlzdF9oZWFkIGZyYW1lOworCWludCB0b3BfZmllbGQ7CisJaW50IHJlY2VpdmluZzsKK307CisKK3N0cnVjdCBhdTA4MjhfZG1hcXVldWUgeworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgYWN0aXZlOworCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgcXVldWVkOworCisJd2FpdF9xdWV1ZV9oZWFkX3QgICAgICAgICAgd3E7CisKKwkvKiBDb3VudGVycyB0byBjb250cm9sIGJ1ZmZlciBmaWxsICovCisJaW50ICAgICAgICAgICAgICAgICAgICAgICAgcG9zOworfTsKKwogc3RydWN0IGF1MDgyOF9kZXYgewogCXN0cnVjdCBtdXRleCBtdXRleDsKIAlzdHJ1Y3QgdXNiX2RldmljZQkqdXNiZGV2OwotCWludAkJCWJvYXJkOworCWludAkJCWJvYXJkbnI7CisJc3RydWN0IGF1MDgyOF9ib2FyZAlib2FyZDsKIAl1OAkJCWN0cmxtc2dbNjRdOwogCiAJLyogSTJDICovCiAJc3RydWN0IGkyY19hZGFwdGVyCQlpMmNfYWRhcDsKLQlzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEJaTJjX2FsZ287CisJc3RydWN0IGkyY19hbGdvcml0aG0JCWkyY19hbGdvOwogCXN0cnVjdCBpMmNfY2xpZW50CQlpMmNfY2xpZW50OwogCXUzMiAJCQkJaTJjX3JjOwogCiAJLyogRGlnaXRhbCAqLwogCXN0cnVjdCBhdTA4MjhfZHZiCQlkdmI7CiAKKwkvKiBBbmFsb2cgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkIGF1MDgyOGxpc3Q7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OworCWludCB1c2VyczsKKwl1bnNpZ25lZCBpbnQgc3RyZWFtX29uOjE7CS8qIExvY2tzIHN0cmVhbXMgKi8KKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZiaV9kZXY7CisJaW50IHdpZHRoOworCWludCBoZWlnaHQ7CisJdTMyIGZpZWxkX3NpemU7CisJdTMyIGZyYW1lX3NpemU7CisJdTMyIGJ5dGVzcGVybGluZTsKKwlpbnQgdHlwZTsKKwl1OCBjdHJsX2FpbnB1dDsKKwlfX3U4IGlzb2NfaW5fZW5kcG9pbnRhZGRyOworCXU4IGlzb2NfaW5pdF9vazsKKwlpbnQgZ3JlZW5zY3JlZW5fZGV0ZWN0ZWQ7CisJdW5zaWduZWQgaW50IGZyYW1lX2NvdW50OworCWludCBjdHJsX2ZyZXE7CisJaW50IGlucHV0X3R5cGU7CisJdW5zaWduZWQgaW50IGN0cmxfaW5wdXQ7CisJZW51bSBhdTA4MjhfZGV2X3N0YXRlIGRldl9zdGF0ZTsKKwllbnVtIGF1MDgyOF9zdHJlYW1fc3RhdGUgc3RyZWFtX3N0YXRlOworCXdhaXRfcXVldWVfaGVhZF90IG9wZW47CisKKwlzdHJ1Y3QgbXV0ZXggbG9jazsKKworCS8qIElzb2MgY29udHJvbCBzdHJ1Y3QgKi8KKwlzdHJ1Y3QgYXUwODI4X2RtYXF1ZXVlIHZpZHE7CisJc3RydWN0IGF1MDgyOF91c2JfaXNvY19jdGwgaXNvY19jdGw7CisJc3BpbmxvY2tfdCBzbG9jazsKKworCS8qIHVzYiB0cmFuc2ZlciAqLworCWludCBhbHQ7CQkvKiBhbHRlcm5hdGUgKi8KKwlpbnQgbWF4X3BrdF9zaXplOwkvKiBtYXggcGFja2V0IHNpemUgb2YgaXNvYyB0cmFuc2FjdGlvbiAqLworCWludCBudW1fYWx0OwkJLyogTnVtYmVyIG9mIGFsdGVybmF0aXZlIHNldHRpbmdzICovCisJdW5zaWduZWQgaW50ICphbHRfbWF4X3BrdF9zaXplOwkvKiBhcnJheSBvZiB3TWF4UGFja2V0U2l6ZSAqLworCXN0cnVjdCB1cmIgKnVyYltBVTA4MjhfTUFYX0lTT19CVUZTXTsJLyogdXJiIGZvciBpc29jIHRyYW5zZmVycyAqLworCWNoYXIgKnRyYW5zZmVyX2J1ZmZlcltBVTA4MjhfTUFYX0lTT19CVUZTXTsvKiB0cmFuc2ZlciBidWZmZXJzIGZvciBpc29jCisJCQkJCQkgICB0cmFuc2ZlciAqLworCiAJLyogVVNCIC8gVVJCIFJlbGF0ZWQgKi8KIAlpbnQJCXVyYl9zdHJlYW1pbmc7CiAJc3RydWN0IHVyYgkqdXJic1tVUkJfQ09VTlRdOwotCi19OwotCi1zdHJ1Y3QgYXUwODI4X2J1ZmYgewotCXN0cnVjdCBhdTA4MjhfZGV2CSpkZXY7Ci0Jc3RydWN0IHVyYgkJKnB1cmI7Ci0Jc3RydWN0IGxpc3RfaGVhZAlidWZmX2xpc3Q7CiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTExLDggKzI2NSwxMyBAQAogLyogYXUwODI4LWkyYy5jICovCiBleHRlcm4gaW50IGF1MDgyOF9pMmNfcmVnaXN0ZXIoc3RydWN0IGF1MDgyOF9kZXYgKmRldik7CiBleHRlcm4gaW50IGF1MDgyOF9pMmNfdW5yZWdpc3RlcihzdHJ1Y3QgYXUwODI4X2RldiAqZGV2KTsKLWV4dGVybiB2b2lkIGF1MDgyOF9jYWxsX2kyY19jbGllbnRzKHN0cnVjdCBhdTA4MjhfZGV2ICpkZXYsCi0JdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKy8qIGF1MDgyOC12aWRlby5jICovCitpbnQgYXUwODI4X2FuYWxvZ19yZWdpc3RlcihzdHJ1Y3QgYXUwODI4X2RldiAqZGV2LAorCQkJICAgc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGVyZmFjZSk7CitpbnQgYXUwODI4X2FuYWxvZ19zdHJlYW1fZGlzYWJsZShzdHJ1Y3QgYXUwODI4X2RldiAqZCk7Cit2b2lkIGF1MDgyOF9hbmFsb2dfdW5yZWdpc3RlcihzdHJ1Y3QgYXUwODI4X2RldiAqZGV2KTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGF1MDgyOC1kdmIuYyAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDgxOS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDgxOS5jCmluZGV4IGEwN2I3YjguLmRmNDUxNmQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4MTkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODE5LmMKQEAgLTI5LDE2ICsyOSwxNiBAQAogICovCiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KLSNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWlkLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KKyNpbmNsdWRlIDxtZWRpYS9idDgxOS5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkJyb29rdHJlZS04MTkgdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIk1pa2UgQmVybnNvbiAmIERhdmUgUGVya3MiKTsKQEAgLTQ4LDEzICs0OCwxNSBAQAogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IGJ0ODE5IHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CiAJdW5zaWduZWQgY2hhciByZWdbMzJdOwogCi0JaW50IGluaXRpYWxpemVkOwotCWludCBub3JtOworCXY0bDJfc3RkX2lkIG5vcm07CisJaW50IGlkZW50OwogCWludCBpbnB1dDsKIAlpbnQgZW5hYmxlOwogCWludCBicmlnaHQ7CkBAIC02Myw2ICs2NSwxMSBAQAogCWludCBzYXQ7CiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBidDgxOSAqdG9fYnQ4MTkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3QgYnQ4MTksIHNkKTsKK30KKwogc3RydWN0IHRpbWluZyB7CiAJaW50IGhhY3RpdmU7CiAJaW50IGhkZWxheTsKQEAgLTgwLDI0ICs4NywyMyBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW5saW5lIGludCBidDgxOV93cml0ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IHZhbHVlKQorc3RhdGljIGlubGluZSBpbnQgYnQ4MTlfd3JpdGUoc3RydWN0IGJ0ODE5ICpkZWNvZGVyLCB1OCByZWcsIHU4IHZhbHVlKQogewotCXN0cnVjdCBidDgxOSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKCZkZWNvZGVyLT5zZCk7CiAKIAlkZWNvZGVyLT5yZWdbcmVnXSA9IHZhbHVlOwogCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGJ0ODE5X3NldGJpdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IGJpdCwgdTggdmFsdWUpCitzdGF0aWMgaW5saW5lIGludCBidDgxOV9zZXRiaXQoc3RydWN0IGJ0ODE5ICpkZWNvZGVyLCB1OCByZWcsIHU4IGJpdCwgdTggdmFsdWUpCiB7Ci0Jc3RydWN0IGJ0ODE5ICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQlyZXR1cm4gYnQ4MTlfd3JpdGUoY2xpZW50LCByZWcsCisJcmV0dXJuIGJ0ODE5X3dyaXRlKGRlY29kZXIsIHJlZywKIAkJKGRlY29kZXItPnJlZ1tyZWddICYgfigxIDw8IGJpdCkpIHwgKHZhbHVlID8gKDEgPDwgYml0KSA6IDApKTsKIH0KIAotc3RhdGljIGludCBidDgxOV93cml0ZV9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKK3N0YXRpYyBpbnQgYnQ4MTlfd3JpdGVfYmxvY2soc3RydWN0IGJ0ODE5ICpkZWNvZGVyLCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmZGVjb2Rlci0+c2QpOwogCWludCByZXQgPSAtMTsKIAl1OCByZWc7CiAKQEAgLTEwNSw3ICsxMTEsNiBAQAogCSAqIHRoZSBhZGFwdGVyIHVuZGVyc3RhbmRzIHJhdyBJMkMgKi8KIAlpZiAoaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19JMkMpKSB7CiAJCS8qIGRvIHJhdyBJMkMsIG5vdCBzbWJ1cyBjb21wYXRpYmxlICovCi0JCXN0cnVjdCBidDgxOSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCQl1OCBibG9ja19kYXRhWzMyXTsKIAkJaW50IGJsb2NrX2xlbjsKIApAQCAtMTI2LDcgKzEzMSw4IEBACiAJCS8qIGRvIHNvbWUgc2xvdyBJMkMgZW11bGF0aW9uIGtpbmQgb2YgdGhpbmcgKi8KIAkJd2hpbGUgKGxlbiA+PSAyKSB7CiAJCQlyZWcgPSAqZGF0YSsrOwotCQkJaWYgKChyZXQgPSBidDgxOV93cml0ZShjbGllbnQsIHJlZywgKmRhdGErKykpIDwgMCkKKwkJCXJldCA9IGJ0ODE5X3dyaXRlKGRlY29kZXIsIHJlZywgKmRhdGErKyk7CisJCQlpZiAocmV0IDwgMCkKIAkJCQlicmVhazsKIAkJCWxlbiAtPSAyOwogCQl9CkBAIC0xMzUsMTUgKzE0MSwxNSBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IGJ0ODE5X3JlYWQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnKQorc3RhdGljIGlubGluZSBpbnQgYnQ4MTlfcmVhZChzdHJ1Y3QgYnQ4MTkgKmRlY29kZXIsIHU4IHJlZykKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmZGVjb2Rlci0+c2QpOworCiAJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7CiB9CiAKLXN0YXRpYyBpbnQgYnQ4MTlfaW5pdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBidDgxOV9pbml0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7Ci0Jc3RydWN0IGJ0ODE5ICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KIAlzdGF0aWMgdW5zaWduZWQgY2hhciBpbml0W10gPSB7CiAJCS8qMHgxZiwgMHgwMCwqLyAgICAgLyogUmVzZXQgKi8KIAkJMHgwMSwgMHg1OSwJLyogMHgwMSBpbnB1dCBmb3JtYXQgKi8KQEAgLTE3OCw3ICsxODQsOCBAQAogCQkweDFhLCAweDgwLAkvKiAweDFhIEFEQyBJbnRlcmZhY2UgKi8KIAl9OwogCi0Jc3RydWN0IHRpbWluZyAqdGltaW5nID0gJnRpbWluZ19kYXRhW2RlY29kZXItPm5vcm1dOworCXN0cnVjdCBidDgxOSAqZGVjb2RlciA9IHRvX2J0ODE5KHNkKTsKKwlzdHJ1Y3QgdGltaW5nICp0aW1pbmcgPSAmdGltaW5nX2RhdGFbKGRlY29kZXItPm5vcm0gJiBWNEwyX1NURF81MjVfNjApID8gMSA6IDBdOwogCiAJaW5pdFsweDAzICogMiAtIDFdID0KIAkgICAgKCgodGltaW5nLT52ZGVsYXkgPj4gOCkgJiAweDAzKSA8PCA2KSB8CkBAIC0xOTIsMjY2ICsxOTksMzA2IEBACiAJaW5pdFsweDA4ICogMiAtIDFdID0gdGltaW5nLT5oc2NhbGUgPj4gODsKIAlpbml0WzB4MDkgKiAyIC0gMV0gPSB0aW1pbmctPmhzY2FsZSAmIDB4ZmY7CiAJLyogMHgxNSBpbiBhcnJheSBpcyBhZGRyZXNzIDB4MTkgKi8KLQlpbml0WzB4MTUgKiAyIC0gMV0gPSAoZGVjb2Rlci0+bm9ybSA9PSAwKSA/IDExNSA6IDkzOwkvKiBDaHJvbWEgYnVyc3QgZGVsYXkgKi8KKwlpbml0WzB4MTUgKiAyIC0gMV0gPSAoZGVjb2Rlci0+bm9ybSAmIFY0TDJfU1REXzYyNV81MCkgPyAxMTUgOiA5MzsJLyogQ2hyb21hIGJ1cnN0IGRlbGF5ICovCiAJLyogcmVzZXQgKi8KLQlidDgxOV93cml0ZShjbGllbnQsIDB4MWYsIDB4MDApOworCWJ0ODE5X3dyaXRlKGRlY29kZXIsIDB4MWYsIDB4MDApOwogCW1kZWxheSgxKTsKIAogCS8qIGluaXQgKi8KLQlyZXR1cm4gYnQ4MTlfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0LCBzaXplb2YoaW5pdCkpOworCXJldHVybiBidDgxOV93cml0ZV9ibG9jayhkZWNvZGVyLCBpbml0LCBzaXplb2YoaW5pdCkpOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50IGJ0ODE5X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGJ0ODE5X3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgKnBzdGF0dXMsIHY0bDJfc3RkX2lkICpwc3RkKQogewotCWludCB0ZW1wOworCXN0cnVjdCBidDgxOSAqZGVjb2RlciA9IHRvX2J0ODE5KHNkKTsKKwlpbnQgc3RhdHVzID0gYnQ4MTlfcmVhZChkZWNvZGVyLCAweDAwKTsKKwlpbnQgcmVzID0gVjRMMl9JTl9TVF9OT19TSUdOQUw7CisJdjRsMl9zdGRfaWQgc3RkOwogCi0Jc3RydWN0IGJ0ODE5ICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KLQlpZiAoIWRlY29kZXItPmluaXRpYWxpemVkKSB7CS8qIEZpcnN0IGNhbGwgdG8gYnQ4MTlfaW5pdCBjb3VsZCBiZSAqLwotCQlidDgxOV9pbml0KGNsaWVudCk7CS8qIHdpdGhvdXQgI0ZSU1QgPSAwICovCi0JCWRlY29kZXItPmluaXRpYWxpemVkID0gMTsKLQl9Ci0KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgMDoKLQkJLyogVGhpcyBpcyBqdXN0IGZvciB0ZXN0aW5nISEhICovCi0JCWJ0ODE5X2luaXQoY2xpZW50KTsKLQkJYnJlYWs7Ci0KLQljYXNlIERFQ09ERVJfR0VUX0NBUEFCSUxJVElFUzoKLQl7Ci0JCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKLQotCQljYXAtPmZsYWdzID0gVklERU9fREVDT0RFUl9QQUwgfAotCQkJICAgICBWSURFT19ERUNPREVSX05UU0MgfAotCQkJICAgICBWSURFT19ERUNPREVSX0FVVE8gfAotCQkJICAgICBWSURFT19ERUNPREVSX0NDSVI7Ci0JCWNhcC0+aW5wdXRzID0gODsKLQkJY2FwLT5vdXRwdXRzID0gMTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0JCWludCBzdGF0dXM7Ci0JCWludCByZXM7Ci0KLQkJc3RhdHVzID0gYnQ4MTlfcmVhZChjbGllbnQsIDB4MDApOworCWlmICgoc3RhdHVzICYgMHg4MCkpCiAJCXJlcyA9IDA7Ci0JCWlmICgoc3RhdHVzICYgMHg4MCkpCi0JCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfR09PRDsKIAotCQlzd2l0Y2ggKGRlY29kZXItPm5vcm0pIHsKLQkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfTlRTQzsKLQkJCWJyZWFrOwotCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX1BBTDsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQljYXNlIFZJREVPX01PREVfQVVUTzoKLQkJCWlmICgoc3RhdHVzICYgMHgxMCkpCi0JCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX1BBTDsKLQkJCWVsc2UKLQkJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfTlRTQzsKLQkJCWJyZWFrOwotCQl9Ci0JCXJlcyB8PSBERUNPREVSX1NUQVRVU19DT0xPUjsKLQkJKmlhcmcgPSByZXM7CisJaWYgKChzdGF0dXMgJiAweDEwKSkKKwkJc3RkID0gVjRMMl9TVERfUEFMOworCWVsc2UKKwkJc3RkID0gVjRMMl9TVERfTlRTQzsKKwlpZiAocHN0ZCkKKwkJKnBzdGQgPSBzdGQ7CisJaWYgKHBzdGF0dXMpCisJCSpwc3RhdHVzID0gc3RhdHVzOwogCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImdldCBzdGF0dXMgJXhcbiIsICppYXJnKTsKLQkJYnJlYWs7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiZ2V0IHN0YXR1cyAleFxuIiwgc3RhdHVzKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBidDgxOV9xdWVyeXN0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCAqc3RkKQoreworCXJldHVybiBidDgxOV9zdGF0dXMoc2QsIE5VTEwsIHN0ZCk7Cit9CisKK3N0YXRpYyBpbnQgYnQ4MTlfZ19pbnB1dF9zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyICpzdGF0dXMpCit7CisJcmV0dXJuIGJ0ODE5X3N0YXR1cyhzZCwgc3RhdHVzLCBOVUxMKTsKK30KKworc3RhdGljIGludCBidDgxOV9zX3N0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCBzdGQpCit7CisJc3RydWN0IGJ0ODE5ICpkZWNvZGVyID0gdG9fYnQ4MTkoc2QpOworCXN0cnVjdCB0aW1pbmcgKnRpbWluZyA9IE5VTEw7CisKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzZXQgbm9ybSAlbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKXN0ZCk7CisKKwlpZiAoc2QtPnY0bDJfZGV2ID09IE5VTEwgfHwgc2QtPnY0bDJfZGV2LT5ub3RpZnkgPT0gTlVMTCkKKwkJdjRsMl9lcnIoc2QsICJubyBub3RpZnkgZm91bmQhXG4iKTsKKworCWlmIChzdGQgJiBWNEwyX1NURF9OVFNDKSB7CisJCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9MT1csIDApOworCQlidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgwMSwgMCwgMSk7CisJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDAxLCAxLCAwKTsKKwkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MDEsIDUsIDApOworCQlidDgxOV93cml0ZShkZWNvZGVyLCAweDE4LCAweDY4KTsKKwkJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgxOSwgMHg1ZCk7CisJCS8qIGJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDFhLCAgNSwgMSk7ICovCisJCXRpbWluZyA9ICZ0aW1pbmdfZGF0YVsxXTsKKwl9IGVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1BBTCkgeworCQl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIEJUODE5X0ZJRk9fUkVTRVRfTE9XLCAwKTsKKwkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MDEsIDAsIDEpOworCQlidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgwMSwgMSwgMSk7CisJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDAxLCA1LCAxKTsKKwkJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgxOCwgMHg3Zik7CisJCWJ0ODE5X3dyaXRlKGRlY29kZXIsIDB4MTksIDB4NzIpOworCQkvKiBidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgxYSwgIDUsIDApOyAqLworCQl0aW1pbmcgPSAmdGltaW5nX2RhdGFbMF07CisJfSBlbHNlIHsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAidW5zdXBwb3J0ZWQgbm9ybSAlbGx4XG4iLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpc3RkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCWJ0ODE5X3dyaXRlKGRlY29kZXIsIDB4MDMsCisJCQkoKCh0aW1pbmctPnZkZWxheSA+PiA4KSAmIDB4MDMpIDw8IDYpIHwKKwkJCSgoKHRpbWluZy0+dmFjdGl2ZSA+PiA4KSAmIDB4MDMpIDw8IDQpIHwKKwkJCSgoKHRpbWluZy0+aGRlbGF5ID4+IDgpICYgMHgwMykgPDwgMikgfAorCQkJKCh0aW1pbmctPmhhY3RpdmUgPj4gOCkgJiAweDAzKSk7CisJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgwNCwgdGltaW5nLT52ZGVsYXkgJiAweGZmKTsKKwlidDgxOV93cml0ZShkZWNvZGVyLCAweDA1LCB0aW1pbmctPnZhY3RpdmUgJiAweGZmKTsKKwlidDgxOV93cml0ZShkZWNvZGVyLCAweDA2LCB0aW1pbmctPmhkZWxheSAmIDB4ZmYpOworCWJ0ODE5X3dyaXRlKGRlY29kZXIsIDB4MDcsIHRpbWluZy0+aGFjdGl2ZSAmIDB4ZmYpOworCWJ0ODE5X3dyaXRlKGRlY29kZXIsIDB4MDgsICh0aW1pbmctPmhzY2FsZSA+PiA4KSAmIDB4ZmYpOworCWJ0ODE5X3dyaXRlKGRlY29kZXIsIDB4MDksIHRpbWluZy0+aHNjYWxlICYgMHhmZik7CisJZGVjb2Rlci0+bm9ybSA9IHN0ZDsKKwl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIEJUODE5X0ZJRk9fUkVTRVRfSElHSCwgMCk7CisJcmV0dXJuIDA7Cit9CiAKLQljYXNlIERFQ09ERVJfU0VUX05PUk06Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0JCXN0cnVjdCB0aW1pbmcgKnRpbWluZyA9IE5VTEw7CitzdGF0aWMgaW50IGJ0ODE5X3Nfcm91dGluZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSkKK3sKKwlzdHJ1Y3QgYnQ4MTkgKmRlY29kZXIgPSB0b19idDgxOShzZCk7CiAKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IG5vcm0gJXhcbiIsICppYXJnKTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzZXQgaW5wdXQgJXhcbiIsIHJvdXRlLT5pbnB1dCk7CiAKLQkJc3dpdGNoICgqaWFyZykgewotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MDEsIDAsIDEpOwotCQkJYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgwMSwgMSwgMCk7Ci0JCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDAxLCA1LCAwKTsKLQkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgxOCwgMHg2OCk7Ci0JCQlidDgxOV93cml0ZShjbGllbnQsIDB4MTksIDB4NWQpOwotCQkJLyogYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgxYSwgIDUsIDEpOyAqLwotCQkJdGltaW5nID0gJnRpbWluZ19kYXRhW1ZJREVPX01PREVfTlRTQ107Ci0JCQlicmVhazsKLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MDEsIDAsIDEpOwotCQkJYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgwMSwgMSwgMSk7Ci0JCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDAxLCA1LCAxKTsKLQkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgxOCwgMHg3Zik7Ci0JCQlidDgxOV93cml0ZShjbGllbnQsIDB4MTksIDB4NzIpOwotCQkJLyogYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgxYSwgIDUsIDApOyAqLwotCQkJdGltaW5nID0gJnRpbWluZ19kYXRhW1ZJREVPX01PREVfUEFMXTsKLQkJCWJyZWFrOwotCQljYXNlIFZJREVPX01PREVfQVVUTzoKLQkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MDEsIDAsIDApOwotCQkJYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgwMSwgMSwgMCk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInVuc3VwcG9ydGVkIG5vcm0gJXhcbiIsICppYXJnKTsKLQkJCXJldHVybiAtRUlOVkFMOworCWlmIChyb3V0ZS0+aW5wdXQgPCAwIHx8IHJvdXRlLT5pbnB1dCA+IDcpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKHNkLT52NGwyX2RldiA9PSBOVUxMIHx8IHNkLT52NGwyX2Rldi0+bm90aWZ5ID09IE5VTEwpCisJCXY0bDJfZXJyKHNkLCAibm8gbm90aWZ5IGZvdW5kIVxuIik7CisKKwlpZiAoZGVjb2Rlci0+aW5wdXQgIT0gcm91dGUtPmlucHV0KSB7CisJCXY0bDJfc3ViZGV2X25vdGlmeShzZCwgQlQ4MTlfRklGT19SRVNFVF9MT1csIDApOworCQlkZWNvZGVyLT5pbnB1dCA9IHJvdXRlLT5pbnB1dDsKKwkJLyogc2VsZWN0IG1vZGUgKi8KKwkJaWYgKGRlY29kZXItPmlucHV0ID09IDApIHsKKwkJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDBiLCA2LCAwKTsKKwkJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDFhLCAxLCAxKTsKKwkJfSBlbHNlIHsKKwkJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDBiLCA2LCAxKTsKKwkJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDFhLCAxLCAwKTsKIAkJfQotCi0JCWlmICh0aW1pbmcpIHsKLQkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgwMywKLQkJCQkgICAgKCgodGltaW5nLT52ZGVsYXkgPj4gOCkgJiAweDAzKSA8PCA2KSB8Ci0JCQkJICAgICgoKHRpbWluZy0+dmFjdGl2ZSA+PiA4KSAmIDB4MDMpIDw8IDQpIHwKLQkJCQkgICAgKCgodGltaW5nLT5oZGVsYXkgPj4gOCkgJiAweDAzKSA8PCAyKSB8Ci0JCQkJICAgICAoKHRpbWluZy0+aGFjdGl2ZSA+PiA4KSAmIDB4MDMpICk7Ci0JCQlidDgxOV93cml0ZShjbGllbnQsIDB4MDQsIHRpbWluZy0+dmRlbGF5ICYgMHhmZik7Ci0JCQlidDgxOV93cml0ZShjbGllbnQsIDB4MDUsIHRpbWluZy0+dmFjdGl2ZSAmIDB4ZmYpOwotCQkJYnQ4MTlfd3JpdGUoY2xpZW50LCAweDA2LCB0aW1pbmctPmhkZWxheSAmIDB4ZmYpOwotCQkJYnQ4MTlfd3JpdGUoY2xpZW50LCAweDA3LCB0aW1pbmctPmhhY3RpdmUgJiAweGZmKTsKLQkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgwOCwgKHRpbWluZy0+aHNjYWxlID4+IDgpICYgMHhmZik7Ci0JCQlidDgxOV93cml0ZShjbGllbnQsIDB4MDksIHRpbWluZy0+aHNjYWxlICYgMHhmZik7Ci0JCX0KLQotCQlkZWNvZGVyLT5ub3JtID0gKmlhcmc7Ci0JCWJyZWFrOworCQl2NGwyX3N1YmRldl9ub3RpZnkoc2QsIEJUODE5X0ZJRk9fUkVTRVRfSElHSCwgMCk7CiAJfQorCXJldHVybiAwOworfQogCi0JY2FzZSBERUNPREVSX1NFVF9JTlBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKK3N0YXRpYyBpbnQgYnQ4MTlfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkKK3sKKwlzdHJ1Y3QgYnQ4MTkgKmRlY29kZXIgPSB0b19idDgxOShzZCk7CiAKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IGlucHV0ICV4XG4iLCAqaWFyZyk7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiZW5hYmxlIG91dHB1dCAleFxuIiwgZW5hYmxlKTsKIAotCQlpZiAoKmlhcmcgPCAwIHx8ICppYXJnID4gNykKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCWlmIChkZWNvZGVyLT5pbnB1dCAhPSAqaWFyZykgewotCQkJZGVjb2Rlci0+aW5wdXQgPSAqaWFyZzsKLQkJCS8qIHNlbGVjdCBtb2RlICovCi0JCQlpZiAoZGVjb2Rlci0+aW5wdXQgPT0gMCkgewotCQkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MGIsIDYsIDApOwotCQkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MWEsIDEsIDEpOwotCQkJfSBlbHNlIHsKLQkJCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDBiLCA2LCAxKTsKLQkJCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDFhLCAxLCAwKTsKLQkJCX0KLQkJfQotCQlicmVhazsKKwlpZiAoZGVjb2Rlci0+ZW5hYmxlICE9IGVuYWJsZSkgeworCQlkZWNvZGVyLT5lbmFibGUgPSBlbmFibGU7CisJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDE2LCA3LCAhZW5hYmxlKTsKIAl9CisJcmV0dXJuIDA7Cit9CiAKLQljYXNlIERFQ09ERVJfU0VUX09VVFBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgb3V0cHV0ICV4XG4iLCAqaWFyZyk7Ci0KLQkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KLQkJaWYgKCppYXJnICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKK3N0YXRpYyBpbnQgYnQ4MTlfcXVlcnljdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCit7CisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCXY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAtMTI4LCAxMjcsIDEsIDApOwogCQlicmVhazsKLQl9CiAKLQljYXNlIERFQ09ERVJfRU5BQkxFX09VVFBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQkJaW50IGVuYWJsZSA9ICgqaWFyZyAhPSAwKTsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJlbmFibGUgb3V0cHV0ICV4XG4iLCAqaWFyZyk7Ci0KLQkJaWYgKGRlY29kZXItPmVuYWJsZSAhPSBlbmFibGUpIHsKLQkJCWRlY29kZXItPmVuYWJsZSA9IGVuYWJsZTsKLQkJCWJ0ODE5X3NldGJpdChjbGllbnQsIDB4MTYsIDcsICFlbmFibGUpOwotCQl9CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDUxMSwgMSwgMjU2KTsKIAkJYnJlYWs7Ci0JfQogCi0JY2FzZSBERUNPREVSX1NFVF9QSUNUVVJFOgotCXsKLQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnBpYyA9IGFyZzsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCi0JCQkic2V0IHBpY3R1cmUgYnJpZ2h0bmVzcyAlZCBjb250cmFzdCAlZCBjb2xvdXIgJWRcbiIsCi0JCQlwaWMtPmJyaWdodG5lc3MsIHBpYy0+Y29udHJhc3QsIHBpYy0+Y29sb3VyKTsKLQotCi0JCWlmIChkZWNvZGVyLT5icmlnaHQgIT0gcGljLT5icmlnaHRuZXNzKSB7Ci0JCQkvKiBXZSB3YW50IC0xMjggdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5icmlnaHQgPSBwaWMtPmJyaWdodG5lc3M7Ci0JCQlidDgxOV93cml0ZShjbGllbnQsIDB4MGEsCi0JCQkJICAgIChkZWNvZGVyLT5icmlnaHQgPj4gOCkgLSAxMjgpOwotCQl9Ci0KLQkJaWYgKGRlY29kZXItPmNvbnRyYXN0ICE9IHBpYy0+Y29udHJhc3QpIHsKLQkJCS8qIFdlIHdhbnQgMCB0byA1MTEgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCWRlY29kZXItPmNvbnRyYXN0ID0gcGljLT5jb250cmFzdDsKLQkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgwYywKLQkJCQkgICAgKGRlY29kZXItPmNvbnRyYXN0ID4+IDcpICYgMHhmZik7Ci0JCQlidDgxOV9zZXRiaXQoY2xpZW50LCAweDBiLCAyLAotCQkJCSAgICAgKChkZWNvZGVyLT5jb250cmFzdCA+PiAxNSkgJiAweDAxKSk7Ci0JCX0KLQotCQlpZiAoZGVjb2Rlci0+c2F0ICE9IHBpYy0+Y29sb3VyKSB7Ci0JCQkvKiBXZSB3YW50IDAgdG8gNTExIHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5zYXQgPSBwaWMtPmNvbG91cjsKLQkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgwZCwKLQkJCQkgICAgKGRlY29kZXItPnNhdCA+PiA3KSAmIDB4ZmYpOwotCQkJYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgwYiwgMSwKLQkJCQkgICAgICgoZGVjb2Rlci0+c2F0ID4+IDE1KSAmIDB4MDEpKTsKLQotCQkJdGVtcCA9IChkZWNvZGVyLT5zYXQgKiAyMDEpIC8gMjM3OwotCQkJYnQ4MTlfd3JpdGUoY2xpZW50LCAweDBlLCAodGVtcCA+PiA3KSAmIDB4ZmYpOwotCQkJYnQ4MTlfc2V0Yml0KGNsaWVudCwgMHgwYiwgMCwgKHRlbXAgPj4gMTUpICYgMHgwMSk7Ci0JCX0KLQotCQlpZiAoZGVjb2Rlci0+aHVlICE9IHBpYy0+aHVlKSB7Ci0JCQkvKiBXZSB3YW50IC0xMjggdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5odWUgPSBwaWMtPmh1ZTsKLQkJCWJ0ODE5X3dyaXRlKGNsaWVudCwgMHgwZiwKLQkJCQkgICAgMTI4IC0gKGRlY29kZXItPmh1ZSA+PiA4KSk7Ci0JCX0KKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCXY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA1MTEsIDEsIDI1Nik7CiAJCWJyZWFrOwotCX0KKworCWNhc2UgVjRMMl9DSURfSFVFOgorCQl2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgLTEyOCwgMTI3LCAxLCAwKTsKKwkJYnJlYWs7CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBidDgxOV9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgYnQ4MTkgKmRlY29kZXIgPSB0b19idDgxOShzZCk7CisJaW50IHRlbXA7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQlpZiAoZGVjb2Rlci0+YnJpZ2h0ID09IGN0cmwtPnZhbHVlKQorCQkJYnJlYWs7CisJCWRlY29kZXItPmJyaWdodCA9IGN0cmwtPnZhbHVlOworCQlidDgxOV93cml0ZShkZWNvZGVyLCAweDBhLCBkZWNvZGVyLT5icmlnaHQpOworCQlicmVhazsKKworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCWlmIChkZWNvZGVyLT5jb250cmFzdCA9PSBjdHJsLT52YWx1ZSkKKwkJCWJyZWFrOworCQlkZWNvZGVyLT5jb250cmFzdCA9IGN0cmwtPnZhbHVlOworCQlidDgxOV93cml0ZShkZWNvZGVyLCAweDBjLCBkZWNvZGVyLT5jb250cmFzdCAmIDB4ZmYpOworCQlidDgxOV9zZXRiaXQoZGVjb2RlciwgMHgwYiwgMiwgKChkZWNvZGVyLT5jb250cmFzdCA+PiA4KSAmIDB4MDEpKTsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCWlmIChkZWNvZGVyLT5zYXQgPT0gY3RybC0+dmFsdWUpCisJCQlicmVhazsKKwkJZGVjb2Rlci0+c2F0ID0gY3RybC0+dmFsdWU7CisJCWJ0ODE5X3dyaXRlKGRlY29kZXIsIDB4MGQsIChkZWNvZGVyLT5zYXQgPj4gNykgJiAweGZmKTsKKwkJYnQ4MTlfc2V0Yml0KGRlY29kZXIsIDB4MGIsIDEsICgoZGVjb2Rlci0+c2F0ID4+IDE1KSAmIDB4MDEpKTsKKworCQkvKiBSYXRpbyBiZXR3ZWVuIFUgZ2FpbiBhbmQgViBnYWluIG11c3Qgc3RheSB0aGUgc2FtZSBhcworCQkgICB0aGUgcmF0aW8gYmV0d2VlbiB0aGUgZGVmYXVsdCBVIGFuZCBWIGdhaW4gdmFsdWVzLiAqLworCQl0ZW1wID0gKGRlY29kZXItPnNhdCAqIDE4MCkgLyAyNTQ7CisJCWJ0ODE5X3dyaXRlKGRlY29kZXIsIDB4MGUsICh0ZW1wID4+IDcpICYgMHhmZik7CisJCWJ0ODE5X3NldGJpdChkZWNvZGVyLCAweDBiLCAwLCAodGVtcCA+PiAxNSkgJiAweDAxKTsKKwkJYnJlYWs7CisKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJaWYgKGRlY29kZXItPmh1ZSA9PSBjdHJsLT52YWx1ZSkKKwkJCWJyZWFrOworCQlkZWNvZGVyLT5odWUgPSBjdHJsLT52YWx1ZTsKKwkJYnQ4MTlfd3JpdGUoZGVjb2RlciwgMHgwZiwgZGVjb2Rlci0+aHVlKTsKKwkJYnJlYWs7CisKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYnQ4MTlfZ19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGJ0ODE5ICpkZWNvZGVyID0gdG9fYnQ4MTkoc2QpOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJY3RybC0+dmFsdWUgPSBkZWNvZGVyLT5icmlnaHQ7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCWN0cmwtPnZhbHVlID0gZGVjb2Rlci0+Y29udHJhc3Q7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJY3RybC0+dmFsdWUgPSBkZWNvZGVyLT5zYXQ7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfSFVFOgorCQljdHJsLT52YWx1ZSA9IGRlY29kZXItPmh1ZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGJ0ODE5X2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgYnQ4MTkgKmRlY29kZXIgPSB0b19idDgxOShzZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgZGVjb2Rlci0+aWRlbnQsIDApOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDhhID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGJ0ODE5X2NvcmVfb3BzID0geworCS5nX2NoaXBfaWRlbnQgPSBidDgxOV9nX2NoaXBfaWRlbnQsCisJLmdfY3RybCA9IGJ0ODE5X2dfY3RybCwKKwkuc19jdHJsID0gYnQ4MTlfc19jdHJsLAorCS5xdWVyeWN0cmwgPSBidDgxOV9xdWVyeWN0cmwsCit9OwogCi1JMkNfQ0xJRU5UX0lOU01PRDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdHVuZXJfb3BzIGJ0ODE5X3R1bmVyX29wcyA9IHsKKwkuc19zdGQgPSBidDgxOV9zX3N0ZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIGJ0ODE5X3ZpZGVvX29wcyA9IHsKKwkuc19yb3V0aW5nID0gYnQ4MTlfc19yb3V0aW5nLAorCS5zX3N0cmVhbSA9IGJ0ODE5X3Nfc3RyZWFtLAorCS5xdWVyeXN0ZCA9IGJ0ODE5X3F1ZXJ5c3RkLAorCS5nX2lucHV0X3N0YXR1cyA9IGJ0ODE5X2dfaW5wdXRfc3RhdHVzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgYnQ4MTlfb3BzID0geworCS5jb3JlID0gJmJ0ODE5X2NvcmVfb3BzLAorCS50dW5lciA9ICZidDgxOV90dW5lcl9vcHMsCisJLnZpZGVvID0gJmJ0ODE5X3ZpZGVvX29wcywKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBpbnQgYnQ4MTlfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlpbnQgaSwgdmVyOwogCXN0cnVjdCBidDgxOSAqZGVjb2RlcjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCWNvbnN0IGNoYXIgKm5hbWU7CiAKIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCiAJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCiAJCXJldHVybiAtRU5PREVWOwogCi0JdmVyID0gYnQ4MTlfcmVhZChjbGllbnQsIDB4MTcpOworCWRlY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgYnQ4MTkpLCBHRlBfS0VSTkVMKTsKKwlpZiAoZGVjb2RlciA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwlzZCA9ICZkZWNvZGVyLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmYnQ4MTlfb3BzKTsKKworCXZlciA9IGJ0ODE5X3JlYWQoZGVjb2RlciwgMHgxNyk7CiAJc3dpdGNoICh2ZXIgJiAweGYwKSB7CiAJY2FzZSAweDcwOgogCQluYW1lID0gImJ0ODE5YSI7CisJCWRlY29kZXItPmlkZW50ID0gVjRMMl9JREVOVF9CVDgxOUE7CiAJCWJyZWFrOwogCWNhc2UgMHg2MDoKIAkJbmFtZSA9ICJidDgxN2EiOworCQlkZWNvZGVyLT5pZGVudCA9IFY0TDJfSURFTlRfQlQ4MTdBOwogCQlicmVhazsKIAljYXNlIDB4MjA6CiAJCW5hbWUgPSAiYnQ4MTVhIjsKKwkJZGVjb2Rlci0+aWRlbnQgPSBWNEwyX0lERU5UX0JUODE1QTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsCiAJCQkidW5rbm93biBjaGlwIHZlcnNpb24gMHglMDJ4XG4iLCB2ZXIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC00NTksMjggKzUwNiwyNiBAQAogCXY0bF9pbmZvKGNsaWVudCwgIiVzIGZvdW5kIEAgMHgleCAoJXMpXG4iLCBuYW1lLAogCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKLQlkZWNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJ0ODE5KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRlY29kZXIgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JZGVjb2Rlci0+bm9ybSA9IFZJREVPX01PREVfTlRTQzsKKwlkZWNvZGVyLT5ub3JtID0gVjRMMl9TVERfTlRTQzsKIAlkZWNvZGVyLT5pbnB1dCA9IDA7CiAJZGVjb2Rlci0+ZW5hYmxlID0gMTsKLQlkZWNvZGVyLT5icmlnaHQgPSAzMjc2ODsKLQlkZWNvZGVyLT5jb250cmFzdCA9IDMyNzY4OwotCWRlY29kZXItPmh1ZSA9IDMyNzY4OwotCWRlY29kZXItPnNhdCA9IDMyNzY4OwotCWRlY29kZXItPmluaXRpYWxpemVkID0gMDsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZWNvZGVyKTsKKwlkZWNvZGVyLT5icmlnaHQgPSAwOworCWRlY29kZXItPmNvbnRyYXN0ID0gMHhkODsJLyogMTAwJSBvZiBvcmlnaW5hbCBzaWduYWwgKi8KKwlkZWNvZGVyLT5odWUgPSAwOworCWRlY29kZXItPnNhdCA9IDB4ZmU7CQkvKiAxMDAlIG9mIG9yaWdpbmFsIHNpZ25hbCAqLwogCi0JaSA9IGJ0ODE5X2luaXQoY2xpZW50KTsKKwlpID0gYnQ4MTlfaW5pdChzZCk7CiAJaWYgKGkgPCAwKQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbml0IHN0YXR1cyAlZFxuIiwgaSk7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImluaXQgc3RhdHVzICVkXG4iLCBpKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBidDgxOV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCWtmcmVlKHRvX2J0ODE5KHNkKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ5Niw4ICs1NDEsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAiYnQ4MTkiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9CVDgxOSwKLQkuY29tbWFuZCA9IGJ0ODE5X2NvbW1hbmQsCiAJLnByb2JlID0gYnQ4MTlfcHJvYmUsCiAJLnJlbW92ZSA9IGJ0ODE5X3JlbW92ZSwKIAkuaWRfdGFibGUgPSBidDgxOV9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4NTYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4NTYuYwppbmRleCA0MjEzODY3Li43OGRiMzk1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODU2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDg1Ni5jCkBAIC0zNCwxMCArMzQsMTAgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZW5jb2Rlci5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiQnJvb2t0cmVlLTg1NkEgdmlkZW8gZW5jb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIk1pa2UgQmVybnNvbiAmIERhdmUgUGVya3MiKTsKQEAgLTQ3LDQzICs0Nyw0NiBAQAogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogI2RlZmluZSBCVDg1Nl9SRUdfT0ZGU0VUCTB4REEKICNkZWZpbmUgQlQ4NTZfTlJfUkVHCQk2CiAKIHN0cnVjdCBidDg1NiB7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOwogCXVuc2lnbmVkIGNoYXIgcmVnW0JUODU2X05SX1JFR107CiAKLQlpbnQgbm9ybTsKLQlpbnQgZW5hYmxlOworCXY0bDJfc3RkX2lkIG5vcm07CiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBidDg1NiAqdG9fYnQ4NTYoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3QgYnQ4NTYsIHNkKTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGlubGluZSBpbnQgYnQ4NTZfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGJ0ODU2X3dyaXRlKHN0cnVjdCBidDg1NiAqZW5jb2RlciwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKLQlzdHJ1Y3QgYnQ4NTYgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmZW5jb2Rlci0+c2QpOwogCiAJZW5jb2Rlci0+cmVnW3JlZyAtIEJUODU2X1JFR19PRkZTRVRdID0gdmFsdWU7CiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgYnQ4NTZfc2V0Yml0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggYml0LCB1OCB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IGJ0ODU2X3NldGJpdChzdHJ1Y3QgYnQ4NTYgKmVuY29kZXIsIHU4IHJlZywgdTggYml0LCB1OCB2YWx1ZSkKIHsKLQlzdHJ1Y3QgYnQ4NTYgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCXJldHVybiBidDg1Nl93cml0ZShjbGllbnQsIHJlZywKKwlyZXR1cm4gYnQ4NTZfd3JpdGUoZW5jb2RlciwgcmVnLAogCQkoZW5jb2Rlci0+cmVnW3JlZyAtIEJUODU2X1JFR19PRkZTRVRdICYgfigxIDw8IGJpdCkpIHwKIAkJCQkodmFsdWUgPyAoMSA8PCBiaXQpIDogMCkpOwogfQogCi1zdGF0aWMgdm9pZCBidDg1Nl9kdW1wKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgdm9pZCBidDg1Nl9kdW1wKHN0cnVjdCBidDg1NiAqZW5jb2RlcikKIHsKIAlpbnQgaTsKLQlzdHJ1Y3QgYnQ4NTYgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotCXY0bF9pbmZvKGNsaWVudCwgInJlZ2lzdGVyIGR1bXA6XG4iKTsKKwl2NGwyX2luZm8oJmVuY29kZXItPnNkLCAicmVnaXN0ZXIgZHVtcDpcbiIpOwogCWZvciAoaSA9IDA7IGkgPCBCVDg1Nl9OUl9SRUc7IGkgKz0gMikKIAkJcHJpbnRrKEtFUk5fQ09OVCAiICUwMngiLCBlbmNvZGVyLT5yZWdbaV0pOwogCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CkBAIC05MSwxNTMgKzk0LDEyMCBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50IGJ0ODU2X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGJ0ODU2X2luaXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIGFyZykKIHsKLQlzdHJ1Y3QgYnQ4NTYgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgYnQ4NTYgKmVuY29kZXIgPSB0b19idDg1NihzZCk7CiAKLQlzd2l0Y2ggKGNtZCkgeworCS8qIFRoaXMgaXMganVzdCBmb3IgdGVzdGluZyEhISAqLworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImluaXRcbiIpOworCWJ0ODU2X3dyaXRlKGVuY29kZXIsIDB4ZGMsIDB4MTgpOworCWJ0ODU2X3dyaXRlKGVuY29kZXIsIDB4ZGEsIDApOworCWJ0ODU2X3dyaXRlKGVuY29kZXIsIDB4ZGUsIDApOworCisJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGMsIDMsIDEpOworCS8qYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGMsIDYsIDApOyovCisJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGMsIDQsIDEpOworCisJaWYgKGVuY29kZXItPm5vcm0gJiBWNEwyX1NURF9OVFNDKQorCQlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYywgMiwgMCk7CisJZWxzZQorCQlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYywgMiwgMSk7CisKKwlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYywgMSwgMSk7CisJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGUsIDQsIDApOworCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRlLCAzLCAxKTsKKwlpZiAoZGVidWcgIT0gMCkKKwkJYnQ4NTZfZHVtcChlbmNvZGVyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBidDg1Nl9zX3N0ZF9vdXRwdXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgc3RkKQoreworCXN0cnVjdCBidDg1NiAqZW5jb2RlciA9IHRvX2J0ODU2KHNkKTsKKworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInNldCBub3JtICVsbHhcbiIsICh1bnNpZ25lZCBsb25nIGxvbmcpc3RkKTsKKworCWlmIChzdGQgJiBWNEwyX1NURF9OVFNDKSB7CisJCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRjLCAyLCAwKTsKKwl9IGVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1BBTCkgeworCQlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYywgMiwgMSk7CisJCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRhLCAwLCAwKTsKKwkJLypidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYSwgMCwgMSk7Ki8KKwl9IGVsc2UgeworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJZW5jb2Rlci0+bm9ybSA9IHN0ZDsKKwlpZiAoZGVidWcgIT0gMCkKKwkJYnQ4NTZfZHVtcChlbmNvZGVyKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBidDg1Nl9zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCit7CisJc3RydWN0IGJ0ODU2ICplbmNvZGVyID0gdG9fYnQ4NTYoc2QpOworCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic2V0IGlucHV0ICVkXG4iLCByb3V0ZS0+aW5wdXQpOworCisJLyogV2Ugb25seSBoYXZlIHZpZGVvIGJ1cy4KKwkgKiByb3V0ZS0+aW5wdXQ9IDA6IGlucHV0IGlzIGZyb20gYnQ4MTkKKwkgKiByb3V0ZS0+aW5wdXQ9IDE6IGlucHV0IGlzIGZyb20gWlIzNjA2MCAqLworCXN3aXRjaCAocm91dGUtPmlucHV0KSB7CiAJY2FzZSAwOgotCQkvKiBUaGlzIGlzIGp1c3QgZm9yIHRlc3RpbmchISEgKi8KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaW5pdFxuIik7Ci0JCWJ0ODU2X3dyaXRlKGNsaWVudCwgMHhkYywgMHgxOCk7Ci0JCWJ0ODU2X3dyaXRlKGNsaWVudCwgMHhkYSwgMCk7Ci0JCWJ0ODU2X3dyaXRlKGNsaWVudCwgMHhkZSwgMCk7Ci0KLQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgMywgMSk7Ci0JCS8vYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgNiwgMCk7Ci0JCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDQsIDEpOwotCi0JCXN3aXRjaCAoZW5jb2Rlci0+bm9ybSkgewotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDIsIDApOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDIsIDEpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRjLCAxLCAxKTsKLQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkZSwgNCwgMCk7Ci0JCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGUsIDMsIDEpOwotCQlpZiAoZGVidWcgIT0gMCkKLQkJCWJ0ODU2X2R1bXAoY2xpZW50KTsKKwkJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGUsIDQsIDApOworCQlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkZSwgMywgMSk7CisJCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRjLCAzLCAxKTsKKwkJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGMsIDYsIDApOwogCQlicmVhazsKLQotCWNhc2UgRU5DT0RFUl9HRVRfQ0FQQUJJTElUSUVTOgotCXsKLQkJc3RydWN0IHZpZGVvX2VuY29kZXJfY2FwYWJpbGl0eSAqY2FwID0gYXJnOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImdldCBjYXBhYmlsaXRpZXNcbiIpOwotCi0JCWNhcC0+ZmxhZ3MgPSBWSURFT19FTkNPREVSX1BBTCB8Ci0JCQkgICAgIFZJREVPX0VOQ09ERVJfTlRTQyB8Ci0JCQkgICAgIFZJREVPX0VOQ09ERVJfQ0NJUjsKLQkJY2FwLT5pbnB1dHMgPSAyOwotCQljYXAtPm91dHB1dHMgPSAxOworCWNhc2UgMToKKwkJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGUsIDQsIDApOworCQlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkZSwgMywgMSk7CisJCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRjLCAzLCAxKTsKKwkJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGMsIDYsIDEpOwogCQlicmVhazsKLQl9Ci0KLQljYXNlIEVOQ09ERVJfU0VUX05PUk06Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IG5vcm0gJWRcbiIsICppYXJnKTsKLQotCQlzd2l0Y2ggKCppYXJnKSB7Ci0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgMiwgMCk7Ci0JCQlicmVhazsKLQotCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgMiwgMSk7Ci0JCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRhLCAwLCAwKTsKLQkJCS8vYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYSwgMCwgMSk7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJZW5jb2Rlci0+bm9ybSA9ICppYXJnOwotCQlpZiAoZGVidWcgIT0gMCkKLQkJCWJ0ODU2X2R1bXAoY2xpZW50KTsKKwljYXNlIDI6CS8qIENvbG9yIGJhciAqLworCQlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYywgMywgMCk7CisJCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRlLCA0LCAxKTsKIAkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX1NFVF9JTlBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgaW5wdXQgJWRcbiIsICppYXJnKTsKLQotCQkvKiBXZSBvbmx5IGhhdmUgdmlkZW8gYnVzLgotCQkgKiBpYXJnID0gMDogaW5wdXQgaXMgZnJvbSBidDgxOQotCQkgKiBpYXJnID0gMTogaW5wdXQgaXMgZnJvbSBaUjM2MDYwICovCi0JCXN3aXRjaCAoKmlhcmcpIHsKLQkJY2FzZSAwOgotCQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkZSwgNCwgMCk7Ci0JCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRlLCAzLCAxKTsKLQkJCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDMsIDEpOwotCQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgNiwgMCk7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkZSwgNCwgMCk7Ci0JCQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRlLCAzLCAxKTsKLQkJCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDMsIDEpOwotCQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkYywgNiwgMSk7Ci0JCQlicmVhazsKLQkJY2FzZSAyOgkvLyBDb2xvciBiYXIKLQkJCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDMsIDApOwotCQkJYnQ4NTZfc2V0Yml0KGNsaWVudCwgMHhkZSwgNCwgMSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJaWYgKGRlYnVnICE9IDApCi0JCQlidDg1Nl9kdW1wKGNsaWVudCk7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgRU5DT0RFUl9TRVRfT1VUUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBvdXRwdXQgJWRcbiIsICppYXJnKTsKLQotCQkvKiBub3QgbXVjaCBjaG9pY2Ugb2Ygb3V0cHV0cyAqLwotCQlpZiAoKmlhcmcgIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIEVOQ09ERVJfRU5BQkxFX09VVFBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQllbmNvZGVyLT5lbmFibGUgPSAhISppYXJnOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgImVuYWJsZSBvdXRwdXQgJWRcbiIsIGVuY29kZXItPmVuYWJsZSk7Ci0JCWJyZWFrOwotCX0KLQogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAorCWlmIChkZWJ1ZyAhPSAwKQorCQlidDg1Nl9kdW1wKGVuY29kZXIpOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IGJ0ODU2X2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX0JUODU2LCAwKTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg4OCA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBidDg1Nl9jb3JlX29wcyA9IHsKKwkuZ19jaGlwX2lkZW50ID0gYnQ4NTZfZ19jaGlwX2lkZW50LAorCS5pbml0ID0gYnQ4NTZfaW5pdCwKK307CiAKLUkyQ19DTElFTlRfSU5TTU9EOworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgYnQ4NTZfdmlkZW9fb3BzID0geworCS5zX3N0ZF9vdXRwdXQgPSBidDg1Nl9zX3N0ZF9vdXRwdXQsCisJLnNfcm91dGluZyA9IGJ0ODU2X3Nfcm91dGluZywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIGJ0ODU2X29wcyA9IHsKKwkuY29yZSA9ICZidDg1Nl9jb3JlX29wcywKKwkudmlkZW8gPSAmYnQ4NTZfdmlkZW9fb3BzLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCBidDg1Nl9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBidDg1NiAqZW5jb2RlcjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCiAJLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLwogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQpAQCAtMjQ5LDQxICsyMTksMzggQEAKIAllbmNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IGJ0ODU2KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGVuY29kZXIgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07Ci0JZW5jb2Rlci0+bm9ybSA9IFZJREVPX01PREVfTlRTQzsKLQllbmNvZGVyLT5lbmFibGUgPSAxOwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGVuY29kZXIpOworCXNkID0gJmVuY29kZXItPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZidDg1Nl9vcHMpOworCWVuY29kZXItPm5vcm0gPSBWNEwyX1NURF9OVFNDOwogCi0JYnQ4NTZfd3JpdGUoY2xpZW50LCAweGRjLCAweDE4KTsKLQlidDg1Nl93cml0ZShjbGllbnQsIDB4ZGEsIDApOwotCWJ0ODU2X3dyaXRlKGNsaWVudCwgMHhkZSwgMCk7CisJYnQ4NTZfd3JpdGUoZW5jb2RlciwgMHhkYywgMHgxOCk7CisJYnQ4NTZfd3JpdGUoZW5jb2RlciwgMHhkYSwgMCk7CisJYnQ4NTZfd3JpdGUoZW5jb2RlciwgMHhkZSwgMCk7CiAKLQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRjLCAzLCAxKTsKLQkvL2J0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDYsIDApOwotCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDQsIDEpOworCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRjLCAzLCAxKTsKKwkvKmJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRjLCA2LCAwKTsqLworCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRjLCA0LCAxKTsKIAotCXN3aXRjaCAoZW5jb2Rlci0+bm9ybSkgeworCWlmIChlbmNvZGVyLT5ub3JtICYgVjRMMl9TVERfTlRTQykKKwkJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGMsIDIsIDApOworCWVsc2UKKwkJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGMsIDIsIDEpOwogCi0JY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDIsIDApOwotCQlicmVhazsKLQotCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCWJ0ODU2X3NldGJpdChjbGllbnQsIDB4ZGMsIDIsIDEpOwotCQlicmVhazsKLQl9Ci0KLQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRjLCAxLCAxKTsKLQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRlLCA0LCAwKTsKLQlidDg1Nl9zZXRiaXQoY2xpZW50LCAweGRlLCAzLCAxKTsKKwlidDg1Nl9zZXRiaXQoZW5jb2RlciwgMHhkYywgMSwgMSk7CisJYnQ4NTZfc2V0Yml0KGVuY29kZXIsIDB4ZGUsIDQsIDApOworCWJ0ODU2X3NldGJpdChlbmNvZGVyLCAweGRlLCAzLCAxKTsKIAogCWlmIChkZWJ1ZyAhPSAwKQotCQlidDg1Nl9kdW1wKGNsaWVudCk7CisJCWJ0ODU2X2R1bXAoZW5jb2Rlcik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYnQ4NTZfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Ja2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZSh0b19idDg1NihzZCkpOwogCXJldHVybiAwOwogfQogCkBAIC0yOTUsOCArMjYyLDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gImJ0ODU2IiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfQlQ4NTYsCi0JLmNvbW1hbmQgPSBidDg1Nl9jb21tYW5kLAogCS5wcm9iZSA9IGJ0ODU2X3Byb2JlLAogCS5yZW1vdmUgPSBidDg1Nl9yZW1vdmUsCiAJLmlkX3RhYmxlID0gYnQ4NTZfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODY2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0ODY2LmMKaW5kZXggNTk2ZjllMi4uMzUwY2FlNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDg2Ni5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4NjYuYwpAQCAtMzQsMTAgKzM0LDEwIEBACiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2VuY29kZXIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oIkJyb29rdHJlZS04NjYgdmlkZW8gZW5jb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIk1pa2UgQmVybnNvbiAmIERhdmUgUGVya3MiKTsKQEAgLTQ3LDIyICs0NywyMiBAQAogbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RydWN0IGJ0ODY2IHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CiAJdTggcmVnWzI1Nl07Ci0KLQlpbnQgbm9ybTsKLQlpbnQgZW5hYmxlOwotCWludCBicmlnaHQ7Ci0JaW50IGNvbnRyYXN0OwotCWludCBodWU7Ci0JaW50IHNhdDsKIH07CiAKLXN0YXRpYyBpbnQgYnQ4NjZfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggc3ViYWRkciwgdTggZGF0YSkKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJ0ODY2ICp0b19idDg2NihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewotCXN0cnVjdCBidDg2NiAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBidDg2Niwgc2QpOworfQorCitzdGF0aWMgaW50IGJ0ODY2X3dyaXRlKHN0cnVjdCBidDg2NiAqZW5jb2RlciwgdTggc3ViYWRkciwgdTggZGF0YSkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmZW5jb2Rlci0+c2QpOwogCXU4IGJ1ZmZlclsyXTsKIAlpbnQgZXJyOwogCkBAIC04OSwxNjMgKzg5LDEyMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGJ0ODY2X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IGJ0ODY2X3Nfc3RkX291dHB1dChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCBzdGQpCiB7Ci0Jc3RydWN0IGJ0ODY2ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic2V0IG5vcm0gJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzdGQpOwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIEVOQ09ERVJfR0VUX0NBUEFCSUxJVElFUzoKLQl7Ci0JCXN0cnVjdCB2aWRlb19lbmNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJnZXQgY2FwYWJpbGl0aWVzXG4iKTsKLQotCQljYXAtPmZsYWdzCi0JCQk9IFZJREVPX0VOQ09ERVJfUEFMCi0JCQl8IFZJREVPX0VOQ09ERVJfTlRTQwotCQkJfCBWSURFT19FTkNPREVSX0NDSVI7Ci0JCWNhcC0+aW5wdXRzID0gMjsKLQkJY2FwLT5vdXRwdXRzID0gMTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBFTkNPREVSX1NFVF9OT1JNOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBub3JtICVkXG4iLCAqaWFyZyk7Ci0KLQkJc3dpdGNoICgqaWFyZykgewotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJZW5jb2Rlci0+bm9ybSA9ICppYXJnOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIEVOQ09ERVJfU0VUX0lOUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCQlzdGF0aWMgY29uc3QgX191OCBpbml0W10gPSB7Ci0JCQkweGM4LCAweGNjLCAvKiBDUlNDQUxFICovCi0JCQkweGNhLCAweDkxLCAvKiBDQlNDQUxFICovCi0JCQkweGNjLCAweDI0LCAvKiBZQzE2IHwgT1NETlVNICovCi0JCQkweGRhLCAweDAwLCAvKiAgKi8KLQkJCTB4ZGMsIDB4MjQsIC8qIFNFVE1PREUgfCBQQUwgKi8KLQkJCTB4ZGUsIDB4MDIsIC8qIEVBQ1RJVkUgKi8KLQotCQkJLyogb3ZlcmxheSBjb2xvcnMgKi8KLQkJCTB4NzAsIDB4RUIsIDB4OTAsIDB4ODAsIDB4QjAsIDB4ODAsIC8qIHdoaXRlICovCi0JCQkweDcyLCAweEEyLCAweDkyLCAweDhFLCAweEIyLCAweDJDLCAvKiB5ZWxsb3cgKi8KLQkJCTB4NzQsIDB4ODMsIDB4OTQsIDB4MkMsIDB4QjQsIDB4OUMsIC8qIGN5YW4gKi8KLQkJCTB4NzYsIDB4NzAsIDB4OTYsIDB4M0EsIDB4QjYsIDB4NDgsIC8qIGdyZWVuICovCi0JCQkweDc4LCAweDU0LCAweDk4LCAweEM2LCAweEI4LCAweEI4LCAvKiBtYWdlbnRhICovCi0JCQkweDdBLCAweDQxLCAweDlBLCAweEQ0LCAweEJBLCAweDY0LCAvKiByZWQgKi8KLQkJCTB4N0MsIDB4MjMsIDB4OUMsIDB4NzIsIDB4QkMsIDB4RDQsIC8qIGJsdWUgKi8KLQkJCTB4N0UsIDB4MTAsIDB4OUUsIDB4ODAsIDB4QkUsIDB4ODAsIC8qIGJsYWNrICovCi0KLQkJCTB4NjAsIDB4RUIsIDB4ODAsIDB4ODAsIDB4YzAsIDB4ODAsIC8qIHdoaXRlICovCi0JCQkweDYyLCAweEEyLCAweDgyLCAweDhFLCAweGMyLCAweDJDLCAvKiB5ZWxsb3cgKi8KLQkJCTB4NjQsIDB4ODMsIDB4ODQsIDB4MkMsIDB4YzQsIDB4OUMsIC8qIGN5YW4gKi8KLQkJCTB4NjYsIDB4NzAsIDB4ODYsIDB4M0EsIDB4YzYsIDB4NDgsIC8qIGdyZWVuICovCi0JCQkweDY4LCAweDU0LCAweDg4LCAweEM2LCAweGM4LCAweEI4LCAvKiBtYWdlbnRhICovCi0JCQkweDZBLCAweDQxLCAweDhBLCAweEQ0LCAweGNBLCAweDY0LCAvKiByZWQgKi8KLQkJCTB4NkMsIDB4MjMsIDB4OEMsIDB4NzIsIDB4Y0MsIDB4RDQsIC8qIGJsdWUgKi8KLQkJCTB4NkUsIDB4MTAsIDB4OEUsIDB4ODAsIDB4Y0UsIDB4ODAsIC8qIGJsYWNrICovCi0JCX07Ci0JCWludCBpOwotCQl1OCB2YWw7Ci0KLQkJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoaW5pdCkgLyAyOyBpICs9IDIpCi0JCQlidDg2Nl93cml0ZShjbGllbnQsIGluaXRbaV0sIGluaXRbaSsxXSk7Ci0KLQkJdmFsID0gZW5jb2Rlci0+cmVnWzB4ZGNdOwotCi0JCWlmICgqaWFyZyA9PSAwKQotCQkJdmFsIHw9IDB4NDA7IC8qIENCU1dBUCAqLwotCQllbHNlCi0JCQl2YWwgJj0gfjB4NDA7IC8qICFDQlNXQVAgKi8KLQotCQlidDg2Nl93cml0ZShjbGllbnQsIDB4ZGMsIHZhbCk7Ci0KLQkJdmFsID0gZW5jb2Rlci0+cmVnWzB4Y2NdOwotCQlpZiAoKmlhcmcgPT0gMikKLQkJCXZhbCB8PSAweDAxOyAvKiBPU0RCQVIgKi8KLQkJZWxzZQotCQkJdmFsICY9IH4weDAxOyAvKiAhT1NEQkFSICovCi0JCWJ0ODY2X3dyaXRlKGNsaWVudCwgMHhjYywgdmFsKTsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgaW5wdXQgJWRcbiIsICppYXJnKTsKLQotCQlzd2l0Y2ggKCppYXJnKSB7Ci0JCWNhc2UgMDoKLQkJCWJyZWFrOwotCQljYXNlIDE6Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgRU5DT0RFUl9TRVRfT1VUUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNldCBvdXRwdXQgJWRcbiIsICppYXJnKTsKLQotCQkvKiBub3QgbXVjaCBjaG9pY2Ugb2Ygb3V0cHV0cyAqLwotCQlpZiAoKmlhcmcgIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIEVOQ09ERVJfRU5BQkxFX09VVFBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQkJZW5jb2Rlci0+ZW5hYmxlID0gISEqaWFyZzsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJlbmFibGUgb3V0cHV0ICVkXG4iLCBlbmNvZGVyLT5lbmFibGUpOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIDQ3MTE6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0JCV9fdTggdmFsOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInNxdWFyZSAlZFxuIiwgKmlhcmcpOwotCi0JCXZhbCA9IGVuY29kZXItPnJlZ1sweGRjXTsKLQkJaWYgKCppYXJnKQotCQkJdmFsIHw9IDE7IC8qIFNRVUFSRSAqLwotCQllbHNlCi0JCQl2YWwgJj0gfjE7IC8qICFTUVVBUkUgKi8KLQkJYnQ4NjZfd3JpdGUoY2xpZW50LCAweGRjLCB2YWwpOwotCQlicmVhazsKLQl9Ci0KLQlkZWZhdWx0OgorCS8qIE9ubHkgUEFMIHN1cHBvcnRlZCBieSB0aGlzIGRyaXZlciBhdCB0aGUgbW9tZW50ISAqLworCWlmICghKHN0ZCAmIFY0TDJfU1REX05UU0MpKQogCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg4OCA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGludCBidDg2Nl9zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCit7CisJc3RhdGljIGNvbnN0IF9fdTggaW5pdFtdID0geworCQkweGM4LCAweGNjLCAvKiBDUlNDQUxFICovCisJCTB4Y2EsIDB4OTEsIC8qIENCU0NBTEUgKi8KKwkJMHhjYywgMHgyNCwgLyogWUMxNiB8IE9TRE5VTSAqLworCQkweGRhLCAweDAwLCAvKiAgKi8KKwkJMHhkYywgMHgyNCwgLyogU0VUTU9ERSB8IFBBTCAqLworCQkweGRlLCAweDAyLCAvKiBFQUNUSVZFICovCiAKLUkyQ19DTElFTlRfSU5TTU9EOworCQkvKiBvdmVybGF5IGNvbG9ycyAqLworCQkweDcwLCAweEVCLCAweDkwLCAweDgwLCAweEIwLCAweDgwLCAvKiB3aGl0ZSAqLworCQkweDcyLCAweEEyLCAweDkyLCAweDhFLCAweEIyLCAweDJDLCAvKiB5ZWxsb3cgKi8KKwkJMHg3NCwgMHg4MywgMHg5NCwgMHgyQywgMHhCNCwgMHg5QywgLyogY3lhbiAqLworCQkweDc2LCAweDcwLCAweDk2LCAweDNBLCAweEI2LCAweDQ4LCAvKiBncmVlbiAqLworCQkweDc4LCAweDU0LCAweDk4LCAweEM2LCAweEI4LCAweEI4LCAvKiBtYWdlbnRhICovCisJCTB4N0EsIDB4NDEsIDB4OUEsIDB4RDQsIDB4QkEsIDB4NjQsIC8qIHJlZCAqLworCQkweDdDLCAweDIzLCAweDlDLCAweDcyLCAweEJDLCAweEQ0LCAvKiBibHVlICovCisJCTB4N0UsIDB4MTAsIDB4OUUsIDB4ODAsIDB4QkUsIDB4ODAsIC8qIGJsYWNrICovCisKKwkJMHg2MCwgMHhFQiwgMHg4MCwgMHg4MCwgMHhjMCwgMHg4MCwgLyogd2hpdGUgKi8KKwkJMHg2MiwgMHhBMiwgMHg4MiwgMHg4RSwgMHhjMiwgMHgyQywgLyogeWVsbG93ICovCisJCTB4NjQsIDB4ODMsIDB4ODQsIDB4MkMsIDB4YzQsIDB4OUMsIC8qIGN5YW4gKi8KKwkJMHg2NiwgMHg3MCwgMHg4NiwgMHgzQSwgMHhjNiwgMHg0OCwgLyogZ3JlZW4gKi8KKwkJMHg2OCwgMHg1NCwgMHg4OCwgMHhDNiwgMHhjOCwgMHhCOCwgLyogbWFnZW50YSAqLworCQkweDZBLCAweDQxLCAweDhBLCAweEQ0LCAweGNBLCAweDY0LCAvKiByZWQgKi8KKwkJMHg2QywgMHgyMywgMHg4QywgMHg3MiwgMHhjQywgMHhENCwgLyogYmx1ZSAqLworCQkweDZFLCAweDEwLCAweDhFLCAweDgwLCAweGNFLCAweDgwLCAvKiBibGFjayAqLworCX07CisJc3RydWN0IGJ0ODY2ICplbmNvZGVyID0gdG9fYnQ4NjYoc2QpOworCXU4IHZhbDsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGluaXQpIC8gMjsgaSArPSAyKQorCQlidDg2Nl93cml0ZShlbmNvZGVyLCBpbml0W2ldLCBpbml0W2krMV0pOworCisJdmFsID0gZW5jb2Rlci0+cmVnWzB4ZGNdOworCisJaWYgKHJvdXRlLT5pbnB1dCA9PSAwKQorCQl2YWwgfD0gMHg0MDsgLyogQ0JTV0FQICovCisJZWxzZQorCQl2YWwgJj0gfjB4NDA7IC8qICFDQlNXQVAgKi8KKworCWJ0ODY2X3dyaXRlKGVuY29kZXIsIDB4ZGMsIHZhbCk7CisKKwl2YWwgPSBlbmNvZGVyLT5yZWdbMHhjY107CisJaWYgKHJvdXRlLT5pbnB1dCA9PSAyKQorCQl2YWwgfD0gMHgwMTsgLyogT1NEQkFSICovCisJZWxzZQorCQl2YWwgJj0gfjB4MDE7IC8qICFPU0RCQVIgKi8KKwlidDg2Nl93cml0ZShlbmNvZGVyLCAweGNjLCB2YWwpOworCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic2V0IGlucHV0ICVkXG4iLCByb3V0ZS0+aW5wdXQpOworCisJc3dpdGNoIChyb3V0ZS0+aW5wdXQpIHsKKwljYXNlIDA6CisJY2FzZSAxOgorCWNhc2UgMjoKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCisjaWYgMAorLyogQ29kZSB0byBzZXR1cCBzcXVhcmUgcGl4ZWxzLCBtaWdodCBiZSBvZiBzb21lIHVzZSBpbiB0aGUgZnV0dXJlLAorICAgYnV0IGlzIGN1cnJlbnRseSB1bnVzZWQuICovCisJdmFsID0gZW5jb2Rlci0+cmVnWzB4ZGNdOworCWlmICgqaWFyZykKKwkJdmFsIHw9IDE7IC8qIFNRVUFSRSAqLworCWVsc2UKKwkJdmFsICY9IH4xOyAvKiAhU1FVQVJFICovCisJYnQ4NjZfd3JpdGUoY2xpZW50LCAweGRjLCB2YWwpOworI2VuZGlmCisKK3N0YXRpYyBpbnQgYnQ4NjZfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfQlQ4NjYsIDApOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIGJ0ODY2X2NvcmVfb3BzID0geworCS5nX2NoaXBfaWRlbnQgPSBidDg2Nl9nX2NoaXBfaWRlbnQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBidDg2Nl92aWRlb19vcHMgPSB7CisJLnNfc3RkX291dHB1dCA9IGJ0ODY2X3Nfc3RkX291dHB1dCwKKwkuc19yb3V0aW5nID0gYnQ4NjZfc19yb3V0aW5nLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgYnQ4NjZfb3BzID0geworCS5jb3JlID0gJmJ0ODY2X2NvcmVfb3BzLAorCS52aWRlbyA9ICZidDg2Nl92aWRlb19vcHMsCit9OwogCiBzdGF0aWMgaW50IGJ0ODY2X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IGJ0ODY2ICplbmNvZGVyOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAKIAl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAogCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CkBAIC0yNTMsMjAgKzIxMCwxOCBAQAogCWVuY29kZXIgPSBremFsbG9jKHNpemVvZigqZW5jb2RlciksIEdGUF9LRVJORUwpOwogCWlmIChlbmNvZGVyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCi0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZW5jb2Rlcik7CisJc2QgPSAmZW5jb2Rlci0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJmJ0ODY2X29wcyk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgYnQ4NjZfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0Ja2ZyZWUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwotCXJldHVybiAwOwotfQorCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotc3RhdGljIGludCBidDg2Nl9sZWdhY3lfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotewotCXJldHVybiBhZGFwdGVyLT5pZCA9PSBJMkNfSFdfQl9aUjM2MDY3OworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZSh0b19idDg2NihzZCkpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgYnQ4NjZfaWRbXSA9IHsKQEAgLTI3NywxMCArMjMyLDcgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gImJ0ODY2IiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfQlQ4NjYsCi0JLmNvbW1hbmQgPSBidDg2Nl9jb21tYW5kLAogCS5wcm9iZSA9IGJ0ODY2X3Byb2JlLAogCS5yZW1vdmUgPSBidDg2Nl9yZW1vdmUsCi0JLmxlZ2FjeV9wcm9iZSA9IGJ0ODY2X2xlZ2FjeV9wcm9iZSwKIAkuaWRfdGFibGUgPSBidDg2Nl9pZCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L0tjb25maWcKaW5kZXggY2U3MWU4ZS4uMzA3N2M0NTAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L0tjb25maWcKQEAgLTEwLDcgKzEwLDcgQEAKIAlzZWxlY3QgVklERU9fTVNQMzQwMCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCXNlbGVjdCBWSURFT19UVkFVRElPIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCiAJc2VsZWN0IFZJREVPX1REQTc0MzIgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KLQlzZWxlY3QgVklERU9fVERBOTg3NSBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCXNlbGVjdCBWSURFT19TQUE2NTg4IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCiAJLS0taGVscC0tLQogCSAgU3VwcG9ydCBmb3IgQlQ4NDggYmFzZWQgZnJhbWUgZ3JhYmJlci9vdmVybGF5IGJvYXJkcy4gVGhpcyBpbmNsdWRlcwogCSAgdGhlIE1pcm8sIEhhdXBwYXVnZSBhbmQgU1RCIGJvYXJkcy4gUGxlYXNlIHJlYWQgdGhlIG1hdGVyaWFsIGluCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jCmluZGV4IGQyNGRjYzAuLmI5YzNiYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1jYXJkcy5jCkBAIC03Myw2ICs3MywxMSBAQAogCiBzdGF0aWMgdm9pZCBnZW92aXNpb25fbXV4c2VsKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGludCBpbnB1dCk7CiAKK3N0YXRpYyB2b2lkIHBoeXRlY19tdXhzZWwoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KTsKKworc3RhdGljIHZvaWQgZ3Y4MDBzX211eHNlbChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpOworc3RhdGljIHZvaWQgZ3Y4MDBzX2luaXQoc3RydWN0IGJ0dHYgKmJ0dik7CisKIHN0YXRpYyBpbnQgdGVycmF0ZWNfYWN0aXZlX3JhZGlvX3VwZ3JhZGUoc3RydWN0IGJ0dHYgKmJ0dik7CiBzdGF0aWMgaW50IHRlYTU3NTdfcmVhZChzdHJ1Y3QgYnR0diAqYnR2KTsKIHN0YXRpYyBpbnQgdGVhNTc1N193cml0ZShzdHJ1Y3QgYnR0diAqYnR2LCBpbnQgdmFsdWUpOwpAQCAtOTEsMTIgKzk2LDEwIEBACiBzdGF0aWMgdW5zaWduZWQgaW50IHR1bmVyW0JUVFZfTUFYXSAgPSB7IFsgMCAuLi4gKEJUVFZfTUFYLTEpIF0gPSBVTlNFVCB9Owogc3RhdGljIHVuc2lnbmVkIGludCBzdmhzW0JUVFZfTUFYXSAgID0geyBbIDAgLi4uIChCVFRWX01BWC0xKSBdID0gVU5TRVQgfTsKIHN0YXRpYyB1bnNpZ25lZCBpbnQgcmVtb3RlW0JUVFZfTUFYXSA9IHsgWyAwIC4uLiAoQlRUVl9NQVgtMSkgXSA9IFVOU0VUIH07CitzdGF0aWMgdW5zaWduZWQgaW50IGF1ZGlvZGV2W0JUVFZfTUFYXTsKK3N0YXRpYyB1bnNpZ25lZCBpbnQgc2FhNjU4OFtCVFRWX01BWF07CiBzdGF0aWMgc3RydWN0IGJ0dHYgICptYXN0ZXJbQlRUVl9NQVhdID0geyBbIDAgLi4uIChCVFRWX01BWC0xKSBdID0gTlVMTCB9OwotI2lmZGVmIE1PRFVMRQotc3RhdGljIHVuc2lnbmVkIGludCBhdXRvbG9hZCA9IDE7Ci0jZWxzZQotc3RhdGljIHVuc2lnbmVkIGludCBhdXRvbG9hZDsKLSNlbmRpZgorc3RhdGljIHVuc2lnbmVkIGludCBhdXRvbG9hZCA9IFVOU0VUOwogc3RhdGljIHVuc2lnbmVkIGludCBncGlvbWFzayA9IFVOU0VUOwogc3RhdGljIHVuc2lnbmVkIGludCBhdWRpb2FsbCA9IFVOU0VUOwogc3RhdGljIHVuc2lnbmVkIGludCBhdWRpb211eFs1XSA9IHsgWyAwIC4uLiA0IF0gPSBVTlNFVCB9OwpAQCAtMTE1LDYgKzExOCw3IEBACiBtb2R1bGVfcGFyYW1fYXJyYXkodHVuZXIsICAgIGludCwgTlVMTCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkoc3ZocywgICAgIGludCwgTlVMTCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkocmVtb3RlLCAgIGludCwgTlVMTCwgMDQ0NCk7Cittb2R1bGVfcGFyYW1fYXJyYXkoYXVkaW9kZXYsIGludCwgTlVMTCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkoYXVkaW9tdXgsIGludCwgTlVMTCwgMDQ0NCk7CiAKIE1PRFVMRV9QQVJNX0RFU0ModHJpdG9uMSwic2V0IEVUQkYgcGNpIGNvbmZpZyBiaXQgIgpAQCAtMTI1LDcgKzEyOSwxNCBAQAogTU9EVUxFX1BBUk1fREVTQyhjYXJkLCJzcGVjaWZ5IFRWL2dyYWJiZXIgY2FyZCBtb2RlbCwgc2VlIENBUkRMSVNUIGZpbGUgZm9yIGEgbGlzdCIpOwogTU9EVUxFX1BBUk1fREVTQyhwbGwsInNwZWNpZnkgaW5zdGFsbGVkIGNyeXN0YWwgKDA9bm9uZSwgMjg9MjggTUh6LCAzNT0zNSBNSHopIik7CiBNT0RVTEVfUEFSTV9ERVNDKHR1bmVyLCJzcGVjaWZ5IGluc3RhbGxlZCB0dW5lciB0eXBlIik7Ci1NT0RVTEVfUEFSTV9ERVNDKGF1dG9sb2FkLCJhdXRvbWF0aWNhbGx5IGxvYWQgaTJjIG1vZHVsZXMgbGlrZSB0dW5lci5vLCBkZWZhdWx0IGlzIDEgKHllcykiKTsKK01PRFVMRV9QQVJNX0RFU0MoYXV0b2xvYWQsICJvYnNvbGV0ZSBvcHRpb24sIHBsZWFzZSBkbyBub3QgdXNlIGFueW1vcmUiKTsKK01PRFVMRV9QQVJNX0RFU0MoYXVkaW9kZXYsICJzcGVjaWZ5IGF1ZGlvIGRldmljZTpcbiIKKwkJIlx0XHQtMSA9IG5vIGF1ZGlvXG4iCisJCSJcdFx0IDAgPSBhdXRvZGV0ZWN0IChkZWZhdWx0KVxuIgorCQkiXHRcdCAxID0gbXNwMzQwMFxuIgorCQkiXHRcdCAyID0gdGRhNzQzMlxuIgorCQkiXHRcdCAzID0gdHZhdWRpbyIpOworTU9EVUxFX1BBUk1fREVTQyhzYWE2NTg4LCAiaWYgMSwgdGhlbiBsb2FkIHRoZSBzYWE2NTg4IFJEUyBtb2R1bGUsIGRlZmF1bHQgKDApIGlzIHRvIHVzZSB0aGUgY2FyZCBkZWZpbml0aW9uLiIpOwogTU9EVUxFX1BBUk1fREVTQyhub19vdmVybGF5LCJhbGxvdyBvdmVycmlkZSBvdmVybGF5IGRlZmF1bHQgKDAgZGlzYWJsZXMsIDEgZW5hYmxlcykiCiAJCSIgW3NvbWUgVklBL1NJUyBjaGlwc2V0cyBhcmUga25vd24gdG8gaGF2ZSBwcm9ibGVtIHdpdGggb3ZlcmxheV0iKTsKIApAQCAtMjQ2LDYgKzI1NywxMCBAQAogCXsgMHhhMTgyZmYwZCwgQlRUVl9CT0FSRF9JVkMxMjAsICAgICAgICAiSVZDLTEyMEciIH0sCiAJeyAweGExODJmZjBlLCBCVFRWX0JPQVJEX0lWQzEyMCwgICAgICAgICJJVkMtMTIwRyIgfSwKIAl7IDB4YTE4MmZmMGYsIEJUVFZfQk9BUkRfSVZDMTIwLCAgICAgICAgIklWQy0xMjBHIiB9LAorCXsgMHhmMDUwMDAwMCwgQlRUVl9CT0FSRF9JVkNFODc4NCwgICAgICAiSVZDRS04Nzg0IiB9LAorCXsgMHhmMDUwMDAwMSwgQlRUVl9CT0FSRF9JVkNFODc4NCwgICAgICAiSVZDRS04Nzg0IiB9LAorCXsgMHhmMDUwMDAwMiwgQlRUVl9CT0FSRF9JVkNFODc4NCwgICAgICAiSVZDRS04Nzg0IiB9LAorCXsgMHhmMDUwMDAwMywgQlRUVl9CT0FSRF9JVkNFODc4NCwgICAgICAiSVZDRS04Nzg0IiB9LAogCiAJeyAweDQxNDI0MzQ0LCBCVFRWX0JPQVJEX0dSQU5EVEVDLCAgICAgICJHcmFuZFRlYyBNdWx0aSBDYXB0dXJlIiB9LAogCXsgMHgwMTAyMDMwNCwgQlRUVl9CT0FSRF9YR1VBUkQsICAgICAgICAiR3JhbmR0ZWMgR3JhbmQgWC1HdWFyZCIgfSwKQEAgLTI4OSw2ICszMDQsOCBAQAogCS8qIER1cGxpY2F0ZSBQQ0kgSUQsIHJlY29uZmlndXJlIGZvciB0aGlzIGJvYXJkIGR1cmluZyB0aGUgZWVwcm9tIHJlYWQuCiAJKiB7IDB4MTNlYjAwNzAsIEJUVFZfQk9BUkRfSEFVUFBBVUdFX0lNUEFDVFZDQiwgICJIYXVwcGF1Z2UgSW1wYWN0VkNCIiB9LCAqLwogCisJeyAweDEwOWUwMzZlLCBCVFRWX0JPQVJEX0NPTkNFUFRST05JQ19DVFZGTUkyLAkiQ29uY2VwdHJvbmljIENUVkZNaSB2MiJ9LAorCiAJLyogRFZCIGNhcmRzICh1c2luZyBwY2kgZnVuY3Rpb24gLjEgZm9yIG1wZWcgZGF0YSB4ZmVyKSAqLwogCXsgMHgwMDFjMTFiZCwgQlRUVl9CT0FSRF9QSU5OQUNMRVNBVCwgICAiUGlubmFjbGUgUENUViBTYXQiIH0sCiAJeyAweDAxMDEwMDcxLCBCVFRWX0JPQVJEX05FQlVMQV9ESUdJVFYsICJOZWJ1bGEgRWxlY3Ryb25pY3MgRGlnaVRWIiB9LApAQCAtMzA1LDYgKzMyMiwyMCBAQAogCXsgMHhkMjAwZGJjMCwgQlRUVl9CT0FSRF9EVklDT19GVVNJT05IRFRWXzIsCSJEVmlDTyBGdXNpb25IRFRWIDIiIH0sCiAJeyAweDc2M2MwMDhhLCBCVFRWX0JPQVJEX0dFT1ZJU0lPTl9HVjYwMCwJIkdlb1Zpc2lvbiBHVi02MDAiIH0sCiAJeyAweDE4MDExMDAwLCBCVFRWX0JPQVJEX0VOTFRWX0ZNXzIsCSJFbmNvcmUgRU5MIFRWLUZNLTIiIH0sCisJeyAweDc2M2Q4MDBhLCBCVFRWX0JPQVJEX0dFT1ZJU0lPTl9HVjgwMFMsICJHZW9WaXNpb24gR1YtODAwKFMpIChtYXN0ZXIpIiB9LAorCXsgMHg3NjNkODAwYiwgQlRUVl9CT0FSRF9HRU9WSVNJT05fR1Y4MDBTX1NMLAkiR2VvVmlzaW9uIEdWLTgwMChTKSAoc2xhdmUpIiB9LAorCXsgMHg3NjNkODAwYywgQlRUVl9CT0FSRF9HRU9WSVNJT05fR1Y4MDBTX1NMLAkiR2VvVmlzaW9uIEdWLTgwMChTKSAoc2xhdmUpIiB9LAorCXsgMHg3NjNkODAwZCwgQlRUVl9CT0FSRF9HRU9WSVNJT05fR1Y4MDBTX1NMLAkiR2VvVmlzaW9uIEdWLTgwMChTKSAoc2xhdmUpIiB9LAorCisJeyAweDE1NDAxODMwLCBCVFRWX0JPQVJEX1BWMTgzLCAgICAgICAgICJQcm92aWRlbyBQVjE4My0xIiB9LAorCXsgMHgxNTQwMTgzMSwgQlRUVl9CT0FSRF9QVjE4MywgICAgICAgICAiUHJvdmlkZW8gUFYxODMtMiIgfSwKKwl7IDB4MTU0MDE4MzIsIEJUVFZfQk9BUkRfUFYxODMsICAgICAgICAgIlByb3ZpZGVvIFBWMTgzLTMiIH0sCisJeyAweDE1NDAxODMzLCBCVFRWX0JPQVJEX1BWMTgzLCAgICAgICAgICJQcm92aWRlbyBQVjE4My00IiB9LAorCXsgMHgxNTQwMTgzNCwgQlRUVl9CT0FSRF9QVjE4MywgICAgICAgICAiUHJvdmlkZW8gUFYxODMtNSIgfSwKKwl7IDB4MTU0MDE4MzUsIEJUVFZfQk9BUkRfUFYxODMsICAgICAgICAgIlByb3ZpZGVvIFBWMTgzLTYiIH0sCisJeyAweDE1NDAxODM2LCBCVFRWX0JPQVJEX1BWMTgzLCAgICAgICAgICJQcm92aWRlbyBQVjE4My03IiB9LAorCXsgMHgxNTQwMTgzNywgQlRUVl9CT0FSRF9QVjE4MywgICAgICAgICAiUHJvdmlkZW8gUFYxODMtOCIgfSwKKwogCXsgMCwgLTEsIE5VTEwgfQogfTsKIApAQCAtMzE2LDU5ICszNDcsNTAgQEAKIAlbQlRUVl9CT0FSRF9VTktOT1dOXSA9IHsKIAkJLm5hbWUJCT0gIiAqKiogVU5LTk9XTi9HRU5FUklDICoqKiAiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAogCQkuc3ZocwkJPSAyLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMCB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAwKSwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfTUlST10gPSB7CiAJCS5uYW1lCQk9ICJNSVJPIFBDVFYiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAxNSwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMiwgMCwgMCwgMCB9LAogCQkuZ3Bpb211dGUgCT0gMTAsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfSEFVUFBBVUdFXSA9IHsKIAkJLm5hbWUJCT0gIkhhdXBwYXVnZSAoYnQ4NDgpIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gNywKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCwgMSwgMiwgMyB9LAogCQkuZ3Bpb211dGUgCT0gNCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9TVEJdID0gewogCQkubmFtZQkJPSAiU1RCLCBHYXRld2F5IFAvTiA2MDAwNjk5IChidDg0OCkiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSA3LAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyA0LCAwLCAyLCAzIH0sCiAJCS5ncGlvbXV0ZSAJPSAxLAogCQkubm9fbXNwMzR4eAk9IDEsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLmhhc19yYWRpbyAgICAgID0gMSwKIAl9LApAQCAtMzc3LDIwMiArMzk5LDE3NyBAQAogCVtCVFRWX0JPQVJEX0lOVEVMXSA9IHsKIAkJLm5hbWUJCT0gIkludGVsIENyZWF0ZSBhbmQgU2hhcmUgUENJLyBTbWFydCBWaWRlbyBSZWNvcmRlciBJSUkiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDAsCi0JCS50dW5lcgkJPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCB9LAogCQkubmVlZHNfdHZhdWRpbwk9IDAsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9ESUFNT05EXSA9IHsKIAkJLm5hbWUJCT0gIkRpYW1vbmQgRFRWMjAwMCIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDMsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAwIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkuZ3Bpb211eCAJPSB7IDAsIDEsIDAsIDEgfSwKIAkJLmdwaW9tdXRlIAk9IDMsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfQVZFUk1FRElBXSA9IHsKIAkJLm5hbWUJCT0gIkFWZXJNZWRpYSBUVlBob25lIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMywKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbWFzawk9IDB4MGYsCiAJCS5ncGlvbXV4IAk9IHsgMHgwYywgMHgwNCwgMHgwOCwgMHgwNCB9LAogCQkvKiAgICAgICAgICAgICAgICAweDA0IGZvciBzb21lIGNhcmRzID8/ICovCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuYXVkaW9fbW9kZV9ncGlvPSBhdmVybWVkaWFfdHZwaG9uZV9hdWRpbywKIAkJLmhhc19yZW1vdGUgICAgID0gMSwKIAl9LAogCVtCVFRWX0JPQVJEX01BVFJJWF9WSVNJT05dID0gewogCQkubmFtZQkJPSAiTUFUUklYLVZpc2lvbiBNVi1EZWx0YSIsCiAJCS52aWRlb19pbnB1dHMJPSA1LAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAzLAogCQkuZ3Bpb21hc2sJPSAwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMCwgMCB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAwLCAwKSwKIAkJLmdwaW9tdXggCT0geyAwIH0sCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKLQkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCiAJLyogLS0tLSBjYXJkIDB4MDggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCVtCVFRWX0JPQVJEX0ZMWVZJREVPXSA9IHsKIAkJLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIElJIChCdDg0OCkgTFIyNiAvIE1BWEkgVFYgVmlkZW8gUENJMiBMUjI2IiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHhjMDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDAsIDB4YzAwLCAweDgwMCwgMHg0MDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4YzAwLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9UVVJCT1RWXSA9IHsKIAkJLm5hbWUJCT0gIklNUy9JWG1pY3JvIFR1cmJvVFYiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAzLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAxLCAxLCAyLCAzIH0sCiAJCS5uZWVkc190dmF1ZGlvCT0gMCwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfVEVNSUNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9IQVVQUEFVR0U4NzhdID0gewogCQkubmFtZQkJPSAiSGF1cHBhdWdlIChidDg3OCkiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDBmLCAvKiBvbGQ6IDcgKi8KLQkJLm11eHNlbAkJPSB7IDIsIDAsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMCwgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCwgMSwgMiwgMyB9LAogCQkuZ3Bpb211dGUgCT0gNCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfTUlST1BST10gPSB7CiAJCS5uYW1lCQk9ICJNSVJPIFBDVFYgcHJvIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHgzMDE0ZiwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMHgyMDAwMSwweDEwMDAxLCAwLCAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAxMCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAogCS8qIC0tLS0gY2FyZCAweDBjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlbQlRUVl9CT0FSRF9BRFNURUNIX1RWXSA9IHsKIAkJLm5hbWUJCT0gIkFEUyBUZWNobm9sb2dpZXMgQ2hhbm5lbCBTdXJmZXIgVFYgKGJ0ODQ4KSIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDE1LAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAxMywgMTQsIDExLCA3IH0sCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfQVZFUk1FRElBOThdID0gewogCQkubmFtZQkJPSAiQVZlck1lZGlhIFRWQ2FwdHVyZSA5OCIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gNCwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDQsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDE1LAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAxMywgMTQsIDExLCA3IH0sCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLm1zcDM0eHhfYWx0ICAgID0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmF1ZGlvX21vZGVfZ3Bpbz0gYXZlcm1lZGlhX3R2X3N0ZXJlb19hdWRpbywKIAkJLm5vX2dwaW9pcnEgICAgID0gMSwKIAl9LAogCVtCVFRWX0JPQVJEX1ZIWF0gPSB7CiAJCS5uYW1lCQk9ICJBaW1zbGFiIFZpZGVvIEhpZ2h3YXkgWHRyZW1lIChWSFgpIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gNywKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCwgMiwgMSwgMyB9LCAvKiBvbGQ6IHswLCAxLCAyLCAzLCA0fSAqLwogCQkuZ3Bpb211dGUgCT0gNCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfWk9MVFJJWF0gPSB7CiAJCS5uYW1lCQk9ICJab2x0cml4IFRWLU1heCIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDE1LAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAwLCAwLCAxLCAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAxMCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAogCS8qIC0tLS0gY2FyZCAweDEwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlbQlRUVl9CT0FSRF9QSVhWSUVXUExBWVRWXSA9IHsKIAkJLm5hbWUJCT0gIlByb2xpbmsgUGl4ZWx2aWV3IFBsYXlUViAoYnQ4NzgpIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHgwMWZlMDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkvKiAyMDAzLTEwLTIwIGJ5ICJBbnRvbiBBLiBBcmFwb3YiIDxhcmFwb3ZAbWFpbC5ydT4gKi8KIAkJLmdwaW9tdXggICAgICAgID0geyAweDAwMWUwMCwgMCwgMHgwMTgwMDAsIDB4MDE0MDAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDAwMjAwMCwKQEAgLTU4MCwxOTQgKzU3NywxNzAgQEAKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9XSU5WSUVXXzYwMV0gPSB7CiAJCS5uYW1lCQk9ICJMZWFkdGVrIFdpblZpZXcgNjAxIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHg4MzAwZjgsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxLDAgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSwgMCksCiAJCS5ncGlvbXV4IAk9IHsgMHg0ZmEwMDcsMHhjZmEwMDcsMHhjZmEwMDcsMHhjZmEwMDcgfSwKIAkJLmdwaW9tdXRlIAk9IDB4Y2ZhMDA3LAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnZvbHVtZV9ncGlvCT0gd2ludmlld192b2x1bWUsCiAJCS5oYXNfcmFkaW8JPSAxLAogCX0sCiAJW0JUVFZfQk9BUkRfQVZFQ19JTlRFUkNBUF0gPSB7CiAJCS5uYW1lCQk9ICJBVkVDIEludGVyY2FwdHVyZSIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMiwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDIsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDEsIDAsIDAsIDAgfSwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9MSUZFX0ZMWUtJVF0gPSB7CiAJCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyBJSSBFWiAvRmx5S2l0IExSMzggQnQ4NDggKGNhcHR1cmUgb25seSkiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSBVTlNFVCwKLQkJLnN2aHMJCT0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCisJCS5zdmhzCQk9IE5PX1NWSFMsCiAJCS5ncGlvbWFzawk9IDB4OGRmZjAwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAwIH0sCiAJCS5ub19tc3AzNHh4CT0gMSwKLQkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCiAJLyogLS0tLSBjYXJkIDB4MTQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCVtCVFRWX0JPQVJEX0NFSV9SQUZGTEVTXSA9IHsKIAkJLm5hbWUJCT0gIkNFSSBSYWZmbGVzIENhcmQiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDMsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAzLCAqLwogCQkuc3ZocwkJPSAyLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfQ09ORkVSRU5DRVRWXSA9IHsKIAkJLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIDk4LyBMdWNreSBTdGFyIEltYWdlIFdvcmxkIENvbmZlcmVuY2VUViBMUjUwIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAyLCAgLyogdHVuZXIsIGxpbmUgaW4gKi8KLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDIsICB0dW5lciwgbGluZSBpbiAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDE4MDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDAsIDB4ODAwLCAweDEwMDAsIDB4MTAwMCB9LAogCQkuZ3Bpb211dGUgCT0gMHgxODAwLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTF9JLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9QSE9FQkVfVFZNQVNdID0gewogCQkubmFtZQkJPSAiQXNrZXkgQ1BIMDUwLyBQaG9lYmUgVHYgTWFzdGVyICsgRk0iLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweGMwMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCwgMSwgMHg4MDAsIDB4NDAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweGMwMCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfTU9EVEVDXzIwNV0gPSB7CiAJCS5uYW1lCQk9ICJNb2R1bGFyIFRlY2hub2xvZ3kgTU0yMDEvTU0yMDIvTU0yMDUvTU0yMTAvTU0yMTUgUENUViwgYnQ4NzgiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAotCQkuc3ZocwkJPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KKwkJLnN2aHMJCT0gTk9fU1ZIUywKKwkJLmhhc19kaWdfaW4JPSAxLAogCQkuZ3Bpb21hc2sJPSA3LAotCQkubXV4c2VsCQk9IHsgMiwgMywgLTEgfSwKLQkJLmRpZ2l0YWxfbW9kZSAgID0gRElHSVRBTF9NT0RFX0NBTUVSQSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMCksIC8qIGlucHV0IDIgaXMgZGlnaXRhbCAqLworCQkvKiAuZGlnaXRhbF9tb2RlPSBESUdJVEFMX01PREVfQ0FNRVJBLCAqLwogCQkuZ3Bpb211eCAJPSB7IDAsIDAsIDAsIDAgfSwKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FMUFNfVFNCQjVfUEFMX0ksCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCiAJLyogLS0tLSBjYXJkIDB4MTggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCVtCVFRWX0JPQVJEX01BR0lDVFZJRVcwNjFdID0gewogCQkubmFtZQkJPSAiQXNrZXkgQ1BIMDVYLzA2WCAoYnQ4NzgpIFttYW55IHZlbmRvcnNdIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHhlMDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7MHg0MDAsIDB4NDAwLCAweDQwMCwgMHg0MDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4YzAwLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5oYXNfcmVtb3RlICAgICA9IDEsCiAJfSwKIAlbQlRUVl9CT0FSRF9WT0JJU19CT09TVEFSXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIlRlcnJhdGVjIFRlcnJhVFYrIFZlcnNpb24gMS4wIChCdDg0OCkvIFRlcnJhIFRWYWx1ZSBWZXJzaW9uIDEuMC8gVm9iaXMgVFYtQm9vc3RhciIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MWYwZmZmLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAweDIwMDAwLCAweDMwMDAwLCAweDEwMDAwLCAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDQwMDAwLAogCQkubmVlZHNfdHZhdWRpbwk9IDAsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmF1ZGlvX21vZGVfZ3Bpbz0gdGVycmF0dl9hdWRpbywKIAl9LAogCVtCVFRWX0JPQVJEX0hBVVBQQVVHX1dDQU1dID0gewogCQkubmFtZQkJPSAiSGF1cHBhdWdlIFdpbkNhbSBuZXdlciAoYnQ4NzgpIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMywKIAkJLmdwaW9tYXNrCT0gNywKLQkJLm11eHNlbAkJPSB7IDIsIDAsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMCwgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCwgMSwgMiwgMyB9LAogCQkuZ3Bpb211dGUgCT0gNCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9NQVhJXSA9IHsKIAkJLm5hbWUJCT0gIkxpZmV2aWV3IEZseVZpZGVvIDk4LyBNQVhJIFRWIFZpZGVvIFBDSTIgTFI1MCIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMiwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDIsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4MTgwMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCwgMHg4MDAsIDB4MTAwMCwgMHgxMDAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDE4MDAsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1NFQ0FNLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAogCS8qIC0tLS0gY2FyZCAweDFjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlbQlRUVl9CT0FSRF9URVJSQVRWXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIlRlcnJhdGVjIFRlcnJhVFYrIFZlcnNpb24gMS4xIChidDg3OCkiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDFmMGZmZiwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMHgyMDAwMCwgMHgzMDAwMCwgMHgxMDAwMCwgMHgwMDAwMCB9LAogCQkuZ3Bpb211dGUgCT0gMHg0MDAwMCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAwLAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5hdWRpb19tb2RlX2dwaW89IHRlcnJhdHZfYXVkaW8sCiAJCS8qIEdQSU8gd2lyaW5nOgogCQlFeHRlcm5hbCAyMCBwaW4gY29ubmVjdG9yIChmb3IgQWN0aXZlIFJhZGlvIFVwZ3JhZGUgYm9hcmQpCkBAIC04MDUsODcgKzc3OCw3NyBAQAogCQkvKiBKYW5uaWsgRnJpdHNjaCA8amFubmlrQHRlY2hmYWsudW5pLWJpZWxlZmVsZC5kZT4gKi8KIAkJLm5hbWUJCT0gIkltYWdlbmF0aW9uIFBYQzIwMCIsCiAJCS52aWRlb19pbnB1dHMJPSA1LAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAxLCAvKiB3YXM6IDQgKi8KIAkJLmdwaW9tYXNrCT0gMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDAsIDB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAwLCAwKSwKIAkJLmdwaW9tdXggCT0geyAwIH0sCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKLQkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLm11eHNlbF9ob29rICAgID0gUFhDMjAwX211eHNlbCwKIAogCX0sCiAJW0JUVFZfQk9BUkRfRkxZVklERU9fOThdID0gewogCQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gOTggTFI1MCIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4MTgwMCwgIC8qIDB4OGRmZTAwICovCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDAsIDB4MDgwMCwgMHgxMDAwLCAweDEwMDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4MTgwMCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9JUFJPVFZdID0gewogCQkubmFtZQkJPSAiRm9ybWFjIGlQcm9UViwgRm9ybWFjIFByb1RWIEkgKGJ0ODQ4KSIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDMsCiAJCS5ncGlvbWFzawk9IDEsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDEsIDAsIDAsIDAgfSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAogCS8qIC0tLS0gY2FyZCAweDIwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlbQlRUVl9CT0FSRF9JTlRFTF9DX1NfUENJXSA9IHsKIAkJLm5hbWUJCT0gIkludGVsIENyZWF0ZSBhbmQgU2hhcmUgUENJLyBTbWFydCBWaWRlbyBSZWNvcmRlciBJSUkiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDAsCi0JCS50dW5lcgkJPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCB9LAogCQkubmVlZHNfdHZhdWRpbwk9IDAsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9URVJSQVRWQUxVRV0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJUZXJyYXRlYyBUZXJyYVRWYWx1ZSBWZXJzaW9uIEJ0ODc4IiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHhmZmZmMDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDB4NTAwLCAwLCAweDMwMCwgMHg5MDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4OTAwLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9XSU5GQVNUMjAwMF0gPSB7CiAJCS5uYW1lCQk9ICJMZWFkdGVrIFdpbkZhc3QgMjAwMC8gV2luRmFzdCAyMDAwIFhQIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEsIDAgfSwgLyogVFYsIENWaWQsIFNWaWQsIENWaWQgb3ZlciBTVmlkIGNvbm5lY3RvciAqLworCQkvKiBUViwgQ1ZpZCwgU1ZpZCwgQ1ZpZCBvdmVyIFNWaWQgY29ubmVjdG9yICovCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEsIDApLAogCQkvKiBBbGV4YW5kZXIgVmFyYWtpbiA8YXZhcmFraW5AaG90bWFpbC5jb20+IFtzdGVyZW8gdmVyc2lvbl0gKi8KIAkJLmdwaW9tYXNrCT0gMHhiMzMwMDAsCiAJCS5ncGlvbXV4IAk9IHsgMHgxMjIwMDAsMHgxMDAwLDB4MDAwMCwweDYyMDAwMCB9LApAQCAtOTA2LDIxNyArODY5LDE5MSBAQAogCQkuaGFzX3JhZGlvCT0gMSwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwgLyogZGVmYXVsdCBmb3Igbm93LCBncGlvIHJlYWRzIEJGRkYwNiBmb3IgUGFsIGJnK2RrICovCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmF1ZGlvX21vZGVfZ3Bpbz0gd2luZmFzdDIwMDBfYXVkaW8sCiAJCS5oYXNfcmVtb3RlICAgICA9IDEsCiAJfSwKIAlbQlRUVl9CT0FSRF9DSFJPTk9TX1ZTMl0gPSB7CiAJCS5uYW1lCQk9ICJMaWZldmlldyBGbHlWaWRlbyA5OCBMUjUwIC8gQ2hyb25vcyBWaWRlbyBTaHV0dGxlIElJIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAzLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMywgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHgxODAwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAwLCAweDgwMCwgMHgxMDAwLCAweDEwMDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4MTgwMCwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCiAJLyogLS0tLSBjYXJkIDB4MjQgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCVtCVFRWX0JPQVJEX1RZUEhPT05fVFZJRVddID0gewogCQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gOThGTSBMUjUwIC8gVHlwaG9vbiBUVmlldyBUVi9GTSBUdW5lciIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMywKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDMsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4MTgwMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCwgMHg4MDAsIDB4MTAwMCwgMHgxMDAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDE4MDAsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5oYXNfcmFkaW8JPSAxLAogCX0sCiAJW0JUVFZfQk9BUkRfUFhFTFZXUExUVlBST10gPSB7CiAJCS5uYW1lCQk9ICJQcm9saW5rIFBpeGVsVmlldyBQbGF5VFYgcHJvIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHhmZiwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMHgyMSwgMHgyMCwgMHgyNCwgMHgyYyB9LAogCQkuZ3Bpb211dGUgCT0gMHgyOSwKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfTUFHSUNUVklFVzA2M10gPSB7CiAJCS5uYW1lCQk9ICJBc2tleSBDUEgwNlggVFZpZXc5OSIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4NTUxZTAwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMCB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAwKSwKIAkJLmdwaW9tdXggCT0geyAweDU1MTQwMCwgMHg1NTEyMDAsIDAsIDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4NTUxYzAwLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMX0ksCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmhhc19yZW1vdGUgICAgID0gMSwKIAl9LAogCVtCVFRWX0JPQVJEX1BJTk5BQ0xFXSA9IHsKIAkJLm5hbWUJCT0gIlBpbm5hY2xlIFBDVFYgU3R1ZGlvL1JhdmUiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDAzMDAwRiwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMiwgMHhkMDAwMSwgMCwgMCB9LAogCQkuZ3Bpb211dGUgCT0gMSwKIAkJLm5lZWRzX3R2YXVkaW8JPSAwLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAKIAkvKiAtLS0tIGNhcmQgMHgyOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJW0JUVFZfQk9BUkRfU1RCMl0gPSB7CiAJCS5uYW1lCQk9ICJTVEIgVFYgUENJIEZNLCBHYXRld2F5IFAvTiA2MDAwNzA0IChidDg3OCksIDNEZnggVm9vZG9vVFYgMTAwIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gNywKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgNCwgMCwgMiwgMyB9LAogCQkuZ3Bpb211dGUgCT0gMSwKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfTlRTQywKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS5oYXNfcmFkaW8gICAgICA9IDEsCiAJfSwKIAlbQlRUVl9CT0FSRF9BVlBIT05FOThdID0gewogCQkubmFtZQkJPSAiQVZlck1lZGlhIFRWUGhvbmUgOTgiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDQsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSA0LCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAxNSwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMTMsIDQsIDExLCA3IH0sCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmhhc19yYWRpbwk9IDEsCiAJCS5hdWRpb19tb2RlX2dwaW89IGF2ZXJtZWRpYV90dnBob25lX2F1ZGlvLAogCX0sCiAJW0JUVFZfQk9BUkRfUFY5NTFdID0gewogCQkubmFtZQkJPSAiUHJvVmlkZW8gUFY5NTEiLCAvKiBwaWMxNmM1NCAqLwogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMX0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDAsIDAsIDAsIDB9LAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUxfSSwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfT05BSVJfVFZdID0gewogCQkubmFtZQkJPSAiTGl0dGxlIE9uQWlyIFRWIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHhlMDBiLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAweGZmOWZmNiwgMHhmZjlmZjYsIDB4ZmYxZmY3LCAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweGZmM2ZmYywKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAogCS8qIC0tLS0gY2FyZCAweDJjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlbQlRUVl9CT0FSRF9TSUdNQV9UVklJX0ZNXSA9IHsKIAkJLm5hbWUJCT0gIlNpZ21hIFRWSUktRk0iLAogCQkudmlkZW9faW5wdXRzCT0gMiwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAotCQkuc3ZocwkJPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KKwkJLnN2aHMJCT0gTk9fU1ZIUywKIAkJLmdwaW9tYXNrCT0gMywKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMSwgMSwgMCwgMiB9LAogCQkuZ3Bpb211dGUgCT0gMywKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkucGxsCQk9IFBMTF9OT05FLAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9NQVRSSVhfVklTSU9OMl0gPSB7CiAJCS5uYW1lCQk9ICJNQVRSSVgtVmlzaW9uIE1WLURlbHRhIDIiLAogCQkudmlkZW9faW5wdXRzCT0gNSwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMywKIAkJLmdwaW9tYXNrCT0gMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDAsIDAgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMCwgMCksCiAJCS5ncGlvbXV4IAk9IHsgMCB9LAogCQkubm9fbXNwMzR4eAk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAotCQkudHVuZXJfdHlwZQk9IFVOU0VULAorCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfWk9MVFJJWF9HRU5JRV0gPSB7CiAJCS5uYW1lCQk9ICJab2x0cml4IEdlbmllIFRWL0ZNIiwKIAkJLnZpZGVvX2lucHV0cwk9IDMsCi0JCS5hdWRpb19pbnB1dHMJPSAxLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHhiY2YwM2YsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDB4YmM4MDNmLCAweGJjOTAzZiwgMHhiY2IwM2YsIDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4YmNiMDNmLAogCQkubm9fbXNwMzR4eAk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1RFTUlDXzQwMzlGUjVfTlRTQywKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfVEVSUkFUVlJBRElPXSA9IHsKIAkJLm5hbWUJCT0gIlRlcnJhdGVjIFRWL1JhZGlvKyIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4NzAwMDAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDB4MjAwMDAsIDB4MzAwMDAsIDB4MTAwMDAsIDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4NDAwMDAsCiAJCS5uZWVkc190dmF1ZGlvCT0gMSwKQEAgLTExMjQsNyArMTA2MSw2IEBACiAJCS5wbGwJCT0gUExMXzM1LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMX0ksCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmhhc19yYWRpbwk9IDEsCiAJfSwKIApAQCAtMTEzMiw1MSArMTA2OCw0NiBAQAogCVtCVFRWX0JPQVJEX0RZTkFMSU5LXSA9IHsKIAkJLm5hbWUJCT0gIkFza2V5IENQSDAzeC8gRHluYWxpbmsgTWFnaWMgVFZpZXciLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAxNSwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsyLDAsMCwwIH0sCiAJCS5ncGlvbXV0ZSAJPSAxLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9HVkJDVFYzUENJXSA9IHsKIAkJLm5hbWUJCT0gIklPREFUQSBHVi1CQ1RWMy9QQ0kiLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDAxMGYwMCwKLQkJLm11eHNlbAkJPSB7MiwgMywgMCwgMCB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAwLCAwKSwKIAkJLmdwaW9tdXggCT0gezB4MTAwMDAsIDAsIDB4MTAwMDAsIDAgfSwKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BTFBTX1RTSEM2X05UU0MsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmF1ZGlvX21vZGVfZ3Bpbz0gZ3ZiY3R2M3BjaV9hdWRpbywKIAl9LAogCVtCVFRWX0JPQVJEX1BYRUxWV1BMVFZQQUtdID0gewogCQkubmFtZQkJPSAiUHJvbGluayBQVi1CVDg3OFArNEUgLyBQaXhlbFZpZXcgUGxheVRWIFBBSyAvIExlbmNvIE1YVFYtOTU3OCBDUCIsCiAJCS52aWRlb19pbnB1dHMJPSA1LAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDMsCisJCS5oYXNfZGlnX2luCT0gMSwKIAkJLmdwaW9tYXNrCT0gMHhBQTAwMDAsCi0JCS5tdXhzZWwJCT0geyAyLDMsMSwxLC0xIH0sCi0JCS5kaWdpdGFsX21vZGUgICA9IERJR0lUQUxfTU9ERV9DQU1FUkEsCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEsIDApLCAvKiBpbiA0IGlzIGRpZ2l0YWwgKi8KKwkJLyogLmRpZ2l0YWxfbW9kZT0gRElHSVRBTF9NT0RFX0NBTUVSQSwgKi8KIAkJLmdwaW9tdXggCT0geyAweDIwMDAwLCAwLCAweDgwMDAwLCAweDgwMDAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweGE4MDAwLAogCQkubm9fbXNwMzR4eAk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMX0ksCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmhhc19yZW1vdGUJPSAxLAogCQkvKiBHUElPIHdpcmluZzogKGRpZmZlcmVudCBmcm9tIFJldi40QyAhKQogCQkJR1BJTzE3OiBVNC5BMCAoZmlyc3QgaGVmNDA1MmJ0KQpAQCAtMTE5MSwxNyArMTEyMiwxNSBAQAogCVtCVFRWX0JPQVJEX0VBR0xFXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIkVhZ2xlIFdpcmVsZXNzIENhcHJpY29ybjIgKGJ0ODc4QSkiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSA3LAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDAsIDEsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDAsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDEsIDIsIDMgfSwKIAkJLmdwaW9tdXRlIAk9IDQsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQgLyogVFVORVJfQUxQU19UTURIMl9OVFNDICovLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAogCS8qIC0tLS0gY2FyZCAweDM0IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTEyMDksMTEgKzExMzgsMTAgQEAKIAkJLyogRGF2aWQgSMOkcmRlbWFuIDxkYXZpZEAyZ2VuLmNvbT4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIlBpbm5hY2xlIFBDVFYgU3R1ZGlvIFBybyIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDMsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDMwMDBGLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAxLCAweGQwMDAxLCAwLCAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAxMCwKIAkJCQkvKiBzb3VuZCBwYXRoICg1IHNvdXJjZXMpOgpAQCAtMTIyOSwyNSArMTE1NywyMiBAQAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9UVklFV19SRFNfRk1dID0gewogCQkvKiBDbGFhcyBMYW5nYmVobiA8Y2xhYXNAYmlnZm9vdC5jb20+LAogCQlTdmVuIEdyb3Roa2xhZ3MgPHN2ZW5AdXBiLmRlPiAqLwogCQkubmFtZQkJPSAiVHlwaG9vbiBUVmlldyBSRFMgKyBGTSBTdGVyZW8gLyBLTkMxIFRWIFN0YXRpb24gUkRTIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAzLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMywgKi8KIAkJLnN2aHMJCT0gMiwKIAkJLmdwaW9tYXNrCT0gMHgxYywKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMCwgMCwgMHgxMCwgOCB9LAogCQkuZ3Bpb211dGUgCT0gNCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9QSElMSVBTX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuaGFzX3JhZGlvCT0gMSwKIAl9LAogCVtCVFRWX0JPQVJEX0xJRkVURUNfOTQxNV0gPSB7CkBAIC0xMjU4LDExICsxMTgzLDEwIEBACiAJCQlvcHRpb25zIHR1bmVyIHR5cGU9NSAqLwogCQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gMjAwMCAvRmx5VmlkZW8gQTIvIExpZmV0ZWMgTFQgOTQxNSBUViBbTFI5MF0iLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDE4ZTAsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAJPSB7IDB4MDAwMCwweDA4MDAsMHgxMDAwLDB4MTAwMCB9LAogCQkuZ3Bpb211dGUgCT0gMHgxOGUwLAogCQkJLyogRm9yIGNhcmRzIHdpdGggdGRhOTgyMC90ZGE5ODIxOgpAQCAtMTI3MiwyNSArMTE5NiwyMiBAQAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfQkVTVEJVWV9FQVNZVFZdID0gewogCQkvKiBNaWd1ZWwgQW5nZWwgQWx2YXJleiA8bWFhY3J1ekBuYXZlZ2FsaWEuY29tPgogCQlvbGQgRWFzeSBUViBCVDg0OCB2ZXJzaW9uIChtb2RlbCBDUEgwMzEpICovCiAJCS5uYW1lICAgICAgICAgICA9ICJBc2tleSBDUEgwMzEvIEJFU1RCVVkgRWFzeSBUViIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweEYsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMCksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMiwgMCwgMCwgMCB9LAogCQkuZ3Bpb211dGUgCT0gMTAsCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1RFTUlDX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAKIAkvKiAtLS0tIGNhcmQgMHgzOCAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xMjk4LDE3ICsxMjE5LDE1IEBACiAJCS8qIEdvcmRvbiBIZXlkb24gPGdqaGV5ZG9uQGJpZ2Zvb3QuY29tICgnOTgpICovCiAJCS5uYW1lICAgICAgICAgICA9ICJMaWZldmlldyBGbHlWaWRlbyA5OEZNIExSNTAiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAzLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAzLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDE4MDAsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMHg4MDAsIDB4MTAwMCwgMHgxMDAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDE4MDAsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCQkvKiBUaGlzIGlzIHRoZSB1bHRpbWF0ZSBjaGVhcG8gY2FwdHVyZSBjYXJkCiAJCSoganVzdCBhIEJUODQ4QSBvbiBhIHNtYWxsIFBDQiEKQEAgLTEzMTYsNTEgKzEyMzUsNDUgQEAKIAlbQlRUVl9CT0FSRF9HUkFORFRFQ10gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJHcmFuZFRlYyAnR3JhbmQgVmlkZW8gQ2FwdHVyZScgKEJ0ODQ4KSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDIsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAxLAogCQkuZ3Bpb21hc2sgICAgICAgPSAwLAotCQkubXV4c2VsICAgICAgICAgPSB7IDMsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDMsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAgfSwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzM1LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9BU0tFWV9DUEgwNjBdID0gewogCQkvKiBEYW5pZWwgSGVycmluZ3RvbiA8ZGFuaWVsLmhlcnJpbmd0b25AaG9tZS5jb20+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJBc2tleSBDUEgwNjAvIFBob2ViZSBUViBNYXN0ZXIgT25seSAoTm8gRk0pIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHhlMDAsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMX0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAweDQwMCwgMHg0MDAsIDB4NDAwLCAweDQwMCB9LAogCQkuZ3Bpb211dGUgCT0gMHg4MDAsCiAJCS5uZWVkc190dmF1ZGlvICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfVEVNSUNfNDAzNkZZNV9OVFNDLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9BU0tFWV9DUEgwM1hdID0gewogCQkvKiBNYXR0aSBNb3R0dXMgPG1vdHR1c0BwaHlzaWMudXQuZWU+ICovCiAJCS5uYW1lCQk9ICJBc2tleSBDUEgwM3ggVFYgQ2FwdHVyZXIiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAzMDAwRiwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDAgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMCksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMiwgMCwgMCwgMCB9LAogCQkuZ3Bpb211dGUgCT0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1RFTUlDX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAKIAkvKiAtLS0tIGNhcmQgMHgzYyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xMzY4LDM0ICsxMjgxLDMwIEBACiAJCS8qIFBoaWxpcCBCbHVuZGVsbCA8cGhpbGJAZ251Lm9yZz4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIk1vZHVsYXIgVGVjaG5vbG9neSBNTTEwMFBDVFYiLAogCQkudmlkZW9faW5wdXRzICAgPSAyLAotCQkuYXVkaW9faW5wdXRzICAgPSAyLAotCQkudHVuZXIJCT0gMCwKLQkJLnN2aHMJCT0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDIsICovCisJCS5zdmhzCQk9IE5PX1NWSFMsCiAJCS5ncGlvbWFzayAgICAgICA9IDExLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDIsIDAsIDAsIDEgfSwKIAkJLmdwaW9tdXRlIAk9IDgsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8zNSwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfVEVNSUNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9HTVYxXSA9IHsKIAkJLyogQWRyaWFuIENveCA8YWRyaWFuQGh1bWJvbGR0LmNvLnVrICovCiAJCS5uYW1lCQk9ICJBRyBFbGVjdHJvbmljcyBHTVYxIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMiwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyCQk9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocwkJPSAxLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweEYsCi0JCS5tdXhzZWwJCT0geyAyLCAyIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDIpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IH0sCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5wbGwJCT0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9CRVNUQlVZX0VBU1lUVjJdID0gewogCQkvKiBNaWd1ZWwgQW5nZWwgQWx2YXJleiA8bWFhY3J1ekBuYXZlZ2FsaWEuY29tPgpAQCAtMTQwMywzNCArMTMxMiwzMCBAQAogCQlzcGVjaWFsIHRoYW5rcyB0byBJbmZvcm1hdGljYSBNaWVyZXMgZm9yIHByb3ZpZGluZyB0aGUgY2FyZCAqLwogCQkubmFtZSAgICAgICAgICAgPSAiQXNrZXkgQ1BIMDYxLyBCRVNUQlVZIEVhc3kgVFYgKGJ0ODc4KSIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAyLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAyLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweEZGLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDEsIDAsIDQsIDQgfSwKIAkJLmdwaW9tdXRlIAk9IDksCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9BVElfVFZXT05ERVJdID0gewogCQkvKiBMdWthcyBHZWJhdWVyIDxnZWJ5QHZvbG55LmN6PiAqLwogCQkubmFtZQkJPSAiQVRJIFRWLVdvbmRlciIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4ZjAzZiwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDAgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMCksCiAJCS5ncGlvbXV4IAk9IHsgMHhiZmZlLCAwLCAweGJmZmYsIDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4YmZmZSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfVEVNSUNfNDAwNkZONV9NVUxUSV9QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCiAJLyogLS0tLSBjYXJkIDB4NDAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTQzOCwyNyArMTM0MywyNCBAQAogCQkvKiBMdWthcyBHZWJhdWVyIDxnZWJ5QHZvbG55LmN6PiAqLwogCQkubmFtZQkJPSAiQVRJIFRWLVdvbmRlciBWRSIsCiAJCS52aWRlb19pbnB1dHMJPSAyLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCi0JCS5zdmhzCQk9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLworCQkuc3ZocwkJPSBOT19TVkhTLAogCQkuZ3Bpb21hc2sJPSAxLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMCwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAwLCAxKSwKIAkJLmdwaW9tdXggCT0geyAwLCAwLCAxLCAwIH0sCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfVEVNSUNfNDAwNkZONV9NVUxUSV9QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX0ZMWVZJREVPMjAwMF0gPSB7CiAJCS8qIERlZUpheSA8ZGVlamF5QHdlc3RlbDkwMC5uZXQgKDIwMDBTKSAqLwogCQkubmFtZSAgICAgICAgICAgPSAiTGlmZXZpZXcgRmx5VmlkZW8gMjAwMFMgTFI5MCIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDMsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDMsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzawk9IDB4MThlMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDAsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMCwgMSksCiAJCQkJLyogUmFkaW8gY2hhbmdlZCBmcm9tIDFlODAgdG8gMHg4MDAgdG8gbWFrZQogCQkJCUZseVZpZGVvMjAwMFMgaW4gLmh1IGhhcHB5IChnbSkqLwogCQkJCS8qIC1kay0/Pz86IHNldCBtdXRlPTB4MTgwMCBmb3IgdGRhOTg3NGggZGF1Z2h0ZXJib2FyZCAqLwpAQCAtMTQ3MSw0MCArMTM3MywzNSBAQAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9URVJSQVRWQUxVRVJdID0gewogCQkubmFtZQkJPSAiVGVycmF0ZWMgVFZhbHVlUmFkaW8iLAogCQkudmlkZW9faW5wdXRzCT0gMywKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweGZmZmYwMCwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4IAk9IHsgMHg1MDAsIDB4NTAwLCAweDMwMCwgMHg5MDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4OTAwLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5oYXNfcmFkaW8JPSAxLAogCX0sCiAJW0JUVFZfQk9BUkRfR1ZCQ1RWNFBDSV0gPSB7CiAJCS8qIFRBTkFLQSBLZWkgPHBlZzAwNjI1QG5pZnR5LmNvbT4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIklPREFUQSBHVi1CQ1RWNC9QQ0kiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAxMGYwMCwKLQkJLm11eHNlbCAgICAgICAgID0gezIsIDMsIDAsIDAgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDAsIDApLAogCQkuZ3Bpb211eCAgICAgICAgPSB7MHgxMDAwMCwgMCwgMHgxMDAwMCwgMCB9LAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1NIQVJQXzJVNUpGNTU0MF9OVFNDLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5hdWRpb19tb2RlX2dwaW89IGd2YmN0djNwY2lfYXVkaW8sCiAJfSwKIApAQCAtMTUxNCw5ICsxNDExLDggQEAKIAkJLyogdHJ5ICJpbnNtb2QgbXNwMzQwMCBzaW1wbGU9MCIgaWYgeW91IGhhdmUKIAkJKiBzb3VuZCBwcm9ibGVtcyB3aXRoIHRoaXMgY2FyZC4gKi8KIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4NGY4YTAwLAogCQkvKiAweDEwMDAwMDogMT1NU1AgZW5hYmxlZCAoMD1kaXNhYmxlIGFnYWluKQogCQkqIDB4MDEwMDAwOiBDb25uZWN0ZWQgdG8gIlMwIiBvbiB0ZGE5ODgwICgwPVBhbC9CRywgMT1OVFNDKSAqLwpAQCAtMTUyNCwxMCArMTQyMCw5IEBACiAJCS5ncGlvbXV0ZSAJPSAweDk0N2ZmZiwKIAkJLyogdHZ0dW5lciwgcmFkaW8sICAgZXh0ZXJuYWwsaW50ZXJuYWwsIG11dGUsICBzdGVyZW8KIAkJKiB0dW5lciwgQ29tcG9zaXQsIFNWaWQsIENvbXBvc2l0LW9uLVN2aWQtYWRhcHRlciAqLwotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMgLDAgLDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDAsIDEpLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9NVDIwMzIsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS5oYXNfcmFkaW8JPSAxLAogCX0sCkBAIC0xNTM2LDkgKzE0MzEsOCBAQAogCQkvKiB0cnkgImluc21vZCBtc3AzNDAwIHNpbXBsZT0wIiBpZiB5b3UgaGF2ZQogCQkqIHNvdW5kIHByb2JsZW1zIHdpdGggdGhpcyBjYXJkLiAqLwogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKIAkJLmdwaW9tYXNrICAgICAgID0gMHg0ZjhhMDAsCiAJCS8qIDB4MTAwMDAwOiAxPU1TUCBlbmFibGVkICgwPWRpc2FibGUgYWdhaW4pCiAJCSogMHgwMTAwMDA6IENvbm5lY3RlZCB0byAiUzAiIG9uIHRkYTk4ODAgKDA9UGFsL0JHLCAxPU5UU0MpICovCkBAIC0xNTQ2LDEwICsxNDQwLDkgQEAKIAkJLmdwaW9tdXRlIAk9IDB4OTQ3ZmZmLAogCQkvKiB0dnR1bmVyLCByYWRpbywgICBleHRlcm5hbCxpbnRlcm5hbCwgbXV0ZSwgIHN0ZXJlbwogCQkqIHR1bmVyLCBDb21wb3NpdCwgU1ZpZCwgQ29tcG9zaXQtb24tU3ZpZC1hZGFwdGVyICovCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMyAsMCAsMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMCwgMSksCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX01UMjAzMiwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLmhhc19yYWRpbwk9IDEsCiAJfSwKQEAgLTE1NTcsMzEgKzE0NTAsMjcgQEAKIAkJLyogUGhpbGlwIEJsdW5kZWxsIDxwYkBuZXh1cy5jby51az4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkFjdGl2ZSBJbWFnaW5nIEFJTU1TIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMSwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkubXV4c2VsICAgICAgICAgPSB7IDIgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIpLAogCQkuZ3Bpb21hc2sgICAgICAgPSAwCiAJfSwKIAlbQlRUVl9CT0FSRF9QVl9CVDg3OFBfUExVU10gPSB7CiAJCS8qIFRvbWFzeiBQeXJhIDxoZWxsZmlyZUBzZWRlei5pcS5wbD4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIlByb2xpbmsgUGl4ZWx2aWV3IFBWLUJUODc4UCsgKFJldi40Qyw4RSkiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSA0LAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSA0LCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAxNSwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwLCAwLCAxMSwgNyB9LCAvKiBUViBhbmQgUmFkaW8gd2l0aCBzYW1lIEdQSU8gISAqLwogCQkuZ3Bpb211dGUgCT0gMTMsCiAJCS5uZWVkc190dmF1ZGlvICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfTEdfUEFMX0lfRk0sCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmhhc19yZW1vdGUgICAgID0gMSwKIAkJLyogR1BJTyB3aXJpbmc6CiAJCQlHUElPMDogVTQuQTAgKGhlZjQwNTJidCkKQEAgLTE1OTQsMTUgKzE0ODMsMTQgQEAKIAlbQlRUVl9CT0FSRF9GTFlWSURFTzk4RVpdID0gewogCQkubmFtZQkJPSAiTGlmZXZpZXcgRmx5VmlkZW8gOThFWiAoY2FwdHVyZSBvbmx5KSBMUjUxIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lcgkJPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMJCT0gMiwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEsIDEgfSwgLyogQVYxLCBBVjIsIFNWSFMsIENWaWQgYWRhcHRlciBvbiBTVkhTICovCisJCS8qIEFWMSwgQVYyLCBTVkhTLCBDVmlkIGFkYXB0ZXIgb24gU1ZIUyAqLworCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS5ub19tc3AzNHh4CT0gMSwKLQkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCiAJLyogLS0tLSBjYXJkIDB4NDggLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTYxMCwxMSArMTQ5OCwxMCBAQAogCQkvKiBEYXJpdXN6IEtvd2FsZXdza2kgPGRhcmVra0BhdXRvbWV4LnBsPiAqLwogCQkubmFtZQkJPSAiUHJvbGluayBQaXhlbHZpZXcgUFYtQlQ4NzhQKzlCIChQbGF5VFYgUHJvIHJldi45QiBGTStOSUNBTSkiLAogCQkudmlkZW9faW5wdXRzCT0gNCwKLQkJLmF1ZGlvX2lucHV0cwk9IDEsCi0JCS50dW5lcgkJPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocwkJPSAyLAogCQkuZ3Bpb21hc2sJPSAweDNmLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAweDAxLCAweDAwLCAweDAzLCAweDAzIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDA5LAogCQkubmVlZHNfdHZhdWRpbyAgPSAxLApAQCAtMTYyMyw3ICsxNTEwLDYgQEAKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS50dW5lcl90eXBlCT0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmF1ZGlvX21vZGVfZ3Bpbz0gcHZidDg3OHA5Yl9hdWRpbywgLyogTm90ZTogbm90IGFsbCBjYXJkcyBoYXZlIHN0ZXJlbyAqLwogCQkuaGFzX3JhZGlvCT0gMSwgIC8qIE5vdGU6IG5vdCBhbGwgY2FyZHMgaGF2ZSByYWRpbyAqLwogCQkuaGFzX3JlbW90ZSAgICAgPSAxLApAQCAtMTY0MCw0OSArMTUyNiw0MiBAQAogCQkvKiB5b3UgbXVzdCBqdW1wZXIgSlA1IGZvciB0aGUgY2FyZCB0byB3b3JrICovCiAJCS5uYW1lICAgICAgICAgICA9ICJTZW5zb3JheSAzMTEiLAogCQkudmlkZW9faW5wdXRzICAgPSA1LAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gNCwKIAkJLmdwaW9tYXNrICAgICAgID0gMCwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwLCAwIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAwLCAwKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwIH0sCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX1JWNjA1XSA9IHsKIAkJLyogTWlndWVsIEZyZWl0YXMgPG1pZ3VlbEBjZXR1Yy5wdWMtcmlvLmJyPiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiUmVtb3RlVmlzaW9uIE1YIChSVjYwNSkiLAogCQkudmlkZW9faW5wdXRzICAgPSAxNiwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAogCQkuZ3Bpb21hc2syICAgICAgPSAweDA3ZmYsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMHgzMywgMHgxMywgMHgyMywgMHg0MywgMHhmMywgMHg3MywgMHhlMywgMHgwMywKLQkJCQkweGQzLCAweGIzLCAweGMzLCAweDYzLCAweDkzLCAweDUzLCAweDgzLCAweGEzIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzKSwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkubXV4c2VsX2hvb2sgICAgPSBydjYwNV9tdXhzZWwsCiAJfSwKIAlbQlRUVl9CT0FSRF9QT1dFUkNMUl9NVFY4NzhdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiUG93ZXJjb2xvciBNVFY4NzgvIE1UVjg3OFIvIE1UVjg3OEYiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAyLAotCQkudHVuZXIJCT0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMiwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgxQzgwMEYsICAvKiBCaXQwLTI6IEF1ZGlvIHNlbGVjdCwgOC0xMjpyZW1vdGUgY29udHJvbCAxNDpyZW1vdGUgdmFsaWQgMTU6cmVtb3RlIHJlc2V0ICovCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMSwgMSwgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDEsIDIsIDIgfSwKIAkJLmdwaW9tdXRlIAk9IDQsCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkuaGFzX3JhZGlvCT0gMSwKIAl9LApAQCAtMTY5Miw0MiArMTU3MSwzOCBAQAogCQkvKiBNYXNha2kgU3V6dWtpIDxtYXNha2lAYnRyZWUub3JnPiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiQ2Fub3B1cyBXaW5EVlIgUENJIChDT01QQVEgUHJlc2FyaW8gMzUyNEpQLCA1MTEySlApIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgxNDAwMDcsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMSwgMiwgMyB9LAogCQkuZ3Bpb211dGUgCT0gNCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19OVFNDLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5hdWRpb19tb2RlX2dwaW89IHdpbmR2cl9hdWRpbywKIAl9LAogCVtCVFRWX0JPQVJEX0dSQU5EVEVDX01VTFRJXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIkdyYW5kVGVjIE11bHRpIENhcHR1cmUgQ2FyZCAoQnQ4NzgpIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAogCQkuZ3Bpb21hc2sgICAgICAgPSAwLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAgfSwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9LV09STERdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiSmV0d2F5IFRWL0NhcHR1cmUgSlctVFY4NzgtRkJLLCBLd29ybGQgS1ctVFY4NzhSRiIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDMsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDMsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDcsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LCAgIC8qIFR1bmVyLCBTVmlkLCBTVkhTLCBTVmlkIHRvIFNWSFMgY29ubmVjdG9yICovCisJCS8qIFR1bmVyLCBTVmlkLCBTVkhTLCBTVmlkIHRvIFNWSFMgY29ubmVjdG9yICovCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwLCAwLCA0LCA0IH0sLyogWWVzLCB0aGlzIHR1bmVyIHVzZXMgdGhlIHNhbWUgYXVkaW8gb3V0cHV0IGZvciBUViBhbmQgRk0gcmFkaW8hCiAJCQkJCQkqIFRoaXMgY2FyZCBsYWNrcyBleHRlcm5hbCBBdWRpbyBJbiwgc28gd2UgbXV0ZSBpdCBvbiBFeHQuICYgSW50LgogCQkJCQkJKiBUaGUgUENCIGNhbiB0YWtlIGEgc2J4MTYzNy9zYngxNjczLCB3aXJpbmcgdW5rbm93bi4KQEAgLTE3NDEsNyArMTYxNiw2IEBACiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLyogU2Ftc3VuZyBUQ1BBOTA5NVBDMjdBIChCRytESyksIHBoaWxpcHMgY29tcGF0aWJsZSwgdy9GTSwgc3RlcmVvIGFuZAogCQlyYWRpbyBzaWduYWwgc3RyZW5ndGggaW5kaWNhdG9ycyB3b3JrIGZpbmUuICovCiAJCS5oYXNfcmFkaW8JPSAxLApAQCAtMTc1OSwyNyArMTYzMywyNCBAQAogCQkvKiBBcnRodXIgVGV0emxhZmYtRGVhcywgRFNQIERlc2lnbiBMdGQgPHNvZnR3YXJlQGRzcGRlc2lnbi5jb20+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJEU1AgRGVzaWduIFRDVklERU8iLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAwKSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAKIAkJLyogLS0tLSBjYXJkIDB4NTAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCVtCVFRWX0JPQVJEX0hBVVBQQVVHRVBWUl0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJIYXVwcGF1Z2UgV2luVFYgUFZSIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAwLCAxLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAwLCAxLCAxKSwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCiAJCS5ncGlvbWFzayAgICAgICA9IDcsCiAJCS5ncGlvbXV4ICAgICAgICA9IHs3fSwKQEAgLTE3ODcsMzIgKzE2NTgsMjggQEAKIAlbQlRUVl9CT0FSRF9HVkJDVFY1UENJXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIklPREFUQSBHVi1CQ1RWNS9QQ0kiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDBmMGY4MCwKLQkJLm11eHNlbCAgICAgICAgID0gezIsIDMsIDEsIDAgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkuZ3Bpb211eCAgICAgICAgPSB7MHgwMzAwMDAsIDB4MDEwMDAwLCAwLCAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDAyMDAwMCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0NfTSwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuYXVkaW9fbW9kZV9ncGlvPSBndmJjdHY1cGNpX2F1ZGlvLAogCQkuaGFzX3JhZGlvICAgICAgPSAxLAogCX0sCiAJW0JUVFZfQk9BUkRfT1NQUkVZMXgwXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAxMDAvMTUwICg4NzgpIiwgLyogMHgxKDJ8MyktNDVDNi1DMSAqLwogCQkudmlkZW9faW5wdXRzICAgPSA0LCAgICAgICAgICAgICAgICAgIC8qIGlkLWlucHV0cy1jbG9jayAqLwotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMywKLQkJLm11eHNlbCAgICAgICAgID0geyAzLCAyLCAwLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgzLCAyLCAwLCAxKSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCkBAIC0xODIwLDE0ICsxNjg3LDEyIEBACiAJW0JUVFZfQk9BUkRfT1NQUkVZMXgwXzg0OF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMTAwLzE1MCAoODQ4KSIsIC8qIDB4MDQtNTRDMC1DMSAmIG9sZGVyIGJvYXJkcyAqLwogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxKSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCkBAIC0xODM3LDE0ICsxNzAyLDEyIEBACiAJW0JUVFZfQk9BUkRfT1NQUkVZMTAxXzg0OF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMTAxICg4NDgpIiwgLyogMHgwNS00MEMwLUMxICovCiAJCS52aWRlb19pbnB1dHMgICA9IDIsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAxLAotCQkubXV4c2VsICAgICAgICAgPSB7IDMsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDMsIDEpLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKQEAgLTE4NTIsMTQgKzE3MTUsMTIgQEAKIAlbQlRUVl9CT0FSRF9PU1BSRVkxeDFdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDEwMS8xNTEiLCAgICAgICAvKiAweDEoNHw1KS0wMDA0LUM0ICovCiAJCS52aWRlb19pbnB1dHMgICA9IDEsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKLQkJLm11eHNlbCAgICAgICAgID0geyAwIH0sCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgwKSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCkBAIC0xODY3LDE0ICsxNzI4LDEyIEBACiAJW0JUVFZfQk9BUkRfT1NQUkVZMXgxX1NWSURdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDEwMS8xNTEgdy8gc3ZpZCIsICAvKiAweCgxNnwxN3wyMCktMDBDNC1DMSAqLwogCQkudmlkZW9faW5wdXRzICAgPSAyLAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMSwKLQkJLm11eHNlbCAgICAgICAgID0geyAwLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgwLCAxKSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCkBAIC0xODgyLDE0ICsxNzQxLDEyIEBACiAJW0JUVFZfQk9BUkRfT1NQUkVZMnh4XSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSAyMDAvMjAxLzI1MC8yNTEiLCAgLyogMHgxKDh8OXxFfEYpLTAwMDQtQzQgKi8KIAkJLnZpZGVvX2lucHV0cyAgID0gMSwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAotCQkubXV4c2VsICAgICAgICAgPSB7IDAgfSwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDApLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlCT0gVU5TRVQsCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCkBAIC0xODk5LDE0ICsxNzU2LDEyIEBACiAJW0JUVFZfQk9BUkRfT1NQUkVZMngwX1NWSURdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDIwMC8yNTAiLCAgIC8qIDB4MShBfEIpLTAwQzQtQzEgKi8KIAkJLnZpZGVvX2lucHV0cyAgID0gMiwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDEsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMCwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMCwgMSksCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKQEAgLTE5MTQsMTQgKzE3NjksMTIgQEAKIAlbQlRUVl9CT0FSRF9PU1BSRVkyeDBdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiT3NwcmV5IDIxMC8yMjAvMjMwIiwgICAvKiAweDEoQXxCKS0wNEMwLUMxICovCiAJCS52aWRlb19pbnB1dHMgICA9IDIsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAxLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMpLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlCT0gVU5TRVQsCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCkBAIC0xOTI5LDE0ICsxNzgyLDEyIEBACiAJW0JUVFZfQk9BUkRfT1NQUkVZNTAwXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSA1MDAiLCAgIC8qIDUwMCAqLwogCQkudmlkZW9faW5wdXRzICAgPSAyLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMSwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzKSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCkBAIC0xOTQ0LDEyICsxNzk1LDEwIEBACiAJW0JUVFZfQk9BUkRfT1NQUkVZNTQwXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIk9zcHJleSA1NDAiLCAgIC8qIDU0MCAqLwogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCkBAIC0xOTU5LDE0ICsxODA4LDEyIEBACiAJW0JUVFZfQk9BUkRfT1NQUkVZMjAwMF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgMjAwMCIsICAvKiAyMDAwICovCiAJCS52aWRlb19pbnB1dHMgICA9IDIsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAxLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMpLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlCT0gVU5TRVQsCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsICAgICAgLyogbXVzdCBhdm9pZCwgY29uZmxpY3RzIHdpdGggdGhlIGJ0ODYwICovCkBAIC0xOTc1LDE0ICsxODIyLDEyIEBACiAJCS8qIE0gRyBCZXJiZXJpY2ggPGJlcmJlcmljQGZvcndpc3MudW5pLXBhc3NhdS5kZT4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIklEUyBFYWdsZSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAorCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAogCQkuZ3Bpb21hc2sgICAgICAgPSAwLAotCQkubXV4c2VsICAgICAgICAgPSB7IDAsIDEsIDIsIDMgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDIsIDIsIDIpLAogCQkubXV4c2VsX2hvb2sgICAgPSBlYWdsZV9tdXhzZWwsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCkBAIC0xOTkxLDE2ICsxODM2LDE0IEBACiAJW0JUVFZfQk9BUkRfUElOTkFDTEVTQVRdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiUGlubmFjbGUgUENUViBTYXQiLAogCQkudmlkZW9faW5wdXRzICAgPSAyLAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAotCQkubXV4c2VsICAgICAgICAgPSB7IDMsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDMsIDEpLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS5ub19ncGlvaXJxICAgICA9IDEsCiAJCS5oYXNfZHZiICAgICAgICA9IDEsCkBAIC0yMDA4LDE4ICsxODUxLDE2IEBACiAJW0JUVFZfQk9BUkRfRk9STUFDX1BST1RWXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIkZvcm1hYyBQcm9UViBJSSAoYnQ4NzgpIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMywKIAkJLmdwaW9tYXNrICAgICAgID0gMiwKIAkJLyogVFYsIENvbXAxLCBDb21wb3NpdGUgb3ZlciBTVklEIGNvbiwgU1ZJRCAqLwotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDIsIDIsIDAsIDAgfSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkuaGFzX3JhZGlvICAgICAgPSAxLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCS8qIHNvdW5kIHJvdXRpbmc6CiAJCUdQSU89MHgwMCwweDAxLDB4MDM6IG11dGUgKD8pCiAJCTB4MDI6IGJvdGggVFYgYW5kIHJhZGlvICh0dW5lcjogRk0xMjE2L0kpCkBAIC0yMDMzLDYyICsxODc0LDU1IEBACiAJW0JUVFZfQk9BUkRfTUFDSFRWXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIk1hY2hUViIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLworCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAogCQkuZ3Bpb21hc2sgICAgICAgPSA3LAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDF9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMSwgMiwgM30sCiAJCS5ncGlvbXV0ZSAJPSA0LAogCQkubmVlZHNfdHZhdWRpbyAgPSAxLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJfSwKIAlbQlRUVl9CT0FSRF9FVVJFU1lTX1BJQ09MT10gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJFdXJlc3lzIFBpY29sbyIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAwLAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDAsIDF9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMCwgMSksCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfUFYxNTBdID0gewogCQkvKiBMdWMgVmFuIEhvZXlsYW5kdCA8bHVjQGUtbWFnaWMuYmU+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJQcm9WaWRlbyBQVjE1MCIsIC8qIDB4NGYgKi8KIAkJLnZpZGVvX2lucHV0cyAgID0gMiwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAogCQkuZ3Bpb21hc2sgICAgICAgPSAwLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAgfSwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9BRF9UVks1MDNdID0gewogCQkvKiBIaXJvc2hpIFRha2VrYXdhIDxzaWFuQGJpZy5vci5qcD4gKi8KIAkJLyogVGhpcyBjYXJkIGxhY2tzIHN1YnN5c3RlbSBJRCAqLwogCQkubmFtZSAgICAgICAgICAgPSAiQUQtVFZLNTAzIiwgLyogMHg2MyAqLwogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwMWU4MDA3LAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkvKiAgICAgICAgICAgICAgICAgIFR1bmVyLCBSYWRpbywgZXh0ZXJuYWwsIGludGVybmFsLCBvZmYsICBvbiAqLwogCQkuZ3Bpb211eCAgICAgICAgPSB7IDB4MDgsICAweDBmLCAgMHgwYSwgICAgIDB4MDggfSwKIAkJLmdwaW9tdXRlIAk9IDB4MGYsCkBAIC0yMDk3LDcgKzE5MzEsNiBAQAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfTlRTQywKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuYXVkaW9fbW9kZV9ncGlvPSBhZHR2azUwM19hdWRpbywKIAl9LAogCkBAIC0yMTA1LDE3ICsxOTM4LDE1IEBACiAJW0JUVFZfQk9BUkRfSEVSQ1VMRVNfU01fVFZdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiSGVyY3VsZXMgU21hcnQgVFYgU3RlcmVvIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMCwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMSwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkvKiBOb3RlczoKIAkJLSBjYXJkIGxhY2tzIHN1YnN5c3RlbSBJRAogCQktIHN0ZXJlbyB2YXJpYW50IHcvIGRhdWdodGVyIGJvYXJkIHdpdGggdGRhOTg3NGEgQDB4YjAKQEAgLTIxMjksMTYgKzE5NjAsMTUgQEAKIAlbQlRUVl9CT0FSRF9QQUNFVFZdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiUGFjZSBUViAmIFJhZGlvIENhcmQiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwgLyogVHVuZXIsIENWaWQsIFNWaWQsIENWaWQgb3ZlciBTVmlkIGNvbm5lY3RvciAqLworCQkvKiBUdW5lciwgQ1ZpZCwgU1ZpZCwgQ1ZpZCBvdmVyIFNWaWQgY29ubmVjdG9yICovCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tYXNrICAgICAgID0gMCwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUxfSSwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuaGFzX3JhZGlvICAgICAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS8qIEJ0ODc4LCBCdDgzMiwgRkkxMjQ2IHR1bmVyOyBubyBwY2kgc3Vic3lzdGVtIGlkCkBAIC0yMTUyLDI3ICsxOTgyLDM0IEBACiAJCS8qIENocmlzIFdpbGxpbmcgPGNocmlzQHZpc2xhYi51c3lkLmVkdS5hdT4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIklWQy0yMDAiLAogCQkudmlkZW9faW5wdXRzICAgPSAxLAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKIAkJLmdwaW9tYXNrICAgICAgID0gMHhkZiwKLQkJLm11eHNlbCAgICAgICAgID0geyAyIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyKSwKKwkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAorCX0sCisJW0JUVFZfQk9BUkRfSVZDRTg3ODRdID0geworCQkubmFtZSAgICAgICAgICAgPSAiSVZDRS04Nzg0IiwKKwkJLnZpZGVvX2lucHV0cyAgID0gMSwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAorCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAorCQkuZ3Bpb21hc2sgICAgICAgPSAweGRmLAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiksCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAl9LAogCVtCVFRWX0JPQVJEX1hHVUFSRF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJHcmFuZCBYLUd1YXJkIC8gVHJ1c3QgODE0UENJIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMTYsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5ncGlvbWFzazIgICAgICA9IDB4ZmYsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwyLDIsMiwgMywzLDMsMywgMSwxLDEsMSwgMCwwLDAsMCB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwyLDIsMiwgMywzLDMsMywgMSwxLDEsMSwgMCwwLDAsMCksCiAJCS5tdXhzZWxfaG9vayAgICA9IHhndWFyZF9tdXhzZWwsCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCkBAIC0yMTg0LDE2ICsyMDIxLDE0IEBACiAJW0JUVFZfQk9BUkRfTkVCVUxBX0RJR0lUVl0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJOZWJ1bGEgRWxlY3Ryb25pY3MgRGlnaVRWIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmhhc19kdmIgICAgICAgID0gMSwKIAkJLmhhc19yZW1vdGUJPSAxLAogCQkuZ3Bpb21hc2sJPSAweDFiLApAQCAtMjIwMywxMTggKzIwMzgsMTAxIEBACiAJCS8qIEpvcmdlIEJvbmNvbXB0ZSAtIERUSTIgPGpvcmdlQGR0aTIubmV0PiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiUHJvVmlkZW8gUFYxNDMiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCiAJCS5ncGlvbWFzayAgICAgICA9IDAsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMCksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCB9LAogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX1ZEMDA5WDFfVkQwMTFfTUlOSURJTl0gPSB7CiAJCS8qIE0uS2xhaHJAcGh5dGVjLmRlICovCiAJCS5uYW1lICAgICAgICAgICA9ICJQSFlURUMgVkQtMDA5LVgxIFZELTAxMSBNaW5pRElOIChidDg3OCkiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwgLyogY2FyZCBoYXMgbm8gdHVuZXIgKi8KKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMywKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMCwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAwKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwLCAwLCAwLCAwIH0sIC8qIGNhcmQgaGFzIG5vIGF1ZGlvICovCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfVkQwMDlYMV9WRDAxMV9DT01CSV0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJQSFlURUMgVkQtMDA5LVgxIFZELTAxMSBDb21iaSAoYnQ4NzgpIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsIC8qIGNhcmQgaGFzIG5vIHR1bmVyICovCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCiAJCS5zdmhzICAgICAgICAgICA9IDMsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMCwgMCwgMCB9LCAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLwogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCiAJCS8qIC0tLS0gY2FyZCAweDZjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlbQlRUVl9CT0FSRF9WRDAwOV9NSU5JRElOXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIlBIWVRFQyBWRC0wMDkgTWluaURJTiAoYnQ4NzgpIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMTAsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULCAvKiBjYXJkIGhhcyBubyB0dW5lciAqLworCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSA5LAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAotCQkuZ3Bpb21hc2syICAgICAgPSAweDAzLCAvKiBncGlvbWFzazIgZGVmaW5lcyB0aGUgYml0cyB1c2VkIHRvIHN3aXRjaCBhdWRpbwotCQkJCQl2aWEgdGhlIHVwcGVyIG5pYmJsZSBvZiBtdXhzZWwuIGhlcmU6IHVzZWQgZm9yCi0JCQkJCXh0ZXJuYWwgdmlkZW8tbXV4ICovCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMHgwMiwgMHgxMiwgMHgyMiwgMHgzMiwgMHgwMywgMHgxMywgMHgyMywgMHgzMywgMHgwMSwgMHgwMCB9LAorCQkuZ3Bpb21hc2syICAgICAgPSAweDAzLCAvKiB1c2VkIGZvciBleHRlcm5hbCB2b2RlbyBtdXggKi8KKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDIsIDIsIDIsIDMsIDMsIDMsIDMsIDEsIDApLAorCQkubXV4c2VsX2hvb2sJPSBwaHl0ZWNfbXV4c2VsLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDAsIDAsIDAgfSwgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KIAkJLm5lZWRzX3R2YXVkaW8gID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9WRDAwOV9DT01CSV0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJQSFlURUMgVkQtMDA5IENvbWJpIChidDg3OCkiLAogCQkudmlkZW9faW5wdXRzICAgPSAxMCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsIC8qIGNhcmQgaGFzIG5vIHR1bmVyICovCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCiAJCS5zdmhzICAgICAgICAgICA9IDksCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCi0JCS5ncGlvbWFzazIgICAgICA9IDB4MDMsIC8qIGdwaW9tYXNrMiBkZWZpbmVzIHRoZSBiaXRzIHVzZWQgdG8gc3dpdGNoIGF1ZGlvCi0JCQkJCXZpYSB0aGUgdXBwZXIgbmliYmxlIG9mIG11eHNlbC4gaGVyZTogdXNlZCBmb3IKLQkJCQkJeHRlcm5hbCB2aWRlby1tdXggKi8KLQkJLm11eHNlbCAgICAgICAgID0geyAweDAyLCAweDEyLCAweDIyLCAweDMyLCAweDAzLCAweDEzLCAweDIzLCAweDMzLCAweDAxLCAweDAxIH0sCisJCS5ncGlvbWFzazIgICAgICA9IDB4MDMsIC8qIHVzZWQgZm9yIGV4dGVybmFsIHZvZGVvIG11eCAqLworCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMiwgMiwgMiwgMywgMywgMywgMywgMSwgMSksCisJCS5tdXhzZWxfaG9vawk9IHBoeXRlY19tdXhzZWwsCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMCwgMCwgMCB9LCAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLwogCQkubmVlZHNfdHZhdWRpbyAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX0lWQzEwMF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJJVkMtMTAwIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4ZGYsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMCksCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAl9LAogCVtCVFRWX0JPQVJEX0lWQzEyMF0gPSB7CiAJCS8qIElWQy0xMjBHIC0gQWxhbiBHYXJmaWVsZCA8YWxhbkBmcm9tb3JiaXQuY29tPiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiSVZDLTEyMEciLAogCQkudmlkZW9faW5wdXRzICAgPSAxNiwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwgICAgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsICAgLyogY2FyZCBoYXMgbm8gdHVuZXIgKi8KLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwgICAvKiBjYXJkIGhhcyBubyBzdmhzICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsICAgLyogY2FyZCBoYXMgbm8gc3ZocyAqLwogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAotCQkubXV4c2VsICAgICAgICAgPSB7IDB4MDEsIDB4MDIsIDB4MDMsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MDcsIDB4MDgsCi0JCQkJMHgwOSwgMHgwYSwgMHgwYiwgMHgwYywgMHgwZCwgMHgwZSwgMHgwZiwgMHgxMCB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCksCiAJCS5tdXhzZWxfaG9vayAgICA9IGl2YzEyMF9tdXhzZWwsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAl9LApAQCAtMjMyMywxMyArMjE0MSwxMSBAQAogCVtCVFRWX0JPQVJEX1BDX0hEVFZdID0gewogCQkubmFtZSAgICAgICAgICAgPSAicGNIRFRWIEhELTIwMDAgVFYiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZDVjEyMzZELAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5oYXNfZHZiICAgICAgICA9IDEsCiAJfSwKIAlbQlRUVl9CT0FSRF9UV0lOSEFOX0RTVF0gPSB7CkBAIC0yMzM5LDM4ICsyMTU1LDM0IEBACiAJCS5ub190ZGE3NDMyICAgICA9IDEsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkubm9fdmlkZW8gICAgICAgPSAxLAogCQkuaGFzX2R2YiAgICAgICAgPSAxLAogCX0sCiAJW0JUVFZfQk9BUkRfV0lORkFTVFZDMTAwXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIldpbmZhc3QgVkMxMDAiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKLQkJLm11eHNlbCAgICAgICAgID0geyAzLCAxLCAxLCAzIH0sIC8qIFZpZCBJbiwgU1ZpZCBJbiwgVmlkIG92ZXIgU1ZpZCBpbiBjb25uZWN0b3IgKi8KKwkJLyogVmlkIEluLCBTVmlkIEluLCBWaWQgb3ZlciBTVmlkIGluIGNvbm5lY3RvciAqLworCQkubXV4c2VsCQk9IE1VWFNFTCgzLCAxLCAxLCAzKSwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAl9LAogCVtCVFRWX0JPQVJEX1RFVjU2MF0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJUZXBwcm8gVEVWLTU2MC9JbnRlclZpc2lvbiBJVi01NjAiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAzLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDEsIDEsIDEsIDEgfSwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMSwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzM1LAogCX0sCiAKQEAgLTIzNzgsMTQgKzIxOTAsMTIgQEAKIAlbQlRUVl9CT0FSRF9TSU1VU19HVkMxMTAwXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIlNJTVVTIEdWQzExMDAiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDIsIDIsIDIgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDIsIDIsIDIpLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDNGLAogCQkubXV4c2VsX2hvb2sgICAgPSBndmMxMTAwX211eHNlbCwKIAl9LApAQCAtMjM5Myw0NyArMjIwMyw0MSBAQAogCQkvKiBDYXJsb3MgU2lsdmEgcjNwZWtAcjNwZWsuaG9tZWxpbnV4Lm9yZyB8fCBjYXJkIDB4NzUgKi8KIAkJLm5hbWUgICAgICAgICAgID0gIk5HUyBOR1NUVisiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkudHVuZXIgICAgICAgICAgPSAwLAogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwODAwNywKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAwLCAwIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAwLCAwKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwLCAwLCAwLCAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDAwMDAwMywKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuaGFzX3JlbW90ZSAgICAgPSAxLAogCX0sCiAJW0JUVFZfQk9BUkRfTE1MQlQ0XSA9IHsKIAkJLyogaHR0cDovL2xpbnV4bWVkaWFsYWJzLmNvbSAqLwogCQkubmFtZSAgICAgICAgICAgPSAiTE1MQlQ0IiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwgLyogSU4xLElOMixJTjMsSU40ICovCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAotCQkuc3ZocyAgICAgICAgICAgPSBVTlNFVCwKLQkJLm11eHNlbCAgICAgICAgID0geyAyLCAzLCAxLCAwIH0sCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzLCAxLCAwKSwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfVEVLUkFNX00yMDVdID0gewogCQkvKiBIZWxtcm9vcyBIYXJyaSA8aGFycmkuaGVsbXJvb3NAcHAuaW5ldC5maT4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIlRla3JhbSBNMjA1IFBSTyIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfUEFMLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4NjgsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMHg2OCwgMHg2OCwgMHg2MSwgMHg2MSB9LAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJfSwKQEAgLTI0NDQsMTggKzIyNDgsMTYgQEAKIAkJLyogYnQ4NzggVFYgKyBGTSB3aXRob3V0IHN1YnN5c3RlbSBJRCAqLwogCQkubmFtZSAgICAgICAgICAgPSAiQ29uY2VwdHJvbmljIENPTlRWRk1pIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMDgwMDcsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMSwgMiwgMiB9LAogCQkuZ3Bpb211dGUgCT0gMywKIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuaGFzX3JlbW90ZSAgICAgPSAxLAogCQkuaGFzX3JhZGlvICAgICAgPSAxLAogCX0sCkBAIC0yNDY2LDM3ICsyMjY4LDM0IEBACiAJCS8qMHg3OSBpbiBidHR2LmgqLwogCQkubmFtZSAgICAgICAgICAgPSAiRXVyZXN5cyBQaWNvbG8gVGV0cmEiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCiAJCS5ncGlvbWFzayAgICAgICA9IDAsCiAJCS5ncGlvbWFzazIgICAgICA9IDB4M0M8PDE2LC8qU2V0IHRoZSBHUElPWzE4XS0+R1BJT1syMV0gYXMgb3V0cHV0IHBpbi49PT4gZHJpdmUgdGhlIHZpZGVvIGlucHV0cyB0aHJvdWdoIGFuYWxvZyBtdWx0aXBsZXhlcnMqLwogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAotCQkubXV4c2VsICAgICAgICAgPSB7MiwyLDIsMn0sLyo4NzhBIGlucHV0IGlzIGFsd2F5cyBNVVgwLCBzZWUgYWJvdmUuKi8KKwkJLyo4NzhBIGlucHV0IGlzIGFsd2F5cyBNVVgwLCBzZWUgYWJvdmUuKi8KKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDIsIDIsIDIpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDAsIDAsIDAgfSwgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkubXV4c2VsX2hvb2sgICAgPSBwaWNvbG9fdGV0cmFfbXV4c2VsLC8qUmVxdWlyZWQgYXMgaXQgZG9lc24ndCBmb2xsb3cgdGhlIGNsYXNzaWMgaW5wdXQgc2VsZWN0aW9uIHBvbGljeSovCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX1NQSVJJVF9UVl0gPSB7CiAJCS8qIFNwaXJpdCBUViBUdW5lciBmcm9tIGh0dHA6Ly9zcGlyaXRtb2RlbXMuY29tLmF1ICovCiAJCS8qIFN0YWZmb3JkIEdvb2RzZWxsIDxzdXJnZUBnb2xpYXRoLmhvbWV1bml4Lm9yZz4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIlNwaXJpdCBUViBUdW5lciIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDAwMDAwMGYsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMSwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCB9LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9URU1JQ19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAl9LApAQCAtMjUwNSwxMSArMjMwNCw5IEBACiAJCS5uYW1lICAgICAgICAgICA9ICJBVmVyTWVkaWEgQVZlclRWIERWQi1UIDc3MSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDIsCiAJCS5zdmhzICAgICAgICAgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkJLm11eHNlbCAgICAgICAgID0geyAzICwgMyB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMywgMyksCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCkBAIC0yNTI0LDU0ICsyMzIxLDQ3IEBACiAJCS8qIEJhc2VkIG9uIHRoZSBOZWJ1bGEgY2FyZCBkYXRhIC0gYWRkZWQgcmVtb3RlIGFuZCBuZXcgY2FyZCBudW1iZXIgLSBCVFRWX0JPQVJEX0FWRFZCVF83NjEsIHNlZSBhbHNvIGlyLWtiZC1ncGlvLmMgKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkF2ZXJNZWRpYSBBdmVyVFYgRFZCLVQgNzYxIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMiwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsCiAJCS5zdmhzICAgICAgICAgICA9IDEsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMywgMSwgMiwgMCB9LCAvKiBDb21wMCwgUy1WaWRlbywgPywgPyAqLworCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMywgMSwgMiwgMCksIC8qIENvbXAwLCBTLVZpZGVvLCA/LCA/ICovCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuaGFzX2R2YiAgICAgICAgPSAxLAogCQkubm9fZ3Bpb2lycSAgICAgPSAxLAogCQkuaGFzX3JlbW90ZSAgICAgPSAxLAogCX0sCiAJW0JUVFZfQk9BUkRfTUFUUklYX1ZJU0lPTlNRXSA9IHsKIAkJLyogYW5kcmUuc2Nod2FyekBtYXRyaXgtdmlzaW9uLmRlICovCi0JCS5uYW1lICAgICAgICAgICAgID0gIk1BVFJJWCBWaXNpb24gU2lnbWEtU1EiLAotCQkudmlkZW9faW5wdXRzICAgICA9IDE2LAotCQkuYXVkaW9faW5wdXRzICAgICA9IDAsCi0JCS50dW5lciAgICAgICAgICAgID0gVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICAgID0gVU5TRVQsCi0JCS5ncGlvbWFzayAgICAgICAgID0gMHgwLAotCQkubXV4c2VsICAgICAgICAgICA9IHsgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwKLQkJCQkzLCAzLCAzLCAzLCAzLCAzLCAzLCAzIH0sCi0JCS5tdXhzZWxfaG9vayAgICAgID0gc2lnbWFTUV9tdXhzZWwsCi0JCS5ncGlvbXV4ICAgICAgICAgID0geyAwIH0sCi0JCS5ub19tc3AzNHh4ICAgICAgID0gMSwKLQkJLnBsbCAgICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICAgID0gVU5TRVQsCi0JCS50dW5lcl9hZGRyCSAgPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkubmFtZQkJPSAiTUFUUklYIFZpc2lvbiBTaWdtYS1TUSIsCisJCS52aWRlb19pbnB1dHMJPSAxNiwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnN2aHMJCT0gTk9fU1ZIUywKKwkJLmdwaW9tYXNrCT0gMHgwLAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzKSwKKwkJLm11eHNlbF9ob29rCT0gc2lnbWFTUV9tdXhzZWwsCisJCS5ncGlvbXV4CT0geyAwIH0sCisJCS5ub19tc3AzNHh4CT0gMSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9NQVRSSVhfVklTSU9OU0xDXSA9IHsKIAkJLyogYW5kcmUuc2Nod2FyekBtYXRyaXgtdmlzaW9uLmRlICovCi0JCS5uYW1lICAgICAgICAgICAgID0gIk1BVFJJWCBWaXNpb24gU2lnbWEtU0xDIiwKLQkJLnZpZGVvX2lucHV0cyAgICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgICA9IDAsCi0JCS50dW5lciAgICAgICAgICAgID0gVU5TRVQsCi0JCS5zdmhzICAgICAgICAgICAgID0gVU5TRVQsCi0JCS5ncGlvbWFzayAgICAgICAgID0gMHgwLAotCQkubXV4c2VsICAgICAgICAgICA9IHsgMiwgMiwgMiwgMiB9LAotCQkubXV4c2VsX2hvb2sgICAgICA9IHNpZ21hU0xDX211eHNlbCwKLQkJLmdwaW9tdXggICAgICAgICAgPSB7IDAgfSwKLQkJLm5vX21zcDM0eHggICAgICAgPSAxLAotCQkucGxsICAgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgICAgPSBVTlNFVCwKLQkJLnR1bmVyX2FkZHIJICA9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5uYW1lCQk9ICJNQVRSSVggVmlzaW9uIFNpZ21hLVNMQyIsCisJCS52aWRlb19pbnB1dHMJPSA0LAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkuc3ZocwkJPSBOT19TVkhTLAorCQkuZ3Bpb21hc2sJPSAweDAsCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDIsIDIsIDIpLAorCQkubXV4c2VsX2hvb2sJPSBzaWdtYVNMQ19tdXhzZWwsCisJCS5ncGlvbXV4CT0geyAwIH0sCisJCS5ub19tc3AzNHh4CT0gMSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJfSwKIAkJLyogQlRUVl9CT0FSRF9BUEFDX1ZJRVdDT01QICovCiAJW0JUVFZfQk9BUkRfQVBBQ19WSUVXQ09NUF0gPSB7CkBAIC0yNTc5LDE4ICsyMzY5LDE2IEBACiAJCS8qIGJ0ODc4IFRWICsgRk0gMHgwMDAwMDAwMCBzdWJzeXN0ZW0gSUQgKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkFQQUMgVmlld2NvbXAgODc4KEFNQVgpIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMiwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4RkYsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMiwgMCwgMCwgMCB9LAogCQkuZ3Bpb211dGUgCT0gMTAsCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19QQUwsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmhhc19yZW1vdGUgICAgID0gMSwgICAvKiBtaW5pcmVtb3RlIHdvcmtzLCBzZWUgaXIta2JkLWdwaW8uYyAqLwogCQkuaGFzX3JhZGlvICAgICAgPSAxLCAgIC8qIG5vdCBldmVyeSBjYXJkIGhhcyByYWRpbyAqLwogCX0sCkBAIC0yNTk5LDQ2ICsyMzg3LDQwIEBACiAJW0JUVFZfQk9BUkRfRFZJQ09fRFZCVF9MSVRFXSA9IHsKIAkJLyogQ2hyaXMgUGFzY29lIDxjLnBhc2NvZUBpdGVlLnVxLmVkdS5hdT4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkRWaUNPIEZ1c2lvbkhEVFYgRFZCLVQgTGl0ZSIsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMiAgICAgPSAxLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS5ub192aWRlbyAgICAgICA9IDEsCiAJCS5oYXNfZHZiICAgICAgICA9IDEsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX1ZHRUFSX01ZVkNEXSA9IHsKIAkJLyogU3RldmVuIDxwaG90b24zOEBwY2hvbWUuY29tLnR3PiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiVi1HZWFyIE15VkNEIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgzZiwKLQkJLm11eHNlbCAgICAgICAgID0gezIsIDMsIDEsIDAgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkuZ3Bpb211eCAgICAgICAgPSB7MHgzMSwgMHgzMSwgMHgzMSwgMHgzMSB9LAogCQkuZ3Bpb211dGUgCT0gMHgzMSwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX05UU0NfTSwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuaGFzX3JhZGlvICAgICAgPSAwLAogCX0sCiAJW0JUVFZfQk9BUkRfU1VQRVJfVFZdID0gewogCQkvKiBSaWNrIEMgPGNyeXB0ZHJhZ29vbkBnbWFpbC5jb20+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJTdXBlciBUViBUdW5lciIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMCB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMCksCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1BISUxJUFNfTlRTQywKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwODAwNywKIAkJLmdwaW9tdXggICAgICAgID0geyAwLCAweDAwMDAwMSwwLDAgfSwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMSwKQEAgLTI2NDgsMTcgKzI0MzAsMTUgQEAKIAkJLyogQ2hyaXMgRmFubmluZyA8dmlkZW80bGludXhAaGF5ZG9uLm5ldD4gKi8KIAkJLm5hbWUgICAgICAgICAgID0gIlRpYmV0IFN5c3RlbXMgJ1Byb2dyZXNzIERWUicgQ1MxNiIsCiAJCS52aWRlb19pbnB1dHMgICA9IDE2LAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiB9LAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiwgMiksCiAJCS5wbGwJCT0gUExMXzI4LAogCQkubm9fbXNwMzR4eCAgICAgPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLAogCQkubm9fdGRhNzQzMgk9IDEsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLm11eHNlbF9ob29rICAgID0gdGliZXRDUzE2X211eHNlbCwKIAl9LAogCVtCVFRWX0JPQVJEX0tPRElDT01fNDQwMFJdID0gewpAQCAtMjY3NSwxMiArMjQ1NSwxMCBAQAogCQkqLwogCQkubmFtZSAgICAgICAgICAgPSAiS29kaWNvbSA0NDAwUiAobWFzdGVyKSIsCiAJCS52aWRlb19pbnB1dHMJPSAxNiwKLQkJLmF1ZGlvX2lucHV0cwk9IDAsCi0JCS50dW5lcgkJPSBVTlNFVCwKLQkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkJLnN2aHMJCT0gVU5TRVQsCisJCS5zdmhzCQk9IE5PX1NWSFMsCiAJCS8qIEdQSU8gYml0cyAwLTkgdXNlZCBmb3IgYW5hbG9nIHN3aXRjaDoKIAkJKiAgIDAwIC0gMDM6CWNhbWVyYSBzZWxlY3RvcgogCQkqICAgMDQgLSAwNjoJY2hhbm5lbCAoY29udHJvbGxlcikgc2VsZWN0b3IKQEAgLTI2OTEsNyArMjQ2OSw3IEBACiAJCSovCiAJCS5ncGlvbWFzawk9IDB4MDAwM2ZmLAogCQkubm9fZ3Bpb2lycSAgICAgPSAxLAotCQkubXV4c2VsCQk9IHsgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMywgMyB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzKSwKIAkJLnBsbAkJPSBQTExfMjgsCiAJCS5ub19tc3AzNHh4CT0gMSwKIAkJLm5vX3RkYTc0MzIJPSAxLApAQCAtMjcwNywxNSArMjQ4NSwxMyBAQAogCQkqLwogCQkubmFtZQkJPSAiS29kaWNvbSA0NDAwUiAoc2xhdmUpIiwKIAkJLnZpZGVvX2lucHV0cwk9IDE2LAotCQkuYXVkaW9faW5wdXRzCT0gMCwKLQkJLnR1bmVyCQk9IFVOU0VULAotCQkudHVuZXJfdHlwZQk9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkudHVuZXJfdHlwZQk9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAotCQkuc3ZocwkJPSBVTlNFVCwKKwkJLnN2aHMJCT0gTk9fU1ZIUywKIAkJLmdwaW9tYXNrCT0gMHgwMTAwMDAsCiAJCS5ub19ncGlvaXJxICAgICA9IDEsCi0JCS5tdXhzZWwJCT0geyAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzLCAzIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMsIDMpLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkubm9fdGRhNzQzMgk9IDEsCkBAIC0yNzI4LDI3ICsyNTA0LDIzIEBACiAJCS8qIEFkbGluayBSVFYyNCB3aXRoIHNwZWNpYWwgdW5sb2NrIGNvZGVzICovCiAJCS5uYW1lICAgICAgICAgICA9ICJBZGxpbmsgUlRWMjQiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDAgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDApLAogCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJfSwKIAkJLyogLS0tLSBjYXJkIDB4ODctLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJW0JUVFZfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl81X0xJVEVdID0gewogCQkvKiBNaWNoYWVsIEtydWZreSA8bWtydWZreUBtMWsubmV0PiAqLwogCQkubmFtZSAgICAgICAgICAgPSAiRFZpQ08gRnVzaW9uSERUViA1IExpdGUiLAotCQkudHVuZXIgICAgICAgICAgPSAwLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9MR19URFZTX0gwNlhGLCAvKiBURFZTLUgwNjRGICovCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKLQkJLm11eHNlbAkJPSB7IDIsIDMsIDEgfSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMywgMSksCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDBlMDAwMDcsCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMHgwMDQwMDAwNSwgMCwgMHgwMDAwMDAwMSwgMCB9LAogCQkuZ3Bpb211dGUgCT0gMHgwMGMwMDAwNywKQEAgLTI3NjIsNzUgKzI1MzQsNjggQEAKIAkJLyogTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+ICovCiAJCS5uYW1lCQk9ICJBY29ycCBZODc4RiIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4MDFmZTAwLAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAweDAwMWUwMCwgMCwgMHgwMTgwMDAsIDB4MDE0MDAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAweDAwMjAwMCwKIAkJLm5lZWRzX3R2YXVkaW8JPSAxLAogCQkucGxsCQk9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9ZTUVDX1RWRjY2VDVfQl9ERkYsCiAJCS50dW5lcl9hZGRyCT0gMHhjMSA+PjEsCi0JCS5yYWRpb19hZGRyICAgICA9IDB4YzEgPj4xLAogCQkuaGFzX3JhZGlvCT0gMSwKIAl9LAogCQkvKiAtLS0tIGNhcmQgMHg4OSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJW0JUVFZfQk9BUkRfQ09OQ0VQVFJPTklDX0NUVkZNSTJdID0gewogCQkubmFtZSAgICAgICAgICAgPSAiQ29uY2VwdHJvbmljIENUVkZNaSB2MiIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDAxYzAwMDcsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMSwgMiwgMiB9LAogCQkuZ3Bpb211dGUgCT0gMywKIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9URU5BXzk1MzNfREksCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLmhhc19yZW1vdGUgICAgID0gMSwKIAkJLmhhc19yYWRpbyAgICAgID0gMSwKIAl9LAogCQkvKiAtLS0tIGNhcmQgMHg4YSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAJW0JUVFZfQk9BUkRfUFZfQlQ4NzhQXzJFXSA9IHsKLQkJLm5hbWUgICAgICAgICAgPSAiUHJvbGluayBQaXhlbHZpZXcgUFYtQlQ4NzhQKyAoUmV2LjJFKSIsCi0JCS52aWRlb19pbnB1dHMgID0gNSwKLQkJLmF1ZGlvX2lucHV0cyAgPSAxLAotCQkudHVuZXIgICAgICAgICA9IDAsCi0JCS5zdmhzICAgICAgICAgID0gMywKLQkJLmdwaW9tYXNrICAgICAgPSAweDAxZmUwMCwKLQkJLm11eHNlbCAgICAgICAgPSB7IDIsMywxLDEsLTEgfSwKLQkJLmRpZ2l0YWxfbW9kZSAgPSBESUdJVEFMX01PREVfQ0FNRVJBLAotCQkuZ3Bpb211eCAgICAgICA9IHsgMHgwMDQwMCwgMHgxMDQwMCwgMHgwNDQwMCwgMHg4MDAwMCB9LAotCQkuZ3Bpb211dGUgICAgICA9IDB4MTI0MDAsCi0JCS5ub19tc3AzNHh4ICAgID0gMSwKLQkJLnBsbCAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgID0gVFVORVJfTEdfUEFMX0ZNLAorCQkubmFtZQkJPSAiUHJvbGluayBQaXhlbHZpZXcgUFYtQlQ4NzhQKyAoUmV2LjJFKSIsCisJCS52aWRlb19pbnB1dHMJPSA1LAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLworCQkuc3ZocwkJPSAzLAorCQkuaGFzX2RpZ19pbgk9IDEsCisJCS5ncGlvbWFzawk9IDB4MDFmZTAwLAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxLCAwKSwgLyogaW4gNCBpcyBkaWdpdGFsICovCisJCS8qIC5kaWdpdGFsX21vZGU9IERJR0lUQUxfTU9ERV9DQU1FUkEsICovCisJCS5ncGlvbXV4CT0geyAweDAwNDAwLCAweDEwNDAwLCAweDA0NDAwLCAweDgwMDAwIH0sCisJCS5ncGlvbXV0ZQk9IDB4MTI0MDAsCisJCS5ub19tc3AzNHh4CT0gMSwKKwkJLnBsbAkJPSBQTExfMjgsCisJCS50dW5lcl90eXBlCT0gVFVORVJfTEdfUEFMX0ZNLAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCi0JCS5oYXNfcmVtb3RlICAgID0gMSwKKwkJLmhhc19yZW1vdGUJPSAxLAogCX0sCiAJCS8qIC0tLS0gY2FyZCAweDhiIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlbQlRUVl9CT0FSRF9QVl9NNDkwMF0gPSB7CiAJCS8qIFPDqXJnaW8gRm9ydGllciA8c2VyZ2lvZm9ydGllckB5YWhvby5jb20uYnI+ICovCiAJCS5uYW1lICAgICAgICAgICA9ICJQcm9saW5rIFBpeGVsVmlldyBQbGF5VFYgTVBFRzIgUFYtTTQ5MDAiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDNmLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDB4MjEsIDB4MjAsIDB4MjQsIDB4MmMgfSwKIAkJLmdwaW9tdXRlIAk9IDB4MjksCiAJCS5ub19tc3AzNHh4ICAgICA9IDEsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfWU1FQ19UVkZfNTUzM01GLAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkuaGFzX3JhZGlvICAgICAgPSAxLAogCQkuaGFzX3JlbW90ZSAgICAgPSAxLAogCX0sCkBAIC0yODUwLDE3ICsyNjE1LDE1IEBACiAJW0JUVFZfQk9BUkRfT1NQUkVZNDQwXSAgPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJPc3ByZXkgNDQwIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMiwgLyogdGhpcyBpcyBtZWFuaW5nbGVzcyAqLwotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwKLQkJLnN2aHMgICAgICAgICAgID0gVU5TRVQsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMCwgMSB9LCAvKiAzLDAsMSBhcmUgZ3Vlc3NlcyAqLworCQkvKiAuYXVkaW9faW5wdXRzPSAyLCAqLworCQkuc3ZocyAgICAgICAgICAgPSBOT19TVkhTLAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMCwgMSksIC8qIDMsMCwxIGFyZSBndWVzc2VzICovCiAJCS5ncGlvbWFzawk9IDB4MzAzLAogCQkuZ3Bpb211dGUJPSAweDAwMCwgLyogaW50ICsgMzJrSHogKi8KIAkJLmdwaW9tdXgJPSB7IDAsIDAsIDB4MDAwLCAweDEwMH0sCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLm5vX21zcDM0eHggICAgID0gMSwKIAkJLm5vX3RkYTk4NzUgICAgID0gMSwKIAkJLm5vX3RkYTc0MzIgICAgID0gMSwKQEAgLTI4NjksMjggKzI2MzIsMjUgQEAKIAlbQlRUVl9CT0FSRF9BU09VTkRfU0tZRVlFXSA9IHsKIAkJLm5hbWUJCT0gIkFzb3VuZCBTa3lleWUgUENUViIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDE1LAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAyLCAwLCAwLCAwIH0sCiAJCS5ncGlvbXV0ZSAJPSAxLAogCQkubmVlZHNfdHZhdWRpbwk9IDEsCiAJCS5wbGwJCT0gUExMXzI4LAogCQkudHVuZXJfdHlwZQk9IFRVTkVSX1BISUxJUFNfTlRTQywKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJCS8qIC0tLS0gY2FyZCAweDhlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAlbQlRUVl9CT0FSRF9TQUJSRU5UX1RWRk1dID0gewogCQkubmFtZQkJPSAiU2FicmVudCBUVi1GTSAoYnR0diB2ZXJzaW9uKSIsCiAJCS52aWRlb19pbnB1dHMJPSAzLAotCQkuYXVkaW9faW5wdXRzCT0gMSwKLQkJLnR1bmVyCQk9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzCQk9IDIsCiAJCS5ncGlvbWFzawk9IDB4MTA4MDA3LAotCQkubXV4c2VsCQk9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAzLCAxLCAxKSwKIAkJLmdwaW9tdXggCT0geyAxMDAwMDAsIDEwMDAwMiwgMTAwMDAyLCAxMDAwMDAgfSwKIAkJLm5vX21zcDM0eHgJPSAxLAogCQkubm9fdGRhOTg3NSAgICAgPSAxLApAQCAtMjkwNCwxNyArMjY2NCwxNSBAQAogCVtCVFRWX0JPQVJEX0hBVVBQQVVHRV9JTVBBQ1RWQ0JdID0gewogCQkubmFtZQkJPSAiSGF1cHBhdWdlIEltcGFjdFZDQiAoYnQ4NzgpIiwKIAkJLnZpZGVvX2lucHV0cwk9IDQsCi0JCS5hdWRpb19pbnB1dHMJPSAwLAotCQkudHVuZXIJCT0gVU5TRVQsCi0JCS5zdmhzCQk9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLworCQkuc3ZocwkJPSBOT19TVkhTLAogCQkuZ3Bpb21hc2sJPSAweDBmLCAvKiBvbGQ6IDcgKi8KLQkJLm11eHNlbAkJPSB7IDAsIDEsIDMsIDIgfSwgLyogQ29tcG9zaXRlIDAtMyAqLworCQkubXV4c2VsCQk9IE1VWFNFTCgwLCAxLCAzLCAyKSwgLyogQ29tcG9zaXRlIDAtMyAqLwogCQkubm9fbXNwMzR4eAk9IDEsCiAJCS5ub190ZGE5ODc1ICAgICA9IDEsCiAJCS5ub190ZGE3NDMyICAgICA9IDEsCi0JCS50dW5lcl90eXBlCT0gVU5TRVQsCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9NQUNIVFZfTUFHSUNUVl0gPSB7CiAJCS8qIEp1bGlhbiBDYWxhYnkgPGp1bGlhbi5jYWxhYnlAZ21haWwuY29tPgpAQCAtMjkyNiwxNiArMjY4NCwxNCBAQAogCiAJCS5uYW1lICAgICAgICAgICA9ICJNYWdpY1RWIiwgLyogcmVicmFuZGVkIE1hY2hUViAqLwogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSA3LAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDEsIDIsIDMgfSwKIAkJLmdwaW9tdXRlIAk9IDQsCiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1RFTUlDXzQwMDlGUjVfUEFMLAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCiAJCS5oYXNfcmFkaW8gICAgICA9IDEsCiAJCS5oYXNfcmVtb3RlICAgICA9IDEsCkBAIC0yOTQzLDM2ICsyNjk5LDMwIEBACiAJW0JUVFZfQk9BUkRfU1NBSV9TRUNVUklUWV0gPSB7CiAJCS5uYW1lCQk9ICJTU0FJIFNlY3VyaXR5IFZpZGVvIEludGVyZmFjZSIsCiAJCS52aWRlb19pbnB1dHMJPSA0LAotCQkuYXVkaW9faW5wdXRzCT0gMCwKLQkJLnR1bmVyCQk9IFVOU0VULAotCQkuc3ZocwkJPSBVTlNFVCwKLQkJLm11eHNlbAkJPSB7IDAsIDEsIDIsIDMgfSwKLQkJLnR1bmVyX3R5cGUJPSBVTlNFVCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnN2aHMJCT0gTk9fU1ZIUywKKwkJLm11eHNlbAkJPSBNVVhTRUwoMCwgMSwgMiwgMyksCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAlbQlRUVl9CT0FSRF9TU0FJX1VMVFJBU09VTkRdID0gewogCQkubmFtZQkJPSAiU1NBSSBVbHRyYXNvdW5kIFZpZGVvIEludGVyZmFjZSIsCiAJCS52aWRlb19pbnB1dHMJPSAyLAotCQkuYXVkaW9faW5wdXRzCT0gMCwKLQkJLnR1bmVyCQk9IFVOU0VULAorCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocwkJPSAxLAotCQkubXV4c2VsCQk9IHsgMiwgMCwgMSwgMyB9LAotCQkudHVuZXJfdHlwZQk9IFVOU0VULAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAwLCAxLCAzKSwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCS8qIC0tLS0gY2FyZCAweDk0LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCVtCVFRWX0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfMl0gPSB7CiAJCS5uYW1lICAgICAgICAgICA9ICJEVmlDTyBGdXNpb25IRFRWIDIiLAotCQkudHVuZXIgICAgICAgICAgPSAwLAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX0ZDVjEyMzZELAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCi0JCS5tdXhzZWwJCT0geyAyLCAzLCAxIH0sCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDMsIDEpLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwZTAwMDA3LAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDB4MDA0MDAwMDUsIDAsIDB4MDAwMDAwMDEsIDAgfSwKIAkJLmdwaW9tdXRlIAk9IDB4MDBjMDAwMDcsCkBAIC0yOTg0LDM2ICsyNzM0LDMxIEBACiAJW0JUVFZfQk9BUkRfVFlQSE9PTl9UVlRVTkVSUENJXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIlR5cGhvb24gVFYtVHVuZXIgUENJICg1MDY4NCkiLAogCQkudmlkZW9faW5wdXRzICAgPSAzLAotCQkuYXVkaW9faW5wdXRzICAgPSAxLAotCQkudHVuZXIgICAgICAgICAgPSAwLAorCQkvKiAuYXVkaW9faW5wdXRzPSAxLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAyLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDMwMTRmLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDB4MjAwMDEsMHgxMDAwMSwgMCwgMCB9LAogCQkuZ3Bpb211dGUgICAgICAgPSAxMCwKIAkJLm5lZWRzX3R2YXVkaW8gID0gMSwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9QSElMSVBTX1BBTF9JLAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAogCX0sCiAJW0JUVFZfQk9BUkRfR0VPVklTSU9OX0dWNjAwXSA9IHsKIAkJLyogZW1obkB1c2IudmUgKi8KLQkJLm5hbWUgICAgICAgICAgICAgPSAiR2VvdmlzaW9uIEdWLTYwMCIsCi0JCS52aWRlb19pbnB1dHMgICAgID0gMTYsCi0JCS5hdWRpb19pbnB1dHMgICAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgICAgPSBVTlNFVCwKLQkJLnN2aHMgICAgICAgICAgICAgPSBVTlNFVCwKLQkJLmdwaW9tYXNrICAgICAgICAgPSAweDAsCi0JCS5tdXhzZWwgICAgICAgICAgID0geyAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLAotCQkJCSAgICAgIDIsIDIsIDIsIDIsIDIsIDIsIDIsIDIgfSwKLQkJLm11eHNlbF9ob29rICAgICAgPSBnZW92aXNpb25fbXV4c2VsLAotCQkuZ3Bpb211eCAgICAgICAgICA9IHsgMCB9LAotCQkubm9fbXNwMzR4eCAgICAgICA9IDEsCi0JCS5wbGwgICAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgICA9IFVOU0VULAotCQkudHVuZXJfYWRkcgkgID0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgICAgPSBBRERSX1VOU0VULAorCQkubmFtZQkJPSAiR2VvdmlzaW9uIEdWLTYwMCIsCisJCS52aWRlb19pbnB1dHMJPSAxNiwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KKwkJLnN2aHMJCT0gTk9fU1ZIUywKKwkJLmdwaW9tYXNrCT0gMHgwLAorCQkubXV4c2VsCQk9IE1VWFNFTCgyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyLCAyKSwKKwkJLm11eHNlbF9ob29rCT0gZ2VvdmlzaW9uX211eHNlbCwKKwkJLmdwaW9tdXgJPSB7IDAgfSwKKwkJLm5vX21zcDM0eHgJPSAxLAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAl9LAogCVtCVFRWX0JPQVJEX0tPWlVNSV9LVFZfMDFDXSA9IHsKIAkJLyogTWF1cm8gTGFjeSA8bWF1cm9AbGFjeS5jb20uYXI+CkBAIC0zMDIxLDE3ICsyNzY2LDE1IEBACiAKIAkJLm5hbWUgICAgICAgICAgID0gIktvenVtaSBLVFYtMDFDIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gMywKLQkJLmF1ZGlvX2lucHV0cyAgID0gMSwKLQkJLnR1bmVyICAgICAgICAgID0gMCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMiwKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMDgwMDcsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMSwgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMSwgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMSwgMiwgMiB9LCAvKiBDT05UVkZNaSAqLwogCQkuZ3Bpb211dGUgCT0gMywgLyogQ09OVFZGTWkgKi8KIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMsIC8qIFRDTCBNSzMgKi8KIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkuaGFzX3JhZGlvICAgICAgPSAxLAogCQkuaGFzX3JlbW90ZSAgICAgPSAxLApAQCAtMzA0MSw4ICsyNzg0LDcgQEAKIAkJICAgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmcgKi8KIAkJLm5hbWUgICAgICAgICAgID0gIkVuY29yZSBFTkwgVFYtRk0tMiIsCiAJCS52aWRlb19pbnB1dHMgICA9IDMsCi0JCS5hdWRpb19pbnB1dHMgICA9IDEsCi0JCS50dW5lciAgICAgICAgICA9IDAsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCiAJCS5zdmhzICAgICAgICAgICA9IDIsCiAJCS8qIGJpdCA2ICAgICAgICAgIC0+IElSIGRpc2FibGVkCiAJCSAgIGJpdCAxOC8xNyA9IDAwIC0+IG11dGUKQEAgLTMwNTEsMTIgKzI3OTMsMTEgQEAKIAkJCSAgICAgICAxMSAtPiBpbnRlcm5hbCBhdWRpbyBpbnB1dAogCQkgKi8KIAkJLmdwaW9tYXNrICAgICAgID0gMHgwNjAwNDAsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMiwgMywgMyB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMiwgMywgMyksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMHg2MDAwMCwgMHg2MDAwMCwgMHgyMDAwMCwgMHgyMDAwMCB9LAogCQkuZ3Bpb211dGUgCT0gMCwKIAkJLnR1bmVyX3R5cGUJPSBUVU5FUl9UQ0xfTUYwMkdJUF81TiwKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAogCQkuaGFzX3JhZGlvICAgICAgPSAxLAogCQkuaGFzX3JlbW90ZSAgICAgPSAxLApAQCAtMzA2NSw1MCArMjgwNiwxMTEgQEAKIAkJLyogRC5IZWVyQFBoeXRlYy5kZSAqLwogCQkubmFtZSAgICAgICAgICAgPSAiUEhZVEVDIFZELTAxMiAoYnQ4NzgpIiwKIAkJLnZpZGVvX2lucHV0cyAgID0gNCwKLQkJLmF1ZGlvX2lucHV0cyAgID0gMCwKLQkJLnR1bmVyICAgICAgICAgID0gVU5TRVQsIC8qIGNhcmQgaGFzIG5vIHR1bmVyICovCi0JCS5zdmhzICAgICAgICAgICA9IFVOU0VULCAvKiBjYXJkIGhhcyBubyBzLXZpZGVvICovCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCiAJCS5ncGlvbWFzayAgICAgICA9IDB4MDAsCi0JCS5tdXhzZWwgICAgICAgICA9IHsgMCwgMiwgMywgMSB9LAorCQkubXV4c2VsICAgICAgICAgPSBNVVhTRUwoMCwgMiwgMywgMSksCiAJCS5ncGlvbXV4ICAgICAgICA9IHsgMCwgMCwgMCwgMCB9LCAvKiBjYXJkIGhhcyBubyBhdWRpbyAqLwogCQkubmVlZHNfdHZhdWRpbyAgPSAwLAogCQkucGxsICAgICAgICAgICAgPSBQTExfMjgsCi0JCS50dW5lcl90eXBlICAgICA9IFVOU0VULAorCQkudHVuZXJfdHlwZSAgICAgPSBUVU5FUl9BQlNFTlQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAl9LAogCQlbQlRUVl9CT0FSRF9WRDAxMl9YMV0gPSB7CiAJCS8qIEQuSGVlckBQaHl0ZWMuZGUgKi8KIAkJLm5hbWUgICAgICAgICAgID0gIlBIWVRFQyBWRC0wMTItWDEgKGJ0ODc4KSIsCiAJCS52aWRlb19pbnB1dHMgICA9IDQsCi0JCS5hdWRpb19pbnB1dHMgICA9IDAsCi0JCS50dW5lciAgICAgICAgICA9IFVOU0VULCAvKiBjYXJkIGhhcyBubyB0dW5lciAqLworCQkvKiAuYXVkaW9faW5wdXRzPSAwLCAqLwogCQkuc3ZocyAgICAgICAgICAgPSAzLAogCQkuZ3Bpb21hc2sgICAgICAgPSAweDAwLAotCQkubXV4c2VsICAgICAgICAgPSB7IDIsIDMsIDEgfSwKKwkJLm11eHNlbCAgICAgICAgID0gTVVYU0VMKDIsIDMsIDEpLAogCQkuZ3Bpb211eCAgICAgICAgPSB7IDAsIDAsIDAsIDAgfSwgLyogY2FyZCBoYXMgbm8gYXVkaW8gKi8KIAkJLm5lZWRzX3R2YXVkaW8gID0gMCwKIAkJLnBsbCAgICAgICAgICAgID0gUExMXzI4LAotCQkudHVuZXJfdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCi0JCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJfSwKIAkJW0JUVFZfQk9BUkRfVkQwMTJfWDJdID0gewogCQkvKiBELkhlZXJAUGh5dGVjLmRlICovCiAJCS5uYW1lICAgICAgICAgICA9ICJQSFlURUMgVkQtMDEyLVgyIChidDg3OCkiLAogCQkudmlkZW9faW5wdXRzICAgPSA0LAotCQkuYXVkaW9faW5wdXRzICAgPSAwLAotCQkudHVuZXIgICAgICAgICAgPSBVTlNFVCwgLyogY2FyZCBoYXMgbm8gdHVuZXIgKi8KKwkJLyogLmF1ZGlvX2lucHV0cz0gMCwgKi8KIAkJLnN2aHMgICAgICAgICAgID0gMywKIAkJLmdwaW9tYXNrICAgICAgID0gMHgwMCwKLQkJLm11eHNlbCAgICAgICAgID0geyAzLCAyLCAxIH0sCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgzLCAyLCAxKSwKIAkJLmdwaW9tdXggICAgICAgID0geyAwLCAwLCAwLCAwIH0sIC8qIGNhcmQgaGFzIG5vIGF1ZGlvICovCiAJCS5uZWVkc190dmF1ZGlvICA9IDAsCiAJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKLQkJLnR1bmVyX3R5cGUgICAgID0gVU5TRVQsCisJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX0FCU0VOVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAotCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAotCX0KKwl9LAorCQlbQlRUVl9CT0FSRF9HRU9WSVNJT05fR1Y4MDBTXSA9IHsKKwkJLyogQnJ1bm8gQ2hyaXN0byA8YmNocmlzdG9AaW5mLnVmc20uYnI+CisJCSAqCisJCSAqIEdlb1Zpc2lvbiBHVi04MDAoUykgaGFzIDQgQ29uZXhhbnQgRnVzaW9uIDg3OEE6CisJCSAqIAkxIGF1ZGlvIGlucHV0ICBwZXIgQlQ4NzhBID0gNCBhdWRpbyBpbnB1dHMKKwkJICogCTQgdmlkZW8gaW5wdXRzIHBlciBCVDg3OEEgPSAxNiB2aWRlbyBpbnB1dHMKKwkJICogVGhpcyBpcyB0aGUgZmlyc3QgQlQ4NzhBIGNoaXAgb2YgdGhlIEdWLTgwMChTKS4gSXQncyB0aGUKKwkJICogIm1hc3RlciIgY2hpcCBhbmQgaXQgY29udHJvbHMgdGhlIHZpZGVvIGlucHV0cyB0aHJvdWdoIGFuCisJCSAqIGFuYWxvZyBtdWx0aXBsZXhlciAoYSBDRDIyTTM0OTQpIHZpYSBzb21lIEdQSU8gcGlucy4gVGhlCisJCSAqIHNsYXZlcyBzaG91bGQgdXNlIGNhcmQgdHlwZSAweDllIChmb2xsb3dpbmcgdGhpcyBvbmUpLgorCQkgKiBUaGVyZSBpcyBhIEVFUFJPTSBvbiB0aGUgY2FyZCB3aGljaCBpcyBjdXJyZW50bHkgbm90IGhhbmRsZWQuCisJCSAqIFRoZSBhdWRpbyBpbnB1dCBpcyBub3Qgd29ya2luZyB5ZXQuCisJCSAqLworCQkubmFtZSAgICAgICAgICAgPSAiR2VvdmlzaW9uIEdWLTgwMChTKSAobWFzdGVyKSIsCisJCS52aWRlb19pbnB1dHMgICA9IDQsCisJCS8qIC5hdWRpb19pbnB1dHM9IDEsICovCisJCS50dW5lcl90eXBlCT0gVFVORVJfQUJTRU5ULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCisJCS5ncGlvbWFzawk9IDB4ZjEwN2YsCisJCS5ub19ncGlvaXJxICAgICA9IDEsCisJCS5tdXhzZWwJCT0gTVVYU0VMKDIsIDIsIDIsIDIpLAorCQkucGxsCQk9IFBMTF8yOCwKKwkJLm5vX21zcDM0eHgJPSAxLAorCQkubm9fdGRhNzQzMgk9IDEsCisJCS5ub190ZGE5ODc1CT0gMSwKKwkJLm11eHNlbF9ob29rICAgID0gZ3Y4MDBzX211eHNlbCwKKwl9LAorCQlbQlRUVl9CT0FSRF9HRU9WSVNJT05fR1Y4MDBTX1NMXSA9IHsKKwkJLyogQnJ1bm8gQ2hyaXN0byA8YmNocmlzdG9AaW5mLnVmc20uYnI+CisJCSAqCisJCSAqIEdlb1Zpc2lvbiBHVi04MDAoUykgaGFzIDQgQ29uZXhhbnQgRnVzaW9uIDg3OEE6CisJCSAqIAkxIGF1ZGlvIGlucHV0ICBwZXIgQlQ4NzhBID0gNCBhdWRpbyBpbnB1dHMKKwkJICogCTQgdmlkZW8gaW5wdXRzIHBlciBCVDg3OEEgPSAxNiB2aWRlbyBpbnB1dHMKKwkJICogVGhlIDMgb3RoZXIgQlQ4NzhBIGNoaXBzIGFyZSAic2xhdmUiIGNoaXBzIG9mIHRoZSBHVi04MDAoUykKKwkJICogYW5kIHNob3VsZCB1c2UgdGhpcyBjYXJkIHR5cGUuCisJCSAqIFRoZSBhdWRpbyBpbnB1dCBpcyBub3Qgd29ya2luZyB5ZXQuCisJCSAqLworCQkubmFtZSAgICAgICAgICAgPSAiR2VvdmlzaW9uIEdWLTgwMChTKSAoc2xhdmUpIiwKKwkJLnZpZGVvX2lucHV0cyAgID0gNCwKKwkJLyogLmF1ZGlvX2lucHV0cz0gMSwgKi8KKwkJLnR1bmVyX3R5cGUJPSBUVU5FUl9BQlNFTlQsCisJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnN2aHMgICAgICAgICAgID0gTk9fU1ZIUywKKwkJLmdwaW9tYXNrCT0gMHgwMCwKKwkJLm5vX2dwaW9pcnEgICAgID0gMSwKKwkJLm11eHNlbAkJPSBNVVhTRUwoMiwgMiwgMiwgMiksCisJCS5wbGwJCT0gUExMXzI4LAorCQkubm9fbXNwMzR4eAk9IDEsCisJCS5ub190ZGE3NDMyCT0gMSwKKwkJLm5vX3RkYTk4NzUJPSAxLAorCQkubXV4c2VsX2hvb2sgICAgPSBndjgwMHNfbXV4c2VsLAorCX0sCisJW0JUVFZfQk9BUkRfUFYxODNdID0geworCQkubmFtZSAgICAgICAgICAgPSAiUHJvVmlkZW8gUFYxODMiLCAvKiAweDlmICovCisJCS52aWRlb19pbnB1dHMgICA9IDIsCisJCS8qIC5hdWRpb19pbnB1dHM9IDAsICovCisJCS5zdmhzICAgICAgICAgICA9IE5PX1NWSFMsCisJCS5ncGlvbWFzayAgICAgICA9IDAsCisJCS5tdXhzZWwgICAgICAgICA9IE1VWFNFTCgyLCAzKSwKKwkJLmdwaW9tdXggICAgICAgID0geyAwIH0sCisJCS5uZWVkc190dmF1ZGlvICA9IDAsCisJCS5ub19tc3AzNHh4ICAgICA9IDEsCisJCS5wbGwgICAgICAgICAgICA9IFBMTF8yOCwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfQUJTRU5ULAorCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCisJfSwKIH07CiAKIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgYnR0dl9udW1fdHZjYXJkcyA9IEFSUkFZX1NJWkUoYnR0dl90dmNhcmRzKTsKQEAgLTMxNTIsNyArMjk1NCw3IEBACiAJCQkgICAgICAgYnR2LT5jLm5yLCBidHYtPmNhcmRpZCAmIDB4ZmZmZiwKIAkJCSAgICAgICAoYnR2LT5jYXJkaWQgPj4gMTYpICYgMHhmZmZmKTsKIAkJCXByaW50ayhLRVJOX0RFQlVHICJwbGVhc2UgbWFpbCBpZCwgYm9hcmQgbmFtZSBhbmQgIgotCQkJICAgICAgICJ0aGUgY29ycmVjdCBjYXJkPSBpbnNtb2Qgb3B0aW9uIHRvIHZpZGVvNGxpbnV4LWxpc3RAcmVkaGF0LmNvbVxuIik7CisJCQkgICAgICAgInRoZSBjb3JyZWN0IGNhcmQ9IGluc21vZCBvcHRpb24gdG8gbGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnXG4iKTsKIAkJfQogCX0KIApAQCAtMzQwMyw4ICszMjA1LDcgQEAKICAqIGhhcyBpdHMgb3duIG11bHRpcGxleGVyICovCiBzdGF0aWMgdm9pZCBlYWdsZV9tdXhzZWwoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KQogewotCWJ0YW9yKCgyKTw8NSwgfigzPDw1KSwgQlQ4NDhfSUZPUk0pOwotCWdwaW9fYml0cygzLGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubXV4c2VsW2lucHV0JjddKTsKKwlncGlvX2JpdHMoMywgaW5wdXQgJiAzKTsKIAogCS8qIGNvbXBvc2l0ZSAqLwogCS8qIHNldCBjaHJvbWEgQURDIHRvIHNsZWVwICovCkBAIC0zNTIzLDYgKzMzMjQsMTcgQEAKIC8qIGluaXRpYWxpemF0aW9uIHBhcnQgdHdvIC0tIGFmdGVyIHJlZ2lzdGVyaW5nIGkyYyBidXMgKi8KIHZvaWQgX19kZXZpbml0IGJ0dHZfaW5pdF9jYXJkMihzdHJ1Y3QgYnR0diAqYnR2KQogeworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCB0dmF1ZGlvX2FkZHJzW10gPSB7CisJCUkyQ19BRERSX1REQTg0MjUgICA+PiAxLAorCQlJMkNfQUREUl9URUE2MzAwICAgPj4gMSwKKwkJSTJDX0FERFJfVEVBNjQyMCAgID4+IDEsCisJCUkyQ19BRERSX1REQTk4NDAgICA+PiAxLAorCQlJMkNfQUREUl9UREE5ODV4X0wgPj4gMSwKKwkJSTJDX0FERFJfVERBOTg1eF9IID4+IDEsCisJCUkyQ19BRERSX1REQTk4NzQgICA+PiAxLAorCQlJMkNfQUREUl9QSUMxNkM1NCAgPj4gMSwKKwkJSTJDX0NMSUVOVF9FTkQKKwl9OwogCWludCBhZGRyPUFERFJfVU5TRVQ7CiAKIAlidHYtPnR1bmVyX3R5cGUgPSBVTlNFVDsKQEAgLTM2MjksNiArMzQ0MSw5IEBACiAJY2FzZSBCVFRWX0JPQVJEX0tPRElDT01fNDQwMFI6CiAJCWtvZGljb200NDAwcl9pbml0KGJ0dik7CiAJCWJyZWFrOworCWNhc2UgQlRUVl9CT0FSRF9HRU9WSVNJT05fR1Y4MDBTOgorCQlndjgwMHNfaW5pdChidHYpOworCQlicmVhazsKIAl9CiAKIAkvKiBwbGwgY29uZmlndXJhdGlvbiAqLwpAQCAtMzY3MCwxMyArMzQ4NSwxMiBAQAogCQlhZGRyID0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lcl9hZGRyOwogCiAJaWYgKFVOU0VUICE9IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXJfdHlwZSkKLQkJaWYoVU5TRVQgPT0gYnR2LT50dW5lcl90eXBlKQorCQlpZiAoVU5TRVQgPT0gYnR2LT50dW5lcl90eXBlKQogCQkJYnR2LT50dW5lcl90eXBlID0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lcl90eXBlOwogCWlmIChVTlNFVCAhPSB0dW5lcltidHYtPmMubnJdKQogCQlidHYtPnR1bmVyX3R5cGUgPSB0dW5lcltidHYtPmMubnJdOwogCi0JaWYgKGJ0di0+dHVuZXJfdHlwZSA9PSBUVU5FUl9BQlNFTlQgfHwKLQkgICAgYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lciA9PSBVTlNFVCkKKwlpZiAoYnR2LT50dW5lcl90eXBlID09IFRVTkVSX0FCU0VOVCkKIAkJcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiB0dW5lciBhYnNlbnRcbiIsIGJ0di0+Yy5ucik7CiAJZWxzZSBpZihidHYtPnR1bmVyX3R5cGUgPT0gVU5TRVQpCiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImJ0dHYlZDogdHVuZXIgdHlwZSB1bnNldFxuIiwgYnR2LT5jLm5yKTsKQEAgLTM2ODQsMTQgKzM0OTgsMzUgQEAKIAkJcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiB0dW5lciB0eXBlPSVkXG4iLCBidHYtPmMubnIsCiAJCSAgICAgICBidHYtPnR1bmVyX3R5cGUpOwogCi0JaWYgKGJ0di0+dHVuZXJfdHlwZSAhPSBVTlNFVCkgeworCWlmIChhdXRvbG9hZCAhPSBVTlNFVCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJidHR2JWQ6IHRoZSBhdXRvbG9hZCBvcHRpb24gaXMgb2Jzb2xldGUuXG4iLCBidHYtPmMubnIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJidHR2JWQ6IHVzZSBvcHRpb24gbXNwMzQwMCwgdGRhNzQzMiBvciB0dmF1ZGlvIHRvXG4iLCBidHYtPmMubnIpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJidHR2JWQ6IG92ZXJyaWRlIHdoaWNoIGF1ZGlvIG1vZHVsZSBzaG91bGQgYmUgdXNlZC5cbiIsIGJ0di0+Yy5ucik7CisJfQorCisJaWYgKFVOU0VUID09IGJ0di0+dHVuZXJfdHlwZSkKKwkJYnR2LT50dW5lcl90eXBlID0gVFVORVJfQUJTRU5UOworCisJaWYgKGJ0di0+dHVuZXJfdHlwZSAhPSBUVU5FUl9BQlNFTlQpIHsKIAkJc3RydWN0IHR1bmVyX3NldHVwIHR1bl9zZXR1cDsKIAorCQkvKiBMb2FkIHR1bmVyIG1vZHVsZSBiZWZvcmUgaXNzdWluZyB0dW5lciBjb25maWcgY2FsbCEgKi8KKwkJaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uaGFzX3JhZGlvKQorCQkJdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmJ0di0+Yy5pMmNfYWRhcCwKKwkJCQkidHVuZXIiLCAidHVuZXIiLCB2NGwyX2kyY190dW5lcl9hZGRycyhBRERSU19SQURJTykpOworCQl2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmYnR2LT5jLmkyY19hZGFwLCAidHVuZXIiLAorCQkJCSJ0dW5lciIsIHY0bDJfaTJjX3R1bmVyX2FkZHJzKEFERFJTX0RFTU9EKSk7CisJCXY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZidHYtPmMuaTJjX2FkYXAsICJ0dW5lciIsCisJCQkJInR1bmVyIiwgdjRsMl9pMmNfdHVuZXJfYWRkcnMoQUREUlNfVFZfV0lUSF9ERU1PRCkpOworCiAJCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UViB8IFRfRElHSVRBTF9UVjsKIAkJdHVuX3NldHVwLnR5cGUgPSBidHYtPnR1bmVyX3R5cGU7CiAJCXR1bl9zZXR1cC5hZGRyID0gYWRkcjsKIAotCQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBUVU5FUl9TRVRfVFlQRV9BRERSLCAmdHVuX3NldHVwKTsKKwkJaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uaGFzX3JhZGlvKQorCQkJdHVuX3NldHVwLm1vZGVfbWFzayB8PSBUX1JBRElPOworCisJCWJ0dHZfY2FsbF9hbGwoYnR2LCB0dW5lciwgc190eXBlX2FkZHIsICZ0dW5fc2V0dXApOwogCX0KIAogCWlmIChidHYtPnRkYTk4ODdfY29uZikgewpAQCAtMzcwMCwxMCArMzUzNSwxMyBAQAogCQl0ZGE5ODg3X2NmZy50dW5lciA9IFRVTkVSX1REQTk4ODc7CiAJCXRkYTk4ODdfY2ZnLnByaXYgPSAmYnR2LT50ZGE5ODg3X2NvbmY7CiAKLQkJYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgVFVORVJfU0VUX0NPTkZJRywgJnRkYTk4ODdfY2ZnKTsKKwkJYnR0dl9jYWxsX2FsbChidHYsIHR1bmVyLCBzX2NvbmZpZywgJnRkYTk4ODdfY2ZnKTsKIAl9CiAKLQlidHYtPnN2aHMgPSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnN2aHM7CisJYnR2LT5kaWcgPSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmhhc19kaWdfaW4gPworCQkgICBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnZpZGVvX2lucHV0cyAtIDEgOiBVTlNFVDsKKwlidHYtPnN2aHMgPSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnN2aHMgPT0gTk9fU1ZIUyA/CisJCSAgICBVTlNFVCA6IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uc3ZoczsKIAlpZiAoc3Zoc1tidHYtPmMubnJdICE9IFVOU0VUKQogCQlidHYtPnN2aHMgPSBzdmhzW2J0di0+Yy5ucl07CiAJaWYgKHJlbW90ZVtidHYtPmMubnJdICE9IFVOU0VUKQpAQCAtMzcyMCwzNCArMzU1OCwxMjcgQEAKIAlpZiAoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5hdWRpb19tb2RlX2dwaW8pCiAJCWJ0di0+YXVkaW9fbW9kZV9ncGlvPWJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uYXVkaW9fbW9kZV9ncGlvOwogCi0JaWYgKCFhdXRvbG9hZCkKLQkJcmV0dXJuOwotCi0JaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXIgPT0gVU5TRVQpCisJaWYgKGJ0di0+dHVuZXJfdHlwZSA9PSBUVU5FUl9BQlNFTlQpCiAJCXJldHVybjsgIC8qIG5vIHR1bmVyIG9yIHJlbGF0ZWQgZHJpdmVycyB0byBsb2FkICovCiAKKwlpZiAoYnR2LT5oYXNfc2FhNjU4OCB8fCBzYWE2NTg4W2J0di0+Yy5ucl0pIHsKKwkJLyogUHJvYmUgZm9yIFJEUyByZWNlaXZlciBjaGlwICovCisJCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBhZGRyc1tdID0geworCQkJMHgyMCA+PiAxLAorCQkJMHgyMiA+PiAxLAorCQkJSTJDX0NMSUVOVF9FTkQKKwkJfTsKKwkJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKworCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZidHYtPmMuaTJjX2FkYXAsCisJCQkJInNhYTY1ODgiLCAic2FhNjU4OCIsIGFkZHJzKTsKKwkJYnR2LT5oYXNfc2FhNjU4OCA9IChzZCAhPSBOVUxMKTsKKwl9CisKIAkvKiB0cnkgdG8gZGV0ZWN0IGF1ZGlvL2ZhZGVyIGNoaXBzICovCi0JaWYgKCFidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm5vX21zcDM0eHggJiYKLQkgICAgYnR0dl9JMkNSZWFkKGJ0diwgSTJDX0FERFJfTVNQMzQwMCwgIk1TUDM0eHgiKSA+PTApCi0JCXJlcXVlc3RfbW9kdWxlKCJtc3AzNDAwIik7CiAKLQlpZiAoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5tc3AzNHh4X2FsdCAmJgotCSAgICBidHR2X0kyQ1JlYWQoYnR2LCBJMkNfQUREUl9NU1AzNDAwX0FMVCwgIk1TUDM0eHggKGFsdGVybmF0ZSBhZGRyZXNzKSIpID49MCkKLQkJcmVxdWVzdF9tb2R1bGUoIm1zcDM0MDAiKTsKKwkvKiBGaXJzdCBjaGVjayBpZiB0aGUgdXNlciBzcGVjaWZpZWQgdGhlIGF1ZGlvIGNoaXAgdmlhIGEgbW9kdWxlCisJICAgb3B0aW9uLiAqLwogCi0JaWYgKCFidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm5vX3RkYTk4NzUgJiYKLQkgICAgYnR0dl9JMkNSZWFkKGJ0diwgSTJDX0FERFJfVERBOTg3NSwgIlREQTk4NzUiKSA+PTApCi0JCXJlcXVlc3RfbW9kdWxlKCJ0ZGE5ODc1Iik7CisJc3dpdGNoIChhdWRpb2RldltidHYtPmMubnJdKSB7CisJY2FzZSAtMToKKwkJcmV0dXJuOwkvKiBkbyBub3QgbG9hZCBhbnkgYXVkaW8gbW9kdWxlICovCiAKLQlpZiAoIWJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubm9fdGRhNzQzMiAmJgotCSAgICBidHR2X0kyQ1JlYWQoYnR2LCBJMkNfQUREUl9UREE3NDMyLCAiVERBNzQzMiIpID49MCkKLQkJcmVxdWVzdF9tb2R1bGUoInRkYTc0MzIiKTsKKwljYXNlIDA6IC8qIGF1dG9kZXRlY3QgKi8KKwkJYnJlYWs7CiAKLQlpZiAoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5uZWVkc190dmF1ZGlvKQotCQlyZXF1ZXN0X21vZHVsZSgidHZhdWRpbyIpOworCWNhc2UgMTogeworCQkvKiBUaGUgdXNlciBzcGVjaWZpZWQgdGhhdCB3ZSBzaG91bGQgcHJvYmUgZm9yIG1zcDM0MDAgKi8KKwkJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGFkZHJzW10gPSB7CisJCQlJMkNfQUREUl9NU1AzNDAwID4+IDEsCisJCQlJMkNfQUREUl9NU1AzNDAwX0FMVCA+PiAxLAorCQkJSTJDX0NMSUVOVF9FTkQKKwkJfTsKIAotCWlmIChidHYtPnR1bmVyX3R5cGUgIT0gVU5TRVQgJiYgYnR2LT50dW5lcl90eXBlICE9IFRVTkVSX0FCU0VOVCkKLQkJcmVxdWVzdF9tb2R1bGUoInR1bmVyIik7CisJCWJ0di0+c2RfbXNwMzR4eCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZidHYtPmMuaTJjX2FkYXAsCisJCQkJIm1zcDM0MDAiLCAibXNwMzQwMCIsIGFkZHJzKTsKKwkJaWYgKGJ0di0+c2RfbXNwMzR4eCkKKwkJCXJldHVybjsKKwkJZ290byBub19hdWRpbzsKKwl9CisKKwljYXNlIDI6IHsKKwkJLyogVGhlIHVzZXIgc3BlY2lmaWVkIHRoYXQgd2Ugc2hvdWxkIHByb2JlIGZvciB0ZGE3NDMyICovCisJCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBhZGRyc1tdID0geworCQkJSTJDX0FERFJfVERBNzQzMiA+PiAxLAorCQkJSTJDX0NMSUVOVF9FTkQKKwkJfTsKKworCQlpZiAodjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmJ0di0+Yy5pMmNfYWRhcCwKKwkJCQkidGRhNzQzMiIsICJ0ZGE3NDMyIiwgYWRkcnMpKQorCQkJcmV0dXJuOworCQlnb3RvIG5vX2F1ZGlvOworCX0KKworCWNhc2UgMzogeworCQkvKiBUaGUgdXNlciBzcGVjaWZpZWQgdGhhdCB3ZSBzaG91bGQgcHJvYmUgZm9yIHR2YXVkaW8gKi8KKwkJYnR2LT5zZF90dmF1ZGlvID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmJ0di0+Yy5pMmNfYWRhcCwKKwkJCQkidHZhdWRpbyIsICJ0dmF1ZGlvIiwgdHZhdWRpb19hZGRycyk7CisJCWlmIChidHYtPnNkX3R2YXVkaW8pCisJCQlyZXR1cm47CisJCWdvdG8gbm9fYXVkaW87CisJfQorCisJZGVmYXVsdDoKKwkJcHJpbnRrKEtFUk5fV0FSTklORyAiYnR0diVkOiB1bmtub3duIGF1ZGlvZGV2IHZhbHVlIVxuIiwKKwkJCWJ0di0+Yy5ucik7CisJCXJldHVybjsKKwl9CisKKwkvKiBUaGVyZSB3ZXJlIG5vIG92ZXJyaWRlcywgc28gbm93IHdlIHRyeSB0byBkaXNjb3ZlciB0aGlzIHRocm91Z2ggdGhlCisJICAgY2FyZCBkZWZpbml0aW9uICovCisKKwkvKiBwcm9iZSBmb3IgbXNwMzQwMCBmaXJzdDogdGhpcyBkcml2ZXIgY2FuIGRldGVjdCB3aGV0aGVyIG9yIG5vdAorCSAgIGl0IHJlYWxseSBpcyBhIG1zcDM0MDAsIHNvIGl0IHdpbGwgcmV0dXJuIE5VTEwgd2hlbiB0aGUgZGV2aWNlCisJICAgZm91bmQgaXMgcmVhbGx5IHNvbWV0aGluZyBlbHNlIChlLmcuIGEgdGVhNjMwMCkuICovCisJaWYgKCFidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm5vX21zcDM0eHgpIHsKKwkJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGFkZHJzW10gPSB7CisJCQlJMkNfQUREUl9NU1AzNDAwID4+IDEsCisJCQlJMkNfQ0xJRU5UX0VORAorCQl9OworCisJCWJ0di0+c2RfbXNwMzR4eCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZidHYtPmMuaTJjX2FkYXAsCisJCQkJIm1zcDM0MDAiLCAibXNwMzQwMCIsIGFkZHJzKTsKKwl9IGVsc2UgaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubXNwMzR4eF9hbHQpIHsKKwkJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGFkZHJzW10gPSB7CisJCQlJMkNfQUREUl9NU1AzNDAwX0FMVCA+PiAxLAorCQkJSTJDX0NMSUVOVF9FTkQKKwkJfTsKKworCQlidHYtPnNkX21zcDM0eHggPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmYnR2LT5jLmkyY19hZGFwLAorCQkJCSJtc3AzNDAwIiwgIm1zcDM0MDAiLCBhZGRycyk7CisJfQorCisJLyogSWYgd2UgZm91bmQgYSBtc3AzNHh4LCB0aGVuIHdlJ3JlIGRvbmUuICovCisJaWYgKGJ0di0+c2RfbXNwMzR4eCkKKwkJcmV0dXJuOworCisJLyogaXQgbWlnaHQgYWxzbyBiZSBhIHRkYTc0MzIuICovCisJaWYgKCFidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm5vX3RkYTc0MzIpIHsKKwkJc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGFkZHJzW10gPSB7CisJCQlJMkNfQUREUl9UREE3NDMyID4+IDEsCisJCQlJMkNfQ0xJRU5UX0VORAorCQl9OworCisJCWlmICh2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmYnR2LT5jLmkyY19hZGFwLAorCQkJCSJ0ZGE3NDMyIiwgInRkYTc0MzIiLCBhZGRycykpCisJCQlyZXR1cm47CisJfQorCisJLyogTm93IHNlZSBpZiB3ZSBjYW4gZmluZCBvbmUgb2YgdGhlIHR2YXVkaW8gZGV2aWNlcy4gKi8KKwlidHYtPnNkX3R2YXVkaW8gPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmYnR2LT5jLmkyY19hZGFwLAorCQkJInR2YXVkaW8iLCAidHZhdWRpbyIsIHR2YXVkaW9fYWRkcnMpOworCWlmIChidHYtPnNkX3R2YXVkaW8pCisJCXJldHVybjsKKworbm9fYXVkaW86CisJcHJpbnRrKEtFUk5fV0FSTklORyAiYnR0diVkOiBhdWRpbyBhYnNlbnQsIG5vIGF1ZGlvIGRldmljZSBmb3VuZCFcbiIsCisJCQlidHYtPmMubnIpOwogfQogCiAKQEAgLTM4MTksNiArMzc1MCw3IEBACiAJCXByaW50aygiYnR0diVkOiBUZXJyYXRlYyBBY3RpdmUgUmFkaW8gVXBncmFkZSBmb3VuZC5cbiIsCiAJCSAgICAgICBidHYtPmMubnIpOwogCQlidHYtPmhhc19yYWRpbyAgICA9IDE7CisJCWJ0di0+aGFzX3NhYTY1ODggID0gMTsKIAkJYnR2LT5oYXNfbWF0Y2hib3ggPSAxOwogCX0gZWxzZSB7CiAJCWJ0di0+aGFzX3JhZGlvICAgID0gMDsKQEAgLTQwNjcsMjcgKzM5OTksMjYgQEAKIAkgICAgICAgYnR2LT5oYXNfcmVtb3RlID8gInllcyIgOiAibm8iKTsKIH0KIAotLyogdXNlZCBvbiBWb29kb28gVFYvRk0gKFZvb2RvbyAyMDApLCBTMCB3aXJlZCB0byAweDEwMDAwICovCi12b2lkIGJ0dHZfdGRhOTg4MF9zZXRub3JtKHN0cnVjdCBidHR2ICpidHYsIGludCBub3JtKQorLyoKKyAqIEZvciBWb29kb28gVFYvRk0gYW5kIFZvb2RvbyAyMDAuICBUaGVzZSBjYXJkcycgdHVuZXJzIHVzZSBhIFREQTk4ODAKKyAqIGFuYWxvZyBkZW1vZCwgd2hpY2ggaXMgbm90IEkyQyBjb250cm9sbGVkIGxpa2UgdGhlIG5ld2VyIGFuZCBtb3JlIGNvbW1vbgorICogVERBOTg4NyBzZXJpZXMuICBJbnN0ZWFkIGlzIGhhcyB0d28gdHJpLXN0YXRlIGlucHV0IHBpbnMsIFMwIGFuZCBTMSwKKyAqIHRoYXQgY29udHJvbCB0aGUgSUYgZm9yIHRoZSB2aWRlbyBhbmQgYXVkaW8uICBBcHBhcmVudGx5LCBidHR2IEdQSU8KKyAqIDB4MTAwMDAgaXMgY29ubmVjdGVkIHRvIFMwLiAgUzAgbG93IHNlbGVjdHMgYSAzOC45IE1IeiBWSUYgZm9yIEIvRy9EL0svSQorICogKGkuZS4sIFBBTCkgd2hpbGUgaGlnaCBzZWxlY3RzIDQ1Ljc1IE1IeiBmb3IgTS9OIChpLmUuLCBOVFNDKS4KKyAqLwordTMyIGJ0dHZfdGRhOTg4MF9zZXRub3JtKHN0cnVjdCBidHR2ICpidHYsIHUzMiBncGlvYml0cykKIHsKLQkvKiBmaXggdXAgb3VyIGNhcmQgZW50cnkgKi8KLQlpZihub3JtPT1WNEwyX1NURF9OVFNDKSB7Ci0JCWJ0dHZfdHZjYXJkc1tCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNXS5ncGlvbXV4W1RWQVVESU9fSU5QVVRfVFVORVJdPTB4OTU3ZmZmOwotCQlidHR2X3R2Y2FyZHNbQlRUVl9CT0FSRF9WT09ET09UVl9GTV0uZ3Bpb211dGU9MHg5NTdmZmY7Ci0JCWJ0dHZfdHZjYXJkc1tCVFRWX0JPQVJEX1ZPT0RPT1RWXzIwMF0uZ3Bpb211eFtUVkFVRElPX0lOUFVUX1RVTkVSXT0weDk1N2ZmZjsKLQkJYnR0dl90dmNhcmRzW0JUVFZfQk9BUkRfVk9PRE9PVFZfMjAwXS5ncGlvbXV0ZT0weDk1N2ZmZjsKLQkJZHByaW50aygiYnR0dl90ZGE5ODgwX3NldG5vcm0gdG8gTlRTQ1xuIik7CisKKwlpZiAoYnR2LT5hdWRpbyA9PSBUVkFVRElPX0lOUFVUX1RVTkVSKSB7CisJCWlmIChidHR2X3R2bm9ybXNbYnR2LT50dm5vcm1dLnY0bDJfaWQgJiBWNEwyX1NURF9NTikKKwkJCWdwaW9iaXRzIHw9IDB4MTAwMDA7CisJCWVsc2UKKwkJCWdwaW9iaXRzICY9IH4weDEwMDAwOwogCX0KLQllbHNlIHsKLQkJYnR0dl90dmNhcmRzW0JUVFZfQk9BUkRfVk9PRE9PVFZfRk1dLmdwaW9tdXhbVFZBVURJT19JTlBVVF9UVU5FUl09MHg5NDdmZmY7Ci0JCWJ0dHZfdHZjYXJkc1tCVFRWX0JPQVJEX1ZPT0RPT1RWX0ZNXS5ncGlvbXV0ZT0weDk0N2ZmZjsKLQkJYnR0dl90dmNhcmRzW0JUVFZfQk9BUkRfVk9PRE9PVFZfMjAwXS5ncGlvbXV4W1RWQVVESU9fSU5QVVRfVFVORVJdPTB4OTQ3ZmZmOwotCQlidHR2X3R2Y2FyZHNbQlRUVl9CT0FSRF9WT09ET09UVl8yMDBdLmdwaW9tdXRlPTB4OTQ3ZmZmOwotCQlkcHJpbnRrKCJidHR2X3RkYTk4ODBfc2V0bm9ybSB0byBQQUxcbiIpOwotCX0KLQkvKiBzZXQgR1BJTyBhY2NvcmRpbmcgKi8KLQlncGlvX2JpdHMoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ncGlvbWFzaywKLQkJICBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmdwaW9tdXhbYnR2LT5hdWRpb10pOworCisJZ3Bpb19iaXRzKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0uZ3Bpb21hc2ssIGdwaW9iaXRzKTsKKwlyZXR1cm4gZ3Bpb2JpdHM7CiB9CiAKIApAQCAtNDQ2Myw2ICs0Mzk0LDExIEBACiAgKi8KIHN0YXRpYyB2b2lkIHJ2NjA1X211eHNlbChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpCiB7CisJc3RhdGljIGNvbnN0IHU4IG11eGdwaW9bXSA9IHsgMHgzLCAweDEsIDB4MiwgMHg0LCAweGYsIDB4NywgMHhlLCAweDAsCisJCQkJICAgICAgMHhkLCAweGIsIDB4YywgMHg2LCAweDksIDB4NSwgMHg4LCAweGEgfTsKKworCWdwaW9fYml0cygweDA3ZiwgbXV4Z3Bpb1tpbnB1dF0pOworCiAJLyogcmVzZXQgYWxsIGNvbmVjdGlvbnMgKi8KIAlncGlvX2JpdHMoMHgyMDAsMHgyMDApOwogCW1kZWxheSgxKTsKQEAgLTQ0NzAsNyArNDQwNiw2IEBACiAJbWRlbGF5KDEpOwogCiAJLyogY3JlYXRlIGEgbmV3IGNvbm5lY3Rpb24gKi8KLQlncGlvX2JpdHMoMHg0ODAsMHgwODApOwogCWdwaW9fYml0cygweDQ4MCwweDQ4MCk7CiAJbWRlbGF5KDEpOwogCWdwaW9fYml0cygweDQ4MCwweDA4MCk7CkBAIC00NzI5LDggKzQ2NjQsNyBAQAogCWJ0dHZfSTJDV3JpdGUoYnR2LCBJMkNfVERBODU0MF9BTFQ2LCAweDAyLAogCQkgICAgICAoKG1hdHJpeCA9PSAyKSA/IDB4MDMgOiAweDAwKSwgMSk7ICAvKiA5LTEyICovCiAKLQkvKiBTZWxlY3RzIE1VWDAgZm9yIGlucHV0IG9uIHRoZSA4NzggKi8KLQlidGFvcigoMCk8PDUsIH4oMzw8NSksIEJUODQ4X0lGT1JNKTsKKwkvKiA4NzgncyBNVVgwIGlzIGFscmVhZHkgc2VsZWN0ZWQgZm9yIGlucHV0IHZpYSBtdXhzZWwgdmFsdWVzICovCiB9CiAKIApAQCAtNDgxNCw2ICs0NzQ4LDEzMiBAQAogCXByaW50ayhLRVJOX0RFQlVHICJidHR2JWQ6IHNldHRpbmcgaW5wdXQgY2hhbm5lbCB0bzolZFxuIiwgYnR2LT5jLm5yLChpbnQpbXV4KTsKIH0KIAorc3RhdGljIHZvaWQgcGh5dGVjX211eHNlbChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpCit7CisJdW5zaWduZWQgaW50IG11eCA9IGlucHV0ICUgNDsKKworCWlmIChpbnB1dCA9PSBidHYtPnN2aHMpCisJCW11eCA9IDA7CisKKwlncGlvX2JpdHMoMHgzLCBtdXgpOworfQorCisvKgorICogR2VvVmlzaW9uIEdWLTgwMChTKSBmdW5jdGlvbnMKKyAqIEJydW5vIENocmlzdG8gPGJjaHJpc3RvQGluZi51ZnNtLmJyPgorKi8KKworLyogVGhpcyBpcyBhIGZ1bmN0aW9uIHRvIGNvbnRyb2wgdGhlIGFuYWxvZyBzd2l0Y2gsIHdoaWNoIGRldGVybWluZXMgd2hpY2gKKyAqIGNhbWVyYSBpcyByb3V0ZWQgdG8gd2hpY2ggY29udHJvbGxlci4gIFRoZSBzd2l0Y2ggY29tcHJpc2VzIGFuIFgtYWRkcmVzcworICogKGdwaW8gYml0cyAwLTMsIHJlcHJlc2VudGluZyB0aGUgY2FtZXJhLCByYW5naW5nIGZyb20gMC0xNSksIGFuZCBhCisgKiBZLWFkZHJlc3MgKGdwaW8gYml0cyA0LTYsIHJlcHJlc2VudGluZyB0aGUgY29udHJvbGxlciwgcmFuZ2luZyBmcm9tIDAtMykuCisgKiBBIGRhdGEgdmFsdWUgKGdwaW8gYml0IDE4KSBvZiAnMScgZW5hYmxlcyB0aGUgc3dpdGNoLCBhbmQgJzAnIGRpc2FibGVzCisgKiB0aGUgc3dpdGNoLiAgQSBTVFJPQkUgYml0IChncGlvIGJpdCAxNykgbGF0Y2hlcyB0aGUgZGF0YSB2YWx1ZSBpbnRvIHRoZQorICogc3BlY2lmaWVkIGFkZHJlc3MuIFRoZXJlIGlzIGFsc28gYSBjaGlwIHNlbGVjdCAoZ3BpbyBiaXQgMTYpLgorICogVGhlIGlkZWEgaXMgdG8gc2V0IHRoZSBhZGRyZXNzIGFuZCBjaGlwIHNlbGVjdCB0b2dldGhlciwgYnJpbmcKKyAqIFNUUk9CRSBoaWdoLCB3cml0ZSB0aGUgZGF0YSwgYW5kIGZpbmFsbHkgYnJpbmcgU1RST0JFIGJhY2sgdG8gbG93LgorICovCitzdGF0aWMgdm9pZCBndjgwMHNfd3JpdGUoc3RydWN0IGJ0dHYgKmJ0diwKKwkJCSB1bnNpZ25lZCBjaGFyIHhhZGRyLAorCQkJIHVuc2lnbmVkIGNoYXIgeWFkZHIsCisJCQkgdW5zaWduZWQgY2hhciBkYXRhKSB7CisJLyogT24gdGhlICJtYXN0ZXIiIDg3OEE6CisJKiBHUElPIGJpdHMgMC05IGFyZSB1c2VkIGZvciB0aGUgYW5hbG9nIHN3aXRjaDoKKwkqICAgMDAgLSAwMzoJY2FtZXJhIHNlbGVjdG9yCisJKiAgIDA0IC0gMDY6CTg3OEEgKGNvbnRyb2xsZXIpIHNlbGVjdG9yCisJKiAgIDE2OiAJY3NlbGVjdAorCSogICAxNzoJCXN0cm9iZQorCSogICAxODogCWRhdGEgKDEtPm9uLCAwLT5vZmYpCisJKiAgIDE5OgkJcmVzZXQKKwkqLworCWNvbnN0IHUzMiBBRERSRVNTID0gKCh4YWRkciYweGYpIHwgKHlhZGRyJjMpPDw0KTsKKwljb25zdCB1MzIgQ1NFTEVDVCA9IDE8PDE2OworCWNvbnN0IHUzMiBTVFJPQkUgPSAxPDwxNzsKKwljb25zdCB1MzIgREFUQSA9IGRhdGE8PDE4OworCisJZ3Bpb19iaXRzKDB4MTAwN2YsIEFERFJFU1MgfCBDU0VMRUNUKTsJLyogd3JpdGUgQUREUkVTUyBhbmQgQ1NFTEVDVCAqLworCWdwaW9fYml0cygweDIwMDAwLCBTVFJPQkUpOwkJLyogU1RST0JFIGhpZ2ggKi8KKwlncGlvX2JpdHMoMHg0MDAwMCwgREFUQSk7CQkvKiB3cml0ZSBEQVRBICovCisJZ3Bpb19iaXRzKDB4MjAwMDAsIH5TVFJPQkUpOwkJLyogU1RST0JFIGxvdyAqLworfQorCisvKgorICogR2VvVmlzaW9uIEdWLTgwMChTKSBtdXhzZWwKKyAqCisgKiBFYWNoIG9mIHRoZSA0IGNhcmRzIChjb250cm9sbGVycykgdXNlIHRoaXMgZnVuY3Rpb24uCisgKiBUaGUgY29udHJvbGxlciB1c2luZyB0aGlzIGZ1bmN0aW9uIHNlbGVjdHMgdGhlIGlucHV0IHRocm91Z2ggdGhlIEdQSU8gcGlucworICogb2YgdGhlICJtYXN0ZXIiIGNhcmQuIEEgcG9pbnRlciB0byB0aGlzIGNhcmQgaXMgc3RvcmVkIGluIG1hc3RlcltidHYtPmMubnJdLgorICoKKyAqIFRoZSBwYXJhbWV0ZXIgJ2lucHV0JyBpcyB0aGUgcmVxdWVzdGVkIGNhbWVyYSBudW1iZXIgKDAtNCkgb24gdGhlIGNvbnRyb2xsZXIuCisgKiBUaGUgbWFwIGFycmF5IGhhcyB0aGUgYWRkcmVzcyBvZiBlYWNoIGlucHV0LiBOb3RlIHRoYXQgdGhlIGFkZHJlc3NlcyBpbiB0aGUKKyAqIGFycmF5IGFyZSBpbiB0aGUgc2VxdWVuY2UgdGhlIG9yaWdpbmFsIEdlb1Zpc2lvbiBkcml2ZXIgdXNlcywgdGhhdCBpcywgc2V0CisgKiBldmVyeSBjb250cm9sbGVyIHRvIGlucHV0IDAsIHRoZW4gdG8gaW5wdXQgMSwgMiwgMywgcmVwZWF0LiBUaGlzIG1lYW5zIHRoYXQKKyAqIHRoZSBwaHlzaWNhbCAiY2FtZXJhIDEiIGNvbm5lY3RvciBjb3JyZXNwb25kcyB0byBjb250cm9sbGVyIDAgaW5wdXQgMCwKKyAqICJjYW1lcmEgMiIgY29ycmVzcG9uZHMgdG8gY29udHJvbGxlciAxIGlucHV0IDAsIGFuZCBzbyBvbi4KKyAqCisgKiBBZnRlciBnZXR0aW5nIHRoZSBpbnB1dCBhZGRyZXNzLCB0aGUgZnVuY3Rpb24gdGhlbiB3cml0ZXMgdGhlIGFwcHJvcHJpYXRlCisgKiBkYXRhIHRvIHRoZSBhbmFsb2cgc3dpdGNoLCBhbmQgaG91c2VrZWVwcyB0aGUgbG9jYWwgY29weSBvZiB0aGUgc3dpdGNoCisgKiBpbmZvcm1hdGlvbi4KKyAqLworc3RhdGljIHZvaWQgZ3Y4MDBzX211eHNlbChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpCit7CisJc3RydWN0IGJ0dHYgKm1jdGxyOworCWNoYXIgKnN3X3N0YXR1czsKKwlpbnQgeGFkZHIsIHlhZGRyOworCXN0YXRpYyB1bnNpZ25lZCBpbnQgbWFwWzRdWzRdID0geyB7IDB4MCwgMHg0LCAweGEsIDB4NiB9LAorCQkJCQkgIHsgMHgxLCAweDUsIDB4YiwgMHg3IH0sCisJCQkJCSAgeyAweDIsIDB4OCwgMHhjLCAweGUgfSwKKwkJCQkJICB7IDB4MywgMHg5LCAweGQsIDB4ZiB9IH07CisJaW5wdXQgPSBpbnB1dCU0OworCW1jdGxyID0gbWFzdGVyW2J0di0+Yy5ucl07CisJaWYgKG1jdGxyID09IE5VTEwpIHsKKwkJLyogZG8gbm90aGluZyB1bnRpbCB0aGUgIm1hc3RlciIgaXMgZGV0ZWN0ZWQgKi8KKwkJcmV0dXJuOworCX0KKwl5YWRkciA9IChidHYtPmMubnIgLSBtY3Rsci0+Yy5ucikgJiAzOworCXN3X3N0YXR1cyA9IChjaGFyICopKCZtY3Rsci0+bWJveF93ZSk7CisJeGFkZHIgPSBtYXBbeWFkZHJdW2lucHV0XSAmIDB4ZjsKKworCS8qIENoZWNrIGlmIHRoZSBjb250cm9sbGVyL2NhbWVyYSBwYWlyIGhhcyBjaGFuZ2VkLCBpZ25vcmUgb3RoZXJ3aXNlICovCisJaWYgKHN3X3N0YXR1c1t5YWRkcl0gIT0geGFkZHIpIHsKKwkJLyogZGlzYWJsZSB0aGUgb2xkIHN3aXRjaCwgZW5hYmxlIHRoZSBuZXcgb25lIGFuZCBzYXZlIHN0YXR1cyAqLworCQlndjgwMHNfd3JpdGUobWN0bHIsIHN3X3N0YXR1c1t5YWRkcl0sIHlhZGRyLCAwKTsKKwkJc3dfc3RhdHVzW3lhZGRyXSA9IHhhZGRyOworCQlndjgwMHNfd3JpdGUobWN0bHIsIHhhZGRyLCB5YWRkciwgMSk7CisJfQorfQorCisvKiBHZW9WaXNpb24gR1YtODAwKFMpICJtYXN0ZXIiIGNoaXAgaW5pdCAqLworc3RhdGljIHZvaWQgZ3Y4MDBzX2luaXQoc3RydWN0IGJ0dHYgKmJ0dikKK3sKKwljaGFyICpzd19zdGF0dXMgPSAoY2hhciAqKSgmYnR2LT5tYm94X3dlKTsKKwlpbnQgaXg7CisKKwlncGlvX2lub3V0KDB4ZjEwN2YsIDB4ZjEwN2YpOworCWdwaW9fd3JpdGUoMTw8MTkpOyAvKiByZXNldCB0aGUgYW5hbG9nIE1VWCAqLworCWdwaW9fd3JpdGUoMCk7CisKKwkvKiBQcmVzZXQgY2FtZXJhIDAgdG8gdGhlIDQgY29udHJvbGxlcnMgKi8KKwlmb3IgKGl4ID0gMDsgaXggPCA0OyBpeCsrKSB7CisJCXN3X3N0YXR1c1tpeF0gPSBpeDsKKwkJZ3Y4MDBzX3dyaXRlKGJ0diwgaXgsIGl4LCAxKTsKKwl9CisKKwkvKiBJbnB1dHMgb24gdGhlICJtYXN0ZXIiIGNvbnRyb2xsZXIgbmVlZCB0aGlzIGJyaWdodG5lc3MgZml4ICovCisJYnR0dl9JMkNXcml0ZShidHYsIDB4MTgsIDB4NSwgMHg5MCwgMSk7CisKKwlpZiAoYnR2LT5jLm5yID4gQlRUVl9NQVgtNCkKKwkJcmV0dXJuOworCS8qCisJICogU3RvcmUgdGhlICJtYXN0ZXIiIGNvbnRyb2xsZXIgcG9pbnRlciBpbiB0aGUgbWFzdGVyCisJICogYXJyYXkgZm9yIGxhdGVyIHVzZSBpbiB0aGUgbXV4c2VsIGZ1bmN0aW9uLgorCSAqLworCW1hc3RlcltidHYtPmMubnJdICAgPSBidHY7CisJbWFzdGVyW2J0di0+Yy5ucisxXSA9IGJ0djsKKwltYXN0ZXJbYnR2LT5jLm5yKzJdID0gYnR2OworCW1hc3RlcltidHYtPmMubnIrM10gPSBidHY7Cit9CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBtb3RoZXJib2FyZCBjaGlwc2V0IHNwZWNpZmljIHN0dWZmICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtZHJpdmVyLmMKaW5kZXggYzcxZjM5NC4uN2E4Y2EwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1kcml2ZXIuYwpAQCAtNTgsNyArNTgsNyBAQAogCiAKIHVuc2lnbmVkIGludCBidHR2X251bTsJCQkvKiBudW1iZXIgb2YgQnQ4NDhzIGluIHVzZSAqLwotc3RydWN0IGJ0dHYgYnR0dnNbQlRUVl9NQVhdOworc3RydWN0IGJ0dHYgKmJ0dHZzW0JUVFZfTUFYXTsKIAogdW5zaWduZWQgaW50IGJ0dHZfZGVidWc7CiB1bnNpZ25lZCBpbnQgYnR0dl92ZXJib3NlID0gMTsKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCQkJIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLCBjaGFyICpidWYpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmZkID0gY29udGFpbmVyX29mKGNkLCBzdHJ1Y3QgdmlkZW9fZGV2aWNlLCBkZXYpOwotCXN0cnVjdCBidHR2ICpidHYgPSBkZXZfZ2V0X2RydmRhdGEodmZkLT5wYXJlbnQpOworCXN0cnVjdCBidHR2ICpidHYgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZmQpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBidHYgPyBidHYtPmMudHlwZSA6IFVOU0VUKTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihjYXJkLCBTX0lSVUdPLCBzaG93X2NhcmQsIE5VTEwpOwpAQCAtMTA0MCw3ICsxMDQwLDcgQEAKIAlpbnQgdGFibGVfaWR4ID0gYnR0dl90dm5vcm1zW2J0di0+dHZub3JtXS5zcmFtOwogCWludCBmc2MgICAgICAgPSBidHR2X3R2bm9ybXNbYnR2LT50dm5vcm1dLkZzYzsKIAotCWlmIChVTlNFVCA9PSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm11eHNlbFtidHYtPmlucHV0XSkgeworCWlmIChidHYtPmlucHV0ID09IGJ0di0+ZGlnKSB7CiAJCWRwcmludGsoImJ0dHYlZDogbG9hZCBkaWdpdGFsIHRpbWluZyB0YWJsZSAodGFibGVfaWR4PSVkKVxuIiwKIAkJCWJ0di0+Yy5ucix0YWJsZV9pZHgpOwogCkBAIC0xMTQyLDcgKzExNDIsNyBAQAogCQlidGFuZCh+QlQ4NDhfQ09OVFJPTF9DT01QLCBCVDg0OF9FX0NPTlRST0wpOwogCQlidGFuZCh+QlQ4NDhfQ09OVFJPTF9DT01QLCBCVDg0OF9PX0NPTlRST0wpOwogCX0KLQltdXggPSBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm11eHNlbFtpbnB1dF0gJiAzOworCW11eCA9IGJ0dHZfbXV4c2VsKGJ0diwgaW5wdXQpOwogCWJ0YW9yKG11eDw8NSwgfigzPDw1KSwgQlQ4NDhfSUZPUk0pOwogCWRwcmludGsoS0VSTl9ERUJVRyAiYnR0diVkOiB2aWRlbyBtdXg6IGlucHV0PSVkIG11eD0lZFxuIiwKIAkJYnR2LT5jLm5yLGlucHV0LG11eCk7CkBAIC0xMTYzLDcgKzExNjMsNiBAQAogewogCWludCBncGlvX3ZhbCwgc2lnbmFsOwogCXN0cnVjdCB2NGwyX2NvbnRyb2wgY3RybDsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqYzsKIAogCWdwaW9faW5vdXQoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ncGlvbWFzaywKIAkJICAgYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ncGlvbWFzayk7CkBAIC0xMTgwLDcgKzExNzksMTYgQEAKIAllbHNlCiAJCWdwaW9fdmFsID0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5ncGlvbXV4W2lucHV0XTsKIAotCWdwaW9fYml0cyhidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmdwaW9tYXNrLCBncGlvX3ZhbCk7CisJc3dpdGNoIChidHYtPmMudHlwZSkgeworCWNhc2UgQlRUVl9CT0FSRF9WT09ET09UVl9GTToKKwljYXNlIEJUVFZfQk9BUkRfVk9PRE9PVFZfMjAwOgorCQlncGlvX3ZhbCA9IGJ0dHZfdGRhOTg4MF9zZXRub3JtKGJ0diwgZ3Bpb192YWwpOworCQlicmVhazsKKworCWRlZmF1bHQ6CisJCWdwaW9fYml0cyhidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLmdwaW9tYXNrLCBncGlvX3ZhbCk7CisJfQorCiAJaWYgKGJ0dHZfZ3BpbykKIAkJYnR0dl9ncGlvX3RyYWNraW5nKGJ0diwgYXVkaW9fbW9kZXNbbXV0ZSA/IDQgOiBpbnB1dF0pOwogCWlmIChpbl9pbnRlcnJ1cHQoKSkKQEAgLTExODgsOSArMTE5Niw4IEBACiAKIAljdHJsLmlkID0gVjRMMl9DSURfQVVESU9fTVVURTsKIAljdHJsLnZhbHVlID0gYnR2LT5tdXRlOwotCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFZJRElPQ19TX0NUUkwsICZjdHJsKTsKLQljID0gYnR2LT5pMmNfbXNwMzR4eF9jbGllbnQ7Ci0JaWYgKGMpIHsKKwlidHR2X2NhbGxfYWxsKGJ0diwgY29yZSwgc19jdHJsLCAmY3RybCk7CisJaWYgKGJ0di0+c2RfbXNwMzR4eCkgewogCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOwogCiAJCS8qIE5vdGU6IHRoZSBpbnB1dHMgdHVuZXIvcmFkaW8vZXh0ZXJuL2ludGVybiBhcmUgdHJhbnNsYXRlZApAQCAtMTIyOSwxNSArMTIzNiwxNCBAQAogCQkJYnJlYWs7CiAJCX0KIAkJcm91dGUub3V0cHV0ID0gTVNQX09VVFBVVF9ERUZBVUxUOwotCQljLT5kcml2ZXItPmNvbW1hbmQoYywgVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkcsICZyb3V0ZSk7CisJCXY0bDJfc3ViZGV2X2NhbGwoYnR2LT5zZF9tc3AzNHh4LCBhdWRpbywgc19yb3V0aW5nLCAmcm91dGUpOwogCX0KLQljID0gYnR2LT5pMmNfdHZhdWRpb19jbGllbnQ7Ci0JaWYgKGMpIHsKKwlpZiAoYnR2LT5zZF90dmF1ZGlvKSB7CiAJCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7CiAKIAkJcm91dGUuaW5wdXQgPSBpbnB1dDsKIAkJcm91dGUub3V0cHV0ID0gMDsKLQkJYy0+ZHJpdmVyLT5jb21tYW5kKGMsIFZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HLCAmcm91dGUpOworCQl2NGwyX3N1YmRldl9jYWxsKGJ0di0+c2RfdHZhdWRpbywgYXVkaW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAl9CiAJcmV0dXJuIDA7CiB9CkBAIC0xMjc3LDcgKzEyODMsNyBAQAogfQogCiBzdGF0aWMgdm9pZAotYnR0dl9jcm9wX3Jlc2V0KHN0cnVjdCBidHR2X2Nyb3AgKmMsIGludCBub3JtKQorYnR0dl9jcm9wX3Jlc2V0KHN0cnVjdCBidHR2X2Nyb3AgKmMsIHVuc2lnbmVkIGludCBub3JtKQogewogCWMtPnJlY3QgPSBidHR2X3R2bm9ybXNbbm9ybV0uY3JvcGNhcC5kZWZyZWN0OwogCWJ0dHZfY3JvcF9jYWxjX2xpbWl0cyhjKTsKQEAgLTEyOTAsMTYgKzEyOTYsMTMgQEAKIAljb25zdCBzdHJ1Y3QgYnR0dl90dm5vcm0gKnR2bm9ybTsKIAl2NGwyX3N0ZF9pZCBpZDsKIAotCWlmIChub3JtIDwgMCB8fCBub3JtID49IEJUVFZfVFZOT1JNUykKLQkJcmV0dXJuIC1FSU5WQUw7CisJQlVHX09OKG5vcm0gPj0gQlRUVl9UVk5PUk1TKTsKKwlCVUdfT04oYnR2LT50dm5vcm0gPj0gQlRUVl9UVk5PUk1TKTsKIAogCXR2bm9ybSA9ICZidHR2X3R2bm9ybXNbbm9ybV07CiAKLQlpZiAoYnR2LT50dm5vcm0gPCAwIHx8Ci0JICAgIGJ0di0+dHZub3JtID49IEJUVFZfVFZOT1JNUyB8fAotCSAgICAwICE9IG1lbWNtcCgmYnR0dl90dm5vcm1zW2J0di0+dHZub3JtXS5jcm9wY2FwLAotCQkJJnR2bm9ybS0+Y3JvcGNhcCwKLQkJCXNpemVvZiAodHZub3JtLT5jcm9wY2FwKSkpIHsKKwlpZiAoIW1lbWNtcCgmYnR0dl90dm5vcm1zW2J0di0+dHZub3JtXS5jcm9wY2FwLCAmdHZub3JtLT5jcm9wY2FwLAorCQkgICAgc2l6ZW9mICh0dm5vcm0tPmNyb3BjYXApKSkgewogCQlidHR2X2Nyb3BfcmVzZXQoJmJ0di0+Y3JvcFswXSwgbm9ybSk7CiAJCWJ0di0+Y3JvcFsxXSA9IGJ0di0+Y3JvcFswXTsgLyogY3VycmVudCA9IGRlZmF1bHQgKi8KIApAQCAtMTMyMiwxMSArMTMyNSwxMSBAQAogCXN3aXRjaCAoYnR2LT5jLnR5cGUpIHsKIAljYXNlIEJUVFZfQk9BUkRfVk9PRE9PVFZfRk06CiAJY2FzZSBCVFRWX0JPQVJEX1ZPT0RPT1RWXzIwMDoKLQkJYnR0dl90ZGE5ODgwX3NldG5vcm0oYnR2LG5vcm0pOworCQlidHR2X3RkYTk4ODBfc2V0bm9ybShidHYsIGdwaW9fcmVhZCgpKTsKIAkJYnJlYWs7CiAJfQogCWlkID0gdHZub3JtLT52NGwyX2lkOwotCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFZJRElPQ19TX1NURCwgJmlkKTsKKwlidHR2X2NhbGxfYWxsKGJ0diwgdHVuZXIsIHNfc3RkLCBpZCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzNTAsOCArMTM1Myw4IEBACiAJfSBlbHNlIHsKIAkJdmlkZW9fbXV4KGJ0dixpbnB1dCk7CiAJfQotCWF1ZGlvX2lucHV0KGJ0diwoaW5wdXQgPT0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lciA/Ci0JCSAgICAgICBUVkFVRElPX0lOUFVUX1RVTkVSIDogVFZBVURJT19JTlBVVF9FWFRFUk4pKTsKKwlhdWRpb19pbnB1dChidHYsIChidHYtPnR1bmVyX3R5cGUgIT0gVFVORVJfQUJTRU5UICYmIGlucHV0ID09IDApID8KKwkJCSBUVkFVRElPX0lOUFVUX1RVTkVSIDogVFZBVURJT19JTlBVVF9FWFRFUk4pOwogCXNldF90dm5vcm0oYnR2LCBub3JtKTsKIH0KIApAQCAtMTQ3MCw3ICsxNDczLDcgQEAKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgogCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgotCQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBWSURJT0NfR19DVFJMLCBjKTsKKwkJYnR0dl9jYWxsX2FsbChidHYsIGNvcmUsIGdfY3RybCwgYyk7CiAJCWJyZWFrOwogCiAJY2FzZSBWNEwyX0NJRF9QUklWQVRFX0NIUk9NQV9BR0M6CkBAIC0xNTQ0LDEyICsxNTQ3LDEyIEBACiAJCWlmIChidHYtPnZvbHVtZV9ncGlvKQogCQkJYnR2LT52b2x1bWVfZ3BpbyhidHYsIGMtPnZhbHVlKTsKIAotCQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBWSURJT0NfU19DVFJMLCBjKTsKKwkJYnR0dl9jYWxsX2FsbChidHYsIGNvcmUsIHNfY3RybCwgYyk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFZJRElPQ19TX0NUUkwsIGMpOworCQlidHR2X2NhbGxfYWxsKGJ0diwgY29yZSwgc19jdHJsLCBjKTsKIAkJYnJlYWs7CiAKIAljYXNlIFY0TDJfQ0lEX1BSSVZBVEVfQ0hST01BX0FHQzoKQEAgLTE4ODgsMjAgKzE4OTEsMTUgQEAKIHsKIAlzdHJ1Y3QgYnR0dl9maCAqZmggPSBwcml2OwogCXN0cnVjdCBidHR2ICpidHYgPSBmaC0+YnR2OwotCXVuc2lnbmVkIGludCBuOworCWludCBuOwogCi0JbiA9IGktPmluZGV4OwotCi0JaWYgKG4gPj0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS52aWRlb19pbnB1dHMpCisJaWYgKGktPmluZGV4ID49IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udmlkZW9faW5wdXRzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW1lbXNldChpLCAwLCBzaXplb2YoKmkpKTsKLQotCWktPmluZGV4ICAgID0gbjsKIAlpLT50eXBlICAgICA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CiAJaS0+YXVkaW9zZXQgPSAxOwogCi0JaWYgKGktPmluZGV4ID09IGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0udHVuZXIpIHsKKwlpZiAoYnR2LT50dW5lcl90eXBlICE9IFRVTkVSX0FCU0VOVCAmJiBpLT5pbmRleCA9PSAwKSB7CiAJCXNwcmludGYoaS0+bmFtZSwgIlRlbGV2aXNpb24iKTsKIAkJaS0+dHlwZSAgPSBWNEwyX0lOUFVUX1RZUEVfVFVORVI7CiAJCWktPnR1bmVyID0gMDsKQEAgLTE5NjUsMTQgKzE5NjMsMTQgQEAKIAlpZiAoMCAhPSBlcnIpCiAJCXJldHVybiBlcnI7CiAKLQlpZiAoVU5TRVQgPT0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lcikKKwlpZiAoYnR2LT50dW5lcl90eXBlID09IFRVTkVSX0FCU0VOVCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoMCAhPSB0LT5pbmRleCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltdXRleF9sb2NrKCZidHYtPmxvY2spOwotCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFZJRElPQ19TX1RVTkVSLCB0KTsKKwlidHR2X2NhbGxfYWxsKGJ0diwgdHVuZXIsIHNfdHVuZXIsIHQpOwogCiAJaWYgKGJ0di0+YXVkaW9fbW9kZV9ncGlvKQogCQlidHYtPmF1ZGlvX21vZGVfZ3BpbyhidHYsIHQsIDEpOwpAQCAtMjAxNyw3ICsyMDE1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJbXV0ZXhfbG9jaygmYnR2LT5sb2NrKTsKIAlidHYtPmZyZXEgPSBmLT5mcmVxdWVuY3k7Ci0JYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgVklESU9DX1NfRlJFUVVFTkNZLCBmKTsKKwlidHR2X2NhbGxfYWxsKGJ0diwgdHVuZXIsIHNfZnJlcXVlbmN5LCBmKTsKIAlpZiAoYnR2LT5oYXNfbWF0Y2hib3ggJiYgYnR2LT5yYWRpb191c2VyKQogCQl0ZWE1NzU3X3NldF9mcmVxKGJ0diwgYnR2LT5mcmVxKTsKIAltdXRleF91bmxvY2soJmJ0di0+bG9jayk7CkBAIC0yMDMxLDcgKzIwMjksNyBAQAogCiAJcHJpbnRrKEtFUk5fSU5GTyAiYnR0diVkOiA9PT09PT09PSAgU1RBUlQgU1RBVFVTIENBUkQgIyVkICA9PT09PT09PVxuIiwKIAkJCWJ0di0+Yy5uciwgYnR2LT5jLm5yKTsKLQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBWSURJT0NfTE9HX1NUQVRVUywgTlVMTCk7CisJYnR0dl9jYWxsX2FsbChidHYsIGNvcmUsIGxvZ19zdGF0dXMpOwogCXByaW50ayhLRVJOX0lORk8gImJ0dHYlZDogPT09PT09PT0gIEVORCBTVEFUVVMgQ0FSRCAgICMlZCAgPT09PT09PT1cbiIsCiAJCQlidHYtPmMubnIsIGJ0di0+Yy5ucik7CiAJcmV0dXJuIDA7CkBAIC0yNjU5LDggKzI2NTcsNyBAQAogCWlmIChub19vdmVybGF5IDw9IDApCiAJCWNhcC0+Y2FwYWJpbGl0aWVzIHw9IFY0TDJfQ0FQX1ZJREVPX09WRVJMQVk7CiAKLQlpZiAoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lciAhPSBVTlNFVCAmJgotCSAgICBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLnR1bmVyICE9IFRVTkVSX0FCU0VOVCkKKwlpZiAoYnR2LT50dW5lcl90eXBlICE9IFRVTkVSX0FCU0VOVCkKIAkJY2FwLT5jYXBhYmlsaXRpZXMgfD0gVjRMMl9DQVBfVFVORVI7CiAJcmV0dXJuIDA7CiB9CkBAIC0yOTI3LDEzICsyOTI0LDkgQEAKIHsKIAlzdHJ1Y3QgYnR0dl9maCAqZmggPSBmOwogCXN0cnVjdCBidHR2ICpidHYgPSBmaC0+YnR2OwotCXN0cnVjdCB2NGwyX3N0YW5kYXJkIHM7CiAKLQlpZiAocGFybS0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCXY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdCgmcywgYnR0dl90dm5vcm1zW2J0di0+dHZub3JtXS52NGwyX2lkLAotCQkJCSBidHR2X3R2bm9ybXNbYnR2LT50dm5vcm1dLm5hbWUpOwotCXBhcm0tPnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUgPSBzLmZyYW1lcGVyaW9kOworCXY0bDJfdmlkZW9fc3RkX2ZyYW1lX3BlcmlvZChidHR2X3R2bm9ybXNbYnR2LT50dm5vcm1dLnY0bDJfaWQsCisJCQkJICAgICZwYXJtLT5wYXJtLmNhcHR1cmUudGltZXBlcmZyYW1lKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjk0MywxNSArMjkzNiwxNCBAQAogCXN0cnVjdCBidHR2X2ZoICpmaCA9IHByaXY7CiAJc3RydWN0IGJ0dHYgKmJ0diA9IGZoLT5idHY7CiAKLQlpZiAoVU5TRVQgPT0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lcikKKwlpZiAoYnR2LT50dW5lcl90eXBlID09IFRVTkVSX0FCU0VOVCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKDAgIT0gdC0+aW5kZXgpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmYnR2LT5sb2NrKTsKLQltZW1zZXQodCwgMCwgc2l6ZW9mKCp0KSk7CiAJdC0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk87Ci0JYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgVklESU9DX0dfVFVORVIsIHQpOworCWJ0dHZfY2FsbF9hbGwoYnR2LCB0dW5lciwgZ190dW5lciwgdCk7CiAJc3RyY3B5KHQtPm5hbWUsICJUZWxldmlzaW9uIik7CiAJdC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX05PUk07CiAJdC0+dHlwZSAgICAgICA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOwpAQCAtMzIxMiwyOSArMzIwNCwxOSBAQAogc3RhdGljIGludCBidHR2X29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJaW50IG1pbm9yID0gdmlkZW9fZGV2ZGF0YShmaWxlKS0+bWlub3I7Ci0Jc3RydWN0IGJ0dHYgKmJ0diA9IE5VTEw7CisJc3RydWN0IGJ0dHYgKmJ0diA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJc3RydWN0IGJ0dHZfZmggKmZoOwogCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gMDsKLQl1bnNpZ25lZCBpbnQgaTsKIAogCWRwcmludGsoS0VSTl9ERUJVRyAiYnR0djogb3BlbiBtaW5vcj0lZFxuIixtaW5vcik7CiAKIAlsb2NrX2tlcm5lbCgpOwotCWZvciAoaSA9IDA7IGkgPCBidHR2X251bTsgaSsrKSB7Ci0JCWlmIChidHR2c1tpXS52aWRlb19kZXYgJiYKLQkJICAgIGJ0dHZzW2ldLnZpZGVvX2Rldi0+bWlub3IgPT0gbWlub3IpIHsKLQkJCWJ0diA9ICZidHR2c1tpXTsKLQkJCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JCQlicmVhazsKLQkJfQotCQlpZiAoYnR0dnNbaV0udmJpX2RldiAmJgotCQkgICAgYnR0dnNbaV0udmJpX2Rldi0+bWlub3IgPT0gbWlub3IpIHsKLQkJCWJ0diA9ICZidHR2c1tpXTsKLQkJCXR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOwotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0JaWYgKE5VTEwgPT0gYnR2KSB7CisJaWYgKGJ0di0+dmlkZW9fZGV2LT5taW5vciA9PSBtaW5vcikgeworCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCX0gZWxzZSBpZiAoYnR2LT52YmlfZGV2LT5taW5vciA9PSBtaW5vcikgeworCQl0eXBlID0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKKwl9IGVsc2UgeworCQlXQVJOX09OKDEpOwogCQl1bmxvY2tfa2VybmVsKCk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KQEAgLTM0MjQsMjAgKzM0MDYsMTQgQEAKIHN0YXRpYyBpbnQgcmFkaW9fb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKIHsKIAlpbnQgbWlub3IgPSB2aWRlb19kZXZkYXRhKGZpbGUpLT5taW5vcjsKLQlzdHJ1Y3QgYnR0diAqYnR2ID0gTlVMTDsKKwlzdHJ1Y3QgYnR0diAqYnR2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlzdHJ1Y3QgYnR0dl9maCAqZmg7Ci0JdW5zaWduZWQgaW50IGk7CiAKIAlkcHJpbnRrKCJidHR2OiBvcGVuIG1pbm9yPSVkXG4iLG1pbm9yKTsKIAogCWxvY2tfa2VybmVsKCk7Ci0JZm9yIChpID0gMDsgaSA8IGJ0dHZfbnVtOyBpKyspIHsKLQkJaWYgKGJ0dHZzW2ldLnJhZGlvX2RldiAmJiBidHR2c1tpXS5yYWRpb19kZXYtPm1pbm9yID09IG1pbm9yKSB7Ci0JCQlidHYgPSAmYnR0dnNbaV07Ci0JCQlicmVhazsKLQkJfQotCX0KLQlpZiAoTlVMTCA9PSBidHYpIHsKKwlXQVJOX09OKGJ0di0+cmFkaW9fZGV2ICYmIGJ0di0+cmFkaW9fZGV2LT5taW5vciAhPSBtaW5vcik7CisJaWYgKCFidHYtPnJhZGlvX2RldiB8fCBidHYtPnJhZGlvX2Rldi0+bWlub3IgIT0gbWlub3IpIHsKIAkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CkBAIC0zNDU4LDcgKzM0MzQsNyBAQAogCiAJYnR2LT5yYWRpb191c2VyKys7CiAKLQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LEFVRENfU0VUX1JBRElPLE5VTEwpOworCWJ0dHZfY2FsbF9hbGwoYnR2LCB0dW5lciwgc19yYWRpbyk7CiAJYXVkaW9faW5wdXQoYnR2LFRWQVVESU9fSU5QVVRfUkFESU8pOwogCiAJbXV0ZXhfdW5sb2NrKCZidHYtPmxvY2spOwpAQCAtMzQ3OCw3ICszNDU0LDcgQEAKIAogCWJ0di0+cmFkaW9fdXNlci0tOwogCi0JYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgUkRTX0NNRF9DTE9TRSwgJmNtZCk7CisJYnR0dl9jYWxsX2FsbChidHYsIGNvcmUsIGlvY3RsLCBSRFNfQ01EX0NMT1NFLCAmY21kKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzUwMywxNiArMzQ3OSwxNSBAQAogCXN0cnVjdCBidHR2X2ZoICpmaCA9IHByaXY7CiAJc3RydWN0IGJ0dHYgKmJ0diA9IGZoLT5idHY7CiAKLQlpZiAoVU5TRVQgPT0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lcikKKwlpZiAoYnR2LT50dW5lcl90eXBlID09IFRVTkVSX0FCU0VOVCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKDAgIT0gdC0+aW5kZXgpCiAJCXJldHVybiAtRUlOVkFMOwogCW11dGV4X2xvY2soJmJ0di0+bG9jayk7Ci0JbWVtc2V0KHQsIDAsIHNpemVvZigqdCkpOwogCXN0cmNweSh0LT5uYW1lLCAiUmFkaW8iKTsKIAl0LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAotCWJ0dHZfY2FsbF9pMmNfY2xpZW50cyhidHYsIFZJRElPQ19HX1RVTkVSLCB0KTsKKwlidHR2X2NhbGxfYWxsKGJ0diwgdHVuZXIsIGdfdHVuZXIsIHQpOwogCiAJaWYgKGJ0di0+YXVkaW9fbW9kZV9ncGlvKQogCQlidHYtPmF1ZGlvX21vZGVfZ3BpbyhidHYsIHQsIDApOwpAQCAtMzU1NCw3ICszNTI5LDcgQEAKIAlpZiAoMCAhPSB0LT5pbmRleCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlidHR2X2NhbGxfaTJjX2NsaWVudHMoYnR2LCBWSURJT0NfR19UVU5FUiwgdCk7CisJYnR0dl9jYWxsX2FsbChidHYsIHR1bmVyLCBnX3R1bmVyLCB0KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzYxNSw3ICszNTkwLDcgQEAKIAljbWQuaW5zdGFuY2UgPSBmaWxlOwogCWNtZC5yZXN1bHQgPSAtRU5PREVWOwogCi0JYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgUkRTX0NNRF9SRUFELCAmY21kKTsKKwlidHR2X2NhbGxfYWxsKGJ0diwgY29yZSwgaW9jdGwsIFJEU19DTURfUkVBRCwgJmNtZCk7CiAKIAlyZXR1cm4gY21kLnJlc3VsdDsKIH0KQEAgLTM2MjgsNyArMzYwMyw3IEBACiAJY21kLmluc3RhbmNlID0gZmlsZTsKIAljbWQuZXZlbnRfbGlzdCA9IHdhaXQ7CiAJY21kLnJlc3VsdCA9IC1FTk9ERVY7Ci0JYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgUkRTX0NNRF9QT0xMLCAmY21kKTsKKwlidHR2X2NhbGxfYWxsKGJ0diwgY29yZSwgaW9jdGwsIFJEU19DTURfUE9MTCwgJmNtZCk7CiAKIAlyZXR1cm4gY21kLnJlc3VsdDsKIH0KQEAgLTM3MTIsMTQgKzM2ODcsMTQgQEAKIAl1bnNpZ25lZCBpbnQgaSxqLG47CiAKIAlwcmludGsoIiVzOiByaXNjIGRpc2FzbTogJXAgW2RtYT0weCUwOGx4XVxuIiwKLQkgICAgICAgYnR2LT5jLm5hbWUsIHJpc2MtPmNwdSwgKHVuc2lnbmVkIGxvbmcpcmlzYy0+ZG1hKTsKKwkgICAgICAgYnR2LT5jLnY0bDJfZGV2Lm5hbWUsIHJpc2MtPmNwdSwgKHVuc2lnbmVkIGxvbmcpcmlzYy0+ZG1hKTsKIAlmb3IgKGkgPSAwOyBpIDwgKHJpc2MtPnNpemUgPj4gMik7IGkgKz0gbikgewotCQlwcmludGsoIiVzOiAgIDB4JWx4OiAiLCBidHYtPmMubmFtZSwKKwkJcHJpbnRrKCIlczogICAweCVseDogIiwgYnR2LT5jLnY0bDJfZGV2Lm5hbWUsCiAJCSAgICAgICAodW5zaWduZWQgbG9uZykocmlzYy0+ZG1hICsgKGk8PDIpKSk7CiAJCW4gPSBidHR2X3Jpc2NfZGVjb2RlKGxlMzJfdG9fY3B1KHJpc2MtPmNwdVtpXSkpOwogCQlmb3IgKGogPSAxOyBqIDwgbjsgaisrKQogCQkJcHJpbnRrKCIlczogICAweCVseDogMHglMDh4IFsgYXJnICMlZCBdXG4iLAotCQkJICAgICAgIGJ0di0+Yy5uYW1lLCAodW5zaWduZWQgbG9uZykocmlzYy0+ZG1hICsgKChpK2opPDwyKSksCisJCQkgICAgICAgYnR2LT5jLnY0bDJfZGV2Lm5hbWUsICh1bnNpZ25lZCBsb25nKShyaXNjLT5kbWEgKyAoKGkraik8PDIpKSwKIAkJCSAgICAgICByaXNjLT5jcHVbaStqXSwgaik7CiAJCWlmICgwID09IHJpc2MtPmNwdVtpXSkKIAkJCWJyZWFrOwpAQCAtNDE5NSw5ICs0MTcwLDEwIEBACiAJCXJldHVybiBOVUxMOwogCSp2ZmQgPSAqdGVtcGxhdGU7CiAJdmZkLT5taW5vciAgID0gLTE7Ci0JdmZkLT5wYXJlbnQgID0gJmJ0di0+Yy5wY2ktPmRldjsKKwl2ZmQtPnY0bDJfZGV2ID0gJmJ0di0+Yy52NGwyX2RldjsKIAl2ZmQtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKIAl2ZmQtPmRlYnVnICAgPSBidHR2X2RlYnVnOworCXZpZGVvX3NldF9kcnZkYXRhKHZmZCwgYnR2KTsKIAlzbnByaW50Zih2ZmQtPm5hbWUsIHNpemVvZih2ZmQtPm5hbWUpLCAiQlQlZCVzICVzICglcykiLAogCQkgYnR2LT5pZCwgKGJ0di0+aWQ9PTg0OCAmJiBidHYtPnJldmlzaW9uPT0weDEyKSA/ICJBIiA6ICIiLAogCQkgdHlwZV9uYW1lLCBidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm5hbWUpOwpAQCAtNDMwNywxMCArNDI4MywxNCBAQAogCWlmIChidHR2X251bSA9PSBCVFRWX01BWCkKIAkJcmV0dXJuIC1FTk9NRU07CiAJcHJpbnRrKEtFUk5fSU5GTyAiYnR0djogQnQ4eHggY2FyZCBmb3VuZCAoJWQpLlxuIiwgYnR0dl9udW0pOwotCWJ0dj0mYnR0dnNbYnR0dl9udW1dOwotCW1lbXNldChidHYsMCxzaXplb2YoKmJ0dikpOworCWJ0dHZzW2J0dHZfbnVtXSA9IGJ0diA9IGt6YWxsb2Moc2l6ZW9mKCpidHYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoYnR2ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJidHR2OiBvdXQgb2YgbWVtb3J5LlxuIik7CisJCXJldHVybiAtRU5PTUVNOworCX0KIAlidHYtPmMubnIgID0gYnR0dl9udW07Ci0Jc3ByaW50ZihidHYtPmMubmFtZSwiYnR0diVkIixidHYtPmMubnIpOworCXNucHJpbnRmKGJ0di0+Yy52NGwyX2Rldi5uYW1lLCBzaXplb2YoYnR2LT5jLnY0bDJfZGV2Lm5hbWUpLAorCQkJImJ0dHYlZCIsIGJ0di0+Yy5ucik7CiAKIAkvKiBpbml0aWFsaXplIHN0cnVjdHMgLyBmaWxsIGluIGRlZmF1bHRzICovCiAJbXV0ZXhfaW5pdCgmYnR2LT5sb2NrKTsKQEAgLTQzNDcsNyArNDMyNyw3IEBACiAJfQogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChkZXYsMCksCiAJCQkJcGNpX3Jlc291cmNlX2xlbihkZXYsMCksCi0JCQkJYnR2LT5jLm5hbWUpKSB7CisJCQkJYnR2LT5jLnY0bDJfZGV2Lm5hbWUpKSB7CiAJCXByaW50ayhLRVJOX1dBUk5JTkcgImJ0dHYlZDogY2FuJ3QgcmVxdWVzdCBpb21lbSAoMHglbGx4KS5cbiIsCiAJCSAgICAgICBidHYtPmMubnIsCiAJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKXBjaV9yZXNvdXJjZV9zdGFydChkZXYsMCkpOwpAQCAtNDM1NSw3ICs0MzM1LDEyIEBACiAJfQogCXBjaV9zZXRfbWFzdGVyKGRldik7CiAJcGNpX3NldF9jb21tYW5kKGRldik7Ci0JcGNpX3NldF9kcnZkYXRhKGRldixidHYpOworCisJcmVzdWx0ID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJmRldi0+ZGV2LCAmYnR2LT5jLnY0bDJfZGV2KTsKKwlpZiAocmVzdWx0IDwgMCkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJidHR2JWQ6IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCkgZmFpbGVkXG4iLCBidHYtPmMubnIpOworCQlnb3RvIGZhaWwwOworCX0KIAogCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0NMQVNTX1JFVklTSU9OLCAmYnR2LT5yZXZpc2lvbik7CiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgJmxhdCk7CkBAIC00Mzc5LDcgKzQzNjQsNyBAQAogCS8qIGRpc2FibGUgaXJxcywgcmVnaXN0ZXIgaXJxIGhhbmRsZXIgKi8KIAlidHdyaXRlKDAsIEJUODQ4X0lOVF9NQVNLKTsKIAlyZXN1bHQgPSByZXF1ZXN0X2lycShidHYtPmMucGNpLT5pcnEsIGJ0dHZfaXJxLAotCQkJICAgICBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsYnR2LT5jLm5hbWUsKHZvaWQgKilidHYpOworCSAgICBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsIGJ0di0+Yy52NGwyX2Rldi5uYW1lLCAodm9pZCAqKWJ0dik7CiAJaWYgKHJlc3VsdCA8IDApIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJidHR2JWQ6IGNhbid0IGdldCBJUlEgJWRcbiIsCiAJCSAgICAgICBidHR2X251bSxidHYtPmMucGNpLT5pcnEpOwpAQCAtNDQ2MywyMSArNDQ0OCwyNCBAQAogCWJ0dHZfbnVtKys7CiAJcmV0dXJuIDA7CiAKLSBmYWlsMjoKK2ZhaWwyOgogCWZyZWVfaXJxKGJ0di0+Yy5wY2ktPmlycSxidHYpOwogCi0gZmFpbDE6CitmYWlsMToKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZidHYtPmMudjRsMl9kZXYpOworCitmYWlsMDoKIAlpZiAoYnR2LT5idDg0OF9tbWlvKQogCQlpb3VubWFwKGJ0di0+YnQ4NDhfbW1pbyk7CiAJcmVsZWFzZV9tZW1fcmVnaW9uKHBjaV9yZXNvdXJjZV9zdGFydChidHYtPmMucGNpLDApLAogCQkJICAgcGNpX3Jlc291cmNlX2xlbihidHYtPmMucGNpLDApKTsKLQlwY2lfc2V0X2RydmRhdGEoZGV2LE5VTEwpOwogCXJldHVybiByZXN1bHQ7CiB9CiAKIHN0YXRpYyB2b2lkIF9fZGV2ZXhpdCBidHR2X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKIHsKLQlzdHJ1Y3QgYnR0diAqYnR2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CisJc3RydWN0IGJ0dHYgKmJ0diA9IHRvX2J0dHYodjRsMl9kZXYpOwogCiAJaWYgKGJ0dHZfdmVyYm9zZSkKIAkJcHJpbnRrKCJidHR2JWQ6IHVubG9hZGluZ1xuIixidHYtPmMubnIpOwpAQCAtNDUxMSwxNCArNDQ5OSwxOCBAQAogCXJlbGVhc2VfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQoYnR2LT5jLnBjaSwwKSwKIAkJCSAgIHBjaV9yZXNvdXJjZV9sZW4oYnR2LT5jLnBjaSwwKSk7CiAKLQlwY2lfc2V0X2RydmRhdGEocGNpX2RldiwgTlVMTCk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmYnR2LT5jLnY0bDJfZGV2KTsKKwlidHR2c1tidHYtPmMubnJdID0gTlVMTDsKKwlrZnJlZShidHYpOworCiAJcmV0dXJuOwogfQogCiAjaWZkZWYgQ09ORklHX1BNCiBzdGF0aWMgaW50IGJ0dHZfc3VzcGVuZChzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCXN0cnVjdCBidHR2ICpidHYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3QgYnR0diAqYnR2ID0gdG9fYnR0dih2NGwyX2Rldik7CiAJc3RydWN0IGJ0dHZfYnVmZmVyX3NldCBpZGxlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKQEAgLTQ1NTMsNyArNDU0NSw4IEBACiAKIHN0YXRpYyBpbnQgYnR0dl9yZXN1bWUoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCiB7Ci0Jc3RydWN0IGJ0dHYgKmJ0diA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCBidHR2ICpidHYgPSB0b19idHR2KHY0bDJfZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBlcnI7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pMmMuYwppbmRleCBiY2QyY2QyLi5hOTlkOTJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWkyYy5jCkBAIC0zNiw4ICszNiw2IEBACiAjaW5jbHVkZSA8bGludXgvamlmZmllcy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCi1zdGF0aWMgaW50IGF0dGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCk7Ci0KIHN0YXRpYyBpbnQgaTJjX2RlYnVnOwogc3RhdGljIGludCBpMmNfaHc7CiBzdGF0aWMgaW50IGkyY19zY2FuOwpAQCAtMjMxLDcgKzIyOSw4IEBACiAKIHN0YXRpYyBpbnQgYnR0dl9pMmNfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkKIHsKLQlzdHJ1Y3QgYnR0diAqYnR2ID0gaTJjX2dldF9hZGFwZGF0YShpMmNfYWRhcCk7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGkyY19nZXRfYWRhcGRhdGEoaTJjX2FkYXApOworCXN0cnVjdCBidHR2ICpidHYgPSB0b19idHR2KHY0bDJfZGV2KTsKIAlpbnQgcmV0dmFsID0gMDsKIAlpbnQgaTsKIApAQCAtMjY1LDUyICsyNjQsNiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIEkyQyBmdW5jdGlvbnMgLSBjb21tb24gc3R1ZmYgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAKLXN0YXRpYyBpbnQgYXR0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBidHR2ICpidHYgPSBpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7Ci0JaW50IGFkZHI9QUREUl9VTlNFVDsKLQotCi0JaWYgKEFERFJfVU5TRVQgIT0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lcl9hZGRyKQotCQlhZGRyID0gYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS50dW5lcl9hZGRyOwotCi0KLQlpZiAoYnR0dl9kZWJ1ZykKLQkJcHJpbnRrKEtFUk5fREVCVUcgImJ0dHYlZDogJXMgaTJjIGF0dGFjaCBbYWRkcj0weCV4LGNsaWVudD0lc11cbiIsCi0JCQlidHYtPmMubnIsIGNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSwgY2xpZW50LT5hZGRyLAotCQkJY2xpZW50LT5uYW1lKTsKLQlpZiAoIWNsaWVudC0+ZHJpdmVyLT5jb21tYW5kKQotCQlyZXR1cm4gMDsKLQotCWlmIChjbGllbnQtPmRyaXZlci0+aWQgPT0gSTJDX0RSSVZFUklEX01TUDM0MDApCi0JCWJ0di0+aTJjX21zcDM0eHhfY2xpZW50ID0gY2xpZW50OwotCWlmIChjbGllbnQtPmRyaXZlci0+aWQgPT0gSTJDX0RSSVZFUklEX1RWQVVESU8pCi0JCWJ0di0+aTJjX3R2YXVkaW9fY2xpZW50ID0gY2xpZW50OwotCWlmIChidHYtPnR1bmVyX3R5cGUgIT0gVU5TRVQpIHsKLQkJc3RydWN0IHR1bmVyX3NldHVwIHR1bl9zZXR1cDsKLQotCQlpZiAoKGFkZHI9PUFERFJfVU5TRVQpIHx8Ci0JCQkJKGFkZHI9PWNsaWVudC0+YWRkcikpIHsKLQotCQkJdHVuX3NldHVwLm1vZGVfbWFzayA9IFRfQU5BTE9HX1RWIHwgVF9ESUdJVEFMX1RWIHwgVF9SQURJTzsKLQkJCXR1bl9zZXR1cC50eXBlID0gYnR2LT50dW5lcl90eXBlOwotCQkJdHVuX3NldHVwLmFkZHIgPSBhZGRyOwotCQkJYnR0dl9jYWxsX2kyY19jbGllbnRzKGJ0diwgVFVORVJfU0VUX1RZUEVfQUREUiwgJnR1bl9zZXR1cCk7Ci0JCX0KLQotCX0KLQotCXJldHVybiAwOwotfQotCi12b2lkIGJ0dHZfY2FsbF9pMmNfY2xpZW50cyhzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JaWYgKDAgIT0gYnR2LT5pMmNfcmMpCi0JCXJldHVybjsKLQlpMmNfY2xpZW50c19jb21tYW5kKCZidHYtPmMuaTJjX2FkYXAsIGNtZCwgYXJnKTsKLX0KLQotCiAvKiByZWFkIEkyQyAqLwogaW50IGJ0dHZfSTJDUmVhZChzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBjaGFyIGFkZHIsIGNoYXIgKnByb2JlX2ZvcikKIHsKQEAgLTQxNywyMSArMzcwLDE1IEBACiAJCWJ0di0+Yy5pMmNfYWRhcC5hbGdvX2RhdGEgPSAmYnR2LT5pMmNfYWxnbzsKIAl9CiAJYnR2LT5jLmkyY19hZGFwLm93bmVyID0gVEhJU19NT0RVTEU7Ci0JYnR2LT5jLmkyY19hZGFwLmNsYXNzID0gSTJDX0NMQVNTX1RWX0FOQUxPRzsKLQlidHYtPmMuaTJjX2FkYXAuY2xpZW50X3JlZ2lzdGVyID0gYXR0YWNoX2luZm9ybTsKIAogCWJ0di0+Yy5pMmNfYWRhcC5kZXYucGFyZW50ID0gJmJ0di0+Yy5wY2ktPmRldjsKIAlzbnByaW50ZihidHYtPmMuaTJjX2FkYXAubmFtZSwgc2l6ZW9mKGJ0di0+Yy5pMmNfYWRhcC5uYW1lKSwKIAkJICJidCVkICMlZCBbJXNdIiwgYnR2LT5pZCwgYnR2LT5jLm5yLAogCQkgYnR2LT51c2VfaTJjX2h3ID8gImh3IiA6ICJzdyIpOwogCi0JaTJjX3NldF9hZGFwZGF0YSgmYnR2LT5jLmkyY19hZGFwLCBidHYpOworCWkyY19zZXRfYWRhcGRhdGEoJmJ0di0+Yy5pMmNfYWRhcCwgJmJ0di0+Yy52NGwyX2Rldik7CiAJYnR2LT5pMmNfY2xpZW50LmFkYXB0ZXIgPSAmYnR2LT5jLmkyY19hZGFwOwogCi0JaWYgKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubm9fdmlkZW8pCi0JCWJ0di0+Yy5pMmNfYWRhcC5jbGFzcyAmPSB+STJDX0NMQVNTX1RWX0FOQUxPRzsKLQlpZiAoYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5oYXNfZHZiKQotCQlidHYtPmMuaTJjX2FkYXAuY2xhc3MgfD0gSTJDX0NMQVNTX1RWX0RJR0lUQUw7CiAKIAlpZiAoYnR2LT51c2VfaTJjX2h3KSB7CiAJCWJ0di0+aTJjX3JjID0gaTJjX2FkZF9hZGFwdGVyKCZidHYtPmMuaTJjX2FkYXApOwpAQCAtNDQxLDcgKzM4OCw3IEBACiAJCWJ0di0+aTJjX3JjID0gaTJjX2JpdF9hZGRfYnVzKCZidHYtPmMuaTJjX2FkYXApOwogCX0KIAlpZiAoMCA9PSBidHYtPmkyY19yYyAmJiBpMmNfc2NhbikKLQkJZG9faTJjX3NjYW4oYnR2LT5jLm5hbWUsJmJ0di0+aTJjX2NsaWVudCk7CisJCWRvX2kyY19zY2FuKGJ0di0+Yy52NGwyX2Rldi5uYW1lLCAmYnR2LT5pMmNfY2xpZW50KTsKIAlyZXR1cm4gYnR2LT5pMmNfcmM7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1pZi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWlmLmMKaW5kZXggZWNmMDc5OC4uYTZhNTQwZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWlmLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LWlmLmMKQEAgLTQ3LDcgKzQ3LDEwIEBACiB7CiAJaWYgKGNhcmQgPj0gYnR0dl9udW0pCiAJCXJldHVybiBOVUxMOwotCXJldHVybiBidHR2c1tjYXJkXS5jLnBjaTsKKwlpZiAoIWJ0dHZzW2NhcmRdKQorCQlyZXR1cm4gTlVMTDsKKworCXJldHVybiBidHR2c1tjYXJkXS0+Yy5wY2k7CiB9CiAKIApAQCAtNTksNyArNjIsMTAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JYnR2ID0gJmJ0dHZzW2NhcmRdOworCWJ0diA9IGJ0dHZzW2NhcmRdOworCWlmICghYnR2KQorCQlyZXR1cm4gLUVOT0RFVjsKKwogCWdwaW9faW5vdXQobWFzayxkYXRhKTsKIAlpZiAoYnR0dl9ncGlvKQogCQlidHR2X2dwaW9fdHJhY2tpbmcoYnR2LCJleHRlcm4gZW5hYmxlIik7CkBAIC03NCw3ICs4MCw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWJ0diA9ICZidHR2c1tjYXJkXTsKKwlidHYgPSBidHR2c1tjYXJkXTsKKwlpZiAoIWJ0dikKKwkJcmV0dXJuIC1FTk9ERVY7CiAKIAlpZihidHYtPnNodXRkb3duKSB7CiAJCXJldHVybiAtRU5PREVWOwpAQCAtOTQsNyArMTAyLDkgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JYnR2ID0gJmJ0dHZzW2NhcmRdOworCWJ0diA9IGJ0dHZzW2NhcmRdOworCWlmICghYnR2KQorCQlyZXR1cm4gLUVOT0RFVjsKIAogLyogcHJpb3Igc2V0dGluZyBCVDg0OF9HUElPX1JFR19JTlAgaXMgKHByb2JhYmx5KSBub3QgbmVlZGVkCiAgICBiZWNhdXNlIGRpcmVjdCBpbnB1dCBpcyBzZXQgb24gaW5pdCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LXJpc2MuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di1yaXNjLmMKaW5kZXggNWIxYjhlNC4uZDE2YWYyOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LXJpc2MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtcmlzYy5jCkBAIC0zNDEsNyArMzQxLDcgQEAKIAlpbnQgdG90YWx3aWR0aCAgID0gdHZub3JtLT50b3RhbHdpZHRoOwogCWludCBzY2FsZWR0d2lkdGggPSB0dm5vcm0tPnNjYWxlZHR3aWR0aDsKIAotCWlmIChidHR2X3R2Y2FyZHNbYnR2LT5jLnR5cGVdLm11eHNlbFtidHYtPmlucHV0XSA8IDApIHsKKwlpZiAoYnR2LT5pbnB1dCA9PSBidHYtPmRpZykgewogCQlzd2lkdGggICAgICAgPSA3MjA7CiAJCXRvdGFsd2lkdGggICA9IDg1ODsKIAkJc2NhbGVkdHdpZHRoID0gODU4OwpAQCAtMzkxLDcgKzM5MSw3IEBACiAJICAgICAmJiBjcm9wLT53aWR0aCA9PSB0dm5vcm0tPmNyb3BjYXAuZGVmcmVjdC53aWR0aAogCSAgICAgJiYgY3JvcC0+aGVpZ2h0ID09IHR2bm9ybS0+Y3JvcGNhcC5kZWZyZWN0LmhlaWdodAogCSAgICAgJiYgd2lkdGggPD0gdHZub3JtLT5zd2lkdGggLyogc2VlIFBBTC1OYyBldCBhbCAqLykKLQkgICAgfHwgYnR0dl90dmNhcmRzW2J0di0+Yy50eXBlXS5tdXhzZWxbYnR2LT5pbnB1dF0gPCAwKSB7CisJICAgIHx8IGJ0di0+aW5wdXQgPT0gYnR2LT5kaWcpIHsKIAkJYnR0dl9jYWxjX2dlb19vbGQoYnR2LCBnZW8sIHdpZHRoLCBoZWlnaHQsCiAJCQkJICBib3RoX2ZpZWxkcywgdHZub3JtKTsKIAkJcmV0dXJuOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LXZiaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2LXZiaS5jCmluZGV4IDY4MTllMjEuLmU3OWE0MDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di12YmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYtdmJpLmMKQEAgLTQxMSw3ICs0MTEsNyBAQAogCXJldHVybiAwOwogfQogCi12b2lkIGJ0dHZfdmJpX2ZtdF9yZXNldChzdHJ1Y3QgYnR0dl92YmlfZm10ICpmLCBpbnQgbm9ybSkKK3ZvaWQgYnR0dl92YmlfZm10X3Jlc2V0KHN0cnVjdCBidHR2X3ZiaV9mbXQgKmYsIHVuc2lnbmVkIGludCBub3JtKQogewogCWNvbnN0IHN0cnVjdCBidHR2X3R2bm9ybSAqdHZub3JtOwogCXVuc2lnbmVkIGludCByZWFsX3NhbXBsZXNfcGVyX2xpbmU7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHYuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di5oCmluZGV4IDUyOWJmNmMuLjNkMzZkYWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0di5oCkBAIC0xNCw4ICsxNCw5IEBACiAjaWZuZGVmIF9CVFRWX0hfCiAjZGVmaW5lIF9CVFRWX0hfCiAKLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvaXItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvaXIta2JkLWkyYy5oPgogI2luY2x1ZGUgPG1lZGlhL2kyYy1hZGRyLmg+CkBAIC0xODAsNiArMTgxLDEwIEBACiAjZGVmaW5lIEJUVFZfQk9BUkRfVkQwMTIJCSAgIDB4OTkKICNkZWZpbmUgQlRUVl9CT0FSRF9WRDAxMl9YMQkJICAgMHg5YQogI2RlZmluZSBCVFRWX0JPQVJEX1ZEMDEyX1gyCQkgICAweDliCisjZGVmaW5lIEJUVFZfQk9BUkRfSVZDRTg3ODQJCSAgIDB4OWMKKyNkZWZpbmUgQlRUVl9CT0FSRF9HRU9WSVNJT05fR1Y4MDBTCSAgIDB4OWQKKyNkZWZpbmUgQlRUVl9CT0FSRF9HRU9WSVNJT05fR1Y4MDBTX1NMCSAgIDB4OWUKKyNkZWZpbmUgQlRUVl9CT0FSRF9QVjE4MyAgICAgICAgICAgICAgICAgICAweDlmCiAKIAogLyogbW9yZSBjYXJkLXNwZWNpZmljIGRlZmluZXMgKi8KQEAgLTE5MSwxMiArMTk2LDkgQEAKICNkZWZpbmUgV0lOVklFV19QVDIyNTRfREFUQSAweDIwCiAjZGVmaW5lIFdJTlZJRVdfUFQyMjU0X1NUUk9CRSAweDgwCiAKLS8qIGRpZ2l0YWxfbW9kZSAqLwotI2RlZmluZSBESUdJVEFMX01PREVfVklERU8gMQotI2RlZmluZSBESUdJVEFMX01PREVfQ0FNRVJBIDIKLQogc3RydWN0IGJ0dHZfY29yZSB7CiAJLyogZGV2aWNlIHN0cnVjdHMgKi8KKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgICB2NGwyX2RldjsKIAlzdHJ1Y3QgcGNpX2RldiAgICAgICAqcGNpOwogCXN0cnVjdCBpMmNfYWRhcHRlciAgIGkyY19hZGFwOwogCXN0cnVjdCBsaXN0X2hlYWQgICAgIHN1YnM7ICAgICAvKiBzdHJ1Y3QgYnR0dl9zdWJfZGV2aWNlICovCkBAIC0yMDQsNTkgKzIwNiw3OSBAQAogCS8qIGRldmljZSBjb25maWcgKi8KIAl1bnNpZ25lZCBpbnQgICAgICAgICBucjsgICAgICAgLyogZGV2IG5yIChmb3IgcHJpbnRrKCJidHR2JWQ6IC4uLiIpOyAgKi8KIAl1bnNpZ25lZCBpbnQgICAgICAgICB0eXBlOyAgICAgLyogY2FyZCB0eXBlIChwb2ludGVyIGludG8gdHZjYXJkc1tdKSAgKi8KLQljaGFyICAgICAgICAgICAgICAgICBuYW1lWzhdOyAgLyogZGV2IG5hbWUgKi8KIH07CiAKIHN0cnVjdCBidHR2OwogCi0KLXN0cnVjdCB0dmNhcmQKLXsKK3N0cnVjdCB0dmNhcmQgewogCWNoYXIgKm5hbWU7Ci0JdW5zaWduZWQgaW50IHZpZGVvX2lucHV0czsKLQl1bnNpZ25lZCBpbnQgYXVkaW9faW5wdXRzOwotCXVuc2lnbmVkIGludCB0dW5lcjsKLQl1bnNpZ25lZCBpbnQgc3ZoczsKLQl1bnNpZ25lZCBpbnQgZGlnaXRhbF9tb2RlOyAvLyBESUdJVEFMX01PREVfQ0FNRVJBIG9yIERJR0lUQUxfTU9ERV9WSURFTworCXZvaWQgKCp2b2x1bWVfZ3Bpbykoc3RydWN0IGJ0dHYgKmJ0diwgX191MTYgdm9sdW1lKTsKKwl2b2lkICgqYXVkaW9fbW9kZV9ncGlvKShzdHJ1Y3QgYnR0diAqYnR2LCBzdHJ1Y3QgdjRsMl90dW5lciAqdHVuZXIsIGludCBzZXQpOworCXZvaWQgKCptdXhzZWxfaG9vaykoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGlucHV0KTsKKworCS8qIE1VWCBiaXRzIGZvciBlYWNoIGlucHV0LCB0d28gYml0cyBwZXIgaW5wdXQgc3RhcnRpbmcgd2l0aCB0aGUgTFNCICovCisJdTMyIG11eHNlbDsgLyogVXNlIE1VWFNFTCgpIHRvIHNldCAqLworCiAJdTMyIGdwaW9tYXNrOwotCXUzMiBtdXhzZWxbMTZdOwogCXUzMiBncGlvbXV4WzRdOyAgLyogVHVuZXIsIFJhZGlvLCBleHRlcm5hbCwgaW50ZXJuYWwgKi8KIAl1MzIgZ3Bpb211dGU7ICAgIC8qIEdQSU8gbXV0ZSBzZXR0aW5nICovCiAJdTMyIGdwaW9tYXNrMjsgICAvKiBHUElPIE1VWCBtYXNrICovCiAKKwl1bnNpZ25lZCBpbnQgdHVuZXJfdHlwZTsKKwl1OCB0dW5lcl9hZGRyOworCXU4IHZpZGVvX2lucHV0czsJLyogTnVtYmVyIG9mIGlucHV0cyAqLworCXVuc2lnbmVkIGludCBzdmhzOjQ7CS8qIFdoaWNoIGlucHV0IGlzIHMtdmlkZW8gKi8KKyNkZWZpbmUgTk9fU1ZIUwkxNQorCXVuc2lnbmVkIGludCBwbGw6MjsKKyNkZWZpbmUgUExMX05PTkUgMAorI2RlZmluZSBQTExfMjggICAxCisjZGVmaW5lIFBMTF8zNSAgIDIKKwogCS8qIGkyYyBhdWRpbyBmbGFncyAqLwogCXVuc2lnbmVkIGludCBub19tc3AzNHh4OjE7CiAJdW5zaWduZWQgaW50IG5vX3RkYTk4NzU6MTsKIAl1bnNpZ25lZCBpbnQgbm9fdGRhNzQzMjoxOwogCXVuc2lnbmVkIGludCBuZWVkc190dmF1ZGlvOjE7CiAJdW5zaWduZWQgaW50IG1zcDM0eHhfYWx0OjE7CisJLyogTm90ZTogY3VycmVudGx5IG5vIGNhcmQgZGVmaW5pdGlvbiBuZWVkcyB0byBtYXJrIHRoZSBwcmVzZW5jZQorCSAgIG9mIGEgUkRTIHNhYTY1ODggY2hpcC4gSWYgdGhpcyBpcyBldmVyIG5lZWRlZCwgdGhlbiBhZGQgYSBuZXcKKwkgICAnaGFzX3NhYTY1ODgnIGJpdCBoZXJlLiAqLwogCi0JLyogZmxhZzogdmlkZW8gcGNpIGZ1bmN0aW9uIGlzIHVudXNlZCAqLwotCXVuc2lnbmVkIGludCBub192aWRlbzoxOworCXVuc2lnbmVkIGludCBub192aWRlbzoxOyAvKiB2aWRlbyBwY2kgZnVuY3Rpb24gaXMgdW51c2VkICovCiAJdW5zaWduZWQgaW50IGhhc19kdmI6MTsKIAl1bnNpZ25lZCBpbnQgaGFzX3JlbW90ZToxOworCXVuc2lnbmVkIGludCBoYXNfcmFkaW86MTsKKwl1bnNpZ25lZCBpbnQgaGFzX2RpZ19pbjoxOyAvKiBIYXMgZGlnaXRhbCBpbnB1dCAoYWx3YXlzIGxhc3QgaW5wdXQpICovCiAJdW5zaWduZWQgaW50IG5vX2dwaW9pcnE6MTsKLQotCS8qIG90aGVyIHNldHRpbmdzICovCi0JdW5zaWduZWQgaW50IHBsbDsKLSNkZWZpbmUgUExMX05PTkUgMAotI2RlZmluZSBQTExfMjggICAxCi0jZGVmaW5lIFBMTF8zNSAgIDIKLQotCXVuc2lnbmVkIGludCB0dW5lcl90eXBlOwotCXVuc2lnbmVkIGludCB0dW5lcl9hZGRyOwotCXVuc2lnbmVkIGludCByYWRpb19hZGRyOwotCi0JdW5zaWduZWQgaW50IGhhc19yYWRpbzsKLQotCXZvaWQgKCp2b2x1bWVfZ3Bpbykoc3RydWN0IGJ0dHYgKmJ0diwgX191MTYgdm9sdW1lKTsKLQl2b2lkICgqYXVkaW9fbW9kZV9ncGlvKShzdHJ1Y3QgYnR0diAqYnR2LCBzdHJ1Y3QgdjRsMl90dW5lciAqdHVuZXIsIGludCBzZXQpOwotCi0Jdm9pZCAoKm11eHNlbF9ob29rKShzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBpbnQgaW5wdXQpOwogfTsKIAogZXh0ZXJuIHN0cnVjdCB0dmNhcmQgYnR0dl90dmNhcmRzW107CiAKKy8qCisgKiBUaGlzIGJpdCBvZiBjcHAgdm9vZG9vIGlzIHVzZWQgdG8gY3JlYXRlIGEgbWFjcm8gd2l0aCBhIHZhcmlhYmxlIG51bWJlciBvZgorICogYXJndW1lbnRzICgxIHRvIDE2KS4gIEl0IHdpbGwgcGFjayBlYWNoIGFyZ3VtZW50IGludG8gYSB3b3JkIHR3byBiaXRzIGF0IGEKKyAqIHRpbWUuICBJdCBjYW4ndCBiZSBhIGZ1bmN0aW9uIGJlY2F1c2UgaXQgbmVlZHMgdG8gYmUgY29tcGlsZSB0aW1lIGNvbnN0YW50IHRvCisgKiBpbml0aWFsaXplIHN0cnVjdHVyZXMuICBTaW5jZSBlYWNoIGFyZ3VtZW50IG11c3QgZml0IGluIHR3byBiaXRzLCBpdCdzIG9rCisgKiB0aGF0IHRoZXkgYXJlIGNoYW5nZWQgdG8gb2N0YWwuICBPbmUgc2hvdWxkIG5vdCB1c2UgaGV4IG51bWJlciwgbWFjcm9zLCBvcgorICogYW55dGhpbmcgZWxzZSB3aXRoIHRoaXMgbWFjcm8uICBKdXN0IHVzZSBwbGFpbiBpbnRlZ2VycyBmcm9tIDAgdG8gMy4KKyAqLworI2RlZmluZSBfTVVYU0VMZihhKSAgICAgIAkwIyNhIDw8IDMwCisjZGVmaW5lIF9NVVhTRUxlKGEsIGIuLi4pCTAjI2EgPDwgMjggfCBfTVVYU0VMZihiKQorI2RlZmluZSBfTVVYU0VMZChhLCBiLi4uKQkwIyNhIDw8IDI2IHwgX01VWFNFTGUoYikKKyNkZWZpbmUgX01VWFNFTGMoYSwgYi4uLikJMCMjYSA8PCAyNCB8IF9NVVhTRUxkKGIpCisjZGVmaW5lIF9NVVhTRUxiKGEsIGIuLi4pCTAjI2EgPDwgMjIgfCBfTVVYU0VMYyhiKQorI2RlZmluZSBfTVVYU0VMYShhLCBiLi4uKQkwIyNhIDw8IDIwIHwgX01VWFNFTGIoYikKKyNkZWZpbmUgX01VWFNFTDkoYSwgYi4uLikJMCMjYSA8PCAxOCB8IF9NVVhTRUxhKGIpCisjZGVmaW5lIF9NVVhTRUw4KGEsIGIuLi4pCTAjI2EgPDwgMTYgfCBfTVVYU0VMOShiKQorI2RlZmluZSBfTVVYU0VMNyhhLCBiLi4uKQkwIyNhIDw8IDE0IHwgX01VWFNFTDgoYikKKyNkZWZpbmUgX01VWFNFTDYoYSwgYi4uLikJMCMjYSA8PCAxMiB8IF9NVVhTRUw3KGIpCisjZGVmaW5lIF9NVVhTRUw1KGEsIGIuLi4pCTAjI2EgPDwgMTAgfCBfTVVYU0VMNihiKQorI2RlZmluZSBfTVVYU0VMNChhLCBiLi4uKQkwIyNhIDw8IDggIHwgX01VWFNFTDUoYikKKyNkZWZpbmUgX01VWFNFTDMoYSwgYi4uLikJMCMjYSA8PCA2ICB8IF9NVVhTRUw0KGIpCisjZGVmaW5lIF9NVVhTRUwyKGEsIGIuLi4pCTAjI2EgPDwgNCAgfCBfTVVYU0VMMyhiKQorI2RlZmluZSBfTVVYU0VMMShhLCBiLi4uKQkwIyNhIDw8IDIgIHwgX01VWFNFTDIoYikKKyNkZWZpbmUgTVVYU0VMKGEsIGIuLi4pCQkoYSB8IF9NVVhTRUwxKGIpKQorCiAvKiBpZGVudGlmaWNhdGlvbiAvIGluaXRpYWxpemF0aW9uIG9mIHRoZSBjYXJkICovCiBleHRlcm4gdm9pZCBidHR2X2lkY2FyZChzdHJ1Y3QgYnR0diAqYnR2KTsKIGV4dGVybiB2b2lkIGJ0dHZfaW5pdF9jYXJkMShzdHJ1Y3QgYnR0diAqYnR2KTsKQEAgLTI2NCw3ICsyODYsNyBAQAogCiAvKiBjYXJkLXNwZWNpZmljIGZ1bnRpb25zICovCiBleHRlcm4gdm9pZCB0ZWE1NzU3X3NldF9mcmVxKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIHNob3J0IGZyZXEpOwotZXh0ZXJuIHZvaWQgYnR0dl90ZGE5ODgwX3NldG5vcm0oc3RydWN0IGJ0dHYgKmJ0diwgaW50IG5vcm0pOworZXh0ZXJuIHUzMiBidHR2X3RkYTk4ODBfc2V0bm9ybShzdHJ1Y3QgYnR0diAqYnR2LCB1MzIgZ3Bpb2JpdHMpOwogCiAvKiBleHRyYSB0d2Vha3MgZm9yIHNvbWUgY2hpcHNldHMgKi8KIGV4dGVybiB2b2lkIGJ0dHZfY2hlY2tfY2hpcHNldCh2b2lkKTsKQEAgLTMzNiw3ICszNTgsOSBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogaTJjICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogCi1leHRlcm4gdm9pZCBidHR2X2NhbGxfaTJjX2NsaWVudHMoc3RydWN0IGJ0dHYgKmJ0diwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKKyNkZWZpbmUgYnR0dl9jYWxsX2FsbChidHYsIG8sIGYsIGFyZ3MuLi4pIFwKKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmYnR2LT5jLnY0bDJfZGV2LCAwLCBvLCBmLCAjI2FyZ3MpCisKIGV4dGVybiBpbnQgYnR0dl9JMkNSZWFkKHN0cnVjdCBidHR2ICpidHYsIHVuc2lnbmVkIGNoYXIgYWRkciwgY2hhciAqcHJvYmVfZm9yKTsKIGV4dGVybiBpbnQgYnR0dl9JMkNXcml0ZShzdHJ1Y3QgYnR0diAqYnR2LCB1bnNpZ25lZCBjaGFyIGFkZHIsIHVuc2lnbmVkIGNoYXIgYjEsCiAJCQkgdW5zaWduZWQgY2hhciBiMiwgaW50IGJvdGgpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2cC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9idDh4eC9idHR2cC5oCmluZGV4IDE5OWE0ZDIuLjk2NDk4NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vYnQ4eHgvYnR0dnAuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2J0OHh4L2J0dHZwLmgKQEAgLTMyLDcgKzMyLDYgQEAKICNpbmNsdWRlIDxsaW51eC93YWl0Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pbnB1dC5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CkBAIC0xMzUsNyArMTM0LDcgQEAKIAogCS8qIGJ0dHYgc3BlY2lmaWMgKi8KIAljb25zdCBzdHJ1Y3QgYnR0dl9mb3JtYXQgICAqZm10OwotCWludCAgICAgICAgICAgICAgICAgICAgICAgIHR2bm9ybTsKKwl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICB0dm5vcm07CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgYnRmb3JtYXQ7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgYnRzd2FwOwogCXN0cnVjdCBidHR2X2dlb21ldHJ5ICAgICAgIGdlbzsKQEAgLTE1NCw3ICsxNTMsNyBAQAogfTsKIAogc3RydWN0IGJ0dHZfb3ZlcmxheSB7Ci0JaW50ICAgICAgICAgICAgICAgICAgICB0dm5vcm07CisJdW5zaWduZWQgaW50ICAgICAgICAgICB0dm5vcm07CiAJc3RydWN0IHY0bDJfcmVjdCAgICAgICB3OwogCWVudW0gdjRsMl9maWVsZCAgICAgICAgZmllbGQ7CiAJc3RydWN0IHY0bDJfY2xpcCAgICAgICAqY2xpcHM7CkBAIC0xNzQsNyArMTczLDcgQEAKIH07CiAKIC8qIGJ0dHYtdmJpLmMgKi8KLXZvaWQgYnR0dl92YmlfZm10X3Jlc2V0KHN0cnVjdCBidHR2X3ZiaV9mbXQgKmYsIGludCBub3JtKTsKK3ZvaWQgYnR0dl92YmlfZm10X3Jlc2V0KHN0cnVjdCBidHR2X3ZiaV9mbXQgKmYsIHVuc2lnbmVkIGludCBub3JtKTsKIAogc3RydWN0IGJ0dHZfY3JvcCB7CiAJLyogQSBjcm9wcGluZyByZWN0YW5nbGUgaW4gc3RydWN0IGJ0dHZfdHZub3JtLmNyb3BjYXAgdW5pdHMuICovCkBAIC0zMjksNyArMzI4LDggQEAKIAl1bnNpZ25lZCBpbnQgY2FyZGlkOyAgIC8qIHBjaSBzdWJzeXN0ZW0gaWQgKGJ0ODc4IGJhc2VkIG9uZXMpICovCiAJdW5zaWduZWQgaW50IHR1bmVyX3R5cGU7ICAvKiB0dW5lciBjaGlwIHR5cGUgKi8KIAl1bnNpZ25lZCBpbnQgdGRhOTg4N19jb25mOwotCXVuc2lnbmVkIGludCBzdmhzOworCXVuc2lnbmVkIGludCBzdmhzLCBkaWc7CisJdW5zaWduZWQgaW50IGhhc19zYWE2NTg4OjE7CiAJc3RydWN0IGJ0dHZfcGxsX2luZm8gcGxsOwogCWludCB0cml0b24xOwogCWludCBncGlvaXJxOwpAQCAtMzUzLDggKzM1Myw4IEBACiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgaTJjX3N0YXRlLCBpMmNfcmM7CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgaTJjX2RvbmU7CiAJd2FpdF9xdWV1ZV9oZWFkX3QgICAgICAgICAgaTJjX3F1ZXVlOwotCXN0cnVjdCBpMmNfY2xpZW50IAkgICppMmNfbXNwMzR4eF9jbGllbnQ7Ci0Jc3RydWN0IGkyY19jbGllbnQgCSAgKmkyY190dmF1ZGlvX2NsaWVudDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgCSAgKnNkX21zcDM0eHg7CisJc3RydWN0IHY0bDJfc3ViZGV2IAkgICpzZF90dmF1ZGlvOwogCiAJLyogdmlkZW80bGludXggKDEpICovCiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fZGV2OwpAQCAtMzc4LDcgKzM3OCw4IEBACiAJdW5zaWduZWQgaW50IGF1ZGlvOwogCXVuc2lnbmVkIGludCBtdXRlOwogCXVuc2lnbmVkIGxvbmcgZnJlcTsKLQlpbnQgdHZub3JtLGh1ZSxjb250cmFzdCxicmlnaHQsc2F0dXJhdGlvbjsKKwl1bnNpZ25lZCBpbnQgdHZub3JtOworCWludCBodWUsIGNvbnRyYXN0LCBicmlnaHQsIHNhdHVyYXRpb247CiAJc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgZmJ1ZjsKIAl1bnNpZ25lZCBpbnQgZmllbGRfY291bnQ7CiAKQEAgLTQ1OCwxMCArNDU5LDIxIEBACiAJX19zMzIJCQljcm9wX3N0YXJ0OwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgYnR0diAqdG9fYnR0dihzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBidHR2LCBjLnY0bDJfZGV2KTsKK30KKwogLyogb3VyIGRldmljZXMgKi8KICNkZWZpbmUgQlRUVl9NQVggMzIKIGV4dGVybiB1bnNpZ25lZCBpbnQgYnR0dl9udW07Ci1leHRlcm4gc3RydWN0IGJ0dHYgYnR0dnNbQlRUVl9NQVhdOworZXh0ZXJuIHN0cnVjdCBidHR2ICpidHR2c1tCVFRWX01BWF07CisKK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJ0dHZfbXV4c2VsKGNvbnN0IHN0cnVjdCBidHR2ICpidHYsCisJCQkJICAgICAgIHVuc2lnbmVkIGludCBpbnB1dCkKK3sKKwlyZXR1cm4gKGJ0dHZfdHZjYXJkc1tidHYtPmMudHlwZV0ubXV4c2VsID4+IChpbnB1dCAqIDIpKSAmIDM7Cit9CiAKICNlbmRpZgogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jYWZlX2NjaWMuYwppbmRleCA0NmZkNTczLi43YWJlOTRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NhZmVfY2NpYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY2FmZV9jY2ljLmMKQEAgLTExLDYgKzExLDEyIEBACiAgKgogICogV3JpdHRlbiBieSBKb25hdGhhbiBDb3JiZXQsIGNvcmJldEBsd24ubmV0LgogICoKKyAqIHY0bDJfZGV2aWNlL3Y0bDJfc3ViZGV2IGNvbnZlcnNpb24gYnk6CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSGFucyBWZXJrdWlsIDxodmVya3VpbEB4czRhbGwubmw+CisgKgorICogTm90ZTogdGhpcyBjb252ZXJzaW9uIGlzIHVudGVzdGVkISBQbGVhc2UgY29udGFjdCB0aGUgbGludXgtbWVkaWEKKyAqIG1haWxpbmdsaXN0IGlmIHlvdSBjYW4gdGVzdCB0aGlzLCB0b2dldGhlciB3aXRoIHRoZSB0ZXN0IHJlc3VsdHMuCisgKgogICogVGhpcyBmaWxlIG1heSBiZSBkaXN0cmlidXRlZCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsCiAgKiBQdWJsaWMgTGljZW5zZSwgdmVyc2lvbiAyLgogICovCkBAIC0yNSw3ICszMSw3IEBACiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgpAQCAtMzMsNyArMzksNiBAQAogI2luY2x1ZGUgPGxpbnV4L2xpc3QuaD4KICNpbmNsdWRlIDxsaW51eC9kbWEtbWFwcGluZy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgogI2luY2x1ZGUgPGxpbnV4L2ppZmZpZXMuaD4KICNpbmNsdWRlIDxsaW51eC92bWFsbG9jLmg+CiAKQEAgLTEzNiw2ICsxNDEsNyBAQAogICovCiBzdHJ1Y3QgY2FmZV9jYW1lcmEKIHsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CiAJZW51bSBjYWZlX3N0YXRlIHN0YXRlOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7ICAgCQkvKiBCdWZmZXIgc3RhdHVzLCBtYWlubHkgKGRldl9sb2NrKSAqLwogCWludCB1c2VyczsJCQkvKiBIb3cgbWFueSBvcGVuIEZEcyAqLwpAQCAtMTQ1LDkgKzE1MSwxMCBAQAogCSAqIFN1YnN5c3RlbSBzdHJ1Y3R1cmVzLgogCSAqLwogCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwotCXN0cnVjdCB2aWRlb19kZXZpY2UgdjRsZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgdmRldjsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXB0ZXI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKnNlbnNvcjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNlbnNvcjsKKwl1bnNpZ25lZCBzaG9ydCBzZW5zb3JfYWRkcjsKIAogCXVuc2lnbmVkIGNoYXIgX19pb21lbSAqcmVnczsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGRldl9saXN0OwkvKiBsaW5rIHRvIG90aGVyIGRldmljZXMgKi8KQEAgLTE4MCwxMCArMTg3LDYgQEAKIAkvKiBNaXNjICovCiAJd2FpdF9xdWV1ZV9oZWFkX3Qgc21idXNfd2FpdDsJLyogV2FpdGluZyBvbiBpMmMgZXZlbnRzICovCiAJd2FpdF9xdWV1ZV9oZWFkX3QgaW93YWl0OwkvKiBXYWl0aW5nIG9uIGZyYW1lIGRhdGEgKi8KLSNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi0Jc3RydWN0IGRlbnRyeSAqZGZzX3JlZ3M7Ci0Jc3RydWN0IGRlbnRyeSAqZGZzX2NhbV9yZWdzOwotI2VuZGlmCiB9OwogCiAvKgpAQCAtMTk1LDYgKzE5OCwxMyBAQAogI2RlZmluZSBDRl9ETUFfQUNUSVZFCSAzCS8qIEEgZnJhbWUgaXMgaW5jb21pbmcgKi8KICNkZWZpbmUgQ0ZfQ09ORklHX05FRURFRCA0CS8qIE11c3QgY29uZmlndXJlIGhhcmR3YXJlICovCiAKKyNkZWZpbmUgc2Vuc29yX2NhbGwoY2FtLCBvLCBmLCBhcmdzLi4uKSBcCisJdjRsMl9zdWJkZXZfY2FsbChjYW0tPnNlbnNvciwgbywgZiwgIyNhcmdzKQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjYWZlX2NhbWVyYSAqdG9fY2FtKHN0cnVjdCB2NGwyX2RldmljZSAqZGV2KQoreworCXJldHVybiBjb250YWluZXJfb2YoZGV2LCBzdHJ1Y3QgY2FmZV9jYW1lcmEsIHY0bDJfZGV2KTsKK30KIAogCiAvKgpAQCAtMjM4LDU5ICsyNDgsNyBAQAogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCi0vKgotICogV2Uga2VlcCBhIHNpbXBsZSBsaXN0IG9mIGtub3duIGRldmljZXMgdG8gc2VhcmNoIGF0IG9wZW4gdGltZS4KLSAqLwotc3RhdGljIExJU1RfSEVBRChjYWZlX2Rldl9saXN0KTsKLXN0YXRpYyBERUZJTkVfTVVURVgoY2FmZV9kZXZfbGlzdF9sb2NrKTsKIAotc3RhdGljIHZvaWQgY2FmZV9hZGRfZGV2KHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQotewotCW11dGV4X2xvY2soJmNhZmVfZGV2X2xpc3RfbG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmY2FtLT5kZXZfbGlzdCwgJmNhZmVfZGV2X2xpc3QpOwotCW11dGV4X3VubG9jaygmY2FmZV9kZXZfbGlzdF9sb2NrKTsKLX0KLQotc3RhdGljIHZvaWQgY2FmZV9yZW1vdmVfZGV2KHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQotewotCW11dGV4X2xvY2soJmNhZmVfZGV2X2xpc3RfbG9jayk7Ci0JbGlzdF9kZWwoJmNhbS0+ZGV2X2xpc3QpOwotCW11dGV4X3VubG9jaygmY2FmZV9kZXZfbGlzdF9sb2NrKTsKLX0KLQotc3RhdGljIHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FmZV9maW5kX2RldihpbnQgbWlub3IpCi17Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW07Ci0KLQltdXRleF9sb2NrKCZjYWZlX2Rldl9saXN0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY2FtLCAmY2FmZV9kZXZfbGlzdCwgZGV2X2xpc3QpIHsKLQkJaWYgKGNhbS0+djRsZGV2Lm1pbm9yID09IG1pbm9yKQotCQkJZ290byBkb25lOwotCX0KLQljYW0gPSBOVUxMOwotICBkb25lOgotCW11dGV4X3VubG9jaygmY2FmZV9kZXZfbGlzdF9sb2NrKTsKLQlyZXR1cm4gY2FtOwotfQotCi0KLXN0YXRpYyBzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhZmVfZmluZF9ieV9wZGV2KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQotewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtOwotCi0JbXV0ZXhfbG9jaygmY2FmZV9kZXZfbGlzdF9sb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNhbSwgJmNhZmVfZGV2X2xpc3QsIGRldl9saXN0KSB7Ci0JCWlmIChjYW0tPnBkZXYgPT0gcGRldikKLQkJCWdvdG8gZG9uZTsKLQl9Ci0JY2FtID0gTlVMTDsKLSAgZG9uZToKLQltdXRleF91bmxvY2soJmNhZmVfZGV2X2xpc3RfbG9jayk7Ci0JcmV0dXJuIGNhbTsKLX0KLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qCiAgKiBEZXZpY2UgcmVnaXN0ZXIgSS9PCiAgKi8KQEAgLTQ4MSwxOCArNDM5LDExIEBACiAJCXVuc2lnbmVkIHNob3J0IGZsYWdzLCBjaGFyIHJ3LCB1OCBjb21tYW5kLAogCQlpbnQgc2l6ZSwgdW5pb24gaTJjX3NtYnVzX2RhdGEgKmRhdGEpCiB7Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXB0ZXIpOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBpMmNfZ2V0X2FkYXBkYXRhKGFkYXB0ZXIpOworCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gdG9fY2FtKHY0bDJfZGV2KTsKIAlpbnQgcmV0ID0gLUVJTlZBTDsKIAogCS8qCi0JICogUmVmdXNlIHRvIHRhbGsgdG8gYW55dGhpbmcgYnV0IE9WIGNhbSBjaGlwcy4gIFdlIHNob3VsZAotCSAqIG5ldmVyIGV2ZW4gc2VlIGFuIGF0dGVtcHQgdG8gZG8gc28sIGJ1dCBvbmUgbmV2ZXIga25vd3MuCi0JICovCi0JaWYgKGNhbS0+c2Vuc29yICYmIGFkZHIgIT0gY2FtLT5zZW5zb3ItPmFkZHIpIHsKLQkJY2FtX2VycihjYW0sICJmdW5reSBzbWJ1cyBhZGRyICVkXG4iLCBhZGRyKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCS8qCiAJICogVGhpcyBpbnRlcmZhY2Ugd291bGQgYXBwZWFyIHRvIG9ubHkgZG8gYnl0ZSBkYXRhIG9wcy4gIE9LCiAJICogaXQgY2FuIGRvIHdvcmQgdG9vLCBidXQgdGhlIGNhbSBjaGlwIGhhcyBubyB1c2UgZm9yIHRoYXQuCiAJICovCkBAIC01MzAsMzggKzQ4MSw5IEBACiB9OwogCiAvKiBTb21lYm9keSBpcyBvbiB0aGUgYnVzICovCi1zdGF0aWMgaW50IGNhZmVfY2FtX2luaXQoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pOwogc3RhdGljIHZvaWQgY2FmZV9jdGxyX3N0b3BfZG1hKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKTsKIHN0YXRpYyB2b2lkIGNhZmVfY3Rscl9wb3dlcl9kb3duKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKTsKIAotc3RhdGljIGludCBjYWZlX3NtYnVzX2F0dGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOwotCi0JLyoKLQkgKiBEb24ndCB0YWxrIHRvIGNoaXBzIHdlIGRvbid0IHJlY29nbml6ZS4KLQkgKi8KLQlpZiAoY2xpZW50LT5kcml2ZXItPmlkID09IEkyQ19EUklWRVJJRF9PVjc2NzApIHsKLQkJY2FtLT5zZW5zb3IgPSBjbGllbnQ7Ci0JCXJldHVybiBjYWZlX2NhbV9pbml0KGNhbSk7Ci0JfQotCXJldHVybiAtRUlOVkFMOwotfQotCi1zdGF0aWMgaW50IGNhZmVfc21idXNfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7Ci0KLQlpZiAoY2FtLT5zZW5zb3IgPT0gY2xpZW50KSB7Ci0JCWNhZmVfY3Rscl9zdG9wX2RtYShjYW0pOwotCQljYWZlX2N0bHJfcG93ZXJfZG93bihjYW0pOwotCQljYW1fZXJyKGNhbSwgImxvc3QgdGhlIHNlbnNvciFcbiIpOwotCQljYW0tPnNlbnNvciA9IE5VTEw7ICAvKiBCdW1tZXIsIG5vIGNhbWVyYSAqLwotCQljYW0tPnN0YXRlID0gU19OT1RSRUFEWTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgY2FmZV9zbWJ1c19zZXR1cChzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSkKIHsKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAgPSAmY2FtLT5pMmNfYWRhcHRlcjsKQEAgLTU3MCwxMiArNDkyLDEwIEBACiAJY2FmZV9zbWJ1c19lbmFibGVfaXJxKGNhbSk7CiAJYWRhcC0+aWQgPSBJMkNfSFdfU01CVVNfQ0FGRTsKIAlhZGFwLT5vd25lciA9IFRISVNfTU9EVUxFOwotCWFkYXAtPmNsaWVudF9yZWdpc3RlciA9IGNhZmVfc21idXNfYXR0YWNoOwotCWFkYXAtPmNsaWVudF91bnJlZ2lzdGVyID0gY2FmZV9zbWJ1c19kZXRhY2g7CiAJYWRhcC0+YWxnbyA9ICZjYWZlX3NtYnVzX2FsZ287CiAJc3RyY3B5KGFkYXAtPm5hbWUsICJjYWZlX2NjaWMiKTsKIAlhZGFwLT5kZXYucGFyZW50ID0gJmNhbS0+cGRldi0+ZGV2OwotCWkyY19zZXRfYWRhcGRhdGEoYWRhcCwgY2FtKTsKKwlpMmNfc2V0X2FkYXBkYXRhKGFkYXAsICZjYW0tPnY0bDJfZGV2KTsKIAlyZXQgPSBpMmNfYWRkX2FkYXB0ZXIoYWRhcCk7CiAJaWYgKHJldCkKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgY2FmZSBpMmMgYWRhcHRlclxuIik7CkBAIC04MDksOSArNzI5LDkgQEAKIAkgKiBDb250cm9sIDEgaXMgcG93ZXIgZG93biwgc2V0IHRvIDAgdG8gb3BlcmF0ZS4KIAkgKi8KIAljYWZlX3JlZ193cml0ZShjYW0sIFJFR19HUFIsIEdQUl9DMUVOfEdQUl9DMEVOKTsgLyogcHdyIHVwLCByZXNldCAqLwotLy8JbWRlbGF5KDEpOyAvKiBNYXJ2ZWxsIHNheXMgMW1zIHdpbGwgZG8gaXQgKi8KKy8qCW1kZWxheSgxKTsgKi8gLyogTWFydmVsbCBzYXlzIDFtcyB3aWxsIGRvIGl0ICovCiAJY2FmZV9yZWdfd3JpdGUoY2FtLCBSRUdfR1BSLCBHUFJfQzFFTnxHUFJfQzBFTnxHUFJfQzApOwotLy8JbWRlbGF5KDEpOyAvKiBFbm91Z2g/ICovCisvKgltZGVsYXkoMSk7ICovIC8qIEVub3VnaD8gKi8KIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZjYW0tPmRldl9sb2NrLCBmbGFncyk7CiAJbXNsZWVwKDUpOyAvKiBKdXN0IHRvIGJlIHN1cmUgKi8KIH0KQEAgLTgzMywyMyArNzUzLDkgQEAKICAqIENvbW11bmljYXRpb25zIHdpdGggdGhlIHNlbnNvci4KICAqLwogCi1zdGF0aWMgaW50IF9fY2FmZV9jYW1fY21kKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtLCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKnNjID0gY2FtLT5zZW5zb3I7Ci0JaW50IHJldDsKLQotCWlmIChzYyA9PSBOVUxMIHx8IHNjLT5kcml2ZXIgPT0gTlVMTCB8fCBzYy0+ZHJpdmVyLT5jb21tYW5kID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCXJldCA9IHNjLT5kcml2ZXItPmNvbW1hbmQoc2MsIGNtZCwgYXJnKTsKLQlpZiAocmV0ID09IC1FUEVSTSkgLyogVW5zdXBwb3J0ZWQgY29tbWFuZCAqLwotCQlyZXR1cm4gMDsKLQlyZXR1cm4gcmV0OwotfQotCiBzdGF0aWMgaW50IF9fY2FmZV9jYW1fcmVzZXQoc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCiB7Ci0JaW50IHplcm8gPSAwOwotCXJldHVybiBfX2NhZmVfY2FtX2NtZChjYW0sIFZJRElPQ19JTlRfUkVTRVQsICZ6ZXJvKTsKKwlyZXR1cm4gc2Vuc29yX2NhbGwoY2FtLCBjb3JlLCByZXNldCwgMCk7CiB9CiAKIC8qCkBAIC04NjksMTQgKzc3NSwxMyBAQAogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCWNoaXAubWF0Y2gudHlwZSA9IFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUjsKLQljaGlwLm1hdGNoLmFkZHIgPSBjYW0tPnNlbnNvci0+YWRkcjsKLQlyZXQgPSBfX2NhZmVfY2FtX2NtZChjYW0sIFZJRElPQ19EQkdfR19DSElQX0lERU5ULCAmY2hpcCk7CisJY2hpcC5tYXRjaC5hZGRyID0gY2FtLT5zZW5zb3JfYWRkcjsKKwlyZXQgPSBzZW5zb3JfY2FsbChjYW0sIGNvcmUsIGdfY2hpcF9pZGVudCwgJmNoaXApOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0OwogCWNhbS0+c2Vuc29yX3R5cGUgPSBjaGlwLmlkZW50OwotLy8JaWYgKGNhbS0+c2Vuc29yLT5hZGRyICE9IE9WN3h4MF9TSUQpIHsKIAlpZiAoY2FtLT5zZW5zb3JfdHlwZSAhPSBWNEwyX0lERU5UX09WNzY3MCkgewotCQljYW1fZXJyKGNhbSwgIlVuc3VwcG9ydGVkIHNlbnNvciB0eXBlICVkIiwgY2FtLT5zZW5zb3ItPmFkZHIpOworCQljYW1fZXJyKGNhbSwgIlVuc3VwcG9ydGVkIHNlbnNvciB0eXBlIDB4JXgiLCBjYW0tPnNlbnNvcl90eXBlKTsKIAkJcmV0ID0gLUVJTlZBTDsKIAkJZ290byBvdXQ7CiAJfQpAQCAtOTAwLDIxICs4MDUsMjEgQEAKIAltZW1zZXQoJmN0cmwsIDAsIHNpemVvZihjdHJsKSk7CiAJY3RybC5pZCA9IFY0TDJfQ0lEX1ZGTElQOwogCWN0cmwudmFsdWUgPSBmbGlwOwotCXJldHVybiBfX2NhZmVfY2FtX2NtZChjYW0sIFZJRElPQ19TX0NUUkwsICZjdHJsKTsKKwlyZXR1cm4gc2Vuc29yX2NhbGwoY2FtLCBjb3JlLCBzX2N0cmwsICZjdHJsKTsKIH0KIAogCiBzdGF0aWMgaW50IGNhZmVfY2FtX2NvbmZpZ3VyZShzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSkKIHsKIAlzdHJ1Y3QgdjRsMl9mb3JtYXQgZm10OwotCWludCByZXQsIHplcm8gPSAwOworCWludCByZXQ7CiAKIAlpZiAoY2FtLT5zdGF0ZSAhPSBTX0lETEUpCiAJCXJldHVybiAtRUlOVkFMOwogCWZtdC5mbXQucGl4ID0gY2FtLT5waXhfZm9ybWF0OwotCXJldCA9IF9fY2FmZV9jYW1fY21kKGNhbSwgVklESU9DX0lOVF9JTklULCAmemVybyk7CisJcmV0ID0gc2Vuc29yX2NhbGwoY2FtLCBjb3JlLCBpbml0LCAwKTsKIAlpZiAocmV0ID09IDApCi0JCXJldCA9IF9fY2FmZV9jYW1fY21kKGNhbSwgVklESU9DX1NfRk1ULCAmZm10KTsKKwkJcmV0ID0gc2Vuc29yX2NhbGwoY2FtLCB2aWRlbywgc19mbXQsICZmbXQpOwogCS8qCiAJICogT1Y3NjcwIGRvZXMgd2VpcmQgdGhpbmdzIGlmIGZsaXAgaXMgc2V0ICpiZWZvcmUqIGZvcm1hdC4uLgogCSAqLwpAQCAtMTI0Niw4ICsxMTUxLDYgQEAKIAkgKiBNYWtlIHN1cmUgaXQncyBzb21ldGhpbmcgd2UgY2FuIGRvLiAgVXNlciBwb2ludGVycyBjb3VsZCBiZQogCSAqIGltcGxlbWVudGVkIHdpdGhvdXQgZ3JlYXQgcGFpbiwgYnV0IHRoYXQncyBub3QgYmVlbiBkb25lIHlldC4KIAkgKi8KLQlpZiAocmVxLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHJlcS0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApCiAJCXJldHVybiAtRUlOVkFMOwogCS8qCkBAIC0xMzExLDkgKzEyMTQsNyBAQAogCWludCByZXQgPSAtRUlOVkFMOwogCiAJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKLQlpZiAoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJZ290byBvdXQ7Ci0JaWYgKGJ1Zi0+aW5kZXggPCAwIHx8IGJ1Zi0+aW5kZXggPj0gY2FtLT5uX3NidWZzKQorCWlmIChidWYtPmluZGV4ID49IGNhbS0+bl9zYnVmcykKIAkJZ290byBvdXQ7CiAJKmJ1ZiA9IGNhbS0+c2JfYnVmc1tidWYtPmluZGV4XS52NGxidWY7CiAJcmV0ID0gMDsKQEAgLTEzMzEsOSArMTIzMiw3IEBACiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7Ci0JaWYgKGJ1Zi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCWdvdG8gb3V0OwotCWlmIChidWYtPmluZGV4IDwgMCB8fCBidWYtPmluZGV4ID49IGNhbS0+bl9zYnVmcykKKwlpZiAoYnVmLT5pbmRleCA+PSBjYW0tPm5fc2J1ZnMpCiAJCWdvdG8gb3V0OwogCXNidWYgPSBjYW0tPnNiX2J1ZnMgKyBidWYtPmluZGV4OwogCWlmIChzYnVmLT52NGxidWYuZmxhZ3MgJiBWNEwyX0JVRl9GTEFHX1FVRVVFRCkgewpAQCAtMTM2NCw4ICsxMjYzLDYgQEAKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKLQlpZiAoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJZ290byBvdXRfdW5sb2NrOwogCWlmIChjYW0tPnN0YXRlICE9IFNfU1RSRUFNSU5HKQogCQlnb3RvIG91dF91bmxvY2s7CiAJaWYgKGxpc3RfZW1wdHkoJmNhbS0+c2JfZnVsbCkgJiYgZmlscC0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spIHsKQEAgLTE0NzQsMTEgKzEzNzEsOCBAQAogCiBzdGF0aWMgaW50IGNhZmVfdjRsX29wZW4oc3RydWN0IGZpbGUgKmZpbHApCiB7Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW07CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSB2aWRlb19kcnZkYXRhKGZpbHApOwogCi0JY2FtID0gY2FmZV9maW5kX2Rldih2aWRlb19kZXZkYXRhKGZpbHApLT5taW5vcik7Ci0JaWYgKGNhbSA9PSBOVUxMKQotCQlyZXR1cm4gLUVOT0RFVjsKIAlmaWxwLT5wcml2YXRlX2RhdGEgPSBjYW07CiAKIAltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwpAQCAtMTUzMiwxMSArMTQyNiwxMSBAQAogc3RhdGljIGludCBjYWZlX3ZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCiAJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCiB7Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBmaWxwLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBwcml2OwogCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCXJldCA9IF9fY2FmZV9jYW1fY21kKGNhbSwgVklESU9DX1FVRVJZQ1RSTCwgcWMpOworCXJldCA9IHNlbnNvcl9jYWxsKGNhbSwgY29yZSwgcXVlcnljdHJsLCBxYyk7CiAJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CkBAIC0xNTQ1LDExICsxNDM5LDExIEBACiBzdGF0aWMgaW50IGNhZmVfdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwKIAkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHByaXY7CiAJaW50IHJldDsKIAogCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7Ci0JcmV0ID0gX19jYWZlX2NhbV9jbWQoY2FtLCBWSURJT0NfR19DVFJMLCBjdHJsKTsKKwlyZXQgPSBzZW5zb3JfY2FsbChjYW0sIGNvcmUsIGdfY3RybCwgY3RybCk7CiAJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CkBAIC0xNTU4LDExICsxNDUyLDExIEBACiBzdGF0aWMgaW50IGNhZmVfdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlscCwgdm9pZCAqcHJpdiwKIAkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHByaXY7CiAJaW50IHJldDsKIAogCW11dGV4X2xvY2soJmNhbS0+c19tdXRleCk7Ci0JcmV0ID0gX19jYWZlX2NhbV9jbWQoY2FtLCBWSURJT0NfU19DVFJMLCBjdHJsKTsKKwlyZXQgPSBzZW5zb3JfY2FsbChjYW0sIGNvcmUsIHNfY3RybCwgY3RybCk7CiAJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CkBAIC0xNjAxLDEwICsxNDk1LDggQEAKIAlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHByaXY7CiAJaW50IHJldDsKIAotCWlmIChmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKIAltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCXJldCA9IF9fY2FmZV9jYW1fY21kKGNhbSwgVklESU9DX0VOVU1fRk1ULCBmbXQpOworCXJldCA9IHNlbnNvcl9jYWxsKGNhbSwgdmlkZW8sIGVudW1fZm10LCBmbXQpOwogCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTYxNyw3ICsxNTA5LDcgQEAKIAlpbnQgcmV0OwogCiAJbXV0ZXhfbG9jaygmY2FtLT5zX211dGV4KTsKLQlyZXQgPSBfX2NhZmVfY2FtX2NtZChjYW0sIFZJRElPQ19UUllfRk1ULCBmbXQpOworCXJldCA9IHNlbnNvcl9jYWxsKGNhbSwgdmlkZW8sIHRyeV9mbXQsIGZtdCk7CiAJbXV0ZXhfdW5sb2NrKCZjYW0tPnNfbXV0ZXgpOwogCXJldHVybiByZXQ7CiB9CkBAIC0xNzI2LDcgKzE2MTgsNyBAQAogCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCXJldCA9IF9fY2FmZV9jYW1fY21kKGNhbSwgVklESU9DX0dfUEFSTSwgcGFybXMpOworCXJldCA9IHNlbnNvcl9jYWxsKGNhbSwgdmlkZW8sIGdfcGFybSwgcGFybXMpOwogCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKIAlwYXJtcy0+cGFybS5jYXB0dXJlLnJlYWRidWZmZXJzID0gbl9kbWFfYnVmczsKIAlyZXR1cm4gcmV0OwpAQCAtMTczOSwyMCArMTYzMSw1MiBAQAogCWludCByZXQ7CiAKIAltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCXJldCA9IF9fY2FmZV9jYW1fY21kKGNhbSwgVklESU9DX1NfUEFSTSwgcGFybXMpOworCXJldCA9IHNlbnNvcl9jYWxsKGNhbSwgdmlkZW8sIHNfcGFybSwgcGFybXMpOwogCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKIAlwYXJtcy0+cGFybS5jYXB0dXJlLnJlYWRidWZmZXJzID0gbl9kbWFfYnVmczsKIAlyZXR1cm4gcmV0OwogfQogCi0KLXN0YXRpYyB2b2lkIGNhZmVfdjRsX2Rldl9yZWxlYXNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkKQorc3RhdGljIGludCBjYWZlX3ZpZGlvY19nX2NoaXBfaWRlbnQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCXN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQogewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gY29udGFpbmVyX29mKHZkLCBzdHJ1Y3QgY2FmZV9jYW1lcmEsIHY0bGRldik7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBwcml2OwogCi0Ja2ZyZWUoY2FtKTsKKwljaGlwLT5pZGVudCA9IFY0TDJfSURFTlRfTk9ORTsKKwljaGlwLT5yZXZpc2lvbiA9IDA7CisJaWYgKHY0bDJfY2hpcF9tYXRjaF9ob3N0KCZjaGlwLT5tYXRjaCkpIHsKKwkJY2hpcC0+aWRlbnQgPSBWNEwyX0lERU5UX0NBRkU7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gc2Vuc29yX2NhbGwoY2FtLCBjb3JlLCBnX2NoaXBfaWRlbnQsIGNoaXApOwogfQogCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworc3RhdGljIGludCBjYWZlX3ZpZGlvY19nX3JlZ2lzdGVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQlzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgKnJlZykKK3sKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHByaXY7CisKKwlpZiAodjRsMl9jaGlwX21hdGNoX2hvc3QoJnJlZy0+bWF0Y2gpKSB7CisJCXJlZy0+dmFsID0gY2FmZV9yZWdfcmVhZChjYW0sIHJlZy0+cmVnKTsKKwkJcmVnLT5zaXplID0gNDsKKwkJcmV0dXJuIDA7CisJfQorCXJldHVybiBzZW5zb3JfY2FsbChjYW0sIGNvcmUsIGdfcmVnaXN0ZXIsIHJlZyk7Cit9CisKK3N0YXRpYyBpbnQgY2FmZV92aWRpb2Nfc19yZWdpc3RlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBwcml2OworCisJaWYgKHY0bDJfY2hpcF9tYXRjaF9ob3N0KCZyZWctPm1hdGNoKSkgeworCQljYWZlX3JlZ193cml0ZShjYW0sIHJlZy0+cmVnLCByZWctPnZhbCk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gc2Vuc29yX2NhbGwoY2FtLCBjb3JlLCBzX3JlZ2lzdGVyLCByZWcpOworfQorI2VuZGlmCiAKIC8qCiAgKiBUaGlzIHRlbXBsYXRlIGRldmljZSBob2xkcyBhbGwgb2YgdGhvc2UgdjRsMiBtZXRob2RzOyB3ZQpAQCAtMTc5MCw2ICsxNzE0LDExIEBACiAJLnZpZGlvY19zX2N0cmwJCT0gY2FmZV92aWRpb2Nfc19jdHJsLAogCS52aWRpb2NfZ19wYXJtCQk9IGNhZmVfdmlkaW9jX2dfcGFybSwKIAkudmlkaW9jX3NfcGFybQkJPSBjYWZlX3ZpZGlvY19zX3Bhcm0sCisJLnZpZGlvY19nX2NoaXBfaWRlbnQgICAgPSBjYWZlX3ZpZGlvY19nX2NoaXBfaWRlbnQsCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCS52aWRpb2NfZ19yZWdpc3RlciAJPSBjYWZlX3ZpZGlvY19nX3JlZ2lzdGVyLAorCS52aWRpb2Nfc19yZWdpc3RlciAJPSBjYWZlX3ZpZGlvY19zX3JlZ2lzdGVyLAorI2VuZGlmCiB9OwogCiBzdGF0aWMgc3RydWN0IHZpZGVvX2RldmljZSBjYWZlX3Y0bF90ZW1wbGF0ZSA9IHsKQEAgLTE4MDAsMTUgKzE3MjksMTAgQEAKIAogCS5mb3BzID0gJmNhZmVfdjRsX2ZvcHMsCiAJLmlvY3RsX29wcyA9ICZjYWZlX3Y0bF9pb2N0bF9vcHMsCi0JLnJlbGVhc2UgPSBjYWZlX3Y0bF9kZXZfcmVsZWFzZSwKKwkucmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlX2VtcHR5LAogfTsKIAogCi0KLQotCi0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyoKICAqIEludGVycnVwdCBoYW5kbGVyIHN0dWZmCkBAIC0xOTYyLDEyNyArMTg4Niw2IEBACiAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi0vKgotICogRGVidWdmcyBzdHVmZi4KLSAqLwotCi1zdGF0aWMgY2hhciBjYWZlX2RlYnVnX2J1ZlsxMDI0XTsKLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpjYWZlX2Rmc19yb290OwotCi1zdGF0aWMgdm9pZCBjYWZlX2Rmc19zZXR1cCh2b2lkKQotewotCWNhZmVfZGZzX3Jvb3QgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImNhZmVfY2NpYyIsIE5VTEwpOwotCWlmIChJU19FUlIoY2FmZV9kZnNfcm9vdCkpIHsKLQkJY2FmZV9kZnNfcm9vdCA9IE5VTEw7ICAvKiBOZXZlciBtaW5kICovCi0JCXByaW50ayhLRVJOX05PVElDRSAiY2FmZV9jY2ljIHVuYWJsZSB0byBzZXQgdXAgZGVidWdmc1xuIik7Ci0JfQotfQotCi1zdGF0aWMgdm9pZCBjYWZlX2Rmc19zaHV0ZG93bih2b2lkKQotewotCWlmIChjYWZlX2Rmc19yb290KQotCQlkZWJ1Z2ZzX3JlbW92ZShjYWZlX2Rmc19yb290KTsKLX0KLQotc3RhdGljIGludCBjYWZlX2Rmc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQotewotCWZpbGUtPnByaXZhdGVfZGF0YSA9IGlub2RlLT5pX3ByaXZhdGU7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBzc2l6ZV90IGNhZmVfZGZzX3JlYWRfcmVncyhzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JY2hhciAqcyA9IGNhZmVfZGVidWdfYnVmOwotCWludCBvZmZzZXQ7Ci0KLQlmb3IgKG9mZnNldCA9IDA7IG9mZnNldCA8IDB4NDQ7IG9mZnNldCArPSA0KQotCQlzICs9IHNwcmludGYocywgIiUwMng6ICUwOHhcbiIsIG9mZnNldCwKLQkJCQljYWZlX3JlZ19yZWFkKGNhbSwgb2Zmc2V0KSk7Ci0JZm9yIChvZmZzZXQgPSAweDg4OyBvZmZzZXQgPD0gMHg5MDsgb2Zmc2V0ICs9IDQpCi0JCXMgKz0gc3ByaW50ZihzLCAiJTAyeDogJTA4eFxuIiwgb2Zmc2V0LAotCQkJCWNhZmVfcmVnX3JlYWQoY2FtLCBvZmZzZXQpKTsKLQlmb3IgKG9mZnNldCA9IDB4YjQ7IG9mZnNldCA8PSAweGJjOyBvZmZzZXQgKz0gNCkKLQkJcyArPSBzcHJpbnRmKHMsICIlMDJ4OiAlMDh4XG4iLCBvZmZzZXQsCi0JCQkJY2FmZV9yZWdfcmVhZChjYW0sIG9mZnNldCkpOwotCWZvciAob2Zmc2V0ID0gMHgzMDAwOyBvZmZzZXQgPD0gMHgzMDBjOyBvZmZzZXQgKz0gNCkKLQkJcyArPSBzcHJpbnRmKHMsICIlMDR4OiAlMDh4XG4iLCBvZmZzZXQsCi0JCQkJY2FmZV9yZWdfcmVhZChjYW0sIG9mZnNldCkpOwotCXJldHVybiBzaW1wbGVfcmVhZF9mcm9tX2J1ZmZlcihidWYsIGNvdW50LCBwcG9zLCBjYWZlX2RlYnVnX2J1ZiwKLQkJCXMgLSBjYWZlX2RlYnVnX2J1Zik7Ci19Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNhZmVfZGZzX3JlZ19vcHMgPSB7Ci0JLm93bmVyID0gVEhJU19NT0RVTEUsCi0JLnJlYWQgPSBjYWZlX2Rmc19yZWFkX3JlZ3MsCi0JLm9wZW4gPSBjYWZlX2Rmc19vcGVuCi19OwotCi1zdGF0aWMgc3NpemVfdCBjYWZlX2Rmc19yZWFkX2NhbShzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCi17Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBmaWxlLT5wcml2YXRlX2RhdGE7Ci0JY2hhciAqcyA9IGNhZmVfZGVidWdfYnVmOwotCWludCBvZmZzZXQ7Ci0KLQlpZiAoISBjYW0tPnNlbnNvcikKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JZm9yIChvZmZzZXQgPSAweDA7IG9mZnNldCA8IDB4OGE7IG9mZnNldCsrKQotCXsKLQkJdTggdjsKLQotCQljYWZlX3NtYnVzX3JlYWRfZGF0YShjYW0sIGNhbS0+c2Vuc29yLT5hZGRyLCBvZmZzZXQsICZ2KTsKLQkJcyArPSBzcHJpbnRmKHMsICIlMDJ4OiAlMDJ4XG4iLCBvZmZzZXQsIHYpOwotCX0KLQlyZXR1cm4gc2ltcGxlX3JlYWRfZnJvbV9idWZmZXIoYnVmLCBjb3VudCwgcHBvcywgY2FmZV9kZWJ1Z19idWYsCi0JCQlzIC0gY2FmZV9kZWJ1Z19idWYpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBjYWZlX2Rmc19jYW1fb3BzID0gewotCS5vd25lciA9IFRISVNfTU9EVUxFLAotCS5yZWFkID0gY2FmZV9kZnNfcmVhZF9jYW0sCi0JLm9wZW4gPSBjYWZlX2Rmc19vcGVuCi19OwotCi0KLQotc3RhdGljIHZvaWQgY2FmZV9kZnNfY2FtX3NldHVwKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQotewotCWNoYXIgZm5hbWVbNDBdOwotCi0JaWYgKCFjYWZlX2Rmc19yb290KQotCQlyZXR1cm47Ci0Jc3ByaW50ZihmbmFtZSwgInJlZ3MtJWQiLCBjYW0tPnY0bGRldi5udW0pOwotCWNhbS0+ZGZzX3JlZ3MgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGZuYW1lLCAwNDQ0LCBjYWZlX2Rmc19yb290LAotCQkJY2FtLCAmY2FmZV9kZnNfcmVnX29wcyk7Ci0Jc3ByaW50ZihmbmFtZSwgImNhbS0lZCIsIGNhbS0+djRsZGV2Lm51bSk7Ci0JY2FtLT5kZnNfY2FtX3JlZ3MgPSBkZWJ1Z2ZzX2NyZWF0ZV9maWxlKGZuYW1lLCAwNDQ0LCBjYWZlX2Rmc19yb290LAotCQkJY2FtLCAmY2FmZV9kZnNfY2FtX29wcyk7Ci19Ci0KLQotc3RhdGljIHZvaWQgY2FmZV9kZnNfY2FtX3NodXRkb3duKHN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtKQotewotCWlmICghIElTX0VSUihjYW0tPmRmc19yZWdzKSkKLQkJZGVidWdmc19yZW1vdmUoY2FtLT5kZnNfcmVncyk7Ci0JaWYgKCEgSVNfRVJSKGNhbS0+ZGZzX2NhbV9yZWdzKSkKLQkJZGVidWdmc19yZW1vdmUoY2FtLT5kZnNfY2FtX3JlZ3MpOwotfQotCi0jZWxzZQotCi0jZGVmaW5lIGNhZmVfZGZzX3NldHVwKCkKLSNkZWZpbmUgY2FmZV9kZnNfc2h1dGRvd24oKQotI2RlZmluZSBjYWZlX2Rmc19jYW1fc2V0dXAoY2FtKQotI2RlZmluZSBjYWZlX2Rmc19jYW1fc2h1dGRvd24oY2FtKQotI2VuZGlmICAgIC8qIENPTkZJR19WSURFT19BRFZfREVCVUcgKi8KLQotCi0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qCiAgKiBQQ0kgaW50ZXJmYWNlIHN0dWZmLgogICovCkBAIC0yMTAwLDYgKzE5MDMsMTAgQEAKIAljYW0gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY2FmZV9jYW1lcmEpLCBHRlBfS0VSTkVMKTsKIAlpZiAoY2FtID09IE5VTEwpCiAJCWdvdG8gb3V0OworCXJldCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZjYW0tPnY0bDJfZGV2KTsKKwlpZiAocmV0KQorCQlnb3RvIG91dF9mcmVlOworCiAJbXV0ZXhfaW5pdCgmY2FtLT5zX211dGV4KTsKIAltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwogCXNwaW5fbG9ja19pbml0KCZjYW0tPmRldl9sb2NrKTsKQEAgLTIxMTgsMTQgKzE5MjUsMTQgQEAKIAkgKi8KIAlyZXQgPSBwY2lfZW5hYmxlX2RldmljZShwZGV2KTsKIAlpZiAocmV0KQotCQlnb3RvIG91dF9mcmVlOworCQlnb3RvIG91dF91bnJlZzsKIAlwY2lfc2V0X21hc3RlcihwZGV2KTsKIAogCXJldCA9IC1FSU87CiAJY2FtLT5yZWdzID0gcGNpX2lvbWFwKHBkZXYsIDAsIDApOwogCWlmICghIGNhbS0+cmVncykgewogCQlwcmludGsoS0VSTl9FUlIgIlVuYWJsZSB0byBpb3JlbWFwIGNhZmUtY2NpYyByZWdzXG4iKTsKLQkJZ290byBvdXRfZnJlZTsKKwkJZ290byBvdXRfdW5yZWc7CiAJfQogCXJldCA9IHJlcXVlc3RfaXJxKHBkZXYtPmlycSwgY2FmZV9pcnEsIElSUUZfU0hBUkVELCAiY2FmZS1jY2ljIiwgY2FtKTsKIAlpZiAocmV0KQpAQCAtMjE0NSwxNyArMTk1MiwzMSBAQAogCXJldCA9IGNhZmVfc21idXNfc2V0dXAoY2FtKTsKIAlpZiAocmV0KQogCQlnb3RvIG91dF9mcmVlaXJxOworCisJY2FtLT5zZW5zb3JfYWRkciA9IDB4NDI7CisJY2FtLT5zZW5zb3IgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZjYW0tPmkyY19hZGFwdGVyLAorCQkJIm92NzY3MCIsICJvdjc2NzAiLCBjYW0tPnNlbnNvcl9hZGRyKTsKKwlpZiAoY2FtLT5zZW5zb3IgPT0gTlVMTCkgeworCQlyZXQgPSAtRU5PREVWOworCQlnb3RvIG91dF9zbWJ1czsKKwl9CisJcmV0ID0gY2FmZV9jYW1faW5pdChjYW0pOworCWlmIChyZXQpCisJCWdvdG8gb3V0X3NtYnVzOworCiAJLyoKIAkgKiBHZXQgdGhlIHY0bDIgc2V0dXAgZG9uZS4KIAkgKi8KIAltdXRleF9sb2NrKCZjYW0tPnNfbXV0ZXgpOwotCWNhbS0+djRsZGV2ID0gY2FmZV92NGxfdGVtcGxhdGU7Ci0JY2FtLT52NGxkZXYuZGVidWcgPSAwOwotLy8JY2FtLT52NGxkZXYuZGVidWcgPSBWNEwyX0RFQlVHX0lPQ1RMX0FSRzsKLQljYW0tPnY0bGRldi5wYXJlbnQgPSAmcGRldi0+ZGV2OwotCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSgmY2FtLT52NGxkZXYsIFZGTF9UWVBFX0dSQUJCRVIsIC0xKTsKKwljYW0tPnZkZXYgPSBjYWZlX3Y0bF90ZW1wbGF0ZTsKKwljYW0tPnZkZXYuZGVidWcgPSAwOworLyoJY2FtLT52ZGV2LmRlYnVnID0gVjRMMl9ERUJVR19JT0NUTF9BUkc7Ki8KKwljYW0tPnZkZXYudjRsMl9kZXYgPSAmY2FtLT52NGwyX2RldjsKKwlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmNhbS0+dmRldiwgVkZMX1RZUEVfR1JBQkJFUiwgLTEpOwogCWlmIChyZXQpCiAJCWdvdG8gb3V0X3NtYnVzOworCXZpZGVvX3NldF9kcnZkYXRhKCZjYW0tPnZkZXYsIGNhbSk7CisKIAkvKgogCSAqIElmIHNvIHJlcXVlc3RlZCwgdHJ5IHRvIGdldCBvdXIgRE1BIGJ1ZmZlcnMgbm93LgogCSAqLwpAQCAtMjE2NSwyMSArMTk4NiwyMSBAQAogCQkJCQkiIHdpbGwgdHJ5IGFnYWluIGxhdGVyLiIpOwogCX0KIAotCWNhZmVfZGZzX2NhbV9zZXR1cChjYW0pOwogCW11dGV4X3VubG9jaygmY2FtLT5zX211dGV4KTsKLQljYWZlX2FkZF9kZXYoY2FtKTsKIAlyZXR1cm4gMDsKIAotICBvdXRfc21idXM6CitvdXRfc21idXM6CiAJY2FmZV9zbWJ1c19zaHV0ZG93bihjYW0pOwotICBvdXRfZnJlZWlycToKK291dF9mcmVlaXJxOgogCWNhZmVfY3Rscl9wb3dlcl9kb3duKGNhbSk7CiAJZnJlZV9pcnEocGRldi0+aXJxLCBjYW0pOwotICBvdXRfaW91bm1hcDoKK291dF9pb3VubWFwOgogCXBjaV9pb3VubWFwKHBkZXYsIGNhbS0+cmVncyk7Ci0gIG91dF9mcmVlOgorb3V0X2ZyZWU6CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmY2FtLT52NGwyX2Rldik7CitvdXRfdW5yZWc6CiAJa2ZyZWUoY2FtKTsKLSAgb3V0Ogorb3V0OgogCXJldHVybiByZXQ7CiB9CiAKQEAgLTIxOTAsMjUgKzIwMTEsMjMgQEAKIHN0YXRpYyB2b2lkIGNhZmVfc2h1dGRvd24oc3RydWN0IGNhZmVfY2FtZXJhICpjYW0pCiB7CiAvKiBGSVhNRTogTWFrZSBzdXJlIHdlIHRha2UgY2FyZSBvZiBldmVyeXRoaW5nIGhlcmUgKi8KLQljYWZlX2Rmc19jYW1fc2h1dGRvd24oY2FtKTsKIAlpZiAoY2FtLT5uX3NidWZzID4gMCkKIAkJLyogV2hhdCBpZiB0aGV5IGFyZSBzdGlsbCBtYXBwZWQ/ICBTaG91bGRuJ3QgYmUsIGJ1dC4uLiAqLwogCQljYWZlX2ZyZWVfc2lvX2J1ZmZlcnMoY2FtKTsKLQljYWZlX3JlbW92ZV9kZXYoY2FtKTsKIAljYWZlX2N0bHJfc3RvcF9kbWEoY2FtKTsKIAljYWZlX2N0bHJfcG93ZXJfZG93bihjYW0pOwogCWNhZmVfc21idXNfc2h1dGRvd24oY2FtKTsKIAljYWZlX2ZyZWVfZG1hX2J1ZnMoY2FtKTsKIAlmcmVlX2lycShjYW0tPnBkZXYtPmlycSwgY2FtKTsKIAlwY2lfaW91bm1hcChjYW0tPnBkZXYsIGNhbS0+cmVncyk7Ci0JdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmNhbS0+djRsZGV2KTsKLQkvKiBrZnJlZShjYW0pOyBkb25lIGluIHY0bF9yZWxlYXNlICgpICovCisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoJmNhbS0+dmRldik7CiB9CiAKIAogc3RhdGljIHZvaWQgY2FmZV9wY2lfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gY2FmZV9maW5kX2J5X3BkZXYocGRldik7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHRvX2NhbSh2NGwyX2Rldik7CiAKIAlpZiAoY2FtID09IE5VTEwpIHsKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAicGNpX3JlbW92ZSBvbiB1bmtub3duIHBkZXYgJXBcbiIsIHBkZXYpOwpAQCAtMjIxOCw2ICsyMDM3LDggQEAKIAlpZiAoY2FtLT51c2VycyA+IDApCiAJCWNhbV93YXJuKGNhbSwgIlJlbW92aW5nIGEgZGV2aWNlIHdpdGggdXNlcnMhXG4iKTsKIAljYWZlX3NodXRkb3duKGNhbSk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmY2FtLT52NGwyX2Rldik7CisJa2ZyZWUoY2FtKTsKIC8qIE5vIHVubG9jayAtIGl0IG5vIGxvbmdlciBleGlzdHMgKi8KIH0KIApAQCAtMjIyOCw3ICsyMDQ5LDggQEAKICAqLwogc3RhdGljIGludCBjYWZlX3BjaV9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpCiB7Ci0Jc3RydWN0IGNhZmVfY2FtZXJhICpjYW0gPSBjYWZlX2ZpbmRfYnlfcGRldihwZGV2KTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZwZGV2LT5kZXYpOworCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gdG9fY2FtKHY0bDJfZGV2KTsKIAlpbnQgcmV0OwogCWVudW0gY2FmZV9zdGF0ZSBjc3RhdGU7CiAKQEAgLTIyNDYsNyArMjA2OCw4IEBACiAKIHN0YXRpYyBpbnQgY2FmZV9wY2lfcmVzdW1lKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCBjYWZlX2NhbWVyYSAqY2FtID0gY2FmZV9maW5kX2J5X3BkZXYocGRldik7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlzdHJ1Y3QgY2FmZV9jYW1lcmEgKmNhbSA9IHRvX2NhbSh2NGwyX2Rldik7CiAJaW50IHJldCA9IDA7CiAKIAlyZXQgPSBwY2lfcmVzdG9yZV9zdGF0ZShwZGV2KTsKQEAgLTIzMDcsMTMgKzIxMzAsMTEgQEAKIAogCXByaW50ayhLRVJOX05PVElDRSAiTWFydmVsbCBNODhBTFAwMSAnQ0FGRScgQ2FtZXJhIENvbnRyb2xsZXIgdmVyc2lvbiAlZFxuIiwKIAkJCUNBRkVfVkVSU0lPTik7Ci0JY2FmZV9kZnNfc2V0dXAoKTsKIAlyZXQgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyKCZjYWZlX3BjaV9kcml2ZXIpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJVbmFibGUgdG8gcmVnaXN0ZXIgY2FmZV9jY2ljIGRyaXZlclxuIik7CiAJCWdvdG8gb3V0OwogCX0KLQlyZXF1ZXN0X21vZHVsZSgib3Y3NjcwIik7ICAvKiBGSVhNRSB3YW50IHNvbWV0aGluZyBtb3JlIGdlbmVyYWwgKi8KIAlyZXQgPSAwOwogCiAgIG91dDoKQEAgLTIzMjQsNyArMjE0NSw2IEBACiBzdGF0aWMgdm9pZCBfX2V4aXQgY2FmZV9leGl0KHZvaWQpCiB7CiAJcGNpX3VucmVnaXN0ZXJfZHJpdmVyKCZjYWZlX3BjaV9kcml2ZXIpOwotCWNhZmVfZGZzX3NodXRkb3duKCk7CiB9CiAKIG1vZHVsZV9pbml0KGNhZmVfaW5pdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5jCmluZGV4IGMzYjBjOGMuLjQzYWIwYWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYS5jCkBAIC0xMzgxLDkgKzEzODEsNyBAQAogewogCWNwaWFfcHJvY19yb290ID0gcHJvY19ta2RpcigiY3BpYSIsIE5VTEwpOwogCi0JaWYgKGNwaWFfcHJvY19yb290KQotCQljcGlhX3Byb2Nfcm9vdC0+b3duZXIgPSBUSElTX01PRFVMRTsKLQllbHNlCisJaWYgKCFjcGlhX3Byb2Nfcm9vdCkKIAkJTE9HKCJVbmFibGUgdG8gaW5pdGlhbGlzZSAvcHJvYy9jcGlhXG4iKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl92NGwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3BpYTIvY3BpYTJfdjRsLmMKaW5kZXggOWMyNTg5NC4uZDQwOTlmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jcGlhMi9jcGlhMl92NGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NwaWEyL2NwaWEyX3Y0bC5jCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgogCiAjaW5jbHVkZSAiY3BpYTIuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3M1MzQ1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NzNTM0NS5jCmluZGV4IDg3ZTkxMDcuLjk3MTQwNTkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3M1MzQ1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jczUzNDUuYwpAQCAtMTQxLDExICsxNDEsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNzNTM0NV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQotewotCXJldHVybiB2NGwyX3N1YmRldl9jb21tYW5kKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBjbWQsIGFyZyk7Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgY3M1MzQ1X2NvcmVfb3BzID0gewpAQCAtMjE0LDggKzIwOSw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJjczUzNDUiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9DUzUzNDUsCi0JLmNvbW1hbmQgPSBjczUzNDVfY29tbWFuZCwKIAkucHJvYmUgPSBjczUzNDVfcHJvYmUsCiAJLnJlbW92ZSA9IGNzNTM0NV9yZW1vdmUsCiAJLmlkX3RhYmxlID0gY3M1MzQ1X2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jczUzbDMyYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jczUzbDMyYS5jCmluZGV4IDcyOTJhNjMuLjVhZWIwNjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3M1M2wzMmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2NzNTNsMzJhLmMKQEAgLTI5LDcgKzI5LDcgQEAKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJpMmMgZGV2aWNlIGRyaXZlciBmb3IgY3M1M2wzMmEgQXVkaW8gQURDIik7CiBNT0RVTEVfQVVUSE9SKCJNYXJ0aW4gVmF1Z2hhbiIpOwpAQCAtNDEsOSArNDEsNiBAQAogCiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWdnaW5nIG1lc3NhZ2VzLCAwPU9mZiAoZGVmYXVsdCksIDE9T24iKTsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyMiA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OwotCi1JMkNfQ0xJRU5UX0lOU01PRDsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtMTIyLDExICsxMTksNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGNzNTNsMzJhX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCi17Ci0JcmV0dXJuIHY0bDJfc3ViZGV2X2NvbW1hbmQoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIGNtZCwgYXJnKTsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBjczUzbDMyYV9jb3JlX29wcyA9IHsKQEAgLTIxOCw4ICsyMTAsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAiY3M1M2wzMmEiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9DUzUzTDMyQSwKLQkuY29tbWFuZCA9IGNzNTNsMzJhX2NvbW1hbmQsCiAJLnJlbW92ZSA9IGNzNTNsMzJhX3JlbW92ZSwKIAkucHJvYmUgPSBjczUzbDMyYV9wcm9iZSwKIAkuaWRfdGFibGUgPSBjczUzbDMyYV9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L0tjb25maWcKaW5kZXggODk0MGI1My4uZThhNTBhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L0tjb25maWcKQEAgLTksNyArOSw3IEBACiAJc2VsZWN0IFZJREVPX0NYMjM0MVgKIAlzZWxlY3QgVklERU9fQ1M1MzQ1CiAJc2VsZWN0IERWQl9TNUgxNDA5IGlmICFEVkJfRkVfQ1VTVE9NSVNFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX01YTDUwMDVTIGlmICFNRURJQV9UVU5FUl9DVVNUT01JWkUKKwlzZWxlY3QgTUVESUFfVFVORVJfTVhMNTAwNVMgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIENvbmV4YW50IGN4MjM0MTggYmFzZWQKIAkgIFBDSSBjb21ibyB2aWRlbyByZWNvcmRlciBkZXZpY2VzLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF1ZGlvLmMKaW5kZXggNTdiZWRkZi4uYmI1YzUxNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXVkaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdWRpby5jCkBAIC0yMyw3ICsyMyw2IEBACiAKICNpbmNsdWRlICJjeDE4LWRyaXZlci5oIgogI2luY2x1ZGUgImN4MTgtaW8uaCIKLSNpbmNsdWRlICJjeDE4LWkyYy5oIgogI2luY2x1ZGUgImN4MTgtY2FyZHMuaCIKICNpbmNsdWRlICJjeDE4LWF1ZGlvLmgiCiAKQEAgLTMzLDU1ICszMiwzMiBAQAogICAgc2V0dGluZ3MuICovCiBpbnQgY3gxOF9hdWRpb19zZXRfaW8oc3RydWN0IGN4MTggKmN4KQogeworCWNvbnN0IHN0cnVjdCBjeDE4X2NhcmRfYXVkaW9faW5wdXQgKmluOwogCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7Ci0JdTMyIGF1ZGlvX2lucHV0OwogCXUzMiB2YWw7Ci0JaW50IG11eF9pbnB1dDsKIAlpbnQgZXJyOwogCiAJLyogRGV0ZXJtaW5lIHdoaWNoIGlucHV0IHRvIHVzZSAqLwotCWlmICh0ZXN0X2JpdChDWDE4X0ZfSV9SQURJT19VU0VSLCAmY3gtPmlfZmxhZ3MpKSB7Ci0JCWF1ZGlvX2lucHV0ID0gY3gtPmNhcmQtPnJhZGlvX2lucHV0LmF1ZGlvX2lucHV0OwotCQltdXhfaW5wdXQgPSBjeC0+Y2FyZC0+cmFkaW9faW5wdXQubXV4ZXJfaW5wdXQ7Ci0JfSBlbHNlIHsKLQkJYXVkaW9faW5wdXQgPQotCQkJY3gtPmNhcmQtPmF1ZGlvX2lucHV0c1tjeC0+YXVkaW9faW5wdXRdLmF1ZGlvX2lucHV0OwotCQltdXhfaW5wdXQgPQotCQkJY3gtPmNhcmQtPmF1ZGlvX2lucHV0c1tjeC0+YXVkaW9faW5wdXRdLm11eGVyX2lucHV0OwotCX0KKwlpZiAodGVzdF9iaXQoQ1gxOF9GX0lfUkFESU9fVVNFUiwgJmN4LT5pX2ZsYWdzKSkKKwkJaW4gPSAmY3gtPmNhcmQtPnJhZGlvX2lucHV0OworCWVsc2UKKwkJaW4gPSAmY3gtPmNhcmQtPmF1ZGlvX2lucHV0c1tjeC0+YXVkaW9faW5wdXRdOwogCiAJLyogaGFuZGxlIG11eGVyIGNoaXBzICovCi0Jcm91dGUuaW5wdXQgPSBtdXhfaW5wdXQ7CisJcm91dGUuaW5wdXQgPSBpbi0+bXV4ZXJfaW5wdXQ7CiAJcm91dGUub3V0cHV0ID0gMDsKLQljeDE4X2kyY19odyhjeCwgY3gtPmNhcmQtPmh3X211eGVyLCBWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORywgJnJvdXRlKTsKKwl2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9leHRtdXgsIGF1ZGlvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAKLQlyb3V0ZS5pbnB1dCA9IGF1ZGlvX2lucHV0OwotCWVyciA9IGN4MThfaTJjX2h3KGN4LCBjeC0+Y2FyZC0+aHdfYXVkaW9fY3RybCwKLQkJCVZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HLCAmcm91dGUpOworCXJvdXRlLmlucHV0ID0gaW4tPmF1ZGlvX2lucHV0OworCWVyciA9IGN4MThfY2FsbF9od19lcnIoY3gsIGN4LT5jYXJkLT5od19hdWRpb19jdHJsLAorCQkJICAgICAgIGF1ZGlvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAorCS8qIEZJWE1FIC0gdGhpcyBpbnRlcm5hbCBtdXggc2hvdWxkIGJlIGFic3RyYWN0ZWQgdG8gYSBzdWJkZXYgKi8KIAl2YWwgPSBjeDE4X3JlYWRfcmVnKGN4LCBDWDE4X0FVRElPX0VOQUJMRSkgJiB+MHgzMDsKLQl2YWwgfD0gKGF1ZGlvX2lucHV0ID4gQ1gxOF9BVl9BVURJT19TRVJJQUwyKSA/IDB4MjAgOgotCQkJCQkoYXVkaW9faW5wdXQgPDwgNCk7Ci0JY3gxOF93cml0ZV9yZWcoY3gsIHZhbCB8IDB4YjAwLCBDWDE4X0FVRElPX0VOQUJMRSk7Ci0JY3gxOF92YXBpKGN4LCBDWDE4X0FQVV9SRVNFVEFJLCAxLCAwKTsKKwl2YWwgfD0gKGluLT5hdWRpb19pbnB1dCA+IENYMThfQVZfQVVESU9fU0VSSUFMMikgPyAweDIwIDoKKwkJCQkJKGluLT5hdWRpb19pbnB1dCA8PCA0KTsKKwljeDE4X3dyaXRlX3JlZ19leHBlY3QoY3gsIHZhbCB8IDB4YjAwLCBDWDE4X0FVRElPX0VOQUJMRSwgdmFsLCAweDMwKTsKIAlyZXR1cm4gMDsKIH0KLQotdm9pZCBjeDE4X2F1ZGlvX3NldF9yb3V0ZShzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQotewotCWN4MThfaTJjX2h3KGN4LCBjeC0+Y2FyZC0+aHdfYXVkaW9fY3RybCwKLQkJCVZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HLCByb3V0ZSk7Ci19Ci0KLXZvaWQgY3gxOF9hdWRpb19zZXRfYXVkaW9fY2xvY2tfZnJlcShzdHJ1Y3QgY3gxOCAqY3gsIHU4IGZyZXEpCi17Ci0Jc3RhdGljIHUzMiBmcmVxc1szXSA9IHsgNDQxMDAsIDQ4MDAwLCAzMjAwMCB9OwotCi0JLyogVGhlIGF1ZGlvIGNsb2NrIG9mIHRoZSBkaWdpdGl6ZXIgbXVzdCBtYXRjaCB0aGUgY29kZWMgc2FtcGxlCi0JICAgcmF0ZSBvdGhlcndpc2UgeW91IGdldCBzb21lIHZlcnkgc3RyYW5nZSBlZmZlY3RzLiAqLwotCWlmIChmcmVxID4gMikKLQkJcmV0dXJuOwotCWN4MThfY2FsbF9pMmNfY2xpZW50cyhjeCwgVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVRLCAmZnJlcXNbZnJlcV0pOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXVkaW8uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF1ZGlvLmgKaW5kZXggY2I1NjlhNi4uMjczMWQyOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXVkaW8uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdWRpby5oCkBAIC0yMiw1ICsyMiwzIEBACiAgKi8KIAogaW50IGN4MThfYXVkaW9fc2V0X2lvKHN0cnVjdCBjeDE4ICpjeCk7Ci12b2lkIGN4MThfYXVkaW9fc2V0X3JvdXRlKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpOwotdm9pZCBjeDE4X2F1ZGlvX3NldF9hdWRpb19jbG9ja19mcmVxKHN0cnVjdCBjeDE4ICpjeCwgdTggZnJlcSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1hdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtYXVkaW8uYwppbmRleCBhMmYwYWQ1Li45ZTMwOTgzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1hdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWF1ZGlvLmMKQEAgLTQ2NCw4MiArNDY0LDc2IEBACiAJfQogfQogCi1pbnQgY3gxOF9hdl9hdWRpbyhzdHJ1Y3QgY3gxOCAqY3gsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK2ludCBjeDE4X2F2X3NfY2xvY2tfZnJlcShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgZnJlcSkKIHsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSAmY3gtPmF2X3N0YXRlOwotCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CiAJaW50IHJldHZhbDsKKwl1OCB2OwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFZJRElPQ19JTlRfQVVESU9fQ0xPQ0tfRlJFUToKLQl7Ci0JCXU4IHY7Ci0JCWlmIChzdGF0ZS0+YXVkX2lucHV0ID4gQ1gxOF9BVl9BVURJT19TRVJJQUwyKSB7Ci0JCQl2ID0gY3gxOF9hdl9yZWFkKGN4LCAweDgwMykgJiB+MHgxMDsKLQkJCWN4MThfYXZfd3JpdGVfZXhwZWN0KGN4LCAweDgwMywgdiwgdiwgMHgxZik7Ci0JCQljeDE4X2F2X3dyaXRlKGN4LCAweDhkMywgMHgxZik7Ci0JCX0KLQkJdiA9IGN4MThfYXZfcmVhZChjeCwgMHg4MTApIHwgMHgxOwotCQljeDE4X2F2X3dyaXRlX2V4cGVjdChjeCwgMHg4MTAsIHYsIHYsIDB4MGYpOwotCi0JCXJldHZhbCA9IHNldF9hdWRjbGtfZnJlcShjeCwgKih1MzIgKilhcmcpOwotCi0JCXYgPSBjeDE4X2F2X3JlYWQoY3gsIDB4ODEwKSAmIH4weDE7Ci0JCWN4MThfYXZfd3JpdGVfZXhwZWN0KGN4LCAweDgxMCwgdiwgdiwgMHgwZik7Ci0JCWlmIChzdGF0ZS0+YXVkX2lucHV0ID4gQ1gxOF9BVl9BVURJT19TRVJJQUwyKSB7Ci0JCQl2ID0gY3gxOF9hdl9yZWFkKGN4LCAweDgwMykgfCAweDEwOwotCQkJY3gxOF9hdl93cml0ZV9leHBlY3QoY3gsIDB4ODAzLCB2LCB2LCAweDFmKTsKLQkJfQotCQlyZXR1cm4gcmV0dmFsOworCWlmIChzdGF0ZS0+YXVkX2lucHV0ID4gQ1gxOF9BVl9BVURJT19TRVJJQUwyKSB7CisJCXYgPSBjeDE4X2F2X3JlYWQoY3gsIDB4ODAzKSAmIH4weDEwOworCQljeDE4X2F2X3dyaXRlX2V4cGVjdChjeCwgMHg4MDMsIHYsIHYsIDB4MWYpOworCQljeDE4X2F2X3dyaXRlKGN4LCAweDhkMywgMHgxZik7CiAJfQorCXYgPSBjeDE4X2F2X3JlYWQoY3gsIDB4ODEwKSB8IDB4MTsKKwljeDE4X2F2X3dyaXRlX2V4cGVjdChjeCwgMHg4MTAsIHYsIHYsIDB4MGYpOwogCi0JY2FzZSBWSURJT0NfR19DVFJMOgotCQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQkJY3RybC0+dmFsdWUgPSBnZXRfdm9sdW1lKGN4KTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6Ci0JCQljdHJsLT52YWx1ZSA9IGdldF9iYXNzKGN4KTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKLQkJCWN0cmwtPnZhbHVlID0gZ2V0X3RyZWJsZShjeCk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgotCQkJY3RybC0+dmFsdWUgPSBnZXRfYmFsYW5jZShjeCk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQkJY3RybC0+dmFsdWUgPSBnZXRfbXV0ZShjeCk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9CisJcmV0dmFsID0gc2V0X2F1ZGNsa19mcmVxKGN4LCBmcmVxKTsKKworCXYgPSBjeDE4X2F2X3JlYWQoY3gsIDB4ODEwKSAmIH4weDE7CisJY3gxOF9hdl93cml0ZV9leHBlY3QoY3gsIDB4ODEwLCB2LCB2LCAweDBmKTsKKwlpZiAoc3RhdGUtPmF1ZF9pbnB1dCA+IENYMThfQVZfQVVESU9fU0VSSUFMMikgeworCQl2ID0gY3gxOF9hdl9yZWFkKGN4LCAweDgwMykgfCAweDEwOworCQljeDE4X2F2X3dyaXRlX2V4cGVjdChjeCwgMHg4MDMsIHYsIHYsIDB4MWYpOworCX0KKwlyZXR1cm4gcmV0dmFsOworfQorCitpbnQgY3gxOF9hdl9hdWRpb19nX2N0cmwoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJY3RybC0+dmFsdWUgPSBnZXRfdm9sdW1lKGN4KTsKIAkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TX0NUUkw6Ci0JCXN3aXRjaCAoY3RybC0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCQlzZXRfdm9sdW1lKGN4LCBjdHJsLT52YWx1ZSk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgotCQkJc2V0X2Jhc3MoY3gsIGN0cmwtPnZhbHVlKTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKLQkJCXNldF90cmVibGUoY3gsIGN0cmwtPnZhbHVlKTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6Ci0JCQlzZXRfYmFsYW5jZShjeCwgY3RybC0+dmFsdWUpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJCXNldF9tdXRlKGN4LCBjdHJsLT52YWx1ZSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgorCQljdHJsLT52YWx1ZSA9IGdldF9iYXNzKGN4KTsKIAkJYnJlYWs7Ci0KKwljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKKwkJY3RybC0+dmFsdWUgPSBnZXRfdHJlYmxlKGN4KTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgorCQljdHJsLT52YWx1ZSA9IGdldF9iYWxhbmNlKGN4KTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQljdHJsLT52YWx1ZSA9IGdldF9tdXRlKGN4KTsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQorCXJldHVybiAwOworfQogCitpbnQgY3gxOF9hdl9hdWRpb19zX2N0cmwoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJc2V0X3ZvbHVtZShjeCwgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CisJCXNldF9iYXNzKGN4LCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgorCQlzZXRfdHJlYmxlKGN4LCBjdHJsLT52YWx1ZSk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKKwkJc2V0X2JhbGFuY2UoY3gsIGN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlzZXRfbXV0ZShjeCwgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1jb3JlLmMKaW5kZXggMGIxYzg0Yi4uZjRkZDlkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWNvcmUuYwpAQCAtMjIsOCArMjIsMTAgQEAKICAqICAwMjExMC0xMzAxLCBVU0EuCiAgKi8KIAorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgogI2luY2x1ZGUgImN4MTgtZHJpdmVyLmgiCiAjaW5jbHVkZSAiY3gxOC1pby5oIgorI2luY2x1ZGUgImN4MTgtY2FyZHMuaCIKIAogaW50IGN4MThfYXZfd3JpdGUoc3RydWN0IGN4MTggKmN4LCB1MTYgYWRkciwgdTggdmFsdWUpCiB7CkBAIC05NywxNSArOTksNiBAQAogCQkJICAgICBvcl92YWx1ZSk7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBpbnQgc2V0X2lucHV0KHN0cnVjdCBjeDE4ICpjeCwgZW51bSBjeDE4X2F2X3ZpZGVvX2lucHV0IHZpZF9pbnB1dCwKLQkJCQkJZW51bSBjeDE4X2F2X2F1ZGlvX2lucHV0IGF1ZF9pbnB1dCk7Ci1zdGF0aWMgdm9pZCBsb2dfYXVkaW9fc3RhdHVzKHN0cnVjdCBjeDE4ICpjeCk7Ci1zdGF0aWMgdm9pZCBsb2dfdmlkZW9fc3RhdHVzKHN0cnVjdCBjeDE4ICpjeCk7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KIHN0YXRpYyB2b2lkIGN4MThfYXZfaW5pdGlhbGl6ZShzdHJ1Y3QgY3gxOCAqY3gpCiB7CiAJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gJmN4LT5hdl9zdGF0ZTsKQEAgLTE2OSw5ICsxNjIsMTQgQEAKIAkvKiBTZXQgVkdBX1RSQUNLX1JBTkdFIHRvIDB4MjAgKi8KIAljeDE4X2F2X2FuZF9vcjQoY3gsIENYQURFQ19ERkVfQ1RSTDIsIDB4RkZGRjAwRkYsIDB4MDAwMDIwMDApOwogCi0JLyogRW5hYmxlIFZCSSBjYXB0dXJlICovCi0JY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19PVVRfQ1RSTDEsIDB4NDAxMDI1M0YpOwotCS8qIGN4MThfYXZfd3JpdGU0KGN4LCBDWEFERUNfT1VUX0NUUkwxLCAweDQwMTAyNTNFKTsgKi8KKwkvKgorCSAqIEluaXRpYWwgVkJJIHNldHVwCisJICogVklQLTEuMSwgMTAgYml0IG1vZGUsIGVuYWJsZSBSYXcsIGRpc2FibGUgc2xpY2VkLAorCSAqIGRvbid0IGNsYW1wIHJhdyBzYW1wbGVzIHdoZW4gY29kZXMgYXJlIGluIHVzZSwgMSBieXRlIHVzZXIgRC13b3JkcywKKwkgKiBJRElEMCBoYXMgbGluZSAjLCBSUCBjb2RlIFYgYml0IHRyYW5zaXRpb24gb24gVkJMQU5LLCBkYXRhIGR1cmluZworCSAqIGJsYW5raW5nIGludGVydmFscworCSAqLworCWN4MThfYXZfd3JpdGU0KGN4LCBDWEFERUNfT1VUX0NUUkwxLCAweDQwMTMyNTJlKTsKIAogCS8qIFNldCB0aGUgdmlkZW8gaW5wdXQuCiAJICAgVGhlIHNldHRpbmcgaW4gTU9ERV9DVFJMIGdldHMgbG9zdCB3aGVuIHdlIGRvIHRoZSBhYm92ZSBzZXR1cCAqLwpAQCAtMTk1LDExICsxOTMsNjEgQEAKIAlzdGF0ZS0+ZGVmYXVsdF92b2x1bWUgPSAoKHN0YXRlLT5kZWZhdWx0X3ZvbHVtZSAvIDIpICsgMjMpIDw8IDk7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCitzdGF0aWMgaW50IGN4MThfYXZfcmVzZXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIHZhbCkKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCWN4MThfYXZfaW5pdGlhbGl6ZShjeCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gxOF9hdl9pbml0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiB2YWwpCit7CisJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gdG9fY3gxOF9hdl9zdGF0ZShzZCk7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlzd2l0Y2ggKHZhbCkgeworCWNhc2UgQ1gxOF9BVl9JTklUX1BMTFM6CisJCS8qCisJCSAqIFRoZSBjcnlzdGFsIGZyZXEgdXNlZCBpbiBjYWxjdWxhdGlvbnMgaW4gdGhpcyBkcml2ZXIgd2lsbCBiZQorCQkgKiAyOC42MzYzNjAgTUh6LgorCQkgKiBBaW0gdG8gcnVuIHRoZSBQTExzJyBWQ09zIG5lYXIgNDAwIE1IeiB0byBtaW5pbXplIGVycm9ycy4KKwkJICovCisKKwkJLyoKKwkJICogVkRDTEsgIEludGVnZXIgPSAweDBmLCBQb3N0IERpdmlkZXIgPSAweDA0CisJCSAqIEFJTUNMSyBJbnRlZ2VyID0gMHgwZSwgUG9zdCBEaXZpZGVyID0gMHgxNgorCQkgKi8KKwkJY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19QTExfQ1RSTDEsIDB4MTYwZTA0MGYpOworCisJCS8qIFZEQ0xLIEZyYWN0aW9uID0gMHgyYmUyZmUgKi8KKwkJLyogeHRhbCAqIDB4Zi4xNWYxN2YwLzQgPSAxMDggTUh6OiA0MzIgTUh6IGJlZm9yZSBwb3N0IGRpdmlkZSAqLworCQljeDE4X2F2X3dyaXRlNChjeCwgQ1hBREVDX1ZJRF9QTExfRlJBQywgMHgwMDJiZTJmZSk7CisKKwkJLyogQUlNQ0xLIEZyYWN0aW9uID0gMHgwNTIyN2FkICovCisJCS8qIHh0YWwgKiAweGUuMjkxM2Q2OC8weDE2ID0gNDgwMDAgKiAzODQ6IDQwNiBNSHogcHJlIHBvc3QtZGl2Ki8KKwkJY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19BVVhfUExMX0ZSQUMsIDB4MDA1MjI3YWQpOworCisJCS8qIFNBX01DTEtfU0VMPTEsIFNBX01DTEtfRElWPTB4MTYgKi8KKwkJY3gxOF9hdl93cml0ZShjeCwgQ1hBREVDX0kyU19NQ0xLLCAweDU2KTsKKwkJYnJlYWs7CisKKwljYXNlIENYMThfQVZfSU5JVF9OT1JNQUw6CisJZGVmYXVsdDoKKwkJaWYgKCFzdGF0ZS0+aXNfaW5pdGlhbGl6ZWQpIHsKKwkJCS8qIGluaXRpYWxpemUgb24gZmlyc3QgdXNlICovCisJCQlzdGF0ZS0+aXNfaW5pdGlhbGl6ZWQgPSAxOworCQkJY3gxOF9hdl9pbml0aWFsaXplKGN4KTsKKwkJfQorCQlicmVhazsKKwl9CisJcmV0dXJuIDA7Cit9CiAKIHZvaWQgY3gxOF9hdl9zdGRfc2V0dXAoc3RydWN0IGN4MTggKmN4KQogewogCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9ICZjeC0+YXZfc3RhdGU7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9ICZzdGF0ZS0+c2Q7CiAJdjRsMl9zdGRfaWQgc3RkID0gc3RhdGUtPnN0ZDsKIAlpbnQgaGJsYW5rLCBoYWN0aXZlLCBidXJzdCwgdmJsYW5rLCB2YWN0aXZlLCBzYzsKIAlpbnQgdmJsYW5rNjU2LCBzcmNfZGVjaW1hdGlvbjsKQEAgLTIxMyw2ICsyNjEsNyBAQAogCQljeDE4X2F2X3dyaXRlKGN4LCAweDQ5ZiwgMHgxNCk7CiAKIAlpZiAoc3RkICYgVjRMMl9TVERfNjI1XzUwKSB7CisJCS8qIEZJWE1FIC0gcmV2aXNpdCB0aGVzZSBmb3IgU2xpY2VkIFZCSSAqLwogCQloYmxhbmsgPSAxMzI7CiAJCWhhY3RpdmUgPSA3MjA7CiAJCWJ1cnN0ID0gOTM7CkBAIC0yMzYsMTMgKzI4NSw0MCBAQAogCQkJc2MgPSA2NzIzNTE7CiAJCX0KIAl9IGVsc2UgeworCQkvKgorCQkgKiBUaGUgZm9sbG93aW5nIHJlbGF0aW9uc2hpcHMgb2YgaGFsZiBsaW5lIGNvdW50cyBzaG91bGQgaG9sZDoKKwkJICogNTI1ID0gdnN5bmMgKyB2YWN0aXZlICsgdmJsYW5rNjU2CisJCSAqIDEyID0gdmJsYW5rNjU2IC0gdmJsYW5rCisJCSAqCisJCSAqIHZzeW5jOiAgICAgYWx3YXlzIDYgaGFsZi1saW5lcyBvZiB2c3luYyBwdWxzZXMKKwkJICogdmFjdGl2ZTogICBoYWxmIGxpbmVzIG9mIGFjdGl2ZSB2aWRlbworCQkgKiB2Ymxhbms2NTY6IGhhbGYgbGluZXMsIGFmdGVyIGxpbmUgMy9taWQtMjY2LCBvZiBibGFua2VkIHZpZGVvCisJCSAqIHZibGFuazogICAgaGFsZiBsaW5lcywgYWZ0ZXIgbGluZSA5LzI3Miwgb2YgYmxhbmtlZCB2aWRlbworCQkgKgorCQkgKiBBcyBmYXIgYXMgSSBjYW4gdGVsbDoKKwkJICogdmJsYW5rNjU2IHN0YXJ0cyBjb3VudGluZyBmcm9tIHRoZSBmYWxsaW5nIGVkZ2Ugb2YgdGhlIGZpcnN0CisJCSAqIAl2c3luYyBwdWxzZSAoc3RhcnQgb2YgbGluZSA0IG9yIG1pZC0yNjYpCisJCSAqIHZibGFuayBzdGFydHMgY291bnRpbmcgZnJvbSB0aGUgYWZ0ZXIgdGhlIDYgdnN5bmMgcHVsc2VzIGFuZAorCQkgKiAJNiBvciA1IGVxdWFsaXphdGlvbiBwdWxzZXMgKHN0YXJ0IG9mIGxpbmUgMTAgb3IgMjcyKQorCQkgKgorCQkgKiBGb3IgNTI1IGxpbmUgc3lzdGVtcyB0aGUgZHJpdmVyIHdpbGwgZXh0cmFjdCBWQkkgaW5mb3JtYXRpb24KKwkJICogZnJvbSBsaW5lcyAxMC0yMSBhbmQgbGluZXMgMjczLTI4NC4KKwkJICovCisJCXZibGFuazY1NiA9IDM4OyAvKiBsaW5lcyAgNCAtICAyMiAgJiAgMjY2IC0gMjg0ICovCisJCXZibGFuayA9IDI2OwkvKiBsaW5lcyAxMCAtICAyMiAgJiAgMjcyIC0gMjg0ICovCisJCXZhY3RpdmUgPSA0ODE7ICAvKiBsaW5lcyAyMyAtIDI2MyAgJiAgMjg1IC0gNTI1ICovCisKKwkJLyoKKwkJICogRm9yIGEgMTMuNSBNcHBzIGNsb2NrIGFuZCAxNSw3MzQuMjYgSHogbGluZSByYXRlLCBhIGxpbmUgaXMKKwkJICogaXMgODU4IHBpeGVscyA9IDcyMCBhY3RpdmUgKyAxMzggYmxhbmtpbmcuICBUaGUgSHN5bmMgbGVhZGluZworCQkgKiBlZGdlIHNob3VsZCBoYXBwZW4gMS4yIHVzICogMTMuNSBNcHBzIH49IDE2IHBpeGVscyBhZnRlciB0aGUKKwkJICogZW5kIG9mIGFjdGl2ZSB2aWRlbywgbGVhdmluZyAxMjIgcGl4ZWxzIG9mIGhibGFuayB0byBpZ25vcmUKKwkJICogYmVmb3JlIGFjdGl2ZSB2aWRlbyBzdGFydHMuCisJCSAqLwogCQloYWN0aXZlID0gNzIwOwogCQloYmxhbmsgPSAxMjI7Ci0JCXZhY3RpdmUgPSA0ODc7CiAJCWx1bWFfbHBmID0gMTsKIAkJdXZfbHBmID0gMTsKLQkJdmJsYW5rID0gMjY7Ci0JCXZibGFuazY1NiA9IDI2OwogCiAJCXNyY19kZWNpbWF0aW9uID0gMHgyMWY7CiAJCWlmIChzdGQgPT0gVjRMMl9TVERfUEFMXzYwKSB7CkBAIC0yNjUsMzMgKzM0MSwzNSBAQAogCXBsbF9pbnQgPSBjeDE4X2F2X3JlYWQoY3gsIDB4MTA4KTsKIAlwbGxfZnJhYyA9IGN4MThfYXZfcmVhZDQoY3gsIDB4MTBjKSAmIDB4MWZmZmZmZjsKIAlwbGxfcG9zdCA9IGN4MThfYXZfcmVhZChjeCwgMHgxMDkpOwotCUNYMThfREVCVUdfSU5GTygiUExMIHJlZ3MgPSBpbnQ6ICV1LCBmcmFjOiAldSwgcG9zdDogJXVcbiIsCi0JCQlwbGxfaW50LCBwbGxfZnJhYywgcGxsX3Bvc3QpOworCUNYMThfREVCVUdfSU5GT19ERVYoc2QsICJQTEwgcmVncyA9IGludDogJXUsIGZyYWM6ICV1LCBwb3N0OiAldVxuIiwKKwkJCSAgICBwbGxfaW50LCBwbGxfZnJhYywgcGxsX3Bvc3QpOwogCiAJaWYgKHBsbF9wb3N0KSB7CiAJCWludCBmaW4sIGZzYywgcGxsOwogCiAJCXBsbCA9ICgyODYzNjM2MEwgKiAoKCgodTY0KXBsbF9pbnQpIDw8IDI1KSArIHBsbF9mcmFjKSkgPj4gMjU7CiAJCXBsbCAvPSBwbGxfcG9zdDsKLQkJQ1gxOF9ERUJVR19JTkZPKCJQTEwgPSAlZC4lMDZkIE1IelxuIiwKLQkJCQkJcGxsIC8gMTAwMDAwMCwgcGxsICUgMTAwMDAwMCk7Ci0JCUNYMThfREVCVUdfSU5GTygiUExMLzggPSAlZC4lMDZkIE1IelxuIiwKLQkJCQkJcGxsIC8gODAwMDAwMCwgKHBsbCAvIDgpICUgMTAwMDAwMCk7CisJCUNYMThfREVCVUdfSU5GT19ERVYoc2QsICJQTEwgPSAlZC4lMDZkIE1IelxuIiwKKwkJCQkgICAgcGxsIC8gMTAwMDAwMCwgcGxsICUgMTAwMDAwMCk7CisJCUNYMThfREVCVUdfSU5GT19ERVYoc2QsICJQTEwvOCA9ICVkLiUwNmQgTUh6XG4iLAorCQkJCSAgICBwbGwgLyA4MDAwMDAwLCAocGxsIC8gOCkgJSAxMDAwMDAwKTsKIAogCQlmaW4gPSAoKHU2NClzcmNfZGVjaW1hdGlvbiAqIHBsbCkgPj4gMTI7Ci0JCUNYMThfREVCVUdfSU5GTygiQURDIFNhbXBsaW5nIGZyZXEgPSAlZC4lMDZkIE1IelxuIiwKLQkJCQkJZmluIC8gMTAwMDAwMCwgZmluICUgMTAwMDAwMCk7CisJCUNYMThfREVCVUdfSU5GT19ERVYoc2QsICJBREMgU2FtcGxpbmcgZnJlcSA9ICVkLiUwNmQgTUh6XG4iLAorCQkJCSAgICBmaW4gLyAxMDAwMDAwLCBmaW4gJSAxMDAwMDAwKTsKIAogCQlmc2MgPSAoKCh1NjQpc2MpICogcGxsKSA+PiAyNEw7Ci0JCUNYMThfREVCVUdfSU5GTygiQ2hyb21hIHN1Yi1jYXJyaWVyIGZyZXEgPSAlZC4lMDZkIE1IelxuIiwKLQkJCQkJZnNjIC8gMTAwMDAwMCwgZnNjICUgMTAwMDAwMCk7CisJCUNYMThfREVCVUdfSU5GT19ERVYoc2QsCisJCQkJICAgICJDaHJvbWEgc3ViLWNhcnJpZXIgZnJlcSA9ICVkLiUwNmQgTUh6XG4iLAorCQkJCSAgICBmc2MgLyAxMDAwMDAwLCBmc2MgJSAxMDAwMDAwKTsKIAotCQlDWDE4X0RFQlVHX0lORk8oImhibGFuayAlaSwgaGFjdGl2ZSAlaSwgIgotCQkJInZibGFuayAlaSAsIHZhY3RpdmUgJWksIHZibGFuazY1NiAlaSwgc3JjX2RlYyAlaSwiCi0JCQkiYnVyc3QgMHglMDJ4LCBsdW1hX2xwZiAlaSwgdXZfbHBmICVpLCBjb21iIDB4JTAyeCwiCi0JCQkiIHNjIDB4JTA2eFxuIiwKLQkJCWhibGFuaywgaGFjdGl2ZSwgdmJsYW5rLCB2YWN0aXZlLCB2Ymxhbms2NTYsCi0JCQlzcmNfZGVjaW1hdGlvbiwgYnVyc3QsIGx1bWFfbHBmLCB1dl9scGYsIGNvbWIsIHNjKTsKKwkJQ1gxOF9ERUJVR19JTkZPX0RFVihzZCwgImhibGFuayAlaSwgaGFjdGl2ZSAlaSwgdmJsYW5rICVpLCAiCisJCQkJICAgICJ2YWN0aXZlICVpLCB2Ymxhbms2NTYgJWksIHNyY19kZWMgJWksICIKKwkJCQkgICAgImJ1cnN0IDB4JTAyeCwgbHVtYV9scGYgJWksIHV2X2xwZiAlaSwgIgorCQkJCSAgICAiY29tYiAweCUwMngsIHNjIDB4JTA2eFxuIiwKKwkJCQkgICAgaGJsYW5rLCBoYWN0aXZlLCB2YmxhbmssIHZhY3RpdmUsIHZibGFuazY1NiwKKwkJCQkgICAgc3JjX2RlY2ltYXRpb24sIGJ1cnN0LCBsdW1hX2xwZiwgdXZfbHBmLAorCQkJCSAgICBjb21iLCBzYyk7CiAJfQogCiAJLyogU2V0cyBob3Jpem9udGFsIGJsYW5raW5nIGRlbGF5IGFuZCBhY3RpdmUgbGluZXMgKi8KQEAgLTMyNSwxOCArNDAzLDE2IEBACiAJY3gxOF9hdl93cml0ZShjeCwgMHg0N2QsIDB4ZmYgJiBzYyA+PiA4KTsKIAljeDE4X2F2X3dyaXRlKGN4LCAweDQ3ZSwgMHhmZiAmIHNjID4+IDE2KTsKIAotCS8qIFNldHMgVkJJIHBhcmFtZXRlcnMgKi8KIAlpZiAoc3RkICYgVjRMMl9TVERfNjI1XzUwKSB7Ci0JCWN4MThfYXZfd3JpdGUoY3gsIDB4NDdmLCAweDAxKTsKLQkJc3RhdGUtPnZiaV9saW5lX29mZnNldCA9IDU7CisJCXN0YXRlLT5zbGljZXJfbGluZV9kZWxheSA9IDE7CisJCXN0YXRlLT5zbGljZXJfbGluZV9vZmZzZXQgPSAoNiArIHN0YXRlLT5zbGljZXJfbGluZV9kZWxheSAtIDIpOwogCX0gZWxzZSB7Ci0JCWN4MThfYXZfd3JpdGUoY3gsIDB4NDdmLCAweDAwKTsKLQkJc3RhdGUtPnZiaV9saW5lX29mZnNldCA9IDg7CisJCXN0YXRlLT5zbGljZXJfbGluZV9kZWxheSA9IDA7CisJCXN0YXRlLT5zbGljZXJfbGluZV9vZmZzZXQgPSAoMTAgKyBzdGF0ZS0+c2xpY2VyX2xpbmVfZGVsYXkgLSAyKTsKIAl9CisJY3gxOF9hdl93cml0ZShjeCwgMHg0N2YsIHN0YXRlLT5zbGljZXJfbGluZV9kZWxheSk7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KIHN0YXRpYyB2b2lkIGlucHV0X2NoYW5nZShzdHJ1Y3QgY3gxOCAqY3gpCiB7CiAJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gJmN4LT5hdl9zdGF0ZTsKQEAgLTM4MiwxNyArNDU4LDI2IEBACiAJfQogfQogCitzdGF0aWMgaW50IGN4MThfYXZfc19mcmVxdWVuY3koc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmZyZXEpCit7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJaW5wdXRfY2hhbmdlKGN4KTsKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzZXRfaW5wdXQoc3RydWN0IGN4MTggKmN4LCBlbnVtIGN4MThfYXZfdmlkZW9faW5wdXQgdmlkX2lucHV0LAogCQkJCQllbnVtIGN4MThfYXZfYXVkaW9faW5wdXQgYXVkX2lucHV0KQogewogCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9ICZjeC0+YXZfc3RhdGU7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9ICZzdGF0ZS0+c2Q7CiAJdTggaXNfY29tcG9zaXRlID0gKHZpZF9pbnB1dCA+PSBDWDE4X0FWX0NPTVBPU0lURTEgJiYKIAkJCSAgIHZpZF9pbnB1dCA8PSBDWDE4X0FWX0NPTVBPU0lURTgpOwogCXU4IHJlZzsKIAl1OCB2OwogCi0JQ1gxOF9ERUJVR19JTkZPKCJkZWNvZGVyIHNldCB2aWRlbyBpbnB1dCAlZCwgYXVkaW8gaW5wdXQgJWRcbiIsCi0JCQl2aWRfaW5wdXQsIGF1ZF9pbnB1dCk7CisJQ1gxOF9ERUJVR19JTkZPX0RFVihzZCwgImRlY29kZXIgc2V0IHZpZGVvIGlucHV0ICVkLCBhdWRpbyBpbnB1dCAlZFxuIiwKKwkJCSAgICB2aWRfaW5wdXQsIGF1ZF9pbnB1dCk7CiAKIAlpZiAoaXNfY29tcG9zaXRlKSB7CiAJCXJlZyA9IDB4ZjAgKyAodmlkX2lucHV0IC0gQ1gxOF9BVl9DT01QT1NJVEUxKTsKQEAgLTQwNSw4ICs0OTAsOCBAQAogCQkgICAgbHVtYSA+IENYMThfQVZfU1ZJREVPX0xVTUE4IHx8CiAJCSAgICBjaHJvbWEgPCBDWDE4X0FWX1NWSURFT19DSFJPTUE0IHx8CiAJCSAgICBjaHJvbWEgPiBDWDE4X0FWX1NWSURFT19DSFJPTUE4KSB7Ci0JCQlDWDE4X0VSUigiMHglMDR4IGlzIG5vdCBhIHZhbGlkIHZpZGVvIGlucHV0IVxuIiwKLQkJCQkJdmlkX2lucHV0KTsKKwkJCUNYMThfRVJSX0RFVihzZCwgIjB4JTA0eCBpcyBub3QgYSB2YWxpZCB2aWRlbyBpbnB1dCFcbiIsCisJCQkJICAgICB2aWRfaW5wdXQpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJcmVnID0gMHhmMCArICgobHVtYSAtIENYMThfQVZfU1ZJREVPX0xVTUExKSA+PiA0KTsKQEAgLTQzMSw3ICs1MTYsOCBAQAogCWNhc2UgQ1gxOF9BVl9BVURJTzg6IHJlZyAmPSB+MHhjMDsgcmVnIHw9IDB4NDA7IGJyZWFrOwogCiAJZGVmYXVsdDoKLQkJQ1gxOF9FUlIoIjB4JTA0eCBpcyBub3QgYSB2YWxpZCBhdWRpbyBpbnB1dCFcbiIsIGF1ZF9pbnB1dCk7CisJCUNYMThfRVJSX0RFVihzZCwgIjB4JTA0eCBpcyBub3QgYSB2YWxpZCBhdWRpbyBpbnB1dCFcbiIsCisJCQkgICAgIGF1ZF9pbnB1dCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNDYxLDE0ICs1NDcsMTE4IEBACiAJcmV0dXJuIDA7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBpbnQgc2V0X3Y0bHN0ZChzdHJ1Y3QgY3gxOCAqY3gpCitzdGF0aWMgaW50IGN4MThfYXZfc192aWRlb19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJICAgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCiB7Ci0Jc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gJmN4LT5hdl9zdGF0ZTsKKwlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSB0b19jeDE4X2F2X3N0YXRlKHNkKTsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlyZXR1cm4gc2V0X2lucHV0KGN4LCByb3V0ZS0+aW5wdXQsIHN0YXRlLT5hdWRfaW5wdXQpOworfQorCitzdGF0aWMgaW50IGN4MThfYXZfc19hdWRpb19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJICAgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCit7CisJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gdG9fY3gxOF9hdl9zdGF0ZShzZCk7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJcmV0dXJuIHNldF9pbnB1dChjeCwgc3RhdGUtPnZpZF9pbnB1dCwgcm91dGUtPmlucHV0KTsKK30KKworc3RhdGljIGludCBjeDE4X2F2X2dfdHVuZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfdHVuZXIgKnZ0KQoreworCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9IHRvX2N4MThfYXZfc3RhdGUoc2QpOworCXN0cnVjdCBjeDE4ICpjeCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXU4IHZwcmVzOworCXU4IG1vZGU7CisJaW50IHZhbCA9IDA7CisKKwlpZiAoc3RhdGUtPnJhZGlvKQorCQlyZXR1cm4gMDsKKworCXZwcmVzID0gY3gxOF9hdl9yZWFkKGN4LCAweDQwZSkgJiAweDIwOworCXZ0LT5zaWduYWwgPSB2cHJlcyA/IDB4ZmZmZiA6IDB4MDsKKworCXZ0LT5jYXBhYmlsaXR5IHw9CisJCSAgICBWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfCBWNEwyX1RVTkVSX0NBUF9MQU5HMSB8CisJCSAgICBWNEwyX1RVTkVSX0NBUF9MQU5HMiB8IFY0TDJfVFVORVJfQ0FQX1NBUDsKKworCW1vZGUgPSBjeDE4X2F2X3JlYWQoY3gsIDB4ODA0KTsKKworCS8qIGdldCByeHN1YmNoYW5zIGFuZCBhdWRtb2RlICovCisJaWYgKChtb2RlICYgMHhmKSA9PSAxKQorCQl2YWwgfD0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCWVsc2UKKwkJdmFsIHw9IFY0TDJfVFVORVJfU1VCX01PTk87CisKKwlpZiAobW9kZSA9PSAyIHx8IG1vZGUgPT0gNCkKKwkJdmFsID0gVjRMMl9UVU5FUl9TVUJfTEFORzEgfCBWNEwyX1RVTkVSX1NVQl9MQU5HMjsKKworCWlmIChtb2RlICYgMHgxMCkKKwkJdmFsIHw9IFY0TDJfVFVORVJfU1VCX1NBUDsKKworCXZ0LT5yeHN1YmNoYW5zID0gdmFsOworCXZ0LT5hdWRtb2RlID0gc3RhdGUtPmF1ZG1vZGU7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gxOF9hdl9zX3R1bmVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3R1bmVyICp2dCkKK3sKKwlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSB0b19jeDE4X2F2X3N0YXRlKHNkKTsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwl1OCB2OworCisJaWYgKHN0YXRlLT5yYWRpbykKKwkJcmV0dXJuIDA7CisKKwl2ID0gY3gxOF9hdl9yZWFkKGN4LCAweDgwOSk7CisJdiAmPSB+MHhmOworCisJc3dpdGNoICh2dC0+YXVkbW9kZSkgeworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86CisJCS8qIG1vbm8gICAgICAtPiBtb25vCisJCSAgIHN0ZXJlbyAgICAtPiBtb25vCisJCSAgIGJpbGluZ3VhbCAtPiBsYW5nMSAqLworCQlicmVhazsKKwljYXNlIFY0TDJfVFVORVJfTU9ERV9TVEVSRU86CisJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzE6CisJCS8qIG1vbm8gICAgICAtPiBtb25vCisJCSAgIHN0ZXJlbyAgICAtPiBzdGVyZW8KKwkJICAgYmlsaW5ndWFsIC0+IGxhbmcxICovCisJCXYgfD0gMHg0OworCQlicmVhazsKKwljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMV9MQU5HMjoKKwkJLyogbW9ubyAgICAgIC0+IG1vbm8KKwkJICAgc3RlcmVvICAgIC0+IHN0ZXJlbworCQkgICBiaWxpbmd1YWwgLT4gbGFuZzEvbGFuZzIgKi8KKwkJdiB8PSAweDc7CisJCWJyZWFrOworCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcyOgorCQkvKiBtb25vICAgICAgLT4gbW9ubworCQkgICBzdGVyZW8gICAgLT4gc3RlcmVvCisJCSAgIGJpbGluZ3VhbCAtPiBsYW5nMiAqLworCQl2IHw9IDB4MTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWN4MThfYXZfd3JpdGVfZXhwZWN0KGN4LCAweDgwOSwgdiwgdiwgMHhmZik7CisJc3RhdGUtPmF1ZG1vZGUgPSB2dC0+YXVkbW9kZTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDE4X2F2X3Nfc3RkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkIG5vcm0pCit7CisJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gdG9fY3gxOF9hdl9zdGF0ZShzZCk7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKIAl1OCBmbXQgPSAwOyAJLyogemVybyBpcyBhdXRvZGV0ZWN0ICovCiAJdTggcGFsX20gPSAwOwogCisJaWYgKHN0YXRlLT5yYWRpbyA9PSAwICYmIHN0YXRlLT5zdGQgPT0gbm9ybSkKKwkJcmV0dXJuIDA7CisKKwlzdGF0ZS0+cmFkaW8gPSAwOworCXN0YXRlLT5zdGQgPSBub3JtOworCiAJLyogRmlyc3QgdGVzdHMgc2hvdWxkIGJlIGFnYWluc3Qgc3BlY2lmaWMgc3RkICovCiAJaWYgKHN0YXRlLT5zdGQgPT0gVjRMMl9TVERfTlRTQ19NX0pQKSB7CiAJCWZtdCA9IDB4MjsKQEAgLTQ5Myw3ICs2ODMsNyBAQAogCQkJZm10ID0gMHhjOwogCX0KIAotCUNYMThfREVCVUdfSU5GTygiY2hhbmdpbmcgdmlkZW8gc3RkIHRvIGZtdCAlaVxuIiwgZm10KTsKKwlDWDE4X0RFQlVHX0lORk9fREVWKHNkLCAiY2hhbmdpbmcgdmlkZW8gc3RkIHRvIGZtdCAlaVxuIiwgZm10KTsKIAogCS8qIEZvbGxvdyBzdGVwIDkgb2Ygc2VjdGlvbiAzLjE2IGluIHRoZSBjeDE4X2F2IGRhdGFzaGVldC4KIAkgICBXaXRob3V0IHRoaXMgUEFMIG1heSBkaXNwbGF5IGEgdmVydGljYWwgZ2hvc3RpbmcgZWZmZWN0LgpAQCAtNTExLDE1ICs3MDEsMjIgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIGludCBzZXRfdjRsY3RybChzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IGN4MThfYXZfc19yYWRpbyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogeworCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9IHRvX2N4MThfYXZfc3RhdGUoc2QpOworCXN0YXRlLT5yYWRpbyA9IDE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgY3gxOF9hdl9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CiAJCWlmIChjdHJsLT52YWx1ZSA8IDAgfHwgY3RybC0+dmFsdWUgPiAyNTUpIHsKLQkJCUNYMThfRVJSKCJpbnZhbGlkIGJyaWdodG5lc3Mgc2V0dGluZyAlZFxuIiwKLQkJCQkgICAgY3RybC0+dmFsdWUpOworCQkJQ1gxOF9FUlJfREVWKHNkLCAiaW52YWxpZCBicmlnaHRuZXNzIHNldHRpbmcgJWRcbiIsCisJCQkJICAgICBjdHJsLT52YWx1ZSk7CiAJCQlyZXR1cm4gLUVSQU5HRTsKIAkJfQogCkBAIC01MjgsOCArNzI1LDggQEAKIAogCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CiAJCWlmIChjdHJsLT52YWx1ZSA8IDAgfHwgY3RybC0+dmFsdWUgPiAxMjcpIHsKLQkJCUNYMThfRVJSKCJpbnZhbGlkIGNvbnRyYXN0IHNldHRpbmcgJWRcbiIsCi0JCQkJICAgIGN0cmwtPnZhbHVlKTsKKwkJCUNYMThfRVJSX0RFVihzZCwgImludmFsaWQgY29udHJhc3Qgc2V0dGluZyAlZFxuIiwKKwkJCQkgICAgIGN0cmwtPnZhbHVlKTsKIAkJCXJldHVybiAtRVJBTkdFOwogCQl9CiAKQEAgLTUzOCw4ICs3MzUsOCBAQAogCiAJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgogCQlpZiAoY3RybC0+dmFsdWUgPCAwIHx8IGN0cmwtPnZhbHVlID4gMTI3KSB7Ci0JCQlDWDE4X0VSUigiaW52YWxpZCBzYXR1cmF0aW9uIHNldHRpbmcgJWRcbiIsCi0JCQkJICAgIGN0cmwtPnZhbHVlKTsKKwkJCUNYMThfRVJSX0RFVihzZCwgImludmFsaWQgc2F0dXJhdGlvbiBzZXR0aW5nICVkXG4iLAorCQkJCSAgICAgY3RybC0+dmFsdWUpOwogCQkJcmV0dXJuIC1FUkFOR0U7CiAJCX0KIApAQCAtNTQ4LDggKzc0NSw5IEBACiAJCWJyZWFrOwogCiAJY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCWlmIChjdHJsLT52YWx1ZSA8IC0xMjcgfHwgY3RybC0+dmFsdWUgPiAxMjcpIHsKLQkJCUNYMThfRVJSKCJpbnZhbGlkIGh1ZSBzZXR0aW5nICVkXG4iLCBjdHJsLT52YWx1ZSk7CisJCWlmIChjdHJsLT52YWx1ZSA8IC0xMjggfHwgY3RybC0+dmFsdWUgPiAxMjcpIHsKKwkJCUNYMThfRVJSX0RFVihzZCwgImludmFsaWQgaHVlIHNldHRpbmcgJWRcbiIsCisJCQkJICAgICBjdHJsLT52YWx1ZSk7CiAJCQlyZXR1cm4gLUVSQU5HRTsKIAkJfQogCkBAIC01NjEsMTcgKzc1OSwxOCBAQAogCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6Ci0JCXJldHVybiBjeDE4X2F2X2F1ZGlvKGN4LCBWSURJT0NfU19DVFJMLCBjdHJsKTsKKwkJcmV0dXJuIGN4MThfYXZfYXVkaW9fc19jdHJsKGN4LCBjdHJsKTsKIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGdldF92NGxjdHJsKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3N0YXRpYyBpbnQgY3gxOF9hdl9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CiAJCWN0cmwtPnZhbHVlID0gKHM4KWN4MThfYXZfcmVhZChjeCwgMHg0MTQpICsgMTI4OwpAQCAtNTkwLDMxICs3ODksNTcgQEAKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQlyZXR1cm4gY3gxOF9hdl9hdWRpbyhjeCwgVklESU9DX0dfQ1RSTCwgY3RybCk7CisJCXJldHVybiBjeDE4X2F2X2F1ZGlvX2dfY3RybChjeCwgY3RybCk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBpbnQgZ2V0X3Y0bGZtdChzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQorc3RhdGljIGludCBjeDE4X2F2X3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQogewotCXN3aXRjaCAoZm10LT50eXBlKSB7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRToKLQkJcmV0dXJuIGN4MThfYXZfdmJpKGN4LCBWSURJT0NfR19GTVQsIGZtdCk7CisJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gdG9fY3gxOF9hdl9zdGF0ZShzZCk7CisKKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAyNTUsIDEsIDEyOCk7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMTI3LCAxLCA2NCk7CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgLTEyOCwgMTI3LCAxLCAwKTsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlzd2l0Y2ggKHFjLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LAorCQkJNjU1MzUgLyAxMDAsIHN0YXRlLT5kZWZhdWx0X3ZvbHVtZSk7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDApOworCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CisJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsIDY1NTM1IC8gMTAwLCAzMjc2OCk7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCi0JcmV0dXJuIDA7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgc2V0X3Y0bGZtdChzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQorc3RhdGljIGludCBjeDE4X2F2X2dfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQogewotCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9ICZjeC0+YXZfc3RhdGU7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gY3gxOF9hdl92YmlfZ19mbXQoY3gsIGZtdCk7Cit9CisKK3N0YXRpYyBpbnQgY3gxOF9hdl9zX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSB0b19jeDE4X2F2X3N0YXRlKHNkKTsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwogCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeDsKIAlpbnQgSFNDLCBWU0MsIFZzcmMsIEhzcmMsIGZpbHRlciwgVmxpbmVzOwogCWludCBpc181MEh6ID0gIShzdGF0ZS0+c3RkICYgVjRMMl9TVERfNTI1XzYwKTsKQEAgLTYyOSwxMiArODU0LDI2IEBACiAJCUhzcmMgPSAoY3gxOF9hdl9yZWFkKGN4LCAweDQ3MikgJiAweDNmKSA8PCA0OwogCQlIc3JjIHw9IChjeDE4X2F2X3JlYWQoY3gsIDB4NDcxKSAmIDB4ZjApID4+IDQ7CiAKLQkJVmxpbmVzID0gcGl4LT5oZWlnaHQgKyAoaXNfNTBIeiA/IDQgOiA3KTsKKwkJLyoKKwkJICogVGhpcyBhZGp1c3RtZW50IHJlZmxlY3RzIHRoZSBleGNlc3Mgb2YgdmFjdGl2ZSwgc2V0IGluCisJCSAqIGN4MThfYXZfc3RkX3NldHVwKCksIGFib3ZlIHN0YW5kYXJkIHZhbHVlczoKKwkJICoKKwkJICogNDgwICsgMSBmb3IgNjAgSHogc3lzdGVtcworCQkgKiA1NzYgKyA0IGZvciA1MCBIeiBzeXN0ZW1zCisJCSAqLworCQlWbGluZXMgPSBwaXgtPmhlaWdodCArIChpc181MEh6ID8gNCA6IDEpOwogCisJCS8qCisJCSAqIEludmFsaWQgaGVpZ2h0IGFuZCB3aWR0aCBzY2FsaW5nIHJlcXVlc3RzIGFyZToKKwkJICogMS4gd2lkdGggbGVzcyB0aGFuIDEvMTYgb2YgdGhlIHNvdXJjZSB3aWR0aAorCQkgKiAyLiB3aWR0aCBncmVhdGVyIHRoYW4gdGhlIHNvdXJjZSB3aWR0aAorCQkgKiAzLiBoZWlnaHQgbGVzcyB0aGFuIDEvOCBvZiB0aGUgc291cmNlIGhlaWdodAorCQkgKiA0LiBoZWlnaHQgZ3JlYXRlciB0aGFuIHRoZSBzb3VyY2UgaGVpZ2h0CisJCSAqLwogCQlpZiAoKHBpeC0+d2lkdGggKiAxNiA8IEhzcmMpIHx8IChIc3JjIDwgcGl4LT53aWR0aCkgfHwKIAkJICAgIChWbGluZXMgKiA4IDwgVnNyYykgfHwgKFZzcmMgPCBWbGluZXMpKSB7Ci0JCQlDWDE4X0VSUigiJWR4JWQgaXMgbm90IGEgdmFsaWQgc2l6ZSFcbiIsCi0JCQkJICAgIHBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0KTsKKwkJCUNYMThfRVJSX0RFVihzZCwgIiVkeCVkIGlzIG5vdCBhIHZhbGlkIHNpemUhXG4iLAorCQkJCSAgICAgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQpOwogCQkJcmV0dXJuIC1FUkFOR0U7CiAJCX0KIApAQCAtNjUxLDggKzg5MCw5IEBACiAJCWVsc2UKIAkJCWZpbHRlciA9IDM7CiAKLQkJQ1gxOF9ERUJVR19JTkZPKCJkZWNvZGVyIHNldCBzaXplICVkeCVkIC0+IHNjYWxlICAldXgldVxuIiwKLQkJCSAgICBwaXgtPndpZHRoLCBwaXgtPmhlaWdodCwgSFNDLCBWU0MpOworCQlDWDE4X0RFQlVHX0lORk9fREVWKHNkLAorCQkJCSAgICAiZGVjb2RlciBzZXQgc2l6ZSAlZHglZCAtPiBzY2FsZSAgJXV4JXVcbiIsCisJCQkJICAgIHBpeC0+d2lkdGgsIHBpeC0+aGVpZ2h0LCBIU0MsIFZTQyk7CiAKIAkJLyogSFNDQUxFPUhTQyAqLwogCQljeDE4X2F2X3dyaXRlKGN4LCAweDQxOCwgSFNDICYgMHhmZik7CkBAIC02NjYsMjMxICs5MDYsMzIgQEAKIAkJYnJlYWs7CiAKIAljYXNlIFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFOgotCQlyZXR1cm4gY3gxOF9hdl92YmkoY3gsIFZJRElPQ19TX0ZNVCwgZm10KTsKKwkJcmV0dXJuIGN4MThfYXZfdmJpX3NfZm10KGN4LCBmbXQpOwogCiAJY2FzZSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOgotCQlyZXR1cm4gY3gxOF9hdl92YmkoY3gsIFZJRElPQ19TX0ZNVCwgZm10KTsKKwkJcmV0dXJuIGN4MThfYXZfdmJpX3NfZm10KGN4LCBmbXQpOwogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQotCiAJcmV0dXJuIDA7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLWludCBjeDE4X2F2X2NtZChzdHJ1Y3QgY3gxOCAqY3gsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgY3gxOF9hdl9zX3N0cmVhbShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgZW5hYmxlKQogewotCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9ICZjeC0+YXZfc3RhdGU7Ci0Jc3RydWN0IHY0bDJfdHVuZXIgKnZ0ID0gYXJnOwotCXN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlID0gYXJnOworCXN0cnVjdCBjeDE4ICpjeCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCi0JLyogaWdub3JlIHRoZXNlIGNvbW1hbmRzICovCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFRVTkVSX1NFVF9UWVBFX0FERFI6Ci0JCXJldHVybiAwOwotCX0KLQotCWlmICghc3RhdGUtPmlzX2luaXRpYWxpemVkKSB7Ci0JCUNYMThfREVCVUdfSU5GTygiY21kICUwOHggdHJpZ2dlcmVkIGZ3IGxvYWRcbiIsIGNtZCk7Ci0JCS8qIGluaXRpYWxpemUgb24gZmlyc3QgdXNlICovCi0JCXN0YXRlLT5pc19pbml0aWFsaXplZCA9IDE7Ci0JCWN4MThfYXZfaW5pdGlhbGl6ZShjeCk7Ci0JfQotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFZJRElPQ19JTlRfREVDT0RFX1ZCSV9MSU5FOgotCQlyZXR1cm4gY3gxOF9hdl92YmkoY3gsIGNtZCwgYXJnKTsKLQotCWNhc2UgVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVROgotCQlyZXR1cm4gY3gxOF9hdl9hdWRpbyhjeCwgY21kLCBhcmcpOwotCi0JY2FzZSBWSURJT0NfU1RSRUFNT046Ci0JCUNYMThfREVCVUdfSU5GTygiZW5hYmxlIG91dHB1dFxuIik7CisJQ1gxOF9ERUJVR19JTkZPX0RFVihzZCwgIiVzIG91dHB1dFxuIiwgZW5hYmxlID8gImVuYWJsZSIgOiAiZGlzYWJsZSIpOworCWlmIChlbmFibGUpIHsKIAkJY3gxOF9hdl93cml0ZShjeCwgMHgxMTUsIDB4OGMpOwogCQljeDE4X2F2X3dyaXRlKGN4LCAweDExNiwgMHgwNyk7Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfU1RSRUFNT0ZGOgotCQlDWDE4X0RFQlVHX0lORk8oImRpc2FibGUgb3V0cHV0XG4iKTsKKwl9IGVsc2UgewogCQljeDE4X2F2X3dyaXRlKGN4LCAweDExNSwgMHgwMCk7CiAJCWN4MThfYXZfd3JpdGUoY3gsIDB4MTE2LCAweDAwKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19MT0dfU1RBVFVTOgotCQlsb2dfdmlkZW9fc3RhdHVzKGN4KTsKLQkJbG9nX2F1ZGlvX3N0YXR1cyhjeCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfR19DVFJMOgotCQlyZXR1cm4gZ2V0X3Y0bGN0cmwoY3gsIChzdHJ1Y3QgdjRsMl9jb250cm9sICopYXJnKTsKLQotCWNhc2UgVklESU9DX1NfQ1RSTDoKLQkJcmV0dXJuIHNldF92NGxjdHJsKGN4LCAoc3RydWN0IHY0bDJfY29udHJvbCAqKWFyZyk7Ci0KLQljYXNlIFZJRElPQ19RVUVSWUNUUkw6Ci0JewotCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjID0gYXJnOwotCi0JCXN3aXRjaCAocWMtPmlkKSB7Ci0JCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLQkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgotCQljYXNlIFY0TDJfQ0lEX0hVRToKLQkJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWMpOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQotCQlzd2l0Y2ggKHFjLT5pZCkgewotCQljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKLQkJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsCi0JCQkJNjU1MzUgLyAxMDAsIHN0YXRlLT5kZWZhdWx0X3ZvbHVtZSk7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgotCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgotCQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxYyk7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KLQljYXNlIFZJRElPQ19HX1NURDoKLQkJKih2NGwyX3N0ZF9pZCAqKWFyZyA9IHN0YXRlLT5zdGQ7Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfU19TVEQ6Ci0JCWlmIChzdGF0ZS0+cmFkaW8gPT0gMCAmJiBzdGF0ZS0+c3RkID09ICoodjRsMl9zdGRfaWQgKilhcmcpCi0JCQlyZXR1cm4gMDsKLQkJc3RhdGUtPnJhZGlvID0gMDsKLQkJc3RhdGUtPnN0ZCA9ICoodjRsMl9zdGRfaWQgKilhcmc7Ci0JCXJldHVybiBzZXRfdjRsc3RkKGN4KTsKLQotCWNhc2UgQVVEQ19TRVRfUkFESU86Ci0JCXN0YXRlLT5yYWRpbyA9IDE7Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfSU5UX0dfVklERU9fUk9VVElORzoKLQkJcm91dGUtPmlucHV0ID0gc3RhdGUtPnZpZF9pbnB1dDsKLQkJcm91dGUtPm91dHB1dCA9IDA7Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfSU5UX1NfVklERU9fUk9VVElORzoKLQkJcmV0dXJuIHNldF9pbnB1dChjeCwgcm91dGUtPmlucHV0LCBzdGF0ZS0+YXVkX2lucHV0KTsKLQotCWNhc2UgVklESU9DX0lOVF9HX0FVRElPX1JPVVRJTkc6Ci0JCXJvdXRlLT5pbnB1dCA9IHN0YXRlLT5hdWRfaW5wdXQ7Ci0JCXJvdXRlLT5vdXRwdXQgPSAwOwotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkc6Ci0JCXJldHVybiBzZXRfaW5wdXQoY3gsIHN0YXRlLT52aWRfaW5wdXQsIHJvdXRlLT5pbnB1dCk7Ci0KLQljYXNlIFZJRElPQ19TX0ZSRVFVRU5DWToKLQkJaW5wdXRfY2hhbmdlKGN4KTsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX1RVTkVSOgotCXsKLQkJdTggdnByZXMgPSBjeDE4X2F2X3JlYWQoY3gsIDB4NDBlKSAmIDB4MjA7Ci0JCXU4IG1vZGU7Ci0JCWludCB2YWwgPSAwOwotCi0JCWlmIChzdGF0ZS0+cmFkaW8pCi0JCQlicmVhazsKLQotCQl2dC0+c2lnbmFsID0gdnByZXMgPyAweGZmZmYgOiAweDA7Ci0KLQkJdnQtPmNhcGFiaWxpdHkgfD0KLQkJICAgIFY0TDJfVFVORVJfQ0FQX1NURVJFTyB8IFY0TDJfVFVORVJfQ0FQX0xBTkcxIHwKLQkJICAgIFY0TDJfVFVORVJfQ0FQX0xBTkcyIHwgVjRMMl9UVU5FUl9DQVBfU0FQOwotCi0JCW1vZGUgPSBjeDE4X2F2X3JlYWQoY3gsIDB4ODA0KTsKLQotCQkvKiBnZXQgcnhzdWJjaGFucyBhbmQgYXVkbW9kZSAqLwotCQlpZiAoKG1vZGUgJiAweGYpID09IDEpCi0JCQl2YWwgfD0gVjRMMl9UVU5FUl9TVUJfU1RFUkVPOwotCQllbHNlCi0JCQl2YWwgfD0gVjRMMl9UVU5FUl9TVUJfTU9OTzsKLQotCQlpZiAobW9kZSA9PSAyIHx8IG1vZGUgPT0gNCkKLQkJCXZhbCA9IFY0TDJfVFVORVJfU1VCX0xBTkcxIHwgVjRMMl9UVU5FUl9TVUJfTEFORzI7Ci0KLQkJaWYgKG1vZGUgJiAweDEwKQotCQkJdmFsIHw9IFY0TDJfVFVORVJfU1VCX1NBUDsKLQotCQl2dC0+cnhzdWJjaGFucyA9IHZhbDsKLQkJdnQtPmF1ZG1vZGUgPSBzdGF0ZS0+YXVkbW9kZTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBWSURJT0NfU19UVU5FUjoKLQl7Ci0JCXU4IHY7Ci0KLQkJaWYgKHN0YXRlLT5yYWRpbykKLQkJCWJyZWFrOwotCi0JCXYgPSBjeDE4X2F2X3JlYWQoY3gsIDB4ODA5KTsKLQkJdiAmPSB+MHhmOwotCi0JCXN3aXRjaCAodnQtPmF1ZG1vZGUpIHsKLQkJY2FzZSBWNEwyX1RVTkVSX01PREVfTU9OTzoKLQkJCS8qIG1vbm8gICAgICAtPiBtb25vCi0JCQkgICBzdGVyZW8gICAgLT4gbW9ubwotCQkJICAgYmlsaW5ndWFsIC0+IGxhbmcxICovCi0JCQlicmVhazsKLQkJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgotCQljYXNlIFY0TDJfVFVORVJfTU9ERV9MQU5HMToKLQkJCS8qIG1vbm8gICAgICAtPiBtb25vCi0JCQkgICBzdGVyZW8gICAgLT4gc3RlcmVvCi0JCQkgICBiaWxpbmd1YWwgLT4gbGFuZzEgKi8KLQkJCXYgfD0gMHg0OwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyOgotCQkJLyogbW9ubyAgICAgIC0+IG1vbm8KLQkJCSAgIHN0ZXJlbyAgICAtPiBzdGVyZW8KLQkJCSAgIGJpbGluZ3VhbCAtPiBsYW5nMS9sYW5nMiAqLwotCQkJdiB8PSAweDc7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX1RVTkVSX01PREVfTEFORzI6Ci0JCQkvKiBtb25vICAgICAgLT4gbW9ubwotCQkJICAgc3RlcmVvICAgIC0+IHN0ZXJlbwotCQkJICAgYmlsaW5ndWFsIC0+IGxhbmcyICovCi0JCQl2IHw9IDB4MTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJY3gxOF9hdl93cml0ZV9leHBlY3QoY3gsIDB4ODA5LCB2LCB2LCAweGZmKTsKLQkJc3RhdGUtPmF1ZG1vZGUgPSB2dC0+YXVkbW9kZTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBWSURJT0NfR19GTVQ6Ci0JCXJldHVybiBnZXRfdjRsZm10KGN4LCAoc3RydWN0IHY0bDJfZm9ybWF0ICopYXJnKTsKLQotCWNhc2UgVklESU9DX1NfRk1UOgotCQlyZXR1cm4gc2V0X3Y0bGZtdChjeCwgKHN0cnVjdCB2NGwyX2Zvcm1hdCAqKWFyZyk7Ci0KLQljYXNlIFZJRElPQ19JTlRfUkVTRVQ6Ci0JCWN4MThfYXZfaW5pdGlhbGl6ZShjeCk7Ci0JCWJyZWFrOwotCi0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KIHN0YXRpYyB2b2lkIGxvZ192aWRlb19zdGF0dXMoc3RydWN0IGN4MTggKmN4KQogewogCXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBmbXRfc3Ryc1tdID0gewpAQCAtOTAzLDM2ICs5NDQsNDAgQEAKIAl9OwogCiAJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gJmN4LT5hdl9zdGF0ZTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gJnN0YXRlLT5zZDsKIAl1OCB2aWRmbXRfc2VsID0gY3gxOF9hdl9yZWFkKGN4LCAweDQwMCkgJiAweGY7CiAJdTggZ2VuX3N0YXQxID0gY3gxOF9hdl9yZWFkKGN4LCAweDQwZCk7CiAJdTggZ2VuX3N0YXQyID0gY3gxOF9hdl9yZWFkKGN4LCAweDQwZSk7CiAJaW50IHZpZF9pbnB1dCA9IHN0YXRlLT52aWRfaW5wdXQ7CiAKLQlDWDE4X0lORk8oIlZpZGVvIHNpZ25hbDogICAgICAgICAgICAgICVzcHJlc2VudFxuIiwKLQkJICAgIChnZW5fc3RhdDIgJiAweDIwKSA/ICIiIDogIm5vdCAiKTsKLQlDWDE4X0lORk8oIkRldGVjdGVkIGZvcm1hdDogICAgICAgICAgICVzXG4iLAotCQkgICAgZm10X3N0cnNbZ2VuX3N0YXQxICYgMHhmXSk7CisJQ1gxOF9JTkZPX0RFVihzZCwgIlZpZGVvIHNpZ25hbDogICAgICAgICAgICAgICVzcHJlc2VudFxuIiwKKwkJICAgICAgKGdlbl9zdGF0MiAmIDB4MjApID8gIiIgOiAibm90ICIpOworCUNYMThfSU5GT19ERVYoc2QsICJEZXRlY3RlZCBmb3JtYXQ6ICAgICAgICAgICAlc1xuIiwKKwkJICAgICAgZm10X3N0cnNbZ2VuX3N0YXQxICYgMHhmXSk7CiAKLQlDWDE4X0lORk8oIlNwZWNpZmllZCBzdGFuZGFyZDogICAgICAgICVzXG4iLAotCQkgICAgdmlkZm10X3NlbCA/IGZtdF9zdHJzW3ZpZGZtdF9zZWxdIDogImF1dG9tYXRpYyBkZXRlY3Rpb24iKTsKKwlDWDE4X0lORk9fREVWKHNkLCAiU3BlY2lmaWVkIHN0YW5kYXJkOiAgICAgICAgJXNcbiIsCisJCSAgICAgIHZpZGZtdF9zZWwgPyBmbXRfc3Ryc1t2aWRmbXRfc2VsXQorCQkJCSA6ICJhdXRvbWF0aWMgZGV0ZWN0aW9uIik7CiAKIAlpZiAodmlkX2lucHV0ID49IENYMThfQVZfQ09NUE9TSVRFMSAmJgogCSAgICB2aWRfaW5wdXQgPD0gQ1gxOF9BVl9DT01QT1NJVEU4KSB7Ci0JCUNYMThfSU5GTygiU3BlY2lmaWVkIHZpZGVvIGlucHV0OiAgICAgQ29tcG9zaXRlICVkXG4iLAotCQkJdmlkX2lucHV0IC0gQ1gxOF9BVl9DT01QT1NJVEUxICsgMSk7CisJCUNYMThfSU5GT19ERVYoc2QsICJTcGVjaWZpZWQgdmlkZW8gaW5wdXQ6ICAgICBDb21wb3NpdGUgJWRcbiIsCisJCQkgICAgICB2aWRfaW5wdXQgLSBDWDE4X0FWX0NPTVBPU0lURTEgKyAxKTsKIAl9IGVsc2UgewotCQlDWDE4X0lORk8oIlNwZWNpZmllZCB2aWRlbyBpbnB1dDogICAgIFMtVmlkZW8gKEx1bWEgSW4lZCwgQ2hyb21hIEluJWQpXG4iLAotCQkJKHZpZF9pbnB1dCAmIDB4ZjApID4+IDQsICh2aWRfaW5wdXQgJiAweGYwMCkgPj4gOCk7CisJCUNYMThfSU5GT19ERVYoc2QsICJTcGVjaWZpZWQgdmlkZW8gaW5wdXQ6ICAgICAiCisJCQkgICAgICAiUy1WaWRlbyAoTHVtYSBJbiVkLCBDaHJvbWEgSW4lZClcbiIsCisJCQkgICAgICAodmlkX2lucHV0ICYgMHhmMCkgPj4gNCwKKwkJCSAgICAgICh2aWRfaW5wdXQgJiAweGYwMCkgPj4gOCk7CiAJfQogCi0JQ1gxOF9JTkZPKCJTcGVjaWZpZWQgYXVkaW9jbG9jayBmcmVxOiAlZCBIelxuIiwgc3RhdGUtPmF1ZGNsa19mcmVxKTsKKwlDWDE4X0lORk9fREVWKHNkLCAiU3BlY2lmaWVkIGF1ZGlvY2xvY2sgZnJlcTogJWQgSHpcbiIsCisJCSAgICAgIHN0YXRlLT5hdWRjbGtfZnJlcSk7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KIHN0YXRpYyB2b2lkIGxvZ19hdWRpb19zdGF0dXMoc3RydWN0IGN4MTggKmN4KQogewogCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9ICZjeC0+YXZfc3RhdGU7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9ICZzdGF0ZS0+c2Q7CiAJdTggZG93bmxvYWRfY3RsID0gY3gxOF9hdl9yZWFkKGN4LCAweDgwMyk7CiAJdTggbW9kX2RldF9zdGF0MCA9IGN4MThfYXZfcmVhZChjeCwgMHg4MDQpOwogCXU4IG1vZF9kZXRfc3RhdDEgPSBjeDE4X2F2X3JlYWQoY3gsIDB4ODA1KTsKQEAgLTk1NSw3ICsxMDAwLDcgQEAKIAljYXNlIDB4ZmU6IHAgPSAiZm9yY2VkIG1vZGUiOyBicmVhazsKIAlkZWZhdWx0OiBwID0gIm5vdCBkZWZpbmVkIjsgYnJlYWs7CiAJfQotCUNYMThfSU5GTygiRGV0ZWN0ZWQgYXVkaW8gbW9kZTogICAgICAgJXNcbiIsIHApOworCUNYMThfSU5GT19ERVYoc2QsICJEZXRlY3RlZCBhdWRpbyBtb2RlOiAgICAgICAlc1xuIiwgcCk7CiAKIAlzd2l0Y2ggKG1vZF9kZXRfc3RhdDEpIHsKIAljYXNlIDB4MDA6IHAgPSAibm90IGRlZmluZWQiOyBicmVhazsKQEAgLTk4MCwxMSArMTAyNSwxMSBAQAogCWNhc2UgMHhmZjogcCA9ICJubyBkZXRlY3RlZCBhdWRpbyBzdGFuZGFyZCI7IGJyZWFrOwogCWRlZmF1bHQ6IHAgPSAibm90IGRlZmluZWQiOyBicmVhazsKIAl9Ci0JQ1gxOF9JTkZPKCJEZXRlY3RlZCBhdWRpbyBzdGFuZGFyZDogICAlc1xuIiwgcCk7Ci0JQ1gxOF9JTkZPKCJBdWRpbyBtdXRlZDogICAgICAgICAgICAgICAlc1xuIiwKLQkJICAgIChtdXRlX2N0bCAmIDB4MikgPyAieWVzIiA6ICJubyIpOwotCUNYMThfSU5GTygiQXVkaW8gbWljcm9jb250cm9sbGVyOiAgICAgJXNcbiIsCi0JCSAgICAoZG93bmxvYWRfY3RsICYgMHgxMCkgPyAicnVubmluZyIgOiAic3RvcHBlZCIpOworCUNYMThfSU5GT19ERVYoc2QsICJEZXRlY3RlZCBhdWRpbyBzdGFuZGFyZDogICAlc1xuIiwgcCk7CisJQ1gxOF9JTkZPX0RFVihzZCwgIkF1ZGlvIG11dGVkOiAgICAgICAgICAgICAgICVzXG4iLAorCQkgICAgICAobXV0ZV9jdGwgJiAweDIpID8gInllcyIgOiAibm8iKTsKKwlDWDE4X0lORk9fREVWKHNkLCAiQXVkaW8gbWljcm9jb250cm9sbGVyOiAgICAgJXNcbiIsCisJCSAgICAgIChkb3dubG9hZF9jdGwgJiAweDEwKSA/ICJydW5uaW5nIiA6ICJzdG9wcGVkIik7CiAKIAlzd2l0Y2ggKGF1ZGlvX2NvbmZpZyA+PiA0KSB7CiAJY2FzZSAweDAwOiBwID0gInVuZGVmaW5lZCI7IGJyZWFrOwpAQCAtMTAwNSw3ICsxMDUwLDcgQEAKIAljYXNlIDB4MGY6IHAgPSAiYXV0b21hdGljIGRldGVjdGlvbiI7IGJyZWFrOwogCWRlZmF1bHQ6IHAgPSAidW5kZWZpbmVkIjsgYnJlYWs7CiAJfQotCUNYMThfSU5GTygiQ29uZmlndXJlZCBhdWRpbyBzdGFuZGFyZDogJXNcbiIsIHApOworCUNYMThfSU5GT19ERVYoc2QsICJDb25maWd1cmVkIGF1ZGlvIHN0YW5kYXJkOiAlc1xuIiwgcCk7CiAKIAlpZiAoKGF1ZGlvX2NvbmZpZyA+PiA0KSA8IDB4RikgewogCQlzd2l0Y2ggKGF1ZGlvX2NvbmZpZyAmIDB4RikgewpAQCAtMTAxOSw3ICsxMDY0LDcgQEAKIAkJY2FzZSAweDA3OiBwID0gIkRVQUwzIChBQikiOyBicmVhazsKIAkJZGVmYXVsdDogcCA9ICJ1bmRlZmluZWQiOwogCQl9Ci0JCUNYMThfSU5GTygiQ29uZmlndXJlZCBhdWRpbyBtb2RlOiAgICAgJXNcbiIsIHApOworCQlDWDE4X0lORk9fREVWKHNkLCAiQ29uZmlndXJlZCBhdWRpbyBtb2RlOiAgICAgJXNcbiIsIHApOwogCX0gZWxzZSB7CiAJCXN3aXRjaCAoYXVkaW9fY29uZmlnICYgMHhGKSB7CiAJCWNhc2UgMHgwMDogcCA9ICJCRyI7IGJyZWFrOwpAQCAtMTAzNywxNCArMTA4MiwxNCBAQAogCQljYXNlIDB4MGY6IHAgPSAiYXV0b21hdGljIHN0YW5kYXJkIGFuZCBtb2RlIGRldGVjdGlvbiI7IGJyZWFrOwogCQlkZWZhdWx0OiBwID0gInVuZGVmaW5lZCI7IGJyZWFrOwogCQl9Ci0JCUNYMThfSU5GTygiQ29uZmlndXJlZCBhdWRpbyBzeXN0ZW06ICAgJXNcbiIsIHApOworCQlDWDE4X0lORk9fREVWKHNkLCAiQ29uZmlndXJlZCBhdWRpbyBzeXN0ZW06ICAgJXNcbiIsIHApOwogCX0KIAogCWlmIChhdWRfaW5wdXQpCi0JCUNYMThfSU5GTygiU3BlY2lmaWVkIGF1ZGlvIGlucHV0OiAgICAgVHVuZXIgKEluJWQpXG4iLAotCQkJCWF1ZF9pbnB1dCk7CisJCUNYMThfSU5GT19ERVYoc2QsICJTcGVjaWZpZWQgYXVkaW8gaW5wdXQ6ICAgICBUdW5lciAoSW4lZClcbiIsCisJCQkgICAgICBhdWRfaW5wdXQpOwogCWVsc2UKLQkJQ1gxOF9JTkZPKCJTcGVjaWZpZWQgYXVkaW8gaW5wdXQ6ICAgICBFeHRlcm5hbFxuIik7CisJCUNYMThfSU5GT19ERVYoc2QsICJTcGVjaWZpZWQgYXVkaW8gaW5wdXQ6ICAgICBFeHRlcm5hbFxuIik7CiAKIAlzd2l0Y2ggKHByZWZfbW9kZSAmIDB4ZikgewogCWNhc2UgMDogcCA9ICJtb25vL2xhbmd1YWdlIEEiOyBicmVhazsKQEAgLTEwNTcsMTQgKzExMDIsMTQgQEAKIAljYXNlIDc6IHAgPSAibGFuZ3VhZ2UgQUIiOyBicmVhazsKIAlkZWZhdWx0OiBwID0gInVuZGVmaW5lZCI7IGJyZWFrOwogCX0KLQlDWDE4X0lORk8oIlByZWZlcnJlZCBhdWRpbyBtb2RlOiAgICAgICVzXG4iLCBwKTsKKwlDWDE4X0lORk9fREVWKHNkLCAiUHJlZmVycmVkIGF1ZGlvIG1vZGU6ICAgICAgJXNcbiIsIHApOwogCiAJaWYgKChhdWRpb19jb25maWcgJiAweGYpID09IDB4ZikgewogCQlzd2l0Y2ggKChhZmMwID4+IDMpICYgMHgxKSB7CiAJCWNhc2UgMDogcCA9ICJzeXN0ZW0gREsiOyBicmVhazsKIAkJY2FzZSAxOiBwID0gInN5c3RlbSBMIjsgYnJlYWs7CiAJCX0KLQkJQ1gxOF9JTkZPKCJTZWxlY3RlZCA2NSBNSHogZm9ybWF0OiAgICAlc1xuIiwgcCk7CisJCUNYMThfSU5GT19ERVYoc2QsICJTZWxlY3RlZCA2NSBNSHogZm9ybWF0OiAgICAlc1xuIiwgcCk7CiAKIAkJc3dpdGNoIChhZmMwICYgMHg3KSB7CiAJCWNhc2UgMDogcCA9ICJDaHJvbWEiOyBicmVhazsKQEAgLTEwNzQsNiArMTExOSwxMzEgQEAKIAkJY2FzZSA0OiBwID0gImF1dG9kZXRlY3QiOyBicmVhazsKIAkJZGVmYXVsdDogcCA9ICJ1bmRlZmluZWQiOyBicmVhazsKIAkJfQotCQlDWDE4X0lORk8oIlNlbGVjdGVkIDQ1IE1IeiBmb3JtYXQ6ICAgICVzXG4iLCBwKTsKKwkJQ1gxOF9JTkZPX0RFVihzZCwgIlNlbGVjdGVkIDQ1IE1IeiBmb3JtYXQ6ICAgICVzXG4iLCBwKTsKIAl9CiB9CisKK3N0YXRpYyBpbnQgY3gxOF9hdl9sb2dfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJbG9nX3ZpZGVvX3N0YXR1cyhjeCk7CisJbG9nX2F1ZGlvX3N0YXR1cyhjeCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGN4MThfYXZfZGJnX21hdGNoKGNvbnN0IHN0cnVjdCB2NGwyX2RiZ19tYXRjaCAqbWF0Y2gpCit7CisJcmV0dXJuIG1hdGNoLT50eXBlID09IFY0TDJfQ0hJUF9NQVRDSF9IT1NUICYmIG1hdGNoLT5hZGRyID09IDE7Cit9CisKK3N0YXRpYyBpbnQgY3gxOF9hdl9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCQlzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSB0b19jeDE4X2F2X3N0YXRlKHNkKTsKKworCWlmIChjeDE4X2F2X2RiZ19tYXRjaCgmY2hpcC0+bWF0Y2gpKSB7CisJCWNoaXAtPmlkZW50ID0gc3RhdGUtPmlkOworCQljaGlwLT5yZXZpc2lvbiA9IHN0YXRlLT5yZXY7CisJfQorCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworc3RhdGljIGludCBjeDE4X2F2X2dfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBjeDE4ICpjeCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJaWYgKCFjeDE4X2F2X2RiZ19tYXRjaCgmcmVnLT5tYXRjaCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmICgocmVnLT5yZWcgJiAweDMpICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwlyZWctPnNpemUgPSA0OworCXJlZy0+dmFsID0gY3gxOF9hdl9yZWFkNChjeCwgcmVnLT5yZWcgJiAweDAwMDAwZmZjKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBjeDE4X2F2X3NfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBjeDE4ICpjeCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJaWYgKCFjeDE4X2F2X2RiZ19tYXRjaCgmcmVnLT5tYXRjaCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmICgocmVnLT5yZWcgJiAweDMpICE9IDApCisJCXJldHVybiAtRUlOVkFMOworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwljeDE4X2F2X3dyaXRlNChjeCwgcmVnLT5yZWcgJiAweDAwMDAwZmZjLCByZWctPnZhbCk7CisJcmV0dXJuIDA7Cit9CisjZW5kaWYKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBjeDE4X2F2X2dlbmVyYWxfb3BzID0geworCS5nX2NoaXBfaWRlbnQgPSBjeDE4X2F2X2dfY2hpcF9pZGVudCwKKwkubG9nX3N0YXR1cyA9IGN4MThfYXZfbG9nX3N0YXR1cywKKwkuaW5pdCA9IGN4MThfYXZfaW5pdCwKKwkucmVzZXQgPSBjeDE4X2F2X3Jlc2V0LAorCS5xdWVyeWN0cmwgPSBjeDE4X2F2X3F1ZXJ5Y3RybCwKKwkuZ19jdHJsID0gY3gxOF9hdl9nX2N0cmwsCisJLnNfY3RybCA9IGN4MThfYXZfc19jdHJsLAorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwkuZ19yZWdpc3RlciA9IGN4MThfYXZfZ19yZWdpc3RlciwKKwkuc19yZWdpc3RlciA9IGN4MThfYXZfc19yZWdpc3RlciwKKyNlbmRpZgorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgY3gxOF9hdl90dW5lcl9vcHMgPSB7CisJLnNfcmFkaW8gPSBjeDE4X2F2X3NfcmFkaW8sCisJLnNfZnJlcXVlbmN5ID0gY3gxOF9hdl9zX2ZyZXF1ZW5jeSwKKwkuZ190dW5lciA9IGN4MThfYXZfZ190dW5lciwKKwkuc190dW5lciA9IGN4MThfYXZfc190dW5lciwKKwkuc19zdGQgPSBjeDE4X2F2X3Nfc3RkLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9hdWRpb19vcHMgY3gxOF9hdl9hdWRpb19vcHMgPSB7CisJLnNfY2xvY2tfZnJlcSA9IGN4MThfYXZfc19jbG9ja19mcmVxLAorCS5zX3JvdXRpbmcgPSBjeDE4X2F2X3NfYXVkaW9fcm91dGluZywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIGN4MThfYXZfdmlkZW9fb3BzID0geworCS5zX3JvdXRpbmcgPSBjeDE4X2F2X3NfdmlkZW9fcm91dGluZywKKwkuZGVjb2RlX3ZiaV9saW5lID0gY3gxOF9hdl9kZWNvZGVfdmJpX2xpbmUsCisJLnNfc3RyZWFtID0gY3gxOF9hdl9zX3N0cmVhbSwKKwkuZ19mbXQgPSBjeDE4X2F2X2dfZm10LAorCS5zX2ZtdCA9IGN4MThfYXZfc19mbXQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBjeDE4X2F2X29wcyA9IHsKKwkuY29yZSA9ICZjeDE4X2F2X2dlbmVyYWxfb3BzLAorCS50dW5lciA9ICZjeDE4X2F2X3R1bmVyX29wcywKKwkuYXVkaW8gPSAmY3gxOF9hdl9hdWRpb19vcHMsCisJLnZpZGVvID0gJmN4MThfYXZfdmlkZW9fb3BzLAorfTsKKworaW50IGN4MThfYXZfcHJvYmUoc3RydWN0IGN4MTggKmN4KQoreworCXN0cnVjdCBjeDE4X2F2X3N0YXRlICpzdGF0ZSA9ICZjeC0+YXZfc3RhdGU7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKworCXN0YXRlLT5yZXYgPSBjeDE4X2F2X3JlYWQ0KGN4LCBDWEFERUNfQ0hJUF9DVFJMKSAmIDB4ZmZmZjsKKwlzdGF0ZS0+aWQgPSAoKHN0YXRlLT5yZXYgPj4gNCkgPT0gQ1hBREVDX0NISVBfVFlQRV9NQUtPKQorCQkgICAgPyBWNEwyX0lERU5UX0NYMjM0MThfODQzIDogVjRMMl9JREVOVF9VTktOT1dOOworCisJc3RhdGUtPnZpZF9pbnB1dCA9IENYMThfQVZfQ09NUE9TSVRFNzsKKwlzdGF0ZS0+YXVkX2lucHV0ID0gQ1gxOF9BVl9BVURJTzg7CisJc3RhdGUtPmF1ZGNsa19mcmVxID0gNDgwMDA7CisJc3RhdGUtPmF1ZG1vZGUgPSBWNEwyX1RVTkVSX01PREVfTEFORzE7CisJc3RhdGUtPnNsaWNlcl9saW5lX2RlbGF5ID0gMDsKKwlzdGF0ZS0+c2xpY2VyX2xpbmVfb2Zmc2V0ID0gKDEwICsgc3RhdGUtPnNsaWNlcl9saW5lX2RlbGF5IC0gMik7CisKKwlzZCA9ICZzdGF0ZS0+c2Q7CisJdjRsMl9zdWJkZXZfaW5pdChzZCwgJmN4MThfYXZfb3BzKTsKKwl2NGwyX3NldF9zdWJkZXZkYXRhKHNkLCBjeCk7CisJc25wcmludGYoc2QtPm5hbWUsIHNpemVvZihzZC0+bmFtZSksCisJCSAiJXMgJTAzeCIsIGN4LT52NGwyX2Rldi5uYW1lLCAoc3RhdGUtPnJldiA+PiA0KSk7CisJc2QtPmdycF9pZCA9IENYMThfSFdfNDE4X0FWOworCXJldHVybiB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYoJmN4LT52NGwyX2Rldiwgc2QpOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtY29yZS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtY29yZS5oCmluZGV4IGNmNjhhNjAuLmM0NTgxMjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWNvcmUuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1jb3JlLmgKQEAgLTI1LDYgKzI1LDggQEAKICNpZm5kZWYgX0NYMThfQVZfQ09SRV9IXwogI2RlZmluZSBfQ1gxOF9BVl9DT1JFX0hfCiAKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorCiBzdHJ1Y3QgY3gxODsKIAogZW51bSBjeDE4X2F2X3ZpZGVvX2lucHV0IHsKQEAgLTczLDE3ICs3NSw0MCBAQAogfTsKIAogc3RydWN0IGN4MThfYXZfc3RhdGUgeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAlpbnQgcmFkaW87CiAJdjRsMl9zdGRfaWQgc3RkOwogCWVudW0gY3gxOF9hdl92aWRlb19pbnB1dCB2aWRfaW5wdXQ7CiAJZW51bSBjeDE4X2F2X2F1ZGlvX2lucHV0IGF1ZF9pbnB1dDsKIAl1MzIgYXVkY2xrX2ZyZXE7CiAJaW50IGF1ZG1vZGU7Ci0JaW50IHZiaV9saW5lX29mZnNldDsKIAlpbnQgZGVmYXVsdF92b2x1bWU7CiAJdTMyIGlkOwogCXUzMiByZXY7CiAJaW50IGlzX2luaXRpYWxpemVkOworCisJLyoKKwkgKiBUaGUgVkJJIHNsaWNlciBzdGFydHMgb3BlcmF0aW5nIGFuZCBjb3VudGluZyBsaW5lcywgYmVnaW5pbmcgYXQKKwkgKiBzbGljZXIgbGluZSBjb3VudCBvZiAxLCBhdCBEIGxpbmVzIGFmdGVyIHRoZSBkZWFzc2VydGlvbiBvZiBWUkVTRVQuCisJICogVGhpcyBzdGFyaW5nIGZpZWxkIGxpbmUsIFMsIGlzIDYgKCYgMzE5KSBvciAxMCAoJiAyNzMpIGZvciA2MjUgb3IgNTI1CisJICogbGluZSBzeXN0ZW1zIHJlc3BlY3RpdmVseS4gIFNsaWNlZCBhbmNpbGxhcnkgZGF0YSBjYXB0dXJlZCBvbiBWQkkKKwkgKiBzbGljZXIgbGluZSBNIGlzIGluc2VydGVkIGFmdGVyIHRoZSBWQkkgc2xpY2VyIGlzIGRvbmUgd2l0aCBsaW5lIE0sCisJICogd2hlbiBWQkkgc2xpY2VyIGxpbmUgY291bnQgaXMgTiA9IE0rMS4gIFRodXMgd2hlbiB0aGUgVkJJIHNsaWNlcgorCSAqIHJlcG9ydHMgYSBWQkkgc2xpY2VyIGxpbmUgbnVtYmVyIHdpdGggYW5jaWxsYXJ5IGRhdGEsIHRoZSBJRElEMCBieXRlCisJICogaW5kaWNhdGVzIFZCSSBzbGljZXIgbGluZSBOLiAgVGhlIGFjdHVhbCBmaWVsZCBsaW5lIHRoYXQgdGhlIGNhcHR1cmVkCisJICogZGF0YSBjb21lcyBmcm9tIGlzCisJICoKKwkgKiBMID0gTSsoUytELTEpID0gTi0xKyhTK0QtMSkgPSBOICsgKFMrRC0yKS4KKwkgKgorCSAqIEwgaXMgdGhlIGxpbmUgaW4gdGhlIGZpZWxkLCBub3QgZnJhbWUsIGZyb20gd2hpY2ggdGhlIFZCSSBkYXRhIGNhbWUuCisJICogTiBpcyB0aGUgbGluZSByZXBvcnRlZCBieSB0aGUgc2xpY2VyIGluIHRoZSBhbmNpbGxhcnkgZGF0YS4KKwkgKiBEIGlzIHRoZSBzbGljZXJfbGluZV9kZWxheSB2YWx1ZSBwcm9ncmFtbWVkIGludG8gcmVnaXN0ZXIgMHg0N2YuCisJICogUyBpcyA2IGZvciA2MjUgbGluZSBzeXN0ZW1zIG9yIDEwIGZvciA1MjUgbGluZSBzeXN0ZW1zCisJICogKFMrRC0yKSBpcyB0aGUgc2xpY2VyX2xpbmVfb2Zmc2V0IHVzZWQgdG8gY29udmVydCBzbGljZXIgcmVwb3J0ZWQKKwkgKiBsaW5lIGNvdW50cyB0byBhY3R1YWwgZmllbGQgbGluZXMuCisJICovCisJaW50IHNsaWNlcl9saW5lX2RlbGF5OworCWludCBzbGljZXJfbGluZV9vZmZzZXQ7CiB9OwogCiAKQEAgLTI5OCw2ICszMjMsMTYgQEAKICNkZWZpbmUgQ1hBREVDX1NFTEVDVF9BVURJT19TVEFOREFSRF9GTSAgICAweEY5ICAvKiBGTSByYWRpbyAqLwogI2RlZmluZSBDWEFERUNfU0VMRUNUX0FVRElPX1NUQU5EQVJEX0FVVE8gIDB4RkYgIC8qIEF1dG8gZGV0ZWN0ICovCiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGN4MThfYXZfc3RhdGUgKnRvX2N4MThfYXZfc3RhdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSwgc2QpOworfQorCitlbnVtIGN4MThfYXZfc3ViZGV2X2luaXRfYXJnIHsKKwlDWDE4X0FWX0lOSVRfTk9STUFMID0gMCwKKwlDWDE4X0FWX0lOSVRfUExMUyA9IDEsCit9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogY3gxOF9hdi1jb3JlLmMgCQkJCQkJCSAgICovCiBpbnQgY3gxOF9hdl93cml0ZShzdHJ1Y3QgY3gxOCAqY3gsIHUxNiBhZGRyLCB1OCB2YWx1ZSk7CkBAIC0zMTAsMjAgKzM0NSwyNiBAQAogdTMyIGN4MThfYXZfcmVhZDQoc3RydWN0IGN4MTggKmN4LCB1MTYgYWRkcik7CiBpbnQgY3gxOF9hdl9hbmRfb3Ioc3RydWN0IGN4MTggKmN4LCB1MTYgYWRkciwgdW5zaWduZWQgbWFzaywgdTggdmFsdWUpOwogaW50IGN4MThfYXZfYW5kX29yNChzdHJ1Y3QgY3gxOCAqY3gsIHUxNiBhZGRyLCB1MzIgbWFzaywgdTMyIHZhbHVlKTsKLWludCBjeDE4X2F2X2NtZChzdHJ1Y3QgY3gxOCAqY3gsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CiB2b2lkIGN4MThfYXZfc3RkX3NldHVwKHN0cnVjdCBjeDE4ICpjeCk7CiAKK2ludCBjeDE4X2F2X3Byb2JlKHN0cnVjdCBjeDE4ICpjeCk7CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBjeDE4X2F2LWZpcm13YXJlLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwogaW50IGN4MThfYXZfbG9hZGZ3KHN0cnVjdCBjeDE4ICpjeCk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBjeDE4X2F2LWF1ZGlvLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotaW50IGN4MThfYXZfYXVkaW8oc3RydWN0IGN4MTggKmN4LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOworaW50IGN4MThfYXZfYXVkaW9fZ19jdHJsKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCk7CitpbnQgY3gxOF9hdl9hdWRpb19zX2N0cmwoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKTsKK2ludCBjeDE4X2F2X3NfY2xvY2tfZnJlcShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgZnJlcSk7CiB2b2lkIGN4MThfYXZfYXVkaW9fc2V0X3BhdGgoc3RydWN0IGN4MTggKmN4KTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIGN4MThfYXYtdmJpLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCi1pbnQgY3gxOF9hdl92Ymkoc3RydWN0IGN4MTggKmN4LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOworaW50IGN4MThfYXZfZGVjb2RlX3ZiaV9saW5lKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkgICBzdHJ1Y3QgdjRsMl9kZWNvZGVfdmJpX2xpbmUgKnZiaSk7CitpbnQgY3gxOF9hdl92YmlfZ19mbXQoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCk7CitpbnQgY3gxOF9hdl92Ymlfc19mbXQoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtZmlybXdhcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LWZpcm13YXJlLmMKaW5kZXggYzY0ZmQwYS4uNDlhNTVjYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtYXYtZmlybXdhcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi1maXJtd2FyZS5jCkBAIC0yOSw2ICsyOSw3IEBACiAKIGludCBjeDE4X2F2X2xvYWRmdyhzdHJ1Y3QgY3gxOCAqY3gpCiB7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9ICZjeC0+YXZfc3RhdGUuc2Q7CiAJY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyA9IE5VTEw7CiAJdTMyIHNpemU7CiAJdTMyIHY7CkBAIC0zNiw4ICszNyw4IEBACiAJaW50IGk7CiAJaW50IHJldHJpZXMxID0gMDsKIAotCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmdywgRldGSUxFLCAmY3gtPmRldi0+ZGV2KSAhPSAwKSB7Ci0JCUNYMThfRVJSKCJ1bmFibGUgdG8gb3BlbiBmaXJtd2FyZSAlc1xuIiwgRldGSUxFKTsKKwlpZiAocmVxdWVzdF9maXJtd2FyZSgmZncsIEZXRklMRSwgJmN4LT5wY2lfZGV2LT5kZXYpICE9IDApIHsKKwkJQ1gxOF9FUlJfREVWKHNkLCAidW5hYmxlIHRvIG9wZW4gZmlybXdhcmUgJXNcbiIsIEZXRklMRSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtODgsNyArODksNyBAQAogCQlyZXRyaWVzMSsrOwogCX0KIAlpZiAocmV0cmllczEgPj0gNSkgewotCQlDWDE4X0VSUigidW5hYmxlIHRvIGxvYWQgZmlybXdhcmUgJXNcbiIsIEZXRklMRSk7CisJCUNYMThfRVJSX0RFVihzZCwgInVuYWJsZSB0byBsb2FkIGZpcm13YXJlICVzXG4iLCBGV0ZJTEUpOwogCQlyZWxlYXNlX2Zpcm13YXJlKGZ3KTsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtMTE1LDkgKzExNiw5IEBACiAJICAgYXJlIGdlbmVyYXRlZCkgKi8KIAljeDE4X2F2X3dyaXRlNChjeCwgQ1hBREVDX0kyU19PVVRfQ1RMLCAweDAwMDAwMUEwKTsKIAotCS8qIHNldCBhbHQgSTJzIG1hc3RlciBjbG9jayB0byAvMTYgYW5kIGVuYWJsZSBhbHQgZGl2aWRlciBpMnMKKwkvKiBzZXQgYWx0IEkycyBtYXN0ZXIgY2xvY2sgdG8gLzB4MTYgYW5kIGVuYWJsZSBhbHQgZGl2aWRlciBpMnMKIAkgICBwYXNzdGhyb3VnaCAqLwotCWN4MThfYXZfd3JpdGU0KGN4LCBDWEFERUNfUElOX0NGRzMsIDB4NTAwMEI2ODcpOworCWN4MThfYXZfd3JpdGU0KGN4LCBDWEFERUNfUElOX0NGRzMsIDB4NTYwMEI2ODcpOwogCiAJY3gxOF9hdl93cml0ZTRfZXhwZWN0KGN4LCBDWEFERUNfU1REX0RFVF9DVEwsIDB4MDAwMDAwRjYsIDB4MDAwMDAwRjYsCiAJCQkJCQkJCSAgMHgzRjAwRkZGRik7CkBAIC0xMzEsNyArMTMyLDggQEAKIAl2ID0gY3gxOF9yZWFkX3JlZyhjeCwgQ1gxOF9BVURJT19FTkFCTEUpOwogCS8qIElmIGJpdCAxMSBpcyAxLCBjbGVhciBiaXQgMTAgKi8KIAlpZiAodiAmIDB4ODAwKQotCQljeDE4X3dyaXRlX3JlZyhjeCwgdiAmIDB4RkZGRkZCRkYsIENYMThfQVVESU9fRU5BQkxFKTsKKwkJY3gxOF93cml0ZV9yZWdfZXhwZWN0KGN4LCB2ICYgMHhGRkZGRkJGRiwgQ1gxOF9BVURJT19FTkFCTEUsCisJCQkJICAgICAgMCwgMHg0MDApOwogCiAJLyogRW5hYmxlIFdXIGF1dG8gYXVkaW8gc3RhbmRhcmQgZGV0ZWN0aW9uICovCiAJdiA9IGN4MThfYXZfcmVhZDQoY3gsIENYQURFQ19TVERfREVUX0NUTCk7CkBAIC0xNDIsNiArMTQ0LDYgQEAKIAogCXJlbGVhc2VfZmlybXdhcmUoZncpOwogCi0JQ1gxOF9JTkZPKCJsb2FkZWQgJXMgZmlybXdhcmUgKCVkIGJ5dGVzKVxuIiwgRldGSUxFLCBzaXplKTsKKwlDWDE4X0lORk9fREVWKHNkLCAibG9hZGVkICVzIGZpcm13YXJlICglZCBieXRlcylcbiIsIEZXRklMRSwgc2l6ZSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1hdi12YmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LXZiaS5jCmluZGV4IDE1MjdlYTQuLjIzYjMxNjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LXZiaS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWF2LXZiaS5jCkBAIC0yNCw2ICsyNCw1MiBAQAogCiAjaW5jbHVkZSAiY3gxOC1kcml2ZXIuaCIKIAorLyoKKyAqIEZvciBzbGljZWQgVkJJIG91dHB1dCwgd2Ugc2V0IHVwIHRvIHVzZSBWSVAtMS4xLCA4LWJpdCBtb2RlLAorICogTk4gY291bnRzIDEgYnl0ZSBEd29yZHMsIGFuIElESUQgd2l0aCB0aGUgVkJJIGxpbmUgIyBpbiBpdC4KKyAqIFRodXMsIGFjY29yZGluZyB0byB0aGUgVklQLTIgU3BlYywgb3VyIFZCSSBhbmNpbGxhcnkgZGF0YSBsaW5lcworICogKHNob3VsZCEpIGxvb2sgbGlrZToKKyAqCTQgYnl0ZSBFQVYgY29kZTogICAgICAgICAgMHhmZiAweDAwIDB4MDAgMHhSUAorICoJdW5rbm93biBudW1iZXIgb2YgcG9zc2libGUgaWRsZSBieXRlcworICoJMyBieXRlIEFuYyBkYXRhIHByZWFtYmxlOiAweDAwIDB4ZmYgMHhmZgorICoJMSBieXRlIGRhdGEgaWRlbnRpZmllcjogICBuZTAxMGlpaSAocGFyaXR5IGJpdHMsIDAxMCwgRElEIGJpdHMpCisgKgkxIGJ5dGUgc2Vjb25kYXJ5IGRhdGEgaWQ6IG5lc3Nzc3NzIChwYXJpdHkgYml0cywgU0RJRCBiaXRzKQorICoJMSBieXRlIGRhdGEgd29yZCBjb3VudDogICBuZWNjY2NjYyAocGFyaXR5IGJpdHMsIE5OIER3b3JkIGNvdW50KQorICoJMiBieXRlIEludGVybmFsIERJRDoJICBWQkktbGluZS0jIDB4ODAKKyAqCU5OIGRhdGEgYnl0ZXMKKyAqCTEgYnl0ZSBjaGVja3N1bQorICoJRmlsbCBieXRlcyBuZWVkZWQgdG8gZmlsIG91dCB0byA0Kk5OIGJ5dGVzIG9mIHBheWxvYWQKKyAqCisgKiBUaGUgUlAgY29kZXMgZm9yIEVBVnMgd2hlbiBpbiBWSVAtMS4xIG1vZGUsIG5vdCBpbiByYXcgbW9kZSwgJgorICogaW4gdGhlIHZlcnRpY2FsIGJsYW5raW5nIGludGVydmFsIGFyZToKKyAqCTB4YjAgKFRhc2sgICAgICAgICAwIFZlcnRpY2FsQmxhbmsgSG9yaXpvbnRhbEJsYW5rIDAgMCAwIDApCisgKgkweGYwIChUYXNrIEV2ZW5GaWVsZCBWZXJ0aWNhbEJsYW5rIEhvcml6b250YWxCbGFuayAwIDAgMCAwKQorICoKKyAqIFNpbmNlIHRoZSBWIGJpdCBpcyBvbmx5IGFsbG93ZWQgdG8gdG9nZ2xlIGluIHRoZSBFQVYgUlAgY29kZSwganVzdAorICogYmVmb3JlIHRoZSBmaXJzdCBhY3RpdmUgcmVnaW9uIGxpbmUgYW5kIGZvciBhY3RpdmUgbGluZXMsIHRoZXkgYXJlOgorICoJMHg5MCAoVGFzayAgICAgICAgIDAgMCBIb3Jpem9udGFsQmxhbmsgMCAwIDAgMCkKKyAqCTB4ZDAgKFRhc2sgRXZlbkZpZWxkIDAgSG9yaXpvbnRhbEJsYW5rIDAgMCAwIDApCisgKgorICogVGhlIHVzZXIgYXBwbGljYXRpb24gRElEIGJ5dGVzIHdlIGNhcmUgYWJvdXQgYXJlOgorICoJMHg5MSAoMSAwIDAxMCAgICAgICAgMCAhQWN0aXZlTGluZSBBbmNEYXRhUHJlc2VudCkKKyAqCTB4NTUgKDAgMSAwMTAgMm5kRmllbGQgIUFjdGl2ZUxpbmUgQW5jRGF0YVByZXNlbnQpCisgKgorICovCitzdGF0aWMgY29uc3QgdTggc2xpY2VkX3ZiaV9kaWRbMl0gPSB7IDB4OTEsIDB4NTUgfTsKKworc3RydWN0IHZiaV9hbmNfZGF0YSB7CisJLyogdTggZWF2WzRdOyAqLworCS8qIHU4IGlkbGVbXTsgVmFyaWFibGUgbnVtYmVyIG9mIGlkbGUgYnl0ZXMgKi8KKwl1OCBwcmVhbWJsZVszXTsKKwl1OCBkaWQ7CisJdTggc2RpZDsKKwl1OCBkYXRhX2NvdW50OworCXU4IGlkaWRbMl07CisJdTggcGF5bG9hZFsxXTsgLyogZGF0YV9jb3VudCBvZiBwYXlsb2FkICovCisJLyogdTggY2hlY2tzdW07ICovCisJLyogdTggZmlsbFtdOyBWYXJpYWJsZSBudW1iZXIgb2YgZmlsbCBieXRlcyAqLworfTsKKwogc3RhdGljIGludCBvZGRfcGFyaXR5KHU4IGMpCiB7CiAJYyBePSAoYyA+PiA0KTsKQEAgLTgzLDE4OCArMTI5LDE4OSBAQAogCXJldHVybiBlcnIgJiAweGYwOwogfQogCi1pbnQgY3gxOF9hdl92Ymkoc3RydWN0IGN4MTggKmN4LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitpbnQgY3gxOF9hdl92YmlfZ19mbXQoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKIHsKIAlzdHJ1Y3QgY3gxOF9hdl9zdGF0ZSAqc3RhdGUgPSAmY3gtPmF2X3N0YXRlOwotCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10OwogCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICpzdmJpOworCXN0YXRpYyBjb25zdCB1MTYgbGNyMnZiaVtdID0geworCQkwLCBWNEwyX1NMSUNFRF9URUxFVEVYVF9CLCAwLAkvKiAxICovCisJCTAsIFY0TDJfU0xJQ0VEX1dTU182MjUsIDAsCS8qIDQgKi8KKwkJVjRMMl9TTElDRURfQ0FQVElPTl81MjUsCS8qIDYgKi8KKwkJMCwgMCwgVjRMMl9TTElDRURfVlBTLCAwLCAwLAkvKiA5ICovCisJCTAsIDAsIDAsIDAKKwl9OworCWludCBpc19wYWwgPSAhKHN0YXRlLT5zdGQgJiBWNEwyX1NURF81MjVfNjApOworCWludCBpOwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFZJRElPQ19HX0ZNVDoKLQl7Ci0JCXN0YXRpYyB1MTYgbGNyMnZiaVtdID0gewotCQkJMCwgVjRMMl9TTElDRURfVEVMRVRFWFRfQiwgMCwJLyogMSAqLwotCQkJMCwgVjRMMl9TTElDRURfV1NTXzYyNSwgMCwJLyogNCAqLwotCQkJVjRMMl9TTElDRURfQ0FQVElPTl81MjUsCS8qIDYgKi8KLQkJCTAsIDAsIFY0TDJfU0xJQ0VEX1ZQUywgMCwgMCwJLyogOSAqLwotCQkJMCwgMCwgMCwgMAotCQl9OwotCQlpbnQgaXNfcGFsID0gIShzdGF0ZS0+c3RkICYgVjRMMl9TVERfNTI1XzYwKTsKLQkJaW50IGk7CisJaWYgKGZtdC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJc3ZiaSA9ICZmbXQtPmZtdC5zbGljZWQ7CisJbWVtc2V0KHN2YmksIDAsIHNpemVvZigqc3ZiaSkpOworCS8qIHdlJ3JlIGRvbmUgaWYgcmF3IFZCSSBpcyBhY3RpdmUgKi8KKwlpZiAoKGN4MThfYXZfcmVhZChjeCwgMHg0MDQpICYgMHgxMCkgPT0gMCkKKwkJcmV0dXJuIDA7CiAKLQkJZm10ID0gYXJnOwotCQlpZiAoZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCXN2YmkgPSAmZm10LT5mbXQuc2xpY2VkOwotCQltZW1zZXQoc3ZiaSwgMCwgc2l6ZW9mKCpzdmJpKSk7Ci0JCS8qIHdlJ3JlIGRvbmUgaWYgcmF3IFZCSSBpcyBhY3RpdmUgKi8KLQkJaWYgKChjeDE4X2F2X3JlYWQoY3gsIDB4NDA0KSAmIDB4MTApID09IDApCi0JCQlicmVhazsKKwlpZiAoaXNfcGFsKSB7CisJCWZvciAoaSA9IDc7IGkgPD0gMjM7IGkrKykgeworCQkJdTggdiA9IGN4MThfYXZfcmVhZChjeCwgMHg0MjQgKyBpIC0gNyk7CiAKLQkJaWYgKGlzX3BhbCkgewotCQkJZm9yIChpID0gNzsgaSA8PSAyMzsgaSsrKSB7Ci0JCQkJdTggdiA9IGN4MThfYXZfcmVhZChjeCwgMHg0MjQgKyBpIC0gNyk7Ci0KLQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldID0gbGNyMnZiaVt2ID4+IDRdOwotCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMV1baV0gPSBsY3IydmJpW3YgJiAweGZdOwotCQkJCXN2YmktPnNlcnZpY2Vfc2V0IHw9IHN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gfAotCQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldOwotCQkJfQotCQl9IGVsc2UgewotCQkJZm9yIChpID0gMTA7IGkgPD0gMjE7IGkrKykgewotCQkJCXU4IHYgPSBjeDE4X2F2X3JlYWQoY3gsIDB4NDI0ICsgaSAtIDEwKTsKLQotCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPSBsY3IydmJpW3YgPj4gNF07Ci0JCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IGxjcjJ2YmlbdiAmIDB4Zl07Ci0JCQkJc3ZiaS0+c2VydmljZV9zZXQgfD0gc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSB8Ci0JCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMV1baV07Ci0JCQl9CisJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldID0gbGNyMnZiaVt2ID4+IDRdOworCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IGxjcjJ2YmlbdiAmIDB4Zl07CisJCQlzdmJpLT5zZXJ2aWNlX3NldCB8PSBzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldIHwKKwkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldOwogCQl9Ci0JCWJyZWFrOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDEwOyBpIDw9IDIxOyBpKyspIHsKKwkJCXU4IHYgPSBjeDE4X2F2X3JlYWQoY3gsIDB4NDI0ICsgaSAtIDEwKTsKKworCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9IGxjcjJ2YmlbdiA+PiA0XTsKKwkJCXN2YmktPnNlcnZpY2VfbGluZXNbMV1baV0gPSBsY3IydmJpW3YgJiAweGZdOworCQkJc3ZiaS0+c2VydmljZV9zZXQgfD0gc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSB8CisJCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXTsKKwkJfQogCX0KKwlyZXR1cm4gMDsKK30KIAotCWNhc2UgVklESU9DX1NfRk1UOgotCXsKLQkJaW50IGlzX3BhbCA9ICEoc3RhdGUtPnN0ZCAmIFY0TDJfU1REXzUyNV82MCk7Ci0JCWludCB2Ymlfb2Zmc2V0ID0gaXNfcGFsID8gMSA6IDA7Ci0JCWludCBpLCB4OwotCQl1OCBsY3JbMjRdOworaW50IGN4MThfYXZfdmJpX3NfZm10KHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCit7CisJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gJmN4LT5hdl9zdGF0ZTsKKwlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCAqc3ZiaTsKKwlpbnQgaXNfcGFsID0gIShzdGF0ZS0+c3RkICYgVjRMMl9TVERfNTI1XzYwKTsKKwlpbnQgaSwgeDsKKwl1OCBsY3JbMjRdOwogCi0JCWZtdCA9IGFyZzsKLQkJaWYgKGZtdC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRSAmJgotCQkgICAgZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJc3ZiaSA9ICZmbXQtPmZtdC5zbGljZWQ7Ci0JCWlmIChmbXQtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkgewotCQkJLyogcmF3IFZCSSAqLwotCQkJbWVtc2V0KHN2YmksIDAsIHNpemVvZigqc3ZiaSkpOwotCi0JCQkvKiBTZXR1cCBzdGFuZGFyZCAqLwotCQkJY3gxOF9hdl9zdGRfc2V0dXAoY3gpOwotCi0JCQkvKiBWQkkgT2Zmc2V0ICovCi0JCQljeDE4X2F2X3dyaXRlKGN4LCAweDQ3ZiwgdmJpX29mZnNldCk7Ci0JCQljeDE4X2F2X3dyaXRlKGN4LCAweDQwNCwgMHgyZSk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWZvciAoeCA9IDA7IHggPD0gMjM7IHgrKykKLQkJCWxjclt4XSA9IDB4MDA7CisJaWYgKGZtdC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRSAmJgorCQkJZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCXN2YmkgPSAmZm10LT5mbXQuc2xpY2VkOworCWlmIChmbXQtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkgeworCQkvKiByYXcgVkJJICovCisJCW1lbXNldChzdmJpLCAwLCBzaXplb2YoKnN2YmkpKTsKIAogCQkvKiBTZXR1cCBzdGFuZGFyZCAqLwogCQljeDE4X2F2X3N0ZF9zZXR1cChjeCk7CiAKLQkJLyogU2xpY2VkIFZCSSAqLwotCQljeDE4X2F2X3dyaXRlKGN4LCAweDQwNCwgMHgzMik7CS8qIEFuY2lsbGFyeSBkYXRhICovCi0JCWN4MThfYXZfd3JpdGUoY3gsIDB4NDA2LCAweDEzKTsKLQkJY3gxOF9hdl93cml0ZShjeCwgMHg0N2YsIHZiaV9vZmZzZXQpOworCQkvKiBWQkkgT2Zmc2V0ICovCisJCWN4MThfYXZfd3JpdGUoY3gsIDB4NDdmLCBzdGF0ZS0+c2xpY2VyX2xpbmVfZGVsYXkpOworCQljeDE4X2F2X3dyaXRlKGN4LCAweDQwNCwgMHgyZSk7CisJCXJldHVybiAwOworCX0KIAotCQlpZiAoaXNfcGFsKSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDw9IDY7IGkrKykKLQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldID0KLQkJCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IDA7Ci0JCX0gZWxzZSB7Ci0JCQlmb3IgKGkgPSAwOyBpIDw9IDk7IGkrKykKLQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldID0KLQkJCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IDA7CisJZm9yICh4ID0gMDsgeCA8PSAyMzsgeCsrKQorCQlsY3JbeF0gPSAweDAwOwogCi0JCQlmb3IgKGkgPSAyMjsgaSA8PSAyMzsgaSsrKQotCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPQotCQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gMDsKLQkJfQorCS8qIFNldHVwIHN0YW5kYXJkICovCisJY3gxOF9hdl9zdGRfc2V0dXAoY3gpOwogCi0JCWZvciAoaSA9IDc7IGkgPD0gMjM7IGkrKykgewotCQkJZm9yICh4ID0gMDsgeCA8PSAxOyB4KyspIHsKLQkJCQlzd2l0Y2ggKHN2YmktPnNlcnZpY2VfbGluZXNbMS14XVtpXSkgewotCQkJCWNhc2UgVjRMMl9TTElDRURfVEVMRVRFWFRfQjoKLQkJCQkJbGNyW2ldIHw9IDEgPDwgKDQgKiB4KTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBWNEwyX1NMSUNFRF9XU1NfNjI1OgotCQkJCQlsY3JbaV0gfD0gNCA8PCAoNCAqIHgpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1OgotCQkJCQlsY3JbaV0gfD0gNiA8PCAoNCAqIHgpOwotCQkJCQlicmVhazsKLQkJCQljYXNlIFY0TDJfU0xJQ0VEX1ZQUzoKLQkJCQkJbGNyW2ldIHw9IDkgPDwgKDQgKiB4KTsKLQkJCQkJYnJlYWs7Ci0JCQkJfQorCS8qIFNsaWNlZCBWQkkgKi8KKwljeDE4X2F2X3dyaXRlKGN4LCAweDQwNCwgMHgzMik7CS8qIEFuY2lsbGFyeSBkYXRhICovCisJY3gxOF9hdl93cml0ZShjeCwgMHg0MDYsIDB4MTMpOworCWN4MThfYXZfd3JpdGUoY3gsIDB4NDdmLCBzdGF0ZS0+c2xpY2VyX2xpbmVfZGVsYXkpOworCisJLyogRm9yY2UgaW1wb3NzaWJsZSBsaW5lcyB0byAwICovCisJaWYgKGlzX3BhbCkgeworCQlmb3IgKGkgPSAwOyBpIDw9IDY7IGkrKykKKwkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPQorCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMV1baV0gPSAwOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPD0gOTsgaSsrKQorCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9CisJCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IDA7CisKKwkJZm9yIChpID0gMjI7IGkgPD0gMjM7IGkrKykKKwkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPQorCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMV1baV0gPSAwOworCX0KKworCS8qIEJ1aWxkIHJlZ2lzdGVyIHZhbHVlcyBmb3IgcmVxdWVzdGVkIHNlcnZpY2UgbGluZXMgKi8KKwlmb3IgKGkgPSA3OyBpIDw9IDIzOyBpKyspIHsKKwkJZm9yICh4ID0gMDsgeCA8PSAxOyB4KyspIHsKKwkJCXN3aXRjaCAoc3ZiaS0+c2VydmljZV9saW5lc1sxLXhdW2ldKSB7CisJCQljYXNlIFY0TDJfU0xJQ0VEX1RFTEVURVhUX0I6CisJCQkJbGNyW2ldIHw9IDEgPDwgKDQgKiB4KTsKKwkJCQlicmVhazsKKwkJCWNhc2UgVjRMMl9TTElDRURfV1NTXzYyNToKKwkJCQlsY3JbaV0gfD0gNCA8PCAoNCAqIHgpOworCQkJCWJyZWFrOworCQkJY2FzZSBWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNToKKwkJCQlsY3JbaV0gfD0gNiA8PCAoNCAqIHgpOworCQkJCWJyZWFrOworCQkJY2FzZSBWNEwyX1NMSUNFRF9WUFM6CisJCQkJbGNyW2ldIHw9IDkgPDwgKDQgKiB4KTsKKwkJCQlicmVhazsKIAkJCX0KIAkJfQotCi0JCWlmIChpc19wYWwpIHsKLQkJCWZvciAoeCA9IDEsIGkgPSAweDQyNDsgaSA8PSAweDQzNDsgaSsrLCB4KyspCi0JCQkJY3gxOF9hdl93cml0ZShjeCwgaSwgbGNyWzYgKyB4XSk7Ci0JCX0gZWxzZSB7Ci0JCQlmb3IgKHggPSAxLCBpID0gMHg0MjQ7IGkgPD0gMHg0MzA7IGkrKywgeCsrKQotCQkJCWN4MThfYXZfd3JpdGUoY3gsIGksIGxjcls5ICsgeF0pOwotCQkJZm9yIChpID0gMHg0MzE7IGkgPD0gMHg0MzQ7IGkrKykKLQkJCQljeDE4X2F2X3dyaXRlKGN4LCBpLCAwKTsKLQkJfQotCi0JCWN4MThfYXZfd3JpdGUoY3gsIDB4NDNjLCAweDE2KTsKLQkJY3gxOF9hdl93cml0ZShjeCwgMHg0NzQsIGlzX3BhbCA/IDB4MmEgOiAweDIyKTsKLQkJYnJlYWs7CiAJfQogCi0JY2FzZSBWSURJT0NfSU5UX0RFQ09ERV9WQklfTElORToKLQl7Ci0JCXN0cnVjdCB2NGwyX2RlY29kZV92YmlfbGluZSAqdmJpID0gYXJnOwotCQl1OCAqcCA9IHZiaS0+cDsKLQkJaW50IGlkMSwgaWQyLCBsLCBlcnIgPSAwOworCWlmIChpc19wYWwpIHsKKwkJZm9yICh4ID0gMSwgaSA9IDB4NDI0OyBpIDw9IDB4NDM0OyBpKyssIHgrKykKKwkJCWN4MThfYXZfd3JpdGUoY3gsIGksIGxjcls2ICsgeF0pOworCX0gZWxzZSB7CisJCWZvciAoeCA9IDEsIGkgPSAweDQyNDsgaSA8PSAweDQzMDsgaSsrLCB4KyspCisJCQljeDE4X2F2X3dyaXRlKGN4LCBpLCBsY3JbOSArIHhdKTsKKwkJZm9yIChpID0gMHg0MzE7IGkgPD0gMHg0MzQ7IGkrKykKKwkJCWN4MThfYXZfd3JpdGUoY3gsIGksIDApOworCX0KIAotCQlpZiAocFswXSB8fCBwWzFdICE9IDB4ZmYgfHwgcFsyXSAhPSAweGZmIHx8Ci0JCSAgICAocFszXSAhPSAweDU1ICYmIHBbM10gIT0gMHg5MSkpIHsKLQkJCXZiaS0+bGluZSA9IHZiaS0+dHlwZSA9IDA7Ci0JCQlicmVhazsKLQkJfQorCWN4MThfYXZfd3JpdGUoY3gsIDB4NDNjLCAweDE2KTsKKwkvKiBGSVhNRSAtIHNob3VsZCBtYXRjaCB2Ymxhbmsgc2V0IGluIGN4MThfYXZfc3RkX3NldHVwKCkgKi8KKwljeDE4X2F2X3dyaXRlKGN4LCAweDQ3NCwgaXNfcGFsID8gMHgyYSA6IDI2KTsKKwlyZXR1cm4gMDsKK30KIAotCQlwICs9IDQ7Ci0JCWlkMSA9IHBbLTFdOwotCQlpZDIgPSBwWzBdICYgMHhmOwotCQlsID0gcFsyXSAmIDB4M2Y7Ci0JCWwgKz0gc3RhdGUtPnZiaV9saW5lX29mZnNldDsKLQkJcCArPSA0OworaW50IGN4MThfYXZfZGVjb2RlX3ZiaV9saW5lKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCQkJICAgc3RydWN0IHY0bDJfZGVjb2RlX3ZiaV9saW5lICp2YmkpCit7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IGN4MThfYXZfc3RhdGUgKnN0YXRlID0gJmN4LT5hdl9zdGF0ZTsKKwlzdHJ1Y3QgdmJpX2FuY19kYXRhICphbmMgPSAoc3RydWN0IHZiaV9hbmNfZGF0YSAqKXZiaS0+cDsKKwl1OCAqcDsKKwlpbnQgZGlkLCBzZGlkLCBsLCBlcnIgPSAwOwogCi0JCXN3aXRjaCAoaWQyKSB7Ci0JCWNhc2UgMToKLQkJCWlkMiA9IFY0TDJfU0xJQ0VEX1RFTEVURVhUX0I7Ci0JCQlicmVhazsKLQkJY2FzZSA0OgotCQkJaWQyID0gVjRMMl9TTElDRURfV1NTXzYyNTsKLQkJCWJyZWFrOwotCQljYXNlIDY6Ci0JCQlpZDIgPSBWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNTsKLQkJCWVyciA9ICFvZGRfcGFyaXR5KHBbMF0pIHx8ICFvZGRfcGFyaXR5KHBbMV0pOwotCQkJYnJlYWs7Ci0JCWNhc2UgOToKLQkJCWlkMiA9IFY0TDJfU0xJQ0VEX1ZQUzsKLQkJCWlmIChkZWNvZGVfdnBzKHAsIHApICE9IDApCi0JCQkJZXJyID0gMTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJaWQyID0gMDsKKwkvKgorCSAqIENoZWNrIGZvciB0aGUgYW5jaWxsYXJ5IGRhdGEgaGVhZGVyIGZvciBzbGljZWQgVkJJCisJICovCisJaWYgKGFuYy0+cHJlYW1ibGVbMF0gfHwKKwkJCWFuYy0+cHJlYW1ibGVbMV0gIT0gMHhmZiB8fCBhbmMtPnByZWFtYmxlWzJdICE9IDB4ZmYgfHwKKwkJCShhbmMtPmRpZCAhPSBzbGljZWRfdmJpX2RpZFswXSAmJgorCQkJIGFuYy0+ZGlkICE9IHNsaWNlZF92YmlfZGlkWzFdKSkgeworCQl2YmktPmxpbmUgPSB2YmktPnR5cGUgPSAwOworCQlyZXR1cm4gMDsKKwl9CisKKwlkaWQgPSBhbmMtPmRpZDsKKwlzZGlkID0gYW5jLT5zZGlkICYgMHhmOworCWwgPSBhbmMtPmlkaWRbMF0gJiAweDNmOworCWwgKz0gc3RhdGUtPnNsaWNlcl9saW5lX29mZnNldDsKKwlwID0gYW5jLT5wYXlsb2FkOworCisJLyogRGVjb2RlIHRoZSBTRElEIHNldCBieSB0aGUgc2xpY2VyICovCisJc3dpdGNoIChzZGlkKSB7CisJY2FzZSAxOgorCQlzZGlkID0gVjRMMl9TTElDRURfVEVMRVRFWFRfQjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlzZGlkID0gVjRMMl9TTElDRURfV1NTXzYyNTsKKwkJYnJlYWs7CisJY2FzZSA2OgorCQlzZGlkID0gVjRMMl9TTElDRURfQ0FQVElPTl81MjU7CisJCWVyciA9ICFvZGRfcGFyaXR5KHBbMF0pIHx8ICFvZGRfcGFyaXR5KHBbMV0pOworCQlicmVhazsKKwljYXNlIDk6CisJCXNkaWQgPSBWNEwyX1NMSUNFRF9WUFM7CisJCWlmIChkZWNvZGVfdnBzKHAsIHApICE9IDApCiAJCQllcnIgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQotCQl2YmktPnR5cGUgPSBlcnIgPyAwIDogaWQyOwotCQl2YmktPmxpbmUgPSBlcnIgPyAwIDogbDsKLQkJdmJpLT5pc19zZWNvbmRfZmllbGQgPSBlcnIgPyAwIDogKGlkMSA9PSAweDU1KTsKLQkJdmJpLT5wID0gcDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJc2RpZCA9IDA7CisJCWVyciA9IDE7CiAJCWJyZWFrOwogCX0KLQl9CiAKKwl2YmktPnR5cGUgPSBlcnIgPyAwIDogc2RpZDsKKwl2YmktPmxpbmUgPSBlcnIgPyAwIDogbDsKKwl2YmktPmlzX3NlY29uZF9maWVsZCA9IGVyciA/IDAgOiAoZGlkID09IHNsaWNlZF92YmlfZGlkWzFdKTsKKwl2YmktPnAgPSBwOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNhcmRzLmMKaW5kZXggZTI3NDA0My4uOWJjMjIxOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5jCkBAIC01MSwxMiArNTEsMTIgQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY3gxOF9jYXJkIGN4MThfY2FyZF9odnIxNjAwX2VzbXQgPSB7CiAJLnR5cGUgPSBDWDE4X0NBUkRfSFZSXzE2MDBfRVNNVCwKIAkubmFtZSA9ICJIYXVwcGF1Z2UgSFZSLTE2MDAiLAotCS5jb21tZW50ID0gIlJhdyBWQkkgc3VwcG9ydGVkOyBTbGljZWQgVkJJIGlzIG5vdCB5ZXQgc3VwcG9ydGVkXG4iLAorCS5jb21tZW50ID0gIlNpbXVsdGFuZW91cyBEaWdpdGFsIGFuZCBBbmFsb2cgVFYgY2FwdHVyZSBzdXBwb3J0ZWRcbiIsCiAJLnY0bDJfY2FwYWJpbGl0aWVzID0gQ1gxOF9DQVBfRU5DT0RFUiwKLQkuaHdfYXVkaW9fY3RybCA9IENYMThfSFdfQ1gyMzQxOCwKKwkuaHdfYXVkaW9fY3RybCA9IENYMThfSFdfNDE4X0FWLAogCS5od19tdXhlciA9IENYMThfSFdfQ1M1MzQ1LAotCS5od19hbGwgPSBDWDE4X0hXX1RWRUVQUk9NIHwgQ1gxOF9IV19UVU5FUiB8Ci0JCSAgQ1gxOF9IV19DUzUzNDUgfCBDWDE4X0hXX0RWQiwKKwkuaHdfYWxsID0gQ1gxOF9IV19UVkVFUFJPTSB8IENYMThfSFdfNDE4X0FWIHwgQ1gxOF9IV19UVU5FUiB8CisJCSAgQ1gxOF9IV19DUzUzNDUgfCBDWDE4X0hXX0RWQiB8IENYMThfSFdfR1BJT19SRVNFVF9DVFJMLAogCS52aWRlb19pbnB1dHMgPSB7CiAJCXsgQ1gxOF9DQVJEX0lOUFVUX1ZJRF9UVU5FUiwgIDAsIENYMThfQVZfQ09NUE9TSVRFNyB9LAogCQl7IENYMThfQ0FSRF9JTlBVVF9TVklERU8xLCAgICAxLCBDWDE4X0FWX1NWSURFTzEgICAgfSwKQEAgLTk3LDEyICs5NywxMiBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBjeDE4X2NhcmQgY3gxOF9jYXJkX2h2cjE2MDBfc2Ftc3VuZyA9IHsKIAkudHlwZSA9IENYMThfQ0FSRF9IVlJfMTYwMF9TQU1TVU5HLAogCS5uYW1lID0gIkhhdXBwYXVnZSBIVlItMTYwMCAoUHJlcHJvZHVjdGlvbikiLAotCS5jb21tZW50ID0gIlJhdyBWQkkgc3VwcG9ydGVkOyBTbGljZWQgVkJJIGlzIG5vdCB5ZXQgc3VwcG9ydGVkXG4iLAorCS5jb21tZW50ID0gIlNpbXVsdGFuZW91cyBEaWdpdGFsIGFuZCBBbmFsb2cgVFYgY2FwdHVyZSBzdXBwb3J0ZWRcbiIsCiAJLnY0bDJfY2FwYWJpbGl0aWVzID0gQ1gxOF9DQVBfRU5DT0RFUiwKLQkuaHdfYXVkaW9fY3RybCA9IENYMThfSFdfQ1gyMzQxOCwKKwkuaHdfYXVkaW9fY3RybCA9IENYMThfSFdfNDE4X0FWLAogCS5od19tdXhlciA9IENYMThfSFdfQ1M1MzQ1LAotCS5od19hbGwgPSBDWDE4X0hXX1RWRUVQUk9NIHwgQ1gxOF9IV19UVU5FUiB8Ci0JCSAgQ1gxOF9IV19DUzUzNDUgfCBDWDE4X0hXX0RWQiwKKwkuaHdfYWxsID0gQ1gxOF9IV19UVkVFUFJPTSB8IENYMThfSFdfNDE4X0FWIHwgQ1gxOF9IV19UVU5FUiB8CisJCSAgQ1gxOF9IV19DUzUzNDUgfCBDWDE4X0hXX0RWQiB8IENYMThfSFdfR1BJT19SRVNFVF9DVFJMLAogCS52aWRlb19pbnB1dHMgPSB7CiAJCXsgQ1gxOF9DQVJEX0lOUFVUX1ZJRF9UVU5FUiwgIDAsIENYMThfQVZfQ09NUE9TSVRFNyB9LAogCQl7IENYMThfQ0FSRF9JTlBVVF9TVklERU8xLCAgICAxLCBDWDE4X0FWX1NWSURFTzEgICAgfSwKQEAgLTE1MiwxMCArMTUyLDEwIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGN4MThfY2FyZCBjeDE4X2NhcmRfaDkwMCA9IHsKIAkudHlwZSA9IENYMThfQ0FSRF9DT01QUk9fSDkwMCwKIAkubmFtZSA9ICJDb21wcm8gVmlkZW9NYXRlIEg5MDAiLAotCS5jb21tZW50ID0gIlJhdyBWQkkgc3VwcG9ydGVkOyBTbGljZWQgVkJJIGlzIG5vdCB5ZXQgc3VwcG9ydGVkXG4iLAorCS5jb21tZW50ID0gIkFuYWxvZyBUViBjYXB0dXJlIHN1cHBvcnRlZFxuIiwKIAkudjRsMl9jYXBhYmlsaXRpZXMgPSBDWDE4X0NBUF9FTkNPREVSLAotCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV19DWDIzNDE4LAotCS5od19hbGwgPSBDWDE4X0hXX1RVTkVSLAorCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV180MThfQVYsCisJLmh3X2FsbCA9IENYMThfSFdfNDE4X0FWIHwgQ1gxOF9IV19UVU5FUiB8IENYMThfSFdfR1BJT19SRVNFVF9DVFJMLAogCS52aWRlb19pbnB1dHMgPSB7CiAJCXsgQ1gxOF9DQVJEX0lOUFVUX1ZJRF9UVU5FUiwgIDAsIENYMThfQVZfQ09NUE9TSVRFMiB9LAogCQl7IENYMThfQ0FSRF9JTlBVVF9TVklERU8xLCAgICAxLApAQCAtMjAxLDggKzIwMSw4IEBACiAJLm5hbWUgPSAiWXVhbiBNUEM3MTgiLAogCS5jb21tZW50ID0gIkFuYWxvZyB2aWRlbyBjYXB0dXJlIHdvcmtzOyBzb21lIGF1ZGlvIGxpbmUgaW4gbWF5IG5vdC5cbiIsCiAJLnY0bDJfY2FwYWJpbGl0aWVzID0gQ1gxOF9DQVBfRU5DT0RFUiwKLQkuaHdfYXVkaW9fY3RybCA9IENYMThfSFdfQ1gyMzQxOCwKLQkuaHdfYWxsID0gQ1gxOF9IV19UVU5FUiwKKwkuaHdfYXVkaW9fY3RybCA9IENYMThfSFdfNDE4X0FWLAorCS5od19hbGwgPSBDWDE4X0hXXzQxOF9BViB8IENYMThfSFdfVFVORVIgfCBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTCwKIAkudmlkZW9faW5wdXRzID0gewogCQl7IENYMThfQ0FSRF9JTlBVVF9WSURfVFVORVIsICAwLCBDWDE4X0FWX0NPTVBPU0lURTIgfSwKIAkJeyBDWDE4X0NBUkRfSU5QVVRfU1ZJREVPMSwgICAgMSwKQEAgLTI0OSwxMSArMjQ5LDExIEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IGN4MThfY2FyZCBjeDE4X2NhcmRfY254dF9yYXB0b3JfcGFsID0gewogCS50eXBlID0gQ1gxOF9DQVJEX0NOWFRfUkFQVE9SX1BBTCwKIAkubmFtZSA9ICJDb25leGFudCBSYXB0b3IgUEFML1NFQ0FNIiwKLQkuY29tbWVudCA9ICJSYXcgVkJJIHN1cHBvcnRlZDsgU2xpY2VkIFZCSSBpcyBub3QgeWV0IHN1cHBvcnRlZFxuIiwKKwkuY29tbWVudCA9ICJBbmFsb2cgVFYgY2FwdHVyZSBzdXBwb3J0ZWRcbiIsCiAJLnY0bDJfY2FwYWJpbGl0aWVzID0gQ1gxOF9DQVBfRU5DT0RFUiwKLQkuaHdfYXVkaW9fY3RybCA9IENYMThfSFdfQ1gyMzQxOCwKLQkuaHdfbXV4ZXIgPSBDWDE4X0hXX0dQSU8sCi0JLmh3X2FsbCA9IENYMThfSFdfVFVORVIgfCBDWDE4X0hXX0dQSU8sCisJLmh3X2F1ZGlvX2N0cmwgPSBDWDE4X0hXXzQxOF9BViwKKwkuaHdfbXV4ZXIgPSBDWDE4X0hXX0dQSU9fTVVYLAorCS5od19hbGwgPSBDWDE4X0hXXzQxOF9BViB8IENYMThfSFdfVFVORVIgfCBDWDE4X0hXX0dQSU9fTVVYLAogCS52aWRlb19pbnB1dHMgPSB7CiAJCXsgQ1gxOF9DQVJEX0lOUFVUX1ZJRF9UVU5FUiwgIDAsIENYMThfQVZfQ09NUE9TSVRFMiB9LAogCQl7IENYMThfQ0FSRF9JTlBVVF9TVklERU8xLCAgICAxLApAQCAtMzA2LDggKzMwNiw4IEBACiAJLmNvbW1lbnQgPSAiRXhwZXJpbWVudGVycyBhbmQgcGhvdG9zIG5lZWRlZCBmb3IgZGV2aWNlIHRvIHdvcmsgd2VsbC5cbiIKIAkJICAiXHRUbyBoZWxwLCBtYWlsIHRoZSBpdnR2LWRldmVsIGxpc3QgKHd3dy5pdnR2ZHJpdmVyLm9yZykuXG4iLAogCS52NGwyX2NhcGFiaWxpdGllcyA9IENYMThfQ0FQX0VOQ09ERVIsCi0JLmh3X2F1ZGlvX2N0cmwgPSBDWDE4X0hXX0NYMjM0MTgsCi0JLmh3X2FsbCA9IENYMThfSFdfVFVORVIsCisJLmh3X2F1ZGlvX2N0cmwgPSBDWDE4X0hXXzQxOF9BViwKKwkuaHdfYWxsID0gQ1gxOF9IV180MThfQVYgfCBDWDE4X0hXX1RVTkVSIHwgQ1gxOF9IV19HUElPX1JFU0VUX0NUUkwsCiAJLnZpZGVvX2lucHV0cyA9IHsKIAkJeyBDWDE4X0NBUkRfSU5QVVRfVklEX1RVTkVSLCAgMCwgQ1gxOF9BVl9DT01QT1NJVEU2IH0sCiAJCXsgQ1gxOF9DQVJEX0lOUFVUX1NWSURFTzEsICAgIDEsCkBAIC0zMzksMTkgKzMzOSwyMSBAQAogLyogTGVhZHRlayBXaW5GYXN0IFBWUjIxMDAgKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjeDE4X2NhcmRfcGNpX2luZm8gY3gxOF9wY2lfbGVhZHRla19wdnIyMTAwW10gPSB7Ci0JeyBQQ0lfREVWSUNFX0lEX0NYMjM0MTgsIENYMThfUENJX0lEX0xFQURURUssIDB4NmYyNyB9LAorCXsgUENJX0RFVklDRV9JRF9DWDIzNDE4LCBDWDE4X1BDSV9JRF9MRUFEVEVLLCAweDZmMjcgfSwgLyogUFZSMjEwMCAgICovCisJeyBQQ0lfREVWSUNFX0lEX0NYMjM0MTgsIENYMThfUENJX0lEX0xFQURURUssIDB4NjY5MCB9LCAvKiBEVlIzMTAwIEggKi8KIAl7IDAsIDAsIDAgfQogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBjeDE4X2NhcmQgY3gxOF9jYXJkX2xlYWR0ZWtfcHZyMjEwMCA9IHsKIAkudHlwZSA9IENYMThfQ0FSRF9MRUFEVEVLX1BWUjIxMDAsCi0JLm5hbWUgPSAiTGVhZHRlayBXaW5GYXN0IFBWUjIxMDAiLAorCS5uYW1lID0gIkxlYWR0ZWsgV2luRmFzdCBQVlIyMTAwL0RWUjMxMDAgSCIsCiAJLmNvbW1lbnQgPSAiRXhwZXJpbWVudGVycyBhbmQgcGhvdG9zIG5lZWRlZCBmb3IgZGV2aWNlIHRvIHdvcmsgd2VsbC5cbiIKIAkJICAiXHRUbyBoZWxwLCBtYWlsIHRoZSBpdnR2LWRldmVsIGxpc3QgKHd3dy5pdnR2ZHJpdmVyLm9yZykuXG4iLAogCS52NGwyX2NhcGFiaWxpdGllcyA9IENYMThfQ0FQX0VOQ09ERVIsCi0JLmh3X2F1ZGlvX2N0cmwgPSBDWDE4X0hXX0NYMjM0MTgsCi0JLmh3X211eGVyID0gQ1gxOF9IV19HUElPLAotCS5od19hbGwgPSBDWDE4X0hXX1RVTkVSIHwgQ1gxOF9IV19HUElPLAorCS5od19hdWRpb19jdHJsID0gQ1gxOF9IV180MThfQVYsCisJLmh3X211eGVyID0gQ1gxOF9IV19HUElPX01VWCwKKwkuaHdfYWxsID0gQ1gxOF9IV180MThfQVYgfCBDWDE4X0hXX1RVTkVSIHwgQ1gxOF9IV19HUElPX01VWCB8CisJCSAgQ1gxOF9IV19HUElPX1JFU0VUX0NUUkwsCiAJLnZpZGVvX2lucHV0cyA9IHsKIAkJeyBDWDE4X0NBUkRfSU5QVVRfVklEX1RVTkVSLCAgMCwgQ1gxOF9BVl9DT01QT1NJVEUyIH0sCiAJCXsgQ1gxOF9DQVJEX0lOUFVUX1NWSURFTzEsICAgIDEsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY2FyZHMuaAppbmRleCA2ZmE3YmNiLi4zYzU1MmI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jYXJkcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNhcmRzLmgKQEAgLTIyLDEyICsyMiwxMyBAQAogICovCiAKIC8qIGhhcmR3YXJlIGZsYWdzICovCi0jZGVmaW5lIENYMThfSFdfVFVORVIgICAgICgxIDw8IDApCi0jZGVmaW5lIENYMThfSFdfVFZFRVBST00gICgxIDw8IDEpCi0jZGVmaW5lIENYMThfSFdfQ1M1MzQ1ICAgICgxIDw8IDIpCi0jZGVmaW5lIENYMThfSFdfR1BJTyAgICAgICgxIDw8IDMpCi0jZGVmaW5lIENYMThfSFdfQ1gyMzQxOCAgICgxIDw8IDQpCi0jZGVmaW5lIENYMThfSFdfRFZCICAgCSAgKDEgPDwgNSkKKyNkZWZpbmUgQ1gxOF9IV19UVU5FUgkJKDEgPDwgMCkKKyNkZWZpbmUgQ1gxOF9IV19UVkVFUFJPTQkoMSA8PCAxKQorI2RlZmluZSBDWDE4X0hXX0NTNTM0NQkJKDEgPDwgMikKKyNkZWZpbmUgQ1gxOF9IV19EVkIJCSgxIDw8IDMpCisjZGVmaW5lIENYMThfSFdfNDE4X0FWCQkoMSA8PCA0KQorI2RlZmluZSBDWDE4X0hXX0dQSU9fTVVYCSgxIDw8IDUpCisjZGVmaW5lIENYMThfSFdfR1BJT19SRVNFVF9DVFJMCSgxIDw8IDYpCiAKIC8qIHZpZGVvIGlucHV0cyAqLwogI2RlZmluZQlDWDE4X0NBUkRfSU5QVVRfVklEX1RVTkVSCTEKQEAgLTQ5LDggKzUwLDcgQEAKIC8qIFY0TDIgY2FwYWJpbGl0eSBhbGlhc2VzICovCiAjZGVmaW5lIENYMThfQ0FQX0VOQ09ERVIgKFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9UVU5FUiB8IFwKIAkJCSAgVjRMMl9DQVBfQVVESU8gfCBWNEwyX0NBUF9SRUFEV1JJVEUgfCBcCi0JCQkgIFY0TDJfQ0FQX1ZCSV9DQVBUVVJFKQotLyogfCBWNEwyX0NBUF9TTElDRURfVkJJX0NBUFRVUkUpIG5vdCB5ZXQgKi8KKwkJCSAgVjRMMl9DQVBfVkJJX0NBUFRVUkUgfCBWNEwyX0NBUF9TTElDRURfVkJJX0NBUFRVUkUpCiAKIHN0cnVjdCBjeDE4X2NhcmRfdmlkZW9faW5wdXQgewogCXU4ICB2aWRlb190eXBlOyAJLyogdmlkZW8gaW5wdXQgdHlwZSAqLwpAQCAtMTIyLDcgKzEyMiw3IEBACiAJY2hhciAqY29tbWVudDsKIAl1MzIgdjRsMl9jYXBhYmlsaXRpZXM7CiAJdTMyIGh3X2F1ZGlvX2N0cmw7CS8qIGhhcmR3YXJlIHVzZWQgZm9yIHRoZSBWNEwyIGNvbnRyb2xzIChvbmx5Ci0JCQkJICAgMSBkZXYgYWxsb3dlZCkgKi8KKwkJCQkgICAxIGRldiBhbGxvd2VkIGN1cnJlbnRseSkgKi8KIAl1MzIgaHdfbXV4ZXI7CQkvKiBoYXJkd2FyZSB1c2VkIHRvIG11bHRpcGxleCBhdWRpbyBpbnB1dCAqLwogCXUzMiBod19hbGw7CQkvKiBhbGwgaGFyZHdhcmUgdXNlZCBieSB0aGUgYm9hcmQgKi8KIAlzdHJ1Y3QgY3gxOF9jYXJkX3ZpZGVvX2lucHV0IHZpZGVvX2lucHV0c1tDWDE4X0NBUkRfTUFYX1ZJREVPX0lOUFVUU107CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jb250cm9scy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtY29udHJvbHMuYwppbmRleCAxN2VkZjMwLi44MmZjMmY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1jb250cm9scy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWNvbnRyb2xzLmMKQEAgLTIyLDE0ICsyMiwxMyBAQAogICovCiAKICNpbmNsdWRlICJjeDE4LWRyaXZlci5oIgotI2luY2x1ZGUgImN4MTgtYXYtY29yZS5oIgogI2luY2x1ZGUgImN4MTgtY2FyZHMuaCIKICNpbmNsdWRlICJjeDE4LWlvY3RsLmgiCiAjaW5jbHVkZSAiY3gxOC1hdWRpby5oIgotI2luY2x1ZGUgImN4MTgtaTJjLmgiCiAjaW5jbHVkZSAiY3gxOC1tYWlsYm94LmgiCiAjaW5jbHVkZSAiY3gxOC1jb250cm9scy5oIgogCisvKiBNdXN0IGJlIHNvcnRlZCBmcm9tIGxvdyB0byBoaWdoIGNvbnRyb2wgSUQhICovCiBzdGF0aWMgY29uc3QgdTMyIHVzZXJfY3RybHNbXSA9IHsKIAlWNEwyX0NJRF9VU0VSX0NMQVNTLAogCVY0TDJfQ0lEX0JSSUdIVE5FU1MsCkBAIC02Niw3ICs2NSw3IEBACiAJY2FzZSBWNEwyX0NJRF9IVUU6CiAJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgogCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6Ci0JCWlmIChjeDE4X2F2X2NtZChjeCwgVklESU9DX1FVRVJZQ1RSTCwgcWN0cmwpKQorCQlpZiAodjRsMl9zdWJkZXZfY2FsbChjeC0+c2RfYXYsIGNvcmUsIHF1ZXJ5Y3RybCwgcWN0cmwpKQogCQkJcWN0cmwtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX0RJU0FCTEVEOwogCQlyZXR1cm4gMDsKIApAQCAtNzYsNyArNzUsNyBAQAogCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzoKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOgotCQlpZiAoY3gxOF9pMmNfaHcoY3gsIGN4LT5jYXJkLT5od19hdWRpb19jdHJsLCBWSURJT0NfUVVFUllDVFJMLCBxY3RybCkpCisJCWlmICh2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgY29yZSwgcXVlcnljdHJsLCBxY3RybCkpCiAJCQlxY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfRElTQUJMRUQ7CiAJCXJldHVybiAwOwogCkBAIC0xMjUsNyArMTI0LDcgQEAKIAljYXNlIFY0TDJfQ0lEX0hVRToKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJcmV0dXJuIGN4MThfYXZfY21kKGN4LCBWSURJT0NfU19DVFJMLCB2Y3RybCk7CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgY29yZSwgc19jdHJsLCB2Y3RybCk7CiAKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0xMzMsNyArMTMyLDcgQEAKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19MT1VETkVTUzoKLQkJcmV0dXJuIGN4MThfaTJjX2h3KGN4LCBjeC0+Y2FyZC0+aHdfYXVkaW9fY3RybCwgVklESU9DX1NfQ1RSTCwgdmN0cmwpOworCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChjeC0+c2RfYXYsIGNvcmUsIHNfY3RybCwgdmN0cmwpOwogCiAJZGVmYXVsdDoKIAkJQ1gxOF9ERUJVR19JT0NUTCgiaW52YWxpZCBjb250cm9sIDB4JXhcbiIsIHZjdHJsLT5pZCk7CkBAIC0xNTAsNyArMTQ5LDcgQEAKIAljYXNlIFY0TDJfQ0lEX0hVRToKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJcmV0dXJuIGN4MThfYXZfY21kKGN4LCBWSURJT0NfR19DVFJMLCB2Y3RybCk7CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgY29yZSwgZ19jdHJsLCB2Y3RybCk7CiAKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKIAljYXNlIFY0TDJfQ0lEX0FVRElPX01VVEU6CkBAIC0xNTgsNyArMTU3LDggQEAKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19MT1VETkVTUzoKLQkJcmV0dXJuIGN4MThfaTJjX2h3KGN4LCBjeC0+Y2FyZC0+aHdfYXVkaW9fY3RybCwgVklESU9DX0dfQ1RSTCwgdmN0cmwpOworCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChjeC0+c2RfYXYsIGNvcmUsIGdfY3RybCwgdmN0cmwpOworCiAJZGVmYXVsdDoKIAkJQ1gxOF9ERUJVR19JT0NUTCgiaW52YWxpZCBjb250cm9sIDB4JXhcbiIsIHZjdHJsLT5pZCk7CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTY2LDM4ICsxNjYsNTcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDE4X3NldHVwX3ZiaV9mbXQoc3RydWN0IGN4MTggKmN4LCBlbnVtIHY0bDJfbXBlZ19zdHJlYW1fdmJpX2ZtdCBmbXQpCitzdGF0aWMgaW50IGN4MThfc2V0dXBfdmJpX2ZtdChzdHJ1Y3QgY3gxOCAqY3gsCisJCQkgICAgICBlbnVtIHY0bDJfbXBlZ19zdHJlYW1fdmJpX2ZtdCBmbXQsCisJCQkgICAgICBlbnVtIHY0bDJfbXBlZ19zdHJlYW1fdHlwZSB0eXBlKQogewogCWlmICghKGN4LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1NMSUNFRF9WQklfQ0FQVFVSRSkpCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChhdG9taWNfcmVhZCgmY3gtPmFuYV9jYXB0dXJpbmcpID4gMCkKIAkJcmV0dXJuIC1FQlVTWTsKIAotCS8qIEZpcnN0IHRyeSB0byBhbGxvY2F0ZSBzbGljZWQgVkJJIGJ1ZmZlcnMgaWYgbmVlZGVkLiAqLwotCWlmIChmbXQgJiYgY3gtPnZiaS5zbGljZWRfbXBlZ19kYXRhWzBdID09IE5VTEwpIHsKKwlpZiAoZm10ICE9IFY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9JVlRWIHx8CisJICAgIHR5cGUgIT0gVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1BTKSB7CisJCS8qIFdlIGRvbid0IGRvIFZCSSBpbnNlcnRpb24gYXNpZGUgZnJvbSBJVlRWIGZvcm1hdCBpbiBhIFBTICovCisJCWN4LT52YmkuaW5zZXJ0X21wZWcgPSBWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfTk9ORTsKKwkJQ1gxOF9ERUJVR19JTkZPKCJkaXNhYmxlZCBpbnNlcnRpb24gb2Ygc2xpY2VkIFZCSSBkYXRhIGludG8gIgorCQkJCSJ0aGUgTVBFRyBzdHJlYW1cbiIpOworCQlyZXR1cm4gMDsKKwl9CisKKwkvKiBBbGxvY2F0ZSBzbGljZWQgVkJJIGJ1ZmZlcnMgaWYgbmVlZGVkLiAqLworCWlmIChjeC0+dmJpLnNsaWNlZF9tcGVnX2RhdGFbMF0gPT0gTlVMTCkgewogCQlpbnQgaTsKIAogCQlmb3IgKGkgPSAwOyBpIDwgQ1gxOF9WQklfRlJBTUVTOyBpKyspIHsKLQkJCS8qIFl1Y2ssIGhhcmRjb2RlZC4gTmVlZHMgdG8gYmUgYSBkZWZpbmUgKi8KLQkJCWN4LT52Ymkuc2xpY2VkX21wZWdfZGF0YVtpXSA9IGttYWxsb2MoMjA0OSwgR0ZQX0tFUk5FTCk7CisJCQljeC0+dmJpLnNsaWNlZF9tcGVnX2RhdGFbaV0gPQorCQkJICAgICAgIGttYWxsb2MoQ1gxOF9TTElDRURfTVBFR19EQVRBX0JVRlNaLCBHRlBfS0VSTkVMKTsKIAkJCWlmIChjeC0+dmJpLnNsaWNlZF9tcGVnX2RhdGFbaV0gPT0gTlVMTCkgewogCQkJCXdoaWxlICgtLWkgPj0gMCkgewogCQkJCQlrZnJlZShjeC0+dmJpLnNsaWNlZF9tcGVnX2RhdGFbaV0pOwogCQkJCQljeC0+dmJpLnNsaWNlZF9tcGVnX2RhdGFbaV0gPSBOVUxMOwogCQkJCX0KKwkJCQljeC0+dmJpLmluc2VydF9tcGVnID0KKwkJCQkJCSAgVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX05PTkU7CisJCQkJQ1gxOF9XQVJOKCJVbmFibGUgdG8gYWxsb2NhdGUgYnVmZmVycyBmb3IgIgorCQkJCQkgICJzbGljZWQgVkJJIGRhdGEgaW5zZXJ0aW9uXG4iKTsKIAkJCQlyZXR1cm4gLUVOT01FTTsKIAkJCX0KIAkJfQogCX0KIAogCWN4LT52YmkuaW5zZXJ0X21wZWcgPSBmbXQ7CisJQ1gxOF9ERUJVR19JTkZPKCJlbmFibGVkIGluc2VydGlvbiBvZiBzbGljZWQgVkJJIGRhdGEgaW50byB0aGUgTVBFRyBQUywiCisJCQkid2hlbiBzbGljZWQgVkJJIGlzIGVuYWJsZWRcbiIpOwogCi0JaWYgKGN4LT52YmkuaW5zZXJ0X21wZWcgPT0gMCkKLQkJcmV0dXJuIDA7Ci0JLyogTmVlZCBzbGljZWQgZGF0YSBmb3IgbXBlZyBpbnNlcnRpb24gKi8KKwkvKgorCSAqIElmIG91ciBjdXJyZW50IHNldHRpbmdzIGhhdmUgbm8gbGluZXMgc2V0IGZvciBjYXB0dXJlLCBzdG9yZSBhIHZhbGlkLAorCSAqIGRlZmF1bHQgc2V0IG9mIHNlcnZpY2UgbGluZXMgdG8gY2FwdHVyZSwgaW4gb3VyIGN1cnJlbnQgc2V0dGluZ3MuCisJICovCiAJaWYgKGN4MThfZ2V0X3NlcnZpY2Vfc2V0KGN4LT52Ymkuc2xpY2VkX2luKSA9PSAwKSB7CiAJCWlmIChjeC0+aXNfNjBoeikKLQkJCWN4LT52Ymkuc2xpY2VkX2luLT5zZXJ2aWNlX3NldCA9IFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1OworCQkJY3gtPnZiaS5zbGljZWRfaW4tPnNlcnZpY2Vfc2V0ID0KKwkJCQkJCQlWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNTsKIAkJZWxzZQogCQkJY3gtPnZiaS5zbGljZWRfaW4tPnNlcnZpY2Vfc2V0ID0gVjRMMl9TTElDRURfV1NTXzYyNTsKIAkJY3gxOF9leHBhbmRfc2VydmljZV9zZXQoY3gtPnZiaS5zbGljZWRfaW4sIGN4LT5pc181MGh6KTsKQEAgLTI1OSwxMCArMjc4LDEyIEBACiAJCXJldHVybiBlcnI7CiAJfQogCWlmIChjLT5jdHJsX2NsYXNzID09IFY0TDJfQ1RSTF9DTEFTU19NUEVHKSB7CisJCXN0YXRpYyB1MzIgZnJlcXNbM10gPSB7IDQ0MTAwLCA0ODAwMCwgMzIwMDAgfTsKIAkJc3RydWN0IGN4MThfYXBpX2Z1bmNfcHJpdmF0ZSBwcml2OwogCQlzdHJ1Y3QgY3gyMzQxeF9tcGVnX3BhcmFtcyBwID0gY3gtPnBhcmFtczsKIAkJaW50IGVyciA9IGN4MjM0MXhfZXh0X2N0cmxzKCZwLCBhdG9taWNfcmVhZCgmY3gtPmFuYV9jYXB0dXJpbmcpLAogCQkJCQkJYywgVklESU9DX1NfRVhUX0NUUkxTKTsKKwkJdW5zaWduZWQgaW50IGlkeDsKIAogCQlpZiAoZXJyKQogCQkJcmV0dXJuIGVycjsKQEAgLTI3NywxNiArMjk4LDIzIEBACiAJCQlmbXQuZm10LnBpeC53aWR0aCA9IGN4LT5wYXJhbXMud2lkdGgKIAkJCQkJCS8gKGlzX21wZWcxID8gMiA6IDEpOwogCQkJZm10LmZtdC5waXguaGVpZ2h0ID0gY3gtPnBhcmFtcy5oZWlnaHQ7Ci0JCQljeDE4X2F2X2NtZChjeCwgVklESU9DX1NfRk1ULCAmZm10KTsKKwkJCXY0bDJfc3ViZGV2X2NhbGwoY3gtPnNkX2F2LCB2aWRlbywgc19mbXQsICZmbXQpOwogCQl9CiAJCXByaXYuY3ggPSBjeDsKIAkJcHJpdi5zID0gJmN4LT5zdHJlYW1zW2lkLT50eXBlXTsKIAkJZXJyID0gY3gyMzQxeF91cGRhdGUoJnByaXYsIGN4MThfYXBpX2Z1bmMsICZjeC0+cGFyYW1zLCAmcCk7Ci0JCWlmICghZXJyICYmIGN4LT5wYXJhbXMuc3RyZWFtX3ZiaV9mbXQgIT0gcC5zdHJlYW1fdmJpX2ZtdCkKLQkJCWVyciA9IGN4MThfc2V0dXBfdmJpX2ZtdChjeCwgcC5zdHJlYW1fdmJpX2ZtdCk7CisJCWlmICghZXJyICYmCisJCSAgICAoY3gtPnBhcmFtcy5zdHJlYW1fdmJpX2ZtdCAhPSBwLnN0cmVhbV92YmlfZm10IHx8CisJCSAgICAgY3gtPnBhcmFtcy5zdHJlYW1fdHlwZSAhPSBwLnN0cmVhbV90eXBlKSkKKwkJCWVyciA9IGN4MThfc2V0dXBfdmJpX2ZtdChjeCwgcC5zdHJlYW1fdmJpX2ZtdCwKKwkJCQkJCSBwLnN0cmVhbV90eXBlKTsKIAkJY3gtPnBhcmFtcyA9IHA7CiAJCWN4LT5kdWFsd2F0Y2hfc3RlcmVvX21vZGUgPSBwLmF1ZGlvX3Byb3BlcnRpZXMgJiAweDAzMDA7Ci0JCWN4MThfYXVkaW9fc2V0X2F1ZGlvX2Nsb2NrX2ZyZXEoY3gsIHAuYXVkaW9fcHJvcGVydGllcyAmIDB4MDMpOworCQlpZHggPSBwLmF1ZGlvX3Byb3BlcnRpZXMgJiAweDAzOworCQkvKiBUaGUgYXVkaW8gY2xvY2sgb2YgdGhlIGRpZ2l0aXplciBtdXN0IG1hdGNoIHRoZSBjb2RlYyBzYW1wbGUKKwkJICAgcmF0ZSBvdGhlcndpc2UgeW91IGdldCBzb21lIHZlcnkgc3RyYW5nZSBlZmZlY3RzLiAqLworCQlpZiAoaWR4IDwgc2l6ZW9mKGZyZXFzKSkKKwkJCWN4MThfY2FsbF9hbGwoY3gsIGF1ZGlvLCBzX2Nsb2NrX2ZyZXEsIGZyZXFzW2lkeF0pOwogCQlyZXR1cm4gZXJyOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMKaW5kZXggZjUwY2YyMS4uMjEwYzY4YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHJpdmVyLmMKQEAgLTM5LDEwICszOSw2IEBACiAKICNpbmNsdWRlIDxtZWRpYS90dmVlcHJvbS5oPgogCi0KLS8qIHZhciB0byBrZWVwIHRyYWNrIG9mIHRoZSBudW1iZXIgb2YgYXJyYXkgZWxlbWVudHMgaW4gdXNlICovCi1pbnQgY3gxOF9jYXJkc19hY3RpdmU7Ci0KIC8qIElmIHlvdSBoYXZlIGFscmVhZHkgWCB2NGwgY2FyZHMsIHRoZW4gc2V0IHRoaXMgdG8gWC4gVGhpcyB3YXkKICAgIHRoZSBkZXZpY2UgbnVtYmVycyBzdGF5IG1hdGNoZWQuIEV4YW1wbGU6IHlvdSBoYXZlIGEgV2luVFYgY2FyZAogICAgd2l0aG91dCByYWRpbyBhbmQgYSBDb21wcm8gSDkwMCB3aXRoLiBOb3JtYWxseSB0aGlzIHdvdWxkIGdpdmUgYQpAQCAtNTAsMTIgKzQ2LDYgQEAKICAgIHNldHRpbmcgdGhpcyB0byAxIHlvdSBlbnN1cmUgdGhhdCByYWRpbzAgaXMgbm93IGFsc28gcmFkaW8xLiAqLwogaW50IGN4MThfZmlyc3RfbWlub3I7CiAKLS8qIE1hc3RlciB2YXJpYWJsZSBmb3IgYWxsIGN4MTggaW5mbyAqLwotc3RydWN0IGN4MTggKmN4MThfY2FyZHNbQ1gxOF9NQVhfQ0FSRFNdOwotCi0vKiBQcm90ZWN0cyBjeDE4X2NhcmRzX2FjdGl2ZSAqLwotREVGSU5FX1NQSU5MT0NLKGN4MThfY2FyZHNfbG9jayk7Ci0KIC8qIGFkZCB5b3VyIHJldmlzaW9uIGFuZCB3aGF0bm90IGhlcmUgKi8KIHN0YXRpYyBzdHJ1Y3QgcGNpX2RldmljZV9pZCBjeDE4X3BjaV90YmxbXSBfX2RldmluaXRkYXRhID0gewogCXtQQ0lfVkVORE9SX0lEX0NYLCBQQ0lfREVWSUNFX0lEX0NYMjM0MTgsCkBAIC02NSw2ICs1NSw4IEBACiAKIE1PRFVMRV9ERVZJQ0VfVEFCTEUocGNpLCBjeDE4X3BjaV90YmwpOwogCitzdGF0aWMgYXRvbWljX3QgY3gxOF9pbnN0YW5jZSA9IEFUT01JQ19JTklUKDApOworCiAvKiBQYXJhbWV0ZXIgZGVjbGFyYXRpb25zICovCiBzdGF0aWMgaW50IGNhcmR0eXBlW0NYMThfTUFYX0NBUkRTXTsKIHN0YXRpYyBpbnQgdHVuZXJbQ1gxOF9NQVhfQ0FSRFNdID0geyAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsCkBAIC0xNTksNyArMTUxLDcgQEAKIAkJICJcdFx0XHQgNCA9IFl1YW4gTVBDNzE4XG4iCiAJCSAiXHRcdFx0IDUgPSBDb25leGFudCBSYXB0b3IgUEFML1NFQ0FNXG4iCiAJCSAiXHRcdFx0IDYgPSBUb3NoaWJhIFFvc21pbyBEVkItVC9BbmFsb2dcbiIKLQkJICJcdFx0XHQgNyA9IExlYWR0ZWsgV2luRmFzdCBQVlIyMTAwXG4iCisJCSAiXHRcdFx0IDcgPSBMZWFkdGVrIFdpbkZhc3QgUFZSMjEwMC9EVlIzMTAwIEhcbiIKIAkJICJcdFx0XHQgMCA9IEF1dG9kZXRlY3QgKGRlZmF1bHQpXG4iCiAJCSAiXHRcdFx0LTEgPSBJZ25vcmUgdGhpcyBjYXJkXG5cdFx0Iik7CiBNT0RVTEVfUEFSTV9ERVNDKHBhbCwgIlNldCBQQUwgc3RhbmRhcmQ6IEIsIEcsIEgsIEQsIEssIEksIE0sIE4sIE5jLCA2MCIpOwpAQCAtMjc3LDExICsyNjksMTYgQEAKIC8qIEhhdXBwYXVnZSBjYXJkPyBnZXQgdmFsdWVzIGZyb20gdHZlZXByb20gKi8KIHZvaWQgY3gxOF9yZWFkX2VlcHJvbShzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCB0dmVlcHJvbSAqdHYpCiB7CisJc3RydWN0IGkyY19jbGllbnQgYzsKIAl1OCBlZWRhdGFbMjU2XTsKIAotCWN4LT5pMmNfY2xpZW50WzBdLmFkZHIgPSAweEEwID4+IDE7Ci0JdHZlZXByb21fcmVhZCgmY3gtPmkyY19jbGllbnRbMF0sIGVlZGF0YSwgc2l6ZW9mKGVlZGF0YSkpOwotCXR2ZWVwcm9tX2hhdXBwYXVnZV9hbmFsb2coJmN4LT5pMmNfY2xpZW50WzBdLCB0diwgZWVkYXRhKTsKKwltZW1zZXQoJmMsIDAsIHNpemVvZihjKSk7CisJc3RybGNweShjLm5hbWUsICJjeDE4IHR2ZWVwcm9tIHRtcCIsIHNpemVvZihjLm5hbWUpKTsKKwljLmFkYXB0ZXIgPSAmY3gtPmkyY19hZGFwWzBdOworCWMuYWRkciA9IDB4QTAgPj4gMTsKKworCXR2ZWVwcm9tX3JlYWQoJmMsIGVlZGF0YSwgc2l6ZW9mKGVlZGF0YSkpOworCXR2ZWVwcm9tX2hhdXBwYXVnZV9hbmFsb2coJmMsIHR2LCBlZWRhdGEpOwogfQogCiBzdGF0aWMgdm9pZCBjeDE4X3Byb2Nlc3NfZWVwcm9tKHN0cnVjdCBjeDE4ICpjeCkKQEAgLTQ0OCwzNCArNDQ1LDM4IEBACiAJY3gtPnN0cmVhbV9idWZfc2l6ZVtDWDE4X0VOQ19TVFJFQU1fVFlQRV9NUEddID0gZW5jX21wZ19idWZzaXplOwogCWN4LT5zdHJlYW1fYnVmX3NpemVbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfSURYXSA9IGVuY19pZHhfYnVmc2l6ZTsKIAljeC0+c3RyZWFtX2J1Zl9zaXplW0NYMThfRU5DX1NUUkVBTV9UWVBFX1lVVl0gPSBlbmNfeXV2X2J1ZnNpemU7Ci0JY3gtPnN0cmVhbV9idWZfc2l6ZVtDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkldID0gMDsgLyogY29tcHV0ZWQgbGF0ZXIgKi8KKwljeC0+c3RyZWFtX2J1Zl9zaXplW0NYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSV0gPSB2YmlfYWN0aXZlX3NhbXBsZXMgKiAzNjsKIAljeC0+c3RyZWFtX2J1Zl9zaXplW0NYMThfRU5DX1NUUkVBTV9UWVBFX1BDTV0gPSBlbmNfcGNtX2J1ZnNpemU7CiAJY3gtPnN0cmVhbV9idWZfc2l6ZVtDWDE4X0VOQ19TVFJFQU1fVFlQRV9SQURdID0gMDsgLyogY29udHJvbCBubyBkYXRhICovCiAKLQkvKiBFeGNlcHQgZm9yIFZCSSBlbnN1cmUgc3RyZWFtX2J1ZmZlcnMgJiBzdHJlYW1fYnVmX3NpemUgYXJlIHZhbGlkICovCisJLyogRW5zdXJlIHN0cmVhbV9idWZmZXJzICYgc3RyZWFtX2J1Zl9zaXplIGFyZSB2YWxpZCAqLwogCWZvciAoaSA9IDA7IGkgPCBDWDE4X01BWF9TVFJFQU1TOyBpKyspIHsKLQkJLyogVXNlciBzYWlkIHRvIHVzZSAwIGJ1ZmZlcnMgKi8KLQkJaWYgKGN4LT5zdHJlYW1fYnVmZmVyc1tpXSA9PSAwKSB7Ci0JCQljeC0+b3B0aW9ucy5tZWdhYnl0ZXNbaV0gPSAwOwotCQkJY3gtPnN0cmVhbV9idWZfc2l6ZVtpXSA9IDA7Ci0JCQljb250aW51ZTsKLQkJfQotCQkvKiBVc2VyIHNhaWQgdG8gdXNlIDAgTUIgdG90YWwgKi8KLQkJaWYgKGN4LT5vcHRpb25zLm1lZ2FieXRlc1tpXSA8PSAwKSB7CisJCWlmIChjeC0+c3RyZWFtX2J1ZmZlcnNbaV0gPT0gMCB8fCAgICAgLyogVXNlciBzYWlkIDAgYnVmZmVycyAqLworCQkgICAgY3gtPm9wdGlvbnMubWVnYWJ5dGVzW2ldIDw9IDAgfHwgIC8qIFVzZXIgc2FpZCAwIE1CIHRvdGFsICovCisJCSAgICBjeC0+c3RyZWFtX2J1Zl9zaXplW2ldIDw9IDApIHsgICAgLyogVXNlciBzYWlkIGJ1ZiBzaXplIDAgKi8KIAkJCWN4LT5vcHRpb25zLm1lZ2FieXRlc1tpXSA9IDA7CiAJCQljeC0+c3RyZWFtX2J1ZmZlcnNbaV0gPSAwOwogCQkJY3gtPnN0cmVhbV9idWZfc2l6ZVtpXSA9IDA7CiAJCQljb250aW51ZTsKIAkJfQotCQkvKiBWQkkgaXMgY29tcHV0ZWQgbGF0ZXIgb3IgdXNlciBzYWlkIGJ1ZmZlciBoYXMgc2l6ZSAwICovCi0JCWlmIChjeC0+c3RyZWFtX2J1Zl9zaXplW2ldIDw9IDApIHsKLQkJCWlmIChpICE9IENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSSkgewotCQkJCWN4LT5vcHRpb25zLm1lZ2FieXRlc1tpXSA9IDA7Ci0JCQkJY3gtPnN0cmVhbV9idWZmZXJzW2ldID0gMDsKLQkJCQljeC0+c3RyZWFtX2J1Zl9zaXplW2ldID0gMDsKKwkJLyoKKwkJICogVkJJIGlzIGEgc3BlY2lhbCBjYXNlIHdoZXJlIHRoZSBzdHJlYW1fYnVmX3NpemUgaXMgZml4ZWQKKwkJICogYW5kIGFscmVhZHkgaW4gYnl0ZXMKKwkJICovCisJCWlmIChpID09IENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSSkgeworCQkJaWYgKGN4LT5zdHJlYW1fYnVmZmVyc1tpXSA8IDApIHsKKwkJCQljeC0+c3RyZWFtX2J1ZmZlcnNbaV0gPQorCQkJCQljeC0+b3B0aW9ucy5tZWdhYnl0ZXNbaV0gKiAxMDI0ICogMTAyNAorCQkJCQkvIGN4LT5zdHJlYW1fYnVmX3NpemVbaV07CisJCQl9IGVsc2UgeworCQkJCS8qIE4uQi4gVGhpcyBtaWdodCByb3VuZCBkb3duIHRvIDAgKi8KKwkJCQljeC0+b3B0aW9ucy5tZWdhYnl0ZXNbaV0gPQorCQkJCQljeC0+c3RyZWFtX2J1ZmZlcnNbaV0KKwkJCQkJKiBjeC0+c3RyZWFtX2J1Zl9zaXplW2ldLygxMDI0ICogMTAyNCk7CiAJCQl9CiAJCQljb250aW51ZTsKIAkJfQorCQkvKiBBbGwgb3RoZXIgc3RyZWFtcyBoYXZlIHN0cmVhbV9idWZfc2l6ZSBpbiBrQiBhdCB0aGlzIHBvaW50ICovCiAJCWlmIChjeC0+c3RyZWFtX2J1ZmZlcnNbaV0gPCAwKSB7CiAJCQljeC0+c3RyZWFtX2J1ZmZlcnNbaV0gPSBjeC0+b3B0aW9ucy5tZWdhYnl0ZXNbaV0gKiAxMDI0CiAJCQkJCQkvIGN4LT5zdHJlYW1fYnVmX3NpemVbaV07CkBAIC00ODcsOSArNDg4LDkgQEAKIAkJY3gtPnN0cmVhbV9idWZfc2l6ZVtpXSAqPSAxMDI0OyAvKiBjb252ZXJ0IGZyb20ga0IgdG8gYnl0ZXMgKi8KIAl9CiAKLQljeC0+b3B0aW9ucy5jYXJkdHlwZSA9IGNhcmR0eXBlW2N4LT5udW1dOwotCWN4LT5vcHRpb25zLnR1bmVyID0gdHVuZXJbY3gtPm51bV07Ci0JY3gtPm9wdGlvbnMucmFkaW8gPSByYWRpb1tjeC0+bnVtXTsKKwljeC0+b3B0aW9ucy5jYXJkdHlwZSA9IGNhcmR0eXBlW2N4LT5pbnN0YW5jZV07CisJY3gtPm9wdGlvbnMudHVuZXIgPSB0dW5lcltjeC0+aW5zdGFuY2VdOworCWN4LT5vcHRpb25zLnJhZGlvID0gcmFkaW9bY3gtPmluc3RhbmNlXTsKIAogCWN4LT5zdGQgPSBjeDE4X3BhcnNlX3N0ZChjeCk7CiAJaWYgKGN4LT5vcHRpb25zLmNhcmR0eXBlID09IC0xKSB7CkBAIC01MDIsNyArNTAzLDcgQEAKIAllbHNlIGlmIChjeC0+b3B0aW9ucy5jYXJkdHlwZSAhPSAwKQogCQlDWDE4X0VSUigiVW5rbm93biB1c2VyIHNwZWNpZmllZCB0eXBlLCB0cnlpbmcgdG8gYXV0b2RldGVjdCBjYXJkXG4iKTsKIAlpZiAoY3gtPmNhcmQgPT0gTlVMTCkgewotCQlpZiAoY3gtPmRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBDWDE4X1BDSV9JRF9IQVVQUEFVR0UpIHsKKwkJaWYgKGN4LT5wY2lfZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IENYMThfUENJX0lEX0hBVVBQQVVHRSkgewogCQkJY3gtPmNhcmQgPSBjeDE4X2dldF9jYXJkKENYMThfQ0FSRF9IVlJfMTYwMF9FU01UKTsKIAkJCUNYMThfSU5GTygiQXV0b2RldGVjdGVkIEhhdXBwYXVnZSBjYXJkXG4iKTsKIAkJfQpAQCAtNTEyLDEzICs1MTMsMTMgQEAKIAkJCWlmIChjeC0+Y2FyZC0+cGNpX2xpc3QgPT0gTlVMTCkKIAkJCQljb250aW51ZTsKIAkJCWZvciAoaiA9IDA7IGN4LT5jYXJkLT5wY2lfbGlzdFtqXS5kZXZpY2U7IGorKykgewotCQkJCWlmIChjeC0+ZGV2LT5kZXZpY2UgIT0KKwkJCQlpZiAoY3gtPnBjaV9kZXYtPmRldmljZSAhPQogCQkJCSAgICBjeC0+Y2FyZC0+cGNpX2xpc3Rbal0uZGV2aWNlKQogCQkJCQljb250aW51ZTsKLQkJCQlpZiAoY3gtPmRldi0+c3Vic3lzdGVtX3ZlbmRvciAhPQorCQkJCWlmIChjeC0+cGNpX2Rldi0+c3Vic3lzdGVtX3ZlbmRvciAhPQogCQkJCSAgICBjeC0+Y2FyZC0+cGNpX2xpc3Rbal0uc3Vic3lzdGVtX3ZlbmRvcikKIAkJCQkJY29udGludWU7Ci0JCQkJaWYgKGN4LT5kZXYtPnN1YnN5c3RlbV9kZXZpY2UgIT0KKwkJCQlpZiAoY3gtPnBjaV9kZXYtPnN1YnN5c3RlbV9kZXZpY2UgIT0KIAkJCQkgICAgY3gtPmNhcmQtPnBjaV9saXN0W2pdLnN1YnN5c3RlbV9kZXZpY2UpCiAJCQkJCWNvbnRpbnVlOwogCQkJCUNYMThfSU5GTygiQXV0b2RldGVjdGVkICVzIGNhcmRcbiIsIGN4LT5jYXJkLT5uYW1lKTsKQEAgLTUzMSw5ICs1MzIsMTAgQEAKIAlpZiAoY3gtPmNhcmQgPT0gTlVMTCkgewogCQljeC0+Y2FyZCA9IGN4MThfZ2V0X2NhcmQoQ1gxOF9DQVJEX0hWUl8xNjAwX0VTTVQpOwogCQlDWDE4X0VSUigiVW5rbm93biBjYXJkOiB2ZW5kb3IvZGV2aWNlOiBbJTA0eDolMDR4XVxuIiwKLQkJICAgICBjeC0+ZGV2LT52ZW5kb3IsIGN4LT5kZXYtPmRldmljZSk7CisJCQkgY3gtPnBjaV9kZXYtPnZlbmRvciwgY3gtPnBjaV9kZXYtPmRldmljZSk7CiAJCUNYMThfRVJSKCIgICAgICAgICAgICAgIHN1YnN5c3RlbSB2ZW5kb3IvZGV2aWNlOiBbJTA0eDolMDR4XVxuIiwKLQkJICAgICBjeC0+ZGV2LT5zdWJzeXN0ZW1fdmVuZG9yLCBjeC0+ZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKKwkJCSBjeC0+cGNpX2Rldi0+c3Vic3lzdGVtX3ZlbmRvciwKKwkJCSBjeC0+cGNpX2Rldi0+c3Vic3lzdGVtX2RldmljZSk7CiAJCUNYMThfRVJSKCJEZWZhdWx0aW5nIHRvICVzIGNhcmRcbiIsIGN4LT5jYXJkLT5uYW1lKTsKIAkJQ1gxOF9FUlIoIlBsZWFzZSBtYWlsIHRoZSB2ZW5kb3IvZGV2aWNlIGFuZCBzdWJzeXN0ZW0gdmVuZG9yL2RldmljZSBJRHMgYW5kIHdoYXQga2luZCBvZlxuIik7CiAJCUNYMThfRVJSKCJjYXJkIHlvdSBoYXZlIHRvIHRoZSBpdnR2LWRldmVsIG1haWxpbmdsaXN0ICh3d3cuaXZ0dmRyaXZlci5vcmcpXG4iKTsKQEAgLTU0NSw3ICs1NDcsNyBAQAogfQogCiAvKiBQcmVjb25kaXRpb246IHRoZSBjeDE4IHN0cnVjdHVyZSBoYXMgYmVlbiBtZW1zZXQgdG8gMC4gT25seQotICAgdGhlIGRldiBhbmQgbnVtIGZpZWxkcyBoYXZlIGJlZW4gZmlsbGVkIGluLgorICAgdGhlIGRldiBhbmQgaW5zdGFuY2UgZmllbGRzIGhhdmUgYmVlbiBmaWxsZWQgaW4uCiAgICBObyBhc3N1bXB0aW9ucyBvbiB0aGUgY2FyZCB0eXBlIG1heSBiZSBtYWRlIGhlcmUgKHNlZSBjeDE4X2luaXRfc3RydWN0MgogICAgZm9yIHRoYXQpLgogICovCkBAIC01NTMsMTggKzU1NSwxNCBAQAogewogCWludCBpOwogCi0JY3gtPmJhc2VfYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChjeC0+ZGV2LCAwKTsKKwljeC0+YmFzZV9hZGRyID0gcGNpX3Jlc291cmNlX3N0YXJ0KGN4LT5wY2lfZGV2LCAwKTsKIAogCW11dGV4X2luaXQoJmN4LT5zZXJpYWxpemVfbG9jayk7Ci0JbXV0ZXhfaW5pdCgmY3gtPmkyY19idXNfbG9ja1swXSk7Ci0JbXV0ZXhfaW5pdCgmY3gtPmkyY19idXNfbG9ja1sxXSk7CiAJbXV0ZXhfaW5pdCgmY3gtPmdwaW9fbG9jayk7CiAJbXV0ZXhfaW5pdCgmY3gtPmVwdTJhcHVfbWJfbG9jayk7CiAJbXV0ZXhfaW5pdCgmY3gtPmVwdTJjcHVfbWJfbG9jayk7CiAKLQlzcGluX2xvY2tfaW5pdCgmY3gtPmxvY2spOwotCi0JY3gtPndvcmtfcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShjeC0+bmFtZSk7CisJY3gtPndvcmtfcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShjeC0+djRsMl9kZXYubmFtZSk7CiAJaWYgKGN4LT53b3JrX3F1ZXVlID09IE5VTEwpIHsKIAkJQ1gxOF9FUlIoIlVuYWJsZSB0byBjcmVhdGUgd29yayBoYW5kZXIgdGhyZWFkXG4iKTsKIAkJcmV0dXJuIC1FTk9NRU07CkBAIC01ODcsNyArNTg1LDggQEAKIAkJKGN4LT5wYXJhbXMudmlkZW9fdGVtcG9yYWxfZmlsdGVyX21vZGUgPDwgMSkgfAogCQkoY3gtPnBhcmFtcy52aWRlb19tZWRpYW5fZmlsdGVyX3R5cGUgPDwgMik7CiAJY3gtPnBhcmFtcy5wb3J0ID0gQ1gyMzQxWF9QT1JUX01FTU9SWTsKLQljeC0+cGFyYW1zLmNhcGFiaWxpdGllcyA9IENYMjM0MVhfQ0FQX0hBU19UUzsKKwljeC0+cGFyYW1zLmNhcGFiaWxpdGllcyA9CisJCQkJQ1gyMzQxWF9DQVBfSEFTX1RTIHwgQ1gyMzQxWF9DQVBfSEFTX1NMSUNFRF9WQkk7CiAJaW5pdF93YWl0cXVldWVfaGVhZCgmY3gtPmNhcF93KTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjeC0+bWJfYXB1X3dhaXRxKTsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZjeC0+bWJfY3B1X3dhaXRxKTsKQEAgLTU5Nyw0OSArNTk2LDYgQEAKIAljeC0+dmJpLmluLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZCSV9DQVBUVVJFOwogCWN4LT52Ymkuc2xpY2VkX2luID0gJmN4LT52YmkuaW4uZm10LnNsaWNlZDsKIAotCS8qCi0JICogVGhlIFZCSSBsaW5lIHNpemVzIGRlcGVuZCBvbiB0aGUgcGl4ZWwgY2xvY2sgYW5kIHRoZSBob3JpeiByYXRlCi0JICoKLQkgKiAoMS9GaCkqKDIqRnApID0gU2FtcGxlcy9saW5lCi0JICogICAgID0gNCBieXRlcyBFQVYgKyBBbmMgZGF0YSBpbiBoYmxhbmsgKyA0IGJ5dGVzIFNBViArIGFjdGl2ZSBzYW1wbGVzCi0JICoKLQkgKiAgU2xpY2VkIFZCSSBpcyBzZW50IGFzIGFuY2lsbGFyeSBkYXRhIGR1cmluZyBob3Jpem9udGFsIGJsYW5raW5nCi0JICogIFJhdyBWQkkgaXMgc2VudCBhcyBhY3RpdmUgdmlkZW8gc2FtcGxlcyBkdXJpbmcgdmVydGNhbCBibGFua2luZwotCSAqCi0JICogIFdlIHVzZSBhICBCVC42NTYgcHhpZWwgY2xvY2sgb2YgMTMuNSBNSHogYW5kIGEgQlQuNjU2IGFjdGl2ZSBsaW5lCi0JICogIGxlbmd0aCBvZiA3MjAgcGl4ZWxzIEAgNDoyOjIgc2FtcGxpbmcuICBUaHVzLi4uCi0JICoKLQkgKiAgRm9yIHN5c3RlbXMgdGhhdCB1c2UgYSAxNS43MzQga0h6IGhvcml6b250YWwgcmF0ZSwgc3VjaCBhcwotCSAqICBOVFNDLU0sIFBBTC1NLCBQQUwtNjAsIGFuZCBvdGhlciA2MCBIei81MjUgbGluZSBzeXN0ZW1zLCB3ZSBoYXZlOgotCSAqCi0JICogICgxLzE1LjczNCBrSHopICogMiAqIDEzLjUgTUh6ID0gMTcxNiBzYW1wbGVzL2xpbmUgPQotCSAqICA0IGJ5dGVzIFNBViArIDI2OCBieXRlcyBhbmMgZGF0YSArIDQgYnl0ZXMgU0FWICsgMTQ0MCBhY3RpdmUgc2FtcGxlcwotCSAqCi0JICogIEZvciBzeXN0ZW1zIHRoYXQgdXNlIGEgMTUuNjI1IGtIeiBob3Jpem9udGFsIHJhdGUsIHN1Y2ggYXMKLQkgKiAgUEFMLUIvRy9ILCBQQUwtSSwgU0VDQU0tTCBhbmQgb3RoZXIgNTAgSHovNjI1IGxpbmUgc3lzdGVtcywgd2UgaGF2ZToKLQkgKgotCSAqICAoMS8xNS42MjUga0h6KSAqIDIgKiAxMy41IE1IeiA9IDE3Mjggc2FtcGxlcy9saW5lID0KLQkgKiAgNCBieXRlcyBTQVYgKyAyODAgYnl0ZXMgYW5jIGRhdGEgKyA0IGJ5dGVzIFNBViArIDE0NDAgYWN0aXZlIHNhbXBsZXMKLQkgKgotCSAqLwotCi0JLyogRklYTUU6IGluaXQgdGhlc2UgYmFzZWQgb24gdHVuZXIgc3RkICYgbW9kaWZ5IHdoZW4gc3RkIGNoYW5nZXMgKi8KLQkvKiBDWDE4LUFWLUNvcmUgbnVtYmVyIG9mIFZCSSBzYW1wbGVzIG91dHB1dCBwZXIgaG9yaXpvbnRhbCBsaW5lICovCi0JY3gtPnZiaS5yYXdfZGVjb2Rlcl9saW5lX3NpemUgPSAxNDQ0OyAgIC8qIDQgYnl0ZSBTQVYgKyAyICogNzIwICovCi0JY3gtPnZiaS5zbGljZWRfZGVjb2Rlcl9saW5lX3NpemUgPSAyNzI7IC8qIDYwIEh6OiAyNjgrNCwgNTAgSHo6IDI4MCs0ICovCi0KLQkvKiBDWDE4LUFWLUNvcmUgVkJJIHNhbXBsZXMvbGluZSBwb3NzaWJseSByb3VuZGVkIHVwICovCi0JY3gtPnZiaS5yYXdfc2l6ZSA9IDE0NDQ7ICAgLyogUmVhbCBtYXggc2l6ZSBpcyAxNDQ0ICovCi0JY3gtPnZiaS5zbGljZWRfc2l6ZSA9IDI4NDsgLyogUmVhbCBtYXggc2l6ZSBpcyAgMjg0ICovCi0KLQkvKgotCSAqIENYMTgtQVYtQ29yZSBTQVYvRUFWIFJQIGNvZGVzIGluIFZJUCAxLnggbW9kZQotCSAqIFRhc2sgRmllbGQgVmVydGljYWxCbGFuayBIb3Jpem9udGFsQmxhbmsgMCAwIDAgMAotCSAqLwotCWN4LT52YmkucmF3X2RlY29kZXJfc2F2X29kZF9maWVsZCA9IDB4MjA7ICAgICAvKiAgIFYgICovCi0JY3gtPnZiaS5yYXdfZGVjb2Rlcl9zYXZfZXZlbl9maWVsZCA9IDB4NjA7ICAgIC8qICBGViAgKi8KLQljeC0+dmJpLnNsaWNlZF9kZWNvZGVyX3Nhdl9vZGRfZmllbGQgPSAweEIwOyAgLyogVCBWSCAtIGFjdHVhbGx5IEVBViAqLwotCWN4LT52Ymkuc2xpY2VkX2RlY29kZXJfc2F2X2V2ZW5fZmllbGQgPSAweEYwOyAvKiBURlZIIC0gYWN0dWFsbHkgRUFWICovCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY2OCwxNSArNjI0LDkgQEAKIAkJaSA9IDA7CiAJY3gtPmFjdGl2ZV9pbnB1dCA9IGk7CiAJY3gtPmF1ZGlvX2lucHV0ID0gY3gtPmNhcmQtPnZpZGVvX2lucHV0c1tpXS5hdWRpb19pbmRleDsKLQljeC0+YXZfc3RhdGUudmlkX2lucHV0ID0gQ1gxOF9BVl9DT01QT1NJVEU3OwotCWN4LT5hdl9zdGF0ZS5hdWRfaW5wdXQgPSBDWDE4X0FWX0FVRElPODsKLQljeC0+YXZfc3RhdGUuYXVkY2xrX2ZyZXEgPSA0ODAwMDsKLQljeC0+YXZfc3RhdGUuYXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9MQU5HMTsKLQkvKiBGSVhNRSAtIDggaXMgTlRTQyB2YWx1ZSwgaW52ZXN0aWdhdGUgKi8KLQljeC0+YXZfc3RhdGUudmJpX2xpbmVfb2Zmc2V0ID0gODsKIH0KIAotc3RhdGljIGludCBjeDE4X3NldHVwX3BjaShzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCBwY2lfZGV2ICpkZXYsCitzdGF0aWMgaW50IGN4MThfc2V0dXBfcGNpKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYsCiAJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCiB7CiAJdTE2IGNtZDsKQEAgLTY4NCwxMjQgKzYzNCwxMjUgQEAKIAogCUNYMThfREVCVUdfSU5GTygiRW5hYmxpbmcgcGNpIGRldmljZVxuIik7CiAKLQlpZiAocGNpX2VuYWJsZV9kZXZpY2UoZGV2KSkgewotCQlDWDE4X0VSUigiQ2FuJ3QgZW5hYmxlIGRldmljZSAlZCFcbiIsIGN4LT5udW0pOworCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2lfZGV2KSkgeworCQlDWDE4X0VSUigiQ2FuJ3QgZW5hYmxlIGRldmljZSAlZCFcbiIsIGN4LT5pbnN0YW5jZSk7CiAJCXJldHVybiAtRUlPOwogCX0KLQlpZiAocGNpX3NldF9kbWFfbWFzayhkZXYsIDB4ZmZmZmZmZmYpKSB7Ci0JCUNYMThfRVJSKCJObyBzdWl0YWJsZSBETUEgYXZhaWxhYmxlIG9uIGNhcmQgJWQuXG4iLCBjeC0+bnVtKTsKKwlpZiAocGNpX3NldF9kbWFfbWFzayhwY2lfZGV2LCAweGZmZmZmZmZmKSkgeworCQlDWDE4X0VSUigiTm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZSwgY2FyZCAlZFxuIiwgY3gtPmluc3RhbmNlKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCWlmICghcmVxdWVzdF9tZW1fcmVnaW9uKGN4LT5iYXNlX2FkZHIsIENYMThfTUVNX1NJWkUsICJjeDE4IGVuY29kZXIiKSkgewotCQlDWDE4X0VSUigiQ2Fubm90IHJlcXVlc3QgZW5jb2RlciBtZW1vcnkgcmVnaW9uIG9uIGNhcmQgJWQuXG4iLCBjeC0+bnVtKTsKKwkJQ1gxOF9FUlIoIkNhbm5vdCByZXF1ZXN0IGVuY29kZXIgbWVtb3J5IHJlZ2lvbiwgY2FyZCAlZFxuIiwKKwkJCSBjeC0+aW5zdGFuY2UpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAkvKiBFbmFibGUgYnVzIG1hc3RlcmluZyBhbmQgbWVtb3J5IG1hcHBlZCBJTyBmb3IgdGhlIENYMjM0MTggKi8KLQlwY2lfcmVhZF9jb25maWdfd29yZChkZXYsIFBDSV9DT01NQU5ELCAmY21kKTsKKwlwY2lfcmVhZF9jb25maWdfd29yZChwY2lfZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7CiAJY21kIHw9IFBDSV9DT01NQU5EX01FTU9SWSB8IFBDSV9DT01NQU5EX01BU1RFUjsKLQlwY2lfd3JpdGVfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgY21kKTsKKwlwY2lfd3JpdGVfY29uZmlnX3dvcmQocGNpX2RldiwgUENJX0NPTU1BTkQsIGNtZCk7CiAKLQlwY2lfcmVhZF9jb25maWdfYnl0ZShkZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJmN4LT5jYXJkX3Jldik7Ci0JcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgJnBjaV9sYXRlbmN5KTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwY2lfZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZjeC0+Y2FyZF9yZXYpOworCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBjaV9kZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAmcGNpX2xhdGVuY3kpOwogCiAJaWYgKHBjaV9sYXRlbmN5IDwgNjQgJiYgY3gxOF9wY2lfbGF0ZW5jeSkgewogCQlDWDE4X0lORk8oIlVucmVhc29uYWJseSBsb3cgbGF0ZW5jeSB0aW1lciwgIgogCQkJICAgICAgICJzZXR0aW5nIHRvIDY0ICh3YXMgJWQpXG4iLCBwY2lfbGF0ZW5jeSk7Ci0JCXBjaV93cml0ZV9jb25maWdfYnl0ZShkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCA2NCk7Ci0JCXBjaV9yZWFkX2NvbmZpZ19ieXRlKGRldiwgUENJX0xBVEVOQ1lfVElNRVIsICZwY2lfbGF0ZW5jeSk7CisJCXBjaV93cml0ZV9jb25maWdfYnl0ZShwY2lfZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgNjQpOworCQlwY2lfcmVhZF9jb25maWdfYnl0ZShwY2lfZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgJnBjaV9sYXRlbmN5KTsKIAl9CiAKIAlDWDE4X0RFQlVHX0lORk8oImN4JWQgKHJldiAlZCkgYXQgJTAyeDolMDJ4LiV4LCAiCiAJCSAgICJpcnE6ICVkLCBsYXRlbmN5OiAlZCwgbWVtb3J5OiAweCVseFxuIiwKLQkJICAgY3gtPmRldi0+ZGV2aWNlLCBjeC0+Y2FyZF9yZXYsIGRldi0+YnVzLT5udW1iZXIsCi0JCSAgIFBDSV9TTE9UKGRldi0+ZGV2Zm4pLCBQQ0lfRlVOQyhkZXYtPmRldmZuKSwKLQkJICAgY3gtPmRldi0+aXJxLCBwY2lfbGF0ZW5jeSwgKHVuc2lnbmVkIGxvbmcpY3gtPmJhc2VfYWRkcik7CisJCSAgIGN4LT5wY2lfZGV2LT5kZXZpY2UsIGN4LT5jYXJkX3JldiwgcGNpX2Rldi0+YnVzLT5udW1iZXIsCisJCSAgIFBDSV9TTE9UKHBjaV9kZXYtPmRldmZuKSwgUENJX0ZVTkMocGNpX2Rldi0+ZGV2Zm4pLAorCQkgICBjeC0+cGNpX2Rldi0+aXJxLCBwY2lfbGF0ZW5jeSwgKHVuc2lnbmVkIGxvbmcpY3gtPmJhc2VfYWRkcik7CiAKIAlyZXR1cm4gMDsKIH0KIAotI2lmZGVmIE1PRFVMRQotc3RhdGljIHUzMiBjeDE4X3JlcXVlc3RfbW9kdWxlKHN0cnVjdCBjeDE4ICpjeCwgdTMyIGh3LAotCQljb25zdCBjaGFyICpuYW1lLCB1MzIgaWQpCi17Ci0JaWYgKChodyAmIGlkKSA9PSAwKQotCQlyZXR1cm4gaHc7Ci0JaWYgKHJlcXVlc3RfbW9kdWxlKG5hbWUpICE9IDApIHsKLQkJQ1gxOF9FUlIoIkZhaWxlZCB0byBsb2FkIG1vZHVsZSAlc1xuIiwgbmFtZSk7Ci0JCXJldHVybiBodyAmIH5pZDsKLQl9Ci0JQ1gxOF9ERUJVR19JTkZPKCJMb2FkZWQgbW9kdWxlICVzXG4iLCBuYW1lKTsKLQlyZXR1cm4gaHc7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgY3gxOF9sb2FkX2FuZF9pbml0X21vZHVsZXMoc3RydWN0IGN4MTggKmN4KQorc3RhdGljIHZvaWQgY3gxOF9pbml0X3N1YmRldnMoc3RydWN0IGN4MTggKmN4KQogewogCXUzMiBodyA9IGN4LT5jYXJkLT5od19hbGw7CisJdTMyIGRldmljZTsKIAlpbnQgaTsKIAotI2lmZGVmIE1PRFVMRQotCS8qIGxvYWQgbW9kdWxlcyAqLwotI2lmZGVmIENPTkZJR19NRURJQV9UVU5FUl9NT0RVTEUKLQlodyA9IGN4MThfcmVxdWVzdF9tb2R1bGUoY3gsIGh3LCAidHVuZXIiLCBDWDE4X0hXX1RVTkVSKTsKLSNlbmRpZgotI2lmZGVmIENPTkZJR19WSURFT19DUzUzNDVfTU9EVUxFCi0JaHcgPSBjeDE4X3JlcXVlc3RfbW9kdWxlKGN4LCBodywgImNzNTM0NSIsIENYMThfSFdfQ1M1MzQ1KTsKLSNlbmRpZgotI2VuZGlmCi0KLQkvKiBjaGVjayB3aGljaCBpMmMgZGV2aWNlcyBhcmUgYWN0dWFsbHkgZm91bmQgKi8KLQlmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgewotCQl1MzIgZGV2aWNlID0gMSA8PCBpOworCWZvciAoaSA9IDAsIGRldmljZSA9IDE7IGkgPCAzMjsgaSsrLCBkZXZpY2UgPDw9IDEpIHsKIAogCQlpZiAoIShkZXZpY2UgJiBodykpCiAJCQljb250aW51ZTsKLQkJaWYgKGRldmljZSA9PSBDWDE4X0hXX0dQSU8gfHwgZGV2aWNlID09IENYMThfSFdfVFZFRVBST00gfHwKLQkJICAgIGRldmljZSA9PSBDWDE4X0hXX0NYMjM0MTggfHwgZGV2aWNlID09IENYMThfSFdfRFZCKSB7Ci0JCQkvKiBUaGVzZSAnZGV2aWNlcycgZG8gbm90IHVzZSBpMmMgcHJvYmluZyAqLworCisJCXN3aXRjaCAoZGV2aWNlKSB7CisJCWNhc2UgQ1gxOF9IV19EVkI6CisJCWNhc2UgQ1gxOF9IV19UVkVFUFJPTToKKwkJCS8qIFRoZXNlIHN1Ym9yZGluYXRlIGRldmljZXMgZG8gbm90IHVzZSBwcm9iaW5nICovCiAJCQljeC0+aHdfZmxhZ3MgfD0gZGV2aWNlOwotCQkJY29udGludWU7CisJCQlicmVhazsKKwkJY2FzZSBDWDE4X0hXXzQxOF9BVjoKKwkJCS8qIFRoZSBBL1YgZGVjb2RlciBnZXRzIHByb2JlZCBlYXJsaWVyIHRvIHNldCBQTExzICovCisJCQkvKiBKdXN0IG5vdGUgdGhhdCB0aGUgY2FyZCB1c2VzIGl0IChpLmUuIGhhcyBhbmFsb2cpICovCisJCQljeC0+aHdfZmxhZ3MgfD0gZGV2aWNlOworCQkJYnJlYWs7CisJCWNhc2UgQ1gxOF9IV19HUElPX1JFU0VUX0NUUkw6CisJCQkvKgorCQkJICogVGhlIFJlc2V0IENvbnRyb2xsZXIgZ2V0cyBwcm9iZWQgYW5kIGFkZGVkIHRvCisJCQkgKiBod19mbGFncyBlYXJsaWVyIGZvciBpMmMgYWRhcHRlci9idXMgaW5pdGlhbGl6YXRpb24KKwkJCSAqLworCQkJYnJlYWs7CisJCWNhc2UgQ1gxOF9IV19HUElPX01VWDoKKwkJCWlmIChjeDE4X2dwaW9fcmVnaXN0ZXIoY3gsIGRldmljZSkgPT0gMCkKKwkJCQljeC0+aHdfZmxhZ3MgfD0gZGV2aWNlOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlpZiAoY3gxOF9pMmNfcmVnaXN0ZXIoY3gsIGkpID09IDApCisJCQkJY3gtPmh3X2ZsYWdzIHw9IGRldmljZTsKKwkJCWJyZWFrOwogCQl9Ci0JCWN4MThfaTJjX3JlZ2lzdGVyKGN4LCBpKTsKLQkJaWYgKGN4MThfaTJjX2h3X2FkZHIoY3gsIGRldmljZSkgPiAwKQotCQkJY3gtPmh3X2ZsYWdzIHw9IGRldmljZTsKIAl9CiAKLQlodyA9IGN4LT5od19mbGFnczsKKwlpZiAoY3gtPmh3X2ZsYWdzICYgQ1gxOF9IV180MThfQVYpCisJCWN4LT5zZF9hdiA9IGN4MThfZmluZF9odyhjeCwgQ1gxOF9IV180MThfQVYpOworCisJaWYgKGN4LT5jYXJkLT5od19tdXhlciAhPSAwKQorCQljeC0+c2RfZXh0bXV4ID0gY3gxOF9maW5kX2h3KGN4LCBjeC0+Y2FyZC0+aHdfbXV4ZXIpOwogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBjeDE4X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCitzdGF0aWMgaW50IF9fZGV2aW5pdCBjeDE4X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2LAogCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCiB7CiAJaW50IHJldHZhbCA9IDA7CiAJaW50IGk7Ci0JaW50IHZiaV9idWZfc2l6ZTsKIAl1MzIgZGV2dHlwZTsKIAlzdHJ1Y3QgY3gxOCAqY3g7CiAKLQlzcGluX2xvY2soJmN4MThfY2FyZHNfbG9jayk7Ci0KLQkvKiBNYWtlIHN1cmUgd2UndmUgZ290IGEgcGxhY2UgZm9yIHRoaXMgY2FyZCAqLwotCWlmIChjeDE4X2NhcmRzX2FjdGl2ZSA9PSBDWDE4X01BWF9DQVJEUykgewotCQlwcmludGsoS0VSTl9FUlIgImN4MTg6ICBNYXhpbXVtIG51bWJlciBvZiBjYXJkcyBkZXRlY3RlZCAoJWQpLlxuIiwKLQkJCSAgICAgIGN4MThfY2FyZHNfYWN0aXZlKTsKLQkJc3Bpbl91bmxvY2soJmN4MThfY2FyZHNfbG9jayk7CisJLyogRklYTUUgLSBtb2R1bGUgcGFyYW1ldGVyIGFycmF5cyBjb25zdHJhaW4gbWF4IGluc3RhbmNlcyAqLworCWkgPSBhdG9taWNfaW5jX3JldHVybigmY3gxOF9pbnN0YW5jZSkgLSAxOworCWlmIChpID49IENYMThfTUFYX0NBUkRTKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY3gxODogY2Fubm90IG1hbmFnZSBjYXJkICVkLCBkcml2ZXIgaGFzIGEgIgorCQkgICAgICAgImxpbWl0IG9mIDAgLSAlZFxuIiwgaSwgQ1gxOF9NQVhfQ0FSRFMgLSAxKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJY3ggPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgY3gxOCksIEdGUF9BVE9NSUMpOwotCWlmICghY3gpIHsKLQkJc3Bpbl91bmxvY2soJmN4MThfY2FyZHNfbG9jayk7CisJaWYgKGN4ID09IE5VTEwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJjeDE4OiBjYW5ub3QgbWFuYWdlIGNhcmQgJWQsIG91dCBvZiBtZW1vcnlcbiIsCisJCSAgICAgICBpKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWN4MThfY2FyZHNbY3gxOF9jYXJkc19hY3RpdmVdID0gY3g7Ci0JY3gtPmRldiA9IGRldjsKLQljeC0+bnVtID0gY3gxOF9jYXJkc19hY3RpdmUrKzsKLQlzbnByaW50ZihjeC0+bmFtZSwgc2l6ZW9mKGN4LT5uYW1lKSwgImN4MTgtJWQiLCBjeC0+bnVtKTsKLQlDWDE4X0lORk8oIkluaXRpYWxpemluZyBjYXJkICMlZFxuIiwgY3gtPm51bSk7CisJY3gtPnBjaV9kZXYgPSBwY2lfZGV2OworCWN4LT5pbnN0YW5jZSA9IGk7CiAKLQlzcGluX3VubG9jaygmY3gxOF9jYXJkc19sb2NrKTsKKwlyZXR2YWwgPSB2NGwyX2RldmljZV9yZWdpc3RlcigmcGNpX2Rldi0+ZGV2LCAmY3gtPnY0bDJfZGV2KTsKKwlpZiAocmV0dmFsKSB7CisJCXByaW50ayhLRVJOX0VSUiAiY3gxODogdjRsMl9kZXZpY2VfcmVnaXN0ZXIgb2YgY2FyZCAlZCBmYWlsZWQiCisJCSAgICAgICAiXG4iLCBjeC0+aW5zdGFuY2UpOworCQlrZnJlZShjeCk7CisJCXJldHVybiByZXR2YWw7CisJfQorCXNucHJpbnRmKGN4LT52NGwyX2Rldi5uYW1lLCBzaXplb2YoY3gtPnY0bDJfZGV2Lm5hbWUpLCAiY3gxOC0lZCIsCisJCSBjeC0+aW5zdGFuY2UpOworCUNYMThfSU5GTygiSW5pdGlhbGl6aW5nIGNhcmQgJWRcbiIsIGN4LT5pbnN0YW5jZSk7CiAKIAljeDE4X3Byb2Nlc3Nfb3B0aW9ucyhjeCk7CiAJaWYgKGN4LT5vcHRpb25zLmNhcmR0eXBlID09IC0xKSB7CkBAIC04MTYsMTMgKzc2NywxMCBAQAogCUNYMThfREVCVUdfSU5GTygiYmFzZSBhZGRyOiAweCUwOHhcbiIsIGN4LT5iYXNlX2FkZHIpOwogCiAJLyogUENJIERldmljZSBTZXR1cCAqLwotCXJldHZhbCA9IGN4MThfc2V0dXBfcGNpKGN4LCBkZXYsIHBjaV9pZCk7CisJcmV0dmFsID0gY3gxOF9zZXR1cF9wY2koY3gsIHBjaV9kZXYsIHBjaV9pZCk7CiAJaWYgKHJldHZhbCAhPSAwKQogCQlnb3RvIGZyZWVfd29ya3F1ZXVlOwogCi0JLyogc2F2ZSBjeCBpbiB0aGUgcGNpIHN0cnVjdCBmb3IgbGF0ZXIgdXNlICovCi0JcGNpX3NldF9kcnZkYXRhKGRldiwgY3gpOwotCiAJLyogbWFwIGlvIG1lbW9yeSAqLwogCUNYMThfREVCVUdfSU5GTygiYXR0ZW1wdGluZyBpb3JlbWFwIGF0IDB4JTA4eCBsZW4gMHglMDh4XG4iLAogCQkgICBjeC0+YmFzZV9hZGRyICsgQ1gxOF9NRU1fT0ZGU0VULCBDWDE4X01FTV9TSVpFKTsKQEAgLTg1Niw2ICs4MDQsMjMgQEAKIAogCWN4MThfZ3Bpb19pbml0KGN4KTsKIAorCS8qIEluaXRpYWxpemUgaW50ZWdyYXRlZCBBL1YgZGVjb2RlciBlYXJseSB0byBzZXQgUExMcywganVzdCBpbiBjYXNlICovCisJcmV0dmFsID0gY3gxOF9hdl9wcm9iZShjeCk7CisJaWYgKHJldHZhbCkgeworCQlDWDE4X0VSUigiQ291bGQgbm90IHJlZ2lzdGVyIEEvViBkZWNvZGVyIHN1YmRldmljZVxuIik7CisJCWdvdG8gZnJlZV9tYXA7CisJfQorCWN4MThfY2FsbF9odyhjeCwgQ1gxOF9IV180MThfQVYsIGNvcmUsIGluaXQsICh1MzIpIENYMThfQVZfSU5JVF9QTExTKTsKKworCS8qIEluaXRpYWxpemUgR1BJTyBSZXNldCBDb250cm9sbGVyIHRvIGRvIGNoaXAgcmVzZXRzIGR1cmluZyBpMmMgaW5pdCAqLworCWlmIChjeC0+Y2FyZC0+aHdfYWxsICYgQ1gxOF9IV19HUElPX1JFU0VUX0NUUkwpIHsKKwkJaWYgKGN4MThfZ3Bpb19yZWdpc3RlcihjeCwgQ1gxOF9IV19HUElPX1JFU0VUX0NUUkwpICE9IDApCisJCQlDWDE4X1dBUk4oIkNvdWxkIG5vdCByZWdpc3RlciBHUElPIHJlc2V0IGNvbnRyb2xsZXIiCisJCQkJICAic3ViZGV2aWNlOyBwcm9jZWVkaW5nIGFueXdheS5cbiIpOworCQllbHNlCisJCQljeC0+aHdfZmxhZ3MgfD0gQ1gxOF9IV19HUElPX1JFU0VUX0NUUkw7CisJfQorCiAJLyogYWN0aXZlIGkyYyAgKi8KIAlDWDE4X0RFQlVHX0lORk8oImFjdGl2YXRpbmcgaTJjLi4uXG4iKTsKIAlyZXR2YWwgPSBpbml0X2N4MThfaTJjKGN4KTsKQEAgLTg2NCw4ICs4MjksNiBAQAogCQlnb3RvIGZyZWVfbWFwOwogCX0KIAotCUNYMThfREVCVUdfSU5GTygiQWN0aXZlIGNhcmQgY291bnQ6ICVkLlxuIiwgY3gxOF9jYXJkc19hY3RpdmUpOwotCiAJaWYgKGN4LT5jYXJkLT5od19hbGwgJiBDWDE4X0hXX1RWRUVQUk9NKSB7CiAJCS8qIEJhc2VkIG9uIHRoZSBtb2RlbCBudW1iZXIgdGhlIGNhcmR0eXBlIG1heSBiZSBjaGFuZ2VkLgogCQkgICBUaGUgUENJIElEcyBhcmUgbm90IGFsd2F5cyByZWxpYWJsZS4gKi8KQEAgLTg4MSw4ICs4NDQsOSBAQAogCWN4MThfaW5pdF9zY2IoY3gpOwogCiAJLyogUmVnaXN0ZXIgSVJRICovCi0JcmV0dmFsID0gcmVxdWVzdF9pcnEoY3gtPmRldi0+aXJxLCBjeDE4X2lycV9oYW5kbGVyLAotCQkJICAgICBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsIGN4LT5uYW1lLCAodm9pZCAqKWN4KTsKKwlyZXR2YWwgPSByZXF1ZXN0X2lycShjeC0+cGNpX2Rldi0+aXJxLCBjeDE4X2lycV9oYW5kbGVyLAorCQkJICAgICBJUlFGX1NIQVJFRCB8IElSUUZfRElTQUJMRUQsCisJCQkgICAgIGN4LT52NGwyX2Rldi5uYW1lLCAodm9pZCAqKWN4KTsKIAlpZiAocmV0dmFsKSB7CiAJCUNYMThfRVJSKCJGYWlsZWQgdG8gcmVnaXN0ZXIgaXJxICVkXG4iLCByZXR2YWwpOwogCQlnb3RvIGZyZWVfaTJjOwpAQCAtOTE3LDMzICs4ODEsMTQgQEAKIAkgICBpbml0aWFsaXphdGlvbi4gKi8KIAljeDE4X2luaXRfc3RydWN0MihjeCk7CiAKLQljeDE4X2xvYWRfYW5kX2luaXRfbW9kdWxlcyhjeCk7CisJY3gxOF9pbml0X3N1YmRldnMoY3gpOwogCi0JaWYgKGN4LT5zdGQgJiBWNEwyX1NURF81MjVfNjApIHsKKwlpZiAoY3gtPnN0ZCAmIFY0TDJfU1REXzUyNV82MCkKIAkJY3gtPmlzXzYwaHogPSAxOwotCQljeC0+aXNfb3V0XzYwaHogPSAxOwotCX0gZWxzZSB7Ci0JCWN4LT5pc181MGh6ID0gMTsKLQkJY3gtPmlzX291dF81MGh6ID0gMTsKLQl9Ci0JY3gtPnBhcmFtcy52aWRlb19nb3Bfc2l6ZSA9IGN4LT5pc182MGh6ID8gMTUgOiAxMjsKLQotCS8qCi0JICogRklYTUU6IHNldHRpbmcgdGhlIGJ1ZmZlciBzaXplIGJhc2VkIG9uIHRoZSB0dW5lciBzdGFuZGFyZCBpcwotCSAqIHN1Ym9wdGltYWwsIGFzIHRoZSBDVkJTIGFuZCBTVmlkZW8gaW5wdXRzIGNvdWxkIHVzZSBhIGRpZmZlcmVudCBzdGQKLQkgKiBhbmQgdGhlIGJ1ZmZlciBjb3VsZCBlbmQgdXAgYmVpbmcgdG9vIHNtYWxsIGluIHRoYXQgY2FzZS4KLQkgKi8KLQl2YmlfYnVmX3NpemUgPSBjeC0+dmJpLnJhd19zaXplICogKGN4LT5pc182MGh6ID8gMjQgOiAzNikgLyAyOwotCWN4LT5zdHJlYW1fYnVmX3NpemVbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJXSA9IHZiaV9idWZfc2l6ZTsKLQotCWlmIChjeC0+c3RyZWFtX2J1ZmZlcnNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJXSA8IDApCi0JCWN4LT5zdHJlYW1fYnVmZmVyc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkldID0KLQkJICAgY3gtPm9wdGlvbnMubWVnYWJ5dGVzW0NYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSV0gKiAxMDI0ICogMTAyNAotCQkgICAvIHZiaV9idWZfc2l6ZTsKIAllbHNlCi0JCWN4LT5vcHRpb25zLm1lZ2FieXRlc1tDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkldID0KLQkJICAgICBjeC0+c3RyZWFtX2J1ZmZlcnNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVkJJXSAqIHZiaV9idWZfc2l6ZQotCQkgICAgIC8gKDEwMjQgKiAxMDI0KTsKKwkJY3gtPmlzXzUwaHogPSAxOworCisJY3gtPnBhcmFtcy52aWRlb19nb3Bfc2l6ZSA9IGN4LT5pc182MGh6ID8gMTUgOiAxMjsKIAogCWlmIChjeC0+b3B0aW9ucy5yYWRpbyA+IDApCiAJCWN4LT52NGwyX2NhcCB8PSBWNEwyX0NBUF9SQURJTzsKQEAgLTk1Niw3ICs5MDEsNyBAQAogCQlzZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UVjsgIC8qIG1hdGNoZXMgVFYgdHVuZXJzICovCiAJCXNldHVwLnR1bmVyX2NhbGxiYWNrID0gKHNldHVwLnR5cGUgPT0gVFVORVJfWEMyMDI4KSA/CiAJCQljeDE4X3Jlc2V0X3R1bmVyX2dwaW8gOiBOVUxMOwotCQljeDE4X2NhbGxfaTJjX2NsaWVudHMoY3gsIFRVTkVSX1NFVF9UWVBFX0FERFIsICZzZXR1cCk7CisJCWN4MThfY2FsbF9hbGwoY3gsIHR1bmVyLCBzX3R5cGVfYWRkciwgJnNldHVwKTsKIAkJaWYgKHNldHVwLnR5cGUgPT0gVFVORVJfWEMyMDI4KSB7CiAJCQlzdGF0aWMgc3RydWN0IHhjMjAyOF9jdHJsIGN0cmwgPSB7CiAJCQkJLmZuYW1lID0gWEMyMDI4X0RFRkFVTFRfRklSTVdBUkUsCkBAIC05NjYsNyArOTExLDcgQEAKIAkJCQkudHVuZXIgPSBjeC0+b3B0aW9ucy50dW5lciwKIAkJCQkucHJpdiA9ICZjdHJsLAogCQkJfTsKLQkJCWN4MThfY2FsbF9pMmNfY2xpZW50cyhjeCwgVFVORVJfU0VUX0NPTkZJRywgJmNmZyk7CisJCQljeDE4X2NhbGxfYWxsKGN4LCB0dW5lciwgc19jb25maWcsICZjZmcpOwogCQl9CiAJfQogCkBAIC05ODUsMTQgKzkzMCwxMyBAQAogCQlnb3RvIGZyZWVfc3RyZWFtczsKIAl9CiAKLQlDWDE4X0lORk8oIkluaXRpYWxpemVkIGNhcmQgIyVkOiAlc1xuIiwgY3gtPm51bSwgY3gtPmNhcmRfbmFtZSk7Ci0KKwlDWDE4X0lORk8oIkluaXRpYWxpemVkIGNhcmQ6ICVzXG4iLCBjeC0+Y2FyZF9uYW1lKTsKIAlyZXR1cm4gMDsKIAogZnJlZV9zdHJlYW1zOgogCWN4MThfc3RyZWFtc19jbGVhbnVwKGN4LCAxKTsKIGZyZWVfaXJxOgotCWZyZWVfaXJxKGN4LT5kZXYtPmlycSwgKHZvaWQgKiljeCk7CisJZnJlZV9pcnEoY3gtPnBjaV9kZXYtPmlycSwgKHZvaWQgKiljeCk7CiBmcmVlX2kyYzoKIAlleGl0X2N4MThfaTJjKGN4KTsKIGZyZWVfbWFwOgpAQCAtMTAwNiwxMSArOTUwLDggQEAKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAlDWDE4X0VSUigiRXJyb3IgJWQgb24gaW5pdGlhbGl6YXRpb25cbiIsIHJldHZhbCk7CiAKLQlpID0gY3gtPm51bTsKLQlzcGluX2xvY2soJmN4MThfY2FyZHNfbG9jayk7Ci0Ja2ZyZWUoY3gxOF9jYXJkc1tpXSk7Ci0JY3gxOF9jYXJkc1tpXSA9IE5VTEw7Ci0Jc3Bpbl91bmxvY2soJmN4MThfY2FyZHNfbG9jayk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmY3gtPnY0bDJfZGV2KTsKKwlrZnJlZShjeCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMTA0Myw4ICs5ODQsMjEgQEAKIAl9CiAJc2V0X2JpdChDWDE4X0ZfSV9MT0FERURfRlcsICZjeC0+aV9mbGFncyk7CiAKLQkvKiBJbml0IHRoZSBmaXJtd2FyZSB0d2ljZSB0byB3b3JrIGFyb3VuZCBhIHNpbGljb24gYnVnCi0JICogdHJhbnNwb3J0IHJlbGF0ZWQuICovCisJLyoKKwkgKiBJbml0IHRoZSBmaXJtd2FyZSB0d2ljZSB0byB3b3JrIGFyb3VuZCBhIHNpbGljb24gYnVnCisJICogd2l0aCB0aGUgZGlnaXRhbCBUUy4KKwkgKgorCSAqIFRoZSBzZWNvbmQgZmlybXdhcmUgbG9hZCByZXF1aXJlcyB1cyB0byBub3JtYWxpemUgdGhlIEFQVSBzdGF0ZSwKKwkgKiBvciB0aGUgYXVkaW8gZm9yIHRoZSBmaXJzdCBhbmFsb2cgY2FwdHVyZSB3aWxsIGJlIGJhZGx5IGluY29ycmVjdC4KKwkgKgorCSAqIEkgY2FuJ3Qgc2VlbSB0byBjYWxsIEFQVV9SRVNFVEFJIGFuZCBoYXZlIGl0IHN1Y2NlZWQgd2l0aG91dCB0aGUKKwkgKiBBUFUgY2FwdHVyaW5nIGF1ZGlvLCBzbyB3ZSBzdGFydCBhbmQgc3RvcCBpdCBoZXJlIHRvIGRvIHRoZSByZXNldAorCSAqLworCisJLyogTVBFRyBFbmNvZGluZywgMjI0IGticHMsIE1QRUcgTGF5ZXIgSUksIDQ4IGtzcHMgKi8KKwljeDE4X3ZhcGkoY3gsIENYMThfQVBVX1NUQVJULCAyLCBDWDE4X0FQVV9FTkNPRElOR19NRVRIT0RfTVBFR3wweGI5LCAwKTsKKwljeDE4X3ZhcGkoY3gsIENYMThfQVBVX1JFU0VUQUksIDApOworCWN4MThfdmFwaShjeCwgQ1gxOF9BUFVfU1RPUCwgMSwgQ1gxOF9BUFVfRU5DT0RJTkdfTUVUSE9EX01QRUcpOwogCiAJZndfcmV0cnlfY291bnQgPSAzOwogCXdoaWxlICgtLWZ3X3JldHJ5X2NvdW50ID4gMCkgewpAQCAtMTA2MCw2ICsxMDE0LDIyIEBACiAJCXJldHVybiAtRU5YSU87CiAJfQogCisJLyoKKwkgKiBUaGUgc2Vjb25kIGZpcm13YXJlIGxvYWQgcmVxdWlyZXMgdXMgdG8gbm9ybWFsaXplIHRoZSBBUFUgc3RhdGUsCisJICogb3IgdGhlIGF1ZGlvIGZvciB0aGUgZmlyc3QgYW5hbG9nIGNhcHR1cmUgd2lsbCBiZSBiYWRseSBpbmNvcnJlY3QuCisJICoKKwkgKiBJIGNhbid0IHNlZW0gdG8gY2FsbCBBUFVfUkVTRVRBSSBhbmQgaGF2ZSBpdCBzdWNjZWVkIHdpdGhvdXQgdGhlCisJICogQVBVIGNhcHR1cmluZyBhdWRpbywgc28gd2Ugc3RhcnQgYW5kIHN0b3AgaXQgaGVyZSB0byBkbyB0aGUgcmVzZXQKKwkgKi8KKworCS8qIE1QRUcgRW5jb2RpbmcsIDIyNCBrYnBzLCBNUEVHIExheWVyIElJLCA0OCBrc3BzICovCisJY3gxOF92YXBpKGN4LCBDWDE4X0FQVV9TVEFSVCwgMiwgQ1gxOF9BUFVfRU5DT0RJTkdfTUVUSE9EX01QRUd8MHhiOSwgMCk7CisJY3gxOF92YXBpKGN4LCBDWDE4X0FQVV9SRVNFVEFJLCAwKTsKKwljeDE4X3ZhcGkoY3gsIENYMThfQVBVX1NUT1AsIDEsIENYMThfQVBVX0VOQ09ESU5HX01FVEhPRF9NUEVHKTsKKworCS8qIEluaXQgdGhlIEEvViBkZWNvZGVyLCBpZiBpdCBoYXNuJ3QgYmVlbiBhbHJlYWR5ICovCisJdjRsMl9zdWJkZXZfY2FsbChjeC0+c2RfYXYsIGNvcmUsIGluaXQsICh1MzIpIENYMThfQVZfSU5JVF9OT1JNQUwpOworCiAJdmYudHVuZXIgPSAwOwogCXZmLnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKIAl2Zi5mcmVxdWVuY3kgPSA2NDAwOyAvKiB0aGUgdHVuZXIgJ2Jhc2VsaW5lJyBmcmVxdWVuY3kgKi8KQEAgLTEwOTIsOSArMTA2MiwxMSBAQAogCiBzdGF0aWMgdm9pZCBjeDE4X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKIHsKLQlzdHJ1Y3QgY3gxOCAqY3ggPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB0b19jeDE4KHY0bDJfZGV2KTsKKwlpbnQgaTsKIAotCUNYMThfREVCVUdfSU5GTygiUmVtb3ZpbmcgQ2FyZCAjJWRcbiIsIGN4LT5udW0pOworCUNYMThfREVCVUdfSU5GTygiUmVtb3ZpbmcgQ2FyZFxuIik7CiAKIAkvKiBTdG9wIGFsbCBjYXB0dXJlcyAqLwogCUNYMThfREVCVUdfSU5GTygiU3RvcHBpbmcgYWxsIHN0cmVhbXNcbiIpOwpAQCAtMTExNSwxNSArMTA4NywyMiBAQAogCiAJZXhpdF9jeDE4X2kyYyhjeCk7CiAKLQlmcmVlX2lycShjeC0+ZGV2LT5pcnEsICh2b2lkICopY3gpOworCWZyZWVfaXJxKGN4LT5wY2lfZGV2LT5pcnEsICh2b2lkICopY3gpOwogCiAJY3gxOF9pb3VubWFwKGN4KTsKIAogCXJlbGVhc2VfbWVtX3JlZ2lvbihjeC0+YmFzZV9hZGRyLCBDWDE4X01FTV9TSVpFKTsKIAotCXBjaV9kaXNhYmxlX2RldmljZShjeC0+ZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoY3gtPnBjaV9kZXYpOwogCi0JQ1gxOF9JTkZPKCJSZW1vdmVkICVzLCBjYXJkICMlZFxuIiwgY3gtPmNhcmRfbmFtZSwgY3gtPm51bSk7CisJaWYgKGN4LT52Ymkuc2xpY2VkX21wZWdfZGF0YVswXSAhPSBOVUxMKQorCQlmb3IgKGkgPSAwOyBpIDwgQ1gxOF9WQklfRlJBTUVTOyBpKyspCisJCQlrZnJlZShjeC0+dmJpLnNsaWNlZF9tcGVnX2RhdGFbaV0pOworCisJQ1gxOF9JTkZPKCJSZW1vdmVkICVzXG4iLCBjeC0+Y2FyZF9uYW1lKTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIodjRsMl9kZXYpOworCWtmcmVlKGN4KTsKIH0KIAogLyogZGVmaW5lIGEgcGNpX2RyaXZlciBmb3IgY2FyZCBkZXRlY3Rpb24gKi8KQEAgLTExMzgsOCArMTExNyw2IEBACiB7CiAJcHJpbnRrKEtFUk5fSU5GTyAiY3gxODogIFN0YXJ0IGluaXRpYWxpemF0aW9uLCB2ZXJzaW9uICVzXG4iLCBDWDE4X1ZFUlNJT04pOwogCi0JbWVtc2V0KGN4MThfY2FyZHMsIDAsIHNpemVvZihjeDE4X2NhcmRzKSk7Ci0KIAkvKiBWYWxpZGF0ZSBwYXJhbWV0ZXJzICovCiAJaWYgKGN4MThfZmlyc3RfbWlub3IgPCAwIHx8IGN4MThfZmlyc3RfbWlub3IgPj0gQ1gxOF9NQVhfQ0FSRFMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJjeDE4OiAgRXhpdGluZywgY3gxOF9maXJzdF9taW5vciBtdXN0IGJlIGJldHdlZW4gMCBhbmQgJWRcbiIsCkBAIC0xMTYyLDE2ICsxMTM5LDcgQEAKIAogc3RhdGljIHZvaWQgbW9kdWxlX2NsZWFudXAodm9pZCkKIHsKLQlpbnQgaTsKLQogCXBjaV91bnJlZ2lzdGVyX2RyaXZlcigmY3gxOF9wY2lfZHJpdmVyKTsKLQotCWZvciAoaSA9IDA7IGkgPCBjeDE4X2NhcmRzX2FjdGl2ZTsgaSsrKSB7Ci0JCWlmIChjeDE4X2NhcmRzW2ldID09IE5VTEwpCi0JCQljb250aW51ZTsKLQkJa2ZyZWUoY3gxOF9jYXJkc1tpXSk7Ci0JfQotCiB9CiAKIG1vZHVsZV9pbml0KG1vZHVsZV9zdGFydCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1kcml2ZXIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5oCmluZGV4IDBkMmVkZWIuLmVjZTRmMjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWRyaXZlci5oCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSA8bGludXgvZHZiL2F1ZGlvLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgogI2luY2x1ZGUgImN4MTgtbWFpbGJveC5oIgogI2luY2x1ZGUgImN4MTgtYXYtY29yZS5oIgpAQCAtNzksNyArODAsNyBAQAogI2RlZmluZSBDWDE4X0NBUkRfWVVBTl9NUEM3MTggCSAgICAgIDMJLyogWXVhbiBNUEM3MTggKi8KICNkZWZpbmUgQ1gxOF9DQVJEX0NOWFRfUkFQVE9SX1BBTCAgICAgNAkvKiBDb25leGFudCBSYXB0b3IgUEFMICovCiAjZGVmaW5lIENYMThfQ0FSRF9UT1NISUJBX1FPU01JT19EVkJUIDUgLyogVG9zaGliYSBRb3NtaW8gSW50ZXJhbCBEVkItVC9BbmFsb2cqLwotI2RlZmluZSBDWDE4X0NBUkRfTEVBRFRFS19QVlIyMTAwICAgICA2IC8qIExlYWR0ZWsgV2luRmFzdCBQVlIyMTAwICovCisjZGVmaW5lIENYMThfQ0FSRF9MRUFEVEVLX1BWUjIxMDAgICAgIDYgLyogTGVhZHRlayBXaW5GYXN0IFBWUjIxMDAvRFZSMzEwMCBIICovCiAjZGVmaW5lIENYMThfQ0FSRF9MQVNUIAkJICAgICAgNgogCiAjZGVmaW5lIENYMThfRU5DX1NUUkVBTV9UWVBFX01QRyAgMApAQCAtMTQzLDEyICsxNDQsMTIgQEAKIC8qIEZsYWcgdG8gdHVybiBvbiBoaWdoIHZvbHVtZSBkZWJ1Z2dpbmcgKi8KICNkZWZpbmUgQ1gxOF9EQkdGTEdfSElHSFZPTCAoMSA8PCA4KQogCi0vKiBOT1RFOiBleHRyYSBzcGFjZSBiZWZvcmUgY29tbWEgaW4gJ2N4LT5udW0gLCAjIyBhcmdzJyBpcyByZXF1aXJlZCBmb3IKKy8qIE5PVEU6IGV4dHJhIHNwYWNlIGJlZm9yZSBjb21tYSBpbiAnZm10ICwgIyMgYXJncycgaXMgcmVxdWlyZWQgZm9yCiAgICBnY2MtMi45NSwgb3RoZXJ3aXNlIGl0IHdvbid0IGNvbXBpbGUuICovCiAjZGVmaW5lIENYMThfREVCVUcoeCwgdHlwZSwgZm10LCBhcmdzLi4uKSBcCiAJZG8geyBcCiAJCWlmICgoeCkgJiBjeDE4X2RlYnVnKSBcCi0JCQlwcmludGsoS0VSTl9JTkZPICJjeDE4LSVkICIgdHlwZSAiOiAiIGZtdCwgY3gtPm51bSAsICMjIGFyZ3MpOyBcCisJCQl2NGwyX2luZm8oJmN4LT52NGwyX2RldiwgIiAiIHR5cGUgIjogIiBmbXQgLCAjIyBhcmdzKTsgXAogCX0gd2hpbGUgKDApCiAjZGVmaW5lIENYMThfREVCVUdfV0FSTihmbXQsIGFyZ3MuLi4pICBDWDE4X0RFQlVHKENYMThfREJHRkxHX1dBUk4sICJ3YXJuaW5nIiwgZm10ICwgIyMgYXJncykKICNkZWZpbmUgQ1gxOF9ERUJVR19JTkZPKGZtdCwgYXJncy4uLikgIENYMThfREVCVUcoQ1gxOF9EQkdGTEdfSU5GTywgImluZm8iLCBmbXQgLCAjIyBhcmdzKQpAQCAtMTYyLDcgKzE2Myw3IEBACiAjZGVmaW5lIENYMThfREVCVUdfSElHSF9WT0woeCwgdHlwZSwgZm10LCBhcmdzLi4uKSBcCiAJZG8geyBcCiAJCWlmICgoKHgpICYgY3gxOF9kZWJ1ZykgJiYgKGN4MThfZGVidWcgJiBDWDE4X0RCR0ZMR19ISUdIVk9MKSkgXAotCQkJcHJpbnRrKEtFUk5fSU5GTyAiY3gxOCVkICIgdHlwZSAiOiAiIGZtdCwgY3gtPm51bSAsICMjIGFyZ3MpOyBcCisJCQl2NGwyX2luZm8oJmN4LT52NGwyX2RldiwgIiAiIHR5cGUgIjogIiBmbXQgLCAjIyBhcmdzKTsgXAogCX0gd2hpbGUgKDApCiAjZGVmaW5lIENYMThfREVCVUdfSElfV0FSTihmbXQsIGFyZ3MuLi4pICBDWDE4X0RFQlVHX0hJR0hfVk9MKENYMThfREJHRkxHX1dBUk4sICJ3YXJuaW5nIiwgZm10ICwgIyMgYXJncykKICNkZWZpbmUgQ1gxOF9ERUJVR19ISV9JTkZPKGZtdCwgYXJncy4uLikgIENYMThfREVCVUdfSElHSF9WT0woQ1gxOF9EQkdGTEdfSU5GTywgImluZm8iLCBmbXQgLCAjIyBhcmdzKQpAQCAtMTc0LDkgKzE3NSw1OCBAQAogI2RlZmluZSBDWDE4X0RFQlVHX0hJX0lSUShmbXQsIGFyZ3MuLi4pICAgQ1gxOF9ERUJVR19ISUdIX1ZPTChDWDE4X0RCR0ZMR19JUlEsICJpcnEiLCBmbXQgLCAjIyBhcmdzKQogCiAvKiBTdGFuZGFyZCBrZXJuZWwgbWVzc2FnZXMgKi8KLSNkZWZpbmUgQ1gxOF9FUlIoZm10LCBhcmdzLi4uKSAgICAgIHByaW50ayhLRVJOX0VSUiAgImN4MTgtJWQ6ICIgZm10LCBjeC0+bnVtICwgIyMgYXJncykKLSNkZWZpbmUgQ1gxOF9XQVJOKGZtdCwgYXJncy4uLikgICAgIHByaW50ayhLRVJOX1dBUk5JTkcgImN4MTgtJWQ6ICIgZm10LCBjeC0+bnVtICwgIyMgYXJncykKLSNkZWZpbmUgQ1gxOF9JTkZPKGZtdCwgYXJncy4uLikgICAgIHByaW50ayhLRVJOX0lORk8gImN4MTgtJWQ6ICIgZm10LCBjeC0+bnVtICwgIyMgYXJncykKKyNkZWZpbmUgQ1gxOF9FUlIoZm10LCBhcmdzLi4uKSAgICAgIHY0bDJfZXJyKCZjeC0+djRsMl9kZXYsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfV0FSTihmbXQsIGFyZ3MuLi4pICAgICB2NGwyX3dhcm4oJmN4LT52NGwyX2RldiwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgQ1gxOF9JTkZPKGZtdCwgYXJncy4uLikgICAgIHY0bDJfaW5mbygmY3gtPnY0bDJfZGV2LCBmbXQgLCAjIyBhcmdzKQorCisvKiBNZXNzYWdlcyBmb3IgaW50ZXJuYWwgc3ViZGV2cyB0byB1c2UgKi8KKyNkZWZpbmUgQ1gxOF9ERUJVR19ERVYoeCwgZGV2LCB0eXBlLCBmbXQsIGFyZ3MuLi4pIFwKKwlkbyB7IFwKKwkJaWYgKCh4KSAmIGN4MThfZGVidWcpIFwKKwkJCXY0bDJfaW5mbyhkZXYsICIgIiB0eXBlICI6ICIgZm10ICwgIyMgYXJncyk7IFwKKwl9IHdoaWxlICgwKQorI2RlZmluZSBDWDE4X0RFQlVHX1dBUk5fREVWKGRldiwgZm10LCBhcmdzLi4uKSBcCisJCUNYMThfREVCVUdfREVWKENYMThfREJHRkxHX1dBUk4sIGRldiwgIndhcm5pbmciLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBDWDE4X0RFQlVHX0lORk9fREVWKGRldiwgZm10LCBhcmdzLi4uKSBcCisJCUNYMThfREVCVUdfREVWKENYMThfREJHRkxHX0lORk8sIGRldiwgImluZm8iLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBDWDE4X0RFQlVHX0FQSV9ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pIFwKKwkJQ1gxOF9ERUJVR19ERVYoQ1gxOF9EQkdGTEdfQVBJLCBkZXYsICJhcGkiLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBDWDE4X0RFQlVHX0RNQV9ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pIFwKKwkJQ1gxOF9ERUJVR19ERVYoQ1gxOF9EQkdGTEdfRE1BLCBkZXYsICJkbWEiLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBDWDE4X0RFQlVHX0lPQ1RMX0RFVihkZXYsIGZtdCwgYXJncy4uLikgXAorCQlDWDE4X0RFQlVHX0RFVihDWDE4X0RCR0ZMR19JT0NUTCwgZGV2LCAiaW9jdGwiLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBDWDE4X0RFQlVHX0ZJTEVfREVWKGRldiwgZm10LCBhcmdzLi4uKSBcCisJCUNYMThfREVCVUdfREVWKENYMThfREJHRkxHX0ZJTEUsIGRldiwgImZpbGUiLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBDWDE4X0RFQlVHX0kyQ19ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pIFwKKwkJQ1gxOF9ERUJVR19ERVYoQ1gxOF9EQkdGTEdfSTJDLCBkZXYsICJpMmMiLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBDWDE4X0RFQlVHX0lSUV9ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pIFwKKwkJQ1gxOF9ERUJVR19ERVYoQ1gxOF9EQkdGTEdfSVJRLCBkZXYsICJpcnEiLCBmbXQgLCAjIyBhcmdzKQorCisjZGVmaW5lIENYMThfREVCVUdfSElHSF9WT0xfREVWKHgsIGRldiwgdHlwZSwgZm10LCBhcmdzLi4uKSBcCisJZG8geyBcCisJCWlmICgoKHgpICYgY3gxOF9kZWJ1ZykgJiYgKGN4MThfZGVidWcgJiBDWDE4X0RCR0ZMR19ISUdIVk9MKSkgXAorCQkJdjRsMl9pbmZvKGRldiwgIiAiIHR5cGUgIjogIiBmbXQgLCAjIyBhcmdzKTsgXAorCX0gd2hpbGUgKDApCisjZGVmaW5lIENYMThfREVCVUdfSElfV0FSTl9ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pIFwKKwlDWDE4X0RFQlVHX0hJR0hfVk9MX0RFVihDWDE4X0RCR0ZMR19XQVJOLCBkZXYsICJ3YXJuaW5nIiwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgQ1gxOF9ERUJVR19ISV9JTkZPX0RFVihkZXYsIGZtdCwgYXJncy4uLikgXAorCUNYMThfREVCVUdfSElHSF9WT0xfREVWKENYMThfREJHRkxHX0lORk8sIGRldiwgImluZm8iLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBDWDE4X0RFQlVHX0hJX0FQSV9ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pIFwKKwlDWDE4X0RFQlVHX0hJR0hfVk9MX0RFVihDWDE4X0RCR0ZMR19BUEksIGRldiwgImFwaSIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfSElfRE1BX0RFVihkZXYsIGZtdCwgYXJncy4uLikgXAorCUNYMThfREVCVUdfSElHSF9WT0xfREVWKENYMThfREJHRkxHX0RNQSwgZGV2LCAiZG1hIiwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgQ1gxOF9ERUJVR19ISV9JT0NUTF9ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pIFwKKwlDWDE4X0RFQlVHX0hJR0hfVk9MX0RFVihDWDE4X0RCR0ZMR19JT0NUTCwgZGV2LCAiaW9jdGwiLCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBDWDE4X0RFQlVHX0hJX0ZJTEVfREVWKGRldiwgZm10LCBhcmdzLi4uKSBcCisJQ1gxOF9ERUJVR19ISUdIX1ZPTF9ERVYoQ1gxOF9EQkdGTEdfRklMRSwgZGV2LCAiZmlsZSIsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfREVCVUdfSElfSTJDX0RFVihkZXYsIGZtdCwgYXJncy4uLikgXAorCUNYMThfREVCVUdfSElHSF9WT0xfREVWKENYMThfREJHRkxHX0kyQywgZGV2LCAiaTJjIiwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgQ1gxOF9ERUJVR19ISV9JUlFfREVWKGRldiwgZm10LCBhcmdzLi4uKSBcCisJQ1gxOF9ERUJVR19ISUdIX1ZPTF9ERVYoQ1gxOF9EQkdGTEdfSVJRLCBkZXYsICJpcnEiLCBmbXQgLCAjIyBhcmdzKQorCisjZGVmaW5lIENYMThfRVJSX0RFVihkZXYsIGZtdCwgYXJncy4uLikgICAgICB2NGwyX2VycihkZXYsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIENYMThfV0FSTl9ERVYoZGV2LCBmbXQsIGFyZ3MuLi4pICAgICB2NGwyX3dhcm4oZGV2LCBmbXQgLCAjIyBhcmdzKQorI2RlZmluZSBDWDE4X0lORk9fREVWKGRldiwgZm10LCBhcmdzLi4uKSAgICAgdjRsMl9pbmZvKGRldiwgZm10ICwgIyMgYXJncykKIAogLyogVmFsdWVzIGZvciBDWDE4X0FQSV9ERUNfUExBWUJBQ0tfU1BFRUQgbXBlZ19mcmFtZV90eXBlX21hc2sgcGFyYW1ldGVyOiAqLwogI2RlZmluZSBNUEVHX0ZSQU1FX1RZUEVfSUZSQU1FIDEKQEAgLTI3OSw3ICszMjksNyBAQAogc3RydWN0IGN4MThfc3RyZWFtIHsKIAkvKiBUaGVzZSBmaXJzdCBmb3VyIGZpZWxkcyBhcmUgYWx3YXlzIHNldCwgZXZlbiBpZiB0aGUgc3RyZWFtCiAJICAgaXMgbm90IGFjdHVhbGx5IGNyZWF0ZWQuICovCi0Jc3RydWN0IHZpZGVvX2RldmljZSAqdjRsMmRldjsJLyogTlVMTCB3aGVuIHN0cmVhbSBub3QgY3JlYXRlZCAqLworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZpZGVvX2RldjsJLyogTlVMTCB3aGVuIHN0cmVhbSBub3QgY3JlYXRlZCAqLwogCXN0cnVjdCBjeDE4ICpjeDsgCQkvKiBmb3IgZWFzZSBvZiB1c2UgKi8KIAljb25zdCBjaGFyICpuYW1lOwkJLyogbmFtZSBvZiB0aGUgc3RyZWFtICovCiAJaW50IHR5cGU7CQkJLyogc3RyZWFtIHR5cGUgKi8KQEAgLTI5Miw3ICszNDIsNiBAQAogCWludCBkbWE7CQkvKiBjYW4gYmUgUENJX0RNQV9UT0RFVklDRSwKIAkJCQkgICBQQ0lfRE1BX0ZST01ERVZJQ0Ugb3IKIAkJCQkgICBQQ0lfRE1BX05PTkUgKi8KLQl1NjQgZG1hX3B0czsKIAl3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0cTsKIAogCS8qIEJ1ZmZlciBTdGF0cyAqLwpAQCAtMzE4LDU5ICszNjcsMTIxIEBACiAvKiBmb3J3YXJkIGRlY2xhcmF0aW9uIG9mIHN0cnVjdCBkZWZpbmVkIGluIGN4MTgtY2FyZHMuaCAqLwogc3RydWN0IGN4MThfY2FyZDsKIAorLyoKKyAqIEEgbm90ZSBhYm91dCAic2xpY2VkIiBWQkkgZGF0YSBhcyBpbXBsZW1lbnRlZCBpbiB0aGlzIGRyaXZlcjoKKyAqCisgKiBDdXJyZW50bHkgd2UgY29sbGVjdCB0aGUgc2xpY2VkIFZCSSBpbiB0aGUgZm9ybSBvZiBBbmNpbGxhcnkgRGF0YQorICogcGFja2V0cywgaW5zZXJ0ZWQgYnkgdGhlIEFWIGNvcmUgZGVjb2Rlci9kaWdpdGl6ZXIvc2xpY2VyIGluIHRoZQorICogaG9yaXpvbnRhbCBibGFua2luZyByZWdpb24gb2YgdGhlIFZCSSBsaW5lcywgaW4gInJhdyIgbW9kZSBhcyBmYXIgYXMKKyAqIHRoZSBFbmNvZGVyIGlzIGNvbmNlcm5lZC4gIFdlIGRvbid0IGV2ZXIgdGVsbCB0aGUgRW5jb2RlciBpdHNlbGYKKyAqIHRvIHByb3ZpZGUgc2xpY2VkIFZCSS4gKEFWIENvcmU6IHNsaWNlZCBtb2RlIC0gRW5jb2RlcjogcmF3IG1vZGUpCisgKgorICogV2UgdGhlbiBwcm9jZXNzIHRoZSBhbmNpbGxhcnkgZGF0YSBvdXJzZWx2ZXMgdG8gc2VuZCB0aGUgc2xpY2VkIGRhdGEKKyAqIHRvIHRoZSB1c2VyIGFwcGxpY2F0aW9uIGRpcmVjdGx5IG9yIGJ1aWxkIHVwIE1QRUctMiBwcml2YXRlIHN0cmVhbSAxCisgKiBwYWNrZXRzIHRvIHNwbGljZSBpbnRvIChvbmx5ISkgTVBFRy0yIFBTIHN0cmVhbXMgZm9yIHRoZSB1c2VyIGFwcC4KKyAqCisgKiAoVGhhdCdzIGhvdyBpdnR2IGVzc2VudGlhbGx5IGRvZXMgaXQuKQorICoKKyAqIFRoZSBFbmNvZGVyIHNob3VsZCBiZSBhYmxlIHRvIGV4dHJhY3QgY2VydGFpbiBzbGljZWQgVkJJIGRhdGEgZm9yCisgKiB1cyBhbmQgcHJvdmlkZSBpdCBpbiBhIHNlcGFyYXRlIHN0cmVhbSBvciBzcGxpY2UgaXQgaW50byBhbnkgdHlwZSBvZgorICogTVBFRyBQUyBvciBUUyBzdHJlYW0sIGJ1dCB0aGlzIGlzbid0IGltcGxlbWVudGVkIHlldC4KKyAqLworCisvKgorICogTnVtYmVyIG9mICJyYXciIFZCSSBzYW1wbGVzIHBlciBob3Jpem9udGFsIGxpbmUgd2UgdGVsbCB0aGUgRW5jb2RlciB0bworICogZ3JhYiBmcm9tIHRoZSBkZWNvZGVyL2RpZ2l0aXplci9zbGljZXIgb3V0cHV0IGZvciByYXcgb3Igc2xpY2VkIFZCSS4KKyAqIEl0IGRlcGVuZHMgb24gdGhlIHBpeGVsIGNsb2NrIGFuZCB0aGUgaG9yaXogcmF0ZToKKyAqCisgKiAoMS9GaCkqKDIqRnApID0gU2FtcGxlcy9saW5lCisgKiAgICAgPSA0IGJ5dGVzIEVBViArIEFuYyBkYXRhIGluIGhibGFuayArIDQgYnl0ZXMgU0FWICsgYWN0aXZlIHNhbXBsZXMKKyAqCisgKiAgU2xpY2VkIFZCSSBkYXRhIGlzIHNlbnQgYXMgYW5jaWxsYXJ5IGRhdGEgZHVyaW5nIGhvcml6b250YWwgYmxhbmtpbmcKKyAqICBSYXcgVkJJIGlzIHNlbnQgYXMgYWN0aXZlIHZpZGVvIHNhbXBsZXMgZHVyaW5nIHZlcnRjYWwgYmxhbmtpbmcKKyAqCisgKiAgV2UgdXNlIGEgIEJULjY1NiBweGllbCBjbG9jayBvZiAxMy41IE1IeiBhbmQgYSBCVC42NTYgYWN0aXZlIGxpbmUKKyAqICBsZW5ndGggb2YgNzIwIHBpeGVscyBAIDQ6MjoyIHNhbXBsaW5nLiAgVGh1cy4uLgorICoKKyAqICBGb3Igc3lzdGVtcyB0aGF0IHVzZSBhIDE1LjczNCBrSHogaG9yaXpvbnRhbCByYXRlLCBzdWNoIGFzCisgKiAgTlRTQy1NLCBQQUwtTSwgUEFMLTYwLCBhbmQgb3RoZXIgNjAgSHovNTI1IGxpbmUgc3lzdGVtcywgd2UgaGF2ZToKKyAqCisgKiAgKDEvMTUuNzM0IGtIeikgKiAyICogMTMuNSBNSHogPSAxNzE2IHNhbXBsZXMvbGluZSA9CisgKiAgNCBieXRlcyBTQVYgKyAyNjggYnl0ZXMgYW5jIGRhdGEgKyA0IGJ5dGVzIFNBViArIDE0NDAgYWN0aXZlIHNhbXBsZXMKKyAqCisgKiAgRm9yIHN5c3RlbXMgdGhhdCB1c2UgYSAxNS42MjUga0h6IGhvcml6b250YWwgcmF0ZSwgc3VjaCBhcworICogIFBBTC1CL0cvSCwgUEFMLUksIFNFQ0FNLUwgYW5kIG90aGVyIDUwIEh6LzYyNSBsaW5lIHN5c3RlbXMsIHdlIGhhdmU6CisgKgorICogICgxLzE1LjYyNSBrSHopICogMiAqIDEzLjUgTUh6ID0gMTcyOCBzYW1wbGVzL2xpbmUgPQorICogIDQgYnl0ZXMgU0FWICsgMjgwIGJ5dGVzIGFuYyBkYXRhICsgNCBieXRlcyBTQVYgKyAxNDQwIGFjdGl2ZSBzYW1wbGVzCisgKi8KK3N0YXRpYyBjb25zdCB1MzIgdmJpX2FjdGl2ZV9zYW1wbGVzID0gMTQ0NDsgLyogNCBieXRlIFNBViArIDcyMCBZICsgNzIwIFUvViAqLworc3RhdGljIGNvbnN0IHUzMiB2YmlfaGJsYW5rX3NhbXBsZXNfNjBIeiA9IDI3MjsgLyogNCBieXRlIEVBViArIDI2OCBhbmMvZmlsbCAqLworc3RhdGljIGNvbnN0IHUzMiB2YmlfaGJsYW5rX3NhbXBsZXNfNTBIeiA9IDI4NDsgLyogNCBieXRlIEVBViArIDI4MCBhbmMvZmlsbCAqLwogCiAjZGVmaW5lIENYMThfVkJJX0ZSQU1FUyAzMgogCi0vKiBWQkkgZGF0YSAqLwogc3RydWN0IHZiaV9pbmZvIHsKLQl1MzIgZW5jX3NpemU7Ci0JdTMyIGZyYW1lOwotCXU4IGNjX2RhdGFfb2RkWzI1Nl07Ci0JdTggY2NfZGF0YV9ldmVuWzI1Nl07Ci0JaW50IGNjX3BvczsKLQl1OCBjY19ub191cGRhdGU7Ci0JdTggdnBzWzVdOwotCXU4IHZwc19mb3VuZDsKLQlpbnQgd3NzOwotCXU4IHdzc19mb3VuZDsKLQl1OCB3c3Nfbm9fdXBkYXRlOwotCXUzMiByYXdfZGVjb2Rlcl9saW5lX3NpemU7Ci0JdTggcmF3X2RlY29kZXJfc2F2X29kZF9maWVsZDsKLQl1OCByYXdfZGVjb2Rlcl9zYXZfZXZlbl9maWVsZDsKLQl1MzIgc2xpY2VkX2RlY29kZXJfbGluZV9zaXplOwotCXU4IHNsaWNlZF9kZWNvZGVyX3Nhdl9vZGRfZmllbGQ7Ci0JdTggc2xpY2VkX2RlY29kZXJfc2F2X2V2ZW5fZmllbGQ7CisJLyogQ3VycmVudCBzdGF0ZSBvZiB2NGwyIFZCSSBzZXR0aW5ncyBmb3IgdGhpcyBkZXZpY2UgKi8KIAlzdHJ1Y3QgdjRsMl9mb3JtYXQgaW47Ci0JLyogY29udmVuaWVuY2UgcG9pbnRlciB0byBzbGljZWQgc3RydWN0IGluIHZiaV9pbiB1bmlvbiAqLwotCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICpzbGljZWRfaW47Ci0JdTMyIHNlcnZpY2Vfc2V0X2luOworCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICpzbGljZWRfaW47IC8qIHBvaW50ZXIgdG8gaW4uZm10LnNsaWNlZCAqLworCXUzMiBjb3VudDsgICAgLyogQ291bnQgb2YgVkJJIGRhdGEgbGluZXM6IDYwIEh6OiAxMiBvciA1MCBIejogMTggKi8KKwl1MzIgc3RhcnRbMl07IC8qIEZpcnN0IFZCSSBkYXRhIGxpbmUgcGVyIGZpZWxkOiAxMCAmIDI3MyBvciA2ICYgMzE4ICovCisKKwl1MzIgZnJhbWU7IC8qIENvdW50IG9mIFZCSSBidWZmZXJzL2ZyYW1lcyByZWNlaXZlZCBmcm9tIEVuY29kZXIgKi8KKworCS8qCisJICogVmFycyBmb3IgY3JlYXRpb24gYW5kIGluc2VydGlvbiBvZiBNUEVHIFByaXZhdGUgU3RyZWFtIDEgcGFja2V0cworCSAqIG9mIHNsaWNlZCBWQkkgZGF0YSBpbnRvIGFuIE1QRUcgUFMKKwkgKi8KKworCS8qIEJvb2xlYW46IGNyZWF0ZSBhbmQgaW5zZXJ0IFByaXZhdGUgU3RyZWFtIDEgcGFja2V0cyBpbnRvIHRoZSBQUyAqLwogCWludCBpbnNlcnRfbXBlZzsKIAotCS8qIEJ1ZmZlciBmb3IgdGhlIG1heGltdW0gb2YgMiAqIDE4ICogcGFja2V0X3NpemUgc2xpY2VkIFZCSSBsaW5lcy4KLQkgICBPbmUgZm9yIC9kZXYvdmJpMCBhbmQgb25lIGZvciAvZGV2L3ZiaTggKi8KKwkvKgorCSAqIEJ1ZmZlciBmb3IgdGhlIG1heGltdW0gb2YgMiAqIDE4ICogcGFja2V0X3NpemUgc2xpY2VkIFZCSSBsaW5lcy4KKwkgKiBVc2VkIGluIGN4MTgtdmJpLmMgb25seSBmb3IgY29sbGVjdGluZyBzbGljZWQgZGF0YSwgYW5kIGFzIGEgc291cmNlCisJICogZHVyaW5nIGNvbnZlcnNpb24gb2Ygc2xpY2VkIFZCSSBkYXRhIGludG8gTVBFRyBQcml2IFN0cmVhbSAxIHBhY2tldHMuCisJICogV2UgZG9uJ3QgbmVlZCB0byBzYXZlIHN0YXRlIGhlcmUsIGJ1dCB0aGUgYXJyYXkgbWF5IGhhdmUgYmVlbiBhIGJpdAorCSAqIHRvbyBiaWcgKDIzMDQgYnl0ZXMpIHRvIGFsbG9jIGZyb20gdGhlIHN0YWNrLgorCSAqLwogCXN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSBzbGljZWRfZGF0YVszNl07CiAKLQkvKiBCdWZmZXIgZm9yIFZCSSBkYXRhIGluc2VydGVkIGludG8gTVBFRyBzdHJlYW0uCi0JICAgVGhlIGZpcnN0IGJ5dGUgaXMgYSBkdW1teSBieXRlIHRoYXQncyBuZXZlciB1c2VkLgotCSAgIFRoZSBuZXh0IDE2IGJ5dGVzIGNvbnRhaW4gdGhlIE1QRUcgaGVhZGVyIGZvciB0aGUgVkJJIGRhdGEsCi0JICAgdGhlIHJlbWFpbmRlciBpcyB0aGUgYWN0dWFsIFZCSSBkYXRhLgotCSAgIFRoZSBtYXggc2l6ZSBhY2NlcHRlZCBieSB0aGUgTVBFRyBWQkkgcmVpbnNlcnRpb24gdHVybnMgb3V0Ci0JICAgdG8gYmUgMTU1MiBieXRlcywgd2hpY2ggaGFwcGVucyB0byBiZSA0ICsgKDEgKyA0MikgKiAoMiAqIDE4KSBieXRlcywKLQkgICB3aGVyZSA0IGlzIGEgZm91ciBieXRlIGhlYWRlciwgNDIgaXMgdGhlIG1heCBzbGljZWQgVkJJIHBheWxvYWQsIDEgaXMKLQkgICBhIHNpbmdsZSBsaW5lIGhlYWRlciBieXRlIGFuZCAyICogMTggaXMgdGhlIG51bWJlciBvZiBWQkkgbGluZXMgcGVyIGZyYW1lLgotCi0JICAgSG93ZXZlciwgaXQgc2VlbXMgdGhhdCB0aGUgZGF0YSBtdXN0IGJlIDFLIGFsaWduZWQsIHNvIHdlIGhhdmUgdG8KLQkgICBwYWQgdGhlIGRhdGEgdW50aWwgdGhlIDEgb3IgMiBLIGJvdW5kYXJ5LgotCi0JICAgVGhpcyBwb2ludGVyIGFycmF5IHdpbGwgYWxsb2NhdGUgMjA0OSBieXRlcyB0byBzdG9yZSBlYWNoIFZCSSBmcmFtZS4gKi8KKwkvKgorCSAqIEEgcmluZyBidWZmZXIgb2YgZHJpdmVyLWdlbmVyYXRlZCBNUEVHLTIgUFMKKwkgKiBQcm9ncmFtIFBhY2svUHJpdmF0ZSBTdHJlYW0gMSBwYWNrZXRzIGZvciBzbGljZWQgVkJJIGRhdGEgaW5zZXJ0aW9uCisJICogaW50byB0aGUgTVBFRyBQUyBzdHJlYW0uCisJICoKKwkgKiBJbiBlYWNoIHNsaWNlZF9tcGVnX2RhdGFbXSBidWZmZXIgaXM6CisJICogCTE2IGJ5dGUgTVBFRy0yIFBTIFByb2dyYW0gUGFjayBIZWFkZXIKKwkgKiAJMTYgYnl0ZSBNUEVHLTIgUHJpdmF0ZSBTdHJlYW0gMSBQRVMgSGVhZGVyCisJICogCSA0IGJ5dGUgbWFnaWMgbnVtYmVyOiAiaXR2MCIgb3IgIklUVjAiCisJICogCSA0IGJ5dGUgZmlyc3QgIGZpZWxkIGxpbmUgbWFzaywgaWYgIml0djAiCisJICogCSA0IGJ5dGUgc2Vjb25kIGZpZWxkIGxpbmUgbWFzaywgaWYgIml0djAiCisJICogCTM2IGxpbmVzLCBpZiAiSVRWMCI7IG9yIDwzNiBsaW5lcywgaWYgIml0djAiOyBvZiBzbGljZWQgVkJJIGRhdGEKKwkgKgorCSAqIAlFYWNoIGxpbmUgaW4gdGhlIHBheWxvYWQgaXMKKwkgKgkgMSBieXRlIGxpbmUgaGVhZGVyIGRlcml2ZWQgZnJvbSB0aGUgU0RJRCAoV1NTLCBDQywgVlBTLCBldGMuKQorCSAqCTQyIGJ5dGVzIG9mIGxpbmUgZGF0YQorCSAqCisJICogVGhhdCdzIGEgbWF4aW11bSAxNTUyIGJ5dGVzIG9mIHBheWxvYWQgaW4gdGhlIFByaXZhdGUgU3RyZWFtIDEgcGFja2V0CisJICogd2hpY2ggaXMgdGhlIHBheWxvYWQgc2l6ZSBhIFBWUi0zNTAgKENYMjM0MTUpIE1QRUcgZGVjb2RlciB3aWxsCisJICogYWNjZXB0IGZvciBWQkkgZGF0YS4gU28sIGluY2x1ZGluZyB0aGUgaGVhZGVycywgaXQncyBhIG1heGltdW0gMTU4NAorCSAqIGJ5dGVzIHRvdGFsLgorCSAqLworI2RlZmluZSBDWDE4X1NMSUNFRF9NUEVHX0RBVEFfTUFYU1oJMTU4NAorCS8qIGNvcHlfdmJpX2J1ZigpIG5lZWRzIDggdGVtcCBieXRlcyBvbiB0aGUgZW5kIGZvciB0aGUgd29yc3QgY2FzZSAqLworI2RlZmluZSBDWDE4X1NMSUNFRF9NUEVHX0RBVEFfQlVGU1oJKENYMThfU0xJQ0VEX01QRUdfREFUQV9NQVhTWis4KQogCXU4ICpzbGljZWRfbXBlZ19kYXRhW0NYMThfVkJJX0ZSQU1FU107CiAJdTMyIHNsaWNlZF9tcGVnX3NpemVbQ1gxOF9WQklfRlJBTUVTXTsKLQlzdHJ1Y3QgY3gxOF9idWZmZXIgc2xpY2VkX21wZWdfYnVmOworCisJLyogQ291bnQgb2YgUHJvZ3JhbSBQYWNrL1Byb2dyYW0gU3RyZWFtIDEgcGFja2V0cyBpbnNlcnRlZCBpbnRvIFBTICovCiAJdTMyIGluc2VydGVkX2ZyYW1lOwogCi0JdTMyIHN0YXJ0WzJdLCBjb3VudDsKLQl1MzIgcmF3X3NpemU7Ci0JdTMyIHNsaWNlZF9zaXplOworCS8qCisJICogQSBkdW1teSBkcml2ZXIgc3RyZWFtIHRyYW5zZmVyIGJ1ZmZlciB3aXRoIGEgY29weSBvZiB0aGUgbmV4dAorCSAqIHNsaWNlZF9tcGVnX2RhdGFbXSBidWZmZXIgZm9yIG91dHB1dCB0byB1c2VybGFuZCBhcHBzLgorCSAqIE9ubHkgdXNlZCBpbiBjeDE4LWZpbGVvcHMuYywgYnV0IGl0cyBzdGF0ZSBuZWVkcyB0byBwZXJzaXN0IGF0IHRpbWVzLgorCSAqLworCXN0cnVjdCBjeDE4X2J1ZmZlciBzbGljZWRfbXBlZ19idWY7CiB9OwogCiAvKiBQZXIgY3gyMzQxOCwgcGVyIEkyQyBidXMgcHJpdmF0ZSBhbGdvIGNhbGxiYWNrIGRhdGEgKi8KQEAgLTM4MywxNiArNDk0LDE3IEBACiAKIC8qIFN0cnVjdCB0byBob2xkIGluZm8gYWJvdXQgY3gxOCBjYXJkcyAqLwogc3RydWN0IGN4MTggewotCWludCBudW07CQkvKiBib2FyZCBudW1iZXIsIC0xIGR1cmluZyBpbml0ISAqLwotCWNoYXIgbmFtZVs4XTsJCS8qIGJvYXJkIG5hbWUgZm9yIHByaW50ayBhbmQgaW50ZXJydXB0cyAoZS5nLiAnY3gxODAnKSAqLwotCXN0cnVjdCBwY2lfZGV2ICpkZXY7CS8qIFBDSSBkZXZpY2UgKi8KKwlpbnQgaW5zdGFuY2U7CisJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXY7CisJc3RydWN0IHY0bDJfZGV2aWNlIHY0bDJfZGV2OworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2RfYXY7ICAgICAvKiBBL1YgZGVjb2Rlci9kaWdpdGl6ZXIgc3ViLWRldmljZSAqLworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2RfZXh0bXV4OyAvKiBFeHRlcm5hbCBtdWx0aXBsZXhlciBzdWItZGV2ICovCisKIAljb25zdCBzdHJ1Y3QgY3gxOF9jYXJkICpjYXJkOwkvKiBjYXJkIGluZm9ybWF0aW9uICovCiAJY29uc3QgY2hhciAqY2FyZF9uYW1lOyAgLyogZnVsbCBuYW1lIG9mIHRoZSBjYXJkICovCiAJY29uc3Qgc3RydWN0IGN4MThfY2FyZF90dW5lcl9pMmMgKmNhcmRfaTJjOyAvKiBpMmMgYWRkcmVzc2VzIHRvIHByb2JlIGZvciB0dW5lciAqLwogCXU4IGlzXzUwaHo7CiAJdTggaXNfNjBoejsKLQl1OCBpc19vdXRfNTBoejsKLQl1OCBpc19vdXRfNjBoejsKIAl1OCBub2ZfaW5wdXRzOwkJLyogbnVtYmVyIG9mIHZpZGVvIGlucHV0cyAqLwogCXU4IG5vZl9hdWRpb19pbnB1dHM7CS8qIG51bWJlciBvZiBhdWRpbyBpbnB1dHMgKi8KIAl1MTYgYnVmZmVyX2lkOwkJLyogYnVmZmVyIElEIGNvdW50ZXIgKi8KQEAgLTQxMywxMCArNTI1LDcgQEAKIAogCS8qIGR1YWx3YXRjaCAqLwogCXVuc2lnbmVkIGxvbmcgZHVhbHdhdGNoX2ppZmZpZXM7Ci0JdTE2IGR1YWx3YXRjaF9zdGVyZW9fbW9kZTsKLQotCS8qIERpZ2l0aXplciB0eXBlICovCi0JaW50IGRpZ2l0aXplcjsJCS8qIDB4MDBFRiA9IHNhYTcxMTQgMHgwMEZPID0gc2FhNzExNSAweDAxMDYgPSBtaWMgKi8KKwl1MzIgZHVhbHdhdGNoX3N0ZXJlb19tb2RlOwogCiAJc3RydWN0IG11dGV4IHNlcmlhbGl6ZV9sb2NrOyAgICAvKiBtdXRleCB1c2VkIHRvIHNlcmlhbGl6ZSBvcGVuL2Nsb3NlL3N0YXJ0L3N0b3AvaW9jdGwgb3BlcmF0aW9ucyAqLwogCXN0cnVjdCBjeDE4X29wdGlvbnMgb3B0aW9uczsgCS8qIFVzZXIgb3B0aW9ucyAqLwpAQCAtNDI2LDcgKzUzNSw2IEBACiAJdW5zaWduZWQgbG9uZyBpX2ZsYWdzOyAgLyogZ2xvYmFsIGN4MTggZmxhZ3MgKi8KIAlhdG9taWNfdCBhbmFfY2FwdHVyaW5nOwkvKiBjb3VudCBudW1iZXIgb2YgYWN0aXZlIGFuYWxvZyBjYXB0dXJlIHN0cmVhbXMgKi8KIAlhdG9taWNfdCB0b3RfY2FwdHVyaW5nOwkvKiB0b3RhbCBjb3VudCBudW1iZXIgb2YgYWN0aXZlIGNhcHR1cmUgc3RyZWFtcyAqLwotCXNwaW5sb2NrX3QgbG9jazsgICAgICAgIC8qIGxvY2sgYWNjZXNzIHRvIHRoaXMgc3RydWN0ICovCiAJaW50IHNlYXJjaF9wYWNrX2hlYWRlcjsKIAogCWludCBvcGVuX2lkOwkJLyogaW5jcmVtZW50ZWQgZWFjaCB0aW1lIGFuIG9wZW4gb2NjdXJzLCB1c2VkIGFzCkBAIC00NjgsMzAgKzU3NiwzMCBAQAogCXN0cnVjdCBpMmNfYWRhcHRlciBpMmNfYWRhcFsyXTsKIAlzdHJ1Y3QgaTJjX2FsZ29fYml0X2RhdGEgaTJjX2FsZ29bMl07CiAJc3RydWN0IGN4MThfaTJjX2FsZ29fY2FsbGJhY2tfZGF0YSBpMmNfYWxnb19jYl9kYXRhWzJdOwotCXN0cnVjdCBpMmNfY2xpZW50IGkyY19jbGllbnRbMl07Ci0Jc3RydWN0IG11dGV4IGkyY19idXNfbG9ja1syXTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqaTJjX2NsaWVudHNbSTJDX0NMSUVOVFNfTUFYXTsKIAogCS8qIGdwaW8gKi8KIAl1MzIgZ3Bpb19kaXI7CiAJdTMyIGdwaW9fdmFsOwogCXN0cnVjdCBtdXRleCBncGlvX2xvY2s7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkX2dwaW9tdXg7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkX3Jlc2V0Y3RybDsKIAogCS8qIHY0bDIgYW5kIFVzZXIgc2V0dGluZ3MgKi8KIAogCS8qIGNvZGVjIHNldHRpbmdzICovCiAJdTMyIGF1ZGlvX2lucHV0OwogCXUzMiBhY3RpdmVfaW5wdXQ7Ci0JdTMyIGFjdGl2ZV9vdXRwdXQ7CiAJdjRsMl9zdGRfaWQgc3RkOwogCXY0bDJfc3RkX2lkIHR1bmVyX3N0ZDsJLyogVGhlIG5vcm0gb2YgdGhlIHR1bmVyIChmaXhlZCkgKi8KIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGN4MTggKnRvX2N4MTgoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3QgY3gxOCwgdjRsMl9kZXYpOworfQorCiAvKiBHbG9iYWxzICovCi1leHRlcm4gc3RydWN0IGN4MTggKmN4MThfY2FyZHNbXTsKLWV4dGVybiBpbnQgY3gxOF9jYXJkc19hY3RpdmU7CiBleHRlcm4gaW50IGN4MThfZmlyc3RfbWlub3I7Ci1leHRlcm4gc3BpbmxvY2tfdCBjeDE4X2NhcmRzX2xvY2s7CiAKIC8qPT09PT09PT09PT09PT1Qcm90b3R5cGVzPT09PT09PT09PT09PT09PT09Ki8KIApAQCAtNTExLDQgKzYxOSwyMiBAQAogCXJldHVybiBjeC0+dmJpLmluLnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRTsKIH0KIAorLyogQ2FsbCB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrIGZvciBhbGwgc3ViZGV2cyB3aXRoIGEgZ3JwX2lkIGJpdCBtYXRjaGluZyB0aGUKKyAqIG1hc2sgaW4gaHcgKGlmIDAsIHRoZW4gbWF0Y2ggdGhlbSBhbGwpLiBJZ25vcmUgYW55IGVycm9ycy4gKi8KKyNkZWZpbmUgY3gxOF9jYWxsX2h3KGN4LCBodywgbywgZiwgYXJncy4uLikgXAorCV9fdjRsMl9kZXZpY2VfY2FsbF9zdWJkZXZzKCYoY3gpLT52NGwyX2RldiwgXAorCQkJCSAgICEoaHcpIHx8IChzZC0+Z3JwX2lkICYgKGh3KSksIG8sIGYgLCAjI2FyZ3MpCisKKyNkZWZpbmUgY3gxOF9jYWxsX2FsbChjeCwgbywgZiwgYXJncy4uLikgY3gxOF9jYWxsX2h3KGN4LCAwLCBvLCBmICwgIyNhcmdzKQorCisvKiBDYWxsIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgZm9yIGFsbCBzdWJkZXZzIHdpdGggYSBncnBfaWQgYml0IG1hdGNoaW5nIHRoZQorICogbWFzayBpbiBodyAoaWYgMCwgdGhlbiBtYXRjaCB0aGVtIGFsbCkuIElmIHRoZSBjYWxsYmFjayByZXR1cm5zIGFuIGVycm9yCisgKiBvdGhlciB0aGFuIDAgb3IgLUVOT0lPQ1RMQ01ELCB0aGVuIHJldHVybiB3aXRoIHRoYXQgZXJyb3IgY29kZS4gKi8KKyNkZWZpbmUgY3gxOF9jYWxsX2h3X2VycihjeCwgaHcsIG8sIGYsIGFyZ3MuLi4pIFwKKwlfX3Y0bDJfZGV2aWNlX2NhbGxfc3ViZGV2c191bnRpbF9lcnIoIFwKKwkJICAgJihjeCktPnY0bDJfZGV2LCAhKGh3KSB8fCAoc2QtPmdycF9pZCAmIChodykpLCBvLCBmICwgIyNhcmdzKQorCisjZGVmaW5lIGN4MThfY2FsbF9hbGxfZXJyKGN4LCBvLCBmLCBhcmdzLi4uKSBcCisJY3gxOF9jYWxsX2h3X2VycihjeCwgMCwgbywgZiAsICMjYXJncykKKwogI2VuZGlmIC8qIENYMThfRFJJVkVSX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHZiLmMKaW5kZXggYmQ1ZTZmMy4uM2I4NmY1NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZHZiLmMKQEAgLTE2Nyw3ICsxNjcsNyBAQAogCiAJcmV0ID0gZHZiX3JlZ2lzdGVyX2FkYXB0ZXIoJmR2Yi0+ZHZiX2FkYXB0ZXIsCiAJCQlDWDE4X0RSSVZFUl9OQU1FLAotCQkJVEhJU19NT0RVTEUsICZjeC0+ZGV2LT5kZXYsIGFkYXB0ZXJfbnIpOworCQkJVEhJU19NT0RVTEUsICZjeC0+cGNpX2Rldi0+ZGV2LCBhZGFwdGVyX25yKTsKIAlpZiAocmV0IDwgMCkKIAkJZ290byBlcnJfb3V0OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maWxlb3BzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maWxlb3BzLmMKaW5kZXggMDU1ZjZlMC4uNGQ3ZDZkNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlsZW9wcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpbGVvcHMuYwpAQCAtMTI4LDE1ICsxMjgsMTUgQEAKIHN0YXRpYyB2b2lkIGN4MThfZHVhbHdhdGNoKHN0cnVjdCBjeDE4ICpjeCkKIHsKIAlzdHJ1Y3QgdjRsMl90dW5lciB2dDsKLQl1MTYgbmV3X2JpdG1hcDsKLQl1MTYgbmV3X3N0ZXJlb19tb2RlOwotCWNvbnN0IHUxNiBzdGVyZW9fbWFzayA9IDB4MDMwMDsKLQljb25zdCB1MTYgZHVhbCA9IDB4MDIwMDsKKwl1MzIgbmV3X2JpdG1hcDsKKwl1MzIgbmV3X3N0ZXJlb19tb2RlOworCWNvbnN0IHUzMiBzdGVyZW9fbWFzayA9IDB4MDMwMDsKKwljb25zdCB1MzIgZHVhbCA9IDB4MDIwMDsKIAl1MzIgaDsKIAogCW5ld19zdGVyZW9fbW9kZSA9IGN4LT5wYXJhbXMuYXVkaW9fcHJvcGVydGllcyAmIHN0ZXJlb19tYXNrOwogCW1lbXNldCgmdnQsIDAsIHNpemVvZih2dCkpOwotCWN4MThfY2FsbF9pMmNfY2xpZW50cyhjeCwgVklESU9DX0dfVFVORVIsICZ2dCk7CisJY3gxOF9jYWxsX2FsbChjeCwgdHVuZXIsIGdfdHVuZXIsICZ2dCk7CiAJaWYgKHZ0LmF1ZG1vZGUgPT0gVjRMMl9UVU5FUl9NT0RFX0xBTkcxX0xBTkcyICYmCiAJCQkodnQucnhzdWJjaGFucyAmIFY0TDJfVFVORVJfU1VCX0xBTkcyKSkKIAkJbmV3X3N0ZXJlb19tb2RlID0gZHVhbDsKQEAgLTE3Niw2ICsxNzYsOCBAQAogCSplcnIgPSAwOwogCXdoaWxlICgxKSB7CiAJCWlmIChzLT50eXBlID09IENYMThfRU5DX1NUUkVBTV9UWVBFX01QRykgeworCQkJLyogUHJvY2VzcyBwZW5kaW5nIHByb2dyYW0gaW5mbyB1cGRhdGVzIGFuZCBwZW5kaW5nCisJCQkgICBWQkkgZGF0YSAqLwogCiAJCQlpZiAodGltZV9hZnRlcihqaWZmaWVzLCBjeC0+ZHVhbHdhdGNoX2ppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDEwMDApKSkgewogCQkJCWN4LT5kdWFsd2F0Y2hfamlmZmllcyA9IGppZmZpZXM7CkBAIC0xODYsNyArMTg4LDYgQEAKIAkJCQl3aGlsZSAoKGJ1ZiA9IGN4MThfZGVxdWV1ZShzX3ZiaSwgJnNfdmJpLT5xX2Z1bGwpKSkgewogCQkJCQkvKiBieXRlc3dhcCBhbmQgcHJvY2VzcyBWQkkgZGF0YSAqLwogCQkJCQljeDE4X3Byb2Nlc3NfdmJpX2RhdGEoY3gsIGJ1ZiwKLQkJCQkJCQkgICAgICBzX3ZiaS0+ZG1hX3B0cywKIAkJCQkJCQkgICAgICBzX3ZiaS0+dHlwZSk7CiAJCQkJCWN4MThfc3RyZWFtX3B1dF9idWZfZncoc192YmksIGJ1Zik7CiAJCQkJfQpAQCAtMjA3LDggKzIwOCw3IEBACiAJCQkJY3gxOF9idWZfc3dhcChidWYpOwogCQkJZWxzZSB7CiAJCQkJLyogYnl0ZXN3YXAgYW5kIHByb2Nlc3MgVkJJIGRhdGEgKi8KLQkJCQljeDE4X3Byb2Nlc3NfdmJpX2RhdGEoY3gsIGJ1ZiwKLQkJCQkJCXMtPmRtYV9wdHMsIHMtPnR5cGUpOworCQkJCWN4MThfcHJvY2Vzc192YmlfZGF0YShjeCwgYnVmLCBzLT50eXBlKTsKIAkJCX0KIAkJCXJldHVybiBidWY7CiAJCX0KQEAgLTI2MCw2ICsyNjAsMjAgQEAKIAkJbGVuID0gdWNvdW50OwogCWlmIChjeC0+dmJpLmluc2VydF9tcGVnICYmIHMtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHICYmCiAJICAgICFjeDE4X3Jhd192YmkoY3gpICYmIGJ1ZiAhPSAmY3gtPnZiaS5zbGljZWRfbXBlZ19idWYpIHsKKwkJLyoKKwkJICogVHJ5IHRvIGZpbmQgYSBnb29kIHNwbGljZSBwb2ludCBpbiB0aGUgUFMsIGp1c3QgYmVmb3JlCisJCSAqIGFuIE1QRUctMiBQcm9ncmFtIFBhY2sgc3RhcnQgY29kZSwgYW5kIHByb3ZpZGUgb25seQorCQkgKiB1cCB0byB0aGF0IHBvaW50IHRvIHRoZSB1c2VyLCBzbyBpdCdzIGVhc3kgdG8gaW5zZXJ0IFZCSSBkYXRhCisJCSAqIHRoZSBuZXh0IHRpbWUgYXJvdW5kLgorCQkgKi8KKwkJLyogRklYTUUgLSBUaGlzIG9ubHkgd29ya3MgZm9yIGFuIE1QRUctMiBQUywgbm90IGEgVFMgKi8KKwkJLyoKKwkJICogQW4gTVBFRy0yIFByb2dyYW0gU3RyZWFtIChQUykgaXMgYSBzZXJpZXMgb2YKKwkJICogTVBFRy0yIFByb2dyYW0gUGFja3MgdGVybWluYXRlZCBieSBhbgorCQkgKiBNUEVHIFByb2dyYW0gRW5kIENvZGUgYWZ0ZXIgdGhlIGxhc3QgUHJvZ3JhbSBQYWNrLgorCQkgKiBBIFByb2dyYW0gUGFjayBtYXkgaG9sZCBhIFBTIFN5c3RlbSBIZWFkZXIgcGFja2V0IGFuZCBhbnkKKwkJICogbnVtYmVyIG9mIFByb2dyYW0gRWxlbWVudGFyeSBTdHJlYW0gKFBFUykgUGFja2V0cworCQkgKi8KIAkJY29uc3QgY2hhciAqc3RhcnQgPSBidWYtPmJ1ZiArIGJ1Zi0+cmVhZHBvczsKIAkJY29uc3QgY2hhciAqcCA9IHN0YXJ0ICsgMTsKIAkJY29uc3QgdTggKnE7CkBAIC0yNjcsMzggKzI4MSw1NCBAQAogCQlpbnQgc3R1ZmZpbmcsIGk7CiAKIAkJd2hpbGUgKHN0YXJ0ICsgbGVuID4gcCkgeworCQkJLyogU2NhbiBmb3IgYSAwIHRvIGZpbmQgYSBwb3RlbnRpYWwgTVBFRy0yIHN0YXJ0IGNvZGUgKi8KIAkJCXEgPSBtZW1jaHIocCwgMCwgc3RhcnQgKyBsZW4gLSBwKTsKIAkJCWlmIChxID09IE5VTEwpCiAJCQkJYnJlYWs7CiAJCQlwID0gcSArIDE7CisJCQkvKgorCQkJICogS2VlcCBsb29raW5nIGlmIG5vdCBhCisJCQkgKiBNUEVHLTIgUGFjayBoZWFkZXIgc3RhcnQgY29kZTogIDB4MDAgMHgwMCAweDAxIDB4YmEKKwkJCSAqIG9yIE1QRUctMiB2aWRlbyBQRVMgc3RhcnQgY29kZTogMHgwMCAweDAwIDB4MDEgMHhlMAorCQkJICovCiAJCQlpZiAoKGNoYXIgKilxICsgMTUgPj0gYnVmLT5idWYgKyBidWYtPmJ5dGVzdXNlZCB8fAogCQkJICAgIHFbMV0gIT0gMCB8fCBxWzJdICE9IDEgfHwgcVszXSAhPSBjaCkKIAkJCQljb250aW51ZTsKKworCQkJLyogSWYgZXhwZWN0aW5nIHRoZSBwcmltYXJ5IHZpZGVvIFBFUyAqLwogCQkJaWYgKCFjeC0+c2VhcmNoX3BhY2tfaGVhZGVyKSB7CisJCQkJLyogQ29udGludWUgaWYgaXQgY291bGRuJ3QgYmUgYSBQRVMgcGFja2V0ICovCiAJCQkJaWYgKChxWzZdICYgMHhjMCkgIT0gMHg4MCkKIAkJCQkJY29udGludWU7Ci0JCQkJaWYgKCgocVs3XSAmIDB4YzApID09IDB4ODAgJiYKLQkJCQkgICAgIChxWzldICYgMHhmMCkgPT0gMHgyMCkgfHwKLQkJCQkgICAgKChxWzddICYgMHhjMCkgPT0gMHhjMCAmJgotCQkJCSAgICAgKHFbOV0gJiAweGYwKSA9PSAweDMwKSkgewotCQkJCQljaCA9IDB4YmE7CisJCQkJLyogQ2hlY2sgaWYgYSBQVFMgb3IgUFRTICYgRFRTIGZvbGxvdyAqLworCQkJCWlmICgoKHFbN10gJiAweGMwKSA9PSAweDgwICYmICAvKiBQVFMgb25seSAqLworCQkJCSAgICAgKHFbOV0gJiAweGYwKSA9PSAweDIwKSB8fCAvKiBQVFMgb25seSAqLworCQkJCSAgICAoKHFbN10gJiAweGMwKSA9PSAweGMwICYmICAvKiBQVFMgJiBEVFMgKi8KKwkJCQkgICAgIChxWzldICYgMHhmMCkgPT0gMHgzMCkpIHsgLyogRFRTIGZvbGxvd3MgKi8KKwkJCQkJLyogQXNzdW1lIHdlIGZvdW5kIHRoZSB2aWRlbyBQRVMgaGRyICovCisJCQkJCWNoID0gMHhiYTsgLyogbmV4dCB3YW50IGEgUHJvZ3JhbSBQYWNrKi8KIAkJCQkJY3gtPnNlYXJjaF9wYWNrX2hlYWRlciA9IDE7Ci0JCQkJCXAgPSBxICsgOTsKKwkJCQkJcCA9IHEgKyA5OyAvKiBTa2lwIHRoaXMgdmlkZW8gUEVTIGhkciAqLwogCQkJCX0KIAkJCQljb250aW51ZTsKIAkJCX0KKworCQkJLyogV2UgbWF5IGhhdmUgZm91bmQgYSBQcm9ncmFtIFBhY2sgc3RhcnQgY29kZSAqLworCisJCQkvKiBHZXQgdGhlIGNvdW50IG9mIHN0dWZmaW5nIGJ5dGVzICYgdmVyaWZ5IHRoZW0gKi8KIAkJCXN0dWZmaW5nID0gcVsxM10gJiA3OwogCQkJLyogYWxsIHN0dWZmaW5nIGJ5dGVzIG11c3QgYmUgMHhmZiAqLwogCQkJZm9yIChpID0gMDsgaSA8IHN0dWZmaW5nOyBpKyspCiAJCQkJaWYgKHFbMTQgKyBpXSAhPSAweGZmKQogCQkJCQlicmVhazsKLQkJCWlmIChpID09IHN0dWZmaW5nICYmCi0JCQkgICAgKHFbNF0gJiAweGM0KSA9PSAweDQ0ICYmCi0JCQkgICAgKHFbMTJdICYgMykgPT0gMyAmJgotCQkJICAgIHFbMTQgKyBzdHVmZmluZ10gPT0gMCAmJgorCQkJaWYgKGkgPT0gc3R1ZmZpbmcgJiYgLyogcmlnaHQgbnVtYmVyIG9mIHN0dWZmaW5nIGJ5dGVzKi8KKwkJCSAgICAocVs0XSAmIDB4YzQpID09IDB4NDQgJiYgLyogbWFya2VyIGNoZWNrICovCisJCQkgICAgKHFbMTJdICYgMykgPT0gMyAmJiAgLyogbWFya2VyIGNoZWNrICovCisJCQkgICAgcVsxNCArIHN0dWZmaW5nXSA9PSAwICYmIC8qIFBFUyBQYWNrIG9yIFN5cyBIZHIgKi8KIAkJCSAgICBxWzE1ICsgc3R1ZmZpbmddID09IDAgJiYKIAkJCSAgICBxWzE2ICsgc3R1ZmZpbmddID09IDEpIHsKLQkJCQljeC0+c2VhcmNoX3BhY2tfaGVhZGVyID0gMDsKKwkJCQkvKiBXZSBkZWNsYXJlIHdlIGFjdHVhbGx5IGZvdW5kIGEgUHJvZ3JhbSBQYWNrKi8KKwkJCQljeC0+c2VhcmNoX3BhY2tfaGVhZGVyID0gMDsgLyogZXhwZWN0IHZpZCBQRVMgKi8KIAkJCQlsZW4gPSAoY2hhciAqKXEgLSBzdGFydDsKIAkJCQljeDE4X3NldHVwX3NsaWNlZF92YmlfYnVmKGN4KTsKIAkJCQlicmVhazsKQEAgLTU3OCw3ICs2MDgsNyBAQAogCQkvKiBNYXJrIHRoYXQgdGhlIHJhZGlvIGlzIG5vIGxvbmdlciBpbiB1c2UgKi8KIAkJY2xlYXJfYml0KENYMThfRl9JX1JBRElPX1VTRVIsICZjeC0+aV9mbGFncyk7CiAJCS8qIFN3aXRjaCB0dW5lciB0byBUViAqLwotCQljeDE4X2NhbGxfaTJjX2NsaWVudHMoY3gsIFZJRElPQ19TX1NURCwgJmN4LT5zdGQpOworCQljeDE4X2NhbGxfYWxsKGN4LCB0dW5lciwgc19zdGQsIGN4LT5zdGQpOwogCQkvKiBTZWxlY3QgY29ycmVjdCBhdWRpbyBpbnB1dCAoaS5lLiBUViB0dW5lciBvciBMaW5lIGluKSAqLwogCQljeDE4X2F1ZGlvX3NldF9pbyhjeCk7CiAJCWlmIChhdG9taWNfcmVhZCgmY3gtPmFuYV9jYXB0dXJpbmcpID4gMCkgewpAQCAtNjQxLDcgKzY3MSw3IEBACiAJCS8qIFdlIGhhdmUgdGhlIHJhZGlvICovCiAJCWN4MThfbXV0ZShjeCk7CiAJCS8qIFN3aXRjaCB0dW5lciB0byByYWRpbyAqLwotCQljeDE4X2NhbGxfaTJjX2NsaWVudHMoY3gsIEFVRENfU0VUX1JBRElPLCBOVUxMKTsKKwkJY3gxOF9jYWxsX2FsbChjeCwgdHVuZXIsIHNfcmFkaW8pOwogCQkvKiBTZWxlY3QgdGhlIGNvcnJlY3QgYXVkaW8gaW5wdXQgKGkuZS4gcmFkaW8gdHVuZXIpICovCiAJCWN4MThfYXVkaW9fc2V0X2lvKGN4KTsKIAkJLyogRG9uZSEgVW5tdXRlIGFuZCBjb250aW51ZS4gKi8KQEAgLTY1MiwzOCArNjgyLDE1IEBACiAKIGludCBjeDE4X3Y0bDJfb3BlbihzdHJ1Y3QgZmlsZSAqZmlscCkKIHsKLQlpbnQgcmVzLCB4LCB5ID0gMDsKLQlzdHJ1Y3QgY3gxOCAqY3ggPSBOVUxMOwotCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9IE5VTEw7Ci0JaW50IG1pbm9yID0gdmlkZW9fZGV2ZGF0YShmaWxwKS0+bWlub3I7Ci0KLQkvKiBGaW5kIHdoaWNoIGNhcmQgdGhpcyBvcGVuIHdhcyBvbiAqLwotCXNwaW5fbG9jaygmY3gxOF9jYXJkc19sb2NrKTsKLQlmb3IgKHggPSAwOyBjeCA9PSBOVUxMICYmIHggPCBjeDE4X2NhcmRzX2FjdGl2ZTsgeCsrKSB7Ci0JCS8qIGZpbmQgb3V0IHdoaWNoIHN0cmVhbSB0aGlzIG9wZW4gd2FzIG9uICovCi0JCWZvciAoeSA9IDA7IHkgPCBDWDE4X01BWF9TVFJFQU1TOyB5KyspIHsKLQkJCWlmIChjeDE4X2NhcmRzW3hdID09IE5VTEwpCi0JCQkJY29udGludWU7Ci0JCQlzID0gJmN4MThfY2FyZHNbeF0tPnN0cmVhbXNbeV07Ci0JCQlpZiAocy0+djRsMmRldiAmJiBzLT52NGwyZGV2LT5taW5vciA9PSBtaW5vcikgewotCQkJCWN4ID0gY3gxOF9jYXJkc1t4XTsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCX0KLQlzcGluX3VubG9jaygmY3gxOF9jYXJkc19sb2NrKTsKLQotCWlmIChjeCA9PSBOVUxMKSB7Ci0JCS8qIENvdWxkbid0IGZpbmQgYSBkZXZpY2UgcmVnaXN0ZXJlZAotCQkgICBvbiB0aGF0IG1pbm9yLCBzaG91bGRuJ3QgaGFwcGVuISAqLwotCQlwcmludGsoS0VSTl9XQVJOSU5HICJObyBjeDE4IGRldmljZSBmb3VuZCBvbiBtaW5vciAlZFxuIiwKLQkJCQltaW5vcik7Ci0JCXJldHVybiAtRU5YSU87Ci0JfQorCWludCByZXM7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxwKTsKKwlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMgPSB2aWRlb19nZXRfZHJ2ZGF0YSh2aWRlb19kZXYpOworCXN0cnVjdCBjeDE4ICpjeCA9IHMtPmN4OzsKIAogCW11dGV4X2xvY2soJmN4LT5zZXJpYWxpemVfbG9jayk7CiAJaWYgKGN4MThfaW5pdF9vbl9maXJzdF9vcGVuKGN4KSkgewotCQlDWDE4X0VSUigiRmFpbGVkIHRvIGluaXRpYWxpemUgb24gbWlub3IgJWRcbiIsIG1pbm9yKTsKKwkJQ1gxOF9FUlIoIkZhaWxlZCB0byBpbml0aWFsaXplIG9uIG1pbm9yICVkXG4iLAorCQkJIHZpZGVvX2Rldi0+bWlub3IpOwogCQltdXRleF91bmxvY2soJmN4LT5zZXJpYWxpemVfbG9jayk7CiAJCXJldHVybiAtRU5YSU87CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlybXdhcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWZpcm13YXJlLmMKaW5kZXggMWZhOTVkYS4uODNjZDU1OSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZmlybXdhcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1maXJtd2FyZS5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiY3gxOC1pcnEuaCIKICNpbmNsdWRlICJjeDE4LWZpcm13YXJlLmgiCiAjaW5jbHVkZSAiY3gxOC1jYXJkcy5oIgotI2luY2x1ZGUgImN4MTgtYXYtY29yZS5oIgogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAKICNkZWZpbmUgQ1gxOF9QUk9DX1NPRlRfUkVTRVQgCQkweGM3MDAxMApAQCAtMTA3LDcgKzEwNiw3IEBACiAJdTMyIF9faW9tZW0gKmRzdCA9ICh1MzIgX19pb21lbSAqKW1lbTsKIAljb25zdCB1MzIgKnNyYzsKIAotCWlmIChyZXF1ZXN0X2Zpcm13YXJlKCZmdywgZm4sICZjeC0+ZGV2LT5kZXYpKSB7CisJaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmbiwgJmN4LT5wY2lfZGV2LT5kZXYpKSB7CiAJCUNYMThfRVJSKCJVbmFibGUgdG8gb3BlbiBmaXJtd2FyZSAlc1xuIiwgZm4pOwogCQlDWDE4X0VSUigiRGlkIHlvdSBwdXQgdGhlIGZpcm13YXJlIGluIHRoZSBob3RwbHVnIGZpcm13YXJlIGRpcmVjdG9yeT9cbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKQEAgLTE1MSw3ICsxNTAsNyBAQAogCXUzMiBhcHVfdmVyc2lvbiA9IDA7CiAJaW50IHN6OwogCi0JaWYgKHJlcXVlc3RfZmlybXdhcmUoJmZ3LCBmbiwgJmN4LT5kZXYtPmRldikpIHsKKwlpZiAocmVxdWVzdF9maXJtd2FyZSgmZncsIGZuLCAmY3gtPnBjaV9kZXYtPmRldikpIHsKIAkJQ1gxOF9FUlIoInVuYWJsZSB0byBvcGVuIGZpcm13YXJlICVzXG4iLCBmbik7CiAJCUNYMThfRVJSKCJkaWQgeW91IHB1dCB0aGUgZmlybXdhcmUgaW4gdGhlIGhvdHBsdWcgZmlybXdhcmUgZGlyZWN0b3J5P1xuIik7CiAJCWN4MThfc2V0dXBfcGFnZShjeCwgMCk7CkBAIC0yODYsMjMgKzI4NSw2IEBACiAJY3gxOF93cml0ZV9yZWcoY3gsIDB4MkJFMkZFLCBDWDE4X01QRUdfQ0xPQ0tfUExMX0ZSQUMpOwogCWN4MThfd3JpdGVfcmVnKGN4LCA4LCBDWDE4X01QRUdfQ0xPQ0tfUExMX1BPU1QpOwogCi0JLyoKLQkgKiBWRENMSyAgSW50ZWdlciA9IDB4MGYsIFBvc3QgRGl2aWRlciA9IDB4MDQKLQkgKiBBSU1DTEsgSW50ZWdlciA9IDB4MGUsIFBvc3QgRGl2aWRlciA9IDB4MTYKLQkgKi8KLQljeDE4X2F2X3dyaXRlNChjeCwgQ1hBREVDX1BMTF9DVFJMMSwgMHgxNjBlMDQwZik7Ci0KLQkvKiBWRENMSyBGcmFjdGlvbiA9IDB4MmJlMmZlICovCi0JLyogeHRhbCAqIDB4Zi4xNWYxN2YwLzQgPSAxMDggTUh6OiA0MzIgTUh6IGJlZm9yZSBwb3N0IGRpdmlkZSAqLwotCWN4MThfYXZfd3JpdGU0KGN4LCBDWEFERUNfVklEX1BMTF9GUkFDLCAweDAwMmJlMmZlKTsKLQotCS8qIEFJTUNMSyBGcmFjdGlvbiA9IDB4MDUyMjdhZCAqLwotCS8qIHh0YWwgKiAweGUuMjkxM2Q2OC8weDE2ID0gNDgwMDAgKiAzODQ6IDQwNiBNSHogYmVmb3JlIHBvc3QtZGl2aWRlICovCi0JY3gxOF9hdl93cml0ZTQoY3gsIENYQURFQ19BVVhfUExMX0ZSQUMsIDB4MDA1MjI3YWQpOwotCi0JLyogU0FfTUNMS19TRUw9MSwgU0FfTUNMS19ESVY9MHgxNiAqLwotCWN4MThfYXZfd3JpdGUoY3gsIENYQURFQ19JMlNfTUNMSywgMHg1Nik7Ci0KIAkvKiBEZWZhdWx0cyAqLwogCS8qIEFQVSA9IFNDIG9yIFNDLzIgPSAxMjUvNjIuNSAqLwogCS8qIEVQVSA9IFNDID0gMTI1ICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1ncGlvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1ncGlvLmMKaW5kZXggMWE5OTMyOS4uNTUxOGQxNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZ3Bpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWdwaW8uYwpAQCAtNDYsNiArNDYsOSBAQAogICogZ3BpbzEzOiBjczUzNDUgcmVzZXQgcGluCiAqLwogCisvKgorICogRmlsZSBzY29wZSB1dGlsaXR5IGZ1bmN0aW9ucworICovCiBzdGF0aWMgdm9pZCBncGlvX3dyaXRlKHN0cnVjdCBjeDE4ICpjeCkKIHsKIAl1MzIgZGlyX2xvID0gY3gtPmdwaW9fZGlyICYgMHhmZmZmOwpAQCAtNjMsNzMgKzY2LDIwMSBAQAogCQkJCQlDWDE4X1JFR19HUElPX09VVDIsIHZhbF9oaSwgZGlyX2hpKTsKIH0KIAotdm9pZCBjeDE4X3Jlc2V0X2kyY19zbGF2ZXNfZ3BpbyhzdHJ1Y3QgY3gxOCAqY3gpCitzdGF0aWMgdm9pZCBncGlvX3VwZGF0ZShzdHJ1Y3QgY3gxOCAqY3gsIHUzMiBtYXNrLCB1MzIgZGF0YSkKIHsKLQljb25zdCBzdHJ1Y3QgY3gxOF9ncGlvX2kyY19zbGF2ZV9yZXNldCAqcDsKLQotCXAgPSAmY3gtPmNhcmQtPmdwaW9faTJjX3NsYXZlX3Jlc2V0OwotCi0JaWYgKChwLT5hY3RpdmVfbG9fbWFzayB8IHAtPmFjdGl2ZV9oaV9tYXNrKSA9PSAwKQorCWlmIChtYXNrID09IDApCiAJCXJldHVybjsKIAotCS8qIEFzc3VtaW5nIHRoYXQgdGhlIG1hc2tzIGFyZSBhIHN1YnNldCBvZiB0aGUgYml0cyBpbiBncGlvX2RpciAqLworCW11dGV4X2xvY2soJmN4LT5ncGlvX2xvY2spOworCWN4LT5ncGlvX3ZhbCA9IChjeC0+Z3Bpb192YWwgJiB+bWFzaykgfCAoZGF0YSAmIG1hc2spOworCWdwaW9fd3JpdGUoY3gpOworCW11dGV4X3VubG9jaygmY3gtPmdwaW9fbG9jayk7Cit9CisKK3N0YXRpYyB2b2lkIGdwaW9fcmVzZXRfc2VxKHN0cnVjdCBjeDE4ICpjeCwgdTMyIGFjdGl2ZV9sbywgdTMyIGFjdGl2ZV9oaSwKKwkJCSAgIHVuc2lnbmVkIGludCBhc3NlcnRfbXNlY3MsCisJCQkgICB1bnNpZ25lZCBpbnQgcmVjb3ZlcnlfbXNlY3MpCit7CisJdTMyIG1hc2s7CisKKwltYXNrID0gYWN0aXZlX2xvIHwgYWN0aXZlX2hpOworCWlmIChtYXNrID09IDApCisJCXJldHVybjsKKworCS8qCisJICogQXNzdW1pbmcgdGhhdCBhY3RpdmVfaGkgYW5kIGFjdGl2ZV9sbyBhcmUgYSBzdWJzZXRzIG9mIHRoZSBiaXRzIGluCisJICogZ3Bpb19kaXIuICBBbHNvIGFzc3VtZXMgdGhhdCBhY3RpdmVfbG8gYW5kIGFjdGl2ZV9oaSBkb24ndCBvdmVybGFwCisJICogaW4gYW55IGJpdCBwb3NpdGlvbgorCSAqLwogCiAJLyogQXNzZXJ0ICovCi0JbXV0ZXhfbG9jaygmY3gtPmdwaW9fbG9jayk7Ci0JY3gtPmdwaW9fdmFsID0KLQkJKGN4LT5ncGlvX3ZhbCB8IHAtPmFjdGl2ZV9oaV9tYXNrKSAmIH4ocC0+YWN0aXZlX2xvX21hc2spOwotCWdwaW9fd3JpdGUoY3gpOwotCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMocC0+bXNlY3NfYXNzZXJ0ZWQpKTsKKwlncGlvX3VwZGF0ZShjeCwgbWFzaywgfmFjdGl2ZV9sbyk7CisJc2NoZWR1bGVfdGltZW91dF91bmludGVycnVwdGlibGUobXNlY3NfdG9famlmZmllcyhhc3NlcnRfbXNlY3MpKTsKIAogCS8qIERlYXNzZXJ0ICovCi0JY3gtPmdwaW9fdmFsID0KLQkJKGN4LT5ncGlvX3ZhbCB8IHAtPmFjdGl2ZV9sb19tYXNrKSAmIH4ocC0+YWN0aXZlX2hpX21hc2spOwotCWdwaW9fd3JpdGUoY3gpOwotCXNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMocC0+bXNlY3NfcmVjb3ZlcnkpKTsKLQltdXRleF91bmxvY2soJmN4LT5ncGlvX2xvY2spOworCWdwaW9fdXBkYXRlKGN4LCBtYXNrLCB+YWN0aXZlX2hpKTsKKwlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKHJlY292ZXJ5X21zZWNzKSk7CiB9CiAKLXZvaWQgY3gxOF9yZXNldF9pcl9ncGlvKHZvaWQgKmRhdGEpCisvKgorICogR1BJTyBNdWx0aXBsZXhlciAtIGxvZ2ljYWwgZGV2aWNlCisgKi8KK3N0YXRpYyBpbnQgZ3Bpb211eF9sb2dfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7Ci0Jc3RydWN0IGN4MTggKmN4ID0gKChzdHJ1Y3QgY3gxOF9pMmNfYWxnb19jYWxsYmFja19kYXRhICopZGF0YSktPmN4OworCXN0cnVjdCBjeDE4ICpjeCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJbXV0ZXhfbG9jaygmY3gtPmdwaW9fbG9jayk7CisJQ1gxOF9JTkZPX0RFVihzZCwgIkdQSU86ICBkaXJlY3Rpb24gMHglMDh4LCB2YWx1ZSAweCUwOHhcbiIsCisJCSAgICAgIGN4LT5ncGlvX2RpciwgY3gtPmdwaW9fdmFsKTsKKwltdXRleF91bmxvY2soJmN4LT5ncGlvX2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IGdwaW9tdXhfc19yYWRpbyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXN0cnVjdCBjeDE4ICpjeCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJLyoKKwkgKiBGSVhNRSAtIHdvcmsgb3V0IHRoZSBjeC0+YWN0aXZlL2F1ZGlvX2lucHV0IG1lc3MgLSB0aGlzIGlzCisJICogaW50ZW5kZWQgdG8gaGFuZGxlIHRoZSBzd2l0Y2ggdG8gcmFkaW8gbW9kZSBhbmQgc2V0IHRoZQorCSAqIGF1ZGlvIHJvdXRpbmcsIGJ1dCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgc3RhdGUgaW4gY3gKKwkgKi8KKwlncGlvX3VwZGF0ZShjeCwgY3gtPmNhcmQtPmdwaW9fYXVkaW9faW5wdXQubWFzaywKKwkJCWN4LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0LnJhZGlvKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBncGlvbXV4X3Nfc3RkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkIG5vcm0pCit7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJdTMyIGRhdGE7CisKKwlzd2l0Y2ggKGN4LT5jYXJkLT5hdWRpb19pbnB1dHNbY3gtPmF1ZGlvX2lucHV0XS5tdXhlcl9pbnB1dCkgeworCWNhc2UgMToKKwkJZGF0YSA9IGN4LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0LmxpbmVpbjsKKwkJYnJlYWs7CisJY2FzZSAwOgorCQlkYXRhID0gY3gtPmNhcmQtPmdwaW9fYXVkaW9faW5wdXQudHVuZXI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qCisJCSAqIEZJWE1FIC0gd29yayBvdXQgdGhlIGN4LT5hY3RpdmUvYXVkaW9faW5wdXQgbWVzcyAtIHRoaXMgaXMKKwkJICogaW50ZW5kZWQgdG8gaGFuZGxlIHRoZSBzd2l0Y2ggZnJvbSByYWRpbyBtb2RlIGFuZCBzZXQgdGhlCisJCSAqIGF1ZGlvIHJvdXRpbmcsIGJ1dCB3ZSBuZWVkIHRvIHVwZGF0ZSB0aGUgc3RhdGUgaW4gY3gKKwkJICovCisJCWRhdGEgPSBjeC0+Y2FyZC0+Z3Bpb19hdWRpb19pbnB1dC50dW5lcjsKKwkJYnJlYWs7CisJfQorCWdwaW9fdXBkYXRlKGN4LCBjeC0+Y2FyZC0+Z3Bpb19hdWRpb19pbnB1dC5tYXNrLCBkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBncGlvbXV4X3NfYXVkaW9fcm91dGluZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCSAgIGNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQoreworCXN0cnVjdCBjeDE4ICpjeCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXUzMiBkYXRhOworCisJc3dpdGNoIChyb3V0ZS0+aW5wdXQpIHsKKwljYXNlIDA6CisJCWRhdGEgPSBjeC0+Y2FyZC0+Z3Bpb19hdWRpb19pbnB1dC50dW5lcjsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlkYXRhID0gY3gtPmNhcmQtPmdwaW9fYXVkaW9faW5wdXQubGluZWluOworCQlicmVhazsKKwljYXNlIDI6CisJCWRhdGEgPSBjeC0+Y2FyZC0+Z3Bpb19hdWRpb19pbnB1dC5yYWRpbzsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWdwaW9fdXBkYXRlKGN4LCBjeC0+Y2FyZC0+Z3Bpb19hdWRpb19pbnB1dC5tYXNrLCBkYXRhKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBncGlvbXV4X2NvcmVfb3BzID0geworCS5sb2dfc3RhdHVzID0gZ3Bpb211eF9sb2dfc3RhdHVzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgZ3Bpb211eF90dW5lcl9vcHMgPSB7CisJLnNfc3RkID0gZ3Bpb211eF9zX3N0ZCwKKwkuc19yYWRpbyA9IGdwaW9tdXhfc19yYWRpbywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfYXVkaW9fb3BzIGdwaW9tdXhfYXVkaW9fb3BzID0geworCS5zX3JvdXRpbmcgPSBncGlvbXV4X3NfYXVkaW9fcm91dGluZywKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIGdwaW9tdXhfb3BzID0geworCS5jb3JlID0gJmdwaW9tdXhfY29yZV9vcHMsCisJLnR1bmVyID0gJmdwaW9tdXhfdHVuZXJfb3BzLAorCS5hdWRpbyA9ICZncGlvbXV4X2F1ZGlvX29wcywKK307CisKKy8qCisgKiBHUElPIFJlc2V0IENvbnRyb2xsZXIgLSBsb2dpY2FsIGRldmljZQorICovCitzdGF0aWMgaW50IHJlc2V0Y3RybF9sb2dfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwltdXRleF9sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKKwlDWDE4X0lORk9fREVWKHNkLCAiR1BJTzogIGRpcmVjdGlvbiAweCUwOHgsIHZhbHVlIDB4JTA4eFxuIiwKKwkJICAgICAgY3gtPmdwaW9fZGlyLCBjeC0+Z3Bpb192YWwpOworCW11dGV4X3VubG9jaygmY3gtPmdwaW9fbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcmVzZXRjdHJsX3Jlc2V0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiB2YWwpCit7CisJc3RydWN0IGN4MTggKmN4ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAJY29uc3Qgc3RydWN0IGN4MThfZ3Bpb19pMmNfc2xhdmVfcmVzZXQgKnA7CiAKIAlwID0gJmN4LT5jYXJkLT5ncGlvX2kyY19zbGF2ZV9yZXNldDsKLQotCWlmIChwLT5pcl9yZXNldF9tYXNrID09IDApCi0JCXJldHVybjsKLQotCUNYMThfREVCVUdfSU5GTygiUmVzZXR0aW5nIElSIG1pY3JvY29udHJvbGxlclxuIik7Ci0KLQkvKgotCSAgIEFzc2VydCB0aW1pbmcgZm9yIHRoZSBaOEYwODExIG9uIEhWUi0xNjAwIGJvYXJkczoKLQkgICAxLiBBc3NlcnQgUkVTRVQgZm9yIG1pbiBvZiA0IGNsb2NrIGN5Y2xlcyBhdCAxOC40MzIgTUh6IHRvIGluaXRpYXRlCi0JICAgMi4gUmVzZXQgdGhlbiB0YWtlcyA2NiBXRFQgY3ljbGVzIGF0IDEwIGtIeiArIDE2IHh0YWwgY2xvY2sgY3ljbGVzCi0JCSg2LDYwMSwwODUgbmFub3NlY29uZHMgfj0gNyBtaWxsaXNlY29uZHMpCi0JICAgMy4gREJHIHBpbiBtdXN0IGJlIGhpZ2ggYmVmb3JlIGNoaXAgZXhpdHMgcmVzZXQgZm9yIG5vcm1hbCBvcGVyYXRpb24uCi0JCURCRyBpcyBvcGVuIGRyYWluIGFuZCBob3BlZnVsbHkgcHVsbGVkIGhpZ2ggc2luY2Ugd2UgZG9uJ3QKLQkJbm9ybWFsbHkgZHJpdmUgaXQgKEdQSU8gMT8pIGZvciB0aGUgSFZSLTE2MDAKLQkgICA0LiBaOEYwODExIHdvbid0IGV4aXQgcmVzZXQgdW50aWwgUkVTRVQgaXMgZGVhc3NlcnRlZAotCSovCi0JbXV0ZXhfbG9jaygmY3gtPmdwaW9fbG9jayk7Ci0JY3gtPmdwaW9fdmFsID0gY3gtPmdwaW9fdmFsICYgfnAtPmlyX3Jlc2V0X21hc2s7Ci0JZ3Bpb193cml0ZShjeCk7Ci0JbXV0ZXhfdW5sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKLQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKHAtPm1zZWNzX2Fzc2VydGVkKSk7Ci0KLQkvKgotCSAgIFppbG9nIGNvbWVzIG91dCBvZiByZXNldCwgbG9hZHMgcmVzZXQgdmVjdG9yIGFkZHJlc3MgYW5kIGV4ZWN1dGVzCi0JICAgZnJvbSB0aGVyZS4gUmVxdWlyZWQgcmVjb3ZlcnkgZGVsYXkgdW5rbm93bi4KLQkqLwotCW11dGV4X2xvY2soJmN4LT5ncGlvX2xvY2spOwotCWN4LT5ncGlvX3ZhbCA9IGN4LT5ncGlvX3ZhbCB8IHAtPmlyX3Jlc2V0X21hc2s7Ci0JZ3Bpb193cml0ZShjeCk7Ci0JbXV0ZXhfdW5sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKLQlzY2hlZHVsZV90aW1lb3V0X3VuaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKHAtPm1zZWNzX3JlY292ZXJ5KSk7CisJc3dpdGNoICh2YWwpIHsKKwljYXNlIENYMThfR1BJT19SRVNFVF9JMkM6CisJCWdwaW9fcmVzZXRfc2VxKGN4LCBwLT5hY3RpdmVfbG9fbWFzaywgcC0+YWN0aXZlX2hpX21hc2ssCisJCQkgICAgICAgcC0+bXNlY3NfYXNzZXJ0ZWQsIHAtPm1zZWNzX3JlY292ZXJ5KTsKKwkJYnJlYWs7CisJY2FzZSBDWDE4X0dQSU9fUkVTRVRfWjhGMDgxMToKKwkJLyoKKwkJICogQXNzZXJ0IHRpbWluZyBmb3IgdGhlIFo4RjA4MTEgb24gSFZSLTE2MDAgYm9hcmRzOgorCQkgKiAxLiBBc3NlcnQgUkVTRVQgZm9yIG1pbiBvZiA0IGNsb2NrIGN5Y2xlcyBhdCAxOC40MzIgTUh6IHRvCisJCSAqICAgIGluaXRpYXRlCisJCSAqIDIuIFJlc2V0IHRoZW4gdGFrZXMgNjYgV0RUIGN5Y2xlcyBhdCAxMCBrSHogKyAxNiB4dGFsIGNsb2NrCisJCSAqICAgIGN5Y2xlcyAoNiw2MDEsMDg1IG5hbm9zZWNvbmRzIH49IDcgbWlsbGlzZWNvbmRzKQorCQkgKiAzLiBEQkcgcGluIG11c3QgYmUgaGlnaCBiZWZvcmUgY2hpcCBleGl0cyByZXNldCBmb3Igbm9ybWFsCisJCSAqICAgIG9wZXJhdGlvbi4gIERCRyBpcyBvcGVuIGRyYWluIGFuZCBob3BlZnVsbHkgcHVsbGVkIGhpZ2gKKwkJICogICAgc2luY2Ugd2UgZG9uJ3Qgbm9ybWFsbHkgZHJpdmUgaXQgKEdQSU8gMT8pIGZvciB0aGUKKwkJICogICAgSFZSLTE2MDAKKwkJICogNC4gWjhGMDgxMSB3b24ndCBleGl0IHJlc2V0IHVudGlsIFJFU0VUIGlzIGRlYXNzZXJ0ZWQKKwkJICogNS4gWmlsb2cgY29tZXMgb3V0IG9mIHJlc2V0LCBsb2FkcyByZXNldCB2ZWN0b3IgYWRkcmVzcyBhbmQKKwkJICogICAgZXhlY3V0ZXMgZnJvbSB0aGVyZS4gUmVxdWlyZWQgcmVjb3ZlcnkgZGVsYXkgdW5rbm93bi4KKwkJICovCisJCWdwaW9fcmVzZXRfc2VxKGN4LCBwLT5pcl9yZXNldF9tYXNrLCAwLAorCQkJICAgICAgIHAtPm1zZWNzX2Fzc2VydGVkLCBwLT5tc2Vjc19yZWNvdmVyeSk7CisJCWJyZWFrOworCWNhc2UgQ1gxOF9HUElPX1JFU0VUX1hDMjAyODoKKwkJaWYgKGN4LT5jYXJkLT50dW5lcnNbMF0udHVuZXIgPT0gVFVORVJfWEMyMDI4KQorCQkJZ3Bpb19yZXNldF9zZXEoY3gsICgxIDw8IGN4LT5jYXJkLT54Y2VpdmVfcGluKSwgMCwKKwkJCQkgICAgICAgMSwgMSk7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKIH0KLUVYUE9SVF9TWU1CT0woY3gxOF9yZXNldF9pcl9ncGlvKTsKLS8qIFRoaXMgc3ltYm9sIGlzIGV4cG9ydGVkIGZvciB1c2UgYnkgYW4gaW5mcmFyZWQgbW9kdWxlIGZvciB0aGUgSVItYmxhc3RlciAqLwogCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHJlc2V0Y3RybF9jb3JlX29wcyA9IHsKKwkubG9nX3N0YXR1cyA9IHJlc2V0Y3RybF9sb2dfc3RhdHVzLAorCS5yZXNldCA9IHJlc2V0Y3RybF9yZXNldCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHJlc2V0Y3RybF9vcHMgPSB7CisJLmNvcmUgPSAmcmVzZXRjdHJsX2NvcmVfb3BzLAorfTsKKworLyoKKyAqIEV4dGVybmFsIGVudHJ5IHBvaW50cworICovCiB2b2lkIGN4MThfZ3Bpb19pbml0KHN0cnVjdCBjeDE4ICpjeCkKIHsKIAltdXRleF9sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKQEAgLTE1Niw2ICsyODcsNDkgQEAKIAltdXRleF91bmxvY2soJmN4LT5ncGlvX2xvY2spOwogfQogCitpbnQgY3gxOF9ncGlvX3JlZ2lzdGVyKHN0cnVjdCBjeDE4ICpjeCwgdTMyIGh3KQoreworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisJY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyAqb3BzOworCWNoYXIgKnN0cjsKKworCXN3aXRjaCAoaHcpIHsKKwljYXNlIENYMThfSFdfR1BJT19NVVg6CisJCXNkID0gJmN4LT5zZF9ncGlvbXV4OworCQlvcHMgPSAmZ3Bpb211eF9vcHM7CisJCXN0ciA9ICJncGlvLW11eCI7CisJCWJyZWFrOworCWNhc2UgQ1gxOF9IV19HUElPX1JFU0VUX0NUUkw6CisJCXNkID0gJmN4LT5zZF9yZXNldGN0cmw7CisJCW9wcyA9ICZyZXNldGN0cmxfb3BzOworCQlzdHIgPSAiZ3Bpby1yZXNldC1jdHJsIjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJdjRsMl9zdWJkZXZfaW5pdChzZCwgb3BzKTsKKwl2NGwyX3NldF9zdWJkZXZkYXRhKHNkLCBjeCk7CisJc25wcmludGYoc2QtPm5hbWUsIHNpemVvZihzZC0+bmFtZSksICIlcyAlcyIsIGN4LT52NGwyX2Rldi5uYW1lLCBzdHIpOworCXNkLT5ncnBfaWQgPSBodzsKKwlyZXR1cm4gdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2KCZjeC0+djRsMl9kZXYsIHNkKTsKK30KKwordm9pZCBjeDE4X3Jlc2V0X2lyX2dwaW8odm9pZCAqZGF0YSkKK3sKKwlzdHJ1Y3QgY3gxOCAqY3ggPSB0b19jeDE4KChzdHJ1Y3QgdjRsMl9kZXZpY2UgKilkYXRhKTsKKworCWlmIChjeC0+Y2FyZC0+Z3Bpb19pMmNfc2xhdmVfcmVzZXQuaXJfcmVzZXRfbWFzayA9PSAwKQorCQlyZXR1cm47CisKKwlDWDE4X0RFQlVHX0lORk8oIlJlc2V0dGluZyBJUiBtaWNyb2NvbnRyb2xsZXJcbiIpOworCisJdjRsMl9zdWJkZXZfY2FsbCgmY3gtPnNkX3Jlc2V0Y3RybCwKKwkJCSBjb3JlLCByZXNldCwgQ1gxOF9HUElPX1JFU0VUX1o4RjA4MTEpOworfQorRVhQT1JUX1NZTUJPTChjeDE4X3Jlc2V0X2lyX2dwaW8pOworLyogVGhpcyBzeW1ib2wgaXMgZXhwb3J0ZWQgZm9yIHVzZSBieSBsaXJjX3B2cjE1MCBmb3IgdGhlIElSLWJsYXN0ZXIgKi8KKwogLyogWGNlaXZlIHR1bmVyIHJlc2V0IGZ1bmN0aW9uICovCiBpbnQgY3gxOF9yZXNldF90dW5lcl9ncGlvKHZvaWQgKmRldiwgaW50IGNvbXBvbmVudCwgaW50IGNtZCwgaW50IHZhbHVlKQogewpAQCAtMTYzLDU2ICszMzcsMTEgQEAKIAlzdHJ1Y3QgY3gxOF9pMmNfYWxnb19jYWxsYmFja19kYXRhICpjYl9kYXRhID0gYWxnby0+ZGF0YTsKIAlzdHJ1Y3QgY3gxOCAqY3ggPSBjYl9kYXRhLT5jeDsKIAotCWlmIChjbWQgIT0gWEMyMDI4X1RVTkVSX1JFU0VUKQorCWlmIChjbWQgIT0gWEMyMDI4X1RVTkVSX1JFU0VUIHx8CisJICAgIGN4LT5jYXJkLT50dW5lcnNbMF0udHVuZXIgIT0gVFVORVJfWEMyMDI4KQogCQlyZXR1cm4gMDsKLQlDWDE4X0RFQlVHX0lORk8oIlJlc2V0dGluZyB0dW5lclxuIik7CiAKLQltdXRleF9sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKLQljeC0+Z3Bpb192YWwgJj0gfigxIDw8IGN4LT5jYXJkLT54Y2VpdmVfcGluKTsKLQlncGlvX3dyaXRlKGN4KTsKLQltdXRleF91bmxvY2soJmN4LT5ncGlvX2xvY2spOwotCXNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShtc2Vjc190b19qaWZmaWVzKDEpKTsKLQotCW11dGV4X2xvY2soJmN4LT5ncGlvX2xvY2spOwotCWN4LT5ncGlvX3ZhbCB8PSAxIDw8IGN4LT5jYXJkLT54Y2VpdmVfcGluOwotCWdwaW9fd3JpdGUoY3gpOwotCW11dGV4X3VubG9jaygmY3gtPmdwaW9fbG9jayk7Ci0Jc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKG1zZWNzX3RvX2ppZmZpZXMoMSkpOwotCXJldHVybiAwOwotfQotCi1pbnQgY3gxOF9ncGlvKHN0cnVjdCBjeDE4ICpjeCwgdW5zaWduZWQgaW50IGNvbW1hbmQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSA9IGFyZzsKLQl1MzIgbWFzaywgZGF0YTsKLQotCXN3aXRjaCAoY29tbWFuZCkgewotCWNhc2UgVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkc6Ci0JCWlmIChyb3V0ZS0+aW5wdXQgPiAyKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCW1hc2sgPSBjeC0+Y2FyZC0+Z3Bpb19hdWRpb19pbnB1dC5tYXNrOwotCQlzd2l0Y2ggKHJvdXRlLT5pbnB1dCkgewotCQljYXNlIDA6Ci0JCQlkYXRhID0gY3gtPmNhcmQtPmdwaW9fYXVkaW9faW5wdXQudHVuZXI7Ci0JCQlicmVhazsKLQkJY2FzZSAxOgotCQkJZGF0YSA9IGN4LT5jYXJkLT5ncGlvX2F1ZGlvX2lucHV0LmxpbmVpbjsKLQkJCWJyZWFrOwotCQljYXNlIDI6Ci0JCWRlZmF1bHQ6Ci0JCQlkYXRhID0gY3gtPmNhcmQtPmdwaW9fYXVkaW9faW5wdXQucmFkaW87Ci0JCQlicmVhazsKLQkJfQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQlpZiAobWFzaykgewotCQltdXRleF9sb2NrKCZjeC0+Z3Bpb19sb2NrKTsKLQkJY3gtPmdwaW9fdmFsID0gKGN4LT5ncGlvX3ZhbCAmIH5tYXNrKSB8IChkYXRhICYgbWFzayk7Ci0JCWdwaW9fd3JpdGUoY3gpOwotCQltdXRleF91bmxvY2soJmN4LT5ncGlvX2xvY2spOwotCX0KLQlyZXR1cm4gMDsKKwlDWDE4X0RFQlVHX0lORk8oIlJlc2V0dGluZyBYQ2VpdmUgdHVuZXJcbiIpOworCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKCZjeC0+c2RfcmVzZXRjdHJsLAorCQkJCWNvcmUsIHJlc2V0LCBDWDE4X0dQSU9fUkVTRVRfWEMyMDI4KTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWdwaW8uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWdwaW8uaAppbmRleCAzOWZmY2NjLi5mOWE1Y2EzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1ncGlvLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtZ3Bpby5oCkBAIC0yMiw3ICsyMiwxMyBAQAogICovCiAKIHZvaWQgY3gxOF9ncGlvX2luaXQoc3RydWN0IGN4MTggKmN4KTsKLXZvaWQgY3gxOF9yZXNldF9pMmNfc2xhdmVzX2dwaW8oc3RydWN0IGN4MTggKmN4KTsKK2ludCBjeDE4X2dwaW9fcmVnaXN0ZXIoc3RydWN0IGN4MTggKmN4LCB1MzIgaHcpOworCitlbnVtIGN4MThfZ3Bpb19yZXNldF90eXBlIHsKKwlDWDE4X0dQSU9fUkVTRVRfSTJDICAgICA9IDAsCisJQ1gxOF9HUElPX1JFU0VUX1o4RjA4MTEgPSAxLAorCUNYMThfR1BJT19SRVNFVF9YQzIwMjggID0gMiwKK307CisKIHZvaWQgY3gxOF9yZXNldF9pcl9ncGlvKHZvaWQgKmRhdGEpOwogaW50IGN4MThfcmVzZXRfdHVuZXJfZ3Bpbyh2b2lkICpkZXYsIGludCBjb21wb25lbnQsIGludCBjbWQsIGludCB2YWx1ZSk7Ci1pbnQgY3gxOF9ncGlvKHN0cnVjdCBjeDE4ICpjeCwgdW5zaWduZWQgaW50IGNvbW1hbmQsIHZvaWQgKmFyZyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWkyYy5jCmluZGV4IDgzZTFjNjMuLmQwOTI2NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWkyYy5jCkBAIC0yNiw3ICsyNiw2IEBACiAjaW5jbHVkZSAiY3gxOC1pby5oIgogI2luY2x1ZGUgImN4MTgtY2FyZHMuaCIKICNpbmNsdWRlICJjeDE4LWdwaW8uaCIKLSNpbmNsdWRlICJjeDE4LWF2LWNvcmUuaCIKICNpbmNsdWRlICJjeDE4LWkyYy5oIgogI2luY2x1ZGUgImN4MTgtaXJxLmgiCiAKQEAgLTQzLDMxICs0MiwzNyBAQAogI2RlZmluZSBDWDE4X0NTNTM0NV9JMkNfQUREUgkJMHg0YwogCiAvKiBUaGlzIGFycmF5IHNob3VsZCBtYXRjaCB0aGUgQ1gxOF9IV18gZGVmaW5lcyAqLwotc3RhdGljIGNvbnN0IHU4IGh3X2RyaXZlcmlkc1tdID0gewotCUkyQ19EUklWRVJJRF9UVU5FUiwKLQlJMkNfRFJJVkVSSURfVFZFRVBST00sCi0JSTJDX0RSSVZFUklEX0NTNTM0NSwKLQkwLCAJCS8qIENYMThfSFdfR1BJTyBkdW1teSBkcml2ZXIgSUQgKi8KLQkwIAkJLyogQ1gxOF9IV19DWDIzNDE4IGR1bW15IGRyaXZlciBJRCAqLwotfTsKLQotLyogVGhpcyBhcnJheSBzaG91bGQgbWF0Y2ggdGhlIENYMThfSFdfIGRlZmluZXMgKi8KIHN0YXRpYyBjb25zdCB1OCBod19hZGRyc1tdID0gewotCTAsCi0JMCwKLQlDWDE4X0NTNTM0NV9JMkNfQUREUiwKLQkwLCAJCS8qIENYMThfSFdfR1BJTyBkdW1teSBkcml2ZXIgSUQgKi8KLQkwLAkJLyogQ1gxOF9IV19DWDIzNDE4IGR1bW15IGRyaXZlciBJRCAqLworCTAsCQkJLyogQ1gxOF9IV19UVU5FUiAqLworCTAsCQkJLyogQ1gxOF9IV19UVkVFUFJPTSAqLworCUNYMThfQ1M1MzQ1X0kyQ19BRERSLAkvKiBDWDE4X0hXX0NTNTM0NSAqLworCTAsCQkJLyogQ1gxOF9IV19EVkIgKi8KKwkwLAkJCS8qIENYMThfSFdfNDE4X0FWICovCisJMCwJCQkvKiBDWDE4X0hXX0dQSU9fTVVYICovCisJMCwJCQkvKiBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTCAqLwogfTsKIAogLyogVGhpcyBhcnJheSBzaG91bGQgbWF0Y2ggdGhlIENYMThfSFdfIGRlZmluZXMgKi8KIC8qIFRoaXMgbWlnaHQgd2VsbCBiZWNvbWUgYSBjYXJkLXNwZWNpZmljIGFycmF5ICovCiBzdGF0aWMgY29uc3QgdTggaHdfYnVzW10gPSB7Ci0JMCwKLQkwLAotCTAsCi0JMCwgCQkvKiBDWDE4X0hXX0dQSU8gZHVtbXkgZHJpdmVyIElEICovCi0JMCwJCS8qIENYMThfSFdfQ1gyMzQxOCBkdW1teSBkcml2ZXIgSUQgKi8KKwkxLAkvKiBDWDE4X0hXX1RVTkVSICovCisJMCwJLyogQ1gxOF9IV19UVkVFUFJPTSAqLworCTAsCS8qIENYMThfSFdfQ1M1MzQ1ICovCisJMCwJLyogQ1gxOF9IV19EVkIgKi8KKwkwLAkvKiBDWDE4X0hXXzQxOF9BViAqLworCTAsCS8qIENYMThfSFdfR1BJT19NVVggKi8KKwkwLAkvKiBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTCAqLworfTsKKworLyogVGhpcyBhcnJheSBzaG91bGQgbWF0Y2ggdGhlIENYMThfSFdfIGRlZmluZXMgKi8KK3N0YXRpYyBjb25zdCBjaGFyICogY29uc3QgaHdfbW9kdWxlc1tdID0geworCSJ0dW5lciIsCS8qIENYMThfSFdfVFVORVIgKi8KKwlOVUxMLAkJLyogQ1gxOF9IV19UVkVFUFJPTSAqLworCSJjczUzNDUiLAkvKiBDWDE4X0hXX0NTNTM0NSAqLworCU5VTEwsCQkvKiBDWDE4X0hXX0RWQiAqLworCU5VTEwsCQkvKiBDWDE4X0hXXzQxOF9BViAqLworCU5VTEwsCQkvKiBDWDE4X0hXX0dQSU9fTVVYICovCisJTlVMTCwJCS8qIENYMThfSFdfR1BJT19SRVNFVF9DVFJMICovCiB9OwogCiAvKiBUaGlzIGFycmF5IHNob3VsZCBtYXRjaCB0aGUgQ1gxOF9IV18gZGVmaW5lcyAqLwpAQCAtNzUsODMgKzgwLDY3IEBACiAJInR1bmVyIiwKIAkidHZlZXByb20iLAogCSJjczUzNDUiLAotCSJncGlvIiwKLQkiY3gyMzQxOCIsCisJImN4MjM0MThfRFRWIiwKKwkiY3gyMzQxOF9BViIsCisJImdwaW9fbXV4IiwKKwkiZ3Bpb19yZXNldF9jdHJsIiwKIH07CiAKIGludCBjeDE4X2kyY19yZWdpc3RlcihzdHJ1Y3QgY3gxOCAqY3gsIHVuc2lnbmVkIGlkeCkKIHsKLQlzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gaW5mbzsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqYzsKLQl1OCBpZCwgYnVzOwotCWludCBpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisJaW50IGJ1cyA9IGh3X2J1c1tpZHhdOworCXN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCA9ICZjeC0+aTJjX2FkYXBbYnVzXTsKKwljb25zdCBjaGFyICptb2QgPSBod19tb2R1bGVzW2lkeF07CisJY29uc3QgY2hhciAqdHlwZSA9IGh3X2RldmljZW5hbWVzW2lkeF07CisJdTMyIGh3ID0gMSA8PCBpZHg7CiAKLQlDWDE4X0RFQlVHX0kyQygiaTJjIGNsaWVudCByZWdpc3RlclxuIik7Ci0JaWYgKGlkeCA+PSBBUlJBWV9TSVpFKGh3X2RyaXZlcmlkcykgfHwgaHdfZHJpdmVyaWRzW2lkeF0gPT0gMCkKKwlpZiAoaWR4ID49IEFSUkFZX1NJWkUoaHdfYWRkcnMpKQogCQlyZXR1cm4gLTE7Ci0JaWQgPSBod19kcml2ZXJpZHNbaWR4XTsKLQlidXMgPSBod19idXNbaWR4XTsKLQltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7Ci0Jc3RybGNweShpbmZvLnR5cGUsIGh3X2RldmljZW5hbWVzW2lkeF0sIHNpemVvZihpbmZvLnR5cGUpKTsKLQlpbmZvLmFkZHIgPSBod19hZGRyc1tpZHhdOwotCWZvciAoaSA9IDA7IGkgPCBJMkNfQ0xJRU5UU19NQVg7IGkrKykKLQkJaWYgKGN4LT5pMmNfY2xpZW50c1tpXSA9PSBOVUxMKQotCQkJYnJlYWs7CiAKLQlpZiAoaSA9PSBJMkNfQ0xJRU5UU19NQVgpIHsKLQkJQ1gxOF9FUlIoImluc3VmZmljaWVudCByb29tIGZvciBuZXcgSTJDIGNsaWVudCFcbiIpOwotCQlyZXR1cm4gLUVOT01FTTsKKwlpZiAoaHcgPT0gQ1gxOF9IV19UVU5FUikgeworCQkvKiBzcGVjaWFsIHR1bmVyIGdyb3VwIGhhbmRsaW5nICovCisJCXNkID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoYWRhcCwgbW9kLCB0eXBlLAorCQkJCQkJY3gtPmNhcmRfaTJjLT5yYWRpbyk7CisJCWlmIChzZCAhPSBOVUxMKQorCQkJc2QtPmdycF9pZCA9IGh3OworCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KGFkYXAsIG1vZCwgdHlwZSwKKwkJCQkJCWN4LT5jYXJkX2kyYy0+ZGVtb2QpOworCQlpZiAoc2QgIT0gTlVMTCkKKwkJCXNkLT5ncnBfaWQgPSBodzsKKwkJc2QgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldihhZGFwLCBtb2QsIHR5cGUsCisJCQkJCQljeC0+Y2FyZF9pMmMtPnR2KTsKKwkJaWYgKHNkICE9IE5VTEwpCisJCQlzZC0+Z3JwX2lkID0gaHc7CisJCXJldHVybiBzZCAhPSBOVUxMID8gMCA6IC0xOwogCX0KIAotCWlmIChpZCAhPSBJMkNfRFJJVkVSSURfVFVORVIpIHsKLQkJYyA9IGkyY19uZXdfZGV2aWNlKCZjeC0+aTJjX2FkYXBbYnVzXSwgJmluZm8pOwotCQlpZiAoYy0+ZHJpdmVyID09IE5VTEwpCi0JCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoYyk7Ci0JCWVsc2UKLQkJCWN4LT5pMmNfY2xpZW50c1tpXSA9IGM7Ci0JCXJldHVybiBjeC0+aTJjX2NsaWVudHNbaV0gPyAwIDogLUVOT0RFVjsKLQl9CisJLyogSXMgaXQgbm90IGFuIEkyQyBkZXZpY2Ugb3Igb25lIHdlIGRvIG5vdCB3aXNoIHRvIHJlZ2lzdGVyPyAqLworCWlmICghaHdfYWRkcnNbaWR4XSkKKwkJcmV0dXJuIC0xOwogCi0JLyogc3BlY2lhbCB0dW5lciBoYW5kbGluZyAqLwotCWMgPSBpMmNfbmV3X3Byb2JlZF9kZXZpY2UoJmN4LT5pMmNfYWRhcFsxXSwgJmluZm8sIGN4LT5jYXJkX2kyYy0+cmFkaW8pOwotCWlmIChjICYmIGMtPmRyaXZlciA9PSBOVUxMKQotCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoYyk7Ci0JZWxzZSBpZiAoYykKLQkJY3gtPmkyY19jbGllbnRzW2krK10gPSBjOwotCWMgPSBpMmNfbmV3X3Byb2JlZF9kZXZpY2UoJmN4LT5pMmNfYWRhcFsxXSwgJmluZm8sIGN4LT5jYXJkX2kyYy0+ZGVtb2QpOwotCWlmIChjICYmIGMtPmRyaXZlciA9PSBOVUxMKQotCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoYyk7Ci0JZWxzZSBpZiAoYykKLQkJY3gtPmkyY19jbGllbnRzW2krK10gPSBjOwotCWMgPSBpMmNfbmV3X3Byb2JlZF9kZXZpY2UoJmN4LT5pMmNfYWRhcFsxXSwgJmluZm8sIGN4LT5jYXJkX2kyYy0+dHYpOwotCWlmIChjICYmIGMtPmRyaXZlciA9PSBOVUxMKQotCQlpMmNfdW5yZWdpc3Rlcl9kZXZpY2UoYyk7Ci0JZWxzZSBpZiAoYykKLQkJY3gtPmkyY19jbGllbnRzW2krK10gPSBjOwotCXJldHVybiAwOworCS8qIEl0J3MgYW4gSTJDIGRldmljZSBvdGhlciB0aGFuIGFuIGFuYWxvZyB0dW5lciAqLworCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldihhZGFwLCBtb2QsIHR5cGUsIGh3X2FkZHJzW2lkeF0pOworCWlmIChzZCAhPSBOVUxMKQorCQlzZC0+Z3JwX2lkID0gaHc7CisJcmV0dXJuIHNkICE9IE5VTEwgPyAwIDogLTE7CiB9CiAKLXN0YXRpYyBpbnQgYXR0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorLyogRmluZCB0aGUgZmlyc3QgbWVtYmVyIG9mIHRoZSBzdWJkZXYgZ3JvdXAgaWQgaW4gaHcgKi8KK3N0cnVjdCB2NGwyX3N1YmRldiAqY3gxOF9maW5kX2h3KHN0cnVjdCBjeDE4ICpjeCwgdTMyIGh3KQogewotCXJldHVybiAwOwotfQorCXN0cnVjdCB2NGwyX3N1YmRldiAqcmVzdWx0ID0gTlVMTDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCi1zdGF0aWMgaW50IGRldGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlpbnQgaTsKLQlzdHJ1Y3QgY3gxOCAqY3ggPSAoc3RydWN0IGN4MTggKilpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7Ci0KLQlDWDE4X0RFQlVHX0kyQygiaTJjIGNsaWVudCBkZXRhY2hcbiIpOwotCWZvciAoaSA9IDA7IGkgPCBJMkNfQ0xJRU5UU19NQVg7IGkrKykgewotCQlpZiAoY3gtPmkyY19jbGllbnRzW2ldID09IGNsaWVudCkgewotCQkJY3gtPmkyY19jbGllbnRzW2ldID0gTlVMTDsKKwlzcGluX2xvY2soJmN4LT52NGwyX2Rldi5sb2NrKTsKKwl2NGwyX2RldmljZV9mb3JfZWFjaF9zdWJkZXYoc2QsICZjeC0+djRsMl9kZXYpIHsKKwkJaWYgKHNkLT5ncnBfaWQgPT0gaHcpIHsKKwkJCXJlc3VsdCA9IHNkOwogCQkJYnJlYWs7CiAJCX0KIAl9Ci0JQ1gxOF9ERUJVR19JMkMoImkyYyBkZXRhY2ggW2NsaWVudD0lcywlc11cbiIsCi0JCSAgIGNsaWVudC0+bmFtZSwgKGkgPCBJMkNfQ0xJRU5UU19NQVgpID8gIm9rIiA6ICJmYWlsZWQiKTsKLQotCXJldHVybiAwOworCXNwaW5fdW5sb2NrKCZjeC0+djRsMl9kZXYubG9jayk7CisJcmV0dXJuIHJlc3VsdDsKIH0KIAogc3RhdGljIHZvaWQgY3gxOF9zZXRzY2wodm9pZCAqZGF0YSwgaW50IHN0YXRlKQpAQCAtMjA0LDggKzE5Myw2IEBACiAJLmlkID0gSTJDX0hXX0JfQ1gyMzQxWCwKIAkuYWxnbyA9IE5VTEwsICAgICAgICAgICAgICAgICAgIC8qIHNldCBieSBpMmMtYWxnby1iaXQgKi8KIAkuYWxnb19kYXRhID0gTlVMTCwgICAgICAgICAgICAgIC8qIGZpbGxlZCBmcm9tIHRlbXBsYXRlICovCi0JLmNsaWVudF9yZWdpc3RlciA9IGF0dGFjaF9pbmZvcm0sCi0JLmNsaWVudF91bnJlZ2lzdGVyID0gZGV0YWNoX2luZm9ybSwKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIH07CiAKQEAgLTIyMSwxNTIgKzIwOCwyOCBAQAogCS50aW1lb3V0CT0gQ1gxOF9BTEdPX0JJVF9USU1FT1VUKkhaIC8qIGppZmZpZXMgKi8KIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjeDE4X2kyY19jbGllbnRfdGVtcGxhdGUgPSB7Ci0JLm5hbWUgPSAiY3gxOCBpbnRlcm5hbCIsCi19OwotCi1pbnQgY3gxOF9jYWxsX2kyY19jbGllbnQoc3RydWN0IGN4MTggKmN4LCBpbnQgYWRkciwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKLQlpbnQgcmV0dmFsOwotCWludCBpOwotCi0JQ1gxOF9ERUJVR19JMkMoImNhbGxfaTJjX2NsaWVudCBhZGRyPSUwMnhcbiIsIGFkZHIpOwotCWZvciAoaSA9IDA7IGkgPCBJMkNfQ0xJRU5UU19NQVg7IGkrKykgewotCQljbGllbnQgPSBjeC0+aTJjX2NsaWVudHNbaV07Ci0JCWlmIChjbGllbnQgPT0gTlVMTCB8fCBjbGllbnQtPmRyaXZlciA9PSBOVUxMIHx8Ci0JCQkJY2xpZW50LT5kcml2ZXItPmNvbW1hbmQgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoYWRkciA9PSBjbGllbnQtPmFkZHIpIHsKLQkJCXJldHZhbCA9IGNsaWVudC0+ZHJpdmVyLT5jb21tYW5kKGNsaWVudCwgY21kLCBhcmcpOwotCQkJcmV0dXJuIHJldHZhbDsKLQkJfQotCX0KLQlpZiAoY21kICE9IFZJRElPQ19EQkdfR19DSElQX0lERU5UKQotCQlDWDE4X0VSUigiaTJjIGFkZHIgMHglMDJ4IG5vdCBmb3VuZCBmb3IgY21kIDB4JXghXG4iLAotCQkJICAgICAgIGFkZHIsIGNtZCk7Ci0JcmV0dXJuIC1FTk9ERVY7Ci19Ci0KLS8qIEZpbmQgdGhlIGkyYyBkZXZpY2UgYmFzZWQgb24gdGhlIGRyaXZlciBJRCBhbmQgcmV0dXJuCi0gICBpdHMgaTJjIGFkZHJlc3Mgb3IgLUVOT0RFViBpZiBubyBtYXRjaGluZyBkZXZpY2Ugd2FzIGZvdW5kLiAqLwotc3RhdGljIGludCBjeDE4X2kyY19pZF9hZGRyKHN0cnVjdCBjeDE4ICpjeCwgdTMyIGlkKQotewotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7Ci0JaW50IHJldHZhbCA9IC1FTk9ERVY7Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgSTJDX0NMSUVOVFNfTUFYOyBpKyspIHsKLQkJY2xpZW50ID0gY3gtPmkyY19jbGllbnRzW2ldOwotCQlpZiAoY2xpZW50ID09IE5VTEwgfHwgY2xpZW50LT5kcml2ZXIgPT0gTlVMTCkKLQkJCWNvbnRpbnVlOwotCQlpZiAoaWQgPT0gY2xpZW50LT5kcml2ZXItPmlkKSB7Ci0JCQlyZXR2YWwgPSBjbGllbnQtPmFkZHI7Ci0JCQlicmVhazsKLQkJfQotCX0KLQlyZXR1cm4gcmV0dmFsOwotfQotCi0vKiBGaW5kIHRoZSBpMmMgZGV2aWNlIG5hbWUgbWF0Y2hpbmcgdGhlIENYMThfSFdfIGZsYWcgKi8KLXN0YXRpYyBjb25zdCBjaGFyICpjeDE4X2kyY19od19uYW1lKHUzMiBodykKLXsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGh3X2RyaXZlcmlkcyk7IGkrKykKLQkJaWYgKDEgPDwgaSA9PSBodykKLQkJCXJldHVybiBod19kZXZpY2VuYW1lc1tpXTsKLQlyZXR1cm4gInVua25vd24gZGV2aWNlIjsKLX0KLQotLyogRmluZCB0aGUgaTJjIGRldmljZSBtYXRjaGluZyB0aGUgQ1gxOF9IV18gZmxhZyBhbmQgcmV0dXJuCi0gICBpdHMgaTJjIGFkZHJlc3Mgb3IgLUVOT0RFViBpZiBubyBtYXRjaGluZyBkZXZpY2Ugd2FzIGZvdW5kLiAqLwotaW50IGN4MThfaTJjX2h3X2FkZHIoc3RydWN0IGN4MTggKmN4LCB1MzIgaHcpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShod19kcml2ZXJpZHMpOyBpKyspCi0JCWlmICgxIDw8IGkgPT0gaHcpCi0JCQlyZXR1cm4gY3gxOF9pMmNfaWRfYWRkcihjeCwgaHdfZHJpdmVyaWRzW2ldKTsKLQlyZXR1cm4gLUVOT0RFVjsKLX0KLQotLyogQ2FsbHMgaTJjIGRldmljZSBiYXNlZCBvbiBDWDE4X0hXXyBmbGFnLiBJZiBodyA9PSAwLCB0aGVuIGRvIG5vdGhpbmcuCi0gICBJZiBodyA9PSBDWDE4X0hXX0dQSU8gdGhlbiBjYWxsIHRoZSBncGlvIGhhbmRsZXIuICovCi1pbnQgY3gxOF9pMmNfaHcoc3RydWN0IGN4MTggKmN4LCB1MzIgaHcsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlpbnQgYWRkcjsKLQotCWlmIChodyA9PSAwKQotCQlyZXR1cm4gMDsKLQotCWlmIChodyA9PSBDWDE4X0hXX0dQSU8pCi0JCXJldHVybiBjeDE4X2dwaW8oY3gsIGNtZCwgYXJnKTsKLQotCWlmIChodyA9PSBDWDE4X0hXX0NYMjM0MTgpCi0JCXJldHVybiBjeDE4X2F2X2NtZChjeCwgY21kLCBhcmcpOwotCi0JYWRkciA9IGN4MThfaTJjX2h3X2FkZHIoY3gsIGh3KTsKLQlpZiAoYWRkciA8IDApIHsKLQkJQ1gxOF9FUlIoImkyYyBoYXJkd2FyZSAweCUwOHggKCVzKSBub3QgZm91bmQgZm9yIGNtZCAweCV4IVxuIiwKLQkJCSAgICAgICBodywgY3gxOF9pMmNfaHdfbmFtZShodyksIGNtZCk7Ci0JCXJldHVybiBhZGRyOwotCX0KLQlyZXR1cm4gY3gxOF9jYWxsX2kyY19jbGllbnQoY3gsIGFkZHIsIGNtZCwgYXJnKTsKLX0KLQotLyogYnJvYWRjYXN0IGNtZCBmb3IgYWxsIEkyQyBjbGllbnRzIGFuZCBmb3IgdGhlIGdwaW8gc3Vic3lzdGVtICovCi12b2lkIGN4MThfY2FsbF9pMmNfY2xpZW50cyhzdHJ1Y3QgY3gxOCAqY3gsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlpZiAoY3gtPmkyY19hZGFwWzBdLmFsZ28gPT0gTlVMTCB8fCBjeC0+aTJjX2FkYXBbMV0uYWxnbyA9PSBOVUxMKSB7Ci0JCUNYMThfRVJSKCJhZGFwdGVyIGlzIG5vdCBzZXRcbiIpOwotCQlyZXR1cm47Ci0JfQotCWN4MThfYXZfY21kKGN4LCBjbWQsIGFyZyk7Ci0JaTJjX2NsaWVudHNfY29tbWFuZCgmY3gtPmkyY19hZGFwWzBdLCBjbWQsIGFyZyk7Ci0JaTJjX2NsaWVudHNfY29tbWFuZCgmY3gtPmkyY19hZGFwWzFdLCBjbWQsIGFyZyk7Ci0JaWYgKGN4LT5od19mbGFncyAmIENYMThfSFdfR1BJTykKLQkJY3gxOF9ncGlvKGN4LCBjbWQsIGFyZyk7Ci19Ci0KIC8qIGluaXQgKyByZWdpc3RlciBpMmMgYWxnby1iaXQgYWRhcHRlciAqLwogaW50IGluaXRfY3gxOF9pMmMoc3RydWN0IGN4MTggKmN4KQogewogCWludCBpOwogCUNYMThfREVCVUdfSTJDKCJpMmMgaW5pdFxuIik7CiAKLQkvKiBTYW5pdHkgY2hlY2tzIGZvciB0aGUgSTJDIGhhcmR3YXJlIGFycmF5cy4gVGhleSBtdXN0IGJlIHRoZQotCSAqIHNhbWUgc2l6ZSBhbmQgR1BJTy9DWDIzNDE4IG11c3QgYmUgdGhlIGxhc3QgZW50cmllcy4KLQkgKi8KLQlpZiAoQVJSQVlfU0laRShod19kcml2ZXJpZHMpICE9IEFSUkFZX1NJWkUoaHdfYWRkcnMpIHx8Ci0JICAgIEFSUkFZX1NJWkUoaHdfZGV2aWNlbmFtZXMpICE9IEFSUkFZX1NJWkUoaHdfYWRkcnMpIHx8Ci0JICAgIENYMThfSFdfR1BJTyAhPSAoMSA8PCAoQVJSQVlfU0laRShod19hZGRycykgLSAyKSkgfHwKLQkgICAgQ1gxOF9IV19DWDIzNDE4ICE9ICgxIDw8IChBUlJBWV9TSVpFKGh3X2FkZHJzKSAtIDEpKSB8fAotCSAgICBod19kcml2ZXJpZHNbQVJSQVlfU0laRShod19hZGRycykgLSAxXSkgewotCQlDWDE4X0VSUigiTWlzbWF0Y2hlZCBJMkMgaGFyZHdhcmUgYXJyYXlzXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCiAJZm9yIChpID0gMDsgaSA8IDI7IGkrKykgewotCQltZW1jcHkoJmN4LT5pMmNfYWRhcFtpXSwgJmN4MThfaTJjX2FkYXBfdGVtcGxhdGUsCi0JCQlzaXplb2Yoc3RydWN0IGkyY19hZGFwdGVyKSk7CisJCS8qIFNldHVwIGFsZ29yaXRobSBmb3IgYWRhcHRlciAqLwogCQltZW1jcHkoJmN4LT5pMmNfYWxnb1tpXSwgJmN4MThfaTJjX2FsZ29fdGVtcGxhdGUsCiAJCQlzaXplb2Yoc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhKSk7CiAJCWN4LT5pMmNfYWxnb19jYl9kYXRhW2ldLmN4ID0gY3g7CiAJCWN4LT5pMmNfYWxnb19jYl9kYXRhW2ldLmJ1c19pbmRleCA9IGk7CiAJCWN4LT5pMmNfYWxnb1tpXS5kYXRhID0gJmN4LT5pMmNfYWxnb19jYl9kYXRhW2ldOworCisJCS8qIFNldHVwIGFkYXB0ZXIgKi8KKwkJbWVtY3B5KCZjeC0+aTJjX2FkYXBbaV0sICZjeDE4X2kyY19hZGFwX3RlbXBsYXRlLAorCQkJc2l6ZW9mKHN0cnVjdCBpMmNfYWRhcHRlcikpOwogCQljeC0+aTJjX2FkYXBbaV0uYWxnb19kYXRhID0gJmN4LT5pMmNfYWxnb1tpXTsKLQogCQlzcHJpbnRmKGN4LT5pMmNfYWRhcFtpXS5uYW1lICsgc3RybGVuKGN4LT5pMmNfYWRhcFtpXS5uYW1lKSwKLQkJCQkiICMlZC0lZCIsIGN4LT5udW0sIGkpOwotCQlpMmNfc2V0X2FkYXBkYXRhKCZjeC0+aTJjX2FkYXBbaV0sIGN4KTsKLQotCQltZW1jcHkoJmN4LT5pMmNfY2xpZW50W2ldLCAmY3gxOF9pMmNfY2xpZW50X3RlbXBsYXRlLAotCQkJc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSk7Ci0JCXNwcmludGYoY3gtPmkyY19jbGllbnRbaV0ubmFtZSArCi0JCQkJc3RybGVuKGN4LT5pMmNfY2xpZW50W2ldLm5hbWUpLCAiJWQiLCBpKTsKLQkJY3gtPmkyY19jbGllbnRbaV0uYWRhcHRlciA9ICZjeC0+aTJjX2FkYXBbaV07Ci0JCWN4LT5pMmNfYWRhcFtpXS5kZXYucGFyZW50ID0gJmN4LT5kZXYtPmRldjsKKwkJCQkiICMlZC0lZCIsIGN4LT5pbnN0YW5jZSwgaSk7CisJCWkyY19zZXRfYWRhcGRhdGEoJmN4LT5pMmNfYWRhcFtpXSwgJmN4LT52NGwyX2Rldik7CisJCWN4LT5pMmNfYWRhcFtpXS5kZXYucGFyZW50ID0gJmN4LT5wY2lfZGV2LT5kZXY7CiAJfQogCiAJaWYgKGN4MThfcmVhZF9yZWcoY3gsIENYMThfUkVHX0kyQ18yX1dSKSAhPSAweDAwMDNjMDJmKSB7CkBAIC00MDIsNyArMjY1LDggQEAKIAljeDE4X3NldHNjbCgmY3gtPmkyY19hbGdvX2NiX2RhdGFbMV0sIDEpOwogCWN4MThfc2V0c2RhKCZjeC0+aTJjX2FsZ29fY2JfZGF0YVsxXSwgMSk7CiAKLQljeDE4X3Jlc2V0X2kyY19zbGF2ZXNfZ3BpbyhjeCk7CisJY3gxOF9jYWxsX2h3KGN4LCBDWDE4X0hXX0dQSU9fUkVTRVRfQ1RSTCwKKwkJICAgICBjb3JlLCByZXNldCwgKHUzMikgQ1gxOF9HUElPX1JFU0VUX0kyQyk7CiAKIAlyZXR1cm4gaTJjX2JpdF9hZGRfYnVzKCZjeC0+aTJjX2FkYXBbMF0pIHx8CiAJCWkyY19iaXRfYWRkX2J1cygmY3gtPmkyY19hZGFwWzFdKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWkyYy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaTJjLmgKaW5kZXggNDg2OTczOS4uYmRmZDE5MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaTJjLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaTJjLmgKQEAgLTIxLDExICsyMSw4IEBACiAgKiAgMDIxMTEtMTMwNyAgVVNBCiAgKi8KIAotaW50IGN4MThfaTJjX2h3X2FkZHIoc3RydWN0IGN4MTggKmN4LCB1MzIgaHcpOwotaW50IGN4MThfaTJjX2h3KHN0cnVjdCBjeDE4ICpjeCwgdTMyIGh3LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwotaW50IGN4MThfY2FsbF9pMmNfY2xpZW50KHN0cnVjdCBjeDE4ICpjeCwgaW50IGFkZHIsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKTsKLXZvaWQgY3gxOF9jYWxsX2kyY19jbGllbnRzKHN0cnVjdCBjeDE4ICpjeCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKIGludCBjeDE4X2kyY19yZWdpc3RlcihzdHJ1Y3QgY3gxOCAqY3gsIHVuc2lnbmVkIGlkeCk7CitzdHJ1Y3QgdjRsMl9zdWJkZXYgKmN4MThfZmluZF9odyhzdHJ1Y3QgY3gxOCAqY3gsIHUzMiBodyk7CiAKIC8qIGluaXQgKyByZWdpc3RlciBpMmMgYWxnby1iaXQgYWRhcHRlciAqLwogaW50IGluaXRfY3gxOF9pMmMoc3RydWN0IGN4MTggKmN4KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvY3RsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1pb2N0bC5jCmluZGV4IDcwODZhYWIuLmU0YzllM2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtaW9jdGwuYwpAQCAtNTgsMTIgKzU4LDIxIEBACiAJfQogfQogCisvKiBDaGVjayBpZiBWQkkgc2VydmljZXMgYXJlIGFsbG93ZWQgb24gdGhlIChmaWVsZCwgbGluZSkgZm9yIHRoZSB2aWRlbyBzdGQgKi8KIHN0YXRpYyBpbnQgdmFsaWRfc2VydmljZV9saW5lKGludCBmaWVsZCwgaW50IGxpbmUsIGludCBpc19wYWwpCiB7Ci0JcmV0dXJuIChpc19wYWwgJiYgbGluZSA+PSA2ICYmIChsaW5lICE9IDIzIHx8IGZpZWxkID09IDApKSB8fAorCXJldHVybiAoaXNfcGFsICYmIGxpbmUgPj0gNiAmJgorCQkoKGZpZWxkID09IDAgJiYgbGluZSA8PSAyMykgfHwgKGZpZWxkID09IDEgJiYgbGluZSA8PSAyMikpKSB8fAogCSAgICAgICAoIWlzX3BhbCAmJiBsaW5lID49IDEwICYmIGxpbmUgPCAyMik7CiB9CiAKKy8qCisgKiBGb3IgYSAoZmllbGQsIGxpbmUsIHN0ZCkgYW5kIGluYm91bmQgcG90ZW50aWFsIHNldCBvZiBzZXJ2aWNlcyBmb3IgdGhhdCBsaW5lLAorICogcmV0dXJuIHRoZSBmaXJzdCB2YWxpZCBzZXJ2aWNlIG9mIHRob3NlIHBhc3NlZCBpbiB0aGUgaW5jb21pbmcgc2V0IGZvciB0aGF0CisgKiBsaW5lIGluIHByaW9yaXR5IG9yZGVyOgorICogQ0MsIFZQUywgb3IgV1NTIG92ZXIgVEVMRVRFWFQgZm9yIHdlbGwga25vd24gbGluZXMKKyAqIFRFTEVURVhULCBiZWZvcmUgVlBTLCBiZWZvcmUgQ0MsIGJlZm9yZSBXU1MsIGZvciBvdGhlciBsaW5lcworICovCiBzdGF0aWMgdTE2IHNlbGVjdF9zZXJ2aWNlX2Zyb21fc2V0KGludCBmaWVsZCwgaW50IGxpbmUsIHUxNiBzZXQsIGludCBpc19wYWwpCiB7CiAJdTE2IHZhbGlkX3NldCA9IChpc19wYWwgPyBWNEwyX1NMSUNFRF9WQklfNjI1IDogVjRMMl9TTElDRURfVkJJXzUyNSk7CkBAIC05MCw2ICs5OSwxMCBAQAogCXJldHVybiAwOwogfQogCisvKgorICogRXhwYW5kIHRoZSBzZXJ2aWNlX3NldCBvZiAqZm10IGludG8gdmFsaWQgc2VydmljZV9saW5lcyBmb3IgdGhlIHN0ZCwKKyAqIGFuZCBjbGVhciB0aGUgcGFzc2VkIGluIGZtdC0+c2VydmljZV9zZXQKKyAqLwogdm9pZCBjeDE4X2V4cGFuZF9zZXJ2aWNlX3NldChzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCAqZm10LCBpbnQgaXNfcGFsKQogewogCXUxNiBzZXQgPSBmbXQtPnNlcnZpY2Vfc2V0OwpAQCAtMTAyLDcgKzExNSwyNSBAQAogCX0KIH0KIAorLyoKKyAqIFNhbml0aXplIHRoZSBzZXJ2aWNlX2xpbmVzIGluICpmbXQgcGVyIHRoZSB2aWRlbyBzdGQsIGFuZCByZXR1cm4gMQorICogaWYgYW55IHNlcnZpY2VfbGluZSBpcyBsZWZ0IGFzIHZhbGlkIGFmdGVyIHNhbnRpemF0aW9uCisgKi8KK3N0YXRpYyBpbnQgY2hlY2tfc2VydmljZV9zZXQoc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKmZtdCwgaW50IGlzX3BhbCkKK3sKKwlpbnQgZiwgbDsKKwl1MTYgc2V0ID0gMDsKIAorCWZvciAoZiA9IDA7IGYgPCAyOyBmKyspIHsKKwkJZm9yIChsID0gMDsgbCA8IDI0OyBsKyspIHsKKwkJCWZtdC0+c2VydmljZV9saW5lc1tmXVtsXSA9IHNlbGVjdF9zZXJ2aWNlX2Zyb21fc2V0KGYsIGwsIGZtdC0+c2VydmljZV9saW5lc1tmXVtsXSwgaXNfcGFsKTsKKwkJCXNldCB8PSBmbXQtPnNlcnZpY2VfbGluZXNbZl1bbF07CisJCX0KKwl9CisJcmV0dXJuIHNldCAhPSAwOworfQorCisvKiBDb21wdXRlIHRoZSBzZXJ2aWNlX3NldCBmcm9tIHRoZSBhc3N1bWVkIHZhbGlkIHNlcnZpY2VfbGluZXMgb2YgKmZtdCAqLwogdTE2IGN4MThfZ2V0X3NlcnZpY2Vfc2V0KHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZm9ybWF0ICpmbXQpCiB7CiAJaW50IGYsIGw7CkBAIC0xMjksMTAgKzE2MCw4IEBACiAJcGl4Zm10LT5wcml2ID0gMDsKIAlpZiAoaWQtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfWVVWKSB7CiAJCXBpeGZtdC0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfSE0xMjsKLQkJLyogWVVWIHNpemUgaXMgKFk9KGgqdykgKyBVVj0oaCoody8yKSkpICovCi0JCXBpeGZtdC0+c2l6ZWltYWdlID0KLQkJCXBpeGZtdC0+aGVpZ2h0ICogcGl4Zm10LT53aWR0aCArCi0JCQlwaXhmbXQtPmhlaWdodCAqIChwaXhmbXQtPndpZHRoIC8gMik7CisJCS8qIFlVViBzaXplIGlzIChZPShoKjcyMCkgKyBVVj0oaCooNzIwLzIpKSkgKi8KKwkJcGl4Zm10LT5zaXplaW1hZ2UgPSBwaXhmbXQtPmhlaWdodCAqIDcyMCAqIDMgLyAyOwogCQlwaXhmbXQtPmJ5dGVzcGVybGluZSA9IDcyMDsKIAl9IGVsc2UgewogCQlwaXhmbXQtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX01QRUc7CkBAIC0xNDksOCArMTc4LDggQEAKIAlzdHJ1Y3QgdjRsMl92YmlfZm9ybWF0ICp2YmlmbXQgPSAmZm10LT5mbXQudmJpOwogCiAJdmJpZm10LT5zYW1wbGluZ19yYXRlID0gMjcwMDAwMDA7Ci0JdmJpZm10LT5vZmZzZXQgPSAyNDg7Ci0JdmJpZm10LT5zYW1wbGVzX3Blcl9saW5lID0gY3gtPnZiaS5yYXdfZGVjb2Rlcl9saW5lX3NpemUgLSA0OworCXZiaWZtdC0+b2Zmc2V0ID0gMjQ4OyAvKiBGSVhNRSAtIHNsaWdodGx5IHdyb25nIGZvciBib3RoIDUwICYgNjAgSHogKi8KKwl2YmlmbXQtPnNhbXBsZXNfcGVyX2xpbmUgPSB2YmlfYWN0aXZlX3NhbXBsZXMgLSA0OwogCXZiaWZtdC0+c2FtcGxlX2Zvcm1hdCA9IFY0TDJfUElYX0ZNVF9HUkVZOwogCXZiaWZtdC0+c3RhcnRbMF0gPSBjeC0+dmJpLnN0YXJ0WzBdOwogCXZiaWZtdC0+c3RhcnRbMV0gPSBjeC0+dmJpLnN0YXJ0WzFdOwpAQCAtMTY0LDcgKzE5MywzMCBAQAogc3RhdGljIGludCBjeDE4X2dfZm10X3NsaWNlZF92YmlfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCiB7Ci0JcmV0dXJuIC1FSU5WQUw7CisJc3RydWN0IGN4MTggKmN4ID0gKChzdHJ1Y3QgY3gxOF9vcGVuX2lkICopZmgpLT5jeDsKKwlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCAqdmJpZm10ID0gJmZtdC0+Zm10LnNsaWNlZDsKKworCS8qIHNhbmUsIFY0TDIgc3BlYyBjb21wbGlhbnQsIGRlZmF1bHRzICovCisJdmJpZm10LT5yZXNlcnZlZFswXSA9IDA7CisJdmJpZm10LT5yZXNlcnZlZFsxXSA9IDA7CisJdmJpZm10LT5pb19zaXplID0gc2l6ZW9mKHN0cnVjdCB2NGwyX3NsaWNlZF92YmlfZGF0YSkgKiAzNjsKKwltZW1zZXQodmJpZm10LT5zZXJ2aWNlX2xpbmVzLCAwLCBzaXplb2YodmJpZm10LT5zZXJ2aWNlX2xpbmVzKSk7CisJdmJpZm10LT5zZXJ2aWNlX3NldCA9IDA7CisKKwkvKgorCSAqIEZldGNoIHRoZSBjb25maWd1cmVkIHNlcnZpY2VfbGluZXMgYW5kIHRvdGFsIHNlcnZpY2Vfc2V0IGZyb20gdGhlCisJICogZGlnaXRpemVyL3NsaWNlci4gIE5vdGUsIGN4MThfYXZfdmJpKCkgd2lwZXMgdGhlIHBhc3NlZCBpbgorCSAqIGZtdC0+Zm10LnNsaWNlZCB1bmRlciB2YWxpZCBjYWxsaW5nIGNvbmRpdGlvbnMKKwkgKi8KKwlpZiAodjRsMl9zdWJkZXZfY2FsbChjeC0+c2RfYXYsIHZpZGVvLCBnX2ZtdCwgZm10KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwkvKiBFbnN1cmUgVjRMMiBzcGVjIGNvbXBsaWFudCBvdXRwdXQgKi8KKwl2YmlmbXQtPnJlc2VydmVkWzBdID0gMDsKKwl2YmlmbXQtPnJlc2VydmVkWzFdID0gMDsKKwl2YmlmbXQtPmlvX3NpemUgPSBzaXplb2Yoc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9kYXRhKSAqIDM2OworCXZiaWZtdC0+c2VydmljZV9zZXQgPSBjeDE4X2dldF9zZXJ2aWNlX3NldCh2YmlmbXQpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IGN4MThfdHJ5X2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKQEAgLTE3NCwxMSArMjI2LDE4IEBACiAJc3RydWN0IGN4MTggKmN4ID0gaWQtPmN4OwogCWludCB3ID0gZm10LT5mbXQucGl4LndpZHRoOwogCWludCBoID0gZm10LT5mbXQucGl4LmhlaWdodDsKKwlpbnQgbWluX2ggPSAyOwogCiAJdyA9IG1pbih3LCA3MjApOwotCXcgPSBtYXgodywgMSk7CisJdyA9IG1heCh3LCAyKTsKKwlpZiAoaWQtPnR5cGUgPT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfWVVWKSB7CisJCS8qIFlVViBoZWlnaHQgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyICovCisJCWggJj0gfjB4MWY7CisJCW1pbl9oID0gMzI7CisJfQogCWggPSBtaW4oaCwgY3gtPmlzXzUwaHogPyA1NzYgOiA0ODApOwotCWggPSBtYXgoaCwgMik7CisJaCA9IG1heChoLCBtaW5faCk7CisKIAljeDE4X2dfZm10X3ZpZF9jYXAoZmlsZSwgZmgsIGZtdCk7CiAJZm10LT5mbXQucGl4LndpZHRoID0gdzsKIAlmbXQtPmZtdC5waXguaGVpZ2h0ID0gaDsKQEAgLTE5NCw3ICsyNTMsMjAgQEAKIHN0YXRpYyBpbnQgY3gxOF90cnlfZm10X3NsaWNlZF92YmlfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKIAkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpCiB7Ci0JcmV0dXJuIC1FSU5WQUw7CisJc3RydWN0IGN4MTggKmN4ID0gKChzdHJ1Y3QgY3gxOF9vcGVuX2lkICopZmgpLT5jeDsKKwlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCAqdmJpZm10ID0gJmZtdC0+Zm10LnNsaWNlZDsKKworCXZiaWZtdC0+aW9fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEpICogMzY7CisJdmJpZm10LT5yZXNlcnZlZFswXSA9IDA7CisJdmJpZm10LT5yZXNlcnZlZFsxXSA9IDA7CisKKwkvKiBJZiBnaXZlbiBhIHNlcnZpY2Ugc2V0LCBleHBhbmQgaXQgdmFsaWRseSAmIGNsZWFyIHBhc3NlZCBpbiBzZXQgKi8KKwlpZiAodmJpZm10LT5zZXJ2aWNlX3NldCkKKwkJY3gxOF9leHBhbmRfc2VydmljZV9zZXQodmJpZm10LCBjeC0+aXNfNTBoeik7CisJLyogU2FuaXRpemUgdGhlIHNlcnZpY2VfbGluZXMsIGFuZCBjb21wdXRlIHRoZSBuZXcgc2V0IGlmIGFueSB2YWxpZCAqLworCWlmIChjaGVja19zZXJ2aWNlX3NldCh2YmlmbXQsIGN4LT5pc181MGh6KSkKKwkJdmJpZm10LT5zZXJ2aWNlX3NldCA9IGN4MThfZ2V0X3NlcnZpY2Vfc2V0KHZiaWZtdCk7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY3gxOF9zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKQEAgLTIyMyw3ICsyOTUsNyBAQAogCiAJY3gtPnBhcmFtcy53aWR0aCA9IHc7CiAJY3gtPnBhcmFtcy5oZWlnaHQgPSBoOwotCWN4MThfYXZfY21kKGN4LCBWSURJT0NfU19GTVQsIGZtdCk7CisJdjRsMl9zdWJkZXZfY2FsbChjeC0+c2RfYXYsIHZpZGVvLCBzX2ZtdCwgZm10KTsKIAlyZXR1cm4gY3gxOF9nX2ZtdF92aWRfY2FwKGZpbGUsIGZoLCBmbXQpOwogfQogCkBAIC0yMzgsNTQgKzMxMCwxMzEgQEAKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCisJLyoKKwkgKiBDaGFuZ2luZyB0aGUgRW5jb2RlcidzIFJhdyBWQkkgcGFyYW1ldGVycyB3b24ndCBoYXZlIGFueSBlZmZlY3QKKwkgKiBpZiBhbnkgYW5hbG9nIGNhcHR1cmUgaXMgb25nb2luZworCSAqLwogCWlmICghY3gxOF9yYXdfdmJpKGN4KSAmJiBhdG9taWNfcmVhZCgmY3gtPmFuYV9jYXB0dXJpbmcpID4gMCkKIAkJcmV0dXJuIC1FQlVTWTsKIAorCS8qCisJICogU2V0IHRoZSBkaWdpdGl6ZXIgcmVnaXN0ZXJzIGZvciByYXcgYWN0aXZlIFZCSS4KKwkgKiBOb3RlIGN4MThfYXZfdmJpX3dpcGVzIG91dCBhbG90IG9mIHRoZSBwYXNzZWQgaW4gZm10IHVuZGVyIHZhbGlkCisJICogY2FsbGluZyBjb25kaXRpb25zCisJICovCisJcmV0ID0gdjRsMl9zdWJkZXZfY2FsbChjeC0+c2RfYXYsIHZpZGVvLCBzX2ZtdCwgZm10KTsKKwlpZiAocmV0KQorCQlyZXR1cm4gcmV0OworCisJLyogU3RvcmUgb3VyIG5ldyB2NGwyIChub24tKXNsaWNlZCBWQkkgc3RhdGUgKi8KIAljeC0+dmJpLnNsaWNlZF9pbi0+c2VydmljZV9zZXQgPSAwOwogCWN4LT52YmkuaW4udHlwZSA9IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU7Ci0JY3gxOF9hdl9jbWQoY3gsIFZJRElPQ19TX0ZNVCwgZm10KTsKKwogCXJldHVybiBjeDE4X2dfZm10X3ZiaV9jYXAoZmlsZSwgZmgsIGZtdCk7CiB9CiAKIHN0YXRpYyBpbnQgY3gxOF9zX2ZtdF9zbGljZWRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQogewotCXJldHVybiAtRUlOVkFMOworCXN0cnVjdCBjeDE4X29wZW5faWQgKmlkID0gZmg7CisJc3RydWN0IGN4MTggKmN4ID0gaWQtPmN4OworCWludCByZXQ7CisJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKnZiaWZtdCA9ICZmbXQtPmZtdC5zbGljZWQ7CisKKwlyZXQgPSB2NGwyX3ByaW9fY2hlY2soJmN4LT5wcmlvLCAmaWQtPnByaW8pOworCWlmIChyZXQpCisJCXJldHVybiByZXQ7CisKKwljeDE4X3RyeV9mbXRfc2xpY2VkX3ZiaV9jYXAoZmlsZSwgZmgsIGZtdCk7CisKKwkvKgorCSAqIENoYW5naW5nIHRoZSBFbmNvZGVyJ3MgUmF3IFZCSSBwYXJhbWV0ZXJzIHdvbid0IGhhdmUgYW55IGVmZmVjdAorCSAqIGlmIGFueSBhbmFsb2cgY2FwdHVyZSBpcyBvbmdvaW5nCisJICovCisJaWYgKGN4MThfcmF3X3ZiaShjeCkgJiYgYXRvbWljX3JlYWQoJmN4LT5hbmFfY2FwdHVyaW5nKSA+IDApCisJCXJldHVybiAtRUJVU1k7CisKKwkvKgorCSAqIFNldCB0aGUgc2VydmljZV9saW5lcyByZXF1ZXN0ZWQgaW4gdGhlIGRpZ2l0aXplci9zbGljZXIgcmVnaXN0ZXJzLgorCSAqIE5vdGUsIGN4MThfYXZfdmJpKCkgd2lwZXMgc29tZSAiaW1wb3NzaWJsZSIgc2VydmljZSBsaW5lcyBpbiB0aGUKKwkgKiBwYXNzZWQgaW4gZm10LT5mbXQuc2xpY2VkIHVuZGVyIHZhbGlkIGNhbGxpbmcgY29uZGl0aW9ucworCSAqLworCXJldCA9IHY0bDJfc3ViZGV2X2NhbGwoY3gtPnNkX2F2LCB2aWRlbywgc19mbXQsIGZtdCk7CisJaWYgKHJldCkKKwkJcmV0dXJuIHJldDsKKwkvKiBTdG9yZSBvdXIgY3VycmVudCB2NGwyIHNsaWNlZCBWQkkgc2V0dGluZ3MgKi8KKwljeC0+dmJpLmluLnR5cGUgPSAgVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkU7CisJbWVtY3B5KGN4LT52Ymkuc2xpY2VkX2luLCB2YmlmbXQsIHNpemVvZigqY3gtPnZiaS5zbGljZWRfaW4pKTsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBjeDE4X2dfY2hpcF9pZGVudChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCiB7CiAJc3RydWN0IGN4MTggKmN4ID0gKChzdHJ1Y3QgY3gxOF9vcGVuX2lkICopZmgpLT5jeDsKKwlpbnQgZXJyID0gMDsKIAogCWNoaXAtPmlkZW50ID0gVjRMMl9JREVOVF9OT05FOwogCWNoaXAtPnJldmlzaW9uID0gMDsKLQlpZiAodjRsMl9jaGlwX21hdGNoX2hvc3QoJmNoaXAtPm1hdGNoKSkgewotCQljaGlwLT5pZGVudCA9IFY0TDJfSURFTlRfQ1gyMzQxODsKLQkJcmV0dXJuIDA7CisJc3dpdGNoIChjaGlwLT5tYXRjaC50eXBlKSB7CisJY2FzZSBWNEwyX0NISVBfTUFUQ0hfSE9TVDoKKwkJc3dpdGNoIChjaGlwLT5tYXRjaC5hZGRyKSB7CisJCWNhc2UgMDoKKwkJCWNoaXAtPmlkZW50ID0gVjRMMl9JREVOVF9DWDIzNDE4OworCQkJY2hpcC0+cmV2aXNpb24gPSBjeDE4X3JlYWRfcmVnKGN4LCAweEM3MjAyOCk7CisJCQlicmVhazsKKwkJY2FzZSAxOgorCQkJLyoKKwkJCSAqIFRoZSBBL1YgZGVjb2RlciBpcyBhbHdheXMgcHJlc2VudCwgYnV0IGluIHRoZSByYXJlCisJCQkgKiBjYXNlIHRoYXQgdGhlIGNhcmQgZG9lc24ndCBoYXZlIGFuYWxvZywgd2UgZG9uJ3QKKwkJCSAqIHVzZSBpdC4gIFdlIGZpbmQgaXQgdy9vIHVzaW5nIHRoZSBjeC0+c2RfYXYgcG9pbnRlcgorCQkJICovCisJCQljeDE4X2NhbGxfaHcoY3gsIENYMThfSFdfNDE4X0FWLAorCQkJCSAgICAgY29yZSwgZ19jaGlwX2lkZW50LCBjaGlwKTsKKwkJCWJyZWFrOworCQlkZWZhdWx0OgorCQkJLyoKKwkJCSAqIENvdWxkIHJldHVybiBpZGVudCA9IFY0TDJfSURFTlRfVU5LTk9XTiBpZiB3ZSBoYWQKKwkJCSAqIG90aGVyIGhvc3QgY2hpcHMgYXQgaGlnaGVyIGFkZHJlc3NlcywgYnV0IHdlIGRvbid0CisJCQkgKi8KKwkJCWVyciA9IC1FSU5WQUw7IC8qIHBlciBWNEwyIHNwZWMgKi8KKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSElQX01BVENIX0kyQ19EUklWRVI6CisJCS8qIElmIG5lZWRlZCwgcmV0dXJucyBWNEwyX0lERU5UX0FNQklHVU9VUyB3aXRob3V0IGV4dHJhIHdvcmsgKi8KKwkJY3gxOF9jYWxsX2FsbChjeCwgY29yZSwgZ19jaGlwX2lkZW50LCBjaGlwKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NISVBfTUFUQ0hfSTJDX0FERFI6CisJCS8qCisJCSAqIFdlIGNvdWxkIHJldHVybiBWNEwyX0lERU5UX1VOS05PV04sIGJ1dCB3ZSBkb24ndCBkbyB0aGUgd29yaworCQkgKiB0byBsb29rIGlmIGEgY2hpcCBpcyBhdCB0aGUgYWRkcmVzcyB3aXRoIG5vIGRyaXZlci4gIFRoYXQncyBhCisJCSAqIGRhbmdlcm91cyB0aGluZyB0byBkbyB3aXRoIEVFUFJPTXMgYW55d2F5LgorCQkgKi8KKwkJY3gxOF9jYWxsX2FsbChjeCwgY29yZSwgZ19jaGlwX2lkZW50LCBjaGlwKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZXJyID0gLUVJTlZBTDsKKwkJYnJlYWs7CiAJfQotCWN4MThfY2FsbF9pMmNfY2xpZW50cyhjeCwgVklESU9DX0RCR19HX0NISVBfSURFTlQsIGNoaXApOwotCXJldHVybiAwOworCXJldHVybiBlcnI7CiB9CiAKICNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCiBzdGF0aWMgaW50IGN4MThfY3hjKHN0cnVjdCBjeDE4ICpjeCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogewogCXN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVncyA9IGFyZzsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQogCQlyZXR1cm4gLUVQRVJNOwogCWlmIChyZWdzLT5yZWcgPj0gQ1gxOF9NRU1fT0ZGU0VUICsgQ1gxOF9NRU1fU0laRSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmY3gxOF9jYXJkc19sb2NrLCBmbGFncyk7CiAJcmVncy0+c2l6ZSA9IDQ7Ci0JaWYgKGNtZCA9PSBWSURJT0NfREJHX0dfUkVHSVNURVIpCi0JCXJlZ3MtPnZhbCA9IGN4MThfcmVhZF9lbmMoY3gsIHJlZ3MtPnJlZyk7Ci0JZWxzZQorCWlmIChjbWQgPT0gVklESU9DX0RCR19TX1JFR0lTVEVSKQogCQljeDE4X3dyaXRlX2VuYyhjeCwgcmVncy0+dmFsLCByZWdzLT5yZWcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmN4MThfY2FyZHNfbG9jaywgZmxhZ3MpOworCWVsc2UKKwkJcmVncy0+dmFsID0gY3gxOF9yZWFkX2VuYyhjeCwgcmVncy0+cmVnKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjk2LDcgKzQ0NSw4IEBACiAKIAlpZiAodjRsMl9jaGlwX21hdGNoX2hvc3QoJnJlZy0+bWF0Y2gpKQogCQlyZXR1cm4gY3gxOF9jeGMoY3gsIFZJRElPQ19EQkdfR19SRUdJU1RFUiwgcmVnKTsKLQljeDE4X2NhbGxfaTJjX2NsaWVudHMoY3gsIFZJRElPQ19EQkdfR19SRUdJU1RFUiwgcmVnKTsKKwkvKiBGSVhNRSAtIGVycm9ycyBzaG91bGRuJ3QgYmUgaWdub3JlZCAqLworCWN4MThfY2FsbF9hbGwoY3gsIGNvcmUsIGdfcmVnaXN0ZXIsIHJlZyk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTMwNyw3ICs0NTcsOCBAQAogCiAJaWYgKHY0bDJfY2hpcF9tYXRjaF9ob3N0KCZyZWctPm1hdGNoKSkKIAkJcmV0dXJuIGN4MThfY3hjKGN4LCBWSURJT0NfREJHX1NfUkVHSVNURVIsIHJlZyk7Ci0JY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBWSURJT0NfREJHX1NfUkVHSVNURVIsIHJlZyk7CisJLyogRklYTUUgLSBlcnJvcnMgc2hvdWxkbid0IGJlIGlnbm9yZWQgKi8KKwljeDE4X2NhbGxfYWxsKGN4LCBjb3JlLCBzX3JlZ2lzdGVyLCByZWcpOwogCXJldHVybiAwOwogfQogI2VuZGlmCkBAIC0zMzUsNyArNDg2LDggQEAKIAogCXN0cmxjcHkodmNhcC0+ZHJpdmVyLCBDWDE4X0RSSVZFUl9OQU1FLCBzaXplb2YodmNhcC0+ZHJpdmVyKSk7CiAJc3RybGNweSh2Y2FwLT5jYXJkLCBjeC0+Y2FyZF9uYW1lLCBzaXplb2YodmNhcC0+Y2FyZCkpOwotCXNucHJpbnRmKHZjYXAtPmJ1c19pbmZvLCBzaXplb2YodmNhcC0+YnVzX2luZm8pLCAiUENJOiVzIiwgcGNpX25hbWUoY3gtPmRldikpOworCXNucHJpbnRmKHZjYXAtPmJ1c19pbmZvLCBzaXplb2YodmNhcC0+YnVzX2luZm8pLAorCQkgIlBDSTolcyIsIHBjaV9uYW1lKGN4LT5wY2lfZGV2KSk7CiAJdmNhcC0+dmVyc2lvbiA9IENYMThfRFJJVkVSX1ZFUlNJT047IAkgICAgLyogdmVyc2lvbiAqLwogCXZjYXAtPmNhcGFiaWxpdGllcyA9IGN4LT52NGwyX2NhcDsgCSAgICAvKiBjYXBhYmlsaXRpZXMgKi8KIAlyZXR1cm4gMDsKQEAgLTQwMyw3ICs1NTUsOCBAQAogCiAJaWYgKGNyb3AtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gY3gxOF9hdl9jbWQoY3gsIFZJRElPQ19TX0NST1AsIGNyb3ApOworCUNYMThfREVCVUdfV0FSTigiVklESU9DX1NfQ1JPUCBub3QgaW1wbGVtZW50ZWRcbiIpOworCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgaW50IGN4MThfZ19jcm9wKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfY3JvcCAqY3JvcCkKQEAgLTQxMiw3ICs1NjUsOCBAQAogCiAJaWYgKGNyb3AtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gY3gxOF9hdl9jbWQoY3gsIFZJRElPQ19HX0NST1AsIGNyb3ApOworCUNYMThfREVCVUdfV0FSTigiVklESU9DX0dfQ1JPUCBub3QgaW1wbGVtZW50ZWRcbiIpOworCXJldHVybiAtRUlOVkFMOwogfQogCiBzdGF0aWMgaW50IGN4MThfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCkBAIC00ODMsNyArNjM3LDcgQEAKIAlpZiAodmYtPnR1bmVyICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBWSURJT0NfR19GUkVRVUVOQ1ksIHZmKTsKKwljeDE4X2NhbGxfYWxsKGN4LCB0dW5lciwgZ19mcmVxdWVuY3ksIHZmKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTAyLDcgKzY1Niw3IEBACiAKIAljeDE4X211dGUoY3gpOwogCUNYMThfREVCVUdfSU5GTygidjRsMiBpb2N0bDogc2V0IGZyZXF1ZW5jeSAlZFxuIiwgdmYtPmZyZXF1ZW5jeSk7Ci0JY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBWSURJT0NfU19GUkVRVUVOQ1ksIHZmKTsKKwljeDE4X2NhbGxfYWxsKGN4LCB0dW5lciwgc19mcmVxdWVuY3ksIHZmKTsKIAljeDE4X3VubXV0ZShjeCk7CiAJcmV0dXJuIDA7CiB9CkBAIC01NDcsMTIgKzcwMSwxMSBAQAogCWN4LT52YmkuY291bnQgPSBjeC0+aXNfNTBoeiA/IDE4IDogMTI7CiAJY3gtPnZiaS5zdGFydFswXSA9IGN4LT5pc181MGh6ID8gNiA6IDEwOwogCWN4LT52Ymkuc3RhcnRbMV0gPSBjeC0+aXNfNTBoeiA/IDMxOCA6IDI3MzsKLQljeC0+dmJpLnNsaWNlZF9kZWNvZGVyX2xpbmVfc2l6ZSA9IGN4LT5pc182MGh6ID8gMjcyIDogMjg0OwogCUNYMThfREVCVUdfSU5GTygiU3dpdGNoaW5nIHN0YW5kYXJkIHRvICVsbHguXG4iLAogCQkJKHVuc2lnbmVkIGxvbmcgbG9uZykgY3gtPnN0ZCk7CiAKIAkvKiBUdW5lciAqLwotCWN4MThfY2FsbF9pMmNfY2xpZW50cyhjeCwgVklESU9DX1NfU1RELCAmY3gtPnN0ZCk7CisJY3gxOF9jYWxsX2FsbChjeCwgdHVuZXIsIHNfc3RkLCBjeC0+c3RkKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNTY5LDkgKzcyMiw3IEBACiAJaWYgKHZ0LT5pbmRleCAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCS8qIFNldHRpbmcgdHVuZXIgY2FuIG9ubHkgc2V0IGF1ZGlvIG1vZGUgKi8KLQljeDE4X2NhbGxfaTJjX2NsaWVudHMoY3gsIFZJRElPQ19TX1RVTkVSLCB2dCk7Ci0KKwljeDE4X2NhbGxfYWxsKGN4LCB0dW5lciwgc190dW5lciwgdnQpOwogCXJldHVybiAwOwogfQogCkBAIC01ODIsNyArNzMzLDcgQEAKIAlpZiAodnQtPmluZGV4ICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JY3gxOF9jYWxsX2kyY19jbGllbnRzKGN4LCBWSURJT0NfR19UVU5FUiwgdnQpOworCWN4MThfY2FsbF9hbGwoY3gsIHR1bmVyLCBnX3R1bmVyLCB2dCk7CiAKIAlpZiAodGVzdF9iaXQoQ1gxOF9GX0lfUkFESU9fVVNFUiwgJmN4LT5pX2ZsYWdzKSkgewogCQlzdHJsY3B5KHZ0LT5uYW1lLCAiY3gxOCBSYWRpbyBUdW5lciIsIHNpemVvZih2dC0+bmFtZSkpOwpAQCAtNTk4LDcgKzc0OSwzMCBAQAogc3RhdGljIGludCBjeDE4X2dfc2xpY2VkX3ZiaV9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAogCQkJCQlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2NhcCAqY2FwKQogewotCXJldHVybiAtRUlOVkFMOworCXN0cnVjdCBjeDE4ICpjeCA9ICgoc3RydWN0IGN4MThfb3Blbl9pZCAqKWZoKS0+Y3g7CisJaW50IHNldCA9IGN4LT5pc181MGh6ID8gVjRMMl9TTElDRURfVkJJXzYyNSA6IFY0TDJfU0xJQ0VEX1ZCSV81MjU7CisJaW50IGYsIGw7CisKKwlpZiAoY2FwLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfU0xJQ0VEX1ZCSV9DQVBUVVJFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWNhcC0+c2VydmljZV9zZXQgPSAwOworCWZvciAoZiA9IDA7IGYgPCAyOyBmKyspIHsKKwkJZm9yIChsID0gMDsgbCA8IDI0OyBsKyspIHsKKwkJCWlmICh2YWxpZF9zZXJ2aWNlX2xpbmUoZiwgbCwgY3gtPmlzXzUwaHopKSB7CisJCQkJLyoKKwkJCQkgKiBXZSBjYW4gZmluZCBhbGwgdjRsMiBzdXBwb3J0ZWQgdmJpIHNlcnZpY2VzCisJCQkJICogZm9yIHRoZSBzdGFuZGFyZCwgb24gYSB2YWxpZCBsaW5lIGZvciB0aGUgc3RkCisJCQkJICovCisJCQkJY2FwLT5zZXJ2aWNlX2xpbmVzW2ZdW2xdID0gc2V0OworCQkJCWNhcC0+c2VydmljZV9zZXQgfD0gc2V0OworCQkJfSBlbHNlCisJCQkJY2FwLT5zZXJ2aWNlX2xpbmVzW2ZdW2xdID0gMDsKKwkJfQorCX0KKwlmb3IgKGYgPSAwOyBmIDwgMzsgZisrKQorCQljYXAtPnJlc2VydmVkW2ZdID0gMDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBjeDE4X2dfZW5jX2luZGV4KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKQEAgLTcwOCwxMyArODgyLDE1IEBACiAJc3RydWN0IHY0bDJfYXVkaW8gYXVkaW47CiAJaW50IGk7CiAKLQlDWDE4X0lORk8oIj09PT09PT09PT09PT09PT09ICBTVEFSVCBTVEFUVVMgQ0FSRCAjJWQgID09PT09PT09PT09PT09PT09XG4iLCBjeC0+bnVtKTsKKwlDWDE4X0lORk8oIj09PT09PT09PT09PT09PT09ICBTVEFSVCBTVEFUVVMgQ0FSRCAjJWQgICIKKwkJICAiPT09PT09PT09PT09PT09PT1cbiIsIGN4LT5pbnN0YW5jZSk7CisJQ1gxOF9JTkZPKCJWZXJzaW9uOiAlcyAgQ2FyZDogJXNcbiIsIENYMThfVkVSU0lPTiwgY3gtPmNhcmRfbmFtZSk7CiAJaWYgKGN4LT5od19mbGFncyAmIENYMThfSFdfVFZFRVBST00pIHsKIAkJc3RydWN0IHR2ZWVwcm9tIHR2OwogCiAJCWN4MThfcmVhZF9lZXByb20oY3gsICZ0dik7CiAJfQotCWN4MThfY2FsbF9pMmNfY2xpZW50cyhjeCwgVklESU9DX0xPR19TVEFUVVMsIE5VTEwpOworCWN4MThfY2FsbF9hbGwoY3gsIGNvcmUsIGxvZ19zdGF0dXMpOwogCWN4MThfZ2V0X2lucHV0KGN4LCBjeC0+YWN0aXZlX2lucHV0LCAmdmlkaW4pOwogCWN4MThfZ2V0X2F1ZGlvX2lucHV0KGN4LCBjeC0+YXVkaW9faW5wdXQsICZhdWRpbik7CiAJQ1gxOF9JTkZPKCJWaWRlbyBJbnB1dDogJXNcbiIsIHZpZGluLm5hbWUpOwpAQCAtNzI1LDEyICs5MDEsMTIgQEAKIAltdXRleF91bmxvY2soJmN4LT5ncGlvX2xvY2spOwogCUNYMThfSU5GTygiVHVuZXI6ICVzXG4iLAogCQl0ZXN0X2JpdChDWDE4X0ZfSV9SQURJT19VU0VSLCAmY3gtPmlfZmxhZ3MpID8gICJSYWRpbyIgOiAiVFYiKTsKLQljeDIzNDF4X2xvZ19zdGF0dXMoJmN4LT5wYXJhbXMsIGN4LT5uYW1lKTsKKwljeDIzNDF4X2xvZ19zdGF0dXMoJmN4LT5wYXJhbXMsIGN4LT52NGwyX2Rldi5uYW1lKTsKIAlDWDE4X0lORk8oIlN0YXR1cyBmbGFnczogMHglMDhseFxuIiwgY3gtPmlfZmxhZ3MpOwogCWZvciAoaSA9IDA7IGkgPCBDWDE4X01BWF9TVFJFQU1TOyBpKyspIHsKIAkJc3RydWN0IGN4MThfc3RyZWFtICpzID0gJmN4LT5zdHJlYW1zW2ldOwogCi0JCWlmIChzLT52NGwyZGV2ID09IE5VTEwgfHwgcy0+YnVmZmVycyA9PSAwKQorCQlpZiAocy0+dmlkZW9fZGV2ID09IE5VTEwgfHwgcy0+YnVmZmVycyA9PSAwKQogCQkJY29udGludWU7CiAJCUNYMThfSU5GTygiU3RyZWFtICVzOiBzdGF0dXMgMHglMDRseCwgJWQlJSBvZiAlZCBLaUIgKCVkIGJ1ZmZlcnMpIGluIHVzZVxuIiwKIAkJCSAgcy0+bmFtZSwgcy0+c19mbGFncywKQEAgLTc0MCw3ICs5MTYsOCBAQAogCUNYMThfSU5GTygiUmVhZCBNUEVHL1ZCSTogJWxsZC8lbGxkIGJ5dGVzXG4iLAogCQkJKGxvbmcgbG9uZyljeC0+bXBnX2RhdGFfcmVjZWl2ZWQsCiAJCQkobG9uZyBsb25nKWN4LT52YmlfZGF0YV9pbnNlcnRlZCk7Ci0JQ1gxOF9JTkZPKCI9PT09PT09PT09PT09PT09PT0gIEVORCBTVEFUVVMgQ0FSRCAjJWQgID09PT09PT09PT09PT09PT09PVxuIiwgY3gtPm51bSk7CisJQ1gxOF9JTkZPKCI9PT09PT09PT09PT09PT09PT0gIEVORCBTVEFUVVMgQ0FSRCAjJWQgICIKKwkJICAiPT09PT09PT09PT09PT09PT09XG4iLCBjeC0+aW5zdGFuY2UpOwogCXJldHVybiAwOwogfQogCkBAIC03NTQsNyArOTMxLDggQEAKIAogCQlDWDE4X0RFQlVHX0lPQ1RMKCJWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORyglZCwgJWQpXG4iLAogCQkJcm91dGUtPmlucHV0LCByb3V0ZS0+b3V0cHV0KTsKLQkJY3gxOF9hdWRpb19zZXRfcm91dGUoY3gsIHJvdXRlKTsKKwkJY3gxOF9jYWxsX2h3KGN4LCBjeC0+Y2FyZC0+aHdfYXVkaW9fY3RybCwgYXVkaW8sIHNfcm91dGluZywKKwkJCSAgICAgcm91dGUpOwogCQlicmVhazsKIAl9CiAKQEAgLTc2Miw3ICs5NDAsOCBAQAogCQl1MzIgdmFsID0gKih1MzIgKilhcmc7CiAKIAkJaWYgKCh2YWwgPT0gMCkgfHwgKHZhbCAmIDB4MDEpKQotCQkJY3gxOF9yZXNldF9pcl9ncGlvKCZjeC0+aTJjX2FsZ29fY2JfZGF0YVswXSk7CisJCQljeDE4X2NhbGxfaHcoY3gsIENYMThfSFdfR1BJT19SRVNFVF9DVFJMLCBjb3JlLCByZXNldCwKKwkJCQkgICAgICh1MzIpIENYMThfR1BJT19SRVNFVF9aOEYwODExKTsKIAkJYnJlYWs7CiAJfQogCkBAIC03ODIsNiArOTYxLDggQEAKIAogCW11dGV4X2xvY2soJmN4LT5zZXJpYWxpemVfbG9jayk7CiAKKwkvKiBGSVhNRSAtIGNvbnNvbGlkYXRlIHY0bDJfcHJpb19jaGVjaygpJ3MgaGVyZSAqLworCiAJaWYgKGN4MThfZGVidWcgJiBDWDE4X0RCR0ZMR19JT0NUTCkKIAkJdmZkLT5kZWJ1ZyA9IFY0TDJfREVCVUdfSU9DVEwgfCBWNEwyX0RFQlVHX0lPQ1RMX0FSRzsKIAlyZXMgPSB2aWRlb19pb2N0bDIoZmlscCwgY21kLCBhcmcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtbWFpbGJveC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtbWFpbGJveC5jCmluZGV4IGRlNWU3MjMuLjIyMjZlNTcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LW1haWxib3guYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1tYWlsYm94LmMKQEAgLTgzLDYgKzgzLDggQEAKIAlBUElfRU5UUlkoQ1BVLCBDWDE4X0NQVV9ERV9TRVRfTURMX0FDSywJCQkwKSwKIAlBUElfRU5UUlkoQ1BVLCBDWDE4X0NQVV9ERV9TRVRfTURMLAkJCUFQSV9GQVNUKSwKIAlBUElfRU5UUlkoQ1BVLCBDWDE4X0NQVV9ERV9SRUxFQVNFX01ETCwJCQlBUElfU0xPVyksCisJQVBJX0VOVFJZKEFQVSwgQ1gxOF9BUFVfU1RBUlQsCQkJCTApLAorCUFQSV9FTlRSWShBUFUsIENYMThfQVBVX1NUT1AsCQkJCTApLAogCUFQSV9FTlRSWShBUFUsIENYMThfQVBVX1JFU0VUQUksCQkJMCksCiAJQVBJX0VOVFJZKENQVSwgQ1gxOF9DUFVfREVCVUdfUEVFSzMyLAkJCTApLAogCUFQSV9FTlRSWSgwLCAwLAkJCQkJCTApLApAQCAtOTgsMjEgKzEwMCwzMCBAQAogCXJldHVybiBOVUxMOwogfQogCisvKiBDYWxsIHdpdGggYnVmIG9mIG4qMTErMSBieXRlcyAqLworc3RhdGljIGNoYXIgKnUzMmFycjJoZXgodTMyIGRhdGFbXSwgaW50IG4sIGNoYXIgKmJ1ZikKK3sKKwljaGFyICpwOworCWludCBpOworCisJZm9yIChpID0gMCwgcCA9IGJ1ZjsgaSA8IG47IGkrKywgcCArPSAxMSkgeworCQkvKiBrZXJuZWwgc25wcmludGYoKSBhcHBlbmRzICdcMCcgYWx3YXlzICovCisJCXNucHJpbnRmKHAsIDEyLCAiICUjMDEweCIsIGRhdGFbaV0pOworCX0KKwkqcCA9ICdcMCc7CisJcmV0dXJuIGJ1ZjsKK30KKwogc3RhdGljIHZvaWQgZHVtcF9tYihzdHJ1Y3QgY3gxOCAqY3gsIHN0cnVjdCBjeDE4X21haWxib3ggKm1iLCBjaGFyICpuYW1lKQogewogCWNoYXIgYXJnc3RyW01BWF9NQl9BUkdVTUVOVFMqMTErMV07Ci0JY2hhciAqcDsKLQlpbnQgaTsKIAogCWlmICghKGN4MThfZGVidWcgJiBDWDE4X0RCR0ZMR19BUEkpKQogCQlyZXR1cm47CiAKLQlmb3IgKGkgPSAwLCBwID0gYXJnc3RyOyBpIDwgTUFYX01CX0FSR1VNRU5UUzsgaSsrLCBwICs9IDExKSB7Ci0JCS8qIGtlcm5lbCBzbnByaW50ZigpIGFwcGVuZHMgJ1wwJyBhbHdheXMgKi8KLQkJc25wcmludGYocCwgMTIsICIgJSMwMTB4IiwgbWItPmFyZ3NbaV0pOwotCX0KIAlDWDE4X0RFQlVHX0FQSSgiJXM6IHJlcSAlIzAxMHggYWNrICUjMDEweCBjbWQgJSMwMTB4IGVyciAlIzAxMHggYXJncyVzIgotCQkiXG4iLCBuYW1lLCBtYi0+cmVxdWVzdCwgbWItPmFjaywgbWItPmNtZCwgbWItPmVycm9yLCBhcmdzdHIpOworCQkgICAgICAgIlxuIiwgbmFtZSwgbWItPnJlcXVlc3QsIG1iLT5hY2ssIG1iLT5jbWQsIG1iLT5lcnJvciwKKwkJICAgICAgIHUzMmFycjJoZXgobWItPmFyZ3MsIE1BWF9NQl9BUkdVTUVOVFMsIGFyZ3N0cikpOwogfQogCiAKQEAgLTQzOSw3ICs0NTAsOCBAQAogCQkJCSJpbmNvbWluZyAlcyB0byBFUFUgbWFpbGJveCAoc2VxdWVuY2Ugbm8uICV1KSIKIAkJCQkiXG4iLAogCQkJCXJwdV9zdHJbcnB1XSwgcnB1X3N0cltycHVdLCBvcmRlcl9tYi0+cmVxdWVzdCk7Ci0JCWR1bXBfbWIoY3gsIG9yZGVyX21iLCAiaW5jb21pbmciKTsKKwkJaWYgKGN4MThfZGVidWcgJiBDWDE4X0RCR0ZMR19XQVJOKQorCQkJZHVtcF9tYihjeCwgb3JkZXJfbWIsICJpbmNvbWluZyIpOwogCQlvcmRlci0+ZmxhZ3MgPSBDWDE4X0ZfRVdPX01CX1NUQUxFX1VQT05fUkVDRUlQVDsKIAl9CiAKQEAgLTQ2OCwxNiArNDgwLDI0IEBACiAJc3RydWN0IG11dGV4ICptYl9sb2NrOwogCWxvbmcgaW50IHRpbWVvdXQsIHJldDsKIAlpbnQgaTsKKwljaGFyIGFyZ3N0cltNQVhfTUJfQVJHVU1FTlRTKjExKzFdOwogCiAJaWYgKGluZm8gPT0gTlVMTCkgewogCQlDWDE4X1dBUk4oInVua25vd24gY21kICV4XG4iLCBjbWQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoY21kID09IENYMThfQ1BVX0RFX1NFVF9NREwpCi0JCUNYMThfREVCVUdfSElfQVBJKCIlc1xuIiwgaW5mby0+bmFtZSk7Ci0JZWxzZQotCQlDWDE4X0RFQlVHX0FQSSgiJXNcbiIsIGluZm8tPm5hbWUpOworCWlmIChjeDE4X2RlYnVnICYgQ1gxOF9EQkdGTEdfQVBJKSB7IC8qIG9ubHkgY2FsbCB1MzJhcnIyaGV4IGlmIG5lZWRlZCAqLworCQlpZiAoY21kID09IENYMThfQ1BVX0RFX1NFVF9NREwpIHsKKwkJCWlmIChjeDE4X2RlYnVnICYgQ1gxOF9EQkdGTEdfSElHSFZPTCkKKwkJCQlDWDE4X0RFQlVHX0hJX0FQSSgiJXNcdGNtZCAlIzAxMHggYXJncyVzXG4iLAorCQkJCQkJaW5mby0+bmFtZSwgY21kLAorCQkJCQkJdTMyYXJyMmhleChkYXRhLCBhcmdzLCBhcmdzdHIpKTsKKwkJfSBlbHNlCisJCQlDWDE4X0RFQlVHX0FQSSgiJXNcdGNtZCAlIzAxMHggYXJncyVzXG4iLAorCQkJCSAgICAgICBpbmZvLT5uYW1lLCBjbWQsCisJCQkJICAgICAgIHUzMmFycjJoZXgoZGF0YSwgYXJncywgYXJnc3RyKSk7CisJfQogCiAJc3dpdGNoIChpbmZvLT5ycHUpIHsKIAljYXNlIEFQVToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXF1ZXVlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1xdWV1ZS5jCmluZGV4IDhkOTQ0MWUuLjMwNDZiOGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXF1ZXVlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtcXVldWUuYwpAQCAtMjA0LDcgKzIwNCw3IEBACiAJCX0KIAkJYnVmLT5pZCA9IGN4LT5idWZmZXJfaWQrKzsKIAkJSU5JVF9MSVNUX0hFQUQoJmJ1Zi0+bGlzdCk7Ci0JCWJ1Zi0+ZG1hX2hhbmRsZSA9IHBjaV9tYXBfc2luZ2xlKHMtPmN4LT5kZXYsCisJCWJ1Zi0+ZG1hX2hhbmRsZSA9IHBjaV9tYXBfc2luZ2xlKHMtPmN4LT5wY2lfZGV2LAogCQkJCWJ1Zi0+YnVmLCBzLT5idWZfc2l6ZSwgcy0+ZG1hKTsKIAkJY3gxOF9idWZfc3luY19mb3JfY3B1KHMsIGJ1Zik7CiAJCWN4MThfZW5xdWV1ZShzLCBidWYsICZzLT5xX2ZyZWUpOwpAQCAtMjI3LDcgKzIyNyw3IEBACiAKIAkvKiBlbXB0eSBxX2ZyZWUgKi8KIAl3aGlsZSAoKGJ1ZiA9IGN4MThfZGVxdWV1ZShzLCAmcy0+cV9mcmVlKSkpIHsKLQkJcGNpX3VubWFwX3NpbmdsZShzLT5jeC0+ZGV2LCBidWYtPmRtYV9oYW5kbGUsCisJCXBjaV91bm1hcF9zaW5nbGUocy0+Y3gtPnBjaV9kZXYsIGJ1Zi0+ZG1hX2hhbmRsZSwKIAkJCQlzLT5idWZfc2l6ZSwgcy0+ZG1hKTsKIAkJa2ZyZWUoYnVmLT5idWYpOwogCQlrZnJlZShidWYpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtcXVldWUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXF1ZXVlLmgKaW5kZXggNDU2Y2VjMy4uNGRlMDYyNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtcXVldWUuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1xdWV1ZS5oCkBAIC0yOSwxNCArMjksMTQgQEAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjeDE4X2J1Zl9zeW5jX2Zvcl9jcHUoc3RydWN0IGN4MThfc3RyZWFtICpzLAogCXN0cnVjdCBjeDE4X2J1ZmZlciAqYnVmKQogewotCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShzLT5jeC0+ZGV2LCBidWYtPmRtYV9oYW5kbGUsCisJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHMtPmN4LT5wY2lfZGV2LCBidWYtPmRtYV9oYW5kbGUsCiAJCQkJcy0+YnVmX3NpemUsIHMtPmRtYSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBjeDE4X2J1Zl9zeW5jX2Zvcl9kZXZpY2Uoc3RydWN0IGN4MThfc3RyZWFtICpzLAogCXN0cnVjdCBjeDE4X2J1ZmZlciAqYnVmKQogewotCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzLT5jeC0+ZGV2LCBidWYtPmRtYV9oYW5kbGUsCisJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKHMtPmN4LT5wY2lfZGV2LCBidWYtPmRtYV9oYW5kbGUsCiAJCQkJcy0+YnVmX3NpemUsIHMtPmRtYSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXN0cmVhbXMuYwppbmRleCA4OWMxZWM5Li4wOTMyYjc2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC1zdHJlYW1zLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtc3RyZWFtcy5jCkBAIC0zMiw3ICszMiw2IEBACiAjaW5jbHVkZSAiY3gxOC1zdHJlYW1zLmgiCiAjaW5jbHVkZSAiY3gxOC1jYXJkcy5oIgogI2luY2x1ZGUgImN4MTgtc2NiLmgiCi0jaW5jbHVkZSAiY3gxOC1hdi1jb3JlLmgiCiAjaW5jbHVkZSAiY3gxOC1kdmIuaCIKIAogI2RlZmluZSBDWDE4X0RTUDBfSU5URVJSVVBUX01BU0sgICAgIAkweGQwMDA0QwpAQCAtMTAxLDExICsxMDAsMTEgQEAKIHN0YXRpYyB2b2lkIGN4MThfc3RyZWFtX2luaXQoc3RydWN0IGN4MTggKmN4LCBpbnQgdHlwZSkKIHsKIAlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMgPSAmY3gtPnN0cmVhbXNbdHlwZV07Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqZGV2ID0gcy0+djRsMmRldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2aWRlb19kZXYgPSBzLT52aWRlb19kZXY7CiAKLQkvKiB3ZSBuZWVkIHRvIGtlZXAgdjRsMmRldiwgc28gcmVzdG9yZSBpdCBhZnRlcndhcmRzICovCisJLyogd2UgbmVlZCB0byBrZWVwIHZpZGVvX2Rldiwgc28gcmVzdG9yZSBpdCBhZnRlcndhcmRzICovCiAJbWVtc2V0KHMsIDAsIHNpemVvZigqcykpOwotCXMtPnY0bDJkZXYgPSBkZXY7CisJcy0+dmlkZW9fZGV2ID0gdmlkZW9fZGV2OwogCiAJLyogaW5pdGlhbGl6ZSBjeDE4X3N0cmVhbSBmaWVsZHMgKi8KIAlzLT5jeCA9IGN4OwpAQCAtMTMwLDEyICsxMjksMTIgQEAKIAlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMgPSAmY3gtPnN0cmVhbXNbdHlwZV07CiAJdTMyIGNhcCA9IGN4LT52NGwyX2NhcDsKIAlpbnQgbnVtX29mZnNldCA9IGN4MThfc3RyZWFtX2luZm9bdHlwZV0ubnVtX29mZnNldDsKLQlpbnQgbnVtID0gY3gtPm51bSArIGN4MThfZmlyc3RfbWlub3IgKyBudW1fb2Zmc2V0OworCWludCBudW0gPSBjeC0+aW5zdGFuY2UgKyBjeDE4X2ZpcnN0X21pbm9yICsgbnVtX29mZnNldDsKIAotCS8qIFRoZXNlIGZvdXIgZmllbGRzIGFyZSBhbHdheXMgaW5pdGlhbGl6ZWQuIElmIHY0bDJkZXYgPT0gTlVMTCwgdGhlbgorCS8qIFRoZXNlIGZvdXIgZmllbGRzIGFyZSBhbHdheXMgaW5pdGlhbGl6ZWQuIElmIHZpZGVvX2RldiA9PSBOVUxMLCB0aGVuCiAJICAgdGhpcyBzdHJlYW0gaXMgbm90IGluIHVzZS4gSW4gdGhhdCBjYXNlIG5vIG90aGVyIGZpZWxkcyBidXQgdGhlc2UKIAkgICBmb3VyIGNhbiBiZSB1c2VkLiAqLwotCXMtPnY0bDJkZXYgPSBOVUxMOworCXMtPnZpZGVvX2RldiA9IE5VTEw7CiAJcy0+Y3ggPSBjeDsKIAlzLT50eXBlID0gdHlwZTsKIAlzLT5uYW1lID0gY3gxOF9zdHJlYW1faW5mb1t0eXBlXS5uYW1lOwpAQCAtMTYzLDIyICsxNjIsMjIgQEAKIAkJcmV0dXJuIDA7CiAKIAkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgdjRsMiB2aWRlbyBkZXZpY2Ugc3RydWN0dXJlICovCi0Jcy0+djRsMmRldiA9IHZpZGVvX2RldmljZV9hbGxvYygpOwotCWlmIChzLT52NGwyZGV2ID09IE5VTEwpIHsKKwlzLT52aWRlb19kZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAocy0+dmlkZW9fZGV2ID09IE5VTEwpIHsKIAkJQ1gxOF9FUlIoIkNvdWxkbid0IGFsbG9jYXRlIHY0bDIgdmlkZW9fZGV2aWNlIGZvciAlc1xuIiwKIAkJCQlzLT5uYW1lKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0Jc25wcmludGYocy0+djRsMmRldi0+bmFtZSwgc2l6ZW9mKHMtPnY0bDJkZXYtPm5hbWUpLCAiY3gxOC0lZCIsCi0JCQljeC0+bnVtKTsKKwlzbnByaW50ZihzLT52aWRlb19kZXYtPm5hbWUsIHNpemVvZihzLT52aWRlb19kZXYtPm5hbWUpLCAiJXMgJXMiLAorCQkgY3gtPnY0bDJfZGV2Lm5hbWUsIHMtPm5hbWUpOwogCi0Jcy0+djRsMmRldi0+bnVtID0gbnVtOwotCXMtPnY0bDJkZXYtPnBhcmVudCA9ICZjeC0+ZGV2LT5kZXY7Ci0Jcy0+djRsMmRldi0+Zm9wcyA9ICZjeDE4X3Y0bDJfZW5jX2ZvcHM7Ci0Jcy0+djRsMmRldi0+cmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlOwotCXMtPnY0bDJkZXYtPnR2bm9ybXMgPSBWNEwyX1NURF9BTEw7Ci0JY3gxOF9zZXRfZnVuY3Mocy0+djRsMmRldik7CisJcy0+dmlkZW9fZGV2LT5udW0gPSBudW07CisJcy0+dmlkZW9fZGV2LT52NGwyX2RldiA9ICZjeC0+djRsMl9kZXY7CisJcy0+dmlkZW9fZGV2LT5mb3BzID0gJmN4MThfdjRsMl9lbmNfZm9wczsKKwlzLT52aWRlb19kZXYtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKKwlzLT52aWRlb19kZXYtPnR2bm9ybXMgPSBWNEwyX1NURF9BTEw7CisJY3gxOF9zZXRfZnVuY3Mocy0+dmlkZW9fZGV2KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMjI3LDI4ICsyMjYsMzAgQEAKIAkJfQogCX0KIAotCWlmIChzLT52NGwyZGV2ID09IE5VTEwpCisJaWYgKHMtPnZpZGVvX2RldiA9PSBOVUxMKQogCQlyZXR1cm4gMDsKIAotCW51bSA9IHMtPnY0bDJkZXYtPm51bTsKKwludW0gPSBzLT52aWRlb19kZXYtPm51bTsKIAkvKiBjYXJkIG51bWJlciArIHVzZXIgZGVmaW5lZCBvZmZzZXQgKyBkZXZpY2Ugb2Zmc2V0ICovCiAJaWYgKHR5cGUgIT0gQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHKSB7CiAJCXN0cnVjdCBjeDE4X3N0cmVhbSAqc19tcGcgPSAmY3gtPnN0cmVhbXNbQ1gxOF9FTkNfU1RSRUFNX1RZUEVfTVBHXTsKIAotCQlpZiAoc19tcGctPnY0bDJkZXYpCi0JCQludW0gPSBzX21wZy0+djRsMmRldi0+bnVtICsgY3gxOF9zdHJlYW1faW5mb1t0eXBlXS5udW1fb2Zmc2V0OworCQlpZiAoc19tcGctPnZpZGVvX2RldikKKwkJCW51bSA9IHNfbXBnLT52aWRlb19kZXYtPm51bQorCQkJICAgICsgY3gxOF9zdHJlYW1faW5mb1t0eXBlXS5udW1fb2Zmc2V0OwogCX0KKwl2aWRlb19zZXRfZHJ2ZGF0YShzLT52aWRlb19kZXYsIHMpOwogCiAJLyogUmVnaXN0ZXIgZGV2aWNlLiBGaXJzdCB0cnkgdGhlIGRlc2lyZWQgbWlub3IsIHRoZW4gYW55IGZyZWUgb25lLiAqLwotCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZShzLT52NGwyZGV2LCB2ZmxfdHlwZSwgbnVtKTsKKwlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2Uocy0+dmlkZW9fZGV2LCB2ZmxfdHlwZSwgbnVtKTsKIAlpZiAocmV0IDwgMCkgewogCQlDWDE4X0VSUigiQ291bGRuJ3QgcmVnaXN0ZXIgdjRsMiBkZXZpY2UgZm9yICVzIGtlcm5lbCBudW1iZXIgJWRcbiIsCiAJCQlzLT5uYW1lLCBudW0pOwotCQl2aWRlb19kZXZpY2VfcmVsZWFzZShzLT52NGwyZGV2KTsKLQkJcy0+djRsMmRldiA9IE5VTEw7CisJCXZpZGVvX2RldmljZV9yZWxlYXNlKHMtPnZpZGVvX2Rldik7CisJCXMtPnZpZGVvX2RldiA9IE5VTEw7CiAJCXJldHVybiByZXQ7CiAJfQotCW51bSA9IHMtPnY0bDJkZXYtPm51bTsKKwludW0gPSBzLT52aWRlb19kZXYtPm51bTsKIAogCXN3aXRjaCAodmZsX3R5cGUpIHsKIAljYXNlIFZGTF9UWVBFX0dSQUJCRVI6CkBAIC0zMTIsOSArMzEzLDkgQEAKIAkJCWN4LT5zdHJlYW1zW3R5cGVdLmR2Yi5lbmFibGVkID0gZmFsc2U7CiAJCX0KIAotCQl2ZGV2ID0gY3gtPnN0cmVhbXNbdHlwZV0udjRsMmRldjsKKwkJdmRldiA9IGN4LT5zdHJlYW1zW3R5cGVdLnZpZGVvX2RldjsKIAotCQljeC0+c3RyZWFtc1t0eXBlXS52NGwyZGV2ID0gTlVMTDsKKwkJY3gtPnN0cmVhbXNbdHlwZV0udmlkZW9fZGV2ID0gTlVMTDsKIAkJaWYgKHZkZXYgPT0gTlVMTCkKIAkJCWNvbnRpbnVlOwogCkBAIC0zNDYsNDYgKzM0Nyw4OCBAQAogCX0KIAogCS8qIHNldHVwIFZCSSByZWdpc3RlcnMgKi8KLQljeDE4X2F2X2NtZChjeCwgVklESU9DX1NfRk1ULCAmY3gtPnZiaS5pbik7CisJdjRsMl9zdWJkZXZfY2FsbChjeC0+c2RfYXYsIHZpZGVvLCBzX2ZtdCwgJmN4LT52YmkuaW4pOwogCi0JLyogZGV0ZXJtaW5lIG51bWJlciBvZiBsaW5lcyBhbmQgdG90YWwgbnVtYmVyIG9mIFZCSSBieXRlcy4KLQkgICBBIHJhdyBsaW5lIHRha2VzIDE0NDQgYnl0ZXM6IDQgYnl0ZSBTQVYgY29kZSArIDIgKiA3MjAKLQkgICBBIHNsaWNlZCBsaW5lIHRha2VzIDUxIGJ5dGVzOiA0IGJ5dGUgZnJhbWUgaGVhZGVyLCA0IGJ5dGUgaW50ZXJuYWwKLQkgICBoZWFkZXIsIDQyIGRhdGEgYnl0ZXMgKyBjaGVja3N1bSAodG8gYmUgY29uZmlybWVkKSAqLworCS8qCisJICogU2VuZCB0aGUgQ1gxOF9DUFVfU0VUX1JBV19WQklfUEFSQU0gQVBJIGNvbW1hbmQgdG8gc2V0dXAgRW5jb2RlciBSYXcKKwkgKiBWQkkgd2hlbiB0aGUgZmlyc3QgYW5hbG9nIGNhcHR1cmUgY2hhbm5lbCBzdGFydHMsIGFzIG9uY2UgaXQgc3RhcnRzCisJICogKGUuZy4gTVBFRyksIHdlIGNhbid0IGVmZmVjdCBhbnkgY2hhbmdlIGluIHRoZSBFbmNvZGVyIFJhdyBWQkkgc2V0dXAKKwkgKiAoaS5lLiBmb3IgdGhlIFZCSSBjYXB0dXJlIGNoYW5uZWxzKS4gIFdlIGFsc28gc2VuZCBpdCBmb3IgZWFjaAorCSAqIGFuYWxvZyBjYXB0dXJlIGNoYW5uZWwgYW55d2F5IGp1c3QgdG8gbWFrZSBzdXJlIHdlIGdldCB0aGUgcHJvcGVyCisJICogYmVoYXZpb3IKKwkgKi8KIAlpZiAocmF3KSB7CiAJCWxpbmVzID0gY3gtPnZiaS5jb3VudCAqIDI7CiAJfSBlbHNlIHsKLQkJbGluZXMgPSBjeC0+aXNfNjBoeiA/IDI0IDogMzg7Ci0JCWlmIChjeC0+aXNfNjBoeikKLQkJCWxpbmVzICs9IDI7CisJCS8qCisJCSAqIEZvciA1MjUvNjAgc3lzdGVtcywgYWNjb3JkaW5nIHRvIHRoZSBWSVAgMiAmIEJULjY1NiBzdGQ6CisJCSAqIFRoZSBFQVYgUlAgY29kZSdzIEZpZWxkIGJpdCB0b2dnbGVzIG9uIGxpbmUgNCwgYSBmZXcgbGluZXMKKwkJICogYWZ0ZXIgdGhlIFZlcnRjYWwgQmxhbmsgYml0IGhhcyBhbHJlYWR5IHRvZ2dsZWQuCisJCSAqIFRlbGwgdGhlIGVuY29kZXIgdG8gY2FwdHVyZSAyMS00KzE9MTggbGluZXMgcGVyIGZpZWxkLAorCQkgKiBzaW5jZSB3ZSB3YW50IGxpbmVzIDEwIHRocm91Z2ggMjEuCisJCSAqCisJCSAqIEZJWE1FIC0gcmV2aXNpdCBmb3IgNjI1LzUwIHN5c3RlbXMKKwkJICovCisJCWxpbmVzID0gY3gtPmlzXzYwaHogPyAoMjEgLSA0ICsgMSkgKiAyIDogMzg7CiAJfQogCi0JY3gtPnZiaS5lbmNfc2l6ZSA9IGxpbmVzICoKLQkJKHJhdyA/IGN4LT52YmkucmF3X3NpemUgOiBjeC0+dmJpLnNsaWNlZF9zaXplKTsKLQogCWRhdGFbMF0gPSBzLT5oYW5kbGU7CiAJLyogTGluZXMgcGVyIGZpZWxkICovCiAJZGF0YVsxXSA9IChsaW5lcyAvIDIpIHwgKChsaW5lcyAvIDIpIDw8IDE2KTsKIAkvKiBieXRlcyBwZXIgbGluZSAqLwotCWRhdGFbMl0gPSAocmF3ID8gY3gtPnZiaS5yYXdfZGVjb2Rlcl9saW5lX3NpemUKLQkJICAgICAgIDogY3gtPnZiaS5zbGljZWRfZGVjb2Rlcl9saW5lX3NpemUpOworCWRhdGFbMl0gPSAocmF3ID8gdmJpX2FjdGl2ZV9zYW1wbGVzCisJCSAgICAgICA6IChjeC0+aXNfNjBoeiA/IHZiaV9oYmxhbmtfc2FtcGxlc182MEh6CisJCQkJICAgICAgOiB2YmlfaGJsYW5rX3NhbXBsZXNfNTBIeikpOwogCS8qIEV2ZXJ5IFggbnVtYmVyIG9mIGZyYW1lcyBhIFZCSSBpbnRlcnJ1cHQgYXJyaXZlcwogCSAgIChmcmFtZXMgYXMgaW4gMjUgb3IgMzAgZnBzKSAqLwogCWRhdGFbM10gPSAxOwotCS8qIFNldHVwIFZCSSBmb3IgdGhlIGN4MjU4NDAgZGlnaXRpemVyICovCisJLyoKKwkgKiBTZXQgdGhlIFNBVi9FQVYgUlAgY29kZXMgdG8gbG9vayBmb3IgYXMgc3RhcnQvc3RvcCBwb2ludHMKKwkgKiB3aGVuIGluIFZJUC0xLjEgbW9kZQorCSAqLwogCWlmIChyYXcpIHsKKwkJLyoKKwkJICogU3RhcnQgY29kZXMgZm9yIGJlZ2lubmluZyBvZiAiYWN0aXZlIiBsaW5lIGluIHZlcnRpY2FsIGJsYW5rCisJCSAqIDB4MjAgKCAgICAgICAgICAgICAgIFZlcnRpY2FsQmxhbmsgICAgICAgICAgICAgICAgKQorCQkgKiAweDYwICggICAgIEV2ZW5GaWVsZCBWZXJ0aWNhbEJsYW5rICAgICAgICAgICAgICAgICkKKwkJICovCiAJCWRhdGFbNF0gPSAweDIwNjAyMDYwOworCQkvKgorCQkgKiBFbmQgY29kZXMgZm9yIGVuZCBvZiAiYWN0aXZlIiByYXcgbGluZXMgYW5kIHJlZ3VsYXIgbGluZXMKKwkJICogMHgzMCAoICAgICAgICAgICAgICAgVmVydGljYWxCbGFuayBIb3Jpem9udGFsQmxhbmspCisJCSAqIDB4NzAgKCAgICAgRXZlbkZpZWxkIFZlcnRpY2FsQmxhbmsgSG9yaXpvbnRhbEJsYW5rKQorCQkgKiAweDkwIChUYXNrICAgICAgICAgICAgICAgICAgICAgICAgIEhvcml6b250YWxCbGFuaykKKwkJICogMHhkMCAoVGFzayBFdmVuRmllbGQgICAgICAgICAgICAgICBIb3Jpem9udGFsQmxhbmspCisJCSAqLwogCQlkYXRhWzVdID0gMHgzMDcwOTBkMDsKIAl9IGVsc2UgeworCQkvKgorCQkgKiBFbmQgY29kZXMgZm9yIGFjdGl2ZSB2aWRlbywgd2Ugd2FudCBkYXRhIGluIHRoZSBoYmxhbmsgcmVnaW9uCisJCSAqIDB4YjAgKFRhc2sgICAgICAgICAwIFZlcnRpY2FsQmxhbmsgSG9yaXpvbnRhbEJsYW5rKQorCQkgKiAweGYwIChUYXNrIEV2ZW5GaWVsZCBWZXJ0aWNhbEJsYW5rIEhvcml6b250YWxCbGFuaykKKwkJICoKKwkJICogU2luY2UgdGhlIFYgYml0IGlzIG9ubHkgYWxsb3dlZCB0byB0b2dnbGUgaW4gdGhlIEVBViBSUCBjb2RlLAorCQkgKiBqdXN0IGJlZm9yZSB0aGUgZmlyc3QgYWN0aXZlIHJlZ2lvbiBsaW5lLCB0aGVzZSB0d28KKwkJICogYXJlIHByb2JsZW1hdGljOgorCQkgKiAweDkwIChUYXNrICAgICAgICAgICAgICAgICAgICAgICAgIEhvcml6b250YWxCbGFuaykKKwkJICogMHhkMCAoVGFzayBFdmVuRmllbGQgICAgICAgICAgICAgICBIb3Jpem9udGFsQmxhbmspCisJCSAqCisJCSAqIFdlIGhhdmUgc2V0IHRoZSBkaWdpdHplciBzdWNoIHRoYXQgd2UgZG9uJ3QgaGF2ZSB0byB3b3JyeQorCQkgKiBhYm91dCB0aGVzZSBwcm9ibGVtIGNvZGVzLgorCQkgKi8KIAkJZGF0YVs0XSA9IDB4QjBGMEIwRjA7CisJCS8qCisJCSAqIFN0YXJ0IGNvZGVzIGZvciBiZWdpbm5pbmcgb2YgYWN0aXZlIGxpbmUgaW4gdmVydGljYWwgYmxhbmsKKwkJICogMHhhMCAoVGFzayAgICAgICAgICAgVmVydGljYWxCbGFuayAgICAgICAgICAgICAgICApCisJCSAqIDB4ZTAgKFRhc2sgRXZlbkZpZWxkIFZlcnRpY2FsQmxhbmsgICAgICAgICAgICAgICAgKQorCQkgKi8KIAkJZGF0YVs1XSA9IDB4QTBFMEEwRTA7CiAJfQogCiAJQ1gxOF9ERUJVR19JTkZPKCJTZXR1cCBWQkkgaDogJWQgbGluZXMgJXggYnBsICVkIGZyICVkICV4ICV4XG4iLAogCQkJZGF0YVswXSwgZGF0YVsxXSwgZGF0YVsyXSwgZGF0YVszXSwgZGF0YVs0XSwgZGF0YVs1XSk7CiAKLQlpZiAocy0+dHlwZSA9PSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkkpCi0JCWN4MThfYXBpKGN4LCBDWDE4X0NQVV9TRVRfUkFXX1ZCSV9QQVJBTSwgNiwgZGF0YSk7CisJY3gxOF9hcGkoY3gsIENYMThfQ1BVX1NFVF9SQVdfVkJJX1BBUkFNLCA2LCBkYXRhKTsKIH0KIAogc3RydWN0IGN4MThfcXVldWUgKmN4MThfc3RyZWFtX3B1dF9idWZfZncoc3RydWN0IGN4MThfc3RyZWFtICpzLApAQCAtNDM0LDEwICs0NzcsMTAgQEAKIAl1MzIgZGF0YVtNQVhfTUJfQVJHVU1FTlRTXTsKIAlzdHJ1Y3QgY3gxOCAqY3ggPSBzLT5jeDsKIAlzdHJ1Y3QgY3gxOF9idWZmZXIgKmJ1ZjsKLQlpbnQgdHMgPSAwOwogCWludCBjYXB0eXBlID0gMDsKKwlzdHJ1Y3QgY3gxOF9hcGlfZnVuY19wcml2YXRlIHByaXY7CiAKLQlpZiAocy0+djRsMmRldiA9PSBOVUxMICYmIHMtPmR2Yi5lbmFibGVkID09IDApCisJaWYgKHMtPnZpZGVvX2RldiA9PSBOVUxMICYmIHMtPmR2Yi5lbmFibGVkID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJQ1gxOF9ERUJVR19JTkZPKCJTdGFydCBlbmNvZGVyIHN0cmVhbSAlc1xuIiwgcy0+bmFtZSk7CkBAIC00NTMsNyArNDk2LDYgQEAKIAogCWNhc2UgQ1gxOF9FTkNfU1RSRUFNX1RZUEVfVFM6CiAJCWNhcHR5cGUgPSBDQVBUVVJFX0NIQU5ORUxfVFlQRV9UUzsKLQkJdHMgPSAxOwogCQlicmVhazsKIAljYXNlIENYMThfRU5DX1NUUkVBTV9UWVBFX1lVVjoKIAkJY2FwdHlwZSA9IENBUFRVUkVfQ0hBTk5FTF9UWVBFX1lVVjsKQEAgLTQ2Miw4ICs1MDQsMTYgQEAKIAkJY2FwdHlwZSA9IENBUFRVUkVfQ0hBTk5FTF9UWVBFX1BDTTsKIAkJYnJlYWs7CiAJY2FzZSBDWDE4X0VOQ19TVFJFQU1fVFlQRV9WQkk6CisjaWZkZWYgQ1gxOF9FTkNPREVSX1BBUlNFU19TTElDRUQKIAkJY2FwdHlwZSA9IGN4MThfcmF3X3ZiaShjeCkgPwogCQkgICAgIENBUFRVUkVfQ0hBTk5FTF9UWVBFX1ZCSSA6IENBUFRVUkVfQ0hBTk5FTF9UWVBFX1NMSUNFRF9WQkk7CisjZWxzZQorCQkvKgorCQkgKiBDdXJyZW50bHkgd2Ugc2V0IHRoaW5ncyB1cCBzbyB0aGF0IFNsaWNlZCBWQkkgZnJvbSB0aGUKKwkJICogZGlnaXRpemVyIGlzIGhhbmRsZWQgYXMgUmF3IFZCSSBieSB0aGUgZW5jb2RlcgorCQkgKi8KKwkJY2FwdHlwZSA9IENBUFRVUkVfQ0hBTk5FTF9UWVBFX1ZCSTsKKyNlbmRpZgogCQljeC0+dmJpLmZyYW1lID0gMDsKIAkJY3gtPnZiaS5pbnNlcnRlZF9mcmFtZSA9IDA7CiAJCW1lbXNldChjeC0+dmJpLnNsaWNlZF9tcGVnX3NpemUsCkBAIC00NzMsMTAgKzUyMyw2IEBACiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCS8qIG11dGUvdW5tdXRlIHZpZGVvICovCi0JY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9TRVRfVklERU9fTVVURSwgMiwKLQkJICBzLT5oYW5kbGUsICEhdGVzdF9iaXQoQ1gxOF9GX0lfUkFESU9fVVNFUiwgJmN4LT5pX2ZsYWdzKSk7Ci0KIAkvKiBDbGVhciBTdHJlYW1vZmYgZmxhZ3MgaW4gY2FzZSBsZWZ0IGZyb20gbGFzdCBjYXB0dXJlICovCiAJY2xlYXJfYml0KENYMThfRl9TX1NUUkVBTU9GRiwgJnMtPnNfZmxhZ3MpOwogCkBAIC00ODQsMzEgKzUzMCw2MyBAQAogCXMtPmhhbmRsZSA9IGRhdGFbMF07CiAJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9TRVRfQ0hBTk5FTF9UWVBFLCAyLCBzLT5oYW5kbGUsIGNhcHR5cGUpOwogCi0JaWYgKGF0b21pY19yZWFkKCZjeC0+YW5hX2NhcHR1cmluZykgPT0gMCAmJiAhdHMpIHsKLQkJc3RydWN0IGN4MThfYXBpX2Z1bmNfcHJpdmF0ZSBwcml2OwotCi0JCS8qIFN0dWZmIGZyb20gV2luZG93cywgd2UgZG9uJ3Qga25vdyB3aGF0IGl0IGlzICovCisJLyoKKwkgKiBGb3IgZXZlcnl0aGluZyBidXQgQ0FQVFVSRV9DSEFOTkVMX1RZUEVfVFMsIHBsYXkgaXQgc2FmZSBhbmQKKwkgKiBzZXQgdXAgYWxsIHRoZSBwYXJhbWV0ZXJzLCBhcyBpdCBpcyBub3Qgb2J2aW91cyB3aGljaCBwYXJhbWV0ZXJzIHRoZQorCSAqIGZpcm13YXJlIHNoYXJlcyBhY3Jvc3MgY2FwdHVyZSBjaGFubmVsIHR5cGVzIGFuZCB3aGljaCBpdCBkb2VzIG5vdC4KKwkgKgorCSAqIFNvbWUgb2YgdGhlIGN4MThfdmFwaSgpIGNhbGxzIGJlbG93IGFwcGx5IHRvIG9ubHkgY2VydGFpbiBjYXB0dXJlCisJICogY2hhbm5lbCB0eXBlcy4gIFdlJ3JlIGhvcGluZyB0aGVyZSdzIG5vIGhhcm0gaW4gY2FsbGluZyBtb3N0IG9mIHRoZW0KKwkgKiBhbnl3YXksIGFzIGxvbmcgYXMgdGhlIHZhbHVlcyBhcmUgYWxsIGNvbnNpc3RlbnQuICBTZXR0aW5nIHNvbWUKKwkgKiBzaGFyZWQgcGFyYW1ldGVycyB3aWxsIGhhdmUgbm8gZWZmZWN0IG9uY2UgYW4gYW5hbG9nIGNhcHR1cmUgY2hhbm5lbAorCSAqIGhhcyBzdGFydGVkIHN0cmVhbWluZy4KKwkgKi8KKwlpZiAoY2FwdHlwZSAhPSBDQVBUVVJFX0NIQU5ORUxfVFlQRV9UUykgewogCQljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX1NFVF9WRVJfQ1JPUF9MSU5FLCAyLCBzLT5oYW5kbGUsIDApOwogCQljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX1NFVF9NSVNDX1BBUkFNRVRFUlMsIDMsIHMtPmhhbmRsZSwgMywgMSk7CiAJCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfU0VUX01JU0NfUEFSQU1FVEVSUywgMywgcy0+aGFuZGxlLCA4LCAwKTsKIAkJY3gxOF92YXBpKGN4LCBDWDE4X0NQVV9TRVRfTUlTQ19QQVJBTUVURVJTLCAzLCBzLT5oYW5kbGUsIDQsIDEpOwotCQljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX1NFVF9NSVNDX1BBUkFNRVRFUlMsIDIsIHMtPmhhbmRsZSwgMTIpOwogCisJCS8qCisJCSAqIEF1ZGlvIHJlbGF0ZWQgcmVzZXQgYWNjb3JkaW5nIHRvCisJCSAqIERvY3VtZW50YXRpb24vdmlkZW80bGludXgvY3gyMzQxeC9mdy1lbmNvZGVyLWFwaS50eHQKKwkJICovCisJCWlmIChhdG9taWNfcmVhZCgmY3gtPmFuYV9jYXB0dXJpbmcpID09IDApCisJCQljeDE4X3ZhcGkoY3gsIENYMThfQ1BVX1NFVF9NSVNDX1BBUkFNRVRFUlMsIDIsCisJCQkJICBzLT5oYW5kbGUsIDEyKTsKKworCQkvKgorCQkgKiBOdW1iZXIgb2YgbGluZXMgZm9yIEZpZWxkIDEgJiBGaWVsZCAyIGFjY29yZGluZyB0bworCQkgKiBEb2N1bWVudGF0aW9uL3ZpZGVvNGxpbnV4L2N4MjM0MXgvZnctZW5jb2Rlci1hcGkudHh0CisJCSAqIEZpZWxkIDEgaXMgMzEyIGZvciA2MjUgbGluZSBzeXN0ZW1zIGluIEJULjY1NgorCQkgKiBGaWVsZCAyIGlzIDMxMyBmb3IgNjI1IGxpbmUgc3lzdGVtcyBpbiBCVC42NTYKKwkJICovCiAJCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfU0VUX0NBUFRVUkVfTElORV9OTywgMywKLQkJCSAgICAgICBzLT5oYW5kbGUsIGN4LT5kaWdpdGl6ZXIsIGN4LT5kaWdpdGl6ZXIpOworCQkJICBzLT5oYW5kbGUsIDMxMiwgMzEzKTsKIAotCQkvKiBTZXR1cCBWQkkgKi8KIAkJaWYgKGN4LT52NGwyX2NhcCAmIFY0TDJfQ0FQX1ZCSV9DQVBUVVJFKQogCQkJY3gxOF92Ymlfc2V0dXAocyk7CiAKLQkJLyogYXNzaWduIHByb2dyYW0gaW5kZXggaW5mby4KLQkJICAgTWFzayA3OiBzZWxlY3QgSS9QL0IsIE51bV9yZXE6IDQwMCBtYXggKi8KKwkJLyoKKwkJICogYXNzaWduIHByb2dyYW0gaW5kZXggaW5mby4KKwkJICogTWFzayA3OiBzZWxlY3QgSS9QL0IsIE51bV9yZXE6IDQwMCBtYXgKKwkJICogRklYTUUgLSBjdXJyZW50bHkgd2UgaGF2ZSB0aGlzIGhhcmRjb2RlZCBhcyBkaXNhYmxlZAorCQkgKi8KIAkJY3gxOF92YXBpX3Jlc3VsdChjeCwgZGF0YSwgQ1gxOF9DUFVfU0VUX0lOREVYVEFCTEUsIDEsIDApOwogCi0JCS8qIFNldHVwIEFQSSBmb3IgU3RyZWFtICovCisJCS8qIENhbGwgb3V0IHRvIHRoZSBjb21tb24gQ1gyMzQxeCBBUEkgc2V0dXAgZm9yIHVzZXIgY29udHJvbHMgKi8KIAkJcHJpdi5jeCA9IGN4OwogCQlwcml2LnMgPSBzOwogCQljeDIzNDF4X3VwZGF0ZSgmcHJpdiwgY3gxOF9hcGlfZnVuYywgTlVMTCwgJmN4LT5wYXJhbXMpOworCisJCS8qCisJCSAqIFdoZW4gc3RhcnRpbmcgYSBjYXB0dXJlIGFuZCB3ZSdyZSBzZXQgZm9yIHJhZGlvLAorCQkgKiBlbnN1cmUgdGhlIHZpZGVvIGlzIG11dGVkLCBkZXNwaXRlIHRoZSB1c2VyIGNvbnRyb2wuCisJCSAqLworCQlpZiAoIWN4LT5wYXJhbXMudmlkZW9fbXV0ZSAmJgorCQkgICAgdGVzdF9iaXQoQ1gxOF9GX0lfUkFESU9fVVNFUiwgJmN4LT5pX2ZsYWdzKSkKKwkJCWN4MThfdmFwaShjeCwgQ1gxOF9DUFVfU0VUX1ZJREVPX01VVEUsIDIsIHMtPmhhbmRsZSwKKwkJCQkgIChjeC0+cGFyYW1zLnZpZGVvX211dGVfeXV2IDw8IDgpIHwgMSk7CiAJfQogCiAJaWYgKGF0b21pY19yZWFkKCZjeC0+dG90X2NhcHR1cmluZykgPT0gMCkgewpAQCAtNTUyLDcgKzYzMCw3IEBACiAJfQogCiAJLyogeW91J3JlIGxpdmUhIHNpdCBiYWNrIGFuZCBhd2FpdCBpbnRlcnJ1cHRzIDopICovCi0JaWYgKCF0cykKKwlpZiAoY2FwdHlwZSAhPSBDQVBUVVJFX0NIQU5ORUxfVFlQRV9UUykKIAkJYXRvbWljX2luYygmY3gtPmFuYV9jYXB0dXJpbmcpOwogCWF0b21pY19pbmMoJmN4LT50b3RfY2FwdHVyaW5nKTsKIAlyZXR1cm4gMDsKQEAgLTU2NSw3ICs2NDMsNyBAQAogCWZvciAoaSA9IENYMThfTUFYX1NUUkVBTVMgLSAxOyBpID49IDA7IGktLSkgewogCQlzdHJ1Y3QgY3gxOF9zdHJlYW0gKnMgPSAmY3gtPnN0cmVhbXNbaV07CiAKLQkJaWYgKHMtPnY0bDJkZXYgPT0gTlVMTCAmJiBzLT5kdmIuZW5hYmxlZCA9PSAwKQorCQlpZiAocy0+dmlkZW9fZGV2ID09IE5VTEwgJiYgcy0+ZHZiLmVuYWJsZWQgPT0gMCkKIAkJCWNvbnRpbnVlOwogCQlpZiAodGVzdF9iaXQoQ1gxOF9GX1NfU1RSRUFNSU5HLCAmcy0+c19mbGFncykpCiAJCQljeDE4X3N0b3BfdjRsMl9lbmNvZGVfc3RyZWFtKHMsIDApOwpAQCAtNTc3LDcgKzY1NSw3IEBACiAJc3RydWN0IGN4MTggKmN4ID0gcy0+Y3g7CiAJdW5zaWduZWQgbG9uZyB0aGVuOwogCi0JaWYgKHMtPnY0bDJkZXYgPT0gTlVMTCAmJiBzLT5kdmIuZW5hYmxlZCA9PSAwKQorCWlmIChzLT52aWRlb19kZXYgPT0gTlVMTCAmJiBzLT5kdmIuZW5hYmxlZCA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIFRoaXMgZnVuY3Rpb24gYXNzdW1lcyB0aGF0IHlvdSBhcmUgYWxsb3dlZCB0byBzdG9wIHRoZSBjYXB0dXJlCkBAIC02MjksNyArNzA3LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgQ1gxOF9NQVhfU1RSRUFNUzsgaSsrKSB7CiAJCXN0cnVjdCBjeDE4X3N0cmVhbSAqcyA9ICZjeC0+c3RyZWFtc1tpXTsKIAotCQlpZiAocy0+djRsMmRldiAmJiAocy0+aGFuZGxlICE9IENYMThfSU5WQUxJRF9UQVNLX0hBTkRMRSkpCisJCWlmIChzLT52aWRlb19kZXYgJiYgKHMtPmhhbmRsZSAhPSBDWDE4X0lOVkFMSURfVEFTS19IQU5ETEUpKQogCQkJcmV0dXJuIHMtPmhhbmRsZTsKIAl9CiAJcmV0dXJuIENYMThfSU5WQUxJRF9UQVNLX0hBTkRMRTsKQEAgLTY0Nyw3ICs3MjUsNyBAQAogCQlzID0gJmN4LT5zdHJlYW1zW2ldOwogCQlpZiAocy0+aGFuZGxlICE9IGhhbmRsZSkKIAkJCWNvbnRpbnVlOwotCQlpZiAocy0+djRsMmRldiB8fCBzLT5kdmIuZW5hYmxlZCkKKwkJaWYgKHMtPnZpZGVvX2RldiB8fCBzLT5kdmIuZW5hYmxlZCkKIAkJCXJldHVybiBzOwogCX0KIAlyZXR1cm4gTlVMTDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZiaS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmJpLmMKaW5kZXggZmI1OTViZC4uYzJhZWY0YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmJpLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmJpLmMKQEAgLTI1LDcgKzI1LDE2IEBACiAjaW5jbHVkZSAiY3gxOC12YmkuaCIKICNpbmNsdWRlICJjeDE4LWlvY3RsLmgiCiAjaW5jbHVkZSAiY3gxOC1xdWV1ZS5oIgotI2luY2x1ZGUgImN4MTgtYXYtY29yZS5oIgorCisvKgorICogUmFzdGVyIFJlZmVyZW5jZS9Qcm90ZWN0aW9uIChSUCkgYnl0ZXMsIHVzZWQgaW4gU3RhcnQvRW5kIEFjdGl2ZQorICogVmlkZW8gY29kZXMgZW1pdHRlZCBmcm9tIHRoZSBkaWdpdHplciBpbiBWSVAgMS54IG1vZGUsIHRoYXQgZmxhZyB0aGUgc3RhcnQKKyAqIG9mIFZCSSBzYW1wbGUgb3IgVkJJIGFuY2lsbGlhcnkgZGF0YSByZWdpb25zIGluIHRoZSBkaWdpdGlhbCByYXRzZXIgbGluZS4KKyAqCisgKiBUYXNrIEZpZWxkRXZlbiBWZXJ0aWNhbEJsYW5rIEhvcml6b250YWxCbGFuayAwIDAgMCAwCisgKi8KK3N0YXRpYyBjb25zdCB1OCByYXdfdmJpX3Nhdl9ycFsyXSA9IHsgMHgyMCwgMHg2MCB9OyAgICAvKiBfX1ZfLCBfRlZfICovCitzdGF0aWMgY29uc3QgdTggc2xpY2VkX3ZiaV9lYXZfcnBbMl0gPSB7IDB4YjAsIDB4ZjAgfTsgLyogVF9WSCwgVEZWSCAqLwogCiBzdGF0aWMgdm9pZCBjb3B5X3ZiaV9kYXRhKHN0cnVjdCBjeDE4ICpjeCwgaW50IGxpbmVzLCB1MzIgcHRzX3N0YW1wKQogewpAQCAtMzQsMTAgKzQzLDE3IEBACiAJdTMyIGxpbmVtYXNrWzJdID0geyAwLCAwIH07CiAJdW5zaWduZWQgc2hvcnQgc2l6ZTsKIAlzdGF0aWMgY29uc3QgdTggbXBlZ19oZHJfZGF0YVtdID0gewotCQkweDAwLCAweDAwLCAweDAxLCAweGJhLCAweDQ0LCAweDAwLCAweDBjLCAweDY2LAotCQkweDI0LCAweDAxLCAweDAxLCAweGQxLCAweGQzLCAweGZhLCAweGZmLCAweGZmLAotCQkweDAwLCAweDAwLCAweDAxLCAweGJkLCAweDAwLCAweDFhLCAweDg0LCAweDgwLAotCQkweDA3LCAweDIxLCAweDAwLCAweDVkLCAweDYzLCAweGE3LCAweGZmLCAweGZmCisJCS8qIE1QRUctMiBQcm9ncmFtIFBhY2sgKi8KKwkJMHgwMCwgMHgwMCwgMHgwMSwgMHhiYSwJCSAgICAvKiBQcm9nIFBhY2sgc3RhcnQgY29kZSAqLworCQkweDQ0LCAweDAwLCAweDBjLCAweDY2LCAweDI0LCAweDAxLCAvKiBTQ1IsIFNDUiBFeHQsIG1hcmtlcnMgKi8KKwkJMHgwMSwgMHhkMSwgMHhkMywJCSAgICAvKiBNdXggUmF0ZSwgbWFya2VycyAqLworCQkweGZhLCAweGZmLCAweGZmLAkJICAgIC8qIFJlcywgU3VmZiBjbnQsIFN0dWZmICovCisJCS8qIE1QRUctMiBQcml2YXRlIFN0cmVhbSAxIFBFUyBQYWNrZXQgKi8KKwkJMHgwMCwgMHgwMCwgMHgwMSwgMHhiZCwJCSAgICAvKiBQcml2IFN0cmVhbSAxIHN0YXJ0ICovCisJCTB4MDAsIDB4MWEsCQkJICAgIC8qIGxlbmd0aCAqLworCQkweDg0LCAweDgwLCAweDA3LAkJICAgIC8qIGZsYWdzLCBoZHIgZGF0YSBsZW4gKi8KKwkJMHgyMSwgMHgwMCwgMHg1ZCwgMHg2MywgMHhhNywgCSAgICAvKiBQVFMsIG1hcmtlcnMgKi8KKwkJMHhmZiwgMHhmZgkJCSAgICAvKiBzdHVmZmluZyAqLwogCX07CiAJY29uc3QgaW50IHNkID0gc2l6ZW9mKG1wZWdfaGRyX2RhdGEpOwkvKiBzdGFydCBvZiB2YmkgZGF0YSAqLwogCWludCBpZHggPSBjeC0+dmJpLmZyYW1lICUgQ1gxOF9WQklfRlJBTUVTOwpAQCAtNzEsNyArODcsOSBAQAogCQltZW1jcHkoZHN0ICsgc2QgKyA0LCBkc3QgKyBzZCArIDEyLCBsaW5lICogNDMpOwogCQlzaXplID0gNCArICgoNDMgKiBsaW5lICsgMykgJiB+Myk7CiAJfSBlbHNlIHsKLQkJbWVtY3B5KGRzdCArIHNkLCAiY3gwIiwgNCk7CisJCW1lbWNweShkc3QgKyBzZCwgIml0djAiLCA0KTsKKwkJY3B1X3RvX2xlMzJzKCZsaW5lbWFza1swXSk7CisJCWNwdV90b19sZTMycygmbGluZW1hc2tbMV0pOwogCQltZW1jcHkoZHN0ICsgc2QgKyA0LCAmbGluZW1hc2tbMF0sIDgpOwogCQlzaXplID0gMTIgKyAoKDQzICogbGluZSArIDMpICYgfjMpOwogCX0KQEAgLTg2LDU4ICsxMDQsNzYgQEAKIH0KIAogLyogQ29tcHJlc3MgcmF3IFZCSSBmb3JtYXQsIHJlbW92ZXMgbGVhZGluZyBTQVYgY29kZXMgYW5kIHN1cnBsdXMgc3BhY2UKLSAgIGFmdGVyIHRoZSBmaWVsZC4KLSAgIFJldHVybnMgbmV3IGNvbXByZXNzZWQgc2l6ZS4gKi8KLXN0YXRpYyB1MzIgY29tcHJlc3NfcmF3X2J1ZihzdHJ1Y3QgY3gxOCAqY3gsIHU4ICpidWYsIHUzMiBzaXplKQorICAgYWZ0ZXIgdGhlIGZyYW1lLiAgUmV0dXJucyBuZXcgY29tcHJlc3NlZCBzaXplLiAqLworc3RhdGljIHUzMiBjb21wcmVzc19yYXdfYnVmKHN0cnVjdCBjeDE4ICpjeCwgdTggKmJ1ZiwgdTMyIHNpemUsIHUzMiBoZHJfc2l6ZSkKIHsKLQl1MzIgbGluZV9zaXplID0gY3gtPnZiaS5yYXdfZGVjb2Rlcl9saW5lX3NpemU7Ci0JdTMyIGxpbmVzID0gY3gtPnZiaS5jb3VudDsKLQl1OCBzYXYxID0gY3gtPnZiaS5yYXdfZGVjb2Rlcl9zYXZfb2RkX2ZpZWxkOwotCXU4IHNhdjIgPSBjeC0+dmJpLnJhd19kZWNvZGVyX3Nhdl9ldmVuX2ZpZWxkOworCXUzMiBsaW5lX3NpemUgPSB2YmlfYWN0aXZlX3NhbXBsZXM7CisJdTMyIGxpbmVzID0gY3gtPnZiaS5jb3VudCAqIDI7CiAJdTggKnEgPSBidWY7CiAJdTggKnA7CiAJaW50IGk7CiAKKwkvKiBTa2lwIHRoZSBoZWFkZXIgKi8KKwlidWYgKz0gaGRyX3NpemU7CisKIAlmb3IgKGkgPSAwOyBpIDwgbGluZXM7IGkrKykgewogCQlwID0gYnVmICsgaSAqIGxpbmVfc2l6ZTsKIAogCQkvKiBMb29rIGZvciBTQVYgY29kZSAqLwogCQlpZiAocFswXSAhPSAweGZmIHx8IHBbMV0gfHwgcFsyXSB8fAotCQkgICAgKHBbM10gIT0gc2F2MSAmJiBwWzNdICE9IHNhdjIpKQorCQkgICAgKHBbM10gIT0gcmF3X3ZiaV9zYXZfcnBbMF0gJiYKKwkJICAgICBwWzNdICE9IHJhd192Ymlfc2F2X3JwWzFdKSkKIAkJCWJyZWFrOwotCQltZW1jcHkocSwgcCArIDQsIGxpbmVfc2l6ZSAtIDQpOwotCQlxICs9IGxpbmVfc2l6ZSAtIDQ7CisJCWlmIChpID09IGxpbmVzIC0gMSkgeworCQkJLyogbGFzdCBsaW5lIGlzIGhkcl9zaXplIGJ5dGVzIHNob3J0IC0gZXh0cmFwb2xhdGUgaXQgKi8KKwkJCW1lbWNweShxLCBwICsgNCwgbGluZV9zaXplIC0gNCAtIGhkcl9zaXplKTsKKwkJCXEgKz0gbGluZV9zaXplIC0gNCAtIGhkcl9zaXplOworCQkJcCArPSBsaW5lX3NpemUgLSBoZHJfc2l6ZSAtIDE7CisJCQltZW1zZXQocSwgKGludCkgKnAsIGhkcl9zaXplKTsKKwkJfSBlbHNlIHsKKwkJCW1lbWNweShxLCBwICsgNCwgbGluZV9zaXplIC0gNCk7CisJCQlxICs9IGxpbmVfc2l6ZSAtIDQ7CisJCX0KIAl9CiAJcmV0dXJuIGxpbmVzICogKGxpbmVfc2l6ZSAtIDQpOwogfQogCi0KLS8qIENvbXByZXNzZWQgVkJJIGZvcm1hdCwgYWxsIGZvdW5kIHNsaWNlZCBibG9ja3MgcHV0IG5leHQgdG8gb25lIGFub3RoZXIKLSAgIFJldHVybnMgbmV3IGNvbXByZXNzZWQgc2l6ZSAqLwotc3RhdGljIHUzMiBjb21wcmVzc19zbGljZWRfYnVmKHN0cnVjdCBjeDE4ICpjeCwgdTMyIGxpbmUsIHU4ICpidWYsCi0JCQkgICAgICAgdTMyIHNpemUsIHU4IHNhdikKK3N0YXRpYyB1MzIgY29tcHJlc3Nfc2xpY2VkX2J1ZihzdHJ1Y3QgY3gxOCAqY3gsIHU4ICpidWYsIHUzMiBzaXplLAorCQkJICAgICAgIGNvbnN0IHUzMiBoZHJfc2l6ZSkKIHsKLQl1MzIgbGluZV9zaXplID0gY3gtPnZiaS5zbGljZWRfZGVjb2Rlcl9saW5lX3NpemU7CiAJc3RydWN0IHY0bDJfZGVjb2RlX3ZiaV9saW5lIHZiaTsKIAlpbnQgaTsKKwl1MzIgbGluZSA9IDA7CisJdTMyIGxpbmVfc2l6ZSA9IGN4LT5pc182MGh6ID8gdmJpX2hibGFua19zYW1wbGVzXzYwSHoKKwkJCQkgICAgOiB2YmlfaGJsYW5rX3NhbXBsZXNfNTBIejsKIAogCS8qIGZpbmQgdGhlIGZpcnN0IHZhbGlkIGxpbmUgKi8KLQlmb3IgKGkgPSAwOyBpIDwgc2l6ZTsgaSsrLCBidWYrKykgewotCQlpZiAoYnVmWzBdID09IDB4ZmYgJiYgIWJ1ZlsxXSAmJiAhYnVmWzJdICYmIGJ1ZlszXSA9PSBzYXYpCisJZm9yIChpID0gaGRyX3NpemUsIGJ1ZiArPSBoZHJfc2l6ZTsgaSA8IHNpemU7IGkrKywgYnVmKyspIHsKKwkJaWYgKGJ1ZlswXSA9PSAweGZmICYmICFidWZbMV0gJiYgIWJ1ZlsyXSAmJgorCQkgICAgKGJ1ZlszXSA9PSBzbGljZWRfdmJpX2Vhdl9ycFswXSB8fAorCQkgICAgIGJ1ZlszXSA9PSBzbGljZWRfdmJpX2Vhdl9ycFsxXSkpCiAJCQlicmVhazsKIAl9CiAKLQlzaXplIC09IGk7CisJLyoKKwkgKiBUaGUgbGFzdCBsaW5lIGlzIHNob3J0IGJ5IGhkcl9zaXplIGJ5dGVzLCBidXQgZm9yIHRoZSByZW1haW5pbmcKKwkgKiBjaGVja3MgYWdhaW5zdCBzaXplLCB3ZSBwcmV0ZW5kIHRoYXQgaXQgaXMgbm90LCBieSBjb3VudGluZyB0aGUKKwkgKiBoZWFkZXIgYnl0ZXMgd2Uga25vd2luZ2x5IHNraXBwZWQKKwkgKi8KKwlzaXplIC09IChpIC0gaGRyX3NpemUpOwogCWlmIChzaXplIDwgbGluZV9zaXplKQogCQlyZXR1cm4gbGluZTsKKwogCWZvciAoaSA9IDA7IGkgPCBzaXplIC8gbGluZV9zaXplOyBpKyspIHsKIAkJdTggKnAgPSBidWYgKyBpICogbGluZV9zaXplOwogCi0JCS8qIExvb2sgZm9yIFNBViBjb2RlICAqLwotCQlpZiAocFswXSAhPSAweGZmIHx8IHBbMV0gfHwgcFsyXSB8fCBwWzNdICE9IHNhdikKKwkJLyogTG9vayBmb3IgRUFWIGNvZGUgICovCisJCWlmIChwWzBdICE9IDB4ZmYgfHwgcFsxXSB8fCBwWzJdIHx8CisJCSAgICAocFszXSAhPSBzbGljZWRfdmJpX2Vhdl9ycFswXSAmJgorCQkgICAgIHBbM10gIT0gc2xpY2VkX3ZiaV9lYXZfcnBbMV0pKQogCQkJY29udGludWU7CiAJCXZiaS5wID0gcCArIDQ7Ci0JCWN4MThfYXZfY21kKGN4LCBWSURJT0NfSU5UX0RFQ09ERV9WQklfTElORSwgJnZiaSk7CisJCXY0bDJfc3ViZGV2X2NhbGwoY3gtPnNkX2F2LCB2aWRlbywgZGVjb2RlX3ZiaV9saW5lLCAmdmJpKTsKIAkJaWYgKHZiaS50eXBlKSB7CiAJCQljeC0+dmJpLnNsaWNlZF9kYXRhW2xpbmVdLmlkID0gdmJpLnR5cGU7CiAJCQljeC0+dmJpLnNsaWNlZF9kYXRhW2xpbmVdLmZpZWxkID0gdmJpLmlzX3NlY29uZF9maWVsZDsKQEAgLTE1MCw1MSArMTg2LDU2IEBACiB9CiAKIHZvaWQgY3gxOF9wcm9jZXNzX3ZiaV9kYXRhKHN0cnVjdCBjeDE4ICpjeCwgc3RydWN0IGN4MThfYnVmZmVyICpidWYsCi0JCQkgICB1NjQgcHRzX3N0YW1wLCBpbnQgc3RyZWFtdHlwZSkKKwkJCSAgIGludCBzdHJlYW10eXBlKQogeworCS8qCisJICogVGhlIENYMjM0MTggcHJvdmlkZXMgYSAxMiBieXRlIGhlYWRlciBpbiBpdHMgcmF3IFZCSSBidWZmZXJzIHRvIHVzOgorCSAqIDB4M2ZmZmZmZmYgWzQgYnl0ZXMgb2Ygc29tZXRoaW5nXSBbNCBieXRlIHByZXNlbnRhdGlvbiB0aW1lIHN0YW1wXQorCSAqLworCXN0cnVjdCB2YmlfZGF0YV9oZHIgeworCQlfX2JlMzIgbWFnaWM7CisJCV9fYmUzMiB1bmtub3duOworCQlfX2JlMzIgcHRzOworCX0gKmhkciA9IChzdHJ1Y3QgdmJpX2RhdGFfaGRyICopIGJ1Zi0+YnVmOworCiAJdTggKnAgPSAodTggKikgYnVmLT5idWY7CiAJdTMyIHNpemUgPSBidWYtPmJ5dGVzdXNlZDsKKwl1MzIgcHRzOwogCWludCBsaW5lczsKIAogCWlmIChzdHJlYW10eXBlICE9IENYMThfRU5DX1NUUkVBTV9UWVBFX1ZCSSkKIAkJcmV0dXJuOwogCisJLyoKKwkgKiBUaGUgQ1gyMzQxOCBzZW5kcyB1cyBkYXRhIHRoYXQgaXMgMzIgYml0IGxpdHRsZS1lbmRpYW4gc3dhcHBlZCwKKwkgKiBidXQgd2Ugd2FudCB0aGUgcmF3IFZCSSBieXRlcyBpbiB0aGUgb3JkZXIgdGhleSB3ZXJlIGluIHRoZSByYXN0ZXIKKwkgKiBsaW5lLiAgVGhpcyBoYXMgYSBzaWRlIGVmZmVjdCBvZiBtYWtpbmcgdGhlIGhlYWRlciBiaWcgZW5kaWFuCisJICovCisJY3gxOF9idWZfc3dhcChidWYpOworCiAJLyogUmF3IFZCSSBkYXRhICovCiAJaWYgKGN4MThfcmF3X3ZiaShjeCkpIHsKLQkJdTggdHlwZTsKIAotCQljeDE4X2J1Zl9zd2FwKGJ1Zik7CisJCXNpemUgPSBidWYtPmJ5dGVzdXNlZCA9CisJCSAgICAgY29tcHJlc3NfcmF3X2J1ZihjeCwgcCwgc2l6ZSwgc2l6ZW9mKHN0cnVjdCB2YmlfZGF0YV9oZHIpKTsKIAotCQkvKiBTa2lwIDEyIGJ5dGVzIG9mIGhlYWRlciB0aGF0IGdldHMgc3R1ZmZlZCBpbiAqLwotCQlzaXplIC09IDEyOwotCQltZW1jcHkocCwgJmJ1Zi0+YnVmWzEyXSwgc2l6ZSk7Ci0JCXR5cGUgPSBwWzNdOwotCi0JCXNpemUgPSBidWYtPmJ5dGVzdXNlZCA9IGNvbXByZXNzX3Jhd19idWYoY3gsIHAsIHNpemUpOwotCi0JCS8qIHNlY29uZCBmaWVsZCBvZiB0aGUgZnJhbWU/ICovCi0JCWlmICh0eXBlID09IGN4LT52YmkucmF3X2RlY29kZXJfc2F2X2V2ZW5fZmllbGQpIHsKLQkJCS8qIERpcnR5IGhhY2sgbmVlZGVkIGZvciBiYWNrd2FyZHMKLQkJCSAgIGNvbXBhdGliaWxpdHkgb2Ygb2xkIFZCSSBzb2Z0d2FyZS4gKi8KLQkJCXAgKz0gc2l6ZSAtIDQ7Ci0JCQltZW1jcHkocCwgJmN4LT52YmkuZnJhbWUsIDQpOwotCQkJY3gtPnZiaS5mcmFtZSsrOwotCQl9CisJCS8qCisJCSAqIEhhY2sgbmVlZGVkIGZvciBjb21wYXRpYmlsaXR5IHdpdGggb2xkIFZCSSBzb2Z0d2FyZS4KKwkJICogV3JpdGUgdGhlIGZyYW1lICMgYXQgdGhlIGxhc3QgNCBieXRlcyBvZiB0aGUgZnJhbWUKKwkJICovCisJCXAgKz0gc2l6ZSAtIDQ7CisJCW1lbWNweShwLCAmY3gtPnZiaS5mcmFtZSwgNCk7CisJCWN4LT52YmkuZnJhbWUrKzsKIAkJcmV0dXJuOwogCX0KIAogCS8qIFNsaWNlZCBWQkkgZGF0YSB3aXRoIGRhdGEgaW5zZXJ0aW9uICovCi0JY3gxOF9idWZfc3dhcChidWYpOwogCi0JLyogZmlyc3QgZmllbGQgKi8KLQlsaW5lcyA9IGNvbXByZXNzX3NsaWNlZF9idWYoY3gsIDAsIHAsIHNpemUgLyAyLAotCQkJY3gtPnZiaS5zbGljZWRfZGVjb2Rlcl9zYXZfb2RkX2ZpZWxkKTsKLQkvKiBzZWNvbmQgZmllbGQgKi8KLQkvKiBleHBlcmltZW50YXRpb24gc2hvd3MgdGhhdCB0aGUgc2Vjb25kIGhhbGYgZG9lcyBub3QgYWx3YXlzCi0JICAgYmVnaW4gYXQgdGhlIGV4YWN0IGFkZHJlc3MuIFNvIHN0YXJ0IGEgYml0IGVhcmxpZXIKLQkgICAoaGVuY2UgMzIpLiAqLwotCWxpbmVzID0gY29tcHJlc3Nfc2xpY2VkX2J1ZihjeCwgbGluZXMsIHAgKyBzaXplIC8gMiAtIDMyLAotCQkJc2l6ZSAvIDIgKyAzMiwgY3gtPnZiaS5zbGljZWRfZGVjb2Rlcl9zYXZfZXZlbl9maWVsZCk7CisJcHRzID0gKGJlMzJfdG9fY3B1KGhkci0+bWFnaWMpID09IDB4M2ZmZmZmZmYpID8gYmUzMl90b19jcHUoaGRyLT5wdHMpCisJCQkJCQkgICAgICA6IDA7CisKKwlsaW5lcyA9IGNvbXByZXNzX3NsaWNlZF9idWYoY3gsIHAsIHNpemUsIHNpemVvZihzdHJ1Y3QgdmJpX2RhdGFfaGRyKSk7CisKIAkvKiBhbHdheXMgcmV0dXJuIGF0IGxlYXN0IG9uZSBlbXB0eSBsaW5lICovCiAJaWYgKGxpbmVzID09IDApIHsKIAkJY3gtPnZiaS5zbGljZWRfZGF0YVswXS5pZCA9IDA7CkBAIC0yMDYsNiArMjQ3LDYgQEAKIAltZW1jcHkocCwgJmN4LT52Ymkuc2xpY2VkX2RhdGFbMF0sIHNpemUpOwogCiAJaWYgKGN4LT52YmkuaW5zZXJ0X21wZWcpCi0JCWNvcHlfdmJpX2RhdGEoY3gsIGxpbmVzLCBwdHNfc3RhbXApOworCQljb3B5X3ZiaV9kYXRhKGN4LCBsaW5lcywgcHRzKTsKIAljeC0+dmJpLmZyYW1lKys7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12YmkuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZiaS5oCmluZGV4IGM1NmZmN2QuLmU3ZTFhZTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZiaS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZiaS5oCkBAIC0yMiw1ICsyMiw1IEBACiAgKi8KIAogdm9pZCBjeDE4X3Byb2Nlc3NfdmJpX2RhdGEoc3RydWN0IGN4MTggKmN4LCBzdHJ1Y3QgY3gxOF9idWZmZXIgKmJ1ZiwKLQkJCSAgIHU2NCBwdHNfc3RhbXAsIGludCBzdHJlYW10eXBlKTsKKwkJCSAgIGludCBzdHJlYW10eXBlKTsKIGludCBjeDE4X3VzZWRfbGluZShzdHJ1Y3QgY3gxOCAqY3gsIGludCBsaW5lLCBpbnQgZmllbGQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmVyc2lvbi5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmVyc2lvbi5oCmluZGV4IDg0YzBmZjEuLmJkOWJkNDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZlcnNpb24uaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12ZXJzaW9uLmgKQEAgLTI0LDggKzI0LDggQEAKIAogI2RlZmluZSBDWDE4X0RSSVZFUl9OQU1FICJjeDE4IgogI2RlZmluZSBDWDE4X0RSSVZFUl9WRVJTSU9OX01BSk9SIDEKLSNkZWZpbmUgQ1gxOF9EUklWRVJfVkVSU0lPTl9NSU5PUiAwCi0jZGVmaW5lIENYMThfRFJJVkVSX1ZFUlNJT05fUEFUQ0hMRVZFTCA0CisjZGVmaW5lIENYMThfRFJJVkVSX1ZFUlNJT05fTUlOT1IgMQorI2RlZmluZSBDWDE4X0RSSVZFUl9WRVJTSU9OX1BBVENITEVWRUwgMAogCiAjZGVmaW5lIENYMThfVkVSU0lPTiBfX3N0cmluZ2lmeShDWDE4X0RSSVZFUl9WRVJTSU9OX01BSk9SKSAiLiIgX19zdHJpbmdpZnkoQ1gxOF9EUklWRVJfVkVSU0lPTl9NSU5PUikgIi4iIF9fc3RyaW5naWZ5KENYMThfRFJJVkVSX1ZFUlNJT05fUEFUQ0hMRVZFTCkKICNkZWZpbmUgQ1gxOF9EUklWRVJfVkVSU0lPTiBLRVJORUxfVkVSU0lPTihDWDE4X0RSSVZFUl9WRVJTSU9OX01BSk9SLCBcCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MTgtdmlkZW8uYwppbmRleCAyZTVjNDE5Li42ZmRhZGVkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gxOC12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDE4LXZpZGVvLmMKQEAgLTIxLDcgKzIxLDYgQEAKIAogI2luY2x1ZGUgImN4MTgtZHJpdmVyLmgiCiAjaW5jbHVkZSAiY3gxOC12aWRlby5oIgotI2luY2x1ZGUgImN4MTgtYXYtY29yZS5oIgogI2luY2x1ZGUgImN4MTgtY2FyZHMuaCIKIAogdm9pZCBjeDE4X3ZpZGVvX3NldF9pbyhzdHJ1Y3QgY3gxOCAqY3gpCkBAIC0zMiw3ICszMSw3IEBACiAKIAlyb3V0ZS5pbnB1dCA9IGN4LT5jYXJkLT52aWRlb19pbnB1dHNbaW5wXS52aWRlb19pbnB1dDsKIAlyb3V0ZS5vdXRwdXQgPSAwOwotCWN4MThfYXZfY21kKGN4LCBWSURJT0NfSU5UX1NfVklERU9fUk9VVElORywgJnJvdXRlKTsKKwl2NGwyX3N1YmRldl9jYWxsKGN4LT5zZF9hdiwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAogCXR5cGUgPSBjeC0+Y2FyZC0+dmlkZW9faW5wdXRzW2lucF0udmlkZW9fdHlwZTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MjM0MTguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gxOC9jeDIzNDE4LmgKaW5kZXggNjAxZjNhMi4uOTk1NmFiZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDE4L2N4MjM0MTguaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MTgvY3gyMzQxOC5oCkBAIC01Niw2ICs1NiwyMiBAQAogI2RlZmluZSBBUFVfQ01EX01BU0sgCQkJCTB4MTAwMDAwMDAKICNkZWZpbmUgQVBVX0NNRF9NQVNLX0FDSyAJCQkoQVBVX0NNRF9NQVNLIHwgMHg4MDAwMDAwMCkKIAorI2RlZmluZSBDWDE4X0FQVV9FTkNPRElOR19NRVRIT0RfTVBFRwkJKDAgPDwgMjgpCisjZGVmaW5lIENYMThfQVBVX0VOQ09ESU5HX01FVEhPRF9BQzMJCSgxIDw8IDI4KQorCisvKiBEZXNjcmlwdGlvbjogQ29tbWFuZCBBUFUgdG8gc3RhcnQgYXVkaW8KKyAgIElOWzBdIC0gYXVkaW8gcGFyYW1ldGVycyAoc2FtZSBhcyBDWDE4X0NQVV9TRVRfQVVESU9fUEFSQU1FVEVSUz8pCisgICBJTlsxXSAtIGNhbGxlciBidWZmZXIgYWRkcmVzcywgb3IgMAorICAgUmV0dXJuQ29kZSAtID8/PyAqLworI2RlZmluZSBDWDE4X0FQVV9TVEFSVAkJCQkoQVBVX0NNRF9NQVNLIHwgMHgwMSkKKworLyogRGVzY3JpcHRpb246IENvbW1hbmQgQVBVIHRvIHN0b3AgYXVkaW8KKyAgIElOWzBdIC0gZW5jb2RpbmcgbWV0aG9kIHRvIHN0b3AKKyAgIFJldHVybkNvZGUgLSA/Pz8gKi8KKyNkZWZpbmUgQ1gxOF9BUFVfU1RPUAkJCQkoQVBVX0NNRF9NQVNLIHwgMHgwMikKKworLyogRGVzY3JpcHRpb246IENvbW1hbmQgQVBVIHRvIHJlc2V0IHRoZSBBSQorICAgUmV0dXJuQ29kZSAtID8/PyAqLwogI2RlZmluZSBDWDE4X0FQVV9SRVNFVEFJIAkJCShBUFVfQ01EX01BU0sgfCAweDA1KQogCiAvKiBEZXNjcmlwdGlvbjogVGhpcyBjb21tYW5kIGluZGljYXRlcyB0aGF0IGEgTWVtb3J5IERlc2NyaXB0b3IgTGlzdCBoYXMgYmVlbgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzNDF4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM0MXguYwppbmRleCBjYmJlNDdmLi44ZGVkNTI5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM0MXguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM0MXguYwpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBjeDIzNDF4IC0gZ2VuZXJpYyBjb2RlIGZvciBjeDIzNDE1LzYgYmFzZWQgZGV2aWNlcworICogY3gyMzQxeCAtIGdlbmVyaWMgY29kZSBmb3IgY3gyMzQxNS82LzggYmFzZWQgZGV2aWNlcwogICoKICAqIENvcHlyaWdodCAoQykgMjAwNiBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KICAqCkBAIC0zMCw3ICszMCw3IEBACiAjaW5jbHVkZSA8bWVkaWEvY3gyMzQxeC5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAKLU1PRFVMRV9ERVNDUklQVElPTigiY3gyMzQxNS82IGRyaXZlciIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJjeDIzNDE1LzYvOCBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIkhhbnMgVmVya3VpbCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCkBAIC0zOCw2ICszOCw3IEBACiBtb2R1bGVfcGFyYW0oZGVidWcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiRGVidWcgbGV2ZWwgKDAtMSkiKTsKIAorLyogTXVzdCBiZSBzb3J0ZWQgZnJvbSBsb3cgdG8gaGlnaCBjb250cm9sIElEISAqLwogY29uc3QgdTMyIGN4MjM0MXhfbXBlZ19jdHJsc1tdID0gewogCVY0TDJfQ0lEX01QRUdfQ0xBU1MsCiAJVjRMMl9DSURfTVBFR19TVFJFQU1fVFlQRSwKQEAgLTUwLDYgKzUxLDcgQEAKIAlWNEwyX0NJRF9NUEVHX0FVRElPX0VNUEhBU0lTLAogCVY0TDJfQ0lEX01QRUdfQVVESU9fQ1JDLAogCVY0TDJfQ0lEX01QRUdfQVVESU9fTVVURSwKKwlWNEwyX0NJRF9NUEVHX0FVRElPX0FDM19CSVRSQVRFLAogCVY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkcsCiAJVjRMMl9DSURfTVBFR19WSURFT19BU1BFQ1QsCiAJVjRMMl9DSURfTVBFR19WSURFT19CX0ZSQU1FUywKQEAgLTk0LDYgKzk2LDcgQEAKIAkuYXVkaW9fc2FtcGxpbmdfZnJlcSA9IFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ4MDAwLAogCS5hdWRpb19lbmNvZGluZyA9IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yLAogCS5hdWRpb19sMl9iaXRyYXRlID0gVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMjI0SywKKwkuYXVkaW9fYWMzX2JpdHJhdGUgPSBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMjI0SywKIAkuYXVkaW9fbW9kZSA9IFY0TDJfTVBFR19BVURJT19NT0RFX1NURVJFTywKIAkuYXVkaW9fbW9kZV9leHRlbnNpb24gPSBWNEwyX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT05fQk9VTkRfNCwKIAkuYXVkaW9fZW1waGFzaXMgPSBWNEwyX01QRUdfQVVESU9fRU1QSEFTSVNfTk9ORSwKQEAgLTE0OCw2ICsxNTEsOSBAQAogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMl9CSVRSQVRFOgogCQljdHJsLT52YWx1ZSA9IHBhcmFtcy0+YXVkaW9fbDJfYml0cmF0ZTsKIAkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0FDM19CSVRSQVRFOgorCQljdHJsLT52YWx1ZSA9IHBhcmFtcy0+YXVkaW9fYWMzX2JpdHJhdGU7CisJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19NT0RFOgogCQljdHJsLT52YWx1ZSA9IHBhcmFtcy0+YXVkaW9fbW9kZTsKIAkJYnJlYWs7CkBAIC0yNTYsNiArMjYyLDEyIEBACiAJCXBhcmFtcy0+YXVkaW9fc2FtcGxpbmdfZnJlcSA9IGN0cmwtPnZhbHVlOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkc6CisJCWlmIChidXN5KQorCQkJcmV0dXJuIC1FQlVTWTsKKwkJaWYgKHBhcmFtcy0+Y2FwYWJpbGl0aWVzICYgQ1gyMzQxWF9DQVBfSEFTX0FDMykKKwkJCWlmIChjdHJsLT52YWx1ZSAhPSBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMiAmJgorCQkJICAgIGN0cmwtPnZhbHVlICE9IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQzMpCisJCQkJcmV0dXJuIC1FUkFOR0U7CiAJCXBhcmFtcy0+YXVkaW9fZW5jb2RpbmcgPSBjdHJsLT52YWx1ZTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wyX0JJVFJBVEU6CkBAIC0yNjMsNiArMjc1LDEzIEBACiAJCQlyZXR1cm4gLUVCVVNZOwogCQlwYXJhbXMtPmF1ZGlvX2wyX2JpdHJhdGUgPSBjdHJsLT52YWx1ZTsKIAkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0FDM19CSVRSQVRFOgorCQlpZiAoYnVzeSkKKwkJCXJldHVybiAtRUJVU1k7CisJCWlmICghKHBhcmFtcy0+Y2FwYWJpbGl0aWVzICYgQ1gyMzQxWF9DQVBfSEFTX0FDMykpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJcGFyYW1zLT5hdWRpb19hYzNfYml0cmF0ZSA9IGN0cmwtPnZhbHVlOworCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERToKIAkJcGFyYW1zLT5hdWRpb19tb2RlID0gY3RybC0+dmFsdWU7CiAJCWJyZWFrOwpAQCAtNDgxLDI5ICs1MDAsMTA2IEBACiAJaW50IGVycjsKIAogCXN3aXRjaCAocWN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCisJCQkJVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1BTLAorCQkJCVY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9TVkNELCAxLAorCQkJCVY0TDJfTVBFR19TVFJFQU1fVFlQRV9NUEVHMl9QUyk7CisKKwljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1ZCSV9GTVQ6CisJCWlmIChwYXJhbXMtPmNhcGFiaWxpdGllcyAmIENYMjM0MVhfQ0FQX0hBU19TTElDRURfVkJJKQorCQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAorCQkJCQlWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfTk9ORSwKKwkJCQkJVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX0lWVFYsIDEsCisJCQkJCVY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9OT05FKTsKKwkJcmV0dXJuIGN4MjM0MXhfY3RybF9xdWVyeV9maWxsKHFjdHJsLAorCQkJCVY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9OT05FLAorCQkJCVY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9OT05FLCAxLAorCQkJCWRlZmF1bHRfcGFyYW1zLnN0cmVhbV92YmlfZm10KTsKKworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19TQU1QTElOR19GUkVROgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCisJCQkJVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDQxMDAsCisJCQkJVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfMzIwMDAsIDEsCisJCQkJVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDgwMDApOworCiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HOgorCQlpZiAocGFyYW1zLT5jYXBhYmlsaXRpZXMgJiBDWDIzNDFYX0NBUF9IQVNfQUMzKSB7CisJCQkvKgorCQkJICogVGhlIHN0YXRlIG9mIEwyICYgQUMzIGJpdHJhdGUgY29udHJvbHMgY2FuIGNoYW5nZQorCQkJICogd2hlbiB0aGlzIGNvbnRyb2wgY2hhbmdlcywgYnV0IHY0bDJfY3RybF9xdWVyeV9maWxsKCkKKwkJCSAqIGFscmVhZHkgc2V0cyBWNEwyX0NUUkxfRkxBR19VUERBVEUgZm9yCisJCQkgKiBWNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HLCBzbyB3ZSBkb24ndCBoZXJlLgorCQkJICovCisJCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCisJCQkJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yLAorCQkJCQlWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzLCAxLAorCQkJCQlkZWZhdWx0X3BhcmFtcy5hdWRpb19lbmNvZGluZyk7CisJCX0KKwogCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCiAJCQkJVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIsCiAJCQkJVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIsIDEsCiAJCQkJZGVmYXVsdF9wYXJhbXMuYXVkaW9fZW5jb2RpbmcpOwogCiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wyX0JJVFJBVEU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKKwkJZXJyID0gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCiAJCQkJVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMTkySywKIAkJCQlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zODRLLCAxLAogCQkJCWRlZmF1bHRfcGFyYW1zLmF1ZGlvX2wyX2JpdHJhdGUpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJaWYgKHBhcmFtcy0+Y2FwYWJpbGl0aWVzICYgQ1gyMzQxWF9DQVBfSEFTX0FDMyAmJgorCQkgICAgcGFyYW1zLT5hdWRpb19lbmNvZGluZyAhPSBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMikKKwkJCXFjdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19JTkFDVElWRTsKKwkJcmV0dXJuIDA7CiAKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDFfQklUUkFURToKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDNfQklUUkFURToKLQkJcmV0dXJuIC1FSU5WQUw7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKKwkJCQlWNEwyX01QRUdfQVVESU9fTU9ERV9TVEVSRU8sCisJCQkJVjRMMl9NUEVHX0FVRElPX01PREVfTU9OTywgMSwKKwkJCQlWNEwyX01QRUdfQVVESU9fTU9ERV9TVEVSRU8pOwogCiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OOgotCQllcnIgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWN0cmwpOworCQllcnIgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKKwkJCQlWNEwyX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT05fQk9VTkRfNCwKKwkJCQlWNEwyX01QRUdfQVVESU9fTU9ERV9FWFRFTlNJT05fQk9VTkRfMTYsIDEsCisJCQkJVjRMMl9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OX0JPVU5EXzQpOwogCQlpZiAoZXJyID09IDAgJiYKIAkJICAgIHBhcmFtcy0+YXVkaW9fbW9kZSAhPSBWNEwyX01QRUdfQVVESU9fTU9ERV9KT0lOVF9TVEVSRU8pCiAJCQlxY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfSU5BQ1RJVkU7CiAJCXJldHVybiBlcnI7CiAKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU1QSEFTSVM6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKKwkJCQlWNEwyX01QRUdfQVVESU9fRU1QSEFTSVNfTk9ORSwKKwkJCQlWNEwyX01QRUdfQVVESU9fRU1QSEFTSVNfQ0NJVFRfSjE3LCAxLAorCQkJCVY0TDJfTVBFR19BVURJT19FTVBIQVNJU19OT05FKTsKKworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19DUkM6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKKwkJCQlWNEwyX01QRUdfQVVESU9fQ1JDX05PTkUsCisJCQkJVjRMMl9NUEVHX0FVRElPX0NSQ19DUkMxNiwgMSwKKwkJCQlWNEwyX01QRUdfQVVESU9fQ1JDX05PTkUpOworCisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX01VVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMSwgMSwgMCk7CisKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEU6CisJCWVyciA9IHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAorCQkJCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV80OEssCisJCQkJVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzQ0OEssIDEsCisJCQkJZGVmYXVsdF9wYXJhbXMuYXVkaW9fYWMzX2JpdHJhdGUpOworCQlpZiAoZXJyKQorCQkJcmV0dXJuIGVycjsKKwkJaWYgKHBhcmFtcy0+Y2FwYWJpbGl0aWVzICYgQ1gyMzQxWF9DQVBfSEFTX0FDMykgeworCQkJaWYgKHBhcmFtcy0+YXVkaW9fZW5jb2RpbmcgIT0KKwkJCQkJCSAgIFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQzMpCisJCQkJcWN0cmwtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX0lOQUNUSVZFOworCQl9IGVsc2UKKwkJCXFjdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19ESVNBQkxFRDsKKwkJcmV0dXJuIDA7CisKIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkc6CiAJCS8qIHRoaXMgc2V0dGluZyBpcyByZWFkLW9ubHkgZm9yIHRoZSBjeDIzNDF4IHNpbmNlIHRoZQogCQkgICBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFIHJlYWxseSBkZXRlcm1pbmVzIHRoZQpAQCAtNTE2LDMyICs2MTIsNTEgQEAKIAkJCXFjdHJsLT5mbGFncyB8PSBWNEwyX0NUUkxfRkxBR19SRUFEX09OTFk7CiAJCXJldHVybiBlcnI7CiAKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQVNQRUNUOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCisJCQkJVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF8xeDEsCisJCQkJVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF8yMjF4MTAwLCAxLAorCQkJCVY0TDJfTVBFR19WSURFT19BU1BFQ1RfNHgzKTsKKworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CX0ZSQU1FUzoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAzMywgMSwgMik7CisKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fR09QX1NJWkU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMSwgMzQsIDEsCisJCQkJcGFyYW1zLT5pc181MGh6ID8gMTIgOiAxNSk7CisKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fR09QX0NMT1NVUkU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMSwgMSwgMSk7CisKIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFOgotCQllcnIgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWN0cmwpOworCQllcnIgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKKwkJCQlWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX1ZCUiwKKwkJCQlWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX0NCUiwgMSwKKwkJCQlWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX1ZCUik7CiAJCWlmIChlcnIgPT0gMCAmJgogCQkgICAgcGFyYW1zLT52aWRlb19lbmNvZGluZyA9PSBWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18xKQogCQkJcWN0cmwtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX0lOQUNUSVZFOwogCQlyZXR1cm4gZXJyOwogCisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMjcwMDAwMDAsIDEsIDYwMDAwMDApOworCiAJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfUEVBSzoKLQkJZXJyID0gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjdHJsKTsKKwkJZXJyID0gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDI3MDAwMDAwLCAxLCA4MDAwMDAwKTsKIAkJaWYgKGVyciA9PSAwICYmCiAJCSAgICBwYXJhbXMtPnZpZGVvX2JpdHJhdGVfbW9kZSA9PQogCQkJCVY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfQ0JSKQogCQkJcWN0cmwtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX0lOQUNUSVZFOwogCQlyZXR1cm4gZXJyOwogCi0JY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9WQklfRk1UOgotCQlpZiAocGFyYW1zLT5jYXBhYmlsaXRpZXMgJiBDWDIzNDFYX0NBUF9IQVNfU0xJQ0VEX1ZCSSkKLQkJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWN0cmwpOwotCQlyZXR1cm4gY3gyMzQxeF9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCi0JCQkJVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX05PTkUsCi0JCQkJVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX05PTkUsIDEsCi0JCQkJZGVmYXVsdF9wYXJhbXMuc3RyZWFtX3ZiaV9mbXQpOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19URU1QT1JBTF9ERUNJTUFUSU9OOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDI1NSwgMSwgMCk7CiAKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fR09QX1NJWkU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMSwgMzQsIDEsCi0JCQkJcGFyYW1zLT5pc181MGh6ID8gMTIgOiAxNSk7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX01VVEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMSwgMSwgMCk7CisKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fTVVURV9ZVVY6ICAvKiBJbml0IFlVViAocmVhbGx5IFlDYkNyKSB0byBibGFjayAqLworCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDB4ZmZmZmZmLCAxLCAweDAwODA4MCk7CiAKIAkvKiBDWDIzNDE1LzYgc3BlY2lmaWMgKi8KIAljYXNlIFY0TDJfQ0lEX01QRUdfQ1gyMzQxWF9WSURFT19TUEFUSUFMX0ZJTFRFUl9NT0RFOgpAQCAtNjQzLDcgKzc1OCw3IEBACiAJCQkJZGVmYXVsdF9wYXJhbXMuc3RyZWFtX2luc2VydF9uYXZfcGFja2V0cyk7CiAKIAlkZWZhdWx0OgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjdHJsKTsKKwkJcmV0dXJuIC1FSU5WQUw7CiAKIAl9CiB9CkBAIC02NzEsNiArNzg2LDE1IEBACiAJCU5VTEwKIAl9OwogCisJc3RhdGljIGNvbnN0IGNoYXIgKm1wZWdfYXVkaW9fZW5jb2RpbmdfbDJfYWMzW10gPSB7CisJCSIiLAorCQkiTVBFRy0xLzIgTGF5ZXIgSUkiLAorCQkiIiwKKwkJIiIsCisJCSJBQy0zIiwKKwkJTlVMTAorCX07CisKIAlzdGF0aWMgY29uc3QgY2hhciAqY3gyMzQxeF92aWRlb19zcGF0aWFsX2ZpbHRlcl9tb2RlX21lbnVbXSA9IHsKIAkJIk1hbnVhbCIsCiAJCSJBdXRvIiwKQEAgLTcxMSw2ICs4MzUsOSBAQAogCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fVFlQRToKIAkJcmV0dXJuIChwLT5jYXBhYmlsaXRpZXMgJiBDWDIzNDFYX0NBUF9IQVNfVFMpID8KIAkJCW1wZWdfc3RyZWFtX3R5cGVfd2l0aF90cyA6IG1wZWdfc3RyZWFtX3R5cGVfd2l0aG91dF90czsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkc6CisJCXJldHVybiAocC0+Y2FwYWJpbGl0aWVzICYgQ1gyMzQxWF9DQVBfSEFTX0FDMykgPworCQkJbXBlZ19hdWRpb19lbmNvZGluZ19sMl9hYzMgOiB2NGwyX2N0cmxfZ2V0X21lbnUoaWQpOwogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMV9CSVRSQVRFOgogCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MM19CSVRSQVRFOgogCQlyZXR1cm4gTlVMTDsKQEAgLTczMCwxNiArODU3LDM0IEBACiB9CiBFWFBPUlRfU1lNQk9MKGN4MjM0MXhfY3RybF9nZXRfbWVudSk7CiAKKy8qIGRlZmluaXRpb25zIGZvciBhdWRpbyBwcm9wZXJ0aWVzIGJpdHMgMjktMjggKi8KKyNkZWZpbmUgQ1gyMzQxWF9BVURJT19FTkNPRElOR19NRVRIT0RfTVBFRwkwCisjZGVmaW5lIENYMjM0MVhfQVVESU9fRU5DT0RJTkdfTUVUSE9EX0FDMwkxCisjZGVmaW5lIENYMjM0MVhfQVVESU9fRU5DT0RJTkdfTUVUSE9EX0xQQ00JMgorCiBzdGF0aWMgdm9pZCBjeDIzNDF4X2NhbGNfYXVkaW9fcHJvcGVydGllcyhzdHJ1Y3QgY3gyMzQxeF9tcGVnX3BhcmFtcyAqcGFyYW1zKQogewotCXBhcmFtcy0+YXVkaW9fcHJvcGVydGllcyA9IChwYXJhbXMtPmF1ZGlvX3NhbXBsaW5nX2ZyZXEgPDwgMCkgfAotCQkoKDMgLSBwYXJhbXMtPmF1ZGlvX2VuY29kaW5nKSA8PCAyKSB8Ci0JCSgoMSArIHBhcmFtcy0+YXVkaW9fbDJfYml0cmF0ZSkgPDwgNCkgfAorCXBhcmFtcy0+YXVkaW9fcHJvcGVydGllcyA9CisJCShwYXJhbXMtPmF1ZGlvX3NhbXBsaW5nX2ZyZXEgPDwgMCkgfAogCQkocGFyYW1zLT5hdWRpb19tb2RlIDw8IDgpIHwKIAkJKHBhcmFtcy0+YXVkaW9fbW9kZV9leHRlbnNpb24gPDwgMTApIHwKIAkJKCgocGFyYW1zLT5hdWRpb19lbXBoYXNpcyA9PSBWNEwyX01QRUdfQVVESU9fRU1QSEFTSVNfQ0NJVFRfSjE3KQogCQkgID8gMyA6IHBhcmFtcy0+YXVkaW9fZW1waGFzaXMpIDw8IDEyKSB8CiAJCShwYXJhbXMtPmF1ZGlvX2NyYyA8PCAxNCk7CisKKwlpZiAoKHBhcmFtcy0+Y2FwYWJpbGl0aWVzICYgQ1gyMzQxWF9DQVBfSEFTX0FDMykgJiYKKwkgICAgcGFyYW1zLT5hdWRpb19lbmNvZGluZyA9PSBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzKSB7CisJCXBhcmFtcy0+YXVkaW9fcHJvcGVydGllcyB8PQorCQkJLyogTm90IHN1cmUgaWYgdGhpcyBNUEVHIExheWVyIElJIHNldHRpbmcgaXMgcmVxdWlyZWQgKi8KKwkJCSgoMyAtIFY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yKSA8PCAyKSB8CisJCQkocGFyYW1zLT5hdWRpb19hYzNfYml0cmF0ZSA8PCA0KSB8CisJCQkoQ1gyMzQxWF9BVURJT19FTkNPRElOR19NRVRIT0RfQUMzIDw8IDI4KTsKKwl9IGVsc2UgeworCQkvKiBBc3N1bWluZyBNUEVHIExheWVyIElJICovCisJCXBhcmFtcy0+YXVkaW9fcHJvcGVydGllcyB8PQorCQkJKCgzIC0gcGFyYW1zLT5hdWRpb19lbmNvZGluZykgPDwgMikgfAorCQkJKCgxICsgcGFyYW1zLT5hdWRpb19sMl9iaXRyYXRlKSA8PCA0KTsKKwl9CiB9CiAKIGludCBjeDIzNDF4X2V4dF9jdHJscyhzdHJ1Y3QgY3gyMzQxeF9tcGVnX3BhcmFtcyAqcGFyYW1zLCBpbnQgYnVzeSwKQEAgLTEwMjIsNyArMTE2NywxMCBAQAogCQlwcmVmaXgsCiAJCWN4MjM0MXhfbWVudV9pdGVtKHAsIFY0TDJfQ0lEX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUSksCiAJCWN4MjM0MXhfbWVudV9pdGVtKHAsIFY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkcpLAotCQljeDIzNDF4X21lbnVfaXRlbShwLCBWNEwyX0NJRF9NUEVHX0FVRElPX0wyX0JJVFJBVEUpLAorCQljeDIzNDF4X21lbnVfaXRlbShwLAorCQkJICAgcC0+YXVkaW9fZW5jb2RpbmcgPT0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FDMworCQkJCQkgICAgICA/IFY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEUKKwkJCQkJICAgICAgOiBWNEwyX0NJRF9NUEVHX0FVRElPX0wyX0JJVFJBVEUpLAogCQljeDIzNDF4X21lbnVfaXRlbShwLCBWNEwyX0NJRF9NUEVHX0FVRElPX01PREUpLAogCQlwLT5hdWRpb19tdXRlID8gIiAobXV0ZWQpIiA6ICIiKTsKIAlpZiAocC0+YXVkaW9fbW9kZSA9PSBWNEwyX01QRUdfQVVESU9fTU9ERV9KT0lOVF9TVEVSRU8pCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9LY29uZmlnCmluZGV4IDAwZjFlMmUuLmZkM2ZjM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9LY29uZmlnCkBAIC0xNSwxMiArMTUsMTUgQEAKIAlzZWxlY3QgRFZCX1M1SDE0MTEgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX0xHRFQzMzBYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9aTDEwMzUzIGlmICFEVkJfRkVfQ1VTVE9NSVNFCi0Jc2VsZWN0IERWQl9UREExMDA0OCBpZiAhRFZCX0ZFX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9NVDIxMzEgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9YQzIwMjggaWYgIURWQl9GRV9DVVNUT01JWkUKLQlzZWxlY3QgTUVESUFfVFVORVJfVERBODI5MCBpZiAhRFZCX0ZFX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9UREExODI3MSBpZiAhRFZCX0ZFX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9YQzUwMDAgaWYgIURWQl9GRV9DVVNUT01JWkUKKwlzZWxlY3QgRFZCX1REQTEwMDQ4IGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9MTkJQMjEgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1NUVjYxMTAgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1NUVjA5MDAgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfTVQyMTMxIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfWEMyMDI4IGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfVERBODI5MCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1REQTE4MjcxIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfWEM1MDAwIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciBDb25leGFudCAyMzg4NSBiYXNlZAogCSAgVFYgY2FyZHMuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvTWFrZWZpbGUgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvTWFrZWZpbGUKaW5kZXggMjljMjNiNC4uYWI4ZWEzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9NYWtlZmlsZQpAQCAtMSw0ICsxLDYgQEAKLWN4MjM4ODUtb2Jqcwk6PSBjeDIzODg1LWNhcmRzLm8gY3gyMzg4NS12aWRlby5vIGN4MjM4ODUtdmJpLm8gY3gyMzg4NS1jb3JlLm8gY3gyMzg4NS1pMmMubyBjeDIzODg1LWR2Yi5vIGN4MjM4ODUtNDE3Lm8KK2N4MjM4ODUtb2Jqcwk6PSBjeDIzODg1LWNhcmRzLm8gY3gyMzg4NS12aWRlby5vIGN4MjM4ODUtdmJpLm8gXAorCQkgICAgY3gyMzg4NS1jb3JlLm8gY3gyMzg4NS1pMmMubyBjeDIzODg1LWR2Yi5vIGN4MjM4ODUtNDE3Lm8gXAorCQkgICAgbmV0dXAtaW5pdC5vIGNpbWF4Mi5vIG5ldHVwLWVlcHJvbS5vCiAKIG9iai0kKENPTkZJR19WSURFT19DWDIzODg1KSArPSBjeDIzODg1Lm8KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2NpbWF4Mi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2NpbWF4Mi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhNjUzNjkKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY2ltYXgyLmMKQEAgLTAsMCArMSw0NzIgQEAKKy8qCisgKiBjaW1heDIuYworICoKKyAqIENJTWF4MihSKSBTUDIgZHJpdmVyIGluIGNvbmp1bmN0aW9uIHdpdGggTmV0VXAgRHVhbCBEVkItUzIgQ0kgY2FyZAorICoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBOZXRVUCBJbmMuCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgSWdvciBNLiBMaXBsaWFuaW4gPGxpcGxpYW5pbkBuZXR1cC5ydT4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBBYnlsYXkgT3NwYW4gPGFvc3BhbkBuZXR1cC5ydT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2luY2x1ZGUgImN4MjM4ODUuaCIKKyNpbmNsdWRlICJkdmJfY2FfZW41MDIyMS5oIgorLyoqKiogQml0IGRlZmluaXRpb25zIGZvciBNQzQxN19SV0QgYW5kIE1DNDE3X09FTiByZWdpc3RlcnMgICoqKgorICBiaXRzIDMxLTE2CisrLS0tLS0tLS0tLS0rCit8IFJlc2VydmVkICB8CisrLS0tLS0tLS0tLS0rCisgIGJpdCAxNSAgYml0IDE0ICBiaXQgMTMgYml0IDEyICBiaXQgMTEgIGJpdCAxMCAgYml0IDkgICBiaXQgOAorKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSsKK3wgIFdSIyAgfCAgUkQjICB8ICAgICAgIHwgIEFDSyMgfCAgQURISSB8ICBBRExPIHwgIENTMSMgfCAgQ1MwIyB8CisrLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKworIGJpdCA3ICAgYml0IDYgICBiaXQgNSAgIGJpdCA0ICAgYml0IDMgICBiaXQgMiAgIGJpdCAxICAgYml0IDAKKystLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rCit8ICBEQVRBN3wgIERBVEE2fCAgREFUQTV8ICBEQVRBNHwgIERBVEEzfCAgREFUQTJ8ICBEQVRBMXwgIERBVEEwfAorKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSstLS0tLS0tKy0tLS0tLS0rLS0tLS0tLSsKKyoqKi8KKy8qIE1DNDE3ICovCisjZGVmaW5lIE5FVFVQX0RBVEEJCTB4MDAwMDAwZmYKKyNkZWZpbmUgTkVUVVBfV1IJCTB4MDAwMDgwMDAKKyNkZWZpbmUgTkVUVVBfUkQJCTB4MDAwMDQwMDAKKyNkZWZpbmUgTkVUVVBfQUNLCQkweDAwMDAxMDAwCisjZGVmaW5lIE5FVFVQX0FESEkJCTB4MDAwMDA4MDAKKyNkZWZpbmUgTkVUVVBfQURMTwkJMHgwMDAwMDQwMAorI2RlZmluZSBORVRVUF9DUzEJCTB4MDAwMDAyMDAKKyNkZWZpbmUgTkVUVVBfQ1MwCQkweDAwMDAwMTAwCisjZGVmaW5lIE5FVFVQX0VOX0FMTAkJMHgwMDAwMTAwMAorI2RlZmluZSBORVRVUF9DVFJMX09GRgkJKE5FVFVQX0NTMSB8IE5FVFVQX0NTMCB8IE5FVFVQX1dSIHwgTkVUVVBfUkQpCisjZGVmaW5lIE5FVFVQX0NJX0NUTAkJMHgwNAorI2RlZmluZSBORVRVUF9DSV9SRAkJMQorCisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgY2lfZGJnOworbW9kdWxlX3BhcmFtKGNpX2RiZywgaW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoY2lfZGJnLCAiRW5hYmxlIENJIGRlYnVnZ2luZyIpOworCisjZGVmaW5lIGNpX2RiZ19wcmludChhcmdzLi4uKSBcCisJZG8geyBcCisJCWlmIChjaV9kYmcpIFwKKwkJCXByaW50ayhLRVJOX0RFQlVHIGFyZ3MpOyBcCisJfSB3aGlsZSAoMCkKKworLyogc3RvcmVzIGFsbCBwcml2YXRlIHZhcmlhYmxlcyBmb3IgY29tbXVuaWNhdGlvbiB3aXRoIENJICovCitzdHJ1Y3QgbmV0dXBfY2lfc3RhdGUgeworCXN0cnVjdCBkdmJfY2FfZW41MDIyMSBjYTsKKwlzdHJ1Y3QgbXV0ZXggY2FfbXV0ZXg7CisJc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcDsKKwl1OCBjaV9pMmNfYWRkcjsKKwlpbnQgc3RhdHVzOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworCXZvaWQgKnByaXY7Cit9OworCitzdHJ1Y3QgbXV0ZXggZ3Bpb19tdXRleDsvKiBUd28gQ2lNYXgncyB1c2VzIHNhbWUgR1BJTyBsaW5lcyAqLworCitpbnQgbmV0dXBfcmVhZF9pMmMoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgdTggYWRkciwgdTggcmVnLAorCQkJCQkJdTggKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnQgcmV0OworCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0geworCQl7CisJCQkuYWRkcgk9IGFkZHIsCisJCQkuZmxhZ3MJPSAwLAorCQkJLmJ1Zgk9ICZyZWcsCisJCQkubGVuCT0gMQorCQl9LCB7CisJCQkuYWRkcgk9IGFkZHIsCisJCQkuZmxhZ3MJPSBJMkNfTV9SRCwKKwkJCS5idWYJPSBidWYsCisJCQkubGVuCT0gbGVuCisJCX0KKwl9OworCisJcmV0ID0gaTJjX3RyYW5zZmVyKGkyY19hZGFwLCBtc2csIDIpOworCisJaWYgKHJldCAhPSAyKSB7CisJCWNpX2RiZ19wcmludCgiJXM6IGkyYyByZWFkIGVycm9yLCBSZWcgPSAweCUwMngsIFN0YXR1cyA9ICVkXG4iLAorCQkJCQkJX19mdW5jX18sIHJlZywgcmV0KTsKKworCQlyZXR1cm4gLTE7CisJfQorCisJY2lfZGJnX3ByaW50KCIlczogaTJjIHJlYWQgQWRkcj0weCUwNHgsIFJlZyA9IDB4JTAyeCwgZGF0YSA9ICUwMnhcbiIsCisJCQkJCQlfX2Z1bmNfXywgYWRkciwgcmVnLCBidWZbMF0pOworCisJcmV0dXJuIDA7Cit9CisKK2ludCBuZXR1cF93cml0ZV9pMmMoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgdTggYWRkciwgdTggcmVnLAorCQkJCQkJdTggKmJ1ZiwgaW50IGxlbikKK3sKKwlpbnQgcmV0OworCXU4IGJ1ZmZlcltsZW4gKyAxXTsKKworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIJPSBhZGRyLAorCQkuZmxhZ3MJPSAwLAorCQkuYnVmCT0gJmJ1ZmZlclswXSwKKwkJLmxlbgk9IGxlbiArIDEKKwl9OworCisJYnVmZmVyWzBdID0gcmVnOworCW1lbWNweSgmYnVmZmVyWzFdLCBidWYsIGxlbik7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoaTJjX2FkYXAsICZtc2csIDEpOworCisJaWYgKHJldCAhPSAxKSB7CisJCWNpX2RiZ19wcmludCgiJXM6IGkyYyB3cml0ZSBlcnJvciwgUmVnPVsweCUwMnhdLCBTdGF0dXM9JWRcbiIsCisJCQkJCQlfX2Z1bmNfXywgcmVnLCByZXQpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK2ludCBuZXR1cF9jaV9nZXRfbWVtKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2KQoreworCWludCBtZW07CisJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoMSk7CisKKwlmb3IgKDs7KSB7CisJCW1lbSA9IGN4X3JlYWQoTUM0MTdfUldEKTsKKwkJaWYgKChtZW0gJiBORVRVUF9BQ0spID09IDApCisJCQlicmVhazsKKwkJaWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgdGltZW91dCkpCisJCQlicmVhazsKKwkJdWRlbGF5KDEpOworCX0KKworCWN4X3NldChNQzQxN19SV0QsIE5FVFVQX0NUUkxfT0ZGKTsKKworCXJldHVybiBtZW0gJiAweGZmOworfQorCitpbnQgbmV0dXBfY2lfb3BfY2FtKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqZW41MDIyMSwgaW50IHNsb3QsCisJCQkJdTggZmxhZywgdTggcmVhZCwgaW50IGFkZHIsIHU4IGRhdGEpCit7CisJc3RydWN0IG5ldHVwX2NpX3N0YXRlICpzdGF0ZSA9IGVuNTAyMjEtPmRhdGE7CisJc3RydWN0IGN4MjM4ODVfdHNwb3J0ICpwb3J0ID0gc3RhdGUtPnByaXY7CisJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBwb3J0LT5kZXY7CisKKwl1OCBzdG9yZTsKKwlpbnQgbWVtOworCWludCByZXQ7CisKKwlpZiAoMCAhPSBzbG90KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldCA9IG5ldHVwX3JlYWRfaTJjKHN0YXRlLT5pMmNfYWRhcCwgc3RhdGUtPmNpX2kyY19hZGRyLAorCQkJCQkJCTAsICZzdG9yZSwgMSk7CisJaWYgKHJldCAhPSAwKQorCQlyZXR1cm4gcmV0OworCisJc3RvcmUgJj0gfjB4MGM7CisJc3RvcmUgfD0gZmxhZzsKKworCXJldCA9IG5ldHVwX3dyaXRlX2kyYyhzdGF0ZS0+aTJjX2FkYXAsIHN0YXRlLT5jaV9pMmNfYWRkciwKKwkJCQkJCQkwLCAmc3RvcmUsIDEpOworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCW11dGV4X2xvY2soJmdwaW9fbXV0ZXgpOworCisJLyogd3JpdGUgYWRkciAqLworCWN4X3dyaXRlKE1DNDE3X09FTiwgTkVUVVBfRU5fQUxMKTsKKwljeF93cml0ZShNQzQxN19SV0QsIE5FVFVQX0NUUkxfT0ZGIHwKKwkJCQlORVRVUF9BRExPIHwgKDB4ZmYgJiBhZGRyKSk7CisJY3hfY2xlYXIoTUM0MTdfUldELCBORVRVUF9BRExPKTsKKwljeF93cml0ZShNQzQxN19SV0QsIE5FVFVQX0NUUkxfT0ZGIHwKKwkJCQlORVRVUF9BREhJIHwgKDB4ZmYgJiAoYWRkciA+PiA4KSkpOworCWN4X2NsZWFyKE1DNDE3X1JXRCwgTkVUVVBfQURISSk7CisKKwlpZiAocmVhZCkgLyogZGF0YSBpbiAqLworCQljeF93cml0ZShNQzQxN19PRU4sIE5FVFVQX0VOX0FMTCB8IE5FVFVQX0RBVEEpOworCWVsc2UgLyogZGF0YSBvdXQgKi8KKwkJY3hfd3JpdGUoTUM0MTdfUldELCBORVRVUF9DVFJMX09GRiB8IGRhdGEpOworCisJLyogY2hvb3NlIGNoaXAgKi8KKwljeF9jbGVhcihNQzQxN19SV0QsCisJCQkoc3RhdGUtPmNpX2kyY19hZGRyID09IDB4NDApID8gTkVUVVBfQ1MwIDogTkVUVVBfQ1MxKTsKKwkvKiByZWFkL3dyaXRlICovCisJY3hfY2xlYXIoTUM0MTdfUldELCAocmVhZCkgPyBORVRVUF9SRCA6IE5FVFVQX1dSKTsKKwltZW0gPSBuZXR1cF9jaV9nZXRfbWVtKGRldik7CisKKwltdXRleF91bmxvY2soJmdwaW9fbXV0ZXgpOworCisJaWYgKCFyZWFkKQorCQlpZiAobWVtIDwgMCkKKwkJCXJldHVybiAtRVJFTU9URUlPOworCisJY2lfZGJnX3ByaW50KCIlczogJXM6IGFkZHI9WzB4JTAyeF0sICVzPSV4XG4iLCBfX2Z1bmNfXywKKwkJCShyZWFkKSA/ICJyZWFkIiA6ICJ3cml0ZSIsIGFkZHIsCisJCQkoZmxhZyA9PSBORVRVUF9DSV9DVEwpID8gImN0bCIgOiAibWVtIiwKKwkJCShyZWFkKSA/IG1lbSA6IGRhdGEpOworCisJaWYgKHJlYWQpCisJCXJldHVybiBtZW07CisKKwlyZXR1cm4gMDsKK30KKworaW50IG5ldHVwX2NpX3JlYWRfYXR0cmlidXRlX21lbShzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmVuNTAyMjEsCisJCQkJCQlpbnQgc2xvdCwgaW50IGFkZHIpCit7CisJcmV0dXJuIG5ldHVwX2NpX29wX2NhbShlbjUwMjIxLCBzbG90LCAwLCBORVRVUF9DSV9SRCwgYWRkciwgMCk7Cit9CisKK2ludCBuZXR1cF9jaV93cml0ZV9hdHRyaWJ1dGVfbWVtKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqZW41MDIyMSwKKwkJCQkJCWludCBzbG90LCBpbnQgYWRkciwgdTggZGF0YSkKK3sKKwlyZXR1cm4gbmV0dXBfY2lfb3BfY2FtKGVuNTAyMjEsIHNsb3QsIDAsIDAsIGFkZHIsIGRhdGEpOworfQorCitpbnQgbmV0dXBfY2lfcmVhZF9jYW1fY3RsKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqZW41MDIyMSwgaW50IHNsb3QsIHU4IGFkZHIpCit7CisJcmV0dXJuIG5ldHVwX2NpX29wX2NhbShlbjUwMjIxLCBzbG90LCBORVRVUF9DSV9DVEwsCisJCQkJCQkJTkVUVVBfQ0lfUkQsIGFkZHIsIDApOworfQorCitpbnQgbmV0dXBfY2lfd3JpdGVfY2FtX2N0bChzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmVuNTAyMjEsIGludCBzbG90LAorCQkJCQkJCXU4IGFkZHIsIHU4IGRhdGEpCit7CisJcmV0dXJuIG5ldHVwX2NpX29wX2NhbShlbjUwMjIxLCBzbG90LCBORVRVUF9DSV9DVEwsIDAsIGFkZHIsIGRhdGEpOworfQorCitpbnQgbmV0dXBfY2lfc2xvdF9yZXNldChzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmVuNTAyMjEsIGludCBzbG90KQoreworCXN0cnVjdCBuZXR1cF9jaV9zdGF0ZSAqc3RhdGUgPSBlbjUwMjIxLT5kYXRhOworCXU4IGJ1ZiA9ICAweDgwOworCWludCByZXQ7CisKKwlpZiAoMCAhPSBzbG90KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXVkZWxheSg1MDApOworCXJldCA9IG5ldHVwX3dyaXRlX2kyYyhzdGF0ZS0+aTJjX2FkYXAsIHN0YXRlLT5jaV9pMmNfYWRkciwKKwkJCQkJCQkwLCAmYnVmLCAxKTsKKworCWlmIChyZXQgIT0gMCkKKwkJcmV0dXJuIHJldDsKKworCXVkZWxheSg1MDApOworCisJYnVmID0gMHgwMDsKKwlyZXQgPSBuZXR1cF93cml0ZV9pMmMoc3RhdGUtPmkyY19hZGFwLCBzdGF0ZS0+Y2lfaTJjX2FkZHIsCisJCQkJCQkJMCwgJmJ1ZiwgMSk7CisKKwltc2xlZXAoMTAwMCk7CisJZHZiX2NhX2VuNTAyMjFfY2FtcmVhZHlfaXJxKCZzdGF0ZS0+Y2EsIDApOworCisJcmV0dXJuIDA7CisKK30KKworaW50IG5ldHVwX2NpX3Nsb3Rfc2h1dGRvd24oc3RydWN0IGR2Yl9jYV9lbjUwMjIxICplbjUwMjIxLCBpbnQgc2xvdCkKK3sKKwkvKiBub3QgaW1wbGVtZW50ZWQgKi8KKwlyZXR1cm4gMDsKK30KKworaW50IG5ldHVwX2NpX3Nsb3RfdHNfY3RsKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqZW41MDIyMSwgaW50IHNsb3QpCit7CisJc3RydWN0IG5ldHVwX2NpX3N0YXRlICpzdGF0ZSA9IGVuNTAyMjEtPmRhdGE7CisJdTggYnVmID0gMHg2MDsKKworCWlmICgwICE9IHNsb3QpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIG5ldHVwX3dyaXRlX2kyYyhzdGF0ZS0+aTJjX2FkYXAsIHN0YXRlLT5jaV9pMmNfYWRkciwKKwkJCQkJCQkwLCAmYnVmLCAxKTsKK30KKworLyogd29yayBoYW5kbGVyICovCitzdGF0aWMgdm9pZCBuZXR1cF9yZWFkX2NpX3N0YXR1cyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCit7CisJc3RydWN0IG5ldHVwX2NpX3N0YXRlICpzdGF0ZSA9CisJCQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG5ldHVwX2NpX3N0YXRlLCB3b3JrKTsKKwl1OCBidWZbMzNdOworCWludCByZXQ7CisKKwlyZXQgPSBuZXR1cF9yZWFkX2kyYyhzdGF0ZS0+aTJjX2FkYXAsIHN0YXRlLT5jaV9pMmNfYWRkciwKKwkJCQkJCQkwLCAmYnVmWzBdLCAzMyk7CisKKwlpZiAocmV0ICE9IDApCisJCXJldHVybjsKKworCWNpX2RiZ19wcmludCgiJXM6IFNsb3QgU3RhdHVzIEFkZHI9WzB4JTA0eF0sIFJlZz1bMHglMDJ4XSwgZGF0YT0lMDJ4LCAiCisJCSJUUyBjb25maWcgPSAlMDJ4XG4iLCBfX2Z1bmNfXywgc3RhdGUtPmNpX2kyY19hZGRyLCAwLCBidWZbMF0sCisJCWJ1ZlszMl0pOworCisJaWYgKGJ1ZlswXSAmJiAxKQorCQlzdGF0ZS0+c3RhdHVzID0gRFZCX0NBX0VONTAyMjFfUE9MTF9DQU1fUFJFU0VOVCB8CisJCQlEVkJfQ0FfRU41MDIyMV9QT0xMX0NBTV9SRUFEWTsKKwllbHNlCisJCXN0YXRlLT5zdGF0dXMgPSAwOworfQorCisvKiBDSSBpcnEgaGFuZGxlciAqLworaW50IG5ldHVwX2NpX3Nsb3Rfc3RhdHVzKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LCB1MzIgcGNpX3N0YXR1cykKK3sKKwlzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKnBvcnQgPSBOVUxMOworCXN0cnVjdCBuZXR1cF9jaV9zdGF0ZSAqc3RhdGUgPSBOVUxMOworCisJaWYgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0dQSU8wKQorCQlwb3J0ID0gJmRldi0+dHMxOworCWVsc2UgaWYgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0dQSU8xKQorCQlwb3J0ID0gJmRldi0+dHMyOworCWVsc2UgLyogd2hvIGNhbGxzID8gKi8KKwkJcmV0dXJuIDA7CisKKwlzdGF0ZSA9IHBvcnQtPnBvcnRfcHJpdjsKKworCXNjaGVkdWxlX3dvcmsoJnN0YXRlLT53b3JrKTsKKworCXJldHVybiAxOworfQorCitpbnQgbmV0dXBfcG9sbF9jaV9zbG90X3N0YXR1cyhzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmVuNTAyMjEsIGludCBzbG90LCBpbnQgb3BlbikKK3sKKwlzdHJ1Y3QgbmV0dXBfY2lfc3RhdGUgKnN0YXRlID0gZW41MDIyMS0+ZGF0YTsKKworCWlmICgwICE9IHNsb3QpCisJCXJldHVybiAtRUlOVkFMOworCisJcmV0dXJuIHN0YXRlLT5zdGF0dXM7Cit9CisKK2ludCBuZXR1cF9jaV9pbml0KHN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCkKK3sKKwlzdHJ1Y3QgbmV0dXBfY2lfc3RhdGUgKnN0YXRlOworCXU4IGNpbWF4X2luaXRbMzRdID0geworCQkweDAwLCAvKiBtb2R1bGUgQSBjb250cm9sKi8KKwkJMHgwMCwgLyogYXV0byBzZWxlY3QgbWFzayBoaWdoIEEgKi8KKwkJMHgwMCwgLyogYXV0byBzZWxlY3QgbWFzayBsb3cgQSAqLworCQkweDAwLCAvKiBhdXRvIHNlbGVjdCBwYXR0ZXJuIGhpZ2ggQSAqLworCQkweDAwLCAvKiBhdXRvIHNlbGVjdCBwYXR0ZXJuIGxvdyBBICovCisJCTB4NDQsIC8qIG1lbW9yeSBhY2Nlc3MgdGltZSBBICovCisJCTB4MDAsIC8qIGludmVydCBpbnB1dCBBICovCisJCTB4MDAsIC8qIFJGVSAqLworCQkweDAwLCAvKiBSRlUgKi8KKwkJMHgwMCwgLyogbW9kdWxlIEIgY29udHJvbCovCisJCTB4MDAsIC8qIGF1dG8gc2VsZWN0IG1hc2sgaGlnaCBCICovCisJCTB4MDAsIC8qIGF1dG8gc2VsZWN0IG1hc2sgbG93IEIgKi8KKwkJMHgwMCwgLyogYXV0byBzZWxlY3QgcGF0dGVybiBoaWdoIEIgKi8KKwkJMHgwMCwgLyogYXV0byBzZWxlY3QgcGF0dGVybiBsb3cgQiAqLworCQkweDQ0LCAvKiBtZW1vcnkgYWNjZXNzIHRpbWUgQiAqLworCQkweDAwLCAvKiBpbnZlcnQgaW5wdXQgQiAqLworCQkweDAwLCAvKiBSRlUgKi8KKwkJMHgwMCwgLyogUkZVICovCisJCTB4MDAsIC8qIGF1dG8gc2VsZWN0IG1hc2sgaGlnaCBFeHQgKi8KKwkJMHgwMCwgLyogYXV0byBzZWxlY3QgbWFzayBsb3cgRXh0ICovCisJCTB4MDAsIC8qIGF1dG8gc2VsZWN0IHBhdHRlcm4gaGlnaCBFeHQgKi8KKwkJMHgwMCwgLyogYXV0byBzZWxlY3QgcGF0dGVybiBsb3cgRXh0ICovCisJCTB4MDAsIC8qIFJGVSAqLworCQkweDAyLCAvKiBkZXN0aW5hdGlvbiAtIG1vZHVsZSBBICovCisJCTB4MDEsIC8qIHBvd2VyIG9uICh1c2UgaXQgbGlrZSBzdG9yZSBwbGFjZSkgKi8KKwkJMHgwMCwgLyogUkZVICovCisJCTB4MDAsIC8qIGludCBzdGF0dXMgcmVhZCBvbmx5ICovCisJCTB4MDEsIC8qIGFsbCBpbnQgdW5tYXNrZWQgKi8KKwkJMHgwNCwgLyogaW50IGNvbmZpZyAqLworCQkweDAwLCAvKiBVU0NHMSAqLworCQkweDA0LCAvKiBhY2sgYWN0aXZlIGxvdyAqLworCQkweDAwLCAvKiBMT0NLID0gMCAqLworCQkweDMzLCAvKiBzZXJpYWwgbW9kZSwgcmlzaW5nIGluLCByaXNpbmcgb3V0LCBNU0IgZmlyc3QqLworCQkweDMxLCAvKiBzeW5jcm9uaXphdGlvbiAqLworCX07CisJaW50IHJldDsKKworCWNpX2RiZ19wcmludCgiJXNcbiIsIF9fZnVuY19fKTsKKwlzdGF0ZSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBuZXR1cF9jaV9zdGF0ZSksIEdGUF9LRVJORUwpOworCWlmICghc3RhdGUpIHsKKwkJY2lfZGJnX3ByaW50KCIlczogVW5hYmxlIGNyZWF0ZSBDSSBzdHJ1Y3R1cmUhXG4iLCBfX2Z1bmNfXyk7CisJCXJldCA9IC1FTk9NRU07CisJCWdvdG8gZXJyOworCX0KKworCXBvcnQtPnBvcnRfcHJpdiA9IHN0YXRlOworCisJc3dpdGNoIChwb3J0LT5ucikgeworCWNhc2UgMToKKwkJc3RhdGUtPmNpX2kyY19hZGRyID0gMHg0MDsKKwkJbXV0ZXhfaW5pdCgmZ3Bpb19tdXRleCk7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJc3RhdGUtPmNpX2kyY19hZGRyID0gMHg0MTsKKwkJYnJlYWs7CisJfQorCisJc3RhdGUtPmkyY19hZGFwID0gJnBvcnQtPmRldi0+aTJjX2J1c1swXS5pMmNfYWRhcDsKKwlzdGF0ZS0+Y2Eub3duZXIgPSBUSElTX01PRFVMRTsKKwlzdGF0ZS0+Y2EucmVhZF9hdHRyaWJ1dGVfbWVtID0gbmV0dXBfY2lfcmVhZF9hdHRyaWJ1dGVfbWVtOworCXN0YXRlLT5jYS53cml0ZV9hdHRyaWJ1dGVfbWVtID0gbmV0dXBfY2lfd3JpdGVfYXR0cmlidXRlX21lbTsKKwlzdGF0ZS0+Y2EucmVhZF9jYW1fY29udHJvbCA9IG5ldHVwX2NpX3JlYWRfY2FtX2N0bDsKKwlzdGF0ZS0+Y2Eud3JpdGVfY2FtX2NvbnRyb2wgPSBuZXR1cF9jaV93cml0ZV9jYW1fY3RsOworCXN0YXRlLT5jYS5zbG90X3Jlc2V0ID0gbmV0dXBfY2lfc2xvdF9yZXNldDsKKwlzdGF0ZS0+Y2Euc2xvdF9zaHV0ZG93biA9IG5ldHVwX2NpX3Nsb3Rfc2h1dGRvd247CisJc3RhdGUtPmNhLnNsb3RfdHNfZW5hYmxlID0gbmV0dXBfY2lfc2xvdF90c19jdGw7CisJc3RhdGUtPmNhLnBvbGxfc2xvdF9zdGF0dXMgPSBuZXR1cF9wb2xsX2NpX3Nsb3Rfc3RhdHVzOworCXN0YXRlLT5jYS5kYXRhID0gc3RhdGU7CisJc3RhdGUtPnByaXYgPSBwb3J0OworCisJcmV0ID0gbmV0dXBfd3JpdGVfaTJjKHN0YXRlLT5pMmNfYWRhcCwgc3RhdGUtPmNpX2kyY19hZGRyLAorCQkJCQkJMCwgJmNpbWF4X2luaXRbMF0sIDM0KTsKKwkvKiBsb2NrIHJlZ2lzdGVycyAqLworCXJldCB8PSBuZXR1cF93cml0ZV9pMmMoc3RhdGUtPmkyY19hZGFwLCBzdGF0ZS0+Y2lfaTJjX2FkZHIsCisJCQkJCQkweDFmLCAmY2ltYXhfaW5pdFsweDE4XSwgMSk7CisJLyogcG93ZXIgb24gc2xvdHMgKi8KKwlyZXQgfD0gbmV0dXBfd3JpdGVfaTJjKHN0YXRlLT5pMmNfYWRhcCwgc3RhdGUtPmNpX2kyY19hZGRyLAorCQkJCQkJMHgxOCwgJmNpbWF4X2luaXRbMHgxOF0sIDEpOworCisJaWYgKDAgIT0gcmV0KQorCQlnb3RvIGVycjsKKworCXJldCA9IGR2Yl9jYV9lbjUwMjIxX2luaXQoJnBvcnQtPmZyb250ZW5kcy5hZGFwdGVyLAorCQkJCSAgICZzdGF0ZS0+Y2EsCisJCQkJICAgLyogZmxhZ3MgKi8gMCwKKwkJCQkgICAvKiBuX3Nsb3RzICovIDEpOworCWlmICgwICE9IHJldCkKKwkJZ290byBlcnI7CisKKwlJTklUX1dPUksoJnN0YXRlLT53b3JrLCBuZXR1cF9yZWFkX2NpX3N0YXR1cyk7CisKKwljaV9kYmdfcHJpbnQoIiVzOiBDSSBpbml0aWFsaXplZCFcbiIsIF9fZnVuY19fKTsKKworCXJldHVybiAwOworZXJyOgorCWNpX2RiZ19wcmludCgiJXM6IENhbm5vdCBpbml0aWFsaXplIENJOiBFcnJvciAlZC5cbiIsIF9fZnVuY19fLCByZXQpOworCWtmcmVlKHN0YXRlKTsKKwlyZXR1cm4gcmV0OworfQorCit2b2lkIG5ldHVwX2NpX2V4aXQoc3RydWN0IGN4MjM4ODVfdHNwb3J0ICpwb3J0KQoreworCXN0cnVjdCBuZXR1cF9jaV9zdGF0ZSAqc3RhdGU7CisKKwlpZiAoTlVMTCA9PSBwb3J0KQorCQlyZXR1cm47CisKKwlzdGF0ZSA9IChzdHJ1Y3QgbmV0dXBfY2lfc3RhdGUgKilwb3J0LT5wb3J0X3ByaXY7CisJaWYgKE5VTEwgPT0gc3RhdGUpCisJCXJldHVybjsKKworCWlmIChOVUxMID09IHN0YXRlLT5jYS5kYXRhKQorCQlyZXR1cm47CisKKwlkdmJfY2FfZW41MDIyMV9yZWxlYXNlKCZzdGF0ZS0+Y2EpOworCWtmcmVlKHN0YXRlKTsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jaW1heDIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jaW1heDIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41MTg3NDRhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2NpbWF4Mi5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBjaW1heDIuaAorICoKKyAqIENJTWF4KFIpIFNQMiBkcml2ZXIgaW4gY29uanVuY3Rpb24gd2l0aCBOZXRVcCBEdWFsIERWQi1TMiBDSSBjYXJkCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5ldFVQIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBJZ29yIE0uIExpcGxpYW5pbiA8bGlwbGlhbmluQG5ldHVwLnJ1PgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFieWxheSBPc3BhbiA8YW9zcGFuQG5ldHVwLnJ1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworCisjaWZuZGVmIENJTUFYMl9ICisjZGVmaW5lIENJTUFYMl9ICisjaW5jbHVkZSAiZHZiX2NhX2VuNTAyMjEuaCIKKworZXh0ZXJuIGludCBuZXR1cF9jaV9yZWFkX2F0dHJpYnV0ZV9tZW0oc3RydWN0IGR2Yl9jYV9lbjUwMjIxICplbjUwMjIxLAorCQkJCQkJaW50IHNsb3QsIGludCBhZGRyKTsKK2V4dGVybiBpbnQgbmV0dXBfY2lfd3JpdGVfYXR0cmlidXRlX21lbShzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmVuNTAyMjEsCisJCQkJCQlpbnQgc2xvdCwgaW50IGFkZHIsIHU4IGRhdGEpOworZXh0ZXJuIGludCBuZXR1cF9jaV9yZWFkX2NhbV9jdGwoc3RydWN0IGR2Yl9jYV9lbjUwMjIxICplbjUwMjIxLAorCQkJCQkJaW50IHNsb3QsIHU4IGFkZHIpOworZXh0ZXJuIGludCBuZXR1cF9jaV93cml0ZV9jYW1fY3RsKHN0cnVjdCBkdmJfY2FfZW41MDIyMSAqZW41MDIyMSwKKwkJCQkJCWludCBzbG90LCB1OCBhZGRyLCB1OCBkYXRhKTsKK2V4dGVybiBpbnQgbmV0dXBfY2lfc2xvdF9yZXNldChzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmVuNTAyMjEsIGludCBzbG90KTsKK2V4dGVybiBpbnQgbmV0dXBfY2lfc2xvdF9zaHV0ZG93bihzdHJ1Y3QgZHZiX2NhX2VuNTAyMjEgKmVuNTAyMjEsIGludCBzbG90KTsKK2V4dGVybiBpbnQgbmV0dXBfY2lfc2xvdF90c19jdGwoc3RydWN0IGR2Yl9jYV9lbjUwMjIxICplbjUwMjIxLCBpbnQgc2xvdCk7CitleHRlcm4gaW50IG5ldHVwX2NpX3Nsb3Rfc3RhdHVzKHN0cnVjdCBjeDIzODg1X2RldiAqZGV2LCB1MzIgcGNpX3N0YXR1cyk7CitleHRlcm4gaW50IG5ldHVwX3BvbGxfY2lfc2xvdF9zdGF0dXMoc3RydWN0IGR2Yl9jYV9lbjUwMjIxICplbjUwMjIxLAorCQkJCQkJaW50IHNsb3QsIGludCBvcGVuKTsKK2V4dGVybiBpbnQgbmV0dXBfY2lfaW5pdChzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKnBvcnQpOworZXh0ZXJuIHZvaWQgbmV0dXBfY2lfZXhpdChzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKnBvcnQpOworCisjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LTQxNy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtNDE3LmMKaW5kZXggYmZlMjU4NC4uNmY1ZGY5MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtNDE3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtNDE3LmMKQEAgLTg5Niw3ICs4OTYsNyBAQAogCWlmIChyZXR2YWwgIT0gMCkgewogCQlwcmludGsoS0VSTl9FUlIKIAkJCSJFUlJPUjogSG90cGx1ZyBmaXJtd2FyZSByZXF1ZXN0IGZhaWxlZCAoJXMpLlxuIiwKLQkJCUNYMjM0MVhfRklSTV9FTkNfRklMRU5BTUUpOworCQkJQ1gyMzg4NV9GSVJNX0lNQUdFX05BTUUpOwogCQlwcmludGsoS0VSTl9FUlIgIlBsZWFzZSBmaXggeW91ciBob3RwbHVnIHNldHVwLCB0aGUgYm9hcmQgd2lsbCAiCiAJCQkibm90IHdvcmsgd2l0aG91dCBmaXJtd2FyZSBsb2FkZWQhXG4iKTsKIAkJcmV0dXJuIC0xOwpAQCAtMTE5OCwyMSArMTE5OCwxNiBAQAogCXN0cnVjdCBjeDIzODg1X2ZoICAqZmggID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gZmgtPmRldjsKIAlzdHJ1Y3QgY3gyMzg4NV9pbnB1dCAqaW5wdXQ7Ci0JdW5zaWduZWQgaW50IG47CisJaW50IG47CiAKLQluID0gaS0+aW5kZXg7Ci0KLQlpZiAobiA+PSA0KQorCWlmIChpLT5pbmRleCA+PSA0KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlucHV0ID0gJmN4MjM4ODVfYm9hcmRzW2Rldi0+Ym9hcmRdLmlucHV0W25dOworCWlucHV0ID0gJmN4MjM4ODVfYm9hcmRzW2Rldi0+Ym9hcmRdLmlucHV0W2ktPmluZGV4XTsKIAogCWlmIChpbnB1dC0+dHlwZSA9PSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW1lbXNldChpLCAwLCBzaXplb2YoKmkpKTsKLQlpLT5pbmRleCA9IG47Ci0KIAkvKiBGSVhNRQogCSAqIHN0cmNweShpLT5uYW1lLCBpbnB1dC0+bmFtZSk7ICovCiAJc3RyY3B5KGktPm5hbWUsICJ1bnNldCIpOwpAQCAtMTI1NSwxMCArMTI1MCw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWlmICgwICE9IHQtPmluZGV4KQogCQlyZXR1cm4gLUVJTlZBTDsKLQltZW1zZXQodCwgMCwgc2l6ZW9mKCp0KSk7CiAJc3RyY3B5KHQtPm5hbWUsICJUZWxldmlzaW9uIik7Ci0JY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMl0sIFZJRElPQ19HX1RVTkVSLCB0KTsKLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1sxXSwgVklESU9DX0dfVFVORVIsIHQpOworCWNhbGxfYWxsKGRldiwgdHVuZXIsIGdfdHVuZXIsIHQpOwogCiAJZHByaW50aygxLCAiVklESU9DX0dfVFVORVI6IHR1bmVyIHR5cGUgJWRcbiIsIHQtPnR5cGUpOwogCkBAIC0xMjc1LDcgKzEyNjgsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCS8qIFVwZGF0ZSB0aGUgQS9WIGNvcmUgKi8KLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1syXSwgVklESU9DX1NfVFVORVIsIHQpOworCWNhbGxfYWxsKGRldiwgdHVuZXIsIHNfdHVuZXIsIHQpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMjg2LDE0ICsxMjc5LDEyIEBACiAJc3RydWN0IGN4MjM4ODVfZmggICpmaCAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCi0JbWVtc2V0KGYsIDAsIHNpemVvZigqZikpOwogCWlmIChVTlNFVCA9PSBkZXYtPnR1bmVyX3R5cGUpCiAJCXJldHVybiAtRUlOVkFMOwogCWYtPnR5cGUgPSBWNEwyX1RVTkVSX0FOQUxPR19UVjsKIAlmLT5mcmVxdWVuY3kgPSBkZXYtPmZyZXE7CiAKLQkvKiBBc3N1bXB0aW9uIHRoYXQgdHVuZXIgaXMgYWx3YXlzIG9uIGJ1cyAxICovCi0JY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMV0sIFZJRElPQ19HX0ZSRVFVRU5DWSwgZik7CisJY2FsbF9hbGwoZGV2LCB0dW5lciwgZ19mcmVxdWVuY3ksIGYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzIwLDggKzEzMTEsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlkZXYtPmZyZXEgPSBmLT5mcmVxdWVuY3k7CiAKLQkvKiBBc3N1bXB0aW9uIHRoYXQgdHVuZXIgaXMgYWx3YXlzIG9uIGJ1cyAxICovCi0JY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMV0sIFZJRElPQ19TX0ZSRVFVRU5DWSwgZik7CisJY2FsbF9hbGwoZGV2LCB0dW5lciwgc19mcmVxdWVuY3ksIGYpOwogCiAJY3gyMzg4NV9pbml0aWFsaXplX2NvZGVjKGRldik7CiAKQEAgLTEzMzUsNyArMTMyNSw3IEBACiAJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCiAJLyogVXBkYXRlIHRoZSBBL1YgY29yZSAqLwotCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cygmZGV2LT5pMmNfYnVzWzJdLCBWSURJT0NfU19DVFJMLCBjdGwpOworCWNhbGxfYWxsKGRldiwgY29yZSwgc19jdHJsLCBjdGwpOwogCXJldHVybiAwOwogfQogCkBAIC0xMzQ2LDcgKzEzMzYsNiBAQAogCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gZmgtPmRldjsKIAlzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgICp0c3BvcnQgPSAmZGV2LT50czE7CiAKLQltZW1zZXQoY2FwLCAwLCBzaXplb2YoKmNhcCkpOwogCXN0cmNweShjYXAtPmRyaXZlciwgZGV2LT5uYW1lKTsKIAlzdHJsY3B5KGNhcC0+Y2FyZCwgY3gyMzg4NV9ib2FyZHNbdHNwb3J0LT5kZXYtPmJvYXJkXS5uYW1lLAogCQlzaXplb2YoY2FwLT5jYXJkKSk7CkBAIC0xMzY2LDE2ICsxMzU1LDEwIEBACiBzdGF0aWMgaW50IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZikKIHsKLQlpbnQgaW5kZXg7Ci0KLQlpbmRleCA9IGYtPmluZGV4OwotCWlmIChpbmRleCAhPSAwKQorCWlmIChmLT5pbmRleCAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW1lbXNldChmLCAwLCBzaXplb2YoKmYpKTsKLQlmLT5pbmRleCA9IGluZGV4OwogCXN0cmxjcHkoZi0+ZGVzY3JpcHRpb24sICJNUEVHIiwgc2l6ZW9mKGYtPmRlc2NyaXB0aW9uKSk7Ci0JZi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAlmLT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NUEVHOwogCiAJcmV0dXJuIDA7CkBAIC0xMzg3LDggKzEzNzAsNiBAQAogCXN0cnVjdCBjeDIzODg1X2ZoICAqZmggID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gZmgtPmRldjsKIAotCW1lbXNldChmLCAwLCBzaXplb2YoKmYpKTsKLQlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgID0gVjRMMl9QSVhfRk1UX01QRUc7CiAJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOwogCWYtPmZtdC5waXguc2l6ZWltYWdlICAgID0KQEAgLTE0MDgsMTIgKzEzODksMTAgQEAKIAlzdHJ1Y3QgY3gyMzg4NV9maCAgKmZoICA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IGZoLT5kZXY7CiAKLQlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgID0gVjRMMl9QSVhfRk1UX01QRUc7CiAJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOwogCWYtPmZtdC5waXguc2l6ZWltYWdlICAgID0KIAkJZGV2LT50czEudHNfcGFja2V0X3NpemUgKiBkZXYtPnRzMS50c19wYWNrZXRfY291bnQ7Ci0JZi0+Zm10LnBpeC5zaXplaW1hZ2UgICAgPQogCWYtPmZtdC5waXguY29sb3JzcGFjZSAgID0gMDsKIAlkcHJpbnRrKDEsICJWSURJT0NfVFJZX0ZNVDogdzogJWQsIGg6ICVkLCBmOiAlZFxuIiwKIAkJZGV2LT50czEud2lkdGgsIGRldi0+dHMxLmhlaWdodCwgZmgtPm1wZWdxLmZpZWxkKTsKQEAgLTE0MjYsNyArMTQwNSw2IEBACiAJc3RydWN0IGN4MjM4ODVfZmggICpmaCAgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBmaC0+ZGV2OwogCi0JZi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAlmLT5mbXQucGl4LnBpeGVsZm9ybWF0ICA9IFY0TDJfUElYX0ZNVF9NUEVHOwogCWYtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gMDsKIAlmLT5mbXQucGl4LnNpemVpbWFnZSAgICA9CkBAIC0xNTQzLDEyICsxNTIxLDcgQEAKIAlwcmludGsoS0VSTl9JTkZPCiAJCSIlcy8yOiA9PT09PT09PT09PT0gIFNUQVJUIExPRyBTVEFUVVMgID09PT09PT09PT09PVxuIiwKIAkgICAgICAgZGV2LT5uYW1lKTsKLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1swXSwgVklESU9DX0xPR19TVEFUVVMsCi0JCU5VTEwpOwotCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cygmZGV2LT5pMmNfYnVzWzFdLCBWSURJT0NfTE9HX1NUQVRVUywKLQkJTlVMTCk7Ci0JY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMl0sIFZJRElPQ19MT0dfU1RBVFVTLAotCQlOVUxMKTsKKwljYWxsX2FsbChkZXYsIGNvcmUsIGxvZ19zdGF0dXMpOwogCWN4MjM0MXhfbG9nX3N0YXR1cygmZGV2LT5tcGVnX3BhcmFtcywgbmFtZSk7CiAJcHJpbnRrKEtFUk5fSU5GTwogCQkiJXMvMjogPT09PT09PT09PT09PSAgRU5EIExPRyBTVEFUVVMgID09PT09PT09PT09PT1cbiIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY2FyZHMuYwppbmRleCBjYWEwOThiLi41ZTRiN2U3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jYXJkcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNhcmRzLmMKQEAgLTI3LDYgKzI3LDcgQEAKIAogI2luY2x1ZGUgImN4MjM4ODUuaCIKICNpbmNsdWRlICJ0dW5lci14YzIwMjguaCIKKyNpbmNsdWRlICJuZXR1cC1pbml0LmgiCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogYm9hcmQgY29uZmlnIGluZm8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCkBAIC0xNjIsNiArMTYzLDI0IEBACiAJCS5uYW1lCQk9ICJDb21wcm8gVmlkZW9NYXRlIEU2NTBGIiwKIAkJLnBvcnRjCQk9IENYMjM4ODVfTVBFR19EVkIsCiAJfSwKKwlbQ1gyMzg4NV9CT0FSRF9UQlNfNjkyMF0gPSB7CisJCS5uYW1lCQk9ICJUdXJib1NpZ2h0IFRCUyA2OTIwIiwKKwkJLnBvcnRiCQk9IENYMjM4ODVfTVBFR19EVkIsCisJfSwKKwlbQ1gyMzg4NV9CT0FSRF9URVZJSV9TNDcwXSA9IHsKKwkJLm5hbWUJCT0gIlRlVmlpIFM0NzAiLAorCQkucG9ydGIJCT0gQ1gyMzg4NV9NUEVHX0RWQiwKKwl9LAorCVtDWDIzODg1X0JPQVJEX0RWQldPUkxEXzIwMDVdID0geworCQkubmFtZQkJPSAiRFZCV29ybGQgRFZCLVMyIDIwMDUiLAorCQkucG9ydGIJCT0gQ1gyMzg4NV9NUEVHX0RWQiwKKwl9LAorCVtDWDIzODg1X0JPQVJEX05FVFVQX0RVQUxfRFZCUzJfQ0ldID0geworCQkuY2ltYXgJCT0gMSwKKwkJLm5hbWUJCT0gIk5ldFVQIER1YWwgRFZCLVMyIENJIiwKKwkJLnBvcnRiCQk9IENYMjM4ODVfTVBFR19EVkIsCisJCS5wb3J0YwkJPSBDWDIzODg1X01QRUdfRFZCLAorCX0sCiB9OwogY29uc3QgdW5zaWduZWQgaW50IGN4MjM4ODVfYmNvdW50ID0gQVJSQVlfU0laRShjeDIzODg1X2JvYXJkcyk7CiAKQEAgLTI0NSw2ICsyNjQsMjIgQEAKIAkJLnN1YnZlbmRvciA9IDB4MTg1YiwKIAkJLnN1YmRldmljZSA9IDB4ZTgwMCwKIAkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfQ09NUFJPX1ZJREVPTUFURV9FNjUwRiwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDY5MjAsCisJCS5zdWJkZXZpY2UgPSAweDg4ODgsCisJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX1RCU182OTIwLAorCX0sIHsKKwkJLnN1YnZlbmRvciA9IDB4ZDQ3MCwKKwkJLnN1YmRldmljZSA9IDB4OTAyMiwKKwkJLmNhcmQgICAgICA9IENYMjM4ODVfQk9BUkRfVEVWSUlfUzQ3MCwKKwl9LCB7CisJCS5zdWJ2ZW5kb3IgPSAweDAwMDEsCisJCS5zdWJkZXZpY2UgPSAweDIwMDUsCisJCS5jYXJkICAgICAgPSBDWDIzODg1X0JPQVJEX0RWQldPUkxEXzIwMDUsCisJfSwgeworCQkuc3VidmVuZG9yID0gMHgxYjU1LAorCQkuc3ViZGV2aWNlID0gMHgyYTJjLAorCQkuY2FyZCAgICAgID0gQ1gyMzg4NV9CT0FSRF9ORVRVUF9EVUFMX0RWQlMyX0NJLAogCX0sCiB9OwogY29uc3QgdW5zaWduZWQgaW50IGN4MjM4ODVfaWRjb3VudCA9IEFSUkFZX1NJWkUoY3gyMzg4NV9zdWJpZHMpOwpAQCAtNTUyLDYgKzU4NywzOCBAQAogCQltZGVsYXkoMjApOwogCQljeF9zZXQoR1AwX0lPLCAweDAwMDQwMDA0KTsKIAkJYnJlYWs7CisJY2FzZSBDWDIzODg1X0JPQVJEX1RCU182OTIwOgorCWNhc2UgQ1gyMzg4NV9CT0FSRF9URVZJSV9TNDcwOgorCQljeF93cml0ZShNQzQxN19DVEwsIDB4MDAwMDAwMzYpOworCQljeF93cml0ZShNQzQxN19PRU4sIDB4MDAwMDEwMDApOworCQljeF93cml0ZShNQzQxN19SV0QsIDB4MDAwMDE4MDApOworCQlicmVhazsKKwljYXNlIENYMjM4ODVfQk9BUkRfTkVUVVBfRFVBTF9EVkJTMl9DSToKKwkJLyogR1BJTy0wIElOVEEgZnJvbSBDaU1heDEKKwkJICAgR1BJTy0xIElOVEIgZnJvbSBDaU1heDIKKwkJICAgR1BJTy0yIHJlc2V0IGNoaXBzCisJCSAgIEdQSU8tMyB0byBHUElPLTEwIGRhdGEvYWRkciBmb3IgQ0EKKwkJICAgR1BJTy0xMSB+Q1MwIHRvIENpTWF4MQorCQkgICBHUElPLTEyIH5DUzEgdG8gQ2lNYXgyCisJCSAgIEdQSU8tMTMgQURMMCBsb2FkIExTQiBhZGRyCisJCSAgIEdQSU8tMTQgQURMMSBsb2FkIE1TQiBhZGRyCisJCSAgIEdQSU8tMTUgflJEWSBmcm9tIENpTWF4CisJCSAgIEdQSU8tMTcgflJEIHRvIENpTWF4CisJCSAgIEdQSU8tMTggfldSIHRvIENpTWF4CisJCSAqLworCQljeF9zZXQoR1AwX0lPLCAweDAwMDQwMDAwKTsgLyogR1BJTyBhcyBvdXQgKi8KKwkJLyogR1BJTzEgYW5kIEdQSU8yIGFzIElOVEEgYW5kIElOVEIgZnJvbSBDaU1heGVzLCByZXNldCBsb3cgKi8KKwkJY3hfY2xlYXIoR1AwX0lPLCAweDAwMDMwMDA0KTsKKwkJbWRlbGF5KDEwMCk7LyogcmVzZXQgZGVsYXkgKi8KKwkJY3hfc2V0KEdQMF9JTywgMHgwMDA0MDAwNCk7IC8qIEdQSU8gYXMgb3V0LCByZXNldCBoaWdoICovCisJCWN4X3dyaXRlKE1DNDE3X0NUTCwgMHgwMDAwMDAzNyk7LyogZW5hYmxlIEdQSU8zLTE4IHBpbnMgKi8KKwkJLyogR1BJTy0xNSBJTiBhcyB+QUNLLCByZXN0IGFzIE9VVCAqLworCQljeF93cml0ZShNQzQxN19PRU4sIDB4MDAwMDEwMDApOworCQkvKiB+UkQsIH5XUiBoaWdoOyBBREwwLCBBREwxIGxvdzsgfkNTMCwgfkNTMSBoaWdoICovCisJCWN4X3dyaXRlKE1DNDE3X1JXRCwgMHgwMDAwYzMwMCk7CisJCS8qIGVuYWJsZSBpcnEgKi8KKwkJY3hfd3JpdGUoR1BJT19JU00sIDB4MDAwMDAwMDApOy8qIElOVEVSUlVQVFMgYWN0aXZlIGxvdyovCisJCWJyZWFrOwogCX0KIH0KIApAQCAtNjMyLDYgKzY5OSwyMSBAQAogCQl0czItPnRzX2Nsa19lbl92YWwgPSAweDE7IC8qIEVuYWJsZSBUU19DTEsgKi8KIAkJdHMyLT5zcmNfc2VsX3ZhbCAgID0gQ1gyMzg4NV9TUkNfU0VMX1BBUkFMTEVMX01QRUdfVklERU87CiAJCWJyZWFrOworCWNhc2UgQ1gyMzg4NV9CT0FSRF9URVZJSV9TNDcwOgorCWNhc2UgQ1gyMzg4NV9CT0FSRF9UQlNfNjkyMDoKKwljYXNlIENYMjM4ODVfQk9BUkRfRFZCV09STERfMjAwNToKKwkJdHMxLT5nZW5fY3RybF92YWwgID0gMHg1OyAvKiBQYXJhbGxlbCAqLworCQl0czEtPnRzX2Nsa19lbl92YWwgPSAweDE7IC8qIEVuYWJsZSBUU19DTEsgKi8KKwkJdHMxLT5zcmNfc2VsX3ZhbCAgID0gQ1gyMzg4NV9TUkNfU0VMX1BBUkFMTEVMX01QRUdfVklERU87CisJCWJyZWFrOworCWNhc2UgQ1gyMzg4NV9CT0FSRF9ORVRVUF9EVUFMX0RWQlMyX0NJOgorCQl0czEtPmdlbl9jdHJsX3ZhbCAgPSAweGM7IC8qIFNlcmlhbCBidXMgKyBwdW5jdHVyZWQgY2xvY2sgKi8KKwkJdHMxLT50c19jbGtfZW5fdmFsID0gMHgxOyAvKiBFbmFibGUgVFNfQ0xLICovCisJCXRzMS0+c3JjX3NlbF92YWwgICA9IENYMjM4ODVfU1JDX1NFTF9QQVJBTExFTF9NUEVHX1ZJREVPOworCQl0czItPmdlbl9jdHJsX3ZhbCAgPSAweGM7IC8qIFNlcmlhbCBidXMgKyBwdW5jdHVyZWQgY2xvY2sgKi8KKwkJdHMyLT50c19jbGtfZW5fdmFsID0gMHgxOyAvKiBFbmFibGUgVFNfQ0xLICovCisJCXRzMi0+c3JjX3NlbF92YWwgICA9IENYMjM4ODVfU1JDX1NFTF9QQVJBTExFTF9NUEVHX1ZJREVPOworCQlicmVhazsKIAljYXNlIENYMjM4ODVfQk9BUkRfSEFVUFBBVUdFX0hWUjEyNTA6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNTAwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9IQVVQUEFVR0VfSFZSMTUwMFE6CkBAIC02NTYsNyArNzM4LDE3IEBACiAJY2FzZSBDWDIzODg1X0JPQVJEX0hBVVBQQVVHRV9IVlIxNzAwOgogCWNhc2UgQ1gyMzg4NV9CT0FSRF9MRUFEVEVLX1dJTkZBU1RfUFhEVlIzMjAwX0g6CiAJY2FzZSBDWDIzODg1X0JPQVJEX0NPTVBST19WSURFT01BVEVfRTY1MEY6Ci0JCXJlcXVlc3RfbW9kdWxlKCJjeDI1ODQwIik7CisJY2FzZSBDWDIzODg1X0JPQVJEX05FVFVQX0RVQUxfRFZCUzJfQ0k6CisJCWRldi0+c2RfY3gyNTg0MCA9IHY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+aTJjX2J1c1syXS5pMmNfYWRhcCwKKwkJCQkiY3gyNTg0MCIsICJjeDI1ODQwIiwgMHg4OCA+PiAxKTsKKwkJdjRsMl9zdWJkZXZfY2FsbChkZXYtPnNkX2N4MjU4NDAsIGNvcmUsIGluaXQsIDApOworCQlicmVhazsKKwl9CisKKwkvKiBBVVgtUExMIDI3TUh6IENMSyAqLworCXN3aXRjaCAoZGV2LT5ib2FyZCkgeworCWNhc2UgQ1gyMzg4NV9CT0FSRF9ORVRVUF9EVUFMX0RWQlMyX0NJOgorCQluZXR1cF9pbml0aWFsaXplKGRldik7CiAJCWJyZWFrOwogCX0KIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWNvcmUuYwppbmRleCA4ZjZmYjJhLi5kYzdmZmYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtY29yZS5jCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSA8YXNtL2RpdjY0Lmg+CiAKICNpbmNsdWRlICJjeDIzODg1LmgiCisjaW5jbHVkZSAiY2ltYXgyLmgiCiAKIE1PRFVMRV9ERVNDUklQVElPTigiRHJpdmVyIGZvciBjeDIzODg1IGJhc2VkIFRWIGNhcmRzIik7CiBNT0RVTEVfQVVUSE9SKCJTdGV2ZW4gVG90aCA8c3RvdGhAbGludXh0di5vcmc+Iik7CkBAIC03OTEsNiArNzkyLDggQEAKIAlkZXYtPnBjaV9idXMgID0gZGV2LT5wY2ktPmJ1cy0+bnVtYmVyOwogCWRldi0+cGNpX3Nsb3QgPSBQQ0lfU0xPVChkZXYtPnBjaS0+ZGV2Zm4pOwogCWRldi0+cGNpX2lycW1hc2sgPSAweDAwMWYwMDsKKwlpZiAoY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0uY2ltYXggPiAwKQorCQlkZXYtPnBjaV9pcnFtYXNrIHw9IDB4MDE4MDAwMDA7IC8qIGZvciBDaU1heGVzICovCiAKIAkvKiBFeHRlcm5hbCBNYXN0ZXIgMSBCdXMgKi8KIAlkZXYtPmkyY19idXNbMF0ubnIgPSAwOwpAQCAtODcyLDcgKzg3NSw3IEBACiAJY3gyMzg4NV9pMmNfcmVnaXN0ZXIoJmRldi0+aTJjX2J1c1sxXSk7CiAJY3gyMzg4NV9pMmNfcmVnaXN0ZXIoJmRldi0+aTJjX2J1c1syXSk7CiAJY3gyMzg4NV9jYXJkX3NldHVwKGRldik7Ci0JY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMF0sIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKKwljYWxsX2FsbChkZXYsIGNvcmUsIHNfc3RhbmRieSwgMCk7CiAJY3gyMzg4NV9pcl9pbml0KGRldik7CiAKIAlpZiAoY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0ucG9ydGEgPT0gQ1gyMzg4NV9BTkFMT0dfVklERU8pIHsKQEAgLTE2NDMsNyArMTY0Niw5IEBACiAJICAgIChwY2lfc3RhdHVzICYgUENJX01TS19WSURfQikgfHwKIAkgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX1ZJRF9BKSB8fAogCSAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfQVVEX0lOVCkgfHwKLQkgICAgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0FVRF9FWFQpKSB7CisJICAgIChwY2lfc3RhdHVzICYgUENJX01TS19BVURfRVhUKSB8fAorCSAgICAocGNpX3N0YXR1cyAmIFBDSV9NU0tfR1BJTzApIHx8CisJICAgIChwY2lfc3RhdHVzICYgUENJX01TS19HUElPMSkpIHsKIAogCQlpZiAocGNpX3N0YXR1cyAmIFBDSV9NU0tfUklTQ19SRCkKIAkJCWRwcmludGsoNywgIiAoUENJX01TS19SSVNDX1JEICAgMHglMDh4KVxuIiwKQEAgLTE2ODUsOCArMTY5MCwyMCBAQAogCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX0FVRF9FWFQgICAweCUwOHgpXG4iLAogCQkJCVBDSV9NU0tfQVVEX0VYVCk7CiAKKwkJaWYgKHBjaV9zdGF0dXMgJiBQQ0lfTVNLX0dQSU8wKQorCQkJZHByaW50ayg3LCAiIChQQ0lfTVNLX0dQSU8wICAgICAweCUwOHgpXG4iLAorCQkJCVBDSV9NU0tfR1BJTzApOworCisJCWlmIChwY2lfc3RhdHVzICYgUENJX01TS19HUElPMSkKKwkJCWRwcmludGsoNywgIiAoUENJX01TS19HUElPMSAgICAgMHglMDh4KVxuIiwKKwkJCQlQQ0lfTVNLX0dQSU8xKTsKIAl9CiAKKwlpZiAoY3gyMzg4NV9ib2FyZHNbZGV2LT5ib2FyZF0uY2ltYXggPiAwICYmCisJCSgocGNpX3N0YXR1cyAmIFBDSV9NU0tfR1BJTzApIHx8IChwY2lfc3RhdHVzICYgUENJX01TS19HUElPMSkpKQorCQkvKiBoYW5kbGVkICs9IGN4MjM4ODVfaXJxX2dwaW8oZGV2LCBwY2lfc3RhdHVzKTsgKi8KKwkJaGFuZGxlZCArPSBuZXR1cF9jaV9zbG90X3N0YXR1cyhkZXYsIHBjaV9zdGF0dXMpOworCiAJaWYgKHRzMV9zdGF0dXMpIHsKIAkJaWYgKGN4MjM4ODVfYm9hcmRzW2Rldi0+Ym9hcmRdLnBvcnRiID09IENYMjM4ODVfTVBFR19EVkIpCiAJCQloYW5kbGVkICs9IGN4MjM4ODVfaXJxX3RzKHRzMSwgdHMxX3N0YXR1cyk7CkBAIC0xNzIyLDE2ICsxNzM5LDIwIEBACiAJaWYgKE5VTEwgPT0gZGV2KQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWVyciA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZwY2lfZGV2LT5kZXYsICZkZXYtPnY0bDJfZGV2KTsKKwlpZiAoZXJyIDwgMCkKKwkJZ290byBmYWlsX2ZyZWU7CisKIAkvKiBwY2kgaW5pdCAqLwogCWRldi0+cGNpID0gcGNpX2RldjsKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGNpX2RldikpIHsKIAkJZXJyID0gLUVJTzsKLQkJZ290byBmYWlsX2ZyZWU7CisJCWdvdG8gZmFpbF91bnJlZzsKIAl9CiAKIAlpZiAoY3gyMzg4NV9kZXZfc2V0dXAoZGV2KSA8IDApIHsKIAkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBmYWlsX2ZyZWU7CisJCWdvdG8gZmFpbF91bnJlZzsKIAl9CiAKIAkvKiBwcmludCBwY2kgaW5mbyAqLwpAQCAtMTc1OCwxMSArMTc3OSwxOCBAQAogCQlnb3RvIGZhaWxfaXJxOwogCX0KIAotCXBjaV9zZXRfZHJ2ZGF0YShwY2lfZGV2LCBkZXYpOworCXN3aXRjaCAoZGV2LT5ib2FyZCkgeworCWNhc2UgQ1gyMzg4NV9CT0FSRF9ORVRVUF9EVUFMX0RWQlMyX0NJOgorCQljeF9zZXQoUENJX0lOVF9NU0ssIDB4MDE4MDAwMDApOyAvKiBmb3IgTmV0VVAgKi8KKwkJYnJlYWs7CisJfQorCiAJcmV0dXJuIDA7CiAKIGZhaWxfaXJxOgogCWN4MjM4ODVfZGV2X3VucmVnaXN0ZXIoZGV2KTsKK2ZhaWxfdW5yZWc6CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7CiBmYWlsX2ZyZWU6CiAJa2ZyZWUoZGV2KTsKIAlyZXR1cm4gZXJyOwpAQCAtMTc3MCw3ICsxNzk4LDggQEAKIAogc3RhdGljIHZvaWQgX19kZXZleGl0IGN4MjM4ODVfZmluaWRldihzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKIHsKLQlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCBjeDIzODg1X2RldiAqZGV2ID0gdG9fY3gyMzg4NSh2NGwyX2Rldik7CiAKIAljeDIzODg1X3NodXRkb3duKGRldik7CiAKQEAgLTE3NzgsMTMgKzE4MDcsMTMgQEAKIAogCS8qIHVucmVnaXN0ZXIgc3R1ZmYgKi8KIAlmcmVlX2lycShwY2lfZGV2LT5pcnEsIGRldik7Ci0JcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsIE5VTEwpOwogCiAJbXV0ZXhfbG9jaygmZGV2bGlzdCk7CiAJbGlzdF9kZWwoJmRldi0+ZGV2bGlzdCk7CiAJbXV0ZXhfdW5sb2NrKCZkZXZsaXN0KTsKIAogCWN4MjM4ODVfZGV2X3VucmVnaXN0ZXIoZGV2KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKHY0bDJfZGV2KTsKIAlrZnJlZShkZXYpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jCmluZGV4IDFjNDU0MTIuLmQ0M2M3NDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWR2Yi5jCkBAIC0zMCw2ICszMCw3IEBACiAjaW5jbHVkZSAiY3gyMzg4NS5oIgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAKKyNpbmNsdWRlICJkdmJfY2FfZW41MDIyMS5oIgogI2luY2x1ZGUgInM1aDE0MDkuaCIKICNpbmNsdWRlICJzNWgxNDExLmgiCiAjaW5jbHVkZSAibXQyMTMxLmgiCkBAIC00Myw2ICs0NCwxMyBAQAogI2luY2x1ZGUgImRpYjcwMDBwLmgiCiAjaW5jbHVkZSAiZGlieDAwMF9jb21tb24uaCIKICNpbmNsdWRlICJ6bDEwMzUzLmgiCisjaW5jbHVkZSAic3R2MDkwMC5oIgorI2luY2x1ZGUgInN0djYxMTAuaCIKKyNpbmNsdWRlICJsbmJoMjQuaCIKKyNpbmNsdWRlICJjeDI0MTE2LmgiCisjaW5jbHVkZSAiY2ltYXgyLmgiCisjaW5jbHVkZSAibmV0dXAtZWVwcm9tLmgiCisjaW5jbHVkZSAibmV0dXAtaW5pdC5oIgogCiBzdGF0aWMgdW5zaWduZWQgaW50IGRlYnVnOwogCkBAIC0zMDgsMTEgKzMxNiw2MyBAQAogCS5ub190dW5lciAgICAgID0gMSwKIH07CiAKK3N0YXRpYyBzdHJ1Y3Qgc3R2MDkwMF9jb25maWcgbmV0dXBfc3R2MDkwMF9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDY4LAorCS54dGFsID0gMjcwMDAwMDAsCisJLmNsa21vZGUgPSAzLC8qIDAtQ0xLSSwgMi1YVEFMSSwgZWxzZSBBVVRPICovCisJLmRpc2VxY19tb2RlID0gMiwvKiAyLzMgUFdNICovCisJLnBhdGgxX21vZGUgPSAyLC8qU2VyaWFsIGNvbnRpbnVlcyBjbG9jayAqLworCS5wYXRoMl9tb2RlID0gMiwvKlNlcmlhbCBjb250aW51ZXMgY2xvY2sgKi8KKwkudHVuMV9tYWRkcmVzcyA9IDAsLyogMHg2MCAqLworCS50dW4yX21hZGRyZXNzID0gMywvKiAweDYzICovCisJLnR1bjFfYWRjID0gMSwvKiAxIFZwcCAqLworCS50dW4yX2FkYyA9IDEsLyogMSBWcHAgKi8KK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3R2NjExMF9jb25maWcgbmV0dXBfc3R2NjExMF90dW5lcmNvbmZpZ19hID0geworCS5pMmNfYWRkcmVzcyA9IDB4NjAsCisJLm1jbGsgPSAyNzAwMDAwMCwKKwkuaXFfd2lyaW5nID0gMCwKK307CisKK3N0YXRpYyBzdHJ1Y3Qgc3R2NjExMF9jb25maWcgbmV0dXBfc3R2NjExMF90dW5lcmNvbmZpZ19iID0geworCS5pMmNfYWRkcmVzcyA9IDB4NjMsCisJLm1jbGsgPSAyNzAwMDAwMCwKKwkuaXFfd2lyaW5nID0gMSwKK307CisKK3N0YXRpYyBpbnQgdGJzX3NldF92b2x0YWdlKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpCit7CisJc3RydWN0IGN4MjM4ODVfdHNwb3J0ICpwb3J0ID0gZmUtPmR2Yi0+cHJpdjsKKwlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IHBvcnQtPmRldjsKKworCWlmICh2b2x0YWdlID09IFNFQ19WT0xUQUdFXzE4KQorCQljeF93cml0ZShNQzQxN19SV0QsIDB4MDAwMDFlMDApOy8qIEdQSU8tMTMgaGlnaCAqLworCWVsc2UgaWYgKHZvbHRhZ2UgPT0gU0VDX1ZPTFRBR0VfMTMpCisJCWN4X3dyaXRlKE1DNDE3X1JXRCwgMHgwMDAwMWEwMCk7LyogR1BJTy0xMyBsb3cgKi8KKwllbHNlCisJCWN4X3dyaXRlKE1DNDE3X1JXRCwgMHgwMDAwMTgwMCk7LyogR1BJTy0xMiBsb3cgKi8KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHN0cnVjdCBjeDI0MTE2X2NvbmZpZyB0YnNfY3gyNDExNl9jb25maWcgPSB7CisJLmRlbW9kX2FkZHJlc3MgPSAweDA1LAorfTsKKworc3RhdGljIHN0cnVjdCBjeDI0MTE2X2NvbmZpZyB0ZXZpaV9jeDI0MTE2X2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4NTUsCit9OworCitzdGF0aWMgc3RydWN0IGN4MjQxMTZfY29uZmlnIGR2YndvcmxkX2N4MjQxMTZfY29uZmlnID0geworCS5kZW1vZF9hZGRyZXNzID0gMHgwNSwKK307CisKIHN0YXRpYyBpbnQgZHZiX3JlZ2lzdGVyKHN0cnVjdCBjeDIzODg1X3RzcG9ydCAqcG9ydCkKIHsKIAlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IHBvcnQtPmRldjsKIAlzdHJ1Y3QgY3gyMzg4NV9pMmMgKmkyY19idXMgPSBOVUxMOwogCXN0cnVjdCB2aWRlb2J1Zl9kdmJfZnJvbnRlbmQgKmZlMDsKKwlpbnQgcmV0OwogCiAJLyogR2V0IHRoZSBmaXJzdCBmcm9udGVuZCAqLwogCWZlMCA9IHZpZGVvYnVmX2R2Yl9nZXRfZnJvbnRlbmQoJnBvcnQtPmZyb250ZW5kcywgMSk7CkBAIC01MjYsNiArNTg2LDc4IEBACiAJCQkJZmUtPm9wcy50dW5lcl9vcHMuc2V0X2NvbmZpZyhmZSwgJmN0bCk7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSBDWDIzODg1X0JPQVJEX1RCU182OTIwOgorCQlpMmNfYnVzID0gJmRldi0+aTJjX2J1c1swXTsKKworCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyNDExNl9hdHRhY2gsCisJCQkmdGJzX2N4MjQxMTZfY29uZmlnLAorCQkJJmkyY19idXMtPmkyY19hZGFwKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpCisJCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLnNldF92b2x0YWdlID0gdGJzX3NldF92b2x0YWdlOworCisJCWJyZWFrOworCWNhc2UgQ1gyMzg4NV9CT0FSRF9URVZJSV9TNDcwOgorCQlpMmNfYnVzID0gJmRldi0+aTJjX2J1c1sxXTsKKworCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goY3gyNDExNl9hdHRhY2gsCisJCQkmdGV2aWlfY3gyNDExNl9jb25maWcsCisJCQkmaTJjX2J1cy0+aTJjX2FkYXApOworCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkKKwkJCWZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuc2V0X3ZvbHRhZ2UgPSB0YnNfc2V0X3ZvbHRhZ2U7CisKKwkJYnJlYWs7CisJY2FzZSBDWDIzODg1X0JPQVJEX0RWQldPUkxEXzIwMDU6CisJCWkyY19idXMgPSAmZGV2LT5pMmNfYnVzWzFdOworCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChjeDI0MTE2X2F0dGFjaCwKKwkJCSZkdmJ3b3JsZF9jeDI0MTE2X2NvbmZpZywKKwkJCSZpMmNfYnVzLT5pMmNfYWRhcCk7CisJCWJyZWFrOworCWNhc2UgQ1gyMzg4NV9CT0FSRF9ORVRVUF9EVUFMX0RWQlMyX0NJOgorCQlpMmNfYnVzID0gJmRldi0+aTJjX2J1c1swXTsKKwkJc3dpdGNoIChwb3J0LT5ucikgeworCQkvKiBwb3J0IEIgKi8KKwkJY2FzZSAxOgorCQkJZmUwLT5kdmIuZnJvbnRlbmQgPSBkdmJfYXR0YWNoKHN0djA5MDBfYXR0YWNoLAorCQkJCQkJCSZuZXR1cF9zdHYwOTAwX2NvbmZpZywKKwkJCQkJCQkmaTJjX2J1cy0+aTJjX2FkYXAsIDApOworCQkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kICE9IE5VTEwpIHsKKwkJCQlpZiAoZHZiX2F0dGFjaChzdHY2MTEwX2F0dGFjaCwKKwkJCQkJCWZlMC0+ZHZiLmZyb250ZW5kLAorCQkJCQkJJm5ldHVwX3N0djYxMTBfdHVuZXJjb25maWdfYSwKKwkJCQkJCSZpMmNfYnVzLT5pMmNfYWRhcCkpIHsKKwkJCQkJaWYgKCFkdmJfYXR0YWNoKGxuYmgyNF9hdHRhY2gsCisJCQkJCQkJZmUwLT5kdmIuZnJvbnRlbmQsCisJCQkJCQkJJmkyY19idXMtPmkyY19hZGFwLAorCQkJCQkJCUxOQkgyNF9QQ0wsIDAsIDB4MDkpKQorCQkJCQkJcHJpbnRrKEtFUk5fRVJSCisJCQkJCQkJIk5vIExOQkgyNCBmb3VuZCFcbiIpOworCisJCQkJfQorCQkJfQorCQkJYnJlYWs7CisJCS8qIHBvcnQgQyAqLworCQljYXNlIDI6CisJCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goc3R2MDkwMF9hdHRhY2gsCisJCQkJCQkJJm5ldHVwX3N0djA5MDBfY29uZmlnLAorCQkJCQkJCSZpMmNfYnVzLT5pMmNfYWRhcCwgMSk7CisJCQlpZiAoZmUwLT5kdmIuZnJvbnRlbmQgIT0gTlVMTCkgeworCQkJCWlmIChkdmJfYXR0YWNoKHN0djYxMTBfYXR0YWNoLAorCQkJCQkJZmUwLT5kdmIuZnJvbnRlbmQsCisJCQkJCQkmbmV0dXBfc3R2NjExMF90dW5lcmNvbmZpZ19iLAorCQkJCQkJJmkyY19idXMtPmkyY19hZGFwKSkgeworCQkJCQlpZiAoIWR2Yl9hdHRhY2gobG5iaDI0X2F0dGFjaCwKKwkJCQkJCQlmZTAtPmR2Yi5mcm9udGVuZCwKKwkJCQkJCQkmaTJjX2J1cy0+aTJjX2FkYXAsCisJCQkJCQkJTE5CSDI0X1BDTCwgMCwgMHgwYSkpCisJCQkJCQlwcmludGsoS0VSTl9FUlIKKwkJCQkJCQkiTm8gTE5CSDI0IGZvdW5kIVxuIik7CisKKwkJCQl9CisJCQl9CisJCQlicmVhazsKKwkJfQorCQlicmVhazsKIAlkZWZhdWx0OgogCQlwcmludGsoS0VSTl9JTkZPICIlczogVGhlIGZyb250ZW5kIG9mIHlvdXIgRFZCL0FUU0MgY2FyZCAiCiAJCQkiIGlzbid0IHN1cHBvcnRlZCB5ZXRcbiIsCkBAIC01NDEsMTUgKzY3MywzOSBAQAogCWZlMC0+ZHZiLmZyb250ZW5kLT5jYWxsYmFjayA9IGN4MjM4ODVfdHVuZXJfY2FsbGJhY2s7CiAKIAkvKiBQdXQgdGhlIGFuYWxvZyBkZWNvZGVyIGluIHN0YW5kYnkgdG8ga2VlcCBpdCBxdWlldCAqLwotCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cyhpMmNfYnVzLCBUVU5FUl9TRVRfU1RBTkRCWSwgTlVMTCk7CisJY2FsbF9hbGwoZGV2LCBjb3JlLCBzX3N0YW5kYnksIDApOwogCiAJaWYgKGZlMC0+ZHZiLmZyb250ZW5kLT5vcHMuYW5hbG9nX29wcy5zdGFuZGJ5KQogCQlmZTAtPmR2Yi5mcm9udGVuZC0+b3BzLmFuYWxvZ19vcHMuc3RhbmRieShmZTAtPmR2Yi5mcm9udGVuZCk7CiAKIAkvKiByZWdpc3RlciBldmVyeXRoaW5nICovCi0JcmV0dXJuIHZpZGVvYnVmX2R2Yl9yZWdpc3Rlcl9idXMoJnBvcnQtPmZyb250ZW5kcywgVEhJU19NT0RVTEUsIHBvcnQsCisJcmV0ID0gdmlkZW9idWZfZHZiX3JlZ2lzdGVyX2J1cygmcG9ydC0+ZnJvbnRlbmRzLCBUSElTX01PRFVMRSwgcG9ydCwKIAkJJmRldi0+cGNpLT5kZXYsIGFkYXB0ZXJfbnIsIDApOwogCisJLyogaW5pdCBDSSAmIE1BQyAqLworCXN3aXRjaCAoZGV2LT5ib2FyZCkgeworCWNhc2UgQ1gyMzg4NV9CT0FSRF9ORVRVUF9EVUFMX0RWQlMyX0NJOiB7CisJCXN0YXRpYyBzdHJ1Y3QgbmV0dXBfY2FyZF9pbmZvIGNpbmZvOworCisJCW5ldHVwX2dldF9jYXJkX2luZm8oJmRldi0+aTJjX2J1c1swXS5pMmNfYWRhcCwgJmNpbmZvKTsKKwkJbWVtY3B5KHBvcnQtPmZyb250ZW5kcy5hZGFwdGVyLnByb3Bvc2VkX21hYywKKwkJCQljaW5mby5wb3J0W3BvcnQtPm5yIC0gMV0ubWFjLCA2KTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiTmV0VVAgRHVhbCBEVkItUzIgQ0kgY2FyZCBwb3J0JWQgTUFDPSIKKwkJCSIlMDJYOiUwMlg6JTAyWDolMDJYOiUwMlg6JTAyWFxuIiwKKwkJCXBvcnQtPm5yLAorCQkJcG9ydC0+ZnJvbnRlbmRzLmFkYXB0ZXIucHJvcG9zZWRfbWFjWzBdLAorCQkJcG9ydC0+ZnJvbnRlbmRzLmFkYXB0ZXIucHJvcG9zZWRfbWFjWzFdLAorCQkJcG9ydC0+ZnJvbnRlbmRzLmFkYXB0ZXIucHJvcG9zZWRfbWFjWzJdLAorCQkJcG9ydC0+ZnJvbnRlbmRzLmFkYXB0ZXIucHJvcG9zZWRfbWFjWzNdLAorCQkJcG9ydC0+ZnJvbnRlbmRzLmFkYXB0ZXIucHJvcG9zZWRfbWFjWzRdLAorCQkJcG9ydC0+ZnJvbnRlbmRzLmFkYXB0ZXIucHJvcG9zZWRfbWFjWzVdKTsKKworCQluZXR1cF9jaV9pbml0KHBvcnQpOworCQlicmVhazsKKwkJfQorCX0KKworCXJldHVybiByZXQ7CiB9CiAKIGludCBjeDIzODg1X2R2Yl9yZWdpc3RlcihzdHJ1Y3QgY3gyMzg4NV90c3BvcnQgKnBvcnQpCkBAIC02MjIsNiArNzc4LDEyIEBACiAJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKQogCQl2aWRlb2J1Zl9kdmJfdW5yZWdpc3Rlcl9idXMoJnBvcnQtPmZyb250ZW5kcyk7CiAKKwlzd2l0Y2ggKHBvcnQtPmRldi0+Ym9hcmQpIHsKKwljYXNlIENYMjM4ODVfQk9BUkRfTkVUVVBfRFVBTF9EVkJTMl9DSToKKwkJbmV0dXBfY2lfZXhpdChwb3J0KTsKKwkJYnJlYWs7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaTJjLmMKaW5kZXggYmI3ZjcxYS4uMzQyMWJkMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtaTJjLmMKQEAgLTI2OCw2NCArMjY4LDYgQEAKIAlyZXR1cm4gcmV0dmFsOwogfQogCi1zdGF0aWMgaW50IGF0dGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgY3gyMzg4NV9pMmMgKmJ1cyA9IGkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKLQlzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldiA9IGJ1cy0+ZGV2OwotCXN0cnVjdCB0dW5lcl9zZXR1cCB0dW5fc2V0dXA7Ci0KLQlkcHJpbnRrKDEsICIlcyBpMmMgYXR0YWNoIFthZGRyPTB4JXgsY2xpZW50PSVzXVxuIiwKLQkJY2xpZW50LT5kcml2ZXItPmRyaXZlci5uYW1lLCBjbGllbnQtPmFkZHIsIGNsaWVudC0+bmFtZSk7Ci0KLQlpZiAoIWNsaWVudC0+ZHJpdmVyLT5jb21tYW5kKQotCQlyZXR1cm4gMDsKLQotCWlmIChkZXYtPnR1bmVyX3R5cGUgIT0gVU5TRVQpIHsKLQotCQlkcHJpbnRrKDEsICIlcyAgKHR1bmVyKSBpMmMgYXR0YWNoIFthZGRyPTB4JXgsY2xpZW50PSVzXVxuIiwKLQkJCWNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSwgY2xpZW50LT5hZGRyLAotCQkJY2xpZW50LT5uYW1lKTsKLQotCQlpZiAoKGRldi0+dHVuZXJfYWRkciA9PSBBRERSX1VOU0VUKSB8fAotCQkJKGRldi0+dHVuZXJfYWRkciA9PSBjbGllbnQtPmFkZHIpKSB7Ci0KLQkJCWRwcmludGsoMSwgIiVzICh0dW5lciB8fCBhZGRyIFVOU0VUKVxuIiwKLQkJCQljbGllbnQtPmRyaXZlci0+ZHJpdmVyLm5hbWUpOwotCi0JCQlkcHJpbnRrKDEsICIlcyBpMmMgYXR0YWNoIFthZGRyPTB4JXgsY2xpZW50PSVzXVxuIiwKLQkJCQljbGllbnQtPmRyaXZlci0+ZHJpdmVyLm5hbWUsCi0JCQkJY2xpZW50LT5hZGRyLCBjbGllbnQtPm5hbWUpOwotCi0JCQl0dW5fc2V0dXAubW9kZV9tYXNrID0gVF9BTkFMT0dfVFY7Ci0JCQl0dW5fc2V0dXAudHlwZSA9IGRldi0+dHVuZXJfdHlwZTsKLQkJCXR1bl9zZXR1cC5hZGRyID0gZGV2LT50dW5lcl9hZGRyOwotCi0JCQljbGllbnQtPmRyaXZlci0+Y29tbWFuZChjbGllbnQsIFRVTkVSX1NFVF9UWVBFX0FERFIsCi0JCQkJJnR1bl9zZXR1cCk7Ci0JCX0KLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkZXRhY2hfaW5mb3JtKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYgPSBpMmNfZ2V0X2FkYXBkYXRhKGNsaWVudC0+YWRhcHRlcik7Ci0KLQlkcHJpbnRrKDEsICJpMmMgZGV0YWNoIFtjbGllbnQ9JXNdXG4iLCBjbGllbnQtPm5hbWUpOwotCi0JcmV0dXJuIDA7Ci19Ci0KLXZvaWQgY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKHN0cnVjdCBjeDIzODg1X2kyYyAqYnVzLAotCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCWlmIChidXMtPmkyY19yYyAhPSAwKQotCQlyZXR1cm47Ci0KLQlpMmNfY2xpZW50c19jb21tYW5kKCZidXMtPmkyY19hZGFwLCBjbWQsIGFyZyk7Ci19Ci0KIHN0YXRpYyB1MzIgY3gyMzg4NV9mdW5jdGlvbmFsaXR5KHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKIHsKIAlyZXR1cm4gSTJDX0ZVTkNfU01CVVNfRU1VTCB8IEkyQ19GVU5DX0kyQzsKQEAgLTM0Myw5ICsyODUsNiBAQAogCS5vd25lciAgICAgICAgICAgICA9IFRISVNfTU9EVUxFLAogCS5pZCAgICAgICAgICAgICAgICA9IEkyQ19IV19CX0NYMjM4ODUsCiAJLmFsZ28gICAgICAgICAgICAgID0gJmN4MjM4ODVfaTJjX2FsZ29fdGVtcGxhdGUsCi0JLmNsYXNzICAgICAgICAgICAgID0gSTJDX0NMQVNTX1RWX0FOQUxPRywKLQkuY2xpZW50X3JlZ2lzdGVyICAgPSBhdHRhY2hfaW5mb3JtLAotCS5jbGllbnRfdW5yZWdpc3RlciA9IGRldGFjaF9pbmZvcm0sCiB9OwogCiBzdGF0aWMgc3RydWN0IGkyY19jbGllbnQgY3gyMzg4NV9pMmNfY2xpZW50X3RlbXBsYXRlID0gewpAQCAtNDAyLDE1ICszNDEsMTggQEAKIAogCWJ1cy0+aTJjX2FsZ28uZGF0YSA9IGJ1czsKIAlidXMtPmkyY19hZGFwLmFsZ29fZGF0YSA9IGJ1czsKLQlpMmNfc2V0X2FkYXBkYXRhKCZidXMtPmkyY19hZGFwLCBidXMpOworCWkyY19zZXRfYWRhcGRhdGEoJmJ1cy0+aTJjX2FkYXAsICZkZXYtPnY0bDJfZGV2KTsKIAlpMmNfYWRkX2FkYXB0ZXIoJmJ1cy0+aTJjX2FkYXApOwogCiAJYnVzLT5pMmNfY2xpZW50LmFkYXB0ZXIgPSAmYnVzLT5pMmNfYWRhcDsKIAogCWlmICgwID09IGJ1cy0+aTJjX3JjKSB7CiAJCWRwcmludGsoMSwgIiVzOiBpMmMgYnVzICVkIHJlZ2lzdGVyZWRcbiIsIGRldi0+bmFtZSwgYnVzLT5ucik7Ci0JCWlmIChpMmNfc2NhbikKKwkJaWYgKGkyY19zY2FuKSB7CisJCQlwcmludGsoS0VSTl9JTkZPICIlczogc2NhbiBidXMgJWQ6XG4iLAorCQkJCQlkZXYtPm5hbWUsIGJ1cy0+bnIpOwogCQkJZG9faTJjX3NjYW4oZGV2LT5uYW1lLCAmYnVzLT5pMmNfY2xpZW50KTsKKwkJfQogCX0gZWxzZQogCQlwcmludGsoS0VSTl9XQVJOSU5HICIlczogaTJjIGJ1cyAlZCByZWdpc3RlciBGQUlMRURcbiIsCiAJCQlkZXYtPm5hbWUsIGJ1cy0+bnIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtcmVnLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1yZWcuaAppbmRleCAyMGI2OGEyLi5lYWZiZTUyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1yZWcuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS1yZWcuaApAQCAtMjEyLDYgKzIxMiw4IEBACiAKICNkZWZpbmUgREVWX0NOVFJMMgkweDAwMDQwMDAwCiAKKyNkZWZpbmUgUENJX01TS19HUElPMSAgICgxIDw8IDI0KQorI2RlZmluZSBQQ0lfTVNLX0dQSU8wICAgKDEgPDwgMjMpCiAjZGVmaW5lIFBDSV9NU0tfQVBCX0RNQSAgICgxIDw8IDEyKQogI2RlZmluZSBQQ0lfTVNLX0FMX1dSICAgICAoMSA8PCAxMSkKICNkZWZpbmUgUENJX01TS19BTF9SRCAgICAgKDEgPDwgMTApCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUtdmlkZW8uYwppbmRleCBlYWExMTg5Li5mMGFjNjJjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LXZpZGVvLmMKQEAgLTM1LDExICszNSw2IEBACiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAKLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLS8qIEluY2x1ZGUgVjRMMSBzcGVjaWZpYyBmdW5jdGlvbnMuIFNob3VsZCBiZSByZW1vdmVkIHNvb24gKi8KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2VuZGlmCi0KIE1PRFVMRV9ERVNDUklQVElPTigidjRsMiBkcml2ZXIgbW9kdWxlIGZvciBjeDIzODg1IGJhc2VkIFRWIGNhcmRzIik7CiBNT0RVTEVfQVVUSE9SKCJTdGV2ZW4gVG90aCA8c3RvdGhAbGludXh0di5vcmc+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CkBAIC0yNDQsNiArMjM5LDcgQEAKIH07CiBzdGF0aWMgY29uc3QgaW50IENYMjM4ODVfQ1RMUyA9IEFSUkFZX1NJWkUoY3gyMzg4NV9jdGxzKTsKIAorLyogTXVzdCBiZSBzb3J0ZWQgZnJvbSBsb3cgdG8gaGlnaCBjb250cm9sIElEISAqLwogc3RhdGljIGNvbnN0IHUzMiBjeDIzODg1X3VzZXJfY3RybHNbXSA9IHsKIAlWNEwyX0NJRF9VU0VSX0NMQVNTLAogCVY0TDJfQ0lEX0JSSUdIVE5FU1MsCkBAIC0zMDMsMTEgKzI5OSw3IEBACiAKIAlkZXYtPnR2bm9ybSA9IG5vcm07CiAKLQkvKiBUZWxsIHRoZSBhbmFsb2cgdHVuZXIvZGVtb2RzICovCi0JY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMV0sIFZJRElPQ19TX1NURCwgJm5vcm0pOwotCi0JLyogVGVsbCB0aGUgaW50ZXJuYWwgQS9WIGRlY29kZXIgKi8KLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1syXSwgVklESU9DX1NfU1RELCAmbm9ybSk7CisJY2FsbF9hbGwoZGV2LCB0dW5lciwgc19zdGQsIG5vcm0pOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0zMjQsOCArMzE2LDggQEAKIAlpZiAoTlVMTCA9PSB2ZmQpCiAJCXJldHVybiBOVUxMOwogCSp2ZmQgPSAqdGVtcGxhdGU7Ci0JdmZkLT5taW5vciAgID0gLTE7Ci0JdmZkLT5wYXJlbnQgID0gJnBjaS0+ZGV2OworCXZmZC0+bWlub3IgPSAtMTsKKwl2ZmQtPnY0bDJfZGV2ID0gJmRldi0+djRsMl9kZXY7CiAJdmZkLT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CiAJc25wcmludGYodmZkLT5uYW1lLCBzaXplb2YodmZkLT5uYW1lKSwgIiVzICVzICglcykiLAogCQkgZGV2LT5uYW1lLCB0eXBlLCBjeDIzODg1X2JvYXJkc1tkZXYtPmJvYXJkXS5uYW1lKTsKQEAgLTQxNCw4ICs0MDYsNyBAQAogCXJvdXRlLmlucHV0ID0gSU5QVVQoaW5wdXQpLT52bXV4OwogCiAJLyogVGVsbCB0aGUgaW50ZXJuYWwgQS9WIGRlY29kZXIgKi8KLQljeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoJmRldi0+aTJjX2J1c1syXSwKLQkJVklESU9DX0lOVF9TX1ZJREVPX1JPVVRJTkcsICZyb3V0ZSk7CisJdjRsMl9zdWJkZXZfY2FsbChkZXYtPnNkX2N4MjU4NDAsIHZpZGVvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTg5MSw3ICs4ODIsNyBAQAogCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0bCkKIHsKIAlkcHJpbnRrKDEsICIlcygpIGNhbGxpbmcgY3gyNTg0MChWSURJT0NfR19DVFJMKVxuIiwgX19mdW5jX18pOwotCWN4MjM4ODVfY2FsbF9pMmNfY2xpZW50cygmZGV2LT5pMmNfYnVzWzJdLCBWSURJT0NfR19DVFJMLCBjdGwpOworCWNhbGxfYWxsKGRldiwgY29yZSwgZ19jdHJsLCBjdGwpOwogCXJldHVybiAwOwogfQogCkBAIC0xMDA1LDcgKzk5Niw3IEBACiAJZmgtPnZpZHEuZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOwogCWRwcmludGsoMiwgIiVzKCkgd2lkdGg9JWQgaGVpZ2h0PSVkIGZpZWxkPSVkXG4iLCBfX2Z1bmNfXywKIAkJZmgtPndpZHRoLCBmaC0+aGVpZ2h0LCBmaC0+dmlkcS5maWVsZCk7Ci0JY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMl0sIFZJRElPQ19TX0ZNVCwgZik7CisJY2FsbF9hbGwoZGV2LCB2aWRlbywgc19mbXQsIGYpOwogCXJldHVybiAwOwogfQogCkBAIC0xMjg1LDcgKzEyNzYsNyBAQAogCWYtPnR5cGUgPSBmaC0+cmFkaW8gPyBWNEwyX1RVTkVSX1JBRElPIDogVjRMMl9UVU5FUl9BTkFMT0dfVFY7CiAJZi0+ZnJlcXVlbmN5ID0gZGV2LT5mcmVxOwogCi0JY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMV0sIFZJRElPQ19HX0ZSRVFVRU5DWSwgZik7CisJY2FsbF9hbGwoZGV2LCB0dW5lciwgZ19mcmVxdWVuY3ksIGYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzAwLDcgKzEyOTEsNyBAQAogCW11dGV4X2xvY2soJmRldi0+bG9jayk7CiAJZGV2LT5mcmVxID0gZi0+ZnJlcXVlbmN5OwogCi0JY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMV0sIFZJRElPQ19TX0ZSRVFVRU5DWSwgZik7CisJY2FsbF9hbGwoZGV2LCB0dW5lciwgc19mcmVxdWVuY3ksIGYpOwogCiAJLyogV2hlbiBjaGFuZ2luZyBjaGFubmVscyBpdCBpcyByZXF1aXJlZCB0byByZXNldCBUVkFVRElPICovCiAJbXNsZWVwKDEwKTsKQEAgLTEzMzQsNyArMTMyNSw3IEBACiAJaWYgKCF2NGwyX2NoaXBfbWF0Y2hfaG9zdCgmcmVnLT5tYXRjaCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMl0sIFZJRElPQ19EQkdfR19SRUdJU1RFUiwgcmVnKTsKKwljYWxsX2FsbChkZXYsIGNvcmUsIGdfcmVnaXN0ZXIsIHJlZyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTEzNDcsNyArMTMzOCw3IEBACiAJaWYgKCF2NGwyX2NoaXBfbWF0Y2hfaG9zdCgmcmVnLT5tYXRjaCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JY3gyMzg4NV9jYWxsX2kyY19jbGllbnRzKCZkZXYtPmkyY19idXNbMl0sIFZJRElPQ19EQkdfU19SRUdJU1RFUiwgcmVnKTsKKwljYWxsX2FsbChkZXYsIGNvcmUsIHNfcmVnaXN0ZXIsIHJlZyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE1MjgsNiArMTUxOSwyNiBAQAogCS8qIERvbid0IGVuYWJsZSBWQkkgeWV0ICovCiAJY3hfc2V0KFBDSV9JTlRfTVNLLCAxKTsKIAorCWlmIChUVU5FUl9BQlNFTlQgIT0gZGV2LT50dW5lcl90eXBlKSB7CisJCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBOVUxMOworCisJCWlmIChkZXYtPnR1bmVyX2FkZHIpCisJCQlzZCA9IHY0bDJfaTJjX25ld19zdWJkZXYoJmRldi0+aTJjX2J1c1sxXS5pMmNfYWRhcCwKKwkJCQkidHVuZXIiLCAidHVuZXIiLCBkZXYtPnR1bmVyX2FkZHIpOworCQllbHNlCisJCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZkZXYtPmkyY19idXNbMV0uaTJjX2FkYXAsCisJCQkJInR1bmVyIiwgInR1bmVyIiwgdjRsMl9pMmNfdHVuZXJfYWRkcnMoQUREUlNfVFYpKTsKKwkJaWYgKHNkKSB7CisJCQlzdHJ1Y3QgdHVuZXJfc2V0dXAgdHVuX3NldHVwOworCisJCQl0dW5fc2V0dXAubW9kZV9tYXNrID0gVF9BTkFMT0dfVFY7CisJCQl0dW5fc2V0dXAudHlwZSA9IGRldi0+dHVuZXJfdHlwZTsKKwkJCXR1bl9zZXR1cC5hZGRyID0gdjRsMl9pMmNfc3ViZGV2X2FkZHIoc2QpOworCisJCQl2NGwyX3N1YmRldl9jYWxsKHNkLCB0dW5lciwgc190eXBlX2FkZHIsICZ0dW5fc2V0dXApOworCQl9CisJfQorCiAKIAkvKiByZWdpc3RlciB2NGwgZGV2aWNlcyAqLwogCWRldi0+dmlkZW9fZGV2ID0gY3gyMzg4NV92ZGV2X2luaXQoZGV2LCBkZXYtPnBjaSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvY3gyMzg4NS5oCmluZGV4IDY3ODI4MDIuLjAyZDk4MGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9jeDIzODg1LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L2N4MjM4ODUuaApAQCAtMjQsNyArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgogI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPgogCi0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdHZlZXByb20uaD4KICNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi1kbWEtc2cuaD4KQEAgLTY3LDYgKzY3LDEwIEBACiAjZGVmaW5lIENYMjM4ODVfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl9EVkJfVF9EVUFMX0VYUCAxMQogI2RlZmluZSBDWDIzODg1X0JPQVJEX0xFQURURUtfV0lORkFTVF9QWERWUjMyMDBfSCAxMgogI2RlZmluZSBDWDIzODg1X0JPQVJEX0NPTVBST19WSURFT01BVEVfRTY1MEYgICAxMworI2RlZmluZSBDWDIzODg1X0JPQVJEX1RCU182OTIwICAgICAgICAgICAgICAgICAxNAorI2RlZmluZSBDWDIzODg1X0JPQVJEX1RFVklJX1M0NzAgICAgICAgICAgICAgICAxNQorI2RlZmluZSBDWDIzODg1X0JPQVJEX0RWQldPUkxEXzIwMDUgICAgICAgICAgICAxNgorI2RlZmluZSBDWDIzODg1X0JPQVJEX05FVFVQX0RVQUxfRFZCUzJfQ0kgICAgICAxNwogCiAvKiBDdXJyZW50bHkgdW5zdXBwb3J0ZWQgYnkgdGhlIGRyaXZlcjogUEFML0gsIE5UU0MvS3IsIFNFQ0FNIEIvRy9IL0xDICovCiAjZGVmaW5lIENYMjM4ODVfTk9STVMgKFwKQEAgLTE4NCw2ICsxODgsNyBAQAogCSAqLwogCXUzMgkJCWNsa19mcmVxOwogCXN0cnVjdCBjeDIzODg1X2lucHV0ICAgIGlucHV0W01BWF9DWDIzODg1X0lOUFVUXTsKKwlpbnQJCQljaW1heDsgLyogZm9yIE5ldFVQICovCiB9OwogCiBzdHJ1Y3QgY3gyMzg4NV9zdWJpZCB7CkBAIC0yNjYsMTEgKzI3MSwxMyBAQAogCiAJLyogQWxsb3cgYSBzaW5nbGUgdHNwb3J0IHRvIGhhdmUgbXVsdGlwbGUgZnJvbnRlbmRzICovCiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgbnVtX2Zyb250ZW5kczsKKwl2b2lkICAgICAgICAgICAgICAgICAgICAgICAqcG9ydF9wcml2OwogfTsKIAogc3RydWN0IGN4MjM4ODVfZGV2IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgICAgICAgICBkZXZsaXN0OwogCWF0b21pY190ICAgICAgICAgICAgICAgICAgIHJlZmNvdW50OworCXN0cnVjdCB2NGwyX2RldmljZSAJICAgdjRsMl9kZXY7CiAKIAkvKiBwY2kgc3R1ZmYgKi8KIAlzdHJ1Y3QgcGNpX2RldiAgICAgICAgICAgICAqcGNpOwpAQCAtMzE2LDYgKzMyMyw3IEBACiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgcmFkaW9fdHlwZTsKIAl1bnNpZ25lZCBjaGFyICAgICAgICAgICAgICByYWRpb19hZGRyOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgIGhhc19yYWRpbzsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgCSAgICpzZF9jeDI1ODQwOwogCiAJLyogVjRsICovCiAJdTMyICAgICAgICAgICAgICAgICAgICAgICAgZnJlcTsKQEAgLTMzNiw2ICszNDQsMTQgQEAKIAogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgY3gyMzg4NV9kZXYgKnRvX2N4MjM4ODUoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3QgY3gyMzg4NV9kZXYsIHY0bDJfZGV2KTsKK30KKworI2RlZmluZSBjYWxsX2FsbChkZXYsIG8sIGYsIGFyZ3MuLi4pIFwKKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmZGV2LT52NGwyX2RldiwgMCwgbywgZiwgIyNhcmdzKQorCiBleHRlcm4gc3RydWN0IGxpc3RfaGVhZCBjeDIzODg1X2Rldmxpc3Q7CiAKICNkZWZpbmUgU1JBTV9DSDAxICAwIC8qIFZpZGVvIEEgKi8KQEAgLTQ1Miw4ICs0NjgsNiBAQAogLyogY3gyMzg4NS1pMmMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiBleHRlcm4gaW50IGN4MjM4ODVfaTJjX3JlZ2lzdGVyKHN0cnVjdCBjeDIzODg1X2kyYyAqYnVzKTsKIGV4dGVybiBpbnQgY3gyMzg4NV9pMmNfdW5yZWdpc3RlcihzdHJ1Y3QgY3gyMzg4NV9pMmMgKmJ1cyk7Ci1leHRlcm4gdm9pZCBjeDIzODg1X2NhbGxfaTJjX2NsaWVudHMoc3RydWN0IGN4MjM4ODVfaTJjICpidXMsIHVuc2lnbmVkIGludCBjbWQsCi0JCQkJICAgICB2b2lkICphcmcpOwogZXh0ZXJuIHZvaWQgY3gyMzg4NV9hdl9jbGsoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYsIGludCBlbmFibGUpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L25ldHVwLWVlcHJvbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L25ldHVwLWVlcHJvbS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0MmJiYmIKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvbmV0dXAtZWVwcm9tLmMKQEAgLTAsMCArMSwxMDcgQEAKKworLyoKKyAqIG5ldHVwLWVlcHJvbS5jCisgKgorICogMjRMQzAyIEVFUFJPTSBkcml2ZXIgaW4gY29uanVuY3Rpb24gd2l0aCBOZXRVUCBEdWFsIERWQi1TMiBDSSBjYXJkCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5ldFVQIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBBYnlsYXkgT3NwYW4gPGFvc3BhbkBuZXR1cC5ydT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworIworI2luY2x1ZGUgImN4MjM4ODUuaCIKKyNpbmNsdWRlICJuZXR1cC1lZXByb20uaCIKKworI2RlZmluZSBFRVBST01fSTJDX0FERFIgMHg1MAorCitpbnQgbmV0dXBfZWVwcm9tX3JlYWQoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgdTggYWRkcikKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGNoYXIgYnVmWzJdOworCisJLyogUmVhZCBmcm9tIEVFUFJPTSAqLworCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0geworCQl7CisJCQkuYWRkcgk9IEVFUFJPTV9JMkNfQUREUiwKKwkJCS5mbGFncwk9IDAsCisJCQkuYnVmCT0gJmJ1ZlswXSwKKwkJCS5sZW4JPSAxCisJCX0sIHsKKwkJCS5hZGRyCT0gRUVQUk9NX0kyQ19BRERSLAorCQkJLmZsYWdzCT0gSTJDX01fUkQsCisJCQkuYnVmCT0gJmJ1ZlsxXSwKKwkJCS5sZW4JPSAxCisJCX0KKworCX07CisKKwlidWZbMF0gPSBhZGRyOworCWJ1ZlsxXSA9IDB4MDsKKworCXJldCA9IGkyY190cmFuc2ZlcihpMmNfYWRhcCwgbXNnLCAyKTsKKworCWlmIChyZXQgIT0gMikgeworCQlwcmludGsoS0VSTl9FUlIgImVlcHJvbSBpMmMgcmVhZCBlcnJvciwgc3RhdHVzPSVkXG4iLCByZXQpOworCQlyZXR1cm4gLTE7CisJfQorCisJcmV0dXJuIGJ1ZlsxXTsKK307CisKK2ludCBuZXR1cF9lZXByb21fd3JpdGUoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgdTggYWRkciwgdTggZGF0YSkKK3sKKwlpbnQgcmV0OworCXVuc2lnbmVkIGNoYXIgYnVmd1syXTsKKworCS8qIFdyaXRlIGludG8gRUVQUk9NICovCisJc3RydWN0IGkyY19tc2cgbXNnW10gPSB7CisJCXsKKwkJCS5hZGRyCT0gRUVQUk9NX0kyQ19BRERSLAorCQkJLmZsYWdzCT0gMCwKKwkJCS5idWYJPSAmYnVmd1swXSwKKwkJCS5sZW4JPSAyCisJCX0KKwl9OworCisJYnVmd1swXSA9IGFkZHI7CisJYnVmd1sxXSA9IGRhdGE7CisKKwlyZXQgPSBpMmNfdHJhbnNmZXIoaTJjX2FkYXAsIG1zZywgMSk7CisKKwlpZiAocmV0ICE9IDEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJlZXByb20gaTJjIHdyaXRlIGVycm9yLCBzdGF0dXM9JWRcbiIsIHJldCk7CisJCXJldHVybiAtMTsKKwl9CisKKwltZGVsYXkoMTApOyAvKiBwcm9waHlsYWN0aWMgZGVsYXksIGRhdGFzaGVldCB3cml0ZSBjeWNsZSB0aW1lID0gNSBtcyAqLworCXJldHVybiAwOworfTsKKwordm9pZCBuZXR1cF9nZXRfY2FyZF9pbmZvKHN0cnVjdCBpMmNfYWRhcHRlciAqaTJjX2FkYXAsCisJCQkJc3RydWN0IG5ldHVwX2NhcmRfaW5mbyAqY2luZm8pCit7CisJaW50IGksIGo7CisKKwljaW5mby0+cmV2ID0gIG5ldHVwX2VlcHJvbV9yZWFkKGkyY19hZGFwLCAxMyk7CisKKwlmb3IgKGkgPSAwLCBqID0gMDsgaSA8IDY7IGkrKywgaisrKQorCQljaW5mby0+cG9ydFswXS5tYWNbal0gPSAgbmV0dXBfZWVwcm9tX3JlYWQoaTJjX2FkYXAsIGkpOworCisJZm9yIChpID0gNiwgaiA9IDA7IGkgPCAxMjsgaSsrLCBqKyspCisJCWNpbmZvLT5wb3J0WzFdLm1hY1tqXSA9ICBuZXR1cF9lZXByb21fcmVhZChpMmNfYWRhcCwgaSk7Cit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L25ldHVwLWVlcHJvbS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L25ldHVwLWVlcHJvbS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjEzOTI2ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvbmV0dXAtZWVwcm9tLmgKQEAgLTAsMCArMSw0MiBAQAorLyoKKyAqIG5ldHVwLWVlcHJvbS5oCisgKgorICogMjRMQzAyIEVFUFJPTSBkcml2ZXIgaW4gY29uanVuY3Rpb24gd2l0aCBOZXRVUCBEdWFsIERWQi1TMiBDSSBjYXJkCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5ldFVQIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBBYnlsYXkgT3NwYW4gPGFvc3BhbkBuZXR1cC5ydT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNjc1IE1hc3MgQXZlLCBDYW1icmlkZ2UsIE1BIDAyMTM5LCBVU0EuCisgKi8KKworI2lmbmRlZiBORVRVUF9FRVBST01fSAorI2RlZmluZSBORVRVUF9FRVBST01fSAorCitzdHJ1Y3QgbmV0dXBfcG9ydF9pbmZvIHsKKwl1OCBtYWNbNl07LyogY2FyZCBNQUMgYWRkcmVzcyAqLworfTsKKworc3RydWN0IG5ldHVwX2NhcmRfaW5mbyB7CisJc3RydWN0IG5ldHVwX3BvcnRfaW5mbyBwb3J0WzJdOy8qIHBvcnRzIC0gMSwyICovCisJdTggcmV2Oy8qIGNhcmQgcmV2aXNpb24gKi8KK307CisKK2V4dGVybiBpbnQgbmV0dXBfZWVwcm9tX3JlYWQoc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwgdTggYWRkcik7CitleHRlcm4gaW50IG5ldHVwX2VlcHJvbV93cml0ZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCB1OCBhZGRyLCB1OCBkYXRhKTsKK2V4dGVybiB2b2lkIG5ldHVwX2dldF9jYXJkX2luZm8oc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcCwKKwkJCQlzdHJ1Y3QgbmV0dXBfY2FyZF9pbmZvICpjaW5mbyk7CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L25ldHVwLWluaXQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9uZXR1cC1pbml0LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjQ4OTNlNgotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyMzg4NS9uZXR1cC1pbml0LmMKQEAgLTAsMCArMSwxMjUgQEAKKy8qCisgKiBuZXR1cC1pbml0LmMKKyAqCisgKiBOZXRVUCBEdWFsIERWQi1TMiBDSSBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgTmV0VVAgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IElnb3IgTS4gTGlwbGlhbmluIDxsaXBsaWFuaW5AbmV0dXAucnU+CisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgQWJ5bGF5IE9zcGFuIDxhb3NwYW5AbmV0dXAucnU+CisgKgorICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgKgorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjeDIzODg1LmgiCisKK3N0YXRpYyB2b2lkIGkyY19hdl93cml0ZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgdTE2IHJlZywgdTggdmFsKQoreworCWludCByZXQ7CisJdTggYnVmWzNdOworCXN0cnVjdCBpMmNfbXNnIG1zZyA9IHsKKwkJLmFkZHIJPSAweDg4ID4+IDEsCisJCS5mbGFncwk9IDAsCisJCS5idWYJPSBidWYsCisJCS5sZW4JPSAzCisJfTsKKworCWJ1ZlswXSA9IHJlZyA+PiA4OworCWJ1ZlsxXSA9IHJlZyAmIDB4ZmY7CisJYnVmWzJdID0gdmFsOworCisJcmV0ID0gaTJjX3RyYW5zZmVyKGkyYywgJm1zZywgMSk7CisKKwlpZiAocmV0ICE9IDEpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGkyYyB3cml0ZSBlcnJvciFcbiIsIF9fZnVuY19fKTsKK30KKworc3RhdGljIHZvaWQgaTJjX2F2X3dyaXRlNChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgdTE2IHJlZywgdTMyIHZhbCkKK3sKKwlpbnQgcmV0OworCXU4IGJ1Zls2XTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyCT0gMHg4OCA+PiAxLAorCQkuZmxhZ3MJPSAwLAorCQkuYnVmCT0gYnVmLAorCQkubGVuCT0gNgorCX07CisKKwlidWZbMF0gPSByZWcgPj4gODsKKwlidWZbMV0gPSByZWcgJiAweGZmOworCWJ1ZlsyXSA9IHZhbCAmIDB4ZmY7CisJYnVmWzNdID0gKHZhbCA+PiA4KSAmIDB4ZmY7CisJYnVmWzRdID0gKHZhbCA+PiAxNikgJiAweGZmOworCWJ1Zls1XSA9IHZhbCA+PiAyNDsKKworCXJldCA9IGkyY190cmFuc2ZlcihpMmMsICZtc2csIDEpOworCisJaWYgKHJldCAhPSAxKQorCQlwcmludGsoS0VSTl9FUlIgIiVzOiBpMmMgd3JpdGUgZXJyb3IhXG4iLCBfX2Z1bmNfXyk7Cit9CisKK3N0YXRpYyB1OCBpMmNfYXZfcmVhZChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgdTE2IHJlZykKK3sKKwlpbnQgcmV0OworCXU4IGJ1ZlsyXTsKKwlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7CisJCS5hZGRyCT0gMHg4OCA+PiAxLAorCQkuZmxhZ3MJPSAwLAorCQkuYnVmCT0gYnVmLAorCQkubGVuCT0gMgorCX07CisKKwlidWZbMF0gPSByZWcgPj4gODsKKwlidWZbMV0gPSByZWcgJiAweGZmOworCisJcmV0ID0gaTJjX3RyYW5zZmVyKGkyYywgJm1zZywgMSk7CisKKwlpZiAocmV0ICE9IDEpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGkyYyB3cml0ZSBlcnJvciFcbiIsIF9fZnVuY19fKTsKKworCW1zZy5mbGFncyA9IEkyQ19NX1JEOworCW1zZy5sZW4gPSAxOworCisJcmV0ID0gaTJjX3RyYW5zZmVyKGkyYywgJm1zZywgMSk7CisKKwlpZiAocmV0ICE9IDEpCisJCXByaW50ayhLRVJOX0VSUiAiJXM6IGkyYyByZWFkIGVycm9yIVxuIiwgX19mdW5jX18pOworCisJcmV0dXJuIGJ1ZlswXTsKK30KKworc3RhdGljIHZvaWQgaTJjX2F2X2FuZF9vcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYywgdTE2IHJlZywgdW5zaWduZWQgYW5kX21hc2ssCisJCQkJCQkJCXU4IG9yX3ZhbHVlKQoreworCWkyY19hdl93cml0ZShpMmMsIHJlZywgKGkyY19hdl9yZWFkKGkyYywgcmVnKSAmIGFuZF9tYXNrKSB8IG9yX3ZhbHVlKTsKK30KKy8qIHNldCAyN01IeiBvbiBBVVhfQ0xLICovCit2b2lkIG5ldHVwX2luaXRpYWxpemUoc3RydWN0IGN4MjM4ODVfZGV2ICpkZXYpCit7CisJc3RydWN0IGN4MjM4ODVfaTJjICppMmNfYnVzID0gJmRldi0+aTJjX2J1c1syXTsKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyYyA9ICZpMmNfYnVzLT5pMmNfYWRhcDsKKworCS8qIFN0b3AgbWljcm9jb250cm9sbGVyICovCisJaTJjX2F2X2FuZF9vcihpMmMsIDB4ODAzLCB+MHgxMCwgMHgwMCk7CisKKwkvKiBBdXggUExMIGZyYWMgZm9yIDI3IE1IeiAqLworCWkyY19hdl93cml0ZTQoaTJjLCAweDExNCwgMHhlYTBlYjMpOworCisJLyogQXV4IFBMTCBpbnQgZm9yIDI3IE1IeiAqLworCWkyY19hdl93cml0ZTQoaTJjLCAweDExMCwgMHgwOTAzMTkpOworCisJLyogc3RhcnQgbWljcm9jb250cm9sbGVyICovCisJaTJjX2F2X2FuZF9vcihpMmMsIDB4ODAzLCB+MHgxMCwgMHgxMCk7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjM4ODUvbmV0dXAtaW5pdC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L25ldHVwLWluaXQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMjZhZTRiCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDIzODg1L25ldHVwLWluaXQuaApAQCAtMCwwICsxLDI1IEBACisvKgorICogbmV0dXAtaW5pdC5oCisgKgorICogTmV0VVAgRHVhbCBEVkItUzIgQ0kgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA5IE5ldFVQIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBJZ29yIE0uIExpcGxpYW5pbiA8bGlwbGlhbmluQG5ldHVwLnJ1PgorICogQ29weXJpZ2h0IChDKSAyMDA5IEFieWxheSBPc3BhbiA8YW9zcGFuQG5ldHVwLnJ1PgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICoKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyAqLworZXh0ZXJuIHZvaWQgbmV0dXBfaW5pdGlhbGl6ZShzdHJ1Y3QgY3gyMzg4NV9kZXYgKmRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1hdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtYXVkaW8uYwppbmRleCBkMTk5ZDgwLi45M2Q3NGJlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1hdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWF1ZGlvLmMKQEAgLTM2Myw3NSArMzYzLDc0IEBACiAJfQogfQogCi1pbnQgY3gyNTg0MF9hdWRpbyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCitpbnQgY3gyNTg0MF9zX2Nsb2NrX2ZyZXEoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyIGZyZXEpCiB7Ci0Jc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCkpOwotCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwgPSBhcmc7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKIAlpbnQgcmV0dmFsOwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFZJRElPQ19JTlRfQVVESU9fQ0xPQ0tfRlJFUToKLQkJaWYgKCFzdGF0ZS0+aXNfY3gyNTgzNikKLQkJCWN4MjU4NDBfYW5kX29yKGNsaWVudCwgMHg4MTAsIH4weDEsIDEpOwotCQlpZiAoc3RhdGUtPmF1ZF9pbnB1dCAhPSBDWDI1ODQwX0FVRElPX1NFUklBTCkgewotCQkJY3gyNTg0MF9hbmRfb3IoY2xpZW50LCAweDgwMywgfjB4MTAsIDApOwotCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4OGQzLCAweDFmKTsKLQkJfQotCQlyZXR2YWwgPSBzZXRfYXVkY2xrX2ZyZXEoY2xpZW50LCAqKHUzMiAqKWFyZyk7Ci0JCWlmIChzdGF0ZS0+YXVkX2lucHV0ICE9IENYMjU4NDBfQVVESU9fU0VSSUFMKSB7Ci0JCQljeDI1ODQwX2FuZF9vcihjbGllbnQsIDB4ODAzLCB+MHgxMCwgMHgxMCk7Ci0JCX0KLQkJaWYgKCFzdGF0ZS0+aXNfY3gyNTgzNikKLQkJCWN4MjU4NDBfYW5kX29yKGNsaWVudCwgMHg4MTAsIH4weDEsIDApOwotCQlyZXR1cm4gcmV0dmFsOworCWlmICghc3RhdGUtPmlzX2N4MjU4MzYpCisJCWN4MjU4NDBfYW5kX29yKGNsaWVudCwgMHg4MTAsIH4weDEsIDEpOworCWlmIChzdGF0ZS0+YXVkX2lucHV0ICE9IENYMjU4NDBfQVVESU9fU0VSSUFMKSB7CisJCWN4MjU4NDBfYW5kX29yKGNsaWVudCwgMHg4MDMsIH4weDEwLCAwKTsKKwkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4OGQzLCAweDFmKTsKKwl9CisJcmV0dmFsID0gc2V0X2F1ZGNsa19mcmVxKGNsaWVudCwgZnJlcSk7CisJaWYgKHN0YXRlLT5hdWRfaW5wdXQgIT0gQ1gyNTg0MF9BVURJT19TRVJJQUwpCisJCWN4MjU4NDBfYW5kX29yKGNsaWVudCwgMHg4MDMsIH4weDEwLCAweDEwKTsKKwlpZiAoIXN0YXRlLT5pc19jeDI1ODM2KQorCQljeDI1ODQwX2FuZF9vcihjbGllbnQsIDB4ODEwLCB+MHgxLCAwKTsKKwlyZXR1cm4gcmV0dmFsOworfQogCi0JY2FzZSBWSURJT0NfR19DVFJMOgotCQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQkJY3RybC0+dmFsdWUgPSBnZXRfdm9sdW1lKGNsaWVudCk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgotCQkJY3RybC0+dmFsdWUgPSBnZXRfYmFzcyhjbGllbnQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgotCQkJY3RybC0+dmFsdWUgPSBnZXRfdHJlYmxlKGNsaWVudCk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgotCQkJY3RybC0+dmFsdWUgPSBnZXRfYmFsYW5jZShjbGllbnQpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJCWN0cmwtPnZhbHVlID0gZ2V0X211dGUoY2xpZW50KTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KK2ludCBjeDI1ODQwX2F1ZGlvX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJY3RybC0+dmFsdWUgPSBnZXRfdm9sdW1lKGNsaWVudCk7CiAJCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfU19DVFJMOgotCQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQkJc2V0X3ZvbHVtZShjbGllbnQsIGN0cmwtPnZhbHVlKTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6Ci0JCQlzZXRfYmFzcyhjbGllbnQsIGN0cmwtPnZhbHVlKTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKLQkJCXNldF90cmVibGUoY2xpZW50LCBjdHJsLT52YWx1ZSk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgotCQkJc2V0X2JhbGFuY2UoY2xpZW50LCBjdHJsLT52YWx1ZSk7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgotCQkJc2V0X211dGUoY2xpZW50LCBjdHJsLT52YWx1ZSk7Ci0JCQlicmVhazsKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgorCQljdHJsLT52YWx1ZSA9IGdldF9iYXNzKGNsaWVudCk7CiAJCWJyZWFrOwotCisJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6CisJCWN0cmwtPnZhbHVlID0gZ2V0X3RyZWJsZShjbGllbnQpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CisJCWN0cmwtPnZhbHVlID0gZ2V0X2JhbGFuY2UoY2xpZW50KTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQljdHJsLT52YWx1ZSA9IGdldF9tdXRlKGNsaWVudCk7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KKwlyZXR1cm4gMDsKK30KIAoraW50IGN4MjU4NDBfYXVkaW9fc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQlzZXRfdm9sdW1lKGNsaWVudCwgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CisJCXNldF9iYXNzKGNsaWVudCwgY3RybC0+dmFsdWUpOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1RSRUJMRToKKwkJc2V0X3RyZWJsZShjbGllbnQsIGN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgorCQlzZXRfYmFsYW5jZShjbGllbnQsIGN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlzZXRfbXV0ZShjbGllbnQsIGN0cmwtPnZhbHVlKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jCmluZGV4IDI1ZWIzYmVjLi43MzdlZTRlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5jCkBAIC0zOSw3ICszOSw3IEBACiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KICNpbmNsdWRlIDxtZWRpYS9jeDI1ODQwLmg+CiAKICNpbmNsdWRlICJjeDI1ODQwLWNvcmUuaCIKQEAgLTQ4LDE1ICs0OCwxMiBAQAogTU9EVUxFX0FVVEhPUigiVWxmIEVrbHVuZCwgQ2hyaXMgS2VubmVkeSwgSGFucyBWZXJrdWlsLCBUeWxlciBUcmFmZm9yZCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDg4ID4+IDEsIEkyQ19DTElFTlRfRU5EIH07Ci0KIHN0YXRpYyBpbnQgY3gyNTg0MF9kZWJ1ZzsKIAogbW9kdWxlX3BhcmFtX25hbWVkKGRlYnVnLGN4MjU4NDBfZGVidWcsIGludCwgMDY0NCk7CiAKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1Z2dpbmcgbWVzc2FnZXMgWzA9T2ZmIChkZWZhdWx0KSAxPU9uXSIpOwogCi1JMkNfQ0xJRU5UX0lOU01PRDsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtNzYzLDcgKzc2MCw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCWlmIChjdHJsLT52YWx1ZSA8IC0xMjcgfHwgY3RybC0+dmFsdWUgPiAxMjcpIHsKKwkJaWYgKGN0cmwtPnZhbHVlIDwgLTEyOCB8fCBjdHJsLT52YWx1ZSA+IDEyNykgewogCQkJdjRsX2VycihjbGllbnQsICJpbnZhbGlkIGh1ZSBzZXR0aW5nICVkXG4iLCBjdHJsLT52YWx1ZSk7CiAJCQlyZXR1cm4gLUVSQU5HRTsKIAkJfQpAQCAtNzc4LDcgKzc3NSw3IEBACiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgogCQlpZiAoc3RhdGUtPmlzX2N4MjU4MzYpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmV0dXJuIGN4MjU4NDBfYXVkaW8oY2xpZW50LCBWSURJT0NfU19DVFJMLCBjdHJsKTsKKwkJcmV0dXJuIGN4MjU4NDBfYXVkaW9fc19jdHJsKHNkLCBjdHJsKTsKIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwpAQCAtODE1LDcgKzgxMiw3IEBACiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgogCQlpZiAoc3RhdGUtPmlzX2N4MjU4MzYpCiAJCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmV0dXJuIGN4MjU4NDBfYXVkaW8oY2xpZW50LCBWSURJT0NfR19DVFJMLCBjdHJsKTsKKwkJcmV0dXJuIGN4MjU4NDBfYXVkaW9fZ19jdHJsKHNkLCBjdHJsKTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC04MjcsMTEgKzgyNCw5IEBACiAKIHN0YXRpYyBpbnQgY3gyNTg0MF9nX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7Ci0KIAlzd2l0Y2ggKGZtdC0+dHlwZSkgewogCWNhc2UgVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkU6Ci0JCXJldHVybiBjeDI1ODQwX3ZiaShjbGllbnQsIFZJRElPQ19HX0ZNVCwgZm10KTsKKwkJcmV0dXJuIGN4MjU4NDBfdmJpX2dfZm10KHNkLCBmbXQpOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTg5MywxMCArODg4LDEwIEBACiAJCWJyZWFrOwogCiAJY2FzZSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRToKLQkJcmV0dXJuIGN4MjU4NDBfdmJpKGNsaWVudCwgVklESU9DX1NfRk1ULCBmbXQpOworCQlyZXR1cm4gY3gyNTg0MF92Ymlfc19mbXQoc2QsIGZtdCk7CiAKIAljYXNlIFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkU6Ci0JCXJldHVybiBjeDI1ODQwX3ZiaShjbGllbnQsIFZJRElPQ19TX0ZNVCwgZm10KTsKKwkJcmV0dXJuIGN4MjU4NDBfdmJpX3NfZm10KHNkLCBmbXQpOwogCiAJZGVmYXVsdDoKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMTAxLDYgKzEwOTYsMTYgQEAKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAorLyogVGhpcyBpbml0IG9wZXJhdGlvbiBtdXN0IGJlIGNhbGxlZCB0byBsb2FkIHRoZSBkcml2ZXIncyBmaXJtd2FyZS4KKyAgIFdpdGhvdXQgdGhpcyB0aGUgYXVkaW8gc3RhbmRhcmQgZGV0ZWN0aW9uIHdpbGwgZmFpbCBhbmQgeW91IHdpbGwKKyAgIG9ubHkgZ2V0IG1vbm8uCisKKyAgIFNpbmNlIGxvYWRpbmcgdGhlIGZpcm13YXJlIGlzIG9mdGVuIHByb2JsZW1hdGljIHdoZW4gdGhlIGRyaXZlciBpcworICAgY29tcGlsZWQgaW50byB0aGUga2VybmVsIEkgcmVjb21tZW5kIHBvc3Rwb25pbmcgY2FsbGluZyB0aGlzIGZ1bmN0aW9uCisgICB1bnRpbCB0aGUgZmlyc3Qgb3BlbiBvZiB0aGUgdmlkZW8gZGV2aWNlLiBBbm90aGVyIHJlYXNvbiBmb3IKKyAgIHBvc3Rwb25pbmcgaXQgaXMgdGhhdCBsb2FkaW5nIHRoaXMgZmlybXdhcmUgdGFrZXMgYSBsb25nIHRpbWUgKHNlY29uZHMpCisgICBkdWUgdG8gdGhlIHNsb3cgaTJjIGJ1cyBzcGVlZC4gU28gaXQgd2lsbCBzcGVlZCB1cCB0aGUgYm9vdCBwcm9jZXNzIGlmCisgICB5b3UgY2FuIGF2b2lkIGxvYWRpbmcgdGhlIGZ3IGFzIGxvbmcgYXMgdGhlIHZpZGVvIGRldmljZSBpc24ndCB1c2VkLiAgKi8KIHN0YXRpYyBpbnQgY3gyNTg0MF9pbml0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiB2YWwpCiB7CiAJc3RydWN0IGN4MjU4NDBfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwpAQCAtMTE0NiwyMCArMTE1MSw2IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCBjeDI1ODQwX2RlY29kZV92YmlfbGluZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kZWNvZGVfdmJpX2xpbmUgKnZiaSkKLXsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7Ci0KLQlyZXR1cm4gY3gyNTg0MF92YmkoY2xpZW50LCBWSURJT0NfSU5UX0RFQ09ERV9WQklfTElORSwgdmJpKTsKLX0KLQotc3RhdGljIGludCBjeDI1ODQwX3NfY2xvY2tfZnJlcShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgZnJlcSkKLXsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7Ci0KLQlyZXR1cm4gY3gyNTg0MF9hdWRpbyhjbGllbnQsIFZJRElPQ19JTlRfQVVESU9fQ0xPQ0tfRlJFUSwgJmZyZXEpOwotfQotCiBzdGF0aWMgaW50IGN4MjU4NDBfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkKIHsKIAlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CkBAIC0xMTk1LDEwICsxMTg2LDEyIEBACiAKIAlzd2l0Y2ggKHFjLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAyNTUsIDEsIDEyOCk7CiAJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMTI3LCAxLCA2NCk7CiAJY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWMpOworCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIC0xMjgsIDEyNywgMSwgMCk7CiAJZGVmYXVsdDoKIAkJYnJlYWs7CiAJfQpAQCAtMTIxMCwxMCArMTIwMywxMSBAQAogCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LAogCQkJCTY1NTM1IC8gMTAwLCBzdGF0ZS0+ZGVmYXVsdF92b2x1bWUpOwogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAwKTsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgogCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjKTsKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwgNjU1MzUgLyAxMDAsIDMyNzY4KTsKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CkBAIC0xMzgwLDE5ICsxMzc0LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBjeDI1ODQwX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCi17Ci0JLyogaWdub3JlIHRoaXMgY29tbWFuZCAqLwotCWlmIChjbWQgPT0gVFVORVJfU0VUX1RZUEVfQUREUiB8fCBjbWQgPT0gVFVORVJfU0VUX0NPTkZJRykKLQkJcmV0dXJuIDA7Ci0KLQkvKiBPbGQtc3R5bGUgZHJpdmVycyByZWx5IG9uIGluaXRpYWxpemF0aW9uIG9uIGZpcnN0IHVzZSwgc28KLQkgICBjYWxsIHRoZSBpbml0IHdoZW5ldmVyIGEgY29tbWFuZCBpcyBpc3N1ZWQgdG8gdGhpcyBkcml2ZXIuCi0JICAgTmV3LXN0eWxlIGRyaXZlcnMgdXNpbmcgdjRsMl9zdWJkZXYgc2hvdWxkIGNhbGwgaW5pdCBleHBsaWNpdGx5LiAqLwotCWN4MjU4NDBfaW5pdChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgMCk7Ci0JcmV0dXJuIHY0bDJfc3ViZGV2X2NvbW1hbmQoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIGNtZCwgYXJnKTsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBjeDI1ODQwX2NvcmVfb3BzID0gewpAQCAtMTUyOCw4ICsxNTA5LDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gImN4MjU4NDAiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9DWDI1ODQwLAotCS5jb21tYW5kID0gY3gyNTg0MF9jb21tYW5kLAogCS5wcm9iZSA9IGN4MjU4NDBfcHJvYmUsCiAJLnJlbW92ZSA9IGN4MjU4NDBfcmVtb3ZlLAogCS5pZF90YWJsZSA9IGN4MjU4NDBfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC1jb3JlLmgKaW5kZXggYmUwNTU4Mi4uOWFkMGViOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtY29yZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3gyNTg0MC9jeDI1ODQwLWNvcmUuaApAQCAtNzUsMTEgKzc1LDE1IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBjeDI1ODUwLWF1ZGlvLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotaW50IGN4MjU4NDBfYXVkaW8oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKIHZvaWQgY3gyNTg0MF9hdWRpb19zZXRfcGF0aChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KTsKK2ludCBjeDI1ODQwX3NfY2xvY2tfZnJlcShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgZnJlcSk7CitpbnQgY3gyNTg0MF9hdWRpb19nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCk7CitpbnQgY3gyNTg0MF9hdWRpb19zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCk7CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBjeDI1ODUwLXZiaS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwotaW50IGN4MjU4NDBfdmJpKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7CitpbnQgY3gyNTg0MF92Ymlfc19mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpOworaW50IGN4MjU4NDBfdmJpX2dfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KTsKK2ludCBjeDI1ODQwX2RlY29kZV92YmlfbGluZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kZWNvZGVfdmJpX2xpbmUgKnZiaSk7CiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDI1ODQwL2N4MjU4NDAtdmJpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC12YmkuYwppbmRleCAwM2YwOWIyLi4zNWY2NTkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC12YmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4MjU4NDAvY3gyNTg0MC12YmkuYwpAQCAtODIsMTk5ICs4MiwxODEgQEAKIAlyZXR1cm4gZXJyICYgMHhmMDsKIH0KIAotaW50IGN4MjU4NDBfdmJpKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK2ludCBjeDI1ODQwX3ZiaV9nX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKIHsKLQlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7Ci0Jc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQ7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKIAlzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2Zvcm1hdCAqc3ZiaTsKKwlzdGF0aWMgY29uc3QgdTE2IGxjcjJ2YmlbXSA9IHsKKwkJMCwgVjRMMl9TTElDRURfVEVMRVRFWFRfQiwgMCwJLyogMSAqLworCQkwLCBWNEwyX1NMSUNFRF9XU1NfNjI1LCAwLAkvKiA0ICovCisJCVY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1LAkvKiA2ICovCisJCTAsIDAsIFY0TDJfU0xJQ0VEX1ZQUywgMCwgMCwJLyogOSAqLworCQkwLCAwLCAwLCAwCisJfTsKKwlpbnQgaXNfcGFsID0gIShzdGF0ZS0+c3RkICYgVjRMMl9TVERfNTI1XzYwKTsKKwlpbnQgaTsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSBWSURJT0NfR19GTVQ6Ci0JewotCQlzdGF0aWMgdTE2IGxjcjJ2YmlbXSA9IHsKLQkJCTAsIFY0TDJfU0xJQ0VEX1RFTEVURVhUX0IsIDAsCS8qIDEgKi8KLQkJCTAsIFY0TDJfU0xJQ0VEX1dTU182MjUsIDAsCS8qIDQgKi8KLQkJCVY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1LAkvKiA2ICovCi0JCQkwLCAwLCBWNEwyX1NMSUNFRF9WUFMsIDAsIDAsCS8qIDkgKi8KLQkJCTAsIDAsIDAsIDAKLQkJfTsKLQkJaW50IGlzX3BhbCA9ICEoc3RhdGUtPnN0ZCAmIFY0TDJfU1REXzUyNV82MCk7Ci0JCWludCBpOworCWlmIChmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCXN2YmkgPSAmZm10LT5mbXQuc2xpY2VkOworCW1lbXNldChzdmJpLCAwLCBzaXplb2YoKnN2YmkpKTsKKwkvKiB3ZSdyZSBkb25lIGlmIHJhdyBWQkkgaXMgYWN0aXZlICovCisJaWYgKChjeDI1ODQwX3JlYWQoY2xpZW50LCAweDQwNCkgJiAweDEwKSA9PSAwKQorCQlyZXR1cm4gMDsKIAotCQlmbXQgPSBhcmc7Ci0JCWlmIChmbXQtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJc3ZiaSA9ICZmbXQtPmZtdC5zbGljZWQ7Ci0JCW1lbXNldChzdmJpLCAwLCBzaXplb2YoKnN2YmkpKTsKLQkJLyogd2UncmUgZG9uZSBpZiByYXcgVkJJIGlzIGFjdGl2ZSAqLwotCQlpZiAoKGN4MjU4NDBfcmVhZChjbGllbnQsIDB4NDA0KSAmIDB4MTApID09IDApCi0JCQlicmVhazsKKwlpZiAoaXNfcGFsKSB7CisJCWZvciAoaSA9IDc7IGkgPD0gMjM7IGkrKykgeworCQkJdTggdiA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4NDI0ICsgaSAtIDcpOwogCi0JCWlmIChpc19wYWwpIHsKLQkJCWZvciAoaSA9IDc7IGkgPD0gMjM7IGkrKykgewotCQkJCXU4IHYgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDQyNCArIGkgLSA3KTsKLQotCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPSBsY3IydmJpW3YgPj4gNF07Ci0JCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IGxjcjJ2YmlbdiAmIDB4Zl07Ci0JCQkJc3ZiaS0+c2VydmljZV9zZXQgfD0KLQkJCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSB8IHN2YmktPnNlcnZpY2VfbGluZXNbMV1baV07Ci0JCQl9CisJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldID0gbGNyMnZiaVt2ID4+IDRdOworCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IGxjcjJ2YmlbdiAmIDB4Zl07CisJCQlzdmJpLT5zZXJ2aWNlX3NldCB8PSBzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldIHwKKwkJCQkJICAgICBzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldOwogCQl9Ci0JCWVsc2UgewotCQkJZm9yIChpID0gMTA7IGkgPD0gMjE7IGkrKykgewotCQkJCXU4IHYgPSBjeDI1ODQwX3JlYWQoY2xpZW50LCAweDQyNCArIGkgLSAxMCk7CisJfSBlbHNlIHsKKwkJZm9yIChpID0gMTA7IGkgPD0gMjE7IGkrKykgeworCQkJdTggdiA9IGN4MjU4NDBfcmVhZChjbGllbnQsIDB4NDI0ICsgaSAtIDEwKTsKIAotCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPSBsY3IydmJpW3YgPj4gNF07Ci0JCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IGxjcjJ2YmlbdiAmIDB4Zl07Ci0JCQkJc3ZiaS0+c2VydmljZV9zZXQgfD0KLQkJCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSB8IHN2YmktPnNlcnZpY2VfbGluZXNbMV1baV07Ci0JCQl9CisJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldID0gbGNyMnZiaVt2ID4+IDRdOworCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IGxjcjJ2YmlbdiAmIDB4Zl07CisJCQlzdmJpLT5zZXJ2aWNlX3NldCB8PSBzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldIHwKKwkJCQkJICAgICBzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldOwogCQl9Ci0JCWJyZWFrOwogCX0KKwlyZXR1cm4gMDsKK30KIAotCWNhc2UgVklESU9DX1NfRk1UOgotCXsKLQkJaW50IGlzX3BhbCA9ICEoc3RhdGUtPnN0ZCAmIFY0TDJfU1REXzUyNV82MCk7Ci0JCWludCB2Ymlfb2Zmc2V0ID0gaXNfcGFsID8gMSA6IDA7Ci0JCWludCBpLCB4OwotCQl1OCBsY3JbMjRdOworaW50IGN4MjU4NDBfdmJpX3NfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlzdHJ1Y3QgY3gyNTg0MF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7CisJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9mb3JtYXQgKnN2Ymk7CisJaW50IGlzX3BhbCA9ICEoc3RhdGUtPnN0ZCAmIFY0TDJfU1REXzUyNV82MCk7CisJaW50IHZiaV9vZmZzZXQgPSBpc19wYWwgPyAxIDogMDsKKwlpbnQgaSwgeDsKKwl1OCBsY3JbMjRdOwogCi0JCWZtdCA9IGFyZzsKLQkJaWYgKGZtdC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRSAmJgotCQkgICAgZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJc3ZiaSA9ICZmbXQtPmZtdC5zbGljZWQ7Ci0JCWlmIChmbXQtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkgewotCQkJLyogcmF3IFZCSSAqLwotCQkJbWVtc2V0KHN2YmksIDAsIHNpemVvZigqc3ZiaSkpOwotCi0JCQkvKiBTZXR1cCBzdGFuZGFyZCAqLwotCQkJY3gyNTg0MF9zdGRfc2V0dXAoY2xpZW50KTsKLQotCQkJLyogVkJJIE9mZnNldCAqLwotCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDdmLCB2Ymlfb2Zmc2V0KTsKLQkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQwNCwgMHgyZSk7Ci0JCQlicmVhazsKLQkJfQotCi0JCWZvciAoeCA9IDA7IHggPD0gMjM7IHgrKykKLQkJCWxjclt4XSA9IDB4MDA7CisJaWYgKGZtdC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1NMSUNFRF9WQklfQ0FQVFVSRSAmJgorCQkJZm10LT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVkJJX0NBUFRVUkUpCisJCXJldHVybiAtRUlOVkFMOworCXN2YmkgPSAmZm10LT5mbXQuc2xpY2VkOworCWlmIChmbXQtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WQklfQ0FQVFVSRSkgeworCQkvKiByYXcgVkJJICovCisJCW1lbXNldChzdmJpLCAwLCBzaXplb2YoKnN2YmkpKTsKIAogCQkvKiBTZXR1cCBzdGFuZGFyZCAqLwogCQljeDI1ODQwX3N0ZF9zZXR1cChjbGllbnQpOwogCi0JCS8qIFNsaWNlZCBWQkkgKi8KLQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDA0LCAweDMyKTsJLyogQW5jaWxsYXJ5IGRhdGEgKi8KLQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDA2LCAweDEzKTsKKwkJLyogVkJJIE9mZnNldCAqLwogCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0N2YsIHZiaV9vZmZzZXQpOwotCi0JCWlmIChpc19wYWwpIHsKLQkJCWZvciAoaSA9IDA7IGkgPD0gNjsgaSsrKQotCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPQotCQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gMDsKLQkJfSBlbHNlIHsKLQkJCWZvciAoaSA9IDA7IGkgPD0gOTsgaSsrKQotCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPQotCQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzFdW2ldID0gMDsKLQotCQkJZm9yIChpID0gMjI7IGkgPD0gMjM7IGkrKykKLQkJCQlzdmJpLT5zZXJ2aWNlX2xpbmVzWzBdW2ldID0KLQkJCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IDA7Ci0JCX0KLQotCQlmb3IgKGkgPSA3OyBpIDw9IDIzOyBpKyspIHsKLQkJCWZvciAoeCA9IDA7IHggPD0gMTsgeCsrKSB7Ci0JCQkJc3dpdGNoIChzdmJpLT5zZXJ2aWNlX2xpbmVzWzEteF1baV0pIHsKLQkJCQljYXNlIFY0TDJfU0xJQ0VEX1RFTEVURVhUX0I6Ci0JCQkJCWxjcltpXSB8PSAxIDw8ICg0ICogeCk7Ci0JCQkJCWJyZWFrOwotCQkJCWNhc2UgVjRMMl9TTElDRURfV1NTXzYyNToKLQkJCQkJbGNyW2ldIHw9IDQgPDwgKDQgKiB4KTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBWNEwyX1NMSUNFRF9DQVBUSU9OXzUyNToKLQkJCQkJbGNyW2ldIHw9IDYgPDwgKDQgKiB4KTsKLQkJCQkJYnJlYWs7Ci0JCQkJY2FzZSBWNEwyX1NMSUNFRF9WUFM6Ci0JCQkJCWxjcltpXSB8PSA5IDw8ICg0ICogeCk7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQkJfQotCi0JCWlmIChpc19wYWwpIHsKLQkJCWZvciAoeCA9IDEsIGkgPSAweDQyNDsgaSA8PSAweDQzNDsgaSsrLCB4KyspIHsKLQkJCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgaSwgbGNyWzYgKyB4XSk7Ci0JCQl9Ci0JCX0KLQkJZWxzZSB7Ci0JCQlmb3IgKHggPSAxLCBpID0gMHg0MjQ7IGkgPD0gMHg0MzA7IGkrKywgeCsrKSB7Ci0JCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIGksIGxjcls5ICsgeF0pOwotCQkJfQotCQkJZm9yIChpID0gMHg0MzE7IGkgPD0gMHg0MzQ7IGkrKykgewotCQkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCBpLCAwKTsKLQkJCX0KLQkJfQotCi0JCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQzYywgMHgxNik7Ci0KLQkJaWYgKGlzX3BhbCkgewotCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDc0LCAweDJhKTsKLQkJfSBlbHNlIHsKLQkJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ3NCwgMHgyMik7Ci0JCX0KLQkJYnJlYWs7CisJCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQwNCwgMHgyZSk7CisJCXJldHVybiAwOwogCX0KIAotCWNhc2UgVklESU9DX0lOVF9ERUNPREVfVkJJX0xJTkU6Ci0JewotCQlzdHJ1Y3QgdjRsMl9kZWNvZGVfdmJpX2xpbmUgKnZiaSA9IGFyZzsKLQkJdTggKnAgPSB2YmktPnA7Ci0JCWludCBpZDEsIGlkMiwgbCwgZXJyID0gMDsKKwlmb3IgKHggPSAwOyB4IDw9IDIzOyB4KyspCisJCWxjclt4XSA9IDB4MDA7CiAKLQkJaWYgKHBbMF0gfHwgcFsxXSAhPSAweGZmIHx8IHBbMl0gIT0gMHhmZiB8fAotCQkgICAgKHBbM10gIT0gMHg1NSAmJiBwWzNdICE9IDB4OTEpKSB7Ci0JCQl2YmktPmxpbmUgPSB2YmktPnR5cGUgPSAwOwotCQkJYnJlYWs7Ci0JCX0KKwkvKiBTZXR1cCBzdGFuZGFyZCAqLworCWN4MjU4NDBfc3RkX3NldHVwKGNsaWVudCk7CiAKLQkJcCArPSA0OwotCQlpZDEgPSBwWy0xXTsKLQkJaWQyID0gcFswXSAmIDB4ZjsKLQkJbCA9IHBbMl0gJiAweDNmOwotCQlsICs9IHN0YXRlLT52YmlfbGluZV9vZmZzZXQ7Ci0JCXAgKz0gNDsKKwkvKiBTbGljZWQgVkJJICovCisJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDA0LCAweDMyKTsJLyogQW5jaWxsYXJ5IGRhdGEgKi8KKwljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0MDYsIDB4MTMpOworCWN4MjU4NDBfd3JpdGUoY2xpZW50LCAweDQ3ZiwgdmJpX29mZnNldCk7CiAKLQkJc3dpdGNoIChpZDIpIHsKLQkJY2FzZSAxOgotCQkJaWQyID0gVjRMMl9TTElDRURfVEVMRVRFWFRfQjsKLQkJCWJyZWFrOwotCQljYXNlIDQ6Ci0JCQlpZDIgPSBWNEwyX1NMSUNFRF9XU1NfNjI1OwotCQkJYnJlYWs7Ci0JCWNhc2UgNjoKLQkJCWlkMiA9IFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1OwotCQkJZXJyID0gIW9kZF9wYXJpdHkocFswXSkgfHwgIW9kZF9wYXJpdHkocFsxXSk7Ci0JCQlicmVhazsKLQkJY2FzZSA5OgotCQkJaWQyID0gVjRMMl9TTElDRURfVlBTOwotCQkJaWYgKGRlY29kZV92cHMocCwgcCkgIT0gMCkgewotCQkJCWVyciA9IDE7CisJaWYgKGlzX3BhbCkgeworCQlmb3IgKGkgPSAwOyBpIDw9IDY7IGkrKykKKwkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPQorCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMV1baV0gPSAwOworCX0gZWxzZSB7CisJCWZvciAoaSA9IDA7IGkgPD0gOTsgaSsrKQorCQkJc3ZiaS0+c2VydmljZV9saW5lc1swXVtpXSA9CisJCQkJc3ZiaS0+c2VydmljZV9saW5lc1sxXVtpXSA9IDA7CisKKwkJZm9yIChpID0gMjI7IGkgPD0gMjM7IGkrKykKKwkJCXN2YmktPnNlcnZpY2VfbGluZXNbMF1baV0gPQorCQkJCXN2YmktPnNlcnZpY2VfbGluZXNbMV1baV0gPSAwOworCX0KKworCWZvciAoaSA9IDc7IGkgPD0gMjM7IGkrKykgeworCQlmb3IgKHggPSAwOyB4IDw9IDE7IHgrKykgeworCQkJc3dpdGNoIChzdmJpLT5zZXJ2aWNlX2xpbmVzWzEteF1baV0pIHsKKwkJCWNhc2UgVjRMMl9TTElDRURfVEVMRVRFWFRfQjoKKwkJCQlsY3JbaV0gfD0gMSA8PCAoNCAqIHgpOworCQkJCWJyZWFrOworCQkJY2FzZSBWNEwyX1NMSUNFRF9XU1NfNjI1OgorCQkJCWxjcltpXSB8PSA0IDw8ICg0ICogeCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1OgorCQkJCWxjcltpXSB8PSA2IDw8ICg0ICogeCk7CisJCQkJYnJlYWs7CisJCQljYXNlIFY0TDJfU0xJQ0VEX1ZQUzoKKwkJCQlsY3JbaV0gfD0gOSA8PCAoNCAqIHgpOworCQkJCWJyZWFrOwogCQkJfQotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlpZDIgPSAwOworCQl9CisJfQorCisJaWYgKGlzX3BhbCkgeworCQlmb3IgKHggPSAxLCBpID0gMHg0MjQ7IGkgPD0gMHg0MzQ7IGkrKywgeCsrKQorCQkJY3gyNTg0MF93cml0ZShjbGllbnQsIGksIGxjcls2ICsgeF0pOworCX0gZWxzZSB7CisJCWZvciAoeCA9IDEsIGkgPSAweDQyNDsgaSA8PSAweDQzMDsgaSsrLCB4KyspCisJCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgaSwgbGNyWzkgKyB4XSk7CisJCWZvciAoaSA9IDB4NDMxOyBpIDw9IDB4NDM0OyBpKyspCisJCQljeDI1ODQwX3dyaXRlKGNsaWVudCwgaSwgMCk7CisJfQorCisJY3gyNTg0MF93cml0ZShjbGllbnQsIDB4NDNjLCAweDE2KTsKKwljeDI1ODQwX3dyaXRlKGNsaWVudCwgMHg0NzQsIGlzX3BhbCA/IDB4MmEgOiAweDIyKTsKKwlyZXR1cm4gMDsKK30KKworaW50IGN4MjU4NDBfZGVjb2RlX3ZiaV9saW5lKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RlY29kZV92YmlfbGluZSAqdmJpKQoreworCXN0cnVjdCBjeDI1ODQwX3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwl1OCAqcCA9IHZiaS0+cDsKKwlpbnQgaWQxLCBpZDIsIGwsIGVyciA9IDA7CisKKwlpZiAocFswXSB8fCBwWzFdICE9IDB4ZmYgfHwgcFsyXSAhPSAweGZmIHx8CisJCQkocFszXSAhPSAweDU1ICYmIHBbM10gIT0gMHg5MSkpIHsKKwkJdmJpLT5saW5lID0gdmJpLT50eXBlID0gMDsKKwkJcmV0dXJuIDA7CisJfQorCisJcCArPSA0OworCWlkMSA9IHBbLTFdOworCWlkMiA9IHBbMF0gJiAweGY7CisJbCA9IHBbMl0gJiAweDNmOworCWwgKz0gc3RhdGUtPnZiaV9saW5lX29mZnNldDsKKwlwICs9IDQ7CisKKwlzd2l0Y2ggKGlkMikgeworCWNhc2UgMToKKwkJaWQyID0gVjRMMl9TTElDRURfVEVMRVRFWFRfQjsKKwkJYnJlYWs7CisJY2FzZSA0OgorCQlpZDIgPSBWNEwyX1NMSUNFRF9XU1NfNjI1OworCQlicmVhazsKKwljYXNlIDY6CisJCWlkMiA9IFY0TDJfU0xJQ0VEX0NBUFRJT05fNTI1OworCQllcnIgPSAhb2RkX3Bhcml0eShwWzBdKSB8fCAhb2RkX3Bhcml0eShwWzFdKTsKKwkJYnJlYWs7CisJY2FzZSA5OgorCQlpZDIgPSBWNEwyX1NMSUNFRF9WUFM7CisJCWlmIChkZWNvZGVfdnBzKHAsIHApICE9IDApCiAJCQllcnIgPSAxOwotCQkJYnJlYWs7Ci0JCX0KLQotCQl2YmktPnR5cGUgPSBlcnIgPyAwIDogaWQyOwotCQl2YmktPmxpbmUgPSBlcnIgPyAwIDogbDsKLQkJdmJpLT5pc19zZWNvbmRfZmllbGQgPSBlcnIgPyAwIDogKGlkMSA9PSAweDU1KTsKLQkJdmJpLT5wID0gcDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJaWQyID0gMDsKKwkJZXJyID0gMTsKIAkJYnJlYWs7CiAJfQotCX0KIAorCXZiaS0+dHlwZSA9IGVyciA/IDAgOiBpZDI7CisJdmJpLT5saW5lID0gZXJyID8gMCA6IGw7CisJdmJpLT5pc19zZWNvbmRfZmllbGQgPSBlcnIgPyAwIDogKGlkMSA9PSAweDU1KTsKKwl2YmktPnAgPSBwOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvS2NvbmZpZwppbmRleCAyZDI1MGEyLi40OTk1Mjk4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvS2NvbmZpZwpAQCAtNjEsNyArNjEsNyBAQAogCXNlbGVjdCBEVkJfU1RWMDI5OSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfU1RWMDI4OCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQogCXNlbGVjdCBEVkJfU1RCNjAwMCBpZiAhRFZCX0ZFX0NVU1RPTUlTRQotCXNlbGVjdCBNRURJQV9UVU5FUl9TSU1QTEUgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCXNlbGVjdCBNRURJQV9UVU5FUl9TSU1QTEUgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlTRQogCS0tLWhlbHAtLS0KIAkgIFRoaXMgYWRkcyBzdXBwb3J0IGZvciBEVkIvQVRTQyBjYXJkcyBiYXNlZCBvbiB0aGUKIAkgIENvbmV4YW50IDIzODh4IGNoaXAuCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1ibGFja2JpcmQuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jCmluZGV4IDdmNWI4YmYuLjQ0ZWFjZmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWJsYWNrYmlyZC5jCkBAIC03NDYsNyArNzQ2LDYgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlzdHJsY3B5KGYtPmRlc2NyaXB0aW9uLCAiTVBFRyIsIHNpemVvZihmLT5kZXNjcmlwdGlvbikpOwotCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJZi0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfTVBFRzsKIAlyZXR1cm4gMDsKIH0KQEAgLTc1Nyw3ICs3NTYsNiBAQAogCXN0cnVjdCBjeDg4MDJfZmggICpmaCAgID0gcHJpdjsKIAlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2ICA9IGZoLT5kZXY7CiAKLQlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgID0gVjRMMl9QSVhfRk1UX01QRUc7CiAJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOwogCWYtPmZtdC5waXguc2l6ZWltYWdlICAgID0gZGV2LT50c19wYWNrZXRfc2l6ZSAqIGRldi0+dHNfcGFja2V0X2NvdW50OyAvKiAxODggKiA0ICogMTAyNDsgKi8KQEAgLTc3Niw3ICs3NzQsNiBAQAogCXN0cnVjdCBjeDg4MDJfZmggICpmaCAgID0gcHJpdjsKIAlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2ICA9IGZoLT5kZXY7CiAKLQlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgID0gVjRMMl9QSVhfRk1UX01QRUc7CiAJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOwogCWYtPmZtdC5waXguc2l6ZWltYWdlICAgID0gZGV2LT50c19wYWNrZXRfc2l6ZSAqIGRldi0+dHNfcGFja2V0X2NvdW50OyAvKiAxODggKiA0ICogMTAyNDsgKi87CkBAIC03OTMsNyArNzkwLDYgQEAKIAlzdHJ1Y3QgY3g4ODAyX2RldiAqZGV2ICA9IGZoLT5kZXY7CiAJc3RydWN0IGN4ODhfY29yZSAgKmNvcmUgPSBkZXYtPmNvcmU7CiAKLQlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgID0gVjRMMl9QSVhfRk1UX01QRUc7CiAJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOwogCWYtPmZtdC5waXguc2l6ZWltYWdlICAgID0gZGV2LT50c19wYWNrZXRfc2l6ZSAqIGRldi0+dHNfcGFja2V0X2NvdW50OyAvKiAxODggKiA0ICogMTAyNDsgKi87CkBAIC05MTksNyArOTE1LDcgQEAKIAlzbnByaW50ZihuYW1lLCBzaXplb2YobmFtZSksICIlcy8yIiwgY29yZS0+bmFtZSk7CiAJcHJpbnRrKCIlcy8yOiA9PT09PT09PT09PT0gIFNUQVJUIExPRyBTVEFUVVMgID09PT09PT09PT09PVxuIiwKIAkJY29yZS0+bmFtZSk7Ci0JY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsIFZJRElPQ19MT0dfU1RBVFVTLCBOVUxMKTsKKwljYWxsX2FsbChjb3JlLCBjb3JlLCBsb2dfc3RhdHVzKTsKIAljeDIzNDF4X2xvZ19zdGF0dXMoJmRldi0+cGFyYW1zLCBuYW1lKTsKIAlwcmludGsoIiVzLzI6ID09PT09PT09PT09PT0gIEVORCBMT0cgU1RBVFVTICA9PT09PT09PT09PT09XG4iLAogCQljb3JlLT5uYW1lKTsKQEAgLTk3NCw3ICs5NzAsNyBAQAogCiAJZi0+dHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOwogCWYtPmZyZXF1ZW5jeSA9IGNvcmUtPmZyZXE7Ci0JY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsVklESU9DX0dfRlJFUVVFTkNZLGYpOworCWNhbGxfYWxsKGNvcmUsIHR1bmVyLCBnX2ZyZXF1ZW5jeSwgZik7CiAKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jYXJkcy5jCmluZGV4IDczM2VkZTMuLjAzNjM5NzEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY2FyZHMuYwpAQCAtNzMyLDYgKzczMiw4IEBACiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwkJLyogU29tZSB2YXJpYW50cyB1c2UgYSB0ZGE5ODc0IGFuZCBzbyBuZWVkIHRoZSB0dmF1ZGlvIG1vZHVsZS4gKi8KKwkJLmF1ZGlvX2NoaXAgICAgID0gVjRMMl9JREVOVF9UVkFVRElPLAogCQkuaW5wdXQgICAgICAgICAgPSB7ewogCQkJLnR5cGUgICA9IENYODhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICA9IDAsCkBAIC0xOTM0LDYgKzE5MzYsMzkgQEAKIAkJfSB9LAogCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAogCX0sCisJW0NYODhfQk9BUkRfVEVSUkFURUNfQ0lORVJHWV9IVF9QQ0lfTUtJSV0gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJUZXJyYXRlYyBDaW5lcmd5IEhUIFBDSSBNS0lJIiwKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfWEMyMDI4LAorCQkudHVuZXJfYWRkciAgICAgPSAweDYxLAorCQkucmFkaW9fdHlwZSAgICAgPSBUVU5FUl9YQzIwMjgsCisJCS5yYWRpb19hZGRyICAgICA9IDB4NjEsCisJCS5pbnB1dCAgICAgICAgICA9IHsgeworCQkJLnR5cGUgICA9IENYODhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICA9IDAsCisJCQkuZ3BpbzAgID0gMHgwMDRmZiwKKwkJCS5ncGlvMSAgPSAweDAxMGZmLAorCQkJLmdwaW8yICA9IDB4MDAwMDEsCisJCX0sIHsKKwkJCS50eXBlICAgPSBDWDg4X1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgPSAxLAorCQkJLmdwaW8wICA9IDB4MDA0ZmIsCisJCQkuZ3BpbzEgID0gMHgwMTBlZiwKKwkJCS5hdWRpb3JvdXRlID0gMSwKKwkJfSwgeworCQkJLnR5cGUgICA9IENYODhfVk1VWF9TVklERU8sCisJCQkudm11eCAgID0gMiwKKwkJCS5ncGlvMCAgPSAweDAwNGZiLAorCQkJLmdwaW8xICA9IDB4MDEwZWYsCisJCQkuYXVkaW9yb3V0ZSA9IDEsCisJCX0gfSwKKwkJLnJhZGlvID0geworCQkJLnR5cGUgICA9IENYODhfUkFESU8sCisJCQkuZ3BpbzAgID0gMHgwMDRmZiwKKwkJCS5ncGlvMSAgPSAweDAxMGZmLAorCQkJLmdwaW8yICA9IDB4MGZmLAorCQl9LAorCQkubXBlZyAgICAgICAgICAgPSBDWDg4X01QRUdfRFZCLAorCX0sCiB9OwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTIzNDMsNiArMjM3OCwxMCBAQAogCQkuc3VidmVuZG9yID0gMHhiMjAwLAogCQkuc3ViZGV2aWNlID0gMHg0MjAwLAogCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9TQVRUUkFERV9TVDQyMDAsCisJfSwgeworCQkuc3VidmVuZG9yID0gMHgxNTNiLAorCQkuc3ViZGV2aWNlID0gMHgxMTc3LAorCQkuY2FyZCAgICAgID0gQ1g4OF9CT0FSRF9URVJSQVRFQ19DSU5FUkdZX0hUX1BDSV9NS0lJLAogCX0sCiB9OwogCkBAIC0yODE5LDYgKzI4NTgsNyBAQAogCQkgKi8KIAkJYnJlYWs7CiAJY2FzZSBDWDg4X0JPQVJEX1BJTk5BQ0xFX0hZQlJJRF9QQ1RWOgorCWNhc2UgQ1g4OF9CT0FSRF9URVJSQVRFQ19DSU5FUkdZX0hUX1BDSV9NS0lJOgogCQljdGwtPmRlbW9kID0gWEMzMDI4X0ZFX1pBUkxJTks0NTY7CiAJCWN0bC0+bXRzID0gMTsKIAkJYnJlYWs7CkBAIC0yOTQ3LDcgKzI5ODcsNyBAQAogCQl0ZWE1NzY3X2NmZy50dW5lciA9IFRVTkVSX1RFQTU3Njc7CiAJCXRlYTU3NjdfY2ZnLnByaXYgID0gJmN0bDsKIAotCQljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSwgVFVORVJfU0VUX0NPTkZJRywgJnRlYTU3NjdfY2ZnKTsKKwkJY2FsbF9hbGwoY29yZSwgdHVuZXIsIHNfY29uZmlnLCAmdGVhNTc2N19jZmcpOwogCQlicmVhazsKIAl9CiAJY2FzZSAgQ1g4OF9CT0FSRF9URVZJSV9TNDIwOgpAQCAtMjk3Miw3ICszMDEyLDcgQEAKIAkJdHVuX3NldHVwLnR5cGUgICAgICAgICAgID0gY29yZS0+Ym9hcmQucmFkaW9fdHlwZTsKIAkJdHVuX3NldHVwLmFkZHIgICAgICAgICAgID0gY29yZS0+Ym9hcmQucmFkaW9fYWRkcjsKIAkJdHVuX3NldHVwLnR1bmVyX2NhbGxiYWNrID0gY3g4OF90dW5lcl9jYWxsYmFjazsKLQkJY3g4OF9jYWxsX2kyY19jbGllbnRzKGNvcmUsIFRVTkVSX1NFVF9UWVBFX0FERFIsICZ0dW5fc2V0dXApOworCQljYWxsX2FsbChjb3JlLCB0dW5lciwgc190eXBlX2FkZHIsICZ0dW5fc2V0dXApOwogCQltb2RlX21hc2sgJj0gflRfUkFESU87CiAJfQogCkBAIC0yOTgyLDcgKzMwMjIsNyBAQAogCQl0dW5fc2V0dXAuYWRkciAgICAgICAgICAgPSBjb3JlLT5ib2FyZC50dW5lcl9hZGRyOwogCQl0dW5fc2V0dXAudHVuZXJfY2FsbGJhY2sgPSBjeDg4X3R1bmVyX2NhbGxiYWNrOwogCi0JCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLCBUVU5FUl9TRVRfVFlQRV9BRERSLCAmdHVuX3NldHVwKTsKKwkJY2FsbF9hbGwoY29yZSwgdHVuZXIsIHNfdHlwZV9hZGRyLCAmdHVuX3NldHVwKTsKIAl9CiAKIAlpZiAoY29yZS0+Ym9hcmQudGRhOTg4N19jb25mKSB7CkBAIC0yOTkxLDcgKzMwMzEsNyBAQAogCQl0ZGE5ODg3X2NmZy50dW5lciA9IFRVTkVSX1REQTk4ODc7CiAJCXRkYTk4ODdfY2ZnLnByaXYgID0gJmNvcmUtPmJvYXJkLnRkYTk4ODdfY29uZjsKIAotCQljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSwgVFVORVJfU0VUX0NPTkZJRywgJnRkYTk4ODdfY2ZnKTsKKwkJY2FsbF9hbGwoY29yZSwgdHVuZXIsIHNfY29uZmlnLCAmdGRhOTg4N19jZmcpOwogCX0KIAogCWlmIChjb3JlLT5ib2FyZC50dW5lcl90eXBlID09IFRVTkVSX1hDMjAyOCkgewpAQCAtMzAwNyw5ICszMDQ3LDkgQEAKIAkJeGMyMDI4X2NmZy5wcml2ICA9ICZjdGw7CiAJCWluZm9fcHJpbnRrKGNvcmUsICJBc2tpbmcgeGMyMDI4LzMwMjggdG8gbG9hZCBmaXJtd2FyZSAlc1xuIiwKIAkJCSAgICBjdGwuZm5hbWUpOwotCQljeDg4X2NhbGxfaTJjX2NsaWVudHMoY29yZSwgVFVORVJfU0VUX0NPTkZJRywgJnhjMjAyOF9jZmcpOworCQljYWxsX2FsbChjb3JlLCB0dW5lciwgc19jb25maWcsICZ4YzIwMjhfY2ZnKTsKIAl9Ci0JY3g4OF9jYWxsX2kyY19jbGllbnRzIChjb3JlLCBUVU5FUl9TRVRfU1RBTkRCWSwgTlVMTCk7CisJY2FsbF9hbGwoY29yZSwgY29yZSwgc19zdGFuZGJ5LCAwKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0zMDg5LDYgKzMxMjksOCBAQAogCWludCBpOwogCiAJY29yZSA9IGt6YWxsb2Moc2l6ZW9mKCpjb3JlKSwgR0ZQX0tFUk5FTCk7CisJaWYgKGNvcmUgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CiAKIAlhdG9taWNfaW5jKCZjb3JlLT5yZWZjb3VudCk7CiAJY29yZS0+cGNpX2J1cyAgPSBwY2ktPmJ1cy0+bnVtYmVyOwpAQCAtMzEwMCw3ICszMTQyLDE1IEBACiAKIAljb3JlLT5uciA9IG5yOwogCXNwcmludGYoY29yZS0+bmFtZSwgImN4ODhbJWRdIiwgY29yZS0+bnIpOworCisJc3RyY3B5KGNvcmUtPnY0bDJfZGV2Lm5hbWUsIGNvcmUtPm5hbWUpOworCWlmICh2NGwyX2RldmljZV9yZWdpc3RlcihOVUxMLCAmY29yZS0+djRsMl9kZXYpKSB7CisJCWtmcmVlKGNvcmUpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKIAlpZiAoMCAhPSBjeDg4X2dldF9yZXNvdXJjZXMoY29yZSwgcGNpKSkgeworCQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZjb3JlLT52NGwyX2Rldik7CiAJCWtmcmVlKGNvcmUpOwogCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0zMTExLDYgKzMxNjEsMTEgQEAKIAkJCSAgICAgIHBjaV9yZXNvdXJjZV9sZW4ocGNpLCAwKSk7CiAJY29yZS0+Ym1taW8gPSAodTggX19pb21lbSAqKWNvcmUtPmxtbWlvOwogCisJaWYgKGNvcmUtPmxtbWlvID09IE5VTEwpIHsKKwkJa2ZyZWUoY29yZSk7CisJCXJldHVybiBOVUxMOworCX0KKwogCS8qIGJvYXJkIGNvbmZpZyAqLwogCWNvcmUtPmJvYXJkbnIgPSBVTlNFVDsKIAlpZiAoY2FyZFtjb3JlLT5ucl0gPCBBUlJBWV9TSVpFKGN4ODhfYm9hcmRzKSkKQEAgLTMxNDksOCArMzIwNCwzNiBAQAogCWN4ODhfaTJjX2luaXQoY29yZSwgcGNpKTsKIAogCS8qIGxvYWQgdHVuZXIgbW9kdWxlLCBpZiBuZWVkZWQgKi8KLQlpZiAoVFVORVJfQUJTRU5UICE9IGNvcmUtPmJvYXJkLnR1bmVyX3R5cGUpCi0JCXJlcXVlc3RfbW9kdWxlKCJ0dW5lciIpOworCWlmIChUVU5FUl9BQlNFTlQgIT0gY29yZS0+Ym9hcmQudHVuZXJfdHlwZSkgeworCQkvKiBJZ25vcmUgMHg2YiBhbmQgMHg2ZiBvbiBjeDg4IGJvYXJkcy4KKwkJICogRnVzaW9uSERUVjUgUlQgR29sZCBoYXMgYW4gaXIgcmVjZWl2ZXIgYXQgMHg2YgorCQkgKiBhbmQgYW4gUlRDIGF0IDB4NmYgd2hpY2ggY2FuIGdldCBjb3JydXB0ZWQgaWYgcHJvYmVkLiAqLworCQlzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgdHZfYWRkcnNbXSA9IHsKKwkJCTB4NDIsIDB4NDMsIDB4NGEsIDB4NGIsCQkvKiB0ZGE4MjkwICovCisJCQkweDYwLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LAorCQkJMHg2OCwgMHg2OSwgMHg2YSwgMHg2YywgMHg2ZCwgMHg2ZSwKKwkJCUkyQ19DTElFTlRfRU5ECisJCX07CisJCWludCBoYXNfZGVtb2QgPSAoY29yZS0+Ym9hcmQudGRhOTg4N19jb25mICYgVERBOTg4N19QUkVTRU5UKTsKKworCQkvKiBJIGRvbid0IHRydXN0IHRoZSByYWRpb190eXBlIGFzIGlzIHN0b3JlZCBpbiB0aGUgY2FyZAorCQkgICBkZWZpbml0aW9ucywgc28gd2UganVzdCBwcm9iZSBmb3IgaXQuCisJCSAgIFRoZSByYWRpb190eXBlIGlzIHNvbWV0aW1lcyBtaXNzaW5nLCBvciBzZXQgdG8gVU5TRVQgYnV0CisJCSAgIGxhdGVyIGNvZGUgY29uZmlndXJlcyBhIHRlYTU3NjcuCisJCSAqLworCQl2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmY29yZS0+aTJjX2FkYXAsICJ0dW5lciIsICJ0dW5lciIsCisJCQkJdjRsMl9pMmNfdHVuZXJfYWRkcnMoQUREUlNfUkFESU8pKTsKKwkJaWYgKGhhc19kZW1vZCkKKwkJCXY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZjb3JlLT5pMmNfYWRhcCwgInR1bmVyIiwKKwkJCQkidHVuZXIiLCB2NGwyX2kyY190dW5lcl9hZGRycyhBRERSU19ERU1PRCkpOworCQlpZiAoY29yZS0+Ym9hcmQudHVuZXJfYWRkciA9PSBBRERSX1VOU0VUKSB7CisJCQl2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmY29yZS0+aTJjX2FkYXAsICJ0dW5lciIsCisJCQkJInR1bmVyIiwgaGFzX2RlbW9kID8gdHZfYWRkcnMgKyA0IDogdHZfYWRkcnMpOworCQl9IGVsc2UgeworCQkJdjRsMl9pMmNfbmV3X3N1YmRldigmY29yZS0+aTJjX2FkYXAsCisJCQkJInR1bmVyIiwgInR1bmVyIiwgY29yZS0+Ym9hcmQudHVuZXJfYWRkcik7CisJCX0KKwl9CiAKIAljeDg4X2NhcmRfc2V0dXAoY29yZSk7CiAJY3g4OF9pcl9pbml0KGNvcmUsIHBjaSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1jb3JlLmMKaW5kZXggYjA0NTg3NC4uZjJmYjlmMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWNvcmUuYwpAQCAtOTkxLDcgKzk5MSw3IEBACiAJc2V0X3R2YXVkaW8oY29yZSk7CiAKIAkvLyB0ZWxsIGkyYyBjaGlwcwotCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLFZJRElPQ19TX1NURCwmbm9ybSk7CisJY2FsbF9hbGwoY29yZSwgdHVuZXIsIHNfc3RkLCBub3JtKTsKIAogCS8vIGRvbmUKIAlyZXR1cm4gMDsKQEAgLTEwMTEsNyArMTAxMSw4IEBACiAJCXJldHVybiBOVUxMOwogCSp2ZmQgPSAqdGVtcGxhdGU7CiAJdmZkLT5taW5vciAgID0gLTE7Ci0JdmZkLT5wYXJlbnQgID0gJnBjaS0+ZGV2OworCXZmZC0+djRsMl9kZXYgPSAmY29yZS0+djRsMl9kZXY7CisJdmZkLT5wYXJlbnQgPSAmcGNpLT5kZXY7CiAJdmZkLT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CiAJc25wcmludGYodmZkLT5uYW1lLCBzaXplb2YodmZkLT5uYW1lKSwgIiVzICVzICglcykiLAogCQkgY29yZS0+bmFtZSwgdHlwZSwgY29yZS0+Ym9hcmQubmFtZSk7CkBAIC0xMDU4LDEyICsxMDU5LDE2IEBACiAKIAltdXRleF9sb2NrKCZkZXZsaXN0KTsKIAljeDg4X2lyX2ZpbmkoY29yZSk7Ci0JaWYgKDAgPT0gY29yZS0+aTJjX3JjKQorCWlmICgwID09IGNvcmUtPmkyY19yYykgeworCQlpZiAoY29yZS0+aTJjX3J0YykKKwkJCWkyY191bnJlZ2lzdGVyX2RldmljZShjb3JlLT5pMmNfcnRjKTsKIAkJaTJjX2RlbF9hZGFwdGVyKCZjb3JlLT5pMmNfYWRhcCk7CisJfQogCWxpc3RfZGVsKCZjb3JlLT5kZXZsaXN0KTsKIAlpb3VubWFwKGNvcmUtPmxtbWlvKTsKIAljeDg4X2RldmNvdW50LS07CiAJbXV0ZXhfdW5sb2NrKCZkZXZsaXN0KTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZjb3JlLT52NGwyX2Rldik7CiAJa2ZyZWUoY29yZSk7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKaW5kZXggYWVmNTI5Ny4uNGZmNGQ5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtZHZiLmMKQEAgLTI0MSw2ICsyNDEsMTIgQEAKIAkuZGVtb2RfaW5pdCAgICA9IGR2aWNvX2R1YWxfZGVtb2RfaW5pdCwKIH07CiAKK3N0YXRpYyBzdHJ1Y3QgemwxMDM1M19jb25maWcgY3g4OF90ZXJyYXRlY19jaW5lcmd5X2h0X3BjaV9ta2lpX2NvbmZpZyA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9ICgweDFlID4+IDEpLAorCS5ub190dW5lciAgICAgID0gMSwKKwkuaWYyICAgICAgICAgICA9IDQ1NjAwLAorfTsKKwogI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX0NYODhfVlAzMDU0KSB8fCAoZGVmaW5lZChDT05GSUdfVklERU9fQ1g4OF9WUDMwNTRfTU9EVUxFKSAmJiBkZWZpbmVkKE1PRFVMRSkpCiBzdGF0aWMgaW50IGRudHZfbGl2ZV9kdmJ0X3Byb19kZW1vZF9pbml0KHN0cnVjdCBkdmJfZnJvbnRlbmQqIGZlKQogewpAQCAtMTEzMSw2ICsxMTM3LDE2IEBACiAJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCAhPSBOVUxMKQogCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5zZXRfdm9sdGFnZSA9IHRldmlpX2R2YnNfc2V0X3ZvbHRhZ2U7CiAJCWJyZWFrOworCWNhc2UgQ1g4OF9CT0FSRF9URVJSQVRFQ19DSU5FUkdZX0hUX1BDSV9NS0lJOgorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2goemwxMDM1M19hdHRhY2gsCisJCQkJCSAgICAgICAmY3g4OF90ZXJyYXRlY19jaW5lcmd5X2h0X3BjaV9ta2lpX2NvbmZpZywKKwkJCQkJICAgICAgICZjb3JlLT5pMmNfYWRhcCk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJZmUwLT5kdmIuZnJvbnRlbmQtPm9wcy5pMmNfZ2F0ZV9jdHJsID0gTlVMTDsKKwkJCWlmIChhdHRhY2hfeGMzMDI4KDB4NjEsIGRldikgPCAwKQorCQkJCWdvdG8gZnJvbnRlbmRfZGV0YWNoOworCQl9CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXByaW50ayhLRVJOX0VSUiAiJXMvMjogVGhlIGZyb250ZW5kIG9mIHlvdXIgRFZCL0FUU0MgY2FyZCBpc24ndCBzdXBwb3J0ZWQgeWV0XG4iLAogCQkgICAgICAgY29yZS0+bmFtZSk7CkBAIC0xMTUyLDcgKzExNjgsNyBAQAogCQlmZTEtPmR2Yi5mcm9udGVuZC0+b3BzLnRzX2J1c19jdHJsID0gY3g4OF9kdmJfYnVzX2N0cmw7CiAKIAkvKiBQdXQgdGhlIGFuYWxvZyBkZWNvZGVyIGluIHN0YW5kYnkgdG8ga2VlcCBpdCBxdWlldCAqLwotCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLCBUVU5FUl9TRVRfU1RBTkRCWSwgTlVMTCk7CisJY2FsbF9hbGwoY29yZSwgY29yZSwgc19zdGFuZGJ5LCAwKTsKIAogCS8qIHJlZ2lzdGVyIGV2ZXJ5dGhpbmcgKi8KIAlyZXR1cm4gdmlkZW9idWZfZHZiX3JlZ2lzdGVyX2J1cygmZGV2LT5mcm9udGVuZHMsIFRISVNfTU9EVUxFLCBkZXYsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jCmluZGV4IGMwZmYyMzAuLjk5NmI0ZWQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWkyYy5jCkBAIC05NywzNyArOTcsNiBAQAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50IGF0dGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOwotCi0JZHByaW50aygxLCAiJXMgaTJjIGF0dGFjaCBbYWRkcj0weCV4LGNsaWVudD0lc11cbiIsCi0JCWNsaWVudC0+ZHJpdmVyLT5kcml2ZXIubmFtZSwgY2xpZW50LT5hZGRyLCBjbGllbnQtPm5hbWUpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IGRldGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgY3g4OF9jb3JlICpjb3JlID0gaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOwotCi0JZHByaW50aygxLCAiaTJjIGRldGFjaCBbY2xpZW50PSVzXVxuIiwgY2xpZW50LT5uYW1lKTsKLQlyZXR1cm4gMDsKLX0KLQotdm9pZCBjeDg4X2NhbGxfaTJjX2NsaWVudHMoc3RydWN0IGN4ODhfY29yZSAqY29yZSwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCWlmICgwICE9IGNvcmUtPmkyY19yYykKLQkJcmV0dXJuOwotCi0JaWYgKGNvcmUtPmdhdGVfY3RybCkKLQkJY29yZS0+Z2F0ZV9jdHJsKGNvcmUsIDEpOwotCi0JaTJjX2NsaWVudHNfY29tbWFuZCgmY29yZS0+aTJjX2FkYXAsIGNtZCwgYXJnKTsKLQotCWlmIChjb3JlLT5nYXRlX2N0cmwpCi0JCWNvcmUtPmdhdGVfY3RybChjb3JlLCAwKTsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSBjeDg4MDBfaTJjX2FsZ29fdGVtcGxhdGUgPSB7CiAJLnNldHNkYSAgPSBjeDg4MDBfYml0X3NldHNkYSwKIAkuc2V0c2NsICA9IGN4ODgwMF9iaXRfc2V0c2NsLApAQCAtMTczLDIwICsxNDIsMTQgQEAKIAltZW1jcHkoJmNvcmUtPmkyY19hbGdvLCAmY3g4ODAwX2kyY19hbGdvX3RlbXBsYXRlLAogCSAgICAgICBzaXplb2YoY29yZS0+aTJjX2FsZ28pKTsKIAotCWlmIChjb3JlLT5ib2FyZC50dW5lcl90eXBlICE9IFRVTkVSX0FCU0VOVCkKLQkJY29yZS0+aTJjX2FkYXAuY2xhc3MgfD0gSTJDX0NMQVNTX1RWX0FOQUxPRzsKLQlpZiAoY29yZS0+Ym9hcmQubXBlZyAmIENYODhfTVBFR19EVkIpCi0JCWNvcmUtPmkyY19hZGFwLmNsYXNzIHw9IEkyQ19DTEFTU19UVl9ESUdJVEFMOwogCiAJY29yZS0+aTJjX2FkYXAuZGV2LnBhcmVudCA9ICZwY2ktPmRldjsKIAlzdHJsY3B5KGNvcmUtPmkyY19hZGFwLm5hbWUsY29yZS0+bmFtZSxzaXplb2YoY29yZS0+aTJjX2FkYXAubmFtZSkpOwogCWNvcmUtPmkyY19hZGFwLm93bmVyID0gVEhJU19NT0RVTEU7CiAJY29yZS0+aTJjX2FkYXAuaWQgPSBJMkNfSFdfQl9DWDIzODh4OwotCWNvcmUtPmkyY19hZGFwLmNsaWVudF9yZWdpc3RlciA9IGF0dGFjaF9pbmZvcm07Ci0JY29yZS0+aTJjX2FkYXAuY2xpZW50X3VucmVnaXN0ZXIgPSBkZXRhY2hfaW5mb3JtOwogCWNvcmUtPmkyY19hbGdvLnVkZWxheSA9IGkyY191ZGVsYXk7CiAJY29yZS0+aTJjX2FsZ28uZGF0YSA9IGNvcmU7Ci0JaTJjX3NldF9hZGFwZGF0YSgmY29yZS0+aTJjX2FkYXAsY29yZSk7CisJaTJjX3NldF9hZGFwZGF0YSgmY29yZS0+aTJjX2FkYXAsICZjb3JlLT52NGwyX2Rldik7CiAJY29yZS0+aTJjX2FkYXAuYWxnb19kYXRhID0gJmNvcmUtPmkyY19hbGdvOwogCWNvcmUtPmkyY19jbGllbnQuYWRhcHRlciA9ICZjb3JlLT5pMmNfYWRhcDsKIAlzdHJsY3B5KGNvcmUtPmkyY19jbGllbnQubmFtZSwgImN4ODh4eCBpbnRlcm5hbCIsIEkyQ19OQU1FX1NJWkUpOwpAQCAtMjIyLDggKzE4NSw2IEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLUVYUE9SVF9TWU1CT0woY3g4OF9jYWxsX2kyY19jbGllbnRzKTsKLQogLyoKICAqIExvY2FsIHZhcmlhYmxlczoKICAqIGMtYmFzaWMtb2Zmc2V0OiA4CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtaW5wdXQuYwppbmRleCA4NjgzZDEwLi5lYzA1MzEyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC1pbnB1dC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LWlucHV0LmMKQEAgLTQ4LDggKzQ4LDcgQEAKIAogCS8qIHBvbGwgZXh0ZXJuYWwgZGVjb2RlciAqLwogCWludCBwb2xsaW5nOwotCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwotCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKIAl1MzIgZ3Bpb19hZGRyOwogCXUzMiBsYXN0X2dwaW87CiAJdTMyIG1hc2tfa2V5Y29kZTsKQEAgLTE0MywyNyArMTQyLDE5IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBpcl90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IGN4ODhfSVIgKmlyID0gKHN0cnVjdCBjeDg4X0lSICopZGF0YTsKLQotCXNjaGVkdWxlX3dvcmsoJmlyLT53b3JrKTsKLX0KLQogc3RhdGljIHZvaWQgY3g4OF9pcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgY3g4OF9JUiAqaXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGN4ODhfSVIsIHdvcmspOworCXN0cnVjdCBjeDg4X0lSICppciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgY3g4OF9JUiwgd29yay53b3JrKTsKIAogCWN4ODhfaXJfaGFuZGxlX2tleShpcik7Ci0JbW9kX3RpbWVyKCZpci0+dGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKGlyLT5wb2xsaW5nKSk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZpci0+d29yaywgbXNlY3NfdG9famlmZmllcyhpci0+cG9sbGluZykpOwogfQogCiB2b2lkIGN4ODhfaXJfc3RhcnQoc3RydWN0IGN4ODhfY29yZSAqY29yZSwgc3RydWN0IGN4ODhfSVIgKmlyKQogewogCWlmIChpci0+cG9sbGluZykgewotCQlzZXR1cF90aW1lcigmaXItPnRpbWVyLCBpcl90aW1lciwgKHVuc2lnbmVkIGxvbmcpaXIpOwotCQlJTklUX1dPUksoJmlyLT53b3JrLCBjeDg4X2lyX3dvcmspOwotCQlzY2hlZHVsZV93b3JrKCZpci0+d29yayk7CisJCUlOSVRfREVMQVlFRF9XT1JLKCZpci0+d29yaywgY3g4OF9pcl93b3JrKTsKKwkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZpci0+d29yaywgMCk7CiAJfQogCWlmIChpci0+c2FtcGxpbmcpIHsKIAkJY29yZS0+cGNpX2lycW1hc2sgfD0gUENJX0lOVF9JUl9TTVBJTlQ7CkBAIC0xNzksMTAgKzE3MCw4IEBACiAJCWNvcmUtPnBjaV9pcnFtYXNrICY9IH5QQ0lfSU5UX0lSX1NNUElOVDsKIAl9CiAKLQlpZiAoaXItPnBvbGxpbmcpIHsKLQkJZGVsX3RpbWVyX3N5bmMoJmlyLT50aW1lcik7Ci0JCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7Ci0JfQorCWlmIChpci0+cG9sbGluZykKKwkJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZpci0+d29yayk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTIyNiw2ICsyMTUsOCBAQAogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSMzAwMDoKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjQwMDA6CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwTElURToKKwljYXNlIENYODhfQk9BUkRfUENIRFRWX0hEMzAwMDoKKwljYXNlIENYODhfQk9BUkRfUENIRFRWX0hENTUwMDoKIAkJaXJfY29kZXMgPSBpcl9jb2Rlc19oYXVwcGF1Z2VfbmV3OwogCQlpcl90eXBlID0gSVJfVFlQRV9SQzU7CiAJCWlyLT5zYW1wbGluZyA9IDE7CkBAIC00NjYsNiArNDU3LDggQEAKIAljYXNlIENYODhfQk9BUkRfSEFVUFBBVUdFX0hWUjMwMDA6CiAJY2FzZSBDWDg4X0JPQVJEX0hBVVBQQVVHRV9IVlI0MDAwOgogCWNhc2UgQ1g4OF9CT0FSRF9IQVVQUEFVR0VfSFZSNDAwMExJVEU6CisJY2FzZSBDWDg4X0JPQVJEX1BDSERUVl9IRDMwMDA6CisJY2FzZSBDWDg4X0JPQVJEX1BDSERUVl9IRDU1MDA6CiAJCWlyY29kZSA9IGlyX2RlY29kZV9iaXBoYXNlKGlyLT5zYW1wbGVzLCBpci0+c2NvdW50LCA1LCA3KTsKIAkJaXJfZHByaW50aygiYmlwaGFzZSBkZWNvZGVkOiAleFxuIiwgaXJjb2RlKTsKIAkJLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC12aWRlby5jCmluZGV4IDc5MWU2OWQuLjQzNDIzN2EgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODgtdmlkZW8uYwpAQCAtNDEsMTEgKzQxLDYgQEAKICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KIAotI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAotLyogSW5jbHVkZSBWNEwxIHNwZWNpZmljIGZ1bmN0aW9ucy4gU2hvdWxkIGJlIHJlbW92ZWQgc29vbiAqLwotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jZW5kaWYKLQogTU9EVUxFX0RFU0NSSVBUSU9OKCJ2NGwyIGRyaXZlciBtb2R1bGUgZm9yIGN4MjM4OHggYmFzZWQgVFYgY2FyZHMiKTsKIE1PRFVMRV9BVVRIT1IoIkdlcmQgS25vcnIgPGtyYXhlbEBieXRlc2V4Lm9yZz4gW1N1U0UgTGFic10iKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKQEAgLTI5OCw2ICsyOTMsNyBAQAogfTsKIHN0YXRpYyBjb25zdCBpbnQgQ1g4ODAwX0NUTFMgPSBBUlJBWV9TSVpFKGN4ODgwMF9jdGxzKTsKIAorLyogTXVzdCBiZSBzb3J0ZWQgZnJvbSBsb3cgdG8gaGlnaCBjb250cm9sIElEISAqLwogY29uc3QgdTMyIGN4ODhfdXNlcl9jdHJsc1tdID0gewogCVY0TDJfQ0lEX1VTRVJfQ0xBU1MsCiAJVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTQzNSw4ICs0MzEsNyBAQAogCQkJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKIAogCQkJcm91dGUuaW5wdXQgPSBJTlBVVChpbnB1dCkuYXVkaW9yb3V0ZTsKLQkJCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLAotCQkJCVZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HLCAmcm91dGUpOworCQkJY2FsbF9hbGwoY29yZSwgYXVkaW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAkJfQogCQkvKiBjeDIzODgncyBDLUFEQyBpcyBjb25uZWN0ZWQgdG8gdGhlIHR1bmVyIG9ubHkuCiAJCSAgIFdoZW4gdXNlZCB3aXRoIFMtVmlkZW8sIHRoYXQgQURDIGlzIGJ1c3kgZGVhbGluZyB3aXRoCkBAIC04MzEsOCArODI2LDcgQEAKIAkJCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOwogCiAJCQkJcm91dGUuaW5wdXQgPSBjb3JlLT5ib2FyZC5yYWRpby5hdWRpb3JvdXRlOwotCQkJCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLAotCQkJCQlWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORywgJnJvdXRlKTsKKwkJCQljYWxsX2FsbChjb3JlLCBhdWRpbywgc19yb3V0aW5nLCAmcm91dGUpOwogCQkJfQogCQkJLyogIkkyUyBBREMgbW9kZSIgKi8KIAkJCWNvcmUtPnR2YXVkaW8gPSBXV19JMlNBREM7CkBAIC04NDMsNyArODM3LDcgQEAKIAkJCWN4ODhfc2V0X3R2YXVkaW8oY29yZSk7CiAJCQljeDg4X3NldF9zdGVyZW8oY29yZSxWNEwyX1RVTkVSX01PREVfU1RFUkVPLDEpOwogCQl9Ci0JCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLEFVRENfU0VUX1JBRElPLE5VTEwpOworCQljYWxsX2FsbChjb3JlLCB0dW5lciwgc19yYWRpbyk7CiAJfQogCXVubG9ja19rZXJuZWwoKTsKIApAQCAtOTM3LDcgKzkzMSw3IEBACiAJa2ZyZWUoZmgpOwogCiAJaWYoYXRvbWljX2RlY19hbmRfdGVzdCgmZGV2LT5jb3JlLT51c2VycykpCi0JCWN4ODhfY2FsbF9pMmNfY2xpZW50cyAoZGV2LT5jb3JlLCBUVU5FUl9TRVRfU1RBTkRCWSwgTlVMTCk7CisJCWNhbGxfYWxsKGRldi0+Y29yZSwgY29yZSwgc19zdGFuZGJ5LCAwKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTI3NiwxNSArMTI3MCwxMiBAQAogCQlbIENYODhfVk1VWF9EVkIgICAgICAgIF0gPSAiRFZCIiwKIAkJWyBDWDg4X1ZNVVhfREVCVUcgICAgICBdID0gImZvciBkZWJ1ZyBvbmx5IiwKIAl9OwotCXVuc2lnbmVkIGludCBuOworCXVuc2lnbmVkIGludCBuID0gaS0+aW5kZXg7CiAKLQluID0gaS0+aW5kZXg7CiAJaWYgKG4gPj0gNCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKDAgPT0gSU5QVVQobikudHlwZSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JbWVtc2V0KGksMCxzaXplb2YoKmkpKTsKLQlpLT5pbmRleCA9IG47CiAJaS0+dHlwZSAgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOwogCXN0cmNweShpLT5uYW1lLGluYW1lW0lOUFVUKG4pLnR5cGVdKTsKIAlpZiAoKENYODhfVk1VWF9URUxFVklTSU9OID09IElOUFVUKG4pLnR5cGUpIHx8CkBAIC0xNDAyLDcgKzEzOTMsNyBAQAogCWYtPnR5cGUgPSBmaC0+cmFkaW8gPyBWNEwyX1RVTkVSX1JBRElPIDogVjRMMl9UVU5FUl9BTkFMT0dfVFY7CiAJZi0+ZnJlcXVlbmN5ID0gY29yZS0+ZnJlcTsKIAotCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLFZJRElPQ19HX0ZSRVFVRU5DWSxmKTsKKwljYWxsX2FsbChjb3JlLCB0dW5lciwgZ19mcmVxdWVuY3ksIGYpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xNDE4LDcgKzE0MDksNyBAQAogCW11dGV4X2xvY2soJmNvcmUtPmxvY2spOwogCWNvcmUtPmZyZXEgPSBmLT5mcmVxdWVuY3k7CiAJY3g4OF9uZXdzdGF0aW9uKGNvcmUpOwotCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLFZJRElPQ19TX0ZSRVFVRU5DWSxmKTsKKwljYWxsX2FsbChjb3JlLCB0dW5lciwgc19mcmVxdWVuY3ksIGYpOwogCiAJLyogV2hlbiBjaGFuZ2luZyBjaGFubmVscyBpdCBpcyByZXF1aXJlZCB0byByZXNldCBUVkFVRElPICovCiAJbXNsZWVwICgxMCk7CkBAIC0xNTAwLDcgKzE0OTEsNyBAQAogCXN0cmNweSh0LT5uYW1lLCAiUmFkaW8iKTsKIAl0LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAotCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLFZJRElPQ19HX1RVTkVSLHQpOworCWNhbGxfYWxsKGNvcmUsIHR1bmVyLCBnX3R1bmVyLCB0KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTUyMCw3ICsxNTExLDYgQEAKIAlpZiAodW5saWtlbHkoYS0+aW5kZXgpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW1lbXNldChhLDAsc2l6ZW9mKCphKSk7CiAJc3RyY3B5KGEtPm5hbWUsIlJhZGlvIik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xNTM1LDcgKzE1MjUsNyBAQAogCWlmICgwICE9IHQtPmluZGV4KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWN4ODhfY2FsbF9pMmNfY2xpZW50cyhjb3JlLFZJRElPQ19TX1RVTkVSLHQpOworCWNhbGxfYWxsKGNvcmUsIHR1bmVyLCBzX3R1bmVyLCB0KTsKIAogCXJldHVybiAwOwogfQpAQCAtMTg5MiwxMiArMTg4MiwzMCBAQAogCS8qIGxvYWQgYW5kIGNvbmZpZ3VyZSBoZWxwZXIgbW9kdWxlcyAqLwogCiAJaWYgKGNvcmUtPmJvYXJkLmF1ZGlvX2NoaXAgPT0gVjRMMl9JREVOVF9XTTg3NzUpCi0JCXJlcXVlc3RfbW9kdWxlKCJ3bTg3NzUiKTsKKwkJdjRsMl9pMmNfbmV3X3N1YmRldigmY29yZS0+aTJjX2FkYXAsCisJCQkJIndtODc3NSIsICJ3bTg3NzUiLCAweDM2ID4+IDEpOworCisJaWYgKGNvcmUtPmJvYXJkLmF1ZGlvX2NoaXAgPT0gVjRMMl9JREVOVF9UVkFVRElPKSB7CisJCS8qIFRoaXMgcHJvYmVzIGZvciBhIHRkYTk4NzQgYXMgaXMgdXNlZCBvbiBzb21lCisJCSAgIFBpeGVsdmlldyBVbHRyYSBib2FyZHMuICovCisJCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBpMmNfYWRkcltdID0geworCQkJMHhiMCA+PiAxLCBJMkNfQ0xJRU5UX0VORAorCQl9OworCisJCXY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZjb3JlLT5pMmNfYWRhcCwKKwkJCQkidHZhdWRpbyIsICJ0dmF1ZGlvIiwgaTJjX2FkZHIpOworCX0KIAogCXN3aXRjaCAoY29yZS0+Ym9hcmRucikgewogCWNhc2UgQ1g4OF9CT0FSRF9EVklDT19GVVNJT05IRFRWXzVfR09MRDoKLQljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl83X0dPTEQ6CisJY2FzZSBDWDg4X0JPQVJEX0RWSUNPX0ZVU0lPTkhEVFZfN19HT0xEOiB7CisJCXN0YXRpYyBzdHJ1Y3QgaTJjX2JvYXJkX2luZm8gcnRjX2luZm8gPSB7CisJCQlJMkNfQk9BUkRfSU5GTygiaXNsMTIwOCIsIDB4NmYpCisJCX07CisKIAkJcmVxdWVzdF9tb2R1bGUoInJ0Yy1pc2wxMjA4Iik7CisJCWNvcmUtPmkyY19ydGMgPSBpMmNfbmV3X2RldmljZSgmY29yZS0+aTJjX2FkYXAsICZydGNfaW5mbyk7CisJfQogCQkvKiBicmVhayBpbnRlbnRpb25hbGx5IG9taXR0ZWQgKi8KIAljYXNlIENYODhfQk9BUkRfRFZJQ09fRlVTSU9OSERUVl81X1BDSV9OQU5POgogCQlyZXF1ZXN0X21vZHVsZSgiaXIta2JkLWkyYyIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vY3g4OC9jeDg4LmgKaW5kZXggNjAyNWZkZC4uOWE0M2ZkZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9jeDg4L2N4ODguaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2N4ODgvY3g4OC5oCkBAIC0yNSw3ICsyNSw3IEBACiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgva2Rldl90Lmg+CiAKLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KICNpbmNsdWRlIDxtZWRpYS90dmVlcHJvbS5oPgogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWRtYS1zZy5oPgpAQCAtMjMxLDYgKzIzMSw3IEBACiAjZGVmaW5lIENYODhfQk9BUkRfU0FUVFJBREVfU1Q0MjAwICAgICAgICAgNzYKICNkZWZpbmUgQ1g4OF9CT0FSRF9UQlNfODkxMCAgICAgICAgICAgICAgICA3NwogI2RlZmluZSBDWDg4X0JPQVJEX1BST0ZfNjIwMCAgICAgICAgICAgICAgIDc4CisjZGVmaW5lIENYODhfQk9BUkRfVEVSUkFURUNfQ0lORVJHWV9IVF9QQ0lfTUtJSSA3OQogCiBlbnVtIGN4ODhfaXR5cGUgewogCUNYODhfVk1VWF9DT01QT1NJVEUxID0gMSwKQEAgLTMwMiw3ICszMDMsNiBAQAogCXN0cnVjdCBidGN4X3Jpc2NtZW0gICAgc3RvcHBlcjsKIAl1MzIgICAgICAgICAgICAgICAgICAgIGNvdW50OwogfTsKLXN0cnVjdCBjeDg4X2NvcmU7CiAKIHN0cnVjdCBjeDg4X2NvcmUgewogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgIGRldmxpc3Q7CkBAIC0zMjcsNiArMzI3LDggQEAKIAl1MzIgICAgICAgICAgICAgICAgICAgICAgICBpMmNfc3RhdGUsIGkyY19yYzsKIAogCS8qIGNvbmZpZyBpbmZvIC0tIGFuYWxvZyAqLworCXN0cnVjdCB2NGwyX2RldmljZSAJICAgdjRsMl9kZXY7CisJc3RydWN0IGkyY19jbGllbnQgCSAgICppMmNfcnRjOwogCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgIGJvYXJkbnI7CiAJc3RydWN0IGN4ODhfYm9hcmQJICAgYm9hcmQ7CiAKQEAgLTM2NSw2ICszNjcsMjIgQEAKIAlpbnQJCQkgICBhY3RpdmVfZmVfaWQ7CiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBjeDg4X2NvcmUgKnRvX2NvcmUoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldikKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3QgY3g4OF9jb3JlLCB2NGwyX2Rldik7Cit9CisKKyNkZWZpbmUgY2FsbF9hbGwoY29yZSwgbywgZiwgYXJncy4uLikgCQkJCVwKKwlkbyB7CQkJCQkJCVwKKwkJaWYgKCFjb3JlLT5pMmNfcmMpIHsJCQkJXAorCQkJaWYgKGNvcmUtPmdhdGVfY3RybCkJCQlcCisJCQkJY29yZS0+Z2F0ZV9jdHJsKGNvcmUsIDEpOwlcCisJCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmY29yZS0+djRsMl9kZXYsIDAsIG8sIGYsICMjYXJncyk7IFwKKwkJCWlmIChjb3JlLT5nYXRlX2N0cmwpCQkJXAorCQkJCWNvcmUtPmdhdGVfY3RybChjb3JlLCAwKTsJXAorCQl9CQkJCQkJXAorCX0gd2hpbGUgKDApCisKIHN0cnVjdCBjeDg4MDBfZGV2Owogc3RydWN0IGN4ODgwMl9kZXY7CiAKQEAgLTYxMCw4ICs2MjgsNiBAQAogLyogY3g4OC1pMmMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogZXh0ZXJuIGludCBjeDg4X2kyY19pbml0KHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsIHN0cnVjdCBwY2lfZGV2ICpwY2kpOwotZXh0ZXJuIHZvaWQgY3g4OF9jYWxsX2kyY19jbGllbnRzKHN0cnVjdCBjeDg4X2NvcmUgKmNvcmUsCi0JCQkJICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwogCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9kYWJ1c2IuYwppbmRleCAyOTg4MTBkLi5iYTM3MDliIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2RhYnVzYi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZGFidXNiLmMKQEAgLTE4OSwxNyArMTg5LDIwIEBACiAJCQkJCWRzdCArPSBsZW47CiAJCQkJfQogCQkJCWVsc2UKLQkJCQkJZXJyKCJkYWJ1c2JfaXNvX2NvbXBsZXRlOiBpbnZhbGlkIGxlbiAlZCIsIGxlbik7CisJCQkJCWRldl9lcnIoJnB1cmItPmRldi0+ZGV2LAorCQkJCQkJImRhYnVzYl9pc29fY29tcGxldGU6IGludmFsaWQgbGVuICVkXG4iLCBsZW4pOwogCQkJfQogCQkJZWxzZQogCQkJCWRldl93YXJuKCZwdXJiLT5kZXYtPmRldiwgImRhYnVzYl9pc29fY29tcGxldGU6IGNvcnJ1cHRlZCBwYWNrZXQgc3RhdHVzOiAlZFxuIiwgcHVyYi0+aXNvX2ZyYW1lX2Rlc2NbaV0uc3RhdHVzKTsKIAkJaWYgKGRzdCAhPSBwdXJiLT5hY3R1YWxfbGVuZ3RoKQotCQkJZXJyKCJkc3QhPXB1cmItPmFjdHVhbF9sZW5ndGg6JWQhPSVkIiwgZHN0LCBwdXJiLT5hY3R1YWxfbGVuZ3RoKTsKKwkJCWRldl9lcnIoJnB1cmItPmRldi0+ZGV2LAorCQkJCSJkc3QhPXB1cmItPmFjdHVhbF9sZW5ndGg6JWQhPSVkXG4iLAorCQkJCQlkc3QsIHB1cmItPmFjdHVhbF9sZW5ndGgpOwogCX0KIAogCWlmIChhdG9taWNfZGVjX2FuZF90ZXN0ICgmcy0+cGVuZGluZ19pbykgJiYgIXMtPnJlbW92ZV9wZW5kaW5nICYmIHMtPnN0YXRlICE9IF9zdG9wcGVkKSB7CiAJCXMtPm92ZXJydW5zKys7Ci0JCWVycigib3ZlcnJ1biAoJWQpIiwgcy0+b3ZlcnJ1bnMpOworCQlkZXZfZXJyKCZwdXJiLT5kZXYtPmRldiwgIm92ZXJydW4gKCVkKVxuIiwgcy0+b3ZlcnJ1bnMpOwogCX0KIAl3YWtlX3VwICgmcy0+d2FpdCk7CiB9CkBAIC0yMjAsMTMgKzIyMywxNCBAQAogCXdoaWxlICh0cmFuc2Zlcl9sZW4gPCAocy0+dG90YWxfYnVmZmVyX3NpemUgPDwgMTApKSB7CiAJCWIgPSBremFsbG9jKHNpemVvZiAoYnVmZl90KSwgR0ZQX0tFUk5FTCk7CiAJCWlmICghYikgewotCQkJZXJyKCJremFsbG9jKHNpemVvZihidWZmX3QpKT09TlVMTCIpOworCQkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsCisJCQkJImt6YWxsb2Moc2l6ZW9mKGJ1ZmZfdCkpPT1OVUxMXG4iKTsKIAkJCWdvdG8gZXJyOwogCQl9CiAJCWItPnMgPSBzOwogCQliLT5wdXJiID0gdXNiX2FsbG9jX3VyYihwYWNrZXRzLCBHRlBfS0VSTkVMKTsKIAkJaWYgKCFiLT5wdXJiKSB7Ci0JCQllcnIoInVzYl9hbGxvY191cmIgPT0gTlVMTCIpOworCQkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsICJ1c2JfYWxsb2NfdXJiID09IE5VTExcbiIpOwogCQkJa2ZyZWUgKGIpOwogCQkJZ290byBlcnI7CiAJCX0KQEAgLTIzNSw3ICsyMzksOCBAQAogCQlpZiAoIWItPnB1cmItPnRyYW5zZmVyX2J1ZmZlcikgewogCQkJa2ZyZWUgKGItPnB1cmIpOwogCQkJa2ZyZWUgKGIpOwotCQkJZXJyKCJrbWFsbG9jKCVkKT09TlVMTCIsIHRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgpOworCQkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsCisJCQkJImttYWxsb2MoJWQpPT1OVUxMXG4iLCB0cmFuc2Zlcl9idWZmZXJfbGVuZ3RoKTsKIAkJCWdvdG8gZXJyOwogCQl9CiAKQEAgLTI3OSwxMCArMjg0LDExIEBACiAKIAlyZXQ9dXNiX2J1bGtfbXNnKHMtPnVzYmRldiwgcGlwZSwgcGItPmRhdGEsIHBiLT5zaXplLCAmYWN0dWFsX2xlbmd0aCwgMTAwKTsKIAlpZihyZXQ8MCkgewotCQllcnIoImRhYnVzYjogdXNiX2J1bGtfbXNnIGZhaWxlZCglZCkiLHJldCk7CisJCWRldl9lcnIoJnMtPnVzYmRldi0+ZGV2LAorCQkJInVzYl9idWxrX21zZyBmYWlsZWQoJWQpXG4iLCByZXQpOwogCiAJCWlmICh1c2Jfc2V0X2ludGVyZmFjZSAocy0+dXNiZGV2LCBfREFCVVNCX0lGLCAxKSA8IDApIHsKLQkJCWVycigic2V0X2ludGVyZmFjZSBmYWlsZWQiKTsKKwkJCWRldl9lcnIoJnMtPnVzYmRldi0+ZGV2LCAic2V0X2ludGVyZmFjZSBmYWlsZWRcbiIpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIApAQCAtMjkxLDcgKzI5Nyw3IEBACiAJaWYoIHJldCA9PSAtRVBJUEUgKSB7CiAJCWRldl93YXJuKCZzLT51c2JkZXYtPmRldiwgIkNMRUFSX0ZFQVRVUkUgcmVxdWVzdCB0byByZW1vdmUgU1RBTEwgY29uZGl0aW9uLlxuIik7CiAJCWlmKHVzYl9jbGVhcl9oYWx0KHMtPnVzYmRldiwgdXNiX3BpcGVlbmRwb2ludChwaXBlKSkpCi0JCQllcnIoInJlcXVlc3QgZmFpbGVkIik7CisJCQlkZXZfZXJyKCZzLT51c2JkZXYtPmRldiwgInJlcXVlc3QgZmFpbGVkXG4iKTsKIAl9CiAKIAlwYi0+c2l6ZSA9IGFjdHVhbF9sZW5ndGg7CkBAIC0zMDUsNyArMzExLDggQEAKIAl1bnNpZ25lZCBjaGFyICp0cmFuc2Zlcl9idWZmZXIgPSAga21hbGxvYyAobGVuLCBHRlBfS0VSTkVMKTsKIAogCWlmICghdHJhbnNmZXJfYnVmZmVyKSB7Ci0JCWVycigiZGFidXNiX3dyaXRlbWVtOiBrbWFsbG9jKCVkKSBmYWlsZWQuIiwgbGVuKTsKKwkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsCisJCQkiZGFidXNiX3dyaXRlbWVtOiBrbWFsbG9jKCVkKSBmYWlsZWQuXG4iLCBsZW4pOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKQEAgLTMyNywxMyArMzM0LDE0IEBACiB7CiAJaW50IHJldDsKIAljb25zdCBzdHJ1Y3QgaWhleF9iaW5yZWMgKnJlYzsKLQljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3OworCWNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqdW5pbml0aWFsaXplZF92YXIoZncpOwogCiAJZGJnKCJFbnRlciBkYWJ1c2JfbG9hZG1lbSAoaW50ZXJuYWwpIik7CiAKIAlyZXQgPSByZXF1ZXN0X2loZXhfZmlybXdhcmUoJmZ3LCAiZGFidXNiL2Zpcm13YXJlLmZ3IiwgJnMtPnVzYmRldi0+ZGV2KTsKIAlpZiAocmV0KSB7Ci0JCWVycigiRmFpbGVkIHRvIGxvYWQgXCJkYWJ1c2IvZmlybXdhcmUuZndcIjogJWRcbiIsIHJldCk7CisJCWRldl9lcnIoJnMtPnVzYmRldi0+ZGV2LAorCQkJIkZhaWxlZCB0byBsb2FkIFwiZGFidXNiL2Zpcm13YXJlLmZ3XCI6ICVkXG4iLCByZXQpOwogCQlnb3RvIG91dDsKIAl9CiAJcmV0ID0gZGFidXNiXzgwNTFfcmVzZXQgKHMsIDEpOwpAQCAtMzQ2LDkgKzM1NCwxMCBAQAogCQlyZXQgPSBkYWJ1c2Jfd3JpdGVtZW0ocywgYmUzMl90b19jcHUocmVjLT5hZGRyKSwgcmVjLT5kYXRhLAogCQkJCSAgICAgICBiZTE2X3RvX2NwdShyZWMtPmxlbikpOwogCQlpZiAocmV0IDwgMCkgewotCQkJZXJyKCJkYWJ1c2Jfd3JpdGVtZW0gZmFpbGVkICglZCAlMDRYICVwICVkKSIsIHJldCwKLQkJCSAgICBiZTMyX3RvX2NwdShyZWMtPmFkZHIpLCByZWMtPmRhdGEsCi0JCQkgICAgYmUxNl90b19jcHUocmVjLT5sZW4pKTsKKwkJCWRldl9lcnIoJnMtPnVzYmRldi0+ZGV2LAorCQkJCSJkYWJ1c2Jfd3JpdGVtZW0gZmFpbGVkICglZCAlMDRYICVwICVkKVxuIiwKKwkJCQlyZXQsIGJlMzJfdG9fY3B1KHJlYy0+YWRkciksCisJCQkJcmVjLT5kYXRhLCBiZTE2X3RvX2NwdShyZWMtPmxlbikpOwogCQkJYnJlYWs7CiAJCX0KIAl9CkBAIC0zOTYsMTMgKzQwNSwxNSBAQAogCWRiZygiRW50ZXIgZGFidXNiX2ZwZ2FfZG93bmxvYWQgKGludGVybmFsKSIpOwogCiAJaWYgKCFiKSB7Ci0JCWVycigia21hbGxvYyhzaXplb2YoYnVsa190cmFuc2Zlcl90KSk9PU5VTEwiKTsKKwkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsCisJCQkia21hbGxvYyhzaXplb2YoYnVsa190cmFuc2Zlcl90KSk9PU5VTExcbiIpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAKIAlyZXQgPSByZXF1ZXN0X2Zpcm13YXJlKCZmdywgImRhYnVzYi9iaXRzdHJlYW0uYmluIiwgJnMtPnVzYmRldi0+ZGV2KTsKIAlpZiAocmV0KSB7Ci0JCWVycigiRmFpbGVkIHRvIGxvYWQgXCJkYWJ1c2IvYml0c3RyZWFtLmJpblwiOiAlZFxuIiwgcmV0KTsKKwkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsCisJCQkiRmFpbGVkIHRvIGxvYWQgXCJkYWJ1c2IvYml0c3RyZWFtLmJpblwiOiAlZFxuIiwgcmV0KTsKIAkJa2ZyZWUoYik7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtNDI1LDcgKzQzNiw3IEBACiAJCW1lbWNweSAoYi0+ZGF0YSArIDQsIGZ3LT5kYXRhICsgNzQgKyBuLCA2MCk7CiAJCXJldCA9IGRhYnVzYl9idWxrIChzLCBiKTsKIAkJaWYgKHJldCA8IDApIHsKLQkJCWVycigiZGFidXNiX2J1bGsgZmFpbGVkLiIpOworCQkJZGV2X2Vycigmcy0+dXNiZGV2LT5kZXYsICJkYWJ1c2JfYnVsayBmYWlsZWQuXG4iKTsKIAkJCWJyZWFrOwogCQl9CiAJCW1kZWxheSAoMSk7CkBAIC00NzgsOSArNDg5LDExIEBACiAKIAkJCXJldCA9IHVzYl9zdWJtaXRfdXJiIChlbmQtPnB1cmIsIEdGUF9LRVJORUwpOwogCQkJaWYgKHJldCkgewotCQkJCWVycigidXNiX3N1Ym1pdF91cmIgcmV0dXJuZWQ6JWQiLCByZXQpOworCQkJCWRldl9lcnIoJnMtPnVzYmRldi0+ZGV2LAorCQkJCQkidXNiX3N1Ym1pdF91cmIgcmV0dXJuZWQ6JWRcbiIsIHJldCk7CiAJCQkJaWYgKGRhYnVzYl9hZGRfYnVmX3RhaWwgKHMsICZzLT5mcmVlX2J1ZmZfbGlzdCwgJnMtPnJlY19idWZmX2xpc3QpKQotCQkJCQllcnIoInN0YXJ0cmVrOiBkYWJ1c2JfYWRkX2J1Zl90YWlsIGZhaWxlZCIpOworCQkJCQlkZXZfZXJyKCZzLT51c2JkZXYtPmRldiwKKwkJCQkJCSJzdGFydHJlazogZGFidXNiX2FkZF9idWZfdGFpbCBmYWlsZWRcbiIpOwogCQkJCWJyZWFrOwogCQkJfQogCQkJZWxzZQpAQCAtNTIzLDcgKzUzNiw4IEBACiAKIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKIAotCQkJZXJyKCJlcnJvcjogcmVjX2J1Zl9saXN0IGlzIGVtcHR5Iik7CisJCQlkZXZfZXJyKCZzLT51c2JkZXYtPmRldiwKKwkJCQkiZXJyb3I6IHJlY19idWZfbGlzdCBpcyBlbXB0eVxuIik7CiAJCQlnb3RvIGVycjsKIAkJfQogCkBAIC01NTIsNyArNTY2LDggQEAKIAogCQkJaWYgKGxpc3RfZW1wdHkgKCZzLT5yZWNfYnVmZl9saXN0KSkgewogCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKLQkJCQllcnIoImVycm9yOiBzdGlsbCBubyBidWZmZXIgYXZhaWxhYmxlLiIpOworCQkJCWRldl9lcnIoJnMtPnVzYmRldi0+ZGV2LAorCQkJCQkiZXJyb3I6IHN0aWxsIG5vIGJ1ZmZlciBhdmFpbGFibGUuXG4iKTsKIAkJCQlnb3RvIGVycjsKIAkJCX0KIAkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnMtPmxvY2ssIGZsYWdzKTsKQEAgLTU3Myw3ICs1ODgsNyBAQAogCQlkYmcoImNvcHlfdG9fdXNlcjolcCAlcCAlZCIsYnVmLCBwdXJiLT50cmFuc2Zlcl9idWZmZXIgKyBzLT5yZWFkcHRyLCBjbnQpOwogCiAJCWlmIChjb3B5X3RvX3VzZXIgKGJ1ZiwgcHVyYi0+dHJhbnNmZXJfYnVmZmVyICsgcy0+cmVhZHB0ciwgY250KSkgewotCQkJZXJyKCJyZWFkOiBjb3B5X3RvX3VzZXIgZmFpbGVkIik7CisJCQlkZXZfZXJyKCZzLT51c2JkZXYtPmRldiwgInJlYWQ6IGNvcHlfdG9fdXNlciBmYWlsZWRcbiIpOwogCQkJaWYgKCFyZXQpCiAJCQkJcmV0ID0gLUVGQVVMVDsKIAkJCWdvdG8gZXJyOwpAQCAtNTg3LDcgKzYwMiw4IEBACiAJCWlmIChzLT5yZWFkcHRyID09IHB1cmItPmFjdHVhbF9sZW5ndGgpIHsKIAkJCS8vIGZpbmlzaGVkLCB0YWtlIG5leHQgYnVmZmVyCiAJCQlpZiAoZGFidXNiX2FkZF9idWZfdGFpbCAocywgJnMtPmZyZWVfYnVmZl9saXN0LCAmcy0+cmVjX2J1ZmZfbGlzdCkpCi0JCQkJZXJyKCJyZWFkOiBkYWJ1c2JfYWRkX2J1Zl90YWlsIGZhaWxlZCIpOworCQkJCWRldl9lcnIoJnMtPnVzYmRldi0+ZGV2LAorCQkJCQkicmVhZDogZGFidXNiX2FkZF9idWZfdGFpbCBmYWlsZWRcbiIpOwogCQkJcy0+cmVhZHB0ciA9IDA7CiAJCX0KIAl9CkBAIC02MjMsNyArNjM5LDcgQEAKIAl9CiAJaWYgKHVzYl9zZXRfaW50ZXJmYWNlIChzLT51c2JkZXYsIF9EQUJVU0JfSUYsIDEpIDwgMCkgewogCQltdXRleF91bmxvY2soJnMtPm11dGV4KTsKLQkJZXJyKCJzZXRfaW50ZXJmYWNlIGZhaWxlZCIpOworCQlkZXZfZXJyKCZzLT51c2JkZXYtPmRldiwgInNldF9pbnRlcmZhY2UgZmFpbGVkXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXMtPm9wZW5lZCA9IDE7CkBAIC02NDgsNyArNjY0LDcgQEAKIAogCWlmICghcy0+cmVtb3ZlX3BlbmRpbmcpIHsKIAkJaWYgKHVzYl9zZXRfaW50ZXJmYWNlIChzLT51c2JkZXYsIF9EQUJVU0JfSUYsIDApIDwgMCkKLQkJCWVycigic2V0X2ludGVyZmFjZSBmYWlsZWQiKTsKKwkJCWRldl9lcnIoJnMtPnVzYmRldi0+ZGV2LCAic2V0X2ludGVyZmFjZSBmYWlsZWRcbiIpOwogCX0KIAllbHNlCiAJCXdha2VfdXAgKCZzLT5yZW1vdmVfb2spOwpAQCAtNjU3LDcgKzY3Myw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgZGFidXNiX2lvY3RsIChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCitzdGF0aWMgbG9uZyBkYWJ1c2JfaW9jdGwgKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAlwZGFidXNiX3QgcyA9IChwZGFidXNiX3QpIGZpbGUtPnByaXZhdGVfZGF0YTsKIAlwYnVsa190cmFuc2Zlcl90IHBidWxrOwpAQCAtNjY2LDEzICs2ODIsMTcgQEAKIAogCWRiZygiZGFidXNiX2lvY3RsIik7CiAKLQlpZiAocy0+cmVtb3ZlX3BlbmRpbmcpCisJbG9ja19rZXJuZWwoKTsKKwlpZiAocy0+cmVtb3ZlX3BlbmRpbmcpIHsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVJTzsKKwl9CiAKIAltdXRleF9sb2NrKCZzLT5tdXRleCk7CiAKIAlpZiAoIXMtPnVzYmRldikgewogCQltdXRleF91bmxvY2soJnMtPm11dGV4KTsKKwkJdW5sb2NrX2tlcm5lbCgpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKQEAgLTcxMyw2ICs3MzMsNyBAQAogCQlicmVhazsKIAl9CiAJbXV0ZXhfdW5sb2NrKCZzLT5tdXRleCk7CisJdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTcyMSw3ICs3NDIsNyBAQAogCS5vd25lciA9CVRISVNfTU9EVUxFLAogCS5sbHNlZWsgPQlub19sbHNlZWssCiAJLnJlYWQgPQkJZGFidXNiX3JlYWQsCi0JLmlvY3RsID0JZGFidXNiX2lvY3RsLAorCS51bmxvY2tlZF9pb2N0bCA9CWRhYnVzYl9pb2N0bCwKIAkub3BlbiA9CQlkYWJ1c2Jfb3BlbiwKIAkucmVsZWFzZSA9CWRhYnVzYl9yZWxlYXNlLAogfTsKQEAgLTc2NCw3ICs3ODUsNyBAQAogCXMtPmRldm51bSA9IGludGYtPm1pbm9yOwogCiAJaWYgKHVzYl9yZXNldF9jb25maWd1cmF0aW9uICh1c2JkZXYpIDwgMCkgewotCQllcnIoInJlc2V0X2NvbmZpZ3VyYXRpb24gZmFpbGVkIik7CisJCWRldl9lcnIoJmludGYtPmRldiwgInJlc2V0X2NvbmZpZ3VyYXRpb24gZmFpbGVkXG4iKTsKIAkJZ290byByZWplY3Q7CiAJfQogCWlmIChsZTE2X3RvX2NwdSh1c2JkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSA9PSAweDIxMzEpIHsKQEAgLTc3NSw3ICs3OTYsNyBAQAogCQlkYWJ1c2JfZnBnYV9kb3dubG9hZCAocywgTlVMTCk7CiAKIAkJaWYgKHVzYl9zZXRfaW50ZXJmYWNlIChzLT51c2JkZXYsIF9EQUJVU0JfSUYsIDApIDwgMCkgewotCQkJZXJyKCJzZXRfaW50ZXJmYWNlIGZhaWxlZCIpOworCQkJZGV2X2VycigmaW50Zi0+ZGV2LCAic2V0X2ludGVyZmFjZSBmYWlsZWRcbiIpOwogCQkJZ290byByZWplY3Q7CiAJCX0KIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtYXVkaW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jCmluZGV4IGYxMzJlMzEuLjAxMzEzMjIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1hdWRpby5jCkBAIC01Niw3ICs1Niw3IEBACiAKIHN0YXRpYyBpbnQgaW5kZXhbU05EUlZfQ0FSRFNdID0gU05EUlZfREVGQVVMVF9JRFg7CiAKLXN0YXRpYyBpbnQgZW0yOHh4X2lzb2NfYXVkaW9fZGVpbml0KHN0cnVjdCBlbTI4eHggKmRldikKK3N0YXRpYyBpbnQgZW0yOHh4X2RlaW5pdF9pc29jX2F1ZGlvKHN0cnVjdCBlbTI4eHggKmRldikKIHsKIAlpbnQgaTsKIApAQCAtNjYsNiArNjYsNyBAQAogCQkJdXNiX2tpbGxfdXJiKGRldi0+YWRldi51cmJbaV0pOwogCQllbHNlCiAJCQl1c2JfdW5saW5rX3VyYihkZXYtPmFkZXYudXJiW2ldKTsKKwogCQl1c2JfZnJlZV91cmIoZGV2LT5hZGV2LnVyYltpXSk7CiAJCWRldi0+YWRldi51cmJbaV0gPSBOVUxMOwogCkBAIC04Nyw2ICs4OCwyMCBAQAogCXVuc2lnbmVkIGludCAgICAgICAgICAgICBzdHJpZGU7CiAJc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW07CiAJc3RydWN0IHNuZF9wY21fcnVudGltZSAgICpydW50aW1lOworCisJc3dpdGNoICh1cmItPnN0YXR1cykgeworCWNhc2UgMDogICAgICAgICAgICAgLyogc3VjY2VzcyAqLworCWNhc2UgLUVUSU1FRE9VVDogICAgLyogTkFLICovCisJCWJyZWFrOworCWNhc2UgLUVDT05OUkVTRVQ6ICAgLyoga2lsbCAqLworCWNhc2UgLUVOT0VOVDoKKwljYXNlIC1FU0hVVERPV046CisJCXJldHVybjsKKwlkZWZhdWx0OiAgICAgICAgICAgIC8qIGVycm9yICovCisJCWRwcmludGsoInVyYiBjb21wbGV0aXRpb24gZXJyb3IgJWQuXG4iLCB1cmItPnN0YXR1cyk7CisJCWJyZWFrOworCX0KKwogCWlmIChkZXYtPmFkZXYuY2FwdHVyZV9wY21fc3Vic3RyZWFtKSB7CiAJCXN1YnN0cmVhbSA9IGRldi0+YWRldi5jYXB0dXJlX3BjbV9zdWJzdHJlYW07CiAJCXJ1bnRpbWUgPSBzdWJzdHJlYW0tPnJ1bnRpbWU7CkBAIC0xMzcsOSArMTUyLDYgQEAKIAl9CiAJdXJiLT5zdGF0dXMgPSAwOwogCi0JaWYgKGRldi0+YWRldi5zaHV0ZG93bikKLQkJcmV0dXJuOwotCiAJc3RhdHVzID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfQVRPTUlDKTsKIAlpZiAoc3RhdHVzIDwgMCkgewogCQllbTI4eHhfZXJyZGV2KCJyZXN1Ym1pdCBvZiBhdWRpbyB1cmIgZmFpbGVkIChlcnJvcj0laSlcbiIsCkBAIC0xOTcsOCArMjA5LDcgQEAKIAlmb3IgKGkgPSAwOyBpIDwgRU0yOFhYX0FVRElPX0JVRlM7IGkrKykgewogCQllcnJDb2RlID0gdXNiX3N1Ym1pdF91cmIoZGV2LT5hZGV2LnVyYltpXSwgR0ZQX0FUT01JQyk7CiAJCWlmIChlcnJDb2RlKSB7Ci0JCQllbTI4eHhfaXNvY19hdWRpb19kZWluaXQoZGV2KTsKLQorCQkJZW0yOHh4X2RlaW5pdF9pc29jX2F1ZGlvKGRldik7CiAJCQlyZXR1cm4gZXJyQ29kZTsKIAkJfQogCX0KQEAgLTIxMywxNCArMjI0LDE2IEBACiAKIAlzd2l0Y2ggKGNtZCkgewogCWNhc2UgRU0yOFhYX0NBUFRVUkVfU1RSRUFNX0VOOgotCQlpZiAoZGV2LT5hZGV2LmNhcHR1cmVfc3RyZWFtID09IFNUUkVBTV9PRkYgJiYgYXJnID09IDEpIHsKKwkJaWYgKGRldi0+YWRldi5jYXB0dXJlX3N0cmVhbSA9PSBTVFJFQU1fT0ZGICYmCisJCSAgICBhcmcgPT0gRU0yOFhYX1NUQVJUX0FVRElPKSB7CiAJCQlkZXYtPmFkZXYuY2FwdHVyZV9zdHJlYW0gPSBTVFJFQU1fT047CiAJCQllbTI4eHhfaW5pdF9hdWRpb19pc29jKGRldik7Ci0JCX0gZWxzZSBpZiAoZGV2LT5hZGV2LmNhcHR1cmVfc3RyZWFtID09IFNUUkVBTV9PTiAmJiBhcmcgPT0gMCkgeworCQl9IGVsc2UgaWYgKGRldi0+YWRldi5jYXB0dXJlX3N0cmVhbSA9PSBTVFJFQU1fT04gJiYKKwkJCSAgIGFyZyA9PSBFTTI4WFhfU1RPUF9BVURJTykgewogCQkJZGV2LT5hZGV2LmNhcHR1cmVfc3RyZWFtID0gU1RSRUFNX09GRjsKLQkJCWVtMjh4eF9pc29jX2F1ZGlvX2RlaW5pdChkZXYpOworCQkJZW0yOHh4X2RlaW5pdF9pc29jX2F1ZGlvKGRldik7CiAJCX0gZWxzZSB7Ci0JCQlwcmludGsoS0VSTl9FUlIgIkFuIHVuZGVycnVuIHZlcnkgbGlrZWx5IG9jY3VycmVkLiAiCisJCQllbTI4eHhfZXJyZGV2KCJBbiB1bmRlcnJ1biB2ZXJ5IGxpa2VseSBvY2N1cnJlZC4gIgogCQkJCQkiSWdub3JpbmcgaXQuXG4iKTsKIAkJfQogCQlyZXR1cm4gMDsKQEAgLTIzNCw3ICsyNDcsNyBAQAogewogCXN0cnVjdCBzbmRfcGNtX3J1bnRpbWUgKnJ1bnRpbWUgPSBzdWJzLT5ydW50aW1lOwogCi0JZHByaW50aygiQWxvY2F0aW5nIHZidWZmZXJcbiIpOworCWRwcmludGsoIkFsbG9jYXRpbmcgdmJ1ZmZlclxuIik7CiAJaWYgKHJ1bnRpbWUtPmRtYV9hcmVhKSB7CiAJCWlmIChydW50aW1lLT5kbWFfYnl0ZXMgPiBzaXplKQogCQkJcmV0dXJuIDA7CkBAIC0zMDIsNyArMzE1LDkgQEAKIAkJZHByaW50aygiY2hhbmdpbmcgYWx0ZXJuYXRlIG51bWJlciB0byA3XG4iKTsKIAl9CiAKKwltdXRleF9sb2NrKCZkZXYtPmxvY2spOwogCWRldi0+YWRldi51c2VycysrOworCW11dGV4X3VubG9jaygmZGV2LT5sb2NrKTsKIAogCXNuZF9wY21faHdfY29uc3RyYWludF9pbnRlZ2VyKHJ1bnRpbWUsIFNORFJWX1BDTV9IV19QQVJBTV9QRVJJT0RTKTsKIAlkZXYtPmFkZXYuY2FwdHVyZV9wY21fc3Vic3RyZWFtID0gc3Vic3RyZWFtOwpAQCAtMzE3LDIyICszMzIsMTUgQEAKIHN0YXRpYyBpbnQgc25kX2VtMjh4eF9wY21fY2xvc2Uoc3RydWN0IHNuZF9wY21fc3Vic3RyZWFtICpzdWJzdHJlYW0pCiB7CiAJc3RydWN0IGVtMjh4eCAqZGV2ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotCWRldi0+YWRldi51c2Vycy0tOwogCiAJZHByaW50aygiY2xvc2luZyBkZXZpY2VcbiIpOwogCiAJZGV2LT5tdXRlID0gMTsKIAltdXRleF9sb2NrKCZkZXYtPmxvY2spOworCWRldi0+YWRldi51c2Vycy0tOwogCWVtMjh4eF9hdWRpb19hbmFsb2dfc2V0KGRldik7CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCi0JaWYgKGRldi0+YWRldi51c2VycyA9PSAwICYmIGRldi0+YWRldi5zaHV0ZG93biA9PSAxKSB7Ci0JCWRwcmludGsoImF1ZGlvIHVzZXJzOiAlZFxuIiwgZGV2LT5hZGV2LnVzZXJzKTsKLQkJZHByaW50aygiZGlzYWJsaW5nIGF1ZGlvIHN0cmVhbSFcbiIpOwotCQlkZXYtPmFkZXYuc2h1dGRvd24gPSAwOwotCQlkcHJpbnRrKCJyZWxlYXNlZCBsb2NrXG4iKTsKLQkJZW0yOHh4X2NtZChkZXYsIEVNMjhYWF9DQVBUVVJFX1NUUkVBTV9FTiwgMCk7Ci0JfQogCXJldHVybiAwOwogfQogCkBAIC0zNjMsNyArMzcxLDcgQEAKIAlkcHJpbnRrKCJTdG9wIGNhcHR1cmUsIGlmIG5lZWRlZFxuIik7CiAKIAlpZiAoZGV2LT5hZGV2LmNhcHR1cmVfc3RyZWFtID09IFNUUkVBTV9PTikKLQkJZW0yOHh4X2NtZChkZXYsIEVNMjhYWF9DQVBUVVJFX1NUUkVBTV9FTiwgMCk7CisJCWVtMjh4eF9jbWQoZGV2LCBFTTI4WFhfQ0FQVFVSRV9TVFJFQU1fRU4sIEVNMjhYWF9TVE9QX0FVRElPKTsKIAogCXJldHVybiAwOwogfQpAQCAtMzc3LDMzICszODUsNDAgQEAKIAkJCQkgICAgICBpbnQgY21kKQogewogCXN0cnVjdCBlbTI4eHggKmRldiA9IHNuZF9wY21fc3Vic3RyZWFtX2NoaXAoc3Vic3RyZWFtKTsKKwlpbnQgcmV0dmFsOwogCi0JZHByaW50aygiU2hvdWxkICVzIGNhcHR1cmVcbiIsIChjbWQgPT0gU05EUlZfUENNX1RSSUdHRVJfU1RBUlQpPwotCQkJCSAgICAgICAic3RhcnQiOiAic3RvcCIpOworCWRwcmludGsoIlNob3VsZCAlcyBjYXB0dXJlXG4iLCAoY21kID09IFNORFJWX1BDTV9UUklHR0VSX1NUQVJUKSA/CisJCQkJICAgICAgICJzdGFydCIgOiAic3RvcCIpOworCisJc3Bpbl9sb2NrKCZkZXYtPmFkZXYuc2xvY2spOwogCXN3aXRjaCAoY21kKSB7CiAJY2FzZSBTTkRSVl9QQ01fVFJJR0dFUl9TVEFSVDoKLQkJZW0yOHh4X2NtZChkZXYsIEVNMjhYWF9DQVBUVVJFX1NUUkVBTV9FTiwgMSk7Ci0JCXJldHVybiAwOworCQllbTI4eHhfY21kKGRldiwgRU0yOFhYX0NBUFRVUkVfU1RSRUFNX0VOLCBFTTI4WFhfU1RBUlRfQVVESU8pOworCQlyZXR2YWwgPSAwOworCQlicmVhazsKIAljYXNlIFNORFJWX1BDTV9UUklHR0VSX1NUT1A6Ci0JCWRldi0+YWRldi5zaHV0ZG93biA9IDE7Ci0JCXJldHVybiAwOworCQllbTI4eHhfY21kKGRldiwgRU0yOFhYX0NBUFRVUkVfU1RSRUFNX0VOLCBFTTI4WFhfU1RPUF9BVURJTyk7CisJCXJldHZhbCA9IDA7CisJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOworCQlyZXR2YWwgPSAtRUlOVkFMOwogCX0KKworCXNwaW5fdW5sb2NrKCZkZXYtPmFkZXYuc2xvY2spOworCXJldHVybiByZXR2YWw7CiB9CiAKIHN0YXRpYyBzbmRfcGNtX3VmcmFtZXNfdCBzbmRfZW0yOHh4X2NhcHR1cmVfcG9pbnRlcihzdHJ1Y3Qgc25kX3BjbV9zdWJzdHJlYW0KIAkJCQkJCSAgICAqc3Vic3RyZWFtKQogewotICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXN0cnVjdCBlbTI4eHggKmRldjsKIAlzbmRfcGNtX3VmcmFtZXNfdCBod3B0cl9kb25lOwogCiAJZGV2ID0gc25kX3BjbV9zdWJzdHJlYW1fY2hpcChzdWJzdHJlYW0pOwotICAgICAgIHNwaW5fbG9ja19pcnFzYXZlKCZkZXYtPmFkZXYuc2xvY2ssIGZsYWdzKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmZGV2LT5hZGV2LnNsb2NrLCBmbGFncyk7CiAJaHdwdHJfZG9uZSA9IGRldi0+YWRldi5od3B0cl9kb25lX2NhcHR1cmU7Ci0gICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5hZGV2LnNsb2NrLCBmbGFncyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGV2LT5hZGV2LnNsb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gaHdwdHJfZG9uZTsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jYXJkcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKaW5kZXggM2IzY2EzZi4uMGY0OGMwZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNhcmRzLmMKQEAgLTEyMiw2ICsxMjIsMjIgQEAKIAl7ICAtMSwJCQktMSwJCS0xLAkJLTF9LAogfTsKIAorLyogTXV0ZS91bm11dGUgKi8KK3N0YXRpYyBzdHJ1Y3QgZW0yOHh4X3JlZ19zZXEgY29tcHJvX3VubXV0ZV90dl9ncGlvW10gPSB7CisJe0VNMjhYWF9SMDhfR1BJTywJNSwJCTcsCQkxMH0sCisJeyAgLTEsCQkJLTEsCQktMSwJCS0xfSwKK307CisKK3N0YXRpYyBzdHJ1Y3QgZW0yOHh4X3JlZ19zZXEgY29tcHJvX3VubXV0ZV9zdmlkX2dwaW9bXSA9IHsKKwl7RU0yOFhYX1IwOF9HUElPLAk0LAkJNywJCTEwfSwKKwl7ICAtMSwJCQktMSwJCS0xLAkJLTF9LAorfTsKKworc3RhdGljIHN0cnVjdCBlbTI4eHhfcmVnX3NlcSBjb21wcm9fbXV0ZV9ncGlvW10gPSB7CisJe0VNMjhYWF9SMDhfR1BJTywJNiwJCTcsCQkxMH0sCisJeyAgLTEsCQkJLTEsCQktMSwJCS0xfSwKK307CisKIC8qCiAgKiAgQm9hcmQgZGVmaW5pdGlvbnMKICAqLwpAQCAtMTgzLDYgKzE5OSwyNSBAQAogCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKIAkJfSB9LAogCX0sCisJW0VNMjgyMF9CT0FSRF9HQURNRUlfVFZSMjAwXSA9IHsKKwkJLm5hbWUgICAgICAgICA9ICJHYWRtZWkgVFZSMjAwIiwKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX0xHX1BBTF9ORVdfVEFQQywKKwkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTFYLAorCQkuaW5wdXQgICAgICAgID0geyB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAorCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUyLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKKwkJfSwgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09NUE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCisJCX0sIHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgICA9IFNBQTcxMTVfU1ZJREVPMywKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCisJCX0gfSwKKwl9LAogCVtFTTI4MjBfQk9BUkRfVEVSUkFURUNfQ0lORVJHWV8yNTBdID0gewogCQkubmFtZSAgICAgICAgID0gIlRlcnJhdGVjIENpbmVyZ3kgMjUwIFVTQiIsCiAJCS50dW5lcl90eXBlICAgPSBUVU5FUl9MR19QQUxfTkVXX1RBUEMsCkBAIC0yMjUsNyArMjYwLDcgQEAKIAkJLm5hbWUgICAgICAgICA9ICJIYXVwcGF1Z2UgV2luVFYgVVNCIDIiLAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfUEhJTElQU19GTTEyMzZfTUszLAogCQkudGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5UIHwKLQkJCQlUREE5ODg3X1BPUlQxX0FDVElWRXwKKwkJCQlUREE5ODg3X1BPUlQxX0FDVElWRSB8CiAJCQkJVERBOTg4N19QT1JUMl9BQ1RJVkUsCiAJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKIAkJLmhhc19tc3AzNHh4ICA9IDEsCkBAIC0zNTAsMjYgKzM4NSw2IEBACiAJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9WSURFTywKIAkJfSB9LAogCX0sCi0JW0VNMjgyMV9CT0FSRF9QUk9MSU5LX1BMQVlUVl9VU0IyXSA9IHsKLQkJLm5hbWUgICAgICAgICA9ICJTSUlHIEFWVHVuZXItUFZSL1Byb2xpbmsgUGxheVRWIFVTQiAyLjAiLAotCQkudmFsaWQgICAgICAgID0gRU0yOFhYX0JPQVJEX05PVF9WQUxJREFURUQsCi0JCS50dW5lcl90eXBlICAgPSBUVU5FUl9MR19QQUxfTkVXX1RBUEMsCS8qIHVua25vd24/ICovCi0JCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQsCS8qIHVua25vd24/ICovCi0JCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExWCwKLQkJLmlucHV0ICAgICAgICA9IHsgewotCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKLQkJCS52bXV4ICAgICA9IFNBQTcxMTVfQ09NUE9TSVRFMiwKLQkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX0xJTkVfSU4sCi0JCX0sIHsKLQkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX0NPTVBPU0lURTEsCi0JCQkudm11eCAgICAgPSBTQUE3MTE1X0NPTVBPU0lURTAsCi0JCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAotCQl9LCB7Ci0JCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9TVklERU8sCi0JCQkudm11eCAgICAgPSBTQUE3MTE1X1NWSURFTzMsCi0JCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAotCQl9IH0sCi0JfSwKIAlbRU0yODIxX0JPQVJEX1NVUEVSQ09NUF9VU0JfMl0gPSB7CiAJCS5uYW1lICAgICAgICAgPSAiU3VwZXJjb21wIFVTQiAyLjAgVFYiLAogCQkudmFsaWQgICAgICAgID0gRU0yOFhYX0JPQVJEX05PVF9WQUxJREFURUQsCkBAIC00OTgsNyArNTEzLDcgQEAKIAl9LAogCVtFTTI4NjFfQk9BUkRfWUFLVU1PX01PVklFX01JWEVSXSA9IHsKIAkJLm5hbWUgICAgICAgICAgPSAiWWFrdW1vIE1vdmllTWl4ZXIiLAotCQkudHVuZXJfdHlwZSAgID0gVFVORVJfQUJTRU5ULAkvKiBDYXB0dXJlIG9ubHkgZGV2aWNlICovCisJCS50dW5lcl90eXBlICAgID0gVFVORVJfQUJTRU5ULAkvKiBDYXB0dXJlIG9ubHkgZGV2aWNlICovCiAJCS5kZWNvZGVyICAgICAgID0gRU0yOFhYX1RWUDUxNTAsCiAJCS5pbnB1dCAgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLApAQCAtNjA0LDYgKzYxOSw3IEBACiAJCS5tdHNfZmlybXdhcmUgPSAxLAogCQkuaGFzX2R2YiAgICAgID0gMSwKIAkJLmR2Yl9ncGlvICAgICA9IGhhdXBwYXVnZV93aW50dl9odnJfOTAwX2RpZ2l0YWwsCisJCS5pcl9jb2RlcyAgICAgPSBpcl9jb2Rlc19oYXVwcGF1Z2VfbmV3LAogCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCiAJCS5pbnB1dCAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCkBAIC02MjgsNiArNjQ0LDcgQEAKIAkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1hDMjAyOCwKIAkJLnR1bmVyX2dwaW8gICA9IGRlZmF1bHRfdHVuZXJfZ3BpbywKIAkJLm10c19maXJtd2FyZSA9IDEsCisJCS5pcl9jb2RlcyAgICAgPSBpcl9jb2Rlc19oYXVwcGF1Z2VfbmV3LAogCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCiAJCS5pbnB1dCAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCkBAIC04NDIsMTEgKzg1OSwxMSBAQAogCQl9IH0sCiAJfSwKIAlbRU0yODAwX0JPQVJEX0dSQUJCRUVYX1VTQjI4MDBdID0gewotCQkubmFtZSAgICAgICAgID0gImVNUElBIFRlY2hub2xvZ3ksIEluYy4gR3JhYkJlZVgrIFZpZGVvIEVuY29kZXIiLAotCQkuaXNfZW0yODAwICAgID0gMSwKLQkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTFYLAotCQkudHVuZXJfdHlwZSAgID0gVFVORVJfQUJTRU5ULCAvKiBjYXB0dXJlIG9ubHkgYm9hcmQgKi8KLQkJLmlucHV0ICAgICAgICA9IHsgeworCQkubmFtZSAgICAgICA9ICJlTVBJQSBUZWNobm9sb2d5LCBJbmMuIEdyYWJCZWVYKyBWaWRlbyBFbmNvZGVyIiwKKwkJLmlzX2VtMjgwMCAgPSAxLAorCQkuZGVjb2RlciAgICA9IEVNMjhYWF9TQUE3MTFYLAorCQkudHVuZXJfdHlwZSA9IFRVTkVSX0FCU0VOVCwgLyogY2FwdHVyZSBvbmx5IGJvYXJkICovCisJCS5pbnB1dCAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAogCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUwLAogCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKQEAgLTg5Nyw3ICs5MTQsNyBAQAogCQl9IH0sCiAJfSwKIAlbRU0yODIwX0JPQVJEX1BJTk5BQ0xFX0RWQ185MF0gPSB7Ci0JCS5uYW1lICAgICAgICAgPSAiUGlubmFjbGUgRGF6emxlIERWQyA5MC9EVkMgMTAwIiwKKwkJLm5hbWUgICAgICAgICA9ICJQaW5uYWNsZSBEYXp6bGUgRFZDIDkwLzEwMC8xMDEvMTA3IC8gS2Fpc2VyIEJhYXMgVmlkZW8gdG8gRFZEIG1ha2VyIiwKIAkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX0FCU0VOVCwgLyogY2FwdHVyZSBvbmx5IGJvYXJkICovCiAJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfU0FBNzExWCwKIAkJLmlucHV0ICAgICAgICA9IHsgewpAQCAtOTUyLDcgKzk2OSw3IEBACiAJCX0gfSwKIAl9LAogCVtFTTI4MjBfQk9BUkRfUFJPTElOS19QTEFZVFZfVVNCMl0gPSB7Ci0JCS5uYW1lICAgICAgICAgPSAiUGl4ZWx2aWV3IFByb2xpbmsgUGxheVRWIFVTQiAyLjAiLAorCQkubmFtZSAgICAgICAgID0gIlNJSUcgQVZUdW5lci1QVlIgLyBQaXhlbHZpZXcgUHJvbGluayBQbGF5VFYgVVNCIDIuMCIsCiAJCS5oYXNfc25hcHNob3RfYnV0dG9uID0gMSwKIAkJLnRkYTk4ODdfY29uZiA9IFREQTk4ODdfUFJFU0VOVCwKIAkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX1lNRUNfVFZGXzU1MzNNRiwKQEAgLTExOTgsNyArMTIxNSw5IEBACiAJCS5oYXNfZHZiICAgICAgPSAxLAogCQkuZHZiX2dwaW8gICAgID0ga3dvcmxkXzMzMHVfZGlnaXRhbCwKIAkJLnhjbGsgICAgICAgICAgICAgPSBFTTI4WFhfWENMS19GUkVRVUVOQ1lfMTJNSFosCi0JCS5pMmNfc3BlZWQgICAgICAgID0gRU0yOFhYX0kyQ19DTEtfV0FJVF9FTkFCTEUgfCBFTTI4WFhfSTJDX0VFUFJPTV9PTl9CT0FSRCB8IEVNMjhYWF9JMkNfRUVQUk9NX0tFWV9WQUxJRCwKKwkJLmkyY19zcGVlZCAgICAgICAgPSBFTTI4WFhfSTJDX0NMS19XQUlUX0VOQUJMRSB8CisJCQkJICAgIEVNMjhYWF9JMkNfRUVQUk9NX09OX0JPQVJEIHwKKwkJCQkgICAgRU0yOFhYX0kyQ19FRVBST01fS0VZX1ZBTElELAogCQkuaW5wdXQgICAgICAgID0geyB7CiAJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9URUxFVklTSU9OLAogCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUwLApAQCAtMTIyMywyMSArMTI0Miw4OCBAQAogCQkudHVuZXJfdHlwZSAgID0gVFVORVJfTEdfUEFMX05FV19UQVBDLAogCQkudGRhOTg4N19jb25mID0gVERBOTg4N19QUkVTRU5ULAogCQkuZGVjb2RlciAgICAgID0gRU0yOFhYX1RWUDUxNTAsCisJCS5hZGVjb2RlciAgICAgPSBFTTI4WFhfVFZBVURJTywKKwkJLm11dGVfZ3BpbyAgICA9IGNvbXByb19tdXRlX2dwaW8sCiAJCS5pbnB1dCAgICAgICAgPSB7IHsKIAkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCiAJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTAsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9WSURFTywKKwkJCS5ncGlvICAgICA9IGNvbXByb191bm11dGVfdHZfZ3BpbywKKwkJfSwgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICAgID0gVFZQNTE1MF9TVklERU8sCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQkJLmdwaW8gICAgID0gY29tcHJvX3VubXV0ZV9zdmlkX2dwaW8sCisJCX0gfSwKKwl9LAorCVtFTTI4NjBfQk9BUkRfS0FJT01ZX1RWTlBDX1UyXSA9IHsKKwkJLm5hbWUJICAgICAgPSAiS2Fpb215IFRWblBDIFUyIiwKKwkJLnZjaGFubmVscyAgICA9IDMsCisJCS50dW5lcl90eXBlICAgPSBUVU5FUl9YQzIwMjgsCisJCS50dW5lcl9hZGRyICAgPSAweDYxLAorCQkubXRzX2Zpcm13YXJlID0gMSwKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9UVlA1MTUwLAorCQkudHVuZXJfZ3BpbyAgID0gZGVmYXVsdF90dW5lcl9ncGlvLAorCQkuaXJfY29kZXMgICAgID0gaXJfY29kZXNfa2Fpb215LAorCQkuaW5wdXQgICAgICAgICAgPSB7IHsKKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1RFTEVWSVNJT04sCisJCQkudm11eCAgICAgPSBUVlA1MTUwX0NPTVBPU0lURTAsCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9WSURFTywKKworCQl9LCB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICAgID0gVFZQNTE1MF9DT01QT1NJVEUxLAogCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKIAkJfSwgewogCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAogCQkJLnZtdXggICAgID0gVFZQNTE1MF9TVklERU8sCiAJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAogCQl9IH0sCisJCS5yYWRpbwkJPSB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfUkFESU8sCisJCQkuYW11eCAgICAgPSBFTTI4WFhfQU1VWF9MSU5FX0lOLAorCQl9CisJfSwKKwlbRU0yODYwX0JPQVJEX0VBU1lDQVBdID0geworCQkubmFtZSAgICAgICAgID0gIkVhc3kgQ2FwIENhcHR1cmUgREMtNjAiLAorCQkudmNoYW5uZWxzICAgID0gMiwKKwkJLnR1bmVyX3R5cGUgICA9IFRVTkVSX0FCU0VOVCwKKwkJLmRlY29kZXIgICAgICA9IEVNMjhYWF9TQUE3MTFYLAorCQkuaW5wdXQgICAgICAgICAgID0geyB7CisJCQkudHlwZSAgICAgPSBFTTI4WFhfVk1VWF9DT01QT1NJVEUxLAorCQkJLnZtdXggICAgID0gU0FBNzExNV9DT01QT1NJVEUwLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKKwkJfSwgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfU1ZJREVPLAorCQkJLnZtdXggICAgID0gU0FBNzExNV9TVklERU8zLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfTElORV9JTiwKKwkJfSB9LAorCX0sCisJW0VNMjgyMF9CT0FSRF9JT0RBVEFfR1ZNVlBfU1pdID0geworCQkubmFtZSAgICAgICA9ICJJTy1EQVRBIEdWLU1WUC9TWiIsCisJCS50dW5lcl90eXBlICAgPSBUVU5FUl9QSElMSVBTX0ZNMTIzNl9NSzMsCisJCS50dW5lcl9ncGlvICAgPSBkZWZhdWx0X3R1bmVyX2dwaW8sCisJCS50ZGE5ODg3X2NvbmYgPSBUREE5ODg3X1BSRVNFTlQsCisJCS5kZWNvZGVyICAgICAgPSBFTTI4WFhfVFZQNTE1MCwKKwkJLmlucHV0ICAgICAgICA9IHsgeworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfVEVMRVZJU0lPTiwKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMCwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAorCQl9LCB7IC8qIENvbXBvc2l0ZSBoYXMgbm90IGJlZW4gdGVzdGVkIHlldCAqLworCQkJLnR5cGUgICAgID0gRU0yOFhYX1ZNVVhfQ09NUE9TSVRFMSwKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfQ09NUE9TSVRFMSwKKwkJCS5hbXV4ICAgICA9IEVNMjhYWF9BTVVYX1ZJREVPLAorCQl9LCB7IC8qIFMtdmlkZW8gaGFzIG5vdCBiZWVuIHRlc3RlZCB5ZXQgKi8KKwkJCS50eXBlICAgICA9IEVNMjhYWF9WTVVYX1NWSURFTywKKwkJCS52bXV4ICAgICA9IFRWUDUxNTBfU1ZJREVPLAorCQkJLmFtdXggICAgID0gRU0yOFhYX0FNVVhfVklERU8sCisJCX0gfSwKIAl9LAogfTsKIGNvbnN0IHVuc2lnbmVkIGludCBlbTI4eHhfYmNvdW50ID0gQVJSQVlfU0laRShlbTI4eHhfYm9hcmRzKTsKIAogLyogdGFibGUgb2YgZGV2aWNlcyB0aGF0IHdvcmsgd2l0aCB0aGlzIGRyaXZlciAqLwotc3RydWN0IHVzYl9kZXZpY2VfaWQgZW0yOHh4X2lkX3RhYmxlIFtdID0geworc3RydWN0IHVzYl9kZXZpY2VfaWQgZW0yOHh4X2lkX3RhYmxlW10gPSB7CiAJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHgyNzUwKSwKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjc1MF9CT0FSRF9VTktOT1dOIH0sCiAJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHgyNzUxKSwKQEAgLTEyNjAsNiArMTM0Niw4IEBACiAJCQkuZHJpdmVyX2luZm8gPSBFTTI4MjBfQk9BUkRfVU5LTk9XTiB9LAogCXsgVVNCX0RFVklDRSgweGViMWEsIDB4ZTMwMCksCiAJCQkuZHJpdmVyX2luZm8gPSBFTTI4NjFfQk9BUkRfS1dPUkxEX1BWUlRWXzMwMFUgfSwKKwl7IFVTQl9ERVZJQ0UoMHhlYjFhLCAweGUzMDMpLAorCQkJLmRyaXZlcl9pbmZvID0gRU0yODYwX0JPQVJEX0tBSU9NWV9UVk5QQ19VMiB9LAogCXsgVVNCX0RFVklDRSgweGViMWEsIDB4ZTMwNSksCiAJCQkuZHJpdmVyX2luZm8gPSBFTTI4ODBfQk9BUkRfS1dPUkxEX0RWQl8zMDVVIH0sCiAJeyBVU0JfREVWSUNFKDB4ZWIxYSwgMHhlMzEwKSwKQEAgLTEyNzgsNiArMTM2Niw4IEBACiAJCQkuZHJpdmVyX2luZm8gPSBFTTI4MDBfQk9BUkRfR1JBQkJFRVhfVVNCMjgwMCB9LAogCXsgVVNCX0RFVklDRSgweGViMWEsIDB4ZTM1NyksCiAJCQkuZHJpdmVyX2luZm8gPSBFTTI4NzBfQk9BUkRfS1dPUkxEXzM1NVUgfSwKKwl7IFVTQl9ERVZJQ0UoMHgxYjgwLCAweGUzMDIpLAorCQkJLmRyaXZlcl9pbmZvID0gRU0yODIwX0JPQVJEX1BJTk5BQ0xFX0RWQ185MCB9LCAvKiBLYWlzZXIgQmFhcyBWaWRlbyB0byBEVkQgbWFrZXIgKi8KIAl7IFVTQl9ERVZJQ0UoMHgwY2NkLCAweDAwMzYpLAogCQkJLmRyaXZlcl9pbmZvID0gRU0yODIwX0JPQVJEX1RFUlJBVEVDX0NJTkVSR1lfMjUwIH0sCiAJeyBVU0JfREVWSUNFKDB4MGNjZCwgMHgwMDRjKSwKQEAgLTEzMzAsNiArMTQyMCw4IEBACiAJCQkuZHJpdmVyX2luZm8gPSBFTTI4MDBfQk9BUkRfTEVBRFRFS19XSU5GQVNUX1VTQklJIH0sCiAJeyBVU0JfREVWSUNFKDB4MDkzYiwgMHhhMDA1KSwKIAkJCS5kcml2ZXJfaW5mbyA9IEVNMjg2MV9CT0FSRF9QTEVYVE9SX1BYX1RWMTAwVSB9LAorCXsgVVNCX0RFVklDRSgweDA0YmIsIDB4MDUxNSksCisJCQkuZHJpdmVyX2luZm8gPSBFTTI4MjBfQk9BUkRfSU9EQVRBX0dWTVZQX1NaIH0sCiAJeyB9LAogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBlbTI4eHhfaWRfdGFibGUpOwpAQCAtMTMzNyw3ICsxNDI5LDcgQEAKIC8qCiAgKiBFRVBST00gaGFzaCB0YWJsZSBmb3IgZGV2aWNlcyB3aXRoIGdlbmVyaWMgVVNCIElEcwogICovCi1zdGF0aWMgc3RydWN0IGVtMjh4eF9oYXNoX3RhYmxlIGVtMjh4eF9lZXByb21faGFzaCBbXSA9IHsKK3N0YXRpYyBzdHJ1Y3QgZW0yOHh4X2hhc2hfdGFibGUgZW0yOHh4X2VlcHJvbV9oYXNoW10gPSB7CiAJLyogUC9OOiBTQSA2MDAwMjA3MDQ2NSBUdW5lcjogVFZGNzUzMy1NRiAqLwogCXsweDZjZTA1YThmLCBFTTI4MjBfQk9BUkRfUFJPTElOS19QTEFZVFZfVVNCMiwgVFVORVJfWU1FQ19UVkZfNTUzM01GfSwKIAl7MHg3MmNjNWE4YiwgRU0yODIwX0JPQVJEX1BST0xJTktfUExBWVRWX0JPWDRfVVNCMiwgVFVORVJfWU1FQ19UVkZfNTUzM01GfSwKQEAgLTEzNDksNiArMTQ0MSw3IEBACiAJezB4YjA2YTMyYzMsIEVNMjgwMF9CT0FSRF9URVJSQVRFQ19DSU5FUkdZXzIwMCwgVFVORVJfTEdfUEFMX05FV19UQVBDfSwKIAl7MHhmNTEyMDBlMywgRU0yODAwX0JPQVJEX1ZHRUFSX1BPQ0tFVFRWLCBUVU5FUl9MR19QQUxfTkVXX1RBUEN9LAogCXsweDFiYTUwMDgwLCBFTTI4NjBfQk9BUkRfUE9JTlROSVhfSU5UUkFPUkFMX0NBTUVSQSwgVFVORVJfQUJTRU5UfSwKKwl7MHhjNTEyMDBlMywgRU0yODIwX0JPQVJEX0dBRE1FSV9UVlIyMDAsIFRVTkVSX0xHX1BBTF9ORVdfVEFQQ30sCiB9OwogCiBpbnQgZW0yOHh4X3R1bmVyX2NhbGxiYWNrKHZvaWQgKnB0ciwgaW50IGNvbXBvbmVudCwgaW50IGNvbW1hbmQsIGludCBhcmcpCkBAIC0xMzY4LDcgKzE0NjEsNyBAQAogfQogRVhQT1JUX1NZTUJPTF9HUEwoZW0yOHh4X3R1bmVyX2NhbGxiYWNrKTsKIAotc3RhdGljIHZvaWQgaW5saW5lIGVtMjh4eF9zZXRfbW9kZWwoc3RydWN0IGVtMjh4eCAqZGV2KQorc3RhdGljIGlubGluZSB2b2lkIGVtMjh4eF9zZXRfbW9kZWwoc3RydWN0IGVtMjh4eCAqZGV2KQogewogCW1lbWNweSgmZGV2LT5ib2FyZCwgJmVtMjh4eF9ib2FyZHNbZGV2LT5tb2RlbF0sIHNpemVvZihkZXYtPmJvYXJkKSk7CiAKQEAgLTE1MDQsNiArMTU5NywzNCBAQAogCQkvKiBlbmFibGVzIGF1ZGlvIGZvciB0aGF0IGRldmljZXMgKi8KIAkJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMDhfR1BJTywgMHhmZCk7CiAJCWJyZWFrOworCisJY2FzZSBFTTI4NjBfQk9BUkRfS0FJT01ZX1RWTlBDX1UyOgorCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIEVNMjhYWF9SMEZfWENMSywgIlx4MDciLCAxKTsKKwkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCBFTTI4WFhfUjA2X0kyQ19DTEssICJceDQwIiwgMSk7CisJCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgMHgwZCwgIlx4NDIiLCAxKTsKKwkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA4LCAiXHhmZCIsIDEpOworCQltc2xlZXAoMTApOworCQllbTI4eHhfd3JpdGVfcmVncyhkZXYsIDB4MDgsICJceGZmIiwgMSk7CisJCW1zbGVlcCgxMCk7CisJCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgMHgwOCwgIlx4N2YiLCAxKTsKKwkJbXNsZWVwKDEwKTsKKwkJZW0yOHh4X3dyaXRlX3JlZ3MoZGV2LCAweDA4LCAiXHg2YiIsIDEpOworCisJCWJyZWFrOworCWNhc2UgRU0yODYwX0JPQVJEX0VBU1lDQVA6CisJCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgMHgwOCwgIlx4ZjgiLCAxKTsKKwkJYnJlYWs7CisKKwljYXNlIEVNMjgyMF9CT0FSRF9JT0RBVEFfR1ZNVlBfU1o6CisJCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjA4X0dQSU8sIDB4ZmYpOworCQltc2xlZXAoNzApOworCQllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwOF9HUElPLCAweGY3KTsKKwkJbXNsZWVwKDEwKTsKKwkJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMDhfR1BJTywgMHhmZSk7CisJCW1zbGVlcCg3MCk7CisJCWVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjA4X0dQSU8sIDB4ZmQpOworCQltc2xlZXAoNzApOworCQlicmVhazsKIAl9CiAKIAllbTI4eHhfZ3Bpb19zZXQoZGV2LCBkZXYtPmJvYXJkLnR1bmVyX2dwaW8pOwpAQCAtMTYxMCw3ICsxNzMxLDcgQEAKIAkJCWVtMjh4eF9lcnJkZXYoIklmIHRoZSBib2FyZCB3ZXJlIG1pc3NkZXRlY3RlZCwgIgogCQkJCSAgICAgICJwbGVhc2UgZW1haWwgdGhpcyBsb2cgdG86XG4iKTsKIAkJCWVtMjh4eF9lcnJkZXYoIlx0VjRMIE1haWxpbmcgTGlzdCAiCi0JCQkJICAgICAgIiA8dmlkZW80bGludXgtbGlzdEByZWRoYXQuY29tPlxuIik7CisJCQkJICAgICAgIiA8bGludXgtbWVkaWFAdmdlci5rZXJuZWwub3JnPlxuIik7CiAJCQllbTI4eHhfZXJyZGV2KCJCb2FyZCBkZXRlY3RlZCBhcyAlc1xuIiwKIAkJCQkgICAgICBlbTI4eHhfYm9hcmRzW2Rldi0+bW9kZWxdLm5hbWUpOwogCkBAIC0xNjQyLDcgKzE3NjMsNyBAQAogCQkJZW0yOHh4X2VycmRldigiSWYgdGhlIGJvYXJkIHdlcmUgbWlzc2RldGVjdGVkLCAiCiAJCQkJICAgICAgInBsZWFzZSBlbWFpbCB0aGlzIGxvZyB0bzpcbiIpOwogCQkJZW0yOHh4X2VycmRldigiXHRWNEwgTWFpbGluZyBMaXN0ICIKLQkJCQkgICAgICAiIDx2aWRlbzRsaW51eC1saXN0QHJlZGhhdC5jb20+XG4iKTsKKwkJCQkgICAgICAiIDxsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmc+XG4iKTsKIAkJCWVtMjh4eF9lcnJkZXYoIkJvYXJkIGRldGVjdGVkIGFzICVzXG4iLAogCQkJCSAgICAgIGVtMjh4eF9ib2FyZHNbZGV2LT5tb2RlbF0ubmFtZSk7CiAKQEAgLTE2NTUsNyArMTc3Niw3IEBACiAJZW0yOHh4X2VycmRldigiWW91IG1heSB0cnkgdG8gdXNlIGNhcmQ9PG4+IGluc21vZCBvcHRpb24gdG8gIgogCQkgICAgICAid29ya2Fyb3VuZCB0aGF0LlxuIik7CiAJZW0yOHh4X2VycmRldigiUGxlYXNlIHNlbmQgYW4gZW1haWwgd2l0aCB0aGlzIGxvZyB0bzpcbiIpOwotCWVtMjh4eF9lcnJkZXYoIlx0VjRMIE1haWxpbmcgTGlzdCA8dmlkZW80bGludXgtbGlzdEByZWRoYXQuY29tPlxuIik7CisJZW0yOHh4X2VycmRldigiXHRWNEwgTWFpbGluZyBMaXN0IDxsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmc+XG4iKTsKIAllbTI4eHhfZXJyZGV2KCJCb2FyZCBlZXByb20gaGFzaCBpcyAweCUwOGx4XG4iLCBkZXYtPmhhc2gpOwogCWVtMjh4eF9lcnJkZXYoIkJvYXJkIGkyYyBkZXZpY2VsaXN0IGhhc2ggaXMgMHglMDhseFxuIiwgZGV2LT5pMmNfaGFzaCk7CiAKQEAgLTE4MDAsNiArMTkyMSw4IEBACiAJCXJlcXVlc3RfbW9kdWxlKCJ0dnA1MTUwIik7CiAJaWYgKGRldi0+Ym9hcmQudHVuZXJfdHlwZSAhPSBUVU5FUl9BQlNFTlQpCiAJCXJlcXVlc3RfbW9kdWxlKCJ0dW5lciIpOworCWlmIChkZXYtPmJvYXJkLmFkZWNvZGVyID09IEVNMjhYWF9UVkFVRElPKQorCQlyZXF1ZXN0X21vZHVsZSgidHZhdWRpbyIpOwogI2VuZGlmCiAKIAllbTI4eHhfY29uZmlnX3R1bmVyKGRldik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWNvcmUuYwppbmRleCA5NGZiMWI2Li44ZjE5OTljIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1jb3JlLmMKQEAgLTMzLDggKzMzLDggQEAKIC8qICNkZWZpbmUgRU5BQkxFX0RFQlVHX0lTT0NfRlJBTUVTICovCiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgY29yZV9kZWJ1ZzsKLW1vZHVsZV9wYXJhbShjb3JlX2RlYnVnLGludCwwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoY29yZV9kZWJ1ZywiZW5hYmxlIGRlYnVnIG1lc3NhZ2VzIFtjb3JlXSIpOworbW9kdWxlX3BhcmFtKGNvcmVfZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKGNvcmVfZGVidWcsICJlbmFibGUgZGVidWcgbWVzc2FnZXMgW2NvcmVdIik7CiAKICNkZWZpbmUgZW0yOHh4X2NvcmVkYmcoZm10LCBhcmcuLi4pIGRvIHtcCiAJaWYgKGNvcmVfZGVidWcpIFwKQEAgLTQyLDggKzQyLDggQEAKIAkJCSBkZXYtPm5hbWUsIF9fZnVuY19fICwgIyNhcmcpOyB9IHdoaWxlICgwKQogCiBzdGF0aWMgdW5zaWduZWQgaW50IHJlZ19kZWJ1ZzsKLW1vZHVsZV9wYXJhbShyZWdfZGVidWcsaW50LDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhyZWdfZGVidWcsImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBbVVJCIHJlZ10iKTsKK21vZHVsZV9wYXJhbShyZWdfZGVidWcsIGludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHJlZ19kZWJ1ZywgImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBbVVJCIHJlZ10iKTsKIAogI2RlZmluZSBlbTI4eHhfcmVnZGJnKGZtdCwgYXJnLi4uKSBkbyB7XAogCWlmIChyZWdfZGVidWcpIFwKQEAgLTc3LDcgKzc3LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAocmVnX2RlYnVnKSB7Ci0JCXByaW50ayggS0VSTl9ERUJVRyAiKHBpcGUgMHglMDh4KTogIgorCQlwcmludGsoS0VSTl9ERUJVRyAiKHBpcGUgMHglMDh4KTogIgogCQkJIklOOiAgJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICIsCiAJCQlwaXBlLAogCQkJVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCkBAIC0xNTQsNyArMTU0LDcgQEAKIAlpZiAocmVnX2RlYnVnKSB7CiAJCWludCBieXRlOwogCi0JCXByaW50ayggS0VSTl9ERUJVRyAiKHBpcGUgMHglMDh4KTogIgorCQlwcmludGsoS0VSTl9ERUJVRyAiKHBpcGUgMHglMDh4KTogIgogCQkJIk9VVDogJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ICUwMnggJTAyeCAlMDJ4ID4+PiIsCiAJCQlwaXBlLAogCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLApAQCAtMzc4LDYgKzM3OCwxMSBAQAogCQl9CiAJfQogCisJaWYgKGRldi0+Ym9hcmQubXV0ZV9ncGlvICYmIGRldi0+bXV0ZSkKKwkJZW0yOHh4X2dwaW9fc2V0KGRldiwgZGV2LT5ib2FyZC5tdXRlX2dwaW8pOworCWVsc2UKKwkJZW0yOHh4X2dwaW9fc2V0KGRldiwgSU5QVVQoZGV2LT5jdGxfaW5wdXQpLT5ncGlvKTsKKwogCXJldCA9IGVtMjh4eF93cml0ZV9yZWdfYml0cyhkZXYsIEVNMjhYWF9SMEVfQVVESU9TUkMsIGlucHV0LCAweGMwKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKQEAgLTQyNCw3ICs0MjksNyBAQAogCiAJeGNsayA9IGRldi0+Ym9hcmQueGNsayAmIDB4N2Y7CiAJaWYgKCFkZXYtPm11dGUpCi0JCXhjbGsgfD0gMHg4MDsKKwkJeGNsayB8PSBFTTI4WFhfWENMS19BVURJT19VTk1VVEU7CiAKIAlyZXQgPSBlbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwRl9YQ0xLLCB4Y2xrKTsKIAlpZiAocmV0IDwgMCkKQEAgLTQ2Miw3ICs0NjcsOCBAQAogCQlpZiAoZGV2LT5jdGxfYW91dHB1dCAmIEVNMjhYWF9BT1VUX1BDTV9JTikgewogCQkJaW50IHNlbCA9IGFjOTdfcmV0dXJuX3JlY29yZF9zZWxlY3QoZGV2LT5jdGxfYW91dHB1dCk7CiAKLQkJCS8qIFVzZSB0aGUgc2FtZSBpbnB1dCBmb3IgYm90aCBsZWZ0IGFuZCByaWdodCBjaGFubmVscyAqLworCQkJLyogVXNlIHRoZSBzYW1lIGlucHV0IGZvciBib3RoIGxlZnQgYW5kIHJpZ2h0CisJCQkgICBjaGFubmVscyAqLwogCQkJc2VsIHw9IChzZWwgPDwgOCk7CiAKIAkJCWVtMjh4eF93cml0ZV9hYzk3KGRldiwgQUM5N19SRUNPUkRfU0VMRUNULCBzZWwpOwpAQCAtNjk4LDcgKzcwNCw3IEBACiAJCWVtMjh4eF93cml0ZV9yZWdzKGRldiwgRU0yOFhYX1IzMl9WU0NBTEVMT1csIChjaGFyICopYnVmLCAyKTsKIAkJLyogaXQgc2VlbXMgdGhhdCBib3RoIEggYW5kIFYgc2NhbGVycyBtdXN0IGJlIGFjdGl2ZQogCQkgICB0byB3b3JrIGNvcnJlY3RseSAqLwotCQltb2RlID0gKGggfHwgdik/IDB4MzA6IDB4MDA7CisJCW1vZGUgPSAoaCB8fCB2KSA/IDB4MzAgOiAweDAwOwogCX0KIAlyZXR1cm4gZW0yOHh4X3dyaXRlX3JlZ19iaXRzKGRldiwgRU0yOFhYX1IyNl9DT01QUiwgbW9kZSwgMHgzMCk7CiB9CkBAIC04MjcsNiArODMzLDE5IEBACiAJc3RydWN0IGVtMjh4eCAqZGV2ID0gY29udGFpbmVyX29mKGRtYV9xLCBzdHJ1Y3QgZW0yOHh4LCB2aWRxKTsKIAlpbnQgcmMsIGk7CiAKKwlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CisJY2FzZSAwOiAgICAgICAgICAgICAvKiBzdWNjZXNzICovCisJY2FzZSAtRVRJTUVET1VUOiAgICAvKiBOQUsgKi8KKwkJYnJlYWs7CisJY2FzZSAtRUNPTk5SRVNFVDogICAvKiBraWxsICovCisJY2FzZSAtRU5PRU5UOgorCWNhc2UgLUVTSFVURE9XTjoKKwkJcmV0dXJuOworCWRlZmF1bHQ6ICAgICAgICAgICAgLyogZXJyb3IgKi8KKwkJZW0yOHh4X2lzb2NkYmcoInVyYiBjb21wbGV0aXRpb24gZXJyb3IgJWQuXG4iLCB1cmItPnN0YXR1cyk7CisJCWJyZWFrOworCX0KKwogCS8qIENvcHkgZGF0YSBmcm9tIFVSQiAqLwogCXNwaW5fbG9jaygmZGV2LT5zbG9jayk7CiAJcmMgPSBkZXYtPmlzb2NfY3RsLmlzb2NfY29weShkZXYsIHVyYik7CkBAIC05NDUsNyArOTY0LDcgQEAKIAkJCWVtMjh4eF9lcnIoInVuYWJsZSB0byBhbGxvY2F0ZSAlaSBieXRlcyBmb3IgdHJhbnNmZXIiCiAJCQkJCSIgYnVmZmVyICVpJXNcbiIsCiAJCQkJCXNiX3NpemUsIGksCi0JCQkJCWluX2ludGVycnVwdCgpPyIgd2hpbGUgaW4gaW50IjoiIik7CisJCQkJCWluX2ludGVycnVwdCgpID8gIiB3aGlsZSBpbiBpbnQiIDogIiIpOwogCQkJZW0yOHh4X3VuaW5pdF9pc29jKGRldik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQpAQCAtOTYzLDcgKzk4Miw3IEBACiAJCQkJIGVtMjh4eF9pcnFfY2FsbGJhY2ssIGRtYV9xLCAxKTsKIAogCQl1cmItPm51bWJlcl9vZl9wYWNrZXRzID0gbWF4X3BhY2tldHM7Ci0JCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVA7CisJCXVyYi0+dHJhbnNmZXJfZmxhZ3MgPSBVUkJfSVNPX0FTQVAgfCBVUkJfTk9fVFJBTlNGRVJfRE1BX01BUDsKIAogCQlrID0gMDsKIAkJZm9yIChqID0gMDsgaiA8IG1heF9wYWNrZXRzOyBqKyspIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1kdmIuYwppbmRleCA5YWQ4NTI3Li5mY2QyNTUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWR2Yi5jCkBAIC0yOSw5ICsyOSw2IEBACiAjaW5jbHVkZSAibGdkdDMzMHguaCIKICNpbmNsdWRlICJ6bDEwMzUzLmgiCiAjaW5jbHVkZSAiczVoMTQwOS5oIgotI2lmZGVmIEVNMjhYWF9EUlgzOTdYRF9TVVBQT1JUCi0jaW5jbHVkZSAiZHJ4Mzk3eEQuaCIKLSNlbmRpZgogCiBNT0RVTEVfREVTQ1JJUFRJT04oImRyaXZlciBmb3IgZW0yOHh4IGJhc2VkIERWQiBjYXJkcyIpOwogTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+Iik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHgtaTJjLmMKaW5kZXggZDY5ZjBlZi4uMDJjMTJmZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pMmMuYwpAQCAtNDAyLDEwICs0MDIsMTIgQEAKIAkJCQkgZGV2LT5uYW1lKTsKIAkJYnJlYWs7CiAJY2FzZSAyOgotCQlwcmludGsoS0VSTl9JTkZPICIlczpcdEkyUyBhdWRpbywgc2FtcGxlIHJhdGU9MzJrXG4iLCBkZXYtPm5hbWUpOworCQlwcmludGsoS0VSTl9JTkZPICIlczpcdEkyUyBhdWRpbywgc2FtcGxlIHJhdGU9MzJrXG4iLAorCQkJCSBkZXYtPm5hbWUpOwogCQlicmVhazsKIAljYXNlIDM6Ci0JCXByaW50ayhLRVJOX0lORk8gIiVzOlx0STJTIGF1ZGlvLCAzIHNhbXBsZSByYXRlc1xuIiwgZGV2LT5uYW1lKTsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6XHRJMlMgYXVkaW8sIDMgc2FtcGxlIHJhdGVzXG4iLAorCQkJCSBkZXYtPm5hbWUpOwogCQlicmVhazsKIAl9CiAKQEAgLTUwOCwxMiArNTEwLDE3IEBACiAJCWRwcmludGsxKDEsICJhdHRhY2hfaW5mb3JtOiB0dnA1MTUwIGRldGVjdGVkLlxuIik7CiAJCWJyZWFrOwogCisJY2FzZSAweGIwOgorCQlkcHJpbnRrMSgxLCAiYXR0YWNoX2luZm9ybTogdGRhOTg3NCBkZXRlY3RlZFxuIik7CisJCWJyZWFrOworCiAJZGVmYXVsdDoKIAkJaWYgKCFkZXYtPnR1bmVyX2FkZHIpCiAJCQlkZXYtPnR1bmVyX2FkZHIgPSBjbGllbnQtPmFkZHI7CiAKIAkJZHByaW50azEoMSwgImF0dGFjaCBpbmZvcm06IGRldGVjdGVkIEkyQyBhZGRyZXNzICV4XG4iLAogCQkJCWNsaWVudC0+YWRkciA8PCAxKTsKKwkJZHByaW50azEoMSwgImRyaXZlciBpZCAlZFxuIiwgY2xpZW50LT5kcml2ZXItPmlkKTsKIAogCX0KIApAQCAtNTUyLDYgKzU1OSw3IEBACiAJWzB4ODAgPj4gMV0gPSAibXNwMzR4eCIsCiAJWzB4ODggPj4gMV0gPSAibXNwMzR4eCIsCiAJWzB4YTAgPj4gMV0gPSAiZWVwcm9tIiwKKwlbMHhiMCA+PiAxXSA9ICJ0ZGE5ODc0IiwKIAlbMHhiOCA+PiAxXSA9ICJ0dnA1MTUwYSIsCiAJWzB4YmEgPj4gMV0gPSAidHZwNTE1MGEiLAogCVsweGMwID4+IDFdID0gInR1bmVyIChhbmFsb2cpIiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC1pbnB1dC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWlucHV0LmMKaW5kZXggMDQ0M2FmZS4uYTVhYmZkNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWlucHV0LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LWlucHV0LmMKQEAgLTY4LDggKzY4LDcgQEAKIAogCS8qIHBvbGwgZXh0ZXJuYWwgZGVjb2RlciAqLwogCWludCBwb2xsaW5nOwotCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwotCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworCXN0cnVjdCBkZWxheWVkX3dvcmsgd29yazsKIAl1bnNpZ25lZCBpbnQgbGFzdF90b2dnbGU6MTsKIAl1bnNpZ25lZCBpbnQgbGFzdF9yZWFkY291bnQ7CiAJdW5zaWduZWQgaW50IHJlcGVhdF9pbnRlcnZhbDsKQEAgLTI5MiwzMiArMjkxLDIzIEBACiAJcmV0dXJuOwogfQogCi1zdGF0aWMgdm9pZCBpcl90aW1lcih1bnNpZ25lZCBsb25nIGRhdGEpCi17Ci0Jc3RydWN0IGVtMjh4eF9JUiAqaXIgPSAoc3RydWN0IGVtMjh4eF9JUiAqKWRhdGE7Ci0KLQlzY2hlZHVsZV93b3JrKCZpci0+d29yayk7Ci19Ci0KIHN0YXRpYyB2b2lkIGVtMjh4eF9pcl93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3QgZW0yOHh4X0lSICppciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZW0yOHh4X0lSLCB3b3JrKTsKKwlzdHJ1Y3QgZW0yOHh4X0lSICppciA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgZW0yOHh4X0lSLCB3b3JrLndvcmspOwogCiAJZW0yOHh4X2lyX2hhbmRsZV9rZXkoaXIpOwotCW1vZF90aW1lcigmaXItPnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhpci0+cG9sbGluZykpOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmaXItPndvcmssIG1zZWNzX3RvX2ppZmZpZXMoaXItPnBvbGxpbmcpKTsKIH0KIAogc3RhdGljIHZvaWQgZW0yOHh4X2lyX3N0YXJ0KHN0cnVjdCBlbTI4eHhfSVIgKmlyKQogewotCXNldHVwX3RpbWVyKCZpci0+dGltZXIsIGlyX3RpbWVyLCAodW5zaWduZWQgbG9uZylpcik7Ci0JSU5JVF9XT1JLKCZpci0+d29yaywgZW0yOHh4X2lyX3dvcmspOwotCXNjaGVkdWxlX3dvcmsoJmlyLT53b3JrKTsKKwlJTklUX0RFTEFZRURfV09SSygmaXItPndvcmssIGVtMjh4eF9pcl93b3JrKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmlyLT53b3JrLCAwKTsKIH0KIAogc3RhdGljIHZvaWQgZW0yOHh4X2lyX3N0b3Aoc3RydWN0IGVtMjh4eF9JUiAqaXIpCiB7Ci0JZGVsX3RpbWVyX3N5bmMoJmlyLT50aW1lcik7Ci0JZmx1c2hfc2NoZWR1bGVkX3dvcmsoKTsKKwljYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoJmlyLT53b3JrKTsKIH0KIAogaW50IGVtMjh4eF9pcl9pbml0KHN0cnVjdCBlbTI4eHggKmRldikKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC12aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKaW5kZXggOGU2MWIyYy4uNTc1NDcyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9lbTI4eHgvZW0yOHh4LXZpZGVvLmMKQEAgLTE4Niw3ICsxODYsOCBAQAogCQllbTI4eHhfaXNvY2RiZygiT3ZlcmZsb3cgb2YgJXppIGJ5dGVzIHBhc3QgYnVmZmVyIGVuZCAoMSlcbiIsCiAJCQkgICAgICAgKChjaGFyICopc3RhcnR3cml0ZSArIGxlbmNvcHkpIC0KIAkJCSAgICAgICAoKGNoYXIgKilvdXRwICsgYnVmLT52Yi5zaXplKSk7Ci0JCWxlbmNvcHkgPSByZW1haW4gPSAoY2hhciAqKW91dHAgKyBidWYtPnZiLnNpemUgLSAoY2hhciAqKXN0YXJ0d3JpdGU7CisJCXJlbWFpbiA9IChjaGFyICopb3V0cCArIGJ1Zi0+dmIuc2l6ZSAtIChjaGFyICopc3RhcnR3cml0ZTsKKwkJbGVuY29weSA9IHJlbWFpbjsKIAl9CiAJaWYgKGxlbmNvcHkgPD0gMCkKIAkJcmV0dXJuOwpAQCAtMjAyLDcgKzIwMyw4IEBACiAJCWVsc2UKIAkJCWxlbmNvcHkgPSBieXRlc3BlcmxpbmU7CiAKLQkJaWYgKChjaGFyICopc3RhcnR3cml0ZSArIGxlbmNvcHkgPiAoY2hhciAqKW91dHAgKyBidWYtPnZiLnNpemUpIHsKKwkJaWYgKChjaGFyICopc3RhcnR3cml0ZSArIGxlbmNvcHkgPiAoY2hhciAqKW91dHAgKworCQkgICAgYnVmLT52Yi5zaXplKSB7CiAJCQllbTI4eHhfaXNvY2RiZygiT3ZlcmZsb3cgb2YgJXppIGJ5dGVzIHBhc3QgYnVmZmVyIGVuZCAoMilcbiIsCiAJCQkJICAgICAgICgoY2hhciAqKXN0YXJ0d3JpdGUgKyBsZW5jb3B5KSAtCiAJCQkJICAgICAgICgoY2hhciAqKW91dHAgKyBidWYtPnZiLnNpemUpKTsKQEAgLTM0Nyw3ICszNDksNyBAQAogCQl9CiAJCWlmIChwWzBdID09IDB4MjIgJiYgcFsxXSA9PSAweDVhKSB7CiAJCQllbTI4eHhfaXNvY2RiZygiVmlkZW8gZnJhbWUgJWQsIGxlbmd0aD0laSwgJXNcbiIsIHBbMl0sCi0JCQkJICAgICAgIGxlbiwgKHBbMl0gJiAxKT8gIm9kZCIgOiAiZXZlbiIpOworCQkJCSAgICAgICBsZW4sIChwWzJdICYgMSkgPyAib2RkIiA6ICJldmVuIik7CiAKIAkJCWlmICghKHBbMl0gJiAxKSkgewogCQkJCWlmIChidWYgIT0gTlVMTCkKQEAgLTQ3Niw3ICs0NzgsOSBAQAogc3RhdGljIHZvaWQKIGJ1ZmZlcl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCBzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICp2YikKIHsKLQlzdHJ1Y3QgZW0yOHh4X2J1ZmZlciAgICAqYnVmICAgICA9IGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IGVtMjh4eF9idWZmZXIsIHZiKTsKKwlzdHJ1Y3QgZW0yOHh4X2J1ZmZlciAgICAqYnVmICAgICA9IGNvbnRhaW5lcl9vZih2YiwKKwkJCQkJCQlzdHJ1Y3QgZW0yOHh4X2J1ZmZlciwKKwkJCQkJCQl2Yik7CiAJc3RydWN0IGVtMjh4eF9maCAgICAgICAgKmZoICAgICAgPSB2cS0+cHJpdl9kYXRhOwogCXN0cnVjdCBlbTI4eHggICAgICAgICAgICpkZXYgICAgID0gZmgtPmRldjsKIAlzdHJ1Y3QgZW0yOHh4X2RtYXF1ZXVlICAqdmlkcSAgICA9ICZkZXYtPnZpZHE7CkBAIC00ODksNyArNDkzLDkgQEAKIHN0YXRpYyB2b2lkIGJ1ZmZlcl9yZWxlYXNlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsCiAJCQkJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIpCiB7Ci0Jc3RydWN0IGVtMjh4eF9idWZmZXIgICAqYnVmICA9IGNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IGVtMjh4eF9idWZmZXIsIHZiKTsKKwlzdHJ1Y3QgZW0yOHh4X2J1ZmZlciAgICpidWYgID0gY29udGFpbmVyX29mKHZiLAorCQkJCQkJICAgIHN0cnVjdCBlbTI4eHhfYnVmZmVyLAorCQkJCQkJICAgIHZiKTsKIAlzdHJ1Y3QgZW0yOHh4X2ZoICAgICAgICpmaCAgID0gdnEtPnByaXZfZGF0YTsKIAlzdHJ1Y3QgZW0yOHh4ICAgICAgICAgICpkZXYgID0gKHN0cnVjdCBlbTI4eHggKilmaC0+ZGV2OwogCkBAIC01MzQsNiArNTQwLDEzIEBACiAJCQkmcm91dGUpOwogCX0KIAorCWlmIChkZXYtPmJvYXJkLmFkZWNvZGVyICE9IEVNMjhYWF9OT0FERUNPREVSKSB7CisJCXJvdXRlLmlucHV0ID0gZGV2LT5jdGxfYWlucHV0OworCQlyb3V0ZS5vdXRwdXQgPSBkZXYtPmN0bF9hb3V0cHV0OworCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HLAorCQkJJnJvdXRlKTsKKwl9CisKIAllbTI4eHhfYXVkaW9fYW5hbG9nX3NldChkZXYpOwogfQogCkBAIC01NTcsNyArNTcwLDcgQEAKIAogc3RhdGljIGludCByZXNfY2hlY2soc3RydWN0IGVtMjh4eF9maCAqZmgpCiB7Ci0JcmV0dXJuIChmaC0+c3RyZWFtX29uKTsKKwlyZXR1cm4gZmgtPnN0cmVhbV9vbjsKIH0KIAogc3RhdGljIHZvaWQgcmVzX2ZyZWUoc3RydWN0IGVtMjh4eF9maCAqZmgpCkBAIC03OTEsNyArODA0LDcgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLXN0YXRpYyBpbnQgdmlkaW9jX3Nfc3RkKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB2NGwyX3N0ZF9pZCAqIG5vcm0pCitzdGF0aWMgaW50IHZpZGlvY19zX3N0ZChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwgdjRsMl9zdGRfaWQgKm5vcm0pCiB7CiAJc3RydWN0IGVtMjh4eF9maCAgICpmaCAgPSBwcml2OwogCXN0cnVjdCBlbTI4eHggICAgICAqZGV2ID0gZmgtPmRldjsKQEAgLTEwMDgsOCArMTAyMSwxMyBAQAogCiAJaWYgKGRldi0+Ym9hcmQuaGFzX21zcDM0eHgpCiAJCWVtMjh4eF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX0dfQ1RSTCwgY3RybCk7Ci0JZWxzZQorCWVsc2UgewogCQlyYyA9IGVtMjh4eF9nZXRfY3RybChkZXYsIGN0cmwpOworCQlpZiAocmMgPCAwKSB7CisJCQllbTI4eHhfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19HX0NUUkwsIGN0cmwpOworCQkJcmMgPSAwOworCQl9CisJfQogCiAJbXV0ZXhfdW5sb2NrKCZkZXYtPmxvY2spOwogCXJldHVybiByYzsKQEAgLTEzNDUsNyArMTM2Myw3IEBACiAKIAlzdHJsY3B5KGNhcC0+ZHJpdmVyLCAiZW0yOHh4Iiwgc2l6ZW9mKGNhcC0+ZHJpdmVyKSk7CiAJc3RybGNweShjYXAtPmNhcmQsIGVtMjh4eF9ib2FyZHNbZGV2LT5tb2RlbF0ubmFtZSwgc2l6ZW9mKGNhcC0+Y2FyZCkpOwotCXN0cmxjcHkoY2FwLT5idXNfaW5mbywgZGV2X25hbWUoJmRldi0+dWRldi0+ZGV2KSwgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKKwl1c2JfbWFrZV9wYXRoKGRldi0+dWRldiwgY2FwLT5idXNfaW5mbywgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKIAogCWNhcC0+dmVyc2lvbiA9IEVNMjhYWF9WRVJTSU9OX0NPREU7CiAKQEAgLTE0MzEsNyArMTQ0OSw3IEBACiAJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCi0JcmV0dXJuICh2aWRlb2J1Zl9yZXFidWZzKCZmaC0+dmJfdmlkcSwgcmIpKTsKKwlyZXR1cm4gdmlkZW9idWZfcmVxYnVmcygmZmgtPnZiX3ZpZHEsIHJiKTsKIH0KIAogc3RhdGljIGludCB2aWRpb2NfcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCkBAIC0xNDQ1LDcgKzE0NjMsNyBAQAogCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKIAotCXJldHVybiAodmlkZW9idWZfcXVlcnlidWYoJmZoLT52Yl92aWRxLCBiKSk7CisJcmV0dXJuIHZpZGVvYnVmX3F1ZXJ5YnVmKCZmaC0+dmJfdmlkcSwgYik7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3FidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYikKQEAgLTE0NTgsNyArMTQ3Niw3IEBACiAJaWYgKHJjIDwgMCkKIAkJcmV0dXJuIHJjOwogCi0JcmV0dXJuICh2aWRlb2J1Zl9xYnVmKCZmaC0+dmJfdmlkcSwgYikpOworCXJldHVybiB2aWRlb2J1Zl9xYnVmKCZmaC0+dmJfdmlkcSwgYik7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX2RxYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIpCkBAIC0xNDcxLDggKzE0ODksNyBAQAogCWlmIChyYyA8IDApCiAJCXJldHVybiByYzsKIAotCXJldHVybiAodmlkZW9idWZfZHFidWYoJmZoLT52Yl92aWRxLCBiLAotCQkJCWZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSk7CisJcmV0dXJuIHZpZGVvYnVmX2RxYnVmKCZmaC0+dmJfdmlkcSwgYiwgZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spOwogfQogCiAjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCkBAIC0xNDk2LDcgKzE1MTMsNyBAQAogCiAJc3RybGNweShjYXAtPmRyaXZlciwgImVtMjh4eCIsIHNpemVvZihjYXAtPmRyaXZlcikpOwogCXN0cmxjcHkoY2FwLT5jYXJkLCBlbTI4eHhfYm9hcmRzW2Rldi0+bW9kZWxdLm5hbWUsIHNpemVvZihjYXAtPmNhcmQpKTsKLQlzdHJsY3B5KGNhcC0+YnVzX2luZm8sIGRldl9uYW1lKCZkZXYtPnVkZXYtPmRldiksIHNpemVvZihjYXAtPmJ1c19pbmZvKSk7CisJdXNiX21ha2VfcGF0aChkZXYtPnVkZXYsIGNhcC0+YnVzX2luZm8sIHNpemVvZihjYXAtPmJ1c19pbmZvKSk7CiAKIAljYXAtPnZlcnNpb24gPSBFTTI4WFhfVkVSU0lPTl9DT0RFOwogCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CkBAIC0xNzgxLDcgKzE3OTgsNyBAQAogICogZW0yOHh4X3Y0bDJfcG9sbCgpCiAgKiB3aWxsIGFsbG9jYXRlIGJ1ZmZlcnMgd2hlbiBjYWxsZWQgZm9yIHRoZSBmaXJzdCB0aW1lCiAgKi8KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZW0yOHh4X3Y0bDJfcG9sbChzdHJ1Y3QgZmlsZSAqZmlscCwgcG9sbF90YWJsZSAqIHdhaXQpCitzdGF0aWMgdW5zaWduZWQgaW50IGVtMjh4eF92NGwyX3BvbGwoc3RydWN0IGZpbGUgKmZpbHAsIHBvbGxfdGFibGUgKndhaXQpCiB7CiAJc3RydWN0IGVtMjh4eF9maCAqZmggPSBmaWxwLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IGVtMjh4eCAqZGV2ID0gZmgtPmRldjsKQEAgLTE5MzQsOCArMTk1MSw4IEBACiAKIAogc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgKmVtMjh4eF92ZGV2X2luaXQoc3RydWN0IGVtMjh4eCAqZGV2LAotCQkJCQkgICAgIGNvbnN0IHN0cnVjdCB2aWRlb19kZXZpY2UgKnRlbXBsYXRlLAotCQkJCQkgICAgIGNvbnN0IGNoYXIgKnR5cGVfbmFtZSkKKwkJCQkJY29uc3Qgc3RydWN0IHZpZGVvX2RldmljZSAqdGVtcGxhdGUsCisJCQkJCWNvbnN0IGNoYXIgKnR5cGVfbmFtZSkKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQ7CiAKQEAgLTE5ODQsOCArMjAwMSw5IEBACiAJLyogZW5hYmxlIHZiaSBjYXB0dXJpbmcgKi8KIAogLyoJZW0yOHh4X3dyaXRlX3JlZyhkZXYsIEVNMjhYWF9SMEVfQVVESU9TUkMsIDB4YzApOyBhdWRpbyByZWdpc3RlciAqLwotICAgICAgIHZhbCA9ICh1OCllbTI4eHhfcmVhZF9yZWcoZGV2LCBFTTI4WFhfUjBGX1hDTEspOwotICAgICAgIGVtMjh4eF93cml0ZV9yZWcoZGV2LCBFTTI4WFhfUjBGX1hDTEssIChFTTI4WFhfWENMS19BVURJT19VTk1VVEUgfCB2YWwpKTsKKwl2YWwgPSAodTgpZW0yOHh4X3JlYWRfcmVnKGRldiwgRU0yOFhYX1IwRl9YQ0xLKTsKKwllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IwRl9YQ0xLLAorCQkJIChFTTI4WFhfWENMS19BVURJT19VTk1VVEUgfCB2YWwpKTsKIAllbTI4eHhfd3JpdGVfcmVnKGRldiwgRU0yOFhYX1IxMV9WSU5DVFJMLCAweDUxKTsKIAogCWVtMjh4eF9zZXRfb3V0Zm10KGRldik7CkBAIC0yMDIwLDcgKzIwMzgsOCBAQAogCX0KIAogCWlmIChlbTI4eHhfYm9hcmRzW2Rldi0+bW9kZWxdLnJhZGlvLnR5cGUgPT0gRU0yOFhYX1JBRElPKSB7Ci0JCWRldi0+cmFkaW9fZGV2ID0gZW0yOHh4X3ZkZXZfaW5pdChkZXYsICZlbTI4eHhfcmFkaW9fdGVtcGxhdGUsICJyYWRpbyIpOworCQlkZXYtPnJhZGlvX2RldiA9IGVtMjh4eF92ZGV2X2luaXQoZGV2LCAmZW0yOHh4X3JhZGlvX3RlbXBsYXRlLAorCQkJCQkJICAicmFkaW8iKTsKIAkJaWYgKCFkZXYtPnJhZGlvX2RldikgewogCQkJZW0yOHh4X2VycmRldigiY2Fubm90IGFsbG9jYXRlIHZpZGVvX2RldmljZS5cbiIpOwogCQkJcmV0dXJuIC1FTk9ERVY7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2VtMjh4eC9lbTI4eHguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oCmluZGV4IGRkMmNkMzYuLmEzM2E1OGQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZW0yOHh4L2VtMjh4eC5oCkBAIC03MCw3ICs3MCw2IEBACiAjZGVmaW5lIEVNMjgyMF9CT0FSRF9WSURFT0xPR1lfMjBLMTRYVVNCCSAgMzAKICNkZWZpbmUgRU0yODIxX0JPQVJEX1VTQkdFQVJfVkQyMDQJCSAgMzEKICNkZWZpbmUgRU0yODIxX0JPQVJEX1NVUEVSQ09NUF9VU0JfMgkJICAzMgotI2RlZmluZSBFTTI4MjFfQk9BUkRfUFJPTElOS19QTEFZVFZfVVNCMgkgIDMzCiAjZGVmaW5lIEVNMjg2MF9CT0FSRF9URVJSQVRFQ19IWUJSSURfWFMJCSAgMzQKICNkZWZpbmUgRU0yODYwX0JPQVJEX1RZUEhPT05fRFZEX01BS0VSCQkgIDM1CiAjZGVmaW5lIEVNMjg2MF9CT0FSRF9ORVRHTUJIX0NBTQkJICAzNgpAQCAtOTgsNiArOTcsMTAgQEAKICNkZWZpbmUgRU0yODIwX0JPQVJEX0NPTVBST19WSURFT01BVEVfRk9SWU9VCSAgNTgKICNkZWZpbmUgRU0yODgzX0JPQVJEX0hBVVBQQVVHRV9XSU5UVl9IVlJfODUwCSAgNjAKICNkZWZpbmUgRU0yODIwX0JPQVJEX1BST0xJTktfUExBWVRWX0JPWDRfVVNCMgkgIDYxCisjZGVmaW5lIEVNMjgyMF9CT0FSRF9HQURNRUlfVFZSMjAwCQkgIDYyCisjZGVmaW5lIEVNMjg2MF9CT0FSRF9LQUlPTVlfVFZOUENfVTIgICAgICAgICAgICAgIDYzCisjZGVmaW5lIEVNMjg2MF9CT0FSRF9FQVNZQ0FQICAgICAgICAgICAgICAgICAgICAgIDY0CisjZGVmaW5lIEVNMjgyMF9CT0FSRF9JT0RBVEFfR1ZNVlBfU1oJCSAgNjUKIAogLyogTGltaXRzIG1pbmltdW0gYW5kIGRlZmF1bHQgbnVtYmVyIG9mIGJ1ZmZlcnMgKi8KICNkZWZpbmUgRU0yOFhYX01JTl9CVUYgNApAQCAtMTEwLDYgKzExMywxMCBAQAogI2RlZmluZSBFTTI4WFhfQk9BUkRfTk9UX1ZBTElEQVRFRCAxCiAjZGVmaW5lIEVNMjhYWF9CT0FSRF9WQUxJREFURUQJICAgMAogCisvKiBQYXJhbXMgZm9yIGVtMjh4eF9jbWQoKSBhdWRpbyAqLworI2RlZmluZSBFTTI4WFhfU1RBUlRfQVVESU8gICAgICAxCisjZGVmaW5lIEVNMjhYWF9TVE9QX0FVRElPICAgICAgIDAKKwogLyogbWF4aW11bSBudW1iZXIgb2YgZW0yOHh4IGJvYXJkcyAqLwogI2RlZmluZSBFTTI4WFhfTUFYQk9BUkRTIDQgLypGSVhNRTogc2hvdWxkIGJlIGJpZ2dlciAqLwogCkBAIC0xNTQsNyArMTYxLDggQEAKICovCiAKIC8qIHRpbWUgdG8gd2FpdCB3aGVuIHN0b3BwaW5nIHRoZSBpc29jIHRyYW5zZmVyICovCi0jZGVmaW5lIEVNMjhYWF9VUkJfVElNRU9VVCAgICAgICBtc2Vjc190b19qaWZmaWVzKEVNMjhYWF9OVU1fQlVGUyAqIEVNMjhYWF9OVU1fUEFDS0VUUykKKyNkZWZpbmUgRU0yOFhYX1VSQl9USU1FT1VUIFwKKwkJCW1zZWNzX3RvX2ppZmZpZXMoRU0yOFhYX05VTV9CVUZTICogRU0yOFhYX05VTV9QQUNLRVRTKQogCiAvKiB0aW1lIGluIG1zZWNzIHRvIHdhaXQgZm9yIGkyYyB3cml0ZXMgdG8gZmluaXNoICovCiAjZGVmaW5lIEVNMjgwMF9JMkNfV1JJVEVfVElNRU9VVCAyMApAQCAtMzQ4LDYgKzM1NiwxMSBAQAogCUVNMjhYWF9TQUE3MTFYLAogfTsKIAorZW51bSBlbTI4eHhfYWRlY29kZXIgeworCUVNMjhYWF9OT0FERUNPREVSID0gMCwKKwlFTTI4WFhfVFZBVURJTywKK307CisKIHN0cnVjdCBlbTI4eHhfYm9hcmQgewogCWNoYXIgKm5hbWU7CiAJaW50IHZjaGFubmVsczsKQEAgLTM2MSw2ICszNzQsNyBAQAogCXN0cnVjdCBlbTI4eHhfcmVnX3NlcSAqZHZiX2dwaW87CiAJc3RydWN0IGVtMjh4eF9yZWdfc2VxICpzdXNwZW5kX2dwaW87CiAJc3RydWN0IGVtMjh4eF9yZWdfc2VxICp0dW5lcl9ncGlvOworCXN0cnVjdCBlbTI4eHhfcmVnX3NlcSAqbXV0ZV9ncGlvOwogCiAJdW5zaWduZWQgaW50IGlzX2VtMjgwMDoxOwogCXVuc2lnbmVkIGludCBoYXNfbXNwMzR4eDoxOwpAQCAtMzczLDYgKzM4Nyw3IEBACiAJdW5zaWduZWQgY2hhciB4Y2xrLCBpMmNfc3BlZWQ7CiAKIAllbnVtIGVtMjh4eF9kZWNvZGVyIGRlY29kZXI7CisJZW51bSBlbTI4eHhfYWRlY29kZXIgYWRlY29kZXI7CiAKIAlzdHJ1Y3QgZW0yOHh4X2lucHV0ICAgICAgIGlucHV0W01BWF9FTTI4WFhfSU5QVVRdOwogCXN0cnVjdCBlbTI4eHhfaW5wdXQJICByYWRpbzsKQEAgLTQyMCw3ICs0MzUsNyBAQAogCXVuc2lnbmVkIGludCBod3B0cl9kb25lX2NhcHR1cmU7CiAJc3RydWN0IHNuZF9jYXJkICAgICAgICAgICAgKnNuZGNhcmQ7CiAKLQlpbnQgdXNlcnMsIHNodXRkb3duOworCWludCB1c2VyczsKIAllbnVtIGVtMjh4eF9zdHJlYW1fc3RhdGUgY2FwdHVyZV9zdHJlYW07CiAJc3BpbmxvY2tfdCBzbG9jazsKIH07CkBAIC01MjMsNyArNTM4LDggQEAKIAlpbnQgbnVtX2FsdDsJCS8qIE51bWJlciBvZiBhbHRlcm5hdGl2ZSBzZXR0aW5ncyAqLwogCXVuc2lnbmVkIGludCAqYWx0X21heF9wa3Rfc2l6ZTsJLyogYXJyYXkgb2Ygd01heFBhY2tldFNpemUgKi8KIAlzdHJ1Y3QgdXJiICp1cmJbRU0yOFhYX05VTV9CVUZTXTsJLyogdXJiIGZvciBpc29jIHRyYW5zZmVycyAqLwotCWNoYXIgKnRyYW5zZmVyX2J1ZmZlcltFTTI4WFhfTlVNX0JVRlNdOwkvKiB0cmFuc2ZlciBidWZmZXJzIGZvciBpc29jIHRyYW5zZmVyICovCisJY2hhciAqdHJhbnNmZXJfYnVmZmVyW0VNMjhYWF9OVU1fQlVGU107CS8qIHRyYW5zZmVyIGJ1ZmZlcnMgZm9yIGlzb2MKKwkJCQkJCSAgIHRyYW5zZmVyICovCiAJY2hhciB1cmJfYnVmW1VSQl9NQVhfQ1RSTF9TSVpFXTsJLyogdXJiIGNvbnRyb2wgbXNnIGJ1ZmZlciAqLwogCiAJLyogaGVscGVyIGZ1bmNzIHRoYXQgY2FsbCB1c2JfY29udHJvbF9tc2cgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvS2NvbmZpZwppbmRleCBlZTZhNjkxLi41NzhkYzRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9LY29uZmlnCkBAIC01Niw2ICs1NiwxNSBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2FfbWFycy4KIAorY29uZmlnIFVTQl9HU1BDQV9NUjk3MzEwQQorCXRyaXN0YXRlICJNYXJzLVNlbWkgTVI5NzMxMEEgVVNCIENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgTVI5NzMxMEEgY2hpcC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2FfbXI5NzMxMGEuCisKIGNvbmZpZyBVU0JfR1NQQ0FfT1Y1MTkKIAl0cmlzdGF0ZSAiT1Y1MTkgVVNCIENhbWVyYSBEcml2ZXIiCiAJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQpAQCAtMTY3LDYgKzE3NiwyNCBAQAogCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCiAJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2Ffc3BjYTU2MS4KIAorY29uZmlnIFVTQl9HU1BDQV9TUTkwNQorCXRyaXN0YXRlICJTUSBUZWNobm9sb2dpZXMgU1E5MDUgYmFzZWQgVVNCIENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgU1E5MDUgY2hpcC4KKworCSAgVG8gY29tcGlsZSB0aGlzIGRyaXZlciBhcyBhIG1vZHVsZSwgY2hvb3NlIE0gaGVyZTogdGhlCisJICBtb2R1bGUgd2lsbCBiZSBjYWxsZWQgZ3NwY2Ffc3E5MDUuCisKK2NvbmZpZyBVU0JfR1NQQ0FfU1E5MDVDCisJdHJpc3RhdGUgIlNRIFRlY2hub2xvZ2llcyBTUTkwNUMgYmFzZWQgVVNCIENhbWVyYSBEcml2ZXIiCisJZGVwZW5kcyBvbiBWSURFT19WNEwyICYmIFVTQl9HU1BDQQorCWhlbHAKKwkgIFNheSBZIGhlcmUgaWYgeW91IHdhbnQgc3VwcG9ydCBmb3IgY2FtZXJhcyBiYXNlZCBvbiB0aGUgU1E5MDVDIGNoaXAuCisKKwkgIFRvIGNvbXBpbGUgdGhpcyBkcml2ZXIgYXMgYSBtb2R1bGUsIGNob29zZSBNIGhlcmU6IHRoZQorCSAgbW9kdWxlIHdpbGwgYmUgY2FsbGVkIGdzcGNhX3NxOTA1Yy4KKwogY29uZmlnIFVTQl9HU1BDQV9TVEswMTQKIAl0cmlzdGF0ZSAiU3ludGVrIERWNDAwMCAoU1RLMDE0KSBVU0IgQ2FtZXJhIERyaXZlciIKIAlkZXBlbmRzIG9uIFZJREVPX1Y0TDIgJiYgVVNCX0dTUENBCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9NYWtlZmlsZQppbmRleCBiZDhkOWVlLi44YTY2NDNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvTWFrZWZpbGUKQEAgLTEsNTAgKzEsNTYgQEAKLW9iai0kKENPTkZJR19VU0JfR1NQQ0EpCQkrPSBnc3BjYV9tYWluLm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfQ09ORVgpCSs9IGdzcGNhX2NvbmV4Lm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfRVRPTVMpCSs9IGdzcGNhX2V0b21zLm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfRklORVBJWCkJKz0gZ3NwY2FfZmluZXBpeC5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX01BUlMpCSs9IGdzcGNhX21hcnMubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9PVjUxOSkJKz0gZ3NwY2Ffb3Y1MTkubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9PVjUzNCkJKz0gZ3NwY2Ffb3Y1MzQubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9QQUMyMDcpCSs9IGdzcGNhX3BhYzIwNy5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX1BBQzczMTEpICs9IGdzcGNhX3BhYzczMTEubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TT05JWEIpCSs9IGdzcGNhX3Nvbml4Yi5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX1NPTklYSikJKz0gZ3NwY2Ffc29uaXhqLm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwMCkgKz0gZ3NwY2Ffc3BjYTUwMC5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDEpICs9IGdzcGNhX3NwY2E1MDEubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TUENBNTA1KSArPSBnc3BjYV9zcGNhNTA1Lm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwNikgKz0gZ3NwY2Ffc3BjYTUwNi5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDgpICs9IGdzcGNhX3NwY2E1MDgubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TUENBNTYxKSArPSBnc3BjYV9zcGNhNTYxLm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfU1VOUExVUykgKz0gZ3NwY2Ffc3VucGx1cy5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX1NUSzAxNCkJKz0gZ3NwY2Ffc3RrMDE0Lm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfVDYxMykJKz0gZ3NwY2FfdDYxMy5vCi1vYmotJChDT05GSUdfVVNCX0dTUENBX1RWODUzMikJKz0gZ3NwY2FfdHY4NTMyLm8KLW9iai0kKENPTkZJR19VU0JfR1NQQ0FfVkMwMzJYKQkrPSBnc3BjYV92YzAzMngubwotb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9aQzNYWCkJKz0gZ3NwY2FfemMzeHgubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQSkgICAgICAgICAgKz0gZ3NwY2FfbWFpbi5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX0NPTkVYKSAgICArPSBnc3BjYV9jb25leC5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX0VUT01TKSAgICArPSBnc3BjYV9ldG9tcy5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX0ZJTkVQSVgpICArPSBnc3BjYV9maW5lcGl4Lm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfTUFSUykgICAgICs9IGdzcGNhX21hcnMubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9NUjk3MzEwQSkgKz0gZ3NwY2FfbXI5NzMxMGEubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9PVjUxOSkgICAgKz0gZ3NwY2Ffb3Y1MTkubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9PVjUzNCkgICAgKz0gZ3NwY2Ffb3Y1MzQubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9QQUMyMDcpICAgKz0gZ3NwY2FfcGFjMjA3Lm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfUEFDNzMxMSkgICs9IGdzcGNhX3BhYzczMTEubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TT05JWEIpICAgKz0gZ3NwY2Ffc29uaXhiLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfU09OSVhKKSAgICs9IGdzcGNhX3Nvbml4ai5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDApICArPSBnc3BjYV9zcGNhNTAwLm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwMSkgICs9IGdzcGNhX3NwY2E1MDEubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TUENBNTA1KSAgKz0gZ3NwY2Ffc3BjYTUwNS5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1NQQ0E1MDYpICArPSBnc3BjYV9zcGNhNTA2Lm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfU1BDQTUwOCkgICs9IGdzcGNhX3NwY2E1MDgubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TUENBNTYxKSAgKz0gZ3NwY2Ffc3BjYTU2MS5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1NROTA1KSAgICArPSBnc3BjYV9zcTkwNS5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1NROTA1QykgICArPSBnc3BjYV9zcTkwNWMubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9TVU5QTFVTKSAgKz0gZ3NwY2Ffc3VucGx1cy5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1NUSzAxNCkgICArPSBnc3BjYV9zdGswMTQubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9UNjEzKSAgICAgKz0gZ3NwY2FfdDYxMy5vCitvYmotJChDT05GSUdfVVNCX0dTUENBX1RWODUzMikgICArPSBnc3BjYV90djg1MzIubworb2JqLSQoQ09ORklHX1VTQl9HU1BDQV9WQzAzMlgpICAgKz0gZ3NwY2FfdmMwMzJ4Lm8KK29iai0kKENPTkZJR19VU0JfR1NQQ0FfWkMzWFgpICAgICs9IGdzcGNhX3pjM3h4Lm8KIAotZ3NwY2FfbWFpbi1vYmpzCQkJOj0gZ3NwY2EubwotZ3NwY2FfY29uZXgtb2JqcwkJOj0gY29uZXgubwotZ3NwY2FfZXRvbXMtb2JqcwkJOj0gZXRvbXMubwotZ3NwY2FfZmluZXBpeC1vYmpzCQk6PSBmaW5lcGl4Lm8KLWdzcGNhX21hcnMtb2JqcwkJCTo9IG1hcnMubwotZ3NwY2Ffb3Y1MTktb2JqcwkJOj0gb3Y1MTkubwotZ3NwY2Ffb3Y1MzQtb2JqcwkJOj0gb3Y1MzQubwotZ3NwY2FfcGFjMjA3LW9ianMJCTo9IHBhYzIwNy5vCi1nc3BjYV9wYWM3MzExLW9ianMJCTo9IHBhYzczMTEubwotZ3NwY2Ffc29uaXhiLW9ianMJCTo9IHNvbml4Yi5vCi1nc3BjYV9zb25peGotb2JqcwkJOj0gc29uaXhqLm8KLWdzcGNhX3NwY2E1MDAtb2JqcwkJOj0gc3BjYTUwMC5vCi1nc3BjYV9zcGNhNTAxLW9ianMJCTo9IHNwY2E1MDEubwotZ3NwY2Ffc3BjYTUwNS1vYmpzCQk6PSBzcGNhNTA1Lm8KLWdzcGNhX3NwY2E1MDYtb2JqcwkJOj0gc3BjYTUwNi5vCi1nc3BjYV9zcGNhNTA4LW9ianMJCTo9IHNwY2E1MDgubwotZ3NwY2Ffc3BjYTU2MS1vYmpzCQk6PSBzcGNhNTYxLm8KLWdzcGNhX3N0azAxNC1vYmpzCQk6PSBzdGswMTQubwotZ3NwY2Ffc3VucGx1cy1vYmpzCQk6PSBzdW5wbHVzLm8KLWdzcGNhX3Q2MTMtb2JqcwkJCTo9IHQ2MTMubwotZ3NwY2FfdHY4NTMyLW9ianMJCTo9IHR2ODUzMi5vCi1nc3BjYV92YzAzMngtb2JqcwkJOj0gdmMwMzJ4Lm8KLWdzcGNhX3pjM3h4LW9ianMJCTo9IHpjM3h4Lm8KK2dzcGNhX21haW4tb2JqcyAgICAgOj0gZ3NwY2EubworZ3NwY2FfY29uZXgtb2JqcyAgICA6PSBjb25leC5vCitnc3BjYV9ldG9tcy1vYmpzICAgIDo9IGV0b21zLm8KK2dzcGNhX2ZpbmVwaXgtb2JqcyAgOj0gZmluZXBpeC5vCitnc3BjYV9tYXJzLW9ianMgICAgIDo9IG1hcnMubworZ3NwY2FfbXI5NzMxMGEtb2JqcyA6PSBtcjk3MzEwYS5vCitnc3BjYV9vdjUxOS1vYmpzICAgIDo9IG92NTE5Lm8KK2dzcGNhX292NTM0LW9ianMgICAgOj0gb3Y1MzQubworZ3NwY2FfcGFjMjA3LW9ianMgICA6PSBwYWMyMDcubworZ3NwY2FfcGFjNzMxMS1vYmpzICA6PSBwYWM3MzExLm8KK2dzcGNhX3Nvbml4Yi1vYmpzICAgOj0gc29uaXhiLm8KK2dzcGNhX3Nvbml4ai1vYmpzICAgOj0gc29uaXhqLm8KK2dzcGNhX3NwY2E1MDAtb2JqcyAgOj0gc3BjYTUwMC5vCitnc3BjYV9zcGNhNTAxLW9ianMgIDo9IHNwY2E1MDEubworZ3NwY2Ffc3BjYTUwNS1vYmpzICA6PSBzcGNhNTA1Lm8KK2dzcGNhX3NwY2E1MDYtb2JqcyAgOj0gc3BjYTUwNi5vCitnc3BjYV9zcGNhNTA4LW9ianMgIDo9IHNwY2E1MDgubworZ3NwY2Ffc3BjYTU2MS1vYmpzICA6PSBzcGNhNTYxLm8KK2dzcGNhX3NxOTA1LW9ianMgICAgOj0gc3E5MDUubworZ3NwY2Ffc3E5MDVjLW9ianMgICA6PSBzcTkwNWMubworZ3NwY2Ffc3RrMDE0LW9ianMgICA6PSBzdGswMTQubworZ3NwY2Ffc3VucGx1cy1vYmpzICA6PSBzdW5wbHVzLm8KK2dzcGNhX3Q2MTMtb2JqcyAgICAgOj0gdDYxMy5vCitnc3BjYV90djg1MzItb2JqcyAgIDo9IHR2ODUzMi5vCitnc3BjYV92YzAzMngtb2JqcyAgIDo9IHZjMDMyeC5vCitnc3BjYV96YzN4eC1vYmpzICAgIDo9IHpjM3h4Lm8KIAotb2JqLSQoQ09ORklHX1VTQl9NNTYwMikJCSs9IG01NjAyLwotb2JqLSQoQ09ORklHX1VTQl9TVFYwNlhYKSAJKz0gc3R2MDZ4eC8KK29iai0kKENPTkZJR19VU0JfTTU2MDIpICAgKz0gbTU2MDIvCitvYmotJChDT05GSUdfVVNCX1NUVjA2WFgpICs9IHN0djA2eHgvCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvbmV4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2NvbmV4LmMKaW5kZXggMTc1M2Y1Yi4uMjE5Y2ZhNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9jb25leC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvY29uZXguYwpAQCAtMzYsOCArMzYsMTIgQEAKIAl1bnNpZ25lZCBjaGFyIGJyaWdodG5lc3M7CiAJdW5zaWduZWQgY2hhciBjb250cmFzdDsKIAl1bnNpZ25lZCBjaGFyIGNvbG9yczsKKwl1OCBxdWFsaXR5OworI2RlZmluZSBRVUFMSVRZX01JTiAzMAorI2RlZmluZSBRVUFMSVRZX01BWCA2MAorI2RlZmluZSBRVUFMSVRZX0RFRiA0MAogCi0JdW5zaWduZWQgY2hhciBxaW5kZXg7CisJdTggKmpwZWdfaGRyOwogfTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwpAQCAtODE1LDE0ICs4MTksMTMgQEAKIAlzdHJ1Y3QgY2FtICpjYW07CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDAxOwogCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKIAljYW0tPm5tb2RlcyA9IHNpemVvZiB2Z2FfbW9kZSAvIHNpemVvZiB2Z2FfbW9kZVswXTsKIAotCXNkLT5xaW5kZXggPSAwOwkJCS8qIHNldCB0aGUgcXVhbnRpemF0aW9uICovCiAJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKIAlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF9ERUY7CiAJc2QtPmNvbG9ycyA9IENPTE9SX0RFRjsKKwlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfREVGOwogCXJldHVybiAwOwogfQogCkBAIC04MzksNiArODQyLDE0IEBACiAKIHN0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogeworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCS8qIGNyZWF0ZSB0aGUgSlBFRyBoZWFkZXIgKi8KKwlzZC0+anBlZ19oZHIgPSBrbWFsbG9jKEpQRUdfSERSX1NaLCBHRlBfS0VSTkVMKTsKKwlqcGVnX2RlZmluZShzZC0+anBlZ19oZHIsIGdzcGNhX2Rldi0+aGVpZ2h0LCBnc3BjYV9kZXYtPndpZHRoLAorCQkJMHgyMik7CQkvKiBKUEVHIDQxMSAqLworCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7CisKIAljeDExNjQ2X2luaXRzaXplKGdzcGNhX2Rldik7CiAJY3gxMTY0Nl9mdyhnc3BjYV9kZXYpOwogCWN4X3NlbnNvcihnc3BjYV9kZXYpOwpAQCAtODQ5LDggKzg2MCwxMSBAQAogLyogY2FsbGVkIG9uIHN0cmVhbW9mZiB3aXRoIGFsdCAwIGFuZCBvbiBkaXNjb25uZWN0ICovCiBzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCByZXRyeSA9IDUwOwogCisJa2ZyZWUoc2QtPmpwZWdfaGRyKTsKKwogCWlmICghZ3NwY2FfZGV2LT5wcmVzZW50KQogCQlyZXR1cm47CiAJcmVnX3dfdmFsKGdzcGNhX2RldiwgMHgwMDAwLCAweDAwKTsKQEAgLTg3Niw2ICs4OTAsOCBAQAogCQkJX191OCAqZGF0YSwJCQkvKiBpc29jIHBhY2tldCAqLwogCQkJaW50IGxlbikJCQkvKiBpc28gcGFja2V0IGxlbmd0aCAqLwogeworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwogCWlmIChkYXRhWzBdID09IDB4ZmYgJiYgZGF0YVsxXSA9PSAweGQ4KSB7CiAKIAkJLyogc3RhcnQgb2YgZnJhbWUgKi8KQEAgLTg4Myw5ICs4OTksOCBAQAogCQkJCQlkYXRhLCAwKTsKIAogCQkvKiBwdXQgdGhlIEpQRUcgaGVhZGVyIGluIHRoZSBuZXcgZnJhbWUgKi8KLQkJanBlZ19wdXRfaGVhZGVyKGdzcGNhX2RldiwgZnJhbWUsCi0JCQkJKChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2KS0+cWluZGV4LAotCQkJCTB4MjIpOworCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsIGZyYW1lLAorCQkJc2QtPmpwZWdfaGRyLCBKUEVHX0hEUl9TWik7CiAJCWRhdGEgKz0gMjsKIAkJbGVuIC09IDI7CiAJfQpAQCAtOTg4LDYgKzEwMDMsMzQgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzZF9zZXRfamNvbXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpqY29tcCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlpZiAoamNvbXAtPnF1YWxpdHkgPCBRVUFMSVRZX01JTikKKwkJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX01JTjsKKwllbHNlIGlmIChqY29tcC0+cXVhbGl0eSA+IFFVQUxJVFlfTUFYKQorCQlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfTUFYOworCWVsc2UKKwkJc2QtPnF1YWxpdHkgPSBqY29tcC0+cXVhbGl0eTsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0X2pjb21wKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqamNvbXApCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJbWVtc2V0KGpjb21wLCAwLCBzaXplb2YgKmpjb21wKTsKKwlqY29tcC0+cXVhbGl0eSA9IHNkLT5xdWFsaXR5OworCWpjb21wLT5qcGVnX21hcmtlcnMgPSBWNEwyX0pQRUdfTUFSS0VSX0RIVAorCQkJfCBWNEwyX0pQRUdfTUFSS0VSX0RRVDsKKwlyZXR1cm4gMDsKK30KKwogLyogc3ViLWRyaXZlciBkZXNjcmlwdGlvbiAqLwogc3RhdGljIHN0cnVjdCBzZF9kZXNjIHNkX2Rlc2MgPSB7CiAJLm5hbWUgPSBNT0RVTEVfTkFNRSwKQEAgLTk5OCw2ICsxMDQxLDggQEAKIAkuc3RhcnQgPSBzZF9zdGFydCwKIAkuc3RvcDAgPSBzZF9zdG9wMCwKIAkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKKwkuZ2V0X2pjb21wID0gc2RfZ2V0X2pjb21wLAorCS5zZXRfamNvbXAgPSBzZF9zZXRfamNvbXAsCiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KQEAgLTEwMjksOCArMTA3NCwxMCBAQAogLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLwogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9ldG9tcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9ldG9tcy5jCmluZGV4IGYzY2Q4ZmYuLjJjMjBkMDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZXRvbXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2V0b21zLmMKQEAgLTQ3MiwxOSArNDcyLDYgQEAKIAkJcmVnX3dfdmFsKGdzcGNhX2RldiwgRVRfT19SRUQgKyBpLCBicmlnaHRuZXNzKTsKIH0KIAotc3RhdGljIHZvaWQgZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCWludCBpOwotCWludCBicmlnaHRuZXNzID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJcmVnX3IoZ3NwY2FfZGV2LCBFVF9PX1JFRCArIGksIDEpOwotCQlicmlnaHRuZXNzICs9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKLQl9Ci0Jc2QtPmJyaWdodG5lc3MgPSBicmlnaHRuZXNzID4+IDM7Ci19Ci0KIHN0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC00OTUsMTkgKzQ4Miw2IEBACiAJcmVnX3coZ3NwY2FfZGV2LCBFVF9HX1JFRCwgUkdCRywgNik7CiB9CiAKLXN0YXRpYyB2b2lkIGdldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IGk7Ci0JaW50IGNvbnRyYXN0ID0gMDsKLQotCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKLQkJcmVnX3IoZ3NwY2FfZGV2LCBFVF9HX1JFRCArIGksIDEpOwotCQljb250cmFzdCArPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07Ci0JfQotCXNkLT5jb250cmFzdCA9IGNvbnRyYXN0ID4+IDI7Ci19Ci0KIHN0YXRpYyB2b2lkIHNldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtNjU4LDcgKzYzMiw2IEBACiAJc3RydWN0IGNhbSAqY2FtOwogCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwotCWNhbS0+ZXBhZGRyID0gMTsKIAlzZC0+c2Vuc29yID0gaWQtPmRyaXZlcl9pbmZvOwogCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9QQVMxMDYpIHsKIAkJY2FtLT5jYW1fbW9kZSA9IHNpZl9tb2RlOwpAQCAtODIxLDcgKzc5NCw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOwogCSp2YWwgPSBzZC0+YnJpZ2h0bmVzczsKIAlyZXR1cm4gMDsKIH0KQEAgLTg0MCw3ICs4MTIsNiBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCWdldGNvbnRyYXN0KGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5jb250cmFzdDsKIAlyZXR1cm4gMDsKIH0KQEAgLTg1OSw3ICs4MzAsNiBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCWdldGNvbG9ycyhnc3BjYV9kZXYpOwogCSp2YWwgPSBzZC0+Y29sb3JzOwogCXJldHVybiAwOwogfQpAQCAtOTI4LDggKzg5OCwxMCBAQAogLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLwogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9maW5lcGl4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2ZpbmVwaXguYwppbmRleCBhZmM4YjJkLi4wMGU2ODYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2ZpbmVwaXguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2ZpbmVwaXguYwpAQCAtMjcsNyArMjcsNyBAQAogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCiAvKiBEZWZhdWx0IHRpbWVvdXQsIGluIG1zICovCi0jZGVmaW5lIEZQSVhfVElNRU9VVCAoSFogLyAxMCkKKyNkZWZpbmUgRlBJWF9USU1FT1VUIDI1MAogCiAvKiBNYXhpbXVtIHRyYW5zZmVyIHNpemUgdG8gdXNlLiBUaGUgd2luZG93cyBkcml2ZXIgcmVhZHMgYnkgY2h1bmtzIG9mCiAgKiAweDIwMDAgYnl0ZXMsIHNvIGRvIHRoZSBzYW1lLiBOb3RlOiByZWFkaW5nIG1vcmUgc2VlbXMgdG8gd29yawpAQCAtMzgsMzggKzM4LDE1IEBACiBzdHJ1Y3QgdXNiX2ZwaXggewogCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCiAKLQkvKgotCSAqIFVTQiBzdHVmZgotCSAqLwotCXN0cnVjdCB1c2JfY3RybHJlcXVlc3QgY3RybHJlcTsKLQlzdHJ1Y3QgdXJiICpjb250cm9sX3VyYjsKLQlzdHJ1Y3QgdGltZXJfbGlzdCBidWxrX3RpbWVyOwotCi0JZW51bSB7Ci0JCUZQSVhfTk9QLAkvKiBpbmFjdGl2ZSwgZWxzZSBzdHJlYW1pbmcgKi8KLQkJRlBJWF9SRVNFVCwJLyogbXVzdCByZXNldCAqLwotCQlGUElYX1JFUV9GUkFNRSwJLyogcmVxdWVzdGluZyBhIGZyYW1lICovCi0JCUZQSVhfUkVBRF9GUkFNRSwJLyogcmVhZGluZyBmcmFtZSAqLwotCX0gc3RhdGU7Ci0KLQkvKgotCSAqIERyaXZlciBzdHVmZgotCSAqLwotCXN0cnVjdCBkZWxheWVkX3dvcmsgd3FlOwotCXN0cnVjdCBjb21wbGV0aW9uIGNhbl9jbG9zZTsKLQlpbnQgc3RyZWFtaW5nOworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrX3N0cnVjdDsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya190aHJlYWQ7CiB9OwogCiAvKiBEZWxheSBhZnRlciB3aGljaCBjbGFpbSB0aGUgbmV4dCBmcmFtZS4gSWYgdGhlIGRlbGF5IGlzIHRvbyBzbWFsbCwKICAqIHRoZSBjYW1lcmEgd2lsbCByZXR1cm4gb2xkIGZyYW1lcy4gT24gdGhlIDQ4MDBaLCAyMG1zIGlzIGJhZCwgMjVtcwotICogd2lsbCBmYWlsIGV2ZXJ5IDQgb3IgNSBmcmFtZXMsIGJ1dCAzMG1zIGlzIHBlcmZlY3QuICovCi0jZGVmaW5lIE5FWFRfRlJBTUVfREVMQVkgICgoKEhaICogMzApICsgOTk5KSAvIDEwMDApCi0KLSNkZWZpbmUgZGV2X25ld19zdGF0ZShuZXdfc3RhdGUpIHsJCQkJXAotCQlQREVCVUcoRF9TVFJFQU0sICJuZXcgc3RhdGUgZnJvbSAlZCB0byAlZCBhdCAlczolZCIsCVwKLQkJCWRldi0+c3RhdGUsIG5ld19zdGF0ZSwgX19mdW5jX18sIF9fTElORV9fKTsJXAotCQlkZXYtPnN0YXRlID0gbmV3X3N0YXRlOwkJCQkJXAotfQorICogd2lsbCBmYWlsIGV2ZXJ5IDQgb3IgNSBmcmFtZXMsIGJ1dCAzMG1zIGlzIHBlcmZlY3QuIE9uIHRoZSBBMjEwLAorICogMzBtcyBpcyBiYWQgd2hpbGUgMzVtcyBpcyBwZXJmZWN0LiAqLworI2RlZmluZSBORVhUX0ZSQU1FX0RFTEFZIDM1CiAKIC8qIFRoZXNlIGNhbWVyYXMgb25seSBzdXBwb3J0IDMyMHgyMDAuICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBmcGl4X21vZGVbMV0gPSB7CkBAIC04MCwzMTYgKzU3LDE4MyBAQAogCQkucHJpdiA9IDB9CiB9OwogCi0vKiBSZWFkcyBwYXJ0IG9mIGEgZnJhbWUgKi8KLXN0YXRpYyB2b2lkIHJlYWRfZnJhbWVfcGFydChzdHJ1Y3QgdXNiX2ZwaXggKmRldikKKy8qIHNlbmQgYSBjb21tYW5kIHRvIHRoZSB3ZWJjYW0gKi8KK3N0YXRpYyBpbnQgY29tbWFuZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCWludCBvcmRlcikJLyogMDogcmVzZXQsIDE6IGZyYW1lIHJlcXVlc3QgKi8KIHsKLQlpbnQgcmV0OworCXN0YXRpYyB1OCBvcmRlcl92YWx1ZXNbMl1bMTJdID0geworCQl7MHhjNiwgMCwgMCwgMCwgMCwgMCwgMCwgICAgMCwgMHgyMCwgMCwgMCwgMH0sCS8qIHJlc2V0ICovCisJCXsweGQzLCAwLCAwLCAwLCAwLCAwLCAwLCAweDAxLCAgICAwLCAwLCAwLCAwfSwJLyogZnIgcmVxICovCisJfTsKIAotCVBERUJVRyhEX1NUUkVBTSwgInJlYWRfZnJhbWVfcGFydCIpOwotCi0JLyogUmVhZHMgcGFydCBvZiBhIGZyYW1lICovCi0JcmV0ID0gdXNiX3N1Ym1pdF91cmIoZGV2LT5nc3BjYV9kZXYudXJiWzBdLCBHRlBfQVRPTUlDKTsKLQlpZiAocmV0KSB7Ci0JCWRldl9uZXdfc3RhdGUoRlBJWF9SRVNFVCk7Ci0JCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmZGV2LT53cWUsIDEpOwotCQlQREVCVUcoRF9TVFJFQU0sICJ1c2Jfc3VibWl0X3VyYiBmYWlsZWQgd2l0aCAlZCIsCi0JCQlyZXQpOwotCX0gZWxzZSB7Ci0JCS8qIFNvbWV0aW1lcyB3ZSBuZXZlciBnZXQgYSBjYWxsYmFjaywgc28gdXNlIGEgdGltZXIuCi0JCSAqIElzIHRoaXMgbWFza2luZyBhIGJ1ZyBzb21ld2hlcmUgZWxzZT8gKi8KLQkJZGV2LT5idWxrX3RpbWVyLmV4cGlyZXMgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcygxNTApOwotCQlhZGRfdGltZXIoJmRldi0+YnVsa190aW1lcik7Ci0JfQorCW1lbWNweShnc3BjYV9kZXYtPnVzYl9idWYsIG9yZGVyX3ZhbHVlc1tvcmRlcl0sIDEyKTsKKwlyZXR1cm4gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCVVTQl9SRVFfR0VUX1NUQVRVUywKKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfQ0xBU1MgfAorCQkJVVNCX1JFQ0lQX0lOVEVSRkFDRSwgMCwgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLAorCQkJMTIsIEZQSVhfVElNRU9VVCk7CiB9CiAKLS8qIENhbGxiYWNrIGZvciBVUkJzLiAqLwotc3RhdGljIHZvaWQgdXJiX2NhbGxiYWNrKHN0cnVjdCB1cmIgKnVyYikKKy8qIHdvcmtxdWV1ZSAqLworc3RhdGljIHZvaWQgZG9zdHJlYW0oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9IHVyYi0+Y29udGV4dDsKLQlzdHJ1Y3QgdXNiX2ZwaXggKmRldiA9IChzdHJ1Y3QgdXNiX2ZwaXggKikgZ3NwY2FfZGV2OworCXN0cnVjdCB1c2JfZnBpeCAqZGV2ID0gY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCB1c2JfZnBpeCwgd29ya19zdHJ1Y3QpOworCXN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiA9ICZkZXYtPmdzcGNhX2RldjsKKwlzdHJ1Y3QgdXJiICp1cmIgPSBnc3BjYV9kZXYtPnVyYlswXTsKKwl1OCAqZGF0YSA9IHVyYi0+dHJhbnNmZXJfYnVmZmVyOworCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWU7CisJaW50IHJldCA9IDA7CisJaW50IGxlbjsKIAotCVBERUJVRyhEX1BBQ0ssCi0JCSJlbnRlciB1cmJfY2FsbGJhY2sgLSBzdGF0dXM9JWQsIGxlbmd0aD0lZCIsCi0JCXVyYi0+c3RhdHVzLCB1cmItPmFjdHVhbF9sZW5ndGgpOworCS8qIHN5bmNocm9uaXplIHdpdGggdGhlIG1haW4gZHJpdmVyICovCisJbXV0ZXhfbG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwlQREVCVUcoRF9TVFJFQU0sICJkb3N0cmVhbSBzdGFydGVkIik7CiAKLQlpZiAoZGV2LT5zdGF0ZSA9PSBGUElYX1JFQURfRlJBTUUpCi0JCWRlbF90aW1lcigmZGV2LT5idWxrX3RpbWVyKTsKKwkvKiBsb29wIHJlYWRpbmcgYSBmcmFtZSAqLworYWdhaW46CisJd2hpbGUgKGdzcGNhX2Rldi0+cHJlc2VudCAmJiBnc3BjYV9kZXYtPnN0cmVhbWluZykgewogCi0JaWYgKHVyYi0+c3RhdHVzICE9IDApIHsKLQkJLyogV2Uga2lsbCBhIHN0dWNrIHVyYiBldmVyeSA1MCBmcmFtZXMgb24gYXZlcmFnZSwgc28gZG9uJ3QKLQkJICogZGlzcGxheSBhIGxvZyBtZXNzYWdlIGZvciB0aGF0LiAqLwotCQlpZiAodXJiLT5zdGF0dXMgIT0gLUVDT05OUkVTRVQpCi0JCQlQREVCVUcoRF9TVFJFQU0sICJiYWQgVVJCIHN0YXR1cyAlZCIsIHVyYi0+c3RhdHVzKTsKLQkJZGV2X25ld19zdGF0ZShGUElYX1JFU0VUKTsKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXYtPndxZSwgMSk7Ci0JfQorCQkvKiByZXF1ZXN0IGEgZnJhbWUgKi8KKwkJbXV0ZXhfbG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJCXJldCA9IGNvbW1hbmQoZ3NwY2FfZGV2LCAxKTsKKwkJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwkJaWYgKHJldCA8IDApCisJCQlicmVhazsKKwkJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQgfHwgIWdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQkJYnJlYWs7CiAKLQlzd2l0Y2ggKGRldi0+c3RhdGUpIHsKLQljYXNlIEZQSVhfUkVRX0ZSQU1FOgotCQlkZXZfbmV3X3N0YXRlKEZQSVhfUkVBRF9GUkFNRSk7Ci0JCXJlYWRfZnJhbWVfcGFydChkZXYpOwotCQlicmVhazsKKwkJLyogdGhlIGZyYW1lIGNvbWVzIGluIHBhcnRzICovCisJCWZvciAoOzspIHsKKwkJCXJldCA9IHVzYl9idWxrX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCQkJdXJiLT5waXBlLAorCQkJCQlkYXRhLAorCQkJCQlGUElYX01BWF9UUkFOU0ZFUiwKKwkJCQkJJmxlbiwgRlBJWF9USU1FT1VUKTsKKwkJCWlmIChyZXQgPCAwKSB7CisJCQkJLyogTW9zdCBvZiB0aGUgdGltZSB3ZSBnZXQgYSB0aW1lb3V0CisJCQkJICogZXJyb3IuIEp1c3QgcmVzdGFydC4gKi8KKwkJCQlnb3RvIGFnYWluOworCQkJfQorCQkJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQgfHwgIWdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQkJCWdvdG8gb3V0OworCQkJZnJhbWUgPSBnc3BjYV9nZXRfaV9mcmFtZSgmZGV2LT5nc3BjYV9kZXYpOworCQkJaWYgKGZyYW1lID09IE5VTEwpCisJCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7CiAKLQljYXNlIEZQSVhfUkVBRF9GUkFNRTogewotCQl1bnNpZ25lZCBjaGFyICpkYXRhID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7Ci0JCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWU7CisJCQlpZiAobGVuIDwgRlBJWF9NQVhfVFJBTlNGRVIgfHwKKwkJCQkoZGF0YVtsZW4gLSAyXSA9PSAweGZmICYmCisJCQkJCWRhdGFbbGVuIC0gMV0gPT0gMHhkOSkpIHsKIAotCQlmcmFtZSA9IGdzcGNhX2dldF9pX2ZyYW1lKCZkZXYtPmdzcGNhX2Rldik7Ci0JCWlmIChmcmFtZSA9PSBOVUxMKQotCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlID0gRElTQ0FSRF9QQUNLRVQ7Ci0JCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPCBGUElYX01BWF9UUkFOU0ZFUiB8fAotCQkJKGRhdGFbdXJiLT5hY3R1YWxfbGVuZ3RoLTJdID09IDB4ZmYgJiYKLQkJCQlkYXRhW3VyYi0+YWN0dWFsX2xlbmd0aC0xXSA9PSAweGQ5KSkgewotCi0JCQkvKiBJZiB0aGUgcmVzdWx0IGlzIGxlc3MgdGhhbiB3aGF0IHdhcyBhc2tlZAotCQkJICogZm9yLCB0aGVuIGl0J3MgdGhlIGVuZCBvZiB0aGUKLQkJCSAqIGZyYW1lLiBTb21ldGltZSB0aGUganBlZyBpcyBub3QgY29tcGxldGUsCi0JCQkgKiBidXQgdGhlcmUncyBub3RoaW5nIHdlIGNhbiBkby4gV2UgYWxzbyBlbmQKLQkJCSAqIGhlcmUgaWYgdGhlIHRoZSBqcGVnIGVuZHMgcmlnaHQgYXQgdGhlIGVuZAotCQkJICogb2YgdGhlIGZyYW1lLiAqLwotCQkJaWYgKGZyYW1lKQotCQkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULAotCQkJCQkJZnJhbWUsCi0JCQkJCQlkYXRhLCB1cmItPmFjdHVhbF9sZW5ndGgpOwotCQkJZGV2X25ld19zdGF0ZShGUElYX1JFUV9GUkFNRSk7Ci0JCQlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmRldi0+d3FlLCBORVhUX0ZSQU1FX0RFTEFZKTsKLQkJfSBlbHNlIHsKKwkJCQkvKiBJZiB0aGUgcmVzdWx0IGlzIGxlc3MgdGhhbiB3aGF0IHdhcyBhc2tlZAorCQkJCSAqIGZvciwgdGhlbiBpdCdzIHRoZSBlbmQgb2YgdGhlCisJCQkJICogZnJhbWUuIFNvbWV0aW1lcyB0aGUganBlZyBpcyBub3QgY29tcGxldGUsCisJCQkJICogYnV0IHRoZXJlJ3Mgbm90aGluZyB3ZSBjYW4gZG8uIFdlIGFsc28gZW5kCisJCQkJICogaGVyZSBpZiB0aGUgdGhlIGpwZWcgZW5kcyByaWdodCBhdCB0aGUgZW5kCisJCQkJICogb2YgdGhlIGZyYW1lLiAqLworCQkJCWlmIChmcmFtZSkKKwkJCQkJZnJhbWUgPSBnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LAorCQkJCQkJCUxBU1RfUEFDS0VULAorCQkJCQkJCWZyYW1lLAorCQkJCQkJCWRhdGEsIGxlbik7CisJCQkJYnJlYWs7CisJCQl9CiAKIAkJCS8qIGdvdCBhIHBhcnRpYWwgaW1hZ2UgKi8KIAkJCWlmIChmcmFtZSkKIAkJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LAogCQkJCQkJZ3NwY2FfZGV2LT5sYXN0X3BhY2tldF90eXBlCi0JCQkJCQkJCT09IExBU1RfUEFDS0VUCisJCQkJCQkJPT0gTEFTVF9QQUNLRVQKIAkJCQkJCT8gRklSU1RfUEFDS0VUIDogSU5URVJfUEFDS0VULAotCQkJCQkJZnJhbWUsCi0JCQkJCWRhdGEsIHVyYi0+YWN0dWFsX2xlbmd0aCk7Ci0JCQlyZWFkX2ZyYW1lX3BhcnQoZGV2KTsKKwkJCQkJCWZyYW1lLCBkYXRhLCBsZW4pOwogCQl9Ci0JCWJyZWFrOwotCSAgICB9CiAKLQljYXNlIEZQSVhfTk9QOgotCWNhc2UgRlBJWF9SRVNFVDoKLQkJUERFQlVHKERfU1RSRUFNLCAiaW52YWxpZCBzdGF0ZSAlZCIsIGRldi0+c3RhdGUpOwotCQlicmVhazsKLQl9Ci19Ci0KLS8qIFJlcXVlc3QgYSBuZXcgZnJhbWUgKi8KLXN0YXRpYyB2b2lkIHJlcXVlc3RfZnJhbWUoc3RydWN0IHVzYl9mcGl4ICpkZXYpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSAmZGV2LT5nc3BjYV9kZXY7Ci0KLQkvKiBTZXR1cCBjb21tYW5kIHBhY2tldCAqLwotCW1lbXNldChnc3BjYV9kZXYtPnVzYl9idWYsIDAsIDEyKTsKLQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAweGQzOwotCWdzcGNhX2Rldi0+dXNiX2J1Zls3XSA9IDB4MDE7Ci0KLQkvKiBSZXF1ZXN0IGEgZnJhbWUgKi8KLQlkZXYtPmN0cmxyZXEuYlJlcXVlc3RUeXBlID0KLQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8IFVTQl9SRUNJUF9JTlRFUkZBQ0U7Ci0JZGV2LT5jdHJscmVxLmJSZXF1ZXN0ID0gVVNCX1JFUV9HRVRfU1RBVFVTOwotCWRldi0+Y3RybHJlcS53VmFsdWUgPSAwOwotCWRldi0+Y3RybHJlcS53SW5kZXggPSAwOwotCWRldi0+Y3RybHJlcS53TGVuZ3RoID0gY3B1X3RvX2xlMTYoMTIpOwotCi0JdXNiX2ZpbGxfY29udHJvbF91cmIoZGV2LT5jb250cm9sX3VyYiwKLQkJCSAgICAgZ3NwY2FfZGV2LT5kZXYsCi0JCQkgICAgIHVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCi0JCQkgICAgICh1bnNpZ25lZCBjaGFyICopICZkZXYtPmN0cmxyZXEsCi0JCQkgICAgIGdzcGNhX2Rldi0+dXNiX2J1ZiwKLQkJCSAgICAgMTIsIHVyYl9jYWxsYmFjaywgZ3NwY2FfZGV2KTsKLQotCXJldCA9IHVzYl9zdWJtaXRfdXJiKGRldi0+Y29udHJvbF91cmIsIEdGUF9BVE9NSUMpOwotCWlmIChyZXQpIHsKLQkJZGV2X25ld19zdGF0ZShGUElYX1JFU0VUKTsKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXYtPndxZSwgMSk7Ci0JCVBERUJVRyhEX1NUUkVBTSwgInVzYl9zdWJtaXRfdXJiIGZhaWxlZCB3aXRoICVkIiwgcmV0KTsKLQl9Ci19Ci0KLS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwotCi0vKiBTdGF0ZSBtYWNoaW5lLiAqLwotc3RhdGljIHZvaWQgZnBpeF9zbShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCi17Ci0Jc3RydWN0IHVzYl9mcGl4ICpkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHVzYl9mcGl4LCB3cWUud29yayk7Ci0KLQlQREVCVUcoRF9TVFJFQU0sICJmcGl4X3NtIHN0YXRlICVkIiwgZGV2LT5zdGF0ZSk7Ci0KLQkvKiB2ZXJpZnkgdGhhdCB0aGUgZGV2aWNlIHdhc24ndCB1bnBsdWdnZWQgKi8KLQlpZiAoIWRldi0+Z3NwY2FfZGV2LnByZXNlbnQpIHsKLQkJUERFQlVHKERfU1RSRUFNLCAiZGV2aWNlIGlzIGdvbmUiKTsKLQkJZGV2X25ld19zdGF0ZShGUElYX05PUCk7Ci0JCWNvbXBsZXRlKCZkZXYtPmNhbl9jbG9zZSk7Ci0JCXJldHVybjsKKwkJLyogV2UgbXVzdCB3YWl0IGJlZm9yZSB0cnlpbmcgcmVhZGluZyB0aGUgbmV4dAorCQkgKiBmcmFtZS4gSWYgd2UgZG9uJ3QsIG9yIGlmIHRoZSBkZWxheSBpcyB0b28gc2hvcnQsCisJCSAqIHRoZSBjYW1lcmEgd2lsbCBkaXNjb25uZWN0LiAqLworCQltc2xlZXAoTkVYVF9GUkFNRV9ERUxBWSk7CiAJfQogCi0JaWYgKCFkZXYtPnN0cmVhbWluZykgewotCQlQREVCVUcoRF9TVFJFQU0sICJzdG9wcGluZyBzdGF0ZSBtYWNoaW5lIik7Ci0JCWRldl9uZXdfc3RhdGUoRlBJWF9OT1ApOwotCQljb21wbGV0ZSgmZGV2LT5jYW5fY2xvc2UpOwotCQlyZXR1cm47Ci0JfQotCi0Jc3dpdGNoIChkZXYtPnN0YXRlKSB7Ci0JY2FzZSBGUElYX1JFU0VUOgotCQlkZXZfbmV3X3N0YXRlKEZQSVhfUkVRX0ZSQU1FKTsKLQkJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXYtPndxZSwgSFogLyAxMCk7Ci0JCWJyZWFrOwotCi0JY2FzZSBGUElYX1JFUV9GUkFNRToKLQkJLyogZ2V0IGFuIGltYWdlICovCi0JCXJlcXVlc3RfZnJhbWUoZGV2KTsKLQkJYnJlYWs7Ci0KLQljYXNlIEZQSVhfTk9QOgotCWNhc2UgRlBJWF9SRUFEX0ZSQU1FOgotCQlQREVCVUcoRF9TVFJFQU0sICJpbnZhbGlkIHN0YXRlICVkIiwgZGV2LT5zdGF0ZSk7Ci0JCWJyZWFrOwotCX0KK291dDoKKwlQREVCVUcoRF9TVFJFQU0sICJkb3N0cmVhbSBzdG9wcGVkIik7CiB9CiAKIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgKi8KIHN0YXRpYyBpbnQgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQogeworCXN0cnVjdCB1c2JfZnBpeCAqZGV2ID0gKHN0cnVjdCB1c2JfZnBpeCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IGNhbSAqY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwogCiAJY2FtLT5jYW1fbW9kZSA9IGZwaXhfbW9kZTsKIAljYW0tPm5tb2RlcyA9IDE7Ci0JY2FtLT5lcGFkZHIgPSAweDAxOwkvKiB0b2RvOiBjb3JyZWN0IGZvciBhbGwgY2Ftcz8gKi8KIAljYW0tPmJ1bGtfc2l6ZSA9IEZQSVhfTUFYX1RSQU5TRkVSOwogCi0vKglnc3BjYV9kZXYtPm5iYWx0ID0gMTsJICogdXNlIGJ1bGsgdHJhbnNmZXIgKi8KKwlJTklUX1dPUksoJmRldi0+d29ya19zdHJ1Y3QsIGRvc3RyZWFtKTsKKwogCXJldHVybiAwOwogfQogCi0vKiBTdG9wIHN0cmVhbWluZyBhbmQgZnJlZSB0aGUgcmVzc291cmNlcyBhbGxvY2F0ZWQgYnkgc2Rfc3RhcnQuICovCi1zdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHVzYl9mcGl4ICpkZXYgPSAoc3RydWN0IHVzYl9mcGl4ICopIGdzcGNhX2RldjsKLQotCWRldi0+c3RyZWFtaW5nID0gMDsKLQotCS8qIFN0b3AgdGhlIHN0YXRlIG1hY2hpbmUgKi8KLQlpZiAoZGV2LT5zdGF0ZSAhPSBGUElYX05PUCkKLQkJd2FpdF9mb3JfY29tcGxldGlvbigmZGV2LT5jYW5fY2xvc2UpOwotfQotCi0vKiBjYWxsZWQgb24gc3RyZWFtb2ZmIHdpdGggYWx0IDAgYW5kIGRpc2Nvbm5lY3QgKi8KLXN0YXRpYyB2b2lkIHNkX3N0b3AwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3QgdXNiX2ZwaXggKmRldiA9IChzdHJ1Y3QgdXNiX2ZwaXggKikgZ3NwY2FfZGV2OwotCi0JdXNiX2ZyZWVfdXJiKGRldi0+Y29udHJvbF91cmIpOwotCWRldi0+Y29udHJvbF91cmIgPSBOVUxMOwotfQotCi0vKiBLaWxsIGFuIFVSQiB0aGF0IGhhc24ndCBjb21wbGV0ZWQuICovCi1zdGF0aWMgdm9pZCB0aW1lb3V0X2tpbGwodW5zaWduZWQgbG9uZyBkYXRhKQotewotCXN0cnVjdCB1cmIgKnVyYiA9IChzdHJ1Y3QgdXJiICopIGRhdGE7Ci0KLQl1c2JfdW5saW5rX3VyYih1cmIpOwotfQotCiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KIHN0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0Jc3RydWN0IHVzYl9mcGl4ICpkZXYgPSAoc3RydWN0IHVzYl9mcGl4ICopIGdzcGNhX2RldjsKLQotCUlOSVRfREVMQVlFRF9XT1JLKCZkZXYtPndxZSwgZnBpeF9zbSk7Ci0KLQlpbml0X3RpbWVyKCZkZXYtPmJ1bGtfdGltZXIpOwotCWRldi0+YnVsa190aW1lci5mdW5jdGlvbiA9IHRpbWVvdXRfa2lsbDsKLQogCXJldHVybiAwOwogfQogCisvKiBzdGFydCB0aGUgY2FtZXJhICovCiBzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3QgdXNiX2ZwaXggKmRldiA9IChzdHJ1Y3QgdXNiX2ZwaXggKikgZ3NwY2FfZGV2OwotCWludCByZXQ7Ci0JaW50IHNpemVfcmV0OworCWludCByZXQsIGxlbjsKIAogCS8qIEluaXQgdGhlIGRldmljZSAqLwotCW1lbXNldChnc3BjYV9kZXYtPnVzYl9idWYsIDAsIDEyKTsKLQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAweGM2OwotCWdzcGNhX2Rldi0+dXNiX2J1Zls4XSA9IDB4MjA7Ci0KLQlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCi0JCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAotCQkJVVNCX1JFUV9HRVRfU1RBVFVTLAotCQkJVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9DTEFTUyB8Ci0JCQlVU0JfUkVDSVBfSU5URVJGQUNFLCAwLCAwLCBnc3BjYV9kZXYtPnVzYl9idWYsCi0JCQkxMiwgRlBJWF9USU1FT1VUKTsKLQotCWlmIChyZXQgIT0gMTIpIHsKLQkJUERFQlVHKERfU1RSRUFNLCAidXNiX2NvbnRyb2xfbXNnIGZhaWxlZCAoJWQpIiwgcmV0KTsKLQkJcmV0ID0gLUVJTzsKLQkJZ290byBlcnJvcjsKKwlyZXQgPSBjb21tYW5kKGdzcGNhX2RldiwgMCk7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfU1RSRUFNLCAiaW5pdCBmYWlsZWQgJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OwogCX0KIAogCS8qIFJlYWQgdGhlIHJlc3VsdCBvZiB0aGUgY29tbWFuZC4gSWdub3JlIHRoZSByZXN1bHQsIGZvciBpdAogCSAqIHZhcmllcyB3aXRoIHRoZSBkZXZpY2UuICovCiAJcmV0ID0gdXNiX2J1bGtfbXNnKGdzcGNhX2Rldi0+ZGV2LAotCQkJdXNiX3JjdmJ1bGtwaXBlKGdzcGNhX2Rldi0+ZGV2LAotCQkJCQlnc3BjYV9kZXYtPmNhbS5lcGFkZHIpLAotCQkJZ3NwY2FfZGV2LT51c2JfYnVmLCBGUElYX01BWF9UUkFOU0ZFUiwgJnNpemVfcmV0LAorCQkJZ3NwY2FfZGV2LT51cmJbMF0tPnBpcGUsCisJCQlnc3BjYV9kZXYtPnVyYlswXS0+dHJhbnNmZXJfYnVmZmVyLAorCQkJRlBJWF9NQVhfVFJBTlNGRVIsICZsZW4sCiAJCQlGUElYX1RJTUVPVVQpOwotCWlmIChyZXQgIT0gMCkgewotCQlQREVCVUcoRF9TVFJFQU0sICJ1c2JfYnVsa19tc2cgZmFpbGVkICglZCkiLCByZXQpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIGVycm9yOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX1NUUkVBTSwgInVzYl9idWxrX21zZyBmYWlsZWQgJWQiLCByZXQpOworCQlyZXR1cm4gcmV0OwogCX0KIAogCS8qIFJlcXVlc3QgYSBmcmFtZSwgYnV0IGRvbid0IHJlYWQgaXQgKi8KLQltZW1zZXQoZ3NwY2FfZGV2LT51c2JfYnVmLCAwLCAxMik7Ci0JZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gMHhkMzsKLQlnc3BjYV9kZXYtPnVzYl9idWZbN10gPSAweDAxOwotCi0JcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAotCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKLQkJCVVTQl9SRVFfR0VUX1NUQVRVUywKLQkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfQ0xBU1MgfAotCQkJVVNCX1JFQ0lQX0lOVEVSRkFDRSwgMCwgMCwgZ3NwY2FfZGV2LT51c2JfYnVmLAotCQkJMTIsIEZQSVhfVElNRU9VVCk7Ci0JaWYgKHJldCAhPSAxMikgewotCQlQREVCVUcoRF9TVFJFQU0sICJ1c2JfY29udHJvbF9tc2cgZmFpbGVkICglZCkiLCByZXQpOwotCQlyZXQgPSAtRUlPOwotCQlnb3RvIGVycm9yOworCXJldCA9IGNvbW1hbmQoZ3NwY2FfZGV2LCAxKTsKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9TVFJFQU0sICJmcmFtZSByZXF1ZXN0IGZhaWxlZCAlZCIsIHJldCk7CisJCXJldHVybiByZXQ7CiAJfQogCiAJLyogQWdhaW4sIHJlc2V0IGJ1bGsgaW4gZW5kcG9pbnQgKi8KLQl1c2JfY2xlYXJfaGFsdChnc3BjYV9kZXYtPmRldiwgZ3NwY2FfZGV2LT5jYW0uZXBhZGRyKTsKKwl1c2JfY2xlYXJfaGFsdChnc3BjYV9kZXYtPmRldiwgZ3NwY2FfZGV2LT51cmJbMF0tPnBpcGUpOwogCi0JLyogQWxsb2NhdGUgYSBjb250cm9sIFVSQiAqLwotCWRldi0+Y29udHJvbF91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwotCWlmICghZGV2LT5jb250cm9sX3VyYikgewotCQlQREVCVUcoRF9TVFJFQU0sICJObyBmcmVlIHVyYnMgYXZhaWxhYmxlIik7Ci0JCXJldCA9IC1FSU87Ci0JCWdvdG8gZXJyb3I7Ci0JfQotCi0JLyogVmFyaW91cyBpbml0aWFsaXphdGlvbnMuICovCi0JaW5pdF9jb21wbGV0aW9uKCZkZXYtPmNhbl9jbG9zZSk7Ci0JZGV2LT5idWxrX3RpbWVyLmRhdGEgPSAodW5zaWduZWQgbG9uZylkZXYtPmdzcGNhX2Rldi51cmJbMF07Ci0JZGV2LT5nc3BjYV9kZXYudXJiWzBdLT5jb21wbGV0ZSA9IHVyYl9jYWxsYmFjazsKLQlkZXYtPnN0cmVhbWluZyA9IDE7Ci0KLQkvKiBTY2hlZHVsZSBhIGZyYW1lIHJlcXVlc3QuICovCi0JZGV2X25ld19zdGF0ZShGUElYX1JFUV9GUkFNRSk7Ci0Jc2NoZWR1bGVfZGVsYXllZF93b3JrKCZkZXYtPndxZSwgMSk7CisJLyogU3RhcnQgdGhlIHdvcmtxdWV1ZSBmdW5jdGlvbiB0byBkbyB0aGUgc3RyZWFtaW5nICovCisJZGV2LT53b3JrX3RocmVhZCA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKE1PRFVMRV9OQU1FKTsKKwlxdWV1ZV93b3JrKGRldi0+d29ya190aHJlYWQsICZkZXYtPndvcmtfc3RydWN0KTsKIAogCXJldHVybiAwOworfQogCi1lcnJvcjoKLQkvKiBGcmVlIHRoZSByZXNzb3VyY2VzICovCi0Jc2Rfc3RvcE4oZ3NwY2FfZGV2KTsKLQlzZF9zdG9wMChnc3BjYV9kZXYpOwotCXJldHVybiByZXQ7CisvKiBjYWxsZWQgb24gc3RyZWFtb2ZmIHdpdGggYWx0PT0wIGFuZCBvbiBkaXNjb25uZWN0ICovCisvKiB0aGUgdXNiX2xvY2sgaXMgaGVsZCBhdCBlbnRyeSAtIHJlc3RvcmUgb24gZXhpdCAqLworc3RhdGljIHZvaWQgc2Rfc3RvcDAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCB1c2JfZnBpeCAqZGV2ID0gKHN0cnVjdCB1c2JfZnBpeCAqKSBnc3BjYV9kZXY7CisKKwkvKiB3YWl0IGZvciB0aGUgd29yayBxdWV1ZSB0byB0ZXJtaW5hdGUgKi8KKwltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCWRlc3Ryb3lfd29ya3F1ZXVlKGRldi0+d29ya190aHJlYWQpOworCW11dGV4X2xvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCWRldi0+d29ya190aHJlYWQgPSBOVUxMOwogfQogCiAvKiBUYWJsZSBvZiBzdXBwb3J0ZWQgVVNCIGRldmljZXMgKi8KQEAgLTQyNCwxMiArMjY4LDExIEBACiAKIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewotCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLm5hbWUgICA9IE1PRFVMRV9OQU1FLAogCS5jb25maWcgPSBzZF9jb25maWcsCi0JLmluaXQgPSBzZF9pbml0LAotCS5zdGFydCA9IHNkX3N0YXJ0LAotCS5zdG9wTiA9IHNkX3N0b3BOLAotCS5zdG9wMCA9IHNkX3N0b3AwLAorCS5pbml0ICAgPSBzZF9pbml0LAorCS5zdGFydCAgPSBzZF9zdGFydCwKKwkuc3RvcDAgID0gc2Rfc3RvcDAsCiB9OwogCiAvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLwpAQCAtNDQzLDI0ICsyODYsMjggQEAKIH0KIAogc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkX2RyaXZlciA9IHsKLQkubmFtZSA9IE1PRFVMRV9OQU1FLAotCS5pZF90YWJsZSA9IGRldmljZV90YWJsZSwKLQkucHJvYmUgPSBzZF9wcm9iZSwKKwkubmFtZSAgICAgICA9IE1PRFVMRV9OQU1FLAorCS5pZF90YWJsZSAgID0gZGV2aWNlX3RhYmxlLAorCS5wcm9iZSAgICAgID0gc2RfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPSBnc3BjYV9kaXNjb25uZWN0LAogI2lmZGVmIENPTkZJR19QTQogCS5zdXNwZW5kID0gZ3NwY2Ffc3VzcGVuZCwKLQkucmVzdW1lID0gZ3NwY2FfcmVzdW1lLAorCS5yZXN1bWUgID0gZ3NwY2FfcmVzdW1lLAogI2VuZGlmCiB9OwogCiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKIAlyZXR1cm4gMDsKIH0KKwogc3RhdGljIHZvaWQgX19leGl0IHNkX21vZF9leGl0KHZvaWQpCiB7CiAJdXNiX2RlcmVnaXN0ZXIoJnNkX2RyaXZlcik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmMKaW5kZXggNjVlNDkwMS4uYTc1YzFjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuYwpAQCAtMzgsMTUgKzM4LDE2IEBACiAjaW5jbHVkZSAiZ3NwY2EuaCIKIAogLyogZ2xvYmFsIHZhbHVlcyAqLwotI2RlZmluZSBERUZfTlVSQlMgMgkJLyogZGVmYXVsdCBudW1iZXIgb2YgVVJCcyAqLworI2RlZmluZSBERUZfTlVSQlMgMwkJLyogZGVmYXVsdCBudW1iZXIgb2YgVVJCcyAqLworI2lmIERFRl9OVVJCUyA+IE1BWF9OVVJCUworI2Vycm9yICJERUZfTlVSQlMgdG9vIGJpZyIKKyNlbmRpZgogCiBNT0RVTEVfQVVUSE9SKCJKZWFuLUZyYW5jb2lzIE1vaW5lIDxodHRwOi8vbW9pbmVqZi5mcmVlLmZyPiIpOwogTU9EVUxFX0RFU0NSSVBUSU9OKCJHU1BDQSBVU0IgQ2FtZXJhIERyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi0jZGVmaW5lIERSSVZFUl9WRVJTSU9OX05VTUJFUglLRVJORUxfVkVSU0lPTigyLCA0LCAwKQotCi1zdGF0aWMgaW50IHZpZGVvX25yID0gLTE7CisjZGVmaW5lIERSSVZFUl9WRVJTSU9OX05VTUJFUglLRVJORUxfVkVSU0lPTigyLCA1LCAwKQogCiAjaWZkZWYgR1NQQ0FfREVCVUcKIGludCBnc3BjYV9kZWJ1ZyA9IERfRVJSIHwgRF9QUk9CRTsKQEAgLTEyNiwxNiArMTI3LDE4IEBACiAJCQlzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZTsKLQlfX3U4ICpkYXRhOwkJLyogYWRkcmVzcyBvZiBkYXRhIGluIHRoZSBpc28gbWVzc2FnZSAqLworCXU4ICpkYXRhOwkJLyogYWRkcmVzcyBvZiBkYXRhIGluIHRoZSBpc28gbWVzc2FnZSAqLwogCWludCBpLCBsZW4sIHN0OwogCWNhbV9wa3Rfb3AgcGt0X3NjYW47CiAKIAlpZiAodXJiLT5zdGF0dXMgIT0gMCkgeworCQlpZiAodXJiLT5zdGF0dXMgPT0gLUVTSFVURE9XTikKKwkJCXJldHVybjsJCS8qIGRpc2Nvbm5lY3Rpb24gKi8KICNpZmRlZiBDT05GSUdfUE0KIAkJaWYgKCFnc3BjYV9kZXYtPmZyb3plbikKICNlbmRpZgogCQkJUERFQlVHKERfRVJSfERfUEFDSywgInVyYiBzdGF0dXM6ICVkIiwgdXJiLT5zdGF0dXMpOwotCQlyZXR1cm47CQkvKiBkaXNjb25uZWN0aW9uID8gKi8KKwkJcmV0dXJuOwogCX0KIAlwa3Rfc2NhbiA9IGdzcGNhX2Rldi0+c2RfZGVzYy0+cGt0X3NjYW47CiAJZm9yIChpID0gMDsgaSA8IHVyYi0+bnVtYmVyX29mX3BhY2tldHM7IGkrKykgewpAQCAtMTY2LDcgKzE2OSw3IEBACiAJCS8qIGxldCB0aGUgcGFja2V0IGJlIGFuYWx5emVkIGJ5IHRoZSBzdWJkcml2ZXIgKi8KIAkJUERFQlVHKERfUEFDSywgInBhY2tldCBbJWRdIG86JWQgbDolZCIsCiAJCQlpLCB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldCwgbGVuKTsKLQkJZGF0YSA9IChfX3U4ICopIHVyYi0+dHJhbnNmZXJfYnVmZmVyCisJCWRhdGEgPSAodTggKikgdXJiLT50cmFuc2Zlcl9idWZmZXIKIAkJCQkJKyB1cmItPmlzb19mcmFtZV9kZXNjW2ldLm9mZnNldDsKIAkJcGt0X3NjYW4oZ3NwY2FfZGV2LCBmcmFtZSwgZGF0YSwgbGVuKTsKIAl9CkBAIC0xODIsOCArMTg1LDcgQEAKICAqCiAgKiBBbmFseXNlIGVhY2ggcGFja2V0IGFuZCBjYWxsIHRoZSBzdWJkcml2ZXIgZm9yIGNvcHkgdG8gdGhlIGZyYW1lIGJ1ZmZlci4KICAqLwotc3RhdGljIHZvaWQgaXNvY19pcnEoc3RydWN0IHVyYiAqdXJiCi0pCitzdGF0aWMgdm9pZCBpc29jX2lycShzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gKHN0cnVjdCBnc3BjYV9kZXYgKikgdXJiLT5jb250ZXh0OwogCkBAIC0xOTYsOCArMTk4LDcgQEAKIC8qCiAgKiBidWxrIG1lc3NhZ2UgaW50ZXJydXB0IGZyb20gdGhlIFVTQiBkZXZpY2UKICAqLwotc3RhdGljIHZvaWQgYnVsa19pcnEoc3RydWN0IHVyYiAqdXJiCi0pCitzdGF0aWMgdm9pZCBidWxrX2lycShzdHJ1Y3QgdXJiICp1cmIpCiB7CiAJc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2ID0gKHN0cnVjdCBnc3BjYV9kZXYgKikgdXJiLT5jb250ZXh0OwogCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWU7CkBAIC0yMDksNiArMjEwLDggQEAKIAlzd2l0Y2ggKHVyYi0+c3RhdHVzKSB7CiAJY2FzZSAwOgogCQlicmVhazsKKwljYXNlIC1FU0hVVERPV046CisJCXJldHVybjsJCS8qIGRpc2Nvbm5lY3Rpb24gKi8KIAljYXNlIC1FQ09OTlJFU0VUOgogCQl1cmItPnN0YXR1cyA9IDA7CiAJCWJyZWFrOwpAQCAtMjE3LDcgKzIyMCw3IEBACiAJCWlmICghZ3NwY2FfZGV2LT5mcm96ZW4pCiAjZW5kaWYKIAkJCVBERUJVRyhEX0VSUnxEX1BBQ0ssICJ1cmIgc3RhdHVzOiAlZCIsIHVyYi0+c3RhdHVzKTsKLQkJcmV0dXJuOwkJLyogZGlzY29ubmVjdGlvbiA/ICovCisJCXJldHVybjsKIAl9CiAKIAkvKiBjaGVjayB0aGUgYXZhaWxhYmlsaXR5IG9mIHRoZSBmcmFtZSBidWZmZXIgKi8KQEAgLTMyMiw2ICszMjUsNyBAQAogCWNhc2UgVjRMMl9QSVhfRk1UX0pQRUc6CiAJY2FzZSBWNEwyX1BJWF9GTVRfU1BDQTU2MToKIAljYXNlIFY0TDJfUElYX0ZNVF9QQUMyMDc6CisJY2FzZSBWNEwyX1BJWF9GTVRfTVI5NzMxMEE6CiAJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKQEAgLTQyMiwxMCArNDI2LDggQEAKIAkJaWYgKHVyYiA9PSBOVUxMKQogCQkJYnJlYWs7CiAKLQkJQlVHX09OKCFnc3BjYV9kZXYtPmRldik7CiAJCWdzcGNhX2Rldi0+dXJiW2ldID0gTlVMTDsKLQkJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpCi0JCQl1c2Jfa2lsbF91cmIodXJiKTsKKwkJdXNiX2tpbGxfdXJiKHVyYik7CiAJCWlmICh1cmItPnRyYW5zZmVyX2J1ZmZlciAhPSBOVUxMKQogCQkJdXNiX2J1ZmZlcl9mcmVlKGdzcGNhX2Rldi0+ZGV2LAogCQkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlcl9sZW5ndGgsCkBAIC00MzksMjIgKzQ0MSwxNiBAQAogICogbG9vayBmb3IgYW4gaW5wdXQgdHJhbnNmZXIgZW5kcG9pbnQgaW4gYW4gYWx0ZXJuYXRlIHNldHRpbmcKICAqLwogc3RhdGljIHN0cnVjdCB1c2JfaG9zdF9lbmRwb2ludCAqYWx0X3hmZXIoc3RydWN0IHVzYl9ob3N0X2ludGVyZmFjZSAqYWx0LAotCQkJCQkgIF9fdTggZXBhZGRyLAogCQkJCQkgIF9fdTggeGZlcikKIHsKIAlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwOwogCWludCBpLCBhdHRyOwogCi0JZXBhZGRyIHw9IFVTQl9ESVJfSU47CiAJZm9yIChpID0gMDsgaSA8IGFsdC0+ZGVzYy5iTnVtRW5kcG9pbnRzOyBpKyspIHsKIAkJZXAgPSAmYWx0LT5lbmRwb2ludFtpXTsKLQkJaWYgKGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MgPT0gZXBhZGRyKSB7Ci0JCQlhdHRyID0gZXAtPmRlc2MuYm1BdHRyaWJ1dGVzCi0JCQkJCQkmIFVTQl9FTkRQT0lOVF9YRkVSVFlQRV9NQVNLOwotCQkJaWYgKGF0dHIgPT0geGZlcikKLQkJCQlyZXR1cm4gZXA7Ci0JCQlicmVhazsKLQkJfQorCQlhdHRyID0gZXAtPmRlc2MuYm1BdHRyaWJ1dGVzICYgVVNCX0VORFBPSU5UX1hGRVJUWVBFX01BU0s7CisJCWlmIChhdHRyID09IHhmZXIpCisJCQlyZXR1cm4gZXA7CiAJfQogCXJldHVybiBOVUxMOwogfQpAQCAtNDc4LDIzICs0NzQsMjMgQEAKIAlpID0gZ3NwY2FfZGV2LT5hbHQ7CQkJLyogcHJldmlvdXMgYWx0IHNldHRpbmcgKi8KIAogCS8qIHRyeSBpc29jICovCi0Jd2hpbGUgKC0taSA+IDApIHsJCQkvKiBhbHQgMCBpcyB1bnVzYWJsZSAqLworCXdoaWxlICgtLWkgPj0gMCkgewogCQllcCA9IGFsdF94ZmVyKCZpbnRmLT5hbHRzZXR0aW5nW2ldLAotCQkJCWdzcGNhX2Rldi0+Y2FtLmVwYWRkciwKIAkJCQlVU0JfRU5EUE9JTlRfWEZFUl9JU09DKTsKIAkJaWYgKGVwKQogCQkJYnJlYWs7CiAJfQogCi0JLyogaWYgbm8gaXNvYywgdHJ5IGJ1bGsgKi8KKwkvKiBpZiBubyBpc29jLCB0cnkgYnVsayAoYWx0IDAgb25seSkgKi8KIAlpZiAoZXAgPT0gTlVMTCkgewogCQllcCA9IGFsdF94ZmVyKCZpbnRmLT5hbHRzZXR0aW5nWzBdLAotCQkJCWdzcGNhX2Rldi0+Y2FtLmVwYWRkciwKIAkJCQlVU0JfRU5EUE9JTlRfWEZFUl9CVUxLKTsKIAkJaWYgKGVwID09IE5VTEwpIHsKIAkJCWVycigibm8gdHJhbnNmZXIgZW5kcG9pbnQgZm91bmQiKTsKIAkJCXJldHVybiBOVUxMOwogCQl9CisJCWkgPSAwOworCQlnc3BjYV9kZXYtPmJ1bGsgPSAxOwogCX0KIAlQREVCVUcoRF9TVFJFQU0sICJ1c2UgYWx0ICVkIGVwIDB4JTAyeCIsCiAJCQlpLCBlcC0+ZGVzYy5iRW5kcG9pbnRBZGRyZXNzKTsKQEAgLTUyMSw3ICs1MTcsNyBAQAogCS8qIGNhbGN1bGF0ZSB0aGUgcGFja2V0IHNpemUgYW5kIHRoZSBudW1iZXIgb2YgcGFja2V0cyAqLwogCXBzaXplID0gbGUxNl90b19jcHUoZXAtPmRlc2Mud01heFBhY2tldFNpemUpOwogCi0JaWYgKGdzcGNhX2Rldi0+YWx0ICE9IDApIHsJCS8qIGlzb2MgKi8KKwlpZiAoIWdzcGNhX2Rldi0+YnVsaykgewkJCS8qIGlzb2MgKi8KIAogCQkvKiBTZWUgcGFyYWdyYXBoIDUuOSAvIHRhYmxlIDUtMTEgb2YgdGhlIHVzYiAyLjAgc3BlYy4gKi8KIAkJcHNpemUgPSAocHNpemUgJiAweDA3ZmYpICogKDEgKyAoKHBzaXplID4+IDExKSAmIDMpKTsKQEAgLTYwMSw2ICs1OTcsMTEgQEAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnVzYl9sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKIAorCWlmICghZ3NwY2FfZGV2LT5wcmVzZW50KSB7CisJCXJldCA9IC1FTk9ERVY7CisJCWdvdG8gb3V0OworCX0KKwogCS8qIHNldCB0aGUgaGlnaGVyIGFsdGVybmF0ZSBzZXR0aW5nIGFuZAogCSAqIGxvb3AgdW50aWwgdXJiIHN1Ym1pdCBzdWNjZWVkcyAqLwogCWdzcGNhX2Rldi0+YWx0ID0gZ3NwY2FfZGV2LT5uYmFsdDsKQEAgLTYxNiwxMCArNjE3LDkgQEAKIAkJCWdvdG8gb3V0OwogCiAJCS8qIGNsZWFyIHRoZSBidWxrIGVuZHBvaW50ICovCi0JCWlmIChnc3BjYV9kZXYtPmFsdCA9PSAwKQkvKiBpZiBidWxrIHRyYW5zZmVyICovCisJCWlmIChnc3BjYV9kZXYtPmJ1bGspCiAJCQl1c2JfY2xlYXJfaGFsdChnc3BjYV9kZXYtPmRldiwKLQkJCQkJdXNiX3JjdmludHBpcGUoZ3NwY2FfZGV2LT5kZXYsCi0JCQkJCQkgZ3NwY2FfZGV2LT5jYW0uZXBhZGRyKSk7CisJCQkJCWdzcGNhX2Rldi0+dXJiWzBdLT5waXBlKTsKIAogCQkvKiBzdGFydCB0aGUgY2FtICovCiAJCXJldCA9IGdzcGNhX2Rldi0+c2RfZGVzYy0+c3RhcnQoZ3NwY2FfZGV2KTsKQEAgLTYzMCw3ICs2MzAsNyBAQAogCQlnc3BjYV9kZXYtPnN0cmVhbWluZyA9IDE7CiAKIAkJLyogc29tZSBidWxrIHRyYW5zZmVycyBhcmUgc3RhcnRlZCBieSB0aGUgc3ViZHJpdmVyICovCi0JCWlmIChnc3BjYV9kZXYtPmFsdCA9PSAwICYmIGdzcGNhX2Rldi0+Y2FtLmJ1bGtfbnVyYnMgPT0gMCkKKwkJaWYgKGdzcGNhX2Rldi0+YnVsayAmJiBnc3BjYV9kZXYtPmNhbS5idWxrX251cmJzID09IDApCiAJCQlicmVhazsKIAogCQkvKiBzdWJtaXQgdGhlIFVSQnMgKi8KQEAgLTY3MSwxMSArNjcxLDE0IEBACiBzdGF0aWMgdm9pZCBnc3BjYV9zdHJlYW1fb2ZmKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlnc3BjYV9kZXYtPnN0cmVhbWluZyA9IDA7Ci0JaWYgKGdzcGNhX2Rldi0+cHJlc2VudAotCSAgICAmJiBnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0b3BOKQotCQlnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0b3BOKGdzcGNhX2Rldik7Ci0JZGVzdHJveV91cmJzKGdzcGNhX2Rldik7Ci0JZ3NwY2Ffc2V0X2FsdDAoZ3NwY2FfZGV2KTsKKwlpZiAoZ3NwY2FfZGV2LT5wcmVzZW50KSB7CisJCWlmIChnc3BjYV9kZXYtPnNkX2Rlc2MtPnN0b3BOKQorCQkJZ3NwY2FfZGV2LT5zZF9kZXNjLT5zdG9wTihnc3BjYV9kZXYpOworCQlkZXN0cm95X3VyYnMoZ3NwY2FfZGV2KTsKKwkJZ3NwY2Ffc2V0X2FsdDAoZ3NwY2FfZGV2KTsKKwl9CisKKwkvKiBhbHdheXMgY2FsbCBzdG9wMCB0byBmcmVlIHRoZSBzdWJkcml2ZXIncyByZXNvdXJjZXMgKi8KIAlpZiAoZ3NwY2FfZGV2LT5zZF9kZXNjLT5zdG9wMCkKIAkJZ3NwY2FfZGV2LT5zZF9kZXNjLT5zdG9wMChnc3BjYV9kZXYpOwogCVBERUJVRyhEX1NUUkVBTSwgInN0cmVhbSBvZmYgT0siKTsKQEAgLTc2Miw3ICs3NjUsNiBAQAogCWZtdGRlc2MtPnBpeGVsZm9ybWF0ID0gZm10X3RiW2luZGV4XTsKIAlpZiAoZ3NwY2FfaXNfY29tcHJlc3NlZChmbXRfdGJbaW5kZXhdKSkKIAkJZm10ZGVzYy0+ZmxhZ3MgPSBWNEwyX0ZNVF9GTEFHX0NPTVBSRVNTRUQ7Ci0JZm10ZGVzYy0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAlmbXRkZXNjLT5kZXNjcmlwdGlvblswXSA9IGZtdGRlc2MtPnBpeGVsZm9ybWF0ICYgMHhmZjsKIAlmbXRkZXNjLT5kZXNjcmlwdGlvblsxXSA9IChmbXRkZXNjLT5waXhlbGZvcm1hdCA+PiA4KSAmIDB4ZmY7CiAJZm10ZGVzYy0+ZGVzY3JpcHRpb25bMl0gPSAoZm10ZGVzYy0+cGl4ZWxmb3JtYXQgPj4gMTYpICYgMHhmZjsKQEAgLTk1Nyw4ICs5NTksMTUgQEAKIAkJCSAgIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSBwcml2OworCWludCByZXQ7CiAKLQltZW1zZXQoY2FwLCAwLCBzaXplb2YgKmNhcCk7CisJLyogcHJvdGVjdCB0aGUgYWNjZXNzIHRvIHRoZSB1c2IgZGV2aWNlICovCisJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT51c2JfbG9jaykpCisJCXJldHVybiAtRVJFU1RBUlRTWVM7CisJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpIHsKKwkJcmV0ID0gLUVOT0RFVjsKKwkJZ290byBvdXQ7CisJfQogCXN0cm5jcHkoY2FwLT5kcml2ZXIsIGdzcGNhX2Rldi0+c2RfZGVzYy0+bmFtZSwgc2l6ZW9mIGNhcC0+ZHJpdmVyKTsKIAlpZiAoZ3NwY2FfZGV2LT5kZXYtPnByb2R1Y3QgIT0gTlVMTCkgewogCQlzdHJuY3B5KGNhcC0+Y2FyZCwgZ3NwY2FfZGV2LT5kZXYtPnByb2R1Y3QsCkBAIC05NjksMTMgKzk3OCwxNSBAQAogCQkJbGUxNl90b19jcHUoZ3NwY2FfZGV2LT5kZXYtPmRlc2NyaXB0b3IuaWRWZW5kb3IpLAogCQkJbGUxNl90b19jcHUoZ3NwY2FfZGV2LT5kZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KSk7CiAJfQotCXN0cm5jcHkoY2FwLT5idXNfaW5mbywgZ3NwY2FfZGV2LT5kZXYtPmJ1cy0+YnVzX25hbWUsCi0JCXNpemVvZiBjYXAtPmJ1c19pbmZvKTsKKwl1c2JfbWFrZV9wYXRoKGdzcGNhX2Rldi0+ZGV2LCBjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOwogCWNhcC0+dmVyc2lvbiA9IERSSVZFUl9WRVJTSU9OX05VTUJFUjsKIAljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUKIAkJCSAgfCBWNEwyX0NBUF9TVFJFQU1JTkcKIAkJCSAgfCBWNEwyX0NBUF9SRUFEV1JJVEU7Ci0JcmV0dXJuIDA7CisJcmV0ID0gMDsKK291dDoKKwltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKQEAgLTEwMzgsNyArMTA0OSwxMCBAQAogCQlQREVCVUcoRF9DT05GLCAic2V0IGN0cmwgWyUwOHhdID0gJWQiLCBjdHJsLT5pZCwgY3RybC0+dmFsdWUpOwogCQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnVzYl9sb2NrKSkKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JCXJldCA9IGN0cmxzLT5zZXQoZ3NwY2FfZGV2LCBjdHJsLT52YWx1ZSk7CisJCWlmIChnc3BjYV9kZXYtPnByZXNlbnQpCisJCQlyZXQgPSBjdHJscy0+c2V0KGdzcGNhX2RldiwgY3RybC0+dmFsdWUpOworCQllbHNlCisJCQlyZXQgPSAtRU5PREVWOwogCQltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOwogCQlyZXR1cm4gcmV0OwogCX0KQEAgLTEwNjIsNyArMTA3NiwxMCBAQAogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+dXNiX2xvY2spKQogCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJcmV0ID0gY3RybHMtPmdldChnc3BjYV9kZXYsICZjdHJsLT52YWx1ZSk7CisJCWlmIChnc3BjYV9kZXYtPnByZXNlbnQpCisJCQlyZXQgPSBjdHJscy0+Z2V0KGdzcGNhX2RldiwgJmN0cmwtPnZhbHVlKTsKKwkJZWxzZQorCQkJcmV0ID0gLUVOT0RFVjsKIAkJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0xMDgxLDcgKzEwOTgsNiBAQAogc3RhdGljIGludCB2aWRpb2NfZ19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCSBzdHJ1Y3QgdjRsMl9hdWRpbyAqYXVkaW8pCiB7Ci0JbWVtc2V0KGF1ZGlvLCAwLCBzaXplb2YgKmF1ZGlvKTsKIAlzdHJjcHkoYXVkaW8tPm5hbWUsICJNaWNyb3Bob25lIik7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMTE1LDcgKzExMzEsNiBAQAogCiAJaWYgKGlucHV0LT5pbmRleCAhPSAwKQogCQlyZXR1cm4gLUVJTlZBTDsKLQltZW1zZXQoaW5wdXQsIDAsIHNpemVvZiAqaW5wdXQpOwogCWlucHV0LT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKIAlzdHJuY3B5KGlucHV0LT5uYW1lLCBnc3BjYV9kZXYtPnNkX2Rlc2MtPm5hbWUsCiAJCXNpemVvZiBpbnB1dC0+bmFtZSk7CkBAIC0xMjI0LDEwICsxMjM5LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT5xdWV1ZV9sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkgewotCQlyZXQgPSAtRU5PREVWOwotCQlnb3RvIG91dDsKLQl9CisKIAlpZiAoZ3NwY2FfZGV2LT5uZnJhbWVzID09IDAKIAkgICAgfHwgIShnc3BjYV9kZXYtPmZyYW1lWzBdLnY0bDJfYnVmLmZsYWdzICYgVjRMMl9CVUZfRkxBR19RVUVVRUQpKSB7CiAJCXJldCA9IC1FSU5WQUw7CkBAIC0xMjk1LDcgKzEzMDcsMTAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZ3NwY2FfZGV2LT51c2JfbG9jaykpCiAJCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JcmV0ID0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5nZXRfamNvbXAoZ3NwY2FfZGV2LCBqcGVnY29tcCk7CisJaWYgKGdzcGNhX2Rldi0+cHJlc2VudCkKKwkJcmV0ID0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5nZXRfamNvbXAoZ3NwY2FfZGV2LCBqcGVnY29tcCk7CisJZWxzZQorCQlyZXQgPSAtRU5PREVWOwogCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CiAJcmV0dXJuIHJldDsKIH0KQEAgLTEzMTAsNyArMTMyNSwxMCBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnVzYl9sb2NrKSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQlyZXQgPSBnc3BjYV9kZXYtPnNkX2Rlc2MtPnNldF9qY29tcChnc3BjYV9kZXYsIGpwZWdjb21wKTsKKwlpZiAoZ3NwY2FfZGV2LT5wcmVzZW50KQorCQlyZXQgPSBnc3BjYV9kZXYtPnNkX2Rlc2MtPnNldF9qY29tcChnc3BjYV9kZXYsIGpwZWdjb21wKTsKKwllbHNlCisJCXJldCA9IC1FTk9ERVY7CiAJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtMTMyMCw4ICsxMzM4LDYgQEAKIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSBwcml2OwogCi0JbWVtc2V0KHBhcm0sIDAsIHNpemVvZiAqcGFybSk7Ci0JcGFybS0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAlwYXJtLT5wYXJtLmNhcHR1cmUucmVhZGJ1ZmZlcnMgPSBnc3BjYV9kZXYtPm5idWZyZWFkOwogCiAJaWYgKGdzcGNhX2Rldi0+c2RfZGVzYy0+Z2V0X3N0cmVhbXBhcm0pIHsKQEAgLTEzMjksNyArMTM0NSwxMSBAQAogCiAJCWlmIChtdXRleF9sb2NrX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+dXNiX2xvY2spKQogCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKLQkJcmV0ID0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5nZXRfc3RyZWFtcGFybShnc3BjYV9kZXYsIHBhcm0pOworCQlpZiAoZ3NwY2FfZGV2LT5wcmVzZW50KQorCQkJcmV0ID0gZ3NwY2FfZGV2LT5zZF9kZXNjLT5nZXRfc3RyZWFtcGFybShnc3BjYV9kZXYsCisJCQkJCQkJCSBwYXJtKTsKKwkJZWxzZQorCQkJcmV0ID0gLUVOT0RFVjsKIAkJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKIAkJcmV0dXJuIHJldDsKIAl9CkBAIC0xMzU0LDcgKzEzNzQsMTEgQEAKIAogCQlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnVzYl9sb2NrKSkKIAkJCXJldHVybiAtRVJFU1RBUlRTWVM7Ci0JCXJldCA9IGdzcGNhX2Rldi0+c2RfZGVzYy0+c2V0X3N0cmVhbXBhcm0oZ3NwY2FfZGV2LCBwYXJtKTsKKwkJaWYgKGdzcGNhX2Rldi0+cHJlc2VudCkKKwkJCXJldCA9IGdzcGNhX2Rldi0+c2RfZGVzYy0+c2V0X3N0cmVhbXBhcm0oZ3NwY2FfZGV2LAorCQkJCQkJCQkgcGFybSk7CisJCWVsc2UKKwkJCXJldCA9IC1FTk9ERVY7CiAJCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CiAJCXJldHVybiByZXQ7CiAJfQpAQCAtMTM4Miw3ICsxNDA2LDYgQEAKIAkJewogCQkJc3RydWN0IHY0bDJfZm9ybWF0IGZtdDsKIAotCQkJbWVtc2V0KCZmbXQsIDAsIHNpemVvZiBmbXQpOwogCQkJZm10LnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJCQlpID0gZ3NwY2FfZGV2LT5jYW0ubm1vZGVzIC0gMTsJLyogaGlnaGVzdCBtb2RlICovCiAJCQlmbXQuZm10LnBpeC53aWR0aCA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlW2ldLndpZHRoOwpAQCAtMTUyOCw3ICsxNTUxLDggQEAKIAogCWlmIChnc3BjYV9kZXYtPnNkX2Rlc2MtPmRxX2NhbGxiYWNrKSB7CiAJCW11dGV4X2xvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOwotCQlnc3BjYV9kZXYtPnNkX2Rlc2MtPmRxX2NhbGxiYWNrKGdzcGNhX2Rldik7CisJCWlmIChnc3BjYV9kZXYtPnByZXNlbnQpCisJCQlnc3BjYV9kZXYtPnNkX2Rlc2MtPmRxX2NhbGxiYWNrKGdzcGNhX2Rldik7CiAJCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CiAJfQogCXJldHVybiBqOwpAQCAtMTU1MCw2ICsxNTc0LDkgQEAKIAlpZiAodjRsMl9idWYtPm1lbW9yeSAhPSBnc3BjYV9kZXYtPm1lbW9yeSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKKwlpZiAoIWdzcGNhX2Rldi0+cHJlc2VudCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKIAkvKiBpZiBub3Qgc3RyZWFtaW5nLCBiZSBzdXJlIHRoZSBhcHBsaWNhdGlvbiB3aWxsIG5vdCBsb29wIGZvcmV2ZXIgKi8KIAlpZiAoIShmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSykKIAkgICAgJiYgIWdzcGNhX2Rldi0+c3RyZWFtaW5nICYmIGdzcGNhX2Rldi0+dXNlcnMgPT0gMSkKQEAgLTE3MDAsOCArMTcyNyw2IEBACiAJUERFQlVHKERfRlJBTSwgInBvbGwiKTsKIAogCXBvbGxfd2FpdChmaWxlLCAmZ3NwY2FfZGV2LT53cSwgd2FpdCk7Ci0JaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpCi0JCXJldHVybiBQT0xMRVJSOwogCiAJLyogaWYgcmVxYnVmcyBpcyBub3QgZG9uZSwgdGhlIHVzZXIgd291bGQgdXNlIHJlYWQoKSAqLwogCWlmIChnc3BjYV9kZXYtPm5mcmFtZXMgPT0gMCkgewpAQCAtMTcxNCwxMCArMTczOSw2IEBACiAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZnc3BjYV9kZXYtPnF1ZXVlX2xvY2spICE9IDApCiAJCXJldHVybiBQT0xMRVJSOwotCWlmICghZ3NwY2FfZGV2LT5wcmVzZW50KSB7Ci0JCXJldCA9IFBPTExFUlI7Ci0JCWdvdG8gb3V0OwotCX0KIAogCS8qIGNoZWNrIHRoZSBuZXh0IGluY29taW5nIGJ1ZmZlciAqLwogCWkgPSBnc3BjYV9kZXYtPmZyX287CkBAIC0xNzI2LDggKzE3NDcsOSBAQAogCQlyZXQgPSBQT0xMSU4gfCBQT0xMUkROT1JNOwkvKiBzb21ldGhpbmcgdG8gcmVhZCAqLwogCWVsc2UKIAkJcmV0ID0gMDsKLW91dDoKIAltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+cXVldWVfbG9jayk7CisJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpCisJCXJldHVybiBQT0xMSFVQOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTE5MjUsNyArMTk0Nyw3IEBACiAJZ3NwY2FfZGV2LT5wcmVzZW50ID0gMTsKIAlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoJmdzcGNhX2Rldi0+dmRldiwKIAkJCQkgIFZGTF9UWVBFX0dSQUJCRVIsCi0JCQkJICB2aWRlb19ucik7CisJCQkJICAtMSk7CiAJaWYgKHJldCA8IDApIHsKIAkJZXJyKCJ2aWRlb19yZWdpc3Rlcl9kZXZpY2UgZXJyICVkIiwgcmV0KTsKIAkJZ290byBvdXQ7CkBAIC0xOTUzLDEwICsxOTc1LDE2IEBACiAKIAltdXRleF9sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKIAlnc3BjYV9kZXYtPnByZXNlbnQgPSAwOworCisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7CisJCWRlc3Ryb3lfdXJicyhnc3BjYV9kZXYpOworCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmdzcGNhX2Rldi0+d3EpOworCX0KKworCS8qIHRoZSBkZXZpY2UgaXMgZnJlZWQgYXQgZXhpdCBvZiB0aGlzIGZ1bmN0aW9uICovCisJZ3NwY2FfZGV2LT5kZXYgPSBOVUxMOwogCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CiAKLQlkZXN0cm95X3VyYnMoZ3NwY2FfZGV2KTsKLQlnc3BjYV9kZXYtPmRldiA9IE5VTEw7CiAJdXNiX3NldF9pbnRmZGF0YShpbnRmLCBOVUxMKTsKIAogCS8qIHJlbGVhc2UgdGhlIGRldmljZSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9nc3BjYS5oCmluZGV4IGM5MGFmOWMuLmU0ZDRjZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvZ3NwY2EuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL2dzcGNhLmgKQEAgLTMzLDE5ICszMywxMyBAQAogI2VuZGlmCiAjdW5kZWYgZXJyCiAjZGVmaW5lIGVycihmbXQsIGFyZ3MuLi4pIFwKLQlkbyB7XAotCQlwcmludGsoS0VSTl9FUlIgTU9EVUxFX05BTUUgIjogIiBmbXQgIlxuIiwgIyMgYXJncyk7IFwKLQl9IHdoaWxlICgwKQorCXByaW50ayhLRVJOX0VSUiBNT0RVTEVfTkFNRSAiOiAiIGZtdCAiXG4iLCAjIyBhcmdzKQogI3VuZGVmIGluZm8KICNkZWZpbmUgaW5mbyhmbXQsIGFyZ3MuLi4pIFwKLQlkbyB7XAotCQlwcmludGsoS0VSTl9JTkZPIE1PRFVMRV9OQU1FICI6ICIgZm10ICJcbiIsICMjIGFyZ3MpOyBcCi0JfSB3aGlsZSAoMCkKKwlwcmludGsoS0VSTl9JTkZPIE1PRFVMRV9OQU1FICI6ICIgZm10ICJcbiIsICMjIGFyZ3MpCiAjdW5kZWYgd2FybgogI2RlZmluZSB3YXJuKGZtdCwgYXJncy4uLikgXAotCWRvIHtcCi0JCXByaW50ayhLRVJOX1dBUk5JTkcgTU9EVUxFX05BTUUgIjogIiBmbXQgIlxuIiwgIyMgYXJncyk7IFwKLQl9IHdoaWxlICgwKQorCXByaW50ayhLRVJOX1dBUk5JTkcgTU9EVUxFX05BTUUgIjogIiBmbXQgIlxuIiwgIyMgYXJncykKIAogI2RlZmluZSBHU1BDQV9NQVhfRlJBTUVTIDE2CS8qIG1heGltdW0gbnVtYmVyIG9mIHZpZGVvIGZyYW1lIGJ1ZmZlcnMgKi8KIC8qIGltYWdlIHRyYW5zZmVycyAqLwpAQCAtNjIsNyArNTYsNiBAQAogCQkJCSAqIC0gY2Fubm90IGJlID4gTUFYX05VUkJTCiAJCQkJICogLSB3aGVuIDAgYW5kIGJ1bGtfc2l6ZSAhPSAwIG1lYW5zCiAJCQkJICogICAxIFVSQiBhbmQgc3VibWl0IGRvbmUgYnkgc3ViZHJpdmVyICovCi0JX191OCBlcGFkZHI7CiB9OwogCiBzdHJ1Y3QgZ3NwY2FfZGV2OwpAQCAtMTc0LDYgKzE2Nyw3IEBACiAJX191OCBpZmFjZTsJCQkvKiBVU0IgaW50ZXJmYWNlIG51bWJlciAqLwogCV9fdTggYWx0OwkJCS8qIFVTQiBhbHRlcm5hdGUgc2V0dGluZyAqLwogCV9fdTggbmJhbHQ7CQkJLyogbnVtYmVyIG9mIFVTQiBhbHRlcm5hdGUgc2V0dGluZ3MgKi8KKwl1OCBidWxrOwkJCS8qIGltYWdlIHRyYW5zZmVyIGJ5IDA6aXNvYyAvIDE6YnVsayAqLwogfTsKIAogaW50IGdzcGNhX2Rldl9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvanBlZy5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9qcGVnLmgKaW5kZXggZDgyM2I0Ny4uZGU2M2MzNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9qcGVnLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9qcGVnLmgKQEAgLTI0LDE3MSArMjQsMzkgQEAKICAqCiAgKi8KIAotLyogc3RhcnQgb2YganBlZyBmcmFtZSArIHF1YW50aXphdGlvbiB0YWJsZSAqLwotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgcXVhbnRbXVsweDg4XSA9IHsKLS8qIGluZGV4IDAgLSBRNDAqLwotICAgIHsKLQkweGZmLCAweGQ4LAkJCS8qIGpwZWcgKi8KLQkweGZmLCAweGRiLCAweDAwLCAweDg0LAkJLyogRFFUICovCi0wLAkJCQkJLyogcXVhbnRpemF0aW9uIHRhYmxlIHBhcnQgMSAqLwotICAgICAyMCwgMTQsIDE1LCAxOCwgMTUsIDEzLCAyMCwgMTgsIDE2LCAxOCwgMjMsIDIxLCAyMCwgMjQsIDMwLCA1MCwKLSAgICAgMzMsIDMwLCAyOCwgMjgsIDMwLCA2MSwgNDQsIDQ2LCAzNiwgNTAsIDczLCA2NCwgNzYsIDc1LCA3MSwgNjQsCi0gICAgIDcwLCA2OSwgODAsIDkwLCAxMTUsIDk4LCA4MCwgODUsIDEwOSwgODYsIDY5LCA3MCwgMTAwLCAxMzYsIDEwMSwKLSAgICAgMTA5LAotICAgICAxMTksIDEyMywgMTI5LCAxMzAsIDEyOSwgNzgsIDk2LCAxNDEsIDE1MSwgMTQwLCAxMjUsIDE1MCwgMTE1LAotICAgICAxMjYsIDEyOSwgMTI0LAotMSwJCQkJCS8qIHF1YW50aXphdGlvbiB0YWJsZSBwYXJ0IDIgKi8KLSAgICAgMjEsIDIzLCAyMywgMzAsIDI2LCAzMCwgNTksIDMzLCAzMywgNTksIDEyNCwgODMsIDcwLCA4MywgMTI0LCAxMjQsCi0gICAgIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwKLSAgICAgMTI0LCAxMjQsIDEyNCwKLSAgICAgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LAotICAgICAxMjQsIDEyNCwgMTI0LAotICAgICAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsIDEyNCwgMTI0LCAxMjQsCi0gICAgIDEyNCwgMTI0LCAxMjR9LAotLyogaW5kZXggMSAtIFE1MCAqLwotICAgIHsKLQkweGZmLCAweGQ4LAotCTB4ZmYsIDB4ZGIsIDB4MDAsIDB4ODQsCQkvKiBEUVQgKi8KLTAsCi0gICAgIDE2LCAxMSwgMTIsIDE0LCAxMiwgMTAsIDE2LCAxNCwgMTMsIDE0LCAxOCwgMTcsIDE2LCAxOSwgMjQsIDQwLAotICAgICAyNiwgMjQsIDIyLCAyMiwgMjQsIDQ5LCAzNSwgMzcsIDI5LCA0MCwgNTgsIDUxLCA2MSwgNjAsIDU3LCA1MSwKLSAgICAgNTYsIDU1LCA2NCwgNzIsIDkyLCA3OCwgNjQsIDY4LCA4NywgNjksIDU1LCA1NiwgODAsIDEwOSwgODEsIDg3LAotICAgICA5NSwgOTgsIDEwMywgMTA0LCAxMDMsIDYyLCA3NywgMTEzLCAxMjEsIDExMiwgMTAwLCAxMjAsIDkyLCAxMDEsCi0gICAgIDEwMywgOTksCi0xLAotICAgIDE3LCAxOCwgMTgsIDI0LCAyMSwgMjQsIDQ3LCAyNiwgMjYsIDQ3LCA5OSwgNjYsIDU2LCA2NiwgOTksIDk5LAotICAgICA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwKLSAgICAgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksCi0gICAgIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5LCA5OSwgOTksIDk5fSwKLS8qIGluZGV4IDIgUTYwICovCi0gICAgewotCTB4ZmYsIDB4ZDgsCi0JMHhmZiwgMHhkYiwgMHgwMCwgMHg4NCwJCS8qIERRVCAqLwotMCwKLSAgICAgMTMsIDksIDEwLCAxMSwgMTAsIDgsIDEzLCAxMSwgMTAsIDExLCAxNCwgMTQsIDEzLCAxNSwgMTksIDMyLAotICAgICAyMSwgMTksIDE4LCAxOCwgMTksIDM5LCAyOCwgMzAsIDIzLCAzMiwgNDYsIDQxLCA0OSwgNDgsIDQ2LCA0MSwKLSAgICAgNDUsIDQ0LCA1MSwgNTgsIDc0LCA2MiwgNTEsIDU0LCA3MCwgNTUsIDQ0LCA0NSwgNjQsIDg3LCA2NSwgNzAsCi0gICAgIDc2LCA3OCwgODIsIDgzLCA4MiwgNTAsIDYyLCA5MCwgOTcsIDkwLCA4MCwgOTYsIDc0LCA4MSwgODIsIDc5LAotMSwKLSAgICAgMTQsIDE0LCAxNCwgMTksIDE3LCAxOSwgMzgsIDIxLCAyMSwgMzgsIDc5LCA1MywgNDUsIDUzLCA3OSwgNzksCi0gICAgIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LAotICAgICA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwKLSAgICAgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzksIDc5LCA3OSwgNzl9LAotLyogaW5kZXggMyAtIFE3MCAqLwotICAgIHsKLQkweGZmLCAweGQ4LAotCTB4ZmYsIDB4ZGIsIDB4MDAsIDB4ODQsCQkvKiBEUVQgKi8KLTAsCi0gICAgIDEwLCA3LCA3LCA4LCA3LCA2LCAxMCwgOCwgOCwgOCwgMTEsIDEwLCAxMCwgMTEsIDE0LCAyNCwKLSAgICAgMTYsIDE0LCAxMywgMTMsIDE0LCAyOSwgMjEsIDIyLCAxNywgMjQsIDM1LCAzMSwgMzcsIDM2LCAzNCwgMzEsCi0gICAgIDM0LCAzMywgMzgsIDQzLCA1NSwgNDcsIDM4LCA0MSwgNTIsIDQxLCAzMywgMzQsIDQ4LCA2NSwgNDksIDUyLAotICAgICA1NywgNTksIDYyLCA2MiwgNjIsIDM3LCA0NiwgNjgsIDczLCA2NywgNjAsIDcyLCA1NSwgNjEsIDYyLCA1OSwKLTEsCi0gICAgIDEwLCAxMSwgMTEsIDE0LCAxMywgMTQsIDI4LCAxNiwgMTYsIDI4LCA1OSwgNDAsIDM0LCA0MCwgNTksIDU5LAotICAgICA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwKLSAgICAgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksCi0gICAgIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5LCA1OSwgNTksIDU5fSwKLS8qIGluZGV4IDQgLSBRODAgKi8KLSAgICB7Ci0JMHhmZiwgMHhkOCwKLQkweGZmLCAweGRiLCAweDAwLCAweDg0LAkJLyogRFFUICovCi0wLAotICAgICAgNiwgNCwgNSwgNiwgNSwgNCwgNiwgNiwgNSwgNiwgNywgNywgNiwgOCwgMTAsIDE2LAotICAgICAxMCwgMTAsIDksIDksIDEwLCAyMCwgMTQsIDE1LCAxMiwgMTYsIDIzLCAyMCwgMjQsIDI0LCAyMywgMjAsCi0gICAgIDIyLCAyMiwgMjYsIDI5LCAzNywgMzEsIDI2LCAyNywgMzUsIDI4LCAyMiwgMjIsIDMyLCA0NCwgMzIsIDM1LAotICAgICAzOCwgMzksIDQxLCA0MiwgNDEsIDI1LCAzMSwgNDUsIDQ4LCA0NSwgNDAsIDQ4LCAzNywgNDAsIDQxLCA0MCwKLTEsCi0gICAgICA3LCA3LCA3LCAxMCwgOCwgMTAsIDE5LCAxMCwgMTAsIDE5LCA0MCwgMjYsIDIyLCAyNiwgNDAsIDQwLAotICAgICA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwKLSAgICAgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsCi0gICAgIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwLCA0MCwgNDAsIDQwfSwKLS8qIGluZGV4IDUgLSBRODUgKi8KLSAgICB7Ci0JMHhmZiwgMHhkOCwKLQkweGZmLCAweGRiLCAweDAwLCAweDg0LAkJLyogRFFUICovCi0wLAotICAgICA1LCAzLCA0LCA0LCA0LCAzLCA1LCA0LCA0LCA0LCA1LCA1LCA1LCA2LCA3LCAxMiwKLSAgICAgOCwgNywgNywgNywgNywgMTUsIDExLCAxMSwgOSwgMTIsIDE3LCAxNSwgMTgsIDE4LCAxNywgMTUsCi0gICAgIDE3LCAxNywgMTksIDIyLCAyOCwgMjMsIDE5LCAyMCwgMjYsIDIxLCAxNywgMTcsIDI0LCAzMywgMjQsIDI2LAotICAgICAyOSwgMjksIDMxLCAzMSwgMzEsIDE5LCAyMywgMzQsIDM2LCAzNCwgMzAsIDM2LCAyOCwgMzAsIDMxLCAzMCwKLTEsCi0gICAgIDUsIDUsIDUsIDcsIDYsIDcsIDE0LCA4LCA4LCAxNCwgMzAsIDIwLCAxNywgMjAsIDMwLCAzMCwKLSAgICAgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsCi0gICAgIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLAotICAgICAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMCwgMzAsIDMwLCAzMH0sCi0vKiBpbmRleCA2IC0gODYgKi8KLXsKLQkweGZmLCAweGQ4LAotCTB4ZmYsIDB4ZGIsIDB4MDAsIDB4ODQsCQkvKiBEUVQgKi8KLTAsCi0JMHgwNCwgMHgwMywgMHgwMywgMHgwNCwgMHgwMywgMHgwMywgMHgwNCwgMHgwNCwKLQkweDA0LCAweDA0LCAweDA1LCAweDA1LCAweDA0LCAweDA1LCAweDA3LCAweDBCLAotCTB4MDcsIDB4MDcsIDB4MDYsIDB4MDYsIDB4MDcsIDB4MEUsIDB4MEEsIDB4MEEsCi0JMHgwOCwgMHgwQiwgMHgxMCwgMHgwRSwgMHgxMSwgMHgxMSwgMHgxMCwgMHgwRSwKLQkweDEwLCAweDBGLCAweDEyLCAweDE0LCAweDFBLCAweDE2LCAweDEyLCAweDEzLAotCTB4MTgsIDB4MTMsIDB4MEYsIDB4MTAsIDB4MTYsIDB4MUYsIDB4MTcsIDB4MTgsCi0JMHgxQiwgMHgxQiwgMHgxRCwgMHgxRCwgMHgxRCwgMHgxMSwgMHgxNiwgMHgyMCwKLQkweDIyLCAweDFGLCAweDFDLCAweDIyLCAweDFBLCAweDFDLCAweDFELCAweDFDLAotMSwKLQkweDA1LCAweDA1LCAweDA1LCAweDA3LCAweDA2LCAweDA3LCAweDBELCAweDA3LAotCTB4MDcsIDB4MEQsIDB4MUMsIDB4MTIsIDB4MTAsIDB4MTIsIDB4MUMsIDB4MUMsCi0JMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywKLQkweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLAotCTB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsCi0JMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywgMHgxQywKLQkweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLCAweDFDLAotCTB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsIDB4MUMsCi0gfSwKLS8qIGluZGV4IDcgLSA4OCAqLwotewotCTB4ZmYsIDB4ZDgsCi0JMHhmZiwgMHhkYiwgMHgwMCwgMHg4NCwJCS8qIERRVCAqLwotMCwKLQkweDA0LCAweDAzLCAweDAzLCAweDAzLCAweDAzLCAweDAyLCAweDA0LCAweDAzLAotCTB4MDMsIDB4MDMsIDB4MDQsIDB4MDQsIDB4MDQsIDB4MDUsIDB4MDYsIDB4MEEsCi0JMHgwNiwgMHgwNiwgMHgwNSwgMHgwNSwgMHgwNiwgMHgwQywgMHgwOCwgMHgwOSwKLQkweDA3LCAweDBBLCAweDBFLCAweDBDLCAweDBGLCAweDBFLCAweDBFLCAweDBDLAotCTB4MEQsIDB4MEQsIDB4MEYsIDB4MTEsIDB4MTYsIDB4MTMsIDB4MEYsIDB4MTAsCi0JMHgxNSwgMHgxMSwgMHgwRCwgMHgwRCwgMHgxMywgMHgxQSwgMHgxMywgMHgxNSwKLQkweDE3LCAweDE4LCAweDE5LCAweDE5LCAweDE5LCAweDBGLCAweDEyLCAweDFCLAotCTB4MUQsIDB4MUIsIDB4MTgsIDB4MUQsIDB4MTYsIDB4MTgsIDB4MTksIDB4MTgsCi0xLAotCTB4MDQsIDB4MDQsIDB4MDQsIDB4MDYsIDB4MDUsIDB4MDYsIDB4MEIsIDB4MDYsCi0JMHgwNiwgMHgwQiwgMHgxOCwgMHgxMCwgMHgwRCwgMHgxMCwgMHgxOCwgMHgxOCwKLQkweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LAotCTB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsCi0JMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwKLQkweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LCAweDE4LAotCTB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MTgsCi0JMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwgMHgxOCwKLX0sCi0vKiBpbmRleCA4IC0gPz8gKi8KLXsKLQkweGZmLCAweGQ4LAotCTB4ZmYsIDB4ZGIsIDB4MDAsIDB4ODQsCQkvKiBEUVQgKi8KLTAsCi0JMHgwMiwgMHgwMiwgMHgwMiwgMHgwMiwgMHgwMiwgMHgwMiwgMHgwMiwgMHgwMiwKLQkweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAyLCAweDAzLCAweDA1LAotCTB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDMsIDB4MDYsIDB4MDQsIDB4MDUsCi0JMHgwNCwgMHgwNSwgMHgwNywgMHgwNiwgMHgwOCwgMHgwOCwgMHgwNywgMHgwNiwKLQkweDA3LCAweDA3LCAweDA4LCAweDA5LCAweDBDLCAweDBBLCAweDA4LCAweDA5LAotCTB4MEIsIDB4MDksIDB4MDcsIDB4MDcsIDB4MEEsIDB4MEUsIDB4MEEsIDB4MEIsCi0JMHgwQywgMHgwQywgMHgwRCwgMHgwRCwgMHgwRCwgMHgwOCwgMHgwQSwgMHgwRSwKLQkweDBGLCAweDBFLCAweDBELCAweDBGLCAweDBDLCAweDBELCAweDBELCAweDBDLAotMSwKLQkweDAyLCAweDAyLCAweDAyLCAweDAzLCAweDAzLCAweDAzLCAweDA2LCAweDAzLAotCTB4MDMsIDB4MDYsIDB4MEMsIDB4MDgsIDB4MDcsIDB4MDgsIDB4MEMsIDB4MEMsCi0JMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywKLQkweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLAotCTB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsCi0JMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywgMHgwQywKLQkweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLCAweDBDLAotCTB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMsIDB4MEMKLX0KLX07CisvKgorICogZ2VuZXJhdGlvbiBvcHRpb25zCisgKglDT05FWF9DQU0JQ29uZXhhbnQgaWYgcHJlc2VudAorICovCiAKLS8qIGh1ZmZtYW4gdGFibGUgKyBzdGFydCBvZiBTT0YwICovCi1zdGF0aWMgdW5zaWduZWQgY2hhciBodWZmbWFuW10gPSB7CisvKiBKUEVHIGhlYWRlciAqLworc3RhdGljIGNvbnN0IHU4IGpwZWdfaGVhZFtdID0geworCTB4ZmYsIDB4ZDgsCQkJLyoganBlZyAqLworCisvKiBxdWFudGl6YXRpb24gdGFibGUgcXVhbGl0eSA1MCUgKi8KKwkweGZmLCAweGRiLCAweDAwLCAweDg0LAkJLyogRFFUICovCiswLAorI2RlZmluZSBKUEVHX1FUMF9PRkZTRVQgNworCTB4MTAsIDB4MGIsIDB4MGMsIDB4MGUsIDB4MGMsIDB4MGEsIDB4MTAsIDB4MGUsCisJMHgwZCwgMHgwZSwgMHgxMiwgMHgxMSwgMHgxMCwgMHgxMywgMHgxOCwgMHgyOCwKKwkweDFhLCAweDE4LCAweDE2LCAweDE2LCAweDE4LCAweDMxLCAweDIzLCAweDI1LAorCTB4MWQsIDB4MjgsIDB4M2EsIDB4MzMsIDB4M2QsIDB4M2MsIDB4MzksIDB4MzMsCisJMHgzOCwgMHgzNywgMHg0MCwgMHg0OCwgMHg1YywgMHg0ZSwgMHg0MCwgMHg0NCwKKwkweDU3LCAweDQ1LCAweDM3LCAweDM4LCAweDUwLCAweDZkLCAweDUxLCAweDU3LAorCTB4NWYsIDB4NjIsIDB4NjcsIDB4NjgsIDB4NjcsIDB4M2UsIDB4NGQsIDB4NzEsCisJMHg3OSwgMHg3MCwgMHg2NCwgMHg3OCwgMHg1YywgMHg2NSwgMHg2NywgMHg2MywKKzEsCisjZGVmaW5lIEpQRUdfUVQxX09GRlNFVCA3MgorCTB4MTEsIDB4MTIsIDB4MTIsIDB4MTgsIDB4MTUsIDB4MTgsIDB4MmYsIDB4MWEsCisJMHgxYSwgMHgyZiwgMHg2MywgMHg0MiwgMHgzOCwgMHg0MiwgMHg2MywgMHg2MywKKwkweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLAorCTB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsCisJMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywKKwkweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLCAweDYzLAorCTB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsIDB4NjMsCisJMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywgMHg2MywKKworLyogaHVmZm1hbiB0YWJsZSAqLwogCTB4ZmYsIDB4YzQsIDB4MDEsIDB4YTIsCiAJMHgwMCwgMHgwMCwgMHgwMSwgMHgwNSwgMHgwMSwgMHgwMSwgMHgwMSwgMHgwMSwKIAkweDAxLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLApAQCAtMjQ0LDU4ICsxMTIsNTcgQEAKIAkweGYzLCAweGY0LCAweGY1LCAweGY2LCAweGY3LCAweGY4LCAweGY5LCAweGZhLAogI2lmZGVmIENPTkVYX0NBTQogLyogdGhlIENvbmV4YW50IGZyYW1lcyBzdGFydCB3aXRoIFNPRjAgKi8KKyNkZWZpbmUgSlBFR19IRFJfU1ogNTU2CiAjZWxzZQogCTB4ZmYsIDB4YzAsIDB4MDAsIDB4MTEsCQkvKiBTT0YwIChzdGFydCBvZiBmcmFtZSAwICovCiAJMHgwOCwJCQkJLyogZGF0YSBwcmVjaXNpb24gKi8KLSNlbmRpZgotfTsKLQotI2lmbmRlZiBDT05FWF9DQU0KLS8qIHZhcmlhYmxlIHBhcnQ6Ci0gKgkweDAxLCAweGUwLAkJCSBoZWlnaHQKLSAqCTB4MDIsIDB4ODAsCQkJIHdpZHRoCi0gKgkweDAzLAkJCQkgY29tcG9uZW50IG51bWJlcgotICoJCTB4MDEsCi0gKgkJCTB4MjEsCQkJc2FtcGxlcyBZCi0gKi8KLQotLyogZW5kIG9mIGhlYWRlciAqLwotc3RhdGljIHVuc2lnbmVkIGNoYXIgZW9oW10gPSB7CisjZGVmaW5lIEpQRUdfSEVJR0hUX09GRlNFVCA1NjEKKwkweDAxLCAweGUwLAkJCS8qIGhlaWdodCAqLworCTB4MDIsIDB4ODAsCQkJLyogd2lkdGggKi8KKwkweDAzLAkJCQkvKiBjb21wb25lbnQgbnVtYmVyICovCisJCTB4MDEsCisJCQkweDIxLAkJLyogc2FtcGxlcyBZICovCiAJCQkweDAwLAkJLyogcXVhbnQgWSAqLwogCQkweDAyLCAweDExLCAweDAxLAkvKiBzYW1wbGVzIENiQ3IgLSBxdWFudCBDYkNyICovCiAJCTB4MDMsIDB4MTEsIDB4MDEsCiAKIAkweGZmLCAweGRhLCAweDAwLCAweDBjLAkJLyogU09TIChzdGFydCBvZiBzY2FuKSAqLwogCTB4MDMsIDB4MDEsIDB4MDAsIDB4MDIsIDB4MTEsIDB4MDMsIDB4MTEsIDB4MDAsIDB4M2YsIDB4MDAKKyNkZWZpbmUgSlBFR19IRFJfU1ogNTg5CisjZW5kaWYKIH07Ci0jZW5kaWYKIAotLyogLS0gb3V0cHV0IHRoZSBKUEVHIGhlYWRlciAtLSAqLwotc3RhdGljIHZvaWQganBlZ19wdXRfaGVhZGVyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJCSAgICBzdHJ1Y3QgZ3NwY2FfZnJhbWUgKmZyYW1lLAotCQkJICAgIGludCBxaW5kZXgsCi0JCQkgICAgaW50IHNhbXBsZXNZKQorLyogZGVmaW5lIHRoZSBKUEVHIGhlYWRlciAqLworc3RhdGljIHZvaWQganBlZ19kZWZpbmUodTggKmpwZWdfaGRyLAorCQkJaW50IGhlaWdodCwKKwkJCWludCB3aWR0aCwKKwkJCWludCBzYW1wbGVzWSkKIHsKKwltZW1jcHkoanBlZ19oZHIsIGpwZWdfaGVhZCwgc2l6ZW9mIGpwZWdfaGVhZCk7CiAjaWZuZGVmIENPTkVYX0NBTQotCXVuc2lnbmVkIGNoYXIgdG1wYnVmWzhdOworCWpwZWdfaGRyW0pQRUdfSEVJR0hUX09GRlNFVCArIDBdID0gaGVpZ2h0ID4+IDg7CisJanBlZ19oZHJbSlBFR19IRUlHSFRfT0ZGU0VUICsgMV0gPSBoZWlnaHQgJiAweGZmOworCWpwZWdfaGRyW0pQRUdfSEVJR0hUX09GRlNFVCArIDJdID0gd2lkdGggPj4gODsKKwlqcGVnX2hkcltKUEVHX0hFSUdIVF9PRkZTRVQgKyAzXSA9IHdpZHRoICYgMHhmZjsKKwlqcGVnX2hkcltKUEVHX0hFSUdIVF9PRkZTRVQgKyA2XSA9IHNhbXBsZXNZOwogI2VuZGlmCit9CiAKLQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsIGZyYW1lLAotCQkJKHVuc2lnbmVkIGNoYXIgKikgcXVhbnRbcWluZGV4XSwgc2l6ZW9mIHF1YW50WzBdKTsKLQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLAotCQkJKHVuc2lnbmVkIGNoYXIgKikgaHVmZm1hbiwgc2l6ZW9mIGh1ZmZtYW4pOwotI2lmbmRlZiBDT05FWF9DQU0KLQl0bXBidWZbMF0gPSBnc3BjYV9kZXYtPmhlaWdodCA+PiA4OwotCXRtcGJ1ZlsxXSA9IGdzcGNhX2Rldi0+aGVpZ2h0ICYgMHhmZjsKLQl0bXBidWZbMl0gPSBnc3BjYV9kZXYtPndpZHRoID4+IDg7Ci0JdG1wYnVmWzNdID0gZ3NwY2FfZGV2LT53aWR0aCAmIDB4ZmY7Ci0JdG1wYnVmWzRdID0gMHgwMzsJCS8qIGNvbXBvbmVudCBudW1iZXIgKi8KLQl0bXBidWZbNV0gPSAweDAxOwkJLyogZmlyc3QgY29tcG9uZW50ICovCi0JdG1wYnVmWzZdID0gc2FtcGxlc1k7Ci0JZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBmcmFtZSwKLQkJCXRtcGJ1ZiwgNyk7Ci0JZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBmcmFtZSwKLQkJCWVvaCwgc2l6ZW9mIGVvaCk7Ci0jZW5kaWYKKy8qIHNldCB0aGUgSlBFRyBxdWFsaXR5ICovCitzdGF0aWMgdm9pZCBqcGVnX3NldF9xdWFsKHU4ICpqcGVnX2hkciwKKwkJCSAgaW50IHF1YWxpdHkpCit7CisJaW50IGksIHNjOworCisJaWYgKHF1YWxpdHkgPCA1MCkKKwkJc2MgPSA1MDAwIC8gcXVhbGl0eTsKKwllbHNlCisJCXNjID0gMjAwIC0gcXVhbGl0eSAqIDI7CisJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHsKKwkJanBlZ19oZHJbSlBFR19RVDBfT0ZGU0VUICsgaV0gPQorCQkJKGpwZWdfaGVhZFtKUEVHX1FUMF9PRkZTRVQgKyBpXSAqIHNjICsgNTApIC8gMTAwOworCQlqcGVnX2hkcltKUEVHX1FUMV9PRkZTRVQgKyBpXSA9CisJCQkoanBlZ19oZWFkW0pQRUdfUVQxX09GRlNFVCArIGldICogc2MgKyA1MCkgLyAxMDA7CisJfQogfQogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL201NjAyL201NjAyX2NvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfY29yZS5jCmluZGV4IGVkOTA2ZmUuLmIzNWU0ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbTU2MDIvbTU2MDJfY29yZS5jCkBAIC0zMzIsNyArMzMyLDYgQEAKIAlpbnQgZXJyOwogCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwotCWNhbS0+ZXBhZGRyID0gTTU2MDJfSVNPQ19FTkRQT0lOVF9BRERSOwogCXNkLT5kZXNjID0gJnNkX2Rlc2M7CiAKIAlpZiAoZHVtcF9icmlkZ2UpCkBAIC0zNzQsOCArMzczLDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBtb2RfbTU2MDJfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21hcnMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jCmluZGV4IDNkMjA5MGUuLjc1ZThkMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvbWFycy5jCkBAIC0zMiwxNyArMzIsOTEgQEAKIHN0cnVjdCBzZCB7CiAJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KIAotCWNoYXIgcWluZGV4OworCXU4IGJyaWdodG5lc3M7CisJdTggY29sb3JzOworCXU4IGdhbW1hOworCXU4IHNoYXJwbmVzczsKKwl1OCBxdWFsaXR5OworI2RlZmluZSBRVUFMSVRZX01JTiA0MAorI2RlZmluZSBRVUFMSVRZX01BWCA3MAorI2RlZmluZSBRVUFMSVRZX0RFRiA1MAorCisJdTggKmpwZWdfaGRyOwogfTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLworc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKK3N0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Z2FtbWEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRnYW1tYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOworc3RhdGljIGludCBzZF9zZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKKwogc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7CisJeworCSAgICB7CisJCS5pZCAgICAgID0gVjRMMl9DSURfQlJJR0hUTkVTUywKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJCcmlnaHRuZXNzIiwKKwkJLm1pbmltdW0gPSAwLAorCQkubWF4aW11bSA9IDMwLAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIEJSSUdIVE5FU1NfREVGIDE1CisJCS5kZWZhdWx0X3ZhbHVlID0gQlJJR0hUTkVTU19ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRicmlnaHRuZXNzLAorCSAgICAuZ2V0ID0gc2RfZ2V0YnJpZ2h0bmVzcywKKwl9LAorCXsKKwkgICAgeworCQkuaWQgICAgICA9IFY0TDJfQ0lEX1NBVFVSQVRJT04sCisJCS50eXBlICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJLm5hbWUgICAgPSAiQ29sb3IiLAorCQkubWluaW11bSA9IDEsCisJCS5tYXhpbXVtID0gMjU1LAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIENPTE9SX0RFRiAyMDAKKwkJLmRlZmF1bHRfdmFsdWUgPSBDT0xPUl9ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRjb2xvcnMsCisJICAgIC5nZXQgPSBzZF9nZXRjb2xvcnMsCisJfSwKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9HQU1NQSwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJHYW1tYSIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAzLAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIEdBTU1BX0RFRiAxCisJCS5kZWZhdWx0X3ZhbHVlID0gR0FNTUFfREVGLAorCSAgICB9LAorCSAgICAuc2V0ID0gc2Rfc2V0Z2FtbWEsCisJICAgIC5nZXQgPSBzZF9nZXRnYW1tYSwKKwl9LAorCXsKKwkgICAgeworCQkuaWQJID0gVjRMMl9DSURfU0hBUlBORVNTLAorCQkudHlwZSAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCS5uYW1lICAgID0gIlNoYXJwbmVzcyIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSAyLAorCQkuc3RlcCAgICA9IDEsCisjZGVmaW5lIFNIQVJQTkVTU19ERUYgMQorCQkuZGVmYXVsdF92YWx1ZSA9IFNIQVJQTkVTU19ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRzaGFycG5lc3MsCisJICAgIC5nZXQgPSBzZF9nZXRzaGFycG5lc3MsCisJfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CiAJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAogCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAotCQkuc2l6ZWltYWdlID0gMzIwICogMjQwICogMyAvIDggKyA1ODksCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAzIC8gOCArIDU5MCwKIAkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKIAkJLnByaXYgPSAyfSwKIAl7NjQwLCA0ODAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCkBAIC01Miw2NSArMTI2LDQ1IEBACiAJCS5wcml2ID0gMX0sCiB9OwogCi0vKiBNSSBSZWdpc3RlciB0YWJsZSAvL2VsdmlzICovCi1lbnVtIHsKLQlSRUdfSFdfTUlfMCwKLQlSRUdfSFdfTUlfMSwKLQlSRUdfSFdfTUlfMiwKLQlSRUdfSFdfTUlfMywKLQlSRUdfSFdfTUlfNCwKLQlSRUdfSFdfTUlfNSwKLQlSRUdfSFdfTUlfNiwKLQlSRUdfSFdfTUlfNywKLQlSRUdfSFdfTUlfOSA9IDB4MDksCi0JUkVHX0hXX01JX0IgPSAweDBCLAotCVJFR19IV19NSV9DLAotCVJFR19IV19NSV9ELAotCVJFR19IV19NSV8xRSA9IDB4MUUsCi0JUkVHX0hXX01JXzIwID0gMHgyMCwKLQlSRUdfSFdfTUlfMkIgPSAweDJCLAotCVJFR19IV19NSV8yQywKLQlSRUdfSFdfTUlfMkQsCi0JUkVHX0hXX01JXzJFLAotCVJFR19IV19NSV8zNSA9IDB4MzUsCi0JUkVHX0hXX01JXzVGID0gMHg1ZiwKLQlSRUdfSFdfTUlfNjAsCi0JUkVHX0hXX01JXzYxLAotCVJFR19IV19NSV82MiwKLQlSRUdfSFdfTUlfNjMsCi0JUkVHX0hXX01JXzY0LAotCVJFR19IV19NSV9GMSA9IDB4ZjEsCi0JQVRUUl9UT1RBTF9NSV9SRUcgPSAweGYyCitzdGF0aWMgY29uc3QgX191OCBtaV9kYXRhWzB4MjBdID0geworLyoJIDAxICAgIDAyICAgMDMgICAgIDA0ICAgIDA1ICAgIDA2ICAgIDA3ICAgIDA4ICovCisJMHg0OCwgMHgyMiwgMHgwMSwgMHg0NywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwKKy8qCSAwOSAgICAwYSAgIDBiICAgICAwYyAgICAwZCAgICAwZSAgICAwZiAgICAxMCAqLworCTB4MDAsIDB4MDEsIDB4MzAsIDB4MDEsIDB4MzAsIDB4MDEsIDB4MzAsIDB4MDEsCisvKgkgMTEgICAgMTIgICAxMyAgICAgMTQgICAgMTUgICAgMTYgICAgMTcgICAgMTggKi8KKwkweDMwLCAweDAwLCAweDA0LCAweDAwLCAweDA2LCAweDAxLCAweGUyLCAweDAyLAorLyoJIDE5ICAgIDFhICAgMWIgICAgIDFjICAgIDFkICAgIDFlICAgIDFmICAgIDIwICovCisJMHg4MiwgMHgwMCwgMHgyMCwgMHgxNywgMHg4MCwgMHgwOCwgMHgwYywgMHgwMAogfTsKIAotLyogdGhlIGJ5dGVzIHRvIHdyaXRlIGFyZSBpbiBnc3BjYV9kZXYtPnVzYl9idWYgKi8KKy8qIHdyaXRlIDxsZW4+IGJ5dGVzIGZyb20gZ3NwY2FfZGV2LT51c2JfYnVmICovCiBzdGF0aWMgaW50IHJlZ193KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJIF9fdTE2IGluZGV4LCBpbnQgbGVuKQorCQkgaW50IGxlbikKIHsKLQlpbnQgcmM7CisJaW50IGFsZW4sIHJldDsKIAotCXJjID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAotCQkJIHVzYl9zbmRidWxrcGlwZShnc3BjYV9kZXYtPmRldiwgNCksCi0JCQkgMHgxMiwKLQkJCSAweGM4LAkJLyogPz8gKi8KLQkJCSAwLAkJLyogdmFsdWUgKi8KLQkJCSBpbmRleCwgZ3NwY2FfZGV2LT51c2JfYnVmLCBsZW4sIDUwMCk7Ci0JaWYgKHJjIDwgMCkKLQkJUERFQlVHKERfRVJSLCAicmVnIHdyaXRlIFslMDJ4XSBlcnJvciAlZCIsIGluZGV4LCByYyk7Ci0JcmV0dXJuIHJjOworCXJldCA9IHVzYl9idWxrX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCXVzYl9zbmRidWxrcGlwZShnc3BjYV9kZXYtPmRldiwgNCksCisJCQlnc3BjYV9kZXYtPnVzYl9idWYsCisJCQlsZW4sCisJCQkmYWxlbiwKKwkJCTUwMCk7CS8qIHRpbWVvdXQgaW4gbWlsbGlzZWNvbmRzICovCisJaWYgKHJldCA8IDApCisJCVBERUJVRyhEX0VSUiwgInJlZyB3cml0ZSBbJTAyeF0gZXJyb3IgJWQiLAorCQkJZ3NwY2FfZGV2LT51c2JfYnVmWzBdLCByZXQpOworCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyB2b2lkIGJ1bGtfdyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCSAgIF9fdTE2ICpwY2gsCi0JCSAgIF9fdTE2IEFkZHJlc3MpCitzdGF0aWMgdm9pZCBtaV93KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJIHU4IGFkZHIsCisJCSB1OCB2YWx1ZSkKIHsKIAlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAweDFmOwogCWdzcGNhX2Rldi0+dXNiX2J1ZlsxXSA9IDA7CQkJLyogY29udHJvbCBieXRlICovCi0JZ3NwY2FfZGV2LT51c2JfYnVmWzJdID0gQWRkcmVzczsKLQlnc3BjYV9kZXYtPnVzYl9idWZbM10gPSAqcGNoID4+IDg7CQkvKiBoaWdoIGJ5dGUgKi8KLQlnc3BjYV9kZXYtPnVzYl9idWZbNF0gPSAqcGNoOwkJCS8qIGxvdyBieXRlICovCisJZ3NwY2FfZGV2LT51c2JfYnVmWzJdID0gYWRkcjsKKwlnc3BjYV9kZXYtPnVzYl9idWZbM10gPSB2YWx1ZTsKIAotCXJlZ193KGdzcGNhX2RldiwgQWRkcmVzcywgNSk7CisJcmVnX3coZ3NwY2FfZGV2LCA0KTsKIH0KIAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLwpAQCAtMTIxLDEwICsxNzUsMTQgQEAKIAlzdHJ1Y3QgY2FtICpjYW07CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDAxOwogCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKIAljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOwotCXNkLT5xaW5kZXggPSAxOwkJCS8qIHNldCB0aGUgcXVhbnRpemF0aW9uIHRhYmxlICovCisJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKKwlzZC0+Y29sb3JzID0gQ09MT1JfREVGOworCXNkLT5nYW1tYSA9IEdBTU1BX0RFRjsKKwlzZC0+c2hhcnBuZXNzID0gU0hBUlBORVNTX0RFRjsKKwlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfREVGOworCWdzcGNhX2Rldi0+bmJhbHQgPSA5OwkJLyogdXNlIHRoZSBhbHRzZXR0aW5nIDA4ICovCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTEzNiwyNCArMTk0LDIyIEBACiAKIHN0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogeworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgZXJyX2NvZGU7Ci0JX191OCAqZGF0YTsKLQlfX3UxNiAqTUlfYnVmOwotCWludCBoX3NpemUsIHZfc2l6ZTsKLQlpbnQgaW50cGlwZTsKKwl1OCAqZGF0YTsKKwlpbnQgaTsKIAotCVBERUJVRyhEX1NUUkVBTSwgImNhbWVyYSBzdGFydCwgaWZhY2UgJWQsIGFsdCA4IiwgZ3NwY2FfZGV2LT5pZmFjZSk7Ci0JZXJyX2NvZGUgPSB1c2Jfc2V0X2ludGVyZmFjZShnc3BjYV9kZXYtPmRldiwgZ3NwY2FfZGV2LT5pZmFjZSwgOCk7Ci0JaWYgKGVycl9jb2RlIDwgMCkgewotCQlQREVCVUcoRF9FUlJ8RF9TVFJFQU0sICJTZXQgcGFja2V0IHNpemU6IHNldCBpbnRlcmZhY2UgZXJyb3IiKTsKLQkJcmV0dXJuIGVycl9jb2RlOwotCX0KKwkvKiBjcmVhdGUgdGhlIEpQRUcgaGVhZGVyICovCisJc2QtPmpwZWdfaGRyID0ga21hbGxvYyhKUEVHX0hEUl9TWiwgR0ZQX0tFUk5FTCk7CisJanBlZ19kZWZpbmUoc2QtPmpwZWdfaGRyLCBnc3BjYV9kZXYtPmhlaWdodCwgZ3NwY2FfZGV2LT53aWR0aCwKKwkJCTB4MjEpOwkJLyogSlBFRyA0MjIgKi8KKwlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOwogCiAJZGF0YSA9IGdzcGNhX2Rldi0+dXNiX2J1ZjsKKwogCWRhdGFbMF0gPSAweDAxOwkJLyogYWRkcmVzcyAqLwogCWRhdGFbMV0gPSAweDAxOwotCi0JZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIGRhdGFbMF0sIDIpOworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCAyKTsKIAlpZiAoZXJyX2NvZGUgPCAwKQogCQlyZXR1cm4gZXJyX2NvZGU7CiAKQEAgLTE2MywzMCArMjE5LDI4IEBACiAJZGF0YVswXSA9IDB4MDA7CQkvKiBhZGRyZXNzICovCiAJZGF0YVsxXSA9IDB4MGMgfCAweDAxOwkvKiByZWcgMCAqLwogCWRhdGFbMl0gPSAweDAxOwkJLyogcmVnIDEgKi8KLQloX3NpemUgPSBnc3BjYV9kZXYtPndpZHRoOwotCXZfc2l6ZSA9IGdzcGNhX2Rldi0+aGVpZ2h0OwotCWRhdGFbM10gPSBoX3NpemUgLyA4OwkvKiBoX3NpemUgLCByZWcgMiAqLwotCWRhdGFbNF0gPSB2X3NpemUgLyA4OwkvKiB2X3NpemUgLCByZWcgMyAqLworCWRhdGFbM10gPSBnc3BjYV9kZXYtPndpZHRoIC8gODsJCS8qIGhfc2l6ZSAsIHJlZyAyICovCisJZGF0YVs0XSA9IGdzcGNhX2Rldi0+aGVpZ2h0IC8gODsJLyogdl9zaXplICwgcmVnIDMgKi8KIAlkYXRhWzVdID0gMHgzMDsJCS8qIHJlZyA0LCBNSSwgUEFTNTEwMSA6CiAJCQkJICoJMHgzMCBmb3IgMjRtaHogLCAweDI4IGZvciAxMm1oeiAqLwotCWRhdGFbNl0gPSA0OwkJLyogcmVnIDUsIEggc3RhcnQgKi8KLQlkYXRhWzddID0gMHhjMDsJCS8qIHJlZyA2LCBnYW1tYSAxLjUgKi8KLQlkYXRhWzhdID0gMzsJCS8qIHJlZyA3LCBWIHN0YXJ0ICovCisJZGF0YVs2XSA9IDB4MDI7CQkvKiByZWcgNSwgSCBzdGFydCAtIHdhcyAweDA0ICovCisJZGF0YVs3XSA9IHNkLT5nYW1tYSAqIDB4NDA7CS8qIHJlZyAweDA2OiBnYW1tYSAqLworCWRhdGFbOF0gPSAweDAxOwkJLyogcmVnIDcsIFYgc3RhcnQgLSB3YXMgMHgwMyAqLwogLyoJaWYgKGhfc2l6ZSA9PSAzMjAgKSAqLwogLyoJCWRhdGFbOV09IDB4NTY7CSAqIHJlZyA4LCAyNE1IeiwgMjoxIHNjYWxlIGRvd24gKi8KIC8qCWVsc2UgKi8KIAlkYXRhWzldID0gMHg1MjsJCS8qIHJlZyA4LCAyNE1Ieiwgbm8gc2NhbGUgZG93biAqLwotCWRhdGFbMTBdID0gMHg1ZDsJLyogcmVnIDksIEkyQyBkZXZpY2UgYWRkcmVzcwotCQkJCSAqCVtmb3IgUEFTNTEwMSAoMHg0MCldIFtmb3IgTUkgKDB4NWQpXSAqLworLypqZm06IGZyb20gd2luIHRyYWNlKi8KKwlkYXRhWzEwXSA9IDB4MTg7CiAKLQllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgZGF0YVswXSwgMTEpOworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCAxMSk7CiAJaWYgKGVycl9jb2RlIDwgMCkKIAkJcmV0dXJuIGVycl9jb2RlOwogCiAJZGF0YVswXSA9IDB4MjM7CQkvKiBhZGRyZXNzICovCiAJZGF0YVsxXSA9IDB4MDk7CQkvKiByZWcgMzUsIGFwcGVuZCBmcmFtZSBoZWFkZXIgKi8KIAotCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCBkYXRhWzBdLCAyKTsKKwllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgMik7CiAJaWYgKGVycl9jb2RlIDwgMCkKIAkJcmV0dXJuIGVycl9jb2RlOwogCkBAIC0xOTcsMTM3ICsyNTEsNTcgQEAKIC8qCWVsc2UgKi8KIAlkYXRhWzFdID0gNTA7CQkvKiA1MCByZWcgNjAsIHBjLWNhbSBmcmFtZSBzaXplCiAJCQkJICoJKHVuaXQ6IDRLQikgMjAwS0IgKi8KLQllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgZGF0YVswXSwgMik7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDIpOwogCWlmIChlcnJfY29kZSA8IDApCiAJCXJldHVybiBlcnJfY29kZTsKIAotCWlmICgwKSB7CQkJLyogZml4ZWQgZGFyay1nYWluICovCi0JCWRhdGFbMV0gPSAwOwkJLyogcmVnIDk0LCBZIEdhaW4gKDEuNzUpICovCi0JCWRhdGFbMl0gPSAwOwkJLyogcmVnIDk1LCBVViBHYWluICgxLjc1KSAqLwotCQlkYXRhWzNdID0gMHgzZjsJCS8qIHJlZyA5NiwgWSBHYWluL1VWIEdhaW4vZGlzYWJsZQotCQkJCQkgKglhdXRvIGRhcmstZ2FpbiAqLwotCQlkYXRhWzRdID0gMDsJCS8qIHJlZyA5Nywgc2V0IGZpeGVkIGRhcmsgbGV2ZWwgKi8KLQkJZGF0YVs1XSA9IDA7CQkvKiByZWcgOTgsIGRvbid0IGNhcmUgKi8KLQl9IGVsc2UgewkJCS8qIGF1dG8gZGFyay1nYWluICovCi0JCWRhdGFbMV0gPSAwOwkJLyogcmVnIDk0LCBZIEdhaW4gKGF1dG8pICovCi0JCWRhdGFbMl0gPSAwOwkJLyogcmVnIDk1LCBVViBHYWluICgxLjc1KSAqLwotCQlkYXRhWzNdID0gMHg3ODsJCS8qIHJlZyA5NiwgWSBHYWluL1VWIEdhaW4vZGlzYWJsZQotCQkJCQkgKglhdXRvIGRhcmstZ2FpbiAqLwotCQlzd2l0Y2ggKGdzcGNhX2Rldi0+d2lkdGgpIHsKLS8qCQljYXNlIDEyODA6ICovCi0vKgkJCWRhdGFbNF0gPSAxNTQ7Ci0JCQkJICogcmVnIDk3LCAlMyBzaGFkb3cgcG9pbnQgKHVuaXQ6IDI1NiBwaXhlbCkgKi8KLS8qCQkJZGF0YVs1XSA9IDUxOwotCQkJCSAqIHJlZyA5OCwgJTEgaGlnaGxpZ2h0IHBvaW50Ci0JCQkJICoJKHVpbnQ6IDI1NiBwaXhlbCkgKi8KLS8qCQkJYnJlYWs7ICovCi0JCWRlZmF1bHQ6Ci0vKgkJY2FzZSA2NDA6ICovCi0JCQlkYXRhWzRdID0gMzY7CS8qIHJlZyA5NywgJTMgc2hhZG93IHBvaW50Ci0JCQkJCSAqCSh1bml0OiAyNTYgcGl4ZWwpICovCi0JCQlkYXRhWzVdID0gMTI7CS8qIHJlZyA5OCwgJTEgaGlnaGxpZ2h0IHBvaW50Ci0JCQkJCSAqCSh1aW50OiAyNTYgcGl4ZWwpICovCi0JCQlicmVhazsKLQkJY2FzZSAzMjA6Ci0JCQlkYXRhWzRdID0gOTsJLyogcmVnIDk3LCAlMyBzaGFkb3cgcG9pbnQKLQkJCQkJICoJKHVuaXQ6IDI1NiBwaXhlbCkgKi8KLQkJCWRhdGFbNV0gPSAzOwkvKiByZWcgOTgsICUxIGhpZ2hsaWdodCBwb2ludAotCQkJCQkgKgkodWludDogMjU2IHBpeGVsKSAqLwotCQkJYnJlYWs7Ci0JCX0KLQl9CiAJLyogYXV0byBkYXJrLWdhaW4gKi8KIAlkYXRhWzBdID0gMHg1ZTsJCS8qIGFkZHJlc3MgKi8KKwlkYXRhWzFdID0gMDsJCS8qIHJlZyA5NCwgWSBHYWluIChhdXRvKSAqLworLypqZm06IGZyb20gd2luIHRyYWNlKi8KKwkJCQkvKiByZWcgMHg1Zi8weDYwIChMRSkgPSBzYXR1cmF0aW9uICovCisJCQkJLyogaCAoNjApOiB4eHh4IHgxMDAKKwkJCQkgKiBsICg1Zik6IHh4eHggeDAwMCAqLworCWRhdGFbMl0gPSBzZC0+Y29sb3JzIDw8IDM7CisJZGF0YVszXSA9ICgoc2QtPmNvbG9ycyA+PiAyKSAmIDB4ZjgpIHwgMHgwNDsKKwlkYXRhWzRdID0gc2QtPmJyaWdodG5lc3M7IC8qIHJlZyAweDYxID0gYnJpZ2h0bmVzcyAqLworCWRhdGFbNV0gPSAweDAwOwogCi0JZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIGRhdGFbMF0sIDYpOworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCA2KTsKIAlpZiAoZXJyX2NvZGUgPCAwKQogCQlyZXR1cm4gZXJyX2NvZGU7CiAKIAlkYXRhWzBdID0gMHg2NzsKLQlkYXRhWzFdID0gMHgxMzsJCS8qIHJlZyAxMDMsIGZpcnN0IHBpeGVsIEIsIGRpc2FibGUgc2hhcnBuZXNzICovCi0JZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIGRhdGFbMF0sIDIpOworLypqZm06IGZyb20gd2luIHRyYWNlKi8KKwlkYXRhWzFdID0gc2QtPnNoYXJwbmVzcyAqIDQgKyAzOworCWRhdGFbMl0gPSAweDE0OworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCAzKTsKIAlpZiAoZXJyX2NvZGUgPCAwKQogCQlyZXR1cm4gZXJyX2NvZGU7CiAKLQkvKgotCSAqIGluaXRpYWxpemUgdGhlIHZhbHVlIG9mIE1JIHNlbnNvci4uLgotCSAqLwotCU1JX2J1ZiA9IGt6YWxsb2MoQVRUUl9UT1RBTF9NSV9SRUcgKiBzaXplb2YgKk1JX2J1ZiwgR0ZQX0tFUk5FTCk7Ci0JTUlfYnVmW1JFR19IV19NSV8xXSA9IDB4MDAwYTsKLQlNSV9idWZbUkVHX0hXX01JXzJdID0gMHgwMDBjOwotCU1JX2J1ZltSRUdfSFdfTUlfM10gPSAweDA0MDU7Ci0JTUlfYnVmW1JFR19IV19NSV80XSA9IDB4MDUwNzsKLQkvKiBtaV9BdHRyX1JlZ19bUkVHX0hXX01JXzVdCSA9IDB4MDFmZjsvLzEzICovCi0JTUlfYnVmW1JFR19IV19NSV81XSA9IDB4MDAxMzsJLyogMTMgKi8KLQlNSV9idWZbUkVHX0hXX01JXzZdID0gMHgwMDFmOwkvKiB2ZXJ0aWNhbCBibGFua2luZyAqLwotCS8qIG1pX0F0dHJfUmVnX1tSRUdfSFdfTUlfNl0JID0gMHgwNDAwOyAgLy8gdmVydGljYWwgYmxhbmtpbmcgKi8KLQlNSV9idWZbUkVHX0hXX01JXzddID0gMHgwMDAyOwotCS8qIG1pX0F0dHJfUmVnX1tSRUdfSFdfTUlfOV0JID0gMHgwMTVmOyAqLwotCS8qIG1pX0F0dHJfUmVnX1tSRUdfSFdfTUlfOV0JID0gMHgwMzBmOyAqLwotCU1JX2J1ZltSRUdfSFdfTUlfOV0gPSAweDAzNzQ7Ci0JTUlfYnVmW1JFR19IV19NSV9CXSA9IDB4MDAwMDsKLQlNSV9idWZbUkVHX0hXX01JX0NdID0gMHgwMDAwOwotCU1JX2J1ZltSRUdfSFdfTUlfRF0gPSAweDAwMDA7Ci0JTUlfYnVmW1JFR19IV19NSV8xRV0gPSAweDgwMDA7Ci0vKiBtaV9BdHRyX1JlZ19bUkVHX0hXX01JXzIwXQkgID0gMHgxMTA0OyAqLwotCU1JX2J1ZltSRUdfSFdfTUlfMjBdID0gMHgxMTA0OwkvKiAweDExMWM7ICovCi0JTUlfYnVmW1JFR19IV19NSV8yQl0gPSAweDAwMDg7Ci0vKiBtaV9BdHRyX1JlZ19bUkVHX0hXX01JXzJDXQkgID0gMHgwMDBmOyAqLwotCU1JX2J1ZltSRUdfSFdfTUlfMkNdID0gMHgwMDFmOwkvKiBsaXRhIHN1Z2dlc3QgKi8KLQlNSV9idWZbUkVHX0hXX01JXzJEXSA9IDB4MDAwODsKLQlNSV9idWZbUkVHX0hXX01JXzJFXSA9IDB4MDAwODsKLQlNSV9idWZbUkVHX0hXX01JXzM1XSA9IDB4MDA1MTsKLQlNSV9idWZbUkVHX0hXX01JXzVGXSA9IDB4MDkwNDsJLyogZmFpbCB0byB3cml0ZSAqLwotCU1JX2J1ZltSRUdfSFdfTUlfNjBdID0gMHgwMDAwOwotCU1JX2J1ZltSRUdfSFdfTUlfNjFdID0gMHgwMDAwOwotCU1JX2J1ZltSRUdfSFdfTUlfNjJdID0gMHgwNDk4OwotCU1JX2J1ZltSRUdfSFdfTUlfNjNdID0gMHgwMDAwOwotCU1JX2J1ZltSRUdfSFdfTUlfNjRdID0gMHgwMDAwOwotCU1JX2J1ZltSRUdfSFdfTUlfRjFdID0gMHgwMDAxOwotCS8qIGNoYW5naW5nIHdoaWxlIHNldHRpbmcgdXAgdGhlIGRpZmZlcmVudCB2YWx1ZSBvZiBkeC9keSAqLworCWRhdGFbMF0gPSAweDY5OworCWRhdGFbMV0gPSAweDJmOworCWRhdGFbMl0gPSAweDI4OworCWRhdGFbM10gPSAweDQyOworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCA0KTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CiAKLQlpZiAoZ3NwY2FfZGV2LT53aWR0aCAhPSAxMjgwKSB7Ci0JCU1JX2J1ZlsweDAxXSA9IDB4MDEwYTsKLQkJTUlfYnVmWzB4MDJdID0gMHgwMTRjOwotCQlNSV9idWZbMHgwM10gPSAweDAxZTU7Ci0JCU1JX2J1ZlsweDA0XSA9IDB4MDI4NzsKLQl9Ci0JTUlfYnVmWzB4MjBdID0gMHgxMTA0OworCWRhdGFbMF0gPSAweDYzOworCWRhdGFbMV0gPSAweDA3OworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCAyKTsKKy8qamZtOiB3aW4gdHJhY2UgLSBtYW55IHdyaXRlcyBoZXJlIHRvIHJlZyAweDY0Ki8KKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CiAKLQlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAxLCAxKTsKLQlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAyLCAyKTsKLQlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAzLCAzKTsKLQlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyA0LCA0KTsKLQlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyA1LCA1KTsKLQlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyA2LCA2KTsKLQlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyA3LCA3KTsKLQlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyA5LCA5KTsKLQlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDBiLCAweDBiKTsKLQlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDBjLCAweDBjKTsKLQlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDBkLCAweDBkKTsKLQlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDFlLCAweDFlKTsKLQlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDIwLCAweDIwKTsKLQlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDJiLCAweDJiKTsKLQlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDJjLCAweDJjKTsKLQlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDJkLCAweDJkKTsKLQlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDJlLCAweDJlKTsKLQlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDM1LCAweDM1KTsKLQlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDVmLCAweDVmKTsKLQlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDYwLCAweDYwKTsKLQlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDYxLCAweDYxKTsKLQlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDYyLCAweDYyKTsKLQlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDYzLCAweDYzKTsKLQlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweDY0LCAweDY0KTsKLQlidWxrX3coZ3NwY2FfZGV2LCBNSV9idWYgKyAweGYxLCAweGYxKTsKLQlrZnJlZShNSV9idWYpOwotCi0JaW50cGlwZSA9IHVzYl9zbmRpbnRwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKTsKLQllcnJfY29kZSA9IHVzYl9jbGVhcl9oYWx0KGdzcGNhX2Rldi0+ZGV2LCBpbnRwaXBlKTsKKwkvKiBpbml0aWFsaXplIHRoZSBNSSBzZW5zb3IgKi8KKwlmb3IgKGkgPSAwOyBpIDwgc2l6ZW9mIG1pX2RhdGE7IGkrKykKKwkJbWlfdyhnc3BjYV9kZXYsIGkgKyAxLCBtaV9kYXRhW2ldKTsKIAogCWRhdGFbMF0gPSAweDAwOwogCWRhdGFbMV0gPSAweDRkOwkJLyogSVNPQyB0cmFuc2ZlcmluZyBlbmFibGUuLi4gKi8KLQlyZWdfdyhnc3BjYV9kZXYsIGRhdGFbMF0sIDIpOwotCXJldHVybiBlcnJfY29kZTsKKwlyZWdfdyhnc3BjYV9kZXYsIDIpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCkBAIC0zMzYsMTEgKzMxMCwxOCBAQAogCiAJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gMTsKIAlnc3BjYV9kZXYtPnVzYl9idWZbMV0gPSAwOwotCXJlc3VsdCA9IHJlZ193KGdzcGNhX2RldiwgZ3NwY2FfZGV2LT51c2JfYnVmWzBdLCAyKTsKKwlyZXN1bHQgPSByZWdfdyhnc3BjYV9kZXYsIDIpOwogCWlmIChyZXN1bHQgPCAwKQogCQlQREVCVUcoRF9FUlIsICJDYW1lcmEgU3RvcCBmYWlsZWQiKTsKIH0KIAorc3RhdGljIHZvaWQgc2Rfc3RvcDAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWtmcmVlKHNkLT5qcGVnX2hkcik7Cit9CisKIHN0YXRpYyB2b2lkIHNkX3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWUsCS8qIHRhcmdldCAqLwogCQkJX191OCAqZGF0YSwJCQkvKiBpc29jIHBhY2tldCAqLwpAQCAtMzYzLDE2ICszNDQsMTYgQEAKIAkJCSAgICB8fCBkYXRhWzUgKyBwXSA9PSAweDY1CiAJCQkgICAgfHwgZGF0YVs1ICsgcF0gPT0gMHg2NgogCQkJICAgIHx8IGRhdGFbNSArIHBdID09IDB4NjcpIHsKLQkJCQlQREVCVUcoRF9QQUNLLCAic29mIG9mZnNldDogJWQgbGVuZzogJWQiLAorCQkJCVBERUJVRyhEX1BBQ0ssICJzb2Ygb2Zmc2V0OiAlZCBsZW46ICVkIiwKIAkJCQkJcCwgbGVuKTsKIAkJCQlmcmFtZSA9IGdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIExBU1RfUEFDS0VULAotCQkJCQkJCWZyYW1lLCBkYXRhLCAwKTsKKwkJCQkJCQlmcmFtZSwgZGF0YSwgcCk7CiAKIAkJCQkvKiBwdXQgdGhlIEpQRUcgaGVhZGVyICovCi0JCQkJanBlZ19wdXRfaGVhZGVyKGdzcGNhX2RldiwgZnJhbWUsCi0JCQkJCQlzZC0+cWluZGV4LCAweDIxKTsKLQkJCQlkYXRhICs9IDE2OwotCQkJCWxlbiAtPSAxNjsKKwkJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsIGZyYW1lLAorCQkJCQlzZC0+anBlZ19oZHIsIEpQRUdfSERSX1NaKTsKKwkJCQlkYXRhICs9IHAgKyAxNjsKKwkJCQlsZW4gLT0gcCArIDE2OwogCQkJCWJyZWFrOwogCQkJfQogCQl9CkBAIC0zODAsNiArMzYxLDEyMSBAQAogCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZnJhbWUsIGRhdGEsIGxlbik7CiB9CiAKK3N0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzZC0+YnJpZ2h0bmVzcyA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gMHg2MTsKKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gdmFsOworCQlyZWdfdyhnc3BjYV9kZXYsIDIpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwkqdmFsID0gc2QtPmJyaWdodG5lc3M7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5jb2xvcnMgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7CisKKwkJLyogc2VlIHNkX3N0YXJ0ICovCisJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IDB4NWY7CisJCWdzcGNhX2Rldi0+dXNiX2J1ZlsxXSA9IHNkLT5jb2xvcnMgPDwgMzsKKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzJdID0gKChzZC0+Y29sb3JzID4+IDIpICYgMHhmOCkgfCAweDA0OworCQlyZWdfdyhnc3BjYV9kZXYsIDMpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+Y29sb3JzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldGdhbW1hKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5nYW1tYSA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gMHgwNjsKKwkJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gdmFsICogMHg0MDsKKwkJcmVnX3coZ3NwY2FfZGV2LCAyKTsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Z2FtbWEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+Z2FtbWE7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc2V0c2hhcnBuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5zaGFycG5lc3MgPSB2YWw7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7CisJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IDB4Njc7CisJCWdzcGNhX2Rldi0+dXNiX2J1ZlsxXSA9IHZhbCAqIDQgKyAzOworCQlyZWdfdyhnc3BjYV9kZXYsIDIpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRzaGFycG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+c2hhcnBuZXNzOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX3NldF9qY29tcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKmpjb21wKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChqY29tcC0+cXVhbGl0eSA8IFFVQUxJVFlfTUlOKQorCQlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfTUlOOworCWVsc2UgaWYgKGpjb21wLT5xdWFsaXR5ID4gUVVBTElUWV9NQVgpCisJCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9NQVg7CisJZWxzZQorCQlzZC0+cXVhbGl0eSA9IGpjb21wLT5xdWFsaXR5OworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJanBlZ19zZXRfcXVhbChzZC0+anBlZ19oZHIsIHNkLT5xdWFsaXR5KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRfamNvbXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpqY29tcCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwltZW1zZXQoamNvbXAsIDAsIHNpemVvZiAqamNvbXApOworCWpjb21wLT5xdWFsaXR5ID0gc2QtPnF1YWxpdHk7CisJamNvbXAtPmpwZWdfbWFya2VycyA9IFY0TDJfSlBFR19NQVJLRVJfREhUCisJCQl8IFY0TDJfSlBFR19NQVJLRVJfRFFUOworCXJldHVybiAwOworfQorCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKIAkubmFtZSA9IE1PRFVMRV9OQU1FLApAQCAtMzg5LDcgKzQ4NSwxMCBAQAogCS5pbml0ID0gc2RfaW5pdCwKIAkuc3RhcnQgPSBzZF9zdGFydCwKIAkuc3RvcE4gPSBzZF9zdG9wTiwKKwkuc3RvcDAgPSBzZF9zdG9wMCwKIAkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKKwkuZ2V0X2pjb21wID0gc2RfZ2V0X2pjb21wLAorCS5zZXRfamNvbXAgPSBzZF9zZXRfamNvbXAsCiB9OwogCiAvKiAtLSBtb2R1bGUgaW5pdGlhbGlzYXRpb24gLS0gKi8KQEAgLTQyMSw4ICs1MjAsMTEgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tcjk3MzEwYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9tcjk3MzEwYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjJhOTAxYTQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL21yOTczMTBhLmMKQEAgLTAsMCArMSwzNjIgQEAKKy8qCisgKiBNYXJzIE1SOTczMTBBIGxpYnJhcnkKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgS3lsZSBHdWlubiA8ZWx5azAzQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yCisgKiBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuIFNlZSB0aGUKKyAqIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKKyAqIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAwMjExMS0xMzA3IFVTQQorICovCisKKyNkZWZpbmUgTU9EVUxFX05BTUUgIm1yOTczMTBhIgorCisjaW5jbHVkZSAiZ3NwY2EuaCIKKworTU9EVUxFX0FVVEhPUigiS3lsZSBHdWlubiA8ZWx5azAzQGdtYWlsLmNvbT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiR1NQQ0EvTWFycy1TZW1pIE1SOTczMTBBIFVTQiBDYW1lcmEgRHJpdmVyIik7CitNT0RVTEVfTElDRU5TRSgiR1BMIik7CisKKy8qIHNwZWNpZmljIHdlYmNhbSBkZXNjcmlwdG9yICovCitzdHJ1Y3Qgc2QgeworCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OyAgLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworCXU4IHNvZl9yZWFkOworfTsKKworLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLworc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCB2Z2FfbW9kZVtdID0geworCXsxNjAsIDEyMCwgVjRMMl9QSVhfRk1UX01SOTczMTBBLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAxNjAsCisJCS5zaXplaW1hZ2UgPSAxNjAgKiAxMjAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gNH0sCisJezE3NiwgMTQ0LCBWNEwyX1BJWF9GTVRfTVI5NzMxMEEsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDE3NiwKKwkJLnNpemVpbWFnZSA9IDE3NiAqIDE0NCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAzfSwKKwl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9NUjk3MzEwQSwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAorCQkuc2l6ZWltYWdlID0gMzIwICogMjQwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDJ9LAorCXszNTIsIDI4OCwgVjRMMl9QSVhfRk1UX01SOTczMTBBLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzNTIsCisJCS5zaXplaW1hZ2UgPSAzNTIgKiAyODgsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMX0sCisJezY0MCwgNDgwLCBWNEwyX1BJWF9GTVRfTVI5NzMxMEEsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDY0MCwKKwkJLnNpemVpbWFnZSA9IDY0MCAqIDQ4MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAwfSwKK307CisKKy8qIHRoZSBieXRlcyB0byB3cml0ZSBhcmUgaW4gZ3NwY2FfZGV2LT51c2JfYnVmICovCitzdGF0aWMgaW50IHJlZ193KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgaW50IGxlbikKK3sKKwlpbnQgcmM7CisKKwlyYyA9IHVzYl9idWxrX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCSAgdXNiX3NuZGJ1bGtwaXBlKGdzcGNhX2Rldi0+ZGV2LCA0KSwKKwkJCSAgZ3NwY2FfZGV2LT51c2JfYnVmLCBsZW4sIE5VTEwsIDUwMCk7CisJaWYgKHJjIDwgMCkKKwkJUERFQlVHKERfRVJSLCAicmVnIHdyaXRlIFslMDJ4XSBlcnJvciAlZCIsCisJCSAgICAgICBnc3BjYV9kZXYtPnVzYl9idWZbMF0sIHJjKTsKKwlyZXR1cm4gcmM7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGNhbSAqY2FtOworCisJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOworCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKKwljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOworCXJldHVybiAwOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlfX3U4ICpkYXRhID0gZ3NwY2FfZGV2LT51c2JfYnVmOworCWludCBlcnJfY29kZTsKKworCXNkLT5zb2ZfcmVhZCA9IDA7CisKKwkvKiBOb3RlOiAgcmVnaXN0ZXIgZGVzY3JpcHRpb25zIGd1ZXNzZWQgZnJvbSBNUjk3MTEzQSBkcml2ZXIgKi8KKworCWRhdGFbMF0gPSAweDAxOworCWRhdGFbMV0gPSAweDAxOworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCAyKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwlkYXRhWzBdID0gMHgwMDsKKwlkYXRhWzFdID0gMHgwZDsKKwlkYXRhWzJdID0gMHgwMTsKKwlkYXRhWzVdID0gMHgyYjsKKwlkYXRhWzddID0gMHgwMDsKKwlkYXRhWzldID0gMHg1MDsgIC8qIHJlZyA4LCBubyBzY2FsZSBkb3duICovCisJZGF0YVsxMF0gPSAweGMwOworCisJc3dpdGNoIChnc3BjYV9kZXYtPndpZHRoKSB7CisJY2FzZSAxNjA6CisJCWRhdGFbOV0gfD0gMHgwYzsgIC8qIHJlZyA4LCA0OjEgc2NhbGUgZG93biAqLworCQkvKiBmYWxsIHRocnUgKi8KKwljYXNlIDMyMDoKKwkJZGF0YVs5XSB8PSAweDA0OyAgLyogcmVnIDgsIDI6MSBzY2FsZSBkb3duICovCisJCS8qIGZhbGwgdGhydSAqLworCWNhc2UgNjQwOgorCWRlZmF1bHQ6CisJCWRhdGFbM10gPSAweDUwOyAgLyogcmVnIDIsIEggc2l6ZSAqLworCQlkYXRhWzRdID0gMHg3ODsgIC8qIHJlZyAzLCBWIHNpemUgKi8KKwkJZGF0YVs2XSA9IDB4MDQ7ICAvKiByZWcgNSwgSCBzdGFydCAqLworCQlkYXRhWzhdID0gMHgwMzsgIC8qIHJlZyA3LCBWIHN0YXJ0ICovCisJCWJyZWFrOworCisJY2FzZSAxNzY6CisJCWRhdGFbOV0gfD0gMHgwNDsgIC8qIHJlZyA4LCAyOjEgc2NhbGUgZG93biAqLworCQkvKiBmYWxsIHRocnUgKi8KKwljYXNlIDM1MjoKKwkJZGF0YVszXSA9IDB4MmM7ICAvKiByZWcgMiwgSCBzaXplICovCisJCWRhdGFbNF0gPSAweDQ4OyAgLyogcmVnIDMsIFYgc2l6ZSAqLworCQlkYXRhWzZdID0gMHg5NDsgIC8qIHJlZyA1LCBIIHN0YXJ0ICovCisJCWRhdGFbOF0gPSAweDYzOyAgLyogcmVnIDcsIFYgc3RhcnQgKi8KKwkJYnJlYWs7CisJfQorCisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDExKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwlkYXRhWzBdID0gMHgwYTsKKwlkYXRhWzFdID0gMHg4MDsKKwllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgMik7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJZGF0YVswXSA9IDB4MTQ7CisJZGF0YVsxXSA9IDB4MGE7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDIpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCWRhdGFbMF0gPSAweDFiOworCWRhdGFbMV0gPSAweDAwOworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCAyKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwlkYXRhWzBdID0gMHgxNTsKKwlkYXRhWzFdID0gMHgxNjsKKwllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgMik7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJZGF0YVswXSA9IDB4MTY7CisJZGF0YVsxXSA9IDB4MTA7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDIpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCWRhdGFbMF0gPSAweDE3OworCWRhdGFbMV0gPSAweDNhOworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCAyKTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwlkYXRhWzBdID0gMHgxODsKKwlkYXRhWzFdID0gMHg2ODsKKwllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgMik7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJZGF0YVswXSA9IDB4MWY7CisJZGF0YVsxXSA9IDB4MDA7CisJZGF0YVsyXSA9IDB4MDI7CisJZGF0YVszXSA9IDB4MDY7CisJZGF0YVs0XSA9IDB4NTk7CisJZGF0YVs1XSA9IDB4MGM7CisJZGF0YVs2XSA9IDB4MTY7CisJZGF0YVs3XSA9IDB4MDA7CisJZGF0YVs4XSA9IDB4MDc7CisJZGF0YVs5XSA9IDB4MDA7CisJZGF0YVsxMF0gPSAweDAxOworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCAxMSk7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJZGF0YVswXSA9IDB4MWY7CisJZGF0YVsxXSA9IDB4MDQ7CisJZGF0YVsyXSA9IDB4MTE7CisJZGF0YVszXSA9IDB4MDE7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDQpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCWRhdGFbMF0gPSAweDFmOworCWRhdGFbMV0gPSAweDAwOworCWRhdGFbMl0gPSAweDBhOworCWRhdGFbM10gPSAweDAwOworCWRhdGFbNF0gPSAweDAxOworCWRhdGFbNV0gPSAweDAwOworCWRhdGFbNl0gPSAweDAwOworCWRhdGFbN10gPSAweDAxOworCWRhdGFbOF0gPSAweDAwOworCWRhdGFbOV0gPSAweDBhOworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCAxMCk7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJZGF0YVswXSA9IDB4MWY7CisJZGF0YVsxXSA9IDB4MDQ7CisJZGF0YVsyXSA9IDB4MTE7CisJZGF0YVszXSA9IDB4MDE7CisJZXJyX2NvZGUgPSByZWdfdyhnc3BjYV9kZXYsIDQpOworCWlmIChlcnJfY29kZSA8IDApCisJCXJldHVybiBlcnJfY29kZTsKKworCWRhdGFbMF0gPSAweDFmOworCWRhdGFbMV0gPSAweDAwOworCWRhdGFbMl0gPSAweDEyOworCWRhdGFbM10gPSAweDAwOworCWRhdGFbNF0gPSAweDYzOworCWRhdGFbNV0gPSAweDAwOworCWRhdGFbNl0gPSAweDcwOworCWRhdGFbN10gPSAweDAwOworCWRhdGFbOF0gPSAweDAwOworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCA5KTsKKwlpZiAoZXJyX2NvZGUgPCAwKQorCQlyZXR1cm4gZXJyX2NvZGU7CisKKwlkYXRhWzBdID0gMHgxZjsKKwlkYXRhWzFdID0gMHgwNDsKKwlkYXRhWzJdID0gMHgxMTsKKwlkYXRhWzNdID0gMHgwMTsKKwllcnJfY29kZSA9IHJlZ193KGdzcGNhX2RldiwgNCk7CisJaWYgKGVycl9jb2RlIDwgMCkKKwkJcmV0dXJuIGVycl9jb2RlOworCisJZGF0YVswXSA9IDB4MDA7CisJZGF0YVsxXSA9IDB4NGQ7ICAvKiBJU09DIHRyYW5zZmVyaW5nIGVuYWJsZS4uLiAqLworCWVycl9jb2RlID0gcmVnX3coZ3NwY2FfZGV2LCAyKTsKKwlyZXR1cm4gZXJyX2NvZGU7Cit9CisKK3N0YXRpYyB2b2lkIHNkX3N0b3BOKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlpbnQgcmVzdWx0OworCisJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gMTsKKwlnc3BjYV9kZXYtPnVzYl9idWZbMV0gPSAwOworCXJlc3VsdCA9IHJlZ193KGdzcGNhX2RldiwgMik7CisJaWYgKHJlc3VsdCA8IDApCisJCVBERUJVRyhEX0VSUiwgIkNhbWVyYSBTdG9wIGZhaWxlZCIpOworfQorCisvKiBJbmNsdWRlIHBhYyBjb21tb24gc29mIGRldGVjdGlvbiBmdW5jdGlvbnMgKi8KKyNpbmNsdWRlICJwYWNfY29tbW9uLmgiCisKK3N0YXRpYyB2b2lkIHNkX3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWUsICAgIC8qIHRhcmdldCAqLworCQkJX191OCAqZGF0YSwgICAgICAgICAgICAgICAgICAgLyogaXNvYyBwYWNrZXQgKi8KKwkJCWludCBsZW4pICAgICAgICAgICAgICAgICAgICAgIC8qIGlzbyBwYWNrZXQgbGVuZ3RoICovCit7CisJdW5zaWduZWQgY2hhciAqc29mOworCisJc29mID0gcGFjX2ZpbmRfc29mKGdzcGNhX2RldiwgZGF0YSwgbGVuKTsKKwlpZiAoc29mKSB7CisJCWludCBuOworCisJCS8qIGZpbmlzaCBkZWNvZGluZyBjdXJyZW50IGZyYW1lICovCisJCW4gPSBzb2YgLSBkYXRhOworCQlpZiAobiA+IHNpemVvZiBwYWNfc29mX21hcmtlcikKKwkJCW4gLT0gc2l6ZW9mIHBhY19zb2ZfbWFya2VyOworCQllbHNlCisJCQluID0gMDsKKwkJZnJhbWUgPSBnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsCisJCQkJCWRhdGEsIG4pOworCQkvKiBTdGFydCBuZXh0IGZyYW1lLiAqLworCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsIGZyYW1lLAorCQkJcGFjX3NvZl9tYXJrZXIsIHNpemVvZiBwYWNfc29mX21hcmtlcik7CisJCWxlbiAtPSBzb2YgLSBkYXRhOworCQlkYXRhID0gc29mOworCX0KKwlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLCBkYXRhLCBsZW4pOworfQorCisvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKKwkubmFtZSA9IE1PRFVMRV9OQU1FLAorCS5jdHJscyA9IHNkX2N0cmxzLAorCS5uY3RybHMgPSBBUlJBWV9TSVpFKHNkX2N0cmxzKSwKKwkuY29uZmlnID0gc2RfY29uZmlnLAorCS5pbml0ID0gc2RfaW5pdCwKKwkuc3RhcnQgPSBzZF9zdGFydCwKKwkuc3RvcE4gPSBzZF9zdG9wTiwKKwkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKK307CisKKy8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLworc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgwOGNhLCAweDAxMTEpfSwKKwl7fQorfTsKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfdGFibGUpOworCisvKiAtLSBkZXZpY2UgY29ubmVjdCAtLSAqLworc3RhdGljIGludCBzZF9wcm9iZShzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZiwKKwkJICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLCAmc2RfZGVzYywgc2l6ZW9mKHN0cnVjdCBzZCksCisJCQkgICAgICAgVEhJU19NT0RVTEUpOworfQorCitzdGF0aWMgc3RydWN0IHVzYl9kcml2ZXIgc2RfZHJpdmVyID0geworCS5uYW1lID0gTU9EVUxFX05BTUUsCisJLmlkX3RhYmxlID0gZGV2aWNlX3RhYmxlLAorCS5wcm9iZSA9IHNkX3Byb2JlLAorCS5kaXNjb25uZWN0ID0gZ3NwY2FfZGlzY29ubmVjdCwKKyNpZmRlZiBDT05GSUdfUE0KKwkuc3VzcGVuZCA9IGdzcGNhX3N1c3BlbmQsCisJLnJlc3VtZSA9IGdzcGNhX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLworc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKK3sKKwlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKKwkJcmV0dXJuIC0xOworCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOworCXJldHVybiAwOworfQorc3RhdGljIHZvaWQgX19leGl0IHNkX21vZF9leGl0KHZvaWQpCit7CisJdXNiX2RlcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJUERFQlVHKERfUFJPQkUsICJkZXJlZ2lzdGVyZWQiKTsKK30KKworbW9kdWxlX2luaXQoc2RfbW9kX2luaXQpOworbW9kdWxlX2V4aXQoc2RfbW9kX2V4aXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUxOS5jCmluZGV4IGVlMjMyOTUuLjFmZmYzN2IgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MTkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTE5LmMKQEAgLTEzNjAsNyArMTM2MCw2IEBACiAJfQogCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwotCWNhbS0+ZXBhZGRyID0gT1Y1MTFfRU5EUE9JTlRfQUREUkVTUzsKIAlpZiAoIXNkLT5zaWYpIHsKIAkJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOwogCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOwpAQCAtMjE3Nyw4ICsyMTc2LDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTM0LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL292NTM0LmMKaW5kZXggM2JmMTVlNC4uMTllMGJjNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9vdjUzNC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evb3Y1MzQuYwpAQCAtMSw3ICsxLDggQEAKIC8qCi0gKiBvdjUzNC9vdjc3MnggZ3NwY2EgZHJpdmVyCisgKiBvdjUzNCBnc3BjYSBkcml2ZXIKICAqIENvcHlyaWdodCAoQykgMjAwOCBBbnRvbmlvIE9zcGl0ZSA8b3NwaXRlQHN0dWRlbnRpLnVuaW5hLml0PgogICogQ29weXJpZ2h0IChDKSAyMDA4IEppbSBQYXJpcyA8amltQGp0YW4uY29tPgorICogQ29weXJpZ2h0IChDKSAyMDA5IEplYW4tRnJhbmNvaXMgTW9pbmUgaHR0cDovL21vaW5lamYuZnJlZS5mcgogICoKICAqIEJhc2VkIG9uIGEgcHJvdG90eXBlIHdyaXR0ZW4gYnkgTWFyayBGZXJyZWxsIDxtYWpvcnRyaXBzQGdtYWlsLmNvbT4KICAqIFVTQiBwcm90b2NvbCByZXZlcnNlIGVuZ2luZWVyZWQgYnkgSmltIFBhcmlzIDxqaW1AanRhbi5jb20+CkBAIC0yNiw3ICsyNyw3IEBACiAKICNpbmNsdWRlICJnc3BjYS5oIgogCi0jZGVmaW5lIE9WNTM0X1JFR19BRERSRVNTCTB4ZjEJLyogPyAqLworI2RlZmluZSBPVjUzNF9SRUdfQUREUkVTUwkweGYxCS8qIHNlbnNvciBhZGRyZXNzICovCiAjZGVmaW5lIE9WNTM0X1JFR19TVUJBRERSCTB4ZjIKICNkZWZpbmUgT1Y1MzRfUkVHX1dSSVRFCQkweGYzCiAjZGVmaW5lIE9WNTM0X1JFR19SRUFECQkweGY0CkBAIC00Niw5ICs0NywxMyBAQAogLyogc3BlY2lmaWMgd2ViY2FtIGRlc2NyaXB0b3IgKi8KIHN0cnVjdCBzZCB7CiAJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CS8qICEhIG11c3QgYmUgdGhlIGZpcnN0IGl0ZW0gKi8KLQlfX3UzMiBsYXN0X2ZpZDsKIAlfX3UzMiBsYXN0X3B0czsKLQlpbnQgZnJhbWVfcmF0ZTsKKwl1MTYgbGFzdF9maWQ7CisJdTggZnJhbWVfcmF0ZTsKKworCXU4IHNlbnNvcjsKKyNkZWZpbmUgU0VOU09SX09WNzcyWCAwCisjZGVmaW5lIFNFTlNPUl9PVjk2NVggMQogfTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwpAQCAtNjMsMTE0ICs2OCw3IEBACiAJIC5wcml2ID0gMH0sCiB9OwogCi1zdGF0aWMgdm9pZCBvdjUzNF9yZWdfd3JpdGUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgcmVnLCB1OCB2YWwpCi17Ci0Jc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBnc3BjYV9kZXYtPmRldjsKLQlpbnQgcmV0OwotCi0JUERFQlVHKERfVVNCTywgInJlZz0weCUwNHgsIHZhbD0wJTAyeCIsIHJlZywgdmFsKTsKLQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSB2YWw7Ci0JcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCi0JCQkgICAgICB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCi0JCQkgICAgICAweDEsCi0JCQkgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCi0JCQkgICAgICAweDAsIHJlZywgZ3NwY2FfZGV2LT51c2JfYnVmLCAxLCBDVFJMX1RJTUVPVVQpOwotCWlmIChyZXQgPCAwKQotCQlQREVCVUcoRF9FUlIsICJ3cml0ZSBmYWlsZWQiKTsKLX0KLQotc3RhdGljIHU4IG92NTM0X3JlZ19yZWFkKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgdTE2IHJlZykKLXsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGdzcGNhX2Rldi0+ZGV2OwotCWludCByZXQ7Ci0KLQlyZXQgPSB1c2JfY29udHJvbF9tc2codWRldiwKLQkJCSAgICAgIHVzYl9yY3ZjdHJscGlwZSh1ZGV2LCAwKSwKLQkJCSAgICAgIDB4MSwKLQkJCSAgICAgIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAotCQkJICAgICAgMHgwLCByZWcsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwgQ1RSTF9USU1FT1VUKTsKLQlQREVCVUcoRF9VU0JJLCAicmVnPTB4JTA0eCwgZGF0YT0weCUwMngiLCByZWcsIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSk7Ci0JaWYgKHJldCA8IDApCi0JCVBERUJVRyhEX0VSUiwgInJlYWQgZmFpbGVkIik7Ci0JcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKLX0KLQotLyogVHdvIGJpdHMgY29udHJvbCBMRUQ6IDB4MjEgYml0IDcgYW5kIDB4MjMgYml0IDcuCi0gKiAoZGlyZWN0aW9uIGFuZCBvdXRwdXQpPyAqLwotc3RhdGljIHZvaWQgb3Y1MzRfc2V0X2xlZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIGludCBzdGF0dXMpCi17Ci0JdTggZGF0YTsKLQotCVBERUJVRyhEX0NPTkYsICJsZWQgc3RhdHVzOiAlZCIsIHN0YXR1cyk7Ci0KLQlkYXRhID0gb3Y1MzRfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDIxKTsKLQlkYXRhIHw9IDB4ODA7Ci0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgyMSwgZGF0YSk7Ci0KLQlkYXRhID0gb3Y1MzRfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDIzKTsKLQlpZiAoc3RhdHVzKQotCQlkYXRhIHw9IDB4ODA7Ci0JZWxzZQotCQlkYXRhICY9IH4oMHg4MCk7Ci0KLQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweDIzLCBkYXRhKTsKLX0KLQotc3RhdGljIGludCBzY2NiX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0JdTggZGF0YTsKLQlpbnQgaTsKLQotCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKLQkJZGF0YSA9IG92NTM0X3JlZ19yZWFkKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1NUQVRVUyk7Ci0KLQkJc3dpdGNoIChkYXRhKSB7Ci0JCWNhc2UgMHgwMDoKLQkJCXJldHVybiAxOwotCQljYXNlIDB4MDQ6Ci0JCQlyZXR1cm4gMDsKLQkJY2FzZSAweDAzOgotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlQREVCVUcoRF9FUlIsICJzY2NiIHN0YXR1cyAweCUwMngsIGF0dGVtcHQgJWQvNSIsCi0JCQkgICAgICAgZGF0YSwgaSArIDEpOwotCQl9Ci0JfQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgdm9pZCBzY2NiX3JlZ193cml0ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiByZWcsIHU4IHZhbCkKLXsKLQlQREVCVUcoRF9VU0JPLCAicmVnOiAweCUwNHgsIHZhbDogMHglMDJ4IiwgcmVnLCB2YWwpOwotCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIE9WNTM0X1JFR19TVUJBRERSLCByZWcpOwotCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIE9WNTM0X1JFR19XUklURSwgdmFsKTsKLQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCBPVjUzNF9SRUdfT1BFUkFUSU9OLCBPVjUzNF9PUF9XUklURV8zKTsKLQotCWlmICghc2NjYl9jaGVja19zdGF0dXMoZ3NwY2FfZGV2KSkKLQkJUERFQlVHKERfRVJSLCAic2NjYl9yZWdfd3JpdGUgZmFpbGVkIik7Ci19Ci0KLSNpZmRlZiBHU1BDQV9ERUJVRwotc3RhdGljIHU4IHNjY2JfcmVnX3JlYWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgcmVnKQotewotCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIE9WNTM0X1JFR19TVUJBRERSLCByZWcpOwotCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIE9WNTM0X1JFR19PUEVSQVRJT04sIE9WNTM0X09QX1dSSVRFXzIpOwotCWlmICghc2NjYl9jaGVja19zdGF0dXMoZ3NwY2FfZGV2KSkKLQkJUERFQlVHKERfRVJSLCAic2NjYl9yZWdfcmVhZCBmYWlsZWQgMSIpOwotCi0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX09QRVJBVElPTiwgT1Y1MzRfT1BfUkVBRF8yKTsKLQlpZiAoIXNjY2JfY2hlY2tfc3RhdHVzKGdzcGNhX2RldikpCi0JCVBERUJVRyhEX0VSUiwgInNjY2JfcmVnX3JlYWQgZmFpbGVkIDIiKTsKLQotCXJldHVybiBvdjUzNF9yZWdfcmVhZChnc3BjYV9kZXYsIE9WNTM0X1JFR19SRUFEKTsKLX0KLSNlbmRpZgotCi1zdGF0aWMgY29uc3QgX191OCBvdjUzNF9yZWdfaW5pdGRhdGFbXVsyXSA9IHsKLQl7IDB4ZTcsIDB4M2EgfSwKLQotCXsgT1Y1MzRfUkVHX0FERFJFU1MsIDB4NDIgfSwgLyogc2VsZWN0IE9WNzcyeCBzZW5zb3IgKi8KLQorc3RhdGljIGNvbnN0IHU4IGJyaWRnZV9pbml0X292NzIyeFtdWzJdID0gewogCXsgMHhjMiwgMHgwYyB9LAogCXsgMHg4OCwgMHhmOCB9LAogCXsgMHhjMywgMHg2OSB9LApAQCAtMjI4LDcgKzEyNiw3IEBACiAJeyAweGMyLCAweDBjIH0sCiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBvdjc3MnhfcmVnX2luaXRkYXRhW11bMl0gPSB7CitzdGF0aWMgY29uc3QgdTggc2Vuc29yX2luaXRfb3Y3MjJ4W11bMl0gPSB7CiAJeyAweDEyLCAweDgwIH0sCiAJeyAweDExLCAweDAxIH0sCiAKQEAgLTMxMSw2ICsyMDksNDU2IEBACiAJeyAweDBjLCAweGQwIH0KIH07CiAKK3N0YXRpYyBjb25zdCB1OCBicmlkZ2VfaW5pdF9vdjk2NXhbXVsyXSA9IHsKKwl7MHg4OCwgMHhmOH0sCisJezB4ODksIDB4ZmZ9LAorCXsweDc2LCAweDAzfSwKKwl7MHg5MiwgMHgwM30sCisJezB4OTUsIDB4MTB9LAorCXsweGUyLCAweDAwfSwKKwl7MHhlNywgMHgzZX0sCisJezB4OGQsIDB4MWN9LAorCXsweDhlLCAweDAwfSwKKwl7MHg4ZiwgMHgwMH0sCisJezB4MWYsIDB4MDB9LAorCXsweGMzLCAweGY5fSwKKwl7MHg4OSwgMHhmZn0sCisJezB4ODgsIDB4Zjh9LAorCXsweDc2LCAweDAzfSwKKwl7MHg5MiwgMHgwMX0sCisJezB4OTMsIDB4MTh9LAorCXsweDFjLCAweDBhfSwKKwl7MHgxZCwgMHg0OH0sCisJezB4YzAsIDB4NTB9LAorCXsweGMxLCAweDNjfSwKKwl7MHgzNCwgMHgwNX0sCisJezB4YzIsIDB4MGN9LAorCXsweGMzLCAweGY5fSwKKwl7MHgzNCwgMHgwNX0sCisJezB4ZTcsIDB4MmV9LAorCXsweDMxLCAweGY5fSwKKwl7MHgzNSwgMHgwMn0sCisJezB4ZDksIDB4MTB9LAorCXsweDI1LCAweDQyfSwKKwl7MHg5NCwgMHgxMX0sCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX2luaXRfb3Y5NjV4W11bMl0gPSB7CisJezB4MTIsIDB4ODB9LAkvKiBjb203IC0gcmVzZXQgKi8KKwl7MHgwMCwgMHgwMH0sCS8qIGdhaW4gKi8KKwl7MHgwMSwgMHg4MH0sCS8qIGJsdWUgKi8KKwl7MHgwMiwgMHg4MH0sCS8qIHJlZCAqLworCXsweDAzLCAweDFifSwJLyogdnJlZiAqLworCXsweDA0LCAweDAzfSwJLyogY29tMSAtIGV4cG9zdXJlIGxvdyBiaXRzICovCisJezB4MGIsIDB4NTd9LAkvKiB2ZXIgKi8KKwl7MHgwZSwgMHg2MX0sCS8qIGNvbTUgKi8KKwl7MHgwZiwgMHg0Mn0sCS8qIGNvbTYgKi8KKwl7MHgxMSwgMHgwMH0sCS8qIGNsa3JjICovCisJezB4MTIsIDB4MDJ9LAkvKiBjb203ICovCisJezB4MTMsIDB4ZTd9LAkvKiBjb204IC0gZXZlcnl0aGluZyAoQUdDLCBBV0IgYW5kIEFFQykgKi8KKwl7MHgxNCwgMHgyOH0sCS8qIGNvbTkgKi8KKwl7MHgxNiwgMHgyNH0sCS8qIHJzdmQxNiAqLworCXsweDE3LCAweDFkfSwJLyogaHN0YXJ0Ki8KKwl7MHgxOCwgMHhiZH0sCS8qIGhzdG9wICovCisJezB4MTksIDB4MDF9LAkvKiB2c3RydCAqLworCXsweDFhLCAweDgxfSwJLyogdnN0b3AqLworCXsweDFlLCAweDA0fSwJLyogbXZmcCAqLworCXsweDI0LCAweDNjfSwJLyogYWV3ICovCisJezB4MjUsIDB4MzZ9LAkvKiBhZWIgKi8KKwl7MHgyNiwgMHg3MX0sCS8qIHZwdCAqLworCXsweDI3LCAweDA4fSwJLyogYmJpYXMgKi8KKwl7MHgyOCwgMHgwOH0sCS8qIGdiYmlhcyAqLworCXsweDI5LCAweDE1fSwJLyogZ3IgY29tICovCisJezB4MmEsIDB4MDB9LAorCXsweDJiLCAweDAwfSwKKwl7MHgyYywgMHgwOH0sCS8qIHJiaWFzICovCisJezB4MzIsIDB4ZmZ9LAkvKiBocmVmICovCisJezB4MzMsIDB4MDB9LAkvKiBjaGxmICovCisJezB4MzQsIDB4M2Z9LAkvKiBhcmJsbSAqLworCXsweDM1LCAweDAwfSwJLyogcnN2ZDM1ICovCisJezB4MzYsIDB4Zjh9LAkvKiByc3ZkMzYgKi8KKwl7MHgzOCwgMHg3Mn0sCS8qIGFjb20zOCAqLworCXsweDM5LCAweDU3fSwJLyogb2ZvbiAqLworCXsweDNhLCAweDgwfSwJLyogdHNsYiAqLworCXsweDNiLCAweGM0fSwKKwl7MHgzZCwgMHg5OX0sCS8qIGNvbTEzICovCisJezB4M2YsIDB4YzF9LAorCXsweDQwLCAweGMwfSwJLyogY29tMTUgKi8KKwl7MHg0MSwgMHg0MH0sCS8qIGNvbTE2ICovCisJezB4NDIsIDB4YzB9LAorCXsweDQzLCAweDBhfSwKKwl7MHg0NCwgMHhmMH0sCisJezB4NDUsIDB4NDZ9LAorCXsweDQ2LCAweDYyfSwKKwl7MHg0NywgMHgyYX0sCisJezB4NDgsIDB4M2N9LAorCXsweDRhLCAweGZjfSwKKwl7MHg0YiwgMHhmY30sCisJezB4NGMsIDB4N2Z9LAorCXsweDRkLCAweDdmfSwKKwl7MHg0ZSwgMHg3Zn0sCisJezB4NGYsIDB4OTh9LAorCXsweDUwLCAweDk4fSwKKwl7MHg1MSwgMHgwMH0sCisJezB4NTIsIDB4Mjh9LAorCXsweDUzLCAweDcwfSwKKwl7MHg1NCwgMHg5OH0sCisJezB4NTgsIDB4MWF9LAorCXsweDU5LCAweDg1fSwKKwl7MHg1YSwgMHhhOX0sCisJezB4NWIsIDB4NjR9LAorCXsweDVjLCAweDg0fSwKKwl7MHg1ZCwgMHg1M30sCisJezB4NWUsIDB4MGV9LAorCXsweDVmLCAweGYwfSwKKwl7MHg2MCwgMHhmMH0sCisJezB4NjEsIDB4ZjB9LAorCXsweDYyLCAweDAwfSwJLyogbGNjMSAqLworCXsweDYzLCAweDAwfSwJLyogbGNjMiAqLworCXsweDY0LCAweDAyfSwJLyogbGNjMyAqLworCXsweDY1LCAweDE2fSwJLyogbGNjNCAqLworCXsweDY2LCAweDAxfSwJLyogbGNjNSAqLworCXsweDY5LCAweDAyfSwJLyogaHYgKi8KKwl7MHg2YiwgMHg1YX0sCS8qIGRidmwgKi8KKwl7MHg2YywgMHgwNH0sCisJezB4NmQsIDB4NTV9LAorCXsweDZlLCAweDAwfSwKKwl7MHg2ZiwgMHg5ZH0sCisJezB4NzAsIDB4MjF9LAorCXsweDcxLCAweDc4fSwKKwl7MHg3MiwgMHgwMH0sCisJezB4NzMsIDB4MDF9LAorCXsweDc0LCAweDNhfSwKKwl7MHg3NSwgMHgzNX0sCisJezB4NzYsIDB4MDF9LAorCXsweDc3LCAweDAyfSwKKwl7MHg3YSwgMHgxMn0sCisJezB4N2IsIDB4MDh9LAorCXsweDdjLCAweDE2fSwKKwl7MHg3ZCwgMHgzMH0sCisJezB4N2UsIDB4NWV9LAorCXsweDdmLCAweDcyfSwKKwl7MHg4MCwgMHg4Mn0sCisJezB4ODEsIDB4OGV9LAorCXsweDgyLCAweDlhfSwKKwl7MHg4MywgMHhhNH0sCisJezB4ODQsIDB4YWN9LAorCXsweDg1LCAweGI4fSwKKwl7MHg4NiwgMHhjM30sCisJezB4ODcsIDB4ZDZ9LAorCXsweDg4LCAweGU2fSwKKwl7MHg4OSwgMHhmMn0sCisJezB4OGEsIDB4MDN9LAorCXsweDhjLCAweDg5fSwKKwl7MHgxNCwgMHgyOH0sCS8qIGNvbTkgKi8KKwl7MHg5MCwgMHg3ZH0sCisJezB4OTEsIDB4N2J9LAorCXsweDlkLCAweDAzfSwKKwl7MHg5ZSwgMHgwNH0sCisJezB4OWYsIDB4N2F9LAorCXsweGEwLCAweDc5fSwKKwl7MHhhMSwgMHg0MH0sCS8qIGFlY2htICovCisJezB4YTQsIDB4NTB9LAorCXsweGE1LCAweDY4fSwJLyogY29tMjYgKi8KKwl7MHhhNiwgMHg0YX0sCisJezB4YTgsIDB4YzF9LAkvKiBhY29tYTggKi8KKwl7MHhhOSwgMHhlZn0sCS8qIGFjb21hOSAqLworCXsweGFhLCAweDkyfSwKKwl7MHhhYiwgMHgwNH0sCisJezB4YWMsIDB4ODB9LAorCXsweGFkLCAweDgwfSwKKwl7MHhhZSwgMHg4MH0sCisJezB4YWYsIDB4ODB9LAorCXsweGIyLCAweGYyfSwKKwl7MHhiMywgMHgyMH0sCisJezB4YjQsIDB4MjB9LAorCXsweGI1LCAweDAwfSwKKwl7MHhiNiwgMHhhZn0sCisJezB4YmIsIDB4YWV9LAorCXsweGJjLCAweDdmfSwKKwl7MHhkYiwgMHg3Zn0sCisJezB4YmUsIDB4N2Z9LAorCXsweGJmLCAweDdmfSwKKwl7MHhjMCwgMHhlMn0sCisJezB4YzEsIDB4YzB9LAorCXsweGMyLCAweDAxfSwKKwl7MHhjMywgMHg0ZX0sCisJezB4YzYsIDB4ODV9LAorCXsweGM3LCAweDgwfSwKKwl7MHhjOSwgMHhlMH0sCisJezB4Y2EsIDB4ZTh9LAorCXsweGNiLCAweGYwfSwKKwl7MHhjYywgMHhkOH0sCisJezB4Y2QsIDB4ZjF9LAorCXsweDRmLCAweDk4fSwKKwl7MHg1MCwgMHg5OH0sCisJezB4NTEsIDB4MDB9LAorCXsweDUyLCAweDI4fSwKKwl7MHg1MywgMHg3MH0sCisJezB4NTQsIDB4OTh9LAorCXsweDU4LCAweDFhfSwKKwl7MHhmZiwgMHg0MX0sCS8qIHJlYWQgNDEsIHdyaXRlIGZmIDAwICovCisJezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLworCXsweGM1LCAweDAzfSwKKwl7MHg2YSwgMHgwMn0sCisKKwl7MHgxMiwgMHg2Mn0sCS8qIGNvbTcgLSBWR0EgKyBDSUYgKi8KKwl7MHgzNiwgMHhmYX0sCS8qIHJzdmQzNiAqLworCXsweDY5LCAweDBhfSwJLyogaHYgKi8KKwl7MHg4YywgMHg4OX0sCS8qIGNvbTIyICovCisJezB4MTQsIDB4Mjh9LAkvKiBjb205ICovCisJezB4M2UsIDB4MGN9LAorCXsweDQxLCAweDQwfSwJLyogY29tMTYgKi8KKwl7MHg3MiwgMHgwMH0sCisJezB4NzMsIDB4MDB9LAorCXsweDc0LCAweDNhfSwKKwl7MHg3NSwgMHgzNX0sCisJezB4NzYsIDB4MDF9LAorCXsweGM3LCAweDgwfSwKKwl7MHgwMywgMHgxMn0sCS8qIHZyZWYgKi8KKwl7MHgxNywgMHgxNn0sCS8qIGhzdGFydCAqLworCXsweDE4LCAweDAyfSwJLyogaHN0b3AgKi8KKwl7MHgxOSwgMHgwMX0sCS8qIHZzdHJ0ICovCisJezB4MWEsIDB4M2R9LAkvKiB2c3RvcCAqLworCXsweDMyLCAweGZmfSwJLyogaHJlZiAqLworCXsweGMwLCAweGFhfSwKK307CisKK3N0YXRpYyBjb25zdCB1OCBicmlkZ2VfaW5pdF9vdjk2NXhfMltdWzJdID0geworCXsweDk0LCAweGFhfSwKKwl7MHhmMSwgMHg2MH0sCisJezB4ZTUsIDB4MDR9LAorCXsweGMwLCAweDUwfSwKKwl7MHhjMSwgMHgzY30sCisJezB4OGMsIDB4MDB9LAorCXsweDhkLCAweDFjfSwKKwl7MHgzNCwgMHgwNX0sCisKKwl7MHhjMiwgMHgwY30sCisJezB4YzMsIDB4Zjl9LAorCXsweGRhLCAweDAxfSwKKwl7MHg1MCwgMHgwMH0sCisJezB4NTEsIDB4YTB9LAorCXsweDUyLCAweDNjfSwKKwl7MHg1MywgMHgwMH0sCisJezB4NTQsIDB4MDB9LAorCXsweDU1LCAweDAwfSwKKwl7MHg1NywgMHgwMH0sCisJezB4NWMsIDB4MDB9LAorCXsweDVhLCAweGEwfSwKKwl7MHg1YiwgMHg3OH0sCisJezB4MzUsIDB4MDJ9LAorCXsweGQ5LCAweDEwfSwKKwl7MHg5NCwgMHgxMX0sCit9OworCitzdGF0aWMgY29uc3QgdTggc2Vuc29yX2luaXRfb3Y5NjV4XzJbXVsyXSA9IHsKKwl7MHgzYiwgMHhjNH0sCisJezB4MWUsIDB4MDR9LAkvKiBtdmZwICovCisJezB4MTMsIDB4ZTB9LAkvKiBjb204ICovCisJezB4MDAsIDB4MDB9LAkvKiBnYWluICovCisJezB4MTMsIDB4ZTd9LAkvKiBjb204IC0gZXZlcnl0aGluZyAoQUdDLCBBV0IgYW5kIEFFQykgKi8KKwl7MHgxMSwgMHgwM30sCS8qIGNsa3JjICovCisJezB4NmIsIDB4NWF9LAkvKiBkYmx2ICovCisJezB4NmEsIDB4MDV9LAorCXsweGM1LCAweDA3fSwKKwl7MHhhMiwgMHg0Yn0sCisJezB4YTMsIDB4M2V9LAorCXsweDJkLCAweDAwfSwKKwl7MHhmZiwgMHg0Mn0sCS8qIHJlYWQgNDIsIHdyaXRlIGZmIDAwICovCisJezB4NDIsIDB4YzB9LAorCXsweDJkLCAweDAwfSwKKwl7MHhmZiwgMHg0Mn0sCS8qIHJlYWQgNDIsIHdyaXRlIGZmIDAwICovCisJezB4NDIsIDB4YzF9LAorCXsweDNmLCAweDAxfSwKKwl7MHhmZiwgMHg0Mn0sCS8qIHJlYWQgNDIsIHdyaXRlIGZmIDAwICovCisJezB4NDIsIDB4YzF9LAorCXsweDRmLCAweDk4fSwKKwl7MHg1MCwgMHg5OH0sCisJezB4NTEsIDB4MDB9LAorCXsweDUyLCAweDI4fSwKKwl7MHg1MywgMHg3MH0sCisJezB4NTQsIDB4OTh9LAorCXsweDU4LCAweDFhfSwKKwl7MHhmZiwgMHg0MX0sCS8qIHJlYWQgNDEsIHdyaXRlIGZmIDAwICovCisJezB4NDEsIDB4NDB9LAkvKiBjb20xNiAqLworCXsweDU2LCAweDQwfSwKKwl7MHg1NSwgMHg4Zn0sCisJezB4MTAsIDB4MjV9LAkvKiBhZWNoIC0gZXhwb3N1cmUgaGlnaCBiaXRzICovCisJezB4ZmYsIDB4MTN9LAkvKiByZWFkIDEzLCB3cml0ZSBmZiAwMCAqLworCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCit9OworCitzdGF0aWMgY29uc3QgdTggYnJpZGdlX3N0YXJ0X292OTY1eFtdWzJdID0geworCXsweGMyLCAweDRjfSwKKwl7MHhjMywgMHhmOX0sCisJezB4NTAsIDB4MDB9LAorCXsweDUxLCAweGEwfSwKKwl7MHg1MiwgMHg3OH0sCisJezB4NTMsIDB4MDB9LAorCXsweDU0LCAweDAwfSwKKwl7MHg1NSwgMHgwMH0sCisJezB4NTcsIDB4MDB9LAorCXsweDVjLCAweDAwfSwKKwl7MHg1YSwgMHgyOH0sCisJezB4NWIsIDB4MWV9LAorCXsweDM1LCAweDAwfSwKKwl7MHhkOSwgMHgyMX0sCisJezB4OTQsIDB4MTF9LAorfTsKKworc3RhdGljIGNvbnN0IHU4IHNlbnNvcl9zdGFydF9vdjk2NXhbXVsyXSA9IHsKKwl7MHgzYiwgMHhlNH0sCisJezB4MWUsIDB4MDR9LAkvKiBtdmZwICovCisJezB4MTMsIDB4ZTB9LAkvKiBjb204ICovCisJezB4MDAsIDB4MDB9LAorCXsweDEzLCAweGU3fSwJLyogY29tOCAtIGV2ZXJ5dGhpbmcgKEFHQywgQVdCIGFuZCBBRUMpICovCisJezB4MTEsIDB4MDF9LAkvKiBjbGtyYyAqLworCXsweDZiLCAweDVhfSwJLyogZGJsdiAqLworCXsweDZhLCAweDAyfSwKKwl7MHhjNSwgMHgwM30sCisJezB4YTIsIDB4OTZ9LAorCXsweGEzLCAweDdkfSwKKwl7MHhmZiwgMHgxM30sCS8qIHJlYWQgMTMsIHdyaXRlIGZmIDAwICovCisJezB4MTMsIDB4ZTd9LAorCXsweDNhLCAweDgwfSwKKwl7MHhmZiwgMHg0Mn0sCS8qIHJlYWQgNDIsIHdyaXRlIGZmIDAwICovCisJezB4NDIsIDB4YzF9LAorfTsKKworCitzdGF0aWMgdm9pZCBvdjUzNF9yZWdfd3JpdGUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgcmVnLCB1OCB2YWwpCit7CisJc3RydWN0IHVzYl9kZXZpY2UgKnVkZXYgPSBnc3BjYV9kZXYtPmRldjsKKwlpbnQgcmV0OworCisJUERFQlVHKERfVVNCTywgInJlZz0weCUwNHgsIHZhbD0wJTAyeCIsIHJlZywgdmFsKTsKKwlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSB2YWw7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKHVkZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUodWRldiwgMCksCisJCQkgICAgICAweDAxLAorCQkJICAgICAgVVNCX0RJUl9PVVQgfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAgMHgwMCwgcmVnLCBnc3BjYV9kZXYtPnVzYl9idWYsIDEsIENUUkxfVElNRU9VVCk7CisJaWYgKHJldCA8IDApCisJCVBERUJVRyhEX0VSUiwgIndyaXRlIGZhaWxlZCIpOworfQorCitzdGF0aWMgdTggb3Y1MzRfcmVnX3JlYWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgcmVnKQoreworCXN0cnVjdCB1c2JfZGV2aWNlICp1ZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyh1ZGV2LAorCQkJICAgICAgdXNiX3JjdmN0cmxwaXBlKHVkZXYsIDApLAorCQkJICAgICAgMHgwMSwKKwkJCSAgICAgIFVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAorCQkJICAgICAgMHgwMCwgcmVnLCBnc3BjYV9kZXYtPnVzYl9idWYsIDEsIENUUkxfVElNRU9VVCk7CisJUERFQlVHKERfVVNCSSwgInJlZz0weCUwNHgsIGRhdGE9MHglMDJ4IiwgcmVnLCBnc3BjYV9kZXYtPnVzYl9idWZbMF0pOworCWlmIChyZXQgPCAwKQorCQlQREVCVUcoRF9FUlIsICJyZWFkIGZhaWxlZCIpOworCXJldHVybiBnc3BjYV9kZXYtPnVzYl9idWZbMF07Cit9CisKKy8qIFR3byBiaXRzIGNvbnRyb2wgTEVEOiAweDIxIGJpdCA3IGFuZCAweDIzIGJpdCA3LgorICogKGRpcmVjdGlvbiBhbmQgb3V0cHV0KT8gKi8KK3N0YXRpYyB2b2lkIG92NTM0X3NldF9sZWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBpbnQgc3RhdHVzKQoreworCXU4IGRhdGE7CisKKwlQREVCVUcoRF9DT05GLCAibGVkIHN0YXR1czogJWQiLCBzdGF0dXMpOworCisJZGF0YSA9IG92NTM0X3JlZ19yZWFkKGdzcGNhX2RldiwgMHgyMSk7CisJZGF0YSB8PSAweDgwOworCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4MjEsIGRhdGEpOworCisJZGF0YSA9IG92NTM0X3JlZ19yZWFkKGdzcGNhX2RldiwgMHgyMyk7CisJaWYgKHN0YXR1cykKKwkJZGF0YSB8PSAweDgwOworCWVsc2UKKwkJZGF0YSAmPSB+MHg4MDsKKworCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4MjMsIGRhdGEpOworCisJaWYgKCFzdGF0dXMpIHsKKwkJZGF0YSA9IG92NTM0X3JlZ19yZWFkKGdzcGNhX2RldiwgMHgyMSk7CisJCWRhdGEgJj0gfjB4ODA7CisJCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4MjEsIGRhdGEpOworCX0KK30KKworc3RhdGljIGludCBzY2NiX2NoZWNrX3N0YXR1cyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJdTggZGF0YTsKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspIHsKKwkJZGF0YSA9IG92NTM0X3JlZ19yZWFkKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1NUQVRVUyk7CisKKwkJc3dpdGNoIChkYXRhKSB7CisJCWNhc2UgMHgwMDoKKwkJCXJldHVybiAxOworCQljYXNlIDB4MDQ6CisJCQlyZXR1cm4gMDsKKwkJY2FzZSAweDAzOgorCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQlQREVCVUcoRF9FUlIsICJzY2NiIHN0YXR1cyAweCUwMngsIGF0dGVtcHQgJWQvNSIsCisJCQkgICAgICAgZGF0YSwgaSArIDEpOworCQl9CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBzY2NiX3JlZ193cml0ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHU4IHJlZywgdTggdmFsKQoreworCVBERUJVRyhEX1VTQk8sICJyZWc6IDB4JTAyeCwgdmFsOiAweCUwMngiLCByZWcsIHZhbCk7CisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1NVQkFERFIsIHJlZyk7CisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX1dSSVRFLCB2YWwpOworCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIE9WNTM0X1JFR19PUEVSQVRJT04sIE9WNTM0X09QX1dSSVRFXzMpOworCisJaWYgKCFzY2NiX2NoZWNrX3N0YXR1cyhnc3BjYV9kZXYpKQorCQlQREVCVUcoRF9FUlIsICJzY2NiX3JlZ193cml0ZSBmYWlsZWQiKTsKK30KKworc3RhdGljIHU4IHNjY2JfcmVnX3JlYWQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgcmVnKQoreworCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIE9WNTM0X1JFR19TVUJBRERSLCByZWcpOworCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIE9WNTM0X1JFR19PUEVSQVRJT04sIE9WNTM0X09QX1dSSVRFXzIpOworCWlmICghc2NjYl9jaGVja19zdGF0dXMoZ3NwY2FfZGV2KSkKKwkJUERFQlVHKERfRVJSLCAic2NjYl9yZWdfcmVhZCBmYWlsZWQgMSIpOworCisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgT1Y1MzRfUkVHX09QRVJBVElPTiwgT1Y1MzRfT1BfUkVBRF8yKTsKKwlpZiAoIXNjY2JfY2hlY2tfc3RhdHVzKGdzcGNhX2RldikpCisJCVBERUJVRyhEX0VSUiwgInNjY2JfcmVnX3JlYWQgZmFpbGVkIDIiKTsKKworCXJldHVybiBvdjUzNF9yZWdfcmVhZChnc3BjYV9kZXYsIE9WNTM0X1JFR19SRUFEKTsKK30KKworLyogb3V0cHV0IGEgYnJpZGdlIHNlcXVlbmNlIChyZWcgLSB2YWwpICovCitzdGF0aWMgdm9pZCByZWdfd19hcnJheShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQljb25zdCB1OCAoKmRhdGEpWzJdLCBpbnQgbGVuKQoreworCXdoaWxlICgtLWxlbiA+PSAwKSB7CisJCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsICgqZGF0YSlbMF0sICgqZGF0YSlbMV0pOworCQlkYXRhKys7CisJfQorfQorCisvKiBvdXRwdXQgYSBzZW5zb3Igc2VxdWVuY2UgKHJlZyAtIHZhbCkgKi8KK3N0YXRpYyB2b2lkIHNjY2Jfd19hcnJheShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQljb25zdCB1OCAoKmRhdGEpWzJdLCBpbnQgbGVuKQoreworCXdoaWxlICgtLWxlbiA+PSAwKSB7CisJCWlmICgoKmRhdGEpWzBdICE9IDB4ZmYpIHsKKwkJCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgKCpkYXRhKVswXSwgKCpkYXRhKVsxXSk7CisJCX0gZWxzZSB7CisJCQlzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgKCpkYXRhKVsxXSk7CisJCQlzY2NiX3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZmYsIDB4MDApOworCQl9CisJCWRhdGErKzsKKwl9Cit9CisKIC8qIHNldCBmcmFtZXJhdGUgKi8KIHN0YXRpYyB2b2lkIG92NTM0X3NldF9mcmFtZV9yYXRlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKQEAgLTM0Niw0MCArNjk0LDE3IEBACiAJUERFQlVHKERfUFJPQkUsICJmcmFtZV9yYXRlOiAlZCIsIGZyKTsKIH0KIAotLyogc2V0dXAgbWV0aG9kICovCi1zdGF0aWMgdm9pZCBvdjUzNF9zZXR1cChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0JaW50IGk7Ci0KLQkvKiBJbml0aWFsaXplIGJyaWRnZSBjaGlwICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUob3Y1MzRfcmVnX2luaXRkYXRhKTsgaSsrKQotCQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCBvdjUzNF9yZWdfaW5pdGRhdGFbaV1bMF0sCi0JCQkJb3Y1MzRfcmVnX2luaXRkYXRhW2ldWzFdKTsKLQotCVBERUJVRyhEX1BST0JFLCAic2Vuc29yIGlzIG92JTAyeCUwMngiLAotCQlzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgMHgwYSksCi0JCXNjY2JfcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDBiKSk7Ci0KLQlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMSk7Ci0KLQkvKiBJbml0aWFsaXplIHNlbnNvciAqLwotCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG92NzcyeF9yZWdfaW5pdGRhdGEpOyBpKyspCi0JCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2Rldiwgb3Y3NzJ4X3JlZ19pbml0ZGF0YVtpXVswXSwKLQkJCSAgICAgICBvdjc3MnhfcmVnX2luaXRkYXRhW2ldWzFdKTsKLQotCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDkpOwotCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAwKTsKLX0KLQogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLwogc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkgICAgIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJc3RydWN0IGNhbSAqY2FtOwogCisJc2QtPnNlbnNvciA9IGlkLT5kcml2ZXJfaW5mbzsKKwogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKIAotCWNhbS0+ZXBhZGRyID0gMHgwMTsKIAljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7CiAJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKIApAQCAtMzkyLDI2ICs3MTcsMTAyIEBACiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KIHN0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0Jb3Y1MzRfc2V0dXAoZ3NwY2FfZGV2KTsKLQlvdjUzNF9zZXRfZnJhbWVfcmF0ZShnc3BjYV9kZXYpOworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwl1MTYgc2Vuc29yX2lkOworCXN0YXRpYyBjb25zdCB1OCBzZW5zb3JfYWRkclsyXSA9IHsKKwkJMHg0MiwJCQkvKiAwIFNFTlNPUl9PVjc3MlggKi8KKwkJMHg2MCwJCQkvKiAxIFNFTlNPUl9PVjk2NVggKi8KKwl9OworCisJLyogcmVzZXQgYnJpZGdlICovCisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlNywgMHgzYSk7CisJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwOCk7CisJbXNsZWVwKDEwMCk7CisKKwkvKiBpbml0aWFsaXplIHRoZSBzZW5zb3IgYWRkcmVzcyAqLworCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIE9WNTM0X1JFR19BRERSRVNTLAorCQkJCXNlbnNvcl9hZGRyW3NkLT5zZW5zb3JdKTsKKworCS8qIHJlc2V0IHNlbnNvciAqLworCXNjY2JfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHgxMiwgMHg4MCk7CisJbXNsZWVwKDEwKTsKKworCS8qIHByb2JlIHRoZSBzZW5zb3IgKi8KKwlzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgMHgwYSk7CisJc2Vuc29yX2lkID0gc2NjYl9yZWdfcmVhZChnc3BjYV9kZXYsIDB4MGEpIDw8IDg7CisJc2NjYl9yZWdfcmVhZChnc3BjYV9kZXYsIDB4MGIpOworCXNlbnNvcl9pZCB8PSBzY2NiX3JlZ19yZWFkKGdzcGNhX2RldiwgMHgwYik7CisJUERFQlVHKERfUFJPQkUsICJTZW5zb3IgSUQ6ICUwNHgiLCBzZW5zb3JfaWQpOworCisJLyogaW5pdGlhbGl6ZSAqLworCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX09WNzcyWDoKKwkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2VfaW5pdF9vdjcyMngsCisJCQkJQVJSQVlfU0laRShicmlkZ2VfaW5pdF9vdjcyMngpKTsKKwkJb3Y1MzRfc2V0X2xlZChnc3BjYV9kZXYsIDEpOworCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3JfaW5pdF9vdjcyMngsCisJCQkJQVJSQVlfU0laRShzZW5zb3JfaW5pdF9vdjcyMngpKTsKKwkJb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwOSk7CisJCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAwKTsKKwkJb3Y1MzRfc2V0X2ZyYW1lX3JhdGUoZ3NwY2FfZGV2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKy8qCWNhc2UgU0VOU09SX09WOTY1WDogKi8KKwkJcmVnX3dfYXJyYXkoZ3NwY2FfZGV2LCBicmlkZ2VfaW5pdF9vdjk2NXgsCisJCQkJQVJSQVlfU0laRShicmlkZ2VfaW5pdF9vdjk2NXgpKTsKKwkJc2NjYl93X2FycmF5KGdzcGNhX2Rldiwgc2Vuc29yX2luaXRfb3Y5NjV4LAorCQkJCUFSUkFZX1NJWkUoc2Vuc29yX2luaXRfb3Y5NjV4KSk7CisJCXJlZ193X2FycmF5KGdzcGNhX2RldiwgYnJpZGdlX2luaXRfb3Y5NjV4XzIsCisJCQkJQVJSQVlfU0laRShicmlkZ2VfaW5pdF9vdjk2NXhfMikpOworCQlzY2NiX3dfYXJyYXkoZ3NwY2FfZGV2LCBzZW5zb3JfaW5pdF9vdjk2NXhfMiwKKwkJCQlBUlJBWV9TSVpFKHNlbnNvcl9pbml0X292OTY1eF8yKSk7CisJCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDApOworCQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGUwLCAweDAxKTsKKwkJb3Y1MzRfc2V0X2xlZChnc3BjYV9kZXYsIDApOworCQlvdjUzNF9yZWdfd3JpdGUoZ3NwY2FfZGV2LCAweGUwLCAweDAwKTsKKwl9CiAKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0JLyogc3RhcnQgc3RyZWFtaW5nIGRhdGEgKi8KLQlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMSk7Ci0Jb3Y1MzRfcmVnX3dyaXRlKGdzcGNhX2RldiwgMHhlMCwgMHgwMCk7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfT1Y3NzJYOgorCQlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMSk7CisJCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDApOworCQlicmVhazsKKwlkZWZhdWx0OgorLyoJY2FzZSBTRU5TT1JfT1Y5NjVYOiAqLworCQlyZWdfd19hcnJheShnc3BjYV9kZXYsIGJyaWRnZV9zdGFydF9vdjk2NXgsCisJCQkJQVJSQVlfU0laRShicmlkZ2Vfc3RhcnRfb3Y5NjV4KSk7CisJCXNjY2Jfd19hcnJheShnc3BjYV9kZXYsIHNlbnNvcl9zdGFydF9vdjk2NXgsCisJCQkJQVJSQVlfU0laRShzZW5zb3Jfc3RhcnRfb3Y5NjV4KSk7CisJCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDApOworCQlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMSk7CisvKmZpeG1lOiBvdGhlciBzZW5zb3Igc3RhcnQgb21pdHRlZCovCisJfQogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0JLyogc3RvcCBzdHJlYW1pbmcgZGF0YSAqLwotCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDkpOwotCW92NTM0X3NldF9sZWQoZ3NwY2FfZGV2LCAwKTsKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9PVjc3Mlg6CisJCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDkpOworCQlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMCk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisvKgljYXNlIFNFTlNPUl9PVjk2NVg6ICovCisJCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDEpOworCQlvdjUzNF9zZXRfbGVkKGdzcGNhX2RldiwgMCk7CisJCW92NTM0X3JlZ193cml0ZShnc3BjYV9kZXYsIDB4ZTAsIDB4MDApOworCQlicmVhazsKKwl9CiB9CiAKIC8qIFZhbHVlcyBmb3IgYm1IZWFkZXJJbmZvIChWaWRlbyBhbmQgU3RpbGwgSW1hZ2UgUGF5bG9hZCBIZWFkZXJzLCAyLjQuMy4zKSAqLwpAQCAtNDI5LDc1ICs4MzAsNzUgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJX191MzIgdGhpc19wdHM7Ci0JaW50IHRoaXNfZmlkOworCXUxNiB0aGlzX2ZpZDsKIAlpbnQgcmVtYWluaW5nX2xlbiA9IGxlbjsKLQlfX3U4ICpuZXh0X2RhdGEgPSBkYXRhOwogCi1zY2FuX25leHQ6Ci0JaWYgKHJlbWFpbmluZ19sZW4gPD0gMCkKLQkJcmV0dXJuOworCWRvIHsKKwkJbGVuID0gbWluKHJlbWFpbmluZ19sZW4sIDIwNDApOwkJLypmaXhtZTogd2FzIDIwNDgqLwogCi0JZGF0YSA9IG5leHRfZGF0YTsKLQlsZW4gPSBtaW4ocmVtYWluaW5nX2xlbiwgMjA0OCk7Ci0JcmVtYWluaW5nX2xlbiAtPSBsZW47Ci0JbmV4dF9kYXRhICs9IGxlbjsKKwkJLyogUGF5bG9hZHMgYXJlIHByZWZpeGVkIHdpdGggYSBVVkMtc3R5bGUgaGVhZGVyLiAgV2UKKwkJICAgY29uc2lkZXIgYSBmcmFtZSB0byBzdGFydCB3aGVuIHRoZSBGSUQgdG9nZ2xlcywgb3IgdGhlIFBUUworCQkgICBjaGFuZ2VzLiAgQSBmcmFtZSBlbmRzIHdoZW4gRU9GIGlzIHNldCwgYW5kIHdlJ3ZlIHJlY2VpdmVkCisJCSAgIHRoZSBjb3JyZWN0IG51bWJlciBvZiBieXRlcy4gKi8KIAotCS8qIFBheWxvYWRzIGFyZSBwcmVmaXhlZCB3aXRoIGEgVVZDLXN0eWxlIGhlYWRlci4gIFdlCi0JICAgY29uc2lkZXIgYSBmcmFtZSB0byBzdGFydCB3aGVuIHRoZSBGSUQgdG9nZ2xlcywgb3IgdGhlIFBUUwotCSAgIGNoYW5nZXMuICBBIGZyYW1lIGVuZHMgd2hlbiBFT0YgaXMgc2V0LCBhbmQgd2UndmUgcmVjZWl2ZWQKLQkgICB0aGUgY29ycmVjdCBudW1iZXIgb2YgYnl0ZXMuICovCi0KLQkvKiBWZXJpZnkgVVZDIGhlYWRlci4gIEhlYWRlciBsZW5ndGggaXMgYWx3YXlzIDEyICovCi0JaWYgKGRhdGFbMF0gIT0gMTIgfHwgbGVuIDwgMTIpIHsKLQkJUERFQlVHKERfUEFDSywgImJhZCBoZWFkZXIiKTsKLQkJZ290byBkaXNjYXJkOwotCX0KLQotCS8qIENoZWNrIGVycm9ycyAqLwotCWlmIChkYXRhWzFdICYgVVZDX1NUUkVBTV9FUlIpIHsKLQkJUERFQlVHKERfUEFDSywgInBheWxvYWQgZXJyb3IiKTsKLQkJZ290byBkaXNjYXJkOwotCX0KLQotCS8qIEV4dHJhY3QgUFRTIGFuZCBGSUQgKi8KLQlpZiAoIShkYXRhWzFdICYgVVZDX1NUUkVBTV9QVFMpKSB7Ci0JCVBERUJVRyhEX1BBQ0ssICJQVFMgbm90IHByZXNlbnQiKTsKLQkJZ290byBkaXNjYXJkOwotCX0KLQl0aGlzX3B0cyA9IChkYXRhWzVdIDw8IDI0KSB8IChkYXRhWzRdIDw8IDE2KSB8IChkYXRhWzNdIDw8IDgpIHwgZGF0YVsyXTsKLQl0aGlzX2ZpZCA9IChkYXRhWzFdICYgVVZDX1NUUkVBTV9GSUQpID8gMSA6IDA7Ci0KLQkvKiBJZiBQVFMgb3IgRklEIGhhcyBjaGFuZ2VkLCBzdGFydCBhIG5ldyBmcmFtZS4gKi8KLQlpZiAodGhpc19wdHMgIT0gc2QtPmxhc3RfcHRzIHx8IHRoaXNfZmlkICE9IHNkLT5sYXN0X2ZpZCkgewotCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsIGZyYW1lLCBOVUxMLCAwKTsKLQkJc2QtPmxhc3RfcHRzID0gdGhpc19wdHM7Ci0JCXNkLT5sYXN0X2ZpZCA9IHRoaXNfZmlkOwotCX0KLQotCS8qIEFkZCB0aGUgZGF0YSBmcm9tIHRoaXMgcGF5bG9hZCAqLwotCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZnJhbWUsCi0JCQkJZGF0YSArIDEyLCBsZW4gLSAxMik7Ci0KLQkvKiBJZiB0aGlzIHBhY2tldCBpcyBtYXJrZWQgYXMgRU9GLCBlbmQgdGhlIGZyYW1lICovCi0JaWYgKGRhdGFbMV0gJiBVVkNfU1RSRUFNX0VPRikgewotCQlzZC0+bGFzdF9wdHMgPSAwOwotCi0JCWlmICgoZnJhbWUtPmRhdGFfZW5kIC0gZnJhbWUtPmRhdGEpICE9Ci0JCSAgICAoZ3NwY2FfZGV2LT53aWR0aCAqIGdzcGNhX2Rldi0+aGVpZ2h0ICogMikpIHsKLQkJCVBERUJVRyhEX1BBQ0ssICJzaG9ydCBmcmFtZSIpOworCQkvKiBWZXJpZnkgVVZDIGhlYWRlci4gIEhlYWRlciBsZW5ndGggaXMgYWx3YXlzIDEyICovCisJCWlmIChkYXRhWzBdICE9IDEyIHx8IGxlbiA8IDEyKSB7CisJCQlQREVCVUcoRF9QQUNLLCAiYmFkIGhlYWRlciIpOwogCQkJZ290byBkaXNjYXJkOwogCQl9CiAKLQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsIGZyYW1lLCBOVUxMLCAwKTsKLQl9CisJCS8qIENoZWNrIGVycm9ycyAqLworCQlpZiAoZGF0YVsxXSAmIFVWQ19TVFJFQU1fRVJSKSB7CisJCQlQREVCVUcoRF9QQUNLLCAicGF5bG9hZCBlcnJvciIpOworCQkJZ290byBkaXNjYXJkOworCQl9CiAKLQkvKiBEb25lIHRoaXMgcGF5bG9hZCAqLwotCWdvdG8gc2Nhbl9uZXh0OworCQkvKiBFeHRyYWN0IFBUUyBhbmQgRklEICovCisJCWlmICghKGRhdGFbMV0gJiBVVkNfU1RSRUFNX1BUUykpIHsKKwkJCVBERUJVRyhEX1BBQ0ssICJQVFMgbm90IHByZXNlbnQiKTsKKwkJCWdvdG8gZGlzY2FyZDsKKwkJfQorCQl0aGlzX3B0cyA9IChkYXRhWzVdIDw8IDI0KSB8IChkYXRhWzRdIDw8IDE2KQorCQkJCQkJfCAoZGF0YVszXSA8PCA4KSB8IGRhdGFbMl07CisJCXRoaXNfZmlkID0gKGRhdGFbMV0gJiBVVkNfU1RSRUFNX0ZJRCkgPyAxIDogMDsKKworCQkvKiBJZiBQVFMgb3IgRklEIGhhcyBjaGFuZ2VkLCBzdGFydCBhIG5ldyBmcmFtZS4gKi8KKwkJaWYgKHRoaXNfcHRzICE9IHNkLT5sYXN0X3B0cyB8fCB0aGlzX2ZpZCAhPSBzZC0+bGFzdF9maWQpIHsKKwkJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsCisJCQkJCU5VTEwsIDApOworCQkJc2QtPmxhc3RfcHRzID0gdGhpc19wdHM7CisJCQlzZC0+bGFzdF9maWQgPSB0aGlzX2ZpZDsKKwkJfQorCisJCS8qIEFkZCB0aGUgZGF0YSBmcm9tIHRoaXMgcGF5bG9hZCAqLworCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBJTlRFUl9QQUNLRVQsIGZyYW1lLAorCQkJCQlkYXRhICsgMTIsIGxlbiAtIDEyKTsKKworCQkvKiBJZiB0aGlzIHBhY2tldCBpcyBtYXJrZWQgYXMgRU9GLCBlbmQgdGhlIGZyYW1lICovCisJCWlmIChkYXRhWzFdICYgVVZDX1NUUkVBTV9FT0YpIHsKKwkJCXNkLT5sYXN0X3B0cyA9IDA7CisKKwkJCWlmIChmcmFtZS0+ZGF0YV9lbmQgLSBmcmFtZS0+ZGF0YSAhPQorCQkJICAgIGdzcGNhX2Rldi0+d2lkdGggKiBnc3BjYV9kZXYtPmhlaWdodCAqIDIpIHsKKwkJCQlQREVCVUcoRF9QQUNLLCAic2hvcnQgZnJhbWUiKTsKKwkJCQlnb3RvIGRpc2NhcmQ7CisJCQl9CisKKwkJCWZyYW1lID0gZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsIGZyYW1lLAorCQkJCQkJTlVMTCwgMCk7CisJCX0KKworCQkvKiBEb25lIHRoaXMgcGF5bG9hZCAqLworCQlnb3RvIHNjYW5fbmV4dDsKIAogZGlzY2FyZDoKLQkvKiBEaXNjYXJkIGRhdGEgdW50aWwgYSBuZXcgZnJhbWUgc3RhcnRzLiAqLwotCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIERJU0NBUkRfUEFDS0VULCBmcmFtZSwgTlVMTCwgMCk7Ci0JZ290byBzY2FuX25leHQ7CisJCS8qIERpc2NhcmQgZGF0YSB1bnRpbCBhIG5ldyBmcmFtZSBzdGFydHMuICovCisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIERJU0NBUkRfUEFDS0VULCBmcmFtZSwgTlVMTCwgMCk7CisKK3NjYW5fbmV4dDoKKwkJcmVtYWluaW5nX2xlbiAtPSBsZW47CisJCWRhdGEgKz0gbGVuOworCX0gd2hpbGUgKHJlbWFpbmluZ19sZW4gPiAwKTsKIH0KIAogLyogZ2V0IHN0cmVhbSBwYXJhbWV0ZXJzIChmcmFtZXJhdGUpICovCkBAIC01NTYsOSArOTU3LDggQEAKIAogLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCiBzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKLQl7VVNCX0RFVklDRSgweDA2ZjgsIDB4MzAwMil9LAkvKiBIZXJjdWxlcyBCbG9nIFdlYmNhbSAqLwotCXtVU0JfREVWSUNFKDB4MDZmOCwgMHgzMDAzKX0sCS8qIEhlcmN1bGVzIER1YWxwaXggSEQgV2VibG9nICovCi0Je1VTQl9ERVZJQ0UoMHgxNDE1LCAweDIwMDApfSwJLyogU29ueSBIRCBFeWUgZm9yIFBTMyAoU0xFSCAwMDIwMSkgKi8KKwl7VVNCX0RFVklDRSgweDA2ZjgsIDB4MzAwMyksIC5kcml2ZXJfaW5mbyA9IFNFTlNPUl9PVjk2NVh9LAorCXtVU0JfREVWSUNFKDB4MTQxNSwgMHgyMDAwKSwgLmRyaXZlcl9pbmZvID0gU0VOU09SX09WNzcyWH0sCiAJe30KIH07CiAKQEAgLTU4NSw4ICs5ODUsMTAgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjMjA3LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzIwNy5jCmluZGV4IGM5MGFjODUuLjk1YTk3YWIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvcGFjMjA3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWMyMDcuYwpAQCAtMjU2LDcgKzI1Niw2IEBACiAJCSIgKHZpZC9waWQgMHglMDRYOjB4JTA0WCkiLCBpZC0+aWRWZW5kb3IsIGlkLT5pZFByb2R1Y3QpOwogCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwotCWNhbS0+ZXBhZGRyID0gMHgwNTsKIAljYW0tPmNhbV9tb2RlID0gc2lmX21vZGU7CiAJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHNpZl9tb2RlKTsKIAlzZC0+YnJpZ2h0bmVzcyA9IFBBQzIwN19CUklHSFRORVNTX0RFRkFVTFQ7CkBAIC01MzYsNiArNTM1LDcgQEAKIAl7VVNCX0RFVklDRSgweDA5M2EsIDB4MjQ3MCl9LAogCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNDcxKX0sCiAJe1VTQl9ERVZJQ0UoMHgwOTNhLCAweDI0NzIpfSwKKwl7VVNCX0RFVklDRSgweDA5M2EsIDB4MjQ3NCl9LAogCXtVU0JfREVWSUNFKDB4MDkzYSwgMHgyNDc2KX0sCiAJe1VTQl9ERVZJQ0UoMHgxNDVmLCAweDAxM2EpfSwKIAl7VVNCX0RFVklDRSgweDIwMDEsIDB4ZjExNSl9LApAQCAtNTY1LDggKzU2NSwxMCBAQAogLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLwogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9wYWM3MzExLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMTEuYwppbmRleCBhOWM5NWNiLi5lMWUzYTNhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMTEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3BhYzczMTEuYwpAQCAtNDk4LDcgKzQ5OCw2IEBACiAJc3RydWN0IGNhbSAqY2FtOwogCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwotCWNhbS0+ZXBhZGRyID0gMHgwNTsKIAogCXNkLT5zZW5zb3IgPSBpZC0+ZHJpdmVyX2luZm87CiAJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX1BBQzczMDIpIHsKQEAgLTEwOTcsOCArMTA5NiwxMCBAQAogLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLwogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhiLmMKaW5kZXggYjNlNGUwNi4uMTUzZDBhOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4Yi5jCkBAIC04NzAsNyArODcwLDYgQEAKIAlnc3BjYV9kZXYtPmN0cmxfZGlzID0gc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uY3RybF9kaXM7CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDAxOwogCWlmICghKHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmZsYWdzICYgRl9TSUYpKSB7CiAJCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKIAkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKQEAgLTEyNzIsOCArMTI3MSwxMCBAQAogLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLwogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc29uaXhqLmMKaW5kZXggMzM3M2I4ZC4uYzcyZTE5ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zb25peGouYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3Nvbml4ai5jCkBAIC0zNSwzNiArMzUsNDcgQEAKIAlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLwogCiAJYXRvbWljX3QgYXZnX2x1bTsKLQl1bnNpZ25lZCBpbnQgZXhwb3N1cmU7CisJdTMyIGV4cG9zdXJlOwogCi0JX191MTYgYnJpZ2h0bmVzczsKLQlfX3U4IGNvbnRyYXN0OwotCV9fdTggY29sb3JzOwotCV9fdTggYXV0b2dhaW47Ci0JX191OCBibHVlOwotCV9fdTggcmVkOwotCV9fdTggdmZsaXA7CQkJLyogb3Y3NjMwIG9ubHkgKi8KLQlfX3U4IGluZnJhcmVkOwkJCS8qIG1pMDM2MCBvbmx5ICovCisJdTE2IGJyaWdodG5lc3M7CisJdTggY29udHJhc3Q7CisJdTggY29sb3JzOworCXU4IGF1dG9nYWluOworCXU4IGJsdWU7CisJdTggcmVkOworCXU4IGdhbW1hOworCXU4IHZmbGlwOwkJCS8qIG92NzYzMC9vdjc2NDggb25seSAqLworCXU4IGluZnJhcmVkOwkJCS8qIG10OXYxMTEgb25seSAqLworCXU4IHF1YWxpdHk7CQkJLyogaW1hZ2UgcXVhbGl0eSAqLworI2RlZmluZSBRVUFMSVRZX01JTiA2MAorI2RlZmluZSBRVUFMSVRZX01BWCA5NQorI2RlZmluZSBRVUFMSVRZX0RFRiA4MAorCXU4IGpwZWdxdWFsOwkJCS8qIHdlYmNhbSBxdWFsaXR5ICovCiAKLQlfX3M4IGFnX2NudDsKKwl1OCByZWcxODsKKworCXM4IGFnX2NudDsKICNkZWZpbmUgQUdfQ05UX1NUQVJUIDEzCiAKLQlfX3U4IHFpbmRleDsKLQlfX3U4IGJyaWRnZTsKKwl1OCBicmlkZ2U7CiAjZGVmaW5lIEJSSURHRV9TTjlDMTAyUCAwCiAjZGVmaW5lIEJSSURHRV9TTjlDMTA1IDEKICNkZWZpbmUgQlJJREdFX1NOOUMxMTAgMgogI2RlZmluZSBCUklER0VfU045QzEyMCAzCiAjZGVmaW5lIEJSSURHRV9TTjlDMzI1IDQKLQlfX3U4IHNlbnNvcjsJCQkvKiBUeXBlIG9mIGltYWdlIHNlbnNvciBjaGlwICovCisJdTggc2Vuc29yOwkJCS8qIFR5cGUgb2YgaW1hZ2Ugc2Vuc29yIGNoaXAgKi8KICNkZWZpbmUgU0VOU09SX0hWNzEzMVIgMAogI2RlZmluZSBTRU5TT1JfTUkwMzYwIDEKICNkZWZpbmUgU0VOU09SX01PNDAwMCAyCi0jZGVmaW5lIFNFTlNPUl9PTTY4MDIgMwotI2RlZmluZSBTRU5TT1JfT1Y3NjMwIDQKLSNkZWZpbmUgU0VOU09SX09WNzY0OCA1Ci0jZGVmaW5lIFNFTlNPUl9PVjc2NjAgNgotCV9fdTggaTJjX2Jhc2U7CisjZGVmaW5lIFNFTlNPUl9NVDlWMTExIDMKKyNkZWZpbmUgU0VOU09SX09NNjgwMiA0CisjZGVmaW5lIFNFTlNPUl9PVjc2MzAgNQorI2RlZmluZSBTRU5TT1JfT1Y3NjQ4IDYKKyNkZWZpbmUgU0VOU09SX09WNzY2MCA3CisjZGVmaW5lIFNFTlNPUl9TUDgwNzA4IDgKKwl1OCBpMmNfYmFzZTsKKworCXU4ICpqcGVnX2hkcjsKIH07CiAKIC8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KQEAgLTc4LDYgKzg5LDggQEAKIHN0YXRpYyBpbnQgc2RfZ2V0Ymx1ZV9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiBzdGF0aWMgaW50IHNkX3NldHJlZF9iYWxhbmNlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0cmVkX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKK3N0YXRpYyBpbnQgc2Rfc2V0Z2FtbWEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpOworc3RhdGljIGludCBzZF9nZXRnYW1tYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwogc3RhdGljIGludCBzZF9zZXRhdXRvZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CiBzdGF0aWMgaW50IHNkX2dldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiBzdGF0aWMgaW50IHNkX3NldHZmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKQEAgLTE1OCw2ICsxNzEsMjAgQEAKIAkgICAgLnNldCA9IHNkX3NldHJlZF9iYWxhbmNlLAogCSAgICAuZ2V0ID0gc2RfZ2V0cmVkX2JhbGFuY2UsCiAJfSwKKwl7CisJICAgIHsKKwkJLmlkICAgICAgPSBWNEwyX0NJRF9HQU1NQSwKKwkJLnR5cGUgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkubmFtZSAgICA9ICJHYW1tYSIsCisJCS5taW5pbXVtID0gMCwKKwkJLm1heGltdW0gPSA0MCwKKwkJLnN0ZXAgICAgPSAxLAorI2RlZmluZSBHQU1NQV9ERUYgMjAKKwkJLmRlZmF1bHRfdmFsdWUgPSBHQU1NQV9ERUYsCisJICAgIH0sCisJICAgIC5zZXQgPSBzZF9zZXRnYW1tYSwKKwkgICAgLmdldCA9IHNkX2dldGdhbW1hLAorCX0sCiAjZGVmaW5lIEFVVE9HQUlOX0lEWCA1CiAJewogCSAgICB7CkBAIC0xNzMsNyArMjAwLDcgQEAKIAkgICAgLnNldCA9IHNkX3NldGF1dG9nYWluLAogCSAgICAuZ2V0ID0gc2RfZ2V0YXV0b2dhaW4sCiAJfSwKLS8qIG92NzYzMCBvbmx5ICovCisvKiBvdjc2MzAvb3Y3NjQ4IG9ubHkgKi8KICNkZWZpbmUgVkZMSVBfSURYIDYKIAl7CiAJICAgIHsKQEAgLTE4MywxMyArMjEwLDEzIEBACiAJCS5taW5pbXVtID0gMCwKIAkJLm1heGltdW0gPSAxLAogCQkuc3RlcCAgICA9IDEsCi0jZGVmaW5lIFZGTElQX0RFRiAxCisjZGVmaW5lIFZGTElQX0RFRiAwCQkJLyogdmZsaXAgZGVmID0gMSBmb3Igb3Y3NjMwICovCiAJCS5kZWZhdWx0X3ZhbHVlID0gVkZMSVBfREVGLAogCSAgICB9LAogCSAgICAuc2V0ID0gc2Rfc2V0dmZsaXAsCiAJICAgIC5nZXQgPSBzZF9nZXR2ZmxpcCwKIAl9LAotLyogbWkwMzYwIG9ubHkgKi8KKy8qIG10OXYxMTEgb25seSAqLwogI2RlZmluZSBJTkZSQVJFRF9JRFggNwogCXsKIAkgICAgewpAQCAtMjExLDE4ICsyMzgsMjIgQEAKIHN0YXRpYyBfX3UzMiBjdHJsX2Rpc1tdID0gewogCSgxIDw8IElORlJBUkVEX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpLAogCQkJCQkJLyogU0VOU09SX0hWNzEzMVIgMCAqLwotCSgxIDw8IFZGTElQX0lEWCksCisJKDEgPDwgSU5GUkFSRURfSURYKSB8ICgxIDw8IFZGTElQX0lEWCksCiAJCQkJCQkvKiBTRU5TT1JfTUkwMzYwIDEgKi8KIAkoMSA8PCBJTkZSQVJFRF9JRFgpIHwgKDEgPDwgVkZMSVBfSURYKSwKIAkJCQkJCS8qIFNFTlNPUl9NTzQwMDAgMiAqLworCSgxIDw8IFZGTElQX0lEWCksCisJCQkJCQkvKiBTRU5TT1JfTVQ5VjExMSAzICovCiAJKDEgPDwgSU5GUkFSRURfSURYKSB8ICgxIDw8IFZGTElQX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfT002ODAyIDMgKi8KKwkJCQkJCS8qIFNFTlNPUl9PTTY4MDIgNCAqLwogCSgxIDw8IEFVVE9HQUlOX0lEWCkgfCAoMSA8PCBJTkZSQVJFRF9JRFgpLAotCQkJCQkJLyogU0VOU09SX09WNzYzMCA0ICovCisJCQkJCQkvKiBTRU5TT1JfT1Y3NjMwIDUgKi8KKwkoMSA8PCBJTkZSQVJFRF9JRFgpLAorCQkJCQkJLyogU0VOU09SX09WNzY0OCA2ICovCiAJKDEgPDwgQVVUT0dBSU5fSURYKSB8ICgxIDw8IElORlJBUkVEX0lEWCkgfCAoMSA8PCBWRkxJUF9JRFgpLAotCQkJCQkJLyogU0VOU09SX09WNzY0OCA1ICovCisJCQkJCQkvKiBTRU5TT1JfT1Y3NjYwIDcgKi8KIAkoMSA8PCBBVVRPR0FJTl9JRFgpIHwgKDEgPDwgSU5GUkFSRURfSURYKSB8ICgxIDw8IFZGTElQX0lEWCksCi0JCQkJCQkvKiBTRU5TT1JfT1Y3NjYwIDYgKi8KKwkJCQkJCS8qIFNFTlNPUl9TUDgwNzA4IDggKi8KIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZnYV9tb2RlW10gPSB7CkBAIC0yNDMsMTk2ICsyNzQsMjI4IEBACiAJCS5wcml2ID0gMH0sCiB9OwogCi0vKkRhdGEgZnJvbSBzbjljMTAycCtodjcxMzMxciAqLwotc3RhdGljIGNvbnN0IF9fdTggc25faHY3MTMxW10gPSB7CisvKkRhdGEgZnJvbSBzbjljMTAycCtodjcxMzFyICovCitzdGF0aWMgY29uc3QgdTggc25faHY3MTMxWzB4MWNdID0gewogLyoJcmVnMAlyZWcxCXJlZzIJcmVnMwlyZWc0CXJlZzUJcmVnNglyZWc3ICovCiAJMHgwMCwJMHgwMywJMHg2NCwJMHgwMCwJMHgxYSwJMHgyMCwJMHgyMCwJMHgyMCwKIC8qCXJlZzgJcmVnOQlyZWdhCXJlZ2IJcmVnYwlyZWdkCXJlZ2UJcmVnZiAqLwogCTB4YTEsCTB4MTEsCTB4MDIsCTB4MDksCTB4MDAsCTB4MDAsCTB4MDAsCTB4MTAsCiAvKglyZWcxMAlyZWcxMQlyZWcxMglyZWcxMwlyZWcxNAlyZWcxNQlyZWcxNglyZWcxNyAqLwogCTB4MDMsCTB4MDAsCTB4MDAsCTB4MDEsCTB4MDMsCTB4MjgsCTB4MWUsCTB4NDEsCi0vKglyZWcxOAlyZWcxOQlyZWcxYQlyZWcxYglyZWcxYwlyZWcxZAlyZWcxZQlyZWcxZiAqLwotCTB4MGEsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAKKy8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiICovCisJMHgwYSwJMHgwMCwJMHgwMCwJMHgwMAogfTsKIAotc3RhdGljIGNvbnN0IF9fdTggc25fbWkwMzYwW10gPSB7CitzdGF0aWMgY29uc3QgdTggc25fbWkwMzYwWzB4MWNdID0gewogLyoJcmVnMAlyZWcxCXJlZzIJcmVnMwlyZWc0CXJlZzUJcmVnNglyZWc3ICovCiAJMHgwMCwJMHg2MSwJMHg0NCwJMHgwMCwJMHgxYSwJMHgyMCwJMHgyMCwJMHgyMCwKIC8qCXJlZzgJcmVnOQlyZWdhCXJlZ2IJcmVnYwlyZWdkCXJlZ2UJcmVnZiAqLwogCTB4YjEsCTB4NWQsCTB4MDcsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MTAsCiAvKglyZWcxMAlyZWcxMQlyZWcxMglyZWcxMwlyZWcxNAlyZWcxNQlyZWcxNglyZWcxNyAqLwogCTB4MDMsCTB4MDAsCTB4MDAsCTB4MDIsCTB4MGEsCTB4MjgsCTB4MWUsCTB4NjEsCi0vKglyZWcxOAlyZWcxOQlyZWcxYQlyZWcxYglyZWcxYwlyZWcxZAlyZWcxZQlyZWcxZiAqLwotCTB4MDYsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAKKy8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiICovCisJMHgwNiwJMHgwMCwJMHgwMCwJMHgwMAogfTsKIAotc3RhdGljIGNvbnN0IF9fdTggc25fbW80MDAwW10gPSB7CitzdGF0aWMgY29uc3QgdTggc25fbW80MDAwWzB4MWNdID0gewogLyoJcmVnMAlyZWcxCXJlZzIJcmVnMwlyZWc0CXJlZzUJcmVnNglyZWc3ICovCi0JMHgxMiwJMHgyMywJMHg2MCwJMHgwMCwJMHgxYSwJMHgwMCwJMHgyMCwJMHgxOCwKKwkweDAwLAkweDIzLAkweDYwLAkweDAwLAkweDFhLAkweDAwLAkweDIwLAkweDE4LAogLyoJcmVnOAlyZWc5CXJlZ2EJcmVnYglyZWdjCXJlZ2QJcmVnZQlyZWdmICovCiAJMHg4MSwJMHgyMSwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwJMHgwMCwKIC8qCXJlZzEwCXJlZzExCXJlZzEyCXJlZzEzCXJlZzE0CXJlZzE1CXJlZzE2CXJlZzE3ICovCiAJMHgwMywJIDB4MDAsCTB4MGIsCTB4MGYsCTB4MTQsCTB4MjgsCTB4MWUsCTB4NDAsCi0vKglyZWcxOAlyZWcxOQlyZWcxYQlyZWcxYglyZWcxYwlyZWcxZAlyZWcxZQlyZWcxZiAqLwotCTB4MDgsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAKKy8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiICovCisJMHgwOCwJMHgwMCwJMHgwMCwJMHgwMAogfTsKIAotc3RhdGljIGNvbnN0IF9fdTggc25fb202ODAyW10gPSB7CitzdGF0aWMgY29uc3QgdTggc25fbXQ5djExMVsweDFjXSA9IHsKKy8qCXJlZzAJcmVnMQlyZWcyCXJlZzMJcmVnNAlyZWc1CXJlZzYJcmVnNyAqLworCTB4MDAsCTB4NjEsCTB4NDAsCTB4MDAsCTB4MWEsCTB4MjAsCTB4MjAsCTB4MjAsCisvKglyZWc4CXJlZzkJcmVnYQlyZWdiCXJlZ2MJcmVnZAlyZWdlCXJlZ2YgKi8KKwkweDgxLAkweDVjLAkweDA3LAkweDAwLAkweDAwLAkweDAwLAkweDAwLAkweDAwLAorLyoJcmVnMTAJcmVnMTEJcmVnMTIJcmVnMTMJcmVnMTQJcmVnMTUJcmVnMTYJcmVnMTcgKi8KKwkweDAzLAkweDAwLAkweDAwLAkweDAyLAkweDFjLAkweDI4LAkweDFlLAkweDQwLAorLyoJcmVnMTgJcmVnMTkJcmVnMWEJcmVnMWIgKi8KKwkweDA2LAkweDAwLAkweDAwLAkweDAwCit9OworCitzdGF0aWMgY29uc3QgdTggc25fb202ODAyWzB4MWNdID0gewogLyoJcmVnMAlyZWcxCXJlZzIJcmVnMwlyZWc0CXJlZzUJcmVnNglyZWc3ICovCiAJMHgwMCwJMHgyMywJMHg3MiwJMHgwMCwJMHgxYSwJMHgzNCwJMHgyNywJMHgyMCwKIC8qCXJlZzgJcmVnOQlyZWdhCXJlZ2IJcmVnYwlyZWdkCXJlZ2UJcmVnZiAqLwogCTB4ODAsCTB4MzQsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCiAvKglyZWcxMAlyZWcxMQlyZWcxMglyZWcxMwlyZWcxNAlyZWcxNQlyZWcxNglyZWcxNyAqLwogCTB4MDMsCTB4MDAsCTB4NTEsCTB4MDEsCTB4MDAsCTB4MjgsCTB4MWUsCTB4NDAsCi0vKglyZWcxOAlyZWcxOQlyZWcxYQlyZWcxYglyZWcxYwlyZWcxZAlyZWcxZQlyZWcxZiAqLwotCTB4MDUsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCi0JMHgwOCwJMHgyMiwJMHg0NCwJMHg2MywJMHg3ZCwJMHg5MiwJMHhhMywJMHhhZiwKLQkweGJjLAkweGM0LAkweGNkLAkweGQ1LAkweGRjLAkweGUxLAkweGU4LAkweGVmLAotCTB4ZjcKKy8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiICovCisJMHgwNSwJMHgwMCwJMHgwMCwJMHgwMAogfTsKIAotc3RhdGljIGNvbnN0IF9fdTggc25fb3Y3NjMwW10gPSB7CitzdGF0aWMgY29uc3QgdTggc25fb3Y3NjMwWzB4MWNdID0gewogLyoJcmVnMAlyZWcxCXJlZzIJcmVnMwlyZWc0CXJlZzUJcmVnNglyZWc3ICovCiAJMHgwMCwJMHgyMSwJMHg0MCwJMHgwMCwJMHgxYSwJMHgyMCwJMHgxZiwJMHgyMCwKIC8qCXJlZzgJcmVnOQlyZWdhCXJlZ2IJcmVnYwlyZWdkCXJlZ2UJcmVnZiAqLwogCTB4YTEsCTB4MjEsCTB4NzYsCTB4MjEsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MTAsCiAvKglyZWcxMAlyZWcxMQlyZWcxMglyZWcxMwlyZWcxNAlyZWcxNQlyZWcxNglyZWcxNyAqLwogCTB4MDMsCTB4MDAsCTB4MDQsCTB4MDEsCTB4MGEsCTB4MjgsCTB4MWUsCTB4YzIsCi0vKglyZWcxOAlyZWcxOQlyZWcxYQlyZWcxYglyZWcxYwlyZWcxZAlyZWcxZQlyZWcxZiAqLwotCTB4MGIsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAKKy8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiICovCisJMHgwYiwJMHgwMCwJMHgwMCwJMHgwMAogfTsKIAotc3RhdGljIGNvbnN0IF9fdTggc25fb3Y3NjQ4W10gPSB7CitzdGF0aWMgY29uc3QgdTggc25fb3Y3NjQ4WzB4MWNdID0gewogLyoJcmVnMAlyZWcxCXJlZzIJcmVnMwlyZWc0CXJlZzUJcmVnNglyZWc3ICovCiAJMHgwMCwJMHg2MywJMHg0MCwJMHgwMCwJMHgxYSwJMHgyMCwJMHgyMCwJMHgyMCwKIC8qCXJlZzgJcmVnOQlyZWdhCXJlZ2IJcmVnYwlyZWdkCXJlZ2UJcmVnZiAqLwogCTB4ODEsCTB4MjEsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MTAsCiAvKglyZWcxMAlyZWcxMQlyZWcxMglyZWcxMwlyZWcxNAlyZWcxNQlyZWcxNglyZWcxNyAqLwogCTB4MDMsCTB4MDAsCTB4MDAsCTB4MDEsCTB4MDAsCTB4MjgsCTB4MWUsCTB4MDAsCi0vKglyZWcxOAlyZWcxOQlyZWcxYQlyZWcxYglyZWcxYwlyZWcxZAlyZWcxZQlyZWcxZiAqLwotCTB4MGIsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAKKy8qCXJlZzE4CXJlZzE5CXJlZzFhCXJlZzFiICovCisJMHgwYiwJMHgwMCwJMHgwMCwJMHgwMAogfTsKIAotc3RhdGljIGNvbnN0IF9fdTggc25fb3Y3NjYwW10JPSB7CitzdGF0aWMgY29uc3QgdTggc25fb3Y3NjYwWzB4MWNdID0gewogLyoJcmVnMAlyZWcxCXJlZzIJcmVnMwlyZWc0CXJlZzUJcmVnNglyZWc3ICovCiAJMHgwMCwJMHg2MSwJMHg0MCwJMHgwMCwJMHgxYSwJMHgyMCwJMHgyMCwJMHgyMCwKIC8qCXJlZzgJcmVnOQlyZWdhCXJlZ2IJcmVnYwlyZWdkCXJlZ2UJcmVnZiAqLwogCTB4ODEsCTB4MjEsCTB4MDcsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MTAsCiAvKglyZWcxMAlyZWcxMQlyZWcxMglyZWcxMwlyZWcxNAlyZWcxNQlyZWcxNglyZWcxNyAqLwogCTB4MDMsCTB4MDAsCTB4MDEsCTB4MDEsCTB4MDgsCTB4MjgsCTB4MWUsCTB4MjAsCi0vKglyZWcxOAlyZWcxOQlyZWcxYQlyZWcxYglyZWcxYwlyZWcxZAlyZWcxZQlyZWcxZiAqLwotCTB4MDcsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCisvKglyZWcxOAlyZWcxOQlyZWcxYQlyZWcxYiAqLworCTB4MDcsCTB4MDAsCTB4MDAsCTB4MDAKK307CisKK3N0YXRpYyBjb25zdCB1OCBzbl9zcDgwNzA4WzB4MWNdID0geworLyoJcmVnMAlyZWcxCXJlZzIJcmVnMwlyZWc0CXJlZzUJcmVnNglyZWc3ICovCisJMHgwMCwJMHg2MywJMHg2MCwJMHgwMCwJMHgxYSwJMHgyMCwJMHgyMCwJMHgyMCwKKy8qCXJlZzgJcmVnOQlyZWdhCXJlZ2IJcmVnYwlyZWdkCXJlZ2UJcmVnZiAqLworCTB4ODEsCTB4MTgsCTB4MDcsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCTB4MDAsCisvKglyZWcxMAlyZWcxMQlyZWcxMglyZWcxMwlyZWcxNAlyZWcxNQlyZWcxNglyZWcxNyAqLworCTB4MDMsCTB4MDAsCTB4MDAsCTB4MDMsCTB4MDQsCTB4MjgsCTB4MWUsCTB4MDAsCisvKglyZWcxOAlyZWcxOQlyZWcxYQlyZWcxYiAqLworCTB4MDcsCTB4MDAsCTB4MDAsCTB4MDAKIH07CiAKIC8qIHNlcXVlbmNlIHNwZWNpZmljIHRvIHRoZSBzZW5zb3JzIC0gISEgaW5kZXggPSBTRU5TT1JfeHh4ICovCi1zdGF0aWMgY29uc3QgX191OCAqc25fdGJbXSA9IHsKK3N0YXRpYyBjb25zdCB1OCAqc25fdGJbXSA9IHsKIAlzbl9odjcxMzEsCiAJc25fbWkwMzYwLAogCXNuX21vNDAwMCwKKwlzbl9tdDl2MTExLAogCXNuX29tNjgwMiwKIAlzbl9vdjc2MzAsCiAJc25fb3Y3NjQ4LAotCXNuX292NzY2MAorCXNuX292NzY2MCwKKwlzbl9zcDgwNzA4CiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBnYW1tYV9kZWZbXSA9IHsKKy8qIGRlZmF1bHQgZ2FtbWEgdGFibGUgKi8KK3N0YXRpYyBjb25zdCB1OCBnYW1tYV9kZWZbMTddID0gewogCTB4MDAsIDB4MmQsIDB4NDYsIDB4NWEsIDB4NmMsIDB4N2MsIDB4OGIsIDB4OTksCiAJMHhhNiwgMHhiMiwgMHhiZiwgMHhjYSwgMHhkNSwgMHhlMCwgMHhlYiwgMHhmNSwgMHhmZgogfTsKKy8qIGdhbW1hIGZvciBzZW5zb3JzIEhWNzEzMVIgYW5kIE1UOVYxMTEgKi8KK3N0YXRpYyBjb25zdCB1OCBnYW1tYV9zcGVjXzFbMTddID0geworCTB4MDgsIDB4M2EsIDB4NTIsIDB4NjUsIDB4NzUsIDB4ODMsIDB4OTEsIDB4OWQsCisJMHhhOSwgMHhiNCwgMHhiZSwgMHhjOCwgMHhkMiwgMHhkYiwgMHhlNCwgMHhlZCwgMHhmNQorfTsKKy8qIGdhbW1hIGZvciBzZW5zb3IgU1A4MDcwOCAqLworc3RhdGljIGNvbnN0IHU4IGdhbW1hX3NwZWNfMlsxN10gPSB7CisJMHgwYSwgMHgyZCwgMHg0ZSwgMHg2OCwgMHg3ZCwgMHg4ZiwgMHg5ZiwgMHhhYiwKKwkweGI3LCAweGMyLCAweGNjLCAweGQzLCAweGQ4LCAweGRlLCAweGUyLCAweGU1LCAweGU2Cit9OwogCiAvKiBjb2xvciBtYXRyaXggYW5kIG9mZnNldHMgKi8KLXN0YXRpYyBjb25zdCBfX3U4IHJlZzg0W10gPSB7CitzdGF0aWMgY29uc3QgdTggcmVnODRbXSA9IHsKIAkweDE0LCAweDAwLCAweDI3LCAweDAwLCAweDA3LCAweDAwLAkvKiBZUiBZRyBZQiBnYWlucyAqLwogCTB4ZTgsIDB4MGYsIDB4ZGEsIDB4MGYsIDB4NDAsIDB4MDAsCS8qIFVSIFVHIFVCICovCiAJMHgzZSwgMHgwMCwgMHhjZCwgMHgwZiwgMHhmNywgMHgwZiwJLyogVlIgVkcgVkIgKi8KIAkweDAwLCAweDAwLCAweDAwCQkJLyogWVVWIG9mZnNldHMgKi8KIH07Ci1zdGF0aWMgY29uc3QgX191OCBodjcxMzFyX3NlbnNvcl9pbml0W11bOF0gPSB7Ci0JezB4QzEsIDB4MTEsIDB4MDEsIDB4MDgsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEIxLCAweDExLCAweDM0LCAweDE3LCAweDdGLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHgxMSwgMHg0MCwgMHhGRiwgMHg3RiwgMHg3RiwgMHg3RiwgMHgxMH0sCi0JezB4OTEsIDB4MTEsIDB4NDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDExLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHgxMSwgMHgxNCwgMHgwMSwgMHhFMiwgMHgwMiwgMHg4MiwgMHgxMH0sCi0JezB4OTEsIDB4MTEsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorc3RhdGljIGNvbnN0IHU4IGh2NzEzMXJfc2Vuc29yX2luaXRbXVs4XSA9IHsKKwl7MHhjMSwgMHgxMSwgMHgwMSwgMHgwOCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjEsIDB4MTEsIDB4MzQsIDB4MTcsIDB4N2YsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDExLCAweDQwLCAweGZmLCAweDdmLCAweDdmLCAweDdmLCAweDEwfSwKKy8qCXsweDkxLCAweDExLCAweDQ0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgKi8KKwl7MHhkMSwgMHgxMSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4MTEsIDB4MTQsIDB4MDEsIDB4ZTIsIDB4MDIsIDB4ODIsIDB4MTB9LAorLyoJezB4OTEsIDB4MTEsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LCAqLwogCi0JezB4QTEsIDB4MTEsIDB4MDEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEExLCAweDExLCAweDAxLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhDMSwgMHgxMSwgMHgyNSwgMHgwMCwgMHg2MSwgMHhBOCwgMHgwMCwgMHgxMH0sCi0JezB4QTEsIDB4MTEsIDB4MzAsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEMxLCAweDExLCAweDMxLCAweDIwLCAweDJFLCAweDIwLCAweDAwLCAweDEwfSwKLQl7MHhDMSwgMHgxMSwgMHgyNSwgMHgwMCwgMHhDMywgMHg1MCwgMHgwMCwgMHgxMH0sCi0JezB4QTEsIDB4MTEsIDB4MzAsIDB4MDcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiBnYWluMTQgKi8KLQl7MHhDMSwgMHgxMSwgMHgzMSwgMHgxMCwgMHgxMCwgMHgxMCwgMHgwMCwgMHgxMH0sIC8qIHIgZyBiIDEwMWExMCAqLworCXsweGExLCAweDExLCAweDAxLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxMSwgMHgwMSwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YzEsIDB4MTEsIDB4MjUsIDB4MDAsIDB4NjEsIDB4YTgsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDExLCAweDMwLCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhjMSwgMHgxMSwgMHgzMSwgMHgyMCwgMHgyZSwgMHgyMCwgMHgwMCwgMHgxMH0sCisJezB4YzEsIDB4MTEsIDB4MjUsIDB4MDAsIDB4YzMsIDB4NTAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDExLCAweDMwLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgLyogZ2FpbjE0ICovCisJezB4YzEsIDB4MTEsIDB4MzEsIDB4MTAsIDB4MTAsIDB4MTAsIDB4MDAsIDB4MTB9LCAvKiByIGcgYiAxMDFhMTAgKi8KIAotCXsweEExLCAweDExLCAweDAxLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhBMSwgMHgxMSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4QTEsIDB4MTEsIDB4MjEsIDB4RDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEExLCAweDExLCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhBMSwgMHgxMSwgMHgyMywgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTEsIDB4MDEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDExLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxMSwgMHgyMSwgMHhEMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTEsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDExLCAweDIzLCAweDA5LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKIAotCXsweEExLCAweDExLCAweDAxLCAweDA4LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhBMSwgMHgxMSwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4QTEsIDB4MTEsIDB4MjEsIDB4RDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEExLCAweDExLCAweDIyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhBMSwgMHgxMSwgMHgyMywgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTEsIDB4MDEsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDExLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxMSwgMHgyMSwgMHhkMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTEsIDB4MjIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDExLCAweDIzLCAweDEwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKIAl7fQogfTsKLXN0YXRpYyBjb25zdCBfX3U4IG1pMDM2MF9zZW5zb3JfaW5pdFtdWzhdID0gewotCXsweEIxLCAweDVELCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhCMSwgMHg1RCwgMHgwRCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4QjEsIDB4NUQsIDB4MEQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDE2LCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgwMywgMHgwMSwgMHhFMiwgMHgwMiwgMHg4MiwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MDUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NTMsIDB4MTB9LAotCXsweEIxLCAweDVELCAweDBELCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MEMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDBFLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDE0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgxNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDFBLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgxQywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4QjEsIDB4NUQsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDIwLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDI2LCAweDAwLCAweDAwLCAweDAwLCAweDI0LCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHgyRiwgMHhGNywgMHhCMCwgMHgwMCwgMHgwNCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDMzLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDEwfSwKLQl7MHhCMSwgMHg1RCwgMHgzRCwgMHgwNiwgMHg4RiwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4NDAsIDB4MDEsIDB4RTAsIDB4MDAsIDB4RDEsIDB4MTB9LAotCXsweEIxLCAweDVELCAweDQ0LCAweDAwLCAweDgyLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHg1OCwgMHgwMCwgMHg3OCwgMHgwMCwgMHg0MywgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4NUEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDVDLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhEMSwgMHg1RCwgMHg1RSwgMHgwMCwgMHgwMCwgMHhBMywgMHgxRCwgMHgxMH0sCi0JezB4QjEsIDB4NUQsIDB4NjIsIDB4MDQsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MTB9LAorc3RhdGljIGNvbnN0IHU4IG1pMDM2MF9zZW5zb3JfaW5pdFtdWzhdID0geworCXsweGIxLCAweDVkLCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1ZCwgMHgwZCwgMHgwMCwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjEsIDB4NWQsIDB4MGQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDAxLCAweDAwLCAweDA4LCAweDAwLCAweDE2LCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgwMywgMHgwMSwgMHhlMiwgMHgwMiwgMHg4MiwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MDUsIDB4MDAsIDB4MDksIDB4MDAsIDB4NTMsIDB4MTB9LAorCXsweGIxLCAweDVkLCAweDBkLCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgwYSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDBlLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MTIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDE0LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgxNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDFhLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjEsIDB4NWQsIDB4MzIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDIwLCAweDkxLCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgyMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDI2LCAweDAwLCAweDAwLCAweDAwLCAweDI0LCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgyZiwgMHhmNywgMHhCMCwgMHgwMCwgMHgwNCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MzEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDMzLCAweDAwLCAweDAwLCAweDAxLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1ZCwgMHgzZCwgMHgwNiwgMHg4ZiwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4NDAsIDB4MDEsIDB4ZTAsIDB4MDAsIDB4ZDEsIDB4MTB9LAorCXsweGIxLCAweDVkLCAweDQ0LCAweDAwLCAweDgyLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHg1OCwgMHgwMCwgMHg3OCwgMHgwMCwgMHg0MywgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4NWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDVjLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHg1ZSwgMHgwMCwgMHgwMCwgMHhhMywgMHgxZCwgMHgxMH0sCisJezB4YjEsIDB4NWQsIDB4NjIsIDB4MDQsIDB4MTEsIDB4MDAsIDB4MDAsIDB4MTB9LAogCi0JezB4QjEsIDB4NUQsIDB4MjAsIDB4OTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTB9LAotCXsweEIxLCAweDVELCAweDIwLCAweDExLCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhCMSwgMHg1RCwgMHgwOSwgMHgwMCwgMHg2NCwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MkIsIDB4MDAsIDB4QTAsIDB4MDAsIDB4QjAsIDB4MTB9LAotCXsweEQxLCAweDVELCAweDJELCAweDAwLCAweEEwLCAweDAwLCAweEEwLCAweDEwfSwKKwl7MHhiMSwgMHg1ZCwgMHgyMCwgMHg5MSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjEsIDB4NWQsIDB4MjAsIDB4MTEsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDVkLCAweDA5LCAweDAwLCAweDY0LCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhkMSwgMHg1ZCwgMHgyYiwgMHgwMCwgMHhhMCwgMHgwMCwgMHhiMCwgMHgxMH0sCisJezB4ZDEsIDB4NWQsIDB4MmQsIDB4MDAsIDB4YTAsIDB4MDAsIDB4YTAsIDB4MTB9LAogCi0JezB4QjEsIDB4NUQsIDB4MEEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiBzZW5zb3IgY2xjayA/MiAqLwotCXsweEIxLCAweDVELCAweDA2LCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwfSwKLQl7MHhCMSwgMHg1RCwgMHgwNSwgMHgwMCwgMHgwQSwgMHgwMCwgMHgwMCwgMHgxMH0sCi0JezB4QjEsIDB4NUQsIDB4MDksIDB4MDIsIDB4MzUsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiBleHBvc3VyZSAyICovCisJezB4YjEsIDB4NWQsIDB4MGEsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiBzZW5zb3IgY2xjayA/MiAqLworCXsweGIxLCAweDVkLCAweDA2LCAweDAwLCAweDMwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1ZCwgMHgwNSwgMHgwMCwgMHgwYSwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjEsIDB4NWQsIDB4MDksIDB4MDIsIDB4MzUsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiBleHBvc3VyZSAyICovCiAKLQl7MHhEMSwgMHg1RCwgMHgyQiwgMHgwMCwgMHhCOSwgMHgwMCwgMHhFMywgMHgxMH0sCi0JezB4RDEsIDB4NUQsIDB4MkQsIDB4MDAsIDB4NWYsIDB4MDAsIDB4QjksIDB4MTB9LCAvKiA0MiAqLwotLyoJezB4QjEsIDB4NUQsIDB4MzUsIDB4MDAsIDB4NjcsIDB4MDAsIDB4MDAsIDB4MTB9LCAqIGdhaW4gb3JpZyAqLwotLyoJezB4QjEsIDB4NUQsIDB4MzUsIDB4MDAsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MTB9LCAqIGdhaW4gKi8KLQl7MHhCMSwgMHg1RCwgMHgwNywgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHVwZGF0ZSAqLwotCXsweEIxLCAweDVELCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDEwfSwgLyogc2Vuc29yIG9uICovCisJezB4ZDEsIDB4NWQsIDB4MmIsIDB4MDAsIDB4YjksIDB4MDAsIDB4ZTMsIDB4MTB9LAorCXsweGQxLCAweDVkLCAweDJkLCAweDAwLCAweDVmLCAweDAwLCAweGI5LCAweDEwfSwgLyogNDIgKi8KKy8qCXsweGIxLCAweDVkLCAweDM1LCAweDAwLCAweDY3LCAweDAwLCAweDAwLCAweDEwfSwgKiBnYWluIG9yaWcgKi8KKy8qCXsweGIxLCAweDVkLCAweDM1LCAweDAwLCAweDIwLCAweDAwLCAweDAwLCAweDEwfSwgKiBnYWluICovCisJezB4YjEsIDB4NWQsIDB4MDcsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiB1cGRhdGUgKi8KKwl7MHhiMSwgMHg1ZCwgMHgwNywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHNlbnNvciBvbiAqLwogCXt9CiB9Owotc3RhdGljIGNvbnN0IF9fdTggbW80MDAwX3NlbnNvcl9pbml0W11bOF0gPSB7CitzdGF0aWMgY29uc3QgdTggbW80MDAwX3NlbnNvcl9pbml0W11bOF0gPSB7CiAJezB4YTEsIDB4MjEsIDB4MDEsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogCXsweGExLCAweDIxLCAweDAyLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKIAl7MHhhMSwgMHgyMSwgMHgwMywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCkBAIC00NTUsNyArNTE4LDQ5IEBACiAJezB4YTEsIDB4MjEsIDB4MTEsIDB4MzgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogCXt9CiB9Owotc3RhdGljIF9fdTggb202ODAyX3NlbnNvcl9pbml0W11bOF0gPSB7CitzdGF0aWMgY29uc3QgdTggbXQ5djExMV9zZW5zb3JfaW5pdFtdWzhdID0geworCXsweGIxLCAweDVjLCAweDBkLCAweDAwLCAweDAxLCAweDAwLCAweDAwLCAweDEwfSwgLyogcmVzZXQ/ICovCisJLyogZGVsYXkgMjAgbXMgKi8KKwl7MHhiMSwgMHg1YywgMHgwZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjEsIDB4NWMsIDB4MDEsIDB4MDAsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiBJRlAgc2VsZWN0ICovCisJezB4YjEsIDB4NWMsIDB4MDgsIDB4MDQsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiBvdXRwdXQgZm10IGN0cmwgKi8KKwl7MHhiMSwgMHg1YywgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIG9wIG1vZGUgY3RybCAqLworCXsweGIxLCAweDVjLCAweDAyLCAweDAwLCAweDE2LCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1YywgMHgwMywgMHgwMSwgMHhlMSwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjEsIDB4NWMsIDB4MDQsIDB4MDIsIDB4ODEsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDVjLCAweDA1LCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1YywgMHgwMSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHNlbnNvciBzZWxlY3QgKi8KKwl7MHhiMSwgMHg1YywgMHgwMiwgMHgwMCwgMHgxNiwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjEsIDB4NWMsIDB4MDMsIDB4MDEsIDB4ZTYsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDVjLCAweDA0LCAweDAyLCAweDg2LCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1YywgMHgwNSwgMHgwMCwgMHgwNCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjEsIDB4NWMsIDB4MDYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDVjLCAweDA4LCAweDAwLCAweDA4LCAweDAwLCAweDAwLCAweDEwfSwgLyogcm93IHN0YXJ0ICovCisJezB4YjEsIDB4NWMsIDB4MGUsIDB4MDAsIDB4MDgsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGIxLCAweDVjLCAweDAyLCAweDAwLCAweDE2LCAweDAwLCAweDAwLCAweDEwfSwgLyogY29sIHN0YXJ0ICovCisJezB4YjEsIDB4NWMsIDB4MDMsIDB4MDEsIDB4ZTcsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiB3aW5kb3cgaGVpZ2h0ICovCisJezB4YjEsIDB4NWMsIDB4MDQsIDB4MDIsIDB4ODcsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiB3aW5kb3cgd2lkdGggKi8KKwl7MHhiMSwgMHg1YywgMHgwNywgMHgzMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIG91dHB1dCBjdHJsICovCisJezB4YjEsIDB4NWMsIDB4MGMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiBzaHV0dGVyIGRlbGF5ICovCisJezB4YjEsIDB4NWMsIDB4MTIsIDB4MDAsIDB4YjAsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiB6b29tIGNvbCBzdGFydCAqLworCXsweGIxLCAweDVjLCAweDEzLCAweDAwLCAweDdjLCAweDAwLCAweDAwLCAweDEwfSwgLyogem9vbSByb3cgc3RhcnQgKi8KKwl7MHhiMSwgMHg1YywgMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIGRpZ2l0YWwgem9vbSAqLworCXsweGIxLCAweDVjLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgLyogcmVhZCBtb2RlICovCisJezB4YjEsIDB4NWMsIDB4MjAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCS8qKioqKioqLworCXsweGIxLCAweDVjLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHg1YywgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YjEsIDB4NWMsIDB4MDksIDB4MDEsIDB4MmMsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGQxLCAweDVjLCAweDJiLCAweDAwLCAweDMzLCAweDAwLCAweGEwLCAweDEwfSwgLyogZ3JlZW4xIGdhaW4gKi8KKwl7MHhkMSwgMHg1YywgMHgyZCwgMHgwMCwgMHhhMCwgMHgwMCwgMHgzMywgMHgxMH0sIC8qIHJlZCBnYWluICovCisJLyoqKioqKiovCisJezB4YjEsIDB4NWMsIDB4MDYsIDB4MDAsIDB4MWUsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiB2ZXJ0IGJsYW5raW5nICovCisJezB4YjEsIDB4NWMsIDB4MDUsIDB4MDAsIDB4MGEsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiBob3JpeiBibGFua2luZyAqLworCXsweGQxLCAweDVjLCAweDJjLCAweDAwLCAweGFkLCAweDAwLCAweGFkLCAweDEwfSwgLyogYmx1ZSBnYWluICovCisJezB4YjEsIDB4NWMsIDB4MzUsIDB4MDEsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MTB9LCAvKiBnbG9iYWwgZ2FpbiAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IHU4IG9tNjgwMl9zZW5zb3JfaW5pdFtdWzhdID0gewogCXsweGEwLCAweDM0LCAweDkwLCAweDA1LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKIAl7MHhhMCwgMHgzNCwgMHg0OSwgMHg4NSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCiAJezB4YTAsIDB4MzQsIDB4NWEsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LApAQCAtNDg5LDcgKzU5NCw3IEBACiAvKgl7MHhhMCwgMHgzNCwgMHg2OSwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sICovCiAJe30KIH07Ci1zdGF0aWMgY29uc3QgX191OCBvdjc2MzBfc2Vuc29yX2luaXRbXVs4XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBvdjc2MzBfc2Vuc29yX2luaXRbXVs4XSA9IHsKIAl7MHhhMSwgMHgyMSwgMHg3NiwgMHgwMSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCiAJezB4YTEsIDB4MjEsIDB4MTIsIDB4YzgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogLyogd2luOiBkZWxheSAyMG1zICovCkBAIC01NDMsNyArNjQ4LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IF9fdTggb3Y3NjQ4X3NlbnNvcl9pbml0W11bOF0gPSB7CitzdGF0aWMgY29uc3QgdTggb3Y3NjQ4X3NlbnNvcl9pbml0W11bOF0gPSB7CiAJezB4YTEsIDB4MjEsIDB4NzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogCXsweGExLCAweDIxLCAweDEyLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwJLyogcmVzZXQgKi8KIAl7MHhhMSwgMHgyMSwgMHgxMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCkBAIC01NzIsNyArNjc3LDggQEAKIAl7MHhiMSwgMHgyMSwgMHgyZCwgMHg4NSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCiAvKi4uLiovCiAvKgl7MHhhMSwgMHgyMSwgMHgxMiwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sIGpmbSBkb25lICovCi0vKgl7MHhhMSwgMHgyMSwgMHg3NSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sIGpmbSBkb25lICovCisvKgl7MHhhMSwgMHgyMSwgMHg3NSwgMHgwNiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sICAgKiBDT01OCisJCQkJCQkJICogc2V0IGJ5IHNldHZmbGlwICovCiAJezB4YTEsIDB4MjEsIDB4MTksIDB4MDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAogCXsweGExLCAweDIxLCAweDEwLCAweDMyLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKIC8qCXsweGExLCAweDIxLCAweDE2LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwgamZtIGRvbmUgKi8KQEAgLTU4OSw3ICs2OTUsNyBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBvdjc2NjBfc2Vuc29yX2luaXRbXVs4XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBvdjc2NjBfc2Vuc29yX2luaXRbXVs4XSA9IHsKIAl7MHhhMSwgMHgyMSwgMHgxMiwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sIC8qIHJlc2V0IFNDQ0IgKi8KIC8qCQkoZGVsYXkgMjBtcykgKi8KIAl7MHhhMSwgMHgyMSwgMHgxMiwgMHgwNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCkBAIC02NzgsMjggKzc4NCw5MiBAQAogCXt9CiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBxdGFibGU0W10gPSB7Ci0JMHgwNiwgMHgwNCwgMHgwNCwgMHgwNiwgMHgwNCwgMHgwNCwgMHgwNiwgMHgwNiwgMHgwNiwgMHgwNiwgMHgwOCwgMHgwNiwKLQkweDA2LCAweDA4LCAweDBBLCAweDExLAotCTB4MEEsIDB4MEEsIDB4MDgsIDB4MDgsIDB4MEEsIDB4MTUsIDB4MEYsIDB4MEYsIDB4MEMsIDB4MTEsIDB4MTksIDB4MTUsCi0JMHgxOSwgMHgxOSwgMHgxNywgMHgxNSwKLQkweDE3LCAweDE3LCAweDFCLCAweDFELCAweDI1LCAweDIxLCAweDFCLCAweDFELCAweDIzLCAweDFELCAweDE3LCAweDE3LAotCTB4MjEsIDB4MkUsIDB4MjEsIDB4MjMsCi0JMHgyNywgMHgyOSwgMHgyQywgMHgyQywgMHgyQywgMHgxOSwgMHgxRiwgMHgzMCwgMHgzMiwgMHgyRSwgMHgyOSwgMHgzMiwKLQkweDI1LCAweDI5LCAweDJDLCAweDI5LAotCTB4MDYsIDB4MDgsIDB4MDgsIDB4MEEsIDB4MDgsIDB4MEEsIDB4MTMsIDB4MEEsIDB4MEEsIDB4MTMsIDB4MjksIDB4MUIsCi0JMHgxNywgMHgxQiwgMHgyOSwgMHgyOSwKLQkweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LCAweDI5LAotCTB4MjksIDB4MjksIDB4MjksIDB4MjksCi0JMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwgMHgyOSwKLQkweDI5LCAweDI5LCAweDI5LCAweDI5LAotCTB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksIDB4MjksCi0JMHgyOSwgMHgyOSwgMHgyOSwgMHgyOQorc3RhdGljIGNvbnN0IHU4IHNwODA3MDhfc2Vuc29yX2luaXRbXVs4XSA9IHsKKwl7MHhhMSwgMHgxOCwgMHgwNiwgMHhmOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MDksIDB4MWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDBhLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgwZCwgMHhjMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MGMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDBmLCAweDBmLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgxMCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MTEsIDB4NGUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDEyLCAweDUzLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgxNSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MTgsIDB4MTgsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDE5LCAweDE4LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgxYSwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MWIsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDFjLCAweDI4LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgxZCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MWUsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDI2LCAweDA0LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgyNywgMHgxZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MjgsIDB4NWEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDI5LCAweDI4LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgyYSwgMHg3OCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MmIsIDB4MDEsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDJjLCAweGY3LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgyZCwgMHgyZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MmUsIDB4ZDUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDM5LCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgzYSwgMHg2NywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4M2IsIDB4ODcsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDNjLCAweGEzLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgzZCwgMHhiMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4M2UsIDB4YmMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDNmLCAweGM4LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg0MCwgMHhkNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NDEsIDB4ZGYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDQyLCAweGVhLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg0MywgMHhmNSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NDUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDQ2LCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg0NywgMHg1MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NDgsIDB4MzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDQ5LCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg0ZCwgMHhhZSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NGUsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDRmLCAweDY2LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg1MCwgMHgxYywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NDQsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDRhLCAweDMwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg1MSwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NTIsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDUzLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg1NCwgMHg4MCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NTUsIDB4ODAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDU2LCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg1NywgMHhlMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NTgsIDB4YzAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDU5LCAweGFiLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg1YSwgMHhhMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NWIsIDB4OTksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDVjLCAweDkwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg1ZSwgMHgyNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NWYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDYwLCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg2MSwgMHg3MywgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NjMsIDB4NDIsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDY0LCAweDQyLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg2NSwgMHg0MiwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4NjYsIDB4MjQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDY3LCAweDI0LCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHg2OCwgMHgwOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MmYsIDB4YzksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCS8qKioqKioqKi8KKwl7MHhhMSwgMHgxOCwgMHgwYywgMHgwNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MGMsIDB4MDQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDAzLCAweDAxLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhhMSwgMHgxOCwgMHgwNCwgMHhhNCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJezB4YTEsIDB4MTgsIDB4MTQsIDB4M2YsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCXsweGExLCAweDE4LCAweDVkLCAweDgwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfSwKKwl7MHhiMSwgMHgxOCwgMHgxMSwgMHg0MCwgMHg0MCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJe30KIH07CiAKIC8qIHJlYWQgPGxlbj4gYnl0ZXMgdG8gZ3NwY2FfZGV2LT51c2JfYnVmICovCiBzdGF0aWMgdm9pZCByZWdfcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCSAgX191MTYgdmFsdWUsIGludCBsZW4pCisJCSAgdTE2IHZhbHVlLCBpbnQgbGVuKQogewogI2lmZGVmIEdTUENBX0RFQlVHCiAJaWYgKGxlbiA+IFVTQl9CVUZfU1opIHsKQEAgLTcxOCwxMCArODg4LDEwIEBACiB9CiAKIHN0YXRpYyB2b2lkIHJlZ193MShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCSAgIF9fdTE2IHZhbHVlLAotCQkgICBfX3U4IGRhdGEpCisJCSAgIHUxNiB2YWx1ZSwKKwkJICAgdTggZGF0YSkKIHsKLQlQREVCVUcoRF9VU0JPLCAicmVnX3cxIFslMDJ4XSA9ICUwMngiLCB2YWx1ZSwgZGF0YSk7CisJUERFQlVHKERfVVNCTywgInJlZ193MSBbJTA0eF0gPSAlMDJ4IiwgdmFsdWUsIGRhdGEpOwogCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9IGRhdGE7CiAJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKQEAgLTczMywxMSArOTAzLDExIEBACiAJCQk1MDApOwogfQogc3RhdGljIHZvaWQgcmVnX3coc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkJICBfX3UxNiB2YWx1ZSwKLQkJCSAgY29uc3QgX191OCAqYnVmZmVyLAorCQkJICB1MTYgdmFsdWUsCisJCQkgIGNvbnN0IHU4ICpidWZmZXIsCiAJCQkgIGludCBsZW4pCiB7Ci0JUERFQlVHKERfVVNCTywgInJlZ193IFslMDJ4XSA9ICUwMnggJTAyeCAuLiIsCisJUERFQlVHKERfVVNCTywgInJlZ193IFslMDR4XSA9ICUwMnggJTAyeCAuLiIsCiAJCXZhbHVlLCBidWZmZXJbMF0sIGJ1ZmZlclsxXSk7CiAjaWZkZWYgR1NQQ0FfREVCVUcKIAlpZiAobGVuID4gVVNCX0JVRl9TWikgewpAQCAtNzU2LDcgKzkyNiw3IEBACiB9CiAKIC8qIEkyQyB3cml0ZSAxIGJ5dGUgKi8KLXN0YXRpYyB2b2lkIGkyY193MShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fdTggcmVnLCBfX3U4IHZhbCkKK3N0YXRpYyB2b2lkIGkyY193MShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHU4IHJlZywgdTggdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIApAQCAtNzgxLDcgKzk1MSw3IEBACiAKIC8qIEkyQyB3cml0ZSA4IGJ5dGVzICovCiBzdGF0aWMgdm9pZCBpMmNfdzgoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkgICBjb25zdCBfX3U4ICpidWZmZXIpCisJCSAgIGNvbnN0IHU4ICpidWZmZXIpCiB7CiAJbWVtY3B5KGdzcGNhX2Rldi0+dXNiX2J1ZiwgYnVmZmVyLCA4KTsKIAl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCkBAIC03OTUsMTAgKzk2NSwxMCBAQAogfQogCiAvKiByZWFkIDUgYnl0ZXMgaW4gZ3NwY2FfZGV2LT51c2JfYnVmICovCi1zdGF0aWMgdm9pZCBpMmNfcjUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3U4IHJlZykKK3N0YXRpYyB2b2lkIGkyY19yNShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHU4IHJlZykKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JX191OCBtb2RlWzhdOworCXU4IG1vZGVbOF07CiAKIAltb2RlWzBdID0gMHg4MSB8IDB4MTA7CiAJbW9kZVsxXSA9IHNkLT5pMmNfYmFzZTsKQEAgLTgxNyw3ICs5ODcsNyBAQAogCXJlZ19yKGdzcGNhX2RldiwgMHgwYSwgNSk7CiB9CiAKLXN0YXRpYyBpbnQgcHJvYmVzZW5zb3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQorc3RhdGljIGludCBodjcxMzFyX3Byb2JlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlpMmNfdzEoZ3NwY2FfZGV2LCAweDAyLCAwKTsJCQkvKiBzZW5zb3Igd2FrZXVwICovCiAJbXNsZWVwKDEwKTsKQEAgLTgzOSwxNiArMTAwOSw2NiBAQAogCXJldHVybiAtRU5PREVWOwogfQogCi1zdGF0aWMgaW50IGNvbmZpZ3VyZV9ncGlvKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJCSAgY29uc3QgX191OCAqc245YzF4eCkKK3N0YXRpYyB2b2lkIG1pMDM2MF9wcm9iZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCWNvbnN0IF9fdTggKnJlZzlhOwotCXN0YXRpYyBjb25zdCBfX3U4IHJlZzlhX2RlZltdID0KKwlpbnQgaSwgajsKKwl1MTYgdmFsID0gMDsKKwlzdGF0aWMgY29uc3QgdTggcHJvYmVfdGJbXVs0XVs4XSA9IHsKKwkgICAgewkJCQkJLyogbWkwMzYwICovCisJCXsweGIwLCAweDVkLCAweDA3LCAweDAwLCAweDAyLCAweDAwLCAweDAwLCAweDEwfSwKKwkJezB4OTAsIDB4NWQsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCQl7MHhhMiwgMHg1ZCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJCXsweGIwLCAweDVkLCAweDA3LCAweDAwLCAweDAwLCAweDAwLCAweDAwLCAweDEwfQorCSAgICB9LAorCSAgICB7CQkJCQkvKiBtdDl2MTExICovCisJCXsweGIwLCAweDVjLCAweDAxLCAweDAwLCAweDA0LCAweDAwLCAweDAwLCAweDEwfSwKKwkJezB4OTAsIDB4NWMsIDB4MzYsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTB9LAorCQl7MHhhMiwgMHg1YywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMH0sCisJCXt9CisJICAgIH0sCisJfTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHByb2JlX3RiKTsgaSsrKSB7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4MTcsIDB4NjIpOworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCAweDA4KTsKKwkJZm9yIChqID0gMDsgaiA8IDM7IGorKykKKwkJCWkyY193OChnc3BjYV9kZXYsIHByb2JlX3RiW2ldW2pdKTsKKwkJbXNsZWVwKDIpOworCQlyZWdfcihnc3BjYV9kZXYsIDB4MGEsIDUpOworCQl2YWwgPSAoZ3NwY2FfZGV2LT51c2JfYnVmWzNdIDw8IDgpIHwgZ3NwY2FfZGV2LT51c2JfYnVmWzRdOworCQlpZiAocHJvYmVfdGJbaV1bM11bMF0gIT0gMCkKKwkJCWkyY193OChnc3BjYV9kZXYsIHByb2JlX3RiW2ldWzNdKTsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHgyOSk7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4MTcsIDB4NDIpOworCQlpZiAodmFsICE9IDB4ZmZmZikKKwkJCWJyZWFrOworCX0KKwlzd2l0Y2ggKHZhbCkgeworCWNhc2UgMHg4MjNhOgorCQlQREVCVUcoRF9QUk9CRSwgIlNlbnNvciBtdDl2MTExIik7CisJCXNkLT5zZW5zb3IgPSBTRU5TT1JfTVQ5VjExMTsKKwkJc2QtPmkyY19iYXNlID0gMHg1YzsKKwkJYnJlYWs7CisJY2FzZSAweDgyNDM6CisJCVBERUJVRyhEX1BST0JFLCAiU2Vuc29yIG1pMDM2MCIpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlQREVCVUcoRF9QUk9CRSwgIlVua25vd24gc2Vuc29yICUwNHggLSBmb3JjZWQgdG8gbWkwMzYwIiwgdmFsKTsKKwkJYnJlYWs7CisJfQorfQorCitzdGF0aWMgaW50IGNvbmZpZ3VyZV9ncGlvKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCSAgY29uc3QgdTggKnNuOWMxeHgpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWNvbnN0IHU4ICpyZWc5YTsKKwlzdGF0aWMgY29uc3QgdTggcmVnOWFfZGVmW10gPQogCQl7MHgwOCwgMHg0MCwgMHgyMCwgMHgxMCwgMHgwMCwgMHgwNH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggcmVnOWFfc245YzMyNVtdID0KKwlzdGF0aWMgY29uc3QgdTggcmVnOWFfc245YzMyNVtdID0KIAkJezB4MGEsIDB4NDAsIDB4MzgsIDB4MzAsIDB4MDAsIDB4MjB9OwotCXN0YXRpYyBjb25zdCBfX3U4IHJlZ2Q0W10gPSB7MHg2MCwgMHgwMCwgMHgwMH07CisJc3RhdGljIGNvbnN0IHU4IHJlZ2Q0W10gPSB7MHg2MCwgMHgwMCwgMHgwMH07CiAKIAlyZWdfdzEoZ3NwY2FfZGV2LCAweGYxLCAweDAwKTsKIAlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCBzbjljMXh4WzFdKTsKQEAgLTg3Miw2ICsxMDkyLDEyIEBACiAJcmVnX3coZ3NwY2FfZGV2LCAweDAzLCAmc245YzF4eFszXSwgMHgwZik7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9NVDlWMTExOgorCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCAweDYxKTsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgxNywgMHg2MSk7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NjApOworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAxLCAweDQwKTsKKwkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfT002ODAyOgogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDAyLCAweDcxKTsKIAkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg0Mik7CkBAIC05MDAsMTIgKzExMjYsMjAgQEAKIAkJCWJyZWFrOwogCQl9CiAJCS8qIGZhbGwgdGhydSAqLworCWNhc2UgU0VOU09SX1NQODA3MDg6CisJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NjMpOworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDE3LCAweDIwKTsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg2Mik7CisJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NDIpOworCQltZGVsYXkoMTAwKTsKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMiwgMHg2Mik7CisJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIDB4NDMpOwogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDE3LCAweDYxKTsKIAkJcmVnX3cxKGdzcGNhX2RldiwgMHgwMSwgMHg0Mik7CiAJCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9IVjcxMzFSKSB7Ci0JCQlpZiAocHJvYmVzZW5zb3IoZ3NwY2FfZGV2KSA8IDApCisJCQlpZiAoaHY3MTMxcl9wcm9iZShnc3BjYV9kZXYpIDwgMCkKIAkJCQlyZXR1cm4gLUVOT0RFVjsKIAkJfQogCQlicmVhazsKQEAgLTkxNiw3ICsxMTUwLDcgQEAKIHN0YXRpYyB2b2lkIGh2NzEzMVJfSW5pdFNlbnNvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJaW50IGkgPSAwOwotCXN0YXRpYyBjb25zdCBfX3U4IFNldFNlbnNvckNsa1tdID0JLyogMHgwOCBNY2xrICovCisJc3RhdGljIGNvbnN0IHU4IFNldFNlbnNvckNsa1tdID0JLyogMHgwOCBNY2xrICovCiAJCXsgMHhhMSwgMHgxMSwgMHgwMSwgMHgxOCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCB9OwogCiAJd2hpbGUgKGh2NzEzMXJfc2Vuc29yX2luaXRbaV1bMF0pIHsKQEAgLTk0Niw2ICsxMTgwLDE5IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBtdDl2MTExX0luaXRTZW5zb3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCBpID0gMDsKKworCWkyY193OChnc3BjYV9kZXYsIG10OXYxMTFfc2Vuc29yX2luaXRbaV0pOworCWkrKzsKKwltc2xlZXAoMjApOworCXdoaWxlIChtdDl2MTExX3NlbnNvcl9pbml0W2ldWzBdKSB7CisJCWkyY193OChnc3BjYV9kZXYsIG10OXYxMTFfc2Vuc29yX2luaXRbaV0pOworCQlpKys7CisJfQorfQorCiBzdGF0aWMgdm9pZCBvbTY4MDJfSW5pdFNlbnNvcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJaW50IGkgPSAwOwpAQCAtMTAxMCw2ICsxMjU3LDE5IEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBzcDgwNzA4X0luaXRTZW5zb3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCBpID0gMDsKKworCWkyY193OChnc3BjYV9kZXYsIHNwODA3MDhfc2Vuc29yX2luaXRbaV0pOwkvKiByZXNldCBTQ0NCICovCisJaSsrOworCW1zbGVlcCgyMCk7CisJd2hpbGUgKHNwODA3MDhfc2Vuc29yX2luaXRbaV1bMF0pIHsKKwkJaTJjX3c4KGdzcGNhX2Rldiwgc3A4MDcwOF9zZW5zb3JfaW5pdFtpXSk7CisJCWkrKzsKKwl9Cit9CisKIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgKi8KIHN0YXRpYyBpbnQgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKQEAgLTEwMTgsNyArMTI3OCw2IEBACiAJc3RydWN0IGNhbSAqY2FtOwogCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwotCWNhbS0+ZXBhZGRyID0gMHgwMTsKIAljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7CiAJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHZnYV9tb2RlKTsKIApAQCAtMTAyNiwxNiArMTI4NSwyMSBAQAogCXNkLT5zZW5zb3IgPSBpZC0+ZHJpdmVyX2luZm8gPj4gODsKIAlzZC0+aTJjX2Jhc2UgPSBpZC0+ZHJpdmVyX2luZm87CiAKLQlzZC0+cWluZGV4ID0gNDsJCQkvKiBzZXQgdGhlIHF1YW50aXphdGlvbiB0YWJsZSAqLwogCXNkLT5icmlnaHRuZXNzID0gQlJJR0hUTkVTU19ERUY7CiAJc2QtPmNvbnRyYXN0ID0gQ09OVFJBU1RfREVGOwogCXNkLT5jb2xvcnMgPSBDT0xPUl9ERUY7CiAJc2QtPmJsdWUgPSBCTFVFX0JBTEFOQ0VfREVGOwogCXNkLT5yZWQgPSBSRURfQkFMQU5DRV9ERUY7CisJc2QtPmdhbW1hID0gR0FNTUFfREVGOwogCXNkLT5hdXRvZ2FpbiA9IEFVVE9HQUlOX0RFRjsKIAlzZC0+YWdfY250ID0gLTE7Ci0Jc2QtPnZmbGlwID0gVkZMSVBfREVGOworCWlmIChzZC0+c2Vuc29yICE9IFNFTlNPUl9PVjc2MzApCisJCXNkLT52ZmxpcCA9IDA7CisJZWxzZQorCQlzZC0+dmZsaXAgPSAxOwogCXNkLT5pbmZyYXJlZCA9IElORlJBUkVEX0RFRjsKKwlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfREVGOworCXNkLT5qcGVncXVhbCA9IDgwOwogCiAJZ3NwY2FfZGV2LT5jdHJsX2RpcyA9IGN0cmxfZGlzW3NkLT5zZW5zb3JdOwogCXJldHVybiAwOwpAQCAtMTA0NSw4ICsxMzA5LDggQEAKIHN0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCV9fdTggcmVnR3Bpb1tdID0geyAweDI5LCAweDc0IH07Ci0JX191OCByZWdGMTsKKwl1OCByZWdHcGlvW10gPSB7IDB4MjksIDB4NzQgfTsKKwl1OCByZWdGMTsKIAogCS8qIHNldHVwIGEgc2VsZWN0b3IgYnkgYnJpZGdlICovCiAJcmVnX3cxKGdzcGNhX2RldiwgMHhmMSwgMHgwMSk7CkBAIC0xMDY0LDExICsxMzI4LDE1IEBACiAJY2FzZSBCUklER0VfU045QzEwNToKIAkJaWYgKHJlZ0YxICE9IDB4MTEpCiAJCQlyZXR1cm4gLUVOT0RFVjsKKwkJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX01JMDM2MCkKKwkJCW1pMDM2MF9wcm9iZShnc3BjYV9kZXYpOwogCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIHJlZ0dwaW8sIDIpOwogCQlicmVhazsKIAljYXNlIEJSSURHRV9TTjlDMTIwOgogCQlpZiAocmVnRjEgIT0gMHgxMikKIAkJCXJldHVybiAtRU5PREVWOworCQlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfTUkwMzYwKQorCQkJbWkwMzYwX3Byb2JlKGdzcGNhX2Rldik7CiAJCXJlZ0dwaW9bMV0gPSAweDcwOwogCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDEsIHJlZ0dwaW8sIDIpOwogCQlicmVhazsKQEAgLTEwODYsMjAgKzEzNTQsMTQgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHVuc2lnbmVkIGludCBzZXRleHBvc3VyZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQkJdW5zaWduZWQgaW50IGV4cG8pCitzdGF0aWMgdTMyIHNldGV4cG9zdXJlKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXUzMiBleHBvKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlzdGF0aWMgY29uc3QgX191OCBkb2l0W10gPQkJLyogdXBkYXRlIHNlbnNvciAqLwotCQl7IDB4YjEsIDB4NWQsIDB4MDcsIDB4MDAsIDB4MDMsIDB4MDAsIDB4MDAsIDB4MTAgfTsKLQlzdGF0aWMgY29uc3QgX191OCBzZW5zb3Jnb1tdID0JCS8qIHNlbnNvciBvbiAqLwotCQl7IDB4YjEsIDB4NWQsIDB4MDcsIDB4MDAsIDB4MDIsIDB4MDAsIDB4MDAsIDB4MTAgfTsKLQlzdGF0aWMgY29uc3QgX191OCBnYWluTW9bXSA9Ci0JCXsgMHhhMSwgMHgyMSwgMHgwMCwgMHgxMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxZCB9OwogCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CiAJY2FzZSBTRU5TT1JfSFY3MTMxUjogewotCQlfX3U4IEV4cG9kb2l0W10gPQorCQl1OCBFeHBvZG9pdFtdID0KIAkJCXsgMHhjMSwgMHgxMSwgMHgyNSwgMHgwNywgMHgyNywgMHhjMCwgMHgwMCwgMHgxNiB9OwogCiAJCUV4cG9kb2l0WzNdID0gZXhwbyA+PiAxNjsKQEAgLTExMDksOCArMTM3MSwxMiBAQAogCQlicmVhazsKIAkgICAgfQogCWNhc2UgU0VOU09SX01JMDM2MDogewotCQlfX3U4IGV4cG9NaVtdID0JIC8qIGV4cG9zdXJlIDB4MDYzNSAtPiA0IGZwL3MgMHgxMCAqLworCQl1OCBleHBvTWlbXSA9CQkvKiBleHBvc3VyZSAweDA2MzUgLT4gNCBmcC9zIDB4MTAgKi8KIAkJCXsgMHhiMSwgMHg1ZCwgMHgwOSwgMHgwNiwgMHgzNSwgMHgwMCwgMHgwMCwgMHgxNiB9OworCQlzdGF0aWMgY29uc3QgdTggZG9pdFtdID0JCS8qIHVwZGF0ZSBzZW5zb3IgKi8KKwkJCXsgMHhiMSwgMHg1ZCwgMHgwNywgMHgwMCwgMHgwMywgMHgwMCwgMHgwMCwgMHgxMCB9OworCQlzdGF0aWMgY29uc3QgdTggc2Vuc29yZ29bXSA9CQkvKiBzZW5zb3Igb24gKi8KKwkJCXsgMHhiMSwgMHg1ZCwgMHgwNywgMHgwMCwgMHgwMiwgMHgwMCwgMHgwMCwgMHgxMCB9OwogCiAJCWlmIChleHBvID4gMHgwNjM1KQogCQkJZXhwbyA9IDB4MDYzNTsKQEAgLTExMjQsMTAgKzEzOTAsMTIgQEAKIAkJYnJlYWs7CiAJICAgIH0KIAljYXNlIFNFTlNPUl9NTzQwMDA6IHsKLQkJX191OCBleHBvTW9mW10gPQorCQl1OCBleHBvTW9mW10gPQogCQkJeyAweGExLCAweDIxLCAweDBmLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDEwIH07Ci0JCV9fdTggZXhwb01vMTBbXSA9CisJCXU4IGV4cG9NbzEwW10gPQogCQkJeyAweGExLCAweDIxLCAweDEwLCAweDIwLCAweDAwLCAweDAwLCAweDAwLCAweDEwIH07CisJCXN0YXRpYyBjb25zdCB1OCBnYWluTW9bXSA9CisJCQl7IDB4YTEsIDB4MjEsIDB4MDAsIDB4MTAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MWQgfTsKIAogCQlpZiAoZXhwbyA+IDB4MWZmZikKIAkJCWV4cG8gPSAweDFmZmY7CkBAIC0xMTM5LDE0ICsxNDA3LDI3IEBACiAJCQkJfCAoKGV4cG8gJiAweDAwMDMpIDw8IDQpOwogCQlpMmNfdzgoZ3NwY2FfZGV2LCBleHBvTW8xMCk7CiAJCWkyY193OChnc3BjYV9kZXYsIGdhaW5Nbyk7Ci0JCVBERUJVRyhEX0NPTkYsICJzZXQgZXhwb3N1cmUgJWQiLAorCQlQREVCVUcoRF9GUkFNLCAic2V0IGV4cG9zdXJlICVkIiwKIAkJCSgoZXhwb01vMTBbM10gJiAweDA3KSA8PCAxMCkKIAkJCXwgKGV4cG9Nb2ZbM10gPDwgMikKIAkJCXwgKChleHBvTW8xMFszXSAmIDB4MzApID4+IDQpKTsKIAkJYnJlYWs7CiAJICAgIH0KKwljYXNlIFNFTlNPUl9NVDlWMTExOiB7CisJCXU4IGV4cG9fYzFbXSA9CisJCQl7IDB4YjEsIDB4NWMsIDB4MDksIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAgfTsKKworCQlpZiAoZXhwbyA+IDB4MDI4MCkKKwkJCWV4cG8gPSAweDAyODA7CisJCWVsc2UgaWYgKGV4cG8gPCAweDAwNDApCisJCQlleHBvID0gMHgwMDQwOworCQlleHBvX2MxWzNdID0gZXhwbyA+PiA4OworCQlleHBvX2MxWzRdID0gZXhwbzsKKwkJaTJjX3c4KGdzcGNhX2RldiwgZXhwb19jMSk7CisJCWJyZWFrOworCSAgICB9CiAJY2FzZSBTRU5TT1JfT002ODAyOiB7Ci0JCV9fdTggZ2Fpbk9tW10gPQorCQl1OCBnYWluT21bXSA9CiAJCQl7IDB4YTAsIDB4MzQsIDB4ZTUsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MDAsIDB4MTAgfTsKIAogCQlpZiAoZXhwbyA+IDB4MDNmZikKQEAgLTExNTYsNyArMTQzNyw3IEBACiAJCWdhaW5PbVszXSA9IGV4cG8gPj4gMjsKIAkJaTJjX3c4KGdzcGNhX2RldiwgZ2Fpbk9tKTsKIAkJcmVnX3cxKGdzcGNhX2RldiwgMHg5NiwgKGV4cG8gPj4gNSkgJiAweDFmKTsKLQkJUERFQlVHKERfQ09ORiwgInNldCBleHBvc3VyZSAlZCIsIGdhaW5PbVszXSk7CisJCVBERUJVRyhEX0ZSQU0sICJzZXQgZXhwb3N1cmUgJWQiLCBnYWluT21bM10pOwogCQlicmVhazsKIAkgICAgfQogCX0KQEAgLTExNjcsNyArMTQ0OCw3IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXVuc2lnbmVkIGludCBleHBvOwotCV9fdTggazI7CisJdTggazI7CiAKIAlrMiA9ICgoaW50KSBzZC0+YnJpZ2h0bmVzcyAtIDB4ODAwMCkgPj4gMTA7CiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CkBAIC0xMTg0LDYgKzE0NjUsMTAgQEAKIAkJZXhwbyA9IHNkLT5icmlnaHRuZXNzID4+IDQ7CiAJCXNkLT5leHBvc3VyZSA9IHNldGV4cG9zdXJlKGdzcGNhX2RldiwgZXhwbyk7CiAJCWJyZWFrOworCWNhc2UgU0VOU09SX01UOVYxMTE6CisJCWV4cG8gPSBzZC0+YnJpZ2h0bmVzcyA+PiA4OworCQlzZC0+ZXhwb3N1cmUgPSBzZXRleHBvc3VyZShnc3BjYV9kZXYsIGV4cG8pOworCQlicmVhazsKIAljYXNlIFNFTlNPUl9PTTY4MDI6CiAJCWV4cG8gPSBzZC0+YnJpZ2h0bmVzcyA+PiA2OwogCQlzZC0+ZXhwb3N1cmUgPSBzZXRleHBvc3VyZShnc3BjYV9kZXYsIGV4cG8pOwpAQCAtMTE5MSwxNCArMTQ3NiwxNSBAQAogCQlicmVhazsKIAl9CiAKLQlyZWdfdzEoZ3NwY2FfZGV2LCAweDk2LCBrMik7CQkvKiBjb2xvciBtYXRyaXggWSBvZmZzZXQgKi8KKwlpZiAoc2QtPnNlbnNvciAhPSBTRU5TT1JfTVQ5VjExMSkKKwkJcmVnX3cxKGdzcGNhX2RldiwgMHg5NiwgazIpOwkvKiBjb2xvciBtYXRyaXggWSBvZmZzZXQgKi8KIH0KIAogc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlfX3U4IGsyOwotCV9fdTggY29udHJhc3RbNl07CisJdTggazI7CisJdTggY29udHJhc3RbNl07CiAKIAlrMiA9IHNkLT5jb250cmFzdCAqIDB4MzAgLyAoQ09OVFJBU1RfTUFYICsgMSkgKyAweDEwOwkvKiAxMC4uNDAgKi8KIAljb250cmFzdFswXSA9IChrMiArIDEpIC8gMjsJCS8qIHJlZCAqLwpAQCAtMTIxNCw4ICsxNTAwLDggQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGksIHY7Ci0JX191OCByZWc4YVsxMl07CQkJLyogVSAmIFYgZ2FpbnMgKi8KLQlzdGF0aWMgX19zMTYgdXZbNl0gPSB7CQkvKiBzYW1lIGFzIHJlZzg0IGluIHNpZ25lZCBkZWNpbWFsICovCisJdTggcmVnOGFbMTJdOwkJCS8qIFUgJiBWIGdhaW5zICovCisJc3RhdGljIHMxNiB1dls2XSA9IHsJCS8qIHNhbWUgYXMgcmVnODQgaW4gc2lnbmVkIGRlY2ltYWwgKi8KIAkJLTI0LCAtMzgsIDY0LAkJLyogVVIgVUcgVUIgKi8KIAkJIDYyLCAtNTEsIC05CQkvKiBWUiBWRyBWQiAqLwogCX07CkBAIC0xMjM2LDIyICsxNTIyLDc1IEBACiAJcmVnX3cxKGdzcGNhX2RldiwgMHgwNiwgc2QtPmJsdWUpOwogfQogCitzdGF0aWMgdm9pZCBzZXRnYW1tYShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCBpOworCXU4IGdhbW1hWzE3XTsKKwljb25zdCB1OCAqZ2FtbWFfYmFzZTsKKwlzdGF0aWMgY29uc3QgdTggZGVsdGFbMTddID0geworCQkweDAwLCAweDE0LCAweDFjLCAweDFjLCAweDFjLCAweDFjLCAweDFiLCAweDFhLAorCQkweDE4LCAweDEzLCAweDEwLCAweDBlLCAweDA4LCAweDA3LCAweDA0LCAweDAyLCAweDAwCisJfTsKKworCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX0hWNzEzMVI6CisJY2FzZSBTRU5TT1JfTVQ5VjExMToKKwkJZ2FtbWFfYmFzZSA9IGdhbW1hX3NwZWNfMTsKKwkJYnJlYWs7CisJY2FzZSBTRU5TT1JfU1A4MDcwODoKKwkJZ2FtbWFfYmFzZSA9IGdhbW1hX3NwZWNfMjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZ2FtbWFfYmFzZSA9IGdhbW1hX2RlZjsKKwkJYnJlYWs7CisJfQorCisJZm9yIChpID0gMDsgaSA8IHNpemVvZiBnYW1tYTsgaSsrKQorCQlnYW1tYVtpXSA9IGdhbW1hX2Jhc2VbaV0KKwkJCSsgZGVsdGFbaV0gKiAoc2QtPmdhbW1hIC0gR0FNTUFfREVGKSAvIDMyOworCXJlZ193KGdzcGNhX2RldiwgMHgyMCwgZ2FtbWEsIHNpemVvZiBnYW1tYSk7Cit9CisKIHN0YXRpYyB2b2lkIHNldGF1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKIAlpZiAoZ3NwY2FfZGV2LT5jdHJsX2RpcyAmICgxIDw8IEFVVE9HQUlOX0lEWCkpCiAJCXJldHVybjsKKwlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9PVjc2MzA6CisJY2FzZSBTRU5TT1JfT1Y3NjQ4OiB7CisJCXU4IGNvbWI7CisKKwkJaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX09WNzYzMCkKKwkJCWNvbWIgPSAweGMwOworCQllbHNlCisJCQljb21iID0gMHhhMDsKKwkJaWYgKHNkLT5hdXRvZ2FpbikKKwkJCWNvbWIgfD0gMHgwMjsKKwkJaTJjX3cxKCZzZC0+Z3NwY2FfZGV2LCAweDEzLCBjb21iKTsKKwkJcmV0dXJuOworCSAgICB9CisJfQogCWlmIChzZC0+YXV0b2dhaW4pCiAJCXNkLT5hZ19jbnQgPSBBR19DTlRfU1RBUlQ7CiAJZWxzZQogCQlzZC0+YWdfY250ID0gLTE7CiB9CiAKKy8qIG92NzYzMC9vdjc2NDggb25seSAqLwogc3RhdGljIHZvaWQgc2V0dmZsaXAoc3RydWN0IHNkICpzZCkKIHsKLQlpMmNfdzEoJnNkLT5nc3BjYV9kZXYsIDB4NzUsCQkJLyogQ09NTiAqLwotCQlzZC0+dmZsaXAgPyAweDgyIDogMHgwMik7CisJdTggY29tbjsKKworCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9PVjc2MzApCisJCWNvbW4gPSAweDAyOworCWVsc2UKKwkJY29tbiA9IDB4MDY7CisJaWYgKHNkLT52ZmxpcCkKKwkJY29tbiB8PSAweDgwOworCWkyY193MSgmc2QtPmdzcGNhX2RldiwgMHg3NSwgY29tbik7CiB9CiAKIHN0YXRpYyB2b2lkIHNldGluZnJhcmVkKHN0cnVjdCBzZCAqc2QpCkBAIC0xMjYyLDIwICsxNjAxLDYzIEBACiAJCXNkLT5pbmZyYXJlZCA/IDB4NjYgOiAweDY0KTsKIH0KIAorc3RhdGljIHZvaWQgc2V0anBlZ3F1YWwoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlpbnQgaSwgc2M7CisKKwlpZiAoc2QtPmpwZWdxdWFsIDwgNTApCisJCXNjID0gNTAwMCAvIHNkLT5qcGVncXVhbDsKKwllbHNlCisJCXNjID0gMjAwIC0gc2QtPmpwZWdxdWFsICogMjsKKyNpZiBVU0JfQlVGX1NaIDwgNjQKKyNlcnJvciAiTm8gcm9vbSBlbm91Z2ggaW4gdXNiX2J1ZiBmb3IgcXVhbnRpemF0aW9uIHRhYmxlIgorI2VuZGlmCisJZm9yIChpID0gMDsgaSA8IDY0OyBpKyspCisJCWdzcGNhX2Rldi0+dXNiX2J1ZltpXSA9CisJCQkoanBlZ19oZWFkW0pQRUdfUVQwX09GRlNFVCArIGldICogc2MgKyA1MCkgLyAxMDA7CisJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCTB4MDgsCisJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9JTlRFUkZBQ0UsCisJCQkweDAxMDAsIDAsCisJCQlnc3BjYV9kZXYtPnVzYl9idWYsIDY0LAorCQkJNTAwKTsKKwlmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykKKwkJZ3NwY2FfZGV2LT51c2JfYnVmW2ldID0KKwkJCShqcGVnX2hlYWRbSlBFR19RVDFfT0ZGU0VUICsgaV0gKiBzYyArIDUwKSAvIDEwMDsKKwl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJMHgwOCwKKwkJCVVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0lOVEVSRkFDRSwKKwkJCTB4MDE0MCwgMCwKKwkJCWdzcGNhX2Rldi0+dXNiX2J1ZiwgNjQsCisJCQk1MDApOworCisJc2QtPnJlZzE4IF49IDB4NDA7CisJcmVnX3cxKGdzcGNhX2RldiwgMHgxOCwgc2QtPnJlZzE4KTsKK30KKwogLyogLS0gc3RhcnQgdGhlIGNhbWVyYSAtLSAqLwogc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCBpOwotCV9fdTggcmVnMSwgcmVnMTcsIHJlZzE4OwotCWNvbnN0IF9fdTggKnNuOWMxeHg7CisJdTggcmVnMSwgcmVnMTc7CisJY29uc3QgdTggKnNuOWMxeHg7CiAJaW50IG1vZGU7Ci0Jc3RhdGljIGNvbnN0IF9fdTggQzBbXSA9IHsgMHgyZCwgMHgyZCwgMHgzYSwgMHgwNSwgMHgwNCwgMHgzZiB9OwotCXN0YXRpYyBjb25zdCBfX3U4IENBW10gPSB7IDB4MjgsIDB4ZDgsIDB4MTQsIDB4ZWMgfTsKLQlzdGF0aWMgY29uc3QgX191OCBDRVtdID0geyAweDMyLCAweGRkLCAweDJkLCAweGRkIH07CS8qIE1JMDM2MCAqLwotCXN0YXRpYyBjb25zdCBfX3U4IENFX292NzZ4eFtdID0KKwlzdGF0aWMgY29uc3QgdTggQzBbXSA9IHsgMHgyZCwgMHgyZCwgMHgzYSwgMHgwNSwgMHgwNCwgMHgzZiB9OworCXN0YXRpYyBjb25zdCB1OCBDQVtdID0geyAweDI4LCAweGQ4LCAweDE0LCAweGVjIH07CisJc3RhdGljIGNvbnN0IHU4IENFW10gPSB7IDB4MzIsIDB4ZGQsIDB4MmQsIDB4ZGQgfTsJLyogTUkwMzYwICovCisJc3RhdGljIGNvbnN0IHU4IENFX292NzZ4eFtdID0KIAkJCQl7IDB4MzIsIDB4ZGQsIDB4MzIsIDB4ZGQgfTsKIAorCS8qIGNyZWF0ZSB0aGUgSlBFRyBoZWFkZXIgKi8KKwlzZC0+anBlZ19oZHIgPSBrbWFsbG9jKEpQRUdfSERSX1NaLCBHRlBfS0VSTkVMKTsKKwlqcGVnX2RlZmluZShzZC0+anBlZ19oZHIsIGdzcGNhX2Rldi0+aGVpZ2h0LCBnc3BjYV9kZXYtPndpZHRoLAorCQkJMHgyMSk7CQkvKiBKUEVHIDQyMiAqLworCWpwZWdfc2V0X3F1YWwoc2QtPmpwZWdfaGRyLCBzZC0+cXVhbGl0eSk7CisKIAlzbjljMXh4ID0gc25fdGJbKGludCkgc2QtPnNlbnNvcl07CiAJY29uZmlndXJlX2dwaW8oZ3NwY2FfZGV2LCBzbjljMXh4KTsKIApAQCAtMTI5Miw2ICsxNjc0LDkgQEAKIAlyZWdfdzEoZ3NwY2FfZGV2LCAweGM5LCAweDNjKTsKIAlyZWdfdzEoZ3NwY2FfZGV2LCAweDE4LCBzbjljMXh4WzB4MThdKTsKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9NVDlWMTExOgorCQlyZWcxNyA9IDB4ZTA7CisJCWJyZWFrOwogCWNhc2UgU0VOU09SX09WNzYzMDoKIAkJcmVnMTcgPSAweGUyOwogCQlicmVhazsKQEAgLTEzMTUsMTQgKzE3MDAsMjQgQEAKIAlyZWdfdzEoZ3NwY2FfZGV2LCAweDA3LCBzbjljMXh4WzddKTsJLyogZ3JlZW4gKi8KIAlyZWdfdzEoZ3NwY2FfZGV2LCAweDA2LCBzbjljMXh4WzZdKTsJLyogYmx1ZSAqLwogCXJlZ193MShnc3BjYV9kZXYsIDB4MTQsIHNuOWMxeHhbMHgxNF0pOwotCXJlZ193KGdzcGNhX2RldiwgMHgyMCwgZ2FtbWFfZGVmLCBzaXplb2YgZ2FtbWFfZGVmKTsKKworCXNldGdhbW1hKGdzcGNhX2Rldik7CisKIAlmb3IgKGkgPSAwOyBpIDwgODsgaSsrKQogCQlyZWdfdyhnc3BjYV9kZXYsIDB4ODQsIHJlZzg0LCBzaXplb2YgcmVnODQpOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX01UOVYxMTE6CisJCXJlZ193MShnc3BjYV9kZXYsIDB4OWEsIDB4MDcpOworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDk5LCAweDU5KTsKKwkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfT1Y3NjQ4OgogCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDlhLCAweDBhKTsKIAkJcmVnX3cxKGdzcGNhX2RldiwgMHg5OSwgMHg2MCk7CiAJCWJyZWFrOworCWNhc2UgU0VOU09SX1NQODA3MDg6CisJCXJlZ193MShnc3BjYV9kZXYsIDB4OWEsIDB4MDUpOworCQlyZWdfdzEoZ3NwY2FfZGV2LCAweDk5LCAweDU5KTsKKwkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfT1Y3NjYwOgogCQlpZiAoc2QtPmJyaWRnZSA9PSBCUklER0VfU045QzEyMCkgewogCQkJcmVnX3cxKGdzcGNhX2RldiwgMHg5YSwgMHgwNSk7CkBAIC0xMzU4LDYgKzE3NTMsMTUgQEAKIC8qCQkJcmVnMSA9IDB4MDY7CSAqIDY0MCBjbGsgMjRNeiAoZG9uZSkgKi8KIAkJfQogCQlicmVhazsKKwljYXNlIFNFTlNPUl9NVDlWMTExOgorCQltdDl2MTExX0luaXRTZW5zb3IoZ3NwY2FfZGV2KTsKKwkJaWYgKG1vZGUpIHsKKwkJCXJlZzEgPSAweDA0OwkvKiAzMjAgY2xrIDQ4TWh6ICovCisJCX0gZWxzZSB7CisvKgkJCXJlZzEgPSAweDA2OwkgKiA2NDAgY2xrIDI0TXogKGRvbmUpICovCisJCQlyZWcxNyA9IDB4YzI7CisJCX0KKwkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfT002ODAyOgogCQlvbTY4MDJfSW5pdFNlbnNvcihnc3BjYV9kZXYpOwogCQlyZWcxNyA9IDB4NjQ7CQkvKiA2NDAgTUNLU0laRSAqLwpAQCAtMTM3Myw4ICsxNzc3LDcgQEAKIAkJcmVnMTcgPSAweDIxOwogLyoJCXJlZzEgPSAweDQyOwkJICogNDIgLSA0Nj8gKi8KIAkJYnJlYWs7Ci0JZGVmYXVsdDoKLS8qCWNhc2UgU0VOU09SX09WNzY2MDogKi8KKwljYXNlIFNFTlNPUl9PVjc2NjA6CiAJCW92NzY2MF9Jbml0U2Vuc29yKGdzcGNhX2Rldik7CiAJCWlmIChzZC0+YnJpZGdlID09IEJSSURHRV9TTjlDMTIwKSB7CiAJCQlpZiAobW9kZSkgewkJLyogMzIweDI0MCAtIDE2MHgxMjAgKi8KQEAgLTEzODcsNiArMTc5MCwxNiBAQAogCQkJCQkgKiBpbnZlcnNlIHBvd2VyIGRvd24gKi8KIAkJfQogCQlicmVhazsKKwlkZWZhdWx0OgorLyoJY2FzZSBTRU5TT1JfU1A4MDcwODogKi8KKwkJc3A4MDcwOF9Jbml0U2Vuc29yKGdzcGNhX2Rldik7CisJCWlmIChtb2RlKSB7CisvKj8/CQkJcmVnMSA9IDB4MDQ7CSAqIDMyMCBjbGsgNDhNaHogKi8KKwkJfSBlbHNlIHsKKwkJCXJlZzEgPSAweDQ2OwkgLyogNjQwIGNsayA0OE16ICovCisJCQlyZWcxNyA9IDB4YTI7CisJCX0KKwkJYnJlYWs7CiAJfQogCXJlZ193KGdzcGNhX2RldiwgMHhjMCwgQzAsIDYpOwogCXJlZ193KGdzcGNhX2RldiwgMHhjYSwgQ0EsIDQpOwpAQCAtMTQwMywyMCArMTgxNiwxMyBAQAogCX0KIAogCS8qIGhlcmUgY2hhbmdlIHNpemUgbW9kZSAwIC0+IFZHQTsgMSAtPiBDSUYgKi8KLQlyZWcxOCA9IHNuOWMxeHhbMHgxOF0gfCAobW9kZSA8PCA0KTsKLQlyZWdfdzEoZ3NwY2FfZGV2LCAweDE4LCByZWcxOCB8IDB4NDApOwotCi0JcmVnX3coZ3NwY2FfZGV2LCAweDEwMCwgcXRhYmxlNCwgMHg0MCk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDE0MCwgcXRhYmxlNCArIDB4NDAsIDB4NDApOwotCi0JcmVnX3cxKGdzcGNhX2RldiwgMHgxOCwgcmVnMTgpOworCXNkLT5yZWcxOCA9IHNuOWMxeHhbMHgxOF0gfCAobW9kZSA8PCA0KSB8IDB4NDA7CisJcmVnX3cxKGdzcGNhX2RldiwgMHgxOCwgc2QtPnJlZzE4KTsKKwlzZXRqcGVncXVhbChnc3BjYV9kZXYpOwogCiAJcmVnX3cxKGdzcGNhX2RldiwgMHgxNywgcmVnMTcpOwogCXJlZ193MShnc3BjYV9kZXYsIDB4MDEsIHJlZzEpOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgewotCWNhc2UgU0VOU09SX01JMDM2MDoKLQkJc2V0aW5mcmFyZWQoc2QpOwotCQlicmVhazsKIAljYXNlIFNFTlNPUl9PVjc2MzA6CiAJCXNldHZmbGlwKHNkKTsKIAkJYnJlYWs7CkBAIC0xNDMwLDE0ICsxODM2LDE0IEBACiBzdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCXN0YXRpYyBjb25zdCBfX3U4IHN0b3BodjcxMzFbXSA9CisJc3RhdGljIGNvbnN0IHU4IHN0b3BodjcxMzFbXSA9CiAJCXsgMHhhMSwgMHgxMSwgMHgwMiwgMHgwOSwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCB9OwotCXN0YXRpYyBjb25zdCBfX3U4IHN0b3BtaTAzNjBbXSA9CisJc3RhdGljIGNvbnN0IHU4IHN0b3BtaTAzNjBbXSA9CiAJCXsgMHhiMSwgMHg1ZCwgMHgwNywgMHgwMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCB9OwotCXN0YXRpYyBjb25zdCBfX3U4IHN0b3Bvdjc2NDhbXSA9CisJc3RhdGljIGNvbnN0IHU4IHN0b3Bvdjc2NDhbXSA9CiAJCXsgMHhhMSwgMHgyMSwgMHg3NiwgMHgyMCwgMHgwMCwgMHgwMCwgMHgwMCwgMHgxMCB9OwotCV9fdTggZGF0YTsKLQljb25zdCBfX3U4ICpzbjljMXh4OworCXU4IGRhdGE7CisJY29uc3QgdTggKnNuOWMxeHg7CiAKIAlkYXRhID0gMHgwYjsKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKQEAgLTE0NTIsNiArMTg1OCw3IEBACiAJY2FzZSBTRU5TT1JfT1Y3NjQ4OgogCQlpMmNfdzgoZ3NwY2FfZGV2LCBzdG9wb3Y3NjQ4KTsKIAkJLyogZmFsbCB0aHJ1ICovCisJY2FzZSBTRU5TT1JfTVQ5VjExMToKIAljYXNlIFNFTlNPUl9PVjc2MzA6CiAJCWRhdGEgPSAweDI5OwogCQlicmVhazsKQEAgLTE0NjgsMTMgKzE4NzUsMjAgQEAKIAlyZWdfdzEoZ3NwY2FfZGV2LCAweGYxLCAweDAwKTsKIH0KIAorc3RhdGljIHZvaWQgc2Rfc3RvcDAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWtmcmVlKHNkLT5qcGVnX2hkcik7Cit9CisKIHN0YXRpYyB2b2lkIGRvX2F1dG9nYWluKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGRlbHRhOwogCWludCBleHBvdGltZXM7Ci0JX191OCBsdW1hX21lYW4gPSAxMzA7Ci0JX191OCBsdW1hX2RlbHRhID0gMjA7CisJdTggbHVtYV9tZWFuID0gMTMwOworCXU4IGx1bWFfZGVsdGEgPSAyMDsKIAogCS8qIFRoYW5rcyBTLiwgd2l0aG91dCB5b3VyIGFkdmljZSwgYXV0b2JyaWdodCBzaG91bGQgbm90IHdvcmsgOikgKi8KIAlpZiAoc2QtPmFnX2NudCA8IDApCkBAIC0xNDk5LDYgKzE5MTMsNyBAQAogCQlkZWZhdWx0OgogLyoJCWNhc2UgU0VOU09SX01PNDAwMDogKi8KIC8qCQljYXNlIFNFTlNPUl9NSTAzNjA6ICovCisvKgkJY2FzZSBTRU5TT1JfTVQ5VjExMTogKi8KIC8qCQljYXNlIFNFTlNPUl9PTTY4MDI6ICovCiAJCQlleHBvdGltZXMgPSBzZC0+ZXhwb3N1cmU7CiAJCQlleHBvdGltZXMgKz0gKGx1bWFfbWVhbiAtIGRlbHRhKSA+PiA2OwpAQCAtMTUxNiw3ICsxOTMxLDcgQEAKIC8qIFRoaXMgZnVuY3Rpb24gaXMgcnVuIGF0IGludGVycnVwdCBsZXZlbC4gKi8KIHN0YXRpYyB2b2lkIHNkX3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWUsCS8qIHRhcmdldCAqLwotCQkJX191OCAqZGF0YSwJCQkvKiBpc29jIHBhY2tldCAqLworCQkJdTggKmRhdGEsCQkJLyogaXNvYyBwYWNrZXQgKi8KIAkJCWludCBsZW4pCQkJLyogaXNvIHBhY2tldCBsZW5ndGggKi8KIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC0xNTUwLDcgKzE5NjUsOCBAQAogCWlmIChnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPT0gTEFTVF9QQUNLRVQpIHsKIAogCQkvKiBwdXQgdGhlIEpQRUcgNDIyIGhlYWRlciAqLwotCQlqcGVnX3B1dF9oZWFkZXIoZ3NwY2FfZGV2LCBmcmFtZSwgc2QtPnFpbmRleCwgMHgyMSk7CisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsCisJCQlzZC0+anBlZ19oZHIsIEpQRUdfSERSX1NaKTsKIAl9CiAJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgSU5URVJfUEFDS0VULCBmcmFtZSwgZGF0YSwgbGVuKTsKIH0KQEAgLTE2NDUsNiArMjA2MSwyNCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNkX3NldGdhbW1hKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCXNkLT5nYW1tYSA9IHZhbDsKKwlpZiAoZ3NwY2FfZGV2LT5zdHJlYW1pbmcpCisJCXNldGdhbW1hKGdzcGNhX2Rldik7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2RfZ2V0Z2FtbWEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCSp2YWwgPSBzZC0+Z2FtbWE7CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBpbnQgc2Rfc2V0YXV0b2dhaW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtMTY5OSw2ICsyMTMzLDM0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2Rfc2V0X2pjb21wKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqamNvbXApCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJaWYgKGpjb21wLT5xdWFsaXR5IDwgUVVBTElUWV9NSU4pCisJCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9NSU47CisJZWxzZSBpZiAoamNvbXAtPnF1YWxpdHkgPiBRVUFMSVRZX01BWCkKKwkJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX01BWDsKKwllbHNlCisJCXNkLT5xdWFsaXR5ID0gamNvbXAtPnF1YWxpdHk7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldF9qY29tcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKmpjb21wKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCW1lbXNldChqY29tcCwgMCwgc2l6ZW9mICpqY29tcCk7CisJamNvbXAtPnF1YWxpdHkgPSBzZC0+cXVhbGl0eTsKKwlqY29tcC0+anBlZ19tYXJrZXJzID0gVjRMMl9KUEVHX01BUktFUl9ESFQKKwkJCXwgVjRMMl9KUEVHX01BUktFUl9EUVQ7CisJcmV0dXJuIDA7Cit9CisKIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCkBAIC0xNzA4LDggKzIxNzAsMTEgQEAKIAkuaW5pdCA9IHNkX2luaXQsCiAJLnN0YXJ0ID0gc2Rfc3RhcnQsCiAJLnN0b3BOID0gc2Rfc3RvcE4sCisJLnN0b3AwID0gc2Rfc3RvcDAsCiAJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCiAJLmRxX2NhbGxiYWNrID0gZG9fYXV0b2dhaW4sCisJLmdldF9qY29tcCA9IHNkX2dldF9qY29tcCwKKwkuc2V0X2pjb21wID0gc2Rfc2V0X2pjb21wLAogfTsKIAogLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCkBAIC0xNzI0LDkgKzIxODksNyBAQAogI2VuZGlmCiAJe1VTQl9ERVZJQ0UoMHgwNDVlLCAweDAwZjUpLCBCU0koU045QzEwNSwgT1Y3NjYwLCAweDIxKX0sCiAJe1VTQl9ERVZJQ0UoMHgwNDVlLCAweDAwZjcpLCBCU0koU045QzEwNSwgT1Y3NjYwLCAweDIxKX0sCi0jaWYgIWRlZmluZWQgQ09ORklHX1VTQl9TTjlDMTAyICYmICFkZWZpbmVkIENPTkZJR19VU0JfU045QzEwMl9NT0RVTEUKIAl7VVNCX0RFVklDRSgweDA0NzEsIDB4MDMyNyksIEJTSShTTjlDMTA1LCBNSTAzNjAsIDB4NWQpfSwKLSNlbmRpZgogCXtVU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzI4KSwgQlNJKFNOOUMxMDUsIE1JMDM2MCwgMHg1ZCl9LAogCXtVU0JfREVWSUNFKDB4MDQ3MSwgMHgwMzMwKSwgQlNJKFNOOUMxMDUsIE1JMDM2MCwgMHg1ZCl9LAogCXtVU0JfREVWSUNFKDB4MDZmOCwgMHgzMDA0KSwgQlNJKFNOOUMxMDUsIE9WNzY2MCwgMHgyMSl9LApAQCAtMTc2NCwxMCArMjIyNywxMCBAQAogCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTNhKSwgQlNJKFNOOUMxMjAsIE9WNzY0OCwgMHgyMSl9LAogI2lmICFkZWZpbmVkIENPTkZJR19VU0JfU045QzEwMiAmJiAhZGVmaW5lZCBDT05GSUdfVVNCX1NOOUMxMDJfTU9EVUxFCiAJe1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxM2IpLCBCU0koU045QzEyMCwgT1Y3NjYwLCAweDIxKX0sCisjZW5kaWYKIAl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjEzYyksIEJTSShTTjlDMTIwLCBIVjcxMzFSLCAweDExKX0sCiAvKgl7VVNCX0RFVklDRSgweDBjNDUsIDB4NjEzZSksIEJTSShTTjlDMTIwLCBPVjc2MzAsIDB4Pz8pfSwgKi8KLSNlbmRpZgotCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTQzKSwgQlNJKFNOOUMxMjAsIE1JMDM2MCwgMHg1ZCl9LAorCXtVU0JfREVWSUNFKDB4MGM0NSwgMHg2MTQzKSwgQlNJKFNOOUMxMjAsIFNQODA3MDgsIDB4MTgpfSwKIAl7fQogfTsKIE1PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfdGFibGUpOwpAQCAtMTc5NCw4ICsyMjU3LDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJaW5mbygicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTAwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDAuYwppbmRleCA5NDJmMDRjLi42ZjM4ZmE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDAuYwpAQCAtMzgsOCArMzgsMTEgQEAKIAl1bnNpZ25lZCBjaGFyIGJyaWdodG5lc3M7CiAJdW5zaWduZWQgY2hhciBjb250cmFzdDsKIAl1bnNpZ25lZCBjaGFyIGNvbG9yczsKKwl1OCBxdWFsaXR5OworI2RlZmluZSBRVUFMSVRZX01JTiA3MAorI2RlZmluZSBRVUFMSVRZX01BWCA5NQorI2RlZmluZSBRVUFMSVRZX0RFRiA4NQogCi0JY2hhciBxaW5kZXg7CiAJY2hhciBzdWJ0eXBlOwogI2RlZmluZSBBZ2ZhQ2wyMCAwCiAjZGVmaW5lIEFpcHRla1BvY2tldERWIDEKQEAgLTU2LDYgKzU5LDggQEAKICNkZWZpbmUgT3B0aW1lZGlhIDEyCiAjZGVmaW5lIFBhbG1QaXhEQzg1IDEzCiAjZGVmaW5lIFRvcHRyb0luZHVzIDE0CisKKwl1OCAqanBlZ19oZHI7CiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCkBAIC02MjksNyArNjM0LDYgQEAKIAlzdHJ1Y3QgY2FtICpjYW07CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDAxOwogCXNkLT5zdWJ0eXBlID0gaWQtPmRyaXZlcl9pbmZvOwogCWlmIChzZC0+c3VidHlwZSAhPSBMb2dpdGVjaENsaWNrU21hcnQzMTApIHsKIAkJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlOwpAQCAtNjM4LDEwICs2NDIsMTAgQEAKIAkJY2FtLT5jYW1fbW9kZSA9IHNpZl9tb2RlOwogCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUoc2lmX21vZGUpOwogCX0KLQlzZC0+cWluZGV4ID0gNTsKIAlzZC0+YnJpZ2h0bmVzcyA9IEJSSUdIVE5FU1NfREVGOwogCXNkLT5jb250cmFzdCA9IENPTlRSQVNUX0RFRjsKIAlzZC0+Y29sb3JzID0gQ09MT1JfREVGOworCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9ERUY7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY2Nyw2ICs2NzEsMTIgQEAKIAlfX3U4IERhdGE7CiAJX191OCB4bXVsdCwgeW11bHQ7CiAKKwkvKiBjcmVhdGUgdGhlIEpQRUcgaGVhZGVyICovCisJc2QtPmpwZWdfaGRyID0ga21hbGxvYyhKUEVHX0hEUl9TWiwgR0ZQX0tFUk5FTCk7CisJanBlZ19kZWZpbmUoc2QtPmpwZWdfaGRyLCBnc3BjYV9kZXYtPmhlaWdodCwgZ3NwY2FfZGV2LT53aWR0aCwKKwkJCTB4MjIpOwkJLyogSlBFRyA0MTEgKi8KKwlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOworCiAJaWYgKHNkLT5zdWJ0eXBlID09IExvZ2l0ZWNoQ2xpY2tTbWFydDMxMCkgewogCQl4bXVsdCA9IDB4MTY7CiAJCXltdWx0ID0gMHgxMjsKQEAgLTcxMyw3ICs3MjMsOCBAQAogCQl3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCBzcGNhNTAwX3Zpc3VhbF9kZWZhdWx0cyk7CiAJCXNwY2E1MDBfc2V0bW9kZShnc3BjYV9kZXYsIHhtdWx0LCB5bXVsdCk7CiAJCS8qIGVuYWJsZSBkcm9wIHBhY2tldCAqLwotCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODUwYSwgMHgwMDAxKTsKKwkJZXJyID0gcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDg1MGEsIDB4MDAwMSk7CisJCWlmIChlcnIgPCAwKQogCQkJUERFQlVHKERfRVJSLCAiZmFpbGVkIHRvIGVuYWJsZSBkcm9wIHBhY2tldCIpOwogCQlyZWdfdyhnc3BjYV9kZXYsIDB4MDAsIDB4ODg4MCwgMyk7CiAJCWVyciA9IHNwY2E1MHhfc2V0dXBfcXRhYmxlKGdzcGNhX2RldiwKQEAgLTg4MSw2ICs4OTIsMTMgQEAKIAkJZ3NwY2FfZGV2LT51c2JfYnVmWzBdKTsKIH0KIAorc3RhdGljIHZvaWQgc2Rfc3RvcDAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWtmcmVlKHNkLT5qcGVnX2hkcik7Cit9CisKIHN0YXRpYyB2b2lkIHNkX3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWUsCS8qIHRhcmdldCAqLwogCQkJX191OCAqZGF0YSwJCQkvKiBpc29jIHBhY2tldCAqLwpAQCAtOTAxLDcgKzkxOSw4IEBACiAJCQkJCWZmZDksIDIpOwogCiAJCS8qIHB1dCB0aGUgSlBFRyBoZWFkZXIgaW4gdGhlIG5ldyBmcmFtZSAqLwotCQlqcGVnX3B1dF9oZWFkZXIoZ3NwY2FfZGV2LCBmcmFtZSwgc2QtPnFpbmRleCwgMHgyMik7CisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsCisJCQlzZC0+anBlZ19oZHIsIEpQRUdfSERSX1NaKTsKIAogCQlkYXRhICs9IFNQQ0E1MDBfT0ZGU0VUX0RBVEE7CiAJCWxlbiAtPSBTUENBNTAwX09GRlNFVF9EQVRBOwpAQCAtOTM3LDE2ICs5NTYsNiBAQAogCQkJKF9fdTgpIChzZC0+YnJpZ2h0bmVzcyAtIDEyOCkpOwogfQogCi1zdGF0aWMgdm9pZCBnZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IHJldDsKLQotCXJldCA9IHJlZ19yXzEyKGdzcGNhX2RldiwgMHgwMCwgMHg4MTY3LCAxKTsKLQlpZiAocmV0ID49IDApCi0JCXNkLT5icmlnaHRuZXNzID0gcmV0ICsgMTI4OwotfQotCiBzdGF0aWMgdm9pZCBzZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtOTU0LDE2ICs5NjMsNiBAQAogCXJlZ193KGdzcGNhX2RldiwgMHgwMCwgMHg4MTY4LCBzZC0+Y29udHJhc3QpOwogfQogCi1zdGF0aWMgdm9pZCBnZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCWludCByZXQ7Ci0KLQlyZXQgPSByZWdfcl8xMihnc3BjYV9kZXYsIDB4MCwgMHg4MTY4LCAxKTsKLQlpZiAocmV0ID49IDApCi0JCXNkLT5jb250cmFzdCA9IHJldDsKLX0KLQogc3RhdGljIHZvaWQgc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC05NzEsMTYgKzk3MCw2IEBACiAJcmVnX3coZ3NwY2FfZGV2LCAweDAwLCAweDgxNjksIHNkLT5jb2xvcnMpOwogfQogCi1zdGF0aWMgdm9pZCBnZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgcmV0OwotCi0JcmV0ID0gcmVnX3JfMTIoZ3NwY2FfZGV2LCAweDAsIDB4ODE2OSwgMSk7Ci0JaWYgKHJldCA+PSAwKQotCQlzZC0+Y29sb3JzID0gcmV0OwotfQotCiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtOTk1LDcgKzk4NCw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOwogCSp2YWwgPSBzZC0+YnJpZ2h0bmVzczsKIAlyZXR1cm4gMDsKIH0KQEAgLTEwMTQsNyArMTAwMiw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKIAkqdmFsID0gc2QtPmNvbnRyYXN0OwogCXJldHVybiAwOwogfQpAQCAtMTAzMywxMSArMTAyMCwzOCBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCWdldGNvbG9ycyhnc3BjYV9kZXYpOwogCSp2YWwgPSBzZC0+Y29sb3JzOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNkX3NldF9qY29tcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKmpjb21wKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChqY29tcC0+cXVhbGl0eSA8IFFVQUxJVFlfTUlOKQorCQlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfTUlOOworCWVsc2UgaWYgKGpjb21wLT5xdWFsaXR5ID4gUVVBTElUWV9NQVgpCisJCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9NQVg7CisJZWxzZQorCQlzZC0+cXVhbGl0eSA9IGpjb21wLT5xdWFsaXR5OworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJanBlZ19zZXRfcXVhbChzZC0+anBlZ19oZHIsIHNkLT5xdWFsaXR5KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRfamNvbXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpqY29tcCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwltZW1zZXQoamNvbXAsIDAsIHNpemVvZiAqamNvbXApOworCWpjb21wLT5xdWFsaXR5ID0gc2QtPnF1YWxpdHk7CisJamNvbXAtPmpwZWdfbWFya2VycyA9IFY0TDJfSlBFR19NQVJLRVJfREhUCisJCQl8IFY0TDJfSlBFR19NQVJLRVJfRFFUOworCXJldHVybiAwOworfQorCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCiBzdGF0aWMgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKIAkubmFtZSA9IE1PRFVMRV9OQU1FLApAQCAtMTA0Nyw3ICsxMDYxLDEwIEBACiAJLmluaXQgPSBzZF9pbml0LAogCS5zdGFydCA9IHNkX3N0YXJ0LAogCS5zdG9wTiA9IHNkX3N0b3BOLAorCS5zdG9wMCA9IHNkX3N0b3AwLAogCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAorCS5nZXRfamNvbXAgPSBzZF9nZXRfamNvbXAsCisJLnNldF9qY29tcCA9IHNkX3NldF9qY29tcCwKIH07CiAKIC8qIC0tIG1vZHVsZSBpbml0aWFsaXNhdGlvbiAtLSAqLwpAQCAtMTA5Myw4ICsxMTEwLDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMS5jCmluZGV4IDgyZTNlM2UuLmQ0OGIyN2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwMS5jCkBAIC0xODgzLDEwICsxODgzLDYgQEAKIAlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIFNQQ0E1MDFfUkVHX0NDRFNQLCAweDEyLCBzZC0+YnJpZ2h0bmVzcyk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotfQotCiBzdGF0aWMgdm9pZCBzZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtMTg5NywxMCArMTg5Myw2IEBACiAJCQkJICBzZC0+Y29udHJhc3QgJiAweGZmKTsKIH0KIAotc3RhdGljIHZvaWQgZ2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotfQotCiBzdGF0aWMgdm9pZCBzZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTE5MDgsMTAgKzE5MDAsNiBAQAogCXJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgU1BDQTUwMV9SRUdfQ0NEU1AsIDB4MGMsIHNkLT5jb2xvcnMpOwogfQogCi1zdGF0aWMgdm9pZCBnZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotfQotCiBzdGF0aWMgdm9pZCBzZXRibHVlX2JhbGFuY2Uoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTE5MzQsNyArMTkyMiw2IEBACiAJc3RydWN0IGNhbSAqY2FtOwogCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwotCWNhbS0+ZXBhZGRyID0gMHgwMTsKIAljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7CiAJY2FtLT5ubW9kZXMgPSBzaXplb2YgdmdhX21vZGUgLyBzaXplb2YgdmdhX21vZGVbMF07CiAJc2QtPnN1YnR5cGUgPSBpZC0+ZHJpdmVyX2luZm87CkBAIC0yMDg0LDcgKzIwNzEsNiBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCWdldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKIAkqdmFsID0gc2QtPmJyaWdodG5lc3M7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMTAzLDcgKzIwODksNiBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCWdldGNvbnRyYXN0KGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5jb250cmFzdDsKIAlyZXR1cm4gMDsKIH0KQEAgLTIxMjIsNyArMjEwNyw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0Y29sb3JzKGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5jb2xvcnM7CiAJcmV0dXJuIDA7CiB9CkBAIC0yMjExLDggKzIxOTUsMTAgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTUwNS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA1LmMKaW5kZXggMmEzM2EyOS4uMmFjZWM1OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA1LmMKQEAgLTMxLDkgKzMxLDkgQEAKIHN0cnVjdCBzZCB7CiAJc3RydWN0IGdzcGNhX2RldiBnc3BjYV9kZXY7CQkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCiAKLQl1bnNpZ25lZCBjaGFyIGJyaWdodG5lc3M7CisJdTggYnJpZ2h0bmVzczsKIAotCWNoYXIgc3VidHlwZTsKKwl1OCBzdWJ0eXBlOwogI2RlZmluZSBJbnRlbFBDQ2FtZXJhUHJvIDAKICNkZWZpbmUgTnh1bHRyYSAxCiB9OwpAQCAtNDMsNyArNDMsNiBAQAogc3RhdGljIGludCBzZF9nZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKIHN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewotI2RlZmluZSBTRF9CUklHSFRORVNTIDAKIAl7CiAJICAgIHsKIAkJLmlkICAgICAgPSBWNEwyX0NJRF9CUklHSFRORVNTLApAQCAtNTIsNyArNTEsOCBAQAogCQkubWluaW11bSA9IDAsCiAJCS5tYXhpbXVtID0gMjU1LAogCQkuc3RlcCAgICA9IDEsCi0JCS5kZWZhdWx0X3ZhbHVlID0gMTI3LAorI2RlZmluZSBCUklHSFRORVNTX0RFRiAxMjcKKwkJLmRlZmF1bHRfdmFsdWUgPSBCUklHSFRORVNTX0RFRiwKIAkgICAgfSwKIAkgICAgLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCiAJICAgIC5nZXQgPSBzZF9nZXRicmlnaHRuZXNzLApAQCAtNjQsMTIgKzY0LDEyIEBACiAJCS5ieXRlc3BlcmxpbmUgPSAxNjAsCiAJCS5zaXplaW1hZ2UgPSAxNjAgKiAxMjAgKiAzIC8gMiwKIAkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKLQkJLnByaXYgPSA1fSwKKwkJLnByaXYgPSA0fSwKIAl7MTc2LCAxNDQsIFY0TDJfUElYX0ZNVF9TUENBNTA1LCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAxNzYsCiAJCS5zaXplaW1hZ2UgPSAxNzYgKiAxNDQgKiAzIC8gMiwKIAkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKLQkJLnByaXYgPSA0fSwKKwkJLnByaXYgPSAzfSwKIAl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9TUENBNTA1LCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCiAJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAzIC8gMiwKQEAgLTkzLDYgKzkzLDcgQEAKIAogI2RlZmluZSBTUENBNTBYX1VTQl9DVFJMIDB4MDAJLyogc3BjYTUwNSAqLwogI2RlZmluZSBTUENBNTBYX0NVU0JfRU5BQkxFIDB4MDEgLyogc3BjYTUwNSAqLworCiAjZGVmaW5lIFNQQ0E1MFhfUkVHX0dMT0JBTCAweDAzCS8qIHNwY2E1MDUgKi8KICNkZWZpbmUgU1BDQTUwWF9HTUlTQzBfSURTRUwgMHgwMSAvKiBHbG9iYWwgY29udHJvbCBkZXZpY2UgSUQgc2VsZWN0IHNwY2E1MDUgKi8KICNkZWZpbmUgU1BDQTUwWF9HTE9CQUxfTUlTQzAgMHgwMCAvKiBHbG9iYWwgY29udHJvbCBtaXNjZWxsYW5lb3VzIDAgc3BjYTUwNSAqLwpAQCAtMTAxLDIzMCArMTAyLDIzMCBAQAogI2RlZmluZSBTUENBNTBYX0dMT0JBTF9NSVNDMyAweDAzIC8qIDUwNSAqLwogI2RlZmluZSBTUENBNTBYX0dNSVNDM19TQUE3MTEzUlNUIDB4MjAJLyogTm90IHN1cmUgYWJvdXQgdGhpcyBvbmUgc3BjYTUwNSAqLwogCisvKiBJbWFnZSBmb3JtYXQgYW5kIGNvbXByZXNzaW9uIGNvbnRyb2wgKi8KKyNkZWZpbmUgU1BDQTUwWF9SRUdfQ09NUFJFU1MgMHgwNAorCiAvKgogICogRGF0YSB0byBpbml0aWFsaXplIGEgU1BDQTUwNS4gQ29tbW9uIHRvIHRoZSBDQ0QgYW5kIGV4dGVybmFsIG1vZGVzCiAgKi8KLXN0YXRpYyBjb25zdCBfX3UxNiBzcGNhNTA1X2luaXRfZGF0YVtdWzNdID0gewotCS8qIGxpbmUJICAgYm1SZXF1ZXN0LHZhbHVlLGluZGV4ICovCi0JLyogMTgxOSAqLworc3RhdGljIGNvbnN0IHU4IHNwY2E1MDVfaW5pdF9kYXRhW11bM10gPSB7CisJLyogYm1SZXF1ZXN0LHZhbHVlLGluZGV4ICovCiAJe1NQQ0E1MFhfUkVHX0dMT0JBTCwgU1BDQTUwWF9HTUlTQzNfU0FBNzExM1JTVCwgU1BDQTUwWF9HTE9CQUxfTUlTQzN9LAogCS8qIFNlbnNvciByZXNldCAqLwotCS8qIDE4MjIgKi8ge1NQQ0E1MFhfUkVHX0dMT0JBTCwgMHgwMCwgU1BDQTUwWF9HTE9CQUxfTUlTQzN9LAotCS8qIDE4MjUgKi8ge1NQQ0E1MFhfUkVHX0dMT0JBTCwgMHgwMCwgU1BDQTUwWF9HTE9CQUxfTUlTQzF9LAorCXtTUENBNTBYX1JFR19HTE9CQUwsIDB4MDAsIFNQQ0E1MFhfR0xPQkFMX01JU0MzfSwKKwl7U1BDQTUwWF9SRUdfR0xPQkFMLCAweDAwLCBTUENBNTBYX0dMT0JBTF9NSVNDMX0sCiAJLyogQmxvY2sgVVNCIHJlc2V0ICovCi0JLyogMTgyOCAqLyB7U1BDQTUwWF9SRUdfR0xPQkFMLCBTUENBNTBYX0dNSVNDMF9JRFNFTCwKLQkJU1BDQTUwWF9HTE9CQUxfTUlTQzB9LAorCXtTUENBNTBYX1JFR19HTE9CQUwsIFNQQ0E1MFhfR01JU0MwX0lEU0VMLCBTUENBNTBYX0dMT0JBTF9NSVNDMH0sCiAKLQkvKiAxODMxICovIHsweDUsIDB4MDEsIDB4MTB9LAorCXsweDA1LCAweDAxLCAweDEwfSwKIAkJCQkJLyogTWF5YmUgcG93ZXIgZG93biBzb21lIHN0dWZmICovCi0JLyogMTgzNCAqLyB7MHg1LCAweDBmLCAweDExfSwKKwl7MHgwNSwgMHgwZiwgMHgxMX0sCiAKIAkvKiBTZXR1cCBpbnRlcm5hbCBDQ0QgID8gKi8KLQkvKiAxODM3ICovIHsweDYsIDB4MTAsIDB4MDh9LAotCS8qIDE4NDAgKi8gezB4NiwgMHgwMCwgMHgwOX0sCi0JLyogMTg0MyAqLyB7MHg2LCAweDAwLCAweDBhfSwKLQkvKiAxODQ2ICovIHsweDYsIDB4MDAsIDB4MGJ9LAotCS8qIDE4NDkgKi8gezB4NiwgMHgxMCwgMHgwY30sCi0JLyogMTg1MiAqLyB7MHg2LCAweDAwLCAweDBkfSwKLQkvKiAxODU1ICovIHsweDYsIDB4MDAsIDB4MGV9LAotCS8qIDE4NTggKi8gezB4NiwgMHgwMCwgMHgwZn0sCi0JLyogMTg2MSAqLyB7MHg2LCAweDEwLCAweDEwfSwKLQkvKiAxODY0ICovIHsweDYsIDB4MDIsIDB4MTF9LAotCS8qIDE4NjcgKi8gezB4NiwgMHgwMCwgMHgxMn0sCi0JLyogMTg3MCAqLyB7MHg2LCAweDA0LCAweDEzfSwKLQkvKiAxODczICovIHsweDYsIDB4MDIsIDB4MTR9LAotCS8qIDE4NzYgKi8gezB4NiwgMHg4YSwgMHg1MX0sCi0JLyogMTg3OSAqLyB7MHg2LCAweDQwLCAweDUyfSwKLQkvKiAxODgyICovIHsweDYsIDB4YjYsIDB4NTN9LAotCS8qIDE4ODUgKi8gezB4NiwgMHgzZCwgMHg1NH0sCisJezB4MDYsIDB4MTAsIDB4MDh9LAorCXsweDA2LCAweDAwLCAweDA5fSwKKwl7MHgwNiwgMHgwMCwgMHgwYX0sCisJezB4MDYsIDB4MDAsIDB4MGJ9LAorCXsweDA2LCAweDEwLCAweDBjfSwKKwl7MHgwNiwgMHgwMCwgMHgwZH0sCisJezB4MDYsIDB4MDAsIDB4MGV9LAorCXsweDA2LCAweDAwLCAweDBmfSwKKwl7MHgwNiwgMHgxMCwgMHgxMH0sCisJezB4MDYsIDB4MDIsIDB4MTF9LAorCXsweDA2LCAweDAwLCAweDEyfSwKKwl7MHgwNiwgMHgwNCwgMHgxM30sCisJezB4MDYsIDB4MDIsIDB4MTR9LAorCXsweDA2LCAweDhhLCAweDUxfSwKKwl7MHgwNiwgMHg0MCwgMHg1Mn0sCisJezB4MDYsIDB4YjYsIDB4NTN9LAorCXsweDA2LCAweDNkLCAweDU0fSwKIAl7fQogfTsKIAogLyoKICAqIERhdGEgdG8gaW5pdGlhbGl6ZSB0aGUgY2FtZXJhIHVzaW5nIHRoZSBpbnRlcm5hbCBDQ0QKICAqLwotc3RhdGljIGNvbnN0IF9fdTE2IHNwY2E1MDVfb3Blbl9kYXRhX2NjZFtdWzNdID0gewotCS8qIGxpbmUJICAgYm1SZXF1ZXN0LHZhbHVlLGluZGV4ICovCitzdGF0aWMgY29uc3QgdTggc3BjYTUwNV9vcGVuX2RhdGFfY2NkW11bM10gPSB7CisJLyogYm1SZXF1ZXN0LHZhbHVlLGluZGV4ICovCiAJLyogSW50ZXJuYWwgQ0NEIGRhdGEgc2V0ICovCi0JLyogMTg5MSAqLyB7MHgzLCAweDA0LCAweDAxfSwKKwl7MHgwMywgMHgwNCwgMHgwMX0sCiAJLyogVGhpcyBjb3VsZCBiZSBhIHJlc2V0ICovCi0JLyogMTg5NCAqLyB7MHgzLCAweDAwLCAweDAxfSwKKwl7MHgwMywgMHgwMCwgMHgwMX0sCiAKIAkvKiBTZXR1cCBjb21wcmVzc2lvbiBhbmQgaW1hZ2UgcmVnaXN0ZXJzLiAweDYgYW5kIDB4NyBzZWVtIHRvIGJlCiAJICAgcmVsYXRlZCB0byBIJlYgaG9sZCwgYW5kIGFyZSByZXNvbHV0aW9uIG1vZGUgc3BlY2lmaWMgKi8KLQkJLyogMTg5NyAqLyB7MHg0LCAweDEwLCAweDAxfSwKKwkJezB4MDQsIDB4MTAsIDB4MDF9LAogCQkvKiBESUZGKDB4NTApLCB3YXMgKDB4MTApICovCi0JLyogMTkwMCAqLyB7MHg0LCAweDAwLCAweDA0fSwKLQkvKiAxOTAzICovIHsweDQsIDB4MDAsIDB4MDV9LAotCS8qIDE5MDYgKi8gezB4NCwgMHgyMCwgMHgwNn0sCi0JLyogMTkwOSAqLyB7MHg0LCAweDIwLCAweDA3fSwKKwl7MHgwNCwgMHgwMCwgMHgwNH0sCisJezB4MDQsIDB4MDAsIDB4MDV9LAorCXsweDA0LCAweDIwLCAweDA2fSwKKwl7MHgwNCwgMHgyMCwgMHgwN30sCiAKLQkvKiAxOTEyICovIHsweDgsIDB4MGEsIDB4MDB9LAorCXsweDA4LCAweDBhLCAweDAwfSwKIAkvKiBESUZGICgweDRhKSwgd2FzICgweGEpICovCiAKLQkvKiAxOTE1ICovIHsweDUsIDB4MDAsIDB4MTB9LAotCS8qIDE5MTggKi8gezB4NSwgMHgwMCwgMHgxMX0sCi0JLyogMTkyMSAqLyB7MHg1LCAweDAwLCAweDAwfSwKKwl7MHgwNSwgMHgwMCwgMHgxMH0sCisJezB4MDUsIDB4MDAsIDB4MTF9LAorCXsweDA1LCAweDAwLCAweDAwfSwKIAkvKiBESUZGIG5vdCB3cml0dGVuICovCi0JLyogMTkyNCAqLyB7MHg1LCAweDAwLCAweDAxfSwKKwl7MHgwNSwgMHgwMCwgMHgwMX0sCiAJLyogRElGRiBub3Qgd3JpdHRlbiAqLwotCS8qIDE5MjcgKi8gezB4NSwgMHgwMCwgMHgwMn0sCisJezB4MDUsIDB4MDAsIDB4MDJ9LAogCS8qIERJRkYgbm90IHdyaXR0ZW4gKi8KLQkvKiAxOTMwICovIHsweDUsIDB4MDAsIDB4MDN9LAorCXsweDA1LCAweDAwLCAweDAzfSwKIAkvKiBESUZGIG5vdCB3cml0dGVuICovCi0JLyogMTkzMyAqLyB7MHg1LCAweDAwLCAweDA0fSwKKwl7MHgwNSwgMHgwMCwgMHgwNH0sCiAJLyogRElGRiBub3Qgd3JpdHRlbiAqLwotCQkvKiAxOTM2ICovIHsweDUsIDB4ODAsIDB4MDV9LAorCQl7MHgwNSwgMHg4MCwgMHgwNX0sCiAJCS8qIERJRkYgbm90IHdyaXR0ZW4gKi8KLQkJLyogMTkzOSAqLyB7MHg1LCAweGUwLCAweDA2fSwKKwkJezB4MDUsIDB4ZTAsIDB4MDZ9LAogCQkvKiBESUZGIG5vdCB3cml0dGVuICovCi0JCS8qIDE5NDIgKi8gezB4NSwgMHgyMCwgMHgwN30sCisJCXsweDA1LCAweDIwLCAweDA3fSwKIAkJLyogRElGRiBub3Qgd3JpdHRlbiAqLwotCQkvKiAxOTQ1ICovIHsweDUsIDB4YTAsIDB4MDh9LAorCQl7MHgwNSwgMHhhMCwgMHgwOH0sCiAJCS8qIERJRkYgbm90IHdyaXR0ZW4gKi8KLQkJLyogMTk0OCAqLyB7MHg1LCAweDAsIDB4MTJ9LAorCQl7MHgwNSwgMHgwLCAweDEyfSwKIAkJLyogRElGRiBub3Qgd3JpdHRlbiAqLwotCS8qIDE5NTEgKi8gezB4NSwgMHgwMiwgMHgwZn0sCisJezB4MDUsIDB4MDIsIDB4MGZ9LAogCS8qIERJRkYgbm90IHdyaXR0ZW4gKi8KLQkJLyogMTk1NCAqLyB7MHg1LCAweDEwLCAweDQ2fSwKKwkJezB4MDUsIDB4MTAsIDB4NDZ9LAogCQkvKiBESUZGIG5vdCB3cml0dGVuICovCi0JCS8qIDE5NTcgKi8gezB4NSwgMHg4LCAweDRhfSwKKwkJezB4MDUsIDB4OCwgMHg0YX0sCiAJCS8qIERJRkYgbm90IHdyaXR0ZW4gKi8KIAotCS8qIDE5NjAgKi8gezB4MywgMHgwOCwgMHgwM30sCisJezB4MDMsIDB4MDgsIDB4MDN9LAogCS8qIERJRkYgKDB4MywweDI4LDB4MykgKi8KLQkvKiAxOTYzICovIHsweDMsIDB4MDgsIDB4MDF9LAotCS8qIDE5NjYgKi8gezB4MywgMHgwYywgMHgwM30sCisJezB4MDMsIDB4MDgsIDB4MDF9LAorCXsweDAzLCAweDBjLCAweDAzfSwKIAkvKiBESUZGIG5vdCB3cml0dGVuICovCi0JCS8qIDE5NjkgKi8gezB4MywgMHgyMSwgMHgwMH0sCisJCXsweDAzLCAweDIxLCAweDAwfSwKIAkJLyogRElGRiAoMHgzOSkgKi8KIAogLyogRXh0cmEgYmxvY2sgY29waWVkIGZyb20gaW5pdCB0byBob3BlZnVsbHkgZW5zdXJlIENDRCBpcyBpbiBhIHNhbmUgc3RhdGUgKi8KLQkvKiAxODM3ICovIHsweDYsIDB4MTAsIDB4MDh9LAotCS8qIDE4NDAgKi8gezB4NiwgMHgwMCwgMHgwOX0sCi0JLyogMTg0MyAqLyB7MHg2LCAweDAwLCAweDBhfSwKLQkvKiAxODQ2ICovIHsweDYsIDB4MDAsIDB4MGJ9LAotCS8qIDE4NDkgKi8gezB4NiwgMHgxMCwgMHgwY30sCi0JLyogMTg1MiAqLyB7MHg2LCAweDAwLCAweDBkfSwKLQkvKiAxODU1ICovIHsweDYsIDB4MDAsIDB4MGV9LAotCS8qIDE4NTggKi8gezB4NiwgMHgwMCwgMHgwZn0sCi0JLyogMTg2MSAqLyB7MHg2LCAweDEwLCAweDEwfSwKLQkvKiAxODY0ICovIHsweDYsIDB4MDIsIDB4MTF9LAotCS8qIDE4NjcgKi8gezB4NiwgMHgwMCwgMHgxMn0sCi0JLyogMTg3MCAqLyB7MHg2LCAweDA0LCAweDEzfSwKLQkvKiAxODczICovIHsweDYsIDB4MDIsIDB4MTR9LAotCS8qIDE4NzYgKi8gezB4NiwgMHg4YSwgMHg1MX0sCi0JLyogMTg3OSAqLyB7MHg2LCAweDQwLCAweDUyfSwKLQkvKiAxODgyICovIHsweDYsIDB4YjYsIDB4NTN9LAotCS8qIDE4ODUgKi8gezB4NiwgMHgzZCwgMHg1NH0sCisJezB4MDYsIDB4MTAsIDB4MDh9LAorCXsweDA2LCAweDAwLCAweDA5fSwKKwl7MHgwNiwgMHgwMCwgMHgwYX0sCisJezB4MDYsIDB4MDAsIDB4MGJ9LAorCXsweDA2LCAweDEwLCAweDBjfSwKKwl7MHgwNiwgMHgwMCwgMHgwZH0sCisJezB4MDYsIDB4MDAsIDB4MGV9LAorCXsweDA2LCAweDAwLCAweDBmfSwKKwl7MHgwNiwgMHgxMCwgMHgxMH0sCisJezB4MDYsIDB4MDIsIDB4MTF9LAorCXsweDA2LCAweDAwLCAweDEyfSwKKwl7MHgwNiwgMHgwNCwgMHgxM30sCisJezB4MDYsIDB4MDIsIDB4MTR9LAorCXsweDA2LCAweDhhLCAweDUxfSwKKwl7MHgwNiwgMHg0MCwgMHg1Mn0sCisJezB4MDYsIDB4YjYsIDB4NTN9LAorCXsweDA2LCAweDNkLCAweDU0fSwKIAkvKiBFbmQgb2YgZXh0cmEgYmxvY2sgKi8KIAotCQkvKiAxOTcyICovIHsweDYsIDB4M2YsIDB4MX0sCisJCXsweDA2LCAweDNmLCAweDF9LAogCQkvKiBCbG9jayBza2lwcGVkICovCi0JLyogMTk3NSAqLyB7MHg2LCAweDEwLCAweDAyfSwKLQkvKiAxOTc4ICovIHsweDYsIDB4NjQsIDB4MDd9LAotCS8qIDE5ODEgKi8gezB4NiwgMHgxMCwgMHgwOH0sCi0JLyogMTk4NCAqLyB7MHg2LCAweDAwLCAweDA5fSwKLQkvKiAxOTg3ICovIHsweDYsIDB4MDAsIDB4MGF9LAotCS8qIDE5OTAgKi8gezB4NiwgMHgwMCwgMHgwYn0sCi0JLyogMTk5MyAqLyB7MHg2LCAweDEwLCAweDBjfSwKLQkvKiAxOTk2ICovIHsweDYsIDB4MDAsIDB4MGR9LAotCS8qIDE5OTkgKi8gezB4NiwgMHgwMCwgMHgwZX0sCi0JLyogMjAwMiAqLyB7MHg2LCAweDAwLCAweDBmfSwKLQkvKiAyMDA1ICovIHsweDYsIDB4MTAsIDB4MTB9LAotCS8qIDIwMDggKi8gezB4NiwgMHgwMiwgMHgxMX0sCi0JLyogMjAxMSAqLyB7MHg2LCAweDAwLCAweDEyfSwKLQkvKiAyMDE0ICovIHsweDYsIDB4MDQsIDB4MTN9LAotCS8qIDIwMTcgKi8gezB4NiwgMHgwMiwgMHgxNH0sCi0JLyogMjAyMCAqLyB7MHg2LCAweDhhLCAweDUxfSwKLQkvKiAyMDIzICovIHsweDYsIDB4NDAsIDB4NTJ9LAotCS8qIDIwMjYgKi8gezB4NiwgMHhiNiwgMHg1M30sCi0JLyogMjAyOSAqLyB7MHg2LCAweDNkLCAweDU0fSwKLQkvKiAyMDMyICovIHsweDYsIDB4NjAsIDB4NTd9LAotCS8qIDIwMzUgKi8gezB4NiwgMHgyMCwgMHg1OH0sCi0JLyogMjAzOCAqLyB7MHg2LCAweDE1LCAweDU5fSwKLQkvKiAyMDQxICovIHsweDYsIDB4MDUsIDB4NWF9LAorCXsweDA2LCAweDEwLCAweDAyfSwKKwl7MHgwNiwgMHg2NCwgMHgwN30sCisJezB4MDYsIDB4MTAsIDB4MDh9LAorCXsweDA2LCAweDAwLCAweDA5fSwKKwl7MHgwNiwgMHgwMCwgMHgwYX0sCisJezB4MDYsIDB4MDAsIDB4MGJ9LAorCXsweDA2LCAweDEwLCAweDBjfSwKKwl7MHgwNiwgMHgwMCwgMHgwZH0sCisJezB4MDYsIDB4MDAsIDB4MGV9LAorCXsweDA2LCAweDAwLCAweDBmfSwKKwl7MHgwNiwgMHgxMCwgMHgxMH0sCisJezB4MDYsIDB4MDIsIDB4MTF9LAorCXsweDA2LCAweDAwLCAweDEyfSwKKwl7MHgwNiwgMHgwNCwgMHgxM30sCisJezB4MDYsIDB4MDIsIDB4MTR9LAorCXsweDA2LCAweDhhLCAweDUxfSwKKwl7MHgwNiwgMHg0MCwgMHg1Mn0sCisJezB4MDYsIDB4YjYsIDB4NTN9LAorCXsweDA2LCAweDNkLCAweDU0fSwKKwl7MHgwNiwgMHg2MCwgMHg1N30sCisJezB4MDYsIDB4MjAsIDB4NTh9LAorCXsweDA2LCAweDE1LCAweDU5fSwKKwl7MHgwNiwgMHgwNSwgMHg1YX0sCiAKLQkvKiAyMDQ0ICovIHsweDUsIDB4MDEsIDB4YzB9LAotCS8qIDIwNDcgKi8gezB4NSwgMHgxMCwgMHhjYn0sCi0JCS8qIDIwNTAgKi8gezB4NSwgMHg4MCwgMHhjMX0sCisJezB4MDUsIDB4MDEsIDB4YzB9LAorCXsweDA1LCAweDEwLCAweGNifSwKKwkJezB4MDUsIDB4ODAsIDB4YzF9LAogCQkvKiAqLwotCQkvKiAyMDUzICovIHsweDUsIDB4MCwgMHhjMn0sCisJCXsweDA1LCAweDAsIDB4YzJ9LAogCQkvKiA0IHdhcyAwICovCi0JLyogMjA1NiAqLyB7MHg1LCAweDAwLCAweGNhfSwKLQkJLyogMjA1OSAqLyB7MHg1LCAweDgwLCAweGMxfSwKKwl7MHgwNSwgMHgwMCwgMHhjYX0sCisJCXsweDA1LCAweDgwLCAweGMxfSwKIAkJLyogICovCi0JLyogMjA2MiAqLyB7MHg1LCAweDA0LCAweGMyfSwKLQkvKiAyMDY1ICovIHsweDUsIDB4MDAsIDB4Y2F9LAotCQkvKiAyMDY4ICovIHsweDUsIDB4MCwgMHhjMX0sCisJezB4MDUsIDB4MDQsIDB4YzJ9LAorCXsweDA1LCAweDAwLCAweGNhfSwKKwkJezB4MDUsIDB4MCwgMHhjMX0sCiAJCS8qICAqLwotCS8qIDIwNzEgKi8gezB4NSwgMHgwMCwgMHhjMn0sCi0JLyogMjA3NCAqLyB7MHg1LCAweDAwLCAweGNhfSwKLQkJLyogMjA3NyAqLyB7MHg1LCAweDQwLCAweGMxfSwKKwl7MHgwNSwgMHgwMCwgMHhjMn0sCisJezB4MDUsIDB4MDAsIDB4Y2F9LAorCQl7MHgwNSwgMHg0MCwgMHhjMX0sCiAJCS8qICovCi0JLyogMjA4MCAqLyB7MHg1LCAweDE3LCAweGMyfSwKLQkvKiAyMDgzICovIHsweDUsIDB4MDAsIDB4Y2F9LAotCQkvKiAyMDg2ICovIHsweDUsIDB4ODAsIDB4YzF9LAorCXsweDA1LCAweDE3LCAweGMyfSwKKwl7MHgwNSwgMHgwMCwgMHhjYX0sCisJCXsweDA1LCAweDgwLCAweGMxfSwKIAkJLyogKi8KLQkvKiAyMDg5ICovIHsweDUsIDB4MDYsIDB4YzJ9LAotCS8qIDIwOTIgKi8gezB4NSwgMHgwMCwgMHhjYX0sCi0JCS8qIDIwOTUgKi8gezB4NSwgMHg4MCwgMHhjMX0sCisJezB4MDUsIDB4MDYsIDB4YzJ9LAorCXsweDA1LCAweDAwLCAweGNhfSwKKwkJezB4MDUsIDB4ODAsIDB4YzF9LAogCQkvKiAqLwotCS8qIDIwOTggKi8gezB4NSwgMHgwNCwgMHhjMn0sCi0JLyogMjEwMSAqLyB7MHg1LCAweDAwLCAweGNhfSwKKwl7MHgwNSwgMHgwNCwgMHhjMn0sCisJezB4MDUsIDB4MDAsIDB4Y2F9LAogCi0JLyogMjEwNCAqLyB7MHgzLCAweDRjLCAweDN9LAotCS8qIDIxMDcgKi8gezB4MywgMHgxOCwgMHgxfSwKKwl7MHgwMywgMHg0YywgMHgzfSwKKwl7MHgwMywgMHgxOCwgMHgxfSwKIAotCS8qIDIxMTAgKi8gezB4NiwgMHg3MCwgMHg1MX0sCi0JLyogMjExMyAqLyB7MHg2LCAweGJlLCAweDUzfSwKLQkvKiAyMTE2ICovIHsweDYsIDB4NzEsIDB4NTd9LAotCS8qIDIxMTkgKi8gezB4NiwgMHgyMCwgMHg1OH0sCi0JLyogMjEyMiAqLyB7MHg2LCAweDA1LCAweDU5fSwKLQkvKiAyMTI1ICovIHsweDYsIDB4MTUsIDB4NWF9LAorCXsweDA2LCAweDcwLCAweDUxfSwKKwl7MHgwNiwgMHhiZSwgMHg1M30sCisJezB4MDYsIDB4NzEsIDB4NTd9LAorCXsweDA2LCAweDIwLCAweDU4fSwKKwl7MHgwNiwgMHgwNSwgMHg1OX0sCisJezB4MDYsIDB4MTUsIDB4NWF9LAogCi0JLyogMjEyOCAqLyB7MHg0LCAweDAwLCAweDA4fSwKKwl7MHgwNCwgMHgwMCwgMHgwOH0sCiAJLyogQ29tcHJlc3MgPSBPRkYgKDB4MSB0byB0dXJuIG9uKSAqLwotCS8qIDIxMzEgKi8gezB4NCwgMHgxMiwgMHgwOX0sCi0JLyogMjEzNCAqLyB7MHg0LCAweDIxLCAweDBhfSwKLQkvKiAyMTM3ICovIHsweDQsIDB4MTAsIDB4MGJ9LAotCS8qIDIxNDAgKi8gezB4NCwgMHgyMSwgMHgwY30sCi0JLyogMjE0MyAqLyB7MHg0LCAweDA1LCAweDAwfSwKKwl7MHgwNCwgMHgxMiwgMHgwOX0sCisJezB4MDQsIDB4MjEsIDB4MGF9LAorCXsweDA0LCAweDEwLCAweDBifSwKKwl7MHgwNCwgMHgyMSwgMHgwY30sCisJezB4MDQsIDB4MDUsIDB4MDB9LAogCS8qIHdhcyA1IChJbWFnZSBUeXBlID8gKSAqLwotCS8qIDIxNDYgKi8gezB4NCwgMHgwMCwgMHgwMX0sCisJezB4MDQsIDB4MDAsIDB4MDF9LAogCi0JLyogMjE0OSAqLyB7MHg2LCAweDNmLCAweDAxfSwKKwl7MHgwNiwgMHgzZiwgMHgwMX0sCiAKLQkvKiAyMTUyICovIHsweDQsIDB4MDAsIDB4MDR9LAotCS8qIDIxNTUgKi8gezB4NCwgMHgwMCwgMHgwNX0sCi0JLyogMjE1OCAqLyB7MHg0LCAweDQwLCAweDA2fSwKLQkvKiAyMTYxICovIHsweDQsIDB4NDAsIDB4MDd9LAorCXsweDA0LCAweDAwLCAweDA0fSwKKwl7MHgwNCwgMHgwMCwgMHgwNX0sCisJezB4MDQsIDB4NDAsIDB4MDZ9LAorCXsweDA0LCAweDQwLCAweDA3fSwKIAotCS8qIDIxNjQgKi8gezB4NiwgMHgxYywgMHgxN30sCi0JLyogMjE2NyAqLyB7MHg2LCAweGUyLCAweDE5fSwKLQkvKiAyMTcwICovIHsweDYsIDB4MWMsIDB4MWJ9LAotCS8qIDIxNzMgKi8gezB4NiwgMHhlMiwgMHgxZH0sCi0JLyogMjE3NiAqLyB7MHg2LCAweGFhLCAweDFmfSwKLQkvKiAyMTc5ICovIHsweDYsIDB4NzAsIDB4MjB9LAorCXsweDA2LCAweDFjLCAweDE3fSwKKwl7MHgwNiwgMHhlMiwgMHgxOX0sCisJezB4MDYsIDB4MWMsIDB4MWJ9LAorCXsweDA2LCAweGUyLCAweDFkfSwKKwl7MHgwNiwgMHhhYSwgMHgxZn0sCisJezB4MDYsIDB4NzAsIDB4MjB9LAogCi0JLyogMjE4MiAqLyB7MHg1LCAweDAxLCAweDEwfSwKLQkvKiAyMTg1ICovIHsweDUsIDB4MDAsIDB4MTF9LAotCS8qIDIxODggKi8gezB4NSwgMHgwMSwgMHgwMH0sCi0JLyogMjE5MSAqLyB7MHg1LCAweDA1LCAweDAxfSwKLQkJLyogMjE5NCAqLyB7MHg1LCAweDAwLCAweGMxfSwKKwl7MHgwNSwgMHgwMSwgMHgxMH0sCisJezB4MDUsIDB4MDAsIDB4MTF9LAorCXsweDA1LCAweDAxLCAweDAwfSwKKwl7MHgwNSwgMHgwNSwgMHgwMX0sCisJCXsweDA1LCAweDAwLCAweGMxfSwKIAkJLyogKi8KLQkvKiAyMTk3ICovIHsweDUsIDB4MDAsIDB4YzJ9LAotCS8qIDIyMDAgKi8gezB4NSwgMHgwMCwgMHhjYX0sCisJezB4MDUsIDB4MDAsIDB4YzJ9LAorCXsweDA1LCAweDAwLCAweGNhfSwKIAotCS8qIDIyMDMgKi8gezB4NiwgMHg3MCwgMHg1MX0sCi0JLyogMjIwNiAqLyB7MHg2LCAweGJlLCAweDUzfSwKKwl7MHgwNiwgMHg3MCwgMHg1MX0sCisJezB4MDYsIDB4YmUsIDB4NTN9LAogCXt9CiB9OwogCiAvKgotICAgTWFkZSBieSBUb21hc3ogWmFibG9ja2kgKHNrYWxhbWFuZHJhQHBvY3p0YS5vbmV0LnBsKQorICogTWFkZSBieSBUb21hc3ogWmFibG9ja2kgKHNrYWxhbWFuZHJhQHBvY3p0YS5vbmV0LnBsKQogICogU1BDQTUwNWIgY2hpcCBiYXNlZCBjYW1lcmFzIGluaXRpYWxpemF0aW9uIGRhdGEKLSAqCiAgKi8KIC8qIGpmbSAqLwogI2RlZmluZSBpbml0aWFsX2JyaWdodG5lc3MgMHg3ZgkvKiAweDAod2hpdGUpLTB4ZmYoYmxhY2spICovCkBAIC0zMzIsNyArMzMzLDcgQEAKIC8qCiAgKiBEYXRhIHRvIGluaXRpYWxpemUgYSBTUENBNTA1LiBDb21tb24gdG8gdGhlIENDRCBhbmQgZXh0ZXJuYWwgbW9kZXMKICAqLwotc3RhdGljIGNvbnN0IF9fdTE2IHNwY2E1MDViX2luaXRfZGF0YVtdWzNdID0geworc3RhdGljIGNvbnN0IHU4IHNwY2E1MDViX2luaXRfZGF0YVtdWzNdID0gewogLyogc3RhcnQgKi8KIAl7MHgwMiwgMHgwMCwgMHgwMH0sCQkvKiBpbml0ICovCiAJezB4MDIsIDB4MDAsIDB4MDF9LApAQCAtMzk2LDcgKzM5Nyw3IEBACiAvKgogICogRGF0YSB0byBpbml0aWFsaXplIHRoZSBjYW1lcmEgdXNpbmcgdGhlIGludGVybmFsIENDRAogICovCi1zdGF0aWMgY29uc3QgX191MTYgc3BjYTUwNWJfb3Blbl9kYXRhX2NjZFtdWzNdID0geworc3RhdGljIGNvbnN0IHU4IHNwY2E1MDViX29wZW5fZGF0YV9jY2RbXVszXSA9IHsKIAogLyogezB4MDIsMHgwMCwweDAwfSwgKi8KIAl7MHgwMywgMHgwNCwgMHgwMX0sCQkvKiByc3QgKi8KQEAgLTQyNiw3ICs0MjcsNyBAQAogCXsweDA1LCAweDAwLCAweDEyfSwKIAl7MHgwNSwgMHg2ZiwgMHgwMH0sCiAJezB4MDUsIGluaXRpYWxfYnJpZ2h0bmVzcyA+PiA2LCAweDAwfSwKLQl7MHgwNSwgaW5pdGlhbF9icmlnaHRuZXNzIDw8IDIsIDB4MDF9LAorCXsweDA1LCAoaW5pdGlhbF9icmlnaHRuZXNzIDw8IDIpICYgMHhmZiwgMHgwMX0sCiAJezB4MDUsIDB4MDAsIDB4MDJ9LAogCXsweDA1LCAweDAxLCAweDAzfSwKIAl7MHgwNSwgMHgwMCwgMHgwNH0sCkBAIC00MzYsNyArNDM3LDcgQEAKIAl7MHgwNSwgMHhhMCwgMHgwOH0sCiAJezB4MDUsIDB4MDAsIDB4MTJ9LAogCXsweDA1LCAweDAyLCAweDBmfSwKLQl7MHgwNSwgMTI4LCAweDE0fSwJCS8qIG1heCBleHBvc3VyZSBvZmYgKDA9b24pICovCisJezB4MDUsIDB4ODAsIDB4MTR9LAkJLyogbWF4IGV4cG9zdXJlIG9mZiAoMD1vbikgKi8KIAl7MHgwNSwgMHgwMSwgMHhiMH0sCiAJezB4MDUsIDB4MDEsIDB4YmZ9LAogCXsweDAzLCAweDAyLCAweDA2fSwKQEAgLTU2MCwyNiArNTYxLDI2IEBACiAJezB4MDYsIDB4MzIsIDB4MjB9LAogCiAJezB4MDUsIGluaXRpYWxfYnJpZ2h0bmVzcyA+PiA2LCAweDAwfSwKLQl7MHgwNSwgaW5pdGlhbF9icmlnaHRuZXNzIDw8IDIsIDB4MDF9LAorCXsweDA1LCAoaW5pdGlhbF9icmlnaHRuZXNzIDw8IDIpICYgMHhmZiwgMHgwMX0sCiAJezB4MDUsIDB4MDYsIDB4YzF9LAogCXsweDA1LCAweDU4LCAweGMyfSwKLQl7MHgwNSwgMHgwLCAweGNhfSwKLQl7MHgwNSwgMHgwLCAweDExfSwKKwl7MHgwNSwgMHgwMCwgMHhjYX0sCisJezB4MDUsIDB4MDAsIDB4MTF9LAogCXt9CiB9OwogCiBzdGF0aWMgaW50IHJlZ193cml0ZShzdHJ1Y3QgdXNiX2RldmljZSAqZGV2LAotCQkgICAgIF9fdTE2IHJlZywgX191MTYgaW5kZXgsIF9fdTE2IHZhbHVlKQorCQkgICAgIHUxNiByZXEsIHUxNiBpbmRleCwgdTE2IHZhbHVlKQogewogCWludCByZXQ7CiAKIAlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LAogCQkJdXNiX3NuZGN0cmxwaXBlKGRldiwgMCksCi0JCQlyZWcsCisJCQlyZXEsCiAJCQlVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAogCQkJdmFsdWUsIGluZGV4LCBOVUxMLCAwLCA1MDApOwotCVBERUJVRyhEX1BBQ0ssICJyZWcgd3JpdGU6IDB4JTAyeCwweCUwMng6MHglMDJ4LCAweCV4IiwKLQkJcmVnLCBpbmRleCwgdmFsdWUsIHJldCk7CisJUERFQlVHKERfVVNCTywgInJlZyB3cml0ZTogMHglMDJ4LDB4JTAyeDoweCUwMngsICVkIiwKKwkJcmVxLCBpbmRleCwgdmFsdWUsIHJldCk7CiAJaWYgKHJldCA8IDApCiAJCVBERUJVRyhEX0VSUiwgInJlZyB3cml0ZTogZXJyb3IgJWQiLCByZXQpOwogCXJldHVybiByZXQ7CkBAIC01ODcsNDIgKzU4OCwzNCBAQAogCiAvKiByZXR1cm5zOiBuZWdhdGl2ZSBpcyBlcnJvciwgcG9zIG9yIHplcm8gaXMgZGF0YSAqLwogc3RhdGljIGludCByZWdfcmVhZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQlfX3UxNiByZWcsCS8qIGJSZXF1ZXN0ICovCi0JCQlfX3UxNiBpbmRleCwJLyogd0luZGV4ICovCi0JCQlfX3UxNiBsZW5ndGgpCS8qIHdMZW5ndGggKDEgb3IgMiBvbmx5KSAqLworCQkJdTE2IHJlcSwJLyogYlJlcXVlc3QgKi8KKwkJCXUxNiBpbmRleCkJLyogd0luZGV4ICovCiB7CiAJaW50IHJldDsKIAotCWdzcGNhX2Rldi0+dXNiX2J1ZlsxXSA9IDA7CiAJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAogCQkJdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKLQkJCXJlZywKKwkJCXJlcSwKIAkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAotCQkJKF9fdTE2KSAwLAkJLyogdmFsdWUgKi8KLQkJCShfX3UxNikgaW5kZXgsCi0JCQlnc3BjYV9kZXYtPnVzYl9idWYsIGxlbmd0aCwKKwkJCTAsCQkJLyogdmFsdWUgKi8KKwkJCWluZGV4LAorCQkJZ3NwY2FfZGV2LT51c2JfYnVmLCAyLAogCQkJNTAwKTsJCQkvKiB0aW1lb3V0ICovCi0JaWYgKHJldCA8IDApIHsKLQkJUERFQlVHKERfRVJSLCAicmVnX3JlYWQgZXJyICVkIiwgcmV0KTsKLQkJcmV0dXJuIC0xOwotCX0KKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlyZXR1cm4gKGdzcGNhX2Rldi0+dXNiX2J1ZlsxXSA8PCA4KSArIGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKIH0KIAogc3RhdGljIGludCB3cml0ZV92ZWN0b3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkJY29uc3QgX191MTYgZGF0YVtdWzNdKQorCQkJY29uc3QgdTggZGF0YVtdWzNdKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKIAlpbnQgcmV0LCBpID0gMDsKIAotCXdoaWxlIChkYXRhW2ldWzBdICE9IDAgfHwgZGF0YVtpXVsxXSAhPSAwIHx8IGRhdGFbaV1bMl0gIT0gMCkgeworCXdoaWxlIChkYXRhW2ldWzBdICE9IDApIHsKIAkJcmV0ID0gcmVnX3dyaXRlKGRldiwgZGF0YVtpXVswXSwgZGF0YVtpXVsyXSwgZGF0YVtpXVsxXSk7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlQREVCVUcoRF9FUlIsCi0JCQkJIlJlZ2lzdGVyIHdyaXRlIGZhaWxlZCBmb3IgMHgleCwweCV4LDB4JXgiLAotCQkJCWRhdGFbaV1bMF0sIGRhdGFbaV1bMV0sIGRhdGFbaV1bMl0pOworCQlpZiAocmV0IDwgMCkKIAkJCXJldHVybiByZXQ7Ci0JCX0KIAkJaSsrOwogCX0KIAlyZXR1cm4gMDsKQEAgLTYzNiwxNCArNjI5LDEzIEBACiAJc3RydWN0IGNhbSAqY2FtOwogCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwotCWNhbS0+ZXBhZGRyID0gMHgwMTsKIAljYW0tPmNhbV9tb2RlID0gdmdhX21vZGU7CiAJc2QtPnN1YnR5cGUgPSBpZC0+ZHJpdmVyX2luZm87CiAJaWYgKHNkLT5zdWJ0eXBlICE9IEludGVsUENDYW1lcmFQcm8pCi0JCWNhbS0+bm1vZGVzID0gc2l6ZW9mIHZnYV9tb2RlIC8gc2l6ZW9mIHZnYV9tb2RlWzBdOworCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGUpOwogCWVsc2UJCQkvKiBubyA2NDB4NDgwIGZvciBJbnRlbFBDQ2FtZXJhUHJvICovCi0JCWNhbS0+bm1vZGVzID0gc2l6ZW9mIHZnYV9tb2RlIC8gc2l6ZW9mIHZnYV9tb2RlWzBdIC0gMTsKLQlzZC0+YnJpZ2h0bmVzcyA9IHNkX2N0cmxzW1NEX0JSSUdIVE5FU1NdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSkgLSAxOworCXNkLT5icmlnaHRuZXNzID0gQlJJR0hUTkVTU19ERUY7CiAKIAlpZiAoc2QtPnN1YnR5cGUgPT0gTnh1bHRyYSkgewogCQlpZiAod3JpdGVfdmVjdG9yKGdzcGNhX2Rldiwgc3BjYTUwNWJfaW5pdF9kYXRhKSkKQEAgLTY1OCw4MSArNjUwLDcxIEBACiAvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KIHN0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCWludCByZXQ7Ci0KLQlQREVCVUcoRF9TVFJFQU0sICJJbml0aWFsaXppbmcgU1BDQTUwNSIpOwotCWlmIChzZC0+c3VidHlwZSA9PSBOeHVsdHJhKQotCQl3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCBzcGNhNTA1Yl9vcGVuX2RhdGFfY2NkKTsKLQllbHNlCi0JCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHNwY2E1MDVfb3Blbl9kYXRhX2NjZCk7Ci0JcmV0ID0gcmVnX3JlYWQoZ3NwY2FfZGV2LCA2LCAweDE2LCAyKTsKLQotCWlmIChyZXQgPCAwKSB7Ci0JCVBERUJVRyhEX0VSUnxEX1NUUkVBTSwKLQkJICAgICAgICJyZWdpc3RlciByZWFkIGZhaWxlZCBmb3IgYWZ0ZXIgdmVjdG9yIHJlYWQgZXJyID0gJWQiLAotCQkgICAgICAgcmV0KTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCVBERUJVRyhEX1NUUkVBTSwKLQkJIkFmdGVyIHZlY3RvciByZWFkIHJldHVybnMgOiAweCV4IHNob3VsZCBiZSAweDAxMDEiLAotCQlyZXQgJiAweGZmZmYpOwotCi0JcmV0ID0gcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCA2LCAweDE2LCAweDBhKTsKLQlpZiAocmV0IDwgMCkgewotCQlQREVCVUcoRF9FUlIsICJyZWdpc3RlciB3cml0ZSBmYWlsZWQgZm9yICg2LDB4YSwweDE2KSBlcnI9JWQiLAotCQkgICAgICAgcmV0KTsKLQkJcmV0dXJuIC1FSU87Ci0JfQotCXJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgNSwgMHhjMiwgMTgpOwogCXJldHVybiAwOwogfQogCitzdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJdTggYnJpZ2h0bmVzcyA9IHNkLT5icmlnaHRuZXNzOworCisJcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCAweDA1LCAweDAwLCAoMjU1IC0gYnJpZ2h0bmVzcykgPj4gNik7CisJcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCAweDA1LCAweDAxLCAoMjU1IC0gYnJpZ2h0bmVzcykgPDwgMik7Cit9CisKIHN0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogeworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7Ci0JaW50IHJldDsKKwlpbnQgcmV0LCBtb2RlOworCXN0YXRpYyB1OCBtb2RlX3RiW11bM10gPSB7CisJLyoJICByMDAgICByMDYgICByMDcJKi8KKwkJezB4MDAsIDB4MTAsIDB4MTB9LAkvKiA2NDB4NDgwICovCisJCXsweDAxLCAweDFhLCAweDFhfSwJLyogMzUyeDI4OCAqLworCQl7MHgwMiwgMHgxYywgMHgxZH0sCS8qIDMyMHgyNDAgKi8KKwkJezB4MDQsIDB4MzQsIDB4MzR9LAkvKiAxNzZ4MTQ0ICovCisJCXsweDA1LCAweDQwLCAweDQwfQkvKiAxNjB4MTIwICovCisJfTsKKworCWlmIChzZC0+c3VidHlwZSA9PSBOeHVsdHJhKQorCQl3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCBzcGNhNTA1Yl9vcGVuX2RhdGFfY2NkKTsKKwllbHNlCisJCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHNwY2E1MDVfb3Blbl9kYXRhX2NjZCk7CisJcmV0ID0gcmVnX3JlYWQoZ3NwY2FfZGV2LCAweDA2LCAweDE2KTsKKworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUnxEX0NPTkYsCisJCSAgICAgICAicmVnaXN0ZXIgcmVhZCBmYWlsZWQgZXJyOiAlZCIsCisJCSAgICAgICByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKwlpZiAocmV0ICE9IDB4MDEwMSkgeworCQlQREVCVUcoRF9FUlJ8RF9DT05GLAorCQkJIkFmdGVyIHZlY3RvciByZWFkIHJldHVybnMgMHglMDR4IHNob3VsZCBiZSAweDAxMDEiLAorCQkJcmV0KTsKKwl9CisKKwlyZXQgPSByZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4MDYsIDB4MTYsIDB4MGEpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgMHgwNSwgMHhjMiwgMHgxMik7CiAKIAkvKiBuZWNlc3NhcnkgYmVjYXVzZSB3aXRob3V0IGl0IHdlIGNhbiBzZWUgc3RyZWFtCiAJICogb25seSBvbmNlIGFmdGVyIGxvYWRpbmcgbW9kdWxlICovCiAJLyogc3RvcHBpbmcgdXNiIHJlZ2lzdGVycyBUb21hc3ogY2hhbmdlICovCi0JcmVnX3dyaXRlKGRldiwgMHgwMiwgMHgwLCAweDApOwotCXN3aXRjaCAoZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXYpIHsKLQljYXNlIDA6Ci0JCXJlZ193cml0ZShkZXYsIDB4MDQsIDB4MDAsIDB4MDApOwotCQlyZWdfd3JpdGUoZGV2LCAweDA0LCAweDA2LCAweDEwKTsKLQkJcmVnX3dyaXRlKGRldiwgMHgwNCwgMHgwNywgMHgxMCk7Ci0JCWJyZWFrOwotCWNhc2UgMToKLQkJcmVnX3dyaXRlKGRldiwgMHgwNCwgMHgwMCwgMHgwMSk7Ci0JCXJlZ193cml0ZShkZXYsIDB4MDQsIDB4MDYsIDB4MWEpOwotCQlyZWdfd3JpdGUoZGV2LCAweDA0LCAweDA3LCAweDFhKTsKLQkJYnJlYWs7Ci0JY2FzZSAyOgotCQlyZWdfd3JpdGUoZGV2LCAweDA0LCAweDAwLCAweDAyKTsKLQkJcmVnX3dyaXRlKGRldiwgMHgwNCwgMHgwNiwgMHgxYyk7Ci0JCXJlZ193cml0ZShkZXYsIDB4MDQsIDB4MDcsIDB4MWQpOwotCQlicmVhazsKLQljYXNlIDQ6Ci0JCXJlZ193cml0ZShkZXYsIDB4MDQsIDB4MDAsIDB4MDQpOwotCQlyZWdfd3JpdGUoZGV2LCAweDA0LCAweDA2LCAweDM0KTsKLQkJcmVnX3dyaXRlKGRldiwgMHgwNCwgMHgwNywgMHgzNCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0vKgljYXNlIDU6ICovCi0JCXJlZ193cml0ZShkZXYsIDB4MDQsIDB4MDAsIDB4MDUpOwotCQlyZWdfd3JpdGUoZGV2LCAweDA0LCAweDA2LCAweDQwKTsKLQkJcmVnX3dyaXRlKGRldiwgMHgwNCwgMHgwNywgMHg0MCk7Ci0JCWJyZWFrOwotCX0KLS8qIEVuYWJsZSBJU08gcGFja2V0IG1hY2hpbmUgLSBzaG91bGQgd2UgZG8gdGhpcyBoZXJlIG9yIGluIElTT0MgaW5pdCA/ICovCisJcmVnX3dyaXRlKGRldiwgMHgwMiwgMHgwMCwgMHgwMCk7CisKKwltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLnByaXY7CisJcmVnX3dyaXRlKGRldiwgU1BDQTUwWF9SRUdfQ09NUFJFU1MsIDB4MDAsIG1vZGVfdGJbbW9kZV1bMF0pOworCXJlZ193cml0ZShkZXYsIFNQQ0E1MFhfUkVHX0NPTVBSRVNTLCAweDA2LCBtb2RlX3RiW21vZGVdWzFdKTsKKwlyZWdfd3JpdGUoZGV2LCBTUENBNTBYX1JFR19DT01QUkVTUywgMHgwNywgbW9kZV90Ylttb2RlXVsyXSk7CisKIAlyZXQgPSByZWdfd3JpdGUoZGV2LCBTUENBNTBYX1JFR19VU0IsCiAJCQkgU1BDQTUwWF9VU0JfQ1RSTCwKIAkJCSBTUENBNTBYX0NVU0JfRU5BQkxFKTsKIAotLyoJcmVnX3dyaXRlKGRldiwgMHg1LCAweDAsIDB4MCk7ICovCi0vKglyZWdfd3JpdGUoZGV2LCAweDUsIDB4MCwgMHgxKTsgKi8KLS8qCXJlZ193cml0ZShkZXYsIDB4NSwgMHgxMSwgMHgyKTsgKi8KKwlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CisKIAlyZXR1cm4gcmV0OwogfQogCkBAIC03NTAsMTUgKzczMiwxNSBAQAogCiAJLyogVGhpcyBtYXliZSByZXNldCBvciBwb3dlciBjb250cm9sICovCiAJcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCAweDAzLCAweDAzLCAweDIwKTsKLQlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4MDMsIDB4MDEsIDB4MCk7Ci0JcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCAweDAzLCAweDAwLCAweDEpOwotCXJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgMHgwNSwgMHgxMCwgMHgxKTsKLQlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4MDUsIDB4MTEsIDB4Zik7CisJcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCAweDAzLCAweDAxLCAweDAwKTsKKwlyZWdfd3JpdGUoZ3NwY2FfZGV2LT5kZXYsIDB4MDMsIDB4MDAsIDB4MDEpOworCXJlZ193cml0ZShnc3BjYV9kZXYtPmRldiwgMHgwNSwgMHgxMCwgMHgwMSk7CisJcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCAweDA1LCAweDExLCAweDBmKTsKIH0KIAogc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCi0JCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCisJCQl1OCAqZGF0YSwJCQkvKiBpc29jIHBhY2tldCAqLwogCQkJaW50IGxlbikJCQkvKiBpc28gcGFja2V0IGxlbmd0aCAqLwogewogCXN3aXRjaCAoZGF0YVswXSkgewpAQCAtNzcxLDcgKzc1Myw2IEBACiAJCQkJZGF0YSwgbGVuKTsKIAkJYnJlYWs7CiAJY2FzZSAweGZmOgkJCS8qIGRyb3AgKi8KLS8qCQlnc3BjYV9kZXYtPmxhc3RfcGFja2V0X3R5cGUgPSBESVNDQVJEX1BBQ0tFVDsgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZGF0YSArPSAxOwpAQCAtNzgyLDI0ICs3NjMsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCi0JX191OCBicmlnaHRuZXNzID0gc2QtPmJyaWdodG5lc3M7Ci0JcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCA1LCAweDAwLCAoMjU1IC0gYnJpZ2h0bmVzcykgPj4gNik7Ci0JcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCA1LCAweDAxLCAoMjU1IC0gYnJpZ2h0bmVzcykgPDwgMik7Ci0KLX0KLXN0YXRpYyB2b2lkIGdldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCXNkLT5icmlnaHRuZXNzID0gMjU1Ci0JCS0gKChyZWdfcmVhZChnc3BjYV9kZXYsIDUsIDB4MDEsIDEpID4+IDIpCi0JCQkrIChyZWdfcmVhZChnc3BjYV9kZXYsIDUsIDB4MCwgMSkgPDwgNikpOwotfQotCiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtODE0LDcgKzc3Nyw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOwogCSp2YWwgPSBzZC0+YnJpZ2h0bmVzczsKIAlyZXR1cm4gMDsKIH0KQEAgLTg2Myw4ICs4MjUsMTEgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDYuYwppbmRleCA5NmUyNTEyLi4zYTBjODkzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDYuYwpAQCAtMTkzLDI0ICsxOTMsNiBAQAogCX0KIH0KIAotc3RhdGljIGludCBzcGNhNTA2X1JlYWRJMmMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3UxNiByZWcpCi17Ci0JaW50IHJldHJ5ID0gNjA7Ci0KLQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHgwNywgU0FBNzExM19JMkNfQkFTRV9XUklURSwgMHgwMDA0KTsKLQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHgwNywgcmVnLCAweDAwMDEpOwotCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweDA3LCAweDAxLCAweDAwMDIpOwotCXdoaWxlICgtLXJldHJ5KSB7Ci0JCXJlZ19yKGdzcGNhX2RldiwgMHgwNywgMHgwMDAzLCAyKTsKLQkJaWYgKChnc3BjYV9kZXYtPnVzYl9idWZbMF0gfCBnc3BjYV9kZXYtPnVzYl9idWZbMV0pID09IDB4MDApCi0JCQlicmVhazsKLQl9Ci0JaWYgKHJldHJ5ID09IDApCi0JCXJldHVybiAtMTsKLQlyZWdfcihnc3BjYV9kZXYsIDB4MDcsIDB4MDAwMCwgMSk7Ci0JcmV0dXJuIGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKLX0KLQogc3RhdGljIHZvaWQgc3BjYTUwNl9TZXROb3JtZUlucHV0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCQkgX191MTYgbm9ybWUsCiAJCQkJIF9fdTE2IGNoYW5uZWwpCkBAIC0zMDMsNyArMjg1LDYgQEAKIAlzdHJ1Y3QgY2FtICpjYW07CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDAxOwogCWNhbS0+Y2FtX21vZGUgPSB2Z2FfbW9kZTsKIAljYW0tPm5tb2RlcyA9IHNpemVvZiB2Z2FfbW9kZSAvIHNpemVvZiB2Z2FfbW9kZVswXTsKIAlzZC0+YnJpZ2h0bmVzcyA9IHNkX2N0cmxzW1NEX0JSSUdIVE5FU1NdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CkBAIC01OTYsMTMgKzU3Nyw2IEBACiAJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4MDEsIDB4MDkpOwogfQogCi1zdGF0aWMgdm9pZCBnZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KLQlzZC0+YnJpZ2h0bmVzcyA9IHNwY2E1MDZfUmVhZEkyYyhnc3BjYV9kZXYsIFNBQTcxMTNfYnJpZ2h0KTsKLX0KLQogc3RhdGljIHZvaWQgc2V0Y29udHJhc3Qoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTYxMiwxMyArNTg2LDYgQEAKIAlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwMSwgMHgwOSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KLQlzZC0+Y29udHJhc3QgPSBzcGNhNTA2X1JlYWRJMmMoZ3NwY2FfZGV2LCBTQUE3MTEzX2NvbnRyYXN0KTsKLX0KLQogc3RhdGljIHZvaWQgc2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC02MjgsMTMgKzU5NSw2IEBACiAJc3BjYTUwNl9Xcml0ZUkyYyhnc3BjYV9kZXYsIDB4MDEsIDB4MDkpOwogfQogCi1zdGF0aWMgdm9pZCBnZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQotewotCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQotCXNkLT5jb2xvcnMgPSBzcGNhNTA2X1JlYWRJMmMoZ3NwY2FfZGV2LCBTQUE3MTEzX3NhdHVyYXRpb24pOwotfQotCiBzdGF0aWMgdm9pZCBzZXRodWUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTY0NCwxMyArNjA0LDYgQEAKIAlzcGNhNTA2X1dyaXRlSTJjKGdzcGNhX2RldiwgMHgwMSwgMHgwOSk7CiB9CiAKLXN0YXRpYyB2b2lkIGdldGh1ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0Jc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCi0Jc2QtPmh1ZSA9IHNwY2E1MDZfUmVhZEkyYyhnc3BjYV9kZXYsIFNBQTcxMTNfaHVlKTsKLX0KLQogc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTY2NSw3ICs2MTgsNiBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCWdldGJyaWdodG5lc3MoZ3NwY2FfZGV2KTsKIAkqdmFsID0gc2QtPmJyaWdodG5lc3M7CiAJcmV0dXJuIDA7CiB9CkBAIC02ODQsNyArNjM2LDYgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlnZXRjb250cmFzdChnc3BjYV9kZXYpOwogCSp2YWwgPSBzZC0+Y29udHJhc3Q7CiAJcmV0dXJuIDA7CiB9CkBAIC03MDMsNyArNjU0LDYgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlnZXRjb2xvcnMoZ3NwY2FfZGV2KTsKIAkqdmFsID0gc2QtPmNvbG9yczsKIAlyZXR1cm4gMDsKIH0KQEAgLTcyMiw3ICs2NzIsNiBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCWdldGh1ZShnc3BjYV9kZXYpOwogCSp2YWwgPSBzZC0+aHVlOwogCXJldHVybiAwOwogfQpAQCAtNzcyLDggKzcyMSwxMCBAQAogLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLwogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcGNhNTA4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYwppbmRleCBiZTVkNzQwLi5hZGFjZjg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1MDguYwpAQCAtMTAxLDggKzEwMSw3IEBACiAgKiBJbml0aWFsaXphdGlvbiBkYXRhOiB0aGlzIGlzIHRoZSBmaXJzdCBzZXQtdXAgZGF0YSB3cml0dGVuIHRvIHRoZQogICogZGV2aWNlIChiZWZvcmUgdGhlIG9wZW4gZGF0YSkuCiAgKi8KLXN0YXRpYyBjb25zdCBfX3UxNiBzcGNhNTA4X2luaXRfZGF0YVtdWzNdID0KLSNkZWZpbmUgSUdOKHgpCQkJLyogbm90aGluZyAqLworc3RhdGljIGNvbnN0IHUxNiBzcGNhNTA4X2luaXRfZGF0YVtdWzJdID0KIHsKIAkvKiAgbGluZSAgIFVSQiAgICAgIHZhbHVlLCBpbmRleCAqLwogCS8qIDQ0Mjc0ICAxODA0ICovIHsweDAwMDAsIDB4ODcwYn0sCkBAIC01ODksMTEgKzU4OCwxMCBAQAogCXt9CiB9OwogCi0KIC8qCiAgKiBJbml0aWFsaXphdGlvbiBkYXRhIGZvciBJbnRlbCBFYXN5UEMgQ2FtZXJhIENTMTEwCiAgKi8KLXN0YXRpYyBjb25zdCBfX3UxNiBzcGNhNTA4Y3MxMTBfaW5pdF9kYXRhW11bM10gPSB7CitzdGF0aWMgY29uc3QgdTE2IHNwY2E1MDhjczExMF9pbml0X2RhdGFbXVsyXSA9IHsKIAl7MHgwMDAwLCAweDg3MGJ9LCAvKiBSZXNldCBDVEwzICovCiAJezB4MDAwMywgMHg4MTExfSwgLyogU29mdCBSZXNldCBjb21wcmVzc2lvbiwgbWVtb3J5LCBURyAmIENEU1AgKi8KIAl7MHgwMDAwLCAweDgxMTF9LCAvKiBOb3JtYWwgb3BlcmF0aW9uIG9uIHJlc2V0ICovCkBAIC02NzcsNyArNjc1LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IF9fdTE2IHNwY2E1MDhfc2lnaHRjYW1faW5pdF9kYXRhW11bM10gPSB7CitzdGF0aWMgY29uc3QgdTE2IHNwY2E1MDhfc2lnaHRjYW1faW5pdF9kYXRhW11bMl0gPSB7CiAvKiBUaGlzIGxpbmUgc2VlbXMgdG8gc2V0dXAgdGhlIGZyYW1lL2NhbnZhcyAqLwogCS8qMzY4ICAqLyB7MHgwMDBmLCAweDg0MDJ9LAogCkBAIC03NjAsNyArNzU4LDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGNvbnN0IF9fdTE2IHNwY2E1MDhfc2lnaHRjYW0yX2luaXRfZGF0YVtdWzNdID0geworc3RhdGljIGNvbnN0IHUxNiBzcGNhNTA4X3NpZ2h0Y2FtMl9pbml0X2RhdGFbXVsyXSA9IHsKIC8qIDM1ICovIHsweDAwMjAsIDB4ODExMn0sCiAKIC8qIDM2ICovIHsweDAwMGYsIDB4ODQwMn0sCkBAIC0xMTA3LDcgKzExMDUsNyBAQAogLyoKICAqIEluaXRpYWxpemF0aW9uIGRhdGEgZm9yIENyZWF0aXZlIFdlYmNhbSBWaXN0YQogICovCi1zdGF0aWMgY29uc3QgX191MTYgc3BjYTUwOF92aXN0YV9pbml0X2RhdGFbXVszXSA9IHsKK3N0YXRpYyBjb25zdCB1MTYgc3BjYTUwOF92aXN0YV9pbml0X2RhdGFbXVsyXSA9IHsKIAl7MHgwMDA4LCAweDgyMDB9LAkvKiBDbGVhciByZWdpc3RlciAqLwogCXsweDAwMDAsIDB4ODcwYn0sCS8qIFJlc2V0IENUTDMgKi8KIAl7MHgwMDIwLCAweDgxMTJ9LAkvKiBWaWRlbyBEcm9wIHBhY2tldCBlbmFibGUgKi8KQEAgLTEzMDksMTggKzEzMDcsMTggQEAKIAogCXsweDAwNTAsIDB4ODcwM30sCiAJezB4MDAwMiwgMHg4NzA0fSwJLyogRXh0ZXJuYWwgaW5wdXQgQ0tJeDEgKi8KLQl7MHgwMDAxLCAweDg3MEN9LAkvKiBTZWxlY3QgQ0tPeDIgb3V0cHV0ICovCi0JezB4MDA5QSwgMHg4NjAwfSwJLyogTGluZSBtZW1vcnkgUmVhZCBDb3VudGVyIChMKSAqLworCXsweDAwMDEsIDB4ODcwY30sCS8qIFNlbGVjdCBDS094MiBvdXRwdXQgKi8KKwl7MHgwMDlhLCAweDg2MDB9LAkvKiBMaW5lIG1lbW9yeSBSZWFkIENvdW50ZXIgKEwpICovCiAJezB4MDAwMSwgMHg4NjA2fSwgIC8qIDEgTGluZSBtZW1vcnkgUmVhZCBDb3VudGVyIChIKSBSZXN1bHQ6IChkKTQxMCAqLwogCXsweDAwMjMsIDB4ODYwMX0sCiAJezB4MDAxMCwgMHg4NjAyfSwKLQl7MHgwMDBBLCAweDg2MDN9LAorCXsweDAwMGEsIDB4ODYwM30sCiAJezB4MDA5QSwgMHg4NjAwfSwKLQl7MHgwMDAxLCAweDg2NUJ9LAkvKiAxIEhvcml6b250YWwgT2Zmc2V0IGZvciBWYWxpZCBQaXhlbChMKSAqLwotCXsweDAwMDMsIDB4ODY1Q30sCS8qIFZlcnRpY2FsIG9mZnNldCBmb3IgdmFsaWQgbGluZXMgKEwpICovCi0JezB4MDA1OCwgMHg4NjVEfSwJLyogSG9yaXpvbnRhbCB2YWxpZCBwaXhlbHMgd2luZG93IChMKSAqLwotCXsweDAwNDgsIDB4ODY1RX0sCS8qIFZlcnRpY2FsIHZhbGlkIGxpbmVzIHdpbmRvdyAoTCkgKi8KLQl7MHgwMDAwLCAweDg2NUZ9LAorCXsweDAwMDEsIDB4ODY1Yn0sCS8qIDEgSG9yaXpvbnRhbCBPZmZzZXQgZm9yIFZhbGlkIFBpeGVsKEwpICovCisJezB4MDAwMywgMHg4NjVjfSwJLyogVmVydGljYWwgb2Zmc2V0IGZvciB2YWxpZCBsaW5lcyAoTCkgKi8KKwl7MHgwMDU4LCAweDg2NWR9LAkvKiBIb3Jpem9udGFsIHZhbGlkIHBpeGVscyB3aW5kb3cgKEwpICovCisJezB4MDA0OCwgMHg4NjVlfSwJLyogVmVydGljYWwgdmFsaWQgbGluZXMgd2luZG93IChMKSAqLworCXsweDAwMDAsIDB4ODY1Zn0sCiAKIAl7MHgwMDA2LCAweDg2NjB9LAogCQkgICAgLyogRW5hYmxlIG5pYmJsZSBkYXRhIGlucHV0LCBzZWxlY3QgbmliYmxlIGlucHV0IG9yZGVyICovCkBAIC0xMzI4LDYzICsxMzI2LDYzIEBACiAJezB4MDAxMywgMHg4NjA4fSwJLyogQTExIENvZWZpY2llbnRzIGZvciBjb2xvciBjb3JyZWN0aW9uICovCiAJezB4MDAyOCwgMHg4NjA5fSwKIAkJICAgIC8qIE5vdGU6IHRoZXNlIHZhbHVlcyBhcmUgY29uZmlybWVkIGF0IHRoZSBlbmQgb2YgYXJyYXkgKi8KLQl7MHgwMDA1LCAweDg2MEF9LAkvKiAuLi4gKi8KLQl7MHgwMDI1LCAweDg2MEJ9LAotCXsweDAwRTEsIDB4ODYwQ30sCi0JezB4MDBGQSwgMHg4NjBEfSwKLQl7MHgwMEY0LCAweDg2MEV9LAotCXsweDAwRTgsIDB4ODYwRn0sCisJezB4MDAwNSwgMHg4NjBhfSwJLyogLi4uICovCisJezB4MDAyNSwgMHg4NjBifSwKKwl7MHgwMGUxLCAweDg2MGN9LAorCXsweDAwZmEsIDB4ODYwRH0sCisJezB4MDBmNCwgMHg4NjBlfSwKKwl7MHgwMGU4LCAweDg2MGZ9LAogCXsweDAwMjUsIDB4ODYxMH0sCS8qIEEzMyBDb2VmLiAqLwotCXsweDAwRkMsIDB4ODYxMX0sCS8qIFdoaXRlIGJhbGFuY2Ugb2Zmc2V0OiBSICovCisJezB4MDBmYywgMHg4NjExfSwJLyogV2hpdGUgYmFsYW5jZSBvZmZzZXQ6IFIgKi8KIAl7MHgwMDAxLCAweDg2MTJ9LAkvKiBXaGl0ZSBiYWxhbmNlIG9mZnNldDogR3IgKi8KLQl7MHgwMEZFLCAweDg2MTN9LAkvKiBXaGl0ZSBiYWxhbmNlIG9mZnNldDogQiAqLworCXsweDAwZmUsIDB4ODYxM30sCS8qIFdoaXRlIGJhbGFuY2Ugb2Zmc2V0OiBCICovCiAJezB4MDAwMCwgMHg4NjE0fSwJLyogV2hpdGUgYmFsYW5jZSBvZmZzZXQ6IEdiICovCiAKIAl7MHgwMDY0LCAweDg2NTF9LAkvKiBSIGdhaW4gZm9yIHdoaXRlIGJhbGFuY2UgKEwpICovCiAJezB4MDA0MCwgMHg4NjUyfSwJLyogR3IgZ2FpbiBmb3Igd2hpdGUgYmFsYW5jZSAoTCkgKi8KIAl7MHgwMDY2LCAweDg2NTN9LAkvKiBCIGdhaW4gZm9yIHdoaXRlIGJhbGFuY2UgKEwpICovCiAJezB4MDA0MCwgMHg4NjU0fSwJLyogR2IgZ2FpbiBmb3Igd2hpdGUgYmFsYW5jZSAoTCkgKi8KLQl7MHgwMDAxLCAweDg2M0Z9LAkvKiBFbmFibGUgZml4ZWQgZ2FtbWEgY29ycmVjdGlvbiAqLworCXsweDAwMDEsIDB4ODYzZn0sCS8qIEVuYWJsZSBmaXhlZCBnYW1tYSBjb3JyZWN0aW9uICovCiAKLQl7MHgwMEExLCAweDg2NTZ9LAkvKiBTaXplIC0gV2luZG93MTogMjU2eDI1NiwgV2luZG93MjogMTI4eDEyOCAqLworCXsweDAwYTEsIDB4ODY1Nn0sCS8qIFNpemUgLSBXaW5kb3cxOiAyNTZ4MjU2LCBXaW5kb3cyOiAxMjh4MTI4ICovCiAJLyogVVYgZGl2aXNpb246IFVWIG5vIGNoYW5nZSwgRW5hYmxlIE5ldyBlZGdlIGVuaGFuY2VtZW50ICovCiAJezB4MDAxOCwgMHg4NjU3fSwJLyogRWRnZSBnYWluIGhpZ2ggdGhyZXNob2xkICovCiAJezB4MDAyMCwgMHg4NjU4fSwJLyogRWRnZSBnYWluIGxvdyB0aHJlc2hvbGQgKi8KIAl7MHgwMDBBLCAweDg2NTl9LAkvKiBFZGdlIGJhbmR3aWR0aCBoaWdoIHRocmVzaG9sZCAqLwotCXsweDAwMDUsIDB4ODY1QX0sCS8qIEVkZ2UgYmFuZHdpZHRoIGxvdyB0aHJlc2hvbGQgKi8KKwl7MHgwMDA1LCAweDg2NWF9LAkvKiBFZGdlIGJhbmR3aWR0aCBsb3cgdGhyZXNob2xkICovCiAJezB4MDA2NCwgMHg4NjA3fSwJLyogVVYgZmlsdGVyIGVuYWJsZSAqLwogCiAJezB4MDAxNiwgMHg4NjYwfSwKLQl7MHgwMDAwLCAweDg2QjB9LAkvKiBCYWQgcGl4ZWxzIGNvbXBlbnNhdGlvbiBhZGRyZXNzICovCi0JezB4MDBEQywgMHg4NkIxfSwJLyogWCBjb29yZCBmb3IgYmFkIHBpeGVscyBjb21wZW5zYXRpb24gKEwpICovCi0JezB4MDAwMCwgMHg4NkIyfSwKLQl7MHgwMDA5LCAweDg2QjN9LAkvKiBZIGNvb3JkIGZvciBiYWQgcGl4ZWxzIGNvbXBlbnNhdGlvbiAoTCkgKi8KLQl7MHgwMDAwLCAweDg2QjR9LAorCXsweDAwMDAsIDB4ODZiMH0sCS8qIEJhZCBwaXhlbHMgY29tcGVuc2F0aW9uIGFkZHJlc3MgKi8KKwl7MHgwMGRjLCAweDg2YjF9LAkvKiBYIGNvb3JkIGZvciBiYWQgcGl4ZWxzIGNvbXBlbnNhdGlvbiAoTCkgKi8KKwl7MHgwMDAwLCAweDg2YjJ9LAorCXsweDAwMDksIDB4ODZiM30sCS8qIFkgY29vcmQgZm9yIGJhZCBwaXhlbHMgY29tcGVuc2F0aW9uIChMKSAqLworCXsweDAwMDAsIDB4ODZiNH0sCiAKLQl7MHgwMDAxLCAweDg2QjB9LAotCXsweDAwRjUsIDB4ODZCMX0sCi0JezB4MDAwMCwgMHg4NkIyfSwKLQl7MHgwMEM2LCAweDg2QjN9LAotCXsweDAwMDAsIDB4ODZCNH0sCisJezB4MDAwMSwgMHg4NmIwfSwKKwl7MHgwMGY1LCAweDg2YjF9LAorCXsweDAwMDAsIDB4ODZiMn0sCisJezB4MDBjNiwgMHg4NmIzfSwKKwl7MHgwMDAwLCAweDg2YjR9LAogCi0JezB4MDAwMiwgMHg4NkIwfSwKLQl7MHgwMDFDLCAweDg2QjF9LAotCXsweDAwMDEsIDB4ODZCMn0sCi0JezB4MDBENywgMHg4NkIzfSwKLQl7MHgwMDAwLCAweDg2QjR9LAorCXsweDAwMDIsIDB4ODZiMH0sCisJezB4MDAxYywgMHg4NmIxfSwKKwl7MHgwMDAxLCAweDg2YjJ9LAorCXsweDAwZDcsIDB4ODZiM30sCisJezB4MDAwMCwgMHg4NmI0fSwKIAotCXsweDAwMDMsIDB4ODZCMH0sCi0JezB4MDAxQywgMHg4NkIxfSwKLQl7MHgwMDAxLCAweDg2QjJ9LAotCXsweDAwRDgsIDB4ODZCM30sCi0JezB4MDAwMCwgMHg4NkI0fSwKKwl7MHgwMDAzLCAweDg2YjB9LAorCXsweDAwMWMsIDB4ODZiMX0sCisJezB4MDAwMSwgMHg4NmIyfSwKKwl7MHgwMGQ4LCAweDg2YjN9LAorCXsweDAwMDAsIDB4ODZiNH0sCiAKLQl7MHgwMDA0LCAweDg2QjB9LAotCXsweDAwMUQsIDB4ODZCMX0sCi0JezB4MDAwMSwgMHg4NkIyfSwKLQl7MHgwMEQ4LCAweDg2QjN9LAotCXsweDAwMDAsIDB4ODZCNH0sCi0JezB4MDAxRSwgMHg4NjYwfSwKKwl7MHgwMDA0LCAweDg2YjB9LAorCXsweDAwMWQsIDB4ODZiMX0sCisJezB4MDAwMSwgMHg4NmIyfSwKKwl7MHgwMGQ4LCAweDg2YjN9LAorCXsweDAwMDAsIDB4ODZiNH0sCisJezB4MDAxZSwgMHg4NjYwfSwKIAogCS8qIFJFQUQgeyAwLCAweDAwMDAsIDB4ODYwOCB9IC0+CiAJCTAwMDA6IDEzICAqLwpAQCAtMTQ0OSw3ICsxNDQ3LDcgQEAKIH0KIAogc3RhdGljIGludCB3cml0ZV92ZWN0b3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkJY29uc3QgX191MTYgZGF0YVtdWzNdKQorCQkJY29uc3QgdTE2IGRhdGFbXVsyXSkKIHsKIAlzdHJ1Y3QgdXNiX2RldmljZSAqZGV2ID0gZ3NwY2FfZGV2LT5kZXY7CiAJaW50IHJldCwgaSA9IDA7CkBAIC0xNDg3LDcgKzE0ODUsNiBAQAogCVBERUJVRyhEX1BST0JFLCAiV2luZG93IDEgYXZlcmFnZSBsdW1pbmFuY2U6ICVkIiwgZGF0YTEpOwogCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwotCWNhbS0+ZXBhZGRyID0gMHgwMTsKIAljYW0tPmNhbV9tb2RlID0gc2lmX21vZGU7CiAJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHNpZl9tb2RlKTsKIApAQCAtMTU5MywxMyArMTU5MCw2IEBACiAJcmVnX3dyaXRlKGdzcGNhX2Rldi0+ZGV2LCAweDg2NTQsIGJyaWdodG5lc3MpOwogfQogCi1zdGF0aWMgdm9pZCBnZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KLQlzZC0+YnJpZ2h0bmVzcyA9IHJlZ19yZWFkKGdzcGNhX2RldiwgMHg4NjUxKTsKLX0KLQogc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTE2MTQsNyArMTYwNCw2IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JZ2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOwogCSp2YWwgPSBzZC0+YnJpZ2h0bmVzczsKIAlyZXR1cm4gMDsKIH0KQEAgLTE2NjYsOCArMTY1NSwxMSBAQAogLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLwogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NwY2E1NjEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTU2MS5jCmluZGV4IDNjOTI4ODAuLmM5OWM1ZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTU2MS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3BjYTU2MS5jCkBAIC0xNDEsMzggKzE0MSwzOCBAQAogI2RlZmluZSBTUENBNTYxX09GRlNFVF9XSU4xR0JBVkUgMTQKICNkZWZpbmUgU1BDQTU2MV9PRkZTRVRfRlJFUSAxNQogI2RlZmluZSBTUENBNTYxX09GRlNFVF9WU1lOQyAxNgotI2RlZmluZSBTUENBNTYxX09GRlNFVF9EQVRBIDEKICNkZWZpbmUgU1BDQTU2MV9JTkRFWF9JMkNfQkFTRSAweDg4MDAKICNkZWZpbmUgU1BDQTU2MV9TTkFQQklUIDB4MjAKICNkZWZpbmUgU1BDQTU2MV9TTkFQQ1RSTCAweDQwCiAKLXN0YXRpYyBjb25zdCBfX3UxNiByZXY3MmFfaW5pdF9kYXRhMVtdWzJdID0geworc3RhdGljIGNvbnN0IHUxNiByZXY3MmFfcmVzZXRbXVsyXSA9IHsKIAl7MHgwMDAwLCAweDgxMTR9LAkvKiBTb2Z0d2FyZSBHUElPIG91dHB1dCBkYXRhICovCiAJezB4MDAwMSwgMHg4MTE0fSwJLyogU29mdHdhcmUgR1BJTyBvdXRwdXQgZGF0YSAqLwogCXsweDAwMDAsIDB4ODExMn0sCS8qIFNvbWUga2luZCBvZiByZXNldCAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IF9fdTE2IHJldjcyYV9pbml0X2RhdGExW11bMl0gPSB7CiAJezB4MDAwMywgMHg4NzAxfSwJLyogUENMSyBjbG9jayBkZWxheSBhZGp1c3RtZW50ICovCiAJezB4MDAwMSwgMHg4NzAzfSwJLyogSFNZTkMgZnJvbSBjbW9zIGludmVydGVkICovCiAJezB4MDAxMSwgMHg4MTE4fSwJLyogRW5hYmxlIGFuZCBjb25mIHNlbnNvciAqLwogCXsweDAwMDEsIDB4ODExOH0sCS8qIENvbmYgc2Vuc29yICovCiAJezB4MDA5MiwgMHg4ODA0fSwJLyogSSBrbm93IG5vdGhpbmcgYWJvdXQgdGhlc2UgKi8KIAl7MHgwMDEwLCAweDg4MDJ9LAkvKiAweDg4eHggcmVnaXN0ZXJzLCBzbyBJIHdvbid0ICovCi0JezB4MDAwZCwgMHg4ODA1fSwJLyogc2Vuc29yIGRlZmF1bHQgc2V0dGluZyAqLwogCXt9CiB9Owotc3RhdGljIGNvbnN0IF9fdTE2IHJldjcyYV9pbml0X3NlbnNvcjFbXVsyXSA9IHsKLQkJCQkvKiBtcy13aW4gdmFsdWVzICovCi0JezB4MDAwMSwgMHgwMDE4fSwJLyogMHgwMSA8LSAweDBkICovCi0JezB4MDAwMiwgMHgwMDY1fSwJLyogMHgwMiA8LSAweDE4ICovCi0JezB4MDAwNCwgMHgwMTIxfSwJLyogMHgwNCA8LSAweDAxNjUgKi8KLQl7MHgwMDA1LCAweDAwYWF9LAkvKiAweDA1IDwtIDB4MjEgKi8KLQl7MHgwMDA3LCAweDAwMDR9LAkvKiAweDA3IDwtIDB4YWEgKi8KLQl7MHgwMDIwLCAweDE1MDJ9LAkvKiAweDIwIDwtIDB4MTUwNCAqLwotCXsweDAwMzksIDB4MDAxMH0sCS8qIDB4MzkgPC0gMHgwMiAqLwotCXsweDAwMzUsIDB4MDA0OX0sCS8qIDB4MzUgPC0gMHgxMCAqLwotCXsweDAwMDksIDB4MTAwYn0sCS8qIDB4MDkgPC0gMHgxMDQ5ICovCi0JezB4MDAyOCwgMHgwMDBmfSwJLyogMHgyOCA8LSAweDBiICovCi0JezB4MDAzYiwgMHgwMDNjfSwJLyogMHgzYiA8LSAweDBmICovCi0JezB4MDAzYywgMHgwMDAwfSwJLyogMHgzYyA8LSAweDAwICovCitzdGF0aWMgY29uc3QgdTE2IHJldjcyYV9pbml0X3NlbnNvcjFbXVsyXSA9IHsKKwl7MHgwMDAxLCAweDAwMGR9LAorCXsweDAwMDIsIDB4MDAxOH0sCisJezB4MDAwNCwgMHgwMTY1fSwKKwl7MHgwMDA1LCAweDAwMjF9LAorCXsweDAwMDcsIDB4MDBhYX0sCisJezB4MDAyMCwgMHgxNTA0fSwKKwl7MHgwMDM5LCAweDAwMDJ9LAorCXsweDAwMzUsIDB4MDAxMH0sCisJezB4MDAwOSwgMHgxMDQ5fSwKKwl7MHgwMDI4LCAweDAwMGJ9LAorCXsweDAwM2IsIDB4MDAwZn0sCisJezB4MDAzYywgMHgwMDAwfSwKIAl7fQogfTsKIHN0YXRpYyBjb25zdCBfX3UxNiByZXY3MmFfaW5pdF9kYXRhMltdWzJdID0gewpAQCAtMTkwLDE1ICsxOTAsMTAgQEAKIAl7MHgwMDAyLCAweDgyMDF9LAkvKiBPdXRwdXQgYWRkcmVzcyBmb3Igci93IHNlcmlhbCBFRVBST00gKi8KIAl7MHgwMDA4LCAweDgyMDB9LAkvKiBDbGVhciB2YWxpZCBiaXQgZm9yIHNlcmlhbCBFRVBST00gKi8KIAl7MHgwMDAxLCAweDgyMDB9LAkvKiBPcHJNb2RlIHRvIGJlIGV4ZWN1dGVkIGJ5IGhhcmR3YXJlICovCi0JezB4MDAwNywgMHg4MjAxfSwJLyogT3V0cHV0IGFkZHJlc3MgZm9yIHIvdyBzZXJpYWwgRUVQUk9NICovCi0JezB4MDAwOCwgMHg4MjAwfSwJLyogQ2xlYXIgdmFsaWQgYml0IGZvciBzZXJpYWwgRUVQUk9NICovCi0JezB4MDAwMSwgMHg4MjAwfSwJLyogT3ByTW9kZSB0byBiZSBleGVjdXRlZCBieSBoYXJkd2FyZSAqLwotCXsweDAwMTAsIDB4ODY2MH0sCS8qIENvbXBlbnNhdGlvbiBtZW1vcnkgc3R1ZmYgKi8KLQl7MHgwMDE4LCAweDg2NjB9LAkvKiBDb21wZW5zYXRpb24gbWVtb3J5IHN0dWZmICovCi0KLQl7MHgwMDA0LCAweDg2MTF9LAkvKiBSIG9mZnNldCBmb3Igd2hpdGUgYmFsYW5jZSAqLwotCXsweDAwMDQsIDB4ODYxMn0sCS8qIEdyIG9mZnNldCBmb3Igd2hpdGUgYmFsYW5jZSAqLwotCXsweDAwMDcsIDB4ODYxM30sCS8qIEIgb2Zmc2V0IGZvciB3aGl0ZSBiYWxhbmNlICovCisvKiBmcm9tIG1zLXdpbiAqLworCXsweDAwMDAsIDB4ODYxMX0sCS8qIFIgb2Zmc2V0IGZvciB3aGl0ZSBiYWxhbmNlICovCisJezB4MDBmZCwgMHg4NjEyfSwJLyogR3Igb2Zmc2V0IGZvciB3aGl0ZSBiYWxhbmNlICovCisJezB4MDAwMywgMHg4NjEzfSwJLyogQiBvZmZzZXQgZm9yIHdoaXRlIGJhbGFuY2UgKi8KIAl7MHgwMDAwLCAweDg2MTR9LAkvKiBHYiBvZmZzZXQgZm9yIHdoaXRlIGJhbGFuY2UgKi8KIC8qIGZyb20gbXMtd2luICovCiAJezB4MDAzNSwgMHg4NjUxfSwJLyogUiBnYWluIGZvciB3aGl0ZSBiYWxhbmNlICovCkBAIC0yMDYsOCArMjAxLDggQEAKIAl7MHgwMDVmLCAweDg2NTN9LAkvKiBCIGdhaW4gZm9yIHdoaXRlIGJhbGFuY2UgKi8KIAl7MHgwMDQwLCAweDg2NTR9LAkvKiBHYiBnYWluIGZvciB3aGl0ZSBiYWxhbmNlICovCiAJezB4MDAwMiwgMHg4NTAyfSwJLyogTWF4aW11bSBhdmVyYWdlIGJpdCByYXRlIHN0dWZmICovCi0KIAl7MHgwMDExLCAweDg4MDJ9LAorCiAJezB4MDA4NywgMHg4NzAwfSwJLyogU2V0IG1hc3RlciBjbG9jayAoOTZNaHo/Pz8/KSAqLwogCXsweDAwODEsIDB4ODcwMn0sCS8qIE1hc3RlciBjbG9jayBvdXRwdXQgZW5hYmxlICovCiAKQEAgLTIxOCwxMDQgKzIxMywxNSBAQAogCXsweDAwMDMsIDB4ODY1Y30sCS8qIFZlcnRpY2FsIG9mZnNldCBmb3IgdmFsaWQgbGluZXMgKi8KIAl7fQogfTsKLXN0YXRpYyBjb25zdCBfX3UxNiByZXY3MmFfaW5pdF9zZW5zb3IyW11bMl0gPSB7Ci0JCQkJLyogbXMtd2luIHZhbHVlcyAqLwotCXsweDAwMDMsIDB4MDEyMX0sCS8qIDB4MDMgPC0gMHgwMSAweDIxIC8vMjg5ICovCi0JezB4MDAwNCwgMHgwMTY1fSwJLyogMHgwNCA8LSAweDAxIDB4NjUgLy8zNTcgKi8KLQl7MHgwMDA1LCAweDAwMmZ9LAkvKiAweDA1IDwtIDB4MmYgKi8KLQl7MHgwMDA2LCAweDAwMDB9LAkvKiAweDA2IDwtIDAgKi8KLQl7MHgwMDBhLCAweDAwMDJ9LAkvKiAweDBhIDwtIDIgKi8KLQl7MHgwMDA5LCAweDEwNjF9LAkvKiAweDA5IDwtIDB4MTA2MSAqLwotCXsweDAwMzUsIDB4MDAxNH0sCS8qIDB4MzUgPC0gMHgxNCAqLwotCXt9Ci19Owotc3RhdGljIGNvbnN0IF9fdTE2IHJldjcyYV9pbml0X2RhdGEzW11bMl0gPSB7Ci0JezB4MDAzMCwgMHg4MTEyfSwJLyogSVNPIGFuZCBkcm9wIHBhY2tldCBlbmFibGUgKi8KLS8qZml4bWU6IHNob3VsZCBzdG9wIGhlcmUqLwotCXsweDAwMDAsIDB4ODExMn0sCS8qIFNvbWUga2luZCBvZiByZXNldCA/Pz8/ICovCi0JezB4MDAwOSwgMHg4MTE4fSwJLyogRW5hYmxlIHNlbnNvciBhbmQgc2V0IHN0YW5kYnkgKi8KLQl7MHgwMDAwLCAweDgxMTR9LAkvKiBTb2Z0d2FyZSBHUElPIG91dHB1dCBkYXRhICovCi0JezB4MDAwMCwgMHg4MTE0fSwJLyogU29mdHdhcmUgR1BJTyBvdXRwdXQgZGF0YSAqLwotCXsweDAwMDEsIDB4ODExNH0sCS8qIFNvZnR3YXJlIEdQSU8gb3V0cHV0IGRhdGEgKi8KLQl7MHgwMDAwLCAweDgxMTJ9LAkvKiBTb21lIGtpbmQgb2YgcmVzZXQgPz8/ICovCi0JezB4MDAwMywgMHg4NzAxfSwKLQl7MHgwMDAxLCAweDg3MDN9LAotCXsweDAwMTEsIDB4ODExOH0sCi0JezB4MDAwMSwgMHg4MTE4fSwKLQkvKioqKioqKioqKioqKioqLwotCXsweDAwOTIsIDB4ODgwNH0sCi0JezB4MDAxMCwgMHg4ODAyfSwKLQl7MHgwMDBkLCAweDg4MDV9LAotCXsweDAwMDEsIDB4ODgwMX0sCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDE4LCAweDg4MDV9LAotCXsweDAwMDIsIDB4ODgwMX0sCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDY1LCAweDg4MDV9LAotCXsweDAwMDQsIDB4ODgwMX0sCi0JezB4MDAwMSwgMHg4ODAwfSwKLQl7MHgwMDIxLCAweDg4MDV9LAotCXsweDAwMDUsIDB4ODgwMX0sCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMGFhLCAweDg4MDV9LAotCXsweDAwMDcsIDB4ODgwMX0sCS8qIG1vZGUgMHhhYSAqLwotCXsweDAwMDAsIDB4ODgwMH0sCi0JezB4MDAwNCwgMHg4ODA1fSwKLQl7MHgwMDIwLCAweDg4MDF9LAotCXsweDAwMTUsIDB4ODgwMH0sCS8qIG1vZGUgMHgwNDE1ICovCi0JezB4MDAwMiwgMHg4ODA1fSwKLQl7MHgwMDM5LCAweDg4MDF9LAotCXsweDAwMDAsIDB4ODgwMH0sCi0JezB4MDAxMCwgMHg4ODA1fSwKLQl7MHgwMDM1LCAweDg4MDF9LAotCXsweDAwMDAsIDB4ODgwMH0sCi0JezB4MDA0OSwgMHg4ODA1fSwKLQl7MHgwMDA5LCAweDg4MDF9LAotCXsweDAwMTAsIDB4ODgwMH0sCi0JezB4MDAwYiwgMHg4ODA1fSwKLQl7MHgwMDI4LCAweDg4MDF9LAotCXsweDAwMDAsIDB4ODgwMH0sCi0JezB4MDAwZiwgMHg4ODA1fSwKLQl7MHgwMDNiLCAweDg4MDF9LAotCXsweDAwMDAsIDB4ODgwMH0sCi0JezB4MDAwMCwgMHg4ODA1fSwKLQl7MHgwMDNjLCAweDg4MDF9LAotCXsweDAwMDAsIDB4ODgwMH0sCi0JezB4MDAwMiwgMHg4NTAyfSwKLQl7MHgwMDM5LCAweDg4MDF9LAotCXsweDAwMDAsIDB4ODgwNX0sCi0JezB4MDAwMCwgMHg4ODAwfSwKLQotCXsweDAwODcsIDB4ODcwMH0sCS8qIG92ZXJ3cml0ZSBieSBzdGFydCAqLwotCXsweDAwODEsIDB4ODcwMn0sCi0JezB4MDAwMCwgMHg4NTAwfSwKLS8qCXsweDAwMTAsIDB4ODUwMH0sICAtLSBQcmV2aW91cyBsaW5lIHdhcyB0aGlzICovCi0JezB4MDAwMiwgMHg4NjVifSwKLQl7MHgwMDAzLCAweDg2NWN9LAotCS8qKioqKioqKioqKioqKiovCi0JezB4MDAwMywgMHg4ODAxfSwJLyogMHgxMjEtPiAyODkgKi8KLQl7MHgwMDIxLCAweDg4MDV9LAotCXsweDAwMDEsIDB4ODgwMH0sCi0JezB4MDAwNCwgMHg4ODAxfSwJLyogMHgxNjUgLT4gMzU3ICovCi0JezB4MDA2NSwgMHg4ODA1fSwKLQl7MHgwMDAxLCAweDg4MDB9LAotCXsweDAwMDUsIDB4ODgwMX0sCS8qIDB4MmYgLy9ibGFua2luZyBjb250cm9sIGNvbG9ubmUgKi8KLQl7MHgwMDJmLCAweDg4MDV9LAotCXsweDAwMDAsIDB4ODgwMH0sCi0JezB4MDAwNiwgMHg4ODAxfSwJLyogMHgwMCAvL2JsYW5raW5nIG1vZGUgcm93ICovCi0JezB4MDAwMCwgMHg4ODA1fSwKLQl7MHgwMDAwLCAweDg4MDB9LAotCXsweDAwMGEsIDB4ODgwMX0sCS8qIDB4MDEgLy8weDAyICovCi0JezB4MDAwMSwgMHg4ODA1fSwKLQl7MHgwMDAwLCAweDg4MDB9LAotCXsweDAwMDksIDB4ODgwMX0sCS8qIDB4MTA2MSAtIHNldGV4cG9zdXJlIHRpbWVzICYmIHBpeGVsIGNsb2NrCitzdGF0aWMgY29uc3QgdTE2IHJldjcyYV9pbml0X3NlbnNvcjJbXVsyXSA9IHsKKwl7MHgwMDAzLCAweDAxMjF9LAorCXsweDAwMDQsIDB4MDE2NX0sCisJezB4MDAwNSwgMHgwMDJmfSwJLyogYmxhbmtpbmcgY29udHJvbCBjb2x1bW4gKi8KKwl7MHgwMDA2LCAweDAwMDB9LAkvKiBibGFua2luZyBtb2RlIHJvdyovCisJezB4MDAwYSwgMHgwMDAyfSwKKwl7MHgwMDA5LCAweDEwNjF9LAkvKiBzZXRleHBvc3VyZSB0aW1lcyAmJiBwaXhlbCBjbG9jawogCQkJCSAqIDAwMDEgMCB8IDAwMCAwMTEwIDAwMDEgKi8KLQl7MHgwMDYxLCAweDg4MDV9LAkvKiA2MSAzMSAqLwotCXsweDAwMDgsIDB4ODgwMH0sCS8qIDA4ICovCi0JezB4MDAzNSwgMHg4ODAxfSwJLyogMHgxNCAtIHNldCBnYWluIGdlbmVyYWwgKi8KLQl7MHgwMDFmLCAweDg4MDV9LAkvKiAweDE0ICovCi0JezB4MDAwMCwgMHg4ODAwfSwKLQl7MHgwMDBlLCAweDgxMTJ9LAkvKiB3aGl0ZSBiYWxhbmNlIC0gd2FzIDMwICovCisJezB4MDAzNSwgMHgwMDE0fSwKIAl7fQogfTsKIApAQCAtNDYwLDYgKzM2Niw3IEBACiAJCXJlZ19yKGdzcGNhX2RldiwgMHg4ODAzLCAxKTsKIAkJaWYgKCFnc3BjYV9kZXYtPnVzYl9idWZbMF0pCiAJCQlyZXR1cm47CisJCW1zbGVlcCgxMCk7CiAJfSB3aGlsZSAoLS1yZXRyeSk7CiB9CiAKQEAgLTQ3OSw2ICszODYsNyBAQAogCQkJcmVnX3IoZ3NwY2FfZGV2LCAweDg4MDUsIDEpOwogCQkJcmV0dXJuICgoaW50KSB2YWx1ZSA8PCA4KSB8IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKIAkJfQorCQltc2xlZXAoMTApOwogCX0gd2hpbGUgKC0tcmV0cnkpOwogCXJldHVybiAtMTsKIH0KQEAgLTU0MSw3ICs0NDksNiBAQAogCX0KIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmVwYWRkciA9IDB4MDE7CiAJZ3NwY2FfZGV2LT5uYmFsdCA9IDcgKyAxOwkvKiBjaG9vc2UgYWx0ZXJuYXRlIDcgZmlyc3QgKi8KIAogCXNkLT5jaGlwX3JldmlzaW9uID0gaWQtPmRyaXZlcl9pbmZvOwpAQCAtNTcyLDExICs0NzksMTMgQEAKIHN0YXRpYyBpbnQgc2RfaW5pdF83MmEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCVBERUJVRyhEX1NUUkVBTSwgIkNoaXAgcmV2aXNpb246IDA3MmEiKTsKKwl3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCByZXY3MmFfcmVzZXQpOworCW1zbGVlcCgyMDApOwogCXdyaXRlX3ZlY3Rvcihnc3BjYV9kZXYsIHJldjcyYV9pbml0X2RhdGExKTsKIAl3cml0ZV9zZW5zb3JfNzJhKGdzcGNhX2RldiwgcmV2NzJhX2luaXRfc2Vuc29yMSk7CiAJd3JpdGVfdmVjdG9yKGdzcGNhX2RldiwgcmV2NzJhX2luaXRfZGF0YTIpOwogCXdyaXRlX3NlbnNvcl83MmEoZ3NwY2FfZGV2LCByZXY3MmFfaW5pdF9zZW5zb3IyKTsKLQl3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCByZXY3MmFfaW5pdF9kYXRhMyk7CisJcmVnX3dfdmFsKGdzcGNhX2Rldi0+ZGV2LCAweDgxMTIsIDB4MzApOwogCXJldHVybiAwOwogfQogCkBAIC03MzEsMTEgKzY0MCwxOCBAQAogCWludCBDbGNrOwogCWludCBtb2RlOwogCisJd3JpdGVfdmVjdG9yKGdzcGNhX2RldiwgcmV2NzJhX3Jlc2V0KTsKKwltc2xlZXAoMjAwKTsKKwl3cml0ZV92ZWN0b3IoZ3NwY2FfZGV2LCByZXY3MmFfaW5pdF9kYXRhMSk7CisJd3JpdGVfc2Vuc29yXzcyYShnc3BjYV9kZXYsIHJldjcyYV9pbml0X3NlbnNvcjEpOworCiAJbW9kZSA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhpbnQpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2OwogCXN3aXRjaCAobW9kZSkgewogCWRlZmF1bHQ6Ci0vKgljYXNlIDA6Ci0JY2FzZSAxOiAqLworCWNhc2UgMDoKKwkJQ2xjayA9IDB4Mjc7CQkvKiBtcy13aW4gMHg4NyAqLworCQlicmVhazsKKwljYXNlIDE6CiAJCUNsY2sgPSAweDI1OwogCQlicmVhazsKIAljYXNlIDI6CkBAIC03NDUsMTMgKzY2MSwxNCBAQAogCQlDbGNrID0gMHgyMTsKIAkJYnJlYWs7CiAJfQotCXJlZ193X3ZhbChkZXYsIDB4ODUwMCwgbW9kZSk7CS8qIG1vZGUgKi8KIAlyZWdfd192YWwoZGV2LCAweDg3MDAsIENsY2spOwkvKiAweDI3IGNsb2NrICovCi0JcmVnX3dfdmFsKGRldiwgMHg4MTEyLCAweDEwIHwgMHgyMCk7CisJcmVnX3dfdmFsKGRldiwgMHg4NzAyLCAweDgxKTsKKwlyZWdfd192YWwoZGV2LCAweDg1MDAsIG1vZGUpOwkvKiBtb2RlICovCisJd3JpdGVfc2Vuc29yXzcyYShnc3BjYV9kZXYsIHJldjcyYV9pbml0X3NlbnNvcjIpOwogCXNldGNvbnRyYXN0KGdzcGNhX2Rldik7CiAvKglzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CSAqIGZpeG1lOiBiYWQgdmFsdWVzICovCi0Jc2V0d2hpdGUoZ3NwY2FfZGV2KTsKIAlzZXRhdXRvZ2Fpbihnc3BjYV9kZXYpOworCXJlZ193X3ZhbChkZXYsIDB4ODExMiwgMHgxMCB8IDB4MjApOwogCXJldHVybiAwOwogfQogCkBAIC04NjcsMTIgKzc4NCwxMSBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCXN3aXRjaCAoZGF0YVswXSkgewkJCS8qIHNlcXVlbmNlIG51bWJlciAqLworCWxlbi0tOworCXN3aXRjaCAoKmRhdGErKykgewkJCS8qIHNlcXVlbmNlIG51bWJlciAqLwogCWNhc2UgMDoJCQkJCS8qIHN0YXJ0IG9mIGZyYW1lICovCiAJCWZyYW1lID0gZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsIGZyYW1lLAogCQkJCQlkYXRhLCAwKTsKLQkJZGF0YSArPSBTUENBNTYxX09GRlNFVF9EQVRBOwotCQlsZW4gLT0gU1BDQTU2MV9PRkZTRVRfREFUQTsKIAkJaWYgKGRhdGFbMV0gJiAweDEwKSB7CiAJCQkvKiBjb21wcmVzc2VkIGJheWVyICovCiAJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsCkBAIC04OTMsOCArODA5LDYgQEAKIAljYXNlIDB4ZmY6CQkJLyogZHJvcCAoZW1wdHkgbXBhY2tldHMpICovCiAJCXJldHVybjsKIAl9Ci0JZGF0YSsrOwotCWxlbi0tOwogCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIElOVEVSX1BBQ0tFVCwgZnJhbWUsIGRhdGEsIGxlbik7CiB9CiAKQEAgLTExOTcsOCArMTExMSwxMCBAQAogLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLwogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcTkwNS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcTkwNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA0ZTNhZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1LmMKQEAgLTAsMCArMSw0NTYgQEAKKy8qCisgKiBTUTkwNSBzdWJkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDgsIDIwMDkgQWRhbSBCYWtlciBhbmQgVGhlb2RvcmUgS2lsZ29yZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyoKKyAqIEhpc3RvcnkgYW5kIEFja25vd2xlZGdtZW50cworICoKKyAqIFRoZSBvcmlnaW5hbCBMaW51eCBkcml2ZXIgZm9yIFNROTA1IGJhc2VkIGNhbWVyYXMgd2FzIHdyaXR0ZW4gYnkKKyAqIE1hcmNlbGwgTGVuZ3llbCBhbmQgZnVydGVyIGRldmVsb3BlZCBieSBtYW55IG90aGVyIGNvbnRyaWJ1dGVycworICogYW5kIGlzIGF2YWlsYWJsZSBmcm9tIGh0dHA6Ly9zb3VyY2Vmb3JnZS5uZXQvcHJvamVjdHMvc3FjYW0vCisgKgorICogVGhpcyBkcml2ZXIgdGFrZXMgYWR2YW50YWdlIG9mIHRoZSByZXZlcnNlIGVuZ2luZWVyaW5nIHdvcmsgZG9uZSBmb3IKKyAqIHRoYXQgZHJpdmVyIGFuZCBmb3IgbGliZ3Bob3RvMiBidXQgc2hhcmVzIG5vIGNvZGUgd2l0aCB0aGVtLgorICoKKyAqIFRoaXMgZHJpdmVyIGhhcyB1c2VkIGFzIGEgYmFzZSB0aGUgZmluZXBpeCBkcml2ZXIgYW5kIG90aGVyIGdzcGNhCisgKiBiYXNlZCBkcml2ZXJzIGFuZCBtYXkgc3RpbGwgY29udGFpbiBjb2RlIGZyYWdtZW50cyB0YWtlbiBmcm9tIHRob3NlCisgKiBkcml2ZXJzLgorICovCisKKyNkZWZpbmUgTU9EVUxFX05BTUUgInNxOTA1IgorCisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSAiZ3NwY2EuaCIKKworTU9EVUxFX0FVVEhPUigiQWRhbSBCYWtlciA8bGludXhAYmFrZXItbmV0Lm9yZy51az4sICIKKwkJIlRoZW9kb3JlIEtpbGdvcmUgPGtpbGdvdGFAYXVidXJuLmVkdT4iKTsKK01PRFVMRV9ERVNDUklQVElPTigiR1NQQ0EvU1E5MDUgVVNCIENhbWVyYSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogRGVmYXVsdCB0aW1lb3V0cywgaW4gbXMgKi8KKyNkZWZpbmUgU1E5MDVfQ01EX1RJTUVPVVQgNTAwCisjZGVmaW5lIFNROTA1X0RBVEFfVElNRU9VVCAxMDAwCisKKy8qIE1heGltdW0gdHJhbnNmZXIgc2l6ZSB0byB1c2UuICovCisjZGVmaW5lIFNROTA1X01BWF9UUkFOU0ZFUiAweDgwMDAKKyNkZWZpbmUgRlJBTUVfSEVBREVSX0xFTiA2NAorCisvKiBUaGUga25vd24gbW9kZXMsIG9yIHJlZ2lzdGVycy4gVGhlc2UgZ28gaW4gdGhlICJ2YWx1ZSIgc2xvdC4gKi8KKworLyogMDAgaXMgIm5vbmUiIG9idmlvdXNseSAqLworCisjZGVmaW5lIFNROTA1X0JVTEtfUkVBRAkweDAzCS8qIHByZWNlZGVzIGFueSBidWxrIHJlYWQgKi8KKyNkZWZpbmUgU1E5MDVfQ09NTUFORAkweDA2CS8qIHByZWNlZGVzIHRoZSBjb21tYW5kIGNvZGVzIGJlbG93ICovCisjZGVmaW5lIFNROTA1X1BJTkcJMHgwNwkvKiB3aGVuIHJlYWRpbmcgYW4gImlkbGluZyIgY29tbWFuZCAqLworI2RlZmluZSBTUTkwNV9SRUFEX0RPTkUgMHhjMCAgICAvKiBhY2sgYnVsayByZWFkIGNvbXBsZXRlZCAqLworCisvKiBBbnkgbm9uLXplcm8gdmFsdWUgaW4gdGhlIGJvdHRvbSAyIGJpdHMgb2YgdGhlIDJuZCBieXRlIG9mCisgKiB0aGUgSUQgYXBwZWFycyB0byBpbmRpY2F0ZSB0aGUgY2FtZXJhIGNhbiBkbyA2NDAqNDgwLiBJZiB0aGUKKyAqIExTQiBvZiB0aGF0IGJ5dGUgaXMgc2V0IHRoZSBpbWFnZSBpcyBqdXN0IHVwc2lkZSBkb3duLCBvdGhlcndpc2UKKyAqIGl0IGlzIHJvdGF0ZWQgMTgwIGRlZ3JlZXMuICovCisjZGVmaW5lIFNROTA1X0hJUkVTX01BU0sJMHgwMDAwMDMwMAorI2RlZmluZSBTUTkwNV9PUklFTlRBVElPTl9NQVNLCTB4MDAwMDAxMDAKKworLyogU29tZSBjb21tYW5kIGNvZGVzLiBUaGVzZSBnbyBpbiB0aGUgImluZGV4IiBzbG90LiAqLworCisjZGVmaW5lIFNROTA1X0lEICAgICAgMHhmMAkvKiBhc2tzIGZvciBtb2RlbCBzdHJpbmcgKi8KKyNkZWZpbmUgU1E5MDVfQ09ORklHICAweDIwCS8qIGdldHMgcGhvdG8gYWxsb2MuIHRhYmxlLCBub3QgdXNlZCBoZXJlICovCisjZGVmaW5lIFNROTA1X0RBVEEgICAgMHgzMAkvKiBhY2Nlc3NlcyBwaG90byBkYXRhLCBub3QgdXNlZCBoZXJlICovCisjZGVmaW5lIFNROTA1X0NMRUFSICAgMHhhMAkvKiBjbGVhciBldmVyeXRoaW5nICovCisjZGVmaW5lIFNROTA1X0NBUFRVUkVfTE9XICAweDYwCS8qIFN0YXJ0cyBjYXB0dXJlIGF0IDE2MHgxMjAgKi8KKyNkZWZpbmUgU1E5MDVfQ0FQVFVSRV9NRUQgIDB4NjEJLyogU3RhcnRzIGNhcHR1cmUgYXQgMzIweDI0MCAqLworI2RlZmluZSBTUTkwNV9DQVBUVVJFX0hJR0ggMHg2MgkvKiBTdGFydHMgY2FwdHVyZSBhdCA2NDB4NDgwIChzb21lIGNhbXMgb25seSkgKi8KKy8qIG5vdGUgdGhhdCB0aGUgY2FwdHVyZSBjb21tYW5kIGFsc28gY29udHJvbHMgdGhlIG91dHB1dCBkaW1lbnNpb25zICovCisKKy8qIFN0cnVjdHVyZSB0byBob2xkIGFsbCBvZiBvdXIgZGV2aWNlIHNwZWNpZmljIHN0dWZmICovCitzdHJ1Y3Qgc2QgeworCXN0cnVjdCBnc3BjYV9kZXYgZ3NwY2FfZGV2OwkvKiAhISBtdXN0IGJlIHRoZSBmaXJzdCBpdGVtICovCisKKwkvKgorCSAqIERyaXZlciBzdHVmZgorCSAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrX3N0cnVjdDsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya190aHJlYWQ7Cit9OworCitzdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBzcTkwNV9tb2RlW10gPSB7CisJeyAxNjAsIDEyMCwgVjRMMl9QSVhfRk1UX1NCR0dSOCwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTYwLAorCQkuc2l6ZWltYWdlID0gMTYwICogMTIwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDB9LAorCXsgMzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9TQkdHUjgsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDMyMCwKKwkJLnNpemVpbWFnZSA9IDMyMCAqIDI0MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAwfSwKKwl7IDY0MCwgNDgwLCBWNEwyX1BJWF9GTVRfU0JHR1I4LCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSA2NDAsCisJCS5zaXplaW1hZ2UgPSA2NDAgKiA0ODAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMH0KK307CisKKy8qCisgKiBTZW5kIGEgY29tbWFuZCB0byB0aGUgY2FtZXJhLgorICovCitzdGF0aWMgaW50IHNxOTA1X2NvbW1hbmQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1MTYgaW5kZXgpCit7CisJaW50IHJldDsKKworCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9ICdcMCc7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCSAgICAgIFVTQl9SRVFfU1lOQ0hfRlJBTUUsICAgICAgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwkJCSAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIFNROTA1X0NPTU1BTkQsIGluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIDEsCisJCQkgICAgICBTUTkwNV9DTURfVElNRU9VVCk7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAiJXM6IHVzYl9jb250cm9sX21zZyBmYWlsZWQgKCVkKSIsCisJCQlfX2Z1bmNfXywgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAorCQkJICAgICAgVVNCX1JFUV9TWU5DSF9GUkFNRSwgICAgICAgICAgICAgICAgLyogcmVxdWVzdCAqLworCQkJICAgICAgVVNCX0RJUl9JTiB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICBTUTkwNV9QSU5HLCAwLCBnc3BjYV9kZXYtPnVzYl9idWYsIDEsCisJCQkgICAgICBTUTkwNV9DTURfVElNRU9VVCk7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAiJXM6IHVzYl9jb250cm9sX21zZyBmYWlsZWQgMiAoJWQpIiwKKwkJCV9fZnVuY19fLCByZXQpOworCQlyZXR1cm4gcmV0OworCX0KKworCXJldHVybiAwOworfQorCisvKgorICogQWNrbm93bGVkZ2UgdGhlIGVuZCBvZiBhIGZyYW1lIC0gc2VlIHdhcm5pbmcgb24gc3E5MDVfY29tbWFuZC4KKyAqLworc3RhdGljIGludCBzcTkwNV9hY2tfZnJhbWUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCWludCByZXQ7CisKKwlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSAnXDAnOworCXJldCA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQkgICAgICBVU0JfUkVRX1NZTkNIX0ZSQU1FLCAgICAgICAgICAgICAgICAvKiByZXF1ZXN0ICovCisJCQkgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICBTUTkwNV9SRUFEX0RPTkUsIDAsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwKKwkJCSAgICAgIFNROTA1X0NNRF9USU1FT1VUKTsKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9FUlIsICIlczogdXNiX2NvbnRyb2xfbXNnIGZhaWxlZCAoJWQpIiwgX19mdW5jX18sIHJldCk7CisJCXJldHVybiByZXQ7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qCisgKiAgcmVxdWVzdCBhbmQgcmVhZCBhIGJsb2NrIG9mIGRhdGEgLSBzZWUgd2FybmluZyBvbiBzcTkwNV9jb21tYW5kLgorICovCitzdGF0aWMgaW50CitzcTkwNV9yZWFkX2RhdGEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCB1OCAqZGF0YSwgaW50IHNpemUpCit7CisJaW50IHJldDsKKwlpbnQgYWN0X2xlbjsKKworCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9ICdcMCc7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCSAgICAgIFVTQl9SRVFfU1lOQ0hfRlJBTUUsICAgICAgICAgICAgICAgIC8qIHJlcXVlc3QgKi8KKwkJCSAgICAgIFVTQl9ESVJfT1VUIHwgVVNCX1RZUEVfVkVORE9SIHwgVVNCX1JFQ0lQX0RFVklDRSwKKwkJCSAgICAgIFNROTA1X0JVTEtfUkVBRCwgc2l6ZSwgZ3NwY2FfZGV2LT51c2JfYnVmLAorCQkJICAgICAgMSwgU1E5MDVfQ01EX1RJTUVPVVQpOworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgIiVzOiB1c2JfY29udHJvbF9tc2cgZmFpbGVkICglZCkiLCBfX2Z1bmNfXywgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisJcmV0ID0gdXNiX2J1bGtfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJICAgdXNiX3JjdmJ1bGtwaXBlKGdzcGNhX2Rldi0+ZGV2LCAweDgxKSwKKwkJCSAgIGRhdGEsIHNpemUsICZhY3RfbGVuLCBTUTkwNV9EQVRBX1RJTUVPVVQpOworCisJLyogc3VjY2Vzc2Z1bCwgaXQgcmV0dXJucyAwLCBvdGhlcndpc2UgIG5lZ2F0aXZlICovCisJaWYgKHJldCA8IDAgfHwgYWN0X2xlbiAhPSBzaXplKSB7CisJCVBERUJVRyhEX0VSUiwgImJ1bGsgcmVhZCBmYWlsICglZCkgbGVuICVkLyVkIiwKKwkJCXJldCwgYWN0X2xlbiwgc2l6ZSk7CisJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXMgYSB3b3JrcXVldWUgZnVuY3Rpb24gYW5kIHJ1bnMgd2hlbmV2ZXIgdGhlIGNhbWVyYQorICogaXMgc3RyZWFtaW5nIGRhdGEuIEJlY2F1c2UgaXQgaXMgYSB3b3JrcXVldWUgZnVuY3Rpb24gaXQgaXMgYWxsb3dlZCB0byBzbGVlcAorICogc28gd2UgY2FuIHVzZSBzeW5jaHJvbm91cyBVU0IgY2FsbHMuIFRvIGF2b2lkIHBvc3NpYmxlIGNvbGxpc2lvbnMgd2l0aCBvdGhlcgorICogdGhyZWFkcyBhdHRlbXB0aW5nIHRvIHVzZSB0aGUgY2FtZXJhJ3MgVVNCIGludGVyZmFjZSB3ZSB0YWtlIHRoZSBnc3BjYQorICogdXNiX2xvY2sgd2hlbiBwZXJmb3JtaW5nIFVTQiBvcGVyYXRpb25zLiBJbiBwcmFjdGljZSB0aGUgb25seSB0aGluZyB3ZSBuZWVkCisgKiB0byBwcm90ZWN0IGFnYWluc3QgaXMgdGhlIHVzYl9zZXRfaW50ZXJmYWNlIGNhbGwgdGhhdCBnc3BjYSBtYWtlcyBkdXJpbmcKKyAqIHN0cmVhbV9vZmYgYXMgdGhlIGNhbWVyYSBkb2Vzbid0IHByb3ZpZGUgYW55IGNvbnRyb2xzIHRoYXQgdGhlIHVzZXIgY291bGQgdHJ5CisgKiB0byBjaGFuZ2UuCisgKi8KK3N0YXRpYyB2b2lkIHNxOTA1X2Rvc3RyZWFtKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgc2QgKmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc2QsIHdvcmtfc3RydWN0KTsKKwlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSAmZGV2LT5nc3BjYV9kZXY7CisJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZTsKKwlpbnQgYnl0ZXNfbGVmdDsgLyogYnl0ZXMgcmVtYWluaW5nIGluIGN1cnJlbnQgZnJhbWUuICovCisJaW50IGRhdGFfbGVuOyAgIC8qIHNpemUgdG8gdXNlIGZvciB0aGUgbmV4dCByZWFkLiAqLworCWludCBoZWFkZXJfcmVhZDsgLyogdHJ1ZSBpZiB3ZSBoYXZlIGFscmVhZHkgcmVhZCB0aGUgZnJhbWUgaGVhZGVyLiAqLworCWludCBkaXNjYXJkaW5nOyAvKiB0cnVlIGlmIHdlIGZhaWxlZCB0byBnZXQgc3BhY2UgZm9yIGZyYW1lLiAqLworCWludCBwYWNrZXRfdHlwZTsKKwlpbnQgZnJhbWVfc3o7CisJaW50IHJldDsKKwl1OCAqZGF0YTsKKwl1OCAqYnVmZmVyOworCisJYnVmZmVyID0ga21hbGxvYyhTUTkwNV9NQVhfVFJBTlNGRVIsIEdGUF9LRVJORUwgfCBHRlBfRE1BKTsKKwltdXRleF9sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwlpZiAoIWJ1ZmZlcikgeworCQlQREVCVUcoRF9FUlIsICJDb3VsZG4ndCBhbGxvY2F0ZSBVU0IgYnVmZmVyIik7CisJCWdvdG8gcXVpdF9zdHJlYW07CisJfQorCisJZnJhbWVfc3ogPSBnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtnc3BjYV9kZXYtPmN1cnJfbW9kZV0uc2l6ZWltYWdlCisJCQkrIEZSQU1FX0hFQURFUl9MRU47CisKKwl3aGlsZSAoZ3NwY2FfZGV2LT5wcmVzZW50ICYmIGdzcGNhX2Rldi0+c3RyZWFtaW5nKSB7CisJCS8qIE5lZWQgYSBzaG9ydCBkZWxheSB0byBlbnN1cmUgc3RyZWFtaW5nIGZsYWcgd2FzIHNldCBieQorCQkgKiBnc3BjYSBhbmQgdG8gbWFrZSBzdXJlIGdzcGNhIGNhbiBncmFiIHRoZSBtdXRleC4gKi8KKwkJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwkJbXNsZWVwKDEpOworCisJCS8qIHJlcXVlc3Qgc29tZSBkYXRhIGFuZCB0aGVuIHJlYWQgaXQgdW50aWwgd2UgaGF2ZQorCQkgKiBhIGNvbXBsZXRlIGZyYW1lLiAqLworCQlieXRlc19sZWZ0ID0gZnJhbWVfc3o7CisJCWhlYWRlcl9yZWFkID0gMDsKKwkJZGlzY2FyZGluZyA9IDA7CisKKwkJd2hpbGUgKGJ5dGVzX2xlZnQgPiAwKSB7CisJCQlkYXRhX2xlbiA9IGJ5dGVzX2xlZnQgPiBTUTkwNV9NQVhfVFJBTlNGRVIgPworCQkJCVNROTA1X01BWF9UUkFOU0ZFUiA6IGJ5dGVzX2xlZnQ7CisJCQltdXRleF9sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwkJCWlmICghZ3NwY2FfZGV2LT5wcmVzZW50KQorCQkJCWdvdG8gcXVpdF9zdHJlYW07CisJCQlyZXQgPSBzcTkwNV9yZWFkX2RhdGEoZ3NwY2FfZGV2LCBidWZmZXIsIGRhdGFfbGVuKTsKKwkJCWlmIChyZXQgPCAwKQorCQkJCWdvdG8gcXVpdF9zdHJlYW07CisJCQltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCQkJUERFQlVHKERfU1RSRUFNLAorCQkJCSJHb3QgJWQgYnl0ZXMgb3V0IG9mICVkIGZvciBmcmFtZSIsCisJCQkJZGF0YV9sZW4sIGJ5dGVzX2xlZnQpOworCQkJYnl0ZXNfbGVmdCAtPSBkYXRhX2xlbjsKKwkJCWRhdGEgPSBidWZmZXI7CisJCQlpZiAoIWhlYWRlcl9yZWFkKSB7CisJCQkJcGFja2V0X3R5cGUgPSBGSVJTVF9QQUNLRVQ7CisJCQkJLyogVGhlIGZpcnN0IDY0IGJ5dGVzIG9mIGVhY2ggZnJhbWUgYXJlCisJCQkJICogYSBoZWFkZXIgZnVsbCBvZiBGRiAwMCBieXRlcyAqLworCQkJCWRhdGEgKz0gRlJBTUVfSEVBREVSX0xFTjsKKwkJCQlkYXRhX2xlbiAtPSBGUkFNRV9IRUFERVJfTEVOOworCQkJCWhlYWRlcl9yZWFkID0gMTsKKwkJCX0gZWxzZSBpZiAoYnl0ZXNfbGVmdCA9PSAwKSB7CisJCQkJcGFja2V0X3R5cGUgPSBMQVNUX1BBQ0tFVDsKKwkJCX0gZWxzZSB7CisJCQkJcGFja2V0X3R5cGUgPSBJTlRFUl9QQUNLRVQ7CisJCQl9CisJCQlmcmFtZSA9IGdzcGNhX2dldF9pX2ZyYW1lKGdzcGNhX2Rldik7CisJCQlpZiAoZnJhbWUgJiYgIWRpc2NhcmRpbmcpIHsKKwkJCQlmcmFtZSA9IGdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIHBhY2tldF90eXBlLAorCQkJCQkJZnJhbWUsIGRhdGEsIGRhdGFfbGVuKTsKKwkJCQkvKiBJZiBlbnRpcmUgZnJhbWUgZml0cyBpbiBvbmUgcGFja2V0IHdlIHN0aWxsCisJCQkJICAgbmVlZCB0byBhZGQgYSBMQVNUX1BBQ0tFVCAqLworCQkJCWlmIChwYWNrZXRfdHlwZSA9PSBGSVJTVF9QQUNLRVQgJiYKKwkJCQkgICAgYnl0ZXNfbGVmdCA9PSAwKQorCQkJCQlmcmFtZSA9IGdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsCisJCQkJCQkJTEFTVF9QQUNLRVQsCisJCQkJCQkJZnJhbWUsIGRhdGEsIDApOworCQkJfSBlbHNlIHsKKwkJCQlkaXNjYXJkaW5nID0gMTsKKwkJCX0KKwkJfQorCQkvKiBhY2tub3dsZWRnZSB0aGUgZnJhbWUgKi8KKwkJbXV0ZXhfbG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJCWlmICghZ3NwY2FfZGV2LT5wcmVzZW50KQorCQkJZ290byBxdWl0X3N0cmVhbTsKKwkJcmV0ID0gc3E5MDVfYWNrX2ZyYW1lKGdzcGNhX2Rldik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBxdWl0X3N0cmVhbTsKKwl9CitxdWl0X3N0cmVhbToKKwkvKiB0aGUgdXNiX2xvY2sgaXMgYWxyZWFkeSBhY3F1aXJlZCAqLworCWlmIChnc3BjYV9kZXYtPnByZXNlbnQpCisJCXNxOTA1X2NvbW1hbmQoZ3NwY2FfZGV2LCBTUTkwNV9DTEVBUik7CisJbXV0ZXhfdW5sb2NrKCZnc3BjYV9kZXYtPnVzYl9sb2NrKTsKKwlrZnJlZShidWZmZXIpOworfQorCisvKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSB0aW1lIGp1c3QgYmVmb3JlIHNkX2luaXQgKi8KK3N0YXRpYyBpbnQgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJY29uc3Qgc3RydWN0IHVzYl9kZXZpY2VfaWQgKmlkKQoreworCXN0cnVjdCBjYW0gKmNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKKwlzdHJ1Y3Qgc2QgKmRldiA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJLyogV2UgZG9uJ3QgdXNlIHRoZSBidWZmZXIgZ3NwY2EgYWxsb2NhdGVzIHNvIG1ha2UgaXQgc21hbGwuICovCisJY2FtLT5idWxrX3NpemUgPSA2NDsKKworCUlOSVRfV09SSygmZGV2LT53b3JrX3N0cnVjdCwgc3E5MDVfZG9zdHJlYW0pOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGNhbGxlZCBvbiBzdHJlYW1vZmYgd2l0aCBhbHQ9PTAgYW5kIG9uIGRpc2Nvbm5lY3QgKi8KKy8qIHRoZSB1c2JfbG9jayBpcyBoZWxkIGF0IGVudHJ5IC0gcmVzdG9yZSBvbiBleGl0ICovCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpkZXYgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCS8qIHdhaXQgZm9yIHRoZSB3b3JrIHF1ZXVlIHRvIHRlcm1pbmF0ZSAqLworCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJLyogVGhpcyB3YWl0cyBmb3Igc3E5MDVfZG9zdHJlYW0gdG8gZmluaXNoICovCisJZGVzdHJveV93b3JrcXVldWUoZGV2LT53b3JrX3RocmVhZCk7CisJZGV2LT53b3JrX3RocmVhZCA9IE5VTEw7CisJbXV0ZXhfbG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7Cit9CisKKy8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLworc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwl1MzIgaWRlbnQ7CisJaW50IHJldDsKKworCS8qIGNvbm5lY3QgdG8gdGhlIGNhbWVyYSBhbmQgcmVhZAorCSAqIHRoZSBtb2RlbCBJRCBhbmQgcHJvY2VzcyB0aGF0IGFuZCBwdXQgaXQgYXdheS4KKwkgKi8KKwlyZXQgPSBzcTkwNV9jb21tYW5kKGdzcGNhX2RldiwgU1E5MDVfQ0xFQVIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCXJldCA9IHNxOTA1X2NvbW1hbmQoZ3NwY2FfZGV2LCBTUTkwNV9JRCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisJcmV0ID0gc3E5MDVfcmVhZF9kYXRhKGdzcGNhX2RldiwgZ3NwY2FfZGV2LT51c2JfYnVmLCA0KTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKwkvKiB1c2JfYnVmIGlzIGFsbG9jYXRlZCB3aXRoIGttYWxsb2Mgc28gaXMgYWxpZ25lZC4KKwkgKiBDYW1lcmEgbW9kZWwgbnVtYmVyIGlzIHRoZSByaWdodCB3YXkgcm91bmQgaWYgd2UgYXNzdW1lIHRoaXMKKwkgKiByZXZlcnNlIGVuZ2luZWVyZWQgSUQgaXMgc3VwcG9zZWQgdG8gYmUgYmlnIGVuZGlhbi4gKi8KKwlpZGVudCA9IGJlMzJfdG9fY3B1cCgoX19iZTMyICopZ3NwY2FfZGV2LT51c2JfYnVmKTsKKwlyZXQgPSBzcTkwNV9jb21tYW5kKGdzcGNhX2RldiwgU1E5MDVfQ0xFQVIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCVBERUJVRyhEX0NPTkYsICJTUTkwNSBjYW1lcmEgSUQgJTA4eCBkZXRlY3RlZCIsIGlkZW50KTsKKwlnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZSA9IHNxOTA1X21vZGU7CisJZ3NwY2FfZGV2LT5jYW0ubm1vZGVzID0gQVJSQVlfU0laRShzcTkwNV9tb2RlKTsKKwlpZiAoIShpZGVudCAmIFNROTA1X0hJUkVTX01BU0spKQorCQlnc3BjYV9kZXYtPmNhbS5ubW9kZXMtLTsKKwlyZXR1cm4gMDsKK30KKworLyogU2V0IHVwIGZvciBnZXR0aW5nIGZyYW1lcy4gKi8KK3N0YXRpYyBpbnQgc2Rfc3RhcnQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqZGV2ID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJaW50IHJldDsKKworCS8qICJPcGVuIHRoZSBzaHV0dGVyIiBhbmQgc2V0IHNpemUsIHRvIHN0YXJ0IGNhcHR1cmUgKi8KKwlzd2l0Y2ggKGdzcGNhX2Rldi0+Y3Vycl9tb2RlKSB7CisJZGVmYXVsdDoKKy8qCWNhc2UgMjogKi8KKwkJUERFQlVHKERfU1RSRUFNLCAiU3RhcnQgc3RyZWFtaW5nIGF0IGhpZ2ggcmVzb2x1dGlvbiIpOworCQlyZXQgPSBzcTkwNV9jb21tYW5kKCZkZXYtPmdzcGNhX2RldiwgU1E5MDVfQ0FQVFVSRV9ISUdIKTsKKwkJYnJlYWs7CisJY2FzZSAxOgorCQlQREVCVUcoRF9TVFJFQU0sICJTdGFydCBzdHJlYW1pbmcgYXQgbWVkaXVtIHJlc29sdXRpb24iKTsKKwkJcmV0ID0gc3E5MDVfY29tbWFuZCgmZGV2LT5nc3BjYV9kZXYsIFNROTA1X0NBUFRVUkVfTUVEKTsKKwkJYnJlYWs7CisJY2FzZSAwOgorCQlQREVCVUcoRF9TVFJFQU0sICJTdGFydCBzdHJlYW1pbmcgYXQgbG93IHJlc29sdXRpb24iKTsKKwkJcmV0ID0gc3E5MDVfY29tbWFuZCgmZGV2LT5nc3BjYV9kZXYsIFNROTA1X0NBUFRVUkVfTE9XKTsKKwl9CisKKwlpZiAocmV0IDwgMCkgeworCQlQREVCVUcoRF9FUlIsICJTdGFydCBzdHJlYW1pbmcgY29tbWFuZCBmYWlsZWQiKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJLyogU3RhcnQgdGhlIHdvcmtxdWV1ZSBmdW5jdGlvbiB0byBkbyB0aGUgc3RyZWFtaW5nICovCisJZGV2LT53b3JrX3RocmVhZCA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKE1PRFVMRV9OQU1FKTsKKwlxdWV1ZV93b3JrKGRldi0+d29ya190aHJlYWQsICZkZXYtPndvcmtfc3RydWN0KTsKKworCXJldHVybiAwOworfQorCisvKiBUYWJsZSBvZiBzdXBwb3J0ZWQgVVNCIGRldmljZXMgKi8KK3N0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0geworCXtVU0JfREVWSUNFKDB4Mjc3MCwgMHg5MTIwKX0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfdGFibGUpOworCisvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKKwkubmFtZSAgID0gTU9EVUxFX05BTUUsCisJLmNvbmZpZyA9IHNkX2NvbmZpZywKKwkuaW5pdCAgID0gc2RfaW5pdCwKKwkuc3RhcnQgID0gc2Rfc3RhcnQsCisJLnN0b3AwICA9IHNkX3N0b3AwLAorfTsKKworLyogLS0gZGV2aWNlIGNvbm5lY3QgLS0gKi8KK3N0YXRpYyBpbnQgc2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLAorCQkJJnNkX2Rlc2MsCisJCQlzaXplb2Yoc3RydWN0IHNkKSwKKwkJCVRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkX2RyaXZlciA9IHsKKwkubmFtZSAgICAgICA9IE1PRFVMRV9OQU1FLAorCS5pZF90YWJsZSAgID0gZGV2aWNlX3RhYmxlLAorCS5wcm9iZSAgICAgID0gc2RfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBnc3BjYV9kaXNjb25uZWN0LAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0gZ3NwY2Ffc3VzcGVuZCwKKwkucmVzdW1lICA9IGdzcGNhX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLworc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlQREVCVUcoRF9QUk9CRSwgImRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3NxOTA1Yy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcTkwNWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wYmNiNzRhCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zcTkwNWMuYwpAQCAtMCwwICsxLDMyOCBAQAorLyoKKyAqIFNROTA1QyBzdWJkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgVGhlb2RvcmUgS2lsZ29yZQorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQorICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAqIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BIDAyMTExLTEzMDcgVVNBCisgKi8KKworLyoKKyAqCisgKiBUaGlzIGRyaXZlciB1c2VzIHdvcmsgZG9uZSBpbgorICogbGliZ3Bob3RvMi9jYW1saWJzL2RpZ2lncjgsIENvcHlyaWdodCAoQykgVGhlb2RvcmUgS2lsZ29yZS4KKyAqCisgKiBUaGlzIGRyaXZlciBoYXMgYWxzbyB1c2VkIGFzIGEgYmFzZSB0aGUgc3E5MDVjIGRyaXZlcgorICogYW5kIG1heSBjb250YWluIGNvZGUgZnJhZ21lbnRzIGZyb20gaXQuCisgKi8KKworI2RlZmluZSBNT0RVTEVfTkFNRSAic3E5MDVjIgorCisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSAiZ3NwY2EuaCIKKworTU9EVUxFX0FVVEhPUigiVGhlb2RvcmUgS2lsZ29yZSA8a2lsZ290YUBhdWJ1cm4uZWR1PiIpOworTU9EVUxFX0RFU0NSSVBUSU9OKCJHU1BDQS9TUTkwNUMgVVNCIENhbWVyYSBEcml2ZXIiKTsKK01PRFVMRV9MSUNFTlNFKCJHUEwiKTsKKworLyogRGVmYXVsdCB0aW1lb3V0cywgaW4gbXMgKi8KKyNkZWZpbmUgU1E5MDVDX0NNRF9USU1FT1VUIDUwMAorI2RlZmluZSBTUTkwNUNfREFUQV9USU1FT1VUIDEwMDAKKworLyogTWF4aW11bSB0cmFuc2ZlciBzaXplIHRvIHVzZS4gKi8KKyNkZWZpbmUgU1E5MDVDX01BWF9UUkFOU0ZFUiAweDgwMDAKKworI2RlZmluZSBGUkFNRV9IRUFERVJfTEVOIDB4NTAKKworLyogQ29tbWFuZHMuIFRoZXNlIGdvIGluIHRoZSAidmFsdWUiIHNsb3QuICovCisjZGVmaW5lIFNROTA1Q19DTEVBUiAgIDB4YTAJCS8qIGNsZWFyIGV2ZXJ5dGhpbmcgKi8KKyNkZWZpbmUgU1E5MDVDX0NBUFRVUkVfTE9XIDB4YTA0MAkvKiBTdGFydHMgY2FwdHVyZSBhdCAxNjB4MTIwICovCisjZGVmaW5lIFNROTA1Q19DQVBUVVJFX01FRCAweDE0NDAJLyogU3RhcnRzIGNhcHR1cmUgYXQgMzIweDI0MCAqLworI2RlZmluZSBTUTkwNUNfQ0FQVFVSRV9ISSAweDI4NDAJLyogU3RhcnRzIGNhcHR1cmUgYXQgMzIweDI0MCAqLworCisvKiBGb3IgY2FwdHVyZSwgdGhpcyBtdXN0IGdvIGluIHRoZSAiaW5kZXgiIHNsb3QuICovCisjZGVmaW5lIFNROTA1Q19DQVBUVVJFX0lOREVYIDB4MTEwZgorCisvKiBTdHJ1Y3R1cmUgdG8gaG9sZCBhbGwgb2Ygb3VyIGRldmljZSBzcGVjaWZpYyBzdHVmZiAqLworc3RydWN0IHNkIHsKKwlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLworCWNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKmNhcF9tb2RlOworCS8qIERyaXZlciBzdHVmZiAqLworCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrX3N0cnVjdDsKKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdCAqd29ya190aHJlYWQ7Cit9OworCisvKgorICogTW9zdCBvZiB0aGVzZSBjYW1lcmFzIHdpbGwgZG8gNjQweDQ4MCBhbmQgMzIweDI0MC4gMTYweDEyMCB3b3JrcworICogaW4gdGhlb3J5IGJ1dCBnaXZlcyB2ZXJ5IHBvb3Igb3V0cHV0LiBUaGVyZWZvcmUsIG5vdCBzdXBwb3J0ZWQuCisgKiBUaGUgMHgyNzcwOjB4OTA1MCBjYW1lcmFzIGhhdmUgbWF4IHJlc29sdXRpb24gb2YgMzIweDI0MC4KKyAqLworc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgc3E5MDVjX21vZGVbXSA9IHsKKwl7IDMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfU1E5MDVDLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMH0sCisJeyA2NDAsIDQ4MCwgVjRMMl9QSVhfRk1UX1NROTA1QywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gNjQwLAorCQkuc2l6ZWltYWdlID0gNjQwICogNDgwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDB9Cit9OworCisvKiBTZW5kIGEgY29tbWFuZCB0byB0aGUgY2FtZXJhLiAqLworc3RhdGljIGludCBzcTkwNWNfY29tbWFuZChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIHUxNiBjb21tYW5kLCB1MTYgaW5kZXgpCit7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCisJCQkgICAgICBVU0JfUkVRX1NZTkNIX0ZSQU1FLCAgICAgICAgICAgICAgICAvKiByZXF1ZXN0ICovCisJCQkgICAgICBVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkgICAgICBjb21tYW5kLCBpbmRleCwgTlVMTCwgMCwKKwkJCSAgICAgIFNROTA1Q19DTURfVElNRU9VVCk7CisJaWYgKHJldCA8IDApIHsKKwkJUERFQlVHKERfRVJSLCAiJXM6IHVzYl9jb250cm9sX21zZyBmYWlsZWQgKCVkKSIsCisJCQlfX2Z1bmNfXywgcmV0KTsKKwkJcmV0dXJuIHJldDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXMgYSB3b3JrcXVldWUgZnVuY3Rpb24gYW5kIHJ1bnMgd2hlbmV2ZXIgdGhlIGNhbWVyYQorICogaXMgc3RyZWFtaW5nIGRhdGEuIEJlY2F1c2UgaXQgaXMgYSB3b3JrcXVldWUgZnVuY3Rpb24gaXQgaXMgYWxsb3dlZCB0byBzbGVlcAorICogc28gd2UgY2FuIHVzZSBzeW5jaHJvbm91cyBVU0IgY2FsbHMuIFRvIGF2b2lkIHBvc3NpYmxlIGNvbGxpc2lvbnMgd2l0aCBvdGhlcgorICogdGhyZWFkcyBhdHRlbXB0aW5nIHRvIHVzZSB0aGUgY2FtZXJhJ3MgVVNCIGludGVyZmFjZSB0aGUgZ3NwY2EgdXNiX2xvY2sgaXMKKyAqIHVzZWQgd2hlbiBwZXJmb3JtaW5nIHRoZSBvbmUgVVNCIGNvbnRyb2wgb3BlcmF0aW9uIGluc2lkZSB0aGUgd29ya3F1ZXVlLAorICogd2hpY2ggdGVsbHMgdGhlIGNhbWVyYSB0byBjbG9zZSB0aGUgc3RyZWFtLiBJbiBwcmFjdGljZSB0aGUgb25seSB0aGluZworICogd2hpY2ggbmVlZHMgdG8gYmUgcHJvdGVjdGVkIGFnYWluc3QgaXMgdGhlIHVzYl9zZXRfaW50ZXJmYWNlIGNhbGwgdGhhdAorICogZ3NwY2EgbWFrZXMgZHVyaW5nIHN0cmVhbV9vZmYuIE90aGVyd2lzZSB0aGUgY2FtZXJhIGRvZXNuJ3QgcHJvdmlkZSBhbnkKKyAqIGNvbnRyb2xzIHRoYXQgdGhlIHVzZXIgY291bGQgdHJ5IHRvIGNoYW5nZS4KKyAqLworc3RhdGljIHZvaWQgc3E5MDVjX2Rvc3RyZWFtKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3Qgc2QgKmRldiA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc2QsIHdvcmtfc3RydWN0KTsKKwlzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYgPSAmZGV2LT5nc3BjYV9kZXY7CisJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZTsKKwlpbnQgYnl0ZXNfbGVmdDsgLyogYnl0ZXMgcmVtYWluaW5nIGluIGN1cnJlbnQgZnJhbWUuICovCisJaW50IGRhdGFfbGVuOyAgIC8qIHNpemUgdG8gdXNlIGZvciB0aGUgbmV4dCByZWFkLiAqLworCWludCBhY3RfbGVuOworCWludCBkaXNjYXJkaW5nID0gMDsgLyogdHJ1ZSBpZiB3ZSBmYWlsZWQgdG8gZ2V0IHNwYWNlIGZvciBmcmFtZS4gKi8KKwlpbnQgcGFja2V0X3R5cGU7CisJaW50IHJldDsKKwl1OCAqYnVmZmVyOworCisJYnVmZmVyID0ga21hbGxvYyhTUTkwNUNfTUFYX1RSQU5TRkVSLCBHRlBfS0VSTkVMIHwgR0ZQX0RNQSk7CisJaWYgKCFidWZmZXIpIHsKKwkJUERFQlVHKERfRVJSLCAiQ291bGRuJ3QgYWxsb2NhdGUgVVNCIGJ1ZmZlciIpOworCQlnb3RvIHF1aXRfc3RyZWFtOworCX0KKworCXdoaWxlIChnc3BjYV9kZXYtPnByZXNlbnQgJiYgZ3NwY2FfZGV2LT5zdHJlYW1pbmcpIHsKKwkJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpCisJCQlnb3RvIHF1aXRfc3RyZWFtOworCQkvKiBSZXF1ZXN0IHRoZSBoZWFkZXIsIHdoaWNoIHRlbGxzIHRoZSBzaXplIHRvIGRvd25sb2FkICovCisJCXJldCA9IHVzYl9idWxrX21zZyhnc3BjYV9kZXYtPmRldiwKKwkJCQl1c2JfcmN2YnVsa3BpcGUoZ3NwY2FfZGV2LT5kZXYsIDB4ODEpLAorCQkJCWJ1ZmZlciwgRlJBTUVfSEVBREVSX0xFTiwgJmFjdF9sZW4sCisJCQkJU1E5MDVDX0RBVEFfVElNRU9VVCk7CisJCVBERUJVRyhEX1NUUkVBTSwKKwkJCSJHb3QgJWQgYnl0ZXMgb3V0IG9mICVkIGZvciBoZWFkZXIiLAorCQkJYWN0X2xlbiwgRlJBTUVfSEVBREVSX0xFTik7CisJCWlmIChyZXQgPCAwIHx8IGFjdF9sZW4gPCBGUkFNRV9IRUFERVJfTEVOKQorCQkJZ290byBxdWl0X3N0cmVhbTsKKwkJLyogc2l6ZSBpcyByZWFkIGZyb20gNCBieXRlcyBzdGFydGluZyAweDQwLCBsaXR0bGUgZW5kaWFuICovCisJCWJ5dGVzX2xlZnQgPSBidWZmZXJbMHg0MF18KGJ1ZmZlclsweDQxXTw8OCl8KGJ1ZmZlclsweDQyXTw8MTYpCisJCQkJCXwoYnVmZmVyWzB4NDNdPDwyNCk7CisJCVBERUJVRyhEX1NUUkVBTSwgImJ5dGVzX2xlZnQgPSAweCV4IiwgYnl0ZXNfbGVmdCk7CisJCS8qIFdlIGtlZXAgdGhlIGhlYWRlci4gSXQgaGFzIG90aGVyIGluZm9ybWF0aW9uLCB0b28uICovCisJCXBhY2tldF90eXBlID0gRklSU1RfUEFDS0VUOworCQlmcmFtZSA9IGdzcGNhX2dldF9pX2ZyYW1lKGdzcGNhX2Rldik7CisJCWlmIChmcmFtZSAmJiAhZGlzY2FyZGluZykgeworCQkJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgcGFja2V0X3R5cGUsCisJCQkJZnJhbWUsIGJ1ZmZlciwgRlJBTUVfSEVBREVSX0xFTik7CisJCQl9IGVsc2UKKwkJCQlkaXNjYXJkaW5nID0gMTsKKwkJd2hpbGUgKGJ5dGVzX2xlZnQgPiAwKSB7CisJCQlkYXRhX2xlbiA9IGJ5dGVzX2xlZnQgPiBTUTkwNUNfTUFYX1RSQU5TRkVSID8KKwkJCQlTUTkwNUNfTUFYX1RSQU5TRkVSIDogYnl0ZXNfbGVmdDsKKwkJCWlmICghZ3NwY2FfZGV2LT5wcmVzZW50KQorCQkJCWdvdG8gcXVpdF9zdHJlYW07CisJCQlyZXQgPSB1c2JfYnVsa19tc2coZ3NwY2FfZGV2LT5kZXYsCisJCQkJdXNiX3JjdmJ1bGtwaXBlKGdzcGNhX2Rldi0+ZGV2LCAweDgxKSwKKwkJCQlidWZmZXIsIGRhdGFfbGVuLCAmYWN0X2xlbiwKKwkJCQlTUTkwNUNfREFUQV9USU1FT1VUKTsKKwkJCWlmIChyZXQgPCAwIHx8IGFjdF9sZW4gPCBkYXRhX2xlbikKKwkJCQlnb3RvIHF1aXRfc3RyZWFtOworCQkJUERFQlVHKERfU1RSRUFNLAorCQkJCSJHb3QgJWQgYnl0ZXMgb3V0IG9mICVkIGZvciBmcmFtZSIsCisJCQkJZGF0YV9sZW4sIGJ5dGVzX2xlZnQpOworCQkJYnl0ZXNfbGVmdCAtPSBkYXRhX2xlbjsKKwkJCWlmIChieXRlc19sZWZ0ID09IDApCisJCQkJcGFja2V0X3R5cGUgPSBMQVNUX1BBQ0tFVDsKKwkJCWVsc2UKKwkJCQlwYWNrZXRfdHlwZSA9IElOVEVSX1BBQ0tFVDsKKwkJCWZyYW1lID0gZ3NwY2FfZ2V0X2lfZnJhbWUoZ3NwY2FfZGV2KTsKKwkJCWlmIChmcmFtZSAmJiAhZGlzY2FyZGluZykKKwkJCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBwYWNrZXRfdHlwZSwKKwkJCQkJCWZyYW1lLCBidWZmZXIsIGRhdGFfbGVuKTsKKwkJCWVsc2UKKwkJCQlkaXNjYXJkaW5nID0gMTsKKwkJfQorCX0KK3F1aXRfc3RyZWFtOgorCW11dGV4X2xvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCWlmIChnc3BjYV9kZXYtPnByZXNlbnQpCisJCXNxOTA1Y19jb21tYW5kKGdzcGNhX2RldiwgU1E5MDVDX0NMRUFSLCAwKTsKKwltdXRleF91bmxvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworCWtmcmVlKGJ1ZmZlcik7Cit9CisKKy8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUganVzdCBiZWZvcmUgc2RfaW5pdCAqLworc3RhdGljIGludCBzZF9jb25maWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQljb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGNhbSAqY2FtID0gJmdzcGNhX2Rldi0+Y2FtOworCXN0cnVjdCBzZCAqZGV2ID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwlQREVCVUcoRF9QUk9CRSwKKwkJIlNROTA1MCBjYW1lcmEgZGV0ZWN0ZWQiCisJCSIgKHZpZC9waWQgMHglMDRYOjB4JTA0WCkiLCBpZC0+aWRWZW5kb3IsIGlkLT5pZFByb2R1Y3QpOworCWNhbS0+Y2FtX21vZGUgPSBzcTkwNWNfbW9kZTsKKwljYW0tPm5tb2RlcyA9IDI7CisJaWYgKGlkLT5pZFByb2R1Y3QgPT0gMHg5MDUwKQorCQljYW0tPm5tb2RlcyA9IDE7CisJLyogV2UgZG9uJ3QgdXNlIHRoZSBidWZmZXIgZ3NwY2EgYWxsb2NhdGVzIHNvIG1ha2UgaXQgc21hbGwuICovCisJY2FtLT5idWxrX3NpemUgPSAzMjsKKwlJTklUX1dPUksoJmRldi0+d29ya19zdHJ1Y3QsIHNxOTA1Y19kb3N0cmVhbSk7CisJcmV0dXJuIDA7Cit9CisKKy8qIGNhbGxlZCBvbiBzdHJlYW1vZmYgd2l0aCBhbHQ9PTAgYW5kIG9uIGRpc2Nvbm5lY3QgKi8KKy8qIHRoZSB1c2JfbG9jayBpcyBoZWxkIGF0IGVudHJ5IC0gcmVzdG9yZSBvbiBleGl0ICovCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpkZXYgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCS8qIHdhaXQgZm9yIHRoZSB3b3JrIHF1ZXVlIHRvIHRlcm1pbmF0ZSAqLworCW11dGV4X3VubG9jaygmZ3NwY2FfZGV2LT51c2JfbG9jayk7CisJLyogVGhpcyB3YWl0cyBmb3Igc3E5MDVjX2Rvc3RyZWFtIHRvIGZpbmlzaCAqLworCWRlc3Ryb3lfd29ya3F1ZXVlKGRldi0+d29ya190aHJlYWQpOworCWRldi0+d29ya190aHJlYWQgPSBOVUxMOworCW11dGV4X2xvY2soJmdzcGNhX2Rldi0+dXNiX2xvY2spOworfQorCisvKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgcmVzdW1lIHRpbWUgKi8KK3N0YXRpYyBpbnQgc2RfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJaW50IHJldDsKKworCS8qIGNvbm5lY3QgdG8gdGhlIGNhbWVyYSBhbmQgcmVzZXQgaXQuICovCisJcmV0ID0gc3E5MDVjX2NvbW1hbmQoZ3NwY2FfZGV2LCBTUTkwNUNfQ0xFQVIsIDApOworCXJldHVybiByZXQ7Cit9CisKKy8qIFNldCB1cCBmb3IgZ2V0dGluZyBmcmFtZXMuICovCitzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKK3sKKwlzdHJ1Y3Qgc2QgKmRldiA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCWludCByZXQ7CisKKwlkZXYtPmNhcF9tb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGU7CisJLyogIk9wZW4gdGhlIHNodXR0ZXIiIGFuZCBzZXQgc2l6ZSwgdG8gc3RhcnQgY2FwdHVyZSAqLworCXN3aXRjaCAoZ3NwY2FfZGV2LT53aWR0aCkgeworCWNhc2UgNjQwOgorCQlQREVCVUcoRF9TVFJFQU0sICJTdGFydCBzdHJlYW1pbmcgYXQgaGlnaCByZXNvbHV0aW9uIik7CisJCWRldi0+Y2FwX21vZGUrKzsKKwkJcmV0ID0gc3E5MDVjX2NvbW1hbmQoZ3NwY2FfZGV2LCBTUTkwNUNfQ0FQVFVSRV9ISSwKKwkJCQkJCVNROTA1Q19DQVBUVVJFX0lOREVYKTsKKwkJYnJlYWs7CisJZGVmYXVsdDogLyogMzIwICovCisJUERFQlVHKERfU1RSRUFNLCAiU3RhcnQgc3RyZWFtaW5nIGF0IG1lZGl1bSByZXNvbHV0aW9uIik7CisJCXJldCA9IHNxOTA1Y19jb21tYW5kKGdzcGNhX2RldiwgU1E5MDVDX0NBUFRVUkVfTUVELAorCQkJCQkJU1E5MDVDX0NBUFRVUkVfSU5ERVgpOworCX0KKworCWlmIChyZXQgPCAwKSB7CisJCVBERUJVRyhEX0VSUiwgIlN0YXJ0IHN0cmVhbWluZyBjb21tYW5kIGZhaWxlZCIpOworCQlyZXR1cm4gcmV0OworCX0KKwkvKiBTdGFydCB0aGUgd29ya3F1ZXVlIGZ1bmN0aW9uIHRvIGRvIHRoZSBzdHJlYW1pbmcgKi8KKwlkZXYtPndvcmtfdGhyZWFkID0gY3JlYXRlX3NpbmdsZXRocmVhZF93b3JrcXVldWUoTU9EVUxFX05BTUUpOworCXF1ZXVlX3dvcmsoZGV2LT53b3JrX3RocmVhZCwgJmRldi0+d29ya19zdHJ1Y3QpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIFRhYmxlIG9mIHN1cHBvcnRlZCBVU0IgZGV2aWNlcyAqLworc3RhdGljIGNvbnN0IF9fZGV2aW5pdGRhdGEgc3RydWN0IHVzYl9kZXZpY2VfaWQgZGV2aWNlX3RhYmxlW10gPSB7CisJe1VTQl9ERVZJQ0UoMHgyNzcwLCAweDkwNWMpfSwKKwl7VVNCX0RFVklDRSgweDI3NzAsIDB4OTA1MCl9LAorCXtVU0JfREVWSUNFKDB4Mjc3MCwgMHg5MTNkKX0sCisJe30KK307CisKK01PRFVMRV9ERVZJQ0VfVEFCTEUodXNiLCBkZXZpY2VfdGFibGUpOworCisvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCitzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKKwkubmFtZSAgID0gTU9EVUxFX05BTUUsCisJLmNvbmZpZyA9IHNkX2NvbmZpZywKKwkuaW5pdCAgID0gc2RfaW5pdCwKKwkuc3RhcnQgID0gc2Rfc3RhcnQsCisJLnN0b3AwICA9IHNkX3N0b3AwLAorfTsKKworLyogLS0gZGV2aWNlIGNvbm5lY3QgLS0gKi8KK3N0YXRpYyBpbnQgc2RfcHJvYmUoc3RydWN0IHVzYl9pbnRlcmZhY2UgKmludGYsCisJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKK3sKKwlyZXR1cm4gZ3NwY2FfZGV2X3Byb2JlKGludGYsIGlkLAorCQkJJnNkX2Rlc2MsCisJCQlzaXplb2Yoc3RydWN0IHNkKSwKKwkJCVRISVNfTU9EVUxFKTsKK30KKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIHNkX2RyaXZlciA9IHsKKwkubmFtZSAgICAgICA9IE1PRFVMRV9OQU1FLAorCS5pZF90YWJsZSAgID0gZGV2aWNlX3RhYmxlLAorCS5wcm9iZSAgICAgID0gc2RfcHJvYmUsCisJLmRpc2Nvbm5lY3QgPSBnc3BjYV9kaXNjb25uZWN0LAorI2lmZGVmIENPTkZJR19QTQorCS5zdXNwZW5kID0gZ3NwY2Ffc3VzcGVuZCwKKwkucmVzdW1lICA9IGdzcGNhX3Jlc3VtZSwKKyNlbmRpZgorfTsKKworLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLworc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKK3sKKwlpbnQgcmV0OworCisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBfX2V4aXQgc2RfbW9kX2V4aXQodm9pZCkKK3sKKwl1c2JfZGVyZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlQREVCVUcoRF9QUk9CRSwgImRlcmVnaXN0ZXJlZCIpOworfQorCittb2R1bGVfaW5pdChzZF9tb2RfaW5pdCk7Cittb2R1bGVfZXhpdChzZF9tb2RfZXhpdCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0azAxNC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdGswMTQuYwppbmRleCA2MGRlOWFmLi5mMjViZTIwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0azAxNC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3RrMDE0LmMKQEAgLTM1LDEwICszNSwxMyBAQAogCXVuc2lnbmVkIGNoYXIgY29udHJhc3Q7CiAJdW5zaWduZWQgY2hhciBjb2xvcnM7CiAJdW5zaWduZWQgY2hhciBsaWdodGZyZXE7Ci19OworCXU4IHF1YWxpdHk7CisjZGVmaW5lIFFVQUxJVFlfTUlOIDYwCisjZGVmaW5lIFFVQUxJVFlfTUFYIDk1CisjZGVmaW5lIFFVQUxJVFlfREVGIDgwCiAKLS8qIGdsb2JhbCBwYXJhbWV0ZXJzICovCi1zdGF0aWMgaW50IHNkX3F1YW50ID0gNzsJCS8qIDw9IDQgS08gLSA3OiBnb29kIChlbm91Z2ghKSAqLworCXU4ICpqcGVnX2hkcjsKK307CiAKIC8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KIHN0YXRpYyBpbnQgc2Rfc2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7CkBAIC0xODAsNyArMTgzLDcgQEAKIAlyZWdfdyhnc3BjYV9kZXYsIDB4NjNiLCAwKTsKIAlyZWdfdyhnc3BjYV9kZXYsIDB4NjMwLCA1KTsKIAlyZXQgPSB1c2JfYnVsa19tc2coZGV2LAotCQkJdXNiX3JjdmJ1bGtwaXBlKGRldiwgNSksCisJCQl1c2JfcmN2YnVsa3BpcGUoZGV2LCAweDA1KSwKIAkJCWdzcGNhX2Rldi0+dXNiX2J1ZiwKIAkJCTQsCQkvKiBsZW5ndGggKi8KIAkJCSZhbGVuLApAQCAtMjk0LDE1ICsyOTcsMTQgQEAKIAkJCWNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkICppZCkKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0Jc3RydWN0IGNhbSAqY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwogCi0JY2FtLT5lcGFkZHIgPSAweDAyOwogCWdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlID0gdmdhX21vZGU7CiAJZ3NwY2FfZGV2LT5jYW0ubm1vZGVzID0gQVJSQVlfU0laRSh2Z2FfbW9kZSk7CiAJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKIAlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF9ERUY7CiAJc2QtPmNvbG9ycyA9IENPTE9SX0RFRjsKIAlzZC0+bGlnaHRmcmVxID0gRlJFUV9ERUY7CisJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX0RFRjsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMzI2LDggKzMyOCwxNSBAQAogLyogLS0gc3RhcnQgdGhlIGNhbWVyYSAtLSAqLwogc3RhdGljIGludCBzZF9zdGFydChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCWludCByZXQsIHZhbHVlOwogCisJLyogY3JlYXRlIHRoZSBKUEVHIGhlYWRlciAqLworCXNkLT5qcGVnX2hkciA9IGttYWxsb2MoSlBFR19IRFJfU1osIEdGUF9LRVJORUwpOworCWpwZWdfZGVmaW5lKHNkLT5qcGVnX2hkciwgZ3NwY2FfZGV2LT5oZWlnaHQsIGdzcGNhX2Rldi0+d2lkdGgsCisJCQkweDIyKTsJCS8qIEpQRUcgNDExICovCisJanBlZ19zZXRfcXVhbChzZC0+anBlZ19oZHIsIHNkLT5xdWFsaXR5KTsKKwogCS8qIHdvcmsgb24gYWx0ZXJuYXRlIDEgKi8KIAl1c2Jfc2V0X2ludGVyZmFjZShnc3BjYV9kZXYtPmRldiwgZ3NwY2FfZGV2LT5pZmFjZSwgMSk7CiAKQEAgLTM5OSwxMSArNDA4LDE5IEBACiAJUERFQlVHKERfU1RSRUFNLCAiY2FtZXJhIHN0b3BwZWQiKTsKIH0KIAorc3RhdGljIHZvaWQgc2Rfc3RvcDAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWtmcmVlKHNkLT5qcGVnX2hkcik7Cit9CisKIHN0YXRpYyB2b2lkIHNkX3BrdF9zY2FuKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJCXN0cnVjdCBnc3BjYV9mcmFtZSAqZnJhbWUsCS8qIHRhcmdldCAqLwogCQkJX191OCAqZGF0YSwJCQkvKiBpc29jIHBhY2tldCAqLwogCQkJaW50IGxlbikJCQkvKiBpc28gcGFja2V0IGxlbmd0aCAqLwogeworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlzdGF0aWMgdW5zaWduZWQgY2hhciBmZmQ5W10gPSB7MHhmZiwgMHhkOX07CiAKIAkvKiBhIGZyYW1lIHN0YXJ0cyB3aXRoOgpAQCAtNDIwLDcgKzQzNyw4IEBACiAJCQkJCWZmZDksIDIpOwogCiAJCS8qIHB1dCB0aGUgSlBFRyA0MTEgaGVhZGVyICovCi0JCWpwZWdfcHV0X2hlYWRlcihnc3BjYV9kZXYsIGZyYW1lLCBzZF9xdWFudCwgMHgyMik7CisJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsCisJCQlzZC0+anBlZ19oZHIsIEpQRUdfSERSX1NaKTsKIAogCQkvKiBiZWdpbm5pbmcgb2YgdGhlIGZyYW1lICovCiAjZGVmaW5lIFNUS0hEUlNaIDEyCkBAIC01MjAsNiArNTM4LDM0IEBACiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBpbnQgc2Rfc2V0X2pjb21wKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqamNvbXApCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJaWYgKGpjb21wLT5xdWFsaXR5IDwgUVVBTElUWV9NSU4pCisJCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9NSU47CisJZWxzZSBpZiAoamNvbXAtPnF1YWxpdHkgPiBRVUFMSVRZX01BWCkKKwkJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX01BWDsKKwllbHNlCisJCXNkLT5xdWFsaXR5ID0gamNvbXAtPnF1YWxpdHk7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldF9qY29tcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKmpjb21wKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCW1lbXNldChqY29tcCwgMCwgc2l6ZW9mICpqY29tcCk7CisJamNvbXAtPnF1YWxpdHkgPSBzZC0+cXVhbGl0eTsKKwlqY29tcC0+anBlZ19tYXJrZXJzID0gVjRMMl9KUEVHX01BUktFUl9ESFQKKwkJCXwgVjRMMl9KUEVHX01BUktFUl9EUVQ7CisJcmV0dXJuIDA7Cit9CisKIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCkBAIC01MjksOCArNTc1LDExIEBACiAJLmluaXQgPSBzZF9pbml0LAogCS5zdGFydCA9IHNkX3N0YXJ0LAogCS5zdG9wTiA9IHNkX3N0b3BOLAorCS5zdG9wMCA9IHNkX3N0b3AwLAogCS5wa3Rfc2NhbiA9IHNkX3BrdF9zY2FuLAogCS5xdWVyeW1lbnUgPSBzZF9xdWVyeW1lbnUsCisJLmdldF9qY29tcCA9IHNkX2dldF9qY29tcCwKKwkuc2V0X2pjb21wID0gc2Rfc2V0X2pjb21wLAogfTsKIAogLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCkBAIC01NjIsOCArNjExLDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJaW5mbygicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpAQCAtNTc1LDYgKzYyNiwzIEBACiAKIG1vZHVsZV9pbml0KHNkX21vZF9pbml0KTsKIG1vZHVsZV9leGl0KHNkX21vZF9leGl0KTsKLQotbW9kdWxlX3BhcmFtX25hbWVkKHF1YW50LCBzZF9xdWFudCwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MocXVhbnQsICJRdWFudGl6YXRpb24gaW5kZXggKDAuLjgpIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHguYwppbmRleCAxM2EwMjFlLi45ZGZmMmU2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4LmMKQEAgLTQyOSw3ICs0MjksNiBAQAogCVBERUJVRyhEX1BST0JFLCAiQ29uZmlndXJpbmcgY2FtZXJhIik7CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSBTVFZfSVNPQ19FTkRQT0lOVF9BRERSOwogCXNkLT5kZXNjID0gc2RfZGVzYzsKIAlnc3BjYV9kZXYtPnNkX2Rlc2MgPSAmc2QtPmRlc2M7CiAKQEAgLTUwMSw4ICs1MDAsMTAgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuYwppbmRleCAxNDMzNWE5Li5iMTY5MDM4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5jCkBAIC0zMCw2ICszMCw2NiBAQAogCiAjaW5jbHVkZSAic3R2MDZ4eF9oZGNzLmgiCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBoZGNzMXgwMF9jdHJsW10gPSB7CisJeworCQl7CisJCQkuaWQJCT0gVjRMMl9DSURfRVhQT1NVUkUsCisJCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUJCT0gImV4cG9zdXJlIiwKKwkJCS5taW5pbXVtCT0gMHgwMCwKKwkJCS5tYXhpbXVtCT0gMHhmZmZmLAorCQkJLnN0ZXAJCT0gMHgxLAorCQkJLmRlZmF1bHRfdmFsdWUgCT0gSERDU19ERUZBVUxUX0VYUE9TVVJFLAorCQkJLmZsYWdzICAgICAgICAgCT0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCisJCX0sCisJCS5zZXQgPSBoZGNzX3NldF9leHBvc3VyZSwKKwkJLmdldCA9IGhkY3NfZ2V0X2V4cG9zdXJlCisJfSwgeworCQl7CisJCQkuaWQJCT0gVjRMMl9DSURfR0FJTiwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZQkJPSAiZ2FpbiIsCisJCQkubWluaW11bQk9IDB4MDAsCisJCQkubWF4aW11bQk9IDB4ZmYsCisJCQkuc3RlcAkJPSAweDEsCisJCQkuZGVmYXVsdF92YWx1ZSAJPSBIRENTX0RFRkFVTFRfR0FJTiwKKwkJCS5mbGFncyAgICAgICAgIAk9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUgorCQl9LAorCQkuc2V0ID0gaGRjc19zZXRfZ2FpbiwKKwkJLmdldCA9IGhkY3NfZ2V0X2dhaW4KKwl9Cit9OworCitzdGF0aWMgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBoZGNzMXgwMF9tb2RlW10gPSB7CisJeworCQlIRENTXzFYMDBfREVGX1dJRFRILAorCQlIRENTXzFYMDBfREVGX0hFSUdIVCwKKwkJVjRMMl9QSVhfRk1UX1NCR0dSOCwKKwkJVjRMMl9GSUVMRF9OT05FLAorCQkuc2l6ZWltYWdlID0KKwkJCUhEQ1NfMVgwMF9ERUZfV0lEVEggKiBIRENTXzFYMDBfREVGX0hFSUdIVCwKKwkJLmJ5dGVzcGVybGluZSA9IEhEQ1NfMVgwMF9ERUZfV0lEVEgsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMQorCX0KK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBoZGNzMTAyMF9jdHJsW10gPSB7fTsKKworc3RhdGljIHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgaGRjczEwMjBfbW9kZVtdID0geworCXsKKwkJSERDU18xMDIwX0RFRl9XSURUSCwKKwkJSERDU18xMDIwX0RFRl9IRUlHSFQsCisJCVY0TDJfUElYX0ZNVF9TQkdHUjgsCisJCVY0TDJfRklFTERfTk9ORSwKKwkJLnNpemVpbWFnZSA9CisJCQlIRENTXzEwMjBfREVGX1dJRFRIICogSERDU18xMDIwX0RFRl9IRUlHSFQsCisJCS5ieXRlc3BlcmxpbmUgPSBIRENTXzEwMjBfREVGX1dJRFRILAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDEKKwl9Cit9OworCiBlbnVtIGhkY3NfcG93ZXJfc3RhdGUgewogCUhEQ1NfU1RBVEVfU0xFRVAsCiAJSERDU19TVEFURV9JRExFLApAQCAtMzUzLDEwICs0MTMsMTAgQEAKIAogCWluZm8oIkhEQ1MtMTAwMC8xMTAwIHNlbnNvciBkZXRlY3RlZCIpOwogCi0Jc2QtPmdzcGNhX2Rldi5jYW0uY2FtX21vZGUgPSBzdHYwNnh4X3NlbnNvcl9oZGNzMXgwMC5tb2RlczsKLQlzZC0+Z3NwY2FfZGV2LmNhbS5ubW9kZXMgPSBzdHYwNnh4X3NlbnNvcl9oZGNzMXgwMC5ubW9kZXM7Ci0Jc2QtPmRlc2MuY3RybHMgPSBzdHYwNnh4X3NlbnNvcl9oZGNzMXgwMC5jdHJsczsKLQlzZC0+ZGVzYy5uY3RybHMgPSBzdHYwNnh4X3NlbnNvcl9oZGNzMXgwMC5uY3RybHM7CisJc2QtPmdzcGNhX2Rldi5jYW0uY2FtX21vZGUgPSBoZGNzMXgwMF9tb2RlOworCXNkLT5nc3BjYV9kZXYuY2FtLm5tb2RlcyA9IEFSUkFZX1NJWkUoaGRjczF4MDBfbW9kZSk7CisJc2QtPmRlc2MuY3RybHMgPSBoZGNzMXgwMF9jdHJsOworCXNkLT5kZXNjLm5jdHJscyA9IEFSUkFZX1NJWkUoaGRjczF4MDBfY3RybCk7CiAKIAloZGNzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhkY3MpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWhkY3MpCkBAIC00MTIsMTAgKzQ3MiwxMCBAQAogCiAJaW5mbygiSERDUy0xMDIwIHNlbnNvciBkZXRlY3RlZCIpOwogCi0Jc2QtPmdzcGNhX2Rldi5jYW0uY2FtX21vZGUgPSBzdHYwNnh4X3NlbnNvcl9oZGNzMTAyMC5tb2RlczsKLQlzZC0+Z3NwY2FfZGV2LmNhbS5ubW9kZXMgPSBzdHYwNnh4X3NlbnNvcl9oZGNzMTAyMC5ubW9kZXM7Ci0Jc2QtPmRlc2MuY3RybHMgPSBzdHYwNnh4X3NlbnNvcl9oZGNzMTAyMC5jdHJsczsKLQlzZC0+ZGVzYy5uY3RybHMgPSBzdHYwNnh4X3NlbnNvcl9oZGNzMTAyMC5uY3RybHM7CisJc2QtPmdzcGNhX2Rldi5jYW0uY2FtX21vZGUgPSBoZGNzMTAyMF9tb2RlOworCXNkLT5nc3BjYV9kZXYuY2FtLm5tb2RlcyA9IEFSUkFZX1NJWkUoaGRjczEwMjBfbW9kZSk7CisJc2QtPmRlc2MuY3RybHMgPSBoZGNzMTAyMF9jdHJsOworCXNkLT5kZXNjLm5jdHJscyA9IEFSUkFZX1NJWkUoaGRjczEwMjBfY3RybCk7CiAKIAloZGNzID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IGhkY3MpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWhkY3MpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9oZGNzLmgKaW5kZXggOWM3Mjc5YS4uNDEyZjA2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfaGRjcy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X2hkY3MuaApAQCAtMTUyLDUzICsxNTIsNiBAQAogCS5zdG9wID0gaGRjc19zdG9wLAogCS5kaXNjb25uZWN0ID0gaGRjc19kaXNjb25uZWN0LAogCS5kdW1wID0gaGRjc19kdW1wLAotCi0JLm5jdHJscyA9IDIsCi0JLmN0cmxzID0gewotCXsKLQkJewotCQkJLmlkCQk9IFY0TDJfQ0lEX0VYUE9TVVJFLAotCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJCS5uYW1lCQk9ICJleHBvc3VyZSIsCi0JCQkubWluaW11bQk9IDB4MDAsCi0JCQkubWF4aW11bQk9IDB4ZmZmZiwKLQkJCS5zdGVwCQk9IDB4MSwKLQkJCS5kZWZhdWx0X3ZhbHVlIAk9IEhEQ1NfREVGQVVMVF9FWFBPU1VSRSwKLQkJCS5mbGFncyAgICAgICAgIAk9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUgotCQl9LAotCQkuc2V0ID0gaGRjc19zZXRfZXhwb3N1cmUsCi0JCS5nZXQgPSBoZGNzX2dldF9leHBvc3VyZQotCX0sCi0JewotCQl7Ci0JCQkuaWQJCT0gVjRMMl9DSURfR0FJTiwKLQkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCQkubmFtZQkJPSAiZ2FpbiIsCi0JCQkubWluaW11bQk9IDB4MDAsCi0JCQkubWF4aW11bQk9IDB4ZmYsCi0JCQkuc3RlcAkJPSAweDEsCi0JCQkuZGVmYXVsdF92YWx1ZSAJPSBIRENTX0RFRkFVTFRfR0FJTiwKLQkJCS5mbGFncyAgICAgICAgIAk9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUgotCQl9LAotCQkuc2V0ID0gaGRjc19zZXRfZ2FpbiwKLQkJLmdldCA9IGhkY3NfZ2V0X2dhaW4KLQl9Ci0JfSwKLQotCS5ubW9kZXMgPSAxLAotCS5tb2RlcyA9IHsKLQl7Ci0JCUhEQ1NfMVgwMF9ERUZfV0lEVEgsCi0JCUhEQ1NfMVgwMF9ERUZfSEVJR0hULAotCQlWNEwyX1BJWF9GTVRfU0JHR1I4LAotCQlWNEwyX0ZJRUxEX05PTkUsCi0JCS5zaXplaW1hZ2UgPQotCQkJSERDU18xWDAwX0RFRl9XSURUSCAqIEhEQ1NfMVgwMF9ERUZfSEVJR0hULAotCQkuYnl0ZXNwZXJsaW5lID0gSERDU18xWDAwX0RFRl9XSURUSCwKLQkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKLQkJLnByaXYgPSAxCi0JfQotCX0KIH07CiAKIGNvbnN0IHN0cnVjdCBzdHYwNnh4X3NlbnNvciBzdHYwNnh4X3NlbnNvcl9oZGNzMTAyMCA9IHsKQEAgLTIwNywyOSArMTYwLDExIEBACiAJLmkyY19hZGRyID0gKDB4NTUgPDwgMSksCiAJLmkyY19sZW4gPSAxLAogCi0JLm5jdHJscyA9IDAsCi0JLmN0cmxzID0ge30sCi0KIAkuaW5pdCA9IGhkY3NfaW5pdCwKIAkucHJvYmUgPSBoZGNzX3Byb2JlXzEwMjAsCiAJLnN0YXJ0ID0gaGRjc19zdGFydCwKIAkuc3RvcCA9IGhkY3Nfc3RvcCwKIAkuZHVtcCA9IGhkY3NfZHVtcCwKLQotCS5ubW9kZXMgPSAxLAotCS5tb2RlcyA9IHsKLQl7Ci0JCUhEQ1NfMTAyMF9ERUZfV0lEVEgsCi0JCUhEQ1NfMTAyMF9ERUZfSEVJR0hULAotCQlWNEwyX1BJWF9GTVRfU0JHR1I4LAotCQlWNEwyX0ZJRUxEX05PTkUsCi0JCS5zaXplaW1hZ2UgPQotCQkJSERDU18xMDIwX0RFRl9XSURUSCAqIEhEQ1NfMTAyMF9ERUZfSEVJR0hULAotCQkuYnl0ZXNwZXJsaW5lID0gSERDU18xMDIwX0RFRl9XSURUSCwKLQkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKLQkJLnByaXYgPSAxCi0JfQotCX0KIH07CiAKIHN0YXRpYyBjb25zdCB1MTYgc3R2X2JyaWRnZV9pbml0W11bMl0gPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9wYjAxMDAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3BiMDEwMC5jCmluZGV4IGQwYTBmODUuLjI4NTIyMWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3BiMDEwMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3BiMDEwMC5jCkBAIC00Niw2ICs0NiwxMzIgQEAKIAogI2luY2x1ZGUgInN0djA2eHhfcGIwMTAwLmgiCiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgY3RybCBwYjAxMDBfY3RybFtdID0geworI2RlZmluZSBHQUlOX0lEWCAwCisJeworCQl7CisJCQkuaWQJCT0gVjRMMl9DSURfR0FJTiwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZQkJPSAiR2FpbiIsCisJCQkubWluaW11bQk9IDAsCisJCQkubWF4aW11bQk9IDI1NSwKKwkJCS5zdGVwCQk9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSAgPSAxMjgKKwkJfSwKKwkJLnNldCA9IHBiMDEwMF9zZXRfZ2FpbiwKKwkJLmdldCA9IHBiMDEwMF9nZXRfZ2FpbgorCX0sCisjZGVmaW5lIFJFRF9CQUxBTkNFX0lEWCAxCisJeworCQl7CisJCQkuaWQJCT0gVjRMMl9DSURfUkVEX0JBTEFOQ0UsCisJCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUJCT0gIlJlZCBCYWxhbmNlIiwKKwkJCS5taW5pbXVtCT0gLTI1NSwKKwkJCS5tYXhpbXVtCT0gMjU1LAorCQkJLnN0ZXAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlICA9IDAKKwkJfSwKKwkJLnNldCA9IHBiMDEwMF9zZXRfcmVkX2JhbGFuY2UsCisJCS5nZXQgPSBwYjAxMDBfZ2V0X3JlZF9iYWxhbmNlCisJfSwKKyNkZWZpbmUgQkxVRV9CQUxBTkNFX0lEWCAyCisJeworCQl7CisJCQkuaWQJCT0gVjRMMl9DSURfQkxVRV9CQUxBTkNFLAorCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKKwkJCS5uYW1lCQk9ICJCbHVlIEJhbGFuY2UiLAorCQkJLm1pbmltdW0JPSAtMjU1LAorCQkJLm1heGltdW0JPSAyNTUsCisJCQkuc3RlcAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgID0gMAorCQl9LAorCQkuc2V0ID0gcGIwMTAwX3NldF9ibHVlX2JhbGFuY2UsCisJCS5nZXQgPSBwYjAxMDBfZ2V0X2JsdWVfYmFsYW5jZQorCX0sCisjZGVmaW5lIEVYUE9TVVJFX0lEWCAzCisJeworCQl7CisJCQkuaWQJCT0gVjRMMl9DSURfRVhQT1NVUkUsCisJCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAorCQkJLm5hbWUJCT0gIkV4cG9zdXJlIiwKKwkJCS5taW5pbXVtCT0gMCwKKwkJCS5tYXhpbXVtCT0gNTExLAorCQkJLnN0ZXAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlICA9IDEyCisJCX0sCisJCS5zZXQgPSBwYjAxMDBfc2V0X2V4cG9zdXJlLAorCQkuZ2V0ID0gcGIwMTAwX2dldF9leHBvc3VyZQorCX0sCisjZGVmaW5lIEFVVE9HQUlOX0lEWCA0CisJeworCQl7CisJCQkuaWQJCT0gVjRMMl9DSURfQVVUT0dBSU4sCisJCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkJLm5hbWUJCT0gIkF1dG9tYXRpYyBHYWluIGFuZCBFeHBvc3VyZSIsCisJCQkubWluaW11bQk9IDAsCisJCQkubWF4aW11bQk9IDEsCisJCQkuc3RlcAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgID0gMQorCQl9LAorCQkuc2V0ID0gcGIwMTAwX3NldF9hdXRvZ2FpbiwKKwkJLmdldCA9IHBiMDEwMF9nZXRfYXV0b2dhaW4KKwl9LAorI2RlZmluZSBBVVRPR0FJTl9UQVJHRVRfSURYIDUKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NUUkxfQ0xBU1NfVVNFUiArIDB4MTAwMCwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZQkJPSAiQXV0b21hdGljIEdhaW4gVGFyZ2V0IiwKKwkJCS5taW5pbXVtCT0gMCwKKwkJCS5tYXhpbXVtCT0gMjU1LAorCQkJLnN0ZXAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlICA9IDEyOAorCQl9LAorCQkuc2V0ID0gcGIwMTAwX3NldF9hdXRvZ2Fpbl90YXJnZXQsCisJCS5nZXQgPSBwYjAxMDBfZ2V0X2F1dG9nYWluX3RhcmdldAorCX0sCisjZGVmaW5lIE5BVFVSQUxfSURYIDYKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NUUkxfQ0xBU1NfVVNFUiArIDB4MTAwMSwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCQkubmFtZQkJPSAiTmF0dXJhbCBMaWdodCBTb3VyY2UiLAorCQkJLm1pbmltdW0JPSAwLAorCQkJLm1heGltdW0JPSAxLAorCQkJLnN0ZXAJCT0gMSwKKwkJCS5kZWZhdWx0X3ZhbHVlICA9IDEKKwkJfSwKKwkJLnNldCA9IHBiMDEwMF9zZXRfbmF0dXJhbCwKKwkJLmdldCA9IHBiMDEwMF9nZXRfbmF0dXJhbAorCX0KK307CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHBiMDEwMF9tb2RlW10gPSB7CisvKiBsb3cgcmVzIC8gc3Vic2FtcGxlIG1vZGVzIGRpc2FibGVkIGFzIHRoZXkgYXJlIG9ubHkgaGFsZiByZXMgaG9yaXpvbnRhbCwKKyAgIGhhbHZpbmcgdGhlIHZlcnRpY2FsIHJlc29sdXRpb24gZG9lcyBub3Qgc2VlbSB0byB3b3JrICovCisJeworCQkzMjAsCisJCTI0MCwKKwkJVjRMMl9QSVhfRk1UX1NHUkJHOCwKKwkJVjRMMl9GSUVMRF9OT05FLAorCQkuc2l6ZWltYWdlID0gMzIwICogMjQwLAorCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IFBCMDEwMF9DUk9QX1RPX1ZHQQorCX0sCisJeworCQkzNTIsCisJCTI4OCwKKwkJVjRMMl9QSVhfRk1UX1NHUkJHOCwKKwkJVjRMMl9GSUVMRF9OT05FLAorCQkuc2l6ZWltYWdlID0gMzUyICogMjg4LAorCQkuYnl0ZXNwZXJsaW5lID0gMzUyLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDAKKwl9Cit9OworCiBzdGF0aWMgaW50IHBiMDEwMF9wcm9iZShzdHJ1Y3Qgc2QgKnNkKQogewogCXUxNiBzZW5zb3I7CkBAIC01OSwyMCArMTg1LDE5IEBACiAKIAlpZiAoKHNlbnNvciA+PiA4KSA9PSAweDY0KSB7CiAJCXNlbnNvcl9zZXR0aW5ncyA9IGttYWxsb2MoCi0JCQkJc3R2MDZ4eF9zZW5zb3JfcGIwMTAwLm5jdHJscyAqIHNpemVvZihzMzIpLAorCQkJCUFSUkFZX1NJWkUocGIwMTAwX2N0cmwpICogc2l6ZW9mKHMzMiksCiAJCQkJR0ZQX0tFUk5FTCk7CiAJCWlmICghc2Vuc29yX3NldHRpbmdzKQogCQkJcmV0dXJuIC1FTk9NRU07CiAKIAkJaW5mbygiUGhvdG9iaXQgcGIwMTAwIHNlbnNvciBkZXRlY3RlZCIpOwogCi0JCXNkLT5nc3BjYV9kZXYuY2FtLmNhbV9tb2RlID0gc3R2MDZ4eF9zZW5zb3JfcGIwMTAwLm1vZGVzOwotCQlzZC0+Z3NwY2FfZGV2LmNhbS5ubW9kZXMgPSBzdHYwNnh4X3NlbnNvcl9wYjAxMDAubm1vZGVzOwotCQlzZC0+ZGVzYy5jdHJscyA9IHN0djA2eHhfc2Vuc29yX3BiMDEwMC5jdHJsczsKLQkJc2QtPmRlc2MubmN0cmxzID0gc3R2MDZ4eF9zZW5zb3JfcGIwMTAwLm5jdHJsczsKLQkJZm9yIChpID0gMDsgaSA8IHN0djA2eHhfc2Vuc29yX3BiMDEwMC5uY3RybHM7IGkrKykKLQkJCXNlbnNvcl9zZXR0aW5nc1tpXSA9IHN0djA2eHhfc2Vuc29yX3BiMDEwMC4KLQkJCQkJICAgICBjdHJsc1tpXS5xY3RybC5kZWZhdWx0X3ZhbHVlOworCQlzZC0+Z3NwY2FfZGV2LmNhbS5jYW1fbW9kZSA9IHBiMDEwMF9tb2RlOworCQlzZC0+Z3NwY2FfZGV2LmNhbS5ubW9kZXMgPSBBUlJBWV9TSVpFKHBiMDEwMF9tb2RlKTsKKwkJc2QtPmRlc2MuY3RybHMgPSBwYjAxMDBfY3RybDsKKwkJc2QtPmRlc2MubmN0cmxzID0gQVJSQVlfU0laRShwYjAxMDBfY3RybCk7CisJCWZvciAoaSA9IDA7IGkgPCBzZC0+ZGVzYy5uY3RybHM7IGkrKykKKwkJCXNlbnNvcl9zZXR0aW5nc1tpXSA9IHBiMDEwMF9jdHJsW2ldLnFjdHJsLmRlZmF1bHRfdmFsdWU7CiAJCXNkLT5zZW5zb3JfcHJpdiA9IHNlbnNvcl9zZXR0aW5nczsKIAogCQlyZXR1cm4gMDsKQEAgLTE0Myw2ICsyNjgsMTIgQEAKIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKIH0KIAorc3RhdGljIHZvaWQgcGIwMTAwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNkICpzZCkKK3sKKwlzZC0+c2Vuc29yID0gTlVMTDsKKwlrZnJlZShzZC0+c2Vuc29yX3ByaXYpOworfQorCiAvKiBGSVhNRTogU29ydCB0aGUgaW5pdCBjb21tYW5kcyBvdXQgYW5kIHB1dCB0aGVtIGludG8gdGFibGVzLAogCSAgdGhpcyBpcyBvbmx5IGZvciBnZXR0aW5nIHRoZSBjYW1lcmEgdG8gd29yayAqLwogLyogRklYTUU6IE5vIGVycm9yIGhhbmRsaW5nIGZvciBub3csCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF9wYjAxMDAuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3BiMDEwMC5oCmluZGV4IDVlYTIxYTEuLjRkZTRmYTUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3BiMDEwMC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3BiMDEwMC5oCkBAIC0xMTQsNiArMTE0LDcgQEAKIHN0YXRpYyBpbnQgcGIwMTAwX2luaXQoc3RydWN0IHNkICpzZCk7CiBzdGF0aWMgaW50IHBiMDEwMF9zdG9wKHN0cnVjdCBzZCAqc2QpOwogc3RhdGljIGludCBwYjAxMDBfZHVtcChzdHJ1Y3Qgc2QgKnNkKTsKK3N0YXRpYyB2b2lkIHBiMDEwMF9kaXNjb25uZWN0KHN0cnVjdCBzZCAqc2QpOwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCiBzdGF0aWMgaW50IHBiMDEwMF9nZXRfZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwpAQCAtMTM3LDEzOSArMTM4LDEyIEBACiAJLmkyY19hZGRyID0gMHhiYSwKIAkuaTJjX2xlbiA9IDIsCiAKLQkubmN0cmxzID0gNywKLQkuY3RybHMgPSB7Ci0jZGVmaW5lIEdBSU5fSURYIDAKLQl7Ci0JCXsKLQkJCS5pZAkJPSBWNEwyX0NJRF9HQUlOLAotCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJCS5uYW1lCQk9ICJHYWluIiwKLQkJCS5taW5pbXVtCT0gMCwKLQkJCS5tYXhpbXVtCT0gMjU1LAotCQkJLnN0ZXAJCT0gMSwKLQkJCS5kZWZhdWx0X3ZhbHVlICA9IDEyOAotCQl9LAotCQkuc2V0ID0gcGIwMTAwX3NldF9nYWluLAotCQkuZ2V0ID0gcGIwMTAwX2dldF9nYWluCi0JfSwKLSNkZWZpbmUgUkVEX0JBTEFOQ0VfSURYIDEKLQl7Ci0JCXsKLQkJCS5pZAkJPSBWNEwyX0NJRF9SRURfQkFMQU5DRSwKLQkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCQkubmFtZQkJPSAiUmVkIEJhbGFuY2UiLAotCQkJLm1pbmltdW0JPSAtMjU1LAotCQkJLm1heGltdW0JPSAyNTUsCi0JCQkuc3RlcAkJPSAxLAotCQkJLmRlZmF1bHRfdmFsdWUgID0gMAotCQl9LAotCQkuc2V0ID0gcGIwMTAwX3NldF9yZWRfYmFsYW5jZSwKLQkJLmdldCA9IHBiMDEwMF9nZXRfcmVkX2JhbGFuY2UKLQl9LAotI2RlZmluZSBCTFVFX0JBTEFOQ0VfSURYIDIKLQl7Ci0JCXsKLQkJCS5pZAkJPSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0UsCi0JCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUJCT0gIkJsdWUgQmFsYW5jZSIsCi0JCQkubWluaW11bQk9IC0yNTUsCi0JCQkubWF4aW11bQk9IDI1NSwKLQkJCS5zdGVwCQk9IDEsCi0JCQkuZGVmYXVsdF92YWx1ZSAgPSAwCi0JCX0sCi0JCS5zZXQgPSBwYjAxMDBfc2V0X2JsdWVfYmFsYW5jZSwKLQkJLmdldCA9IHBiMDEwMF9nZXRfYmx1ZV9iYWxhbmNlCi0JfSwKLSNkZWZpbmUgRVhQT1NVUkVfSURYIDMKLQl7Ci0JCXsKLQkJCS5pZAkJPSBWNEwyX0NJRF9FWFBPU1VSRSwKLQkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCi0JCQkubmFtZQkJPSAiRXhwb3N1cmUiLAotCQkJLm1pbmltdW0JPSAwLAotCQkJLm1heGltdW0JPSA1MTEsCi0JCQkuc3RlcAkJPSAxLAotCQkJLmRlZmF1bHRfdmFsdWUgID0gMTIKLQkJfSwKLQkJLnNldCA9IHBiMDEwMF9zZXRfZXhwb3N1cmUsCi0JCS5nZXQgPSBwYjAxMDBfZ2V0X2V4cG9zdXJlCi0JfSwKLSNkZWZpbmUgQVVUT0dBSU5fSURYIDQKLQl7Ci0JCXsKLQkJCS5pZAkJPSBWNEwyX0NJRF9BVVRPR0FJTiwKLQkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JCQkubmFtZQkJPSAiQXV0b21hdGljIEdhaW4gYW5kIEV4cG9zdXJlIiwKLQkJCS5taW5pbXVtCT0gMCwKLQkJCS5tYXhpbXVtCT0gMSwKLQkJCS5zdGVwCQk9IDEsCi0JCQkuZGVmYXVsdF92YWx1ZSAgPSAxCi0JCX0sCi0JCS5zZXQgPSBwYjAxMDBfc2V0X2F1dG9nYWluLAotCQkuZ2V0ID0gcGIwMTAwX2dldF9hdXRvZ2FpbgotCX0sCi0jZGVmaW5lIEFVVE9HQUlOX1RBUkdFVF9JRFggNQotCXsKLQkJewotCQkJLmlkCQk9IFY0TDJfQ1RSTF9DTEFTU19VU0VSICsgMHgxMDAwLAotCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJCS5uYW1lCQk9ICJBdXRvbWF0aWMgR2FpbiBUYXJnZXQiLAotCQkJLm1pbmltdW0JPSAwLAotCQkJLm1heGltdW0JPSAyNTUsCi0JCQkuc3RlcAkJPSAxLAotCQkJLmRlZmF1bHRfdmFsdWUgID0gMTI4Ci0JCX0sCi0JCS5zZXQgPSBwYjAxMDBfc2V0X2F1dG9nYWluX3RhcmdldCwKLQkJLmdldCA9IHBiMDEwMF9nZXRfYXV0b2dhaW5fdGFyZ2V0Ci0JfSwKLSNkZWZpbmUgTkFUVVJBTF9JRFggNgotCXsKLQkJewotCQkJLmlkCQk9IFY0TDJfQ1RSTF9DTEFTU19VU0VSICsgMHgxMDAxLAotCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQkJCS5uYW1lCQk9ICJOYXR1cmFsIExpZ2h0IFNvdXJjZSIsCi0JCQkubWluaW11bQk9IDAsCi0JCQkubWF4aW11bQk9IDEsCi0JCQkuc3RlcAkJPSAxLAotCQkJLmRlZmF1bHRfdmFsdWUgID0gMQotCQl9LAotCQkuc2V0ID0gcGIwMTAwX3NldF9uYXR1cmFsLAotCQkuZ2V0ID0gcGIwMTAwX2dldF9uYXR1cmFsCi0JfSwKLQl9LAotCiAJLmluaXQgPSBwYjAxMDBfaW5pdCwKIAkucHJvYmUgPSBwYjAxMDBfcHJvYmUsCiAJLnN0YXJ0ID0gcGIwMTAwX3N0YXJ0LAogCS5zdG9wID0gcGIwMTAwX3N0b3AsCiAJLmR1bXAgPSBwYjAxMDBfZHVtcCwKLQotCS5ubW9kZXMgPSAyLAotCS5tb2RlcyA9IHsKLS8qIGxvdyByZXMgLyBzdWJzYW1wbGUgbW9kZXMgZGlzYWJsZWQgYXMgdGhleSBhcmUgb25seSBoYWxmIHJlcyBob3Jpem9udGFsLAotICAgaGFsdmluZyB0aGUgdmVydGljYWwgcmVzb2x1dGlvbiBkb2VzIG5vdCBzZWVtIHRvIHdvcmsgKi8KLQl7Ci0JCTMyMCwKLQkJMjQwLAotCQlWNEwyX1BJWF9GTVRfU0dSQkc4LAotCQlWNEwyX0ZJRUxEX05PTkUsCi0JCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAsCi0JCS5ieXRlc3BlcmxpbmUgPSAzMjAsCi0JCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCi0JCS5wcml2ID0gUEIwMTAwX0NST1BfVE9fVkdBCi0JfSwKLQl7Ci0JCTM1MiwKLQkJMjg4LAotCQlWNEwyX1BJWF9GTVRfU0dSQkc4LAotCQlWNEwyX0ZJRUxEX05PTkUsCi0JCS5zaXplaW1hZ2UgPSAzNTIgKiAyODgsCi0JCS5ieXRlc3BlcmxpbmUgPSAzNTIsCi0JCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCi0JCS5wcml2ID0gMAotCX0sCi0JfQorCS5kaXNjb25uZWN0ID0gcGIwMTAwX2Rpc2Nvbm5lY3QsCiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3NlbnNvci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfc2Vuc29yLmgKaW5kZXggYzcyNmRhYy4uZTg4YzQyZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfc2Vuc29yLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdHYwNnh4L3N0djA2eHhfc2Vuc29yLmgKQEAgLTQxLDggKzQxLDYgQEAKIGV4dGVybiBjb25zdCBzdHJ1Y3Qgc3R2MDZ4eF9zZW5zb3Igc3R2MDZ4eF9zZW5zb3JfaGRjczEwMjA7CiBleHRlcm4gY29uc3Qgc3RydWN0IHN0djA2eHhfc2Vuc29yIHN0djA2eHhfc2Vuc29yX3BiMDEwMDsKIAotI2RlZmluZSBTVFYwNlhYX01BWF9DVFJMUwkJKFY0TDJfQ0lEX0xBU1RQMSAtIFY0TDJfQ0lEX0JBU0UgKyAxMCkKLQogc3RydWN0IHN0djA2eHhfc2Vuc29yIHsKIAkvKiBEZWZpbmVzIHRoZSBuYW1lIG9mIGEgc2Vuc29yICovCiAJY2hhciBuYW1lWzMyXTsKQEAgLTgxLDEyICs3OSw2IEBACiAKIAkvKiBJbnN0cnVjdHMgdGhlIHNlbnNvciB0byBkdW1wIGFsbCBpdHMgY29udGVudHMgKi8KIAlpbnQgKCpkdW1wKShzdHJ1Y3Qgc2QgKnNkKTsKLQotCWludCBuY3RybHM7Ci0Jc3RydWN0IGN0cmwgY3RybHNbU1RWMDZYWF9NQVhfQ1RSTFNdOwotCi0JY2hhciBubW9kZXM7Ci0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBtb2Rlc1tdOwogfTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF92djY0MTAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3Z2NjQxMC5jCmluZGV4IDFjYTkxZjIuLjY5Yzc3YzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3Z2NjQxMC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3Z2NjQxMC5jCkBAIC0yOSwyNiArMjksOTIgQEAKIAogI2luY2x1ZGUgInN0djA2eHhfdnY2NDEwLmgiCiAKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHZ2NjQxMF9tb2RlW10gPSB7CisJeworCQkzNTYsCisJCTI5MiwKKwkJVjRMMl9QSVhfRk1UX1NHUkJHOCwKKwkJVjRMMl9GSUVMRF9OT05FLAorCQkuc2l6ZWltYWdlID0gMzU2ICogMjkyLAorCQkuYnl0ZXNwZXJsaW5lID0gMzU2LAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCQkucHJpdiA9IDAKKwl9Cit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IGN0cmwgdnY2NDEwX2N0cmxbXSA9IHsKKyNkZWZpbmUgSEZMSVBfSURYIDAKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9IRkxJUCwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCQkubmFtZQkJPSAiaG9yaXpvbnRhbCBmbGlwIiwKKwkJCS5taW5pbXVtCT0gMCwKKwkJCS5tYXhpbXVtCT0gMSwKKwkJCS5zdGVwCQk9IDEsCisJCQkuZGVmYXVsdF92YWx1ZQk9IDAKKwkJfSwKKwkJLnNldCA9IHZ2NjQxMF9zZXRfaGZsaXAsCisJCS5nZXQgPSB2djY0MTBfZ2V0X2hmbGlwCisJfSwKKyNkZWZpbmUgVkZMSVBfSURYIDEKKwl7CisJCXsKKwkJCS5pZAkJPSBWNEwyX0NJRF9WRkxJUCwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCisJCQkubmFtZQkJPSAidmVydGljYWwgZmxpcCIsCisJCQkubWluaW11bQk9IDAsCisJCQkubWF4aW11bQk9IDEsCisJCQkuc3RlcAkJPSAxLAorCQkJLmRlZmF1bHRfdmFsdWUgCT0gMAorCQl9LAorCQkuc2V0ID0gdnY2NDEwX3NldF92ZmxpcCwKKwkJLmdldCA9IHZ2NjQxMF9nZXRfdmZsaXAKKwl9LAorI2RlZmluZSBHQUlOX0lEWCAyCisJeworCQl7CisJCQkuaWQJCT0gVjRMMl9DSURfR0FJTiwKKwkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCisJCQkubmFtZQkJPSAiYW5hbG9nIGdhaW4iLAorCQkJLm1pbmltdW0JPSAwLAorCQkJLm1heGltdW0JPSAxNSwKKwkJCS5zdGVwCQk9IDEsCisJCQkuZGVmYXVsdF92YWx1ZSAgPSAwCisJCX0sCisJCS5zZXQgPSB2djY0MTBfc2V0X2FuYWxvZ19nYWluLAorCQkuZ2V0ID0gdnY2NDEwX2dldF9hbmFsb2dfZ2FpbgorCX0KK307CisKIHN0YXRpYyBpbnQgdnY2NDEwX3Byb2JlKHN0cnVjdCBzZCAqc2QpCiB7CiAJdTE2IGRhdGE7Ci0JaW50IGVycjsKKwlpbnQgZXJyLCBpOworCXMzMiAqc2Vuc29yX3NldHRpbmdzOwogCiAJZXJyID0gc3R2MDZ4eF9yZWFkX3NlbnNvcihzZCwgVlY2NDEwX0RFVklDRUgsICZkYXRhKTsKLQogCWlmIChlcnIgPCAwKQogCQlyZXR1cm4gLUVOT0RFVjsKIAogCWlmIChkYXRhID09IDB4MTkpIHsKIAkJaW5mbygidnY2NDEwIHNlbnNvciBkZXRlY3RlZCIpOwogCi0JCXNkLT5nc3BjYV9kZXYuY2FtLmNhbV9tb2RlID0gc3R2MDZ4eF9zZW5zb3JfdnY2NDEwLm1vZGVzOwotCQlzZC0+Z3NwY2FfZGV2LmNhbS5ubW9kZXMgPSBzdHYwNnh4X3NlbnNvcl92djY0MTAubm1vZGVzOwotCQlzZC0+ZGVzYy5jdHJscyA9IHN0djA2eHhfc2Vuc29yX3Z2NjQxMC5jdHJsczsKLQkJc2QtPmRlc2MubmN0cmxzID0gc3R2MDZ4eF9zZW5zb3JfdnY2NDEwLm5jdHJsczsKKwkJc2Vuc29yX3NldHRpbmdzID0ga21hbGxvYyhBUlJBWV9TSVpFKHZ2NjQxMF9jdHJsKSAqIHNpemVvZihzMzIpLAorCQkJCQkgIEdGUF9LRVJORUwpOworCQlpZiAoIXNlbnNvcl9zZXR0aW5ncykKKwkJCXJldHVybiAtRU5PTUVNOworCisJCXNkLT5nc3BjYV9kZXYuY2FtLmNhbV9tb2RlID0gdnY2NDEwX21vZGU7CisJCXNkLT5nc3BjYV9kZXYuY2FtLm5tb2RlcyA9IEFSUkFZX1NJWkUodnY2NDEwX21vZGUpOworCQlzZC0+ZGVzYy5jdHJscyA9IHZ2NjQxMF9jdHJsOworCQlzZC0+ZGVzYy5uY3RybHMgPSBBUlJBWV9TSVpFKHZ2NjQxMF9jdHJsKTsKKworCQlmb3IgKGkgPSAwOyBpIDwgc2QtPmRlc2MubmN0cmxzOyBpKyspCisJCQlzZW5zb3Jfc2V0dGluZ3NbaV0gPSB2djY0MTBfY3RybFtpXS5xY3RybC5kZWZhdWx0X3ZhbHVlOworCQlzZC0+c2Vuc29yX3ByaXYgPSBzZW5zb3Jfc2V0dGluZ3M7CiAJCXJldHVybiAwOwogCX0KLQogCXJldHVybiAtRU5PREVWOwogfQogCkBAIC04MCw2ICsxNDYsMTIgQEAKIAlyZXR1cm4gKGVyciA8IDApID8gZXJyIDogMDsKIH0KIAorc3RhdGljIHZvaWQgdnY2NDEwX2Rpc2Nvbm5lY3Qoc3RydWN0IHNkICpzZCkKK3sKKwlzZC0+c2Vuc29yID0gTlVMTDsKKwlrZnJlZShzZC0+c2Vuc29yX3ByaXYpOworfQorCiBzdGF0aWMgaW50IHZ2NjQxMF9zdGFydChzdHJ1Y3Qgc2QgKnNkKQogewogCWludCBlcnI7CkBAIC0xNTYsMTcgKzIyOCwxMyBAQAogCiBzdGF0aWMgaW50IHZ2NjQxMF9nZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKQogewotCWludCBlcnI7Ci0JdTE2IGkyY19kYXRhOwogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzMzIgKnNlbnNvcl9zZXR0aW5ncyA9IHNkLT5zZW5zb3JfcHJpdjsKIAotCWVyciA9IHN0djA2eHhfcmVhZF9zZW5zb3Ioc2QsIFZWNjQxMF9EQVRBRk9STUFULCAmaTJjX2RhdGEpOwotCi0JKnZhbCA9IChpMmNfZGF0YSAmIFZWNjQxMF9IRkxJUCkgPyAxIDogMDsKLQorCSp2YWwgPSBzZW5zb3Jfc2V0dGluZ3NbSEZMSVBfSURYXTsKIAlQREVCVUcoRF9WNEwyLCAiUmVhZCBob3Jpem9udGFsIGZsaXAgJWQiLCAqdmFsKTsKIAotCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZ2NjQxMF9zZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCkBAIC0xNzQsNiArMjQyLDkgQEAKIAlpbnQgZXJyOwogCXUxNiBpMmNfZGF0YTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJczMyICpzZW5zb3Jfc2V0dGluZ3MgPSBzZC0+c2Vuc29yX3ByaXY7CisKKwlzZW5zb3Jfc2V0dGluZ3NbSEZMSVBfSURYXSA9IHZhbDsKIAllcnIgPSBzdHYwNnh4X3JlYWRfc2Vuc29yKHNkLCBWVjY0MTBfREFUQUZPUk1BVCwgJmkyY19kYXRhKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKQEAgLTE5MSwxNyArMjYyLDEzIEBACiAKIHN0YXRpYyBpbnQgdnY2NDEwX2dldF92ZmxpcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCiB7Ci0JaW50IGVycjsKLQl1MTYgaTJjX2RhdGE7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXMzMiAqc2Vuc29yX3NldHRpbmdzID0gc2QtPnNlbnNvcl9wcml2OwogCi0JZXJyID0gc3R2MDZ4eF9yZWFkX3NlbnNvcihzZCwgVlY2NDEwX0RBVEFGT1JNQVQsICZpMmNfZGF0YSk7Ci0KLQkqdmFsID0gKGkyY19kYXRhICYgVlY2NDEwX1ZGTElQKSA/IDEgOiAwOwotCisJKnZhbCA9IHNlbnNvcl9zZXR0aW5nc1tWRkxJUF9JRFhdOwogCVBERUJVRyhEX1Y0TDIsICJSZWFkIHZlcnRpY2FsIGZsaXAgJWQiLCAqdmFsKTsKIAotCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiAwOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHZ2NjQxMF9zZXRfdmZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCkBAIC0yMDksNiArMjc2LDkgQEAKIAlpbnQgZXJyOwogCXUxNiBpMmNfZGF0YTsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJczMyICpzZW5zb3Jfc2V0dGluZ3MgPSBzZC0+c2Vuc29yX3ByaXY7CisKKwlzZW5zb3Jfc2V0dGluZ3NbVkZMSVBfSURYXSA9IHZhbDsKIAllcnIgPSBzdHYwNnh4X3JlYWRfc2Vuc29yKHNkLCBWVjY0MTBfREFUQUZPUk1BVCwgJmkyY19kYXRhKTsKIAlpZiAoZXJyIDwgMCkKIAkJcmV0dXJuIGVycjsKQEAgLTIyNiwyNCArMjk2LDIzIEBACiAKIHN0YXRpYyBpbnQgdnY2NDEwX2dldF9hbmFsb2dfZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpCiB7Ci0JaW50IGVycjsKLQl1MTYgaTJjX2RhdGE7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCXMzMiAqc2Vuc29yX3NldHRpbmdzID0gc2QtPnNlbnNvcl9wcml2OwogCi0JZXJyID0gc3R2MDZ4eF9yZWFkX3NlbnNvcihzZCwgVlY2NDEwX0FOQUxPR0dBSU4sICZpMmNfZGF0YSk7Ci0KLQkqdmFsID0gaTJjX2RhdGEgJiAweGY7CisJKnZhbCA9IHNlbnNvcl9zZXR0aW5nc1tHQUlOX0lEWF07CiAKIAlQREVCVUcoRF9WNEwyLCAiUmVhZCBhbmFsb2cgZ2FpbiAlZCIsICp2YWwpOwogCi0JcmV0dXJuIChlcnIgPCAwKSA/IGVyciA6IDA7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgdnY2NDEwX3NldF9hbmFsb2dfZ2FpbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKIHsKIAlpbnQgZXJyOwogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKwlzMzIgKnNlbnNvcl9zZXR0aW5ncyA9IHNkLT5zZW5zb3JfcHJpdjsKIAorCXNlbnNvcl9zZXR0aW5nc1tHQUlOX0lEWF0gPSB2YWw7CiAJUERFQlVHKERfVjRMMiwgIlNldCBhbmFsb2cgZ2FpbiB0byAlZCIsIHZhbCk7CiAJZXJyID0gc3R2MDZ4eF93cml0ZV9zZW5zb3Ioc2QsIFZWNjQxMF9BTkFMT0dHQUlOLCAweGYwIHwgKHZhbCAmIDB4ZikpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3N0djA2eHgvc3R2MDZ4eF92djY0MTAuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3Z2NjQxMC5oCmluZGV4IDNmZjhjNGUuLjk1YWM1NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3Z2NjQxMC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3R2MDZ4eC9zdHYwNnh4X3Z2NjQxMC5oCkBAIC0xNzgsNiArMTc4LDcgQEAKIHN0YXRpYyBpbnQgdnY2NDEwX2luaXQoc3RydWN0IHNkICpzZCk7CiBzdGF0aWMgaW50IHZ2NjQxMF9zdG9wKHN0cnVjdCBzZCAqc2QpOwogc3RhdGljIGludCB2djY0MTBfZHVtcChzdHJ1Y3Qgc2QgKnNkKTsKK3N0YXRpYyB2b2lkIHZ2NjQxMF9kaXNjb25uZWN0KHN0cnVjdCBzZCAqc2QpOwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCiBzdGF0aWMgaW50IHZ2NjQxMF9nZXRfaGZsaXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiAqdmFsKTsKQEAgLTE5Nyw2MiArMTk4LDcgQEAKIAkuc3RhcnQgPSB2djY0MTBfc3RhcnQsCiAJLnN0b3AgPSB2djY0MTBfc3RvcCwKIAkuZHVtcCA9IHZ2NjQxMF9kdW1wLAotCi0JLm5jdHJscyA9IDMsCi0JLmN0cmxzID0gewotCXsKLQkJewotCQkJLmlkCQk9IFY0TDJfQ0lEX0hGTElQLAotCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQkJCS5uYW1lCQk9ICJob3Jpem9udGFsIGZsaXAiLAotCQkJLm1pbmltdW0JPSAwLAotCQkJLm1heGltdW0JPSAxLAotCQkJLnN0ZXAJCT0gMSwKLQkJCS5kZWZhdWx0X3ZhbHVlCT0gMAotCQl9LAotCQkuc2V0ID0gdnY2NDEwX3NldF9oZmxpcCwKLQkJLmdldCA9IHZ2NjQxMF9nZXRfaGZsaXAKLQl9LCB7Ci0JCXsKLQkJCS5pZAkJPSBWNEwyX0NJRF9WRkxJUCwKLQkJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JCQkubmFtZQkJPSAidmVydGljYWwgZmxpcCIsCi0JCQkubWluaW11bQk9IDAsCi0JCQkubWF4aW11bQk9IDEsCi0JCQkuc3RlcAkJPSAxLAotCQkJLmRlZmF1bHRfdmFsdWUgCT0gMAotCQl9LAotCQkuc2V0ID0gdnY2NDEwX3NldF92ZmxpcCwKLQkJLmdldCA9IHZ2NjQxMF9nZXRfdmZsaXAKLQl9LCB7Ci0JCXsKLQkJCS5pZAkJPSBWNEwyX0NJRF9HQUlOLAotCQkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJCS5uYW1lCQk9ICJhbmFsb2cgZ2FpbiIsCi0JCQkubWluaW11bQk9IDAsCi0JCQkubWF4aW11bQk9IDE1LAotCQkJLnN0ZXAJCT0gMSwKLQkJCS5kZWZhdWx0X3ZhbHVlICA9IDAKLQkJfSwKLQkJLnNldCA9IHZ2NjQxMF9zZXRfYW5hbG9nX2dhaW4sCi0JCS5nZXQgPSB2djY0MTBfZ2V0X2FuYWxvZ19nYWluCi0JfQotCX0sCi0KLQkubm1vZGVzID0gMSwKLQkubW9kZXMgPSB7Ci0JewotCQkzNTYsCi0JCTI5MiwKLQkJVjRMMl9QSVhfRk1UX1NHUkJHOCwKLQkJVjRMMl9GSUVMRF9OT05FLAotCQkuc2l6ZWltYWdlID0KLQkJCTM1NiAqIDI5MiwKLQkJLmJ5dGVzcGVybGluZSA9IDM1NiwKLQkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKLQkJLnByaXYgPSAwCi0JfQotCX0KKwkuZGlzY29ubmVjdCA9IHZ2NjQxMF9kaXNjb25uZWN0LAogfTsKIAogLyogSWYgTlVMTCwgb25seSBzaW5nbGUgdmFsdWUgdG8gd3JpdGUsIHN0b3JlZCBpbiBsZW4gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2Evc3VucGx1cy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdW5wbHVzLmMKaW5kZXggNmQ5MDRkNS4uYzJiOGMxMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdW5wbHVzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS9zdW5wbHVzLmMKQEAgLTM5LDggKzM5LDExIEBACiAJdW5zaWduZWQgY2hhciBjb250cmFzdDsKIAl1bnNpZ25lZCBjaGFyIGNvbG9yczsKIAl1bnNpZ25lZCBjaGFyIGF1dG9nYWluOworCXU4IHF1YWxpdHk7CisjZGVmaW5lIFFVQUxJVFlfTUlOIDcwCisjZGVmaW5lIFFVQUxJVFlfTUFYIDk1CisjZGVmaW5lIFFVQUxJVFlfREVGIDg1CiAKLQljaGFyIHFpbmRleDsKIAljaGFyIGJyaWRnZTsKICNkZWZpbmUgQlJJREdFX1NQQ0E1MDQgMAogI2RlZmluZSBCUklER0VfU1BDQTUwNEIgMQpAQCAtNTIsNiArNTUsOCBAQAogI2RlZmluZSBMb2dpdGVjaENsaWNrU21hcnQ0MjAgMgogI2RlZmluZSBMb2dpdGVjaENsaWNrU21hcnQ4MjAgMwogI2RlZmluZSBNZWdhcGl4VjQgNAorCisJdTggKmpwZWdfaGRyOwogfTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwpAQCAtODEyLDcgKzgxNyw2IEBACiAJc3RydWN0IGNhbSAqY2FtOwogCiAJY2FtID0gJmdzcGNhX2Rldi0+Y2FtOwotCWNhbS0+ZXBhZGRyID0gMHgwMTsKIAogCXNkLT5icmlkZ2UgPSBpZC0+ZHJpdmVyX2luZm8gPj4gODsKIAlzZC0+c3VidHlwZSA9IGlkLT5kcml2ZXJfaW5mbzsKQEAgLTg1MCwxMCArODU0LDEwIEBACiAJCWNhbS0+bm1vZGVzID0gc2l6ZW9mIHZnYV9tb2RlMiAvIHNpemVvZiB2Z2FfbW9kZTJbMF07CiAJCWJyZWFrOwogCX0KLQlzZC0+cWluZGV4ID0gNTsJCQkvKiBzZXQgdGhlIHF1YW50aXphdGlvbiB0YWJsZSAqLwogCXNkLT5icmlnaHRuZXNzID0gc2RfY3RybHNbU0RfQlJJR0hUTkVTU10ucWN0cmwuZGVmYXVsdF92YWx1ZTsKIAlzZC0+Y29udHJhc3QgPSBzZF9jdHJsc1tTRF9DT05UUkFTVF0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKIAlzZC0+Y29sb3JzID0gc2RfY3RybHNbU0RfQ09MT1JdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX0RFRjsKIAlyZXR1cm4gMDsKIH0KIApAQCAtOTcwLDYgKzk3NCwxMiBAQAogCV9fdTggaTsKIAlfX3U4IGluZm9bNl07CiAKKwkvKiBjcmVhdGUgdGhlIEpQRUcgaGVhZGVyICovCisJc2QtPmpwZWdfaGRyID0ga21hbGxvYyhKUEVHX0hEUl9TWiwgR0ZQX0tFUk5FTCk7CisJanBlZ19kZWZpbmUoc2QtPmpwZWdfaGRyLCBnc3BjYV9kZXYtPmhlaWdodCwgZ3NwY2FfZGV2LT53aWR0aCwKKwkJCTB4MjIpOwkJLyogSlBFRyA0MTEgKi8KKwlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOworCiAJaWYgKHNkLT5icmlkZ2UgPT0gQlJJREdFX1NQQ0E1MDRCKQogCQlzcGNhNTA0Ql9zZXRRdGFibGUoZ3NwY2FfZGV2KTsKIAlzcGNhNTA0Ql9TZXRTaXplVHlwZShnc3BjYV9kZXYpOwpAQCAtMTA3OSw2ICsxMDg5LDEzIEBACiAJfQogfQogCitzdGF0aWMgdm9pZCBzZF9zdG9wMChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJa2ZyZWUoc2QtPmpwZWdfaGRyKTsKK30KKwogc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCiAJCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCkBAIC0xMTU1LDkgKzExNzIsOCBAQAogCQkJCQlmZmQ5LCAyKTsKIAogCQkvKiBwdXQgdGhlIEpQRUcgaGVhZGVyIGluIHRoZSBuZXcgZnJhbWUgKi8KLQkJanBlZ19wdXRfaGVhZGVyKGdzcGNhX2RldiwgZnJhbWUsCi0JCQkJKChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2KS0+cWluZGV4LAotCQkJCTB4MjIpOworCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsIGZyYW1lLAorCQkJc2QtPmpwZWdfaGRyLCBKUEVHX0hEUl9TWik7CiAJfQogCiAJLyogYWRkIDB4MDAgYWZ0ZXIgMHhmZiAqLwpAQCAtMTE5OCwyNiArMTIxNCw2IEBACiAJfQogfQogCi1zdGF0aWMgdm9pZCBnZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JX191MTYgYnJpZ2h0bmVzcyA9IDA7Ci0KLQlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKLQlkZWZhdWx0OgotLyoJY2FzZSBCUklER0VfU1BDQTUzMzogKi8KLS8qCWNhc2UgQlJJREdFX1NQQ0E1MDRCOiAqLwotLyoJY2FzZSBCUklER0VfU1BDQTUwNDogKi8KLS8qCWNhc2UgQlJJREdFX1NQQ0E1MDRDOiAqLwotCQlicmlnaHRuZXNzID0gcmVnX3JfMTIoZ3NwY2FfZGV2LCAweDAwLCAweDIxYTcsIDIpOwotCQlicmVhazsKLQljYXNlIEJSSURHRV9TUENBNTM2OgotCQlicmlnaHRuZXNzID0gcmVnX3JfMTIoZ3NwY2FfZGV2LCAweDAwLCAweDIwZjAsIDIpOwotCQlicmVhazsKLQl9Ci0Jc2QtPmJyaWdodG5lc3MgPSAoKGJyaWdodG5lc3MgJiAweGZmKSAtIDEyOCkgJSAyNTU7Ci19Ci0KIHN0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CkBAIC0xMjM3LDI0ICsxMjMzLDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGdldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KLQlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKLQlkZWZhdWx0OgotLyoJY2FzZSBCUklER0VfU1BDQTUzMzogKi8KLS8qCWNhc2UgQlJJREdFX1NQQ0E1MDRCOiAqLwotLyoJY2FzZSBCUklER0VfU1BDQTUwNDogKi8KLS8qCWNhc2UgQlJJREdFX1NQQ0E1MDRDOiAqLwotCQlzZC0+Y29udHJhc3QgPSByZWdfcl8xMihnc3BjYV9kZXYsIDB4MDAsIDB4MjFhOCwgMik7Ci0JCWJyZWFrOwotCWNhc2UgQlJJREdFX1NQQ0E1MzY6Ci0JCXNkLT5jb250cmFzdCA9IHJlZ19yXzEyKGdzcGNhX2RldiwgMHgwMCwgMHgyMGYxLCAyKTsKLQkJYnJlYWs7Ci0JfQotfQotCiBzdGF0aWMgdm9pZCBzZXRjb2xvcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTEyNzQsMjQgKzEyNTIsNiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgZ2V0Y29sb3JzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KLQlzd2l0Y2ggKHNkLT5icmlkZ2UpIHsKLQlkZWZhdWx0OgotLyoJY2FzZSBCUklER0VfU1BDQTUzMzogKi8KLS8qCWNhc2UgQlJJREdFX1NQQ0E1MDRCOiAqLwotLyoJY2FzZSBCUklER0VfU1BDQTUwNDogKi8KLS8qCWNhc2UgQlJJREdFX1NQQ0E1MDRDOiAqLwotCQlzZC0+Y29sb3JzID0gcmVnX3JfMTIoZ3NwY2FfZGV2LCAweDAwLCAweDIxYWUsIDIpID4+IDE7Ci0JCWJyZWFrOwotCWNhc2UgQlJJREdFX1NQQ0E1MzY6Ci0JCXNkLT5jb2xvcnMgPSByZWdfcl8xMihnc3BjYV9kZXYsIDB4MDAsIDB4MjBmNiwgMikgPj4gMTsKLQkJYnJlYWs7Ci0JfQotfQotCiBzdGF0aWMgaW50IHNkX3NldGJyaWdodG5lc3Moc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LCBfX3MzMiB2YWwpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwpAQCAtMTMwNiw3ICsxMjY2LDYgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlnZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAJKnZhbCA9IHNkLT5icmlnaHRuZXNzOwogCXJldHVybiAwOwogfQpAQCAtMTMyNSw3ICsxMjg0LDYgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAKLQlnZXRjb250cmFzdChnc3BjYV9kZXYpOwogCSp2YWwgPSBzZC0+Y29udHJhc3Q7CiAJcmV0dXJuIDA7CiB9CkBAIC0xMzQ0LDcgKzEzMDIsNiBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAotCWdldGNvbG9ycyhnc3BjYV9kZXYpOwogCSp2YWwgPSBzZC0+Y29sb3JzOwogCXJldHVybiAwOwogfQpAQCAtMTM2NSw2ICsxMzIyLDM0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgc2Rfc2V0X2pjb21wKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqamNvbXApCit7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OworCisJaWYgKGpjb21wLT5xdWFsaXR5IDwgUVVBTElUWV9NSU4pCisJCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9NSU47CisJZWxzZSBpZiAoamNvbXAtPnF1YWxpdHkgPiBRVUFMSVRZX01BWCkKKwkJc2QtPnF1YWxpdHkgPSBRVUFMSVRZX01BWDsKKwllbHNlCisJCXNkLT5xdWFsaXR5ID0gamNvbXAtPnF1YWxpdHk7CisJaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQorCQlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNkX2dldF9qY29tcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKmpjb21wKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCW1lbXNldChqY29tcCwgMCwgc2l6ZW9mICpqY29tcCk7CisJamNvbXAtPnF1YWxpdHkgPSBzZC0+cXVhbGl0eTsKKwlqY29tcC0+anBlZ19tYXJrZXJzID0gVjRMMl9KUEVHX01BUktFUl9ESFQKKwkJCXwgVjRMMl9KUEVHX01BUktFUl9EUVQ7CisJcmV0dXJuIDA7Cit9CisKIC8qIHN1Yi1kcml2ZXIgZGVzY3JpcHRpb24gKi8KIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc2RfZGVzYyBzZF9kZXNjID0gewogCS5uYW1lID0gTU9EVUxFX05BTUUsCkBAIC0xMzc0LDcgKzEzNTksMTAgQEAKIAkuaW5pdCA9IHNkX2luaXQsCiAJLnN0YXJ0ID0gc2Rfc3RhcnQsCiAJLnN0b3BOID0gc2Rfc3RvcE4sCisJLnN0b3AwID0gc2Rfc3RvcDAsCiAJLnBrdF9zY2FuID0gc2RfcGt0X3NjYW4sCisJLmdldF9qY29tcCA9IHNkX2dldF9qY29tcCwKKwkuc2V0X2pjb21wID0gc2Rfc2V0X2pjb21wLAogfTsKIAogLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCkBAIC0xNDY1LDggKzE0NTMsMTAgQEAKIC8qIC0tIG1vZHVsZSBpbnNlcnQgLyByZW1vdmUgLS0gKi8KIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdDYxMy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMKaW5kZXggNmVlMTExYS4uZjYzZTM3ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90NjEzLmMKQEAgLTM3LDIwICszNywyMSBAQAogc3RydWN0IHNkIHsKIAlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLwogCi0JdW5zaWduZWQgY2hhciBicmlnaHRuZXNzOwotCXVuc2lnbmVkIGNoYXIgY29udHJhc3Q7Ci0JdW5zaWduZWQgY2hhciBjb2xvcnM7Ci0JdW5zaWduZWQgY2hhciBhdXRvZ2FpbjsKLQl1bnNpZ25lZCBjaGFyIGdhbW1hOwotCXVuc2lnbmVkIGNoYXIgc2hhcnBuZXNzOwotCXVuc2lnbmVkIGNoYXIgZnJlcTsKLQl1bnNpZ25lZCBjaGFyIHdoaXRlYmFsYW5jZTsKLQl1bnNpZ25lZCBjaGFyIG1pcnJvcjsKLQl1bnNpZ25lZCBjaGFyIGVmZmVjdDsKKwl1OCBicmlnaHRuZXNzOworCXU4IGNvbnRyYXN0OworCXU4IGNvbG9yczsKKwl1OCBhdXRvZ2FpbjsKKwl1OCBnYW1tYTsKKwl1OCBzaGFycG5lc3M7CisJdTggZnJlcTsKKwl1OCB3aGl0ZWJhbGFuY2U7CisJdTggbWlycm9yOworCXU4IGVmZmVjdDsKIAotCV9fdTggc2Vuc29yOwotI2RlZmluZSBTRU5TT1JfVEFTNTEzMEEgMAotI2RlZmluZSBTRU5TT1JfT002ODAyIDEKKwl1OCBzZW5zb3I7CisjZGVmaW5lIFNFTlNPUl9PTTY4MDIgMAorI2RlZmluZSBTRU5TT1JfT1RIRVIgMQorI2RlZmluZSBTRU5TT1JfVEFTNTEzMEEgMgogfTsKIAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwpAQCAtNzgsNyArNzksNiBAQAogCQkJc3RydWN0IHY0bDJfcXVlcnltZW51ICptZW51KTsKIAogc3RhdGljIHN0cnVjdCBjdHJsIHNkX2N0cmxzW10gPSB7Ci0jZGVmaW5lIFNEX0JSSUdIVE5FU1MgMAogCXsKIAkgewogCSAgLmlkID0gVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTg3LDEyICs4NywxMiBAQAogCSAgLm1pbmltdW0gPSAwLAogCSAgLm1heGltdW0gPSAxNCwKIAkgIC5zdGVwID0gMSwKLQkgIC5kZWZhdWx0X3ZhbHVlID0gOCwKKyNkZWZpbmUgQlJJR0hUTkVTU19ERUYgOAorCSAgLmRlZmF1bHRfdmFsdWUgPSBCUklHSFRORVNTX0RFRiwKIAkgIH0sCiAJIC5zZXQgPSBzZF9zZXRicmlnaHRuZXNzLAogCSAuZ2V0ID0gc2RfZ2V0YnJpZ2h0bmVzcywKIAkgfSwKLSNkZWZpbmUgU0RfQ09OVFJBU1QgMQogCXsKIAkgewogCSAgLmlkID0gVjRMMl9DSURfQ09OVFJBU1QsCkBAIC0xMDEsMTIgKzEwMSwxMiBAQAogCSAgLm1pbmltdW0gPSAwLAogCSAgLm1heGltdW0gPSAweDBkLAogCSAgLnN0ZXAgPSAxLAotCSAgLmRlZmF1bHRfdmFsdWUgPSAweDA3LAorI2RlZmluZSBDT05UUkFTVF9ERUYgMHgwNworCSAgLmRlZmF1bHRfdmFsdWUgPSBDT05UUkFTVF9ERUYsCiAJICB9LAogCSAuc2V0ID0gc2Rfc2V0Y29udHJhc3QsCiAJIC5nZXQgPSBzZF9nZXRjb250cmFzdCwKIAkgfSwKLSNkZWZpbmUgU0RfQ09MT1IgMgogCXsKIAkgewogCSAgLmlkID0gVjRMMl9DSURfU0FUVVJBVElPTiwKQEAgLTExNSw3ICsxMTUsOCBAQAogCSAgLm1pbmltdW0gPSAwLAogCSAgLm1heGltdW0gPSAweDBmLAogCSAgLnN0ZXAgPSAxLAotCSAgLmRlZmF1bHRfdmFsdWUgPSAweDA1LAorI2RlZmluZSBDT0xPUlNfREVGIDB4MDUKKwkgIC5kZWZhdWx0X3ZhbHVlID0gQ09MT1JTX0RFRiwKIAkgIH0sCiAJIC5zZXQgPSBzZF9zZXRjb2xvcnMsCiAJIC5nZXQgPSBzZF9nZXRjb2xvcnMsCkBAIC0xMzUsNyArMTM2LDYgQEAKIAkgLnNldCA9IHNkX3NldGdhbW1hLAogCSAuZ2V0ID0gc2RfZ2V0Z2FtbWEsCiAJIH0sCi0jZGVmaW5lIFNEX0FVVE9HQUlOIDQKIAl7CiAJIHsKIAkgIC5pZCA9IFY0TDJfQ0lEX0dBSU4sCS8qIGhlcmUsIGkgYWN0aXZhdGUgb25seSB0aGUgbG93bGlnaHQsCkBAIC0xNDYsMTIgKzE0NiwxMiBAQAogCSAgLm1pbmltdW0gPSAwLAogCSAgLm1heGltdW0gPSAxLAogCSAgLnN0ZXAgPSAxLAotCSAgLmRlZmF1bHRfdmFsdWUgPSAweDAxLAorI2RlZmluZSBBVVRPR0FJTl9ERUYgMHgwMQorCSAgLmRlZmF1bHRfdmFsdWUgPSBBVVRPR0FJTl9ERUYsCiAJICB9LAogCSAuc2V0ID0gc2Rfc2V0bG93bGlnaHQsCiAJIC5nZXQgPSBzZF9nZXRsb3dsaWdodCwKIAkgfSwKLSNkZWZpbmUgU0RfTUlSUk9SIDUKIAl7CiAJIHsKIAkgIC5pZCA9IFY0TDJfQ0lEX0hGTElQLApAQCAtMTYwLDEyICsxNjAsMTIgQEAKIAkgIC5taW5pbXVtID0gMCwKIAkgIC5tYXhpbXVtID0gMSwKIAkgIC5zdGVwID0gMSwKLQkgIC5kZWZhdWx0X3ZhbHVlID0gMCwKKyNkZWZpbmUgTUlSUk9SX0RFRiAwCisJICAuZGVmYXVsdF92YWx1ZSA9IE1JUlJPUl9ERUYsCiAJICB9LAogCSAuc2V0ID0gc2Rfc2V0ZmxpcCwKIAkgLmdldCA9IHNkX2dldGZsaXAKIAl9LAotI2RlZmluZSBTRF9MSUdIVEZSRVEgNgogCXsKIAkgewogCSAgLmlkID0gVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1ksCkBAIC0xNzQsMTIgKzE3NCwxMiBAQAogCSAgLm1pbmltdW0gPSAxLAkJLyogMSAtPiAweDUwLCAyLT4weDYwICovCiAJICAubWF4aW11bSA9IDIsCiAJICAuc3RlcCA9IDEsCi0JICAuZGVmYXVsdF92YWx1ZSA9IDEsCisjZGVmaW5lIEZSRVFfREVGIDEKKwkgIC5kZWZhdWx0X3ZhbHVlID0gRlJFUV9ERUYsCiAJICB9LAogCSAuc2V0ID0gc2Rfc2V0ZnJlcSwKIAkgLmdldCA9IHNkX2dldGZyZXF9LAogCi0jZGVmaW5lIFNEX1dISVRFX0JBTEFOQ0UgNwogCXsKIAkgewogCSAgLmlkID0gVjRMMl9DSURfV0hJVEVfQkFMQU5DRV9URU1QRVJBVFVSRSwKQEAgLTE4OCwxMiArMTg4LDEyIEBACiAJICAubWluaW11bSA9IDAsCiAJICAubWF4aW11bSA9IDEsCiAJICAuc3RlcCA9IDEsCi0JICAuZGVmYXVsdF92YWx1ZSA9IDAsCisjZGVmaW5lIFdISVRFX0JBTEFOQ0VfREVGIDAKKwkgIC5kZWZhdWx0X3ZhbHVlID0gV0hJVEVfQkFMQU5DRV9ERUYsCiAJICB9LAogCSAuc2V0ID0gc2Rfc2V0d2hpdGViYWxhbmNlLAogCSAuZ2V0ID0gc2RfZ2V0d2hpdGViYWxhbmNlCiAJfSwKLSNkZWZpbmUgU0RfU0hBUlBORVNTIDgJCS8qIChha2EgZGVmaW5pdGlvbiBvbiB3aW4pICovCiAJewogCSB7CiAJICAuaWQgPSBWNEwyX0NJRF9TSEFSUE5FU1MsCkBAIC0yMDIsMTIgKzIwMiwxMiBAQAogCSAgLm1pbmltdW0gPSAwLAogCSAgLm1heGltdW0gPSAxNSwKIAkgIC5zdGVwID0gMSwKLQkgIC5kZWZhdWx0X3ZhbHVlID0gMHgwNiwKKyNkZWZpbmUgU0hBUlBORVNTX0RFRiAweDA2CisJICAuZGVmYXVsdF92YWx1ZSA9IFNIQVJQTkVTU19ERUYsCiAJICB9LAogCSAuc2V0ID0gc2Rfc2V0c2hhcnBuZXNzLAogCSAuZ2V0ID0gc2RfZ2V0c2hhcnBuZXNzLAogCSB9LAotI2RlZmluZSBTRF9FRkZFQ1RTIDkKIAl7CiAJIHsKIAkgIC5pZCA9IFY0TDJfQ0lEX0VGRkVDVFMsCkBAIC0yMTYsNyArMjE2LDggQEAKIAkgIC5taW5pbXVtID0gMCwKIAkgIC5tYXhpbXVtID0gNCwKIAkgIC5zdGVwID0gMSwKLQkgIC5kZWZhdWx0X3ZhbHVlID0gMCwKKyNkZWZpbmUgRUZGRUNUU19ERUYgMAorCSAgLmRlZmF1bHRfdmFsdWUgPSBFRkZFQ1RTX0RFRiwKIAkgIH0sCiAJIC5zZXQgPSBzZF9zZXRlZmZlY3QsCiAJIC5nZXQgPSBzZF9nZXRlZmZlY3QKQEAgLTI2MywyOCArMjY0LDUwIEBACiAKIC8qIHNlbnNvciBzcGVjaWZpYyBkYXRhICovCiBzdHJ1Y3QgYWRkaXRpb25hbF9zZW5zb3JfZGF0YSB7Ci0JY29uc3QgX191OCBkYXRhMVsyMF07Ci0JY29uc3QgX191OCBkYXRhMlsxOF07Ci0JY29uc3QgX191OCBkYXRhM1sxOF07Ci0JY29uc3QgX191OCBkYXRhNFs0XTsKLQljb25zdCBfX3U4IGRhdGE1WzZdOwotCWNvbnN0IF9fdTggc3RyZWFtWzRdOworCWNvbnN0IHU4IGRhdGExWzEwXTsKKwljb25zdCB1OCBkYXRhMls5XTsKKwljb25zdCB1OCBkYXRhM1s5XTsKKwljb25zdCB1OCBkYXRhNFs0XTsKKwljb25zdCB1OCBkYXRhNVs2XTsKKwljb25zdCB1OCBzdHJlYW1bNF07CiB9OwogCi1jb25zdCBzdGF0aWMgc3RydWN0IGFkZGl0aW9uYWxfc2Vuc29yX2RhdGEgc2Vuc29yX2RhdGFbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkaXRpb25hbF9zZW5zb3JfZGF0YSBzZW5zb3JfZGF0YVtdID0geworICAgIHsJCQkJLyogT002ODAyICovCisJLmRhdGExID0KKwkJezB4YzIsIDB4MjgsIDB4MGYsIDB4MjIsIDB4Y2QsIDB4MjcsIDB4MmMsIDB4MDYsCisJCSAweGIzLCAweGZjfSwKKwkuZGF0YTIgPQorCQl7MHg4MCwgMHhmZiwgMHhmZiwgMHg4MCwgMHhmZiwgMHhmZiwgMHg4MCwgMHhmZiwKKwkJIDB4ZmZ9LAorCS5kYXRhNCA9CS8qRnJlcSAoNTAvNjBIeikuIFNwbGl0dGVkIGZvciB0ZXN0IHB1cnBvc2UgKi8KKwkJezB4NjYsIDB4Y2EsIDB4YTgsIDB4ZjB9LAorCS5kYXRhNSA9CS8qIHRoaXMgY291bGQgYmUgcmVtb3ZlZCBsYXRlciAqLworCQl7MHgwYywgMHgwMywgMHhhYiwgMHgxMywgMHg4MSwgMHgyM30sCisJLnN0cmVhbSA9CisJCXsweDBiLCAweDA0LCAweDBhLCAweDc4fSwKKyAgICB9LAorICAgIHsJCQkJLyogT1RIRVIgKi8KKwkuZGF0YTEgPQorCQl7MHhjMSwgMHg0OCwgMHgwNCwgMHgxYiwgMHhjYSwgMHgyZSwgMHgzMywgMHgzYSwKKwkJIDB4ZTgsIDB4ZmN9LAorCS5kYXRhMiA9CisJCXsweDRlLCAweDljLCAweGVjLCAweDQwLCAweDgwLCAweGMwLCAweDQ4LCAweDk2LAorCQkgMHhkOX0sCisJLmRhdGE0ID0KKwkJezB4NjYsIDB4MDAsIDB4YTgsIDB4YTh9LAorCS5kYXRhNSA9CisJCXsweDBjLCAweDAzLCAweGFiLCAweDI5LCAweDgxLCAweDY5fSwKKwkuc3RyZWFtID0KKwkJezB4MGIsIDB4MDQsIDB4MGEsIDB4MDB9LAorICAgIH0sCiAgICAgewkJCQkvKiBUQVM1MTMwQSAqLwogCS5kYXRhMSA9Ci0JCXsweGQwLCAweGJiLCAweGQxLCAweDI4LCAweGQyLCAweDEwLCAweGQzLCAweDEwLAotCQkgMHhkNCwgMHhiYiwgMHhkNSwgMHgyOCwgMHhkNiwgMHgxZSwgMHhkNywgMHgyNywKLQkJIDB4ZDgsIDB4YzgsIDB4ZDksIDB4ZmN9LAorCQl7MHhiYiwgMHgyOCwgMHgxMCwgMHgxMCwgMHhiYiwgMHgyOCwgMHgxZSwgMHgyNywKKwkJIDB4YzgsIDB4ZmN9LAogCS5kYXRhMiA9Ci0JCXsweGUwLCAweDYwLCAweGUxLCAweGE4LCAweGUyLCAweGUwLCAweGUzLCAweDYwLAotCQkgMHhlNCwgMHhhOCwgMHhlNSwgMHhlMCwgMHhlNiwgMHg2MCwgMHhlNywgMHhhOCwKLQkJIDB4ZTgsIDB4ZTB9LAotCS5kYXRhMyA9Ci0JCXsweGM3LCAweDYwLCAweGM4LCAweGE4LCAweGM5LCAweGUwLCAweGNhLCAweDYwLAotCQkgMHhjYiwgMHhhOCwgMHhjYywgMHhlMCwgMHhjZCwgMHg2MCwgMHhjZSwgMHhhOCwKLQkJIDB4Y2YsIDB4ZTB9LAorCQl7MHg2MCwgMHhhOCwgMHhlMCwgMHg2MCwgMHhhOCwgMHhlMCwgMHg2MCwgMHhhOCwKKwkJIDB4ZTB9LAogCS5kYXRhNCA9CS8qIEZyZXEgKDUwLzYwSHopLiBTcGxpdHRlZCBmb3IgdGVzdCBwdXJwb3NlICovCiAJCXsweDY2LCAweDAwLCAweGE4LCAweGU4fSwKIAkuZGF0YTUgPQpAQCAtMjkyLDMyICszMTUsMTIgQEAKIAkuc3RyZWFtID0KIAkJezB4MGIsIDB4MDQsIDB4MGEsIDB4NDB9LAogICAgIH0sCi0gICAgewkJCQkvKiBPTTY4MDIgKi8KLQkuZGF0YTEgPQotCQl7MHhkMCwgMHhjMiwgMHhkMSwgMHgyOCwgMHhkMiwgMHgwZiwgMHhkMywgMHgyMiwKLQkJIDB4ZDQsIDB4Y2QsIDB4ZDUsIDB4MjcsIDB4ZDYsIDB4MmMsIDB4ZDcsIDB4MDYsCi0JCSAweGQ4LCAweGIzLCAweGQ5LCAweGZjfSwKLQkuZGF0YTIgPQotCQl7MHhlMCwgMHg4MCwgMHhlMSwgMHhmZiwgMHhlMiwgMHhmZiwgMHhlMywgMHg4MCwKLQkJIDB4ZTQsIDB4ZmYsIDB4ZTUsIDB4ZmYsIDB4ZTYsIDB4ODAsIDB4ZTcsIDB4ZmYsCi0JCSAweGU4LCAweGZmfSwKLQkuZGF0YTMgPQotCQl7MHhjNywgMHg4MCwgMHhjOCwgMHhmZiwgMHhjOSwgMHhmZiwgMHhjYSwgMHg4MCwKLQkJIDB4Y2IsIDB4ZmYsIDB4Y2MsIDB4ZmYsIDB4Y2QsIDB4ODAsIDB4Y2UsIDB4ZmYsCi0JCSAweGNmLCAweGZmfSwKLQkuZGF0YTQgPQkvKkZyZXEgKDUwLzYwSHopLiBTcGxpdHRlZCBmb3IgdGVzdCBwdXJwb3NlICovCi0JCXsweDY2LCAweGNhLCAweGE4LCAweGYwIH0sCi0JLmRhdGE1ID0JLyogdGhpcyBjb3VsZCBiZSByZW1vdmVkIGxhdGVyICovCi0JCXsweDBjLCAweDAzLCAweGFiLCAweDEzLCAweDgxLCAweDIzfSwKLQkuc3RyZWFtID0KLQkJezB4MGIsIDB4MDQsIDB4MGEsIDB4Nzh9LAotICAgIH0KIH07CiAKICNkZWZpbmUgTUFYX0VGRkVDVFMgNwogLyogZWFzaWx5IGRvbmUgYnkgc29mdCwgdGhpcyB0YWJsZSBjb3VsZCBiZSByZW1vdmVkLAogICogaSBrZWVwIGl0IGhlcmUganVzdCBpbiBjYXNlICovCi1zdGF0aWMgY29uc3QgX191OCBlZmZlY3RzX3RhYmxlW01BWF9FRkZFQ1RTXVs2XSA9IHsKK3N0YXRpYyBjb25zdCB1OCBlZmZlY3RzX3RhYmxlW01BWF9FRkZFQ1RTXVs2XSA9IHsKIAl7MHhhOCwgMHhlOCwgMHhjNiwgMHhkMiwgMHhjMCwgMHgwMH0sCS8qIE5vcm1hbCAqLwogCXsweGE4LCAweGM4LCAweGM2LCAweDUyLCAweGMwLCAweDA0fSwJLyogUmVwdWphciAqLwogCXsweGE4LCAweGU4LCAweGM2LCAweGQyLCAweGMwLCAweDIwfSwJLyogTW9ub2Nocm9tZSAqLwpAQCAtMzI3LDkwICszMzAsNTggQEAKIAl7MHhhOCwgMHhjOCwgMHhjNiwgMHhkMiwgMHhjMCwgMHg0MH0sCS8qIE5lZ2F0aXZlICovCiB9OwogCi1zdGF0aWMgY29uc3QgX191OCBnYW1tYV90YWJsZVtHQU1NQV9NQVhdWzM0XSA9IHsKLQl7MHg5MCwgMHgwMCwgMHg5MSwgMHgzZSwgMHg5MiwgMHg2OSwgMHg5MywgMHg4NSwJLyogMCAqLwotCSAweDk0LCAweDk1LCAweDk1LCAweGExLCAweDk2LCAweGFlLCAweDk3LCAweGI5LAotCSAweDk4LCAweGMyLCAweDk5LCAweGNiLCAweDlhLCAweGQ0LCAweDliLCAweGRiLAotCSAweDljLCAweGUzLCAweDlkLCAweGVhLCAweDllLCAweGYxLCAweDlmLCAweGY4LAotCSAweGEwLCAweGZmfSwKLQl7MHg5MCwgMHgwMCwgMHg5MSwgMHgzMywgMHg5MiwgMHg1YSwgMHg5MywgMHg3NSwJLyogMSAqLwotCSAweDk0LCAweDg1LCAweDk1LCAweDkzLCAweDk2LCAweGExLCAweDk3LCAweGFkLAotCSAweDk4LCAweGI3LCAweDk5LCAweGMyLCAweDlhLCAweGNiLCAweDliLCAweGQ0LAotCSAweDljLCAweGRlLCAweDlELCAweGU3LCAweDllLCAweGYwLCAweDlmLCAweGY3LAotCSAweGEwLCAweGZmfSwKLQl7MHg5MCwgMHgwMCwgMHg5MSwgMHgyZiwgMHg5MiwgMHg1MSwgMHg5MywgMHg2YiwJLyogMiAqLwotCSAweDk0LCAweDdjLCAweDk1LCAweDhhLCAweDk2LCAweDk5LCAweDk3LCAweGE2LAotCSAweDk4LCAweGIxLCAweDk5LCAweGJjLCAweDlhLCAweGM2LCAweDliLCAweGQwLAotCSAweDljLCAweGRiLCAweDlkLCAweGU0LCAweDllLCAweGVkLCAweDlmLCAweGY2LAotCSAweGEwLCAweGZmfSwKLQl7MHg5MCwgMHgwMCwgMHg5MSwgMHgyOSwgMHg5MiwgMHg0OCwgMHg5MywgMHg2MCwJLyogMyAqLwotCSAweDk0LCAweDcyLCAweDk1LCAweDgxLCAweDk2LCAweDkwLCAweDk3LCAweDllLAotCSAweDk4LCAweGFhLCAweDk5LCAweGI1LCAweDlhLCAweGJmLCAweDliLCAweGNiLAotCSAweDljLCAweGQ2LCAweDlkLCAweGUxLCAweDllLCAweGViLCAweDlmLCAweGY1LAotCSAweGEwLCAweGZmfSwKLQl7MHg5MCwgMHgwMCwgMHg5MSwgMHgyMywgMHg5MiwgMHgzZiwgMHg5MywgMHg1NSwJLyogNCAqLwotCSAweDk0LCAweDY4LCAweDk1LCAweDc3LCAweDk2LCAweDg2LCAweDk3LCAweDk1LAotCSAweDk4LCAweGEyLCAweDk5LCAweGFkLCAweDlhLCAweGI5LCAweDliLCAweGM2LAotCSAweDljLCAweGQyLCAweDlkLCAweGRlLCAweDllLCAweGU5LCAweDlmLCAweGY0LAotCSAweGEwLCAweGZmfSwKLQl7MHg5MCwgMHgwMCwgMHg5MSwgMHgxYiwgMHg5MiwgMHgzMywgMHg5MywgMHg0OCwJLyogNSAqLwotCSAweDk0LCAweDU5LCAweDk1LCAweDY5LCAweDk2LCAweDc5LCAweDk3LCAweDg3LAotCSAweDk4LCAweDk2LCAweDk5LCAweGEzLCAweDlhLCAweGIxLCAweDliLCAweGJlLAotCSAweDljLCAweGNjLCAweDlkLCAweGRhLCAweDllLCAweGU3LCAweDlmLCAweGYzLAotCSAweGEwLCAweGZmfSwKLQl7MHg5MCwgMHgwMCwgMHg5MSwgMHgwMiwgMHg5MiwgMHgxMCwgMHg5MywgMHgyMCwJLyogNiAqLwotCSAweDk0LCAweDMyLCAweDk1LCAweDQwLCAweDk2LCAweDU3LCAweDk3LCAweDY3LAotCSAweDk4LCAweDc3LCAweDk5LCAweDg4LCAweDlhLCAweDk5LCAweDliLCAweGFhLAotCSAweDljLCAweGJiLCAweDlkLCAweGNjLCAweDllLCAweGRkLCAweDlmLCAweGVlLAotCSAweGEwLCAweGZmfSwKLQl7MHg5MCwgMHgwMCwgMHg5MSwgMHgwMiwgMHg5MiwgMHgxNCwgMHg5MywgMHgyNiwJLyogNyAqLwotCSAweDk0LCAweDM4LCAweDk1LCAweDRhLCAweDk2LCAweDYwLCAweDk3LCAweDcwLAotCSAweDk4LCAweDgwLCAweDk5LCAweDkwLCAweDlhLCAweGEwLCAweDliLCAweGIwLAotCSAweDljLCAweGMwLCAweDlELCAweGQwLCAweDllLCAweGUwLCAweDlmLCAweGYwLAotCSAweGEwLCAweGZmfSwKLQl7MHg5MCwgMHgwMCwgMHg5MSwgMHgxMCwgMHg5MiwgMHgyMiwgMHg5MywgMHgzNSwJLyogOCAqLwotCSAweDk0LCAweDQ3LCAweDk1LCAweDVhLCAweDk2LCAweDY5LCAweDk3LCAweDc5LAotCSAweDk4LCAweDg4LCAweDk5LCAweDk3LCAweDlhLCAweGE3LCAweDliLCAweGI2LAotCSAweDljLCAweGM0LCAweDlkLCAweGQzLCAweDllLCAweGUwLCAweDlmLCAweGYwLAotCSAweGEwLCAweGZmfSwKLQl7MHg5MCwgMHgwMCwgMHg5MSwgMHgxMCwgMHg5MiwgMHgyNiwgMHg5MywgMHg0MCwJLyogOSAqLwotCSAweDk0LCAweDU0LCAweDk1LCAweDY1LCAweDk2LCAweDc1LCAweDk3LCAweDg0LAotCSAweDk4LCAweDkzLCAweDk5LCAweGExLCAweDlhLCAweGIwLCAweDliLCAweGJkLAotCSAweDljLCAweGNhLCAweDlkLCAweGQ2LCAweDllLCAweGUwLCAweDlmLCAweGYwLAotCSAweGEwLCAweGZmfSwKLQl7MHg5MCwgMHgwMCwgMHg5MSwgMHgxOCwgMHg5MiwgMHgyYiwgMHg5MywgMHg0NCwJLyogMTAgKi8KLQkgMHg5NCwgMHg2MCwgMHg5NSwgMHg3MCwgMHg5NiwgMHg4MCwgMHg5NywgMHg4ZSwKLQkgMHg5OCwgMHg5YywgMHg5OSwgMHhhYSwgMHg5YSwgMHhiNywgMHg5YiwgMHhjNCwKLQkgMHg5YywgMHhkMCwgMHg5ZCwgMHhkOCwgMHg5ZSwgMHhlMiwgMHg5ZiwgMHhmMCwKLQkgMHhhMCwgMHhmZn0sCi0JezB4OTAsIDB4MDAsIDB4OTEsIDB4MWEsIDB4OTIsIDB4MzQsIDB4OTMsIDB4NTIsCS8qIDExICovCi0JIDB4OTQsIDB4NjYsIDB4OTUsIDB4N2UsIDB4OTYsIDB4OEQsIDB4OTcsIDB4OUIsCi0JIDB4OTgsIDB4YTgsIDB4OTksIDB4YjQsIDB4OWEsIDB4YzAsIDB4OWIsIDB4Y2IsCi0JIDB4OWMsIDB4ZDYsIDB4OWQsIDB4ZTEsIDB4OWUsIDB4ZWIsIDB4OWYsIDB4ZjUsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDNmLCAweDkyLCAweDVhLCAweDkzLCAweDZlLAkvKiAxMiAqLwotCSAweDk0LCAweDdmLCAweDk1LCAweDhlLCAweDk2LCAweDljLCAweDk3LCAweGE4LAotCSAweDk4LCAweGI0LCAweDk5LCAweGJmLCAweDlhLCAweGM5LCAweDliLCAweGQzLAotCSAweDljLCAweGRjLCAweDlkLCAweGU1LCAweDllLCAweGVlLCAweDlmLCAweGY2LAotCSAweGEwLCAweGZmfSwKLQl7MHg5MCwgMHgwMCwgMHg5MSwgMHg1NCwgMHg5MiwgMHg2ZiwgMHg5MywgMHg4MywJLyogMTMgKi8KLQkgMHg5NCwgMHg5MywgMHg5NSwgMHhhMCwgMHg5NiwgMHhhZCwgMHg5NywgMHhiNywKLQkgMHg5OCwgMHhjMiwgMHg5OSwgMHhjYiwgMHg5YSwgMHhkNCwgMHg5YiwgMHhkYywKLQkgMHg5YywgMHhlNCwgMHg5ZCwgMHhlYiwgMHg5ZSwgMHhmMiwgMHg5ZiwgMHhmOSwKLQkgMHhhMCwgMHhmZn0sCi0JezB4OTAsIDB4MDAsIDB4OTEsIDB4NmUsIDB4OTIsIDB4ODgsIDB4OTMsIDB4OWEsCS8qIDE0ICovCi0JIDB4OTQsIDB4YTgsIDB4OTUsIDB4YjMsIDB4OTYsIDB4YmQsIDB4OTcsIDB4YzYsCi0JIDB4OTgsIDB4Y2YsIDB4OTksIDB4ZDYsIDB4OWEsIDB4ZGQsIDB4OWIsIDB4ZTMsCi0JIDB4OWMsIDB4ZTksIDB4OWQsIDB4ZWYsIDB4OWUsIDB4ZjQsIDB4OWYsIDB4ZmEsCi0JIDB4YTAsIDB4ZmZ9LAotCXsweDkwLCAweDAwLCAweDkxLCAweDkzLCAweDkyLCAweGE4LCAweDkzLCAweGI3LAkvKiAxNSAqLwotCSAweDk0LCAweGMxLCAweDk1LCAweGNhLCAweDk2LCAweGQyLCAweDk3LCAweGQ4LAotCSAweDk4LCAweGRlLCAweDk5LCAweGUzLCAweDlhLCAweGU4LCAweDliLCAweGVkLAotCSAweDljLCAweGYxLCAweDlkLCAweGY1LCAweDllLCAweGY4LCAweDlmLCAweGZjLAotCSAweGEwLCAweGZmfQorc3RhdGljIGNvbnN0IHU4IGdhbW1hX3RhYmxlW0dBTU1BX01BWF1bMTddID0geworCXsweDAwLCAweDNlLCAweDY5LCAweDg1LCAweDk1LCAweGExLCAweGFlLCAweGI5LAkvKiAwICovCisJIDB4YzIsIDB4Y2IsIDB4ZDQsIDB4ZGIsIDB4ZTMsIDB4ZWEsIDB4ZjEsIDB4ZjgsCisJIDB4ZmZ9LAorCXsweDAwLCAweDMzLCAweDVhLCAweDc1LCAweDg1LCAweDkzLCAweGExLCAweGFkLAkvKiAxICovCisJIDB4YjcsIDB4YzIsIDB4Y2IsIDB4ZDQsIDB4ZGUsIDB4ZTcsIDB4ZjAsIDB4ZjcsCisJIDB4ZmZ9LAorCXsweDAwLCAweDJmLCAweDUxLCAweDZiLCAweDdjLCAweDhhLCAweDk5LCAweGE2LAkvKiAyICovCisJIDB4YjEsIDB4YmMsIDB4YzYsIDB4ZDAsIDB4ZGIsIDB4ZTQsIDB4ZWQsIDB4ZjYsCisJIDB4ZmZ9LAorCXsweDAwLCAweDI5LCAweDQ4LCAweDYwLCAweDcyLCAweDgxLCAweDkwLCAweDllLAkvKiAzICovCisJIDB4YWEsIDB4YjUsIDB4YmYsIDB4Y2IsIDB4ZDYsIDB4ZTEsIDB4ZWIsIDB4ZjUsCisJIDB4ZmZ9LAorCXsweDAwLCAweDIzLCAweDNmLCAweDU1LCAweDY4LCAweDc3LCAweDg2LCAweDk1LAkvKiA0ICovCisJIDB4YTIsIDB4YWQsIDB4YjksIDB4YzYsIDB4ZDIsIDB4ZGUsIDB4ZTksIDB4ZjQsCisJIDB4ZmZ9LAorCXsweDAwLCAweDFiLCAweDMzLCAweDQ4LCAweDU5LCAweDY5LCAweDc5LCAweDg3LAkvKiA1ICovCisJIDB4OTYsIDB4YTMsIDB4YjEsIDB4YmUsIDB4Y2MsIDB4ZGEsIDB4ZTcsIDB4ZjMsCisJIDB4ZmZ9LAorCXsweDAwLCAweDAyLCAweDEwLCAweDIwLCAweDMyLCAweDQwLCAweDU3LCAweDY3LAkvKiA2ICovCisJIDB4NzcsIDB4ODgsIDB4OTksIDB4YWEsIDB4YmIsIDB4Y2MsIDB4ZGQsIDB4ZWUsCisJIDB4ZmZ9LAorCXsweDAwLCAweDAyLCAweDE0LCAweDI2LCAweDM4LCAweDRhLCAweDYwLCAweDcwLAkvKiA3ICovCisJIDB4ODAsIDB4OTAsIDB4YTAsIDB4YjAsIDB4YzAsIDB4ZDAsIDB4ZTAsIDB4ZjAsCisJIDB4ZmZ9LAorCXsweDAwLCAweDEwLCAweDIyLCAweDM1LCAweDQ3LCAweDVhLCAweDY5LCAweDc5LAkvKiA4ICovCisJIDB4ODgsIDB4OTcsIDB4YTcsIDB4YjYsIDB4YzQsIDB4ZDMsIDB4ZTAsIDB4ZjAsCisJIDB4ZmZ9LAorCXsweDAwLCAweDEwLCAweDI2LCAweDQwLCAweDU0LCAweDY1LCAweDc1LCAweDg0LAkvKiA5ICovCisJIDB4OTMsIDB4YTEsIDB4YjAsIDB4YmQsIDB4Y2EsIDB4ZDYsIDB4ZTAsIDB4ZjAsCisJIDB4ZmZ9LAorCXsweDAwLCAweDE4LCAweDJiLCAweDQ0LCAweDYwLCAweDcwLCAweDgwLCAweDhlLAkvKiAxMCAqLworCSAweDljLCAweGFhLCAweGI3LCAweGM0LCAweGQwLCAweGQ4LCAweGUyLCAweGYwLAorCSAweGZmfSwKKwl7MHgwMCwgMHgxYSwgMHgzNCwgMHg1MiwgMHg2NiwgMHg3ZSwgMHg4RCwgMHg5QiwJLyogMTEgKi8KKwkgMHhhOCwgMHhiNCwgMHhjMCwgMHhjYiwgMHhkNiwgMHhlMSwgMHhlYiwgMHhmNSwKKwkgMHhmZn0sCisJezB4MDAsIDB4M2YsIDB4NWEsIDB4NmUsIDB4N2YsIDB4OGUsIDB4OWMsIDB4YTgsCS8qIDEyICovCisJIDB4YjQsIDB4YmYsIDB4YzksIDB4ZDMsIDB4ZGMsIDB4ZTUsIDB4ZWUsIDB4ZjYsCisJIDB4ZmZ9LAorCXsweDAwLCAweDU0LCAweDZmLCAweDgzLCAweDkzLCAweGEwLCAweGFkLCAweGI3LAkvKiAxMyAqLworCSAweGMyLCAweGNiLCAweGQ0LCAweGRjLCAweGU0LCAweGViLCAweGYyLCAweGY5LAorCSAweGZmfSwKKwl7MHgwMCwgMHg2ZSwgMHg4OCwgMHg5YSwgMHhhOCwgMHhiMywgMHhiZCwgMHhjNiwJLyogMTQgKi8KKwkgMHhjZiwgMHhkNiwgMHhkZCwgMHhlMywgMHhlOSwgMHhlZiwgMHhmNCwgMHhmYSwKKwkgMHhmZn0sCisJezB4MDAsIDB4OTMsIDB4YTgsIDB4YjcsIDB4YzEsIDB4Y2EsIDB4ZDIsIDB4ZDgsCS8qIDE1ICovCisJIDB4ZGUsIDB4ZTMsIDB4ZTgsIDB4ZWQsIDB4ZjEsIDB4ZjUsIDB4ZjgsIDB4ZmMsCisJIDB4ZmZ9CiB9OwogCi1zdGF0aWMgY29uc3QgX191OCB0YXM1MTMwYV9zZW5zb3JfaW5pdFtdWzhdID0geworc3RhdGljIGNvbnN0IHU4IHRhczUxMzBhX3NlbnNvcl9pbml0W11bOF0gPSB7CiAJezB4NjIsIDB4MDgsIDB4NjMsIDB4NzAsIDB4NjQsIDB4MWQsIDB4NjAsIDB4MDl9LAogCXsweDYyLCAweDIwLCAweDYzLCAweDAxLCAweDY0LCAweDAyLCAweDYwLCAweDA5fSwKIAl7MHg2MiwgMHgwNywgMHg2MywgMHgwMywgMHg2NCwgMHgwMCwgMHg2MCwgMHgwOX0sCkBAIC00MTgsMTEgKzM4OSwxMSBAQAogCXt9LAogfTsKIAotc3RhdGljIF9fdTggc2Vuc29yX3Jlc2V0W10gPSB7MHg2MSwgMHg2OCwgMHg2MiwgMHhmZiwgMHg2MCwgMHgwN307CitzdGF0aWMgdTggc2Vuc29yX3Jlc2V0W10gPSB7MHg2MSwgMHg2OCwgMHg2MiwgMHhmZiwgMHg2MCwgMHgwN307CiAKIC8qIHJlYWQgMSBieXRlICovCi1zdGF0aWMgaW50IHJlZ19yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJICAgX191MTYgaW5kZXgpCitzdGF0aWMgdTggcmVnX3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkgICB1MTYgaW5kZXgpCiB7CiAJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAogCQkJdXNiX3JjdmN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKQEAgLTQzNSw3ICs0MDYsNyBAQAogfQogCiBzdGF0aWMgdm9pZCByZWdfdyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCSAgX191MTYgaW5kZXgpCisJCSAgdTE2IGluZGV4KQogewogCXVzYl9jb250cm9sX21zZyhnc3BjYV9kZXYtPmRldiwKIAkJCXVzYl9zbmRjdHJscGlwZShnc3BjYV9kZXYtPmRldiwgMCksCkBAIC00NDYsNyArNDE3LDcgQEAKIH0KIAogc3RhdGljIHZvaWQgcmVnX3dfYnVmKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKLQkJICBjb25zdCBfX3U4ICpidWZmZXIsIF9fdTE2IGxlbikKKwkJICBjb25zdCB1OCAqYnVmZmVyLCB1MTYgbGVuKQogewogCWlmIChsZW4gPD0gVVNCX0JVRl9TWikgewogCQltZW1jcHkoZ3NwY2FfZGV2LT51c2JfYnVmLCBidWZmZXIsIGxlbik7CkBAIC00NTcsNyArNDI4LDcgQEAKIAkJCQkweDAxLCAwLAogCQkJCWdzcGNhX2Rldi0+dXNiX2J1ZiwgbGVuLCA1MDApOwogCX0gZWxzZSB7Ci0JCV9fdTggKnRtcGJ1ZjsKKwkJdTggKnRtcGJ1ZjsKIAogCQl0bXBidWYgPSBrbWFsbG9jKGxlbiwgR0ZQX0tFUk5FTCk7CiAJCW1lbWNweSh0bXBidWYsIGJ1ZmZlciwgbGVuKTsKQEAgLTQ3MSwxNCArNDQyLDQxIEBACiAJfQogfQogCisvKiB3cml0ZSB2YWx1ZXMgdG8gY29uc2VjdXRpdmUgcmVnaXN0ZXJzICovCitzdGF0aWMgdm9pZCByZWdfd19peGJ1ZihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQl1OCByZWcsCisJCQljb25zdCB1OCAqYnVmZmVyLCB1MTYgbGVuKQoreworCWludCBpOworCXU4ICpwLCAqdG1wYnVmOworCisJaWYgKGxlbiAqIDIgPD0gVVNCX0JVRl9TWikKKwkJcCA9IHRtcGJ1ZiA9IGdzcGNhX2Rldi0+dXNiX2J1ZjsKKwllbHNlCisJCXAgPSB0bXBidWYgPSBrbWFsbG9jKGxlbiAqIDIsIEdGUF9LRVJORUwpOworCWkgPSBsZW47CisJd2hpbGUgKC0taSA+PSAwKSB7CisJCSpwKysgPSByZWcrKzsKKwkJKnArKyA9ICpidWZmZXIrKzsKKwl9CisJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LAorCQkJdXNiX3NuZGN0cmxwaXBlKGdzcGNhX2Rldi0+ZGV2LCAwKSwKKwkJCTAsCisJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCisJCQkweDAxLCAwLAorCQkJdG1wYnVmLCBsZW4gKiAyLCA1MDApOworCWlmIChsZW4gKiAyID4gVVNCX0JVRl9TWikKKwkJa2ZyZWUodG1wYnVmKTsKK30KKwogLyogUmVwb3J0ZWQgYXMgT002ODAyKi8KIHN0YXRpYyB2b2lkIG9tNjgwMl9zZW5zb3JfaW5pdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJaW50IGk7Ci0JY29uc3QgX191OCAqcDsKLQlfX3U4IGJ5dGU7Ci0JX191OCB2YWxbNl0gPSB7MHg2MiwgMCwgMHg2NCwgMCwgMHg2MCwgMHgwNX07Ci0Jc3RhdGljIGNvbnN0IF9fdTggc2Vuc29yX2luaXRbXSA9IHsKKwljb25zdCB1OCAqcDsKKwl1OCBieXRlOworCXU4IHZhbFs2XSA9IHsweDYyLCAwLCAweDY0LCAwLCAweDYwLCAweDA1fTsKKwlzdGF0aWMgY29uc3QgdTggc2Vuc29yX2luaXRbXSA9IHsKIAkJMHhkZiwgMHg2ZCwKIAkJMHhkZCwgMHgxOCwKIAkJMHg1YSwgMHhlMCwKQEAgLTQ5Nyw3ICs0OTUsNyBAQAogCX07CiAKIAlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfcmVzZXQsIHNpemVvZiBzZW5zb3JfcmVzZXQpOwotCW1zbGVlcCg1KTsKKwltc2xlZXAoMTAwKTsKIAlpID0gNDsKIAl3aGlsZSAoLS1pID4gMCkgewogCQlieXRlID0gcmVnX3IoZ3NwY2FfZGV2LCAweDAwNjApOwpAQCAtNTM4LDIwICs1MzYsMjAgQEAKIAlzdHJ1Y3QgY2FtICpjYW07CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDAxOwogCiAJY2FtLT5jYW1fbW9kZSA9IHZnYV9tb2RlX3QxNjsKIAljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmdhX21vZGVfdDE2KTsKIAotCXNkLT5icmlnaHRuZXNzID0gc2RfY3RybHNbU0RfQlJJR0hUTkVTU10ucWN0cmwuZGVmYXVsdF92YWx1ZTsKLQlzZC0+Y29udHJhc3QgPSBzZF9jdHJsc1tTRF9DT05UUkFTVF0ucWN0cmwuZGVmYXVsdF92YWx1ZTsKLQlzZC0+Y29sb3JzID0gc2RfY3RybHNbU0RfQ09MT1JdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKKwlzZC0+Y29udHJhc3QgPSBDT05UUkFTVF9ERUY7CisJc2QtPmNvbG9ycyA9IENPTE9SU19ERUY7CiAJc2QtPmdhbW1hID0gR0FNTUFfREVGOwotCXNkLT5taXJyb3IgPSBzZF9jdHJsc1tTRF9NSVJST1JdLnFjdHJsLmRlZmF1bHRfdmFsdWU7Ci0Jc2QtPmZyZXEgPSBzZF9jdHJsc1tTRF9MSUdIVEZSRVFdLnFjdHJsLmRlZmF1bHRfdmFsdWU7Ci0Jc2QtPndoaXRlYmFsYW5jZSA9IHNkX2N0cmxzW1NEX1dISVRFX0JBTEFOQ0VdLnFjdHJsLmRlZmF1bHRfdmFsdWU7Ci0Jc2QtPnNoYXJwbmVzcyA9IHNkX2N0cmxzW1NEX1NIQVJQTkVTU10ucWN0cmwuZGVmYXVsdF92YWx1ZTsKLQlzZC0+ZWZmZWN0ID0gc2RfY3RybHNbU0RfRUZGRUNUU10ucWN0cmwuZGVmYXVsdF92YWx1ZTsKKwlzZC0+YXV0b2dhaW4gPSBBVVRPR0FJTl9ERUY7CisJc2QtPm1pcnJvciA9IE1JUlJPUl9ERUY7CisJc2QtPmZyZXEgPSBGUkVRX0RFRjsKKwlzZC0+d2hpdGViYWxhbmNlID0gV0hJVEVfQkFMQU5DRV9ERUY7CisJc2QtPnNoYXJwbmVzcyA9IFNIQVJQTkVTU19ERUY7CisJc2QtPmVmZmVjdCA9IEVGRkVDVFNfREVGOwogCXJldHVybiAwOwogfQogCkBAIC01NTksNyArNTU3LDcgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJdW5zaWduZWQgaW50IGJyaWdodG5lc3M7Ci0JX191OCBzZXQ2WzRdID0geyAweDhmLCAweDI0LCAweGMzLCAweDAwIH07CisJdTggc2V0Nls0XSA9IHsgMHg4ZiwgMHgyNCwgMHhjMywgMHgwMCB9OwogCiAJYnJpZ2h0bmVzcyA9IHNkLT5icmlnaHRuZXNzOwogCWlmIChicmlnaHRuZXNzIDwgNykgewpAQCAtNTc2LDcgKzU3NCw3IEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXVuc2lnbmVkIGludCBjb250cmFzdCA9IHNkLT5jb250cmFzdDsKLQlfX3UxNiByZWdfdG9fd3JpdGU7CisJdTE2IHJlZ190b193cml0ZTsKIAogCWlmIChjb250cmFzdCA8IDcpCiAJCXJlZ190b193cml0ZSA9IDB4OGVhOSAtIGNvbnRyYXN0ICogMHgyMDA7CkBAIC01ODksNyArNTg3LDcgQEAKIHN0YXRpYyB2b2lkIHNldGNvbG9ycyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCV9fdTE2IHJlZ190b193cml0ZTsKKwl1MTYgcmVnX3RvX3dyaXRlOwogCiAJcmVnX3RvX3dyaXRlID0gMHg4MGJiICsgc2QtPmNvbG9ycyAqIDB4MTAwOwkvKiB3YXMgMHhjMCAqLwogCXJlZ193KGdzcGNhX2RldiwgcmVnX3RvX3dyaXRlKTsKQEAgLTYwMCwxNCArNTk4LDE1IEBACiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCiAJUERFQlVHKERfQ09ORiwgIkdhbW1hOiAlZCIsIHNkLT5nYW1tYSk7Ci0JcmVnX3dfYnVmKGdzcGNhX2RldiwgZ2FtbWFfdGFibGVbc2QtPmdhbW1hXSwgc2l6ZW9mIGdhbW1hX3RhYmxlWzBdKTsKKwlyZWdfd19peGJ1Zihnc3BjYV9kZXYsIDB4OTAsCisJCWdhbW1hX3RhYmxlW3NkLT5nYW1tYV0sIHNpemVvZiBnYW1tYV90YWJsZVswXSk7CiB9CiAKIHN0YXRpYyB2b2lkIHNldHdoaXRlYmFsYW5jZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JX191OCB3aGl0ZV9iYWxhbmNlWzhdID0KKwl1OCB3aGl0ZV9iYWxhbmNlWzhdID0KIAkJezB4ODcsIDB4MjAsIDB4ODgsIDB4MjAsIDB4ODksIDB4MjAsIDB4ODAsIDB4Mzh9OwogCiAJaWYgKHNkLT53aGl0ZWJhbGFuY2UpCkBAIC02MTksNyArNjE4LDcgQEAKIHN0YXRpYyB2b2lkIHNldHNoYXJwbmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCV9fdTE2IHJlZ190b193cml0ZTsKKwl1MTYgcmVnX3RvX3dyaXRlOwogCiAJcmVnX3RvX3dyaXRlID0gMHgwYWE2ICsgMHgxMDAwICogc2QtPnNoYXJwbmVzczsKIApAQCAtNjM1LDE4ICs2MzQsMjIgQEAKIAkgKiB0byBzZWUgdGhlIGluaXRpYWwgcGFyYW1ldGVycy4qLwogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlpbnQgaTsKLQlfX3U4IGJ5dGUsIHRlc3RfYnl0ZTsKKwl1MTYgc2Vuc29yX2lkOworCXU4IHRlc3RfYnl0ZSA9IDA7CisJdTE2IHJlZzgwLCByZWc4ZTsKIAotCXN0YXRpYyBjb25zdCBfX3U4IHJlYWRfaW5kZXhzW10gPQotCQl7IDB4MDYsIDB4MDcsIDB4MGEsIDB4MGIsIDB4NjYsIDB4ODAsIDB4ODEsIDB4OGUsIDB4OGYsIDB4YTUsCi0JCSAgMHhhNiwgMHhhOCwgMHhiYiwgMHhiYywgMHhjNiwgMHgwMCwgMHgwMCB9OwotCXN0YXRpYyBjb25zdCBfX3U4IG4xW10gPQorCXN0YXRpYyBjb25zdCB1OCByZWFkX2luZGV4c1tdID0KKwkJeyAweDBhLCAweDBiLCAweDY2LCAweDgwLCAweDgxLCAweDhlLCAweDhmLCAweGE1LAorCQkgIDB4YTYsIDB4YTgsIDB4YmIsIDB4YmMsIDB4YzYsIDB4MDAgfTsKKwlzdGF0aWMgY29uc3QgdTggbjFbXSA9CiAJCQl7MHgwOCwgMHgwMywgMHgwOSwgMHgwMywgMHgxMiwgMHgwNH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggbjJbXSA9CisJc3RhdGljIGNvbnN0IHU4IG4yW10gPQogCQkJezB4MDgsIDB4MDB9OwotCXN0YXRpYyBjb25zdCBfX3U4IG4zW10gPQorCXN0YXRpYyBjb25zdCB1OCBuM1s2XSA9CiAJCQl7MHg2MSwgMHg2OCwgMHg2NSwgMHgwYSwgMHg2MCwgMHgwNH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggbjRbXSA9CisJc3RhdGljIGNvbnN0IHU4IG4zX290aGVyWzZdID0KKwkJCXsweDYxLCAweGMyLCAweDY1LCAweDg4LCAweDYwLCAweDAwfTsKKwlzdGF0aWMgY29uc3QgdTggbjRbXSA9CiAJCXsweDA5LCAweDAxLCAweDEyLCAweDA0LCAweDY2LCAweDhhLCAweDgwLCAweDNjLAogCQkgMHg4MSwgMHgyMiwgMHg4NCwgMHg1MCwgMHg4YSwgMHg3OCwgMHg4YiwgMHg2OCwKIAkJIDB4OGMsIDB4ODgsIDB4OGUsIDB4MzMsIDB4OGYsIDB4MjQsIDB4YWEsIDB4YjEsCkBAIC02NTYsNDAgKzY1OSw2MSBAQAogCQkgMHg2NSwgMHgwYSwgMHhiYiwgMHg4NiwgMHhhZiwgMHg1OCwgMHhiMCwgMHg2OCwKIAkJIDB4ODcsIDB4NDAsIDB4ODksIDB4MmIsIDB4OGQsIDB4ZmYsIDB4ODMsIDB4NDAsCiAJCSAweGFjLCAweDg0LCAweGFkLCAweDg2LCAweGFmLCAweDQ2fTsKLQlzdGF0aWMgY29uc3QgX191OCBuc2V0OVs0XSA9Ci0JCQl7IDB4MGIsIDB4MDQsIDB4MGEsIDB4NzggfTsKLQlzdGF0aWMgY29uc3QgX191OCBuc2V0OFs2XSA9CisJc3RhdGljIGNvbnN0IHU4IG40X290aGVyW10gPQorCQl7MHg2NiwgMHgwMCwgMHg3ZiwgMHgwMCwgMHg4MCwgMHhhYywgMHg4MSwgMHg2OSwKKwkJIDB4ODQsIDB4NDAsIDB4ODUsIDB4NzAsIDB4ODYsIDB4MjAsIDB4OGEsIDB4NjgsCisJCSAweDhiLCAweDU4LCAweDhjLCAweDg4LCAweDhkLCAweGZmLCAweDhlLCAweGI4LAorCQkgMHg4ZiwgMHgyOCwgMHhhMiwgMHg2MCwgMHhhNSwgMHg0MCwgMHhhOCwgMHhhOCwKKwkJIDB4YWMsIDB4ODQsIDB4YWQsIDB4ODQsIDB4YWUsIDB4MjQsIDB4YWYsIDB4NTYsCisJCSAweGIwLCAweDY4LCAweGIxLCAweDAwLCAweGIyLCAweDg4LCAweGJiLCAweGM1LAorCQkgMHhiYywgMHg0YSwgMHhiZSwgMHgzNiwgMHhjMiwgMHg4OCwgMHhjNSwgMHhjMCwKKwkJIDB4YzYsIDB4ZGEsIDB4ZTksIDB4MjYsIDB4ZWIsIDB4MDB9OworCXN0YXRpYyBjb25zdCB1OCBuc2V0OFs2XSA9CiAJCQl7IDB4YTgsIDB4ZjAsIDB4YzYsIDB4ODgsIDB4YzAsIDB4MDAgfTsKKwlzdGF0aWMgY29uc3QgdTggbnNldDhfb3RoZXJbNl0gPQorCQkJeyAweGE4LCAweGE4LCAweGM2LCAweGRhLCAweGMwLCAweDAwIH07CisJc3RhdGljIGNvbnN0IHU4IG5zZXQ5WzRdID0KKwkJCXsgMHgwYiwgMHgwNCwgMHgwYSwgMHg3OCB9OworCXN0YXRpYyBjb25zdCB1OCBuc2V0OV9vdGhlcls0XSA9CisJCQl7IDB4MGIsIDB4MDQsIDB4MGEsIDB4MDAgfTsKIAotCWJ5dGUgPSByZWdfcihnc3BjYV9kZXYsIDB4MDYpOwotCXRlc3RfYnl0ZSA9IHJlZ19yKGdzcGNhX2RldiwgMHgwNyk7Ci0JaWYgKGJ5dGUgPT0gMHgwOCAmJiB0ZXN0X2J5dGUgPT0gMHgwNykgewotCQlQREVCVUcoRF9DT05GLCAic2Vuc29yIG9tNjgwMiIpOworCXNlbnNvcl9pZCA9IChyZWdfcihnc3BjYV9kZXYsIDB4MDYpIDw8IDgpCisJCQl8IHJlZ19yKGdzcGNhX2RldiwgMHgwNyk7CisJc3dpdGNoIChzZW5zb3JfaWQgJiAweGZmMGYpIHsKKwljYXNlIDB4MDgwMToKKwkJUERFQlVHKERfUFJPQkUsICJzZW5zb3IgdGFzNTEzMGEiKTsKKwkJc2QtPnNlbnNvciA9IFNFTlNPUl9UQVM1MTMwQTsKKwkJYnJlYWs7CisJY2FzZSAweDA4MDM6CisJCVBERUJVRyhEX1BST0JFLCAic2Vuc29yICdvdGhlciciKTsKKwkJc2QtPnNlbnNvciA9IFNFTlNPUl9PVEhFUjsKKwkJYnJlYWs7CisJY2FzZSAweDA4MDc6CisJCVBERUJVRyhEX1BST0JFLCAic2Vuc29yIG9tNjgwMiIpOwogCQlzZC0+c2Vuc29yID0gU0VOU09SX09NNjgwMjsKLQl9IGVsc2UgaWYgKGJ5dGUgPT0gMHgwOCAmJiB0ZXN0X2J5dGUgPT0gMHgwMSkgewotCQlQREVCVUcoRF9DT05GLCAic2Vuc29yIHRhczUxMzBhIik7Ci0JCXNkLT5zZW5zb3IgPSBTRU5TT1JfVEFTNTEzMEE7Ci0JfSBlbHNlIHsKLQkJUERFQlVHKERfQ09ORiwgInVua25vd24gc2Vuc29yICUwMnggJTAyeCIsIGJ5dGUsIHRlc3RfYnl0ZSk7Ci0JCXNkLT5zZW5zb3IgPSBTRU5TT1JfVEFTNTEzMEE7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCVBERUJVRyhEX0VSUnxEX1BST0JFLCAidW5rbm93biBzZW5zb3IgJTA0eCIsIHNlbnNvcl9pZCk7CisJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXJlZ193X2J1Zihnc3BjYV9kZXYsIG4xLCBzaXplb2YgbjEpOwotCXRlc3RfYnl0ZSA9IDA7Ci0JaSA9IDU7Ci0Jd2hpbGUgKC0taSA+PSAwKSB7Ci0JCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9yZXNldCwgc2l6ZW9mIHNlbnNvcl9yZXNldCk7Ci0JCXRlc3RfYnl0ZSA9IHJlZ19yKGdzcGNhX2RldiwgMHgwMDYzKTsKLQkJbXNsZWVwKDEwMCk7Ci0JCWlmICh0ZXN0X2J5dGUgPT0gMHgxNykKLQkJCWJyZWFrOwkJLyogT0sgKi8KLQl9Ci0JaWYgKGkgPCAwKSB7Ci0JCWVycigiQmFkIHNlbnNvciByZXNldCAlMDJ4IiwgdGVzdF9ieXRlKTsKLS8qCQlyZXR1cm4gLUVJTzsgKi8KKwlpZiAoc2QtPnNlbnNvciAhPSBTRU5TT1JfT1RIRVIpIHsKKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgbjEsIHNpemVvZiBuMSk7CisJCWkgPSA1OworCQl3aGlsZSAoLS1pID49IDApIHsKKwkJCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9yZXNldCwgc2l6ZW9mIHNlbnNvcl9yZXNldCk7CisJCQl0ZXN0X2J5dGUgPSByZWdfcihnc3BjYV9kZXYsIDB4MDA2Myk7CisJCQltc2xlZXAoMTAwKTsKKwkJCWlmICh0ZXN0X2J5dGUgPT0gMHgxNykKKwkJCQlicmVhazsJCS8qIE9LICovCisJCX0KKwkJaWYgKGkgPCAwKSB7CisJCQllcnIoIkJhZCBzZW5zb3IgcmVzZXQgJTAyeCIsIHRlc3RfYnl0ZSk7CisvKgkJCXJldHVybiAtRUlPOyAqLwogLypmaXhtZTogdGVzdCAtIGNvbnRpbnVlICovCisJCX0KKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgbjIsIHNpemVvZiBuMik7CiAJfQotCXJlZ193X2J1Zihnc3BjYV9kZXYsIG4yLCBzaXplb2YgbjIpOwogCiAJaSA9IDA7CiAJd2hpbGUgKHJlYWRfaW5kZXhzW2ldICE9IDB4MDApIHsKQEAgLTY5OSwyMSArNzIzLDMxIEBACiAJCWkrKzsKIAl9CiAKLQlyZWdfd19idWYoZ3NwY2FfZGV2LCBuMywgc2l6ZW9mIG4zKTsKLQlyZWdfd19idWYoZ3NwY2FfZGV2LCBuNCwgc2l6ZW9mIG40KTsKLQlyZWdfcihnc3BjYV9kZXYsIDB4MDA4MCk7Ci0JcmVnX3coZ3NwY2FfZGV2LCAweDJjODApOworCWlmIChzZC0+c2Vuc29yICE9IFNFTlNPUl9PVEhFUikgeworCQlyZWdfd19idWYoZ3NwY2FfZGV2LCBuMywgc2l6ZW9mIG4zKTsKKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgbjQsIHNpemVvZiBuNCk7CisJCXJlZ19yKGdzcGNhX2RldiwgMHgwMDgwKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDJjODApOworCQlyZWc4MCA9IDB4Mzg4MDsKKwkJcmVnOGUgPSAweDMzOGU7CisJfSBlbHNlIHsKKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgbjNfb3RoZXIsIHNpemVvZiBuM19vdGhlcik7CisJCXJlZ193X2J1Zihnc3BjYV9kZXYsIG40X290aGVyLCBzaXplb2YgbjRfb3RoZXIpOworCQlzZC0+Z2FtbWEgPSA1OworCQlyZWc4MCA9IDB4YWM4MDsKKwkJcmVnOGUgPSAweGI4OGU7CisJfQogCi0JcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTEsCisJcmVnX3dfaXhidWYoZ3NwY2FfZGV2LCAweGQwLCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMSwKIAkJCXNpemVvZiBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMSk7Ci0JcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTMsCi0JCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTMpOwotCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEyLAorCXJlZ193X2l4YnVmKGdzcGNhX2RldiwgMHhjNywgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTIsCisJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTIpOworCXJlZ193X2l4YnVmKGdzcGNhX2RldiwgMHhlMCwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTIsCiAJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTIpOwogCi0JcmVnX3coZ3NwY2FfZGV2LCAweDM4ODApOwotCXJlZ193KGdzcGNhX2RldiwgMHgzODgwKTsKLQlyZWdfdyhnc3BjYV9kZXYsIDB4MzM4ZSk7CisJcmVnX3coZ3NwY2FfZGV2LCByZWc4MCk7CisJcmVnX3coZ3NwY2FfZGV2LCByZWc4MCk7CisJcmVnX3coZ3NwY2FfZGV2LCByZWc4ZSk7CiAKIAlzZXRicmlnaHRuZXNzKGdzcGNhX2Rldik7CiAJc2V0Y29udHJhc3QoZ3NwY2FfZGV2KTsKQEAgLTczMCwxNiArNzY0LDIwIEBACiAJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTQpOwogCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGE1LAogCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGE1KTsKLQlyZWdfd19idWYoZ3NwY2FfZGV2LCBuc2V0OCwgc2l6ZW9mIG5zZXQ4KTsKLQlyZWdfd19idWYoZ3NwY2FfZGV2LCBuc2V0OSwgc2l6ZW9mIG5zZXQ5KTsKKwlpZiAoc2QtPnNlbnNvciAhPSBTRU5TT1JfT1RIRVIpIHsKKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgbnNldDgsIHNpemVvZiBuc2V0OCk7CisJCXJlZ193X2J1Zihnc3BjYV9kZXYsIG5zZXQ5LCBzaXplb2YgbnNldDkpOworCQlyZWdfdyhnc3BjYV9kZXYsIDB4Mjg4MCk7CisJfSBlbHNlIHsKKwkJcmVnX3dfYnVmKGdzcGNhX2RldiwgbnNldDhfb3RoZXIsIHNpemVvZiBuc2V0OF9vdGhlcik7CisJCXJlZ193X2J1Zihnc3BjYV9kZXYsIG5zZXQ5X290aGVyLCBzaXplb2YgbnNldDlfb3RoZXIpOworCX0KIAotCXJlZ193KGdzcGNhX2RldiwgMHgyODgwKTsKLQotCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGExLAorCXJlZ193X2l4YnVmKGdzcGNhX2RldiwgMHhkMCwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTEsCiAJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTEpOwotCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEzLAotCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEzKTsKLQlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5kYXRhMiwKKwlyZWdfd19peGJ1Zihnc3BjYV9kZXYsIDB4YzcsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEyLAorCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEyKTsKKwlyZWdfd19peGJ1Zihnc3BjYV9kZXYsIDB4ZTAsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEyLAogCQkJc2l6ZW9mIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLmRhdGEyKTsKIAogCXJldHVybiAwOwpAQCAtNzQ4LDcgKzc4Niw3IEBACiBzdGF0aWMgdm9pZCBzZXRmbGlwKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JX191OCBmbGlwY21kWzhdID0KKwl1OCBmbGlwY21kWzhdID0KIAkJezB4NjIsIDB4MDcsIDB4NjMsIDB4MDMsIDB4NjQsIDB4MDAsIDB4NjAsIDB4MDl9OwogCiAJaWYgKHNkLT5taXJyb3IpCkBAIC03NzgsNyArODE2LDcgQEAKIHN0YXRpYyB2b2lkIHNldGxpZ2h0ZnJlcShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwotCV9fdTggZnJlcVs0XSA9IHsgMHg2NiwgMHg0MCwgMHhhOCwgMHhlOCB9OworCXU4IGZyZXFbNF0gPSB7IDB4NjYsIDB4NDAsIDB4YTgsIDB4ZTggfTsKIAogCWlmIChzZC0+ZnJlcSA9PSAyKQkvKiA2MGh6ICovCiAJCWZyZXFbMV0gPSAweDAwOwpAQCAtNzkxLDIyICs4MjksMjIgQEAKIHN0YXRpYyB2b2lkIHBvbGxfc2Vuc29yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0Jc3RhdGljIGNvbnN0IF9fdTggcG9sbDFbXSA9CisJc3RhdGljIGNvbnN0IHU4IHBvbGwxW10gPQogCQl7MHg2NywgMHgwNSwgMHg2OCwgMHg4MSwgMHg2OSwgMHg4MCwgMHg2YSwgMHg4MiwKIAkJIDB4NmIsIDB4NjgsIDB4NmMsIDB4NjksIDB4NzIsIDB4ZDksIDB4NzMsIDB4MzQsCiAJCSAweDc0LCAweDMyLCAweDc1LCAweDkyLCAweDc2LCAweDAwLCAweDA5LCAweDAxLAogCQkgMHg2MCwgMHgxNH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggcG9sbDJbXSA9CisJc3RhdGljIGNvbnN0IHU4IHBvbGwyW10gPQogCQl7MHg2NywgMHgwMiwgMHg2OCwgMHg3MSwgMHg2OSwgMHg3MiwgMHg3MiwgMHhhOSwKIAkJIDB4NzMsIDB4MDIsIDB4NzMsIDB4MDIsIDB4NjAsIDB4MTR9OwotCXN0YXRpYyBjb25zdCBfX3U4IHBvbGwzW10gPQorCXN0YXRpYyBjb25zdCB1OCBwb2xsM1tdID0KIAkJezB4ODcsIDB4M2YsIDB4ODgsIDB4MjAsIDB4ODksIDB4MmR9OwotCXN0YXRpYyBjb25zdCBfX3U4IHBvbGw0W10gPQorCXN0YXRpYyBjb25zdCB1OCBwb2xsNFtdID0KIAkJezB4YTYsIDB4MGEsIDB4ZWEsIDB4Y2YsIDB4YmUsIDB4MjYsIDB4YjEsIDB4NWYsCiAJCSAweGExLCAweGIxLCAweGRhLCAweDZiLCAweGRiLCAweDk4LCAweGRmLCAweDBjLAogCQkgMHhjMiwgMHg4MCwgMHhjMywgMHgxMH07CiAKLQlpZiAoc2QtPnNlbnNvciAhPSBTRU5TT1JfVEFTNTEzMEEpIHsKKwlpZiAoc2QtPnNlbnNvciA9PSBTRU5TT1JfT002ODAyKSB7CiAJCVBERUJVRyhEX1NUUkVBTSwgIltTZW5zb3IgcmVxdWlyZXMgcG9sbGluZ10iKTsKIAkJcmVnX3dfYnVmKGdzcGNhX2RldiwgcG9sbDEsIHNpemVvZiBwb2xsMSk7CiAJCXJlZ193X2J1Zihnc3BjYV9kZXYsIHBvbGwyLCBzaXplb2YgcG9sbDIpOwpAQCAtODE5LDEzICs4NTcsMTQgQEAKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGksIG1vZGU7Ci0JX191OCB0MltdID0geyAweDA3LCAweDAwLCAweDBkLCAweDYwLCAweDBlLCAweDgwIH07Ci0Jc3RhdGljIGNvbnN0IF9fdTggdDNbXSA9Ci0JCXsgMHhiMywgMHgwNywgMHhiNCwgMHgwMCwgMHhiNSwgMHg4OCwgMHhiNiwgMHgwMiwgMHhiNywgMHgwNiwKLQkJICAweGI4LCAweDAwLCAweGI5LCAweGU3LCAweGJhLCAweDAxIH07CisJdTggdDJbXSA9IHsgMHgwNywgMHgwMCwgMHgwZCwgMHg2MCwgMHgwZSwgMHg4MCB9OworCXN0YXRpYyBjb25zdCB1OCB0M1tdID0KKwkJeyAweDA3LCAweDAwLCAweDg4LCAweDAyLCAweDA2LCAweDAwLCAweGU3LCAweDAxIH07CiAKIAltb2RlID0gZ3NwY2FfZGV2LT5jYW0uY2FtX21vZGVbKGludCkgZ3NwY2FfZGV2LT5jdXJyX21vZGVdLiBwcml2OwogCXN3aXRjaCAobW9kZSkgeworCWNhc2UgMDoJCS8qIDY0MHg0ODAgKDB4MDApICovCisJCWJyZWFrOwogCWNhc2UgMToJCS8qIDM1MngyODggKi8KIAkJdDJbMV0gPSAweDQwOwogCQlicmVhazsKQEAgLTgzNSwxNCArODc0LDIwIEBACiAJY2FzZSAzOgkJLyogMTc2eDE0NCAqLwogCQl0MlsxXSA9IDB4NTA7CiAJCWJyZWFrOwotCWNhc2UgNDoJCS8qIDE2MHgxMjAgKi8KKwlkZWZhdWx0OgorLyoJY2FzZSA0OgkJICogMTYweDEyMCAqLwogCQl0MlsxXSA9IDB4MjA7CiAJCWJyZWFrOwotCWRlZmF1bHQ6CS8qIDY0MHg0ODAgKDB4MDApICovCi0JCWJyZWFrOwogCX0KIAotCWlmIChzZC0+c2Vuc29yID09IFNFTlNPUl9UQVM1MTMwQSkgeworCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX09NNjgwMjoKKwkJb202ODAyX3NlbnNvcl9pbml0KGdzcGNhX2Rldik7CisJCWJyZWFrOworCWNhc2UgU0VOU09SX09USEVSOgorCQlicmVhazsKKwlkZWZhdWx0OgorLyoJY2FzZSBTRU5TT1JfVEFTNTEzMEE6ICovCiAJCWkgPSAwOwogCQl3aGlsZSAodGFzNTEzMGFfc2Vuc29yX2luaXRbaV1bMF0gIT0gMCkgewogCQkJcmVnX3dfYnVmKGdzcGNhX2RldiwgdGFzNTEzMGFfc2Vuc29yX2luaXRbaV0sCkBAIC04NTQsMTQgKzg5OSwxMyBAQAogCQlyZWdfd19idWYoZ3NwY2FfZGV2LCB0YXM1MTMwYV9zZW5zb3JfaW5pdFszXSwKIAkJCQkgc2l6ZW9mIHRhczUxMzBhX3NlbnNvcl9pbml0WzBdKTsKIAkJcmVnX3coZ3NwY2FfZGV2LCAweDNjODApOwotCX0gZWxzZSB7Ci0JCW9tNjgwMl9zZW5zb3JfaW5pdChnc3BjYV9kZXYpOworCQlicmVhazsKIAl9CiAJcmVnX3dfYnVmKGdzcGNhX2Rldiwgc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTQsCiAJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uZGF0YTQpOwogCXJlZ19yKGdzcGNhX2RldiwgMHgwMDEyKTsKIAlyZWdfd19idWYoZ3NwY2FfZGV2LCB0Miwgc2l6ZW9mIHQyKTsKLQlyZWdfd19idWYoZ3NwY2FfZGV2LCB0Mywgc2l6ZW9mIHQzKTsKKwlyZWdfd19peGJ1Zihnc3BjYV9kZXYsIDB4YjMsIHQzLCBzaXplb2YgdDMpOwogCXJlZ193KGdzcGNhX2RldiwgMHgwMDEzKTsKIAltc2xlZXAoMTUpOwogCXJlZ193X2J1Zihnc3BjYV9kZXYsIHNlbnNvcl9kYXRhW3NkLT5zZW5zb3JdLnN0cmVhbSwKQEAgLTg4NSwxNiArOTI5LDE4IEBACiAJbXNsZWVwKDIwKTsKIAlyZWdfd19idWYoZ3NwY2FfZGV2LCBzZW5zb3JfZGF0YVtzZC0+c2Vuc29yXS5zdHJlYW0sCiAJCQlzaXplb2Ygc2Vuc29yX2RhdGFbc2QtPnNlbnNvcl0uc3RyZWFtKTsKLQltc2xlZXAoMjApOwotCXJlZ193KGdzcGNhX2RldiwgMHgwMzA5KTsKKwlpZiAoc2QtPnNlbnNvciAhPSBTRU5TT1JfT1RIRVIpIHsKKwkJbXNsZWVwKDIwKTsKKwkJcmVnX3coZ3NwY2FfZGV2LCAweDAzMDkpOworCX0KIH0KIAogc3RhdGljIHZvaWQgc2RfcGt0X3NjYW4oc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAogCQkJc3RydWN0IGdzcGNhX2ZyYW1lICpmcmFtZSwJLyogdGFyZ2V0ICovCi0JCQlfX3U4ICpkYXRhLAkJCS8qIGlzb2MgcGFja2V0ICovCisJCQl1OCAqZGF0YSwJCQkvKiBpc29jIHBhY2tldCAqLwogCQkJaW50IGxlbikJCQkvKiBpc28gcGFja2V0IGxlbmd0aCAqLwogewotCXN0YXRpYyBfX3U4IGZmZDlbXSA9IHsgMHhmZiwgMHhkOSB9OworCXN0YXRpYyB1OCBmZmQ5W10gPSB7IDB4ZmYsIDB4ZDkgfTsKIAogCWlmIChkYXRhWzBdID09IDB4NWEpIHsKIAkJLyogQ29udHJvbCBQYWNrZXQsIGFmdGVyIHRoaXMgY2FtZSB0aGUgaGVhZGVyIGFnYWluLApAQCAtMTE3Miw4ICsxMjE4LDEwIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKwlyZXQgPSB1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcik7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CiAJUERFQlVHKERfUFJPQkUsICJyZWdpc3RlcmVkIik7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3R2ODUzMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS90djg1MzIuYwppbmRleCA5NDE2M2NjLi45ZjI0M2Q3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3R2ODUzMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdHY4NTMyLmMKQEAgLTMxLDcgKzMxLDYgQEAKIAlzdHJ1Y3QgZ3NwY2FfZGV2IGdzcGNhX2RldjsJLyogISEgbXVzdCBiZSB0aGUgZmlyc3QgaXRlbSAqLwogCiAJX191MTYgYnJpZ2h0bmVzczsKLQlfX3UxNiBjb250cmFzdDsKIAogCV9fdTggcGFja2V0OwogfTsKQEAgLTM5LDM4ICszOCwyMiBAQAogLyogVjRMMiBjb250cm9scyBzdXBwb3J0ZWQgYnkgdGhlIGRyaXZlciAqLwogc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKTsKIHN0YXRpYyBpbnQgc2RfZ2V0YnJpZ2h0bmVzcyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyICp2YWwpOwotc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCk7Ci1zdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCk7CiAKIHN0YXRpYyBzdHJ1Y3QgY3RybCBzZF9jdHJsc1tdID0gewotI2RlZmluZSBTRF9CUklHSFRORVNTIDAKIAl7CiAJIHsKIAkgIC5pZCA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCiAJICAudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJICAubmFtZSA9ICJCcmlnaHRuZXNzIiwKIAkgIC5taW5pbXVtID0gMSwKLQkgIC5tYXhpbXVtID0gMHgyZmYsCisJICAubWF4aW11bSA9IDB4MTVmLAkvKiA9IDM1MiAtIDEgKi8KIAkgIC5zdGVwID0gMSwKLQkgIC5kZWZhdWx0X3ZhbHVlID0gMHgxOGYsCisjZGVmaW5lIEJSSUdIVE5FU1NfREVGIDB4MTRjCisJICAuZGVmYXVsdF92YWx1ZSA9IEJSSUdIVE5FU1NfREVGLAogCSAgfSwKIAkgLnNldCA9IHNkX3NldGJyaWdodG5lc3MsCiAJIC5nZXQgPSBzZF9nZXRicmlnaHRuZXNzLAogCSB9LAotI2RlZmluZSBTRF9DT05UUkFTVCAxCi0JewotCSB7Ci0JICAuaWQgPSBWNEwyX0NJRF9DT05UUkFTVCwKLQkgIC50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkgIC5uYW1lID0gIkNvbnRyYXN0IiwKLQkgIC5taW5pbXVtID0gMCwKLQkgIC5tYXhpbXVtID0gMHhmZmZmLAotCSAgLnN0ZXAgPSAxLAotCSAgLmRlZmF1bHRfdmFsdWUgPSAweDdmZmYsCi0JICB9LAotCSAuc2V0ID0gc2Rfc2V0Y29udHJhc3QsCi0JIC5nZXQgPSBzZF9nZXRjb250cmFzdCwKLQkgfSwKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0IHNpZl9tb2RlW10gPSB7CkBAIC04Niw3OCArNjksNjQgQEAKIAkJLnByaXYgPSAwfSwKIH07CiAKLS8qCi0gKiBJbml0aWFsaXphdGlvbiBkYXRhOiB0aGlzIGlzIHRoZSBmaXJzdCBzZXQtdXAgZGF0YSB3cml0dGVuIHRvIHRoZQotICogZGV2aWNlIChiZWZvcmUgdGhlIG9wZW4gZGF0YSkuCi0gKi8KLSNkZWZpbmUgVEVTVENMSyAweDEwCQkvKiByZWcgMHgyYyAtPiAweDEyIC8vMTAgKi8KLSNkZWZpbmUgVEVTVENPTVAgMHg5MAkJLyogcmVnIDB4MjggLT4gMHg4MCAqLwotI2RlZmluZSBURVNUTElORSAweDgxCQkvKiByZWcgMHgyOSAtPiAweDgxICovCi0jZGVmaW5lIFFDSUZMSU5FIDB4NDEJCS8qIHJlZyAweDI5IC0+IDB4ODEgKi8KLSNkZWZpbmUgVEVTVFBUTCAweDE0CQkvKiByZWcgMHgyRCAtPiAweDE0ICovCi0jZGVmaW5lIFRFU1RQVEggMHgwMQkJLyogcmVnIDB4MkUgLT4gMHgwMSAqLwotI2RlZmluZSBURVNUUFRCTCAweDEyCQkvKiByZWcgMHgyRiAtPiAweDBhICovCi0jZGVmaW5lIFRFU1RQVEJIIDB4MDEJCS8qIHJlZyAweDMwIC0+IDB4MDEgKi8KLSNkZWZpbmUgQURXSURUSEwgMHhlOAkJLyogcmVnIDB4MGMgLT4gMHhlOCAqLwotI2RlZmluZSBBRFdJRFRISCAweDAzCQkvKiByZWcgMHgwZCAtPiAweDAzICovCi0jZGVmaW5lIEFESEVJR0hMIDB4OTAJCS8qIHJlZyAweDBlIC0+IDB4OTEgLy85MyAqLwotI2RlZmluZSBBREhFSUdISCAweDAxCQkvKiByZWcgMHgwZiAtPiAweDAxICovCi0jZGVmaW5lIEVYUE9MIDB4OGYJCS8qIHJlZyAweDFjIC0+IDB4OGYgKi8KLSNkZWZpbmUgRVhQT0ggMHgwMQkJLyogcmVnIDB4MWQgLT4gMHgwMSAqLwotI2RlZmluZSBBRENCRUdJTkwgMHg0NAkJLyogcmVnIDB4MTAgLT4gMHg0NiAvLzQ3ICovCi0jZGVmaW5lIEFEQ0JFR0lOSCAweDAwCQkvKiByZWcgMHgxMSAtPiAweDAwICovCi0jZGVmaW5lIEFEUkJFR0lOTCAweDBhCQkvKiByZWcgMHgxNCAtPiAweDBiIC8vMHgwYyAqLwotI2RlZmluZSBBRFJCRUdJTkggMHgwMAkJLyogcmVnIDB4MTUgLT4gMHgwMCAqLwotI2RlZmluZSBUVjg1MzJfQ01EX1VQREFURSAweDg0CisvKiBUVi04NTMyQSAoSUNNNTMyQSkgcmVnaXN0ZXJzIChMRSkgKi8KKyNkZWZpbmUgUjAwX1BBUlRfQ09OVFJPTCAweDAwCisjZGVmaW5lCQlMQVRFTlRfQ0hBTkdFCTB4ODAKKyNkZWZpbmUJCUVYUE9fQ0hBTkdFCTB4MDQKKyNkZWZpbmUgUjAxX1RJTUlOR19DT05UUk9MX0xPVyAweDAxCisjZGVmaW5lCQlDTURfRUVwcm9tX09wZW4gMHgzMAorI2RlZmluZQkJQ01EX0VFcHJvbV9DbG9zZSAweDI5CisjZGVmaW5lIFIwM19UQUJMRV9BRERSIDB4MDMKKyNkZWZpbmUgUjA0X1dUUkFNX0RBVEFfTCAweDA0CisjZGVmaW5lIFIwNV9XVFJBTV9EQVRBX00gMHgwNQorI2RlZmluZSBSMDZfV1RSQU1fREFUQV9IIDB4MDYKKyNkZWZpbmUgUjA3X1RBQkxFX0xFTgkweDA3CisjZGVmaW5lIFIwOF9SQU1fV1JJVEVfQUNUSU9OIDB4MDgKKyNkZWZpbmUgUjBDX0FEX1dJRFRITAkweDBjCisjZGVmaW5lIFIwRF9BRF9XSURUSEgJMHgwZAorI2RlZmluZSBSMEVfQURfSEVJR0hUTAkweDBlCisjZGVmaW5lIFIwRl9BRF9IRUlHSFRICTB4MGYKKyNkZWZpbmUgUjEwX0FEX0NPTF9CRUdJTkwgMHgxMAorI2RlZmluZSBSMTFfQURfQ09MX0JFR0lOSCAweDExCisjZGVmaW5lCQlNSVJST1IJCTB4MDQJLyogWzEwXSAqLworI2RlZmluZSBSMTRfQURfUk9XX0JFR0lOTCAweDE0CisjZGVmaW5lIFIxNV9BRF9ST1dCRUdJTkggIDB4MTUKKyNkZWZpbmUgUjFDX0FEX0VYUE9TRV9USU1FTCAweDFjCisjZGVmaW5lIFIyOF9RVUFOVAkweDI4CisjZGVmaW5lIFIyOV9MSU5FCTB4MjkKKyNkZWZpbmUgUjJDX1BPTEFSSVRZCTB4MmMKKyNkZWZpbmUgUjJEX1BPSU5UCTB4MmQKKyNkZWZpbmUgUjJFX1BPSU5USAkweDJlCisjZGVmaW5lIFIyRl9QT0lOVEIJMHgyZgorI2RlZmluZSBSMzBfUE9JTlRCSAkweDMwCisjZGVmaW5lIFIzMV9VUEQJCTB4MzEKKyNkZWZpbmUgUjJBX0hJR0hfQlVER0VUIDB4MmEKKyNkZWZpbmUgUjJCX0xPV19CVURHRVQJMHgyYgorI2RlZmluZSBSMzRfVklECQkweDM0CisjZGVmaW5lIFIzNV9WSURICTB4MzUKKyNkZWZpbmUgUjM2X1BJRAkJMHgzNgorI2RlZmluZSBSMzdfUElESAkweDM3CisjZGVmaW5lIFIzOV9UZXN0MQkweDM5CQkvKiBHUElPICovCisjZGVmaW5lIFIzQl9UZXN0MwkweDNCCQkvKiBHUElPICovCisjZGVmaW5lIFI4M19BRF9JREgJMHg4MworI2RlZmluZSBSOTFfQURfU0xPUEVSRUcgMHg5MQorI2RlZmluZSBSOTRfQURfQklUQ09OVFJPTCAweDk0CiAKLSNkZWZpbmUgVFY4NTMyX0VFcHJvbV9BZGQgMHgwMwotI2RlZmluZSBUVjg1MzJfRUVwcm9tX0RhdGFMIDB4MDQKLSNkZWZpbmUgVFY4NTMyX0VFcHJvbV9EYXRhTSAweDA1Ci0jZGVmaW5lIFRWODUzMl9FRXByb21fRGF0YUggMHgwNgotI2RlZmluZSBUVjg1MzJfRUVwcm9tX1RhYmxlTGVuZ3RoIDB4MDcKLSNkZWZpbmUgVFY4NTMyX0VFcHJvbV9Xcml0ZSAweDA4Ci0jZGVmaW5lIFRWODUzMl9QQVJUX0NUUkwgMHgwMAotI2RlZmluZSBUVjg1MzJfQ1RSTCAweDAxCi0jZGVmaW5lIFRWODUzMl9DTURfRUVwcm9tX09wZW4gMHgzMAotI2RlZmluZSBUVjg1MzJfQ01EX0VFcHJvbV9DbG9zZSAweDI5Ci0jZGVmaW5lIFRWODUzMl9VRFBfVVBEQVRFIDB4MzEKLSNkZWZpbmUgVFY4NTMyX0dQSU8gMHgzOQotI2RlZmluZSBUVjg1MzJfR1BJT19PRSAweDNCCi0jZGVmaW5lIFRWODUzMl9SRVFfUmVnV3JpdGUgMHgwMgotI2RlZmluZSBUVjg1MzJfUkVRX1JlZ1JlYWQgMHgwMwotCi0jZGVmaW5lIFRWODUzMl9BRFdJRFRIX0wgMHgwQwotI2RlZmluZSBUVjg1MzJfQURXSURUSF9IIDB4MEQKLSNkZWZpbmUgVFY4NTMyX0FESEVJR0hUX0wgMHgwRQotI2RlZmluZSBUVjg1MzJfQURIRUlHSFRfSCAweDBGCi0jZGVmaW5lIFRWODUzMl9FWFBPU1VSRSAweDFDCi0jZGVmaW5lIFRWODUzMl9RVUFOVF9DT01QIDB4MjgKLSNkZWZpbmUgVFY4NTMyX01PREVfUEFDS0VUIDB4MjkKLSNkZWZpbmUgVFY4NTMyX1NFVENMSyAweDJDCi0jZGVmaW5lIFRWODUzMl9QT0lOVF9MIDB4MkQKLSNkZWZpbmUgVFY4NTMyX1BPSU5UX0ggMHgyRQotI2RlZmluZSBUVjg1MzJfUE9JTlRCX0wgMHgyRgotI2RlZmluZSBUVjg1MzJfUE9JTlRCX0ggMHgzMAotI2RlZmluZSBUVjg1MzJfQlVER0VUX0wgMHgyQQotI2RlZmluZSBUVjg1MzJfQlVER0VUX0ggMHgyQgotI2RlZmluZSBUVjg1MzJfVklEX0wgMHgzNAotI2RlZmluZSBUVjg1MzJfVklEX0ggMHgzNQotI2RlZmluZSBUVjg1MzJfUElEX0wgMHgzNgotI2RlZmluZSBUVjg1MzJfUElEX0ggMHgzNwotI2RlZmluZSBUVjg1MzJfRGV2aWNlSUQgMHg4MwotI2RlZmluZSBUVjg1MzJfQURfU0xPUEUgMHg5MQotI2RlZmluZSBUVjg1MzJfQURfQklUQ1RSTCAweDk0Ci0jZGVmaW5lIFRWODUzMl9BRF9DT0xCRUdJTl9MIDB4MTAKLSNkZWZpbmUgVFY4NTMyX0FEX0NPTEJFR0lOX0ggMHgxMQotI2RlZmluZSBUVjg1MzJfQURfUk9XQkVHSU5fTCAweDE0Ci0jZGVmaW5lIFRWODUzMl9BRF9ST1dCRUdJTl9IIDB4MTUKLQotc3RhdGljIGNvbnN0IF9fdTMyIHR2Xzg1MzJfZWVwcm9tX2RhdGFbXSA9IHsKLS8qCWFkZAkJZGF0YUwJICAgZGF0YU0JZGF0YUggKi8KLQkweDAwMDEwMDAxLCAweDAxMDE4MDExLCAweDAyMDUwMDE0LCAweDAzMDUwMDFjLAotCTB4MDQwZDAwMWUsIDB4MDUwNTAwMWYsIDB4MDYwNTA1MTksIDB4MDcwNTAxMWIsCi0JMHgwODA1MDkxZSwgMHgwOTBkODkyZSwgMHgwYTA1ODkyZiwgMHgwYjA1MGRkOSwKLQkweDBjMDUwOWYxLCAwCitzdGF0aWMgY29uc3QgdTggZWVwcm9tX2RhdGFbXVszXSA9IHsKKy8qCWRhdGFIIGRhdGFNIGRhdGFMICovCisJezB4MDEsIDB4MDAsIDB4MDF9LAorCXsweDAxLCAweDgwLCAweDExfSwKKwl7MHgwNSwgMHgwMCwgMHgxNH0sCisJezB4MDUsIDB4MDAsIDB4MWN9LAorCXsweDBkLCAweDAwLCAweDFlfSwKKwl7MHgwNSwgMHgwMCwgMHgxZn0sCisJezB4MDUsIDB4MDUsIDB4MTl9LAorCXsweDA1LCAweDAxLCAweDFifSwKKwl7MHgwNSwgMHgwOSwgMHgxZX0sCisJezB4MGQsIDB4ODksIDB4MmV9LAorCXsweDA1LCAweDg5LCAweDJmfSwKKwl7MHgwNSwgMHgwZCwgMHhkOX0sCisJezB4MDUsIDB4MDksIDB4ZjF9LAogfTsKIAogc3RhdGljIGludCByZWdfcihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCkBAIC0xNjUsNyArMTM0LDcgQEAKIHsKIAl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQl1c2JfcmN2Y3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAotCQkJVFY4NTMyX1JFUV9SZWdSZWFkLAorCQkJMHgwMywKIAkJCVVTQl9ESVJfSU4gfCBVU0JfVFlQRV9WRU5ET1IgfCBVU0JfUkVDSVBfREVWSUNFLAogCQkJMCwJLyogdmFsdWUgKi8KIAkJCWluZGV4LCBnc3BjYV9kZXYtPnVzYl9idWYsIDEsCkBAIC0xNzQsMjcgKzE0MywyNyBAQAogfQogCiAvKiB3cml0ZSAxIGJ5dGUgKi8KLXN0YXRpYyB2b2lkIHJlZ193XzEoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorc3RhdGljIHZvaWQgcmVnX3cxKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJICBfX3UxNiBpbmRleCwgX191OCB2YWx1ZSkKIHsKIAlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSB2YWx1ZTsKIAl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAotCQkJVFY4NTMyX1JFUV9SZWdXcml0ZSwKKwkJCTB4MDIsCiAJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCiAJCQkwLAkvKiB2YWx1ZSAqLwogCQkJaW5kZXgsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMSwgNTAwKTsKIH0KIAogLyogd3JpdGUgMiBieXRlcyAqLwotc3RhdGljIHZvaWQgcmVnX3dfMihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCSAgX191MTYgaW5kZXgsIF9fdTggdmFsMSwgX191OCB2YWwyKQorc3RhdGljIHZvaWQgcmVnX3cyKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKKwkJICB1MTYgaW5kZXgsIHUxNiB2YWx1ZSkKIHsKLQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gPSB2YWwxOwotCWdzcGNhX2Rldi0+dXNiX2J1ZlsxXSA9IHZhbDI7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzBdID0gdmFsdWU7CisJZ3NwY2FfZGV2LT51c2JfYnVmWzFdID0gdmFsdWUgPj4gODsKIAl1c2JfY29udHJvbF9tc2coZ3NwY2FfZGV2LT5kZXYsCiAJCQl1c2Jfc25kY3RybHBpcGUoZ3NwY2FfZGV2LT5kZXYsIDApLAotCQkJVFY4NTMyX1JFUV9SZWdXcml0ZSwKKwkJCTB4MDIsCiAJCQlVU0JfRElSX09VVCB8IFVTQl9UWVBFX1ZFTkRPUiB8IFVTQl9SRUNJUF9ERVZJQ0UsCiAJCQkwLAkvKiB2YWx1ZSAqLwogCQkJaW5kZXgsIGdzcGNhX2Rldi0+dXNiX2J1ZiwgMiwgNTAwKTsKQEAgLTIwMiwzMiArMTcxLDE4IEBACiAKIHN0YXRpYyB2b2lkIHR2Xzg1MzJXcml0ZUVFcHJvbShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0JaW50IGkgPSAwOwotCV9fdTggcmVnLCBkYXRhMCwgZGF0YTEsIGRhdGEyOworCWludCBpOwogCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9HUElPLCAweGIwKTsKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0NUUkwsIFRWODUzMl9DTURfRUVwcm9tX09wZW4pOwotLyoJbXNsZWVwKDEpOyAqLwotCXdoaWxlICh0dl84NTMyX2VlcHJvbV9kYXRhW2ldKSB7Ci0JCXJlZyA9ICh0dl84NTMyX2VlcHJvbV9kYXRhW2ldICYgMHhmZjAwMDAwMCkgPj4gMjQ7Ci0JCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfRUVwcm9tX0FkZCwgcmVnKTsKLQkJLyogbXNsZWVwKDEpOyAqLwotCQlkYXRhMCA9ICh0dl84NTMyX2VlcHJvbV9kYXRhW2ldICYgMHgwMDAwMDBmZik7Ci0JCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfRUVwcm9tX0RhdGFMLCBkYXRhMCk7Ci0JCS8qIG1zbGVlcCgxKTsgKi8KLQkJZGF0YTEgPSAodHZfODUzMl9lZXByb21fZGF0YVtpXSAmIDB4MDAwMGZmMDApID4+IDg7Ci0JCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfRUVwcm9tX0RhdGFNLCBkYXRhMSk7Ci0JCS8qIG1zbGVlcCgxKTsgKi8KLQkJZGF0YTIgPSAodHZfODUzMl9lZXByb21fZGF0YVtpXSAmIDB4MDBmZjAwMDApID4+IDE2OwotCQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0VFcHJvbV9EYXRhSCwgZGF0YTIpOwotCQkvKiBtc2xlZXAoMSk7ICovCi0JCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfRUVwcm9tX1dyaXRlLCAwKTsKLQkJLyogbXNsZWVwKDEwKTsgKi8KLQkJaSsrOworCXJlZ193MShnc3BjYV9kZXYsIFIwMV9USU1JTkdfQ09OVFJPTF9MT1csIENNRF9FRXByb21fT3Blbik7CisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoZWVwcm9tX2RhdGEpOyBpKyspIHsKKwkJcmVnX3cxKGdzcGNhX2RldiwgUjAzX1RBQkxFX0FERFIsIGkpOworCQlyZWdfdzEoZ3NwY2FfZGV2LCBSMDRfV1RSQU1fREFUQV9MLCBlZXByb21fZGF0YVtpXVsyXSk7CisJCXJlZ193MShnc3BjYV9kZXYsIFIwNV9XVFJBTV9EQVRBX00sIGVlcHJvbV9kYXRhW2ldWzFdKTsKKwkJcmVnX3cxKGdzcGNhX2RldiwgUjA2X1dUUkFNX0RBVEFfSCwgZWVwcm9tX2RhdGFbaV1bMF0pOworCQlyZWdfdzEoZ3NwY2FfZGV2LCBSMDhfUkFNX1dSSVRFX0FDVElPTiwgMCk7CiAJfQotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfRUVwcm9tX1RhYmxlTGVuZ3RoLCBpKTsKLS8qCW1zbGVlcCgxKTsgKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0NUUkwsIFRWODUzMl9DTURfRUVwcm9tX0Nsb3NlKTsKKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMDdfVEFCTEVfTEVOLCBpKTsKKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMDFfVElNSU5HX0NPTlRST0xfTE9XLCBDTURfRUVwcm9tX0Nsb3NlKTsKIAltc2xlZXAoMTApOwogfQogCkBAIC0yMzgsNzkgKzE5Myw3NiBAQAogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAlzdHJ1Y3QgY2FtICpjYW07CiAKLQl0dl84NTMyV3JpdGVFRXByb20oZ3NwY2FfZGV2KTsKLQogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmVwYWRkciA9IDE7CiAJY2FtLT5jYW1fbW9kZSA9IHNpZl9tb2RlOwotCWNhbS0+bm1vZGVzID0gc2l6ZW9mIHNpZl9tb2RlIC8gc2l6ZW9mIHNpZl9tb2RlWzBdOworCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRShzaWZfbW9kZSk7CiAKLQlzZC0+YnJpZ2h0bmVzcyA9IHNkX2N0cmxzW1NEX0JSSUdIVE5FU1NdLnFjdHJsLmRlZmF1bHRfdmFsdWU7Ci0Jc2QtPmNvbnRyYXN0ID0gc2RfY3RybHNbU0RfQ09OVFJBU1RdLnFjdHJsLmRlZmF1bHRfdmFsdWU7CisJc2QtPmJyaWdodG5lc3MgPSBCUklHSFRORVNTX0RFRjsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgdHZfODUzMlJlYWRSZWdpc3RlcnMoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewotCV9fdTggZGF0YTsKKwlpbnQgaTsKKwlzdGF0aWMgdTggcmVnX3RiW10gPSB7CisJCVIwQ19BRF9XSURUSEwsCisJCVIwRF9BRF9XSURUSEgsCisJCVIyOF9RVUFOVCwKKwkJUjI5X0xJTkUsCisJCVIyQ19QT0xBUklUWSwKKwkJUjJEX1BPSU5ULAorCQlSMkVfUE9JTlRILAorCQlSMkZfUE9JTlRCLAorCQlSMzBfUE9JTlRCSCwKKwkJUjJBX0hJR0hfQlVER0VULAorCQlSMkJfTE9XX0JVREdFVCwKKwkJUjM0X1ZJRCwKKwkJUjM1X1ZJREgsCisJCVIzNl9QSUQsCisJCVIzN19QSURILAorCQlSODNfQURfSURILAorCQlSMTBfQURfQ09MX0JFR0lOTCwKKwkJUjExX0FEX0NPTF9CRUdJTkgsCisJCVIxNF9BRF9ST1dfQkVHSU5MLAorCQlSMTVfQURfUk9XQkVHSU5ILAorCQkwCisJfTsKIAotCWRhdGEgPSByZWdfcihnc3BjYV9kZXYsIDB4MDAwMSk7Ci0JUERFQlVHKERfVVNCSSwgInJlZ2lzdGVyIDB4MDEtPiAleCIsIGRhdGEpOwotCWRhdGEgPSByZWdfcihnc3BjYV9kZXYsIDB4MDAwMik7Ci0JUERFQlVHKERfVVNCSSwgInJlZ2lzdGVyIDB4MDItPiAleCIsIGRhdGEpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX0FEV0lEVEhfTCk7Ci0JcmVnX3IoZ3NwY2FfZGV2LCBUVjg1MzJfQURXSURUSF9IKTsKLQlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9RVUFOVF9DT01QKTsKLQlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9NT0RFX1BBQ0tFVCk7Ci0JcmVnX3IoZ3NwY2FfZGV2LCBUVjg1MzJfU0VUQ0xLKTsKLQlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9QT0lOVF9MKTsKLQlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9QT0lOVF9IKTsKLQlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9QT0lOVEJfTCk7Ci0JcmVnX3IoZ3NwY2FfZGV2LCBUVjg1MzJfUE9JTlRCX0gpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX0JVREdFVF9MKTsKLQlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9CVURHRVRfSCk7Ci0JcmVnX3IoZ3NwY2FfZGV2LCBUVjg1MzJfVklEX0wpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX1ZJRF9IKTsKLQlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9QSURfTCk7Ci0JcmVnX3IoZ3NwY2FfZGV2LCBUVjg1MzJfUElEX0gpOwotCXJlZ19yKGdzcGNhX2RldiwgVFY4NTMyX0RldmljZUlEKTsKLQlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9BRF9DT0xCRUdJTl9MKTsKLQlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9BRF9DT0xCRUdJTl9IKTsKLQlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9BRF9ST1dCRUdJTl9MKTsKLQlyZWdfcihnc3BjYV9kZXYsIFRWODUzMl9BRF9ST1dCRUdJTl9IKTsKKwlpID0gMDsKKwlkbyB7CisJCXJlZ19yKGdzcGNhX2RldiwgcmVnX3RiW2ldKTsKKwkJaSsrOworCX0gd2hpbGUgKHJlZ190YltpXSAhPSAwKTsKIH0KIAogc3RhdGljIHZvaWQgdHZfODUzMl9zZXRSZWcoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURfQ09MQkVHSU5fTCwKLQkJCUFEQ0JFR0lOTCk7CQkJLyogMHgxMCAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURfQ09MQkVHSU5fSCwKLQkJCUFEQ0JFR0lOSCk7CQkJLyogYWxzbyBkaWdpdGFsIGdhaW4gKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1BBUlRfQ1RSTCwKLQkJCVRWODUzMl9DTURfVVBEQVRFKTsJCS8qIDB4MDA8LTB4ODQgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMTBfQURfQ09MX0JFR0lOTCwgMHg0NCk7CisJCQkJCQkvKiBiZWdpbiBhY3RpdmUgbGluZSAqLworCXJlZ193MShnc3BjYV9kZXYsIFIxMV9BRF9DT0xfQkVHSU5ILCAweDAwKTsKKwkJCQkJCS8qIG1pcnJvciBhbmQgZGlnaXRhbCBnYWluICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjAwX1BBUlRfQ09OVFJPTCwgTEFURU5UX0NIQU5HRSB8IEVYUE9fQ0hBTkdFKTsKKwkJCQkJCS8qID0gMHg4NCAqLwogCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9HUElPX09FLCAweDBhKTsKKwlyZWdfdzEoZ3NwY2FfZGV2LCBSM0JfVGVzdDMsIDB4MGEpOwkvKiBUZXN0MFNlbCA9IDEwICovCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FESEVJR0hUX0wsIEFESEVJR0hMKTsgLyogMGUgKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FESEVJR0hUX0gsIEFESEVJR0hIKTsgLyogMGYgKi8KLQlyZWdfd18yKGdzcGNhX2RldiwgVFY4NTMyX0VYUE9TVVJFLAotCQkJRVhQT0wsIEVYUE9IKTsJCQkvKiAzNTBkIDB4MDE0YzsgMWMgKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEX0NPTEJFR0lOX0wsCi0JCQlBRENCRUdJTkwpOwkJCS8qIDB4MTAgKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEX0NPTEJFR0lOX0gsCi0JCQlBRENCRUdJTkgpOwkJCS8qIGFsc28gZGlnaXRhbCBnYWluICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRF9ST1dCRUdJTl9MLAotCQkJQURSQkVHSU5MKTsJCQkvKiAweDE0ICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjBFX0FEX0hFSUdIVEwsIDB4OTApOworCXJlZ193MShnc3BjYV9kZXYsIFIwRl9BRF9IRUlHSFRILCAweDAxKTsKKwlyZWdfdzIoZ3NwY2FfZGV2LCBSMUNfQURfRVhQT1NFX1RJTUVMLCAweDAxOGYpOworCXJlZ193MShnc3BjYV9kZXYsIFIxMF9BRF9DT0xfQkVHSU5MLCAweDQ0KTsKKwkJCQkJCS8qIGJlZ2luIGFjdGl2ZSBsaW5lICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjExX0FEX0NPTF9CRUdJTkgsIDB4MDApOworCQkJCQkJLyogbWlycm9yIGFuZCBkaWdpdGFsIGdhaW4gKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMTRfQURfUk9XX0JFR0lOTCwgMHgwYSk7CiAKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEX1NMT1BFLCAweDAwKTsJLyogMHg5MSAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURfQklUQ1RSTCwgMHgwMik7CS8qIDB4OTQgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSOTFfQURfU0xPUEVSRUcsIDB4MDApOworCXJlZ193MShnc3BjYV9kZXYsIFI5NF9BRF9CSVRDT05UUk9MLCAweDAyKTsKIAotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQ1RSTCwKLQkJCVRWODUzMl9DTURfRUVwcm9tX0Nsb3NlKTsJLyogMHgwMSAqLworCXJlZ193MShnc3BjYV9kZXYsIFIwMV9USU1JTkdfQ09OVFJPTF9MT1csIENNRF9FRXByb21fQ2xvc2UpOwogCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRF9TTE9QRSwgMHgwMCk7CS8qIDB4OTEgKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1BBUlRfQ1RSTCwKLQkJCVRWODUzMl9DTURfVVBEQVRFKTsJCS8qIDB4MDA8LTB4ODQgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSOTFfQURfU0xPUEVSRUcsIDB4MDApOworCXJlZ193MShnc3BjYV9kZXYsIFIwMF9QQVJUX0NPTlRST0wsIExBVEVOVF9DSEFOR0UgfCBFWFBPX0NIQU5HRSk7CisJCQkJCQkvKiA9IDB4ODQgKi8KIH0KIAogc3RhdGljIHZvaWQgdHZfODUzMl9Qb2xsUmVnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKQEAgLTMxOSw1NCArMjcxLDU1IEBACiAKIAkvKiBzdHJhbmdlIHBvbGxpbmcgZnJvbSB0Z2MgKi8KIAlmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgewotCQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1NFVENMSywKLQkJCVRFU1RDTEspOwkJLyogMHg0ODsgLy8weDA4OyAweDJjICovCi0JCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUEFSVF9DVFJMLCBUVjg1MzJfQ01EX1VQREFURSk7Ci0JCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfVURQX1VQREFURSwgMHgwMSk7CS8qIDB4MzEgKi8KKwkJcmVnX3cxKGdzcGNhX2RldiwgUjJDX1BPTEFSSVRZLCAweDEwKTsKKwkJcmVnX3cxKGdzcGNhX2RldiwgUjAwX1BBUlRfQ09OVFJPTCwKKwkJCQlMQVRFTlRfQ0hBTkdFIHwgRVhQT19DSEFOR0UpOworCQlyZWdfdzEoZ3NwY2FfZGV2LCBSMzFfVVBELCAweDAxKTsKIAl9CiB9CiAKIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIGFuZCByZXN1bWUgdGltZSAqLwogc3RhdGljIGludCBzZF9pbml0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEX1NMT1BFLCAweDMyKTsKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEX0JJVENUUkwsIDB4MDApOworCXR2Xzg1MzJXcml0ZUVFcHJvbShnc3BjYV9kZXYpOworCisJcmVnX3cxKGdzcGNhX2RldiwgUjkxX0FEX1NMT1BFUkVHLCAweDMyKTsJLyogc2xvcGUgYmVnaW4gMSw3ViwKKwkJCQkJCQkgKiBzbG9wZSByYXRlIDIgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSOTRfQURfQklUQ09OVFJPTCwgMHgwMCk7CiAJdHZfODUzMlJlYWRSZWdpc3RlcnMoZ3NwY2FfZGV2KTsKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0dQSU9fT0UsIDB4MGIpOwotCXJlZ193XzIoZ3NwY2FfZGV2LCBUVjg1MzJfQURIRUlHSFRfTCwgQURIRUlHSEwsCi0JCQkJQURIRUlHSEgpOwkvKiA0MDFkIDB4MDE2OTsgMGUgKi8KLQlyZWdfd18yKGdzcGNhX2RldiwgVFY4NTMyX0VYUE9TVVJFLCBFWFBPTCwKLQkJCQlFWFBPSCk7CQkvKiAzNTBkIDB4MDE0YzsgMWMgKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0FEV0lEVEhfTCwgQURXSURUSEwpOwkvKiAweDIwOyAweDBjICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRFdJRFRIX0gsIEFEV0lEVEhIKTsJLyogMHgwZCAqLworCXJlZ193MShnc3BjYV9kZXYsIFIzQl9UZXN0MywgMHgwYik7CisJcmVnX3cyKGdzcGNhX2RldiwgUjBFX0FEX0hFSUdIVEwsIDB4MDE5MCk7CisJcmVnX3cyKGdzcGNhX2RldiwgUjFDX0FEX0VYUE9TRV9USU1FTCwgMHgwMThmKTsKKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMENfQURfV0lEVEhMLCAweGU4KTsKKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMERfQURfV0lEVEhILCAweDAzKTsKIAogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUVVBTlRfQ09NUCwKLQkJCVRFU1RDT01QKTsJLyogMHg3MiBjb21wcmVzc2VkIG1vZGUgMHgyOCAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfTU9ERV9QQUNLRVQsCi0JCQlURVNUTElORSk7CS8qIDB4ODQ7IC8vIENJRiB8IDQgcGFja2V0IDB4MjkgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMjhfUVVBTlQsIDB4OTApOworCQkJCQkvKiBubyBjb21wcmVzcyAtIGZpeGVkIFEgLSBxdWFudCAwICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjI5X0xJTkUsIDB4ODEpOworCQkJCQkvKiAweDg0OyAvLyBDSUYgfCA0IHBhY2tldCAweDI5ICovCiAKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfU0VUQ0xLLAotCQkJVEVTVENMSyk7CQkvKiAweDQ4OyAvLzB4MDg7IDB4MmMgKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1BPSU5UX0wsCi0JCQlURVNUUFRMKTsJCS8qIDB4Mzg7IDB4MmQgKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1BPSU5UX0gsCi0JCQlURVNUUFRIKTsJCS8qIDB4MDQ7IDB4MmUgKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1BPSU5UQl9MLAotCQkJVEVTVFBUQkwpOwkJLyogMHgwNDsgMHgyZiAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUE9JTlRCX0gsCi0JCQlURVNUUFRCSCk7CQkvKiAweDA0OyAweDMwICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9QQVJUX0NUUkwsCi0JCQlUVjg1MzJfQ01EX1VQREFURSk7CS8qIDB4MDA8LTB4ODQgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMkNfUE9MQVJJVFksIDB4MTApOworCQkJCQkJLyogMHg0ODsgLy8weDA4OyAweDJjICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjJEX1BPSU5ULCAweDE0KTsKKwkJCQkJCS8qIDB4Mzg7IDB4MmQgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMkVfUE9JTlRILCAweDAxKTsKKwkJCQkJCS8qIDB4MDQ7IDB4MmUgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMkZfUE9JTlRCLCAweDEyKTsKKwkJCQkJCS8qIDB4MDQ7IDB4MmYgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMzBfUE9JTlRCSCwgMHgwMSk7CisJCQkJCQkvKiAweDA0OyAweDMwICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjAwX1BBUlRfQ09OVFJPTCwgTEFURU5UX0NIQU5HRSB8IEVYUE9fQ0hBTkdFKTsKKwkJCQkJCS8qIDB4MDA8LTB4ODQgKi8KIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1VEUF9VUERBVEUsIDB4MDEpOwkvKiAweDMxICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjMxX1VQRCwgMHgwMSk7CS8qIHVwZGF0ZSByZWdpc3RlcnMgKi8KIAltc2xlZXAoMjAwKTsKLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1VEUF9VUERBVEUsIDB4MDApOwkvKiAweDMxICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjMxX1VQRCwgMHgwMCk7CQkvKiBlbmQgdXBkYXRlICovCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAJdHZfODUzMl9zZXRSZWcoZ3NwY2FfZGV2KTsKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0dQSU9fT0UsIDB4MGIpOworCXJlZ193MShnc3BjYV9kZXYsIFIzQl9UZXN0MywgMHgwYik7CS8qIFRlc3QwU2VsID0gMTEgPSBHUElPICovCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAJdHZfODUzMl9zZXRSZWcoZ3NwY2FfZGV2KTsKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KQEAgLTM3NywxMSArMzMwLDEwIEBACiBzdGF0aWMgdm9pZCBzZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0JaW50IGJyaWdodG5lc3MgPSBzZC0+YnJpZ2h0bmVzczsKIAotCXJlZ193XzIoZ3NwY2FfZGV2LCBUVjg1MzJfRVhQT1NVUkUsCi0JCWJyaWdodG5lc3MgPj4gOCwgYnJpZ2h0bmVzcyk7CQkvKiAxYyAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUEFSVF9DVFJMLCBUVjg1MzJfQ01EX1VQREFURSk7CisJcmVnX3cyKGdzcGNhX2RldiwgUjFDX0FEX0VYUE9TRV9USU1FTCwgc2QtPmJyaWdodG5lc3MpOworCXJlZ193MShnc3BjYV9kZXYsIFIwMF9QQVJUX0NPTlRST0wsIExBVEVOVF9DSEFOR0UgfCBFWFBPX0NIQU5HRSk7CisJCQkJCQkvKiAweDg0ICovCiB9CiAKIC8qIC0tIHN0YXJ0IHRoZSBjYW1lcmEgLS0gKi8KQEAgLTM4OSw1NyArMzQxLDUwIEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRF9TTE9QRSwgMHgzMik7Ci0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRF9CSVRDVFJMLCAweDAwKTsKKwlyZWdfdzEoZ3NwY2FfZGV2LCBSOTFfQURfU0xPUEVSRUcsIDB4MzIpOwkvKiBzbG9wZSBiZWdpbiAxLDdWLAorCQkJCQkJCSAqIHNsb3BlIHJhdGUgMiAqLworCXJlZ193MShnc3BjYV9kZXYsIFI5NF9BRF9CSVRDT05UUk9MLCAweDAwKTsKIAl0dl84NTMyUmVhZFJlZ2lzdGVycyhnc3BjYV9kZXYpOwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfR1BJT19PRSwgMHgwYik7Ci0JcmVnX3dfMihnc3BjYV9kZXYsIFRWODUzMl9BREhFSUdIVF9MLAotCQlBREhFSUdITCwgQURIRUlHSEgpOwkvKiA0MDFkIDB4MDE2OTsgMGUgKi8KLS8qCXJlZ193XzIoZ3NwY2FfZGV2LCBUVjg1MzJfRVhQT1NVUkUsCi0JCUVYUE9MLCBFWFBPSCk7CQkgKiAzNTBkIDB4MDE0YzsgMWMgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSM0JfVGVzdDMsIDB4MGIpOworCisJcmVnX3cyKGdzcGNhX2RldiwgUjBFX0FEX0hFSUdIVEwsIDB4MDE5MCk7CiAJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOwogCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9BRFdJRFRIX0wsIEFEV0lEVEhMKTsJLyogMHgyMDsgMHgwYyAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfQURXSURUSF9ILCBBRFdJRFRISCk7CS8qIDB4MGQgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMENfQURfV0lEVEhMLCAweGU4KTsJCS8qIDB4MjA7IDB4MGMgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMERfQURfV0lEVEhILCAweDAzKTsKIAogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9RVUFOVF9DT01QLAotCQkJVEVTVENPTVApOwkvKiAweDcyIGNvbXByZXNzZWQgbW9kZSAweDI4ICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjI4X1FVQU5ULCAweDkwKTsKKwkJCQkJLyogMHg3MiBjb21wcmVzc2VkIG1vZGUgMHgyOCAqLwogCWlmIChnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVsoaW50KSBnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucHJpdikgewogCQkvKiAxNzZ4MTQ0ICovCi0JCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfTU9ERV9QQUNLRVQsCi0JCQlRQ0lGTElORSk7CS8qIDB4ODQ7IC8vIENJRiB8IDQgcGFja2V0IDB4MjkgKi8KKwkJcmVnX3cxKGdzcGNhX2RldiwgUjI5X0xJTkUsIDB4NDEpOworCQkJCQkvKiBDSUYgLSAyIGxpbmVzL3BhY2tldCAqLwogCX0gZWxzZSB7CiAJCS8qIDM1MngyODggKi8KLQkJcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9NT0RFX1BBQ0tFVCwKLQkJCVRFU1RMSU5FKTsJLyogMHg4NDsgLy8gQ0lGIHwgNCBwYWNrZXQgMHgyOSAqLworCQlyZWdfdzEoZ3NwY2FfZGV2LCBSMjlfTElORSwgMHg4MSk7CisJCQkJCS8qIENJRiAtIDIgbGluZXMvcGFja2V0ICovCiAJfQogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9TRVRDTEssCi0JCQlURVNUQ0xLKTsJCS8qIDB4NDg7IC8vMHgwODsgMHgyYyAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUE9JTlRfTCwKLQkJCVRFU1RQVEwpOwkJLyogMHgzODsgMHgyZCAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUE9JTlRfSCwKLQkJCVRFU1RQVEgpOwkJLyogMHgwNDsgMHgyZSAqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfUE9JTlRCX0wsCi0JCQlURVNUUFRCTCk7CQkvKiAweDA0OyAweDJmICovCi0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9QT0lOVEJfSCwKLQkJCVRFU1RQVEJIKTsJCS8qIDB4MDQ7IDB4MzAgKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX1BBUlRfQ1RSTCwKLQkJCVRWODUzMl9DTURfVVBEQVRFKTsJLyogMHgwMDwtMHg4NCAqLworCXJlZ193MShnc3BjYV9kZXYsIFIyQ19QT0xBUklUWSwgMHgxMCk7CQkvKiBzbG93IGNsb2NrICovCisJcmVnX3cxKGdzcGNhX2RldiwgUjJEX1BPSU5ULCAweDE0KTsKKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMkVfUE9JTlRILCAweDAxKTsKKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMkZfUE9JTlRCLCAweDEyKTsKKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMzBfUE9JTlRCSCwgMHgwMSk7CisJcmVnX3cxKGdzcGNhX2RldiwgUjAwX1BBUlRfQ09OVFJPTCwgTEFURU5UX0NIQU5HRSB8IEVYUE9fQ0hBTkdFKTsKIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfVURQX1VQREFURSwgMHgwMSk7CS8qIDB4MzEgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMzFfVVBELCAweDAxKTsJLyogdXBkYXRlIHJlZ2lzdGVycyAqLwogCW1zbGVlcCgyMDApOwotCXJlZ193XzEoZ3NwY2FfZGV2LCBUVjg1MzJfVURQX1VQREFURSwgMHgwMCk7CS8qIDB4MzEgKi8KKwlyZWdfdzEoZ3NwY2FfZGV2LCBSMzFfVVBELCAweDAwKTsJCS8qIGVuZCB1cGRhdGUgKi8KIAkvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCXR2Xzg1MzJfc2V0UmVnKGdzcGNhX2Rldik7CiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLQlyZWdfd18xKGdzcGNhX2RldiwgVFY4NTMyX0dQSU9fT0UsIDB4MGIpOworCXJlZ193MShnc3BjYV9kZXYsIFIzQl9UZXN0MywgMHgwYik7CS8qIFRlc3QwU2VsID0gMTEgPSBHUElPICovCiAJLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KIAl0dl84NTMyX3NldFJlZyhnc3BjYV9kZXYpOwogCS8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAJdHZfODUzMl9Qb2xsUmVnKGdzcGNhX2Rldik7Ci0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9VRFBfVVBEQVRFLCAweDAwKTsJLyogMHgzMSAqLworCXJlZ193MShnc3BjYV9kZXYsIFIzMV9VUEQsIDB4MDApOwkvKiBlbmQgdXBkYXRlICovCiAKIAlnc3BjYV9kZXYtPmVtcHR5X3BhY2tldCA9IDA7CQkvKiBjaGVjayB0aGUgZW1wdHkgcGFja2V0cyAqLwogCXNkLT5wYWNrZXQgPSAwOwkJCQkvKiBpZ25vcmUgdGhlIGZpcnN0IHBhY2tldHMgKi8KQEAgLTQ0OSw3ICszOTQsNyBAQAogCiBzdGF0aWMgdm9pZCBzZF9zdG9wTihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCiB7Ci0JcmVnX3dfMShnc3BjYV9kZXYsIFRWODUzMl9HUElPX09FLCAweDBiKTsKKwlyZWdfdzEoZ3NwY2FfZGV2LCBSM0JfVGVzdDMsIDB4MGIpOwkvKiBUZXN0MFNlbCA9IDExID0gR1BJTyAqLwogfQogCiBzdGF0aWMgdm9pZCBzZF9wa3Rfc2NhbihzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCkBAIC00NzMsOSArNDE4LDkgQEAKIAogCS8qIGVhY2ggcGFja2V0IGNvbnRhaW5zOgogCSAqIC0gaGVhZGVyIDIgYnl0ZXMKLQkgKiAtIFJHIGxpbmUKKwkgKiAtIFJHUkcgbGluZQogCSAqIC0gNCBieXRlcwotCSAqIC0gR0IgbGluZQorCSAqIC0gR0JHQiBsaW5lCiAJICogLSA0IGJ5dGVzCiAJICovCiAJZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgcGFja2V0X3R5cGUwLApAQCAtNDg0LDEwICs0MjksNiBAQAogCQkJZnJhbWUsIGRhdGEgKyBnc3BjYV9kZXYtPndpZHRoICsgNiwgZ3NwY2FfZGV2LT53aWR0aCk7CiB9CiAKLXN0YXRpYyB2b2lkIHNldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKLXsKLX0KLQogc3RhdGljIGludCBzZF9zZXRicmlnaHRuZXNzKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgdmFsKQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKQEAgLTUwNiwyNCArNDQ3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzZF9zZXRjb250cmFzdChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsIF9fczMyIHZhbCkKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KLQlzZC0+Y29udHJhc3QgPSB2YWw7Ci0JaWYgKGdzcGNhX2Rldi0+c3RyZWFtaW5nKQotCQlzZXRjb250cmFzdChnc3BjYV9kZXYpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNkX2dldGNvbnRyYXN0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwgX19zMzIgKnZhbCkKLXsKLQlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7Ci0KLQkqdmFsID0gc2QtPmNvbnRyYXN0OwotCXJldHVybiAwOwotfQotCiAvKiBzdWItZHJpdmVyIGRlc2NyaXB0aW9uICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKIAkubmFtZSA9IE1PRFVMRV9OQU1FLApAQCAtNTcwLDggKzQ5MywxMCBAQAogLyogLS0gbW9kdWxlIGluc2VydCAvIHJlbW92ZSAtLSAqLwogc3RhdGljIGludCBfX2luaXQgc2RfbW9kX2luaXQodm9pZCkKIHsKLQlpZiAodXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpIDwgMCkKLQkJcmV0dXJuIC0xOworCWludCByZXQ7CisJcmV0ID0gdXNiX3JlZ2lzdGVyKCZzZF9kcml2ZXIpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OwogCVBERUJVRyhEX1BST0JFLCAicmVnaXN0ZXJlZCIpOwogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS92YzAzMnguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvdmMwMzJ4LmMKaW5kZXggMDUyNWVhNS4uNGM4MDJmYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS92YzAzMnguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3ZjMDMyeC5jCkBAIC0zNywxOCArMzcsMjEgQEAKIAlfX3U4IGxpZ2h0ZnJlcTsKIAlfX3U4IHNoYXJwbmVzczsKIAorCXU4IGltYWdlX29mZnNldDsKKwogCWNoYXIgYnJpZGdlOwogI2RlZmluZSBCUklER0VfVkMwMzIxIDAKICNkZWZpbmUgQlJJREdFX1ZDMDMyMyAxCiAJY2hhciBzZW5zb3I7CiAjZGVmaW5lIFNFTlNPUl9IVjcxMzFSIDAKICNkZWZpbmUgU0VOU09SX01JMDM2MCAxCi0jZGVmaW5lIFNFTlNPUl9NSTEzMjAgMgotI2RlZmluZSBTRU5TT1JfTUkxMzEwX1NPQyAzCi0jZGVmaW5lIFNFTlNPUl9PVjc2NjAgNAotI2RlZmluZSBTRU5TT1JfT1Y3NjcwIDUKLSNkZWZpbmUgU0VOU09SX1BPMTIwMCA2Ci0jZGVmaW5lIFNFTlNPUl9QTzMxMzBOQyA3CisjZGVmaW5lIFNFTlNPUl9NSTEzMTBfU09DIDIKKyNkZWZpbmUgU0VOU09SX01JMTMyMCAzCisjZGVmaW5lIFNFTlNPUl9NSTEzMjBfU09DIDQKKyNkZWZpbmUgU0VOU09SX09WNzY2MCA1CisjZGVmaW5lIFNFTlNPUl9PVjc2NzAgNgorI2RlZmluZSBTRU5TT1JfUE8xMjAwIDcKKyNkZWZpbmUgU0VOU09SX1BPMzEzME5DIDgKIH07CiAKIC8qIFY0TDIgY29udHJvbHMgc3VwcG9ydGVkIGJ5IHRoZSBkcml2ZXIgKi8KQEAgLTE0OSw4ICsxNTIsNTAgQEAKIAkJLnNpemVpbWFnZSA9IDY0MCAqIDQ4MCAqIDMgLyA4ICsgNTkwLAogCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAogCQkucHJpdiA9IDB9LAorCXsxMjgwLCAxMDI0LCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLCAvKiBtaTEzeDBfc29jIG9ubHkgKi8KKwkJLmJ5dGVzcGVybGluZSA9IDEyODAsCisJCS5zaXplaW1hZ2UgPSAxMjgwICogMTAyNCAqIDEgLyA0ICsgNTkwLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9KUEVHLAorCQkucHJpdiA9IDJ9LAogfTsKLQorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgYmlfbW9kZVtdID0geworLypmaXhtZTogamVnIGRvZXMgbm90IHdvcmsKKwl7MzIwLCAyNDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCisJCS5ieXRlc3BlcmxpbmUgPSAzMjAsCisJCS5zaXplaW1hZ2UgPSAzMjAgKiAyNDAgKiAzIC8gOCArIDU5MCwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwkJLnByaXYgPSA1fSwKKyovCisJezMyMCwgMjQwLCBWNEwyX1BJWF9GTVRfWVZZVSwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMzIwLAorCQkuc2l6ZWltYWdlID0gMzIwICogMjQwICogMiwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSA0fSwKKy8qCisJezY0MCwgNDgwLCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gNjQwLAorCQkuc2l6ZWltYWdlID0gNjQwICogNDgwICogMyAvIDggKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gM30sCisqLworCXs2NDAsIDQ4MCwgVjRMMl9QSVhfRk1UX1lWWVUsIFY0TDJfRklFTERfTk9ORSwKKwkJLmJ5dGVzcGVybGluZSA9IDY0MCwKKwkJLnNpemVpbWFnZSA9IDY0MCAqIDQ4MCAqIDIsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCisJCS5wcml2ID0gMn0sCisvKgorCXsxMjgwLCAxMDI0LCBWNEwyX1BJWF9GTVRfSlBFRywgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTI4MCwKKwkJLnNpemVpbWFnZSA9IDEyODAgKiAxMDI0ICogMSAvIDQgKyA1OTAsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX0pQRUcsCisJCS5wcml2ID0gMX0sCisqLworCXsxMjgwLCAxMDI0LCBWNEwyX1BJWF9GTVRfWVZZVSwgVjRMMl9GSUVMRF9OT05FLAorCQkuYnl0ZXNwZXJsaW5lID0gMTI4MCwKKwkJLnNpemVpbWFnZSA9IDEyODAgKiAxMDI0ICogMiwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKKwkJLnByaXYgPSAwfSwKK307CiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCBzdmdhX21vZGVbXSA9IHsKIAl7ODAwLCA2MDAsIFY0TDJfUElYX0ZNVF9KUEVHLCBWNEwyX0ZJRUxEX05PTkUsCiAJCS5ieXRlc3BlcmxpbmUgPSA4MDAsCkBAIC00MDAsOTIgKzQ0NSwyMDggQEAKIHN0YXRpYyBjb25zdCBfX3U4IG1pMTMxMF9zb2Npbml0VkdBX0pQR1tdWzRdID0gewogCXsweGIwLCAweDAzLCAweDE5LCAweGNjfSwKIAl7MHhiMCwgMHgwNCwgMHgwMiwgMHhjY30sCi0JezB4YjMsIDB4MDAsIDB4NjQsIDB4Y2N9LAotCXsweGIzLCAweDAwLCAweDY1LCAweGNjfSwKLQl7MHhiMywgMHgwNSwgMHgwMCwgMHhjY30sCi0JezB4YjMsIDB4MDYsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDI0LCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHgyNSwgMHhjY30sCisJezB4YjMsIDB4MDUsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAzLCAweGNjfSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCiAJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAogCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwKIAl7MHhiMywgMHgzNCwgMHgwMiwgMHhjY30sCiAJezB4YjMsIDB4MzUsIDB4ZGQsIDB4Y2N9LAotCXsweGIzLCAweDAyLCAweDAwLCAweGNjfSwKIAl7MHhiMywgMHgwMywgMHgwYSwgMHhjY30sCi0JezB4YjMsIDB4MDQsIDB4MDUsIDB4Y2N9LAorCXsweGIzLCAweDA0LCAweDBkLCAweGNjfSwKIAl7MHhiMywgMHgyMCwgMHgwMCwgMHhjY30sCiAJezB4YjMsIDB4MjEsIDB4MDAsIDB4Y2N9LAotCXsweGIzLCAweDIyLCAweDAzLCAweGNjfSwKLQl7MHhiMywgMHgyMywgMHhjMCwgMHhjY30sCisJezB4YjMsIDB4MjIsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDIzLCAweGUwLCAweGNjfSwKIAl7MHhiMywgMHgxNCwgMHgwMCwgMHhjY30sCiAJezB4YjMsIDB4MTUsIDB4MDAsIDB4Y2N9LAotCXsweGIzLCAweDE2LCAweDA0LCAweGNjfSwKLQl7MHhiMywgMHgxNywgMHhmZiwgMHhjY30sCi0JezB4YjMsIDB4MDAsIDB4NjUsIDB4Y2N9LAotCXsweGI4LCAweDAwLCAweDAwLCAweGNjfSwKLQl7MHhiYywgMHgwMCwgMHhkMCwgMHhjY30sCi0JezB4YmMsIDB4MDEsIDB4MDEsIDB4Y2N9LAotCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKLQl7MHhjOCwgMHg5ZiwgMHgwYiwgMHhiYn0sCi0JezB4NWIsIDB4MDAsIDB4MDEsIDB4YmJ9LAotCXsweDJmLCAweGRlLCAweDIwLCAweGJifSwKKwl7MHhiMywgMHgxNiwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MTcsIDB4N2YsIDB4Y2N9LAorCXsweGI4LCAweDAxLCAweDdkLCAweGNjfSwKKwl7MHhiOCwgMHg4MSwgMHgwOSwgMHhjY30sCisJezB4YjgsIDB4MjcsIDB4MjAsIDB4Y2N9LAorCXsweGI4LCAweDI2LCAweDgwLCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHgyNSwgMHhjY30sCisJezB4YjgsIDB4MDAsIDB4MTMsIDB4Y2N9LAorCXsweGJjLCAweDAwLCAweDcxLCAweGNjfSwKKwl7MHhiOCwgMHg4MSwgMHgwMSwgMHhjY30sCisJezB4YjgsIDB4MmMsIDB4NWEsIDB4Y2N9LAorCXsweGI4LCAweDJkLCAweGZmLCAweGNjfSwKKwl7MHhiOCwgMHgyZSwgMHhlZSwgMHhjY30sCisJezB4YjgsIDB4MmYsIDB4ZmIsIDB4Y2N9LAorCXsweGI4LCAweDMwLCAweDUyLCAweGNjfSwKKwl7MHhiOCwgMHgzMSwgMHhmOCwgMHhjY30sCisJezB4YjgsIDB4MzIsIDB4ZjEsIDB4Y2N9LAorCXsweGI4LCAweDMzLCAweGZmLCAweGNjfSwKKwl7MHhiOCwgMHgzNCwgMHg1NCwgMHhjY30sCisJezB4YjgsIDB4MzUsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDM2LCAweDAwLCAweGNjfSwKKwl7MHhiOCwgMHgzNywgMHgwMCwgMHhjY30sCiAJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAotCXsweDIwLCAweDAzLCAweDAyLCAweGJifSwKKwl7MHgwMCwgMHgwMSwgMHgwMCwgMHhkZH0sCisJezB4MGQsIDB4MDAsIDB4MDksIDB4YmJ9LAorCXsweDBkLCAweDAwLCAweDA4LCAweGJifSwKIAl7MHhmMCwgMHgwMCwgMHgwMSwgMHhiYn0sCi0JezB4MDUsIDB4MDAsIDB4MDcsIDB4YmJ9LAotCXsweDM0LCAweDAwLCAweDAwLCAweGJifSwKLQl7MHgzNSwgMHhmZiwgMHgwMCwgMHhiYn0sCi0JezB4ZGMsIDB4MDcsIDB4MDIsIDB4YmJ9LAotCXsweGRkLCAweDNjLCAweDE4LCAweGJifSwKLQl7MHhkZSwgMHg5MiwgMHg2ZCwgMHhiYn0sCi0JezB4ZGYsIDB4Y2QsIDB4YjEsIDB4YmJ9LAotCXsweGUwLCAweGZmLCAweGU3LCAweGJifSwKLQl7MHgwNiwgMHhmMCwgMHgwZCwgMHhiYn0sCi0JezB4MDYsIDB4NzAsIDB4MGUsIDB4YmJ9LAotCXsweDRjLCAweDAwLCAweDAxLCAweGJifSwKLQl7MHg0ZCwgMHgwMCwgMHgwMSwgMHhiYn0sCi0JezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAotCXsweDJlLCAweDBjLCAweDU1LCAweGJifSwKLQl7MHgyMSwgMHhiNiwgMHg2ZSwgMHhiYn0sCi0JezB4MzYsIDB4MzAsIDB4MTAsIDB4YmJ9LAotCXsweDM3LCAweDAwLCAweGMxLCAweGJifSwKKwl7MHgwMCwgMHgwMSwgMHgwMCwgMHhkZH0sCisJezB4MDYsIDB4MDAsIDB4MTQsIDB4YmJ9LAorCXsweDNhLCAweDEwLCAweDAwLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgxMCwgMHhkZH0sCisJezB4OWIsIDB4MTAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKIAl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCi0JezB4MDcsIDB4MDAsIDB4ODQsIDB4YmJ9LAotCXsweDA4LCAweDAyLCAweDRhLCAweGJifSwKLQl7MHgwNSwgMHgwMSwgMHgxMCwgMHhiYn0sCi0JezB4MDYsIDB4MDAsIDB4MzksIDB4YmJ9LAotCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKLQl7MHg1OCwgMHgwMiwgMHg2NywgMHhiYn0sCi0JezB4NTcsIDB4MDIsIDB4MDAsIDB4YmJ9LAotCXsweDVhLCAweDAyLCAweDY3LCAweGJifSwKLQl7MHg1OSwgMHgwMiwgMHgwMCwgMHhiYn0sCi0JezB4NWMsIDB4MTIsIDB4MGQsIDB4YmJ9LAotCXsweDVkLCAweDE2LCAweDExLCAweGJifSwKLQl7MHgzOSwgMHgwNiwgMHgxOCwgMHhiYn0sCi0JezB4M2EsIDB4MDYsIDB4MTgsIDB4YmJ9LAotCXsweDNiLCAweDA2LCAweDE4LCAweGJifSwKLQl7MHgzYywgMHgwNiwgMHgxOCwgMHhiYn0sCi0JezB4NjQsIDB4N2IsIDB4NWIsIDB4YmJ9LAotCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKLQl7MHgzNiwgMHgzMCwgMHgxMCwgMHhiYn0sCi0JezB4MzcsIDB4MDAsIDB4YzAsIDB4YmJ9LAotCXsweGJjLCAweDBlLCAweDAwLCAweGNjfSwKLQl7MHhiYywgMHgwZiwgMHgwNSwgMHhjY30sCi0JezB4YmMsIDB4MTAsIDB4YzAsIDB4Y2N9LAotCXsweGJjLCAweDExLCAweDAzLCAweGNjfSwKKwl7MHgwMCwgMHgwMSwgMHgwMCwgMHhkZH0sCisJezB4MmIsIDB4MDAsIDB4MjgsIDB4YmJ9LAorCXsweDJjLCAweDAwLCAweDMwLCAweGJifSwKKwl7MHgyZCwgMHgwMCwgMHgzMCwgMHhiYn0sCisJezB4MmUsIDB4MDAsIDB4MjgsIDB4YmJ9LAorCXsweDQxLCAweDAwLCAweGQ3LCAweGJifSwKKwl7MHgwOSwgMHgwMiwgMHgzYSwgMHhiYn0sCisJezB4MGMsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDIwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwNSwgMHgwMCwgMHg4YywgMHhiYn0sCisJezB4MDYsIDB4MDAsIDB4MzIsIDB4YmJ9LAorCXsweDA3LCAweDAwLCAweGM2LCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgxOSwgMHhiYn0sCisJezB4MjQsIDB4ODAsIDB4NmYsIDB4YmJ9LAorCXsweGM4LCAweDAwLCAweDBmLCAweGJifSwKKwl7MHgyMCwgMHgwMCwgMHgwZiwgMHhiYn0sCiAJezB4YjYsIDB4MDAsIDB4MDAsIDB4Y2N9LAogCXsweGI2LCAweDAzLCAweDAyLCAweGNjfSwKIAl7MHhiNiwgMHgwMiwgMHg4MCwgMHhjY30sCiAJezB4YjYsIDB4MDUsIDB4MDEsIDB4Y2N9LAogCXsweGI2LCAweDA0LCAweGUwLCAweGNjfSwKLQl7MHhiNiwgMHgxMiwgMHhmOCwgMHhjY30sCi0JezB4YjYsIDB4MTMsIDB4MjUsIDB4Y2N9LAorCXsweGI2LCAweDEyLCAweDc4LCAweGNjfSwKIAl7MHhiNiwgMHgxOCwgMHgwMiwgMHhjY30sCiAJezB4YjYsIDB4MTcsIDB4NTgsIDB4Y2N9LAogCXsweGI2LCAweDE2LCAweDAwLCAweGNjfSwKIAl7MHhiNiwgMHgyMiwgMHgxMiwgMHhjY30sCiAJezB4YjYsIDB4MjMsIDB4MGIsIDB4Y2N9LAorCXsweGIzLCAweDAyLCAweDAyLCAweGNjfSwKIAl7MHhiZiwgMHhjMCwgMHgzOSwgMHhjY30sCiAJezB4YmYsIDB4YzEsIDB4MDQsIDB4Y2N9LAotCXsweGJmLCAweGNjLCAweDAwLCAweGNjfSwKKwl7MHhiZiwgMHhjYywgMHgxMCwgMHhjY30sCisJezB4YjksIDB4MTIsIDB4MDAsIDB4Y2N9LAorCXsweGI5LCAweDEzLCAweDBhLCAweGNjfSwKKwl7MHhiOSwgMHgxNCwgMHgwYSwgMHhjY30sCisJezB4YjksIDB4MTUsIDB4MGEsIDB4Y2N9LAorCXsweGI5LCAweDE2LCAweDBhLCAweGNjfSwKKwl7MHhiOSwgMHgxOCwgMHgwMCwgMHhjY30sCisJezB4YjksIDB4MTksIDB4MGYsIDB4Y2N9LAorCXsweGI5LCAweDFhLCAweDBmLCAweGNjfSwKKwl7MHhiOSwgMHgxYiwgMHgwZiwgMHhjY30sCisJezB4YjksIDB4MWMsIDB4MGYsIDB4Y2N9LAorCXsweGI4LCAweDhlLCAweDAwLCAweGNjfSwKKwl7MHhiOCwgMHg4ZiwgMHhmZiwgMHhjY30sCisJezB4YjMsIDB4MDEsIDB4NDEsIDB4Y2N9LAorCXsweDAzLCAweDAzLCAweGMwLCAweGJifSwKKwl7MHgwNiwgMHgwMCwgMHgxMCwgMHhiYn0sCisJezB4YjYsIDB4MTIsIDB4ZjgsIDB4Y2N9LAorCXsweGI4LCAweDBjLCAweDIwLCAweGNjfSwKKwl7MHhiOCwgMHgwZCwgMHg3MCwgMHhjY30sCisJezB4YjYsIDB4MTMsIDB4MTMsIDB4Y2N9LAorCXsweDJmLCAweDAwLCAweEMwLCAweGJifSwKKwl7MHhiOCwgMHhhMCwgMHgxMiwgMHhjY30sCisJe30sCit9Oworc3RhdGljIGNvbnN0IF9fdTggbWkxMzEwX3NvY2luaXRRVkdBX0pQR1tdWzRdID0geworCXsweGIwLCAweDAzLCAweDE5LCAweGNjfSwKKwl7MHhiMCwgMHgwNCwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4MjQsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDI1LCAweGNjfSwKKwl7MHhiMywgMHgwNSwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDYsIDB4MDMsIDB4Y2N9LAorCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAorCXsweGIzLCAweDM0LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhkZCwgMHhjY30sCisJezB4YjMsIDB4MDMsIDB4MGEsIDB4Y2N9LAorCXsweGIzLCAweDA0LCAweDBkLCAweGNjfSwKKwl7MHhiMywgMHgyMCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjEsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIyLCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgyMywgMHhlMCwgMHhjY30sCisJezB4YjMsIDB4MTQsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE1LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNiwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MTcsIDB4N2YsIDB4Y2N9LAorCXsweGI4LCAweDAxLCAweDdkLCAweGNjfSwKKwl7MHhiOCwgMHg4MSwgMHgwOSwgMHhjY30sCisJezB4YjgsIDB4MjcsIDB4MjAsIDB4Y2N9LAorCXsweGI4LCAweDI2LCAweDgwLCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHgyNSwgMHhjY30sCisJezB4YjgsIDB4MDAsIDB4MTMsIDB4Y2N9LAorCXsweGJjLCAweDAwLCAweGQxLCAweGNjfSwKKwl7MHhiOCwgMHg4MSwgMHgwMSwgMHhjY30sCisJezB4YjgsIDB4MmMsIDB4NWEsIDB4Y2N9LAorCXsweGI4LCAweDJkLCAweGZmLCAweGNjfSwKKwl7MHhiOCwgMHgyZSwgMHhlZSwgMHhjY30sCisJezB4YjgsIDB4MmYsIDB4ZmIsIDB4Y2N9LAorCXsweGI4LCAweDMwLCAweDUyLCAweGNjfSwKKwl7MHhiOCwgMHgzMSwgMHhmOCwgMHhjY30sCisJezB4YjgsIDB4MzIsIDB4ZjEsIDB4Y2N9LAorCXsweGI4LCAweDMzLCAweGZmLCAweGNjfSwKKwl7MHhiOCwgMHgzNCwgMHg1NCwgMHhjY30sCisJezB4YjgsIDB4MzUsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDM2LCAweDAwLCAweGNjfSwKKwl7MHhiOCwgMHgzNywgMHgwMCwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAxLCAweDAwLCAweGRkfSwKKwl7MHgwZCwgMHgwMCwgMHgwOSwgMHhiYn0sCisJezB4MGQsIDB4MDAsIDB4MDgsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHgwMCwgMHgwMSwgMHgwMCwgMHhkZH0sCisJezB4MDYsIDB4MDAsIDB4MTQsIDB4YmJ9LAorCXsweDNhLCAweDEwLCAweDAwLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgxMCwgMHhkZH0sCisJezB4OWIsIDB4MTAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDEsIDB4MDAsIDB4ZGR9LAorCXsweDJiLCAweDAwLCAweDI4LCAweGJifSwKKwl7MHgyYywgMHgwMCwgMHgzMCwgMHhiYn0sCisJezB4MmQsIDB4MDAsIDB4MzAsIDB4YmJ9LAorCXsweDJlLCAweDAwLCAweDI4LCAweGJifSwKKwl7MHg0MSwgMHgwMCwgMHhkNywgMHhiYn0sCisJezB4MDksIDB4MDIsIDB4M2EsIDB4YmJ9LAorCXsweDBjLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgyMCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDUsIDB4MDAsIDB4OGMsIDB4YmJ9LAorCXsweDA2LCAweDAwLCAweDMyLCAweGJifSwKKwl7MHgwNywgMHgwMCwgMHhjNiwgMHhiYn0sCisJezB4MDgsIDB4MDAsIDB4MTksIDB4YmJ9LAorCXsweDI0LCAweDgwLCAweDZmLCAweGJifSwKKwl7MHhjOCwgMHgwMCwgMHgwZiwgMHhiYn0sCisJezB4MjAsIDB4MDAsIDB4MGYsIDB4YmJ9LAorCXsweGI2LCAweDAwLCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgwMywgMHgwMSwgMHhjY30sCisJezB4YjYsIDB4MDIsIDB4NDAsIDB4Y2N9LAorCXsweGI2LCAweDA1LCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgwNCwgMHhmMCwgMHhjY30sCisJezB4YjYsIDB4MTIsIDB4NzgsIDB4Y2N9LAorCXsweGI2LCAweDE4LCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgxNywgMHg5NiwgMHhjY30sCisJezB4YjYsIDB4MTYsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDIyLCAweDEyLCAweGNjfSwKKwl7MHhiNiwgMHgyMywgMHgwYiwgMHhjY30sCisJezB4YjMsIDB4MDIsIDB4MDIsIDB4Y2N9LAorCXsweGJmLCAweGMwLCAweDM5LCAweGNjfSwKKwl7MHhiZiwgMHhjMSwgMHgwNCwgMHhjY30sCisJezB4YmYsIDB4Y2MsIDB4MTAsIDB4Y2N9LAorCXsweGI5LCAweDEyLCAweDAwLCAweGNjfSwKKwl7MHhiOSwgMHgxMywgMHgwYSwgMHhjY30sCisJezB4YjksIDB4MTQsIDB4MGEsIDB4Y2N9LAorCXsweGI5LCAweDE1LCAweDBhLCAweGNjfSwKKwl7MHhiOSwgMHgxNiwgMHgwYSwgMHhjY30sCisJezB4YjksIDB4MTgsIDB4MDAsIDB4Y2N9LAorCXsweGI5LCAweDE5LCAweDBmLCAweGNjfSwKKwl7MHhiOSwgMHgxYSwgMHgwZiwgMHhjY30sCisJezB4YjksIDB4MWIsIDB4MGYsIDB4Y2N9LAorCXsweGI5LCAweDFjLCAweDBmLCAweGNjfSwKKwl7MHhiOCwgMHg4ZSwgMHgwMCwgMHhjY30sCisJezB4YjgsIDB4OGYsIDB4ZmYsIDB4Y2N9LAogCXsweGJjLCAweDAyLCAweDE4LCAweGNjfSwKIAl7MHhiYywgMHgwMywgMHg1MCwgMHhjY30sCiAJezB4YmMsIDB4MDQsIDB4MTgsIDB4Y2N9LApAQCAtNDk2LDEzMSArNjU3LDEyMyBAQAogCXsweGJjLCAweDBhLCAweDEwLCAweGNjfSwKIAl7MHhiYywgMHgwYiwgMHgwMCwgMHhjY30sCiAJezB4YmMsIDB4MGMsIDB4MDAsIDB4Y2N9LAotCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwKLQl7MHhmMCwgMHgwMCwgMHgwMSwgMHhiYn0sCi0JezB4ODAsIDB4MDAsIDB4MDMsIDB4YmJ9LAotCXsweDgxLCAweGM3LCAweDE0LCAweGJifSwKLQl7MHg4MiwgMHhlYiwgMHhlOCwgMHhiYn0sCi0JezB4ODMsIDB4ZmUsIDB4ZjQsIDB4YmJ9LAotCXsweDg0LCAweGNkLCAweDEwLCAweGJifSwKLQl7MHg4NSwgMHhmMywgMHhlZSwgMHhiYn0sCi0JezB4ODYsIDB4ZmYsIDB4ZjEsIDB4YmJ9LAotCXsweDg3LCAweGNkLCAweDEwLCAweGJifSwKLQl7MHg4OCwgMHhmMywgMHhlZSwgMHhiYn0sCi0JezB4ODksIDB4MDEsIDB4ZjEsIDB4YmJ9LAotCXsweDhhLCAweGU1LCAweDE3LCAweGJifSwKLQl7MHg4YiwgMHhlOCwgMHhlMiwgMHhiYn0sCi0JezB4OGMsIDB4ZjcsIDB4ZWQsIDB4YmJ9LAotCXsweDhkLCAweDAwLCAweGZmLCAweGJifSwKLQl7MHg4ZSwgMHhlYywgMHgxMCwgMHhiYn0sCi0JezB4OGYsIDB4ZjAsIDB4ZWQsIDB4YmJ9LAotCXsweDkwLCAweGY5LCAweGYyLCAweGJifSwKLQl7MHg5MSwgMHgwMCwgMHgwMCwgMHhiYn0sCi0JezB4OTIsIDB4ZTksIDB4MGQsIDB4YmJ9LAotCXsweDkzLCAweGY0LCAweGYyLCAweGJifSwKLQl7MHg5NCwgMHhmYiwgMHhmNSwgMHhiYn0sCi0JezB4OTUsIDB4MDAsIDB4ZmYsIDB4YmJ9LAotCXsweGI2LCAweDBmLCAweDA4LCAweGJifSwKLQl7MHhiNywgMHgzZCwgMHgxNiwgMHhiYn0sCi0JezB4YjgsIDB4MGMsIDB4MDQsIDB4YmJ9LAotCXsweGI5LCAweDFjLCAweDA3LCAweGJifSwKLQl7MHhiYSwgMHgwYSwgMHgwMywgMHhiYn0sCi0JezB4YmIsIDB4MWIsIDB4MDksIDB4YmJ9LAotCXsweGJjLCAweDE3LCAweDBkLCAweGJifSwKLQl7MHhiZCwgMHgyMywgMHgxZCwgMHhiYn0sCi0JezB4YmUsIDB4MDAsIDB4MjgsIDB4YmJ9LAotCXsweGJmLCAweDExLCAweDA5LCAweGJifSwKLQl7MHhjMCwgMHgxNiwgMHgxNSwgMHhiYn0sCi0JezB4YzEsIDB4MDAsIDB4MWIsIDB4YmJ9LAotCXsweGMyLCAweDBlLCAweDA3LCAweGJifSwKLQl7MHhjMywgMHgxNCwgMHgxMCwgMHhiYn0sCi0JezB4YzQsIDB4MDAsIDB4MTcsIDB4YmJ9LAotCXsweDA2LCAweDc0LCAweDhlLCAweGJifSwKLQl7MHhmMCwgMHgwMCwgMHgwMSwgMHhiYn0sCi0JezB4MDYsIDB4ZjQsIDB4OGUsIDB4YmJ9LAotCXsweDAwLCAweDAwLCAweDUwLCAweGRkfSwKLQl7MHgwNiwgMHg3NCwgMHg4ZSwgMHhiYn0sCi0JezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAotCXsweDI0LCAweDUwLCAweDIwLCAweGJifSwKLQl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCi0JezB4MzQsIDB4MGMsIDB4NTAsIDB4YmJ9LAogCXsweGIzLCAweDAxLCAweDQxLCAweGNjfSwKLQl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCiAJezB4MDMsIDB4MDMsIDB4YzAsIDB4YmJ9LAorCXsweDA2LCAweDAwLCAweDEwLCAweGJifSwKKwl7MHhiNiwgMHgxMiwgMHhmOCwgMHhjY30sCisJezB4YjgsIDB4MGMsIDB4MjAsIDB4Y2N9LAorCXsweGI4LCAweDBkLCAweDcwLCAweGNjfSwKKwl7MHhiNiwgMHgxMywgMHgxMywgMHhjY30sCisJezB4MmYsIDB4MDAsIDB4QzAsIDB4YmJ9LAorCXsweGI4LCAweGEwLCAweDEyLCAweGNjfSwKIAl7fSwKIH07Ci1zdGF0aWMgY29uc3QgX191OCBtaTEzMTBfc29jaW5pdFFWR0FfSlBHW11bNF0gPSB7Ci0JezB4YjAsIDB4MDMsIDB4MTksIDB4Y2N9LAl7MHhiMCwgMHgwNCwgMHgwMiwgMHhjY30sCi0JezB4YjMsIDB4MDAsIDB4NjQsIDB4Y2N9LAl7MHhiMywgMHgwMCwgMHg2NSwgMHhjY30sCi0JezB4YjMsIDB4MDUsIDB4MDAsIDB4Y2N9LAl7MHhiMywgMHgwNiwgMHgwMCwgMHhjY30sCi0JezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAl7MHhiMywgMHgwOSwgMHgwYywgMHhjY30sCi0JezB4YjMsIDB4MzQsIDB4MDIsIDB4Y2N9LAl7MHhiMywgMHgzNSwgMHhkZCwgMHhjY30sCi0JezB4YjMsIDB4MDIsIDB4MDAsIDB4Y2N9LAl7MHhiMywgMHgwMywgMHgwYSwgMHhjY30sCi0JezB4YjMsIDB4MDQsIDB4MDUsIDB4Y2N9LAl7MHhiMywgMHgyMCwgMHgwMCwgMHhjY30sCi0JezB4YjMsIDB4MjEsIDB4MDAsIDB4Y2N9LAl7MHhiMywgMHgyMiwgMHgwMywgMHhjY30sCi0JezB4YjMsIDB4MjMsIDB4YzAsIDB4Y2N9LAl7MHhiMywgMHgxNCwgMHgwMCwgMHhjY30sCi0JezB4YjMsIDB4MTUsIDB4MDAsIDB4Y2N9LAl7MHhiMywgMHgxNiwgMHgwNCwgMHhjY30sCi0JezB4YjMsIDB4MTcsIDB4ZmYsIDB4Y2N9LAl7MHhiMywgMHgwMCwgMHg2NSwgMHhjY30sCi0JezB4YjgsIDB4MDAsIDB4MDAsIDB4Y2N9LAl7MHhiYywgMHgwMCwgMHhmMCwgMHhjY30sCi0JezB4YmMsIDB4MDEsIDB4MDEsIDB4Y2N9LAl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCi0JezB4YzgsIDB4OWYsIDB4MGIsIDB4YmJ9LAl7MHg1YiwgMHgwMCwgMHgwMSwgMHhiYn0sCi0JezB4MmYsIDB4ZGUsIDB4MjAsIDB4YmJ9LAl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCi0JezB4MjAsIDB4MDMsIDB4MDIsIDB4YmJ9LAl7MHhmMCwgMHgwMCwgMHgwMSwgMHhiYn0sCi0JezB4MDUsIDB4MDAsIDB4MDcsIDB4YmJ9LAl7MHgzNCwgMHgwMCwgMHgwMCwgMHhiYn0sCi0JezB4MzUsIDB4ZmYsIDB4MDAsIDB4YmJ9LAl7MHhkYywgMHgwNywgMHgwMiwgMHhiYn0sCi0JezB4ZGQsIDB4M2MsIDB4MTgsIDB4YmJ9LAl7MHhkZSwgMHg5MiwgMHg2ZCwgMHhiYn0sCi0JezB4ZGYsIDB4Y2QsIDB4YjEsIDB4YmJ9LAl7MHhlMCwgMHhmZiwgMHhlNywgMHhiYn0sCi0JezB4MDYsIDB4ZjAsIDB4MGQsIDB4YmJ9LAl7MHgwNiwgMHg3MCwgMHgwZSwgMHhiYn0sCi0JezB4NGMsIDB4MDAsIDB4MDEsIDB4YmJ9LAl7MHg0ZCwgMHgwMCwgMHgwMSwgMHhiYn0sCi0JezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAl7MHgyZSwgMHgwYywgMHg1NSwgMHhiYn0sCi0JezB4MjEsIDB4YjYsIDB4NmUsIDB4YmJ9LAl7MHgzNiwgMHgzMCwgMHgxMCwgMHhiYn0sCi0JezB4MzcsIDB4MDAsIDB4YzEsIDB4YmJ9LAl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCi0JezB4MDcsIDB4MDAsIDB4ODQsIDB4YmJ9LAl7MHgwOCwgMHgwMiwgMHg0YSwgMHhiYn0sCi0JezB4MDUsIDB4MDEsIDB4MTAsIDB4YmJ9LAl7MHgwNiwgMHgwMCwgMHgzOSwgMHhiYn0sCi0JezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAl7MHg1OCwgMHgwMiwgMHg2NywgMHhiYn0sCi0JezB4NTcsIDB4MDIsIDB4MDAsIDB4YmJ9LAl7MHg1YSwgMHgwMiwgMHg2NywgMHhiYn0sCi0JezB4NTksIDB4MDIsIDB4MDAsIDB4YmJ9LAl7MHg1YywgMHgxMiwgMHgwZCwgMHhiYn0sCi0JezB4NWQsIDB4MTYsIDB4MTEsIDB4YmJ9LAl7MHgzOSwgMHgwNiwgMHgxOCwgMHhiYn0sCi0JezB4M2EsIDB4MDYsIDB4MTgsIDB4YmJ9LAl7MHgzYiwgMHgwNiwgMHgxOCwgMHhiYn0sCi0JezB4M2MsIDB4MDYsIDB4MTgsIDB4YmJ9LAl7MHg2NCwgMHg3YiwgMHg1YiwgMHhiYn0sCi0JezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAl7MHgzNiwgMHgzMCwgMHgxMCwgMHhiYn0sCi0JezB4MzcsIDB4MDAsIDB4YzAsIDB4YmJ9LAl7MHhiYywgMHgwZSwgMHgwMCwgMHhjY30sCi0JezB4YmMsIDB4MGYsIDB4MDUsIDB4Y2N9LAl7MHhiYywgMHgxMCwgMHhjMCwgMHhjY30sCi0JezB4YmMsIDB4MTEsIDB4MDMsIDB4Y2N9LAl7MHhiNiwgMHgwMCwgMHgwMCwgMHhjY30sCi0JezB4YjYsIDB4MDMsIDB4MDEsIDB4Y2N9LAl7MHhiNiwgMHgwMiwgMHg0MCwgMHhjY30sCi0JezB4YjYsIDB4MDUsIDB4MDAsIDB4Y2N9LAl7MHhiNiwgMHgwNCwgMHhmMCwgMHhjY30sCi0JezB4YjYsIDB4MTIsIDB4ZjgsIDB4Y2N9LAl7MHhiNiwgMHgxMywgMHgyNSwgMHhjY30sCi0JezB4YjYsIDB4MTgsIDB4MDAsIDB4Y2N9LAl7MHhiNiwgMHgxNywgMHg5NiwgMHhjY30sCi0JezB4YjYsIDB4MTYsIDB4MDAsIDB4Y2N9LAl7MHhiNiwgMHgyMiwgMHgxMiwgMHhjY30sCi0JezB4YjYsIDB4MjMsIDB4MGIsIDB4Y2N9LAl7MHhiZiwgMHhjMCwgMHgzOSwgMHhjY30sCi0JezB4YmYsIDB4YzEsIDB4MDQsIDB4Y2N9LAl7MHhiZiwgMHhjYywgMHgwMCwgMHhjY30sCi0JezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAl7MHhmMCwgMHgwMCwgMHgwMSwgMHhiYn0sCi0JezB4ODAsIDB4MDAsIDB4MDMsIDB4YmJ9LAl7MHg4MSwgMHhjNywgMHgxNCwgMHhiYn0sCi0JezB4ODIsIDB4ZWIsIDB4ZTgsIDB4YmJ9LAl7MHg4MywgMHhmZSwgMHhmNCwgMHhiYn0sCi0JezB4ODQsIDB4Y2QsIDB4MTAsIDB4YmJ9LAl7MHg4NSwgMHhmMywgMHhlZSwgMHhiYn0sCi0JezB4ODYsIDB4ZmYsIDB4ZjEsIDB4YmJ9LAl7MHg4NywgMHhjZCwgMHgxMCwgMHhiYn0sCi0JezB4ODgsIDB4ZjMsIDB4ZWUsIDB4YmJ9LAl7MHg4OSwgMHgwMSwgMHhmMSwgMHhiYn0sCi0JezB4OGEsIDB4ZTUsIDB4MTcsIDB4YmJ9LAl7MHg4YiwgMHhlOCwgMHhlMiwgMHhiYn0sCi0JezB4OGMsIDB4ZjcsIDB4ZWQsIDB4YmJ9LAl7MHg4ZCwgMHgwMCwgMHhmZiwgMHhiYn0sCi0JezB4OGUsIDB4ZWMsIDB4MTAsIDB4YmJ9LAl7MHg4ZiwgMHhmMCwgMHhlZCwgMHhiYn0sCi0JezB4OTAsIDB4ZjksIDB4ZjIsIDB4YmJ9LAl7MHg5MSwgMHgwMCwgMHgwMCwgMHhiYn0sCi0JezB4OTIsIDB4ZTksIDB4MGQsIDB4YmJ9LAl7MHg5MywgMHhmNCwgMHhmMiwgMHhiYn0sCi0JezB4OTQsIDB4ZmIsIDB4ZjUsIDB4YmJ9LAl7MHg5NSwgMHgwMCwgMHhmZiwgMHhiYn0sCi0JezB4YjYsIDB4MGYsIDB4MDgsIDB4YmJ9LAl7MHhiNywgMHgzZCwgMHgxNiwgMHhiYn0sCi0JezB4YjgsIDB4MGMsIDB4MDQsIDB4YmJ9LAl7MHhiOSwgMHgxYywgMHgwNywgMHhiYn0sCi0JezB4YmEsIDB4MGEsIDB4MDMsIDB4YmJ9LAl7MHhiYiwgMHgxYiwgMHgwOSwgMHhiYn0sCi0JezB4YmMsIDB4MTcsIDB4MGQsIDB4YmJ9LAl7MHhiZCwgMHgyMywgMHgxZCwgMHhiYn0sCi0JezB4YmUsIDB4MDAsIDB4MjgsIDB4YmJ9LAl7MHhiZiwgMHgxMSwgMHgwOSwgMHhiYn0sCi0JezB4YzAsIDB4MTYsIDB4MTUsIDB4YmJ9LAl7MHhjMSwgMHgwMCwgMHgxYiwgMHhiYn0sCi0JezB4YzIsIDB4MGUsIDB4MDcsIDB4YmJ9LAl7MHhjMywgMHgxNCwgMHgxMCwgMHhiYn0sCi0JezB4YzQsIDB4MDAsIDB4MTcsIDB4YmJ9LAl7MHgwNiwgMHg3NCwgMHg4ZSwgMHhiYn0sCi0JezB4ZjAsIDB4MDAsIDB4MDEsIDB4YmJ9LAl7MHgwNiwgMHhmNCwgMHg4ZSwgMHhiYn0sCi0JezB4MDAsIDB4MDAsIDB4NTAsIDB4ZGR9LAl7MHgwNiwgMHg3NCwgMHg4ZSwgMHhiYn0sCi0JezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAl7MHgyNCwgMHg1MCwgMHgyMCwgMHhiYn0sCi0JezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAl7MHgzNCwgMHgwYywgMHg1MCwgMHhiYn0sCi0JezB4YjMsIDB4MDEsIDB4NDEsIDB4Y2N9LAl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCi0JezB4MDMsIDB4MDMsIDB4YzAsIDB4YmJ9LAotCXt9LAorc3RhdGljIGNvbnN0IHU4IG1pMTMxMF9zb2NfSW5pdFNYR0FfSlBHW11bNF0gPSB7CisJezB4YjAsIDB4MDMsIDB4MTksIDB4Y2N9LAorCXsweGIwLCAweDA0LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHgyNCwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4MjUsIDB4Y2N9LAorCXsweGIzLCAweDA1LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwNiwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA4LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwOSwgMHgwYywgMHhjY30sCisJezB4YjMsIDB4MzQsIDB4MDIsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweGRkLCAweGNjfSwKKwl7MHhiMywgMHgwMywgMHgwYSwgMHhjY30sCisJezB4YjMsIDB4MDQsIDB4MGQsIDB4Y2N9LAorCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjIsIDB4MDQsIDB4Y2N9LAorCXsweGIzLCAweDIzLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE2LCAweDA0LCAweGNjfSwKKwl7MHhiMywgMHgxNywgMHhmZiwgMHhjY30sCisJezB4YjgsIDB4MDEsIDB4N2QsIDB4Y2N9LAorCXsweGI4LCAweDgxLCAweDA5LCAweGNjfSwKKwl7MHhiOCwgMHgyNywgMHgyMCwgMHhjY30sCisJezB4YjgsIDB4MjYsIDB4ODAsIDB4Y2N9LAorCXsweGI4LCAweDA2LCAweDAwLCAweGNjfSwKKwl7MHhiOCwgMHgwNywgMHgwNSwgMHhjY30sCisJezB4YjgsIDB4MDgsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDA5LCAweDA0LCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHgyNSwgMHhjY30sCisJezB4YjgsIDB4MDAsIDB4MTEsIDB4Y2N9LAorCXsweGJjLCAweDAwLCAweDcxLCAweGNjfSwKKwl7MHhiOCwgMHg4MSwgMHgwMSwgMHhjY30sCisJezB4YjgsIDB4MmMsIDB4NWEsIDB4Y2N9LAorCXsweGI4LCAweDJkLCAweGZmLCAweGNjfSwKKwl7MHhiOCwgMHgyZSwgMHhlZSwgMHhjY30sCisJezB4YjgsIDB4MmYsIDB4ZmIsIDB4Y2N9LAorCXsweGI4LCAweDMwLCAweDUyLCAweGNjfSwKKwl7MHhiOCwgMHgzMSwgMHhmOCwgMHhjY30sCisJezB4YjgsIDB4MzIsIDB4ZjEsIDB4Y2N9LAorCXsweGI4LCAweDMzLCAweGZmLCAweGNjfSwKKwl7MHhiOCwgMHgzNCwgMHg1NCwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAxLCAweDAwLCAweGRkfSwKKwl7MHgwZCwgMHgwMCwgMHgwOSwgMHhiYn0sCisJezB4MGQsIDB4MDAsIDB4MDgsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHgwMCwgMHgwMSwgMHgwMCwgMHhkZH0sCisJezB4MDYsIDB4MDAsIDB4MTQsIDB4YmJ9LAorCXsweDNhLCAweDEwLCAweDAwLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgxMCwgMHhkZH0sCisJezB4OWIsIDB4MTAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDEsIDB4MDAsIDB4ZGR9LAorCXsweDJiLCAweDAwLCAweDI4LCAweGJifSwKKwl7MHgyYywgMHgwMCwgMHgzMCwgMHhiYn0sCisJezB4MmQsIDB4MDAsIDB4MzAsIDB4YmJ9LAorCXsweDJlLCAweDAwLCAweDI4LCAweGJifSwKKwl7MHg0MSwgMHgwMCwgMHhkNywgMHhiYn0sCisJezB4MDksIDB4MDIsIDB4M2EsIDB4YmJ9LAorCXsweDBjLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgyMCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDUsIDB4MDAsIDB4OGMsIDB4YmJ9LAorCXsweDA2LCAweDAwLCAweDMyLCAweGJifSwKKwl7MHgwNywgMHgwMCwgMHhjNiwgMHhiYn0sCisJezB4MDgsIDB4MDAsIDB4MTksIDB4YmJ9LAorCXsweDI0LCAweDgwLCAweDZmLCAweGJifSwKKwl7MHhjOCwgMHgwMCwgMHgwZiwgMHhiYn0sCisJezB4MjAsIDB4MDAsIDB4MDMsIDB4YmJ9LAorCXsweGI2LCAweDAwLCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgwMywgMHgwNSwgMHhjY30sCisJezB4YjYsIDB4MDIsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDA1LCAweDA0LCAweGNjfSwKKwl7MHhiNiwgMHgwNCwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MTIsIDB4ZjgsIDB4Y2N9LAorCXsweGI2LCAweDE4LCAweDBhLCAweGNjfSwKKwl7MHhiNiwgMHgxNywgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MTYsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDIyLCAweDEyLCAweGNjfSwKKwl7MHhiNiwgMHgyMywgMHgwYiwgMHhjY30sCisJezB4YjMsIDB4MDIsIDB4MDIsIDB4Y2N9LAorCXsweGJmLCAweGMwLCAweDM5LCAweGNjfSwKKwl7MHhiZiwgMHhjMSwgMHgwNCwgMHhjY30sCisJezB4YmYsIDB4Y2MsIDB4MTAsIDB4Y2N9LAorCXsweGI5LCAweDEyLCAweDAwLCAweGNjfSwKKwl7MHhiOSwgMHgxMywgMHgxNCwgMHhjY30sCisJezB4YjksIDB4MTQsIDB4MTQsIDB4Y2N9LAorCXsweGI5LCAweDE1LCAweDE0LCAweGNjfSwKKwl7MHhiOSwgMHgxNiwgMHgxNCwgMHhjY30sCisJezB4YjksIDB4MTgsIDB4MDAsIDB4Y2N9LAorCXsweGI5LCAweDE5LCAweDFlLCAweGNjfSwKKwl7MHhiOSwgMHgxYSwgMHgxZSwgMHhjY30sCisJezB4YjksIDB4MWIsIDB4MWUsIDB4Y2N9LAorCXsweGI5LCAweDFjLCAweDFlLCAweGNjfSwKKwl7MHhiMywgMHgwMSwgMHg0MSwgMHhjY30sCisJezB4YjgsIDB4OGUsIDB4MDAsIDB4Y2N9LAorCXsweGI4LCAweDhmLCAweGZmLCAweGNjfSwKKwl7MHhiNiwgMHgxMiwgMHhmOCwgMHhjY30sCisJezB4YjgsIDB4MGMsIDB4MjAsIDB4Y2N9LAorCXsweGI4LCAweDBkLCAweDcwLCAweGNjfSwKKwl7MHhiNiwgMHgxMywgMHgxMywgMHhjY30sCisJezB4MmYsIDB4MDAsIDB4QzAsIDB4YmJ9LAorCXsweGI4LCAweGEwLCAweDEyLCAweGNjfSwKKwl7fQogfTsKIAogc3RhdGljIGNvbnN0IF9fdTggbWkxMzIwX2dhbW1hWzE3XSA9IHsKQEAgLTc3OCw2ICs5MzEsNzIyIEBACiAJe30KIH07CiAKK3N0YXRpYyBjb25zdCB1OCBtaTEzMjBfc29jX0luaXRWR0FbXVs0XSA9IHsKKwl7MHhiMywgMHgwMSwgMHgwMSwgMHhjY30sCisJezB4YjAsIDB4MDMsIDB4MTksIDB4Y2N9LAorCXsweGIwLCAweDA0LCAweDAyLCAweGNjfSwKKwl7MHgwMCwgMHgwMCwgMHgzMCwgMHhkZH0sCisJezB4YjMsIDB4MDAsIDB4NjQsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDY3LCAweGNjfSwKKwl7MHhiMywgMHgwNSwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDYsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA4LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwOSwgMHgwYywgMHhjY30sCisJezB4YjMsIDB4MzQsIDB4MDIsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweGM4LCAweGNjfSwKKwl7MHhiMywgMHgwMiwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MDMsIDB4MGEsIDB4Y2N9LAorCXsweGIzLCAweDA0LCAweDA1LCAweGNjfSwKKwl7MHhiMywgMHgyMCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjEsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIyLCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgyMywgMHhlMCwgMHhjY30sCisJezB4YjMsIDB4MTQsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE1LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNiwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MTcsIDB4N2YsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDY3LCAweGNjfSwKKwl7MHhiOCwgMHgwMCwgMHgwMCwgMHhjY30sCisJezB4YmMsIDB4MDAsIDB4NzEsIDB4Y2N9LAorCXsweGJjLCAweDAxLCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHhjOCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MzAsIDB4ZGR9LAorCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgxMCwgMHhkZH0sCisJezB4MDcsIDB4MDAsIDB4ZTAsIDB4YmJ9LAorCXsweDA4LCAweDAwLCAweDBiLCAweGJifSwKKwl7MHgyMSwgMHgwMCwgMHgwYywgMHhiYn0sCisJezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweGJmLCAweGMwLCAweDI2LCAweGNjfSwKKwl7MHhiZiwgMHhjMSwgMHgwMiwgMHhjY30sCisJezB4YmYsIDB4Y2MsIDB4MDQsIDB4Y2N9LAorCXsweGIzLCAweDAxLCAweDQxLCAweGNjfSwKKwl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDUsIDB4MDEsIDB4NzgsIDB4YmJ9LAorCXsweDA2LCAweDAwLCAweDExLCAweGJifSwKKwl7MHgwNywgMHgwMSwgMHg0MiwgMHhiYn0sCisJezB4MDgsIDB4MDAsIDB4MTEsIDB4YmJ9LAorCXsweDIwLCAweDAxLCAweDAzLCAweGJifSwKKwl7MHgyMSwgMHg4MCwgMHgwMCwgMHhiYn0sCisJezB4MjIsIDB4MGQsIDB4MGYsIDB4YmJ9LAorCXsweDI0LCAweDgwLCAweDAwLCAweGJifSwKKwl7MHg1OSwgMHgwMCwgMHhmZiwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDM5LCAweDAzLCAweGNhLCAweGJifSwKKwl7MHgzYSwgMHgwNiwgMHg4MCwgMHhiYn0sCisJezB4M2IsIDB4MDEsIDB4NTIsIDB4YmJ9LAorCXsweDNjLCAweDA1LCAweDQwLCAweGJifSwKKwl7MHg1NywgMHgwMSwgMHg5YywgMHhiYn0sCisJezB4NTgsIDB4MDEsIDB4ZWUsIDB4YmJ9LAorCXsweDU5LCAweDAwLCAweGYwLCAweGJifSwKKwl7MHg1YSwgMHgwMSwgMHgyMCwgMHhiYn0sCisJezB4NWMsIDB4MWQsIDB4MTcsIDB4YmJ9LAorCXsweDVkLCAweDIyLCAweDFjLCAweGJifSwKKwl7MHg2NCwgMHgxZSwgMHgxYywgMHhiYn0sCisJezB4NWIsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgyMiwgMHhhMCwgMHg3OCwgMHhiYn0sCisJezB4MjMsIDB4YTAsIDB4NzgsIDB4YmJ9LAorCXsweDI0LCAweDdmLCAweDAwLCAweGJifSwKKwl7MHgyOCwgMHhlYSwgMHgwMiwgMHhiYn0sCisJezB4MjksIDB4ODYsIDB4N2EsIDB4YmJ9LAorCXsweDVlLCAweDUyLCAweDRjLCAweGJifSwKKwl7MHg1ZiwgMHgyMCwgMHgyNCwgMHhiYn0sCisJezB4NjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDAyLCAweDAwLCAweGVlLCAweGJifSwKKwl7MHgwMywgMHgzOSwgMHgyMywgMHhiYn0sCisJezB4MDQsIDB4MDcsIDB4MjQsIDB4YmJ9LAorCXsweDA5LCAweDAwLCAweGMwLCAweGJifSwKKwl7MHgwYSwgMHgwMCwgMHg3OSwgMHhiYn0sCisJezB4MGIsIDB4MDAsIDB4MDQsIDB4YmJ9LAorCXsweDBjLCAweDAwLCAweDVjLCAweGJifSwKKwl7MHgwZCwgMHgwMCwgMHhkOSwgMHhiYn0sCisJezB4MGUsIDB4MDAsIDB4NTMsIDB4YmJ9LAorCXsweDBmLCAweDAwLCAweDIxLCAweGJifSwKKwl7MHgxMCwgMHgwMCwgMHhhNCwgMHhiYn0sCisJezB4MTEsIDB4MDAsIDB4ZTUsIDB4YmJ9LAorCXsweDE1LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxNiwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTcsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE4LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxOSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWEsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFiLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxYywgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWQsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFlLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMSwgMHhiYn0sCisJezB4MDYsIDB4ZTAsIDB4MGUsIDB4YmJ9LAorCXsweDA2LCAweDYwLCAweDBlLCAweGJifSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCisJe30KK307CitzdGF0aWMgY29uc3QgdTggbWkxMzIwX3NvY19Jbml0VkdBX0pQR1tdWzRdID0geworCXsweGIzLCAweDAxLCAweDAxLCAweGNjfSwKKwl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCisJezB4YjAsIDB4MDQsIDB4MDIsIDB4Y2N9LAorCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwKKwl7MHhiMywgMHgwMCwgMHg2NCwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4NjcsIDB4Y2N9LAorCXsweGIzLCAweDA1LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwNiwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwKKwl7MHhiMywgMHgzNCwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4YzgsIDB4Y2N9LAorCXsweGIzLCAweDAyLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwMywgMHgwYSwgMHhjY30sCisJezB4YjMsIDB4MDQsIDB4MDUsIDB4Y2N9LAorCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjIsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDIzLCAweGUwLCAweGNjfSwKKwl7MHhiMywgMHgxNCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE2LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgxNywgMHg3ZiwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4NjcsIDB4Y2N9LAorCXsweGI4LCAweDAwLCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwMCwgMHg3MSwgMHhjY30sCisJezB4YmMsIDB4MDEsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAorCXsweGM4LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgzMCwgMHhkZH0sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHgwNywgMHgwMCwgMHhlMCwgMHhiYn0sCisJezB4MDgsIDB4MDAsIDB4MGIsIDB4YmJ9LAorCXsweDIxLCAweDAwLCAweDBjLCAweGJifSwKKwl7MHgyMCwgMHgwMSwgMHgwMywgMHhiYn0sCisJezB4YjYsIDB4MDAsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDAzLCAweDAyLCAweGNjfSwKKwl7MHhiNiwgMHgwMiwgMHg4MCwgMHhjY30sCisJezB4YjYsIDB4MDUsIDB4MDEsIDB4Y2N9LAorCXsweGI2LCAweDA0LCAweGUwLCAweGNjfSwKKwl7MHhiNiwgMHgxMiwgMHhmOCwgMHhjY30sCisJezB4YjYsIDB4MTMsIDB4MDUsIDB4Y2N9LAorCXsweGI2LCAweDE4LCAweDAyLCAweGNjfSwKKwl7MHhiNiwgMHgxNywgMHg1OCwgMHhjY30sCisJezB4YjYsIDB4MTYsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDIyLCAweDEyLCAweGNjfSwKKwl7MHhiNiwgMHgyMywgMHgwYiwgMHhjY30sCisJezB4YmYsIDB4YzAsIDB4MzksIDB4Y2N9LAorCXsweGJmLCAweGMxLCAweDA0LCAweGNjfSwKKwl7MHhiZiwgMHhjYywgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MDEsIDB4NDEsIDB4Y2N9LAorCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwNSwgMHgwMSwgMHg3OCwgMHhiYn0sCisJezB4MDYsIDB4MDAsIDB4MTEsIDB4YmJ9LAorCXsweDA3LCAweDAxLCAweDQyLCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgxMSwgMHhiYn0sCisJezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweDIxLCAweDgwLCAweDAwLCAweGJifSwKKwl7MHgyMiwgMHgwZCwgMHgwZiwgMHhiYn0sCisJezB4MjQsIDB4ODAsIDB4MDAsIDB4YmJ9LAorCXsweDU5LCAweDAwLCAweGZmLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MzksIDB4MDMsIDB4Y2EsIDB4YmJ9LAorCXsweDNhLCAweDA2LCAweDgwLCAweGJifSwKKwl7MHgzYiwgMHgwMSwgMHg1MiwgMHhiYn0sCisJezB4M2MsIDB4MDUsIDB4NDAsIDB4YmJ9LAorCXsweDU3LCAweDAxLCAweDljLCAweGJifSwKKwl7MHg1OCwgMHgwMSwgMHhlZSwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZjAsIDB4YmJ9LAorCXsweDVhLCAweDAxLCAweDIwLCAweGJifSwKKwl7MHg1YywgMHgxZCwgMHgxNywgMHhiYn0sCisJezB4NWQsIDB4MjIsIDB4MWMsIDB4YmJ9LAorCXsweDY0LCAweDFlLCAweDFjLCAweGJifSwKKwl7MHg1YiwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDIyLCAweGEwLCAweDc4LCAweGJifSwKKwl7MHgyMywgMHhhMCwgMHg3OCwgMHhiYn0sCisJezB4MjQsIDB4N2YsIDB4MDAsIDB4YmJ9LAorCXsweDI4LCAweGVhLCAweDAyLCAweGJifSwKKwl7MHgyOSwgMHg4NiwgMHg3YSwgMHhiYn0sCisJezB4NWUsIDB4NTIsIDB4NGMsIDB4YmJ9LAorCXsweDVmLCAweDIwLCAweDI0LCAweGJifSwKKwl7MHg2MCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MDIsIDB4MDAsIDB4ZWUsIDB4YmJ9LAorCXsweDAzLCAweDM5LCAweDIzLCAweGJifSwKKwl7MHgwNCwgMHgwNywgMHgyNCwgMHhiYn0sCisJezB4MDksIDB4MDAsIDB4YzAsIDB4YmJ9LAorCXsweDBhLCAweDAwLCAweDc5LCAweGJifSwKKwl7MHgwYiwgMHgwMCwgMHgwNCwgMHhiYn0sCisJezB4MGMsIDB4MDAsIDB4NWMsIDB4YmJ9LAorCXsweDBkLCAweDAwLCAweGQ5LCAweGJifSwKKwl7MHgwZSwgMHgwMCwgMHg1MywgMHhiYn0sCisJezB4MGYsIDB4MDAsIDB4MjEsIDB4YmJ9LAorCXsweDEwLCAweDAwLCAweGE0LCAweGJifSwKKwl7MHgxMSwgMHgwMCwgMHhlNSwgMHhiYn0sCisJezB4MTUsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE2LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxNywgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTgsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE5LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxYSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWIsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFjLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxZCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWUsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHgwNiwgMHhlMCwgMHgwZSwgMHhiYn0sCisJezB4MDYsIDB4NjAsIDB4MGUsIDB4YmJ9LAorCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwKKwl7fQorfTsKK3N0YXRpYyBjb25zdCB1OCBtaTEzMjBfc29jX0luaXRRVkdBW11bNF0gPSB7CisJezB4YjMsIDB4MDEsIDB4MDEsIDB4Y2N9LAorCXsweGIwLCAweDAzLCAweDE5LCAweGNjfSwKKwl7MHhiMCwgMHgwNCwgMHgwMiwgMHhjY30sCisJezB4MDAsIDB4MDAsIDB4MzAsIDB4ZGR9LAorCXsweGIzLCAweDAwLCAweDY0LCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCisJezB4YjMsIDB4MDUsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA2LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwOCwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDksIDB4MGMsIDB4Y2N9LAorCXsweGIzLCAweDM0LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgzNSwgMHhjOCwgMHhjY30sCisJezB4YjMsIDB4MDIsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDAzLCAweDBhLCAweGNjfSwKKwl7MHhiMywgMHgwNCwgMHgwNSwgMHhjY30sCisJezB4YjMsIDB4MjAsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIxLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMiwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MjMsIDB4ZTAsIDB4Y2N9LAorCXsweGIzLCAweDE0LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTYsIDB4MDIsIDB4Y2N9LAorCXsweGIzLCAweDE3LCAweDdmLCAweGNjfSwKKwl7MHhiMywgMHgwMCwgMHg2NywgMHhjY30sCisJezB4YjgsIDB4MDAsIDB4MDAsIDB4Y2N9LAorCXsweGJjLCAweDAwLCAweGQxLCAweGNjfSwKKwl7MHhiYywgMHgwMSwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgxMCwgMHhkZH0sCisJezB4YzgsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwKKwl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAorCXsweDA3LCAweDAwLCAweGUwLCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgwYiwgMHhiYn0sCisJezB4MjEsIDB4MDAsIDB4MGMsIDB4YmJ9LAorCXsweDIwLCAweDAxLCAweDAzLCAweGJifSwKKwl7MHhiZiwgMHhjMCwgMHgyNiwgMHhjY30sCisJezB4YmYsIDB4YzEsIDB4MDIsIDB4Y2N9LAorCXsweGJmLCAweGNjLCAweDA0LCAweGNjfSwKKwl7MHhiYywgMHgwMiwgMHgxOCwgMHhjY30sCisJezB4YmMsIDB4MDMsIDB4NTAsIDB4Y2N9LAorCXsweGJjLCAweDA0LCAweDE4LCAweGNjfSwKKwl7MHhiYywgMHgwNSwgMHgwMCwgMHhjY30sCisJezB4YmMsIDB4MDYsIDB4MDAsIDB4Y2N9LAorCXsweGJjLCAweDA4LCAweDMwLCAweGNjfSwKKwl7MHhiYywgMHgwOSwgMHg0MCwgMHhjY30sCisJezB4YmMsIDB4MGEsIDB4MTAsIDB4Y2N9LAorCXsweGJjLCAweDBiLCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwYywgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MDEsIDB4NDEsIDB4Y2N9LAorCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwNSwgMHgwMSwgMHg3OCwgMHhiYn0sCisJezB4MDYsIDB4MDAsIDB4MTEsIDB4YmJ9LAorCXsweDA3LCAweDAxLCAweDQyLCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgxMSwgMHhiYn0sCisJezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweDIxLCAweDgwLCAweDAwLCAweGJifSwKKwl7MHgyMiwgMHgwZCwgMHgwZiwgMHhiYn0sCisJezB4MjQsIDB4ODAsIDB4MDAsIDB4YmJ9LAorCXsweDU5LCAweDAwLCAweGZmLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MzksIDB4MDMsIDB4Y2EsIDB4YmJ9LAorCXsweDNhLCAweDA2LCAweDgwLCAweGJifSwKKwl7MHgzYiwgMHgwMSwgMHg1MiwgMHhiYn0sCisJezB4M2MsIDB4MDUsIDB4NDAsIDB4YmJ9LAorCXsweDU3LCAweDAxLCAweDljLCAweGJifSwKKwl7MHg1OCwgMHgwMSwgMHhlZSwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZjAsIDB4YmJ9LAorCXsweDVhLCAweDAxLCAweDIwLCAweGJifSwKKwl7MHg1YywgMHgxZCwgMHgxNywgMHhiYn0sCisJezB4NWQsIDB4MjIsIDB4MWMsIDB4YmJ9LAorCXsweDY0LCAweDFlLCAweDFjLCAweGJifSwKKwl7MHg1YiwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDIyLCAweGEwLCAweDc4LCAweGJifSwKKwl7MHgyMywgMHhhMCwgMHg3OCwgMHhiYn0sCisJezB4MjQsIDB4N2YsIDB4MDAsIDB4YmJ9LAorCXsweDI4LCAweGVhLCAweDAyLCAweGJifSwKKwl7MHgyOSwgMHg4NiwgMHg3YSwgMHhiYn0sCisJezB4NWUsIDB4NTIsIDB4NGMsIDB4YmJ9LAorCXsweDVmLCAweDIwLCAweDI0LCAweGJifSwKKwl7MHg2MCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MDIsIDB4MDAsIDB4ZWUsIDB4YmJ9LAorCXsweDAzLCAweDM5LCAweDIzLCAweGJifSwKKwl7MHgwNCwgMHgwNywgMHgyNCwgMHhiYn0sCisJezB4MDksIDB4MDAsIDB4YzAsIDB4YmJ9LAorCXsweDBhLCAweDAwLCAweDc5LCAweGJifSwKKwl7MHgwYiwgMHgwMCwgMHgwNCwgMHhiYn0sCisJezB4MGMsIDB4MDAsIDB4NWMsIDB4YmJ9LAorCXsweDBkLCAweDAwLCAweGQ5LCAweGJifSwKKwl7MHgwZSwgMHgwMCwgMHg1MywgMHhiYn0sCisJezB4MGYsIDB4MDAsIDB4MjEsIDB4YmJ9LAorCXsweDEwLCAweDAwLCAweGE0LCAweGJifSwKKwl7MHgxMSwgMHgwMCwgMHhlNSwgMHhiYn0sCisJezB4MTUsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE2LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxNywgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTgsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE5LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxYSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWIsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFjLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxZCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWUsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHgwNiwgMHhlMCwgMHgwZSwgMHhiYn0sCisJezB4MDYsIDB4NjAsIDB4MGUsIDB4YmJ9LAorCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwKKwl7fQorfTsKK3N0YXRpYyBjb25zdCB1OCBtaTEzMjBfc29jX0luaXRRVkdBX0pQR1tdWzRdID0geworCXsweGIzLCAweDAxLCAweDAxLCAweGNjfSwKKwl7MHhiMCwgMHgwMywgMHgxOSwgMHhjY30sCisJezB4YjAsIDB4MDQsIDB4MDIsIDB4Y2N9LAorCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwKKwl7MHhiMywgMHgwMCwgMHg2NCwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4NjcsIDB4Y2N9LAorCXsweGIzLCAweDA1LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwNiwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwKKwl7MHhiMywgMHgzNCwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4YzgsIDB4Y2N9LAorCXsweGIzLCAweDAyLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwMywgMHgwYSwgMHhjY30sCisJezB4YjMsIDB4MDQsIDB4MDUsIDB4Y2N9LAorCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjIsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDIzLCAweGUwLCAweGNjfSwKKwl7MHhiMywgMHgxNCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE2LCAweDAyLCAweGNjfSwKKwl7MHhiMywgMHgxNywgMHg3ZiwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4NjcsIDB4Y2N9LAorCXsweGI4LCAweDAwLCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwMCwgMHhkMSwgMHhjY30sCisJezB4YmMsIDB4MDEsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MTAsIDB4ZGR9LAorCXsweGM4LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgzMCwgMHhkZH0sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDEwLCAweGRkfSwKKwl7MHgwNywgMHgwMCwgMHhlMCwgMHhiYn0sCisJezB4MDgsIDB4MDAsIDB4MGIsIDB4YmJ9LAorCXsweDIxLCAweDAwLCAweDBjLCAweGJifSwKKwl7MHgyMCwgMHgwMSwgMHgwMywgMHhiYn0sCisJezB4YjYsIDB4MDAsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDAzLCAweDAxLCAweGNjfSwKKwl7MHhiNiwgMHgwMiwgMHg0MCwgMHhjY30sCisJezB4YjYsIDB4MDUsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDA0LCAweGYwLCAweGNjfSwKKwl7MHhiNiwgMHgxMiwgMHhmOCwgMHhjY30sCisJezB4YjYsIDB4MTMsIDB4MDUsIDB4Y2N9LAorCXsweGI2LCAweDE4LCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgxNywgMHg5NiwgMHhjY30sCisJezB4YjYsIDB4MTYsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDIyLCAweDEyLCAweGNjfSwKKwl7MHhiNiwgMHgyMywgMHgwYiwgMHhjY30sCisJezB4YmYsIDB4YzAsIDB4MzksIDB4Y2N9LAorCXsweGJmLCAweGMxLCAweDA0LCAweGNjfSwKKwl7MHhiZiwgMHhjYywgMHgwMCwgMHhjY30sCisJezB4YmMsIDB4MDIsIDB4MTgsIDB4Y2N9LAorCXsweGJjLCAweDAzLCAweDUwLCAweGNjfSwKKwl7MHhiYywgMHgwNCwgMHgxOCwgMHhjY30sCisJezB4YmMsIDB4MDUsIDB4MDAsIDB4Y2N9LAorCXsweGJjLCAweDA2LCAweDAwLCAweGNjfSwKKwl7MHhiYywgMHgwOCwgMHgzMCwgMHhjY30sCisJezB4YmMsIDB4MDksIDB4NDAsIDB4Y2N9LAorCXsweGJjLCAweDBhLCAweDEwLCAweGNjfSwKKwl7MHhiYywgMHgwYiwgMHgwMCwgMHhjY30sCisJezB4YmMsIDB4MGMsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDAxLCAweDQxLCAweGNjfSwKKwl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDUsIDB4MDEsIDB4NzgsIDB4YmJ9LAorCXsweDA2LCAweDAwLCAweDExLCAweGJifSwKKwl7MHgwNywgMHgwMSwgMHg0MiwgMHhiYn0sCisJezB4MDgsIDB4MDAsIDB4MTEsIDB4YmJ9LAorCXsweDIwLCAweDAxLCAweDAzLCAweGJifSwKKwl7MHgyMSwgMHg4MCwgMHgwMCwgMHhiYn0sCisJezB4MjIsIDB4MGQsIDB4MGYsIDB4YmJ9LAorCXsweDI0LCAweDgwLCAweDAwLCAweGJifSwKKwl7MHg1OSwgMHgwMCwgMHhmZiwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDM5LCAweDAzLCAweGNhLCAweGJifSwKKwl7MHgzYSwgMHgwNiwgMHg4MCwgMHhiYn0sCisJezB4M2IsIDB4MDEsIDB4NTIsIDB4YmJ9LAorCXsweDNjLCAweDA1LCAweDQwLCAweGJifSwKKwl7MHg1NywgMHgwMSwgMHg5YywgMHhiYn0sCisJezB4NTgsIDB4MDEsIDB4ZWUsIDB4YmJ9LAorCXsweDU5LCAweDAwLCAweGYwLCAweGJifSwKKwl7MHg1YSwgMHgwMSwgMHgyMCwgMHhiYn0sCisJezB4NWMsIDB4MWQsIDB4MTcsIDB4YmJ9LAorCXsweDVkLCAweDIyLCAweDFjLCAweGJifSwKKwl7MHg2NCwgMHgxZSwgMHgxYywgMHhiYn0sCisJezB4NWIsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgyMiwgMHhhMCwgMHg3OCwgMHhiYn0sCisJezB4MjMsIDB4YTAsIDB4NzgsIDB4YmJ9LAorCXsweDI0LCAweDdmLCAweDAwLCAweGJifSwKKwl7MHgyOCwgMHhlYSwgMHgwMiwgMHhiYn0sCisJezB4MjksIDB4ODYsIDB4N2EsIDB4YmJ9LAorCXsweDVlLCAweDUyLCAweDRjLCAweGJifSwKKwl7MHg1ZiwgMHgyMCwgMHgyNCwgMHhiYn0sCisJezB4NjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDAyLCAweDAwLCAweGVlLCAweGJifSwKKwl7MHgwMywgMHgzOSwgMHgyMywgMHhiYn0sCisJezB4MDQsIDB4MDcsIDB4MjQsIDB4YmJ9LAorCXsweDA5LCAweDAwLCAweGMwLCAweGJifSwKKwl7MHgwYSwgMHgwMCwgMHg3OSwgMHhiYn0sCisJezB4MGIsIDB4MDAsIDB4MDQsIDB4YmJ9LAorCXsweDBjLCAweDAwLCAweDVjLCAweGJifSwKKwl7MHgwZCwgMHgwMCwgMHhkOSwgMHhiYn0sCisJezB4MGUsIDB4MDAsIDB4NTMsIDB4YmJ9LAorCXsweDBmLCAweDAwLCAweDIxLCAweGJifSwKKwl7MHgxMCwgMHgwMCwgMHhhNCwgMHhiYn0sCisJezB4MTEsIDB4MDAsIDB4ZTUsIDB4YmJ9LAorCXsweDE1LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxNiwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTcsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE4LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxOSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWEsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFiLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxYywgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWQsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFlLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMSwgMHhiYn0sCisJezB4MDYsIDB4ZTAsIDB4MGUsIDB4YmJ9LAorCXsweDA2LCAweDYwLCAweDBlLCAweGJifSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCisJe30KK307CitzdGF0aWMgY29uc3QgdTggbWkxMzIwX3NvY19Jbml0U1hHQV9KUEdbXVs0XSA9IHsKKwl7MHhiMywgMHgwMSwgMHgwMSwgMHhjY30sCisJezB4YjAsIDB4MDMsIDB4MTksIDB4Y2N9LAorCXsweGIwLCAweDA0LCAweDAyLCAweGNjfSwKKwl7MHgwMCwgMHgwMCwgMHgzMywgMHhkZH0sCisJezB4YjMsIDB4MDAsIDB4NjQsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDY3LCAweGNjfSwKKwl7MHhiMywgMHgwNSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MDYsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDA4LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwOSwgMHgwYywgMHhjY30sCisJezB4YjMsIDB4MzQsIDB4MDIsIDB4Y2N9LAorCXsweGIzLCAweDM1LCAweGM4LCAweGNjfSwKKwl7MHhiMywgMHgwMiwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MDMsIDB4MGEsIDB4Y2N9LAorCXsweGIzLCAweDA0LCAweDA1LCAweGNjfSwKKwl7MHhiMywgMHgyMCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjEsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDIyLCAweDA0LCAweGNjfSwKKwl7MHhiMywgMHgyMywgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTQsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE1LCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNiwgMHgwNCwgMHhjY30sCisJezB4YjMsIDB4MTcsIDB4ZmYsIDB4Y2N9LAorCXsweGIzLCAweDAwLCAweDY3LCAweGNjfSwKKwl7MHhiYywgMHgwMCwgMHg3MSwgMHhjY30sCisJezB4YmMsIDB4MDEsIDB4MDEsIDB4Y2N9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgzMCwgMHhkZH0sCisJezB4YzgsIDB4OWYsIDB4MGIsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDIwLCAweGRkfSwKKwl7MHg1YiwgMHgwMCwgMHgwMSwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MjAsIDB4ZGR9LAorCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgzMCwgMHhkZH0sCisJezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDIwLCAweGRkfSwKKwl7MHhiNiwgMHgwMCwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MDMsIDB4MDUsIDB4Y2N9LAorCXsweGI2LCAweDAyLCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgwNSwgMHgwNCwgMHhjY30sCisJezB4YjYsIDB4MDQsIDB4MDAsIDB4Y2N9LAorCXsweGI2LCAweDEyLCAweGY4LCAweGNjfSwKKwl7MHhiNiwgMHgxMywgMHgyOSwgMHhjY30sCisJezB4YjYsIDB4MTgsIDB4MGEsIDB4Y2N9LAorCXsweGI2LCAweDE3LCAweDAwLCAweGNjfSwKKwl7MHhiNiwgMHgxNiwgMHgwMCwgMHhjY30sCisJezB4YjYsIDB4MjIsIDB4MTIsIDB4Y2N9LAorCXsweGI2LCAweDIzLCAweDBiLCAweGNjfSwKKwl7MHhiZiwgMHhjMCwgMHgzOSwgMHhjY30sCisJezB4YmYsIDB4YzEsIDB4MDQsIDB4Y2N9LAorCXsweGJmLCAweGNjLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHg1YywgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDEsIDB4NDEsIDB4Y2N9LAorCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwNSwgMHgwMSwgMHg3OCwgMHhiYn0sCisJezB4MDYsIDB4MDAsIDB4MTEsIDB4YmJ9LAorCXsweDA3LCAweDAxLCAweDQyLCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgxMSwgMHhiYn0sCisJezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweDIxLCAweDgwLCAweDAwLCAweGJifSwKKwl7MHgyMiwgMHgwZCwgMHgwZiwgMHhiYn0sCisJezB4MjQsIDB4ODAsIDB4MDAsIDB4YmJ9LAorCXsweDU5LCAweDAwLCAweGZmLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MzksIDB4MDMsIDB4Y2EsIDB4YmJ9LAorCXsweDNhLCAweDA2LCAweDgwLCAweGJifSwKKwl7MHgzYiwgMHgwMSwgMHg1MiwgMHhiYn0sCisJezB4M2MsIDB4MDUsIDB4NDAsIDB4YmJ9LAorCXsweDU3LCAweDAxLCAweDljLCAweGJifSwKKwl7MHg1OCwgMHgwMSwgMHhlZSwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZjAsIDB4YmJ9LAorCXsweDVhLCAweDAxLCAweDIwLCAweGJifSwKKwl7MHg1YywgMHgxZCwgMHgxNywgMHhiYn0sCisJezB4NWQsIDB4MjIsIDB4MWMsIDB4YmJ9LAorCXsweDY0LCAweDFlLCAweDFjLCAweGJifSwKKwl7MHg1YiwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDIyLCAweGEwLCAweDc4LCAweGJifSwKKwl7MHgyMywgMHhhMCwgMHg3OCwgMHhiYn0sCisJezB4MjQsIDB4N2YsIDB4MDAsIDB4YmJ9LAorCXsweDI4LCAweGVhLCAweDAyLCAweGJifSwKKwl7MHgyOSwgMHg4NiwgMHg3YSwgMHhiYn0sCisJezB4NWUsIDB4NTIsIDB4NGMsIDB4YmJ9LAorCXsweDVmLCAweDIwLCAweDI0LCAweGJifSwKKwl7MHg2MCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MDIsIDB4MDAsIDB4ZWUsIDB4YmJ9LAorCXsweDAzLCAweDM5LCAweDIzLCAweGJifSwKKwl7MHgwNCwgMHgwNywgMHgyNCwgMHhiYn0sCisJezB4MDksIDB4MDAsIDB4YzAsIDB4YmJ9LAorCXsweDBhLCAweDAwLCAweDc5LCAweGJifSwKKwl7MHgwYiwgMHgwMCwgMHgwNCwgMHhiYn0sCisJezB4MGMsIDB4MDAsIDB4NWMsIDB4YmJ9LAorCXsweDBkLCAweDAwLCAweGQ5LCAweGJifSwKKwl7MHgwZSwgMHgwMCwgMHg1MywgMHhiYn0sCisJezB4MGYsIDB4MDAsIDB4MjEsIDB4YmJ9LAorCXsweDEwLCAweDAwLCAweGE0LCAweGJifSwKKwl7MHgxMSwgMHgwMCwgMHhlNSwgMHhiYn0sCisJezB4MTUsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE2LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxNywgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTgsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE5LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxYSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWIsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFjLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxZCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWUsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAxLCAweGJifSwKKwl7MHgwNiwgMHhlMCwgMHgwZSwgMHhiYn0sCisJezB4MDYsIDB4NjAsIDB4MGUsIDB4YmJ9LAorCXsweGIzLCAweDVjLCAweDAxLCAweGNjfSwKKwl7MHhmMCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MDUsIDB4MDEsIDB4MTMsIDB4YmJ9LAorCXsweDA2LCAweDAwLCAweDExLCAweGJifSwKKwl7MHgwNywgMHgwMCwgMHg4NSwgMHhiYn0sCisJezB4MDgsIDB4MDAsIDB4MjcsIDB4YmJ9LAorCXsweDIwLCAweDAxLCAweDAzLCAweGJifSwKKwl7MHgyMSwgMHg4MCwgMHgwMCwgMHhiYn0sCisJezB4MjIsIDB4MGQsIDB4MGYsIDB4YmJ9LAorCXsweDI0LCAweDgwLCAweDAwLCAweGJifSwKKwl7MHg1OSwgMHgwMCwgMHhmZiwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDIsIDB4YmJ9LAorCXsweDM5LCAweDAzLCAweDBkLCAweGJifSwKKwl7MHgzYSwgMHgwNiwgMHgxYiwgMHhiYn0sCisJezB4M2IsIDB4MDAsIDB4OTUsIDB4YmJ9LAorCXsweDNjLCAweDA0LCAweGRiLCAweGJifSwKKwl7MHg1NywgMHgwMiwgMHgwMCwgMHhiYn0sCisJezB4NTgsIDB4MDIsIDB4NjYsIDB4YmJ9LAorCXsweDU5LCAweDAwLCAweGZmLCAweGJifSwKKwl7MHg1YSwgMHgwMSwgMHgzMywgMHhiYn0sCisJezB4NWMsIDB4MTIsIDB4MGQsIDB4YmJ9LAorCXsweDVkLCAweDE2LCAweDExLCAweGJifSwKKwl7MHg2NCwgMHg1ZSwgMHgxYywgMHhiYn0sCisJezB4MmYsIDB4OTAsIDB4MDAsIDB4YmJ9LAorCXt9Cit9Oworc3RhdGljIGNvbnN0IHU4IG1pMTMyMF9zb2NfSW5pdFNYR0FbXVs0XSA9IHsKKwl7MHhiMywgMHgwMSwgMHgwMSwgMHhjY30sCisJezB4YjAsIDB4MDMsIDB4MTksIDB4Y2N9LAorCXsweDAwLCAweDAwLCAweDMwLCAweGRkfSwKKwl7MHhiMywgMHgwMCwgMHg2NCwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4NjcsIDB4Y2N9LAorCXsweGIzLCAweDA1LCAweDAxLCAweGNjfSwKKwl7MHhiMywgMHgwNiwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4MDgsIDB4MDEsIDB4Y2N9LAorCXsweGIzLCAweDA5LCAweDBjLCAweGNjfSwKKwl7MHhiMywgMHgzNCwgMHgwMiwgMHhjY30sCisJezB4YjMsIDB4MzUsIDB4YzgsIDB4Y2N9LAorCXsweGIzLCAweDAyLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgwMywgMHgwYSwgMHhjY30sCisJezB4YjMsIDB4MDQsIDB4MDUsIDB4Y2N9LAorCXsweGIzLCAweDIwLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgyMSwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MjIsIDB4MDQsIDB4Y2N9LAorCXsweGIzLCAweDIzLCAweDAwLCAweGNjfSwKKwl7MHhiMywgMHgxNCwgMHgwMCwgMHhjY30sCisJezB4YjMsIDB4MTUsIDB4MDAsIDB4Y2N9LAorCXsweGIzLCAweDE2LCAweDA0LCAweGNjfSwKKwl7MHhiMywgMHgxNywgMHhmZiwgMHhjY30sCisJezB4YjMsIDB4MDAsIDB4NjcsIDB4Y2N9LAorCXsweGJjLCAweDAwLCAweDcxLCAweGNjfSwKKwl7MHhiYywgMHgwMSwgMHgwMSwgMHhjY30sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgzMCwgMHhkZH0sCisJezB4YzgsIDB4OWYsIDB4MGIsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDIwLCAweGRkfSwKKwl7MHg1YiwgMHgwMCwgMHgwMSwgMHhiYn0sCisJezB4MDAsIDB4MDAsIDB4MjAsIDB4ZGR9LAorCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwMCwgMHgwMCwgMHgzMCwgMHhkZH0sCisJezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweDAwLCAweDAwLCAweDIwLCAweGRkfSwKKwl7MHhiZiwgMHhjMCwgMHgyNiwgMHhjY30sCisJezB4YmYsIDB4YzEsIDB4MDIsIDB4Y2N9LAorCXsweGJmLCAweGNjLCAweDA0LCAweGNjfSwKKwl7MHhiMywgMHgwMSwgMHg0MSwgMHhjY30sCisJezB4ZjAsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDA1LCAweDAxLCAweDc4LCAweGJifSwKKwl7MHgwNiwgMHgwMCwgMHgxMSwgMHhiYn0sCisJezB4MDcsIDB4MDEsIDB4NDIsIDB4YmJ9LAorCXsweDA4LCAweDAwLCAweDExLCAweGJifSwKKwl7MHgyMCwgMHgwMSwgMHgwMywgMHhiYn0sCisJezB4MjEsIDB4ODAsIDB4MDAsIDB4YmJ9LAorCXsweDIyLCAweDBkLCAweDBmLCAweGJifSwKKwl7MHgyNCwgMHg4MCwgMHgwMCwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZmYsIDB4YmJ9LAorCXsweGYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgzOSwgMHgwMywgMHhjYSwgMHhiYn0sCisJezB4M2EsIDB4MDYsIDB4ODAsIDB4YmJ9LAorCXsweDNiLCAweDAxLCAweDUyLCAweGJifSwKKwl7MHgzYywgMHgwNSwgMHg0MCwgMHhiYn0sCisJezB4NTcsIDB4MDEsIDB4OWMsIDB4YmJ9LAorCXsweDU4LCAweDAxLCAweGVlLCAweGJifSwKKwl7MHg1OSwgMHgwMCwgMHhmMCwgMHhiYn0sCisJezB4NWEsIDB4MDEsIDB4MjAsIDB4YmJ9LAorCXsweDVjLCAweDFkLCAweDE3LCAweGJifSwKKwl7MHg1ZCwgMHgyMiwgMHgxYywgMHhiYn0sCisJezB4NjQsIDB4MWUsIDB4MWMsIDB4YmJ9LAorCXsweDViLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MjIsIDB4YTAsIDB4NzgsIDB4YmJ9LAorCXsweDIzLCAweGEwLCAweDc4LCAweGJifSwKKwl7MHgyNCwgMHg3ZiwgMHgwMCwgMHhiYn0sCisJezB4MjgsIDB4ZWEsIDB4MDIsIDB4YmJ9LAorCXsweDI5LCAweDg2LCAweDdhLCAweGJifSwKKwl7MHg1ZSwgMHg1MiwgMHg0YywgMHhiYn0sCisJezB4NWYsIDB4MjAsIDB4MjQsIDB4YmJ9LAorCXsweDYwLCAweDAwLCAweDAyLCAweGJifSwKKwl7MHgwMiwgMHgwMCwgMHhlZSwgMHhiYn0sCisJezB4MDMsIDB4MzksIDB4MjMsIDB4YmJ9LAorCXsweDA0LCAweDA3LCAweDI0LCAweGJifSwKKwl7MHgwOSwgMHgwMCwgMHhjMCwgMHhiYn0sCisJezB4MGEsIDB4MDAsIDB4NzksIDB4YmJ9LAorCXsweDBiLCAweDAwLCAweDA0LCAweGJifSwKKwl7MHgwYywgMHgwMCwgMHg1YywgMHhiYn0sCisJezB4MGQsIDB4MDAsIDB4ZDksIDB4YmJ9LAorCXsweDBlLCAweDAwLCAweDUzLCAweGJifSwKKwl7MHgwZiwgMHgwMCwgMHgyMSwgMHhiYn0sCisJezB4MTAsIDB4MDAsIDB4YTQsIDB4YmJ9LAorCXsweDExLCAweDAwLCAweGU1LCAweGJifSwKKwl7MHgxNSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTYsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDE3LCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxOCwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MTksIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFhLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxYiwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4MWMsIDB4MDAsIDB4MDAsIDB4YmJ9LAorCXsweDFkLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgxZSwgMHgwMCwgMHgwMCwgMHhiYn0sCisJezB4ZjAsIDB4MDAsIDB4MDEsIDB4YmJ9LAorCXsweDA2LCAweGUwLCAweDBlLCAweGJifSwKKwl7MHgwNiwgMHg2MCwgMHgwZSwgMHhiYn0sCisJezB4YjMsIDB4NWMsIDB4MDEsIDB4Y2N9LAorCXsweGYwLCAweDAwLCAweDAwLCAweGJifSwKKwl7MHgwNSwgMHgwMSwgMHgxMywgMHhiYn0sCisJezB4MDYsIDB4MDAsIDB4MTEsIDB4YmJ9LAorCXsweDA3LCAweDAwLCAweDg1LCAweGJifSwKKwl7MHgwOCwgMHgwMCwgMHgyNywgMHhiYn0sCisJezB4MjAsIDB4MDEsIDB4MDMsIDB4YmJ9LAorCXsweDIxLCAweDgwLCAweDAwLCAweGJifSwKKwl7MHgyMiwgMHgwZCwgMHgwZiwgMHhiYn0sCisJezB4MjQsIDB4ODAsIDB4MDAsIDB4YmJ9LAorCXsweDU5LCAweDAwLCAweGZmLCAweGJifSwKKwl7MHhmMCwgMHgwMCwgMHgwMiwgMHhiYn0sCisJezB4MzksIDB4MDMsIDB4MGQsIDB4YmJ9LAorCXsweDNhLCAweDA2LCAweDFiLCAweGJifSwKKwl7MHgzYiwgMHgwMCwgMHg5NSwgMHhiYn0sCisJezB4M2MsIDB4MDQsIDB4ZGIsIDB4YmJ9LAorCXsweDU3LCAweDAyLCAweDAwLCAweGJifSwKKwl7MHg1OCwgMHgwMiwgMHg2NiwgMHhiYn0sCisJezB4NTksIDB4MDAsIDB4ZmYsIDB4YmJ9LAorCXsweDVhLCAweDAxLCAweDMzLCAweGJifSwKKwl7MHg1YywgMHgxMiwgMHgwZCwgMHhiYn0sCisJezB4NWQsIDB4MTYsIDB4MTEsIDB4YmJ9LAorCXsweDY0LCAweDVlLCAweDFjLCAweGJifSwKKwl7fQorfTsKIHN0YXRpYyBjb25zdCBfX3U4IHBvMzEzMF9nYW1tYVsxN10gPSB7CiAJMHgwMCwgMHgxMywgMHgzOCwgMHg1OSwgMHg3OSwgMHg5MiwgMHhhNywgMHhiOSwgMHhjOCwKIAkweGQ0LCAweGRmLCAweGU3LCAweGVlLCAweGY0LCAweGY5LCAweGZjLCAweGZmCkBAIC0xNzY0LDI2ICsyNjMzLDQzIEBACiB9OwogCiBzdHJ1Y3Qgc2Vuc29yX2luZm8gewotCWludCBzZW5zb3JJZDsKLQlfX3U4IEkyY0FkZDsKLQlfX3U4IElkQWRkOwotCV9fdTE2IFZwSWQ7Ci0JX191OCBtMTsKLQlfX3U4IG0yOwotCV9fdTggb3A7Ci0JfTsKKwlzOCBzZW5zb3JJZDsKKwl1OCBJMmNBZGQ7CisJdTggSWRBZGQ7CisJdTE2IFZwSWQ7CisJdTggbTE7CisJdTggbTI7CisJdTggb3A7Cit9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNlbnNvcl9pbmZvIHNlbnNvcl9pbmZvX2RhdGFbXSA9IHsKIC8qICAgICAgc2Vuc29ySWQsICAgICAgICAgSTJjQWRkLAlJZEFkZCwgIFZwSWQsICBtMSwgICAgbTIsICBvcCAqLwotCXtTRU5TT1JfSFY3MTMxUiwgICAgMHg4MCB8IDB4MTEsIDB4MDAsIDB4MDIwOSwgMHgyNCwgMHgyNSwgMHgwMX0sCi0Je1NFTlNPUl9PVjc2NjAsICAgICAweDgwIHwgMHgyMSwgMHgwYSwgMHg3NjYwLCAweDI2LCAweDI2LCAweDA1fSwKKwl7LTEsCQkgICAgMHg4MCB8IDB4MzAsIDB4MGEsIDB4MDAwMCwgMHgyNSwgMHgyNCwgMHgwNX0sCisJey0xLAkJICAgIDB4ODAgfCAweDIwLCAweDgyLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LAorLyogKHRlc3RlZCBpbiB2YzAzMnhfcHJvYmVfc2Vuc29yKSAqLworLyoJey0xLAkJICAgIDB4ODAgfCAweDIwLCAweDgzLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LCAqLwogCXtTRU5TT1JfUE8zMTMwTkMsICAgMHg4MCB8IDB4NzYsIDB4MDAsIDB4MzEzMCwgMHgyNCwgMHgyNSwgMHgwMX0sCi0Je1NFTlNPUl9NSTEzMjAsICAgICAweDgwIHwgMHhjOCwgMHgwMCwgMHgxNDhjLCAweDY0LCAweDY1LCAweDAxfSwKLQl7U0VOU09SX09WNzY3MCwgICAgIDB4ODAgfCAweDIxLCAweDBhLCAweDc2NzMsIDB4NjYsIDB4NjcsIDB4MDV9LAogCXtTRU5TT1JfTUkxMzEwX1NPQywgMHg4MCB8IDB4NWQsIDB4MDAsIDB4MTQzYSwgMHgyNCwgMHgyNSwgMHgwMX0sCiAvKiAodGVzdGVkIGluIHZjMDMyeF9wcm9iZV9zZW5zb3IpICovCiAvKgl7U0VOU09SX01JMDM2MCwJICAgIDB4ODAgfCAweDVkLCAweDAwLCAweDgyNDMsIDB4MjQsIDB4MjUsIDB4MDF9LCAqLworCXtTRU5TT1JfSFY3MTMxUiwgICAgMHg4MCB8IDB4MTEsIDB4MDAsIDB4MDIwOSwgMHgyNCwgMHgyNSwgMHgwMX0sCisJey0xLAkJICAgIDB4ODAgfCAweDIxLCAweDBhLCAweDAwMDAsIDB4MjEsIDB4MjAsIDB4MDV9LAorCXstMSwJCSAgICAweDgwIHwgMHg0MCwgMHgwMCwgMHgwMDAwLCAweDIwLCAweDIyLCAweDA1fSwKKwl7U0VOU09SX09WNzY2MCwgICAgIDB4ODAgfCAweDIxLCAweDBhLCAweDc2NjAsIDB4MjYsIDB4MjYsIDB4MDV9LAorLyoJe1NFTlNPUl9QTzMxMzBOQywgICAweDgwIHwgMHg3NiwgMHgwMCwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwgKi8KKwl7LTEsCQkgICAgMHg4MCB8IDB4NmUsIDB4MDAsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sCisvKgl7U0VOU09SX01JMTMxMF9TT0MsIDB4ODAgfCAweDVkLCAweDAwLCAweDAwMDAsIDB4MjQsIDB4MjUsIDB4MDF9LCAqLworLyoJey0xLAkJICAgIDB4ODAgfCAweDMwLCAweDBhLCAweDAwMDAsIDB4MjUsIDB4MjQsIDB4MDV9LCAqLworCXstMSwJCSAgICAweDgwIHwgMHgxMSwgMHgzOSwgMHgwMDAwLCAweDI0LCAweDI1LCAweDAxfSwKIAl7U0VOU09SX1BPMTIwMCwgICAgIDB4ODAgfCAweDVjLCAweDAwLCAweDEyMDAsIDB4NjcsIDB4NjcsIDB4MDF9LAorCXstMSwJCSAgICAweDgwIHwgMHgyZCwgMHgwMCwgMHgwMDAwLCAweDY1LCAweDY3LCAweDAxfSwKKwl7LTEsCQkgICAgMHg4MCB8IDB4NmUsIDB4MDAsIDB4MDAwMCwgMHgyNCwgMHgyNSwgMHgwMX0sCisJey0xLAkJICAgIDB4ODAgfCAweDU2LCAweDAxLCAweDAwMDAsIDB4NjQsIDB4NjcsIDB4MDF9LAorCXtTRU5TT1JfTUkxMzIwX1NPQywgMHg4MCB8IDB4NDgsIDB4MDAsIDB4MTQ4YywgMHg2NCwgMHg2NywgMHgwMX0sCisvKmZpeG1lOiBwcmV2aW91c2x5IGRldGVjdGVkPyovCisJe1NFTlNPUl9NSTEzMjAsICAgICAweDgwIHwgMHg0OCwgMHgwMCwgMHgxNDhjLCAweDY0LCAweDY1LCAweDAxfSwKKy8qZml4bWU6IG5vdCBpbiB0aGUgbXMtd2luIHByb2JlIC0gbWF5IGJlIGZvdW5kIGJlZm9yZT8qLworCXtTRU5TT1JfT1Y3NjcwLCAgICAgMHg4MCB8IDB4MjEsIDB4MGEsIDB4NzY3MywgMHg2NiwgMHg2NywgMHgwNX0sCiB9OwogCiAvKiByZWFkICdsZW4nIGJ5dGVzIGluIGdzcGNhX2Rldi0+dXNiX2J1ZiAqLwpAQCAtMTgxNCw1MSArMjcwMCw0OSBAQAogCQkJNTAwKTsKIH0KIAotc3RhdGljIHZvaWQgcmVhZF9zZW5zb3JfcmVnaXN0ZXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAotCQkJCV9fdTE2IGFkZHJlc3MsIF9fdTE2ICp2YWx1ZSkKK3N0YXRpYyB1MTYgcmVhZF9zZW5zb3JfcmVnaXN0ZXIoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJCXUxNiBhZGRyZXNzKQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKLQlfX3U4IGxkYXRhLCBtZGF0YSwgaGRhdGE7CisJdTggbGRhdGEsIG1kYXRhLCBoZGF0YTsKIAlpbnQgcmV0cnkgPSA1MDsKIAotCSp2YWx1ZSA9IDA7Ci0KIAlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YjMzZiwgMSk7Ci0JLypQREVCVUcoRF9QUk9CRSwgIiBJMmMgQnVzIEJ1c3kgV2FpdCAgMHglMDJYICIsIHRtcHZhbHVlKTsgKi8KIAlpZiAoIShnc3BjYV9kZXYtPnVzYl9idWZbMF0gJiAweDAyKSkgewotCQlQREVCVUcoRF9FUlIsICJJMmMgQnVzIEJ1c3kgV2FpdCAlZCIsCi0JCQlnc3BjYV9kZXYtPnVzYl9idWZbMF0gJiAweDAyKTsKLQkJcmV0dXJuOworCQlQREVCVUcoRF9FUlIsICJJMmMgQnVzIEJ1c3kgV2FpdCAlMDJ4IiwKKwkJCWdzcGNhX2Rldi0+dXNiX2J1ZlswXSk7CisJCXJldHVybiAwOwogCX0KIAlyZWdfdyhkZXYsIDB4YTAsIGFkZHJlc3MsIDB4YjMzYSk7CiAJcmVnX3coZGV2LCAweGEwLCAweDAyLCAweGIzMzkpOwogCi0JcmVnX3IoZ3NwY2FfZGV2LCAweGExLCAweGIzM2IsIDEpOwotCXdoaWxlIChyZXRyeS0tICYmIGdzcGNhX2Rldi0+dXNiX2J1ZlswXSkgeworCWRvIHsKIAkJcmVnX3IoZ3NwY2FfZGV2LCAweGExLCAweGIzM2IsIDEpOwotLyoJCVBERUJVRyhEX1BST0JFLCAiUmVhZCBhZ2FpbiAweGIzM2IgJWQiLCB0bXB2YWx1ZSk7ICovCi0JCW1zbGVlcCgxKTsKLQl9CisJCWlmIChnc3BjYV9kZXYtPnVzYl9idWZbMF0gPT0gMHgwMCkKKwkJCWJyZWFrOworCQltc2xlZXAoNDApOworCX0gd2hpbGUgKC0tcmV0cnkgPj0gMCk7CisKIAlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YjMzZSwgMSk7CiAJbGRhdGEgPSBnc3BjYV9kZXYtPnVzYl9idWZbMF07CiAJcmVnX3IoZ3NwY2FfZGV2LCAweGExLCAweGIzM2QsIDEpOwogCW1kYXRhID0gZ3NwY2FfZGV2LT51c2JfYnVmWzBdOwogCXJlZ19yKGdzcGNhX2RldiwgMHhhMSwgMHhiMzNjLCAxKTsKIAloZGF0YSA9IGdzcGNhX2Rldi0+dXNiX2J1ZlswXTsKLQlQREVCVUcoRF9QUk9CRSwgIlJlYWQgU2Vuc29yICUwMnglMDJ4ICUwMngiLAotCQloZGF0YSwgbWRhdGEsIGxkYXRhKTsKKwlpZiAoaGRhdGEgIT0gMCAmJiBtZGF0YSAhPSAwICYmIGxkYXRhICE9IDApCisJCVBERUJVRyhEX1BST0JFLCAiUmVhZCBTZW5zb3IgJTAyeCUwMnggJTAyeCIsCisJCQloZGF0YSwgbWRhdGEsIGxkYXRhKTsKIAlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YjMzNCwgMSk7CiAJaWYgKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSA9PSAweDAyKQotCQkqdmFsdWUgPSAoaGRhdGEgPDwgOCkgKyBtZGF0YTsKLQllbHNlCi0JCSp2YWx1ZSA9IGhkYXRhOworCQlyZXR1cm4gKGhkYXRhIDw8IDgpICsgbWRhdGE7CisJcmV0dXJuIGhkYXRhOwogfQogCiBzdGF0aWMgaW50IHZjMDMyeF9wcm9iZV9zZW5zb3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKIAlpbnQgaTsKLQlfX3UxNiB2YWx1ZTsKKwl1MTYgdmFsdWU7CiAJY29uc3Qgc3RydWN0IHNlbnNvcl9pbmZvICpwdHNlbnNvcl9pbmZvOwogCiAJcmVnX3IoZ3NwY2FfZGV2LCAweGExLCAweGJmY2YsIDEpOwpAQCAtMTg3Miw0OCArMjc1Niw1MSBAQAogCQlyZWdfdyhkZXYsIDB4YTAsIDB4MGMsIDB4YjMwOSk7CiAJCXJlZ193KGRldiwgMHhhMCwgcHRzZW5zb3JfaW5mby0+STJjQWRkLCAweGIzMzUpOwogCQlyZWdfdyhkZXYsIDB4YTAsIHB0c2Vuc29yX2luZm8tPm9wLCAweGIzMDEpOwotCQlyZWFkX3NlbnNvcl9yZWdpc3Rlcihnc3BjYV9kZXYsIHB0c2Vuc29yX2luZm8tPklkQWRkLCAmdmFsdWUpOwotCQlpZiAodmFsdWUgPT0gcHRzZW5zb3JfaW5mby0+VnBJZCkKLQkJCXJldHVybiBwdHNlbnNvcl9pbmZvLT5zZW5zb3JJZDsKKwkJdmFsdWUgPSByZWFkX3NlbnNvcl9yZWdpc3Rlcihnc3BjYV9kZXYsIHB0c2Vuc29yX2luZm8tPklkQWRkKTsKKwkJaWYgKHZhbHVlID09IDAgJiYgcHRzZW5zb3JfaW5mby0+SWRBZGQgPT0gMHg4MikKKwkJCXZhbHVlID0gcmVhZF9zZW5zb3JfcmVnaXN0ZXIoZ3NwY2FfZGV2LCAweDgzKTsKKwkJaWYgKHZhbHVlICE9IDApIHsKKwkJCVBERUJVRyhEX0VSUnxEX1BST0JFLCAiU2Vuc29yIElEICUwNHggKCVkKSIsCisJCQkJdmFsdWUsIGkpOworCQkJaWYgKHZhbHVlID09IHB0c2Vuc29yX2luZm8tPlZwSWQpCisJCQkJcmV0dXJuIHB0c2Vuc29yX2luZm8tPnNlbnNvcklkOwogCi0JCS8qIHNwZWNpYWwgY2FzZSBmb3IgTUkwMzYwICovCi0JCWlmIChwdHNlbnNvcl9pbmZvLT5zZW5zb3JJZCA9PSBTRU5TT1JfTUkxMzEwX1NPQwotCQkgICAgJiYgdmFsdWUgPT0gMHg4MjQzKQotCQkJcmV0dXJuIFNFTlNPUl9NSTAzNjA7CisJCQlzd2l0Y2ggKHZhbHVlKSB7CisJCQljYXNlIDB4NzY3MzoKKwkJCQlyZXR1cm4gU0VOU09SX09WNzY3MDsKKwkJCWNhc2UgMHg4MjQzOgorCQkJCXJldHVybiBTRU5TT1JfTUkwMzYwOworCQkJfQorLypmaXhtZTogc2hvdWxkIHJldHVybiBoZXJlKi8KKwkJfQogCX0KIAlyZXR1cm4gLTE7CiB9CiAKLXN0YXRpYyBfX3U4IGkyY193cml0ZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCi0JCQlfX3U4IHJlZywgY29uc3QgX191OCAqdmFsLCBfX3U4IHNpemUpCitzdGF0aWMgdm9pZCBpMmNfd3JpdGUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJdTggcmVnLCBjb25zdCB1OCAqdmFsLAorCQkJdTggc2l6ZSkJCS8qIDEgb3IgMiAqLwogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKKwlpbnQgcmV0cnk7CiAKLQlpZiAoc2l6ZSA+IDMgfHwgc2l6ZSA8IDEpCi0JCXJldHVybiAtRUlOVkFMOwogCXJlZ19yKGdzcGNhX2RldiwgMHhhMSwgMHhiMzNmLCAxKTsKKy8qZml4bWU6c2hvdWxkIGNoZWNrIGlmICghKGdzcGNhX2Rldi0+dXNiX2J1ZlswXSAmIDB4MDIpKSBlcnJvciovCiAJcmVnX3coZGV2LCAweGEwLCBzaXplLCAweGIzMzQpOwogCXJlZ193KGRldiwgMHhhMCwgcmVnLCAweGIzM2EpOwotCXN3aXRjaCAoc2l6ZSkgewotCWNhc2UgMToKLQkJcmVnX3coZGV2LCAweGEwLCB2YWxbMF0sIDB4YjMzNik7Ci0JCWJyZWFrOwotCWNhc2UgMjoKLQkJcmVnX3coZGV2LCAweGEwLCB2YWxbMF0sIDB4YjMzNik7CisJcmVnX3coZGV2LCAweGEwLCB2YWxbMF0sIDB4YjMzNik7CisJaWYgKHNpemUgPiAxKQogCQlyZWdfdyhkZXYsIDB4YTAsIHZhbFsxXSwgMHhiMzM3KTsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQlyZWdfdyhkZXYsIDB4YTAsIHZhbFswXSwgMHhiMzM2KTsKLQkJcmVnX3coZGV2LCAweGEwLCB2YWxbMV0sIDB4YjMzNyk7Ci0JCXJlZ193KGRldiwgMHhhMCwgdmFsWzJdLCAweGIzMzgpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZWdfdyhkZXYsIDB4YTAsIDB4MDEsIDB4YjMzNCk7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KIAlyZWdfdyhkZXYsIDB4YTAsIDB4MDEsIDB4YjMzOSk7Ci0JcmVnX3IoZ3NwY2FfZGV2LCAweGExLCAweGIzM2IsIDEpOwotCXJldHVybiBnc3BjYV9kZXYtPnVzYl9idWZbMF0gPT0gMDsKKwlyZXRyeSA9IDQ7CisJZG8geworCQlyZWdfcihnc3BjYV9kZXYsIDB4YTEsIDB4YjMzYiwgMSk7CisJCWlmIChnc3BjYV9kZXYtPnVzYl9idWZbMF0gPT0gMCkKKwkJCWJyZWFrOworCQltc2xlZXAoMjApOworCX0gd2hpbGUgKC0tcmV0cnkgPiAwKTsKKwlpZiAocmV0cnkgPD0gMCkKKwkJUERFQlVHKERfRVJSLCAiaTJjX3dyaXRlIGZhaWxlZCIpOwogfQogCiBzdGF0aWMgdm9pZCBwdXRfdGFiX3RvX3JlZyhzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCkBAIC0xOTM4LDcgKzI4MjUsNyBAQAogCQkJcmV0dXJuOwogCQljYXNlIDB4Y2M6CQkJLyogbm9ybWFsIHdyaXRlICovCiAJCQlyZWdfdyhkZXYsIDB4YTAsIGRhdGFbaV1bMl0sCi0JCQkJCSgoZGF0YVtpXVswXSk8PDgpIHwgZGF0YVtpXVsxXSk7CisJCQkJCShkYXRhW2ldWzBdKSA8PCA4IHwgZGF0YVtpXVsxXSk7CiAJCQlicmVhazsKIAkJY2FzZSAweGFhOgkJCS8qIGkyYyBvcCAqLwogCQkJaTJjX3dyaXRlKGdzcGNhX2RldiwgZGF0YVtpXVsxXSwgJmRhdGFbaV1bMl0sIDEpOwpAQCAtMTk1NSwxOSArMjg0Miw2IEBACiAJLypub3QgcmVhY2hlZCovCiB9CiAKLS8qCi0gIkdhbW1hVCI9aGV4OjA0LDE3LDMxLDRmLDZhLDgzLDk5LGFkLGJmLGNlLGRhLGU1LGVlLGY1LGZiLGZmLGZmCi0gIk1hdHJpeFQiPWhleDo2MCxmOSxlNSxlNyw1MCwwNSxmMyxlNiw2NgotICovCi0KLXN0YXRpYyB2b2lkIHZjMDMyMV9yZXNldChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCi17Ci0JcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4MDAsIDB4YjA0ZCk7Ci0JcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4MDEsIDB4YjMwMSk7Ci0JbXNsZWVwKDEwMCk7Ci0JcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4MDEsIDB4YjAwMyk7Ci0JbXNsZWVwKDEwMCk7Ci19CiAKIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGF0IHByb2JlIHRpbWUgKi8KIHN0YXRpYyBpbnQgc2RfY29uZmlnKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKQEAgLTE5NzksMTAgKzI4NTMsNyBAQAogCWludCBzZW5zb3I7CiAKIAljYW0gPSAmZ3NwY2FfZGV2LT5jYW07Ci0JY2FtLT5lcGFkZHIgPSAweDAyOwogCXNkLT5icmlkZ2UgPSBpZC0+ZHJpdmVyX2luZm87Ci0KLQl2YzAzMjFfcmVzZXQoZ3NwY2FfZGV2KTsKIAlzZW5zb3IgPSB2YzAzMnhfcHJvYmVfc2Vuc29yKGdzcGNhX2Rldik7CiAJc3dpdGNoIChzZW5zb3IpIHsKIAljYXNlIC0xOgpAQCAtMjAwMSw2ICsyODcyLDkgQEAKIAljYXNlIFNFTlNPUl9NSTEzMjA6CiAJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgTUkxMzIwIik7CiAJCWJyZWFrOworCWNhc2UgU0VOU09SX01JMTMyMF9TT0M6CisJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgTUkxMzIwX1NPQyIpOworCQlicmVhazsKIAljYXNlIFNFTlNPUl9PVjc2NjA6CiAJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgT1Y3NjYwIik7CiAJCWJyZWFrOwpAQCAtMjAyMCwxMiArMjg5NCwyMyBAQAogCQljYW0tPmNhbV9tb2RlID0gdmMwMzIxX21vZGU7CiAJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2YzAzMjFfbW9kZSk7CiAJfSBlbHNlIHsKLQkJaWYgKHNlbnNvciAhPSBTRU5TT1JfUE8xMjAwKSB7Ci0JCQljYW0tPmNhbV9tb2RlID0gdmMwMzIzX21vZGU7Ci0JCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmMwMzIzX21vZGUpOwotCQl9IGVsc2UgeworCQlzd2l0Y2ggKHNlbnNvcikgeworCQljYXNlIFNFTlNPUl9QTzEyMDA6CiAJCQljYW0tPmNhbV9tb2RlID0gc3ZnYV9tb2RlOwogCQkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHN2Z2FfbW9kZSk7CisJCQlicmVhazsKKwkJY2FzZSBTRU5TT1JfTUkxMzEwX1NPQzoKKwkJCWNhbS0+Y2FtX21vZGUgPSB2YzAzMjNfbW9kZTsKKwkJCWNhbS0+bm1vZGVzID0gQVJSQVlfU0laRSh2YzAzMjNfbW9kZSk7CisJCQlicmVhazsKKwkJY2FzZSBTRU5TT1JfTUkxMzIwX1NPQzoKKwkJCWNhbS0+Y2FtX21vZGUgPSBiaV9tb2RlOworCQkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKGJpX21vZGUpOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQljYW0tPmNhbV9tb2RlID0gdmMwMzIzX21vZGU7CisJCQljYW0tPm5tb2RlcyA9IEFSUkFZX1NJWkUodmMwMzIzX21vZGUpIC0gMTsKKwkJCWJyZWFrOwogCQl9CiAJfQogCkBAIC0yMDYxLDcgKzI5NDYsNyBAQAogCXJldHVybiAwOwogfQogCi0vKiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBhdCBwcm9iZSBhbmQgdGltZSAqLworLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgYW5kIHJlc3VtZSB0aW1lICovCiBzdGF0aWMgaW50IHNkX2luaXQoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXJldHVybiAwOwpAQCAtMjEyNCw5ICszMDA5LDE4IEBACiBzdGF0aWMgaW50IHNkX3N0YXJ0KHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldikKIHsKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisJY29uc3QgX191OCAoKmluaXQpWzRdOwogCWNvbnN0IF9fdTggKkdhbW1hVCA9IE5VTEw7CiAJY29uc3QgX191OCAqTWF0cml4VCA9IE5VTEw7CiAJaW50IG1vZGU7CisJc3RhdGljIGNvbnN0IHU4ICgqbWkxMzIwX3NvY19pbml0W10pWzRdID0geworCQltaTEzMjBfc29jX0luaXRTWEdBLAorCQltaTEzMjBfc29jX0luaXRTWEdBX0pQRywKKwkJbWkxMzIwX3NvY19Jbml0VkdBLAorCQltaTEzMjBfc29jX0luaXRWR0FfSlBHLAorCQltaTEzMjBfc29jX0luaXRRVkdBLAorCQltaTEzMjBfc29jX0luaXRRVkdBX0pQRworCX07CiAKIAkvKiBBc3N1bWUgc3RhcnQgdXNlIHRoZSBnb29kIHJlc29sdXRpb24gZnJvbSBnc3BjYV9kZXYtPm1vZGUgKi8KIAlpZiAoc2QtPmJyaWRnZSA9PSBCUklER0VfVkMwMzIxKSB7CkBAIC0yMTM0LDYgKzMwMjgsMTMgQEAKIAkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4ZmYsIDB4YmZlZCk7CiAJCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweGZmLCAweGJmZWUpOwogCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHhmZiwgMHhiZmVmKTsKKwkJc2QtPmltYWdlX29mZnNldCA9IDQ2OworCX0gZWxzZSB7CisJCWlmIChnc3BjYV9kZXYtPmNhbS5jYW1fbW9kZVtnc3BjYV9kZXYtPmN1cnJfbW9kZV0ucGl4ZWxmb3JtYXQKKwkJCQk9PSBWNEwyX1BJWF9GTVRfSlBFRykKKwkJCXNkLT5pbWFnZV9vZmZzZXQgPSAwOworCQllbHNlCisJCQlzZC0+aW1hZ2Vfb2Zmc2V0ID0gMzI7CiAJfQogCiAJbW9kZSA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhpbnQpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2OwpAQCAtMjE0MSwxMTUgKzMwNDIsODcgQEAKIAljYXNlIFNFTlNPUl9IVjcxMzFSOgogCQlHYW1tYVQgPSBodjcxMzFyX2dhbW1hOwogCQlNYXRyaXhUID0gaHY3MTMxcl9tYXRyaXg7Ci0JCWlmIChtb2RlKSB7Ci0JCQkvKiAzMjB4MjQwICovCi0JCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBodjcxMzFyX2luaXRRVkdBX2RhdGEpOwotCQl9IGVsc2UgewotCQkJLyogNjQweDQ4MCAqLwotCQkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgaHY3MTMxcl9pbml0VkdBX2RhdGEpOwotCQl9CisJCWlmIChtb2RlKQorCQkJaW5pdCA9IGh2NzEzMXJfaW5pdFFWR0FfZGF0YTsJLyogMzIweDI0MCAqLworCQllbHNlCisJCQlpbml0ID0gaHY3MTMxcl9pbml0VkdBX2RhdGE7CS8qIDY0MHg0ODAgKi8KIAkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfT1Y3NjYwOgogCQlHYW1tYVQgPSBvdjc2NjBfZ2FtbWE7CiAJCU1hdHJpeFQgPSBvdjc2NjBfbWF0cml4OwotCQlpZiAobW9kZSkgewotCQkJLyogMzIweDI0MCAqLwotCQkJdXNiX2V4Y2hhbmdlKGdzcGNhX2Rldiwgb3Y3NjYwX2luaXRRVkdBX2RhdGEpOwotCQl9IGVsc2UgewotCQkJLyogNjQweDQ4MCAqLwotCQkJdXNiX2V4Y2hhbmdlKGdzcGNhX2Rldiwgb3Y3NjYwX2luaXRWR0FfZGF0YSk7Ci0JCX0KKwkJaWYgKG1vZGUpCisJCQlpbml0ID0gb3Y3NjYwX2luaXRRVkdBX2RhdGE7CS8qIDMyMHgyNDAgKi8KKwkJZWxzZQorCQkJaW5pdCA9IG92NzY2MF9pbml0VkdBX2RhdGE7CS8qIDY0MHg0ODAgKi8KIAkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfT1Y3NjcwOgogCQkvKkdhbW1hVCA9IG92NzY2MF9nYW1tYTsgKi8KIAkJLypNYXRyaXhUID0gb3Y3NjYwX21hdHJpeDsgKi8KLQkJaWYgKG1vZGUpIHsKLQkJCS8qIDMyMHgyNDAgKi8KLQkJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIG92NzY3MF9pbml0UVZHQV9KUEcpOwotCQl9IGVsc2UgewotCQkJLyogNjQweDQ4MCAqLwotCQkJdXNiX2V4Y2hhbmdlKGdzcGNhX2Rldiwgb3Y3NjcwX2luaXRWR0FfSlBHKTsKLQkJfQorCQlpZiAobW9kZSkKKwkJCWluaXQgPSBvdjc2NzBfaW5pdFFWR0FfSlBHOwkvKiAzMjB4MjQwICovCisJCWVsc2UKKwkJCWluaXQgPSBvdjc2NzBfaW5pdFZHQV9KUEc7CS8qIDY0MHg0ODAgKi8KIAkJYnJlYWs7CiAJY2FzZSBTRU5TT1JfTUkwMzYwOgogCQlHYW1tYVQgPSBtaTEzMjBfZ2FtbWE7CiAJCU1hdHJpeFQgPSBtaTAzNjBfbWF0cml4OwotCQlpZiAobW9kZSkgewotCQkJLyogMzIweDI0MCAqLwotCQkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgbWkwMzYwX2luaXRRVkdBX0pQRyk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiA2NDB4NDgwICovCi0JCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBtaTAzNjBfaW5pdFZHQV9KUEcpOwotCQl9CisJCWlmIChtb2RlKQorCQkJaW5pdCA9IG1pMDM2MF9pbml0UVZHQV9KUEc7CS8qIDMyMHgyNDAgKi8KKwkJZWxzZQorCQkJaW5pdCA9IG1pMDM2MF9pbml0VkdBX0pQRzsJLyogNjQweDQ4MCAqLwogCQlicmVhazsKIAljYXNlIFNFTlNPUl9NSTEzMTBfU09DOgotCQlpZiAobW9kZSkgewotCQkJLyogMzIweDI0MCAqLwotCQkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgbWkxMzEwX3NvY2luaXRRVkdBX0pQRyk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiA2NDB4NDgwICovCi0JCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBtaTEzMTBfc29jaW5pdFZHQV9KUEcpOworCQlHYW1tYVQgPSBtaTEzMjBfZ2FtbWE7CisJCU1hdHJpeFQgPSBtaTEzMjBfbWF0cml4OworCQlzd2l0Y2ggKG1vZGUpIHsKKwkJY2FzZSAxOgorCQkJaW5pdCA9IG1pMTMxMF9zb2Npbml0UVZHQV9KUEc7CS8qIDMyMHgyNDAgKi8KKwkJCWJyZWFrOworCQljYXNlIDA6CisJCQlpbml0ID0gbWkxMzEwX3NvY2luaXRWR0FfSlBHOwkvKiA2NDB4NDgwICovCisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWluaXQgPSBtaTEzMTBfc29jX0luaXRTWEdBX0pQRzsJLyogMTI4MHgxMDI0ICovCisJCQlicmVhazsKIAkJfQogCQlicmVhazsKIAljYXNlIFNFTlNPUl9NSTEzMjA6CiAJCUdhbW1hVCA9IG1pMTMyMF9nYW1tYTsKIAkJTWF0cml4VCA9IG1pMTMyMF9tYXRyaXg7Ci0JCWlmIChtb2RlKSB7Ci0JCQkvKiAzMjB4MjQwICovCi0JCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBtaTEzMjBfaW5pdFFWR0FfZGF0YSk7Ci0JCX0gZWxzZSB7Ci0JCQkvKiA2NDB4NDgwICovCi0JCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBtaTEzMjBfaW5pdFZHQV9kYXRhKTsKLQkJfQorCQlpZiAobW9kZSkKKwkJCWluaXQgPSBtaTEzMjBfaW5pdFFWR0FfZGF0YTsJLyogMzIweDI0MCAqLworCQllbHNlCisJCQlpbml0ID0gbWkxMzIwX2luaXRWR0FfZGF0YTsJLyogNjQweDQ4MCAqLworCQlicmVhazsKKwljYXNlIFNFTlNPUl9NSTEzMjBfU09DOgorCQlHYW1tYVQgPSBtaTEzMjBfZ2FtbWE7CisJCU1hdHJpeFQgPSBtaTEzMjBfbWF0cml4OworCQlpbml0ID0gbWkxMzIwX3NvY19pbml0W21vZGVdOwogCQlicmVhazsKIAljYXNlIFNFTlNPUl9QTzMxMzBOQzoKIAkJR2FtbWFUID0gcG8zMTMwX2dhbW1hOwogCQlNYXRyaXhUID0gcG8zMTMwX21hdHJpeDsKLQkJaWYgKG1vZGUpIHsKLQkJCS8qIDMyMHgyNDAgKi8KLQkJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIHBvMzEzMF9pbml0UVZHQV9kYXRhKTsKLQkJfSBlbHNlIHsKLQkJCS8qIDY0MHg0ODAgKi8KLQkJCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIHBvMzEzMF9pbml0VkdBX2RhdGEpOwotCQl9Ci0JCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIHBvMzEzMF9ydW5kYXRhKTsKLQkJYnJlYWs7Ci0JY2FzZSBTRU5TT1JfUE8xMjAwOgotCQlHYW1tYVQgPSBwbzEyMDBfZ2FtbWE7Ci0JCU1hdHJpeFQgPSBwbzEyMDBfbWF0cml4OwotCQl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCBwbzEyMDBfaW5pdFZHQV9kYXRhKTsKKwkJaWYgKG1vZGUpCisJCQlpbml0ID0gcG8zMTMwX2luaXRRVkdBX2RhdGE7CS8qIDMyMHgyNDAgKi8KKwkJZWxzZQorCQkJaW5pdCA9IHBvMzEzMF9pbml0VkdBX2RhdGE7CS8qIDY0MHg0ODAgKi8KKwkJdXNiX2V4Y2hhbmdlKGdzcGNhX2RldiwgaW5pdCk7CisJCWluaXQgPSBwbzMxMzBfcnVuZGF0YTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKLQkJUERFQlVHKERfUFJPQkUsICJEYW1uZWQgISEgbm8gc2Vuc29yIGZvdW5kIEJ5ZSIpOwotCQlyZXR1cm4gLUVNRURJVU1UWVBFOworLyoJY2FzZSBTRU5TT1JfUE8xMjAwOiAqLworCQlHYW1tYVQgPSBwbzEyMDBfZ2FtbWE7CisJCU1hdHJpeFQgPSBwbzEyMDBfbWF0cml4OworCQlpbml0ID0gcG8xMjAwX2luaXRWR0FfZGF0YTsKKwkJYnJlYWs7CiAJfQorCXVzYl9leGNoYW5nZShnc3BjYV9kZXYsIGluaXQpOwogCWlmIChHYW1tYVQgJiYgTWF0cml4VCkgewogCQlwdXRfdGFiX3RvX3JlZyhnc3BjYV9kZXYsIEdhbW1hVCwgMTcsIDB4Yjg0YSk7CiAJCXB1dF90YWJfdG9fcmVnKGdzcGNhX2RldiwgR2FtbWFULCAxNywgMHhiODViKTsKIAkJcHV0X3RhYl90b19yZWcoZ3NwY2FfZGV2LCBHYW1tYVQsIDE3LCAweGI4NmMpOwogCQlwdXRfdGFiX3RvX3JlZyhnc3BjYV9kZXYsIE1hdHJpeFQsIDksIDB4YjgyYyk7CiAKLQkJLyogU2VlbSBTSEFSUE5FU1MgKi8KLQkJLyoKLQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4ODAsIDB4YjgwYSk7Ci0JCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweGZmLCAweGI4MGIpOwotCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHhmZiwgMHhiODBlKTsKLQkJKi8KLQkJLyogYWxsIDB4NDAgPz8/IGRvIG5vdGhpbmcKLQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4NDAsIDB4YjgyMik7Ci0JCXJlZ193KGdzcGNhX2Rldi0+ZGV2LCAweGEwLCAweDQwLCAweGI4MjMpOwotCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHg0MCwgMHhiODI0KTsKLQkJKi8KLQkJLyogT25seSB3b3JrcyBmb3IgSFY3MTMxUiA/PwotCQlyZWdfciAoZ3NwY2FfZGV2LCAweGExLCAweGI4ODEsIDEpOwotCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHhmZTAxLCAweGI4ODEpOwotCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHg3OSwgMHhiODAxKTsKLQkJKi8KLQkJLyogb25seSBodjcxMzFyIGV0IG92NzY2MAotCQlyZWdfdyhnc3BjYV9kZXYtPmRldiwgMHhhMCwgMHgyMCwgMHhiODI3KTsKLQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4ZmYsIDB4YjgyNik7ICogSVNQX0dBSU4gODAKLQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4YTAsIDB4MjMsIDB4YjgwMCk7ICogSVNQIENUUkxfQkFTCi0JCSovCiAJCS8qIHNldCB0aGUgbGVkIG9uIDB4MDg5MiAweDA4OTYgKi8KIAkJaWYgKHNkLT5zZW5zb3IgIT0gU0VOU09SX1BPMTIwMCkgewogCQkJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIDB4ODksIDB4ZmZmZiwgMHhmZGZmKTsKQEAgLTIyOTYsMTIgKzMxNjksOCBAQAogCQkJInZjMDMyeCBoZWFkZXIgcGFja2V0IGZvdW5kIGxlbiAlZCIsIGxlbik7CiAJCWZyYW1lID0gZ3NwY2FfZnJhbWVfYWRkKGdzcGNhX2RldiwgTEFTVF9QQUNLRVQsIGZyYW1lLAogCQkJCQkJZGF0YSwgMCk7Ci0JCWlmIChzZC0+YnJpZGdlID09IEJSSURHRV9WQzAzMjEpIHsKLSNkZWZpbmUgVkNIRFJTWiA0NgotCQkJZGF0YSArPSBWQ0hEUlNaOwotCQkJbGVuIC09IFZDSERSU1o7Ci0jdW5kZWYgVkNIRFJTWgotCQl9CisJCWRhdGEgKz0gc2QtPmltYWdlX29mZnNldDsKKwkJbGVuIC09IHNkLT5pbWFnZV9vZmZzZXQ7CiAJCWdzcGNhX2ZyYW1lX2FkZChnc3BjYV9kZXYsIEZJUlNUX1BBQ0tFVCwgZnJhbWUsCiAJCQkJZGF0YSwgbGVuKTsKIAkJcmV0dXJuOwpAQCAtMjM5OSw3ICszMjY4LDggQEAKIAkJY2FzZSAxOgkJLyogVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1lfNTBIWiAqLwogCQkJc3RyY3B5KChjaGFyICopIG1lbnUtPm5hbWUsICI1MCBIeiIpOwogCQkJcmV0dXJuIDA7Ci0JCWNhc2UgMjoJCS8qIFY0TDJfQ0lEX1BPV0VSX0xJTkVfRlJFUVVFTkNZXzYwSFogKi8KKwkJZGVmYXVsdDoKKy8qCQljYXNlIDI6CQkgKiBWNEwyX0NJRF9QT1dFUl9MSU5FX0ZSRVFVRU5DWV82MEhaICovCiAJCQlzdHJjcHkoKGNoYXIgKikgbWVudS0+bmFtZSwgIjYwIEh6Iik7CiAJCQlyZXR1cm4gMDsKIAkJfQpAQCAtMjQyNCw2ICszMjk0LDcgQEAKIAogLyogLS0gbW9kdWxlIGluaXRpYWxpc2F0aW9uIC0tICovCiBzdGF0aWMgY29uc3QgX19kZXZpbml0ZGF0YSBzdHJ1Y3QgdXNiX2RldmljZV9pZCBkZXZpY2VfdGFibGVbXSA9IHsKKwl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDA1YiksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9WQzAzMjN9LAogCXtVU0JfREVWSUNFKDB4MDQ2ZCwgMHgwODkyKSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX1ZDMDMyMX0sCiAJe1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4OTYpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfVkMwMzIxfSwKIAl7VVNCX0RFVklDRSgweDA0NmQsIDB4MDg5NyksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9WQzAzMjF9LApAQCAtMjQzMiw2ICszMzAzLDcgQEAKIAl7VVNCX0RFVklDRSgweDBhYzgsIDB4MDMyOCksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9WQzAzMjF9LAogCXtVU0JfREVWSUNFKDB4MGFjOCwgMHhjMDAxKSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX1ZDMDMyMX0sCiAJe1VTQl9ERVZJQ0UoMHgwYWM4LCAweGMwMDIpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfVkMwMzIxfSwKKwl7VVNCX0RFVklDRSgweDE1YjgsIDB4NjAwMSksIC5kcml2ZXJfaW5mbyA9IEJSSURHRV9WQzAzMjN9LAogCXtVU0JfREVWSUNFKDB4MTViOCwgMHg2MDAyKSwgLmRyaXZlcl9pbmZvID0gQlJJREdFX1ZDMDMyM30sCiAJe1VTQl9ERVZJQ0UoMHgxN2VmLCAweDQ4MDIpLCAuZHJpdmVyX2luZm8gPSBCUklER0VfVkMwMzIzfSwKIAl7fQpAQCAtMjQ2MCw4ICszMzMyLDExIEBACiAvKiAtLSBtb2R1bGUgaW5zZXJ0IC8gcmVtb3ZlIC0tICovCiBzdGF0aWMgaW50IF9faW5pdCBzZF9tb2RfaW5pdCh2b2lkKQogewotCWlmICh1c2JfcmVnaXN0ZXIoJnNkX2RyaXZlcikgPCAwKQotCQlyZXR1cm4gLTE7CisJaW50IHJldDsKKworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vZ3NwY2EvemMzeHguYwppbmRleCBlYzJhNTNkLi40ZmUwMWQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2dzcGNhL3pjM3h4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9nc3BjYS96YzN4eC5jCkBAIC0yMyw2ICsyMyw3IEBACiAjZGVmaW5lIE1PRFVMRV9OQU1FICJ6YzN4eCIKIAogI2luY2x1ZGUgImdzcGNhLmgiCisjaW5jbHVkZSAianBlZy5oIgogCiBNT0RVTEVfQVVUSE9SKCJNaWNoZWwgWGhhYXJkIDxteGhhYXJkQHVzZXJzLnNvdXJjZWZvcmdlLm5ldD4sICIKIAkJIlNlcmdlIEEuIFN1Y2hrb3YgPFNlcmdlLkEuU0B0b2Noa2EucnU+Iik7CkBAIC0zMSw3ICszMiw3IEBACiAKIHN0YXRpYyBpbnQgZm9yY2Vfc2Vuc29yID0gLTE7CiAKLSNpbmNsdWRlICJqcGVnLmgiCisjZGVmaW5lIFFVQU5UX1ZBTCAxCQkvKiBxdWFudGl6YXRpb24gdGFibGUgKi8KICNpbmNsdWRlICJ6YzN4eC1yZWcuaCIKIAogLyogc3BlY2lmaWMgd2ViY2FtIGRlc2NyaXB0b3IgKi8KQEAgLTQ0LDMwICs0NSwzNiBAQAogCV9fdTggYXV0b2dhaW47CiAJX191OCBsaWdodGZyZXE7CiAJX191OCBzaGFycG5lc3M7CisJdTggcXVhbGl0eTsJCQkvKiBpbWFnZSBxdWFsaXR5ICovCisjZGVmaW5lIFFVQUxJVFlfTUlOIDQwCisjZGVmaW5lIFFVQUxJVFlfTUFYIDYwCisjZGVmaW5lIFFVQUxJVFlfREVGIDUwCiAKLQljaGFyIHFpbmRleDsKIAlzaWduZWQgY2hhciBzZW5zb3I7CQkvKiBUeXBlIG9mIGltYWdlIHNlbnNvciBjaGlwICovCiAvKiAhISB2YWx1ZXMgdXNlZCBpbiBkaWZmZXJlbnQgdGFibGVzICovCi0jZGVmaW5lIFNFTlNPUl9DUzIxMDIgMAotI2RlZmluZSBTRU5TT1JfQ1MyMTAySyAxCi0jZGVmaW5lIFNFTlNPUl9HQzAzMDUgMgotI2RlZmluZSBTRU5TT1JfSERDUzIwMjBiIDMKLSNkZWZpbmUgU0VOU09SX0hWNzEzMUIgNAotI2RlZmluZSBTRU5TT1JfSFY3MTMxQyA1Ci0jZGVmaW5lIFNFTlNPUl9JQ00xMDVBIDYKLSNkZWZpbmUgU0VOU09SX01DNTAxQ0IgNwotI2RlZmluZSBTRU5TT1JfT1Y3NjIwIDgKLS8qI2RlZmluZSBTRU5TT1JfT1Y3NjQ4IDggLSBzYW1lIHZhbHVlcyAqLwotI2RlZmluZSBTRU5TT1JfT1Y3NjMwQyA5Ci0jZGVmaW5lIFNFTlNPUl9QQVMxMDYgMTAKLSNkZWZpbmUgU0VOU09SX1BBUzIwMkIgMTEKLSNkZWZpbmUgU0VOU09SX1BCMDMzMCAxMgotI2RlZmluZSBTRU5TT1JfUE8yMDMwIDEzCi0jZGVmaW5lIFNFTlNPUl9UQVM1MTMwQ0sgMTQKLSNkZWZpbmUgU0VOU09SX1RBUzUxMzBDWFggMTUKLSNkZWZpbmUgU0VOU09SX1RBUzUxMzBDX1ZGMDI1MCAxNgotI2RlZmluZSBTRU5TT1JfTUFYIDE3CisjZGVmaW5lIFNFTlNPUl9BRENNMjcwMCAwCisjZGVmaW5lIFNFTlNPUl9DUzIxMDIgMQorI2RlZmluZSBTRU5TT1JfQ1MyMTAySyAyCisjZGVmaW5lIFNFTlNPUl9HQzAzMDUgMworI2RlZmluZSBTRU5TT1JfSERDUzIwMjBiIDQKKyNkZWZpbmUgU0VOU09SX0hWNzEzMUIgNQorI2RlZmluZSBTRU5TT1JfSFY3MTMxQyA2CisjZGVmaW5lIFNFTlNPUl9JQ00xMDVBIDcKKyNkZWZpbmUgU0VOU09SX01DNTAxQ0IgOAorI2RlZmluZSBTRU5TT1JfT1Y3NjIwIDkKKy8qI2RlZmluZSBTRU5TT1JfT1Y3NjQ4IDkgLSBzYW1lIHZhbHVlcyAqLworI2RlZmluZSBTRU5TT1JfT1Y3NjMwQyAxMAorI2RlZmluZSBTRU5TT1JfUEFTMTA2IDExCisjZGVmaW5lIFNFTlNPUl9QQVMyMDJCIDEyCisjZGVmaW5lIFNFTlNPUl9QQjAzMzAgMTMKKyNkZWZpbmUgU0VOU09SX1BPMjAzMCAxNAorI2RlZmluZSBTRU5TT1JfVEFTNTEzMENLIDE1CisjZGVmaW5lIFNFTlNPUl9UQVM1MTMwQ1hYIDE2CisjZGVmaW5lIFNFTlNPUl9UQVM1MTMwQ19WRjAyNTAgMTcKKyNkZWZpbmUgU0VOU09SX01BWCAxOAogCXVuc2lnbmVkIHNob3J0IGNoaXBfcmV2aXNpb247CisKKwl1OCAqanBlZ19oZHI7CiB9OwogCiAvKiBWNEwyIGNvbnRyb2xzIHN1cHBvcnRlZCBieSB0aGUgZHJpdmVyICovCkBAIC0yMDYsNiArMjEzLDIxMyBAQAogCV9fdTE2CWlkeDsKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBhZGNtMjcwMF9Jbml0aWFsW10gPSB7CisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDBfU1lTVEVNQ09OVFJPTH0sCQkvKiAwMCwwMCwwMSxjYyAqLworCXsweGEwLCAweDA0LCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwJCS8qIDAwLDAyLDA0LGNjICovCisJezB4YTAsIDB4MDAsIFpDM1hYX1IwMDhfQ0xPQ0tTRVRUSU5HfSwJCS8qIDAwLDA4LDAzLGNjICovCisJezB4YTAsIDB4MGEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDBhLGNjICovCisJezB4YTAsIDB4ZDMsIFpDM1hYX1IwOEJfSTJDREVWSUNFQUREUn0sCQkvKiAwMCw4YixkMyxjYyAqLworCXsweGEwLCAweDAyLCBaQzNYWF9SMDAzX0ZSQU1FV0lEVEhISUdIfSwJLyogMDAsMDMsMDIsY2MgKi8KKwl7MHhhMCwgMHg4MCwgWkMzWFhfUjAwNF9GUkFNRVdJRFRITE9XfSwJCS8qIDAwLDA0LDgwLGNjICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDVfRlJBTUVIRUlHSFRISUdIfSwJLyogMDAsMDUsMDEsY2MgKi8KKwl7MHhhMCwgMHhkOCwgWkMzWFhfUjAwNl9GUkFNRUhFSUdIVExPV30sCS8qIDAwLDA2LGQ4LGNjICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMDFfU1lTVEVNT1BFUkFUSU5HfSwJLyogMDAsMDEsMDEsY2MgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwJLyogMDAsMTIsMDMsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwJLyogMDAsMTIsMDEsY2MgKi8KKwl7MHhhMCwgMHgwNSwgWkMzWFhfUjAxMl9WSURFT0NPTlRST0xGVU5DfSwJLyogMDAsMTIsMDUsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5OF9XSU5ZU1RBUlRMT1d9LAkJLyogMDAsOTgsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5QV9XSU5YU1RBUlRMT1d9LAkJLyogMDAsOWEsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQV9GSVJTVFlMT1d9LAkJLyogMDEsMWEsMDAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQ19GSVJTVFhMT1d9LAkJLyogMDEsMWMsMDAsY2MgKi8KKwl7MHhhMCwgMHhkZSwgWkMzWFhfUjA5Q19XSU5IRUlHSFRMT1d9LAkJLyogMDAsOWMsZGUsY2MgKi8KKwl7MHhhMCwgMHg4NiwgWkMzWFhfUjA5RV9XSU5XSURUSExPV30sCQkvKiAwMCw5ZSw4NixjYyAqLworCXsweGJiLCAweDAwLCAweDA0MDB9LAkJCQkvKiAwNCwwMCwwMCxiYiAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGJiLCAweDBmLCAweDE0MGZ9LAkJCQkvKiAxNCwwZiwwZixiYiAqLworCXsweGEwLCAweGI3LCBaQzNYWF9SMTAxX1NFTlNPUkNPUlJFQ1RJT059LAkvKiAwMSwwMSwzNyxjYyAqLworCXsweGEwLCAweDBkLCBaQzNYWF9SMTAwX09QRVJBVElPTk1PREV9LAkJLyogMDEsMDAsMGQsY2MgKi8KKwl7MHhhMCwgMHgwNiwgWkMzWFhfUjE4OV9BV0JTVEFUVVN9LAkJLyogMDEsODksMDYsY2MgKi8KKwl7MHhhMCwgMHgwMywgWkMzWFhfUjFDNV9TSEFSUE5FU1NNT0RFfSwJCS8qIDAxLGM1LDAzLGNjICovCisJezB4YTAsIDB4MTMsIFpDM1hYX1IxQ0JfU0hBUlBORVNTMDV9LAkJLyogMDEsY2IsMTMsY2MgKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjI1MF9ERUFEUElYRUxTTU9ERX0sCS8qIDAyLDUwLDA4LGNjICovCisJezB4YTAsIDB4MDgsIFpDM1hYX1IzMDFfRUVQUk9NQUNDRVNTfSwJCS8qIDAzLDAxLDA4LGNjICovCisJezB4YTAsIDB4NTgsIFpDM1hYX1IxMTZfUkdBSU59LAkJCS8qIDAxLDE2LDU4LGNjICovCisJezB4YTAsIDB4NWEsIFpDM1hYX1IxMThfQkdBSU59LAkJCS8qIDAxLDE4LDVhLGNjICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAkvKiAwMSw4MCwwMixjYyAqLworCXsweGEwLCAweGQzLCBaQzNYWF9SMDhCX0kyQ0RFVklDRUFERFJ9LAkJLyogMDAsOGIsZDMsY2MgKi8KKwl7MHhiYiwgMHgwMCwgMHgwNDA4fSwJCQkJLyogMDQsMDAsMDgsYmIgKi8KKwl7MHhkZCwgMHgwMCwgMHgwMjAwfSwJCQkJLyogMDAsMDIsMDAsZGQgKi8KKwl7MHhiYiwgMHgwMCwgMHgwNDAwfSwJCQkJLyogMDQsMDAsMDAsYmIgKi8KKwl7MHhkZCwgMHgwMCwgMHgwMDEwfSwJCQkJLyogMDAsMDAsMTAsZGQgKi8KKwl7MHhiYiwgMHgwZiwgMHgxNDBmfSwJCQkJLyogMTQsMGYsMGYsYmIgKi8KKwl7MHhiYiwgMHhlMCwgMHgwYzJlfSwJCQkJLyogMGMsZTAsMmUsYmIgKi8KKwl7MHhiYiwgMHgwMSwgMHgyMDAwfSwJCQkJLyogMjAsMDEsMDAsYmIgKi8KKwl7MHhiYiwgMHg5NiwgMHgyNDAwfSwJCQkJLyogMjQsOTYsMDAsYmIgKi8KKwl7MHhiYiwgMHgwNiwgMHgxMDA2fSwJCQkJLyogMTAsMDYsMDYsYmIgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMDEsY2MgKi8KKwl7MHhkZCwgMHgwMCwgMHgwMDEwfSwJCQkJLyogMDAsMDAsMTAsZGQgKi8KKwl7MHhhYSwgMHhmZSwgMHgwMDAyfSwJCQkJLyogMDAsZmUsMDIsYWEgKi8KKwl7MHhhMCwgMHgwYSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMGEsY2MgKi8KKwl7MHhkZCwgMHgwMCwgMHgwMDEwfSwJCQkJLyogMDAsMDAsMTAsZGQgKi8KKwl7MHhiYiwgMHg1ZiwgMHgyMDkwfSwJCQkJLyogMjAsNWYsOTAsYmIgKi8KKwl7MHhiYiwgMHgwMSwgMHg4MDAwfSwJCQkJLyogODAsMDEsMDAsYmIgKi8KKwl7MHhiYiwgMHgwOSwgMHg4NDAwfSwJCQkJLyogODQsMDksMDAsYmIgKi8KKwl7MHhiYiwgMHg4NiwgMHgwMDAyfSwJCQkJLyogMDAsODYsMDIsYmIgKi8KKwl7MHhiYiwgMHhlNiwgMHgwNDAxfSwJCQkJLyogMDQsZTYsMDEsYmIgKi8KKwl7MHhiYiwgMHg4NiwgMHgwODAyfSwJCQkJLyogMDgsODYsMDIsYmIgKi8KKwl7MHhiYiwgMHhlNiwgMHgwYzAxfSwJCQkJLyogMGMsZTYsMDEsYmIgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMDEsY2MgKi8KKwl7MHhkZCwgMHgwMCwgMHgwMDEwfSwJCQkJLyogMDAsMDAsMTAsZGQgKi8KKwl7MHhhYSwgMHhmZSwgMHgwMDAwfSwJCQkJLyogMDAsZmUsMDAsYWEgKi8KKwl7MHhhMCwgMHgwYSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMGEsY2MgKi8KKwl7MHhkZCwgMHgwMCwgMHgwMDEwfSwJCQkJLyogMDAsMDAsMTAsZGQgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMDEsY2MgKi8KKwl7MHhhYSwgMHhmZSwgMHgwMDIwfSwJCQkJLyogMDAsZmUsMjAsYWEgKi8KKy8qbXN3aW4rKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwKKwl7MHhhYSwgMHhmZSwgMHgwMDAyfSwKKwl7MHhhMCwgMHgwYSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwKKwl7MHhhYSwgMHhiNCwgMHhjZDM3fSwKKwl7MHhhYSwgMHhhNCwgMHgwMDA0fSwKKwl7MHhhYSwgMHhhOCwgMHgwMDA3fSwKKwl7MHhhYSwgMHhhYywgMHgwMDA0fSwKKy8qbXN3aW4tKi8KKwl7MHhhMCwgMHgwYSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMGEsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMDEsY2MgKi8KKwl7MHhkZCwgMHgwMCwgMHgwMDEwfSwJCQkJLyogMDAsMDAsMTAsZGQgKi8KKwl7MHhhYSwgMHhmZSwgMHgwMDAwfSwJCQkJLyogMDAsZmUsMDAsYWEgKi8KKwl7MHhhMCwgMHgwYSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMGEsY2MgKi8KKwl7MHhkZCwgMHgwMCwgMHgwMDEwfSwJCQkJLyogMDAsMDAsMTAsZGQgKi8KKwl7MHhiYiwgMHgwNCwgMHgwNDAwfSwJCQkJLyogMDQsMDQsMDAsYmIgKi8KKwl7MHhkZCwgMHgwMCwgMHgwMTAwfSwJCQkJLyogMDAsMDEsMDAsZGQgKi8KKwl7MHhiYiwgMHgwMSwgMHgwNDAwfSwJCQkJLyogMDQsMDEsMDAsYmIgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMDEsY2MgKi8KKwl7MHhhYSwgMHhmZSwgMHgwMDAyfSwJCQkJLyogMDAsZmUsMDIsYWEgKi8KKwl7MHhhMCwgMHgwYSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMGEsY2MgKi8KKwl7MHhiYiwgMHg0MSwgMHgyODAzfSwJCQkJLyogMjgsNDEsMDMsYmIgKi8KKwl7MHhiYiwgMHg0MCwgMHgyYzAzfSwJCQkJLyogMmMsNDAsMDMsYmIgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMDEsY2MgKi8KKwl7MHhhYSwgMHhmZSwgMHgwMDEwfSwJCQkJLyogMDAsZmUsMTAsYWEgKi8KKwl7fQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBhZGNtMjcwMF9Jbml0aWFsU2NhbGVbXSA9IHsKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMF9TWVNURU1DT05UUk9MfSwJCS8qIDAwLDAwLDAxLGNjICovCisJezB4YTAsIDB4MTAsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAkJLyogMDAsMDIsMTAsY2MgKi8KKwl7MHhhMCwgMHgwMCwgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAkJLyogMDAsMDgsMDMsY2MgKi8KKwl7MHhhMCwgMHgwYSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMGEsY2MgKi8KKwl7MHhhMCwgMHhkMywgWkMzWFhfUjA4Ql9JMkNERVZJQ0VBRERSfSwJCS8qIDAwLDhiLGQzLGNjICovCisJezB4YTAsIDB4MDIsIFpDM1hYX1IwMDNfRlJBTUVXSURUSEhJR0h9LAkvKiAwMCwwMywwMixjYyAqLworCXsweGEwLCAweDgwLCBaQzNYWF9SMDA0X0ZSQU1FV0lEVEhMT1d9LAkJLyogMDAsMDQsODAsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwNV9GUkFNRUhFSUdIVEhJR0h9LAkvKiAwMCwwNSwwMSxjYyAqLworCXsweGEwLCAweGQwLCBaQzNYWF9SMDA2X0ZSQU1FSEVJR0hUTE9XfSwJLyogMDAsMDYsZDAsY2MgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMV9TWVNURU1PUEVSQVRJTkd9LAkvKiAwMCwwMSwwMSxjYyAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAkvKiAwMCwxMiwwMyxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAkvKiAwMCwxMiwwMSxjYyAqLworCXsweGEwLCAweDA1LCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAkvKiAwMCwxMiwwNSxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCQkvKiAwMCw5OCwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMDlBX1dJTlhTVEFSVExPV30sCQkvKiAwMCw5YSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTFBX0ZJUlNUWUxPV30sCQkvKiAwMSwxYSwwMCxjYyAqLworCXsweGEwLCAweDAwLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sCQkvKiAwMSwxYywwMCxjYyAqLworCXsweGEwLCAweGQ4LCBaQzNYWF9SMDlDX1dJTkhFSUdIVExPV30sCQkvKiAwMCw5YyxkOCxjYyAqLworCXsweGEwLCAweDg4LCBaQzNYWF9SMDlFX1dJTldJRFRITE9XfSwJCS8qIDAwLDllLDg4LGNjICovCisJezB4YmIsIDB4MDAsIDB4MDQwMH0sCQkJCS8qIDA0LDAwLDAwLGJiICovCisJezB4ZGQsIDB4MDAsIDB4MDAxMH0sCQkJCS8qIDAwLDAwLDEwLGRkICovCisJezB4YmIsIDB4MGYsIDB4MTQwZn0sCQkJCS8qIDE0LDBmLDBmLGJiICovCisJezB4YTAsIDB4YjcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sCS8qIDAxLDAxLDM3LGNjICovCisJezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCQkvKiAwMSwwMCwwZCxjYyAqLworCXsweGEwLCAweDA2LCBaQzNYWF9SMTg5X0FXQlNUQVRVU30sCQkvKiAwMSw4OSwwNixjYyAqLworCXsweGEwLCAweDAzLCBaQzNYWF9SMUM1X1NIQVJQTkVTU01PREV9LAkJLyogMDEsYzUsMDMsY2MgKi8KKwl7MHhhMCwgMHgxMywgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCQkvKiAwMSxjYiwxMyxjYyAqLworCXsweGEwLCAweDA4LCBaQzNYWF9SMjUwX0RFQURQSVhFTFNNT0RFfSwJLyogMDIsNTAsMDgsY2MgKi8KKwl7MHhhMCwgMHgwOCwgWkMzWFhfUjMwMV9FRVBST01BQ0NFU1N9LAkJLyogMDMsMDEsMDgsY2MgKi8KKwl7MHhhMCwgMHg1OCwgWkMzWFhfUjExNl9SR0FJTn0sCQkJLyogMDEsMTYsNTgsY2MgKi8KKwl7MHhhMCwgMHg1YSwgWkMzWFhfUjExOF9CR0FJTn0sCQkJLyogMDEsMTgsNWEsY2MgKi8KKwl7MHhhMCwgMHgwMiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCS8qIDAxLDgwLDAyLGNjICovCisJezB4YTAsIDB4ZDMsIFpDM1hYX1IwOEJfSTJDREVWSUNFQUREUn0sCQkvKiAwMCw4YixkMyxjYyAqLworCXsweGJiLCAweDAwLCAweDA0MDh9LAkJCQkvKiAwNCwwMCwwOCxiYiAqLworCXsweGRkLCAweDAwLCAweDAyMDB9LAkJCQkvKiAwMCwwMiwwMCxkZCAqLworCXsweGJiLCAweDAwLCAweDA0MDB9LAkJCQkvKiAwNCwwMCwwMCxiYiAqLworCXsweGRkLCAweDAwLCAweDAwNTB9LAkJCQkvKiAwMCwwMCw1MCxkZCAqLworCXsweGJiLCAweDBmLCAweDE0MGZ9LAkJCQkvKiAxNCwwZiwwZixiYiAqLworCXsweGJiLCAweGUwLCAweDBjMmV9LAkJCQkvKiAwYyxlMCwyZSxiYiAqLworCXsweGJiLCAweDAxLCAweDIwMDB9LAkJCQkvKiAyMCwwMSwwMCxiYiAqLworCXsweGJiLCAweDk2LCAweDI0MDB9LAkJCQkvKiAyNCw5NiwwMCxiYiAqLworCXsweGJiLCAweDA2LCAweDEwMDZ9LAkJCQkvKiAxMCwwNiwwNixiYiAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGFhLCAweGZlLCAweDAwMDJ9LAkJCQkvKiAwMCxmZSwwMixhYSAqLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGJiLCAweDVmLCAweDIwOTB9LAkJCQkvKiAyMCw1Ziw5MCxiYiAqLworCXsweGJiLCAweDAxLCAweDgwMDB9LAkJCQkvKiA4MCwwMSwwMCxiYiAqLworCXsweGJiLCAweDA5LCAweDg0MDB9LAkJCQkvKiA4NCwwOSwwMCxiYiAqLworCXsweGJiLCAweDg2LCAweDAwMDJ9LAkJCQkvKiAwMCw4OCwwMixiYiAqLworCXsweGJiLCAweGU2LCAweDA0MDF9LAkJCQkvKiAwNCxlNiwwMSxiYiAqLworCXsweGJiLCAweDg2LCAweDA4MDJ9LAkJCQkvKiAwOCw4OCwwMixiYiAqLworCXsweGJiLCAweGU2LCAweDBjMDF9LAkJCQkvKiAwYyxlNiwwMSxiYiAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGFhLCAweGZlLCAweDAwMDB9LAkJCQkvKiAwMCxmZSwwMCxhYSAqLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGFhLCAweGZlLCAweDAwMjB9LAkJCQkvKiAwMCxmZSwyMCxhYSAqLworCS8qKioqKioqLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGFhLCAweGZlLCAweDAwMDB9LAkJCQkvKiAwMCxmZSwwMCxhYSAqLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGRkLCAweDAwLCAweDAwMTB9LAkJCQkvKiAwMCwwMCwxMCxkZCAqLworCXsweGJiLCAweDA0LCAweDA0MDB9LAkJCQkvKiAwNCwwNCwwMCxiYiAqLworCXsweGRkLCAweDAwLCAweDAxMDB9LAkJCQkvKiAwMCwwMSwwMCxkZCAqLworCXsweGJiLCAweDAxLCAweDA0MDB9LAkJCQkvKiAwNCwwMSwwMCxiYiAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGFhLCAweGZlLCAweDAwMDJ9LAkJCQkvKiAwMCxmZSwwMixhYSAqLworCXsweGEwLCAweDBhLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwYSxjYyAqLworCXsweGJiLCAweDQxLCAweDI4MDN9LAkJCQkvKiAyOCw0MSwwMyxiYiAqLworCXsweGJiLCAweDQwLCAweDJjMDN9LAkJCQkvKiAyYyw0MCwwMyxiYiAqLworCXsweGEwLCAweDAxLCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAkvKiAwMCwxMCwwMSxjYyAqLworCXsweGFhLCAweGZlLCAweDAwMTB9LAkJCQkvKiAwMCxmZSwxMCxhYSAqLworCXt9Cit9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGFkY20yNzAwXzUwSFpbXSA9IHsKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMDEsY2MgKi8KKwl7MHhhYSwgMHhmZSwgMHgwMDAyfSwJCQkJLyogMDAsZmUsMDIsYWEgKi8KKwl7MHhhMCwgMHgwYSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMGEsY2MgKi8KKwl7MHhiYiwgMHgwNSwgMHg4NDAwfSwJCQkJLyogODQsMDUsMDAsYmIgKi8KKwl7MHhiYiwgMHhkMCwgMHhiMDA3fSwJCQkJLyogYjAsZDAsMDcsYmIgKi8KKwl7MHhiYiwgMHhhMCwgMHhiODBmfSwJCQkJLyogYjgsYTAsMGYsYmIgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMDEsY2MgKi8KKwl7MHhhYSwgMHhmZSwgMHgwMDEwfSwJCQkJLyogMDAsZmUsMTAsYWEgKi8KKwl7MHhhYSwgMHgyNiwgMHgwMGQwfSwJCQkJLyogMDAsMjYsZDAsYWEgKi8KKwl7MHhhYSwgMHgyOCwgMHgwMDAyfSwJCQkJLyogMDAsMjgsMDIsYWEgKi8KKwl7fQorfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBhZGNtMjcwMF82MEhaW10gPSB7CisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDAxLGNjICovCisJezB4YWEsIDB4ZmUsIDB4MDAwMn0sCQkJCS8qIDAwLGZlLDAyLGFhICovCisJezB4YTAsIDB4MGEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDBhLGNjICovCisJezB4YmIsIDB4MDcsIDB4ODQwMH0sCQkJCS8qIDg0LDA3LDAwLGJiICovCisJezB4YmIsIDB4ODIsIDB4YjAwNn0sCQkJCS8qIGIwLDgyLDA2LGJiICovCisJezB4YmIsIDB4MDQsIDB4YjgwZH0sCQkJCS8qIGI4LDA0LDBkLGJiICovCisJezB4YTAsIDB4MDEsIFpDM1hYX1IwMTBfQ01PU1NFTlNPUlNFTEVDVH0sCS8qIDAwLDEwLDAxLGNjICovCisJezB4YWEsIDB4ZmUsIDB4MDAxMH0sCQkJCS8qIDAwLGZlLDEwLGFhICovCisJezB4YWEsIDB4MjYsIDB4MDA1N30sCQkJCS8qIDAwLDI2LDU3LGFhICovCisJezB4YWEsIDB4MjgsIDB4MDAwMn0sCQkJCS8qIDAwLDI4LDAyLGFhICovCisJe30KK307CitzdGF0aWMgY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gYWRjbTI3MDBfTm9GbGlrZXJbXSA9IHsKKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMDEsY2MgKi8KKwl7MHhhYSwgMHhmZSwgMHgwMDAyfSwJCQkJLyogMDAsZmUsMDIsYWEgKi8KKwl7MHhhMCwgMHgwYSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMGEsY2MgKi8KKwl7MHhiYiwgMHgwNywgMHg4NDAwfSwJCQkJLyogODQsMDcsMDAsYmIgKi8KKwl7MHhiYiwgMHgwNSwgMHhiMDAwfSwJCQkJLyogYjAsMDUsMDAsYmIgKi8KKwl7MHhiYiwgMHhhMCwgMHhiODAxfSwJCQkJLyogYjgsYTAsMDEsYmIgKi8KKwl7MHhhMCwgMHgwMSwgWkMzWFhfUjAxMF9DTU9TU0VOU09SU0VMRUNUfSwJLyogMDAsMTAsMDEsY2MgKi8KKwl7MHhhYSwgMHhmZSwgMHgwMDEwfSwJCQkJLyogMDAsZmUsMTAsYWEgKi8KKwl7fQorfTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiBjczIxMDJfSW5pdGlhbFtdID0gewogCXsweGExLCAweDAxLCAweDAwMDh9LAogCXsweGExLCAweDAxLCAweDAwMDh9LApAQCAtODc3LDcgKzEwOTEsNyBAQAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uIGNzMjEwMktfSW5pdGlhbFNjYWxlW10gPSB7Ci0JezB4YTAsIDB4MTEsIFpDM1hYX1IwMDJfQ0xPQ0tTRUxFQ1R9LAorCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAogCXsweGEwLCAweDAwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKIAl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAogCXsweGEwLCAweDA4LCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LApAQCAtODk0LDYgKzExMDgsNyBAQAogCXsweGEwLCAweDAwLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sCiAJezB4YTAsIDB4ZTgsIFpDM1hYX1IwOUNfV0lOSEVJR0hUTE9XfSwKIAl7MHhhMCwgMHg4OCwgWkMzWFhfUjA5RV9XSU5XSURUSExPV30sCisvKmZpeG1lOiBuZXh0IHNlcXVlbmNlID0gaTJjIGV4Y2hhbmdlcyovCiAJezB4YTAsIDB4NTUsIFpDM1hYX1IwOEJfSTJDREVWSUNFQUREUn0sCiAJezB4YTAsIDB4MTgsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCiAJezB4YTAsIDB4MDAsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LApAQCAtMTA3NywyMDcgKzEyOTIsNiBAQAogCXsweGEwLCAweDYwLCBaQzNYWF9SMTE2X1JHQUlOfSwKIAl7MHhhMCwgMHg0MCwgWkMzWFhfUjExN19HR0FJTn0sCiAJezB4YTAsIDB4NGMsIFpDM1hYX1IxMThfQkdBSU59LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDAwX1NZU1RFTUNPTlRST0x9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDAyX0NMT0NLU0VMRUNUfSwKLQl7MHhhMCwgMHgwMywgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkd9LAotCXsweGEwLCAweDA4LCBaQzNYWF9SMDEwX0NNT1NTRU5TT1JTRUxFQ1R9LAotCXsweGEwLCAweDAyLCBaQzNYWF9SMDAzX0ZSQU1FV0lEVEhISUdIfSwKLQl7MHhhMCwgMHg4MCwgWkMzWFhfUjAwNF9GUkFNRVdJRFRITE9XfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwNV9GUkFNRUhFSUdIVEhJR0h9LAotCXsweGEwLCAweGUwLCBaQzNYWF9SMDA2X0ZSQU1FSEVJR0hUTE9XfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjAwMV9TWVNURU1PUEVSQVRJTkd9LAotCXsweGEwLCAweDAzLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDEyX1ZJREVPQ09OVFJPTEZVTkN9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk4X1dJTllTVEFSVExPV30sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOUFfV0lOWFNUQVJUTE9XfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjExQV9GSVJTVFlMT1d9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMTFDX0ZJUlNUWExPV30sCi0JezB4YTAsIDB4ZTgsIFpDM1hYX1IwOUNfV0lOSEVJR0hUTE9XfSwKLQl7MHhhMCwgMHg4OCwgWkMzWFhfUjA5RV9XSU5XSURUSExPV30sCi0JezB4YTAsIDB4NTUsIFpDM1hYX1IwOEJfSTJDREVWSUNFQUREUn0sCi0JezB4YTAsIDB4MTgsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgwQSwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgwMiwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDBCLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDAyLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MEMsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4N2IsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgwRCwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHhBMywgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDAzLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweGZiLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MDUsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgwNiwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgwMywgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDA5LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDA4LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MEUsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDQsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgwZiwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDEwLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDE4LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MTEsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MTgsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgxMiwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgxOCwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDE1LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MTYsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MGMsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgxNywgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgwQywgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDE4LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDA0LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4ZjcsIFpDM1hYX1IxMDFfU0VOU09SQ09SUkVDVElPTn0sCi0JezB4YTAsIDB4MDUsIFpDM1hYX1IwMTJfVklERU9DT05UUk9MRlVOQ30sCi0JezB4YTAsIDB4NzgsIFpDM1hYX1IxOERfWVRBUkdFVH0sCi0JezB4YTAsIDB4MGQsIFpDM1hYX1IxMDBfT1BFUkFUSU9OTU9ERX0sCi0JezB4YTAsIDB4MDYsIFpDM1hYX1IxODlfQVdCU1RBVFVTfSwKLQl7MHhhMCwgMHgwMywgWkMzWFhfUjFDNV9TSEFSUE5FU1NNT0RFfSwKLQl7MHhhMCwgMHgxMywgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCi0JezB4YTAsIDB4MjAsIFpDM1hYX1IwODdfRVhQVElNRU1JRH0sCi0JezB4YTAsIDB4MjEsIFpDM1hYX1IwODhfRVhQVElNRUxPV30sCi0JezB4YTAsIDB4MDgsIFpDM1hYX1IyNTBfREVBRFBJWEVMU01PREV9LAotCXsweGEwLCAweDA4LCBaQzNYWF9SMzAxX0VFUFJPTUFDQ0VTU30sCi0JezB4YTAsIDB4MDAsIDB4MDFhZH0sCi0JezB4YTAsIDB4MDEsIDB4MDFiMX0sCi0JezB4YTAsIDB4MDIsIFpDM1hYX1IxODBfQVVUT0NPUlJFQ1RFTkFCTEV9LAotCXsweGEwLCAweDYwLCBaQzNYWF9SMTE2X1JHQUlOfSwKLQl7MHhhMCwgMHg0MCwgWkMzWFhfUjExN19HR0FJTn0sCi0JezB4YTAsIDB4NGMsIFpDM1hYX1IxMThfQkdBSU59LAotCXsweGEwLCAweDAzLCBaQzNYWF9SMDA4X0NMT0NLU0VUVElOR30sCS8qIGNsb2NrID8gKi8KLQl7MHhhMCwgMHgwOCwgWkMzWFhfUjFDNl9TSEFSUE5FU1MwMH0sCS8qIHNoYXJwbmVzcysgKi8KLQl7MHhhMCwgMHgwZiwgWkMzWFhfUjFDQl9TSEFSUE5FU1MwNX0sCS8qIHNoYXJwbmVzcy0gKi8KLQl7MHhhMCwgMHgxMywgWkMzWFhfUjEyMF9HQU1NQTAwfSwJLyogZ2FtbWEgNCAqLwotCXsweGEwLCAweDM4LCBaQzNYWF9SMTIxX0dBTU1BMDF9LAotCXsweGEwLCAweDU5LCBaQzNYWF9SMTIyX0dBTU1BMDJ9LAotCXsweGEwLCAweDc5LCBaQzNYWF9SMTIzX0dBTU1BMDN9LAotCXsweGEwLCAweDkyLCBaQzNYWF9SMTI0X0dBTU1BMDR9LAotCXsweGEwLCAweGE3LCBaQzNYWF9SMTI1X0dBTU1BMDV9LAotCXsweGEwLCAweGI5LCBaQzNYWF9SMTI2X0dBTU1BMDZ9LAotCXsweGEwLCAweGM4LCBaQzNYWF9SMTI3X0dBTU1BMDd9LAotCXsweGEwLCAweGQ0LCBaQzNYWF9SMTI4X0dBTU1BMDh9LAotCXsweGEwLCAweGRmLCBaQzNYWF9SMTI5X0dBTU1BMDl9LAotCXsweGEwLCAweGU3LCBaQzNYWF9SMTJBX0dBTU1BMEF9LAotCXsweGEwLCAweGVlLCBaQzNYWF9SMTJCX0dBTU1BMEJ9LAotCXsweGEwLCAweGY0LCBaQzNYWF9SMTJDX0dBTU1BMEN9LAotCXsweGEwLCAweGY5LCBaQzNYWF9SMTJEX0dBTU1BMER9LAotCXsweGEwLCAweGZjLCBaQzNYWF9SMTJFX0dBTU1BMEV9LAotCXsweGEwLCAweGZmLCBaQzNYWF9SMTJGX0dBTU1BMEZ9LAotCXsweGEwLCAweDI2LCBaQzNYWF9SMTMwX0dBTU1BMTB9LAotCXsweGEwLCAweDIyLCBaQzNYWF9SMTMxX0dBTU1BMTF9LAotCXsweGEwLCAweDIwLCBaQzNYWF9SMTMyX0dBTU1BMTJ9LAotCXsweGEwLCAweDFjLCBaQzNYWF9SMTMzX0dBTU1BMTN9LAotCXsweGEwLCAweDE2LCBaQzNYWF9SMTM0X0dBTU1BMTR9LAotCXsweGEwLCAweDEzLCBaQzNYWF9SMTM1X0dBTU1BMTV9LAotCXsweGEwLCAweDEwLCBaQzNYWF9SMTM2X0dBTU1BMTZ9LAotCXsweGEwLCAweDBkLCBaQzNYWF9SMTM3X0dBTU1BMTd9LAotCXsweGEwLCAweDBiLCBaQzNYWF9SMTM4X0dBTU1BMTh9LAotCXsweGEwLCAweDA5LCBaQzNYWF9SMTM5X0dBTU1BMTl9LAotCXsweGEwLCAweDA3LCBaQzNYWF9SMTNBX0dBTU1BMUF9LAotCXsweGEwLCAweDA2LCBaQzNYWF9SMTNCX0dBTU1BMUJ9LAotCXsweGEwLCAweDA1LCBaQzNYWF9SMTNDX0dBTU1BMUN9LAotCXsweGEwLCAweDA0LCBaQzNYWF9SMTNEX0dBTU1BMUR9LAotCXsweGEwLCAweDAzLCBaQzNYWF9SMTNFX0dBTU1BMUV9LAotCXsweGEwLCAweDAyLCBaQzNYWF9SMTNGX0dBTU1BMUZ9LAotCXsweGEwLCAweDU4LCBaQzNYWF9SMTBBX1JHQjAwfSwJLyogbWF0cml4ICovCi0JezB4YTAsIDB4ZjQsIFpDM1hYX1IxMEJfUkdCMDF9LAotCXsweGEwLCAweGY0LCBaQzNYWF9SMTBDX1JHQjAyfSwKLQl7MHhhMCwgMHhmNCwgWkMzWFhfUjEwRF9SR0IxMH0sCi0JezB4YTAsIDB4NTgsIFpDM1hYX1IxMEVfUkdCMTF9LAotCXsweGEwLCAweGY0LCBaQzNYWF9SMTBGX1JHQjEyfSwKLQl7MHhhMCwgMHhmNCwgWkMzWFhfUjExMF9SR0IyMH0sCi0JezB4YTAsIDB4ZjQsIFpDM1hYX1IxMTFfUkdCMjF9LAotCXsweGEwLCAweDU4LCBaQzNYWF9SMTEyX1JHQjIyfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwMTlfQVVUT0FESlVTVEZQU30sCi0JezB4YTAsIDB4MTgsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgxMywgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgyMiwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDE0LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MjAsIFpDM1hYX1IwOTJfSTJDQUREUkVTU1NFTEVDVH0sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTNfSTJDU0VUVkFMVUV9LAotCXsweGEwLCAweDAwLCBaQzNYWF9SMDk0X0kyQ1dSSVRFQUNLfSwKLQl7MHhhMCwgMHgwMSwgWkMzWFhfUjA5MF9JMkNDT01NQU5EfSwKLQl7MHhhMCwgMHgyMSwgWkMzWFhfUjA5Ml9JMkNBRERSRVNTU0VMRUNUfSwKLQl7MHhhMCwgMHgyMiwgWkMzWFhfUjA5M19JMkNTRVRWQUxVRX0sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IwOTRfSTJDV1JJVEVBQ0t9LAotCXsweGEwLCAweDAxLCBaQzNYWF9SMDkwX0kyQ0NPTU1BTkR9LAotCXsweGEwLCAweDE4LCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAotCXsweGEwLCAweDA0LCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjA5NF9JMkNXUklURUFDS30sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwOTBfSTJDQ09NTUFORH0sCi0JezB4YTAsIDB4MDEsIFpDM1hYX1IwQTNfRVhQT1NVUkVUSU1FSElHSH0sCi0JezB4YTAsIDB4MjIsIFpDM1hYX1IwQTRfRVhQT1NVUkVUSU1FTE9XfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5MF9FWFBPU1VSRUxJTUlUSElHSH0sCi0JezB4YTAsIDB4MDcsIFpDM1hYX1IxOTFfRVhQT1NVUkVMSU1JVE1JRH0sCi0JezB4YTAsIDB4ZWUsIFpDM1hYX1IxOTJfRVhQT1NVUkVMSU1JVExPV30sCi0JezB4YTAsIDB4MDAsIFpDM1hYX1IxOTVfQU5USUZMSUNLRVJISUdIfSwKLQl7MHhhMCwgMHgwMCwgWkMzWFhfUjE5Nl9BTlRJRkxJQ0tFUk1JRH0sCi0JezB4YTAsIDB4M2EsIFpDM1hYX1IxOTdfQU5USUZMSUNLRVJMT1d9LAotCXsweGEwLCAweDEwLCBaQzNYWF9SMThDX0FFRlJFRVpFfSwKLQl7MHhhMCwgMHgyMCwgWkMzWFhfUjE4Rl9BRVVORlJFRVpFfSwKLQl7MHhhMCwgMHgwYywgWkMzWFhfUjFBOV9ESUdJVEFMTElNSVRESUZGfSwKLQl7MHhhMCwgMHgyOCwgWkMzWFhfUjFBQV9ESUdJVEFMR0FJTlNURVB9LAotCXsweGEwLCAweDA0LCBaQzNYWF9SMDFEX0hTWU5DXzB9LAotCXsweGEwLCAweDBmLCBaQzNYWF9SMDFFX0hTWU5DXzF9LAotCXsweGEwLCAweDE5LCBaQzNYWF9SMDFGX0hTWU5DXzJ9LAotCXsweGEwLCAweDFmLCBaQzNYWF9SMDIwX0hTWU5DXzN9LAotCXsweGEwLCAweDYwLCBaQzNYWF9SMTFEX0dMT0JBTEdBSU59LAotCXsweGEwLCAweDYwLCBaQzNYWF9SMTFEX0dMT0JBTEdBSU59LAotCXsweGEwLCAweDQyLCBaQzNYWF9SMTgwX0FVVE9DT1JSRUNURU5BQkxFfSwKLQl7MHhhMCwgMHg0MiwgWkMzWFhfUjE4MF9BVVRPQ09SUkVDVEVOQUJMRX0sCi0JezB4YTAsIDB4NjAsIFpDM1hYX1IxMTZfUkdBSU59LAotCXsweGEwLCAweDQwLCBaQzNYWF9SMTE3X0dHQUlOfSwKLQl7MHhhMCwgMHg0YywgWkMzWFhfUjExOF9CR0FJTn0sCiAJezB4YTAsIDB4MDQsIFpDM1hYX1IxQTdfQ0FMQ0dMT0JBTE1FQU59LAogCXsweGEwLCAweDIwLCBaQzNYWF9SMDkyX0kyQ0FERFJFU1NTRUxFQ1R9LAogCXsweGEwLCAweDAxLCBaQzNYWF9SMDkzX0kyQ1NFVFZBTFVFfSwKQEAgLTEzMzQsNiArMTM0OCw3IEBACiAJezB4YTAsIDB4MDAsIFpDM1hYX1IxQTdfQ0FMQ0dMT0JBTE1FQU59LAogCXsweGEwLCAweDA0LCBaQzNYWF9SMUE3X0NBTENHTE9CQUxNRUFOfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTn0sCisvKmZpeG1lOndoYXQgZG9lcyB0aGUgbmV4dCBzZXF1ZW5jZT8qLwogCXsweGEwLCAweDA0LCBaQzNYWF9SMUE3X0NBTENHTE9CQUxNRUFOfSwKIAl7MHhhMCwgMHgwMCwgWkMzWFhfUjFBN19DQUxDR0xPQkFMTUVBTn0sCiAJezB4YTAsIDB4MDQsIFpDM1hYX1IxQTdfQ0FMQ0dMT0JBTE1FQU59LApAQCAtNjIzNyw3ICs2MjUyLDcgQEAKIAl7fQogfTsKIAotc3RhdGljIGludCByZWdfcl9pKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKK3N0YXRpYyB1OCByZWdfcl9pKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJX191MTYgaW5kZXgpCiB7CiAJdXNiX2NvbnRyb2xfbXNnKGdzcGNhX2Rldi0+ZGV2LApAQCAtNjI1MCwxMCArNjI2NSwxMCBAQAogCXJldHVybiBnc3BjYV9kZXYtPnVzYl9idWZbMF07CiB9CiAKLXN0YXRpYyBpbnQgcmVnX3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorc3RhdGljIHU4IHJlZ19yKHN0cnVjdCBnc3BjYV9kZXYgKmdzcGNhX2RldiwKIAkJX191MTYgaW5kZXgpCiB7Ci0JaW50IHJldDsKKwl1OCByZXQ7CiAKIAlyZXQgPSByZWdfcl9pKGdzcGNhX2RldiwgaW5kZXgpOwogCVBERUJVRyhEX1VTQkksICJyZWcgciBbJTA0eF0gLT4gJTAyeCIsIGluZGV4LCByZXQpOwpAQCAtNjI4Niw4ICs2MzAxLDggQEAKIAlfX3U4IHJldGJ5dGU7CiAJX191MTYgcmV0dmFsOwogCi0JcmVnX3dfaShnc3BjYV9kZXYtPmRldiwgcmVnLCAweDkyKTsKLQlyZWdfd19pKGdzcGNhX2Rldi0+ZGV2LCAweDAyLCAweDkwKTsJCS8qIDwtIHJlYWQgY29tbWFuZCAqLworCXJlZ193X2koZ3NwY2FfZGV2LT5kZXYsIHJlZywgMHgwMDkyKTsKKwlyZWdfd19pKGdzcGNhX2Rldi0+ZGV2LCAweDAyLCAweDAwOTApOwkJLyogPC0gcmVhZCBjb21tYW5kICovCiAJbXNsZWVwKDI1KTsKIAlyZXRieXRlID0gcmVnX3JfaShnc3BjYV9kZXYsIDB4MDA5MSk7CQkvKiByZWFkIHN0YXR1cyAqLwogCXJldHZhbCA9IHJlZ19yX2koZ3NwY2FfZGV2LCAweDAwOTUpOwkJLyogcmVhZCBMb3dieXRlICovCkBAIC02MzMyLDYgKzYzNDcsMTIgQEAKIAkJCQkgIGFjdGlvbi0+aWR4ICYgMHhmZiwJCS8qIHZhbEwgKi8KIAkJCQkgIGFjdGlvbi0+aWR4ID4+IDgpOwkJLyogdmFsSCAqLwogCQkJYnJlYWs7CisJCWNhc2UgMHhiYjoKKwkJCWkyY193cml0ZShnc3BjYV9kZXYsCisJCQkJICBhY3Rpb24tPmlkeCA+PiA4LAkJLyogcmVnICovCisJCQkJICBhY3Rpb24tPmlkeCAmIDB4ZmYsCQkvKiB2YWxMICovCisJCQkJICBhY3Rpb24tPnZhbCk7CQkJLyogdmFsSCAqLworCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAvKgkJY2FzZSAweGRkOgkgKiBkZWxheSAqLwogCQkJbXNsZWVwKGFjdGlvbi0+dmFsIC8gNjQgKyAxMCk7CkBAIC02MzQ3LDYgKzYzNjgsMTAgQEAKIAlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CiAJaW50IGk7CiAJY29uc3QgX191OCAqbWF0cml4OworCXN0YXRpYyBjb25zdCB1OCBhZGNtMjcwMF9tYXRyaXhbOV0gPQorLyoJCXsweDY2LCAweGVkLCAweGVkLCAweGVkLCAweDY2LCAweGVkLCAweGVkLCAweGVkLCAweDY2fTsgKi8KKy8qbXMtd2luKi8KKwkJezB4NzQsIDB4ZWQsIDB4ZWQsIDB4ZWQsIDB4NzQsIDB4ZWQsIDB4ZWQsIDB4ZWQsIDB4NzR9OwogCXN0YXRpYyBjb25zdCBfX3U4IGdjMDMwNV9tYXRyaXhbOV0gPQogCQl7MHg1MCwgMHhmOCwgMHhmOCwgMHhmOCwgMHg1MCwgMHhmOCwgMHhmOCwgMHhmOCwgMHg1MH07CiAJc3RhdGljIGNvbnN0IF9fdTggb3Y3NjIwX21hdHJpeFs5XSA9CkBAIC02MzU4LDIzICs2MzgzLDI0IEBACiAJc3RhdGljIGNvbnN0IF9fdTggdmYwMjUwX21hdHJpeFs5XSA9CiAJCXsweDdiLCAweGVhLCAweGVhLCAweGVhLCAweDdiLCAweGVhLCAweGVhLCAweGVhLCAweDdifTsKIAlzdGF0aWMgY29uc3QgX191OCAqbWF0cml4X3RiW1NFTlNPUl9NQVhdID0gewotCQlOVUxMLAkJLyogU0VOU09SX0NTMjEwMiAwICovCi0JCU5VTEwsCQkvKiBTRU5TT1JfQ1MyMTAySyAxICovCi0JCWdjMDMwNV9tYXRyaXgsCS8qIFNFTlNPUl9HQzAzMDUgMiAqLwotCQlOVUxMLAkJLyogU0VOU09SX0hEQ1MyMDIwYiAzICovCi0JCU5VTEwsCQkvKiBTRU5TT1JfSFY3MTMxQiA0ICovCi0JCU5VTEwsCQkvKiBTRU5TT1JfSFY3MTMxQyA1ICovCi0JCU5VTEwsCQkvKiBTRU5TT1JfSUNNMTA1QSA2ICovCi0JCU5VTEwsCQkvKiBTRU5TT1JfTUM1MDFDQiA3ICovCi0JCW92NzYyMF9tYXRyaXgsCS8qIFNFTlNPUl9PVjc2MjAgOCAqLwotCQlOVUxMLAkJLyogU0VOU09SX09WNzYzMEMgOSAqLwotCQlOVUxMLAkJLyogU0VOU09SX1BBUzEwNiAxMCAqLwotCQlwYXMyMDJiX21hdHJpeCwJLyogU0VOU09SX1BBUzIwMkIgMTEgKi8KLQkJTlVMTCwJCS8qIFNFTlNPUl9QQjAzMzAgMTIgKi8KLQkJcG8yMDMwX21hdHJpeCwJLyogU0VOU09SX1BPMjAzMCAxMyAqLwotCQlOVUxMLAkJLyogU0VOU09SX1RBUzUxMzBDSyAxNCAqLwotCQlOVUxMLAkJLyogU0VOU09SX1RBUzUxMzBDWFggMTUgKi8KLQkJdmYwMjUwX21hdHJpeCwJLyogU0VOU09SX1RBUzUxMzBDX1ZGMDI1MCAxNiAqLworCQlhZGNtMjcwMF9tYXRyaXgsIC8qIFNFTlNPUl9BRENNMjcwMCAwICovCisJCU5VTEwsCQkvKiBTRU5TT1JfQ1MyMTAyIDEgKi8KKwkJTlVMTCwJCS8qIFNFTlNPUl9DUzIxMDJLIDIgKi8KKwkJZ2MwMzA1X21hdHJpeCwJLyogU0VOU09SX0dDMDMwNSAzICovCisJCU5VTEwsCQkvKiBTRU5TT1JfSERDUzIwMjBiIDQgKi8KKwkJTlVMTCwJCS8qIFNFTlNPUl9IVjcxMzFCIDUgKi8KKwkJTlVMTCwJCS8qIFNFTlNPUl9IVjcxMzFDIDYgKi8KKwkJTlVMTCwJCS8qIFNFTlNPUl9JQ00xMDVBIDcgKi8KKwkJTlVMTCwJCS8qIFNFTlNPUl9NQzUwMUNCIDggKi8KKwkJb3Y3NjIwX21hdHJpeCwJLyogU0VOU09SX09WNzYyMCA5ICovCisJCU5VTEwsCQkvKiBTRU5TT1JfT1Y3NjMwQyAxMCAqLworCQlOVUxMLAkJLyogU0VOU09SX1BBUzEwNiAxMSAqLworCQlwYXMyMDJiX21hdHJpeCwJLyogU0VOU09SX1BBUzIwMkIgMTIgKi8KKwkJTlVMTCwJCS8qIFNFTlNPUl9QQjAzMzAgMTMgKi8KKwkJcG8yMDMwX21hdHJpeCwJLyogU0VOU09SX1BPMjAzMCAxNCAqLworCQlOVUxMLAkJLyogU0VOU09SX1RBUzUxMzBDSyAxNSAqLworCQlOVUxMLAkJLyogU0VOU09SX1RBUzUxMzBDWFggMTYgKi8KKwkJdmYwMjUwX21hdHJpeCwJLyogU0VOU09SX1RBUzUxMzBDX1ZGMDI1MCAxNyAqLwogCX07CiAKIAltYXRyaXggPSBtYXRyaXhfdGJbc2QtPnNlbnNvcl07CkBAIC02Mzk4LDggKzY0MjQsMTEgQEAKIC8qZml4bWU6IGlzIGl0IHJlYWxseSB3cml0ZSB0byAwMTFkIGFuZCAwMThkIGZvciBhbGwgb3RoZXIgc2Vuc29ycz8gKi8KIAlicmlnaHRuZXNzID0gc2QtPmJyaWdodG5lc3M7CiAJcmVnX3coZ3NwY2FfZGV2LT5kZXYsIGJyaWdodG5lc3MsIDB4MDExZCk7Ci0JaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX0hWNzEzMUIpCisJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfQURDTTI3MDA6CisJY2FzZSBTRU5TT1JfSFY3MTMxQjoKIAkJcmV0dXJuOworCX0KIAlpZiAoYnJpZ2h0bmVzcyA8IDB4NzApCiAJCWJyaWdodG5lc3MgKz0gMHgxMDsKIAllbHNlCkBAIC02NTM2LDEwICs2NTY1LDEwIEBACiB7CiAJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKLQlfX3U4IHF1YWxpdHk7CiAJX191OCBmcnh0OwogCiAJc3dpdGNoIChzZC0+c2Vuc29yKSB7CisJY2FzZSBTRU5TT1JfQURDTTI3MDA6CiAJY2FzZSBTRU5TT1JfR0MwMzA1OgogCWNhc2UgU0VOU09SX0hWNzEzMUI6CiAJY2FzZSBTRU5TT1JfT1Y3NjIwOgpAQCAtNjU0NywyNiArNjU3NiwxOCBAQAogCQlyZXR1cm47CiAJfQogLypmaXhtZTogaXMgaXQgcmVhbGx5IDAwMDggMDAwNyAwMDE4IGZvciBhbGwgb3RoZXIgc2Vuc29ycz8gKi8KLQlxdWFsaXR5ID0gc2QtPnFpbmRleDsKLQlyZWdfdyhkZXYsIHF1YWxpdHksIDB4MDAwOCk7CisJcmVnX3coZGV2LCBRVUFOVF9WQUwsIDB4MDAwOCk7CiAJZnJ4dCA9IDB4MzA7CiAJcmVnX3coZGV2LCBmcnh0LCAweDAwMDcpOwotCXN3aXRjaCAocXVhbGl0eSkgewotCWNhc2UgMDoKLQljYXNlIDE6Ci0JY2FzZSAyOgotCQlmcnh0ID0gMHhmZjsKLQkJYnJlYWs7Ci0JY2FzZSAzOgotCQlmcnh0ID0gMHhmMDsKLQkJYnJlYWs7Ci0JY2FzZSA0OgotCQlmcnh0ID0gMHhlMDsKLQkJYnJlYWs7Ci0JY2FzZSA1OgotCQlmcnh0ID0gMHgyMDsKLQkJYnJlYWs7Ci0JfQorI2lmIFFVQU5UX1ZBTCA9PSAwIHx8IFFVQU5UX1ZBTCA9PSAxIHx8IFFVQU5UX1ZBTCA9PSAyCisJZnJ4dCA9IDB4ZmY7CisjZWxpZiBRVUFOVF9WQUwgPT0gMworCWZyeHQgPSAweGYwOworI2VsaWYgUVVBTlRfVkFMID09IDQKKwlmcnh0ID0gMHhlMDsKKyNlbHNlCisJZnJ4dCA9IDB4MjA7CisjZW5kaWYKIAlyZWdfdyhkZXYsIGZyeHQsIDB4MDAxOCk7CiB9CiAKQEAgLTY1ODMsNzEgKzY2MDQsNzUgQEAKIAlpbnQgaSwgbW9kZTsKIAljb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiAqemMzX2ZyZXE7CiAJc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfYWN0aW9uICpmcmVxX3RiW1NFTlNPUl9NQVhdWzZdID0gewotLyogU0VOU09SX0NTMjEwMiAwICovCisvKiBTRU5TT1JfQURDTTI3MDAgMCAqLworCQl7YWRjbTI3MDBfTm9GbGlrZXIsIGFkY20yNzAwX05vRmxpa2VyLAorCQkgYWRjbTI3MDBfNTBIWiwgYWRjbTI3MDBfNTBIWiwKKwkJIGFkY20yNzAwXzYwSFosIGFkY20yNzAwXzYwSFp9LAorLyogU0VOU09SX0NTMjEwMiAxICovCiAJCXtjczIxMDJfTm9GbGlrZXIsIGNzMjEwMl9Ob0ZsaWtlclNjYWxlLAogCQkgY3MyMTAyXzUwSFosIGNzMjEwMl81MEhaU2NhbGUsCiAJCSBjczIxMDJfNjBIWiwgY3MyMTAyXzYwSFpTY2FsZX0sCi0vKiBTRU5TT1JfQ1MyMTAySyAxICovCisvKiBTRU5TT1JfQ1MyMTAySyAyICovCiAJCXtjczIxMDJfTm9GbGlrZXIsIGNzMjEwMl9Ob0ZsaWtlclNjYWxlLAogCQkgTlVMTCwgTlVMTCwgLyogY3VycmVudGx5IGRpc2FibGVkICovCiAJCSBOVUxMLCBOVUxMfSwKLS8qIFNFTlNPUl9HQzAzMDUgMiAqLworLyogU0VOU09SX0dDMDMwNSAzICovCiAJCXtnYzAzMDVfTm9GbGlrZXIsIGdjMDMwNV9Ob0ZsaWtlciwKIAkJIGdjMDMwNV81MEhaLCBnYzAzMDVfNTBIWiwKIAkJIGdjMDMwNV82MEhaLCBnYzAzMDVfNjBIWn0sCi0vKiBTRU5TT1JfSERDUzIwMjBiIDMgKi8KKy8qIFNFTlNPUl9IRENTMjAyMGIgNCAqLwogCQl7aGRjczIwMjBiX05vRmxpa2VyLCBoZGNzMjAyMGJfTm9GbGlrZXIsCiAJCSBoZGNzMjAyMGJfNTBIWiwgaGRjczIwMjBiXzUwSFosCiAJCSBoZGNzMjAyMGJfNjBIWiwgaGRjczIwMjBiXzYwSFp9LAotLyogU0VOU09SX0hWNzEzMUIgNCAqLworLyogU0VOU09SX0hWNzEzMUIgNSAqLwogCQl7aHY3MTMxYl9Ob0ZsaWtlclNjYWxlLCBodjcxMzFiX05vRmxpa2VyLAogCQkgaHY3MTMxYl81MEhaU2NhbGUsIGh2NzEzMWJfNTBIWiwKIAkJIGh2NzEzMWJfNjBIWlNjYWxlLCBodjcxMzFiXzYwSFp9LAotLyogU0VOU09SX0hWNzEzMUMgNSAqLworLyogU0VOU09SX0hWNzEzMUMgNiAqLwogCQl7TlVMTCwgTlVMTCwKIAkJIE5VTEwsIE5VTEwsCiAJCSBOVUxMLCBOVUxMfSwKLS8qIFNFTlNPUl9JQ00xMDVBIDYgKi8KKy8qIFNFTlNPUl9JQ00xMDVBIDcgKi8KIAkJe2ljbTEwNWFfTm9GbGlrZXIsIGljbTEwNWFfTm9GbGlrZXJTY2FsZSwKIAkJIGljbTEwNWFfNTBIWiwgaWNtMTA1YV81MEhaU2NhbGUsCiAJCSBpY20xMDVhXzYwSFosIGljbTEwNWFfNjBIWlNjYWxlfSwKLS8qIFNFTlNPUl9NQzUwMUNCIDcgKi8KKy8qIFNFTlNPUl9NQzUwMUNCIDggKi8KIAkJe01DNTAxQ0JfTm9GbGlrZXIsIE1DNTAxQ0JfTm9GbGlrZXJTY2FsZSwKIAkJIE1DNTAxQ0JfNTBIWiwgTUM1MDFDQl81MEhaU2NhbGUsCiAJCSBNQzUwMUNCXzYwSFosIE1DNTAxQ0JfNjBIWlNjYWxlfSwKLS8qIFNFTlNPUl9PVjc2MjAgOCAqLworLyogU0VOU09SX09WNzYyMCA5ICovCiAJCXtPVjc2MjBfTm9GbGlrZXIsIE9WNzYyMF9Ob0ZsaWtlciwKIAkJIE9WNzYyMF81MEhaLCBPVjc2MjBfNTBIWiwKIAkJIE9WNzYyMF82MEhaLCBPVjc2MjBfNjBIWn0sCi0vKiBTRU5TT1JfT1Y3NjMwQyA5ICovCisvKiBTRU5TT1JfT1Y3NjMwQyAxMCAqLwogCQl7TlVMTCwgTlVMTCwKIAkJIE5VTEwsIE5VTEwsCiAJCSBOVUxMLCBOVUxMfSwKLS8qIFNFTlNPUl9QQVMxMDYgMTAgKi8KKy8qIFNFTlNPUl9QQVMxMDYgMTEgKi8KIAkJe3BhczEwNmJfTm9GbGlrZXIsIHBhczEwNmJfTm9GbGlrZXIsCiAJCSBwYXMxMDZiXzUwSFosIHBhczEwNmJfNTBIWiwKIAkJIHBhczEwNmJfNjBIWiwgcGFzMTA2Yl82MEhafSwKLS8qIFNFTlNPUl9QQVMyMDJCIDExICovCisvKiBTRU5TT1JfUEFTMjAyQiAxMiAqLwogCQl7cGFzMjAyYl9Ob0ZsaWtlclNjYWxlLCBwYXMyMDJiX05vRmxpa2VyLAogCQkgcGFzMjAyYl81MEhaU2NhbGUsIHBhczIwMmJfNTBIWiwKIAkJIHBhczIwMmJfNjBIWlNjYWxlLCBwYXMyMDJiXzYwSFp9LAotLyogU0VOU09SX1BCMDMzMCAxMiAqLworLyogU0VOU09SX1BCMDMzMCAxMyAqLwogCQl7cGIwMzMwX05vRmxpa2VyLCBwYjAzMzBfTm9GbGlrZXJTY2FsZSwKIAkJIHBiMDMzMF81MEhaLCBwYjAzMzBfNTBIWlNjYWxlLAogCQkgcGIwMzMwXzYwSFosIHBiMDMzMF82MEhaU2NhbGV9LAotLyogU0VOU09SX1BPMjAzMCAxMyAqLworLyogU0VOU09SX1BPMjAzMCAxNCAqLwogCQl7UE8yMDMwX05vRmxpa2VyLCBQTzIwMzBfTm9GbGlrZXIsCiAJCSBQTzIwMzBfNTBIWiwgUE8yMDMwXzUwSFosCiAJCSBQTzIwMzBfNjBIWiwgUE8yMDMwXzYwSFp9LAotLyogU0VOU09SX1RBUzUxMzBDSyAxNCAqLworLyogU0VOU09SX1RBUzUxMzBDSyAxNSAqLwogCQl7dGFzNTEzMGN4eF9Ob0ZsaWtlciwgdGFzNTEzMGN4eF9Ob0ZsaWtlclNjYWxlLAogCQkgdGFzNTEzMGN4eF81MEhaLCB0YXM1MTMwY3h4XzUwSFpTY2FsZSwKIAkJIHRhczUxMzBjeHhfNjBIWiwgdGFzNTEzMGN4eF82MEhaU2NhbGV9LAotLyogU0VOU09SX1RBUzUxMzBDWFggMTUgKi8KKy8qIFNFTlNPUl9UQVM1MTMwQ1hYIDE2ICovCiAJCXt0YXM1MTMwY3h4X05vRmxpa2VyLCB0YXM1MTMwY3h4X05vRmxpa2VyU2NhbGUsCiAJCSB0YXM1MTMwY3h4XzUwSFosIHRhczUxMzBjeHhfNTBIWlNjYWxlLAogCQkgdGFzNTEzMGN4eF82MEhaLCB0YXM1MTMwY3h4XzYwSFpTY2FsZX0sCi0vKiBTRU5TT1JfVEFTNTEzMENfVkYwMjUwIDE2ICovCisvKiBTRU5TT1JfVEFTNTEzMENfVkYwMjUwIDE3ICovCiAJCXt0YXM1MTMwY192ZjAyNTBfTm9GbGlrZXIsIHRhczUxMzBjX3ZmMDI1MF9Ob0ZsaWtlclNjYWxlLAogCQkgdGFzNTEzMGNfdmYwMjUwXzUwSFosIHRhczUxMzBjX3ZmMDI1MF81MEhaU2NhbGUsCiAJCSB0YXM1MTMwY192ZjAyNTBfNjBIWiwgdGFzNTEzMGNfdmYwMjUwXzYwSFpTY2FsZX0sCkBAIC02NzAxLDYgKzY3MjYsNyBAQAogCQlyZWdfdyhkZXYsIDB4MGMsIDB4MDAzYik7CiAJCXJlZ193KGRldiwgMHgwOCwgMHgwMDM4KTsKIAkJYnJlYWs7CisJY2FzZSBTRU5TT1JfQURDTTI3MDA6CiAJY2FzZSBTRU5TT1JfR0MwMzA1OgogCWNhc2UgU0VOU09SX09WNzYyMDoKIAljYXNlIFNFTlNPUl9QQjAzMzA6CkBAIC02NzQzLDI2ICs2NzY5LDI1IEBACiBzdGF0aWMgaW50IHZnYV8yd3JfcHJvYmUoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKLQlfX3U4IHJldGJ5dGU7Ci0JX191MTYgY2hlY2t3b3JkOworCXUxNiByZXR3b3JkOwogCiAJc3RhcnRfMndyX3Byb2JlKGRldiwgMHgwMCk7CQkvKiBIVjcxMzFCICovCiAJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgwMSwgMHhhYSwgMHgwMCk7Ci0JcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMSk7Ci0JaWYgKHJldGJ5dGUgIT0gMCkKKwlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAxKTsKKwlpZiAocmV0d29yZCAhPSAwKQogCQlyZXR1cm4gMHgwMDsJCQkvKiBIVjcxMzFCICovCiAKIAlzdGFydF8yd3JfcHJvYmUoZGV2LCAweDA0KTsJCS8qIENTMjEwMiAqLwogCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MDEsIDB4YWEsIDB4MDApOwotCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDEpOwotCWlmIChyZXRieXRlICE9IDApCisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMSk7CisJaWYgKHJldHdvcmQgIT0gMCkKIAkJcmV0dXJuIDB4MDQ7CQkJLyogQ1MyMTAyICovCiAKIAlzdGFydF8yd3JfcHJvYmUoZGV2LCAweDA2KTsJCS8qIE9tbmlWaXNpb24gKi8KIAlyZWdfdyhkZXYsIDB4MDgsIDB4MDA4ZCk7CiAJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgxMSwgMHhhYSwgMHgwMCk7Ci0JcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgxMSk7Ci0JaWYgKHJldGJ5dGUgIT0gMCkgeworCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MTEpOworCWlmIChyZXR3b3JkICE9IDApIHsKIAkJLyogKHNob3VsZCBoYXZlIHJldHVybmVkIDB4YWEpIC0tPiBPbW5pdmlzaW9uPyAqLwogCQkvKiByZWdfciAweDEwIC0+IDB4MDYgLS0+ICAqLwogCQlnb3RvIG92X2NoZWNrOwpAQCAtNjc3MCw0MCArNjc5NSw0MCBAQAogCiAJc3RhcnRfMndyX3Byb2JlKGRldiwgMHgwOCk7CQkvKiBIRENTMjAyMCAqLwogCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MTUsIDB4YWEsIDB4MDApOwotCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MTUpOwotCWlmIChyZXRieXRlICE9IDApCisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgxNSk7CisJaWYgKHJldHdvcmQgIT0gMCkKIAkJcmV0dXJuIDB4MDg7CQkJLyogSERDUzIwMjAgKi8KIAogCXN0YXJ0XzJ3cl9wcm9iZShkZXYsIDB4MGEpOwkJLyogUEIwMzMwICovCiAJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgwNywgMHhhYSwgMHhhYSk7Ci0JcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwNyk7Ci0JaWYgKHJldGJ5dGUgIT0gMCkKKwlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDA3KTsKKwlpZiAocmV0d29yZCAhPSAwKQogCQlyZXR1cm4gMHgwYTsJCQkvKiBQQjAzMzAgKi8KLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAzKTsKLQlpZiAocmV0Ynl0ZSAhPSAwKQorCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDMpOworCWlmIChyZXR3b3JkICE9IDApCiAJCXJldHVybiAweDBhOwkJCS8qIFBCMDMzMCA/PyAqLwotCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDQpOwotCWlmIChyZXRieXRlICE9IDApCisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwNCk7CisJaWYgKHJldHdvcmQgIT0gMCkKIAkJcmV0dXJuIDB4MGE7CQkJLyogUEIwMzMwID8/ICovCiAKIAlzdGFydF8yd3JfcHJvYmUoZGV2LCAweDBjKTsJCS8qIElDTTEwNUEgKi8KIAlpMmNfd3JpdGUoZ3NwY2FfZGV2LCAweDAxLCAweDExLCAweDAwKTsKLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAxKTsKLQlpZiAocmV0Ynl0ZSAhPSAwKQorCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDEpOworCWlmIChyZXR3b3JkICE9IDApCiAJCXJldHVybiAweDBjOwkJCS8qIElDTTEwNUEgKi8KIAogCXN0YXJ0XzJ3cl9wcm9iZShkZXYsIDB4MGUpOwkJLyogUEFTMjAyQkNCICovCiAJcmVnX3coZGV2LCAweDA4LCAweDAwOGQpOwogCWkyY193cml0ZShnc3BjYV9kZXYsIDB4MDMsIDB4YWEsIDB4MDApOwogCW1zbGVlcCg1MDApOwotCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDMpOwotCWlmIChyZXRieXRlICE9IDApCisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMyk7CisJaWYgKHJldHdvcmQgIT0gMCkKIAkJcmV0dXJuIDB4MGU7CQkJLyogUEFTMjAyQkNCICovCiAKIAlzdGFydF8yd3JfcHJvYmUoZGV2LCAweDAyKTsJCS8qID8/ICovCiAJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgwMSwgMHhhYSwgMHgwMCk7Ci0JcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMSk7Ci0JaWYgKHJldGJ5dGUgIT0gMCkKKwlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAxKTsKKwlpZiAocmV0d29yZCAhPSAwKQogCQlyZXR1cm4gMHgwMjsJCQkvKiA/PyAqLwogb3ZfY2hlY2s6CiAJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMTApOwkJLyogPz8gKi8KQEAgLTY4MTcsMTIgKzY4NDIsMTAgQEAKIAltc2xlZXAoNTAwKTsKIAlyZWdfdyhkZXYsIDB4MDEsIDB4MDAxMik7CiAJaTJjX3dyaXRlKGdzcGNhX2RldiwgMHgxMiwgMHg4MCwgMHgwMCk7CS8qIHNlbnNvciByZXNldCAqLwotCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MGEpOwotCWNoZWNrd29yZCA9IHJldGJ5dGUgPDwgODsKLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDBiKTsKLQljaGVja3dvcmQgfD0gcmV0Ynl0ZTsKLQlQREVCVUcoRF9QUk9CRSwgInByb2JlIDJ3ciBvdiB2Z2EgMHglMDR4IiwgY2hlY2t3b3JkKTsKLQlzd2l0Y2ggKGNoZWNrd29yZCkgeworCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MGEpIDw8IDg7CisJcmV0d29yZCB8PSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MGIpOworCVBERUJVRyhEX1BST0JFLCAicHJvYmUgMndyIG92IHZnYSAweCUwNHgiLCByZXR3b3JkKTsKKwlzd2l0Y2ggKHJldHdvcmQpIHsKIAljYXNlIDB4NzYzMToJCQkJLyogT1Y3NjMwQyAqLwogCQlyZWdfdyhkZXYsIDB4MDYsIDB4MDAxMCk7CiAJCWJyZWFrOwpAQCAtNjgzMiw3ICs2ODU1LDcgQEAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLTE7CQkJLyogbm90IE9tbmlWaXNpb24gKi8KIAl9Ci0JcmV0dXJuIGNoZWNrd29yZDsKKwlyZXR1cm4gcmV0d29yZDsKIH0KIAogc3RydWN0IHNlbnNvcl9ieV9jaGlwc2V0X3JldmlzaW9uIHsKQEAgLTY4NDUsNiArNjg2OCw3IEBACiAJezB4ODAwMSwgMHgxM30sCiAJezB4ODAwMCwgMHgxNH0sCQkvKiBDUzIxMDJLICovCiAJezB4ODQwMCwgMHgxNX0sCQkvKiBUQVM1MTMwSyAqLworCXsweDQwMDEsIDB4MTZ9LAkJLyogQURDTTI3MDAgKi8KIH07CiAKIHN0YXRpYyBpbnQgdmdhXzN3cl9wcm9iZShzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYpCkBAIC02ODUzLDcgKzY4NzcsNyBAQAogCXN0cnVjdCB1c2JfZGV2aWNlICpkZXYgPSBnc3BjYV9kZXYtPmRldjsKIAlpbnQgaTsKIAlfX3U4IHJldGJ5dGU7Ci0JX191MTYgY2hlY2t3b3JkOworCXUxNiByZXR3b3JkOwogCiAvKmZpeG1lOiBsYWNrIG9mIDhiPWIzICgxMSwxMiktPiAxMCwgOGI9ZTAgKDE0LDE1LDE2KS0+IDEyIGZvdW5kIGluIGdzcGNhdjEqLwogCXJlZ193KGRldiwgMHgwMiwgMHgwMDEwKTsKQEAgLTY4NjUsMjcgKzY4ODksMjUgQEAKIAlyZWdfdyhkZXYsIDB4MDMsIDB4MDAxMik7CiAJcmVnX3coZGV2LCAweDAxLCAweDAwMTIpOwogCXJlZ193KGRldiwgMHgwNSwgMHgwMDEyKTsKLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDE0KTsKLQlpZiAocmV0Ynl0ZSAhPSAwKQorCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MTQpOworCWlmIChyZXR3b3JkICE9IDApCiAJCXJldHVybiAweDExOwkJCS8qIEhWNzEzMVIgKi8KLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDE1KTsKLQlpZiAocmV0Ynl0ZSAhPSAwKQorCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MTUpOworCWlmIChyZXR3b3JkICE9IDApCiAJCXJldHVybiAweDExOwkJCS8qIEhWNzEzMVIgKi8KLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDE2KTsKLQlpZiAocmV0Ynl0ZSAhPSAwKQorCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MTYpOworCWlmIChyZXR3b3JkICE9IDApCiAJCXJldHVybiAweDExOwkJCS8qIEhWNzEzMVIgKi8KIAogCXJlZ193KGRldiwgMHgwMiwgMHgwMDEwKTsKLQlyZXRieXRlID0gcmVnX3IoZ3NwY2FfZGV2LCAweDAwMGIpOwotCWNoZWNrd29yZCA9IHJldGJ5dGUgPDwgODsKLQlyZXRieXRlID0gcmVnX3IoZ3NwY2FfZGV2LCAweDAwMGEpOwotCWNoZWNrd29yZCB8PSByZXRieXRlOwotCVBERUJVRyhEX1BST0JFLCAicHJvYmUgM3dyIHZnYSAxIDB4JTA0eCIsIGNoZWNrd29yZCk7CisJcmV0d29yZCA9IHJlZ19yKGdzcGNhX2RldiwgMHgwMDBiKSA8PCA4OworCXJldHdvcmQgfD0gcmVnX3IoZ3NwY2FfZGV2LCAweDAwMGEpOworCVBERUJVRyhEX1BST0JFLCAicHJvYmUgM3dyIHZnYSAxIDB4JTA0eCIsIHJldHdvcmQpOwogCXJlZ19yKGdzcGNhX2RldiwgMHgwMDEwKTsKIAkvKiB0aGlzIGlzIHRlc3RlZCBvbmx5IG9uY2UgYW55d2F5ICovCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUoY2hpcHNldF9yZXZpc2lvbl9zZW5zb3IpOyBpKyspIHsKLQkJaWYgKGNoaXBzZXRfcmV2aXNpb25fc2Vuc29yW2ldLnJldmlzaW9uID09IGNoZWNrd29yZCkgewotCQkJc2QtPmNoaXBfcmV2aXNpb24gPSBjaGVja3dvcmQ7CisJCWlmIChjaGlwc2V0X3JldmlzaW9uX3NlbnNvcltpXS5yZXZpc2lvbiA9PSByZXR3b3JkKSB7CisJCQlzZC0+Y2hpcF9yZXZpc2lvbiA9IHJldHdvcmQ7CiAJCQlzZW5kX3Vua25vd24oZGV2LCBTRU5TT1JfUEIwMzMwKTsKIAkJCXJldHVybiBjaGlwc2V0X3JldmlzaW9uX3NlbnNvcltpXS5pbnRlcm5hbF9zZW5zb3JfaWQ7CiAJCX0KQEAgLTY4OTcsOCArNjkxOSw4IEBACiAJcmVnX3coZGV2LCAweDBhLCAweDAwMTApOwogCXJlZ193KGRldiwgMHgwMywgMHgwMDEyKTsKIAlyZWdfdyhkZXYsIDB4MDEsIDB4MDAxMik7Ci0JcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMCk7Ci0JaWYgKHJldGJ5dGUgIT0gMCkgeworCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDApOworCWlmIChyZXR3b3JkICE9IDApIHsKIAkJUERFQlVHKERfUFJPQkUsICJwcm9iZSAzd3IgdmdhIHR5cGUgMGEgPyIpOwogCQlyZXR1cm4gMHgwYTsJCQkvKiA/PyAqLwogCX0KQEAgLTY5MTAsMTQgKzY5MzIsMTQgQEAKIAlyZWdfdyhkZXYsIDB4MDMsIDB4MDAxMik7CiAJbXNsZWVwKDIpOwogCXJlZ193KGRldiwgMHgwMSwgMHgwMDEyKTsKLQlyZXRieXRlID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAwKTsKLQlpZiAocmV0Ynl0ZSAhPSAwKSB7Ci0JCVBERUJVRyhEX1BST0JFLCAicHJvYmUgM3dyIHZnYSB0eXBlICUwMngiLCByZXRieXRlKTsKLQkJaWYgKHJldGJ5dGUgPT0gMHgxMSkJCQkvKiBWRjAyNTAgKi8KKwlyZXR3b3JkID0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAwKTsKKwlpZiAocmV0d29yZCAhPSAwKSB7CisJCVBERUJVRyhEX1BST0JFLCAicHJvYmUgM3dyIHZnYSB0eXBlICUwMngiLCByZXR3b3JkKTsKKwkJaWYgKHJldHdvcmQgPT0gMHgwMDExKQkJCS8qIFZGMDI1MCAqLwogCQkJcmV0dXJuIDB4MDI1MDsKLQkJaWYgKHJldGJ5dGUgPT0gMHgyOSkJCQkvKiBnYzAzMDUgKi8KKwkJaWYgKHJldHdvcmQgPT0gMHgwMDI5KQkJCS8qIGdjMDMwNSAqLwogCQkJc2VuZF91bmtub3duKGRldiwgU0VOU09SX0dDMDMwNSk7Ci0JCXJldHVybiByZXRieXRlOworCQlyZXR1cm4gcmV0d29yZDsKIAl9CiAKIAlyZWdfdyhkZXYsIDB4MDEsIDB4MDAwMCk7CS8qIGNoZWNrIE9tbmlWaXNpb24gKi8KQEAgLTY5MjcsOCArNjk0OSw4IEBACiAJcmVnX3coZGV2LCAweDA2LCAweDAwMTApOwogCXJlZ193KGRldiwgMHgwMSwgMHgwMDEyKTsKIAlyZWdfdyhkZXYsIDB4MDUsIDB4MDAxMik7Ci0JaWYgKGkyY19yZWFkKGdzcGNhX2RldiwgMHgxYykgPT0gMHg3ZgkvKiBPVjc2MTAgLSBtYW51ZmFjdHVyZXIgSUQgKi8KLQkgICAgJiYgaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDFkKSA9PSAweGEyKSB7CisJaWYgKGkyY19yZWFkKGdzcGNhX2RldiwgMHgxYykgPT0gMHgwMDdmCS8qIE9WNzYxMCAtIG1hbnVmYWN0dXJlciBJRCAqLworCSAgICAmJiBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MWQpID09IDB4MDBhMikgewogCQlzZW5kX3Vua25vd24oZGV2LCBTRU5TT1JfT1Y3NjIwKTsKIAkJcmV0dXJuIDB4MDY7CQkvKiBPbW5pVmlzaW9uIGNvbmZpcm0gPyAqLwogCX0KQEAgLTY5NDIsMTYgKzY5NjQsMTQgQEAKIC8qCW1zbGVlcCgxNTApOyAqLwogCXJlZ193KGRldiwgMHgwMSwgMHgwMDEyKTsKIAlyZWdfdyhkZXYsIDB4MDUsIDB4MDAxMik7Ci0JcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMDAwKTsJCS8qIElEIDAgKi8KLQljaGVja3dvcmQgPSByZXRieXRlIDw8IDg7Ci0JcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMDAxKTsJCS8qIElEIDEgKi8KLQljaGVja3dvcmQgfD0gcmV0Ynl0ZTsKLQlQREVCVUcoRF9QUk9CRSwgInByb2JlIDN3ciB2Z2EgMiAweCUwNHgiLCBjaGVja3dvcmQpOwotCWlmIChjaGVja3dvcmQgPT0gMHgyMDMwKSB7CisJcmV0d29yZCA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMCkgPDwgODsJLyogSUQgMCAqLworCXJldHdvcmQgfD0gaTJjX3JlYWQoZ3NwY2FfZGV2LCAweDAxKTsJCS8qIElEIDEgKi8KKwlQREVCVUcoRF9QUk9CRSwgInByb2JlIDN3ciB2Z2EgMiAweCUwNHgiLCByZXR3b3JkKTsKKwlpZiAocmV0d29yZCA9PSAweDIwMzApIHsKIAkJcmV0Ynl0ZSA9IGkyY19yZWFkKGdzcGNhX2RldiwgMHgwMik7CS8qIHJldmlzaW9uIG51bWJlciAqLwogCQlQREVCVUcoRF9QUk9CRSwgInNlbnNvciBQTzIwMzAgcmV2IDB4JTAyeCIsIHJldGJ5dGUpOwogCQlzZW5kX3Vua25vd24oZGV2LCBTRU5TT1JfUE8yMDMwKTsKLQkJcmV0dXJuIGNoZWNrd29yZDsKKwkJcmV0dXJuIHJldHdvcmQ7CiAJfQogCiAJcmVnX3coZGV2LCAweDAxLCAweDAwMDApOwpAQCAtNjk2MiwxMCArNjk4MiwxMCBAQAogCXJlZ193KGRldiwgMHgwMSwgMHgwMDEyKTsKIAlyZWdfdyhkZXYsIDB4MDUsIDB4MDAwMSk7CiAJcmVnX3coZGV2LCAweGQzLCAweDAwOGIpOwotCXJldGJ5dGUgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDEpOwotCWlmIChyZXRieXRlICE9IDApIHsKLQkJUERFQlVHKERfUFJPQkUsICJwcm9iZSAzd3IgdmdhIHR5cGUgMGEgPyIpOwotCQlyZXR1cm4gMHgwYTsJCQkvKiA/PyAqLworCXJldHdvcmQgPSBpMmNfcmVhZChnc3BjYV9kZXYsIDB4MDEpOworCWlmIChyZXR3b3JkICE9IDApIHsKKwkJUERFQlVHKERfUFJPQkUsICJwcm9iZSAzd3IgdmdhIHR5cGUgMGEgPyByZXQ6ICUwNHgiLCByZXR3b3JkKTsKKwkJcmV0dXJuIHJldHdvcmQ7CiAJfQogCXJldHVybiAtMTsKIH0KQEAgLTY5NzMsNyArNjk5Myw3IEBACiBzdGF0aWMgaW50IHpjeHhfcHJvYmVTZW5zb3Ioc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2KQogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKLQlpbnQgc2Vuc29yLCBzZW5zb3IyOworCWludCBzZW5zb3I7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTlNPUl9NQzUwMUNCOgpAQCAtNjk4OCwxNiArNzAwOCw5IEBACiAJCWJyZWFrOwogCX0KIAlzZW5zb3IgPSB2Z2FfMndyX3Byb2JlKGdzcGNhX2Rldik7Ci0JaWYgKHNlbnNvciA+PSAwKSB7Ci0JCWlmIChzZW5zb3IgPCAweDc2MDApCi0JCQlyZXR1cm4gc2Vuc29yOwotCQkvKiBuZXh0IHByb2JlIGlzIG5lZWRlZCBmb3IgT21uaVZpc2lvbiA/ICovCi0JfQotCXNlbnNvcjIgPSB2Z2FfM3dyX3Byb2JlKGdzcGNhX2Rldik7Ci0JaWYgKHNlbnNvcjIgPj0gMAotCSAgICAmJiBzZW5zb3IgPj0gMCkKKwlpZiAoc2Vuc29yID49IDApCiAJCXJldHVybiBzZW5zb3I7Ci0JcmV0dXJuIHNlbnNvcjI7CisJcmV0dXJuIHZnYV8zd3JfcHJvYmUoZ3NwY2FfZGV2KTsKIH0KIAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYXQgcHJvYmUgdGltZSAqLwpAQCAtNzAwOSwyMyArNzAyMiwyNCBAQAogCWludCBzZW5zb3I7CiAJaW50IHZnYSA9IDE7CQkvKiAxOiB2Z2EsIDA6IHNpZiAqLwogCXN0YXRpYyBjb25zdCBfX3U4IGdhbW1hW1NFTlNPUl9NQVhdID0gewotCQk1LAkvKiBTRU5TT1JfQ1MyMTAyIDAgKi8KLQkJNSwJLyogU0VOU09SX0NTMjEwMksgMSAqLwotCQk0LAkvKiBTRU5TT1JfR0MwMzA1IDIgKi8KLQkJNCwJLyogU0VOU09SX0hEQ1MyMDIwYiAzICovCi0JCTQsCS8qIFNFTlNPUl9IVjcxMzFCIDQgKi8KLQkJNCwJLyogU0VOU09SX0hWNzEzMUMgNSAqLwotCQk0LAkvKiBTRU5TT1JfSUNNMTA1QSA2ICovCi0JCTQsCS8qIFNFTlNPUl9NQzUwMUNCIDcgKi8KLQkJMywJLyogU0VOU09SX09WNzYyMCA4ICovCi0JCTQsCS8qIFNFTlNPUl9PVjc2MzBDIDkgKi8KLQkJNCwJLyogU0VOU09SX1BBUzEwNiAxMCAqLwotCQk0LAkvKiBTRU5TT1JfUEFTMjAyQiAxMSAqLwotCQk0LAkvKiBTRU5TT1JfUEIwMzMwIDEyICovCi0JCTQsCS8qIFNFTlNPUl9QTzIwMzAgMTMgKi8KLQkJNCwJLyogU0VOU09SX1RBUzUxMzBDSyAxNCAqLwotCQk0LAkvKiBTRU5TT1JfVEFTNTEzMENYWCAxNSAqLwotCQkzLAkvKiBTRU5TT1JfVEFTNTEzMENfVkYwMjUwIDE2ICovCisJCTQsCS8qIFNFTlNPUl9BRENNMjcwMCAwICovCisJCTUsCS8qIFNFTlNPUl9DUzIxMDIgMSAqLworCQk1LAkvKiBTRU5TT1JfQ1MyMTAySyAyICovCisJCTQsCS8qIFNFTlNPUl9HQzAzMDUgMyAqLworCQk0LAkvKiBTRU5TT1JfSERDUzIwMjBiIDQgKi8KKwkJNCwJLyogU0VOU09SX0hWNzEzMUIgNSAqLworCQk0LAkvKiBTRU5TT1JfSFY3MTMxQyA2ICovCisJCTQsCS8qIFNFTlNPUl9JQ00xMDVBIDcgKi8KKwkJNCwJLyogU0VOU09SX01DNTAxQ0IgOCAqLworCQkzLAkvKiBTRU5TT1JfT1Y3NjIwIDkgKi8KKwkJNCwJLyogU0VOU09SX09WNzYzMEMgMTAgKi8KKwkJNCwJLyogU0VOU09SX1BBUzEwNiAxMSAqLworCQk0LAkvKiBTRU5TT1JfUEFTMjAyQiAxMiAqLworCQk0LAkvKiBTRU5TT1JfUEIwMzMwIDEzICovCisJCTQsCS8qIFNFTlNPUl9QTzIwMzAgMTQgKi8KKwkJNCwJLyogU0VOU09SX1RBUzUxMzBDSyAxNSAqLworCQk0LAkvKiBTRU5TT1JfVEFTNTEzMENYWCAxNiAqLworCQkzLAkvKiBTRU5TT1JfVEFTNTEzMENfVkYwMjUwIDE3ICovCiAJfTsKIAogCS8qIGRlZmluZSBzb21lIHNlbnNvcnMgZnJvbSB0aGUgdmVuZG9yL3Byb2R1Y3QgKi8KQEAgLTcwMzMsNyArNzA0Nyw3IEBACiAJc2QtPnNlbnNvciA9IGlkLT5kcml2ZXJfaW5mbzsKIAlzZW5zb3IgPSB6Y3h4X3Byb2JlU2Vuc29yKGdzcGNhX2Rldik7CiAJaWYgKHNlbnNvciA+PSAwKQotCQlQREVCVUcoRF9QUk9CRSwgInByb2JlIHNlbnNvciAtPiAlMDJ4Iiwgc2Vuc29yKTsKKwkJUERFQlVHKERfUFJPQkUsICJwcm9iZSBzZW5zb3IgLT4gJTA0eCIsIHNlbnNvcik7CiAJaWYgKCh1bnNpZ25lZCkgZm9yY2Vfc2Vuc29yIDwgU0VOU09SX01BWCkgewogCQlzZC0+c2Vuc29yID0gZm9yY2Vfc2Vuc29yOwogCQlQREVCVUcoRF9QUk9CRSwgInNlbnNvciBmb3JjZWQgdG8gJWQiLCBmb3JjZV9zZW5zb3IpOwpAQCAtNzExMiw2ICs3MTI2LDEwIEBACiAJCQkJc2QtPmNoaXBfcmV2aXNpb24pOwogCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9UQVM1MTMwQ0s7CiAJCQlicmVhazsKKwkJY2FzZSAweDE2OgorCQkJUERFQlVHKERfUFJPQkUsICJGaW5kIFNlbnNvciBBRENNMjcwMCIpOworCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9BRENNMjcwMDsKKwkJCWJyZWFrOwogCQljYXNlIDB4Mjk6CiAJCQlQREVCVUcoRF9QUk9CRSwgIkZpbmQgU2Vuc29yIEdDMDMwNSIpOwogCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9HQzAzMDU7CkBAIC03MTI5LDEyICs3MTQ3LDE2IEBACiAJCQlQREVCVUcoRF9QUk9CRSwgIkZpbmQgU2Vuc29yIE9WNzYyMCIpOwogCQkJc2QtPnNlbnNvciA9IFNFTlNPUl9PVjc2MjA7CiAJCQlicmVhazsKKwkJY2FzZSAweDc2MzE6CisJCQlQREVCVUcoRF9QUk9CRSwgIkZpbmQgU2Vuc29yIE9WNzYzMEMiKTsKKwkJCXNkLT5zZW5zb3IgPSBTRU5TT1JfT1Y3NjMwQzsKKwkJCWJyZWFrOwogCQljYXNlIDB4NzY0ODoKIAkJCVBERUJVRyhEX1BST0JFLCAiRmluZCBTZW5zb3IgT1Y3NjQ4Iik7CiAJCQlzZC0+c2Vuc29yID0gU0VOU09SX09WNzYyMDsJLyogc2FtZSBzZW5zb3IgKD8pICovCiAJCQlicmVhazsKIAkJZGVmYXVsdDoKLQkJCVBERUJVRyhEX0VSUnxEX1BST0JFLCAiVW5rbm93biBzZW5zb3IgJTAyeCIsIHNlbnNvcik7CisJCQlQREVCVUcoRF9FUlJ8RF9QUk9CRSwgIlVua25vd24gc2Vuc29yICUwNHgiLCBzZW5zb3IpOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CkBAIC03MTQ3LDcgKzcxNjksNiBAQAogCX0KIAogCWNhbSA9ICZnc3BjYV9kZXYtPmNhbTsKLQljYW0tPmVwYWRkciA9IDB4MDE7CiAvKmZpeG1lOnRlc3QqLwogCWdzcGNhX2Rldi0+bmJhbHQtLTsKIAlpZiAodmdhKSB7CkBAIC03MTU3LDEyICs3MTc4LDEyIEBACiAJCWNhbS0+Y2FtX21vZGUgPSBzaWZfbW9kZTsKIAkJY2FtLT5ubW9kZXMgPSBBUlJBWV9TSVpFKHNpZl9tb2RlKTsKIAl9Ci0Jc2QtPnFpbmRleCA9IDE7CiAJc2QtPmJyaWdodG5lc3MgPSBzZF9jdHJsc1tTRF9CUklHSFRORVNTXS5xY3RybC5kZWZhdWx0X3ZhbHVlOwogCXNkLT5jb250cmFzdCA9IHNkX2N0cmxzW1NEX0NPTlRSQVNUXS5xY3RybC5kZWZhdWx0X3ZhbHVlOwogCXNkLT5nYW1tYSA9IGdhbW1hWyhpbnQpIHNkLT5zZW5zb3JdOwogCXNkLT5hdXRvZ2FpbiA9IHNkX2N0cmxzW1NEX0FVVE9HQUlOXS5xY3RybC5kZWZhdWx0X3ZhbHVlOwogCXNkLT5saWdodGZyZXEgPSBzZF9jdHJsc1tTRF9GUkVRXS5xY3RybC5kZWZhdWx0X3ZhbHVlOworCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9ERUY7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKIAljYXNlIFNFTlNPUl9HQzAzMDU6CkBAIC03MTk2LDI3ICs3MjE3LDM0IEBACiAJY29uc3Qgc3RydWN0IHVzYl9hY3Rpb24gKnpjM19pbml0OwogCWludCBtb2RlOwogCXN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2FjdGlvbiAqaW5pdF90YltTRU5TT1JfTUFYXVsyXSA9IHsKLQkJe2NzMjEwMl9Jbml0aWFsU2NhbGUsIGNzMjEwMl9Jbml0aWFsfSwJCS8qIDAgKi8KLQkJe2NzMjEwMktfSW5pdGlhbFNjYWxlLCBjczIxMDJLX0luaXRpYWx9LAkvKiAxICovCi0JCXtnYzAzMDVfSW5pdGlhbCwgZ2MwMzA1X0luaXRpYWxTY2FsZX0sCQkvKiAyICovCi0JCXtoZGNzMjAyMHhiX0luaXRpYWxTY2FsZSwgaGRjczIwMjB4Yl9Jbml0aWFsfSwJLyogMyAqLwotCQl7aHY3MTMxYnh4X0luaXRpYWxTY2FsZSwgaHY3MTMxYnh4X0luaXRpYWx9LAkvKiA0ICovCi0JCXtodjcxMzFjeHhfSW5pdGlhbFNjYWxlLCBodjcxMzFjeHhfSW5pdGlhbH0sCS8qIDUgKi8KLQkJe2ljbTEwNWF4eF9Jbml0aWFsU2NhbGUsIGljbTEwNWF4eF9Jbml0aWFsfSwJLyogNiAqLwotCQl7TUM1MDFDQl9Jbml0aWFsU2NhbGUsIE1DNTAxQ0JfSW5pdGlhbH0sCS8qIDcgKi8KLQkJe09WNzYyMF9tb2RlMCwgT1Y3NjIwX21vZGUxfSwJCQkvKiA4ICovCi0JCXtvdjc2MzBjX0luaXRpYWxTY2FsZSwgb3Y3NjMwY19Jbml0aWFsfSwJLyogOSAqLwotCQl7cGFzMTA2Yl9Jbml0aWFsU2NhbGUsIHBhczEwNmJfSW5pdGlhbH0sCS8qIDEwICovCi0JCXtwYXMyMDJiX0luaXRpYWwsIHBhczIwMmJfSW5pdGlhbFNjYWxlfSwJLyogMTEgKi8KLQkJe3BiMDMzMHh4X0luaXRpYWxTY2FsZSwgcGIwMzMweHhfSW5pdGlhbH0sCS8qIDEyICovCisJCXthZGNtMjcwMF9Jbml0aWFsLCBhZGNtMjcwMF9Jbml0aWFsU2NhbGV9LAkvKiAwICovCisJCXtjczIxMDJfSW5pdGlhbFNjYWxlLCBjczIxMDJfSW5pdGlhbH0sCQkvKiAxICovCisJCXtjczIxMDJLX0luaXRpYWxTY2FsZSwgY3MyMTAyS19Jbml0aWFsfSwJLyogMiAqLworCQl7Z2MwMzA1X0luaXRpYWwsIGdjMDMwNV9Jbml0aWFsU2NhbGV9LAkJLyogMyAqLworCQl7aGRjczIwMjB4Yl9Jbml0aWFsU2NhbGUsIGhkY3MyMDIweGJfSW5pdGlhbH0sCS8qIDQgKi8KKwkJe2h2NzEzMWJ4eF9Jbml0aWFsU2NhbGUsIGh2NzEzMWJ4eF9Jbml0aWFsfSwJLyogNSAqLworCQl7aHY3MTMxY3h4X0luaXRpYWxTY2FsZSwgaHY3MTMxY3h4X0luaXRpYWx9LAkvKiA2ICovCisJCXtpY20xMDVheHhfSW5pdGlhbFNjYWxlLCBpY20xMDVheHhfSW5pdGlhbH0sCS8qIDcgKi8KKwkJe01DNTAxQ0JfSW5pdGlhbFNjYWxlLCBNQzUwMUNCX0luaXRpYWx9LAkvKiA4ICovCisJCXtPVjc2MjBfbW9kZTAsIE9WNzYyMF9tb2RlMX0sCQkJLyogOSAqLworCQl7b3Y3NjMwY19Jbml0aWFsU2NhbGUsIG92NzYzMGNfSW5pdGlhbH0sCS8qIDEwICovCisJCXtwYXMxMDZiX0luaXRpYWxTY2FsZSwgcGFzMTA2Yl9Jbml0aWFsfSwJLyogMTEgKi8KKwkJe3BhczIwMmJfSW5pdGlhbCwgcGFzMjAyYl9Jbml0aWFsU2NhbGV9LAkvKiAxMiAqLworCQl7cGIwMzMweHhfSW5pdGlhbFNjYWxlLCBwYjAzMzB4eF9Jbml0aWFsfSwJLyogMTMgKi8KIC8qIG9yCQl7cGIwMzMwM3hfSW5pdGlhbFNjYWxlLCBwYjAzMzAzeF9Jbml0aWFsfSwgKi8KLQkJe1BPMjAzMF9tb2RlMCwgUE8yMDMwX21vZGUxfSwJCQkvKiAxMyAqLwotCQl7dGFzNTEzMENLX0luaXRpYWxTY2FsZSwgdGFzNTEzMENLX0luaXRpYWx9LAkvKiAxNCAqLwotCQl7dGFzNTEzMGN4eF9Jbml0aWFsU2NhbGUsIHRhczUxMzBjeHhfSW5pdGlhbH0sCS8qIDE1ICovCisJCXtQTzIwMzBfbW9kZTAsIFBPMjAzMF9tb2RlMX0sCQkJLyogMTQgKi8KKwkJe3RhczUxMzBDS19Jbml0aWFsU2NhbGUsIHRhczUxMzBDS19Jbml0aWFsfSwJLyogMTUgKi8KKwkJe3RhczUxMzBjeHhfSW5pdGlhbFNjYWxlLCB0YXM1MTMwY3h4X0luaXRpYWx9LAkvKiAxNiAqLwogCQl7dGFzNTEzMGNfdmYwMjUwX0luaXRpYWxTY2FsZSwgdGFzNTEzMGNfdmYwMjUwX0luaXRpYWx9LAotCQkJCQkJCQkvKiAxNiAqLworCQkJCQkJCQkvKiAxNyAqLwogCX07CiAKKwkvKiBjcmVhdGUgdGhlIEpQRUcgaGVhZGVyICovCisJc2QtPmpwZWdfaGRyID0ga21hbGxvYyhKUEVHX0hEUl9TWiwgR0ZQX0tFUk5FTCk7CisJanBlZ19kZWZpbmUoc2QtPmpwZWdfaGRyLCBnc3BjYV9kZXYtPmhlaWdodCwgZ3NwY2FfZGV2LT53aWR0aCwKKwkJCTB4MjEpOwkJLyogSlBFRyA0MjIgKi8KKwlqcGVnX3NldF9xdWFsKHNkLT5qcGVnX2hkciwgc2QtPnF1YWxpdHkpOworCiAJbW9kZSA9IGdzcGNhX2Rldi0+Y2FtLmNhbV9tb2RlWyhpbnQpIGdzcGNhX2Rldi0+Y3Vycl9tb2RlXS5wcml2OwogCXpjM19pbml0ID0gaW5pdF90YlsoaW50KSBzZC0+c2Vuc29yXVttb2RlXTsKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKQEAgLTcyNDMsMTEgKzcyNzEsMTIgQEAKIAl1c2JfZXhjaGFuZ2UoZ3NwY2FfZGV2LCB6YzNfaW5pdCk7CiAKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKKwljYXNlIFNFTlNPUl9BRENNMjcwMDoKIAljYXNlIFNFTlNPUl9HQzAzMDU6CiAJY2FzZSBTRU5TT1JfT1Y3NjIwOgogCWNhc2UgU0VOU09SX1BPMjAzMDoKIAljYXNlIFNFTlNPUl9UQVM1MTMwQ19WRjAyNTA6Ci0JCW1zbGVlcCgxMDApOwkJCS8qID8/ICovCisvKgkJbXNsZWVwKDEwMCk7CQkJICogPz8gKi8KIAkJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMDIpOwkvKiAtLT4gMHg0MCAqLwogCQlyZWdfdyhkZXYsIDB4MDksIDB4MDFhZCk7CS8qIChmcm9tIHdpbiB0cmFjZXMpICovCiAJCXJlZ193KGRldiwgMHgxNSwgMHgwMWFlKTsKQEAgLTcyNjAsNiArNzI4OSw3IEBACiAJc2V0bWF0cml4KGdzcGNhX2Rldik7CiAJc2V0YnJpZ2h0bmVzcyhnc3BjYV9kZXYpOwogCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX0FEQ00yNzAwOgogCWNhc2UgU0VOU09SX09WNzYyMDoKIAkJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMDgpOwogCQlyZWdfdyhkZXYsIDB4MDAsIDB4MDAwOCk7CkBAIC03MzAxLDYgKzczMzEsMTMgQEAKIAlzZXRsaWdodGZyZXEoZ3NwY2FfZGV2KTsKIAogCXN3aXRjaCAoc2QtPnNlbnNvcikgeworCWNhc2UgU0VOU09SX0FEQ00yNzAwOgorCQlyZWdfdyhkZXYsIDB4MDksIDB4MDFhZCk7CS8qIChmcm9tIHdpbiB0cmFjZXMpICovCisJCXJlZ193KGRldiwgMHgxNSwgMHgwMWFlKTsKKwkJcmVnX3coZGV2LCAweDAyLCAweDAxODApOworCQkJCQkJLyogbXMtd2luICsgKi8KKwkJcmVnX3coZGV2LCAweDQwLCAweDAxMTcpOworCQlicmVhazsKIAljYXNlIFNFTlNPUl9HQzAzMDU6CiAJCXJlZ193KGRldiwgMHgwOSwgMHgwMWFkKTsJLyogKGZyb20gd2luIHRyYWNlcykgKi8KIAkJcmVnX3coZGV2LCAweDE1LCAweDAxYWUpOwpAQCAtNzMyMywxOSArNzM2MCwxNiBAQAogCiAJc2V0YXV0b2dhaW4oZ3NwY2FfZGV2KTsKIAlzd2l0Y2ggKHNkLT5zZW5zb3IpIHsKLQljYXNlIFNFTlNPUl9QQVMyMDJCOgotCQlyZWdfdyhkZXYsIDB4MDAsIDB4MDAwNyk7CS8qIChmcm9tIHdpbiB0cmFjZXMpICovCi0JCWJyZWFrOwogCWNhc2UgU0VOU09SX1BPMjAzMDoKIAkJbXNsZWVwKDUwMCk7CiAJCXJlZ19yKGdzcGNhX2RldiwgMHgwMDA4KTsKIAkJcmVnX3IoZ3NwY2FfZGV2LCAweDAwMDcpOworCQkvKmZhbGwgdGhydSovCisJY2FzZSBTRU5TT1JfUEFTMjAyQjoKIAkJcmVnX3coZGV2LCAweDAwLCAweDAwMDcpOwkvKiAoZnJvbSB3aW4gdHJhY2VzKSAqLwotCQlyZWdfdyhkZXYsIDB4MDIsIDB4MDAwOCk7CisJCXJlZ193KGRldiwgMHgwMiwgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkcpOwogCQlicmVhazsKIAl9Ci0JaWYgKHNkLT5zZW5zb3IgPT0gU0VOU09SX1BBUzIwMkIpCi0JCXJlZ193KGRldiwgMHgwMiwgWkMzWFhfUjAwOF9DTE9DS1NFVFRJTkcpOwogCXJldHVybiAwOwogfQogCkBAIC03MzQ0LDYgKzczNzgsNyBAQAogewogCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKIAorCWtmcmVlKHNkLT5qcGVnX2hkcik7CiAJaWYgKCFnc3BjYV9kZXYtPnByZXNlbnQpCiAJCXJldHVybjsKIAlzZW5kX3Vua25vd24oZ3NwY2FfZGV2LT5kZXYsIHNkLT5zZW5zb3IpOwpAQCAtNzM1NCwxNCArNzM4OSwxNSBAQAogCQkJX191OCAqZGF0YSwKIAkJCWludCBsZW4pCiB7CisJc3RydWN0IHNkICpzZCA9IChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2OwogCiAJaWYgKGRhdGFbMF0gPT0gMHhmZiAmJiBkYXRhWzFdID09IDB4ZDgpIHsJLyogc3RhcnQgb2YgZnJhbWUgKi8KIAkJZnJhbWUgPSBnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBMQVNUX1BBQ0tFVCwgZnJhbWUsCiAJCQkJCWRhdGEsIDApOwogCQkvKiBwdXQgdGhlIEpQRUcgaGVhZGVyIGluIHRoZSBuZXcgZnJhbWUgKi8KLQkJanBlZ19wdXRfaGVhZGVyKGdzcGNhX2RldiwgZnJhbWUsCi0JCQkJKChzdHJ1Y3Qgc2QgKikgZ3NwY2FfZGV2KS0+cWluZGV4LAotCQkJCTB4MjEpOworCQlnc3BjYV9mcmFtZV9hZGQoZ3NwY2FfZGV2LCBGSVJTVF9QQUNLRVQsIGZyYW1lLAorCQkJc2QtPmpwZWdfaGRyLCBKUEVHX0hEUl9TWik7CisKIAkJLyogcmVtb3ZlIHRoZSB3ZWJjYW0ncyBoZWFkZXI6CiAJCSAqIGZmIGQ4IGZmIGZlIDAwIDBlIDAwIDAwIHNzIHNzIDAwIDAxIHd3IHd3IGhoIGhoIHBwIHBwCiAJCSAqCS0gJ3NzIHNzJyBpcyB0aGUgZnJhbWUgc2VxdWVuY2UgbnVtYmVyIChCRSkKQEAgLTc1MDMsNiArNzUzOSwzNCBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCitzdGF0aWMgaW50IHNkX3NldF9qY29tcChzdHJ1Y3QgZ3NwY2FfZGV2ICpnc3BjYV9kZXYsCisJCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKmpjb21wKQoreworCXN0cnVjdCBzZCAqc2QgPSAoc3RydWN0IHNkICopIGdzcGNhX2RldjsKKworCWlmIChqY29tcC0+cXVhbGl0eSA8IFFVQUxJVFlfTUlOKQorCQlzZC0+cXVhbGl0eSA9IFFVQUxJVFlfTUlOOworCWVsc2UgaWYgKGpjb21wLT5xdWFsaXR5ID4gUVVBTElUWV9NQVgpCisJCXNkLT5xdWFsaXR5ID0gUVVBTElUWV9NQVg7CisJZWxzZQorCQlzZC0+cXVhbGl0eSA9IGpjb21wLT5xdWFsaXR5OworCWlmIChnc3BjYV9kZXYtPnN0cmVhbWluZykKKwkJanBlZ19zZXRfcXVhbChzZC0+anBlZ19oZHIsIHNkLT5xdWFsaXR5KTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZF9nZXRfamNvbXAoc3RydWN0IGdzcGNhX2RldiAqZ3NwY2FfZGV2LAorCQkJc3RydWN0IHY0bDJfanBlZ2NvbXByZXNzaW9uICpqY29tcCkKK3sKKwlzdHJ1Y3Qgc2QgKnNkID0gKHN0cnVjdCBzZCAqKSBnc3BjYV9kZXY7CisKKwltZW1zZXQoamNvbXAsIDAsIHNpemVvZiAqamNvbXApOworCWpjb21wLT5xdWFsaXR5ID0gc2QtPnF1YWxpdHk7CisJamNvbXAtPmpwZWdfbWFya2VycyA9IFY0TDJfSlBFR19NQVJLRVJfREhUCisJCQl8IFY0TDJfSlBFR19NQVJLRVJfRFFUOworCXJldHVybiAwOworfQorCiBzdGF0aWMgY29uc3Qgc3RydWN0IHNkX2Rlc2Mgc2RfZGVzYyA9IHsKIAkubmFtZSA9IE1PRFVMRV9OQU1FLAogCS5jdHJscyA9IHNkX2N0cmxzLApAQCAtNzUxMyw2ICs3NTc3LDggQEAKIAkuc3RvcDAgPSBzZF9zdG9wMCwKIAkucGt0X3NjYW4gPSBzZF9wa3Rfc2NhbiwKIAkucXVlcnltZW51ID0gc2RfcXVlcnltZW51LAorCS5nZXRfamNvbXAgPSBzZF9nZXRfamNvbXAsCisJLnNldF9qY29tcCA9IHNkX3NldF9qY29tcCwKIH07CiAKIHN0YXRpYyBjb25zdCBfX2RldmluaXRkYXRhIHN0cnVjdCB1c2JfZGV2aWNlX2lkIGRldmljZV90YWJsZVtdID0gewpAQCAtNzU2MywxMSArNzYyOSw5IEBACiAJe1VTQl9ERVZJQ0UoMHgwNTVmLCAweGQwMDQpfSwKIAl7VVNCX0RFVklDRSgweDA2OTgsIDB4MjAwMyl9LAogCXtVU0JfREVWSUNFKDB4MGFjOCwgMHgwMzAxKSwgLmRyaXZlcl9pbmZvID0gU0VOU09SX1BBUzEwNn0sCi0Je1VTQl9ERVZJQ0UoMHgwYWM4LCAweDAzMDIpfSwKKwl7VVNCX0RFVklDRSgweDBhYzgsIDB4MDMwMiksIC5kcml2ZXJfaW5mbyA9IFNFTlNPUl9QQVMxMDZ9LAogCXtVU0JfREVWSUNFKDB4MGFjOCwgMHgzMDFiKX0sCi0jaWYgIWRlZmluZWQgQ09ORklHX1VTQl9aQzAzMDEgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9aQzAzMDFfTU9EVUxFCiAJe1VTQl9ERVZJQ0UoMHgwYWM4LCAweDMwM2IpfSwKLSNlbmRpZgogCXtVU0JfREVWSUNFKDB4MGFjOCwgMHgzMDViKSwgLmRyaXZlcl9pbmZvID0gU0VOU09SX1RBUzUxMzBDX1ZGMDI1MH0sCiAJe1VTQl9ERVZJQ0UoMHgwYWM4LCAweDMwN2IpfSwKIAl7VVNCX0RFVklDRSgweDEwZmQsIDB4MDEyOCl9LApAQCAtNzYwMCw4ICs3NjY0LDEwIEBACiAKIHN0YXRpYyBpbnQgX19pbml0IHNkX21vZF9pbml0KHZvaWQpCiB7Ci0JaWYgKHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKSA8IDApCi0JCXJldHVybiAtMTsKKwlpbnQgcmV0OworCXJldCA9IHVzYl9yZWdpc3Rlcigmc2RfZHJpdmVyKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKIAlQREVCVUcoRF9QUk9CRSwgInJlZ2lzdGVyZWQiKTsKIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvS2NvbmZpZwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5kZTI0N2YzCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9LY29uZmlnCkBAIC0wLDAgKzEsMTAgQEAKKworY29uZmlnIFZJREVPX0hEUFZSCisJdHJpc3RhdGUgIkhhdXBwYXVnZSBIRCBQVlIgc3VwcG9ydCIKKwlkZXBlbmRzIG9uIFZJREVPX0RFVgorCS0tLWhlbHAtLS0KKwkgIFRoaXMgaXMgYSB2aWRlbzRsaW51eCBkcml2ZXIgZm9yIEhhdXBwYXVnZSdzIEhEIFBWUiBVU0IgZGV2aWNlLgorCisJICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxlLCBjaG9vc2UgTSBoZXJlOiB0aGUKKwkgIG1vZHVsZSB3aWxsIGJlIGNhbGxlZCBoZHB2cgorCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9NYWtlZmlsZQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5lMDIzMGZjCi0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9NYWtlZmlsZQpAQCAtMCwwICsxLDkgQEAKK2hkcHZyLW9ianMJOj0gaGRwdnItY29udHJvbC5vIGhkcHZyLWNvcmUubyBoZHB2ci12aWRlby5vCisKK2hkcHZyLSQoQ09ORklHX0kyQykgKz0gaGRwdnItaTJjLm8KKworb2JqLSQoQ09ORklHX1ZJREVPX0hEUFZSKSArPSBoZHB2ci5vCisKK0VYVFJBX0NGTEFHUyArPSAtSWRyaXZlcnMvbWVkaWEvdmlkZW8KKworRVhUUkFfQ0ZMQUdTICs9ICQoZXh0cmEtY2ZsYWdzLXkpICQoZXh0cmEtY2ZsYWdzLW0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvbnRyb2wuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItY29udHJvbC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjA2NzkxNzQKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWNvbnRyb2wuYwpAQCAtMCwwICsxLDIwMSBAQAorLyoKKyAqIEhhdXBwYXVnZSBIRCBQVlIgVVNCIGRyaXZlciAtIHZpZGVvIDQgbGludXggMiBpbnRlcmZhY2UKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggICAgICBKYW5uZSBHcnVuYXUgKGpAamFubmF1Lm5ldCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorCisjaW5jbHVkZSAiaGRwdnIuaCIKKworCitpbnQgaGRwdnJfY29uZmlnX2NhbGwoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2LCB1aW50IHZhbHVlLCB1OCB2YWxidWYpCit7CisJaW50IHJldDsKKwljaGFyIHJlcXVlc3RfdHlwZSA9IDB4MzgsIHNuZF9yZXF1ZXN0ID0gMHgwMTsKKworCW1zbGVlcCgxMCk7CisKKwltdXRleF9sb2NrKCZkZXYtPnVzYmNfbXV0ZXgpOworCWRldi0+dXNiY19idWZbMF0gPSB2YWxidWY7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwKKwkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJICAgICAgc25kX3JlcXVlc3QsIDB4MDAgfCByZXF1ZXN0X3R5cGUsCisJCQkgICAgICB2YWx1ZSwgQ1RSTF9ERUZBVUxUX0lOREVYLAorCQkJICAgICAgZGV2LT51c2JjX2J1ZiwgMSwgMTAwMDApOworCisJbXV0ZXhfdW5sb2NrKCZkZXYtPnVzYmNfbXV0ZXgpOworCXY0bDJfZGJnKE1TR19JTkZPLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCisJCSAiY29uZmlnIGNhbGwgcmVxdWVzdCBmb3IgdmFsdWUgMHgleCByZXR1cm5lZCAlZFxuIiwgdmFsdWUsCisJCSByZXQpOworCisJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAwOworfQorCitzdHJ1Y3QgaGRwdnJfdmlkZW9faW5mbyAqZ2V0X3ZpZGVvX2luZm8oc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBoZHB2cl92aWRlb19pbmZvICp2aWRpbmYgPSBOVUxMOworI2lmZGVmIEhEUFZSX0RFQlVHCisJY2hhciBwcmludF9idWZbMTVdOworI2VuZGlmCisJaW50IHJldDsKKworCXZpZGluZiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoZHB2cl92aWRlb19pbmZvKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCF2aWRpbmYpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJvdXQgb2YgbWVtb3J5XG4iKTsKKwkJZ290byBlcnI7CisJfQorCisJbXV0ZXhfbG9jaygmZGV2LT51c2JjX211dGV4KTsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LAorCQkJICAgICAgdXNiX3JjdmN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQkgICAgICAweDgxLCAweDgwIHwgMHgzOCwKKwkJCSAgICAgIDB4MTQwMCwgMHgwMDAzLAorCQkJICAgICAgZGV2LT51c2JjX2J1ZiwgNSwKKwkJCSAgICAgIDEwMDApOworCWlmIChyZXQgPT0gNSkgeworCQl2aWRpbmYtPndpZHRoCT0gZGV2LT51c2JjX2J1ZlsxXSA8PCA4IHwgZGV2LT51c2JjX2J1ZlswXTsKKwkJdmlkaW5mLT5oZWlnaHQJPSBkZXYtPnVzYmNfYnVmWzNdIDw8IDggfCBkZXYtPnVzYmNfYnVmWzJdOworCQl2aWRpbmYtPmZwcwk9IGRldi0+dXNiY19idWZbNF07CisJfQorCisjaWZkZWYgSERQVlJfREVCVUcKKwlpZiAoaGRwdnJfZGVidWcgJiBNU0dfSU5GTykgeworCQloZXhfZHVtcF90b19idWZmZXIoZGV2LT51c2JjX2J1ZiwgNSwgMTYsIDEsIHByaW50X2J1ZiwKKwkJCQkgICBzaXplb2YocHJpbnRfYnVmKSwgMCk7CisJCXY0bDJfZGJnKE1TR19JTkZPLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCisJCQkgImdldCB2aWRlbyBpbmZvIHJldHVybmVkOiAlZCwgJXNcbiIsIHJldCwgcHJpbnRfYnVmKTsKKwl9CisjZW5kaWYKKwltdXRleF91bmxvY2soJmRldi0+dXNiY19tdXRleCk7CisKKwlpZiAoIXZpZGluZi0+d2lkdGggfHwgIXZpZGluZi0+aGVpZ2h0IHx8ICF2aWRpbmYtPmZwcykgeworCQlrZnJlZSh2aWRpbmYpOworCQl2aWRpbmYgPSBOVUxMOworCX0KK2VycjoKKwlyZXR1cm4gdmlkaW5mOworfQorCitpbnQgZ2V0X2lucHV0X2xpbmVzX2luZm8oc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQoreworI2lmZGVmIEhEUFZSX0RFQlVHCisJY2hhciBwcmludF9idWZbOV07CisjZW5kaWYKKwlpbnQgcmV0LCBsaW5lczsKKworCW11dGV4X2xvY2soJmRldi0+dXNiY19tdXRleCk7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwKKwkJCSAgICAgIHVzYl9yY3ZjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJICAgICAgMHg4MSwgMHg4MCB8IDB4MzgsCisJCQkgICAgICAweDE4MDAsIDB4MDAwMywKKwkJCSAgICAgIGRldi0+dXNiY19idWYsIDMsCisJCQkgICAgICAxMDAwKTsKKworI2lmZGVmIEhEUFZSX0RFQlVHCisJaWYgKGhkcHZyX2RlYnVnICYgTVNHX0lORk8pIHsKKwkJaGV4X2R1bXBfdG9fYnVmZmVyKGRldi0+dXNiY19idWYsIDMsIDE2LCAxLCBwcmludF9idWYsCisJCQkJICAgc2l6ZW9mKHByaW50X2J1ZiksIDApOworCQl2NGwyX2RiZyhNU0dfSU5GTywgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkJICJnZXQgaW5wdXQgbGluZXMgaW5mbyByZXR1cm5lZDogJWQsICVzXG4iLCByZXQsCisJCQkgcHJpbnRfYnVmKTsKKwl9CisjZW5kaWYKKwlsaW5lcyA9IGRldi0+dXNiY19idWZbMV0gPDwgOCB8IGRldi0+dXNiY19idWZbMF07CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnVzYmNfbXV0ZXgpOworCXJldHVybiBsaW5lczsKK30KKworCitpbnQgaGRwdnJfc2V0X2JpdHJhdGUoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQoreworCWludCByZXQ7CisKKwltdXRleF9sb2NrKCZkZXYtPnVzYmNfbXV0ZXgpOworCW1lbXNldChkZXYtPnVzYmNfYnVmLCAwLCA0KTsKKwlkZXYtPnVzYmNfYnVmWzBdID0gZGV2LT5vcHRpb25zLmJpdHJhdGU7CisJZGV2LT51c2JjX2J1ZlsyXSA9IGRldi0+b3B0aW9ucy5wZWFrX2JpdHJhdGU7CisKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LAorCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQkgICAgICAweDAxLCAweDM4LCBDVFJMX0JJVFJBVEVfVkFMVUUsCisJCQkgICAgICBDVFJMX0RFRkFVTFRfSU5ERVgsIGRldi0+dXNiY19idWYsIDQsIDEwMDApOworCW11dGV4X3VubG9jaygmZGV2LT51c2JjX211dGV4KTsKKworCXJldHVybiByZXQ7Cit9CisKK2ludCBoZHB2cl9zZXRfYXVkaW8oc3RydWN0IGhkcHZyX2RldmljZSAqZGV2LCB1OCBpbnB1dCwKKwkJICAgIGVudW0gdjRsMl9tcGVnX2F1ZGlvX2VuY29kaW5nIGNvZGVjKQoreworCWludCByZXQgPSAwOworCisJaWYgKGRldi0+ZmxhZ3MgJiBIRFBWUl9GTEFHX0FDM19DQVApIHsKKwkJbXV0ZXhfbG9jaygmZGV2LT51c2JjX211dGV4KTsKKwkJbWVtc2V0KGRldi0+dXNiY19idWYsIDAsIDIpOworCQlkZXYtPnVzYmNfYnVmWzBdID0gaW5wdXQ7CisJCWlmIChjb2RlYyA9PSBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUFDKQorCQkJZGV2LT51c2JjX2J1ZlsxXSA9IDA7CisJCWVsc2UgaWYgKGNvZGVjID09IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQzMpCisJCQlkZXYtPnVzYmNfYnVmWzFdID0gMTsKKwkJZWxzZSB7CisJCQltdXRleF91bmxvY2soJmRldi0+dXNiY19tdXRleCk7CisJCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgImludmFsaWQgYXVkaW8gY29kZWMgJWRcbiIsCisJCQkJIGNvZGVjKTsKKwkJCXJldCA9IC1FSU5WQUw7CisJCQlnb3RvIGVycm9yOworCQl9CisKKwkJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwKKwkJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKKwkJCQkgICAgICAweDAxLCAweDM4LCBDVFJMX0FVRElPX0lOUFVUX1ZBTFVFLAorCQkJCSAgICAgIENUUkxfREVGQVVMVF9JTkRFWCwgZGV2LT51c2JjX2J1ZiwgMiwKKwkJCQkgICAgICAxMDAwKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPnVzYmNfbXV0ZXgpOworCQlpZiAocmV0ID09IDIpCisJCQlyZXQgPSAwOworCX0gZWxzZQorCQlyZXQgPSBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfQVVESU9fSU5QVVRfVkFMVUUsCisJCQkJCWRldi0+b3B0aW9ucy5hdWRpb19pbnB1dCsxKTsKK2Vycm9yOgorCXJldHVybiByZXQ7Cit9CisKK2ludCBoZHB2cl9zZXRfb3B0aW9ucyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCit7CisgICAgICAgaGRwdnJfY29uZmlnX2NhbGwoZGV2LCBDVFJMX1ZJREVPX1NURF9UWVBFLCBkZXYtPm9wdGlvbnMudmlkZW9fc3RkKTsKKworICAgICAgIGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9WSURFT19JTlBVVF9WQUxVRSwKKwkJCSBkZXYtPm9wdGlvbnMudmlkZW9faW5wdXQrMSk7CisKKyAgICAgICBoZHB2cl9zZXRfYXVkaW8oZGV2LCBkZXYtPm9wdGlvbnMuYXVkaW9faW5wdXQrMSwKKwkJICAgICAgIGRldi0+b3B0aW9ucy5hdWRpb19jb2RlYyk7CisKKyAgICAgICBoZHB2cl9zZXRfYml0cmF0ZShkZXYpOworICAgICAgIGhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9CSVRSQVRFX01PREVfVkFMVUUsCisJCQkgZGV2LT5vcHRpb25zLmJpdHJhdGVfbW9kZSk7CisgICAgICAgaGRwdnJfY29uZmlnX2NhbGwoZGV2LCBDVFJMX0dPUF9NT0RFX1ZBTFVFLCBkZXYtPm9wdGlvbnMuZ29wX21vZGUpOworCisgICAgICAgaGRwdnJfY29uZmlnX2NhbGwoZGV2LCBDVFJMX0JSSUdIVE5FU1MsIGRldi0+b3B0aW9ucy5icmlnaHRuZXNzKTsKKyAgICAgICBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfQ09OVFJBU1QsICAgZGV2LT5vcHRpb25zLmNvbnRyYXN0KTsKKyAgICAgICBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfSFVFLCAgICAgICAgZGV2LT5vcHRpb25zLmh1ZSk7CisgICAgICAgaGRwdnJfY29uZmlnX2NhbGwoZGV2LCBDVFJMX1NBVFVSQVRJT04sIGRldi0+b3B0aW9ucy5zYXR1cmF0aW9uKTsKKyAgICAgICBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfU0hBUlBORVNTLCAgZGV2LT5vcHRpb25zLnNoYXJwbmVzcyk7CisKKyAgICAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci1jb3JlLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMTg4YmQ1YQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItY29yZS5jCkBAIC0wLDAgKzEsNDY2IEBACisvKgorICogSGF1cHBhdWdlIEhEIFBWUiBVU0IgZHJpdmVyCisgKgorICogQ29weXJpZ2h0IChDKSAyMDAxLTIwMDQgR3JlZyBLcm9haC1IYXJ0bWFuIChncmVnQGtyb2FoLmNvbSkKKyAqIENvcHlyaWdodCAoQykgMjAwOCAgICAgIEphbm5lIEdydW5hdSAoakBqYW5uYXUubmV0KQorICogQ29weXJpZ2h0IChDKSAyMDA4ICAgICAgSm9obiBQb2V0CisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGFzbS9hdG9taWMuaD4KKyNpbmNsdWRlIDxsaW51eC91c2IuaD4KKyNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXYuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorCisjaW5jbHVkZSAiaGRwdnIuaCIKKworc3RhdGljIGludCB2aWRlb19ucltIRFBWUl9NQVhdID0ge1swIC4uLiAoSERQVlJfTUFYIC0gMSldID0gVU5TRVR9OworbW9kdWxlX3BhcmFtX2FycmF5KHZpZGVvX25yLCBpbnQsIE5VTEwsIDApOworTU9EVUxFX1BBUk1fREVTQyh2aWRlb19uciwgInZpZGVvIGRldmljZSBudW1iZXIgKC0xPUF1dG8pIik7CisKKy8qIGhvbGRzIHRoZSBudW1iZXIgb2YgY3VycmVudGx5IHJlZ2lzdGVyZWQgZGV2aWNlcyAqLworc3RhdGljIGF0b21pY190IGRldl9uciA9IEFUT01JQ19JTklUKC0xKTsKKworaW50IGhkcHZyX2RlYnVnOworbW9kdWxlX3BhcmFtKGhkcHZyX2RlYnVnLCBpbnQsIFNfSVJVR098U19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGhkcHZyX2RlYnVnLCAiZW5hYmxlIGRlYnVnZ2luZyBvdXRwdXQiKTsKKwordWludCBkZWZhdWx0X3ZpZGVvX2lucHV0ID0gSERQVlJfVklERU9fSU5QVVRTOworbW9kdWxlX3BhcmFtKGRlZmF1bHRfdmlkZW9faW5wdXQsIHVpbnQsIFNfSVJVR098U19JV1VTUik7CitNT0RVTEVfUEFSTV9ERVNDKGRlZmF1bHRfdmlkZW9faW5wdXQsICJkZWZhdWx0IHZpZGVvIGlucHV0OiAwPUNvbXBvbmVudCAvICIKKwkJICIxPVMtVmlkZW8gLyAyPUNvbXBvc2l0ZSIpOworCit1aW50IGRlZmF1bHRfYXVkaW9faW5wdXQgPSBIRFBWUl9BVURJT19JTlBVVFM7Cittb2R1bGVfcGFyYW0oZGVmYXVsdF9hdWRpb19pbnB1dCwgdWludCwgU19JUlVHT3xTX0lXVVNSKTsKK01PRFVMRV9QQVJNX0RFU0MoZGVmYXVsdF9hdWRpb19pbnB1dCwgImRlZmF1bHQgYXVkaW8gaW5wdXQ6IDA9UkNBIGJhY2sgLyAiCisJCSAiMT1SQ0EgZnJvbnQgLyAyPVMvUERJRiIpOworCitzdGF0aWMgaW50IGJvb3N0X2F1ZGlvOworbW9kdWxlX3BhcmFtKGJvb3N0X2F1ZGlvLCBib29sLCBTX0lSVUdPfFNfSVdVU1IpOworTU9EVUxFX1BBUk1fREVTQyhib29zdF9hdWRpbywgImJvb3N0IHRoZSBhdWRpbyBzaWduYWwiKTsKKworCisvKiB0YWJsZSBvZiBkZXZpY2VzIHRoYXQgd29yayB3aXRoIHRoaXMgZHJpdmVyICovCitzdGF0aWMgc3RydWN0IHVzYl9kZXZpY2VfaWQgaGRwdnJfdGFibGVbXSA9IHsKKwl7IFVTQl9ERVZJQ0UoSERfUFZSX1ZFTkRPUl9JRCwgSERfUFZSX1BST0RVQ1RfSUQpIH0sCisJeyBVU0JfREVWSUNFKEhEX1BWUl9WRU5ET1JfSUQsIEhEX1BWUl9QUk9EVUNUX0lEMSkgfSwKKwl7IFVTQl9ERVZJQ0UoSERfUFZSX1ZFTkRPUl9JRCwgSERfUFZSX1BST0RVQ1RfSUQyKSB9LAorCXsgfQkJCQkJLyogVGVybWluYXRpbmcgZW50cnkgKi8KK307CitNT0RVTEVfREVWSUNFX1RBQkxFKHVzYiwgaGRwdnJfdGFibGUpOworCisKK3ZvaWQgaGRwdnJfZGVsZXRlKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldikKK3sKKwloZHB2cl9mcmVlX2J1ZmZlcnMoZGV2KTsKKworCWlmIChkZXYtPnZpZGVvX2RldikKKwkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoZGV2LT52aWRlb19kZXYpOworCisJdXNiX3B1dF9kZXYoZGV2LT51ZGV2KTsKK30KKworc3RhdGljIHZvaWQgY2hhbGxlbmdlKHU4ICpieXRlcykKK3sKKwl1NjQgKmk2NFAsIHRtcDY0OworCXVpbnQgaSwgaWR4OworCisJZm9yIChpZHggPSAwOyBpZHggPCAzMjsgKytpZHgpIHsKKworCQlpZiAoaWR4ICYgMHgzKQorCQkJYnl0ZXNbKGlkeCA+PiAzKSArIDNdID0gYnl0ZXNbKGlkeCA+PiAyKSAmIDB4M107CisKKwkJc3dpdGNoIChpZHggJiAweDMpIHsKKwkJY2FzZSAweDM6CisJCQlieXRlc1syXSArPSBieXRlc1szXSAqIDQgKyBieXRlc1s0XSArIGJ5dGVzWzVdOworCQkJYnl0ZXNbNF0gKz0gYnl0ZXNbKGlkeCAmIDB4MSkgKiAyXSAqIDkgKyA5OworCQkJYnJlYWs7CisJCWNhc2UgMHgxOgorCQkJYnl0ZXNbMF0gKj0gODsKKwkJCWJ5dGVzWzBdICs9IDcqaWR4ICsgNDsKKwkJCWJ5dGVzWzZdICs9IGJ5dGVzWzNdICogMzsKKwkJCWJyZWFrOworCQljYXNlIDB4MDoKKwkJCWJ5dGVzWzMgLSAoaWR4ID4+IDMpXSA9IGJ5dGVzW2lkeCA+PiAyXTsKKwkJCWJ5dGVzWzVdICs9IGJ5dGVzWzZdICogMzsKKwkJCWZvciAoaSA9IDA7IGkgPCAzOyBpKyspCisJCQkJYnl0ZXNbM10gKj0gYnl0ZXNbM10gKyAxOworCQkJYnJlYWs7CisJCWNhc2UgMHgyOgorCQkJZm9yIChpID0gMDsgaSA8IDM7IGkrKykKKwkJCQlieXRlc1sxXSAqPSBieXRlc1s2XSArIDE7CisJCQlmb3IgKGkgPSAwOyBpIDwgMzsgaSsrKSB7CisJCQkJaTY0UCA9ICh1NjQgKilieXRlczsKKwkJCQl0bXA2NCA9IGxlNjRfdG9fY3B1cChpNjRQKTsKKwkJCQl0bXA2NCA8PD0gYnl0ZXNbN10gJiAweDBmOworCQkJCSppNjRQICs9IGNwdV90b19sZTY0KHRtcDY0KTsKKwkJCX0KKwkJCWJyZWFrOworCQl9CisJfQorfQorCisvKiB0cnkgdG8gaW5pdCB0aGUgZGV2aWNlIGxpa2UgdGhlIHdpbmRvd3MgZHJpdmVyICovCitzdGF0aWMgaW50IGRldmljZV9hdXRob3JpemF0aW9uKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldikKK3sKKworCWludCByZXQsIHJldHZhbCA9IC1FTk9NRU07CisJY2hhciByZXF1ZXN0X3R5cGUgPSAweDM4LCByY3ZfcmVxdWVzdCA9IDB4ODE7CisJY2hhciAqcmVzcG9uc2U7CisjaWZkZWYgSERQVlJfREVCVUcKKwlzaXplX3QgYnVmX3NpemUgPSA0NjsKKwljaGFyICpwcmludF9idWYgPSBremFsbG9jKDUqYnVmX3NpemUrMSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcmludF9idWYpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisjZW5kaWYKKworCW11dGV4X2xvY2soJmRldi0+dXNiY19tdXRleCk7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwKKwkJCSAgICAgIHVzYl9yY3ZjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJICAgICAgcmN2X3JlcXVlc3QsIDB4ODAgfCByZXF1ZXN0X3R5cGUsCisJCQkgICAgICAweDA0MDAsIDB4MDAwMywKKwkJCSAgICAgIGRldi0+dXNiY19idWYsIDQ2LAorCQkJICAgICAgMTAwMDApOworCWlmIChyZXQgIT0gNDYpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsCisJCQkgInVuZXhwZWN0ZWQgYW5zd2VyIG9mIHN0YXR1cyByZXF1ZXN0LCBsZW4gJWRcbiIsIHJldCk7CisJCWdvdG8gZXJyb3I7CisJfQorI2lmZGVmIEhEUFZSX0RFQlVHCisJZWxzZSB7CisJCWhleF9kdW1wX3RvX2J1ZmZlcihkZXYtPnVzYmNfYnVmLCA0NiwgMTYsIDEsIHByaW50X2J1ZiwKKwkJCQkgICBzaXplb2YocHJpbnRfYnVmKSwgMCk7CisJCXY0bDJfZGJnKE1TR19JTkZPLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCisJCQkgIlN0YXR1cyByZXF1ZXN0IHJldHVybmVkLCBsZW4gJWQ6ICVzXG4iLAorCQkJIHJldCwgcHJpbnRfYnVmKTsKKwl9CisjZW5kaWYKKwlpZiAoZGV2LT51c2JjX2J1ZlsxXSA9PSBIRFBWUl9GSVJNV0FSRV9WRVJTSU9OKSB7CisJCWRldi0+ZmxhZ3MgJj0gfkhEUFZSX0ZMQUdfQUMzX0NBUDsKKwl9IGVsc2UgaWYgKGRldi0+dXNiY19idWZbMV0gPT0gSERQVlJfRklSTVdBUkVfVkVSU0lPTl9BQzMpIHsKKwkJZGV2LT5mbGFncyB8PSBIRFBWUl9GTEFHX0FDM19DQVA7CisJfSBlbHNlIGlmIChkZXYtPnVzYmNfYnVmWzFdID4gSERQVlJfRklSTVdBUkVfVkVSU0lPTl9BQzMpIHsKKwkJdjRsMl9pbmZvKCZkZXYtPnY0bDJfZGV2LCAidW50ZXN0ZWQgZmlybXdhcmUgdmVyc2lvbiAweCV4LCAiCisJCQkgICJ0aGUgZHJpdmVyIG1pZ2h0IG5vdCB3b3JrXG4iLCBkZXYtPnVzYmNfYnVmWzFdKTsKKwkJZGV2LT5mbGFncyB8PSBIRFBWUl9GTEFHX0FDM19DQVA7CisJfSBlbHNlIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJ1bmtub3duIGZpcm13YXJlIHZlcnNpb24gMHgleFxuIiwKKwkJCWRldi0+dXNiY19idWZbMV0pOworCQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yOworCX0KKworCXJlc3BvbnNlID0gZGV2LT51c2JjX2J1ZiszODsKKyNpZmRlZiBIRFBWUl9ERUJVRworCWhleF9kdW1wX3RvX2J1ZmZlcihyZXNwb25zZSwgOCwgMTYsIDEsIHByaW50X2J1Ziwgc2l6ZW9mKHByaW50X2J1ZiksIDApOworCXY0bDJfZGJnKE1TR19JTkZPLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsICJjaGFsbGVuZ2U6ICVzXG4iLAorCQkgcHJpbnRfYnVmKTsKKyNlbmRpZgorCWNoYWxsZW5nZShyZXNwb25zZSk7CisjaWZkZWYgSERQVlJfREVCVUcKKwloZXhfZHVtcF90b19idWZmZXIocmVzcG9uc2UsIDgsIDE2LCAxLCBwcmludF9idWYsIHNpemVvZihwcmludF9idWYpLCAwKTsKKwl2NGwyX2RiZyhNU0dfSU5GTywgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LCAiIHJlc3BvbnNlOiAlc1xuIiwKKwkJIHByaW50X2J1Zik7CisjZW5kaWYKKworCW1zbGVlcCgxMDApOworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKKwkJCSAgICAgIDB4ZDEsIDB4MDAgfCByZXF1ZXN0X3R5cGUsCisJCQkgICAgICAweDAwMDAsIDB4MDAwMCwKKwkJCSAgICAgIHJlc3BvbnNlLCA4LAorCQkJICAgICAgMTAwMDApOworCXY0bDJfZGJnKE1TR19JTkZPLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCisJCSAibWFnaWMgcmVxdWVzdCByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKwltdXRleF91bmxvY2soJmRldi0+dXNiY19tdXRleCk7CisKKwlyZXR2YWwgPSByZXQgIT0gODsKK2Vycm9yOgorCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgaGRwdnJfZGV2aWNlX2luaXQoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQoreworCWludCByZXQ7CisJdTggKmJ1ZjsKKwlzdHJ1Y3QgaGRwdnJfdmlkZW9faW5mbyAqdmlkaW5mOworCisJaWYgKGRldmljZV9hdXRob3JpemF0aW9uKGRldikpCisJCXJldHVybiAtRUFDQ0VTOworCisJLyogZGVmYXVsdCBvcHRpb25zIGZvciBpbml0ICovCisJaGRwdnJfc2V0X29wdGlvbnMoZGV2KTsKKworCS8qIHNldCBmaWx0ZXIgb3B0aW9ucyAqLworCW11dGV4X2xvY2soJmRldi0+dXNiY19tdXRleCk7CisJYnVmID0gZGV2LT51c2JjX2J1ZjsKKwlidWZbMF0gPSAweDAzOyBidWZbMV0gPSAweDAzOyBidWZbMl0gPSAweDAwOyBidWZbM10gPSAweDAwOworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKKwkJCSAgICAgIDB4MDEsIDB4MzgsCisJCQkgICAgICBDVFJMX0xPV19QQVNTX0ZJTFRFUl9WQUxVRSwgQ1RSTF9ERUZBVUxUX0lOREVYLAorCQkJICAgICAgYnVmLCA0LAorCQkJICAgICAgMTAwMCk7CisJdjRsMl9kYmcoTVNHX0lORk8sIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwKKwkJICJjb250cm9sIHJlcXVlc3QgcmV0dXJuZWQgJWRcbiIsIHJldCk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPnVzYmNfbXV0ZXgpOworCisJdmlkaW5mID0gZ2V0X3ZpZGVvX2luZm8oZGV2KTsKKwlpZiAoIXZpZGluZikKKwkJdjRsMl9kYmcoTVNHX0lORk8sIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwKKwkJCSJubyB2YWxpZCB2aWRlbyBzaWduYWwgb3IgZGV2aWNlIGluaXQgZmFpbGVkXG4iKTsKKwllbHNlCisJCWtmcmVlKHZpZGluZik7CisKKwkvKiBlbmFibGUgZmFuIGFuZCBibGluZyBsZWRzICovCisJbXV0ZXhfbG9jaygmZGV2LT51c2JjX211dGV4KTsKKwlidWZbMF0gPSAweDE7CisJcmV0ID0gdXNiX2NvbnRyb2xfbXNnKGRldi0+dWRldiwKKwkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJICAgICAgMHhkNCwgMHgzOCwgMCwgMCwgYnVmLCAxLAorCQkJICAgICAgMTAwMCk7CisJdjRsMl9kYmcoTVNHX0lORk8sIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwKKwkJICJjb250cm9sIHJlcXVlc3QgcmV0dXJuZWQgJWRcbiIsIHJldCk7CisKKwkvKiBib29zdCBhbmFsb2cgYXVkaW8gKi8KKwlidWZbMF0gPSBib29zdF9hdWRpbzsKKwlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LAorCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKGRldi0+dWRldiwgMCksCisJCQkgICAgICAweGQ1LCAweDM4LCAwLCAwLCBidWYsIDEsCisJCQkgICAgICAxMDAwKTsKKwl2NGwyX2RiZyhNU0dfSU5GTywgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkgImNvbnRyb2wgcmVxdWVzdCByZXR1cm5lZCAlZFxuIiwgcmV0KTsKKwltdXRleF91bmxvY2soJmRldi0+dXNiY19tdXRleCk7CisKKwlkZXYtPnN0YXR1cyA9IFNUQVRVU19JRExFOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGhkcHZyX29wdGlvbnMgaGRwdnJfZGVmYXVsdF9vcHRpb25zID0geworCS52aWRlb19zdGQJPSBIRFBWUl82MEhaLAorCS52aWRlb19pbnB1dAk9IEhEUFZSX0NPTVBPTkVOVCwKKwkuYXVkaW9faW5wdXQJPSBIRFBWUl9SQ0FfQkFDSywKKwkuYml0cmF0ZQk9IDY1LCAvKiA2IG1icHMgKi8KKwkucGVha19iaXRyYXRlCT0gOTAsIC8qIDkgbWJwcyAqLworCS5iaXRyYXRlX21vZGUJPSBIRFBWUl9DT05TVEFOVCwKKwkuZ29wX21vZGUJPSBIRFBWUl9TSU1QTEVfSURSX0dPUCwKKwkuYXVkaW9fY29kZWMJPSBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUFDLAorCS5icmlnaHRuZXNzCT0gMHg4NiwKKwkuY29udHJhc3QJPSAweDgwLAorCS5odWUJCT0gMHg4MCwKKwkuc2F0dXJhdGlvbgk9IDB4ODAsCisJLnNoYXJwbmVzcwk9IDB4ODAsCit9OworCitzdGF0aWMgaW50IGhkcHZyX3Byb2JlKHN0cnVjdCB1c2JfaW50ZXJmYWNlICppbnRlcmZhY2UsCisJCSAgICAgICBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCAqaWQpCit7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2OworCXN0cnVjdCB1c2JfaG9zdF9pbnRlcmZhY2UgKmlmYWNlX2Rlc2M7CisJc3RydWN0IHVzYl9lbmRwb2ludF9kZXNjcmlwdG9yICplbmRwb2ludDsKKwlzaXplX3QgYnVmZmVyX3NpemU7CisJaW50IGk7CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisKKwkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkZXZpY2Ugc3RhdGUgYW5kIGluaXRpYWxpemUgaXQgKi8KKwlkZXYgPSBremFsbG9jKHNpemVvZigqZGV2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYpIHsKKwkJZXJyKCJPdXQgb2YgbWVtb3J5Iik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogcmVnaXN0ZXIgdjRsMl9kZXZpY2UgZWFybHkgc28gaXQgY2FuIGJlIHVzZWQgZm9yIHByaW50a3MgKi8KKwlpZiAodjRsMl9kZXZpY2VfcmVnaXN0ZXIoJmludGVyZmFjZS0+ZGV2LCAmZGV2LT52NGwyX2RldikpIHsKKwkJZXJyKCJ2NGwyX2RldmljZV9yZWdpc3RlciBmYWlsZWQiKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwltdXRleF9pbml0KCZkZXYtPmlvX211dGV4KTsKKwltdXRleF9pbml0KCZkZXYtPmkyY19tdXRleCk7CisJbXV0ZXhfaW5pdCgmZGV2LT51c2JjX211dGV4KTsKKwlkZXYtPnVzYmNfYnVmID0ga21hbGxvYyg2NCwgR0ZQX0tFUk5FTCk7CisJaWYgKCFkZXYtPnVzYmNfYnVmKSB7CisJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAiT3V0IG9mIG1lbW9yeVxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT53YWl0X2J1ZmZlcik7CisJaW5pdF93YWl0cXVldWVfaGVhZCgmZGV2LT53YWl0X2RhdGEpOworCisJZGV2LT53b3JrcXVldWUgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgiaGRwdnJfYnVmZmVyIik7CisJaWYgKCFkZXYtPndvcmtxdWV1ZSkKKwkJZ290byBlcnJvcjsKKworCS8qIGluaXQgdmlkZW8gdHJhbnNmZXIgcXVldWVzICovCisJSU5JVF9MSVNUX0hFQUQoJmRldi0+ZnJlZV9idWZmX2xpc3QpOworCUlOSVRfTElTVF9IRUFEKCZkZXYtPnJlY19idWZmX2xpc3QpOworCisJZGV2LT5vcHRpb25zID0gaGRwdnJfZGVmYXVsdF9vcHRpb25zOworCisJaWYgKGRlZmF1bHRfdmlkZW9faW5wdXQgPCBIRFBWUl9WSURFT19JTlBVVFMpCisJCWRldi0+b3B0aW9ucy52aWRlb19pbnB1dCA9IGRlZmF1bHRfdmlkZW9faW5wdXQ7CisKKwlpZiAoZGVmYXVsdF9hdWRpb19pbnB1dCA8IEhEUFZSX0FVRElPX0lOUFVUUykKKwkJZGV2LT5vcHRpb25zLmF1ZGlvX2lucHV0ID0gZGVmYXVsdF9hdWRpb19pbnB1dDsKKworCWRldi0+dWRldiA9IHVzYl9nZXRfZGV2KGludGVyZmFjZV90b191c2JkZXYoaW50ZXJmYWNlKSk7CisKKwkvKiBzZXQgdXAgdGhlIGVuZHBvaW50IGluZm9ybWF0aW9uICovCisJLyogdXNlIG9ubHkgdGhlIGZpcnN0IGJ1bGstaW4gYW5kIGJ1bGstb3V0IGVuZHBvaW50cyAqLworCWlmYWNlX2Rlc2MgPSBpbnRlcmZhY2UtPmN1cl9hbHRzZXR0aW5nOworCWZvciAoaSA9IDA7IGkgPCBpZmFjZV9kZXNjLT5kZXNjLmJOdW1FbmRwb2ludHM7ICsraSkgeworCQllbmRwb2ludCA9ICZpZmFjZV9kZXNjLT5lbmRwb2ludFtpXS5kZXNjOworCisJCWlmICghZGV2LT5idWxrX2luX2VuZHBvaW50QWRkciAmJgorCQkgICAgdXNiX2VuZHBvaW50X2lzX2J1bGtfaW4oZW5kcG9pbnQpKSB7CisJCQkvKiBVU0IgaW50ZXJmYWNlIGRlc2NyaXB0aW9uIGlzIGJ1Z2d5LCByZXBvcnRlZCBtYXgKKwkJCSAqIHBhY2tldCBzaXplIGlzIDUxMiBieXRlcywgd2luZG93cyBkcml2ZXIgdXNlcyA4MTkyICovCisJCQlidWZmZXJfc2l6ZSA9IDgxOTI7CisJCQlkZXYtPmJ1bGtfaW5fc2l6ZSA9IGJ1ZmZlcl9zaXplOworCQkJZGV2LT5idWxrX2luX2VuZHBvaW50QWRkciA9IGVuZHBvaW50LT5iRW5kcG9pbnRBZGRyZXNzOworCQl9CisKKwl9CisJaWYgKCFkZXYtPmJ1bGtfaW5fZW5kcG9pbnRBZGRyKSB7CisJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAiQ291bGQgbm90IGZpbmQgYnVsay1pbiBlbmRwb2ludFxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisJLyogaW5pdCB0aGUgZGV2aWNlICovCisJaWYgKGhkcHZyX2RldmljZV9pbml0KGRldikpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJkZXZpY2UgaW5pdCBmYWlsZWRcbiIpOworCQlnb3RvIGVycm9yOworCX0KKworCW11dGV4X2xvY2soJmRldi0+aW9fbXV0ZXgpOworCWlmIChoZHB2cl9hbGxvY19idWZmZXJzKGRldiwgTlVNX0JVRkZFUlMpKSB7CisJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LAorCQkJICJhbGxvY2F0aW5nIHRyYW5zZmVyIGJ1ZmZlcnMgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKworCWlmIChoZHB2cl9yZWdpc3Rlcl92aWRlb2RldihkZXYsICZpbnRlcmZhY2UtPmRldiwKKwkJCQkgICAgdmlkZW9fbnJbYXRvbWljX2luY19yZXR1cm4oJmRldl9ucildKSkgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgInJlZ2lzdGVyaW5nIHZpZGVvZGV2IGZhaWxlZFxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorCisjaWZkZWYgQ09ORklHX0kyQworCS8qIHVudGlsIGkyYyBpcyB3b3JraW5nIHByb3Blcmx5ICovCisJcmV0dmFsID0gMDsgLyogaGRwdnJfcmVnaXN0ZXJfaTJjX2FkYXB0ZXIoZGV2KTsgKi8KKwlpZiAocmV0dmFsIDwgMCkgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgInJlZ2lzdGVyaW5nIGkyYyBhZGFwdGVyIGZhaWxlZFxuIik7CisJCWdvdG8gZXJyb3I7CisJfQorI2VuZGlmIC8qIENPTkZJR19JMkMgKi8KKworCS8qIHNhdmUgb3VyIGRhdGEgcG9pbnRlciBpbiB0aGlzIGludGVyZmFjZSBkZXZpY2UgKi8KKwl1c2Jfc2V0X2ludGZkYXRhKGludGVyZmFjZSwgZGV2KTsKKworCS8qIGxldCB0aGUgdXNlciBrbm93IHdoYXQgbm9kZSB0aGlzIGRldmljZSBpcyBub3cgYXR0YWNoZWQgdG8gKi8KKwl2NGwyX2luZm8oJmRldi0+djRsMl9kZXYsICJkZXZpY2Ugbm93IGF0dGFjaGVkIHRvIC9kZXYvdmlkZW8lZFxuIiwKKwkJICBkZXYtPnZpZGVvX2Rldi0+bWlub3IpOworCXJldHVybiAwOworCitlcnJvcjoKKwlpZiAoZGV2KSB7CisJCW11dGV4X3VubG9jaygmZGV2LT5pb19tdXRleCk7CisJCS8qIHRoaXMgZnJlZXMgYWxsb2NhdGVkIG1lbW9yeSAqLworCQloZHB2cl9kZWxldGUoZGV2KTsKKwl9CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIHZvaWQgaGRwdnJfZGlzY29ubmVjdChzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqaW50ZXJmYWNlKQoreworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldjsKKwlpbnQgbWlub3I7CisKKwlkZXYgPSB1c2JfZ2V0X2ludGZkYXRhKGludGVyZmFjZSk7CisJdXNiX3NldF9pbnRmZGF0YShpbnRlcmZhY2UsIE5VTEwpOworCisJbWlub3IgPSBkZXYtPnZpZGVvX2Rldi0+bWlub3I7CisKKwkvKiBwcmV2ZW50IG1vcmUgSS9PIGZyb20gc3RhcnRpbmcgYW5kIHN0b3AgYW55IG9uZ29pbmcgKi8KKwltdXRleF9sb2NrKCZkZXYtPmlvX211dGV4KTsKKwlkZXYtPnN0YXR1cyA9IFNUQVRVU19ESVNDT05ORUNURUQ7CisJdjRsMl9kZXZpY2VfZGlzY29ubmVjdCgmZGV2LT52NGwyX2Rldik7CisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UoZGV2LT52aWRlb19kZXYpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53YWl0X2RhdGEpOworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53YWl0X2J1ZmZlcik7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKwltc2xlZXAoMTAwKTsKKwlmbHVzaF93b3JrcXVldWUoZGV2LT53b3JrcXVldWUpOworCW11dGV4X2xvY2soJmRldi0+aW9fbXV0ZXgpOworCWhkcHZyX2NhbmNlbF9xdWV1ZShkZXYpOworCWRlc3Ryb3lfd29ya3F1ZXVlKGRldi0+d29ya3F1ZXVlKTsKKwltdXRleF91bmxvY2soJmRldi0+aW9fbXV0ZXgpOworCisJLyogZGVyZWdpc3RlciBJMkMgYWRhcHRlciAqLworI2lmZGVmIENPTkZJR19JMkMKKwltdXRleF9sb2NrKCZkZXYtPmkyY19tdXRleCk7CisJaWYgKGRldi0+aTJjX2FkYXB0ZXIpCisJCWkyY19kZWxfYWRhcHRlcihkZXYtPmkyY19hZGFwdGVyKTsKKwlrZnJlZShkZXYtPmkyY19hZGFwdGVyKTsKKwlkZXYtPmkyY19hZGFwdGVyID0gTlVMTDsKKwltdXRleF91bmxvY2soJmRldi0+aTJjX211dGV4KTsKKyNlbmRpZiAvKiBDT05GSUdfSTJDICovCisKKwlhdG9taWNfZGVjKCZkZXZfbnIpOworCisJdjRsMl9pbmZvKCZkZXYtPnY0bDJfZGV2LCAiZGV2aWNlIC9kZXYvdmlkZW8lZCBkaXNjb25uZWN0ZWRcbiIsIG1pbm9yKTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+djRsMl9kZXYpOworCWtmcmVlKGRldi0+dXNiY19idWYpOworCWtmcmVlKGRldik7Cit9CisKKworc3RhdGljIHN0cnVjdCB1c2JfZHJpdmVyIGhkcHZyX3VzYl9kcml2ZXIgPSB7CisJLm5hbWUgPQkJImhkcHZyIiwKKwkucHJvYmUgPQloZHB2cl9wcm9iZSwKKwkuZGlzY29ubmVjdCA9CWhkcHZyX2Rpc2Nvbm5lY3QsCisJLmlkX3RhYmxlID0JaGRwdnJfdGFibGUsCit9OworCitzdGF0aWMgaW50IF9faW5pdCBoZHB2cl9pbml0KHZvaWQpCit7CisJaW50IHJlc3VsdDsKKworCS8qIHJlZ2lzdGVyIHRoaXMgZHJpdmVyIHdpdGggdGhlIFVTQiBzdWJzeXN0ZW0gKi8KKwlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJmhkcHZyX3VzYl9kcml2ZXIpOworCWlmIChyZXN1bHQpCisJCWVycigidXNiX3JlZ2lzdGVyIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkIiwgcmVzdWx0KTsKKworCXJldHVybiByZXN1bHQ7Cit9CisKK3N0YXRpYyB2b2lkIF9fZXhpdCBoZHB2cl9leGl0KHZvaWQpCit7CisJLyogZGVyZWdpc3RlciB0aGlzIGRyaXZlciB3aXRoIHRoZSBVU0Igc3Vic3lzdGVtICovCisJdXNiX2RlcmVnaXN0ZXIoJmhkcHZyX3VzYl9kcml2ZXIpOworfQorCittb2R1bGVfaW5pdChoZHB2cl9pbml0KTsKK21vZHVsZV9leGl0KGhkcHZyX2V4aXQpOworCitNT0RVTEVfTElDRU5TRSgiR1BMIik7CitNT0RVTEVfQVVUSE9SKCJKYW5uZSBHcnVuYXUiKTsKK01PRFVMRV9ERVNDUklQVElPTigiSGF1cHBhdWdlIEhEIFBWUiBkcml2ZXIiKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItaTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWkyYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmM0YjVkMTUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLWkyYy5jCkBAIC0wLDAgKzEsMTQ1IEBACisKKy8qCisgKiBIYXVwcGF1Z2UgSEQgUFZSIFVTQiBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggICAgICBKYW5uZSBHcnVuYXUgKGpAamFubmF1Lm5ldCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorCisjaW5jbHVkZSAiaGRwdnIuaCIKKworI2RlZmluZSBDVFJMX1JFQURfUkVRVUVTVAkweGI4CisjZGVmaW5lIENUUkxfV1JJVEVfUkVRVUVTVAkweDM4CisKKyNkZWZpbmUgUkVRVFlQRV9JMkNfUkVBRAkweGIxCisjZGVmaW5lIFJFUVRZUEVfSTJDX1dSSVRFCTB4YjAKKyNkZWZpbmUgUkVRVFlQRV9JMkNfV1JJVEVfU1RBVFQJMHhkMAorCitzdGF0aWMgaW50IGhkcHZyX2kyY19yZWFkKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciBhZGRyLAorCQkJICBjaGFyICpkYXRhLCBpbnQgbGVuKQoreworCWludCByZXQ7CisJY2hhciAqYnVmID0ga21hbGxvYyhsZW4sIEdGUF9LRVJORUwpOworCWlmICghYnVmKQorCQlyZXR1cm4gLUVOT01FTTsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsCisJCQkgICAgICB1c2JfcmN2Y3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKKwkJCSAgICAgIFJFUVRZUEVfSTJDX1JFQUQsIENUUkxfUkVBRF9SRVFVRVNULAorCQkJICAgICAgMHgxMDB8YWRkciwgMCwgYnVmLCBsZW4sIDEwMDApOworCisJaWYgKHJldCA9PSBsZW4pIHsKKwkJbWVtY3B5KGRhdGEsIGJ1ZiwgbGVuKTsKKwkJcmV0ID0gMDsKKwl9IGVsc2UgaWYgKHJldCA+PSAwKQorCQlyZXQgPSAtRUlPOworCisJa2ZyZWUoYnVmKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgaGRwdnJfaTJjX3dyaXRlKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiwgdW5zaWduZWQgY2hhciBhZGRyLAorCQkJICAgY2hhciAqZGF0YSwgaW50IGxlbikKK3sKKwlpbnQgcmV0OworCWNoYXIgKmJ1ZiA9IGttYWxsb2MobGVuLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWJ1ZikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwltZW1jcHkoYnVmLCBkYXRhLCBsZW4pOworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsCisJCQkgICAgICB1c2Jfc25kY3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKKwkJCSAgICAgIFJFUVRZUEVfSTJDX1dSSVRFLCBDVFJMX1dSSVRFX1JFUVVFU1QsCisJCQkgICAgICAweDEwMHxhZGRyLCAwLCBidWYsIGxlbiwgMTAwMCk7CisKKwlpZiAocmV0IDwgMCkKKwkJZ290byBlcnJvcjsKKworCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsCisJCQkgICAgICB1c2JfcmN2Y3RybHBpcGUoZGV2LT51ZGV2LCAwKSwKKwkJCSAgICAgIFJFUVRZUEVfSTJDX1dSSVRFX1NUQVRULCBDVFJMX1JFQURfUkVRVUVTVCwKKwkJCSAgICAgIDAsIDAsIGJ1ZiwgMiwgMTAwMCk7CisKKwlpZiAocmV0ID09IDIpCisJCXJldCA9IDA7CisJZWxzZSBpZiAocmV0ID49IDApCisJCXJldCA9IC1FSU87CisKK2Vycm9yOgorCWtmcmVlKGJ1Zik7CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBoZHB2cl90cmFuc2ZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwdGVyLCBzdHJ1Y3QgaTJjX21zZyAqbXNncywKKwkJCSAgaW50IG51bSkKK3sKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYgPSBpMmNfZ2V0X2FkYXBkYXRhKGkyY19hZGFwdGVyKTsKKwlpbnQgcmV0dmFsID0gMCwgaSwgYWRkcjsKKworCWlmIChudW0gPD0gMCkKKwkJcmV0dXJuIDA7CisKKwltdXRleF9sb2NrKCZkZXYtPmkyY19tdXRleCk7CisKKwlmb3IgKGkgPSAwOyBpIDwgbnVtICYmICFyZXR2YWw7IGkrKykgeworCQlhZGRyID0gbXNnc1tpXS5hZGRyIDw8IDE7CisKKwkJaWYgKG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkKKwkJCXJldHZhbCA9IGhkcHZyX2kyY19yZWFkKGRldiwgYWRkciwgbXNnc1tpXS5idWYsCisJCQkJCQltc2dzW2ldLmxlbik7CisJCWVsc2UKKwkJCXJldHZhbCA9IGhkcHZyX2kyY193cml0ZShkZXYsIGFkZHIsIG1zZ3NbaV0uYnVmLAorCQkJCQkJIG1zZ3NbaV0ubGVuKTsKKwl9CisKKwltdXRleF91bmxvY2soJmRldi0+aTJjX211dGV4KTsKKworCXJldHVybiByZXR2YWwgPyByZXR2YWwgOiBudW07Cit9CisKK3N0YXRpYyB1MzIgaGRwdnJfZnVuY3Rpb25hbGl0eShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCit7CisJcmV0dXJuIEkyQ19GVU5DX0kyQyB8IEkyQ19GVU5DX1NNQlVTX0VNVUw7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaTJjX2FsZ29yaXRobSBoZHB2cl9hbGdvID0geworCS5tYXN0ZXJfeGZlciAgID0gaGRwdnJfdHJhbnNmZXIsCisJLmZ1bmN0aW9uYWxpdHkgPSBoZHB2cl9mdW5jdGlvbmFsaXR5LAorfTsKKworaW50IGhkcHZyX3JlZ2lzdGVyX2kyY19hZGFwdGVyKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwOworCWludCByZXR2YWwgPSAtRU5PTUVNOworCisJaTJjX2FkYXAgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaTJjX2FkYXB0ZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoaTJjX2FkYXAgPT0gTlVMTCkKKwkJZ290byBlcnJvcjsKKworCXN0cmxjcHkoaTJjX2FkYXAtPm5hbWUsICJIYXVwcGF1Z2UgSEQgUFZSIEkyQyIsCisJCXNpemVvZihpMmNfYWRhcC0+bmFtZSkpOworCWkyY19hZGFwLT5hbGdvICA9ICZoZHB2cl9hbGdvOworCWkyY19hZGFwLT5jbGFzcyA9IEkyQ19DTEFTU19UVl9BTkFMT0c7CisJaTJjX2FkYXAtPmlkICAgID0gSTJDX0hXX0JfSERQVlI7CisJaTJjX2FkYXAtPm93bmVyID0gVEhJU19NT0RVTEU7CisJaTJjX2FkYXAtPmRldi5wYXJlbnQgPSAmZGV2LT51ZGV2LT5kZXY7CisKKwlpMmNfc2V0X2FkYXBkYXRhKGkyY19hZGFwLCBkZXYpOworCisJcmV0dmFsID0gaTJjX2FkZF9hZGFwdGVyKGkyY19hZGFwKTsKKworCWlmICghcmV0dmFsKQorCQlkZXYtPmkyY19hZGFwdGVyID0gaTJjX2FkYXA7CisJZWxzZQorCQlrZnJlZShpMmNfYWRhcCk7CisKK2Vycm9yOgorCXJldHVybiByZXR2YWw7Cit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLXZpZGVvLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLXZpZGVvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2U2ZmZlZQotLS0gL2Rldi9udWxsCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGRwdnIvaGRwdnItdmlkZW8uYwpAQCAtMCwwICsxLDEyNDggQEAKKy8qCisgKiBIYXVwcGF1Z2UgSEQgUFZSIFVTQiBkcml2ZXIgLSB2aWRlbyA0IGxpbnV4IDIgaW50ZXJmYWNlCisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4ICAgICAgSmFubmUgR3J1bmF1IChqQGphbm5hdS5uZXQpCisgKgorICoJVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICoJbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMKKyAqCXB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCB2ZXJzaW9uIDIuCisgKgorICovCisKKyNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KKyNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgorI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisjaW5jbHVkZSA8bGludXgvdWFjY2Vzcy5oPgorI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvdmVyc2lvbi5oPgorI2luY2x1ZGUgPGxpbnV4L3dvcmtxdWV1ZS5oPgorCisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXYuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpbmNsdWRlICJoZHB2ci5oIgorCisjZGVmaW5lIEJVTEtfVVJCX1RJTUVPVVQgMTI1MCAvKiAxLjI1IHNlY29uZHMgKi8KKworI2RlZmluZSBwcmludF9idWZmZXJfc3RhdHVzKCkgeyBcCisJCXY0bDJfZGJnKE1TR19CVUZGRVIsIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwJXAorCQkJICIlczolZCBidWZmZXIgc3RhdDogJWQgZnJlZSwgJWQgcHJvY1xuIiwJXAorCQkJIF9fZnVuY19fLCBfX0xJTkVfXywJCQkJXAorCQkJIGxpc3Rfc2l6ZSgmZGV2LT5mcmVlX2J1ZmZfbGlzdCksCQlcCisJCQkgbGlzdF9zaXplKCZkZXYtPnJlY19idWZmX2xpc3QpKTsgfQorCitzdHJ1Y3QgaGRwdnJfZmggeworCXN0cnVjdCBoZHB2cl9kZXZpY2UJKmRldjsKK307CisKK3N0YXRpYyB1aW50IGxpc3Rfc2l6ZShzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0KQoreworCXN0cnVjdCBsaXN0X2hlYWQgKnRtcDsKKwl1aW50IGNvdW50ID0gMDsKKworCWxpc3RfZm9yX2VhY2godG1wLCBsaXN0KSB7CisJCWNvdW50Kys7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogdXJiIGNhbGxiYWNrICovCitzdGF0aWMgdm9pZCBoZHB2cl9yZWFkX2J1bGtfY2FsbGJhY2soc3RydWN0IHVyYiAqdXJiKQoreworCXN0cnVjdCBoZHB2cl9idWZmZXIgKmJ1ZiA9IChzdHJ1Y3QgaGRwdnJfYnVmZmVyICopdXJiLT5jb250ZXh0OworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGJ1Zi0+ZGV2OworCisJLyogbWFya2luZyBidWZmZXIgYXMgcmVjZWl2ZWQgYW5kIHdha2Ugd2FpdGluZyAqLworCWJ1Zi0+c3RhdHVzID0gQlVGU1RBVF9SRUFEWTsKKwl3YWtlX3VwX2ludGVycnVwdGlibGUoJmRldi0+d2FpdF9kYXRhKTsKK30KKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIGJ1ZmZmZXIgYml0cyAqLworCisvKiBmdW5jdGlvbiBleHBlY3RzIGRldi0+aW9fbXV0ZXggdG8gYmUgaG9sZCBieSBjYWxsZXIgKi8KK2ludCBoZHB2cl9jYW5jZWxfcXVldWUoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBoZHB2cl9idWZmZXIgKmJ1ZjsKKworCWxpc3RfZm9yX2VhY2hfZW50cnkoYnVmLCAmZGV2LT5yZWNfYnVmZl9saXN0LCBidWZmX2xpc3QpIHsKKwkJdXNiX2tpbGxfdXJiKGJ1Zi0+dXJiKTsKKwkJYnVmLT5zdGF0dXMgPSBCVUZTVEFUX0FWQUlMQUJMRTsKKwl9CisKKwlsaXN0X3NwbGljZV9pbml0KCZkZXYtPnJlY19idWZmX2xpc3QsIGRldi0+ZnJlZV9idWZmX2xpc3QucHJldik7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBoZHB2cl9mcmVlX3F1ZXVlKHN0cnVjdCBsaXN0X2hlYWQgKnEpCit7CisJc3RydWN0IGxpc3RfaGVhZCAqdG1wOworCXN0cnVjdCBsaXN0X2hlYWQgKnA7CisJc3RydWN0IGhkcHZyX2J1ZmZlciAqYnVmOworCXN0cnVjdCB1cmIgKnVyYjsKKworCWZvciAocCA9IHEtPm5leHQ7IHAgIT0gcTspIHsKKwkJYnVmID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgaGRwdnJfYnVmZmVyLCBidWZmX2xpc3QpOworCisJCXVyYiA9IGJ1Zi0+dXJiOworCQl1c2JfYnVmZmVyX2ZyZWUodXJiLT5kZXYsIHVyYi0+dHJhbnNmZXJfYnVmZmVyX2xlbmd0aCwKKwkJCQl1cmItPnRyYW5zZmVyX2J1ZmZlciwgdXJiLT50cmFuc2Zlcl9kbWEpOworCQl1c2JfZnJlZV91cmIodXJiKTsKKwkJdG1wID0gcC0+bmV4dDsKKwkJbGlzdF9kZWwocCk7CisJCWtmcmVlKGJ1Zik7CisJCXAgPSB0bXA7CisJfQorCisJcmV0dXJuIDA7Cit9CisKKy8qIGZ1bmN0aW9uIGV4cGVjdHMgZGV2LT5pb19tdXRleCB0byBiZSBob2xkIGJ5IGNhbGxlciAqLworaW50IGhkcHZyX2ZyZWVfYnVmZmVycyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCit7CisJaGRwdnJfY2FuY2VsX3F1ZXVlKGRldik7CisKKwloZHB2cl9mcmVlX3F1ZXVlKCZkZXYtPmZyZWVfYnVmZl9saXN0KTsKKwloZHB2cl9mcmVlX3F1ZXVlKCZkZXYtPnJlY19idWZmX2xpc3QpOworCisJcmV0dXJuIDA7Cit9CisKKy8qIGZ1bmN0aW9uIGV4cGVjdHMgZGV2LT5pb19tdXRleCB0byBiZSBob2xkIGJ5IGNhbGxlciAqLworaW50IGhkcHZyX2FsbG9jX2J1ZmZlcnMoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2LCB1aW50IGNvdW50KQoreworCXVpbnQgaTsKKwlpbnQgcmV0dmFsID0gLUVOT01FTTsKKwl1OCAqbWVtOworCXN0cnVjdCBoZHB2cl9idWZmZXIgKmJ1ZjsKKwlzdHJ1Y3QgdXJiICp1cmI7CisKKwl2NGwyX2RiZyhNU0dfSU5GTywgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkgImFsbG9jYXRpbmcgJXUgYnVmZmVyc1xuIiwgY291bnQpOworCisJZm9yIChpID0gMDsgaSA8IGNvdW50OyBpKyspIHsKKworCQlidWYgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaGRwdnJfYnVmZmVyKSwgR0ZQX0tFUk5FTCk7CisJCWlmICghYnVmKSB7CisJCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgImNhbm5vdCBhbGxvY2F0ZSBidWZmZXJcbiIpOworCQkJZ290byBleGl0OworCQl9CisJCWJ1Zi0+ZGV2ID0gZGV2OworCisJCXVyYiA9IHVzYl9hbGxvY191cmIoMCwgR0ZQX0tFUk5FTCk7CisJCWlmICghdXJiKSB7CisJCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgImNhbm5vdCBhbGxvY2F0ZSB1cmJcbiIpOworCQkJZ290byBleGl0OworCQl9CisJCWJ1Zi0+dXJiID0gdXJiOworCisJCW1lbSA9IHVzYl9idWZmZXJfYWxsb2MoZGV2LT51ZGV2LCBkZXYtPmJ1bGtfaW5fc2l6ZSwgR0ZQX0tFUk5FTCwKKwkJCQkgICAgICAgJnVyYi0+dHJhbnNmZXJfZG1hKTsKKwkJaWYgKCFtZW0pIHsKKwkJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LAorCQkJCSAiY2Fubm90IGFsbG9jYXRlIHVzYiB0cmFuc2ZlciBidWZmZXJcbiIpOworCQkJZ290byBleGl0OworCQl9CisKKwkJdXNiX2ZpbGxfYnVsa191cmIoYnVmLT51cmIsIGRldi0+dWRldiwKKwkJCQkgIHVzYl9yY3ZidWxrcGlwZShkZXYtPnVkZXYsCisJCQkJCQkgIGRldi0+YnVsa19pbl9lbmRwb2ludEFkZHIpLAorCQkJCSAgbWVtLCBkZXYtPmJ1bGtfaW5fc2l6ZSwKKwkJCQkgIGhkcHZyX3JlYWRfYnVsa19jYWxsYmFjaywgYnVmKTsKKworCQlidWYtPnN0YXR1cyA9IEJVRlNUQVRfQVZBSUxBQkxFOworCQlsaXN0X2FkZF90YWlsKCZidWYtPmJ1ZmZfbGlzdCwgJmRldi0+ZnJlZV9idWZmX2xpc3QpOworCX0KKwlyZXR1cm4gMDsKK2V4aXQ6CisJaGRwdnJfZnJlZV9idWZmZXJzKGRldik7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBoZHB2cl9zdWJtaXRfYnVmZmVycyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGhkcHZyX2J1ZmZlciAqYnVmOworCXN0cnVjdCB1cmIgKnVyYjsKKwlpbnQgcmV0ID0gMCwgZXJyX2NvdW50ID0gMDsKKworCW11dGV4X2xvY2soJmRldi0+aW9fbXV0ZXgpOworCisJd2hpbGUgKGRldi0+c3RhdHVzID09IFNUQVRVU19TVFJFQU1JTkcgJiYKKwkgICAgICAgIWxpc3RfZW1wdHkoJmRldi0+ZnJlZV9idWZmX2xpc3QpKSB7CisKKwkJYnVmID0gbGlzdF9lbnRyeShkZXYtPmZyZWVfYnVmZl9saXN0Lm5leHQsIHN0cnVjdCBoZHB2cl9idWZmZXIsCisJCQkJIGJ1ZmZfbGlzdCk7CisJCWlmIChidWYtPnN0YXR1cyAhPSBCVUZTVEFUX0FWQUlMQUJMRSkgeworCQkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsCisJCQkJICJidWZmZXIgbm90IG1hcmtlZCBhcyBhdmFpbGJhbGVcbiIpOworCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJdXJiID0gYnVmLT51cmI7CisJCXVyYi0+c3RhdHVzID0gMDsKKwkJdXJiLT5hY3R1YWxfbGVuZ3RoID0gMDsKKwkJcmV0ID0gdXNiX3N1Ym1pdF91cmIodXJiLCBHRlBfS0VSTkVMKTsKKwkJaWYgKHJldCkgeworCQkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsCisJCQkJICJ1c2Jfc3VibWl0X3VyYiBpbiAlcyByZXR1cm5lZCAlZFxuIiwKKwkJCQkgX19mdW5jX18sIHJldCk7CisJCQlpZiAoKytlcnJfY291bnQgPiAyKQorCQkJCWJyZWFrOworCQkJY29udGludWU7CisJCX0KKwkJYnVmLT5zdGF0dXMgPSBCVUZTVEFUX0lOUFJPR1JFU1M7CisJCWxpc3RfbW92ZV90YWlsKCZidWYtPmJ1ZmZfbGlzdCwgJmRldi0+cmVjX2J1ZmZfbGlzdCk7CisJfQorZXJyOgorCXByaW50X2J1ZmZlcl9zdGF0dXMoKTsKKwltdXRleF91bmxvY2soJmRldi0+aW9fbXV0ZXgpOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBzdHJ1Y3QgaGRwdnJfYnVmZmVyICpoZHB2cl9nZXRfbmV4dF9idWZmZXIoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KQoreworCXN0cnVjdCBoZHB2cl9idWZmZXIgKmJ1ZjsKKworCW11dGV4X2xvY2soJmRldi0+aW9fbXV0ZXgpOworCisJaWYgKGxpc3RfZW1wdHkoJmRldi0+cmVjX2J1ZmZfbGlzdCkpIHsKKwkJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJYnVmID0gbGlzdF9lbnRyeShkZXYtPnJlY19idWZmX2xpc3QubmV4dCwgc3RydWN0IGhkcHZyX2J1ZmZlciwKKwkJCSBidWZmX2xpc3QpOworCW11dGV4X3VubG9jaygmZGV2LT5pb19tdXRleCk7CisKKwlyZXR1cm4gYnVmOworfQorCitzdGF0aWMgdm9pZCBoZHB2cl90cmFuc21pdF9idWZmZXJzKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKK3sKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IGhkcHZyX2RldmljZSwKKwkJCQkJCXdvcmtlcik7CisKKwl3aGlsZSAoZGV2LT5zdGF0dXMgPT0gU1RBVFVTX1NUUkVBTUlORykgeworCisJCWlmIChoZHB2cl9zdWJtaXRfYnVmZmVycyhkZXYpKSB7CisJCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgImNvdWxkbid0IHN1Ym1pdCBidWZmZXJzXG4iKTsKKwkJCWdvdG8gZXJyb3I7CisJCX0KKwkJaWYgKHdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZShkZXYtPndhaXRfYnVmZmVyLAorCQkJCSFsaXN0X2VtcHR5KCZkZXYtPmZyZWVfYnVmZl9saXN0KSB8fAorCQkJCQkgICAgIGRldi0+c3RhdHVzICE9IFNUQVRVU19TVFJFQU1JTkcpKQorCQkJZ290byBlcnJvcjsKKwl9CisKKwl2NGwyX2RiZyhNU0dfSU5GTywgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkgInRyYW5zbWl0IHdvcmtlciBleGl0ZWRcbiIpOworCXJldHVybjsKK2Vycm9yOgorCXY0bDJfZGJnKE1TR19JTkZPLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCisJCSAidHJhbnNtaXQgYnVmZmVycyBlcnJvcmVkXG4iKTsKKwlkZXYtPnN0YXR1cyA9IFNUQVRVU19FUlJPUjsKK30KKworLyogZnVuY3Rpb24gZXhwZWN0cyBkZXYtPmlvX211dGV4IHRvIGJlIGhvbGQgYnkgY2FsbGVyICovCitzdGF0aWMgaW50IGhkcHZyX3N0YXJ0X3N0cmVhbWluZyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpCit7CisJaW50IHJldDsKKwlzdHJ1Y3QgaGRwdnJfdmlkZW9faW5mbyAqdmlkaW5mOworCisJaWYgKGRldi0+c3RhdHVzID09IFNUQVRVU19TVFJFQU1JTkcpCisJCXJldHVybiAwOworCWVsc2UgaWYgKGRldi0+c3RhdHVzICE9IFNUQVRVU19JRExFKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCXZpZGluZiA9IGdldF92aWRlb19pbmZvKGRldik7CisKKwlpZiAodmlkaW5mKSB7CisJCXY0bDJfZGJnKE1TR19CVUZGRVIsIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwKKwkJCSAidmlkZW8gc2lnbmFsOiAlZHglZEAlZGh6XG4iLCB2aWRpbmYtPndpZHRoLAorCQkJIHZpZGluZi0+aGVpZ2h0LCB2aWRpbmYtPmZwcyk7CisJCWtmcmVlKHZpZGluZik7CisKKwkJLyogc3RhcnQgc3RyZWFtaW5nIDIgcmVxdWVzdCAqLworCQlyZXQgPSB1c2JfY29udHJvbF9tc2coZGV2LT51ZGV2LAorCQkJCSAgICAgIHVzYl9zbmRjdHJscGlwZShkZXYtPnVkZXYsIDApLAorCQkJCSAgICAgIDB4YjgsIDB4MzgsIDB4MSwgMCwgTlVMTCwgMCwgODAwMCk7CisJCXY0bDJfZGJnKE1TR19CVUZGRVIsIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwKKwkJCSAiZW5jb2RlciBzdGFydCBjb250cm9sIHJlcXVlc3QgcmV0dXJuZWQgJWRcbiIsIHJldCk7CisKKwkJaGRwdnJfY29uZmlnX2NhbGwoZGV2LCBDVFJMX1NUQVJUX1NUUkVBTUlOR19WQUxVRSwgMHgwMCk7CisKKwkJSU5JVF9XT1JLKCZkZXYtPndvcmtlciwgaGRwdnJfdHJhbnNtaXRfYnVmZmVycyk7CisJCXF1ZXVlX3dvcmsoZGV2LT53b3JrcXVldWUsICZkZXYtPndvcmtlcik7CisKKwkJdjRsMl9kYmcoTVNHX0JVRkZFUiwgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkJICJzdHJlYW1pbmcgc3RhcnRlZFxuIik7CisJCWRldi0+c3RhdHVzID0gU1RBVFVTX1NUUkVBTUlORzsKKworCQlyZXR1cm4gMDsKKwl9CisJbXNsZWVwKDI1MCk7CisJdjRsMl9kYmcoTVNHX0lORk8sIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwKKwkJICJubyB2aWRlbyBzaWduYWwgYXQgaW5wdXQgJWRcbiIsIGRldi0+b3B0aW9ucy52aWRlb19pbnB1dCk7CisJcmV0dXJuIC1FQUdBSU47Cit9CisKKworLyogZnVuY3Rpb24gZXhwZWN0cyBkZXYtPmlvX211dGV4IHRvIGJlIGhvbGQgYnkgY2FsbGVyICovCitzdGF0aWMgaW50IGhkcHZyX3N0b3Bfc3RyZWFtaW5nKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldikKK3sKKwl1aW50IGFjdHVhbF9sZW5ndGgsIGMgPSAwOworCXU4ICpidWY7CisKKwlpZiAoZGV2LT5zdGF0dXMgPT0gU1RBVFVTX0lETEUpCisJCXJldHVybiAwOworCWVsc2UgaWYgKGRldi0+c3RhdHVzICE9IFNUQVRVU19TVFJFQU1JTkcpCisJCXJldHVybiAtRUFHQUlOOworCisJYnVmID0ga21hbGxvYyhkZXYtPmJ1bGtfaW5fc2l6ZSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFidWYpCisJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAiZmFpbGVkIHRvIGFsbG9jYXRlIHRlbXBvcmFyeSBidWZmZXIgIgorCQkJICJmb3IgZW1wdHlpbmcgdGhlIGludGVybmFsIGRldmljZSBidWZmZXIuICIKKwkJCSAiTmV4dCBjYXB0dXJlIHN0YXJ0IHdpbGwgYmUgc2xvd1xuIik7CisKKwlkZXYtPnN0YXR1cyA9IFNUQVRVU19TSFVUVElOR19ET1dOOworCWhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9TVE9QX1NUUkVBTUlOR19WQUxVRSwgMHgwMCk7CisJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKworCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmZGV2LT53YWl0X2J1ZmZlcik7CisJbXNsZWVwKDUwKTsKKworCWZsdXNoX3dvcmtxdWV1ZShkZXYtPndvcmtxdWV1ZSk7CisKKwltdXRleF9sb2NrKCZkZXYtPmlvX211dGV4KTsKKwkvKiBraWxsIHRoZSBzdGlsbCBvdXRzdGFuZGluZyB1cmJzICovCisJaGRwdnJfY2FuY2VsX3F1ZXVlKGRldik7CisKKwkvKiBlbXB0eWluZyB0aGUgZGV2aWNlIGJ1ZmZlciBiZWZvcmVzaHV0dGluZyBpdCBkb3duICovCisJd2hpbGUgKGJ1ZiAmJiArK2MgPCA1MDAgJiYKKwkgICAgICAgIXVzYl9idWxrX21zZyhkZXYtPnVkZXYsCisJCQkgICAgIHVzYl9yY3ZidWxrcGlwZShkZXYtPnVkZXYsCisJCQkJCSAgICAgZGV2LT5idWxrX2luX2VuZHBvaW50QWRkciksCisJCQkgICAgIGJ1ZiwgZGV2LT5idWxrX2luX3NpemUsICZhY3R1YWxfbGVuZ3RoLAorCQkJICAgICBCVUxLX1VSQl9USU1FT1VUKSkgeworCQkvKiB3YWl0ICovCisJCW1zbGVlcCg1KTsKKwkJdjRsMl9kYmcoTVNHX0JVRkZFUiwgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkJICIlMmQ6IGdvdCAlZCBieXRlc1xuIiwgYywgYWN0dWFsX2xlbmd0aCk7CisJfQorCWtmcmVlKGJ1Zik7CisJdjRsMl9kYmcoTVNHX0JVRkZFUiwgaGRwdnJfZGVidWcsICZkZXYtPnY0bDJfZGV2LAorCQkgInVzZWQgJWQgdXJicyB0byBlbXB0eSBkZXZpY2UgYnVmZmVyc1xuIiwgYy0xKTsKKwltc2xlZXAoMTApOworCisJZGV2LT5zdGF0dXMgPSBTVEFUVVNfSURMRTsKKworCXJldHVybiAwOworfQorCisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyoKKyAqIHZpZGVvIDQgbGludXggMiBmaWxlIG9wZXJhdGlvbnMKKyAqLworCitzdGF0aWMgaW50IGhkcHZyX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCit7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2OworCXN0cnVjdCBoZHB2cl9maCAqZmg7CisJaW50IHJldHZhbCA9IC1FTk9NRU07CisKKwlkZXYgPSAoc3RydWN0IGhkcHZyX2RldmljZSAqKXZpZGVvX2dldF9kcnZkYXRhKHZpZGVvX2RldmRhdGEoZmlsZSkpOworCWlmICghZGV2KSB7CisJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAib3BlbiBmYWlsaW5nIHdpdGggd2l0aCBFTk9ERVZcbiIpOworCQlyZXR2YWwgPSAtRU5PREVWOworCQlnb3RvIGVycjsKKwl9CisKKwlmaCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBoZHB2cl9maCksIEdGUF9LRVJORUwpOworCWlmICghZmgpIHsKKwkJdjRsMl9lcnIoJmRldi0+djRsMl9kZXYsICJPdXQgb2YgbWVtb3J5XG4iKTsKKwkJZ290byBlcnI7CisJfQorCS8qIGxvY2sgdGhlIGRldmljZSB0byBhbGxvdyBjb3JyZWN0bHkgaGFuZGxpbmcgZXJyb3JzCisJICogaW4gcmVzdW1wdGlvbiAqLworCW11dGV4X2xvY2soJmRldi0+aW9fbXV0ZXgpOworCWRldi0+b3Blbl9jb3VudCsrOworCisJZmgtPmRldiA9IGRldjsKKworCS8qIHNhdmUgb3VyIG9iamVjdCBpbiB0aGUgZmlsZSdzIHByaXZhdGUgc3RydWN0dXJlICovCisJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CisKKwlyZXR2YWwgPSAwOworZXJyOgorCW11dGV4X3VubG9jaygmZGV2LT5pb19tdXRleCk7CisJcmV0dXJuIHJldHZhbDsKK30KKworc3RhdGljIGludCBoZHB2cl9yZWxlYXNlKHN0cnVjdCBmaWxlICpmaWxlKQoreworCXN0cnVjdCBoZHB2cl9maAkJKmZoICA9IChzdHJ1Y3QgaGRwdnJfZmggKilmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhkcHZyX2RldmljZQkqZGV2ID0gZmgtPmRldjsKKworCWlmICghZGV2KQorCQlyZXR1cm4gLUVOT0RFVjsKKworCW11dGV4X2xvY2soJmRldi0+aW9fbXV0ZXgpOworCWlmICghKC0tZGV2LT5vcGVuX2NvdW50KSAmJiBkZXYtPnN0YXR1cyA9PSBTVEFUVVNfU1RSRUFNSU5HKQorCQloZHB2cl9zdG9wX3N0cmVhbWluZyhkZXYpOworCisJbXV0ZXhfdW5sb2NrKCZkZXYtPmlvX211dGV4KTsKKworCXJldHVybiAwOworfQorCisvKgorICogaGRwdnJfdjRsMl9yZWFkKCkKKyAqIHdpbGwgYWxsb2NhdGUgYnVmZmVycyB3aGVuIGNhbGxlZCBmb3IgdGhlIGZpcnN0IHRpbWUKKyAqLworc3RhdGljIHNzaXplX3QgaGRwdnJfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50LAorCQkJICBsb2ZmX3QgKnBvcykKK3sKKwlzdHJ1Y3QgaGRwdnJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGZoLT5kZXY7CisJc3RydWN0IGhkcHZyX2J1ZmZlciAqYnVmID0gTlVMTDsKKwlzdHJ1Y3QgdXJiICp1cmI7CisJdW5zaWduZWQgaW50IHJldCA9IDA7CisJaW50IHJlbSwgY250OworCisJaWYgKCpwb3MpCisJCXJldHVybiAtRVNQSVBFOworCisJaWYgKCFkZXYpCisJCXJldHVybiAtRU5PREVWOworCisJbXV0ZXhfbG9jaygmZGV2LT5pb19tdXRleCk7CisJaWYgKGRldi0+c3RhdHVzID09IFNUQVRVU19JRExFKSB7CisJCWlmIChoZHB2cl9zdGFydF9zdHJlYW1pbmcoZGV2KSkgeworCQkJdjRsMl9kYmcoTVNHX0lORk8sIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwKKwkJCQkgInN0YXJ0X3N0cmVhbWluZyBmYWlsZWRcbiIpOworCQkJcmV0ID0gLUVJTzsKKwkJCW1zbGVlcCgyMDApOworCQkJZGV2LT5zdGF0dXMgPSBTVEFUVVNfSURMRTsKKwkJCW11dGV4X3VubG9jaygmZGV2LT5pb19tdXRleCk7CisJCQlnb3RvIGVycjsKKwkJfQorCQlwcmludF9idWZmZXJfc3RhdHVzKCk7CisJfQorCW11dGV4X3VubG9jaygmZGV2LT5pb19tdXRleCk7CisKKwkvKiB3YWl0IGZvciB0aGUgZmlyc3QgYnVmZmVyICovCisJaWYgKCEoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0spKSB7CisJCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZGV2LT53YWl0X2RhdGEsCisJCQkJCSAgICAgaGRwdnJfZ2V0X25leHRfYnVmZmVyKGRldikpKQorCQkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKKwl9CisKKwlidWYgPSBoZHB2cl9nZXRfbmV4dF9idWZmZXIoZGV2KTsKKworCXdoaWxlIChjb3VudCA+IDAgJiYgYnVmKSB7CisKKwkJaWYgKGJ1Zi0+c3RhdHVzICE9IEJVRlNUQVRfUkVBRFkgJiYKKwkJICAgIGRldi0+c3RhdHVzICE9IFNUQVRVU19ESVNDT05ORUNURUQpIHsKKwkJCS8qIHJldHVybiBub25ibG9ja2luZyAqLworCQkJaWYgKGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLKSB7CisJCQkJaWYgKCFyZXQpCisJCQkJCXJldCA9IC1FQUdBSU47CisJCQkJZ290byBlcnI7CisJCQl9CisKKwkJCWlmICh3YWl0X2V2ZW50X2ludGVycnVwdGlibGUoZGV2LT53YWl0X2RhdGEsCisJCQkJCSAgICAgIGJ1Zi0+c3RhdHVzID09IEJVRlNUQVRfUkVBRFkpKSB7CisJCQkJcmV0ID0gLUVSRVNUQVJUU1lTOworCQkJCWdvdG8gZXJyOworCQkJfQorCQl9CisKKwkJaWYgKGJ1Zi0+c3RhdHVzICE9IEJVRlNUQVRfUkVBRFkpCisJCQlicmVhazsKKworCQkvKiBzZXQgcmVtYWluaW5nIGJ5dGVzIHRvIGNvcHkgKi8KKwkJdXJiID0gYnVmLT51cmI7CisJCXJlbSA9IHVyYi0+YWN0dWFsX2xlbmd0aCAtIGJ1Zi0+cG9zOworCQljbnQgPSByZW0gPiBjb3VudCA/IGNvdW50IDogcmVtOworCisJCWlmIChjb3B5X3RvX3VzZXIoYnVmZmVyLCB1cmItPnRyYW5zZmVyX2J1ZmZlciArIGJ1Zi0+cG9zLAorCQkJCSBjbnQpKSB7CisJCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgInJlYWQ6IGNvcHlfdG9fdXNlciBmYWlsZWRcbiIpOworCQkJaWYgKCFyZXQpCisJCQkJcmV0ID0gLUVGQVVMVDsKKwkJCWdvdG8gZXJyOworCQl9CisKKwkJYnVmLT5wb3MgKz0gY250OworCQljb3VudCAtPSBjbnQ7CisJCWJ1ZmZlciArPSBjbnQ7CisJCXJldCArPSBjbnQ7CisKKwkJLyogZmluaXNoZWQsIHRha2UgbmV4dCBidWZmZXIgKi8KKwkJaWYgKGJ1Zi0+cG9zID09IHVyYi0+YWN0dWFsX2xlbmd0aCkgeworCQkJbXV0ZXhfbG9jaygmZGV2LT5pb19tdXRleCk7CisJCQlidWYtPnBvcyA9IDA7CisJCQlidWYtPnN0YXR1cyA9IEJVRlNUQVRfQVZBSUxBQkxFOworCisJCQlsaXN0X21vdmVfdGFpbCgmYnVmLT5idWZmX2xpc3QsICZkZXYtPmZyZWVfYnVmZl9saXN0KTsKKworCQkJcHJpbnRfYnVmZmVyX3N0YXR1cygpOworCisJCQltdXRleF91bmxvY2soJmRldi0+aW9fbXV0ZXgpOworCisJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJmRldi0+d2FpdF9idWZmZXIpOworCisJCQlidWYgPSBoZHB2cl9nZXRfbmV4dF9idWZmZXIoZGV2KTsKKwkJfQorCX0KK2VycjoKKwlpZiAoIXJldCAmJiAhYnVmKQorCQlyZXQgPSAtRUFHQUlOOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgaGRwdnJfcG9sbChzdHJ1Y3QgZmlsZSAqZmlscCwgcG9sbF90YWJsZSAqd2FpdCkKK3sKKwlzdHJ1Y3QgaGRwdnJfYnVmZmVyICpidWYgPSBOVUxMOworCXN0cnVjdCBoZHB2cl9maCAqZmggPSAoc3RydWN0IGhkcHZyX2ZoICopZmlscC0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGZoLT5kZXY7CisJdW5zaWduZWQgaW50IG1hc2sgPSAwOworCisJbXV0ZXhfbG9jaygmZGV2LT5pb19tdXRleCk7CisKKwlpZiAodmlkZW9faXNfdW5yZWdpc3RlcmVkKGRldi0+dmlkZW9fZGV2KSkKKwkJcmV0dXJuIC1FSU87CisKKwlpZiAoZGV2LT5zdGF0dXMgPT0gU1RBVFVTX0lETEUpIHsKKwkJaWYgKGhkcHZyX3N0YXJ0X3N0cmVhbWluZyhkZXYpKSB7CisJCQl2NGwyX2RiZyhNU0dfQlVGRkVSLCBoZHB2cl9kZWJ1ZywgJmRldi0+djRsMl9kZXYsCisJCQkJICJzdGFydF9zdHJlYW1pbmcgZmFpbGVkXG4iKTsKKwkJCWRldi0+c3RhdHVzID0gU1RBVFVTX0lETEU7CisJCX0KKworCQlwcmludF9idWZmZXJfc3RhdHVzKCk7CisJfQorCW11dGV4X3VubG9jaygmZGV2LT5pb19tdXRleCk7CisKKwlidWYgPSBoZHB2cl9nZXRfbmV4dF9idWZmZXIoZGV2KTsKKwkvKiBvbmx5IHdhaXQgaWYgbm8gZGF0YSBpcyBhdmFpbGFibGUgKi8KKwlpZiAoIWJ1ZiB8fCBidWYtPnN0YXR1cyAhPSBCVUZTVEFUX1JFQURZKSB7CisJCXBvbGxfd2FpdChmaWxwLCAmZGV2LT53YWl0X2RhdGEsIHdhaXQpOworCQlidWYgPSBoZHB2cl9nZXRfbmV4dF9idWZmZXIoZGV2KTsKKwl9CisJaWYgKGJ1ZiAmJiBidWYtPnN0YXR1cyA9PSBCVUZTVEFUX1JFQURZKQorCQltYXNrIHw9IFBPTExJTiB8IFBPTExSRE5PUk07CisKKwlyZXR1cm4gbWFzazsKK30KKworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIGhkcHZyX2ZvcHMgPSB7CisJLm93bmVyCQk9IFRISVNfTU9EVUxFLAorCS5vcGVuCQk9IGhkcHZyX29wZW4sCisJLnJlbGVhc2UJPSBoZHB2cl9yZWxlYXNlLAorCS5yZWFkCQk9IGhkcHZyX3JlYWQsCisJLnBvbGwJCT0gaGRwdnJfcG9sbCwKKwkudW5sb2NrZWRfaW9jdGwJPSB2aWRlb19pb2N0bDIsCit9OworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qCisgKiBWNEwyIGlvY3RsIGhhbmRsaW5nCisgKi8KKworc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAorCQkJICAgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQoreworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwlzdHJjcHkoY2FwLT5kcml2ZXIsICJoZHB2ciIpOworCXN0cmNweShjYXAtPmNhcmQsICJIYXVwYXVnZSBIRCBQVlIiKTsKKwl1c2JfbWFrZV9wYXRoKGRldi0+dWRldiwgY2FwLT5idXNfaW5mbywgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKKwljYXAtPnZlcnNpb24gPSBIRFBWUl9WRVJTSU9OOworCWNhcC0+Y2FwYWJpbGl0aWVzID0gICAgIFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAorCQkJCVY0TDJfQ0FQX0FVRElPICAgICAgICAgfAorCQkJCVY0TDJfQ0FQX1JFQURXUklURTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXZhdGVfZGF0YSwKKwkJCXY0bDJfc3RkX2lkICpzdGQpCit7CisJc3RydWN0IGhkcHZyX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYgPSBmaC0+ZGV2OworCXU4IHN0ZF90eXBlID0gMTsKKworCWlmICgqc3RkICYgKFY0TDJfU1REX05UU0MgfCBWNEwyX1NURF9QQUxfNjApKQorCQlzdGRfdHlwZSA9IDA7CisKKwlyZXR1cm4gaGRwdnJfY29uZmlnX2NhbGwoZGV2LCBDVFJMX1ZJREVPX1NURF9UWVBFLCBzdGRfdHlwZSk7Cit9CisKK3N0YXRpYyBjb25zdCBjaGFyICppbmFtZVtdID0geworCVtIRFBWUl9DT01QT05FTlRdID0gIkNvbXBvbmVudCIsCisJW0hEUFZSX1NWSURFT10gICAgPSAiUy1WaWRlbyIsCisJW0hEUFZSX0NPTVBPU0lURV0gPSAiQ29tcG9zaXRlIiwKK307CisKK3N0YXRpYyBpbnQgdmlkaW9jX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkJc3RydWN0IHY0bDJfaW5wdXQgKmkpCit7CisJc3RydWN0IGhkcHZyX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYgPSBmaC0+ZGV2OworCXVuc2lnbmVkIGludCBuOworCisJbiA9IGktPmluZGV4OworCWlmIChuID49IEhEUFZSX1ZJREVPX0lOUFVUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlpLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKKworCXN0cm5jcHkoaS0+bmFtZSwgaW5hbWVbbl0sIHNpemVvZihpLT5uYW1lKSAtIDEpOworCWktPm5hbWVbc2l6ZW9mKGktPm5hbWUpIC0gMV0gPSAnXDAnOworCisJaS0+YXVkaW9zZXQgPSAxPDxIRFBWUl9SQ0FfRlJPTlQgfCAxPDxIRFBWUl9SQ0FfQkFDSyB8IDE8PEhEUFZSX1NQRElGOworCisJaS0+c3RkID0gZGV2LT52aWRlb19kZXYtPnR2bm9ybXM7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdmF0ZV9kYXRhLAorCQkJICB1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJc3RydWN0IGhkcHZyX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYgPSBmaC0+ZGV2OworCWludCByZXR2YWw7CisKKwlpZiAoaW5kZXggPj0gSERQVlJfVklERU9fSU5QVVRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChkZXYtPnN0YXR1cyAhPSBTVEFUVVNfSURMRSkKKwkJcmV0dXJuIC1FQUdBSU47CisKKwlyZXR2YWwgPSBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfVklERU9fSU5QVVRfVkFMVUUsIGluZGV4KzEpOworCWlmICghcmV0dmFsKQorCQlkZXYtPm9wdGlvbnMudmlkZW9faW5wdXQgPSBpbmRleDsKKworCXJldHVybiByZXR2YWw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXZhdGVfZGF0YSwKKwkJCSAgdW5zaWduZWQgaW50ICppbmRleCkKK3sKKwlzdHJ1Y3QgaGRwdnJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGZoLT5kZXY7CisKKwkqaW5kZXggPSBkZXYtPm9wdGlvbnMudmlkZW9faW5wdXQ7CisJcmV0dXJuIDA7Cit9CisKKworc3RhdGljIGNvbnN0IGNoYXIgKmF1ZGlvX2luYW1lW10gPSB7CisJW0hEUFZSX1JDQV9GUk9OVF0gPSAiUkNBIGZyb250IiwKKwlbSERQVlJfUkNBX0JBQ0tdICA9ICJSQ0EgYmFjayIsCisJW0hEUFZSX1NQRElGXSAgICAgPSAiU1BESUYiLAorfTsKKworc3RhdGljIGludCB2aWRpb2NfZW51bWF1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2F1ZGlvICphdWRpbykKK3sKKwl1bnNpZ25lZCBpbnQgbjsKKworCW4gPSBhdWRpby0+aW5kZXg7CisJaWYgKG4gPj0gSERQVlJfQVVESU9fSU5QVVRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWF1ZGlvLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOworCisJc3RybmNweShhdWRpby0+bmFtZSwgYXVkaW9faW5hbWVbbl0sIHNpemVvZihhdWRpby0+bmFtZSkgLSAxKTsKKwlhdWRpby0+bmFtZVtzaXplb2YoYXVkaW8tPm5hbWUpIC0gMV0gPSAnXDAnOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXZhdGVfZGF0YSwKKwkJCSAgc3RydWN0IHY0bDJfYXVkaW8gKmF1ZGlvKQoreworCXN0cnVjdCBoZHB2cl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gZmgtPmRldjsKKwlpbnQgcmV0dmFsOworCisJaWYgKGF1ZGlvLT5pbmRleCA+PSBIRFBWUl9BVURJT19JTlBVVFMpCisJCXJldHVybiAtRUlOVkFMOworCisJaWYgKGRldi0+c3RhdHVzICE9IFNUQVRVU19JRExFKQorCQlyZXR1cm4gLUVBR0FJTjsKKworCXJldHZhbCA9IGhkcHZyX3NldF9hdWRpbyhkZXYsIGF1ZGlvLT5pbmRleCsxLCBkZXYtPm9wdGlvbnMuYXVkaW9fY29kZWMpOworCWlmICghcmV0dmFsKQorCQlkZXYtPm9wdGlvbnMuYXVkaW9faW5wdXQgPSBhdWRpby0+aW5kZXg7CisKKwlyZXR1cm4gcmV0dmFsOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2YXRlX2RhdGEsCisJCQkgIHN0cnVjdCB2NGwyX2F1ZGlvICphdWRpbykKK3sKKwlzdHJ1Y3QgaGRwdnJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGZoLT5kZXY7CisKKwlhdWRpby0+aW5kZXggPSBkZXYtPm9wdGlvbnMuYXVkaW9faW5wdXQ7CisJYXVkaW8tPmNhcGFiaWxpdHkgPSBWNEwyX0FVRENBUF9TVEVSRU87CisJc3RybmNweShhdWRpby0+bmFtZSwgYXVkaW9faW5hbWVbYXVkaW8tPmluZGV4XSwgc2l6ZW9mKGF1ZGlvLT5uYW1lKSk7CisJYXVkaW8tPm5hbWVbc2l6ZW9mKGF1ZGlvLT5uYW1lKSAtIDFdID0gJ1wwJzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGNvbnN0IHMzMiBzdXBwb3J0ZWRfdjRsMl9jdHJsc1tdID0geworCVY0TDJfQ0lEX0JSSUdIVE5FU1MsCisJVjRMMl9DSURfQ09OVFJBU1QsCisJVjRMMl9DSURfU0FUVVJBVElPTiwKKwlWNEwyX0NJRF9IVUUsCisJVjRMMl9DSURfU0hBUlBORVNTLAorCVY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkcsCisJVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORywKKwlWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERSwKKwlWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEUsCisJVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUssCit9OworCitzdGF0aWMgaW50IGZpbGxfcXVlcnljdHJsKHN0cnVjdCBoZHB2cl9vcHRpb25zICpvcHQsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMsCisJCQkgIGludCBhYzMpCit7CisJaW50IGVycjsKKworCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDB4MCwgMHhmZiwgMSwgMHg4Nik7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAweDAsIDB4ZmYsIDEsIDB4ODApOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAweDAsIDB4ZmYsIDEsIDB4ODApOworCWNhc2UgVjRMMl9DSURfSFVFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDB4MCwgMHhmZiwgMSwgMHg4MCk7CisJY2FzZSBWNEwyX0NJRF9TSEFSUE5FU1M6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMHgwLCAweGZmLCAxLCAweDgwKTsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkc6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbCgKKwkJCXFjLCBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUFDLAorCQkJYWMzID8gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FDMworCQkJOiBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUFDLAorCQkJMSwgVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FBQyk7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0VOQ09ESU5HOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwoCisJCQlxYywgVjRMMl9NUEVHX1ZJREVPX0VOQ09ESU5HX01QRUdfNF9BVkMsCisJCQlWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR180X0FWQywgMSwKKwkJCVY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzRfQVZDKTsKKworLyogCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT18/IG1heWJlIGtleWZyYW1lIGludGVydmFsOiAqLworLyogCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEyOCwgMTI4LCAwKTsgKi8KKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwoCisJCQlxYywgVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9WQlIsCisJCQlWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX0NCUiwgMSwKKwkJCVY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfQ0JSKTsKKworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDEwMDAwMDAsIDEzNTAwMDAwLCAxMDAwMDAsCisJCQkJCSAgICA2NTAwMDAwKTsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9QRUFLOgorCQllcnIgPSB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMTEwMDAwMCwgMjAyMDAwMDAsIDEwMDAwMCwKKwkJCQkJICAgOTAwMDAwMCk7CisJCWlmICghZXJyICYmIG9wdC0+Yml0cmF0ZV9tb2RlID09IEhEUFZSX0NPTlNUQU5UKQorCQkJcWMtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX0lOQUNUSVZFOworCQlyZXR1cm4gZXJyOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIGludCB2aWRpb2NfcXVlcnljdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2YXRlX2RhdGEsCisJCQkgICAgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlzdHJ1Y3QgaGRwdnJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGZoLT5kZXY7CisJaW50IGksIG5leHQ7CisJdTMyIGlkID0gcWMtPmlkOworCisJbWVtc2V0KHFjLCAwLCBzaXplb2YoKnFjKSk7CisKKwluZXh0ID0gISEoaWQgJiAgVjRMMl9DVFJMX0ZMQUdfTkVYVF9DVFJMKTsKKwlxYy0+aWQgPSBpZCAmIH5WNEwyX0NUUkxfRkxBR19ORVhUX0NUUkw7CisKKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShzdXBwb3J0ZWRfdjRsMl9jdHJscyk7IGkrKykgeworCQlpZiAobmV4dCkgeworCQkJaWYgKHFjLT5pZCA8IHN1cHBvcnRlZF92NGwyX2N0cmxzW2ldKQorCQkJCXFjLT5pZCA9IHN1cHBvcnRlZF92NGwyX2N0cmxzW2ldOworCQkJZWxzZQorCQkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHFjLT5pZCA9PSBzdXBwb3J0ZWRfdjRsMl9jdHJsc1tpXSkKKwkJCXJldHVybiBmaWxsX3F1ZXJ5Y3RybCgmZGV2LT5vcHRpb25zLCBxYywKKwkJCQkJICAgICAgZGV2LT5mbGFncyAmIEhEUFZSX0ZMQUdfQUMzX0NBUCk7CisKKwkJaWYgKHFjLT5pZCA8IHN1cHBvcnRlZF92NGwyX2N0cmxzW2ldKQorCQkJYnJlYWs7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdmF0ZV9kYXRhLAorCQkJIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IGhkcHZyX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYgPSBmaC0+ZGV2OworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJY3RybC0+dmFsdWUgPSBkZXYtPm9wdGlvbnMuYnJpZ2h0bmVzczsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJY3RybC0+dmFsdWUgPSBkZXYtPm9wdGlvbnMuY29udHJhc3Q7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJY3RybC0+dmFsdWUgPSBkZXYtPm9wdGlvbnMuc2F0dXJhdGlvbjsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJCWN0cmwtPnZhbHVlID0gZGV2LT5vcHRpb25zLmh1ZTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9TSEFSUE5FU1M6CisJCWN0cmwtPnZhbHVlID0gZGV2LT5vcHRpb25zLnNoYXJwbmVzczsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXZhdGVfZGF0YSwKKwkJCSBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBoZHB2cl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gZmgtPmRldjsKKwlpbnQgcmV0dmFsOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJcmV0dmFsID0gaGRwdnJfY29uZmlnX2NhbGwoZGV2LCBDVFJMX0JSSUdIVE5FU1MsIGN0cmwtPnZhbHVlKTsKKwkJaWYgKCFyZXR2YWwpCisJCQlkZXYtPm9wdGlvbnMuYnJpZ2h0bmVzcyA9IGN0cmwtPnZhbHVlOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQlyZXR2YWwgPSBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfQ09OVFJBU1QsIGN0cmwtPnZhbHVlKTsKKwkJaWYgKCFyZXR2YWwpCisJCQlkZXYtPm9wdGlvbnMuY29udHJhc3QgPSBjdHJsLT52YWx1ZTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQlyZXR2YWwgPSBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfU0FUVVJBVElPTiwgY3RybC0+dmFsdWUpOworCQlpZiAoIXJldHZhbCkKKwkJCWRldi0+b3B0aW9ucy5zYXR1cmF0aW9uID0gY3RybC0+dmFsdWU7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfSFVFOgorCQlyZXR2YWwgPSBoZHB2cl9jb25maWdfY2FsbChkZXYsIENUUkxfSFVFLCBjdHJsLT52YWx1ZSk7CisJCWlmICghcmV0dmFsKQorCQkJZGV2LT5vcHRpb25zLmh1ZSA9IGN0cmwtPnZhbHVlOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1NIQVJQTkVTUzoKKwkJcmV0dmFsID0gaGRwdnJfY29uZmlnX2NhbGwoZGV2LCBDVFJMX1NIQVJQTkVTUywgY3RybC0+dmFsdWUpOworCQlpZiAoIXJldHZhbCkKKwkJCWRldi0+b3B0aW9ucy5zaGFycG5lc3MgPSBjdHJsLT52YWx1ZTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJldHZhbDsKK30KKworCitzdGF0aWMgaW50IGhkcHZyX2dldF9jdHJsKHN0cnVjdCBoZHB2cl9vcHRpb25zICpvcHQsCisJCQkgIHN0cnVjdCB2NGwyX2V4dF9jb250cm9sICpjdHJsKQoreworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU5DT0RJTkc6CisJCWN0cmwtPnZhbHVlID0gb3B0LT5hdWRpb19jb2RlYzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0VOQ09ESU5HOgorCQljdHJsLT52YWx1ZSA9IFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzRfQVZDOworCQlicmVhazsKKy8qIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQl9GUkFNRVM6ICovCisvKiAJCWN0cmwtPnZhbHVlID0gKG9wdC0+Z29wX21vZGUgJiAweDIpID8gMCA6IDEyODsgKi8KKy8qIAkJYnJlYWs7ICovCisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERToKKwkJY3RybC0+dmFsdWUgPSBvcHQtPmJpdHJhdGVfbW9kZSA9PSBIRFBWUl9DT05TVEFOVAorCQkJPyBWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX0NCUgorCQkJOiBWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX1ZCUjsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEU6CisJCWN0cmwtPnZhbHVlID0gb3B0LT5iaXRyYXRlICogMTAwMDAwOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9QRUFLOgorCQljdHJsLT52YWx1ZSA9IG9wdC0+cGVha19iaXRyYXRlICogMTAwMDAwOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEU6CisJCWN0cmwtPnZhbHVlID0gVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1RTOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZXh0X2N0cmxzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJICAgICAgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjdHJscykKK3sKKwlzdHJ1Y3QgaGRwdnJfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiA9IGZoLT5kZXY7CisJaW50IGksIGVyciA9IDA7CisKKwlpZiAoY3RybHMtPmN0cmxfY2xhc3MgPT0gVjRMMl9DVFJMX0NMQVNTX01QRUcpIHsKKwkJZm9yIChpID0gMDsgaSA8IGN0cmxzLT5jb3VudDsgaSsrKSB7CisJCQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbCAqY3RybCA9IGN0cmxzLT5jb250cm9scyArIGk7CisKKwkJCWVyciA9IGhkcHZyX2dldF9jdHJsKCZkZXYtPm9wdGlvbnMsIGN0cmwpOworCQkJaWYgKGVycikgeworCQkJCWN0cmxzLT5lcnJvcl9pZHggPSBpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXJldHVybiBlcnI7CisKKwl9CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworCitzdGF0aWMgaW50IGhkcHZyX3RyeV9jdHJsKHN0cnVjdCB2NGwyX2V4dF9jb250cm9sICpjdHJsLCBpbnQgYWMzKQoreworCWludCByZXQgPSAtRUlOVkFMOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzoKKwkJaWYgKGN0cmwtPnZhbHVlID09IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQUMgfHwKKwkJICAgIChhYzMgJiYgY3RybC0+dmFsdWUgPT0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FDMykpCisJCQlyZXQgPSAwOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkc6CisJCWlmIChjdHJsLT52YWx1ZSA9PSBWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR180X0FWQykKKwkJCXJldCA9IDA7CisJCWJyZWFrOworLyogCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CX0ZSQU1FUzogKi8KKy8qIAkJaWYgKGN0cmwtPnZhbHVlID09IDAgfHwgY3RybC0+dmFsdWUgPT0gMTI4KSAqLworLyogCQkJcmV0ID0gMDsgKi8KKy8qIAkJYnJlYWs7ICovCisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERToKKwkJaWYgKGN0cmwtPnZhbHVlID09IFY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfQ0JSIHx8CisJCSAgICBjdHJsLT52YWx1ZSA9PSBWNEwyX01QRUdfVklERU9fQklUUkFURV9NT0RFX1ZCUikKKwkJCXJldCA9IDA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFOgorCXsKKwkJdWludCBiaXRyYXRlID0gY3RybC0+dmFsdWUgLyAxMDAwMDA7CisJCWlmIChiaXRyYXRlID49IDEwICYmIGJpdHJhdGUgPD0gMTM1KQorCQkJcmV0ID0gMDsKKwkJYnJlYWs7CisJfQorCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUs6CisJeworCQl1aW50IHBlYWtfYml0cmF0ZSA9IGN0cmwtPnZhbHVlIC8gMTAwMDAwOworCQlpZiAocGVha19iaXRyYXRlID49IDEwICYmIHBlYWtfYml0cmF0ZSA8PSAyMDIpCisJCQlyZXQgPSAwOworCQlicmVhazsKKwl9CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFOgorCQlpZiAoY3RybC0+dmFsdWUgPT0gVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1RTKQorCQkJcmV0ID0gMDsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY190cnlfZXh0X2N0cmxzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3RybHMpCit7CisJc3RydWN0IGhkcHZyX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYgPSBmaC0+ZGV2OworCWludCBpLCBlcnIgPSAwOworCisJaWYgKGN0cmxzLT5jdHJsX2NsYXNzID09IFY0TDJfQ1RSTF9DTEFTU19NUEVHKSB7CisJCWZvciAoaSA9IDA7IGkgPCBjdHJscy0+Y291bnQ7IGkrKykgeworCQkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmN0cmwgPSBjdHJscy0+Y29udHJvbHMgKyBpOworCisJCQllcnIgPSBoZHB2cl90cnlfY3RybChjdHJsLAorCQkJCQkgICAgIGRldi0+ZmxhZ3MgJiBIRFBWUl9GTEFHX0FDM19DQVApOworCQkJaWYgKGVycikgeworCQkJCWN0cmxzLT5lcnJvcl9pZHggPSBpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisJCXJldHVybiBlcnI7CisJfQorCisJcmV0dXJuIC1FSU5WQUw7Cit9CisKKworc3RhdGljIGludCBoZHB2cl9zZXRfY3RybChzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYsCisJCQkgIHN0cnVjdCB2NGwyX2V4dF9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBoZHB2cl9vcHRpb25zICpvcHQgPSAmZGV2LT5vcHRpb25zOworCWludCByZXQgPSAwOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzoKKwkJaWYgKGRldi0+ZmxhZ3MgJiBIRFBWUl9GTEFHX0FDM19DQVApIHsKKwkJCW9wdC0+YXVkaW9fY29kZWMgPSBjdHJsLT52YWx1ZTsKKwkJCXJldCA9IGhkcHZyX3NldF9hdWRpbyhkZXYsIG9wdC0+YXVkaW9faW5wdXQsCisJCQkJCSAgICAgIG9wdC0+YXVkaW9fY29kZWMpOworCQl9CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19FTkNPRElORzoKKwkJYnJlYWs7CisvKiAJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JfRlJBTUVTOiAqLworLyogCQlpZiAoY3RybC0+dmFsdWUgPT0gMCAmJiAhKG9wdC0+Z29wX21vZGUgJiAweDIpKSB7ICovCisvKiAJCQlvcHQtPmdvcF9tb2RlIHw9IDB4MjsgKi8KKy8qIAkJCWhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9HT1BfTU9ERV9WQUxVRSwgKi8KKy8qIAkJCQkJICBvcHQtPmdvcF9tb2RlKTsgKi8KKy8qIAkJfSAqLworLyogCQlpZiAoY3RybC0+dmFsdWUgPT0gMTI4ICYmIG9wdC0+Z29wX21vZGUgJiAweDIpIHsgKi8KKy8qIAkJCW9wdC0+Z29wX21vZGUgJj0gfjB4MjsgKi8KKy8qIAkJCWhkcHZyX2NvbmZpZ19jYWxsKGRldiwgQ1RSTF9HT1BfTU9ERV9WQUxVRSwgKi8KKy8qIAkJCQkJICBvcHQtPmdvcF9tb2RlKTsgKi8KKy8qIAkJfSAqLworLyogCQlicmVhazsgKi8KKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFOgorCQlpZiAoY3RybC0+dmFsdWUgPT0gVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9DQlIgJiYKKwkJICAgIG9wdC0+Yml0cmF0ZV9tb2RlICE9IEhEUFZSX0NPTlNUQU5UKSB7CisJCQlvcHQtPmJpdHJhdGVfbW9kZSA9IEhEUFZSX0NPTlNUQU5UOworCQkJaGRwdnJfY29uZmlnX2NhbGwoZGV2LCBDVFJMX0JJVFJBVEVfTU9ERV9WQUxVRSwKKwkJCQkJICBvcHQtPmJpdHJhdGVfbW9kZSk7CisJCX0KKwkJaWYgKGN0cmwtPnZhbHVlID09IFY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSICYmCisJCSAgICBvcHQtPmJpdHJhdGVfbW9kZSA9PSBIRFBWUl9DT05TVEFOVCkgeworCQkJb3B0LT5iaXRyYXRlX21vZGUgPSBIRFBWUl9WQVJJQUJMRV9BVkVSQUdFOworCQkJaGRwdnJfY29uZmlnX2NhbGwoZGV2LCBDVFJMX0JJVFJBVEVfTU9ERV9WQUxVRSwKKwkJCQkJICBvcHQtPmJpdHJhdGVfbW9kZSk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEU6IHsKKwkJdWludCBiaXRyYXRlID0gY3RybC0+dmFsdWUgLyAxMDAwMDA7CisKKwkJb3B0LT5iaXRyYXRlID0gYml0cmF0ZTsKKwkJaWYgKGJpdHJhdGUgPj0gb3B0LT5wZWFrX2JpdHJhdGUpCisJCQlvcHQtPnBlYWtfYml0cmF0ZSA9IGJpdHJhdGUrMTsKKworCQloZHB2cl9zZXRfYml0cmF0ZShkZXYpOworCQlicmVhazsKKwl9CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfUEVBSzogeworCQl1aW50IHBlYWtfYml0cmF0ZSA9IGN0cmwtPnZhbHVlIC8gMTAwMDAwOworCisJCWlmIChvcHQtPmJpdHJhdGVfbW9kZSA9PSBIRFBWUl9DT05TVEFOVCkKKwkJCWJyZWFrOworCisJCWlmIChvcHQtPmJpdHJhdGUgPCBwZWFrX2JpdHJhdGUpIHsKKwkJCW9wdC0+cGVha19iaXRyYXRlID0gcGVha19iaXRyYXRlOworCQkJaGRwdnJfc2V0X2JpdHJhdGUoZGV2KTsKKwkJfSBlbHNlCisJCQlyZXQgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFOgorCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19leHRfY3RybHMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmN0cmxzKQoreworCXN0cnVjdCBoZHB2cl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gZmgtPmRldjsKKwlpbnQgaSwgZXJyID0gMDsKKworCWlmIChjdHJscy0+Y3RybF9jbGFzcyA9PSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykgeworCQlmb3IgKGkgPSAwOyBpIDwgY3RybHMtPmNvdW50OyBpKyspIHsKKwkJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9sICpjdHJsID0gY3RybHMtPmNvbnRyb2xzICsgaTsKKworCQkJZXJyID0gaGRwdnJfdHJ5X2N0cmwoY3RybCwKKwkJCQkJICAgICBkZXYtPmZsYWdzICYgSERQVlJfRkxBR19BQzNfQ0FQKTsKKwkJCWlmIChlcnIpIHsKKwkJCQljdHJscy0+ZXJyb3JfaWR4ID0gaTsKKwkJCQlicmVhazsKKwkJCX0KKwkJCWVyciA9IGhkcHZyX3NldF9jdHJsKGRldiwgY3RybCk7CisJCQlpZiAoZXJyKSB7CisJCQkJY3RybHMtPmVycm9yX2lkeCA9IGk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwkJcmV0dXJuIGVycjsKKworCX0KKworCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2YXRlX2RhdGEsCisJCQkJICAgIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCit7CisKKwlpZiAoZi0+aW5kZXggIT0gMCB8fCBmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlmLT5mbGFncyA9IFY0TDJfRk1UX0ZMQUdfQ09NUFJFU1NFRDsKKwlzdHJuY3B5KGYtPmRlc2NyaXB0aW9uLCAiTVBFRzItVFMgd2l0aCBBVkMvQUFDIHN0cmVhbXMiLCAzMik7CisJZi0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfTVBFRzsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2YXRlX2RhdGEsCisJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBoZHB2cl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3QgaGRwdnJfdmlkZW9faW5mbyAqdmlkX2luZm87CisKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwl2aWRfaW5mbyA9IGdldF92aWRlb19pbmZvKGRldik7CisJaWYgKCF2aWRfaW5mbykKKwkJcmV0dXJuIC1FRkFVTFQ7CisKKwlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQJPSBWNEwyX1BJWF9GTVRfTVBFRzsKKwlmLT5mbXQucGl4LndpZHRoCT0gdmlkX2luZm8tPndpZHRoOworCWYtPmZtdC5waXguaGVpZ2h0CT0gdmlkX2luZm8tPmhlaWdodDsKKwlmLT5mbXQucGl4LnNpemVpbWFnZQk9IGRldi0+YnVsa19pbl9zaXplOworCWYtPmZtdC5waXguY29sb3JzcGFjZQk9IDA7CisJZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmUJPSAwOworCWYtPmZtdC5waXguZmllbGQJPSBWNEwyX0ZJRUxEX0FOWTsKKworCWtmcmVlKHZpZF9pbmZvKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZW5jb2Rlcl9jbWQoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKnByaXYsCisJCQkgICAgICAgc3RydWN0IHY0bDJfZW5jb2Rlcl9jbWQgKmEpCit7CisJc3RydWN0IGhkcHZyX2ZoICpmaCA9IGZpbHAtPnByaXZhdGVfZGF0YTsKKwlzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYgPSBmaC0+ZGV2OworCWludCByZXM7CisKKwltdXRleF9sb2NrKCZkZXYtPmlvX211dGV4KTsKKworCW1lbXNldCgmYS0+cmF3LCAwLCBzaXplb2YoYS0+cmF3KSk7CisJc3dpdGNoIChhLT5jbWQpIHsKKwljYXNlIFY0TDJfRU5DX0NNRF9TVEFSVDoKKwkJYS0+ZmxhZ3MgPSAwOworCQlyZXMgPSBoZHB2cl9zdGFydF9zdHJlYW1pbmcoZGV2KTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0VOQ19DTURfU1RPUDoKKwkJcmVzID0gaGRwdnJfc3RvcF9zdHJlYW1pbmcoZGV2KTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJdjRsMl9kYmcoTVNHX0lORk8sIGhkcHZyX2RlYnVnLCAmZGV2LT52NGwyX2RldiwKKwkJCSAiVW5zdXBwb3J0ZWQgZW5jb2RlciBjbWQgJWRcbiIsIGEtPmNtZCk7CisJCXJlcyA9IC1FSU5WQUw7CisJfQorCW11dGV4X3VubG9jaygmZGV2LT5pb19tdXRleCk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCB2aWRpb2NfdHJ5X2VuY29kZXJfY21kKHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9lbmNvZGVyX2NtZCAqYSkKK3sKKwlzd2l0Y2ggKGEtPmNtZCkgeworCWNhc2UgVjRMMl9FTkNfQ01EX1NUQVJUOgorCWNhc2UgVjRMMl9FTkNfQ01EX1NUT1A6CisJCXJldHVybiAwOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyBoZHB2cl9pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcAk9IHZpZGlvY19xdWVyeWNhcCwKKwkudmlkaW9jX3Nfc3RkCQk9IHZpZGlvY19zX3N0ZCwKKwkudmlkaW9jX2VudW1faW5wdXQJPSB2aWRpb2NfZW51bV9pbnB1dCwKKwkudmlkaW9jX2dfaW5wdXQJCT0gdmlkaW9jX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0CQk9IHZpZGlvY19zX2lucHV0LAorCS52aWRpb2NfZW51bWF1ZGlvCT0gdmlkaW9jX2VudW1hdWRpbywKKwkudmlkaW9jX2dfYXVkaW8JCT0gdmlkaW9jX2dfYXVkaW8sCisJLnZpZGlvY19zX2F1ZGlvCQk9IHZpZGlvY19zX2F1ZGlvLAorCS52aWRpb2NfcXVlcnljdHJsCT0gdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX2dfY3RybAkJPSB2aWRpb2NfZ19jdHJsLAorCS52aWRpb2Nfc19jdHJsCQk9IHZpZGlvY19zX2N0cmwsCisJLnZpZGlvY19nX2V4dF9jdHJscwk9IHZpZGlvY19nX2V4dF9jdHJscywKKwkudmlkaW9jX3NfZXh0X2N0cmxzCT0gdmlkaW9jX3NfZXh0X2N0cmxzLAorCS52aWRpb2NfdHJ5X2V4dF9jdHJscwk9IHZpZGlvY190cnlfZXh0X2N0cmxzLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX2NhcAk9IHZpZGlvY19lbnVtX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZ19mbXRfdmlkX2NhcAkJPSB2aWRpb2NfZ19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX2VuY29kZXJfY21kCT0gdmlkaW9jX2VuY29kZXJfY21kLAorCS52aWRpb2NfdHJ5X2VuY29kZXJfY21kCT0gdmlkaW9jX3RyeV9lbmNvZGVyX2NtZCwKK307CisKK3N0YXRpYyB2b2lkIGhkcHZyX2RldmljZV9yZWxlYXNlKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYpCit7CisJc3RydWN0IGhkcHZyX2RldmljZSAqZGV2ID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CisKKwloZHB2cl9kZWxldGUoZGV2KTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2aWRlb19kZXZpY2UgaGRwdnJfdmlkZW9fdGVtcGxhdGUgPSB7CisvKiAJLnR5cGUJCQk9IFZGTF9UWVBFX0dSQUJCRVIsICovCisvKiAJLnR5cGUyCQkJPSBWSURfVFlQRV9DQVBUVVJFIHwgVklEX1RZUEVfTVBFR19FTkNPREVSLCAqLworCS5mb3BzCQkJPSAmaGRwdnJfZm9wcywKKwkucmVsZWFzZQkJPSBoZHB2cl9kZXZpY2VfcmVsZWFzZSwKKwkuaW9jdGxfb3BzIAkJPSAmaGRwdnJfaW9jdGxfb3BzLAorCS50dm5vcm1zIAkJPQorCQlWNEwyX1NURF9OVFNDICB8IFY0TDJfU1REX1NFQ0FNIHwgVjRMMl9TVERfUEFMX0IgfAorCQlWNEwyX1NURF9QQUxfRyB8IFY0TDJfU1REX1BBTF9IIHwgVjRMMl9TVERfUEFMX0kgfAorCQlWNEwyX1NURF9QQUxfRCB8IFY0TDJfU1REX1BBTF9NIHwgVjRMMl9TVERfUEFMX04gfAorCQlWNEwyX1NURF9QQUxfNjAsCit9OworCitpbnQgaGRwdnJfcmVnaXN0ZXJfdmlkZW9kZXYoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2LCBzdHJ1Y3QgZGV2aWNlICpwYXJlbnQsCisJCQkgICAgaW50IGRldm51bSkKK3sKKwkvKiBzZXR1cCBhbmQgcmVnaXN0ZXIgdmlkZW8gZGV2aWNlICovCisJZGV2LT52aWRlb19kZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAoIWRldi0+dmlkZW9fZGV2KSB7CisJCXY0bDJfZXJyKCZkZXYtPnY0bDJfZGV2LCAidmlkZW9fZGV2aWNlX2FsbG9jKCkgZmFpbGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwkqKGRldi0+dmlkZW9fZGV2KSA9IGhkcHZyX3ZpZGVvX3RlbXBsYXRlOworCXN0cmNweShkZXYtPnZpZGVvX2Rldi0+bmFtZSwgIkhhdXBwYXVnZSBIRCBQVlIiKTsKKwlkZXYtPnZpZGVvX2Rldi0+cGFyZW50ID0gcGFyZW50OworCXZpZGVvX3NldF9kcnZkYXRhKGRldi0+dmlkZW9fZGV2LCBkZXYpOworCisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShkZXYtPnZpZGVvX2RldiwgVkZMX1RZUEVfR1JBQkJFUiwgZGV2bnVtKSkgeworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgInZpZGVvX2RldmljZSByZWdpc3RyYXRpb24gZmFpbGVkXG4iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwlyZXR1cm4gMDsKK2Vycm9yOgorCXJldHVybiAtRU5PTUVNOworfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZHB2ci9oZHB2ci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFlZGQ4NzUKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hkcHZyL2hkcHZyLmgKQEAgLTAsMCArMSwzMDMgQEAKKy8qCisgKiBIYXVwcGF1Z2UgSEQgUFZSIFVTQiBkcml2ZXIKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggICAgICBKYW5uZSBHcnVuYXUgKGpAamFubmF1Lm5ldCkKKyAqCisgKglUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKgltb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcworICoJcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIHZlcnNpb24gMi4KKyAqCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L3VzYi5oPgorI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CisjaW5jbHVkZSA8bGludXgvd29ya3F1ZXVlLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorCisjZGVmaW5lIEhEUFZSX01BSk9SX1ZFUlNJT04gMAorI2RlZmluZSBIRFBWUl9NSU5PUl9WRVJTSU9OIDIKKyNkZWZpbmUgSERQVlJfUkVMRUFTRSAwCisjZGVmaW5lIEhEUFZSX1ZFUlNJT04gXAorCUtFUk5FTF9WRVJTSU9OKEhEUFZSX01BSk9SX1ZFUlNJT04sIEhEUFZSX01JTk9SX1ZFUlNJT04sIEhEUFZSX1JFTEVBU0UpCisKKyNkZWZpbmUgSERQVlJfTUFYIDgKKworLyogRGVmaW5lIHRoZXNlIHZhbHVlcyB0byBtYXRjaCB5b3VyIGRldmljZXMgKi8KKyNkZWZpbmUgSERfUFZSX1ZFTkRPUl9JRAkweDIwNDAKKyNkZWZpbmUgSERfUFZSX1BST0RVQ1RfSUQJMHg0OTAwCisjZGVmaW5lIEhEX1BWUl9QUk9EVUNUX0lEMQkweDQ5MDEKKyNkZWZpbmUgSERfUFZSX1BST0RVQ1RfSUQyCTB4NDkwMgorCisjZGVmaW5lIFVOU0VUICAgICgtMVUpCisKKyNkZWZpbmUgTlVNX0JVRkZFUlMgNjQKKworI2RlZmluZSBIRFBWUl9GSVJNV0FSRV9WRVJTSU9OCQkweDgKKyNkZWZpbmUgSERQVlJfRklSTVdBUkVfVkVSU0lPTl9BQzMJMHhkCisKKy8qICNkZWZpbmUgSERQVlJfREVCVUcgKi8KKworZXh0ZXJuIGludCBoZHB2cl9kZWJ1ZzsKKworI2RlZmluZSBNU0dfSU5GTwkxCisjZGVmaW5lIE1TR19CVUZGRVIJMgorCitzdHJ1Y3QgaGRwdnJfb3B0aW9ucyB7CisJdTgJdmlkZW9fc3RkOworCXU4CXZpZGVvX2lucHV0OworCXU4CWF1ZGlvX2lucHV0OworCXU4CWJpdHJhdGU7CS8qIGluIDEwMGticHMgKi8KKwl1OAlwZWFrX2JpdHJhdGU7CS8qIGluIDEwMGticHMgKi8KKwl1OAliaXRyYXRlX21vZGU7CisJdTgJZ29wX21vZGU7CisJZW51bSB2NGwyX21wZWdfYXVkaW9fZW5jb2RpbmcJYXVkaW9fY29kZWM7CisJdTgJYnJpZ2h0bmVzczsKKwl1OAljb250cmFzdDsKKwl1OAlodWU7CisJdTgJc2F0dXJhdGlvbjsKKwl1OAlzaGFycG5lc3M7Cit9OworCisvKiBTdHJ1Y3R1cmUgdG8gaG9sZCBhbGwgb2Ygb3VyIGRldmljZSBzcGVjaWZpYyBzdHVmZiAqLworc3RydWN0IGhkcHZyX2RldmljZSB7CisJLyogdGhlIHY0bCBkZXZpY2UgZm9yIHRoaXMgZGV2aWNlICovCisJc3RydWN0IHZpZGVvX2RldmljZQkqdmlkZW9fZGV2OworCS8qIHRoZSB1c2IgZGV2aWNlIGZvciB0aGlzIGRldmljZSAqLworCXN0cnVjdCB1c2JfZGV2aWNlCSp1ZGV2OworCS8qIHY0bDItZGV2aWNlIHVudXNlZCAqLworCXN0cnVjdCB2NGwyX2RldmljZQl2NGwyX2RldjsKKworCS8qIHRoZSBtYXggcGFja2V0IHNpemUgb2YgdGhlIGJ1bGsgZW5kcG9pbnQgKi8KKwlzaXplX3QJCQlidWxrX2luX3NpemU7CisJLyogdGhlIGFkZHJlc3Mgb2YgdGhlIGJ1bGsgaW4gZW5kcG9pbnQgKi8KKwlfX3U4CQkJYnVsa19pbl9lbmRwb2ludEFkZHI7CisKKwkvKiBob2xkcyB0aGUgY3VycmVudCBkZXZpY2Ugc3RhdHVzICovCisJX191OAkJCXN0YXR1czsKKwkvKiBjb3VudCB0aGUgbnVtYmVyIG9mIG9wZW5lcnMgKi8KKwl1aW50CQkJb3Blbl9jb3VudDsKKworCS8qIGhvbGRzIHRoZSBjdXJlZW50IHNldCBvcHRpb25zICovCisJc3RydWN0IGhkcHZyX29wdGlvbnMJb3B0aW9uczsKKworCXVpbnQJCQlmbGFnczsKKworCS8qIHN5bmNocm9uaXplIEkvTyAqLworCXN0cnVjdCBtdXRleAkJaW9fbXV0ZXg7CisJLyogYXZhaWxhYmxlIGJ1ZmZlcnMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCWZyZWVfYnVmZl9saXN0OworCS8qIGluIHByb2dyZXNzIGJ1ZmZlcnMgKi8KKwlzdHJ1Y3QgbGlzdF9oZWFkCXJlY19idWZmX2xpc3Q7CisJLyogd2FpdHF1ZXVlIGZvciBidWZmZXJzICovCisJd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdF9idWZmZXI7CisJLyogd2FpdHF1ZXVlIGZvciBkYXRhICovCisJd2FpdF9xdWV1ZV9oZWFkX3QJd2FpdF9kYXRhOworCS8qKi8KKwlzdHJ1Y3Qgd29ya3F1ZXVlX3N0cnVjdAkqd29ya3F1ZXVlOworCS8qKi8KKwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29ya2VyOworCisJLyogSTJDIGFkYXB0ZXIgKi8KKwlzdHJ1Y3QgaTJjX2FkYXB0ZXIJKmkyY19hZGFwdGVyOworCS8qIEkyQyBsb2NrICovCisJc3RydWN0IG11dGV4CQlpMmNfbXV0ZXg7CisKKwkvKiB1c2IgY29udHJvbCB0cmFuc2ZlciBidWZmZXIgYW5kIGxvY2sgKi8KKwlzdHJ1Y3QgbXV0ZXgJCXVzYmNfbXV0ZXg7CisJdTgJCQkqdXNiY19idWY7Cit9OworCisKKy8qIGJ1ZmZlciBvbmUgYnVsayB1cmIgb2YgZGF0YSAqLworc3RydWN0IGhkcHZyX2J1ZmZlciB7CisJc3RydWN0IGxpc3RfaGVhZAlidWZmX2xpc3Q7CisKKwlzdHJ1Y3QgdXJiCQkqdXJiOworCisJc3RydWN0IGhkcHZyX2RldmljZQkqZGV2OworCisJdWludAkJCXBvczsKKworCV9fdTgJCQlzdGF0dXM7Cit9OworCisvKiAqLworCitzdHJ1Y3QgaGRwdnJfdmlkZW9faW5mbyB7CisJdTE2CXdpZHRoOworCXUxNgloZWlnaHQ7CisJdTgJZnBzOworfTsKKworZW51bSB7CisJU1RBVFVTX1VOSU5JVElBTElaRUQJPSAwLAorCVNUQVRVU19JRExFLAorCVNUQVRVU19TVEFSVElORywKKwlTVEFUVVNfU0hVVFRJTkdfRE9XTiwKKwlTVEFUVVNfU1RSRUFNSU5HLAorCVNUQVRVU19FUlJPUiwKKwlTVEFUVVNfRElTQ09OTkVDVEVELAorfTsKKworZW51bSB7CisJSERQVlJfRkxBR19BQzNfQ0FQID0gMSwKK307CisKK2VudW0geworCUJVRlNUQVRfVU5JTklUSUFMSVpFRCA9IDAsCisJQlVGU1RBVF9BVkFJTEFCTEUsCisJQlVGU1RBVF9JTlBST0dSRVNTLAorCUJVRlNUQVRfUkVBRFksCit9OworCisjZGVmaW5lIENUUkxfU1RBUlRfU1RSRUFNSU5HX1ZBTFVFCTB4MDcwMAorI2RlZmluZSBDVFJMX1NUT1BfU1RSRUFNSU5HX1ZBTFVFCTB4MDgwMAorI2RlZmluZSBDVFJMX0JJVFJBVEVfVkFMVUUJCTB4MTAwMAorI2RlZmluZSBDVFJMX0JJVFJBVEVfTU9ERV9WQUxVRQkJMHgxMjAwCisjZGVmaW5lIENUUkxfR09QX01PREVfVkFMVUUJCTB4MTMwMAorI2RlZmluZSBDVFJMX1ZJREVPX0lOUFVUX1ZBTFVFCQkweDE1MDAKKyNkZWZpbmUgQ1RSTF9WSURFT19TVERfVFlQRQkJMHgxNzAwCisjZGVmaW5lIENUUkxfQVVESU9fSU5QVVRfVkFMVUUJCTB4MjUwMAorI2RlZmluZSBDVFJMX0JSSUdIVE5FU1MJCQkweDI5MDAKKyNkZWZpbmUgQ1RSTF9DT05UUkFTVAkJCTB4MmEwMAorI2RlZmluZSBDVFJMX0hVRQkJCTB4MmIwMAorI2RlZmluZSBDVFJMX1NBVFVSQVRJT04JCQkweDJjMDAKKyNkZWZpbmUgQ1RSTF9TSEFSUE5FU1MJCQkweDJkMDAKKyNkZWZpbmUgQ1RSTF9MT1dfUEFTU19GSUxURVJfVkFMVUUJMHgzMTAwCisKKyNkZWZpbmUgQ1RSTF9ERUZBVUxUX0lOREVYCQkweDAwMDMKKworCisJLyogOjAgcyAzOCAwMSAxMDAwIDAwMDMgMDAwNCA0ID0gMGEwMGNhMDAKKwkgKiBCSVRSQVRFIFNFVFRJTkcKKwkgKiAgIDFzdCBhbmQgMm5kIGJ5dGUgKGxpdHRsZSBlbmRpYW4pOiBhdmVyYWdlIGJpdHJhdGUgaW4gMTAwIDAwMCBiaXQvcworCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogMSBtYml0L3MsIG1heDogMTMuNSBtYml0L3MKKwkgKiAgIDNyZCBhbmQgNHRoIGJ5dGUgKGxpdHRsZSBlbmRpYW4pOiBwZWFrIGJpdHJhdGUgaW4gMTAwIDAwMCBiaXQvcworCSAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1pbjogYXZlcmFnZSArIDEwMGtiaXQvcywKKwkgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWF4OiAyMC4yIG1iaXQvcworCSAqLworCisJLyogOjAgcyAzOCAwMSAxMjAwIDAwMDMgMDAwMSAxID0gMDIKKwkgKiBCSVQgUkFURSBNT0RFCisJICogIGNvbnN0YW50ID0gMSwgdmFyaWFibGUgKHBlYWspID0gMiwgdmFyaWFibGUgKGF2ZXJhZ2UpID0gMworCSAqLworCisJLyogOjAgcyAzOCAwMSAxMzAwIDAwMDMgMDAwMSAxID0gMDMKKwkgKiBHT1AgTU9ERSAoMiBiaXQpCisJICogICAgbG93IGJpdCAwLzE6IGFkdmFuY2VkL3NpbXBsZSBHT1AKKwkgKiAgIGhpZ2ggYml0IDAvMTogSURSKDQvMzIvMTI4KSAvIG5vIElEUiAoNC8zMi8wKQorCSAqLworCisJLyogOjAgcyAzOCAwMSAxNzAwIDAwMDMgMDAwMSAxID0gMDAKKwkgKiBWSURFTyBTVEFOREFSRCBvciBGUkVRVU5DWSAwID0gNjBoeiwgMSA9IDUwaHoKKwkgKi8KKworCS8qIDowIHMgMzggMDEgMzEwMCAwMDAzIDAwMDQgNCA9IDAzMDMwMDAwCisJICogRklMVEVSIENPTlRST0wKKwkgKiAgIDFzdCBieXRlIGx1bWEgbG93IHBhc3MgZmlsdGVyIHN0cmVuZ3RoLAorCSAqICAgMm5kIGJ5dGUgY2hyb21hIGxvdyBwYXNzIGZpbHRlciBzdHJlbmd0aCwKKwkgKiAgIDNyZCBieXRlIE1GIGVuYWJsZSBjaHJvbWEsIG1pbj0wLCBtYXg9MQorCSAqICAgNHRoIGJ5dGUgbgorCSAqLworCisKKwkvKiA6MCBzIDM4IGI5IDAwMDEgMDAwMCAwMDAwIDAgKi8KKworCisKKy8qIDowIHMgMzggZDMgMDAwMCAwMDAwIDAwMDEgMSA9IDAwICovCisvKiAJCXJldCA9IHVzYl9jb250cm9sX21zZyhkZXYtPnVkZXYsICovCisvKiAJCQkJICAgICAgdXNiX3NuZGN0cmxwaXBlKGRldi0+dWRldiwgMCksICovCisvKiAJCQkJICAgICAgMHhkMywgMHgzOCwgKi8KKy8qIAkJCQkgICAgICAwLCAwLCAqLworLyogCQkJCSAgICAgICJcMCIsIDEsICovCisvKiAJCQkJICAgICAgMTAwMCk7ICovCisKKy8qIAkJaW5mbygiY29udHJvbCByZXF1ZXN0IHJldHVybmVkICVkIiwgcmV0KTsgKi8KKy8qIAkJbXNsZWVwKDUwMDApOyAqLworCisKKwkvKiA6MCBzIGI4IDgxIDE0MDAgMDAwMyAwMDA1IDUgPAorCSAqIDowIDAgNSA9IGQwMDI0MDAyIDE5CisJICogUVVFUlkgRlJBTUUgU0laRSBBTkQgUkFURQorCSAqICAgMXN0IGFuZCAybmQgYnl0ZSAobGl0dGxlIGVuZGlhbik6IGhvcml6b250YWwgcmVzb2x1dGlvbgorCSAqICAgM3JkIGFuZCA0dGggYnl0ZSAobGl0dGxlIGVuZGlhbik6IHZlcnRpY2FsIHJlc29sdXRpb24KKwkgKiAgIDV0aCBieXRlOiBmcmFtZSByYXRlCisJICovCisKKwkvKiA6MCBzIGI4IDgxIDE4MDAgMDAwMyAwMDAzIDMgPAorCSAqIDowIDAgMyA9IDAzMDEwNAorCSAqIFFVRVJZIFNJR05BTCBBTkQgREVURUNURUQgTElORVMsIG1heWJlIElOUFVUCisJICovCisKK2VudW0gaGRwdnJfdmlkZW9fc3RkIHsKKwlIRFBWUl82MEhaID0gMCwKKwlIRFBWUl81MEhaLAorfTsKKworZW51bSBoZHB2cl92aWRlb19pbnB1dCB7CisJSERQVlJfQ09NUE9ORU5UID0gMCwKKwlIRFBWUl9TVklERU8sCisJSERQVlJfQ09NUE9TSVRFLAorCUhEUFZSX1ZJREVPX0lOUFVUUworfTsKKworZW51bSBoZHB2cl9hdWRpb19pbnB1dHMgeworCUhEUFZSX1JDQV9CQUNLID0gMCwKKwlIRFBWUl9SQ0FfRlJPTlQsCisJSERQVlJfU1BESUYsCisJSERQVlJfQVVESU9fSU5QVVRTCit9OworCitlbnVtIGhkcHZyX2JpdHJhdGVfbW9kZSB7CisJSERQVlJfQ09OU1RBTlQgPSAxLAorCUhEUFZSX1ZBUklBQkxFX1BFQUssCisJSERQVlJfVkFSSUFCTEVfQVZFUkFHRSwKK307CisKK2VudW0gaGRwdnJfZ29wX21vZGUgeworCUhEUFZSX0FEVkFOQ0VEX0lEUl9HT1AgPSAwLAorCUhEUFZSX1NJTVBMRV9JRFJfR09QLAorCUhEUFZSX0FEVkFOQ0VEX05PSURSX0dPUCwKKwlIRFBWUl9TSU1QTEVfTk9JRFJfR09QLAorfTsKKwordm9pZCBoZHB2cl9kZWxldGUoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KTsKKworLyo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0qLworLyogaGFyZHdhcmUgY29udHJvbCBmdW5jdGlvbnMgKi8KK2ludCBoZHB2cl9zZXRfb3B0aW9ucyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpOworCitpbnQgaGRwdnJfc2V0X2JpdHJhdGUoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KTsKKworaW50IGhkcHZyX3NldF9hdWRpbyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYsIHU4IGlucHV0LAorCQkgICAgZW51bSB2NGwyX21wZWdfYXVkaW9fZW5jb2RpbmcgY29kZWMpOworCitpbnQgaGRwdnJfY29uZmlnX2NhbGwoc3RydWN0IGhkcHZyX2RldmljZSAqZGV2LCB1aW50IHZhbHVlLAorCQkgICAgICB1bnNpZ25lZCBjaGFyIHZhbGJ1Zik7CisKK3N0cnVjdCBoZHB2cl92aWRlb19pbmZvICpnZXRfdmlkZW9faW5mbyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYpOworCisvKiA6MCBzIGI4IDgxIDE4MDAgMDAwMyAwMDAzIDMgPCAqLworLyogOjAgMCAzID0gMDMwMWZmICovCitpbnQgZ2V0X2lucHV0X2xpbmVzX2luZm8oc3RydWN0IGhkcHZyX2RldmljZSAqZGV2KTsKKworCisvKj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSovCisvKiB2NGwyIHJlZ2lzdHJhdGlvbiAqLworaW50IGhkcHZyX3JlZ2lzdGVyX3ZpZGVvZGV2KHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldiwgc3RydWN0IGRldmljZSAqcGFyZW50LAorCQkJICAgIGludCBkZXZudW1iZXIpOworCitpbnQgaGRwdnJfY2FuY2VsX3F1ZXVlKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldik7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIGkyYyBhZGFwdGVyIHJlZ2lzdHJhdGlvbiAqLworaW50IGhkcHZyX3JlZ2lzdGVyX2kyY19hZGFwdGVyKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldik7CisKKy8qPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ki8KKy8qIGJ1ZmZlciBtYW5hZ2VtZW50ICovCitpbnQgaGRwdnJfZnJlZV9idWZmZXJzKHN0cnVjdCBoZHB2cl9kZXZpY2UgKmRldik7CitpbnQgaGRwdnJfYWxsb2NfYnVmZmVycyhzdHJ1Y3QgaGRwdnJfZGV2aWNlICpkZXYsIHVpbnQgY291bnQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fZ2VtaW5pLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9nZW1pbmkuYwppbmRleCA3OTM5M2QxLi44ZTE0NjNlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9nZW1pbmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9nZW1pbmkuYwpAQCAtNTYsMTcgKzU2LDYgQEAKIAl1OCBieXRlOwogfTsKIAotc3RhdGljIHN0cnVjdCBzYWE3MTQ2X2V4dGVuc2lvbl9pb2N0bHMgaW9jdGxzW10gPSB7Ci0JeyBWSURJT0NfR19JTlBVVCwJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19TX0lOUFVULAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX1FVRVJZQ1RSTCwgCVNBQTcxNDZfQkVGT1JFIH0sCi0JeyBWSURJT0NfRU5VTUlOUFVULCAJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19TX1NURCwJCVNBQTcxNDZfQUZURVIgfSwKLQl7IFZJRElPQ19HX0NUUkwsCVNBQTcxNDZfQkVGT1JFIH0sCi0JeyBWSURJT0NfU19DVFJMLAlTQUE3MTQ2X0JFRk9SRSB9LAotCXsgMCwJCQkwIH0KLX07Ci0KICNkZWZpbmUgSEVYSVVNX0NPTlRST0xTCTEKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgaGV4aXVtX2NvbnRyb2xzW10gPSB7CiAJeyBWNEwyX0NJRF9QUklWQVRFX0JBU0UsIFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sICJCL1ciLCAwLCAxLCAxLCAwLCAwIH0sCkBAIC0yMzEsNiArMjIwLDEzMiBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHZpZGlvY19lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfaW5wdXQgKmkpCit7CisJREVCX0VFKCgiVklESU9DX0VOVU1JTlBVVCAlZC5cbiIsIGktPmluZGV4KSk7CisKKwlpZiAoaS0+aW5kZXggPCAwIHx8IGktPmluZGV4ID49IEhFWElVTV9JTlBVVFMpCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtY3B5KGksICZoZXhpdW1faW5wdXRzW2ktPmluZGV4XSwgc2l6ZW9mKHN0cnVjdCB2NGwyX2lucHV0KSk7CisKKwlERUJfRCgoInY0bDJfaW9jdGw6IFZJRElPQ19FTlVNSU5QVVQgJWQuXG4iLCBpLT5pbmRleCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50ICppbnB1dCkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgaGV4aXVtICpoZXhpdW0gPSAoc3RydWN0IGhleGl1bSAqKSBkZXYtPmV4dF9wcml2OworCisJKmlucHV0ID0gaGV4aXVtLT5jdXJfaW5wdXQ7CisKKwlERUJfRCgoIlZJRElPQ19HX0lOUFVUOiAlZFxuIiwgKmlucHV0KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgaW5wdXQpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IGhleGl1bSAqaGV4aXVtID0gKHN0cnVjdCBoZXhpdW0gKikgZGV2LT5leHRfcHJpdjsKKworCURFQl9FRSgoIlZJRElPQ19TX0lOUFVUICVkLlxuIiwgaW5wdXQpKTsKKworCWlmIChpbnB1dCA8IDAgfHwgaW5wdXQgPj0gSEVYSVVNX0lOUFVUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwloZXhpdW0tPmN1cl9pbnB1dCA9IGlucHV0OworCWhleGl1bV9zZXRfaW5wdXQoaGV4aXVtLCBpbnB1dCk7CisJcmV0dXJuIDA7Cit9CisKKy8qIHRoZSBzYWE3MTQ2IHByb3ZpZGVzIHNvbWUgY29udHJvbHMgKGJyaWdodG5lc3MsIGNvbnRyYXN0LCBzYXR1cmF0aW9uKQorICAgd2hpY2ggZ2V0cyByZWdpc3RlcmVkICphZnRlciogdGhpcyBmdW5jdGlvbi4gYmVjYXVzZSBvZiB0aGlzIHdlIGhhdmUKKyAgIHRvIHJldHVybiB3aXRoIGEgdmFsdWUgIT0gMCBldmVuIGlmIHRoZSBmdW5jdGlvbiBzdWNjZWRlZC4uICovCitzdGF0aWMgaW50IHZpZGlvY19xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCWludCBpOworCisJZm9yIChpID0gSEVYSVVNX0NPTlRST0xTIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKGhleGl1bV9jb250cm9sc1tpXS5pZCA9PSBxYy0+aWQpIHsKKwkJCSpxYyA9IGhleGl1bV9jb250cm9sc1tpXTsKKwkJCURFQl9EKCgiVklESU9DX1FVRVJZQ1RSTCAlZC5cbiIsIHFjLT5pZCkpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIGRldi0+ZXh0X3Z2X2RhdGEtPmNvcmVfb3BzLT52aWRpb2NfcXVlcnljdHJsKGZpbGUsIGZoLCBxYyk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKnZjKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBoZXhpdW0gKmhleGl1bSA9IChzdHJ1Y3QgaGV4aXVtICopIGRldi0+ZXh0X3ByaXY7CisJaW50IGk7CisKKwlmb3IgKGkgPSBIRVhJVU1fQ09OVFJPTFMgLSAxOyBpID49IDA7IGktLSkgeworCQlpZiAoaGV4aXVtX2NvbnRyb2xzW2ldLmlkID09IHZjLT5pZCkKKwkJCWJyZWFrOworCX0KKworCWlmIChpIDwgMCkKKwkJcmV0dXJuIGRldi0+ZXh0X3Z2X2RhdGEtPmNvcmVfb3BzLT52aWRpb2NfZ19jdHJsKGZpbGUsIGZoLCB2Yyk7CisKKwlpZiAodmMtPmlkID09IFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSkgeworCQl2Yy0+dmFsdWUgPSBoZXhpdW0tPmN1cl9idzsKKwkJREVCX0QoKCJWSURJT0NfR19DVFJMIEJXOiVkLlxuIiwgdmMtPnZhbHVlKSk7CisJCXJldHVybiAwOworCX0KKwlyZXR1cm4gLUVJTlZBTDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfY29udHJvbCAqdmMpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IGhleGl1bSAqaGV4aXVtID0gKHN0cnVjdCBoZXhpdW0gKikgZGV2LT5leHRfcHJpdjsKKwlpbnQgaSA9IDA7CisKKwlmb3IgKGkgPSBIRVhJVU1fQ09OVFJPTFMgLSAxOyBpID49IDA7IGktLSkgeworCQlpZiAoaGV4aXVtX2NvbnRyb2xzW2ldLmlkID09IHZjLT5pZCkKKwkJCWJyZWFrOworCX0KKworCWlmIChpIDwgMCkKKwkJcmV0dXJuIGRldi0+ZXh0X3Z2X2RhdGEtPmNvcmVfb3BzLT52aWRpb2Nfc19jdHJsKGZpbGUsIGZoLCB2Yyk7CisKKwlpZiAodmMtPmlkID09IFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSkKKwkJaGV4aXVtLT5jdXJfYncgPSB2Yy0+dmFsdWU7CisKKwlERUJfRCgoIlZJRElPQ19TX0NUUkwgQlc6JWQuXG4iLCBoZXhpdW0tPmN1cl9idykpOworCisJaWYgKDAgPT0gaGV4aXVtLT5jdXJfYncgJiYgVjRMMl9TVERfUEFMID09IGhleGl1bS0+Y3VyX3N0ZCkgeworCQloZXhpdW1fc2V0X3N0YW5kYXJkKGhleGl1bSwgaGV4aXVtX3BhbCk7CisJCXJldHVybiAwOworCX0KKwlpZiAoMCA9PSBoZXhpdW0tPmN1cl9idyAmJiBWNEwyX1NURF9OVFNDID09IGhleGl1bS0+Y3VyX3N0ZCkgeworCQloZXhpdW1fc2V0X3N0YW5kYXJkKGhleGl1bSwgaGV4aXVtX250c2MpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKDAgPT0gaGV4aXVtLT5jdXJfYncgJiYgVjRMMl9TVERfU0VDQU0gPT0gaGV4aXVtLT5jdXJfc3RkKSB7CisJCWhleGl1bV9zZXRfc3RhbmRhcmQoaGV4aXVtLCBoZXhpdW1fc2VjYW0pOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKDEgPT0gaGV4aXVtLT5jdXJfYncgJiYgVjRMMl9TVERfUEFMID09IGhleGl1bS0+Y3VyX3N0ZCkgeworCQloZXhpdW1fc2V0X3N0YW5kYXJkKGhleGl1bSwgaGV4aXVtX3BhbF9idyk7CisJCXJldHVybiAwOworCX0KKwlpZiAoMSA9PSBoZXhpdW0tPmN1cl9idyAmJiBWNEwyX1NURF9OVFNDID09IGhleGl1bS0+Y3VyX3N0ZCkgeworCQloZXhpdW1fc2V0X3N0YW5kYXJkKGhleGl1bSwgaGV4aXVtX250c2NfYncpOworCQlyZXR1cm4gMDsKKwl9CisJaWYgKDEgPT0gaGV4aXVtLT5jdXJfYncgJiYgVjRMMl9TVERfU0VDQU0gPT0gaGV4aXVtLT5jdXJfc3RkKQorCQkvKiBmaXhtZTogaXMgdGhlcmUgbm8gYncgc2VjYW0gbW9kZT8gKi8KKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gLUVJTlZBTDsKK30KKworCiBzdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0X3Z2IHZ2X2RhdGE7CiAKIC8qIHRoaXMgZnVuY3Rpb24gb25seSBnZXRzIGNhbGxlZCB3aGVuIHRoZSBwcm9iaW5nIHdhcyBzdWNjZXNzZnVsICovCkBAIC0yNzksNiArMzk0LDEyIEBACiAJaGV4aXVtLT5jdXJfaW5wdXQgPSAwOwogCiAJc2FhNzE0Nl92dl9pbml0KGRldiwgJnZ2X2RhdGEpOworCXZ2X2RhdGEub3BzLnZpZGlvY19xdWVyeWN0cmwgPSB2aWRpb2NfcXVlcnljdHJsOworCXZ2X2RhdGEub3BzLnZpZGlvY19nX2N0cmwgPSB2aWRpb2NfZ19jdHJsOworCXZ2X2RhdGEub3BzLnZpZGlvY19zX2N0cmwgPSB2aWRpb2Nfc19jdHJsOworCXZ2X2RhdGEub3BzLnZpZGlvY19lbnVtX2lucHV0ID0gdmlkaW9jX2VudW1faW5wdXQ7CisJdnZfZGF0YS5vcHMudmlkaW9jX2dfaW5wdXQgPSB2aWRpb2NfZ19pbnB1dDsKKwl2dl9kYXRhLm9wcy52aWRpb2Nfc19pbnB1dCA9IHZpZGlvY19zX2lucHV0OwogCWlmICgwICE9IHNhYTcxNDZfcmVnaXN0ZXJfZGV2aWNlKCZoZXhpdW0tPnZpZGVvX2RldiwgZGV2LCAiaGV4aXVtIGdlbWluaSIsIFZGTF9UWVBFX0dSQUJCRVIpKSB7CiAJCXByaW50aygiaGV4aXVtX2dlbWluaTogY2Fubm90IHJlZ2lzdGVyIGNhcHR1cmUgdjRsMiBkZXZpY2UuIHNraXBwaW5nLlxuIik7CiAJCXJldHVybiAtMTsKQEAgLTMwNiwxNTMgKzQyNyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBsb25nIGhleGl1bV9pb2N0bChzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmgsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9IGZoLT5kZXY7Ci0Jc3RydWN0IGhleGl1bSAqaGV4aXVtID0gKHN0cnVjdCBoZXhpdW0gKikgZGV2LT5leHRfcHJpdjsKLS8qCi0Jc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOwotKi8KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX0VOVU1JTlBVVDoKLQkJewotCQkJc3RydWN0IHY0bDJfaW5wdXQgKmkgPSBhcmc7Ci0JCQlERUJfRUUoKCJWSURJT0NfRU5VTUlOUFVUICVkLlxuIiwgaS0+aW5kZXgpKTsKLQotCQkJaWYgKGktPmluZGV4IDwgMCB8fCBpLT5pbmRleCA+PSBIRVhJVU1fSU5QVVRTKSB7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0KLQkJCW1lbWNweShpLCAmaGV4aXVtX2lucHV0c1tpLT5pbmRleF0sIHNpemVvZihzdHJ1Y3QgdjRsMl9pbnB1dCkpOwotCi0JCQlERUJfRCgoInY0bDJfaW9jdGw6IFZJRElPQ19FTlVNSU5QVVQgJWQuXG4iLCBpLT5pbmRleCkpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQljYXNlIFZJRElPQ19HX0lOUFVUOgotCQl7Ci0JCQlpbnQgKmlucHV0ID0gKGludCAqKSBhcmc7Ci0JCQkqaW5wdXQgPSBoZXhpdW0tPmN1cl9pbnB1dDsKLQotCQkJREVCX0QoKCJWSURJT0NfR19JTlBVVDogJWRcbiIsICppbnB1dCkpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQljYXNlIFZJRElPQ19TX0lOUFVUOgotCQl7Ci0JCQlpbnQgaW5wdXQgPSAqKGludCAqKSBhcmc7Ci0KLQkJCURFQl9FRSgoIlZJRElPQ19TX0lOUFVUICVkLlxuIiwgaW5wdXQpKTsKLQotCQkJaWYgKGlucHV0IDwgMCB8fCBpbnB1dCA+PSBIRVhJVU1fSU5QVVRTKSB7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0KLQkJCWhleGl1bS0+Y3VyX2lucHV0ID0gaW5wdXQ7Ci0JCQloZXhpdW1fc2V0X2lucHV0KGhleGl1bSwgaW5wdXQpOwotCi0JCQlyZXR1cm4gMDsKLQkJfQotCQkvKiB0aGUgc2FhNzE0NiBwcm92aWRlcyBzb21lIGNvbnRyb2xzIChicmlnaHRuZXNzLCBjb250cmFzdCwgc2F0dXJhdGlvbikKLQkJICAgd2hpY2ggZ2V0cyByZWdpc3RlcmVkICphZnRlciogdGhpcyBmdW5jdGlvbi4gYmVjYXVzZSBvZiB0aGlzIHdlIGhhdmUKLQkJICAgdG8gcmV0dXJuIHdpdGggYSB2YWx1ZSAhPSAwIGV2ZW4gaWYgdGhlIGZ1bmN0aW9uIHN1Y2NlZGVkLi4gKi8KLQljYXNlIFZJRElPQ19RVUVSWUNUUkw6Ci0JCXsKLQkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMgPSBhcmc7Ci0JCQlpbnQgaTsKLQotCQkJZm9yIChpID0gSEVYSVVNX0NPTlRST0xTIC0gMTsgaSA+PSAwOyBpLS0pIHsKLQkJCQlpZiAoaGV4aXVtX2NvbnRyb2xzW2ldLmlkID09IHFjLT5pZCkgewotCQkJCQkqcWMgPSBoZXhpdW1fY29udHJvbHNbaV07Ci0JCQkJCURFQl9EKCgiVklESU9DX1FVRVJZQ1RSTCAlZC5cbiIsIHFjLT5pZCkpOwotCQkJCQlyZXR1cm4gMDsKLQkJCQl9Ci0JCQl9Ci0JCQlyZXR1cm4gLUVBR0FJTjsKLQkJfQotCWNhc2UgVklESU9DX0dfQ1RSTDoKLQkJewotCQkJc3RydWN0IHY0bDJfY29udHJvbCAqdmMgPSBhcmc7Ci0JCQlpbnQgaTsKLQotCQkJZm9yIChpID0gSEVYSVVNX0NPTlRST0xTIC0gMTsgaSA+PSAwOyBpLS0pIHsKLQkJCQlpZiAoaGV4aXVtX2NvbnRyb2xzW2ldLmlkID09IHZjLT5pZCkgewotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0KLQkJCWlmIChpIDwgMCkgewotCQkJCXJldHVybiAtRUFHQUlOOwotCQkJfQotCi0JCQlzd2l0Y2ggKHZjLT5pZCkgewotCQkJY2FzZSBWNEwyX0NJRF9QUklWQVRFX0JBU0U6ewotCQkJCQl2Yy0+dmFsdWUgPSBoZXhpdW0tPmN1cl9idzsKLQkJCQkJREVCX0QoKCJWSURJT0NfR19DVFJMIEJXOiVkLlxuIiwgdmMtPnZhbHVlKSk7Ci0JCQkJCXJldHVybiAwOwotCQkJCX0KLQkJCX0KLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQljYXNlIFZJRElPQ19TX0NUUkw6Ci0JCXsKLQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKnZjID0gYXJnOwotCQkJaW50IGkgPSAwOwotCi0JCQlmb3IgKGkgPSBIRVhJVU1fQ09OVFJPTFMgLSAxOyBpID49IDA7IGktLSkgewotCQkJCWlmIChoZXhpdW1fY29udHJvbHNbaV0uaWQgPT0gdmMtPmlkKSB7Ci0JCQkJCWJyZWFrOwotCQkJCX0KLQkJCX0KLQotCQkJaWYgKGkgPCAwKSB7Ci0JCQkJcmV0dXJuIC1FQUdBSU47Ci0JCQl9Ci0KLQkJCXN3aXRjaCAodmMtPmlkKSB7Ci0JCQljYXNlIFY0TDJfQ0lEX1BSSVZBVEVfQkFTRTp7Ci0JCQkJCWhleGl1bS0+Y3VyX2J3ID0gdmMtPnZhbHVlOwotCQkJCQlicmVhazsKLQkJCQl9Ci0JCQl9Ci0KLQkJCURFQl9EKCgiVklESU9DX1NfQ1RSTCBCVzolZC5cbiIsIGhleGl1bS0+Y3VyX2J3KSk7Ci0KLQkJCWlmICgwID09IGhleGl1bS0+Y3VyX2J3ICYmIFY0TDJfU1REX1BBTCA9PSBoZXhpdW0tPmN1cl9zdGQpIHsKLQkJCQloZXhpdW1fc2V0X3N0YW5kYXJkKGhleGl1bSwgaGV4aXVtX3BhbCk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCQlpZiAoMCA9PSBoZXhpdW0tPmN1cl9idyAmJiBWNEwyX1NURF9OVFNDID09IGhleGl1bS0+Y3VyX3N0ZCkgewotCQkJCWhleGl1bV9zZXRfc3RhbmRhcmQoaGV4aXVtLCBoZXhpdW1fbnRzYyk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCQlpZiAoMCA9PSBoZXhpdW0tPmN1cl9idyAmJiBWNEwyX1NURF9TRUNBTSA9PSBoZXhpdW0tPmN1cl9zdGQpIHsKLQkJCQloZXhpdW1fc2V0X3N0YW5kYXJkKGhleGl1bSwgaGV4aXVtX3NlY2FtKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJCWlmICgxID09IGhleGl1bS0+Y3VyX2J3ICYmIFY0TDJfU1REX1BBTCA9PSBoZXhpdW0tPmN1cl9zdGQpIHsKLQkJCQloZXhpdW1fc2V0X3N0YW5kYXJkKGhleGl1bSwgaGV4aXVtX3BhbF9idyk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCQlpZiAoMSA9PSBoZXhpdW0tPmN1cl9idyAmJiBWNEwyX1NURF9OVFNDID09IGhleGl1bS0+Y3VyX3N0ZCkgewotCQkJCWhleGl1bV9zZXRfc3RhbmRhcmQoaGV4aXVtLCBoZXhpdW1fbnRzY19idyk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9Ci0JCQlpZiAoMSA9PSBoZXhpdW0tPmN1cl9idyAmJiBWNEwyX1NURF9TRUNBTSA9PSBoZXhpdW0tPmN1cl9zdGQpIHsKLQkJCQkvKiBmaXhtZTogaXMgdGhlcmUgbm8gYncgc2VjYW0gbW9kZT8gKi8KLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQlkZWZhdWx0OgotLyoKLQkJREVCX0QoKCJoZXhpdW1faW9jdGwoKSBkb2VzIG5vdCBoYW5kbGUgdGhpcyBpb2N0bC5cbiIpKTsKLSovCi0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHN0ZF9jYWxsYmFjayhzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiwgc3RydWN0IHNhYTcxNDZfc3RhbmRhcmQgKnN0ZCkKIHsKIAlzdHJ1Y3QgaGV4aXVtICpoZXhpdW0gPSAoc3RydWN0IGhleGl1bSAqKSBkZXYtPmV4dF9wcml2OwpAQCAtNTE0LDggKzQ4OCw2IEBACiAJLnN0ZHMgPSAmaGV4aXVtX3N0YW5kYXJkc1swXSwKIAkubnVtX3N0ZHMgPSBzaXplb2YoaGV4aXVtX3N0YW5kYXJkcykgLyBzaXplb2Yoc3RydWN0IHNhYTcxNDZfc3RhbmRhcmQpLAogCS5zdGRfY2FsbGJhY2sgPSAmc3RkX2NhbGxiYWNrLAotCS5pb2N0bHMgPSAmaW9jdGxzWzBdLAotCS5pb2N0bCA9IGhleGl1bV9pb2N0bCwKIH07CiAKIHN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb24gaGV4aXVtX2V4dGVuc2lvbiA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX29yaW9uLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2hleGl1bV9vcmlvbi5jCmluZGV4IDA3NGJlYzcuLjJiYzM5ZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaGV4aXVtX29yaW9uLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9oZXhpdW1fb3Jpb24uYwpAQCAtNTcsMTQgKzU3LDYgQEAKIAl1OCBieXRlOwogfTsKIAotc3RhdGljIHN0cnVjdCBzYWE3MTQ2X2V4dGVuc2lvbl9pb2N0bHMgaW9jdGxzW10gPSB7Ci0JeyBWSURJT0NfR19JTlBVVCwJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19TX0lOUFVULAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX0VOVU1JTlBVVCwgCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfU19TVEQsCQlTQUE3MTQ2X0FGVEVSIH0sCi0JeyAwLAkJCTAgfQotfTsKLQogc3RydWN0IGhleGl1bQogewogCWludCB0eXBlOwpAQCAtMzI5LDYgKzMyMSw0NCBAQAogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHZpZGlvY19lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfaW5wdXQgKmkpCit7CisJREVCX0VFKCgiVklESU9DX0VOVU1JTlBVVCAlZC5cbiIsIGktPmluZGV4KSk7CisKKwlpZiAoaS0+aW5kZXggPCAwIHx8IGktPmluZGV4ID49IEhFWElVTV9JTlBVVFMpCisJCXJldHVybiAtRUlOVkFMOworCisJbWVtY3B5KGksICZoZXhpdW1faW5wdXRzW2ktPmluZGV4XSwgc2l6ZW9mKHN0cnVjdCB2NGwyX2lucHV0KSk7CisKKwlERUJfRCgoInY0bDJfaW9jdGw6IFZJRElPQ19FTlVNSU5QVVQgJWQuXG4iLCBpLT5pbmRleCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgdW5zaWduZWQgaW50ICppbnB1dCkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgaGV4aXVtICpoZXhpdW0gPSAoc3RydWN0IGhleGl1bSAqKSBkZXYtPmV4dF9wcml2OworCisJKmlucHV0ID0gaGV4aXVtLT5jdXJfaW5wdXQ7CisKKwlERUJfRCgoIlZJRElPQ19HX0lOUFVUOiAlZFxuIiwgKmlucHV0KSk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCB1bnNpZ25lZCBpbnQgaW5wdXQpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IGhleGl1bSAqaGV4aXVtID0gKHN0cnVjdCBoZXhpdW0gKikgZGV2LT5leHRfcHJpdjsKKworCWlmIChpbnB1dCA8IDAgfHwgaW5wdXQgPj0gSEVYSVVNX0lOUFVUUykKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwloZXhpdW0tPmN1cl9pbnB1dCA9IGlucHV0OworCWhleGl1bV9zZXRfaW5wdXQoaGV4aXVtLCBpbnB1dCk7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHN0cnVjdCBzYWE3MTQ2X2V4dF92diB2dl9kYXRhOwogCiAvKiB0aGlzIGZ1bmN0aW9uIG9ubHkgZ2V0cyBjYWxsZWQgd2hlbiB0aGUgcHJvYmluZyB3YXMgc3VjY2Vzc2Z1bCAqLwpAQCAtMzM5LDYgKzM2OSw5IEBACiAJREVCX0VFKCgiLlxuIikpOwogCiAJc2FhNzE0Nl92dl9pbml0KGRldiwgJnZ2X2RhdGEpOworCXZ2X2RhdGEub3BzLnZpZGlvY19lbnVtX2lucHV0ID0gdmlkaW9jX2VudW1faW5wdXQ7CisJdnZfZGF0YS5vcHMudmlkaW9jX2dfaW5wdXQgPSB2aWRpb2NfZ19pbnB1dDsKKwl2dl9kYXRhLm9wcy52aWRpb2Nfc19pbnB1dCA9IHZpZGlvY19zX2lucHV0OwogCWlmICgwICE9IHNhYTcxNDZfcmVnaXN0ZXJfZGV2aWNlKCZoZXhpdW0tPnZpZGVvX2RldiwgZGV2LCAiaGV4aXVtIG9yaW9uIiwgVkZMX1RZUEVfR1JBQkJFUikpIHsKIAkJcHJpbnRrKCJoZXhpdW1fb3Jpb246IGNhbm5vdCByZWdpc3RlciBjYXB0dXJlIHY0bDIgZGV2aWNlLiBza2lwcGluZy5cbiIpOwogCQlyZXR1cm4gLTE7CkBAIC0zNzAsNTggKzQwMyw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBsb25nIGhleGl1bV9pb2N0bChzdHJ1Y3Qgc2FhNzE0Nl9maCAqZmgsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9IGZoLT5kZXY7Ci0Jc3RydWN0IGhleGl1bSAqaGV4aXVtID0gKHN0cnVjdCBoZXhpdW0gKikgZGV2LT5leHRfcHJpdjsKLS8qCi0Jc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOwotKi8KLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX0VOVU1JTlBVVDoKLQkJewotCQkJc3RydWN0IHY0bDJfaW5wdXQgKmkgPSBhcmc7Ci0JCQlERUJfRUUoKCJWSURJT0NfRU5VTUlOUFVUICVkLlxuIiwgaS0+aW5kZXgpKTsKLQotCQkJaWYgKGktPmluZGV4IDwgMCB8fCBpLT5pbmRleCA+PSBIRVhJVU1fSU5QVVRTKSB7Ci0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQl9Ci0KLQkJCW1lbWNweShpLCAmaGV4aXVtX2lucHV0c1tpLT5pbmRleF0sIHNpemVvZihzdHJ1Y3QgdjRsMl9pbnB1dCkpOwotCi0JCQlERUJfRCgoInY0bDJfaW9jdGw6IFZJRElPQ19FTlVNSU5QVVQgJWQuXG4iLCBpLT5pbmRleCkpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQljYXNlIFZJRElPQ19HX0lOUFVUOgotCQl7Ci0JCQlpbnQgKmlucHV0ID0gKGludCAqKSBhcmc7Ci0JCQkqaW5wdXQgPSBoZXhpdW0tPmN1cl9pbnB1dDsKLQotCQkJREVCX0QoKCJWSURJT0NfR19JTlBVVDogJWRcbiIsICppbnB1dCkpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQljYXNlIFZJRElPQ19TX0lOUFVUOgotCQl7Ci0JCQlpbnQgaW5wdXQgPSAqKGludCAqKSBhcmc7Ci0KLQkJCWlmIChpbnB1dCA8IDAgfHwgaW5wdXQgPj0gSEVYSVVNX0lOUFVUUykgewotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJfQotCi0JCQloZXhpdW0tPmN1cl9pbnB1dCA9IGlucHV0OwotCQkJaGV4aXVtX3NldF9pbnB1dChoZXhpdW0sIGlucHV0KTsKLQotCQkJcmV0dXJuIDA7Ci0JCX0KLQlkZWZhdWx0OgotLyoKLQkJREVCX0QoKCJoZXhpdW1faW9jdGwoKSBkb2VzIG5vdCBoYW5kbGUgdGhpcyBpb2N0bC5cbiIpKTsKLSovCi0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQotCXJldHVybiAwOwotfQotCiBzdGF0aWMgaW50IHN0ZF9jYWxsYmFjayhzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiwgc3RydWN0IHNhYTcxNDZfc3RhbmRhcmQgKnN0ZCkKIHsKIAlyZXR1cm4gMDsKQEAgLTQ3OSw4ICs0NjAsNiBAQAogCS5zdGRzID0gJmhleGl1bV9zdGFuZGFyZHNbMF0sCiAJLm51bV9zdGRzID0gc2l6ZW9mKGhleGl1bV9zdGFuZGFyZHMpIC8gc2l6ZW9mKHN0cnVjdCBzYWE3MTQ2X3N0YW5kYXJkKSwKIAkuc3RkX2NhbGxiYWNrID0gJnN0ZF9jYWxsYmFjaywKLQkuaW9jdGxzID0gJmlvY3Rsc1swXSwKLQkuaW9jdGwgPSBoZXhpdW1faW9jdGwsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uIGV4dGVuc2lvbiA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaW5keWNhbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pbmR5Y2FtLmMKaW5kZXggODRiOWU0Zi4uM2Q2OTQwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pbmR5Y2FtLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pbmR5Y2FtLmMKQEAgLTE5LDEwICsxOSwxMiBAQAogI2luY2x1ZGUgPGxpbnV4L21tLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KIC8qIEluZHlDYW0gZGVjb2RlcyBzdHJlYW0gb2YgcGhvdG9ucyBpbnRvIGRpZ2l0YWwgaW1hZ2UgcmVwcmVzZW50YXRpb24gOy0pICovCi0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAKICNpbmNsdWRlICJpbmR5Y2FtLmgiCiAKQEAgLTMzLDYgKzM1LDcgQEAKIE1PRFVMRV9BVVRIT1IoIk1pa2FlbCBOb3VzaWFpbmVuIDx0bW5vdXNpYUBjYy5odXQuZmk+Iik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKKwogLy8gI2RlZmluZSBJTkRZQ0FNX0RFQlVHCiAKICNpZmRlZiBJTkRZQ0FNX0RFQlVHCkBAIC00NCwxMSArNDcsMTQgQEAKICNlbmRpZgogCiBzdHJ1Y3QgaW5keWNhbSB7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CiAJdTggdmVyc2lvbjsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBpMmNfZHJpdmVyX2luZHljYW07CitzdGF0aWMgaW5saW5lIHN0cnVjdCBpbmR5Y2FtICp0b19pbmR5Y2FtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IGluZHljYW0sIHNkKTsKK30KIAogc3RhdGljIGNvbnN0IHU4IGluaXRzZXFbXSA9IHsKIAlJTkRZQ0FNX0NPTlRST0xfQUdDRU5BLAkJLyogSU5EWUNBTV9DT05UUk9MICovCkBAIC02Myw4ICs2OSw5IEBACiAKIC8qIEluZHlDYW0gcmVnaXN0ZXIgaGFuZGxpbmcgKi8KIAotc3RhdGljIGludCBpbmR5Y2FtX3JlYWRfcmVnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggKnZhbHVlKQorc3RhdGljIGludCBpbmR5Y2FtX3JlYWRfcmVnKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZywgdTggKnZhbHVlKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAlpbnQgcmV0OwogCiAJaWYgKHJlZyA9PSBJTkRZQ0FNX1JFR19SRVNFVCkgewpAQCAtODcsMTIgKzk0LDEyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaW5keWNhbV93cml0ZV9yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKK3N0YXRpYyBpbnQgaW5keWNhbV93cml0ZV9yZWcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAJaW50IGVycjsKIAotCWlmICgocmVnID09IElORFlDQU1fUkVHX0JSSUdIVE5FU1MpCi0JICAgIHx8IChyZWcgPT0gSU5EWUNBTV9SRUdfVkVSU0lPTikpIHsKKwlpZiAocmVnID09IElORFlDQU1fUkVHX0JSSUdIVE5FU1MgfHwgcmVnID09IElORFlDQU1fUkVHX1ZFUlNJT04pIHsKIAkJZHByaW50aygiaW5keWNhbV93cml0ZV9yZWcoKTogIgogCQkJInNraXBwaW5nIHJlYWQtb25seSByZWdpc3RlciAlZFxuIiwgcmVnKTsKIAkJcmV0dXJuIDA7CkBAIC0xMDgsMTMgKzExNSwxMyBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgaW5keWNhbV93cml0ZV9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsCitzdGF0aWMgaW50IGluZHljYW1fd3JpdGVfYmxvY2soc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnLAogCQkJICAgICAgIHU4IGxlbmd0aCwgdTggKmRhdGEpCiB7CiAJaW50IGksIGVycjsKIAogCWZvciAoaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotCQllcnIgPSBpbmR5Y2FtX3dyaXRlX3JlZyhjbGllbnQsIHJlZyArIGksIGRhdGFbaV0pOworCQllcnIgPSBpbmR5Y2FtX3dyaXRlX3JlZyhzZCwgcmVnICsgaSwgZGF0YVtpXSk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwogCX0KQEAgLTEyNSw3OSArMTMyLDc4IEBACiAvKiBIZWxwZXIgZnVuY3Rpb25zICovCiAKICNpZmRlZiBJTkRZQ0FNX0RFQlVHCi1zdGF0aWMgdm9pZCBpbmR5Y2FtX3JlZ2R1bXBfZGVidWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyB2b2lkIGluZHljYW1fcmVnZHVtcF9kZWJ1ZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewogCWludCBpOwogCXU4IHZhbDsKIAogCWZvciAoaSA9IDA7IGkgPCA5OyBpKyspIHsKLQkJaW5keWNhbV9yZWFkX3JlZyhjbGllbnQsIGksICZ2YWwpOworCQlpbmR5Y2FtX3JlYWRfcmVnKHNkLCBpLCAmdmFsKTsKIAkJZHByaW50aygiUmVnICVkID0gMHglMDJ4XG4iLCBpLCB2YWwpOwogCX0KIH0KICNlbmRpZgogCi1zdGF0aWMgaW50IGluZHljYW1fZ2V0X2NvbnRyb2woc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSAgICAgICBzdHJ1Y3QgaW5keWNhbV9jb250cm9sICpjdHJsKQorc3RhdGljIGludCBpbmR5Y2FtX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXN0cnVjdCBpbmR5Y2FtICpjYW1lcmEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3QgaW5keWNhbSAqY2FtZXJhID0gdG9faW5keWNhbShzZCk7CiAJdTggcmVnOwogCWludCByZXQgPSAwOwogCi0Jc3dpdGNoIChjdHJsLT50eXBlKSB7Ci0JY2FzZSBJTkRZQ0FNX0NPTlRST0xfQUdDOgotCWNhc2UgSU5EWUNBTV9DT05UUk9MX0FXQjoKLQkJcmV0ID0gaW5keWNhbV9yZWFkX3JlZyhjbGllbnQsIElORFlDQU1fUkVHX0NPTlRST0wsICZyZWcpOworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0FVVE9HQUlOOgorCWNhc2UgVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFOgorCQlyZXQgPSBpbmR5Y2FtX3JlYWRfcmVnKHNkLCBJTkRZQ0FNX1JFR19DT05UUk9MLCAmcmVnKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiAtRUlPOwotCQlpZiAoY3RybC0+dHlwZSA9PSBJTkRZQ0FNX0NPTlRST0xfQUdDKQorCQlpZiAoY3RybC0+aWQgPT0gVjRMMl9DSURfQVVUT0dBSU4pCiAJCQljdHJsLT52YWx1ZSA9IChyZWcgJiBJTkRZQ0FNX0NPTlRST0xfQUdDRU5BKQogCQkJCT8gMSA6IDA7CiAJCWVsc2UKIAkJCWN0cmwtPnZhbHVlID0gKHJlZyAmIElORFlDQU1fQ09OVFJPTF9BV0JDVEwpCiAJCQkJPyAxIDogMDsKIAkJYnJlYWs7Ci0JY2FzZSBJTkRZQ0FNX0NPTlRST0xfU0hVVFRFUjoKLQkJcmV0ID0gaW5keWNhbV9yZWFkX3JlZyhjbGllbnQsIElORFlDQU1fUkVHX1NIVVRURVIsICZyZWcpOworCWNhc2UgVjRMMl9DSURfRVhQT1NVUkU6CisJCXJldCA9IGluZHljYW1fcmVhZF9yZWcoc2QsIElORFlDQU1fUkVHX1NIVVRURVIsICZyZWcpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIC1FSU87CiAJCWN0cmwtPnZhbHVlID0gKChzMzIpcmVnID09IDB4MDApID8gMHhmZiA6ICgoczMyKXJlZyAtIDEpOwogCQlicmVhazsKLQljYXNlIElORFlDQU1fQ09OVFJPTF9HQUlOOgotCQlyZXQgPSBpbmR5Y2FtX3JlYWRfcmVnKGNsaWVudCwgSU5EWUNBTV9SRUdfR0FJTiwgJnJlZyk7CisJY2FzZSBWNEwyX0NJRF9HQUlOOgorCQlyZXQgPSBpbmR5Y2FtX3JlYWRfcmVnKHNkLCBJTkRZQ0FNX1JFR19HQUlOLCAmcmVnKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiAtRUlPOwogCQljdHJsLT52YWx1ZSA9IChzMzIpcmVnOwogCQlicmVhazsKLQljYXNlIElORFlDQU1fQ09OVFJPTF9SRURfQkFMQU5DRToKLQkJcmV0ID0gaW5keWNhbV9yZWFkX3JlZyhjbGllbnQsIElORFlDQU1fUkVHX1JFRF9CQUxBTkNFLCAmcmVnKTsKKwljYXNlIFY0TDJfQ0lEX1JFRF9CQUxBTkNFOgorCQlyZXQgPSBpbmR5Y2FtX3JlYWRfcmVnKHNkLCBJTkRZQ0FNX1JFR19SRURfQkFMQU5DRSwgJnJlZyk7CiAJCWlmIChyZXQpCiAJCQlyZXR1cm4gLUVJTzsKIAkJY3RybC0+dmFsdWUgPSAoczMyKXJlZzsKIAkJYnJlYWs7Ci0JY2FzZSBJTkRZQ0FNX0NPTlRST0xfQkxVRV9CQUxBTkNFOgotCQlyZXQgPSBpbmR5Y2FtX3JlYWRfcmVnKGNsaWVudCwgSU5EWUNBTV9SRUdfQkxVRV9CQUxBTkNFLCAmcmVnKTsKKwljYXNlIFY0TDJfQ0lEX0JMVUVfQkFMQU5DRToKKwkJcmV0ID0gaW5keWNhbV9yZWFkX3JlZyhzZCwgSU5EWUNBTV9SRUdfQkxVRV9CQUxBTkNFLCAmcmVnKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiAtRUlPOwogCQljdHJsLT52YWx1ZSA9IChzMzIpcmVnOwogCQlicmVhazsKIAljYXNlIElORFlDQU1fQ09OVFJPTF9SRURfU0FUVVJBVElPTjoKLQkJcmV0ID0gaW5keWNhbV9yZWFkX3JlZyhjbGllbnQsCisJCXJldCA9IGluZHljYW1fcmVhZF9yZWcoc2QsCiAJCQkJICAgICAgIElORFlDQU1fUkVHX1JFRF9TQVRVUkFUSU9OLCAmcmVnKTsKIAkJaWYgKHJldCkKIAkJCXJldHVybiAtRUlPOwogCQljdHJsLT52YWx1ZSA9IChzMzIpcmVnOwogCQlicmVhazsKIAljYXNlIElORFlDQU1fQ09OVFJPTF9CTFVFX1NBVFVSQVRJT046Ci0JCXJldCA9IGluZHljYW1fcmVhZF9yZWcoY2xpZW50LAorCQlyZXQgPSBpbmR5Y2FtX3JlYWRfcmVnKHNkLAogCQkJCSAgICAgICBJTkRZQ0FNX1JFR19CTFVFX1NBVFVSQVRJT04sICZyZWcpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIC1FSU87CiAJCWN0cmwtPnZhbHVlID0gKHMzMilyZWc7CiAJCWJyZWFrOwotCWNhc2UgSU5EWUNBTV9DT05UUk9MX0dBTU1BOgorCWNhc2UgVjRMMl9DSURfR0FNTUE6CiAJCWlmIChjYW1lcmEtPnZlcnNpb24gPT0gQ0FNRVJBX1ZFUlNJT05fTU9PU0UpIHsKLQkJCXJldCA9IGluZHljYW1fcmVhZF9yZWcoY2xpZW50LAorCQkJcmV0ID0gaW5keWNhbV9yZWFkX3JlZyhzZCwKIAkJCQkJICAgICAgIElORFlDQU1fUkVHX0dBTU1BLCAmcmVnKTsKIAkJCWlmIChyZXQpCiAJCQkJcmV0dXJuIC1FSU87CkBAIC0yMTMsMjEgKzIxOSwyMCBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgaW5keWNhbV9zZXRfY29udHJvbChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICAgICAgIHN0cnVjdCBpbmR5Y2FtX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IGluZHljYW1fc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IGluZHljYW0gKmNhbWVyYSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBpbmR5Y2FtICpjYW1lcmEgPSB0b19pbmR5Y2FtKHNkKTsKIAl1OCByZWc7CiAJaW50IHJldCA9IDA7CiAKLQlzd2l0Y2ggKGN0cmwtPnR5cGUpIHsKLQljYXNlIElORFlDQU1fQ09OVFJPTF9BR0M6Ci0JY2FzZSBJTkRZQ0FNX0NPTlRST0xfQVdCOgotCQlyZXQgPSBpbmR5Y2FtX3JlYWRfcmVnKGNsaWVudCwgSU5EWUNBTV9SRUdfQ09OVFJPTCwgJnJlZyk7CisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQVVUT0dBSU46CisJY2FzZSBWNEwyX0NJRF9BVVRPX1dISVRFX0JBTEFOQ0U6CisJCXJldCA9IGluZHljYW1fcmVhZF9yZWcoc2QsIElORFlDQU1fUkVHX0NPTlRST0wsICZyZWcpOwogCQlpZiAocmV0KQogCQkJYnJlYWs7CiAKLQkJaWYgKGN0cmwtPnR5cGUgPT0gSU5EWUNBTV9DT05UUk9MX0FHQykgeworCQlpZiAoY3RybC0+aWQgPT0gVjRMMl9DSURfQVVUT0dBSU4pIHsKIAkJCWlmIChjdHJsLT52YWx1ZSkKIAkJCQlyZWcgfD0gSU5EWUNBTV9DT05UUk9MX0FHQ0VOQTsKIAkJCWVsc2UKQEAgLTIzOSwzNCArMjQ0LDM0IEBACiAJCQkJcmVnICY9IH5JTkRZQ0FNX0NPTlRST0xfQVdCQ1RMOwogCQl9CiAKLQkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19DT05UUk9MLCByZWcpOworCQlyZXQgPSBpbmR5Y2FtX3dyaXRlX3JlZyhzZCwgSU5EWUNBTV9SRUdfQ09OVFJPTCwgcmVnKTsKIAkJYnJlYWs7Ci0JY2FzZSBJTkRZQ0FNX0NPTlRST0xfU0hVVFRFUjoKKwljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFOgogCQlyZWcgPSAoY3RybC0+dmFsdWUgPT0gMHhmZikgPyAweDAwIDogKGN0cmwtPnZhbHVlICsgMSk7Ci0JCXJldCA9IGluZHljYW1fd3JpdGVfcmVnKGNsaWVudCwgSU5EWUNBTV9SRUdfU0hVVFRFUiwgcmVnKTsKKwkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoc2QsIElORFlDQU1fUkVHX1NIVVRURVIsIHJlZyk7CiAJCWJyZWFrOwotCWNhc2UgSU5EWUNBTV9DT05UUk9MX0dBSU46Ci0JCXJldCA9IGluZHljYW1fd3JpdGVfcmVnKGNsaWVudCwgSU5EWUNBTV9SRUdfR0FJTiwgY3RybC0+dmFsdWUpOworCWNhc2UgVjRMMl9DSURfR0FJTjoKKwkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoc2QsIElORFlDQU1fUkVHX0dBSU4sIGN0cmwtPnZhbHVlKTsKIAkJYnJlYWs7Ci0JY2FzZSBJTkRZQ0FNX0NPTlRST0xfUkVEX0JBTEFOQ0U6Ci0JCXJldCA9IGluZHljYW1fd3JpdGVfcmVnKGNsaWVudCwgSU5EWUNBTV9SRUdfUkVEX0JBTEFOQ0UsCisJY2FzZSBWNEwyX0NJRF9SRURfQkFMQU5DRToKKwkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoc2QsIElORFlDQU1fUkVHX1JFRF9CQUxBTkNFLAogCQkJCQljdHJsLT52YWx1ZSk7CiAJCWJyZWFrOwotCWNhc2UgSU5EWUNBTV9DT05UUk9MX0JMVUVfQkFMQU5DRToKLQkJcmV0ID0gaW5keWNhbV93cml0ZV9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19CTFVFX0JBTEFOQ0UsCisJY2FzZSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0U6CisJCXJldCA9IGluZHljYW1fd3JpdGVfcmVnKHNkLCBJTkRZQ0FNX1JFR19CTFVFX0JBTEFOQ0UsCiAJCQkJCWN0cmwtPnZhbHVlKTsKIAkJYnJlYWs7CiAJY2FzZSBJTkRZQ0FNX0NPTlRST0xfUkVEX1NBVFVSQVRJT046Ci0JCXJldCA9IGluZHljYW1fd3JpdGVfcmVnKGNsaWVudCwgSU5EWUNBTV9SRUdfUkVEX1NBVFVSQVRJT04sCisJCXJldCA9IGluZHljYW1fd3JpdGVfcmVnKHNkLCBJTkRZQ0FNX1JFR19SRURfU0FUVVJBVElPTiwKIAkJCQkJY3RybC0+dmFsdWUpOwogCQlicmVhazsKIAljYXNlIElORFlDQU1fQ09OVFJPTF9CTFVFX1NBVFVSQVRJT046Ci0JCXJldCA9IGluZHljYW1fd3JpdGVfcmVnKGNsaWVudCwgSU5EWUNBTV9SRUdfQkxVRV9TQVRVUkFUSU9OLAorCQlyZXQgPSBpbmR5Y2FtX3dyaXRlX3JlZyhzZCwgSU5EWUNBTV9SRUdfQkxVRV9TQVRVUkFUSU9OLAogCQkJCQljdHJsLT52YWx1ZSk7CiAJCWJyZWFrOwotCWNhc2UgSU5EWUNBTV9DT05UUk9MX0dBTU1BOgorCWNhc2UgVjRMMl9DSURfR0FNTUE6CiAJCWlmIChjYW1lcmEtPnZlcnNpb24gPT0gQ0FNRVJBX1ZFUlNJT05fTU9PU0UpIHsKLQkJCXJldCA9IGluZHljYW1fd3JpdGVfcmVnKGNsaWVudCwgSU5EWUNBTV9SRUdfR0FNTUEsCisJCQlyZXQgPSBpbmR5Y2FtX3dyaXRlX3JlZyhzZCwgSU5EWUNBTV9SRUdfR0FNTUEsCiAJCQkJCQljdHJsLT52YWx1ZSk7CiAJCX0KIAkJYnJlYWs7CkBAIC0yNzksMTkyICsyODQsMTAzIEBACiAKIC8qIEkyQy1pbnRlcmZhY2UgKi8KIAotc3RhdGljIGludCBpbmR5Y2FtX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIGludCBhZGRyLCBpbnQga2luZCkKK3N0YXRpYyBpbnQgaW5keWNhbV9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCBpbmR5Y2FtICpjYW1lcmEgPSB0b19pbmR5Y2FtKHNkKTsKKworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfSU5EWUNBTSwKKwkJICAgICAgIGNhbWVyYS0+dmVyc2lvbik7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgaW5keWNhbV9jb3JlX29wcyA9IHsKKwkuZ19jaGlwX2lkZW50ID0gaW5keWNhbV9nX2NoaXBfaWRlbnQsCisJLmdfY3RybCA9IGluZHljYW1fZ19jdHJsLAorCS5zX2N0cmwgPSBpbmR5Y2FtX3NfY3RybCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIGluZHljYW1fb3BzID0geworCS5jb3JlID0gJmluZHljYW1fY29yZV9vcHMsCit9OworCitzdGF0aWMgaW50IGluZHljYW1fcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCWludCBlcnIgPSAwOwogCXN0cnVjdCBpbmR5Y2FtICpjYW1lcmE7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCi0JcHJpbnRrKEtFUk5fSU5GTyAiU0dJIEluZHlDYW0gZHJpdmVyIHZlcnNpb24gJXNcbiIsCi0JICAgICAgIElORFlDQU1fTU9EVUxFX1ZFUlNJT04pOworCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCisJCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAotCWNsaWVudCA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpMmNfY2xpZW50KSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjbGllbnQpCi0JCXJldHVybiAtRU5PTUVNOwogCWNhbWVyYSA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpbmR5Y2FtKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjYW1lcmEpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBvdXRfZnJlZV9jbGllbnQ7Ci0JfQorCWlmICghY2FtZXJhKQorCQlyZXR1cm4gLUVOT01FTTsKIAotCWNsaWVudC0+YWRkciA9IGFkZHI7Ci0JY2xpZW50LT5hZGFwdGVyID0gYWRhcDsKLQljbGllbnQtPmRyaXZlciA9ICZpMmNfZHJpdmVyX2luZHljYW07Ci0JY2xpZW50LT5mbGFncyA9IDA7Ci0Jc3RyY3B5KGNsaWVudC0+bmFtZSwgIkluZHlDYW0gY2xpZW50Iik7Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgY2FtZXJhKTsKLQotCWNhbWVyYS0+Y2xpZW50ID0gY2xpZW50OwotCi0JZXJyID0gaTJjX2F0dGFjaF9jbGllbnQoY2xpZW50KTsKLQlpZiAoZXJyKQotCQlnb3RvIG91dF9mcmVlX2NhbWVyYTsKKwlzZCA9ICZjYW1lcmEtPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZpbmR5Y2FtX29wcyk7CiAKIAljYW1lcmEtPnZlcnNpb24gPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LAogCQkJCQkJICAgSU5EWUNBTV9SRUdfVkVSU0lPTik7CiAJaWYgKGNhbWVyYS0+dmVyc2lvbiAhPSBDQU1FUkFfVkVSU0lPTl9JTkRZICYmCiAJICAgIGNhbWVyYS0+dmVyc2lvbiAhPSBDQU1FUkFfVkVSU0lPTl9NT09TRSkgewotCQllcnIgPSAtRU5PREVWOwotCQlnb3RvIG91dF9kZXRhY2hfY2xpZW50OworCQlrZnJlZShjYW1lcmEpOworCQlyZXR1cm4gLUVOT0RFVjsKIAl9CisKIAlwcmludGsoS0VSTl9JTkZPICJJbmR5Q2FtIHYlZC4lZCBkZXRlY3RlZFxuIiwKIAkgICAgICAgSU5EWUNBTV9WRVJTSU9OX01BSk9SKGNhbWVyYS0+dmVyc2lvbiksCiAJICAgICAgIElORFlDQU1fVkVSU0lPTl9NSU5PUihjYW1lcmEtPnZlcnNpb24pKTsKIAotCWluZHljYW1fcmVnZHVtcChjbGllbnQpOworCWluZHljYW1fcmVnZHVtcChzZCk7CiAKIAkvLyBpbml0aWFsaXplCi0JZXJyID0gaW5keWNhbV93cml0ZV9ibG9jayhjbGllbnQsIDAsIHNpemVvZihpbml0c2VxKSwgKHU4ICopJmluaXRzZXEpOworCWVyciA9IGluZHljYW1fd3JpdGVfYmxvY2soc2QsIDAsIHNpemVvZihpbml0c2VxKSwgKHU4ICopJmluaXRzZXEpOwogCWlmIChlcnIpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJJbmR5Q2FtIGluaXRpYWxpemF0aW9uIGZhaWxlZFxuIik7Ci0JCWVyciA9IC1FSU87Ci0JCWdvdG8gb3V0X2RldGFjaF9jbGllbnQ7CisJCWtmcmVlKGNhbWVyYSk7CisJCXJldHVybiAtRUlPOwogCX0KIAotCWluZHljYW1fcmVnZHVtcChjbGllbnQpOworCWluZHljYW1fcmVnZHVtcChzZCk7CiAKIAkvLyB3aGl0ZSBiYWxhbmNlCi0JZXJyID0gaW5keWNhbV93cml0ZV9yZWcoY2xpZW50LCBJTkRZQ0FNX1JFR19DT05UUk9MLAorCWVyciA9IGluZHljYW1fd3JpdGVfcmVnKHNkLCBJTkRZQ0FNX1JFR19DT05UUk9MLAogCQkJICBJTkRZQ0FNX0NPTlRST0xfQUdDRU5BIHwgSU5EWUNBTV9DT05UUk9MX0FXQkNUTCk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIkluZHlDYW06IFdoaXRlIGJhbGFuY2luZyBjYW1lcmEgZmFpbGVkXG4iKTsKLQkJZXJyID0gLUVJTzsKLQkJZ290byBvdXRfZGV0YWNoX2NsaWVudDsKKwkJa2ZyZWUoY2FtZXJhKTsKKwkJcmV0dXJuIC1FSU87CiAJfQogCi0JaW5keWNhbV9yZWdkdW1wKGNsaWVudCk7CisJaW5keWNhbV9yZWdkdW1wKHNkKTsKIAogCXByaW50ayhLRVJOX0lORk8gIkluZHlDYW0gaW5pdGlhbGl6ZWRcbiIpOwogCiAJcmV0dXJuIDA7Ci0KLW91dF9kZXRhY2hfY2xpZW50OgotCWkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci1vdXRfZnJlZV9jYW1lcmE6Ci0Ja2ZyZWUoY2FtZXJhKTsKLW91dF9mcmVlX2NsaWVudDoKLQlrZnJlZShjbGllbnQpOwotCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgaW5keWNhbV9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCitzdGF0aWMgaW50IGluZHljYW1fcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JLyogSW5keSBzcGVjaWZpYyBjcmFwICovCi0JaWYgKGFkYXAtPmlkID09IEkyQ19IV19TR0lfVklOTykKLQkJcmV0dXJuIGluZHljYW1fYXR0YWNoKGFkYXAsIElORFlDQU1fQUREUiwgMCk7Ci0JLyogRmVlbCBmcmVlIHRvIGFkZCBwcm9iZSBoZXJlIDotKSAqLwotCXJldHVybiAtRU5PREVWOwotfQorCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAotc3RhdGljIGludCBpbmR5Y2FtX2RldGFjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCBpbmR5Y2FtICpjYW1lcmEgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCWkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0Ja2ZyZWUoY2FtZXJhKTsKLQlrZnJlZShjbGllbnQpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZSh0b19pbmR5Y2FtKHNkKSk7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgaW5keWNhbV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsCi0JCQkgICB2b2lkICphcmcpCi17Ci0JLy8gc3RydWN0IGluZHljYW0gKmNhbWVyYSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JLyogVGhlIG9sZCB2aWRlb19kZWNvZGVyIGludGVyZmFjZSBqdXN0IGlzbid0IGVub3VnaCwKLQkgKiBzbyB3ZSdsbCB1c2Ugc29tZSBjdXN0b20gY29tbWFuZHMuICovCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIERFQ09ERVJfR0VUX0NBUEFCSUxJVElFUzogewotCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7Ci0KLQkJY2FwLT5mbGFncyAgPSBWSURFT19ERUNPREVSX05UU0M7Ci0JCWNhcC0+aW5wdXRzID0gMTsKLQkJY2FwLT5vdXRwdXRzID0gMTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgREVDT0RFUl9HRVRfU1RBVFVTOiB7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQkqaWFyZyA9IERFQ09ERVJfU1RBVFVTX0dPT0QgfCBERUNPREVSX1NUQVRVU19OVFNDIHwKLQkJCURFQ09ERVJfU1RBVFVTX0NPTE9SOwotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX1NFVF9OT1JNOiB7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQlzd2l0Y2ggKCppYXJnKSB7Ci0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX1NFVF9JTlBVVDoJewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJaWYgKCppYXJnICE9IDApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgREVDT0RFUl9TRVRfT1VUUFVUOiB7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQlpZiAoKmlhcmcgIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX0VOQUJMRV9PVVRQVVQ6IHsKLQkJLyogQWx3YXlzIGVuYWJsZWQgKi8KLQkJYnJlYWs7Ci0JfQotCWNhc2UgREVDT0RFUl9TRVRfUElDVFVSRTogewotCQkvLyBzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcGljID0gYXJnOwotCQkvKiBUT0RPOiBjb252ZXJ0IHZhbHVlcyBmb3IgaW5keWNhbV9zZXRfY29udHJvbHMoKSAqLwotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX0lORFlDQU1fR0VUX0NPTlRST0w6IHsKLQkJcmV0dXJuIGluZHljYW1fZ2V0X2NvbnRyb2woY2xpZW50LCBhcmcpOwotCX0KLQljYXNlIERFQ09ERVJfSU5EWUNBTV9TRVRfQ09OVFJPTDogewotCQlyZXR1cm4gaW5keWNhbV9zZXRfY29udHJvbChjbGllbnQsIGFyZyk7Ci0JfQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9pbmR5Y2FtID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lIAk9ICJpbmR5Y2FtIiwKLQl9LAotCS5pZAkJPSBJMkNfRFJJVkVSSURfSU5EWUNBTSwKLQkuYXR0YWNoX2FkYXB0ZXIgPSBpbmR5Y2FtX3Byb2JlLAotCS5kZXRhY2hfY2xpZW50CT0gaW5keWNhbV9kZXRhY2gsCi0JLmNvbW1hbmQJPSBpbmR5Y2FtX2NvbW1hbmQsCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgaW5keWNhbV9pZFtdID0geworCXsgImluZHljYW0iLCAwIH0sCisJeyB9CiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGluZHljYW1faWQpOwogCi1zdGF0aWMgaW50IF9faW5pdCBpbmR5Y2FtX2luaXQodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmkyY19kcml2ZXJfaW5keWNhbSk7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBpbmR5Y2FtX2V4aXQodm9pZCkKLXsKLQlpMmNfZGVsX2RyaXZlcigmaTJjX2RyaXZlcl9pbmR5Y2FtKTsKLX0KLQotbW9kdWxlX2luaXQoaW5keWNhbV9pbml0KTsKLW1vZHVsZV9leGl0KGluZHljYW1fZXhpdCk7CitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CisJLm5hbWUgPSAiaW5keWNhbSIsCisJLnByb2JlID0gaW5keWNhbV9wcm9iZSwKKwkucmVtb3ZlID0gaW5keWNhbV9yZW1vdmUsCisJLmlkX3RhYmxlID0gaW5keWNhbV9pZCwKK307CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2luZHljYW0uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaW5keWNhbS5oCmluZGV4IGU2ZWU4MjAuLjg4MWYyMWMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaW5keWNhbS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaW5keWNhbS5oCkBAIC04NywyMiArODcsNyBAQAogCiAvKiBEcml2ZXIgaW50ZXJmYWNlIGRlZmluaXRpb25zICovCiAKLSNkZWZpbmUgSU5EWUNBTV9DT05UUk9MX0FHQwkJCTAJLyogYm9vbGVhbiAqLwotI2RlZmluZSBJTkRZQ0FNX0NPTlRST0xfQVdCCQkJMQkvKiBib29sZWFuICovCi0jZGVmaW5lIElORFlDQU1fQ09OVFJPTF9TSFVUVEVSCQkJMgotI2RlZmluZSBJTkRZQ0FNX0NPTlRST0xfR0FJTgkJCTMKLSNkZWZpbmUgSU5EWUNBTV9DT05UUk9MX1JFRF9CQUxBTkNFCQk0Ci0jZGVmaW5lIElORFlDQU1fQ09OVFJPTF9CTFVFX0JBTEFOQ0UJCTUKLSNkZWZpbmUgSU5EWUNBTV9DT05UUk9MX1JFRF9TQVRVUkFUSU9OCQk2Ci0jZGVmaW5lIElORFlDQU1fQ09OVFJPTF9CTFVFX1NBVFVSQVRJT04JCTcKLSNkZWZpbmUgSU5EWUNBTV9DT05UUk9MX0dBTU1BCQkJOAotCi1zdHJ1Y3QgaW5keWNhbV9jb250cm9sIHsKLQl1OCB0eXBlOwotCXMzMiB2YWx1ZTsKLX07Ci0KLSNkZWZpbmUJREVDT0RFUl9JTkRZQ0FNX0dFVF9DT05UUk9MCV9JT1IoJ2QnLCAxOTMsIHN0cnVjdCBpbmR5Y2FtX2NvbnRyb2wpCi0jZGVmaW5lCURFQ09ERVJfSU5EWUNBTV9TRVRfQ09OVFJPTAlfSU9XKCdkJywgMTk0LCBzdHJ1Y3QgaW5keWNhbV9jb250cm9sKQorI2RlZmluZSBJTkRZQ0FNX0NPTlRST0xfUkVEX1NBVFVSQVRJT04JCShWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAwKQorI2RlZmluZSBJTkRZQ0FNX0NPTlRST0xfQkxVRV9TQVRVUkFUSU9OCQkoVjRMMl9DSURfUFJJVkFURV9CQVNFICsgMSkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2lyLWtiZC1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCmluZGV4IGQ0NjU4YzUuLjA5MmM3ZGEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXIta2JkLWkyYy5jCkBAIC0xNiw2ICsxNiw4IEBACiAgKiAgICAgIEhlbnJ5IFdvbmcgPGhlbnJ5QHN0dWZmZWRjb3cubmV0PgogICogICAgICBNYXJrIFNjaHVsdHogPG45eG1qQHlhaG9vLmNvbT4KICAqICAgICAgQnJpYW4gUm9nZXJzIDxicmlhbl9yb2dlcnNAY29tY2FzdC5uZXQ+CisgKiBtb2RpZmllZCBmb3IgQVZlck1lZGlhIENhcmRidXMgYnkKKyAqICAgICAgT2xkcmljaCBKZWRsaWNrYSA8b2xkaXVtLnByb0BzZXpuYW0uY3o+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTIxNiw2ICsyMTgsNDYgQEAKIAlyZXR1cm4gMTsKIH0KIAorc3RhdGljIGludCBnZXRfa2V5X2F2ZXJtZWRpYV9jYXJkYnVzKHN0cnVjdCBJUl9pMmMgKmlyLAorCQkJCSAgICAgdTMyICppcl9rZXksIHUzMiAqaXJfcmF3KQoreworCXVuc2lnbmVkIGNoYXIgc3ViYWRkciwga2V5LCBrZXlncm91cDsKKwlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHsgeyAuYWRkciA9IGlyLT5jLmFkZHIsIC5mbGFncyA9IDAsCisJCQkJICAgLmJ1ZiA9ICZzdWJhZGRyLCAubGVuID0gMX0sCisJCQkJIHsgLmFkZHIgPSBpci0+Yy5hZGRyLCAuZmxhZ3MgPSBJMkNfTV9SRCwKKwkJCQkgIC5idWYgPSAma2V5LCAubGVuID0gMX0gfTsKKwlzdWJhZGRyID0gMHgwZDsKKwlpZiAoMiAhPSBpMmNfdHJhbnNmZXIoaXItPmMuYWRhcHRlciwgbXNnLCAyKSkgeworCQlkcHJpbnRrKDEsICJyZWFkIGVycm9yXG4iKTsKKwkJcmV0dXJuIC1FSU87CisJfQorCisJaWYgKGtleSA9PSAweGZmKQorCQlyZXR1cm4gMDsKKworCXN1YmFkZHIgPSAweDBiOworCW1zZ1sxXS5idWYgPSAma2V5Z3JvdXA7CisJaWYgKDIgIT0gaTJjX3RyYW5zZmVyKGlyLT5jLmFkYXB0ZXIsIG1zZywgMikpIHsKKwkJZHByaW50aygxLCAicmVhZCBlcnJvclxuIik7CisJCXJldHVybiAtRUlPOworCX0KKworCWlmIChrZXlncm91cCA9PSAweGZmKQorCQlyZXR1cm4gMDsKKworCWRwcmludGsoMSwgInJlYWQga2V5IDB4JTAyeC8weCUwMnhcbiIsIGtleSwga2V5Z3JvdXApOworCWlmIChrZXlncm91cCA8IDIgfHwga2V5Z3JvdXAgPiAzKSB7CisJCS8qIE9ubHkgYSB3YXJuaW5nICovCisJCWRwcmludGsoMSwgIndhcm5pbmc6IGludmFsaWQga2V5IGdyb3VwIDB4JTAyeCBmb3Iga2V5IDB4JTAyeFxuIiwKKwkJCQkJCQkJa2V5Z3JvdXAsIGtleSk7CisJfQorCWtleSB8PSAoa2V5Z3JvdXAgJiAxKSA8PCA2OworCisJKmlyX2tleSA9IGtleTsKKwkqaXJfcmF3ID0ga2V5OworCXJldHVybiAxOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgdm9pZCBpcl9rZXlfcG9sbChzdHJ1Y3QgSVJfaTJjICppcikKQEAgLTIzNywxNSArMjc5LDkgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGlyX3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3QgSVJfaTJjICppciA9IChzdHJ1Y3QgSVJfaTJjKilkYXRhOwotCXNjaGVkdWxlX3dvcmsoJmlyLT53b3JrKTsKLX0KLQogc3RhdGljIHZvaWQgaXJfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7Ci0Jc3RydWN0IElSX2kyYyAqaXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IElSX2kyYywgd29yayk7CisJc3RydWN0IElSX2kyYyAqaXIgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IElSX2kyYywgd29yay53b3JrKTsKIAlpbnQgcG9sbGluZ19pbnRlcnZhbCA9IDEwMDsKIAogCS8qIE1TSSBUVkBueXdoZXJlIFBsdXMgcmVxdWlyZXMgbW9yZSBmcmVxdWVudCBwb2xsaW5nCkBAIC0yNTQsNyArMjkwLDcgQEAKIAkJcG9sbGluZ19pbnRlcnZhbCA9IDUwOwogCiAJaXJfa2V5X3BvbGwoaXIpOwotCW1vZF90aW1lcigmaXItPnRpbWVyLCBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyhwb2xsaW5nX2ludGVydmFsKSk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZpci0+d29yaywgbXNlY3NfdG9famlmZmllcyhwb2xsaW5nX2ludGVydmFsKSk7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0zNjAsNiArMzk2LDEyIEBACiAJCQlpcl90eXBlICAgICA9IElSX1RZUEVfT1RIRVI7CiAJCX0KIAkJYnJlYWs7CisJY2FzZSAweDQwOgorCQluYW1lICAgICAgICA9ICJBVmVyTWVkaWEgQ2FyZGJ1cyByZW1vdGUiOworCQlpci0+Z2V0X2tleSA9IGdldF9rZXlfYXZlcm1lZGlhX2NhcmRidXM7CisJCWlyX3R5cGUgICAgID0gSVJfVFlQRV9PVEhFUjsKKwkJaXJfY29kZXMgICAgPSBpcl9jb2Rlc19hdmVybWVkaWFfY2FyZGJ1czsKKwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogc2hvdWxkbid0IGhhcHBlbiAqLwogCQlwcmludGsoREVWTkFNRSAiOiBIdWg/IHVua25vd24gaTJjIGFkZHJlc3MgKDB4JTAyeCk/XG4iLCBhZGRyKTsKQEAgLTQwNCwxMSArNDQ2LDggQEAKIAkgICAgICAgaXItPmlucHV0LT5uYW1lLCBpci0+aW5wdXQtPnBoeXMsIGFkYXAtPm5hbWUpOwogCiAJLyogc3RhcnQgcG9sbGluZyB2aWEgZXZlbnRkICovCi0JSU5JVF9XT1JLKCZpci0+d29yaywgaXJfd29yayk7Ci0JaW5pdF90aW1lcigmaXItPnRpbWVyKTsKLQlpci0+dGltZXIuZnVuY3Rpb24gPSBpcl90aW1lcjsKLQlpci0+dGltZXIuZGF0YSAgICAgPSAodW5zaWduZWQgbG9uZylpcjsKLQlzY2hlZHVsZV93b3JrKCZpci0+d29yayk7CisJSU5JVF9ERUxBWUVEX1dPUksoJmlyLT53b3JrLCBpcl93b3JrKTsKKwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmlyLT53b3JrLCAwKTsKIAogCXJldHVybiAwOwogCkBAIC00MjUsOCArNDY0LDcgQEAKIAlzdHJ1Y3QgSVJfaTJjICppciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJLyoga2lsbCBvdXRzdGFuZGluZyBwb2xscyAqLwotCWRlbF90aW1lcl9zeW5jKCZpci0+dGltZXIpOwotCWZsdXNoX3NjaGVkdWxlZF93b3JrKCk7CisJY2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKCZpci0+d29yayk7CiAKIAkvKiB1bnJlZ2lzdGVyIGRldmljZXMgKi8KIAlpbnB1dF91bnJlZ2lzdGVyX2RldmljZShpci0+aW5wdXQpOwpAQCAtNTI0LDYgKzU2MiwyMiBAQAogCQkJaXJfYXR0YWNoKGFkYXAsIG1zZy5hZGRyLCAwLCAwKTsKIAl9CiAKKwkvKiBTcGVjaWFsIGNhc2UgZm9yIEFWZXJNZWRpYSBDYXJkYnVzIHJlbW90ZSAqLworCWlmIChhZGFwLT5pZCA9PSBJMkNfSFdfU0FBNzEzNCkgeworCQl1bnNpZ25lZCBjaGFyIHN1YmFkZHIsIGRhdGE7CisJCXN0cnVjdCBpMmNfbXNnIG1zZ1tdID0geyB7IC5hZGRyID0gMHg0MCwgLmZsYWdzID0gMCwKKwkJCQkJICAgLmJ1ZiA9ICZzdWJhZGRyLCAubGVuID0gMX0sCisJCQkJCSB7IC5hZGRyID0gMHg0MCwgLmZsYWdzID0gSTJDX01fUkQsCisJCQkJCSAgIC5idWYgPSAmZGF0YSwgLmxlbiA9IDF9IH07CisJCXN1YmFkZHIgPSAweDBkOworCQlyYyA9IGkyY190cmFuc2ZlcihhZGFwLCBtc2csIDIpOworCQlkcHJpbnRrKDEsICJwcm9iZSAweCUwMngvMHglMDJ4IEAgJXM6ICVzXG4iLAorCQkJbXNnWzBdLmFkZHIsIHN1YmFkZHIsIGFkYXAtPm5hbWUsCisJCQkoMiA9PSByYykgPyAieWVzIiA6ICJubyIpOworCQlpZiAoMiA9PSByYykKKwkJCWlyX2F0dGFjaChhZGFwLCBtc2dbMF0uYWRkciwgMCwgMCk7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNvbnRyb2xzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1jb250cm9scy5jCmluZGV4IDYyYWEwNmYuLjg0OTk1YmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWNvbnRyb2xzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtY29udHJvbHMuYwpAQCAtMjYsNiArMjYsNyBAQAogI2luY2x1ZGUgIml2dHYtbWFpbGJveC5oIgogI2luY2x1ZGUgIml2dHYtY29udHJvbHMuaCIKIAorLyogTXVzdCBiZSBzb3J0ZWQgZnJvbSBsb3cgdG8gaGlnaCBjb250cm9sIElEISAqLwogc3RhdGljIGNvbnN0IHUzMiB1c2VyX2N0cmxzW10gPSB7CiAJVjRMMl9DSURfVVNFUl9DTEFTUywKIAlWNEwyX0NJRF9CUklHSFRORVNTLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYwppbmRleCBjNDZjOTkwLi5lY2E4YmY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuYwpAQCAtMzU3LDcgKzM1Nyw3IEBACiBzdGF0aWMgdm9pZCBpdnR2X3Byb2Nlc3NfZWVwcm9tKHN0cnVjdCBpdnR2ICppdHYpCiB7CiAJc3RydWN0IHR2ZWVwcm9tIHR2OwotCWludCBwY2lfc2xvdCA9IFBDSV9TTE9UKGl0di0+ZGV2LT5kZXZmbik7CisJaW50IHBjaV9zbG90ID0gUENJX1NMT1QoaXR2LT5wZGV2LT5kZXZmbik7CiAKIAlpdnR2X3JlYWRfZWVwcm9tKGl0diwgJnR2KTsKIApAQCAtNjA0LDcgKzYwNCw3IEBACiAJaXR2LT5zdGQgPSBpdnR2X3BhcnNlX3N0ZChpdHYpOwogCWlmIChpdHYtPnN0ZCA9PSAwICYmIHR1bmVydHlwZSA+PSAwKQogCQlpdHYtPnN0ZCA9IHR1bmVydHlwZSA/IFY0TDJfU1REX01OIDogKFY0TDJfU1REX0FMTCAmIH5WNEwyX1NURF9NTik7Ci0JaXR2LT5oYXNfY3gyMzQxNSA9IChpdHYtPmRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSVZUVjE1KTsKKwlpdHYtPmhhc19jeDIzNDE1ID0gKGl0di0+cGRldi0+ZGV2aWNlID09IFBDSV9ERVZJQ0VfSURfSVZUVjE1KTsKIAljaGlwbmFtZSA9IGl0di0+aGFzX2N4MjM0MTUgPyAiY3gyMzQxNSIgOiAiY3gyMzQxNiI7CiAJaWYgKGl0di0+b3B0aW9ucy5jYXJkdHlwZSA9PSAtMSkgewogCQlJVlRWX0lORk8oIklnbm9yZSBjYXJkIChkZXRlY3RlZCAlcyBiYXNlZCBjaGlwKVxuIiwgY2hpcG5hbWUpOwpAQCAtNjE3LDkgKzYxNyw5IEBACiAJCUlWVFZfRVJSKCJVbmtub3duIHVzZXIgc3BlY2lmaWVkIHR5cGUsIHRyeWluZyB0byBhdXRvZGV0ZWN0IGNhcmRcbiIpOwogCX0KIAlpZiAoaXR2LT5jYXJkID09IE5VTEwpIHsKLQkJaWYgKGl0di0+ZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IElWVFZfUENJX0lEX0hBVVBQQVVHRSB8fAotCQkgICAgaXR2LT5kZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gSVZUVl9QQ0lfSURfSEFVUFBBVUdFX0FMVDEgfHwKLQkJICAgIGl0di0+ZGV2LT5zdWJzeXN0ZW1fdmVuZG9yID09IElWVFZfUENJX0lEX0hBVVBQQVVHRV9BTFQyKSB7CisJCWlmIChpdHYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gSVZUVl9QQ0lfSURfSEFVUFBBVUdFIHx8CisJCSAgICBpdHYtPnBkZXYtPnN1YnN5c3RlbV92ZW5kb3IgPT0gSVZUVl9QQ0lfSURfSEFVUFBBVUdFX0FMVDEgfHwKKwkJICAgIGl0di0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciA9PSBJVlRWX1BDSV9JRF9IQVVQUEFVR0VfQUxUMikgewogCQkJaXR2LT5jYXJkID0gaXZ0dl9nZXRfY2FyZChpdHYtPmhhc19jeDIzNDE1ID8gSVZUVl9DQVJEX1BWUl8zNTAgOiBJVlRWX0NBUkRfUFZSXzE1MCk7CiAJCQlJVlRWX0lORk8oIkF1dG9kZXRlY3RlZCBIYXVwcGF1Z2UgY2FyZCAoJXMgYmFzZWQpXG4iLAogCQkJCQljaGlwbmFtZSk7CkBAIC02MzAsMTMgKzYzMCwxMyBAQAogCQkJaWYgKGl0di0+Y2FyZC0+cGNpX2xpc3QgPT0gTlVMTCkKIAkJCQljb250aW51ZTsKIAkJCWZvciAoaiA9IDA7IGl0di0+Y2FyZC0+cGNpX2xpc3Rbal0uZGV2aWNlOyBqKyspIHsKLQkJCQlpZiAoaXR2LT5kZXYtPmRldmljZSAhPQorCQkJCWlmIChpdHYtPnBkZXYtPmRldmljZSAhPQogCQkJCSAgICBpdHYtPmNhcmQtPnBjaV9saXN0W2pdLmRldmljZSkKIAkJCQkJY29udGludWU7Ci0JCQkJaWYgKGl0di0+ZGV2LT5zdWJzeXN0ZW1fdmVuZG9yICE9CisJCQkJaWYgKGl0di0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciAhPQogCQkJCSAgICBpdHYtPmNhcmQtPnBjaV9saXN0W2pdLnN1YnN5c3RlbV92ZW5kb3IpCiAJCQkJCWNvbnRpbnVlOwotCQkJCWlmIChpdHYtPmRldi0+c3Vic3lzdGVtX2RldmljZSAhPQorCQkJCWlmIChpdHYtPnBkZXYtPnN1YnN5c3RlbV9kZXZpY2UgIT0KIAkJCQkgICAgaXR2LT5jYXJkLT5wY2lfbGlzdFtqXS5zdWJzeXN0ZW1fZGV2aWNlKQogCQkJCQljb250aW51ZTsKIAkJCQlJVlRWX0lORk8oIkF1dG9kZXRlY3RlZCAlcyBjYXJkICglcyBiYXNlZClcbiIsCkBAIC02NTAsOSArNjUwLDkgQEAKIAlpZiAoaXR2LT5jYXJkID09IE5VTEwpIHsKIAkJaXR2LT5jYXJkID0gaXZ0dl9nZXRfY2FyZChJVlRWX0NBUkRfUFZSXzE1MCk7CiAJCUlWVFZfRVJSKCJVbmtub3duIGNhcmQ6IHZlbmRvci9kZXZpY2U6IFslMDR4OiUwNHhdXG4iLAotCQkgICAgIGl0di0+ZGV2LT52ZW5kb3IsIGl0di0+ZGV2LT5kZXZpY2UpOworCQkgICAgIGl0di0+cGRldi0+dmVuZG9yLCBpdHYtPnBkZXYtPmRldmljZSk7CiAJCUlWVFZfRVJSKCIgICAgICAgICAgICAgIHN1YnN5c3RlbSB2ZW5kb3IvZGV2aWNlOiBbJTA0eDolMDR4XVxuIiwKLQkJICAgICBpdHYtPmRldi0+c3Vic3lzdGVtX3ZlbmRvciwgaXR2LT5kZXYtPnN1YnN5c3RlbV9kZXZpY2UpOworCQkgICAgIGl0di0+cGRldi0+c3Vic3lzdGVtX3ZlbmRvciwgaXR2LT5wZGV2LT5zdWJzeXN0ZW1fZGV2aWNlKTsKIAkJSVZUVl9FUlIoIiAgICAgICAgICAgICAgJXMgYmFzZWRcbiIsIGNoaXBuYW1lKTsKIAkJSVZUVl9FUlIoIkRlZmF1bHRpbmcgdG8gJXMgY2FyZFxuIiwgaXR2LT5jYXJkLT5uYW1lKTsKIAkJSVZUVl9FUlIoIlBsZWFzZSBtYWlsIHRoZSB2ZW5kb3IvZGV2aWNlIGFuZCBzdWJzeXN0ZW0gdmVuZG9yL2RldmljZSBJRHMgYW5kIHdoYXQga2luZCBvZlxuIik7CkBAIC02NzEsNyArNjcxLDcgQEAKICAqLwogc3RhdGljIGludCBfX2RldmluaXQgaXZ0dl9pbml0X3N0cnVjdDEoc3RydWN0IGl2dHYgKml0dikKIHsKLQlpdHYtPmJhc2VfYWRkciA9IHBjaV9yZXNvdXJjZV9zdGFydChpdHYtPmRldiwgMCk7CisJaXR2LT5iYXNlX2FkZHIgPSBwY2lfcmVzb3VyY2Vfc3RhcnQoaXR2LT5wZGV2LCAwKTsKIAlpdHYtPmVuY19tYm94Lm1heF9tYm94ID0gMjsgLyogdGhlIGVuY29kZXIgaGFzIDMgbWFpbGJveGVzICgwLTIpICovCiAJaXR2LT5kZWNfbWJveC5tYXhfbWJveCA9IDE7IC8qIHRoZSBkZWNvZGVyIGhhcyAyIG1haWxib3hlcyAoMC0xKSAqLwogCkBAIC02ODIsNyArNjgyLDcgQEAKIAlzcGluX2xvY2tfaW5pdCgmaXR2LT5sb2NrKTsKIAlzcGluX2xvY2tfaW5pdCgmaXR2LT5kbWFfcmVnX2xvY2spOwogCi0JaXR2LT5pcnFfd29ya19xdWV1ZXMgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZShpdHYtPmRldmljZS5uYW1lKTsKKwlpdHYtPmlycV93b3JrX3F1ZXVlcyA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGl0di0+djRsMl9kZXYubmFtZSk7CiAJaWYgKGl0di0+aXJxX3dvcmtfcXVldWVzID09IE5VTEwpIHsKIAkJSVZUVl9FUlIoIkNvdWxkIG5vdCBjcmVhdGUgaXZ0diB3b3JrcXVldWVcbiIpOwogCQlyZXR1cm4gLTE7CkBAIC03NjYsNyArNzY2LDcgQEAKIAlpdHYtPmF1ZGlvX2lucHV0ID0gaXR2LT5jYXJkLT52aWRlb19pbnB1dHNbaV0uYXVkaW9faW5kZXg7CiB9CiAKLXN0YXRpYyBpbnQgaXZ0dl9zZXR1cF9wY2koc3RydWN0IGl2dHYgKml0diwgc3RydWN0IHBjaV9kZXYgKmRldiwKK3N0YXRpYyBpbnQgaXZ0dl9zZXR1cF9wY2koc3RydWN0IGl2dHYgKml0diwgc3RydWN0IHBjaV9kZXYgKnBkZXYsCiAJCQkgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCiB7CiAJdTE2IGNtZDsKQEAgLTc3NSwxMSArNzc1LDExIEBACiAKIAlJVlRWX0RFQlVHX0lORk8oIkVuYWJsaW5nIHBjaSBkZXZpY2VcbiIpOwogCi0JaWYgKHBjaV9lbmFibGVfZGV2aWNlKGRldikpIHsKKwlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpIHsKIAkJSVZUVl9FUlIoIkNhbid0IGVuYWJsZSBkZXZpY2UhXG4iKTsKIAkJcmV0dXJuIC1FSU87CiAJfQotCWlmIChwY2lfc2V0X2RtYV9tYXNrKGRldiwgMHhmZmZmZmZmZikpIHsKKwlpZiAocGNpX3NldF9kbWFfbWFzayhwZGV2LCAweGZmZmZmZmZmKSkgewogCQlJVlRWX0VSUigiTm8gc3VpdGFibGUgRE1BIGF2YWlsYWJsZS5cbiIpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC04MDUsMTEgKzgwNSwxMSBAQAogCX0KIAogCS8qIENoZWNrIGZvciBidXMgbWFzdGVyaW5nICovCi0JcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7CisJcGNpX3JlYWRfY29uZmlnX3dvcmQocGRldiwgUENJX0NPTU1BTkQsICZjbWQpOwogCWlmICghKGNtZCAmIFBDSV9DT01NQU5EX01BU1RFUikpIHsKIAkJSVZUVl9ERUJVR19JTkZPKCJBdHRlbXB0aW5nIHRvIGVuYWJsZSBCdXMgTWFzdGVyaW5nXG4iKTsKLQkJcGNpX3NldF9tYXN0ZXIoZGV2KTsKLQkJcGNpX3JlYWRfY29uZmlnX3dvcmQoZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7CisJCXBjaV9zZXRfbWFzdGVyKHBkZXYpOworCQlwY2lfcmVhZF9jb25maWdfd29yZChwZGV2LCBQQ0lfQ09NTUFORCwgJmNtZCk7CiAJCWlmICghKGNtZCAmIFBDSV9DT01NQU5EX01BU1RFUikpIHsKIAkJCUlWVFZfRVJSKCJCdXMgTWFzdGVyaW5nIGlzIG5vdCBlbmFibGVkXG4iKTsKIAkJCXJldHVybiAtRU5YSU87CkBAIC04MTcsMjYgKzgxNywyNiBAQAogCX0KIAlJVlRWX0RFQlVHX0lORk8oIkJ1cyBNYXN0ZXJpbmcgRW5hYmxlZC5cbiIpOwogCi0JcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZjYXJkX3Jldik7Ci0JcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgJnBjaV9sYXRlbmN5KTsKKwlwY2lfcmVhZF9jb25maWdfYnl0ZShwZGV2LCBQQ0lfQ0xBU1NfUkVWSVNJT04sICZjYXJkX3Jldik7CisJcGNpX3JlYWRfY29uZmlnX2J5dGUocGRldiwgUENJX0xBVEVOQ1lfVElNRVIsICZwY2lfbGF0ZW5jeSk7CiAKIAlpZiAocGNpX2xhdGVuY3kgPCA2NCAmJiBpdnR2X3BjaV9sYXRlbmN5KSB7CiAJCUlWVFZfSU5GTygiVW5yZWFzb25hYmx5IGxvdyBsYXRlbmN5IHRpbWVyLCAiCiAJCQkgICAgICAgInNldHRpbmcgdG8gNjQgKHdhcyAlZClcbiIsIHBjaV9sYXRlbmN5KTsKLQkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKGRldiwgUENJX0xBVEVOQ1lfVElNRVIsIDY0KTsKLQkJcGNpX3JlYWRfY29uZmlnX2J5dGUoZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwgJnBjaV9sYXRlbmN5KTsKKwkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCA2NCk7CisJCXBjaV9yZWFkX2NvbmZpZ19ieXRlKHBkZXYsIFBDSV9MQVRFTkNZX1RJTUVSLCAmcGNpX2xhdGVuY3kpOwogCX0KIAkvKiBUaGlzIGNvbmZpZyBzcGFjZSB2YWx1ZSByZWxhdGVzIHRvIERNQSBsYXRlbmNpZXMuIFRoZQogCSAgIGRlZmF1bHQgdmFsdWUgMHg4MDgwIGlzIHRvbyBsb3cgaG93ZXZlciBhbmQgd2lsbCBsZWFkCiAJICAgdG8gRE1BIGVycm9ycy4gMHhmZmZmIGlzIHRoZSBtYXggdmFsdWUgd2hpY2ggc29sdmVzCiAJICAgdGhlc2UgcHJvYmxlbXMuICovCi0JcGNpX3dyaXRlX2NvbmZpZ19kd29yZChkZXYsIDB4NDAsIDB4ZmZmZik7CisJcGNpX3dyaXRlX2NvbmZpZ19kd29yZChwZGV2LCAweDQwLCAweGZmZmYpOwogCiAJSVZUVl9ERUJVR19JTkZPKCIlZCAocmV2ICVkKSBhdCAlMDJ4OiUwMnguJXgsICIKIAkJICAgImlycTogJWQsIGxhdGVuY3k6ICVkLCBtZW1vcnk6IDB4JWx4XG4iLAotCQkgICBpdHYtPmRldi0+ZGV2aWNlLCBjYXJkX3JldiwgZGV2LT5idXMtPm51bWJlciwKLQkJICAgUENJX1NMT1QoZGV2LT5kZXZmbiksIFBDSV9GVU5DKGRldi0+ZGV2Zm4pLAotCQkgICBpdHYtPmRldi0+aXJxLCBwY2lfbGF0ZW5jeSwgKHVuc2lnbmVkIGxvbmcpaXR2LT5iYXNlX2FkZHIpOworCQkgICBwZGV2LT5kZXZpY2UsIGNhcmRfcmV2LCBwZGV2LT5idXMtPm51bWJlciwKKwkJICAgUENJX1NMT1QocGRldi0+ZGV2Zm4pLCBQQ0lfRlVOQyhwZGV2LT5kZXZmbiksCisJCSAgIHBkZXYtPmlycSwgcGNpX2xhdGVuY3ksICh1bnNpZ25lZCBsb25nKWl0di0+YmFzZV9hZGRyKTsKIAogCXJldHVybiAwOwogfQpAQCAtOTM1LDcgKzkzNSw3IEBACiAJfQogfQogCi1zdGF0aWMgaW50IF9fZGV2aW5pdCBpdnR2X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpkZXYsCitzdGF0aWMgaW50IF9fZGV2aW5pdCBpdnR2X3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LAogCQkJCWNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfaWQpCiB7CiAJaW50IHJldHZhbCA9IDA7CkBAIC05NDUsMTcgKzk0NSwxNyBAQAogCWl0diA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBpdnR2KSwgR0ZQX0FUT01JQyk7CiAJaWYgKGl0diA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQlpdHYtPmRldiA9IGRldjsKKwlpdHYtPnBkZXYgPSBwZGV2OwogCWl0di0+aW5zdGFuY2UgPSBhdG9taWNfaW5jX3JldHVybigmaXZ0dl9pbnN0YW5jZSkgLSAxOwogCi0JcmV0dmFsID0gdjRsMl9kZXZpY2VfcmVnaXN0ZXIoJmRldi0+ZGV2LCAmaXR2LT5kZXZpY2UpOworCXJldHZhbCA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZwZGV2LT5kZXYsICZpdHYtPnY0bDJfZGV2KTsKIAlpZiAocmV0dmFsKSB7CiAJCWtmcmVlKGl0dik7CiAJCXJldHVybiByZXR2YWw7CiAJfQogCS8qICJpdnR2ICsgUENJIElEIiBpcyBhIGJpdCBvZiBhIG1vdXRoZnVsLCBzbyB1c2UKIAkgICAiaXZ0diArIGluc3RhbmNlIiBpbnN0ZWFkLiAqLwotCXNucHJpbnRmKGl0di0+ZGV2aWNlLm5hbWUsIHNpemVvZihpdHYtPmRldmljZS5uYW1lKSwKKwlzbnByaW50ZihpdHYtPnY0bDJfZGV2Lm5hbWUsIHNpemVvZihpdHYtPnY0bDJfZGV2Lm5hbWUpLAogCQkJIml2dHYlZCIsIGl0di0+aW5zdGFuY2UpOwogCUlWVFZfSU5GTygiSW5pdGlhbGl6aW5nIGNhcmQgJWRcbiIsIGl0di0+aW5zdGFuY2UpOwogCkBAIC05NzIsMTIgKzk3MiwxMSBAQAogCUlWVFZfREVCVUdfSU5GTygiYmFzZSBhZGRyOiAweCUwOHhcbiIsIGl0di0+YmFzZV9hZGRyKTsKIAogCS8qIFBDSSBEZXZpY2UgU2V0dXAgKi8KLQlpZiAoKHJldHZhbCA9IGl2dHZfc2V0dXBfcGNpKGl0diwgZGV2LCBwY2lfaWQpKSAhPSAwKSB7Ci0JCWlmIChyZXR2YWwgPT0gLUVJTykKLQkJCWdvdG8gZnJlZV93b3JrcXVldWU7Ci0JCWVsc2UgaWYgKHJldHZhbCA9PSAtRU5YSU8pCi0JCQlnb3RvIGZyZWVfbWVtOwotCX0KKwlyZXR2YWwgPSBpdnR2X3NldHVwX3BjaShpdHYsIHBkZXYsIHBjaV9pZCk7CisJaWYgKHJldHZhbCA9PSAtRUlPKQorCQlnb3RvIGZyZWVfd29ya3F1ZXVlOworCWlmIChyZXR2YWwgPT0gLUVOWElPKQorCQlnb3RvIGZyZWVfbWVtOwogCiAJLyogbWFwIGlvIG1lbW9yeSAqLwogCUlWVFZfREVCVUdfSU5GTygiYXR0ZW1wdGluZyBpb3JlbWFwIGF0IDB4JTA4eCBsZW4gMHglMDh4XG4iLApAQCAtMTE1NCw4ICsxMTUzLDggQEAKIAlpdnR2X3NldF9pcnFfbWFzayhpdHYsIDB4ZmZmZmZmZmYpOwogCiAJLyogUmVnaXN0ZXIgSVJRICovCi0JcmV0dmFsID0gcmVxdWVzdF9pcnEoaXR2LT5kZXYtPmlycSwgaXZ0dl9pcnFfaGFuZGxlciwKLQkgICAgIElSUUZfU0hBUkVEIHwgSVJRRl9ESVNBQkxFRCwgaXR2LT5kZXZpY2UubmFtZSwgKHZvaWQgKilpdHYpOworCXJldHZhbCA9IHJlcXVlc3RfaXJxKGl0di0+cGRldi0+aXJxLCBpdnR2X2lycV9oYW5kbGVyLAorCSAgICAgSVJRRl9TSEFSRUQgfCBJUlFGX0RJU0FCTEVELCBpdHYtPnY0bDJfZGV2Lm5hbWUsICh2b2lkICopaXR2KTsKIAlpZiAocmV0dmFsKSB7CiAJCUlWVFZfRVJSKCJGYWlsZWQgdG8gcmVnaXN0ZXIgaXJxICVkXG4iLCByZXR2YWwpOwogCQlnb3RvIGZyZWVfaTJjOwpAQCAtMTE3Nyw3ICsxMTc2LDcgQEAKIGZyZWVfc3RyZWFtczoKIAlpdnR2X3N0cmVhbXNfY2xlYW51cChpdHYsIDEpOwogZnJlZV9pcnE6Ci0JZnJlZV9pcnEoaXR2LT5kZXYtPmlycSwgKHZvaWQgKilpdHYpOworCWZyZWVfaXJxKGl0di0+cGRldi0+aXJxLCAodm9pZCAqKWl0dik7CiBmcmVlX2kyYzoKIAlleGl0X2l2dHZfaTJjKGl0dik7CiBmcmVlX2lvOgpAQCAtMTE5NCw3ICsxMTkzLDcgQEAKIAkJcmV0dmFsID0gLUVOT0RFVjsKIAlJVlRWX0VSUigiRXJyb3IgJWQgb24gaW5pdGlhbGl6YXRpb25cbiIsIHJldHZhbCk7CiAKLQl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZpdHYtPmRldmljZSk7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmaXR2LT52NGwyX2Rldik7CiAJa2ZyZWUoaXR2KTsKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtMTI5MiwxMCArMTI5MSwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZCBpdnR2X3JlbW92ZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKK3N0YXRpYyB2b2lkIGl2dHZfcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCB2NGwyX2RldmljZSAqZGV2ID0gZGV2X2dldF9kcnZkYXRhKCZwY2lfZGV2LT5kZXYpOwotCXN0cnVjdCBpdnR2ICppdHYgPSB0b19pdnR2KGRldik7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlzdHJ1Y3QgaXZ0diAqaXR2ID0gdG9faXZ0dih2NGwyX2Rldik7CiAJaW50IGk7CiAKIAlJVlRWX0RFQlVHX0lORk8oIlJlbW92aW5nIGNhcmRcbiIpOwpAQCAtMTMzNiwxMSArMTMzNSw5IEBACiAJaXZ0dl9zdHJlYW1zX2NsZWFudXAoaXR2LCAxKTsKIAlpdnR2X3VkbWFfZnJlZShpdHYpOwogCi0JdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmaXR2LT5kZXZpY2UpOwotCiAJZXhpdF9pdnR2X2kyYyhpdHYpOwogCi0JZnJlZV9pcnEoaXR2LT5kZXYtPmlycSwgKHZvaWQgKilpdHYpOworCWZyZWVfaXJxKGl0di0+cGRldi0+aXJxLCAodm9pZCAqKWl0dik7CiAJaXZ0dl9pb3VubWFwKGl0dik7CiAKIAlyZWxlYXNlX21lbV9yZWdpb24oaXR2LT5iYXNlX2FkZHIsIElWVFZfRU5DT0RFUl9TSVpFKTsKQEAgLTEzNDgsMTEgKzEzNDUsMTMgQEAKIAlpZiAoaXR2LT5oYXNfY3gyMzQxNSkKIAkJcmVsZWFzZV9tZW1fcmVnaW9uKGl0di0+YmFzZV9hZGRyICsgSVZUVl9ERUNPREVSX09GRlNFVCwgSVZUVl9ERUNPREVSX1NJWkUpOwogCi0JcGNpX2Rpc2FibGVfZGV2aWNlKGl0di0+ZGV2KTsKKwlwY2lfZGlzYWJsZV9kZXZpY2UoaXR2LT5wZGV2KTsKIAlmb3IgKGkgPSAwOyBpIDwgSVZUVl9WQklfRlJBTUVTOyBpKyspCiAJCWtmcmVlKGl0di0+dmJpLnNsaWNlZF9tcGVnX2RhdGFbaV0pOwogCiAJcHJpbnRrKEtFUk5fSU5GTyAiaXZ0djogUmVtb3ZlZCAlc1xuIiwgaXR2LT5jYXJkX25hbWUpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmaXR2LT52NGwyX2Rldik7CiAJa2ZyZWUoaXR2KTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZHJpdmVyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuaAppbmRleCBjZThkOWI3Li40NDBmNzMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1kcml2ZXIuaApAQCAtMTMzLDcgKzEzMyw3IEBACiAjZGVmaW5lIElWVFZfREVCVUcoeCwgdHlwZSwgZm10LCBhcmdzLi4uKSBcCiAJZG8geyBcCiAJCWlmICgoeCkgJiBpdnR2X2RlYnVnKSBcCi0JCQl2NGwyX2luZm8oJml0di0+ZGV2aWNlLCAiICIgdHlwZSAiOiAiIGZtdCAsICMjYXJncyk7CVwKKwkJCXY0bDJfaW5mbygmaXR2LT52NGwyX2RldiwgIiAiIHR5cGUgIjogIiBmbXQgLCAjI2FyZ3MpOwlcCiAJfSB3aGlsZSAoMCkKICNkZWZpbmUgSVZUVl9ERUJVR19XQVJOKGZtdCwgYXJncy4uLikgIElWVFZfREVCVUcoSVZUVl9EQkdGTEdfV0FSTiwgICJ3YXJuIiwgIGZtdCAsICMjIGFyZ3MpCiAjZGVmaW5lIElWVFZfREVCVUdfSU5GTyhmbXQsIGFyZ3MuLi4pICBJVlRWX0RFQlVHKElWVFZfREJHRkxHX0lORk8sICAiaW5mbyIsICBmbXQgLCAjIyBhcmdzKQpAQCAtMTQ5LDcgKzE0OSw3IEBACiAjZGVmaW5lIElWVFZfREVCVUdfSElHSF9WT0woeCwgdHlwZSwgZm10LCBhcmdzLi4uKSBcCiAJZG8geyBcCiAJCWlmICgoKHgpICYgaXZ0dl9kZWJ1ZykgJiYgKGl2dHZfZGVidWcgJiBJVlRWX0RCR0ZMR19ISUdIVk9MKSkgCVwKLQkJCXY0bDJfaW5mbygmaXR2LT5kZXZpY2UsICIgIiB0eXBlICI6ICIgZm10ICwgIyNhcmdzKTsJXAorCQkJdjRsMl9pbmZvKCZpdHYtPnY0bDJfZGV2LCAiICIgdHlwZSAiOiAiIGZtdCAsICMjYXJncyk7CVwKIAl9IHdoaWxlICgwKQogI2RlZmluZSBJVlRWX0RFQlVHX0hJX1dBUk4oZm10LCBhcmdzLi4uKSAgSVZUVl9ERUJVR19ISUdIX1ZPTChJVlRWX0RCR0ZMR19XQVJOLCAgIndhcm4iLCAgZm10ICwgIyMgYXJncykKICNkZWZpbmUgSVZUVl9ERUJVR19ISV9JTkZPKGZtdCwgYXJncy4uLikgIElWVFZfREVCVUdfSElHSF9WT0woSVZUVl9EQkdGTEdfSU5GTywgICJpbmZvIiwgIGZtdCAsICMjIGFyZ3MpCkBAIC0xNjMsOSArMTYzLDkgQEAKICNkZWZpbmUgSVZUVl9ERUJVR19ISV9ZVVYoZm10LCBhcmdzLi4uKSAgIElWVFZfREVCVUdfSElHSF9WT0woSVZUVl9EQkdGTEdfWVVWLCAgICJ5dXYiLCAgIGZtdCAsICMjIGFyZ3MpCiAKIC8qIFN0YW5kYXJkIGtlcm5lbCBtZXNzYWdlcyAqLwotI2RlZmluZSBJVlRWX0VSUihmbXQsIGFyZ3MuLi4pICAgICAgdjRsMl9lcnIoJml0di0+ZGV2aWNlLCBmbXQgLCAjIyBhcmdzKQotI2RlZmluZSBJVlRWX1dBUk4oZm10LCBhcmdzLi4uKSAgICAgdjRsMl93YXJuKCZpdHYtPmRldmljZSwgZm10ICwgIyMgYXJncykKLSNkZWZpbmUgSVZUVl9JTkZPKGZtdCwgYXJncy4uLikgICAgIHY0bDJfaW5mbygmaXR2LT5kZXZpY2UsIGZtdCAsICMjIGFyZ3MpCisjZGVmaW5lIElWVFZfRVJSKGZtdCwgYXJncy4uLikgICAgICB2NGwyX2VycigmaXR2LT52NGwyX2RldiwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgSVZUVl9XQVJOKGZtdCwgYXJncy4uLikgICAgIHY0bDJfd2FybigmaXR2LT52NGwyX2RldiwgZm10ICwgIyMgYXJncykKKyNkZWZpbmUgSVZUVl9JTkZPKGZtdCwgYXJncy4uLikgICAgIHY0bDJfaW5mbygmaXR2LT52NGwyX2RldiwgZm10ICwgIyMgYXJncykKIAogLyogb3V0cHV0IG1vZGVzIChjeDIzNDE1IG9ubHkpICovCiAjZGVmaW5lIE9VVF9OT05FICAgICAgICAwCkBAIC0zMTUsNyArMzE1LDcgQEAKIHN0cnVjdCBpdnR2X3N0cmVhbSB7CiAJLyogVGhlc2UgZmlyc3QgZm91ciBmaWVsZHMgYXJlIGFsd2F5cyBzZXQsIGV2ZW4gaWYgdGhlIHN0cmVhbQogCSAgIGlzIG5vdCBhY3R1YWxseSBjcmVhdGVkLiAqLwotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnY0bDJkZXY7CS8qIE5VTEwgd2hlbiBzdHJlYW0gbm90IGNyZWF0ZWQgKi8KKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OwkvKiBOVUxMIHdoZW4gc3RyZWFtIG5vdCBjcmVhdGVkICovCiAJc3RydWN0IGl2dHYgKml0djsgCQkvKiBmb3IgZWFzZSBvZiB1c2UgKi8KIAljb25zdCBjaGFyICpuYW1lOwkJLyogbmFtZSBvZiB0aGUgc3RyZWFtICovCiAJaW50IHR5cGU7CQkJLyogc3RyZWFtIHR5cGUgKi8KQEAgLTU5Miw3ICs1OTIsNyBAQAogLyogU3RydWN0IHRvIGhvbGQgaW5mbyBhYm91dCBpdnR2IGNhcmRzICovCiBzdHJ1Y3QgaXZ0diB7CiAJLyogR2VuZXJhbCBmaXhlZCBjYXJkIGRhdGEgKi8KLQlzdHJ1Y3QgcGNpX2RldiAqZGV2OwkJLyogUENJIGRldmljZSAqLworCXN0cnVjdCBwY2lfZGV2ICpwZGV2OwkJLyogUENJIGRldmljZSAqLwogCWNvbnN0IHN0cnVjdCBpdnR2X2NhcmQgKmNhcmQ7CS8qIGNhcmQgaW5mb3JtYXRpb24gKi8KIAljb25zdCBjaGFyICpjYXJkX25hbWU7ICAgICAgICAgIC8qIGZ1bGwgbmFtZSBvZiB0aGUgY2FyZCAqLwogCWNvbnN0IHN0cnVjdCBpdnR2X2NhcmRfdHVuZXJfaTJjICpjYXJkX2kyYzsgLyogaTJjIGFkZHJlc3NlcyB0byBwcm9iZSBmb3IgdHVuZXIgKi8KQEAgLTYxMiw3ICs2MTIsNyBAQAogCXZvbGF0aWxlIHZvaWQgX19pb21lbSAqcmVnX21lbTsgLyogcG9pbnRlciB0byBtYXBwZWQgcmVnaXN0ZXJzICovCiAJc3RydWN0IGl2dHZfb3B0aW9ucyBvcHRpb25zOyAJLyogdXNlciBvcHRpb25zICovCiAKLQlzdHJ1Y3QgdjRsMl9kZXZpY2UgZGV2aWNlOworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKIAlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2RfZ3BpbzsJLyogR1BJTyBzdWItZGV2aWNlICovCiAJdTE2IGluc3RhbmNlOwogCkBAIC02OTYsNyArNjk2LDcgQEAKIAl1NjQgdmJpX2RhdGFfaW5zZXJ0ZWQ7ICAgICAgICAgIC8qIG51bWJlciBvZiBWQkkgYnl0ZXMgaW5zZXJ0ZWQgaW50byB0aGUgTVBFRyBzdHJlYW0gKi8KIAl1MzIgbGFzdF9kZWNfdGltaW5nWzNdOyAgICAgICAgIC8qIGNhY2hlIGxhc3QgcmV0cmlldmVkIHB0cy9zY3IvZnJhbWUgdmFsdWVzICovCiAJdW5zaWduZWQgbG9uZyBkdWFsd2F0Y2hfamlmZmllczsvKiBqaWZmaWVzIHZhbHVlIG9mIHRoZSBwcmV2aW91cyBkdWFsd2F0Y2ggY2hlY2sgKi8KLQl1MTYgZHVhbHdhdGNoX3N0ZXJlb19tb2RlOyAgICAgIC8qIGN1cnJlbnQgZGV0ZWN0ZWQgZHVhbHdhdGNoIHN0ZXJlbyBtb2RlICovCisJdTMyIGR1YWx3YXRjaF9zdGVyZW9fbW9kZTsgICAgICAvKiBjdXJyZW50IGRldGVjdGVkIGR1YWx3YXRjaCBzdGVyZW8gbW9kZSAqLwogCiAKIAkvKiBWQkkgc3RhdGUgaW5mbyAqLwpAQCAtNzE5LDkgKzcxOSw5IEBACiAJc3RydWN0IG9zZF9pbmZvICpvc2RfaW5mbzsgICAgICAvKiBpdnR2ZmIgcHJpdmF0ZSBPU0QgaW5mbyAqLwogfTsKIAotc3RhdGljIGlubGluZSBzdHJ1Y3QgaXZ0diAqdG9faXZ0dihzdHJ1Y3QgdjRsMl9kZXZpY2UgKmRldikKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGl2dHYgKnRvX2l2dHYoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldikKIHsKLQlyZXR1cm4gY29udGFpbmVyX29mKGRldiwgc3RydWN0IGl2dHYsIGRldmljZSk7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IGl2dHYsIHY0bDJfZGV2KTsKIH0KIAogLyogR2xvYmFscyAqLwpAQCAtNzg4LDcgKzc4OCw3IEBACiAvKiBDYWxsIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgZm9yIGFsbCBzdWJkZXZzIG1hdGNoaW5nIGh3IChpZiAwLCB0aGVuCiAgICBtYXRjaCB0aGVtIGFsbCkuIElnbm9yZSBhbnkgZXJyb3JzLiAqLwogI2RlZmluZSBpdnR2X2NhbGxfaHcoaXR2LCBodywgbywgZiwgYXJncy4uLikgCQkJCVwKLQlfX3Y0bDJfZGV2aWNlX2NhbGxfc3ViZGV2cygmKGl0diktPmRldmljZSwgIShodykgfHwgKHNkLT5ncnBfaWQgJiAoaHcpKSwgbywgZiAsICMjYXJncykKKwlfX3Y0bDJfZGV2aWNlX2NhbGxfc3ViZGV2cygmKGl0diktPnY0bDJfZGV2LCAhKGh3KSB8fCAoc2QtPmdycF9pZCAmIChodykpLCBvLCBmICwgIyNhcmdzKQogCiAjZGVmaW5lIGl2dHZfY2FsbF9hbGwoaXR2LCBvLCBmLCBhcmdzLi4uKSBpdnR2X2NhbGxfaHcoaXR2LCAwLCBvLCBmICwgIyNhcmdzKQogCkBAIC03OTYsNyArNzk2LDcgQEAKICAgIG1hdGNoIHRoZW0gYWxsKS4gSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgYW4gZXJyb3Igb3RoZXIgdGhhbiAwIG9yCiAgICAtRU5PSU9DVExDTUQsIHRoZW4gcmV0dXJuIHdpdGggdGhhdCBlcnJvciBjb2RlLiAqLwogI2RlZmluZSBpdnR2X2NhbGxfaHdfZXJyKGl0diwgaHcsIG8sIGYsIGFyZ3MuLi4pICAJCVwKLQlfX3Y0bDJfZGV2aWNlX2NhbGxfc3ViZGV2c191bnRpbF9lcnIoJihpdHYpLT5kZXZpY2UsICEoaHcpIHx8IChzZC0+Z3JwX2lkICYgKGh3KSksIG8sIGYgLCAjI2FyZ3MpCisJX192NGwyX2RldmljZV9jYWxsX3N1YmRldnNfdW50aWxfZXJyKCYoaXR2KS0+djRsMl9kZXYsICEoaHcpIHx8IChzZC0+Z3JwX2lkICYgKGh3KSksIG8sIGYgLCAjI2FyZ3MpCiAKICNkZWZpbmUgaXZ0dl9jYWxsX2FsbF9lcnIoaXR2LCBvLCBmLCBhcmdzLi4uKSBpdnR2X2NhbGxfaHdfZXJyKGl0diwgMCwgbywgZiAsICMjYXJncykKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlsZW9wcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlsZW9wcy5jCmluZGV4IGQ1OTRiYzIuLmNmYWFjZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpbGVvcHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maWxlb3BzLmMKQEAgLTE0OCwxMCArMTQ4LDEwIEBACiBzdGF0aWMgdm9pZCBpdnR2X2R1YWx3YXRjaChzdHJ1Y3QgaXZ0diAqaXR2KQogewogCXN0cnVjdCB2NGwyX3R1bmVyIHZ0OwotCXUxNiBuZXdfYml0bWFwOwotCXUxNiBuZXdfc3RlcmVvX21vZGU7Ci0JY29uc3QgdTE2IHN0ZXJlb19tYXNrID0gMHgwMzAwOwotCWNvbnN0IHUxNiBkdWFsID0gMHgwMjAwOworCXUzMiBuZXdfYml0bWFwOworCXUzMiBuZXdfc3RlcmVvX21vZGU7CisJY29uc3QgdTMyIHN0ZXJlb19tYXNrID0gMHgwMzAwOworCWNvbnN0IHUzMiBkdWFsID0gMHgwMjAwOwogCiAJbmV3X3N0ZXJlb19tb2RlID0gaXR2LT5wYXJhbXMuYXVkaW9fcHJvcGVydGllcyAmIHN0ZXJlb19tYXNrOwogCW1lbXNldCgmdnQsIDAsIHNpemVvZih2dCkpOwpAQCAtOTkxLDcgKzk5MSw3IEBACiAJbXV0ZXhfbG9jaygmaXR2LT5zZXJpYWxpemVfbG9jayk7CiAJaWYgKGl2dHZfaW5pdF9vbl9maXJzdF9vcGVuKGl0dikpIHsKIAkJSVZUVl9FUlIoIkZhaWxlZCB0byBpbml0aWFsaXplIG9uIG1pbm9yICVkXG4iLAotCQkJCXMtPnY0bDJkZXYtPm1pbm9yKTsKKwkJCQl2ZGV2LT5taW5vcik7CiAJCW11dGV4X3VubG9jaygmaXR2LT5zZXJpYWxpemVfbG9jayk7CiAJCXJldHVybiAtRU5YSU87CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlybXdhcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWZpcm13YXJlLmMKaW5kZXggNmRiYTU1Yi4uYzFiN2VjNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZmlybXdhcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1maXJtd2FyZS5jCkBAIC01Miw3ICs1Miw3IEBACiAJaW50IHJldHJpZXMgPSAzOwogCiByZXRyeToKLQlpZiAocmV0cmllcyAmJiByZXF1ZXN0X2Zpcm13YXJlKCZmdywgZm4sICZpdHYtPmRldi0+ZGV2KSA9PSAwKSB7CisJaWYgKHJldHJpZXMgJiYgcmVxdWVzdF9maXJtd2FyZSgmZncsIGZuLCAmaXR2LT5wZGV2LT5kZXYpID09IDApIHsKIAkJaW50IGk7CiAJCXZvbGF0aWxlIHUzMiBfX2lvbWVtICpkc3QgPSAodm9sYXRpbGUgdTMyIF9faW9tZW0gKiltZW07CiAJCWNvbnN0IHUzMiAqc3JjID0gKGNvbnN0IHUzMiAqKWZ3LT5kYXRhOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZ3Bpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtZ3Bpby5jCmluZGV4IGRjMjg1MGUuLjMzMjE5ODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWdwaW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1ncGlvLmMKQEAgLTM4NCw3ICszODQsNyBAQAogCXdyaXRlX3JlZyhpdHYtPmNhcmQtPmdwaW9faW5pdC5pbml0aWFsX3ZhbHVlIHwgcGluLCBJVlRWX1JFR19HUElPX09VVCk7CiAJd3JpdGVfcmVnKGl0di0+Y2FyZC0+Z3Bpb19pbml0LmRpcmVjdGlvbiB8IHBpbiwgSVZUVl9SRUdfR1BJT19ESVIpOwogCXY0bDJfc3ViZGV2X2luaXQoJml0di0+c2RfZ3BpbywgJnN1YmRldl9vcHMpOwotCXNucHJpbnRmKGl0di0+c2RfZ3Bpby5uYW1lLCBzaXplb2YoaXR2LT5zZF9ncGlvLm5hbWUpLCAiJXMtZ3BpbyIsIGl0di0+ZGV2aWNlLm5hbWUpOworCXNucHJpbnRmKGl0di0+c2RfZ3Bpby5uYW1lLCBzaXplb2YoaXR2LT5zZF9ncGlvLm5hbWUpLCAiJXMtZ3BpbyIsIGl0di0+djRsMl9kZXYubmFtZSk7CiAJaXR2LT5zZF9ncGlvLmdycF9pZCA9IElWVFZfSFdfR1BJTzsKLQlyZXR1cm4gdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2KCZpdHYtPmRldmljZSwgJml0di0+c2RfZ3Bpbyk7CisJcmV0dXJuIHY0bDJfZGV2aWNlX3JlZ2lzdGVyX3N1YmRldigmaXR2LT52NGwyX2RldiwgJml0di0+c2RfZ3Bpbyk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pMmMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWkyYy5jCmluZGV4IGNhMWQ5NTUuLmU3M2ExOTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWkyYy5jCkBAIC0xOTQsMTQgKzE5NCwxNCBAQAogCXN0cnVjdCB2NGwyX3N1YmRldiAqcmVzdWx0ID0gTlVMTDsKIAlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOwogCi0Jc3Bpbl9sb2NrKCZpdHYtPmRldmljZS5sb2NrKTsKLQl2NGwyX2RldmljZV9mb3JfZWFjaF9zdWJkZXYoc2QsICZpdHYtPmRldmljZSkgeworCXNwaW5fbG9jaygmaXR2LT52NGwyX2Rldi5sb2NrKTsKKwl2NGwyX2RldmljZV9mb3JfZWFjaF9zdWJkZXYoc2QsICZpdHYtPnY0bDJfZGV2KSB7CiAJCWlmIChzZC0+Z3JwX2lkID09IGh3KSB7CiAJCQlyZXN1bHQgPSBzZDsKIAkJCWJyZWFrOwogCQl9CiAJfQotCXNwaW5fdW5sb2NrKCZpdHYtPmRldmljZS5sb2NrKTsKKwlzcGluX3VubG9jaygmaXR2LT52NGwyX2Rldi5sb2NrKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCkBAIC00NzIsOCArNDcyLDggQEAKICAgIGludGVydmVuaW5nIHN0b3AgY29uZGl0aW9uICovCiBzdGF0aWMgaW50IGl2dHZfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCBzdHJ1Y3QgaTJjX21zZyAqbXNncywgaW50IG51bSkKIHsKLQlzdHJ1Y3QgdjRsMl9kZXZpY2UgKmRydiA9IGkyY19nZXRfYWRhcGRhdGEoaTJjX2FkYXApOwotCXN0cnVjdCBpdnR2ICppdHYgPSB0b19pdnR2KGRydik7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGkyY19nZXRfYWRhcGRhdGEoaTJjX2FkYXApOworCXN0cnVjdCBpdnR2ICppdHYgPSB0b19pdnR2KHY0bDJfZGV2KTsKIAlpbnQgcmV0dmFsOwogCWludCBpOwogCkBAIC02MDQsMTIgKzYwNCwxMiBAQAogCiAJc3ByaW50ZihpdHYtPmkyY19hZGFwLm5hbWUgKyBzdHJsZW4oaXR2LT5pMmNfYWRhcC5uYW1lKSwgIiAjJWQiLAogCQlpdHYtPmluc3RhbmNlKTsKLQlpMmNfc2V0X2FkYXBkYXRhKCZpdHYtPmkyY19hZGFwLCAmaXR2LT5kZXZpY2UpOworCWkyY19zZXRfYWRhcGRhdGEoJml0di0+aTJjX2FkYXAsICZpdHYtPnY0bDJfZGV2KTsKIAogCW1lbWNweSgmaXR2LT5pMmNfY2xpZW50LCAmaXZ0dl9pMmNfY2xpZW50X3RlbXBsYXRlLAogCSAgICAgICBzaXplb2Yoc3RydWN0IGkyY19jbGllbnQpKTsKIAlpdHYtPmkyY19jbGllbnQuYWRhcHRlciA9ICZpdHYtPmkyY19hZGFwOwotCWl0di0+aTJjX2FkYXAuZGV2LnBhcmVudCA9ICZpdHYtPmRldi0+ZGV2OworCWl0di0+aTJjX2FkYXAuZGV2LnBhcmVudCA9ICZpdHYtPnBkZXYtPmRldjsKIAogCUlWVFZfREVCVUdfSTJDKCJzZXR0aW5nIHNjbCBhbmQgc2RhIHRvIDFcbiIpOwogCWl2dHZfc2V0c2NsKGl0diwgMSk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtaW9jdGwuYwppbmRleCBjMTNiZDJhLi45YTA0MjQyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pb2N0bC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlvY3RsLmMKQEAgLTM0NSwxMCArMzQ1LDggQEAKIAlwaXhmbXQtPnByaXYgPSAwOwogCWlmIChpZC0+dHlwZSA9PSBJVlRWX0VOQ19TVFJFQU1fVFlQRV9ZVVYpIHsKIAkJcGl4Zm10LT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9ITTEyOwotCQkvKiBZVVYgc2l6ZSBpcyAoWT0oaCp3KSArIFVWPShoKih3LzIpKSkgKi8KLQkJcGl4Zm10LT5zaXplaW1hZ2UgPQotCQkJcGl4Zm10LT5oZWlnaHQgKiBwaXhmbXQtPndpZHRoICsKLQkJCXBpeGZtdC0+aGVpZ2h0ICogKHBpeGZtdC0+d2lkdGggLyAyKTsKKwkJLyogWVVWIHNpemUgaXMgKFk9KGgqNzIwKSArIFVWPShoKig3MjAvMikpKSAqLworCQlwaXhmbXQtPnNpemVpbWFnZSA9IHBpeGZtdC0+aGVpZ2h0ICogNzIwICogMyAvIDI7CiAJCXBpeGZtdC0+Ynl0ZXNwZXJsaW5lID0gNzIwOwogCX0gZWxzZSB7CiAJCXBpeGZtdC0+cGl4ZWxmb3JtYXQgPSBWNEwyX1BJWF9GTVRfTVBFRzsKQEAgLTQ2OSwxMSArNDY3LDE3IEBACiAJc3RydWN0IGl2dHYgKml0diA9IGlkLT5pdHY7CiAJaW50IHcgPSBmbXQtPmZtdC5waXgud2lkdGg7CiAJaW50IGggPSBmbXQtPmZtdC5waXguaGVpZ2h0OworCWludCBtaW5faCA9IDI7CiAKIAl3ID0gbWluKHcsIDcyMCk7CiAJdyA9IG1heCh3LCAyKTsKKwlpZiAoaWQtPnR5cGUgPT0gSVZUVl9FTkNfU1RSRUFNX1RZUEVfWVVWKSB7CisJCS8qIFlVViBoZWlnaHQgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyICovCisJCWggJj0gfjB4MWY7CisJCW1pbl9oID0gMzI7CisJfQogCWggPSBtaW4oaCwgaXR2LT5pc181MGh6ID8gNTc2IDogNDgwKTsKLQloID0gbWF4KGgsIDIpOworCWggPSBtYXgoaCwgbWluX2gpOwogCWl2dHZfZ19mbXRfdmlkX2NhcChmaWxlLCBmaCwgZm10KTsKIAlmbXQtPmZtdC5waXgud2lkdGggPSB3OwogCWZtdC0+Zm10LnBpeC5oZWlnaHQgPSBoOwpAQCAtNzY2LDcgKzc3MCw3IEBACiAKIAlzdHJsY3B5KHZjYXAtPmRyaXZlciwgSVZUVl9EUklWRVJfTkFNRSwgc2l6ZW9mKHZjYXAtPmRyaXZlcikpOwogCXN0cmxjcHkodmNhcC0+Y2FyZCwgaXR2LT5jYXJkX25hbWUsIHNpemVvZih2Y2FwLT5jYXJkKSk7Ci0Jc25wcmludGYodmNhcC0+YnVzX2luZm8sIHNpemVvZih2Y2FwLT5idXNfaW5mbyksICJQQ0k6JXMiLCBwY2lfbmFtZShpdHYtPmRldikpOworCXNucHJpbnRmKHZjYXAtPmJ1c19pbmZvLCBzaXplb2YodmNhcC0+YnVzX2luZm8pLCAiUENJOiVzIiwgcGNpX25hbWUoaXR2LT5wZGV2KSk7CiAJdmNhcC0+dmVyc2lvbiA9IElWVFZfRFJJVkVSX1ZFUlNJT047IAkgICAgLyogdmVyc2lvbiAqLwogCXZjYXAtPmNhcGFiaWxpdGllcyA9IGl0di0+djRsMl9jYXA7IAkgICAgLyogY2FwYWJpbGl0aWVzICovCiAJcmV0dXJuIDA7CkBAIC0xNTEzLDEyICsxNTE3LDEyIEBACiAJfQogCUlWVFZfSU5GTygiVHVuZXI6ICAlc1xuIiwKIAkJdGVzdF9iaXQoSVZUVl9GX0lfUkFESU9fVVNFUiwgJml0di0+aV9mbGFncykgPyAiUmFkaW8iIDogIlRWIik7Ci0JY3gyMzQxeF9sb2dfc3RhdHVzKCZpdHYtPnBhcmFtcywgaXR2LT5kZXZpY2UubmFtZSk7CisJY3gyMzQxeF9sb2dfc3RhdHVzKCZpdHYtPnBhcmFtcywgaXR2LT52NGwyX2Rldi5uYW1lKTsKIAlJVlRWX0lORk8oIlN0YXR1cyBmbGFnczogICAgMHglMDhseFxuIiwgaXR2LT5pX2ZsYWdzKTsKIAlmb3IgKGkgPSAwOyBpIDwgSVZUVl9NQVhfU1RSRUFNUzsgaSsrKSB7CiAJCXN0cnVjdCBpdnR2X3N0cmVhbSAqcyA9ICZpdHYtPnN0cmVhbXNbaV07CiAKLQkJaWYgKHMtPnY0bDJkZXYgPT0gTlVMTCB8fCBzLT5idWZmZXJzID09IDApCisJCWlmIChzLT52ZGV2ID09IE5VTEwgfHwgcy0+YnVmZmVycyA9PSAwKQogCQkJY29udGludWU7CiAJCUlWVFZfSU5GTygiU3RyZWFtICVzOiBzdGF0dXMgMHglMDRseCwgJWQlJSBvZiAlZCBLaUIgKCVkIGJ1ZmZlcnMpIGluIHVzZVxuIiwgcy0+bmFtZSwgcy0+c19mbGFncywKIAkJCQkocy0+YnVmZmVycyAtIHMtPnFfZnJlZS5idWZmZXJzKSAqIDEwMCAvIHMtPmJ1ZmZlcnMsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1pcnEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlycS5jCmluZGV4IGY1ZDAwZWMuLjAxYzE0ZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlycS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LWlycS5jCkBAIC00Niw3ICs0Niw3IEBACiAKIAlJVlRWX0RFQlVHX0hJX0RNQSgiaXZ0dl9waW9fd29ya19oYW5kbGVyXG4iKTsKIAlpZiAoaXR2LT5jdXJfcGlvX3N0cmVhbSA8IDAgfHwgaXR2LT5jdXJfcGlvX3N0cmVhbSA+PSBJVlRWX01BWF9TVFJFQU1TIHx8Ci0JCQlzLT52NGwyZGV2ID09IE5VTEwgfHwgIWl2dHZfdXNlX3BpbyhzKSkgeworCQkJcy0+dmRldiA9PSBOVUxMIHx8ICFpdnR2X3VzZV9waW8ocykpIHsKIAkJaXR2LT5jdXJfcGlvX3N0cmVhbSA9IC0xOwogCQkvKiB0cmlnZ2VyIFBJTyBjb21wbGV0ZSB1c2VyIGludGVycnVwdCAqLwogCQl3cml0ZV9yZWcoSVZUVl9JUlFfRU5DX1BJT19DT01QTEVURSwgMHg0NCk7CkBAIC0xMDksNyArMTA5LDcgQEAKIAlpbnQgcmM7CiAKIAkvKiBzYW5pdHkgY2hlY2tzICovCi0JaWYgKHMtPnY0bDJkZXYgPT0gTlVMTCkgeworCWlmIChzLT52ZGV2ID09IE5VTEwpIHsKIAkJSVZUVl9ERUJVR19XQVJOKCJTdHJlYW0gJXMgbm90IHN0YXJ0ZWRcbiIsIHMtPm5hbWUpOwogCQlyZXR1cm4gLTE7CiAJfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtcXVldWUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXF1ZXVlLmMKaW5kZXggNzFiZDEzZS4uZmY3YjdkZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtcXVldWUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1xdWV1ZS5jCkBAIC0yMzAsNyArMjMwLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCWlmIChpdnR2X21pZ2h0X3VzZV9kbWEocykpIHsKLQkJcy0+c2dfaGFuZGxlID0gcGNpX21hcF9zaW5nbGUoaXR2LT5kZXYsIHMtPnNnX2RtYSwgc2l6ZW9mKHN0cnVjdCBpdnR2X3NnX2VsZW1lbnQpLCBzLT5kbWEpOworCQlzLT5zZ19oYW5kbGUgPSBwY2lfbWFwX3NpbmdsZShpdHYtPnBkZXYsIHMtPnNnX2RtYSwgc2l6ZW9mKHN0cnVjdCBpdnR2X3NnX2VsZW1lbnQpLCBzLT5kbWEpOwogCQlpdnR2X3N0cmVhbV9zeW5jX2Zvcl9jcHUocyk7CiAJfQogCkBAIC0yNDgsNyArMjQ4LDcgQEAKIAkJfQogCQlJTklUX0xJU1RfSEVBRCgmYnVmLT5saXN0KTsKIAkJaWYgKGl2dHZfbWlnaHRfdXNlX2RtYShzKSkgewotCQkJYnVmLT5kbWFfaGFuZGxlID0gcGNpX21hcF9zaW5nbGUocy0+aXR2LT5kZXYsCisJCQlidWYtPmRtYV9oYW5kbGUgPSBwY2lfbWFwX3NpbmdsZShzLT5pdHYtPnBkZXYsCiAJCQkJYnVmLT5idWYsIHMtPmJ1Zl9zaXplICsgMjU2LCBzLT5kbWEpOwogCQkJaXZ0dl9idWZfc3luY19mb3JfY3B1KHMsIGJ1Zik7CiAJCX0KQEAgLTI3MSw3ICsyNzEsNyBAQAogCS8qIGVtcHR5IHFfZnJlZSAqLwogCXdoaWxlICgoYnVmID0gaXZ0dl9kZXF1ZXVlKHMsICZzLT5xX2ZyZWUpKSkgewogCQlpZiAoaXZ0dl9taWdodF91c2VfZG1hKHMpKQotCQkJcGNpX3VubWFwX3NpbmdsZShzLT5pdHYtPmRldiwgYnVmLT5kbWFfaGFuZGxlLAorCQkJcGNpX3VubWFwX3NpbmdsZShzLT5pdHYtPnBkZXYsIGJ1Zi0+ZG1hX2hhbmRsZSwKIAkJCQlzLT5idWZfc2l6ZSArIDI1Niwgcy0+ZG1hKTsKIAkJa2ZyZWUoYnVmLT5idWYpOwogCQlrZnJlZShidWYpOwpAQCAtMjgwLDcgKzI4MCw3IEBACiAJLyogRnJlZSBTRyBBcnJheS9MaXN0cyAqLwogCWlmIChzLT5zZ19kbWEgIT0gTlVMTCkgewogCQlpZiAocy0+c2dfaGFuZGxlICE9IElWVFZfRE1BX1VOTUFQUEVEKSB7Ci0JCQlwY2lfdW5tYXBfc2luZ2xlKHMtPml0di0+ZGV2LCBzLT5zZ19oYW5kbGUsCisJCQlwY2lfdW5tYXBfc2luZ2xlKHMtPml0di0+cGRldiwgcy0+c2dfaGFuZGxlLAogCQkJCSBzaXplb2Yoc3RydWN0IGl2dHZfc2dfZWxlbWVudCksIFBDSV9ETUFfVE9ERVZJQ0UpOwogCQkJcy0+c2dfaGFuZGxlID0gSVZUVl9ETUFfVU5NQVBQRUQ7CiAJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXF1ZXVlLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1xdWV1ZS5oCmluZGV4IDQ3NjU1NmEuLjkxMjMzODMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXF1ZXVlLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtcXVldWUuaApAQCAtNTMsMTQgKzUzLDE0IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaXZ0dl9idWZfc3luY19mb3JfY3B1KHN0cnVjdCBpdnR2X3N0cmVhbSAqcywgc3RydWN0IGl2dHZfYnVmZmVyICpidWYpCiB7CiAJaWYgKGl2dHZfdXNlX2RtYShzKSkKLQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHMtPml0di0+ZGV2LCBidWYtPmRtYV9oYW5kbGUsCisJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShzLT5pdHYtPnBkZXYsIGJ1Zi0+ZG1hX2hhbmRsZSwKIAkJCQlzLT5idWZfc2l6ZSArIDI1Niwgcy0+ZG1hKTsKIH0KIAogc3RhdGljIGlubGluZSB2b2lkIGl2dHZfYnVmX3N5bmNfZm9yX2RldmljZShzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnMsIHN0cnVjdCBpdnR2X2J1ZmZlciAqYnVmKQogewogCWlmIChpdnR2X3VzZV9kbWEocykpCi0JCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzLT5pdHYtPmRldiwgYnVmLT5kbWFfaGFuZGxlLAorCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uocy0+aXR2LT5wZGV2LCBidWYtPmRtYV9oYW5kbGUsCiAJCQkJcy0+YnVmX3NpemUgKyAyNTYsIHMtPmRtYSk7CiB9CiAKQEAgLTgyLDE0ICs4MiwxNCBAQAogc3RhdGljIGlubGluZSB2b2lkIGl2dHZfc3RyZWFtX3N5bmNfZm9yX2NwdShzdHJ1Y3QgaXZ0dl9zdHJlYW0gKnMpCiB7CiAJaWYgKGl2dHZfdXNlX2RtYShzKSkKLQkJcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHMtPml0di0+ZGV2LCBzLT5zZ19oYW5kbGUsCisJCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdShzLT5pdHYtPnBkZXYsIHMtPnNnX2hhbmRsZSwKIAkJCXNpemVvZihzdHJ1Y3QgaXZ0dl9zZ19lbGVtZW50KSwgUENJX0RNQV9UT0RFVklDRSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpdnR2X3N0cmVhbV9zeW5jX2Zvcl9kZXZpY2Uoc3RydWN0IGl2dHZfc3RyZWFtICpzKQogewogCWlmIChpdnR2X3VzZV9kbWEocykpCi0JCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzLT5pdHYtPmRldiwgcy0+c2dfaGFuZGxlLAorCQlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uocy0+aXR2LT5wZGV2LCBzLT5zZ19oYW5kbGUsCiAJCQlzaXplb2Yoc3RydWN0IGl2dHZfc2dfZWxlbWVudCksIFBDSV9ETUFfVE9ERVZJQ0UpOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di1zdHJlYW1zLmMKaW5kZXggODU0YTk1MC4uMTVkYTAxNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtc3RyZWFtcy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXN0cmVhbXMuYwpAQCAtMTM3LDExICsxMzcsMTEgQEAKIHN0YXRpYyB2b2lkIGl2dHZfc3RyZWFtX2luaXQoc3RydWN0IGl2dHYgKml0diwgaW50IHR5cGUpCiB7CiAJc3RydWN0IGl2dHZfc3RyZWFtICpzID0gJml0di0+c3RyZWFtc1t0eXBlXTsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpkZXYgPSBzLT52NGwyZGV2OworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBzLT52ZGV2OwogCi0JLyogd2UgbmVlZCB0byBrZWVwIHY0bDJkZXYsIHNvIHJlc3RvcmUgaXQgYWZ0ZXJ3YXJkcyAqLworCS8qIHdlIG5lZWQgdG8ga2VlcCB2ZGV2LCBzbyByZXN0b3JlIGl0IGFmdGVyd2FyZHMgKi8KIAltZW1zZXQocywgMCwgc2l6ZW9mKCpzKSk7Ci0Jcy0+djRsMmRldiA9IGRldjsKKwlzLT52ZGV2ID0gdmRldjsKIAogCS8qIGluaXRpYWxpemUgaXZ0dl9zdHJlYW0gZmllbGRzICovCiAJcy0+aXR2ID0gaXR2OwpAQCAtMTcyLDEwICsxNzIsMTAgQEAKIAlpbnQgbnVtX29mZnNldCA9IGl2dHZfc3RyZWFtX2luZm9bdHlwZV0ubnVtX29mZnNldDsKIAlpbnQgbnVtID0gaXR2LT5pbnN0YW5jZSArIGl2dHZfZmlyc3RfbWlub3IgKyBudW1fb2Zmc2V0OwogCi0JLyogVGhlc2UgZm91ciBmaWVsZHMgYXJlIGFsd2F5cyBpbml0aWFsaXplZC4gSWYgdjRsMmRldiA9PSBOVUxMLCB0aGVuCisJLyogVGhlc2UgZm91ciBmaWVsZHMgYXJlIGFsd2F5cyBpbml0aWFsaXplZC4gSWYgdmRldiA9PSBOVUxMLCB0aGVuCiAJICAgdGhpcyBzdHJlYW0gaXMgbm90IGluIHVzZS4gSW4gdGhhdCBjYXNlIG5vIG90aGVyIGZpZWxkcyBidXQgdGhlc2UKIAkgICBmb3VyIGNhbiBiZSB1c2VkLiAqLwotCXMtPnY0bDJkZXYgPSBOVUxMOworCXMtPnZkZXYgPSBOVUxMOwogCXMtPml0diA9IGl0djsKIAlzLT50eXBlID0gdHlwZTsKIAlzLT5uYW1lID0gaXZ0dl9zdHJlYW1faW5mb1t0eXBlXS5uYW1lOwpAQCAtMTk3LDIxICsxOTcsMjEgQEAKIAlpdnR2X3N0cmVhbV9pbml0KGl0diwgdHlwZSk7CiAKIAkvKiBhbGxvY2F0ZSBhbmQgaW5pdGlhbGl6ZSB0aGUgdjRsMiB2aWRlbyBkZXZpY2Ugc3RydWN0dXJlICovCi0Jcy0+djRsMmRldiA9IHZpZGVvX2RldmljZV9hbGxvYygpOwotCWlmIChzLT52NGwyZGV2ID09IE5VTEwpIHsKKwlzLT52ZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKHMtPnZkZXYgPT0gTlVMTCkgewogCQlJVlRWX0VSUigiQ291bGRuJ3QgYWxsb2NhdGUgdjRsMiB2aWRlb19kZXZpY2UgZm9yICVzXG4iLCBzLT5uYW1lKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0Jc25wcmludGYocy0+djRsMmRldi0+bmFtZSwgc2l6ZW9mKHMtPnY0bDJkZXYtPm5hbWUpLCAiJXMgJXMiLAotCQkJaXR2LT5kZXZpY2UubmFtZSwgcy0+bmFtZSk7CisJc25wcmludGYocy0+dmRldi0+bmFtZSwgc2l6ZW9mKHMtPnZkZXYtPm5hbWUpLCAiJXMgJXMiLAorCQkJaXR2LT52NGwyX2Rldi5uYW1lLCBzLT5uYW1lKTsKIAotCXMtPnY0bDJkZXYtPm51bSA9IG51bTsKLQlzLT52NGwyZGV2LT52NGwyX2RldiA9ICZpdHYtPmRldmljZTsKLQlzLT52NGwyZGV2LT5mb3BzID0gaXZ0dl9zdHJlYW1faW5mb1t0eXBlXS5mb3BzOwotCXMtPnY0bDJkZXYtPnJlbGVhc2UgPSB2aWRlb19kZXZpY2VfcmVsZWFzZTsKLQlzLT52NGwyZGV2LT50dm5vcm1zID0gVjRMMl9TVERfQUxMOwotCWl2dHZfc2V0X2Z1bmNzKHMtPnY0bDJkZXYpOworCXMtPnZkZXYtPm51bSA9IG51bTsKKwlzLT52ZGV2LT52NGwyX2RldiA9ICZpdHYtPnY0bDJfZGV2OworCXMtPnZkZXYtPmZvcHMgPSBpdnR2X3N0cmVhbV9pbmZvW3R5cGVdLmZvcHM7CisJcy0+dmRldi0+cmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlOworCXMtPnZkZXYtPnR2bm9ybXMgPSBWNEwyX1NURF9BTEw7CisJaXZ0dl9zZXRfZnVuY3Mocy0+dmRldik7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTIyNiw3ICsyMjYsNyBAQAogCQlpZiAoaXZ0dl9wcmVwX2RldihpdHYsIHR5cGUpKQogCQkJYnJlYWs7CiAKLQkJaWYgKGl0di0+c3RyZWFtc1t0eXBlXS52NGwyZGV2ID09IE5VTEwpCisJCWlmIChpdHYtPnN0cmVhbXNbdHlwZV0udmRldiA9PSBOVUxMKQogCQkJY29udGludWU7CiAKIAkJLyogQWxsb2NhdGUgU3RyZWFtICovCkBAIC0yNDcsMjggKzI0NywyOCBAQAogCWludCB2ZmxfdHlwZSA9IGl2dHZfc3RyZWFtX2luZm9bdHlwZV0udmZsX3R5cGU7CiAJaW50IG51bTsKIAotCWlmIChzLT52NGwyZGV2ID09IE5VTEwpCisJaWYgKHMtPnZkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIDA7CiAKLQludW0gPSBzLT52NGwyZGV2LT5udW07CisJbnVtID0gcy0+dmRldi0+bnVtOwogCS8qIGNhcmQgbnVtYmVyICsgdXNlciBkZWZpbmVkIG9mZnNldCArIGRldmljZSBvZmZzZXQgKi8KIAlpZiAodHlwZSAhPSBJVlRWX0VOQ19TVFJFQU1fVFlQRV9NUEcpIHsKIAkJc3RydWN0IGl2dHZfc3RyZWFtICpzX21wZyA9ICZpdHYtPnN0cmVhbXNbSVZUVl9FTkNfU1RSRUFNX1RZUEVfTVBHXTsKIAotCQlpZiAoc19tcGctPnY0bDJkZXYpCi0JCQludW0gPSBzX21wZy0+djRsMmRldi0+bnVtICsgaXZ0dl9zdHJlYW1faW5mb1t0eXBlXS5udW1fb2Zmc2V0OworCQlpZiAoc19tcGctPnZkZXYpCisJCQludW0gPSBzX21wZy0+dmRldi0+bnVtICsgaXZ0dl9zdHJlYW1faW5mb1t0eXBlXS5udW1fb2Zmc2V0OwogCX0KLQl2aWRlb19zZXRfZHJ2ZGF0YShzLT52NGwyZGV2LCBzKTsKKwl2aWRlb19zZXRfZHJ2ZGF0YShzLT52ZGV2LCBzKTsKIAogCS8qIFJlZ2lzdGVyIGRldmljZS4gRmlyc3QgdHJ5IHRoZSBkZXNpcmVkIG1pbm9yLCB0aGVuIGFueSBmcmVlIG9uZS4gKi8KLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHMtPnY0bDJkZXYsIHZmbF90eXBlLCBudW0pKSB7CisJaWYgKHZpZGVvX3JlZ2lzdGVyX2RldmljZShzLT52ZGV2LCB2ZmxfdHlwZSwgbnVtKSkgewogCQlJVlRWX0VSUigiQ291bGRuJ3QgcmVnaXN0ZXIgdjRsMiBkZXZpY2UgZm9yICVzIGtlcm5lbCBudW1iZXIgJWRcbiIsCiAJCQkJcy0+bmFtZSwgbnVtKTsKLQkJdmlkZW9fZGV2aWNlX3JlbGVhc2Uocy0+djRsMmRldik7Ci0JCXMtPnY0bDJkZXYgPSBOVUxMOworCQl2aWRlb19kZXZpY2VfcmVsZWFzZShzLT52ZGV2KTsKKwkJcy0+dmRldiA9IE5VTEw7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQludW0gPSBzLT52NGwyZGV2LT5udW07CisJbnVtID0gcy0+dmRldi0+bnVtOwogCiAJc3dpdGNoICh2ZmxfdHlwZSkgewogCWNhc2UgVkZMX1RZUEVfR1JBQkJFUjoKQEAgLTMxNiw5ICszMTYsOSBAQAogCiAJLyogVGVhcmRvd24gYWxsIHN0cmVhbXMgKi8KIAlmb3IgKHR5cGUgPSAwOyB0eXBlIDwgSVZUVl9NQVhfU1RSRUFNUzsgdHlwZSsrKSB7Ci0JCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSBpdHYtPnN0cmVhbXNbdHlwZV0udjRsMmRldjsKKwkJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldiA9IGl0di0+c3RyZWFtc1t0eXBlXS52ZGV2OwogCi0JCWl0di0+c3RyZWFtc1t0eXBlXS52NGwyZGV2ID0gTlVMTDsKKwkJaXR2LT5zdHJlYW1zW3R5cGVdLnZkZXYgPSBOVUxMOwogCQlpZiAodmRldiA9PSBOVUxMKQogCQkJY29udGludWU7CiAKQEAgLTQ0OSw3ICs0NDksNyBAQAogCWludCBjYXB0eXBlID0gMCwgc3VidHlwZSA9IDA7CiAJaW50IGVuYWJsZV9wYXNzdGhyb3VnaCA9IDA7CiAKLQlpZiAocy0+djRsMmRldiA9PSBOVUxMKQorCWlmIChzLT52ZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJSVZUVl9ERUJVR19JTkZPKCJTdGFydCBlbmNvZGVyIHN0cmVhbSAlc1xuIiwgcy0+bmFtZSk7CkBAIC02MTEsNyArNjExLDcgQEAKIAlzdHJ1Y3QgY3gyMzQxeF9tcGVnX3BhcmFtcyAqcCA9ICZpdHYtPnBhcmFtczsKIAlpbnQgZGF0YXR5cGU7CiAKLQlpZiAocy0+djRsMmRldiA9PSBOVUxMKQorCWlmIChzLT52ZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJSVZUVl9ERUJVR19JTkZPKCJTZXR0aW5nIHNvbWUgaW5pdGlhbCBkZWNvZGVyIHNldHRpbmdzXG4iKTsKQEAgLTY1Nyw3ICs2NTcsNyBAQAogewogCXN0cnVjdCBpdnR2ICppdHYgPSBzLT5pdHY7CiAKLQlpZiAocy0+djRsMmRldiA9PSBOVUxMKQorCWlmIChzLT52ZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoSVZUVl9GX1NfU1RSRUFNSU5HLCAmcy0+c19mbGFncykpCkBAIC03MDUsNyArNzA1LDcgQEAKIAlmb3IgKGkgPSBJVlRWX01BWF9TVFJFQU1TIC0gMTsgaSA+PSAwOyBpLS0pIHsKIAkJc3RydWN0IGl2dHZfc3RyZWFtICpzID0gJml0di0+c3RyZWFtc1tpXTsKIAotCQlpZiAocy0+djRsMmRldiA9PSBOVUxMKQorCQlpZiAocy0+dmRldiA9PSBOVUxMKQogCQkJY29udGludWU7CiAJCWlmICh0ZXN0X2JpdChJVlRWX0ZfU19TVFJFQU1JTkcsICZzLT5zX2ZsYWdzKSkgewogCQkJaXZ0dl9zdG9wX3Y0bDJfZW5jb2RlX3N0cmVhbShzLCAwKTsKQEAgLTcyMCw3ICs3MjAsNyBAQAogCWludCBjYXBfdHlwZTsKIAlpbnQgc3RvcG1vZGU7CiAKLQlpZiAocy0+djRsMmRldiA9PSBOVUxMKQorCWlmIChzLT52ZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogVGhpcyBmdW5jdGlvbiBhc3N1bWVzIHRoYXQgeW91IGFyZSBhbGxvd2VkIHRvIHN0b3AgdGhlIGNhcHR1cmUKQEAgLTgzNCw3ICs4MzQsNyBAQAogewogCXN0cnVjdCBpdnR2ICppdHYgPSBzLT5pdHY7CiAKLQlpZiAocy0+djRsMmRldiA9PSBOVUxMKQorCWlmIChzLT52ZGV2ID09IE5VTEwpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKHMtPnR5cGUgIT0gSVZUVl9ERUNfU1RSRUFNX1RZUEVfWVVWICYmIHMtPnR5cGUgIT0gSVZUVl9ERUNfU1RSRUFNX1RZUEVfTVBHKQpAQCAtODk1LDcgKzg5NSw3IEBACiAJc3RydWN0IGl2dHZfc3RyZWFtICp5dXZfc3RyZWFtID0gJml0di0+c3RyZWFtc1tJVlRWX0VOQ19TVFJFQU1fVFlQRV9ZVVZdOwogCXN0cnVjdCBpdnR2X3N0cmVhbSAqZGVjX3N0cmVhbSA9ICZpdHYtPnN0cmVhbXNbSVZUVl9ERUNfU1RSRUFNX1RZUEVfWVVWXTsKIAotCWlmICh5dXZfc3RyZWFtLT52NGwyZGV2ID09IE5VTEwgfHwgZGVjX3N0cmVhbS0+djRsMmRldiA9PSBOVUxMKQorCWlmICh5dXZfc3RyZWFtLT52ZGV2ID09IE5VTEwgfHwgZGVjX3N0cmVhbS0+dmRldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCUlWVFZfREVCVUdfSU5GTygiaXZ0diBpb2N0bDogU2VsZWN0IHBhc3N0aHJvdWdoIG1vZGVcbiIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdWRtYS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdWRtYS5jCmluZGV4IDQ2MGRiMDMuLmQwN2FkNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXVkbWEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di11ZG1hLmMKQEAgLTkzLDcgKzkzLDcgQEAKIHsKIAlpZiAoaXR2LT51ZG1hLlNHX2hhbmRsZSA9PSAwKSB7CiAJCS8qIE1hcCBETUEgUGFnZSBBcnJheSBCdWZmZXIgKi8KLQkJaXR2LT51ZG1hLlNHX2hhbmRsZSA9IHBjaV9tYXBfc2luZ2xlKGl0di0+ZGV2LCBpdHYtPnVkbWEuU0dhcnJheSwKKwkJaXR2LT51ZG1hLlNHX2hhbmRsZSA9IHBjaV9tYXBfc2luZ2xlKGl0di0+cGRldiwgaXR2LT51ZG1hLlNHYXJyYXksCiAJCQkgICBzaXplb2YoaXR2LT51ZG1hLlNHYXJyYXkpLCBQQ0lfRE1BX1RPREVWSUNFKTsKIAkJaXZ0dl91ZG1hX3N5bmNfZm9yX2NwdShpdHYpOwogCX0KQEAgLTE0Nyw3ICsxNDcsNyBAQAogCX0KIAogCS8qIE1hcCBTRyBMaXN0ICovCi0JZG1hLT5TR19sZW5ndGggPSBwY2lfbWFwX3NnKGl0di0+ZGV2LCBkbWEtPlNHbGlzdCwgZG1hLT5wYWdlX2NvdW50LCBQQ0lfRE1BX1RPREVWSUNFKTsKKwlkbWEtPlNHX2xlbmd0aCA9IHBjaV9tYXBfc2coaXR2LT5wZGV2LCBkbWEtPlNHbGlzdCwgZG1hLT5wYWdlX2NvdW50LCBQQ0lfRE1BX1RPREVWSUNFKTsKIAogCS8qIEZpbGwgU0cgQXJyYXkgd2l0aCBuZXcgdmFsdWVzICovCiAJaXZ0dl91ZG1hX2ZpbGxfc2dfYXJyYXkgKGRtYSwgaXZ0dl9kZXN0X2FkZHIsIDAsIC0xKTsKQEAgLTE3Miw3ICsxNzIsNyBAQAogCiAJLyogVW5tYXAgU2NhdHRlcmxpc3QgKi8KIAlpZiAoZG1hLT5TR19sZW5ndGgpIHsKLQkJcGNpX3VubWFwX3NnKGl0di0+ZGV2LCBkbWEtPlNHbGlzdCwgZG1hLT5wYWdlX2NvdW50LCBQQ0lfRE1BX1RPREVWSUNFKTsKKwkJcGNpX3VubWFwX3NnKGl0di0+cGRldiwgZG1hLT5TR2xpc3QsIGRtYS0+cGFnZV9jb3VudCwgUENJX0RNQV9UT0RFVklDRSk7CiAJCWRtYS0+U0dfbGVuZ3RoID0gMDsKIAl9CiAJLyogc3luYyBETUEgKi8KQEAgLTE5MSwxMyArMTkxLDEzIEBACiAKIAkvKiBVbm1hcCBTRyBBcnJheSAqLwogCWlmIChpdHYtPnVkbWEuU0dfaGFuZGxlKSB7Ci0JCXBjaV91bm1hcF9zaW5nbGUoaXR2LT5kZXYsIGl0di0+dWRtYS5TR19oYW5kbGUsCisJCXBjaV91bm1hcF9zaW5nbGUoaXR2LT5wZGV2LCBpdHYtPnVkbWEuU0dfaGFuZGxlLAogCQkJIHNpemVvZihpdHYtPnVkbWEuU0dhcnJheSksIFBDSV9ETUFfVE9ERVZJQ0UpOwogCX0KIAogCS8qIFVubWFwIFNjYXR0ZXJsaXN0ICovCiAJaWYgKGl0di0+dWRtYS5TR19sZW5ndGgpIHsKLQkJcGNpX3VubWFwX3NnKGl0di0+ZGV2LCBpdHYtPnVkbWEuU0dsaXN0LCBpdHYtPnVkbWEucGFnZV9jb3VudCwgUENJX0RNQV9UT0RFVklDRSk7CisJCXBjaV91bm1hcF9zZyhpdHYtPnBkZXYsIGl0di0+dWRtYS5TR2xpc3QsIGl0di0+dWRtYS5wYWdlX2NvdW50LCBQQ0lfRE1BX1RPREVWSUNFKTsKIAl9CiAKIAlmb3IgKGkgPSAwOyBpIDwgSVZUVl9ETUFfU0dfT1NEX0VOVDsgaSsrKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di11ZG1hLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di11ZG1hLmgKaW5kZXggZGY3MjdlMi4uZWUzYzllZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdWRtYS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXVkbWEuaApAQCAtMzUsMTMgKzM1LDEzIEBACiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBpdnR2X3VkbWFfc3luY19mb3JfZGV2aWNlKHN0cnVjdCBpdnR2ICppdHYpCiB7Ci0JcGNpX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKChzdHJ1Y3QgcGNpX2RldiAqKWl0di0+ZGV2LCBpdHYtPnVkbWEuU0dfaGFuZGxlLAorCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShpdHYtPnBkZXYsIGl0di0+dWRtYS5TR19oYW5kbGUsCiAJCXNpemVvZihpdHYtPnVkbWEuU0dhcnJheSksIFBDSV9ETUFfVE9ERVZJQ0UpOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgaXZ0dl91ZG1hX3N5bmNfZm9yX2NwdShzdHJ1Y3QgaXZ0diAqaXR2KQogewotCXBjaV9kbWFfc3luY19zaW5nbGVfZm9yX2NwdSgoc3RydWN0IHBjaV9kZXYgKilpdHYtPmRldiwgaXR2LT51ZG1hLlNHX2hhbmRsZSwKKwlwY2lfZG1hX3N5bmNfc2luZ2xlX2Zvcl9jcHUoaXR2LT5wZGV2LCBpdHYtPnVkbWEuU0dfaGFuZGxlLAogCQlzaXplb2YoaXR2LT51ZG1hLlNHYXJyYXkpLCBQQ0lfRE1BX1RPREVWSUNFKTsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdmJpLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di12YmkuYwppbmRleCA1YzVkMWM0Li5mNDIwZDMxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di12YmkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di12YmkuYwpAQCAtMTg1LDYgKzE4NSw4IEBACiAJCXNpemUgPSA0ICsgKCg0MyAqIGxpbmUgKyAzKSAmIH4zKTsKIAl9IGVsc2UgewogCQltZW1jcHkoZHN0ICsgc2QsICJpdHYwIiwgNCk7CisJCWNwdV90b19sZTMycygmbGluZW1hc2tbMF0pOworCQljcHVfdG9fbGUzMnMoJmxpbmVtYXNrWzFdKTsKIAkJbWVtY3B5KGRzdCArIHNkICsgNCwgJmxpbmVtYXNrWzBdLCA4KTsKIAkJc2l6ZSA9IDEyICsgKCg0MyAqIGxpbmUgKyAzKSAmIH4zKTsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di12ZXJzaW9uLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di12ZXJzaW9uLmgKaW5kZXggOGNkNzUzZC4uYjUzMGRlYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHYtdmVyc2lvbi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXZlcnNpb24uaApAQCAtMjMsNyArMjMsNyBAQAogI2RlZmluZSBJVlRWX0RSSVZFUl9OQU1FICJpdnR2IgogI2RlZmluZSBJVlRWX0RSSVZFUl9WRVJTSU9OX01BSk9SIDEKICNkZWZpbmUgSVZUVl9EUklWRVJfVkVSU0lPTl9NSU5PUiA0Ci0jZGVmaW5lIElWVFZfRFJJVkVSX1ZFUlNJT05fUEFUQ0hMRVZFTCAwCisjZGVmaW5lIElWVFZfRFJJVkVSX1ZFUlNJT05fUEFUQ0hMRVZFTCAxCiAKICNkZWZpbmUgSVZUVl9WRVJTSU9OIF9fc3RyaW5naWZ5KElWVFZfRFJJVkVSX1ZFUlNJT05fTUFKT1IpICIuIiBfX3N0cmluZ2lmeShJVlRWX0RSSVZFUl9WRVJTSU9OX01JTk9SKSAiLiIgX19zdHJpbmdpZnkoSVZUVl9EUklWRVJfVkVSU0lPTl9QQVRDSExFVkVMKQogI2RlZmluZSBJVlRWX0RSSVZFUl9WRVJTSU9OIEtFUk5FTF9WRVJTSU9OKElWVFZfRFJJVkVSX1ZFUlNJT05fTUFKT1IsSVZUVl9EUklWRVJfVkVSU0lPTl9NSU5PUixJVlRWX0RSSVZFUl9WRVJTSU9OX1BBVENITEVWRUwpCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0di15dXYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXl1di5jCmluZGV4IGVlOTExMDcuLjc5MTJlZDYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXl1di5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2LXl1di5jCkBAIC0xMDMsNyArMTAzLDcgQEAKIAkJZG1hLT5wYWdlX2NvdW50ID0gMDsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWRtYS0+U0dfbGVuZ3RoID0gcGNpX21hcF9zZyhpdHYtPmRldiwgZG1hLT5TR2xpc3QsIGRtYS0+cGFnZV9jb3VudCwgUENJX0RNQV9UT0RFVklDRSk7CisJZG1hLT5TR19sZW5ndGggPSBwY2lfbWFwX3NnKGl0di0+cGRldiwgZG1hLT5TR2xpc3QsIGRtYS0+cGFnZV9jb3VudCwgUENJX0RNQV9UT0RFVklDRSk7CiAKIAkvKiBGaWxsIFNHIEFycmF5IHdpdGggbmV3IHZhbHVlcyAqLwogCWl2dHZfdWRtYV9maWxsX3NnX2FycmF5KGRtYSwgeV9idWZmZXJfb2Zmc2V0LCB1dl9idWZmZXJfb2Zmc2V0LCB5X3NpemUpOwpAQCAtOTEwLDcgKzkxMCw3IEBACiAJLyogV2UgbmVlZCBhIGJ1ZmZlciBmb3IgYmxhbmtpbmcgd2hlbiBZIHBsYW5lIGlzIG9mZnNldCAtIG5vbi1mYXRhbCBpZiB3ZSBjYW4ndCBnZXQgb25lICovCiAJeWktPmJsYW5raW5nX3B0ciA9IGt6YWxsb2MoNzIwICogMTYsIEdGUF9LRVJORUx8X19HRlBfTk9XQVJOKTsKIAlpZiAoeWktPmJsYW5raW5nX3B0cikgewotCQl5aS0+YmxhbmtpbmdfZG1hcHRyID0gcGNpX21hcF9zaW5nbGUoaXR2LT5kZXYsIHlpLT5ibGFua2luZ19wdHIsIDcyMCoxNiwgUENJX0RNQV9UT0RFVklDRSk7CisJCXlpLT5ibGFua2luZ19kbWFwdHIgPSBwY2lfbWFwX3NpbmdsZShpdHYtPnBkZXYsIHlpLT5ibGFua2luZ19wdHIsIDcyMCoxNiwgUENJX0RNQV9UT0RFVklDRSk7CiAJfSBlbHNlIHsKIAkJeWktPmJsYW5raW5nX2RtYXB0ciA9IDA7CiAJCUlWVFZfREVCVUdfV0FSTigiRmFpbGVkIHRvIGFsbG9jYXRlIHl1diBibGFua2luZyBidWZmZXJcbiIpOwpAQCAtMTIzNyw3ICsxMjM3LDcgQEAKIAlpZiAoeWktPmJsYW5raW5nX3B0cikgewogCQlrZnJlZSh5aS0+YmxhbmtpbmdfcHRyKTsKIAkJeWktPmJsYW5raW5nX3B0ciA9IE5VTEw7Ci0JCXBjaV91bm1hcF9zaW5nbGUoaXR2LT5kZXYsIHlpLT5ibGFua2luZ19kbWFwdHIsIDcyMCoxNiwgUENJX0RNQV9UT0RFVklDRSk7CisJCXBjaV91bm1hcF9zaW5nbGUoaXR2LT5wZGV2LCB5aS0+YmxhbmtpbmdfZG1hcHRyLCA3MjAqMTYsIFBDSV9ETUFfVE9ERVZJQ0UpOwogCX0KIAogCS8qIEludmFsaWRhdGUgdGhlIG9sZCBkaW1lbnNpb24gaW5mb3JtYXRpb24gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2ZmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vaXZ0di9pdnR2ZmIuYwppbmRleCAzNmFiZDJhLi42NmU2ZWI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2l2dHYvaXZ0dmZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9pdnR2L2l2dHZmYi5jCkBAIC0xMTkyLDEyICsxMTkyLDEyIEBACiBzdGF0aWMgaW50IF9faW5pdCBpdnR2ZmJfY2FsbGJhY2tfaW5pdChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnApCiB7CiAJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBpdnR2ICppdHYgPSBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBpdnR2LCBkZXZpY2UpOworCXN0cnVjdCBpdnR2ICppdHYgPSBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBpdnR2LCB2NGwyX2Rldik7CiAKIAlpZiAoaXR2ICYmIChpdHYtPnY0bDJfY2FwICYgVjRMMl9DQVBfVklERU9fT1VUUFVUKSkgewogCQlpZiAoaXZ0dmZiX2luaXRfY2FyZChpdHYpID09IDApIHsKIAkJCUlWVFZGQl9JTkZPKCJGcmFtZWJ1ZmZlciByZWdpc3RlcmVkIG9uICVzXG4iLAotCQkJCQlpdHYtPmRldmljZS5uYW1lKTsKKwkJCQkJaXR2LT52NGwyX2Rldi5uYW1lKTsKIAkJCSgqKGludCAqKXApKys7CiAJCX0KIAl9CkBAIC0xMjA3LDcgKzEyMDcsNyBAQAogc3RhdGljIGludCBpdnR2ZmJfY2FsbGJhY2tfY2xlYW51cChzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKnApCiB7CiAJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YShkZXYpOwotCXN0cnVjdCBpdnR2ICppdHYgPSBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBpdnR2LCBkZXZpY2UpOworCXN0cnVjdCBpdnR2ICppdHYgPSBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBpdnR2LCB2NGwyX2Rldik7CiAKIAlpZiAoaXR2ICYmIChpdHYtPnY0bDJfY2FwICYgVjRMMl9DQVBfVklERU9fT1VUUFVUKSkgewogCQlpZiAodW5yZWdpc3Rlcl9mcmFtZWJ1ZmZlcigmaXR2LT5vc2RfaW5mby0+aXZ0dmZiX2luZm8pKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2tzMDEyNy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9rczAxMjcuYwppbmRleCBiYWUyZDJiLi44NDEwMjRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL2tzMDEyNy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8va3MwMTI3LmMKQEAgLTM5LDE5ICszOSwyMCBAQAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAjaW5jbHVkZSAia3MwMTI3LmgiCiAKIE1PRFVMRV9ERVNDUklQVElPTigiS1MwMTI3IHZpZGVvIGRlY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJSeWFuIERyYWtlIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLSNkZWZpbmUgS1NfVFlQRV9VTktOT1dOCTAKLSNkZWZpbmUgS1NfVFlQRV8wMTIyUwkxCi0jZGVmaW5lIEtTX1RZUEVfMDEyNwkyCi0jZGVmaW5lIEtTX1RZUEVfMDEyN0IJMworLyogQWRkcmVzc2VzICovCisjZGVmaW5lIEkyQ19LUzAxMjdfQURET04gICAweEQ4CisjZGVmaW5lIEkyQ19LUzAxMjdfT05CT0FSRCAweERBCisKIAogLyoga3MwMTI3IGNvbnRyb2wgcmVnaXN0ZXJzICovCiAjZGVmaW5lIEtTX1NUQVQgICAgIDB4MDAKQEAgLTE5NywxNSArMTk4LDE3IEBACiB9OwogCiBzdHJ1Y3Qga3MwMTI3IHsKLQlpbnQJCWZvcm1hdF93aWR0aDsKLQlpbnQJCWZvcm1hdF9oZWlnaHQ7Ci0JaW50CQljYXBfd2lkdGg7Ci0JaW50CQljYXBfaGVpZ2h0OwotCWludAkJbm9ybTsKLQlpbnQJCWtzX3R5cGU7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOworCXY0bDJfc3RkX2lkCW5vcm07CisJaW50CQlpZGVudDsKIAl1OCAJCXJlZ3NbMjU2XTsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IGtzMDEyNyAqdG9fa3MwMTI3KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IGtzMDEyNywgc2QpOworfQorCiAKIHN0YXRpYyBpbnQgZGVidWc7IC8qIGluc21vZCBwYXJhbWV0ZXIgKi8KIApAQCAtMzExLDQzICszMTQsNDUgQEAKICAqLwogCiAKLXN0YXRpYyB1OCBrczAxMjdfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgdTggcmVnKQorc3RhdGljIHU4IGtzMDEyN19yZWFkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZykKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAJY2hhciB2YWwgPSAwOwogCXN0cnVjdCBpMmNfbXNnIG1zZ3NbXSA9IHsKLQkJeyBjLT5hZGRyLCAwLCBzaXplb2YocmVnKSwgJnJlZyB9LAotCQl7IGMtPmFkZHIsIEkyQ19NX1JEIHwgSTJDX01fTk9fUkRfQUNLLCBzaXplb2YodmFsKSwgJnZhbCB9CisJCXsgY2xpZW50LT5hZGRyLCAwLCBzaXplb2YocmVnKSwgJnJlZyB9LAorCQl7IGNsaWVudC0+YWRkciwgSTJDX01fUkQgfCBJMkNfTV9OT19SRF9BQ0ssIHNpemVvZih2YWwpLCAmdmFsIH0KIAl9OwogCWludCByZXQ7CiAKLQlyZXQgPSBpMmNfdHJhbnNmZXIoYy0+YWRhcHRlciwgbXNncywgQVJSQVlfU0laRShtc2dzKSk7CisJcmV0ID0gaTJjX3RyYW5zZmVyKGNsaWVudC0+YWRhcHRlciwgbXNncywgQVJSQVlfU0laRShtc2dzKSk7CiAJaWYgKHJldCAhPSBBUlJBWV9TSVpFKG1zZ3MpKQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAicmVhZCBlcnJvclxuIik7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInJlYWQgZXJyb3JcbiIpOwogCiAJcmV0dXJuIHZhbDsKIH0KIAogCi1zdGF0aWMgdm9pZCBrczAxMjdfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmMsIHU4IHJlZywgdTggdmFsKQorc3RhdGljIHZvaWQga3MwMTI3X3dyaXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZywgdTggdmFsKQogewotCXN0cnVjdCBrczAxMjcgKmtzID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlzdHJ1Y3Qga3MwMTI3ICprcyA9IHRvX2tzMDEyNyhzZCk7CiAJY2hhciBtc2dbXSA9IHsgcmVnLCB2YWwgfTsKIAotCWlmIChpMmNfbWFzdGVyX3NlbmQoYywgbXNnLCBzaXplb2YobXNnKSkgIT0gc2l6ZW9mKG1zZykpCi0JCXY0bF9kYmcoMSwgZGVidWcsIGMsICJ3cml0ZSBlcnJvclxuIik7CisJaWYgKGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIG1zZywgc2l6ZW9mKG1zZykpICE9IHNpemVvZihtc2cpKQorCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJ3cml0ZSBlcnJvclxuIik7CiAKIAlrcy0+cmVnc1tyZWddID0gdmFsOwogfQogCiAKIC8qIGdlbmVyaWMgYml0LXR3aWRkbGluZyAqLwotc3RhdGljIHZvaWQga3MwMTI3X2FuZF9vcihzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsIHU4IGFuZF92LCB1OCBvcl92KQorc3RhdGljIHZvaWQga3MwMTI3X2FuZF9vcihzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsIHU4IGFuZF92LCB1OCBvcl92KQogewotCXN0cnVjdCBrczAxMjcgKmtzID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGtzMDEyNyAqa3MgPSB0b19rczAxMjcoc2QpOwogCiAJdTggdmFsID0ga3MtPnJlZ3NbcmVnXTsKIAl2YWwgPSAodmFsICYgYW5kX3YpIHwgb3JfdjsKLQlrczAxMjdfd3JpdGUoY2xpZW50LCByZWcsIHZhbCk7CisJa3MwMTI3X3dyaXRlKHNkLCByZWcsIHZhbCk7CiB9CiAKIApAQCAtMzU1LDQzOSArMzYwLDM2MyBAQAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoga3MwMTI3IHByaXZhdGUgYXBpCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotc3RhdGljIHZvaWQga3MwMTI3X3Jlc2V0KHN0cnVjdCBpMmNfY2xpZW50ICpjKQorc3RhdGljIHZvaWQga3MwMTI3X2luaXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKLQlzdHJ1Y3Qga3MwMTI3ICprcyA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKKwlzdHJ1Y3Qga3MwMTI3ICprcyA9IHRvX2tzMDEyNyhzZCk7CiAJdTggKnRhYmxlID0gcmVnX2RlZmF1bHRzOwogCWludCBpOwogCi0Ja3MtPmtzX3R5cGUgPSBLU19UWVBFX1VOS05PV047CisJa3MtPmlkZW50ID0gVjRMMl9JREVOVF9LUzAxMjc7CiAKLQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAicmVzZXRcbiIpOworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInJlc2V0XG4iKTsKIAltc2xlZXAoMSk7CiAKIAkvKiBpbml0aWFsaXplIGFsbCByZWdpc3RlcnMgdG8ga25vd24gdmFsdWVzICovCiAJLyogKGV4Y2VwdCBTVEFULCAweDIxLCAweDIyLCBURVNUIGFuZCAweDM4LDB4MzkpICovCiAKIAlmb3IgKGkgPSAxOyBpIDwgMzM7IGkrKykKLQkJa3MwMTI3X3dyaXRlKGMsIGksIHRhYmxlW2ldKTsKKwkJa3MwMTI3X3dyaXRlKHNkLCBpLCB0YWJsZVtpXSk7CiAKIAlmb3IgKGkgPSAzNTsgaSA8IDQwOyBpKyspCi0JCWtzMDEyN193cml0ZShjLCBpLCB0YWJsZVtpXSk7CisJCWtzMDEyN193cml0ZShzZCwgaSwgdGFibGVbaV0pOwogCiAJZm9yIChpID0gNDE7IGkgPCA1NjsgaSsrKQotCQlrczAxMjdfd3JpdGUoYywgaSwgdGFibGVbaV0pOworCQlrczAxMjdfd3JpdGUoc2QsIGksIHRhYmxlW2ldKTsKIAogCWZvciAoaSA9IDU4OyBpIDwgNjQ7IGkrKykKLQkJa3MwMTI3X3dyaXRlKGMsIGksIHRhYmxlW2ldKTsKKwkJa3MwMTI3X3dyaXRlKHNkLCBpLCB0YWJsZVtpXSk7CiAKIAotCWlmICgoa3MwMTI3X3JlYWQoYywgS1NfU1RBVCkgJiAweDgwKSA9PSAwKSB7Ci0JCWtzLT5rc190eXBlID0gS1NfVFlQRV8wMTIyUzsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgYywgImtzMDEyMnMgZm91bmRcbiIpOworCWlmICgoa3MwMTI3X3JlYWQoc2QsIEtTX1NUQVQpICYgMHg4MCkgPT0gMCkgeworCQlrcy0+aWRlbnQgPSBWNEwyX0lERU5UX0tTMDEyMlM7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgImtzMDEyMnMgZm91bmRcbiIpOwogCQlyZXR1cm47CiAJfQogCi0Jc3dpdGNoIChrczAxMjdfcmVhZChjLCBLU19DTURFKSAmIDB4MGYpIHsKKwlzd2l0Y2ggKGtzMDEyN19yZWFkKHNkLCBLU19DTURFKSAmIDB4MGYpIHsKIAljYXNlIDA6Ci0JCWtzLT5rc190eXBlID0gS1NfVFlQRV8wMTI3OwotCQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAia3MwMTI3IGZvdW5kXG4iKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAia3MwMTI3IGZvdW5kXG4iKTsKIAkJYnJlYWs7CiAKIAljYXNlIDk6Ci0JCWtzLT5rc190eXBlID0gS1NfVFlQRV8wMTI3QjsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgYywgImtzMDEyN0IgUmV2aXNpb24gQSBmb3VuZFxuIik7CisJCWtzLT5pZGVudCA9IFY0TDJfSURFTlRfS1MwMTI3QjsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAia3MwMTI3QiBSZXZpc2lvbiBBIGZvdW5kXG4iKTsKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAidW5rbm93biByZXZpc2lvblxuIik7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInVua25vd24gcmV2aXNpb25cbiIpOwogCQlicmVhazsKIAl9CiB9CiAKLXN0YXRpYyBpbnQga3MwMTI3X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCBrczAxMjdfc19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQogewotCXN0cnVjdCBrczAxMjcgKmtzID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOwotCWludAkJKmlhcmcgPSAoaW50ICopYXJnOwotCWludAkJc3RhdHVzOworCXN0cnVjdCBrczAxMjcgKmtzID0gdG9fa3MwMTI3KHNkKTsKIAotCWlmICgha3MpCi0JCXJldHVybiAtRU5PREVWOworCXN3aXRjaCAocm91dGUtPmlucHV0KSB7CisJY2FzZSBLU19JTlBVVF9DT01QT1NJVEVfMToKKwljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV8yOgorCWNhc2UgS1NfSU5QVVRfQ09NUE9TSVRFXzM6CisJY2FzZSBLU19JTlBVVF9DT01QT1NJVEVfNDoKKwljYXNlIEtTX0lOUFVUX0NPTVBPU0lURV81OgorCWNhc2UgS1NfSU5QVVRfQ09NUE9TSVRFXzY6CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwKKwkJCSJzX3JvdXRpbmcgJWQ6IENvbXBvc2l0ZVxuIiwgcm91dGUtPmlucHV0KTsKKwkJLyogYXV0b2RldGVjdCA1MC82MCBIeiAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DTURBLCAgIDB4ZmMsIDB4MDApOworCQkvKiBWU0U9MCAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DTURBLCAgIH4weDQwLCAweDAwKTsKKwkJLyogc2V0IGlucHV0IGxpbmUgKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ01EQiwgICAweGIwLCByb3V0ZS0+aW5wdXQpOworCQkvKiBub24tZnJlZXJ1bm5pbmcgbW9kZSAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DTURDLCAgIDB4NzAsIDB4MGEpOworCQkvKiBhbmFsb2cgaW5wdXQgKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ01ERCwgICAweDAzLCAweDAwKTsKKwkJLyogZW5hYmxlIGNocm9tYSBkZW1vZHVsYXRpb24gKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ1RSQUNLLCAweGNmLCAweDAwKTsKKwkJLyogY2hyb21hIHRyYXAsIEhZQldSPTEgKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfTFVNQSwgICAweDAwLAorCQkJICAgICAgIChyZWdfZGVmYXVsdHNbS1NfTFVNQV0pfDB4MGMpOworCQkvKiBzY2FsZXIgZnVsbGJ3LCBsdW1hIGNvbWIgb2ZmICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX1ZFUlRJQSwgMHgwOCwgMHg4MSk7CisJCS8qIG1hbnVhbCBjaHJvbWEgY29tYiAuMjUgLjUgLjI1ICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX1ZFUlRJQywgMHgwZiwgMHg5MCk7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgREVDT0RFUl9JTklUOgotCQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAiREVDT0RFUl9JTklUXG4iKTsKLQkJa3MwMTI3X3Jlc2V0KGMpOworCQkvKiBjaHJvbWEgcGF0aCBkZWxheSAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DSFJPTUIsIDB4MGYsIDB4OTApOworCisJCWtzMDEyN193cml0ZShzZCwgS1NfVUdBSU4sIHJlZ19kZWZhdWx0c1tLU19VR0FJTl0pOworCQlrczAxMjdfd3JpdGUoc2QsIEtTX1ZHQUlOLCByZWdfZGVmYXVsdHNbS1NfVkdBSU5dKTsKKwkJa3MwMTI3X3dyaXRlKHNkLCBLU19VVk9GRkgsIHJlZ19kZWZhdWx0c1tLU19VVk9GRkhdKTsKKwkJa3MwMTI3X3dyaXRlKHNkLCBLU19VVk9GRkwsIHJlZ19kZWZhdWx0c1tLU19VVk9GRkxdKTsKIAkJYnJlYWs7CiAKLQljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgotCQlzd2l0Y2goKmlhcmcpIHsKLQkJY2FzZSBLU19JTlBVVF9DT01QT1NJVEVfMToKLQkJY2FzZSBLU19JTlBVVF9DT01QT1NJVEVfMjoKLQkJY2FzZSBLU19JTlBVVF9DT01QT1NJVEVfMzoKLQkJY2FzZSBLU19JTlBVVF9DT01QT1NJVEVfNDoKLQkJY2FzZSBLU19JTlBVVF9DT01QT1NJVEVfNToKLQkJY2FzZSBLU19JTlBVVF9DT01QT1NJVEVfNjoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCi0JCQkJIkRFQ09ERVJfU0VUX0lOUFVUICVkOiBDb21wb3NpdGVcbiIsICppYXJnKTsKLQkJCS8qIGF1dG9kZXRlY3QgNTAvNjAgSHogKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICAweGZjLCAweDAwKTsKLQkJCS8qIFZTRT0wICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREEsICAgfjB4NDAsIDB4MDApOwotCQkJLyogc2V0IGlucHV0IGxpbmUgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQiwgICAweGIwLCAqaWFyZyk7Ci0JCQkvKiBub24tZnJlZXJ1bm5pbmcgbW9kZSAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURDLCAgIDB4NzAsIDB4MGEpOwotCQkJLyogYW5hbG9nIGlucHV0ICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREQsICAgMHgwMywgMHgwMCk7Ci0JCQkvKiBlbmFibGUgY2hyb21hIGRlbW9kdWxhdGlvbiAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DVFJBQ0ssIDB4Y2YsIDB4MDApOwotCQkJLyogY2hyb21hIHRyYXAsIEhZQldSPTEgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfTFVNQSwgICAweDAwLAotCQkJCSAgICAgICAocmVnX2RlZmF1bHRzW0tTX0xVTUFdKXwweDBjKTsKLQkJCS8qIHNjYWxlciBmdWxsYncsIGx1bWEgY29tYiBvZmYgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfVkVSVElBLCAweDA4LCAweDgxKTsKLQkJCS8qIG1hbnVhbCBjaHJvbWEgY29tYiAuMjUgLjUgLjI1ICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX1ZFUlRJQywgMHgwZiwgMHg5MCk7CisJY2FzZSBLU19JTlBVVF9TVklERU9fMToKKwljYXNlIEtTX0lOUFVUX1NWSURFT18yOgorCWNhc2UgS1NfSU5QVVRfU1ZJREVPXzM6CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwKKwkJCSJzX3JvdXRpbmcgJWQ6IFMtVmlkZW9cbiIsIHJvdXRlLT5pbnB1dCk7CisJCS8qIGF1dG9kZXRlY3QgNTAvNjAgSHogKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ01EQSwgICAweGZjLCAweDAwKTsKKwkJLyogVlNFPTAgKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ01EQSwgICB+MHg0MCwgMHgwMCk7CisJCS8qIHNldCBpbnB1dCBsaW5lICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NNREIsICAgMHhiMCwgcm91dGUtPmlucHV0KTsKKwkJLyogbm9uLWZyZWVydW5uaW5nIG1vZGUgKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ01EQywgICAweDcwLCAweDBhKTsKKwkJLyogYW5hbG9nIGlucHV0ICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NNREQsICAgMHgwMywgMHgwMCk7CisJCS8qIGVuYWJsZSBjaHJvbWEgZGVtb2R1bGF0aW9uICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NUUkFDSywgMHhjZiwgMHgwMCk7CisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0xVTUEsIDB4MDAsCisJCQkgICAgICAgcmVnX2RlZmF1bHRzW0tTX0xVTUFdKTsKKwkJLyogZGlzYWJsZSBsdW1hIGNvbWIgKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfVkVSVElBLCAweDA4LAorCQkJICAgICAgIChyZWdfZGVmYXVsdHNbS1NfVkVSVElBXSYweGYwKXwweDAxKTsKKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfVkVSVElDLCAweDBmLAorCQkJICAgICAgIHJlZ19kZWZhdWx0c1tLU19WRVJUSUNdJjB4ZjApOwogCi0JCQkvKiBjaHJvbWEgcGF0aCBkZWxheSAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DSFJPTUIsIDB4MGYsIDB4OTApOworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DSFJPTUIsIDB4MGYsCisJCQkgICAgICAgcmVnX2RlZmF1bHRzW0tTX0NIUk9NQl0mMHhmMCk7CiAKLQkJCWtzMDEyN193cml0ZShjLCBLU19VR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1VHQUlOXSk7Ci0JCQlrczAxMjdfd3JpdGUoYywgS1NfVkdBSU4sIHJlZ19kZWZhdWx0c1tLU19WR0FJTl0pOwotCQkJa3MwMTI3X3dyaXRlKGMsIEtTX1VWT0ZGSCwgcmVnX2RlZmF1bHRzW0tTX1VWT0ZGSF0pOwotCQkJa3MwMTI3X3dyaXRlKGMsIEtTX1VWT0ZGTCwgcmVnX2RlZmF1bHRzW0tTX1VWT0ZGTF0pOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBLU19JTlBVVF9TVklERU9fMToKLQkJY2FzZSBLU19JTlBVVF9TVklERU9fMjoKLQkJY2FzZSBLU19JTlBVVF9TVklERU9fMzoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCi0JCQkJIkRFQ09ERVJfU0VUX0lOUFVUICVkOiBTLVZpZGVvXG4iLCAqaWFyZyk7Ci0JCQkvKiBhdXRvZGV0ZWN0IDUwLzYwIEh6ICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREEsICAgMHhmYywgMHgwMCk7Ci0JCQkvKiBWU0U9MCAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURBLCAgIH4weDQwLCAweDAwKTsKLQkJCS8qIHNldCBpbnB1dCBsaW5lICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREIsICAgMHhiMCwgKmlhcmcpOwotCQkJLyogbm9uLWZyZWVydW5uaW5nIG1vZGUgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQywgICAweDcwLCAweDBhKTsKLQkJCS8qIGFuYWxvZyBpbnB1dCAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURELCAgIDB4MDMsIDB4MDApOwotCQkJLyogZW5hYmxlIGNocm9tYSBkZW1vZHVsYXRpb24gKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ1RSQUNLLCAweGNmLCAweDAwKTsKLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfTFVNQSwgMHgwMCwKLQkJCQkgICAgICAgcmVnX2RlZmF1bHRzW0tTX0xVTUFdKTsKLQkJCS8qIGRpc2FibGUgbHVtYSBjb21iICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX1ZFUlRJQSwgMHgwOCwKLQkJCQkgICAgICAgKHJlZ19kZWZhdWx0c1tLU19WRVJUSUFdJjB4ZjApfDB4MDEpOwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19WRVJUSUMsIDB4MGYsCi0JCQkJICAgICAgIHJlZ19kZWZhdWx0c1tLU19WRVJUSUNdJjB4ZjApOwotCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQiwgMHgwZiwKLQkJCQkgICAgICAgcmVnX2RlZmF1bHRzW0tTX0NIUk9NQl0mMHhmMCk7Ci0KLQkJCWtzMDEyN193cml0ZShjLCBLU19VR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1VHQUlOXSk7Ci0JCQlrczAxMjdfd3JpdGUoYywgS1NfVkdBSU4sIHJlZ19kZWZhdWx0c1tLU19WR0FJTl0pOwotCQkJa3MwMTI3X3dyaXRlKGMsIEtTX1VWT0ZGSCwgcmVnX2RlZmF1bHRzW0tTX1VWT0ZGSF0pOwotCQkJa3MwMTI3X3dyaXRlKGMsIEtTX1VWT0ZGTCwgcmVnX2RlZmF1bHRzW0tTX1VWT0ZGTF0pOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBLU19JTlBVVF9ZVVY2NTY6Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAotCQkJCSJERUNPREVSX1NFVF9JTlBVVCAxNTogWVVWNjU2XG4iKTsKLQkJCWlmIChrcy0+bm9ybSA9PSBWSURFT19NT0RFX05UU0MgfHwKLQkJCSAgICBrcy0+bm9ybSA9PSBLU19TVERfUEFMX00pCi0JCQkJLyogZm9yY2UgNjAgSHogKi8KLQkJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREEsICAgMHhmYywgMHgwMyk7Ci0JCQllbHNlCi0JCQkJLyogZm9yY2UgNTAgSHogKi8KLQkJCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREEsICAgMHhmYywgMHgwMik7Ci0KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQSwgICAweGZmLCAweDQwKTsgLyogVlNFPTEgKi8KLQkJCS8qIHNldCBpbnB1dCBsaW5lIGFuZCBWQUxJR04gKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ01EQiwgICAweGIwLCAoKmlhcmcgfCAweDQwKSk7Ci0JCQkvKiBmcmVlcnVubmluZyBtb2RlLCAqLwotCQkJLyogVFNUR0VOID0gMSBUU1RHRlI9MTEgVFNUR1BIPTAgVFNUR1BLPTAgIFZNRU09MSovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREMsICAgMHg3MCwgMHg4Nyk7Ci0JCQkvKiBkaWdpdGFsIGlucHV0LCBTWU5ESVIgPSAwIElOUFNMPTAxIENMS0RJUj0wIEVBVj0wICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NNREQsICAgMHgwMywgMHgwOCk7Ci0JCQkvKiBkaXNhYmxlIGNocm9tYSBkZW1vZHVsYXRpb24gKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ1RSQUNLLCAweGNmLCAweDMwKTsKLQkJCS8qIEhZUEsgPTAxIENUUkFQID0gMCBIWUJXUj0wIFBFRD0xIFJHQkg9MSBVTklUPTEgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfTFVNQSwgICAweDAwLCAweDcxKTsKLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfVkVSVElDLCAweDBmLAotCQkJCSAgICAgICByZWdfZGVmYXVsdHNbS1NfVkVSVElDXSYweGYwKTsKLQotCQkJLyogc2NhbGVyIGZ1bGxidywgbHVtYSBjb21iIG9mZiAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19WRVJUSUEsIDB4MDgsIDB4ODEpOwotCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQiwgMHgwZiwKLQkJCQkgICAgICAgcmVnX2RlZmF1bHRzW0tTX0NIUk9NQl0mMHhmMCk7Ci0KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ09OLCAweDAwLCAweDAwKTsKLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQlJULCAweDAwLCAzMik7CS8qIHNwZWM6IDM0ICovCi0JCQkJLyogc3BlYzogMjI5IChlNSkgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfU0FULCAweDAwLCAweGU4KTsKLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfSFVFLCAweDAwLCAwKTsKLQotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19VR0FJTiwgMHgwMCwgMjM4KTsKLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfVkdBSU4sIDB4MDAsIDB4MDApOwotCi0JCQkvKlVPRkY6MHgzMCwgVk9GRjoweDMwLCBUU1RDR049MSAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19VVk9GRkgsIDB4MDAsIDB4NGYpOwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19VVk9GRkwsIDB4MDAsIDB4MDApOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCi0JCQkJIkRFQ09ERVJfU0VUX0lOUFVUOiBVbmtub3duIGlucHV0ICVkXG4iLCAqaWFyZyk7Ci0JCQlicmVhazsKLQkJfQotCi0JCS8qIGhhY2s6IENETUxQRiBzb21ldGltZXMgc3BvbnRhbmVvdXNseSBzd2l0Y2hlcyBvbjsgKi8KLQkJLyogZm9yY2UgYmFjayBvZmYgKi8KLQkJa3MwMTI3X3dyaXRlKGMsIEtTX0RFTU9ELCByZWdfZGVmYXVsdHNbS1NfREVNT0RdKTsKKwkJa3MwMTI3X3dyaXRlKHNkLCBLU19VR0FJTiwgcmVnX2RlZmF1bHRzW0tTX1VHQUlOXSk7CisJCWtzMDEyN193cml0ZShzZCwgS1NfVkdBSU4sIHJlZ19kZWZhdWx0c1tLU19WR0FJTl0pOworCQlrczAxMjdfd3JpdGUoc2QsIEtTX1VWT0ZGSCwgcmVnX2RlZmF1bHRzW0tTX1VWT0ZGSF0pOworCQlrczAxMjdfd3JpdGUoc2QsIEtTX1VWT0ZGTCwgcmVnX2RlZmF1bHRzW0tTX1VWT0ZGTF0pOwogCQlicmVhazsKIAotCWNhc2UgREVDT0RFUl9TRVRfT1VUUFVUOgotCQlzd2l0Y2goKmlhcmcpIHsKLQkJY2FzZSBLU19PVVRQVVRfWVVWNjU2RToKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCi0JCQkJIkRFQ09ERVJfU0VUX09VVFBVVDogT1VUUFVUX1lVVjY1NkUgKE1pc3NpbmcpXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOworCWNhc2UgS1NfSU5QVVRfWVVWNjU2OgorCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzX3JvdXRpbmcgMTU6IFlVVjY1NlxuIik7CisJCWlmIChrcy0+bm9ybSAmIFY0TDJfU1REXzUyNV82MCkKKwkJCS8qIGZvcmNlIDYwIEh6ICovCisJCQlrczAxMjdfYW5kX29yKHNkLCBLU19DTURBLCAgIDB4ZmMsIDB4MDMpOworCQllbHNlCisJCQkvKiBmb3JjZSA1MCBIeiAqLworCQkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ01EQSwgICAweGZjLCAweDAyKTsKIAotCQljYXNlIEtTX09VVFBVVF9FWFY6Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAotCQkJCSJERUNPREVSX1NFVF9PVVRQVVQ6IE9VVFBVVF9FWFZcbiIpOwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19PRk1UQSwgMHhmMCwgMHgwOSk7Ci0JCQlicmVhazsKLQkJfQorCQlrczAxMjdfYW5kX29yKHNkLCBLU19DTURBLCAgIDB4ZmYsIDB4NDApOyAvKiBWU0U9MSAqLworCQkvKiBzZXQgaW5wdXQgbGluZSBhbmQgVkFMSUdOICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NNREIsICAgMHhiMCwgKHJvdXRlLT5pbnB1dCB8IDB4NDApKTsKKwkJLyogZnJlZXJ1bm5pbmcgbW9kZSwgKi8KKwkJLyogVFNUR0VOID0gMSBUU1RHRlI9MTEgVFNUR1BIPTAgVFNUR1BLPTAgIFZNRU09MSovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NNREMsICAgMHg3MCwgMHg4Nyk7CisJCS8qIGRpZ2l0YWwgaW5wdXQsIFNZTkRJUiA9IDAgSU5QU0w9MDEgQ0xLRElSPTAgRUFWPTAgKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ01ERCwgICAweDAzLCAweDA4KTsKKwkJLyogZGlzYWJsZSBjaHJvbWEgZGVtb2R1bGF0aW9uICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NUUkFDSywgMHhjZiwgMHgzMCk7CisJCS8qIEhZUEsgPTAxIENUUkFQID0gMCBIWUJXUj0wIFBFRD0xIFJHQkg9MSBVTklUPTEgKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfTFVNQSwgICAweDAwLCAweDcxKTsKKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfVkVSVElDLCAweDBmLAorCQkJICAgICAgIHJlZ19kZWZhdWx0c1tLU19WRVJUSUNdJjB4ZjApOworCisJCS8qIHNjYWxlciBmdWxsYncsIGx1bWEgY29tYiBvZmYgKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfVkVSVElBLCAweDA4LCAweDgxKTsKKworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DSFJPTUIsIDB4MGYsCisJCQkgICAgICAgcmVnX2RlZmF1bHRzW0tTX0NIUk9NQl0mMHhmMCk7CisKKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ09OLCAweDAwLCAweDAwKTsKKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQlJULCAweDAwLCAzMik7CS8qIHNwZWM6IDM0ICovCisJCQkvKiBzcGVjOiAyMjkgKGU1KSAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19TQVQsIDB4MDAsIDB4ZTgpOworCQlrczAxMjdfYW5kX29yKHNkLCBLU19IVUUsIDB4MDAsIDApOworCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX1VHQUlOLCAweDAwLCAyMzgpOworCQlrczAxMjdfYW5kX29yKHNkLCBLU19WR0FJTiwgMHgwMCwgMHgwMCk7CisKKwkJLypVT0ZGOjB4MzAsIFZPRkY6MHgzMCwgVFNUQ0dOPTEgKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfVVZPRkZILCAweDAwLCAweDRmKTsKKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfVVZPRkZMLCAweDAwLCAweDAwKTsKIAkJYnJlYWs7CiAKLQljYXNlIERFQ09ERVJfU0VUX05PUk06IC8qIHNhbSBUaGlzIGJsb2NrIG1peGVzIG9sZCBhbmQgbmV3IG5vcm0gbmFtZXMuLi4gKi8KLQkJLyogU2V0IHRvIGF1dG9tYXRpYyBTRUNBTS9Gc2MgbW9kZSAqLwotCQlrczAxMjdfYW5kX29yKGMsIEtTX0RFTU9ELCAweGYwLCAweDAwKTsKLQotCQlrcy0+bm9ybSA9ICppYXJnOwotCQlzd2l0Y2ggKCppYXJnKSB7Ci0JCS8qIHRoaXMgaXMgdW50ZXN0ZWQgISEgKi8KLQkJLyogSXQganVzdCBkZXRlY3RzIFBBTF9OL05UU0NfTSAobm8gc3BlY2lhbCBmcmVxdWVuY2llcykgKi8KLQkJLyogQW5kIHlvdSBoYXZlIHRvIHNldCB0aGUgc3RhbmRhcmQgYSBzZWNvbmQgdGltZSBhZnRlcndhcmRzICovCi0JCWNhc2UgVklERU9fTU9ERV9BVVRPOgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKLQkJCQkiREVDT0RFUl9TRVRfTk9STTogQVVUT1xuIik7Ci0KLQkJCS8qIFRoZSBjaGlwIGRldGVybWluZXMgdGhlIGZvcm1hdCAqLwotCQkJLyogYmFzZWQgb24gdGhlIGN1cnJlbnQgZmllbGQgcmF0ZSAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DTURBLCAgIDB4ZmMsIDB4MDApOwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19DSFJPTUEsIDB4OWYsIDB4MjApOwotCQkJLyogVGhpcyBpcyB3cm9uZyBmb3IgUEFMICEgQXMgSSBzYWlkLCAqLwotCQkJLyogeW91IG5lZWQgdG8gc2V0IHRoZSBzdGFuZGFyZCBvbmNlIGFnYWluICEhICovCi0JCQlrcy0+Zm9ybWF0X2hlaWdodCA9IDI0MDsKLQkJCWtzLT5mb3JtYXRfd2lkdGggPSA3MDQ7Ci0JCQlicmVhazsKLQotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCi0JCQkJIkRFQ09ERVJfU0VUX05PUk06IE5UU0NfTVxuIik7Ci0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQSwgMHg5ZiwgMHgyMCk7Ci0JCQlrcy0+Zm9ybWF0X2hlaWdodCA9IDI0MDsKLQkJCWtzLT5mb3JtYXRfd2lkdGggPSA3MDQ7Ci0JCQlicmVhazsKLQotCQljYXNlIEtTX1NURF9OVFNDX046Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAotCQkJCSJLUzAxMjdfU0VUX05PUk06IE5UU0NfTiAoZml4bWUpXG4iKTsKLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01BLCAweDlmLCAweDQwKTsKLQkJCWtzLT5mb3JtYXRfaGVpZ2h0ID0gMjQwOwotCQkJa3MtPmZvcm1hdF93aWR0aCA9IDcwNDsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAotCQkJCSJERUNPREVSX1NFVF9OT1JNOiBQQUxfTlxuIik7Ci0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQSwgMHg5ZiwgMHgyMCk7Ci0JCQlrcy0+Zm9ybWF0X2hlaWdodCA9IDI5MDsKLQkJCWtzLT5mb3JtYXRfd2lkdGggPSA3MDQ7Ci0JCQlicmVhazsKLQotCQljYXNlIEtTX1NURF9QQUxfTToKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGMsCi0JCQkJIktTMDEyN19TRVRfTk9STTogUEFMX00gKGZpeG1lKVxuIik7Ci0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NIUk9NQSwgMHg5ZiwgMHg0MCk7Ci0JCQlrcy0+Zm9ybWF0X2hlaWdodCA9IDI5MDsKLQkJCWtzLT5mb3JtYXRfd2lkdGggPSA3MDQ7Ci0JCQlicmVhazsKLQotCQljYXNlIFZJREVPX01PREVfU0VDQU06Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAotCQkJCSJLUzAxMjdfU0VUX05PUk06IFNFQ0FNXG4iKTsKLQkJCWtzLT5mb3JtYXRfaGVpZ2h0ID0gMjkwOwotCQkJa3MtPmZvcm1hdF93aWR0aCA9IDcwNDsKLQotCQkJLyogc2V0IHRvIHNlY2FtIGF1dG9kZXRlY3Rpb24gKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfQ0hST01BLCAweGRmLCAweDIwKTsKLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfREVNT0QsIDB4ZjAsIDB4MDApOwotCQkJc2NoZWR1bGVfdGltZW91dF9pbnRlcnJ1cHRpYmxlKEhaLzEwKzEpOwotCi0JCQkvKiBkaWQgaXQgYXV0b2RldGVjdD8gKi8KLQkJCWlmIChrczAxMjdfcmVhZChjLCBLU19ERU1PRCkgJiAweDQwKQotCQkJCWJyZWFrOwotCi0JCQkvKiBmb3JjZSB0byBzZWNhbSBtb2RlICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0RFTU9ELCAweGYwLCAweDBmKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAotCQkJCSJERUNPREVSX1NFVF9OT1JNOiBVbmtub3duIG5vcm0gJWRcbiIsICppYXJnKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBERUNPREVSX1NFVF9QSUNUVVJFOgotCQl2NGxfZGJnKDEsIGRlYnVnLCBjLAotCQkJIkRFQ09ERVJfU0VUX1BJQ1RVUkU6IG5vdCB5ZXQgc3VwcG9ydGVkXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9CUklHSFRORVNTOiBNZXJnZSBpbnRvIERFQ09ERVJfU0VUX1BJQ1RVUkUgKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9DT05UUkFTVDogTWVyZ2UgaW50byBERUNPREVSX1NFVF9QSUNUVVJFICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfSFVFOiBNZXJnZSBpbnRvIERFQ09ERVJfU0VUX1BJQ1RVUkU/ICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfU0FUVVJBVElPTjogTWVyZ2UgaW50byBERUNPREVSX1NFVF9QSUNUVVJFICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfQUdDX01PREU6ICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfQUdDOiAqLwotCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0NIUk9NQV9NT0RFOiAqLwotCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX1BJWENMS19NT0RFOiAqLwotCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0dBTU1BX01PREU6ICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfVUdBSU46ICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfVkdBSU46ICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfSU5WQUxZOiAqLwotCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0lOVkFMVTogKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9JTlZBTFY6ICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfVU5VU0VZOiAqLwotCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX1VOVVNFVTogKi8KLQkvKiBzYW0gdG9kbzogS1MwMTI3X1NFVF9VTlVTRVY6ICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfVlNBTElHTl9NT0RFOiAqLwotCi0JY2FzZSBERUNPREVSX0VOQUJMRV9PVVRQVVQ6Ci0JewotCQlpbnQgZW5hYmxlOwotCi0JCWlhcmcgPSBhcmc7Ci0JCWVuYWJsZSA9ICgqaWFyZyAhPSAwKTsKLQkJaWYgKGVuYWJsZSkgewotCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKLQkJCQkiREVDT0RFUl9FTkFCTEVfT1VUUFVUIG9uXG4iKTsKLQkJCS8qIEFsbCBvdXRwdXQgcGlucyBvbiAqLwotCQkJa3MwMTI3X2FuZF9vcihjLCBLU19PRk1UQSwgMHhjZiwgMHgzMCk7Ci0JCQkvKiBPYmV5IHRoZSBPRU4gcGluICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NERU0sIDB4N2YsIDB4MDApOwotCQl9IGVsc2UgewotCQkJdjRsX2RiZygxLCBkZWJ1ZywgYywKLQkJCQkiREVDT0RFUl9FTkFCTEVfT1VUUFVUIG9mZlxuIik7Ci0JCQkvKiBWaWRlbyBvdXRwdXQgcGlucyBvZmYgKi8KLQkJCWtzMDEyN19hbmRfb3IoYywgS1NfT0ZNVEEsIDB4Y2YsIDB4MDApOwotCQkJLyogSWdub3JlIHRoZSBPRU4gcGluICovCi0JCQlrczAxMjdfYW5kX29yKGMsIEtTX0NERU0sIDB4N2YsIDB4ODApOwotCQl9CisJZGVmYXVsdDoKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLAorCQkJInNfcm91dGluZzogVW5rbm93biBpbnB1dCAlZFxuIiwgcm91dGUtPmlucHV0KTsKIAkJYnJlYWs7CiAJfQogCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfT1VUUFVUX01PREU6ICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfV0lEVEg6ICovCi0JLyogc2FtIHRvZG86IEtTMDEyN19TRVRfSEVJR0hUOiAqLwotCS8qIHNhbSB0b2RvOiBLUzAxMjdfU0VUX0hTQ0FMRTogKi8KKwkvKiBoYWNrOiBDRE1MUEYgc29tZXRpbWVzIHNwb250YW5lb3VzbHkgc3dpdGNoZXMgb247ICovCisJLyogZm9yY2UgYmFjayBvZmYgKi8KKwlrczAxMjdfd3JpdGUoc2QsIEtTX0RFTU9ELCByZWdfZGVmYXVsdHNbS1NfREVNT0RdKTsKKwlyZXR1cm4gMDsKK30KIAotCWNhc2UgREVDT0RFUl9HRVRfU1RBVFVTOgotCQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAiREVDT0RFUl9HRVRfU1RBVFVTXG4iKTsKLQkJKmlhcmcgPSAwOwotCQlzdGF0dXMgPSBrczAxMjdfcmVhZChjLCBLU19TVEFUKTsKLQkJaWYgKCEoc3RhdHVzICYgMHgyMCkpCQkgLyogTk9WSUQgbm90IHNldCAqLwotCQkJKmlhcmcgPSAoKmlhcmcgfCBERUNPREVSX1NUQVRVU19HT09EKTsKLQkJaWYgKChzdGF0dXMgJiAweDAxKSkJCSAgICAgIC8qIENMT0NLIHNldCAqLwotCQkJKmlhcmcgPSAoKmlhcmcgfCBERUNPREVSX1NUQVRVU19DT0xPUik7Ci0JCWlmICgoc3RhdHVzICYgMHgwOCkpCQkgICAvKiBQQUxERVQgc2V0ICovCi0JCQkqaWFyZyA9ICgqaWFyZyB8IERFQ09ERVJfU1RBVFVTX1BBTCk7Ci0JCWVsc2UKLQkJCSppYXJnID0gKCppYXJnIHwgREVDT0RFUl9TVEFUVVNfTlRTQyk7Ci0JCWJyZWFrOworc3RhdGljIGludCBrczAxMjdfc19zdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgc3RkKQoreworCXN0cnVjdCBrczAxMjcgKmtzID0gdG9fa3MwMTI3KHNkKTsKIAotCS8qIENhdGNoIGFueSB1bmtub3duIGNvbW1hbmQgKi8KLQlkZWZhdWx0OgotCQl2NGxfZGJnKDEsIGRlYnVnLCBjLCAidW5rbm93bjogMHglMDh4XG4iLCBjbWQpOwotCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBTZXQgdG8gYXV0b21hdGljIFNFQ0FNL0ZzYyBtb2RlICovCisJa3MwMTI3X2FuZF9vcihzZCwgS1NfREVNT0QsIDB4ZjAsIDB4MDApOworCisJa3MtPm5vcm0gPSBzdGQ7CisJaWYgKHN0ZCAmIFY0TDJfU1REX05UU0MpIHsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLAorCQkJInNfc3RkOiBOVFNDX01cbiIpOworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DSFJPTUEsIDB4OWYsIDB4MjApOworCX0gZWxzZSBpZiAoc3RkICYgVjRMMl9TVERfUEFMX04pIHsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLAorCQkJInNfc3RkOiBOVFNDX04gKGZpeG1lKVxuIik7CisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NIUk9NQSwgMHg5ZiwgMHg0MCk7CisJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9QQUwpIHsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLAorCQkJInNfc3RkOiBQQUxfTlxuIik7CisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NIUk9NQSwgMHg5ZiwgMHgyMCk7CisJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9QQUxfTSkgeworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsCisJCQkic19zdGQ6IFBBTF9NIChmaXhtZSlcbiIpOworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DSFJPTUEsIDB4OWYsIDB4NDApOworCX0gZWxzZSBpZiAoc3RkICYgVjRMMl9TVERfU0VDQU0pIHsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLAorCQkJInNfc3RkOiBTRUNBTVxuIik7CisKKwkJLyogc2V0IHRvIHNlY2FtIGF1dG9kZXRlY3Rpb24gKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfQ0hST01BLCAweGRmLCAweDIwKTsKKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfREVNT0QsIDB4ZjAsIDB4MDApOworCQlzY2hlZHVsZV90aW1lb3V0X2ludGVycnVwdGlibGUoSFovMTArMSk7CisKKwkJLyogZGlkIGl0IGF1dG9kZXRlY3Q/ICovCisJCWlmICghKGtzMDEyN19yZWFkKHNkLCBLU19ERU1PRCkgJiAweDQwKSkKKwkJCS8qIGZvcmNlIHRvIHNlY2FtIG1vZGUgKi8KKwkJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0RFTU9ELCAweGYwLCAweDBmKTsKKwl9IGVsc2UgeworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzX3N0ZDogVW5rbm93biBub3JtICVsbHhcbiIsCisJCQkgICAgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylzdGQpOwogCX0KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBrczAxMjdfc19zdHJlYW0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IGVuYWJsZSkKK3sKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzX3N0cmVhbSglZClcbiIsIGVuYWJsZSk7CisJaWYgKGVuYWJsZSkgeworCQkvKiBBbGwgb3V0cHV0IHBpbnMgb24gKi8KKwkJa3MwMTI3X2FuZF9vcihzZCwgS1NfT0ZNVEEsIDB4Y2YsIDB4MzApOworCQkvKiBPYmV5IHRoZSBPRU4gcGluICovCisJCWtzMDEyN19hbmRfb3Ioc2QsIEtTX0NERU0sIDB4N2YsIDB4MDApOworCX0gZWxzZSB7CisJCS8qIFZpZGVvIG91dHB1dCBwaW5zIG9mZiAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19PRk1UQSwgMHhjZiwgMHgwMCk7CisJCS8qIElnbm9yZSB0aGUgT0VOIHBpbiAqLworCQlrczAxMjdfYW5kX29yKHNkLCBLU19DREVNLCAweDdmLCAweDgwKTsKKwl9CisJcmV0dXJuIDA7Cit9CiAKLS8qIEFkZHJlc3NlcyB0byBzY2FuICovCi0jZGVmaW5lIEkyQ19LUzAxMjdfQURET04gICAweEQ4Ci0jZGVmaW5lIEkyQ19LUzAxMjdfT05CT0FSRCAweERBCitzdGF0aWMgaW50IGtzMDEyN19zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTMyICpwc3RhdHVzLCB2NGwyX3N0ZF9pZCAqcHN0ZCkKK3sKKwlpbnQgc3RhdCA9IFY0TDJfSU5fU1RfTk9fU0lHTkFMOworCXU4IHN0YXR1czsKKwl2NGwyX3N0ZF9pZCBzdGQgPSBWNEwyX1NURF9BTEw7CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7Ci0JSTJDX0tTMDEyN19BRERPTiA+PiAxLAotCUkyQ19LUzAxMjdfT05CT0FSRCA+PiAxLAotCUkyQ19DTElFTlRfRU5ECisJc3RhdHVzID0ga3MwMTI3X3JlYWQoc2QsIEtTX1NUQVQpOworCWlmICghKHN0YXR1cyAmIDB4MjApKQkJIC8qIE5PVklEIG5vdCBzZXQgKi8KKwkJc3RhdCA9IDA7CisJaWYgKCEoc3RhdHVzICYgMHgwMSkpCQkgICAgICAvKiBDTE9DSyBzZXQgKi8KKwkJc3RhdCB8PSBWNEwyX0lOX1NUX05PX0NPTE9SOworCWlmICgoc3RhdHVzICYgMHgwOCkpCQkgICAvKiBQQUxERVQgc2V0ICovCisJCXN0ZCA9IFY0TDJfU1REX1BBTDsKKwllbHNlCisJCXN0ZCA9IFY0TDJfU1REX05UU0M7CisJaWYgKHBzdGQpCisJCSpwc3RkID0gc3RkOworCWlmIChwc3RhdHVzKQorCQkqcHN0YXR1cyA9IHN0YXQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQga3MwMTI3X3F1ZXJ5c3RkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkICpzdGQpCit7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAicXVlcnlzdGRcbiIpOworCXJldHVybiBrczAxMjdfc3RhdHVzKHNkLCBOVUxMLCBzdGQpOworfQorCitzdGF0aWMgaW50IGtzMDEyN19nX2lucHV0X3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgKnN0YXR1cykKK3sKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJnX2lucHV0X3N0YXR1c1xuIik7CisJcmV0dXJuIGtzMDEyN19zdGF0dXMoc2QsIHN0YXR1cywgTlVMTCk7Cit9CisKK3N0YXRpYyBpbnQga3MwMTI3X2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IGtzMDEyNyAqa3MgPSB0b19rczAxMjcoc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwga3MtPmlkZW50LCAwKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBrczAxMjdfY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IGtzMDEyN19nX2NoaXBfaWRlbnQsCiB9OwogCi1JMkNfQ0xJRU5UX0lOU01PRDsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdHVuZXJfb3BzIGtzMDEyN190dW5lcl9vcHMgPSB7CisJLnNfc3RkID0ga3MwMTI3X3Nfc3RkLAorfTsKIAotc3RhdGljIGludCBrczAxMjdfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmMsIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIGtzMDEyN192aWRlb19vcHMgPSB7CisJLnNfcm91dGluZyA9IGtzMDEyN19zX3JvdXRpbmcsCisJLnNfc3RyZWFtID0ga3MwMTI3X3Nfc3RyZWFtLAorCS5xdWVyeXN0ZCA9IGtzMDEyN19xdWVyeXN0ZCwKKwkuZ19pbnB1dF9zdGF0dXMgPSBrczAxMjdfZ19pbnB1dF9zdGF0dXMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBrczAxMjdfb3BzID0geworCS5jb3JlID0gJmtzMDEyN19jb3JlX29wcywKKwkudHVuZXIgPSAma3MwMTI3X3R1bmVyX29wcywKKwkudmlkZW8gPSAma3MwMTI3X3ZpZGVvX29wcywKK307CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKKworc3RhdGljIGludCBrczAxMjdfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBrczAxMjcgKmtzOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAKLQl2NGxfaW5mbyhjLCAiJXMgY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKLQkJYy0+YWRkciA9PSAoSTJDX0tTMDEyN19BRERPTiA+PiAxKSA/ICJhZGRvbiIgOiAib24tYm9hcmQiLAotCQljLT5hZGRyIDw8IDEsIGMtPmFkYXB0ZXItPm5hbWUpOworCXY0bF9pbmZvKGNsaWVudCwgIiVzIGNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCisJCWNsaWVudC0+YWRkciA9PSAoSTJDX0tTMDEyN19BRERPTiA+PiAxKSA/ICJhZGRvbiIgOiAib24tYm9hcmQiLAorCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKIAogCWtzID0ga3phbGxvYyhzaXplb2YoKmtzKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKGtzID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCi0JaTJjX3NldF9jbGllbnRkYXRhKGMsIGtzKTsKLQotCWtzLT5rc190eXBlID0gS1NfVFlQRV9VTktOT1dOOworCXNkID0gJmtzLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAma3MwMTI3X29wcyk7CiAKIAkvKiBwb3dlciB1cCAqLwogCWluaXRfcmVnX2RlZmF1bHRzKCk7Ci0Ja3MwMTI3X3dyaXRlKGMsIEtTX0NNREEsIDB4MmMpOworCWtzMDEyN193cml0ZShzZCwgS1NfQ01EQSwgMHgyYyk7CiAJbWRlbGF5KDEwKTsKIAogCS8qIHJlc2V0IHRoZSBkZXZpY2UgKi8KLQlrczAxMjdfcmVzZXQoYyk7CisJa3MwMTI3X2luaXQoc2QpOwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IGtzMDEyN19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmMpCitzdGF0aWMgaW50IGtzMDEyN19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3Qga3MwMTI3ICprcyA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAKLQlrczAxMjdfd3JpdGUoYywgS1NfT0ZNVEEsIDB4MjApOyAvKiB0cmlzdGF0ZSAqLwotCWtzMDEyN193cml0ZShjLCBLU19DTURBLCAweDJjIHwgMHg4MCk7IC8qIHBvd2VyIGRvd24gKi8KLQotCWtmcmVlKGtzKTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa3MwMTI3X3dyaXRlKHNkLCBLU19PRk1UQSwgMHgyMCk7IC8qIHRyaXN0YXRlICovCisJa3MwMTI3X3dyaXRlKHNkLCBLU19DTURBLCAweDJjIHwgMHg4MCk7IC8qIHBvd2VyIGRvd24gKi8KKwlrZnJlZSh0b19rczAxMjcoc2QpKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBrczAxMjdfbGVnYWN5X3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKLXsKLQlyZXR1cm4gYWRhcHRlci0+aWQgPT0gSTJDX0hXX0JfWlIzNjA2NzsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIGtzMDEyN19pZFtdID0gewogCXsgImtzMDEyNyIsIDAgfSwKKwl7ICJrczAxMjdiIiwgMCB9LAorCXsgImtzMDEyMnMiLCAwIH0sCiAJeyB9CiB9OwogTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIGtzMDEyN19pZCk7CiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJrczAxMjciLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9LUzAxMjcsCi0JLmNvbW1hbmQgPSBrczAxMjdfY29tbWFuZCwKIAkucHJvYmUgPSBrczAxMjdfcHJvYmUsCiAJLnJlbW92ZSA9IGtzMDEyN19yZW1vdmUsCi0JLmxlZ2FjeV9wcm9iZSA9IGtzMDEyN19sZWdhY3lfcHJvYmUsCiAJLmlkX3RhYmxlID0ga3MwMTI3X2lkLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8va3MwMTI3LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL2tzMDEyNy5oCmluZGV4IDFlYzU3ODguLmNiOGFiZDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8va3MwMTI3LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9rczAxMjcuaApAQCAtMjQsOCArMjQsNiBAQAogI2lmbmRlZiBLUzAxMjdfSAogI2RlZmluZSBLUzAxMjdfSAogCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLQogLyogaW5wdXQgY2hhbm5lbHMgKi8KICNkZWZpbmUgS1NfSU5QVVRfQ09NUE9TSVRFXzEgICAgMAogI2RlZmluZSBLU19JTlBVVF9DT01QT1NJVEVfMiAgICAxCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL201Mjc5MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tNTI3OTAuYwppbmRleCBkZTM5N2VmLi4xZjM0MGZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL201Mjc5MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbTUyNzkwLmMKQEAgLTEzMiwxMSArMTMyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBtNTI3OTBfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIG01Mjc5MF9jb3JlX29wcyA9IHsKQEAgLTIxMCw4ICsyMDUsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAibTUyNzkwIiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfTTUyNzkwLAotCS5jb21tYW5kID0gbTUyNzkwX2NvbW1hbmQsCiAJLnByb2JlID0gbTUyNzkwX3Byb2JlLAogCS5yZW1vdmUgPSBtNTI3OTBfcmVtb3ZlLAogCS5pZF90YWJsZSA9IG01Mjc5MF9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbWV5ZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMKaW5kZXggYjc2ZTMzZC4uMmFkMTFmMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tZXllLmMKQEAgLTEwMTcsNyArMTAxNyw2IEBACiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQogewotCW1lbXNldChjYXAsIDAsIHNpemVvZigqY2FwKSk7CiAJc3RyY3B5KGNhcC0+ZHJpdmVyLCAibWV5ZSIpOwogCXN0cmNweShjYXAtPmNhcmQsICJtZXllIik7CiAJc3ByaW50ZihjYXAtPmJ1c19pbmZvLCAiUENJOiVzIiwgcGNpX25hbWUobWV5ZS5tY2hpcF9kZXYpKTsKQEAgLTEwMzYsOCArMTAzNSw2IEBACiAJaWYgKGktPmluZGV4ICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwogCi0JbWVtc2V0KGksIDAsIHNpemVvZigqaSkpOwotCWktPmluZGV4ID0gMDsKIAlzdHJjcHkoaS0+bmFtZSwgIkNhbWVyYSIpOwogCWktPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOwogCkBAIC0xMjU5LDIyICsxMjU2LDEzIEBACiAJaWYgKGYtPmluZGV4ID4gMSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQlpZiAoZi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaWYgKGYtPmluZGV4ID09IDApIHsKIAkJLyogc3RhbmRhcmQgWVVWIDQyMiBjYXB0dXJlICovCi0JCW1lbXNldChmLCAwLCBzaXplb2YoKmYpKTsKLQkJZi0+aW5kZXggPSAwOwotCQlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCQlmLT5mbGFncyA9IDA7CiAJCXN0cmNweShmLT5kZXNjcmlwdGlvbiwgIllVVjQyMiIpOwogCQlmLT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9ZVVlWOwogCX0gZWxzZSB7CiAJCS8qIGNvbXByZXNzZWQgTUpQRUcgY2FwdHVyZSAqLwotCQltZW1zZXQoZiwgMCwgc2l6ZW9mKCpmKSk7Ci0JCWYtPmluZGV4ID0gMTsKLQkJZi0+dHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAkJZi0+ZmxhZ3MgPSBWNEwyX0ZNVF9GTEFHX0NPTVBSRVNTRUQ7CiAJCXN0cmNweShmLT5kZXNjcmlwdGlvbiwgIk1KUEVHIik7CiAJCWYtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX01KUEVHOwpAQCAtMTI4Niw5ICsxMjc0LDYgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewotCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KIAlpZiAoZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfWVVZViAmJgogCSAgICBmLT5mbXQucGl4LnBpeGVsZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9NSlBFRykKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMzE5LDEyICsxMzA0LDYgQEAKIHN0YXRpYyBpbnQgdmlkaW9jX2dfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLAogCQkJCSAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7Ci0JaWYgKGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQotCW1lbXNldCgmZi0+Zm10LnBpeCwgMCwgc2l6ZW9mKHN0cnVjdCB2NGwyX3BpeF9mb3JtYXQpKTsKLQlmLT50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCiAJc3dpdGNoIChtZXllLm1jaGlwX21vZGUpIHsKIAljYXNlIE1DSElQX0hJQ19NT0RFX0NPTlRfT1VUOgogCWRlZmF1bHQ6CkBAIC0xMzQxLDggKzEzMjAsNiBAQAogCWYtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gZi0+Zm10LnBpeC53aWR0aCAqIDI7CiAJZi0+Zm10LnBpeC5zaXplaW1hZ2UgPSBmLT5mbXQucGl4LmhlaWdodCAqCiAJCQkgICAgICAgZi0+Zm10LnBpeC5ieXRlc3BlcmxpbmU7Ci0JZi0+Zm10LnBpeC5jb2xvcnNwYWNlID0gMDsKLQlmLT5mbXQucGl4LnByaXYgPSAwOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMzUwLDkgKzEzMjcsNiBAQAogc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsCiAJCQkJICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKLQlpZiAoZi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaWYgKGYtPmZtdC5waXgucGl4ZWxmb3JtYXQgIT0gVjRMMl9QSVhfRk1UX1lVWVYgJiYKIAkgICAgZi0+Zm10LnBpeC5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfTUpQRUcpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtMTM5OCw5ICsxMzcyLDYgQEAKIHsKIAlpbnQgaTsKIAotCWlmIChyZXEtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWlmIChyZXEtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMTQ0MSwxNSArMTQxMiwxMSBAQAogCiBzdGF0aWMgaW50IHZpZGlvY19xdWVyeWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQogewotCWludCBpbmRleCA9IGJ1Zi0+aW5kZXg7CisJdW5zaWduZWQgaW50IGluZGV4ID0gYnVmLT5pbmRleDsKIAotCWlmIChpbmRleCA8IDAgfHwgaW5kZXggPj0gZ2J1ZmZlcnMpCisJaWYgKGluZGV4ID49IGdidWZmZXJzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCW1lbXNldChidWYsIDAsIHNpemVvZigqYnVmKSk7Ci0KLQlidWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JYnVmLT5pbmRleCA9IGluZGV4OwogCWJ1Zi0+Ynl0ZXN1c2VkID0gbWV5ZS5ncmFiX2J1ZmZlcltpbmRleF0uc2l6ZTsKIAlidWYtPmZsYWdzID0gVjRMMl9CVUZfRkxBR19NQVBQRUQ7CiAKQEAgLTE0NzEsMTMgKzE0MzgsMTAgQEAKIAogc3RhdGljIGludCB2aWRpb2NfcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQogewotCWlmIChidWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWlmIChidWYtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChidWYtPmluZGV4IDwgMCB8fCBidWYtPmluZGV4ID49IGdidWZmZXJzKQorCWlmIChidWYtPmluZGV4ID49IGdidWZmZXJzKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChtZXllLmdyYWJfYnVmZmVyW2J1Zi0+aW5kZXhdLnN0YXRlICE9IE1FWUVfQlVGX1VOVVNFRCkKQEAgLTE0OTcsOSArMTQ2MSw2IEBACiB7CiAJaW50IHJlcW5yOwogCi0JaWYgKGJ1Zi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJaWYgKGJ1Zi0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApCiAJCXJldHVybiAtRUlOVkFMOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL21zcDM0MDAtZHJpdmVyLmMKaW5kZXggNGQ3YTkxOC4uOWU4ZTA2YyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tc3AzNDAwLWRyaXZlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXNwMzQwMC1kcml2ZXIuYwpAQCAtMzY2LDI5ICszNjYsNiBAQAogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLSNpZmRlZiBDT05GSUdfVklERU9fQUxMT1dfVjRMMQotc3RhdGljIGludCBtc3BfbW9kZV92NGwyX3RvX3Y0bDEoaW50IHJ4c3ViY2hhbnMsIGludCBhdWRtb2RlKQotewotCWlmIChyeHN1YmNoYW5zID09IFY0TDJfVFVORVJfU1VCX01PTk8pCi0JCXJldHVybiBWSURFT19TT1VORF9NT05POwotCWlmIChyeHN1YmNoYW5zID09IFY0TDJfVFVORVJfU1VCX1NURVJFTykKLQkJcmV0dXJuIFZJREVPX1NPVU5EX1NURVJFTzsKLQlpZiAoYXVkbW9kZSA9PSBWNEwyX1RVTkVSX01PREVfTEFORzIpCi0JCXJldHVybiBWSURFT19TT1VORF9MQU5HMjsKLQlyZXR1cm4gVklERU9fU09VTkRfTEFORzE7Ci19Ci0KLXN0YXRpYyBpbnQgbXNwX21vZGVfdjRsMV90b192NGwyKGludCBtb2RlKQotewotCWlmIChtb2RlICYgVklERU9fU09VTkRfU1RFUkVPKQotCQlyZXR1cm4gVjRMMl9UVU5FUl9NT0RFX1NURVJFTzsKLQlpZiAobW9kZSAmIFZJREVPX1NPVU5EX0xBTkcyKQotCQlyZXR1cm4gVjRMMl9UVU5FUl9NT0RFX0xBTkcyOwotCWlmIChtb2RlICYgVklERU9fU09VTkRfTEFORzEpCi0JCXJldHVybiBWNEwyX1RVTkVSX01PREVfTEFORzE7Ci0JcmV0dXJuIFY0TDJfVFVORVJfTU9ERV9NT05POwotfQotI2VuZGlmCiAKIHN0YXRpYyBpbnQgbXNwX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewpAQCAtNDgyLDk2ICs0NTksNiBAQAogCXJldHVybiAwOwogfQogCi0jaWZkZWYgQ09ORklHX1ZJREVPX0FMTE9XX1Y0TDEKLXN0YXRpYyBsb25nIG1zcF9pb2N0bChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0Jc3RydWN0IG1zcF9zdGF0ZSAqc3RhdGUgPSB0b19zdGF0ZShzZCk7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwotCi0Jc3dpdGNoIChjbWQpIHsKLQkvKiAtLS0gdjRsIGlvY3RscyAtLS0gKi8KLQkvKiB0YWtlIGNhcmU6IGJ0dHYgZG9lcyB1c2Vyc3BhY2UgY29weWluZywgd2UnbGwgZ2V0IGEKLQkgICBrZXJuZWwgcG9pbnRlciBoZXJlLi4uICovCi0JY2FzZSBWSURJT0NHQVVESU86Ci0JewotCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gKnZhID0gYXJnOwotCi0JCXZhLT5mbGFncyB8PSBWSURFT19BVURJT19WT0xVTUUgfCBWSURFT19BVURJT19NVVRBQkxFOwotCQlpZiAoc3RhdGUtPmhhc19zb3VuZF9wcm9jZXNzaW5nKQotCQkJdmEtPmZsYWdzIHw9IFZJREVPX0FVRElPX0JBTEFOQ0UgfAotCQkJCVZJREVPX0FVRElPX0JBU1MgfAotCQkJCVZJREVPX0FVRElPX1RSRUJMRTsKLQkJaWYgKHN0YXRlLT5tdXRlZCkKLQkJCXZhLT5mbGFncyB8PSBWSURFT19BVURJT19NVVRFOwotCQl2YS0+dm9sdW1lID0gc3RhdGUtPnZvbHVtZTsKLQkJdmEtPmJhbGFuY2UgPSBzdGF0ZS0+dm9sdW1lID8gc3RhdGUtPmJhbGFuY2UgOiAzMjc2ODsKLQkJdmEtPmJhc3MgPSBzdGF0ZS0+YmFzczsKLQkJdmEtPnRyZWJsZSA9IHN0YXRlLT50cmVibGU7Ci0KLQkJaWYgKHN0YXRlLT5yYWRpbykKLQkJCWJyZWFrOwotCQlpZiAoc3RhdGUtPm9wbW9kZSA9PSBPUE1PREVfQVVUT1NFTEVDVCkKLQkJCW1zcF9kZXRlY3Rfc3RlcmVvKGNsaWVudCk7Ci0JCXZhLT5tb2RlID0gbXNwX21vZGVfdjRsMl90b192NGwxKHN0YXRlLT5yeHN1YmNoYW5zLCBzdGF0ZS0+YXVkbW9kZSk7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgVklESU9DU0FVRElPOgotCXsKLQkJc3RydWN0IHZpZGVvX2F1ZGlvICp2YSA9IGFyZzsKLQotCQlzdGF0ZS0+bXV0ZWQgPSAodmEtPmZsYWdzICYgVklERU9fQVVESU9fTVVURSk7Ci0JCXN0YXRlLT52b2x1bWUgPSB2YS0+dm9sdW1lOwotCQlzdGF0ZS0+YmFsYW5jZSA9IHZhLT5iYWxhbmNlOwotCQlzdGF0ZS0+YmFzcyA9IHZhLT5iYXNzOwotCQlzdGF0ZS0+dHJlYmxlID0gdmEtPnRyZWJsZTsKLQkJbXNwX3NldF9hdWRpbyhjbGllbnQpOwotCi0JCWlmICh2YS0+bW9kZSAhPSAwICYmIHN0YXRlLT5yYWRpbyA9PSAwICYmCi0JCSAgICBzdGF0ZS0+YXVkbW9kZSAhPSBtc3BfbW9kZV92NGwxX3RvX3Y0bDIodmEtPm1vZGUpKSB7Ci0JCQlzdGF0ZS0+YXVkbW9kZSA9IG1zcF9tb2RlX3Y0bDFfdG9fdjRsMih2YS0+bW9kZSk7Ci0JCQltc3Bfc2V0X2F1ZG1vZGUoY2xpZW50KTsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQljYXNlIFZJRElPQ1NDSEFOOgotCXsKLQkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKnZjID0gYXJnOwotCQlpbnQgdXBkYXRlID0gMDsKLQkJdjRsMl9zdGRfaWQgc3RkOwotCi0JCWlmIChzdGF0ZS0+cmFkaW8pCi0JCQl1cGRhdGUgPSAxOwotCQlzdGF0ZS0+cmFkaW8gPSAwOwotCQlpZiAodmMtPm5vcm0gPT0gVklERU9fTU9ERV9QQUwpCi0JCQlzdGQgPSBWNEwyX1NURF9QQUw7Ci0JCWVsc2UgaWYgKHZjLT5ub3JtID09IFZJREVPX01PREVfU0VDQU0pCi0JCQlzdGQgPSBWNEwyX1NURF9TRUNBTTsKLQkJZWxzZQotCQkJc3RkID0gVjRMMl9TVERfTlRTQzsKLQkJaWYgKHN0ZCAhPSBzdGF0ZS0+djRsMl9zdGQpIHsKLQkJCXN0YXRlLT52NGwyX3N0ZCA9IHN0ZDsKLQkJCXVwZGF0ZSA9IDE7Ci0JCX0KLQkJaWYgKHVwZGF0ZSkKLQkJCW1zcF93YWtlX3RocmVhZChjbGllbnQpOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIFZJRElPQ1NGUkVROgotCXsKLQkJLyogbmV3IGNoYW5uZWwgLS0ga2ljayBhdWRpbyBjYXJyaWVyIHNjYW4gKi8KLQkJbXNwX3dha2VfdGhyZWFkKGNsaWVudCk7Ci0JCWJyZWFrOwotCX0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCX0KLQlyZXR1cm4gMDsKLX0KLSNlbmRpZgotCiAvKiAtLS0gdjRsMiBpb2N0bHMgLS0tICovCiBzdGF0aWMgaW50IG1zcF9zX3JhZGlvKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7CkBAIC03MTMsMjIgKzYwMCwyNCBAQAogCXN0cnVjdCBtc3Bfc3RhdGUgKnN0YXRlID0gdG9fc3RhdGUoc2QpOwogCiAJc3dpdGNoIChxYy0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQkJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWMpOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsIDY1NTM1IC8gMTAwLCA1ODg4MCk7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDApOworCWRlZmF1bHQ6CisJCWJyZWFrOwogCX0KIAlpZiAoIXN0YXRlLT5oYXNfc291bmRfcHJvY2Vzc2luZykKIAkJcmV0dXJuIC1FSU5WQUw7CiAJc3dpdGNoIChxYy0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19MT1VETkVTUzoKLQkJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOgotCQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6Ci0JCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgotCQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxYyk7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDApOworCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKKwljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CisJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsIDY1NTM1IC8gMTAwLCAzMjc2OCk7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCXJldHVybiAwOwogfQpAQCAtODIwLDkgKzcwOSw2IEBACiAJLmdfY3RybCA9IG1zcF9nX2N0cmwsCiAJLnNfY3RybCA9IG1zcF9zX2N0cmwsCiAJLnF1ZXJ5Y3RybCA9IG1zcF9xdWVyeWN0cmwsCi0jaWZkZWYgQ09ORklHX1ZJREVPX0FMTE9XX1Y0TDEKLQkuaW9jdGwgPSBtc3BfaW9jdGwsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdHVuZXJfb3BzIG1zcF90dW5lcl9vcHMgPSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OW0wMDEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTAwMS5jCmluZGV4IGMxYmY3NWUuLmZhN2U1MDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTAwMS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTAwMS5jCkBAIC0xMiw3ICsxMiw2IEBACiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2xvZzIuaD4KLSNpbmNsdWRlIDxsaW51eC9ncGlvLmg+CiAKICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgpAQCAtNzMsOSArNzIsNyBAQAogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CiAJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlIGljZDsKIAlpbnQgbW9kZWw7CS8qIFY0TDJfSURFTlRfTVQ5TTAwMSogY29kZXMgZnJvbSB2NGwyLWNoaXAtaWRlbnQuaCAqLwotCWludCBzd2l0Y2hfZ3BpbzsKIAl1bnNpZ25lZCBjaGFyIGF1dG9leHBvc3VyZTsKLQl1bnNpZ25lZCBjaGFyIGRhdGF3aWR0aDsKIH07CiAKIHN0YXRpYyBpbnQgcmVnX3JlYWQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIGNvbnN0IHU4IHJlZykKQEAgLTE4MSw5MiArMTc4LDI4IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYnVzX3N3aXRjaF9yZXF1ZXN0KHN0cnVjdCBtdDltMDAxICptdDltMDAxLAotCQkJICAgICAgc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsKQotewotI2lmZGVmIENPTkZJR19NVDlNMDAxX1BDQTk1MzZfU1dJVENICi0JaW50IHJldDsKLQl1bnNpZ25lZCBpbnQgZ3BpbyA9IGljbC0+Z3BpbzsKLQotCWlmIChncGlvX2lzX3ZhbGlkKGdwaW8pKSB7Ci0JCS8qIFdlIGhhdmUgYSBkYXRhIGJ1cyBzd2l0Y2guICovCi0JCXJldCA9IGdwaW9fcmVxdWVzdChncGlvLCAibXQ5bTAwMSIpOwotCQlpZiAocmV0IDwgMCkgewotCQkJZGV2X2VycigmbXQ5bTAwMS0+Y2xpZW50LT5kZXYsICJDYW5ub3QgZ2V0IEdQSU8gJXVcbiIsCi0JCQkJZ3Bpbyk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0KLQkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW8sIDApOwotCQlpZiAocmV0IDwgMCkgewotCQkJZGV2X2VycigmbXQ5bTAwMS0+Y2xpZW50LT5kZXYsCi0JCQkJIkNhbm5vdCBzZXQgR1BJTyAldSB0byBvdXRwdXRcbiIsIGdwaW8pOwotCQkJZ3Bpb19mcmVlKGdwaW8pOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQotCW10OW0wMDEtPnN3aXRjaF9ncGlvID0gZ3BpbzsKLSNlbHNlCi0JbXQ5bTAwMS0+c3dpdGNoX2dwaW8gPSAtRUlOVkFMOwotI2VuZGlmCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGJ1c19zd2l0Y2hfcmVsZWFzZShzdHJ1Y3QgbXQ5bTAwMSAqbXQ5bTAwMSkKLXsKLSNpZmRlZiBDT05GSUdfTVQ5TTAwMV9QQ0E5NTM2X1NXSVRDSAotCWlmIChncGlvX2lzX3ZhbGlkKG10OW0wMDEtPnN3aXRjaF9ncGlvKSkKLQkJZ3Bpb19mcmVlKG10OW0wMDEtPnN3aXRjaF9ncGlvKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW50IGJ1c19zd2l0Y2hfYWN0KHN0cnVjdCBtdDltMDAxICptdDltMDAxLCBpbnQgZ284Yml0KQotewotI2lmZGVmIENPTkZJR19NVDlNMDAxX1BDQTk1MzZfU1dJVENICi0JaWYgKCFncGlvX2lzX3ZhbGlkKG10OW0wMDEtPnN3aXRjaF9ncGlvKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChtdDltMDAxLT5zd2l0Y2hfZ3BpbywgZ284Yml0KTsKLQlyZXR1cm4gMDsKLSNlbHNlCi0JcmV0dXJuIC1FTk9ERVY7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGludCBidXNfc3dpdGNoX3Bvc3NpYmxlKHN0cnVjdCBtdDltMDAxICptdDltMDAxKQotewotI2lmZGVmIENPTkZJR19NVDlNMDAxX1BDQTk1MzZfU1dJVENICi0JcmV0dXJuIGdwaW9faXNfdmFsaWQobXQ5bTAwMS0+c3dpdGNoX2dwaW8pOwotI2Vsc2UKLQlyZXR1cm4gMDsKLSNlbmRpZgotfQotCiBzdGF0aWMgaW50IG10OW0wMDFfc2V0X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKIAkJCQkgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKIAlzdHJ1Y3QgbXQ5bTAwMSAqbXQ5bTAwMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMDAxLCBpY2QpOwotCXVuc2lnbmVkIGludCB3aWR0aF9mbGFnID0gZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfTUFTSzsKLQlpbnQgcmV0OworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IG10OW0wMDEtPmNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CisJdW5zaWduZWQgbG9uZyB3aWR0aF9mbGFnID0gZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfTUFTSzsKIAotCS8qIEZsYWdzIHZhbGlkaXR5IHZlcmlmaWVkIGluIHRlc3RfYnVzX3BhcmFtICovCisJLyogT25seSBvbmUgd2lkdGggYml0IG1heSBiZSBzZXQgKi8KKwlpZiAoIWlzX3Bvd2VyX29mXzIod2lkdGhfZmxhZykpCisJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKChtdDltMDAxLT5kYXRhd2lkdGggIT0gMTAgJiYgKHdpZHRoX2ZsYWcgPT0gU09DQU1fREFUQVdJRFRIXzEwKSkgfHwKLQkgICAgKG10OW0wMDEtPmRhdGF3aWR0aCAhPSA5ICAmJiAod2lkdGhfZmxhZyA9PSBTT0NBTV9EQVRBV0lEVEhfOSkpIHx8Ci0JICAgIChtdDltMDAxLT5kYXRhd2lkdGggIT0gOCAgJiYgKHdpZHRoX2ZsYWcgPT0gU09DQU1fREFUQVdJRFRIXzgpKSkgewotCQkvKiBXZWxsLCB3ZSBhY3R1YWxseSBvbmx5IGNhbiBkbyAxMCBvciA4IGJpdHMuLi4gKi8KLQkJaWYgKHdpZHRoX2ZsYWcgPT0gU09DQU1fREFUQVdJRFRIXzkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJcmV0ID0gYnVzX3N3aXRjaF9hY3QobXQ5bTAwMSwKLQkJCQkgICAgIHdpZHRoX2ZsYWcgPT0gU09DQU1fREFUQVdJRFRIXzgpOwotCQlpZiAocmV0IDwgMCkKLQkJCXJldHVybiByZXQ7CisJaWYgKGljbC0+c2V0X2J1c19wYXJhbSkKKwkJcmV0dXJuIGljbC0+c2V0X2J1c19wYXJhbShpY2wsIHdpZHRoX2ZsYWcpOwogCi0JCW10OW0wMDEtPmRhdGF3aWR0aCA9IHdpZHRoX2ZsYWcgPT0gU09DQU1fREFUQVdJRFRIXzggPyA4IDogMTA7Ci0JfQorCS8qCisJICogV2l0aG91dCBib2FyZCBzcGVjaWZpYyBidXMgd2lkdGggc2V0dGluZ3Mgd2Ugb25seSBzdXBwb3J0IHRoZQorCSAqIHNlbnNvcnMgbmF0aXZlIGJ1cyB3aWR0aAorCSAqLworCWlmICh3aWR0aF9mbGFnID09IFNPQ0FNX0RBVEFXSURUSF8xMCkKKwkJcmV0dXJuIDA7CiAKLQlyZXR1cm4gMDsKKwlyZXR1cm4gLUVJTlZBTDsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGxvbmcgbXQ5bTAwMV9xdWVyeV9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCkBAIC0yNzQsMTggKzIwNywyMCBAQAogCXN0cnVjdCBtdDltMDAxICptdDltMDAxID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0wMDEsIGljZCk7CiAJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gbXQ5bTAwMS0+Y2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAkvKiBNVDlNMDAxIGhhcyBhbGwgY2FwdHVyZV9mb3JtYXQgcGFyYW1ldGVycyBmaXhlZCAqLwotCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBTT0NBTV9EQVRBV0lEVEhfMTAgfCBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfAorCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfAogCQlTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwKLQkJU09DQU1fTUFTVEVSOworCQlTT0NBTV9EQVRBX0FDVElWRV9ISUdIIHwgU09DQU1fTUFTVEVSOwogCi0JaWYgKGJ1c19zd2l0Y2hfcG9zc2libGUobXQ5bTAwMSkpCi0JCWZsYWdzIHw9IFNPQ0FNX0RBVEFXSURUSF84OworCWlmIChpY2wtPnF1ZXJ5X2J1c19wYXJhbSkKKwkJZmxhZ3MgfD0gaWNsLT5xdWVyeV9idXNfcGFyYW0oaWNsKSAmIFNPQ0FNX0RBVEFXSURUSF9NQVNLOworCWVsc2UKKwkJZmxhZ3MgfD0gU09DQU1fREFUQVdJRFRIXzEwOwogCiAJcmV0dXJuIHNvY19jYW1lcmFfYXBwbHlfc2Vuc29yX2ZsYWdzKGljbCwgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IG10OW0wMDFfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgIF9fdTMyIHBpeGZtdCwgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKK3N0YXRpYyBpbnQgbXQ5bTAwMV9zZXRfY3JvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQogewogCXN0cnVjdCBtdDltMDAxICptdDltMDAxID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0wMDEsIGljZCk7CiAJaW50IHJldDsKQEAgLTMyNCw2ICsyNTksMjAgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IG10OW0wMDFfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3QgPSB7CisJCS5sZWZ0CT0gaWNkLT54X2N1cnJlbnQsCisJCS50b3AJPSBpY2QtPnlfY3VycmVudCwKKwkJLndpZHRoCT0gZi0+Zm10LnBpeC53aWR0aCwKKwkJLmhlaWdodAk9IGYtPmZtdC5waXguaGVpZ2h0LAorCX07CisKKwkvKiBObyBzdXBwb3J0IGZvciBzY2FsaW5nIHNvIGZhciwganVzdCBjcm9wLiBUT0RPOiB1c2Ugc2tpcHBpbmcgKi8KKwlyZXR1cm4gbXQ5bTAwMV9zZXRfY3JvcChpY2QsICZyZWN0KTsKK30KKwogc3RhdGljIGludCBtdDltMDAxX3RyeV9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCiAJCQkgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CkBAIC00NDksNiArMzk4LDcgQEAKIAkucmVsZWFzZQkJPSBtdDltMDAxX3JlbGVhc2UsCiAJLnN0YXJ0X2NhcHR1cmUJCT0gbXQ5bTAwMV9zdGFydF9jYXB0dXJlLAogCS5zdG9wX2NhcHR1cmUJCT0gbXQ5bTAwMV9zdG9wX2NhcHR1cmUsCisJLnNldF9jcm9wCQk9IG10OW0wMDFfc2V0X2Nyb3AsCiAJLnNldF9mbXQJCT0gbXQ5bTAwMV9zZXRfZm10LAogCS50cnlfZm10CQk9IG10OW0wMDFfdHJ5X2ZtdCwKIAkuc2V0X2J1c19wYXJhbQkJPSBtdDltMDAxX3NldF9idXNfcGFyYW0sCkBAIC01ODMsNiArNTMzLDcgQEAKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBtdDltMDAxLT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXMzMiBkYXRhOwogCWludCByZXQ7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCS8qIFdlIG11c3QgaGF2ZSBhIHBhcmVudCBieSBub3cuIEFuZCBpdCBjYW5ub3QgYmUgYSB3cm9uZyBvbmUuCiAJICogU28gdGhpcyBlbnRpcmUgdGVzdCBpcyBjb21wbGV0ZWx5IHJlZHVuZGFudC4gKi8KQEAgLTYwMywxOCArNTU0LDEwIEBACiAJY2FzZSAweDg0MjE6CiAJCW10OW0wMDEtPm1vZGVsID0gVjRMMl9JREVOVF9NVDlNMDAxQzEyU1Q7CiAJCWljZC0+Zm9ybWF0cyA9IG10OW0wMDFfY29sb3VyX2Zvcm1hdHM7Ci0JCWlmIChncGlvX2lzX3ZhbGlkKGljbC0+Z3BpbykpCi0JCQlpY2QtPm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShtdDltMDAxX2NvbG91cl9mb3JtYXRzKTsKLQkJZWxzZQotCQkJaWNkLT5udW1fZm9ybWF0cyA9IDE7CiAJCWJyZWFrOwogCWNhc2UgMHg4NDMxOgogCQltdDltMDAxLT5tb2RlbCA9IFY0TDJfSURFTlRfTVQ5TTAwMUMxMlNUTTsKIAkJaWNkLT5mb3JtYXRzID0gbXQ5bTAwMV9tb25vY2hyb21lX2Zvcm1hdHM7Ci0JCWlmIChncGlvX2lzX3ZhbGlkKGljbC0+Z3BpbykpCi0JCQlpY2QtPm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShtdDltMDAxX21vbm9jaHJvbWVfZm9ybWF0cyk7Ci0JCWVsc2UKLQkJCWljZC0+bnVtX2Zvcm1hdHMgPSAxOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRU5PREVWOwpAQCAtNjIzLDYgKzU2NiwyNiBAQAogCQlnb3RvIGVpMmM7CiAJfQogCisJaWNkLT5udW1fZm9ybWF0cyA9IDA7CisKKwkvKgorCSAqIFRoaXMgaXMgYSAxMGJpdCBzZW5zb3IsIHNvIGJ5IGRlZmF1bHQgd2Ugb25seSBhbGxvdyAxMGJpdC4KKwkgKiBUaGUgcGxhdGZvcm0gbWF5IHN1cHBvcnQgZGlmZmVyZW50IGJ1cyB3aWR0aHMgZHVlIHRvCisJICogZGlmZmVyZW50IHJvdXRpbmcgb2YgdGhlIGRhdGEgbGluZXMuCisJICovCisJaWYgKGljbC0+cXVlcnlfYnVzX3BhcmFtKQorCQlmbGFncyA9IGljbC0+cXVlcnlfYnVzX3BhcmFtKGljbCk7CisJZWxzZQorCQlmbGFncyA9IFNPQ0FNX0RBVEFXSURUSF8xMDsKKworCWlmIChmbGFncyAmIFNPQ0FNX0RBVEFXSURUSF8xMCkKKwkJaWNkLT5udW1fZm9ybWF0cysrOworCWVsc2UKKwkJaWNkLT5mb3JtYXRzKys7CisKKwlpZiAoZmxhZ3MgJiBTT0NBTV9EQVRBV0lEVEhfOCkKKwkJaWNkLT5udW1fZm9ybWF0cysrOworCiAJZGV2X2luZm8oJmljZC0+ZGV2LCAiRGV0ZWN0ZWQgYSBNVDlNMDAxIGNoaXAgSUQgJXggKCVzKVxuIiwgZGF0YSwKIAkJIGRhdGEgPT0gMHg4NDMxID8gIkMxMlNUTSIgOiAiQzEyU1QiKTsKIApAQCAtNjg4LDE4ICs2NTEsMTAgQEAKIAlpY2QtPmhlaWdodF9tYXgJPSAxMDI0OwogCWljZC0+eV9za2lwX3RvcAk9IDE7CiAJaWNkLT5pZmFjZQk9IGljbC0+YnVzX2lkOwotCS8qIERlZmF1bHQgZGF0YXdpZHRoIC0gdGhpcyBpcyB0aGUgb25seSB3aWR0aCB0aGlzIGNhbWVyYSAobm9ybWFsbHkpCi0JICogc3VwcG9ydHMuIEl0IGlzIG9ubHkgd2l0aCBleHRyYSBsb2dpYyB0aGF0IGl0IGNhbiBzdXBwb3J0Ci0JICogb3RoZXIgd2lkdGhzLiBUaGVyZWZvcmUgaXQgc2VlbXMgdG8gYmUgYSBzZW5zaWJsZSBkZWZhdWx0LiAqLwotCW10OW0wMDEtPmRhdGF3aWR0aCA9IDEwOwogCS8qIFNpbXVsYXRlZCBhdXRvZXhwb3N1cmUuIElmIGVuYWJsZWQsIHdlIGNhbGN1bGF0ZSBzaHV0dGVyIHdpZHRoCiAJICogb3Vyc2VsdmVzIGluIHRoZSBkcml2ZXIgYmFzZWQgb24gdmVydGljYWwgYmxhbmtpbmcgYW5kIGZyYW1lIHdpZHRoICovCiAJbXQ5bTAwMS0+YXV0b2V4cG9zdXJlID0gMTsKIAotCXJldCA9IGJ1c19zd2l0Y2hfcmVxdWVzdChtdDltMDAxLCBpY2wpOwotCWlmIChyZXQpCi0JCWdvdG8gZXN3aW5pdDsKLQogCXJldCA9IHNvY19jYW1lcmFfZGV2aWNlX3JlZ2lzdGVyKGljZCk7CiAJaWYgKHJldCkKIAkJZ290byBlaXNkcjsKQEAgLTcwNyw4ICs2NjIsNiBAQAogCXJldHVybiAwOwogCiBlaXNkcjoKLQlidXNfc3dpdGNoX3JlbGVhc2UobXQ5bTAwMSk7Ci1lc3dpbml0OgogCWtmcmVlKG10OW0wMDEpOwogCXJldHVybiByZXQ7CiB9CkBAIC03MTgsNyArNjcxLDYgQEAKIAlzdHJ1Y3QgbXQ5bTAwMSAqbXQ5bTAwMSA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJc29jX2NhbWVyYV9kZXZpY2VfdW5yZWdpc3RlcigmbXQ5bTAwMS0+aWNkKTsKLQlidXNfc3dpdGNoX3JlbGVhc2UobXQ5bTAwMSk7CiAJa2ZyZWUobXQ5bTAwMSk7CiAKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXQ5bTExMS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMTExLmMKaW5kZXggNWI4ZTIwOS4uY2RkMWRkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMTExLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9tdDltMTExLmMKQEAgLTE1Miw3ICsxNTIsNyBAQAogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSBpY2Q7CiAJaW50IG1vZGVsOwkvKiBWNEwyX0lERU5UX01UOU0xMXgqIGNvZGVzIGZyb20gdjRsMi1jaGlwLWlkZW50LmggKi8KIAllbnVtIG10OW0xMTFfY29udGV4dCBjb250ZXh0OwotCXVuc2lnbmVkIGludCBsZWZ0LCB0b3AsIHdpZHRoLCBoZWlnaHQ7CisJc3RydWN0IHY0bDJfcmVjdCByZWN0OwogCXUzMiBwaXhmbXQ7CiAJdW5zaWduZWQgY2hhciBhdXRvZXhwb3N1cmU7CiAJdW5zaWduZWQgY2hhciBkYXRhd2lkdGg7CkBAIC0yNDksMTIgKzI0OSwxMyBAQAogCQlyZXR1cm4gcmVnX3dyaXRlKENPTlRFWFRfQ09OVFJPTCwgdmFsQSk7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5bTExMV9zZXR1cF9yZWN0KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQorc3RhdGljIGludCBtdDltMTExX3NldHVwX3JlY3Qoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQogewogCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CiAJaW50IHJldCwgaXNfcmF3X2Zvcm1hdDsKLQlpbnQgd2lkdGggPSBtdDltMTExLT53aWR0aDsKLQlpbnQgaGVpZ2h0ID0gbXQ5bTExMS0+aGVpZ2h0OworCWludCB3aWR0aCA9IHJlY3QtPndpZHRoOworCWludCBoZWlnaHQgPSByZWN0LT5oZWlnaHQ7CiAKIAlpZiAoKG10OW0xMTEtPnBpeGZtdCA9PSBWNEwyX1BJWF9GTVRfU0JHR1I4KQogCSAgICB8fCAobXQ5bTExMS0+cGl4Zm10ID09IFY0TDJfUElYX0ZNVF9TQkdHUjE2KSkKQEAgLTI2Miw5ICsyNjMsOSBAQAogCWVsc2UKIAkJaXNfcmF3X2Zvcm1hdCA9IDA7CiAKLQlyZXQgPSByZWdfd3JpdGUoQ09MVU1OX1NUQVJULCBtdDltMTExLT5sZWZ0KTsKKwlyZXQgPSByZWdfd3JpdGUoQ09MVU1OX1NUQVJULCByZWN0LT5sZWZ0KTsKIAlpZiAoIXJldCkKLQkJcmV0ID0gcmVnX3dyaXRlKFJPV19TVEFSVCwgbXQ5bTExMS0+dG9wKTsKKwkJcmV0ID0gcmVnX3dyaXRlKFJPV19TVEFSVCwgcmVjdC0+dG9wKTsKIAogCWlmIChpc19yYXdfZm9ybWF0KSB7CiAJCWlmICghcmV0KQpAQCAtMzkzLDYgKzM5NCw4IEBACiAKIHN0YXRpYyBpbnQgbXQ5bTExMV9yZXNldChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKIHsKKwlzdHJ1Y3QgbXQ5bTExMSAqbXQ5bTExMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDltMTExLCBpY2QpOworCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IG10OW0xMTEtPmNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJaW50IHJldDsKIAogCXJldCA9IHJlZ19zZXQoUkVTRVQsIE1UOU0xMTFfUkVTRVRfUkVTRVRfTU9ERSk7CkBAIC00MDEsNiArNDA0LDEwIEBACiAJaWYgKCFyZXQpCiAJCXJldCA9IHJlZ19jbGVhcihSRVNFVCwgTVQ5TTExMV9SRVNFVF9SRVNFVF9NT0RFCiAJCQkJfCBNVDlNMTExX1JFU0VUX1JFU0VUX1NPQyk7CisKKwlpZiAoaWNsLT5yZXNldCkKKwkJaWNsLT5yZXNldCgmbXQ5bTExMS0+Y2xpZW50LT5kZXYpOworCiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNDIwLDcgKzQyNyw3IEBACiAJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gbXQ5bTExMS0+Y2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzID0gU09DQU1fTUFTVEVSIHwgU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwKIAkJU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfCBTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCB8Ci0JCVNPQ0FNX0RBVEFXSURUSF84OworCQlTT0NBTV9EQVRBX0FDVElWRV9ISUdIIHwgU09DQU1fREFUQVdJRFRIXzg7CiAKIAlyZXR1cm4gc29jX2NhbWVyYV9hcHBseV9zZW5zb3JfZmxhZ3MoaWNsLCBmbGFncyk7CiB9CkBAIC00MzAsNiArNDM3LDIyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbXQ5bTExMV9zZXRfY3JvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQoreworCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJaW50IHJldDsKKworCWRldl9kYmcoJmljZC0+ZGV2LCAiJXMgbGVmdD0lZCwgdG9wPSVkLCB3aWR0aD0lZCwgaGVpZ2h0PSVkXG4iLAorCQlfX2Z1bmNfXywgcmVjdC0+bGVmdCwgcmVjdC0+dG9wLCByZWN0LT53aWR0aCwKKwkJcmVjdC0+aGVpZ2h0KTsKKworCXJldCA9IG10OW0xMTFfc2V0dXBfcmVjdChpY2QsIHJlY3QpOworCWlmICghcmV0KQorCQltdDltMTExLT5yZWN0ID0gKnJlY3Q7CisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCBtdDltMTExX3NldF9waXhmbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIHUzMiBwaXhmbXQpCiB7CiAJc3RydWN0IG10OW0xMTEgKm10OW0xMTEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5bTExMSwgaWNkKTsKQEAgLTQ4MCwyMyArNTAzLDI3IEBACiB9CiAKIHN0YXRpYyBpbnQgbXQ5bTExMV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgX191MzIgcGl4Zm10LCBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQorCQkJICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCXN0cnVjdCBtdDltMTExICptdDltMTExID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OW0xMTEsIGljZCk7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisJc3RydWN0IHY0bDJfcmVjdCByZWN0ID0geworCQkubGVmdAk9IG10OW0xMTEtPnJlY3QubGVmdCwKKwkJLnRvcAk9IG10OW0xMTEtPnJlY3QudG9wLAorCQkud2lkdGgJPSBwaXgtPndpZHRoLAorCQkuaGVpZ2h0CT0gcGl4LT5oZWlnaHQsCisJfTsKIAlpbnQgcmV0OwogCi0JbXQ5bTExMS0+bGVmdCA9IHJlY3QtPmxlZnQ7Ci0JbXQ5bTExMS0+dG9wID0gcmVjdC0+dG9wOwotCW10OW0xMTEtPndpZHRoID0gcmVjdC0+d2lkdGg7Ci0JbXQ5bTExMS0+aGVpZ2h0ID0gcmVjdC0+aGVpZ2h0OwotCiAJZGV2X2RiZygmaWNkLT5kZXYsICIlcyBmbXQ9JXggbGVmdD0lZCwgdG9wPSVkLCB3aWR0aD0lZCwgaGVpZ2h0PSVkXG4iLAotCQlfX2Z1bmNfXywgcGl4Zm10LCBtdDltMTExLT5sZWZ0LCBtdDltMTExLT50b3AsIG10OW0xMTEtPndpZHRoLAotCQltdDltMTExLT5oZWlnaHQpOworCQlfX2Z1bmNfXywgcGl4LT5waXhlbGZvcm1hdCwgcmVjdC5sZWZ0LCByZWN0LnRvcCwgcmVjdC53aWR0aCwKKwkJcmVjdC5oZWlnaHQpOwogCi0JcmV0ID0gbXQ5bTExMV9zZXR1cF9yZWN0KGljZCk7CisJcmV0ID0gbXQ5bTExMV9zZXR1cF9yZWN0KGljZCwgJnJlY3QpOwogCWlmICghcmV0KQotCQlyZXQgPSBtdDltMTExX3NldF9waXhmbXQoaWNkLCBwaXhmbXQpOworCQlyZXQgPSBtdDltMTExX3NldF9waXhmbXQoaWNkLCBwaXgtPnBpeGVsZm9ybWF0KTsKKwlpZiAoIXJldCkKKwkJbXQ5bTExMS0+cmVjdCA9IHJlY3Q7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtNjI3LDYgKzY1NCw3IEBACiAJLnJlbGVhc2UJCT0gbXQ5bTExMV9yZWxlYXNlLAogCS5zdGFydF9jYXB0dXJlCQk9IG10OW0xMTFfc3RhcnRfY2FwdHVyZSwKIAkuc3RvcF9jYXB0dXJlCQk9IG10OW0xMTFfc3RvcF9jYXB0dXJlLAorCS5zZXRfY3JvcAkJPSBtdDltMTExX3NldF9jcm9wLAogCS5zZXRfZm10CQk9IG10OW0xMTFfc2V0X2ZtdCwKIAkudHJ5X2ZtdAkJPSBtdDltMTExX3RyeV9mbXQsCiAJLnF1ZXJ5X2J1c19wYXJhbQk9IG10OW0xMTFfcXVlcnlfYnVzX3BhcmFtLApAQCAtODExLDcgKzgzOSw3IEBACiAKIAltdDltMTExX3NldF9jb250ZXh0KGljZCwgbXQ5bTExMS0+Y29udGV4dCk7CiAJbXQ5bTExMV9zZXRfcGl4Zm10KGljZCwgbXQ5bTExMS0+cGl4Zm10KTsKLQltdDltMTExX3NldHVwX3JlY3QoaWNkKTsKKwltdDltMTExX3NldHVwX3JlY3QoaWNkLCAmbXQ5bTExMS0+cmVjdCk7CiAJbXQ5bTExMV9zZXRfZmxpcChpY2QsIG10OW0xMTEtPmhmbGlwLCBNVDlNMTExX1JNQl9NSVJST1JfQ09MUyk7CiAJbXQ5bTExMV9zZXRfZmxpcChpY2QsIG10OW0xMTEtPnZmbGlwLCBNVDlNMTExX1JNQl9NSVJST1JfUk9XUyk7CiAJbXQ5bTExMV9zZXRfZ2xvYmFsX2dhaW4oaWNkLCBpY2QtPmdhaW4pOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDl0MDMxLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXQwMzEuYwppbmRleCAzNDlkOGUzLi4yM2Y5Y2U5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXQwMzEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXQwMzEuYwpAQCAtMTQ0LDEzICsxNDQsMTEgQEAKIAlpbnQgcmV0OwogCiAJLyogRGlzYWJsZSBjaGlwIG91dHB1dCwgc3luY2hyb25vdXMgb3B0aW9uIHVwZGF0ZSAqLwotCWRldl9kYmcoaWNkLT52ZGV2LT5wYXJlbnQsICIlc1xuIiwgX19mdW5jX18pOwotCiAJcmV0ID0gcmVnX3dyaXRlKGljZCwgTVQ5VDAzMV9SRVNFVCwgMSk7CiAJaWYgKHJldCA+PSAwKQogCQlyZXQgPSByZWdfd3JpdGUoaWNkLCBNVDlUMDMxX1JFU0VULCAwKTsKIAlpZiAocmV0ID49IDApCi0JCXJldCA9IHJlZ19jbGVhcihpY2QsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDMpOworCQlyZXQgPSByZWdfY2xlYXIoaWNkLCBNVDlUMDMxX09VVFBVVF9DT05UUk9MLCAyKTsKIAogCXJldHVybiByZXQgPj0gMCA/IDAgOiAtRUlPOwogfQpAQCAtMTU4LDE0ICsxNTYsMTQgQEAKIHN0YXRpYyBpbnQgbXQ5dDAzMV9yZWxlYXNlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewogCS8qIERpc2FibGUgdGhlIGNoaXAgKi8KLQlyZWdfY2xlYXIoaWNkLCBNVDlUMDMxX09VVFBVVF9DT05UUk9MLCAzKTsKKwlyZWdfY2xlYXIoaWNkLCBNVDlUMDMxX09VVFBVVF9DT05UUk9MLCAyKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBtdDl0MDMxX3N0YXJ0X2NhcHR1cmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CiAJLyogU3dpdGNoIHRvIG1hc3RlciAibm9ybWFsIiBtb2RlICovCi0JaWYgKHJlZ19zZXQoaWNkLCBNVDlUMDMxX09VVFBVVF9DT05UUk9MLCAzKSA8IDApCisJaWYgKHJlZ19zZXQoaWNkLCBNVDlUMDMxX09VVFBVVF9DT05UUk9MLCAyKSA8IDApCiAJCXJldHVybiAtRUlPOwogCXJldHVybiAwOwogfQpAQCAtMTczLDcgKzE3MSw3IEBACiBzdGF0aWMgaW50IG10OXQwMzFfc3RvcF9jYXB0dXJlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewogCS8qIFN0b3Agc2Vuc29yIHJlYWRvdXQgKi8KLQlpZiAocmVnX2NsZWFyKGljZCwgTVQ5VDAzMV9PVVRQVVRfQ09OVFJPTCwgMykgPCAwKQorCWlmIChyZWdfY2xlYXIoaWNkLCBNVDlUMDMxX09VVFBVVF9DT05UUk9MLCAyKSA8IDApCiAJCXJldHVybiAtRUlPOwogCXJldHVybiAwOwogfQpAQCAtMTg2LDkgKzE4NCw5IEBACiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKGZsYWdzICYgU09DQU1fUENMS19TQU1QTEVfRkFMTElORykKLQkJcmVnX3NldChpY2QsIE1UOVQwMzFfUElYRUxfQ0xPQ0tfQ09OVFJPTCwgMHg4MDAwKTsKLQllbHNlCiAJCXJlZ19jbGVhcihpY2QsIE1UOVQwMzFfUElYRUxfQ0xPQ0tfQ09OVFJPTCwgMHg4MDAwKTsKKwllbHNlCisJCXJlZ19zZXQoaWNkLCBNVDlUMDMxX1BJWEVMX0NMT0NLX0NPTlRST0wsIDB4ODAwMCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIwMSw2NyArMTk5LDczIEBACiAJcmV0dXJuIHNvY19jYW1lcmFfYXBwbHlfc2Vuc29yX2ZsYWdzKGljbCwgTVQ5VDAzMV9CVVNfUEFSQU0pOwogfQogCi1zdGF0aWMgaW50IG10OXQwMzFfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgIF9fdTMyIHBpeGZtdCwgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKKy8qIFJvdW5kIHVwIG1pbmltYSBhbmQgcm91bmQgZG93biBtYXhpbWEgKi8KK3N0YXRpYyB2b2lkIHJlY2FsY3VsYXRlX2xpbWl0cyhzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgICB1MTYgeHNraXAsIHUxNiB5c2tpcCkKK3sKKwlpY2QtPnhfbWluID0gKE1UOVQwMzFfQ09MVU1OX1NLSVAgKyB4c2tpcCAtIDEpIC8geHNraXA7CisJaWNkLT55X21pbiA9IChNVDlUMDMxX1JPV19TS0lQICsgeXNraXAgLSAxKSAvIHlza2lwOworCWljZC0+d2lkdGhfbWluID0gKE1UOVQwMzFfTUlOX1dJRFRIICsgeHNraXAgLSAxKSAvIHhza2lwOworCWljZC0+aGVpZ2h0X21pbiA9IChNVDlUMDMxX01JTl9IRUlHSFQgKyB5c2tpcCAtIDEpIC8geXNraXA7CisJaWNkLT53aWR0aF9tYXggPSBNVDlUMDMxX01BWF9XSURUSCAvIHhza2lwOworCWljZC0+aGVpZ2h0X21heCA9IE1UOVQwMzFfTUFYX0hFSUdIVCAvIHlza2lwOworfQorCitzdGF0aWMgaW50IG10OXQwMzFfc2V0X3BhcmFtcyhzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QsIHUxNiB4c2tpcCwgdTE2IHlza2lwKQogewogCXN0cnVjdCBtdDl0MDMxICptdDl0MDMxID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OXQwMzEsIGljZCk7CiAJaW50IHJldDsKKwl1MTYgeGJpbiwgeWJpbiwgd2lkdGgsIGhlaWdodCwgbGVmdCwgdG9wOwogCWNvbnN0IHUxNiBoYmxhbmsgPSBNVDlUMDMxX0hPUklaT05UQUxfQkxBTkssCiAJCXZibGFuayA9IE1UOVQwMzFfVkVSVElDQUxfQkxBTks7Ci0JdTE2IHhiaW4sIHhza2lwID0gbXQ5dDAzMS0+eHNraXAsIHliaW4sIHlza2lwID0gbXQ5dDAzMS0+eXNraXAsCi0JCXdpZHRoID0gcmVjdC0+d2lkdGggKiB4c2tpcCwgaGVpZ2h0ID0gcmVjdC0+aGVpZ2h0ICogeXNraXA7CiAKLQlpZiAocGl4Zm10KSB7Ci0JCS8qIFNfRk1UIC0gdXNlIGJpbm5pbmcgYW5kIHNraXBwaW5nIGZvciBzY2FsaW5nLCByZWNhbGN1bGF0ZSAqLwotCQkvKiBJcyB0aGlzIG1vcmUgb3B0aW1hbCB0aGFuIGp1c3QgYSBkaXZpc2lvbj8gKi8KLQkJZm9yICh4c2tpcCA9IDg7IHhza2lwID4gMTsgeHNraXAtLSkKLQkJCWlmIChyZWN0LT53aWR0aCAqIHhza2lwIDw9IGljZC0+d2lkdGhfbWF4KQotCQkJCWJyZWFrOworCS8qIE1ha2Ugc3VyZSB3ZSBkb24ndCBleGNlZWQgc2Vuc29yIGxpbWl0cyAqLworCWlmIChyZWN0LT5sZWZ0ICsgcmVjdC0+d2lkdGggPiBpY2QtPndpZHRoX21heCkKKwkJcmVjdC0+bGVmdCA9IChpY2QtPndpZHRoX21heCAtIHJlY3QtPndpZHRoKSAvIDIgKyBpY2QtPnhfbWluOwogCi0JCWZvciAoeXNraXAgPSA4OyB5c2tpcCA+IDE7IHlza2lwLS0pCi0JCQlpZiAocmVjdC0+aGVpZ2h0ICogeXNraXAgPD0gaWNkLT5oZWlnaHRfbWF4KQotCQkJCWJyZWFrOworCWlmIChyZWN0LT50b3AgKyByZWN0LT5oZWlnaHQgPiBpY2QtPmhlaWdodF9tYXgpCisJCXJlY3QtPnRvcCA9IChpY2QtPmhlaWdodF9tYXggLSByZWN0LT5oZWlnaHQpIC8gMiArIGljZC0+eV9taW47CiAKLQkJd2lkdGggPSByZWN0LT53aWR0aCAqIHhza2lwOwotCQloZWlnaHQgPSByZWN0LT5oZWlnaHQgKiB5c2tpcDsKLQotCQlkZXZfZGJnKCZpY2QtPmRldiwgInhza2lwICV1LCB3aWR0aCAldSwgeXNraXAgJXUsIGhlaWdodCAldVxuIiwKLQkJCXhza2lwLCB3aWR0aCwgeXNraXAsIGhlaWdodCk7Ci0JfQorCXdpZHRoID0gcmVjdC0+d2lkdGggKiB4c2tpcDsKKwloZWlnaHQgPSByZWN0LT5oZWlnaHQgKiB5c2tpcDsKKwlsZWZ0ID0gcmVjdC0+bGVmdCAqIHhza2lwOworCXRvcCA9IHJlY3QtPnRvcCAqIHlza2lwOwogCiAJeGJpbiA9IG1pbih4c2tpcCwgKHUxNikzKTsKIAl5YmluID0gbWluKHlza2lwLCAodTE2KTMpOwogCi0JLyogTWFrZSBzdXJlIHdlIGRvbid0IGV4Y2VlZCBmcmFtZSBsaW1pdHMgKi8KLQlpZiAocmVjdC0+bGVmdCArIHdpZHRoID4gaWNkLT53aWR0aF9tYXgpCi0JCXJlY3QtPmxlZnQgPSAoaWNkLT53aWR0aF9tYXggLSB3aWR0aCkgLyAyOworCWRldl9kYmcoJmljZC0+ZGV2LCAieHNraXAgJXUsIHdpZHRoICV1LyV1LCB5c2tpcCAldSwgaGVpZ2h0ICV1LyV1XG4iLAorCQl4c2tpcCwgd2lkdGgsIHJlY3QtPndpZHRoLCB5c2tpcCwgaGVpZ2h0LCByZWN0LT5oZWlnaHQpOwogCi0JaWYgKHJlY3QtPnRvcCArIGhlaWdodCA+IGljZC0+aGVpZ2h0X21heCkKLQkJcmVjdC0+dG9wID0gKGljZC0+aGVpZ2h0X21heCAtIGhlaWdodCkgLyAyOwotCi0JLyogQ291bGQganVzdCBkbyByb3VuZHVwKHJlY3QtPmxlZnQsIFt4eV1iaW4pOyBidXQgdGhpcyBpcyBjaGVhcGVyICovCisJLyogQ291bGQganVzdCBkbyByb3VuZHVwKHJlY3QtPmxlZnQsIFt4eV1iaW4gKiAyKTsgYnV0IHRoaXMgaXMgY2hlYXBlciAqLwogCXN3aXRjaCAoeGJpbikgewogCWNhc2UgMjoKLQkJcmVjdC0+bGVmdCA9IChyZWN0LT5sZWZ0ICsgMSkgJiB+MTsKKwkJbGVmdCA9IChsZWZ0ICsgMykgJiB+MzsKIAkJYnJlYWs7CiAJY2FzZSAzOgotCQlyZWN0LT5sZWZ0ID0gcm91bmR1cChyZWN0LT5sZWZ0LCAzKTsKKwkJbGVmdCA9IHJvdW5kdXAobGVmdCwgNik7CiAJfQogCiAJc3dpdGNoICh5YmluKSB7CiAJY2FzZSAyOgotCQlyZWN0LT50b3AgPSAocmVjdC0+dG9wICsgMSkgJiB+MTsKKwkJdG9wID0gKHRvcCArIDMpICYgfjM7CiAJCWJyZWFrOwogCWNhc2UgMzoKLQkJcmVjdC0+dG9wID0gcm91bmR1cChyZWN0LT50b3AsIDMpOworCQl0b3AgPSByb3VuZHVwKHRvcCwgNik7CiAJfQogCisJLyogRGlzYWJsZSByZWdpc3RlciB1cGRhdGUsIHJlY29uZmlndXJlIGF0b21pY2FsbHkgKi8KKwlyZXQgPSByZWdfc2V0KGljZCwgTVQ5VDAzMV9PVVRQVVRfQ09OVFJPTCwgMSk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKIAkvKiBCbGFua2luZyBhbmQgc3RhcnQgdmFsdWVzIC0gZGVmYXVsdC4uLiAqLwogCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVQwMzFfSE9SSVpPTlRBTF9CTEFOS0lORywgaGJsYW5rKTsKIAlpZiAocmV0ID49IDApCiAJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVQwMzFfVkVSVElDQUxfQkxBTktJTkcsIHZibGFuayk7CiAKLQlpZiAocGl4Zm10KSB7CisJaWYgKHlza2lwICE9IG10OXQwMzEtPnlza2lwIHx8IHhza2lwICE9IG10OXQwMzEtPnhza2lwKSB7CiAJCS8qIEJpbm5pbmcsIHNraXBwaW5nICovCiAJCWlmIChyZXQgPj0gMCkKIAkJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVQwMzFfQ09MVU1OX0FERFJFU1NfTU9ERSwKQEAgLTI3MCwxNCArMjc0LDE0IEBACiAJCQlyZXQgPSByZWdfd3JpdGUoaWNkLCBNVDlUMDMxX1JPV19BRERSRVNTX01PREUsCiAJCQkJCSgoeWJpbiAtIDEpIDw8IDQpIHwgKHlza2lwIC0gMSkpOwogCX0KLQlkZXZfZGJnKCZpY2QtPmRldiwgIm5ldyBsZWZ0ICV1LCB0b3AgJXVcbiIsIHJlY3QtPmxlZnQsIHJlY3QtPnRvcCk7CisJZGV2X2RiZygmaWNkLT5kZXYsICJuZXcgcGh5c2ljYWwgbGVmdCAldSwgdG9wICV1XG4iLCBsZWZ0LCB0b3ApOwogCiAJLyogVGhlIGNhbGxlciBwcm92aWRlcyBhIHN1cHBvcnRlZCBmb3JtYXQsIGFzIGd1YXJhbnRlZWQgYnkKIAkgKiBpY2QtPnRyeV9mbXRfY2FwKCksIHNvY19jYW1lcmFfc19jcm9wKCkgYW5kIHNvY19jYW1lcmFfY3JvcGNhcCgpICovCiAJaWYgKHJldCA+PSAwKQotCQlyZXQgPSByZWdfd3JpdGUoaWNkLCBNVDlUMDMxX0NPTFVNTl9TVEFSVCwgcmVjdC0+bGVmdCk7CisJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVQwMzFfQ09MVU1OX1NUQVJULCBsZWZ0KTsKIAlpZiAocmV0ID49IDApCi0JCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVQwMzFfUk9XX1NUQVJULCByZWN0LT50b3ApOworCQlyZXQgPSByZWdfd3JpdGUoaWNkLCBNVDlUMDMxX1JPV19TVEFSVCwgdG9wKTsKIAlpZiAocmV0ID49IDApCiAJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVQwMzFfV0lORE9XX1dJRFRILCB3aWR0aCAtIDEpOwogCWlmIChyZXQgPj0gMCkKQEAgLTI5NywxMiArMzAxLDU4IEBACiAJCX0KIAl9CiAKLQlpZiAoIXJldCAmJiBwaXhmbXQpIHsKKwkvKiBSZS1lbmFibGUgcmVnaXN0ZXIgdXBkYXRlLCBjb21taXQgYWxsIGNoYW5nZXMgKi8KKwlpZiAocmV0ID49IDApCisJCXJldCA9IHJlZ19jbGVhcihpY2QsIE1UOVQwMzFfT1VUUFVUX0NPTlRST0wsIDEpOworCisJcmV0dXJuIHJldCA8IDAgPyByZXQgOiAwOworfQorCitzdGF0aWMgaW50IG10OXQwMzFfc2V0X2Nyb3Aoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKK3sKKwlzdHJ1Y3QgbXQ5dDAzMSAqbXQ5dDAzMSA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBtdDl0MDMxLCBpY2QpOworCisJLyogQ1JPUCAtIG5vIGNoYW5nZSBpbiBzY2FsaW5nLCBvciBpbiBsaW1pdHMgKi8KKwlyZXR1cm4gbXQ5dDAzMV9zZXRfcGFyYW1zKGljZCwgcmVjdCwgbXQ5dDAzMS0+eHNraXAsIG10OXQwMzEtPnlza2lwKTsKK30KKworc3RhdGljIGludCBtdDl0MDMxX3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IG10OXQwMzEgKm10OXQwMzEgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5dDAzMSwgaWNkKTsKKwlpbnQgcmV0OworCXUxNiB4c2tpcCwgeXNraXA7CisJc3RydWN0IHY0bDJfcmVjdCByZWN0ID0geworCQkubGVmdAk9IGljZC0+eF9jdXJyZW50LAorCQkudG9wCT0gaWNkLT55X2N1cnJlbnQsCisJCS53aWR0aAk9IGYtPmZtdC5waXgud2lkdGgsCisJCS5oZWlnaHQJPSBmLT5mbXQucGl4LmhlaWdodCwKKwl9OworCisJLyoKKwkgKiB0cnlfZm10IGhhcyBwdXQgcmVjdGFuZ2xlIHdpdGhpbiBsaW1pdHMuCisJICogU19GTVQgLSB1c2UgYmlubmluZyBhbmQgc2tpcHBpbmcgZm9yIHNjYWxpbmcsIHJlY2FsY3VsYXRlCisJICogbGltaXRzLCB1c2VkIGZvciBjcm9wcGluZworCSAqLworCS8qIElzIHRoaXMgbW9yZSBvcHRpbWFsIHRoYW4ganVzdCBhIGRpdmlzaW9uPyAqLworCWZvciAoeHNraXAgPSA4OyB4c2tpcCA+IDE7IHhza2lwLS0pCisJCWlmIChyZWN0LndpZHRoICogeHNraXAgPD0gTVQ5VDAzMV9NQVhfV0lEVEgpCisJCQlicmVhazsKKworCWZvciAoeXNraXAgPSA4OyB5c2tpcCA+IDE7IHlza2lwLS0pCisJCWlmIChyZWN0LmhlaWdodCAqIHlza2lwIDw9IE1UOVQwMzFfTUFYX0hFSUdIVCkKKwkJCWJyZWFrOworCisJcmVjYWxjdWxhdGVfbGltaXRzKGljZCwgeHNraXAsIHlza2lwKTsKKworCXJldCA9IG10OXQwMzFfc2V0X3BhcmFtcyhpY2QsICZyZWN0LCB4c2tpcCwgeXNraXApOworCWlmICghcmV0KSB7CiAJCW10OXQwMzEtPnhza2lwID0geHNraXA7CiAJCW10OXQwMzEtPnlza2lwID0geXNraXA7CiAJfQogCi0JcmV0dXJuIHJldCA8IDAgPyByZXQgOiAwOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBpbnQgbXQ5dDAzMV90cnlfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLApAQCAtMzEwLDE0ICszNjAsMTQgQEAKIHsKIAlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKIAotCWlmIChwaXgtPmhlaWdodCA8IGljZC0+aGVpZ2h0X21pbikKLQkJcGl4LT5oZWlnaHQgPSBpY2QtPmhlaWdodF9taW47Ci0JaWYgKHBpeC0+aGVpZ2h0ID4gaWNkLT5oZWlnaHRfbWF4KQotCQlwaXgtPmhlaWdodCA9IGljZC0+aGVpZ2h0X21heDsKLQlpZiAocGl4LT53aWR0aCA8IGljZC0+d2lkdGhfbWluKQotCQlwaXgtPndpZHRoID0gaWNkLT53aWR0aF9taW47Ci0JaWYgKHBpeC0+d2lkdGggPiBpY2QtPndpZHRoX21heCkKLQkJcGl4LT53aWR0aCA9IGljZC0+d2lkdGhfbWF4OworCWlmIChwaXgtPmhlaWdodCA8IE1UOVQwMzFfTUlOX0hFSUdIVCkKKwkJcGl4LT5oZWlnaHQgPSBNVDlUMDMxX01JTl9IRUlHSFQ7CisJaWYgKHBpeC0+aGVpZ2h0ID4gTVQ5VDAzMV9NQVhfSEVJR0hUKQorCQlwaXgtPmhlaWdodCA9IE1UOVQwMzFfTUFYX0hFSUdIVDsKKwlpZiAocGl4LT53aWR0aCA8IE1UOVQwMzFfTUlOX1dJRFRIKQorCQlwaXgtPndpZHRoID0gTVQ5VDAzMV9NSU5fV0lEVEg7CisJaWYgKHBpeC0+d2lkdGggPiBNVDlUMDMxX01BWF9XSURUSCkKKwkJcGl4LT53aWR0aCA9IE1UOVQwMzFfTUFYX1dJRFRIOwogCiAJcGl4LT53aWR0aCAmPSB+MHgwMTsgLyogaGFzIHRvIGJlIGV2ZW4gKi8KIAlwaXgtPmhlaWdodCAmPSB+MHgwMTsgLyogaGFzIHRvIGJlIGV2ZW4gKi8KQEAgLTM5MCw2ICs0NDAsMTQgQEAKIAkJLnN0ZXAJCT0gMSwKIAkJLmRlZmF1bHRfdmFsdWUJPSAwLAogCX0sIHsKKwkJLmlkCQk9IFY0TDJfQ0lEX0hGTElQLAorCQkudHlwZQkJPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAorCQkubmFtZQkJPSAiRmxpcCBIb3Jpem9udGFsbHkiLAorCQkubWluaW11bQk9IDAsCisJCS5tYXhpbXVtCT0gMSwKKwkJLnN0ZXAJCT0gMSwKKwkJLmRlZmF1bHRfdmFsdWUJPSAwLAorCX0sIHsKIAkJLmlkCQk9IFY0TDJfQ0lEX0dBSU4sCiAJCS50eXBlCQk9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lCQk9ICJHYWluIiwKQEAgLTQzMSw2ICs0ODksNyBAQAogCS5yZWxlYXNlCQk9IG10OXQwMzFfcmVsZWFzZSwKIAkuc3RhcnRfY2FwdHVyZQkJPSBtdDl0MDMxX3N0YXJ0X2NhcHR1cmUsCiAJLnN0b3BfY2FwdHVyZQkJPSBtdDl0MDMxX3N0b3BfY2FwdHVyZSwKKwkuc2V0X2Nyb3AJCT0gbXQ5dDAzMV9zZXRfY3JvcCwKIAkuc2V0X2ZtdAkJPSBtdDl0MDMxX3NldF9mbXQsCiAJLnRyeV9mbXQJCT0gbXQ5dDAzMV90cnlfZm10LAogCS5zZXRfYnVzX3BhcmFtCQk9IG10OXQwMzFfc2V0X2J1c19wYXJhbSwKQEAgLTUxMywyMSArNTcyLDIzIEBACiAJCQlpZiAoZGF0YSA8IDApCiAJCQkJcmV0dXJuIC1FSU87CiAJCX0gZWxzZSB7Ci0JCQkvKiBQYWNrIGl0IGludG8gMS4xMjUuLjE1IHZhcmlhYmxlIHN0ZXAsIHJlZ2lzdGVyIHZhbHVlcyA5Li42NyAqLworCQkJLyogUGFjayBpdCBpbnRvIDEuMTI1Li4xMjggdmFyaWFibGUgc3RlcCwgcmVnaXN0ZXIgdmFsdWVzIDkuLjB4Nzg2MCAqLwogCQkJLyogV2UgYXNzdW1lIHFjdHJsLT5tYXhpbXVtIC0gcWN0cmwtPmRlZmF1bHRfdmFsdWUgLSAxID4gMCAqLwogCQkJdW5zaWduZWQgbG9uZyByYW5nZSA9IHFjdHJsLT5tYXhpbXVtIC0gcWN0cmwtPmRlZmF1bHRfdmFsdWUgLSAxOworCQkJLyogY2FsY3VsYXRlZCBnYWluOiBtYXAgNjUuLjEyNyB0byA5Li4xMDI0IHN0ZXAgMC4xMjUgKi8KIAkJCXVuc2lnbmVkIGxvbmcgZ2FpbiA9ICgoY3RybC0+dmFsdWUgLSBxY3RybC0+ZGVmYXVsdF92YWx1ZSAtIDEpICoKLQkJCQkJICAgICAgIDExMSArIHJhbmdlIC8gMikgLyByYW5nZSArIDk7CisJCQkJCSAgICAgICAxMDE1ICsgcmFuZ2UgLyAyKSAvIHJhbmdlICsgOTsKIAotCQkJaWYgKGdhaW4gPD0gMzIpCisJCQlpZiAoZ2FpbiA8PSAzMikJCS8qIGNhbGN1bGF0ZWQgZ2FpbiA5Li4zMiAtPiA5Li4zMiAqLwogCQkJCWRhdGEgPSBnYWluOwotCQkJZWxzZSBpZiAoZ2FpbiA8PSA2NCkKKwkJCWVsc2UgaWYgKGdhaW4gPD0gNjQpCS8qIGNhbGN1bGF0ZWQgZ2FpbiAzMy4uNjQgLT4gMHg1MS4uMHg2MCAqLwogCQkJCWRhdGEgPSAoKGdhaW4gLSAzMikgKiAxNiArIDE2KSAvIDMyICsgODA7CiAJCQllbHNlCi0JCQkJZGF0YSA9ICgoZ2FpbiAtIDY0KSAqIDcgKyAyOCkgLyA1NiArIDk2OworCQkJCS8qIGNhbGN1bGF0ZWQgZ2FpbiA2NS4uMTAyNCAtPiAoMS4uMTIwKSA8PCA4ICsgMHg2MCAqLworCQkJCWRhdGEgPSAoKChnYWluIC0gNjQgKyA3KSAqIDMyKSAmIDB4ZmYwMCkgfCAweDYwOwogCi0JCQlkZXZfZGJnKCZpY2QtPmRldiwgIlNldHRpbmcgZ2FpbiBmcm9tICVkIHRvICVkXG4iLAotCQkJCSByZWdfcmVhZChpY2QsIE1UOVQwMzFfR0xPQkFMX0dBSU4pLCBkYXRhKTsKKwkJCWRldl9kYmcoJmljZC0+ZGV2LCAiU2V0dGluZyBnYWluIGZyb20gMHgleCB0byAweCV4XG4iLAorCQkJCXJlZ19yZWFkKGljZCwgTVQ5VDAzMV9HTE9CQUxfR0FJTiksIGRhdGEpOwogCQkJZGF0YSA9IHJlZ193cml0ZShpY2QsIE1UOVQwMzFfR0xPQkFMX0dBSU4sIGRhdGEpOwogCQkJaWYgKGRhdGEgPCAwKQogCQkJCXJldHVybiAtRUlPOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9tdDl2MDIyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXYwMjIuYwppbmRleCBiMDRjOGNiLi40ZDNiNDgxIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXYwMjIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL210OXYwMjIuYwpAQCAtMTMsNyArMTMsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvbG9nMi5oPgotI2luY2x1ZGUgPGxpbnV4L2dwaW8uaD4KIAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CkBAIC04OSw5ICs4OCw3IEBACiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgaWNkOwogCWludCBtb2RlbDsJLyogVjRMMl9JREVOVF9NVDlWMDIyKiBjb2RlcyBmcm9tIHY0bDItY2hpcC1pZGVudC5oICovCi0JaW50IHN3aXRjaF9ncGlvOwogCXUxNiBjaGlwX2NvbnRyb2w7Ci0JdW5zaWduZWQgY2hhciBkYXRhd2lkdGg7CiB9OwogCiBzdGF0aWMgaW50IHJlZ19yZWFkKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBjb25zdCB1OCByZWcpCkBAIC0yMDksNjYgKzIwNiw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYnVzX3N3aXRjaF9yZXF1ZXN0KHN0cnVjdCBtdDl2MDIyICptdDl2MDIyLCBzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wpCi17Ci0jaWZkZWYgQ09ORklHX01UOVYwMjJfUENBOTUzNl9TV0lUQ0gKLQlpbnQgcmV0OwotCXVuc2lnbmVkIGludCBncGlvID0gaWNsLT5ncGlvOwotCi0JaWYgKGdwaW9faXNfdmFsaWQoZ3BpbykpIHsKLQkJLyogV2UgaGF2ZSBhIGRhdGEgYnVzIHN3aXRjaC4gKi8KLQkJcmV0ID0gZ3Bpb19yZXF1ZXN0KGdwaW8sICJtdDl2MDIyIik7Ci0JCWlmIChyZXQgPCAwKSB7Ci0JCQlkZXZfZXJyKCZtdDl2MDIyLT5jbGllbnQtPmRldiwgIkNhbm5vdCBnZXQgR1BJTyAldVxuIiwgZ3Bpbyk7Ci0JCQlyZXR1cm4gcmV0OwotCQl9Ci0KLQkJcmV0ID0gZ3Bpb19kaXJlY3Rpb25fb3V0cHV0KGdwaW8sIDApOwotCQlpZiAocmV0IDwgMCkgewotCQkJZGV2X2VycigmbXQ5djAyMi0+Y2xpZW50LT5kZXYsCi0JCQkJIkNhbm5vdCBzZXQgR1BJTyAldSB0byBvdXRwdXRcbiIsIGdwaW8pOwotCQkJZ3Bpb19mcmVlKGdwaW8pOwotCQkJcmV0dXJuIHJldDsKLQkJfQotCX0KLQotCW10OXYwMjItPnN3aXRjaF9ncGlvID0gZ3BpbzsKLSNlbHNlCi0JbXQ5djAyMi0+c3dpdGNoX2dwaW8gPSAtRUlOVkFMOwotI2VuZGlmCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyB2b2lkIGJ1c19zd2l0Y2hfcmVsZWFzZShzdHJ1Y3QgbXQ5djAyMiAqbXQ5djAyMikKLXsKLSNpZmRlZiBDT05GSUdfTVQ5VjAyMl9QQ0E5NTM2X1NXSVRDSAotCWlmIChncGlvX2lzX3ZhbGlkKG10OXYwMjItPnN3aXRjaF9ncGlvKSkKLQkJZ3Bpb19mcmVlKG10OXYwMjItPnN3aXRjaF9ncGlvKTsKLSNlbmRpZgotfQotCi1zdGF0aWMgaW50IGJ1c19zd2l0Y2hfYWN0KHN0cnVjdCBtdDl2MDIyICptdDl2MDIyLCBpbnQgZ284Yml0KQotewotI2lmZGVmIENPTkZJR19NVDlWMDIyX1BDQTk1MzZfU1dJVENICi0JaWYgKCFncGlvX2lzX3ZhbGlkKG10OXYwMjItPnN3aXRjaF9ncGlvKSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQlncGlvX3NldF92YWx1ZV9jYW5zbGVlcChtdDl2MDIyLT5zd2l0Y2hfZ3BpbywgZ284Yml0KTsKLQlyZXR1cm4gMDsKLSNlbHNlCi0JcmV0dXJuIC1FTk9ERVY7Ci0jZW5kaWYKLX0KLQotc3RhdGljIGludCBidXNfc3dpdGNoX3Bvc3NpYmxlKHN0cnVjdCBtdDl2MDIyICptdDl2MDIyKQotewotI2lmZGVmIENPTkZJR19NVDlWMDIyX1BDQTk1MzZfU1dJVENICi0JcmV0dXJuIGdwaW9faXNfdmFsaWQobXQ5djAyMi0+c3dpdGNoX2dwaW8pOwotI2Vsc2UKLQlyZXR1cm4gMDsKLSNlbmRpZgotfQotCiBzdGF0aWMgaW50IG10OXYwMjJfc2V0X2J1c19wYXJhbShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKIAkJCQkgdW5zaWduZWQgbG9uZyBmbGFncykKIHsKQEAgLTI4MiwxOSArMjE5LDE3IEBACiAJaWYgKCFpc19wb3dlcl9vZl8yKHdpZHRoX2ZsYWcpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICgobXQ5djAyMi0+ZGF0YXdpZHRoICE9IDEwICYmICh3aWR0aF9mbGFnID09IFNPQ0FNX0RBVEFXSURUSF8xMCkpIHx8Ci0JICAgIChtdDl2MDIyLT5kYXRhd2lkdGggIT0gOSAgJiYgKHdpZHRoX2ZsYWcgPT0gU09DQU1fREFUQVdJRFRIXzkpKSB8fAotCSAgICAobXQ5djAyMi0+ZGF0YXdpZHRoICE9IDggICYmICh3aWR0aF9mbGFnID09IFNPQ0FNX0RBVEFXSURUSF84KSkpIHsKLQkJLyogV2VsbCwgd2UgYWN0dWFsbHkgb25seSBjYW4gZG8gMTAgb3IgOCBiaXRzLi4uICovCi0JCWlmICh3aWR0aF9mbGFnID09IFNPQ0FNX0RBVEFXSURUSF85KQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJcmV0ID0gYnVzX3N3aXRjaF9hY3QobXQ5djAyMiwKLQkJCQkgICAgIHdpZHRoX2ZsYWcgPT0gU09DQU1fREFUQVdJRFRIXzgpOwotCQlpZiAocmV0IDwgMCkKKwlpZiAoaWNsLT5zZXRfYnVzX3BhcmFtKSB7CisJCXJldCA9IGljbC0+c2V0X2J1c19wYXJhbShpY2wsIHdpZHRoX2ZsYWcpOworCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKLQotCQltdDl2MDIyLT5kYXRhd2lkdGggPSB3aWR0aF9mbGFnID09IFNPQ0FNX0RBVEFXSURUSF84ID8gOCA6IDEwOworCX0gZWxzZSB7CisJCS8qCisJCSAqIFdpdGhvdXQgYm9hcmQgc3BlY2lmaWMgYnVzIHdpZHRoIHNldHRpbmdzIHdlIG9ubHkgc3VwcG9ydCB0aGUKKwkJICogc2Vuc29ycyBuYXRpdmUgYnVzIHdpZHRoCisJCSAqLworCQlpZiAod2lkdGhfZmxhZyAhPSBTT0NBTV9EQVRBV0lEVEhfMTApCisJCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlmbGFncyA9IHNvY19jYW1lcmFfYXBwbHlfc2Vuc29yX2ZsYWdzKGljbCwgZmxhZ3MpOwpAQCAtMzI4LDQ0ICsyNjMsMjcgQEAKIHN0YXRpYyB1bnNpZ25lZCBsb25nIG10OXYwMjJfcXVlcnlfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQogewogCXN0cnVjdCBtdDl2MDIyICptdDl2MDIyID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OXYwMjIsIGljZCk7Ci0JdW5zaWduZWQgaW50IHdpZHRoX2ZsYWcgPSBTT0NBTV9EQVRBV0lEVEhfMTA7CisJc3RydWN0IHNvY19jYW1lcmFfbGluayAqaWNsID0gbXQ5djAyMi0+Y2xpZW50LT5kZXYucGxhdGZvcm1fZGF0YTsKKwl1bnNpZ25lZCBpbnQgd2lkdGhfZmxhZzsKIAotCWlmIChidXNfc3dpdGNoX3Bvc3NpYmxlKG10OXYwMjIpKQotCQl3aWR0aF9mbGFnIHw9IFNPQ0FNX0RBVEFXSURUSF84OworCWlmIChpY2wtPnF1ZXJ5X2J1c19wYXJhbSkKKwkJd2lkdGhfZmxhZyA9IGljbC0+cXVlcnlfYnVzX3BhcmFtKGljbCkgJgorCQkJU09DQU1fREFUQVdJRFRIX01BU0s7CisJZWxzZQorCQl3aWR0aF9mbGFnID0gU09DQU1fREFUQVdJRFRIXzEwOwogCiAJcmV0dXJuIFNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyB8IFNPQ0FNX1BDTEtfU0FNUExFX0ZBTExJTkcgfAogCQlTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX0hTWU5DX0FDVElWRV9MT1cgfAogCQlTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX1ZTWU5DX0FDVElWRV9MT1cgfAotCQlTT0NBTV9NQVNURVIgfCBTT0NBTV9TTEFWRSB8CisJCVNPQ0FNX0RBVEFfQUNUSVZFX0hJR0ggfCBTT0NBTV9NQVNURVIgfCBTT0NBTV9TTEFWRSB8CiAJCXdpZHRoX2ZsYWc7CiB9CiAKLXN0YXRpYyBpbnQgbXQ5djAyMl9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgX191MzIgcGl4Zm10LCBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQorc3RhdGljIGludCBtdDl2MDIyX3NldF9jcm9wKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCiB7Ci0Jc3RydWN0IG10OXYwMjIgKm10OXYwMjIgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgbXQ5djAyMiwgaWNkKTsKIAlpbnQgcmV0OwogCi0JLyogVGhlIGNhbGxlciBwcm92aWRlcyBhIHN1cHBvcnRlZCBmb3JtYXQsIGFzIHZlcmlmaWVkIHBlciBjYWxsIHRvCi0JICogaWNkLT50cnlfZm10KCksIGRhdGF3aWR0aCBpcyBmcm9tIG91ciBzdXBwb3J0ZWQgZm9ybWF0IGxpc3QgKi8KLQlzd2l0Y2ggKHBpeGZtdCkgewotCWNhc2UgVjRMMl9QSVhfRk1UX0dSRVk6Ci0JY2FzZSBWNEwyX1BJWF9GTVRfWTE2OgotCQlpZiAobXQ5djAyMi0+bW9kZWwgIT0gVjRMMl9JREVOVF9NVDlWMDIySVg3QVRNKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9QSVhfRk1UX1NCR0dSODoKLQljYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjE2OgotCQlpZiAobXQ5djAyMi0+bW9kZWwgIT0gVjRMMl9JREVOVF9NVDlWMDIySVg3QVRDKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWJyZWFrOwotCWNhc2UgMDoKLQkJLyogTm8gZm9ybWF0IGNoYW5nZSwgb25seSBnZW9tZXRyeSAqLwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KIAkvKiBMaWtlIGluIGV4YW1wbGUgYXBwLiBDb250cmFkaWN0cyB0aGUgZGF0YXNoZWV0IHRob3VnaCAqLwogCXJldCA9IHJlZ19yZWFkKGljZCwgTVQ5VjAyMl9BRUNfQUdDX0VOQUJMRSk7CiAJaWYgKHJldCA+PSAwKSB7CkBAIC00MDMsNiArMzIxLDQyIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgbXQ5djAyMl9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBtdDl2MDIyICptdDl2MDIyID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG10OXYwMjIsIGljZCk7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisJc3RydWN0IHY0bDJfcmVjdCByZWN0ID0geworCQkubGVmdAk9IGljZC0+eF9jdXJyZW50LAorCQkudG9wCT0gaWNkLT55X2N1cnJlbnQsCisJCS53aWR0aAk9IHBpeC0+d2lkdGgsCisJCS5oZWlnaHQJPSBwaXgtPmhlaWdodCwKKwl9OworCisJLyogVGhlIGNhbGxlciBwcm92aWRlcyBhIHN1cHBvcnRlZCBmb3JtYXQsIGFzIHZlcmlmaWVkIHBlciBjYWxsIHRvCisJICogaWNkLT50cnlfZm10KCksIGRhdGF3aWR0aCBpcyBmcm9tIG91ciBzdXBwb3J0ZWQgZm9ybWF0IGxpc3QgKi8KKwlzd2l0Y2ggKHBpeC0+cGl4ZWxmb3JtYXQpIHsKKwljYXNlIFY0TDJfUElYX0ZNVF9HUkVZOgorCWNhc2UgVjRMMl9QSVhfRk1UX1kxNjoKKwkJaWYgKG10OXYwMjItPm1vZGVsICE9IFY0TDJfSURFTlRfTVQ5VjAyMklYN0FUTSkKKwkJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIFY0TDJfUElYX0ZNVF9TQkdHUjg6CisJY2FzZSBWNEwyX1BJWF9GTVRfU0JHR1IxNjoKKwkJaWYgKG10OXYwMjItPm1vZGVsICE9IFY0TDJfSURFTlRfTVQ5VjAyMklYN0FUQykKKwkJCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKKwljYXNlIDA6CisJCS8qIE5vIGZvcm1hdCBjaGFuZ2UsIG9ubHkgZ2VvbWV0cnkgKi8KKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJLyogTm8gc3VwcG9ydCBmb3Igc2NhbGluZyBvbiB0aGlzIGNhbWVyYSwganVzdCBjcm9wLiAqLworCXJldHVybiBtdDl2MDIyX3NldF9jcm9wKGljZCwgJnJlY3QpOworfQorCiBzdGF0aWMgaW50IG10OXYwMjJfdHJ5X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKIAkJCSAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKIHsKQEAgLTU0NCw2ICs0OTgsNyBAQAogCS5yZWxlYXNlCQk9IG10OXYwMjJfcmVsZWFzZSwKIAkuc3RhcnRfY2FwdHVyZQkJPSBtdDl2MDIyX3N0YXJ0X2NhcHR1cmUsCiAJLnN0b3BfY2FwdHVyZQkJPSBtdDl2MDIyX3N0b3BfY2FwdHVyZSwKKwkuc2V0X2Nyb3AJCT0gbXQ5djAyMl9zZXRfY3JvcCwKIAkuc2V0X2ZtdAkJPSBtdDl2MDIyX3NldF9mbXQsCiAJLnRyeV9mbXQJCT0gbXQ5djAyMl90cnlfZm10LAogCS5zZXRfYnVzX3BhcmFtCQk9IG10OXYwMjJfc2V0X2J1c19wYXJhbSwKQEAgLTY5OSw2ICs2NTQsNyBAQAogCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCA9IG10OXYwMjItPmNsaWVudC0+ZGV2LnBsYXRmb3JtX2RhdGE7CiAJczMyIGRhdGE7CiAJaW50IHJldDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFpY2QtPmRldi5wYXJlbnQgfHwKIAkgICAgdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCktPm5yICE9IGljZC0+aWZhY2UpCkBAIC03MzIsMjIgKzY4OCwzNiBAQAogCQlyZXQgPSByZWdfd3JpdGUoaWNkLCBNVDlWMDIyX1BJWEVMX09QRVJBVElPTl9NT0RFLCA0IHwgMHgxMSk7CiAJCW10OXYwMjItPm1vZGVsID0gVjRMMl9JREVOVF9NVDlWMDIySVg3QVRDOwogCQlpY2QtPmZvcm1hdHMgPSBtdDl2MDIyX2NvbG91cl9mb3JtYXRzOwotCQlpZiAoZ3Bpb19pc192YWxpZChpY2wtPmdwaW8pKQotCQkJaWNkLT5udW1fZm9ybWF0cyA9IEFSUkFZX1NJWkUobXQ5djAyMl9jb2xvdXJfZm9ybWF0cyk7Ci0JCWVsc2UKLQkJCWljZC0+bnVtX2Zvcm1hdHMgPSAxOwogCX0gZWxzZSB7CiAJCXJldCA9IHJlZ193cml0ZShpY2QsIE1UOVYwMjJfUElYRUxfT1BFUkFUSU9OX01PREUsIDB4MTEpOwogCQltdDl2MDIyLT5tb2RlbCA9IFY0TDJfSURFTlRfTVQ5VjAyMklYN0FUTTsKIAkJaWNkLT5mb3JtYXRzID0gbXQ5djAyMl9tb25vY2hyb21lX2Zvcm1hdHM7Ci0JCWlmIChncGlvX2lzX3ZhbGlkKGljbC0+Z3BpbykpCi0JCQlpY2QtPm51bV9mb3JtYXRzID0gQVJSQVlfU0laRShtdDl2MDIyX21vbm9jaHJvbWVfZm9ybWF0cyk7Ci0JCWVsc2UKLQkJCWljZC0+bnVtX2Zvcm1hdHMgPSAxOwogCX0KIAotCWlmICghcmV0KQotCQlyZXQgPSBzb2NfY2FtZXJhX3ZpZGVvX3N0YXJ0KGljZCk7CisJaWYgKHJldCA8IDApCisJCWdvdG8gZWlzaXM7CisKKwlpY2QtPm51bV9mb3JtYXRzID0gMDsKKworCS8qCisJICogVGhpcyBpcyBhIDEwYml0IHNlbnNvciwgc28gYnkgZGVmYXVsdCB3ZSBvbmx5IGFsbG93IDEwYml0LgorCSAqIFRoZSBwbGF0Zm9ybSBtYXkgc3VwcG9ydCBkaWZmZXJlbnQgYnVzIHdpZHRocyBkdWUgdG8KKwkgKiBkaWZmZXJlbnQgcm91dGluZyBvZiB0aGUgZGF0YSBsaW5lcy4KKwkgKi8KKwlpZiAoaWNsLT5xdWVyeV9idXNfcGFyYW0pCisJCWZsYWdzID0gaWNsLT5xdWVyeV9idXNfcGFyYW0oaWNsKTsKKwllbHNlCisJCWZsYWdzID0gU09DQU1fREFUQVdJRFRIXzEwOworCisJaWYgKGZsYWdzICYgU09DQU1fREFUQVdJRFRIXzEwKQorCQlpY2QtPm51bV9mb3JtYXRzKys7CisJZWxzZQorCQlpY2QtPmZvcm1hdHMrKzsKKworCWlmIChmbGFncyAmIFNPQ0FNX0RBVEFXSURUSF84KQorCQlpY2QtPm51bV9mb3JtYXRzKys7CisKKwlyZXQgPSBzb2NfY2FtZXJhX3ZpZGVvX3N0YXJ0KGljZCk7CiAJaWYgKHJldCA8IDApCiAJCWdvdG8gZWlzaXM7CiAKQEAgLTgxMiwxNCArNzgyLDYgQEAKIAlpY2QtPmhlaWdodF9tYXgJPSA0ODA7CiAJaWNkLT55X3NraXBfdG9wCT0gMTsKIAlpY2QtPmlmYWNlCT0gaWNsLT5idXNfaWQ7Ci0JLyogRGVmYXVsdCBkYXRhd2lkdGggLSB0aGlzIGlzIHRoZSBvbmx5IHdpZHRoIHRoaXMgY2FtZXJhIChub3JtYWxseSkKLQkgKiBzdXBwb3J0cy4gSXQgaXMgb25seSB3aXRoIGV4dHJhIGxvZ2ljIHRoYXQgaXQgY2FuIHN1cHBvcnQKLQkgKiBvdGhlciB3aWR0aHMuIFRoZXJlZm9yZSBpdCBzZWVtcyB0byBiZSBhIHNlbnNpYmxlIGRlZmF1bHQuICovCi0JbXQ5djAyMi0+ZGF0YXdpZHRoID0gMTA7Ci0KLQlyZXQgPSBidXNfc3dpdGNoX3JlcXVlc3QobXQ5djAyMiwgaWNsKTsKLQlpZiAocmV0KQotCQlnb3RvIGVzd2luaXQ7CiAKIAlyZXQgPSBzb2NfY2FtZXJhX2RldmljZV9yZWdpc3RlcihpY2QpOwogCWlmIChyZXQpCkBAIC04MjgsOCArNzkwLDYgQEAKIAlyZXR1cm4gMDsKIAogZWlzZHI6Ci0JYnVzX3N3aXRjaF9yZWxlYXNlKG10OXYwMjIpOwotZXN3aW5pdDoKIAlrZnJlZShtdDl2MDIyKTsKIAlyZXR1cm4gcmV0OwogfQpAQCAtODM5LDcgKzc5OSw2IEBACiAJc3RydWN0IG10OXYwMjIgKm10OXYwMjIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCXNvY19jYW1lcmFfZGV2aWNlX3VucmVnaXN0ZXIoJm10OXYwMjItPmljZCk7Ci0JYnVzX3N3aXRjaF9yZWxlYXNlKG10OXYwMjIpOwogCWtmcmVlKG10OXYwMjIpOwogCiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL214M19jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXgzX2NhbWVyYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcwNjI5ZTEKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL214M19jYW1lcmEuYwpAQCAtMCwwICsxLDEyMjAgQEAKKy8qCisgKiBWNEwyIERyaXZlciBmb3IgaS5NWDN4IGNhbWVyYSBob3N0CisgKgorICogQ29weXJpZ2h0IChDKSAyMDA4CisgKiBHdWVubmFkaSBMaWFraG92ZXRza2ksIERFTlggU29mdHdhcmUgRW5naW5lZXJpbmcsIDxsZ0BkZW54LmRlPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CisgKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcworICogcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKi8KKworI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC92ZXJzaW9uLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+CisjaW5jbHVkZSA8bGludXgvY2xrLmg+CisjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgorCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgorI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWRtYS1jb250aWcuaD4KKyNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CisKKyNpbmNsdWRlIDxtYWNoL2lwdS5oPgorI2luY2x1ZGUgPG1hY2gvbXgzX2NhbWVyYS5oPgorCisjZGVmaW5lIE1YM19DQU1fRFJWX05BTUUgIm14My1jYW1lcmEiCisKKy8qIENNT1MgU2Vuc29yIEludGVyZmFjZSBSZWdpc3RlcnMgKi8KKyNkZWZpbmUgQ1NJX1JFR19TVEFSVAkJMHg2MAorCisjZGVmaW5lIENTSV9TRU5TX0NPTkYJCSgweDYwIC0gQ1NJX1JFR19TVEFSVCkKKyNkZWZpbmUgQ1NJX1NFTlNfRlJNX1NJWkUJKDB4NjQgLSBDU0lfUkVHX1NUQVJUKQorI2RlZmluZSBDU0lfQUNUX0ZSTV9TSVpFCSgweDY4IC0gQ1NJX1JFR19TVEFSVCkKKyNkZWZpbmUgQ1NJX09VVF9GUk1fQ1RSTAkoMHg2QyAtIENTSV9SRUdfU1RBUlQpCisjZGVmaW5lIENTSV9UU1RfQ1RSTAkJKDB4NzAgLSBDU0lfUkVHX1NUQVJUKQorI2RlZmluZSBDU0lfQ0NJUl9DT0RFXzEJCSgweDc0IC0gQ1NJX1JFR19TVEFSVCkKKyNkZWZpbmUgQ1NJX0NDSVJfQ09ERV8yCQkoMHg3OCAtIENTSV9SRUdfU1RBUlQpCisjZGVmaW5lIENTSV9DQ0lSX0NPREVfMwkJKDB4N0MgLSBDU0lfUkVHX1NUQVJUKQorI2RlZmluZSBDU0lfRkxBU0hfU1RST0JFXzEJKDB4ODAgLSBDU0lfUkVHX1NUQVJUKQorI2RlZmluZSBDU0lfRkxBU0hfU1RST0JFXzIJKDB4ODQgLSBDU0lfUkVHX1NUQVJUKQorCisjZGVmaW5lIENTSV9TRU5TX0NPTkZfVlNZTkNfUE9MX1NISUZUCQkwCisjZGVmaW5lIENTSV9TRU5TX0NPTkZfSFNZTkNfUE9MX1NISUZUCQkxCisjZGVmaW5lIENTSV9TRU5TX0NPTkZfREFUQV9QT0xfU0hJRlQJCTIKKyNkZWZpbmUgQ1NJX1NFTlNfQ09ORl9QSVhfQ0xLX1BPTF9TSElGVAkJMworI2RlZmluZSBDU0lfU0VOU19DT05GX1NFTlNfUFJUQ0xfU0hJRlQJCTQKKyNkZWZpbmUgQ1NJX1NFTlNfQ09ORl9TRU5TX0NMS1NSQ19TSElGVAkJNworI2RlZmluZSBDU0lfU0VOU19DT05GX0RBVEFfRk1UX1NISUZUCQk4CisjZGVmaW5lIENTSV9TRU5TX0NPTkZfREFUQV9XSURUSF9TSElGVAkJMTAKKyNkZWZpbmUgQ1NJX1NFTlNfQ09ORl9FWFRfVlNZTkNfU0hJRlQJCTE1CisjZGVmaW5lIENTSV9TRU5TX0NPTkZfRElWUkFUSU9fU0hJRlQJCTE2CisKKyNkZWZpbmUgQ1NJX1NFTlNfQ09ORl9EQVRBX0ZNVF9SR0JfWVVWNDQ0CSgwVUwgPDwgQ1NJX1NFTlNfQ09ORl9EQVRBX0ZNVF9TSElGVCkKKyNkZWZpbmUgQ1NJX1NFTlNfQ09ORl9EQVRBX0ZNVF9ZVVY0MjIJCSgyVUwgPDwgQ1NJX1NFTlNfQ09ORl9EQVRBX0ZNVF9TSElGVCkKKyNkZWZpbmUgQ1NJX1NFTlNfQ09ORl9EQVRBX0ZNVF9CQVlFUgkJKDNVTCA8PCBDU0lfU0VOU19DT05GX0RBVEFfRk1UX1NISUZUKQorCisjZGVmaW5lIE1BWF9WSURFT19NRU0gMTYKKworc3RydWN0IG14M19jYW1lcmFfYnVmZmVyIHsKKwkvKiBjb21tb24gdjRsIGJ1ZmZlciBzdHVmZiAtLSBtdXN0IGJlIGZpcnN0ICovCisJc3RydWN0IHZpZGVvYnVmX2J1ZmZlcgkJCXZiOworCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0CSpmbXQ7CisKKwkvKiBPbmUgZGVzY3JpcHRvdCBwZXIgc2NhdHRlcmxpc3QgKHBlciBmcmFtZSkgKi8KKwlzdHJ1Y3QgZG1hX2FzeW5jX3R4X2Rlc2NyaXB0b3IJCSp0eGQ7CisKKwkvKiBXZSBoYXZlIHRvICJidWlsZCIgYSBzY2F0dGVybGlzdCBvdXJzZWx2ZXMgLSBvbmUgZWxlbWVudCBwZXIgZnJhbWUgKi8KKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QJCQlzZzsKK307CisKKy8qKgorICogc3RydWN0IG14M19jYW1lcmFfZGV2IC0gaS5NWDN4IGNhbWVyYSAoQ1NJKSBvYmplY3QKKyAqIEBkZXY6CQljYW1lcmEgZGV2aWNlLCB0byB3aGljaCB0aGUgY29oZXJlbnQgYnVmZmVyIGlzIGF0dGFjaGVkCisgKiBAaWNkOgkJY3VycmVudGx5IGF0dGFjaGVkIGNhbWVyYSBzZW5zb3IKKyAqIEBjbGs6CQlwb2ludGVyIHRvIGNsb2NrCisgKiBAYmFzZToJCXJlbWFwcGVkIHJlZ2lzdGVyIGJhc2UgYWRkcmVzcworICogQHBkYXRhOgkJcGxhdGZvcm0gZGF0YQorICogQHBsYXRmb3JtX2ZsYWdzOglwbGF0Zm9ybSBmbGFncworICogQG1jbGs6CQltYXN0ZXIgY2xvY2sgZnJlcXVlbmN5IGluIEh6CisgKiBAY2FwdHVyZToJCWxpc3Qgb2YgY2FwdHVyZSB2aWRlb2J1ZmZlcnMKKyAqIEBsb2NrOgkJcHJvdGVjdHMgdmlkZW8gYnVmZmVyIGxpc3RzCisgKiBAYWN0aXZlOgkJYWN0aXZlIHZpZGVvIGJ1ZmZlcgorICogQGlkbWFjX2NoYW5uZWw6CWFycmF5IG9mIHBvaW50ZXJzIHRvIElQVSBETUFDIERNQSBjaGFubmVscworICogQHNvY19ob3N0OgkJZW1iZWRkZWQgc29jX2hvc3Qgb2JqZWN0CisgKi8KK3N0cnVjdCBteDNfY2FtZXJhX2RldiB7CisJc3RydWN0IGRldmljZQkJKmRldjsKKwkvKgorCSAqIGkuTVgzeCBpcyBvbmx5IHN1cHBvc2VkIHRvIGhhbmRsZSBvbmUgY2FtZXJhIG9uIGl0cyBDYW1lcmEgU2Vuc29yCisJICogSW50ZXJmYWNlLiBJZiBhbnlvbmUgZXZlciBidWlsZHMgaGFyZHdhcmUgdG8gZW5hYmxlIG1vcmUgdGhhbiBvbmUKKwkgKiBjYW1lcmEgX3NpbXVsdGFuZW91c2x5XywgdGhleSB3aWxsIGhhdmUgdG8gbW9kaWZ5IHRoaXMgZHJpdmVyIHRvbworCSAqLworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkOworCXN0cnVjdCBjbGsJCSpjbGs7CisKKwl2b2lkIF9faW9tZW0JCSpiYXNlOworCisJc3RydWN0IG14M19jYW1lcmFfcGRhdGEJKnBkYXRhOworCisJdW5zaWduZWQgbG9uZwkJcGxhdGZvcm1fZmxhZ3M7CisJdW5zaWduZWQgbG9uZwkJbWNsazsKKworCXN0cnVjdCBsaXN0X2hlYWQJY2FwdHVyZTsKKwlzcGlubG9ja190CQlsb2NrOwkJLyogUHJvdGVjdHMgdmlkZW8gYnVmZmVyIGxpc3RzICovCisJc3RydWN0IG14M19jYW1lcmFfYnVmZmVyICphY3RpdmU7CisKKwkvKiBJRE1BQyAvIGRtYWVuZ2luZSBpbnRlcmZhY2UgKi8KKwlzdHJ1Y3QgaWRtYWNfY2hhbm5lbAkqaWRtYWNfY2hhbm5lbFsxXTsJLyogV2UgbmVlZCBvbmUgY2hhbm5lbCAqLworCisJc3RydWN0IHNvY19jYW1lcmFfaG9zdAlzb2NfaG9zdDsKK307CisKK3N0cnVjdCBkbWFfY2hhbl9yZXF1ZXN0IHsKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYJKm14M19jYW07CisJZW51bSBpcHVfY2hhbm5lbAlpZDsKK307CisKK3N0YXRpYyBpbnQgbXgzX2NhbWVyYV9zZXRfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBfX3UzMiBwaXhmbXQpOworCitzdGF0aWMgdTMyIGNzaV9yZWdfcmVhZChzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14Mywgb2ZmX3QgcmVnKQoreworCXJldHVybiBfX3Jhd19yZWFkbChteDMtPmJhc2UgKyByZWcpOworfQorCitzdGF0aWMgdm9pZCBjc2lfcmVnX3dyaXRlKHN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzLCB1MzIgdmFsdWUsIG9mZl90IHJlZykKK3sKKwlfX3Jhd193cml0ZWwodmFsdWUsIG14My0+YmFzZSArIHJlZyk7Cit9CisKKy8qIENhbGxlZCBmcm9tIHRoZSBJUFUgSURNQUMgSVNSICovCitzdGF0aWMgdm9pZCBteDNfY2FtX2RtYV9kb25lKHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3QgaWRtYWNfdHhfZGVzYyAqZGVzYyA9IHRvX3R4X2Rlc2MoYXJnKTsKKwlzdHJ1Y3QgZG1hX2NoYW4gKmNoYW4gPSBkZXNjLT50eGQuY2hhbjsKKwlzdHJ1Y3QgaWRtYWNfY2hhbm5lbCAqaWNoYW5uZWwgPSB0b19pZG1hY19jaGFuKGNoYW4pOworCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaGFubmVsLT5jbGllbnQ7CisJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmI7CisKKwlkZXZfZGJnKGNoYW4tPmRldmljZS0+ZGV2LCAiY2FsbGJhY2sgY29va2llICVkLCBhY3RpdmUgRE1BIDB4JTA4eFxuIiwKKwkJZGVzYy0+dHhkLmNvb2tpZSwgbXgzX2NhbS0+YWN0aXZlID8gc2dfZG1hX2FkZHJlc3MoJm14M19jYW0tPmFjdGl2ZS0+c2cpIDogMCk7CisKKwlzcGluX2xvY2soJm14M19jYW0tPmxvY2spOworCWlmIChteDNfY2FtLT5hY3RpdmUpIHsKKwkJdmIgPSAmbXgzX2NhbS0+YWN0aXZlLT52YjsKKworCQlsaXN0X2RlbF9pbml0KCZ2Yi0+cXVldWUpOworCQl2Yi0+c3RhdGUgPSBWSURFT0JVRl9ET05FOworCQlkb19nZXR0aW1lb2ZkYXkoJnZiLT50cyk7CisJCXZiLT5maWVsZF9jb3VudCsrOworCQl3YWtlX3VwKCZ2Yi0+ZG9uZSk7CisJfQorCisJaWYgKGxpc3RfZW1wdHkoJm14M19jYW0tPmNhcHR1cmUpKSB7CisJCW14M19jYW0tPmFjdGl2ZSA9IE5VTEw7CisJCXNwaW5fdW5sb2NrKCZteDNfY2FtLT5sb2NrKTsKKworCQkvKgorCQkgKiBzdG9wIGNhcHR1cmUgLSB3aXRob3V0IGZ1cnRoZXIgYnVmZmVycyBJUFVfQ0hBX0JVRjBfUkRZIHdpbGwKKwkJICogbm90IGdldCB1cGRhdGVkCisJCSAqLworCQlyZXR1cm47CisJfQorCisJbXgzX2NhbS0+YWN0aXZlID0gbGlzdF9lbnRyeShteDNfY2FtLT5jYXB0dXJlLm5leHQsCisJCQkJICAgICBzdHJ1Y3QgbXgzX2NhbWVyYV9idWZmZXIsIHZiLnF1ZXVlKTsKKwlteDNfY2FtLT5hY3RpdmUtPnZiLnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCXNwaW5fdW5sb2NrKCZteDNfY2FtLT5sb2NrKTsKK30KKworc3RhdGljIHZvaWQgZnJlZV9idWZmZXIoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICp2cSwgc3RydWN0IG14M19jYW1lcmFfYnVmZmVyICpidWYpCit7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiID0gJmJ1Zi0+dmI7CisJc3RydWN0IGRtYV9hc3luY190eF9kZXNjcmlwdG9yICp0eGQgPSBidWYtPnR4ZDsKKwlzdHJ1Y3QgaWRtYWNfY2hhbm5lbCAqaWNoYW47CisKKwlCVUdfT04oaW5faW50ZXJydXB0KCkpOworCisJZGV2X2RiZygmaWNkLT5kZXYsICIlcyAodmI9MHglcCkgMHglMDhseCAlZFxuIiwgX19mdW5jX18sCisJCXZiLCB2Yi0+YmFkZHIsIHZiLT5ic2l6ZSk7CisKKwkvKgorCSAqIFRoaXMgd2FpdHMgdW50aWwgdGhpcyBidWZmZXIgaXMgb3V0IG9mIGRhbmdlciwgaS5lLiwgdW50aWwgaXQgaXMgbm8KKwkgKiBsb25nZXIgaW4gU1RBVEVfUVVFVUVEIG9yIFNUQVRFX0FDVElWRQorCSAqLworCXZpZGVvYnVmX3dhaXRvbih2YiwgMCwgMCk7CisJaWYgKHR4ZCkgeworCQlpY2hhbiA9IHRvX2lkbWFjX2NoYW4odHhkLT5jaGFuKTsKKwkJYXN5bmNfdHhfYWNrKHR4ZCk7CisJfQorCXZpZGVvYnVmX2RtYV9jb250aWdfZnJlZSh2cSwgdmIpOworCWJ1Zi0+dHhkID0gTlVMTDsKKworCXZiLT5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7Cit9CisKKy8qCisgKiBWaWRlb2J1ZiBvcGVyYXRpb25zCisgKi8KKworLyoKKyAqIENhbGN1bGF0ZSB0aGUgX19idWZmZXJfXyAobm90IGRhdGEpIHNpemUgYW5kIG51bWJlciBvZiBidWZmZXJzLgorICogQ2FsbGVkIHdpdGggLnZiX2xvY2sgaGVsZAorICovCitzdGF0aWMgaW50IG14M192aWRlb2J1Zl9zZXR1cChzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLCB1bnNpZ25lZCBpbnQgKmNvdW50LAorCQkJICAgICAgdW5zaWduZWQgaW50ICpzaXplKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0gPSBpY2ktPnByaXY7CisJLyoKKwkgKiBiaXRzLXBlci1waXhlbCAoZGVwdGgpIGFzIHNwZWNpZmllZCBpbiBjYW1lcmEncyBwaXhlbCBmb3JtYXQgZG9lcworCSAqIG5vdCBuZWNlc3NhcmlseSBtYXRjaCB3aGF0IHRoZSBjYW1lcmEgaW50ZXJmYWNlIHdyaXRlcyB0byBSQU0sIGJ1dAorCSAqIGl0IHNob3VsZCBiZSBnb29kIGVub3VnaCBmb3Igbm93LgorCSAqLworCXVuc2lnbmVkIGludCBicHAgPSBESVZfUk9VTkRfVVAoaWNkLT5jdXJyZW50X2ZtdC0+ZGVwdGgsIDgpOworCisJaWYgKCFteDNfY2FtLT5pZG1hY19jaGFubmVsWzBdKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCSpzaXplID0gaWNkLT53aWR0aCAqIGljZC0+aGVpZ2h0ICogYnBwOworCisJaWYgKCEqY291bnQpCisJCSpjb3VudCA9IDMyOworCisJaWYgKCpzaXplICogKmNvdW50ID4gTUFYX1ZJREVPX01FTSAqIDEwMjQgKiAxMDI0KQorCQkqY291bnQgPSBNQVhfVklERU9fTUVNICogMTAyNCAqIDEwMjQgLyAqc2l6ZTsKKworCXJldHVybiAwOworfQorCisvKiBDYWxsZWQgd2l0aCAudmJfbG9jayBoZWxkICovCitzdGF0aWMgaW50IG14M192aWRlb2J1Zl9wcmVwYXJlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsCisJCXN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiLCBlbnVtIHY0bDJfZmllbGQgZmllbGQpCit7CisJc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QgPSB2cS0+cHJpdl9kYXRhOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9idWZmZXIgKmJ1ZiA9CisJCWNvbnRhaW5lcl9vZih2Yiwgc3RydWN0IG14M19jYW1lcmFfYnVmZmVyLCB2Yik7CisJLyogY3VycmVudF9mbXQgX211c3RfIGFsd2F5cyBiZSBzZXQgKi8KKwlzaXplX3QgbmV3X3NpemUgPSBpY2QtPndpZHRoICogaWNkLT5oZWlnaHQgKgorCQkoKGljZC0+Y3VycmVudF9mbXQtPmRlcHRoICsgNykgPj4gMyk7CisJaW50IHJldDsKKworCS8qCisJICogSSB0aGluaywgaW4gYnVmX3ByZXBhcmUgeW91IG9ubHkgaGF2ZSB0byBwcm90ZWN0IGdsb2JhbCBkYXRhLAorCSAqIHRoZSBhY3R1YWwgYnVmZmVyIGlzIHlvdXJzCisJICovCisKKwlpZiAoYnVmLT5mbXQJIT0gaWNkLT5jdXJyZW50X2ZtdCB8fAorCSAgICB2Yi0+d2lkdGgJIT0gaWNkLT53aWR0aCB8fAorCSAgICB2Yi0+aGVpZ2h0CSE9IGljZC0+aGVpZ2h0IHx8CisJICAgIHZiLT5maWVsZAkhPSBmaWVsZCkgeworCQlidWYtPmZtdAk9IGljZC0+Y3VycmVudF9mbXQ7CisJCXZiLT53aWR0aAk9IGljZC0+d2lkdGg7CisJCXZiLT5oZWlnaHQJPSBpY2QtPmhlaWdodDsKKwkJdmItPmZpZWxkCT0gZmllbGQ7CisJCWlmICh2Yi0+c3RhdGUgIT0gVklERU9CVUZfTkVFRFNfSU5JVCkKKwkJCWZyZWVfYnVmZmVyKHZxLCBidWYpOworCX0KKworCWlmICh2Yi0+YmFkZHIgJiYgdmItPmJzaXplIDwgbmV3X3NpemUpIHsKKwkJLyogVXNlciBwcm92aWRlZCBidWZmZXIsIGJ1dCBpdCBpcyB0b28gc21hbGwgKi8KKwkJcmV0ID0gLUVOT01FTTsKKwkJZ290byBvdXQ7CisJfQorCisJaWYgKHZiLT5zdGF0ZSA9PSBWSURFT0JVRl9ORUVEU19JTklUKSB7CisJCXN0cnVjdCBpZG1hY19jaGFubmVsICppY2hhbiA9IG14M19jYW0tPmlkbWFjX2NoYW5uZWxbMF07CisJCXN0cnVjdCBzY2F0dGVybGlzdCAqc2cgPSAmYnVmLT5zZzsKKworCQkvKgorCQkgKiBUaGUgdG90YWwgc2l6ZSBvZiB2aWRlby1idWZmZXJzIHRoYXQgd2lsbCBiZSBhbGxvY2F0ZWQgLyBtYXBwZWQuCisJCSAqICpzaXplIHRoYXQgd2UgY2FsY3VsYXRlZCBpbiB2aWRlb2J1Zl9zZXR1cCBnZXRzIGFzc2lnbmVkIHRvCisJCSAqIHZiLT5ic2l6ZSwgYW5kIG5vdyB3ZSB1c2UgdGhlIHNhbWUgY2FsY3VsYXRpb24gdG8gZ2V0IHZiLT5zaXplLgorCQkgKi8KKwkJdmItPnNpemUgPSBuZXdfc2l6ZTsKKworCQkvKiBUaGlzIGFjdHVhbGx5IChhbGxvY2F0ZXMgYW5kKSBtYXBzIGJ1ZmZlcnMgKi8KKwkJcmV0ID0gdmlkZW9idWZfaW9sb2NrKHZxLCB2YiwgTlVMTCk7CisJCWlmIChyZXQpCisJCQlnb3RvIGZhaWw7CisKKwkJLyoKKwkJICogV2Ugd2lsbCBoYXZlIHRvIGNvbmZpZ3VyZSB0aGUgSURNQUMgY2hhbm5lbC4gSXQgaGFzIHR3byBzbG90cworCQkgKiBmb3IgRE1BIGJ1ZmZlcnMsIHdlIHNoYWxsIGVudGVyIHRoZSBmaXJzdCB0d28gYnVmZmVycyB0aGVyZSwKKwkJICogYW5kIHRoZW4gc3VibWl0IG5ldyBidWZmZXJzIGluIERNQS1yZWFkeSBpbnRlcnJ1cHRzCisJCSAqLworCQlzZ19pbml0X3RhYmxlKHNnLCAxKTsKKwkJc2dfZG1hX2FkZHJlc3Moc2cpCT0gdmlkZW9idWZfdG9fZG1hX2NvbnRpZyh2Yik7CisJCXNnX2RtYV9sZW4oc2cpCQk9IHZiLT5zaXplOworCisJCWJ1Zi0+dHhkID0gaWNoYW4tPmRtYV9jaGFuLmRldmljZS0+ZGV2aWNlX3ByZXBfc2xhdmVfc2coCisJCQkmaWNoYW4tPmRtYV9jaGFuLCBzZywgMSwgRE1BX0ZST01fREVWSUNFLAorCQkJRE1BX1BSRVBfSU5URVJSVVBUKTsKKwkJaWYgKCFidWYtPnR4ZCkgeworCQkJcmV0ID0gLUVJTzsKKwkJCWdvdG8gZmFpbDsKKwkJfQorCisJCWJ1Zi0+dHhkLT5jYWxsYmFja19wYXJhbQk9IGJ1Zi0+dHhkOworCQlidWYtPnR4ZC0+Y2FsbGJhY2sJCT0gbXgzX2NhbV9kbWFfZG9uZTsKKworCQl2Yi0+c3RhdGUgPSBWSURFT0JVRl9QUkVQQVJFRDsKKwl9CisKKwlyZXR1cm4gMDsKKworZmFpbDoKKwlmcmVlX2J1ZmZlcih2cSwgYnVmKTsKK291dDoKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgZW51bSBwaXhlbF9mbXQgZm91cmNjX3RvX2lwdV9waXgoX191MzIgZm91cmNjKQoreworCS8qIEFkZCBtb3JlIGZvcm1hdHMgYXMgbmVlZCBhcmlzZXMgYW5kIHRlc3QgcG9zc2liaWxpdGllcyBhcHBlYXIuLi4gKi8KKwlzd2l0Y2ggKGZvdXJjYykgeworCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjU2NToKKwkJcmV0dXJuIElQVV9QSVhfRk1UX1JHQjU2NTsKKwljYXNlIFY0TDJfUElYX0ZNVF9SR0IyNDoKKwkJcmV0dXJuIElQVV9QSVhfRk1UX1JHQjI0OworCWNhc2UgVjRMMl9QSVhfRk1UX1JHQjMzMjoKKwkJcmV0dXJuIElQVV9QSVhfRk1UX1JHQjMzMjsKKwljYXNlIFY0TDJfUElYX0ZNVF9ZVVY0MjJQOgorCQlyZXR1cm4gSVBVX1BJWF9GTVRfWVZVNDIyUDsKKwlkZWZhdWx0OgorCQlyZXR1cm4gSVBVX1BJWF9GTVRfR0VORVJJQzsKKwl9Cit9CisKKy8qIENhbGxlZCB3aXRoIC52Yl9sb2NrIGhlbGQgKi8KK3N0YXRpYyB2b2lkIG14M192aWRlb2J1Zl9xdWV1ZShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKnZxLAorCQkJICAgICAgIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0gPSBpY2ktPnByaXY7CisJc3RydWN0IG14M19jYW1lcmFfYnVmZmVyICpidWYgPQorCQljb250YWluZXJfb2YodmIsIHN0cnVjdCBteDNfY2FtZXJhX2J1ZmZlciwgdmIpOworCXN0cnVjdCBkbWFfYXN5bmNfdHhfZGVzY3JpcHRvciAqdHhkID0gYnVmLT50eGQ7CisJc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuID0gdG9faWRtYWNfY2hhbih0eGQtPmNoYW4pOworCXN0cnVjdCBpZG1hY192aWRlb19wYXJhbSAqdmlkZW8gPSAmaWNoYW4tPnBhcmFtcy52aWRlbzsKKwljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCAqZGF0YV9mbXQgPSBpY2QtPmN1cnJlbnRfZm10OworCWRtYV9jb29raWVfdCBjb29raWU7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCS8qIFRoaXMgaXMgdGhlIGNvbmZpZ3VyYXRpb24gb2Ygb25lIHNnLWVsZW1lbnQgKi8KKwl2aWRlby0+b3V0X3BpeGVsX2ZtdAk9IGZvdXJjY190b19pcHVfcGl4KGRhdGFfZm10LT5mb3VyY2MpOworCXZpZGVvLT5vdXRfd2lkdGgJPSBpY2QtPndpZHRoOworCXZpZGVvLT5vdXRfaGVpZ2h0CT0gaWNkLT5oZWlnaHQ7CisJdmlkZW8tPm91dF9zdHJpZGUJPSBpY2QtPndpZHRoOworCisjaWZkZWYgREVCVUcKKwkvKiBoZWxwcyB0byBzZWUgd2hhdCBETUEgYWN0dWFsbHkgaGFzIHdyaXR0ZW4gKi8KKwltZW1zZXQoKHZvaWQgKil2Yi0+YmFkZHIsIDB4YWEsIHZiLT5ic2l6ZSk7CisjZW5kaWYKKworCXNwaW5fbG9ja19pcnFzYXZlKCZteDNfY2FtLT5sb2NrLCBmbGFncyk7CisKKwlsaXN0X2FkZF90YWlsKCZ2Yi0+cXVldWUsICZteDNfY2FtLT5jYXB0dXJlKTsKKworCWlmICghbXgzX2NhbS0+YWN0aXZlKSB7CisJCW14M19jYW0tPmFjdGl2ZSA9IGJ1ZjsKKwkJdmItPnN0YXRlID0gVklERU9CVUZfQUNUSVZFOworCX0gZWxzZSB7CisJCXZiLT5zdGF0ZSA9IFZJREVPQlVGX1FVRVVFRDsKKwl9CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZteDNfY2FtLT5sb2NrLCBmbGFncyk7CisKKwljb29raWUgPSB0eGQtPnR4X3N1Ym1pdCh0eGQpOworCWRldl9kYmcoJmljZC0+ZGV2LCAiU3VibWl0dGVkIGNvb2tpZSAlZCBETUEgMHglMDh4XG4iLCBjb29raWUsIHNnX2RtYV9hZGRyZXNzKCZidWYtPnNnKSk7CisJaWYgKGNvb2tpZSA+PSAwKQorCQlyZXR1cm47CisKKwkvKiBTdWJtaXQgZXJyb3IgKi8KKwl2Yi0+c3RhdGUgPSBWSURFT0JVRl9QUkVQQVJFRDsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZteDNfY2FtLT5sb2NrLCBmbGFncyk7CisKKwlsaXN0X2RlbF9pbml0KCZ2Yi0+cXVldWUpOworCisJaWYgKG14M19jYW0tPmFjdGl2ZSA9PSBidWYpCisJCW14M19jYW0tPmFjdGl2ZSA9IE5VTEw7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZteDNfY2FtLT5sb2NrLCBmbGFncyk7Cit9CisKKy8qIENhbGxlZCB3aXRoIC52Yl9sb2NrIGhlbGQgKi8KK3N0YXRpYyB2b2lkIG14M192aWRlb2J1Zl9yZWxlYXNlKHN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqdnEsCisJCQkJIHN0cnVjdCB2aWRlb2J1Zl9idWZmZXIgKnZiKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gdnEtPnByaXZfZGF0YTsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0gPSBpY2ktPnByaXY7CisJc3RydWN0IG14M19jYW1lcmFfYnVmZmVyICpidWYgPQorCQljb250YWluZXJfb2YodmIsIHN0cnVjdCBteDNfY2FtZXJhX2J1ZmZlciwgdmIpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlkZXZfZGJnKCZpY2QtPmRldiwgIlJlbGVhc2UlcyBETUEgMHglMDh4IChzdGF0ZSAlZCksIHF1ZXVlICVzZW1wdHlcbiIsCisJCW14M19jYW0tPmFjdGl2ZSA9PSBidWYgPyAiIGFjdGl2ZSIgOiAiIiwgc2dfZG1hX2FkZHJlc3MoJmJ1Zi0+c2cpLAorCQkgdmItPnN0YXRlLCBsaXN0X2VtcHR5KCZ2Yi0+cXVldWUpID8gIiIgOiAibm90ICIpOworCXNwaW5fbG9ja19pcnFzYXZlKCZteDNfY2FtLT5sb2NrLCBmbGFncyk7CisJaWYgKCh2Yi0+c3RhdGUgPT0gVklERU9CVUZfQUNUSVZFIHx8IHZiLT5zdGF0ZSA9PSBWSURFT0JVRl9RVUVVRUQpICYmCisJICAgICFsaXN0X2VtcHR5KCZ2Yi0+cXVldWUpKSB7CisJCXZiLT5zdGF0ZSA9IFZJREVPQlVGX0VSUk9SOworCisJCWxpc3RfZGVsX2luaXQoJnZiLT5xdWV1ZSk7CisJCWlmIChteDNfY2FtLT5hY3RpdmUgPT0gYnVmKQorCQkJbXgzX2NhbS0+YWN0aXZlID0gTlVMTDsKKwl9CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmbXgzX2NhbS0+bG9jaywgZmxhZ3MpOworCWZyZWVfYnVmZmVyKHZxLCBidWYpOworfQorCitzdGF0aWMgc3RydWN0IHZpZGVvYnVmX3F1ZXVlX29wcyBteDNfdmlkZW9idWZfb3BzID0geworCS5idWZfc2V0dXAgICAgICA9IG14M192aWRlb2J1Zl9zZXR1cCwKKwkuYnVmX3ByZXBhcmUgICAgPSBteDNfdmlkZW9idWZfcHJlcGFyZSwKKwkuYnVmX3F1ZXVlICAgICAgPSBteDNfdmlkZW9idWZfcXVldWUsCisJLmJ1Zl9yZWxlYXNlICAgID0gbXgzX3ZpZGVvYnVmX3JlbGVhc2UsCit9OworCitzdGF0aWMgdm9pZCBteDNfY2FtZXJhX2luaXRfdmlkZW9idWYoc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxLAorCQkJCSAgICAgc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtID0gaWNpLT5wcml2OworCisJdmlkZW9idWZfcXVldWVfZG1hX2NvbnRpZ19pbml0KHEsICZteDNfdmlkZW9idWZfb3BzLCBteDNfY2FtLT5kZXYsCisJCQkJICAgICAgICZteDNfY2FtLT5sb2NrLAorCQkJCSAgICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUsCisJCQkJICAgICAgIFY0TDJfRklFTERfTk9ORSwKKwkJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBteDNfY2FtZXJhX2J1ZmZlciksIGljZCk7Cit9CisKKy8qIEZpcnN0IHBhcnQgb2YgaXB1X2NzaV9pbml0X2ludGVyZmFjZSgpICovCitzdGF0aWMgdm9pZCBteDNfY2FtZXJhX2FjdGl2YXRlKHN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSwKKwkJCQlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCkKK3sKKwl1MzIgY29uZjsKKwlsb25nIHJhdGU7CisKKwkvKiBTZXQgZGVmYXVsdCBzaXplOiBpcHVfY3NpX3NldF93aW5kb3dfc2l6ZSgpICovCisJY3NpX3JlZ193cml0ZShteDNfY2FtLCAoNjQwIC0gMSkgfCAoKDQ4MCAtIDEpIDw8IDE2KSwgQ1NJX0FDVF9GUk1fU0laRSk7CisJLyogLi4uYW5kIHBvc2l0aW9uIHRvIDA6MDogaXB1X2NzaV9zZXRfd2luZG93X3BvcygpICovCisJY29uZiA9IGNzaV9yZWdfcmVhZChteDNfY2FtLCBDU0lfT1VUX0ZSTV9DVFJMKSAmIDB4ZmZmZjAwMDA7CisJY3NpX3JlZ193cml0ZShteDNfY2FtLCBjb25mLCBDU0lfT1VUX0ZSTV9DVFJMKTsKKworCS8qIFdlIHVzZSBvbmx5IGdhdGVkIGNsb2NrIHN5bmNocm9uaXNhdGlvbiBtb2RlIHNvIGZhciAqLworCWNvbmYgPSAwIDw8IENTSV9TRU5TX0NPTkZfU0VOU19QUlRDTF9TSElGVDsKKworCS8qIFNldCBnZW5lcmljIGRhdGEsIHBsYXRmb3JtLWJpZ2dlc3QgYnVzLXdpZHRoICovCisJY29uZiB8PSBDU0lfU0VOU19DT05GX0RBVEFfRk1UX0JBWUVSOworCisJaWYgKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9EQVRBV0lEVEhfMTUpCisJCWNvbmYgfD0gMyA8PCBDU0lfU0VOU19DT05GX0RBVEFfV0lEVEhfU0hJRlQ7CisJZWxzZSBpZiAobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0RBVEFXSURUSF8xMCkKKwkJY29uZiB8PSAyIDw8IENTSV9TRU5TX0NPTkZfREFUQV9XSURUSF9TSElGVDsKKwllbHNlIGlmIChteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfREFUQVdJRFRIXzgpCisJCWNvbmYgfD0gMSA8PCBDU0lfU0VOU19DT05GX0RBVEFfV0lEVEhfU0hJRlQ7CisJZWxzZS8qIGlmIChteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfREFUQVdJRFRIXzQpKi8KKwkJY29uZiB8PSAwIDw8IENTSV9TRU5TX0NPTkZfREFUQV9XSURUSF9TSElGVDsKKworCWlmIChteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfQ0xLX1NSQykKKwkJY29uZiB8PSAxIDw8IENTSV9TRU5TX0NPTkZfU0VOU19DTEtTUkNfU0hJRlQ7CisJaWYgKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9FWFRfVlNZTkMpCisJCWNvbmYgfD0gMSA8PCBDU0lfU0VOU19DT05GX0VYVF9WU1lOQ19TSElGVDsKKwlpZiAobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0RQKQorCQljb25mIHw9IDEgPDwgQ1NJX1NFTlNfQ09ORl9EQVRBX1BPTF9TSElGVDsKKwlpZiAobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX1BDUCkKKwkJY29uZiB8PSAxIDw8IENTSV9TRU5TX0NPTkZfUElYX0NMS19QT0xfU0hJRlQ7CisJaWYgKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9IU1ApCisJCWNvbmYgfD0gMSA8PCBDU0lfU0VOU19DT05GX0hTWU5DX1BPTF9TSElGVDsKKwlpZiAobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX1ZTUCkKKwkJY29uZiB8PSAxIDw8IENTSV9TRU5TX0NPTkZfVlNZTkNfUE9MX1NISUZUOworCisJLyogaXB1X2NzaV9pbml0X2ludGVyZmFjZSgpICovCisJY3NpX3JlZ193cml0ZShteDNfY2FtLCBjb25mLCBDU0lfU0VOU19DT05GKTsKKworCWNsa19lbmFibGUobXgzX2NhbS0+Y2xrKTsKKwlyYXRlID0gY2xrX3JvdW5kX3JhdGUobXgzX2NhbS0+Y2xrLCBteDNfY2FtLT5tY2xrKTsKKwlkZXZfZGJnKCZpY2QtPmRldiwgIlNldCBTRU5TX0NPTkYgdG8gJXgsIHJhdGUgJWxkXG4iLCBjb25mLCByYXRlKTsKKwlpZiAocmF0ZSkKKwkJY2xrX3NldF9yYXRlKG14M19jYW0tPmNsaywgcmF0ZSk7Cit9CisKKy8qIENhbGxlZCB3aXRoIC52aWRlb19sb2NrIGhlbGQgKi8KK3N0YXRpYyBpbnQgbXgzX2NhbWVyYV9hZGRfZGV2aWNlKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKKwlpbnQgcmV0OworCisJaWYgKG14M19jYW0tPmljZCkgeworCQlyZXQgPSAtRUJVU1k7CisJCWdvdG8gZWJ1c3k7CisJfQorCisJbXgzX2NhbWVyYV9hY3RpdmF0ZShteDNfY2FtLCBpY2QpOworCXJldCA9IGljZC0+b3BzLT5pbml0KGljZCk7CisJaWYgKHJldCA8IDApIHsKKwkJY2xrX2Rpc2FibGUobXgzX2NhbS0+Y2xrKTsKKwkJZ290byBlaW5pdDsKKwl9CisKKwlteDNfY2FtLT5pY2QgPSBpY2Q7CisKK2Vpbml0OgorZWJ1c3k6CisJaWYgKCFyZXQpCisJCWRldl9pbmZvKCZpY2QtPmRldiwgIk1YMyBDYW1lcmEgZHJpdmVyIGF0dGFjaGVkIHRvIGNhbWVyYSAlZFxuIiwKKwkJCSBpY2QtPmRldm51bSk7CisKKwlyZXR1cm4gcmV0OworfQorCisvKiBDYWxsZWQgd2l0aCAudmlkZW9fbG9jayBoZWxkICovCitzdGF0aWMgdm9pZCBteDNfY2FtZXJhX3JlbW92ZV9kZXZpY2Uoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtID0gaWNpLT5wcml2OworCXN0cnVjdCBpZG1hY19jaGFubmVsICoqaWNoYW4gPSAmbXgzX2NhbS0+aWRtYWNfY2hhbm5lbFswXTsKKworCUJVR19PTihpY2QgIT0gbXgzX2NhbS0+aWNkKTsKKworCWlmICgqaWNoYW4pIHsKKwkJZG1hX3JlbGVhc2VfY2hhbm5lbCgmKCppY2hhbiktPmRtYV9jaGFuKTsKKwkJKmljaGFuID0gTlVMTDsKKwl9CisKKwlpY2QtPm9wcy0+cmVsZWFzZShpY2QpOworCisJY2xrX2Rpc2FibGUobXgzX2NhbS0+Y2xrKTsKKworCW14M19jYW0tPmljZCA9IE5VTEw7CisKKwlkZXZfaW5mbygmaWNkLT5kZXYsICJNWDMgQ2FtZXJhIGRyaXZlciBkZXRhY2hlZCBmcm9tIGNhbWVyYSAlZFxuIiwKKwkJIGljZC0+ZGV2bnVtKTsKK30KKworc3RhdGljIGJvb2wgY2hhbm5lbF9jaGFuZ2VfcmVxdWVzdGVkKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJCSAgICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0gPSBpY2ktPnByaXY7CisJc3RydWN0IGlkbWFjX2NoYW5uZWwgKmljaGFuID0gbXgzX2NhbS0+aWRtYWNfY2hhbm5lbFswXTsKKworCS8qIERvIGJ1ZmZlcnMgaGF2ZSB0byBiZSByZS1hbGxvY2F0ZWQgb3IgY2hhbm5lbCByZS1jb25maWd1cmVkPyAqLworCXJldHVybiBpY2hhbiAmJiByZWN0LT53aWR0aCAqIHJlY3QtPmhlaWdodCA+IGljZC0+d2lkdGggKiBpY2QtPmhlaWdodDsKK30KKworc3RhdGljIGludCB0ZXN0X3BsYXRmb3JtX3BhcmFtKHN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSwKKwkJCSAgICAgICB1bnNpZ25lZCBjaGFyIGJ1c3dpZHRoLCB1bnNpZ25lZCBsb25nICpmbGFncykKK3sKKwkvKgorCSAqIFBsYXRmb3JtIHNwZWNpZmllZCBzeW5jaHJvbml6YXRpb24gYW5kIHBpeGVsIGNsb2NrIHBvbGFyaXRpZXMgYXJlCisJICogb25seSBhIHJlY29tbWVuZGF0aW9uIGFuZCBhcmUgb25seSB1c2VkIGR1cmluZyBwcm9iaW5nLiBNWDN4CisJICogY2FtZXJhIGludGVyZmFjZSBvbmx5IHdvcmtzIGluIG1hc3RlciBtb2RlLCBpLmUuLCB1c2VzIEhTWU5DIGFuZAorCSAqIFZTWU5DIHNpZ25hbHMgZnJvbSB0aGUgc2Vuc29yCisJICovCisJKmZsYWdzID0gU09DQU1fTUFTVEVSIHwKKwkJU09DQU1fSFNZTkNfQUNUSVZFX0hJR0ggfAorCQlTT0NBTV9IU1lOQ19BQ1RJVkVfTE9XIHwKKwkJU09DQU1fVlNZTkNfQUNUSVZFX0hJR0ggfAorCQlTT0NBTV9WU1lOQ19BQ1RJVkVfTE9XIHwKKwkJU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwKKwkJU09DQU1fUENMS19TQU1QTEVfRkFMTElORyB8CisJCVNPQ0FNX0RBVEFfQUNUSVZFX0hJR0ggfAorCQlTT0NBTV9EQVRBX0FDVElWRV9MT1c7CisKKwkvKiBJZiByZXF1ZXN0ZWQgZGF0YSB3aWR0aCBpcyBzdXBwb3J0ZWQgYnkgdGhlIHBsYXRmb3JtLCB1c2UgaXQgb3IgYW55CisJICogcG9zc2libGUgbG93ZXIgdmFsdWUgLSBpLk1YMzEgaXMgc21hcnQgZW5vdWdoIHRvIHNjaGlmdCBiaXRzICovCisJc3dpdGNoIChidXN3aWR0aCkgeworCWNhc2UgMTU6CisJCWlmICghKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9EQVRBV0lEVEhfMTUpKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCSpmbGFncyB8PSBTT0NBTV9EQVRBV0lEVEhfMTUgfCBTT0NBTV9EQVRBV0lEVEhfMTAgfAorCQkJU09DQU1fREFUQVdJRFRIXzggfCBTT0NBTV9EQVRBV0lEVEhfNDsKKwkJYnJlYWs7CisJY2FzZSAxMDoKKwkJaWYgKCEobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0RBVEFXSURUSF8xMCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJKmZsYWdzIHw9IFNPQ0FNX0RBVEFXSURUSF8xMCB8IFNPQ0FNX0RBVEFXSURUSF84IHwKKwkJCVNPQ0FNX0RBVEFXSURUSF80OworCQlicmVhazsKKwljYXNlIDg6CisJCWlmICghKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9EQVRBV0lEVEhfOCkpCisJCQlyZXR1cm4gLUVJTlZBTDsKKwkJKmZsYWdzIHw9IFNPQ0FNX0RBVEFXSURUSF84IHwgU09DQU1fREFUQVdJRFRIXzQ7CisJCWJyZWFrOworCWNhc2UgNDoKKwkJaWYgKCEobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX0RBVEFXSURUSF80KSkKKwkJCXJldHVybiAtRUlOVkFMOworCQkqZmxhZ3MgfD0gU09DQU1fREFUQVdJRFRIXzQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWRldl9pbmZvKG14M19jYW0tPmRldiwgIlVuc3VwcG9ydGVkIGJ1cyB3aWR0aCAlZFxuIiwgYnVzd2lkdGgpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBteDNfY2FtZXJhX3RyeV9idXNfcGFyYW0oc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkJICAgIGNvbnN0IHVuc2lnbmVkIGludCBkZXB0aCkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0gPSBpY2ktPnByaXY7CisJdW5zaWduZWQgbG9uZyBidXNfZmxhZ3MsIGNhbWVyYV9mbGFnczsKKwlpbnQgcmV0ID0gdGVzdF9wbGF0Zm9ybV9wYXJhbShteDNfY2FtLCBkZXB0aCwgJmJ1c19mbGFncyk7CisKKwlkZXZfZGJnKCZpY2ktPmRldiwgInJlcXVlc3RlZCBidXMgd2lkdGggJWQgYml0OiAlZFxuIiwgZGVwdGgsIHJldCk7CisKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCWNhbWVyYV9mbGFncyA9IGljZC0+b3BzLT5xdWVyeV9idXNfcGFyYW0oaWNkKTsKKworCXJldCA9IHNvY19jYW1lcmFfYnVzX3BhcmFtX2NvbXBhdGlibGUoY2FtZXJhX2ZsYWdzLCBidXNfZmxhZ3MpOworCWlmIChyZXQgPCAwKQorCQlkZXZfd2FybigmaWNkLT5kZXYsICJGbGFncyBpbmNvbXBhdGlibGU6IGNhbWVyYSAlbHgsIGhvc3QgJWx4XG4iLAorCQkJIGNhbWVyYV9mbGFncywgYnVzX2ZsYWdzKTsKKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBib29sIGNoYW5fZmlsdGVyKHN0cnVjdCBkbWFfY2hhbiAqY2hhbiwgdm9pZCAqYXJnKQoreworCXN0cnVjdCBkbWFfY2hhbl9yZXF1ZXN0ICpycSA9IGFyZzsKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9wZGF0YSAqcGRhdGE7CisKKwlpZiAoIXJxKQorCQlyZXR1cm4gZmFsc2U7CisKKwlwZGF0YSA9IHJxLT5teDNfY2FtLT5kZXYtPnBsYXRmb3JtX2RhdGE7CisKKwlyZXR1cm4gcnEtPmlkID09IGNoYW4tPmNoYW5faWQgJiYKKwkJcGRhdGEtPmRtYV9kZXYgPT0gY2hhbi0+ZGV2aWNlLT5kZXY7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9kYXRhX2Zvcm1hdCBteDNfY2FtZXJhX2Zvcm1hdHNbXSA9IHsKKwl7CisJCS5uYW1lCQk9ICJCYXllciAoc1JHQikgOCBiaXQiLAorCQkuZGVwdGgJCT0gOCwKKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfU0JHR1I4LAorCQkuY29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAorCX0sIHsKKwkJLm5hbWUJCT0gIk1vbm9jaHJvbWUgOCBiaXQiLAorCQkuZGVwdGgJCT0gOCwKKwkJLmZvdXJjYwkJPSBWNEwyX1BJWF9GTVRfR1JFWSwKKwkJLmNvbG9yc3BhY2UJPSBWNEwyX0NPTE9SU1BBQ0VfSlBFRywKKwl9LAorfTsKKworc3RhdGljIGJvb2wgYnVzd2lkdGhfc3VwcG9ydGVkKHN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSwgaW50IGRlcHRoKQoreworCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKKworCXN3aXRjaCAoZGVwdGgpIHsKKwljYXNlIDQ6CisJCXJldHVybiAhIShteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfREFUQVdJRFRIXzQpOworCWNhc2UgODoKKwkJcmV0dXJuICEhKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9EQVRBV0lEVEhfOCk7CisJY2FzZSAxMDoKKwkJcmV0dXJuICEhKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9EQVRBV0lEVEhfMTApOworCWNhc2UgMTU6CisJCXJldHVybiAhIShteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfREFUQVdJRFRIXzE1KTsKKwl9CisJcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMgaW50IG14M19jYW1lcmFfZ2V0X2Zvcm1hdHMoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsIGludCBpZHgsCisJCQkJICBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCWludCBmb3JtYXRzID0gMCwgYnVzd2lkdGgsIHJldDsKKworCWJ1c3dpZHRoID0gaWNkLT5mb3JtYXRzW2lkeF0uZGVwdGg7CisKKwlpZiAoIWJ1c3dpZHRoX3N1cHBvcnRlZChpY2ksIGJ1c3dpZHRoKSkKKwkJcmV0dXJuIDA7CisKKwlyZXQgPSBteDNfY2FtZXJhX3RyeV9idXNfcGFyYW0oaWNkLCBidXN3aWR0aCk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiAwOworCisJc3dpdGNoIChpY2QtPmZvcm1hdHNbaWR4XS5mb3VyY2MpIHsKKwljYXNlIFY0TDJfUElYX0ZNVF9TR1JCRzEwOgorCQlmb3JtYXRzKys7CisJCWlmICh4bGF0ZSkgeworCQkJeGxhdGUtPmhvc3RfZm10ID0gJm14M19jYW1lcmFfZm9ybWF0c1swXTsKKwkJCXhsYXRlLT5jYW1fZm10ID0gaWNkLT5mb3JtYXRzICsgaWR4OworCQkJeGxhdGUtPmJ1c3dpZHRoID0gYnVzd2lkdGg7CisJCQl4bGF0ZSsrOworCQkJZGV2X2RiZygmaWNpLT5kZXYsICJQcm92aWRpbmcgZm9ybWF0ICVzIHVzaW5nICVzXG4iLAorCQkJCW14M19jYW1lcmFfZm9ybWF0c1swXS5uYW1lLAorCQkJCWljZC0+Zm9ybWF0c1tpZHhdLm5hbWUpOworCQl9CisJCWdvdG8gcGFzc3Rocm91Z2g7CisJY2FzZSBWNEwyX1BJWF9GTVRfWTE2OgorCQlmb3JtYXRzKys7CisJCWlmICh4bGF0ZSkgeworCQkJeGxhdGUtPmhvc3RfZm10ID0gJm14M19jYW1lcmFfZm9ybWF0c1sxXTsKKwkJCXhsYXRlLT5jYW1fZm10ID0gaWNkLT5mb3JtYXRzICsgaWR4OworCQkJeGxhdGUtPmJ1c3dpZHRoID0gYnVzd2lkdGg7CisJCQl4bGF0ZSsrOworCQkJZGV2X2RiZygmaWNpLT5kZXYsICJQcm92aWRpbmcgZm9ybWF0ICVzIHVzaW5nICVzXG4iLAorCQkJCW14M19jYW1lcmFfZm9ybWF0c1swXS5uYW1lLAorCQkJCWljZC0+Zm9ybWF0c1tpZHhdLm5hbWUpOworCQl9CisJZGVmYXVsdDoKK3Bhc3N0aHJvdWdoOgorCQkvKiBHZW5lcmljIHBhc3MtdGhyb3VnaCAqLworCQlmb3JtYXRzKys7CisJCWlmICh4bGF0ZSkgeworCQkJeGxhdGUtPmhvc3RfZm10ID0gaWNkLT5mb3JtYXRzICsgaWR4OworCQkJeGxhdGUtPmNhbV9mbXQgPSBpY2QtPmZvcm1hdHMgKyBpZHg7CisJCQl4bGF0ZS0+YnVzd2lkdGggPSBidXN3aWR0aDsKKwkJCXhsYXRlKys7CisJCQlkZXZfZGJnKCZpY2ktPmRldiwKKwkJCQkiUHJvdmlkaW5nIGZvcm1hdCAlcyBpbiBwYXNzLXRocm91Z2ggbW9kZVxuIiwKKwkJCQlpY2QtPmZvcm1hdHNbaWR4XS5uYW1lKTsKKwkJfQorCX0KKworCXJldHVybiBmb3JtYXRzOworfQorCitzdGF0aWMgdm9pZCBjb25maWd1cmVfZ2VvbWV0cnkoc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtLAorCQkJICAgICAgIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCit7CisJdTMyIGN0cmwsIHdpZHRoX2ZpZWxkLCBoZWlnaHRfZmllbGQ7CisKKwkvKiBTZXR1cCBmcmFtZSBzaXplIC0gdGhpcyBjYW5ub3QgYmUgY2hhbmdlZCBvbi10aGUtZmx5Li4uICovCisJd2lkdGhfZmllbGQgPSByZWN0LT53aWR0aCAtIDE7CisJaGVpZ2h0X2ZpZWxkID0gcmVjdC0+aGVpZ2h0IC0gMTsKKwljc2lfcmVnX3dyaXRlKG14M19jYW0sIHdpZHRoX2ZpZWxkIHwgKGhlaWdodF9maWVsZCA8PCAxNiksIENTSV9TRU5TX0ZSTV9TSVpFKTsKKworCWNzaV9yZWdfd3JpdGUobXgzX2NhbSwgd2lkdGhfZmllbGQgPDwgMTYsIENTSV9GTEFTSF9TVFJPQkVfMSk7CisJY3NpX3JlZ193cml0ZShteDNfY2FtLCAoaGVpZ2h0X2ZpZWxkIDw8IDE2KSB8IDB4MjIsIENTSV9GTEFTSF9TVFJPQkVfMik7CisKKwljc2lfcmVnX3dyaXRlKG14M19jYW0sIHdpZHRoX2ZpZWxkIHwgKGhlaWdodF9maWVsZCA8PCAxNiksIENTSV9BQ1RfRlJNX1NJWkUpOworCisJLyogLi4uYW5kIHBvc2l0aW9uICovCisJY3RybCA9IGNzaV9yZWdfcmVhZChteDNfY2FtLCBDU0lfT1VUX0ZSTV9DVFJMKSAmIDB4ZmZmZjAwMDA7CisJLyogU2Vuc29yIGRvZXMgdGhlIGNyb3BwaW5nICovCisJY3NpX3JlZ193cml0ZShteDNfY2FtLCBjdHJsIHwgMCB8ICgwIDw8IDgpLCBDU0lfT1VUX0ZSTV9DVFJMKTsKKworCS8qCisJICogTm8gbmVlZCB0byBmcmVlIHJlc291cmNlcyBoZXJlIGlmIHdlIGZhaWwsIHdlJ2xsIHNlZSBpZiB3ZSBuZWVkIHRvCisJICogZG8gdGhpcyBuZXh0IHRpbWUgd2UgYXJlIGNhbGxlZAorCSAqLworfQorCitzdGF0aWMgaW50IGFjcXVpcmVfZG1hX2NoYW5uZWwoc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtKQoreworCWRtYV9jYXBfbWFza190IG1hc2s7CisJc3RydWN0IGRtYV9jaGFuICpjaGFuOworCXN0cnVjdCBpZG1hY19jaGFubmVsICoqaWNoYW4gPSAmbXgzX2NhbS0+aWRtYWNfY2hhbm5lbFswXTsKKwkvKiBXZSBoYXZlIHRvIHVzZSBJRE1BQ19JQ183IGZvciBCYXllciAvIGdlbmVyaWMgZGF0YSAqLworCXN0cnVjdCBkbWFfY2hhbl9yZXF1ZXN0IHJxID0gey5teDNfY2FtID0gbXgzX2NhbSwKKwkJCQkgICAgICAuaWQgPSBJRE1BQ19JQ183fTsKKworCWlmICgqaWNoYW4pIHsKKwkJc3RydWN0IHZpZGVvYnVmX2J1ZmZlciAqdmIsICpfdmI7CisJCWRtYV9yZWxlYXNlX2NoYW5uZWwoJigqaWNoYW4pLT5kbWFfY2hhbik7CisJCSppY2hhbiA9IE5VTEw7CisJCW14M19jYW0tPmFjdGl2ZSA9IE5VTEw7CisJCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZSh2YiwgX3ZiLCAmbXgzX2NhbS0+Y2FwdHVyZSwgcXVldWUpIHsKKwkJCWxpc3RfZGVsX2luaXQoJnZiLT5xdWV1ZSk7CisJCQl2Yi0+c3RhdGUgPSBWSURFT0JVRl9FUlJPUjsKKwkJCXdha2VfdXAoJnZiLT5kb25lKTsKKwkJfQorCX0KKworCWRtYV9jYXBfemVybyhtYXNrKTsKKwlkbWFfY2FwX3NldChETUFfU0xBVkUsIG1hc2spOworCWRtYV9jYXBfc2V0KERNQV9QUklWQVRFLCBtYXNrKTsKKwljaGFuID0gZG1hX3JlcXVlc3RfY2hhbm5lbChtYXNrLCBjaGFuX2ZpbHRlciwgJnJxKTsKKwlpZiAoIWNoYW4pCisJCXJldHVybiAtRUJVU1k7CisKKwkqaWNoYW4gPSB0b19pZG1hY19jaGFuKGNoYW4pOworCSgqaWNoYW4pLT5jbGllbnQgPSBteDNfY2FtOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXgzX2NhbWVyYV9zZXRfY3JvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbSA9IGljaS0+cHJpdjsKKworCS8qCisJICogV2Ugbm93IGtub3cgcGl4ZWwgZm9ybWF0cyBhbmQgY2FuIGRlY2lkZSB1cG9uIERNQS1jaGFubmVsKHMpCisJICogU28gZmFyIG9ubHkgZGlyZWN0IGNhbWVyYS10by1tZW1vcnkgaXMgc3VwcG9ydGVkCisJICovCisJaWYgKGNoYW5uZWxfY2hhbmdlX3JlcXVlc3RlZChpY2QsIHJlY3QpKSB7CisJCWludCByZXQgPSBhY3F1aXJlX2RtYV9jaGFubmVsKG14M19jYW0pOworCQlpZiAocmV0IDwgMCkKKwkJCXJldHVybiByZXQ7CisJfQorCisJY29uZmlndXJlX2dlb21ldHJ5KG14M19jYW0sIHJlY3QpOworCisJcmV0dXJuIGljZC0+b3BzLT5zZXRfY3JvcChpY2QsIHJlY3QpOworfQorCitzdGF0aWMgaW50IG14M19jYW1lcmFfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0gPSBpY2ktPnByaXY7CisJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp4bGF0ZTsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwaXggPSAmZi0+Zm10LnBpeDsKKwlzdHJ1Y3QgdjRsMl9yZWN0IHJlY3QgPSB7CisJCS5sZWZ0CT0gaWNkLT54X2N1cnJlbnQsCisJCS50b3AJPSBpY2QtPnlfY3VycmVudCwKKwkJLndpZHRoCT0gcGl4LT53aWR0aCwKKwkJLmhlaWdodAk9IHBpeC0+aGVpZ2h0LAorCX07CisJaW50IHJldDsKKworCXhsYXRlID0gc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoaWNkLCBwaXgtPnBpeGVsZm9ybWF0KTsKKwlpZiAoIXhsYXRlKSB7CisJCWRldl93YXJuKCZpY2ktPmRldiwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsIHBpeC0+cGl4ZWxmb3JtYXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlyZXQgPSBhY3F1aXJlX2RtYV9jaGFubmVsKG14M19jYW0pOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJLyoKKwkgKiBNaWdodCBoYXZlIHRvIHBlcmZvcm0gYSBjb21wbGV0ZSBpbnRlcmZhY2UgaW5pdGlhbGlzYXRpb24gbGlrZSBpbgorCSAqIGlwdV9jc2lfaW5pdF9pbnRlcmZhY2UoKSBpbiBteGNfdjRsMl9zX3BhcmFtKCkuIEFsc28gY29uc2lkZXIKKwkgKiBteGNfdjRsMl9zX2ZtdCgpCisJICovCisKKwljb25maWd1cmVfZ2VvbWV0cnkobXgzX2NhbSwgJnJlY3QpOworCisJcmV0ID0gaWNkLT5vcHMtPnNldF9mbXQoaWNkLCBmKTsKKwlpZiAoIXJldCkgeworCQlpY2QtPmJ1c3dpZHRoID0geGxhdGUtPmJ1c3dpZHRoOworCQlpY2QtPmN1cnJlbnRfZm10ID0geGxhdGUtPmhvc3RfZm10OworCX0KKworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgbXgzX2NhbWVyYV90cnlfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGU7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisJX191MzIgcGl4Zm10ID0gcGl4LT5waXhlbGZvcm1hdDsKKwllbnVtIHY0bDJfZmllbGQgZmllbGQ7CisJaW50IHJldDsKKworCXhsYXRlID0gc29jX2NhbWVyYV94bGF0ZV9ieV9mb3VyY2MoaWNkLCBwaXhmbXQpOworCWlmIChwaXhmbXQgJiYgIXhsYXRlKSB7CisJCWRldl93YXJuKCZpY2ktPmRldiwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsIHBpeGZtdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIGxpbWl0IHRvIE1YMyBoYXJkd2FyZSBjYXBhYmlsaXRpZXMgKi8KKwlpZiAocGl4LT5oZWlnaHQgPiA0MDk2KQorCQlwaXgtPmhlaWdodCA9IDQwOTY7CisJaWYgKHBpeC0+d2lkdGggPiA0MDk2KQorCQlwaXgtPndpZHRoID0gNDA5NjsKKworCXBpeC0+Ynl0ZXNwZXJsaW5lID0gcGl4LT53aWR0aCAqCisJCURJVl9ST1VORF9VUCh4bGF0ZS0+aG9zdF9mbXQtPmRlcHRoLCA4KTsKKwlwaXgtPnNpemVpbWFnZSA9IHBpeC0+aGVpZ2h0ICogcGl4LT5ieXRlc3BlcmxpbmU7CisKKwkvKiBjYW1lcmEgaGFzIHRvIHNlZSBpdHMgZm9ybWF0LCBidXQgdGhlIHVzZXIgdGhlIG9yaWdpbmFsIG9uZSAqLworCXBpeC0+cGl4ZWxmb3JtYXQgPSB4bGF0ZS0+Y2FtX2ZtdC0+Zm91cmNjOworCS8qIGxpbWl0IHRvIHNlbnNvciBjYXBhYmlsaXRpZXMgKi8KKwlyZXQgPSBpY2QtPm9wcy0+dHJ5X2ZtdChpY2QsIGYpOworCXBpeC0+cGl4ZWxmb3JtYXQgPSB4bGF0ZS0+aG9zdF9mbXQtPmZvdXJjYzsKKworCWZpZWxkID0gcGl4LT5maWVsZDsKKworCWlmIChmaWVsZCA9PSBWNEwyX0ZJRUxEX0FOWSkgeworCQlwaXgtPmZpZWxkID0gVjRMMl9GSUVMRF9OT05FOworCX0gZWxzZSBpZiAoZmllbGQgIT0gVjRMMl9GSUVMRF9OT05FKSB7CisJCWRldl9lcnIoJmljZC0+ZGV2LCAiRmllbGQgdHlwZSAlZCB1bnN1cHBvcnRlZC5cbiIsIGZpZWxkKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBteDNfY2FtZXJhX3JlcWJ1ZnMoc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmLAorCQkJICAgICAgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnApCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgbXgzX2NhbWVyYV9wb2xsKHN0cnVjdCBmaWxlICpmaWxlLCBwb2xsX3RhYmxlICpwdCkKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9maWxlICppY2YgPSBmaWxlLT5wcml2YXRlX2RhdGE7CisKKwlyZXR1cm4gdmlkZW9idWZfcG9sbF9zdHJlYW0oZmlsZSwgJmljZi0+dmJfdmlkcSwgcHQpOworfQorCitzdGF0aWMgaW50IG14M19jYW1lcmFfcXVlcnljYXAoc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpLAorCQkJICAgICAgIHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKK3sKKwkvKiBjYXAtPm5hbWUgaXMgc2V0IGJ5IHRoZSBmaXJlbmRseSBjYWxsZXI6LT4gKi8KKwlzdHJsY3B5KGNhcC0+Y2FyZCwgImkuTVgzeCBDYW1lcmEiLCBzaXplb2YoY2FwLT5jYXJkKSk7CisJY2FwLT52ZXJzaW9uID0gS0VSTkVMX1ZFUlNJT04oMCwgMiwgMik7CisJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfU1RSRUFNSU5HOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgbXgzX2NhbWVyYV9zZXRfYnVzX3BhcmFtKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLCBfX3UzMiBwaXhmbXQpCit7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CisJc3RydWN0IG14M19jYW1lcmFfZGV2ICpteDNfY2FtID0gaWNpLT5wcml2OworCXVuc2lnbmVkIGxvbmcgYnVzX2ZsYWdzLCBjYW1lcmFfZmxhZ3MsIGNvbW1vbl9mbGFnczsKKwl1MzIgZHcsIHNlbnNfY29uZjsKKwlpbnQgcmV0ID0gdGVzdF9wbGF0Zm9ybV9wYXJhbShteDNfY2FtLCBpY2QtPmJ1c3dpZHRoLCAmYnVzX2ZsYWdzKTsKKwljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlOworCisJeGxhdGUgPSBzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYyhpY2QsIHBpeGZtdCk7CisJaWYgKCF4bGF0ZSkgeworCQlkZXZfd2FybigmaWNpLT5kZXYsICJGb3JtYXQgJXggbm90IGZvdW5kXG4iLCBwaXhmbXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlkZXZfZGJnKCZpY2ktPmRldiwgInJlcXVlc3RlZCBidXMgd2lkdGggJWQgYml0OiAlZFxuIiwKKwkJaWNkLT5idXN3aWR0aCwgcmV0KTsKKworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJY2FtZXJhX2ZsYWdzID0gaWNkLT5vcHMtPnF1ZXJ5X2J1c19wYXJhbShpY2QpOworCisJY29tbW9uX2ZsYWdzID0gc29jX2NhbWVyYV9idXNfcGFyYW1fY29tcGF0aWJsZShjYW1lcmFfZmxhZ3MsIGJ1c19mbGFncyk7CisJaWYgKCFjb21tb25fZmxhZ3MpIHsKKwkJZGV2X2RiZygmaWNpLT5kZXYsICJubyBjb21tb24gZmxhZ3M6IGNhbWVyYSAlbHgsIGhvc3QgJWx4XG4iLAorCQkJY2FtZXJhX2ZsYWdzLCBidXNfZmxhZ3MpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwkvKiBNYWtlIGNob2ljZXMsIGJhc2VkIG9uIHBsYXRmb3JtIHByZWZlcmVuY2VzICovCisJaWYgKChjb21tb25fZmxhZ3MgJiBTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCkgJiYKKwkgICAgKGNvbW1vbl9mbGFncyAmIFNPQ0FNX0hTWU5DX0FDVElWRV9MT1cpKSB7CisJCWlmIChteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfSFNQKQorCQkJY29tbW9uX2ZsYWdzICY9IH5TT0NBTV9IU1lOQ19BQ1RJVkVfSElHSDsKKwkJZWxzZQorCQkJY29tbW9uX2ZsYWdzICY9IH5TT0NBTV9IU1lOQ19BQ1RJVkVfTE9XOworCX0KKworCWlmICgoY29tbW9uX2ZsYWdzICYgU09DQU1fVlNZTkNfQUNUSVZFX0hJR0gpICYmCisJICAgIChjb21tb25fZmxhZ3MgJiBTT0NBTV9WU1lOQ19BQ1RJVkVfTE9XKSkgeworCQlpZiAobXgzX2NhbS0+cGxhdGZvcm1fZmxhZ3MgJiBNWDNfQ0FNRVJBX1ZTUCkKKwkJCWNvbW1vbl9mbGFncyAmPSB+U09DQU1fVlNZTkNfQUNUSVZFX0hJR0g7CisJCWVsc2UKKwkJCWNvbW1vbl9mbGFncyAmPSB+U09DQU1fVlNZTkNfQUNUSVZFX0xPVzsKKwl9CisKKwlpZiAoKGNvbW1vbl9mbGFncyAmIFNPQ0FNX0RBVEFfQUNUSVZFX0hJR0gpICYmCisJICAgIChjb21tb25fZmxhZ3MgJiBTT0NBTV9EQVRBX0FDVElWRV9MT1cpKSB7CisJCWlmIChteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIE1YM19DQU1FUkFfRFApCisJCQljb21tb25fZmxhZ3MgJj0gflNPQ0FNX0RBVEFfQUNUSVZFX0hJR0g7CisJCWVsc2UKKwkJCWNvbW1vbl9mbGFncyAmPSB+U09DQU1fREFUQV9BQ1RJVkVfTE9XOworCX0KKworCWlmICgoY29tbW9uX2ZsYWdzICYgU09DQU1fUENMS19TQU1QTEVfUklTSU5HKSAmJgorCSAgICAoY29tbW9uX2ZsYWdzICYgU09DQU1fUENMS19TQU1QTEVfRkFMTElORykpIHsKKwkJaWYgKG14M19jYW0tPnBsYXRmb3JtX2ZsYWdzICYgTVgzX0NBTUVSQV9QQ1ApCisJCQljb21tb25fZmxhZ3MgJj0gflNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORzsKKwkJZWxzZQorCQkJY29tbW9uX2ZsYWdzICY9IH5TT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HOworCX0KKworCS8qIE1ha2UgdGhlIGNhbWVyYSB3b3JrIGluIHdpZGVzdCBjb21tb24gbW9kZSwgd2UnbGwgdGFrZSBjYXJlIG9mCisJICogdGhlIHJlc3QgKi8KKwlpZiAoY29tbW9uX2ZsYWdzICYgU09DQU1fREFUQVdJRFRIXzE1KQorCQljb21tb25fZmxhZ3MgPSAoY29tbW9uX2ZsYWdzICYgflNPQ0FNX0RBVEFXSURUSF9NQVNLKSB8CisJCQlTT0NBTV9EQVRBV0lEVEhfMTU7CisJZWxzZSBpZiAoY29tbW9uX2ZsYWdzICYgU09DQU1fREFUQVdJRFRIXzEwKQorCQljb21tb25fZmxhZ3MgPSAoY29tbW9uX2ZsYWdzICYgflNPQ0FNX0RBVEFXSURUSF9NQVNLKSB8CisJCQlTT0NBTV9EQVRBV0lEVEhfMTA7CisJZWxzZSBpZiAoY29tbW9uX2ZsYWdzICYgU09DQU1fREFUQVdJRFRIXzgpCisJCWNvbW1vbl9mbGFncyA9IChjb21tb25fZmxhZ3MgJiB+U09DQU1fREFUQVdJRFRIX01BU0spIHwKKwkJCVNPQ0FNX0RBVEFXSURUSF84OworCWVsc2UKKwkJY29tbW9uX2ZsYWdzID0gKGNvbW1vbl9mbGFncyAmIH5TT0NBTV9EQVRBV0lEVEhfTUFTSykgfAorCQkJU09DQU1fREFUQVdJRFRIXzQ7CisKKwlyZXQgPSBpY2QtPm9wcy0+c2V0X2J1c19wYXJhbShpY2QsIGNvbW1vbl9mbGFncyk7CisJaWYgKHJldCA8IDApCisJCXJldHVybiByZXQ7CisKKwkvKgorCSAqIFNvIGZhciBvbmx5IGdhdGVkIGNsb2NrIG1vZGUgaXMgc3VwcG9ydGVkLiBBZGQgYSBsaW5lCisJICoJKDMgPDwgQ1NJX1NFTlNfQ09ORl9TRU5TX1BSVENMX1NISUZUKSB8CisJICogYmVsb3cgYW5kIHNlbGVjdCB0aGUgcmVxdWlyZWQgbW9kZSB3aGVuIHN1cHBvcnRpbmcgb3RoZXIKKwkgKiBzeW5jaHJvbmlzYXRpb24gcHJvdG9jb2xzLgorCSAqLworCXNlbnNfY29uZiA9IGNzaV9yZWdfcmVhZChteDNfY2FtLCBDU0lfU0VOU19DT05GKSAmCisJCX4oKDEgPDwgQ1NJX1NFTlNfQ09ORl9WU1lOQ19QT0xfU0hJRlQpIHwKKwkJICAoMSA8PCBDU0lfU0VOU19DT05GX0hTWU5DX1BPTF9TSElGVCkgfAorCQkgICgxIDw8IENTSV9TRU5TX0NPTkZfREFUQV9QT0xfU0hJRlQpIHwKKwkJICAoMSA8PCBDU0lfU0VOU19DT05GX1BJWF9DTEtfUE9MX1NISUZUKSB8CisJCSAgKDMgPDwgQ1NJX1NFTlNfQ09ORl9EQVRBX0ZNVF9TSElGVCkgfAorCQkgICgzIDw8IENTSV9TRU5TX0NPTkZfREFUQV9XSURUSF9TSElGVCkpOworCisJLyogVE9ETzogU3VwcG9ydCBSR0IgYW5kIFlVViBmb3JtYXRzICovCisKKwkvKiBUaGlzIGhhcyBiZWVuIHNldCBpbiBteDNfY2FtZXJhX2FjdGl2YXRlKCksIGJ1dCB3ZSBjbGVhciBpdCBhYm92ZSAqLworCXNlbnNfY29uZiB8PSBDU0lfU0VOU19DT05GX0RBVEFfRk1UX0JBWUVSOworCisJaWYgKGNvbW1vbl9mbGFncyAmIFNPQ0FNX1BDTEtfU0FNUExFX0ZBTExJTkcpCisJCXNlbnNfY29uZiB8PSAxIDw8IENTSV9TRU5TX0NPTkZfUElYX0NMS19QT0xfU0hJRlQ7CisJaWYgKGNvbW1vbl9mbGFncyAmIFNPQ0FNX0hTWU5DX0FDVElWRV9MT1cpCisJCXNlbnNfY29uZiB8PSAxIDw8IENTSV9TRU5TX0NPTkZfSFNZTkNfUE9MX1NISUZUOworCWlmIChjb21tb25fZmxhZ3MgJiBTT0NBTV9WU1lOQ19BQ1RJVkVfTE9XKQorCQlzZW5zX2NvbmYgfD0gMSA8PCBDU0lfU0VOU19DT05GX1ZTWU5DX1BPTF9TSElGVDsKKwlpZiAoY29tbW9uX2ZsYWdzICYgU09DQU1fREFUQV9BQ1RJVkVfTE9XKQorCQlzZW5zX2NvbmYgfD0gMSA8PCBDU0lfU0VOU19DT05GX0RBVEFfUE9MX1NISUZUOworCisJLyogSnVzdCBkbyB3aGF0IHdlJ3JlIGFza2VkIHRvIGRvICovCisJc3dpdGNoICh4bGF0ZS0+aG9zdF9mbXQtPmRlcHRoKSB7CisJY2FzZSA0OgorCQlkdyA9IDAgPDwgQ1NJX1NFTlNfQ09ORl9EQVRBX1dJRFRIX1NISUZUOworCQlicmVhazsKKwljYXNlIDg6CisJCWR3ID0gMSA8PCBDU0lfU0VOU19DT05GX0RBVEFfV0lEVEhfU0hJRlQ7CisJCWJyZWFrOworCWNhc2UgMTA6CisJCWR3ID0gMiA8PCBDU0lfU0VOU19DT05GX0RBVEFfV0lEVEhfU0hJRlQ7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qCisJCSAqIEFjdHVhbGx5IGl0IGNhbiBvbmx5IGJlIDE1IG5vdywgZGVmYXVsdCBpcyBqdXN0IHRvIHNpbGVuY2UKKwkJICogY29tcGlsZXIgd2FybmluZ3MKKwkJICovCisJY2FzZSAxNToKKwkJZHcgPSAzIDw8IENTSV9TRU5TX0NPTkZfREFUQV9XSURUSF9TSElGVDsKKwl9CisKKwljc2lfcmVnX3dyaXRlKG14M19jYW0sIHNlbnNfY29uZiB8IGR3LCBDU0lfU0VOU19DT05GKTsKKworCWRldl9kYmcoJmljaS0+ZGV2LCAiU2V0IFNFTlNfQ09ORiB0byAleFxuIiwgc2Vuc19jb25mIHwgZHcpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0X29wcyBteDNfc29jX2NhbWVyYV9ob3N0X29wcyA9IHsKKwkub3duZXIJCT0gVEhJU19NT0RVTEUsCisJLmFkZAkJPSBteDNfY2FtZXJhX2FkZF9kZXZpY2UsCisJLnJlbW92ZQkJPSBteDNfY2FtZXJhX3JlbW92ZV9kZXZpY2UsCisjaWZkZWYgQ09ORklHX1BNCisJLnN1c3BlbmQJPSBteDNfY2FtZXJhX3N1c3BlbmQsCisJLnJlc3VtZQkJPSBteDNfY2FtZXJhX3Jlc3VtZSwKKyNlbmRpZgorCS5zZXRfY3JvcAk9IG14M19jYW1lcmFfc2V0X2Nyb3AsCisJLnNldF9mbXQJPSBteDNfY2FtZXJhX3NldF9mbXQsCisJLnRyeV9mbXQJPSBteDNfY2FtZXJhX3RyeV9mbXQsCisJLmdldF9mb3JtYXRzCT0gbXgzX2NhbWVyYV9nZXRfZm9ybWF0cywKKwkuaW5pdF92aWRlb2J1Zgk9IG14M19jYW1lcmFfaW5pdF92aWRlb2J1ZiwKKwkucmVxYnVmcwk9IG14M19jYW1lcmFfcmVxYnVmcywKKwkucG9sbAkJPSBteDNfY2FtZXJhX3BvbGwsCisJLnF1ZXJ5Y2FwCT0gbXgzX2NhbWVyYV9xdWVyeWNhcCwKKwkuc2V0X2J1c19wYXJhbQk9IG14M19jYW1lcmFfc2V0X2J1c19wYXJhbSwKK307CisKK3N0YXRpYyBpbnQgbXgzX2NhbWVyYV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQoreworCXN0cnVjdCBteDNfY2FtZXJhX2RldiAqbXgzX2NhbTsKKwlzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKKwl2b2lkIF9faW9tZW0gKmJhc2U7CisJaW50IGVyciA9IDA7CisJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqc29jX2hvc3Q7CisKKwlyZXMgPSBwbGF0Zm9ybV9nZXRfcmVzb3VyY2UocGRldiwgSU9SRVNPVVJDRV9NRU0sIDApOworCWlmICghcmVzKSB7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gZWdldHJlczsKKwl9CisKKwlteDNfY2FtID0gdm1hbGxvYyhzaXplb2YoKm14M19jYW0pKTsKKwlpZiAoIW14M19jYW0pIHsKKwkJZGV2X2VycigmcGRldi0+ZGV2LCAiQ291bGQgbm90IGFsbG9jYXRlIG14MyBjYW1lcmEgb2JqZWN0XG4iKTsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlYWxsb2M7CisJfQorCW1lbXNldChteDNfY2FtLCAwLCBzaXplb2YoKm14M19jYW0pKTsKKworCW14M19jYW0tPmNsayA9IGNsa19nZXQoJnBkZXYtPmRldiwgImNzaV9jbGsiKTsKKwlpZiAoSVNfRVJSKG14M19jYW0tPmNsaykpIHsKKwkJZXJyID0gUFRSX0VSUihteDNfY2FtLT5jbGspOworCQlnb3RvIGVjbGtnZXQ7CisJfQorCisJZGV2X3NldF9kcnZkYXRhKCZwZGV2LT5kZXYsIG14M19jYW0pOworCisJbXgzX2NhbS0+cGRhdGEgPSBwZGV2LT5kZXYucGxhdGZvcm1fZGF0YTsKKwlteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyA9IG14M19jYW0tPnBkYXRhLT5mbGFnczsKKwlpZiAoIShteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyAmIChNWDNfQ0FNRVJBX0RBVEFXSURUSF80IHwKKwkJCU1YM19DQU1FUkFfREFUQVdJRFRIXzggfCBNWDNfQ0FNRVJBX0RBVEFXSURUSF8xMCB8CisJCQlNWDNfQ0FNRVJBX0RBVEFXSURUSF8xNSkpKSB7CisJCS8qIFBsYXRmb3JtIGhhc24ndCBzZXQgYXZhaWxhYmxlIGRhdGEgd2lkdGhzLiBUaGlzIGlzIGJhZC4KKwkJICogV2FybiBhbmQgdXNlIGEgZGVmYXVsdC4gKi8KKwkJZGV2X3dhcm4oJnBkZXYtPmRldiwgIldBUk5JTkchIFBsYXRmb3JtIGhhc24ndCBzZXQgYXZhaWxhYmxlICIKKwkJCSAiZGF0YSB3aWR0aHMsIHVzaW5nIGRlZmF1bHQgOCBiaXRcbiIpOworCQlteDNfY2FtLT5wbGF0Zm9ybV9mbGFncyB8PSBNWDNfQ0FNRVJBX0RBVEFXSURUSF84OworCX0KKworCW14M19jYW0tPm1jbGsgPSBteDNfY2FtLT5wZGF0YS0+bWNsa18xMGtoeiAqIDEwMDAwOworCWlmICghbXgzX2NhbS0+bWNsaykgeworCQlkZXZfd2FybigmcGRldi0+ZGV2LAorCQkJICJtY2xrXzEwa2h6ID09IDAhIFBsZWFzZSwgZml4IHlvdXIgcGxhdGZvcm0gZGF0YS4gIgorCQkJICJVc2luZyBkZWZhdWx0IDIwTUh6XG4iKTsKKwkJbXgzX2NhbS0+bWNsayA9IDIwMDAwMDAwOworCX0KKworCS8qIGxpc3Qgb2YgdmlkZW8tYnVmZmVycyAqLworCUlOSVRfTElTVF9IRUFEKCZteDNfY2FtLT5jYXB0dXJlKTsKKwlzcGluX2xvY2tfaW5pdCgmbXgzX2NhbS0+bG9jayk7CisKKwliYXNlID0gaW9yZW1hcChyZXMtPnN0YXJ0LCByZXMtPmVuZCAtIHJlcy0+c3RhcnQgKyAxKTsKKwlpZiAoIWJhc2UpIHsKKwkJZXJyID0gLUVOT01FTTsKKwkJZ290byBlaW9yZW1hcDsKKwl9CisKKwlteDNfY2FtLT5iYXNlCT0gYmFzZTsKKwlteDNfY2FtLT5kZXYJPSAmcGRldi0+ZGV2OworCisJc29jX2hvc3QJCT0gJm14M19jYW0tPnNvY19ob3N0OworCXNvY19ob3N0LT5kcnZfbmFtZQk9IE1YM19DQU1fRFJWX05BTUU7CisJc29jX2hvc3QtPm9wcwkJPSAmbXgzX3NvY19jYW1lcmFfaG9zdF9vcHM7CisJc29jX2hvc3QtPnByaXYJCT0gbXgzX2NhbTsKKwlzb2NfaG9zdC0+ZGV2LnBhcmVudAk9ICZwZGV2LT5kZXY7CisJc29jX2hvc3QtPm5yCQk9IHBkZXYtPmlkOworCWVyciA9IHNvY19jYW1lcmFfaG9zdF9yZWdpc3Rlcihzb2NfaG9zdCk7CisJaWYgKGVycikKKwkJZ290byBlY2FtaG9zdHJlZzsKKworCS8qIElETUFDIGludGVyZmFjZSAqLworCWRtYWVuZ2luZV9nZXQoKTsKKworCXJldHVybiAwOworCitlY2FtaG9zdHJlZzoKKwlpb3VubWFwKGJhc2UpOworZWlvcmVtYXA6CisJY2xrX3B1dChteDNfY2FtLT5jbGspOworZWNsa2dldDoKKwl2ZnJlZShteDNfY2FtKTsKK2VhbGxvYzoKK2VnZXRyZXM6CisJcmV0dXJuIGVycjsKK30KKworc3RhdGljIGludCBfX2RldmV4aXQgbXgzX2NhbWVyYV9yZW1vdmUoc3RydWN0IHBsYXRmb3JtX2RldmljZSAqcGRldikKK3sKKwlzdHJ1Y3QgbXgzX2NhbWVyYV9kZXYgKm14M19jYW0gPSBwbGF0Zm9ybV9nZXRfZHJ2ZGF0YShwZGV2KTsKKworCWNsa19wdXQobXgzX2NhbS0+Y2xrKTsKKworCXNvY19jYW1lcmFfaG9zdF91bnJlZ2lzdGVyKCZteDNfY2FtLT5zb2NfaG9zdCk7CisKKwlpb3VubWFwKG14M19jYW0tPmJhc2UpOworCisJLyoKKwkgKiBUaGUgY2hhbm5lbCBoYXMgZWl0aGVyIG5vdCBiZWVuIGFsbG9jYXRlZCwKKwkgKiBvciBzaG91bGQgaGF2ZSBiZWVuIHJlbGVhc2VkCisJICovCisJaWYgKFdBUk5fT04obXgzX2NhbS0+aWRtYWNfY2hhbm5lbFswXSkpCisJCWRtYV9yZWxlYXNlX2NoYW5uZWwoJm14M19jYW0tPmlkbWFjX2NoYW5uZWxbMF0tPmRtYV9jaGFuKTsKKworCXZmcmVlKG14M19jYW0pOworCisJZG1hZW5naW5lX3B1dCgpOworCisJZGV2X2luZm8oJnBkZXYtPmRldiwgImkuTVgzeCBDYW1lcmEgZHJpdmVyIHVubG9hZGVkXG4iKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBteDNfY2FtZXJhX2RyaXZlciA9IHsKKwkuZHJpdmVyIAk9IHsKKwkJLm5hbWUJPSBNWDNfQ0FNX0RSVl9OQU1FLAorCX0sCisJLnByb2JlCQk9IG14M19jYW1lcmFfcHJvYmUsCisJLnJlbW92ZQkJPSBfX2V4aXRfcChteDNfY2FtZXJhX3JlbW92ZSksCit9OworCisKK3N0YXRpYyBpbnQgX19kZXZpbml0IG14M19jYW1lcmFfaW5pdCh2b2lkKQoreworCXJldHVybiBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJm14M19jYW1lcmFfZHJpdmVyKTsKK30KKworc3RhdGljIHZvaWQgX19leGl0IG14M19jYW1lcmFfZXhpdCh2b2lkKQoreworCXBsYXRmb3JtX2RyaXZlcl91bnJlZ2lzdGVyKCZteDNfY2FtZXJhX2RyaXZlcik7Cit9CisKK21vZHVsZV9pbml0KG14M19jYW1lcmFfaW5pdCk7Cittb2R1bGVfZXhpdChteDNfY2FtZXJhX2V4aXQpOworCitNT0RVTEVfREVTQ1JJUFRJT04oImkuTVgzeCBTb0MgQ2FtZXJhIEhvc3QgZHJpdmVyIik7CitNT0RVTEVfQVVUSE9SKCJHdWVubmFkaSBMaWFraG92ZXRza2kgPGxnQGRlbnguZGU+Iik7CitNT0RVTEVfTElDRU5TRSgiR1BMIHYyIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL214Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9teGIuYwppbmRleCBlM2NiZTE0Li44NGFlYzYyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL214Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vbXhiLmMKQEAgLTI1LDE2ICsyNSwyMCBAQAogCiAjaW5jbHVkZSA8bWVkaWEvc2FhNzE0Nl92di5oPgogI2luY2x1ZGUgPG1lZGlhL3R1bmVyLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvc2FhNzExNS5oPgogCiAjaW5jbHVkZSAibXhiLmgiCiAjaW5jbHVkZSAidGVhNjQxNWMuaCIKICNpbmNsdWRlICJ0ZWE2NDIwLmgiCi0jaW5jbHVkZSAidGRhOTg0MC5oIgogCi0jZGVmaW5lIEkyQ19TQUE3MTExIDB4MjQKKyNkZWZpbmUJSTJDX1NBQTUyNDZBICAweDExCisjZGVmaW5lIEkyQ19TQUE3MTExQSAgMHgyNAorI2RlZmluZQlJMkNfVERBOTg0MCAgIDB4NDIKKyNkZWZpbmUJSTJDX1RFQTY0MTVDICAweDQzCisjZGVmaW5lCUkyQ19URUE2NDIwXzEgMHg0YworI2RlZmluZQlJMkNfVEVBNjQyMF8yIDB4NGQKKyNkZWZpbmUJSTJDX1RVTkVSICAgICAweDYwCiAKICNkZWZpbmUgTVhCX0JPQVJEX0NBTl9ET19WQkkoZGV2KSAgIChkZXYtPnJldmlzaW9uICE9IDApCiAKQEAgLTc5LDU3ICs4MywzNSBAQAogc3RhdGljIGludCB2aWRlb19hdWRpb19jb25uZWN0W01YQl9JTlBVVFNdID0KIAl7IDAsIDEsIDMsIDMgfTsKIAotLyogdGhlc2UgYXJlIHRoZSBuZWNlc3NhcnkgaW5wdXQtb3V0cHV0LXBpbnMgZm9yIGJyaW5naW5nIG9uZSBhdWRpbyBzb3VyY2UKLShzZWUgYWJvdmUpIHRvIHRoZSBDRC1vdXRwdXQgKi8KLXN0YXRpYyBzdHJ1Y3QgdGVhNjQyMF9tdWx0aXBsZXggVEVBNjQyMF9jZFtNWEJfQVVESU9TKzFdWzJdID0KLQkJewotCQl7ezEsMSwwfSx7MSwxLDB9fSwJLyogVHVuZXIgKi8KLQkJe3s1LDEsMH0sezYsMSwwfX0sCS8qIEFVWCAxICovCi0JCXt7NCwxLDB9LHs2LDEsMH19LAkvKiBBVVggMiAqLwotCQl7ezMsMSwwfSx7NiwxLDB9fSwJLyogQVVYIDMgKi8KLQkJe3sxLDEsMH0sezMsMSwwfX0sCS8qIFJhZGlvICovCi0JCXt7MSwxLDB9LHsyLDEsMH19LAkvKiBDRC1Sb20gKi8KLQkJe3s2LDEsMH0sezYsMSwwfX0JLyogTXV0ZSAqLwotCQl9OworLyogVGhlc2UgYXJlIHRoZSBuZWNlc3NhcnkgaW5wdXQtb3V0cHV0LXBpbnMgZm9yIGJyaW5naW5nIG9uZSBhdWRpbyBzb3VyY2UKKyAgIChzZWUgYWJvdmUpIHRvIHRoZSBDRC1vdXRwdXQuIE5vdGUgdGhhdCBnYWluIGlzIHNldCB0byAwIGluIHRoaXMgdGFibGUuICovCitzdGF0aWMgc3RydWN0IHY0bDJfcm91dGluZyBURUE2NDIwX2NkW01YQl9BVURJT1MgKyAxXVsyXSA9IHsKKwl7IHsgMSwgMSB9LCB7IDEsIDEgfSB9LAkvKiBUdW5lciAqLworCXsgeyA1LCAxIH0sIHsgNiwgMSB9IH0sCS8qIEFVWCAxICovCisJeyB7IDQsIDEgfSwgeyA2LCAxIH0gfSwJLyogQVVYIDIgKi8KKwl7IHsgMywgMSB9LCB7IDYsIDEgfSB9LAkvKiBBVVggMyAqLworCXsgeyAxLCAxIH0sIHsgMywgMSB9IH0sCS8qIFJhZGlvICovCisJeyB7IDEsIDEgfSwgeyAyLCAxIH0gfSwJLyogQ0QtUm9tICovCisJeyB7IDYsIDEgfSwgeyA2LCAxIH0gfQkvKiBNdXRlICovCit9OwogCi0vKiB0aGVzZSBhcmUgdGhlIG5lY2Vzc2FyeSBpbnB1dC1vdXRwdXQtcGlucyBmb3IgYnJpbmdpbmcgb25lIGF1ZGlvIHNvdXJjZQotKHNlZSBhYm92ZSkgdG8gdGhlIGxpbmUtb3V0cHV0ICovCi1zdGF0aWMgc3RydWN0IHRlYTY0MjBfbXVsdGlwbGV4IFRFQTY0MjBfbGluZVtNWEJfQVVESU9TKzFdWzJdID0KLQkJewotCQl7ezIsMywwfSx7MSwyLDB9fSwKLQkJe3s1LDMsMH0sezYsMiwwfX0sCi0JCXt7NCwzLDB9LHs2LDIsMH19LAotCQl7ezMsMywwfSx7NiwyLDB9fSwKLQkJe3syLDMsMH0sezMsMiwwfX0sCi0JCXt7MiwzLDB9LHsyLDIsMH19LAotCQl7ezYsMywwfSx7NiwyLDB9fQkvKiBNdXRlICovCi0JCX07CisvKiBUaGVzZSBhcmUgdGhlIG5lY2Vzc2FyeSBpbnB1dC1vdXRwdXQtcGlucyBmb3IgYnJpbmdpbmcgb25lIGF1ZGlvIHNvdXJjZQorICAgKHNlZSBhYm92ZSkgdG8gdGhlIGxpbmUtb3V0cHV0LiBOb3RlIHRoYXQgZ2FpbiBpcyBzZXQgdG8gMCBpbiB0aGlzIHRhYmxlLiAqLworc3RhdGljIHN0cnVjdCB2NGwyX3JvdXRpbmcgVEVBNjQyMF9saW5lW01YQl9BVURJT1MgKyAxXVsyXSA9IHsKKwl7IHsgMiwgMyB9LCB7IDEsIDIgfSB9LAorCXsgeyA1LCAzIH0sIHsgNiwgMiB9IH0sCisJeyB7IDQsIDMgfSwgeyA2LCAyIH0gfSwKKwl7IHsgMywgMyB9LCB7IDYsIDIgfSB9LAorCXsgeyAyLCAzIH0sIHsgMywgMiB9IH0sCisJeyB7IDIsIDMgfSwgeyAyLCAyIH0gfSwKKwl7IHsgNiwgMyB9LCB7IDYsIDIgfSB9CS8qIE11dGUgKi8KK307CiAKICNkZWZpbmUgTUFYQ09OVFJPTFMJMQogc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBteGJfY29udHJvbHNbXSA9IHsKIAl7IFY0TDJfQ0lEX0FVRElPX01VVEUsIFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sICJNdXRlIiwgMCwgMSwgMSwgMCwgMCB9LAogfTsKIAotc3RhdGljIHN0cnVjdCBzYWE3MTQ2X2V4dGVuc2lvbl9pb2N0bHMgaW9jdGxzW10gPSB7Ci0JeyBWSURJT0NfRU5VTUlOUFVULCAJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19HX0lOUFVULAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX1NfSU5QVVQsCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfUVVFUllDVFJMLCAJU0FBNzE0Nl9CRUZPUkUgfSwKLQl7IFZJRElPQ19HX0NUUkwsCVNBQTcxNDZfQkVGT1JFIH0sCi0JeyBWSURJT0NfU19DVFJMLAlTQUE3MTQ2X0JFRk9SRSB9LAotCXsgVklESU9DX0dfVFVORVIsIAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX1NfVFVORVIsIAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX0dfRlJFUVVFTkNZLAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgVklESU9DX1NfRlJFUVVFTkNZLCAJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19HX0FVRElPLCAJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19TX0FVRElPLCAJU0FBNzE0Nl9FWENMVVNJVkUgfSwKLQl7IFZJRElPQ19EQkdfR19SRUdJU1RFUiwgCVNBQTcxNDZfRVhDTFVTSVZFIH0sCi0JeyBWSURJT0NfREJHX1NfUkVHSVNURVIsIAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAotCXsgTVhCX1NfQVVESU9fQ0QsIAlTQUE3MTQ2X0VYQ0xVU0lWRSB9LAkvKiBjdXN0b20gY29udHJvbCAqLwotCXsgTVhCX1NfQVVESU9fTElORSwgCVNBQTcxNDZfRVhDTFVTSVZFIH0sCS8qIGN1c3RvbSBjb250cm9sICovCi0JeyAwLAkJCTAgfQotfTsKLQogc3RydWN0IG14YgogewogCXN0cnVjdCB2aWRlb19kZXZpY2UJKnZpZGVvX2RldjsKQEAgLTEzNywxMiArMTE5LDEyIEBACiAKIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIJaTJjX2FkYXB0ZXI7CiAKLQlzdHJ1Y3QgaTJjX2NsaWVudAkqc2FhNzExMWE7Ci0Jc3RydWN0IGkyY19jbGllbnQJKnRkYTk4NDA7Ci0Jc3RydWN0IGkyY19jbGllbnQJKnRlYTY0MTVjOwotCXN0cnVjdCBpMmNfY2xpZW50CSp0dW5lcjsKLQlzdHJ1Y3QgaTJjX2NsaWVudAkqdGVhNjQyMF8xOwotCXN0cnVjdCBpMmNfY2xpZW50CSp0ZWE2NDIwXzI7CisJc3RydWN0IHY0bDJfc3ViZGV2CSpzYWE3MTExYTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYJKnRkYTk4NDA7CisJc3RydWN0IHY0bDJfc3ViZGV2CSp0ZWE2NDE1YzsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYJKnR1bmVyOworCXN0cnVjdCB2NGwyX3N1YmRldgkqdGVhNjQyMF8xOworCXN0cnVjdCB2NGwyX3N1YmRldgkqdGVhNjQyMF8yOwogCiAJaW50CWN1cl9tb2RlOwkvKiBjdXJyZW50IGF1ZGlvIG1vZGUgKG1vbm8sIHN0ZXJlbywgLi4uKSAqLwogCWludAljdXJfaW5wdXQ7CS8qIGN1cnJlbnQgaW5wdXQgKi8KQEAgLTE1MCw4NCArMTMyLDUxIEBACiAJc3RydWN0IHY0bDJfZnJlcXVlbmN5CWN1cl9mcmVxOwkvKiBjdXJyZW50IGZyZXF1ZW5jeSB0aGUgdHVuZXIgaXMgdHVuZWQgdG8gKi8KIH07CiAKKyNkZWZpbmUgc2FhNzExMWFfY2FsbChteGIsIG8sIGYsIGFyZ3MuLi4pIFwKKwl2NGwyX3N1YmRldl9jYWxsKG14Yi0+c2FhNzExMWEsIG8sIGYsICMjYXJncykKKyNkZWZpbmUgdGVhNjQyMF8xX2NhbGwobXhiLCBvLCBmLCBhcmdzLi4uKSBcCisJdjRsMl9zdWJkZXZfY2FsbChteGItPnRlYTY0MjBfMSwgbywgZiwgIyNhcmdzKQorI2RlZmluZSB0ZWE2NDIwXzJfY2FsbChteGIsIG8sIGYsIGFyZ3MuLi4pIFwKKwl2NGwyX3N1YmRldl9jYWxsKG14Yi0+dGVhNjQyMF8yLCBvLCBmLCAjI2FyZ3MpCisjZGVmaW5lIHRkYTk4NDBfY2FsbChteGIsIG8sIGYsIGFyZ3MuLi4pIFwKKwl2NGwyX3N1YmRldl9jYWxsKG14Yi0+dGRhOTg0MCwgbywgZiwgIyNhcmdzKQorI2RlZmluZSB0ZWE2NDE1Y19jYWxsKG14YiwgbywgZiwgYXJncy4uLikgXAorCXY0bDJfc3ViZGV2X2NhbGwobXhiLT50ZWE2NDE1YywgbywgZiwgIyNhcmdzKQorI2RlZmluZSB0dW5lcl9jYWxsKG14YiwgbywgZiwgYXJncy4uLikgXAorCXY0bDJfc3ViZGV2X2NhbGwobXhiLT50dW5lciwgbywgZiwgIyNhcmdzKQorI2RlZmluZSBjYWxsX2FsbChkZXYsIG8sIGYsIGFyZ3MuLi4pIFwKKwl2NGwyX2RldmljZV9jYWxsX3VudGlsX2VycigmZGV2LT52NGwyX2RldiwgMCwgbywgZiwgIyNhcmdzKQorCiBzdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uIGV4dGVuc2lvbjsKIAotc3RhdGljIGludCBteGJfY2hlY2tfY2xpZW50cyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEpCitzdGF0aWMgaW50IG14Yl9wcm9iZShzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldikKIHsKLQlzdHJ1Y3QgbXhiICpteGIgPSBkYXRhOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSBpMmNfdmVyaWZ5X2NsaWVudChkZXYpOwotCi0JaWYgKCFjbGllbnQpCi0JCXJldHVybiAwOwotCi0JaWYgKEkyQ19BRERSX1RFQTY0MjBfMSA9PSBjbGllbnQtPmFkZHIpCi0JCW14Yi0+dGVhNjQyMF8xID0gY2xpZW50OwotCWlmIChJMkNfQUREUl9URUE2NDIwXzIgPT0gY2xpZW50LT5hZGRyKQotCQlteGItPnRlYTY0MjBfMiA9IGNsaWVudDsKLQlpZiAoSTJDX1RFQTY0MTVDXzIgPT0gY2xpZW50LT5hZGRyKQotCQlteGItPnRlYTY0MTVjID0gY2xpZW50OwotCWlmIChJMkNfQUREUl9UREE5ODQwID09IGNsaWVudC0+YWRkcikKLQkJbXhiLT50ZGE5ODQwID0gY2xpZW50OwotCWlmIChJMkNfU0FBNzExMSA9PSBjbGllbnQtPmFkZHIpCi0JCW14Yi0+c2FhNzExMWEgPSBjbGllbnQ7Ci0JaWYgKDB4NjAgPT0gY2xpZW50LT5hZGRyKQotCQlteGItPnR1bmVyID0gY2xpZW50OwotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgbXhiX3Byb2JlKHN0cnVjdCBzYWE3MTQ2X2RldiogZGV2KQotewotCXN0cnVjdCBteGIqIG14YiA9IE5VTEw7Ci0JaW50IHJlc3VsdDsKLQotCXJlc3VsdCA9IHJlcXVlc3RfbW9kdWxlKCJzYWE3MTE1Iik7Ci0JaWYgKHJlc3VsdCA8IDApIHsKLQkJcHJpbnRrKCJteGI6IHNhYTcxMTEgaTJjIG1vZHVsZSBub3QgYXZhaWxhYmxlLlxuIik7Ci0JCXJldHVybiAtRU5PREVWOwotCX0KLQlyZXN1bHQgPSByZXF1ZXN0X21vZHVsZSgidGVhNjQyMCIpOwotCWlmIChyZXN1bHQgPCAwKSB7Ci0JCXByaW50aygibXhiOiB0ZWE2NDIwIGkyYyBtb2R1bGUgbm90IGF2YWlsYWJsZS5cbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JcmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUoInRlYTY0MTVjIik7Ci0JaWYgKHJlc3VsdCA8IDApIHsKLQkJcHJpbnRrKCJteGI6IHRlYTY0MTVjIGkyYyBtb2R1bGUgbm90IGF2YWlsYWJsZS5cbiIpOwotCQlyZXR1cm4gLUVOT0RFVjsKLQl9Ci0JcmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUoInRkYTk4NDAiKTsKLQlpZiAocmVzdWx0IDwgMCkgewotCQlwcmludGsoIm14YjogdGRhOTg0MCBpMmMgbW9kdWxlIG5vdCBhdmFpbGFibGUuXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCXJlc3VsdCA9IHJlcXVlc3RfbW9kdWxlKCJ0dW5lciIpOwotCWlmIChyZXN1bHQgPCAwKSB7Ci0JCXByaW50aygibXhiOiB0dW5lciBpMmMgbW9kdWxlIG5vdCBhdmFpbGFibGUuXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQorCXN0cnVjdCBteGIgKm14YiA9IE5VTEw7CiAKIAlteGIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgbXhiKSwgR0ZQX0tFUk5FTCk7Ci0JaWYoIE5VTEwgPT0gbXhiICkgeworCWlmIChteGIgPT0gTlVMTCkgewogCQlERUJfRCgoIm5vdCBlbm91Z2gga2VybmVsIG1lbW9yeS5cbiIpKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCi0JbXhiLT5pMmNfYWRhcHRlciA9IChzdHJ1Y3QgaTJjX2FkYXB0ZXIpIHsKLQkJLmNsYXNzID0gSTJDX0NMQVNTX1RWX0FOQUxPRywKLQl9OwotCiAJc25wcmludGYobXhiLT5pMmNfYWRhcHRlci5uYW1lLCBzaXplb2YobXhiLT5pMmNfYWRhcHRlci5uYW1lKSwgIm14YiVkIiwgbXhiX251bSk7CiAKIAlzYWE3MTQ2X2kyY19hZGFwdGVyX3ByZXBhcmUoZGV2LCAmbXhiLT5pMmNfYWRhcHRlciwgU0FBNzE0Nl9JMkNfQlVTX0JJVF9SQVRFXzQ4MCk7Ci0JaWYoaTJjX2FkZF9hZGFwdGVyKCZteGItPmkyY19hZGFwdGVyKSA8IDApIHsKKwlpZiAoaTJjX2FkZF9hZGFwdGVyKCZteGItPmkyY19hZGFwdGVyKSA8IDApIHsKIAkJREVCX1MoKCJjYW5ub3QgcmVnaXN0ZXIgaTJjLWRldmljZS4gc2tpcHBpbmcuXG4iKSk7CiAJCWtmcmVlKG14Yik7CiAJCXJldHVybiAtRUZBVUxUOwogCX0KIAotCS8qIGxvb3AgdGhyb3VnaCBhbGwgaTJjLWRldmljZXMgb24gdGhlIGJ1cyBhbmQgbG9vayB3aG8gaXMgdGhlcmUgKi8KLQlkZXZpY2VfZm9yX2VhY2hfY2hpbGQoJm14Yi0+aTJjX2FkYXB0ZXIuZGV2LCBteGIsIG14Yl9jaGVja19jbGllbnRzKTsKKwlteGItPnNhYTcxMTFhID0gdjRsMl9pMmNfbmV3X3N1YmRldigmbXhiLT5pMmNfYWRhcHRlciwgInNhYTcxMTUiLCAic2FhNzExMSIsIEkyQ19TQUE3MTExQSk7CisJbXhiLT50ZWE2NDIwXzEgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZteGItPmkyY19hZGFwdGVyLCAidGVhNjQyMCIsICJ0ZWE2NDIwIiwgSTJDX1RFQTY0MjBfMSk7CisJbXhiLT50ZWE2NDIwXzIgPSB2NGwyX2kyY19uZXdfc3ViZGV2KCZteGItPmkyY19hZGFwdGVyLCAidGVhNjQyMCIsICJ0ZWE2NDIwIiwgSTJDX1RFQTY0MjBfMik7CisJbXhiLT50ZWE2NDE1YyA9IHY0bDJfaTJjX25ld19zdWJkZXYoJm14Yi0+aTJjX2FkYXB0ZXIsICJ0ZWE2NDE1YyIsICJ0ZWE2NDE1YyIsIEkyQ19URUE2NDE1Qyk7CisJbXhiLT50ZGE5ODQwID0gdjRsMl9pMmNfbmV3X3N1YmRldigmbXhiLT5pMmNfYWRhcHRlciwgInRkYTk4NDAiLCAidGRhOTg0MCIsIEkyQ19UREE5ODQwKTsKKwlteGItPnR1bmVyID0gdjRsMl9pMmNfbmV3X3N1YmRldigmbXhiLT5pMmNfYWRhcHRlciwgInR1bmVyIiwgInR1bmVyIiwgSTJDX1RVTkVSKTsKKwlpZiAodjRsMl9pMmNfbmV3X3N1YmRldigmbXhiLT5pMmNfYWRhcHRlciwgInNhYTUyNDZhIiwgInNhYTUyNDZhIiwgSTJDX1NBQTUyNDZBKSkgeworCQlwcmludGsoS0VSTl9JTkZPICJteGI6IGZvdW5kIHRlbGV0ZXh0IGRlY29kZXJcbiIpOworCX0KIAogCS8qIGNoZWNrIGlmIGFsbCBkZXZpY2VzIGFyZSBwcmVzZW50ICovCiAJaWYgKCFteGItPnRlYTY0MjBfMSB8fCAhbXhiLT50ZWE2NDIwXzIgfHwgIW14Yi0+dGVhNjQxNWMgfHwKQEAgLTMxNSw0NyArMjY0LDQ1IEBACiAJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKIAogCWludCBpID0gMCwgZXJyID0gMDsKLQlzdHJ1Y3QgdGVhNjQxNWNfbXVsdGlwbGV4IHZtOwogCiAJLyogc2VsZWN0IHZpZGVvIG1vZGUgaW4gc2FhNzExMWEgKi8KLQlteGItPnNhYTcxMTFhLT5kcml2ZXItPmNvbW1hbmQobXhiLT5zYWE3MTExYSwgVklESU9DX1NfU1RELCAmc3RkKTsKKwlzYWE3MTExYV9jYWxsKG14YiwgdHVuZXIsIHNfc3RkLCBzdGQpOwogCiAJLyogc2VsZWN0IHR1bmVyLW91dHB1dCBvbiBzYWE3MTExYSAqLwogCWkgPSAwOwogCXJvdXRlLmlucHV0ID0gU0FBNzExNV9DT01QT1NJVEUwOwogCXJvdXRlLm91dHB1dCA9IFNBQTcxMTFfRk1UX0NDSVIgfCBTQUE3MTExX1ZCSV9CWVBBU1M7Ci0JbXhiLT5zYWE3MTExYS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+c2FhNzExMWEsIFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HLCAmcm91dGUpOworCXNhYTcxMTFhX2NhbGwobXhiLCB2aWRlbywgc19yb3V0aW5nLCAmcm91dGUpOwogCiAJLyogc2VsZWN0IGEgdHVuZXIgdHlwZSAqLwogCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UVjsKIAl0dW5fc2V0dXAuYWRkciA9IEFERFJfVU5TRVQ7CiAJdHVuX3NldHVwLnR5cGUgPSBUVU5FUl9QSElMSVBTX1BBTDsKLQlteGItPnR1bmVyLT5kcml2ZXItPmNvbW1hbmQobXhiLT50dW5lciwgVFVORVJfU0VUX1RZUEVfQUREUiwgJnR1bl9zZXR1cCk7CisJdHVuZXJfY2FsbChteGIsIHR1bmVyLCBzX3R5cGVfYWRkciwgJnR1bl9zZXR1cCk7CiAJLyogdHVuZSBpbiBzb21lIGZyZXF1ZW5jeSBvbiB0dW5lciAqLwogCW14Yi0+Y3VyX2ZyZXEudHVuZXIgPSAwOwogCW14Yi0+Y3VyX2ZyZXEudHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOwogCW14Yi0+Y3VyX2ZyZXEuZnJlcXVlbmN5ID0gZnJlcTsKLQlteGItPnR1bmVyLT5kcml2ZXItPmNvbW1hbmQobXhiLT50dW5lciwgVklESU9DX1NfRlJFUVVFTkNZLAotCQkJCQkmbXhiLT5jdXJfZnJlcSk7CisJdHVuZXJfY2FsbChteGIsIHR1bmVyLCBzX2ZyZXF1ZW5jeSwgJm14Yi0+Y3VyX2ZyZXEpOwogCiAJLyogc2V0IGEgZGVmYXVsdCB2aWRlbyBzdGFuZGFyZCAqLwotCW14Yi0+dHVuZXItPmRyaXZlci0+Y29tbWFuZChteGItPnR1bmVyLCBWSURJT0NfU19TVEQsICZzdGQpOworCXR1bmVyX2NhbGwobXhiLCB0dW5lciwgc19zdGQsIHN0ZCk7CiAKIAkvKiBtdXRlIGF1ZGlvIG9uIHRlYTY0MjBzICovCi0JbXhiLT50ZWE2NDIwXzEtPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMSwgVEVBNjQyMF9TV0lUQ0gsICZURUE2NDIwX2xpbmVbNl1bMF0pOwotCW14Yi0+dGVhNjQyMF8yLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDIwXzIsIFRFQTY0MjBfU1dJVENILCAmVEVBNjQyMF9saW5lWzZdWzFdKTsKLQlteGItPnRlYTY0MjBfMS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8xLCBURUE2NDIwX1NXSVRDSCwgJlRFQTY0MjBfY2RbNl1bMF0pOwotCW14Yi0+dGVhNjQyMF8yLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDIwXzIsIFRFQTY0MjBfU1dJVENILCAmVEVBNjQyMF9jZFs2XVsxXSk7CisJdGVhNjQyMF8xX2NhbGwobXhiLCBhdWRpbywgc19yb3V0aW5nLCAmVEVBNjQyMF9saW5lWzZdWzBdKTsKKwl0ZWE2NDIwXzJfY2FsbChteGIsIGF1ZGlvLCBzX3JvdXRpbmcsICZURUE2NDIwX2xpbmVbNl1bMV0pOworCXRlYTY0MjBfMV9jYWxsKG14YiwgYXVkaW8sIHNfcm91dGluZywgJlRFQTY0MjBfbGluZVs2XVswXSk7CisJdGVhNjQyMF8yX2NhbGwobXhiLCBhdWRpbywgc19yb3V0aW5nLCAmVEVBNjQyMF9saW5lWzZdWzFdKTsKIAotCS8qIHN3aXRjaCB0byB0dW5lci1jaGFubmVsIG9uIHRlYTY0MTVjKi8KLQl2bS5vdXQgPSAxNzsKLQl2bS5pbiAgPSAzOwotCW14Yi0+dGVhNjQxNWMtPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MTVjLCBURUE2NDE1Q19TV0lUQ0gsICZ2bSk7CisJLyogc3dpdGNoIHRvIHR1bmVyLWNoYW5uZWwgb24gdGVhNjQxNWMgKi8KKwlyb3V0ZS5pbnB1dCA9IDM7CisJcm91dGUub3V0cHV0ID0gMTc7CisJdGVhNjQxNWNfY2FsbChteGIsIHZpZGVvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAKLQkvKiBzZWxlY3QgdHVuZXItb3V0cHV0IG9uIG11bHRpY2FibGUgb24gdGVhNjQxNWMqLwotCXZtLmluICA9IDM7Ci0Jdm0ub3V0ID0gMTM7Ci0JbXhiLT50ZWE2NDE1Yy0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQxNWMsIFRFQTY0MTVDX1NXSVRDSCwgJnZtKTsKKwkvKiBzZWxlY3QgdHVuZXItb3V0cHV0IG9uIG11bHRpY2FibGUgb24gdGVhNjQxNWMgKi8KKwlyb3V0ZS5pbnB1dCA9IDM7CisJcm91dGUub3V0cHV0ID0gMTM7CisJdGVhNjQxNWNfY2FsbChteGIsIHZpZGVvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAKIAkvKiB0aGUgcmVzdCBmb3IgbXhiICovCiAJbXhiLT5jdXJfaW5wdXQgPSAwOwpAQCAtNDI0LDYgKzM3MSwzNDMgQEAKIH0KICovCiAKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJaW50IGk7CisKKwlmb3IgKGkgPSBNQVhDT05UUk9MUyAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCWlmIChteGJfY29udHJvbHNbaV0uaWQgPT0gcWMtPmlkKSB7CisJCQkqcWMgPSBteGJfY29udHJvbHNbaV07CisJCQlERUJfRCgoIlZJRElPQ19RVUVSWUNUUkwgJWQuXG4iLCBxYy0+aWQpKTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiBkZXYtPmV4dF92dl9kYXRhLT5jb3JlX29wcy0+dmlkaW9jX3F1ZXJ5Y3RybChmaWxlLCBmaCwgcWMpOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9jb250cm9sICp2YykKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgbXhiICpteGIgPSAoc3RydWN0IG14YiAqKWRldi0+ZXh0X3ByaXY7CisJaW50IGk7CisKKwlmb3IgKGkgPSBNQVhDT05UUk9MUyAtIDE7IGkgPj0gMDsgaS0tKSB7CisJCWlmIChteGJfY29udHJvbHNbaV0uaWQgPT0gdmMtPmlkKQorCQkJYnJlYWs7CisJfQorCisJaWYgKGkgPCAwKQorCQlyZXR1cm4gZGV2LT5leHRfdnZfZGF0YS0+Y29yZV9vcHMtPnZpZGlvY19nX2N0cmwoZmlsZSwgZmgsIHZjKTsKKworCWlmICh2Yy0+aWQgPT0gVjRMMl9DSURfQVVESU9fTVVURSkgeworCQl2Yy0+dmFsdWUgPSBteGItPmN1cl9tdXRlOworCQlERUJfRCgoIlZJRElPQ19HX0NUUkwgVjRMMl9DSURfQVVESU9fTVVURTolZC5cbiIsIHZjLT52YWx1ZSkpOworCQlyZXR1cm4gMDsKKwl9CisKKwlERUJfRUUoKCJWSURJT0NfR19DVFJMIFY0TDJfQ0lEX0FVRElPX01VVEU6JWQuXG4iLCB2Yy0+dmFsdWUpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfY29udHJvbCAqdmMpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IG14YiAqbXhiID0gKHN0cnVjdCBteGIgKilkZXYtPmV4dF9wcml2OworCWludCBpID0gMDsKKworCWZvciAoaSA9IE1BWENPTlRST0xTIC0gMTsgaSA+PSAwOyBpLS0pIHsKKwkJaWYgKG14Yl9jb250cm9sc1tpXS5pZCA9PSB2Yy0+aWQpCisJCQlicmVhazsKKwl9CisKKwlpZiAoaSA8IDApCisJCXJldHVybiBkZXYtPmV4dF92dl9kYXRhLT5jb3JlX29wcy0+dmlkaW9jX3NfY3RybChmaWxlLCBmaCwgdmMpOworCisJaWYgKHZjLT5pZCA9PSBWNEwyX0NJRF9BVURJT19NVVRFKSB7CisJCW14Yi0+Y3VyX211dGUgPSB2Yy0+dmFsdWU7CisJCWlmICghdmMtPnZhbHVlKSB7CisJCQkvKiBzd2l0Y2ggdGhlIGF1ZGlvLXNvdXJjZSAqLworCQkJdGVhNjQyMF8xX2NhbGwobXhiLCBhdWRpbywgc19yb3V0aW5nLAorCQkJCQkmVEVBNjQyMF9saW5lW3ZpZGVvX2F1ZGlvX2Nvbm5lY3RbbXhiLT5jdXJfaW5wdXRdXVswXSk7CisJCQl0ZWE2NDIwXzJfY2FsbChteGIsIGF1ZGlvLCBzX3JvdXRpbmcsCisJCQkJCSZURUE2NDIwX2xpbmVbdmlkZW9fYXVkaW9fY29ubmVjdFtteGItPmN1cl9pbnB1dF1dWzFdKTsKKwkJfSBlbHNlIHsKKwkJCXRlYTY0MjBfMV9jYWxsKG14YiwgYXVkaW8sIHNfcm91dGluZywKKwkJCQkJJlRFQTY0MjBfbGluZVs2XVswXSk7CisJCQl0ZWE2NDIwXzJfY2FsbChteGIsIGF1ZGlvLCBzX3JvdXRpbmcsCisJCQkJCSZURUE2NDIwX2xpbmVbNl1bMV0pOworCQl9CisJCURFQl9FRSgoIlZJRElPQ19TX0NUUkwsIFY0TDJfQ0lEX0FVRElPX01VVEU6ICVkLlxuIiwgdmMtPnZhbHVlKSk7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfaW5wdXQgKmkpCit7CisJREVCX0VFKCgiVklESU9DX0VOVU1JTlBVVCAlZC5cbiIsIGktPmluZGV4KSk7CisJaWYgKGktPmluZGV4IDwgMCB8fCBpLT5pbmRleCA+PSBNWEJfSU5QVVRTKQorCQlyZXR1cm4gLUVJTlZBTDsKKwltZW1jcHkoaSwgJm14Yl9pbnB1dHNbaS0+aW5kZXhdLCBzaXplb2Yoc3RydWN0IHY0bDJfaW5wdXQpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2NfZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHVuc2lnbmVkIGludCAqaSkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgbXhiICpteGIgPSAoc3RydWN0IG14YiAqKWRldi0+ZXh0X3ByaXY7CisJKmkgPSBteGItPmN1cl9pbnB1dDsKKworCURFQl9FRSgoIlZJRElPQ19HX0lOUFVUICVkLlxuIiwgKmkpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHVuc2lnbmVkIGludCBpbnB1dCkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgbXhiICpteGIgPSAoc3RydWN0IG14YiAqKWRldi0+ZXh0X3ByaXY7CisJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKKwlpbnQgaSA9IDA7CisKKwlERUJfRUUoKCJWSURJT0NfU19JTlBVVCAlZC5cbiIsIGlucHV0KSk7CisKKwlpZiAoaW5wdXQgPCAwIHx8IGlucHV0ID49IE1YQl9JTlBVVFMpCisJCXJldHVybiAtRUlOVkFMOworCisJbXhiLT5jdXJfaW5wdXQgPSBpbnB1dDsKKworCXNhYTcxNDZfc2V0X2hwc19zb3VyY2VfYW5kX3N5bmMoZGV2LCBpbnB1dF9wb3J0X3NlbGVjdGlvbltpbnB1dF0uaHBzX3NvdXJjZSwKKwkJCWlucHV0X3BvcnRfc2VsZWN0aW9uW2lucHV0XS5ocHNfc3luYyk7CisKKwkvKiBwcmVwYXJlIHN3aXRjaGluZyBvZiB0ZWE2NDE1YyBhbmQgc2FhNzExMWE7CisJICAgaGF2ZSBhIGxvb2sgYXQgdGhlICdiYWNrZ3JvdW5kJy1maWxlIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9ucyAgKi8KKwlzd2l0Y2ggKGlucHV0KSB7CisJY2FzZSBUVU5FUjoKKwkJaSA9IFNBQTcxMTVfQ09NUE9TSVRFMDsKKwkJcm91dGUuaW5wdXQgPSAzOworCQlyb3V0ZS5vdXRwdXQgPSAxNzsKKworCQlpZiAodGVhNjQxNWNfY2FsbChteGIsIHZpZGVvLCBzX3JvdXRpbmcsICZyb3V0ZSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiVklESU9DX1NfSU5QVVQ6IGNvdWxkIG5vdCBhZGRyZXNzIHRlYTY0MTVjICMxXG4iKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJCS8qIGNvbm5lY3QgdHVuZXItb3V0cHV0IGFsd2F5cyB0byBtdWx0aWNhYmxlICovCisJCXJvdXRlLmlucHV0ID0gMzsKKwkJcm91dGUub3V0cHV0ID0gMTM7CisJCWJyZWFrOworCWNhc2UgQVVYM19ZQzoKKwkJLyogbm90aGluZyB0byBiZSBkb25lIGhlcmUuIGF1eDNfeWMgaXMKKwkJICAgZGlyZWN0bHkgY29ubmVjdGVkIHRvIHRoZSBzYWE3MTFhICovCisJCWkgPSBTQUE3MTE1X1NWSURFTzE7CisJCWJyZWFrOworCWNhc2UgQVVYMzoKKwkJLyogbm90aGluZyB0byBiZSBkb25lIGhlcmUuIGF1eDMgaXMKKwkJICAgZGlyZWN0bHkgY29ubmVjdGVkIHRvIHRoZSBzYWE3MTFhICovCisJCWkgPSBTQUE3MTE1X0NPTVBPU0lURTE7CisJCWJyZWFrOworCWNhc2UgQVVYMToKKwkJaSA9IFNBQTcxMTVfQ09NUE9TSVRFMDsKKwkJcm91dGUuaW5wdXQgPSAxOworCQlyb3V0ZS5vdXRwdXQgPSAxNzsKKwkJYnJlYWs7CisJfQorCisJLyogc3dpdGNoIHZpZGVvIGluIHRlYTY0MTVjIG9ubHkgaWYgbmVjZXNzYXJ5ICovCisJc3dpdGNoIChpbnB1dCkgeworCWNhc2UgVFVORVI6CisJY2FzZSBBVVgxOgorCQlpZiAodGVhNjQxNWNfY2FsbChteGIsIHZpZGVvLCBzX3JvdXRpbmcsICZyb3V0ZSkpIHsKKwkJCXByaW50ayhLRVJOX0VSUiAiVklESU9DX1NfSU5QVVQ6IGNvdWxkIG5vdCBhZGRyZXNzIHRlYTY0MTVjICMzXG4iKTsKKwkJCXJldHVybiAtRUZBVUxUOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKworCS8qIHN3aXRjaCB2aWRlbyBpbiBzYWE3MTExYSAqLworCXJvdXRlLmlucHV0ID0gaTsKKwlyb3V0ZS5vdXRwdXQgPSAwOworCWlmIChzYWE3MTExYV9jYWxsKG14YiwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKSkKKwkJcHJpbnRrKEtFUk5fRVJSICJWSURJT0NfU19JTlBVVDogY291bGQgbm90IGFkZHJlc3Mgc2FhNzExMWEgIzEuXG4iKTsKKworCS8qIHN3aXRjaCB0aGUgYXVkaW8tc291cmNlIG9ubHkgaWYgbmVjZXNzYXJ5ICovCisJaWYgKDAgPT0gbXhiLT5jdXJfbXV0ZSkgeworCQl0ZWE2NDIwXzFfY2FsbChteGIsIGF1ZGlvLCBzX3JvdXRpbmcsCisJCQkJJlRFQTY0MjBfbGluZVt2aWRlb19hdWRpb19jb25uZWN0W2lucHV0XV1bMF0pOworCQl0ZWE2NDIwXzJfY2FsbChteGIsIGF1ZGlvLCBzX3JvdXRpbmcsCisJCQkJJlRFQTY0MjBfbGluZVt2aWRlb19hdWRpb19jb25uZWN0W2lucHV0XV1bMV0pOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX3R1bmVyKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfdHVuZXIgKnQpCit7CisJc3RydWN0IHNhYTcxNDZfZGV2ICpkZXYgPSAoKHN0cnVjdCBzYWE3MTQ2X2ZoICopZmgpLT5kZXY7CisJc3RydWN0IG14YiAqbXhiID0gKHN0cnVjdCBteGIgKilkZXYtPmV4dF9wcml2OworCisJaWYgKHQtPmluZGV4KSB7CisJCURFQl9EKCgiVklESU9DX0dfVFVORVI6IGNoYW5uZWwgJWQgZG9lcyBub3QgaGF2ZSBhIHR1bmVyIGF0dGFjaGVkLlxuIiwgdC0+aW5kZXgpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJREVCX0VFKCgiVklESU9DX0dfVFVORVI6ICVkXG4iLCB0LT5pbmRleCkpOworCisJbWVtc2V0KHQsIDAsIHNpemVvZigqdCkpOworCXN0cmxjcHkodC0+bmFtZSwgIlRWIFR1bmVyIiwgc2l6ZW9mKHQtPm5hbWUpKTsKKwl0LT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7CisJdC0+Y2FwYWJpbGl0eSA9IFY0TDJfVFVORVJfQ0FQX05PUk0gfCBWNEwyX1RVTkVSX0NBUF9TVEVSRU8gfAorCQkJVjRMMl9UVU5FUl9DQVBfTEFORzEgfCBWNEwyX1RVTkVSX0NBUF9MQU5HMiB8IFY0TDJfVFVORVJfQ0FQX1NBUDsKKwl0LT5hdWRtb2RlID0gbXhiLT5jdXJfbW9kZTsKKwlyZXR1cm4gY2FsbF9hbGwoZGV2LCB0dW5lciwgZ190dW5lciwgdCk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfdHVuZXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl90dW5lciAqdCkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgbXhiICpteGIgPSAoc3RydWN0IG14YiAqKWRldi0+ZXh0X3ByaXY7CisKKwlpZiAodC0+aW5kZXgpIHsKKwkJREVCX0QoKCJWSURJT0NfU19UVU5FUjogY2hhbm5lbCAlZCBkb2VzIG5vdCBoYXZlIGEgdHVuZXIgYXR0YWNoZWQuXG4iLCB0LT5pbmRleCkpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwlteGItPmN1cl9tb2RlID0gdC0+YXVkbW9kZTsKKwlyZXR1cm4gY2FsbF9hbGwoZGV2LCB0dW5lciwgc190dW5lciwgdCk7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwgc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCXN0cnVjdCBteGIgKm14YiA9IChzdHJ1Y3QgbXhiICopZGV2LT5leHRfcHJpdjsKKworCWlmIChteGItPmN1cl9pbnB1dCkgeworCQlERUJfRCgoIlZJRElPQ19HX0ZSRVE6IGNoYW5uZWwgJWQgZG9lcyBub3QgaGF2ZSBhIHR1bmVyIVxuIiwKKwkJCQkJbXhiLT5jdXJfaW5wdXQpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJKmYgPSBteGItPmN1cl9mcmVxOworCisJREVCX0VFKCgiVklESU9DX0dfRlJFUTogZnJlcToweCUwOHguXG4iLCBteGItPmN1cl9mcmVxLmZyZXF1ZW5jeSkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2ZyZXF1ZW5jeSAqZikKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgbXhiICpteGIgPSAoc3RydWN0IG14YiAqKWRldi0+ZXh0X3ByaXY7CisJc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOworCisJaWYgKGYtPnR1bmVyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChWNEwyX1RVTkVSX0FOQUxPR19UViAhPSBmLT50eXBlKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChteGItPmN1cl9pbnB1dCkgeworCQlERUJfRCgoIlZJRElPQ19TX0ZSRVE6IGNoYW5uZWwgJWQgZG9lcyBub3QgaGF2ZSBhIHR1bmVyIVxuIiwgbXhiLT5jdXJfaW5wdXQpKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJbXhiLT5jdXJfZnJlcSA9ICpmOworCURFQl9FRSgoIlZJRElPQ19TX0ZSRVFVRU5DWTogZnJlcToweCUwOHguXG4iLCBteGItPmN1cl9mcmVxLmZyZXF1ZW5jeSkpOworCisJLyogdHVuZSBpbiBkZXNpcmVkIGZyZXF1ZW5jeSAqLworCXR1bmVyX2NhbGwobXhiLCB0dW5lciwgc19mcmVxdWVuY3ksICZteGItPmN1cl9mcmVxKTsKKworCS8qIGhhY2s6IGNoYW5naW5nIHRoZSBmcmVxdWVuY3kgc2hvdWxkIGludmFsaWRhdGUgdGhlIHZiaS1jb3VudGVyICg9PiBhbGV2dCkgKi8KKwlzcGluX2xvY2soJmRldi0+c2xvY2spOworCXZ2LT52YmlfZmllbGRjb3VudCA9IDA7CisJc3Bpbl91bmxvY2soJmRldi0+c2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfYXVkaW8oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmZoLCBzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgbXhiICpteGIgPSAoc3RydWN0IG14YiAqKWRldi0+ZXh0X3ByaXY7CisKKwlpZiAoYS0+aW5kZXggPCAwIHx8IGEtPmluZGV4ID4gTVhCX0lOUFVUUykgeworCQlERUJfRCgoIlZJRElPQ19HX0FVRElPICVkIG91dCBvZiByYW5nZS5cbiIsIGEtPmluZGV4KSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCURFQl9FRSgoIlZJRElPQ19HX0FVRElPICVkLlxuIiwgYS0+aW5kZXgpKTsKKwltZW1jcHkoYSwgJm14Yl9hdWRpb3NbdmlkZW9fYXVkaW9fY29ubmVjdFtteGItPmN1cl9pbnB1dF1dLCBzaXplb2Yoc3RydWN0IHY0bDJfYXVkaW8pKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19hdWRpbyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2F1ZGlvICphKQoreworCURFQl9EKCgiVklESU9DX1NfQVVESU8gJWQuXG4iLCBhLT5pbmRleCkpOworCXJldHVybiAwOworfQorCisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworc3RhdGljIGludCB2aWRpb2NfZ19yZWdpc3RlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCisJcmV0dXJuIGNhbGxfYWxsKGRldiwgY29yZSwgZ19yZWdpc3RlciwgcmVnKTsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc19yZWdpc3RlcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gKChzdHJ1Y3Qgc2FhNzE0Nl9maCAqKWZoKS0+ZGV2OworCisJcmV0dXJuIGNhbGxfYWxsKGRldiwgY29yZSwgc19yZWdpc3RlciwgcmVnKTsKK30KKyNlbmRpZgorCitzdGF0aWMgbG9uZyB2aWRpb2NfZGVmYXVsdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqZmgsIGludCBjbWQsIHZvaWQgKmFyZykKK3sKKwlzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiA9ICgoc3RydWN0IHNhYTcxNDZfZmggKilmaCktPmRldjsKKwlzdHJ1Y3QgbXhiICpteGIgPSAoc3RydWN0IG14YiAqKWRldi0+ZXh0X3ByaXY7CisKKwlzd2l0Y2ggKGNtZCkgeworCWNhc2UgTVhCX1NfQVVESU9fQ0Q6CisJeworCQlpbnQgaSA9ICooaW50ICopYXJnOworCisJCWlmIChpIDwgMCB8fCBpID49IE1YQl9BVURJT1MpIHsKKwkJCURFQl9EKCgiaWxsZWdhbCBhcmd1bWVudCB0byBNWEJfU19BVURJT19DRDogaTolZC5cbiIsIGkpKTsKKwkJCXJldHVybiAtRUlOVkFMOworCQl9CisKKwkJREVCX0VFKCgiTVhCX1NfQVVESU9fQ0Q6IGk6JWQuXG4iLCBpKSk7CisKKwkJdGVhNjQyMF8xX2NhbGwobXhiLCBhdWRpbywgc19yb3V0aW5nLCAmVEVBNjQyMF9jZFtpXVswXSk7CisJCXRlYTY0MjBfMl9jYWxsKG14YiwgYXVkaW8sIHNfcm91dGluZywgJlRFQTY0MjBfY2RbaV1bMV0pOworCisJCXJldHVybiAwOworCX0KKwljYXNlIE1YQl9TX0FVRElPX0xJTkU6CisJeworCQlpbnQgaSA9ICooaW50ICopYXJnOworCisJCWlmIChpIDwgMCB8fCBpID49IE1YQl9BVURJT1MpIHsKKwkJCURFQl9EKCgiaWxsZWdhbCBhcmd1bWVudCB0byBNWEJfU19BVURJT19MSU5FOiBpOiVkLlxuIiwgaSkpOworCQkJcmV0dXJuIC1FSU5WQUw7CisJCX0KKworCQlERUJfRUUoKCJNWEJfU19BVURJT19MSU5FOiBpOiVkLlxuIiwgaSkpOworCQl0ZWE2NDIwXzFfY2FsbChteGIsIGF1ZGlvLCBzX3JvdXRpbmcsICZURUE2NDIwX2xpbmVbaV1bMF0pOworCQl0ZWE2NDIwXzJfY2FsbChteGIsIGF1ZGlvLCBzX3JvdXRpbmcsICZURUE2NDIwX2xpbmVbaV1bMV0pOworCisJCXJldHVybiAwOworCX0KKwlkZWZhdWx0OgorLyoKKwkJREVCMihwcmludGsoImRvZXMgbm90IGhhbmRsZSB0aGlzIGlvY3RsLlxuIikpOworKi8KKwkJcmV0dXJuIC1FTk9JT0NUTENNRDsKKwl9CisJcmV0dXJuIDA7Cit9CisKIHN0YXRpYyBzdHJ1Y3Qgc2FhNzE0Nl9leHRfdnYgdnZfZGF0YTsKIAogLyogdGhpcyBmdW5jdGlvbiBvbmx5IGdldHMgY2FsbGVkIHdoZW4gdGhlIHByb2Jpbmcgd2FzIHN1Y2Nlc3NmdWwgKi8KQEAgLTQzNyw2ICs3MjEsMjMgQEAKIAkgICBhbHJlYWR5IGRpZCB0aGlzIGluICJteGJfdmw0Ml9wcm9iZSIgKi8KIAogCXNhYTcxNDZfdnZfaW5pdChkZXYsICZ2dl9kYXRhKTsKKwl2dl9kYXRhLm9wcy52aWRpb2NfcXVlcnljdHJsID0gdmlkaW9jX3F1ZXJ5Y3RybDsKKwl2dl9kYXRhLm9wcy52aWRpb2NfZ19jdHJsID0gdmlkaW9jX2dfY3RybDsKKwl2dl9kYXRhLm9wcy52aWRpb2Nfc19jdHJsID0gdmlkaW9jX3NfY3RybDsKKwl2dl9kYXRhLm9wcy52aWRpb2NfZW51bV9pbnB1dCA9IHZpZGlvY19lbnVtX2lucHV0OworCXZ2X2RhdGEub3BzLnZpZGlvY19nX2lucHV0ID0gdmlkaW9jX2dfaW5wdXQ7CisJdnZfZGF0YS5vcHMudmlkaW9jX3NfaW5wdXQgPSB2aWRpb2Nfc19pbnB1dDsKKwl2dl9kYXRhLm9wcy52aWRpb2NfZ190dW5lciA9IHZpZGlvY19nX3R1bmVyOworCXZ2X2RhdGEub3BzLnZpZGlvY19zX3R1bmVyID0gdmlkaW9jX3NfdHVuZXI7CisJdnZfZGF0YS5vcHMudmlkaW9jX2dfZnJlcXVlbmN5ID0gdmlkaW9jX2dfZnJlcXVlbmN5OworCXZ2X2RhdGEub3BzLnZpZGlvY19zX2ZyZXF1ZW5jeSA9IHZpZGlvY19zX2ZyZXF1ZW5jeTsKKwl2dl9kYXRhLm9wcy52aWRpb2NfZ19hdWRpbyA9IHZpZGlvY19nX2F1ZGlvOworCXZ2X2RhdGEub3BzLnZpZGlvY19zX2F1ZGlvID0gdmlkaW9jX3NfYXVkaW87CisjaWZkZWYgQ09ORklHX1ZJREVPX0FEVl9ERUJVRworCXZ2X2RhdGEub3BzLnZpZGlvY19nX3JlZ2lzdGVyID0gdmlkaW9jX2dfcmVnaXN0ZXI7CisJdnZfZGF0YS5vcHMudmlkaW9jX3NfcmVnaXN0ZXIgPSB2aWRpb2Nfc19yZWdpc3RlcjsKKyNlbmRpZgorCXZ2X2RhdGEub3BzLnZpZGlvY19kZWZhdWx0ID0gdmlkaW9jX2RlZmF1bHQ7CiAJaWYgKHNhYTcxNDZfcmVnaXN0ZXJfZGV2aWNlKCZteGItPnZpZGVvX2RldiwgZGV2LCAibXhiIiwgVkZMX1RZUEVfR1JBQkJFUikpIHsKIAkJRVJSKCgiY2Fubm90IHJlZ2lzdGVyIGNhcHR1cmUgdjRsMiBkZXZpY2UuIHNraXBwaW5nLlxuIikpOwogCQlyZXR1cm4gLTE7CkBAIC00NDksMTMgKzc1MCw2IEBACiAJCX0KIAl9CiAKLQlpMmNfdXNlX2NsaWVudChteGItPnRlYTY0MjBfMSk7Ci0JaTJjX3VzZV9jbGllbnQobXhiLT50ZWE2NDIwXzIpOwotCWkyY191c2VfY2xpZW50KG14Yi0+dGVhNjQxNWMpOwotCWkyY191c2VfY2xpZW50KG14Yi0+dGRhOTg0MCk7Ci0JaTJjX3VzZV9jbGllbnQobXhiLT5zYWE3MTExYSk7Ci0JaTJjX3VzZV9jbGllbnQobXhiLT50dW5lcik7Ci0KIAlwcmludGsoIm14YjogZm91bmQgTXVsdGltZWRpYSBlWHRlbnNpb24gQm9hcmQgIyVkLlxuIiwgbXhiX251bSk7CiAKIAlteGJfbnVtKys7CkBAIC00NjksMTMgKzc2Myw2IEBACiAKIAlERUJfRUUoKCJkZXY6JXBcbiIsIGRldikpOwogCi0JaTJjX3JlbGVhc2VfY2xpZW50KG14Yi0+dGVhNjQyMF8xKTsKLQlpMmNfcmVsZWFzZV9jbGllbnQobXhiLT50ZWE2NDIwXzIpOwotCWkyY19yZWxlYXNlX2NsaWVudChteGItPnRlYTY0MTVjKTsKLQlpMmNfcmVsZWFzZV9jbGllbnQobXhiLT50ZGE5ODQwKTsKLQlpMmNfcmVsZWFzZV9jbGllbnQobXhiLT5zYWE3MTExYSk7Ci0JaTJjX3JlbGVhc2VfY2xpZW50KG14Yi0+dHVuZXIpOwotCiAJc2FhNzE0Nl91bnJlZ2lzdGVyX2RldmljZSgmbXhiLT52aWRlb19kZXYsZGV2KTsKIAlpZiAoTVhCX0JPQVJEX0NBTl9ET19WQkkoZGV2KSkKIAkJc2FhNzE0Nl91bnJlZ2lzdGVyX2RldmljZSgmbXhiLT52YmlfZGV2LCBkZXYpOwpAQCAtNDg5LDMzMCArNzc2LDkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGxvbmcgbXhiX2lvY3RsKHN0cnVjdCBzYWE3MTQ2X2ZoICpmaCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2ID0gZmgtPmRldjsKLQlzdHJ1Y3QgbXhiICpteGIgPSAoc3RydWN0IG14YiAqKWRldi0+ZXh0X3ByaXY7Ci0Jc3RydWN0IHNhYTcxNDZfdnYgKnZ2ID0gZGV2LT52dl9kYXRhOwotCi0Jc3dpdGNoKGNtZCkgewotCWNhc2UgVklESU9DX0VOVU1JTlBVVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2lucHV0ICppID0gYXJnOwotCi0JCURFQl9FRSgoIlZJRElPQ19FTlVNSU5QVVQgJWQuXG4iLGktPmluZGV4KSk7Ci0JCWlmIChpLT5pbmRleCA8IDAgfHwgaS0+aW5kZXggPj0gTVhCX0lOUFVUUykKLQkJCXJldHVybiAtRUlOVkFMOwotCQltZW1jcHkoaSwgJm14Yl9pbnB1dHNbaS0+aW5kZXhdLCBzaXplb2Yoc3RydWN0IHY0bDJfaW5wdXQpKTsKLQkJcmV0dXJuIDA7Ci0JfQotCS8qIHRoZSBzYWE3MTQ2IHByb3ZpZGVzIHNvbWUgY29udHJvbHMgKGJyaWdodG5lc3MsIGNvbnRyYXN0LCBzYXR1cmF0aW9uKQotCSAgIHdoaWNoIGdldHMgcmVnaXN0ZXJlZCAqYWZ0ZXIqIHRoaXMgZnVuY3Rpb24uIGJlY2F1c2Ugb2YgdGhpcyB3ZSBoYXZlCi0JICAgdG8gcmV0dXJuIHdpdGggYSB2YWx1ZSAhPSAwIGV2ZW4gaWYgdGhlIGZ1bmN0aW9uIHN1Y2NlZGVkLi4gKi8KLQljYXNlIFZJRElPQ19RVUVSWUNUUkw6Ci0JewotCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjID0gYXJnOwotCQlpbnQgaTsKLQotCQlmb3IgKGkgPSBNQVhDT05UUk9MUyAtIDE7IGkgPj0gMDsgaS0tKSB7Ci0JCQlpZiAobXhiX2NvbnRyb2xzW2ldLmlkID09IHFjLT5pZCkgewotCQkJCSpxYyA9IG14Yl9jb250cm9sc1tpXTsKLQkJCQlERUJfRCgoIlZJRElPQ19RVUVSWUNUUkwgJWQuXG4iLCBxYy0+aWQpKTsKLQkJCQlyZXR1cm4gMDsKLQkJCX0KLQkJfQotCQlyZXR1cm4gLUVBR0FJTjsKLQl9Ci0JY2FzZSBWSURJT0NfR19DVFJMOgotCXsKLQkJc3RydWN0IHY0bDJfY29udHJvbCAqdmMgPSBhcmc7Ci0JCWludCBpOwotCi0JCWZvciAoaSA9IE1BWENPTlRST0xTIC0gMTsgaSA+PSAwOyBpLS0pIHsKLQkJCWlmIChteGJfY29udHJvbHNbaV0uaWQgPT0gdmMtPmlkKQotCQkJCWJyZWFrOwotCQl9Ci0KLQkJaWYgKGkgPCAwKQotCQkJcmV0dXJuIC1FQUdBSU47Ci0KLQkJaWYgKHZjLT5pZCA9PSBWNEwyX0NJRF9BVURJT19NVVRFKSB7Ci0JCQl2Yy0+dmFsdWUgPSBteGItPmN1cl9tdXRlOwotCQkJREVCX0QoKCJWSURJT0NfR19DVFJMIFY0TDJfQ0lEX0FVRElPX01VVEU6JWQuXG4iLCB2Yy0+dmFsdWUpKTsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJREVCX0VFKCgiVklESU9DX0dfQ1RSTCBWNEwyX0NJRF9BVURJT19NVVRFOiVkLlxuIiwgdmMtPnZhbHVlKSk7Ci0JCXJldHVybiAwOwotCX0KLQotCWNhc2UgVklESU9DX1NfQ1RSTDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2NvbnRyb2wgKnZjID0gYXJnOwotCQlpbnQgaSA9IDA7Ci0KLQkJZm9yIChpID0gTUFYQ09OVFJPTFMgLSAxOyBpID49IDA7IGktLSkgewotCQkJaWYgKG14Yl9jb250cm9sc1tpXS5pZCA9PSB2Yy0+aWQpCi0JCQkJYnJlYWs7Ci0JCX0KLQotCQlpZiAoaSA8IDApCi0JCQlyZXR1cm4gLUVBR0FJTjsKLQotCQlpZiAodmMtPmlkID09IFY0TDJfQ0lEX0FVRElPX01VVEUpIHsKLQkJCW14Yi0+Y3VyX211dGUgPSB2Yy0+dmFsdWU7Ci0JCQlpZiAoIXZjLT52YWx1ZSkgewotCQkJCS8qIHN3aXRjaCB0aGUgYXVkaW8tc291cmNlICovCi0JCQkJbXhiLT50ZWE2NDIwXzEtPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMSwgVEVBNjQyMF9TV0lUQ0gsCi0JCQkJCQkmVEVBNjQyMF9saW5lW3ZpZGVvX2F1ZGlvX2Nvbm5lY3RbbXhiLT5jdXJfaW5wdXRdXVswXSk7Ci0JCQkJbXhiLT50ZWE2NDIwXzItPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMiwgVEVBNjQyMF9TV0lUQ0gsCi0JCQkJCQkmVEVBNjQyMF9saW5lW3ZpZGVvX2F1ZGlvX2Nvbm5lY3RbbXhiLT5jdXJfaW5wdXRdXVsxXSk7Ci0JCQl9IGVsc2UgewotCQkJCW14Yi0+dGVhNjQyMF8xLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDIwXzEsIFRFQTY0MjBfU1dJVENILAotCQkJCQkJJlRFQTY0MjBfbGluZVs2XVswXSk7Ci0JCQkJbXhiLT50ZWE2NDIwXzItPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMiwgVEVBNjQyMF9TV0lUQ0gsCi0JCQkJCQkmVEVBNjQyMF9saW5lWzZdWzFdKTsKLQkJCX0KLQkJCURFQl9FRSgoIlZJRElPQ19TX0NUUkwsIFY0TDJfQ0lEX0FVRElPX01VVEU6ICVkLlxuIiwgdmMtPnZhbHVlKSk7Ci0JCX0KLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX0dfSU5QVVQ6Ci0JewotCQlpbnQgKmlucHV0ID0gKGludCAqKWFyZzsKLQkJKmlucHV0ID0gbXhiLT5jdXJfaW5wdXQ7Ci0KLQkJREVCX0VFKCgiVklESU9DX0dfSU5QVVQgJWQuXG4iLCAqaW5wdXQpKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX1NfSU5QVVQ6Ci0JewotCQlpbnQgaW5wdXQgPSAqKGludCAqKWFyZzsKLQkJc3RydWN0IHRlYTY0MTVjX211bHRpcGxleCB2bTsKLQkJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKLQkJaW50IGkgPSAwOwotCi0JCURFQl9FRSgoIlZJRElPQ19TX0lOUFVUICVkLlxuIiwgaW5wdXQpKTsKLQotCQlpZiAoaW5wdXQgPCAwIHx8IGlucHV0ID49IE1YQl9JTlBVVFMpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlteGItPmN1cl9pbnB1dCA9IGlucHV0OwotCi0JCXNhYTcxNDZfc2V0X2hwc19zb3VyY2VfYW5kX3N5bmMoZGV2LCBpbnB1dF9wb3J0X3NlbGVjdGlvbltpbnB1dF0uaHBzX3NvdXJjZSwKLQkJCQlpbnB1dF9wb3J0X3NlbGVjdGlvbltpbnB1dF0uaHBzX3N5bmMpOwotCi0JCS8qIHByZXBhcmUgc3dpdGNoaW5nIG9mIHRlYTY0MTVjIGFuZCBzYWE3MTExYTsKLQkJICAgaGF2ZSBhIGxvb2sgYXQgdGhlICdiYWNrZ3JvdW5kJy1maWxlIGZvciBmdXJ0aGVyIGluZm9ybWF0aW9ucyAgKi8KLQkJc3dpdGNoIChpbnB1dCkgewotCQljYXNlIFRVTkVSOgotCQkJaSA9IFNBQTcxMTVfQ09NUE9TSVRFMDsKLQkJCXZtLmluICA9IDM7Ci0JCQl2bS5vdXQgPSAxNzsKLQotCQkJaWYgKG14Yi0+dGVhNjQxNWMtPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MTVjLCBURUE2NDE1Q19TV0lUQ0gsICZ2bSkpIHsKLQkJCQlwcmludGsoS0VSTl9FUlIgIlZJRElPQ19TX0lOUFVUOiBjb3VsZCBub3QgYWRkcmVzcyB0ZWE2NDE1YyAjMVxuIik7Ci0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQl9Ci0JCQkvKiBjb25uZWN0IHR1bmVyLW91dHB1dCBhbHdheXMgdG8gbXVsdGljYWJsZSAqLwotCQkJdm0uaW4gID0gMzsKLQkJCXZtLm91dCA9IDEzOwotCQkJYnJlYWs7Ci0JCWNhc2UgQVVYM19ZQzoKLQkJCS8qIG5vdGhpbmcgdG8gYmUgZG9uZSBoZXJlLiBhdXgzX3ljIGlzCi0JCQkgICBkaXJlY3RseSBjb25uZWN0ZWQgdG8gdGhlIHNhYTcxMWEgKi8KLQkJCWkgPSBTQUE3MTE1X1NWSURFTzE7Ci0JCQlicmVhazsKLQkJY2FzZSBBVVgzOgotCQkJLyogbm90aGluZyB0byBiZSBkb25lIGhlcmUuIGF1eDMgaXMKLQkJCSAgIGRpcmVjdGx5IGNvbm5lY3RlZCB0byB0aGUgc2FhNzExYSAqLwotCQkJaSA9IFNBQTcxMTVfQ09NUE9TSVRFMTsKLQkJCWJyZWFrOwotCQljYXNlIEFVWDE6Ci0JCQlpID0gU0FBNzExNV9DT01QT1NJVEUwOwotCQkJdm0uaW4gID0gMTsKLQkJCXZtLm91dCA9IDE3OwotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBzd2l0Y2ggdmlkZW8gaW4gdGVhNjQxNWMgb25seSBpZiBuZWNlc3NhcnkgKi8KLQkJc3dpdGNoIChpbnB1dCkgewotCQljYXNlIFRVTkVSOgotCQljYXNlIEFVWDE6Ci0JCQlpZiAobXhiLT50ZWE2NDE1Yy0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQxNWMsIFRFQTY0MTVDX1NXSVRDSCwgJnZtKSkgewotCQkJCXByaW50ayhLRVJOX0VSUiAiVklESU9DX1NfSU5QVVQ6IGNvdWxkIG5vdCBhZGRyZXNzIHRlYTY0MTVjICMzXG4iKTsKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCX0KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJYnJlYWs7Ci0JCX0KLQotCQkvKiBzd2l0Y2ggdmlkZW8gaW4gc2FhNzExMWEgKi8KLQkJcm91dGUuaW5wdXQgPSBpOwotCQlyb3V0ZS5vdXRwdXQgPSAwOwotCQlpZiAobXhiLT5zYWE3MTExYS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+c2FhNzExMWEsIFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HLCAmcm91dGUpKQotCQkJcHJpbnRrKCJWSURJT0NfU19JTlBVVDogY291bGQgbm90IGFkZHJlc3Mgc2FhNzExMWEgIzEuXG4iKTsKLQotCQkvKiBzd2l0Y2ggdGhlIGF1ZGlvLXNvdXJjZSBvbmx5IGlmIG5lY2Vzc2FyeSAqLwotCQlpZiggMCA9PSBteGItPmN1cl9tdXRlICkgewotCQkJbXhiLT50ZWE2NDIwXzEtPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMSwgVEVBNjQyMF9TV0lUQ0gsCi0JCQkJCSZURUE2NDIwX2xpbmVbdmlkZW9fYXVkaW9fY29ubmVjdFtpbnB1dF1dWzBdKTsKLQkJCW14Yi0+dGVhNjQyMF8yLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDIwXzIsIFRFQTY0MjBfU1dJVENILAotCQkJCSAgICAgICAmVEVBNjQyMF9saW5lW3ZpZGVvX2F1ZGlvX2Nvbm5lY3RbaW5wdXRdXVsxXSk7Ci0JCX0KLQotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfR19UVU5FUjoKLQl7Ci0JCXN0cnVjdCB2NGwyX3R1bmVyICp0ID0gYXJnOwotCi0JCWlmICh0LT5pbmRleCkgewotCQkJREVCX0QoKCJWSURJT0NfR19UVU5FUjogY2hhbm5lbCAlZCBkb2VzIG5vdCBoYXZlIGEgdHVuZXIgYXR0YWNoZWQuXG4iLCB0LT5pbmRleCkpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlERUJfRUUoKCJWSURJT0NfR19UVU5FUjogJWRcbiIsIHQtPmluZGV4KSk7Ci0KLQkJbWVtc2V0KHQsIDAsIHNpemVvZigqdCkpOwotCQlpMmNfY2xpZW50c19jb21tYW5kKCZteGItPmkyY19hZGFwdGVyLCBjbWQsIGFyZyk7Ci0KLQkJc3RybGNweSh0LT5uYW1lLCAiVFYgVHVuZXIiLCBzaXplb2YodC0+bmFtZSkpOwotCQl0LT50eXBlID0gVjRMMl9UVU5FUl9BTkFMT0dfVFY7Ci0JCXQtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9OT1JNIHwgVjRMMl9UVU5FUl9DQVBfU1RFUkVPIHwgXAotCQkJVjRMMl9UVU5FUl9DQVBfTEFORzEgfCBWNEwyX1RVTkVSX0NBUF9MQU5HMiB8IFY0TDJfVFVORVJfQ0FQX1NBUDsKLQkJdC0+YXVkbW9kZSA9IG14Yi0+Y3VyX21vZGU7Ci0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19TX1RVTkVSOgotCXsKLQkJc3RydWN0IHY0bDJfdHVuZXIgKnQgPSBhcmc7Ci0KLQkJaWYgKHQtPmluZGV4KSB7Ci0JCQlERUJfRCgoIlZJRElPQ19TX1RVTkVSOiBjaGFubmVsICVkIGRvZXMgbm90IGhhdmUgYSB0dW5lciBhdHRhY2hlZC5cbiIsdC0+aW5kZXgpKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJbXhiLT5jdXJfbW9kZSA9IHQtPmF1ZG1vZGU7Ci0JCWkyY19jbGllbnRzX2NvbW1hbmQoJm14Yi0+aTJjX2FkYXB0ZXIsIGNtZCwgYXJnKTsKLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX0dfRlJFUVVFTkNZOgotCXsKLQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmID0gYXJnOwotCi0JCWlmIChteGItPmN1cl9pbnB1dCkgewotCQkJREVCX0QoKCJWSURJT0NfR19GUkVROiBjaGFubmVsICVkIGRvZXMgbm90IGhhdmUgYSB0dW5lciFcbiIsCi0JCQkJCQlteGItPmN1cl9pbnB1dCkpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQkqZiA9IG14Yi0+Y3VyX2ZyZXE7Ci0KLQkJREVCX0VFKCgiVklESU9DX0dfRlJFUTogZnJlcToweCUwOHguXG4iLCBteGItPmN1cl9mcmVxLmZyZXF1ZW5jeSkpOwotCQlyZXR1cm4gMDsKLQl9Ci0JY2FzZSBWSURJT0NfU19GUkVRVUVOQ1k6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYgPSBhcmc7Ci0KLQkJaWYgKGYtPnR1bmVyKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKFY0TDJfVFVORVJfQU5BTE9HX1RWICE9IGYtPnR5cGUpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQlpZiAobXhiLT5jdXJfaW5wdXQpIHsKLQkJCURFQl9EKCgiVklESU9DX1NfRlJFUTogY2hhbm5lbCAlZCBkb2VzIG5vdCBoYXZlIGEgdHVuZXIhXG4iLCBteGItPmN1cl9pbnB1dCkpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlteGItPmN1cl9mcmVxID0gKmY7Ci0JCURFQl9FRSgoIlZJRElPQ19TX0ZSRVFVRU5DWTogZnJlcToweCUwOHguXG4iLCBteGItPmN1cl9mcmVxLmZyZXF1ZW5jeSkpOwotCi0JCS8qIHR1bmUgaW4gZGVzaXJlZCBmcmVxdWVuY3kgKi8KLQkJbXhiLT50dW5lci0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dHVuZXIsIFZJRElPQ19TX0ZSRVFVRU5DWSwgJm14Yi0+Y3VyX2ZyZXEpOwotCi0JCS8qIGhhY2s6IGNoYW5naW5nIHRoZSBmcmVxdWVuY3kgc2hvdWxkIGludmFsaWRhdGUgdGhlIHZiaS1jb3VudGVyICg9PiBhbGV2dCkgKi8KLQkJc3Bpbl9sb2NrKCZkZXYtPnNsb2NrKTsKLQkJdnYtPnZiaV9maWVsZGNvdW50ID0gMDsKLQkJc3Bpbl91bmxvY2soJmRldi0+c2xvY2spOwotCi0JCXJldHVybiAwOwotCX0KLQljYXNlIE1YQl9TX0FVRElPX0NEOgotCXsKLQkJaW50IGkgPSAqKGludCopYXJnOwotCi0JCWlmIChpIDwgMCB8fCBpID49IE1YQl9BVURJT1MpIHsKLQkJCURFQl9EKCgiaWxsZWdhbCBhcmd1bWVudCB0byBNWEJfU19BVURJT19DRDogaTolZC5cbiIsaSkpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlERUJfRUUoKCJNWEJfU19BVURJT19DRDogaTolZC5cbiIsaSkpOwotCi0JCW14Yi0+dGVhNjQyMF8xLT5kcml2ZXItPmNvbW1hbmQobXhiLT50ZWE2NDIwXzEsVEVBNjQyMF9TV0lUQ0gsICZURUE2NDIwX2NkW2ldWzBdKTsKLQkJbXhiLT50ZWE2NDIwXzItPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMixURUE2NDIwX1NXSVRDSCwgJlRFQTY0MjBfY2RbaV1bMV0pOwotCi0JCXJldHVybiAwOwotCX0KLQljYXNlIE1YQl9TX0FVRElPX0xJTkU6Ci0JewotCQlpbnQgaSA9ICooaW50Kilhcmc7Ci0KLQkJaWYgKGkgPCAwIHx8IGkgPj0gTVhCX0FVRElPUykgewotCQkJREVCX0QoKCJpbGxlZ2FsIGFyZ3VtZW50IHRvIE1YQl9TX0FVRElPX0xJTkU6IGk6JWQuXG4iLGkpKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJREVCX0VFKCgiTVhCX1NfQVVESU9fTElORTogaTolZC5cbiIsaSkpOwotCQlteGItPnRlYTY0MjBfMS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dGVhNjQyMF8xLFRFQTY0MjBfU1dJVENILCAmVEVBNjQyMF9saW5lW2ldWzBdKTsKLQkJbXhiLT50ZWE2NDIwXzItPmRyaXZlci0+Y29tbWFuZChteGItPnRlYTY0MjBfMixURUE2NDIwX1NXSVRDSCwgJlRFQTY0MjBfbGluZVtpXVsxXSk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCWNhc2UgVklESU9DX0dfQVVESU86Ci0JewotCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSA9IGFyZzsKLQotCQlpZiAoYS0+aW5kZXggPCAwIHx8IGEtPmluZGV4ID4gTVhCX0lOUFVUUykgewotCQkJREVCX0QoKCJWSURJT0NfR19BVURJTyAlZCBvdXQgb2YgcmFuZ2UuXG4iLCBhLT5pbmRleCkpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlERUJfRUUoKCJWSURJT0NfR19BVURJTyAlZC5cbiIsIGEtPmluZGV4KSk7Ci0JCW1lbWNweShhLCAmbXhiX2F1ZGlvc1t2aWRlb19hdWRpb19jb25uZWN0W214Yi0+Y3VyX2lucHV0XV0sIHNpemVvZihzdHJ1Y3QgdjRsMl9hdWRpbykpOwotCi0JCXJldHVybiAwOwotCX0KLQljYXNlIFZJRElPQ19TX0FVRElPOgotCXsKLQkJc3RydWN0IHY0bDJfYXVkaW8gKmEgPSBhcmc7Ci0KLQkJREVCX0QoKCJWSURJT0NfU19BVURJTyAlZC5cbiIsIGEtPmluZGV4KSk7Ci0JCXJldHVybiAwOwotCX0KLSNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCi0JY2FzZSBWSURJT0NfREJHX1NfUkVHSVNURVI6Ci0JY2FzZSBWSURJT0NfREJHX0dfUkVHSVNURVI6Ci0JCWkyY19jbGllbnRzX2NvbW1hbmQoJm14Yi0+aTJjX2FkYXB0ZXIsIGNtZCwgYXJnKTsKLQkJcmV0dXJuIDA7Ci0jZW5kaWYKLQlkZWZhdWx0OgotLyoKLQkJREVCMihwcmludGsoImRvZXMgbm90IGhhbmRsZSB0aGlzIGlvY3RsLlxuIikpOwotKi8KLQkJcmV0dXJuIC1FTk9JT0NUTENNRDsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbnQgc3RkX2NhbGxiYWNrKHN0cnVjdCBzYWE3MTQ2X2RldiAqZGV2LCBzdHJ1Y3Qgc2FhNzE0Nl9zdGFuZGFyZCAqc3RhbmRhcmQpCiB7CiAJc3RydWN0IG14YiAqbXhiID0gKHN0cnVjdCBteGIgKilkZXYtPmV4dF9wcml2OwotCWludCB6ZXJvID0gMDsKLQlpbnQgb25lID0gMTsKIAogCWlmIChWNEwyX1NURF9QQUxfSSA9PSBzdGFuZGFyZC0+aWQpIHsKIAkJdjRsMl9zdGRfaWQgc3RkID0gVjRMMl9TVERfUEFMX0k7CkBAIC04MjEsOCArNzg3LDggQEAKIAkJLyogc2V0IHRoZSA3MTQ2IGdwaW8gcmVnaXN0ZXIgLS0gSSBkb24ndCBrbm93IHdoYXQgdGhpcyBkb2VzIGV4YWN0bHkgKi8KIAkJc2FhNzE0Nl93cml0ZShkZXYsIEdQSU9fQ1RSTCwgMHgwMDQwNDA1MCk7CiAJCS8qIHVuc2V0IHRoZSA3MTExIGdwaW8gcmVnaXN0ZXIgLS0gSSBkb24ndCBrbm93IHdoYXQgdGhpcyBkb2VzIGV4YWN0bHkgKi8KLQkJbXhiLT5zYWE3MTExYS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+c2FhNzExMWEsIFZJRElPQ19JTlRfU19HUElPLCAmemVybyk7Ci0JCW14Yi0+dHVuZXItPmRyaXZlci0+Y29tbWFuZChteGItPnR1bmVyLCBWSURJT0NfU19TVEQsICZzdGQpOworCQlzYWE3MTExYV9jYWxsKG14YiwgY29yZSwgc19ncGlvLCAwKTsKKwkJdHVuZXJfY2FsbChteGIsIHR1bmVyLCBzX3N0ZCwgc3RkKTsKIAl9IGVsc2UgewogCQl2NGwyX3N0ZF9pZCBzdGQgPSBWNEwyX1NURF9QQUxfQkc7CiAKQEAgLTgzMCw4ICs3OTYsOCBAQAogCQkvKiBzZXQgdGhlIDcxNDYgZ3BpbyByZWdpc3RlciAtLSBJIGRvbid0IGtub3cgd2hhdCB0aGlzIGRvZXMgZXhhY3RseSAqLwogCQlzYWE3MTQ2X3dyaXRlKGRldiwgR1BJT19DVFJMLCAweDAwNDA0MDUwKTsKIAkJLyogc2V0IHRoZSA3MTExIGdwaW8gcmVnaXN0ZXIgLS0gSSBkb24ndCBrbm93IHdoYXQgdGhpcyBkb2VzIGV4YWN0bHkgKi8KLQkJbXhiLT5zYWE3MTExYS0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+c2FhNzExMWEsIFZJRElPQ19JTlRfU19HUElPLCAmb25lKTsKLQkJbXhiLT50dW5lci0+ZHJpdmVyLT5jb21tYW5kKG14Yi0+dHVuZXIsIFZJRElPQ19TX1NURCwgJnN0ZCk7CisJCXNhYTcxMTFhX2NhbGwobXhiLCBjb3JlLCBzX2dwaW8sIDEpOworCQl0dW5lcl9jYWxsKG14YiwgdHVuZXIsIHNfc3RkLCBzdGQpOwogCX0KIAlyZXR1cm4gMDsKIH0KQEAgLTg4NSw4ICs4NTEsNiBAQAogCS5zdGRzCQk9ICZzdGFuZGFyZFswXSwKIAkubnVtX3N0ZHMJPSBzaXplb2Yoc3RhbmRhcmQpL3NpemVvZihzdHJ1Y3Qgc2FhNzE0Nl9zdGFuZGFyZCksCiAJLnN0ZF9jYWxsYmFjawk9ICZzdGRfY2FsbGJhY2ssCi0JLmlvY3RscwkJPSAmaW9jdGxzWzBdLAotCS5pb2N0bAkJPSBteGJfaW9jdGwsCiB9OwogCiBzdGF0aWMgc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uIGV4dGVuc2lvbiA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDI0eHhjYW0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb21hcDI0eHhjYW0uYwppbmRleCA4MDVmYWFlLi41ZmM0YWMwIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL29tYXAyNHh4Y2FtLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9vbWFwMjR4eGNhbS5jCkBAIC0xMjg1LDkgKzEyODUsNiBAQAogCXN0cnVjdCBvbWFwMjR4eGNhbV9kZXZpY2UgKmNhbSA9IG9maC0+Y2FtOwogCWludCBydmFsOwogCi0JaWYgKGEtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCW11dGV4X2xvY2soJmNhbS0+bXV0ZXgpOwogCXJ2YWwgPSB2aWRpb2NfaW50X2dfcGFybShjYW0tPnNkZXYsIGEpOwogCW11dGV4X3VubG9jaygmY2FtLT5tdXRleCk7CkBAIC0xMzAzLDkgKzEzMDAsNiBAQAogCXN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gb2xkX3N0cmVhbXBhcm07CiAJaW50IHJ2YWw7CiAKLQlpZiAoYS0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCiAJbXV0ZXhfbG9jaygmY2FtLT5tdXRleCk7CiAJaWYgKGNhbS0+c3RyZWFtaW5nKSB7CiAJCXJ2YWwgPSAtRUJVU1k7CkBAIC0xNjY1LDcgKzE2NTksNiBAQAogCXZmZC0+cGFyZW50ID0gY2FtLT5kZXY7CiAKIAlzdHJsY3B5KHZmZC0+bmFtZSwgQ0FNX05BTUUsIHNpemVvZih2ZmQtPm5hbWUpKTsKLQl2ZmQtPnZmbF90eXBlCQkgPSBWSURfVFlQRV9DQVBUVVJFIHwgVklEX1RZUEVfQ0hST01BS0VZOwogCXZmZC0+Zm9wcwkJID0gJm9tYXAyNHh4Y2FtX2ZvcHM7CiAJdmZkLT5taW5vcgkJID0gLTE7CiAJdmZkLT5pb2N0bF9vcHMJCSA9ICZvbWFwMjR4eGNhbV9pb2N0bF9mb3BzOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjc2NzAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NjcwLmMKaW5kZXggMDVjMTRhMi4uMGUyMTg0ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjc2NzAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzY3MC5jCkBAIC0xMiwxOCArMTIsMjIgQEAKICAqLwogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC9zbGFiLmg+Ci0jaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCiAKIE1PRFVMRV9BVVRIT1IoIkpvbmF0aGFuIENvcmJldCA8Y29yYmV0QGx3bi5uZXQ+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkEgbG93LWxldmVsIGRyaXZlciBmb3IgT21uaVZpc2lvbiBvdjc2NzAgc2Vuc29ycyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCitzdGF0aWMgaW50IGRlYnVnOworbW9kdWxlX3BhcmFtKGRlYnVnLCBib29sLCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOworCiAvKgogICogQmFzaWMgd2luZG93IHNpemVzLiAgVGhlc2UgcHJvYmFibHkgYmVsb25nIHNvbWV3aGVyZSBtb3JlIGdsb2JhbGx5CiAgKiB1c2VmdWwuCkBAIC0xODksMTEgKzE5MywxNiBAQAogICovCiBzdHJ1Y3Qgb3Y3NjcwX2Zvcm1hdF9zdHJ1Y3Q7ICAvKiBjb21pbmcgbGF0ZXIgKi8KIHN0cnVjdCBvdjc2NzBfaW5mbyB7CisJc3RydWN0IHY0bDJfc3ViZGV2IHNkOwogCXN0cnVjdCBvdjc2NzBfZm9ybWF0X3N0cnVjdCAqZm10OyAgLyogQ3VycmVudCBmb3JtYXQgKi8KIAl1bnNpZ25lZCBjaGFyIHNhdDsJCS8qIFNhdHVyYXRpb24gdmFsdWUgKi8KIAlpbnQgaHVlOwkJCS8qIEh1ZSB2YWx1ZSAqLwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgb3Y3NjcwX2luZm8gKnRvX3N0YXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IG92NzY3MF9pbmZvLCBzZCk7Cit9CiAKIAogCkBAIC00MDAsMjQgKzQwOSwyNyBAQAogICogTG93LWxldmVsIHJlZ2lzdGVyIEkvTy4KICAqLwogCi1zdGF0aWMgaW50IG92NzY3MF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjLCB1bnNpZ25lZCBjaGFyIHJlZywKK3N0YXRpYyBpbnQgb3Y3NjcwX3JlYWQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdW5zaWduZWQgY2hhciByZWcsCiAJCXVuc2lnbmVkIGNoYXIgKnZhbHVlKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAlpbnQgcmV0OwogCi0JcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGMsIHJlZyk7CisJcmV0ID0gaTJjX3NtYnVzX3JlYWRfYnl0ZV9kYXRhKGNsaWVudCwgcmVnKTsKIAlpZiAocmV0ID49IDApIHsKLQkJKnZhbHVlID0gKHVuc2lnbmVkIGNoYXIpIHJldDsKKwkJKnZhbHVlID0gKHVuc2lnbmVkIGNoYXIpcmV0OwogCQlyZXQgPSAwOwogCX0KIAlyZXR1cm4gcmV0OwogfQogCiAKLXN0YXRpYyBpbnQgb3Y3NjcwX3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjLCB1bnNpZ25lZCBjaGFyIHJlZywKK3N0YXRpYyBpbnQgb3Y3NjcwX3dyaXRlKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHVuc2lnbmVkIGNoYXIgcmVnLAogCQl1bnNpZ25lZCBjaGFyIHZhbHVlKQogewotCWludCByZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGMsIHJlZywgdmFsdWUpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlpbnQgcmV0ID0gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOworCiAJaWYgKHJlZyA9PSBSRUdfQ09NNyAmJiAodmFsdWUgJiBDT003X1JFU0VUKSkKIAkJbXNsZWVwKDIpOyAgLyogV2FpdCBmb3IgcmVzZXQgdG8gcnVuICovCiAJcmV0dXJuIHJldDsKQEAgLTQyNywxMCArNDM5LDEwIEBACiAvKgogICogV3JpdGUgYSBsaXN0IG9mIHJlZ2lzdGVyIHNldHRpbmdzOyBmZi9mZiBzdG9wcyB0aGUgcHJvY2Vzcy4KICAqLwotc3RhdGljIGludCBvdjc2NzBfd3JpdGVfYXJyYXkoc3RydWN0IGkyY19jbGllbnQgKmMsIHN0cnVjdCByZWd2YWxfbGlzdCAqdmFscykKK3N0YXRpYyBpbnQgb3Y3NjcwX3dyaXRlX2FycmF5KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCByZWd2YWxfbGlzdCAqdmFscykKIHsKIAl3aGlsZSAodmFscy0+cmVnX251bSAhPSAweGZmIHx8IHZhbHMtPnZhbHVlICE9IDB4ZmYpIHsKLQkJaW50IHJldCA9IG92NzY3MF93cml0ZShjLCB2YWxzLT5yZWdfbnVtLCB2YWxzLT52YWx1ZSk7CisJCWludCByZXQgPSBvdjc2NzBfd3JpdGUoc2QsIHZhbHMtPnJlZ19udW0sIHZhbHMtPnZhbHVlKTsKIAkJaWYgKHJldCA8IDApCiAJCQlyZXR1cm4gcmV0OwogCQl2YWxzKys7CkBAIC00NDIsMzQgKzQ1NCwzNSBAQAogLyoKICAqIFN0dWZmIHRoYXQga25vd3MgYWJvdXQgdGhlIHNlbnNvci4KICAqLwotc3RhdGljIHZvaWQgb3Y3NjcwX3Jlc2V0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW50IG92NzY3MF9yZXNldChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgdmFsKQogewotCW92NzY3MF93cml0ZShjbGllbnQsIFJFR19DT003LCBDT003X1JFU0VUKTsKKwlvdjc2NzBfd3JpdGUoc2QsIFJFR19DT003LCBDT003X1JFU0VUKTsKIAltc2xlZXAoMSk7CisJcmV0dXJuIDA7CiB9CiAKIAotc3RhdGljIGludCBvdjc2NzBfaW5pdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBvdjc2NzBfaW5pdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgdmFsKQogewotCXJldHVybiBvdjc2NzBfd3JpdGVfYXJyYXkoY2xpZW50LCBvdjc2NzBfZGVmYXVsdF9yZWdzKTsKKwlyZXR1cm4gb3Y3NjcwX3dyaXRlX2FycmF5KHNkLCBvdjc2NzBfZGVmYXVsdF9yZWdzKTsKIH0KIAogCiAKLXN0YXRpYyBpbnQgb3Y3NjcwX2RldGVjdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBvdjc2NzBfZGV0ZWN0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7CiAJdW5zaWduZWQgY2hhciB2OwogCWludCByZXQ7CiAKLQlyZXQgPSBvdjc2NzBfaW5pdChjbGllbnQpOworCXJldCA9IG92NzY3MF9pbml0KHNkLCAwKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKLQlyZXQgPSBvdjc2NzBfcmVhZChjbGllbnQsIFJFR19NSURILCAmdik7CisJcmV0ID0gb3Y3NjcwX3JlYWQoc2QsIFJFR19NSURILCAmdik7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAJaWYgKHYgIT0gMHg3ZikgLyogT1YgbWFudWYuIGlkLiAqLwogCQlyZXR1cm4gLUVOT0RFVjsKLQlyZXQgPSBvdjc2NzBfcmVhZChjbGllbnQsIFJFR19NSURMLCAmdik7CisJcmV0ID0gb3Y3NjcwX3JlYWQoc2QsIFJFR19NSURMLCAmdik7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAJaWYgKHYgIT0gMHhhMikKQEAgLTQ3NywxMiArNDkwLDEyIEBACiAJLyoKIAkgKiBPSywgd2Uga25vdyB3ZSBoYXZlIGFuIE9tbmlWaXNpb24gY2hpcC4uLmJ1dCB3aGljaCBvbmU/CiAJICovCi0JcmV0ID0gb3Y3NjcwX3JlYWQoY2xpZW50LCBSRUdfUElELCAmdik7CisJcmV0ID0gb3Y3NjcwX3JlYWQoc2QsIFJFR19QSUQsICZ2KTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAlpZiAodiAhPSAweDc2KSAgLyogUElEICsgVkVSID0gMHg3NiAvIDB4NzMgKi8KIAkJcmV0dXJuIC1FTk9ERVY7Ci0JcmV0ID0gb3Y3NjcwX3JlYWQoY2xpZW50LCBSRUdfVkVSLCAmdik7CisJcmV0ID0gb3Y3NjcwX3JlYWQoc2QsIFJFR19WRVIsICZ2KTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAlpZiAodiAhPSAweDczKSAgLyogUElEICsgVkVSID0gMHg3NiAvIDB4NzMgKi8KQEAgLTYyNyw3ICs2NDAsNyBAQAogLyoKICAqIFN0b3JlIGEgc2V0IG9mIHN0YXJ0L3N0b3AgdmFsdWVzIGludG8gdGhlIGNhbWVyYS4KICAqLwotc3RhdGljIGludCBvdjc2NzBfc2V0X2h3KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBoc3RhcnQsIGludCBoc3RvcCwKK3N0YXRpYyBpbnQgb3Y3NjcwX3NldF9odyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgaHN0YXJ0LCBpbnQgaHN0b3AsCiAJCWludCB2c3RhcnQsIGludCB2c3RvcCkKIHsKIAlpbnQgcmV0OwpAQCAtNjM3LDI2ICs2NTAsMjYgQEAKICAqIGhzdGFydCBhcmUgaW4gaHJlZlsyOjBdLCBib3R0b20gMyBvZiBoc3RvcCBpbiBocmVmWzU6M10uICBUaGVyZSBpcwogICogYSBteXN0ZXJ5ICJlZGdlIG9mZnNldCIgdmFsdWUgaW4gdGhlIHRvcCB0d28gYml0cyBvZiBocmVmLgogICovCi0JcmV0ID0gIG92NzY3MF93cml0ZShjbGllbnQsIFJFR19IU1RBUlQsIChoc3RhcnQgPj4gMykgJiAweGZmKTsKLQlyZXQgKz0gb3Y3NjcwX3dyaXRlKGNsaWVudCwgUkVHX0hTVE9QLCAoaHN0b3AgPj4gMykgJiAweGZmKTsKLQlyZXQgKz0gb3Y3NjcwX3JlYWQoY2xpZW50LCBSRUdfSFJFRiwgJnYpOworCXJldCA9ICBvdjc2NzBfd3JpdGUoc2QsIFJFR19IU1RBUlQsIChoc3RhcnQgPj4gMykgJiAweGZmKTsKKwlyZXQgKz0gb3Y3NjcwX3dyaXRlKHNkLCBSRUdfSFNUT1AsIChoc3RvcCA+PiAzKSAmIDB4ZmYpOworCXJldCArPSBvdjc2NzBfcmVhZChzZCwgUkVHX0hSRUYsICZ2KTsKIAl2ID0gKHYgJiAweGMwKSB8ICgoaHN0b3AgJiAweDcpIDw8IDMpIHwgKGhzdGFydCAmIDB4Nyk7CiAJbXNsZWVwKDEwKTsKLQlyZXQgKz0gb3Y3NjcwX3dyaXRlKGNsaWVudCwgUkVHX0hSRUYsIHYpOworCXJldCArPSBvdjc2NzBfd3JpdGUoc2QsIFJFR19IUkVGLCB2KTsKIC8qCiAgKiBWZXJ0aWNhbDogc2ltaWxhciBhcnJhbmdlbWVudCwgYnV0IG9ubHkgMTAgYml0cy4KICAqLwotCXJldCArPSBvdjc2NzBfd3JpdGUoY2xpZW50LCBSRUdfVlNUQVJULCAodnN0YXJ0ID4+IDIpICYgMHhmZik7Ci0JcmV0ICs9IG92NzY3MF93cml0ZShjbGllbnQsIFJFR19WU1RPUCwgKHZzdG9wID4+IDIpICYgMHhmZik7Ci0JcmV0ICs9IG92NzY3MF9yZWFkKGNsaWVudCwgUkVHX1ZSRUYsICZ2KTsKKwlyZXQgKz0gb3Y3NjcwX3dyaXRlKHNkLCBSRUdfVlNUQVJULCAodnN0YXJ0ID4+IDIpICYgMHhmZik7CisJcmV0ICs9IG92NzY3MF93cml0ZShzZCwgUkVHX1ZTVE9QLCAodnN0b3AgPj4gMikgJiAweGZmKTsKKwlyZXQgKz0gb3Y3NjcwX3JlYWQoc2QsIFJFR19WUkVGLCAmdik7CiAJdiA9ICh2ICYgMHhmMCkgfCAoKHZzdG9wICYgMHgzKSA8PCAyKSB8ICh2c3RhcnQgJiAweDMpOwogCW1zbGVlcCgxMCk7Ci0JcmV0ICs9IG92NzY3MF93cml0ZShjbGllbnQsIFJFR19WUkVGLCB2KTsKKwlyZXQgKz0gb3Y3NjcwX3dyaXRlKHNkLCBSRUdfVlJFRiwgdik7CiAJcmV0dXJuIHJldDsKIH0KIAogCi1zdGF0aWMgaW50IG92NzY3MF9lbnVtX2ZtdChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgc3RydWN0IHY0bDJfZm10ZGVzYyAqZm10KQorc3RhdGljIGludCBvdjc2NzBfZW51bV9mbXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm10ZGVzYyAqZm10KQogewogCXN0cnVjdCBvdjc2NzBfZm9ybWF0X3N0cnVjdCAqb2ZtdDsKIApAQCAtNjcxLDcgKzY4NCw4IEBACiB9CiAKIAotc3RhdGljIGludCBvdjc2NzBfdHJ5X2ZtdChzdHJ1Y3QgaTJjX2NsaWVudCAqYywgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQsCitzdGF0aWMgaW50IG92NzY3MF90cnlfZm10X2ludGVybmFsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCisJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10LAogCQlzdHJ1Y3Qgb3Y3NjcwX2Zvcm1hdF9zdHJ1Y3QgKipyZXRfZm10LAogCQlzdHJ1Y3Qgb3Y3NjcwX3dpbl9zaXplICoqcmV0X3dzaXplKQogewpAQCAtNzE1LDE4ICs3MjksMjMgQEAKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBvdjc2NzBfdHJ5X2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlyZXR1cm4gb3Y3NjcwX3RyeV9mbXRfaW50ZXJuYWwoc2QsIGZtdCwgTlVMTCwgTlVMTCk7Cit9CisKIC8qCiAgKiBTZXQgYSBmb3JtYXQuCiAgKi8KLXN0YXRpYyBpbnQgb3Y3NjcwX3NfZm10KHN0cnVjdCBpMmNfY2xpZW50ICpjLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3N0YXRpYyBpbnQgb3Y3NjcwX3NfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQogewogCWludCByZXQ7CiAJc3RydWN0IG92NzY3MF9mb3JtYXRfc3RydWN0ICpvdmZtdDsKIAlzdHJ1Y3Qgb3Y3NjcwX3dpbl9zaXplICp3c2l6ZTsKLQlzdHJ1Y3Qgb3Y3NjcwX2luZm8gKmluZm8gPSBpMmNfZ2V0X2NsaWVudGRhdGEoYyk7Ci0JdW5zaWduZWQgY2hhciBjb203LCBjbGtyYzsKKwlzdHJ1Y3Qgb3Y3NjcwX2luZm8gKmluZm8gPSB0b19zdGF0ZShzZCk7CisJdW5zaWduZWQgY2hhciBjb203LCBjbGtyYyA9IDA7CiAKLQlyZXQgPSBvdjc2NzBfdHJ5X2ZtdChjLCBmbXQsICZvdmZtdCwgJndzaXplKTsKKwlyZXQgPSBvdjc2NzBfdHJ5X2ZtdF9pbnRlcm5hbChzZCwgZm10LCAmb3ZmbXQsICZ3c2l6ZSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAkvKgpAQCAtNzM1LDcgKzc1NCw3IEBACiAJICogdGhlIGNvbG9ycy4KIAkgKi8KIAlpZiAoZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9SR0I1NjUpIHsKLQkJcmV0ID0gb3Y3NjcwX3JlYWQoYywgUkVHX0NMS1JDLCAmY2xrcmMpOworCQlyZXQgPSBvdjc2NzBfcmVhZChzZCwgUkVHX0NMS1JDLCAmY2xrcmMpOwogCQlpZiAocmV0KQogCQkJcmV0dXJuIHJldDsKIAl9CkBAIC03NDcsMjAgKzc2NiwyMCBAQAogCSAqLwogCWNvbTcgPSBvdmZtdC0+cmVnc1swXS52YWx1ZTsKIAljb203IHw9IHdzaXplLT5jb203X2JpdDsKLQlvdjc2NzBfd3JpdGUoYywgUkVHX0NPTTcsIGNvbTcpOworCW92NzY3MF93cml0ZShzZCwgUkVHX0NPTTcsIGNvbTcpOwogCS8qCiAJICogTm93IHdyaXRlIHRoZSByZXN0IG9mIHRoZSBhcnJheS4gIEFsc28gc3RvcmUgc3RhcnQvc3RvcHMKIAkgKi8KLQlvdjc2NzBfd3JpdGVfYXJyYXkoYywgb3ZmbXQtPnJlZ3MgKyAxKTsKLQlvdjc2NzBfc2V0X2h3KGMsIHdzaXplLT5oc3RhcnQsIHdzaXplLT5oc3RvcCwgd3NpemUtPnZzdGFydCwKKwlvdjc2NzBfd3JpdGVfYXJyYXkoc2QsIG92Zm10LT5yZWdzICsgMSk7CisJb3Y3NjcwX3NldF9odyhzZCwgd3NpemUtPmhzdGFydCwgd3NpemUtPmhzdG9wLCB3c2l6ZS0+dnN0YXJ0LAogCQkJd3NpemUtPnZzdG9wKTsKIAlyZXQgPSAwOwogCWlmICh3c2l6ZS0+cmVncykKLQkJcmV0ID0gb3Y3NjcwX3dyaXRlX2FycmF5KGMsIHdzaXplLT5yZWdzKTsKKwkJcmV0ID0gb3Y3NjcwX3dyaXRlX2FycmF5KHNkLCB3c2l6ZS0+cmVncyk7CiAJaW5mby0+Zm10ID0gb3ZmbXQ7CiAKIAlpZiAoZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9SR0I1NjUgJiYgcmV0ID09IDApCi0JCXJldCA9IG92NzY3MF93cml0ZShjLCBSRUdfQ0xLUkMsIGNsa3JjKTsKKwkJcmV0ID0gb3Y3NjcwX3dyaXRlKHNkLCBSRUdfQ0xLUkMsIGNsa3JjKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC03NjgsNyArNzg3LDcgQEAKICAqIEltcGxlbWVudCBHL1NfUEFSTS4gIFRoZXJlIGlzIGEgImhpZ2ggcXVhbGl0eSIgbW9kZSB3ZSBjb3VsZCB0cnkKICAqIHRvIGRvIHNvbWVkYXk7IGZvciBub3csIHdlIGp1c3QgZG8gdGhlIGZyYW1lIHJhdGUgdHdlYWsuCiAgKi8KLXN0YXRpYyBpbnQgb3Y3NjcwX2dfcGFybShzdHJ1Y3QgaTJjX2NsaWVudCAqYywgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcGFybXMpCitzdGF0aWMgaW50IG92NzY3MF9nX3Bhcm0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqcGFybXMpCiB7CiAJc3RydWN0IHY0bDJfY2FwdHVyZXBhcm0gKmNwID0gJnBhcm1zLT5wYXJtLmNhcHR1cmU7CiAJdW5zaWduZWQgY2hhciBjbGtyYzsKQEAgLTc3Niw3ICs3OTUsNyBAQAogCiAJaWYgKHBhcm1zLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0ID0gb3Y3NjcwX3JlYWQoYywgUkVHX0NMS1JDLCAmY2xrcmMpOworCXJldCA9IG92NzY3MF9yZWFkKHNkLCBSRUdfQ0xLUkMsICZjbGtyYyk7CiAJaWYgKHJldCA8IDApCiAJCXJldHVybiByZXQ7CiAJbWVtc2V0KGNwLCAwLCBzaXplb2Yoc3RydWN0IHY0bDJfY2FwdHVyZXBhcm0pKTsKQEAgLTc4OCw3ICs4MDcsNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG92NzY3MF9zX3Bhcm0oc3RydWN0IGkyY19jbGllbnQgKmMsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKnBhcm1zKQorc3RhdGljIGludCBvdjc2NzBfc19wYXJtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKnBhcm1zKQogewogCXN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtICpjcCA9ICZwYXJtcy0+cGFybS5jYXB0dXJlOwogCXN0cnVjdCB2NGwyX2ZyYWN0ICp0cGYgPSAmY3AtPnRpbWVwZXJmcmFtZTsKQEAgLTgwMiw3ICs4MjEsNyBAQAogCS8qCiAJICogQ0xLUkMgaGFzIGEgcmVzZXJ2ZWQgYml0LCBzbyBsZXQncyBwcmVzZXJ2ZSBpdC4KIAkgKi8KLQlyZXQgPSBvdjc2NzBfcmVhZChjLCBSRUdfQ0xLUkMsICZjbGtyYyk7CisJcmV0ID0gb3Y3NjcwX3JlYWQoc2QsIFJFR19DTEtSQywgJmNsa3JjKTsKIAlpZiAocmV0IDwgMCkKIAkJcmV0dXJuIHJldDsKIAlpZiAodHBmLT5udW1lcmF0b3IgPT0gMCB8fCB0cGYtPmRlbm9taW5hdG9yID09IDApCkBAIC04MTYsNyArODM1LDcgQEAKIAljbGtyYyA9IChjbGtyYyAmIDB4ODApIHwgZGl2OwogCXRwZi0+bnVtZXJhdG9yID0gMTsKIAl0cGYtPmRlbm9taW5hdG9yID0gT1Y3NjcwX0ZSQU1FX1JBVEUvZGl2OwotCXJldHVybiBvdjc2NzBfd3JpdGUoYywgUkVHX0NMS1JDLCBjbGtyYyk7CisJcmV0dXJuIG92NzY3MF93cml0ZShzZCwgUkVHX0NMS1JDLCBjbGtyYyk7CiB9CiAKIApAQCAtODI5LDcgKzg0OCw3IEBACiAKIAogCi1zdGF0aWMgaW50IG92NzY3MF9zdG9yZV9jbWF0cml4KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCitzdGF0aWMgaW50IG92NzY3MF9zdG9yZV9jbWF0cml4KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCiAJCWludCBtYXRyaXhbQ01BVFJJWF9MRU5dKQogewogCWludCBpLCByZXQ7CkBAIC04MzksNyArODU4LDcgQEAKIAkgKiBXZWlyZCBjcmFwIHNlZW1zIHRvIGV4aXN0IGluIHRoZSB1cHBlciBwYXJ0IG9mCiAJICogdGhlIHNpZ24gYml0cyByZWdpc3Rlciwgc28gbGV0J3MgcHJlc2VydmUgaXQuCiAJICovCi0JcmV0ID0gb3Y3NjcwX3JlYWQoY2xpZW50LCBSRUdfQ01BVFJJWF9TSUdOLCAmc2lnbmJpdHMpOworCXJldCA9IG92NzY3MF9yZWFkKHNkLCBSRUdfQ01BVFJJWF9TSUdOLCAmc2lnbmJpdHMpOwogCXNpZ25iaXRzICY9IDB4YzA7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQ01BVFJJWF9MRU47IGkrKykgewpAQCAtODU4LDkgKzg3Nyw5IEBACiAJCQllbHNlCiAJCQkJcmF3ID0gbWF0cml4W2ldICYgMHhmZjsKIAkJfQotCQlyZXQgKz0gb3Y3NjcwX3dyaXRlKGNsaWVudCwgUkVHX0NNQVRSSVhfQkFTRSArIGksIHJhdyk7CisJCXJldCArPSBvdjc2NzBfd3JpdGUoc2QsIFJFR19DTUFUUklYX0JBU0UgKyBpLCByYXcpOwogCX0KLQlyZXQgKz0gb3Y3NjcwX3dyaXRlKGNsaWVudCwgUkVHX0NNQVRSSVhfU0lHTiwgc2lnbmJpdHMpOworCXJldCArPSBvdjc2NzBfd3JpdGUoc2QsIFJFR19DTUFUUklYX1NJR04sIHNpZ25iaXRzKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC05NDMsMjkgKzk2MiwyOSBAQAogCiAKIAotc3RhdGljIGludCBvdjc2NzBfdF9zYXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHZhbHVlKQorc3RhdGljIGludCBvdjc2NzBfc19zYXQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IHZhbHVlKQogewotCXN0cnVjdCBvdjc2NzBfaW5mbyAqaW5mbyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBvdjc2NzBfaW5mbyAqaW5mbyA9IHRvX3N0YXRlKHNkKTsKIAlpbnQgbWF0cml4W0NNQVRSSVhfTEVOXTsKIAlpbnQgcmV0OwogCiAJaW5mby0+c2F0ID0gdmFsdWU7CiAJb3Y3NjcwX2NhbGNfY21hdHJpeChpbmZvLCBtYXRyaXgpOwotCXJldCA9IG92NzY3MF9zdG9yZV9jbWF0cml4KGNsaWVudCwgbWF0cml4KTsKKwlyZXQgPSBvdjc2NzBfc3RvcmVfY21hdHJpeChzZCwgbWF0cml4KTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG92NzY3MF9xX3NhdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBfX3MzMiAqdmFsdWUpCitzdGF0aWMgaW50IG92NzY3MF9nX3NhdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBfX3MzMiAqdmFsdWUpCiB7Ci0Jc3RydWN0IG92NzY3MF9pbmZvICppbmZvID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IG92NzY3MF9pbmZvICppbmZvID0gdG9fc3RhdGUoc2QpOwogCiAJKnZhbHVlID0gaW5mby0+c2F0OwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IG92NzY3MF90X2h1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgdmFsdWUpCitzdGF0aWMgaW50IG92NzY3MF9zX2h1ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgdmFsdWUpCiB7Ci0Jc3RydWN0IG92NzY3MF9pbmZvICppbmZvID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IG92NzY3MF9pbmZvICppbmZvID0gdG9fc3RhdGUoc2QpOwogCWludCBtYXRyaXhbQ01BVFJJWF9MRU5dOwogCWludCByZXQ7CiAKQEAgLTk3MywxNCArOTkyLDE0IEBACiAJCXJldHVybiAtRUlOVkFMOwogCWluZm8tPmh1ZSA9IHZhbHVlOwogCW92NzY3MF9jYWxjX2NtYXRyaXgoaW5mbywgbWF0cml4KTsKLQlyZXQgPSBvdjc2NzBfc3RvcmVfY21hdHJpeChjbGllbnQsIG1hdHJpeCk7CisJcmV0ID0gb3Y3NjcwX3N0b3JlX2NtYXRyaXgoc2QsIG1hdHJpeCk7CiAJcmV0dXJuIHJldDsKIH0KIAogCi1zdGF0aWMgaW50IG92NzY3MF9xX2h1ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBfX3MzMiAqdmFsdWUpCitzdGF0aWMgaW50IG92NzY3MF9nX2h1ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBfX3MzMiAqdmFsdWUpCiB7Ci0Jc3RydWN0IG92NzY3MF9pbmZvICppbmZvID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IG92NzY3MF9pbmZvICppbmZvID0gdG9fc3RhdGUoc2QpOwogCiAJKnZhbHVlID0gaW5mby0+aHVlOwogCXJldHVybiAwOwpAQCAtOTk0LDggKzEwMTMsNyBAQAogewogCWlmICgodiAmIDB4ODApID09IDApCiAJCXJldHVybiB2ICsgMTI4OwotCWVsc2UKLQkJcmV0dXJuIDEyOCAtICh2ICYgMHg3Zik7CisJcmV0dXJuIDEyOCAtICh2ICYgMHg3Zik7CiB9CiAKIApAQCAtMTAwMywzNjkgKzEwMjEsMjc1IEBACiB7CiAJaWYgKHYgPiAxMjcpCiAJCXJldHVybiB2ICYgMHg3ZjsKLQllbHNlCi0JCXJldHVybiAoMTI4IC0gdikgfCAweDgwOworCXJldHVybiAoMTI4IC0gdikgfCAweDgwOwogfQogCi1zdGF0aWMgaW50IG92NzY3MF90X2JyaWdodG5lc3Moc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHZhbHVlKQorc3RhdGljIGludCBvdjc2NzBfc19icmlnaHRuZXNzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCB2YWx1ZSkKIHsKIAl1bnNpZ25lZCBjaGFyIGNvbTggPSAwLCB2OwogCWludCByZXQ7CiAKLQlvdjc2NzBfcmVhZChjbGllbnQsIFJFR19DT004LCAmY29tOCk7CisJb3Y3NjcwX3JlYWQoc2QsIFJFR19DT004LCAmY29tOCk7CiAJY29tOCAmPSB+Q09NOF9BRUM7Ci0Jb3Y3NjcwX3dyaXRlKGNsaWVudCwgUkVHX0NPTTgsIGNvbTgpOworCW92NzY3MF93cml0ZShzZCwgUkVHX0NPTTgsIGNvbTgpOwogCXYgPSBvdjc2NzBfYWJzX3RvX3NtKHZhbHVlKTsKLQlyZXQgPSBvdjc2NzBfd3JpdGUoY2xpZW50LCBSRUdfQlJJR0hULCB2KTsKKwlyZXQgPSBvdjc2NzBfd3JpdGUoc2QsIFJFR19CUklHSFQsIHYpOwogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgb3Y3NjcwX3FfYnJpZ2h0bmVzcyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBfX3MzMiAqdmFsdWUpCitzdGF0aWMgaW50IG92NzY3MF9nX2JyaWdodG5lc3Moc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgX19zMzIgKnZhbHVlKQogewogCXVuc2lnbmVkIGNoYXIgdiA9IDA7Ci0JaW50IHJldCA9IG92NzY3MF9yZWFkKGNsaWVudCwgUkVHX0JSSUdIVCwgJnYpOworCWludCByZXQgPSBvdjc2NzBfcmVhZChzZCwgUkVHX0JSSUdIVCwgJnYpOwogCiAJKnZhbHVlID0gb3Y3NjcwX3NtX3RvX2Ficyh2KTsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG92NzY3MF90X2NvbnRyYXN0KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCB2YWx1ZSkKK3N0YXRpYyBpbnQgb3Y3NjcwX3NfY29udHJhc3Qoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgaW50IHZhbHVlKQogewotCXJldHVybiBvdjc2NzBfd3JpdGUoY2xpZW50LCBSRUdfQ09OVFJBUywgKHVuc2lnbmVkIGNoYXIpIHZhbHVlKTsKKwlyZXR1cm4gb3Y3NjcwX3dyaXRlKHNkLCBSRUdfQ09OVFJBUywgKHVuc2lnbmVkIGNoYXIpIHZhbHVlKTsKIH0KIAotc3RhdGljIGludCBvdjc2NzBfcV9jb250cmFzdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBfX3MzMiAqdmFsdWUpCitzdGF0aWMgaW50IG92NzY3MF9nX2NvbnRyYXN0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIF9fczMyICp2YWx1ZSkKIHsKIAl1bnNpZ25lZCBjaGFyIHYgPSAwOwotCWludCByZXQgPSBvdjc2NzBfcmVhZChjbGllbnQsIFJFR19DT05UUkFTLCAmdik7CisJaW50IHJldCA9IG92NzY3MF9yZWFkKHNkLCBSRUdfQ09OVFJBUywgJnYpOwogCiAJKnZhbHVlID0gdjsKIAlyZXR1cm4gcmV0OwogfQogCi1zdGF0aWMgaW50IG92NzY3MF9xX2hmbGlwKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIF9fczMyICp2YWx1ZSkKK3N0YXRpYyBpbnQgb3Y3NjcwX2dfaGZsaXAoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgX19zMzIgKnZhbHVlKQogewogCWludCByZXQ7CiAJdW5zaWduZWQgY2hhciB2ID0gMDsKIAotCXJldCA9IG92NzY3MF9yZWFkKGNsaWVudCwgUkVHX01WRlAsICZ2KTsKKwlyZXQgPSBvdjc2NzBfcmVhZChzZCwgUkVHX01WRlAsICZ2KTsKIAkqdmFsdWUgPSAodiAmIE1WRlBfTUlSUk9SKSA9PSBNVkZQX01JUlJPUjsKIAlyZXR1cm4gcmV0OwogfQogCiAKLXN0YXRpYyBpbnQgb3Y3NjcwX3RfaGZsaXAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IHZhbHVlKQorc3RhdGljIGludCBvdjc2NzBfc19oZmxpcChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgdmFsdWUpCiB7CiAJdW5zaWduZWQgY2hhciB2ID0gMDsKIAlpbnQgcmV0OwogCi0JcmV0ID0gb3Y3NjcwX3JlYWQoY2xpZW50LCBSRUdfTVZGUCwgJnYpOworCXJldCA9IG92NzY3MF9yZWFkKHNkLCBSRUdfTVZGUCwgJnYpOwogCWlmICh2YWx1ZSkKIAkJdiB8PSBNVkZQX01JUlJPUjsKIAllbHNlCiAJCXYgJj0gfk1WRlBfTUlSUk9SOwogCW1zbGVlcCgxMCk7ICAvKiBGSVhNRSAqLwotCXJldCArPSBvdjc2NzBfd3JpdGUoY2xpZW50LCBSRUdfTVZGUCwgdik7CisJcmV0ICs9IG92NzY3MF93cml0ZShzZCwgUkVHX01WRlAsIHYpOwogCXJldHVybiByZXQ7CiB9CiAKIAogCi1zdGF0aWMgaW50IG92NzY3MF9xX3ZmbGlwKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIF9fczMyICp2YWx1ZSkKK3N0YXRpYyBpbnQgb3Y3NjcwX2dfdmZsaXAoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgX19zMzIgKnZhbHVlKQogewogCWludCByZXQ7CiAJdW5zaWduZWQgY2hhciB2ID0gMDsKIAotCXJldCA9IG92NzY3MF9yZWFkKGNsaWVudCwgUkVHX01WRlAsICZ2KTsKKwlyZXQgPSBvdjc2NzBfcmVhZChzZCwgUkVHX01WRlAsICZ2KTsKIAkqdmFsdWUgPSAodiAmIE1WRlBfRkxJUCkgPT0gTVZGUF9GTElQOwogCXJldHVybiByZXQ7CiB9CiAKIAotc3RhdGljIGludCBvdjc2NzBfdF92ZmxpcChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgdmFsdWUpCitzdGF0aWMgaW50IG92NzY3MF9zX3ZmbGlwKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCB2YWx1ZSkKIHsKIAl1bnNpZ25lZCBjaGFyIHYgPSAwOwogCWludCByZXQ7CiAKLQlyZXQgPSBvdjc2NzBfcmVhZChjbGllbnQsIFJFR19NVkZQLCAmdik7CisJcmV0ID0gb3Y3NjcwX3JlYWQoc2QsIFJFR19NVkZQLCAmdik7CiAJaWYgKHZhbHVlKQogCQl2IHw9IE1WRlBfRkxJUDsKIAllbHNlCiAJCXYgJj0gfk1WRlBfRkxJUDsKIAltc2xlZXAoMTApOyAgLyogRklYTUUgKi8KLQlyZXQgKz0gb3Y3NjcwX3dyaXRlKGNsaWVudCwgUkVHX01WRlAsIHYpOworCXJldCArPSBvdjc2NzBfd3JpdGUoc2QsIFJFR19NVkZQLCB2KTsKIAlyZXR1cm4gcmV0OwogfQogCi0KLXN0YXRpYyBzdHJ1Y3Qgb3Y3NjcwX2NvbnRyb2wgewotCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBxYzsKLQlpbnQgKCpxdWVyeSkoc3RydWN0IGkyY19jbGllbnQgKmMsIF9fczMyICp2YWx1ZSk7Ci0JaW50ICgqdHdlYWspKHN0cnVjdCBpMmNfY2xpZW50ICpjLCBpbnQgdmFsdWUpOwotfSBvdjc2NzBfY29udHJvbHNbXSA9Ci17Ci0JewotCQkucWMgPSB7Ci0JCQkuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTLAotCQkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAotCQkJLm5hbWUgPSAiQnJpZ2h0bmVzcyIsCi0JCQkubWluaW11bSA9IDAsCi0JCQkubWF4aW11bSA9IDI1NSwKLQkJCS5zdGVwID0gMSwKLQkJCS5kZWZhdWx0X3ZhbHVlID0gMHg4MCwKLQkJCS5mbGFncyA9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUgotCQl9LAotCQkudHdlYWsgPSBvdjc2NzBfdF9icmlnaHRuZXNzLAotCQkucXVlcnkgPSBvdjc2NzBfcV9icmlnaHRuZXNzLAotCX0sCi0JewotCQkucWMgPSB7Ci0JCQkuaWQgPSBWNEwyX0NJRF9DT05UUkFTVCwKLQkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJCS5uYW1lID0gIkNvbnRyYXN0IiwKLQkJCS5taW5pbXVtID0gMCwKLQkJCS5tYXhpbXVtID0gMTI3LAotCQkJLnN0ZXAgPSAxLAotCQkJLmRlZmF1bHRfdmFsdWUgPSAweDQwLCAgIC8qIFhYWCBvdjc2NzAgc3BlYyAqLwotCQkJLmZsYWdzID0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSCi0JCX0sCi0JCS50d2VhayA9IG92NzY3MF90X2NvbnRyYXN0LAotCQkucXVlcnkgPSBvdjc2NzBfcV9jb250cmFzdCwKLQl9LAotCXsKLQkJLnFjID0gewotCQkJLmlkID0gVjRMMl9DSURfU0FUVVJBVElPTiwKLQkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJCS5uYW1lID0gIlNhdHVyYXRpb24iLAotCQkJLm1pbmltdW0gPSAwLAotCQkJLm1heGltdW0gPSAyNTYsCi0JCQkuc3RlcCA9IDEsCi0JCQkuZGVmYXVsdF92YWx1ZSA9IDB4ODAsCi0JCQkuZmxhZ3MgPSBWNEwyX0NUUkxfRkxBR19TTElERVIKLQkJfSwKLQkJLnR3ZWFrID0gb3Y3NjcwX3Rfc2F0LAotCQkucXVlcnkgPSBvdjc2NzBfcV9zYXQsCi0JfSwKLQl7Ci0JCS5xYyA9IHsKLQkJCS5pZCA9IFY0TDJfQ0lEX0hVRSwKLQkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKLQkJCS5uYW1lID0gIkhVRSIsCi0JCQkubWluaW11bSA9IC0xODAsCi0JCQkubWF4aW11bSA9IDE4MCwKLQkJCS5zdGVwID0gNSwKLQkJCS5kZWZhdWx0X3ZhbHVlID0gMCwKLQkJCS5mbGFncyA9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUgotCQl9LAotCQkudHdlYWsgPSBvdjc2NzBfdF9odWUsCi0JCS5xdWVyeSA9IG92NzY3MF9xX2h1ZSwKLQl9LAotCXsKLQkJLnFjID0gewotCQkJLmlkID0gVjRMMl9DSURfVkZMSVAsCi0JCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU4sCi0JCQkubmFtZSA9ICJWZXJ0aWNhbCBmbGlwIiwKLQkJCS5taW5pbXVtID0gMCwKLQkJCS5tYXhpbXVtID0gMSwKLQkJCS5zdGVwID0gMSwKLQkJCS5kZWZhdWx0X3ZhbHVlID0gMCwKLQkJfSwKLQkJLnR3ZWFrID0gb3Y3NjcwX3RfdmZsaXAsCi0JCS5xdWVyeSA9IG92NzY3MF9xX3ZmbGlwLAotCX0sCi0JewotCQkucWMgPSB7Ci0JCQkuaWQgPSBWNEwyX0NJRF9IRkxJUCwKLQkJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKLQkJCS5uYW1lID0gIkhvcml6b250YWwgbWlycm9yIiwKLQkJCS5taW5pbXVtID0gMCwKLQkJCS5tYXhpbXVtID0gMSwKLQkJCS5zdGVwID0gMSwKLQkJCS5kZWZhdWx0X3ZhbHVlID0gMCwKLQkJfSwKLQkJLnR3ZWFrID0gb3Y3NjcwX3RfaGZsaXAsCi0JCS5xdWVyeSA9IG92NzY3MF9xX2hmbGlwLAotCX0sCi19OwotI2RlZmluZSBOX0NPTlRST0xTIChBUlJBWV9TSVpFKG92NzY3MF9jb250cm9scykpCi0KLXN0YXRpYyBzdHJ1Y3Qgb3Y3NjcwX2NvbnRyb2wgKm92NzY3MF9maW5kX2NvbnRyb2woX191MzIgaWQpCi17Ci0JaW50IGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTl9DT05UUk9MUzsgaSsrKQotCQlpZiAob3Y3NjcwX2NvbnRyb2xzW2ldLnFjLmlkID09IGlkKQotCQkJcmV0dXJuIG92NzY3MF9jb250cm9scyArIGk7Ci0JcmV0dXJuIE5VTEw7Ci19Ci0KLQotc3RhdGljIGludCBvdjc2NzBfcXVlcnljdHJsKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCitzdGF0aWMgaW50IG92NzY3MF9xdWVyeWN0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKIAkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKIHsKLQlzdHJ1Y3Qgb3Y3NjcwX2NvbnRyb2wgKmN0cmwgPSBvdjc2NzBfZmluZF9jb250cm9sKHFjLT5pZCk7Ci0KLQlpZiAoY3RybCA9PSBOVUxMKQotCQlyZXR1cm4gLUVJTlZBTDsKLQkqcWMgPSBjdHJsLT5xYzsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBvdjc2NzBfZ19jdHJsKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCi17Ci0Jc3RydWN0IG92NzY3MF9jb250cm9sICpvY3RybCA9IG92NzY3MF9maW5kX2NvbnRyb2woY3RybC0+aWQpOwotCWludCByZXQ7Ci0KLQlpZiAob2N0cmwgPT0gTlVMTCkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0ID0gb2N0cmwtPnF1ZXJ5KGNsaWVudCwgJmN0cmwtPnZhbHVlKTsKLQlpZiAocmV0ID49IDApCi0JCXJldHVybiAwOwotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgb3Y3NjcwX3NfY3RybChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQotewotCXN0cnVjdCBvdjc2NzBfY29udHJvbCAqb2N0cmwgPSBvdjc2NzBfZmluZF9jb250cm9sKGN0cmwtPmlkKTsKLQlpbnQgcmV0OwotCi0JaWYgKG9jdHJsID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCXJldCA9ICBvY3RybC0+dHdlYWsoY2xpZW50LCBjdHJsLT52YWx1ZSk7Ci0JaWYgKHJldCA+PSAwKQotCQlyZXR1cm4gMDsKLQlyZXR1cm4gcmV0OwotfQotCi0KLQotCi0KLQotLyoKLSAqIEJhc2ljIGkyYyBzdHVmZi4KLSAqLwotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIG92NzY3MF9kcml2ZXI7Ci0KLXN0YXRpYyBpbnQgb3Y3NjcwX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXB0ZXIpCi17Ci0JaW50IHJldDsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBvdjc2NzBfaW5mbyAqaW5mbzsKLQotCS8qCi0JICogRm9yIG5vdzogb25seSBkZWFsIHdpdGggYWRhcHRlcnMgd2UgcmVjb2duaXplLgotCSAqLwotCWlmIChhZGFwdGVyLT5pZCAhPSBJMkNfSFdfU01CVVNfQ0FGRSkKLQkJcmV0dXJuIC1FTk9ERVY7Ci0KLQljbGllbnQgPSBremFsbG9jKHNpemVvZiAoc3RydWN0IGkyY19jbGllbnQpLCBHRlBfS0VSTkVMKTsKLQlpZiAoISBjbGllbnQpCi0JCXJldHVybiAtRU5PTUVNOwotCWNsaWVudC0+YWRhcHRlciA9IGFkYXB0ZXI7Ci0JY2xpZW50LT5hZGRyID0gT1Y3NjcwX0kyQ19BRERSOwotCWNsaWVudC0+ZHJpdmVyID0gJm92NzY3MF9kcml2ZXIsCi0Jc3RyY3B5KGNsaWVudC0+bmFtZSwgIk9WNzY3MCIpOwotCS8qCi0JICogU2V0IHVwIG91ciBpbmZvIHN0cnVjdHVyZS4KLQkgKi8KLQlpbmZvID0ga3phbGxvYyhzaXplb2YgKHN0cnVjdCBvdjc2NzBfaW5mbyksIEdGUF9LRVJORUwpOwotCWlmICghIGluZm8pIHsKLQkJcmV0ID0gLUVOT01FTTsKLQkJZ290byBvdXRfZnJlZTsKLQl9Ci0JaW5mby0+Zm10ID0gJm92NzY3MF9mb3JtYXRzWzBdOwotCWluZm8tPnNhdCA9IDEyODsJLyogUmV2aWV3IHRoaXMgKi8KLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBpbmZvKTsKLQotCS8qCi0JICogTWFrZSBzdXJlIGl0J3MgYW4gb3Y3NjcwCi0JICovCi0JcmV0ID0gb3Y3NjcwX2RldGVjdChjbGllbnQpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X2ZyZWVfaW5mbzsKLQlyZXQgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X2ZyZWVfaW5mbzsKLQlyZXR1cm4gMDsKLQotICBvdXRfZnJlZV9pbmZvOgotCWtmcmVlKGluZm8pOwotICBvdXRfZnJlZToKLQlrZnJlZShjbGllbnQpOwotCXJldHVybiByZXQ7Ci19Ci0KLQotc3RhdGljIGludCBvdjc2NzBfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7Ci0Ja2ZyZWUoY2xpZW50KTsKLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IG92NzY3MF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsCi0JCXZvaWQgKmFyZykKLXsKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX0RCR19HX0NISVBfSURFTlQ6Ci0JCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGFyZywgVjRMMl9JREVOVF9PVjc2NzAsIDApOwotCi0JY2FzZSBWSURJT0NfSU5UX1JFU0VUOgotCQlvdjc2NzBfcmVzZXQoY2xpZW50KTsKLQkJcmV0dXJuIDA7Ci0KLQljYXNlIFZJRElPQ19JTlRfSU5JVDoKLQkJcmV0dXJuIG92NzY3MF9pbml0KGNsaWVudCk7Ci0KLQljYXNlIFZJRElPQ19FTlVNX0ZNVDoKLQkJcmV0dXJuIG92NzY3MF9lbnVtX2ZtdChjbGllbnQsIChzdHJ1Y3QgdjRsMl9mbXRkZXNjICopIGFyZyk7Ci0JY2FzZSBWSURJT0NfVFJZX0ZNVDoKLQkJcmV0dXJuIG92NzY3MF90cnlfZm10KGNsaWVudCwgKHN0cnVjdCB2NGwyX2Zvcm1hdCAqKSBhcmcsIE5VTEwsIE5VTEwpOwotCWNhc2UgVklESU9DX1NfRk1UOgotCQlyZXR1cm4gb3Y3NjcwX3NfZm10KGNsaWVudCwgKHN0cnVjdCB2NGwyX2Zvcm1hdCAqKSBhcmcpOwotCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKLQkJcmV0dXJuIG92NzY3MF9xdWVyeWN0cmwoY2xpZW50LCAoc3RydWN0IHY0bDJfcXVlcnljdHJsICopIGFyZyk7Ci0JY2FzZSBWSURJT0NfU19DVFJMOgotCQlyZXR1cm4gb3Y3NjcwX3NfY3RybChjbGllbnQsIChzdHJ1Y3QgdjRsMl9jb250cm9sICopIGFyZyk7Ci0JY2FzZSBWSURJT0NfR19DVFJMOgotCQlyZXR1cm4gb3Y3NjcwX2dfY3RybChjbGllbnQsIChzdHJ1Y3QgdjRsMl9jb250cm9sICopIGFyZyk7Ci0JY2FzZSBWSURJT0NfU19QQVJNOgotCQlyZXR1cm4gb3Y3NjcwX3NfcGFybShjbGllbnQsIChzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICopIGFyZyk7Ci0JY2FzZSBWSURJT0NfR19QQVJNOgotCQlyZXR1cm4gb3Y3NjcwX2dfcGFybShjbGllbnQsIChzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICopIGFyZyk7CisJLyogRmlsbCBpbiBtaW4sIG1heCwgc3RlcCBhbmQgZGVmYXVsdCB2YWx1ZSBmb3IgdGhlc2UgY29udHJvbHMuICovCisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMjU1LCAxLCAxMjgpOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMTI3LCAxLCA2NCk7CisJY2FzZSBWNEwyX0NJRF9WRkxJUDoKKwljYXNlIFY0TDJfQ0lEX0hGTElQOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEsIDEsIDApOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAyNTYsIDEsIDEyOCk7CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgLTE4MCwgMTgwLCA1LCAwKTsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKK3N0YXRpYyBpbnQgb3Y3NjcwX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCXJldHVybiBvdjc2NzBfZ19icmlnaHRuZXNzKHNkLCAmY3RybC0+dmFsdWUpOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCXJldHVybiBvdjc2NzBfZ19jb250cmFzdChzZCwgJmN0cmwtPnZhbHVlKTsKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCXJldHVybiBvdjc2NzBfZ19zYXQoc2QsICZjdHJsLT52YWx1ZSk7CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJCXJldHVybiBvdjc2NzBfZ19odWUoc2QsICZjdHJsLT52YWx1ZSk7CisJY2FzZSBWNEwyX0NJRF9WRkxJUDoKKwkJcmV0dXJuIG92NzY3MF9nX3ZmbGlwKHNkLCAmY3RybC0+dmFsdWUpOworCWNhc2UgVjRMMl9DSURfSEZMSVA6CisJCXJldHVybiBvdjc2NzBfZ19oZmxpcChzZCwgJmN0cmwtPnZhbHVlKTsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CiAKK3N0YXRpYyBpbnQgb3Y3NjcwX3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCXJldHVybiBvdjc2NzBfc19icmlnaHRuZXNzKHNkLCBjdHJsLT52YWx1ZSk7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJcmV0dXJuIG92NzY3MF9zX2NvbnRyYXN0KHNkLCBjdHJsLT52YWx1ZSk7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQlyZXR1cm4gb3Y3NjcwX3Nfc2F0KHNkLCBjdHJsLT52YWx1ZSk7CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJCXJldHVybiBvdjc2NzBfc19odWUoc2QsIGN0cmwtPnZhbHVlKTsKKwljYXNlIFY0TDJfQ0lEX1ZGTElQOgorCQlyZXR1cm4gb3Y3NjcwX3NfdmZsaXAoc2QsIGN0cmwtPnZhbHVlKTsKKwljYXNlIFY0TDJfQ0lEX0hGTElQOgorCQlyZXR1cm4gb3Y3NjcwX3NfaGZsaXAoc2QsIGN0cmwtPnZhbHVlKTsKKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBvdjc2NzBfZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gIm92NzY3MCIsCi0JfSwKLQkuaWQgCQk9IEkyQ19EUklWRVJJRF9PVjc2NzAsCi0JLmF0dGFjaF9hZGFwdGVyID0gb3Y3NjcwX2F0dGFjaCwKLQkuZGV0YWNoX2NsaWVudAk9IG92NzY3MF9kZXRhY2gsCi0JLmNvbW1hbmQJPSBvdjc2NzBfY29tbWFuZCwKK3N0YXRpYyBpbnQgb3Y3NjcwX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQlzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX09WNzY3MCwgMCk7Cit9CisKKyNpZmRlZiBDT05GSUdfVklERU9fQURWX0RFQlVHCitzdGF0aWMgaW50IG92NzY3MF9nX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwl1bnNpZ25lZCBjaGFyIHZhbCA9IDA7CisJaW50IHJldDsKKworCWlmICghdjRsMl9jaGlwX21hdGNoX2kyY19jbGllbnQoY2xpZW50LCAmcmVnLT5tYXRjaCkpCisJCXJldHVybiAtRUlOVkFMOworCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKKwkJcmV0dXJuIC1FUEVSTTsKKwlyZXQgPSBvdjc2NzBfcmVhZChzZCwgcmVnLT5yZWcgJiAweGZmLCAmdmFsKTsKKwlyZWctPnZhbCA9IHZhbDsKKwlyZWctPnNpemUgPSAxOworCXJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgb3Y3NjcwX3NfcmVnaXN0ZXIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGJnX3JlZ2lzdGVyICpyZWcpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJaWYgKCF2NGwyX2NoaXBfbWF0Y2hfaTJjX2NsaWVudChjbGllbnQsICZyZWctPm1hdGNoKSkKKwkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pKQorCQlyZXR1cm4gLUVQRVJNOworCW92NzY3MF93cml0ZShzZCwgcmVnLT5yZWcgJiAweGZmLCByZWctPnZhbCAmIDB4ZmYpOworCXJldHVybiAwOworfQorI2VuZGlmCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgb3Y3NjcwX2NvcmVfb3BzID0geworCS5nX2NoaXBfaWRlbnQgPSBvdjc2NzBfZ19jaGlwX2lkZW50LAorCS5nX2N0cmwgPSBvdjc2NzBfZ19jdHJsLAorCS5zX2N0cmwgPSBvdjc2NzBfc19jdHJsLAorCS5xdWVyeWN0cmwgPSBvdjc2NzBfcXVlcnljdHJsLAorCS5yZXNldCA9IG92NzY3MF9yZXNldCwKKwkuaW5pdCA9IG92NzY3MF9pbml0LAorI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKKwkuZ19yZWdpc3RlciA9IG92NzY3MF9nX3JlZ2lzdGVyLAorCS5zX3JlZ2lzdGVyID0gb3Y3NjcwX3NfcmVnaXN0ZXIsCisjZW5kaWYKIH07CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIG92NzY3MF92aWRlb19vcHMgPSB7CisJLmVudW1fZm10ID0gb3Y3NjcwX2VudW1fZm10LAorCS50cnlfZm10ID0gb3Y3NjcwX3RyeV9mbXQsCisJLnNfZm10ID0gb3Y3NjcwX3NfZm10LAorCS5zX3Bhcm0gPSBvdjc2NzBfc19wYXJtLAorCS5nX3Bhcm0gPSBvdjc2NzBfZ19wYXJtLAorfTsKIAotLyoKLSAqIE1vZHVsZSBpbml0aWFsaXphdGlvbgotICovCi1zdGF0aWMgaW50IF9faW5pdCBvdjc2NzBfbW9kX2luaXQodm9pZCkKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIG92NzY3MF9vcHMgPSB7CisJLmNvcmUgPSAmb3Y3NjcwX2NvcmVfb3BzLAorCS52aWRlbyA9ICZvdjc2NzBfdmlkZW9fb3BzLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGludCBvdjc2NzBfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKLQlwcmludGsoS0VSTl9OT1RJQ0UgIk9tbmlWaXNpb24gb3Y3NjcwIHNlbnNvciBkcml2ZXIsIGF0IHlvdXIgc2VydmljZVxuIik7Ci0JcmV0dXJuIGkyY19hZGRfZHJpdmVyKCZvdjc2NzBfZHJpdmVyKTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOworCXN0cnVjdCBvdjc2NzBfaW5mbyAqaW5mbzsKKwlpbnQgcmV0OworCisJaW5mbyA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBvdjc2NzBfaW5mbyksIEdGUF9LRVJORUwpOworCWlmIChpbmZvID09IE5VTEwpCisJCXJldHVybiAtRU5PTUVNOworCXNkID0gJmluZm8tPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZvdjc2NzBfb3BzKTsKKworCS8qIE1ha2Ugc3VyZSBpdCdzIGFuIG92NzY3MCAqLworCXJldCA9IG92NzY3MF9kZXRlY3Qoc2QpOworCWlmIChyZXQpIHsKKwkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQkJImNoaXAgZm91bmQgQCAweCV4ICglcykgaXMgbm90IGFuIG92NzY3MCBjaGlwLlxuIiwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOworCQlrZnJlZShpbmZvKTsKKwkJcmV0dXJuIHJldDsKKwl9CisJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JTAyeCAoJXMpXG4iLAorCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CisKKwlpbmZvLT5mbXQgPSAmb3Y3NjcwX2Zvcm1hdHNbMF07CisJaW5mby0+c2F0ID0gMTI4OwkvKiBSZXZpZXcgdGhpcyAqLworCisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIF9fZXhpdCBvdjc2NzBfbW9kX2V4aXQodm9pZCkKKworc3RhdGljIGludCBvdjc2NzBfcmVtb3ZlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCiB7Ci0JaTJjX2RlbF9kcml2ZXIoJm92NzY3MF9kcml2ZXIpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZSh0b19zdGF0ZShzZCkpOworCXJldHVybiAwOwogfQogCi1tb2R1bGVfaW5pdChvdjc2NzBfbW9kX2luaXQpOwotbW9kdWxlX2V4aXQob3Y3NjcwX21vZF9leGl0KTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBvdjc2NzBfaWRbXSA9IHsKKwl7ICJvdjc2NzAiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIG92NzY3MF9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKKwkubmFtZSA9ICJvdjc2NzAiLAorCS5wcm9iZSA9IG92NzY3MF9wcm9iZSwKKwkucmVtb3ZlID0gb3Y3NjcwX3JlbW92ZSwKKwkuaWRfdGFibGUgPSBvdjc2NzBfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjc3MnguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3Y3NzJ4LmMKaW5kZXggM2M5ZTBiYS4uODRiMGZjMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vdjc3MnguYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292NzcyeC5jCkBAIC0yMTcsMTAgKzIxNywxMSBAQAogI2RlZmluZSBPQ0FQXzR4ICAgICAgICAgMHgwMwkvKiA0eCAqLwogCiAvKiBDT00zICovCi0jZGVmaW5lIFNXQVBfTUFTSyAgICAgICAweDM4CisjZGVmaW5lIFNXQVBfTUFTSyAgICAgICAoU1dBUF9SR0IgfCBTV0FQX1lVViB8IFNXQVBfTUwpCisjZGVmaW5lIElNR19NQVNLICAgICAgICAoVkZMSVBfSU1HIHwgSEZMSVBfSU1HKQogCi0jZGVmaW5lIFZGSU1HX09OX09GRiAgICAweDgwCS8qIFZlcnRpY2FsIGZsaXAgaW1hZ2UgT04vT0ZGIHNlbGVjdGlvbiAqLwotI2RlZmluZSBITUlNR19PTl9PRkYgICAgMHg0MAkvKiBIb3Jpem9udGFsIG1pcnJvciBpbWFnZSBPTi9PRkYgc2VsZWN0aW9uICovCisjZGVmaW5lIFZGTElQX0lNRyAgICAgICAweDgwCS8qIFZlcnRpY2FsIGZsaXAgaW1hZ2UgT04vT0ZGIHNlbGVjdGlvbiAqLworI2RlZmluZSBIRkxJUF9JTUcgICAgICAgMHg0MAkvKiBIb3Jpem9udGFsIG1pcnJvciBpbWFnZSBPTi9PRkYgc2VsZWN0aW9uICovCiAjZGVmaW5lIFNXQVBfUkdCICAgICAgICAweDIwCS8qIFN3YXAgQi9SICBvdXRwdXQgc2VxdWVuY2UgaW4gUkdCIG1vZGUgKi8KICNkZWZpbmUgU1dBUF9ZVVYgICAgICAgIDB4MTAJLyogU3dhcCBZL1VWIG91dHB1dCBzZXF1ZW5jZSBpbiBZVVYgbW9kZSAqLwogI2RlZmluZSBTV0FQX01MICAgICAgICAgMHgwOAkvKiBTd2FwIG91dHB1dCBNU0IvTFNCICovCkBAIC0yNzEsMTEgKzI3MiwxMyBAQAogI2RlZmluZSBTTENUX1FWR0EgICAgICAgMHg0MAkvKiAgIDEgOiBRVkdBICovCiAjZGVmaW5lIElUVTY1Nl9PTl9PRkYgICAweDIwCS8qIElUVTY1NiBwcm90b2NvbCBPTi9PRkYgc2VsZWN0aW9uICovCiAJCQkJLyogUkdCIG91dHB1dCBmb3JtYXQgY29udHJvbCAqLworI2RlZmluZSBGTVRfTUFTSyAgICAgICAgMHgwYwkvKiAgICAgIE1hc2sgb2YgY29sb3IgZm9ybWF0ICovCiAjZGVmaW5lIEZNVF9HQlI0MjIgICAgICAweDAwCS8qICAgICAgMDAgOiBHQlIgNDoyOjIgKi8KICNkZWZpbmUgRk1UX1JHQjU2NSAgICAgIDB4MDQJLyogICAgICAwMSA6IFJHQiA1NjUgKi8KICNkZWZpbmUgRk1UX1JHQjU1NSAgICAgIDB4MDgJLyogICAgICAxMCA6IFJHQiA1NTUgKi8KICNkZWZpbmUgRk1UX1JHQjQ0NCAgICAgIDB4MGMJLyogMTEgOiBSR0IgNDQ0ICovCiAJCQkJLyogT3V0cHV0IGZvcm1hdCBjb250cm9sICovCisjZGVmaW5lIE9GTVRfTUFTSyAgICAgICAweDAzICAgIC8qICAgICAgTWFzayBvZiBvdXRwdXQgZm9ybWF0ICovCiAjZGVmaW5lIE9GTVRfWVVWICAgICAgICAweDAwCS8qICAgICAgMDAgOiBZVVYgKi8KICNkZWZpbmUgT0ZNVF9QX0JSQVcgICAgIDB4MDEJLyogICAgICAwMSA6IFByb2Nlc3NlZCBCYXllciBSQVcgKi8KICNkZWZpbmUgT0ZNVF9SR0IgICAgICAgIDB4MDIJLyogICAgICAxMCA6IFJHQiAqLwpAQCAtMjk5LDcgKzMwMiw3IEBACiAjZGVmaW5lIEdBSU5fMnggICAgICAgICAweDAwCS8qICAgIDAwMCA6ICAgMnggKi8KICNkZWZpbmUgR0FJTl80eCAgICAgICAgIDB4MTAJLyogICAgMDAxIDogICA0eCAqLwogI2RlZmluZSBHQUlOXzh4ICAgICAgICAgMHgyMAkvKiAgICAwMTAgOiAgIDh4ICovCi0jZGVmaW5lIEdBSU5fMTZ4ICAgICAgICAweDMwCS8qIDAxMSA6ICAxNnggKi8KKyNkZWZpbmUgR0FJTl8xNnggICAgICAgIDB4MzAJLyogICAgMDExIDogIDE2eCAqLwogI2RlZmluZSBHQUlOXzMyeCAgICAgICAgMHg0MAkvKiAgICAxMDAgOiAgMzJ4ICovCiAjZGVmaW5lIEdBSU5fNjR4ICAgICAgICAweDUwCS8qIDEwMSA6ICA2NHggKi8KICNkZWZpbmUgR0FJTl8xMjh4ICAgICAgIDB4NjAJLyogMTEwIDogMTI4eCAqLwpAQCAtMzU2LDEzICszNTksNiBAQAogI2RlZmluZSBWT1NaX1FWR0EgICAgICAgMHg3OAogCiAvKgotICogYml0IGNvbmZpZ3VyZSAoMzIgYml0KQotICogdGhpcyBpcyB1c2VkIGluIHN0cnVjdCBvdjc3MnhfY29sb3JfZm9ybWF0IDo6IG9wdGlvbgotICovCi0jZGVmaW5lIE9QX1VWICAgICAgIDB4MDAwMDAwMDEKLSNkZWZpbmUgT1BfU1dBUF9SR0IgMHgwMDAwMDAwMgotCi0vKgogICogSUQKICAqLwogI2RlZmluZSBPVjc3MjAgIDB4NzcyMApAQCAtMzgwLDggKzM3Niw5IEBACiBzdHJ1Y3Qgb3Y3NzJ4X2NvbG9yX2Zvcm1hdCB7CiAJY2hhciAgICAgICAgICAgICAgICAgICAgICpuYW1lOwogCV9fdTMyICAgICAgICAgICAgICAgICAgICAgZm91cmNjOwotCWNvbnN0IHN0cnVjdCByZWd2YWxfbGlzdCAqcmVnczsKLQl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgIG9wdGlvbjsKKwl1OCAgICAgICAgICAgICAgICAgICAgICAgIGRzcDM7CisJdTggICAgICAgICAgICAgICAgICAgICAgICBjb20zOworCXU4ICAgICAgICAgICAgICAgICAgICAgICAgY29tNzsKIH07CiAKIHN0cnVjdCBvdjc3Mnhfd2luX3NpemUgewpAQCAtMzk5LDM5ICszOTYsMTMgQEAKIAljb25zdCBzdHJ1Y3Qgb3Y3NzJ4X2NvbG9yX2Zvcm1hdCAqZm10OwogCWNvbnN0IHN0cnVjdCBvdjc3Mnhfd2luX3NpemUgICAgICp3aW47CiAJaW50ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1vZGVsOworCXVuc2lnbmVkIGludCAgICAgICAgICAgICAgICAgICAgICBmbGFnX3ZmbGlwOjE7CisJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgICAgICAgIGZsYWdfaGZsaXA6MTsKIH07CiAKICNkZWZpbmUgRU5ETUFSS0VSIHsgMHhmZiwgMHhmZiB9CiAKIC8qCi0gKiByZWdpc3RlciBzZXR0aW5nIGZvciBjb2xvciBmb3JtYXQKLSAqLwotc3RhdGljIGNvbnN0IHN0cnVjdCByZWd2YWxfbGlzdCBvdjc3MnhfUkdCNTU1X3JlZ3NbXSA9IHsKLQl7IENPTTMsIDB4MDAgfSwKLQl7IENPTTcsIEZNVF9SR0I1NTUgfCBPRk1UX1JHQiB9LAotCUVORE1BUktFUiwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndmFsX2xpc3Qgb3Y3NzJ4X1JHQjU2NV9yZWdzW10gPSB7Ci0JeyBDT00zLCAweDAwIH0sCi0JeyBDT003LCBGTVRfUkdCNTY1IHwgT0ZNVF9SR0IgfSwKLQlFTkRNQVJLRVIsCi19OwotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3ZhbF9saXN0IG92NzcyeF9ZWVVWX3JlZ3NbXSA9IHsKLQl7IENPTTMsIFNXQVBfWVVWIH0sCi0JeyBDT003LCBPRk1UX1lVViB9LAotCUVORE1BUktFUiwKLX07Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcmVndmFsX2xpc3Qgb3Y3NzJ4X1VWWVlfcmVnc1tdID0gewotCXsgQ09NMywgMHgwMCB9LAotCXsgQ09NNywgT0ZNVF9ZVVYgfSwKLQlFTkRNQVJLRVIsCi19OwotCi0KLS8qCiAgKiByZWdpc3RlciBzZXR0aW5nIGZvciB3aW5kb3cgc2l6ZQogICovCiBzdGF0aWMgY29uc3Qgc3RydWN0IHJlZ3ZhbF9saXN0IG92NzcyeF9xdmdhX3JlZ3NbXSA9IHsKQEAgLTUwMCwzOCArNDcxLDQ4IEBACiAvKgogICogY29sb3IgZm9ybWF0IGxpc3QKICAqLwotI2RlZmluZSBUX1lVWVYgMAogc3RhdGljIGNvbnN0IHN0cnVjdCBvdjc3MnhfY29sb3JfZm9ybWF0IG92NzcyeF9jZm10c1tdID0gewotCVtUX1lVWVZdID0geworCXsKIAkJU0VURk9VUkNDKFlVWVYpLAotCQkucmVncyAgID0gb3Y3NzJ4X1lZVVZfcmVncywKKwkJLmRzcDMgICA9IDB4MCwKKwkJLmNvbTMgICA9IFNXQVBfWVVWLAorCQkuY29tNyAgID0gT0ZNVF9ZVVYsCiAJfSwKIAl7CiAJCVNFVEZPVVJDQyhZVllVKSwKLQkJLnJlZ3MgICA9IG92NzcyeF9ZWVVWX3JlZ3MsCi0JCS5vcHRpb24gPSBPUF9VViwKKwkJLmRzcDMgICA9IFVWX09OLAorCQkuY29tMyAgID0gU1dBUF9ZVVYsCisJCS5jb203ICAgPSBPRk1UX1lVViwKIAl9LAogCXsKIAkJU0VURk9VUkNDKFVZVlkpLAotCQkucmVncyAgID0gb3Y3NzJ4X1VWWVlfcmVncywKKwkJLmRzcDMgICA9IDB4MCwKKwkJLmNvbTMgICA9IDB4MCwKKwkJLmNvbTcgICA9IE9GTVRfWVVWLAogCX0sCiAJewogCQlTRVRGT1VSQ0MoUkdCNTU1KSwKLQkJLnJlZ3MgICA9IG92NzcyeF9SR0I1NTVfcmVncywKLQkJLm9wdGlvbiA9IE9QX1NXQVBfUkdCLAorCQkuZHNwMyAgID0gMHgwLAorCQkuY29tMyAgID0gU1dBUF9SR0IsCisJCS5jb203ICAgPSBGTVRfUkdCNTU1IHwgT0ZNVF9SR0IsCiAJfSwKIAl7CiAJCVNFVEZPVVJDQyhSR0I1NTVYKSwKLQkJLnJlZ3MgICA9IG92NzcyeF9SR0I1NTVfcmVncywKKwkJLmRzcDMgICA9IDB4MCwKKwkJLmNvbTMgICA9IDB4MCwKKwkJLmNvbTcgICA9IEZNVF9SR0I1NTUgfCBPRk1UX1JHQiwKIAl9LAogCXsKIAkJU0VURk9VUkNDKFJHQjU2NSksCi0JCS5yZWdzICAgPSBvdjc3MnhfUkdCNTY1X3JlZ3MsCi0JCS5vcHRpb24gPSBPUF9TV0FQX1JHQiwKKwkJLmRzcDMgICA9IDB4MCwKKwkJLmNvbTMgICA9IFNXQVBfUkdCLAorCQkuY29tNyAgID0gRk1UX1JHQjU2NSB8IE9GTVRfUkdCLAogCX0sCiAJewogCQlTRVRGT1VSQ0MoUkdCNTY1WCksCi0JCS5yZWdzICAgPSBvdjc3MnhfUkdCNTY1X3JlZ3MsCisJCS5kc3AzICAgPSAweDAsCisJCS5jb20zICAgPSAweDAsCisJCS5jb203ICAgPSBGTVRfUkdCNTY1IHwgT0ZNVF9SR0IsCiAJfSwKIH07CiAKQEAgLTU2Miw2ICs1NDMsMjcgQEAKIAkucmVncyAgICAgPSBvdjc3MnhfcXZnYV9yZWdzLAogfTsKIAorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBvdjc3MnhfY29udHJvbHNbXSA9IHsKKwl7CisJCS5pZAkJPSBWNEwyX0NJRF9WRkxJUCwKKwkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJLm5hbWUJCT0gIkZsaXAgVmVydGljYWxseSIsCisJCS5taW5pbXVtCT0gMCwKKwkJLm1heGltdW0JPSAxLAorCQkuc3RlcAkJPSAxLAorCQkuZGVmYXVsdF92YWx1ZQk9IDAsCisJfSwKKwl7CisJCS5pZAkJPSBWNEwyX0NJRF9IRkxJUCwKKwkJLnR5cGUJCT0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwkJLm5hbWUJCT0gIkZsaXAgSG9yaXpvbnRhbGx5IiwKKwkJLm1pbmltdW0JPSAwLAorCQkubWF4aW11bQk9IDEsCisJCS5zdGVwCQk9IDEsCisJCS5kZWZhdWx0X3ZhbHVlCT0gMCwKKwl9LAorfTsKKwogCiAvKgogICogZ2VuZXJhbCBmdW5jdGlvbgpAQCAtNTg3LDggKzU4OSwxMSBAQAogCQkJCQkgIHU4ICBzZXQpCiB7CiAJczMyIHZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIGNvbW1hbmQpOworCWlmICh2YWwgPCAwKQorCQlyZXR1cm4gdmFsOworCiAJdmFsICY9IH5tYXNrOwotCXZhbCB8PSAgc2V0OworCXZhbCB8PSBzZXQgJiBtYXNrOwogCiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBjb21tYW5kLCB2YWwpOwogfQpAQCAtNjM1LDc0ICs2NDAsMjQgQEAKIHN0YXRpYyBpbnQgb3Y3NzJ4X3N0YXJ0X2NhcHR1cmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CiAJc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG92NzcyeF9wcml2LCBpY2QpOwotCWludCAgICAgICAgICAgICAgICAgcmV0OwogCi0JaWYgKCFwcml2LT53aW4pCi0JCXByaXYtPndpbiA9ICZvdjc3Mnhfd2luX3ZnYTsKLQlpZiAoIXByaXYtPmZtdCkKLQkJcHJpdi0+Zm10ID0gJm92NzcyeF9jZm10c1tUX1lVWVZdOwotCi0JLyoKLQkgKiByZXNldCBoYXJkd2FyZQotCSAqLwotCW92NzcyeF9yZXNldChwcml2LT5jbGllbnQpOwotCi0JLyoKLQkgKiBzZXQgY29sb3IgZm9ybWF0Ci0JICovCi0JcmV0ID0gb3Y3NzJ4X3dyaXRlX2FycmF5KHByaXYtPmNsaWVudCwgcHJpdi0+Zm10LT5yZWdzKTsKLQlpZiAocmV0IDwgMCkKLQkJZ290byBzdGFydF9lbmQ7Ci0KLQkvKgotCSAqIHNldCBzaXplIGZvcm1hdAotCSAqLwotCXJldCA9IG92NzcyeF93cml0ZV9hcnJheShwcml2LT5jbGllbnQsIHByaXYtPndpbi0+cmVncyk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gc3RhcnRfZW5kOwotCi0JLyoKLQkgKiBzZXQgQ09NNyBiaXQgKCBRVkdBIG9yIFZHQSApCi0JICovCi0JcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KHByaXYtPmNsaWVudCwKLQkJCSAgICAgIENPTTcsIFNMQ1RfTUFTSywgcHJpdi0+d2luLT5jb203X2JpdCk7Ci0JaWYgKHJldCA8IDApCi0JCWdvdG8gc3RhcnRfZW5kOwotCi0JLyoKLQkgKiBzZXQgVVYgc2V0dGluZwotCSAqLwotCWlmIChwcml2LT5mbXQtPm9wdGlvbiAmIE9QX1VWKSB7Ci0JCXJldCA9IG92NzcyeF9tYXNrX3NldChwcml2LT5jbGllbnQsCi0JCQkJICAgICAgRFNQX0NUUkwzLCBVVl9NQVNLLCBVVl9PTik7Ci0JCWlmIChyZXQgPCAwKQotCQkJZ290byBzdGFydF9lbmQ7CisJaWYgKCFwcml2LT53aW4gfHwgIXByaXYtPmZtdCkgeworCQlkZXZfZXJyKCZpY2QtPmRldiwgIm5vcm0gb3Igd2luIHNlbGVjdCBlcnJvclxuIik7CisJCXJldHVybiAtRVBFUk07CiAJfQogCi0JLyoKLQkgKiBzZXQgU1dBUCBzZXR0aW5nCi0JICovCi0JaWYgKHByaXYtPmZtdC0+b3B0aW9uICYgT1BfU1dBUF9SR0IpIHsKLQkJcmV0ID0gb3Y3NzJ4X21hc2tfc2V0KHByaXYtPmNsaWVudCwKLQkJCQkgICAgICBDT00zLCBTV0FQX01BU0ssIFNXQVBfUkdCKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIHN0YXJ0X2VuZDsKLQl9CisJb3Y3NzJ4X21hc2tfc2V0KHByaXYtPmNsaWVudCwgQ09NMiwgU09GVF9TTEVFUF9NT0RFLCAwKTsKIAogCWRldl9kYmcoJmljZC0+ZGV2LAogCQkgImZvcm1hdCAlcywgd2luICVzXG4iLCBwcml2LT5mbXQtPm5hbWUsIHByaXYtPndpbi0+bmFtZSk7CiAKLXN0YXJ0X2VuZDoKLQlwcml2LT5mbXQgPSBOVUxMOwotCXByaXYtPndpbiA9IE5VTEw7Ci0KLQlyZXR1cm4gcmV0OworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IG92NzcyeF9zdG9wX2NhcHR1cmUoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QpCiB7CiAJc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG92NzcyeF9wcml2LCBpY2QpOwotCW92NzcyeF9yZXNldChwcml2LT5jbGllbnQpOworCW92NzcyeF9tYXNrX3NldChwcml2LT5jbGllbnQsIENPTTIsIFNPRlRfU0xFRVBfTU9ERSwgU09GVF9TTEVFUF9NT0RFKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtNzE4LDExICs2NzMsNTQgQEAKIAlzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICppY2wgPSBwcml2LT5jbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3MgPSBTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfCBTT0NBTV9NQVNURVIgfAogCQlTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwKLQkJcHJpdi0+aW5mby0+YnVzd2lkdGg7CisJCVNPQ0FNX0RBVEFfQUNUSVZFX0hJR0ggfCBwcml2LT5pbmZvLT5idXN3aWR0aDsKIAogCXJldHVybiBzb2NfY2FtZXJhX2FwcGx5X3NlbnNvcl9mbGFncyhpY2wsIGZsYWdzKTsKIH0KIAorc3RhdGljIGludCBvdjc3MnhfZ2V0X2NvbnRyb2woc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBvdjc3MnhfcHJpdiwgaWNkKTsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX1ZGTElQOgorCQljdHJsLT52YWx1ZSA9IHByaXYtPmZsYWdfdmZsaXA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfSEZMSVA6CisJCWN0cmwtPnZhbHVlID0gcHJpdi0+ZmxhZ19oZmxpcDsKKwkJYnJlYWs7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IG92NzcyeF9zZXRfY29udHJvbChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IG92NzcyeF9wcml2ICpwcml2ID0gY29udGFpbmVyX29mKGljZCwgc3RydWN0IG92NzcyeF9wcml2LCBpY2QpOworCWludCByZXQgPSAwOworCXU4IHZhbDsKKworCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX1ZGTElQOgorCQl2YWwgPSBjdHJsLT52YWx1ZSA/IFZGTElQX0lNRyA6IDB4MDA7CisJCXByaXYtPmZsYWdfdmZsaXAgPSBjdHJsLT52YWx1ZTsKKwkJaWYgKHByaXYtPmluZm8tPmZsYWdzICYgT1Y3NzJYX0ZMQUdfVkZMSVApCisJCQl2YWwgXj0gVkZMSVBfSU1HOworCQlyZXQgPSBvdjc3MnhfbWFza19zZXQocHJpdi0+Y2xpZW50LCBDT00zLCBWRkxJUF9JTUcsIHZhbCk7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfSEZMSVA6CisJCXZhbCA9IGN0cmwtPnZhbHVlID8gSEZMSVBfSU1HIDogMHgwMDsKKwkJcHJpdi0+ZmxhZ19oZmxpcCA9IGN0cmwtPnZhbHVlOworCQlpZiAocHJpdi0+aW5mby0+ZmxhZ3MgJiBPVjc3MlhfRkxBR19IRkxJUCkKKwkJCXZhbCBePSBIRkxJUF9JTUc7CisJCXJldCA9IG92NzcyeF9tYXNrX3NldChwcml2LT5jbGllbnQsIENPTTMsIEhGTElQX0lNRywgdmFsKTsKKwkJYnJlYWs7CisJfQorCisJcmV0dXJuIHJldDsKK30KKwogc3RhdGljIGludCBvdjc3MnhfZ2V0X2NoaXBfaWQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCiAJCQkgICAgICBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAgICppZCkKIHsKQEAgLTc4NywxMyArNzg1LDExIEBACiAJcmV0dXJuIHdpbjsKIH0KIAotCi1zdGF0aWMgaW50IG92NzcyeF9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICBfX3UzMiAgICAgICAgICAgICAgICAgICAgIHBpeGZtdCwKLQkJCSAgc3RydWN0IHY0bDJfcmVjdCAgICAgICAgICpyZWN0KQorc3RhdGljIGludCBvdjc3Mnhfc2V0X3BhcmFtcyhzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYsIHUzMiB3aWR0aCwgdTMyIGhlaWdodCwKKwkJCSAgICAgdTMyIHBpeGZtdCkKIHsKLQlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3Qgb3Y3NzJ4X3ByaXYsIGljZCk7CiAJaW50IHJldCA9IC1FSU5WQUw7CisJdTggIHZhbDsKIAlpbnQgaTsKIAogCS8qCkBAIC04MDMsMTcgKzc5OSw5OSBAQAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKG92NzcyeF9jZm10cyk7IGkrKykgewogCQlpZiAocGl4Zm10ID09IG92NzcyeF9jZm10c1tpXS5mb3VyY2MpIHsKIAkJCXByaXYtPmZtdCA9IG92NzcyeF9jZm10cyArIGk7Ci0JCQlyZXQgPSAwOwogCQkJYnJlYWs7CiAJCX0KIAl9CisJaWYgKCFwcml2LT5mbXQpCisJCWdvdG8gb3Y3NzJ4X3NldF9mbXRfZXJyb3I7CiAKIAkvKgogCSAqIHNlbGVjdCB3aW4KIAkgKi8KLQlwcml2LT53aW4gPSBvdjc3Mnhfc2VsZWN0X3dpbihyZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0KTsKKwlwcml2LT53aW4gPSBvdjc3Mnhfc2VsZWN0X3dpbih3aWR0aCwgaGVpZ2h0KTsKKworCS8qCisJICogcmVzZXQgaGFyZHdhcmUKKwkgKi8KKwlvdjc3MnhfcmVzZXQocHJpdi0+Y2xpZW50KTsKKworCS8qCisJICogc2V0IHNpemUgZm9ybWF0CisJICovCisJcmV0ID0gb3Y3NzJ4X3dyaXRlX2FycmF5KHByaXYtPmNsaWVudCwgcHJpdi0+d2luLT5yZWdzKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdjc3Mnhfc2V0X2ZtdF9lcnJvcjsKKworCS8qCisJICogc2V0IERTUF9DVFJMMworCSAqLworCXZhbCA9IHByaXYtPmZtdC0+ZHNwMzsKKwlpZiAodmFsKSB7CisJCXJldCA9IG92NzcyeF9tYXNrX3NldChwcml2LT5jbGllbnQsCisJCQkJICAgICAgRFNQX0NUUkwzLCBVVl9NQVNLLCB2YWwpOworCQlpZiAocmV0IDwgMCkKKwkJCWdvdG8gb3Y3NzJ4X3NldF9mbXRfZXJyb3I7CisJfQorCisJLyoKKwkgKiBzZXQgQ09NMworCSAqLworCXZhbCA9IHByaXYtPmZtdC0+Y29tMzsKKwlpZiAocHJpdi0+aW5mby0+ZmxhZ3MgJiBPVjc3MlhfRkxBR19WRkxJUCkKKwkJdmFsIHw9IFZGTElQX0lNRzsKKwlpZiAocHJpdi0+aW5mby0+ZmxhZ3MgJiBPVjc3MlhfRkxBR19IRkxJUCkKKwkJdmFsIHw9IEhGTElQX0lNRzsKKwlpZiAocHJpdi0+ZmxhZ192ZmxpcCkKKwkJdmFsIF49IFZGTElQX0lNRzsKKwlpZiAocHJpdi0+ZmxhZ19oZmxpcCkKKwkJdmFsIF49IEhGTElQX0lNRzsKKworCXJldCA9IG92NzcyeF9tYXNrX3NldChwcml2LT5jbGllbnQsCisJCQkgICAgICBDT00zLCBTV0FQX01BU0sgfCBJTUdfTUFTSywgdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdjc3Mnhfc2V0X2ZtdF9lcnJvcjsKKworCS8qCisJICogc2V0IENPTTcKKwkgKi8KKwl2YWwgPSBwcml2LT53aW4tPmNvbTdfYml0IHwgcHJpdi0+Zm10LT5jb203OworCXJldCA9IG92NzcyeF9tYXNrX3NldChwcml2LT5jbGllbnQsCisJCQkgICAgICBDT003LCAoU0xDVF9NQVNLIHwgRk1UX01BU0sgfCBPRk1UX01BU0spLAorCQkJICAgICAgdmFsKTsKKwlpZiAocmV0IDwgMCkKKwkJZ290byBvdjc3Mnhfc2V0X2ZtdF9lcnJvcjsKIAogCXJldHVybiByZXQ7CisKK292NzcyeF9zZXRfZm10X2Vycm9yOgorCisJb3Y3NzJ4X3Jlc2V0KHByaXYtPmNsaWVudCk7CisJcHJpdi0+d2luID0gTlVMTDsKKwlwcml2LT5mbXQgPSBOVUxMOworCisJcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBvdjc3Mnhfc2V0X2Nyb3Aoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQoreworCXN0cnVjdCBvdjc3MnhfcHJpdiAqcHJpdiA9IGNvbnRhaW5lcl9vZihpY2QsIHN0cnVjdCBvdjc3MnhfcHJpdiwgaWNkKTsKKworCWlmICghcHJpdi0+Zm10KQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXJldHVybiBvdjc3Mnhfc2V0X3BhcmFtcyhwcml2LCByZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0LAorCQkJCSBwcml2LT5mbXQtPmZvdXJjYyk7Cit9CisKK3N0YXRpYyBpbnQgb3Y3NzJ4X3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCisJCQkgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgb3Y3NzJ4X3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3Qgb3Y3NzJ4X3ByaXYsIGljZCk7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisKKwlyZXR1cm4gb3Y3NzJ4X3NldF9wYXJhbXMocHJpdiwgcGl4LT53aWR0aCwgcGl4LT5oZWlnaHQsCisJCQkJIHBpeC0+cGl4ZWxmb3JtYXQpOwogfQogCiBzdGF0aWMgaW50IG92NzcyeF90cnlfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLApAQCAtODg5LDcgKzk2Nyw2IEBACiAJCSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEocHJpdi0+Y2xpZW50LCBNSURIKSwKIAkJIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShwcml2LT5jbGllbnQsIE1JREwpKTsKIAotCiAJcmV0dXJuIHNvY19jYW1lcmFfdmlkZW9fc3RhcnQoaWNkKTsKIH0KIApAQCAtOTA2LDEwICs5ODMsMTUgQEAKIAkucmVsZWFzZQkJPSBvdjc3MnhfcmVsZWFzZSwKIAkuc3RhcnRfY2FwdHVyZQkJPSBvdjc3Mnhfc3RhcnRfY2FwdHVyZSwKIAkuc3RvcF9jYXB0dXJlCQk9IG92NzcyeF9zdG9wX2NhcHR1cmUsCisJLnNldF9jcm9wCQk9IG92NzcyeF9zZXRfY3JvcCwKIAkuc2V0X2ZtdAkJPSBvdjc3Mnhfc2V0X2ZtdCwKIAkudHJ5X2ZtdAkJPSBvdjc3MnhfdHJ5X2ZtdCwKIAkuc2V0X2J1c19wYXJhbQkJPSBvdjc3Mnhfc2V0X2J1c19wYXJhbSwKIAkucXVlcnlfYnVzX3BhcmFtCT0gb3Y3NzJ4X3F1ZXJ5X2J1c19wYXJhbSwKKwkuY29udHJvbHMJCT0gb3Y3NzJ4X2NvbnRyb2xzLAorCS5udW1fY29udHJvbHMJCT0gQVJSQVlfU0laRShvdjc3MnhfY29udHJvbHMpLAorCS5nZXRfY29udHJvbAkJPSBvdjc3MnhfZ2V0X2NvbnRyb2wsCisJLnNldF9jb250cm9sCQk9IG92NzcyeF9zZXRfY29udHJvbCwKIAkuZ2V0X2NoaXBfaWQJCT0gb3Y3NzJ4X2dldF9jaGlwX2lkLAogI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKIAkuZ2V0X3JlZ2lzdGVyCQk9IG92NzcyeF9nZXRfcmVnaXN0ZXIsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9vdmNhbWNoaXBfY29yZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3ZjYW1jaGlwX2NvcmUuYwppbmRleCBjODQxZjRlLi5kNTczZDg0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9vdmNhbWNoaXBfY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3ZjYW1jaGlwL292Y2FtY2hpcF9jb3JlLmMKQEAgLTE1LDYgKzE1LDkgQEAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogI2luY2x1ZGUgIm92Y2FtY2hpcF9wcml2LmgiCiAKICNkZWZpbmUgRFJJVkVSX1ZFUlNJT04gInYyLjI3IGZvciBMaW51eCAyLjYiCkBAIC00NCw2ICs0Nyw3IEBACiBNT0RVTEVfREVTQ1JJUFRJT04oRFJJVkVSX0RFU0MpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCisKIC8qIFJlZ2lzdGVycyBjb21tb24gdG8gYWxsIGNoaXBzLCB0aGF0IGFyZSBuZWVkZWQgZm9yIGRldGVjdGlvbiAqLwogI2RlZmluZSBHRU5FUklDX1JFR19JRF9ISUdIICAgICAgIDB4MUMJLyogbWFudWZhY3R1cmVyIElEIE1TQiAqLwogI2RlZmluZSBHRU5FUklDX1JFR19JRF9MT1cgICAgICAgIDB4MUQJLyogbWFudWZhY3R1cmVyIElEIExTQiAqLwpAQCAtNjEsMTAgKzY1LDYgQEAKIAlbQ0NfT1Y2NjMwQUZdCT0gIk9WNjYzMEFGIiwKIH07CiAKLS8qIEZvcndhcmQgZGVjbGFyYXRpb25zICovCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHJpdmVyOwotc3RhdGljIHN0cnVjdCBpMmNfY2xpZW50IGNsaWVudF90ZW1wbGF0ZTsKLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogaW50IG92X3dyaXRlX3JlZ3ZhbHMoc3RydWN0IGkyY19jbGllbnQgKmMsIHN0cnVjdCBvdmNhbWNoaXBfcmVndmFscyAqcnZhbHMpCkBAIC0yNTMsMTEyICsyNTMsMzYgQEAKIAogCS8qIFRlc3QgZm9yIDd4eDAgKi8KIAlQREVCVUcoMywgIlRlc3RpbmcgZm9yIDBWN3h4MCIpOwotCWMtPmFkZHIgPSBPVjd4eDBfU0lEOwotCWlmIChpbml0X2NhbWNoaXAoYykgPCAwKSB7Ci0JCS8qIFRlc3QgZm9yIDZ4eDAgKi8KLQkJUERFQlVHKDMsICJUZXN0aW5nIGZvciAwVjZ4eDAiKTsKLQkJYy0+YWRkciA9IE9WNnh4MF9TSUQ7Ci0JCWlmIChpbml0X2NhbWNoaXAoYykgPCAwKSB7Ci0JCQlyZXR1cm4gLUVOT0RFVjsKLQkJfSBlbHNlIHsKLQkJCWlmIChvdjZ4eDBfZGV0ZWN0KGMpIDwgMCkgewotCQkJCVBFUlJPUigiRmFpbGVkIHRvIGluaXQgT1Y2eHgwIik7Ci0JCQkJcmV0dXJuIC1FSU87Ci0JCQl9Ci0JCX0KLQl9IGVsc2UgeworCWlmIChpbml0X2NhbWNoaXAoYykgPCAwKQorCQlyZXR1cm4gLUVOT0RFVjsKKwkvKiA3LWJpdCBhZGRyZXNzZXMgd2l0aCBiaXQgMCBzZXQgYXJlIGZvciB0aGUgT1Y3eHgwICovCisJaWYgKGMtPmFkZHIgJiAxKSB7CiAJCWlmIChvdjd4eDBfZGV0ZWN0KGMpIDwgMCkgewogCQkJUEVSUk9SKCJGYWlsZWQgdG8gaW5pdCBPVjd4eDAiKTsKIAkJCXJldHVybiAtRUlPOwogCQl9CisJCXJldHVybiAwOwogCX0KLQorCS8qIFRlc3QgZm9yIDZ4eDAgKi8KKwlQREVCVUcoMywgIlRlc3RpbmcgZm9yIDBWNnh4MCIpOworCWlmIChvdjZ4eDBfZGV0ZWN0KGMpIDwgMCkgeworCQlQRVJST1IoIkZhaWxlZCB0byBpbml0IE9WNnh4MCIpOworCQlyZXR1cm4gLUVJTzsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbnQgb3ZjYW1jaGlwX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCitzdGF0aWMgbG9uZyBvdmNhbWNoaXBfaW9jdGwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogewotCWludCByYyA9IDA7Ci0Jc3RydWN0IG92Y2FtY2hpcCAqb3Y7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmM7Ci0KLQkvKiBJMkMgaXMgbm90IGEgUG5QIGJ1cywgc28gd2UgY2FuIG5ldmVyIGJlIGNlcnRhaW4gdGhhdCB3ZSdyZSB0YWxraW5nCi0JICogdG8gdGhlIHJpZ2h0IGNoaXAuIFRvIHByZXZlbnQgZGFtYWdlIHRvIEVFUFJPTVMgYW5kIHN1Y2gsIG9ubHkKLQkgKiBhdHRhY2ggdG8gYWRhcHRlcnMgdGhhdCBhcmUga25vd24gdG8gY29udGFpbiBPViBjYW1lcmEgY2hpcHMuICovCi0KLQlzd2l0Y2ggKGFkYXAtPmlkKSB7Ci0JY2FzZSBJMkNfSFdfU01CVVNfT1Y1MTE6Ci0JY2FzZSBJMkNfSFdfU01CVVNfT1Y1MTg6Ci0JY2FzZSBJMkNfSFdfU01CVVNfVzk5NjhDRjoKLQkJUERFQlVHKDEsICJBZGFwdGVyIElEIDB4JTA2eCBhY2NlcHRlZCIsIGFkYXAtPmlkKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJUERFQlVHKDEsICJBZGFwdGVyIElEIDB4JTA2eCByZWplY3RlZCIsIGFkYXAtPmlkKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQotCi0JYyA9IGttYWxsb2Moc2l6ZW9mICpjLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWMpIHsKLQkJcmMgPSAtRU5PTUVNOwotCQlnb3RvIG5vX2NsaWVudDsKLQl9Ci0JbWVtY3B5KGMsICZjbGllbnRfdGVtcGxhdGUsIHNpemVvZiAqYyk7Ci0JYy0+YWRhcHRlciA9IGFkYXA7Ci0Jc3RyY3B5KGMtPm5hbWUsICJPVj8/Pz8iKTsKLQotCW92ID0ga3phbGxvYyhzaXplb2YgKm92LCBHRlBfS0VSTkVMKTsKLQlpZiAoIW92KSB7Ci0JCXJjID0gLUVOT01FTTsKLQkJZ290byBub19vdjsKLQl9Ci0JaTJjX3NldF9jbGllbnRkYXRhKGMsIG92KTsKLQotCXJjID0gb3ZjYW1jaGlwX2RldGVjdChjKTsKLQlpZiAocmMgPCAwKQotCQlnb3RvIGVycm9yOwotCi0Jc3RyY3B5KGMtPm5hbWUsIGNoaXBfbmFtZXNbb3YtPnN1YnR5cGVdKTsKLQotCVBERUJVRygxLCAiQ2FtZXJhIGNoaXAgZGV0ZWN0aW9uIGNvbXBsZXRlIik7Ci0KLQlpMmNfYXR0YWNoX2NsaWVudChjKTsKLQotCXJldHVybiByYzsKLWVycm9yOgotCWtmcmVlKG92KTsKLW5vX292OgotCWtmcmVlKGMpOwotbm9fY2xpZW50OgotCVBERUJVRygxLCAicmV0dXJuaW5nICVkIiwgcmMpOwotCXJldHVybiByYzsKLX0KLQotc3RhdGljIGludCBvdmNhbWNoaXBfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjKQotewotCXN0cnVjdCBvdmNhbWNoaXAgKm92ID0gaTJjX2dldF9jbGllbnRkYXRhKGMpOwotCWludCByYzsKLQotCXJjID0gb3YtPnNvcHMtPmZyZWUoYyk7Ci0JaWYgKHJjIDwgMCkKLQkJcmV0dXJuIHJjOwotCi0JaTJjX2RldGFjaF9jbGllbnQoYyk7Ci0KLQlrZnJlZShvdik7Ci0Ja2ZyZWUoYyk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgb3ZjYW1jaGlwX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmMsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3Qgb3ZjYW1jaGlwICpvdiA9IGkyY19nZXRfY2xpZW50ZGF0YShjKTsKKwlzdHJ1Y3Qgb3ZjYW1jaGlwICpvdiA9IHRvX292Y2FtY2hpcChzZCk7CisJc3RydWN0IGkyY19jbGllbnQgKmMgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAogCWlmICghb3YtPmluaXRpYWxpemVkICYmCiAJICAgIGNtZCAhPSBPVkNBTUNISVBfQ01EX1FfU1VCVFlQRSAmJgogCSAgICBjbWQgIT0gT1ZDQU1DSElQX0NNRF9JTklUSUFMSVpFKSB7Ci0JCWRldl9lcnIoJmMtPmRldiwgIkVSUk9SOiBDYW1lcmEgY2hpcCBub3QgaW5pdGlhbGl6ZWQgeWV0IVxuIik7CisJCXY0bDJfZXJyKHNkLCAiQ2FtZXJhIGNoaXAgbm90IGluaXRpYWxpemVkIHlldCFcbiIpOwogCQlyZXR1cm4gLUVQRVJNOwogCX0KIApAQCAtMzc5LDEwICszMDMsMTAgQEAKIAogCQlpZiAob3YtPm1vbm8pIHsKIAkJCWlmIChvdi0+c3VidHlwZSAhPSBDQ19PVjc2MjApCi0JCQkJZGV2X3dhcm4oJmMtPmRldiwgIldhcm5pbmc6IE1vbm9jaHJvbWUgbm90ICIKKwkJCQl2NGwyX3dhcm4oc2QsICJNb25vY2hyb21lIG5vdCAiCiAJCQkJCSJpbXBsZW1lbnRlZCBmb3IgdGhpcyBjaGlwXG4iKTsKIAkJCWVsc2UKLQkJCQlkZXZfaW5mbygmYy0+ZGV2LCAiSW5pdGlhbGl6aW5nIGNoaXAgYXMgIgorCQkJCXY0bDJfaW5mbyhzZCwgIkluaXRpYWxpemluZyBjaGlwIGFzICIKIAkJCQkJIm1vbm9jaHJvbWVcbiIpOwogCQl9CiAKQEAgLTQwMCwzNSArMzI0LDcyIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXIgPSB7Ci0JLmRyaXZlciA9IHsKLQkJLm5hbWUgPQkJIm92Y2FtY2hpcCIsCi0JfSwKLQkuaWQgPQkJCUkyQ19EUklWRVJJRF9PVkNBTUNISVAsCi0JLmF0dGFjaF9hZGFwdGVyID0Jb3ZjYW1jaGlwX2F0dGFjaCwKLQkuZGV0YWNoX2NsaWVudCA9CW92Y2FtY2hpcF9kZXRhY2gsCi0JLmNvbW1hbmQgPQkJb3ZjYW1jaGlwX2NvbW1hbmQsCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIG92Y2FtY2hpcF9jb3JlX29wcyA9IHsKKwkuaW9jdGwgPSBvdmNhbWNoaXBfaW9jdGwsCiB9OwogCi1zdGF0aWMgc3RydWN0IGkyY19jbGllbnQgY2xpZW50X3RlbXBsYXRlID0gewotCS5uYW1lID0JCSIodW5zZXQpIiwKLQkuZHJpdmVyID0JJmRyaXZlciwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIG92Y2FtY2hpcF9vcHMgPSB7CisJLmNvcmUgPSAmb3ZjYW1jaGlwX2NvcmVfb3BzLAogfTsKIAotc3RhdGljIGludCBfX2luaXQgb3ZjYW1jaGlwX2luaXQodm9pZCkKK3N0YXRpYyBpbnQgb3ZjYW1jaGlwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCisJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7Ci0jaWZkZWYgREVCVUcKLQlvdmNhbWNoaXBfZGVidWcgPSBkZWJ1ZzsKLSNlbmRpZgorCXN0cnVjdCBvdmNhbWNoaXAgKm92OworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisJaW50IHJjID0gMDsKIAotCVBJTkZPKERSSVZFUl9WRVJTSU9OICIgOiAiIERSSVZFUl9ERVNDKTsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmRyaXZlcik7CisJb3YgPSBremFsbG9jKHNpemVvZiAqb3YsIEdGUF9LRVJORUwpOworCWlmICghb3YpIHsKKwkJcmMgPSAtRU5PTUVNOworCQlnb3RvIG5vX292OworCX0KKwlzZCA9ICZvdi0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJm92Y2FtY2hpcF9vcHMpOworCisJcmMgPSBvdmNhbWNoaXBfZGV0ZWN0KGNsaWVudCk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBlcnJvcjsKKworCXY0bF9pbmZvKGNsaWVudCwgIiVzIGZvdW5kIEAgMHglMDJ4ICglcylcbiIsCisJCQljaGlwX25hbWVzW292LT5zdWJ0eXBlXSwgY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CisKKwlQREVCVUcoMSwgIkNhbWVyYSBjaGlwIGRldGVjdGlvbiBjb21wbGV0ZSIpOworCisJcmV0dXJuIHJjOworZXJyb3I6CisJa2ZyZWUob3YpOworbm9fb3Y6CisJUERFQlVHKDEsICJyZXR1cm5pbmcgJWQiLCByYyk7CisJcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgdm9pZCBfX2V4aXQgb3ZjYW1jaGlwX2V4aXQodm9pZCkKK3N0YXRpYyBpbnQgb3ZjYW1jaGlwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWkyY19kZWxfZHJpdmVyKCZkcml2ZXIpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgb3ZjYW1jaGlwICpvdiA9IHRvX292Y2FtY2hpcChzZCk7CisJaW50IHJjOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCXJjID0gb3YtPnNvcHMtPmZyZWUoY2xpZW50KTsKKwlpZiAocmMgPCAwKQorCQlyZXR1cm4gcmM7CisKKwlrZnJlZShvdik7CisJcmV0dXJuIDA7CiB9CiAKLW1vZHVsZV9pbml0KG92Y2FtY2hpcF9pbml0KTsKLW1vZHVsZV9leGl0KG92Y2FtY2hpcF9leGl0KTsKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBvdmNhbWNoaXBfaWRbXSA9IHsKKwl7ICJvdmNhbWNoaXAiLCAwIH0sCisJeyB9Cit9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIG92Y2FtY2hpcF9pZCk7CisKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKKwkubmFtZSA9ICJvdmNhbWNoaXAiLAorCS5wcm9iZSA9IG92Y2FtY2hpcF9wcm9iZSwKKwkucmVtb3ZlID0gb3ZjYW1jaGlwX3JlbW92ZSwKKwkuaWRfdGFibGUgPSBvdmNhbWNoaXBfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3ZjYW1jaGlwX3ByaXYuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vb3ZjYW1jaGlwL292Y2FtY2hpcF9wcml2LmgKaW5kZXggYTA1NjUwZi4uNGYwN2I3OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9vdmNhbWNoaXAvb3ZjYW1jaGlwX3ByaXYuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL292Y2FtY2hpcC9vdmNhbWNoaXBfcHJpdi5oCkBAIC0xNiw2ICsxNiw3IEBACiAjZGVmaW5lIF9fTElOVVhfT1ZDQU1DSElQX1BSSVZfSAogCiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1zdWJkZXYuaD4KICNpbmNsdWRlIDxtZWRpYS9vdmNhbWNoaXAuaD4KIAogI2lmZGVmIERFQlVHCkBAIC00Niw2ICs0Nyw3IEBACiB9OwogCiBzdHJ1Y3Qgb3ZjYW1jaGlwIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CiAJc3RydWN0IG92Y2FtY2hpcF9vcHMgKnNvcHM7CiAJdm9pZCAqc3ByaXY7ICAgICAgICAgICAgICAgLyogUHJpdmF0ZSBkYXRhIGZvciBPVjd4MTAuYyBldGMuLi4gKi8KIAlpbnQgc3VidHlwZTsgICAgICAgICAgICAgICAvKiA9IFNFTl9PVjc2MTAgZXRjLi4uICovCkBAIC01Myw2ICs1NSwxMSBAQAogCWludCBpbml0aWFsaXplZDsgICAgICAgICAgIC8qIE9WQ0FNQ0hJUF9DTURfSU5JVElBTElaRSB3YXMgc3VjY2Vzc2Z1bCAqLwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgb3ZjYW1jaGlwICp0b19vdmNhbWNoaXAoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qgb3ZjYW1jaGlwLCBzZCk7Cit9CisKIGV4dGVybiBzdHJ1Y3Qgb3ZjYW1jaGlwX29wcyBvdjZ4MjBfb3BzOwogZXh0ZXJuIHN0cnVjdCBvdmNhbWNoaXBfb3BzIG92NngzMF9vcHM7CiBleHRlcm4gc3RydWN0IG92Y2FtY2hpcF9vcHMgb3Y3eDEwX29wczsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL0tjb25maWcKaW5kZXggODU0YzJhOC4uZjliNjAwMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL0tjb25maWcKQEAgLTQwLDEwICs0MCwxMCBAQAogCXNlbGVjdCBEVkJfTEdEVDMzMFggaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1M1SDE0MDkgaWYgIURWQl9GRV9DVVNUT01JU0UKIAlzZWxlY3QgRFZCX1M1SDE0MTEgaWYgIURWQl9GRV9DVVNUT01JU0UKLQlzZWxlY3QgRFZCX1REQTEwMDQ4IGlmICFEVkJfRkVfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1REQTE4MjcxIGlmICFEVkJfRkVfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1NJTVBMRSBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVpFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1REQTgyOTAgaWYgIURWQl9GRV9DVVNUT01JWkUKKwlzZWxlY3QgRFZCX1REQTEwMDQ4IGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1REQTE4MjcxIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfU0lNUExFIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfVERBODI5MCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJLS0taGVscC0tLQogCiAJICBUaGlzIG9wdGlvbiBlbmFibGVzIGEgRFZCIGludGVyZmFjZSBmb3IgdGhlIHB2cnVzYjIgZHJpdmVyLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL01ha2VmaWxlIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL01ha2VmaWxlCmluZGV4IDRmZGEyZGUuLmRlMmZjMTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9NYWtlZmlsZQorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvTWFrZWZpbGUKQEAgLTIsMTQgKzIsMTUgQEAKIG9iai1wdnJ1c2IyLWRlYnVnaWZjLSQoQ09ORklHX1ZJREVPX1BWUlVTQjJfREVCVUdJRkMpIDo9IHB2cnVzYjItZGVidWdpZmMubwogb2JqLXB2cnVzYjItZHZiLSQoQ09ORklHX1ZJREVPX1BWUlVTQjJfRFZCKSA6PSBwdnJ1c2IyLWR2Yi5vCiAKLXB2cnVzYjItb2Jqcwk6PSBwdnJ1c2IyLWkyYy1jb3JlLm8gcHZydXNiMi1pMmMtY21kLXY0bDIubyBcCi0JCSAgIHB2cnVzYjItYXVkaW8ubyBwdnJ1c2IyLWkyYy1jaGlwcy12NGwyLm8gXAorcHZydXNiMi1vYmpzCTo9IHB2cnVzYjItaTJjLWNvcmUubyBcCisJCSAgIHB2cnVzYjItYXVkaW8ubyBcCiAJCSAgIHB2cnVzYjItZW5jb2Rlci5vIHB2cnVzYjItdmlkZW8tdjRsLm8gXAotCQkgICBwdnJ1c2IyLWVlcHJvbS5vIHB2cnVzYjItdHVuZXIubyBcCisJCSAgIHB2cnVzYjItZWVwcm9tLm8gXAogCQkgICBwdnJ1c2IyLW1haW4ubyBwdnJ1c2IyLWhkdy5vIHB2cnVzYjItdjRsMi5vIFwKIAkJICAgcHZydXNiMi1jdHJsLm8gcHZydXNiMi1zdGQubyBwdnJ1c2IyLWRldmF0dHIubyBcCiAJCSAgIHB2cnVzYjItY29udGV4dC5vIHB2cnVzYjItaW8ubyBwdnJ1c2IyLWlvcmVhZC5vIFwKIAkJICAgcHZydXNiMi1jeDI1ODR4LXY0bC5vIHB2cnVzYjItd204Nzc1Lm8gXAorCQkgICBwdnJ1c2IyLWNzNTNsMzJhLm8gXAogCQkgICAkKG9iai1wdnJ1c2IyLWR2Yi15KSBcCiAJCSAgICQob2JqLXB2cnVzYjItc3lzZnMteSkgJChvYmotcHZydXNiMi1kZWJ1Z2lmYy15KQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1hdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItYXVkaW8uYwppbmRleCBjZGVkYWE1Li5jY2YyYTNjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1hdWRpby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWF1ZGlvLmMKQEAgLTI2LDE0ICsyNiw2IEBACiAjaW5jbHVkZSA8bWVkaWEvbXNwMzQwMC5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAKLXN0cnVjdCBwdnIyX21zcDM0MDBfaGFuZGxlciB7Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHc7Ci0Jc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBwdnIyX2kyY19oYW5kbGVyIGkyY19oYW5kbGVyOwotCXVuc2lnbmVkIGxvbmcgc3RhbGVfbWFzazsKLX07Ci0KLQogCiBzdHJ1Y3Qgcm91dGluZ19zY2hlbWUgewogCWNvbnN0IGludCAqZGVmOwpAQCAtNjMsMTIzICs1NSwzMyBAQAogCX0sCiB9OwogCi0vKiBUaGlzIGZ1bmN0aW9uIHNlbGVjdHMgdGhlIGNvcnJlY3QgYXVkaW8gaW5wdXQgc291cmNlICovCi1zdGF0aWMgdm9pZCBzZXRfc3RlcmVvKHN0cnVjdCBwdnIyX21zcDM0MDBfaGFuZGxlciAqY3R4dCkKK3ZvaWQgcHZyMl9tc3AzNDAwX3N1YmRldl91cGRhdGUoc3RydWN0IHB2cjJfaGR3ICpoZHcsIHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjdHh0LT5oZHc7Ci0Jc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKLQljb25zdCBzdHJ1Y3Qgcm91dGluZ19zY2hlbWUgKnNwOwotCXVuc2lnbmVkIGludCBzaWQgPSBoZHctPmhkd19kZXNjLT5zaWduYWxfcm91dGluZ19zY2hlbWU7CisJaWYgKGhkdy0+aW5wdXRfZGlydHkgfHwgaGR3LT5mb3JjZV9kaXJ0eSkgeworCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOworCQljb25zdCBzdHJ1Y3Qgcm91dGluZ19zY2hlbWUgKnNwOworCQl1bnNpZ25lZCBpbnQgc2lkID0gaGR3LT5oZHdfZGVzYy0+c2lnbmFsX3JvdXRpbmdfc2NoZW1lOwogCi0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgbXNwMzQwMCB2NGwyIHNldF9zdGVyZW8iKTsKKwkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCAic3ViZGV2IG1zcDM0MDAgdjRsMiBzZXRfc3RlcmVvIik7CiAKLQlpZiAoKHNpZCA8IEFSUkFZX1NJWkUocm91dGluZ19zY2hlbWVzKSkgJiYKLQkgICAgKChzcCA9IHJvdXRpbmdfc2NoZW1lcyArIHNpZCkgIT0gTlVMTCkgJiYKLQkgICAgKGhkdy0+aW5wdXRfdmFsID49IDApICYmCi0JICAgIChoZHctPmlucHV0X3ZhbCA8IHNwLT5jbnQpKSB7Ci0JCXJvdXRlLmlucHV0ID0gc3AtPmRlZltoZHctPmlucHV0X3ZhbF07Ci0JfSBlbHNlIHsKLQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0VSUk9SX0xFR1MsCi0JCQkgICAiKioqIFdBUk5JTkcgKioqIGkyYyBtc3AzNDAwIHY0bDIgc2V0X3N0ZXJlbzoiCi0JCQkgICAiIEludmFsaWQgcm91dGluZyBzY2hlbWUgKCV1KSBhbmQvb3IgaW5wdXQgKCVkKSIsCi0JCQkgICBzaWQsaGR3LT5pbnB1dF92YWwpOwotCQlyZXR1cm47Ci0JfQotCXJvdXRlLm91dHB1dCA9IE1TUF9PVVRQVVQoTVNQX1NDX0lOX0RTUF9TQ0FSVDEpOwotCXB2cjJfaTJjX2NsaWVudF9jbWQoY3R4dC0+Y2xpZW50LFZJRElPQ19JTlRfU19BVURJT19ST1VUSU5HLCZyb3V0ZSk7Ci19Ci0KLQotc3RhdGljIGludCBjaGVja19zdGVyZW8oc3RydWN0IHB2cjJfbXNwMzQwMF9oYW5kbGVyICpjdHh0KQotewotCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gY3R4dC0+aGR3OwotCXJldHVybiBoZHctPmlucHV0X2RpcnR5OwotfQotCi0KLXN0cnVjdCBwdnIyX21zcDM0MDBfb3BzIHsKLQl2b2lkICgqdXBkYXRlKShzdHJ1Y3QgcHZyMl9tc3AzNDAwX2hhbmRsZXIgKik7Ci0JaW50ICgqY2hlY2spKHN0cnVjdCBwdnIyX21zcDM0MDBfaGFuZGxlciAqKTsKLX07Ci0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX21zcDM0MDBfb3BzIG1zcDM0MDBfb3BzW10gPSB7Ci0JeyAudXBkYXRlID0gc2V0X3N0ZXJlbywgLmNoZWNrID0gY2hlY2tfc3RlcmVvfSwKLX07Ci0KLQotc3RhdGljIGludCBtc3AzNDAwX2NoZWNrKHN0cnVjdCBwdnIyX21zcDM0MDBfaGFuZGxlciAqY3R4dCkKLXsKLQl1bnNpZ25lZCBsb25nIG1zazsKLQl1bnNpZ25lZCBpbnQgaWR4OwotCi0JZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKG1zcDM0MDBfb3BzKTsgaWR4KyspIHsKLQkJbXNrID0gMSA8PCBpZHg7Ci0JCWlmIChjdHh0LT5zdGFsZV9tYXNrICYgbXNrKSBjb250aW51ZTsKLQkJaWYgKG1zcDM0MDBfb3BzW2lkeF0uY2hlY2soY3R4dCkpIHsKLQkJCWN0eHQtPnN0YWxlX21hc2sgfD0gbXNrOworCQlpZiAoKHNpZCA8IEFSUkFZX1NJWkUocm91dGluZ19zY2hlbWVzKSkgJiYKKwkJICAgICgoc3AgPSByb3V0aW5nX3NjaGVtZXMgKyBzaWQpICE9IE5VTEwpICYmCisJCSAgICAoaGR3LT5pbnB1dF92YWwgPj0gMCkgJiYKKwkJICAgIChoZHctPmlucHV0X3ZhbCA8IHNwLT5jbnQpKSB7CisJCQlyb3V0ZS5pbnB1dCA9IHNwLT5kZWZbaGR3LT5pbnB1dF92YWxdOworCQl9IGVsc2UgeworCQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0VSUk9SX0xFR1MsCisJCQkJICAgIioqKiBXQVJOSU5HICoqKiBzdWJkZXYgbXNwMzQwMCBzZXRfaW5wdXQ6IgorCQkJCSAgICIgSW52YWxpZCByb3V0aW5nIHNjaGVtZSAoJXUpIgorCQkJCSAgICIgYW5kL29yIGlucHV0ICglZCkiLAorCQkJCSAgIHNpZCwgaGR3LT5pbnB1dF92YWwpOworCQkJcmV0dXJuOwogCQl9Ci0JfQotCXJldHVybiBjdHh0LT5zdGFsZV9tYXNrICE9IDA7Ci19Ci0KLQotc3RhdGljIHZvaWQgbXNwMzQwMF91cGRhdGUoc3RydWN0IHB2cjJfbXNwMzQwMF9oYW5kbGVyICpjdHh0KQotewotCXVuc2lnbmVkIGxvbmcgbXNrOwotCXVuc2lnbmVkIGludCBpZHg7Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUobXNwMzQwMF9vcHMpOyBpZHgrKykgewotCQltc2sgPSAxIDw8IGlkeDsKLQkJaWYgKCEoY3R4dC0+c3RhbGVfbWFzayAmIG1zaykpIGNvbnRpbnVlOwotCQljdHh0LT5zdGFsZV9tYXNrICY9IH5tc2s7Ci0JCW1zcDM0MDBfb3BzW2lkeF0udXBkYXRlKGN0eHQpOworCQlyb3V0ZS5vdXRwdXQgPSBNU1BfT1VUUFVUKE1TUF9TQ19JTl9EU1BfU0NBUlQxKTsKKwkJc2QtPm9wcy0+YXVkaW8tPnNfcm91dGluZyhzZCwgJnJvdXRlKTsKIAl9CiB9CiAKLQotc3RhdGljIHZvaWQgcHZyMl9tc3AzNDAwX2RldGFjaChzdHJ1Y3QgcHZyMl9tc3AzNDAwX2hhbmRsZXIgKmN0eHQpCi17Ci0JY3R4dC0+Y2xpZW50LT5oYW5kbGVyID0gTlVMTDsKLQlrZnJlZShjdHh0KTsKLX0KLQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHB2cjJfbXNwMzQwMF9kZXNjcmliZShzdHJ1Y3QgcHZyMl9tc3AzNDAwX2hhbmRsZXIgKmN0eHQsCi0JCQkJCSAgY2hhciAqYnVmLHVuc2lnbmVkIGludCBjbnQpCi17Ci0JcmV0dXJuIHNjbnByaW50ZihidWYsY250LCJoYW5kbGVyOiBwdnJ1c2IyLWF1ZGlvIHY0bDIiKTsKLX0KLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfaTJjX2hhbmRsZXJfZnVuY3Rpb25zIG1zcDM0MDBfZnVuY3MgPSB7Ci0JLmRldGFjaCA9ICh2b2lkICgqKSh2b2lkICopKXB2cjJfbXNwMzQwMF9kZXRhY2gsCi0JLmNoZWNrID0gKGludCAoKikodm9pZCAqKSltc3AzNDAwX2NoZWNrLAotCS51cGRhdGUgPSAodm9pZCAoKikodm9pZCAqKSltc3AzNDAwX3VwZGF0ZSwKLQkuZGVzY3JpYmUgPSAodW5zaWduZWQgaW50ICgqKSh2b2lkICosY2hhciAqLHVuc2lnbmVkIGludCkpcHZyMl9tc3AzNDAwX2Rlc2NyaWJlLAotfTsKLQotCi1pbnQgcHZyMl9pMmNfbXNwMzQwMF9zZXR1cChzdHJ1Y3QgcHZyMl9oZHcgKmhkdyxzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcCkKLXsKLQlzdHJ1Y3QgcHZyMl9tc3AzNDAwX2hhbmRsZXIgKmN0eHQ7Ci0JaWYgKGNwLT5oYW5kbGVyKSByZXR1cm4gMDsKLQotCWN0eHQgPSBremFsbG9jKHNpemVvZigqY3R4dCksR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjdHh0KSByZXR1cm4gMDsKLQotCWN0eHQtPmkyY19oYW5kbGVyLmZ1bmNfZGF0YSA9IGN0eHQ7Ci0JY3R4dC0+aTJjX2hhbmRsZXIuZnVuY190YWJsZSA9ICZtc3AzNDAwX2Z1bmNzOwotCWN0eHQtPmNsaWVudCA9IGNwOwotCWN0eHQtPmhkdyA9IGhkdzsKLQljdHh0LT5zdGFsZV9tYXNrID0gKDEgPDwgQVJSQVlfU0laRShtc3AzNDAwX29wcykpIC0gMTsKLQljcC0+aGFuZGxlciA9ICZjdHh0LT5pMmNfaGFuZGxlcjsKLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyAweCV4IG1zcDM0MDAgVjRMMiBoYW5kbGVyIHNldCB1cCIsCi0JCSAgIGNwLT5jbGllbnQtPmFkZHIpOwotCXJldHVybiAhMDsKLX0KLQotCiAvKgogICBTdHVmZiBmb3IgRW1hY3MgdG8gc2VlLCBpbiBvcmRlciB0byBlbmNvdXJhZ2UgY29uc2lzdGVudCBlZGl0aW5nIHN0eWxlOgogICAqKiogTG9jYWwgVmFyaWFibGVzOiAqKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWF1ZGlvLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1hdWRpby5oCmluZGV4IGFjNTRlZWQuLmUzZTYzZDcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWF1ZGlvLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItYXVkaW8uaApAQCAtMjIsMTAgKzIyLDggQEAKICNpZm5kZWYgX19QVlJVU0IyX0FVRElPX0gKICNkZWZpbmUgX19QVlJVU0IyX0FVRElPX0gKIAotI2luY2x1ZGUgInB2cnVzYjItaTJjLWNvcmUuaCIKLQotaW50IHB2cjJfaTJjX21zcDM0MDBfc2V0dXAoc3RydWN0IHB2cjJfaGR3ICosc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqKTsKLQorI2luY2x1ZGUgInB2cnVzYjItaGR3LWludGVybmFsLmgiCit2b2lkIHB2cjJfbXNwMzQwMF9zdWJkZXZfdXBkYXRlKHN0cnVjdCBwdnIyX2hkdyAqLCBzdHJ1Y3QgdjRsMl9zdWJkZXYgKik7CiAjZW5kaWYgLyogX19QVlJVU0IyX0FVRElPX0ggKi8KIAogLyoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWNzNTNsMzJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jczUzbDMyYS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmI1YzM0MjgKLS0tIC9kZXYvbnVsbAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jczUzbDMyYS5jCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKgorICoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgorICogIENvcHlyaWdodCAoQykgMjAwNCBBdXJlbGllbiBBbGxlYXVtZSA8c2x0c0BmcmVlLmZyPgorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQorICoKKyAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQorICoKKyAqLworCisvKgorCisgICBUaGlzIHNvdXJjZSBmaWxlIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBpbnRlcmZhY2Ugd2l0aCB0aGUKKyAgIHY0bC1kdmIgY3M1M2wzMmEgbW9kdWxlLgorCisqLworCisjaW5jbHVkZSAicHZydXNiMi1jczUzbDMyYS5oIgorCisKKyNpbmNsdWRlICJwdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIgorI2luY2x1ZGUgInB2cnVzYjItZGVidWcuaCIKKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCitzdHJ1Y3Qgcm91dGluZ19zY2hlbWUgeworCWNvbnN0IGludCAqZGVmOworCXVuc2lnbmVkIGludCBjbnQ7Cit9OworCisKK3N0YXRpYyBjb25zdCBpbnQgcm91dGluZ19zY2hlbWUxW10gPSB7CisJW1BWUjJfQ1ZBTF9JTlBVVF9UVl0gPSAyLCAgLyogMSBvciAyIHNlZW1zIHRvIHdvcmsgaGVyZSAqLworCVtQVlIyX0NWQUxfSU5QVVRfUkFESU9dID0gMiwKKwlbUFZSMl9DVkFMX0lOUFVUX0NPTVBPU0lURV0gPSAwLAorCVtQVlIyX0NWQUxfSU5QVVRfU1ZJREVPXSA9ICAwLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCByb3V0aW5nX3NjaGVtZSByb3V0aW5nX3NjaGVtZXNbXSA9IHsKKwlbUFZSMl9ST1VUSU5HX1NDSEVNRV9PTkFJUl0gPSB7CisJCS5kZWYgPSByb3V0aW5nX3NjaGVtZTEsCisJCS5jbnQgPSBBUlJBWV9TSVpFKHJvdXRpbmdfc2NoZW1lMSksCisJfSwKK307CisKKwordm9pZCBwdnIyX2NzNTNsMzJhX3N1YmRldl91cGRhdGUoc3RydWN0IHB2cjJfaGR3ICpoZHcsIHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJaWYgKGhkdy0+aW5wdXRfZGlydHkgfHwgaGR3LT5mb3JjZV9kaXJ0eSkgeworCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlOworCQljb25zdCBzdHJ1Y3Qgcm91dGluZ19zY2hlbWUgKnNwOworCQl1bnNpZ25lZCBpbnQgc2lkID0gaGR3LT5oZHdfZGVzYy0+c2lnbmFsX3JvdXRpbmdfc2NoZW1lOworCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsICJzdWJkZXYgdjRsMiBzZXRfaW5wdXQoJWQpIiwKKwkJCSAgIGhkdy0+aW5wdXRfdmFsKTsKKwkJaWYgKChzaWQgPCBBUlJBWV9TSVpFKHJvdXRpbmdfc2NoZW1lcykpICYmCisJCSAgICAoKHNwID0gcm91dGluZ19zY2hlbWVzICsgc2lkKSAhPSBOVUxMKSAmJgorCQkgICAgKGhkdy0+aW5wdXRfdmFsID49IDApICYmCisJCSAgICAoaGR3LT5pbnB1dF92YWwgPCBzcC0+Y250KSkgeworCQkJcm91dGUuaW5wdXQgPSBzcC0+ZGVmW2hkdy0+aW5wdXRfdmFsXTsKKwkJfSBlbHNlIHsKKwkJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9FUlJPUl9MRUdTLAorCQkJCSAgICIqKiogV0FSTklORyAqKiogc3ViZGV2IHY0bDIgc2V0X2lucHV0OiIKKwkJCQkgICAiIEludmFsaWQgcm91dGluZyBzY2hlbWUgKCV1KSIKKwkJCQkgICAiIGFuZC9vciBpbnB1dCAoJWQpIiwKKwkJCQkgICBzaWQsIGhkdy0+aW5wdXRfdmFsKTsKKwkJCXJldHVybjsKKwkJfQorCQlyb3V0ZS5vdXRwdXQgPSAwOworCQlzZC0+b3BzLT5hdWRpby0+c19yb3V0aW5nKHNkLCAmcm91dGUpOworCX0KK30KKworCisvKgorICBTdHVmZiBmb3IgRW1hY3MgdG8gc2VlLCBpbiBvcmRlciB0byBlbmNvdXJhZ2UgY29uc2lzdGVudCBlZGl0aW5nIHN0eWxlOgorICAqKiogTG9jYWwgVmFyaWFibGVzOiAqKioKKyAgKioqIG1vZGU6IGMgKioqCisgICoqKiBmaWxsLWNvbHVtbjogNzAgKioqCisgICoqKiB0YWItd2lkdGg6IDggKioqCisgICoqKiBjLWJhc2ljLW9mZnNldDogOCAqKioKKyAgKioqIEVuZDogKioqCisgICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi10dW5lci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3M1M2wzMmEuaApzaW1pbGFyaXR5IGluZGV4IDY0JQpyZW5hbWUgZnJvbSBkcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi10dW5lci5oCnJlbmFtZSB0byBkcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jczUzbDMyYS5oCmluZGV4IGVmNGFmYWYuLjUzYmE1NDggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXR1bmVyLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3M1M2wzMmEuaApAQCAtMiw2ICsyLDcgQEAKICAqCiAgKgogICogIENvcHlyaWdodCAoQykgMjAwNSBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+CisgKiAgQ29weXJpZ2h0IChDKSAyMDA0IEF1cmVsaWVuIEFsbGVhdW1lIDxzbHRzQGZyZWUuZnI+CiAgKgogICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTE3LDE0ICsxOCwyNCBAQAogICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKICAqCiAgKi8KLSNpZm5kZWYgX19QVlJVU0IyX1RVTkVSX0gKLSNkZWZpbmUgX19QVlJVU0IyX1RVTkVSX0gKIAotI2luY2x1ZGUgInB2cnVzYjItaTJjLWNvcmUuaCIKKyNpZm5kZWYgX19QVlJVU0IyX0NTNTNMMzJBX0gKKyNkZWZpbmUgX19QVlJVU0IyX0NTNTNMMzJBX0gKIAotaW50IHB2cjJfaTJjX3R1bmVyX3NldHVwKHN0cnVjdCBwdnIyX2hkdyAqLHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKik7CisvKgogCi0jZW5kaWYgLyogX19QVlJVU0IyX1RVTkVSX0ggKi8KKyAgIFRoaXMgbW9kdWxlIGNvbm5lY3RzIHRoZSBwdnJ1c2IyIGRyaXZlciB0byB0aGUgSTJDIGNoaXAgbGV2ZWwKKyAgIGRyaXZlciB3aGljaCBoYW5kbGVzIGRldmljZSB2aWRlbyBwcm9jZXNzaW5nLiAgVGhpcyBpbnRlcmZhY2UgaXMKKyAgIHVzZWQgaW50ZXJuYWxseSBieSB0aGUgZHJpdmVyOyBoaWdoZXIgbGV2ZWwgY29kZSBzaG91bGQgb25seQorICAgaW50ZXJhY3QgdGhyb3VnaCB0aGUgaW50ZXJmYWNlIHByb3ZpZGVkIGJ5IHB2cnVzYjItaGR3LmguCisKKyovCisKKworI2luY2x1ZGUgInB2cnVzYjItaGR3LWludGVybmFsLmgiCit2b2lkIHB2cjJfY3M1M2wzMmFfc3ViZGV2X3VwZGF0ZShzdHJ1Y3QgcHZyMl9oZHcgKiwgc3RydWN0IHY0bDJfc3ViZGV2ICopOworCisjZW5kaWYgLyogX19QVlJVU0IyX0FVRElPX0NTNTNMMzJBX0ggKi8KIAogLyoKICAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN4MjU4NHgtdjRsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jeDI1ODR4LXY0bC5jCmluZGV4IDg5NTg1OWUuLjRlMDE3ZmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN4MjU4NHgtdjRsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3gyNTg0eC12NGwuYwpAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAicHZydXNiMi1jeDI1ODR4LXY0bC5oIgogI2luY2x1ZGUgInB2cnVzYjItdmlkZW8tdjRsLmgiCi0jaW5jbHVkZSAicHZydXNiMi1pMmMtY21kLXY0bDIuaCIKIAogCiAjaW5jbHVkZSAicHZydXNiMi1oZHctaW50ZXJuYWwuaCIKQEAgLTM5LDE0ICszOCw2IEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKLXN0cnVjdCBwdnIyX3Y0bF9jeDI1ODR4IHsKLQlzdHJ1Y3QgcHZyMl9pMmNfaGFuZGxlciBoYW5kbGVyOwotCXN0cnVjdCBwdnIyX2RlY29kZXJfY3RybCBjdHJsOwotCXN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNsaWVudDsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdzsKLQl1bnNpZ25lZCBsb25nIHN0YWxlX21hc2s7Ci19OwotCiAKIHN0cnVjdCByb3V0aW5nX3NjaGVtZV9pdGVtIHsKIAlpbnQgdmlkOwpAQCAtMTEwLDIxOCArMTAxLDQ0IEBACiAJfSwKIH07CiAKLXN0YXRpYyB2b2lkIHNldF9pbnB1dChzdHJ1Y3QgcHZyMl92NGxfY3gyNTg0eCAqY3R4dCkKK3ZvaWQgcHZyMl9jeDI1ODQwX3N1YmRldl91cGRhdGUoc3RydWN0IHB2cjJfaGR3ICpoZHcsIHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjdHh0LT5oZHc7Ci0Jc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKLQllbnVtIGN4MjU4NDBfdmlkZW9faW5wdXQgdmlkX2lucHV0OwotCWVudW0gY3gyNTg0MF9hdWRpb19pbnB1dCBhdWRfaW5wdXQ7Ci0JY29uc3Qgc3RydWN0IHJvdXRpbmdfc2NoZW1lICpzcDsKLQl1bnNpZ25lZCBpbnQgc2lkID0gaGR3LT5oZHdfZGVzYy0+c2lnbmFsX3JvdXRpbmdfc2NoZW1lOworCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywgInN1YmRldiBjeDI1ODR4IHVwZGF0ZS4uLiIpOworCWlmIChoZHctPmlucHV0X2RpcnR5IHx8IGhkdy0+Zm9yY2VfZGlydHkpIHsKKwkJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKKwkJZW51bSBjeDI1ODQwX3ZpZGVvX2lucHV0IHZpZF9pbnB1dDsKKwkJZW51bSBjeDI1ODQwX2F1ZGlvX2lucHV0IGF1ZF9pbnB1dDsKKwkJY29uc3Qgc3RydWN0IHJvdXRpbmdfc2NoZW1lICpzcDsKKwkJdW5zaWduZWQgaW50IHNpZCA9IGhkdy0+aGR3X2Rlc2MtPnNpZ25hbF9yb3V0aW5nX3NjaGVtZTsKIAotCW1lbXNldCgmcm91dGUsMCxzaXplb2Yocm91dGUpKTsKKwkJbWVtc2V0KCZyb3V0ZSwgMCwgc2l6ZW9mKHJvdXRlKSk7CiAKLQlpZiAoKHNpZCA8IEFSUkFZX1NJWkUocm91dGluZ19zY2hlbWVzKSkgJiYKLQkgICAgKChzcCA9IHJvdXRpbmdfc2NoZW1lcyArIHNpZCkgIT0gTlVMTCkgJiYKLQkgICAgKGhkdy0+aW5wdXRfdmFsID49IDApICYmCi0JICAgIChoZHctPmlucHV0X3ZhbCA8IHNwLT5jbnQpKSB7Ci0JCXZpZF9pbnB1dCA9IHNwLT5kZWZbaGR3LT5pbnB1dF92YWxdLnZpZDsKLQkJYXVkX2lucHV0ID0gc3AtPmRlZltoZHctPmlucHV0X3ZhbF0uYXVkOwotCX0gZWxzZSB7Ci0JCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9FUlJPUl9MRUdTLAotCQkJICAgIioqKiBXQVJOSU5HICoqKiBpMmMgY3gyNTg0eCBzZXRfaW5wdXQ6IgotCQkJICAgIiBJbnZhbGlkIHJvdXRpbmcgc2NoZW1lICgldSkgYW5kL29yIGlucHV0ICglZCkiLAotCQkJICAgc2lkLGhkdy0+aW5wdXRfdmFsKTsKLQkJcmV0dXJuOwotCX0KLQotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIGN4MjU4NHggc2V0X2lucHV0IHZpZD0weCV4IGF1ZD0weCV4IiwKLQkJICAgdmlkX2lucHV0LGF1ZF9pbnB1dCk7Ci0Jcm91dGUuaW5wdXQgPSAodTMyKXZpZF9pbnB1dDsKLQlwdnIyX2kyY19jbGllbnRfY21kKGN0eHQtPmNsaWVudCxWSURJT0NfSU5UX1NfVklERU9fUk9VVElORywmcm91dGUpOwotCXJvdXRlLmlucHV0ID0gKHUzMilhdWRfaW5wdXQ7Ci0JcHZyMl9pMmNfY2xpZW50X2NtZChjdHh0LT5jbGllbnQsVklESU9DX0lOVF9TX0FVRElPX1JPVVRJTkcsJnJvdXRlKTsKLX0KLQotCi1zdGF0aWMgaW50IGNoZWNrX2lucHV0KHN0cnVjdCBwdnIyX3Y0bF9jeDI1ODR4ICpjdHh0KQotewotCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gY3R4dC0+aGR3OwotCXJldHVybiBoZHctPmlucHV0X2RpcnR5ICE9IDA7Ci19Ci0KLQotc3RhdGljIHZvaWQgc2V0X2F1ZGlvKHN0cnVjdCBwdnIyX3Y0bF9jeDI1ODR4ICpjdHh0KQotewotCXUzMiB2YWw7Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjdHh0LT5oZHc7Ci0KLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyBjeDI1ODR4IHNldF9hdWRpbyAlZCIsCi0JCSAgIGhkdy0+c3JhdGVfdmFsKTsKLQlzd2l0Y2ggKGhkdy0+c3JhdGVfdmFsKSB7Ci0JZGVmYXVsdDoKLQljYXNlIFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ4MDAwOgotCQl2YWwgPSA0ODAwMDsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80NDEwMDoKLQkJdmFsID0gNDQxMDA7Ci0JCWJyZWFrOwotCWNhc2UgVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfMzIwMDA6Ci0JCXZhbCA9IDMyMDAwOwotCQlicmVhazsKLQl9Ci0JcHZyMl9pMmNfY2xpZW50X2NtZChjdHh0LT5jbGllbnQsVklESU9DX0lOVF9BVURJT19DTE9DS19GUkVRLCZ2YWwpOwotfQotCi0KLXN0YXRpYyBpbnQgY2hlY2tfYXVkaW8oc3RydWN0IHB2cjJfdjRsX2N4MjU4NHggKmN0eHQpCi17Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjdHh0LT5oZHc7Ci0JcmV0dXJuIGhkdy0+c3JhdGVfZGlydHkgIT0gMDsKLX0KLQotCi1zdHJ1Y3QgcHZyMl92NGxfY3gyNTg0eF9vcHMgewotCXZvaWQgKCp1cGRhdGUpKHN0cnVjdCBwdnIyX3Y0bF9jeDI1ODR4ICopOwotCWludCAoKmNoZWNrKShzdHJ1Y3QgcHZyMl92NGxfY3gyNTg0eCAqKTsKLX07Ci0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX3Y0bF9jeDI1ODR4X29wcyBkZWNvZGVyX29wc1tdID0gewotCXsgLnVwZGF0ZSA9IHNldF9pbnB1dCwgLmNoZWNrID0gY2hlY2tfaW5wdXR9LAotCXsgLnVwZGF0ZSA9IHNldF9hdWRpbywgLmNoZWNrID0gY2hlY2tfYXVkaW99LAotfTsKLQotCi1zdGF0aWMgdm9pZCBkZWNvZGVyX2RldGFjaChzdHJ1Y3QgcHZyMl92NGxfY3gyNTg0eCAqY3R4dCkKLXsKLQljdHh0LT5jbGllbnQtPmhhbmRsZXIgPSBOVUxMOwotCXB2cjJfaGR3X3NldF9kZWNvZGVyKGN0eHQtPmhkdyxOVUxMKTsKLQlrZnJlZShjdHh0KTsKLX0KLQotCi1zdGF0aWMgaW50IGRlY29kZXJfY2hlY2soc3RydWN0IHB2cjJfdjRsX2N4MjU4NHggKmN0eHQpCi17Ci0JdW5zaWduZWQgbG9uZyBtc2s7Ci0JdW5zaWduZWQgaW50IGlkeDsKLQotCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShkZWNvZGVyX29wcyk7IGlkeCsrKSB7Ci0JCW1zayA9IDEgPDwgaWR4OwotCQlpZiAoY3R4dC0+c3RhbGVfbWFzayAmIG1zaykgY29udGludWU7Ci0JCWlmIChkZWNvZGVyX29wc1tpZHhdLmNoZWNrKGN0eHQpKSB7Ci0JCQljdHh0LT5zdGFsZV9tYXNrIHw9IG1zazsKKwkJaWYgKChzaWQgPCBBUlJBWV9TSVpFKHJvdXRpbmdfc2NoZW1lcykpICYmCisJCSAgICAoKHNwID0gcm91dGluZ19zY2hlbWVzICsgc2lkKSAhPSBOVUxMKSAmJgorCQkgICAgKGhkdy0+aW5wdXRfdmFsID49IDApICYmCisJCSAgICAoaGR3LT5pbnB1dF92YWwgPCBzcC0+Y250KSkgeworCQkJdmlkX2lucHV0ID0gc3AtPmRlZltoZHctPmlucHV0X3ZhbF0udmlkOworCQkJYXVkX2lucHV0ID0gc3AtPmRlZltoZHctPmlucHV0X3ZhbF0uYXVkOworCQl9IGVsc2UgeworCQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0VSUk9SX0xFR1MsCisJCQkJICAgIioqKiBXQVJOSU5HICoqKiBzdWJkZXYgY3gyNTg0eCBzZXRfaW5wdXQ6IgorCQkJCSAgICIgSW52YWxpZCByb3V0aW5nIHNjaGVtZSAoJXUpIgorCQkJCSAgICIgYW5kL29yIGlucHV0ICglZCkiLAorCQkJCSAgIHNpZCwgaGR3LT5pbnB1dF92YWwpOworCQkJcmV0dXJuOwogCQl9Ci0JfQotCXJldHVybiBjdHh0LT5zdGFsZV9tYXNrICE9IDA7Ci19CiAKLQotc3RhdGljIHZvaWQgZGVjb2Rlcl91cGRhdGUoc3RydWN0IHB2cjJfdjRsX2N4MjU4NHggKmN0eHQpCi17Ci0JdW5zaWduZWQgbG9uZyBtc2s7Ci0JdW5zaWduZWQgaW50IGlkeDsKLQotCWZvciAoaWR4ID0gMDsgaWR4IDwgQVJSQVlfU0laRShkZWNvZGVyX29wcyk7IGlkeCsrKSB7Ci0JCW1zayA9IDEgPDwgaWR4OwotCQlpZiAoIShjdHh0LT5zdGFsZV9tYXNrICYgbXNrKSkgY29udGludWU7Ci0JCWN0eHQtPnN0YWxlX21hc2sgJj0gfm1zazsKLQkJZGVjb2Rlcl9vcHNbaWR4XS51cGRhdGUoY3R4dCk7CisJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywKKwkJCSAgICJzdWJkZXYgY3gyNTg0eCBzZXRfaW5wdXQgdmlkPTB4JXggYXVkPTB4JXgiLAorCQkJICAgdmlkX2lucHV0LCBhdWRfaW5wdXQpOworCQlyb3V0ZS5pbnB1dCA9ICh1MzIpdmlkX2lucHV0OworCQlzZC0+b3BzLT52aWRlby0+c19yb3V0aW5nKHNkLCAmcm91dGUpOworCQlyb3V0ZS5pbnB1dCA9ICh1MzIpYXVkX2lucHV0OworCQlzZC0+b3BzLT5hdWRpby0+c19yb3V0aW5nKHNkLCAmcm91dGUpOwogCX0KIH0KIAogCi1zdGF0aWMgdm9pZCBkZWNvZGVyX2VuYWJsZShzdHJ1Y3QgcHZyMl92NGxfY3gyNTg0eCAqY3R4dCxpbnQgZmwpCi17Ci0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgY3gyNTg0MCBkZWNvZGVyX2VuYWJsZSglZCkiLGZsKTsKLQlwdnIyX3Y0bDJfY21kX3N0cmVhbShjdHh0LT5jbGllbnQsZmwpOwotfQotCi0KLXN0YXRpYyBpbnQgZGVjb2Rlcl9kZXRlY3Qoc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3ApCi17Ci0JaW50IHJldDsKLQkvKiBBdHRlbXB0IHRvIHF1ZXJ5IHRoZSBkZWNvZGVyIC0gbGV0J3Mgc2VlIGlmIGl0IHdpbGwgYW5zd2VyICovCi0Jc3RydWN0IHY0bDJfcXVlcnljdHJsIHFjOwotCi0JbWVtc2V0KCZxYywwLHNpemVvZihxYykpOwotCi0JcWMuaWQgPSBWNEwyX0NJRF9CUklHSFRORVNTOwotCi0JcmV0ID0gcHZyMl9pMmNfY2xpZW50X2NtZChjcCxWSURJT0NfUVVFUllDVFJMLCZxYyk7Ci0JcmV0dXJuIHJldCA9PSAwOyAvKiBSZXR1cm4gdHJ1ZSBpZiBpdCBhbnN3ZXJlZCAqLwotfQotCi0KLXN0YXRpYyB1bnNpZ25lZCBpbnQgZGVjb2Rlcl9kZXNjcmliZShzdHJ1Y3QgcHZyMl92NGxfY3gyNTg0eCAqY3R4dCwKLQkJCQkgICAgIGNoYXIgKmJ1Zix1bnNpZ25lZCBpbnQgY250KQotewotCXJldHVybiBzY25wcmludGYoYnVmLGNudCwiaGFuZGxlcjogcHZydXNiMi1jeDI1ODR4LXY0bCIpOwotfQotCi0KLXN0YXRpYyB2b2lkIGRlY29kZXJfcmVzZXQoc3RydWN0IHB2cjJfdjRsX2N4MjU4NHggKmN0eHQpCi17Ci0JaW50IHJldDsKLQlyZXQgPSBwdnIyX2kyY19jbGllbnRfY21kKGN0eHQtPmNsaWVudCxWSURJT0NfSU5UX1JFU0VULE5VTEwpOwotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIGN4MjU4NDAgZGVjb2Rlcl9yZXNldCAocmV0PSVkKSIscmV0KTsKLX0KLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfaTJjX2hhbmRsZXJfZnVuY3Rpb25zIGhmdW5jcyA9IHsKLQkuZGV0YWNoID0gKHZvaWQgKCopKHZvaWQgKikpZGVjb2Rlcl9kZXRhY2gsCi0JLmNoZWNrID0gKGludCAoKikodm9pZCAqKSlkZWNvZGVyX2NoZWNrLAotCS51cGRhdGUgPSAodm9pZCAoKikodm9pZCAqKSlkZWNvZGVyX3VwZGF0ZSwKLQkuZGVzY3JpYmUgPSAodW5zaWduZWQgaW50ICgqKSh2b2lkICosY2hhciAqLHVuc2lnbmVkIGludCkpZGVjb2Rlcl9kZXNjcmliZSwKLX07Ci0KLQotaW50IHB2cjJfaTJjX2N4MjU4NHhfdjRsX3NldHVwKHN0cnVjdCBwdnIyX2hkdyAqaGR3LAotCQkJICAgICAgIHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwKQotewotCXN0cnVjdCBwdnIyX3Y0bF9jeDI1ODR4ICpjdHh0OwotCi0JaWYgKGhkdy0+ZGVjb2Rlcl9jdHJsKSByZXR1cm4gMDsKLQlpZiAoY3AtPmhhbmRsZXIpIHJldHVybiAwOwotCWlmICghZGVjb2Rlcl9kZXRlY3QoY3ApKSByZXR1cm4gMDsKLQotCWN0eHQgPSBremFsbG9jKHNpemVvZigqY3R4dCksR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjdHh0KSByZXR1cm4gMDsKLQotCWN0eHQtPmhhbmRsZXIuZnVuY19kYXRhID0gY3R4dDsKLQljdHh0LT5oYW5kbGVyLmZ1bmNfdGFibGUgPSAmaGZ1bmNzOwotCWN0eHQtPmN0cmwuY3R4dCA9IGN0eHQ7Ci0JY3R4dC0+Y3RybC5kZXRhY2ggPSAodm9pZCAoKikodm9pZCAqKSlkZWNvZGVyX2RldGFjaDsKLQljdHh0LT5jdHJsLmVuYWJsZSA9ICh2b2lkICgqKSh2b2lkICosaW50KSlkZWNvZGVyX2VuYWJsZTsKLQljdHh0LT5jdHJsLmZvcmNlX3Jlc2V0ID0gKHZvaWQgKCopKHZvaWQqKSlkZWNvZGVyX3Jlc2V0OwotCWN0eHQtPmNsaWVudCA9IGNwOwotCWN0eHQtPmhkdyA9IGhkdzsKLQljdHh0LT5zdGFsZV9tYXNrID0gKDEgPDwgQVJSQVlfU0laRShkZWNvZGVyX29wcykpIC0gMTsKLQlwdnIyX2hkd19zZXRfZGVjb2RlcihoZHcsJmN0eHQtPmN0cmwpOwotCWNwLT5oYW5kbGVyID0gJmN0eHQtPmhhbmRsZXI7Ci0JewotCQkvKgotCQkgIE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4gMTktTm92LTIwMDYgLSBUaGlzIGJpdAotCQkgIG9mIG51dHRpbmVzcyBmb3IgY3gyNTg0MCBjYXVzZXMgdGhhdCBtb2R1bGUgdG8KLQkJICBjb3JyZWN0bHkgc2V0IHVwIGl0cyB2aWRlbyBzY2FsaW5nLiAgVGhpcyBpcyByZWFsbHkKLQkJICBhIHByb2JsZW0gaW4gdGhlIGN4MjU4NDAgbW9kdWxlIGl0c2VsZiwgYnV0IHdlIHdvcmsKLQkJICBhcm91bmQgaXQgaGVyZS4gIFRoZSBwcm9ibGVtIGhhcyBub3QgYmVlbiBzZWVuIGluCi0JCSAgaXZ0diBiZWNhdXNlIHRoZXJlIFZCSSBpcyBzdXBwb3J0ZWQgYW5kIHNldCB1cC4gIFdlCi0JCSAgZG9uJ3QgZG8gVkJJIGhlcmUgKGF0IGxlYXN0IG5vdCB5ZXQpIGFuZCB0aHVzIHdlCi0JCSAgbmV2ZXIgYXR0ZW1wdGVkIHRvIGV2ZW4gc2V0IGl0IHVwLgotCQkgKi8KLQkJc3RydWN0IHY0bDJfZm9ybWF0IGZtdDsKLQkJbWVtc2V0KCZmbXQsMCxzaXplb2YoZm10KSk7Ci0JCWZtdC50eXBlID0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkU7Ci0JCXB2cjJfaTJjX2NsaWVudF9jbWQoY3R4dC0+Y2xpZW50LFZJRElPQ19TX0ZNVCwmZm10KTsKLQl9Ci0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgMHgleCBjeDI1ODR4IFY0TDIgaGFuZGxlciBzZXQgdXAiLAotCQkgICBjcC0+Y2xpZW50LT5hZGRyKTsKLQlyZXR1cm4gITA7Ci19Ci0KLQotCiAKIC8qCiAgIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jeDI1ODR4LXY0bC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItY3gyNTg0eC12NGwuaAppbmRleCA2NmFiZjc3Li5lMzVjMjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1jeDI1ODR4LXY0bC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWN4MjU4NHgtdjRsLmgKQEAgLTM0LDkgKzM0LDkgQEAKIAogCiAKLSNpbmNsdWRlICJwdnJ1c2IyLWkyYy1jb3JlLmgiCisjaW5jbHVkZSAicHZydXNiMi1oZHctaW50ZXJuYWwuaCIKIAotaW50IHB2cjJfaTJjX2N4MjU4NHhfdjRsX3NldHVwKHN0cnVjdCBwdnIyX2hkdyAqLHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKik7Cit2b2lkIHB2cjJfY3gyNTg0MF9zdWJkZXZfdXBkYXRlKHN0cnVjdCBwdnIyX2hkdyAqLCBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKTsKIAogCiAjZW5kaWYgLyogX19QVlJVU0IyX0NYMjU4NFhfVjRMX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRlYnVnaWZjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZWJ1Z2lmYy5jCmluZGV4IGNhODkyZmIuLmZiZTM4NTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRlYnVnaWZjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGVidWdpZmMuYwpAQCAtMjMsNyArMjMsNiBAQAogI2luY2x1ZGUgInB2cnVzYjItZGVidWdpZmMuaCIKICNpbmNsdWRlICJwdnJ1c2IyLWhkdy5oIgogI2luY2x1ZGUgInB2cnVzYjItZGVidWcuaCIKLSNpbmNsdWRlICJwdnJ1c2IyLWkyYy1jb3JlLmgiCiAKIHN0cnVjdCBkZWJ1Z2lmY19tYXNrX2l0ZW0gewogCWNvbnN0IGNoYXIgKm5hbWU7CkBAIC0xNDcsMTAgKzE0Niw2IEBACiAJYmNudCArPSBjY250OyBhY250IC09IGNjbnQ7IGJ1ZiArPSBjY250OwogCWNjbnQgPSBwdnIyX2hkd19zdGF0ZV9yZXBvcnQoaGR3LGJ1ZixhY250KTsKIAliY250ICs9IGNjbnQ7IGFjbnQgLT0gY2NudDsgYnVmICs9IGNjbnQ7Ci0JY2NudCA9IHNjbnByaW50ZihidWYsYWNudCwiQXR0YWNoZWQgSTJDIG1vZHVsZXM6XG4iKTsKLQliY250ICs9IGNjbnQ7IGFjbnQgLT0gY2NudDsgYnVmICs9IGNjbnQ7Ci0JY2NudCA9IHB2cjJfaTJjX3JlcG9ydChoZHcsYnVmLGFjbnQpOwotCWJjbnQgKz0gY2NudDsgYWNudCAtPSBjY250OyBidWYgKz0gY2NudDsKIAogCXJldHVybiBiY250OwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGVidWdpZmMuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRlYnVnaWZjLmgKaW5kZXggZTI0ZmY1OS4uMmY4ZDQ2NyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGVidWdpZmMuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZWJ1Z2lmYy5oCkBAIC0yMiwxNiArMjIsMTYgQEAKIAogc3RydWN0IHB2cjJfaGR3OwogCi0vKiBOb24taW50cnVzaXZlbHkgcHJpbnQgc29tZSB1c2VmdWwgZGVidWdnaW5nIGluZm8gZnJvbSBpbnNpZGUgdGhlCi0gICBkcml2ZXIuICBUaGlzIHNob3VsZCB3b3JrIGV2ZW4gaWYgdGhlIGRyaXZlciBhcHBlYXJzIHRvIGJlCi0gICB3ZWRnZWQuICovCi1pbnQgcHZyMl9kZWJ1Z2lmY19wcmludF9pbmZvKHN0cnVjdCBwdnIyX2hkdyAqLAotCQkJICAgICBjaGFyICpidWZfcHRyLHVuc2lnbmVkIGludCBidWZfc2l6ZSk7Ci0KIC8qIFByaW50IGdlbmVyYWwgc3RhdHVzIG9mIGRyaXZlci4gIFRoaXMgd2lsbCBhbHNvIHRyaWdnZXIgYSBwcm9iZSBvZgogICAgdGhlIFVTQiBsaW5rLiAgVW5saWtlIHByaW50X2luZm8oKSwgdGhpcyBvbmUgc3luY2hyb25pemVzIHdpdGggdGhlCiAgICBkcml2ZXIgc28gdGhlIGluZm9ybWF0aW9uIHNob3VsZCBiZSBzZWxmLWNvbnNpc3RlbnQgKGJ1dCBpdCB3aWxsCiAgICBoYW5nIGlmIHRoZSBkcml2ZXIgaXMgd2VkZ2VkKS4gKi8KK2ludCBwdnIyX2RlYnVnaWZjX3ByaW50X2luZm8oc3RydWN0IHB2cjJfaGR3ICosCisJCQkgICAgIGNoYXIgKmJ1Zl9wdHIsIHVuc2lnbmVkIGludCBidWZfc2l6ZSk7CisKKy8qIE5vbi1pbnRydXNpdmVseSBwcmludCBzb21lIHVzZWZ1bCBkZWJ1Z2dpbmcgaW5mbyBmcm9tIGluc2lkZSB0aGUKKyAgIGRyaXZlci4gIFRoaXMgc2hvdWxkIHdvcmsgZXZlbiBpZiB0aGUgZHJpdmVyIGFwcGVhcnMgdG8gYmUKKyAgIHdlZGdlZC4gKi8KIGludCBwdnIyX2RlYnVnaWZjX3ByaW50X3N0YXR1cyhzdHJ1Y3QgcHZyMl9oZHcgKiwKIAkJCSAgICAgICBjaGFyICpidWZfcHRyLHVuc2lnbmVkIGludCBidWZfc2l6ZSk7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRldmF0dHIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRldmF0dHIuYwppbmRleCBjYmUyYTM0Li4xY2I2YTI2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZXZhdHRyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGV2YXR0ci5jCkBAIC00NiwxMCArNDYsMTEgQEAKIC8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KIC8qIEhhdXBwYXVnZSBQVlItVVNCMiBNb2RlbCAyOXh4eCAqLwogCi1zdGF0aWMgY29uc3QgY2hhciAqcHZyMl9jbGllbnRfMjl4eHhbXSA9IHsKLQkibXNwMzQwMCIsCi0JInNhYTcxMTUiLAotCSJ0dW5lciIsCitzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2NsaWVudF9kZXNjIHB2cjJfY2xpXzI5eHh4W10gPSB7CisJeyAubW9kdWxlX2lkID0gUFZSMl9DTElFTlRfSURfU0FBNzExNSB9LAorCXsgLm1vZHVsZV9pZCA9IFBWUjJfQ0xJRU5UX0lEX01TUDM0MDAgfSwKKwl7IC5tb2R1bGVfaWQgPSBQVlIyX0NMSUVOVF9JRF9UVU5FUiB9LAorCXsgLm1vZHVsZV9pZCA9IFBWUjJfQ0xJRU5UX0lEX0RFTU9EIH0sCiB9OwogCiBzdGF0aWMgY29uc3QgY2hhciAqcHZyMl9mdzFfbmFtZXNfMjl4eHhbXSA9IHsKQEAgLTU5LDggKzYwLDggQEAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfZGVzYyBwdnIyX2RldmljZV8yOXh4eCA9IHsKIAkJLmRlc2NyaXB0aW9uID0gIldpblRWIFBWUiBVU0IyIE1vZGVsIENhdGVnb3J5IDI5eHh4IiwKIAkJLnNob3J0bmFtZSA9ICIyOXh4eCIsCi0JCS5jbGllbnRfbW9kdWxlcy5sc3QgPSBwdnIyX2NsaWVudF8yOXh4eCwKLQkJLmNsaWVudF9tb2R1bGVzLmNudCA9IEFSUkFZX1NJWkUocHZyMl9jbGllbnRfMjl4eHgpLAorCQkuY2xpZW50X3RhYmxlLmxzdCA9IHB2cjJfY2xpXzI5eHh4LAorCQkuY2xpZW50X3RhYmxlLmNudCA9IEFSUkFZX1NJWkUocHZyMl9jbGlfMjl4eHgpLAogCQkuZngyX2Zpcm13YXJlLmxzdCA9IHB2cjJfZncxX25hbWVzXzI5eHh4LAogCQkuZngyX2Zpcm13YXJlLmNudCA9IEFSUkFZX1NJWkUocHZyMl9mdzFfbmFtZXNfMjl4eHgpLAogCQkuZmxhZ19oYXNfaGF1cHBhdWdlX3JvbSA9ICEwLApAQCAtNzcsMTAgKzc4LDExIEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAvKiBIYXVwcGF1Z2UgUFZSLVVTQjIgTW9kZWwgMjR4eHggKi8KIAotc3RhdGljIGNvbnN0IGNoYXIgKnB2cjJfY2xpZW50XzI0eHh4W10gPSB7Ci0JImN4MjU4NDAiLAotCSJ0dW5lciIsCi0JIndtODc3NSIsCitzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2NsaWVudF9kZXNjIHB2cjJfY2xpXzI0eHh4W10gPSB7CisJeyAubW9kdWxlX2lkID0gUFZSMl9DTElFTlRfSURfQ1gyNTg0MCB9LAorCXsgLm1vZHVsZV9pZCA9IFBWUjJfQ0xJRU5UX0lEX1RVTkVSIH0sCisJeyAubW9kdWxlX2lkID0gUFZSMl9DTElFTlRfSURfV004Nzc1IH0sCisJeyAubW9kdWxlX2lkID0gUFZSMl9DTElFTlRfSURfREVNT0QgfSwKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpwdnIyX2Z3MV9uYW1lc18yNHh4eFtdID0gewpAQCAtOTAsOCArOTIsOCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9kZXNjIHB2cjJfZGV2aWNlXzI0eHh4ID0gewogCQkuZGVzY3JpcHRpb24gPSAiV2luVFYgUFZSIFVTQjIgTW9kZWwgQ2F0ZWdvcnkgMjR4eHgiLAogCQkuc2hvcnRuYW1lID0gIjI0eHh4IiwKLQkJLmNsaWVudF9tb2R1bGVzLmxzdCA9IHB2cjJfY2xpZW50XzI0eHh4LAotCQkuY2xpZW50X21vZHVsZXMuY250ID0gQVJSQVlfU0laRShwdnIyX2NsaWVudF8yNHh4eCksCisJCS5jbGllbnRfdGFibGUubHN0ID0gcHZyMl9jbGlfMjR4eHgsCisJCS5jbGllbnRfdGFibGUuY250ID0gQVJSQVlfU0laRShwdnIyX2NsaV8yNHh4eCksCiAJCS5meDJfZmlybXdhcmUubHN0ID0gcHZyMl9mdzFfbmFtZXNfMjR4eHgsCiAJCS5meDJfZmlybXdhcmUuY250ID0gQVJSQVlfU0laRShwdnIyX2Z3MV9uYW1lc18yNHh4eCksCiAJCS5mbGFnX2hhc19jeDI1ODQwID0gITAsCkBAIC0xMTEsMTYgKzExMywxNiBAQAogLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLwogLyogR09UVklFVyBVU0IyLjAgRFZEMiAqLwogCi1zdGF0aWMgY29uc3QgY2hhciAqcHZyMl9jbGllbnRfZ290dmlld18yW10gPSB7Ci0JImN4MjU4NDAiLAotCSJ0dW5lciIsCitzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2NsaWVudF9kZXNjIHB2cjJfY2xpX2dvdHZpZXdfMltdID0geworCXsgLm1vZHVsZV9pZCA9IFBWUjJfQ0xJRU5UX0lEX0NYMjU4NDAgfSwKKwl7IC5tb2R1bGVfaWQgPSBQVlIyX0NMSUVOVF9JRF9UVU5FUiB9LAogfTsKIAogc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9kZXNjIHB2cjJfZGV2aWNlX2dvdHZpZXdfMiA9IHsKIAkJLmRlc2NyaXB0aW9uID0gIkdvdHZpZXcgVVNCIDIuMCBEVkQgMiIsCiAJCS5zaG9ydG5hbWUgPSAiZ3YyIiwKLQkJLmNsaWVudF9tb2R1bGVzLmxzdCA9IHB2cjJfY2xpZW50X2dvdHZpZXdfMiwKLQkJLmNsaWVudF9tb2R1bGVzLmNudCA9IEFSUkFZX1NJWkUocHZyMl9jbGllbnRfZ290dmlld18yKSwKKwkJLmNsaWVudF90YWJsZS5sc3QgPSBwdnIyX2NsaV9nb3R2aWV3XzIsCisJCS5jbGllbnRfdGFibGUuY250ID0gQVJSQVlfU0laRShwdnIyX2NsaV9nb3R2aWV3XzIpLAogCQkuZmxhZ19oYXNfY3gyNTg0MCA9ICEwLAogCQkuZGVmYXVsdF90dW5lcl90eXBlID0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMsCiAJCS5mbGFnX2hhc19hbmFsb2d0dW5lciA9ICEwLApAQCAtMTQwLDggKzE0Miw4IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2Rlc2MgcHZyMl9kZXZpY2VfZ290dmlld18yZCA9IHsKIAkJLmRlc2NyaXB0aW9uID0gIkdvdHZpZXcgVVNCIDIuMCBEVkQgRGVsdXhlIiwKIAkJLnNob3J0bmFtZSA9ICJndjJkIiwKLQkJLmNsaWVudF9tb2R1bGVzLmxzdCA9IHB2cjJfY2xpZW50X2dvdHZpZXdfMiwKLQkJLmNsaWVudF9tb2R1bGVzLmNudCA9IEFSUkFZX1NJWkUocHZyMl9jbGllbnRfZ290dmlld18yKSwKKwkJLmNsaWVudF90YWJsZS5sc3QgPSBwdnIyX2NsaV9nb3R2aWV3XzIsCisJCS5jbGllbnRfdGFibGUuY250ID0gQVJSQVlfU0laRShwdnIyX2NsaV9nb3R2aWV3XzIpLAogCQkuZmxhZ19oYXNfY3gyNTg0MCA9ICEwLAogCQkuZGVmYXVsdF90dW5lcl90eXBlID0gVFVORVJfUEhJTElQU19GTTEyMTZNRV9NSzMsCiAJCS5mbGFnX2hhc19hbmFsb2d0dW5lciA9ICEwLApAQCAtMTgxLDI5ICsxODMsMjkgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHN0cnVjdCBwdnIyX2R2Yl9wcm9wcyBwdnIyX29uYWlyX2NyZWF0b3JfZmVfcHJvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfZHZiX3Byb3BzIHB2cjJfb25haXJfY3JlYXRvcl9mZV9wcm9wcyA9IHsKIAkuZnJvbnRlbmRfYXR0YWNoID0gcHZyMl9sZ2R0MzMwM19hdHRhY2gsCiAJLnR1bmVyX2F0dGFjaCAgICA9IHB2cjJfbGdoMDZ4Zl9hdHRhY2gsCiB9OwogI2VuZGlmCiAKLXN0YXRpYyBjb25zdCBjaGFyICpwdnIyX2NsaWVudF9vbmFpcl9jcmVhdG9yW10gPSB7Ci0JInNhYTcxMTUiLAotCSJ0dW5lciIsCi0JImNzNTNsMzJhIiwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfY2xpZW50X2Rlc2MgcHZyMl9jbGlfb25haXJfY3JlYXRvcltdID0geworCXsgLm1vZHVsZV9pZCA9IFBWUjJfQ0xJRU5UX0lEX1NBQTcxMTUgfSwKKwl7IC5tb2R1bGVfaWQgPSBQVlIyX0NMSUVOVF9JRF9DUzUzTDMyQSB9LAorCXsgLm1vZHVsZV9pZCA9IFBWUjJfQ0xJRU5UX0lEX1RVTkVSIH0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2Rlc2MgcHZyMl9kZXZpY2Vfb25haXJfY3JlYXRvciA9IHsKIAkJLmRlc2NyaXB0aW9uID0gIk9uQWlyIENyZWF0b3IgSHlicmlkIFVTQiB0dW5lciIsCiAJCS5zaG9ydG5hbWUgPSAib2FjIiwKLQkJLmNsaWVudF9tb2R1bGVzLmxzdCA9IHB2cjJfY2xpZW50X29uYWlyX2NyZWF0b3IsCi0JCS5jbGllbnRfbW9kdWxlcy5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfY2xpZW50X29uYWlyX2NyZWF0b3IpLAorCQkuY2xpZW50X3RhYmxlLmxzdCA9IHB2cjJfY2xpX29uYWlyX2NyZWF0b3IsCisJCS5jbGllbnRfdGFibGUuY250ID0gQVJSQVlfU0laRShwdnIyX2NsaV9vbmFpcl9jcmVhdG9yKSwKIAkJLmRlZmF1bHRfdHVuZXJfdHlwZSA9IFRVTkVSX0xHX1REVlNfSDA2WEYsCiAJCS5mbGFnX2hhc19hbmFsb2d0dW5lciA9ICEwLAogCQkuZmxhZ19oYXNfY29tcG9zaXRlID0gITAsCiAJCS5mbGFnX2hhc19zdmlkZW8gPSAhMCwKIAkJLmZsYWdfZGlnaXRhbF9yZXF1aXJlc19jeDIzNDE2ID0gITAsCi0JCS5zaWduYWxfcm91dGluZ19zY2hlbWUgPSBQVlIyX1JPVVRJTkdfU0NIRU1FX0hBVVBQQVVHRSwKKwkJLnNpZ25hbF9yb3V0aW5nX3NjaGVtZSA9IFBWUjJfUk9VVElOR19TQ0hFTUVfT05BSVIsCiAJCS5kaWdpdGFsX2NvbnRyb2xfc2NoZW1lID0gUFZSMl9ESUdJVEFMX1NDSEVNRV9PTkFJUiwKIAkJLmRlZmF1bHRfc3RkX21hc2sgPSBWNEwyX1NURF9OVFNDX00sCiAjaWZkZWYgQ09ORklHX1ZJREVPX1BWUlVTQjJfRFZCCkBAIC0yNDEsMjkgKzI0MywyOSBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHB2cjJfZHZiX3Byb3BzIHB2cjJfb25haXJfdXNiMl9mZV9wcm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kdmJfcHJvcHMgcHZyMl9vbmFpcl91c2IyX2ZlX3Byb3BzID0gewogCS5mcm9udGVuZF9hdHRhY2ggPSBwdnIyX2xnZHQzMzAyX2F0dGFjaCwKIAkudHVuZXJfYXR0YWNoICAgID0gcHZyMl9mY3YxMjM2ZF9hdHRhY2gsCiB9OwogI2VuZGlmCiAKLXN0YXRpYyBjb25zdCBjaGFyICpwdnIyX2NsaWVudF9vbmFpcl91c2IyW10gPSB7Ci0JInNhYTcxMTUiLAotCSJ0dW5lciIsCi0JImNzNTNsMzJhIiwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfY2xpZW50X2Rlc2MgcHZyMl9jbGlfb25haXJfdXNiMltdID0geworCXsgLm1vZHVsZV9pZCA9IFBWUjJfQ0xJRU5UX0lEX1NBQTcxMTUgfSwKKwl7IC5tb2R1bGVfaWQgPSBQVlIyX0NMSUVOVF9JRF9DUzUzTDMyQSB9LAorCXsgLm1vZHVsZV9pZCA9IFBWUjJfQ0xJRU5UX0lEX1RVTkVSIH0sCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2Rlc2MgcHZyMl9kZXZpY2Vfb25haXJfdXNiMiA9IHsKIAkJLmRlc2NyaXB0aW9uID0gIk9uQWlyIFVTQjIgSHlicmlkIFVTQiB0dW5lciIsCiAJCS5zaG9ydG5hbWUgPSAib2EyIiwKLQkJLmNsaWVudF9tb2R1bGVzLmxzdCA9IHB2cjJfY2xpZW50X29uYWlyX3VzYjIsCi0JCS5jbGllbnRfbW9kdWxlcy5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfY2xpZW50X29uYWlyX3VzYjIpLAorCQkuY2xpZW50X3RhYmxlLmxzdCA9IHB2cjJfY2xpX29uYWlyX3VzYjIsCisJCS5jbGllbnRfdGFibGUuY250ID0gQVJSQVlfU0laRShwdnIyX2NsaV9vbmFpcl91c2IyKSwKIAkJLmRlZmF1bHRfdHVuZXJfdHlwZSA9IFRVTkVSX1BISUxJUFNfRkNWMTIzNkQsCiAJCS5mbGFnX2hhc19hbmFsb2d0dW5lciA9ICEwLAogCQkuZmxhZ19oYXNfY29tcG9zaXRlID0gITAsCiAJCS5mbGFnX2hhc19zdmlkZW8gPSAhMCwKIAkJLmZsYWdfZGlnaXRhbF9yZXF1aXJlc19jeDIzNDE2ID0gITAsCi0JCS5zaWduYWxfcm91dGluZ19zY2hlbWUgPSBQVlIyX1JPVVRJTkdfU0NIRU1FX0hBVVBQQVVHRSwKKwkJLnNpZ25hbF9yb3V0aW5nX3NjaGVtZSA9IFBWUjJfUk9VVElOR19TQ0hFTUVfT05BSVIsCiAJCS5kaWdpdGFsX2NvbnRyb2xfc2NoZW1lID0gUFZSMl9ESUdJVEFMX1NDSEVNRV9PTkFJUiwKIAkJLmRlZmF1bHRfc3RkX21hc2sgPSBWNEwyX1NURF9OVFNDX00sCiAjaWZkZWYgQ09ORklHX1ZJREVPX1BWUlVTQjJfRFZCCkBAIC0zMTQsMTUgKzMxNiwxNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IHB2cjJfZHZiX3Byb3BzIHB2cjJfNzN4eHhfZHZiX3Byb3BzID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2R2Yl9wcm9wcyBwdnIyXzczeHh4X2R2Yl9wcm9wcyA9IHsKIAkuZnJvbnRlbmRfYXR0YWNoID0gcHZyMl90ZGExMDA0OF9hdHRhY2gsCiAJLnR1bmVyX2F0dGFjaCAgICA9IHB2cjJfNzN4eHhfdGRhMTgyNzFfODI5NV9hdHRhY2gsCiB9OwogI2VuZGlmCiAKLXN0YXRpYyBjb25zdCBjaGFyICpwdnIyX2NsaWVudF83M3h4eFtdID0gewotCSJjeDI1ODQwIiwKLQkidHVuZXIiLAorc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9jbGllbnRfZGVzYyBwdnIyX2NsaV83M3h4eFtdID0geworCXsgLm1vZHVsZV9pZCA9IFBWUjJfQ0xJRU5UX0lEX0NYMjU4NDAgfSwKKwl7IC5tb2R1bGVfaWQgPSBQVlIyX0NMSUVOVF9JRF9UVU5FUiwKKwkgIC5pMmNfYWRkcmVzc19saXN0ID0gIlx4NDIifSwKIH07CiAKIHN0YXRpYyBjb25zdCBjaGFyICpwdnIyX2Z3MV9uYW1lc183M3h4eFtdID0gewpAQCAtMzMyLDggKzMzNSw4IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2Rlc2MgcHZyMl9kZXZpY2VfNzN4eHggPSB7CiAJCS5kZXNjcmlwdGlvbiA9ICJXaW5UViBIVlItMTkwMCBNb2RlbCBDYXRlZ29yeSA3M3h4eCIsCiAJCS5zaG9ydG5hbWUgPSAiNzN4eHgiLAotCQkuY2xpZW50X21vZHVsZXMubHN0ID0gcHZyMl9jbGllbnRfNzN4eHgsCi0JCS5jbGllbnRfbW9kdWxlcy5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfY2xpZW50XzczeHh4KSwKKwkJLmNsaWVudF90YWJsZS5sc3QgPSBwdnIyX2NsaV83M3h4eCwKKwkJLmNsaWVudF90YWJsZS5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfY2xpXzczeHh4KSwKIAkJLmZ4Ml9maXJtd2FyZS5sc3QgPSBwdnIyX2Z3MV9uYW1lc183M3h4eCwKIAkJLmZ4Ml9maXJtd2FyZS5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfZncxX25hbWVzXzczeHh4KSwKIAkJLmZsYWdfaGFzX2N4MjU4NDAgPSAhMCwKQEAgLTQxOCwyMiArNDIxLDE3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgcHZyMl9kdmJfcHJvcHMgcHZyMl83NTB4eF9kdmJfcHJvcHMgPSB7CitzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfZHZiX3Byb3BzIHB2cjJfNzUweHhfZHZiX3Byb3BzID0gewogCS5mcm9udGVuZF9hdHRhY2ggPSBwdnIyX3M1aDE0MDlfYXR0YWNoLAogCS50dW5lcl9hdHRhY2ggICAgPSBwdnIyX3RkYTE4MjcxXzgyOTVfYXR0YWNoLAogfTsKIAotc3RhdGljIHN0cnVjdCBwdnIyX2R2Yl9wcm9wcyBwdnIyXzc1MXh4X2R2Yl9wcm9wcyA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9kdmJfcHJvcHMgcHZyMl83NTF4eF9kdmJfcHJvcHMgPSB7CiAJLmZyb250ZW5kX2F0dGFjaCA9IHB2cjJfczVoMTQxMV9hdHRhY2gsCiAJLnR1bmVyX2F0dGFjaCAgICA9IHB2cjJfdGRhMTgyNzFfODI5NV9hdHRhY2gsCiB9OwogI2VuZGlmCiAKLXN0YXRpYyBjb25zdCBjaGFyICpwdnIyX2NsaWVudF83NXh4eFtdID0gewotCSJjeDI1ODQwIiwKLQkidHVuZXIiLAotfTsKLQogc3RhdGljIGNvbnN0IGNoYXIgKnB2cjJfZncxX25hbWVzXzc1eHh4W10gPSB7CiAJCSJ2NGwtcHZydXNiMi03M3h4eC0wMS5mdyIsCiB9OwpAQCAtNDQxLDggKzQzOSw4IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfZGV2aWNlX2Rlc2MgcHZyMl9kZXZpY2VfNzUweHggPSB7CiAJCS5kZXNjcmlwdGlvbiA9ICJXaW5UViBIVlItMTk1MCBNb2RlbCBDYXRlZ29yeSA3NTB4eCIsCiAJCS5zaG9ydG5hbWUgPSAiNzUweHgiLAotCQkuY2xpZW50X21vZHVsZXMubHN0ID0gcHZyMl9jbGllbnRfNzV4eHgsCi0JCS5jbGllbnRfbW9kdWxlcy5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfY2xpZW50Xzc1eHh4KSwKKwkJLmNsaWVudF90YWJsZS5sc3QgPSBwdnIyX2NsaV83M3h4eCwKKwkJLmNsaWVudF90YWJsZS5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfY2xpXzczeHh4KSwKIAkJLmZ4Ml9maXJtd2FyZS5sc3QgPSBwdnIyX2Z3MV9uYW1lc183NXh4eCwKIAkJLmZ4Ml9maXJtd2FyZS5jbnQgPSBBUlJBWV9TSVpFKHB2cjJfZncxX25hbWVzXzc1eHh4KSwKIAkJLmZsYWdfaGFzX2N4MjU4NDAgPSAhMCwKQEAgLTQ2Myw4ICs0NjEsOCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9kZXNjIHB2cjJfZGV2aWNlXzc1MXh4ID0gewogCQkuZGVzY3JpcHRpb24gPSAiV2luVFYgSFZSLTE5NTAgTW9kZWwgQ2F0ZWdvcnkgNzUxeHgiLAogCQkuc2hvcnRuYW1lID0gIjc1MXh4IiwKLQkJLmNsaWVudF9tb2R1bGVzLmxzdCA9IHB2cjJfY2xpZW50Xzc1eHh4LAotCQkuY2xpZW50X21vZHVsZXMuY250ID0gQVJSQVlfU0laRShwdnIyX2NsaWVudF83NXh4eCksCisJCS5jbGllbnRfdGFibGUubHN0ID0gcHZyMl9jbGlfNzN4eHgsCisJCS5jbGllbnRfdGFibGUuY250ID0gQVJSQVlfU0laRShwdnIyX2NsaV83M3h4eCksCiAJCS5meDJfZmlybXdhcmUubHN0ID0gcHZyMl9mdzFfbmFtZXNfNzV4eHgsCiAJCS5meDJfZmlybXdhcmUuY250ID0gQVJSQVlfU0laRShwdnIyX2Z3MV9uYW1lc183NXh4eCksCiAJCS5mbGFnX2hhc19jeDI1ODQwID0gITAsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZXZhdHRyLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kZXZhdHRyLmgKaW5kZXggY2IzYTMzZS4uM2U1NTMzOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZGV2YXR0ci5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWRldmF0dHIuaApAQCAtMzMsNiArMzMsMzQgQEAKICovCiAKIAorI2RlZmluZSBQVlIyX0NMSUVOVF9JRF9OVUxMIDAKKyNkZWZpbmUgUFZSMl9DTElFTlRfSURfTVNQMzQwMCAxCisjZGVmaW5lIFBWUjJfQ0xJRU5UX0lEX0NYMjU4NDAgMgorI2RlZmluZSBQVlIyX0NMSUVOVF9JRF9TQUE3MTE1IDMKKyNkZWZpbmUgUFZSMl9DTElFTlRfSURfVFVORVIgNAorI2RlZmluZSBQVlIyX0NMSUVOVF9JRF9DUzUzTDMyQSA1CisjZGVmaW5lIFBWUjJfQ0xJRU5UX0lEX1dNODc3NSA2CisjZGVmaW5lIFBWUjJfQ0xJRU5UX0lEX0RFTU9EIDcKKworc3RydWN0IHB2cjJfZGV2aWNlX2NsaWVudF9kZXNjIHsKKwkvKiBPbmUgb3ZyIFBWUjJfQ0xJRU5UX0lEX3h4eHggKi8KKwl1bnNpZ25lZCBjaGFyIG1vZHVsZV9pZDsKKworCS8qIE51bGwtdGVybWluYXRlZCBhcnJheSBvZiBJMkMgYWRkcmVzc2VzIHRvIHRyeSBpbiBvcmRlcgorCSAgIGluaXRpYWxpemUgdGhlIG1vZHVsZS4gIEl0J3Mgc2FmZSB0byBtYWtlIHRoaXMgbnVsbCB0ZXJtaW5hdGVkCisJICAgc2luY2Ugd2UncmUgbmV2ZXIgZ29pbmcgdG8gZW5jb3VudGVyIGFuIGkyYyBkZXZpY2Ugd2l0aCBhbgorCSAgIGFkZHJlc3Mgb2YgemVyby4gIElmIHRoaXMgaXMgYSBudWxsIHBvaW50ZXIgb3IgemVyby1sZW5ndGgsCisJICAgdGhlbiBubyBJMkMgYWRkcmVzc2VzIGhhdmUgYmVlbiBzcGVjaWZpZWQsIGluIHdoaWNoIGNhc2Ugd2UnbGwKKwkgICB0cnkgc29tZSBjb21waWxlZCBpbiBkZWZhdWx0cyBmb3Igbm93LiAqLworCXVuc2lnbmVkIGNoYXIgKmkyY19hZGRyZXNzX2xpc3Q7Cit9OworCitzdHJ1Y3QgcHZyMl9kZXZpY2VfY2xpZW50X3RhYmxlIHsKKwljb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfY2xpZW50X2Rlc2MgKmxzdDsKKwl1bnNpZ25lZCBjaGFyIGNudDsKK307CisKKwogc3RydWN0IHB2cjJfc3RyaW5nX3RhYmxlIHsKIAljb25zdCBjaGFyICoqbHN0OwogCXVuc2lnbmVkIGludCBjbnQ7CkBAIC00MCw2ICs2OCw3IEBACiAKICNkZWZpbmUgUFZSMl9ST1VUSU5HX1NDSEVNRV9IQVVQUEFVR0UgMAogI2RlZmluZSBQVlIyX1JPVVRJTkdfU0NIRU1FX0dPVFZJRVcgMQorI2RlZmluZSBQVlIyX1JPVVRJTkdfU0NIRU1FX09OQUlSIDIKIAogI2RlZmluZSBQVlIyX0RJR0lUQUxfU0NIRU1FX05PTkUgMAogI2RlZmluZSBQVlIyX0RJR0lUQUxfU0NIRU1FX0hBVVBQQVVHRSAxCkBAIC02Niw2ICs5NSw5IEBACiAJLyogTGlzdCBvZiBhZGRpdGlvbmFsIGNsaWVudCBtb2R1bGVzIHdlIG5lZWQgdG8gbG9hZCAqLwogCXN0cnVjdCBwdnIyX3N0cmluZ190YWJsZSBjbGllbnRfbW9kdWxlczsKIAorCS8qIExpc3Qgb2YgZGVmaW5lZCBjbGllbnQgbW9kdWxlcyB3ZSBuZWVkIHRvIGxvYWQgKi8KKwlzdHJ1Y3QgcHZyMl9kZXZpY2VfY2xpZW50X3RhYmxlIGNsaWVudF90YWJsZTsKKwogCS8qIExpc3Qgb2YgRlgyIGZpcm13YXJlIGZpbGUgbmFtZXMgd2Ugc2hvdWxkIHNlYXJjaDsgaWYgZW1wdHkgdGhlbgogCSAgIEZYMiBmaXJtd2FyZSBjaGVjayAvIGxvYWQgaXMgc2tpcHBlZCBhbmQgd2UgYXNzdW1lIHRoZSBkZXZpY2UKIAkgICB3YXMgaW5pdGlhbGl6ZWQgZnJvbSBpbnRlcm5hbCBST00uICovCkBAIC03Myw3ICsxMDUsNyBAQAogCiAjaWZkZWYgQ09ORklHX1ZJREVPX1BWUlVTQjJfRFZCCiAJLyogY2FsbGJhY2sgZnVuY3Rpb25zIHRvIGhhbmRsZSBhdHRhY2htZW50IG9mIGRpZ2l0YWwgdHVuZXIgJiBkZW1vZCAqLwotCXN0cnVjdCBwdnIyX2R2Yl9wcm9wcyAqZHZiX3Byb3BzOworCWNvbnN0IHN0cnVjdCBwdnIyX2R2Yl9wcm9wcyAqZHZiX3Byb3BzOwogCiAjZW5kaWYKIAkvKiBJbml0aWFsIHN0YW5kYXJkIGJpdHMgdG8gdXNlIGZvciB0aGlzIGRldmljZSwgaWYgbm90IHplcm8uCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1kdmIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWR2Yi5jCmluZGV4IDc3YjNjMzMuLmI3ZjVjNDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWR2Yi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWR2Yi5jCkBAIC0zMjEsNyArMzIxLDcgQEAKIHN0YXRpYyBpbnQgcHZyMl9kdmJfZnJvbnRlbmRfaW5pdChzdHJ1Y3QgcHZyMl9kdmJfYWRhcHRlciAqYWRhcCkKIHsKIAlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGFkYXAtPmNoYW5uZWwuaGR3OwotCXN0cnVjdCBwdnIyX2R2Yl9wcm9wcyAqZHZiX3Byb3BzID0gaGR3LT5oZHdfZGVzYy0+ZHZiX3Byb3BzOworCWNvbnN0IHN0cnVjdCBwdnIyX2R2Yl9wcm9wcyAqZHZiX3Byb3BzID0gaGR3LT5oZHdfZGVzYy0+ZHZiX3Byb3BzOwogCWludCByZXQgPSAwOwogCiAJaWYgKGR2Yl9wcm9wcyA9PSBOVUxMKSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1lbmNvZGVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1lbmNvZGVyLmMKaW5kZXggMjczZDJhMS4uNTRhYzUzNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItZW5jb2Rlci5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWVuY29kZXIuYwpAQCAtMzQ3LDcgKzM0Nyw3IEBACiAJaW50IGVuY01pc2MzQXJnID0gMDsKIAogI2lmIDAKLQkvKiBUaGlzIGluZXhwbGljYWJsZSBiaXQgaGFwcGVucyBpbiB0aGUgSGF1cHBhZ2Ugd2luZG93cworCS8qIFRoaXMgaW5leHBsaWNhYmxlIGJpdCBoYXBwZW5zIGluIHRoZSBIYXVwcGF1Z2Ugd2luZG93cwogCSAgIGRyaXZlciAoZm9yIGJvdGggMjR4eHggYW5kIDI5eHh4IGRldmljZXMpLiAgSG93ZXZlciBJCiAJICAgY3VycmVudGx5IHNlZSBubyBkaWZmZXJlbmNlIGluIGJlaGF2aW9yIHdpdGggb3Igd2l0aG91dAogCSAgIHRoaXMgc3R1ZmYuICBMZWF2ZSB0aGlzIGhlcmUgYXMgYSBub3RlIG9mIGl0cyBleGlzdGVuY2UsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHctaW50ZXJuYWwuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy1pbnRlcm5hbC5oCmluZGV4IGRlN2VlNzIuLjVkNzVlYjUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy1pbnRlcm5hbC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy1pbnRlcm5hbC5oCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlICJwdnJ1c2IyLWhkdy5oIgogI2luY2x1ZGUgInB2cnVzYjItaW8uaCIKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL2N4MjM0MXguaD4KICNpbmNsdWRlICJwdnJ1c2IyLWRldmF0dHIuaCIKIApAQCAtNTcsOCArNTgsNiBAQAogI2RlZmluZSBMT0NLX1RBS0UoeCkgZG8geyBtdXRleF9sb2NrKCZ4IyNfbXV0ZXgpOyB4IyNfaGVsZCA9ICEwOyB9IHdoaWxlICgwKQogI2RlZmluZSBMT0NLX0dJVkUoeCkgZG8geyB4IyNfaGVsZCA9IDA7IG11dGV4X3VubG9jaygmeCMjX211dGV4KTsgfSB3aGlsZSAoMCkKIAotc3RydWN0IHB2cjJfZGVjb2RlcjsKLQogdHlwZWRlZiBpbnQgKCpwdnIyX2N0bGZfaXNfZGlydHkpKHN0cnVjdCBwdnIyX2N0cmwgKik7CiB0eXBlZGVmIHZvaWQgKCpwdnIyX2N0bGZfY2xlYXJfZGlydHkpKHN0cnVjdCBwdnIyX2N0cmwgKik7CiB0eXBlZGVmIGludCAoKnB2cjJfY3RsZl9jaGVja192YWx1ZSkoc3RydWN0IHB2cjJfY3RybCAqLGludCk7CkBAIC0xMzksMjIgKzEzOCw2IEBACiB9OwogCiAKLXN0cnVjdCBwdnIyX2RlY29kZXJfY3RybCB7Ci0Jdm9pZCAqY3R4dDsKLQl2b2lkICgqZGV0YWNoKSh2b2lkICopOwotCXZvaWQgKCplbmFibGUpKHZvaWQgKixpbnQpOwotCXZvaWQgKCpmb3JjZV9yZXNldCkodm9pZCAqKTsKLX07Ci0KLSNkZWZpbmUgUFZSMl9JMkNfUEVORF9ERVRFQ1QgIDB4MDEgIC8qIE5lZWQgdG8gZGV0ZWN0IGEgY2xpZW50IHR5cGUgKi8KLSNkZWZpbmUgUFZSMl9JMkNfUEVORF9DTElFTlQgIDB4MDIgIC8qIENsaWVudCBuZWVkcyBhIHNwZWNpZmljIHVwZGF0ZSAqLwotI2RlZmluZSBQVlIyX0kyQ19QRU5EX1JFRlJFU0ggMHgwNCAgLyogQ2xpZW50IGhhcyBzcGVjaWZpYyBwZW5kaW5nIGJpdHMgKi8KLSNkZWZpbmUgUFZSMl9JMkNfUEVORF9TVEFMRSAgIDB4MDggIC8qIEJyb2FkY2FzdCBwZW5kaW5nIGJpdHMgKi8KLQotI2RlZmluZSBQVlIyX0kyQ19QRU5EX0FMTCAoUFZSMl9JMkNfUEVORF9ERVRFQ1QgfFwKLQkJCSAgIFBWUjJfSTJDX1BFTkRfQ0xJRU5UIHxcCi0JCQkgICBQVlIyX0kyQ19QRU5EX1JFRlJFU0ggfFwKLQkJCSAgIFBWUjJfSTJDX1BFTkRfU1RBTEUpCiAKIC8qIERpc3Bvc2l0aW9uIG9mIGZpcm13YXJlMSBsb2FkaW5nIHNpdHVhdGlvbiAqLwogI2RlZmluZSBGVzFfU1RBVEVfVU5LTk9XTiAwCkBAIC0xNzksNiArMTYyLDggQEAKIAlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldjsKIAlzdHJ1Y3QgdXNiX2ludGVyZmFjZSAqdXNiX2ludGY7CiAKKwkvKiBPdXIgaGFuZGxlIGludG8gdGhlIHY0bDIgc3ViLWRldmljZSBhcmNoaXRlY3R1cmUgKi8KKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CiAJLyogRGV2aWNlIGRlc2NyaXB0aW9uLCBhbnl0aGluZyB0aGF0IG11c3QgYWRqdXN0IGJlaGF2aW9yIGJhc2VkIG9uCiAJICAgZGV2aWNlIHNwZWNpZmljIGluZm8gd2lsbCB1c2UgaW5mb3JtYXRpb24gaGVsZCBoZXJlLiAqLwogCWNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9kZXNjICpoZHdfZGVzYzsKQEAgLTE4Niw3ICsxNzEsNiBAQAogCS8qIEtlcm5lbCB3b3JrZXIgdGhyZWFkIGhhbmRsaW5nICovCiAJc3RydWN0IHdvcmtxdWV1ZV9zdHJ1Y3QgKndvcmtxdWV1ZTsKIAlzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29ya3BvbGw7ICAgICAvKiBVcGRhdGUgZHJpdmVyIHN0YXRlICovCi0Jc3RydWN0IHdvcmtfc3RydWN0IHdvcmtpMmNzeW5jOyAgLyogVXBkYXRlIGkyYyBjbGllbnRzICovCiAKIAkvKiBWaWRlbyBzcGlnb3QgKi8KIAlzdHJ1Y3QgcHZyMl9zdHJlYW0gKnZpZF9zdHJlYW07CkBAIC0xOTUsMjAgKzE3OSwyNiBAQAogCXN0cnVjdCBtdXRleCBiaWdfbG9ja19tdXRleDsKIAlpbnQgYmlnX2xvY2tfaGVsZDsgIC8qIEZvciBkZWJ1Z2dpbmcgKi8KIAorCS8qIFRoaXMgaXMgYSBzaW1wbGUgc3RyaW5nIHdoaWNoIGlkZW50aWZpZXMgdGhlIGluc3RhbmNlIG9mIHRoaXMKKwkgICBkcml2ZXIuICBJdCBpcyB1bmlxdWUgd2l0aGluIHRoZSBzZXQgb2YgZXhpc3RpbmcgZGV2aWNlcywgYnV0CisJICAgdGhlcmUgaXMgbm8gYXR0ZW1wdCB0byBrZWVwIHRoZSBuYW1lIGNvbnNpc3RlbnQgd2l0aCB0aGUgc2FtZQorCSAgIHBoeXNpY2FsIGRldmljZSBlYWNoIHRpbWUuICovCiAJY2hhciBuYW1lWzMyXTsKIAorCS8qIFRoaXMgaXMgYSBzaW1wbGUgc3RyaW5nIHdoaWNoIGlkZW50aWZpZXMgdGhlIHBoeXNpY2FsIGRldmljZQorCSAgIGluc3RhbmNlIGl0c2VsZiAtIGlmIHBvc3NpYmxlLiAgKElmIG5vdCBwb3NzaWJsZSwgdGhlbiBpdCBpcworCSAgIGJhc2VkIG9uIHRoZSBzcGVjaWZpYyBkcml2ZXIgaW5zdGFuY2UsIHNpbWlsYXIgdG8gbmFtZSBhYm92ZS4pCisJICAgVGhlIGlkZWEgaGVyZSBpcyB0aGF0IHVzZXJzcGFjZSBtaWdodCBob3BlZnVsbHkgYmUgYWJsZSB0byB1c2UKKwkgICB0aGlzIHJlY29nbml6ZSBzcGVjaWZpYyB0dW5lcnMuICBJdCB3aWxsIGVuY29kZSBhIHNlcmlhbCBudW1iZXIsCisJICAgaWYgYXZhaWxhYmxlLiAqLworCWNoYXIgaWRlbnRpZmllclszMl07CisKIAkvKiBJMkMgc3R1ZmYgKi8KIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXA7CiAJc3RydWN0IGkyY19hbGdvcml0aG0gaTJjX2FsZ287CiAJcHZyMl9pMmNfZnVuYyBpMmNfZnVuY1tQVlIyX0kyQ19GVU5DX0NOVF07CiAJaW50IGkyY19jeDI1ODQwX2hhY2tfc3RhdGU7CiAJaW50IGkyY19saW5rZWQ7Ci0JdW5zaWduZWQgaW50IGkyY19wZW5kX3R5cGVzOyAgICAvKiBXaGljaCB0eXBlcyBvZiB1cGRhdGUgYXJlIG5lZWRlZCAqLwotCXVuc2lnbmVkIGxvbmcgaTJjX3BlbmRfbWFzazsgICAgLyogQ2hhbmdlIGJpdHMgd2UgbmVlZCB0byBzY2FuICovCi0JdW5zaWduZWQgbG9uZyBpMmNfc3RhbGVfbWFzazsgICAvKiBQZW5kaW5nIGJyb2FkY2FzdCBjaGFuZ2UgYml0cyAqLwotCXVuc2lnbmVkIGxvbmcgaTJjX2FjdGl2ZV9tYXNrOyAgLyogQWxsIGNoYW5nZSBiaXRzIGN1cnJlbnRseSBpbiB1c2UgKi8KLQlzdHJ1Y3QgbGlzdF9oZWFkIGkyY19jbGllbnRzOwotCXN0cnVjdCBtdXRleCBpMmNfbGlzdF9sb2NrOwogCiAJLyogRnJlcXVlbmN5IHRhYmxlICovCiAJdW5zaWduZWQgaW50IGZyZXFUYWJsZVtGUkVRVEFCTEVfU0laRV07CkBAIC0yNzUsNiArMjY1LDcgQEAKIAl3YWl0X3F1ZXVlX2hlYWRfdCBzdGF0ZV93YWl0X2RhdGE7CiAKIAorCWludCBmb3JjZV9kaXJ0eTsgICAgICAgIC8qIGNvbnNpZGVyIGFsbCBjb250cm9scyBkaXJ0eSBpZiB0cnVlICovCiAJaW50IGZsYWdfb2s7ICAgICAgICAgICAgLyogZGV2aWNlIGluIGtub3duIGdvb2Qgc3RhdGUgKi8KIAlpbnQgZmxhZ19kaXNjb25uZWN0ZWQ7ICAvKiBmbGFnX29rID09IDAgZHVlIHRvIGRpc2Nvbm5lY3QgKi8KIAlpbnQgZmxhZ19pbml0X29rOyAgICAgICAvKiB0cnVlIGlmIHN0cnVjdHVyZSBpcyBmdWxseSBpbml0aWFsaXplZCAqLwpAQCAtMjgzLDE3ICsyNzQsMTMgQEAKIAlpbnQgZmxhZ19kZWNvZGVyX21pc3NlZDsvKiBXZSd2ZSBub3RpY2VkIG1pc3NpbmcgZGVjb2RlciAqLwogCWludCBmbGFnX3RyaXBwZWQ7ICAgICAgIC8qIEluZGljYXRlcyBvdmVyYWxsIGZhaWx1cmUgdG8gc3RhcnQgKi8KIAotCXN0cnVjdCBwdnIyX2RlY29kZXJfY3RybCAqZGVjb2Rlcl9jdHJsOworCXVuc2lnbmVkIGludCBkZWNvZGVyX2NsaWVudF9pZDsKIAogCS8vIENQVSBmaXJtd2FyZSBpbmZvICh1c2VkIHRvIGhlbHAgZmluZCAvIHNhdmUgZmlybXdhcmUgZGF0YSkKIAljaGFyICpmd19idWZmZXI7CiAJdW5zaWduZWQgaW50IGZ3X3NpemU7CiAJaW50IGZ3X2NwdV9mbGFnOyAvKiBUcnVlIGlmIHdlIGFyZSBkZWFsaW5nIHdpdGggdGhlIENQVSAqLwogCi0JLy8gVHJ1ZSBpZiB0aGVyZSBpcyBhIHJlcXVlc3QgdG8gdHJpZ2dlciBsb2dnaW5nIG9mIHN0YXRlIGluIGVhY2gKLQkvLyBtb2R1bGUuCi0JaW50IGxvZ19yZXF1ZXN0ZWQ7Ci0KIAkvKiBUdW5lciAvIGZyZXF1ZW5jeSBjb250cm9sIHN0dWZmICovCiAJdW5zaWduZWQgaW50IHR1bmVyX3R5cGU7CiAJaW50IHR1bmVyX3VwZGF0ZWQ7CkBAIC0zOTEsNyArMzc4LDggQEAKIAogLyogVGhpcyBmdW5jdGlvbiBnZXRzIHRoZSBjdXJyZW50IGZyZXF1ZW5jeSAqLwogdW5zaWduZWQgbG9uZyBwdnIyX2hkd19nZXRfY3VyX2ZyZXEoc3RydWN0IHB2cjJfaGR3ICopOwotdm9pZCBwdnIyX2hkd19zZXRfZGVjb2RlcihzdHJ1Y3QgcHZyMl9oZHcgKixzdHJ1Y3QgcHZyMl9kZWNvZGVyX2N0cmwgKik7CisKK3ZvaWQgcHZyMl9oZHdfc3RhdHVzX3BvbGwoc3RydWN0IHB2cjJfaGR3ICopOwogCiAjZW5kaWYgLyogX19QVlJVU0IyX0hEV19JTlRFUk5BTF9IICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKaW5kZXggZmEzMDRlNS4uN2E2NWI0MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaGR3LmMKQEAgLTI0LDE3ICsyNCwyMiBAQAogI2luY2x1ZGUgPGxpbnV4L2Zpcm13YXJlLmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgogI2luY2x1ZGUgInB2cnVzYjIuaCIKICNpbmNsdWRlICJwdnJ1c2IyLXN0ZC5oIgogI2luY2x1ZGUgInB2cnVzYjItdXRpbC5oIgogI2luY2x1ZGUgInB2cnVzYjItaGR3LmgiCiAjaW5jbHVkZSAicHZydXNiMi1pMmMtY29yZS5oIgotI2luY2x1ZGUgInB2cnVzYjItdHVuZXIuaCIKICNpbmNsdWRlICJwdnJ1c2IyLWVlcHJvbS5oIgogI2luY2x1ZGUgInB2cnVzYjItaGR3LWludGVybmFsLmgiCiAjaW5jbHVkZSAicHZydXNiMi1lbmNvZGVyLmgiCiAjaW5jbHVkZSAicHZydXNiMi1kZWJ1Zy5oIgogI2luY2x1ZGUgInB2cnVzYjItZngyLWNtZC5oIgorI2luY2x1ZGUgInB2cnVzYjItd204Nzc1LmgiCisjaW5jbHVkZSAicHZydXNiMi12aWRlby12NGwuaCIKKyNpbmNsdWRlICJwdnJ1c2IyLWN4MjU4NHgtdjRsLmgiCisjaW5jbHVkZSAicHZydXNiMi1jczUzbDMyYS5oIgorI2luY2x1ZGUgInB2cnVzYjItYXVkaW8uaCIKIAogI2RlZmluZSBUVl9NSU5fRlJFUSAgICAgNTUyNTAwMDBMCiAjZGVmaW5lIFRWX01BWF9GUkVRICAgIDg1MDAwMDAwMEwKQEAgLTEwNCw2ICsxMDksMzkgQEAKIC8qIHNpemUgb2YgYSBmaXJtd2FyZSBjaHVuayAqLwogI2RlZmluZSBGSVJNV0FSRV9DSFVOS19TSVpFIDB4MjAwMAogCit0eXBlZGVmIHZvaWQgKCpwdnIyX3N1YmRldl91cGRhdGVfZnVuYykoc3RydWN0IHB2cjJfaGR3ICosCisJCQkJCXN0cnVjdCB2NGwyX3N1YmRldiAqKTsKKworc3RhdGljIGNvbnN0IHB2cjJfc3ViZGV2X3VwZGF0ZV9mdW5jIHB2cjJfbW9kdWxlX3VwZGF0ZV9mdW5jdGlvbnNbXSA9IHsKKwlbUFZSMl9DTElFTlRfSURfV004Nzc1XSA9IHB2cjJfd204Nzc1X3N1YmRldl91cGRhdGUsCisJW1BWUjJfQ0xJRU5UX0lEX1NBQTcxMTVdID0gcHZyMl9zYWE3MTE1X3N1YmRldl91cGRhdGUsCisJW1BWUjJfQ0xJRU5UX0lEX01TUDM0MDBdID0gcHZyMl9tc3AzNDAwX3N1YmRldl91cGRhdGUsCisJW1BWUjJfQ0xJRU5UX0lEX0NYMjU4NDBdID0gcHZyMl9jeDI1ODQwX3N1YmRldl91cGRhdGUsCisJW1BWUjJfQ0xJRU5UX0lEX0NTNTNMMzJBXSA9IHB2cjJfY3M1M2wzMmFfc3ViZGV2X3VwZGF0ZSwKK307CisKK3N0YXRpYyBjb25zdCBjaGFyICptb2R1bGVfbmFtZXNbXSA9IHsKKwlbUFZSMl9DTElFTlRfSURfTVNQMzQwMF0gPSAibXNwMzQwMCIsCisJW1BWUjJfQ0xJRU5UX0lEX0NYMjU4NDBdID0gImN4MjU4NDAiLAorCVtQVlIyX0NMSUVOVF9JRF9TQUE3MTE1XSA9ICJzYWE3MTE1IiwKKwlbUFZSMl9DTElFTlRfSURfVFVORVJdID0gInR1bmVyIiwKKwlbUFZSMl9DTElFTlRfSURfREVNT0RdID0gInR1bmVyIiwKKwlbUFZSMl9DTElFTlRfSURfQ1M1M0wzMkFdID0gImNzNTNsMzJhIiwKKwlbUFZSMl9DTElFTlRfSURfV004Nzc1XSA9ICJ3bTg3NzUiLAorfTsKKworCitzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciAqbW9kdWxlX2kyY19hZGRyZXNzZXNbXSA9IHsKKwlbUFZSMl9DTElFTlRfSURfVFVORVJdID0gIlx4NjBceDYxXHg2Mlx4NjMiLAorCVtQVlIyX0NMSUVOVF9JRF9ERU1PRF0gPSAiXHg0MyIsCisJW1BWUjJfQ0xJRU5UX0lEX01TUDM0MDBdID0gIlx4NDAiLAorCVtQVlIyX0NMSUVOVF9JRF9TQUE3MTE1XSA9ICJceDIxIiwKKwlbUFZSMl9DTElFTlRfSURfV004Nzc1XSA9ICJceDFiIiwKKwlbUFZSMl9DTElFTlRfSURfQ1gyNTg0MF0gPSAiXHg0NCIsCisJW1BWUjJfQ0xJRU5UX0lEX0NTNTNMMzJBXSA9ICJceDExIiwKK307CisKKwogLyogRGVmaW5lIHRoZSBsaXN0IG9mIGFkZGl0aW9uYWwgY29udHJvbHMgd2UnbGwgZHluYW1pY2FsbHkgY29uc3RydWN0IGJhc2VkCiAgICBvbiBxdWVyeSBvZiB0aGUgY3gyMzQxeCBtb2R1bGUuICovCiBzdHJ1Y3QgcHZyMl9tcGVnX2lkcyB7CkBAIC0yNzcsNyArMzE1LDYgQEAKIHN0YXRpYyB2b2lkIHB2cjJfaGR3X3N0YXRlX3NjaGVkKHN0cnVjdCBwdnIyX2hkdyAqKTsKIHN0YXRpYyBpbnQgcHZyMl9oZHdfc3RhdGVfZXZhbChzdHJ1Y3QgcHZyMl9oZHcgKik7CiBzdGF0aWMgdm9pZCBwdnIyX2hkd19zZXRfY3VyX2ZyZXEoc3RydWN0IHB2cjJfaGR3ICosdW5zaWduZWQgbG9uZyk7Ci1zdGF0aWMgdm9pZCBwdnIyX2hkd193b3JrZXJfaTJjKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7CiBzdGF0aWMgdm9pZCBwdnIyX2hkd193b3JrZXJfcG9sbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwogc3RhdGljIGludCBwdnIyX2hkd193YWl0KHN0cnVjdCBwdnIyX2hkdyAqLGludCBzdGF0ZSk7CiBzdGF0aWMgaW50IHB2cjJfaGR3X3VudHJpcF91bmxvY2tlZChzdHJ1Y3QgcHZyMl9oZHcgKik7CkBAIC02NDIsNyArNjc5LDcgQEAKIAl1bnNpZ25lZCBsb25nIGZ2OwogCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gY3B0ci0+aGR3OwogCWlmIChoZHctPnR1bmVyX3NpZ25hbF9zdGFsZSkgewotCQlwdnIyX2kyY19jb3JlX3N0YXR1c19wb2xsKGhkdyk7CisJCXB2cjJfaGR3X3N0YXR1c19wb2xsKGhkdyk7CiAJfQogCWZ2ID0gaGR3LT50dW5lcl9zaWduYWxfaW5mby5yYW5nZWhpZ2g7CiAJaWYgKCFmdikgewpAQCAtNjY0LDcgKzcwMSw3IEBACiAJdW5zaWduZWQgbG9uZyBmdjsKIAlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGNwdHItPmhkdzsKIAlpZiAoaGR3LT50dW5lcl9zaWduYWxfc3RhbGUpIHsKLQkJcHZyMl9pMmNfY29yZV9zdGF0dXNfcG9sbChoZHcpOworCQlwdnIyX2hkd19zdGF0dXNfcG9sbChoZHcpOwogCX0KIAlmdiA9IGhkdy0+dHVuZXJfc2lnbmFsX2luZm8ucmFuZ2Vsb3c7CiAJaWYgKCFmdikgewpAQCAtODU4LDcgKzg5NSw3IEBACiBzdGF0aWMgaW50IGN0cmxfc2lnbmFsX2dldChzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyLGludCAqdnApCiB7CiAJc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjcHRyLT5oZHc7Ci0JcHZyMl9pMmNfY29yZV9zdGF0dXNfcG9sbChoZHcpOworCXB2cjJfaGR3X3N0YXR1c19wb2xsKGhkdyk7CiAJKnZwID0gaGR3LT50dW5lcl9zaWduYWxfaW5mby5zaWduYWw7CiAJcmV0dXJuIDA7CiB9CkBAIC04NjgsNyArOTA1LDcgQEAKIAlpbnQgdmFsID0gMDsKIAl1bnNpZ25lZCBpbnQgc3ViY2hhbjsKIAlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGNwdHItPmhkdzsKLQlwdnIyX2kyY19jb3JlX3N0YXR1c19wb2xsKGhkdyk7CisJcHZyMl9oZHdfc3RhdHVzX3BvbGwoaGR3KTsKIAlzdWJjaGFuID0gaGR3LT50dW5lcl9zaWduYWxfaW5mby5yeHN1YmNoYW5zOwogCWlmIChzdWJjaGFuICYgVjRMMl9UVU5FUl9TVUJfTU9OTykgewogCQl2YWwgfD0gKDEgPDwgVjRMMl9UVU5FUl9NT0RFX01PTk8pOwpAQCAtMTI4Myw2ICsxMzIwLDEyIEBACiB9CiAKIAorY29uc3QgY2hhciAqcHZyMl9oZHdfZ2V0X2RldmljZV9pZGVudGlmaWVyKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQoreworCXJldHVybiBoZHctPmlkZW50aWZpZXI7Cit9CisKKwogdW5zaWduZWQgbG9uZyBwdnIyX2hkd19nZXRfY3VyX2ZyZXEoc3RydWN0IHB2cjJfaGR3ICpoZHcpCiB7CiAJcmV0dXJuIGhkdy0+ZnJlcVNlbGVjdG9yID8gaGR3LT5mcmVxVmFsVGVsZXZpc2lvbiA6IGhkdy0+ZnJlcVZhbFJhZGlvOwpAQCAtMTYzNCwzMyArMTY3NywyNyBAQAogCiBzdGF0aWMgaW50IHB2cjJfZGVjb2Rlcl9lbmFibGUoc3RydWN0IHB2cjJfaGR3ICpoZHcsaW50IGVuYWJsZWZsKQogewotCWlmICghaGR3LT5kZWNvZGVyX2N0cmwpIHsKLQkJaWYgKCFoZHctPmZsYWdfZGVjb2Rlcl9taXNzZWQpIHsKLQkJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9FUlJPUl9MRUdTLAotCQkJCSAgICJXQVJOSU5HOiBObyBkZWNvZGVyIHByZXNlbnQiKTsKLQkJCWhkdy0+ZmxhZ19kZWNvZGVyX21pc3NlZCA9ICEwOwotCQkJdHJhY2Vfc3RiaXQoImZsYWdfZGVjb2Rlcl9taXNzZWQiLAotCQkJCSAgICBoZHctPmZsYWdfZGVjb2Rlcl9taXNzZWQpOwotCQl9Ci0JCXJldHVybiAtRUlPOworCS8qIEV2ZW4gdGhvdWdoIHdlIHJlYWxseSBvbmx5IGNhcmUgYWJvdXQgdGhlIHZpZGVvIGRlY29kZXIgY2hpcCBhdAorCSAgIHRoaXMgcG9pbnQsIHdlJ2xsIGJyb2FkY2FzdCBzdHJlYW0gb24vb2ZmIHRvIGFsbCBzdWItZGV2aWNlcworCSAgIGFueXdheSwganVzdCBpbiBjYXNlIHNvbWVib2R5IGVsc2Ugd2FudHMgdG8gaGVhciB0aGUKKwkgICBjb21tYW5kLi4uICovCisJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCAic3ViZGV2IHY0bDIgc3RyZWFtPSVzIiwKKwkJICAgKGVuYWJsZWZsID8gIm9uIiA6ICJvZmYiKSk7CisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmhkdy0+djRsMl9kZXYsIDAsIHZpZGVvLCBzX3N0cmVhbSwgZW5hYmxlZmwpOworCWlmIChoZHctPmRlY29kZXJfY2xpZW50X2lkKSB7CisJCS8qIFdlIGdldCBoZXJlIGlmIHRoZSBlbmNvZGVyIGhhcyBiZWVuIG5vdGljZWQuICBPdGhlcndpc2UKKwkJICAgd2UnbGwgaXNzdWUgYSB3YXJuaW5nIHRvIHRoZSB1c2VyICh3aGljaCBzaG91bGQKKwkJICAgbm9ybWFsbHkgbmV2ZXIgaGFwcGVuKS4gKi8KKwkJcmV0dXJuIDA7CiAJfQotCWhkdy0+ZGVjb2Rlcl9jdHJsLT5lbmFibGUoaGR3LT5kZWNvZGVyX2N0cmwtPmN0eHQsZW5hYmxlZmwpOwotCXJldHVybiAwOwotfQotCi0KLXZvaWQgcHZyMl9oZHdfc2V0X2RlY29kZXIoc3RydWN0IHB2cjJfaGR3ICpoZHcsc3RydWN0IHB2cjJfZGVjb2Rlcl9jdHJsICpwdHIpCi17Ci0JaWYgKGhkdy0+ZGVjb2Rlcl9jdHJsID09IHB0cikgcmV0dXJuOwotCWhkdy0+ZGVjb2Rlcl9jdHJsID0gcHRyOwotCWlmIChoZHctPmRlY29kZXJfY3RybCAmJiBoZHctPmZsYWdfZGVjb2Rlcl9taXNzZWQpIHsKLQkJaGR3LT5mbGFnX2RlY29kZXJfbWlzc2VkID0gMDsKKwlpZiAoIWhkdy0+ZmxhZ19kZWNvZGVyX21pc3NlZCkgeworCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRVJST1JfTEVHUywKKwkJCSAgICJXQVJOSU5HOiBObyBkZWNvZGVyIHByZXNlbnQiKTsKKwkJaGR3LT5mbGFnX2RlY29kZXJfbWlzc2VkID0gITA7CiAJCXRyYWNlX3N0Yml0KCJmbGFnX2RlY29kZXJfbWlzc2VkIiwKIAkJCSAgICBoZHctPmZsYWdfZGVjb2Rlcl9taXNzZWQpOwotCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRVJST1JfTEVHUywKLQkJCSAgICJEZWNvZGVyIGhhcyBhcHBlYXJlZCIpOwotCQlwdnIyX2hkd19zdGF0ZV9zY2hlZChoZHcpOwogCX0KKwlyZXR1cm4gLUVJTzsKIH0KIAogCkBAIC0xOTI3LDYgKzE5NjQsMTY2IEBACiB9CiAKIAorc3RhdGljIHVuc2lnbmVkIGludCBwdnIyX2NvcHlfaTJjX2FkZHJfbGlzdCgKKwl1bnNpZ25lZCBzaG9ydCAqZHN0LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsCisJdW5zaWduZWQgaW50IGRzdF9tYXgpCit7CisJdW5zaWduZWQgaW50IGNudCA9IDA7CisJaWYgKCFzcmMpIHJldHVybiAwOworCXdoaWxlIChzcmNbY250XSAmJiAoY250ICsgMSkgPCBkc3RfbWF4KSB7CisJCWRzdFtjbnRdID0gc3JjW2NudF07CisJCWNudCsrOworCX0KKwlkc3RbY250XSA9IEkyQ19DTElFTlRfRU5EOworCXJldHVybiBjbnQ7Cit9CisKKworc3RhdGljIGludCBwdnIyX2hkd19sb2FkX3N1YmRldihzdHJ1Y3QgcHZyMl9oZHcgKmhkdywKKwkJCQljb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfY2xpZW50X2Rlc2MgKmNkKQoreworCWNvbnN0IGNoYXIgKmZuYW1lOworCXVuc2lnbmVkIGNoYXIgbWlkOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisJdW5zaWduZWQgaW50IGkyY2NudDsKKwljb25zdCB1bnNpZ25lZCBjaGFyICpwOworCS8qIEFyYml0cmFyeSBjb3VudCAtIG1heCAjIGkyYyBhZGRyZXNzZXMgd2Ugd2lsbCBwcm9iZSAqLworCXVuc2lnbmVkIHNob3J0IGkyY2FkZHJbMjVdOworCisJbWlkID0gY2QtPm1vZHVsZV9pZDsKKwlmbmFtZSA9IChtaWQgPCBBUlJBWV9TSVpFKG1vZHVsZV9uYW1lcykpID8gbW9kdWxlX25hbWVzW21pZF0gOiBOVUxMOworCWlmICghZm5hbWUpIHsKKwkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0VSUk9SX0xFR1MsCisJCQkgICAiTW9kdWxlIElEICV1IGZvciBkZXZpY2UgJXMgaGFzIG5vIG5hbWUiLAorCQkJICAgbWlkLAorCQkJICAgaGR3LT5oZHdfZGVzYy0+ZGVzY3JpcHRpb24pOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcHZyMl90cmFjZShQVlIyX1RSQUNFX0lOSVQsCisJCSAgICJNb2R1bGUgSUQgJXUgKCVzKSBmb3IgZGV2aWNlICVzIGJlaW5nIGxvYWRlZC4uLiIsCisJCSAgIG1pZCwgZm5hbWUsCisJCSAgIGhkdy0+aGR3X2Rlc2MtPmRlc2NyaXB0aW9uKTsKKworCWkyY2NudCA9IHB2cjJfY29weV9pMmNfYWRkcl9saXN0KGkyY2FkZHIsIGNkLT5pMmNfYWRkcmVzc19saXN0LAorCQkJCQkgQVJSQVlfU0laRShpMmNhZGRyKSk7CisJaWYgKCFpMmNjbnQgJiYgKChwID0gKG1pZCA8IEFSUkFZX1NJWkUobW9kdWxlX2kyY19hZGRyZXNzZXMpKSA/CisJCQkgbW9kdWxlX2kyY19hZGRyZXNzZXNbbWlkXSA6IE5VTEwpICE9IE5VTEwpKSB7CisJCS8qIFNlY29uZCBjaGFuY2U6IFRyeSBkZWZhdWx0IGkyYyBhZGRyZXNzIGxpc3QgKi8KKwkJaTJjY250ID0gcHZyMl9jb3B5X2kyY19hZGRyX2xpc3QoaTJjYWRkciwgcCwKKwkJCQkJCSBBUlJBWV9TSVpFKGkyY2FkZHIpKTsKKwkJaWYgKGkyY2NudCkgeworCQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0lOSVQsCisJCQkJICAgIk1vZHVsZSBJRCAldToiCisJCQkJICAgIiBVc2luZyBkZWZhdWx0IGkyYyBhZGRyZXNzIGxpc3QiLAorCQkJCSAgIG1pZCk7CisJCX0KKwl9CisKKwlpZiAoIWkyY2NudCkgeworCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRVJST1JfTEVHUywKKwkJCSAgICJNb2R1bGUgSUQgJXUgKCVzKSBmb3IgZGV2aWNlICVzOiIKKwkJCSAgICIgTm8gaTJjIGFkZHJlc3NlcyIsCisJCQkgICBtaWQsIGZuYW1lLCBoZHctPmhkd19kZXNjLT5kZXNjcmlwdGlvbik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCS8qIE5vdGUgaG93IHRoZSAybmQgYW5kIDNyZCBhcmd1bWVudHMgYXJlIHRoZSBzYW1lIGZvciBib3RoCisJICogdjRsMl9pMmNfbmV3X3N1YmRldigpIGFuZCB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigpLiAgV2h5PworCSAqIFdlbGwgdGhlIDJuZCBhcmd1bWVudCBpcyB0aGUgbW9kdWxlIG5hbWUgdG8gbG9hZCwgd2hpbGUgdGhlIDNyZAorCSAqIGFyZ3VtZW50IGlzIGRvY3VtZW50ZWQgaW4gdGhlIGZyYW1ld29yayBhcyBiZWluZyB0aGUgImNoaXBpZCIgLQorCSAqIGFuZCBldmVyeSBvdGhlciBwbGFjZSB3aGVyZSBJIGNhbiBmaW5kIGV4YW1wbGVzIG9mIHRoaXMsIHRoZQorCSAqICJjaGlwaWQiIGFwcGVhcnMgdG8ganVzdCBiZSB0aGUgbW9kdWxlIG5hbWUgYWdhaW4uICBTbyBoZXJlIHdlCisJICoganVzdCBkbyB0aGUgc2FtZSB0aGluZy4gKi8KKwlpZiAoaTJjY250ID09IDEpIHsKKwkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0lOSVQsCisJCQkgICAiTW9kdWxlIElEICV1OiIKKwkJCSAgICIgU2V0dGluZyB1cCB3aXRoIHNwZWNpZmllZCBpMmMgYWRkcmVzcyAweCV4IiwKKwkJCSAgIG1pZCwgaTJjYWRkclswXSk7CisJCXNkID0gdjRsMl9pMmNfbmV3X3N1YmRldigmaGR3LT5pMmNfYWRhcCwKKwkJCQkJIGZuYW1lLCBmbmFtZSwKKwkJCQkJIGkyY2FkZHJbMF0pOworCX0gZWxzZSB7CisJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JTklULAorCQkJICAgIk1vZHVsZSBJRCAldToiCisJCQkgICAiIFNldHRpbmcgdXAgd2l0aCBhZGRyZXNzIHByb2JlIGxpc3QiLAorCQkJICAgbWlkKTsKKwkJc2QgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmaGR3LT5pMmNfYWRhcCwKKwkJCQkJCWZuYW1lLCBmbmFtZSwKKwkJCQkJCWkyY2FkZHIpOworCX0KKworCWlmICghc2QpIHsKKwkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0VSUk9SX0xFR1MsCisJCQkgICAiTW9kdWxlIElEICV1ICglcykgZm9yIGRldmljZSAlcyBmYWlsZWQgdG8gbG9hZCIsCisJCQkgICBtaWQsIGZuYW1lLCBoZHctPmhkd19kZXNjLT5kZXNjcmlwdGlvbik7CisJCXJldHVybiAtRUlPOworCX0KKworCS8qIFRhZyB0aGlzIHN1Yi1kZXZpY2UgaW5zdGFuY2Ugd2l0aCB0aGUgbW9kdWxlIElEIHdlIGtub3cgYWJvdXQuCisJICAgSW4gb3RoZXIgcGxhY2VzIHdlJ2xsIHVzZSB0aGF0IHRhZyB0byBkZXRlcm1pbmUgaWYgdGhlIGluc3RhbmNlCisJICAgcmVxdWlyZXMgc3BlY2lhbCBoYW5kbGluZy4gKi8KKwlzZC0+Z3JwX2lkID0gbWlkOworCisJcHZyMl90cmFjZShQVlIyX1RSQUNFX0lORk8sICJBdHRhY2hlZCBzdWItZHJpdmVyICVzIiwgZm5hbWUpOworCisKKwkvKiBjbGllbnQtc3BlY2lmaWMgc2V0dXAuLi4gKi8KKwlzd2l0Y2ggKG1pZCkgeworCWNhc2UgUFZSMl9DTElFTlRfSURfQ1gyNTg0MDoKKwkJaGR3LT5kZWNvZGVyX2NsaWVudF9pZCA9IG1pZDsKKwkJeworCQkJLyoKKwkJCSAgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPiAxOS1Ob3YtMjAwNiAtIFRoaXMKKwkJCSAgYml0IG9mIG51dHRpbmVzcyBmb3IgY3gyNTg0MCBjYXVzZXMgdGhhdCBtb2R1bGUKKwkJCSAgdG8gY29ycmVjdGx5IHNldCB1cCBpdHMgdmlkZW8gc2NhbGluZy4gIFRoaXMgaXMKKwkJCSAgcmVhbGx5IGEgcHJvYmxlbSBpbiB0aGUgY3gyNTg0MCBtb2R1bGUgaXRzZWxmLAorCQkJICBidXQgd2Ugd29yayBhcm91bmQgaXQgaGVyZS4gIFRoZSBwcm9ibGVtIGhhcyBub3QKKwkJCSAgYmVlbiBzZWVuIGluIGl2dHYgYmVjYXVzZSB0aGVyZSBWQkkgaXMgc3VwcG9ydGVkCisJCQkgIGFuZCBzZXQgdXAuICBXZSBkb24ndCBkbyBWQkkgaGVyZSAoYXQgbGVhc3Qgbm90CisJCQkgIHlldCkgYW5kIHRodXMgd2UgbmV2ZXIgYXR0ZW1wdGVkIHRvIGV2ZW4gc2V0IGl0CisJCQkgIHVwLgorCQkJKi8KKwkJCXN0cnVjdCB2NGwyX2Zvcm1hdCBmbXQ7CisJCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5JVCwKKwkJCQkgICAiTW9kdWxlIElEICV1OiIKKwkJCQkgICAiIEV4ZWN1dGluZyBjeDI1ODQwIFZCSSBoYWNrIiwKKwkJCQkgICBtaWQpOworCQkJbWVtc2V0KCZmbXQsIDAsIHNpemVvZihmbXQpKTsKKwkJCWZtdC50eXBlID0gVjRMMl9CVUZfVFlQRV9TTElDRURfVkJJX0NBUFRVUkU7CisJCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmaGR3LT52NGwyX2RldiwgbWlkLAorCQkJCQkgICAgIHZpZGVvLCBzX2ZtdCwgJmZtdCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBQVlIyX0NMSUVOVF9JRF9TQUE3MTE1OgorCQloZHctPmRlY29kZXJfY2xpZW50X2lkID0gbWlkOworCQlicmVhazsKKwlkZWZhdWx0OiBicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgdm9pZCBwdnIyX2hkd19sb2FkX21vZHVsZXMoc3RydWN0IHB2cjJfaGR3ICpoZHcpCit7CisJdW5zaWduZWQgaW50IGlkeDsKKwljb25zdCBzdHJ1Y3QgcHZyMl9zdHJpbmdfdGFibGUgKmNtOworCWNvbnN0IHN0cnVjdCBwdnIyX2RldmljZV9jbGllbnRfdGFibGUgKmN0OworCWludCBva0ZsID0gITA7CisKKwljbSA9ICZoZHctPmhkd19kZXNjLT5jbGllbnRfbW9kdWxlczsKKwlmb3IgKGlkeCA9IDA7IGlkeCA8IGNtLT5jbnQ7IGlkeCsrKSB7CisJCXJlcXVlc3RfbW9kdWxlKGNtLT5sc3RbaWR4XSk7CisJfQorCisJY3QgPSAmaGR3LT5oZHdfZGVzYy0+Y2xpZW50X3RhYmxlOworCWZvciAoaWR4ID0gMDsgaWR4IDwgY3QtPmNudDsgaWR4KyspIHsKKwkJaWYgKHB2cjJfaGR3X2xvYWRfc3ViZGV2KGhkdywgJmN0LT5sc3RbaWR4XSkgPCAwKSBva0ZsID0gMDsKKwl9CisJaWYgKCFva0ZsKSBwdnIyX2hkd19yZW5kZXJfdXNlbGVzcyhoZHcpOworfQorCisKIHN0YXRpYyB2b2lkIHB2cjJfaGR3X3NldHVwX2xvdyhzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKIHsKIAlpbnQgcmV0OwpAQCAtMTk2Niw5ICsyMTYzLDcgQEAKIAogCWlmICghcHZyMl9oZHdfZGV2X29rKGhkdykpIHJldHVybjsKIAotCWZvciAoaWR4ID0gMDsgaWR4IDwgaGR3LT5oZHdfZGVzYy0+Y2xpZW50X21vZHVsZXMuY250OyBpZHgrKykgewotCQlyZXF1ZXN0X21vZHVsZShoZHctPmhkd19kZXNjLT5jbGllbnRfbW9kdWxlcy5sc3RbaWR4XSk7Ci0JfQorCWhkdy0+Zm9yY2VfZGlydHkgPSAhMDsKIAogCWlmICghaGR3LT5oZHdfZGVzYy0+ZmxhZ19ub19wb3dlcnVwKSB7CiAJCXB2cjJfaGR3X2NtZF9wb3dlcnVwKGhkdyk7CkBAIC0xOTg3LDYgKzIxODIsMTEgQEAKIAlwdnIyX2kyY19jb3JlX2luaXQoaGR3KTsKIAlpZiAoIXB2cjJfaGR3X2Rldl9vayhoZHcpKSByZXR1cm47CiAKKwlwdnIyX2hkd19sb2FkX21vZHVsZXMoaGR3KTsKKwlpZiAoIXB2cjJfaGR3X2Rldl9vayhoZHcpKSByZXR1cm47CisKKwl2NGwyX2RldmljZV9jYWxsX2FsbCgmaGR3LT52NGwyX2RldiwgMCwgY29yZSwgaW5pdCwgMCk7CisKIAlmb3IgKGlkeCA9IDA7IGlkeCA8IENUUkxERUZfQ09VTlQ7IGlkeCsrKSB7CiAJCWNwdHIgPSBoZHctPmNvbnRyb2xzICsgaWR4OwogCQlpZiAoY3B0ci0+aW5mby0+c2tpcF9pbml0KSBjb250aW51ZTsKQEAgLTIwMjQsNiArMjIyNCwxOSBAQAogCQloZHctPnN0ZF9tYXNrX2VlcHJvbSA9IFY0TDJfU1REX0FMTDsKIAl9CiAKKwlpZiAoaGR3LT5zZXJpYWxfbnVtYmVyKSB7CisJCWlkeCA9IHNjbnByaW50ZihoZHctPmlkZW50aWZpZXIsIHNpemVvZihoZHctPmlkZW50aWZpZXIpIC0gMSwKKwkJCQkic24tJWx1IiwgaGR3LT5zZXJpYWxfbnVtYmVyKTsKKwl9IGVsc2UgaWYgKGhkdy0+dW5pdF9udW1iZXIgPj0gMCkgeworCQlpZHggPSBzY25wcmludGYoaGR3LT5pZGVudGlmaWVyLCBzaXplb2YoaGR3LT5pZGVudGlmaWVyKSAtIDEsCisJCQkJInVuaXQtJWMiLAorCQkJCWhkdy0+dW5pdF9udW1iZXIgKyAnYScpOworCX0gZWxzZSB7CisJCWlkeCA9IHNjbnByaW50ZihoZHctPmlkZW50aWZpZXIsIHNpemVvZihoZHctPmlkZW50aWZpZXIpIC0gMSwKKwkJCQkidW5pdC0/PyIpOworCX0KKwloZHctPmlkZW50aWZpZXJbaWR4XSA9IDA7CisKIAlwdnIyX2hkd19zZXR1cF9zdGQoaGR3KTsKIAogCWlmICghZ2V0X2RlZmF1bHRfdHVuZXJfdHlwZShoZHcpKSB7CkBAIC0yMDMyLDggKzIyNDUsNiBAQAogCQkJICAgaGR3LT50dW5lcl90eXBlKTsKIAl9CiAKLQlwdnIyX2kyY19jb3JlX2NoZWNrX3N0YWxlKGhkdyk7Ci0JaGR3LT50dW5lcl91cGRhdGVkID0gMDsKIAogCWlmICghcHZyMl9oZHdfZGV2X29rKGhkdykpIHJldHVybjsKIApAQCAtMjE3MSwxMSArMjM4MiwxNCBAQAogCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gTlVMTDsKIAlpbnQgdmFsaWRfc3RkX21hc2s7CiAJc3RydWN0IHB2cjJfY3RybCAqY3B0cjsKKwlzdHJ1Y3QgdXNiX2RldmljZSAqdXNiX2RldjsKIAljb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfZGVzYyAqaGR3X2Rlc2M7CiAJX191OCBpZm51bTsKIAlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcWN0cmw7CiAJc3RydWN0IHB2cjJfY3RsX2luZm8gKmNpcHRyOwogCisJdXNiX2RldiA9IGludGVyZmFjZV90b191c2JkZXYoaW50Zik7CisKIAloZHdfZGVzYyA9IChjb25zdCBzdHJ1Y3QgcHZyMl9kZXZpY2VfZGVzYyAqKShkZXZpZC0+ZHJpdmVyX2luZm8pOwogCiAJaWYgKGhkd19kZXNjID09IE5VTEwpIHsKQEAgLTIzNjAsNiArMjU3NCwxMSBAQAogCWhkdy0+Y3RsX3JlYWRfdXJiID0gdXNiX2FsbG9jX3VyYigwLEdGUF9LRVJORUwpOwogCWlmICghaGR3LT5jdGxfcmVhZF91cmIpIGdvdG8gZmFpbDsKIAorCWlmICh2NGwyX2RldmljZV9yZWdpc3RlcigmdXNiX2Rldi0+ZGV2LCAmaGR3LT52NGwyX2RldikgIT0gMCkgeworCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRVJST1JfTEVHUywKKwkJCSAgICJFcnJvciByZWdpc3RlcmluZyB3aXRoIHY0bCBjb3JlLCBnaXZpbmcgdXAiKTsKKwkJZ290byBmYWlsOworCX0KIAltdXRleF9sb2NrKCZwdnIyX3VuaXRfbXR4KTsgZG8gewogCQlmb3IgKGlkeCA9IDA7IGlkeCA8IFBWUl9OVU07IGlkeCsrKSB7CiAJCQlpZiAodW5pdF9wb2ludGVyc1tpZHhdKSBjb250aW51ZTsKQEAgLTIzODIsNyArMjYwMSw2IEBACiAKIAloZHctPndvcmtxdWV1ZSA9IGNyZWF0ZV9zaW5nbGV0aHJlYWRfd29ya3F1ZXVlKGhkdy0+bmFtZSk7CiAJSU5JVF9XT1JLKCZoZHctPndvcmtwb2xsLHB2cjJfaGR3X3dvcmtlcl9wb2xsKTsKLQlJTklUX1dPUksoJmhkdy0+d29ya2kyY3N5bmMscHZyMl9oZHdfd29ya2VyX2kyYyk7CiAKIAlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5JVCwiRHJpdmVyIHVuaXQgbnVtYmVyIGlzICVkLCBuYW1lIGlzICVzIiwKIAkJICAgaGR3LT51bml0X251bWJlcixoZHctPm5hbWUpOwpAQCAtMjM5MSwxMiArMjYwOSw5IEBACiAJaGR3LT5mbGFnX29rID0gITA7CiAKIAloZHctPnVzYl9pbnRmID0gaW50ZjsKLQloZHctPnVzYl9kZXYgPSBpbnRlcmZhY2VfdG9fdXNiZGV2KGludGYpOworCWhkdy0+dXNiX2RldiA9IHVzYl9kZXY7CiAKLQlzY25wcmludGYoaGR3LT5idXNfaW5mbyxzaXplb2YoaGR3LT5idXNfaW5mbyksCi0JCSAgInVzYiAlcyBhZGRyZXNzICVkIiwKLQkJICBkZXZfbmFtZSgmaGR3LT51c2JfZGV2LT5kZXYpLAotCQkgIGhkdy0+dXNiX2Rldi0+ZGV2bnVtKTsKKwl1c2JfbWFrZV9wYXRoKGhkdy0+dXNiX2RldiwgaGR3LT5idXNfaW5mbywgc2l6ZW9mKGhkdy0+YnVzX2luZm8pKTsKIAogCWlmbnVtID0gaGR3LT51c2JfaW50Zi0+Y3VyX2FsdHNldHRpbmctPmRlc2MuYkludGVyZmFjZU51bWJlcjsKIAl1c2Jfc2V0X2ludGVyZmFjZShoZHctPnVzYl9kZXYsaWZudW0sMCk7CkBAIC0yNDU0LDYgKzI2NjksMTAgQEAKIAkJaGR3LT5jdGxfd3JpdGVfYnVmZmVyID0gTlVMTDsKIAl9CiAJaGR3LT5mbGFnX2Rpc2Nvbm5lY3RlZCA9ICEwOworCS8qIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoZW4gdGhlcmUgd2lsbCBiZSBhIGRhbmdsaW5nIHN0cnVjdCBkZXZpY2UKKwkgICByZWZlcmVuY2UgdG8gb3VyIGRpc2FwcGVhcmluZyBkZXZpY2UgcGVyc2lzdGluZyBpbnNpZGUgdGhlIFY0TAorCSAgIGNvcmUuLi4gKi8KKwl2NGwyX2RldmljZV9kaXNjb25uZWN0KCZoZHctPnY0bDJfZGV2KTsKIAloZHctPnVzYl9kZXYgPSBOVUxMOwogCWhkdy0+dXNiX2ludGYgPSBOVUxMOwogCXB2cjJfaGR3X3JlbmRlcl91c2VsZXNzKGhkdyk7CkBAIC0yNDgxLDEwICsyNzAwLDggQEAKIAkJcHZyMl9zdHJlYW1fZGVzdHJveShoZHctPnZpZF9zdHJlYW0pOwogCQloZHctPnZpZF9zdHJlYW0gPSBOVUxMOwogCX0KLQlpZiAoaGR3LT5kZWNvZGVyX2N0cmwpIHsKLQkJaGR3LT5kZWNvZGVyX2N0cmwtPmRldGFjaChoZHctPmRlY29kZXJfY3RybC0+Y3R4dCk7Ci0JfQogCXB2cjJfaTJjX2NvcmVfZG9uZShoZHcpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmhkdy0+djRsMl9kZXYpOwogCXB2cjJfaGR3X3JlbW92ZV91c2Jfc3R1ZmYoaGR3KTsKIAltdXRleF9sb2NrKCZwdnIyX3VuaXRfbXR4KTsgZG8gewogCQlpZiAoKGhkdy0+dW5pdF9udW1iZXIgPj0gMCkgJiYKQEAgLTI2NzgsNiArMjg5NSwxNTAgQEAKIH0KIAogCitzdGF0aWMgdm9pZCBwdnIyX3N1YmRldl9zZXRfY29udHJvbChzdHJ1Y3QgcHZyMl9oZHcgKmhkdywgaW50IGlkLAorCQkJCSAgICBjb25zdCBjaGFyICpuYW1lLCBpbnQgdmFsKQoreworCXN0cnVjdCB2NGwyX2NvbnRyb2wgY3RybDsKKwlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsICJzdWJkZXYgdjRsMiAlcz0lZCIsIG5hbWUsIHZhbCk7CisJbWVtc2V0KCZjdHJsLCAwLCBzaXplb2YoY3RybCkpOworCWN0cmwuaWQgPSBpZDsKKwljdHJsLnZhbHVlID0gdmFsOworCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZoZHctPnY0bDJfZGV2LCAwLCBjb3JlLCBzX2N0cmwsICZjdHJsKTsKK30KKworI2RlZmluZSBQVlIyX1NVQkRFVl9TRVRfQ09OVFJPTChoZHcsIGlkLCBsYWIpIFwKKwlpZiAoKGhkdyktPmxhYiMjX2RpcnR5IHx8IChoZHcpLT5mb3JjZV9kaXJ0eSkgewkJXAorCQlwdnIyX3N1YmRldl9zZXRfY29udHJvbChoZHcsIGlkLCAjbGFiLCAoaGR3KS0+bGFiIyNfdmFsKTsgXAorCX0KKworLyogRXhlY3V0ZSB3aGF0ZXZlciBjb21tYW5kcyBhcmUgcmVxdWlyZWQgdG8gdXBkYXRlIHRoZSBzdGF0ZSBvZiBhbGwgdGhlCisgICBzdWItZGV2aWNlcyBzbyB0aGF0IHRoZXkgbWF0Y2ggb3VyIGN1cnJlbnQgY29udHJvbCB2YWx1ZXMuICovCitzdGF0aWMgdm9pZCBwdnIyX3N1YmRldl91cGRhdGUoc3RydWN0IHB2cjJfaGR3ICpoZHcpCit7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKwl1bnNpZ25lZCBpbnQgaWQ7CisJcHZyMl9zdWJkZXZfdXBkYXRlX2Z1bmMgZnA7CisKKwlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsICJzdWJkZXYgdXBkYXRlLi4uIik7CisKKwlpZiAoaGR3LT50dW5lcl91cGRhdGVkIHx8IGhkdy0+Zm9yY2VfZGlydHkpIHsKKwkJc3RydWN0IHR1bmVyX3NldHVwIHNldHVwOworCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsICJzdWJkZXYgdHVuZXIgc2V0X3R5cGUoJWQpIiwKKwkJCSAgIGhkdy0+dHVuZXJfdHlwZSk7CisJCWlmICgoKGludCkoaGR3LT50dW5lcl90eXBlKSkgPj0gMCkgeworCQkJc2V0dXAuYWRkciA9IEFERFJfVU5TRVQ7CisJCQlzZXR1cC50eXBlID0gaGR3LT50dW5lcl90eXBlOworCQkJc2V0dXAubW9kZV9tYXNrID0gVF9SQURJTyB8IFRfQU5BTE9HX1RWOworCQkJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmhkdy0+djRsMl9kZXYsIDAsCisJCQkJCSAgICAgdHVuZXIsIHNfdHlwZV9hZGRyLCAmc2V0dXApOworCQl9CisJfQorCisJaWYgKGhkdy0+aW5wdXRfZGlydHkgfHwgaGR3LT5zdGRfZGlydHkgfHwgaGR3LT5mb3JjZV9kaXJ0eSkgeworCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsICJzdWJkZXYgdjRsMiBzZXRfc3RhbmRhcmQiKTsKKwkJaWYgKGhkdy0+aW5wdXRfdmFsID09IFBWUjJfQ1ZBTF9JTlBVVF9SQURJTykgeworCQkJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmhkdy0+djRsMl9kZXYsIDAsCisJCQkJCSAgICAgdHVuZXIsIHNfcmFkaW8pOworCQl9IGVsc2UgeworCQkJdjRsMl9zdGRfaWQgdnM7CisJCQl2cyA9IGhkdy0+c3RkX21hc2tfY3VyOworCQkJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmhkdy0+djRsMl9kZXYsIDAsCisJCQkJCSAgICAgdHVuZXIsIHNfc3RkLCB2cyk7CisJCX0KKwkJaGR3LT50dW5lcl9zaWduYWxfc3RhbGUgPSAhMDsKKwkJaGR3LT5jcm9wY2FwX3N0YWxlID0gITA7CisJfQorCisJUFZSMl9TVUJERVZfU0VUX0NPTlRST0woaGR3LCBWNEwyX0NJRF9CUklHSFRORVNTLCBicmlnaHRuZXNzKTsKKwlQVlIyX1NVQkRFVl9TRVRfQ09OVFJPTChoZHcsIFY0TDJfQ0lEX0NPTlRSQVNULCBjb250cmFzdCk7CisJUFZSMl9TVUJERVZfU0VUX0NPTlRST0woaGR3LCBWNEwyX0NJRF9TQVRVUkFUSU9OLCBzYXR1cmF0aW9uKTsKKwlQVlIyX1NVQkRFVl9TRVRfQ09OVFJPTChoZHcsIFY0TDJfQ0lEX0hVRSwgaHVlKTsKKwlQVlIyX1NVQkRFVl9TRVRfQ09OVFJPTChoZHcsIFY0TDJfQ0lEX0FVRElPX01VVEUsIG11dGUpOworCVBWUjJfU1VCREVWX1NFVF9DT05UUk9MKGhkdywgVjRMMl9DSURfQVVESU9fVk9MVU1FLCB2b2x1bWUpOworCVBWUjJfU1VCREVWX1NFVF9DT05UUk9MKGhkdywgVjRMMl9DSURfQVVESU9fQkFMQU5DRSwgYmFsYW5jZSk7CisJUFZSMl9TVUJERVZfU0VUX0NPTlRST0woaGR3LCBWNEwyX0NJRF9BVURJT19CQVNTLCBiYXNzKTsKKwlQVlIyX1NVQkRFVl9TRVRfQ09OVFJPTChoZHcsIFY0TDJfQ0lEX0FVRElPX1RSRUJMRSwgdHJlYmxlKTsKKworCWlmIChoZHctPmlucHV0X2RpcnR5IHx8IGhkdy0+YXVkaW9tb2RlX2RpcnR5IHx8IGhkdy0+Zm9yY2VfZGlydHkpIHsKKwkJc3RydWN0IHY0bDJfdHVuZXIgdnQ7CisJCW1lbXNldCgmdnQsIDAsIHNpemVvZih2dCkpOworCQl2dC5hdWRtb2RlID0gaGR3LT5hdWRpb21vZGVfdmFsOworCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmaGR3LT52NGwyX2RldiwgMCwgdHVuZXIsIHNfdHVuZXIsICZ2dCk7CisJfQorCisJaWYgKGhkdy0+ZnJlcURpcnR5IHx8IGhkdy0+Zm9yY2VfZGlydHkpIHsKKwkJdW5zaWduZWQgbG9uZyBmdjsKKwkJc3RydWN0IHY0bDJfZnJlcXVlbmN5IGZyZXE7CisJCWZ2ID0gcHZyMl9oZHdfZ2V0X2N1cl9mcmVxKGhkdyk7CisJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywgInN1YmRldiB2NGwyIHNldF9mcmVxKCVsdSkiLCBmdik7CisJCWlmIChoZHctPnR1bmVyX3NpZ25hbF9zdGFsZSkgcHZyMl9oZHdfc3RhdHVzX3BvbGwoaGR3KTsKKwkJbWVtc2V0KCZmcmVxLCAwLCBzaXplb2YoZnJlcSkpOworCQlpZiAoaGR3LT50dW5lcl9zaWduYWxfaW5mby5jYXBhYmlsaXR5ICYgVjRMMl9UVU5FUl9DQVBfTE9XKSB7CisJCQkvKiAoKGZ2ICogMTAwMCkgLyA2MjUwMCkgKi8KKwkJCWZyZXEuZnJlcXVlbmN5ID0gKGZ2ICogMikgLyAxMjU7CisJCX0gZWxzZSB7CisJCQlmcmVxLmZyZXF1ZW5jeSA9IGZ2IC8gNjI1MDA7CisJCX0KKwkJLyogdHVuZXItY29yZSBjdXJyZW50bHkgZG9lc24ndCBzZWVtIHRvIGNhcmUgYWJvdXQgdGhpcywgYnV0CisJCSAgIGxldCdzIHNldCBpdCBhbnl3YXkgZm9yIGNvbXBsZXRlbmVzcy4gKi8KKwkJaWYgKGhkdy0+aW5wdXRfdmFsID09IFBWUjJfQ1ZBTF9JTlBVVF9SQURJTykgeworCQkJZnJlcS50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKKwkJfSBlbHNlIHsKKwkJCWZyZXEudHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOworCQl9CisJCWZyZXEudHVuZXIgPSAwOworCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmaGR3LT52NGwyX2RldiwgMCwgdHVuZXIsCisJCQkJICAgICBzX2ZyZXF1ZW5jeSwgJmZyZXEpOworCX0KKworCWlmIChoZHctPnJlc19ob3JfZGlydHkgfHwgaGR3LT5yZXNfdmVyX2RpcnR5IHx8IGhkdy0+Zm9yY2VfZGlydHkpIHsKKwkJc3RydWN0IHY0bDJfZm9ybWF0IGZtdDsKKwkJbWVtc2V0KCZmbXQsIDAsIHNpemVvZihmbXQpKTsKKwkJZm10LnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CisJCWZtdC5mbXQucGl4LndpZHRoID0gaGR3LT5yZXNfaG9yX3ZhbDsKKwkJZm10LmZtdC5waXguaGVpZ2h0ID0gaGR3LT5yZXNfdmVyX3ZhbDsKKwkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCAic3ViZGV2IHY0bDIgc2V0X3NpemUoJWR4JWQpIiwKKwkJCSAgIGZtdC5mbXQucGl4LndpZHRoLCBmbXQuZm10LnBpeC5oZWlnaHQpOworCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmaGR3LT52NGwyX2RldiwgMCwgdmlkZW8sIHNfZm10LCAmZm10KTsKKwl9CisKKwlpZiAoaGR3LT5zcmF0ZV9kaXJ0eSB8fCBoZHctPmZvcmNlX2RpcnR5KSB7CisJCXUzMiB2YWw7CisJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywgInN1YmRldiB2NGwyIHNldF9hdWRpbyAlZCIsCisJCQkgICBoZHctPnNyYXRlX3ZhbCk7CisJCXN3aXRjaCAoaGR3LT5zcmF0ZV92YWwpIHsKKwkJZGVmYXVsdDoKKwkJY2FzZSBWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80ODAwMDoKKwkJCXZhbCA9IDQ4MDAwOworCQkJYnJlYWs7CisJCWNhc2UgVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDQxMDA6CisJCQl2YWwgPSA0NDEwMDsKKwkJCWJyZWFrOworCQljYXNlIFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzMyMDAwOgorCQkJdmFsID0gMzIwMDA7CisJCQlicmVhazsKKwkJfQorCQl2NGwyX2RldmljZV9jYWxsX2FsbCgmaGR3LT52NGwyX2RldiwgMCwKKwkJCQkgICAgIGF1ZGlvLCBzX2Nsb2NrX2ZyZXEsIHZhbCk7CisJfQorCisJLyogVW5hYmxlIHRvIHNldCBjcm9wIHBhcmFtZXRlcnM7IHRoZXJlIGlzIGFwcGFyZW50bHkgbm8gZXF1aXZhbGVudAorCSAgIGZvciBWSURJT0NfU19DUk9QICovCisKKwl2NGwyX2RldmljZV9mb3JfZWFjaF9zdWJkZXYoc2QsICZoZHctPnY0bDJfZGV2KSB7CisJCWlkID0gc2QtPmdycF9pZDsKKwkJaWYgKGlkID49IEFSUkFZX1NJWkUocHZyMl9tb2R1bGVfdXBkYXRlX2Z1bmN0aW9ucykpIGNvbnRpbnVlOworCQlmcCA9IHB2cjJfbW9kdWxlX3VwZGF0ZV9mdW5jdGlvbnNbaWRdOworCQlpZiAoIWZwKSBjb250aW51ZTsKKwkJKCpmcCkoaGR3LCBzZCk7CisJfQorCisJaWYgKGhkdy0+dHVuZXJfc2lnbmFsX3N0YWxlIHx8IGhkdy0+Y3JvcGNhcF9zdGFsZSkgeworCQlwdnIyX2hkd19zdGF0dXNfcG9sbChoZHcpOworCX0KK30KKworCiAvKiBGaWd1cmUgb3V0IGlmIHdlIG5lZWQgdG8gY29tbWl0IGNvbnRyb2wgY2hhbmdlcy4gIElmIHNvLCBtYXJrIGludGVybmFsCiAgICBzdGF0ZSBmbGFncyB0byBpbmRpY2F0ZSB0aGlzIGZhY3QgYW5kIHJldHVybiB0cnVlLiAgT3RoZXJ3aXNlIGRvIG5vdGhpbmcKICAgIGVsc2UgYW5kIHJldHVybiBmYWxzZS4gKi8KQEAgLTI2ODYsNyArMzA0Nyw3IEBACiAJdW5zaWduZWQgaW50IGlkeDsKIAlzdHJ1Y3QgcHZyMl9jdHJsICpjcHRyOwogCWludCB2YWx1ZTsKLQlpbnQgY29tbWl0X2ZsYWcgPSAwOworCWludCBjb21taXRfZmxhZyA9IGhkdy0+Zm9yY2VfZGlydHk7CiAJY2hhciBidWZbMTAwXTsKIAl1bnNpZ25lZCBpbnQgYmNudCxjY250OwogCkBAIC0yODQyLDE4ICszMjAzLDYgQEAKIAkJY3gyMzQxeF9leHRfY3RybHMoJmhkdy0+ZW5jX2N0bF9zdGF0ZSwgMCwgJmNzLFZJRElPQ19TX0VYVF9DVFJMUyk7CiAJfQogCi0JLyogU2NhbiBpMmMgY29yZSBhdCB0aGlzIHBvaW50IC0gYmVmb3JlIHdlIGNsZWFyIGFsbCB0aGUgZGlydHkKLQkgICBiaXRzLiAgVmFyaW91cyBwYXJ0cyBvZiB0aGUgaTJjIGNvcmUgd2lsbCBub3RpY2UgZGlydHkgYml0cyBhcwotCSAgIGFwcHJvcHJpYXRlIGFuZCBhcnJhbmdlIHRvIGJyb2FkY2FzdCBvciBkaXJlY3RseSBzZW5kIHVwZGF0ZXMgdG8KLQkgICB0aGUgY2xpZW50IGRyaXZlcnMgaW4gb3JkZXIgdG8ga2VlcCBldmVyeXRoaW5nIGluIHN5bmMgKi8KLQlwdnIyX2kyY19jb3JlX2NoZWNrX3N0YWxlKGhkdyk7Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IGhkdy0+Y29udHJvbF9jbnQ7IGlkeCsrKSB7Ci0JCWNwdHIgPSBoZHctPmNvbnRyb2xzICsgaWR4OwotCQlpZiAoIWNwdHItPmluZm8tPmNsZWFyX2RpcnR5KSBjb250aW51ZTsKLQkJY3B0ci0+aW5mby0+Y2xlYXJfZGlydHkoY3B0cik7Ci0JfQotCiAJaWYgKGhkdy0+YWN0aXZlX3N0cmVhbV90eXBlICE9IGhkdy0+ZGVzaXJlZF9zdHJlYW1fdHlwZSkgewogCQkvKiBIYW5kbGUgYW55IHNpZGUgZWZmZWN0cyBvZiBzdHJlYW0gY29uZmlnIGhlcmUgKi8KIAkJaGR3LT5hY3RpdmVfc3RyZWFtX3R5cGUgPSBoZHctPmRlc2lyZWRfc3RyZWFtX3R5cGU7CkBAIC0yODczLDggKzMyMjIsMTYgQEAKIAkJfQogCX0KIAotCS8qIE5vdyBleGVjdXRlIGkyYyBjb3JlIHVwZGF0ZSAqLwotCXB2cjJfaTJjX2NvcmVfc3luYyhoZHcpOworCS8qIENoZWNrIGFuZCB1cGRhdGUgc3RhdGUgZm9yIGFsbCBzdWItZGV2aWNlcy4gKi8KKwlwdnIyX3N1YmRldl91cGRhdGUoaGR3KTsKKworCWhkdy0+dHVuZXJfdXBkYXRlZCA9IDA7CisJaGR3LT5mb3JjZV9kaXJ0eSA9IDA7CisJZm9yIChpZHggPSAwOyBpZHggPCBoZHctPmNvbnRyb2xfY250OyBpZHgrKykgeworCQljcHRyID0gaGR3LT5jb250cm9scyArIGlkeDsKKwkJaWYgKCFjcHRyLT5pbmZvLT5jbGVhcl9kaXJ0eSkgY29udGludWU7CisJCWNwdHItPmluZm8tPmNsZWFyX2RpcnR5KGNwdHIpOworCX0KIAogCWlmICgoaGR3LT5wYXRod2F5X3N0YXRlID09IFBWUjJfUEFUSFdBWV9BTkFMT0cpICYmCiAJICAgIGhkdy0+c3RhdGVfZW5jb2Rlcl9ydW4pIHsKQEAgLTI5MDQsMTUgKzMyNjEsNiBAQAogfQogCiAKLXN0YXRpYyB2b2lkIHB2cjJfaGR3X3dvcmtlcl9pMmMoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQotewotCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gY29udGFpbmVyX29mKHdvcmssc3RydWN0IHB2cjJfaGR3LHdvcmtpMmNzeW5jKTsKLQlMT0NLX1RBS0UoaGR3LT5iaWdfbG9jayk7IGRvIHsKLQkJcHZyMl9pMmNfY29yZV9zeW5jKGhkdyk7Ci0JfSB3aGlsZSAoMCk7IExPQ0tfR0lWRShoZHctPmJpZ19sb2NrKTsKLX0KLQotCiBzdGF0aWMgdm9pZCBwdnIyX2hkd193b3JrZXJfcG9sbChzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiB7CiAJaW50IGZsID0gMDsKQEAgLTI5NzMsNyArMzMyMSw3IEBACiB2b2lkIHB2cjJfaGR3X2V4ZWN1dGVfdHVuZXJfcG9sbChzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKIHsKIAlMT0NLX1RBS0UoaGR3LT5iaWdfbG9jayk7IGRvIHsKLQkJcHZyMl9pMmNfY29yZV9zdGF0dXNfcG9sbChoZHcpOworCQlwdnIyX2hkd19zdGF0dXNfcG9sbChoZHcpOwogCX0gd2hpbGUgKDApOyBMT0NLX0dJVkUoaGR3LT5iaWdfbG9jayk7CiB9CiAKQEAgLTI5ODMsNyArMzMzMSw3IEBACiAJaWYgKCFoZHctPmNyb3BjYXBfc3RhbGUpIHsKIAkJcmV0dXJuIDA7CiAJfQotCXB2cjJfaTJjX2NvcmVfc3RhdHVzX3BvbGwoaGR3KTsKKwlwdnIyX2hkd19zdGF0dXNfcG9sbChoZHcpOwogCWlmIChoZHctPmNyb3BjYXBfc3RhbGUpIHsKIAkJcmV0dXJuIC1FSU87CiAJfQpAQCAtMzAxMCw3ICszMzU4LDcgQEAKIHsKIAlMT0NLX1RBS0UoaGR3LT5iaWdfbG9jayk7IGRvIHsKIAkJaWYgKGhkdy0+dHVuZXJfc2lnbmFsX3N0YWxlKSB7Ci0JCQlwdnIyX2kyY19jb3JlX3N0YXR1c19wb2xsKGhkdyk7CisJCQlwdnIyX2hkd19zdGF0dXNfcG9sbChoZHcpOwogCQl9CiAJCW1lbWNweSh2dHAsJmhkdy0+dHVuZXJfc2lnbmFsX2luZm8sc2l6ZW9mKHN0cnVjdCB2NGwyX3R1bmVyKSk7CiAJfSB3aGlsZSAoMCk7IExPQ0tfR0lWRShoZHctPmJpZ19sb2NrKTsKQEAgLTMwMjksMTEgKzMzNzcsOCBAQAogewogCWludCBuciA9IHB2cjJfaGR3X2dldF91bml0X251bWJlcihoZHcpOwogCUxPQ0tfVEFLRShoZHctPmJpZ19sb2NrKTsgZG8gewotCQloZHctPmxvZ19yZXF1ZXN0ZWQgPSAhMDsKIAkJcHJpbnRrKEtFUk5fSU5GTyAicHZydXNiMjogPT09PT09PT09PT09PT09PT0gIFNUQVJUIFNUQVRVUyBDQVJEICMlZCAgPT09PT09PT09PT09PT09PT1cbiIsIG5yKTsKLQkJcHZyMl9pMmNfY29yZV9jaGVja19zdGFsZShoZHcpOwotCQloZHctPmxvZ19yZXF1ZXN0ZWQgPSAwOwotCQlwdnIyX2kyY19jb3JlX3N5bmMoaGR3KTsKKwkJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmhkdy0+djRsMl9kZXYsIDAsIGNvcmUsIGxvZ19zdGF0dXMpOwogCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5GTywiY3gyMzQxeCBjb25maWc6Iik7CiAJCWN4MjM0MXhfbG9nX3N0YXR1cygmaGR3LT5lbmNfY3RsX3N0YXRlLCAicHZydXNiMiIpOwogCQlwdnIyX2hkd19zdGF0ZV9sb2dfc3RhdGUoaGR3KTsKQEAgLTM3MTYsMjIgKzQwNjEsMTYgQEAKIAogaW50IHB2cjJfaGR3X2NtZF9kZWNvZGVyX3Jlc2V0KHN0cnVjdCBwdnIyX2hkdyAqaGR3KQogewotCWlmICghaGR3LT5kZWNvZGVyX2N0cmwpIHsKLQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0lOSVQsCi0JCQkgICAiVW5hYmxlIHRvIHJlc2V0IGRlY29kZXI6IG5vdGhpbmcgYXR0YWNoZWQiKTsKLQkJcmV0dXJuIC1FTk9UVFk7Ci0JfQotCi0JaWYgKCFoZHctPmRlY29kZXJfY3RybC0+Zm9yY2VfcmVzZXQpIHsKLQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0lOSVQsCi0JCQkgICAiVW5hYmxlIHRvIHJlc2V0IGRlY29kZXI6IG5vdCBpbXBsZW1lbnRlZCIpOwotCQlyZXR1cm4gLUVOT1RUWTsKLQl9Ci0KIAlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5JVCwKIAkJICAgIlJlcXVlc3RpbmcgZGVjb2RlciByZXNldCIpOwotCWhkdy0+ZGVjb2Rlcl9jdHJsLT5mb3JjZV9yZXNldChoZHctPmRlY29kZXJfY3RybC0+Y3R4dCk7Ci0JcmV0dXJuIDA7CisJaWYgKGhkdy0+ZGVjb2Rlcl9jbGllbnRfaWQpIHsKKwkJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmhkdy0+djRsMl9kZXYsIGhkdy0+ZGVjb2Rlcl9jbGllbnRfaWQsCisJCQkJICAgICBjb3JlLCByZXNldCwgMCk7CisJCXJldHVybiAwOworCX0KKwlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSU5JVCwKKwkJICAgIlVuYWJsZSB0byByZXNldCBkZWNvZGVyOiBub3RoaW5nIGF0dGFjaGVkIik7CisJcmV0dXJuIC1FTk9UVFk7CiB9CiAKIApAQCAtNDQ3Niw2ICs0ODE1LDc5IEBACiB9CiAKIAorLyogR2VuZXJhdGUgcmVwb3J0IGNvbnRhaW5pbmcgaW5mbyBhYm91dCBhdHRhY2hlZCBzdWItZGV2aWNlcyBhbmQgYXR0YWNoZWQKKyAgIGkyYyBjbGllbnRzLCBpbmNsdWRpbmcgYW4gaW5kaWNhdGlvbiBvZiB3aGljaCBhdHRhY2hlZCBpMmMgY2xpZW50cyBhcmUKKyAgIGFjdHVhbGx5IHN1Yi1kZXZpY2VzLiAqLworc3RhdGljIHVuc2lnbmVkIGludCBwdnIyX2hkd19yZXBvcnRfY2xpZW50cyhzdHJ1Y3QgcHZyMl9oZHcgKmhkdywKKwkJCQkJICAgIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGFjbnQpCit7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKKwl1bnNpZ25lZCBpbnQgdGNudCA9IDA7CisJdW5zaWduZWQgaW50IGNjbnQ7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKKwlzdHJ1Y3QgbGlzdF9oZWFkICppdGVtOworCXZvaWQgKmNkOworCWNvbnN0IGNoYXIgKnA7CisJdW5zaWduZWQgaW50IGlkOworCisJY2NudCA9IHNjbnByaW50ZihidWYsIGFjbnQsICJBc3NvY2lhdGVkIHY0bDItc3ViZGV2IGRyaXZlcnM6Iik7CisJdGNudCArPSBjY250OworCXY0bDJfZGV2aWNlX2Zvcl9lYWNoX3N1YmRldihzZCwgJmhkdy0+djRsMl9kZXYpIHsKKwkJaWQgPSBzZC0+Z3JwX2lkOworCQlwID0gTlVMTDsKKwkJaWYgKGlkIDwgQVJSQVlfU0laRShtb2R1bGVfbmFtZXMpKSBwID0gbW9kdWxlX25hbWVzW2lkXTsKKwkJaWYgKHApIHsKKwkJCWNjbnQgPSBzY25wcmludGYoYnVmICsgdGNudCwgYWNudCAtIHRjbnQsICIgJXMiLCBwKTsKKwkJCXRjbnQgKz0gY2NudDsKKwkJfSBlbHNlIHsKKwkJCWNjbnQgPSBzY25wcmludGYoYnVmICsgdGNudCwgYWNudCAtIHRjbnQsCisJCQkJCSAiICh1bmtub3duIGlkPSV1KSIsIGlkKTsKKwkJCXRjbnQgKz0gY2NudDsKKwkJfQorCX0KKwljY250ID0gc2NucHJpbnRmKGJ1ZiArIHRjbnQsIGFjbnQgLSB0Y250LCAiXG4iKTsKKwl0Y250ICs9IGNjbnQ7CisKKwljY250ID0gc2NucHJpbnRmKGJ1ZiArIHRjbnQsIGFjbnQgLSB0Y250LCAiSTJDIGNsaWVudHM6XG4iKTsKKwl0Y250ICs9IGNjbnQ7CisKKwltdXRleF9sb2NrKCZoZHctPmkyY19hZGFwLmNsaXN0X2xvY2spOworCWxpc3RfZm9yX2VhY2goaXRlbSwgJmhkdy0+aTJjX2FkYXAuY2xpZW50cykgeworCQljbGllbnQgPSBsaXN0X2VudHJ5KGl0ZW0sIHN0cnVjdCBpMmNfY2xpZW50LCBsaXN0KTsKKwkJY2NudCA9IHNjbnByaW50ZihidWYgKyB0Y250LCBhY250IC0gdGNudCwKKwkJCQkgIiAgJXM6IGkyYz0lMDJ4IiwgY2xpZW50LT5uYW1lLCBjbGllbnQtPmFkZHIpOworCQl0Y250ICs9IGNjbnQ7CisJCWNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJCXY0bDJfZGV2aWNlX2Zvcl9lYWNoX3N1YmRldihzZCwgJmhkdy0+djRsMl9kZXYpIHsKKwkJCWlmIChjZCA9PSBzZCkgeworCQkJCWlkID0gc2QtPmdycF9pZDsKKwkJCQlwID0gTlVMTDsKKwkJCQlpZiAoaWQgPCBBUlJBWV9TSVpFKG1vZHVsZV9uYW1lcykpIHsKKwkJCQkJcCA9IG1vZHVsZV9uYW1lc1tpZF07CisJCQkJfQorCQkJCWlmIChwKSB7CisJCQkJCWNjbnQgPSBzY25wcmludGYoYnVmICsgdGNudCwKKwkJCQkJCQkgYWNudCAtIHRjbnQsCisJCQkJCQkJICIgc3ViZGV2PSVzIiwgcCk7CisJCQkJCXRjbnQgKz0gY2NudDsKKwkJCQl9IGVsc2UgeworCQkJCQljY250ID0gc2NucHJpbnRmKGJ1ZiArIHRjbnQsCisJCQkJCQkJIGFjbnQgLSB0Y250LAorCQkJCQkJCSAiIHN1YmRldj0gaWQgJXUpIiwKKwkJCQkJCQkgaWQpOworCQkJCQl0Y250ICs9IGNjbnQ7CisJCQkJfQorCQkJCWJyZWFrOworCQkJfQorCQl9CisJCWNjbnQgPSBzY25wcmludGYoYnVmICsgdGNudCwgYWNudCAtIHRjbnQsICJcbiIpOworCQl0Y250ICs9IGNjbnQ7CisJfQorCW11dGV4X3VubG9jaygmaGR3LT5pMmNfYWRhcC5jbGlzdF9sb2NrKTsKKwlyZXR1cm4gdGNudDsKK30KKworCiB1bnNpZ25lZCBpbnQgcHZyMl9oZHdfc3RhdGVfcmVwb3J0KHN0cnVjdCBwdnIyX2hkdyAqaGR3LAogCQkJCSAgIGNoYXIgKmJ1Zix1bnNpZ25lZCBpbnQgYWNudCkKIHsKQEAgLTQ0OTAsNiArNDkwMiw4IEBACiAJCWJ1ZlswXSA9ICdcbic7IGNjbnQgPSAxOwogCQliY250ICs9IGNjbnQ7IGFjbnQgLT0gY2NudDsgYnVmICs9IGNjbnQ7CiAJfQorCWNjbnQgPSBwdnIyX2hkd19yZXBvcnRfY2xpZW50cyhoZHcsIGJ1ZiwgYWNudCk7CisJYmNudCArPSBjY250OyBhY250IC09IGNjbnQ7IGJ1ZiArPSBjY250OwogCUxPQ0tfR0lWRShoZHctPmJpZ19sb2NrKTsKIAlyZXR1cm4gYmNudDsKIH0KQEAgLTQ0OTcsMTQgKzQ5MTEsMjUgQEAKIAogc3RhdGljIHZvaWQgcHZyMl9oZHdfc3RhdGVfbG9nX3N0YXRlKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQogewotCWNoYXIgYnVmWzEyOF07Ci0JdW5zaWduZWQgaW50IGlkeCxjY250OworCWNoYXIgYnVmWzI1Nl07CisJdW5zaWduZWQgaW50IGlkeCwgY2NudDsKKwl1bnNpZ25lZCBpbnQgbGNudCwgdWNudDsKIAogCWZvciAoaWR4ID0gMDsgOyBpZHgrKykgewogCQljY250ID0gcHZyMl9oZHdfcmVwb3J0X3VubG9ja2VkKGhkdyxpZHgsYnVmLHNpemVvZihidWYpKTsKIAkJaWYgKCFjY250KSBicmVhazsKIAkJcHJpbnRrKEtFUk5fSU5GTyAiJXMgJS4qc1xuIixoZHctPm5hbWUsY2NudCxidWYpOwogCX0KKwljY250ID0gcHZyMl9oZHdfcmVwb3J0X2NsaWVudHMoaGR3LCBidWYsIHNpemVvZihidWYpKTsKKwl1Y250ID0gMDsKKwl3aGlsZSAodWNudCA8IGNjbnQpIHsKKwkJbGNudCA9IDA7CisJCXdoaWxlICgobGNudCArIHVjbnQgPCBjY250KSAmJiAoYnVmW2xjbnQgKyB1Y250XSAhPSAnXG4nKSkgeworCQkJbGNudCsrOworCQl9CisJCXByaW50ayhLRVJOX0lORk8gIiVzICUuKnNcbiIsIGhkdy0+bmFtZSwgbGNudCwgYnVmICsgdWNudCk7CisJCXVjbnQgKz0gbGNudCArIDE7CisJfQogfQogCiAKQEAgLTQ2NDEsNiArNTA2NiwzMCBAQAogfQogCiAKK3ZvaWQgcHZyMl9oZHdfc3RhdHVzX3BvbGwoc3RydWN0IHB2cjJfaGR3ICpoZHcpCit7CisJc3RydWN0IHY0bDJfdHVuZXIgKnZ0cCA9ICZoZHctPnR1bmVyX3NpZ25hbF9pbmZvOworCW1lbXNldCh2dHAsIDAsIHNpemVvZigqdnRwKSk7CisJaGR3LT50dW5lcl9zaWduYWxfc3RhbGUgPSAwOworCS8qIE5vdGU6IFRoZXJlIGFwcGFyZW50bHkgaXMgbm8gcmVwbGFjZW1lbnQgZm9yIFZJRElPQ19DUk9QQ0FQCisJICAgdXNpbmcgdjRsMi1zdWJkZXYgLSB0aGVyZWZvcmUgd2UgY2FuJ3Qgc3VwcG9ydCB0aGF0IEFUIEFMTCByaWdodAorCSAgIG5vdy4gIChPZiBjb3Vyc2UsIG5vIHN1Yi1kcml2ZXJzIHNlZW0gdG8gaW1wbGVtZW50IGl0IGVpdGhlci4KKwkgICBCdXQgbm93IGl0J3MgYSBhIGNoaWNrZW4gYW5kIGVnZyBwcm9ibGVtLi4uKSAqLworCXY0bDJfZGV2aWNlX2NhbGxfYWxsKCZoZHctPnY0bDJfZGV2LCAwLCB0dW5lciwgZ190dW5lciwKKwkJCSAgICAgJmhkdy0+dHVuZXJfc2lnbmFsX2luZm8pOworCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywgInN1YmRldiBzdGF0dXMgcG9sbCIKKwkJICAgIiB0eXBlPSV1IHN0cmVuZ3RoPSV1IGF1ZGlvPTB4JXggY2FwPTB4JXgiCisJCSAgICIgbG93PSV1IGhpPSV1IiwKKwkJICAgdnRwLT50eXBlLAorCQkgICB2dHAtPnNpZ25hbCwgdnRwLT5yeHN1YmNoYW5zLCB2dHAtPmNhcGFiaWxpdHksCisJCSAgIHZ0cC0+cmFuZ2Vsb3csIHZ0cC0+cmFuZ2VoaWdoKTsKKworCS8qIFdlIGhhdmUgdG8gZG8gdGhpcyB0byBhdm9pZCBnZXR0aW5nIGludG8gY29uc3RhbnQgcG9sbGluZyBpZgorCSAgIHRoZXJlJ3Mgbm9ib2R5IHRvIGFuc3dlciBhIHBvbGwgb2YgY3JvcGNhcCBpbmZvLiAqLworCWhkdy0+Y3JvcGNhcF9zdGFsZSA9IDA7Cit9CisKKwogdW5zaWduZWQgaW50IHB2cjJfaGR3X2dldF9pbnB1dF9hdmFpbGFibGUoc3RydWN0IHB2cjJfaGR3ICpoZHcpCiB7CiAJcmV0dXJuIGhkdy0+aW5wdXRfYXZhaWxfbWFzazsKQEAgLTQ3MzYsNyArNTE4NSw2IEBACiAJCQkgICAgIGludCBzZXRGbCwgdTY0ICp2YWxfcHRyKQogewogI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKLQlzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcDsKIAlzdHJ1Y3QgdjRsMl9kYmdfcmVnaXN0ZXIgcmVxOwogCWludCBzdGF0ID0gMDsKIAlpbnQgb2tGbCA9IDA7CkBAIC00NzQ2LDIxICs1MTk0LDkgQEAKIAlyZXEubWF0Y2ggPSAqbWF0Y2g7CiAJcmVxLnJlZyA9IHJlZ19pZDsKIAlpZiAoc2V0RmwpIHJlcS52YWwgPSAqdmFsX3B0cjsKLQltdXRleF9sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOyBkbyB7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoY3AsICZoZHctPmkyY19jbGllbnRzLCBsaXN0KSB7Ci0JCQlpZiAoIXY0bDJfY2hpcF9tYXRjaF9pMmNfY2xpZW50KAotCQkJCSAgICBjcC0+Y2xpZW50LAotCQkJCSAgICAmcmVxLm1hdGNoKSkgewotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJc3RhdCA9IHB2cjJfaTJjX2NsaWVudF9jbWQoCi0JCQkJY3AsKHNldEZsID8gVklESU9DX0RCR19TX1JFR0lTVEVSIDoKLQkJCQkgICAgVklESU9DX0RCR19HX1JFR0lTVEVSKSwmcmVxKTsKLQkJCWlmICghc2V0RmwpICp2YWxfcHRyID0gcmVxLnZhbDsKLQkJCW9rRmwgPSAhMDsKLQkJCWJyZWFrOwotCQl9Ci0JfSB3aGlsZSAoMCk7IG11dGV4X3VubG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsKKwkvKiBJdCB3b3VsZCBiZSBuaWNlIHRvIGtub3cgaWYgYSBzdWItZGV2aWNlIGFuc3dlcmVkIHRoZSByZXF1ZXN0ICovCisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJmhkdy0+djRsMl9kZXYsIDAsIGNvcmUsIGdfcmVnaXN0ZXIsICZyZXEpOworCWlmICghc2V0RmwpICp2YWxfcHRyID0gcmVxLnZhbDsKIAlpZiAob2tGbCkgewogCQlyZXR1cm4gc3RhdDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1oZHcuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5oCmluZGV4IDFiNGZlYzMuLjdiNjk0MDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWhkdy5oCkBAIC0xMzIsNiArMTMyLDkgQEAKIC8qIFJldHJpZXZlIGJ1cyBsb2NhdGlvbiBpbmZvIG9mIGRldmljZSAqLwogY29uc3QgY2hhciAqcHZyMl9oZHdfZ2V0X2J1c19pbmZvKHN0cnVjdCBwdnIyX2hkdyAqKTsKIAorLyogUmV0cmlldmUgcGVyLWluc3RhbmNlIHN0cmluZyBpZGVudGlmaWVyIGZvciB0aGlzIHNwZWNpZmljIGRldmljZSAqLworY29uc3QgY2hhciAqcHZyMl9oZHdfZ2V0X2RldmljZV9pZGVudGlmaWVyKHN0cnVjdCBwdnIyX2hkdyAqKTsKKwogLyogQ2FsbGVkIHdoZW4gaGFyZHdhcmUgaGFzIGJlZW4gdW5wbHVnZ2VkICovCiB2b2lkIHB2cjJfaGR3X2Rpc2Nvbm5lY3Qoc3RydWN0IHB2cjJfaGR3ICopOwogCkBAIC0yMzYsOCArMjM5LDcgQEAKIAkJCQkgICAgIGVudW0gcHZyMl92NGxfdHlwZSBpbmRleCxpbnQpOwogCiAvKiBEaXJlY3QgcmVhZC93cml0ZSBhY2Nlc3MgdG8gY2hpcCdzIHJlZ2lzdGVyczoKLSAgIG1hdGNoX3R5cGUgLSBob3cgdG8gaW50ZXJwcmV0IG1hdGNoX2NoaXAgKGUuZy4gZHJpdmVyIElELCBpMmMgYWRkcmVzcykKLSAgIG1hdGNoX2NoaXAgLSBjaGlwIG1hdGNoIHZhbHVlIChlLmcuIEkyQ19EUklWRVJEX3h4eHgpCisgICBtYXRjaCAtIHNwZWNpZnkgY3JpdGVyaWEgdG8gaWRlbnRpZnkgdGFyZ2V0IGNoaXAgKHRoaXMgaXMgYSB2NGwgZGJnIHN0cnVjdCkKICAgIHJlZ19pZCAgLSByZWdpc3RlciBudW1iZXIgdG8gYWNjZXNzCiAgICBzZXRGbCAgIC0gdHJ1ZSB0byBzZXQgdGhlIHJlZ2lzdGVyLCBmYWxzZSB0byByZWFkIGl0CiAgICB2YWxfcHRyIC0gc3RvcmFnZSBsb2NhdGlvbiBmb3Igc291cmNlIC8gcmVzdWx0LiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNoaXBzLXY0bDIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jaGlwcy12NGwyLmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDk0YTQ3NzEuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNoaXBzLXY0bDIuYworKysgL2Rldi9udWxsCkBAIC0xLDExMyArMCwwIEBACi0vKgotICoKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPgotI2luY2x1ZGUgInB2cnVzYjItaTJjLWNvcmUuaCIKLSNpbmNsdWRlICJwdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIgotI2luY2x1ZGUgInB2cnVzYjItZGVidWcuaCIKLSNpbmNsdWRlICJwdnJ1c2IyLWkyYy1jbWQtdjRsMi5oIgotI2luY2x1ZGUgInB2cnVzYjItYXVkaW8uaCIKLSNpbmNsdWRlICJwdnJ1c2IyLXR1bmVyLmgiCi0jaW5jbHVkZSAicHZydXNiMi12aWRlby12NGwuaCIKLSNpbmNsdWRlICJwdnJ1c2IyLWN4MjU4NHgtdjRsLmgiCi0jaW5jbHVkZSAicHZydXNiMi13bTg3NzUuaCIKLQotI2RlZmluZSB0cmFjZV9pMmMoLi4uKSBwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSTJDLF9fVkFfQVJHU19fKQotCi0jZGVmaW5lIE9QX1NUQU5EQVJEIDAKLSNkZWZpbmUgT1BfQVVESU9NT0RFIDEKLSNkZWZpbmUgT1BfQkNTSCAyCi0jZGVmaW5lIE9QX1ZPTFVNRSAzCi0jZGVmaW5lIE9QX0ZSRVEgNAotI2RlZmluZSBPUF9BVURJT1JBVEUgNQotI2RlZmluZSBPUF9DUk9QIDYKLSNkZWZpbmUgT1BfU0laRSA3Ci0jZGVmaW5lIE9QX0xPRyA4Ci0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgKiBjb25zdCBvcHNbXSA9IHsKLQlbT1BfU1RBTkRBUkRdID0gJnB2cjJfaTJjX29wX3Y0bDJfc3RhbmRhcmQsCi0JW09QX0FVRElPTU9ERV0gPSAmcHZyMl9pMmNfb3BfdjRsMl9hdWRpb21vZGUsCi0JW09QX0JDU0hdID0gJnB2cjJfaTJjX29wX3Y0bDJfYmNzaCwKLQlbT1BfVk9MVU1FXSA9ICZwdnIyX2kyY19vcF92NGwyX3ZvbHVtZSwKLQlbT1BfRlJFUV0gPSAmcHZyMl9pMmNfb3BfdjRsMl9mcmVxdWVuY3ksCi0JW09QX0NST1BdID0gJnB2cjJfaTJjX29wX3Y0bDJfY3JvcCwKLQlbT1BfU0laRV0gPSAmcHZyMl9pMmNfb3BfdjRsMl9zaXplLAotCVtPUF9MT0ddID0gJnB2cjJfaTJjX29wX3Y0bDJfbG9nLAotfTsKLQotdm9pZCBwdnIyX2kyY19wcm9iZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdyxzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcCkKLXsKLQlpbnQgaWQ7Ci0JaWQgPSBjcC0+Y2xpZW50LT5kcml2ZXItPmlkOwotCWNwLT5jdGxfbWFzayA9ICgoMSA8PCBPUF9TVEFOREFSRCkgfAotCQkJKDEgPDwgT1BfQVVESU9NT0RFKSB8Ci0JCQkoMSA8PCBPUF9CQ1NIKSB8Ci0JCQkoMSA8PCBPUF9WT0xVTUUpIHwKLQkJCSgxIDw8IE9QX0ZSRVEpIHwKLQkJCSgxIDw8IE9QX0NST1ApIHwKLQkJCSgxIDw8IE9QX1NJWkUpIHwKLQkJCSgxIDw8IE9QX0xPRykpOwotCWNwLT5zdGF0dXNfcG9sbCA9IHB2cjJfdjRsMl9jbWRfc3RhdHVzX3BvbGw7Ci0KLQlpZiAoaWQgPT0gSTJDX0RSSVZFUklEX01TUDM0MDApIHsKLQkJaWYgKHB2cjJfaTJjX21zcDM0MDBfc2V0dXAoaGR3LGNwKSkgewotCQkJcmV0dXJuOwotCQl9Ci0JfQotCWlmIChpZCA9PSBJMkNfRFJJVkVSSURfVFVORVIpIHsKLQkJaWYgKHB2cjJfaTJjX3R1bmVyX3NldHVwKGhkdyxjcCkpIHsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlpZiAoaWQgPT0gSTJDX0RSSVZFUklEX0NYMjU4NDApIHsKLQkJaWYgKHB2cjJfaTJjX2N4MjU4NHhfdjRsX3NldHVwKGhkdyxjcCkpIHsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlpZiAoaWQgPT0gSTJDX0RSSVZFUklEX1dNODc3NSkgewotCQlpZiAocHZyMl9pMmNfd204Nzc1X3NldHVwKGhkdyxjcCkpIHsKLQkJCXJldHVybjsKLQkJfQotCX0KLQlpZiAoaWQgPT0gSTJDX0RSSVZFUklEX1NBQTcxMVgpIHsKLQkJaWYgKHB2cjJfaTJjX2RlY29kZXJfdjRsX3NldHVwKGhkdyxjcCkpIHsKLQkJCXJldHVybjsKLQkJfQotCX0KLX0KLQotCi1jb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgKnB2cjJfaTJjX2dldF9vcCh1bnNpZ25lZCBpbnQgaWR4KQotewotCWlmIChpZHggPj0gQVJSQVlfU0laRShvcHMpKQotCQlyZXR1cm4gTlVMTDsKLQlyZXR1cm4gb3BzW2lkeF07Ci19Ci0KLQotLyoKLSAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKLSAgKioqIExvY2FsIFZhcmlhYmxlczogKioqCi0gICoqKiBtb2RlOiBjICoqKgotICAqKiogZmlsbC1jb2x1bW46IDc1ICoqKgotICAqKiogdGFiLXdpZHRoOiA4ICoqKgotICAqKiogYy1iYXNpYy1vZmZzZXQ6IDggKioqCi0gICoqKiBFbmQ6ICoqKgotICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNtZC12NGwyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY21kLXY0bDIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMTZiYjExOS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY21kLXY0bDIuYworKysgL2Rldi9udWxsCkBAIC0xLDMyMiArMCwwIEBACi0vKgotICoKLSAqCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA1IE1pa2UgSXNlbHkgPGlzZWx5QHBvYm94LmNvbT4KLSAqICBDb3B5cmlnaHQgKEMpIDIwMDQgQXVyZWxpZW4gQWxsZWF1bWUgPHNsdHNAZnJlZS5mcj4KLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkKLSAqICBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UKLSAqCi0gKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCi0gKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UKLSAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQotICogIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3ICBVU0EKLSAqCi0gKi8KLQotI2luY2x1ZGUgInB2cnVzYjItaTJjLWNtZC12NGwyLmgiCi0jaW5jbHVkZSAicHZydXNiMi1oZHctaW50ZXJuYWwuaCIKLSNpbmNsdWRlICJwdnJ1c2IyLWRlYnVnLmgiCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLQotc3RhdGljIHZvaWQgc2V0X3N0YW5kYXJkKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIHY0bDIgc2V0X3N0YW5kYXJkIik7Ci0KLQlpZiAoaGR3LT5pbnB1dF92YWwgPT0gUFZSMl9DVkFMX0lOUFVUX1JBRElPKSB7Ci0JCXB2cjJfaTJjX2NvcmVfY21kKGhkdyxBVURDX1NFVF9SQURJTyxOVUxMKTsKLQl9IGVsc2UgewotCQl2NGwyX3N0ZF9pZCB2czsKLQkJdnMgPSBoZHctPnN0ZF9tYXNrX2N1cjsKLQkJcHZyMl9pMmNfY29yZV9jbWQoaGR3LFZJRElPQ19TX1NURCwmdnMpOwotCX0KLQloZHctPnR1bmVyX3NpZ25hbF9zdGFsZSA9ICEwOwotCWhkdy0+Y3JvcGNhcF9zdGFsZSA9ICEwOwotfQotCi0KLXN0YXRpYyBpbnQgY2hlY2tfc3RhbmRhcmQoc3RydWN0IHB2cjJfaGR3ICpoZHcpCi17Ci0JcmV0dXJuIChoZHctPmlucHV0X2RpcnR5ICE9IDApIHx8IChoZHctPnN0ZF9kaXJ0eSAhPSAwKTsKLX0KLQotCi1jb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9zdGFuZGFyZCA9IHsKLQkuY2hlY2sgPSBjaGVja19zdGFuZGFyZCwKLQkudXBkYXRlID0gc2V0X3N0YW5kYXJkLAotCS5uYW1lID0gInY0bDJfc3RhbmRhcmQiLAotfTsKLQotCi1zdGF0aWMgdm9pZCBzZXRfYmNzaChzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKLXsKLQlzdHJ1Y3QgdjRsMl9jb250cm9sIGN0cmw7Ci0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgdjRsMiBzZXRfYmNzaCIKLQkJICAgIiBiPSVkIGM9JWQgcz0lZCBoPSVkIiwKLQkJICAgaGR3LT5icmlnaHRuZXNzX3ZhbCxoZHctPmNvbnRyYXN0X3ZhbCwKLQkJICAgaGR3LT5zYXR1cmF0aW9uX3ZhbCxoZHctPmh1ZV92YWwpOwotCW1lbXNldCgmY3RybCwwLHNpemVvZihjdHJsKSk7Ci0JY3RybC5pZCA9IFY0TDJfQ0lEX0JSSUdIVE5FU1M7Ci0JY3RybC52YWx1ZSA9IGhkdy0+YnJpZ2h0bmVzc192YWw7Ci0JcHZyMl9pMmNfY29yZV9jbWQoaGR3LFZJRElPQ19TX0NUUkwsJmN0cmwpOwotCWN0cmwuaWQgPSBWNEwyX0NJRF9DT05UUkFTVDsKLQljdHJsLnZhbHVlID0gaGR3LT5jb250cmFzdF92YWw7Ci0JcHZyMl9pMmNfY29yZV9jbWQoaGR3LFZJRElPQ19TX0NUUkwsJmN0cmwpOwotCWN0cmwuaWQgPSBWNEwyX0NJRF9TQVRVUkFUSU9OOwotCWN0cmwudmFsdWUgPSBoZHctPnNhdHVyYXRpb25fdmFsOwotCXB2cjJfaTJjX2NvcmVfY21kKGhkdyxWSURJT0NfU19DVFJMLCZjdHJsKTsKLQljdHJsLmlkID0gVjRMMl9DSURfSFVFOwotCWN0cmwudmFsdWUgPSBoZHctPmh1ZV92YWw7Ci0JcHZyMl9pMmNfY29yZV9jbWQoaGR3LFZJRElPQ19TX0NUUkwsJmN0cmwpOwotfQotCi0KLXN0YXRpYyBpbnQgY2hlY2tfYmNzaChzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKLXsKLQlyZXR1cm4gKGhkdy0+YnJpZ2h0bmVzc19kaXJ0eSB8fAotCQloZHctPmNvbnRyYXN0X2RpcnR5IHx8Ci0JCWhkdy0+c2F0dXJhdGlvbl9kaXJ0eSB8fAotCQloZHctPmh1ZV9kaXJ0eSk7Ci19Ci0KLQotY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfYmNzaCA9IHsKLQkuY2hlY2sgPSBjaGVja19iY3NoLAotCS51cGRhdGUgPSBzZXRfYmNzaCwKLQkubmFtZSA9ICJ2NGwyX2Jjc2giLAotfTsKLQotCi1zdGF0aWMgdm9pZCBzZXRfdm9sdW1lKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXN0cnVjdCB2NGwyX2NvbnRyb2wgY3RybDsKLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsCi0JCSAgICJpMmMgdjRsMiBzZXRfdm9sdW1lIgotCQkgICAiKHZvbD0lZCBiYWw9JWQgYmFzPSVkIHRyZWI9JWQgbXV0ZT0lZCkiLAotCQkgICBoZHctPnZvbHVtZV92YWwsCi0JCSAgIGhkdy0+YmFsYW5jZV92YWwsCi0JCSAgIGhkdy0+YmFzc192YWwsCi0JCSAgIGhkdy0+dHJlYmxlX3ZhbCwKLQkJICAgaGR3LT5tdXRlX3ZhbCk7Ci0JbWVtc2V0KCZjdHJsLDAsc2l6ZW9mKGN0cmwpKTsKLQljdHJsLmlkID0gVjRMMl9DSURfQVVESU9fTVVURTsKLQljdHJsLnZhbHVlID0gaGR3LT5tdXRlX3ZhbCA/IDEgOiAwOwotCXB2cjJfaTJjX2NvcmVfY21kKGhkdyxWSURJT0NfU19DVFJMLCZjdHJsKTsKLQljdHJsLmlkID0gVjRMMl9DSURfQVVESU9fVk9MVU1FOwotCWN0cmwudmFsdWUgPSBoZHctPnZvbHVtZV92YWw7Ci0JcHZyMl9pMmNfY29yZV9jbWQoaGR3LFZJRElPQ19TX0NUUkwsJmN0cmwpOwotCWN0cmwuaWQgPSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOwotCWN0cmwudmFsdWUgPSBoZHctPmJhbGFuY2VfdmFsOwotCXB2cjJfaTJjX2NvcmVfY21kKGhkdyxWSURJT0NfU19DVFJMLCZjdHJsKTsKLQljdHJsLmlkID0gVjRMMl9DSURfQVVESU9fQkFTUzsKLQljdHJsLnZhbHVlID0gaGR3LT5iYXNzX3ZhbDsKLQlwdnIyX2kyY19jb3JlX2NtZChoZHcsVklESU9DX1NfQ1RSTCwmY3RybCk7Ci0JY3RybC5pZCA9IFY0TDJfQ0lEX0FVRElPX1RSRUJMRTsKLQljdHJsLnZhbHVlID0gaGR3LT50cmVibGVfdmFsOwotCXB2cjJfaTJjX2NvcmVfY21kKGhkdyxWSURJT0NfU19DVFJMLCZjdHJsKTsKLX0KLQotCi1zdGF0aWMgaW50IGNoZWNrX3ZvbHVtZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKLXsKLQlyZXR1cm4gKGhkdy0+dm9sdW1lX2RpcnR5IHx8Ci0JCWhkdy0+YmFsYW5jZV9kaXJ0eSB8fAotCQloZHctPmJhc3NfZGlydHkgfHwKLQkJaGR3LT50cmVibGVfZGlydHkgfHwKLQkJaGR3LT5tdXRlX2RpcnR5KTsKLX0KLQotCi1jb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl92b2x1bWUgPSB7Ci0JLmNoZWNrID0gY2hlY2tfdm9sdW1lLAotCS51cGRhdGUgPSBzZXRfdm9sdW1lLAotCS5uYW1lID0gInY0bDJfdm9sdW1lIiwKLX07Ci0KLQotc3RhdGljIHZvaWQgc2V0X2F1ZGlvbW9kZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKLXsKLQlzdHJ1Y3QgdjRsMl90dW5lciB2dDsKLQltZW1zZXQoJnZ0LDAsc2l6ZW9mKHZ0KSk7Ci0JdnQuYXVkbW9kZSA9IGhkdy0+YXVkaW9tb2RlX3ZhbDsKLQlwdnIyX2kyY19jb3JlX2NtZChoZHcsVklESU9DX1NfVFVORVIsJnZ0KTsKLX0KLQotCi1zdGF0aWMgaW50IGNoZWNrX2F1ZGlvbW9kZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKLXsKLQlyZXR1cm4gKGhkdy0+aW5wdXRfZGlydHkgfHwKLQkJaGR3LT5hdWRpb21vZGVfZGlydHkpOwotfQotCi0KLWNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCBwdnIyX2kyY19vcF92NGwyX2F1ZGlvbW9kZSA9IHsKLQkuY2hlY2sgPSBjaGVja19hdWRpb21vZGUsCi0JLnVwZGF0ZSA9IHNldF9hdWRpb21vZGUsCi0JLm5hbWUgPSAidjRsMl9hdWRpb21vZGUiLAotfTsKLQotCi1zdGF0aWMgdm9pZCBzZXRfZnJlcXVlbmN5KHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXVuc2lnbmVkIGxvbmcgZnY7Ci0Jc3RydWN0IHY0bDJfZnJlcXVlbmN5IGZyZXE7Ci0JZnYgPSBwdnIyX2hkd19nZXRfY3VyX2ZyZXEoaGR3KTsKLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyB2NGwyIHNldF9mcmVxKCVsdSkiLGZ2KTsKLQlpZiAoaGR3LT50dW5lcl9zaWduYWxfc3RhbGUpIHsKLQkJcHZyMl9pMmNfY29yZV9zdGF0dXNfcG9sbChoZHcpOwotCX0KLQltZW1zZXQoJmZyZXEsMCxzaXplb2YoZnJlcSkpOwotCWlmIChoZHctPnR1bmVyX3NpZ25hbF9pbmZvLmNhcGFiaWxpdHkgJiBWNEwyX1RVTkVSX0NBUF9MT1cpIHsKLQkJLy8gKChmdiAqIDEwMDApIC8gNjI1MDApCi0JCWZyZXEuZnJlcXVlbmN5ID0gKGZ2ICogMikgLyAxMjU7Ci0JfSBlbHNlIHsKLQkJZnJlcS5mcmVxdWVuY3kgPSBmdiAvIDYyNTAwOwotCX0KLQkvKiB0dW5lci1jb3JlIGN1cnJlbnRseSBkb2Vzbid0IHNlZW0gdG8gY2FyZSBhYm91dCB0aGlzLCBidXQKLQkgICBsZXQncyBzZXQgaXQgYW55d2F5IGZvciBjb21wbGV0ZW5lc3MuICovCi0JaWYgKGhkdy0+aW5wdXRfdmFsID09IFBWUjJfQ1ZBTF9JTlBVVF9SQURJTykgewotCQlmcmVxLnR5cGUgPSBWNEwyX1RVTkVSX1JBRElPOwotCX0gZWxzZSB7Ci0JCWZyZXEudHlwZSA9IFY0TDJfVFVORVJfQU5BTE9HX1RWOwotCX0KLQlmcmVxLnR1bmVyID0gMDsKLQlwdnIyX2kyY19jb3JlX2NtZChoZHcsVklESU9DX1NfRlJFUVVFTkNZLCZmcmVxKTsKLX0KLQotCi1zdGF0aWMgaW50IGNoZWNrX2ZyZXF1ZW5jeShzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKLXsKLQlyZXR1cm4gaGR3LT5mcmVxRGlydHkgIT0gMDsKLX0KLQotCi1jb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9mcmVxdWVuY3kgPSB7Ci0JLmNoZWNrID0gY2hlY2tfZnJlcXVlbmN5LAotCS51cGRhdGUgPSBzZXRfZnJlcXVlbmN5LAotCS5uYW1lID0gInY0bDJfZnJlcSIsCi19OwotCi0KLXN0YXRpYyB2b2lkIHNldF9zaXplKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXN0cnVjdCB2NGwyX2Zvcm1hdCBmbXQ7Ci0KLQltZW1zZXQoJmZtdCwwLHNpemVvZihmbXQpKTsKLQotCWZtdC50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwotCWZtdC5mbXQucGl4LndpZHRoID0gaGR3LT5yZXNfaG9yX3ZhbDsKLQlmbXQuZm10LnBpeC5oZWlnaHQgPSBoZHctPnJlc192ZXJfdmFsOwotCi0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgdjRsMiBzZXRfc2l6ZSglZHglZCkiLAotCQkJICAgZm10LmZtdC5waXgud2lkdGgsZm10LmZtdC5waXguaGVpZ2h0KTsKLQotCXB2cjJfaTJjX2NvcmVfY21kKGhkdyxWSURJT0NfU19GTVQsJmZtdCk7Ci19Ci0KLQotc3RhdGljIGludCBjaGVja19zaXplKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXJldHVybiAoaGR3LT5yZXNfaG9yX2RpcnR5IHx8IGhkdy0+cmVzX3Zlcl9kaXJ0eSk7Ci19Ci0KLQotY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfc2l6ZSA9IHsKLQkuY2hlY2sgPSBjaGVja19zaXplLAotCS51cGRhdGUgPSBzZXRfc2l6ZSwKLQkubmFtZSA9ICJ2NGwyX3NpemUiLAotfTsKLQotCi1zdGF0aWMgdm9pZCBzZXRfY3JvcChzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKLXsKLQlzdHJ1Y3QgdjRsMl9jcm9wIGNyb3A7Ci0KLQltZW1zZXQoJmNyb3AsIDAsIHNpemVvZiBjcm9wKTsKLQljcm9wLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JY3JvcC5jLmxlZnQgPSBoZHctPmNyb3BsX3ZhbDsKLQljcm9wLmMudG9wID0gaGR3LT5jcm9wdF92YWw7Ci0JY3JvcC5jLmhlaWdodCA9IGhkdy0+Y3JvcGhfdmFsOwotCWNyb3AuYy53aWR0aCA9IGhkdy0+Y3JvcHdfdmFsOwotCi0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLAotCQkgICAiaTJjIHY0bDIgc2V0X2Nyb3AgY3JvcD0lZDolZDolZDolZCIsCi0JCSAgIGNyb3AuYy53aWR0aCwgY3JvcC5jLmhlaWdodCwgY3JvcC5jLmxlZnQsIGNyb3AuYy50b3ApOwotCi0JcHZyMl9pMmNfY29yZV9jbWQoaGR3LCBWSURJT0NfU19DUk9QLCAmY3JvcCk7Ci19Ci0KLXN0YXRpYyBpbnQgY2hlY2tfY3JvcChzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKLXsKLQlyZXR1cm4gKGhkdy0+Y3JvcGxfZGlydHkgfHwgaGR3LT5jcm9wdF9kaXJ0eSB8fAotCQloZHctPmNyb3B3X2RpcnR5IHx8IGhkdy0+Y3JvcGhfZGlydHkpOwotfQotCi1jb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9jcm9wID0gewotCS5jaGVjayA9IGNoZWNrX2Nyb3AsCi0JLnVwZGF0ZSA9IHNldF9jcm9wLAotCS5uYW1lID0gInY0bDJfY3JvcCIsCi19OwotCi0KLXN0YXRpYyB2b2lkIGRvX2xvZyhzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKLXsKLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyB2NGwyIGRvX2xvZygpIik7Ci0JcHZyMl9pMmNfY29yZV9jbWQoaGR3LFZJRElPQ19MT0dfU1RBVFVTLE5VTEwpOwotCi19Ci0KLQotc3RhdGljIGludCBjaGVja19sb2coc3RydWN0IHB2cjJfaGR3ICpoZHcpCi17Ci0JcmV0dXJuIGhkdy0+bG9nX3JlcXVlc3RlZCAhPSAwOwotfQotCi0KLWNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCBwdnIyX2kyY19vcF92NGwyX2xvZyA9IHsKLQkuY2hlY2sgPSBjaGVja19sb2csCi0JLnVwZGF0ZSA9IGRvX2xvZywKLQkubmFtZSA9ICJ2NGwyX2xvZyIsCi19OwotCi0KLXZvaWQgcHZyMl92NGwyX2NtZF9zdHJlYW0oc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3AsaW50IGZsKQotewotCXB2cjJfaTJjX2NsaWVudF9jbWQoY3AsCi0JCQkgICAgKGZsID8gVklESU9DX1NUUkVBTU9OIDogVklESU9DX1NUUkVBTU9GRiksTlVMTCk7Ci19Ci0KLQotdm9pZCBwdnIyX3Y0bDJfY21kX3N0YXR1c19wb2xsKHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwKQotewotCWludCBzdGF0OwotCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gY3AtPmhkdzsKLQlpZiAoaGR3LT5jcm9wY2FwX3N0YWxlKSB7Ci0JCWhkdy0+Y3JvcGNhcF9pbmZvLnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JCXN0YXQgPSBwdnIyX2kyY19jbGllbnRfY21kKGNwLCBWSURJT0NfQ1JPUENBUCwKLQkJCQkJICAgJmhkdy0+Y3JvcGNhcF9pbmZvKTsKLQkJaWYgKHN0YXQgPT0gMCkgewotCQkJLyogQ2hlY2sgd2FzIHN1Y2Nlc3NmdWwsIHNvIHRoZSBkYXRhIGlzIG5vCi0JCQkgICBsb25nZXIgY29uc2lkZXJlZCBzdGFsZS4gKi8KLQkJCWhkdy0+Y3JvcGNhcF9zdGFsZSA9IDA7Ci0JCX0KLQl9Ci0JcHZyMl9pMmNfY2xpZW50X2NtZChjcCwgVklESU9DX0dfVFVORVIsICZoZHctPnR1bmVyX3NpZ25hbF9pbmZvKTsKLX0KLQotCi0vKgotICBTdHVmZiBmb3IgRW1hY3MgdG8gc2VlLCBpbiBvcmRlciB0byBlbmNvdXJhZ2UgY29uc2lzdGVudCBlZGl0aW5nIHN0eWxlOgotICAqKiogTG9jYWwgVmFyaWFibGVzOiAqKioKLSAgKioqIG1vZGU6IGMgKioqCi0gICoqKiBmaWxsLWNvbHVtbjogNzAgKioqCi0gICoqKiB0YWItd2lkdGg6IDggKioqCi0gICoqKiBjLWJhc2ljLW9mZnNldDogOCAqKioKLSAgKioqIEVuZDogKioqCi0gICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY21kLXY0bDIuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jbWQtdjRsMi5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBlYjc0NGEyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jbWQtdjRsMi5oCisrKyAvZGV2L251bGwKQEAgLTEsNTAgKzAsMCBAQAotLyoKLSAqCi0gKgotICogIENvcHlyaWdodCAoQykgMjAwNSBNaWtlIElzZWx5IDxpc2VseUBwb2JveC5jb20+Ci0gKiAgQ29weXJpZ2h0IChDKSAyMDA0IEF1cmVsaWVuIEFsbGVhdW1lIDxzbHRzQGZyZWUuZnI+Ci0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlCi0gKgotICogIFRoaXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAotICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCi0gKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCi0gKgotICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1OSBUZW1wbGUgUGxhY2UsIFN1aXRlIDMzMCwgQm9zdG9uLCBNQSAgMDIxMTEtMTMwNyAgVVNBCi0gKgotICovCi0KLSNpZm5kZWYgX19QVlJVU0IyX0NNRF9WNEwyX0gKLSNkZWZpbmUgX19QVlJVU0IyX0NNRF9WNEwyX0gKLQotI2luY2x1ZGUgInB2cnVzYjItaTJjLWNvcmUuaCIKLQotZXh0ZXJuIGNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCBwdnIyX2kyY19vcF92NGwyX3N0YW5kYXJkOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCBwdnIyX2kyY19vcF92NGwyX3JhZGlvOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCBwdnIyX2kyY19vcF92NGwyX2Jjc2g7Ci1leHRlcm4gY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfdm9sdW1lOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCBwdnIyX2kyY19vcF92NGwyX2ZyZXF1ZW5jeTsKLWV4dGVybiBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgcHZyMl9pMmNfb3BfdjRsMl9jcm9wOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCBwdnIyX2kyY19vcF92NGwyX3NpemU7Ci1leHRlcm4gY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wIHB2cjJfaTJjX29wX3Y0bDJfYXVkaW9tb2RlOwotZXh0ZXJuIGNvbnN0IHN0cnVjdCBwdnIyX2kyY19vcCBwdnIyX2kyY19vcF92NGwyX2xvZzsKLQotdm9pZCBwdnIyX3Y0bDJfY21kX3N0cmVhbShzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICosaW50KTsKLXZvaWQgcHZyMl92NGwyX2NtZF9zdGF0dXNfcG9sbChzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICopOwotCi0jZW5kaWYgLyogX19QVlJVU0IyX0NNRF9WNEwyX0ggKi8KLQotLyoKLSAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKLSAgKioqIExvY2FsIFZhcmlhYmxlczogKioqCi0gICoqKiBtb2RlOiBjICoqKgotICAqKiogZmlsbC1jb2x1bW46IDcwICoqKgotICAqKiogdGFiLXdpZHRoOiA4ICoqKgotICAqKiogYy1iYXNpYy1vZmZzZXQ6IDggKioqCi0gICoqKiBFbmQ6ICoqKgotICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmMKaW5kZXggZDZhMzU0MC4uOTQ2NDg2MiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItaTJjLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5jCkBAIC0xOCw2ICsxOCw3IEBACiAgKgogICovCiAKKyNpbmNsdWRlIDxsaW51eC9pMmMuaD4KICNpbmNsdWRlICJwdnJ1c2IyLWkyYy1jb3JlLmgiCiAjaW5jbHVkZSAicHZydXNiMi1oZHctaW50ZXJuYWwuaCIKICNpbmNsdWRlICJwdnJ1c2IyLWRlYnVnLmgiCkBAIC0yOSw4ICszMCw3IEBACiAvKgogCiAgIFRoaXMgbW9kdWxlIGF0dGVtcHRzIHRvIGltcGxlbWVudCBhIGNvbXBsaWFudCBJMkMgYWRhcHRlciBmb3IgdGhlIHB2cnVzYjIKLSAgZGV2aWNlLiAgQnkgZG9pbmcgdGhpcyB3ZSBjYW4gdGhlbiBtYWtlIHVzZSBvZiBleGlzdGluZyBmdW5jdGlvbmFsaXR5IGluCi0gIFY0TCAoZS5nLiB0dW5lci5jKSByYXRoZXIgdGhhbiByb2xsaW5nIG91ciBvd24uCisgIGRldmljZS4KIAogKi8KIApAQCAtNDIsMTAgKzQyLDYgQEAKIG1vZHVsZV9wYXJhbV9hcnJheShpcl9tb2RlLCBpbnQsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyhpcl9tb2RlLCJzcGVjaWZ5OiAwPWRpc2FibGUgSVIgcmVjZXB0aW9uLCAxPW5vcm1hbCBJUiIpOwogCi1zdGF0aWMgdW5zaWduZWQgaW50IHB2cjJfaTJjX2NsaWVudF9kZXNjcmliZShzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcCwKLQkJCQkJICAgICB1bnNpZ25lZCBpbnQgZGV0YWlsLAotCQkJCQkgICAgIGNoYXIgKmJ1Zix1bnNpZ25lZCBpbnQgbWF4bGVuKTsKLQogc3RhdGljIGludCBwdnIyX2kyY193cml0ZShzdHJ1Y3QgcHZyMl9oZHcgKmhkdywgLyogQ29udGV4dCAqLwogCQkJICB1OCBpMmNfYWRkciwgICAgICAvKiBJMkMgYWRkcmVzcyB3ZSdyZSB0YWxraW5nIHRvICovCiAJCQkgIHU4ICpkYXRhLCAgICAgICAgIC8qIERhdGEgdG8gd3JpdGUgKi8KQEAgLTUyNCw0MTQgKzUyMCwxMyBAQAogCXJldHVybiBJMkNfRlVOQ19TTUJVU19FTVVMIHwgSTJDX0ZVTkNfSTJDOwogfQogCi1zdGF0aWMgaW50IHB2cjJfaTJjX2NvcmVfc2luZ2xldG9uKHN0cnVjdCBpMmNfY2xpZW50ICpjcCwKLQkJCQkgICB1bnNpZ25lZCBpbnQgY21kLHZvaWQgKmFyZykKLXsKLQlpbnQgc3RhdDsKLQlpZiAoIWNwKSByZXR1cm4gLUVJTlZBTDsKLQlpZiAoIShjcC0+ZHJpdmVyKSkgcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKCEoY3AtPmRyaXZlci0+Y29tbWFuZCkpIHJldHVybiAtRUlOVkFMOwotCWlmICghdHJ5X21vZHVsZV9nZXQoY3AtPmRyaXZlci0+ZHJpdmVyLm93bmVyKSkgcmV0dXJuIC1FQUdBSU47Ci0Jc3RhdCA9IGNwLT5kcml2ZXItPmNvbW1hbmQoY3AsY21kLGFyZyk7Ci0JbW9kdWxlX3B1dChjcC0+ZHJpdmVyLT5kcml2ZXIub3duZXIpOwotCXJldHVybiBzdGF0OwotfQotCi1pbnQgcHZyMl9pMmNfY2xpZW50X2NtZChzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcCx1bnNpZ25lZCBpbnQgY21kLHZvaWQgKmFyZykKLXsKLQlpbnQgc3RhdDsKLQlpZiAocHZydXNiMl9kZWJ1ZyAmIFBWUjJfVFJBQ0VfSTJDX0NNRCkgewotCQljaGFyIGJ1ZlsxMDBdOwotCQl1bnNpZ25lZCBpbnQgY250OwotCQljbnQgPSBwdnIyX2kyY19jbGllbnRfZGVzY3JpYmUoY3AsUFZSMl9JMkNfREVUQUlMX0RFQlVHLAotCQkJCQkgICAgICAgYnVmLHNpemVvZihidWYpKTsKLQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0kyQ19DTUQsCi0JCQkgICAiaTJjIENPTU1BTkQgKGNvZGU9JXUgMHgleCkgdG8gJS4qcyIsCi0JCQkgICBjbWQsY21kLGNudCxidWYpOwotCX0KLQlzdGF0ID0gcHZyMl9pMmNfY29yZV9zaW5nbGV0b24oY3AtPmNsaWVudCxjbWQsYXJnKTsKLQlpZiAocHZydXNiMl9kZWJ1ZyAmIFBWUjJfVFJBQ0VfSTJDX0NNRCkgewotCQljaGFyIGJ1ZlsxMDBdOwotCQl1bnNpZ25lZCBpbnQgY250OwotCQljbnQgPSBwdnIyX2kyY19jbGllbnRfZGVzY3JpYmUoY3AsUFZSMl9JMkNfREVUQUlMX0RFQlVHLAotCQkJCQkgICAgICAgYnVmLHNpemVvZihidWYpKTsKLQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0kyQ19DTUQsCi0JCQkgICAiaTJjIENPTU1BTkQgdG8gJS4qcyAocmV0PSVkKSIsY250LGJ1ZixzdGF0KTsKLQl9Ci0JcmV0dXJuIHN0YXQ7Ci19Ci0KLWludCBwdnIyX2kyY19jb3JlX2NtZChzdHJ1Y3QgcHZyMl9oZHcgKmhkdyx1bnNpZ25lZCBpbnQgY21kLHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcCwgKm5jcDsKLQlpbnQgc3RhdCA9IC1FSU5WQUw7Ci0KLQlpZiAoIWhkdykgcmV0dXJuIHN0YXQ7Ci0KLQltdXRleF9sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShjcCwgbmNwLCAmaGR3LT5pMmNfY2xpZW50cywgbGlzdCkgewotCQlpZiAoIWNwLT5yZWN2X2VuYWJsZSkgY29udGludWU7Ci0JCW11dGV4X3VubG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsKLQkJc3RhdCA9IHB2cjJfaTJjX2NsaWVudF9jbWQoY3AsY21kLGFyZyk7Ci0JCW11dGV4X2xvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7Ci0JfQotCW11dGV4X3VubG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsKLQlyZXR1cm4gc3RhdDsKLX0KLQotCi1zdGF0aWMgaW50IGhhbmRsZXJfY2hlY2soc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3ApCi17Ci0Jc3RydWN0IHB2cjJfaTJjX2hhbmRsZXIgKmhwID0gY3AtPmhhbmRsZXI7Ci0JaWYgKCFocCkgcmV0dXJuIDA7Ci0JaWYgKCFocC0+ZnVuY190YWJsZS0+Y2hlY2spIHJldHVybiAwOwotCXJldHVybiBocC0+ZnVuY190YWJsZS0+Y2hlY2soaHAtPmZ1bmNfZGF0YSkgIT0gMDsKLX0KLQotI2RlZmluZSBCVUZTSVpFIDUwMAotCi0KLXZvaWQgcHZyMl9pMmNfY29yZV9zdGF0dXNfcG9sbChzdHJ1Y3QgcHZyMl9oZHcgKmhkdykKLXsKLQlzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcDsKLQltdXRleF9sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOyBkbyB7Ci0JCXN0cnVjdCB2NGwyX3R1bmVyICp2dHAgPSAmaGR3LT50dW5lcl9zaWduYWxfaW5mbzsKLQkJbWVtc2V0KHZ0cCwwLHNpemVvZigqdnRwKSk7Ci0JCWxpc3RfZm9yX2VhY2hfZW50cnkoY3AsICZoZHctPmkyY19jbGllbnRzLCBsaXN0KSB7Ci0JCQlpZiAoIWNwLT5kZXRlY3RlZF9mbGFnKSBjb250aW51ZTsKLQkJCWlmICghY3AtPnN0YXR1c19wb2xsKSBjb250aW51ZTsKLQkJCWNwLT5zdGF0dXNfcG9sbChjcCk7Ci0JCX0KLQkJaGR3LT50dW5lcl9zaWduYWxfc3RhbGUgPSAwOwotCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyBzdGF0dXMgcG9sbCIKLQkJCSAgICIgdHlwZT0ldSBzdHJlbmd0aD0ldSBhdWRpbz0weCV4IGNhcD0weCV4IgotCQkJICAgIiBsb3c9JXUgaGk9JXUiLAotCQkJICAgdnRwLT50eXBlLAotCQkJICAgdnRwLT5zaWduYWwsdnRwLT5yeHN1YmNoYW5zLHZ0cC0+Y2FwYWJpbGl0eSwKLQkJCSAgIHZ0cC0+cmFuZ2Vsb3csdnRwLT5yYW5nZWhpZ2gpOwotCX0gd2hpbGUgKDApOyBtdXRleF91bmxvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7Ci19Ci0KLQotLyogSXNzdWUgdmFyaW91cyBJMkMgb3BlcmF0aW9ucyB0byBicmluZyBjaGlwLWxldmVsIGRyaXZlcnMgaW50byBzeW5jIHdpdGgKLSAgIHN0YXRlIHN0b3JlZCBpbiB0aGlzIGRyaXZlci4gKi8KLXZvaWQgcHZyMl9pMmNfY29yZV9zeW5jKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXVuc2lnbmVkIGxvbmcgbXNrOwotCXVuc2lnbmVkIGludCBpZHg7Ci0Jc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3AsICpuY3A7Ci0KLQlpZiAoIWhkdy0+aTJjX2xpbmtlZCkgcmV0dXJuOwotCWlmICghKGhkdy0+aTJjX3BlbmRfdHlwZXMgJiBQVlIyX0kyQ19QRU5EX0FMTCkpIHsKLQkJcmV0dXJuOwotCX0KLQltdXRleF9sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOyBkbyB7Ci0JCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JMkNfQ09SRSwiaTJjOiBjb3JlX3N5bmMgQkVHSU4iKTsKLQkJaWYgKGhkdy0+aTJjX3BlbmRfdHlwZXMgJiBQVlIyX0kyQ19QRU5EX0RFVEVDVCkgewotCQkJLyogT25lIG9yIG1vcmUgSTJDIGNsaWVudHMgaGF2ZSBhdHRhY2hlZCBzaW5jZSB3ZQotCQkJICAgbGFzdCBzeW5jZWQuICBTbyBzY2FuIHRoZSBsaXN0IGFuZCBpZGVudGlmeSB0aGUKLQkJCSAgIG5ldyBjbGllbnRzLiAqLwotCQkJY2hhciAqYnVmOwotCQkJdW5zaWduZWQgaW50IGNudDsKLQkJCXVuc2lnbmVkIGxvbmcgYW1hc2sgPSAwOwotCQkJYnVmID0ga21hbGxvYyhCVUZTSVpFLEdGUF9LRVJORUwpOwotCQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0kyQ19DT1JFLCJpMmM6IFBFTkRfREVURUNUIik7Ci0JCQloZHctPmkyY19wZW5kX3R5cGVzICY9IH5QVlIyX0kyQ19QRU5EX0RFVEVDVDsKLQkJCWxpc3RfZm9yX2VhY2hfZW50cnkoY3AsICZoZHctPmkyY19jbGllbnRzLCBsaXN0KSB7Ci0JCQkJaWYgKCFjcC0+ZGV0ZWN0ZWRfZmxhZykgewotCQkJCQljcC0+Y3RsX21hc2sgPSAwOwotCQkJCQlwdnIyX2kyY19wcm9iZShoZHcsY3ApOwotCQkJCQljcC0+ZGV0ZWN0ZWRfZmxhZyA9ICEwOwotCQkJCQltc2sgPSBjcC0+Y3RsX21hc2s7Ci0JCQkJCWNudCA9IDA7Ci0JCQkJCWlmIChidWYpIHsKLQkJCQkJCWNudCA9IHB2cjJfaTJjX2NsaWVudF9kZXNjcmliZSgKLQkJCQkJCQljcCwKLQkJCQkJCQlQVlIyX0kyQ19ERVRBSUxfQUxMLAotCQkJCQkJCWJ1ZixCVUZTSVpFKTsKLQkJCQkJfQotCQkJCQl0cmFjZV9pMmMoIlByb2JlZDogJS4qcyIsY250LGJ1Zik7Ci0JCQkJCWlmIChoYW5kbGVyX2NoZWNrKGNwKSkgewotCQkJCQkJaGR3LT5pMmNfcGVuZF90eXBlcyB8PQotCQkJCQkJCVBWUjJfSTJDX1BFTkRfQ0xJRU5UOwotCQkJCQl9Ci0JCQkJCWNwLT5wZW5kX21hc2sgPSBtc2s7Ci0JCQkJCWhkdy0+aTJjX3BlbmRfbWFzayB8PSBtc2s7Ci0JCQkJCWhkdy0+aTJjX3BlbmRfdHlwZXMgfD0KLQkJCQkJCVBWUjJfSTJDX1BFTkRfUkVGUkVTSDsKLQkJCQl9Ci0JCQkJYW1hc2sgfD0gY3AtPmN0bF9tYXNrOwotCQkJfQotCQkJaGR3LT5pMmNfYWN0aXZlX21hc2sgPSBhbWFzazsKLQkJCWlmIChidWYpIGtmcmVlKGJ1Zik7Ci0JCX0KLQkJaWYgKGhkdy0+aTJjX3BlbmRfdHlwZXMgJiBQVlIyX0kyQ19QRU5EX1NUQUxFKSB7Ci0JCQkvKiBOZWVkIHRvIGRvIG9uZSBvciBtb3JlIGdsb2JhbCB1cGRhdGVzLiAgQXJyYW5nZQotCQkJICAgZm9yIHRoaXMgdG8gaGFwcGVuLiAqLwotCQkJdW5zaWduZWQgbG9uZyBtMjsKLQkJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JMkNfQ09SRSwKLQkJCQkgICAiaTJjOiBQRU5EX1NUQUxFICgweCVseCkiLAotCQkJCSAgIGhkdy0+aTJjX3N0YWxlX21hc2spOwotCQkJaGR3LT5pMmNfcGVuZF90eXBlcyAmPSB+UFZSMl9JMkNfUEVORF9TVEFMRTsKLQkJCWxpc3RfZm9yX2VhY2hfZW50cnkoY3AsICZoZHctPmkyY19jbGllbnRzLCBsaXN0KSB7Ci0JCQkJbTIgPSBoZHctPmkyY19zdGFsZV9tYXNrOwotCQkJCW0yICY9IGNwLT5jdGxfbWFzazsKLQkJCQltMiAmPSB+Y3AtPnBlbmRfbWFzazsKLQkJCQlpZiAobTIpIHsKLQkJCQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0kyQ19DT1JFLAotCQkJCQkJICAgImkyYzogY3A9JXAgc2V0dGluZyAweCVseCIsCi0JCQkJCQkgICBjcCxtMik7Ci0JCQkJCWNwLT5wZW5kX21hc2sgfD0gbTI7Ci0JCQkJfQotCQkJfQotCQkJaGR3LT5pMmNfcGVuZF9tYXNrIHw9IGhkdy0+aTJjX3N0YWxlX21hc2s7Ci0JCQloZHctPmkyY19zdGFsZV9tYXNrID0gMDsKLQkJCWhkdy0+aTJjX3BlbmRfdHlwZXMgfD0gUFZSMl9JMkNfUEVORF9SRUZSRVNIOwotCQl9Ci0JCWlmIChoZHctPmkyY19wZW5kX3R5cGVzICYgUFZSMl9JMkNfUEVORF9DTElFTlQpIHsKLQkJCS8qIE9uZSBvciBtb3JlIGNsaWVudCBoYW5kbGVycyBhcmUgYXNraW5nIGZvciBhbgotCQkJICAgdXBkYXRlLiAgUnVuIHRocm91Z2ggdGhlIGxpc3Qgb2Yga25vd24gY2xpZW50cwotCQkJICAgYW5kIHVwZGF0ZSBlYWNoIG9uZS4gKi8KLQkJCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JMkNfQ09SRSwiaTJjOiBQRU5EX0NMSUVOVCIpOwotCQkJaGR3LT5pMmNfcGVuZF90eXBlcyAmPSB+UFZSMl9JMkNfUEVORF9DTElFTlQ7Ci0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3AsIG5jcCwgJmhkdy0+aTJjX2NsaWVudHMsCi0JCQkJCQkgbGlzdCkgewotCQkJCWlmICghY3AtPmhhbmRsZXIpIGNvbnRpbnVlOwotCQkJCWlmICghY3AtPmhhbmRsZXItPmZ1bmNfdGFibGUtPnVwZGF0ZSkgY29udGludWU7Ci0JCQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0kyQ19DT1JFLAotCQkJCQkgICAiaTJjOiBjcD0lcCB1cGRhdGUiLGNwKTsKLQkJCQltdXRleF91bmxvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7Ci0JCQkJY3AtPmhhbmRsZXItPmZ1bmNfdGFibGUtPnVwZGF0ZSgKLQkJCQkJY3AtPmhhbmRsZXItPmZ1bmNfZGF0YSk7Ci0JCQkJbXV0ZXhfbG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsKLQkJCQkvKiBJZiBjbGllbnQncyB1cGRhdGUgZnVuY3Rpb24gc2V0IHNvbWUKLQkJCQkgICBhZGRpdGlvbmFsIHBlbmRpbmcgYml0cywgYWNjb3VudCBmb3IgdGhhdAotCQkJCSAgIGhlcmUuICovCi0JCQkJaWYgKGNwLT5wZW5kX21hc2sgJiB+aGR3LT5pMmNfcGVuZF9tYXNrKSB7Ci0JCQkJCWhkdy0+aTJjX3BlbmRfbWFzayB8PSBjcC0+cGVuZF9tYXNrOwotCQkJCQloZHctPmkyY19wZW5kX3R5cGVzIHw9Ci0JCQkJCQlQVlIyX0kyQ19QRU5EX1JFRlJFU0g7Ci0JCQkJfQotCQkJfQotCQl9Ci0JCWlmIChoZHctPmkyY19wZW5kX3R5cGVzICYgUFZSMl9JMkNfUEVORF9SRUZSRVNIKSB7Ci0JCQljb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgKm9wZjsKLQkJCXVuc2lnbmVkIGxvbmcgcG07Ci0JCQkvKiBTb21lIGFjdHVhbCB1cGRhdGVzIGFyZSBwZW5kaW5nLiAgV2FsayB0aHJvdWdoCi0JCQkgICBlYWNoIHVwZGF0ZSB0eXBlIGFuZCBwZXJmb3JtIGl0LiAqLwotCQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0kyQ19DT1JFLCJpMmM6IFBFTkRfUkVGUkVTSCIKLQkJCQkgICAiICgweCVseCkiLGhkdy0+aTJjX3BlbmRfbWFzayk7Ci0JCQloZHctPmkyY19wZW5kX3R5cGVzICY9IH5QVlIyX0kyQ19QRU5EX1JFRlJFU0g7Ci0JCQlwbSA9IGhkdy0+aTJjX3BlbmRfbWFzazsKLQkJCWhkdy0+aTJjX3BlbmRfbWFzayA9IDA7Ci0JCQlmb3IgKGlkeCA9IDAsIG1zayA9IDE7IHBtOyBpZHgrKywgbXNrIDw8PSAxKSB7Ci0JCQkJaWYgKCEocG0gJiBtc2spKSBjb250aW51ZTsKLQkJCQlwbSAmPSB+bXNrOwotCQkJCWxpc3RfZm9yX2VhY2hfZW50cnkoY3AsICZoZHctPmkyY19jbGllbnRzLAotCQkJCQkJICAgIGxpc3QpIHsKLQkJCQkJaWYgKGNwLT5wZW5kX21hc2sgJiBtc2spIHsKLQkJCQkJCWNwLT5wZW5kX21hc2sgJj0gfm1zazsKLQkJCQkJCWNwLT5yZWN2X2VuYWJsZSA9ICEwOwotCQkJCQl9IGVsc2UgewotCQkJCQkJY3AtPnJlY3ZfZW5hYmxlID0gMDsKLQkJCQkJfQotCQkJCX0KLQkJCQlvcGYgPSBwdnIyX2kyY19nZXRfb3AoaWR4KTsKLQkJCQlpZiAoIW9wZikgY29udGludWU7Ci0JCQkJbXV0ZXhfdW5sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOwotCQkJCW9wZi0+dXBkYXRlKGhkdyk7Ci0JCQkJbXV0ZXhfbG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsKLQkJCX0KLQkJfQotCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfSTJDX0NPUkUsImkyYzogY29yZV9zeW5jIEVORCIpOwotCX0gd2hpbGUgKDApOyBtdXRleF91bmxvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7Ci19Ci0KLWludCBwdnIyX2kyY19jb3JlX2NoZWNrX3N0YWxlKHN0cnVjdCBwdnIyX2hkdyAqaGR3KQotewotCXVuc2lnbmVkIGxvbmcgbXNrLHNtLHBtOwotCXVuc2lnbmVkIGludCBpZHg7Ci0JY29uc3Qgc3RydWN0IHB2cjJfaTJjX29wICpvcGY7Ci0Jc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3A7Ci0JdW5zaWduZWQgaW50IHB0ID0gMDsKLQotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JMkNfQ09SRSwicHZyMl9pMmNfY29yZV9jaGVja19zdGFsZSBCRUdJTiIpOwotCi0JcG0gPSBoZHctPmkyY19hY3RpdmVfbWFzazsKLQlzbSA9IDA7Ci0JZm9yIChpZHggPSAwLCBtc2sgPSAxOyBwbTsgaWR4KyssIG1zayA8PD0gMSkgewotCQlpZiAoIShtc2sgJiBwbSkpIGNvbnRpbnVlOwotCQlwbSAmPSB+bXNrOwotCQlvcGYgPSBwdnIyX2kyY19nZXRfb3AoaWR4KTsKLQkJaWYgKCFvcGYpIGNvbnRpbnVlOwotCQlpZiAob3BmLT5jaGVjayhoZHcpKSB7Ci0JCQlzbSB8PSBtc2s7Ci0JCX0KLQl9Ci0JaWYgKHNtKSBwdCB8PSBQVlIyX0kyQ19QRU5EX1NUQUxFOwotCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShjcCwgJmhkdy0+aTJjX2NsaWVudHMsIGxpc3QpCi0JCWlmIChoYW5kbGVyX2NoZWNrKGNwKSkKLQkJCXB0IHw9IFBWUjJfSTJDX1BFTkRfQ0xJRU5UOwotCi0JaWYgKHB0KSB7Ci0JCW11dGV4X2xvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7IGRvIHsKLQkJCWhkdy0+aTJjX3BlbmRfdHlwZXMgfD0gcHQ7Ci0JCQloZHctPmkyY19zdGFsZV9tYXNrIHw9IHNtOwotCQkJaGR3LT5pMmNfcGVuZF9tYXNrIHw9IGhkdy0+aTJjX3N0YWxlX21hc2s7Ci0JCX0gd2hpbGUgKDApOyBtdXRleF91bmxvY2soJmhkdy0+aTJjX2xpc3RfbG9jayk7Ci0JfQotCi0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0kyQ19DT1JFLAotCQkgICAiaTJjOiB0eXBlcz0weCV4IHN0YWxlPTB4JWx4IHBlbmQ9MHglbHgiLAotCQkgICBoZHctPmkyY19wZW5kX3R5cGVzLAotCQkgICBoZHctPmkyY19zdGFsZV9tYXNrLAotCQkgICBoZHctPmkyY19wZW5kX21hc2spOwotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JMkNfQ09SRSwicHZyMl9pMmNfY29yZV9jaGVja19zdGFsZSBFTkQiKTsKLQotCXJldHVybiAoaGR3LT5pMmNfcGVuZF90eXBlcyAmIFBWUjJfSTJDX1BFTkRfQUxMKSAhPSAwOwotfQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHB2cjJfaTJjX2NsaWVudF9kZXNjcmliZShzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcCwKLQkJCQkJICAgICB1bnNpZ25lZCBpbnQgZGV0YWlsLAotCQkJCQkgICAgIGNoYXIgKmJ1Zix1bnNpZ25lZCBpbnQgbWF4bGVuKQotewotCXVuc2lnbmVkIGludCBjY250LGJjbnQ7Ci0JaW50IHNwY2ZsID0gMDsKLQljb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgKm9wZjsKLQotCWNjbnQgPSAwOwotCWlmIChkZXRhaWwgJiBQVlIyX0kyQ19ERVRBSUxfREVCVUcpIHsKLQkJYmNudCA9IHNjbnByaW50ZihidWYsbWF4bGVuLAotCQkJCSAiY3R4dD0lcCBjdGxfbWFzaz0weCVseCIsCi0JCQkJIGNwLGNwLT5jdGxfbWFzayk7Ci0JCWNjbnQgKz0gYmNudDsgYnVmICs9IGJjbnQ7IG1heGxlbiAtPSBiY250OwotCQlzcGNmbCA9ICEwOwotCX0KLQliY250ID0gc2NucHJpbnRmKGJ1ZixtYXhsZW4sCi0JCQkgIiVzJXMgQCAweCV4IiwKLQkJCSAoc3BjZmwgPyAiICIgOiAiIiksCi0JCQkgY3AtPmNsaWVudC0+bmFtZSwKLQkJCSBjcC0+Y2xpZW50LT5hZGRyKTsKLQljY250ICs9IGJjbnQ7IGJ1ZiArPSBiY250OyBtYXhsZW4gLT0gYmNudDsKLQlpZiAoKGRldGFpbCAmIFBWUjJfSTJDX0RFVEFJTF9IQU5ETEVSKSAmJgotCSAgICBjcC0+aGFuZGxlciAmJiBjcC0+aGFuZGxlci0+ZnVuY190YWJsZS0+ZGVzY3JpYmUpIHsKLQkJYmNudCA9IHNjbnByaW50ZihidWYsbWF4bGVuLCIgKCIpOwotCQljY250ICs9IGJjbnQ7IGJ1ZiArPSBiY250OyBtYXhsZW4gLT0gYmNudDsKLQkJYmNudCA9IGNwLT5oYW5kbGVyLT5mdW5jX3RhYmxlLT5kZXNjcmliZSgKLQkJCWNwLT5oYW5kbGVyLT5mdW5jX2RhdGEsYnVmLG1heGxlbik7Ci0JCWNjbnQgKz0gYmNudDsgYnVmICs9IGJjbnQ7IG1heGxlbiAtPSBiY250OwotCQliY250ID0gc2NucHJpbnRmKGJ1ZixtYXhsZW4sIikiKTsKLQkJY2NudCArPSBiY250OyBidWYgKz0gYmNudDsgbWF4bGVuIC09IGJjbnQ7Ci0JfQotCWlmICgoZGV0YWlsICYgUFZSMl9JMkNfREVUQUlMX0NUTE1BU0spICYmIGNwLT5jdGxfbWFzaykgewotCQl1bnNpZ25lZCBpbnQgaWR4OwotCQl1bnNpZ25lZCBsb25nIG1zayxzbTsKLQotCQliY250ID0gc2NucHJpbnRmKGJ1ZixtYXhsZW4sIiBbIik7Ci0JCWNjbnQgKz0gYmNudDsgYnVmICs9IGJjbnQ7IG1heGxlbiAtPSBiY250OwotCQlzbSA9IDA7Ci0JCXNwY2ZsID0gMDsKLQkJZm9yIChpZHggPSAwLCBtc2sgPSAxOyBtc2s7IGlkeCsrLCBtc2sgPDw9IDEpIHsKLQkJCWlmICghKGNwLT5jdGxfbWFzayAmIG1zaykpIGNvbnRpbnVlOwotCQkJb3BmID0gcHZyMl9pMmNfZ2V0X29wKGlkeCk7Ci0JCQlpZiAob3BmKSB7Ci0JCQkJYmNudCA9IHNjbnByaW50ZihidWYsbWF4bGVuLCIlcyVzIiwKLQkJCQkJCSBzcGNmbCA/ICIgIiA6ICIiLAotCQkJCQkJIG9wZi0+bmFtZSk7Ci0JCQkJY2NudCArPSBiY250OyBidWYgKz0gYmNudDsgbWF4bGVuIC09IGJjbnQ7Ci0JCQkJc3BjZmwgPSAhMDsKLQkJCX0gZWxzZSB7Ci0JCQkJc20gfD0gbXNrOwotCQkJfQotCQl9Ci0JCWlmIChzbSkgewotCQkJYmNudCA9IHNjbnByaW50ZihidWYsbWF4bGVuLCIlcyVseCIsCi0JCQkJCSBpZHggIT0gMCA/ICIgIiA6ICIiLHNtKTsKLQkJCWNjbnQgKz0gYmNudDsgYnVmICs9IGJjbnQ7IG1heGxlbiAtPSBiY250OwotCQl9Ci0JCWJjbnQgPSBzY25wcmludGYoYnVmLG1heGxlbiwiXSIpOwotCQljY250ICs9IGJjbnQ7IGJ1ZiArPSBiY250OyBtYXhsZW4gLT0gYmNudDsKLQl9Ci0JcmV0dXJuIGNjbnQ7Ci19Ci0KLXVuc2lnbmVkIGludCBwdnIyX2kyY19yZXBvcnQoc3RydWN0IHB2cjJfaGR3ICpoZHcsCi0JCQkgICAgIGNoYXIgKmJ1Zix1bnNpZ25lZCBpbnQgbWF4bGVuKQotewotCXVuc2lnbmVkIGludCBjY250LGJjbnQ7Ci0Jc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3A7Ci0JY2NudCA9IDA7Ci0JbXV0ZXhfbG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsgZG8gewotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGNwLCAmaGR3LT5pMmNfY2xpZW50cywgbGlzdCkgewotCQkJYmNudCA9IHB2cjJfaTJjX2NsaWVudF9kZXNjcmliZSgKLQkJCQljcCwKLQkJCQkoUFZSMl9JMkNfREVUQUlMX0hBTkRMRVJ8Ci0JCQkJIFBWUjJfSTJDX0RFVEFJTF9DVExNQVNLKSwKLQkJCQlidWYsbWF4bGVuKTsKLQkJCWNjbnQgKz0gYmNudDsgYnVmICs9IGJjbnQ7IG1heGxlbiAtPSBiY250OwotCQkJYmNudCA9IHNjbnByaW50ZihidWYsbWF4bGVuLCJcbiIpOwotCQkJY2NudCArPSBiY250OyBidWYgKz0gYmNudDsgbWF4bGVuIC09IGJjbnQ7Ci0JCX0KLQl9IHdoaWxlICgwKTsgbXV0ZXhfdW5sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOwotCXJldHVybiBjY250OwotfQotCiBzdGF0aWMgaW50IHB2cjJfaTJjX2F0dGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IChzdHJ1Y3QgcHZyMl9oZHcgKikoY2xpZW50LT5hZGFwdGVyLT5hbGdvX2RhdGEpOwotCXN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwOwotCWludCBmbCA9ICEoaGR3LT5pMmNfcGVuZF90eXBlcyAmIFBWUjJfSTJDX1BFTkRfQUxMKTsKLQljcCA9IGt6YWxsb2Moc2l6ZW9mKCpjcCksR0ZQX0tFUk5FTCk7Ci0JdHJhY2VfaTJjKCJpMmNfYXR0YWNoIFtjbGllbnQ9JXMgQCAweCV4IGN0eHQ9JXBdIiwKLQkJICBjbGllbnQtPm5hbWUsCi0JCSAgY2xpZW50LT5hZGRyLGNwKTsKLQlpZiAoIWNwKSByZXR1cm4gLUVOT01FTTsKLQljcC0+aGR3ID0gaGR3OwotCUlOSVRfTElTVF9IRUFEKCZjcC0+bGlzdCk7Ci0JY3AtPmNsaWVudCA9IGNsaWVudDsKLQltdXRleF9sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOyBkbyB7Ci0JCWhkdy0+Y3JvcGNhcF9zdGFsZSA9ICEwOwotCQlsaXN0X2FkZF90YWlsKCZjcC0+bGlzdCwmaGR3LT5pMmNfY2xpZW50cyk7Ci0JCWhkdy0+aTJjX3BlbmRfdHlwZXMgfD0gUFZSMl9JMkNfUEVORF9ERVRFQ1Q7Ci0JfSB3aGlsZSAoMCk7IG11dGV4X3VubG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsKLQlpZiAoZmwpIHF1ZXVlX3dvcmsoaGR3LT53b3JrcXVldWUsJmhkdy0+d29ya2kyY3N5bmMpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHB2cjJfaTJjX2RldGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IChzdHJ1Y3QgcHZyMl9oZHcgKikoY2xpZW50LT5hZGFwdGVyLT5hbGdvX2RhdGEpOwotCXN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwLCAqbmNwOwotCXVuc2lnbmVkIGxvbmcgYW1hc2sgPSAwOwotCWludCBmb3VuZGZsID0gMDsKLQltdXRleF9sb2NrKCZoZHctPmkyY19saXN0X2xvY2spOyBkbyB7Ci0JCWhkdy0+Y3JvcGNhcF9zdGFsZSA9ICEwOwotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoY3AsIG5jcCwgJmhkdy0+aTJjX2NsaWVudHMsIGxpc3QpIHsKLQkJCWlmIChjcC0+Y2xpZW50ID09IGNsaWVudCkgewotCQkJCXRyYWNlX2kyYygicHZyMl9pMmNfZGV0YWNoIgotCQkJCQkgICIgW2NsaWVudD0lcyBAIDB4JXggY3R4dD0lcF0iLAotCQkJCQkgIGNsaWVudC0+bmFtZSwKLQkJCQkJICBjbGllbnQtPmFkZHIsY3ApOwotCQkJCWlmIChjcC0+aGFuZGxlciAmJgotCQkJCSAgICBjcC0+aGFuZGxlci0+ZnVuY190YWJsZS0+ZGV0YWNoKSB7Ci0JCQkJCWNwLT5oYW5kbGVyLT5mdW5jX3RhYmxlLT5kZXRhY2goCi0JCQkJCQljcC0+aGFuZGxlci0+ZnVuY19kYXRhKTsKLQkJCQl9Ci0JCQkJbGlzdF9kZWwoJmNwLT5saXN0KTsKLQkJCQlrZnJlZShjcCk7Ci0JCQkJZm91bmRmbCA9ICEwOwotCQkJCWNvbnRpbnVlOwotCQkJfQotCQkJYW1hc2sgfD0gY3AtPmN0bF9tYXNrOwotCQl9Ci0JCWhkdy0+aTJjX2FjdGl2ZV9tYXNrID0gYW1hc2s7Ci0JfSB3aGlsZSAoMCk7IG11dGV4X3VubG9jaygmaGR3LT5pMmNfbGlzdF9sb2NrKTsKLQlpZiAoIWZvdW5kZmwpIHsKLQkJdHJhY2VfaTJjKCJwdnIyX2kyY19kZXRhY2ggW2NsaWVudD0lcyBAIDB4JXggY3R4dD08dW5rbm93bj5dIiwKLQkJCSAgY2xpZW50LT5uYW1lLAotCQkJICBjbGllbnQtPmFkZHIpOwotCX0KIAlyZXR1cm4gMDsKIH0KIApAQCAtOTQyLDcgKzUzNyw3IEBACiAKIHN0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgcHZyMl9pMmNfYWRhcF90ZW1wbGF0ZSA9IHsKIAkub3duZXIgICAgICAgICA9IFRISVNfTU9EVUxFLAotCS5jbGFzcwkgICA9IEkyQ19DTEFTU19UVl9BTkFMT0csCisJLmNsYXNzCSAgICAgICA9IDAsCiAJLmlkICAgICAgICAgICAgPSBJMkNfSFdfQl9CVDg0OCwKIAkuY2xpZW50X3JlZ2lzdGVyID0gcHZyMl9pMmNfYXR0YWNoX2luZm9ybSwKIAkuY2xpZW50X3VucmVnaXN0ZXIgPSBwdnIyX2kyY19kZXRhY2hfaW5mb3JtLApAQCAtMTAwOSwxMiArNjA0LDggQEAKIAloZHctPmkyY19hZGFwLmRldi5wYXJlbnQgPSAmaGR3LT51c2JfZGV2LT5kZXY7CiAJaGR3LT5pMmNfYWRhcC5hbGdvID0gJmhkdy0+aTJjX2FsZ287CiAJaGR3LT5pMmNfYWRhcC5hbGdvX2RhdGEgPSBoZHc7Ci0JaGR3LT5pMmNfcGVuZF9tYXNrID0gMDsKLQloZHctPmkyY19zdGFsZV9tYXNrID0gMDsKLQloZHctPmkyY19hY3RpdmVfbWFzayA9IDA7Ci0JSU5JVF9MSVNUX0hFQUQoJmhkdy0+aTJjX2NsaWVudHMpOwotCW11dGV4X2luaXQoJmhkdy0+aTJjX2xpc3RfbG9jayk7CiAJaGR3LT5pMmNfbGlua2VkID0gITA7CisJaTJjX3NldF9hZGFwZGF0YSgmaGR3LT5pMmNfYWRhcCwgJmhkdy0+djRsMl9kZXYpOwogCWkyY19hZGRfYWRhcHRlcigmaGR3LT5pMmNfYWRhcCk7CiAJaWYgKGhkdy0+aTJjX2Z1bmNbMHgxOF0gPT0gaTJjXzI0eHh4X2lyKSB7CiAJCS8qIFByb2JlIGZvciBhIGRpZmZlcmVudCB0eXBlIG9mIElSIHJlY2VpdmVyIG9uIHRoaXMKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5oCmluZGV4IDZlZjdhMWMuLjZhNzU3NjkyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1pMmMtY29yZS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLWkyYy1jb3JlLmgKQEAgLTIwLDY4ICsyMCwxMyBAQAogI2lmbmRlZiBfX1BWUlVTQjJfSTJDX0NPUkVfSAogI2RlZmluZSBfX1BWUlVTQjJfSTJDX0NPUkVfSAogCi0jaW5jbHVkZSA8bGludXgvbGlzdC5oPgotI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgotCiBzdHJ1Y3QgcHZyMl9oZHc7Ci1zdHJ1Y3QgcHZyMl9pMmNfY2xpZW50Owotc3RydWN0IHB2cjJfaTJjX2hhbmRsZXI7Ci1zdHJ1Y3QgcHZyMl9pMmNfaGFuZGxlcl9mdW5jdGlvbnM7Ci1zdHJ1Y3QgcHZyMl9pMmNfb3A7Ci1zdHJ1Y3QgcHZyMl9pMmNfb3BfZnVuY3Rpb25zOwotCi1zdHJ1Y3QgcHZyMl9pMmNfY2xpZW50IHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBwdnIyX2kyY19oYW5kbGVyICpoYW5kbGVyOwotCXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdzsKLQlpbnQgZGV0ZWN0ZWRfZmxhZzsKLQlpbnQgcmVjdl9lbmFibGU7Ci0JdW5zaWduZWQgbG9uZyBwZW5kX21hc2s7Ci0JdW5zaWduZWQgbG9uZyBjdGxfbWFzazsKLQl2b2lkICgqc3RhdHVzX3BvbGwpKHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKik7Ci19OwotCi1zdHJ1Y3QgcHZyMl9pMmNfaGFuZGxlciB7Ci0Jdm9pZCAqZnVuY19kYXRhOwotCWNvbnN0IHN0cnVjdCBwdnIyX2kyY19oYW5kbGVyX2Z1bmN0aW9ucyAqZnVuY190YWJsZTsKLX07Ci0KLXN0cnVjdCBwdnIyX2kyY19oYW5kbGVyX2Z1bmN0aW9ucyB7Ci0Jdm9pZCAoKmRldGFjaCkodm9pZCAqKTsKLQlpbnQgKCpjaGVjaykodm9pZCAqKTsKLQl2b2lkICgqdXBkYXRlKSh2b2lkICopOwotCXVuc2lnbmVkIGludCAoKmRlc2NyaWJlKSh2b2lkICosY2hhciAqLHVuc2lnbmVkIGludCk7Ci19OwotCi1zdHJ1Y3QgcHZyMl9pMmNfb3AgewotCWludCAoKmNoZWNrKShzdHJ1Y3QgcHZyMl9oZHcgKik7Ci0Jdm9pZCAoKnVwZGF0ZSkoc3RydWN0IHB2cjJfaGR3ICopOwotCWNvbnN0IGNoYXIgKm5hbWU7Ci19OwogCiB2b2lkIHB2cjJfaTJjX2NvcmVfaW5pdChzdHJ1Y3QgcHZyMl9oZHcgKik7CiB2b2lkIHB2cjJfaTJjX2NvcmVfZG9uZShzdHJ1Y3QgcHZyMl9oZHcgKik7CiAKLWludCBwdnIyX2kyY19jbGllbnRfY21kKHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKix1bnNpZ25lZCBpbnQgY21kLHZvaWQgKmFyZyk7Ci1pbnQgcHZyMl9pMmNfY29yZV9jbWQoc3RydWN0IHB2cjJfaGR3ICosdW5zaWduZWQgaW50IGNtZCx2b2lkICphcmcpOwogCi1pbnQgcHZyMl9pMmNfY29yZV9jaGVja19zdGFsZShzdHJ1Y3QgcHZyMl9oZHcgKik7Ci12b2lkIHB2cjJfaTJjX2NvcmVfc3luYyhzdHJ1Y3QgcHZyMl9oZHcgKik7Ci12b2lkIHB2cjJfaTJjX2NvcmVfc3RhdHVzX3BvbGwoc3RydWN0IHB2cjJfaGR3ICopOwotdW5zaWduZWQgaW50IHB2cjJfaTJjX3JlcG9ydChzdHJ1Y3QgcHZyMl9oZHcgKixjaGFyICpidWYsdW5zaWduZWQgaW50IG1heGxlbik7Ci0jZGVmaW5lIFBWUjJfSTJDX0RFVEFJTF9ERUJVRyAgIDB4MDAwMQotI2RlZmluZSBQVlIyX0kyQ19ERVRBSUxfSEFORExFUiAweDAwMDIKLSNkZWZpbmUgUFZSMl9JMkNfREVUQUlMX0NUTE1BU0sgMHgwMDA0Ci0jZGVmaW5lIFBWUjJfSTJDX0RFVEFJTF9BTEwgKFwKLQlQVlIyX0kyQ19ERVRBSUxfREVCVUcgfFwKLQlQVlIyX0kyQ19ERVRBSUxfSEFORExFUiB8XAotCVBWUjJfSTJDX0RFVEFJTF9DVExNQVNLKQotCi12b2lkIHB2cjJfaTJjX3Byb2JlKHN0cnVjdCBwdnIyX2hkdyAqLHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKik7Ci1jb25zdCBzdHJ1Y3QgcHZyMl9pMmNfb3AgKnB2cjJfaTJjX2dldF9vcCh1bnNpZ25lZCBpbnQgaWR4KTsKLQotI2VuZGlmIC8qIF9fUFZSVVNCMl9JMkNfQ09SRV9IICovCisjZW5kaWYgLyogX19QVlJVU0IyX0kyQ19BREFQVEVSX0ggKi8KIAogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItbWFpbi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItbWFpbi5jCmluZGV4IDliM2M4NzQuLjg2ODlkZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLW1haW4uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1tYWluLmMKQEAgLTEzNywxMCArMTM3LDEwIEBACiAJcmV0ID0gdXNiX3JlZ2lzdGVyKCZwdnJfZHJpdmVyKTsKIAogCWlmIChyZXQgPT0gMCkKLQkJcHJpbnRrKEtFUk5fSU5GTyBLQlVJTERfTU9ETkFNRSAiOiAiIERSSVZFUl9WRVJTSU9OICI6IgorCQlwcmludGsoS0VSTl9JTkZPICJwdnJ1c2IyOiAiIERSSVZFUl9WRVJTSU9OICI6IgogCQkgICAgICAgRFJJVkVSX0RFU0MgIlxuIik7CiAJaWYgKHB2cnVzYjJfZGVidWcpCi0JCXByaW50ayhLRVJOX0lORk8gS0JVSUxEX01PRE5BTUUgIjogRGVidWcgbWFzayBpcyAlZCAoMHgleClcbiIsCisJCXByaW50ayhLRVJOX0lORk8gInB2cnVzYjI6IERlYnVnIG1hc2sgaXMgJWQgKDB4JXgpXG4iLAogCQkgICAgICAgcHZydXNiMl9kZWJ1ZyxwdnJ1c2IyX2RlYnVnKTsKIAogCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9JTklULCJwdnJfaW5pdCBjb21wbGV0ZSIpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXN5c2ZzLmMKaW5kZXggZTY0MWNkOS4uZTIwYmExZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItc3lzZnMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi1zeXNmcy5jCkBAIC02MjcsMTYgKzYyNyw4IEBACiAJcHZyMl9zeXNmc190cmFjZSgiQ3JlYXRpbmcgY2xhc3NfZGV2IGlkPSVwIixjbGFzc19kZXYpOwogCiAJY2xhc3NfZGV2LT5jbGFzcyA9ICZjbGFzc19wdHItPmNsYXNzOwotCWlmIChwdnIyX2hkd19nZXRfc24oc2ZwLT5jaGFubmVsLmhkdykpIHsKLQkJZGV2X3NldF9uYW1lKGNsYXNzX2RldiwgInNuLSVsdSIsCi0JCQkgcHZyMl9oZHdfZ2V0X3NuKHNmcC0+Y2hhbm5lbC5oZHcpKTsKLQl9IGVsc2UgaWYgKHB2cjJfaGR3X2dldF91bml0X251bWJlcihzZnAtPmNoYW5uZWwuaGR3KSA+PSAwKSB7Ci0JCWRldl9zZXRfbmFtZShjbGFzc19kZXYsICJ1bml0LSVjIiwKLQkJCSBwdnIyX2hkd19nZXRfdW5pdF9udW1iZXIoc2ZwLT5jaGFubmVsLmhkdykgKyAnYScpOwotCX0gZWxzZSB7Ci0JCWtmcmVlKGNsYXNzX2Rldik7Ci0JCXJldHVybjsKLQl9CisJZGV2X3NldF9uYW1lKGNsYXNzX2RldiwgIiVzIiwKKwkJICAgICBwdnIyX2hkd19nZXRfZGV2aWNlX2lkZW50aWZpZXIoc2ZwLT5jaGFubmVsLmhkdykpOwogCiAJY2xhc3NfZGV2LT5wYXJlbnQgPSAmdXNiX2Rldi0+ZGV2OwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi10dW5lci5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdHVuZXIuYwpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDc3NzVkMS4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi10dW5lci5jCisrKyAvZGV2L251bGwKQEAgLTEsMTIwICswLDAgQEAKLS8qCi0gKgotICoKLSAqICBDb3B5cmlnaHQgKEMpIDIwMDUgTWlrZSBJc2VseSA8aXNlbHlAcG9ib3guY29tPgotICogIENvcHlyaWdodCAoQykgMjAwNCBBdXJlbGllbiBBbGxlYXVtZSA8c2x0c0BmcmVlLmZyPgotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQotICogIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5Ci0gKiAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZQotICoKLSAqICBUaGlzIHByb2dyYW0gaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKLSAqICBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCi0gKiAgRm91bmRhdGlvbiwgSW5jLiwgNTkgVGVtcGxlIFBsYWNlLCBTdWl0ZSAzMzAsIEJvc3RvbiwgTUEgIDAyMTExLTEzMDcgIFVTQQotICoKLSAqLwotCi0jaW5jbHVkZSAicHZydXNiMi5oIgotI2luY2x1ZGUgInB2cnVzYjItdXRpbC5oIgotI2luY2x1ZGUgInB2cnVzYjItdHVuZXIuaCIKLSNpbmNsdWRlICJwdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIgotI2luY2x1ZGUgInB2cnVzYjItZGVidWcuaCIKLSNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0KLXN0cnVjdCBwdnIyX3R1bmVyX2hhbmRsZXIgewotCXN0cnVjdCBwdnIyX2hkdyAqaGR3OwotCXN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNsaWVudDsKLQlzdHJ1Y3QgcHZyMl9pMmNfaGFuZGxlciBpMmNfaGFuZGxlcjsKLQlpbnQgdHlwZV91cGRhdGVfZmw7Ci19OwotCi0KLXN0YXRpYyB2b2lkIHNldF90eXBlKHN0cnVjdCBwdnIyX3R1bmVyX2hhbmRsZXIgKmN0eHQpCi17Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjdHh0LT5oZHc7Ci0Jc3RydWN0IHR1bmVyX3NldHVwIHNldHVwOwotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIHR1bmVyIHNldF90eXBlKCVkKSIsaGR3LT50dW5lcl90eXBlKTsKLQlpZiAoKChpbnQpKGhkdy0+dHVuZXJfdHlwZSkpIDwgMCkgcmV0dXJuOwotCi0Jc2V0dXAuYWRkciA9IEFERFJfVU5TRVQ7Ci0Jc2V0dXAudHlwZSA9IGhkdy0+dHVuZXJfdHlwZTsKLQlzZXR1cC5tb2RlX21hc2sgPSBUX1JBRElPIHwgVF9BTkFMT0dfVFY7Ci0JLyogV2UgbWF5IHJlYWxseSB3YW50IG1vZGVfbWFzayB0byBiZSBUX0FOQUxPR19UViBmb3Igbm93ICovCi0JcHZyMl9pMmNfY2xpZW50X2NtZChjdHh0LT5jbGllbnQsVFVORVJfU0VUX1RZUEVfQUREUiwmc2V0dXApOwotCWN0eHQtPnR5cGVfdXBkYXRlX2ZsID0gMDsKLX0KLQotCi1zdGF0aWMgaW50IHR1bmVyX2NoZWNrKHN0cnVjdCBwdnIyX3R1bmVyX2hhbmRsZXIgKmN0eHQpCi17Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjdHh0LT5oZHc7Ci0JaWYgKGhkdy0+dHVuZXJfdXBkYXRlZCkgY3R4dC0+dHlwZV91cGRhdGVfZmwgPSAhMDsKLQlyZXR1cm4gY3R4dC0+dHlwZV91cGRhdGVfZmwgIT0gMDsKLX0KLQotCi1zdGF0aWMgdm9pZCB0dW5lcl91cGRhdGUoc3RydWN0IHB2cjJfdHVuZXJfaGFuZGxlciAqY3R4dCkKLXsKLQlpZiAoY3R4dC0+dHlwZV91cGRhdGVfZmwpIHNldF90eXBlKGN0eHQpOwotfQotCi0KLXN0YXRpYyB2b2lkIHB2cjJfdHVuZXJfZGV0YWNoKHN0cnVjdCBwdnIyX3R1bmVyX2hhbmRsZXIgKmN0eHQpCi17Ci0JY3R4dC0+Y2xpZW50LT5oYW5kbGVyID0gTlVMTDsKLQlrZnJlZShjdHh0KTsKLX0KLQotCi1zdGF0aWMgdW5zaWduZWQgaW50IHB2cjJfdHVuZXJfZGVzY3JpYmUoc3RydWN0IHB2cjJfdHVuZXJfaGFuZGxlciAqY3R4dCxjaGFyICpidWYsdW5zaWduZWQgaW50IGNudCkKLXsKLQlyZXR1cm4gc2NucHJpbnRmKGJ1ZixjbnQsImhhbmRsZXI6IHB2cnVzYjItdHVuZXIiKTsKLX0KLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfaTJjX2hhbmRsZXJfZnVuY3Rpb25zIHR1bmVyX2Z1bmNzID0gewotCS5kZXRhY2ggPSAodm9pZCAoKikodm9pZCAqKSlwdnIyX3R1bmVyX2RldGFjaCwKLQkuY2hlY2sgPSAoaW50ICgqKSh2b2lkICopKXR1bmVyX2NoZWNrLAotCS51cGRhdGUgPSAodm9pZCAoKikodm9pZCAqKSl0dW5lcl91cGRhdGUsCi0JLmRlc2NyaWJlID0gKHVuc2lnbmVkIGludCAoKikodm9pZCAqLGNoYXIgKix1bnNpZ25lZCBpbnQpKXB2cjJfdHVuZXJfZGVzY3JpYmUsCi19OwotCi0KLWludCBwdnIyX2kyY190dW5lcl9zZXR1cChzdHJ1Y3QgcHZyMl9oZHcgKmhkdyxzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcCkKLXsKLQlzdHJ1Y3QgcHZyMl90dW5lcl9oYW5kbGVyICpjdHh0OwotCWlmIChjcC0+aGFuZGxlcikgcmV0dXJuIDA7Ci0KLQljdHh0ID0ga3phbGxvYyhzaXplb2YoKmN0eHQpLEdGUF9LRVJORUwpOwotCWlmICghY3R4dCkgcmV0dXJuIDA7Ci0KLQljdHh0LT5pMmNfaGFuZGxlci5mdW5jX2RhdGEgPSBjdHh0OwotCWN0eHQtPmkyY19oYW5kbGVyLmZ1bmNfdGFibGUgPSAmdHVuZXJfZnVuY3M7Ci0JY3R4dC0+dHlwZV91cGRhdGVfZmwgPSAhMDsKLQljdHh0LT5jbGllbnQgPSBjcDsKLQljdHh0LT5oZHcgPSBoZHc7Ci0JY3AtPmhhbmRsZXIgPSAmY3R4dC0+aTJjX2hhbmRsZXI7Ci0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgMHgleCB0dW5lciBoYW5kbGVyIHNldCB1cCIsCi0JCSAgIGNwLT5jbGllbnQtPmFkZHIpOwotCXJldHVybiAhMDsKLX0KLQotCi0KLQotLyoKLSAgU3R1ZmYgZm9yIEVtYWNzIHRvIHNlZSwgaW4gb3JkZXIgdG8gZW5jb3VyYWdlIGNvbnNpc3RlbnQgZWRpdGluZyBzdHlsZToKLSAgKioqIExvY2FsIFZhcmlhYmxlczogKioqCi0gICoqKiBtb2RlOiBjICoqKgotICAqKiogZmlsbC1jb2x1bW46IDcwICoqKgotICAqKiogdGFiLXdpZHRoOiA4ICoqKgotICAqKiogYy1iYXNpYy1vZmZzZXQ6IDggKioqCi0gICoqKiBFbmQ6ICoqKgotICAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdjRsMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdjRsMi5jCmluZGV4IDg3OGZkNTIuLjllMGYyYjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXY0bDIuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12NGwyLmMKQEAgLTkxLDcgKzkxLDcgQEAKIAkuY2FyZCAgICAgICAgICAgPSAiSGF1cHBhdWdlIFdpblRWIHB2ci11c2IyIiwKIAkuYnVzX2luZm8gICAgICAgPSAidXNiIiwKIAkudmVyc2lvbiAgICAgICAgPSBLRVJORUxfVkVSU0lPTigwLDgsMCksCi0JLmNhcGFiaWxpdGllcyAgID0gKFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfCBWNEwyX0NBUF9WQklfQ0FQVFVSRSB8CisJLmNhcGFiaWxpdGllcyAgID0gKFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAogCQkJICAgVjRMMl9DQVBfVFVORVIgfCBWNEwyX0NBUF9BVURJTyB8IFY0TDJfQ0FQX1JBRElPIHwKIAkJCSAgIFY0TDJfQ0FQX1JFQURXUklURSksCiAJLnJlc2VydmVkICAgICAgID0gezAsMCwwLDB9CkBAIC05NTIsMTAgKzk1Miw2IEBACiAJCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZykKIHsKIAotLyogVGVtcG9yYXJ5IGhhY2sgOiB1c2UgaXZ0diBhcGkgdW50aWwgYSB2NGwyIG9uZSBpcyBhdmFpbGFibGUuICovCi0jZGVmaW5lIElWVFZfSU9DX0dfQ09ERUMgICAgICAgIDB4RkZFRTc3MDMKLSNkZWZpbmUgSVZUVl9JT0NfU19DT0RFQyAgICAgICAgMHhGRkVFNzcwNAotCWlmIChjbWQgPT0gSVZUVl9JT0NfR19DT0RFQyB8fCBjbWQgPT0gSVZUVl9JT0NfU19DT0RFQykgcmV0dXJuIDA7CiAJcmV0dXJuIHZpZGVvX3VzZXJjb3B5KGZpbGUsIGNtZCwgYXJnLCBwdnIyX3Y0bDJfZG9faW9jdGwpOwogfQogCkBAIC0xMjY4LDggKzEyNjQsOSBAQAogCQlkaXAtPm1pbm9yX3R5cGUgPSBwdnIyX3Y0bF90eXBlX3ZpZGVvOwogCQlucl9wdHIgPSB2aWRlb19ucjsKIAkJaWYgKCFkaXAtPnN0cmVhbSkgewotCQkJZXJyKCJGYWlsZWQgdG8gc2V0IHVwIHB2cnVzYjIgdjRsIHZpZGVvIGRldiIKLQkJCSAgICAiIGR1ZSB0byBtaXNzaW5nIHN0cmVhbSBpbnN0YW5jZSIpOworCQkJcHJfZXJyKEtCVUlMRF9NT0ROQU1FCisJCQkJIjogRmFpbGVkIHRvIHNldCB1cCBwdnJ1c2IyIHY0bCB2aWRlbyBkZXYiCisJCQkJIiBkdWUgdG8gbWlzc2luZyBzdHJlYW0gaW5zdGFuY2VcbiIpOwogCQkJcmV0dXJuOwogCQl9CiAJCWJyZWFrOwpAQCAtMTI4Niw4ICsxMjgzLDggQEAKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJLyogQmFpbCBvdXQgKHRoaXMgc2hvdWxkIGJlIGltcG9zc2libGUpICovCi0JCWVycigiRmFpbGVkIHRvIHNldCB1cCBwdnJ1c2IyIHY0bCBkZXYiCi0JCSAgICAiIGR1ZSB0byB1bnJlY29nbml6ZWQgY29uZmlnIik7CisJCXByX2VycihLQlVJTERfTU9ETkFNRSAiOiBGYWlsZWQgdG8gc2V0IHVwIHB2cnVzYjIgdjRsIGRldiIKKwkJICAgICIgZHVlIHRvIHVucmVjb2duaXplZCBjb25maWdcbiIpOwogCQlyZXR1cm47CiAJfQogCkBAIC0xMzAzLDcgKzEzMDAsOCBAQAogCQkJCSAgIGRpcC0+djRsX3R5cGUsIG1pbmRldm51bSkgPCAwKSAmJgogCSAgICAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZkaXAtPmRldmJhc2UsCiAJCQkJICAgZGlwLT52NGxfdHlwZSwgLTEpIDwgMCkpIHsKLQkJZXJyKCJGYWlsZWQgdG8gcmVnaXN0ZXIgcHZydXNiMiB2NGwgZGV2aWNlIik7CisJCXByX2VycihLQlVJTERfTU9ETkFNRQorCQkJIjogRmFpbGVkIHRvIHJlZ2lzdGVyIHB2cnVzYjIgdjRsIGRldmljZVxuIik7CiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAicHZydXNiMjogcmVnaXN0ZXJlZCBkZXZpY2UgJXMldSBbJXNdXG4iLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdmlkZW8tdjRsLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12aWRlby12NGwuYwppbmRleCA0MDU5NjQ4Li5iMzg2MmY1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12aWRlby12NGwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi12aWRlby12NGwuYwpAQCAtMjgsNyArMjgsNyBAQAogKi8KIAogI2luY2x1ZGUgInB2cnVzYjItdmlkZW8tdjRsLmgiCi0jaW5jbHVkZSAicHZydXNiMi1pMmMtY21kLXY0bDIuaCIKKwogCiAKICNpbmNsdWRlICJwdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIgpAQCAtMzksMTUgKzM5LDYgQEAKICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KIAotc3RydWN0IHB2cjJfdjRsX2RlY29kZXIgewotCXN0cnVjdCBwdnIyX2kyY19oYW5kbGVyIGhhbmRsZXI7Ci0Jc3RydWN0IHB2cjJfZGVjb2Rlcl9jdHJsIGN0cmw7Ci0Jc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBwdnIyX2hkdyAqaGR3OwotCXVuc2lnbmVkIGxvbmcgc3RhbGVfbWFzazsKLX07Ci0KLQogc3RydWN0IHJvdXRpbmdfc2NoZW1lIHsKIAljb25zdCBpbnQgKmRlZjsKIAl1bnNpZ25lZCBpbnQgY250OwpAQCAtNjMsMTkwICs1NCw1MSBAQAogCVtQVlIyX0NWQUxfSU5QVVRfU1ZJREVPXSA9ICBTQUE3MTE1X1NWSURFTzIsCiB9OwogCitzdGF0aWMgY29uc3QgaW50IHJvdXRpbmdfc2NoZW1lMVtdID0geworCVtQVlIyX0NWQUxfSU5QVVRfVFZdID0gU0FBNzExNV9DT01QT1NJVEU0LAorCVtQVlIyX0NWQUxfSU5QVVRfUkFESU9dID0gU0FBNzExNV9DT01QT1NJVEU1LAorCVtQVlIyX0NWQUxfSU5QVVRfQ09NUE9TSVRFXSA9IFNBQTcxMTVfQ09NUE9TSVRFMywKKwlbUFZSMl9DVkFMX0lOUFVUX1NWSURFT10gPSAgU0FBNzExNV9TVklERU8yLCAvKiBvciBTVklERU8wLCBpdCBzZWVtcyAqLworfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCByb3V0aW5nX3NjaGVtZSByb3V0aW5nX3NjaGVtZXNbXSA9IHsKIAlbUFZSMl9ST1VUSU5HX1NDSEVNRV9IQVVQUEFVR0VdID0gewogCQkuZGVmID0gcm91dGluZ19zY2hlbWUwLAogCQkuY250ID0gQVJSQVlfU0laRShyb3V0aW5nX3NjaGVtZTApLAogCX0sCisJW1BWUjJfUk9VVElOR19TQ0hFTUVfT05BSVJdID0geworCQkuZGVmID0gcm91dGluZ19zY2hlbWUxLAorCQkuY250ID0gQVJSQVlfU0laRShyb3V0aW5nX3NjaGVtZTEpLAorCX0sCiB9OwogCi1zdGF0aWMgdm9pZCBzZXRfaW5wdXQoc3RydWN0IHB2cjJfdjRsX2RlY29kZXIgKmN0eHQpCit2b2lkIHB2cjJfc2FhNzExNV9zdWJkZXZfdXBkYXRlKHN0cnVjdCBwdnIyX2hkdyAqaGR3LCBzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewotCXN0cnVjdCBwdnIyX2hkdyAqaGR3ID0gY3R4dC0+aGR3OwotCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7Ci0JY29uc3Qgc3RydWN0IHJvdXRpbmdfc2NoZW1lICpzcDsKLQl1bnNpZ25lZCBpbnQgc2lkID0gaGR3LT5oZHdfZGVzYy0+c2lnbmFsX3JvdXRpbmdfc2NoZW1lOwotCi0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgdjRsMiBzZXRfaW5wdXQoJWQpIixoZHctPmlucHV0X3ZhbCk7Ci0KLQlpZiAoKHNpZCA8IEFSUkFZX1NJWkUocm91dGluZ19zY2hlbWVzKSkgJiYKLQkgICAgKChzcCA9IHJvdXRpbmdfc2NoZW1lcyArIHNpZCkgIT0gTlVMTCkgJiYKLQkgICAgKGhkdy0+aW5wdXRfdmFsID49IDApICYmCi0JICAgIChoZHctPmlucHV0X3ZhbCA8IHNwLT5jbnQpKSB7Ci0JCXJvdXRlLmlucHV0ID0gc3AtPmRlZltoZHctPmlucHV0X3ZhbF07Ci0JfSBlbHNlIHsKLQkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0VSUk9SX0xFR1MsCi0JCQkgICAiKioqIFdBUk5JTkcgKioqIGkyYyB2NGwyIHNldF9pbnB1dDoiCi0JCQkgICAiIEludmFsaWQgcm91dGluZyBzY2hlbWUgKCV1KSBhbmQvb3IgaW5wdXQgKCVkKSIsCi0JCQkgICBzaWQsaGR3LT5pbnB1dF92YWwpOwotCQlyZXR1cm47Ci0JfQotCi0Jcm91dGUub3V0cHV0ID0gMDsKLQlwdnIyX2kyY19jbGllbnRfY21kKGN0eHQtPmNsaWVudCxWSURJT0NfSU5UX1NfVklERU9fUk9VVElORywmcm91dGUpOwotfQotCi0KLXN0YXRpYyBpbnQgY2hlY2tfaW5wdXQoc3RydWN0IHB2cjJfdjRsX2RlY29kZXIgKmN0eHQpCi17Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjdHh0LT5oZHc7Ci0JcmV0dXJuIGhkdy0+aW5wdXRfZGlydHkgIT0gMDsKLX0KLQotCi1zdGF0aWMgdm9pZCBzZXRfYXVkaW8oc3RydWN0IHB2cjJfdjRsX2RlY29kZXIgKmN0eHQpCi17Ci0JdTMyIHZhbDsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGN0eHQtPmhkdzsKLQotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIHY0bDIgc2V0X2F1ZGlvICVkIiwKLQkJICAgaGR3LT5zcmF0ZV92YWwpOwotCXN3aXRjaCAoaGR3LT5zcmF0ZV92YWwpIHsKLQlkZWZhdWx0OgotCWNhc2UgVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDgwMDA6Ci0JCXZhbCA9IDQ4MDAwOwotCQlicmVhazsKLQljYXNlIFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ0MTAwOgotCQl2YWwgPSA0NDEwMDsKLQkJYnJlYWs7Ci0JY2FzZSBWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV8zMjAwMDoKLQkJdmFsID0gMzIwMDA7Ci0JCWJyZWFrOwotCX0KLQlwdnIyX2kyY19jbGllbnRfY21kKGN0eHQtPmNsaWVudCxWSURJT0NfSU5UX0FVRElPX0NMT0NLX0ZSRVEsJnZhbCk7Ci19Ci0KLQotc3RhdGljIGludCBjaGVja19hdWRpbyhzdHJ1Y3QgcHZyMl92NGxfZGVjb2RlciAqY3R4dCkKLXsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGN0eHQtPmhkdzsKLQlyZXR1cm4gaGR3LT5zcmF0ZV9kaXJ0eSAhPSAwOwotfQotCi0KLXN0cnVjdCBwdnIyX3Y0bF9kZWNvZGVyX29wcyB7Ci0Jdm9pZCAoKnVwZGF0ZSkoc3RydWN0IHB2cjJfdjRsX2RlY29kZXIgKik7Ci0JaW50ICgqY2hlY2spKHN0cnVjdCBwdnIyX3Y0bF9kZWNvZGVyICopOwotfTsKLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfdjRsX2RlY29kZXJfb3BzIGRlY29kZXJfb3BzW10gPSB7Ci0JeyAudXBkYXRlID0gc2V0X2lucHV0LCAuY2hlY2sgPSBjaGVja19pbnB1dH0sCi0JeyAudXBkYXRlID0gc2V0X2F1ZGlvLCAuY2hlY2sgPSBjaGVja19hdWRpb30sCi19OwotCi0KLXN0YXRpYyB2b2lkIGRlY29kZXJfZGV0YWNoKHN0cnVjdCBwdnIyX3Y0bF9kZWNvZGVyICpjdHh0KQotewotCWN0eHQtPmNsaWVudC0+aGFuZGxlciA9IE5VTEw7Ci0JcHZyMl9oZHdfc2V0X2RlY29kZXIoY3R4dC0+aGR3LE5VTEwpOwotCWtmcmVlKGN0eHQpOwotfQotCi0KLXN0YXRpYyBpbnQgZGVjb2Rlcl9jaGVjayhzdHJ1Y3QgcHZyMl92NGxfZGVjb2RlciAqY3R4dCkKLXsKLQl1bnNpZ25lZCBsb25nIG1zazsKLQl1bnNpZ25lZCBpbnQgaWR4OwotCi0JZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKGRlY29kZXJfb3BzKTsgaWR4KyspIHsKLQkJbXNrID0gMSA8PCBpZHg7Ci0JCWlmIChjdHh0LT5zdGFsZV9tYXNrICYgbXNrKSBjb250aW51ZTsKLQkJaWYgKGRlY29kZXJfb3BzW2lkeF0uY2hlY2soY3R4dCkpIHsKLQkJCWN0eHQtPnN0YWxlX21hc2sgfD0gbXNrOworCWlmIChoZHctPmlucHV0X2RpcnR5IHx8IGhkdy0+Zm9yY2VfZGlydHkpIHsKKwkJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKKwkJY29uc3Qgc3RydWN0IHJvdXRpbmdfc2NoZW1lICpzcDsKKwkJdW5zaWduZWQgaW50IHNpZCA9IGhkdy0+aGR3X2Rlc2MtPnNpZ25hbF9yb3V0aW5nX3NjaGVtZTsKKwkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCAic3ViZGV2IHY0bDIgc2V0X2lucHV0KCVkKSIsCisJCQkgICBoZHctPmlucHV0X3ZhbCk7CisJCWlmICgoc2lkIDwgQVJSQVlfU0laRShyb3V0aW5nX3NjaGVtZXMpKSAmJgorCQkgICAgKChzcCA9IHJvdXRpbmdfc2NoZW1lcyArIHNpZCkgIT0gTlVMTCkgJiYKKwkJICAgIChoZHctPmlucHV0X3ZhbCA+PSAwKSAmJgorCQkgICAgKGhkdy0+aW5wdXRfdmFsIDwgc3AtPmNudCkpIHsKKwkJCXJvdXRlLmlucHV0ID0gc3AtPmRlZltoZHctPmlucHV0X3ZhbF07CisJCX0gZWxzZSB7CisJCQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfRVJST1JfTEVHUywKKwkJCQkgICAiKioqIFdBUk5JTkcgKioqIHN1YmRldiB2NGwyIHNldF9pbnB1dDoiCisJCQkJICAgIiBJbnZhbGlkIHJvdXRpbmcgc2NoZW1lICgldSkiCisJCQkJICAgIiBhbmQvb3IgaW5wdXQgKCVkKSIsCisJCQkJICAgc2lkLCBoZHctPmlucHV0X3ZhbCk7CisJCQlyZXR1cm47CiAJCX0KLQl9Ci0JcmV0dXJuIGN0eHQtPnN0YWxlX21hc2sgIT0gMDsKLX0KLQotCi1zdGF0aWMgdm9pZCBkZWNvZGVyX3VwZGF0ZShzdHJ1Y3QgcHZyMl92NGxfZGVjb2RlciAqY3R4dCkKLXsKLQl1bnNpZ25lZCBsb25nIG1zazsKLQl1bnNpZ25lZCBpbnQgaWR4OwotCi0JZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKGRlY29kZXJfb3BzKTsgaWR4KyspIHsKLQkJbXNrID0gMSA8PCBpZHg7Ci0JCWlmICghKGN0eHQtPnN0YWxlX21hc2sgJiBtc2spKSBjb250aW51ZTsKLQkJY3R4dC0+c3RhbGVfbWFzayAmPSB+bXNrOwotCQlkZWNvZGVyX29wc1tpZHhdLnVwZGF0ZShjdHh0KTsKKwkJcm91dGUub3V0cHV0ID0gMDsKKwkJc2QtPm9wcy0+dmlkZW8tPnNfcm91dGluZyhzZCwgJnJvdXRlKTsKIAl9CiB9CiAKIAotc3RhdGljIGludCBkZWNvZGVyX2RldGVjdChzdHJ1Y3QgcHZyMl9pMmNfY2xpZW50ICpjcCkKLXsKLQkvKiBBdHRlbXB0IHRvIHF1ZXJ5IHRoZSBkZWNvZGVyIC0gbGV0J3Mgc2VlIGlmIGl0IHdpbGwgYW5zd2VyICovCi0Jc3RydWN0IHY0bDJfdHVuZXIgdnQ7Ci0JaW50IHJldDsKLQotCW1lbXNldCgmdnQsMCxzaXplb2YodnQpKTsKLQlyZXQgPSBwdnIyX2kyY19jbGllbnRfY21kKGNwLFZJRElPQ19HX1RVTkVSLCZ2dCk7Ci0JcmV0dXJuIHJldCA9PSAwOyAvKiBSZXR1cm4gdHJ1ZSBpZiBpdCBhbnN3ZXJlZCAqLwotfQotCi0KLXN0YXRpYyB2b2lkIGRlY29kZXJfZW5hYmxlKHN0cnVjdCBwdnIyX3Y0bF9kZWNvZGVyICpjdHh0LGludCBmbCkKLXsKLQlwdnIyX3RyYWNlKFBWUjJfVFJBQ0VfQ0hJUFMsImkyYyB2NGwyIGRlY29kZXJfZW5hYmxlKCVkKSIsZmwpOwotCXB2cjJfdjRsMl9jbWRfc3RyZWFtKGN0eHQtPmNsaWVudCxmbCk7Ci19Ci0KLQotc3RhdGljIHVuc2lnbmVkIGludCBkZWNvZGVyX2Rlc2NyaWJlKHN0cnVjdCBwdnIyX3Y0bF9kZWNvZGVyICpjdHh0LGNoYXIgKmJ1Zix1bnNpZ25lZCBpbnQgY250KQotewotCXJldHVybiBzY25wcmludGYoYnVmLGNudCwiaGFuZGxlcjogcHZydXNiMi12aWRlby12NGwiKTsKLX0KLQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHB2cjJfaTJjX2hhbmRsZXJfZnVuY3Rpb25zIGhmdW5jcyA9IHsKLQkuZGV0YWNoID0gKHZvaWQgKCopKHZvaWQgKikpZGVjb2Rlcl9kZXRhY2gsCi0JLmNoZWNrID0gKGludCAoKikodm9pZCAqKSlkZWNvZGVyX2NoZWNrLAotCS51cGRhdGUgPSAodm9pZCAoKikodm9pZCAqKSlkZWNvZGVyX3VwZGF0ZSwKLQkuZGVzY3JpYmUgPSAodW5zaWduZWQgaW50ICgqKSh2b2lkICosY2hhciAqLHVuc2lnbmVkIGludCkpZGVjb2Rlcl9kZXNjcmliZSwKLX07Ci0KLQotaW50IHB2cjJfaTJjX2RlY29kZXJfdjRsX3NldHVwKHN0cnVjdCBwdnIyX2hkdyAqaGR3LAotCQkJICAgICAgIHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKmNwKQotewotCXN0cnVjdCBwdnIyX3Y0bF9kZWNvZGVyICpjdHh0OwotCi0JaWYgKGhkdy0+ZGVjb2Rlcl9jdHJsKSByZXR1cm4gMDsKLQlpZiAoY3AtPmhhbmRsZXIpIHJldHVybiAwOwotCWlmICghZGVjb2Rlcl9kZXRlY3QoY3ApKSByZXR1cm4gMDsKLQotCWN0eHQgPSBremFsbG9jKHNpemVvZigqY3R4dCksR0ZQX0tFUk5FTCk7Ci0JaWYgKCFjdHh0KSByZXR1cm4gMDsKLQotCWN0eHQtPmhhbmRsZXIuZnVuY19kYXRhID0gY3R4dDsKLQljdHh0LT5oYW5kbGVyLmZ1bmNfdGFibGUgPSAmaGZ1bmNzOwotCWN0eHQtPmN0cmwuY3R4dCA9IGN0eHQ7Ci0JY3R4dC0+Y3RybC5kZXRhY2ggPSAodm9pZCAoKikodm9pZCAqKSlkZWNvZGVyX2RldGFjaDsKLQljdHh0LT5jdHJsLmVuYWJsZSA9ICh2b2lkICgqKSh2b2lkICosaW50KSlkZWNvZGVyX2VuYWJsZTsKLQljdHh0LT5jbGllbnQgPSBjcDsKLQljdHh0LT5oZHcgPSBoZHc7Ci0JY3R4dC0+c3RhbGVfbWFzayA9ICgxIDw8IEFSUkFZX1NJWkUoZGVjb2Rlcl9vcHMpKSAtIDE7Ci0JcHZyMl9oZHdfc2V0X2RlY29kZXIoaGR3LCZjdHh0LT5jdHJsKTsKLQljcC0+aGFuZGxlciA9ICZjdHh0LT5oYW5kbGVyOwotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIDB4JXggc2FhNzExeCBWNEwyIGhhbmRsZXIgc2V0IHVwIiwKLQkJICAgY3AtPmNsaWVudC0+YWRkcik7Ci0JcmV0dXJuICEwOwotfQotCi0KLQotCiAvKgogICBTdHVmZiBmb3IgRW1hY3MgdG8gc2VlLCBpbiBvcmRlciB0byBlbmNvdXJhZ2UgY29uc2lzdGVudCBlZGl0aW5nIHN0eWxlOgogICAqKiogTG9jYWwgVmFyaWFibGVzOiAqKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXZpZGVvLXY0bC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdmlkZW8tdjRsLmgKaW5kZXggNGZmNWI4OS4uM2IwYmQ1ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdmlkZW8tdjRsLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItdmlkZW8tdjRsLmgKQEAgLTMyLDExICszMiw4IEBACiAqLwogCiAKLQotI2luY2x1ZGUgInB2cnVzYjItaTJjLWNvcmUuaCIKLQotaW50IHB2cjJfaTJjX2RlY29kZXJfdjRsX3NldHVwKHN0cnVjdCBwdnIyX2hkdyAqLHN0cnVjdCBwdnIyX2kyY19jbGllbnQgKik7Ci0KKyNpbmNsdWRlICJwdnJ1c2IyLWhkdy1pbnRlcm5hbC5oIgordm9pZCBwdnIyX3NhYTcxMTVfc3ViZGV2X3VwZGF0ZShzdHJ1Y3QgcHZyMl9oZHcgKiwgc3RydWN0IHY0bDJfc3ViZGV2ICopOwogCiAjZW5kaWYgLyogX19QVlJVU0IyX1ZJREVPX1Y0TF9IICovCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXdtODc3NS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItd204Nzc1LmMKaW5kZXggZjZmY2YwYS4uMTY3MGFhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItd204Nzc1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wdnJ1c2IyL3B2cnVzYjItd204Nzc1LmMKQEAgLTI3LDcgKzI3LDYgQEAKICovCiAKICNpbmNsdWRlICJwdnJ1c2IyLXdtODc3NS5oIgotI2luY2x1ZGUgInB2cnVzYjItaTJjLWNtZC12NGwyLmgiCiAKIAogI2luY2x1ZGUgInB2cnVzYjItaGR3LWludGVybmFsLmgiCkBAIC0zNywxMjggKzM2LDMxIEBACiAjaW5jbHVkZSA8bGludXgvZXJybm8uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKLXN0cnVjdCBwdnIyX3Y0bF93bTg3NzUgewotCXN0cnVjdCBwdnIyX2kyY19oYW5kbGVyIGhhbmRsZXI7Ci0Jc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY2xpZW50OwotCXN0cnVjdCBwdnIyX2hkdyAqaGR3OwotCXVuc2lnbmVkIGxvbmcgc3RhbGVfbWFzazsKLX07Ci0KLQotc3RhdGljIHZvaWQgc2V0X2lucHV0KHN0cnVjdCBwdnIyX3Y0bF93bTg3NzUgKmN0eHQpCit2b2lkIHB2cjJfd204Nzc1X3N1YmRldl91cGRhdGUoc3RydWN0IHB2cjJfaGR3ICpoZHcsIHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7Ci0Jc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKLQlzdHJ1Y3QgcHZyMl9oZHcgKmhkdyA9IGN0eHQtPmhkdzsKKwlpZiAoaGR3LT5pbnB1dF9kaXJ0eSB8fCBoZHctPmZvcmNlX2RpcnR5KSB7CisJCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGU7CiAKLQltZW1zZXQoJnJvdXRlLDAsc2l6ZW9mKHJvdXRlKSk7CisJCW1lbXNldCgmcm91dGUsIDAsIHNpemVvZihyb3V0ZSkpOwogCi0Jc3dpdGNoKGhkdy0+aW5wdXRfdmFsKSB7Ci0JY2FzZSBQVlIyX0NWQUxfSU5QVVRfUkFESU86Ci0JCXJvdXRlLmlucHV0ID0gMTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJLyogQWxsIG90aGVyIGNhc2VzIGp1c3QgdXNlIHRoZSBzZWNvbmQgaW5wdXQgKi8KLQkJcm91dGUuaW5wdXQgPSAyOwotCQlicmVhazsKLQl9Ci0JcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCJpMmMgd204Nzc1IHNldF9pbnB1dCh2YWw9JWQgcm91dGU9MHgleCkiLAotCQkgICBoZHctPmlucHV0X3ZhbCxyb3V0ZS5pbnB1dCk7Ci0KLQlwdnIyX2kyY19jbGllbnRfY21kKGN0eHQtPmNsaWVudCxWSURJT0NfSU5UX1NfQVVESU9fUk9VVElORywmcm91dGUpOwotfQotCi1zdGF0aWMgaW50IGNoZWNrX2lucHV0KHN0cnVjdCBwdnIyX3Y0bF93bTg3NzUgKmN0eHQpCi17Ci0Jc3RydWN0IHB2cjJfaGR3ICpoZHcgPSBjdHh0LT5oZHc7Ci0JcmV0dXJuIGhkdy0+aW5wdXRfZGlydHkgIT0gMDsKLX0KLQotCi1zdHJ1Y3QgcHZyMl92NGxfd204Nzc1X29wcyB7Ci0Jdm9pZCAoKnVwZGF0ZSkoc3RydWN0IHB2cjJfdjRsX3dtODc3NSAqKTsKLQlpbnQgKCpjaGVjaykoc3RydWN0IHB2cjJfdjRsX3dtODc3NSAqKTsKLX07Ci0KLQotc3RhdGljIGNvbnN0IHN0cnVjdCBwdnIyX3Y0bF93bTg3NzVfb3BzIHdtODc3NV9vcHNbXSA9IHsKLQl7IC51cGRhdGUgPSBzZXRfaW5wdXQsIC5jaGVjayA9IGNoZWNrX2lucHV0fSwKLX07Ci0KLQotc3RhdGljIHVuc2lnbmVkIGludCB3bTg3NzVfZGVzY3JpYmUoc3RydWN0IHB2cjJfdjRsX3dtODc3NSAqY3R4dCwKLQkJCQkgICAgIGNoYXIgKmJ1Zix1bnNpZ25lZCBpbnQgY250KQotewotCXJldHVybiBzY25wcmludGYoYnVmLGNudCwiaGFuZGxlcjogcHZydXNiMi13bTg3NzUiKTsKLX0KLQotCi1zdGF0aWMgdm9pZCB3bTg3NzVfZGV0YWNoKHN0cnVjdCBwdnIyX3Y0bF93bTg3NzUgKmN0eHQpCi17Ci0JY3R4dC0+Y2xpZW50LT5oYW5kbGVyID0gTlVMTDsKLQlrZnJlZShjdHh0KTsKLX0KLQotCi1zdGF0aWMgaW50IHdtODc3NV9jaGVjayhzdHJ1Y3QgcHZyMl92NGxfd204Nzc1ICpjdHh0KQotewotCXVuc2lnbmVkIGxvbmcgbXNrOwotCXVuc2lnbmVkIGludCBpZHg7Ci0KLQlmb3IgKGlkeCA9IDA7IGlkeCA8IEFSUkFZX1NJWkUod204Nzc1X29wcyk7IGlkeCsrKSB7Ci0JCW1zayA9IDEgPDwgaWR4OwotCQlpZiAoY3R4dC0+c3RhbGVfbWFzayAmIG1zaykgY29udGludWU7Ci0JCWlmICh3bTg3NzVfb3BzW2lkeF0uY2hlY2soY3R4dCkpIHsKLQkJCWN0eHQtPnN0YWxlX21hc2sgfD0gbXNrOworCQlzd2l0Y2ggKGhkdy0+aW5wdXRfdmFsKSB7CisJCWNhc2UgUFZSMl9DVkFMX0lOUFVUX1JBRElPOgorCQkJcm91dGUuaW5wdXQgPSAxOworCQkJYnJlYWs7CisJCWRlZmF1bHQ6CisJCQkvKiBBbGwgb3RoZXIgY2FzZXMganVzdCB1c2UgdGhlIHNlY29uZCBpbnB1dCAqLworCQkJcm91dGUuaW5wdXQgPSAyOworCQkJYnJlYWs7CiAJCX0KLQl9Ci0JcmV0dXJuIGN0eHQtPnN0YWxlX21hc2sgIT0gMDsKLX0KKwkJcHZyMl90cmFjZShQVlIyX1RSQUNFX0NISVBTLCAic3ViZGV2IHdtODc3NSIKKwkJCSAgICIgc2V0X2lucHV0KHZhbD0lZCByb3V0ZT0weCV4KSIsCisJCQkgICBoZHctPmlucHV0X3ZhbCwgcm91dGUuaW5wdXQpOwogCi0KLXN0YXRpYyB2b2lkIHdtODc3NV91cGRhdGUoc3RydWN0IHB2cjJfdjRsX3dtODc3NSAqY3R4dCkKLXsKLQl1bnNpZ25lZCBsb25nIG1zazsKLQl1bnNpZ25lZCBpbnQgaWR4OwotCi0JZm9yIChpZHggPSAwOyBpZHggPCBBUlJBWV9TSVpFKHdtODc3NV9vcHMpOyBpZHgrKykgewotCQltc2sgPSAxIDw8IGlkeDsKLQkJaWYgKCEoY3R4dC0+c3RhbGVfbWFzayAmIG1zaykpIGNvbnRpbnVlOwotCQljdHh0LT5zdGFsZV9tYXNrICY9IH5tc2s7Ci0JCXdtODc3NV9vcHNbaWR4XS51cGRhdGUoY3R4dCk7CisJCXNkLT5vcHMtPmF1ZGlvLT5zX3JvdXRpbmcoc2QsICZyb3V0ZSk7CiAJfQogfQogCiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgcHZyMl9pMmNfaGFuZGxlcl9mdW5jdGlvbnMgaGZ1bmNzID0gewotCS5kZXRhY2ggPSAodm9pZCAoKikodm9pZCAqKSl3bTg3NzVfZGV0YWNoLAotCS5jaGVjayA9IChpbnQgKCopKHZvaWQgKikpd204Nzc1X2NoZWNrLAotCS51cGRhdGUgPSAodm9pZCAoKikodm9pZCAqKSl3bTg3NzVfdXBkYXRlLAotCS5kZXNjcmliZSA9ICh1bnNpZ25lZCBpbnQgKCopKHZvaWQgKixjaGFyICosdW5zaWduZWQgaW50KSl3bTg3NzVfZGVzY3JpYmUsCi19OwotCi0KLWludCBwdnIyX2kyY193bTg3NzVfc2V0dXAoc3RydWN0IHB2cjJfaGR3ICpoZHcsc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqY3ApCi17Ci0Jc3RydWN0IHB2cjJfdjRsX3dtODc3NSAqY3R4dDsKLQotCWlmIChjcC0+aGFuZGxlcikgcmV0dXJuIDA7Ci0KLQljdHh0ID0ga3phbGxvYyhzaXplb2YoKmN0eHQpLEdGUF9LRVJORUwpOwotCWlmICghY3R4dCkgcmV0dXJuIDA7Ci0KLQljdHh0LT5oYW5kbGVyLmZ1bmNfZGF0YSA9IGN0eHQ7Ci0JY3R4dC0+aGFuZGxlci5mdW5jX3RhYmxlID0gJmhmdW5jczsKLQljdHh0LT5jbGllbnQgPSBjcDsKLQljdHh0LT5oZHcgPSBoZHc7Ci0JY3R4dC0+c3RhbGVfbWFzayA9ICgxIDw8IEFSUkFZX1NJWkUod204Nzc1X29wcykpIC0gMTsKLQljcC0+aGFuZGxlciA9ICZjdHh0LT5oYW5kbGVyOwotCXB2cjJfdHJhY2UoUFZSMl9UUkFDRV9DSElQUywiaTJjIDB4JXggd204Nzc1IFY0TDIgaGFuZGxlciBzZXQgdXAiLAotCQkgICBjcC0+Y2xpZW50LT5hZGRyKTsKLQlyZXR1cm4gITA7Ci19Ci0KLQotCiAKIC8qCiAgIFN0dWZmIGZvciBFbWFjcyB0byBzZWUsIGluIG9yZGVyIHRvIGVuY291cmFnZSBjb25zaXN0ZW50IGVkaXRpbmcgc3R5bGU6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B2cnVzYjIvcHZydXNiMi13bTg3NzUuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXdtODc3NS5oCmluZGV4IDgwNzA5MDkuLjA1NzdiYzcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXdtODc3NS5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHZydXNiMi9wdnJ1c2IyLXdtODc3NS5oCkBAIC0zNCw5ICszNCw5IEBACiAKIAogCi0jaW5jbHVkZSAicHZydXNiMi1pMmMtY29yZS5oIgorI2luY2x1ZGUgInB2cnVzYjItaGR3LWludGVybmFsLmgiCiAKLWludCBwdnIyX2kyY193bTg3NzVfc2V0dXAoc3RydWN0IHB2cjJfaGR3ICosc3RydWN0IHB2cjJfaTJjX2NsaWVudCAqKTsKK3ZvaWQgcHZyMl93bTg3NzVfc3ViZGV2X3VwZGF0ZShzdHJ1Y3QgcHZyMl9oZHcgKiwgc3RydWN0IHY0bDJfc3ViZGV2ICpzZCk7CiAKIAogI2VuZGlmIC8qIF9fUFZSVVNCMl9XTTg3NzVfSCAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvS2NvbmZpZyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL0tjb25maWcKaW5kZXggNzI5OGNmMi4uOGI5ZjBhYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvS2NvbmZpZworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9LY29uZmlnCkBAIC0zNSwzICszNSwxMyBAQAogCSAgU2F5IFkgaGVyZSBpbiBvcmRlciB0byBoYXZlIHRoZSBwd2MgZHJpdmVyIGdlbmVyYXRlIHZlcmJvc2UgZGVidWdnaW5nCiAJICBtZXNzYWdlcy4KIAkgIEEgc3BlY2lhbCBtb2R1bGUgb3B0aW9ucyAndHJhY2UnIGlzIHVzZWQgdG8gY29udHJvbCB0aGUgdmVyYm9zaXR5LgorCitjb25maWcgVVNCX1BXQ19JTlBVVF9FVkRFVgorCWJvb2wgIlVTQiBQaGlsaXBzIENhbWVyYXMgaW5wdXQgZXZlbnRzIGRldmljZSBzdXBwb3J0IgorCWRlZmF1bHQgeQorCWRlcGVuZHMgb24gVVNCX1BXQyAmJiBJTlBVVAorCS0tLWhlbHAtLS0KKwkgIFRoaXMgb3B0aW9uIG1ha2VzIFVTQiBQaGlsaXBzIGNhbWVyYXMgcmVnaXN0ZXIgdGhlIHNuYXBzaG90IGJ1dHRvbiBhcworCSAgYW4gaW5wdXQgZGV2aWNlIHRvIHJlcG9ydCBidXR0b24gZXZlbnRzLgorCisJICBJZiB5b3UgYXJlIGluIGRvdWJ0LCBzYXkgWS4KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy1pZi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMKaW5kZXggMGQ4MTAxOC4uN2M1NDJjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9wd2MvcHdjLWlmLmMKQEAgLTUzLDYgKzUzLDcgQEAKICAgIC0gWGF2aWVyIFJvY2hlOiBRdWlja0NhbSBQcm8gNDAwMCBJRAogICAgLSBKZW5zIEtudWRzZW46IFF1aWNrQ2FtIFpvb20gSUQKICAgIC0gSi4gRGViZXJ0OiBRdWlja0NhbSBmb3IgTm90ZWJvb2tzIElECisgICAtIFBoYW0gVGhhbmggTmFtOiB3ZWJjYW0gc25hcHNob3QgYnV0dG9uIGFzIGFuIGV2ZW50IGlucHV0IGRldmljZQogKi8KIAogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CkBAIC02MSw2ICs2Miw5IEBACiAjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KKyNpZmRlZiBDT05GSUdfVVNCX1BXQ19JTlBVVF9FVkRFVgorI2luY2x1ZGUgPGxpbnV4L3VzYi9pbnB1dC5oPgorI2VuZGlmCiAjaW5jbHVkZSA8bGludXgvdm1hbGxvYy5oPgogI2luY2x1ZGUgPGFzbS9pby5oPgogCkBAIC01ODYsNiArNTkwLDIzIEBACiAJCQkJcGRldi0+dmZyYW1lX2NvdW50KTsKIH0KIAorc3RhdGljIHZvaWQgcHdjX3NuYXBzaG90X2J1dHRvbihzdHJ1Y3QgcHdjX2RldmljZSAqcGRldiwgaW50IGRvd24pCit7CisJaWYgKGRvd24pIHsKKwkJUFdDX1RSQUNFKCJTbmFwc2hvdCBidXR0b24gcHJlc3NlZC5cbiIpOworCQlwZGV2LT5zbmFwc2hvdF9idXR0b25fc3RhdHVzID0gMTsKKwl9IGVsc2UgeworCQlQV0NfVFJBQ0UoIlNuYXBzaG90IGJ1dHRvbiByZWxlYXNlZC5cbiIpOworCX0KKworI2lmZGVmIENPTkZJR19VU0JfUFdDX0lOUFVUX0VWREVWCisJaWYgKHBkZXYtPmJ1dHRvbl9kZXYpIHsKKwkJaW5wdXRfcmVwb3J0X2tleShwZGV2LT5idXR0b25fZGV2LCBCVE5fMCwgZG93bik7CisJCWlucHV0X3N5bmMocGRldi0+YnV0dG9uX2Rldik7CisJfQorI2VuZGlmCit9CisKIHN0YXRpYyBpbnQgcHdjX3Jjdl9zaG9ydF9wYWNrZXQoc3RydWN0IHB3Y19kZXZpY2UgKnBkZXYsIGNvbnN0IHN0cnVjdCBwd2NfZnJhbWVfYnVmICpmYnVmKQogewogCWludCBhd2FrZSA9IDA7CkBAIC02MDMsMTMgKzYyNCw3IEBACiAJCQlwZGV2LT52ZnJhbWVzX2Vycm9yKys7CiAJCX0KIAkJaWYgKChwdHJbMF0gXiBwZGV2LT52bWlycm9yKSAmIDB4MDEpIHsKLQkJCWlmIChwdHJbMF0gJiAweDAxKSB7Ci0JCQkJcGRldi0+c25hcHNob3RfYnV0dG9uX3N0YXR1cyA9IDE7Ci0JCQkJUFdDX1RSQUNFKCJTbmFwc2hvdCBidXR0b24gcHJlc3NlZC5cbiIpOwotCQkJfQotCQkJZWxzZSB7Ci0JCQkJUFdDX1RSQUNFKCJTbmFwc2hvdCBidXR0b24gcmVsZWFzZWQuXG4iKTsKLQkJCX0KKwkJCXB3Y19zbmFwc2hvdF9idXR0b24ocGRldiwgcHRyWzBdICYgMHgwMSk7CiAJCX0KIAkJaWYgKChwdHJbMF0gXiBwZGV2LT52bWlycm9yKSAmIDB4MDIpIHsKIAkJCWlmIChwdHJbMF0gJiAweDAyKQpAQCAtNjMzLDEyICs2NDgsNyBAQAogCWVsc2UgaWYgKHBkZXYtPnR5cGUgPT0gNzQwIHx8IHBkZXYtPnR5cGUgPT0gNzIwKSB7CiAJCXVuc2lnbmVkIGNoYXIgKnB0ciA9ICh1bnNpZ25lZCBjaGFyICopZmJ1Zi0+ZGF0YTsKIAkJaWYgKChwdHJbMF0gXiBwZGV2LT52bWlycm9yKSAmIDB4MDEpIHsKLQkJCWlmIChwdHJbMF0gJiAweDAxKSB7Ci0JCQkJcGRldi0+c25hcHNob3RfYnV0dG9uX3N0YXR1cyA9IDE7Ci0JCQkJUFdDX1RSQUNFKCJTbmFwc2hvdCBidXR0b24gcHJlc3NlZC5cbiIpOwotCQkJfQotCQkJZWxzZQotCQkJCVBXQ19UUkFDRSgiU25hcHNob3QgYnV0dG9uIHJlbGVhc2VkLlxuIik7CisJCQlwd2Nfc25hcHNob3RfYnV0dG9uKHBkZXYsIHB0clswXSAmIDB4MDEpOwogCQl9CiAJCXBkZXYtPnZtaXJyb3IgPSBwdHJbMF0gJiAweDAzOwogCX0KQEAgLTExMTUsNiArMTEyNSw3IEBACiAJfQogCiAJbXV0ZXhfbG9jaygmcGRldi0+bW9kbG9jayk7CisJcHdjX2NvbnN0cnVjdChwZGV2KTsgLyogc2V0IG1pbi9tYXggc2l6ZXMgY29ycmVjdCAqLwogCWlmICghcGRldi0+dXNiX2luaXQpIHsKIAkJUFdDX0RFQlVHX09QRU4oIkRvaW5nIGZpcnN0IHRpbWUgaW5pdGlhbGl6YXRpb24uXG4iKTsKIAkJcGRldi0+dXNiX2luaXQgPSAxOwpAQCAtMTEzOSw3ICsxMTUwLDYgQEAKIAlpZiAocHdjX3NldF9sZWRzKHBkZXYsIGxlZF9vbiwgbGVkX29mZikgPCAwKQogCQlQV0NfREVCVUdfT1BFTigiRmFpbGVkIHRvIHNldCBMRUQgb24vb2ZmIHRpbWUuXG4iKTsKIAotCXB3Y19jb25zdHJ1Y3QocGRldik7IC8qIHNldCBtaW4vbWF4IHNpemVzIGNvcnJlY3QgKi8KIAogCS8qIFNvIGZhciwgc28gZ29vZC4gQWxsb2NhdGUgbWVtb3J5LiAqLwogCWkgPSBwd2NfYWxsb2NhdGVfYnVmZmVycyhwZGV2KTsKQEAgLTEyMTYsNiArMTIyNiwxNSBAQAogewogCXB3Y19yZW1vdmVfc3lzZnNfZmlsZXMocGRldi0+dmRldik7CiAJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UocGRldi0+dmRldik7CisKKyNpZmRlZiBDT05GSUdfVVNCX1BXQ19JTlBVVF9FVkRFVgorCWlmIChwZGV2LT5idXR0b25fZGV2KSB7CisJCWlucHV0X3VucmVnaXN0ZXJfZGV2aWNlKHBkZXYtPmJ1dHRvbl9kZXYpOworCQlpbnB1dF9mcmVlX2RldmljZShwZGV2LT5idXR0b25fZGV2KTsKKwkJa2ZyZWUocGRldi0+YnV0dG9uX2Rldi0+cGh5cyk7CisJCXBkZXYtPmJ1dHRvbl9kZXYgPSBOVUxMOworCX0KKyNlbmRpZgogfQogCiAvKiBOb3RlIHRoYXQgYWxsIGNsZWFudXAgaXMgZG9uZSBpbiB0aGUgcmV2ZXJzZSBvcmRlciBhcyBpbiBfb3BlbiAqLwpAQCAtMTQ4Myw2ICsxNTAyLDkgQEAKIAlpbnQgZmVhdHVyZXMgPSAwOwogCWludCB2aWRlb19uciA9IC0xOyAvKiBkZWZhdWx0OiB1c2UgbmV4dCBhdmFpbGFibGUgZGV2aWNlICovCiAJY2hhciBzZXJpYWxfbnVtYmVyWzMwXSwgKm5hbWU7CisjaWZkZWYgQ09ORklHX1VTQl9QV0NfSU5QVVRfRVZERVYKKwljaGFyICpwaHlzID0gTlVMTDsKKyNlbmRpZgogCiAJdmVuZG9yX2lkID0gbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcik7CiAJcHJvZHVjdF9pZCA9IGxlMTZfdG9fY3B1KHVkZXYtPmRlc2NyaXB0b3IuaWRQcm9kdWN0KTsKQEAgLTE4MDcsNiArMTgyOSwzNSBAQAogCXB3Y19zZXRfbGVkcyhwZGV2LCAwLCAwKTsKIAlwd2NfY2FtZXJhX3Bvd2VyKHBkZXYsIDApOwogCisjaWZkZWYgQ09ORklHX1VTQl9QV0NfSU5QVVRfRVZERVYKKwkvKiByZWdpc3RlciB3ZWJjYW0gc25hcHNob3QgYnV0dG9uIGlucHV0IGRldmljZSAqLworCXBkZXYtPmJ1dHRvbl9kZXYgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKKwlpZiAoIXBkZXYtPmJ1dHRvbl9kZXYpIHsKKwkJUFdDX0VSUk9SKCJFcnIsIGluc3VmZmljaWVudCBtZW1vcnkgZm9yIHdlYmNhbSBzbmFwc2hvdCBidXR0b24gZGV2aWNlLiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlwZGV2LT5idXR0b25fZGV2LT5uYW1lID0gIlBXQyBzbmFwc2hvdCBidXR0b24iOworCXBoeXMgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwidXNiLSVzLSVzIiwgcGRldi0+dWRldi0+YnVzLT5idXNfbmFtZSwgcGRldi0+dWRldi0+ZGV2cGF0aCk7CisJaWYgKCFwaHlzKSB7CisJCWlucHV0X2ZyZWVfZGV2aWNlKHBkZXYtPmJ1dHRvbl9kZXYpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisJcGRldi0+YnV0dG9uX2Rldi0+cGh5cyA9IHBoeXM7CisJdXNiX3RvX2lucHV0X2lkKHBkZXYtPnVkZXYsICZwZGV2LT5idXR0b25fZGV2LT5pZCk7CisJcGRldi0+YnV0dG9uX2Rldi0+ZGV2LnBhcmVudCA9ICZwZGV2LT51ZGV2LT5kZXY7CisJcGRldi0+YnV0dG9uX2Rldi0+ZXZiaXRbMF0gPSBCSVRfTUFTSyhFVl9LRVkpOworCXBkZXYtPmJ1dHRvbl9kZXYtPmtleWJpdFtCSVRfV09SRChCVE5fMCldID0gQklUX01BU0soQlROXzApOworCisJcmMgPSBpbnB1dF9yZWdpc3Rlcl9kZXZpY2UocGRldi0+YnV0dG9uX2Rldik7CisJaWYgKHJjKSB7CisJCWlucHV0X2ZyZWVfZGV2aWNlKHBkZXYtPmJ1dHRvbl9kZXYpOworCQlrZnJlZShwZGV2LT5idXR0b25fZGV2LT5waHlzKTsKKwkJcGRldi0+YnV0dG9uX2RldiA9IE5VTEw7CisJCXJldHVybiByYzsKKwl9CisjZW5kaWYKKwogCXJldHVybiAwOwogCiBlcnJfdW5yZWc6CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B3Yy9wd2MuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy5oCmluZGV4IDAxNDExZmIuLjBiZTZmODEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vcHdjL3B3Yy5oCkBAIC0zNyw2ICszNyw5IEBACiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KKyNpZmRlZiBDT05GSUdfVVNCX1BXQ19JTlBVVF9FVkRFVgorI2luY2x1ZGUgPGxpbnV4L2lucHV0Lmg+CisjZW5kaWYKIAogI2luY2x1ZGUgInB3Yy11bmNvbXByZXNzLmgiCiAjaW5jbHVkZSA8bWVkaWEvcHdjLWlvY3RsLmg+CkBAIC0yNTUsNiArMjU4LDkgQEAKICAgIGludCBwYW5fYW5nbGU7CQkJLyogaW4gZGVncmVlcyAqIDEwMCAqLwogICAgaW50IHRpbHRfYW5nbGU7CQkJLyogYWJzb2x1dGUgYW5nbGU7IDAsMCBpcyBob21lIHBvc2l0aW9uICovCiAgICBpbnQgc25hcHNob3RfYnV0dG9uX3N0YXR1czsJCS8qIHNldCB0byAxIHdoZW4gdGhlIHVzZXIgcHVzaCB0aGUgYnV0dG9uLCByZXNldCB0byAwIHdoZW4gdGhpcyB2YWx1ZSBpcyByZWFkICovCisjaWZkZWYgQ09ORklHX1VTQl9QV0NfSU5QVVRfRVZERVYKKyAgIHN0cnVjdCBpbnB1dF9kZXYgKmJ1dHRvbl9kZXY7CS8qIHdlYmNhbSBzbmFwc2hvdCBidXR0b24gaW5wdXQgKi8KKyNlbmRpZgogCiAgICAvKioqIE1pc2MuIGRhdGEgKioqLwogICAgd2FpdF9xdWV1ZV9oZWFkX3QgZnJhbWVxOwkJLyogV2hlbiB3YWl0aW5nIGZvciBhIGZyYW1lIHRvIGZpbmlzaC4uLiAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9weGFfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYwppbmRleCAwYzRjZTU4Li5jNTIyNjE2IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3B4YV9jYW1lcmEuYwpAQCAtODc4LDYgKzg3OCw3IEBACiAJCVNPQ0FNX0hTWU5DX0FDVElWRV9MT1cgfAogCQlTT0NBTV9WU1lOQ19BQ1RJVkVfSElHSCB8CiAJCVNPQ0FNX1ZTWU5DX0FDVElWRV9MT1cgfAorCQlTT0NBTV9EQVRBX0FDVElWRV9ISUdIIHwKIAkJU09DQU1fUENMS19TQU1QTEVfUklTSU5HIHwKIAkJU09DQU1fUENMS19TQU1QTEVfRkFMTElORzsKIApAQCAtMTE0OSw0NiArMTE1MCwyOCBAQAogCXJldHVybiBmb3JtYXRzOwogfQogCi1zdGF0aWMgaW50IHB4YV9jYW1lcmFfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCSAgICAgIF9fdTMyIHBpeGZtdCwgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKK3N0YXRpYyBpbnQgcHhhX2NhbWVyYV9zZXRfY3JvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQogewogCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOwogCXN0cnVjdCBweGFfY2FtZXJhX2RldiAqcGNkZXYgPSBpY2ktPnByaXY7Ci0JY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgKmNhbV9mbXQgPSBOVUxMOwotCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGUgPSBOVUxMOwogCXN0cnVjdCBzb2NfY2FtZXJhX3NlbnNlIHNlbnNlID0gewogCQkubWFzdGVyX2Nsb2NrID0gcGNkZXYtPm1jbGssCiAJCS5waXhlbF9jbG9ja19tYXggPSBwY2Rldi0+Y2ljbGsgLyA0LAogCX07CiAJaW50IHJldDsKIAotCWlmIChwaXhmbXQpIHsKLQkJeGxhdGUgPSBzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYyhpY2QsIHBpeGZtdCk7Ci0JCWlmICgheGxhdGUpIHsKLQkJCWRldl93YXJuKCZpY2ktPmRldiwgIkZvcm1hdCAleCBub3QgZm91bmRcbiIsIHBpeGZtdCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWNhbV9mbXQgPSB4bGF0ZS0+Y2FtX2ZtdDsKLQl9Ci0KIAkvKiBJZiBQQ0xLIGlzIHVzZWQgdG8gbGF0Y2ggZGF0YSBmcm9tIHRoZSBzZW5zb3IsIGNoZWNrIHNlbnNlICovCiAJaWYgKHBjZGV2LT5wbGF0Zm9ybV9mbGFncyAmIFBYQV9DQU1FUkFfUENMS19FTikKIAkJaWNkLT5zZW5zZSA9ICZzZW5zZTsKIAotCXN3aXRjaCAocGl4Zm10KSB7Ci0JY2FzZSAwOgkJCQkvKiBPbmx5IGdlb21ldHJ5IGNoYW5nZSAqLwotCQlyZXQgPSBpY2QtPm9wcy0+c2V0X2ZtdChpY2QsIHBpeGZtdCwgcmVjdCk7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IGljZC0+b3BzLT5zZXRfZm10KGljZCwgY2FtX2ZtdC0+Zm91cmNjLCByZWN0KTsKLQl9CisJcmV0ID0gaWNkLT5vcHMtPnNldF9jcm9wKGljZCwgcmVjdCk7CiAKIAlpY2QtPnNlbnNlID0gTlVMTDsKIAogCWlmIChyZXQgPCAwKSB7Ci0JCWRldl93YXJuKCZpY2ktPmRldiwgIkZhaWxlZCB0byBjb25maWd1cmUgZm9yIGZvcm1hdCAleFxuIiwKLQkJCSBwaXhmbXQpOworCQlkZXZfd2FybigmaWNpLT5kZXYsICJGYWlsZWQgdG8gY3JvcCB0byAldXgldUAldToldVxuIiwKKwkJCSByZWN0LT53aWR0aCwgcmVjdC0+aGVpZ2h0LCByZWN0LT5sZWZ0LCByZWN0LT50b3ApOwogCX0gZWxzZSBpZiAoc2Vuc2UuZmxhZ3MgJiBTT0NBTV9TRU5TRV9QQ0xLX0NIQU5HRUQpIHsKIAkJaWYgKHNlbnNlLnBpeGVsX2Nsb2NrID4gc2Vuc2UucGl4ZWxfY2xvY2tfbWF4KSB7CiAJCQlkZXZfZXJyKCZpY2ktPmRldiwKQEAgLTExOTksNyArMTE4Miw1NSBAQAogCQlyZWNhbGN1bGF0ZV9maWZvX3RpbWVvdXQocGNkZXYsIHNlbnNlLnBpeGVsX2Nsb2NrKTsKIAl9CiAKLQlpZiAocGl4Zm10ICYmICFyZXQpIHsKKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHB4YV9jYW1lcmFfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9ob3N0ICppY2kgPSB0b19zb2NfY2FtZXJhX2hvc3QoaWNkLT5kZXYucGFyZW50KTsKKwlzdHJ1Y3QgcHhhX2NhbWVyYV9kZXYgKnBjZGV2ID0gaWNpLT5wcml2OworCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2RhdGFfZm9ybWF0ICpjYW1fZm10ID0gTlVMTDsKKwljb25zdCBzdHJ1Y3Qgc29jX2NhbWVyYV9mb3JtYXRfeGxhdGUgKnhsYXRlID0gTlVMTDsKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9zZW5zZSBzZW5zZSA9IHsKKwkJLm1hc3Rlcl9jbG9jayA9IHBjZGV2LT5tY2xrLAorCQkucGl4ZWxfY2xvY2tfbWF4ID0gcGNkZXYtPmNpY2xrIC8gNCwKKwl9OworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OworCXN0cnVjdCB2NGwyX2Zvcm1hdCBjYW1fZiA9ICpmOworCWludCByZXQ7CisKKwl4bGF0ZSA9IHNvY19jYW1lcmFfeGxhdGVfYnlfZm91cmNjKGljZCwgcGl4LT5waXhlbGZvcm1hdCk7CisJaWYgKCF4bGF0ZSkgeworCQlkZXZfd2FybigmaWNpLT5kZXYsICJGb3JtYXQgJXggbm90IGZvdW5kXG4iLCBwaXgtPnBpeGVsZm9ybWF0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJY2FtX2ZtdCA9IHhsYXRlLT5jYW1fZm10OworCisJLyogSWYgUENMSyBpcyB1c2VkIHRvIGxhdGNoIGRhdGEgZnJvbSB0aGUgc2Vuc29yLCBjaGVjayBzZW5zZSAqLworCWlmIChwY2Rldi0+cGxhdGZvcm1fZmxhZ3MgJiBQWEFfQ0FNRVJBX1BDTEtfRU4pCisJCWljZC0+c2Vuc2UgPSAmc2Vuc2U7CisKKwljYW1fZi5mbXQucGl4LnBpeGVsZm9ybWF0ID0gY2FtX2ZtdC0+Zm91cmNjOworCXJldCA9IGljZC0+b3BzLT5zZXRfZm10KGljZCwgJmNhbV9mKTsKKworCWljZC0+c2Vuc2UgPSBOVUxMOworCisJaWYgKHJldCA8IDApIHsKKwkJZGV2X3dhcm4oJmljaS0+ZGV2LCAiRmFpbGVkIHRvIGNvbmZpZ3VyZSBmb3IgZm9ybWF0ICV4XG4iLAorCQkJIHBpeC0+cGl4ZWxmb3JtYXQpOworCX0gZWxzZSBpZiAoc2Vuc2UuZmxhZ3MgJiBTT0NBTV9TRU5TRV9QQ0xLX0NIQU5HRUQpIHsKKwkJaWYgKHNlbnNlLnBpeGVsX2Nsb2NrID4gc2Vuc2UucGl4ZWxfY2xvY2tfbWF4KSB7CisJCQlkZXZfZXJyKCZpY2ktPmRldiwKKwkJCQkicGl4ZWwgY2xvY2sgJWx1IHNldCBieSB0aGUgY2FtZXJhIHRvbyBoaWdoISIsCisJCQkJc2Vuc2UucGl4ZWxfY2xvY2spOworCQkJcmV0dXJuIC1FSU87CisJCX0KKwkJcmVjYWxjdWxhdGVfZmlmb190aW1lb3V0KHBjZGV2LCBzZW5zZS5waXhlbF9jbG9jayk7CisJfQorCisJaWYgKCFyZXQpIHsKIAkJaWNkLT5idXN3aWR0aCA9IHhsYXRlLT5idXN3aWR0aDsKIAkJaWNkLT5jdXJyZW50X2ZtdCA9IHhsYXRlLT5ob3N0X2ZtdDsKIAl9CkBAIC0xMzYzLDYgKzEzOTQsNyBAQAogCS5yZW1vdmUJCT0gcHhhX2NhbWVyYV9yZW1vdmVfZGV2aWNlLAogCS5zdXNwZW5kCT0gcHhhX2NhbWVyYV9zdXNwZW5kLAogCS5yZXN1bWUJCT0gcHhhX2NhbWVyYV9yZXN1bWUsCisJLnNldF9jcm9wCT0gcHhhX2NhbWVyYV9zZXRfY3JvcCwKIAkuZ2V0X2Zvcm1hdHMJPSBweGFfY2FtZXJhX2dldF9mb3JtYXRzLAogCS5zZXRfZm10CT0gcHhhX2NhbWVyYV9zZXRfZm10LAogCS50cnlfZm10CT0gcHhhX2NhbWVyYV90cnlfZm10LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zMjI1NWRydi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zMjI1NWRydi5jCmluZGV4IDEzZjg1YWQuLmI1YmU2MzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vczIyNTVkcnYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3MyMjU1ZHJ2LmMKQEAgLTMzNiwxNCArMzM2LDE5IEBACiAJCQkgICAgIHUxNiBpbmRleCwgdTE2IHZhbHVlLCB2b2lkICpidWYsCiAJCQkgICAgIHMzMiBidWZfbGVuLCBpbnQgYk91dCk7CiAKKy8qIGRldl9lcnIgbWFjcm8gd2l0aCBkcml2ZXIgbmFtZSAqLworI2RlZmluZSBTMjI1NV9EUklWRVJfTkFNRSAiczIyNTUiCisjZGVmaW5lIHMyMjU1X2Rldl9lcnIoZGV2LCBmbXQsIGFyZy4uLikJCQkJCVwKKwkJZGV2X2VycihkZXYsIFMyMjU1X0RSSVZFUl9OQU1FICIgLSAiIGZtdCwgIyNhcmcpCisKICNkZWZpbmUgZHByaW50ayhsZXZlbCwgZm10LCBhcmcuLi4pCQkJCQlcCiAJZG8gewkJCQkJCQkJXAogCQlpZiAoKnMyMjU1X2RlYnVnID49IChsZXZlbCkpIHsJCQkJXAotCQkJcHJpbnRrKEtFUk5fREVCVUcgInMyMjU1OiAiIGZtdCwgIyNhcmcpOwlcCisJCQlwcmludGsoS0VSTl9ERUJVRyBTMjI1NV9EUklWRVJfTkFNRQkJXAorCQkJCSI6ICIgZm10LCAjI2FyZyk7CQkJXAogCQl9CQkJCQkJCVwKIAl9IHdoaWxlICgwKQogCi0KIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzMjI1NV9kcml2ZXI7CiAKIApAQCAtNTI4LDE0ICs1MzMsMTQgQEAKIAlpbnQgbGVuOwogCWRwcmludGsoMTAwLCAidWRldiAlcCB1cmIgJXAiLCB1ZGV2LCB1cmIpOwogCWlmICh1cmItPnN0YXR1cykgewotCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJVUkIgZmFpbGVkIHdpdGggc3RhdHVzICVkIiwgdXJiLT5zdGF0dXMpOworCQlkZXZfZXJyKCZ1ZGV2LT5kZXYsICJVUkIgZmFpbGVkIHdpdGggc3RhdHVzICVkXG4iLCB1cmItPnN0YXR1cyk7CiAJCWF0b21pY19zZXQoJmRhdGEtPmZ3X3N0YXRlLCBTMjI1NV9GV19GQUlMRUQpOwogCQkvKiB3YWtlIHVwIGFueXRoaW5nIHdhaXRpbmcgZm9yIHRoZSBmaXJtd2FyZSAqLwogCQl3YWtlX3VwKCZkYXRhLT53YWl0X2Z3KTsKIAkJcmV0dXJuOwogCX0KIAlpZiAoZGF0YS0+ZndfdXJiID09IE5VTEwpIHsKLQkJZGV2X2VycigmdWRldi0+ZGV2LCAiczIyNTUgZGlzY29ubmVjdGVkXG4iKTsKKwkJczIyNTVfZGV2X2VycigmdWRldi0+ZGV2LCAiZGlzY29ubmVjdGVkXG4iKTsKIAkJYXRvbWljX3NldCgmZGF0YS0+Zndfc3RhdGUsIFMyMjU1X0ZXX0ZBSUxFRCk7CiAJCS8qIHdha2UgdXAgYW55dGhpbmcgd2FpdGluZyBmb3IgdGhlIGZpcm13YXJlICovCiAJCXdha2VfdXAoJmRhdGEtPndhaXRfZncpOwpAQCAtODQxLDggKzg0Niw3IEBACiAJc3RydWN0IHMyMjU1X2RldiAqZGV2ID0gZmgtPmRldjsKIAlzdHJsY3B5KGNhcC0+ZHJpdmVyLCAiczIyNTUiLCBzaXplb2YoY2FwLT5kcml2ZXIpKTsKIAlzdHJsY3B5KGNhcC0+Y2FyZCwgInMyMjU1Iiwgc2l6ZW9mKGNhcC0+Y2FyZCkpOwotCXN0cmxjcHkoY2FwLT5idXNfaW5mbywgZGV2X25hbWUoJmRldi0+dWRldi0+ZGV2KSwKLQkJc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKKwl1c2JfbWFrZV9wYXRoKGRldi0+dWRldiwgY2FwLT5idXNfaW5mbywgc2l6ZW9mKGNhcC0+YnVzX2luZm8pKTsKIAljYXAtPnZlcnNpb24gPSBTMjI1NV9WRVJTSU9OOwogCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8IFY0TDJfQ0FQX1NUUkVBTUlORzsKIAlyZXR1cm4gMDsKQEAgLTEyNzgsNyArMTI4Miw3IEBACiAJfQogCiAJaWYgKCFyZXNfZ2V0KGRldiwgZmgpKSB7Ci0JCWRldl9lcnIoJmRldi0+dWRldi0+ZGV2LCAiczIyNTU6IHN0cmVhbSBidXN5XG4iKTsKKwkJczIyNTVfZGV2X2VycigmZGV2LT51ZGV2LT5kZXYsICJzdHJlYW0gYnVzeVxuIik7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCkBAIC0xNTQ1LDcgKzE1NDksOCBAQAogCiAJc3dpdGNoIChhdG9taWNfcmVhZCgmZGV2LT5md19kYXRhLT5md19zdGF0ZSkpIHsKIAljYXNlIFMyMjU1X0ZXX0ZBSUxFRDoKLQkJZXJyKCIyMjU1IGZpcm13YXJlIGxvYWQgZmFpbGVkLiByZXRyeWluZy5cbiIpOworCQlzMjI1NV9kZXZfZXJyKCZkZXYtPnVkZXYtPmRldiwKKwkJCSJmaXJtd2FyZSBsb2FkIGZhaWxlZC4gcmV0cnlpbmcuXG4iKTsKIAkJczIyNTVfZndsb2FkX3N0YXJ0KGRldiwgMSk7CiAJCXdhaXRfZXZlbnRfdGltZW91dChkZXYtPmZ3X2RhdGEtPndhaXRfZncsCiAJCQkJICAgKChhdG9taWNfcmVhZCgmZGV2LT5md19kYXRhLT5md19zdGF0ZSkKQEAgLTIxNzMsNyArMjE3OCw4IEBACiAKIAlwcmludGsoS0VSTl9JTkZPICIyMjU1IHVzYiBmaXJtd2FyZSB2ZXJzaW9uICVkIFxuIiwgZndfdmVyKTsKIAlpZiAoZndfdmVyIDwgQ1VSX1VTQl9GV1ZFUikKLQkJZXJyKCJ1c2IgZmlybXdhcmUgbm90IHVwIHRvIGRhdGUgJWRcbiIsIGZ3X3Zlcik7CisJCWRldl9lcnIoJmRldi0+dWRldi0+ZGV2LAorCQkJInVzYiBmaXJtd2FyZSBub3QgdXAgdG8gZGF0ZSAlZFxuIiwgZndfdmVyKTsKIAogCWZvciAoaiA9IDA7IGogPCBNQVhfQ0hBTk5FTFM7IGorKykgewogCQlkZXYtPmJfYWNxdWlyZVtqXSA9IDA7CkBAIC0yMjI4LDEzICsyMjM0LDEzIEBACiAJZHByaW50aygxMDAsICJyZWFkIHBpcGUgY29tcGxldGlvbiAlcCwgc3RhdHVzICVkXG4iLCBwdXJiLAogCQlwdXJiLT5zdGF0dXMpOwogCWlmIChwaXBlX2luZm8gPT0gTlVMTCkgewotCQllcnIoIm5vIGNvbnRleHQgISIpOworCQlkZXZfZXJyKCZwdXJiLT5kZXYtPmRldiwgIm5vIGNvbnRleHQhXG4iKTsKIAkJcmV0dXJuOwogCX0KIAogCWRldiA9IHBpcGVfaW5mby0+ZGV2OwogCWlmIChkZXYgPT0gTlVMTCkgewotCQllcnIoIm5vIGNvbnRleHQgISIpOworCQlkZXZfZXJyKCZwdXJiLT5kZXYtPmRldiwgIm5vIGNvbnRleHQhXG4iKTsKIAkJcmV0dXJuOwogCX0KIAlzdGF0dXMgPSBwdXJiLT5zdGF0dXM7CkBAIC0yMjg2LDcgKzIyOTIsNyBAQAogCQlwaXBlX2luZm8tPnN0cmVhbV91cmIgPSB1c2JfYWxsb2NfdXJiKDAsIEdGUF9LRVJORUwpOwogCQlpZiAoIXBpcGVfaW5mby0+c3RyZWFtX3VyYikgewogCQkJZGV2X2VycigmZGV2LT51ZGV2LT5kZXYsCi0JCQkJIlJlYWRTdHJlYW06IFVuYWJsZSB0byBhbGxvYyBVUkIiKTsKKwkJCQkiUmVhZFN0cmVhbTogVW5hYmxlIHRvIGFsbG9jIFVSQlxuIik7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQkvKiB0cmFuc2ZlciBidWZmZXIgYWxsb2NhdGVkIGluIGJvYXJkX2luaXQgKi8KQEAgLTIzOTEsNyArMjM5Nyw3IEBACiAJaW50IGo7CiAKIAlpZiAoZGV2ID09IE5VTEwpIHsKLQkJZXJyKCJzMjI1NTogaW52YWxpZCBkZXZpY2UiKTsKKwkJczIyNTVfZGV2X2VycigmZGV2LT51ZGV2LT5kZXYsICJpbnZhbGlkIGRldmljZVxuIik7CiAJCXJldHVybjsKIAl9CiAJZHByaW50ayg0LCAic3RvcCByZWFkIHBpcGVcbiIpOwpAQCAtMjQ1Myw3ICsyNDU5LDcgQEAKIAkvKiBhbGxvY2F0ZSBtZW1vcnkgZm9yIG91ciBkZXZpY2Ugc3RhdGUgYW5kIGluaXRpYWxpemUgaXQgdG8gemVybyAqLwogCWRldiA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzMjI1NV9kZXYpLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGV2ID09IE5VTEwpIHsKLQkJZXJyKCJzMjI1NTogb3V0IG9mIG1lbW9yeSIpOworCQlzMjI1NV9kZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIm91dCBvZiBtZW1vcnlcbiIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMjQ4Nyw3ICsyNDkzLDcgQEAKIAl9CiAKIAlpZiAoIWRldi0+cmVhZF9lbmRwb2ludCkgewotCQlkZXZfZXJyKCZpbnRlcmZhY2UtPmRldiwgIkNvdWxkIG5vdCBmaW5kIGJ1bGstaW4gZW5kcG9pbnQiKTsKKwkJZGV2X2VycigmaW50ZXJmYWNlLT5kZXYsICJDb3VsZCBub3QgZmluZCBidWxrLWluIGVuZHBvaW50XG4iKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTI1ODMsNyArMjU4OSw3IEBACiB9CiAKIHN0YXRpYyBzdHJ1Y3QgdXNiX2RyaXZlciBzMjI1NV9kcml2ZXIgPSB7Ci0JLm5hbWUgPSAiczIyNTUiLAorCS5uYW1lID0gUzIyNTVfRFJJVkVSX05BTUUsCiAJLnByb2JlID0gczIyNTVfcHJvYmUsCiAJLmRpc2Nvbm5lY3QgPSBzMjI1NV9kaXNjb25uZWN0LAogCS5pZF90YWJsZSA9IHMyMjU1X3RhYmxlLApAQCAtMjU5Nyw3ICsyNjAzLDggQEAKIAlyZXN1bHQgPSB1c2JfcmVnaXN0ZXIoJnMyMjU1X2RyaXZlcik7CiAKIAlpZiAocmVzdWx0KQotCQllcnIoInVzYl9yZWdpc3RlciBmYWlsZWQuIEVycm9yIG51bWJlciAlZCIsIHJlc3VsdCk7CisJCXByX2VycihLQlVJTERfTU9ETkFNRQorCQkJIjogdXNiX3JlZ2lzdGVyIGZhaWxlZC4gRXJyb3IgbnVtYmVyICVkXG4iLCByZXN1bHQpOwogCiAJZHByaW50aygyLCAiczIyNTVfaW5pdDogZG9uZVxuIik7CiAJcmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0NmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNTI0NmEuYwppbmRleCBlNjM3ZTQ0Li5kYTQ3YjJmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDZhLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ2YS5jCkBAIC00NiwxMCArNDYsMTEgQEAKICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+CiAjaW5jbHVkZSA8bGludXgvdmlkZW90ZXh0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogTU9EVUxFX0FVVEhPUigiTWljaGFlbCBHZW5nIDxsaW51eEBNaWNoYWVsR2VuZy5kZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigiUGhpbGlwcyBTQUE1MjQ2QSwgU0FBNTI4MSBUZWxldGV4dCBkZWNvZGVyIGRyaXZlciIpOwpAQCAtMzg4LDEzICszODksMTkgQEAKIAogc3RydWN0IHNhYTUyNDZhX2RldmljZQogeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OwogCXU4ICAgICBwZ2J1ZltOVU1fREFVU11bVlRYX1ZJUlRVQUxTSVpFXTsKIAlpbnQgICAgaXNfc2VhcmNoaW5nW05VTV9EQVVTXTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCXVuc2lnbmVkIGxvbmcgaW5fdXNlOwogCXN0cnVjdCBtdXRleCBsb2NrOwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2FhNTI0NmFfZGV2aWNlICp0b19kZXYoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qgc2FhNTI0NmFfZGV2aWNlLCBzZCk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHNhYV90ZW1wbGF0ZTsJLyogRGVjbGFyZWQgbmVhciBib3R0b20gKi8KIAogLyoKQEAgLTQwMywxMiArNDEwLDEzIEBACiAKIHN0YXRpYyBpbnQgaTJjX3NlbmRidWYoc3RydWN0IHNhYTUyNDZhX2RldmljZSAqdCwgaW50IHJlZywgaW50IGNvdW50LCB1OCAqZGF0YSkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmdC0+c2QpOwogCWNoYXIgYnVmWzY0XTsKIAogCWJ1ZlswXSA9IHJlZzsKIAltZW1jcHkoYnVmKzEsIGRhdGEsIGNvdW50KTsKIAotCWlmKGkyY19tYXN0ZXJfc2VuZCh0LT5jbGllbnQsIGJ1ZiwgY291bnQrMSk9PWNvdW50KzEpCisJaWYgKGkyY19tYXN0ZXJfc2VuZChjbGllbnQsIGJ1ZiwgY291bnQgKyAxKSA9PSBjb3VudCArIDEpCiAJCXJldHVybiAwOwogCXJldHVybiAtMTsKIH0KQEAgLTQzNiw3ICs0NDQsOSBAQAogICovCiBzdGF0aWMgaW50IGkyY19nZXRkYXRhKHN0cnVjdCBzYWE1MjQ2YV9kZXZpY2UgKnQsIGludCBjb3VudCwgdTggKmJ1ZikKIHsKLQlpZihpMmNfbWFzdGVyX3JlY3YodC0+Y2xpZW50LCBidWYsIGNvdW50KSE9Y291bnQpCisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJnQtPnNkKTsKKworCWlmIChpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCBidWYsIGNvdW50KSAhPSBjb3VudCkKIAkJcmV0dXJuIC0xOwogCXJldHVybiAwOwogfQpAQCAtOTYxLDkgKzk3MSw2IEBACiB7CiAJc3RydWN0IHNhYTUyNDZhX2RldmljZSAqdCA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAKLQlpZiAodC0+Y2xpZW50ID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJnQtPmluX3VzZSkpCiAJCXJldHVybiAtRUJVU1k7CiAKQEAgLTEwMzMsMTggKzEwNDAsMjkgQEAKIAkubWlub3IgICAgPSAtMSwKIH07CiAKLS8qIEFkZHJlc3NlcyB0byBzY2FuICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDIyID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgaW50IHNhYTUyNDZhX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAKLUkyQ19DTElFTlRfSU5TTU9EOworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfU0FBNTI0NkEsIDApOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHNhYTUyNDZhX2NvcmVfb3BzID0geworCS5nX2NoaXBfaWRlbnQgPSBzYWE1MjQ2YV9nX2NoaXBfaWRlbnQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBzYWE1MjQ2YV9vcHMgPSB7CisJLmNvcmUgPSAmc2FhNTI0NmFfY29yZV9vcHMsCit9OworCiAKIHN0YXRpYyBpbnQgc2FhNTI0NmFfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKIAkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKIHsKIAlpbnQgcGdidWY7CiAJaW50IGVycjsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZDsKIAlzdHJ1Y3Qgc2FhNTI0NmFfZGV2aWNlICp0OworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAKIAl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAogCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CkBAIC0xMDUzLDQwICsxMDcxLDQzIEBACiAJdCA9IGt6YWxsb2Moc2l6ZW9mKCp0KSwgR0ZQX0tFUk5FTCk7CiAJaWYgKHQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CisJc2QgPSAmdC0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJnNhYTUyNDZhX29wcyk7CiAJbXV0ZXhfaW5pdCgmdC0+bG9jayk7CiAKIAkvKiBOb3cgY3JlYXRlIGEgdmlkZW80bGludXggZGV2aWNlICovCi0JdmQgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKLQlpZiAodmQgPT0gTlVMTCkgeworCXQtPnZkZXYgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKKwlpZiAodC0+dmRldiA9PSBOVUxMKSB7CiAJCWtmcmVlKHQpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgdmQpOwotCW1lbWNweSh2ZCwgJnNhYV90ZW1wbGF0ZSwgc2l6ZW9mKCp2ZCkpOworCW1lbWNweSh0LT52ZGV2LCAmc2FhX3RlbXBsYXRlLCBzaXplb2YoKnQtPnZkZXYpKTsKIAogCWZvciAocGdidWYgPSAwOyBwZ2J1ZiA8IE5VTV9EQVVTOyBwZ2J1ZisrKSB7CiAJCW1lbXNldCh0LT5wZ2J1ZltwZ2J1Zl0sICcgJywgc2l6ZW9mKHQtPnBnYnVmWzBdKSk7CiAJCXQtPmlzX3NlYXJjaGluZ1twZ2J1Zl0gPSBmYWxzZTsKIAl9Ci0JdmlkZW9fc2V0X2RydmRhdGEodmQsIHQpOworCXZpZGVvX3NldF9kcnZkYXRhKHQtPnZkZXYsIHQpOwogCiAJLyogUmVnaXN0ZXIgaXQgKi8KLQllcnIgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UodmQsIFZGTF9UWVBFX1ZUWCwgLTEpOworCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh0LT52ZGV2LCBWRkxfVFlQRV9WVFgsIC0xKTsKIAlpZiAoZXJyIDwgMCkgewogCQlrZnJlZSh0KTsKLQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UodmQpOworCQl2aWRlb19kZXZpY2VfcmVsZWFzZSh0LT52ZGV2KTsKKwkJdC0+dmRldiA9IE5VTEw7CiAJCXJldHVybiBlcnI7CiAJfQotCXQtPmNsaWVudCA9IGNsaWVudDsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzYWE1MjQ2YV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc2FhNTI0NmFfZGV2aWNlICp0ID0gdG9fZGV2KHNkKTsKIAotCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZkKTsKLQlrZnJlZSh2aWRlb19nZXRfZHJ2ZGF0YSh2ZCkpOworCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHQtPnZkZXYpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwlrZnJlZSh0KTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTA5OCw3ICsxMTE5LDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gInNhYTUyNDZhIiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfU0FBNTI0OSwKIAkucHJvYmUgPSBzYWE1MjQ2YV9wcm9iZSwKIAkucmVtb3ZlID0gc2FhNTI0NmFfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHNhYTUyNDZhX2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE1MjQ5LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDkuYwppbmRleCBlMjk3NjUxLi40OGIyN2ZlIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDkuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTUyNDkuYwpAQCAtNTAsMTUgKzUwLDE3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvdGV4dC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAKIE1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgR2VuZyA8bGludXhATWljaGFlbEdlbmcuZGU+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIlBoaWxpcHMgU0FBNTI0OSBUZWxldGV4dCBkZWNvZGVyIGRyaXZlciIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCisKICNkZWZpbmUgVlRYX1ZFUl9NQUogMQogI2RlZmluZSBWVFhfVkVSX01JTiA4CiAKQEAgLTk1LDE3ICs5NywyMyBAQAogCiBzdHJ1Y3Qgc2FhNTI0OV9kZXZpY2UKIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CisJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsKIAl2ZGF1X3QgdmRhdVtOVU1fREFVU107CQkJLyogRGF0YSBmb3IgdmlydHVhbCBEQVVzICh0aGUgNTI0OSBvbmx5IGhhcyBvbmUgKi8KIAkJCQkJCS8qIHJlYWwgREFVLCBzbyB3ZSBoYXZlIHRvIHNpbXVsYXRlIHNvbWUgbW9yZSkgKi8KIAlpbnQgdnR4X3VzZV9jb3VudDsKIAlpbnQgaXNfc2VhcmNoaW5nW05VTV9EQVVTXTsKIAlpbnQgZGlzcF9tb2RlOwogCWludCB2aXJ0dWFsX21vZGU7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmNsaWVudDsKIAl1bnNpZ25lZCBsb25nIGluX3VzZTsKIAlzdHJ1Y3QgbXV0ZXggbG9jazsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNhYTUyNDlfZGV2aWNlICp0b19kZXYoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qgc2FhNTI0OV9kZXZpY2UsIHNkKTsKK30KKwogCiAjZGVmaW5lIENDVFdSIDM0CQkvKiBJskMgd3JpdGUvcmVhZC1hZGRyZXNzIG9mIHZ0eC1jaGlwICovCiAjZGVmaW5lIENDVFJEIDM1CkBAIC0xNDcsMTIgKzE1NSwxMyBAQAogCiBzdGF0aWMgaW50IGkyY19zZW5kYnVmKHN0cnVjdCBzYWE1MjQ5X2RldmljZSAqdCwgaW50IHJlZywgaW50IGNvdW50LCB1OCAqZGF0YSkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YSgmdC0+c2QpOwogCWNoYXIgYnVmWzY0XTsKIAogCWJ1ZlswXSA9IHJlZzsKIAltZW1jcHkoYnVmKzEsIGRhdGEsIGNvdW50KTsKIAotCWlmIChpMmNfbWFzdGVyX3NlbmQodC0+Y2xpZW50LCBidWYsIGNvdW50ICsgMSkgPT0gY291bnQgKyAxKQorCWlmIChpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIGNvdW50ICsgMSkgPT0gY291bnQgKyAxKQogCQlyZXR1cm4gMDsKIAlyZXR1cm4gLTE7CiB9CkBAIC0xODAsNyArMTg5LDkgQEAKIAogc3RhdGljIGludCBpMmNfZ2V0ZGF0YShzdHJ1Y3Qgc2FhNTI0OV9kZXZpY2UgKnQsIGludCBjb3VudCwgdTggKmJ1ZikKIHsKLQlpZihpMmNfbWFzdGVyX3JlY3YodC0+Y2xpZW50LCBidWYsIGNvdW50KSE9Y291bnQpCisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJnQtPnNkKTsKKworCWlmIChpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCBidWYsIGNvdW50KSAhPSBjb3VudCkKIAkJcmV0dXJuIC0xOwogCXJldHVybiAwOwogfQpAQCAtNDk3LDkgKzUwOCw2IEBACiAJc3RydWN0IHNhYTUyNDlfZGV2aWNlICp0ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgcGdidWY7CiAKLQlpZiAodC0+Y2xpZW50ID09IE5VTEwpCi0JCXJldHVybiAtRU5PREVWOwotCiAJaWYgKHRlc3RfYW5kX3NldF9iaXQoMCwgJnQtPmluX3VzZSkpCiAJCXJldHVybiAtRUJVU1k7CiAKQEAgLTU1MywxOCArNTYxLDI4IEBACiAJLnJlbGVhc2UgCT0gdmlkZW9fZGV2aWNlX3JlbGVhc2UsCiB9OwogCi0vKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgyMiA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGludCBzYWE1MjQ5X2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAKLUkyQ19DTElFTlRfSU5TTU9EOworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfU0FBNTI0OSwgMCk7Cit9CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgc2FhNTI0OV9jb3JlX29wcyA9IHsKKwkuZ19jaGlwX2lkZW50ID0gc2FhNTI0OV9nX2NoaXBfaWRlbnQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBzYWE1MjQ5X29wcyA9IHsKKwkuY29yZSA9ICZzYWE1MjQ5X2NvcmVfb3BzLAorfTsKIAogc3RhdGljIGludCBzYWE1MjQ5X3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJaW50IHBnYnVmOwogCWludCBlcnI7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmQ7CiAJc3RydWN0IHNhYTUyNDlfZGV2aWNlICp0OworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAKIAl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAogCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CkBAIC01NzMsMTYgKzU5MSwxNyBAQAogCXQgPSBremFsbG9jKHNpemVvZigqdCksIEdGUF9LRVJORUwpOwogCWlmICh0ID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOworCXNkID0gJnQtPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZzYWE1MjQ5X29wcyk7CiAJbXV0ZXhfaW5pdCgmdC0+bG9jayk7CiAKIAkvKiBOb3cgY3JlYXRlIGEgdmlkZW80bGludXggZGV2aWNlICovCi0JdmQgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdmlkZW9fZGV2aWNlKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKHZkID09IE5VTEwpIHsKKwl0LT52ZGV2ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKHQtPnZkZXYgPT0gTlVMTCkgewogCQlrZnJlZShjbGllbnQpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgdmQpOwotCW1lbWNweSh2ZCwgJnNhYV90ZW1wbGF0ZSwgc2l6ZW9mKCp2ZCkpOworCW1lbWNweSh0LT52ZGV2LCAmc2FhX3RlbXBsYXRlLCBzaXplb2YoKnQtPnZkZXYpKTsKIAogCWZvciAocGdidWYgPSAwOyBwZ2J1ZiA8IE5VTV9EQVVTOyBwZ2J1ZisrKSB7CiAJCW1lbXNldCh0LT52ZGF1W3BnYnVmXS5wZ2J1ZiwgJyAnLCBzaXplb2YodC0+dmRhdVswXS5wZ2J1ZikpOwpAQCAtNTkzLDI2ICs2MTIsMjcgQEAKIAkJdC0+dmRhdVtwZ2J1Zl0uc3RvcHBlZCA9IHRydWU7CiAJCXQtPmlzX3NlYXJjaGluZ1twZ2J1Zl0gPSBmYWxzZTsKIAl9Ci0JdmlkZW9fc2V0X2RydmRhdGEodmQsIHQpOworCXZpZGVvX3NldF9kcnZkYXRhKHQtPnZkZXYsIHQpOwogCiAJLyogUmVnaXN0ZXIgaXQgKi8KLQllcnIgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UodmQsIFZGTF9UWVBFX1ZUWCwgLTEpOworCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh0LT52ZGV2LCBWRkxfVFlQRV9WVFgsIC0xKTsKIAlpZiAoZXJyIDwgMCkgewogCQlrZnJlZSh0KTsKLQkJa2ZyZWUodmQpOworCQl2aWRlb19kZXZpY2VfcmVsZWFzZSh0LT52ZGV2KTsKKwkJdC0+dmRldiA9IE5VTEw7CiAJCXJldHVybiBlcnI7CiAJfQotCXQtPmNsaWVudCA9IGNsaWVudDsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzYWE1MjQ5X3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzYWE1MjQ5X2RldmljZSAqdCA9IHRvX2RldihzZCk7CiAKLQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSh2ZCk7Ci0Ja2ZyZWUodmlkZW9fZ2V0X2RydmRhdGEodmQpKTsKLQlrZnJlZSh2ZCk7CisJdmlkZW9fdW5yZWdpc3Rlcl9kZXZpY2UodC0+dmRldik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCWtmcmVlKHQpOwogCXJldHVybiAwOwogfQogCkBAIC02MjQsNyArNjQ0LDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gInNhYTUyNDkiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9TQUE1MjQ5LAogCS5wcm9iZSA9IHNhYTUyNDlfcHJvYmUsCiAJLnJlbW92ZSA9IHNhYTUyNDlfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHNhYTUyNDlfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTY1ODguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNjU4OC5jCmluZGV4IGYwNTAyNDIuLmMyNWU4MWEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNjU4OC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNjU4OC5jCkBAIC0yMyw3ICsyMyw3IEBACiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KQEAgLTMyLDE1ICszMiwxMCBAQAogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKICNpbmNsdWRlIDxtZWRpYS9yZHMuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCi0vKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsKLQkweDIwID4+IDEsCi0JMHgyMiA+PiAxLAotCUkyQ19DTElFTlRfRU5ELAotfTsKLQotSTJDX0NMSUVOVF9JTlNNT0Q7CiAKIC8qIGluc21vZCBvcHRpb25zICovCiBzdGF0aWMgdW5zaWduZWQgaW50IGRlYnVnOwpAQCAtNzIsOSArNjcsOCBAQAogI2RlZmluZSBkcHJpbnRrICAgICBpZiAoZGVidWcpIHByaW50awogCiBzdHJ1Y3Qgc2FhNjU4OCB7Ci0Jc3RydWN0IGkyY19jbGllbnQgY2xpZW50OwotCXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwotCXN0cnVjdCB0aW1lcl9saXN0IHRpbWVyOworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKKwlzdHJ1Y3QgZGVsYXllZF93b3JrIHdvcms7CiAJc3BpbmxvY2tfdCBsb2NrOwogCXVuc2lnbmVkIGNoYXIgKmJ1ZmZlcjsKIAl1bnNpZ25lZCBpbnQgYnVmX3NpemU7CkBAIC04Niw4ICs4MCwxMCBAQAogCWludCBkYXRhX2F2YWlsYWJsZV9mb3JfcmVhZDsKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2RyaXZlciBkcml2ZXI7Ci1zdGF0aWMgc3RydWN0IGkyY19jbGllbnQgY2xpZW50X3RlbXBsYXRlOworc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2FhNjU4OCAqdG9fc2FhNjU4OChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBzYWE2NTg4LCBzZCk7Cit9CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIApAQCAtMjU4LDYgKzI1NCw3IEBACiAKIHN0YXRpYyB2b2lkIHNhYTY1ODhfaTJjX3BvbGwoc3RydWN0IHNhYTY1ODggKnMpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJnMtPnNkKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCXVuc2lnbmVkIGNoYXIgdG1wYnVmWzZdOwogCXVuc2lnbmVkIGNoYXIgYmxvY2tudW07CkBAIC0yNjUsNyArMjYyLDcgQEAKIAogCS8qIEFsdGhvdWdoIHdlIG9ubHkgbmVlZCAzIGJ5dGVzLCB3ZSBoYXZlIHRvIHJlYWQgYXQgbGVhc3QgNi4KIAkgICBTQUE2NTg4IHJldHVybnMgZ2FyYmFnZSBvdGhlcndpc2UgKi8KLQlpZiAoNiAhPSBpMmNfbWFzdGVyX3JlY3YoJnMtPmNsaWVudCwgJnRtcGJ1ZlswXSwgNikpIHsKKwlpZiAoNiAhPSBpMmNfbWFzdGVyX3JlY3YoY2xpZW50LCAmdG1wYnVmWzBdLCA2KSkgewogCQlpZiAoZGVidWcgPiAxKQogCQkJZHByaW50ayhQUkVGSVggInJlYWQgZXJyb3IhXG4iKTsKIAkJcmV0dXJuOwpAQCAtMzE2LDIzICszMTMsMTcgQEAKIAl3YWtlX3VwX2ludGVycnVwdGlibGUoJnMtPnJlYWRfcXVldWUpOwogfQogCi1zdGF0aWMgdm9pZCBzYWE2NTg4X3RpbWVyKHVuc2lnbmVkIGxvbmcgZGF0YSkKLXsKLQlzdHJ1Y3Qgc2FhNjU4OCAqcyA9IChzdHJ1Y3Qgc2FhNjU4OCAqKWRhdGE7Ci0KLQlzY2hlZHVsZV93b3JrKCZzLT53b3JrKTsKLX0KLQogc3RhdGljIHZvaWQgc2FhNjU4OF93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlzdHJ1Y3Qgc2FhNjU4OCAqcyA9IGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3Qgc2FhNjU4OCwgd29yayk7CisJc3RydWN0IHNhYTY1ODggKnMgPSBjb250YWluZXJfb2Yod29yaywgc3RydWN0IHNhYTY1ODgsIHdvcmsud29yayk7CiAKIAlzYWE2NTg4X2kyY19wb2xsKHMpOwotCW1vZF90aW1lcigmcy0+dGltZXIsIGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKDIwKSk7CisJc2NoZWR1bGVfZGVsYXllZF93b3JrKCZzLT53b3JrLCBtc2Vjc190b19qaWZmaWVzKDIwKSk7CiB9CiAKIHN0YXRpYyBpbnQgc2FhNjU4OF9jb25maWd1cmUoc3RydWN0IHNhYTY1ODggKnMpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoJnMtPnNkKTsKIAl1bnNpZ25lZCBjaGFyIGJ1ZlszXTsKIAlpbnQgcmM7CiAKQEAgLTM4MCw3ICszNzEsOCBAQAogCWRwcmludGsoUFJFRklYICJ3cml0aW5nOiAwdz0weCUwMnggMXc9MHglMDJ4IDJ3PTB4JTAyeFxuIiwKIAkJYnVmWzBdLCBidWZbMV0sIGJ1ZlsyXSk7CiAKLQlpZiAoMyAhPSAocmMgPSBpMmNfbWFzdGVyX3NlbmQoJnMtPmNsaWVudCwgYnVmLCAzKSkpCisJcmMgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBidWYsIDMpOworCWlmIChyYyAhPSAzKQogCQlwcmludGsoUFJFRklYICJpMmMgaS9vIGVycm9yOiByYyA9PSAlZCAoc2hvdWxkIGJlIDMpXG4iLCByYyk7CiAKIAlyZXR1cm4gMDsKQEAgLTM4OCw3MCArMzgwLDEwIEBACiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGludCBzYWE2NTg4X2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIGludCBhZGRyLCBpbnQga2luZCkKK3N0YXRpYyBsb25nIHNhYTY1ODhfaW9jdGwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQogewotCXN0cnVjdCBzYWE2NTg4ICpzOwotCWNsaWVudF90ZW1wbGF0ZS5hZGFwdGVyID0gYWRhcDsKLQljbGllbnRfdGVtcGxhdGUuYWRkciA9IGFkZHI7Ci0KLQlwcmludGsoUFJFRklYICJjaGlwIGZvdW5kIEAgMHgleFxuIiwgYWRkciA8PCAxKTsKLQotCWlmIChOVUxMID09IChzID0ga21hbGxvYyhzaXplb2YoKnMpLCBHRlBfS0VSTkVMKSkpCi0JCXJldHVybiAtRU5PTUVNOwotCi0Jcy0+YnVmX3NpemUgPSBidWZibG9ja3MgKiAzOwotCi0JaWYgKE5VTEwgPT0gKHMtPmJ1ZmZlciA9IGttYWxsb2Mocy0+YnVmX3NpemUsIEdGUF9LRVJORUwpKSkgewotCQlrZnJlZShzKTsKLQkJcmV0dXJuIC1FTk9NRU07Ci0JfQotCXNwaW5fbG9ja19pbml0KCZzLT5sb2NrKTsKLQlzLT5jbGllbnQgPSBjbGllbnRfdGVtcGxhdGU7Ci0Jcy0+YmxvY2tfY291bnQgPSAwOwotCXMtPndyX2luZGV4ID0gMDsKLQlzLT5yZF9pbmRleCA9IDA7Ci0Jcy0+bGFzdF9ibG9ja251bSA9IDB4ZmY7Ci0JaW5pdF93YWl0cXVldWVfaGVhZCgmcy0+cmVhZF9xdWV1ZSk7Ci0Jcy0+ZGF0YV9hdmFpbGFibGVfZm9yX3JlYWQgPSAwOwotCWkyY19zZXRfY2xpZW50ZGF0YSgmcy0+Y2xpZW50LCBzKTsKLQlpMmNfYXR0YWNoX2NsaWVudCgmcy0+Y2xpZW50KTsKLQotCXNhYTY1ODhfY29uZmlndXJlKHMpOwotCi0JLyogc3RhcnQgcG9sbGluZyB2aWEgZXZlbnRkICovCi0JSU5JVF9XT1JLKCZzLT53b3JrLCBzYWE2NTg4X3dvcmspOwotCWluaXRfdGltZXIoJnMtPnRpbWVyKTsKLQlzLT50aW1lci5mdW5jdGlvbiA9IHNhYTY1ODhfdGltZXI7Ci0Jcy0+dGltZXIuZGF0YSA9ICh1bnNpZ25lZCBsb25nKXM7Ci0Jc2NoZWR1bGVfd29yaygmcy0+d29yayk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2FhNjU4OF9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCi17Ci0JaWYgKGFkYXAtPmNsYXNzICYgSTJDX0NMQVNTX1RWX0FOQUxPRykKLQkJcmV0dXJuIGkyY19wcm9iZShhZGFwLCAmYWRkcl9kYXRhLCBzYWE2NTg4X2F0dGFjaCk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2FhNjU4OF9kZXRhY2goc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3Qgc2FhNjU4OCAqcyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JZGVsX3RpbWVyX3N5bmMoJnMtPnRpbWVyKTsKLQlmbHVzaF9zY2hlZHVsZWRfd29yaygpOwotCi0JaTJjX2RldGFjaF9jbGllbnQoY2xpZW50KTsKLQlrZnJlZShzLT5idWZmZXIpOwotCWtmcmVlKHMpOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHNhYTY1ODhfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBpbnQgY21kLAotCQkJCQkJCXZvaWQgKmFyZykKLXsKLQlzdHJ1Y3Qgc2FhNjU4OCAqcyA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCXN0cnVjdCByZHNfY29tbWFuZCAqYSA9IChzdHJ1Y3QgcmRzX2NvbW1hbmQgKilhcmc7CisJc3RydWN0IHNhYTY1ODggKnMgPSB0b19zYWE2NTg4KHNkKTsKKwlzdHJ1Y3QgcmRzX2NvbW1hbmQgKmEgPSBhcmc7CiAKIAlzd2l0Y2ggKGNtZCkgewogCQkvKiAtLS0gb3BlbigpIGZvciAvZGV2L3JhZGlvIC0tLSAqLwpAQCAtNDc5LDQ1ICs0MTEsOTQgQEAKIAogCWRlZmF1bHQ6CiAJCS8qIG5vdGhpbmcgKi8KLQkJYnJlYWs7CisJCXJldHVybiAtRU5PSU9DVExDTUQ7CiAJfQogCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNhYTY1ODhfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfU0FBNjU4OCwgMCk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgc2FhNjU4OF9jb3JlX29wcyA9IHsKKwkuZ19jaGlwX2lkZW50ID0gc2FhNjU4OF9nX2NoaXBfaWRlbnQsCisJLmlvY3RsID0gc2FhNjU4OF9pb2N0bCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHNhYTY1ODhfb3BzID0geworCS5jb3JlID0gJnNhYTY1ODhfY29yZV9vcHMsCit9OworCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCisKK3N0YXRpYyBpbnQgc2FhNjU4OF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorCQkJIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKK3sKKwlzdHJ1Y3Qgc2FhNjU4OCAqczsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOworCisJdjRsX2luZm8oY2xpZW50LCAic2FhNjU4OCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOworCisJcyA9IGt6YWxsb2Moc2l6ZW9mKCpzKSwgR0ZQX0tFUk5FTCk7CisJaWYgKHMgPT0gTlVMTCkKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzLT5idWZfc2l6ZSA9IGJ1ZmJsb2NrcyAqIDM7CisKKwlzLT5idWZmZXIgPSBrbWFsbG9jKHMtPmJ1Zl9zaXplLCBHRlBfS0VSTkVMKTsKKwlpZiAocy0+YnVmZmVyID09IE5VTEwpIHsKKwkJa2ZyZWUocyk7CisJCXJldHVybiAtRU5PTUVNOworCX0KKwlzZCA9ICZzLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmc2FhNjU4OF9vcHMpOworCXNwaW5fbG9ja19pbml0KCZzLT5sb2NrKTsKKwlzLT5ibG9ja19jb3VudCA9IDA7CisJcy0+d3JfaW5kZXggPSAwOworCXMtPnJkX2luZGV4ID0gMDsKKwlzLT5sYXN0X2Jsb2NrbnVtID0gMHhmZjsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZzLT5yZWFkX3F1ZXVlKTsKKwlzLT5kYXRhX2F2YWlsYWJsZV9mb3JfcmVhZCA9IDA7CisKKwlzYWE2NTg4X2NvbmZpZ3VyZShzKTsKKworCS8qIHN0YXJ0IHBvbGxpbmcgdmlhIGV2ZW50ZCAqLworCUlOSVRfREVMQVlFRF9XT1JLKCZzLT53b3JrLCBzYWE2NTg4X3dvcmspOworCXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmcy0+d29yaywgMCk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FhNjU4OF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IHNhYTY1ODggKnMgPSB0b19zYWE2NTg4KHNkKTsKKworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKworCWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmcy0+d29yayk7CisKKwlrZnJlZShzLT5idWZmZXIpOworCWtmcmVlKHMpOworCXJldHVybiAwOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgZHJpdmVyID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lID0gInNhYTY1ODgiLAotCX0sCi0JLmlkID0gLTEsCQkvKiBGSVhNRSAqLwotCS5hdHRhY2hfYWRhcHRlciA9IHNhYTY1ODhfcHJvYmUsCi0JLmRldGFjaF9jbGllbnQgPSBzYWE2NTg4X2RldGFjaCwKLQkuY29tbWFuZCA9IHNhYTY1ODhfY29tbWFuZCwKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzYWE2NTg4X2lkW10gPSB7CisJeyAic2FhNjU4OCIsIDAgfSwKKwl7IH0KIH07CitNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywgc2FhNjU4OF9pZCk7CiAKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBjbGllbnRfdGVtcGxhdGUgPSB7CitzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAic2FhNjU4OCIsCi0JLmRyaXZlciA9ICZkcml2ZXIsCisJLnByb2JlID0gc2FhNjU4OF9wcm9iZSwKKwkucmVtb3ZlID0gc2FhNjU4OF9yZW1vdmUsCisJLmlkX3RhYmxlID0gc2FhNjU4OF9pZCwKIH07Ci0KLXN0YXRpYyBpbnQgX19pbml0IHNhYTY1ODhfaW5pdF9tb2R1bGUodm9pZCkKLXsKLQlyZXR1cm4gaTJjX2FkZF9kcml2ZXIoJmRyaXZlcik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9fZXhpdCBzYWE2NTg4X2NsZWFudXBfbW9kdWxlKHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmRyaXZlcik7Ci19Ci0KLW1vZHVsZV9pbml0KHNhYTY1ODhfaW5pdF9tb2R1bGUpOwotbW9kdWxlX2V4aXQoc2FhNjU4OF9jbGVhbnVwX21vZHVsZSk7Ci0KLS8qCi0gKiBPdmVycmlkZXMgZm9yIEVtYWNzIHNvIHRoYXQgd2UgZm9sbG93IExpbnVzJ3MgdGFiYmluZyBzdHlsZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICogTG9jYWwgdmFyaWFibGVzOgotICogYy1iYXNpYy1vZmZzZXQ6IDgKLSAqIEVuZDoKLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTEwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTAuYwppbmRleCAzNzg2MDY5Li5kZjRlMDhkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTAuYwpAQCAtMzMsMTUgKzMzLDE2IEBACiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJQaGlsaXBzIFNBQTcxMTAgdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKIE1PRFVMRV9BVVRIT1IoIlBhdWxpbmUgTWlkZGVsaW5rIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKKwogc3RhdGljIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwpAQCAtNTIsOSArNTMsMTAgQEAKICNkZWZpbmUgU0FBNzExMF9OUl9SRUcJCTB4MzUKIAogc3RydWN0IHNhYTcxMTAgeworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAl1OCByZWdbU0FBNzExMF9OUl9SRUddOwogCi0JaW50IG5vcm07CisJdjRsMl9zdGRfaWQgbm9ybTsKIAlpbnQgaW5wdXQ7CiAJaW50IGVuYWJsZTsKIAlpbnQgYnJpZ2h0OwpAQCAtNjUsMjAgKzY3LDI4IEBACiAJd2FpdF9xdWV1ZV9oZWFkX3Qgd3E7CiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzYWE3MTEwICp0b19zYWE3MTEwKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IHNhYTcxMTAsIHNkKTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIEkyQyBzdXBwb3J0IGZ1bmN0aW9ucwkJCQkJCSAgICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgaW50IHNhYTcxMTBfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKK3N0YXRpYyBpbnQgc2FhNzExMF93cml0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsIHU4IHZhbHVlKQogewotCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gdG9fc2FhNzExMChzZCk7CiAKIAlkZWNvZGVyLT5yZWdbcmVnXSA9IHZhbHVlOwogCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNzExMF93cml0ZV9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKK3N0YXRpYyBpbnQgc2FhNzExMF93cml0ZV9ibG9jayhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJc3RydWN0IHNhYTcxMTAgKmRlY29kZXIgPSB0b19zYWE3MTEwKHNkKTsKIAlpbnQgcmV0ID0gLTE7CiAJdTggcmVnID0gKmRhdGE7CQkvKiBmaXJzdCByZWdpc3RlciB0byB3cml0ZSB0byAqLwogCkBAIC04OSwxNSArOTksMTMgQEAKIAkvKiB0aGUgc2FhNzExMCBoYXMgYW4gYXV0b2luY3JlbWVudCBmdW5jdGlvbiwgdXNlIGl0IGlmCiAJICogdGhlIGFkYXB0ZXIgdW5kZXJzdGFuZHMgcmF3IEkyQyAqLwogCWlmIChpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpIHsKLQkJc3RydWN0IHNhYTcxMTAgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQogCQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBkYXRhLCBsZW4pOwogCiAJCS8qIENhY2hlIHRoZSB3cml0dGVuIGRhdGEgKi8KIAkJbWVtY3B5KGRlY29kZXItPnJlZyArIHJlZywgZGF0YSArIDEsIGxlbiAtIDEpOwogCX0gZWxzZSB7CiAJCWZvciAoKytkYXRhLCAtLWxlbjsgbGVuOyBsZW4tLSkgewotCQkJcmV0ID0gc2FhNzExMF93cml0ZShjbGllbnQsIHJlZysrLCAqZGF0YSsrKTsKKwkJCXJldCA9IHNhYTcxMTBfd3JpdGUoc2QsIHJlZysrLCAqZGF0YSsrKTsKIAkJCWlmIChyZXQgPCAwKQogCQkJCWJyZWFrOwogCQl9CkBAIC0xMDYsOCArMTE0LDEwIEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgc2FhNzExMF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW5saW5lIGludCBzYWE3MTEwX3JlYWQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKIAlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZShjbGllbnQpOwogfQogCkBAIC0xMTUsMTEgKzEyNSwxMSBAQAogLyogU0FBNzExMCBmdW5jdGlvbnMJCQkJCQkJICAgKi8KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLSNkZWZpbmUgRlJFU1BfMDZIX0NPTVBTVCAweDAzCS8vMHgxMwotI2RlZmluZSBGUkVTUF8wNkhfU1ZJREVPIDB4ODMJLy8weEMwCisjZGVmaW5lIEZSRVNQXzA2SF9DT01QU1QgMHgwMwkvKjB4MTMqLworI2RlZmluZSBGUkVTUF8wNkhfU1ZJREVPIDB4ODMJLyoweEMwKi8KIAogCi1zdGF0aWMgaW50IHNhYTcxMTBfc2VsbXV4KHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGludCBjaGFuKQorc3RhdGljIGludCBzYWE3MTEwX3NlbG11eChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBpbnQgY2hhbikKIHsKIAlzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBtb2Rlc1s5XVs4XSA9IHsKIAkJLyogbW9kZSAwICovCkBAIC0xNTAsMTcgKzE2MCwxNyBAQAogCQl7RlJFU1BfMDZIX1NWSURFTywgMHgzQywgMHgyNywgMHhDMSwgMHgyMywKIAkJCSAgICAgIDB4NDQsIDB4NzUsIDB4MjF9CiAJfTsKLQlzdHJ1Y3Qgc2FhNzExMCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gdG9fc2FhNzExMChzZCk7CiAJY29uc3QgdW5zaWduZWQgY2hhciAqcHRyID0gbW9kZXNbY2hhbl07CiAKLQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwNiwgcHRyWzBdKTsJLyogTHVtaW5hbmNlIGNvbnRyb2wgICAgKi8KLQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgyMCwgcHRyWzFdKTsJLyogQW5hbG9nIENvbnRyb2wgIzEgICAgKi8KLQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgyMSwgcHRyWzJdKTsJLyogQW5hbG9nIENvbnRyb2wgIzIgICAgKi8KLQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgyMiwgcHRyWzNdKTsJLyogTWl4ZXIgQ29udHJvbCAjMSAgICAgKi8KLQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgyQywgcHRyWzRdKTsJLyogTWl4ZXIgQ29udHJvbCAjMiAgICAgKi8KLQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgzMCwgcHRyWzVdKTsJLyogQURDcyBnYWluIGNvbnRyb2wgICAgKi8KLQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgzMSwgcHRyWzZdKTsJLyogTWl4ZXIgQ29udHJvbCAjMyAgICAgKi8KLQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgyMSwgcHRyWzddKTsJLyogQW5hbG9nIENvbnRyb2wgIzIgICAgKi8KKwlzYWE3MTEwX3dyaXRlKHNkLCAweDA2LCBwdHJbMF0pOwkvKiBMdW1pbmFuY2UgY29udHJvbCAgICAqLworCXNhYTcxMTBfd3JpdGUoc2QsIDB4MjAsIHB0clsxXSk7CS8qIEFuYWxvZyBDb250cm9sICMxICAgICovCisJc2FhNzExMF93cml0ZShzZCwgMHgyMSwgcHRyWzJdKTsJLyogQW5hbG9nIENvbnRyb2wgIzIgICAgKi8KKwlzYWE3MTEwX3dyaXRlKHNkLCAweDIyLCBwdHJbM10pOwkvKiBNaXhlciBDb250cm9sICMxICAgICAqLworCXNhYTcxMTBfd3JpdGUoc2QsIDB4MkMsIHB0cls0XSk7CS8qIE1peGVyIENvbnRyb2wgIzIgICAgICovCisJc2FhNzExMF93cml0ZShzZCwgMHgzMCwgcHRyWzVdKTsJLyogQURDcyBnYWluIGNvbnRyb2wgICAgKi8KKwlzYWE3MTEwX3dyaXRlKHNkLCAweDMxLCBwdHJbNl0pOwkvKiBNaXhlciBDb250cm9sICMzICAgICAqLworCXNhYTcxMTBfd3JpdGUoc2QsIDB4MjEsIHB0cls3XSk7CS8qIEFuYWxvZyBDb250cm9sICMyICAgICovCiAJZGVjb2Rlci0+aW5wdXQgPSBjaGFuOwogCiAJcmV0dXJuIDA7CkBAIC0xNzYsMjQ2ICsxODYsMjYwIEBACiAJLyogMHgzMCAqLyAweDQ0LCAweDcxLCAweDAyLCAweDhDLCAweDAyCiB9OwogCi1zdGF0aWMgaW50IGRldGVybWluZV9ub3JtKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgdjRsMl9zdGRfaWQgZGV0ZXJtaW5lX25vcm0oc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKIAlERUZJTkVfV0FJVCh3YWl0KTsKLQlzdHJ1Y3Qgc2FhNzExMCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gdG9fc2FhNzExMChzZCk7CiAJaW50IHN0YXR1czsKIAogCS8qIG1vZGUgY2hhbmdlZCwgc3RhcnQgYXV0b21hdGljIGRldGVjdGlvbiAqLwotCXNhYTcxMTBfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0c2VxLCBzaXplb2YoaW5pdHNlcSkpOwotCXNhYTcxMTBfc2VsbXV4KGNsaWVudCwgZGVjb2Rlci0+aW5wdXQpOworCXNhYTcxMTBfd3JpdGVfYmxvY2soc2QsIGluaXRzZXEsIHNpemVvZihpbml0c2VxKSk7CisJc2FhNzExMF9zZWxtdXgoc2QsIGRlY29kZXItPmlucHV0KTsKIAlwcmVwYXJlX3RvX3dhaXQoJmRlY29kZXItPndxLCAmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOwogCXNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcygyNTApKTsKIAlmaW5pc2hfd2FpdCgmZGVjb2Rlci0+d3EsICZ3YWl0KTsKLQlzdGF0dXMgPSBzYWE3MTEwX3JlYWQoY2xpZW50KTsKKwlzdGF0dXMgPSBzYWE3MTEwX3JlYWQoc2QpOwogCWlmIChzdGF0dXMgJiAweDQwKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1cz0weCUwMnggKG5vIHNpZ25hbClcbiIsIHN0YXR1cyk7Ci0JCXJldHVybiBkZWNvZGVyLT5ub3JtOwkvLyBubyBjaGFuZ2UKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3RhdHVzPTB4JTAyeCAobm8gc2lnbmFsKVxuIiwgc3RhdHVzKTsKKwkJcmV0dXJuIGRlY29kZXItPm5vcm07CS8qIG5vIGNoYW5nZSovCiAJfQogCWlmICgoc3RhdHVzICYgMykgPT0gMCkgewotCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwNiwgMHg4Myk7CisJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MDYsIDB4ODMpOwogCQlpZiAoc3RhdHVzICYgMHgyMCkgewotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzPTB4JTAyeCAoTlRTQy9ubyBjb2xvcilcbiIsIHN0YXR1cyk7Ci0JCQkvL3NhYTcxMTBfd3JpdGUoY2xpZW50LDB4MkUsMHg4MSk7Ci0JCQlyZXR1cm4gVklERU9fTU9ERV9OVFNDOworCQkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3RhdHVzPTB4JTAyeCAoTlRTQy9ubyBjb2xvcilcbiIsIHN0YXR1cyk7CisJCQkvKnNhYTcxMTBfd3JpdGUoc2QsMHgyRSwweDgxKTsqLworCQkJcmV0dXJuIFY0TDJfU1REX05UU0M7CiAJCX0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzPTB4JTAyeCAoUEFML25vIGNvbG9yKVxuIiwgc3RhdHVzKTsKLQkJLy9zYWE3MTEwX3dyaXRlKGNsaWVudCwweDJFLDB4OUEpOwotCQlyZXR1cm4gVklERU9fTU9ERV9QQUw7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInN0YXR1cz0weCUwMnggKFBBTC9ubyBjb2xvcilcbiIsIHN0YXR1cyk7CisJCS8qc2FhNzExMF93cml0ZShzZCwweDJFLDB4OUEpOyovCisJCXJldHVybiBWNEwyX1NURF9QQUw7CiAJfQotCS8vc2FhNzExMF93cml0ZShjbGllbnQsMHgwNiwweDAzKTsKKwkvKnNhYTcxMTBfd3JpdGUoc2QsMHgwNiwweDAzKTsqLwogCWlmIChzdGF0dXMgJiAweDIwKSB7CS8qIDYwSHogKi8KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzPTB4JTAyeCAoTlRTQylcbiIsIHN0YXR1cyk7Ci0JCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBELCAweDg2KTsKLQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEYsIDB4NTApOwotCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgxMSwgMHgyQyk7Ci0JCS8vc2FhNzExMF93cml0ZShjbGllbnQsMHgyRSwweDgxKTsKLQkJcmV0dXJuIFZJREVPX01PREVfTlRTQzsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3RhdHVzPTB4JTAyeCAoTlRTQylcbiIsIHN0YXR1cyk7CisJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MEQsIDB4ODYpOworCQlzYWE3MTEwX3dyaXRlKHNkLCAweDBGLCAweDUwKTsKKwkJc2FhNzExMF93cml0ZShzZCwgMHgxMSwgMHgyQyk7CisJCS8qc2FhNzExMF93cml0ZShzZCwweDJFLDB4ODEpOyovCisJCXJldHVybiBWNEwyX1NURF9OVFNDOwogCX0KIAogCS8qIDUwSHogLT4gUEFML1NFQ0FNICovCi0Jc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEQsIDB4ODYpOwotCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBGLCAweDEwKTsKLQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgxMSwgMHg1OSk7Ci0JLy9zYWE3MTEwX3dyaXRlKGNsaWVudCwweDJFLDB4OUEpOworCXNhYTcxMTBfd3JpdGUoc2QsIDB4MEQsIDB4ODYpOworCXNhYTcxMTBfd3JpdGUoc2QsIDB4MEYsIDB4MTApOworCXNhYTcxMTBfd3JpdGUoc2QsIDB4MTEsIDB4NTkpOworCS8qc2FhNzExMF93cml0ZShzZCwweDJFLDB4OUEpOyovCiAKIAlwcmVwYXJlX3RvX3dhaXQoJmRlY29kZXItPndxLCAmd2FpdCwgVEFTS19VTklOVEVSUlVQVElCTEUpOwogCXNjaGVkdWxlX3RpbWVvdXQobXNlY3NfdG9famlmZmllcygyNTApKTsKIAlmaW5pc2hfd2FpdCgmZGVjb2Rlci0+d3EsICZ3YWl0KTsKIAotCXN0YXR1cyA9IHNhYTcxMTBfcmVhZChjbGllbnQpOworCXN0YXR1cyA9IHNhYTcxMTBfcmVhZChzZCk7CiAJaWYgKChzdGF0dXMgJiAweDAzKSA9PSAweDAxKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1cz0weCUwMnggKFNFQ0FNKVxuIiwgc3RhdHVzKTsKLQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEQsIDB4ODcpOwotCQlyZXR1cm4gVklERU9fTU9ERV9TRUNBTTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3RhdHVzPTB4JTAyeCAoU0VDQU0pXG4iLCBzdGF0dXMpOworCQlzYWE3MTEwX3dyaXRlKHNkLCAweDBELCAweDg3KTsKKwkJcmV0dXJuIFY0TDJfU1REX1NFQ0FNOwogCX0KLQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM9MHglMDJ4IChQQUwpXG4iLCBzdGF0dXMpOwotCXJldHVybiBWSURFT19NT0RFX1BBTDsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJzdGF0dXM9MHglMDJ4IChQQUwpXG4iLCBzdGF0dXMpOworCXJldHVybiBWNEwyX1NURF9QQUw7CiB9CiAKLXN0YXRpYyBpbnQKLXNhYTcxMTBfY29tbWFuZCAoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJIHVuc2lnbmVkIGludCAgICAgICBjbWQsCi0JCSB2b2lkICAgICAgICAgICAgICAqYXJnKQorc3RhdGljIGludCBzYWE3MTEwX2dfaW5wdXRfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiAqcHN0YXR1cykKIHsKLQlzdHJ1Y3Qgc2FhNzExMCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCB2OworCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gdG9fc2FhNzExMChzZCk7CisJaW50IHJlcyA9IFY0TDJfSU5fU1RfTk9fU0lHTkFMOworCWludCBzdGF0dXMgPSBzYWE3MTEwX3JlYWQoc2QpOwogCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIDA6Ci0JCS8vc2FhNzExMF93cml0ZV9ibG9jayhjbGllbnQsIGluaXRzZXEsIHNpemVvZihpbml0c2VxKSk7Ci0JCWJyZWFrOworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInN0YXR1cz0weCUwMnggbm9ybT0lbGx4XG4iLAorCQkgICAgICAgc3RhdHVzLCAodW5zaWduZWQgbG9uZyBsb25nKWRlY29kZXItPm5vcm0pOworCWlmICghKHN0YXR1cyAmIDB4NDApKQorCQlyZXMgPSAwOworCWlmICghKHN0YXR1cyAmIDB4MDMpKQorCQlyZXMgfD0gVjRMMl9JTl9TVF9OT19DT0xPUjsKIAotCWNhc2UgREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTOgotCXsKLQkJc3RydWN0IHZpZGVvX2RlY29kZXJfY2FwYWJpbGl0eSAqZGMgPSBhcmc7CisJKnBzdGF0dXMgPSByZXM7CisJcmV0dXJuIDA7Cit9CiAKLQkJZGMtPmZsYWdzID0KLQkJICAgIFZJREVPX0RFQ09ERVJfUEFMIHwgVklERU9fREVDT0RFUl9OVFNDIHwKLQkJICAgIFZJREVPX0RFQ09ERVJfU0VDQU0gfCBWSURFT19ERUNPREVSX0FVVE87Ci0JCWRjLT5pbnB1dHMgPSBTQUE3MTEwX01BWF9JTlBVVDsKLQkJZGMtPm91dHB1dHMgPSBTQUE3MTEwX01BWF9PVVRQVVQ7Ci0JCWJyZWFrOwotCX0KK3N0YXRpYyBpbnQgc2FhNzExMF9xdWVyeXN0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCAqc3RkKQoreworCSoodjRsMl9zdGRfaWQgKilzdGQgPSBkZXRlcm1pbmVfbm9ybShzZCk7CisJcmV0dXJuIDA7Cit9CiAKLQljYXNlIERFQ09ERVJfR0VUX1NUQVRVUzoKLQl7Ci0JCWludCBzdGF0dXM7Ci0JCWludCByZXMgPSAwOworc3RhdGljIGludCBzYWE3MTEwX3Nfc3RkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkIHN0ZCkKK3sKKwlzdHJ1Y3Qgc2FhNzExMCAqZGVjb2RlciA9IHRvX3NhYTcxMTAoc2QpOwogCi0JCXN0YXR1cyA9IHNhYTcxMTBfcmVhZChjbGllbnQpOwotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGF0dXM9MHglMDJ4IG5vcm09JWRcbiIsCi0JCQkgICAgICAgc3RhdHVzLCBkZWNvZGVyLT5ub3JtKTsKLQkJaWYgKCEoc3RhdHVzICYgMHg0MCkpCi0JCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfR09PRDsKLQkJaWYgKHN0YXR1cyAmIDB4MDMpCi0JCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfQ09MT1I7Ci0KLQkJc3dpdGNoIChkZWNvZGVyLT5ub3JtKSB7Ci0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX05UU0M7Ci0JCQlicmVhazsKLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19QQUw7Ci0JCQlicmVhazsKLQkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX1NFQ0FNOwotCQkJYnJlYWs7Ci0JCX0KLQkJKihpbnQgKikgYXJnID0gcmVzOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfU0VUX05PUk06Ci0JCXYgPSAqKGludCAqKSBhcmc7Ci0JCWlmIChkZWNvZGVyLT5ub3JtICE9IHYpIHsKLQkJCWRlY29kZXItPm5vcm0gPSB2OwotCQkJLy9zYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwNiwgMHgwMyk7Ci0JCQlzd2l0Y2ggKHYpIHsKLQkJCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBELCAweDg2KTsKLQkJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRiwgMHg1MCk7Ci0JCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MTEsIDB4MkMpOwotCQkJCS8vc2FhNzExMF93cml0ZShjbGllbnQsIDB4MkUsIDB4ODEpOwotCQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvIE5UU0NcbiIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRCwgMHg4Nik7Ci0JCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEYsIDB4MTApOwotCQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDExLCAweDU5KTsKLQkJCQkvL3NhYTcxMTBfd3JpdGUoY2xpZW50LCAweDJFLCAweDlBKTsKLQkJCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzd2l0Y2hlZCB0byBQQUxcbiIpOwotCQkJCWJyZWFrOwotCQkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgotCQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDBELCAweDg3KTsKLQkJCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRiwgMHgxMCk7Ci0JCQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MTEsIDB4NTkpOwotCQkJCS8vc2FhNzExMF93cml0ZShjbGllbnQsIDB4MkUsIDB4OUEpOwotCQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvIFNFQ0FNXG4iKTsKLQkJCQlicmVhazsKLQkJCWNhc2UgVklERU9fTU9ERV9BVVRPOgotCQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN3aXRjaGVkIHRvIEFVVE9cbiIpOwotCQkJCWRlY29kZXItPm5vcm0gPSBkZXRlcm1pbmVfbm9ybShjbGllbnQpOwotCQkJCSooaW50ICopIGFyZyA9IGRlY29kZXItPm5vcm07Ci0JCQkJYnJlYWs7Ci0JCQlkZWZhdWx0OgotCQkJCXJldHVybiAtRVBFUk07Ci0JCQl9Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgotCQl2ID0gKihpbnQgKikgYXJnOwotCQlpZiAodiA8IDAgfHwgdiA+PSBTQUE3MTEwX01BWF9JTlBVVCkgewotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaW5wdXQ9JWQgbm90IGF2YWlsYWJsZVxuIiwgdik7CisJaWYgKGRlY29kZXItPm5vcm0gIT0gc3RkKSB7CisJCWRlY29kZXItPm5vcm0gPSBzdGQ7CisJCS8qc2FhNzExMF93cml0ZShzZCwgMHgwNiwgMHgwMyk7Ki8KKwkJaWYgKHN0ZCAmIFY0TDJfU1REX05UU0MpIHsKKwkJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MEQsIDB4ODYpOworCQkJc2FhNzExMF93cml0ZShzZCwgMHgwRiwgMHg1MCk7CisJCQlzYWE3MTEwX3dyaXRlKHNkLCAweDExLCAweDJDKTsKKwkJCS8qc2FhNzExMF93cml0ZShzZCwgMHgyRSwgMHg4MSk7Ki8KKwkJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInN3aXRjaGVkIHRvIE5UU0NcbiIpOworCQl9IGVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1BBTCkgeworCQkJc2FhNzExMF93cml0ZShzZCwgMHgwRCwgMHg4Nik7CisJCQlzYWE3MTEwX3dyaXRlKHNkLCAweDBGLCAweDEwKTsKKwkJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MTEsIDB4NTkpOworCQkJLypzYWE3MTEwX3dyaXRlKHNkLCAweDJFLCAweDlBKTsqLworCQkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3dpdGNoZWQgdG8gUEFMXG4iKTsKKwkJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9TRUNBTSkgeworCQkJc2FhNzExMF93cml0ZShzZCwgMHgwRCwgMHg4Nyk7CisJCQlzYWE3MTEwX3dyaXRlKHNkLCAweDBGLCAweDEwKTsKKwkJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MTEsIDB4NTkpOworCQkJLypzYWE3MTEwX3dyaXRlKHNkLCAweDJFLCAweDlBKTsqLworCQkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3dpdGNoZWQgdG8gU0VDQU1cbiIpOworCQl9IGVsc2UgewogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KLQkJaWYgKGRlY29kZXItPmlucHV0ICE9IHYpIHsKLQkJCXNhYTcxMTBfc2VsbXV4KGNsaWVudCwgdik7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzd2l0Y2hlZCB0byBpbnB1dD0lZFxuIiwgdik7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIERFQ09ERVJfU0VUX09VVFBVVDoKLQkJdiA9ICooaW50ICopIGFyZzsKLQkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KLQkJaWYgKHYgIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQotCWNhc2UgREVDT0RFUl9FTkFCTEVfT1VUUFVUOgotCQl2ID0gKihpbnQgKikgYXJnOwotCQlpZiAoZGVjb2Rlci0+ZW5hYmxlICE9IHYpIHsKLQkJCWRlY29kZXItPmVuYWJsZSA9IHY7Ci0JCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRSwgdiA/IDB4MTggOiAweDgwKTsKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIllVViAlc1xuIiwgdiA/ICJvbiIgOiAib2ZmIik7Ci0JCX0KLQkJYnJlYWs7Ci0KLQljYXNlIERFQ09ERVJfU0VUX1BJQ1RVUkU6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcGljID0gYXJnOwotCi0JCWlmIChkZWNvZGVyLT5icmlnaHQgIT0gcGljLT5icmlnaHRuZXNzKSB7Ci0JCQkvKiBXZSB3YW50IDAgdG8gMjU1IHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5icmlnaHQgPSBwaWMtPmJyaWdodG5lc3M7Ci0JCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgxOSwgZGVjb2Rlci0+YnJpZ2h0ID4+IDgpOwotCQl9Ci0JCWlmIChkZWNvZGVyLT5jb250cmFzdCAhPSBwaWMtPmNvbnRyYXN0KSB7Ci0JCQkvKiBXZSB3YW50IDAgdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5jb250cmFzdCA9IHBpYy0+Y29udHJhc3Q7Ci0JCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgxMywKLQkJCQkgICAgICBkZWNvZGVyLT5jb250cmFzdCA+PiA5KTsKLQkJfQotCQlpZiAoZGVjb2Rlci0+c2F0ICE9IHBpYy0+Y29sb3VyKSB7Ci0JCQkvKiBXZSB3YW50IDAgdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5zYXQgPSBwaWMtPmNvbG91cjsKLQkJCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDEyLCBkZWNvZGVyLT5zYXQgPj4gOSk7Ci0JCX0KLQkJaWYgKGRlY29kZXItPmh1ZSAhPSBwaWMtPmh1ZSkgewotCQkJLyogV2Ugd2FudCAtMTI4IHRvIDEyNyB3ZSBnZXQgMC02NTUzNSAqLwotCQkJZGVjb2Rlci0+aHVlID0gcGljLT5odWU7Ci0JCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwNywKLQkJCQkgICAgICAoZGVjb2Rlci0+aHVlID4+IDgpIC0gMTI4KTsKLQkJfQotCQlicmVhazsKIAl9CisJcmV0dXJuIDA7Cit9CiAKLQljYXNlIERFQ09ERVJfRFVNUDoKLQkJaWYgKCFkZWJ1ZykKLQkJCWJyZWFrOwotCQlmb3IgKHYgPSAwOyB2IDwgU0FBNzExMF9OUl9SRUc7IHYgKz0gMTYpIHsKLQkJCWludCBqOwotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiJTAyeDoiLCB2KTsKLQkJCWZvciAoaiA9IDA7IGogPCAxNiAmJiB2ICsgaiA8IFNBQTcxMTBfTlJfUkVHOyBqKyspCi0JCQkJcHJpbnRrKEtFUk5fQ09OVCAiICUwMngiLCBkZWNvZGVyLT5yZWdbdiArIGpdKTsKLQkJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Ci0JCX0KLQkJYnJlYWs7CitzdGF0aWMgaW50IHNhYTcxMTBfc19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQoreworCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gdG9fc2FhNzExMChzZCk7CiAKKwlpZiAocm91dGUtPmlucHV0IDwgMCB8fCByb3V0ZS0+aW5wdXQgPj0gU0FBNzExMF9NQVhfSU5QVVQpIHsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiaW5wdXQ9JWQgbm90IGF2YWlsYWJsZVxuIiwgcm91dGUtPmlucHV0KTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWlmIChkZWNvZGVyLT5pbnB1dCAhPSByb3V0ZS0+aW5wdXQpIHsKKwkJc2FhNzExMF9zZWxtdXgoc2QsIHJvdXRlLT5pbnB1dCk7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInN3aXRjaGVkIHRvIGlucHV0PSVkXG4iLCByb3V0ZS0+aW5wdXQpOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE3MTEwX3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCit7CisJc3RydWN0IHNhYTcxMTAgKmRlY29kZXIgPSB0b19zYWE3MTEwKHNkKTsKKworCWlmIChkZWNvZGVyLT5lbmFibGUgIT0gZW5hYmxlKSB7CisJCWRlY29kZXItPmVuYWJsZSA9IGVuYWJsZTsKKwkJc2FhNzExMF93cml0ZShzZCwgMHgwRSwgZW5hYmxlID8gMHgxOCA6IDB4ODApOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJZVVYgJXNcbiIsIGVuYWJsZSA/ICJvbiIgOiAib2ZmIik7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTcxMTBfcXVlcnljdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpCit7CisJc3dpdGNoIChxYy0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMjU1LCAxLCAxMjgpOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEyNywgMSwgNjQpOworCWNhc2UgVjRMMl9DSURfSFVFOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIC0xMjgsIDEyNywgMSwgMCk7CiAJZGVmYXVsdDoKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAidW5rbm93biBjb21tYW5kICUwOHhcbiIsIGNtZCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzYWE3MTEwX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCBzYWE3MTEwICpkZWNvZGVyID0gdG9fc2FhNzExMChzZCk7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQljdHJsLT52YWx1ZSA9IGRlY29kZXItPmJyaWdodDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJY3RybC0+dmFsdWUgPSBkZWNvZGVyLT5jb250cmFzdDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQljdHJsLT52YWx1ZSA9IGRlY29kZXItPnNhdDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9IVUU6CisJCWN0cmwtPnZhbHVlID0gZGVjb2Rlci0+aHVlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzExMF9zX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3Qgc2FhNzExMCAqZGVjb2RlciA9IHRvX3NhYTcxMTAoc2QpOworCisJc3dpdGNoIChjdHJsLT5pZCkgeworCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKKwkJaWYgKGRlY29kZXItPmJyaWdodCAhPSBjdHJsLT52YWx1ZSkgeworCQkJZGVjb2Rlci0+YnJpZ2h0ID0gY3RybC0+dmFsdWU7CisJCQlzYWE3MTEwX3dyaXRlKHNkLCAweDE5LCBkZWNvZGVyLT5icmlnaHQpOworCQl9CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CisJCWlmIChkZWNvZGVyLT5jb250cmFzdCAhPSBjdHJsLT52YWx1ZSkgeworCQkJZGVjb2Rlci0+Y29udHJhc3QgPSBjdHJsLT52YWx1ZTsKKwkJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MTMsIGRlY29kZXItPmNvbnRyYXN0KTsKKwkJfQorCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCWlmIChkZWNvZGVyLT5zYXQgIT0gY3RybC0+dmFsdWUpIHsKKwkJCWRlY29kZXItPnNhdCA9IGN0cmwtPnZhbHVlOworCQkJc2FhNzExMF93cml0ZShzZCwgMHgxMiwgZGVjb2Rlci0+c2F0KTsKKwkJfQorCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJaWYgKGRlY29kZXItPmh1ZSAhPSBjdHJsLT52YWx1ZSkgeworCQkJZGVjb2Rlci0+aHVlID0gY3RybC0+dmFsdWU7CisJCQlzYWE3MTEwX3dyaXRlKHNkLCAweDA3LCBkZWNvZGVyLT5odWUpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE3MTEwX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX1NBQTcxMTAsIDApOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi0vKgotICogR2VuZXJpYyBpMmMgcHJvYmUKLSAqIGNvbmNlcm5pbmcgdGhlIGFkZHJlc3NlczogaTJjIHdhbnRzIDcgYml0ICh3aXRob3V0IHRoZSByL3cgYml0KSwgc28gJz4+MScKLSAqLworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBzYWE3MTEwX2NvcmVfb3BzID0geworCS5nX2NoaXBfaWRlbnQgPSBzYWE3MTEwX2dfY2hpcF9pZGVudCwKKwkuZ19jdHJsID0gc2FhNzExMF9nX2N0cmwsCisJLnNfY3RybCA9IHNhYTcxMTBfc19jdHJsLAorCS5xdWVyeWN0cmwgPSBzYWE3MTEwX3F1ZXJ5Y3RybCwKK307CiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4OWMgPj4gMSwgMHg5ZSA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgc2FhNzExMF90dW5lcl9vcHMgPSB7CisJLnNfc3RkID0gc2FhNzExMF9zX3N0ZCwKK307CiAKLUkyQ19DTElFTlRfSU5TTU9EOworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl92aWRlb19vcHMgc2FhNzExMF92aWRlb19vcHMgPSB7CisJLnNfcm91dGluZyA9IHNhYTcxMTBfc19yb3V0aW5nLAorCS5zX3N0cmVhbSA9IHNhYTcxMTBfc19zdHJlYW0sCisJLnF1ZXJ5c3RkID0gc2FhNzExMF9xdWVyeXN0ZCwKKwkuZ19pbnB1dF9zdGF0dXMgPSBzYWE3MTEwX2dfaW5wdXRfc3RhdHVzLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgc2FhNzExMF9vcHMgPSB7CisJLmNvcmUgPSAmc2FhNzExMF9jb3JlX29wcywKKwkudHVuZXIgPSAmc2FhNzExMF90dW5lcl9vcHMsCisJLnZpZGVvID0gJnNhYTcxMTBfdmlkZW9fb3BzLAorfTsKKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGludCBzYWE3MTEwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHNhYTcxMTAgKmRlY29kZXI7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAlpbnQgcnY7CiAKIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCkBAIC00MjksNyArNDUzLDkgQEAKIAlkZWNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHNhYTcxMTApLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWRlY29kZXIpCiAJCXJldHVybiAtRU5PTUVNOwotCWRlY29kZXItPm5vcm0gPSBWSURFT19NT0RFX1BBTDsKKwlzZCA9ICZkZWNvZGVyLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmc2FhNzExMF9vcHMpOworCWRlY29kZXItPm5vcm0gPSBWNEwyX1NURF9QQUw7CiAJZGVjb2Rlci0+aW5wdXQgPSAwOwogCWRlY29kZXItPmVuYWJsZSA9IDE7CiAJZGVjb2Rlci0+YnJpZ2h0ID0gMzI3Njg7CkBAIC00MzcsMzAgKzQ2MywyOSBAQAogCWRlY29kZXItPmh1ZSA9IDMyNzY4OwogCWRlY29kZXItPnNhdCA9IDMyNzY4OwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJmRlY29kZXItPndxKTsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZWNvZGVyKTsKIAotCXJ2ID0gc2FhNzExMF93cml0ZV9ibG9jayhjbGllbnQsIGluaXRzZXEsIHNpemVvZihpbml0c2VxKSk7CisJcnYgPSBzYWE3MTEwX3dyaXRlX2Jsb2NrKHNkLCBpbml0c2VxLCBzaXplb2YoaW5pdHNlcSkpOwogCWlmIChydiA8IDApIHsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaW5pdCBzdGF0dXMgJWRcbiIsIHJ2KTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiaW5pdCBzdGF0dXMgJWRcbiIsIHJ2KTsKIAl9IGVsc2UgewogCQlpbnQgdmVyLCBzdGF0dXM7Ci0JCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDIxLCAweDEwKTsKLQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MGUsIDB4MTgpOwotCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRCwgMHgwNCk7Ci0JCXZlciA9IHNhYTcxMTBfcmVhZChjbGllbnQpOwotCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRCwgMHgwNik7Ci0JCS8vbWRlbGF5KDE1MCk7Ci0JCXN0YXR1cyA9IHNhYTcxMTBfcmVhZChjbGllbnQpOwotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJ2ZXJzaW9uICV4LCBzdGF0dXM9MHglMDJ4XG4iLAorCQlzYWE3MTEwX3dyaXRlKHNkLCAweDIxLCAweDEwKTsKKwkJc2FhNzExMF93cml0ZShzZCwgMHgwZSwgMHgxOCk7CisJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MEQsIDB4MDQpOworCQl2ZXIgPSBzYWE3MTEwX3JlYWQoc2QpOworCQlzYWE3MTEwX3dyaXRlKHNkLCAweDBELCAweDA2KTsKKwkJLyptZGVsYXkoMTUwKTsqLworCQlzdGF0dXMgPSBzYWE3MTEwX3JlYWQoc2QpOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJ2ZXJzaW9uICV4LCBzdGF0dXM9MHglMDJ4XG4iLAogCQkJICAgICAgIHZlciwgc3RhdHVzKTsKLQkJc2FhNzExMF93cml0ZShjbGllbnQsIDB4MEQsIDB4ODYpOwotCQlzYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgwRiwgMHgxMCk7Ci0JCXNhYTcxMTBfd3JpdGUoY2xpZW50LCAweDExLCAweDU5KTsKLQkJLy9zYWE3MTEwX3dyaXRlKGNsaWVudCwgMHgyRSwgMHg5QSk7CisJCXNhYTcxMTBfd3JpdGUoc2QsIDB4MEQsIDB4ODYpOworCQlzYWE3MTEwX3dyaXRlKHNkLCAweDBGLCAweDEwKTsKKwkJc2FhNzExMF93cml0ZShzZCwgMHgxMSwgMHg1OSk7CisJCS8qc2FhNzExMF93cml0ZShzZCwgMHgyRSwgMHg5QSk7Ki8KIAl9CiAKLQkvL3NhYTcxMTBfc2VsbXV4KGNsaWVudCwwKTsKLQkvL2RldGVybWluZV9ub3JtKGNsaWVudCk7CisJLypzYWE3MTEwX3NlbG11eChzZCwwKTsqLworCS8qZGV0ZXJtaW5lX25vcm0oc2QpOyovCiAJLyogc2V0dXAgYW5kIGltcGxpY2l0IG1vZGUgMCBzZWxlY3QgaGFzIGJlZW4gcGVyZm9ybWVkICovCiAKIAlyZXR1cm4gMDsKQEAgLTQ2OCw3ICs0OTMsMTAgQEAKIAogc3RhdGljIGludCBzYWE3MTEwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodG9fc2FhNzExMChzZCkpOwogCXJldHVybiAwOwogfQogCkBAIC00ODIsOCArNTEwLDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gInNhYTcxMTAiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9TQUE3MTEwLAotCS5jb21tYW5kID0gc2FhNzExMF9jb21tYW5kLAogCS5wcm9iZSA9IHNhYTcxMTBfcHJvYmUsCiAJLnJlbW92ZSA9IHNhYTcxMTBfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHNhYTcxMTBfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMS5jCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBhNDczOGEyLi4wMDAwMDAwCi0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExMS5jCisrKyAvZGV2L251bGwKQEAgLTEsNDkyICswLDAgQEAKLS8qCi0gKiBzYWE3MTExIC0gUGhpbGlwcyBTQUE3MTExQSB2aWRlbyBkZWNvZGVyIGRyaXZlciB2ZXJzaW9uIDAuMC4zCi0gKgotICogQ29weXJpZ2h0IChDKSAxOTk4IERhdmUgUGVya3MgPGRwZXJrc0BpYm0ubmV0PgotICoKLSAqIFNsaWdodCBjaGFuZ2VzIGZvciB2aWRlbyB0aW1pbmcgYW5kIGF0dGFjaG1lbnQgb3V0cHV0IGJ5Ci0gKiBXb2xmZ2FuZyBTY2hlcnIgPHNjaGVyckBuZXQ0eW91Lm5ldD4KLSAqCi0gKiBDaGFuZ2VzIGJ5IFJvbmFsZCBCdWx0amUgPHJidWx0amVAcm9uYWxkLmJpdGZyZWFrLm5ldD4KLSAqICAgIC0gbW92ZWQgb3ZlciB0byBsaW51eD49Mi40LnggaTJjIHByb3RvY29sICgxLzEvMjAwMykKLSAqCi0gKiBDaGFuZ2VzIGJ5IE1pY2hhZWwgSHVub2xkIDxtaWNoYWVsQG1paHUuZGU+Ci0gKiAgICAtIGltcGxlbWVudGVkIERFQ09ERVJfU0VUX0dQSU8sIERFQ09ERVJfSU5JVCwgREVDT0RFUl9TRVRfVkJJX0JZUEFTUwotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KLQotTU9EVUxFX0RFU0NSSVBUSU9OKCJQaGlsaXBzIFNBQTcxMTEgdmlkZW8gZGVjb2RlciBkcml2ZXIiKTsKLU1PRFVMRV9BVVRIT1IoIkRhdmUgUGVya3MiKTsKLU1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKLQotc3RhdGljIGludCBkZWJ1ZzsKLW1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi0jZGVmaW5lIFNBQTcxMTFfTlJfUkVHCQkweDE4Ci0KLXN0cnVjdCBzYWE3MTExIHsKLQl1bnNpZ25lZCBjaGFyIHJlZ1tTQUE3MTExX05SX1JFR107Ci0KLQlpbnQgbm9ybTsKLQlpbnQgaW5wdXQ7Ci0JaW50IGVuYWJsZTsKLX07Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBpbmxpbmUgaW50IHNhYTcxMTFfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKLXsKLQlzdHJ1Y3Qgc2FhNzExMSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0JZGVjb2Rlci0+cmVnW3JlZ10gPSB2YWx1ZTsKLQlyZXR1cm4gaTJjX3NtYnVzX3dyaXRlX2J5dGVfZGF0YShjbGllbnQsIHJlZywgdmFsdWUpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgc2FhNzExMV93cml0ZV9pZl9jaGFuZ2VkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCi17Ci0Jc3RydWN0IHNhYTcxMTEgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCWlmIChkZWNvZGVyLT5yZWdbcmVnXSAhPSB2YWx1ZSkgewotCQlkZWNvZGVyLT5yZWdbcmVnXSA9IHZhbHVlOwotCQlpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7Ci0JfQotfQotCi1zdGF0aWMgaW50IHNhYTcxMTFfd3JpdGVfYmxvY2soc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgY29uc3QgdTggKmRhdGEsIHVuc2lnbmVkIGludCBsZW4pCi17Ci0JaW50IHJldCA9IC0xOwotCXU4IHJlZzsKLQotCS8qIHRoZSBzYWE3MTExIGhhcyBhbiBhdXRvaW5jcmVtZW50IGZ1bmN0aW9uLCB1c2UgaXQgaWYKLQkgKiB0aGUgYWRhcHRlciB1bmRlcnN0YW5kcyByYXcgSTJDICovCi0JaWYgKGkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgewotCQkvKiBkbyByYXcgSTJDLCBub3Qgc21idXMgY29tcGF0aWJsZSAqLwotCQlzdHJ1Y3Qgc2FhNzExMSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCQl1OCBibG9ja19kYXRhWzMyXTsKLQkJaW50IGJsb2NrX2xlbjsKLQotCQl3aGlsZSAobGVuID49IDIpIHsKLQkJCWJsb2NrX2xlbiA9IDA7Ci0JCQlibG9ja19kYXRhW2Jsb2NrX2xlbisrXSA9IHJlZyA9IGRhdGFbMF07Ci0JCQlkbyB7Ci0JCQkJYmxvY2tfZGF0YVtibG9ja19sZW4rK10gPQotCQkJCSAgICBkZWNvZGVyLT5yZWdbcmVnKytdID0gZGF0YVsxXTsKLQkJCQlsZW4gLT0gMjsKLQkJCQlkYXRhICs9IDI7Ci0JCQl9IHdoaWxlIChsZW4gPj0gMiAmJiBkYXRhWzBdID09IHJlZyAmJiBibG9ja19sZW4gPCAzMik7Ci0JCQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBibG9ja19kYXRhLCBibG9ja19sZW4pOwotCQkJaWYgKHJldCA8IDApCi0JCQkJYnJlYWs7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBkbyBzb21lIHNsb3cgSTJDIGVtdWxhdGlvbiBraW5kIG9mIHRoaW5nICovCi0JCXdoaWxlIChsZW4gPj0gMikgewotCQkJcmVnID0gKmRhdGErKzsKLQkJCXJldCA9IHNhYTcxMTFfd3JpdGUoY2xpZW50LCByZWcsICpkYXRhKyspOwotCQkJaWYgKHJldCA8IDApCi0JCQkJYnJlYWs7Ci0JCQlsZW4gLT0gMjsKLQkJfQotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbnQgc2FhNzExMV9pbml0X2RlY29kZXIoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCAqaW5pdCkKLXsKLQlyZXR1cm4gc2FhNzExMV93cml0ZV9ibG9jayhjbGllbnQsIGluaXQtPmRhdGEsIGluaXQtPmxlbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHNhYTcxMTFfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCi17Ci0JcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBjb25zdCB1bnNpZ25lZCBjaGFyIHNhYTcxMTFfaTJjX2luaXRbXSA9IHsKLQkweDAwLCAweDAwLAkJLyogMDAgLSBJRCBieXRlICovCi0JMHgwMSwgMHgwMCwJCS8qIDAxIC0gcmVzZXJ2ZWQgKi8KLQotCS8qZnJvbnQgZW5kICovCi0JMHgwMiwgMHhkMCwJCS8qIDAyIC0gRlVTRT0zLCBHVURMPTIsIE1PREU9MCAqLwotCTB4MDMsIDB4MjMsCQkvKiAwMyAtIEhMTlJTPTAsIFZCU0w9MSwgV1BPRkY9MCwKLQkJCQkgKiBIT0xERz0wLCBHQUZJWD0wLCBHQUkxPTI1NiwgR0FJMj0yNTYgKi8KLQkweDA0LCAweDAwLAkJLyogMDQgLSBHQUkxPTI1NiAqLwotCTB4MDUsIDB4MDAsCQkvKiAwNSAtIEdBSTI9MjU2ICovCi0KLQkvKiBkZWNvZGVyICovCi0JMHgwNiwgMHhmMywJCS8qIDA2IC0gSFNCIGF0ICAxMyg1MEh6KSAvICAxNyg2MEh6KQotCQkJCSAqIHBpeGVscyBhZnRlciBlbmQgb2YgbGFzdCBsaW5lICovCi0JLyoweDA3LCAweDEzLCAgICAgKiAwNyAtIEhTUyBhdCAxMTMoNTBIeikgLyAxMTcoNjBIeikgcGl4ZWxzCi0JCQkJICogYWZ0ZXIgZW5kIG9mIGxhc3QgbGluZSAqLwotCTB4MDcsIDB4ZTgsCQkvKiAwNyAtIEhTUyBzZWVtcyB0byBiZSBuZWVkZWQgdG8KLQkJCQkgKiB3b3JrIHdpdGggTlRTQywgdG9vICovCi0JMHgwOCwgMHhjOCwJCS8qIDA4IC0gQVVGRD0xLCBGU0VMPTEsIEVYRklMPTAsCi0JCQkJICogVlRSQz0xLCBIUExMPTAsIFZOT0k9MCAqLwotCTB4MDksIDB4MDEsCQkvKiAwOSAtIEJZUFM9MCwgUFJFRj0wLCBCUFNTPTAsCi0JCQkJICogVkJMQj0wLCBVUFRDVj0wLCBBUEVSPTEgKi8KLQkweDBhLCAweDgwLAkJLyogMGEgLSBCUklHPTEyOCAqLwotCTB4MGIsIDB4NDcsCQkvKiAwYiAtIENPTlQ9MS4xMDkgKi8KLQkweDBjLCAweDQwLAkJLyogMGMgLSBTQVROPTEuMCAqLwotCTB4MGQsIDB4MDAsCQkvKiAwZCAtIEhVRT0wICovCi0JMHgwZSwgMHgwMSwJCS8qIDBlIC0gQ0RUTz0wLCBDU1REPTAsIERDQ0Y9MCwKLQkJCQkgKiBGQ1RDPTAsIENIQlc9MSAqLwotCTB4MGYsIDB4MDAsCQkvKiAwZiAtIHJlc2VydmVkICovCi0JMHgxMCwgMHg0OCwJCS8qIDEwIC0gT0ZUUz0xLCBIREVMPTAsIFZSTE49MSwgWURFTD0wICovCi0JMHgxMSwgMHgxYywJCS8qIDExIC0gR1BTVz0wLCBDTTk5PTAsIEZFQ089MCwgQ09NUE89MSwKLQkJCQkgKiBPRVlDPTEsIE9FSFY9MSwgVklQQj0wLCBDT0xPPTAgKi8KLQkweDEyLCAweDAwLAkJLyogMTIgLSBvdXRwdXQgY29udHJvbCAyICovCi0JMHgxMywgMHgwMCwJCS8qIDEzIC0gb3V0cHV0IGNvbnRyb2wgMyAqLwotCTB4MTQsIDB4MDAsCQkvKiAxNCAtIHJlc2VydmVkICovCi0JMHgxNSwgMHgwMCwJCS8qIDE1IC0gVkJJICovCi0JMHgxNiwgMHgwMCwJCS8qIDE2IC0gVkJJICovCi0JMHgxNywgMHgwMCwJCS8qIDE3IC0gVkJJICovCi19OwotCi1zdGF0aWMgaW50IHNhYTcxMTFfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3Qgc2FhNzExMSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIDA6Ci0JCWJyZWFrOwotCWNhc2UgREVDT0RFUl9JTklUOgotCXsKLQkJc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCAqaW5pdCA9IGFyZzsKLQkJc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCB2ZGk7Ci0KLQkJaWYgKE5VTEwgIT0gaW5pdCkKLQkJCXJldHVybiBzYWE3MTExX2luaXRfZGVjb2RlcihjbGllbnQsIGluaXQpOwotCQl2ZGkuZGF0YSA9IHNhYTcxMTFfaTJjX2luaXQ7Ci0JCXZkaS5sZW4gPSBzaXplb2Yoc2FhNzExMV9pMmNfaW5pdCk7Ci0JCXJldHVybiBzYWE3MTExX2luaXRfZGVjb2RlcihjbGllbnQsICZ2ZGkpOwotCX0KLQotCWNhc2UgREVDT0RFUl9EVU1QOgotCXsKLQkJaW50IGk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IFNBQTcxMTFfTlJfUkVHOyBpICs9IDE2KSB7Ci0JCQlpbnQgajsKLQotCQkJdjRsX2luZm8oY2xpZW50LCAiJTAzeCIsIGkpOwotCQkJZm9yIChqID0gMDsgaiA8IDE2ICYmIGkgKyBqIDwgU0FBNzExMV9OUl9SRUc7ICsraikgewotCQkJCXByaW50ayhLRVJOX0NPTlQgIiAlMDJ4IiwKLQkJCQkgICAgICAgc2FhNzExMV9yZWFkKGNsaWVudCwgaSArIGopKTsKLQkJCX0KLQkJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX0dFVF9DQVBBQklMSVRJRVM6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7Ci0KLQkJY2FwLT5mbGFncyA9IFZJREVPX0RFQ09ERVJfUEFMIHwKLQkJCSAgICAgVklERU9fREVDT0RFUl9OVFNDIHwKLQkJCSAgICAgVklERU9fREVDT0RFUl9TRUNBTSB8Ci0JCQkgICAgIFZJREVPX0RFQ09ERVJfQVVUTyB8Ci0JCQkgICAgIFZJREVPX0RFQ09ERVJfQ0NJUjsKLQkJY2FwLT5pbnB1dHMgPSA4OwotCQljYXAtPm91dHB1dHMgPSAxOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfR0VUX1NUQVRVUzoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQkJaW50IHN0YXR1czsKLQkJaW50IHJlczsKLQotCQlzdGF0dXMgPSBzYWE3MTExX3JlYWQoY2xpZW50LCAweDFmKTsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzOiAweCUwMnhcbiIsIHN0YXR1cyk7Ci0JCXJlcyA9IDA7Ci0JCWlmICgoc3RhdHVzICYgKDEgPDwgNikpID09IDApIHsKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19HT09EOwotCQl9Ci0JCXN3aXRjaCAoZGVjb2Rlci0+bm9ybSkgewotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19OVFNDOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfUEFMOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklERU9fTU9ERV9TRUNBTToKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19TRUNBTTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQljYXNlIFZJREVPX01PREVfQVVUTzoKLQkJCWlmICgoc3RhdHVzICYgKDEgPDwgNSkpICE9IDApIHsKLQkJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfTlRTQzsKLQkJCX0gZWxzZSB7Ci0JCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX1BBTDsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JCWlmICgoc3RhdHVzICYgKDEgPDwgMCkpICE9IDApIHsKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19DT0xPUjsKLQkJfQotCQkqaWFyZyA9IHJlczsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX1NFVF9HUElPOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCQlpZiAoMCAhPSAqaWFyZykgewotCQkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MTEsCi0JCQkJKGRlY29kZXItPnJlZ1sweDExXSB8IDB4ODApKTsKLQkJfSBlbHNlIHsKLQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDExLAotCQkJCShkZWNvZGVyLT5yZWdbMHgxMV0gJiAweDdmKSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX1NFVF9WQklfQllQQVNTOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCQlpZiAoMCAhPSAqaWFyZykgewotCQkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MTMsCi0JCQkJKGRlY29kZXItPnJlZ1sweDEzXSAmIDB4ZjApIHwgMHgwYSk7Ci0JCX0gZWxzZSB7Ci0JCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgxMywKLQkJCQkoZGVjb2Rlci0+cmVnWzB4MTNdICYgMHhmMCkpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgREVDT0RFUl9TRVRfTk9STToKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQlzd2l0Y2ggKCppYXJnKSB7Ci0KLQkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgwOCwKLQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MDhdICYgMHgzZikgfCAweDQwKTsKLQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDBlLAotCQkJCSAgICAgIChkZWNvZGVyLT5yZWdbMHgwZV0gJiAweDhmKSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MDgsCi0JCQkJICAgICAgKGRlY29kZXItPnJlZ1sweDA4XSAmIDB4M2YpIHwgMHgwMCk7Ci0JCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgwZSwKLQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MGVdICYgMHg4ZikpOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWSURFT19NT0RFX1NFQ0FNOgotCQkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MDgsCi0JCQkJICAgICAgKGRlY29kZXItPnJlZ1sweDA4XSAmIDB4M2YpIHwgMHgwMCk7Ci0JCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgwZSwKLQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MGVdICYgMHg4ZikgfCAweDUwKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9BVVRPOgotCQkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MDgsCi0JCQkJICAgICAgKGRlY29kZXItPnJlZ1sweDA4XSAmIDB4M2YpIHwgMHg4MCk7Ci0JCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgwZSwKLQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MGVdICYgMHg4ZikpOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCX0KLQkJZGVjb2Rlci0+bm9ybSA9ICppYXJnOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfU0VUX0lOUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCWlmICgqaWFyZyA8IDAgfHwgKmlhcmcgPiA3KSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWlmIChkZWNvZGVyLT5pbnB1dCAhPSAqaWFyZykgewotCQkJZGVjb2Rlci0+aW5wdXQgPSAqaWFyZzsKLQkJCS8qIHNlbGVjdCBtb2RlICovCi0JCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgwMiwKLQkJCQkgICAgICAoZGVjb2Rlci0+Ci0JCQkJICAgICAgIHJlZ1sweDAyXSAmIDB4ZjgpIHwgZGVjb2Rlci0+aW5wdXQpOwotCQkJLyogYnlwYXNzIGNocm9taW5hbmNlIHRyYXAgZm9yIG1vZGVzIDQuLjcgKi8KLQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDA5LAotCQkJCSAgICAgIChkZWNvZGVyLT4KLQkJCQkgICAgICAgcmVnWzB4MDldICYgMHg3ZikgfCAoKGRlY29kZXItPgotCQkJCQkJCSAgICAgaW5wdXQgPgotCQkJCQkJCSAgICAgMykgPyAweDgwIDoKLQkJCQkJCQkgICAgMCkpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgREVDT0RFUl9TRVRfT1VUUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCS8qIG5vdCBtdWNoIGNob2ljZSBvZiBvdXRwdXRzICovCi0JCWlmICgqaWFyZyAhPSAwKSB7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfRU5BQkxFX09VVFBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQkJaW50IGVuYWJsZSA9ICgqaWFyZyAhPSAwKTsKLQotCQlpZiAoZGVjb2Rlci0+ZW5hYmxlICE9IGVuYWJsZSkgewotCQkJZGVjb2Rlci0+ZW5hYmxlID0gZW5hYmxlOwotCi0JCQkvKiBSSjogSWYgb3V0cHV0IHNob3VsZCBiZSBkaXNhYmxlZCAoZm9yCi0JCQkgKiBwbGF5aW5nIHZpZGVvcyksIHdlIGFsc28gbmVlZCBhIG9wZW4gUExMLgotCQkJICogVGhlIGlucHV0IGlzIHNldCB0byAwICh3aGVyZSBubyBpbnB1dAotCQkJICogc291cmNlIGlzIGNvbm5lY3RlZCksIGFsdGhvdWdoIHRoaXMKLQkJCSAqIGlzIG5vdCBuZWNlc3NhcnkuCi0JCQkgKgotCQkJICogSWYgb3V0cHV0IHNob3VsZCBiZSBlbmFibGVkLCB3ZSBoYXZlIHRvCi0JCQkgKiByZXZlcnNlIHRoZSBhYm92ZS4KLQkJCSAqLwotCi0JCQlpZiAoZGVjb2Rlci0+ZW5hYmxlKSB7Ci0JCQkJc2FhNzExMV93cml0ZShjbGllbnQsIDB4MDIsCi0JCQkJCSAgICAgIChkZWNvZGVyLT4KLQkJCQkJICAgICAgIHJlZ1sweDAyXSAmIDB4ZjgpIHwKLQkJCQkJICAgICAgZGVjb2Rlci0+aW5wdXQpOwotCQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDA4LAotCQkJCQkgICAgICAoZGVjb2Rlci0+cmVnWzB4MDhdICYgMHhmYikpOwotCQkJCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDExLAotCQkJCQkgICAgICAoZGVjb2Rlci0+Ci0JCQkJCSAgICAgICByZWdbMHgxMV0gJiAweGYzKSB8IDB4MGMpOwotCQkJfSBlbHNlIHsKLQkJCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgwMiwKLQkJCQkJICAgICAgKGRlY29kZXItPnJlZ1sweDAyXSAmIDB4ZjgpKTsKLQkJCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgwOCwKLQkJCQkJICAgICAgKGRlY29kZXItPgotCQkJCQkgICAgICAgcmVnWzB4MDhdICYgMHhmYikgfCAweDA0KTsKLQkJCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgxMSwKLQkJCQkJICAgICAgKGRlY29kZXItPnJlZ1sweDExXSAmIDB4ZjMpKTsKLQkJCX0KLQkJfQotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfU0VUX1BJQ1RVUkU6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcGljID0gYXJnOwotCi0JCS8qIFdlIHdhbnQgMCB0byAyNTUgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJc2FhNzExMV93cml0ZV9pZl9jaGFuZ2VkKGNsaWVudCwgMHgwYSwgcGljLT5icmlnaHRuZXNzID4+IDgpOwotCQkvKiBXZSB3YW50IDAgdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCi0JCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDBiLCBwaWMtPmNvbnRyYXN0ID4+IDkpOwotCQkvKiBXZSB3YW50IDAgdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCi0JCXNhYTcxMTFfd3JpdGUoY2xpZW50LCAweDBjLCBwaWMtPmNvbG91ciA+PiA5KTsKLQkJLyogV2Ugd2FudCAtMTI4IHRvIDEyNyB3ZSBnZXQgMC02NTUzNSAqLwotCQlzYWE3MTExX3dyaXRlKGNsaWVudCwgMHgwZCwgKHBpYy0+aHVlIC0gMzI3NjgpID4+IDgpOwotCQlicmVhazsKLQl9Ci0KLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KLQotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHg0OCA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OwotCi1JMkNfQ0xJRU5UX0lOU01PRDsKLQotc3RhdGljIGludCBzYWE3MTExX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCi17Ci0JaW50IGk7Ci0Jc3RydWN0IHNhYTcxMTEgKmRlY29kZXI7Ci0Jc3RydWN0IHZpZGVvX2RlY29kZXJfaW5pdCB2ZGk7Ci0KLQkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCi0JaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCi0JCXJldHVybiAtRU5PREVWOwotCi0JdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKLQkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwotCi0JZGVjb2RlciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCBzYWE3MTExKSwgR0ZQX0tFUk5FTCk7Ci0JaWYgKGRlY29kZXIgPT0gTlVMTCkgewotCQlrZnJlZShjbGllbnQpOwotCQlyZXR1cm4gLUVOT01FTTsKLQl9Ci0JZGVjb2Rlci0+bm9ybSA9IFZJREVPX01PREVfTlRTQzsKLQlkZWNvZGVyLT5pbnB1dCA9IDA7Ci0JZGVjb2Rlci0+ZW5hYmxlID0gMTsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZWNvZGVyKTsKLQotCXZkaS5kYXRhID0gc2FhNzExMV9pMmNfaW5pdDsKLQl2ZGkubGVuID0gc2l6ZW9mKHNhYTcxMTFfaTJjX2luaXQpOwotCWkgPSBzYWE3MTExX2luaXRfZGVjb2RlcihjbGllbnQsICZ2ZGkpOwotCWlmIChpIDwgMCkgewotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbml0IHN0YXR1cyAlZFxuIiwgaSk7Ci0JfSBlbHNlIHsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAicmV2aXNpb24gJXhcbiIsCi0JCQlzYWE3MTExX3JlYWQoY2xpZW50LCAweDAwKSA+PiA0KTsKLQl9Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2FhNzExMV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzYWE3MTExX2lkW10gPSB7Ci0JeyAic2FhNzExMV9vbGQiLCAwIH0sCS8qICJzYWE3MTExIiBtYXBzIHRvIHRoZSBzYWE3MTE1IGRyaXZlciAqLwotCXsgfQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzYWE3MTExX2lkKTsKLQotc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewotCS5uYW1lID0gInNhYTcxMTEiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9TQUE3MTExQSwKLQkuY29tbWFuZCA9IHNhYTcxMTFfY29tbWFuZCwKLQkucHJvYmUgPSBzYWE3MTExX3Byb2JlLAotCS5yZW1vdmUgPSBzYWE3MTExX3JlbW92ZSwKLQkuaWRfdGFibGUgPSBzYWE3MTExX2lkLAotfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzExNC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE0LmMKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDdjYTcwOWYuLjAwMDAwMDAKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE0LmMKKysrIC9kZXYvbnVsbApAQCAtMSwxMDY4ICswLDAgQEAKLS8qCi0gKiBzYWE3MTE0IC0gUGhpbGlwcyBTQUE3MTE0SCB2aWRlbyBkZWNvZGVyIGRyaXZlciB2ZXJzaW9uIDAuMC4xCi0gKgotICogQ29weXJpZ2h0IChDKSAyMDAyIE1heGltIFlldnR5dXNoa2luIDxtYXhAbGludXhtZWRpYWxhYnMuY29tPgotICoKLSAqIEJhc2VkIG9uIHNhYTcxMTEgZHJpdmVyIGJ5IERhdmUgUGVya3MKLSAqCi0gKiBDb3B5cmlnaHQgKEMpIDE5OTggRGF2ZSBQZXJrcyA8ZHBlcmtzQGlibS5uZXQ+Ci0gKgotICogU2xpZ2h0IGNoYW5nZXMgZm9yIHZpZGVvIHRpbWluZyBhbmQgYXR0YWNobWVudCBvdXRwdXQgYnkKLSAqIFdvbGZnYW5nIFNjaGVyciA8c2NoZXJyQG5ldDR5b3UubmV0PgotICoKLSAqIENoYW5nZXMgYnkgUm9uYWxkIEJ1bHRqZSA8cmJ1bHRqZUByb25hbGQuYml0ZnJlYWsubmV0PgotICogICAgLSBtb3ZlZCBvdmVyIHRvIGxpbnV4Pj0yLjQueCBpMmMgcHJvdG9jb2wgKDEvMS8yMDAzKQotICoKLSAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5Ci0gKiBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieQotICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKLSAqIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCi0gKgotICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCi0gKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQotICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQotICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqIEZvdW5kYXRpb24sIEluYy4sIDY3NSBNYXNzIEF2ZSwgQ2FtYnJpZGdlLCBNQSAwMjEzOSwgVVNBLgotICovCi0KLSNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+Ci0jaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KLQotTU9EVUxFX0RFU0NSSVBUSU9OKCJQaGlsaXBzIFNBQTcxMTRIIHZpZGVvIGRlY29kZXIgZHJpdmVyIik7Ci1NT0RVTEVfQVVUSE9SKCJNYXhpbSBZZXZ0eXVzaGtpbiIpOwotTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwotCi1zdGF0aWMgaW50IGRlYnVnOwotbW9kdWxlX3BhcmFtKGRlYnVnLCBpbnQsIDApOwotTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0cnVjdCBzYWE3MTE0IHsKLQl1bnNpZ25lZCBjaGFyIHJlZ1sweGYwICogMl07Ci0KLQlpbnQgbm9ybTsKLQlpbnQgaW5wdXQ7Ci0JaW50IGVuYWJsZTsKLQlpbnQgYnJpZ2h0OwotCWludCBjb250cmFzdDsKLQlpbnQgaHVlOwotCWludCBzYXQ7Ci0JaW50IHBsYXliYWNrOwotfTsKLQotI2RlZmluZSAgIEkyQ19ERUxBWSAgIDEwCi0KLQotLy8jZGVmaW5lIFNBQV83MTE0X05UU0NfSFNZTkNfU1RBUlQgICAgICAgKC0zKQotLy8jZGVmaW5lIFNBQV83MTE0X05UU0NfSFNZTkNfU1RPUCAgICAgICAgKC0xOCkKLQotI2RlZmluZSBTQUFfNzExNF9OVFNDX0hTWU5DX1NUQVJUICAoLTE3KQotI2RlZmluZSBTQUFfNzExNF9OVFNDX0hTWU5DX1NUT1AgICAoLTMyKQotCi0vLyNkZWZpbmUgU0FBXzcxMTRfTlRTQ19IT0ZGU0VUICAgICAgICAgICAoNSkKLSNkZWZpbmUgU0FBXzcxMTRfTlRTQ19IT0ZGU0VUCQkoNikKLSNkZWZpbmUgU0FBXzcxMTRfTlRTQ19WT0ZGU0VUICAgICAgICAgICAoMTApCi0jZGVmaW5lIFNBQV83MTE0X05UU0NfV0lEVEggICAgICAgICAgICAgKDcyMCkKLSNkZWZpbmUgU0FBXzcxMTRfTlRTQ19IRUlHSFQgICAgICAgICAgICAoMjUwKQotCi0jZGVmaW5lIFNBQV83MTE0X1NFQ0FNX0hTWU5DX1NUQVJUICAgICAgKC0xNykKLSNkZWZpbmUgU0FBXzcxMTRfU0VDQU1fSFNZTkNfU1RPUCAgICAgICAoLTMyKQotCi0jZGVmaW5lIFNBQV83MTE0X1NFQ0FNX0hPRkZTRVQgICAgICAgICAgKDIpCi0jZGVmaW5lIFNBQV83MTE0X1NFQ0FNX1ZPRkZTRVQgICAgICAgICAgKDEwKQotI2RlZmluZSBTQUFfNzExNF9TRUNBTV9XSURUSCAgICAgICAgICAgICg3MjApCi0jZGVmaW5lIFNBQV83MTE0X1NFQ0FNX0hFSUdIVCAgICAgICAgICAgKDMwMCkKLQotI2RlZmluZSBTQUFfNzExNF9QQUxfSFNZTkNfU1RBUlQgICAgICAgICgtMTcpCi0jZGVmaW5lIFNBQV83MTE0X1BBTF9IU1lOQ19TVE9QICAgICAgICAgKC0zMikKLQotI2RlZmluZSBTQUFfNzExNF9QQUxfSE9GRlNFVCAgICAgICAgICAgICgyKQotI2RlZmluZSBTQUFfNzExNF9QQUxfVk9GRlNFVCAgICAgICAgICAgICgxMCkKLSNkZWZpbmUgU0FBXzcxMTRfUEFMX1dJRFRIICAgICAgICAgICAgICAoNzIwKQotI2RlZmluZSBTQUFfNzExNF9QQUxfSEVJR0hUICAgICAgICAgICAgICgzMDApCi0KLQotCi0jZGVmaW5lIFNBQV83MTE0X1ZFUlRJQ0FMX0NIUk9NQV9PRkZTRVQgICAgICAgICAwCS8vMHg1MDUwNDA0MAotI2RlZmluZSBTQUFfNzExNF9WRVJUSUNBTF9MVU1BX09GRlNFVCAgICAgICAgICAgMAotCi0jZGVmaW5lIFJFR19BRERSKHgpICgoKHgpIDw8IDEpICsgMSkKLSNkZWZpbmUgTE9CWVRFKHgpICgodW5zaWduZWQgY2hhcikoKHgpICYgMHhmZikpCi0jZGVmaW5lIEhJQllURSh4KSAoKHVuc2lnbmVkIGNoYXIpKCgoeCkgPj4gOCkgJiAweGZmKSkKLSNkZWZpbmUgTE9XT1JEKHgpICgodW5zaWduZWQgc2hvcnQgaW50KSgoeCkgJiAweGZmZmYpKQotI2RlZmluZSBISVdPUkQoeCkgKCh1bnNpZ25lZCBzaG9ydCBpbnQpKCgoeCkgPj4gMTYpICYgMHhmZmZmKSkKLQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgaW5saW5lIGludCBzYWE3MTE0X3dyaXRlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZywgdTggdmFsdWUpCi17Ci0JcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKLX0KLQotc3RhdGljIGludCBzYWE3MTE0X3dyaXRlX2Jsb2NrKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIGNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQotewotCWludCByZXQgPSAtMTsKLQl1OCByZWc7Ci0KLQkvKiB0aGUgc2FhNzExNCBoYXMgYW4gYXV0b2luY3JlbWVudCBmdW5jdGlvbiwgdXNlIGl0IGlmCi0JICogdGhlIGFkYXB0ZXIgdW5kZXJzdGFuZHMgcmF3IEkyQyAqLwotCWlmIChpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX0kyQykpIHsKLQkJLyogZG8gcmF3IEkyQywgbm90IHNtYnVzIGNvbXBhdGlibGUgKi8KLQkJdTggYmxvY2tfZGF0YVszMl07Ci0JCWludCBibG9ja19sZW47Ci0KLQkJd2hpbGUgKGxlbiA+PSAyKSB7Ci0JCQlibG9ja19sZW4gPSAwOwotCQkJYmxvY2tfZGF0YVtibG9ja19sZW4rK10gPSByZWcgPSBkYXRhWzBdOwotCQkJZG8gewotCQkJCWJsb2NrX2RhdGFbYmxvY2tfbGVuKytdID0gZGF0YVsxXTsKLQkJCQlyZWcrKzsKLQkJCQlsZW4gLT0gMjsKLQkJCQlkYXRhICs9IDI7Ci0JCQl9IHdoaWxlIChsZW4gPj0gMiAmJiBkYXRhWzBdID09IHJlZyAmJiBibG9ja19sZW4gPCAzMik7Ci0JCQlyZXQgPSBpMmNfbWFzdGVyX3NlbmQoY2xpZW50LCBibG9ja19kYXRhLCBibG9ja19sZW4pOwotCQkJaWYgKHJldCA8IDApCi0JCQkJYnJlYWs7Ci0JCX0KLQl9IGVsc2UgewotCQkvKiBkbyBzb21lIHNsb3cgSTJDIGVtdWxhdGlvbiBraW5kIG9mIHRoaW5nICovCi0JCXdoaWxlIChsZW4gPj0gMikgewotCQkJcmVnID0gKmRhdGErKzsKLQkJCXJldCA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCByZWcsICpkYXRhKyspOwotCQkJaWYgKHJldCA8IDApCi0JCQkJYnJlYWs7Ci0JCQlsZW4gLT0gMjsKLQkJfQotCX0KLQotCXJldHVybiByZXQ7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHNhYTcxMTRfcmVhZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcpCi17Ci0JcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLS8vIGluaXRpYWxseSBzZXQgTlRTQywgY29tcG9zaXRlCi0KLQotc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgaW5pdFtdID0gewotCTB4MDAsIDB4MDAsCQkvKiAwMCAtIElEIGJ5dGUgLCBjaGlwIHZlcnNpb24sCi0JCQkJICogcmVhZCBvbmx5ICovCi0JMHgwMSwgMHgwOCwJCS8qIDAxIC0gWCxYLFgsWCwgSURFTDMgdG8gSURFTDAgLQotCQkJCSAqIGhvcml6b250YWwgaW5jcmVtZW50IGRlbGF5LAotCQkJCSAqIHJlY29tbWVuZGVkIHBvc2l0aW9uICovCi0JMHgwMiwgMHgwMCwJCS8qIDAyIC0gRlVTRT0zLCBHVURMPTIsIE1PREU9MCA7Ci0JCQkJICogaW5wdXQgY29udHJvbCAqLwotCTB4MDMsIDB4MTAsCQkvKiAwMyAtIEhMTlJTPTAsIFZCU0w9MSwgV1BPRkY9MCwKLQkJCQkgKiBIT0xERz0wLCBHQUZJWD0wLCBHQUkxPTI1NiwgR0FJMj0yNTYgKi8KLQkweDA0LCAweDkwLAkJLyogMDQgLSBHQUkxPTI1NiAqLwotCTB4MDUsIDB4OTAsCQkvKiAwNSAtIEdBSTI9MjU2ICovCi0JMHgwNiwgU0FBXzcxMTRfTlRTQ19IU1lOQ19TVEFSVCwJLyogMDYgLSBIU0I6IGhzeW5jIHN0YXJ0LAotCQkJCSAqIGRlcGVuZHMgb24gdGhlIHZpZGVvIHN0YW5kYXJkICovCi0JMHgwNywgU0FBXzcxMTRfTlRTQ19IU1lOQ19TVE9QLAkvKiAwNyAtIEhTUzogaHN5bmMgc3RvcCwgZGVwZW5kcwotCQkJCSAqb24gdGhlIHZpZGVvIHN0YW5kYXJkICovCi0JMHgwOCwgMHhiOCwJCS8qIDA4IC0gQVVGRD0xLCBGU0VMPTEsIEVYRklMPTAsIFZUUkM9MSwKLQkJCQkgKiBIUExMOiBmcmVlIHJ1bm5pbmcgaW4gcGxheWJhY2ssIGxvY2tlZAotCQkJCSAqIGluIGNhcHR1cmUsIFZOT0k9MCAqLwotCTB4MDksIDB4ODAsCQkvKiAwOSAtIEJZUFM9MCwgUFJFRj0wLCBCUFNTPTAsIFZCTEI9MCwKLQkJCQkgKiBVUFRDVj0wLCBBUEVSPTE7IGRlcGVuZHMgZnJvbSBpbnB1dCAqLwotCTB4MGEsIDB4ODAsCQkvKiAwYSAtIEJSSUc9MTI4ICovCi0JMHgwYiwgMHg0NCwJCS8qIDBiIC0gQ09OVD0xLjEwOSAqLwotCTB4MGMsIDB4NDAsCQkvKiAwYyAtIFNBVE49MS4wICovCi0JMHgwZCwgMHgwMCwJCS8qIDBkIC0gSFVFPTAgKi8KLQkweDBlLCAweDg0LAkJLyogMGUgLSBDRFRPLCBDU1REMiB0byAwLCBEQ1ZGLCBGQ1RDLAotCQkJCSAqIENDT01COyBkZXBlbmRzIGZyb20gdmlkZW8gc3RhbmRhcmQgKi8KLQkweDBmLCAweDI0LAkJLyogMGYgLSBBQ0dDLENHQUlONiB0byBDR0FJTjA7IGRlcGVuZHMKLQkJCQkgKiBmcm9tIHZpZGVvIHN0YW5kYXJkICovCi0JMHgxMCwgMHgwMywJCS8qIDEwIC0gT0ZGVTEgdG8gMCwgT0ZGVjEgdG8gMCwgQ0hCVywKLQkJCQkgKiBMQ0JXMiB0byAwICovCi0JMHgxMSwgMHg1OSwJCS8qIDExIC0gQ09MTywgUlRQMSwgSEVETDEgdG8gMCwgUlRQMCwKLQkJCQkgKiBZREVMMiB0byAwICovCi0JMHgxMiwgMHhjOSwJCS8qIDEyIC0gUlQgc2lnbmFsIGNvbnRyb2wgUlRTRTEzIHRvIDEwCi0JCQkJICogYW5kIDAzIHRvIDAwICovCi0JMHgxMywgMHg4MCwJCS8qIDEzIC0gUlQvWCBwb3J0IG91dHB1dCBjb250cm9sICAqLwotCTB4MTQsIDB4MDAsCQkvKiAxNCAtIGFuYWxvZywgQURDLCBjb21wYXRpYmlsaXR5IGNvbnRyb2wgKi8KLQkweDE1LCAweDAwLAkJLyogMTUgLSBWR0FURSBzdGFydCBGSUQgY2hhbmdlICAqLwotCTB4MTYsIDB4ZmUsCQkvKiAxNiAtIFZHQVRFIHN0b3AgKi8KLQkweDE3LCAweDAwLAkJLyogMTcgLSBNaXNjLiwgVkdBVEUgTVNCcyAqLwotCTB4MTgsIDB4NDAsCQkvKiBSQVdHICovCi0JMHgxOSwgMHg4MCwJCS8qIFJBV08gKi8KLQkweDFhLCAweDAwLAotCTB4MWIsIDB4MDAsCi0JMHgxYywgMHgwMCwKLQkweDFkLCAweDAwLAotCTB4MWUsIDB4MDAsCi0JMHgxZiwgMHgwMCwJCS8qIHN0YXR1cyBieXRlLCByZWFkIG9ubHkgKi8KLQkweDIwLCAweDAwLAkJLyogdmlkZW8gZGVjb2RlciByZXNlcnZlZCBwYXJ0ICovCi0JMHgyMSwgMHgwMCwKLQkweDIyLCAweDAwLAotCTB4MjMsIDB4MDAsCi0JMHgyNCwgMHgwMCwKLQkweDI1LCAweDAwLAotCTB4MjYsIDB4MDAsCi0JMHgyNywgMHgwMCwKLQkweDI4LCAweDAwLAotCTB4MjksIDB4MDAsCi0JMHgyYSwgMHgwMCwKLQkweDJiLCAweDAwLAotCTB4MmMsIDB4MDAsCi0JMHgyZCwgMHgwMCwKLQkweDJlLCAweDAwLAotCTB4MmYsIDB4MDAsCi0JMHgzMCwgMHhiYywJCS8qIGF1ZGlvIGNsb2NrIGdlbmVyYXRvciAqLwotCTB4MzEsIDB4ZGYsCi0JMHgzMiwgMHgwMiwKLQkweDMzLCAweDAwLAotCTB4MzQsIDB4Y2QsCi0JMHgzNSwgMHhjYywKLQkweDM2LCAweDNhLAotCTB4MzcsIDB4MDAsCi0JMHgzOCwgMHgwMywKLQkweDM5LCAweDEwLAotCTB4M2EsIDB4MDAsCi0JMHgzYiwgMHgwMCwKLQkweDNjLCAweDAwLAotCTB4M2QsIDB4MDAsCi0JMHgzZSwgMHgwMCwKLQkweDNmLCAweDAwLAotCTB4NDAsIDB4MDAsCQkvKiBWQkkgZGF0YSBzbGljZXIgKi8KLQkweDQxLCAweGZmLAotCTB4NDIsIDB4ZmYsCi0JMHg0MywgMHhmZiwKLQkweDQ0LCAweGZmLAotCTB4NDUsIDB4ZmYsCi0JMHg0NiwgMHhmZiwKLQkweDQ3LCAweGZmLAotCTB4NDgsIDB4ZmYsCi0JMHg0OSwgMHhmZiwKLQkweDRhLCAweGZmLAotCTB4NGIsIDB4ZmYsCi0JMHg0YywgMHhmZiwKLQkweDRkLCAweGZmLAotCTB4NGUsIDB4ZmYsCi0JMHg0ZiwgMHhmZiwKLQkweDUwLCAweGZmLAotCTB4NTEsIDB4ZmYsCi0JMHg1MiwgMHhmZiwKLQkweDUzLCAweGZmLAotCTB4NTQsIDB4ZmYsCi0JMHg1NSwgMHhmZiwKLQkweDU2LCAweGZmLAotCTB4NTcsIDB4ZmYsCi0JMHg1OCwgMHg0MCwJCS8vIGZyYW1pbmcgY29kZQotCTB4NTksIDB4NDcsCQkvLyBob3Jpem9udGFsIG9mZnNldAotCTB4NWEsIDB4MDYsCQkvLyB2ZXJ0aWNhbCBvZmZzZXQKLQkweDViLCAweDgzLAkJLy8gZmllbGQgb2Zmc2V0Ci0JMHg1YywgMHgwMCwJCS8vIHJlc2VydmVkCi0JMHg1ZCwgMHgzZSwJCS8vIGhlYWRlciBhbmQgZGF0YQotCTB4NWUsIDB4MDAsCQkvLyBzbGljZWQgZGF0YQotCTB4NWYsIDB4MDAsCQkvLyByZXNlcnZlZAotCTB4NjAsIDB4MDAsCQkvKiB2aWRlbyBkZWNvZGVyIHJlc2VydmVkIHBhcnQgKi8KLQkweDYxLCAweDAwLAotCTB4NjIsIDB4MDAsCi0JMHg2MywgMHgwMCwKLQkweDY0LCAweDAwLAotCTB4NjUsIDB4MDAsCi0JMHg2NiwgMHgwMCwKLQkweDY3LCAweDAwLAotCTB4NjgsIDB4MDAsCi0JMHg2OSwgMHgwMCwKLQkweDZhLCAweDAwLAotCTB4NmIsIDB4MDAsCi0JMHg2YywgMHgwMCwKLQkweDZkLCAweDAwLAotCTB4NmUsIDB4MDAsCi0JMHg2ZiwgMHgwMCwKLQkweDcwLCAweDAwLAkJLyogdmlkZW8gZGVjb2RlciByZXNlcnZlZCBwYXJ0ICovCi0JMHg3MSwgMHgwMCwKLQkweDcyLCAweDAwLAotCTB4NzMsIDB4MDAsCi0JMHg3NCwgMHgwMCwKLQkweDc1LCAweDAwLAotCTB4NzYsIDB4MDAsCi0JMHg3NywgMHgwMCwKLQkweDc4LCAweDAwLAotCTB4NzksIDB4MDAsCi0JMHg3YSwgMHgwMCwKLQkweDdiLCAweDAwLAotCTB4N2MsIDB4MDAsCi0JMHg3ZCwgMHgwMCwKLQkweDdlLCAweDAwLAotCTB4N2YsIDB4MDAsCi0JMHg4MCwgMHgwMCwJCS8qIFgtcG9ydCwgSS1wb3J0IGFuZCBzY2FsZXIgKi8KLQkweDgxLCAweDAwLAotCTB4ODIsIDB4MDAsCi0JMHg4MywgMHgwMCwKLQkweDg0LCAweGM1LAotCTB4ODUsIDB4MGQsCQkvLyBoc3luYyBhbmQgdnN5bmMgPwotCTB4ODYsIDB4NDAsCi0JMHg4NywgMHgwMSwKLQkweDg4LCAweDAwLAotCTB4ODksIDB4MDAsCi0JMHg4YSwgMHgwMCwKLQkweDhiLCAweDAwLAotCTB4OGMsIDB4MDAsCi0JMHg4ZCwgMHgwMCwKLQkweDhlLCAweDAwLAotCTB4OGYsIDB4MDAsCi0JMHg5MCwgMHgwMywJCS8qIFRhc2sgQSBkZWZpbml0aW9uICAgICAgICAgICAqLwotCTB4OTEsIDB4MDgsCi0JMHg5MiwgMHgwMCwKLQkweDkzLCAweDQwLAotCTB4OTQsIDB4MDAsCQkvLyB3aW5kb3cgc2V0dGluZ3MKLQkweDk1LCAweDAwLAotCTB4OTYsIDB4MDAsCi0JMHg5NywgMHgwMCwKLQkweDk4LCAweDAwLAotCTB4OTksIDB4MDAsCi0JMHg5YSwgMHgwMCwKLQkweDliLCAweDAwLAotCTB4OWMsIDB4MDAsCi0JMHg5ZCwgMHgwMCwKLQkweDllLCAweDAwLAotCTB4OWYsIDB4MDAsCi0JMHhhMCwgMHgwMSwJCS8qIGhvcml6b250YWwgaW50ZWdlciBwcmVzY2FsaW5nIHJhdGlvICovCi0JMHhhMSwgMHgwMCwJCS8qIGhvcml6b250YWwgcHJlc2NhbGVyIGFjY3VtdWxhdGlvbgotCQkJCSAqIHNlcXVlbmNlIGxlbmd0aCAqLwotCTB4YTIsIDB4MDAsCQkvKiBVViBGSVIgZmlsdGVyLCBZIEZJUiBmaWx0ZXIsIHByZXNjYWxlcgotCQkJCSAqIERDIGdhaW4gKi8KLQkweGEzLCAweDAwLAotCTB4YTQsIDB4ODAsCQkvLyBsdW1pbmFuY2UgYnJpZ2h0bmVzcwotCTB4YTUsIDB4NDAsCQkvLyBsdW1pbmFuY2UgZ2FpbgotCTB4YTYsIDB4NDAsCQkvLyBjaHJvbWluYW5jZSBzYXR1cmF0aW9uCi0JMHhhNywgMHgwMCwKLQkweGE4LCAweDAwLAkJLy8gaG9yaXpvbnRhbCBsdW1pbmFuY2Ugc2NhbGluZyBpbmNyZW1lbnQKLQkweGE5LCAweDA0LAotCTB4YWEsIDB4MDAsCQkvLyBob3Jpem9udGFsIGx1bWluYW5jZSBwaGFzZSBvZmZzZXQKLQkweGFiLCAweDAwLAotCTB4YWMsIDB4MDAsCQkvLyBob3Jpem9udGFsIGNocm9taW5hbmNlIHNjYWxpbmcgaW5jcmVtZW50Ci0JMHhhZCwgMHgwMiwKLQkweGFlLCAweDAwLAkJLy8gaG9yaXpvbnRhbCBjaHJvbWluYW5jZSBwaGFzZSBvZmZzZXQKLQkweGFmLCAweDAwLAotCTB4YjAsIDB4MDAsCQkvLyB2ZXJ0aWNhbCBsdW1pbmFuY2Ugc2NhbGluZyBpbmNyZW1lbnQKLQkweGIxLCAweDA0LAotCTB4YjIsIDB4MDAsCQkvLyB2ZXJ0aWNhbCBjaHJvbWluYW5jZSBzY2FsaW5nIGluY3JlbWVudAotCTB4YjMsIDB4MDQsCi0JMHhiNCwgMHgwMCwKLQkweGI1LCAweDAwLAotCTB4YjYsIDB4MDAsCi0JMHhiNywgMHgwMCwKLQkweGI4LCAweDAwLAotCTB4YjksIDB4MDAsCi0JMHhiYSwgMHgwMCwKLQkweGJiLCAweDAwLAotCTB4YmMsIDB4MDAsCi0JMHhiZCwgMHgwMCwKLQkweGJlLCAweDAwLAotCTB4YmYsIDB4MDAsCi0JMHhjMCwgMHgwMiwJCS8vIFRhc2sgQiBkZWZpbml0aW9uCi0JMHhjMSwgMHgwOCwKLQkweGMyLCAweDAwLAotCTB4YzMsIDB4NDAsCi0JMHhjNCwgMHgwMCwJCS8vIHdpbmRvdyBzZXR0aW5ncwotCTB4YzUsIDB4MDAsCi0JMHhjNiwgMHgwMCwKLQkweGM3LCAweDAwLAotCTB4YzgsIDB4MDAsCi0JMHhjOSwgMHgwMCwKLQkweGNhLCAweDAwLAotCTB4Y2IsIDB4MDAsCi0JMHhjYywgMHgwMCwKLQkweGNkLCAweDAwLAotCTB4Y2UsIDB4MDAsCi0JMHhjZiwgMHgwMCwKLQkweGQwLCAweDAxLAkJLy8gaG9yaXpvbnRhbCBpbnRlZ2VyIHByZXNjYWxpbmcgcmF0aW8KLQkweGQxLCAweDAwLAkJLy8gaG9yaXpvbnRhbCBwcmVzY2FsZXIgYWNjdW11bGF0aW9uIHNlcXVlbmNlIGxlbmd0aAotCTB4ZDIsIDB4MDAsCQkvLyBVViBGSVIgZmlsdGVyLCBZIEZJUiBmaWx0ZXIsIHByZXNjYWxlciBEQyBnYWluCi0JMHhkMywgMHgwMCwKLQkweGQ0LCAweDgwLAkJLy8gbHVtaW5hbmNlIGJyaWdodG5lc3MKLQkweGQ1LCAweDQwLAkJLy8gbHVtaW5hbmNlIGdhaW4KLQkweGQ2LCAweDQwLAkJLy8gY2hyb21pbmFuY2Ugc2F0dXJhdGlvbgotCTB4ZDcsIDB4MDAsCi0JMHhkOCwgMHgwMCwJCS8vIGhvcml6b250YWwgbHVtaW5hbmNlIHNjYWxpbmcgaW5jcmVtZW50Ci0JMHhkOSwgMHgwNCwKLQkweGRhLCAweDAwLAkJLy8gaG9yaXpvbnRhbCBsdW1pbmFuY2UgcGhhc2Ugb2Zmc2V0Ci0JMHhkYiwgMHgwMCwKLQkweGRjLCAweDAwLAkJLy8gaG9yaXpvbnRhbCBjaHJvbWluYW5jZSBzY2FsaW5nIGluY3JlbWVudAotCTB4ZGQsIDB4MDIsCi0JMHhkZSwgMHgwMCwJCS8vIGhvcml6b250YWwgY2hyb21pbmFuY2UgcGhhc2Ugb2Zmc2V0Ci0JMHhkZiwgMHgwMCwKLQkweGUwLCAweDAwLAkJLy8gdmVydGljYWwgbHVtaW5hbmNlIHNjYWxpbmcgaW5jcmVtZW50Ci0JMHhlMSwgMHgwNCwKLQkweGUyLCAweDAwLAkJLy8gdmVydGljYWwgY2hyb21pbmFuY2Ugc2NhbGluZyBpbmNyZW1lbnQKLQkweGUzLCAweDA0LAotCTB4ZTQsIDB4MDAsCi0JMHhlNSwgMHgwMCwKLQkweGU2LCAweDAwLAotCTB4ZTcsIDB4MDAsCi0JMHhlOCwgMHgwMCwKLQkweGU5LCAweDAwLAotCTB4ZWEsIDB4MDAsCi0JMHhlYiwgMHgwMCwKLQkweGVjLCAweDAwLAotCTB4ZWQsIDB4MDAsCi0JMHhlZSwgMHgwMCwKLQkweGVmLCAweDAwCi19OwotCi1zdGF0aWMgaW50IHNhYTcxMTRfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3Qgc2FhNzExNCAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIDA6Ci0JCS8vZHByaW50aygxLCBLRVJOX0lORk8gIiVzOiB3cml0aW5nIGluaXRcbiIsIEkyQ19OQU1FKGNsaWVudCkpOwotCQkvL3NhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0LCBzaXplb2YoaW5pdCkpOwotCQlicmVhazsKLQotCWNhc2UgREVDT0RFUl9EVU1QOgotCXsKLQkJaW50IGk7Ci0KLQkJaWYgKCFkZWJ1ZykKLQkJCWJyZWFrOwotCQl2NGxfaW5mbyhjbGllbnQsICJkZWNvZGVyIGR1bXBcbiIpOwotCi0JCWZvciAoaSA9IDA7IGkgPCAzMjsgaSArPSAxNikgewotCQkJaW50IGo7Ci0KLQkJCXY0bF9pbmZvKGNsaWVudCwgIiUwM3giLCBpKTsKLQkJCWZvciAoaiA9IDA7IGogPCAxNjsgKytqKSB7Ci0JCQkJcHJpbnRrKEtFUk5fQ09OVCAiICUwMngiLAotCQkJCSAgICAgICBzYWE3MTE0X3JlYWQoY2xpZW50LCBpICsgaikpOwotCQkJfQotCQkJcHJpbnRrKEtFUk5fQ09OVCAiXG4iKTsKLQkJfQotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfR0VUX0NBUEFCSUxJVElFUzoKLQl7Ci0JCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJnZXQgY2FwYWJpbGl0aWVzXG4iKTsKLQotCQljYXAtPmZsYWdzID0gVklERU9fREVDT0RFUl9QQUwgfAotCQkJICAgICBWSURFT19ERUNPREVSX05UU0MgfAotCQkJICAgICBWSURFT19ERUNPREVSX0FVVE8gfAotCQkJICAgICBWSURFT19ERUNPREVSX0NDSVI7Ci0JCWNhcC0+aW5wdXRzID0gODsKLQkJY2FwLT5vdXRwdXRzID0gMTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0JCWludCBzdGF0dXM7Ci0JCWludCByZXM7Ci0KLQkJc3RhdHVzID0gc2FhNzExNF9yZWFkKGNsaWVudCwgMHgxZik7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic3RhdHVzOiAweCUwMnhcbiIsIHN0YXR1cyk7Ci0JCXJlcyA9IDA7Ci0JCWlmICgoc3RhdHVzICYgKDEgPDwgNikpID09IDApIHsKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19HT09EOwotCQl9Ci0JCXN3aXRjaCAoZGVjb2Rlci0+bm9ybSkgewotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19OVFNDOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfUEFMOwotCQkJYnJlYWs7Ci0JCWNhc2UgVklERU9fTU9ERV9TRUNBTToKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19TRUNBTTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQljYXNlIFZJREVPX01PREVfQVVUTzoKLQkJCWlmICgoc3RhdHVzICYgKDEgPDwgNSkpICE9IDApIHsKLQkJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfTlRTQzsKLQkJCX0gZWxzZSB7Ci0JCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX1BBTDsKLQkJCX0KLQkJCWJyZWFrOwotCQl9Ci0JCWlmICgoc3RhdHVzICYgKDEgPDwgMCkpICE9IDApIHsKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19DT0xPUjsKLQkJfQotCQkqaWFyZyA9IHJlczsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX1NFVF9OT1JNOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCXNob3J0IGludCBob2ZmID0gMCwgdm9mZiA9IDAsIHcgPSAwLCBoID0gMDsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgbm9ybVxuIik7Ci0KLQkJc3dpdGNoICgqaWFyZykgewotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIk5UU0NcbiIpOwotCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDYpXSA9Ci0JCQkgICAgU0FBXzcxMTRfTlRTQ19IU1lOQ19TVEFSVDsKLQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDA3KV0gPQotCQkJICAgIFNBQV83MTE0X05UU0NfSFNZTkNfU1RPUDsKLQotCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDgpXSA9IGRlY29kZXItPnBsYXliYWNrID8gMHg3YyA6IDB4Yjg7CS8vIFBMTCBmcmVlIHdoZW4gcGxheWJhY2ssIFBMTCBjbG9zZSB3aGVuIGNhcHR1cmUKLQotCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MGUpXSA9IDB4ODU7Ci0JCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwZildID0gMHgyNDsKLQotCQkJaG9mZiA9IFNBQV83MTE0X05UU0NfSE9GRlNFVDsKLQkJCXZvZmYgPSBTQUFfNzExNF9OVFNDX1ZPRkZTRVQ7Ci0JCQl3ID0gU0FBXzcxMTRfTlRTQ19XSURUSDsKLQkJCWggPSBTQUFfNzExNF9OVFNDX0hFSUdIVDsKLQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIlBBTFxuIik7Ci0JCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwNildID0KLQkJCSAgICBTQUFfNzExNF9QQUxfSFNZTkNfU1RBUlQ7Ci0JCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwNyldID0KLQkJCSAgICBTQUFfNzExNF9QQUxfSFNZTkNfU1RPUDsKLQotCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDgpXSA9IGRlY29kZXItPnBsYXliYWNrID8gMHg3YyA6IDB4Yjg7CS8vIFBMTCBmcmVlIHdoZW4gcGxheWJhY2ssIFBMTCBjbG9zZSB3aGVuIGNhcHR1cmUKLQotCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MGUpXSA9IDB4ODE7Ci0JCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwZildID0gMHgyNDsKLQotCQkJaG9mZiA9IFNBQV83MTE0X1BBTF9IT0ZGU0VUOwotCQkJdm9mZiA9IFNBQV83MTE0X1BBTF9WT0ZGU0VUOwotCQkJdyA9IFNBQV83MTE0X1BBTF9XSURUSDsKLQkJCWggPSBTQUFfNzExNF9QQUxfSEVJR0hUOwotCi0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiVW5rbm93biB2aWRlbyBtb2RlXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5NCldID0gTE9CWVRFKGhvZmYpOwkvLyBob2Zmc2V0IGxvdwotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5NSldID0gSElCWVRFKGhvZmYpICYgMHgwZjsJLy8gaG9mZnNldCBoaWdoCi0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDk2KV0gPSBMT0JZVEUodyk7CS8vIHdpZHRoIGxvdwotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5NyldID0gSElCWVRFKHcpICYgMHgwZjsJLy8gd2lkdGggaGlnaAotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5OCldID0gTE9CWVRFKHZvZmYpOwkvLyB2b2Zmc2V0IGxvdwotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5OSldID0gSElCWVRFKHZvZmYpICYgMHgwZjsJLy8gdm9mZnNldCBoaWdoCi0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDlhKV0gPSBMT0JZVEUoaCArIDIpOwkvLyBoZWlnaHQgbG93Ci0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDliKV0gPSBISUJZVEUoaCArIDIpICYgMHgwZjsJLy8gaGVpZ2h0IGhpZ2gKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4OWMpXSA9IExPQllURSh3KTsJLy8gb3V0IHdpZHRoIGxvdwotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5ZCldID0gSElCWVRFKHcpICYgMHgwZjsJLy8gb3V0IHdpZHRoIGhpZ2gKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4OWUpXSA9IExPQllURShoKTsJLy8gb3V0IGhlaWdodCBsb3cKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4OWYpXSA9IEhJQllURShoKSAmIDB4MGY7CS8vIG91dCBoZWlnaHQgaGlnaAotCi0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGM0KV0gPSBMT0JZVEUoaG9mZik7CS8vIGhvZmZzZXQgbG93Ci0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGM1KV0gPSBISUJZVEUoaG9mZikgJiAweDBmOwkvLyBob2Zmc2V0IGhpZ2gKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YzYpXSA9IExPQllURSh3KTsJLy8gd2lkdGggbG93Ci0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGM3KV0gPSBISUJZVEUodykgJiAweDBmOwkvLyB3aWR0aCBoaWdoCi0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGM4KV0gPSBMT0JZVEUodm9mZik7CS8vIHZvZmZzZXQgbG93Ci0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGM5KV0gPSBISUJZVEUodm9mZikgJiAweDBmOwkvLyB2b2Zmc2V0IGhpZ2gKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4Y2EpXSA9IExPQllURShoICsgMik7CS8vIGhlaWdodCBsb3cKLQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4Y2IpXSA9IEhJQllURShoICsgMikgJiAweDBmOwkvLyBoZWlnaHQgaGlnaAotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhjYyldID0gTE9CWVRFKHcpOwkvLyBvdXQgd2lkdGggbG93Ci0JCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGNkKV0gPSBISUJZVEUodykgJiAweDBmOwkvLyBvdXQgd2lkdGggaGlnaAotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhjZSldID0gTE9CWVRFKGgpOwkvLyBvdXQgaGVpZ2h0IGxvdwotCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhjZildID0gSElCWVRFKGgpICYgMHgwZjsJLy8gb3V0IGhlaWdodCBoaWdoCi0KLQotCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4MCwgMHgwNik7CS8vIGktcG9ydCBhbmQgc2NhbGVyIGJhY2sgZW5kIGNsb2NrIHNlbGVjdGlvbiwgdGFzayBBJkIgb2ZmCi0JCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDg4LCAweGQ4KTsJLy8gc3cgcmVzZXQgc2NhbGVyCi0JCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDg4LCAweGY4KTsJLy8gc3cgcmVzZXQgc2NhbGVyIHJlbGVhc2UKLQotCQlzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4MDYgPDwgMSksCi0JCQkJICAgIDMgPDwgMSk7Ci0JCXNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHgwZSA8PCAxKSwKLQkJCQkgICAgMiA8PCAxKTsKLQkJc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweDVhIDw8IDEpLAotCQkJCSAgICAyIDw8IDEpOwotCi0JCXNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHg5NCA8PCAxKSwKLQkJCQkgICAgKDB4OWYgKyAxIC0gMHg5NCkgPDwgMSk7Ci0JCXNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHhjNCA8PCAxKSwKLQkJCQkgICAgKDB4Y2YgKyAxIC0gMHhjNCkgPDwgMSk7Ci0KLQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODgsIDB4ZDgpOwkvLyBzdyByZXNldCBzY2FsZXIKLQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODgsIDB4ZjgpOwkvLyBzdyByZXNldCBzY2FsZXIgcmVsZWFzZQotCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4MCwgMHgzNik7CS8vIGktcG9ydCBhbmQgc2NhbGVyIGJhY2sgZW5kIGNsb2NrIHNlbGVjdGlvbgotCi0JCWRlY29kZXItPm5vcm0gPSAqaWFyZzsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX1NFVF9JTlBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzZXQgaW5wdXQgKCVkKVxuIiwgKmlhcmcpOwotCQlpZiAoKmlhcmcgPCAwIHx8ICppYXJnID4gNykgewotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlpZiAoZGVjb2Rlci0+aW5wdXQgIT0gKmlhcmcpIHsKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIm5vdyBzZXR0aW5nICVzIGlucHV0XG4iLAotCQkJCSppYXJnID49IDYgPyAiUy1WaWRlbyIgOiAiQ29tcG9zaXRlIik7Ci0JCQlkZWNvZGVyLT5pbnB1dCA9ICppYXJnOwotCi0JCQkvKiBzZWxlY3QgbW9kZSAqLwotCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDIpXSA9Ci0JCQkgICAgKGRlY29kZXItPgotCQkJICAgICByZWdbUkVHX0FERFIoMHgwMildICYgMHhmMCkgfCAoZGVjb2Rlci0+Ci0JCQkJCQkJICAgIGlucHV0IDwKLQkJCQkJCQkgICAgNiA/IDB4MCA6IDB4OSk7Ci0JCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwMiwKLQkJCQkgICAgICBkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwMildKTsKLQotCQkJLyogYnlwYXNzIGNocm9taW5hbmNlIHRyYXAgZm9yIG1vZGVzIDYuLjkgKi8KLQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDA5KV0gPQotCQkJICAgIChkZWNvZGVyLT4KLQkJCSAgICAgcmVnW1JFR19BRERSKDB4MDkpXSAmIDB4N2YpIHwgKGRlY29kZXItPgotCQkJCQkJCSAgICBpbnB1dCA8Ci0JCQkJCQkJICAgIDYgPyAweDAgOgotCQkJCQkJCSAgICAweDgwKTsKLQkJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDA5LAotCQkJCSAgICAgIGRlY29kZXItPnJlZ1tSRUdfQUREUigweDA5KV0pOwotCi0JCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwZSldID0KLQkJCSAgICBkZWNvZGVyLT5pbnB1dCA8Ci0JCQkgICAgNiA/IGRlY29kZXItPgotCQkJICAgIHJlZ1tSRUdfQUREUigweDBlKV0gfCAxIDogZGVjb2Rlci0+Ci0JCQkgICAgcmVnW1JFR19BRERSKDB4MGUpXSAmIH4xOwotCQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4MGUsCi0JCQkJICAgICAgZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MGUpXSk7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0IG91dHB1dFxuIik7Ci0KLQkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KLQkJaWYgKCppYXJnICE9IDApIHsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgREVDT0RFUl9FTkFCTEVfT1VUUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCQlpbnQgZW5hYmxlID0gKCppYXJnICE9IDApOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIiVzIG91dHB1dFxuIiwKLQkJCWVuYWJsZSA/ICJlbmFibGUiIDogImRpc2FibGUiKTsKLQotCQlkZWNvZGVyLT5wbGF5YmFjayA9ICFlbmFibGU7Ci0KLQkJaWYgKGRlY29kZXItPmVuYWJsZSAhPSBlbmFibGUpIHsKLQkJCWRlY29kZXItPmVuYWJsZSA9IGVuYWJsZTsKLQotCQkJLyogUko6IElmIG91dHB1dCBzaG91bGQgYmUgZGlzYWJsZWQgKGZvcgotCQkJICogcGxheWluZyB2aWRlb3MpLCB3ZSBhbHNvIG5lZWQgYSBvcGVuIFBMTC4KLQkJCSAqIFRoZSBpbnB1dCBpcyBzZXQgdG8gMCAod2hlcmUgbm8gaW5wdXQKLQkJCSAqIHNvdXJjZSBpcyBjb25uZWN0ZWQpLCBhbHRob3VnaCB0aGlzCi0JCQkgKiBpcyBub3QgbmVjZXNzYXJ5LgotCQkJICoKLQkJCSAqIElmIG91dHB1dCBzaG91bGQgYmUgZW5hYmxlZCwgd2UgaGF2ZSB0bwotCQkJICogcmV2ZXJzZSB0aGUgYWJvdmUuCi0JCQkgKi8KLQotCQkJaWYgKGRlY29kZXItPmVuYWJsZSkgewotCQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDA4KV0gPSAweGI4OwotCQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDEyKV0gPSAweGM5OwotCQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDEzKV0gPSAweDgwOwotCQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDg3KV0gPSAweDAxOwotCQkJfSBlbHNlIHsKLQkJCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwOCldID0gMHg3YzsKLQkJCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgxMildID0gMHgwMDsKLQkJCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgxMyldID0gMHgwMDsKLQkJCQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg4NyldID0gMHgwMDsKLQkJCX0KLQotCQkJc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsCi0JCQkJCSAgICBkZWNvZGVyLT5yZWcgKyAoMHgxMiA8PCAxKSwKLQkJCQkJICAgIDIgPDwgMSk7Ci0JCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwOCwKLQkJCQkgICAgICBkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwOCldKTsKLQkJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDg3LAotCQkJCSAgICAgIGRlY29kZXItPnJlZ1tSRUdfQUREUigweDg3KV0pOwotCQkJc2FhNzExNF93cml0ZShjbGllbnQsIDB4ODgsIDB4ZDgpOwkvLyBzdyByZXNldCBzY2FsZXIKLQkJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDg4LCAweGY4KTsJLy8gc3cgcmVzZXQgc2NhbGVyIHJlbGVhc2UKLQkJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDgwLCAweDM2KTsKLQotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgREVDT0RFUl9TRVRfUElDVFVSRToKLQl7Ci0JCXN0cnVjdCB2aWRlb19waWN0dXJlICpwaWMgPSBhcmc7Ci0KLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAotCQkJImRlY29kZXIgc2V0IHBpY3R1cmUgYnJpZ2h0PSVkIGNvbnRyYXN0PSVkIHNhdHVyYXRpb249JWQgaHVlPSVkXG4iLAotCQkJcGljLT5icmlnaHRuZXNzLCBwaWMtPmNvbnRyYXN0LCBwaWMtPmNvbG91ciwgcGljLT5odWUpOwotCi0JCWlmIChkZWNvZGVyLT5icmlnaHQgIT0gcGljLT5icmlnaHRuZXNzKSB7Ci0JCQkvKiBXZSB3YW50IDAgdG8gMjU1IHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5icmlnaHQgPSBwaWMtPmJyaWdodG5lc3M7Ci0JCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwYSwgZGVjb2Rlci0+YnJpZ2h0ID4+IDgpOwotCQl9Ci0JCWlmIChkZWNvZGVyLT5jb250cmFzdCAhPSBwaWMtPmNvbnRyYXN0KSB7Ci0JCQkvKiBXZSB3YW50IDAgdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5jb250cmFzdCA9IHBpYy0+Y29udHJhc3Q7Ci0JCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwYiwKLQkJCQkgICAgICBkZWNvZGVyLT5jb250cmFzdCA+PiA5KTsKLQkJfQotCQlpZiAoZGVjb2Rlci0+c2F0ICE9IHBpYy0+Y29sb3VyKSB7Ci0JCQkvKiBXZSB3YW50IDAgdG8gMTI3IHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5zYXQgPSBwaWMtPmNvbG91cjsKLQkJCXNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDBjLCBkZWNvZGVyLT5zYXQgPj4gOSk7Ci0JCX0KLQkJaWYgKGRlY29kZXItPmh1ZSAhPSBwaWMtPmh1ZSkgewotCQkJLyogV2Ugd2FudCAtMTI4IHRvIDEyNyB3ZSBnZXQgMC02NTUzNSAqLwotCQkJZGVjb2Rlci0+aHVlID0gcGljLT5odWU7Ci0JCQlzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwZCwKLQkJCQkgICAgICAoZGVjb2Rlci0+aHVlIC0gMzI3NjgpID4+IDgpOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCXJldHVybiAwOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwotCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDQyID4+IDEsIDB4NDAgPj4gMSwgSTJDX0NMSUVOVF9FTkQgfTsKLQotSTJDX0NMSUVOVF9JTlNNT0Q7Ci0KLXN0YXRpYyBpbnQgc2FhNzExNF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQotewotCWludCBpLCBlcnJbMzBdOwotCXNob3J0IGludCBob2ZmID0gU0FBXzcxMTRfTlRTQ19IT0ZGU0VUOwotCXNob3J0IGludCB2b2ZmID0gU0FBXzcxMTRfTlRTQ19WT0ZGU0VUOwotCXNob3J0IGludCB3ID0gU0FBXzcxMTRfTlRTQ19XSURUSDsKLQlzaG9ydCBpbnQgaCA9IFNBQV83MTE0X05UU0NfSEVJR0hUOwotCXN0cnVjdCBzYWE3MTE0ICpkZWNvZGVyOwotCi0JLyogQ2hlY2sgaWYgdGhlIGFkYXB0ZXIgc3VwcG9ydHMgdGhlIG5lZWRlZCBmZWF0dXJlcyAqLwotCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19CWVRFX0RBVEEpKQotCQlyZXR1cm4gLUVOT0RFVjsKLQotCXY0bF9pbmZvKGNsaWVudCwgImNoaXAgZm91bmQgQCAweCV4ICglcylcbiIsCi0JCQljbGllbnQtPmFkZHIgPDwgMSwgY2xpZW50LT5hZGFwdGVyLT5uYW1lKTsKLQotCWRlY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FhNzExNCksIEdGUF9LRVJORUwpOwotCWlmIChkZWNvZGVyID09IE5VTEwpCi0JCXJldHVybiAtRU5PTUVNOwotCWRlY29kZXItPm5vcm0gPSBWSURFT19NT0RFX05UU0M7Ci0JZGVjb2Rlci0+aW5wdXQgPSAtMTsKLQlkZWNvZGVyLT5lbmFibGUgPSAxOwotCWRlY29kZXItPmJyaWdodCA9IDMyNzY4OwotCWRlY29kZXItPmNvbnRyYXN0ID0gMzI3Njg7Ci0JZGVjb2Rlci0+aHVlID0gMzI3Njg7Ci0JZGVjb2Rlci0+c2F0ID0gMzI3Njg7Ci0JZGVjb2Rlci0+cGxheWJhY2sgPSAwOwkvLyBpbml0aWFsbHkgY2FwdHVyZSBtb2RlIHVzZWRhCi0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGVjb2Rlcik7Ci0KLQltZW1jcHkoZGVjb2Rlci0+cmVnLCBpbml0LCBzaXplb2YoaW5pdCkpOwotCi0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4OTQpXSA9IExPQllURShob2ZmKTsJLy8gaG9mZnNldCBsb3cKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5NSldID0gSElCWVRFKGhvZmYpICYgMHgwZjsJLy8gaG9mZnNldCBoaWdoCi0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4OTYpXSA9IExPQllURSh3KTsJLy8gd2lkdGggbG93Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4OTcpXSA9IEhJQllURSh3KSAmIDB4MGY7CS8vIHdpZHRoIGhpZ2gKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5OCldID0gTE9CWVRFKHZvZmYpOwkvLyB2b2Zmc2V0IGxvdwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDk5KV0gPSBISUJZVEUodm9mZikgJiAweDBmOwkvLyB2b2Zmc2V0IGhpZ2gKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5YSldID0gTE9CWVRFKGggKyAyKTsJLy8gaGVpZ2h0IGxvdwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDliKV0gPSBISUJZVEUoaCArIDIpICYgMHgwZjsJLy8gaGVpZ2h0IGhpZ2gKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5YyldID0gTE9CWVRFKHcpOwkvLyBvdXQgd2lkdGggbG93Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4OWQpXSA9IEhJQllURSh3KSAmIDB4MGY7CS8vIG91dCB3aWR0aCBoaWdoCi0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4OWUpXSA9IExPQllURShoKTsJLy8gb3V0IGhlaWdodCBsb3cKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHg5ZildID0gSElCWVRFKGgpICYgMHgwZjsJLy8gb3V0IGhlaWdodCBoaWdoCi0KLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhjNCldID0gTE9CWVRFKGhvZmYpOwkvLyBob2Zmc2V0IGxvdwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGM1KV0gPSBISUJZVEUoaG9mZikgJiAweDBmOwkvLyBob2Zmc2V0IGhpZ2gKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhjNildID0gTE9CWVRFKHcpOwkvLyB3aWR0aCBsb3cKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhjNyldID0gSElCWVRFKHcpICYgMHgwZjsJLy8gd2lkdGggaGlnaAotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGM4KV0gPSBMT0JZVEUodm9mZik7CS8vIHZvZmZzZXQgbG93Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YzkpXSA9IEhJQllURSh2b2ZmKSAmIDB4MGY7CS8vIHZvZmZzZXQgaGlnaAotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGNhKV0gPSBMT0JZVEUoaCArIDIpOwkvLyBoZWlnaHQgbG93Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4Y2IpXSA9IEhJQllURShoICsgMikgJiAweDBmOwkvLyBoZWlnaHQgaGlnaAotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGNjKV0gPSBMT0JZVEUodyk7CS8vIG91dCB3aWR0aCBsb3cKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhjZCldID0gSElCWVRFKHcpICYgMHgwZjsJLy8gb3V0IHdpZHRoIGhpZ2gKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhjZSldID0gTE9CWVRFKGgpOwkvLyBvdXQgaGVpZ2h0IGxvdwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGNmKV0gPSBISUJZVEUoaCkgJiAweDBmOwkvLyBvdXQgaGVpZ2h0IGhpZ2gKLQotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGI4KV0gPQotCSAgICBMT0JZVEUoTE9XT1JEKFNBQV83MTE0X1ZFUlRJQ0FMX0NIUk9NQV9PRkZTRVQpKTsKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhiOSldID0KLQkgICAgSElCWVRFKExPV09SRChTQUFfNzExNF9WRVJUSUNBTF9DSFJPTUFfT0ZGU0VUKSk7Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YmEpXSA9Ci0JICAgIExPQllURShISVdPUkQoU0FBXzcxMTRfVkVSVElDQUxfQ0hST01BX09GRlNFVCkpOwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGJiKV0gPQotCSAgICBISUJZVEUoSElXT1JEKFNBQV83MTE0X1ZFUlRJQ0FMX0NIUk9NQV9PRkZTRVQpKTsKLQotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGJjKV0gPQotCSAgICBMT0JZVEUoTE9XT1JEKFNBQV83MTE0X1ZFUlRJQ0FMX0xVTUFfT0ZGU0VUKSk7Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4YmQpXSA9Ci0JICAgIEhJQllURShMT1dPUkQoU0FBXzcxMTRfVkVSVElDQUxfTFVNQV9PRkZTRVQpKTsKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhiZSldID0KLQkgICAgTE9CWVRFKEhJV09SRChTQUFfNzExNF9WRVJUSUNBTF9MVU1BX09GRlNFVCkpOwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGJmKV0gPQotCSAgICBISUJZVEUoSElXT1JEKFNBQV83MTE0X1ZFUlRJQ0FMX0xVTUFfT0ZGU0VUKSk7Ci0KLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhlOCldID0KLQkgICAgTE9CWVRFKExPV09SRChTQUFfNzExNF9WRVJUSUNBTF9DSFJPTUFfT0ZGU0VUKSk7Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4ZTkpXSA9Ci0JICAgIEhJQllURShMT1dPUkQoU0FBXzcxMTRfVkVSVElDQUxfQ0hST01BX09GRlNFVCkpOwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGVhKV0gPQotCSAgICBMT0JZVEUoSElXT1JEKFNBQV83MTE0X1ZFUlRJQ0FMX0NIUk9NQV9PRkZTRVQpKTsKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhlYildID0KLQkgICAgSElCWVRFKEhJV09SRChTQUFfNzExNF9WRVJUSUNBTF9DSFJPTUFfT0ZGU0VUKSk7Ci0KLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhlYyldID0KLQkgICAgTE9CWVRFKExPV09SRChTQUFfNzExNF9WRVJUSUNBTF9MVU1BX09GRlNFVCkpOwotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweGVkKV0gPQotCSAgICBISUJZVEUoTE9XT1JEKFNBQV83MTE0X1ZFUlRJQ0FMX0xVTUFfT0ZGU0VUKSk7Ci0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4ZWUpXSA9Ci0JICAgIExPQllURShISVdPUkQoU0FBXzcxMTRfVkVSVElDQUxfTFVNQV9PRkZTRVQpKTsKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHhlZildID0KLQkgICAgSElCWVRFKEhJV09SRChTQUFfNzExNF9WRVJUSUNBTF9MVU1BX09GRlNFVCkpOwotCi0KLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgxMyldID0gMHg4MDsJLy8gUlRDMCBvbgotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDg3KV0gPSAweDAxOwkvLyBJLVBvcnQKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgxMildID0gMHhjOTsJLy8gUlRTMAotCi0JZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDIpXSA9IDB4YzA7CS8vIHNldCBjb21wb3NpdGUxIGlucHV0LCBhdmVhc3kKLQlkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwOSldID0gMHgwMDsJLy8gY2hyb21pbmFuY2UgdHJhcAotCWRlY29kZXItPnJlZ1tSRUdfQUREUigweDBlKV0gfD0gMTsJLy8gY29tYmZpbHRlciBvbgotCi0KLQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJzdGFydGluZyBpbml0XG4iKTsKLQotCWVyclswXSA9Ci0JICAgIHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHgyMCA8PCAxKSwKLQkJCQkweDEwIDw8IDEpOwotCWVyclsxXSA9Ci0JICAgIHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHgzMCA8PCAxKSwKLQkJCQkweDEwIDw8IDEpOwotCWVyclsyXSA9Ci0JICAgIHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHg2MyA8PCAxKSwKLQkJCQkoMHg3ZiArIDEgLSAweDYzKSA8PCAxKTsKLQllcnJbM10gPQotCSAgICBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4ODkgPDwgMSksCi0JCQkJNiA8PCAxKTsKLQllcnJbNF0gPQotCSAgICBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4YjggPDwgMSksCi0JCQkJOCA8PCAxKTsKLQllcnJbNV0gPQotCSAgICBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4ZTggPDwgMSksCi0JCQkJOCA8PCAxKTsKLQotCi0JZm9yIChpID0gMDsgaSA8PSA1OyBpKyspIHsKLQkJaWYgKGVycltpXSA8IDApIHsKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKLQkJCQkiaW5pdCBlcnJvciAlZCBhdCBzdGFnZSAlZCwgbGVhdmluZyBhdHRhY2guXG4iLAotCQkJCWksIGVycltpXSk7Ci0JCQlrZnJlZShkZWNvZGVyKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JfQotCi0JZm9yIChpID0gNjsgaSA8IDg7IGkrKykgewotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCi0JCQkicmVnWzB4JTAyeF0gPSAweCUwMnggKDB4JTAyeClcbiIsCi0JCQlpLCBzYWE3MTE0X3JlYWQoY2xpZW50LCBpKSwKLQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUihpKV0pOwotCX0KLQotCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKLQkJInBlcmZvcm1pbmcgZGVjb2RlciByZXNldCBzZXF1ZW5jZVxuIik7Ci0KLQllcnJbNl0gPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4MCwgMHgwNik7CS8vIGktcG9ydCBhbmQgc2NhbGVyIGJhY2tlbmQgY2xvY2sgc2VsZWN0aW9uLCB0YXNrIEEmQiBvZmYKLQllcnJbN10gPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4OCwgMHhkOCk7CS8vIHN3IHJlc2V0IHNjYWxlcgotCWVycls4XSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDg4LCAweGY4KTsJLy8gc3cgcmVzZXQgc2NhbGVyIHJlbGVhc2UKLQotCWZvciAoaSA9IDY7IGkgPD0gODsgaSsrKSB7Ci0JCWlmIChlcnJbaV0gPCAwKSB7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCi0JCQkJImluaXQgZXJyb3IgJWQgYXQgc3RhZ2UgJWQsIGxlYXZpbmcgYXR0YWNoLlxuIiwKLQkJCQlpLCBlcnJbaV0pOwotCQkJa2ZyZWUoZGVjb2Rlcik7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCX0KLQotCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInBlcmZvcm1pbmcgdGhlIHJlc3Qgb2YgaW5pdFxuIik7Ci0KLQllcnJbOV0gPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwMSwgZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDEpXSk7Ci0JZXJyWzEwXSA9IHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHgwMyA8PCAxKSwgKDB4MWUgKyAxIC0gMHgwMykgPDwgMSk7CS8vIGJpZyBzZXEKLQllcnJbMTFdID0gc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweDQwIDw8IDEpLCAoMHg1ZiArIDEgLSAweDQwKSA8PCAxKTsJLy8gc2xpY2VyCi0JZXJyWzEyXSA9IHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHg4MSA8PCAxKSwgMiA8PCAxKTsJLy8gPwotCWVyclsxM10gPSBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4ODMgPDwgMSksIDUgPDwgMSk7CS8vID8KLQllcnJbMTRdID0gc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweDkwIDw8IDEpLCA0IDw8IDEpOwkvLyBUYXNrIEEKLQllcnJbMTVdID0KLQkgICAgc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweDk0IDw8IDEpLAotCQkJCTEyIDw8IDEpOwotCWVyclsxNl0gPQotCSAgICBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4YTAgPDwgMSksCi0JCQkJOCA8PCAxKTsKLQllcnJbMTddID0KLQkgICAgc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweGE4IDw8IDEpLAotCQkJCTggPDwgMSk7Ci0JZXJyWzE4XSA9Ci0JICAgIHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHhiMCA8PCAxKSwKLQkJCQk4IDw8IDEpOwotCWVyclsxOV0gPSBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4YzAgPDwgMSksIDQgPDwgMSk7CS8vIFRhc2sgQgotCWVyclsxNV0gPQotCSAgICBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4YzQgPDwgMSksCi0JCQkJMTIgPDwgMSk7Ci0JZXJyWzE2XSA9Ci0JICAgIHNhYTcxMTRfd3JpdGVfYmxvY2soY2xpZW50LCBkZWNvZGVyLT5yZWcgKyAoMHhkMCA8PCAxKSwKLQkJCQk4IDw8IDEpOwotCWVyclsxN10gPQotCSAgICBzYWE3MTE0X3dyaXRlX2Jsb2NrKGNsaWVudCwgZGVjb2Rlci0+cmVnICsgKDB4ZDggPDwgMSksCi0JCQkJOCA8PCAxKTsKLQllcnJbMThdID0KLQkgICAgc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGRlY29kZXItPnJlZyArICgweGUwIDw8IDEpLAotCQkJCTggPDwgMSk7Ci0KLQlmb3IgKGkgPSA5OyBpIDw9IDE4OyBpKyspIHsKLQkJaWYgKGVycltpXSA8IDApIHsKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKLQkJCQkiaW5pdCBlcnJvciAlZCBhdCBzdGFnZSAlZCwgbGVhdmluZyBhdHRhY2guXG4iLAotCQkJCWksIGVycltpXSk7Ci0JCQlrZnJlZShkZWNvZGVyKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JfQotCi0KLQlmb3IgKGkgPSA2OyBpIDwgODsgaSsrKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKLQkJCSJyZWdbMHglMDJ4XSA9IDB4JTAyeCAoMHglMDJ4KVxuIiwKLQkJCWksIHNhYTcxMTRfcmVhZChjbGllbnQsIGkpLAotCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKGkpXSk7Ci0JfQotCi0KLQlmb3IgKGkgPSAweDExOyBpIDw9IDB4MTM7IGkrKykgewotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCi0JCQkicmVnWzB4JTAyeF0gPSAweCUwMnggKDB4JTAyeClcbiIsCi0JCQlpLCBzYWE3MTE0X3JlYWQoY2xpZW50LCBpKSwKLQkJCWRlY29kZXItPnJlZ1tSRUdfQUREUihpKV0pOwotCX0KLQotCi0JdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAic2V0dGluZyB2aWRlbyBpbnB1dFxuIik7Ci0KLQllcnJbMTldID0KLQkgICAgc2FhNzExNF93cml0ZShjbGllbnQsIDB4MDIsIGRlY29kZXItPnJlZ1tSRUdfQUREUigweDAyKV0pOwotCWVyclsyMF0gPQotCSAgICBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwOSwgZGVjb2Rlci0+cmVnW1JFR19BRERSKDB4MDkpXSk7Ci0JZXJyWzIxXSA9Ci0JICAgIHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDBlLCBkZWNvZGVyLT5yZWdbUkVHX0FERFIoMHgwZSldKTsKLQotCWZvciAoaSA9IDE5OyBpIDw9IDIxOyBpKyspIHsKLQkJaWYgKGVycltpXSA8IDApIHsKLQkJCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKLQkJCQkiaW5pdCBlcnJvciAlZCBhdCBzdGFnZSAlZCwgbGVhdmluZyBhdHRhY2guXG4iLAotCQkJCWksIGVycltpXSk7Ci0JCQlrZnJlZShkZWNvZGVyKTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0JfQotCi0JdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAicGVyZm9ybWluZyBkZWNvZGVyIHJlc2V0IHNlcXVlbmNlXG4iKTsKLQotCWVyclsyMl0gPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4OCwgMHhkOCk7CS8vIHN3IHJlc2V0IHNjYWxlcgotCWVyclsyM10gPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHg4OCwgMHhmOCk7CS8vIHN3IHJlc2V0IHNjYWxlciByZWxlYXNlCi0JZXJyWzI0XSA9IHNhYTcxMTRfd3JpdGUoY2xpZW50LCAweDgwLCAweDM2KTsJLy8gaS1wb3J0IGFuZCBzY2FsZXIgYmFja2VuZCBjbG9jayBzZWxlY3Rpb24sIHRhc2sgQSZCIG9mZgotCi0KLQlmb3IgKGkgPSAyMjsgaSA8PSAyNDsgaSsrKSB7Ci0JCWlmIChlcnJbaV0gPCAwKSB7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCi0JCQkJImluaXQgZXJyb3IgJWQgYXQgc3RhZ2UgJWQsIGxlYXZpbmcgYXR0YWNoLlxuIiwKLQkJCQlpLCBlcnJbaV0pOwotCQkJa2ZyZWUoZGVjb2Rlcik7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCX0KLQotCWVyclsyNV0gPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwNiwgaW5pdFtSRUdfQUREUigweDA2KV0pOwotCWVyclsyNl0gPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgwNywgaW5pdFtSRUdfQUREUigweDA3KV0pOwotCWVyclsyN10gPSBzYWE3MTE0X3dyaXRlKGNsaWVudCwgMHgxMCwgaW5pdFtSRUdfQUREUigweDEwKV0pOwotCi0JdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiY2hpcCB2ZXJzaW9uICV4LCBkZWNvZGVyIHN0YXR1cyAweCUwMnhcbiIsCi0JCXNhYTcxMTRfcmVhZChjbGllbnQsIDB4MDApID4+IDQsCi0JCXNhYTcxMTRfcmVhZChjbGllbnQsIDB4MWYpKTsKLQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCi0JCSJwb3dlciBzYXZlIGNvbnRyb2w6IDB4JTAyeCwgc2NhbGVyIHN0YXR1czogMHglMDJ4XG4iLAotCQlzYWE3MTE0X3JlYWQoY2xpZW50LCAweDg4KSwKLQkJc2FhNzExNF9yZWFkKGNsaWVudCwgMHg4ZikpOwotCi0KLQlmb3IgKGkgPSAweDk0OyBpIDwgMHg5NjsgaSsrKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwKLQkJCSJyZWdbMHglMDJ4XSA9IDB4JTAyeCAoMHglMDJ4KVxuIiwKLQkJCWksIHNhYTcxMTRfcmVhZChjbGllbnQsIGkpLAotCQkJZGVjb2Rlci0+cmVnW1JFR19BRERSKGkpXSk7Ci0JfQotCi0JLy9pID0gc2FhNzExNF93cml0ZV9ibG9jayhjbGllbnQsIGluaXQsIHNpemVvZihpbml0KSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQgc2FhNzExNF9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7Ci0JcmV0dXJuIDA7Ci19Ci0KLS8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCi0KLXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCBzYWE3MTE0X2lkW10gPSB7Ci0JeyAic2FhNzExNF9vbGQiLCAwIH0sCS8qICJzYWE3MTE0IiBtYXBzIHRvIHRoZSBzYWE3MTE1IGRyaXZlciAqLwotCXsgfQotfTsKLU1PRFVMRV9ERVZJQ0VfVEFCTEUoaTJjLCBzYWE3MTE0X2lkKTsKLQotc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewotCS5uYW1lID0gInNhYTcxMTQiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9TQUE3MTE0LAotCS5jb21tYW5kID0gc2FhNzExNF9jb21tYW5kLAotCS5wcm9iZSA9IHNhYTcxMTRfcHJvYmUsCi0JLnJlbW92ZSA9IHNhYTcxMTRfcmVtb3ZlLAotCS5pZF90YWJsZSA9IHNhYTcxMTRfaWQsCi19OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTE1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYwppbmRleCA0NmM3OTZjLi5jZWJmMTU5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMTUuYwpAQCAtNzc4LDcgKzc3OCw3IEBACiAJCWJyZWFrOwogCiAJY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCWlmIChjdHJsLT52YWx1ZSA8IC0xMjcgfHwgY3RybC0+dmFsdWUgPiAxMjcpIHsKKwkJaWYgKGN0cmwtPnZhbHVlIDwgLTEyOCB8fCBjdHJsLT52YWx1ZSA+IDEyNykgewogCQkJdjRsMl9lcnIoc2QsICJpbnZhbGlkIGh1ZSBzZXR0aW5nICVkXG4iLCBjdHJsLT52YWx1ZSk7CiAJCQlyZXR1cm4gLUVSQU5HRTsKIAkJfQpAQCAtOTMxLDggKzkzMSw4IEBACiAJLyogUHJldmVudCB1bm5lY2Vzc2FyeSBzdGFuZGFyZCBjaGFuZ2VzLiBEdXJpbmcgYSBzdGFuZGFyZAogCSAgIGNoYW5nZSB0aGUgSS1Qb3J0IGlzIHRlbXBvcmFyaWx5IGRpc2FibGVkLiBBbnkgZGV2aWNlcwogCSAgIHJlYWRpbmcgZnJvbSB0aGF0IHBvcnQgY2FuIGdldCBjb25mdXNlZC4KLQkgICBOb3RlIHRoYXQgVklESU9DX1NfU1REIGlzIGFsc28gdXNlZCB0byBzd2l0Y2ggZnJvbQotCSAgIHJhZGlvIHRvIFRWIG1vZGUsIHNvIGlmIGEgVklESU9DX1NfU1REIGlzIGJyb2FkY2FzdCB0bworCSAgIE5vdGUgdGhhdCBzX3N0ZCBpcyBhbHNvIHVzZWQgdG8gc3dpdGNoIGZyb20KKwkgICByYWRpbyB0byBUViBtb2RlLCBzbyBpZiBhIHNfc3RkIGlzIGJyb2FkY2FzdCB0bwogCSAgIGFsbCBJMkMgZGV2aWNlcyB0aGVuIHlvdSBkbyBub3Qgd2FudCB0byBoYXZlIGFuIHVud2FudGVkCiAJICAgc2lkZS1lZmZlY3QgaGVyZS4gKi8KIAlpZiAoc3RkID09IHN0YXRlLT5zdGQpCkBAIC0xMjA2LDEwICsxMjA2LDEyIEBACiB7CiAJc3dpdGNoIChxYy0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMjU1LCAxLCAxMjgpOwogCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CiAJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDEyNywgMSwgNjQpOwogCWNhc2UgVjRMMl9DSURfSFVFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjKTsKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAtMTI4LCAxMjcsIDEsIDApOwogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KQEAgLTEzMDgsMTEgKzEzMTAsMTIgQEAKIAl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICIlcyBvdXRwdXRcbiIsCiAJCQllbmFibGUgPyAiZW5hYmxlIiA6ICJkaXNhYmxlIik7CiAKLQlpZiAoc3RhdGUtPmVuYWJsZSAhPSBlbmFibGUpIHsKLQkJc3RhdGUtPmVuYWJsZSA9IGVuYWJsZTsKLQkJc2FhNzExeF93cml0ZShzZCwgUl84N19JX1BPUlRfSV9PX0VOQV9PVVRfQ0xLX0FORF9HQVRFRCwKLQkJCQlzdGF0ZS0+ZW5hYmxlKTsKLQl9CisJaWYgKHN0YXRlLT5lbmFibGUgPT0gZW5hYmxlKQorCQlyZXR1cm4gMDsKKwlzdGF0ZS0+ZW5hYmxlID0gZW5hYmxlOworCWlmICghc2FhNzExeF9oYXNfcmVnKHN0YXRlLT5pZGVudCwgUl84N19JX1BPUlRfSV9PX0VOQV9PVVRfQ0xLX0FORF9HQVRFRCkpCisJCXJldHVybiAwOworCXNhYTcxMXhfd3JpdGUoc2QsIFJfODdfSV9QT1JUX0lfT19FTkFfT1VUX0NMS19BTkRfR0FURUQsIHN0YXRlLT5lbmFibGUpOwogCXJldHVybiAwOwogfQogCkBAIC0xMzcwLDYgKzEzNzMsNDcgQEAKIAl9CiB9CiAKK3N0YXRpYyBpbnQgc2FhNzExeF9xdWVyeXN0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCAqc3RkKQoreworCXN0cnVjdCBzYWE3MTF4X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwlpbnQgcmVnMWU7CisKKwkqc3RkID0gVjRMMl9TVERfQUxMOworCWlmIChzdGF0ZS0+aWRlbnQgIT0gVjRMMl9JREVOVF9TQUE3MTE1KQorCQlyZXR1cm4gMDsKKwlyZWcxZSA9IHNhYTcxMXhfcmVhZChzZCwgUl8xRV9TVEFUVVNfQllURV8xX1ZEX0RFQyk7CisKKwlzd2l0Y2ggKHJlZzFlICYgMHgwMykgeworCWNhc2UgMToKKwkJKnN0ZCA9IFY0TDJfU1REX05UU0M7CisJCWJyZWFrOworCWNhc2UgMjoKKwkJKnN0ZCA9IFY0TDJfU1REX1BBTDsKKwkJYnJlYWs7CisJY2FzZSAzOgorCQkqc3RkID0gVjRMMl9TVERfU0VDQU07CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCWJyZWFrOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE3MTF4X2dfaW5wdXRfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiAqc3RhdHVzKQoreworCXN0cnVjdCBzYWE3MTF4X3N0YXRlICpzdGF0ZSA9IHRvX3N0YXRlKHNkKTsKKwlpbnQgcmVnMWUgPSAweDgwOworCWludCByZWcxZjsKKworCSpzdGF0dXMgPSBWNEwyX0lOX1NUX05PX1NJR05BTDsKKwlpZiAoc3RhdGUtPmlkZW50ID09IFY0TDJfSURFTlRfU0FBNzExNSkKKwkJcmVnMWUgPSBzYWE3MTF4X3JlYWQoc2QsIFJfMUVfU1RBVFVTX0JZVEVfMV9WRF9ERUMpOworCXJlZzFmID0gc2FhNzExeF9yZWFkKHNkLCBSXzFGX1NUQVRVU19CWVRFXzJfVkRfREVDKTsKKwlpZiAoKHJlZzFmICYgMHhjMSkgPT0gMHg4MSAmJiAocmVnMWUgJiAweGMwKSA9PSAweDgwKQorCQkqc3RhdHVzID0gMDsKKwlyZXR1cm4gMDsKK30KKwogI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKIHN0YXRpYyBpbnQgc2FhNzExeF9nX3JlZ2lzdGVyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19yZWdpc3RlciAqcmVnKQogewpAQCAtMTQ5Myw2ICsxNTM3LDggQEAKIAkuZ192YmlfZGF0YSA9IHNhYTcxMXhfZ192YmlfZGF0YSwKIAkuZGVjb2RlX3ZiaV9saW5lID0gc2FhNzExeF9kZWNvZGVfdmJpX2xpbmUsCiAJLnNfc3RyZWFtID0gc2FhNzExeF9zX3N0cmVhbSwKKwkucXVlcnlzdGQgPSBzYWE3MTF4X3F1ZXJ5c3RkLAorCS5nX2lucHV0X3N0YXR1cyA9IHNhYTcxMXhfZ19pbnB1dF9zdGF0dXMsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBzYWE3MTF4X29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEyNy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMKaW5kZXggMDUyMjFkNC4uMTI4YmI4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTI3LmMKQEAgLTgxMCw3ICs4MTAsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAic2FhNzEyNyIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1NBQTcxMjcsCiAJLnByb2JlID0gc2FhNzEyN19wcm9iZSwKIAkucmVtb3ZlID0gc2FhNzEyN19yZW1vdmUsCiAJLmlkX3RhYmxlID0gc2FhNzEyN19pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9LY29uZmlnIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L0tjb25maWcKaW5kZXggZmMyMTY0ZS4uMGJhNjg5OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L0tjb25maWcKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L0tjb25maWcKQEAgLTYsNiArNiw3IEBACiAJc2VsZWN0IFZJREVPX1RVTkVSCiAJc2VsZWN0IFZJREVPX1RWRUVQUk9NCiAJc2VsZWN0IENSQzMyCisJc2VsZWN0IFZJREVPX1NBQTY1ODggaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAktLS1oZWxwLS0tCiAJICBUaGlzIGlzIGEgdmlkZW80bGludXggZHJpdmVyIGZvciBQaGlsaXBzIFNBQTcxM3ggYmFzZWQKIAkgIFRWIGNhcmRzLgpAQCAtMzUsOCArMzYsMTYgQEAKIAlzZWxlY3QgRFZCX1REQTEwMDg2IGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9UREE4MjZYIGlmICFEVkJfRkVfQ1VTVE9NSVNFCiAJc2VsZWN0IERWQl9JU0w2NDIxIGlmICFEVkJfRkVfQ1VTVE9NSVNFCi0Jc2VsZWN0IE1FRElBX1RVTkVSX1REQTgyN1ggaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQotCXNlbGVjdCBNRURJQV9UVU5FUl9TSU1QTEUgaWYgIU1FRElBX1RVTkVSX0NVU1RPTUlaRQorCXNlbGVjdCBEVkJfSVNMNjQwNSBpZiAhRFZCX0ZFX0NVU1RPTUlTRQorCXNlbGVjdCBNRURJQV9UVU5FUl9UREE4MjdYIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfU0lNUExFIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1pMMTAwMzYgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX01UMzEyIGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IERWQl9MTkJQMjEgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX1pMMTAzNTMgaWYgIURWQl9GRV9DVVNUT01JU0UKKwlzZWxlY3QgRFZCX0xHRFQzMzA1IGlmICFEVkJfRkVfQ1VTVE9NSVNFCisJc2VsZWN0IE1FRElBX1RVTkVSX1REQTE4MjcxIGlmICFNRURJQV9UVU5FUl9DVVNUT01JU0UKKwlzZWxlY3QgTUVESUFfVFVORVJfVERBODI5MCBpZiAhTUVESUFfVFVORVJfQ1VTVE9NSVNFCiAJLS0taGVscC0tLQogCSAgVGhpcyBhZGRzIHN1cHBvcnQgZm9yIERWQiBjYXJkcyBiYXNlZCBvbiB0aGUKIAkgIFBoaWxpcHMgc2FhNzEzNCBjaGlwLgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTY3NTJocy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTY3NTJocy5jCmluZGV4IDFmZWU2ZTguLmRjMjIxM2UgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE2NzUyaHMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNjc1MmhzLmMKQEAgLTMzLDkgKzMzLDEwIEBACiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogCkBAIC00NCwxMCArNDUsNiBAQAogI2RlZmluZSBNUEVHX1RPVEFMX1RBUkdFVF9CSVRSQVRFX01BWCAgMjcwMDAKICNkZWZpbmUgTVBFR19QSURfTUFYICgoMSA8PCAxNCkgLSAxKQogCi0vKiBBZGRyZXNzZXMgdG8gc2NhbiAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsweDIwLCBJMkNfQ0xJRU5UX0VORH07Ci0KLUkyQ19DTElFTlRfSU5TTU9EOwogCiBNT0RVTEVfREVTQ1JJUFRJT04oImRldmljZSBkcml2ZXIgZm9yIHNhYTY3NTJocyBNUEVHMiBlbmNvZGVyIik7CiBNT0RVTEVfQVVUSE9SKCJBbmRyZXcgZGUgUXVpbmNleSIpOwpAQCAtOTUsNiArOTIsNyBAQAogfTsKIAogc3RydWN0IHNhYTY3NTJoc19zdGF0ZSB7CisJc3RydWN0IHY0bDJfc3ViZGV2ICAgICAgICAgICAgc2Q7CiAJaW50IAkJCSAgICAgIGNoaXA7CiAJdTMyIAkJCSAgICAgIHJldmlzaW9uOwogCWludCAJCQkgICAgICBoYXNfYWMzOwpAQCAtMTE1LDYgKzExMywxMSBAQAogCVNBQTY3NTJIU19DT01NQU5EX01BWAogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlICp0b19zdGF0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCBzYWE2NzUyaHNfc3RhdGUsIHNkKTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgdTggUEFUW10gPSB7CkBAIC0zNjAsMTg1ICszNjMsMTkxIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNhYTY3NTJoc19zZXRfc3Vic2FtcGxpbmcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCQkgICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCisKK3N0YXRpYyBpbnQgZ2V0X2N0cmwoaW50IGhhc19hYzMsIHN0cnVjdCBzYWE2NzUyaHNfbXBlZ19wYXJhbXMgKnBhcmFtcywKKwkJc3RydWN0IHY0bDJfZXh0X2NvbnRyb2wgKmN0cmwpCiB7Ci0Jc3RydWN0IHNhYTY3NTJoc19zdGF0ZSAqaCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCWludCBkaXN0XzM1MiwgZGlzdF80ODAsIGRpc3RfNzIwOwotCi0JLyoKLQkgIEZJWE1FOiB0cmFuc2xhdGUgYW5kIHJvdW5kIHdpZHRoL2hlaWdodCBpbnRvIEVNUFJFU1MKLQkgIHN1YnNhbXBsZSB0eXBlOgotCi0JICB0eXBlICAgfCAgIFBBTCAgIHwgIE5UU0MKLQkgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAgU0lGICAgIHwgMzUyeDI4OCB8IDM1MngyNDAKLQkgIDEvMiBEMSB8IDM1Mng1NzYgfCAzNTJ4NDgwCi0JICAyLzMgRDEgfCA0ODB4NTc2IHwgNDgweDQ4MAotCSAgRDEgICAgIHwgNzIweDU3NiB8IDcyMHg0ODAKLQkqLwotCi0JZGlzdF8zNTIgPSBhYnMoZi0+Zm10LnBpeC53aWR0aCAtIDM1Mik7Ci0JZGlzdF80ODAgPSBhYnMoZi0+Zm10LnBpeC53aWR0aCAtIDQ4MCk7Ci0JZGlzdF83MjAgPSBhYnMoZi0+Zm10LnBpeC53aWR0aCAtIDcyMCk7Ci0JaWYgKGRpc3RfNzIwIDwgZGlzdF80ODApIHsKLQkJZi0+Zm10LnBpeC53aWR0aCA9IDcyMDsKLQkJZi0+Zm10LnBpeC5oZWlnaHQgPSA1NzY7Ci0JCWgtPnZpZGVvX2Zvcm1hdCA9IFNBQTY3NTJIU19WRl9EMTsKLQl9Ci0JZWxzZSBpZiAoZGlzdF80ODAgPCBkaXN0XzM1MikgewotCQlmLT5mbXQucGl4LndpZHRoID0gNDgwOwotCQlmLT5mbXQucGl4LmhlaWdodCA9IDU3NjsKLQkJaC0+dmlkZW9fZm9ybWF0ID0gU0FBNjc1MkhTX1ZGXzJfM19EMTsKLQl9Ci0JZWxzZSB7Ci0JCWYtPmZtdC5waXgud2lkdGggPSAzNTI7Ci0JCWlmIChhYnMoZi0+Zm10LnBpeC5oZWlnaHQgLSA1NzYpIDwKLQkJICAgIGFicyhmLT5mbXQucGl4LmhlaWdodCAtIDI4OCkpIHsKLQkJCWYtPmZtdC5waXguaGVpZ2h0ID0gNTc2OwotCQkJaC0+dmlkZW9fZm9ybWF0ID0gU0FBNjc1MkhTX1ZGXzFfMl9EMTsKLQkJfQotCQllbHNlIHsKLQkJCWYtPmZtdC5waXguaGVpZ2h0ID0gMjg4OwotCQkJaC0+dmlkZW9fZm9ybWF0ID0gU0FBNjc1MkhTX1ZGX1NJRjsKLQkJfQotCX0KLX0KLQotCi1zdGF0aWMgaW50IGhhbmRsZV9jdHJsKGludCBoYXNfYWMzLCBzdHJ1Y3Qgc2FhNjc1MmhzX21wZWdfcGFyYW1zICpwYXJhbXMsCi0JCXN0cnVjdCB2NGwyX2V4dF9jb250cm9sICpjdHJsLCB1bnNpZ25lZCBpbnQgY21kKQotewotCWludCBvbGQgPSAwLCBuZXc7Ci0JaW50IHNldCA9IChjbWQgPT0gVklESU9DX1NfRVhUX0NUUkxTKTsKLQotCW5ldyA9IGN0cmwtPnZhbHVlOwogCXN3aXRjaCAoY3RybC0+aWQpIHsKLQkJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFOgotCQkJb2xkID0gVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1RTOwotCQkJaWYgKHNldCAmJiBuZXcgIT0gb2xkKQotCQkJCXJldHVybiAtRVJBTkdFOwotCQkJbmV3ID0gb2xkOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1BNVDoKLQkJCW9sZCA9IHBhcmFtcy0+dHNfcGlkX3BtdDsKLQkJCWlmIChzZXQgJiYgbmV3ID4gTVBFR19QSURfTUFYKQotCQkJCXJldHVybiAtRVJBTkdFOwotCQkJaWYgKG5ldyA+IE1QRUdfUElEX01BWCkKLQkJCQluZXcgPSBNUEVHX1BJRF9NQVg7Ci0JCQlwYXJhbXMtPnRzX3BpZF9wbXQgPSBuZXc7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfQVVESU86Ci0JCQlvbGQgPSBwYXJhbXMtPnRzX3BpZF9hdWRpbzsKLQkJCWlmIChzZXQgJiYgbmV3ID4gTVBFR19QSURfTUFYKQotCQkJCXJldHVybiAtRVJBTkdFOwotCQkJaWYgKG5ldyA+IE1QRUdfUElEX01BWCkKLQkJCQluZXcgPSBNUEVHX1BJRF9NQVg7Ci0JCQlwYXJhbXMtPnRzX3BpZF9hdWRpbyA9IG5ldzsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9WSURFTzoKLQkJCW9sZCA9IHBhcmFtcy0+dHNfcGlkX3ZpZGVvOwotCQkJaWYgKHNldCAmJiBuZXcgPiBNUEVHX1BJRF9NQVgpCi0JCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCQlpZiAobmV3ID4gTVBFR19QSURfTUFYKQotCQkJCW5ldyA9IE1QRUdfUElEX01BWDsKLQkJCXBhcmFtcy0+dHNfcGlkX3ZpZGVvID0gbmV3OwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1BDUjoKLQkJCW9sZCA9IHBhcmFtcy0+dHNfcGlkX3BjcjsKLQkJCWlmIChzZXQgJiYgbmV3ID4gTVBFR19QSURfTUFYKQotCQkJCXJldHVybiAtRVJBTkdFOwotCQkJaWYgKG5ldyA+IE1QRUdfUElEX01BWCkKLQkJCQluZXcgPSBNUEVHX1BJRF9NQVg7Ci0JCQlwYXJhbXMtPnRzX3BpZF9wY3IgPSBuZXc7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HOgotCQkJb2xkID0gcGFyYW1zLT5hdV9lbmNvZGluZzsKLQkJCWlmIChzZXQgJiYgbmV3ICE9IFY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8yICYmCi0JCQkgICAgKCFoYXNfYWMzIHx8IG5ldyAhPSBWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfQUMzKSkKLQkJCQlyZXR1cm4gLUVSQU5HRTsKLQkJCW5ldyA9IG9sZDsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURToKLQkJCW9sZCA9IHBhcmFtcy0+YXVfbDJfYml0cmF0ZTsKLQkJCWlmIChzZXQgJiYgbmV3ICE9IFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzI1NksgJiYKLQkJCQkgICBuZXcgIT0gVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMzg0SykKLQkJCQlyZXR1cm4gLUVSQU5HRTsKLQkJCWlmIChuZXcgPD0gVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMjU2SykKLQkJCQluZXcgPSBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8yNTZLOwotCQkJZWxzZQotCQkJCW5ldyA9IFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzM4NEs7Ci0JCQlwYXJhbXMtPmF1X2wyX2JpdHJhdGUgPSBuZXc7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0FDM19CSVRSQVRFOgotCQkJaWYgKCFoYXNfYWMzKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJb2xkID0gcGFyYW1zLT5hdV9hYzNfYml0cmF0ZTsKLQkJCWlmIChzZXQgJiYgbmV3ICE9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yNTZLICYmCi0JCQkJICAgbmV3ICE9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zODRLKQotCQkJCXJldHVybiAtRVJBTkdFOwotCQkJaWYgKG5ldyA8PSBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMjU2SykKLQkJCQluZXcgPSBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMjU2SzsKLQkJCWVsc2UKLQkJCQluZXcgPSBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMzg0SzsKLQkJCXBhcmFtcy0+YXVfYWMzX2JpdHJhdGUgPSBuZXc7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVE6Ci0JCQlvbGQgPSBWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80ODAwMDsKLQkJCWlmIChzZXQgJiYgbmV3ICE9IG9sZCkKLQkJCQlyZXR1cm4gLUVSQU5HRTsKLQkJCW5ldyA9IG9sZDsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkc6Ci0JCQlvbGQgPSBWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18yOwotCQkJaWYgKHNldCAmJiBuZXcgIT0gb2xkKQotCQkJCXJldHVybiAtRVJBTkdFOwotCQkJbmV3ID0gb2xkOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19BU1BFQ1Q6Ci0JCQlvbGQgPSBwYXJhbXMtPnZpX2FzcGVjdDsKLQkJCWlmIChzZXQgJiYgbmV3ICE9IFY0TDJfTVBFR19WSURFT19BU1BFQ1RfMTZ4OSAmJgotCQkJCSAgIG5ldyAhPSBWNEwyX01QRUdfVklERU9fQVNQRUNUXzR4MykKLQkJCQlyZXR1cm4gLUVSQU5HRTsKLQkJCWlmIChuZXcgIT0gVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF8xNng5KQotCQkJCW5ldyA9IFY0TDJfTVBFR19WSURFT19BU1BFQ1RfNHgzOwotCQkJcGFyYW1zLT52aV9hc3BlY3QgPSBuZXc7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEU6Ci0JCQlvbGQgPSBwYXJhbXMtPnZpX2JpdHJhdGUgKiAxMDAwOwotCQkJbmV3ID0gMTAwMCAqIChuZXcgLyAxMDAwKTsKLQkJCWlmIChzZXQgJiYgbmV3ID4gTVBFR19WSURFT19UQVJHRVRfQklUUkFURV9NQVggKiAxMDAwKQotCQkJCXJldHVybiAtRVJBTkdFOwotCQkJaWYgKG5ldyA+IE1QRUdfVklERU9fVEFSR0VUX0JJVFJBVEVfTUFYICogMTAwMCkKLQkJCQluZXcgPSBNUEVHX1ZJREVPX1RBUkdFVF9CSVRSQVRFX01BWCAqIDEwMDA7Ci0JCQlwYXJhbXMtPnZpX2JpdHJhdGUgPSBuZXcgLyAxMDAwOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUs6Ci0JCQlvbGQgPSBwYXJhbXMtPnZpX2JpdHJhdGVfcGVhayAqIDEwMDA7Ci0JCQluZXcgPSAxMDAwICogKG5ldyAvIDEwMDApOwotCQkJaWYgKHNldCAmJiBuZXcgPiBNUEVHX1ZJREVPX1RBUkdFVF9CSVRSQVRFX01BWCAqIDEwMDApCi0JCQkJcmV0dXJuIC1FUkFOR0U7Ci0JCQlpZiAobmV3ID4gTVBFR19WSURFT19UQVJHRVRfQklUUkFURV9NQVggKiAxMDAwKQotCQkJCW5ldyA9IE1QRUdfVklERU9fVEFSR0VUX0JJVFJBVEVfTUFYICogMTAwMDsKLQkJCXBhcmFtcy0+dmlfYml0cmF0ZV9wZWFrID0gbmV3IC8gMTAwMDsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFOgotCQkJb2xkID0gcGFyYW1zLT52aV9iaXRyYXRlX21vZGU7Ci0JCQlwYXJhbXMtPnZpX2JpdHJhdGVfbW9kZSA9IG5ldzsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgorCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fVFlQRToKKwkJY3RybC0+dmFsdWUgPSBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfVFM7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1BNVDoKKwkJY3RybC0+dmFsdWUgPSBwYXJhbXMtPnRzX3BpZF9wbXQ7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX0FVRElPOgorCQljdHJsLT52YWx1ZSA9IHBhcmFtcy0+dHNfcGlkX2F1ZGlvOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9WSURFTzoKKwkJY3RybC0+dmFsdWUgPSBwYXJhbXMtPnRzX3BpZF92aWRlbzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUENSOgorCQljdHJsLT52YWx1ZSA9IHBhcmFtcy0+dHNfcGlkX3BjcjsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HOgorCQljdHJsLT52YWx1ZSA9IHBhcmFtcy0+YXVfZW5jb2Rpbmc7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMl9CSVRSQVRFOgorCQljdHJsLT52YWx1ZSA9IHBhcmFtcy0+YXVfbDJfYml0cmF0ZTsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0FDM19CSVRSQVRFOgorCQlpZiAoIWhhc19hYzMpCiAJCQlyZXR1cm4gLUVJTlZBTDsKKwkJY3RybC0+dmFsdWUgPSBwYXJhbXMtPmF1X2FjM19iaXRyYXRlOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUToKKwkJY3RybC0+dmFsdWUgPSBWNEwyX01QRUdfQVVESU9fU0FNUExJTkdfRlJFUV80ODAwMDsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0VOQ09ESU5HOgorCQljdHJsLT52YWx1ZSA9IFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzI7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19BU1BFQ1Q6CisJCWN0cmwtPnZhbHVlID0gcGFyYW1zLT52aV9hc3BlY3Q7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFOgorCQljdHJsLT52YWx1ZSA9IHBhcmFtcy0+dmlfYml0cmF0ZSAqIDEwMDA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUs6CisJCWN0cmwtPnZhbHVlID0gcGFyYW1zLT52aV9iaXRyYXRlX3BlYWsgKiAxMDAwOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFOgorCQljdHJsLT52YWx1ZSA9IHBhcmFtcy0+dmlfYml0cmF0ZV9tb2RlOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0JaWYgKGNtZCA9PSBWSURJT0NfR19FWFRfQ1RSTFMpCi0JCWN0cmwtPnZhbHVlID0gb2xkOwotCWVsc2UKLQkJY3RybC0+dmFsdWUgPSBuZXc7CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNjc1MmhzX3FjdHJsKHN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmgsCi0JCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWN0cmwpCitzdGF0aWMgaW50IGhhbmRsZV9jdHJsKGludCBoYXNfYWMzLCBzdHJ1Y3Qgc2FhNjc1MmhzX21wZWdfcGFyYW1zICpwYXJhbXMsCisJCXN0cnVjdCB2NGwyX2V4dF9jb250cm9sICpjdHJsLCBpbnQgc2V0KQogeworCWludCBvbGQgPSAwLCBuZXc7CisKKwluZXcgPSBjdHJsLT52YWx1ZTsKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFOgorCQlvbGQgPSBWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfVFM7CisJCWlmIChzZXQgJiYgbmV3ICE9IG9sZCkKKwkJCXJldHVybiAtRVJBTkdFOworCQluZXcgPSBvbGQ7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1BNVDoKKwkJb2xkID0gcGFyYW1zLT50c19waWRfcG10OworCQlpZiAoc2V0ICYmIG5ldyA+IE1QRUdfUElEX01BWCkKKwkJCXJldHVybiAtRVJBTkdFOworCQlpZiAobmV3ID4gTVBFR19QSURfTUFYKQorCQkJbmV3ID0gTVBFR19QSURfTUFYOworCQlwYXJhbXMtPnRzX3BpZF9wbXQgPSBuZXc7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX0FVRElPOgorCQlvbGQgPSBwYXJhbXMtPnRzX3BpZF9hdWRpbzsKKwkJaWYgKHNldCAmJiBuZXcgPiBNUEVHX1BJRF9NQVgpCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJaWYgKG5ldyA+IE1QRUdfUElEX01BWCkKKwkJCW5ldyA9IE1QRUdfUElEX01BWDsKKwkJcGFyYW1zLT50c19waWRfYXVkaW8gPSBuZXc7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1ZJREVPOgorCQlvbGQgPSBwYXJhbXMtPnRzX3BpZF92aWRlbzsKKwkJaWYgKHNldCAmJiBuZXcgPiBNUEVHX1BJRF9NQVgpCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJaWYgKG5ldyA+IE1QRUdfUElEX01BWCkKKwkJCW5ldyA9IE1QRUdfUElEX01BWDsKKwkJcGFyYW1zLT50c19waWRfdmlkZW8gPSBuZXc7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1BDUjoKKwkJb2xkID0gcGFyYW1zLT50c19waWRfcGNyOworCQlpZiAoc2V0ICYmIG5ldyA+IE1QRUdfUElEX01BWCkKKwkJCXJldHVybiAtRVJBTkdFOworCQlpZiAobmV3ID4gTVBFR19QSURfTUFYKQorCQkJbmV3ID0gTVBFR19QSURfTUFYOworCQlwYXJhbXMtPnRzX3BpZF9wY3IgPSBuZXc7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzoKKwkJb2xkID0gcGFyYW1zLT5hdV9lbmNvZGluZzsKKwkJaWYgKHNldCAmJiBuZXcgIT0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIgJiYKKwkJICAgICghaGFzX2FjMyB8fCBuZXcgIT0gVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0FDMykpCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJbmV3ID0gb2xkOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDJfQklUUkFURToKKwkJb2xkID0gcGFyYW1zLT5hdV9sMl9iaXRyYXRlOworCQlpZiAoc2V0ICYmIG5ldyAhPSBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8yNTZLICYmCisJCQkgICBuZXcgIT0gVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMzg0SykKKwkJCXJldHVybiAtRVJBTkdFOworCQlpZiAobmV3IDw9IFY0TDJfTVBFR19BVURJT19MMl9CSVRSQVRFXzI1NkspCisJCQluZXcgPSBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8yNTZLOworCQllbHNlCisJCQluZXcgPSBWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zODRLOworCQlwYXJhbXMtPmF1X2wyX2JpdHJhdGUgPSBuZXc7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19BQzNfQklUUkFURToKKwkJaWYgKCFoYXNfYWMzKQorCQkJcmV0dXJuIC1FSU5WQUw7CisJCW9sZCA9IHBhcmFtcy0+YXVfYWMzX2JpdHJhdGU7CisJCWlmIChzZXQgJiYgbmV3ICE9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yNTZLICYmCisJCQkgICBuZXcgIT0gVjRMMl9NUEVHX0FVRElPX0FDM19CSVRSQVRFXzM4NEspCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJaWYgKG5ldyA8PSBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMjU2SykKKwkJCW5ldyA9IFY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8yNTZLOworCQllbHNlCisJCQluZXcgPSBWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMzg0SzsKKwkJcGFyYW1zLT5hdV9hYzNfYml0cmF0ZSA9IG5ldzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVE6CisJCW9sZCA9IFY0TDJfTVBFR19BVURJT19TQU1QTElOR19GUkVRXzQ4MDAwOworCQlpZiAoc2V0ICYmIG5ldyAhPSBvbGQpCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJbmV3ID0gb2xkOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkc6CisJCW9sZCA9IFY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzI7CisJCWlmIChzZXQgJiYgbmV3ICE9IG9sZCkKKwkJCXJldHVybiAtRVJBTkdFOworCQluZXcgPSBvbGQ7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19BU1BFQ1Q6CisJCW9sZCA9IHBhcmFtcy0+dmlfYXNwZWN0OworCQlpZiAoc2V0ICYmIG5ldyAhPSBWNEwyX01QRUdfVklERU9fQVNQRUNUXzE2eDkgJiYKKwkJCSAgIG5ldyAhPSBWNEwyX01QRUdfVklERU9fQVNQRUNUXzR4MykKKwkJCXJldHVybiAtRVJBTkdFOworCQlpZiAobmV3ICE9IFY0TDJfTVBFR19WSURFT19BU1BFQ1RfMTZ4OSkKKwkJCW5ldyA9IFY0TDJfTVBFR19WSURFT19BU1BFQ1RfNHgzOworCQlwYXJhbXMtPnZpX2FzcGVjdCA9IG5ldzsKKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEU6CisJCW9sZCA9IHBhcmFtcy0+dmlfYml0cmF0ZSAqIDEwMDA7CisJCW5ldyA9IDEwMDAgKiAobmV3IC8gMTAwMCk7CisJCWlmIChzZXQgJiYgbmV3ID4gTVBFR19WSURFT19UQVJHRVRfQklUUkFURV9NQVggKiAxMDAwKQorCQkJcmV0dXJuIC1FUkFOR0U7CisJCWlmIChuZXcgPiBNUEVHX1ZJREVPX1RBUkdFVF9CSVRSQVRFX01BWCAqIDEwMDApCisJCQluZXcgPSBNUEVHX1ZJREVPX1RBUkdFVF9CSVRSQVRFX01BWCAqIDEwMDA7CisJCXBhcmFtcy0+dmlfYml0cmF0ZSA9IG5ldyAvIDEwMDA7CisJCWJyZWFrOworCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFX1BFQUs6CisJCW9sZCA9IHBhcmFtcy0+dmlfYml0cmF0ZV9wZWFrICogMTAwMDsKKwkJbmV3ID0gMTAwMCAqIChuZXcgLyAxMDAwKTsKKwkJaWYgKHNldCAmJiBuZXcgPiBNUEVHX1ZJREVPX1RBUkdFVF9CSVRSQVRFX01BWCAqIDEwMDApCisJCQlyZXR1cm4gLUVSQU5HRTsKKwkJaWYgKG5ldyA+IE1QRUdfVklERU9fVEFSR0VUX0JJVFJBVEVfTUFYICogMTAwMCkKKwkJCW5ldyA9IE1QRUdfVklERU9fVEFSR0VUX0JJVFJBVEVfTUFYICogMTAwMDsKKwkJcGFyYW1zLT52aV9iaXRyYXRlX3BlYWsgPSBuZXcgLyAxMDAwOworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFOgorCQlvbGQgPSBwYXJhbXMtPnZpX2JpdHJhdGVfbW9kZTsKKwkJcGFyYW1zLT52aV9iaXRyYXRlX21vZGUgPSBuZXc7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwljdHJsLT52YWx1ZSA9IG5ldzsKKwlyZXR1cm4gMDsKK30KKworCitzdGF0aWMgaW50IHNhYTY3NTJoc19xdWVyeWN0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCkKK3sKKwlzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlICpoID0gdG9fc3RhdGUoc2QpOwogCXN0cnVjdCBzYWE2NzUyaHNfbXBlZ19wYXJhbXMgKnBhcmFtcyA9ICZoLT5wYXJhbXM7CiAJaW50IGVycjsKIApAQCAtNTgzLDcgKzU5Miw3IEBACiAJCQkJVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF80eDMpOwogCiAJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfUEVBSzoKLQkJZXJyID0gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjdHJsKTsKKwkJZXJyID0gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDI3MDAwMDAwLCAxLCA4MDAwMDAwKTsKIAkJaWYgKGVyciA9PSAwICYmCiAJCSAgICBwYXJhbXMtPnZpX2JpdHJhdGVfbW9kZSA9PQogCQkJCVY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfQ0JSKQpAQCAtNTk3LDEyICs2MDYsMjAgQEAKIAkJCQlWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfVFMpOwogCiAJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAorCQkJCVY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSLAorCQkJCVY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfQ0JSLCAxLAorCQkJCVY0TDJfTVBFR19WSURFT19CSVRSQVRFX01PREVfVkJSKTsKIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAyNzAwMDAwMCwgMSwgNjAwMDAwMCk7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUE1UOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsICgxIDw8IDE0KSAtIDEsIDEsIDE2KTsKIAljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9BVURJTzoKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAoMSA8PCAxNCkgLSAxLCAxLCAyNjApOwogCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX1ZJREVPOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsICgxIDw8IDE0KSAtIDEsIDEsIDI1Nik7CiAJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfUENSOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjdHJsKTsKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAoMSA8PCAxNCkgLSAxLCAxLCAyNTkpOwogCiAJZGVmYXVsdDoKIAkJYnJlYWs7CkBAIC02MTAsOCArNjI3LDcgQEAKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCBzYWE2NzUyaHNfcW1lbnUoc3RydWN0IHNhYTY3NTJoc19zdGF0ZSAqaCwKLQkJc3RydWN0IHY0bDJfcXVlcnltZW51ICpxbWVudSkKK3N0YXRpYyBpbnQgc2FhNjc1MmhzX3F1ZXJ5bWVudShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKnFtZW51KQogewogCXN0YXRpYyBjb25zdCB1MzIgbXBlZ19hdWRpb19lbmNvZGluZ1tdID0gewogCQlWNEwyX01QRUdfQVVESU9fRU5DT0RJTkdfTEFZRVJfMiwKQEAgLTYzMiwxMSArNjQ4LDEyIEBACiAJCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zODRLLAogCQlWNEwyX0NUUkxfTUVOVV9JRFNfRU5ECiAJfTsKKwlzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlICpoID0gdG9fc3RhdGUoc2QpOwogCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCBxY3RybDsKIAlpbnQgZXJyOwogCiAJcWN0cmwuaWQgPSBxbWVudS0+aWQ7Ci0JZXJyID0gc2FhNjc1MmhzX3FjdHJsKGgsICZxY3RybCk7CisJZXJyID0gc2FhNjc1MmhzX3F1ZXJ5Y3RybChzZCwgJnFjdHJsKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCXN3aXRjaCAocW1lbnUtPmlkKSB7CkBAIC02NTYsMTcgKzY3MywxNiBAQAogCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfbWVudShxbWVudSwgJnFjdHJsLCBOVUxMKTsKIH0KIAotc3RhdGljIGludCBzYWE2NzUyaHNfaW5pdChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1MzIgbGVhZGluZ19udWxsX2J5dGVzKQorc3RhdGljIGludCBzYWE2NzUyaHNfaW5pdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgbGVhZGluZ19udWxsX2J5dGVzKQogewogCXVuc2lnbmVkIGNoYXIgYnVmWzldLCBidWYyWzRdOwotCXN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmg7CisJc3RydWN0IHNhYTY3NTJoc19zdGF0ZSAqaCA9IHRvX3N0YXRlKHNkKTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAJdW5zaWduZWQgc2l6ZTsKIAl1MzIgY3JjOwogCXVuc2lnbmVkIGNoYXIgbG9jYWxQQVRbMjU2XTsKIAl1bnNpZ25lZCBjaGFyIGxvY2FsUE1UWzI1Nl07CiAKLQloID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0KIAkvKiBTZXQgdmlkZW8gZm9ybWF0IC0gbXVzdCBiZSBkb25lIGZpcnN0IGFzIGl0IHJlc2V0cyBvdGhlciBzZXR0aW5ncyAqLwogCXNldF9yZWc4KGNsaWVudCwgMHg0MSwgaC0+dmlkZW9fZm9ybWF0KTsKIApAQCAtNzYyLDcgKzc3OCw3IEBACiAJYnVmWzNdID0gMHg4MjsKIAlidWZbNF0gPSAweEIwOwogCWJ1Zls1XSA9IGJ1ZjJbMF07Ci0Jc3dpdGNoKGgtPnBhcmFtcy52aV9hc3BlY3QpIHsKKwlzd2l0Y2ggKGgtPnBhcmFtcy52aV9hc3BlY3QpIHsKIAljYXNlIFY0TDJfTVBFR19WSURFT19BU1BFQ1RfMTZ4OToKIAkJYnVmWzZdID0gYnVmMlsxXSB8IDB4NDA7CiAJCWJyZWFrOwpAQCAtNzcwLDcgKzc4Niw2IEBACiAJZGVmYXVsdDoKIAkJYnVmWzZdID0gYnVmMlsxXSAmIDB4QkY7CiAJCWJyZWFrOwotCQlicmVhazsKIAl9CiAJYnVmWzddID0gYnVmMlsyXTsKIAlidWZbOF0gPSBidWYyWzNdOwpAQCAtNzc5LDgxICs3OTQsMTYyIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQKLXNhYTY3NTJoc19jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKK3N0YXRpYyBpbnQgc2FhNjc1MmhzX2RvX2V4dF9jdHJscyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmN0cmxzLCBpbnQgc2V0KQogewotCXN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmggPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQlzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmN0cmxzID0gYXJnOworCXN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmggPSB0b19zdGF0ZShzZCk7CiAJc3RydWN0IHNhYTY3NTJoc19tcGVnX3BhcmFtcyBwYXJhbXM7Ci0JaW50IGVyciA9IDA7CiAJaW50IGk7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVklESU9DX0lOVF9JTklUOgotCQkvKiBhcHBseSBzZXR0aW5ncyBhbmQgc3RhcnQgZW5jb2RlciAqLwotCQlzYWE2NzUyaHNfaW5pdChjbGllbnQsICoodTMyICopYXJnKTsKLQkJYnJlYWs7Ci0JY2FzZSBWSURJT0NfU19FWFRfQ1RSTFM6Ci0JCWlmIChjdHJscy0+Y3RybF9jbGFzcyAhPSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykKLQkJCXJldHVybiAtRUlOVkFMOwotCQkvKiBmYWxsIHRocm91Z2ggKi8KLQljYXNlIFZJRElPQ19UUllfRVhUX0NUUkxTOgotCWNhc2UgVklESU9DX0dfRVhUX0NUUkxTOgotCQlpZiAoY3RybHMtPmN0cmxfY2xhc3MgIT0gVjRMMl9DVFJMX0NMQVNTX01QRUcpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJcGFyYW1zID0gaC0+cGFyYW1zOwotCQlmb3IgKGkgPSAwOyBpIDwgY3RybHMtPmNvdW50OyBpKyspIHsKLQkJCWVyciA9IGhhbmRsZV9jdHJsKGgtPmhhc19hYzMsICZwYXJhbXMsIGN0cmxzLT5jb250cm9scyArIGksIGNtZCk7Ci0JCQlpZiAoZXJyKSB7Ci0JCQkJY3RybHMtPmVycm9yX2lkeCA9IGk7Ci0JCQkJcmV0dXJuIGVycjsKLQkJCX0KKwlpZiAoY3RybHMtPmN0cmxfY2xhc3MgIT0gVjRMMl9DVFJMX0NMQVNTX01QRUcpCisJCXJldHVybiAtRUlOVkFMOworCisJcGFyYW1zID0gaC0+cGFyYW1zOworCWZvciAoaSA9IDA7IGkgPCBjdHJscy0+Y291bnQ7IGkrKykgeworCQlpbnQgZXJyID0gaGFuZGxlX2N0cmwoaC0+aGFzX2FjMywgJnBhcmFtcywgY3RybHMtPmNvbnRyb2xzICsgaSwgc2V0KTsKKworCQlpZiAoZXJyKSB7CisJCQljdHJscy0+ZXJyb3JfaWR4ID0gaTsKKwkJCXJldHVybiBlcnI7CiAJCX0KKwl9CisJaWYgKHNldCkKIAkJaC0+cGFyYW1zID0gcGFyYW1zOwotCQlicmVhazsKLQljYXNlIFZJRElPQ19RVUVSWUNUUkw6Ci0JCXJldHVybiBzYWE2NzUyaHNfcWN0cmwoaCwgYXJnKTsKLQljYXNlIFZJRElPQ19RVUVSWU1FTlU6Ci0JCXJldHVybiBzYWE2NzUyaHNfcW1lbnUoaCwgYXJnKTsKLQljYXNlIFZJRElPQ19HX0ZNVDoKLQl7Ci0JICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmID0gYXJnOwotCi0JICAgaWYgKGgtPnZpZGVvX2Zvcm1hdCA9PSBTQUE2NzUySFNfVkZfVU5LTk9XTikKLQkJICAgaC0+dmlkZW9fZm9ybWF0ID0gU0FBNjc1MkhTX1ZGX0QxOwotCSAgIGYtPmZtdC5waXgud2lkdGggPQotCQkgICB2NGwyX2Zvcm1hdF90YWJsZVtoLT52aWRlb19mb3JtYXRdLmZtdC5waXgud2lkdGg7Ci0JICAgZi0+Zm10LnBpeC5oZWlnaHQgPQotCQkgICB2NGwyX2Zvcm1hdF90YWJsZVtoLT52aWRlb19mb3JtYXRdLmZtdC5waXguaGVpZ2h0OwotCSAgIGJyZWFrIDsKLQl9Ci0JY2FzZSBWSURJT0NfU19GTVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYgPSBhcmc7Ci0KLQkJc2FhNjc1MmhzX3NldF9zdWJzYW1wbGluZyhjbGllbnQsIGYpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWSURJT0NfU19TVEQ6Ci0JCWgtPnN0YW5kYXJkID0gKigodjRsMl9zdGRfaWQgKikgYXJnKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19EQkdfR19DSElQX0lERU5UOgotCQlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LAotCQkJCWFyZywgaC0+Y2hpcCwgaC0+cmV2aXNpb24pOwotCi0JZGVmYXVsdDoKLQkJLyogbm90aGluZyAqLwotCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gZXJyOworCXJldHVybiAwOwogfQogCitzdGF0aWMgaW50IHNhYTY3NTJoc19zX2V4dF9jdHJscyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmN0cmxzKQoreworCXJldHVybiBzYWE2NzUyaHNfZG9fZXh0X2N0cmxzKHNkLCBjdHJscywgMSk7Cit9CisKK3N0YXRpYyBpbnQgc2FhNjc1MmhzX3RyeV9leHRfY3RybHMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjdHJscykKK3sKKwlyZXR1cm4gc2FhNjc1MmhzX2RvX2V4dF9jdHJscyhzZCwgY3RybHMsIDApOworfQorCitzdGF0aWMgaW50IHNhYTY3NTJoc19nX2V4dF9jdHJscyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9leHRfY29udHJvbHMgKmN0cmxzKQoreworCXN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmggPSB0b19zdGF0ZShzZCk7CisJaW50IGk7CisKKwlpZiAoY3RybHMtPmN0cmxfY2xhc3MgIT0gVjRMMl9DVFJMX0NMQVNTX01QRUcpCisJCXJldHVybiAtRUlOVkFMOworCisJZm9yIChpID0gMDsgaSA8IGN0cmxzLT5jb3VudDsgaSsrKSB7CisJCWludCBlcnIgPSBnZXRfY3RybChoLT5oYXNfYWMzLCAmaC0+cGFyYW1zLCBjdHJscy0+Y29udHJvbHMgKyBpKTsKKworCQlpZiAoZXJyKSB7CisJCQljdHJscy0+ZXJyb3JfaWR4ID0gaTsKKwkJCXJldHVybiBlcnI7CisJCX0KKwl9CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FhNjc1MmhzX2dfZm10KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlICpoID0gdG9fc3RhdGUoc2QpOworCisJaWYgKGgtPnZpZGVvX2Zvcm1hdCA9PSBTQUE2NzUySFNfVkZfVU5LTk9XTikKKwkJaC0+dmlkZW9fZm9ybWF0ID0gU0FBNjc1MkhTX1ZGX0QxOworCWYtPmZtdC5waXgud2lkdGggPQorCQl2NGwyX2Zvcm1hdF90YWJsZVtoLT52aWRlb19mb3JtYXRdLmZtdC5waXgud2lkdGg7CisJZi0+Zm10LnBpeC5oZWlnaHQgPQorCQl2NGwyX2Zvcm1hdF90YWJsZVtoLT52aWRlb19mb3JtYXRdLmZtdC5waXguaGVpZ2h0OworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTY3NTJoc19zX2ZtdChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHNhYTY3NTJoc19zdGF0ZSAqaCA9IHRvX3N0YXRlKHNkKTsKKwlpbnQgZGlzdF8zNTIsIGRpc3RfNDgwLCBkaXN0XzcyMDsKKworCS8qCisJICBGSVhNRTogdHJhbnNsYXRlIGFuZCByb3VuZCB3aWR0aC9oZWlnaHQgaW50byBFTVBSRVNTCisJICBzdWJzYW1wbGUgdHlwZToKKworCSAgdHlwZSAgIHwgICBQQUwgICB8ICBOVFNDCisJICAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwkgIFNJRiAgICB8IDM1MngyODggfCAzNTJ4MjQwCisJICAxLzIgRDEgfCAzNTJ4NTc2IHwgMzUyeDQ4MAorCSAgMi8zIEQxIHwgNDgweDU3NiB8IDQ4MHg0ODAKKwkgIEQxICAgICB8IDcyMHg1NzYgfCA3MjB4NDgwCisJKi8KKworCWRpc3RfMzUyID0gYWJzKGYtPmZtdC5waXgud2lkdGggLSAzNTIpOworCWRpc3RfNDgwID0gYWJzKGYtPmZtdC5waXgud2lkdGggLSA0ODApOworCWRpc3RfNzIwID0gYWJzKGYtPmZtdC5waXgud2lkdGggLSA3MjApOworCWlmIChkaXN0XzcyMCA8IGRpc3RfNDgwKSB7CisJCWYtPmZtdC5waXgud2lkdGggPSA3MjA7CisJCWYtPmZtdC5waXguaGVpZ2h0ID0gNTc2OworCQloLT52aWRlb19mb3JtYXQgPSBTQUE2NzUySFNfVkZfRDE7CisJfSBlbHNlIGlmIChkaXN0XzQ4MCA8IGRpc3RfMzUyKSB7CisJCWYtPmZtdC5waXgud2lkdGggPSA0ODA7CisJCWYtPmZtdC5waXguaGVpZ2h0ID0gNTc2OworCQloLT52aWRlb19mb3JtYXQgPSBTQUE2NzUySFNfVkZfMl8zX0QxOworCX0gZWxzZSB7CisJCWYtPmZtdC5waXgud2lkdGggPSAzNTI7CisJCWlmIChhYnMoZi0+Zm10LnBpeC5oZWlnaHQgLSA1NzYpIDwKKwkJICAgIGFicyhmLT5mbXQucGl4LmhlaWdodCAtIDI4OCkpIHsKKwkJCWYtPmZtdC5waXguaGVpZ2h0ID0gNTc2OworCQkJaC0+dmlkZW9fZm9ybWF0ID0gU0FBNjc1MkhTX1ZGXzFfMl9EMTsKKwkJfSBlbHNlIHsKKwkJCWYtPmZtdC5waXguaGVpZ2h0ID0gMjg4OworCQkJaC0+dmlkZW9fZm9ybWF0ID0gU0FBNjc1MkhTX1ZGX1NJRjsKKwkJfQorCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE2NzUyaHNfc19zdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgc3RkKQoreworCXN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmggPSB0b19zdGF0ZShzZCk7CisKKwloLT5zdGFuZGFyZCA9IHN0ZDsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE2NzUyaHNfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQoreworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlzdHJ1Y3Qgc2FhNjc1MmhzX3N0YXRlICpoID0gdG9fc3RhdGUoc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwKKwkJCWNoaXAsIGgtPmNoaXAsIGgtPnJldmlzaW9uKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBzYWE2NzUyaHNfY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IHNhYTY3NTJoc19nX2NoaXBfaWRlbnQsCisJLmluaXQgPSBzYWE2NzUyaHNfaW5pdCwKKwkucXVlcnljdHJsID0gc2FhNjc1MmhzX3F1ZXJ5Y3RybCwKKwkucXVlcnltZW51ID0gc2FhNjc1MmhzX3F1ZXJ5bWVudSwKKwkuZ19leHRfY3RybHMgPSBzYWE2NzUyaHNfZ19leHRfY3RybHMsCisJLnNfZXh0X2N0cmxzID0gc2FhNjc1MmhzX3NfZXh0X2N0cmxzLAorCS50cnlfZXh0X2N0cmxzID0gc2FhNjc1MmhzX3RyeV9leHRfY3RybHMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3R1bmVyX29wcyBzYWE2NzUyaHNfdHVuZXJfb3BzID0geworCS5zX3N0ZCA9IHNhYTY3NTJoc19zX3N0ZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIHNhYTY3NTJoc192aWRlb19vcHMgPSB7CisJLnNfZm10ID0gc2FhNjc1MmhzX3NfZm10LAorCS5nX2ZtdCA9IHNhYTY3NTJoc19nX2ZtdCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHNhYTY3NTJoc19vcHMgPSB7CisJLmNvcmUgPSAmc2FhNjc1MmhzX2NvcmVfb3BzLAorCS50dW5lciA9ICZzYWE2NzUyaHNfdHVuZXJfb3BzLAorCS52aWRlbyA9ICZzYWE2NzUyaHNfdmlkZW9fb3BzLAorfTsKKwogc3RhdGljIGludCBzYWE2NzUyaHNfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCWNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkICppZCkKKwkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCXN0cnVjdCBzYWE2NzUyaHNfc3RhdGUgKmggPSBremFsbG9jKHNpemVvZigqaCksIEdGUF9LRVJORUwpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAJdTggYWRkciA9IDB4MTM7CiAJdTggZGF0YVsxMl07CiAKQEAgLTg2MSw2ICs5NTcsOCBAQAogCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAJaWYgKGggPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CisJc2QgPSAmaC0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJnNhYTY3NTJoc19vcHMpOwogCiAJaTJjX21hc3Rlcl9zZW5kKGNsaWVudCwgJmFkZHIsIDEpOwogCWkyY19tYXN0ZXJfcmVjdihjbGllbnQsIGRhdGEsIHNpemVvZihkYXRhKSk7CkBAIC04NzQsMTQgKzk3MiwxNSBAQAogCX0KIAloLT5wYXJhbXMgPSBwYXJhbV9kZWZhdWx0czsKIAloLT5zdGFuZGFyZCA9IDA7IC8qIEFzc3VtZSA2MjUgaW5wdXQgbGluZXMgKi8KLQotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGgpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHNhYTY3NTJoc19yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlrZnJlZShpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSk7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCisJdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc2QpOworCWtmcmVlKHRvX3N0YXRlKHNkKSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTg5Myw4ICs5OTIsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAic2FhNjc1MmhzIiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfU0FBNjc1MkhTLAotCS5jb21tYW5kID0gc2FhNjc1MmhzX2NvbW1hbmQsCiAJLnByb2JlID0gc2FhNjc1MmhzX3Byb2JlLAogCS5yZW1vdmUgPSBzYWE2NzUyaHNfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHNhYTY3NTJoc19pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jYXJkcy5jCmluZGV4IGUyZmViY2QuLmE3OTBhNzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNhcmRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY2FyZHMuYwpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdHZlZXByb20uaD4KICNpbmNsdWRlICJ0ZWE1NzY3LmgiCisjaW5jbHVkZSAidGRhMTgyNzEuaCIKIAogLyogY29tbWx5IHVzZWQgc3RyaW5ncyAqLwogc3RhdGljIGNoYXIgbmFtZV9tdXRlW10gICAgPSAibXV0ZSI7CkBAIC0yNzIsNiArMjczLDcgQEAKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkuZW1wcmVzc19hZGRyIAk9IDB4MjAsCiAKIAkJLmlucHV0cyAgICAgICAgID0ge3sKIAkJCS5uYW1lID0gbmFtZV9jb21wMSwKQEAgLTQwOCw2ICs0MTAsNyBAQAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5lbXByZXNzX2FkZHIgCT0gMHgyMCwKIAkJLnRkYTk4ODdfY29uZgk9IFREQTk4ODdfUFJFU0VOVCwKIAkJLmdwaW9tYXNrCT0gMHg4MjAwMDAsCiAJCS5pbnB1dHMJCT0ge3sKQEAgLTgxOCw2ICs4MjEsNyBAQAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5lbXByZXNzX2FkZHIgCT0gMHgyMCwKIAkJLmlucHV0cyAgICAgICAgID0ge3sKIAkJCS5uYW1lID0gbmFtZV9jb21wMSwKIAkJCS52bXV4ID0gNCwKQEAgLTk3Nyw2ICs5ODEsNyBAQAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIJPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkcgk9IEFERFJfVU5TRVQsCisJCS5lbXByZXNzX2FkZHIgCT0gMHgyMCwKIAkJLmlucHV0cyAgICAgICAgID0ge3sKIAkJCS5uYW1lID0gbmFtZV9jb21wMSwKIAkJCS52bXV4ID0gMSwKQEAgLTE2OTksNiArMTcwNCw3IEBACiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkcgk9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyCT0gQUREUl9VTlNFVCwKKwkJLnJkc19hZGRyIAk9IDB4MTAsCiAJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCwKIAkJLmlucHV0cyAgICAgICAgID0ge3sKIAkJCS5uYW1lID0gbmFtZV90diwKQEAgLTIzNjQsNiArMjM3MCw3IEBACiAJCS5yYWRpb190eXBlCT0gVU5TRVQsCiAJCS50dW5lcl9hZGRyCT0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIJPSBBRERSX1VOU0VULAorCQkuZW1wcmVzc19hZGRyIAk9IDB4MjEsCiAJCS5pbnB1dHMJCT0ge3sKIAkJCS5uYW1lICAgPSAiQ29tcG9zaXRlIDAiLAogCQkJLnZtdXggICA9IDAsCkBAIC0zMjkxLDYgKzMyOTgsNjggQEAKIAkJCS5ncGlvID0gMHgwMjAwMTAwLAogCQl9LAogCX0sCisJW1NBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMjBdID0geworCQkubmFtZSAgICAgICAgICAgPSAiSGF1cHBhdWdlIFdpblRWLUhWUjExMjAgQVRTQy9RQU0tSHlicmlkIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19UREE4MjkwLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnR1bmVyX2NvbmZpZyAgID0gMywKKwkJLm1wZWcgICAgICAgICAgID0gU0FBNzEzNF9NUEVHX0RWQiwKKwkJLnRzX3R5cGUJPSBTQUE3MTM0X01QRUdfVFNfU0VSSUFMLAorCQkuZ3Bpb21hc2sgICAgICAgPSAweDA4MDAxMDAsIC8qIEdQSU8gMjEgaXMgYW4gSU5QVVQgKi8KKwkJLmlucHV0cyAgICAgICAgID0ge3sKKwkJCS5uYW1lID0gbmFtZV90diwKKwkJCS52bXV4ID0gMSwKKwkJCS5hbXV4ID0gVFYsCisJCQkudHYgICA9IDEsCisJCQkuZ3BpbyA9IDB4MDAwMDEwMCwKKwkJfSwgeworCQkJLm5hbWUgPSBuYW1lX2NvbXAxLAorCQkJLnZtdXggPSAzLAorCQkJLmFtdXggPSBMSU5FMSwKKwkJfSwgeworCQkJLm5hbWUgPSBuYW1lX3N2aWRlbywKKwkJCS52bXV4ID0gOCwKKwkJCS5hbXV4ID0gTElORTEsCisJCX0gfSwKKwkJLnJhZGlvID0geworCQkJLm5hbWUgPSBuYW1lX3JhZGlvLAorCQkJLmFtdXggPSBUViwKKwkJCS5ncGlvID0gMHgwODAwMTAwLCAvKiBHUElPIDIzIEhJIGZvciBGTSAqLworCQl9LAorCX0sCisJW1NBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMTBSM10gPSB7CisJCS5uYW1lICAgICAgICAgICA9ICJIYXVwcGF1Z2UgV2luVFYtSFZSMTExMHIzIiwKKwkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKKwkJLnR1bmVyX3R5cGUgICAgID0gVFVORVJfUEhJTElQU19UREE4MjkwLAorCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKKwkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnR1bmVyX2NvbmZpZyAgID0gMywKKwkJLmdwaW9tYXNrICAgICAgID0gMHgwODAwMTAwLCAvKiBHUElPIDIxIGlzIGFuIElOUFVUICovCisJCS5pbnB1dHMgICAgICAgICA9IHt7CisJCQkubmFtZSA9IG5hbWVfdHYsCisJCQkudm11eCA9IDEsCisJCQkuYW11eCA9IFRWLAorCQkJLnR2ICAgPSAxLAorCQkJLmdwaW8gPSAweDAwMDAxMDAsCisJCX0sIHsKKwkJCS5uYW1lID0gbmFtZV9jb21wMSwKKwkJCS52bXV4ID0gMywKKwkJCS5hbXV4ID0gTElORTEsCisJCX0sIHsKKwkJCS5uYW1lID0gbmFtZV9zdmlkZW8sCisJCQkudm11eCA9IDgsCisJCQkuYW11eCA9IExJTkUxLAorCQl9IH0sCisJCS5yYWRpbyA9IHsKKwkJCS5uYW1lID0gbmFtZV9yYWRpbywKKwkJCS5hbXV4ID0gVFYsCisJCQkuZ3BpbyA9IDB4MDgwMDEwMCwgLyogR1BJTyAyMyBISSBmb3IgRk0gKi8KKwkJfSwKKwl9LAogCVtTQUE3MTM0X0JPQVJEX0NJTkVSR1lfSFRfUENNQ0lBXSA9IHsKIAkJLm5hbWUgICAgICAgICAgID0gIlRlcnJhdGVjIENpbmVyZ3kgSFQgUENNQ0lBIiwKIAkJLmF1ZGlvX2Nsb2NrICAgID0gMHgwMDE4N2RlNywKQEAgLTQwNzAsNiArNDEzOSw3IEBACiAJCS5yYWRpb190eXBlICAgICA9IFVOU0VULAogCQkudHVuZXJfYWRkciAgICAgPSBBRERSX1VOU0VULAogCQkucmFkaW9fYWRkciAgICAgPSBBRERSX1VOU0VULAorCQkuZW1wcmVzc19hZGRyIAk9IDB4MjAsCiAJCS50ZGE5ODg3X2NvbmYgICA9IFREQTk4ODdfUFJFU0VOVCwKIAkJLmlucHV0cyAgICAgICAgID0geyB7CiAJCQkubmFtZSA9IG5hbWVfdHYsCkBAIC00MTA2LDYgKzQxNzYsNyBAQAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLmVtcHJlc3NfYWRkciAJPSAweDIwLAogCQkudGRhOTg4N19jb25mICAgPSBUREE5ODg3X1BSRVNFTlQsCiAJCS5pbnB1dHMgICAgICAgICA9IHsgewogCQkJLm5hbWUgPSBuYW1lX3R2LApAQCAtNDE0Myw2ICs0MjE0LDcgQEAKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCisJCS5lbXByZXNzX2FkZHIgCT0gMHgyMCwKIAkJLnRkYTk4ODdfY29uZiAgID0gVERBOTg4N19QUkVTRU5ULAogCQkuaW5wdXRzICAgICAgICAgPSB7IHsKIAkJCS5uYW1lID0gbmFtZV90diwKQEAgLTQzMjMsMTMgKzQzOTUsMTMgQEAKIAkJCSAuYW11eCA9IFRWLAogCQkJIC50diAgID0gMSwKIAkJIH0sIHsKLQkJCSAubmFtZSA9IG5hbWVfY29tcCwKLQkJCSAudm11eCA9IDAsCisJCQkgLm5hbWUgPSBuYW1lX2NvbXAxLAorCQkJIC52bXV4ID0gMywKIAkJCSAuYW11eCA9IExJTkUxLAogCQkgfSwgewogCQkJIC5uYW1lID0gbmFtZV9zdmlkZW8sCiAJCQkgLnZtdXggPSA4LAotCQkJIC5hbXV4ID0gTElORTEsCisJCQkgLmFtdXggPSBMSU5FMiwKIAkJIH0gfSwKIAkJIC5yYWRpbyA9IHsKIAkJCSAubmFtZSA9IG5hbWVfcmFkaW8sCkBAIC00NDIxLDggKzQ0OTMsNyBAQAogCQkucmFkaW9fdHlwZSAgICAgPSBVTlNFVCwKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKIAkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkJLyogbm8gRFZCIHN1cHBvcnQgZm9yIG5vdyAqLwotCQkvKiAubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLCAqLworCQkubXBlZyAgICAgICAgICAgPSBTQUE3MTM0X01QRUdfRFZCLAogCQkuaW5wdXRzICAgICAgICAgPSB7IHsKIAkJCS5uYW1lID0gbmFtZV9jb21wLAogCQkJLnZtdXggPSAxLApAQCAtNDQ0MSw4ICs0NTEyLDcgQEAKIAkJLnJhZGlvX3R5cGUgICAgID0gVU5TRVQsCiAJCS50dW5lcl9hZGRyICAgICA9IEFERFJfVU5TRVQsCiAJCS5yYWRpb19hZGRyICAgICA9IEFERFJfVU5TRVQsCi0JCS8qIG5vIERWQiBzdXBwb3J0IGZvciBub3cgKi8KLQkJLyogLm1wZWcgICAgICAgICAgID0gU0FBNzEzNF9NUEVHX0RWQiwgKi8KKwkJLm1wZWcgICAgICAgICAgID0gU0FBNzEzNF9NUEVHX0RWQiwKIAkJLmlucHV0cyAgICAgICAgID0geyB7CiAJCQkubmFtZSA9IG5hbWVfY29tcCwKIAkJCS52bXV4ID0gMSwKQEAgLTQ2MTEsNyArNDY4MSw3IEBACiAJCS50dW5lcl90eXBlICAgICA9IFRVTkVSX1lNRUNfVFZGXzU1MzNNRiwKIAkJLnJhZGlvX3R5cGUgICAgID0gVFVORVJfVEVBNTc2NywKIAkJLnR1bmVyX2FkZHIgICAgID0gQUREUl9VTlNFVCwKLQkJLnJhZGlvX2FkZHIgICAgID0gQUREUl9VTlNFVCwKKwkJLnJhZGlvX2FkZHIgICAgID0gMHg2MCwKIAkJLmdwaW9tYXNrICAgICAgID0gMHg4MDAwMDcwMCwKIAkJLmlucHV0cyA9IHsgewogCQkJLm5hbWUgICA9IG5hbWVfdHYsCkBAIC01NDA1LDYgKzU0NzUsMzYgQEAKIAl9LHsKIAkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKIAkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAorCQkuc3VidmVuZG9yICAgID0gMHgwMDcwLAorCQkuc3ViZGV2aWNlICAgID0gMHg2NzA2LAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTEyMCwKKwl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAorCQkuc3VidmVuZG9yICAgID0gMHgwMDcwLAorCQkuc3ViZGV2aWNlICAgID0gMHg2NzA3LAorCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTExMFIzLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDAwNzAsCisJCS5zdWJkZXZpY2UgICAgPSAweDY3MDgsCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTIwLAorCX0seworCQkudmVuZG9yICAgICAgID0gUENJX1ZFTkRPUl9JRF9QSElMSVBTLAorCQkuZGV2aWNlICAgICAgID0gUENJX0RFVklDRV9JRF9QSElMSVBTX1NBQTcxMzMsCisJCS5zdWJ2ZW5kb3IgICAgPSAweDAwNzAsCisJCS5zdWJkZXZpY2UgICAgPSAweDY3MDksCisJCS5kcml2ZXJfZGF0YSAgPSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTEwUjMsCisJfSx7CisJCS52ZW5kb3IgICAgICAgPSBQQ0lfVkVORE9SX0lEX1BISUxJUFMsCisJCS5kZXZpY2UgICAgICAgPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMywKKwkJLnN1YnZlbmRvciAgICA9IDB4MDA3MCwKKwkJLnN1YmRldmljZSAgICA9IDB4NjcwYSwKKwkJLmRyaXZlcl9kYXRhICA9IFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMTBSMywKKwl9LHsKKwkJLnZlbmRvciAgICAgICA9IFBDSV9WRU5ET1JfSURfUEhJTElQUywKKwkJLmRldmljZSAgICAgICA9IFBDSV9ERVZJQ0VfSURfUEhJTElQU19TQUE3MTMzLAogCQkuc3VidmVuZG9yICAgID0gMHgxNTNiLAogCQkuc3ViZGV2aWNlICAgID0gMHgxMTcyLAogCQkuZHJpdmVyX2RhdGEgID0gU0FBNzEzNF9CT0FSRF9DSU5FUkdZX0hUX1BDTUNJQSwKQEAgLTU4MjEsOCArNTkyMSw4IEBACiB9CiAKIAotc3RhdGljIGludCBzYWE3MTM0X3RkYTgyOTBfY2FsbGJhY2soc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsCi0JCQkJICAgIGludCBjb21tYW5kLCBpbnQgYXJnKQorc3RhdGljIGludCBzYWE3MTM0X3RkYTgyOTBfODI3eF9jYWxsYmFjayhzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwKKwkJCQkJIGludCBjb21tYW5kLCBpbnQgYXJnKQogewogCXU4IHN5bmNfY29udHJvbDsKIApAQCAtNTg0OCw2ICs1OTQ4LDY1IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbmxpbmUgaW50IHNhYTcxMzRfdGRhMTgyNzFfaHZyMTF4MF90b2dnbGVfYWdjKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LAorCQkJCQkJICAgICAgZW51bSB0ZGExODI3MV9tb2RlIG1vZGUpCit7CisJLyogdG9nZ2xlIEFHQyBzd2l0Y2ggdGhyb3VnaCBHUElPIDI2ICovCisJc3dpdGNoIChtb2RlKSB7CisJY2FzZSBUREExODI3MV9BTkFMT0c6CisJCXNhYTcxMzRfc2V0X2dwaW8oZGV2LCAyNiwgMCk7CisJCWJyZWFrOworCWNhc2UgVERBMTgyNzFfRElHSVRBTDoKKwkJc2FhNzEzNF9zZXRfZ3BpbyhkZXYsIDI2LCAxKTsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNhYTcxMzRfdGRhODI5MF8xODI3MV9jYWxsYmFjayhzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwKKwkJCQkJICBpbnQgY29tbWFuZCwgaW50IGFyZykKK3sKKwlpbnQgcmV0ID0gMDsKKworCXN3aXRjaCAoY29tbWFuZCkgeworCWNhc2UgVERBMTgyNzFfQ0FMTEJBQ0tfQ01EX0FHQ19FTkFCTEU6IC8qIDAgKi8KKwkJc3dpdGNoIChkZXYtPmJvYXJkKSB7CisJCWNhc2UgU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTEyMDoKKwkJY2FzZSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTEwUjM6CisJCQlyZXQgPSBzYWE3MTM0X3RkYTE4MjcxX2h2cjExeDBfdG9nZ2xlX2FnYyhkZXYsIGFyZyk7CisJCQlicmVhazsKKwkJZGVmYXVsdDoKKwkJCWJyZWFrOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldCA9IC1FSU5WQUw7CisJCWJyZWFrOworCX0KKwlyZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IHNhYTcxMzRfdGRhODI5MF9jYWxsYmFjayhzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwKKwkJCQkgICAgaW50IGNvbW1hbmQsIGludCBhcmcpCit7CisJaW50IHJldDsKKworCXN3aXRjaCAoZGV2LT5ib2FyZCkgeworCWNhc2UgU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTEyMDoKKwljYXNlIFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMTBSMzoKKwkJLyogdGRhODI5MCArIHRkYTE4MjcxICovCisJCXJldCA9IHNhYTcxMzRfdGRhODI5MF8xODI3MV9jYWxsYmFjayhkZXYsIGNvbW1hbmQsIGFyZyk7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCS8qIHRkYTgyOTAgKyB0ZGE4Mjd4ICovCisJCXJldCA9IHNhYTcxMzRfdGRhODI5MF84Mjd4X2NhbGxiYWNrKGRldiwgY29tbWFuZCwgYXJnKTsKKwkJYnJlYWs7CisJfQorCXJldHVybiByZXQ7Cit9CisKIGludCBzYWE3MTM0X3R1bmVyX2NhbGxiYWNrKHZvaWQgKnByaXYsIGludCBjb21wb25lbnQsIGludCBjb21tYW5kLCBpbnQgYXJnKQogewogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gcHJpdjsKQEAgLTU4NzgsMTEgKzYwMzcsMTYgQEAKIAlzd2l0Y2ggKHR2Lm1vZGVsKSB7CiAJY2FzZSA2NzAxOTogLyogV2luVFYtSFZSMTExMCAoUmV0YWlsLCBJUiBCbGFzdGVyLCBoeWJyaWQsIEZNLCBTVmlkL0NvbXAsIDMuNW1tIGF1ZGlvIGluKSAqLwogCWNhc2UgNjcxMDk6IC8qIFdpblRWLUhWUjEwMDAgKFJldGFpbCwgSVIgUmVjZWl2ZSwgYW5hbG9nLCBubyBGTSwgU1ZpZC9Db21wLCAzLjVtbSBhdWRpbyBpbikgKi8KKwljYXNlIDY3MjAxOiAvKiBXaW5UVi1IVlIxMTIwIChSZXRhaWwsIElSIFJlY2VpdmUsIGh5YnJpZCwgRk0sIFNWaWQvQ29tcCwgMy41bW0gYXVkaW8gaW4pICovCisJY2FzZSA2NzMwMTogLyogV2luVFYtSFZSMTAwMCAoUmV0YWlsLCBJUiBSZWNlaXZlLCBhbmFsb2csIG5vIEZNLCBTVmlkL0NvbXAsIDMuNW1tIGF1ZGlvIGluKSAqLworCWNhc2UgNjcyMDk6IC8qIFdpblRWLUhWUjExMTAgKFJldGFpbCwgSVIgUmVjZWl2ZSwgaHlicmlkLCBGTSwgU1ZpZC9Db21wLCAzLjVtbSBhdWRpbyBpbikgKi8KIAljYXNlIDY3NTU5OiAvKiBXaW5UVi1IVlIxMTEwIChPRU0sIG5vIElSLCBoeWJyaWQsIEZNLCBTVmlkL0NvbXAsIFJDQSBhdWQpICovCiAJY2FzZSA2NzU2OTogLyogV2luVFYtSFZSMTExMCAoT0VNLCBubyBJUiwgaHlicmlkLCBGTSkgKi8KIAljYXNlIDY3NTc5OiAvKiBXaW5UVi1IVlIxMTEwIChPRU0sIG5vIElSLCBoeWJyaWQsIG5vIEZNKSAqLwogCWNhc2UgNjc1ODk6IC8qIFdpblRWLUhWUjExMTAgKE9FTSwgbm8gSVIsIGh5YnJpZCwgbm8gRk0sIFNWaWQvQ29tcCwgUkNBIGF1ZCkgKi8KIAljYXNlIDY3NTk5OiAvKiBXaW5UVi1IVlIxMTEwIChPRU0sIG5vIElSLCBoeWJyaWQsIG5vIEZNLCBTVmlkL0NvbXAsIFJDQSBhdWQpICovCisJY2FzZSA2NzY1MTogLyogV2luVFYtSFZSMTEyMCAoT0VNLCBubyBJUiwgaHlicmlkLCBGTSwgU1ZpZC9Db21wLCBSQ0EgYXVkKSAqLworCWNhc2UgNjc2NTk6IC8qIFdpblRWLUhWUjExMTAgKE9FTSwgbm8gSVIsIGh5YnJpZCwgRk0sIFNWaWQvQ29tcCwgUkNBIGF1ZCkgKi8KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJcHJpbnRrKEtFUk5fV0FSTklORyAiJXM6IHdhcm5pbmc6ICIKQEAgLTYwMTksNiArNjE4MywxMSBAQAogCQltc2xlZXAoMTApOwogCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0NBUkRCVVNfNTA2OgorCQlzYWE3MTM0X3NldF9ncGlvKGRldiwgMjMsIDApOworCQltc2xlZXAoMTApOworCQlzYWE3MTM0X3NldF9ncGlvKGRldiwgMjMsIDEpOworCQlkZXYtPmhhc19yZW1vdGUgPSBTQUE3MTM0X1JFTU9URV9JMkM7CisJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfTTEwMzoKIAkJc2FhNzEzNF9zZXRfZ3BpbyhkZXYsIDIzLCAwKTsKIAkJbXNsZWVwKDEwKTsKQEAgLTYwNTQsNiArNjIyMywxNiBAQAogCiAJCXNhYV93cml0ZWIgKFNBQTcxMzRfUFJPRFVDVElPTl9URVNUX01PREUsIDB4MDApOwogCQlicmVhazsKKwljYXNlIFNBQTcxMzRfQk9BUkRfSEFVUFBBVUdFX0hWUjExMjA6CisJY2FzZSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTEwUjM6CisJCS8qIEdQSU8gMjYgaGlnaCBmb3IgZGlnaXRhbCwgbG93IGZvciBhbmFsb2cgKi8KKwkJc2FhNzEzNF9zZXRfZ3BpbyhkZXYsIDI2LCAwKTsKKwkJbXNsZWVwKDEpOworCisJCXNhYTcxMzRfc2V0X2dwaW8oZGV2LCAyMiwgMCk7CisJCW1zbGVlcCgxMCk7CisJCXNhYTcxMzRfc2V0X2dwaW8oZGV2LCAyMiwgMSk7CisJCWJyZWFrOwogCS8qIGkyYyByZW1vdGVzICovCiAJY2FzZSBTQUE3MTM0X0JPQVJEX1BJTk5BQ0xFX1BDVFZfMTEwaToKIAljYXNlIFNBQTcxMzRfQk9BUkRfUElOTkFDTEVfUENUVl8zMTBpOgpAQCAtNjA3OSwxNSArNjI1OCwxNSBAQAogCQlzYWFfYW5kb3JsKFNBQTcxMzRfR1BJT19HUE1PREUwID4+IDIsICAgMHg4YzA0MDAwNywgMHg4YzA0MDAwNyk7CiAJCXNhYV9hbmRvcmwoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCA+PiAyLCAweDBjMDAwN2NkLCAweDBjMDAwN2NkKTsKIAkJYnJlYWs7Ci0JY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9BNzAwX1BSTzoKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0E3MDBfSFlCUklEOgorCQlwcmludGsoIiVzOiAlczogaHlicmlkIGFuYWxvZy9kdmIgY2FyZFxuIgorCQkgICAgICAgIiVzOiBTb3JyeSwgb2YgdGhlIGFuYWxvZyBpbnB1dHMsIG9ubHkgYW5hbG9nIHMtdmlkZW8gYW5kIGNvbXBvc2l0ZSAiCisJCSAgICAgICAiYXJlIHN1cHBvcnRlZCBmb3Igbm93LlxuIiwKKwkJCWRldi0+bmFtZSwgY2FyZChkZXYpLm5hbWUsIGRldi0+bmFtZSk7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9BNzAwX1BSTzoKIAkJLyogd3JpdGUgd2luZG93cyBncGlvIHZhbHVlcyAqLwogCQlzYWFfYW5kb3JsKFNBQTcxMzRfR1BJT19HUE1PREUwID4+IDIsICAgMHg4MDA0MDEwMCwgMHg4MDA0MDEwMCk7CiAJCXNhYV9hbmRvcmwoU0FBNzEzNF9HUElPX0dQU1RBVFVTMCA+PiAyLCAweDgwMDQwMTAwLCAweDAwMDQwMTAwKTsKLQkJcHJpbnRrKCIlczogJXM6IGh5YnJpZCBhbmFsb2cvZHZiIGNhcmRcbiIKLQkJICAgICAgICIlczogU29ycnksIG9ubHkgYW5hbG9nIHMtdmlkZW8gYW5kIGNvbXBvc2l0ZSBpbnB1dCAiCi0JCSAgICAgICAiYXJlIHN1cHBvcnRlZCBmb3Igbm93LlxuIiwKLQkJCWRldi0+bmFtZSwgY2FyZChkZXYpLm5hbWUsIGRldi0+bmFtZSk7CiAJCWJyZWFrOwogCX0KIAlyZXR1cm4gMDsKQEAgLTYxMDksNyArNjI4OCw3IEBACiAKIAkJdHVuX3NldHVwLm1vZGVfbWFzayA9IFRfUkFESU87CiAKLQkJc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVFVORVJfU0VUX1RZUEVfQUREUiwgJnR1bl9zZXR1cCk7CisJCXNhYV9jYWxsX2FsbChkZXYsIHR1bmVyLCBzX3R5cGVfYWRkciwgJnR1bl9zZXR1cCk7CiAJCW1vZGVfbWFzayAmPSB+VF9SQURJTzsKIAl9CiAKQEAgLTYxMjEsNyArNjMwMCw3IEBACiAKIAkJdHVuX3NldHVwLm1vZGVfbWFzayA9IG1vZGVfbWFzazsKIAotCQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LCBUVU5FUl9TRVRfVFlQRV9BRERSLCAmdHVuX3NldHVwKTsKKwkJc2FhX2NhbGxfYWxsKGRldiwgdHVuZXIsIHNfdHlwZV9hZGRyLCAmdHVuX3NldHVwKTsKIAl9CiAKIAlpZiAoZGV2LT50ZGE5ODg3X2NvbmYpIHsKQEAgLTYxMzAsOCArNjMwOSw3IEBACiAJCXRkYTk4ODdfY2ZnLnR1bmVyID0gVFVORVJfVERBOTg4NzsKIAkJdGRhOTg4N19jZmcucHJpdiA9ICZkZXYtPnRkYTk4ODdfY29uZjsKIAotCQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LCBUVU5FUl9TRVRfQ09ORklHLAotCQkJCQkgJnRkYTk4ODdfY2ZnKTsKKwkJc2FhX2NhbGxfYWxsKGRldiwgdHVuZXIsIHNfY29uZmlnLCAmdGRhOTg4N19jZmcpOwogCX0KIAogCWlmIChkZXYtPnR1bmVyX3R5cGUgPT0gVFVORVJfWEMyMDI4KSB7CkBAIC02MTU4LDcgKzYzMzYsNyBAQAogCQl4YzIwMjhfY2ZnLnR1bmVyID0gVFVORVJfWEMyMDI4OwogCQl4YzIwMjhfY2ZnLnByaXYgID0gJmN0bDsKIAotCQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LCBUVU5FUl9TRVRfQ09ORklHLCAmeGMyMDI4X2NmZyk7CisJCXNhYV9jYWxsX2FsbChkZXYsIHR1bmVyLCBzX2NvbmZpZywgJnhjMjAyOF9jZmcpOwogCX0KIH0KIApAQCAtNjE2OCw5ICs2MzQ2LDIwIEBACiAJdW5zaWduZWQgY2hhciBidWY7CiAJaW50IGJvYXJkOwogCisJLyogUHV0IGhlcmUgdGhlIGNvZGUgdGhhdCBlbmFibGVzIHRoZSBjaGlwcyB0aGF0IGFyZSBuZWVkZWQKKwkgICBmb3IgYW5hbG9nIG1vZGUgYW5kIGRvZXNuJ3QgZGVwZW5kIG9uIHRoZSB0dW5lciBhdHRhY2htZW50LgorCSAgIEl0IGlzIGFsc28gYSBnb29kIGlkZWEgdG8gZ2V0IHR1bmVyIHR5cGUgZnJvbSBlZXByb20sIGV0YyBiZWZvcmUKKwkgICBpbml0aWFsaXppbmcgdHVuZXIsIHNpbmNlIHdlIGNhbiBhdm9pZCBsb2FkaW5nIHR1bmVyIGRyaXZlcgorCSAgIG9uIGRldmljZXMgdGhhdCBoYXMgVFVORVJfQUJTRU5UCisJICovCiAJc3dpdGNoIChkZXYtPmJvYXJkKSB7CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JNS19NUEVYX05PVFVORVI6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0JNS19NUEVYX1RVTkVSOgorCQkvKiBDaGVja3MgaWYgdGhlIGRldmljZSBoYXMgYSB0dW5lciBhdCAweDYwIGFkZHIKKwkJICAgSWYgdGhlIGRldmljZSBkb2Vzbid0IGhhdmUgYSB0dW5lciwgVFVORVJfQUJTRU5UCisJCSAgIHdpbGwgYmUgdXNlZCBhdCB0dW5lcl90eXBlLCBhdm9pZGluZyBsb2FkaW5nIHR1bmVyCisJCSAgIHdpdGhvdXQgbmVlZGluZyBpdAorCQkgKi8KIAkJZGV2LT5pMmNfY2xpZW50LmFkZHIgPSAweDYwOwogCQlib2FyZCA9IChpMmNfbWFzdGVyX3JlY3YoJmRldi0+aTJjX2NsaWVudCwgJmJ1ZiwgMCkgPCAwKQogCQkJPyBTQUE3MTM0X0JPQVJEX0JNS19NUEVYX05PVFVORVIKQEAgLTYxODgsMTEgKzYzNzcsMTUgQEAKIAkJdTggc3ViYWRkcjsKIAkJdTggZGF0YVszXTsKIAkJaW50IHJldCwgdHVuZXJfdDsKLQogCQlzdHJ1Y3QgaTJjX21zZyBtc2dbXSA9IHt7LmFkZHI9MHg1MCwgLmZsYWdzPTAsIC5idWY9JnN1YmFkZHIsIC5sZW4gPSAxfSwKIAkJCQkJey5hZGRyPTB4NTAsIC5mbGFncz1JMkNfTV9SRCwgLmJ1Zj1kYXRhLCAubGVuID0gM319OworCiAJCXN1YmFkZHI9IDB4MTQ7CiAJCXR1bmVyX3QgPSAwOworCisJCS8qIFJldHJpZXZlIGRldmljZSBkYXRhIGZyb20gZWVwcm9tLCBjaGVja2luZyBmb3IgdGhlCisJCSAgIHByb3BlciB0dW5lcl90eXBlLgorCQkgKi8KIAkJcmV0ID0gaTJjX3RyYW5zZmVyKCZkZXYtPmkyY19hZGFwLCBtc2csIDIpOwogCQlpZiAocmV0ICE9IDIpIHsKIAkJCXByaW50ayhLRVJOX0VSUiAiRUVQUk9NIHJlYWQgZmFpbHVyZVxuIik7CkBAIC02MjQ4LDEyICs2NDQxLDE0IEBACiAJCQkJZGV2LT5uYW1lLCBzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5uYW1lKTsKIAkJCWJyZWFrOwogCQl9CisJCS8qIGJyZWFrIGludGVudGlvbmFsbHkgb21pdHRlZCAqLwogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8zMDA6CiAJY2FzZSBTQUE3MTM0X0JPQVJEX0FTVVNfRVVST1BBMl9IWUJSSUQ6CiAJewogCi0JCS8qIFRoZSBQaGlsaXBzIEVVUk9QQSBiYXNlZCBoeWJyaWQgYm9hcmRzIGhhdmUgdGhlIHR1bmVyIGNvbm5lY3RlZCB0aHJvdWdoCi0JCSAqIHRoZSBjaGFubmVsIGRlY29kZXIuIFdlIGhhdmUgdG8gbWFrZSBpdCB0cmFuc3BhcmVudCB0byBmaW5kIGl0CisJCS8qIFRoZSBQaGlsaXBzIEVVUk9QQSBiYXNlZCBoeWJyaWQgYm9hcmRzIGhhdmUgdGhlIHR1bmVyCisJCSAgIGNvbm5lY3RlZCB0aHJvdWdoIHRoZSBjaGFubmVsIGRlY29kZXIuIFdlIGhhdmUgdG8gbWFrZSBpdAorCQkgICB0cmFuc3BhcmVudCB0byBmaW5kIGl0CiAJCSAqLwogCQl1OCBkYXRhW10gPSB7IDB4MDcsIDB4MDJ9OwogCQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7LmFkZHI9MHgwOCwgLmZsYWdzPTAsIC5idWY9ZGF0YSwgLmxlbiA9IHNpemVvZihkYXRhKX07CkBAIC02Mjc0LDIxICs2NDY5LDE1IEBACiAJCWlmIChkZXYtPmJvYXJkID09IFNBQTcxMzRfQk9BUkRfUEhJTElQU19USUdFUl9TKSB7CiAJCQlkZXYtPnR1bmVyX3R5cGUgPSBUVU5FUl9QSElMSVBTX1REQTgyOTA7CiAKLQkJCXNhYTcxMzRfdHVuZXJfc2V0dXAoZGV2KTsKLQogCQkJZGF0YVsyXSA9IDB4Njg7CiAJCQlpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpOwotCi0JCQkvKiBUdW5lciBzZXR1cCBpcyBoYW5kbGVkIGJlZm9yZSBJMkMgdHJhbnNmZXIuCi0JCQkgICBEdWUgdG8gdGhhdCwgdGhlcmUncyBubyBuZWVkIHRvIGRvIGl0IGxhdGVyCi0JCQkgKi8KLQkJCXJldHVybiAwOworCQkJYnJlYWs7CiAJCX0KIAkJaTJjX3RyYW5zZmVyKCZkZXYtPmkyY19hZGFwLCAmbXNnLCAxKTsKIAkJYnJlYWs7CiAJfQotICAgICAgIGNhc2UgU0FBNzEzNF9CT0FSRF9BU1VTVGVLX1RWRk03MTM1OgotICAgICAgIC8qIFRoZSBjYXJkIGJlbG93IGlzIGRldGVjdGVkIGFzIGNhcmQ9NTMsIGJ1dCBpcyBkaWZmZXJlbnQgKi8KKwljYXNlIFNBQTcxMzRfQk9BUkRfQVNVU1RlS19UVkZNNzEzNToKKwkvKiBUaGUgY2FyZCBiZWxvdyBpcyBkZXRlY3RlZCBhcyBjYXJkPTUzLCBidXQgaXMgZGlmZmVyZW50ICovCiAJICAgICAgIGlmIChkZXYtPmF1dG9kZXRlY3RlZCAmJiAoZGV2LT5lZWRhdGFbMHgyN10gPT0gMHgwMykpIHsKIAkJICAgICAgIGRldi0+Ym9hcmQgPSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfUDcxMzFfQU5BTE9HOwogCQkgICAgICAgcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFA3MTMxIGFuYWxvZyBvbmx5LCB1c2luZyAiCkBAIC02Mjk2LDYgKzY0ODUsMTAgQEAKIAkJICAgICAgIGRldi0+bmFtZSwgc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0ubmFtZSk7CiAJICAgICAgIH0KIAkgICAgICAgYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTIwOgorCWNhc2UgU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTExMFIzOgorCQloYXVwcGF1Z2VfZWVwcm9tKGRldiwgZGV2LT5lZWRhdGErMHg4MCk7CisJCWJyZWFrOwogCWNhc2UgU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTExMDoKIAkJaGF1cHBhdWdlX2VlcHJvbShkZXYsIGRldi0+ZWVkYXRhKzB4ODApOwogCQkvKiBicmVhayBpbnRlbnRpb25hbGx5IG9taXR0ZWQgKi8KQEAgLTYzNTEsMjIgKzY1NDQsNiBAQAogCQlpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpOwogCQlicmVhazsKIAl9Ci0JY2FzZSBTQUE3MTM0X0JPQVJEX0FEU19JTlNUQU5UX0hEVFZfUENJOgotCWNhc2UgU0FBNzEzNF9CT0FSRF9LV09STERfQVRTQzExMDoKLQl7Ci0JCS8qIGVuYWJsZSB0dW5lciAqLwotCQlpbnQgaTsKLQkJc3RhdGljIGNvbnN0IHU4IGJ1ZmZlciBbXSA9IHsgMHgxMCwgMHgxMiwgMHgxMywgMHgwNCwgMHgxNiwKLQkJCQkJICAgICAgMHgwMCwgMHgxNCwgMHgwNCwgMHgxNywgMHgwMCB9OwotCQlkZXYtPmkyY19jbGllbnQuYWRkciA9IDB4MGE7Ci0JCWZvciAoaSA9IDA7IGkgPCA1OyBpKyspCi0JCQlpZiAoMiAhPSBpMmNfbWFzdGVyX3NlbmQoJmRldi0+aTJjX2NsaWVudCwKLQkJCQkJCSAmYnVmZmVyW2kqMl0sIDIpKQotCQkJCXByaW50ayhLRVJOX1dBUk5JTkcKLQkJCQkgICAgICAgIiVzOiBVbmFibGUgdG8gZW5hYmxlIHR1bmVyKCVpKS5cbiIsCi0JCQkJICAgICAgIGRldi0+bmFtZSwgaSk7Ci0JCWJyZWFrOwotCX0KIAljYXNlIFNBQTcxMzRfQk9BUkRfVklERU9NQVRFX0RWQlRfMjAwOgogCWNhc2UgU0FBNzEzNF9CT0FSRF9WSURFT01BVEVfRFZCVF8yMDBBOgogCQkvKiBUaGUgVDIwMCBhbmQgdGhlIFQyMDBBIHNoYXJlIHRoZSBzYW1lIHBjaSBpZC4gIENvbnNlcXVlbnRseSwKQEAgLTYzNzUsOSArNjU1Miw5IEBACiAKIAkJLyogRG9uJ3QgZG8gdGhpcyBpZiB0aGUgYm9hcmQgd2FzIHNwZWNpZmljYWxseSBzZWxlY3RlZCB3aXRoIGFuCiAJCSAqIGluc21vZCBvcHRpb24gb3IgaWYgd2UgaGF2ZSB0aGUgZGVmYXVsdCBjb25maWd1cmF0aW9uIFQyMDAqLwotCQlpZighZGV2LT5hdXRvZGV0ZWN0ZWQgfHwgKGRldi0+ZWVkYXRhWzB4NDFdID09IDB4ZDApKQorCQlpZiAoIWRldi0+YXV0b2RldGVjdGVkIHx8IChkZXYtPmVlZGF0YVsweDQxXSA9PSAweGQwKSkKIAkJCWJyZWFrOwotCQlpZihkZXYtPmVlZGF0YVsweDQxXSA9PSAweDAyKSB7CisJCWlmIChkZXYtPmVlZGF0YVsweDQxXSA9PSAweDAyKSB7CiAJCQkvKiBSZWNvbmZpZ3VyZSBib2FyZCAgYXMgVDIwMEEgKi8KIAkJCWRldi0+Ym9hcmQgPSBTQUE3MTM0X0JPQVJEX1ZJREVPTUFURV9EVkJUXzIwMEE7CiAJCQlkZXYtPnR1bmVyX3R5cGUgICA9IHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLnR1bmVyX3R5cGU7CkBAIC02MzkwLDYgKzY1NjcsNTggQEAKIAkJCWJyZWFrOwogCQl9CiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9BRFNfSU5TVEFOVF9IRFRWX1BDSToKKwljYXNlIFNBQTcxMzRfQk9BUkRfS1dPUkxEX0FUU0MxMTA6CisJeworCQlzdHJ1Y3QgaTJjX21zZyBtc2cgPSB7IC5hZGRyID0gMHgwYSwgLmZsYWdzID0gMCB9OworCQlpbnQgaTsKKwkJc3RhdGljIHU4IGJ1ZmZlcltdWzJdID0geworCQkJeyAweDEwLCAweDEyIH0sCisJCQl7IDB4MTMsIDB4MDQgfSwKKwkJCXsgMHgxNiwgMHgwMCB9LAorCQkJeyAweDE0LCAweDA0IH0sCisJCQl7IDB4MTcsIDB4MDAgfSwKKwkJfTsKKworCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShidWZmZXIpOyBpKyspIHsKKwkJCW1zZy5idWYgPSAmYnVmZmVyW2ldWzBdOworCQkJbXNnLmxlbiA9IEFSUkFZX1NJWkUoYnVmZmVyWzBdKTsKKwkJCWlmIChpMmNfdHJhbnNmZXIoJmRldi0+aTJjX2FkYXAsICZtc2csIDEpICE9IDEpCisJCQkJcHJpbnRrKEtFUk5fV0FSTklORworCQkJCSAgICAgICAiJXM6IFVuYWJsZSB0byBlbmFibGUgdHVuZXIoJWkpLlxuIiwKKwkJCQkgICAgICAgZGV2LT5uYW1lLCBpKTsKKwkJfQorCQlicmVhazsKKwl9CisJfSAvKiBzd2l0Y2goKSAqLworCisJLyogaW5pdGlhbGl6ZSB0dW5lciAqLworCWlmIChUVU5FUl9BQlNFTlQgIT0gZGV2LT50dW5lcl90eXBlKSB7CisJCWludCBoYXNfZGVtb2QgPSAoZGV2LT50ZGE5ODg3X2NvbmYgJiBUREE5ODg3X1BSRVNFTlQpOworCisJCS8qIE5vdGU6IHJhZGlvIHR1bmVyIGFkZHJlc3MgaXMgYWx3YXlzIGZpbGxlZCBpbiwKKwkJICAgc28gd2UgZG8gbm90IG5lZWQgdG8gcHJvYmUgZm9yIGEgcmFkaW8gdHVuZXIgZGV2aWNlLiAqLworCQlpZiAoZGV2LT5yYWRpb190eXBlICE9IFVOU0VUKQorCQkJdjRsMl9pMmNfbmV3X3N1YmRldigmZGV2LT5pMmNfYWRhcCwKKwkJCQkidHVuZXIiLCAidHVuZXIiLCBkZXYtPnJhZGlvX2FkZHIpOworCQlpZiAoaGFzX2RlbW9kKQorCQkJdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmRldi0+aTJjX2FkYXAsICJ0dW5lciIsCisJCQkJInR1bmVyIiwgdjRsMl9pMmNfdHVuZXJfYWRkcnMoQUREUlNfREVNT0QpKTsKKwkJaWYgKGRldi0+dHVuZXJfYWRkciA9PSBBRERSX1VOU0VUKSB7CisJCQllbnVtIHY0bDJfaTJjX3R1bmVyX3R5cGUgdHlwZSA9CisJCQkJaGFzX2RlbW9kID8gQUREUlNfVFZfV0lUSF9ERU1PRCA6IEFERFJTX1RWOworCisJCQl2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmZGV2LT5pMmNfYWRhcCwgInR1bmVyIiwKKwkJCQkidHVuZXIiLCB2NGwyX2kyY190dW5lcl9hZGRycyh0eXBlKSk7CisJCX0gZWxzZSB7CisJCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPmkyY19hZGFwLAorCQkJCSJ0dW5lciIsICJ0dW5lciIsIGRldi0+dHVuZXJfYWRkcik7CisJCX0KKwl9CisKKwlzYWE3MTM0X3R1bmVyX3NldHVwKGRldik7CisKKwlzd2l0Y2ggKGRldi0+Ym9hcmQpIHsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQkVIT0xEX0NPTFVNQlVTX1RWRk06CiAJewogCQlzdHJ1Y3QgdjRsMl9wcml2X3R1bl9jb25maWcgdGVhNTc2N19jZmc7CkBAIC02NDAxLDEyICs2NjMwLDEwIEBACiAJCWN0bC54dGFsX2ZyZXEgPSBURUE1NzY3X0hJR0hfTE9fMTNNSHo7CiAJCXRlYTU3NjdfY2ZnLnR1bmVyID0gVFVORVJfVEVBNTc2NzsKIAkJdGVhNTc2N19jZmcucHJpdiAgPSAmY3RsOwotCQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LCBUVU5FUl9TRVRfQ09ORklHLCAmdGVhNTc2N19jZmcpOworCQlzYWFfY2FsbF9hbGwoZGV2LCB0dW5lciwgc19jb25maWcsICZ0ZWE1NzY3X2NmZyk7CiAJCWJyZWFrOwogCX0KIAl9IC8qIHN3aXRjaCgpICovCiAKLQlzYWE3MTM0X3R1bmVyX3NldHVwKGRldik7Ci0KIAlyZXR1cm4gMDsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWNvcmUuYwppbmRleCA5OTIyMWQ3Li5kYWZhMGQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1jb3JlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtY29yZS5jCkBAIC01NCwxMyArNTQsOSBAQAogbW9kdWxlX3BhcmFtKGdwaW9fdHJhY2tpbmcsIGludCwgMDY0NCk7CiBNT0RVTEVfUEFSTV9ERVNDKGdwaW9fdHJhY2tpbmcsImVuYWJsZSBkZWJ1ZyBtZXNzYWdlcyBbZ3Bpb10iKTsKIAotc3RhdGljIHVuc2lnbmVkIGludCBhbHNhOworc3RhdGljIHVuc2lnbmVkIGludCBhbHNhID0gMTsKIG1vZHVsZV9wYXJhbShhbHNhLCBpbnQsIDA2NDQpOwotTU9EVUxFX1BBUk1fREVTQyhhbHNhLCJlbmFibGUgQUxTQSBETUEgc291bmQgW2RtYXNvdW5kXSIpOwotCi1zdGF0aWMgdW5zaWduZWQgaW50IG9zczsKLW1vZHVsZV9wYXJhbShvc3MsIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG9zcywiZW5hYmxlIE9TUyBETUEgc291bmQgW2RtYXNvdW5kXSIpOworTU9EVUxFX1BBUk1fREVTQyhhbHNhLCJlbmFibGUvZGlzYWJsZSBBTFNBIERNQSBzb3VuZCBbZG1hc291bmRdIik7CiAKIHN0YXRpYyB1bnNpZ25lZCBpbnQgbGF0ZW5jeSA9IFVOU0VUOwogbW9kdWxlX3BhcmFtKGxhdGVuY3ksIGludCwgMDQ0NCk7CkBAIC05MCw4ICs4NiwxMCBAQAogTU9EVUxFX1BBUk1fREVTQyh0dW5lciwgICAgInR1bmVyIHR5cGUiKTsKIE1PRFVMRV9QQVJNX0RFU0MoY2FyZCwgICAgICJjYXJkIHR5cGUiKTsKIAotc3RhdGljIERFRklORV9NVVRFWChkZXZsaXN0X2xvY2spOworREVGSU5FX01VVEVYKHNhYTcxMzRfZGV2bGlzdF9sb2NrKTsKK0VYUE9SVF9TWU1CT0woc2FhNzEzNF9kZXZsaXN0X2xvY2spOwogTElTVF9IRUFEKHNhYTcxMzRfZGV2bGlzdCk7CitFWFBPUlRfU1lNQk9MKHNhYTcxMzRfZGV2bGlzdCk7CiBzdGF0aWMgTElTVF9IRUFEKG1vcHNfbGlzdCk7CiBzdGF0aWMgdW5zaWduZWQgaW50IHNhYTcxMzRfZGV2Y291bnQ7CiAKQEAgLTE1NiwxMCArMTU0LDEwIEBACiAJCXJlcXVlc3RfbW9kdWxlKCJzYWE3MTM0LWVtcHJlc3MiKTsKIAlpZiAoY2FyZF9pc19kdmIoZGV2KSkKIAkJcmVxdWVzdF9tb2R1bGUoInNhYTcxMzQtZHZiIik7Ci0JaWYgKGFsc2EpCi0JCXJlcXVlc3RfbW9kdWxlKCJzYWE3MTM0LWFsc2EiKTsKLQlpZiAob3NzKQotCQlyZXF1ZXN0X21vZHVsZSgic2FhNzEzNC1vc3MiKTsKKwlpZiAoYWxzYSkgeworCQlpZiAoZGV2LT5wY2ktPmRldmljZSAhPSBQQ0lfREVWSUNFX0lEX1BISUxJUFNfU0FBNzEzMCkKKwkJCXJlcXVlc3RfbW9kdWxlKCJzYWE3MTM0LWFsc2EiKTsKKwl9CiB9CiAKIHN0YXRpYyB2b2lkIHJlcXVlc3Rfc3VibW9kdWxlcyhzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldikKQEAgLTc3OCw3ICs3NzYsNyBAQAogCQlyZXR1cm4gTlVMTDsKIAkqdmZkID0gKnRlbXBsYXRlOwogCXZmZC0+bWlub3IgICA9IC0xOwotCXZmZC0+cGFyZW50ICA9ICZkZXYtPnBjaS0+ZGV2OworCXZmZC0+djRsMl9kZXYgID0gJmRldi0+djRsMl9kZXY7CiAJdmZkLT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CiAJdmZkLT5kZWJ1ZyAgID0gdmlkZW9fZGVidWc7CiAJc25wcmludGYodmZkLT5uYW1lLCBzaXplb2YodmZkLT5uYW1lKSwgIiVzICVzICglcykiLApAQCAtODUxLDYgKzg0OSwxMCBAQAogCWlmIChOVUxMID09IGRldikKIAkJcmV0dXJuIC1FTk9NRU07CiAKKwllcnIgPSB2NGwyX2RldmljZV9yZWdpc3RlcigmcGNpX2Rldi0+ZGV2LCAmZGV2LT52NGwyX2Rldik7CisJaWYgKGVycikKKwkJZ290byBmYWlsMDsKKwogCS8qIHBjaSBpbml0ICovCiAJZGV2LT5wY2kgPSBwY2lfZGV2OwogCWlmIChwY2lfZW5hYmxlX2RldmljZShwY2lfZGV2KSkgewpAQCAtOTI3LDYgKzkyOSw4IEBACiAJZGV2LT5hdXRvZGV0ZWN0ZWQgPSBjYXJkW2Rldi0+bnJdICE9IGRldi0+Ym9hcmQ7CiAJZGV2LT50dW5lcl90eXBlID0gc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0udHVuZXJfdHlwZTsKIAlkZXYtPnR1bmVyX2FkZHIgPSBzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS50dW5lcl9hZGRyOworCWRldi0+cmFkaW9fdHlwZSA9IHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLnJhZGlvX3R5cGU7CisJZGV2LT5yYWRpb19hZGRyID0gc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0ucmFkaW9fYWRkcjsKIAlkZXYtPnRkYTk4ODdfY29uZiA9IHNhYTcxMzRfYm9hcmRzW2Rldi0+Ym9hcmRdLnRkYTk4ODdfY29uZjsKIAlpZiAoVU5TRVQgIT0gdHVuZXJbZGV2LT5ucl0pCiAJCWRldi0+dHVuZXJfdHlwZSA9IHR1bmVyW2Rldi0+bnJdOwpAQCAtOTcxLDIzICs5NzUsNDggQEAKIAkvKiB3YWl0IGEgYml0LCByZWdpc3RlciBpMmMgYnVzICovCiAJbXNsZWVwKDEwMCk7CiAJc2FhNzEzNF9pMmNfcmVnaXN0ZXIoZGV2KTsKLQotCS8qIGluaXRpYWxpemUgaGFyZHdhcmUgIzIgKi8KLQlpZiAoVFVORVJfQUJTRU5UICE9IGRldi0+dHVuZXJfdHlwZSkKLQkJcmVxdWVzdF9tb2R1bGUoInR1bmVyIik7CiAJc2FhNzEzNF9ib2FyZF9pbml0MihkZXYpOwogCiAJc2FhNzEzNF9od2luaXQyKGRldik7CiAKIAkvKiBsb2FkIGkyYyBoZWxwZXJzICovCiAJaWYgKGNhcmRfaXNfZW1wcmVzcyhkZXYpKSB7Ci0JCXJlcXVlc3RfbW9kdWxlKCJzYWE2NzUyaHMiKTsKKwkJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9CisJCQl2NGwyX2kyY19uZXdfc3ViZGV2KCZkZXYtPmkyY19hZGFwLAorCQkJCSJzYWE2NzUyaHMiLCAic2FhNjc1MmhzIiwKKwkJCQlzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5lbXByZXNzX2FkZHIpOworCisJCWlmIChzZCkKKwkJCXNkLT5ncnBfaWQgPSBHUlBfRU1QUkVTUzsKKwl9CisKKwlpZiAoc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0ucmRzX2FkZHIpIHsKKwkJdW5zaWduZWQgc2hvcnQgYWRkcnNbMl0gPSB7IDAsIEkyQ19DTElFTlRfRU5EIH07CisJCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisKKwkJYWRkcnNbMF0gPSBzYWE3MTM0X2JvYXJkc1tkZXYtPmJvYXJkXS5yZHNfYWRkcjsKKwkJc2QgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmZGV2LT5pMmNfYWRhcCwgInNhYTY1ODgiLAorCQkJICAgICJzYWE2NTg4IiwgYWRkcnMpOworCQlpZiAoc2QpCisJCQlwcmludGsoS0VSTl9JTkZPICIlczogZm91bmQgUkRTIGRlY29kZXJcbiIsIGRldi0+bmFtZSk7CiAJfQogCiAJcmVxdWVzdF9zdWJtb2R1bGVzKGRldik7CiAKIAl2NGwyX3ByaW9faW5pdCgmZGV2LT5wcmlvKTsKIAorCW11dGV4X2xvY2soJnNhYTcxMzRfZGV2bGlzdF9sb2NrKTsKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vcHMsICZtb3BzX2xpc3QsIG5leHQpCisJCW1wZWdfb3BzX2F0dGFjaChtb3BzLCBkZXYpOworCWxpc3RfYWRkX3RhaWwoJmRldi0+ZGV2bGlzdCwgJnNhYTcxMzRfZGV2bGlzdCk7CisJbXV0ZXhfdW5sb2NrKCZzYWE3MTM0X2Rldmxpc3RfbG9jayk7CisKKwkvKiBjaGVjayBmb3Igc2lnbmFsICovCisJc2FhNzEzNF9pcnFfdmlkZW9fc2lnbmFsY2hhbmdlKGRldik7CisKKwlpZiAoVFVORVJfQUJTRU5UICE9IGRldi0+dHVuZXJfdHlwZSkKKwkJc2FhX2NhbGxfYWxsKGRldiwgY29yZSwgc19zdGFuZGJ5LCAwKTsKKwogCS8qIHJlZ2lzdGVyIHY0bCBkZXZpY2VzICovCiAJaWYgKHNhYTcxMzRfbm9fb3ZlcmxheSA+IDApCiAJCXByaW50ayhLRVJOX0lORk8gIiVzOiBPdmVybGF5IHN1cHBvcnQgZGlzYWJsZWQuXG4iLCBkZXYtPm5hbWUpOwpAQCAtMTAyMywyNCArMTA1MiwxMCBAQAogCX0KIAogCS8qIGV2ZXJ5dGhpbmcgd29ya2VkICovCi0JcGNpX3NldF9kcnZkYXRhKHBjaV9kZXYsZGV2KTsKIAlzYWE3MTM0X2RldmNvdW50Kys7CiAKLQltdXRleF9sb2NrKCZkZXZsaXN0X2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkobW9wcywgJm1vcHNfbGlzdCwgbmV4dCkKLQkJbXBlZ19vcHNfYXR0YWNoKG1vcHMsIGRldik7Ci0JbGlzdF9hZGRfdGFpbCgmZGV2LT5kZXZsaXN0LCZzYWE3MTM0X2Rldmxpc3QpOwotCW11dGV4X3VubG9jaygmZGV2bGlzdF9sb2NrKTsKLQotCS8qIGNoZWNrIGZvciBzaWduYWwgKi8KLQlzYWE3MTM0X2lycV92aWRlb19zaWduYWxjaGFuZ2UoZGV2KTsKLQotCWlmIChzYWE3MTM0X2RtYXNvdW5kX2luaXQgJiYgIWRldi0+ZG1hc291bmQucHJpdl9kYXRhKSB7CisJaWYgKHNhYTcxMzRfZG1hc291bmRfaW5pdCAmJiAhZGV2LT5kbWFzb3VuZC5wcml2X2RhdGEpCiAJCXNhYTcxMzRfZG1hc291bmRfaW5pdChkZXYpOwotCX0KLQotCWlmIChUVU5FUl9BQlNFTlQgIT0gZGV2LT50dW5lcl90eXBlKQotCQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LCBUVU5FUl9TRVRfU1RBTkRCWSwgTlVMTCk7CiAKIAlyZXR1cm4gMDsKIApAQCAtMTA1NSwxMyArMTA3MCwxNiBAQAogCXJlbGVhc2VfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwwKSwKIAkJCSAgIHBjaV9yZXNvdXJjZV9sZW4ocGNpX2RldiwwKSk7CiAgZmFpbDE6CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmZGV2LT52NGwyX2Rldik7CisgZmFpbDA6CiAJa2ZyZWUoZGV2KTsKIAlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgc2FhNzEzNF9maW5pZGV2KHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQogewotCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBjb250YWluZXJfb2YodjRsMl9kZXYsIHN0cnVjdCBzYWE3MTM0X2RldiwgdjRsMl9kZXYpOwogCXN0cnVjdCBzYWE3MTM0X21wZWdfb3BzICptb3BzOwogCiAJLyogUmVsZWFzZSBETUEgc291bmQgbW9kdWxlcyBpZiBwcmVzZW50ICovCkBAIC0xMDg4LDExICsxMTA2LDExIEBACiAJc2FhNzEzNF9od2ZpbmkoZGV2KTsKIAogCS8qIHVucmVnaXN0ZXIgKi8KLQltdXRleF9sb2NrKCZkZXZsaXN0X2xvY2spOworCW11dGV4X2xvY2soJnNhYTcxMzRfZGV2bGlzdF9sb2NrKTsKIAlsaXN0X2RlbCgmZGV2LT5kZXZsaXN0KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KG1vcHMsICZtb3BzX2xpc3QsIG5leHQpCiAJCW1wZWdfb3BzX2RldGFjaChtb3BzLCBkZXYpOwotCW11dGV4X3VubG9jaygmZGV2bGlzdF9sb2NrKTsKKwltdXRleF91bmxvY2soJnNhYTcxMzRfZGV2bGlzdF9sb2NrKTsKIAlzYWE3MTM0X2RldmNvdW50LS07CiAKIAlzYWE3MTM0X2kyY191bnJlZ2lzdGVyKGRldik7CkBAIC0xMTEzLDcgKzExMzEsOCBAQAogCXJlbGVhc2VfbWVtX3JlZ2lvbihwY2lfcmVzb3VyY2Vfc3RhcnQocGNpX2RldiwwKSwKIAkJCSAgIHBjaV9yZXNvdXJjZV9sZW4ocGNpX2RldiwwKSk7CiAKLQlwY2lfc2V0X2RydmRhdGEocGNpX2RldiwgTlVMTCk7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPnY0bDJfZGV2KTsKIAogCS8qIGZyZWUgbWVtb3J5ICovCiAJa2ZyZWUoZGV2KTsKQEAgLTExNDgsOCArMTE2Nyw4IEBACiAKIHN0YXRpYyBpbnQgc2FhNzEzNF9zdXNwZW5kKHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ICwgcG1fbWVzc2FnZV90IHN0YXRlKQogewotCi0Jc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBwY2lfZ2V0X2RydmRhdGEocGNpX2Rldik7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IHNhYTcxMzRfZGV2LCB2NGwyX2Rldik7CiAKIAkvKiBkaXNhYmxlIG92ZXJsYXkgLSBhcHBzIHNob3VsZCBlbmFibGUgaXQgZXhwbGljaXRseSBvbiByZXN1bWUqLwogCWRldi0+b3ZlbmFibGUgPSAwOwpAQCAtMTE4NSw3ICsxMjA0LDggQEAKIAogc3RhdGljIGludCBzYWE3MTM0X3Jlc3VtZShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKIHsKLQlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YShwY2lfZGV2KTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gcGNpX2dldF9kcnZkYXRhKHBjaV9kZXYpOworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gY29udGFpbmVyX29mKHY0bDJfZGV2LCBzdHJ1Y3Qgc2FhNzEzNF9kZXYsIHY0bDJfZGV2KTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJcGNpX3NldF9wb3dlcl9zdGF0ZShwY2lfZGV2LCBQQ0lfRDApOwpAQCAtMTI0NywxMSArMTI2NywxMSBAQAogewogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2OwogCi0JbXV0ZXhfbG9jaygmZGV2bGlzdF9sb2NrKTsKKwltdXRleF9sb2NrKCZzYWE3MTM0X2Rldmxpc3RfbG9jayk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZzYWE3MTM0X2Rldmxpc3QsIGRldmxpc3QpCiAJCW1wZWdfb3BzX2F0dGFjaChvcHMsIGRldik7CiAJbGlzdF9hZGRfdGFpbCgmb3BzLT5uZXh0LCZtb3BzX2xpc3QpOwotCW11dGV4X3VubG9jaygmZGV2bGlzdF9sb2NrKTsKKwltdXRleF91bmxvY2soJnNhYTcxMzRfZGV2bGlzdF9sb2NrKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTI1OSwxMSArMTI3OSwxMSBAQAogewogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2OwogCi0JbXV0ZXhfbG9jaygmZGV2bGlzdF9sb2NrKTsKKwltdXRleF9sb2NrKCZzYWE3MTM0X2Rldmxpc3RfbG9jayk7CiAJbGlzdF9kZWwoJm9wcy0+bmV4dCk7CiAJbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZzYWE3MTM0X2Rldmxpc3QsIGRldmxpc3QpCiAJCW1wZWdfb3BzX2RldGFjaChvcHMsIGRldik7Ci0JbXV0ZXhfdW5sb2NrKCZkZXZsaXN0X2xvY2spOworCW11dGV4X3VubG9jaygmc2FhNzEzNF9kZXZsaXN0X2xvY2spOwogfQogCiBFWFBPUlRfU1lNQk9MKHNhYTcxMzRfdHNfcmVnaXN0ZXIpOwpAQCAtMTMwNyw4ICsxMzI3LDYgQEAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIEVYUE9SVF9TWU1CT0woc2FhNzEzNF9zZXRfZ3Bpbyk7Ci1FWFBPUlRfU1lNQk9MKHNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyk7Ci1FWFBPUlRfU1lNQk9MKHNhYTcxMzRfZGV2bGlzdCk7CiBFWFBPUlRfU1lNQk9MKHNhYTcxMzRfYm9hcmRzKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0gZm9yIHRoZSBETUEgc291bmQgbW9kdWxlcyAtLS0tLS0tLS0tLS0tLS0gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWR2Yi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKaW5kZXggYjUzNzBiMy4uNGVmZjFjYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZHZiLmMKQEAgLTQ4LDkgKzQ4LDE1IEBACiAjaW5jbHVkZSAiaXNsNjQwNS5oIgogI2luY2x1ZGUgImxuYnAyMS5oIgogI2luY2x1ZGUgInR1bmVyLXNpbXBsZS5oIgorI2luY2x1ZGUgInRkYTE4MjcxLmgiCisjaW5jbHVkZSAibGdkdDMzMDUuaCIKKyNpbmNsdWRlICJ0ZGE4MjkwLmgiCiAKICNpbmNsdWRlICJ6bDEwMzUzLmgiCiAKKyNpbmNsdWRlICJ6bDEwMDM2LmgiCisjaW5jbHVkZSAibXQzMTIuaCIKKwogTU9EVUxFX0FVVEhPUigiR2VyZCBLbm9yciA8a3JheGVsQGJ5dGVzZXgub3JnPiBbU3VTRSBMYWJzXSIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCkBAIC0xODksNyArMTk1LDcgQEAKIAlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQogCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwogCWkyY190cmFuc2ZlcigmZGV2LT5pMmNfYWRhcCwgJm1zZywgMSk7Ci0Jc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKGRldixWSURJT0NfU19GUkVRVUVOQ1ksJmYpOworCXNhYV9jYWxsX2FsbChkZXYsIHR1bmVyLCBzX2ZyZXF1ZW5jeSwgJmYpOwogCW1zZy5idWYgPSBvbjsKIAlpZiAoZmUtPm9wcy5pMmNfZ2F0ZV9jdHJsKQogCQlmZS0+b3BzLmkyY19nYXRlX2N0cmwoZmUsIDEpOwpAQCAtOTUwLDYgKzk1Niw0NSBAQAogCS5kZW1vZF9hZGRyZXNzICAgID0gMHgwYSwKIH07CiAKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCitzdGF0aWMgc3RydWN0IG10MzEyX2NvbmZpZyBhdmVydHZfYTcwMF9tdDMxMiA9IHsKKwkuZGVtb2RfYWRkcmVzcyA9IDB4MGUsCisJLnZvbHRhZ2VfaW52ZXJ0ZWQgPSAxLAorfTsKKworc3RhdGljIHN0cnVjdCB6bDEwMDM2X2NvbmZpZyBhdmVydHZfYTcwMF90dW5lciA9IHsKKwkudHVuZXJfYWRkcmVzcyA9IDB4NjAsCit9OworCitzdGF0aWMgc3RydWN0IGxnZHQzMzA1X2NvbmZpZyBoY3dfbGdkdDMzMDVfY29uZmlnID0geworCS5pMmNfYWRkciAgICAgICAgICAgPSAweDBlLAorCS5tcGVnX21vZGUgICAgICAgICAgPSBMR0RUMzMwNV9NUEVHX1NFUklBTCwKKwkudHBjbGtfZWRnZSAgICAgICAgID0gTEdEVDMzMDVfVFBDTEtfUklTSU5HX0VER0UsCisJLnRwdmFsaWRfcG9sYXJpdHkgICA9IExHRFQzMzA1X1RQX1ZBTElEX0hJR0gsCisJLmRlbnlfaTJjX3JwdHIgICAgICA9IDEsCisJLnNwZWN0cmFsX2ludmVyc2lvbiA9IDEsCisJLnFhbV9pZl9raHogICAgICAgICA9IDQwMDAsCisJLnZzYl9pZl9raHogICAgICAgICA9IDMyNTAsCit9OworCitzdGF0aWMgc3RydWN0IHRkYTE4MjcxX3N0ZF9tYXAgaGF1cHBhdWdlX3RkYTE4MjcxX3N0ZF9tYXAgPSB7CisJLmF0c2NfNiAgID0geyAuaWZfZnJlcSA9IDMyNTAsIC5hZ2NfbW9kZSA9IDMsIC5zdGQgPSA0LAorCQkgICAgICAuaWZfbHZsID0gMSwgLnJmYWdjX3RvcCA9IDB4NTgsIH0sCisJLnFhbV82ICAgID0geyAuaWZfZnJlcSA9IDQwMDAsIC5hZ2NfbW9kZSA9IDMsIC5zdGQgPSA1LAorCQkgICAgICAuaWZfbHZsID0gMSwgLnJmYWdjX3RvcCA9IDB4NTgsIH0sCit9OworCitzdGF0aWMgc3RydWN0IHRkYTE4MjcxX2NvbmZpZyBoY3dfdGRhMTgyNzFfY29uZmlnID0geworCS5zdGRfbWFwID0gJmhhdXBwYXVnZV90ZGExODI3MV9zdGRfbWFwLAorCS5nYXRlICAgID0gVERBMTgyNzFfR0FURV9BTkFMT0csCisJLmNvbmZpZyAgPSAzLAorfTsKKworc3RhdGljIHN0cnVjdCB0ZGE4Mjl4X2NvbmZpZyB0ZGE4Mjl4X25vX3Byb2JlID0geworCS5wcm9iZV90dW5lciA9IFREQTgyOVhfRE9OVF9QUk9CRSwKK307CisKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICogQ29yZSBjb2RlCiAgKi8KQEAgLTEwNzYsNiArMTEyMSwxOSBAQAogCQkJCQkgJnRkYTgyN3hfY2ZnXzEpIDwgMCkKIAkJCWdvdG8gZGV0dGFjaF9mcm9udGVuZDsKIAkJYnJlYWs7CisJY2FzZSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTIwOgorCQlmZTAtPmR2Yi5mcm9udGVuZCA9IGR2Yl9hdHRhY2gobGdkdDMzMDVfYXR0YWNoLAorCQkJCQkgICAgICAgJmhjd19sZ2R0MzMwNV9jb25maWcsCisJCQkJCSAgICAgICAmZGV2LT5pMmNfYWRhcCk7CisJCWlmIChmZTAtPmR2Yi5mcm9udGVuZCkgeworCQkJZHZiX2F0dGFjaCh0ZGE4Mjl4X2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCisJCQkJICAgJmRldi0+aTJjX2FkYXAsIDB4NGIsCisJCQkJICAgJnRkYTgyOXhfbm9fcHJvYmUpOworCQkJZHZiX2F0dGFjaCh0ZGExODI3MV9hdHRhY2gsIGZlMC0+ZHZiLmZyb250ZW5kLAorCQkJCSAgIDB4NjAsICZkZXYtPmkyY19hZGFwLAorCQkJCSAgICZoY3dfdGRhMTgyNzFfY29uZmlnKTsKKwkJfQorCQlicmVhazsKIAljYXNlIFNBQTcxMzRfQk9BUkRfQVNVU1RlS19QNzEzMV9EVUFMOgogCQlpZiAoY29uZmlndXJlX3RkYTgyN3hfZmUoZGV2LCAmYXN1c19wNzEzMV9kdWFsX2NvbmZpZywKIAkJCQkJICZ0ZGE4Mjd4X2NmZ18wKSA8IDApCkBAIC0xMzc2LDYgKzE0MzQsMTkgQEAKIAkJCQkgICBUVU5FUl9QSElMSVBTX0ZNRDEyMTZNRV9NSzMpOwogCQl9CiAJCWJyZWFrOworCWNhc2UgU0FBNzEzNF9CT0FSRF9BVkVSTUVESUFfQTcwMF9QUk86CisJY2FzZSBTQUE3MTM0X0JPQVJEX0FWRVJNRURJQV9BNzAwX0hZQlJJRDoKKwkJLyogWmFybGluayBaTDEwMzEzICovCisJCWZlMC0+ZHZiLmZyb250ZW5kID0gZHZiX2F0dGFjaChtdDMxMl9hdHRhY2gsCisJCQkmYXZlcnR2X2E3MDBfbXQzMTIsICZkZXYtPmkyY19hZGFwKTsKKwkJaWYgKGZlMC0+ZHZiLmZyb250ZW5kKSB7CisJCQlpZiAoZHZiX2F0dGFjaCh6bDEwMDM2X2F0dGFjaCwgZmUwLT5kdmIuZnJvbnRlbmQsCisJCQkJCSZhdmVydHZfYTcwMF90dW5lciwgJmRldi0+aTJjX2FkYXApID09IE5VTEwpIHsKKwkJCQl3cHJpbnRrKCIlczogTm8gemwxMDAzNiBmb3VuZCFcbiIsCisJCQkJCV9fZnVuY19fKTsKKwkJCX0KKwkJfQorCQlicmVhazsKIAlkZWZhdWx0OgogCQl3cHJpbnRrKCJIdWg/IHVua25vd24gRFZCIGNhcmQ/XG4iKTsKIAkJYnJlYWs7CkBAIC0xNDQ5LDcgKzE1MjAsNyBAQAogCQl0ZGE5ODg3X2NmZy5wcml2ICA9ICZvbjsKIAogCQkvKiBvdGhlcndpc2Ugd2UgZG9uJ3QgZGV0ZWN0IHRoZSB0dW5lciBvbiBuZXh0IGluc21vZCAqLwotCQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LCBUVU5FUl9TRVRfQ09ORklHLCAmdGRhOTg4N19jZmcpOworCQlzYWFfY2FsbF9hbGwoZGV2LCB0dW5lciwgc19jb25maWcsICZ0ZGE5ODg3X2NmZyk7CiAJfSBlbHNlIGlmIChkZXYtPmJvYXJkID09IFNBQTcxMzRfQk9BUkRfTUVESU9OX01EODgwMF9RVUFEUk8pIHsKIAkJaWYgKChkZXYtPmVlZGF0YVsyXSA9PSAweDA3KSAmJiB1c2VfZnJvbnRlbmQpIHsKIAkJCS8qIHR1cm4gb2ZmIHRoZSAybmQgbG5iIHN1cHBseSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZW1wcmVzcy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtZW1wcmVzcy5jCmluZGV4IGM5ZDhiZWIuLjlkYjM0NzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWVtcHJlc3MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC1lbXByZXNzLmMKQEAgLTc2LDcgKzc2LDcgQEAKIAkJYnJlYWs7CiAJfQogCXRzX3Jlc2V0X2VuY29kZXIoZGV2KTsKLQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfSU5UX0lOSVQsICZsZWFkaW5nX251bGxfYnl0ZXMpOworCXNhYV9jYWxsX2FsbChkZXYsIGNvcmUsIGluaXQsIGxlYWRpbmdfbnVsbF9ieXRlcyk7CiAJZGV2LT5lbXByZXNzX3N0YXJ0ZWQgPSAxOwogCXJldHVybiAwOwogfQpAQCAtMjM0LDcgKzIzNCw3IEBACiB7CiAJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAKLQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LCBWSURJT0NfR19GTVQsIGYpOworCXNhYV9jYWxsX2FsbChkZXYsIHZpZGVvLCBnX2ZtdCwgZik7CiAKIAlmLT5mbXQucGl4LnBpeGVsZm9ybWF0ICA9IFY0TDJfUElYX0ZNVF9NUEVHOwogCWYtPmZtdC5waXguc2l6ZWltYWdlICAgID0gVFNfUEFDS0VUX1NJWkUgKiBkZXYtPnRzLm5yX3BhY2tldHM7CkBAIC0yNDcsNyArMjQ3LDcgQEAKIHsKIAlzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAotCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19TX0ZNVCwgZik7CisJc2FhX2NhbGxfYWxsKGRldiwgdmlkZW8sIHNfZm10LCBmKTsKIAogCWYtPmZtdC5waXgucGl4ZWxmb3JtYXQgID0gVjRMMl9QSVhfRk1UX01QRUc7CiAJZi0+Zm10LnBpeC5zaXplaW1hZ2UgICAgPSBUU19QQUNLRVRfU0laRSAqIGRldi0+dHMubnJfcGFja2V0czsKQEAgLTMxNyw3ICszMTcsNyBAQAogCWlmIChjdHJscy0+Y3RybF9jbGFzcyAhPSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykKIAkJcmV0dXJuIC1FSU5WQUw7CiAKLQllcnIgPSBzYWE3MTM0X2kyY19jYWxsX3NhYTY3NTIoZGV2LCBWSURJT0NfU19FWFRfQ1RSTFMsIGN0cmxzKTsKKwllcnIgPSBzYWFfY2FsbF9lbXByZXNzKGRldiwgY29yZSwgc19leHRfY3RybHMsIGN0cmxzKTsKIAl0c19pbml0X2VuY29kZXIoZGV2KTsKIAogCXJldHVybiBlcnI7CkBAIC0zMzAsNyArMzMwLDcgQEAKIAogCWlmIChjdHJscy0+Y3RybF9jbGFzcyAhPSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JcmV0dXJuIHNhYTcxMzRfaTJjX2NhbGxfc2FhNjc1MihkZXYsIFZJRElPQ19HX0VYVF9DVFJMUywgY3RybHMpOworCXJldHVybiBzYWFfY2FsbF9lbXByZXNzKGRldiwgY29yZSwgZ19leHRfY3RybHMsIGN0cmxzKTsKIH0KIAogc3RhdGljIGludCBlbXByZXNzX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKQEAgLTM1Miw2ICszNTIsNyBAQAogc3RhdGljIGludCBlbXByZXNzX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKIAkJCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpjKQogeworCS8qIE11c3QgYmUgc29ydGVkIGZyb20gbG93IHRvIGhpZ2ggY29udHJvbCBJRCEgKi8KIAlzdGF0aWMgY29uc3QgdTMyIHVzZXJfY3RybHNbXSA9IHsKIAkJVjRMMl9DSURfVVNFUl9DTEFTUywKIAkJVjRMMl9DSURfQlJJR0hUTkVTUywKQEAgLTM2NCw2ICszNjUsNyBAQAogCQkwCiAJfTsKIAorCS8qIE11c3QgYmUgc29ydGVkIGZyb20gbG93IHRvIGhpZ2ggY29udHJvbCBJRCEgKi8KIAlzdGF0aWMgY29uc3QgdTMyIG1wZWdfY3RybHNbXSA9IHsKIAkJVjRMMl9DSURfTVBFR19DTEFTUywKIAkJVjRMMl9DSURfTVBFR19TVFJFQU1fVFlQRSwKQEAgLTM4OCwxMCArMzkwLDEwIEBACiAJaWYgKGMtPmlkID09IDApCiAJCXJldHVybiAtRUlOVkFMOwogCWlmIChjLT5pZCA9PSBWNEwyX0NJRF9VU0VSX0NMQVNTIHx8IGMtPmlkID09IFY0TDJfQ0lEX01QRUdfQ0xBU1MpCi0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQoYyk7CisJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChjLCAwLCAwLCAwLCAwKTsKIAlpZiAoVjRMMl9DVFJMX0lEMkNMQVNTKGMtPmlkKSAhPSBWNEwyX0NUUkxfQ0xBU1NfTVBFRykKIAkJcmV0dXJuIHNhYTcxMzRfcXVlcnljdHJsKGZpbGUsIHByaXYsIGMpOwotCXJldHVybiBzYWE3MTM0X2kyY19jYWxsX3NhYTY3NTIoZGV2LCBWSURJT0NfUVVFUllDVFJMLCBjKTsKKwlyZXR1cm4gc2FhX2NhbGxfZW1wcmVzcyhkZXYsIGNvcmUsIHF1ZXJ5Y3RybCwgYyk7CiB9CiAKIHN0YXRpYyBpbnQgZW1wcmVzc19xdWVyeW1lbnUoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCkBAIC00MDEsNyArNDAzLDcgQEAKIAogCWlmIChWNEwyX0NUUkxfSUQyQ0xBU1MoYy0+aWQpICE9IFY0TDJfQ1RSTF9DTEFTU19NUEVHKQogCQlyZXR1cm4gLUVJTlZBTDsKLQlyZXR1cm4gc2FhNzEzNF9pMmNfY2FsbF9zYWE2NzUyKGRldiwgVklESU9DX1FVRVJZTUVOVSwgYyk7CisJcmV0dXJuIHNhYV9jYWxsX2VtcHJlc3MoZGV2LCBjb3JlLCBxdWVyeW1lbnUsIGMpOwogfQogCiBzdGF0aWMgaW50IGVtcHJlc3NfZ19jaGlwX2lkZW50KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpmaCwKQEAgLTQxMSwxNCArNDEzLDExIEBACiAKIAljaGlwLT5pZGVudCA9IFY0TDJfSURFTlRfTk9ORTsKIAljaGlwLT5yZXZpc2lvbiA9IDA7Ci0JaWYgKGRldi0+bXBlZ19pMmNfY2xpZW50ID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwogCWlmIChjaGlwLT5tYXRjaC50eXBlID09IFY0TDJfQ0hJUF9NQVRDSF9JMkNfRFJJVkVSICYmCiAJICAgICFzdHJjbXAoY2hpcC0+bWF0Y2gubmFtZSwgInNhYTY3NTJocyIpKQotCQlyZXR1cm4gc2FhNzEzNF9pMmNfY2FsbF9zYWE2NzUyKGRldiwgVklESU9DX0RCR19HX0NISVBfSURFTlQsIGNoaXApOwotCWlmIChjaGlwLT5tYXRjaC50eXBlID09IFY0TDJfQ0hJUF9NQVRDSF9JMkNfQUREUiAmJgotCSAgICBjaGlwLT5tYXRjaC5hZGRyID09IGRldi0+bXBlZ19pMmNfY2xpZW50LT5hZGRyKQotCQlyZXR1cm4gc2FhNzEzNF9pMmNfY2FsbF9zYWE2NzUyKGRldiwgVklESU9DX0RCR19HX0NISVBfSURFTlQsIGNoaXApOworCQlyZXR1cm4gc2FhX2NhbGxfZW1wcmVzcyhkZXYsIGNvcmUsIGdfY2hpcF9pZGVudCwgY2hpcCk7CisJaWYgKGNoaXAtPm1hdGNoLnR5cGUgPT0gVjRMMl9DSElQX01BVENIX0kyQ19BRERSKQorCQlyZXR1cm4gc2FhX2NhbGxfZW1wcmVzcyhkZXYsIGNvcmUsIGdfY2hpcF9pZGVudCwgY2hpcCk7CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LWkyYy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaTJjLmMKaW5kZXggMjBjMWIzMy4uZjNlMjg1YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaTJjLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtaTJjLmMKQEAgLTI1NSw3ICsyNTUsNyBAQAogCQkJYWRkciAgPSBtc2dzW2ldLmFkZHIgPDwgMTsKIAkJCWlmIChtc2dzW2ldLmZsYWdzICYgSTJDX01fUkQpCiAJCQkJYWRkciB8PSAxOwotCQkJaWYgKGkgPiAwICYmIG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCkgeworCQkJaWYgKGkgPiAwICYmIG1zZ3NbaV0uZmxhZ3MgJiBJMkNfTV9SRCAmJiBtc2dzW2ldLmFkZHIgIT0gMHg0MCkgewogCQkJCS8qIHdvcmthcm91bmQgZm9yIGEgc2FhNzEzNCBpMmMgYnVnCiAJCQkJICogbmVlZGVkIHRvIHRhbGsgdG8gdGhlIG10MzUyIGRlbXV4CiAJCQkJICogdGhhbmtzIHRvIHBpbm5hY2xlIGZvciB0aGUgaGludCAqLwpAQCAtMzI3LDggKzMyNyw2IEBACiAKIAlkMXByaW50ayggIiVzIGkyYyBhdHRhY2ggW2FkZHI9MHgleCxjbGllbnQ9JXNdXG4iLAogCQljbGllbnQtPmRyaXZlci0+ZHJpdmVyLm5hbWUsIGNsaWVudC0+YWRkciwgY2xpZW50LT5uYW1lKTsKLQlpZiAoY2xpZW50LT5hZGRyID09IDB4MjAgJiYgY2xpZW50LT5kcml2ZXIgJiYgY2xpZW50LT5kcml2ZXItPmNvbW1hbmQpCi0JCWRldi0+bXBlZ19pMmNfY2xpZW50ID0gY2xpZW50OwogCiAJLyogQW0gSSBhbiBpMmMgcmVtb3RlIGNvbnRyb2w/ICovCiAKQEAgLTM1Nyw3ICszNTUsNiBAQAogCiBzdGF0aWMgc3RydWN0IGkyY19hZGFwdGVyIHNhYTcxMzRfYWRhcF90ZW1wbGF0ZSA9IHsKIAkub3duZXIgICAgICAgICA9IFRISVNfTU9EVUxFLAotCS5jbGFzcyAgICAgICAgID0gSTJDX0NMQVNTX1RWX0FOQUxPRywKIAkubmFtZSAgICAgICAgICA9ICJzYWE3MTM0IiwKIAkuaWQgICAgICAgICAgICA9IEkyQ19IV19TQUE3MTM0LAogCS5hbGdvICAgICAgICAgID0gJnNhYTcxMzRfYWxnbywKQEAgLTQyMSwyOSArNDE4LDEzIEBACiAJfQogfQogCi12b2lkIHNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlCVUdfT04oTlVMTCA9PSBkZXYtPmkyY19hZGFwLmFsZ29fZGF0YSk7Ci0JaTJjX2NsaWVudHNfY29tbWFuZCgmZGV2LT5pMmNfYWRhcCwgY21kLCBhcmcpOwotfQotCi1pbnQgc2FhNzEzNF9pMmNfY2FsbF9zYWE2NzUyKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LAotCQkJCQkgICAgICB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JaWYgKGRldi0+bXBlZ19pMmNfY2xpZW50ID09IE5VTEwpCi0JCXJldHVybiAtRUlOVkFMOwotCXJldHVybiBkZXYtPm1wZWdfaTJjX2NsaWVudC0+ZHJpdmVyLT5jb21tYW5kKGRldi0+bXBlZ19pMmNfY2xpZW50LAotCQkJCQkJCQljbWQsIGFyZyk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChzYWE3MTM0X2kyY19jYWxsX3NhYTY3NTIpOwotCiBpbnQgc2FhNzEzNF9pMmNfcmVnaXN0ZXIoc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYpCiB7CiAJZGV2LT5pMmNfYWRhcCA9IHNhYTcxMzRfYWRhcF90ZW1wbGF0ZTsKIAlkZXYtPmkyY19hZGFwLmRldi5wYXJlbnQgPSAmZGV2LT5wY2ktPmRldjsKIAlzdHJjcHkoZGV2LT5pMmNfYWRhcC5uYW1lLGRldi0+bmFtZSk7CiAJZGV2LT5pMmNfYWRhcC5hbGdvX2RhdGEgPSBkZXY7CisJaTJjX3NldF9hZGFwZGF0YSgmZGV2LT5pMmNfYWRhcCwgJmRldi0+djRsMl9kZXYpOwogCWkyY19hZGRfYWRhcHRlcigmZGV2LT5pMmNfYWRhcCk7CiAKIAlkZXYtPmkyY19jbGllbnQgPSBzYWE3MTM0X2NsaWVudF90ZW1wbGF0ZTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXRzLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC10cy5jCmluZGV4IGVmNTVhNTkuLmNjOGI5MjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXRzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdHMuYwpAQCAtNzksOCArNzksMTkgQEAKIAkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1NFUklBTDEsIDB4MDApOwogCiAJCS8qIFN0YXJ0IFRTIHN0cmVhbSAqLwotCQlzYWFfd3JpdGViKFNBQTcxMzRfVFNfU0VSSUFMMCwgMHg0MCk7Ci0JCXNhYV93cml0ZWIoU0FBNzEzNF9UU19QQVJBTExFTCwgMHhFQyk7CisJCXN3aXRjaCAoc2FhNzEzNF9ib2FyZHNbZGV2LT5ib2FyZF0udHNfdHlwZSkgeworCQljYXNlIFNBQTcxMzRfTVBFR19UU19QQVJBTExFTDoKKwkJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19TRVJJQUwwLCAweDQwKTsKKwkJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19QQVJBTExFTCwgMHhlYyk7CisJCQlicmVhazsKKwkJY2FzZSBTQUE3MTM0X01QRUdfVFNfU0VSSUFMOgorCQkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1NFUklBTDAsIDB4ZDgpOworCQkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1BBUkFMTEVMLCAweDZjKTsKKwkJCXNhYV93cml0ZWIoU0FBNzEzNF9UU19QQVJBTExFTF9TRVJJQUwsIDB4YmMpOworCQkJc2FhX3dyaXRlYihTQUE3MTM0X1RTX1NFUklBTDEsIDB4MDIpOworCQkJYnJlYWs7CisJCX0KKwogCQlkZXYtPnRzX3N0YXRlID0gU0FBNzEzNF9UU19TVEFSVEVEOwogCX0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LXZpZGVvLmMKaW5kZXggYTFmN2UzNS4uNDA0ZjcwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQtdmlkZW8uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC12aWRlby5jCkBAIC0zMCwxMSArMzAsNyBAQAogI2luY2x1ZGUgInNhYTcxMzQtcmVnLmgiCiAjaW5jbHVkZSAic2FhNzEzNC5oIgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0KLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLS8qIEluY2x1ZGUgVjRMMSBzcGVjaWZpYyBmdW5jdGlvbnMuIFNob3VsZCBiZSByZW1vdmVkIHNvb24gKi8KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2VuZGlmCisjaW5jbHVkZSA8bWVkaWEvcmRzLmg+CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC00NTIsNiArNDQ4LDcgQEAKIAkJLm5hbWUgICAgICAgICAgPSAieSBvZmZzZXQgb2RkIGZpZWxkIiwKIAkJLm1pbmltdW0gICAgICAgPSAwLAogCQkubWF4aW11bSAgICAgICA9IDEyOCwKKwkJLnN0ZXAgICAgICAgICAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IDAsCiAJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAl9LHsKQEAgLTQ1OSw2ICs0NTYsNyBAQAogCQkubmFtZSAgICAgICAgICA9ICJ5IG9mZnNldCBldmVuIGZpZWxkIiwKIAkJLm1pbmltdW0gICAgICAgPSAwLAogCQkubWF4aW11bSAgICAgICA9IDEyOCwKKwkJLnN0ZXAgICAgICAgICAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IDAsCiAJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAl9LHsKQEAgLTYyNywxMCArNjI1LDEwIEBACiAJc2FhNzEzNF9zZXRfZGVjb2RlcihkZXYpOwogCiAJaWYgKGNhcmRfaW4oZGV2LCBkZXYtPmN0bF9pbnB1dCkudHYpCi0JCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19TX1NURCwgJmRldi0+dHZub3JtLT5pZCk7CisJCXNhYV9jYWxsX2FsbChkZXYsIHR1bmVyLCBzX3N0ZCwgZGV2LT50dm5vcm0tPmlkKTsKIAkvKiBTZXQgdGhlIGNvcnJlY3Qgbm9ybSBmb3IgdGhlIHNhYTY3NTJocy4gVGhpcyBmdW5jdGlvbgogCSAgIGRvZXMgbm90aGluZyBpZiB0aGVyZSBpcyBubyBzYWE2NzUyaHMuICovCi0Jc2FhNzEzNF9pMmNfY2FsbF9zYWE2NzUyKGRldiwgVklESU9DX1NfU1RELCAmZGV2LT50dm5vcm0tPmlkKTsKKwlzYWFfY2FsbF9lbXByZXNzKGRldiwgdHVuZXIsIHNfc3RkLCBkZXYtPnR2bm9ybS0+aWQpOwogfQogCiBzdGF0aWMgdm9pZCBzZXRfaF9wcmVzY2FsZShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwgaW50IHRhc2ssIGludCBwcmVzY2FsZSkKQEAgLTEyNjYsOCArMTI2NCw3IEBACiAJCQllbHNlCiAJCQkJZGV2LT50ZGE5ODg3X2NvbmYgJj0gflREQTk4ODdfQVVUT01VVEU7CiAKLQkJCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFRVTkVSX1NFVF9DT05GSUcsCi0JCQkJCQkgJnRkYTk4ODdfY2ZnKTsKKwkJCXNhYV9jYWxsX2FsbChkZXYsIHR1bmVyLCBzX2NvbmZpZywgJnRkYTk4ODdfY2ZnKTsKIAkJfQogCQlicmVhazsKIAl9CkBAIC0xMzM0LDcgKzEzMzEsNyBAQAogCWVudW0gdjRsMl9idWZfdHlwZSB0eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOwogCWludCByYWRpbyA9IDA7CiAKLQlsb2NrX2tlcm5lbCgpOworCW11dGV4X2xvY2soJnNhYTcxMzRfZGV2bGlzdF9sb2NrKTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGRldiwgJnNhYTcxMzRfZGV2bGlzdCwgZGV2bGlzdCkgewogCQlpZiAoZGV2LT52aWRlb19kZXYgJiYgKGRldi0+dmlkZW9fZGV2LT5taW5vciA9PSBtaW5vcikpCiAJCQlnb3RvIGZvdW5kOwpAQCAtMTM0NywxOSArMTM0NCwyMCBAQAogCQkJZ290byBmb3VuZDsKIAkJfQogCX0KLQl1bmxvY2tfa2VybmVsKCk7CisJbXV0ZXhfdW5sb2NrKCZzYWE3MTM0X2Rldmxpc3RfbG9jayk7CiAJcmV0dXJuIC1FTk9ERVY7Ci0gZm91bmQ6CisKK2ZvdW5kOgorCW11dGV4X3VubG9jaygmc2FhNzEzNF9kZXZsaXN0X2xvY2spOwogCiAJZHByaW50aygib3BlbiBtaW5vcj0lZCByYWRpbz0lZCB0eXBlPSVzXG4iLG1pbm9yLHJhZGlvLAogCQl2NGwyX3R5cGVfbmFtZXNbdHlwZV0pOwogCiAJLyogYWxsb2NhdGUgKyBpbml0aWFsaXplIHBlciBmaWxlaGFuZGxlIGRhdGEgKi8KIAlmaCA9IGt6YWxsb2Moc2l6ZW9mKCpmaCksR0ZQX0tFUk5FTCk7Ci0JaWYgKE5VTEwgPT0gZmgpIHsKLQkJdW5sb2NrX2tlcm5lbCgpOworCWlmIChOVUxMID09IGZoKQogCQlyZXR1cm4gLUVOT01FTTsKLQl9CisKIAlmaWxlLT5wcml2YXRlX2RhdGEgPSBmaDsKIAlmaC0+ZGV2ICAgICAgPSBkZXY7CiAJZmgtPnJhZGlvICAgID0gcmFkaW87CkBAIC0xMzg3LDEyICsxMzg1LDExIEBACiAJaWYgKGZoLT5yYWRpbykgewogCQkvKiBzd2l0Y2ggdG8gcmFkaW8gbW9kZSAqLwogCQlzYWE3MTM0X3R2YXVkaW9fc2V0aW5wdXQoZGV2LCZjYXJkKGRldikucmFkaW8pOwotCQlzYWE3MTM0X2kyY19jYWxsX2NsaWVudHMoZGV2LEFVRENfU0VUX1JBRElPLCBOVUxMKTsKKwkJc2FhX2NhbGxfYWxsKGRldiwgdHVuZXIsIHNfcmFkaW8pOwogCX0gZWxzZSB7CiAJCS8qIHN3aXRjaCB0byB2aWRlby92YmkgbW9kZSAqLwogCQl2aWRlb19tdXgoZGV2LGRldi0+Y3RsX2lucHV0KTsKIAl9Ci0JdW5sb2NrX2tlcm5lbCgpOwogCXJldHVybiAwOwogfQogCkBAIC0xNDY2LDYgKzE0NjMsNyBAQAogewogCXN0cnVjdCBzYWE3MTM0X2ZoICAqZmggID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3QgcmRzX2NvbW1hbmQgY21kOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAkvKiB0dXJuIG9mZiBvdmVybGF5ICovCkBAIC0xNDk4LDcgKzE0OTYsOSBAQAogCXNhYV9hbmRvcmIoU0FBNzEzNF9PRk1UX0RBVEFfQSwgMHgxZiwgMCk7CiAJc2FhX2FuZG9yYihTQUE3MTM0X09GTVRfREFUQV9CLCAweDFmLCAwKTsKIAotCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFRVTkVSX1NFVF9TVEFOREJZLCBOVUxMKTsKKwlzYWFfY2FsbF9hbGwoZGV2LCBjb3JlLCBzX3N0YW5kYnksIDApOworCWlmIChmaC0+cmFkaW8pCisJCXNhYV9jYWxsX2FsbChkZXYsIGNvcmUsIGlvY3RsLCBSRFNfQ01EX0NMT1NFLCAmY21kKTsKIAogCS8qIGZyZWUgc3R1ZmYgKi8KIAl2aWRlb2J1Zl9tbWFwX2ZyZWUoJmZoLT5jYXApOwpAQCAtMTUxOSw2ICsxNTE5LDM3IEBACiAJcmV0dXJuIHZpZGVvYnVmX21tYXBfbWFwcGVyKHNhYTcxMzRfcXVldWUoZmgpLCB2bWEpOwogfQogCitzdGF0aWMgc3NpemVfdCByYWRpb19yZWFkKHN0cnVjdCBmaWxlICpmaWxlLCBjaGFyIF9fdXNlciAqZGF0YSwKKwkJCSBzaXplX3QgY291bnQsIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3Qgc2FhNzEzNF9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYgPSBmaC0+ZGV2OworCXN0cnVjdCByZHNfY29tbWFuZCBjbWQ7CisKKwljbWQuYmxvY2tfY291bnQgPSBjb3VudC8zOworCWNtZC5idWZmZXIgPSBkYXRhOworCWNtZC5pbnN0YW5jZSA9IGZpbGU7CisJY21kLnJlc3VsdCA9IC1FTk9ERVY7CisKKwlzYWFfY2FsbF9hbGwoZGV2LCBjb3JlLCBpb2N0bCwgUkRTX0NNRF9SRUFELCAmY21kKTsKKworCXJldHVybiBjbWQucmVzdWx0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHJhZGlvX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHBvbGxfdGFibGUgKndhaXQpCit7CisJc3RydWN0IHNhYTcxMzRfZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCBzYWE3MTM0X2RldiAqZGV2ID0gZmgtPmRldjsKKwlzdHJ1Y3QgcmRzX2NvbW1hbmQgY21kOworCisJY21kLmluc3RhbmNlID0gZmlsZTsKKwljbWQuZXZlbnRfbGlzdCA9IHdhaXQ7CisJY21kLnJlc3VsdCA9IC1FTk9ERVY7CisJc2FhX2NhbGxfYWxsKGRldiwgY29yZSwgaW9jdGwsIFJEU19DTURfUE9MTCwgJmNtZCk7CisKKwlyZXR1cm4gY21kLnJlc3VsdDsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBpbnQgc2FhNzEzNF90cnlfZ2V0X3NldF9mbXRfdmJpX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKQEAgLTIwNDEsNyArMjA3Miw3IEBACiAJbXV0ZXhfbG9jaygmZGV2LT5sb2NrKTsKIAlkZXYtPmN0bF9mcmVxID0gZi0+ZnJlcXVlbmN5OwogCi0Jc2FhNzEzNF9pMmNfY2FsbF9jbGllbnRzKGRldiwgVklESU9DX1NfRlJFUVVFTkNZLCBmKTsKKwlzYWFfY2FsbF9hbGwoZGV2LCB0dW5lciwgc19mcmVxdWVuY3ksIGYpOwogCiAJc2FhNzEzNF90dmF1ZGlvX2RvX3NjYW4oZGV2KTsKIAltdXRleF91bmxvY2soJmRldi0+bG9jayk7CkBAIC0yMjk5LDcgKzIzMzAsNyBAQAogCXN0cmNweSh0LT5uYW1lLCAiUmFkaW8iKTsKIAl0LT50eXBlID0gVjRMMl9UVU5FUl9SQURJTzsKIAotCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19HX1RVTkVSLCB0KTsKKwlzYWFfY2FsbF9hbGwoZGV2LCB0dW5lciwgZ190dW5lciwgdCk7CiAJaWYgKGRldi0+aW5wdXQtPmFtdXggPT0gVFYpIHsKIAkJdC0+c2lnbmFsID0gMHhmODAwIC0gKChzYWFfcmVhZGIoMHg1ODEpICYgMHgxZikgPDwgMTEpOwogCQl0LT5yeHN1YmNoYW5zID0gKHNhYV9yZWFkYigweDUyOSkgJiAweDA4KSA/CkBAIC0yMzE2LDcgKzIzNDcsNyBAQAogCWlmICgwICE9IHQtPmluZGV4KQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCXNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhkZXYsIFZJRElPQ19TX1RVTkVSLCB0KTsKKwlzYWFfY2FsbF9hbGwoZGV2LCB0dW5lciwgc190dW5lciwgdCk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI0NDMsOCArMjQ3NCwxMCBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyByYWRpb19mb3BzID0gewogCS5vd25lcgkgID0gVEhJU19NT0RVTEUsCiAJLm9wZW4JICA9IHZpZGVvX29wZW4sCisJLnJlYWQgICAgID0gcmFkaW9fcmVhZCwKIAkucmVsZWFzZSAgPSB2aWRlb19yZWxlYXNlLAogCS5pb2N0bAkgID0gdmlkZW9faW9jdGwyLAorCS5wb2xsICAgICA9IHJhZGlvX3BvbGwsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzIHJhZGlvX2lvY3RsX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxMzQvc2FhNzEzNC5oCmluZGV4IDE0ZWUyNjUuLmEyZGQzMjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzEzNC9zYWE3MTM0LmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTM0L3NhYTcxMzQuaApAQCAtMzUsNiArMzUsNyBAQAogCiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS90dW5lci5oPgogI2luY2x1ZGUgPG1lZGlhL2lyLWNvbW1vbi5oPgogI2luY2x1ZGUgPG1lZGlhL2lyLWtiZC1pMmMuaD4KQEAgLTI3Nyw2ICsyNzgsOCBAQAogI2RlZmluZSBTQUE3MTM0X0JPQVJEX0FTVVNUZUtfVElHRVIgICAgICAgICAxNTIKICNkZWZpbmUgU0FBNzEzNF9CT0FSRF9LV09STERfUExVU19UVl9BTkFMT0cgMTUzCiAjZGVmaW5lIFNBQTcxMzRfQk9BUkRfQVZFUk1FRElBX0dPXzAwN19GTV9QTFVTIDE1NAorI2RlZmluZSBTQUE3MTM0X0JPQVJEX0hBVVBQQVVHRV9IVlIxMTIwICAgICAxNTUKKyNkZWZpbmUgU0FBNzEzNF9CT0FSRF9IQVVQUEFVR0VfSFZSMTExMFIzICAgMTU2CiAKICNkZWZpbmUgU0FBNzEzNF9NQVhCT0FSRFMgMzIKICNkZWZpbmUgU0FBNzEzNF9JTlBVVF9NQVggOApAQCAtMzA5LDYgKzMxMiwxMSBAQAogCVNBQTcxMzRfTVBFR19EVkIsCiB9OwogCitlbnVtIHNhYTcxMzRfbXBlZ190c190eXBlIHsKKwlTQUE3MTM0X01QRUdfVFNfUEFSQUxMRUwgPSAwLAorCVNBQTcxMzRfTVBFR19UU19TRVJJQUwsCit9OworCiBzdHJ1Y3Qgc2FhNzEzNF9ib2FyZCB7CiAJY2hhciAgICAgICAgICAgICAgICAgICAgKm5hbWU7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgYXVkaW9fY2xvY2s7CkBAIC0zMjQsNiArMzMyLDggQEAKIAl1bnNpZ25lZCBpbnQJCXJhZGlvX3R5cGU7CiAJdW5zaWduZWQgY2hhcgkJdHVuZXJfYWRkcjsKIAl1bnNpZ25lZCBjaGFyCQlyYWRpb19hZGRyOworCXVuc2lnbmVkIGNoYXIJCWVtcHJlc3NfYWRkcjsKKwl1bnNpZ25lZCBjaGFyCQlyZHNfYWRkcjsKIAogCXVuc2lnbmVkIGludCAgICAgICAgICAgIHRkYTk4ODdfY29uZjsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICB0dW5lcl9jb25maWc7CkBAIC0zMzEsNiArMzQxLDcgQEAKIAkvKiBwZXJpcGhlcmFsIEkvTyAqLwogCWVudW0gc2FhNzEzNF92aWRlb19vdXQgIHZpZGVvX291dDsKIAllbnVtIHNhYTcxMzRfbXBlZ190eXBlICBtcGVnOworCWVudW0gc2FhNzEzNF9tcGVnX3RzX3R5cGUgdHNfdHlwZTsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICB2aWRfcG9ydF9vcHRzOwogfTsKIApAQCAtNDQ1LDcgKzQ1Niw2IEBACiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgYnVmc2l6ZTsKIAlzdHJ1Y3Qgc2FhNzEzNF9wZ3RhYmxlICAgICBwdDsKIAlzdHJ1Y3QgdmlkZW9idWZfZG1hYnVmICAgICBkbWE7Ci0Jd2FpdF9xdWV1ZV9oZWFkX3QgICAgICAgICAgd3E7CiAJdW5zaWduZWQgaW50ICAgICAgICAgICAgICAgZG1hX2JsazsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICByZWFkX29mZnNldDsKIAl1bnNpZ25lZCBpbnQgICAgICAgICAgICAgICByZWFkX2NvdW50OwpAQCAtNDgyLDYgKzQ5Miw3IEBACiAJc3RydWN0IG11dGV4ICAgICAgICAgICAgICAgbG9jazsKIAlzcGlubG9ja190ICAgICAgICAgICAgICAgICBzbG9jazsKIAlzdHJ1Y3QgdjRsMl9wcmlvX3N0YXRlICAgICBwcmlvOworCXN0cnVjdCB2NGwyX2RldmljZSAgICAgICAgIHY0bDJfZGV2OwogCS8qIHdvcmtzdHJ1Y3QgZm9yIGxvYWRpbmcgbW9kdWxlcyAqLwogCXN0cnVjdCB3b3JrX3N0cnVjdCByZXF1ZXN0X21vZHVsZV93azsKIApAQCAtNTcyLDcgKzU4Myw2IEBACiAJZW51bSBzYWE3MTM0X3RzX3N0YXR1cyAJICAgdHNfc3RhdGU7CiAJdW5zaWduZWQgaW50IAkJICAgYnVmZl9jbnQ7CiAJc3RydWN0IHNhYTcxMzRfbXBlZ19vcHMgICAgKm1vcHM7Ci0Jc3RydWN0IGkyY19jbGllbnQgCSAgICptcGVnX2kyY19jbGllbnQ7CiAKIAkvKiBTQUE3MTM0X01QRUdfRU1QUkVTUyBvbmx5ICovCiAJc3RydWN0IHZpZGVvX2RldmljZSAgICAgICAgKmVtcHJlc3NfZGV2OwpAQCAtNTg4LDYgKzU5OCw3IEBACiAJaW50ICgqb3JpZ2luYWxfc2V0X3ZvbHRhZ2UpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBmZV9zZWNfdm9sdGFnZV90IHZvbHRhZ2UpOwogCWludCAoKm9yaWdpbmFsX3NldF9oaWdoX3ZvbHRhZ2UpKHN0cnVjdCBkdmJfZnJvbnRlbmQgKmZlLCBsb25nIGFyZyk7CiAjZW5kaWYKKwl2b2lkICgqZ2F0ZV9jdHJsKShzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwgaW50IG9wZW4pOwogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KQEAgLTYxNiwxMCArNjI3LDMxIEBACiAJCVY0TDJfU1REX05UU0MgICB8IFY0TDJfU1REX1BBTF9NIHwgXAogCQlWNEwyX1NURF9QQUxfNjApCiAKKyNkZWZpbmUgR1JQX0VNUFJFU1MgKDEpCisjZGVmaW5lIHNhYV9jYWxsX2FsbChkZXYsIG8sIGYsIGFyZ3MuLi4pIGRvIHsJCQkJXAorCWlmIChkZXYtPmdhdGVfY3RybCkJCQkJCQlcCisJCWRldi0+Z2F0ZV9jdHJsKGRldiwgMSk7CQkJCQlcCisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJihkZXYpLT52NGwyX2RldiwgMCwgbywgZiAsICMjYXJncyk7CVwKKwlpZiAoZGV2LT5nYXRlX2N0cmwpCQkJCQkJXAorCQlkZXYtPmdhdGVfY3RybChkZXYsIDApOwkJCQkJXAorfSB3aGlsZSAoMCkKKworI2RlZmluZSBzYWFfY2FsbF9lbXByZXNzKGRldiwgbywgZiwgYXJncy4uLikgKHsJCQkJXAorCWxvbmcgX3JjOwkJCQkJCQlcCisJaWYgKGRldi0+Z2F0ZV9jdHJsKQkJCQkJCVwKKwkJZGV2LT5nYXRlX2N0cmwoZGV2LCAxKTsJCQkJCVwKKwlfcmMgPSB2NGwyX2RldmljZV9jYWxsX3VudGlsX2VycigmKGRldiktPnY0bDJfZGV2LAkJXAorCQkJCQkgR1JQX0VNUFJFU1MsIG8sIGYgLCAjI2FyZ3MpOwlcCisJaWYgKGRldi0+Z2F0ZV9jdHJsKQkJCQkJCVwKKwkJZGV2LT5nYXRlX2N0cmwoZGV2LCAwKTsJCQkJCVwKKwlfcmM7CQkJCQkJCQlcCit9KQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogc2FhNzEzNC1jb3JlLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIAogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgIHNhYTcxMzRfZGV2bGlzdDsKK2V4dGVybiBzdHJ1Y3QgbXV0ZXggc2FhNzEzNF9kZXZsaXN0X2xvY2s7CiBleHRlcm4gaW50IHNhYTcxMzRfbm9fb3ZlcmxheTsKIAogdm9pZCBzYWE3MTM0X3RyYWNrX2dwaW8oc3RydWN0IHNhYTcxMzRfZGV2ICpkZXYsIGNoYXIgKm1zZyk7CkBAIC02NjgsMTAgKzcwMCw2IEBACiAKIGludCBzYWE3MTM0X2kyY19yZWdpc3RlcihzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldik7CiBpbnQgc2FhNzEzNF9pMmNfdW5yZWdpc3RlcihzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldik7Ci12b2lkIHNhYTcxMzRfaTJjX2NhbGxfY2xpZW50cyhzdHJ1Y3Qgc2FhNzEzNF9kZXYgKmRldiwKLQkJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZyk7Ci1pbnQgc2FhNzEzNF9pMmNfY2FsbF9zYWE2NzUyKHN0cnVjdCBzYWE3MTM0X2RldiAqZGV2LAotCQkJICAgICAgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTQ2LmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNDYuaAppbmRleCAyODMwYjVlLi45ZmFkYjMzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNDYuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxNDYuaApAQCAtMjUsOCArMjUsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLQogI2lmbmRlZiBPX05PTkNBUAogI2RlZmluZSBPX05PTkNBUAlPX1RSVU5DCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE3eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTd4LmMKaW5kZXggODhjNWU5NC4uMjViZjIzMCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTd4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTd4LmMKQEAgLTkzMSw3ICs5MzEsNyBAQAogCQlicmVhazsKIAogCWNhc2UgVjRMMl9DSURfSFVFOgotCQlpZiAoY3RybC0+dmFsdWUgPCAtMTI3IHx8IGN0cmwtPnZhbHVlID4gMTI3KSB7CisJCWlmIChjdHJsLT52YWx1ZSA8IC0xMjggfHwgY3RybC0+dmFsdWUgPiAxMjcpIHsKIAkJCXY0bDJfZXJyKHNkLCAiaW52YWxpZCBodWUgc2V0dGluZyAlZFxuIiwgY3RybC0+dmFsdWUpOwogCQkJcmV0dXJuIC1FUkFOR0U7CiAJCX0KQEAgLTEzODAsMTEgKzEzODAsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHNhYTcxN3hfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHNhYTcxN3hfY29yZV9vcHMgPSB7CkBAIC0xNTI4LDEwICsxNTIzLDcgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gInNhYTcxN3giLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9TQUE3MTdYLAotCS5jb21tYW5kID0gc2FhNzE3eF9jb21tYW5kLAogCS5wcm9iZSA9IHNhYTcxN3hfcHJvYmUsCiAJLnJlbW92ZSA9IHNhYTcxN3hfcmVtb3ZlLAotCS5sZWdhY3lfY2xhc3MgPSBJMkNfQ0xBU1NfVFZfQU5BTE9HIHwgSTJDX0NMQVNTX1RWX0RJR0lUQUwsCiAJLmlkX3RhYmxlID0gc2FhNzE3eF9pZCwKIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxODUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE4NS5jCmluZGV4IDZkZWJiNjUuLjc1NzQ3YjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE4NS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE4NS5jCkBAIC0zMCw1MiArMzAsNTggQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1pZC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZW5jb2Rlci5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAKIE1PRFVMRV9ERVNDUklQVElPTigiUGhpbGlwcyBTQUE3MTg1IHZpZGVvIGVuY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJEYXZlIFBlcmtzIik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLQogc3RhdGljIGludCBkZWJ1ZzsKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCisKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0cnVjdCBzYWE3MTg1IHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CiAJdW5zaWduZWQgY2hhciByZWdbMTI4XTsKIAotCWludCBub3JtOwotCWludCBlbmFibGU7Ci0JaW50IGJyaWdodDsKLQlpbnQgY29udHJhc3Q7Ci0JaW50IGh1ZTsKLQlpbnQgc2F0OworCXY0bDJfc3RkX2lkIG5vcm07CiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCBzYWE3MTg1ICp0b19zYWE3MTg1KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZihzZCwgc3RydWN0IHNhYTcxODUsIHNkKTsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAotc3RhdGljIGlubGluZSBpbnQgc2FhNzE4NV9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCitzdGF0aWMgaW5saW5lIGludCBzYWE3MTg1X3JlYWQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKIAlyZXR1cm4gaTJjX3NtYnVzX3JlYWRfYnl0ZShjbGllbnQpOwogfQogCi1zdGF0aWMgaW50IHNhYTcxODVfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKK3N0YXRpYyBpbnQgc2FhNzE4NV93cml0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsIHU4IHZhbHVlKQogewotCXN0cnVjdCBzYWE3MTg1ICplbmNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCBzYWE3MTg1ICplbmNvZGVyID0gdG9fc2FhNzE4NShzZCk7CiAKLQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICIlMDJ4IHNldCB0byAlMDJ4XG4iLCByZWcsIHZhbHVlKTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICIlMDJ4IHNldCB0byAlMDJ4XG4iLCByZWcsIHZhbHVlKTsKIAllbmNvZGVyLT5yZWdbcmVnXSA9IHZhbHVlOwogCXJldHVybiBpMmNfc21idXNfd3JpdGVfYnl0ZV9kYXRhKGNsaWVudCwgcmVnLCB2YWx1ZSk7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNzE4NV93cml0ZV9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorc3RhdGljIGludCBzYWE3MTg1X3dyaXRlX2Jsb2NrKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCiAJCWNvbnN0IHU4ICpkYXRhLCB1bnNpZ25lZCBpbnQgbGVuKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwlzdHJ1Y3Qgc2FhNzE4NSAqZW5jb2RlciA9IHRvX3NhYTcxODUoc2QpOwogCWludCByZXQgPSAtMTsKIAl1OCByZWc7CiAKQEAgLTgzLDcgKzg5LDYgQEAKIAkgKiB0aGUgYWRhcHRlciB1bmRlcnN0YW5kcyByYXcgSTJDICovCiAJaWYgKGkyY19jaGVja19mdW5jdGlvbmFsaXR5KGNsaWVudC0+YWRhcHRlciwgSTJDX0ZVTkNfSTJDKSkgewogCQkvKiBkbyByYXcgSTJDLCBub3Qgc21idXMgY29tcGF0aWJsZSAqLwotCQlzdHJ1Y3Qgc2FhNzE4NSAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCQl1OCBibG9ja19kYXRhWzMyXTsKIAkJaW50IGJsb2NrX2xlbjsKIApAQCAtMTA0LDcgKzEwOSw3IEBACiAJCS8qIGRvIHNvbWUgc2xvdyBJMkMgZW11bGF0aW9uIGtpbmQgb2YgdGhpbmcgKi8KIAkJd2hpbGUgKGxlbiA+PSAyKSB7CiAJCQlyZWcgPSAqZGF0YSsrOwotCQkJcmV0ID0gc2FhNzE4NV93cml0ZShjbGllbnQsIHJlZywgKmRhdGErKyk7CisJCQlyZXQgPSBzYWE3MTg1X3dyaXRlKHNkLCByZWcsICpkYXRhKyspOwogCQkJaWYgKHJldCA8IDApCiAJCQkJYnJlYWs7CiAJCQlsZW4gLT0gMjsKQEAgLTIxMywxMzMgKzIxOCwxMDYgQEAKIAkweDY2LCAweDIxLAkJLyogRlNDMyAqLwogfTsKIAotc3RhdGljIGludCBzYWE3MTg1X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCisKK3N0YXRpYyBpbnQgc2FhNzE4NV9pbml0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiB2YWwpCiB7Ci0Jc3RydWN0IHNhYTcxODUgKmVuY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc2FhNzE4NSAqZW5jb2RlciA9IHRvX3NhYTcxODUoc2QpOwogCi0Jc3dpdGNoIChjbWQpIHsKKwlzYWE3MTg1X3dyaXRlX2Jsb2NrKHNkLCBpbml0X2NvbW1vbiwgc2l6ZW9mKGluaXRfY29tbW9uKSk7CisJaWYgKGVuY29kZXItPm5vcm0gJiBWNEwyX1NURF9OVFNDKQorCQlzYWE3MTg1X3dyaXRlX2Jsb2NrKHNkLCBpbml0X250c2MsIHNpemVvZihpbml0X250c2MpKTsKKwllbHNlCisJCXNhYTcxODVfd3JpdGVfYmxvY2soc2QsIGluaXRfcGFsLCBzaXplb2YoaW5pdF9wYWwpKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzYWE3MTg1X3Nfc3RkX291dHB1dChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCBzdGQpCit7CisJc3RydWN0IHNhYTcxODUgKmVuY29kZXIgPSB0b19zYWE3MTg1KHNkKTsKKworCWlmIChzdGQgJiBWNEwyX1NURF9OVFNDKQorCQlzYWE3MTg1X3dyaXRlX2Jsb2NrKHNkLCBpbml0X250c2MsIHNpemVvZihpbml0X250c2MpKTsKKwllbHNlIGlmIChzdGQgJiBWNEwyX1NURF9QQUwpCisJCXNhYTcxODVfd3JpdGVfYmxvY2soc2QsIGluaXRfcGFsLCBzaXplb2YoaW5pdF9wYWwpKTsKKwllbHNlCisJCXJldHVybiAtRUlOVkFMOworCWVuY29kZXItPm5vcm0gPSBzdGQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgc2FhNzE4NV9zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCit7CisJc3RydWN0IHNhYTcxODUgKmVuY29kZXIgPSB0b19zYWE3MTg1KHNkKTsKKworCS8qIFJKOiByb3V0ZS0+aW5wdXQgPSAwOiBpbnB1dCBpcyBmcm9tIFNBNzExMQorCSByb3V0ZS0+aW5wdXQgPSAxOiBpbnB1dCBpcyBmcm9tIFpSMzYwNjAgKi8KKworCXN3aXRjaCAocm91dGUtPmlucHV0KSB7CiAJY2FzZSAwOgotCQlzYWE3MTg1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9jb21tb24sCi0JCQkJICAgIHNpemVvZihpbml0X2NvbW1vbikpOwotCQlzd2l0Y2ggKGVuY29kZXItPm5vcm0pIHsKLQotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCXNhYTcxODVfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X250c2MsCi0JCQkJCSAgICBzaXplb2YoaW5pdF9udHNjKSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJc2FhNzE4NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfcGFsLAotCQkJCQkgICAgc2l6ZW9mKGluaXRfcGFsKSk7Ci0JCQlicmVhazsKLQkJfQorCQkvKiB0dXJuIG9mZiBjb2xvcmJhciAqLworCQlzYWE3MTg1X3dyaXRlKHNkLCAweDNhLCAweDBmKTsKKwkJLyogU3dpdGNoIFJUQ0UgdG8gMSAqLworCQlzYWE3MTg1X3dyaXRlKHNkLCAweDYxLCAoZW5jb2Rlci0+cmVnWzB4NjFdICYgMHhmNykgfCAweDA4KTsKKwkJc2FhNzE4NV93cml0ZShzZCwgMHg2ZSwgMHgwMSk7CiAJCWJyZWFrOwogCi0JY2FzZSBFTkNPREVSX0dFVF9DQVBBQklMSVRJRVM6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fZW5jb2Rlcl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7Ci0KLQkJY2FwLT5mbGFncyA9Ci0JCSAgICBWSURFT19FTkNPREVSX1BBTCB8IFZJREVPX0VOQ09ERVJfTlRTQyB8Ci0JCSAgICBWSURFT19FTkNPREVSX1NFQ0FNIHwgVklERU9fRU5DT0RFUl9DQ0lSOwotCQljYXAtPmlucHV0cyA9IDE7Ci0JCWNhcC0+b3V0cHV0cyA9IDE7CisJY2FzZSAxOgorCQkvKiB0dXJuIG9mZiBjb2xvcmJhciAqLworCQlzYWE3MTg1X3dyaXRlKHNkLCAweDNhLCAweDBmKTsKKwkJLyogU3dpdGNoIFJUQ0UgdG8gMCAqLworCQlzYWE3MTg1X3dyaXRlKHNkLCAweDYxLCAoZW5jb2Rlci0+cmVnWzB4NjFdICYgMHhmNykgfCAweDAwKTsKKwkJLyogU1c6IGEgc2xpZ2h0IHN5bmMgcHJvYmxlbS4uLiAqLworCQlzYWE3MTg1X3dyaXRlKHNkLCAweDZlLCAweDAwKTsKIAkJYnJlYWs7Ci0JfQogCi0JY2FzZSBFTkNPREVSX1NFVF9OT1JNOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCS8vc2FhNzE4NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfY29tbW9uLCBzaXplb2YoaW5pdF9jb21tb24pKTsKLQotCQlzd2l0Y2ggKCppYXJnKSB7Ci0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJc2FhNzE4NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfbnRzYywKLQkJCQkJICAgIHNpemVvZihpbml0X250c2MpKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQlzYWE3MTg1X3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9wYWwsCi0JCQkJCSAgICBzaXplb2YoaW5pdF9wYWwpKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9TRUNBTToKLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWVuY29kZXItPm5vcm0gPSAqaWFyZzsKKwljYXNlIDI6CisJCS8qIHR1cm4gb24gY29sb3JiYXIgKi8KKwkJc2FhNzE4NV93cml0ZShzZCwgMHgzYSwgMHg4Zik7CisJCS8qIFN3aXRjaCBSVENFIHRvIDAgKi8KKwkJc2FhNzE4NV93cml0ZShzZCwgMHg2MSwgKGVuY29kZXItPnJlZ1sweDYxXSAmIDB4ZjcpIHwgMHgwOCk7CisJCS8qIFNXOiBhIHNsaWdodCBzeW5jIHByb2JsZW0uLi4gKi8KKwkJc2FhNzE4NV93cml0ZShzZCwgMHg2ZSwgMHgwMSk7CiAJCWJyZWFrOwotCX0KLQotCWNhc2UgRU5DT0RFUl9TRVRfSU5QVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJLyogUko6ICppYXJnID0gMDogaW5wdXQgaXMgZnJvbSBTQTcxMTEKLQkJICppYXJnID0gMTogaW5wdXQgaXMgZnJvbSBaUjM2MDYwICovCi0KLQkJc3dpdGNoICgqaWFyZykgewotCQljYXNlIDA6Ci0JCQkvKiBTd2l0Y2ggUlRDRSB0byAxICovCi0JCQlzYWE3MTg1X3dyaXRlKGNsaWVudCwgMHg2MSwKLQkJCQkgICAgICAoZW5jb2Rlci0+cmVnWzB4NjFdICYgMHhmNykgfCAweDA4KTsKLQkJCXNhYTcxODVfd3JpdGUoY2xpZW50LCAweDZlLCAweDAxKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgMToKLQkJCS8qIFN3aXRjaCBSVENFIHRvIDAgKi8KLQkJCXNhYTcxODVfd3JpdGUoY2xpZW50LCAweDYxLAotCQkJCSAgICAgIChlbmNvZGVyLT5yZWdbMHg2MV0gJiAweGY3KSB8IDB4MDApOwotCQkJLyogU1c6IGEgc2xpZ2h0IHN5bmMgcHJvYmxlbS4uLiAqLwotCQkJc2FhNzE4NV93cml0ZShjbGllbnQsIDB4NmUsIDB4MDApOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgRU5DT0RFUl9TRVRfT1VUUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCS8qIG5vdCBtdWNoIGNob2ljZSBvZiBvdXRwdXRzICovCi0JCWlmICgqaWFyZyAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgRU5DT0RFUl9FTkFCTEVfT1VUUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCWVuY29kZXItPmVuYWJsZSA9ICEhKmlhcmc7Ci0JCXNhYTcxODVfd3JpdGUoY2xpZW50LCAweDYxLAotCQkJICAgICAgKGVuY29kZXItPnJlZ1sweDYxXSAmIDB4YmYpIHwKLQkJCSAgICAgIChlbmNvZGVyLT5lbmFibGUgPyAweDAwIDogMHg0MCkpOwotCQlicmVhazsKLQl9CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCBzYWE3MTg1X2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX1NBQTcxODUsIDApOworfQorCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDg4ID4+IDEsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHNhYTcxODVfY29yZV9vcHMgPSB7CisJLmdfY2hpcF9pZGVudCA9IHNhYTcxODVfZ19jaGlwX2lkZW50LAorCS5pbml0ID0gc2FhNzE4NV9pbml0LAorfTsKIAotSTJDX0NMSUVOVF9JTlNNT0Q7CitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyBzYWE3MTg1X3ZpZGVvX29wcyA9IHsKKwkuc19zdGRfb3V0cHV0ID0gc2FhNzE4NV9zX3N0ZF9vdXRwdXQsCisJLnNfcm91dGluZyA9IHNhYTcxODVfc19yb3V0aW5nLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgc2FhNzE4NV9vcHMgPSB7CisJLmNvcmUgPSAmc2FhNzE4NV9jb3JlX29wcywKKwkudmlkZW8gPSAmc2FhNzE4NV92aWRlb19vcHMsCit9OworCisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBpbnQgc2FhNzE4NV9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAogCQkJY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCWludCBpOwogCXN0cnVjdCBzYWE3MTg1ICplbmNvZGVyOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CiAKIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCiAJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCkBAIC0zNTEsMjggKzMyOSwyOSBAQAogCWVuY29kZXIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgc2FhNzE4NSksIEdGUF9LRVJORUwpOwogCWlmIChlbmNvZGVyID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwotCWVuY29kZXItPm5vcm0gPSBWSURFT19NT0RFX05UU0M7Ci0JZW5jb2Rlci0+ZW5hYmxlID0gMTsKLQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBlbmNvZGVyKTsKKwllbmNvZGVyLT5ub3JtID0gVjRMMl9TVERfTlRTQzsKKwlzZCA9ICZlbmNvZGVyLT5zZDsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmc2FhNzE4NV9vcHMpOwogCi0JaSA9IHNhYTcxODVfd3JpdGVfYmxvY2soY2xpZW50LCBpbml0X2NvbW1vbiwgc2l6ZW9mKGluaXRfY29tbW9uKSk7CisJaSA9IHNhYTcxODVfd3JpdGVfYmxvY2soc2QsIGluaXRfY29tbW9uLCBzaXplb2YoaW5pdF9jb21tb24pKTsKIAlpZiAoaSA+PSAwKQotCQlpID0gc2FhNzE4NV93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfbnRzYywgc2l6ZW9mKGluaXRfbnRzYykpOworCQlpID0gc2FhNzE4NV93cml0ZV9ibG9jayhzZCwgaW5pdF9udHNjLCBzaXplb2YoaW5pdF9udHNjKSk7CiAJaWYgKGkgPCAwKQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbml0IGVycm9yICVkXG4iLCBpKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiaW5pdCBlcnJvciAlZFxuIiwgaSk7CiAJZWxzZQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJyZXZpc2lvbiAweCV4XG4iLAotCQkJCXNhYTcxODVfcmVhZChjbGllbnQpID4+IDUpOworCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJyZXZpc2lvbiAweCV4XG4iLAorCQkJCXNhYTcxODVfcmVhZChzZCkgPj4gNSk7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgc2FhNzE4NV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKIHsKLQlzdHJ1Y3Qgc2FhNzE4NSAqZW5jb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOworCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKKwlzdHJ1Y3Qgc2FhNzE4NSAqZW5jb2RlciA9IHRvX3NhYTcxODUoc2QpOwogCi0Jc2FhNzE4NV93cml0ZShjbGllbnQsIDB4NjEsIChlbmNvZGVyLT5yZWdbMHg2MV0pIHwgMHg0MCk7CS8qIFNXOiBvdXRwdXQgb2ZmIGlzIGFjdGl2ZSAqLwotCS8vc2FhNzE4NV93cml0ZShjbGllbnQsIDB4M2EsIChlbmNvZGVyLT5yZWdbMHgzYV0pIHwgMHg4MCk7IC8qIFNXOiBjb2xvciBiYXIgKi8KLQorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKKwkvKiBTVzogb3V0cHV0IG9mZiBpcyBhY3RpdmUgKi8KKwlzYWE3MTg1X3dyaXRlKHNkLCAweDYxLCAoZW5jb2Rlci0+cmVnWzB4NjFdKSB8IDB4NDApOwogCWtmcmVlKGVuY29kZXIpOwogCXJldHVybiAwOwogfQpAQCAtMzg3LDggKzM2Niw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJzYWE3MTg1IiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfU0FBNzE4NUIsCi0JLmNvbW1hbmQgPSBzYWE3MTg1X2NvbW1hbmQsCiAJLnByb2JlID0gc2FhNzE4NV9wcm9iZSwKIAkucmVtb3ZlID0gc2FhNzE4NV9yZW1vdmUsCiAJLmlkX3RhYmxlID0gc2FhNzE4NV9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2FhNzE5MS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTkxLmMKaW5kZXggYjQwMThjYy4uM2Y1MjNhZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTkxLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTkxLmMKQEAgLTE5LDkgKzE5LDExIEBACiAjaW5jbHVkZSA8bGludXgvbW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbGFiLmg+CiAKLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCiAjaW5jbHVkZSAic2FhNzE5MS5oIgogCkBAIC0zMiw2ICszNCw3IEBACiBNT0RVTEVfQVVUSE9SKCJNaWthZWwgTm91c2lhaW5lbiA8dG1ub3VzaWFAY2MuaHV0LmZpPiIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCisKIC8vICNkZWZpbmUgU0FBNzE5MV9ERUJVRwogCiAjaWZkZWYgU0FBNzE5MV9ERUJVRwpAQCAtNDQsMTcgKzQ3LDIwIEBACiAjZGVmaW5lIFNBQTcxOTFfU1lOQ19ERUxBWQkxMDAJLyogbWlsbGlzZWNvbmRzICovCiAKIHN0cnVjdCBzYWE3MTkxIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OworCXN0cnVjdCB2NGwyX3N1YmRldiBzZDsKIAogCS8qIHRoZSByZWdpc3RlciB2YWx1ZXMgYXJlIHN0b3JlZCBoZXJlIGFzIHRoZSBhY3R1YWwKIAkgKiBJMkMtcmVnaXN0ZXJzIGFyZSB3cml0ZS1vbmx5ICovCiAJdTggcmVnWzI1XTsKIAogCWludCBpbnB1dDsKLQlpbnQgbm9ybTsKKwl2NGwyX3N0ZF9pZCBub3JtOwogfTsKIAotc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGkyY19kcml2ZXJfc2FhNzE5MTsKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHNhYTcxOTEgKnRvX3NhYTcxOTEoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKK3sKKwlyZXR1cm4gY29udGFpbmVyX29mKHNkLCBzdHJ1Y3Qgc2FhNzE5MSwgc2QpOworfQogCiBzdGF0aWMgY29uc3QgdTggaW5pdHNlcVtdID0gewogCTAsCS8qIFN1YmFkZHJlc3MgKi8KQEAgLTEwMCwxNSArMTA2LDE0IEBACiAKIC8qIFNBQTcxOTEgcmVnaXN0ZXIgaGFuZGxpbmcgKi8KIAotc3RhdGljIHU4IHNhYTcxOTFfcmVhZF9yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSAgIHU4IHJlZykKK3N0YXRpYyB1OCBzYWE3MTkxX3JlYWRfcmVnKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4IHJlZykKIHsKLQlyZXR1cm4gKChzdHJ1Y3Qgc2FhNzE5MSAqKWkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKS0+cmVnW3JlZ107CisJcmV0dXJuIHRvX3NhYTcxOTEoc2QpLT5yZWdbcmVnXTsKIH0KIAotc3RhdGljIGludCBzYWE3MTkxX3JlYWRfc3RhdHVzKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCi0JCQkgICAgICAgdTggKnZhbHVlKQorc3RhdGljIGludCBzYWE3MTkxX3JlYWRfc3RhdHVzKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHU4ICp2YWx1ZSkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAJaW50IHJldDsKIAogCXJldCA9IGkyY19tYXN0ZXJfcmVjdihjbGllbnQsIHZhbHVlLCAxKTsKQEAgLTEyMSwyMSArMTI2LDIzIEBACiB9CiAKIAotc3RhdGljIGludCBzYWE3MTkxX3dyaXRlX3JlZyhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCByZWcsCi0JCQkgICAgIHU4IHZhbHVlKQorc3RhdGljIGludCBzYWE3MTkxX3dyaXRlX3JlZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcsIHU4IHZhbHVlKQogewotCSgoc3RydWN0IHNhYTcxOTEgKilpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSktPnJlZ1tyZWddID0gdmFsdWU7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJdG9fc2FhNzE5MShzZCktPnJlZ1tyZWddID0gdmFsdWU7CiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAogLyogdGhlIGZpcnN0IGJ5dGUgb2YgZGF0YSBtdXN0IGJlIHRoZSBmaXJzdCBzdWJhZGRyZXNzIG51bWJlciAocmVnaXN0ZXIpICovCi1zdGF0aWMgaW50IHNhYTcxOTFfd3JpdGVfYmxvY2soc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKK3N0YXRpYyBpbnQgc2FhNzE5MV93cml0ZV9ibG9jayhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAogCQkJICAgICAgIHU4IGxlbmd0aCwgY29uc3QgdTggKmRhdGEpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCXN0cnVjdCBzYWE3MTkxICpkZWNvZGVyID0gdG9fc2FhNzE5MShzZCk7CiAJaW50IGk7CiAJaW50IHJldDsKIAotCXN0cnVjdCBzYWE3MTkxICpkZWNvZGVyID0gKHN0cnVjdCBzYWE3MTkxICopaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CiAJZm9yIChpID0gMDsgaSA8IChsZW5ndGggLSAxKTsgaSsrKSB7CiAJCWRlY29kZXItPnJlZ1tkYXRhWzBdICsgaV0gPSBkYXRhW2kgKyAxXTsKIAl9CkBAIC0xNTIsMTQgKzE1OSwxNSBAQAogCiAvKiBIZWxwZXIgZnVuY3Rpb25zICovCiAKLXN0YXRpYyBpbnQgc2FhNzE5MV9zZXRfaW5wdXQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGlucHV0KQorc3RhdGljIGludCBzYWE3MTkxX3Nfcm91dGluZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLAorCQkJCWNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQogewotCXN0cnVjdCBzYWE3MTkxICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JdTggbHVtYSA9IHNhYTcxOTFfcmVhZF9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19MVU1BKTsKLQl1OCBpb2NrID0gc2FhNzE5MV9yZWFkX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0lPQ0spOworCXN0cnVjdCBzYWE3MTkxICpkZWNvZGVyID0gdG9fc2FhNzE5MShzZCk7CisJdTggbHVtYSA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0xVTUEpOworCXU4IGlvY2sgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19JT0NLKTsKIAlpbnQgZXJyOwogCi0Jc3dpdGNoIChpbnB1dCkgeworCXN3aXRjaCAocm91dGUtPmlucHV0KSB7CiAJY2FzZSBTQUE3MTkxX0lOUFVUX0NPTVBPU0lURTogLyogU2V0IENvbXBvc2l0ZSBpbnB1dCAqLwogCQlpb2NrICY9IH4oU0FBNzE5MV9JT0NLX0NIUlMgfCBTQUE3MTkxX0lPQ0tfR1BTVzEKIAkJCSAgfCBTQUE3MTkxX0lPQ0tfR1BTVzIpOwpAQCAtMTc1LDU0ICsxODMsNTAgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JZXJyID0gc2FhNzE5MV93cml0ZV9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19MVU1BLCBsdW1hKTsKKwllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhzZCwgU0FBNzE5MV9SRUdfTFVNQSwgbHVtYSk7CiAJaWYgKGVycikKIAkJcmV0dXJuIC1FSU87Ci0JZXJyID0gc2FhNzE5MV93cml0ZV9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19JT0NLLCBpb2NrKTsKKwllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhzZCwgU0FBNzE5MV9SRUdfSU9DSywgaW9jayk7CiAJaWYgKGVycikKIAkJcmV0dXJuIC1FSU87CiAKLQlkZWNvZGVyLT5pbnB1dCA9IGlucHV0OworCWRlY29kZXItPmlucHV0ID0gcm91dGUtPmlucHV0OwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNzE5MV9zZXRfbm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgbm9ybSkKK3N0YXRpYyBpbnQgc2FhNzE5MV9zX3N0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCBub3JtKQogewotCXN0cnVjdCBzYWE3MTkxICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7Ci0JdTggc3RkYyA9IHNhYTcxOTFfcmVhZF9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19TVERDKTsKLQl1OCBjdGwzID0gc2FhNzE5MV9yZWFkX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0NUTDMpOwotCXU4IGNoY3YgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfQ0hDVik7CisJc3RydWN0IHNhYTcxOTEgKmRlY29kZXIgPSB0b19zYWE3MTkxKHNkKTsKKwl1OCBzdGRjID0gc2FhNzE5MV9yZWFkX3JlZyhzZCwgU0FBNzE5MV9SRUdfU1REQyk7CisJdTggY3RsMyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0NUTDMpOworCXU4IGNoY3YgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19DSENWKTsKIAlpbnQgZXJyOwogCi0Jc3dpdGNoKG5vcm0pIHsKLQljYXNlIFNBQTcxOTFfTk9STV9QQUw6CisJaWYgKG5vcm0gJiBWNEwyX1NURF9QQUwpIHsKIAkJc3RkYyAmPSB+U0FBNzE5MV9TVERDX1NFQ1M7CiAJCWN0bDMgJj0gfihTQUE3MTkxX0NUTDNfQVVGRCB8IFNBQTcxOTFfQ1RMM19GU0VMKTsKIAkJY2hjdiA9IFNBQTcxOTFfQ0hDVl9QQUw7Ci0JCWJyZWFrOwotCWNhc2UgU0FBNzE5MV9OT1JNX05UU0M6CisJfSBlbHNlIGlmIChub3JtICYgVjRMMl9TVERfTlRTQykgewogCQlzdGRjICY9IH5TQUE3MTkxX1NURENfU0VDUzsKIAkJY3RsMyAmPSB+U0FBNzE5MV9DVEwzX0FVRkQ7CiAJCWN0bDMgfD0gU0FBNzE5MV9DVEwzX0ZTRUw7CiAJCWNoY3YgPSBTQUE3MTkxX0NIQ1ZfTlRTQzsKLQkJYnJlYWs7Ci0JY2FzZSBTQUE3MTkxX05PUk1fU0VDQU06CisJfSBlbHNlIGlmIChub3JtICYgVjRMMl9TVERfU0VDQU0pIHsKIAkJc3RkYyB8PSBTQUE3MTkxX1NURENfU0VDUzsKIAkJY3RsMyAmPSB+KFNBQTcxOTFfQ1RMM19BVUZEIHwgU0FBNzE5MV9DVEwzX0ZTRUwpOwogCQljaGN2ID0gU0FBNzE5MV9DSENWX1BBTDsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKKwl9IGVsc2UgewogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0NUTDMsIGN0bDMpOworCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19DVEwzLCBjdGwzKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gLUVJTzsKLQllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX1NUREMsIHN0ZGMpOworCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19TVERDLCBzdGRjKTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gLUVJTzsKLQllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0NIQ1YsIGNoY3YpOworCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19DSENWLCBjaGN2KTsKIAlpZiAoZXJyKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtMjMwLDE5ICsyMzQsMTkgQEAKIAogCWRwcmludGsoImN0bDM6ICUwMnggc3RkYzogJTAyeCBjaGN2OiAlMDJ4XG4iLCBjdGwzLAogCQlzdGRjLCBjaGN2KTsKLQlkcHJpbnRrKCJub3JtOiAlZFxuIiwgbm9ybSk7CisJZHByaW50aygibm9ybTogJWxseFxuIiwgbm9ybSk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBzYWE3MTkxX3dhaXRfZm9yX3NpZ25hbChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1OCAqc3RhdHVzKQorc3RhdGljIGludCBzYWE3MTkxX3dhaXRfZm9yX3NpZ25hbChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCAqc3RhdHVzKQogewogCWludCBpID0gMDsKIAogCWRwcmludGsoIkNoZWNraW5nIGZvciBzaWduYWwuLi5cbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IFNBQTcxOTFfU1lOQ19DT1VOVDsgaSsrKSB7Ci0JCWlmIChzYWE3MTkxX3JlYWRfc3RhdHVzKGNsaWVudCwgc3RhdHVzKSkKKwkJaWYgKHNhYTcxOTFfcmVhZF9zdGF0dXMoc2QsIHN0YXR1cykpCiAJCQlyZXR1cm4gLUVJTzsKIAogCQlpZiAoKCgqc3RhdHVzKSAmIFNBQTcxOTFfU1RBVFVTX0hMQ0spID09IDApIHsKQEAgLTI1OCwzMSArMjYyLDM0IEBACiAJcmV0dXJuIC1FQlVTWTsKIH0KIAotc3RhdGljIGludCBzYWE3MTkxX2F1dG9kZXRlY3Rfbm9ybV9leHRlbmRlZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBzYWE3MTkxX3F1ZXJ5c3RkKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkICpub3JtKQogewotCXU4IHN0ZGMgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfU1REQyk7Ci0JdTggY3RsMyA9IHNhYTcxOTFfcmVhZF9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19DVEwzKTsKKwlzdHJ1Y3Qgc2FhNzE5MSAqZGVjb2RlciA9IHRvX3NhYTcxOTEoc2QpOworCXU4IHN0ZGMgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19TVERDKTsKKwl1OCBjdGwzID0gc2FhNzE5MV9yZWFkX3JlZyhzZCwgU0FBNzE5MV9SRUdfQ1RMMyk7CiAJdTggc3RhdHVzOworCXY0bDJfc3RkX2lkIG9sZF9ub3JtID0gZGVjb2Rlci0+bm9ybTsKIAlpbnQgZXJyID0gMDsKIAogCWRwcmludGsoIlNBQTcxOTEgZXh0ZW5kZWQgc2lnbmFsIGF1dG8tZGV0ZWN0aW9uLi4uXG4iKTsKIAorCSpub3JtID0gVjRMMl9TVERfTlRTQyB8IFY0TDJfU1REX1BBTCB8IFY0TDJfU1REX1NFQ0FNOwogCXN0ZGMgJj0gflNBQTcxOTFfU1REQ19TRUNTOwogCWN0bDMgJj0gfihTQUE3MTkxX0NUTDNfRlNFTCk7CiAKLQllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX1NUREMsIHN0ZGMpOworCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19TVERDLCBzdGRjKTsKIAlpZiAoZXJyKSB7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KLQllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0NUTDMsIGN0bDMpOworCWVyciA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19DVEwzLCBjdGwzKTsKIAlpZiAoZXJyKSB7CiAJCWVyciA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KIAogCWN0bDMgfD0gU0FBNzE5MV9DVEwzX0FVRkQ7Ci0JZXJyID0gc2FhNzE5MV93cml0ZV9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19DVEwzLCBjdGwzKTsKKwllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhzZCwgU0FBNzE5MV9SRUdfQ1RMMywgY3RsMyk7CiAJaWYgKGVycikgewogCQllcnIgPSAtRUlPOwogCQlnb3RvIG91dDsKQEAgLTI5MCw1MyArMjk3LDU0IEBACiAKIAltc2xlZXAoU0FBNzE5MV9TWU5DX0RFTEFZKTsKIAotCWVyciA9IHNhYTcxOTFfd2FpdF9mb3Jfc2lnbmFsKGNsaWVudCwgJnN0YXR1cyk7CisJZXJyID0gc2FhNzE5MV93YWl0X2Zvcl9zaWduYWwoc2QsICZzdGF0dXMpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCiAJaWYgKHN0YXR1cyAmIFNBQTcxOTFfU1RBVFVTX0ZJRFQpIHsKIAkJLyogNjBIeiBzaWduYWwgLT4gTlRTQyAqLwogCQlkcHJpbnRrKCI2MEh6IHNpZ25hbDogTlRTQ1xuIik7Ci0JCXJldHVybiBzYWE3MTkxX3NldF9ub3JtKGNsaWVudCwgU0FBNzE5MV9OT1JNX05UU0MpOworCQkqbm9ybSA9IFY0TDJfU1REX05UU0M7CisJCXJldHVybiAwOwogCX0KIAogCS8qIDUwSHogc2lnbmFsICovCiAJZHByaW50aygiNTBIeiBzaWduYWw6IFRyeWluZyBQQUwuLi5cbiIpOwogCiAJLyogdHJ5IFBBTCBmaXJzdCAqLwotCWVyciA9IHNhYTcxOTFfc2V0X25vcm0oY2xpZW50LCBTQUE3MTkxX05PUk1fUEFMKTsKKwllcnIgPSBzYWE3MTkxX3Nfc3RkKHNkLCBWNEwyX1NURF9QQUwpOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCiAJbXNsZWVwKFNBQTcxOTFfU1lOQ19ERUxBWSk7CiAKLQllcnIgPSBzYWE3MTkxX3dhaXRfZm9yX3NpZ25hbChjbGllbnQsICZzdGF0dXMpOworCWVyciA9IHNhYTcxOTFfd2FpdF9mb3Jfc2lnbmFsKHNkLCAmc3RhdHVzKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIAogCS8qIG5vdCA1MEh6ID8gKi8KIAlpZiAoc3RhdHVzICYgU0FBNzE5MV9TVEFUVVNfRklEVCkgewogCQlkcHJpbnRrKCJObyA1MEh6IHNpZ25hbFxuIik7Ci0JCWVyciA9IC1FQUdBSU47Ci0JCWdvdG8gb3V0OworCQlzYWE3MTkxX3Nfc3RkKHNkLCBvbGRfbm9ybSk7CisJCXJldHVybiAtRUFHQUlOOwogCX0KIAogCWlmIChzdGF0dXMgJiBTQUE3MTkxX1NUQVRVU19DT0RFKSB7CiAJCWRwcmludGsoIlBBTFxuIik7Ci0JCXJldHVybiAwOworCQkqbm9ybSA9IFY0TDJfU1REX1BBTDsKKwkJcmV0dXJuIHNhYTcxOTFfc19zdGQoc2QsIG9sZF9ub3JtKTsKIAl9CiAKIAlkcHJpbnRrKCJObyBjb2xvciBkZXRlY3RlZCB3aXRoIFBBTCAtIFRyeWluZyBTRUNBTS4uLlxuIik7CiAKIAkvKiBubyBjb2xvciBkZXRlY3RlZCA/IC0+IHRyeSBTRUNBTSAqLwotCWVyciA9IHNhYTcxOTFfc2V0X25vcm0oY2xpZW50LAotCQkJICAgICAgIFNBQTcxOTFfTk9STV9TRUNBTSk7CisJZXJyID0gc2FhNzE5MV9zX3N0ZChzZCwgVjRMMl9TVERfU0VDQU0pOwogCWlmIChlcnIpCiAJCWdvdG8gb3V0OwogCiAJbXNsZWVwKFNBQTcxOTFfU1lOQ19ERUxBWSk7CiAKLQllcnIgPSBzYWE3MTkxX3dhaXRfZm9yX3NpZ25hbChjbGllbnQsICZzdGF0dXMpOworCWVyciA9IHNhYTcxOTFfd2FpdF9mb3Jfc2lnbmFsKHNkLCAmc3RhdHVzKTsKIAlpZiAoZXJyKQogCQlnb3RvIG91dDsKIApAQCAtMzUwLDMyICszNTgsMTcgQEAKIAlpZiAoc3RhdHVzICYgU0FBNzE5MV9TVEFUVVNfQ09ERSkgewogCQkvKiBDb2xvciBkZXRlY3RlZCAtPiBTRUNBTSAqLwogCQlkcHJpbnRrKCJTRUNBTVxuIik7Ci0JCXJldHVybiAwOworCQkqbm9ybSA9IFY0TDJfU1REX1NFQ0FNOworCQlyZXR1cm4gc2FhNzE5MV9zX3N0ZChzZCwgb2xkX25vcm0pOwogCX0KIAogCWRwcmludGsoIk5vIGNvbG9yIGRldGVjdGVkIHdpdGggU0VDQU0gLSBHb2luZyBiYWNrIHRvIFBBTC5cbiIpOwogCi0JLyogc3RpbGwgbm8gY29sb3IgZGV0ZWN0ZWQgPwotCSAqIC0+IHNldCBub3JtIGJhY2sgdG8gUEFMICovCi0JZXJyID0gc2FhNzE5MV9zZXRfbm9ybShjbGllbnQsCi0JCQkgICAgICAgU0FBNzE5MV9OT1JNX1BBTCk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KIG91dDoKLQljdGwzID0gc2FhNzE5MV9yZWFkX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0NUTDMpOwotCWlmIChjdGwzICYgU0FBNzE5MV9DVEwzX0FVRkQpIHsKLQkJY3RsMyAmPSB+KFNBQTcxOTFfQ1RMM19BVUZEKTsKLQkJZXJyID0gc2FhNzE5MV93cml0ZV9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19DVEwzLCBjdGwzKTsKLQkJaWYgKGVycikgewotCQkJZXJyID0gLUVJTzsKLQkJfQotCX0KLQotCXJldHVybiBlcnI7CisJcmV0dXJuIHNhYTcxOTFfc19zdGQoc2QsIG9sZF9ub3JtKTsKIH0KIAotc3RhdGljIGludCBzYWE3MTkxX2F1dG9kZXRlY3Rfbm9ybShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQorc3RhdGljIGludCBzYWE3MTkxX2F1dG9kZXRlY3Rfbm9ybShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewogCXU4IHN0YXR1czsKIApAQCAtMzgzLDcgKzM3Niw3IEBACiAKIAlkcHJpbnRrKCJSZWFkaW5nIHN0YXR1cy4uLlxuIik7CiAKLQlpZiAoc2FhNzE5MV9yZWFkX3N0YXR1cyhjbGllbnQsICZzdGF0dXMpKQorCWlmIChzYWE3MTkxX3JlYWRfc3RhdHVzKHNkLCAmc3RhdHVzKSkKIAkJcmV0dXJuIC1FSU87CiAKIAlkcHJpbnRrKCJDaGVja2luZyBmb3Igc2lnbmFsLi4uXG4iKTsKQEAgLTM5OSwyNiArMzkyLDI1IEBACiAJaWYgKHN0YXR1cyAmIFNBQTcxOTFfU1RBVFVTX0ZJRFQpIHsKIAkJLyogNjBoeiBzaWduYWwgLT4gTlRTQyAqLwogCQlkcHJpbnRrKCJOVFNDXG4iKTsKLQkJcmV0dXJuIHNhYTcxOTFfc2V0X25vcm0oY2xpZW50LCBTQUE3MTkxX05PUk1fTlRTQyk7CisJCXJldHVybiBzYWE3MTkxX3Nfc3RkKHNkLCBWNEwyX1NURF9OVFNDKTsKIAl9IGVsc2UgewogCQkvKiA1MGh6IHNpZ25hbCAtPiBQQUwgKi8KIAkJZHByaW50aygiUEFMXG4iKTsKLQkJcmV0dXJuIHNhYTcxOTFfc2V0X25vcm0oY2xpZW50LCBTQUE3MTkxX05PUk1fUEFMKTsKKwkJcmV0dXJuIHNhYTcxOTFfc19zdGQoc2QsIFY0TDJfU1REX1BBTCk7CiAJfQogfQogCi1zdGF0aWMgaW50IHNhYTcxOTFfZ2V0X2NvbnRyb2woc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKLQkJCSAgICAgICBzdHJ1Y3Qgc2FhNzE5MV9jb250cm9sICpjdHJsKQorc3RhdGljIGludCBzYWE3MTkxX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewogCXU4IHJlZzsKIAlpbnQgcmV0ID0gMDsKIAotCXN3aXRjaCAoY3RybC0+dHlwZSkgeworCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFNBQTcxOTFfQ09OVFJPTF9CQU5EUEFTUzoKIAljYXNlIFNBQTcxOTFfQ09OVFJPTF9CQU5EUEFTU19XRUlHSFQ6CiAJY2FzZSBTQUE3MTkxX0NPTlRST0xfQ09SSU5HOgotCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfTFVNQSk7Ci0JCXN3aXRjaCAoY3RybC0+dHlwZSkgeworCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19MVU1BKTsKKwkJc3dpdGNoIChjdHJsLT5pZCkgewogCQljYXNlIFNBQTcxOTFfQ09OVFJPTF9CQU5EUEFTUzoKIAkJCWN0cmwtPnZhbHVlID0gKChzMzIpcmVnICYgU0FBNzE5MV9MVU1BX0JQU1NfTUFTSykKIAkJCQk+PiBTQUE3MTkxX0xVTUFfQlBTU19TSElGVDsKQEAgLTQzNSwxNSArNDI3LDE1IEBACiAJCWJyZWFrOwogCWNhc2UgU0FBNzE5MV9DT05UUk9MX0ZPUkNFX0NPTE9VUjoKIAljYXNlIFNBQTcxOTFfQ09OVFJPTF9DSFJPTUFfR0FJTjoKLQkJcmVnID0gc2FhNzE5MV9yZWFkX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0dBSU4pOwotCQlpZiAoY3RybC0+dHlwZSA9PSBTQUE3MTkxX0NPTlRST0xfRk9SQ0VfQ09MT1VSKQorCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19HQUlOKTsKKwkJaWYgKGN0cmwtPmlkID09IFNBQTcxOTFfQ09OVFJPTF9GT1JDRV9DT0xPVVIpCiAJCQljdHJsLT52YWx1ZSA9ICgoczMyKXJlZyAmIFNBQTcxOTFfR0FJTl9DT0xPKSA/IDEgOiAwOwogCQllbHNlCiAJCQljdHJsLT52YWx1ZSA9ICgoczMyKXJlZyAmIFNBQTcxOTFfR0FJTl9MRklTX01BU0spCiAJCQkJPj4gU0FBNzE5MV9HQUlOX0xGSVNfU0hJRlQ7CiAJCWJyZWFrOwotCWNhc2UgU0FBNzE5MV9DT05UUk9MX0hVRToKLQkJcmVnID0gc2FhNzE5MV9yZWFkX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0hVRUMpOworCWNhc2UgVjRMMl9DSURfSFVFOgorCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19IVUVDKTsKIAkJaWYgKHJlZyA8IDB4ODApCiAJCQlyZWcgKz0gMHg4MDsKIAkJZWxzZQpAQCAtNDUxLDE4ICs0NDMsMTggQEAKIAkJY3RybC0+dmFsdWUgPSAoczMyKXJlZzsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTkxX0NPTlRST0xfVlRSQzoKLQkJcmVnID0gc2FhNzE5MV9yZWFkX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX1NUREMpOworCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19TVERDKTsKIAkJY3RybC0+dmFsdWUgPSAoKHMzMilyZWcgJiBTQUE3MTkxX1NURENfVlRSQykgPyAxIDogMDsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTkxX0NPTlRST0xfTFVNQV9ERUxBWToKLQkJcmVnID0gc2FhNzE5MV9yZWFkX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0NUTDMpOworCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19DVEwzKTsKIAkJY3RybC0+dmFsdWUgPSAoKHMzMilyZWcgJiBTQUE3MTkxX0NUTDNfWURFTF9NQVNLKQogCQkJPj4gU0FBNzE5MV9DVEwzX1lERUxfU0hJRlQ7CiAJCWlmIChjdHJsLT52YWx1ZSA+PSA0KQogCQkJY3RybC0+dmFsdWUgLT0gODsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTkxX0NPTlRST0xfVk5SOgotCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfQ1RMNCk7CisJCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0NUTDQpOwogCQljdHJsLT52YWx1ZSA9ICgoczMyKXJlZyAmIFNBQTcxOTFfQ1RMNF9WTk9JX01BU0spCiAJCQk+PiBTQUE3MTkxX0NUTDRfVk5PSV9TSElGVDsKIAkJYnJlYWs7CkBAIC00NzMsMTggKzQ2NSwxNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgc2FhNzE5MV9zZXRfY29udHJvbChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAotCQkJICAgICAgIHN0cnVjdCBzYWE3MTkxX2NvbnRyb2wgKmN0cmwpCitzdGF0aWMgaW50IHNhYTcxOTFfc19jdHJsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7CiAJdTggcmVnOwogCWludCByZXQgPSAwOwogCi0Jc3dpdGNoIChjdHJsLT50eXBlKSB7CisJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTOgogCWNhc2UgU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTX1dFSUdIVDoKIAljYXNlIFNBQTcxOTFfQ09OVFJPTF9DT1JJTkc6Ci0JCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19MVU1BKTsKLQkJc3dpdGNoIChjdHJsLT50eXBlKSB7CisJCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0xVTUEpOworCQlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJCWNhc2UgU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTOgogCQkJcmVnICY9IH5TQUE3MTkxX0xVTUFfQlBTU19NQVNLOwogCQkJcmVnIHw9IChjdHJsLT52YWx1ZSA8PCBTQUE3MTkxX0xVTUFfQlBTU19TSElGVCkKQEAgLTUwMSwxMiArNDkyLDEyIEBACiAJCQkJJiBTQUE3MTkxX0xVTUFfQ09SSV9NQVNLOwogCQkJYnJlYWs7CiAJCX0KLQkJcmV0ID0gc2FhNzE5MV93cml0ZV9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19MVU1BLCByZWcpOworCQlyZXQgPSBzYWE3MTkxX3dyaXRlX3JlZyhzZCwgU0FBNzE5MV9SRUdfTFVNQSwgcmVnKTsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTkxX0NPTlRST0xfRk9SQ0VfQ09MT1VSOgogCWNhc2UgU0FBNzE5MV9DT05UUk9MX0NIUk9NQV9HQUlOOgotCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfR0FJTik7Ci0JCWlmIChjdHJsLT50eXBlID09IFNBQTcxOTFfQ09OVFJPTF9GT1JDRV9DT0xPVVIpIHsKKwkJcmVnID0gc2FhNzE5MV9yZWFkX3JlZyhzZCwgU0FBNzE5MV9SRUdfR0FJTik7CisJCWlmIChjdHJsLT5pZCA9PSBTQUE3MTkxX0NPTlRST0xfRk9SQ0VfQ09MT1VSKSB7CiAJCQlpZiAoY3RybC0+dmFsdWUpCiAJCQkJcmVnIHw9IFNBQTcxOTFfR0FJTl9DT0xPOwogCQkJZWxzZQpAQCAtNTE2LDQxICs1MDcsNDEgQEAKIAkJCXJlZyB8PSAoY3RybC0+dmFsdWUgPDwgU0FBNzE5MV9HQUlOX0xGSVNfU0hJRlQpCiAJCQkJJiBTQUE3MTkxX0dBSU5fTEZJU19NQVNLOwogCQl9Ci0JCXJldCA9IHNhYTcxOTFfd3JpdGVfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfR0FJTiwgcmVnKTsKKwkJcmV0ID0gc2FhNzE5MV93cml0ZV9yZWcoc2QsIFNBQTcxOTFfUkVHX0dBSU4sIHJlZyk7CiAJCWJyZWFrOwotCWNhc2UgU0FBNzE5MV9DT05UUk9MX0hVRToKKwljYXNlIFY0TDJfQ0lEX0hVRToKIAkJcmVnID0gY3RybC0+dmFsdWUgJiAweGZmOwogCQlpZiAocmVnIDwgMHg4MCkKIAkJCXJlZyArPSAweDgwOwogCQllbHNlCiAJCQlyZWcgLT0gMHg4MDsKLQkJcmV0ID0gc2FhNzE5MV93cml0ZV9yZWcoY2xpZW50LCBTQUE3MTkxX1JFR19IVUVDLCByZWcpOworCQlyZXQgPSBzYWE3MTkxX3dyaXRlX3JlZyhzZCwgU0FBNzE5MV9SRUdfSFVFQywgcmVnKTsKIAkJYnJlYWs7CiAJY2FzZSBTQUE3MTkxX0NPTlRST0xfVlRSQzoKLQkJcmVnID0gc2FhNzE5MV9yZWFkX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX1NUREMpOworCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19TVERDKTsKIAkJaWYgKGN0cmwtPnZhbHVlKQogCQkJcmVnIHw9IFNBQTcxOTFfU1REQ19WVFJDOwogCQllbHNlCiAJCQlyZWcgJj0gflNBQTcxOTFfU1REQ19WVFJDOwotCQlyZXQgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX1NUREMsIHJlZyk7CisJCXJldCA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19TVERDLCByZWcpOwogCQlicmVhazsKIAljYXNlIFNBQTcxOTFfQ09OVFJPTF9MVU1BX0RFTEFZOiB7CiAJCXMzMiB2YWx1ZSA9IGN0cmwtPnZhbHVlOwogCQlpZiAodmFsdWUgPCAwKQogCQkJdmFsdWUgKz0gODsKLQkJcmVnID0gc2FhNzE5MV9yZWFkX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0NUTDMpOworCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKHNkLCBTQUE3MTkxX1JFR19DVEwzKTsKIAkJcmVnICY9IH5TQUE3MTkxX0NUTDNfWURFTF9NQVNLOwogCQlyZWcgfD0gKHZhbHVlIDw8IFNBQTcxOTFfQ1RMM19ZREVMX1NISUZUKQogCQkJJiBTQUE3MTkxX0NUTDNfWURFTF9NQVNLOwotCQlyZXQgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0NUTDMsIHJlZyk7CisJCXJldCA9IHNhYTcxOTFfd3JpdGVfcmVnKHNkLCBTQUE3MTkxX1JFR19DVEwzLCByZWcpOwogCQlicmVhazsKIAl9CiAJY2FzZSBTQUE3MTkxX0NPTlRST0xfVk5SOgotCQlyZWcgPSBzYWE3MTkxX3JlYWRfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfQ1RMNCk7CisJCXJlZyA9IHNhYTcxOTFfcmVhZF9yZWcoc2QsIFNBQTcxOTFfUkVHX0NUTDQpOwogCQlyZWcgJj0gflNBQTcxOTFfQ1RMNF9WTk9JX01BU0s7CiAJCXJlZyB8PSAoY3RybC0+dmFsdWUgPDwgU0FBNzE5MV9DVEw0X1ZOT0lfU0hJRlQpCiAJCQkmIFNBQTcxOTFfQ1RMNF9WTk9JX01BU0s7Ci0JCXJldCA9IHNhYTcxOTFfd3JpdGVfcmVnKGNsaWVudCwgU0FBNzE5MV9SRUdfQ1RMNCwgcmVnKTsKKwkJcmV0ID0gc2FhNzE5MV93cml0ZV9yZWcoc2QsIFNBQTcxOTFfUkVHX0NUTDQsIHJlZyk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6CiAJCXJldCA9IC1FSU5WQUw7CkBAIC01NjEsMjQ3ICs1NTIsMTA4IEBACiAKIC8qIEkyQy1pbnRlcmZhY2UgKi8KIAotc3RhdGljIGludCBzYWE3MTkxX2F0dGFjaChzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXAsIGludCBhZGRyLCBpbnQga2luZCkKK3N0YXRpYyBpbnQgc2FhNzE5MV9nX2lucHV0X3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgKnN0YXR1cykKK3sKKwl1OCBzdGF0dXNfcmVnOworCWludCByZXMgPSBWNEwyX0lOX1NUX05PX1NJR05BTDsKKworCWlmIChzYWE3MTkxX3JlYWRfc3RhdHVzKHNkLCAmc3RhdHVzX3JlZykpCisJCXJldHVybiAtRUlPOworCWlmICgoc3RhdHVzX3JlZyAmIFNBQTcxOTFfU1RBVFVTX0hMQ0spID09IDApCisJCXJlcyA9IDA7CisJaWYgKCEoc3RhdHVzX3JlZyAmIFNBQTcxOTFfU1RBVFVTX0NPREUpKQorCQlyZXMgfD0gVjRMMl9JTl9TVF9OT19DT0xPUjsKKwkqc3RhdHVzID0gcmVzOworCXJldHVybiAwOworfQorCisKK3N0YXRpYyBpbnQgc2FhNzE5MV9nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJcmV0dXJuIHY0bDJfY2hpcF9pZGVudF9pMmNfY2xpZW50KGNsaWVudCwgY2hpcCwgVjRMMl9JREVOVF9TQUE3MTkxLCAwKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyBzYWE3MTkxX2NvcmVfb3BzID0geworCS5nX2NoaXBfaWRlbnQgPSBzYWE3MTkxX2dfY2hpcF9pZGVudCwKKwkuZ19jdHJsID0gc2FhNzE5MV9nX2N0cmwsCisJLnNfY3RybCA9IHNhYTcxOTFfc19jdHJsLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl90dW5lcl9vcHMgc2FhNzE5MV90dW5lcl9vcHMgPSB7CisJLnNfc3RkID0gc2FhNzE5MV9zX3N0ZCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdmlkZW9fb3BzIHNhYTcxOTFfdmlkZW9fb3BzID0geworCS5zX3JvdXRpbmcgPSBzYWE3MTkxX3Nfcm91dGluZywKKwkucXVlcnlzdGQgPSBzYWE3MTkxX3F1ZXJ5c3RkLAorCS5nX2lucHV0X3N0YXR1cyA9IHNhYTcxOTFfZ19pbnB1dF9zdGF0dXMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyBzYWE3MTkxX29wcyA9IHsKKwkuY29yZSA9ICZzYWE3MTkxX2NvcmVfb3BzLAorCS52aWRlbyA9ICZzYWE3MTkxX3ZpZGVvX29wcywKKwkudHVuZXIgPSAmc2FhNzE5MV90dW5lcl9vcHMsCit9OworCitzdGF0aWMgaW50IHNhYTcxOTFfcHJvYmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwKKwkJCSAgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgKmlkKQogewogCWludCBlcnIgPSAwOwogCXN0cnVjdCBzYWE3MTkxICpkZWNvZGVyOwotCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQ7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAotCXByaW50ayhLRVJOX0lORk8gIlBoaWxpcHMgU0FBNzE5MSBkcml2ZXIgdmVyc2lvbiAlc1xuIiwKLQkgICAgICAgU0FBNzE5MV9NT0RVTEVfVkVSU0lPTik7CisJdjRsX2luZm8oY2xpZW50LCAiY2hpcCBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCi0JY2xpZW50ID0ga3phbGxvYyhzaXplb2YoKmNsaWVudCksIEdGUF9LRVJORUwpOwotCWlmICghY2xpZW50KQotCQlyZXR1cm4gLUVOT01FTTsKIAlkZWNvZGVyID0ga3phbGxvYyhzaXplb2YoKmRlY29kZXIpLCBHRlBfS0VSTkVMKTsKLQlpZiAoIWRlY29kZXIpIHsKLQkJZXJyID0gLUVOT01FTTsKLQkJZ290byBvdXRfZnJlZV9jbGllbnQ7Ci0JfQorCWlmICghZGVjb2RlcikKKwkJcmV0dXJuIC1FTk9NRU07CiAKLQljbGllbnQtPmFkZHIgPSBhZGRyOwotCWNsaWVudC0+YWRhcHRlciA9IGFkYXA7Ci0JY2xpZW50LT5kcml2ZXIgPSAmaTJjX2RyaXZlcl9zYWE3MTkxOwotCWNsaWVudC0+ZmxhZ3MgPSAwOwotCXN0cmNweShjbGllbnQtPm5hbWUsICJzYWE3MTkxIGNsaWVudCIpOwotCWkyY19zZXRfY2xpZW50ZGF0YShjbGllbnQsIGRlY29kZXIpOworCXNkID0gJmRlY29kZXItPnNkOworCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZzYWE3MTkxX29wcyk7CiAKLQlkZWNvZGVyLT5jbGllbnQgPSBjbGllbnQ7Ci0KLQllcnIgPSBpMmNfYXR0YWNoX2NsaWVudChjbGllbnQpOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0X2ZyZWVfZGVjb2RlcjsKLQotCWVyciA9IHNhYTcxOTFfd3JpdGVfYmxvY2soY2xpZW50LCBzaXplb2YoaW5pdHNlcSksIGluaXRzZXEpOworCWVyciA9IHNhYTcxOTFfd3JpdGVfYmxvY2soc2QsIHNpemVvZihpbml0c2VxKSwgaW5pdHNlcSk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgIlNBQTcxOTEgaW5pdGlhbGl6YXRpb24gZmFpbGVkXG4iKTsKLQkJZ290byBvdXRfZGV0YWNoX2NsaWVudDsKKwkJa2ZyZWUoZGVjb2Rlcik7CisJCXJldHVybiBlcnI7CiAJfQogCiAJcHJpbnRrKEtFUk5fSU5GTyAiU0FBNzE5MSBpbml0aWFsaXplZFxuIik7CiAKIAlkZWNvZGVyLT5pbnB1dCA9IFNBQTcxOTFfSU5QVVRfQ09NUE9TSVRFOwotCWRlY29kZXItPm5vcm0gPSBTQUE3MTkxX05PUk1fUEFMOworCWRlY29kZXItPm5vcm0gPSBWNEwyX1NURF9QQUw7CiAKLQllcnIgPSBzYWE3MTkxX2F1dG9kZXRlY3Rfbm9ybShjbGllbnQpOwotCWlmIChlcnIgJiYgKGVyciAhPSAtRUJVU1kpKSB7CisJZXJyID0gc2FhNzE5MV9hdXRvZGV0ZWN0X25vcm0oc2QpOworCWlmIChlcnIgJiYgKGVyciAhPSAtRUJVU1kpKQogCQlwcmludGsoS0VSTl9FUlIgIlNBQTcxOTE6IFNpZ25hbCBhdXRvLWRldGVjdGlvbiBmYWlsZWRcbiIpOwotCX0KLQotCXJldHVybiAwOwotCi1vdXRfZGV0YWNoX2NsaWVudDoKLQlpMmNfZGV0YWNoX2NsaWVudChjbGllbnQpOwotb3V0X2ZyZWVfZGVjb2RlcjoKLQlrZnJlZShkZWNvZGVyKTsKLW91dF9mcmVlX2NsaWVudDoKLQlrZnJlZShjbGllbnQpOwotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQgc2FhNzE5MV9wcm9iZShzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmFkYXApCi17Ci0JLyogQWx3YXlzIGNvbm5lY3RlZCB0byBWSU5PICovCi0JaWYgKGFkYXAtPmlkID09IEkyQ19IV19TR0lfVklOTykKLQkJcmV0dXJuIHNhYTcxOTFfYXR0YWNoKGFkYXAsIFNBQTcxOTFfQUREUiwgMCk7Ci0JLyogRmVlbCBmcmVlIHRvIGFkZCBwcm9iZSBoZXJlIDotKSAqLwotCXJldHVybiAtRU5PREVWOwotfQotCi1zdGF0aWMgaW50IHNhYTcxOTFfZGV0YWNoKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHNhYTcxOTEgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKLQotCWkyY19kZXRhY2hfY2xpZW50KGNsaWVudCk7Ci0Ja2ZyZWUoZGVjb2Rlcik7Ci0Ja2ZyZWUoY2xpZW50KTsKLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBzYWE3MTkxX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgaW50IGNtZCwKLQkJCSAgIHZvaWQgKmFyZykKLXsKLQlzdHJ1Y3Qgc2FhNzE5MSAqZGVjb2RlciA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIERFQ09ERVJfR0VUX0NBUEFCSUxJVElFUzogewotCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9jYXBhYmlsaXR5ICpjYXAgPSBhcmc7Ci0KLQkJY2FwLT5mbGFncyAgPSBWSURFT19ERUNPREVSX1BBTCB8IFZJREVPX0RFQ09ERVJfTlRTQyB8Ci0JCQkgICAgICBWSURFT19ERUNPREVSX1NFQ0FNIHwgVklERU9fREVDT0RFUl9BVVRPOwotCQljYXAtPmlucHV0cyA9IChjbGllbnQtPmFkYXB0ZXItPmlkID09IEkyQ19IV19TR0lfVklOTykgPyAyIDogMTsKLQkJY2FwLT5vdXRwdXRzID0gMTsKLQkJYnJlYWs7Ci0JfQotCWNhc2UgREVDT0RFUl9HRVRfU1RBVFVTOiB7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQkJdTggc3RhdHVzOwotCQlpbnQgcmVzID0gMDsKLQotCQlpZiAoc2FhNzE5MV9yZWFkX3N0YXR1cyhjbGllbnQsICZzdGF0dXMpKSB7Ci0JCQlyZXR1cm4gLUVJTzsKLQkJfQotCQlpZiAoKHN0YXR1cyAmIFNBQTcxOTFfU1RBVFVTX0hMQ0spID09IDApCi0JCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfR09PRDsKLQkJaWYgKHN0YXR1cyAmIFNBQTcxOTFfU1RBVFVTX0NPREUpCi0JCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfQ09MT1I7Ci0JCXN3aXRjaCAoZGVjb2Rlci0+bm9ybSkgewotCQljYXNlIFNBQTcxOTFfTk9STV9OVFNDOgotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX05UU0M7Ci0JCQlicmVhazsKLQkJY2FzZSBTQUE3MTkxX05PUk1fUEFMOgotCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX1BBTDsKLQkJCWJyZWFrOwotCQljYXNlIFNBQTcxOTFfTk9STV9TRUNBTToKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19TRUNBTTsKLQkJCWJyZWFrOwotCQljYXNlIFNBQTcxOTFfTk9STV9BVVRPOgotCQlkZWZhdWx0OgotCQkJaWYgKHN0YXR1cyAmIFNBQTcxOTFfU1RBVFVTX0ZJRFQpCi0JCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX05UU0M7Ci0JCQllbHNlCi0JCQkJcmVzIHw9IERFQ09ERVJfU1RBVFVTX1BBTDsKLQkJCWJyZWFrOwotCQl9Ci0JCSppYXJnID0gcmVzOwotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX1NFVF9OT1JNOiB7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQlzd2l0Y2ggKCppYXJnKSB7Ci0JCWNhc2UgVklERU9fTU9ERV9BVVRPOgotCQkJcmV0dXJuIHNhYTcxOTFfYXV0b2RldGVjdF9ub3JtKGNsaWVudCk7Ci0JCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQlyZXR1cm4gc2FhNzE5MV9zZXRfbm9ybShjbGllbnQsIFNBQTcxOTFfTk9STV9QQUwpOwotCQljYXNlIFZJREVPX01PREVfTlRTQzoKLQkJCXJldHVybiBzYWE3MTkxX3NldF9ub3JtKGNsaWVudCwgU0FBNzE5MV9OT1JNX05UU0MpOwotCQljYXNlIFZJREVPX01PREVfU0VDQU06Ci0JCQlyZXR1cm4gc2FhNzE5MV9zZXRfbm9ybShjbGllbnQsIFNBQTcxOTFfTk9STV9TRUNBTSk7Ci0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX1NFVF9JTlBVVDoJewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJc3dpdGNoIChjbGllbnQtPmFkYXB0ZXItPmlkKSB7Ci0JCWNhc2UgSTJDX0hXX1NHSV9WSU5POgotCQkJcmV0dXJuIHNhYTcxOTFfc2V0X2lucHV0KGNsaWVudCwgKmlhcmcpOwotCQlkZWZhdWx0OgotCQkJaWYgKCppYXJnICE9IDApCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgREVDT0RFUl9TRVRfT1VUUFVUOiB7Ci0JCWludCAqaWFyZyA9IGFyZzsKLQotCQkvKiBub3QgbXVjaCBjaG9pY2Ugb2Ygb3V0cHV0cyAqLwotCQlpZiAoKmlhcmcgIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX0VOQUJMRV9PVVRQVVQ6IHsKLQkJLyogQWx3YXlzIGVuYWJsZWQgKi8KLQkJYnJlYWs7Ci0JfQotCWNhc2UgREVDT0RFUl9TRVRfUElDVFVSRTogewotCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcGljID0gYXJnOwotCQl1bnNpZ25lZCB2YWw7Ci0JCWludCBlcnI7Ci0KLQkJdmFsID0gKHBpYy0+aHVlID4+IDgpIC0gMHg4MDsKLQotCQllcnIgPSBzYWE3MTkxX3dyaXRlX3JlZyhjbGllbnQsIFNBQTcxOTFfUkVHX0hVRUMsIHZhbCk7Ci0JCWlmIChlcnIpCi0JCQlyZXR1cm4gLUVJTzsKLQotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX1NBQTcxOTFfR0VUX1NUQVRVUzogewotCQlzdHJ1Y3Qgc2FhNzE5MV9zdGF0dXMgKnN0YXR1cyA9IGFyZzsKLQkJdTggc3RhdHVzX3JlZzsKLQotCQlpZiAoc2FhNzE5MV9yZWFkX3N0YXR1cyhjbGllbnQsICZzdGF0dXNfcmVnKSkKLQkJCXJldHVybiAtRUlPOwotCi0JCXN0YXR1cy0+c2lnbmFsID0gKChzdGF0dXNfcmVnICYgU0FBNzE5MV9TVEFUVVNfSExDSykgPT0gMCkKLQkJCT8gMSA6IDA7Ci0JCXN0YXR1cy0+c2lnbmFsXzYwaHogPSAoc3RhdHVzX3JlZyAmIFNBQTcxOTFfU1RBVFVTX0ZJRFQpCi0JCQk/IDEgOiAwOwotCQlzdGF0dXMtPmNvbG9yID0gKHN0YXR1c19yZWcgJiBTQUE3MTkxX1NUQVRVU19DT0RFKSA/IDEgOiAwOwotCi0JCXN0YXR1cy0+aW5wdXQgPSBkZWNvZGVyLT5pbnB1dDsKLQkJc3RhdHVzLT5ub3JtID0gZGVjb2Rlci0+bm9ybTsKLQotCQlicmVhazsKLQl9Ci0JY2FzZSBERUNPREVSX1NBQTcxOTFfU0VUX05PUk06IHsKLQkJaW50ICpub3JtID0gYXJnOwotCi0JCXN3aXRjaCAoKm5vcm0pIHsKLQkJY2FzZSBTQUE3MTkxX05PUk1fQVVUTzoKLQkJCXJldHVybiBzYWE3MTkxX2F1dG9kZXRlY3Rfbm9ybShjbGllbnQpOwotCQljYXNlIFNBQTcxOTFfTk9STV9BVVRPX0VYVDoKLQkJCXJldHVybiBzYWE3MTkxX2F1dG9kZXRlY3Rfbm9ybV9leHRlbmRlZChjbGllbnQpOwotCQlkZWZhdWx0OgotCQkJcmV0dXJuIHNhYTcxOTFfc2V0X25vcm0oY2xpZW50LCAqbm9ybSk7Ci0JCX0KLQl9Ci0JY2FzZSBERUNPREVSX1NBQTcxOTFfR0VUX0NPTlRST0w6IHsKLQkJcmV0dXJuIHNhYTcxOTFfZ2V0X2NvbnRyb2woY2xpZW50LCBhcmcpOwotCX0KLQljYXNlIERFQ09ERVJfU0FBNzE5MV9TRVRfQ09OVFJPTDogewotCQlyZXR1cm4gc2FhNzE5MV9zZXRfY29udHJvbChjbGllbnQsIGFyZyk7Ci0JfQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgc3RydWN0IGkyY19kcml2ZXIgaTJjX2RyaXZlcl9zYWE3MTkxID0gewotCS5kcml2ZXIgPSB7Ci0JCS5uYW1lIAk9ICJzYWE3MTkxIiwKLQl9LAotCS5pZAkJPSBJMkNfRFJJVkVSSURfU0FBNzE5MSwKLQkuYXR0YWNoX2FkYXB0ZXIgPSBzYWE3MTkxX3Byb2JlLAotCS5kZXRhY2hfY2xpZW50CT0gc2FhNzE5MV9kZXRhY2gsCi0JLmNvbW1hbmQJPSBzYWE3MTkxX2NvbW1hbmQKK3N0YXRpYyBpbnQgc2FhNzE5MV9yZW1vdmUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3sKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodG9fc2FhNzE5MShzZCkpOworCXJldHVybiAwOworfQorCitzdGF0aWMgY29uc3Qgc3RydWN0IGkyY19kZXZpY2VfaWQgc2FhNzE5MV9pZFtdID0geworCXsgInNhYTcxOTEiLCAwIH0sCisJeyB9CiB9OworTU9EVUxFX0RFVklDRV9UQUJMRShpMmMsIHNhYTcxOTFfaWQpOwogCi1zdGF0aWMgaW50IHNhYTcxOTFfaW5pdCh2b2lkKQotewotCXJldHVybiBpMmNfYWRkX2RyaXZlcigmaTJjX2RyaXZlcl9zYWE3MTkxKTsKLX0KLQotc3RhdGljIHZvaWQgc2FhNzE5MV9leGl0KHZvaWQpCi17Ci0JaTJjX2RlbF9kcml2ZXIoJmkyY19kcml2ZXJfc2FhNzE5MSk7Ci19Ci0KLW1vZHVsZV9pbml0KHNhYTcxOTFfaW5pdCk7Ci1tb2R1bGVfZXhpdChzYWE3MTkxX2V4aXQpOworc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0geworCS5uYW1lID0gInNhYTcxOTEiLAorCS5wcm9iZSA9IHNhYTcxOTFfcHJvYmUsCisJLnJlbW92ZSA9IHNhYTcxOTFfcmVtb3ZlLAorCS5pZF90YWJsZSA9IHNhYTcxOTFfaWQsCit9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zYWE3MTkxLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxOTEuaAppbmRleCBhMjMxMGRhLi44MDNjNzRkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxOTEuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NhYTcxOTEuaApAQCAtMTc2LDExICsxNzYsOSBAQAogI2RlZmluZSBTQUE3MTkxX0lOUFVUX0NPTVBPU0lURQkwCiAjZGVmaW5lIFNBQTcxOTFfSU5QVVRfU1ZJREVPCTEKIAotI2RlZmluZSBTQUE3MTkxX05PUk1fQVVUTwkwCiAjZGVmaW5lIFNBQTcxOTFfTk9STV9QQUwJMQogI2RlZmluZSBTQUE3MTkxX05PUk1fTlRTQwkyCiAjZGVmaW5lIFNBQTcxOTFfTk9STV9TRUNBTQkzCi0jZGVmaW5lIFNBQTcxOTFfTk9STV9BVVRPX0VYVAk0CS8qIGV4dGVuZGVkIGF1dG8tZGV0ZWN0aW9uICovCiAKIHN0cnVjdCBzYWE3MTkxX3N0YXR1cyB7CiAJLyogMD1ubyBzaWduYWwsIDE9c2lnbmFsIGRldGVjdGVkICovCkBAIC0yMzIsMjQgKzIzMCwxNiBAQAogI2RlZmluZSBTQUE3MTkxX1ZOUl9NQVgJCQkweDAzCiAjZGVmaW5lIFNBQTcxOTFfVk5SX0RFRkFVTFQJCTB4MDAKIAotI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfQkFORFBBU1MJMAotI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfQkFORFBBU1NfV0VJR0hUCTEKLSNkZWZpbmUgU0FBNzE5MV9DT05UUk9MX0NPUklORwkJMgotI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfRk9SQ0VfQ09MT1VSCTMJLyogYm9vbGVhbiAqLwotI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfQ0hST01BX0dBSU4JNAotI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfSFVFCQk1Ci0jZGVmaW5lIFNBQTcxOTFfQ09OVFJPTF9WVFJDCQk2CS8qIGJvb2xlYW4gKi8KLSNkZWZpbmUgU0FBNzE5MV9DT05UUk9MX0xVTUFfREVMQVkJNwotI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfVk5SCQk4Ci0KLXN0cnVjdCBzYWE3MTkxX2NvbnRyb2wgewotCXU4IHR5cGU7Ci0JczMyIHZhbHVlOwotfTsKKyNkZWZpbmUgU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTCShWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAwKQorI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfQkFORFBBU1NfV0VJR0hUCShWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAxKQorI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfQ09SSU5HCQkoVjRMMl9DSURfUFJJVkFURV9CQVNFICsgMikKKyNkZWZpbmUgU0FBNzE5MV9DT05UUk9MX0ZPUkNFX0NPTE9VUgkoVjRMMl9DSURfUFJJVkFURV9CQVNFICsgMykKKyNkZWZpbmUgU0FBNzE5MV9DT05UUk9MX0NIUk9NQV9HQUlOCShWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyA0KQorI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfVlRSQwkJKFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDUpCisjZGVmaW5lIFNBQTcxOTFfQ09OVFJPTF9MVU1BX0RFTEFZCShWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyA2KQorI2RlZmluZSBTQUE3MTkxX0NPTlRST0xfVk5SCQkoVjRMMl9DSURfUFJJVkFURV9CQVNFICsgNykKIAogI2RlZmluZQlERUNPREVSX1NBQTcxOTFfR0VUX1NUQVRVUwlfSU9SKCdkJywgMTk1LCBzdHJ1Y3Qgc2FhNzE5MV9zdGF0dXMpCiAjZGVmaW5lCURFQ09ERVJfU0FBNzE5MV9TRVRfTk9STQlfSU9XKCdkJywgMTk2LCBpbnQpCi0jZGVmaW5lCURFQ09ERVJfU0FBNzE5MV9HRVRfQ09OVFJPTAlfSU9SKCdkJywgMTk3LCBzdHJ1Y3Qgc2FhNzE5MV9jb250cm9sKQotI2RlZmluZQlERUNPREVSX1NBQTcxOTFfU0VUX0NPTlRST0wJX0lPVygnZCcsIDE5OCwgc3RydWN0IHNhYTcxOTFfY29udHJvbCkKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NoX21vYmlsZV9jZXVfY2FtZXJhLmMKaW5kZXggZGRjYjgxZC4uYjVlMzdhNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby9zaF9tb2JpbGVfY2V1X2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc2hfbW9iaWxlX2NldV9jYW1lcmEuYwpAQCAtOTQsMTMgKzk0LDM3IEBACiAJc3BpbmxvY2tfdCBsb2NrOwogCXN0cnVjdCBsaXN0X2hlYWQgY2FwdHVyZTsKIAlzdHJ1Y3QgdmlkZW9idWZfYnVmZmVyICphY3RpdmU7Ci0JaW50IGlzX2ludGVybGFjZTsKKwlpbnQgaXNfaW50ZXJsYWNlZDsKIAogCXN0cnVjdCBzaF9tb2JpbGVfY2V1X2luZm8gKnBkYXRhOwogCiAJY29uc3Qgc3RydWN0IHNvY19jYW1lcmFfZGF0YV9mb3JtYXQgKmNhbWVyYV9mbXQ7CiB9OwogCitzdGF0aWMgdW5zaWduZWQgbG9uZyBtYWtlX2J1c19wYXJhbShzdHJ1Y3Qgc2hfbW9iaWxlX2NldV9kZXYgKnBjZGV2KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlmbGFncyA9IFNPQ0FNX01BU1RFUiB8CisJCVNPQ0FNX1BDTEtfU0FNUExFX1JJU0lORyB8CisJCVNPQ0FNX0hTWU5DX0FDVElWRV9ISUdIIHwKKwkJU09DQU1fSFNZTkNfQUNUSVZFX0xPVyB8CisJCVNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwKKwkJU09DQU1fVlNZTkNfQUNUSVZFX0xPVyB8CisJCVNPQ0FNX0RBVEFfQUNUSVZFX0hJR0g7CisKKwlpZiAocGNkZXYtPnBkYXRhLT5mbGFncyAmIFNIX0NFVV9GTEFHX1VTRV84QklUX0JVUykKKwkJZmxhZ3MgfD0gU09DQU1fREFUQVdJRFRIXzg7CisKKwlpZiAocGNkZXYtPnBkYXRhLT5mbGFncyAmIFNIX0NFVV9GTEFHX1VTRV8xNkJJVF9CVVMpCisJCWZsYWdzIHw9IFNPQ0FNX0RBVEFXSURUSF8xNjsKKworCWlmIChmbGFncyAmIFNPQ0FNX0RBVEFXSURUSF9NQVNLKQorCQlyZXR1cm4gZmxhZ3M7CisKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIHZvaWQgY2V1X3dyaXRlKHN0cnVjdCBzaF9tb2JpbGVfY2V1X2RldiAqcHJpdiwKIAkJICAgICAgdW5zaWduZWQgbG9uZyByZWdfb2ZmcywgdTMyIGRhdGEpCiB7CkBAIC0xNTAsNiArMTc0LDcgQEAKIAlpZiAoaW5faW50ZXJydXB0KCkpCiAJCUJVRygpOwogCisJdmlkZW9idWZfd2FpdG9uKCZidWYtPnZiLCAwLCAwKTsKIAl2aWRlb2J1Zl9kbWFfY29udGlnX2ZyZWUodnEsICZidWYtPnZiKTsKIAlkZXZfZGJnKCZpY2QtPmRldiwgIiVzIGZyZWVkXG4iLCBfX2Z1bmNfXyk7CiAJYnVmLT52Yi5zdGF0ZSA9IFZJREVPQlVGX05FRURTX0lOSVQ7CkBAIC0xODEsNyArMjA2LDcgQEAKIAogCXBoeXNfYWRkcl90b3AgPSB2aWRlb2J1Zl90b19kbWFfY29udGlnKHBjZGV2LT5hY3RpdmUpOwogCWNldV93cml0ZShwY2RldiwgQ0RBWVIsIHBoeXNfYWRkcl90b3ApOwotCWlmIChwY2Rldi0+aXNfaW50ZXJsYWNlKSB7CisJaWYgKHBjZGV2LT5pc19pbnRlcmxhY2VkKSB7CiAJCXBoeXNfYWRkcl9ib3R0b20gPSBwaHlzX2FkZHJfdG9wICsgaWNkLT53aWR0aDsKIAkJY2V1X3dyaXRlKHBjZGV2LCBDREJZUiwgcGh5c19hZGRyX2JvdHRvbSk7CiAJfQpAQCAtMTkzLDcgKzIxOCw3IEBACiAJY2FzZSBWNEwyX1BJWF9GTVRfTlY2MToKIAkJcGh5c19hZGRyX3RvcCArPSBpY2QtPndpZHRoICogaWNkLT5oZWlnaHQ7CiAJCWNldV93cml0ZShwY2RldiwgQ0RBQ1IsIHBoeXNfYWRkcl90b3ApOwotCQlpZiAocGNkZXYtPmlzX2ludGVybGFjZSkgeworCQlpZiAocGNkZXYtPmlzX2ludGVybGFjZWQpIHsKIAkJCXBoeXNfYWRkcl9ib3R0b20gPSBwaHlzX2FkZHJfdG9wICsgaWNkLT53aWR0aDsKIAkJCWNldV93cml0ZShwY2RldiwgQ0RCQ1IsIHBoeXNfYWRkcl9ib3R0b20pOwogCQl9CkBAIC0zOTYsNyArNDIxLDcgQEAKIAogCWNhbWVyYV9mbGFncyA9IGljZC0+b3BzLT5xdWVyeV9idXNfcGFyYW0oaWNkKTsKIAljb21tb25fZmxhZ3MgPSBzb2NfY2FtZXJhX2J1c19wYXJhbV9jb21wYXRpYmxlKGNhbWVyYV9mbGFncywKLQkJCQkJCSAgICAgICBwY2Rldi0+cGRhdGEtPmZsYWdzKTsKKwkJCQkJCSAgICAgICBtYWtlX2J1c19wYXJhbShwY2RldikpOwogCWlmICghY29tbW9uX2ZsYWdzKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtNDU3LDcgKzQ4Miw3IEBACiAJY2V1X3dyaXRlKHBjZGV2LCBDQU1DUiwgdmFsdWUpOwogCiAJY2V1X3dyaXRlKHBjZGV2LCBDQVBDUiwgMHgwMDMwMDAwMCk7Ci0JY2V1X3dyaXRlKHBjZGV2LCBDQUlGUiwgKHBjZGV2LT5pc19pbnRlcmxhY2UpID8gMHgxMDEgOiAwKTsKKwljZXVfd3JpdGUocGNkZXYsIENBSUZSLCBwY2Rldi0+aXNfaW50ZXJsYWNlZCA/IDB4MTAxIDogMCk7CiAKIAltZGVsYXkoMSk7CiAKQEAgLTQ3Myw3ICs0OTgsNyBAQAogCX0KIAogCWhlaWdodCA9IGljZC0+aGVpZ2h0OwotCWlmIChwY2Rldi0+aXNfaW50ZXJsYWNlKSB7CisJaWYgKHBjZGV2LT5pc19pbnRlcmxhY2VkKSB7CiAJCWhlaWdodCAvPSAyOwogCQljZHdkcl93aWR0aCAqPSAyOwogCX0KQEAgLTUxNyw3ICs1NDIsNyBAQAogCiAJY2FtZXJhX2ZsYWdzID0gaWNkLT5vcHMtPnF1ZXJ5X2J1c19wYXJhbShpY2QpOwogCWNvbW1vbl9mbGFncyA9IHNvY19jYW1lcmFfYnVzX3BhcmFtX2NvbXBhdGlibGUoY2FtZXJhX2ZsYWdzLAotCQkJCQkJICAgICAgIHBjZGV2LT5wZGF0YS0+ZmxhZ3MpOworCQkJCQkJICAgICAgIG1ha2VfYnVzX3BhcmFtKHBjZGV2KSk7CiAJaWYgKCFjb21tb25fZmxhZ3MpCiAJCXJldHVybiAtRUlOVkFMOwogCkBAIC01NjIsMTEgKzU4NywyOSBAQAogCWlmIChyZXQgPCAwKQogCQlyZXR1cm4gMDsKIAorCS8qIEJlZ2lubmluZyBvZiBhIHBhc3MgKi8KKwlpZiAoIWlkeCkKKwkJaWNkLT5ob3N0X3ByaXYgPSBOVUxMOworCiAJc3dpdGNoIChpY2QtPmZvcm1hdHNbaWR4XS5mb3VyY2MpIHsKIAljYXNlIFY0TDJfUElYX0ZNVF9VWVZZOgogCWNhc2UgVjRMMl9QSVhfRk1UX1ZZVVk6CiAJY2FzZSBWNEwyX1BJWF9GTVRfWVVZVjoKIAljYXNlIFY0TDJfUElYX0ZNVF9ZVllVOgorCQlpZiAoaWNkLT5ob3N0X3ByaXYpCisJCQlnb3RvIGFkZF9zaW5nbGVfZm9ybWF0OworCisJCS8qCisJCSAqIE91ciBjYXNlIGlzIHNpbXBsZSBzbyBmYXI6IGZvciBhbnkgb2YgdGhlIGFib3ZlIGZvdXIgY2FtZXJhCisJCSAqIGZvcm1hdHMgd2UgYWRkIGFsbCBvdXIgZm91ciBzeW50aGVzaXplZCBOViogZm9ybWF0cywgc28sCisJCSAqIGp1c3QgbWFya2luZyB0aGUgZGV2aWNlIHdpdGggYSBzaW5nbGUgZmxhZyBzdWZmaWNlcy4gSWYKKwkJICogdGhlIGZvcm1hdCBnZW5lcmF0aW9uIHJ1bGVzIGFyZSBtb3JlIGNvbXBsZXgsIHlvdSB3b3VsZCBoYXZlCisJCSAqIHRvIGFjdHVhbGx5IGhhbmcgeW91ciBhbHJlYWR5IGFkZGVkIC8gY291bnRlZCBmb3JtYXRzIG9udG8KKwkJICogdGhlIGhvc3RfcHJpdiBwb2ludGVyIGFuZCBjaGVjayB3aGV0aGVyIHRoZSBmb3JtYXQgeW91J3JlCisJCSAqIGdvaW5nIHRvIGFkZCBub3cgaXMgYWxyZWFkeSB0aGVyZS4KKwkJICovCisJCWljZC0+aG9zdF9wcml2ID0gKHZvaWQgKilzaF9tb2JpbGVfY2V1X2Zvcm1hdHM7CisKIAkJbiA9IEFSUkFZX1NJWkUoc2hfbW9iaWxlX2NldV9mb3JtYXRzKTsKIAkJZm9ybWF0cyArPSBuOwogCQlmb3IgKGsgPSAwOyB4bGF0ZSAmJiBrIDwgbjsgaysrKSB7CkBAIC01NzksNiArNjIyLDcgQEAKIAkJCQlpY2QtPmZvcm1hdHNbaWR4XS5uYW1lKTsKIAkJfQogCWRlZmF1bHQ6CithZGRfc2luZ2xlX2Zvcm1hdDoKIAkJLyogR2VuZXJpYyBwYXNzLXRocm91Z2ggKi8KIAkJZm9ybWF0cysrOwogCQlpZiAoeGxhdGUpIHsKQEAgLTU5NSwyNCArNjM5LDMwIEBACiAJcmV0dXJuIGZvcm1hdHM7CiB9CiAKK3N0YXRpYyBpbnQgc2hfbW9iaWxlX2NldV9zZXRfY3JvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCQkgIHN0cnVjdCB2NGwyX3JlY3QgKnJlY3QpCit7CisJcmV0dXJuIGljZC0+b3BzLT5zZXRfY3JvcChpY2QsIHJlY3QpOworfQorCiBzdGF0aWMgaW50IHNoX21vYmlsZV9jZXVfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKLQkJCQkgX191MzIgcGl4Zm10LCBzdHJ1Y3QgdjRsMl9yZWN0ICpyZWN0KQorCQkJCSBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CiAJc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7CiAJc3RydWN0IHNoX21vYmlsZV9jZXVfZGV2ICpwY2RldiA9IGljaS0+cHJpdjsKKwlfX3UzMiBwaXhmbXQgPSBmLT5mbXQucGl4LnBpeGVsZm9ybWF0OwogCWNvbnN0IHN0cnVjdCBzb2NfY2FtZXJhX2Zvcm1hdF94bGF0ZSAqeGxhdGU7CisJc3RydWN0IHY0bDJfZm9ybWF0IGNhbV9mID0gKmY7CiAJaW50IHJldDsKIAotCWlmICghcGl4Zm10KQotCQlyZXR1cm4gaWNkLT5vcHMtPnNldF9mbXQoaWNkLCBwaXhmbXQsIHJlY3QpOwotCiAJeGxhdGUgPSBzb2NfY2FtZXJhX3hsYXRlX2J5X2ZvdXJjYyhpY2QsIHBpeGZtdCk7CiAJaWYgKCF4bGF0ZSkgewogCQlkZXZfd2FybigmaWNpLT5kZXYsICJGb3JtYXQgJXggbm90IGZvdW5kXG4iLCBwaXhmbXQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlyZXQgPSBpY2QtPm9wcy0+c2V0X2ZtdChpY2QsIHhsYXRlLT5jYW1fZm10LT5mb3VyY2MsIHJlY3QpOworCWNhbV9mLmZtdC5waXgucGl4ZWxmb3JtYXQgPSB4bGF0ZS0+Y2FtX2ZtdC0+Zm91cmNjOworCXJldCA9IGljZC0+b3BzLT5zZXRfZm10KGljZCwgJmNhbV9mKTsKIAogCWlmICghcmV0KSB7CiAJCWljZC0+YnVzd2lkdGggPSB4bGF0ZS0+YnVzd2lkdGg7CkBAIC02NjIsMTMgKzcxMiwxMyBAQAogCiAJc3dpdGNoIChmLT5mbXQucGl4LmZpZWxkKSB7CiAJY2FzZSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ6Ci0JCXBjZGV2LT5pc19pbnRlcmxhY2UgPSAxOworCQlwY2Rldi0+aXNfaW50ZXJsYWNlZCA9IDE7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9GSUVMRF9BTlk6CiAJCWYtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CiAJCS8qIGZhbGwtdGhyb3VnaCAqLwogCWNhc2UgVjRMMl9GSUVMRF9OT05FOgotCQlwY2Rldi0+aXNfaW50ZXJsYWNlID0gMDsKKwkJcGNkZXYtPmlzX2ludGVybGFjZWQgPSAwOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlyZXQgPSAtRUlOVkFMOwpAQCAtNzM0LDcgKzc4NCw4IEBACiAJCQkJICAgICAgICZzaF9tb2JpbGVfY2V1X3ZpZGVvYnVmX29wcywKIAkJCQkgICAgICAgJmljaS0+ZGV2LCAmcGNkZXYtPmxvY2ssCiAJCQkJICAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSwKLQkJCQkgICAgICAgVjRMMl9GSUVMRF9BTlksCisJCQkJICAgICAgIHBjZGV2LT5pc19pbnRlcmxhY2VkID8KKwkJCQkgICAgICAgVjRMMl9GSUVMRF9JTlRFUkxBQ0VEIDogVjRMMl9GSUVMRF9OT05FLAogCQkJCSAgICAgICBzaXplb2Yoc3RydWN0IHNoX21vYmlsZV9jZXVfYnVmZmVyKSwKIAkJCQkgICAgICAgaWNkKTsKIH0KQEAgLTc0NCw2ICs3OTUsNyBAQAogCS5hZGQJCT0gc2hfbW9iaWxlX2NldV9hZGRfZGV2aWNlLAogCS5yZW1vdmUJCT0gc2hfbW9iaWxlX2NldV9yZW1vdmVfZGV2aWNlLAogCS5nZXRfZm9ybWF0cwk9IHNoX21vYmlsZV9jZXVfZ2V0X2Zvcm1hdHMsCisJLnNldF9jcm9wCT0gc2hfbW9iaWxlX2NldV9zZXRfY3JvcCwKIAkuc2V0X2ZtdAk9IHNoX21vYmlsZV9jZXVfc2V0X2ZtdCwKIAkudHJ5X2ZtdAk9IHNoX21vYmlsZV9jZXVfdHJ5X2ZtdCwKIAkucmVxYnVmcwk9IHNoX21vYmlsZV9jZXVfcmVxYnVmcywKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2RldnRhYmxlLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3NuOWMxMDIvc245YzEwMl9kZXZ0YWJsZS5oCmluZGV4IDhjYjM0NTcuLjM4YTcxNjAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc245YzEwMi9zbjljMTAyX2RldnRhYmxlLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby9zbjljMTAyL3NuOWMxMDJfZGV2dGFibGUuaApAQCAtOTYsOSArOTYsNyBAQAogI2lmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0EgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQV9NT0RVTEUKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDA0NWUsIDB4MDBmNSwgQlJJREdFX1NOOUMxMDUpLCB9LAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MDQ1ZSwgMHgwMGY3LCBCUklER0VfU045QzEwNSksIH0sCi0jZW5kaWYKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDA0NzEsIDB4MDMyNywgQlJJREdFX1NOOUMxMDUpLCB9LAotI2lmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0EgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQV9NT0RVTEUKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDA0NzEsIDB4MDMyOCwgQlJJREdFX1NOOUMxMDUpLCB9LAogI2VuZGlmCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYwYzAsIEJSSURHRV9TTjlDMTA1KSwgfSwKQEAgLTEyMyw3ICsxMjEsOSBAQAogCXsgU045QzEwMl9VU0JfREVWSUNFKDB4MGM0NSwgMHg2MTNhLCBCUklER0VfU045QzEyMCksIH0sCiAjZW5kaWYKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjEzYiwgQlJJREdFX1NOOUMxMjApLCB9LAorI2lmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0EgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQV9NT0RVTEUKIAl7IFNOOUMxMDJfVVNCX0RFVklDRSgweDBjNDUsIDB4NjEzYywgQlJJREdFX1NOOUMxMjApLCB9LAorI2VuZGlmCiAJeyBTTjlDMTAyX1VTQl9ERVZJQ0UoMHgwYzQ1LCAweDYxM2UsIEJSSURHRV9TTjlDMTIwKSwgfSwKIAl7IH0KIH07CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCmluZGV4IGZjYjA1ZjAuLjZkOGJmZDQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYS5jCkBAIC0zMCw2ICszMCwxMCBAQAogI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLWNvcmUuaD4KICNpbmNsdWRlIDxtZWRpYS9zb2NfY2FtZXJhLmg+CiAKKy8qIERlZmF1bHQgdG8gVkdBIHJlc29sdXRpb24gKi8KKyNkZWZpbmUgREVGQVVMVF9XSURUSAk2NDAKKyNkZWZpbmUgREVGQVVMVF9IRUlHSFQJNDgwCisKIHN0YXRpYyBMSVNUX0hFQUQoaG9zdHMpOwogc3RhdGljIExJU1RfSEVBRChkZXZpY2VzKTsKIHN0YXRpYyBERUZJTkVfTVVURVgobGlzdF9sb2NrKTsKQEAgLTI1Niw2ICsyNjAsNDYgQEAKIAl2ZnJlZShpY2QtPnVzZXJfZm9ybWF0cyk7CiB9CiAKKy8qIENhbGxlZCB3aXRoIC52Yl9sb2NrIGhlbGQgKi8KK3N0YXRpYyBpbnQgc29jX2NhbWVyYV9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2ZpbGUgKmljZiwKKwkJCSAgICAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCA9IGljZi0+aWNkOworCXN0cnVjdCBzb2NfY2FtZXJhX2hvc3QgKmljaSA9IHRvX3NvY19jYW1lcmFfaG9zdChpY2QtPmRldi5wYXJlbnQpOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBpeCA9ICZmLT5mbXQucGl4OworCWludCByZXQ7CisKKwkvKiBXZSBhbHdheXMgY2FsbCB0cnlfZm10KCkgYmVmb3JlIHNldF9mbXQoKSBvciBzZXRfY3JvcCgpICovCisJcmV0ID0gaWNpLT5vcHMtPnRyeV9mbXQoaWNkLCBmKTsKKwlpZiAocmV0IDwgMCkKKwkJcmV0dXJuIHJldDsKKworCXJldCA9IGljaS0+b3BzLT5zZXRfZm10KGljZCwgZik7CisJaWYgKHJldCA8IDApIHsKKwkJcmV0dXJuIHJldDsKKwl9IGVsc2UgaWYgKCFpY2QtPmN1cnJlbnRfZm10IHx8CisJCSAgIGljZC0+Y3VycmVudF9mbXQtPmZvdXJjYyAhPSBwaXgtPnBpeGVsZm9ybWF0KSB7CisJCWRldl9lcnIoJmljaS0+ZGV2LAorCQkJIkhvc3QgZHJpdmVyIGhhc24ndCBzZXQgdXAgY3VycmVudCBmb3JtYXQgY29ycmVjdGx5IVxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWljZC0+d2lkdGgJCT0gcGl4LT53aWR0aDsKKwlpY2QtPmhlaWdodAkJPSBwaXgtPmhlaWdodDsKKwlpY2YtPnZiX3ZpZHEuZmllbGQJPQorCQlpY2QtPmZpZWxkCT0gcGl4LT5maWVsZDsKKworCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKKwkJZGV2X3dhcm4oJmljZC0+ZGV2LCAiQXR0ZW50aW9uISBXcm9uZyBidWYtdHlwZSAlZFxuIiwKKwkJCSBmLT50eXBlKTsKKworCWRldl9kYmcoJmljZC0+ZGV2LCAic2V0IHdpZHRoOiAlZCBoZWlnaHQ6ICVkXG4iLAorCQlpY2QtPndpZHRoLCBpY2QtPmhlaWdodCk7CisKKwkvKiBzZXQgcGh5c2ljYWwgYnVzIHBhcmFtZXRlcnMgKi8KKwlyZXR1cm4gaWNpLT5vcHMtPnNldF9idXNfcGFyYW0oaWNkLCBwaXgtPnBpeGVsZm9ybWF0KTsKK30KKwogc3RhdGljIGludCBzb2NfY2FtZXJhX29wZW4oc3RydWN0IGZpbGUgKmZpbGUpCiB7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsKQEAgLTI5NywxNCArMzQxLDI4IEBACiAKIAkvKiBOb3cgd2UgcmVhbGx5IGhhdmUgdG8gYWN0aXZhdGUgdGhlIGNhbWVyYSAqLwogCWlmIChpY2QtPnVzZV9jb3VudCA9PSAxKSB7Ci0JCXJldCA9IHNvY19jYW1lcmFfaW5pdF91c2VyX2Zvcm1hdHMoaWNkKTsKLQkJaWYgKHJldCA8IDApCi0JCQlnb3RvIGVpdWZtdDsKKwkJLyogUmVzdG9yZSBwYXJhbWV0ZXJzIGJlZm9yZSB0aGUgbGFzdCBjbG9zZSgpIHBlciBWNEwyIEFQSSAqLworCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgZiA9IHsKKwkJCS50eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFLAorCQkJLmZtdC5waXggPSB7CisJCQkJLndpZHRoCQk9IGljZC0+d2lkdGgsCisJCQkJLmhlaWdodAkJPSBpY2QtPmhlaWdodCwKKwkJCQkuZmllbGQJCT0gaWNkLT5maWVsZCwKKwkJCQkucGl4ZWxmb3JtYXQJPSBpY2QtPmN1cnJlbnRfZm10LT5mb3VyY2MsCisJCQkJLmNvbG9yc3BhY2UJPSBpY2QtPmN1cnJlbnRfZm10LT5jb2xvcnNwYWNlLAorCQkJfSwKKwkJfTsKKwogCQlyZXQgPSBpY2ktPm9wcy0+YWRkKGljZCk7CiAJCWlmIChyZXQgPCAwKSB7CiAJCQlkZXZfZXJyKCZpY2QtPmRldiwgIkNvdWxkbid0IGFjdGl2YXRlIHRoZSBjYW1lcmE6ICVkXG4iLCByZXQpOwogCQkJZ290byBlaWNpYWRkOwogCQl9CisKKwkJLyogVHJ5IHRvIGNvbmZpZ3VyZSB3aXRoIGRlZmF1bHQgcGFyYW1ldGVycyAqLworCQlyZXQgPSBzb2NfY2FtZXJhX3NldF9mbXQoaWNmLCAmZik7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBlc2ZtdDsKIAl9CiAKIAltdXRleF91bmxvY2soJmljZC0+dmlkZW9fbG9jayk7CkBAIC0zMTYsMTAgKzM3NCwxMyBAQAogCiAJcmV0dXJuIDA7CiAKLQkvKiBGaXJzdCB0d28gZXJyb3JzIGFyZSBlbnRlcmVkIHdpdGggdGhlIC52aWRlb19sb2NrIGhlbGQgKi8KKwkvKgorCSAqIEZpcnN0IHRocmVlIGVycm9ycyBhcmUgZW50ZXJlZCB3aXRoIHRoZSAudmlkZW9fbG9jayBoZWxkCisJICogYW5kIHVzZV9jb3VudCA9PSAxCisJICovCitlc2ZtdDoKKwlpY2ktPm9wcy0+cmVtb3ZlKGljZCk7CiBlaWNpYWRkOgotCXNvY19jYW1lcmFfZnJlZV91c2VyX2Zvcm1hdHMoaWNkKTsKLWVpdWZtdDoKIAlpY2QtPnVzZV9jb3VudC0tOwogCW11dGV4X3VubG9jaygmaWNkLT52aWRlb19sb2NrKTsKIAltb2R1bGVfcHV0KGljaS0+b3BzLT5vd25lcik7CkBAIC0zMzksMTAgKzQwMCw5IEBACiAKIAltdXRleF9sb2NrKCZpY2QtPnZpZGVvX2xvY2spOwogCWljZC0+dXNlX2NvdW50LS07Ci0JaWYgKCFpY2QtPnVzZV9jb3VudCkgeworCWlmICghaWNkLT51c2VfY291bnQpCiAJCWljaS0+b3BzLT5yZW1vdmUoaWNkKTsKLQkJc29jX2NhbWVyYV9mcmVlX3VzZXJfZm9ybWF0cyhpY2QpOwotCX0KKwogCW11dGV4X3VubG9jaygmaWNkLT52aWRlb19sb2NrKTsKIAogCW1vZHVsZV9wdXQoaWNkLT5vcHMtPm93bmVyKTsKQEAgLTQxNSwxOCArNDc1LDEwIEBACiB7CiAJc3RydWN0IHNvY19jYW1lcmFfZmlsZSAqaWNmID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkID0gaWNmLT5pY2Q7Ci0Jc3RydWN0IHNvY19jYW1lcmFfaG9zdCAqaWNpID0gdG9fc29jX2NhbWVyYV9ob3N0KGljZC0+ZGV2LnBhcmVudCk7Ci0Jc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7Ci0JX191MzIgcGl4Zm10ID0gcGl4LT5waXhlbGZvcm1hdDsKIAlpbnQgcmV0OwotCXN0cnVjdCB2NGwyX3JlY3QgcmVjdDsKIAogCVdBUk5fT04ocHJpdiAhPSBmaWxlLT5wcml2YXRlX2RhdGEpOwogCi0JcmV0ID0gc29jX2NhbWVyYV90cnlfZm10X3ZpZF9jYXAoZmlsZSwgcHJpdiwgZik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiByZXQ7Ci0KIAltdXRleF9sb2NrKCZpY2YtPnZiX3ZpZHEudmJfbG9jayk7CiAKIAlpZiAodmlkZW9idWZfcXVldWVfaXNfYnVzeSgmaWNmLT52Yl92aWRxKSkgewpAQCAtNDM1LDMzICs0ODcsNyBAQAogCQlnb3RvIHVubG9jazsKIAl9CiAKLQlyZWN0LmxlZnQJPSBpY2QtPnhfY3VycmVudDsKLQlyZWN0LnRvcAk9IGljZC0+eV9jdXJyZW50OwotCXJlY3Qud2lkdGgJPSBwaXgtPndpZHRoOwotCXJlY3QuaGVpZ2h0CT0gcGl4LT5oZWlnaHQ7Ci0JcmV0ID0gaWNpLT5vcHMtPnNldF9mbXQoaWNkLCBwaXgtPnBpeGVsZm9ybWF0LCAmcmVjdCk7Ci0JaWYgKHJldCA8IDApIHsKLQkJZ290byB1bmxvY2s7Ci0JfSBlbHNlIGlmICghaWNkLT5jdXJyZW50X2ZtdCB8fAotCQkgICBpY2QtPmN1cnJlbnRfZm10LT5mb3VyY2MgIT0gcGl4Zm10KSB7Ci0JCWRldl9lcnIoJmljaS0+ZGV2LAotCQkJIkhvc3QgZHJpdmVyIGhhc24ndCBzZXQgdXAgY3VycmVudCBmb3JtYXQgY29ycmVjdGx5IVxuIik7Ci0JCXJldCA9IC1FSU5WQUw7Ci0JCWdvdG8gdW5sb2NrOwotCX0KLQotCWljZC0+d2lkdGgJCT0gcmVjdC53aWR0aDsKLQlpY2QtPmhlaWdodAkJPSByZWN0LmhlaWdodDsKLQlpY2YtPnZiX3ZpZHEuZmllbGQJPSBwaXgtPmZpZWxkOwotCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJZGV2X3dhcm4oJmljZC0+ZGV2LCAiQXR0ZW50aW9uISBXcm9uZyBidWYtdHlwZSAlZFxuIiwKLQkJCSBmLT50eXBlKTsKLQotCWRldl9kYmcoJmljZC0+ZGV2LCAic2V0IHdpZHRoOiAlZCBoZWlnaHQ6ICVkXG4iLAotCQlpY2QtPndpZHRoLCBpY2QtPmhlaWdodCk7Ci0KLQkvKiBzZXQgcGh5c2ljYWwgYnVzIHBhcmFtZXRlcnMgKi8KLQlyZXQgPSBpY2ktPm9wcy0+c2V0X2J1c19wYXJhbShpY2QsIHBpeGZtdCk7CisJcmV0ID0gc29jX2NhbWVyYV9zZXRfZm10KGljZiwgZik7CiAKIHVubG9jazoKIAltdXRleF91bmxvY2soJmljZi0+dmJfdmlkcS52Yl9sb2NrKTsKQEAgLTY0OCw4ICs2NzQsOCBAQAogCWEtPmJvdW5kcy5oZWlnaHQJCT0gaWNkLT5oZWlnaHRfbWF4OwogCWEtPmRlZnJlY3QubGVmdAkJCT0gaWNkLT54X21pbjsKIAlhLT5kZWZyZWN0LnRvcAkJCT0gaWNkLT55X21pbjsKLQlhLT5kZWZyZWN0LndpZHRoCQk9IDY0MDsKLQlhLT5kZWZyZWN0LmhlaWdodAkJPSA0ODA7CisJYS0+ZGVmcmVjdC53aWR0aAkJPSBERUZBVUxUX1dJRFRIOworCWEtPmRlZnJlY3QuaGVpZ2h0CQk9IERFRkFVTFRfSEVJR0hUOwogCWEtPnBpeGVsYXNwZWN0Lm51bWVyYXRvcgk9IDE7CiAJYS0+cGl4ZWxhc3BlY3QuZGVub21pbmF0b3IJPSAxOwogCkBAIC02ODUsNyArNzExLDcgQEAKIAkvKiBDcm9wcGluZyBpcyBhbGxvd2VkIGR1cmluZyBhIHJ1bm5pbmcgY2FwdHVyZSwgZ3VhcmQgY29uc2lzdGVuY3kgKi8KIAltdXRleF9sb2NrKCZpY2YtPnZiX3ZpZHEudmJfbG9jayk7CiAKLQlyZXQgPSBpY2ktPm9wcy0+c2V0X2ZtdChpY2QsIDAsICZhLT5jKTsKKwlyZXQgPSBpY2ktPm9wcy0+c2V0X2Nyb3AoaWNkLCAmYS0+Yyk7CiAJaWYgKCFyZXQpIHsKIAkJaWNkLT53aWR0aAk9IGEtPmMud2lkdGg7CiAJCWljZC0+aGVpZ2h0CT0gYS0+Yy5oZWlnaHQ7CkBAIC04NDQsOSArODcwLDE4IEBACiAJCXFjdHJsID0gc29jX2NhbWVyYV9maW5kX3FjdHJsKGljZC0+b3BzLCBWNEwyX0NJRF9FWFBPU1VSRSk7CiAJCWljZC0+ZXhwb3N1cmUgPSBxY3RybCA/IHFjdHJsLT5kZWZhdWx0X3ZhbHVlIDoKIAkJCSh1bnNpZ25lZCBzaG9ydCl+MDsKLQl9Ci0JaWNpLT5vcHMtPnJlbW92ZShpY2QpOwogCisJCXJldCA9IHNvY19jYW1lcmFfaW5pdF91c2VyX2Zvcm1hdHMoaWNkKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVpdWZtdDsKKworCQlpY2QtPmhlaWdodAk9IERFRkFVTFRfSEVJR0hUOworCQlpY2QtPndpZHRoCT0gREVGQVVMVF9XSURUSDsKKwkJaWNkLT5maWVsZAk9IFY0TDJfRklFTERfQU5ZOworCX0KKworZWl1Zm10OgorCWljaS0+b3BzLT5yZW1vdmUoaWNkKTsKIGVpYWRkOgogCW11dGV4X3VubG9jaygmaWNkLT52aWRlb19sb2NrKTsKIAltb2R1bGVfcHV0KGljaS0+b3BzLT5vd25lcik7CkBAIC04NjUsNiArOTAwLDggQEAKIAlpZiAoaWNkLT5vcHMtPnJlbW92ZSkKIAkJaWNkLT5vcHMtPnJlbW92ZShpY2QpOwogCisJc29jX2NhbWVyYV9mcmVlX3VzZXJfZm9ybWF0cyhpY2QpOworCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTkxOCw2ICs5NTUsNyBAQAogCWlmICghaWNpIHx8ICFpY2ktPm9wcyB8fAogCSAgICAhaWNpLT5vcHMtPnRyeV9mbXQgfHwKIAkgICAgIWljaS0+b3BzLT5zZXRfZm10IHx8CisJICAgICFpY2ktPm9wcy0+c2V0X2Nyb3AgfHwKIAkgICAgIWljaS0+b3BzLT5zZXRfYnVzX3BhcmFtIHx8CiAJICAgICFpY2ktPm9wcy0+cXVlcnljYXAgfHwKIAkgICAgIWljaS0+b3BzLT5pbml0X3ZpZGVvYnVmIHx8CkBAIC05OTgsNiArMTAzNiw3IEBACiAJICAgICFpY2QtPm9wcy0+cmVsZWFzZSB8fAogCSAgICAhaWNkLT5vcHMtPnN0YXJ0X2NhcHR1cmUgfHwKIAkgICAgIWljZC0+b3BzLT5zdG9wX2NhcHR1cmUgfHwKKwkgICAgIWljZC0+b3BzLT5zZXRfY3JvcCB8fAogCSAgICAhaWNkLT5vcHMtPnNldF9mbXQgfHwKIAkgICAgIWljZC0+b3BzLT50cnlfZm10IHx8CiAJICAgICFpY2QtPm9wcy0+cXVlcnlfYnVzX3BhcmFtIHx8CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3NvY19jYW1lcmFfcGxhdGZvcm0uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jCmluZGV4IDAxM2FiMDYuLmM0ODY3NjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vc29jX2NhbWVyYV9wbGF0Zm9ybS5jCkBAIC03OSw4ICs3OSwxNCBAQAogCXJldHVybiBwLT5idXNfcGFyYW07CiB9CiAKK3N0YXRpYyBpbnQgc29jX2NhbWVyYV9wbGF0Zm9ybV9zZXRfY3JvcChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwKKwkJCQkJc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKK3sKKwlyZXR1cm4gMDsKK30KKwogc3RhdGljIGludCBzb2NfY2FtZXJhX3BsYXRmb3JtX3NldF9mbXQoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICppY2QsCi0JCQkJICAgICAgIF9fdTMyIHBpeGZtdCwgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKKwkJCQkgICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQogewogCXJldHVybiAwOwogfQpAQCAtMTI1LDYgKzEzMSw3IEBACiAJLnJlbGVhc2UJCT0gc29jX2NhbWVyYV9wbGF0Zm9ybV9yZWxlYXNlLAogCS5zdGFydF9jYXB0dXJlCQk9IHNvY19jYW1lcmFfcGxhdGZvcm1fc3RhcnRfY2FwdHVyZSwKIAkuc3RvcF9jYXB0dXJlCQk9IHNvY19jYW1lcmFfcGxhdGZvcm1fc3RvcF9jYXB0dXJlLAorCS5zZXRfY3JvcAkJPSBzb2NfY2FtZXJhX3BsYXRmb3JtX3NldF9jcm9wLAogCS5zZXRfZm10CQk9IHNvY19jYW1lcmFfcGxhdGZvcm1fc2V0X2ZtdCwKIAkudHJ5X2ZtdAkJPSBzb2NfY2FtZXJhX3BsYXRmb3JtX3RyeV9mbXQsCiAJLnNldF9idXNfcGFyYW0JCT0gc29jX2NhbWVyYV9wbGF0Zm9ybV9zZXRfYnVzX3BhcmFtLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby9zdGstd2ViY2FtLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYwppbmRleCAyNjM3OGNmLi4xYTZkMzljIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3N0ay13ZWJjYW0uYwpAQCAtOTMzLDggKzkzMyw2IEBACiBzdGF0aWMgaW50IHN0a192aWRpb2NfZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlscCwKIAkJdm9pZCAqcHJpdiwgc3RydWN0IHY0bDJfZm10ZGVzYyAqZm10ZCkKIHsKLQlmbXRkLT5mbGFncyA9IDA7Ci0KIAlzd2l0Y2ggKGZtdGQtPmluZGV4KSB7CiAJY2FzZSAwOgogCQlmbXRkLT5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9SR0I1NjU7CkBAIC05OTIsNyArOTkwLDYgQEAKIAlwaXhfZm9ybWF0LT5oZWlnaHQgPSBzdGtfc2l6ZXNbaV0uaDsKIAlwaXhfZm9ybWF0LT5maWVsZCA9IFY0TDJfRklFTERfTk9ORTsKIAlwaXhfZm9ybWF0LT5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0I7Ci0JcGl4X2Zvcm1hdC0+cHJpdiA9IDA7CiAJcGl4X2Zvcm1hdC0+cGl4ZWxmb3JtYXQgPSBkZXYtPnZzZXR0aW5ncy5wYWxldHRlOwogCWlmIChkZXYtPnZzZXR0aW5ncy5wYWxldHRlID09IFY0TDJfUElYX0ZNVF9TQkdHUjgpCiAJCXBpeF9mb3JtYXQtPmJ5dGVzcGVybGluZSA9IHBpeF9mb3JtYXQtPndpZHRoOwpAQCAtMTExNSw4ICsxMTEyLDYgQEAKIAogCWlmIChkZXYgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JaWYgKHJiLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKHJiLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJaWYgKGlzX3N0cmVhbWluZyhkZXYpCkBAIC0xMTM5LDE2ICsxMTM0LDEwIEBACiBzdGF0aWMgaW50IHN0a192aWRpb2NfcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbHAsCiAJCXZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQogewotCWludCBpbmRleDsKIAlzdHJ1Y3Qgc3RrX2NhbWVyYSAqZGV2ID0gcHJpdjsKIAlzdHJ1Y3Qgc3RrX3Npb19idWZmZXIgKnNidWY7CiAKLQlpZiAoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlpbmRleCA9IGJ1Zi0+aW5kZXg7Ci0KLQlpZiAoaW5kZXggPCAwIHx8IGluZGV4ID49IGRldi0+bl9zYnVmcykKKwlpZiAoYnVmLT5pbmRleCA8IDAgfHwgYnVmLT5pbmRleCA+PSBkZXYtPm5fc2J1ZnMpCiAJCXJldHVybiAtRUlOVkFMOwogCXNidWYgPSBkZXYtPnNpb19idWZzICsgYnVmLT5pbmRleDsKIAkqYnVmID0gc2J1Zi0+djRsYnVmOwpAQCAtMTE2MSw4ICsxMTUwLDYgQEAKIAlzdHJ1Y3Qgc3RrX2NhbWVyYSAqZGV2ID0gcHJpdjsKIAlzdHJ1Y3Qgc3RrX3Npb19idWZmZXIgKnNidWY7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpZiAoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7CiAKIAlpZiAoYnVmLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC0xMTg5LDggKzExNzYsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAotCWlmIChidWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFCi0JCXx8ICFpc19zdHJlYW1pbmcoZGV2KSkKKwlpZiAoIWlzX3N0cmVhbWluZyhkZXYpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmIChmaWxwLT5mX2ZsYWdzICYgT19OT05CTE9DSyAmJiBsaXN0X2VtcHR5KCZkZXYtPnNpb19mdWxsKSkKQEAgLTEyNDksMTYgKzEyMzUsMTAgQEAKIHN0YXRpYyBpbnQgc3RrX3ZpZGlvY19nX3Bhcm0oc3RydWN0IGZpbGUgKmZpbHAsCiAJCXZvaWQgKnByaXYsIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKnNwKQogewotCWlmIChzcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwotCi0Jc3AtPnBhcm0uY2FwdHVyZS5jYXBhYmlsaXR5ID0gMDsKLQlzcC0+cGFybS5jYXB0dXJlLmNhcHR1cmVtb2RlID0gMDsKIAkvKkZJWE1FIFRoaXMgaXMgbm90IGNvcnJlY3QgKi8KIAlzcC0+cGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZS5udW1lcmF0b3IgPSAxOwogCXNwLT5wYXJtLmNhcHR1cmUudGltZXBlcmZyYW1lLmRlbm9taW5hdG9yID0gMzA7CiAJc3AtPnBhcm0uY2FwdHVyZS5yZWFkYnVmZmVycyA9IDI7Ci0Jc3AtPnBhcm0uY2FwdHVyZS5leHRlbmRlZG1vZGUgPSAwOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RjbTgyNXguYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGNtODI1eC5jCmluZGV4IDI5OTkxZDEuLmIzMGM0OTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGNtODI1eC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGNtODI1eC5jCkBAIC01MCw3ICs1MCw3IEBACiB9OwogCiAvKiBsaXN0IG9mIGltYWdlIGZvcm1hdHMgc3VwcG9ydGVkIGJ5IFRDTTgyNVggc2Vuc29yICovCi1jb25zdCBzdGF0aWMgc3RydWN0IHY0bDJfZm10ZGVzYyB0Y204MjV4X2Zvcm1hdHNbXSA9IHsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9mbXRkZXNjIHRjbTgyNXhfZm9ybWF0c1tdID0gewogCXsKIAkJLmRlc2NyaXB0aW9uID0gIllVWVYgKFlVViA0OjI6MiksIHBhY2tlZCIsCiAJCS5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9VWVZZLApAQCAtNzYsMTUgKzc2LDE1IEBACiAgKiBUQ004MjVYIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gZm9yIGFsbCBjb21iaW5hdGlvbnMgb2YgcGl4ZWwgZm9ybWF0IGFuZAogICogaW1hZ2Ugc2l6ZQogICovCi1jb25zdCBzdGF0aWMgc3RydWN0IHRjbTgyNXhfcmVnIHN1YnFjaWYJPQl7IDB4MjAsIFRDTTgyNVhfUElDU0laIH07Ci1jb25zdCBzdGF0aWMgc3RydWN0IHRjbTgyNXhfcmVnIHFjaWYJPQl7IDB4MTgsIFRDTTgyNVhfUElDU0laIH07Ci1jb25zdCBzdGF0aWMgc3RydWN0IHRjbTgyNXhfcmVnIGNpZgk9CXsgMHgxNCwgVENNODI1WF9QSUNTSVogfTsKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgdGNtODI1eF9yZWcgcXF2Z2EJPQl7IDB4MGMsIFRDTTgyNVhfUElDU0laIH07Ci1jb25zdCBzdGF0aWMgc3RydWN0IHRjbTgyNXhfcmVnIHF2Z2EJPQl7IDB4MDQsIFRDTTgyNVhfUElDU0laIH07Ci1jb25zdCBzdGF0aWMgc3RydWN0IHRjbTgyNXhfcmVnIHZnYQk9CXsgMHgwMCwgVENNODI1WF9QSUNTSVogfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGNtODI1eF9yZWcgc3VicWNpZgk9CXsgMHgyMCwgVENNODI1WF9QSUNTSVogfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGNtODI1eF9yZWcgcWNpZgk9CXsgMHgxOCwgVENNODI1WF9QSUNTSVogfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGNtODI1eF9yZWcgY2lmCT0JeyAweDE0LCBUQ004MjVYX1BJQ1NJWiB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB0Y204MjV4X3JlZyBxcXZnYQk9CXsgMHgwYywgVENNODI1WF9QSUNTSVogfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGNtODI1eF9yZWcgcXZnYQk9CXsgMHgwNCwgVENNODI1WF9QSUNTSVogfTsKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGNtODI1eF9yZWcgdmdhCT0JeyAweDAwLCBUQ004MjVYX1BJQ1NJWiB9OwogCi1jb25zdCBzdGF0aWMgc3RydWN0IHRjbTgyNXhfcmVnIHl1djQyMgk9CXsgMHgwMCwgVENNODI1WF9QSUNGTVQgfTsKLWNvbnN0IHN0YXRpYyBzdHJ1Y3QgdGNtODI1eF9yZWcgcmdiNTY1CT0JeyAweDAyLCBUQ004MjVYX1BJQ0ZNVCB9Oworc3RhdGljIGNvbnN0IHN0cnVjdCB0Y204MjV4X3JlZyB5dXY0MjIJPQl7IDB4MDAsIFRDTTgyNVhfUElDRk1UIH07CitzdGF0aWMgY29uc3Qgc3RydWN0IHRjbTgyNXhfcmVnIHJnYjU2NQk9CXsgMHgwMiwgVENNODI1WF9QSUNGTVQgfTsKIAogLyogT3VyIG93biBzcGVjaWZpYyBjb250cm9scyAqLwogI2RlZmluZSBWNEwyX0NJRF9BTEMJCQkJVjRMMl9DSURfUFJJVkFURV9CQVNFCkBAIC0yNDgsMTAgKzI0OCwxMCBAQAogfTsKIAogCi1jb25zdCBzdGF0aWMgc3RydWN0IHRjbTgyNXhfcmVnICp0Y204MjV4X3Npel9yZWdbTlVNX0lNQUdFX1NJWkVTXSA9CitzdGF0aWMgY29uc3Qgc3RydWN0IHRjbTgyNXhfcmVnICp0Y204MjV4X3Npel9yZWdbTlVNX0lNQUdFX1NJWkVTXSA9CiB7ICZzdWJxY2lmLCAmcXF2Z2EsICZxY2lmLCAmcXZnYSwgJmNpZiwgJnZnYSB9OwogCi1jb25zdCBzdGF0aWMgc3RydWN0IHRjbTgyNXhfcmVnICp0Y204MjV4X2ZtdF9yZWdbTlVNX1BJWEVMX0ZPUk1BVFNdID0KK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdGNtODI1eF9yZWcgKnRjbTgyNXhfZm10X3JlZ1tOVU1fUElYRUxfRk9STUFUU10gPQogeyAmeXV2NDIyLCAmcmdiNTY1IH07CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RjbTgyNXguaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGNtODI1eC5oCmluZGV4IDc3MGViYWMuLjViN2U2OTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGNtODI1eC5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGNtODI1eC5oCkBAIC0xODgsNyArMTg4LDcgQEAKIC8qIEFycmF5IG9mIGltYWdlIHNpemVzIHN1cHBvcnRlZCBieSBUQ004MjVYLiAgVGhlc2UgbXVzdCBiZSBvcmRlcmVkIGZyb20KICAqIHNtYWxsZXN0IGltYWdlIHNpemUgdG8gbGFyZ2VzdC4KICAqLwotY29uc3Qgc3RhdGljIHN0cnVjdCBjYXB0dXJlX3NpemUgdGNtODI1eF9zaXplc1tdID0geworc3RhdGljIGNvbnN0IHN0cnVjdCBjYXB0dXJlX3NpemUgdGNtODI1eF9zaXplc1tdID0gewogCXsgMTI4LCAgOTYgfSwgLyogc3ViUUNJRiAqLwogCXsgMTYwLCAxMjAgfSwgLyogUVFWR0EgKi8KIAl7IDE3NiwgMTQ0IH0sIC8qIFFDSUYgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhNzQzMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE3NDMyLmMKaW5kZXggMGMwMjA1OC4uMDA1ZjhhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE3NDMyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE3NDMyLmMKQEAgLTUwLDcgKzUwLDcgQEAKICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KICNpbmNsdWRlIDxtZWRpYS9pMmMtYWRkci5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogI2lmbmRlZiBWSURFT19BVURJT19CQUxBTkNFCiAjIGRlZmluZSBWSURFT19BVURJT19CQUxBTkNFIDMyCkBAIC02OSwxMyArNjksNiBAQAogbW9kdWxlX3BhcmFtKG1heHZvbCwgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CiAKIAotLyogQWRkcmVzcyB0byBzY2FuIChJMkMgYWRkcmVzcyBvZiB0aGlzIGNoaXApICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gewotCUkyQ19BRERSX1REQTc0MzIgPj4gMSwKLQlJMkNfQ0xJRU5UX0VORCwKLX07Ci0KLUkyQ19DTElFTlRfSU5TTU9EOwogCiAvKiBTdHJ1Y3R1cmUgb2YgYWRkcmVzcyBhbmQgc3ViYWRkcmVzc2VzIGZvciB0aGUgdGRhNzQzMiAqLwogCkBAIC00MjEsMjEgKzQxNCwxOCBAQAogc3RhdGljIGludCB0ZGE3NDMyX3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQogewogCXN3aXRjaCAocWMtPmlkKSB7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LCA2NTUzNSAvIDEwMCwgNTg4ODApOworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCAxLCAxLCAwKTsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOgogCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKHFjKTsKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwgNjU1MzUgLyAxMDAsIDMyNzY4KTsKIAl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CiAKLXN0YXRpYyBpbnQgdGRhNzQzMl9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQotewotCXJldHVybiB2NGwyX3N1YmRldl9jb21tYW5kKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBjbWQsIGFyZyk7Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgdGRhNzQzMl9jb3JlX29wcyA9IHsKQEAgLTQ5OCw4ICs0ODgsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAidGRhNzQzMiIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1REQTc0MzIsCi0JLmNvbW1hbmQgPSB0ZGE3NDMyX2NvbW1hbmQsCiAJLnByb2JlID0gdGRhNzQzMl9wcm9iZSwKIAkucmVtb3ZlID0gdGRhNzQzMl9yZW1vdmUsCiAJLmlkX3RhYmxlID0gdGRhNzQzMl9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg0MC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODQwLmMKaW5kZXggNmFmYjcwNS4uZmUxMTU4MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODQwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODQwLmMKQEAgLTMwLDggKzMwLDggQEAKICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgotI2luY2x1ZGUgInRkYTk4NDAuaCIKKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogTU9EVUxFX0FVVEhPUigiTWljaGFlbCBIdW5vbGQgPG1pY2hhZWxAbWlodS5kZT4iKTsKIE1PRFVMRV9ERVNDUklQVElPTigidGRhOTg0MCBkcml2ZXIiKTsKQEAgLTU2LDExICs1Niw2IEBACiAjZGVmaW5lIFREQTk4NDBfU0VUX0JPVEhfUiAgICAgICAgICAgICAgMHgxNgogI2RlZmluZSBUREE5ODQwX1NFVF9FWFRFUk5BTCAgICAgICAgICAgIDB4N2EKIAotLyogYWRkcmVzc2VzIHRvIHNjYW4sIGZvdW5kIG9ubHkgYXQgMHg0MiAoNy1CaXQpICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyBJMkNfQUREUl9UREE5ODQwLCBJMkNfQ0xJRU5UX0VORCB9OwotCi0vKiBtYWdpYyBkZWZpbml0aW9uIG9mIGFsbCBvdGhlciB2YXJpYWJsZXMgYW5kIHRoaW5ncyAqLwotSTJDX0NMSUVOVF9JTlNNT0Q7CiAKIHN0YXRpYyB2b2lkIHRkYTk4NDBfd3JpdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnLCB1OCB2YWwpCiB7CkBAIC0xMzcsNjAgKzEzMiwxNyBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgbG9uZyB0ZGE5ODQwX2lvY3RsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCB0ZGE5ODQwX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKIHsKLQlpbnQgYnl0ZTsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAKLQlzd2l0Y2ggKGNtZCkgewotCWNhc2UgVERBOTg0MF9MRVZFTF9BREpVU1Q6Ci0JCWJ5dGUgPSAqKGludCAqKWFyZzsKLQkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiVERBOTg0MF9MRVZFTF9BREpVU1Q6ICVkXG4iLCBieXRlKTsKLQotCQkvKiBjaGVjayBmb3IgY29ycmVjdCByYW5nZSAqLwotCQlpZiAoYnl0ZSA+IDI1IHx8IGJ5dGUgPCAtMjApCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkvKiBjYWxjdWxhdGUgYWN0dWFsIHZhbHVlIHRvIHNldCwgc2VlIHNwZWNzLCBwYWdlIDE4ICovCi0JCWJ5dGUgLz0gNTsKLQkJaWYgKDAgPCBieXRlKQotCQkJYnl0ZSArPSAweDg7Ci0JCWVsc2UKLQkJCWJ5dGUgPSAtYnl0ZTsKLQkJdGRhOTg0MF93cml0ZShzZCwgTEVWRUxfQURKVVNULCBieXRlKTsKLQkJYnJlYWs7Ci0KLQljYXNlIFREQTk4NDBfU1RFUkVPX0FESlVTVDoKLQkJYnl0ZSA9ICooaW50ICopYXJnOwotCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJUREE5ODQwX1NURVJFT19BREpVU1Q6ICVkXG4iLCBieXRlKTsKLQotCQkvKiBjaGVjayBmb3IgY29ycmVjdCByYW5nZSAqLwotCQlpZiAoYnl0ZSA+IDI1IHx8IGJ5dGUgPCAtMjQpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQkvKiBjYWxjdWxhdGUgYWN0dWFsIHZhbHVlIHRvIHNldCAqLwotCQlieXRlIC89IDU7Ci0JCWlmICgwIDwgYnl0ZSkKLQkJCWJ5dGUgKz0gMHgyMDsKLQkJZWxzZQotCQkJYnl0ZSA9IC1ieXRlOwotCi0JCXRkYTk4NDBfd3JpdGUoc2QsIFNURVJFT19BREpVU1QsIGJ5dGUpOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVOT0lPQ1RMQ01EOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB0ZGE5ODQwX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCi17Ci0JcmV0dXJuIHY0bDJfc3ViZGV2X2NvbW1hbmQoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIGNtZCwgYXJnKTsKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX1REQTk4NDAsIDApOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHRkYTk4NDBfY29yZV9vcHMgPSB7Ci0JLmlvY3RsID0gdGRhOTg0MF9pb2N0bCwKKwkuZ19jaGlwX2lkZW50ID0gdGRhOTg0MF9nX2NoaXBfaWRlbnQsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3R1bmVyX29wcyB0ZGE5ODQwX3R1bmVyX29wcyA9IHsKQEAgLTIwOSw4ICsxNjEsNiBAQAogCQkJICBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKLQlpbnQgcmVzdWx0OwotCWludCBieXRlOwogCiAJLyogbGV0J3Mgc2VlIHdoZXRoZXIgdGhpcyBhZGFwdGVyIGNhbiBzdXBwb3J0IHdoYXQgd2UgbmVlZCAqLwogCWlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xpZW50LT5hZGFwdGVyLApAQCAtMjI3LDE1ICsxNzcsOSBAQAogCXY0bDJfaTJjX3N1YmRldl9pbml0KHNkLCBjbGllbnQsICZ0ZGE5ODQwX29wcyk7CiAKIAkvKiBzZXQgaW5pdGlhbCB2YWx1ZXMgZm9yIGxldmVsICYgc3RlcmVvIC0gYWRqdXN0bWVudCwgbW9kZSAqLwotCWJ5dGUgPSAwOwotCXJlc3VsdCA9IHRkYTk4NDBfaW9jdGwoc2QsIFREQTk4NDBfTEVWRUxfQURKVVNULCAmYnl0ZSk7Ci0JcmVzdWx0IHw9IHRkYTk4NDBfaW9jdGwoc2QsIFREQTk4NDBfU1RFUkVPX0FESlVTVCwgJmJ5dGUpOworCXRkYTk4NDBfd3JpdGUoc2QsIExFVkVMX0FESlVTVCwgMCk7CisJdGRhOTg0MF93cml0ZShzZCwgU1RFUkVPX0FESlVTVCwgMCk7CiAJdGRhOTg0MF93cml0ZShzZCwgU1dJVENILCBUREE5ODQwX1NFVF9TVEVSRU8pOwotCWlmIChyZXN1bHQpIHsKLQkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiY291bGQgbm90IGluaXRpYWxpemUgdGRhOTg0MFxuIik7Ci0JCWtmcmVlKHNkKTsKLQkJcmV0dXJuIC1FTk9ERVY7Ci0JfQogCXJldHVybiAwOwogfQogCkBAIC0yNDgsMTIgKzE5Miw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdGRhOTg0MF9sZWdhY3lfcHJvYmUoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKQotewotCS8qIExldCdzIHNlZSB3aGV0aGVyIHRoaXMgaXMgYSBrbm93biBhZGFwdGVyIHdlIGNhbiBhdHRhY2ggdG8uCi0JICAgUHJldmVudHMgY29uZmxpY3RzIHdpdGggdHZhdWRpby5jLiAqLwotCXJldHVybiBhZGFwdGVyLT5pZCA9PSBJMkNfSFdfU0FBNzE0NjsKLX0KKwogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNlX2lkIHRkYTk4NDBfaWRbXSA9IHsKIAl7ICJ0ZGE5ODQwIiwgMCB9LAogCXsgfQpAQCAtMjYyLDEwICsyMDEsNyBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAidGRhOTg0MCIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1REQTk4NDAsCi0JLmNvbW1hbmQgPSB0ZGE5ODQwX2NvbW1hbmQsCiAJLnByb2JlID0gdGRhOTg0MF9wcm9iZSwKIAkucmVtb3ZlID0gdGRhOTg0MF9yZW1vdmUsCi0JLmxlZ2FjeV9wcm9iZSA9IHRkYTk4NDBfbGVnYWN5X3Byb2JlLAogCS5pZF90YWJsZSA9IHRkYTk4NDBfaWQsCiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODQwLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NDAuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZGMxMmFlNy4uMDAwMDAwMAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RkYTk4NDAuaAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLSNpZm5kZWYgX19JTkNMVURFRF9UREE5ODQwX18KLSNkZWZpbmUgX19JTkNMVURFRF9UREE5ODQwX18KLQotI2RlZmluZQlJMkNfQUREUl9UREE5ODQwCQkweDQyCi0KLS8qIHZhbHVlcyBtYXkgcmFuZ2UgYmV0d2VlbiArMi41IGFuZCAtMi4wOwotICAgdGhlIHZhbHVlIGhhcyB0byBiZSBtdWx0aXBsaWVkIHdpdGggMTAgKi8KLSNkZWZpbmUgVERBOTg0MF9MRVZFTF9BREpVU1QJX0lPVygndicsMyxpbnQpCi0KLS8qIHZhbHVlcyBtYXkgcmFuZ2UgYmV0d2VlbiArMi41IGFuZCAtMi40OwotICAgdGhlIHZhbHVlIGhhcyB0byBiZSBtdWx0aXBsaWVkIHdpdGggMTAgKi8KLSNkZWZpbmUgVERBOTg0MF9TVEVSRU9fQURKVVNUCV9JT1coJ3YnLDQsaW50KQotCi0jZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGRhOTg3NS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODc1LmMKaW5kZXggMDBjNmNiZS4uMjRlMmI3ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODc1LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZGE5ODc1LmMKQEAgLTI4LDIwICsyOCwxMyBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogI2luY2x1ZGUgPG1lZGlhL2kyYy1hZGRyLmg+CiAKIHN0YXRpYyBpbnQgZGVidWc7IC8qIGluc21vZCBwYXJhbWV0ZXIgKi8KIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCBTX0lSVUdPIHwgU19JV1VTUik7CiBNT0RVTEVfTElDRU5TRSgiR1BMIik7CiAKLS8qIEFkZHJlc3NlcyB0byBzY2FuICovCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0gIHsKLSAgICBJMkNfQUREUl9UREE5ODc1ID4+IDEsCi0gICAgSTJDX0NMSUVOVF9FTkQKLX07Ci0KLUkyQ19DTElFTlRfSU5TTU9EOwogCiAvKiBUaGlzIGlzIGEgc3VwZXJzZXQgb2YgdGhlIFREQTk4NzUgKi8KIHN0cnVjdCB0ZGE5ODc1IHsKQEAgLTMxMywxOCArMzA2LDE0IEBACiB7CiAJc3dpdGNoIChxYy0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRToKKwkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjLCAwLCA2NTUzNSwgNjU1MzUgLyAxMDAsIDU4ODgwKTsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQocWMpOworCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LCA2NTUzNSAvIDEwMCwgMzI3NjgpOwogCX0KIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAotc3RhdGljIGludCB0ZGE5ODc1X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCi17Ci0JcmV0dXJuIHY0bDJfc3ViZGV2X2NvbW1hbmQoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIGNtZCwgYXJnKTsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyB0ZGE5ODc1X2NvcmVfb3BzID0gewpAQCAtNDAxLDggKzM5MCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJ0ZGE5ODc1IiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfVERBOTg3NSwKLQkuY29tbWFuZCA9IHRkYTk4NzVfY29tbWFuZCwKIAkucHJvYmUgPSB0ZGE5ODc1X3Byb2JlLAogCS5yZW1vdmUgPSB0ZGE5ODc1X3JlbW92ZSwKIAkuaWRfdGFibGUgPSB0ZGE5ODc1X2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDE1Yy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDE1Yy5jCmluZGV4IDc1MTlmZDEuLmQ2MWM1NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQxNWMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MTVjLmMKQEAgLTMyLDcgKzMyLDggQEAKICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+Ci0jaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2LWxlZ2FjeS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogI2luY2x1ZGUgInRlYTY0MTVjLmgiCiAKIE1PRFVMRV9BVVRIT1IoIk1pY2hhZWwgSHVub2xkIDxtaWNoYWVsQG1paHUuZGU+Iik7CkBAIC00NCwyNSArNDUsMjIgQEAKIAogTU9EVUxFX1BBUk1fREVTQyhkZWJ1ZywgIkRlYnVnIGxldmVsICgwLTEpIik7CiAKLS8qIGFkZHJlc3NlcyB0byBzY2FuLCBmb3VuZCBvbmx5IGF0IDB4MDMgYW5kL29yIDB4NDMgKDctYml0KSAqLwotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgSTJDX1RFQTY0MTVDXzEsIEkyQ19URUE2NDE1Q18yLCBJMkNfQ0xJRU5UX0VORCB9OwogCi0vKiBtYWdpYyBkZWZpbml0aW9uIG9mIGFsbCBvdGhlciB2YXJpYWJsZXMgYW5kIHRoaW5ncyAqLwotSTJDX0NMSUVOVF9JTlNNT0Q7Ci0KLS8qIG1ha2VzIGEgY29ubmVjdGlvbiBiZXR3ZWVuIHRoZSBpbnB1dC1waW4gJ2knIGFuZCB0aGUgb3V0cHV0LXBpbiAnbycKLSAgIGZvciB0aGUgdGVhNjQxNWMtY2xpZW50ICdjbGllbnQnICovCi1zdGF0aWMgaW50IHN3aXRjaF9tYXRyaXgoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgaW50IGksIGludCBvKQorLyogbWFrZXMgYSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGlucHV0LXBpbiAnaScgYW5kIHRoZSBvdXRwdXQtcGluICdvJyAqLworc3RhdGljIGludCB0ZWE2NDE1Y19zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcm91dGUpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCXU4IGJ5dGUgPSAwOworCXUzMiBpID0gcm91dGUtPmlucHV0OworCXUzMiBvID0gcm91dGUtPm91dHB1dDsKIAlpbnQgcmV0OwogCi0JdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaT0lZCwgbz0lZFxuIiwgaSwgbyk7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiaT0lZCwgbz0lZFxuIiwgaSwgbyk7CiAKIAkvKiBjaGVjayBpZiB0aGUgcGlucyBhcmUgdmFsaWQgKi8KIAlpZiAoMCA9PSAoKDEgPT0gaSB8fCAgMyA9PSBpIHx8ICA1ID09IGkgfHwgIDYgPT0gaSB8fCAgOCA9PSBpIHx8IDEwID09IGkgfHwgMjAgPT0gaSB8fCAxMSA9PSBpKQogCSAgICAgICYmICgxOCA9PSBvIHx8IDE3ID09IG8gfHwgMTYgPT0gbyB8fCAxNSA9PSBvIHx8IDE0ID09IG8gfHwgMTMgPT0gbykpKQotCQlyZXR1cm4gLTE7CisJCXJldHVybiAtRUlOVkFMOwogCiAJLyogdG8gdW5kZXJzdGFuZCB0aGlzLCBoYXZlIGEgbG9vayBhdCB0aGUgdGVhNjQxNWMtc3BlY3MgKHAuNSkgKi8KIAlzd2l0Y2ggKG8pIHsKQEAgLTExNSwzNyArMTEzLDMzIEBACiAKIAlyZXQgPSBpMmNfc21idXNfd3JpdGVfYnl0ZShjbGllbnQsIGJ5dGUpOwogCWlmIChyZXQpIHsKLQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LAorCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsCiAJCQkiaTJjX3NtYnVzX3dyaXRlX2J5dGUoKSBmYWlsZWQsIHJldDolZFxuIiwgcmV0KTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBsb25nIHRlYTY0MTVjX2lvY3RsKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCB0ZWE2NDE1Y19nX2NoaXBfaWRlbnQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZGJnX2NoaXBfaWRlbnQgKmNoaXApCiB7Ci0JaWYgKGNtZCA9PSBURUE2NDE1Q19TV0lUQ0gpIHsKLQkJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwotCQlzdHJ1Y3QgdGVhNjQxNWNfbXVsdGlwbGV4ICp2ID0gKHN0cnVjdCB0ZWE2NDE1Y19tdWx0aXBsZXggKilhcmc7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCi0JCXJldHVybiBzd2l0Y2hfbWF0cml4KGNsaWVudCwgdi0+aW4sIHYtPm91dCk7Ci0JfQotCXJldHVybiAtRU5PSU9DVExDTUQ7Ci19Ci0KLXN0YXRpYyBpbnQgdGVhNjQxNWNfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIFY0TDJfSURFTlRfVEVBNjQxNUMsIDApOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHRlYTY0MTVjX2NvcmVfb3BzID0gewotCS5pb2N0bCA9IHRlYTY0MTVjX2lvY3RsLAorCS5nX2NoaXBfaWRlbnQgPSB0ZWE2NDE1Y19nX2NoaXBfaWRlbnQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyB0ZWE2NDE1Y192aWRlb19vcHMgPSB7CisJLnNfcm91dGluZyA9IHRlYTY0MTVjX3Nfcm91dGluZywKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHRlYTY0MTVjX29wcyA9IHsKIAkuY29yZSA9ICZ0ZWE2NDE1Y19jb3JlX29wcywKKwkudmlkZW8gPSAmdGVhNjQxNWNfdmlkZW9fb3BzLAogfTsKIAogLyogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgYnkgaTJjX3Byb2JlICovCkBAIC0xNzYsMTIgKzE3MCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdGVhNjQxNWNfbGVnYWN5X3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKLXsKLQkvKiBMZXQncyBzZWUgd2hldGhlciB0aGlzIGlzIGEga25vd24gYWRhcHRlciB3ZSBjYW4gYXR0YWNoIHRvLgotCSAgIFByZXZlbnRzIGNvbmZsaWN0cyB3aXRoIHR2YXVkaW8uYy4gKi8KLQlyZXR1cm4gYWRhcHRlci0+aWQgPT0gSTJDX0hXX1NBQTcxNDY7Ci19CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB0ZWE2NDE1Y19pZFtdID0gewogCXsgInRlYTY0MTVjIiwgMCB9LApAQCAtMTkxLDEwICsxNzksNyBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAidGVhNjQxNWMiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9URUE2NDE1QywKLQkuY29tbWFuZCA9IHRlYTY0MTVjX2NvbW1hbmQsCiAJLnByb2JlID0gdGVhNjQxNWNfcHJvYmUsCiAJLnJlbW92ZSA9IHRlYTY0MTVjX3JlbW92ZSwKLQkubGVnYWN5X3Byb2JlID0gdGVhNjQxNWNfbGVnYWN5X3Byb2JlLAogCS5pZF90YWJsZSA9IHRlYTY0MTVjX2lkLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQxNWMuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQxNWMuaAppbmRleCBmODRlZDgwLi4zYTQ3ZDY5IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MTVjLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDE1Yy5oCkBAIC0xLDEwICsxLDYgQEAKICNpZm5kZWYgX19JTkNMVURFRF9URUE2NDE1Q19fCiAjZGVmaW5lIF9fSU5DTFVERURfVEVBNjQxNUNfXwogCi0vKiBwb3NzaWJsZSBpMmMtYWRkcmVzc2VzICovCi0jZGVmaW5lCUkyQ19URUE2NDE1Q18xCQkweDAzCi0jZGVmaW5lCUkyQ19URUE2NDE1Q18yCQkweDQzCi0KIC8qIHRoZSB0ZWE2NDE1YydzIGRlc2lnbiBpcyBxdWl0ZSBicmFpbi1kZWFkLiBhbHRob3VnaCB0aGVyZSBhcmUKICAgIDggaW5wdXRzIGFuZCA2IG91dHB1dHMsIHRoZXNlIGFyZW4ndCBlbnVtZXJhdGVkIGluIGFueSB3YXkuIGJlY2F1c2UKICAgIEkgZG9uJ3Qgd2FudCB0byBzYXkgImNvbm5lY3QgaW5wdXQgcGluIDIwIHRvIG91dHB1dCBwaW4gMTciLCBJIGRlZmluZQpAQCAtMjgsMTIgKzI0LDQgQEAKICNkZWZpbmUgVEVBNjQxNUNfSU5QVVQ3IDEKICNkZWZpbmUgVEVBNjQxNUNfSU5QVVQ4IDExCiAKLXN0cnVjdCB0ZWE2NDE1Y19tdWx0aXBsZXgKLXsKLQlpbnQJaW47CS8qIGlucHV0LXBpbiAqLwotCWludAlvdXQ7CS8qIG91dHB1dC1waW4gKi8KLX07Ci0KLSNkZWZpbmUgVEVBNjQxNUNfU1dJVENICQlfSU9XKCd2JywxLHN0cnVjdCB0ZWE2NDE1Y19tdWx0aXBsZXgpCi0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDIwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuYwppbmRleCAwODFlNzRmLi4zNDkyMjIzIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RlYTY0MjAuYwpAQCAtMzIsNyArMzIsOCBAQAogI2luY2x1ZGUgPGxpbnV4L2lvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYtbGVnYWN5Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jaGlwLWlkZW50Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1pMmMtZHJ2Lmg+CiAjaW5jbHVkZSAidGVhNjQyMC5oIgogCiBNT0RVTEVfQVVUSE9SKCJNaWNoYWVsIEh1bm9sZCA8bWljaGFlbEBtaWh1LmRlPiIpOwpAQCAtNDQsMjQgKzQ1LDIzIEBACiAKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCi0vKiBhZGRyZXNzZXMgdG8gc2NhbiwgZm91bmQgb25seSBhdCAweDRjIGFuZC9vciAweDRkICg3LUJpdCkgKi8KLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IEkyQ19BRERSX1RFQTY0MjBfMSwgSTJDX0FERFJfVEVBNjQyMF8yLCBJMkNfQ0xJRU5UX0VORCB9OwotCi0vKiBtYWdpYyBkZWZpbml0aW9uIG9mIGFsbCBvdGhlciB2YXJpYWJsZXMgYW5kIHRoaW5ncyAqLwotSTJDX0NMSUVOVF9JTlNNT0Q7CiAKIC8qIG1ha2UgYSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGlucHV0ICdpJyBhbmQgdGhlIG91dHB1dCAnbycKLSAgIHdpdGggZ2FpbiAnZycgZm9yIHRoZSB0ZWE2NDIwLWNsaWVudCAnY2xpZW50JyAobm90ZTogaSA9IDYgbWVhbnMgJ211dGUnKSAqLwotc3RhdGljIGludCB0ZWE2NDIwX3N3aXRjaChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBpbnQgaSwgaW50IG8sIGludCBnKQorICAgd2l0aCBnYWluICdnJyAobm90ZTogaSA9IDYgbWVhbnMgJ211dGUnKSAqLworc3RhdGljIGludCB0ZWE2NDIwX3Nfcm91dGluZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCBzdHJ1Y3QgdjRsMl9yb3V0aW5nICpyb3V0ZSkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CisJaW50IGkgPSByb3V0ZS0+aW5wdXQ7CisJaW50IG8gPSByb3V0ZS0+b3V0cHV0ICYgMHhmOworCWludCBnID0gKHJvdXRlLT5vdXRwdXQgPj4gNCkgJiAweGY7CiAJdTggYnl0ZTsKIAlpbnQgcmV0OwogCi0JdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAiaT0lZCwgbz0lZCwgZz0lZFxuIiwgaSwgbywgZyk7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiaT0lZCwgbz0lZCwgZz0lZFxuIiwgaSwgbywgZyk7CiAKIAkvKiBjaGVjayBpZiB0aGUgcGFyYW1ldGVycyBhcmUgdmFsaWQgKi8KIAlpZiAoaSA8IDEgfHwgaSA+IDYgfHwgbyA8IDEgfHwgbyA+IDQgfHwgZyA8IDAgfHwgZyA+IDYgfHwgZyAlIDIgIT0gMCkKLQkJcmV0dXJuIC0xOworCQlyZXR1cm4gLUVJTlZBTDsKIAogCWJ5dGUgPSAoKG8gLSAxKSA8PCA1KTsKIAlieXRlIHw9IChpIC0gMSk7CkBAIC04MywzNyArODMsMzMgQEAKIAogCXJldCA9IGkyY19zbWJ1c193cml0ZV9ieXRlKGNsaWVudCwgYnl0ZSk7CiAJaWYgKHJldCkgewotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsCisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwKIAkJCSJpMmNfc21idXNfd3JpdGVfYnl0ZSgpIGZhaWxlZCwgcmV0OiVkXG4iLCByZXQpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBsb25nIHRlYTY0MjBfaW9jdGwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCitzdGF0aWMgaW50IHRlYTY0MjBfZ19jaGlwX2lkZW50KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2RiZ19jaGlwX2lkZW50ICpjaGlwKQogewotCWlmIChjbWQgPT0gVEVBNjQyMF9TV0lUQ0gpIHsKLQkJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwotCQlzdHJ1Y3QgdGVhNjQyMF9tdWx0aXBsZXggKmEgPSAoc3RydWN0IHRlYTY0MjBfbXVsdGlwbGV4ICopYXJnOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAotCQlyZXR1cm4gdGVhNjQyMF9zd2l0Y2goY2xpZW50LCBhLT5pbiwgYS0+b3V0LCBhLT5nYWluKTsKLQl9Ci0JcmV0dXJuIC1FTk9JT0NUTENNRDsKLX0KLQotc3RhdGljIGludCB0ZWE2NDIwX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCi17Ci0JcmV0dXJuIHY0bDJfc3ViZGV2X2NvbW1hbmQoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIGNtZCwgYXJnKTsKKwlyZXR1cm4gdjRsMl9jaGlwX2lkZW50X2kyY19jbGllbnQoY2xpZW50LCBjaGlwLCBWNEwyX0lERU5UX1RFQTY0MjAsIDApOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHRlYTY0MjBfY29yZV9vcHMgPSB7Ci0JLmlvY3RsID0gdGVhNjQyMF9pb2N0bCwKKwkuZ19jaGlwX2lkZW50ID0gdGVhNjQyMF9nX2NoaXBfaWRlbnQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2F1ZGlvX29wcyB0ZWE2NDIwX2F1ZGlvX29wcyA9IHsKKwkuc19yb3V0aW5nID0gdGVhNjQyMF9zX3JvdXRpbmcsCiB9OwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyB0ZWE2NDIwX29wcyA9IHsKIAkuY29yZSA9ICZ0ZWE2NDIwX2NvcmVfb3BzLAorCS5hdWRpbyA9ICZ0ZWE2NDIwX2F1ZGlvX29wcywKIH07CiAKIC8qIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5IGkyY19wcm9iZSAqLwpAQCAtMTMwLDIwICsxMjYsMjQgQEAKIAl2NGxfaW5mbyhjbGllbnQsICJjaGlwIGZvdW5kIEAgMHgleCAoJXMpXG4iLAogCQkJY2xpZW50LT5hZGRyIDw8IDEsIGNsaWVudC0+YWRhcHRlci0+bmFtZSk7CiAKKwlzZCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB2NGwyX3N1YmRldiksIEdGUF9LRVJORUwpOworCWlmIChzZCA9PSBOVUxMKQorCQlyZXR1cm4gLUVOT01FTTsKKwl2NGwyX2kyY19zdWJkZXZfaW5pdChzZCwgY2xpZW50LCAmdGVhNjQyMF9vcHMpOworCiAJLyogc2V0IGluaXRpYWwgdmFsdWVzOiBzZXQgIm11dGUiLWlucHV0IHRvIGFsbCBvdXRwdXRzIGF0IGdhaW4gMCAqLwogCWVyciA9IDA7CiAJZm9yIChpID0gMTsgaSA8IDU7IGkrKykgewotCQllcnIgKz0gdGVhNjQyMF9zd2l0Y2goY2xpZW50LCA2LCBpLCAwKTsKKwkJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZTsKKworCQlyb3V0ZS5pbnB1dCA9IDY7CisJCXJvdXRlLm91dHB1dCA9IGk7CisJCWVyciArPSB0ZWE2NDIwX3Nfcm91dGluZyhzZCwgJnJvdXRlKTsKIAl9CiAJaWYgKGVycikgewogCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJjb3VsZCBub3QgaW5pdGlhbGl6ZSB0ZWE2NDIwXG4iKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfQotCi0Jc2QgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3QgdjRsMl9zdWJkZXYpLCBHRlBfS0VSTkVMKTsKLQlpZiAoc2QgPT0gTlVMTCkKLQkJcmV0dXJuIC1FTk9NRU07Ci0JdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJnRlYTY0MjBfb3BzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTU2LDEyICsxNTYsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHRlYTY0MjBfbGVnYWN5X3Byb2JlKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlcikKLXsKLQkvKiBMZXQncyBzZWUgd2hldGhlciB0aGlzIGlzIGEga25vd24gYWRhcHRlciB3ZSBjYW4gYXR0YWNoIHRvLgotCSAgIFByZXZlbnRzIGNvbmZsaWN0cyB3aXRoIHR2YXVkaW8uYy4gKi8KLQlyZXR1cm4gYWRhcHRlci0+aWQgPT0gSTJDX0hXX1NBQTcxNDY7Ci19CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCB0ZWE2NDIwX2lkW10gPSB7CiAJeyAidGVhNjQyMCIsIDAgfSwKQEAgLTE3MSwxMCArMTY1LDcgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gInRlYTY0MjAiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9URUE2NDIwLAotCS5jb21tYW5kID0gdGVhNjQyMF9jb21tYW5kLAogCS5wcm9iZSA9IHRlYTY0MjBfcHJvYmUsCiAJLnJlbW92ZSA9IHRlYTY0MjBfcmVtb3ZlLAotCS5sZWdhY3lfcHJvYmUgPSB0ZWE2NDIwX2xlZ2FjeV9wcm9iZSwKIAkuaWRfdGFibGUgPSB0ZWE2NDIwX2lkLAogfTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGVhNjQyMC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDIwLmgKaW5kZXggNWVmN2MxOC4uNGFhM2VkYiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDIwLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90ZWE2NDIwLmgKQEAgLTEsMTcgKzEsMjQgQEAKICNpZm5kZWYgX19JTkNMVURFRF9URUE2NDIwX18KICNkZWZpbmUgX19JTkNMVURFRF9URUE2NDIwX18KIAotLyogcG9zc2libGUgYWRkcmVzc2VzICovCi0jZGVmaW5lCUkyQ19BRERSX1RFQTY0MjBfMQkJMHg0YwotI2RlZmluZQlJMkNfQUREUl9URUE2NDIwXzIJCTB4NGQKKy8qIGlucHV0IHBpbnMgKi8KKyNkZWZpbmUgVEVBNjQyMF9PVVRQVVQxIDEKKyNkZWZpbmUgVEVBNjQyMF9PVVRQVVQyIDIKKyNkZWZpbmUgVEVBNjQyMF9PVVRQVVQzIDMKKyNkZWZpbmUgVEVBNjQyMF9PVVRQVVQ0IDQKIAotc3RydWN0IHRlYTY0MjBfbXVsdGlwbGV4Ci17Ci0JaW50CWluOwkvKiBpbnB1dCBvZiBhdWRpbyBzd2l0Y2ggKi8KLQlpbnQJb3V0OwkvKiBvdXRwdXQgb2YgYXVkaW8gc3dpdGNoICAqLwotCWludAlnYWluOwkvKiBnYWluIG9mIGNvbm5lY3Rpb24gKi8KLX07CisvKiBvdXRwdXQgcGlucyAqLworI2RlZmluZSBURUE2NDIwX0lOUFVUMSAxCisjZGVmaW5lIFRFQTY0MjBfSU5QVVQyIDIKKyNkZWZpbmUgVEVBNjQyMF9JTlBVVDMgMworI2RlZmluZSBURUE2NDIwX0lOUFVUNCA0CisjZGVmaW5lIFRFQTY0MjBfSU5QVVQ1IDUKKyNkZWZpbmUgVEVBNjQyMF9JTlBVVDYgNgogCi0jZGVmaW5lIFRFQTY0MjBfU1dJVENICQlfSU9XKCd2JywxLHN0cnVjdCB0ZWE2NDIwX211bHRpcGxleCkKKy8qIGdhaW4gb24gdGhlIG91dHB1dCBwaW5zLCBPUmVkIHdpdGggdGhlIG91dHB1dCBwaW4gKi8KKyNkZWZpbmUgVEVBNjQyMF9HQUlOMCAweDAwCisjZGVmaW5lIFRFQTY0MjBfR0FJTjIgMHgyMAorI2RlZmluZSBURUE2NDIwX0dBSU40IDB4NDAKKyNkZWZpbmUgVEVBNjQyMF9HQUlONiAweDYwCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90bHYzMjBhaWMyM2IuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdGx2MzIwYWljMjNiLmMKaW5kZXggNWM5NWVjZC4uMDc3ODljNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90bHYzMjBhaWMyM2IuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3RsdjMyMGFpYzIzYi5jCkBAIC0zMSwxNSArMzEsMTIgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMtaWQuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJ0bHYzMjBhaWMyM2IgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJTY290dCBBbGZ0ZXIsIFVsZiBFa2x1bmQsIEhhbnMgVmVya3VpbCIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCi1zdGF0aWMgdW5zaWduZWQgc2hvcnQgbm9ybWFsX2kyY1tdID0geyAweDM0ID4+IDEsIEkyQ19DTElFTlRfRU5EIH07Ci0KLUkyQ19DTElFTlRfSU5TTU9EOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0xMjEsMTEgKzExOCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdGx2MzIwYWljMjNiX2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCi17Ci0JcmV0dXJuIHY0bDJfc3ViZGV2X2NvbW1hbmQoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIGNtZCwgYXJnKTsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyB0bHYzMjBhaWMyM2JfY29yZV9vcHMgPSB7CkBAIC0yMDgsOCArMjAwLDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gInRsdjMyMGFpYzIzYiIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1RMVjMyMEFJQzIzQiwKLQkuY29tbWFuZCA9IHRsdjMyMGFpYzIzYl9jb21tYW5kLAogCS5wcm9iZSA9IHRsdjMyMGFpYzIzYl9wcm9iZSwKIAkucmVtb3ZlID0gdGx2MzIwYWljMjNiX3JlbW92ZSwKIAkuaWRfdGFibGUgPSB0bHYzMjBhaWMyM2JfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R1bmVyLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jCmluZGV4IDMwNjQwZmIuLjcyZDQxMDMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHVuZXItY29yZS5jCkBAIC0zNjQsNyArMzY0LDggQEAKIAl9CiAKIAl0LT50eXBlID0gdHlwZTsKLQl0LT5jb25maWcgPSBuZXdfY29uZmlnOworCS8qIHByZXZlbnQgaW52YWxpZCBjb25maWcgdmFsdWVzICovCisJdC0+Y29uZmlnID0gKChuZXdfY29uZmlnID49IDApICYmIChuZXdfY29uZmlnIDwgMjU2KSkgPyBuZXdfY29uZmlnIDogMDsKIAlpZiAodHVuZXJfY2FsbGJhY2sgIT0gTlVMTCkgewogCQl0dW5lcl9kYmcoImRlZmluaW5nIEdQSU8gY2FsbGJhY2tcbiIpOwogCQl0LT5mZS5jYWxsYmFjayA9IHR1bmVyX2NhbGxiYWNrOwpAQCAtNDUyLDcgKzQ1Myw4IEBACiAJCXN0cnVjdCBkdmJfdHVuZXJfb3BzICp4Y190dW5lcl9vcHM7CiAKIAkJeGM1MDAwX2NmZy5pMmNfYWRkcmVzcwkgID0gdC0+aTJjLT5hZGRyOwotCQl4YzUwMDBfY2ZnLmlmX2toegkgID0gNTM4MDsKKwkJLyogaWZfa2h6IHdpbGwgYmUgc2V0IHdoZW4gdGhlIGRpZ2l0YWwgZHZiX2F0dGFjaCgpIG9jY3VycyAqLworCQl4YzUwMDBfY2ZnLmlmX2toegkgID0gMDsKIAkJaWYgKCFkdmJfYXR0YWNoKHhjNTAwMF9hdHRhY2gsCiAJCQkJJnQtPmZlLCB0LT5pMmMtPmFkYXB0ZXIsICZ4YzUwMDBfY2ZnKSkKIAkJCWdvdG8gYXR0YWNoX2ZhaWxlZDsKQEAgLTc3Niw4ICs3NzgsNyBAQAogCXN0cnVjdCB0dW5lciAqdCA9IHRvX3R1bmVyKHNkKTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAKLQlpZiAoc2V0X21vZGUoY2xpZW50LCB0LCBWNEwyX1RVTkVSX1JBRElPLCAiQVVEQ19TRVRfUkFESU8iKQotCQkJPT0gLUVJTlZBTCkKKwlpZiAoc2V0X21vZGUoY2xpZW50LCB0LCBWNEwyX1RVTkVSX1JBRElPLCAic19yYWRpbyIpID09IC1FSU5WQUwpCiAJCXJldHVybiAwOwogCWlmICh0LT5yYWRpb19mcmVxKQogCQlzZXRfZnJlcShjbGllbnQsIHQtPnJhZGlvX2ZyZXEpOwpAQCAtNzkxLDcgKzc5Miw3IEBACiAKIAl0dW5lcl9kYmcoIlB1dHRpbmcgdHVuZXIgdG8gc2xlZXBcbiIpOwogCi0JaWYgKGNoZWNrX21vZGUodCwgIlRVTkVSX1NFVF9TVEFOREJZIikgPT0gLUVJTlZBTCkKKwlpZiAoY2hlY2tfbW9kZSh0LCAic19zdGFuZGJ5IikgPT0gLUVJTlZBTCkKIAkJcmV0dXJuIDA7CiAJdC0+bW9kZSA9IFRfU1RBTkRCWTsKIAlpZiAoYW5hbG9nX29wcy0+c3RhbmRieSkKQEAgLTc5OSwxMzIgKzgwMCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLSNpZmRlZiBDT05GSUdfVklERU9fQUxMT1dfVjRMMQotc3RhdGljIGxvbmcgdHVuZXJfaW9jdGwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCB0dW5lciAqdCA9IHRvX3R1bmVyKHNkKTsKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7Ci0Jc3RydWN0IGFuYWxvZ19kZW1vZF9vcHMgKmFuYWxvZ19vcHMgPSAmdC0+ZmUub3BzLmFuYWxvZ19vcHM7Ci0Jc3RydWN0IGR2Yl90dW5lcl9vcHMgKmZlX3R1bmVyX29wcyA9ICZ0LT5mZS5vcHMudHVuZXJfb3BzOwotCi0Jc3dpdGNoIChjbWQpIHsKLQljYXNlIFZJRElPQ1NBVURJTzoKLQkJaWYgKGNoZWNrX21vZGUodCwgIlZJRElPQ1NBVURJTyIpID09IC1FSU5WQUwpCi0JCQlyZXR1cm4gMDsKLQkJaWYgKGNoZWNrX3Y0bDIodCkgPT0gLUVJTlZBTCkKLQkJCXJldHVybiAwOwotCi0JCS8qIFNob3VsZCBiZSBpbXBsZW1lbnRlZCwgc2luY2UgYnR0diBjYWxscyBpdCAqLwotCQl0dW5lcl9kYmcoIlZJRElPQ1NBVURJTyBub3QgaW1wbGVtZW50ZWQuXG4iKTsKLQkJYnJlYWs7Ci0JY2FzZSBWSURJT0NTQ0hBTjoKLQkJewotCQkJc3RhdGljIGNvbnN0IHY0bDJfc3RkX2lkIG1hcFtdID0gewotCQkJCVtWSURFT19NT0RFX1BBTF0gPSBWNEwyX1NURF9QQUwsCi0JCQkJW1ZJREVPX01PREVfTlRTQ10gPSBWNEwyX1NURF9OVFNDX00sCi0JCQkJW1ZJREVPX01PREVfU0VDQU1dID0gVjRMMl9TVERfU0VDQU0sCi0JCQkJWzQgLyogYnR0diAqLyBdID0gVjRMMl9TVERfUEFMX00sCi0JCQkJWzUgLyogYnR0diAqLyBdID0gVjRMMl9TVERfUEFMX04sCi0JCQkJWzYgLyogYnR0diAqLyBdID0gVjRMMl9TVERfTlRTQ19NX0pQLAotCQkJfTsKLQkJCXN0cnVjdCB2aWRlb19jaGFubmVsICp2YyA9IGFyZzsKLQotCQkJaWYgKGNoZWNrX3Y0bDIodCkgPT0gLUVJTlZBTCkKLQkJCQlyZXR1cm4gMDsKLQotCQkJaWYgKHNldF9tb2RlKGNsaWVudCx0LFY0TDJfVFVORVJfQU5BTE9HX1RWLCAiVklESU9DU0NIQU4iKT09LUVJTlZBTCkKLQkJCQlyZXR1cm4gMDsKLQotCQkJaWYgKHZjLT5ub3JtIDwgQVJSQVlfU0laRShtYXApKQotCQkJCXQtPnN0ZCA9IG1hcFt2Yy0+bm9ybV07Ci0JCQl0dW5lcl9maXh1cF9zdGQodCk7Ci0JCQlpZiAodC0+dHZfZnJlcSkKLQkJCQlzZXRfdHZfZnJlcShjbGllbnQsIHQtPnR2X2ZyZXEpOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQljYXNlIFZJRElPQ1NGUkVROgotCQl7Ci0JCQl1bnNpZ25lZCBsb25nICp2ID0gYXJnOwotCi0JCQlpZiAoY2hlY2tfbW9kZSh0LCAiVklESU9DU0ZSRVEiKSA9PSAtRUlOVkFMKQotCQkJCXJldHVybiAwOwotCQkJaWYgKGNoZWNrX3Y0bDIodCkgPT0gLUVJTlZBTCkKLQkJCQlyZXR1cm4gMDsKLQotCQkJc2V0X2ZyZXEoY2xpZW50LCAqdik7Ci0JCQlyZXR1cm4gMDsKLQkJfQotCWNhc2UgVklESU9DR1RVTkVSOgotCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fdHVuZXIgKnZ0ID0gYXJnOwotCi0JCQlpZiAoY2hlY2tfbW9kZSh0LCAiVklESU9DR1RVTkVSIikgPT0gLUVJTlZBTCkKLQkJCQlyZXR1cm4gMDsKLQkJCWlmIChjaGVja192NGwyKHQpID09IC1FSU5WQUwpCi0JCQkJcmV0dXJuIDA7Ci0KLQkJCWlmIChWNEwyX1RVTkVSX1JBRElPID09IHQtPm1vZGUpIHsKLQkJCQlpZiAoZmVfdHVuZXJfb3BzLT5nZXRfc3RhdHVzKSB7Ci0JCQkJCXUzMiB0dW5lcl9zdGF0dXM7Ci0KLQkJCQkJZmVfdHVuZXJfb3BzLT5nZXRfc3RhdHVzKCZ0LT5mZSwgJnR1bmVyX3N0YXR1cyk7Ci0JCQkJCWlmICh0dW5lcl9zdGF0dXMgJiBUVU5FUl9TVEFUVVNfU1RFUkVPKQotCQkJCQkJdnQtPmZsYWdzIHw9IFZJREVPX1RVTkVSX1NURVJFT19PTjsKLQkJCQkJZWxzZQotCQkJCQkJdnQtPmZsYWdzICY9IH5WSURFT19UVU5FUl9TVEVSRU9fT047Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKGFuYWxvZ19vcHMtPmlzX3N0ZXJlbykgewotCQkJCQkJaWYgKGFuYWxvZ19vcHMtPmlzX3N0ZXJlbygmdC0+ZmUpKQotCQkJCQkJCXZ0LT5mbGFncyB8PQotCQkJCQkJCQlWSURFT19UVU5FUl9TVEVSRU9fT047Ci0JCQkJCQllbHNlCi0JCQkJCQkJdnQtPmZsYWdzICY9Ci0JCQkJCQkJCX5WSURFT19UVU5FUl9TVEVSRU9fT047Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJaWYgKGFuYWxvZ19vcHMtPmhhc19zaWduYWwpCi0JCQkJCXZ0LT5zaWduYWwgPQotCQkJCQkJYW5hbG9nX29wcy0+aGFzX3NpZ25hbCgmdC0+ZmUpOwotCi0JCQkJdnQtPmZsYWdzIHw9IFZJREVPX1RVTkVSX0xPVzsJLyogQWxsb3cgZnJlcXMgYXQgNjIuNSBIeiAqLwotCi0JCQkJdnQtPnJhbmdlbG93ID0gcmFkaW9fcmFuZ2VbMF0gKiAxNjAwMDsKLQkJCQl2dC0+cmFuZ2VoaWdoID0gcmFkaW9fcmFuZ2VbMV0gKiAxNjAwMDsKLQotCQkJfSBlbHNlIHsKLQkJCQl2dC0+cmFuZ2Vsb3cgPSB0dl9yYW5nZVswXSAqIDE2OwotCQkJCXZ0LT5yYW5nZWhpZ2ggPSB0dl9yYW5nZVsxXSAqIDE2OwotCQkJfQotCi0JCQlyZXR1cm4gMDsKLQkJfQotCWNhc2UgVklESU9DR0FVRElPOgotCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gKnZhID0gYXJnOwotCi0JCQlpZiAoY2hlY2tfbW9kZSh0LCAiVklESU9DR0FVRElPIikgPT0gLUVJTlZBTCkKLQkJCQlyZXR1cm4gMDsKLQkJCWlmIChjaGVja192NGwyKHQpID09IC1FSU5WQUwpCi0JCQkJcmV0dXJuIDA7Ci0KLQkJCWlmIChWNEwyX1RVTkVSX1JBRElPID09IHQtPm1vZGUpIHsKLQkJCQlpZiAoZmVfdHVuZXJfb3BzLT5nZXRfc3RhdHVzKSB7Ci0JCQkJCXUzMiB0dW5lcl9zdGF0dXM7Ci0KLQkJCQkJZmVfdHVuZXJfb3BzLT5nZXRfc3RhdHVzKCZ0LT5mZSwgJnR1bmVyX3N0YXR1cyk7Ci0JCQkJCXZhLT5tb2RlID0gKHR1bmVyX3N0YXR1cyAmIFRVTkVSX1NUQVRVU19TVEVSRU8pCi0JCQkJCSAgICA/IFZJREVPX1NPVU5EX1NURVJFTyA6IFZJREVPX1NPVU5EX01PTk87Ci0JCQkJfSBlbHNlIGlmIChhbmFsb2dfb3BzLT5pc19zdGVyZW8pCi0JCQkJCXZhLT5tb2RlID0gYW5hbG9nX29wcy0+aXNfc3RlcmVvKCZ0LT5mZSkKLQkJCQkJICAgID8gVklERU9fU09VTkRfU1RFUkVPIDogVklERU9fU09VTkRfTU9OTzsKLQkJCX0KLQkJCXJldHVybiAwOwotCQl9Ci0JfQotCXJldHVybiAtRU5PSU9DVExDTUQ7Ci19Ci0jZW5kaWYKLQogc3RhdGljIGludCB0dW5lcl9zX2NvbmZpZyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCBzdHJ1Y3QgdjRsMl9wcml2X3R1bl9jb25maWcgKmNmZykKIHsKIAlzdHJ1Y3QgdHVuZXIgKnQgPSB0b190dW5lcihzZCk7CkBAIC05NTAsOCArODI1LDcgQEAKIAlzdHJ1Y3QgdHVuZXIgKnQgPSB0b190dW5lcihzZCk7CiAJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOwogCi0JaWYgKHNldF9tb2RlKGNsaWVudCwgdCwgVjRMMl9UVU5FUl9BTkFMT0dfVFYsICJWSURJT0NfU19TVEQiKQotCQkJPT0gLUVJTlZBTCkKKwlpZiAoc2V0X21vZGUoY2xpZW50LCB0LCBWNEwyX1RVTkVSX0FOQUxPR19UViwgInNfc3RkIikgPT0gLUVJTlZBTCkKIAkJcmV0dXJuIDA7CiAKIAlzd2l0Y2hfdjRsMigpOwpAQCAtOTY4LDggKzg0Miw3IEBACiAJc3RydWN0IHR1bmVyICp0ID0gdG9fdHVuZXIoc2QpOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAotCWlmIChzZXRfbW9kZShjbGllbnQsIHQsIGYtPnR5cGUsICJWSURJT0NfU19GUkVRVUVOQ1kiKQotCQkJPT0gLUVJTlZBTCkKKwlpZiAoc2V0X21vZGUoY2xpZW50LCB0LCBmLT50eXBlLCAic19mcmVxdWVuY3kiKSA9PSAtRUlOVkFMKQogCQlyZXR1cm4gMDsKIAlzd2l0Y2hfdjRsMigpOwogCXNldF9mcmVxKGNsaWVudCwgZi0+ZnJlcXVlbmN5KTsKQEAgLTk4Miw3ICs4NTUsNyBAQAogCXN0cnVjdCB0dW5lciAqdCA9IHRvX3R1bmVyKHNkKTsKIAlzdHJ1Y3QgZHZiX3R1bmVyX29wcyAqZmVfdHVuZXJfb3BzID0gJnQtPmZlLm9wcy50dW5lcl9vcHM7CiAKLQlpZiAoY2hlY2tfbW9kZSh0LCAiVklESU9DX0dfRlJFUVVFTkNZIikgPT0gLUVJTlZBTCkKKwlpZiAoY2hlY2tfbW9kZSh0LCAiZ19mcmVxdWVuY3kiKSA9PSAtRUlOVkFMKQogCQlyZXR1cm4gMDsKIAlzd2l0Y2hfdjRsMigpOwogCWYtPnR5cGUgPSB0LT5tb2RlOwpAQCAtMTAwNiw3ICs4NzksNyBAQAogCXN0cnVjdCBhbmFsb2dfZGVtb2Rfb3BzICphbmFsb2dfb3BzID0gJnQtPmZlLm9wcy5hbmFsb2dfb3BzOwogCXN0cnVjdCBkdmJfdHVuZXJfb3BzICpmZV90dW5lcl9vcHMgPSAmdC0+ZmUub3BzLnR1bmVyX29wczsKIAotCWlmIChjaGVja19tb2RlKHQsICJWSURJT0NfR19UVU5FUiIpID09IC1FSU5WQUwpCisJaWYgKGNoZWNrX21vZGUodCwgImdfdHVuZXIiKSA9PSAtRUlOVkFMKQogCQlyZXR1cm4gMDsKIAlzd2l0Y2hfdjRsMigpOwogCkBAIC0xMDU1LDcgKzkyOCw3IEBACiAJc3RydWN0IHR1bmVyICp0ID0gdG9fdHVuZXIoc2QpOwogCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAotCWlmIChjaGVja19tb2RlKHQsICJWSURJT0NfU19UVU5FUiIpID09IC1FSU5WQUwpCisJaWYgKGNoZWNrX21vZGUodCwgInNfdHVuZXIiKSA9PSAtRUlOVkFMKQogCQlyZXR1cm4gMDsKIAogCXN3aXRjaF92NGwyKCk7CkBAIC0xMTEyLDkgKzk4NSw2IEBACiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHR1bmVyX2NvcmVfb3BzID0gewogCS5sb2dfc3RhdHVzID0gdHVuZXJfbG9nX3N0YXR1cywKIAkuc19zdGFuZGJ5ID0gdHVuZXJfc19zdGFuZGJ5LAotI2lmZGVmIENPTkZJR19WSURFT19BTExPV19WNEwxCi0JLmlvY3RsID0gdHVuZXJfaW9jdGwsCi0jZW5kaWYKIH07CiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdHVuZXJfb3BzIHR1bmVyX3R1bmVyX29wcyA9IHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZhdWRpby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMKaW5kZXggMDc2ZWQ1Yi4uMjI2YmYzNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmF1ZGlvLmMKQEAgLTI2LDcgKzI2LDcgQEAKICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+CiAjaW5jbHVkZSA8bGludXgvc2xhYi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgogI2luY2x1ZGUgPGxpbnV4L2t0aHJlYWQuaD4KQEAgLTEwNDcsNiArMTA0NywxMTYgQEAKIAlyZXR1cm4gMDsKIH0KIAorLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworLyogYXVkaW8gY2hpcCBkZXNjcmlwdGlvbiAtIGRlZmluZXMrZnVuY3Rpb25zIGZvciB0ZGE5ODc1ICAgICAgICAgICAgICAgICAqLworLyogVGhlIFREQTk4NzUgaXMgbWFkZSBieSBQaGlsaXBzIFNlbWljb25kdWN0b3IKKyAqIGh0dHA6Ly93d3cuc2VtaWNvbmR1Y3RvcnMucGhpbGlwcy5jb20KKyAqIFREQTk4NzU6IEkyQy1idXMgY29udHJvbGxlZCBEU1AgYXVkaW8gcHJvY2Vzc29yLCBGTSBkZW1vZHVsYXRvcgorICoKKyAqLworCisvKiBzdWJhZGRyZXNzZXMgZm9yIFREQTk4NzUgKi8KKyNkZWZpbmUgVERBOTg3NV9NVVQgICAgICAgICAweDEyICAvKkdlbmVyYWwgbXV0ZSAgKHZhbHVlIC0tPiAwYjExMDAxMTAwKi8KKyNkZWZpbmUgVERBOTg3NV9DRkcgICAgICAgICAweDAxICAvKiBDb25maWcgcmVnaXN0ZXIgKHZhbHVlIC0tPiAwYjAwMDAwMDAwICovCisjZGVmaW5lIFREQTk4NzVfREFDT1MgICAgICAgMHgxMyAgLypEQUMgaS9vIHNlbGVjdCAoQURDKSAwYjAwMDAxMDAqLworI2RlZmluZSBUREE5ODc1X0xPU1IgICAgICAgIDB4MTYgIC8qTGluZSBvdXRwdXQgc2VsZWN0IHJlZ2lydGVyIDBiMDEwMCAwMDAxKi8KKworI2RlZmluZSBUREE5ODc1X0NIMVYgICAgICAgIDB4MGMgIC8qQ2hhbm5lbCAxIHZvbHVtZSAobXV0ZSkqLworI2RlZmluZSBUREE5ODc1X0NIMlYgICAgICAgIDB4MGQgIC8qQ2hhbm5lbCAyIHZvbHVtZSAobXV0ZSkqLworI2RlZmluZSBUREE5ODc1X1NDMSAgICAgICAgIDB4MTQgIC8qU0NBUlQgMSBpbiAobW9ubykqLworI2RlZmluZSBUREE5ODc1X1NDMiAgICAgICAgIDB4MTUgIC8qU0NBUlQgMiBpbiAobW9ubykqLworCisjZGVmaW5lIFREQTk4NzVfQURDSVMgICAgICAgMHgxNyAgLypBREMgaW5wdXQgc2VsZWN0IChtb25vKSAwYjAxMTAgMDAwKi8KKyNkZWZpbmUgVERBOTg3NV9BRVIgICAgICAgICAweDE5ICAvKkF1ZGlvIGVmZmVjdCAoQVZMK1BzZXVkbykgMGIwMDAwIDAxMTAqLworI2RlZmluZSBUREE5ODc1X01DUyAgICAgICAgIDB4MTggIC8qTWFpbiBjaGFubmVsIHNlbGVjdCAoREFDKSAwYjAwMDAxMDAqLworI2RlZmluZSBUREE5ODc1X01WTCAgICAgICAgIDB4MWEgIC8qIE1haW4gdm9sdW1lIGdhdWNoZSAqLworI2RlZmluZSBUREE5ODc1X01WUiAgICAgICAgIDB4MWIgIC8qIE1haW4gdm9sdW1lIGRyb2l0ZSAqLworI2RlZmluZSBUREE5ODc1X01CQSAgICAgICAgIDB4MWQgIC8qIE1haW4gQmFzc2UgKi8KKyNkZWZpbmUgVERBOTg3NV9NVFIgICAgICAgICAweDFlICAvKiBNYWluIHRyZWJsZSAqLworI2RlZmluZSBUREE5ODc1X0FDUyAgICAgICAgIDB4MWYgIC8qIEF1eGlsYXJ5IGNoYW5uZWwgc2VsZWN0IChGTSkgMGIwMDAwMDAwKi8KKyNkZWZpbmUgVERBOTg3NV9BVkwgICAgICAgICAweDIwICAvKiBBdXhpbGFyeSB2b2x1bWUgZ2F1Y2hlICovCisjZGVmaW5lIFREQTk4NzVfQVZSICAgICAgICAgMHgyMSAgLyogQXV4aWxhcnkgdm9sdW1lIGRyb2l0ZSAqLworI2RlZmluZSBUREE5ODc1X0FCQSAgICAgICAgIDB4MjIgIC8qIEF1eGlsYXJ5IEJhc3NlICovCisjZGVmaW5lIFREQTk4NzVfQVRSICAgICAgICAgMHgyMyAgLyogQXV4aWxhcnkgdHJlYmxlICovCisKKyNkZWZpbmUgVERBOTg3NV9NU1IgICAgICAgICAweDAyICAvKiBNb25pdG9yIHNlbGVjdCByZWdpc3RlciAqLworI2RlZmluZSBUREE5ODc1X0MxTVNCICAgICAgIDB4MDMgIC8qIENhcnJpZXIgMSAoRk0pIGZyZXF1ZW5jeSByZWdpc3RlciBNU0IgKi8KKyNkZWZpbmUgVERBOTg3NV9DMU1JQiAgICAgICAweDA0ICAvKiBDYXJyaWVyIDEgKEZNKSBmcmVxdWVuY3kgcmVnaXN0ZXIgKDE2LThdYiAqLworI2RlZmluZSBUREE5ODc1X0MxTFNCICAgICAgIDB4MDUgIC8qIENhcnJpZXIgMSAoRk0pIGZyZXF1ZW5jeSByZWdpc3RlciBMU0IgKi8KKyNkZWZpbmUgVERBOTg3NV9DMk1TQiAgICAgICAweDA2ICAvKiBDYXJyaWVyIDIgKG5pY2FtKSBmcmVxdWVuY3kgcmVnaXN0ZXIgTVNCICovCisjZGVmaW5lIFREQTk4NzVfQzJNSUIgICAgICAgMHgwNyAgLyogQ2FycmllciAyIChuaWNhbSkgZnJlcXVlbmN5IHJlZ2lzdGVyICgxNi04XWIgKi8KKyNkZWZpbmUgVERBOTg3NV9DMkxTQiAgICAgICAweDA4ICAvKiBDYXJyaWVyIDIgKG5pY2FtKSBmcmVxdWVuY3kgcmVnaXN0ZXIgTFNCICovCisjZGVmaW5lIFREQTk4NzVfRENSICAgICAgICAgMHgwOSAgLyogRGVtb2R1bGF0ZXVyIGNvbmZpZ3VyYXRpb24gcmVnaXJ0ZXIqLworI2RlZmluZSBUREE5ODc1X0RFRU0gICAgICAgIDB4MGEgIC8qIEZNIGRlLWVtcGhhc2lzIHJlZ2lydGVyKi8KKyNkZWZpbmUgVERBOTg3NV9GTUFUICAgICAgICAweDBiICAvKiBGTSBNYXRyaXggcmVnaXJ0ZXIqLworCisvKiB2YWx1ZXMgKi8KKyNkZWZpbmUgVERBOTg3NV9NVVRFX09OCSAgICAweGZmIC8qIGdlbmVyYWwgbXV0ZSAqLworI2RlZmluZSBUREE5ODc1X01VVEVfT0ZGICAgIDB4Y2MgLyogZ2VuZXJhbCBubyBtdXRlICovCisKK3N0YXRpYyBpbnQgdGRhOTg3NV9pbml0aWFsaXplKHN0cnVjdCBDSElQU1RBVEUgKmNoaXApCit7CisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0NGRywgMHhkMCk7IC8qcmVnIGRlIGNvbmZpZyAwIChyZXNldCkqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9NU1IsIDB4MDMpOyAgICAvKiBNb25pdG9yIDBiMDAwMDBYWFgqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9DMU1TQiwgMHgwMCk7ICAvKkNhcjEoRk0pIE1TQiBYTUh6Ki8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfQzFNSUIsIDB4MDApOyAgLypDYXIxKEZNKSBNSUIgWE1IeiovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0MxTFNCLCAweDAwKTsgIC8qQ2FyMShGTSkgTFNCIFhNSHoqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9DMk1TQiwgMHgwMCk7ICAvKkNhcjIoTklDQU0pIE1TQiBYTUh6Ki8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfQzJNSUIsIDB4MDApOyAgLypDYXIyKE5JQ0FNKSBNSUIgWE1IeiovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0MyTFNCLCAweDAwKTsgIC8qQ2FyMihOSUNBTSkgTFNCIFhNSHoqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9EQ1IsIDB4MDApOyAgICAvKkRlbW9kIGNvbmZpZyAweDAwKi8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfREVFTSwgMHg0NCk7ICAgLypERS1FbXBoIDBiMDEwMCAwMTAwKi8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfRk1BVCwgMHgwMCk7ICAgLypGTSBNYXRyaXggcmVnIDB4MDAqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9TQzEsIDB4MDApOyAgICAvKiBTQ0FSVCAxIChTQzEpKi8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfU0MyLCAweDAxKTsgICAgLyogU0NBUlQgMiAoc2MyKSovCisKKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfQ0gxViwgMHgxMCk7ICAvKiBDaGFubmVsIHZvbHVtZSAxIG11dGUqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9DSDJWLCAweDEwKTsgIC8qIENoYW5uZWwgdm9sdW1lIDIgbXV0ZSAqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9EQUNPUywgMHgwMik7IC8qIHNpZyBEQUMgaS9vKGluOm5pY2FtKSovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0FEQ0lTLCAweDZmKTsgLyogc2lnIEFEQyBpbnB1dChpbjptb25vKSovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0xPU1IsIDB4MDApOyAgLyogbGluZSBvdXQgKGluOm1vbm8pKi8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfQUVSLCAweDAwKTsgICAvKjA2IEVmZmVjdCAoQVZMK1BTRVVETykgKi8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfTUNTLCAweDQ0KTsgICAvKiBNYWluIGNoIHNlbGVjdCAoREFDKSAqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9NVkwsIDB4MDMpOyAgIC8qIFZvbCBNYWluIGxlZnQgMTBkQiAqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9NVlIsIDB4MDMpOyAgIC8qIFZvbCBNYWluIHJpZ2h0IDEwZEIqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9NQkEsIDB4MDApOyAgIC8qIE1haW4gQmFzcyBNYWluIDBkQiovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X01UUiwgMHgwMCk7ICAgLyogTWFpbiBUcmVibGUgTWFpbiAwZEIqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9BQ1MsIDB4NDQpOyAgIC8qIEF1eCBjaGFuIHNlbGVjdCAoZGFjKSovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0FWTCwgMHgwMCk7ICAgLyogVm9sIEF1eCBsZWZ0IDBkQiovCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X0FWUiwgMHgwMCk7ICAgLyogVm9sIEF1eCByaWdodCAwZEIqLworCWNoaXBfd3JpdGUoY2hpcCwgVERBOTg3NV9BQkEsIDB4MDApOyAgIC8qIEF1eCBCYXNzIE1haW4gMGRCKi8KKwljaGlwX3dyaXRlKGNoaXAsIFREQTk4NzVfQVRSLCAweDAwKTsgICAvKiBBdXggQWlndXMgTWFpbiAwZEIqLworCisJY2hpcF93cml0ZShjaGlwLCBUREE5ODc1X01VVCwgMHhjYyk7ICAgLyogR2VuZXJhbCBtdXRlICAqLworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHRkYTk4NzVfdm9sdW1lKGludCB2YWwpIHsgcmV0dXJuICh1bnNpZ25lZCBjaGFyKSh2YWwgLyA2MDIgLSA4NCk7IH0KK3N0YXRpYyBpbnQgdGRhOTg3NV9iYXNzKGludCB2YWwpIHsgcmV0dXJuICh1bnNpZ25lZCBjaGFyKShtYXgoLTEyLCB2YWwgLyAyMTE1IC0gMTUpKTsgfQorc3RhdGljIGludCB0ZGE5ODc1X3RyZWJsZShpbnQgdmFsKSB7IHJldHVybiAodW5zaWduZWQgY2hhcikodmFsIC8gMjYyMiAtIDEyKTsgfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLworCisKKy8qICoqKioqKioqKioqKioqKioqKioqKioqICoKKyAqIGkyYyBpbnRlcmZhY2UgZnVuY3Rpb25zICoKKyAqICoqKioqKioqKioqKioqKioqKioqKioqICovCisKK3N0YXRpYyBpbnQgdGRhOTg3NV9jaGVja2l0KHN0cnVjdCBDSElQU1RBVEUgKmNoaXApCit7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZCA9ICZjaGlwLT5zZDsKKwlpbnQgZGljLCByZXY7CisKKwlkaWMgPSBjaGlwX3JlYWQyKGNoaXAsIDI1NCk7CisJcmV2ID0gY2hpcF9yZWFkMihjaGlwLCAyNTUpOworCisJaWYgKGRpYyA9PSAwIHx8IGRpYyA9PSAyKSB7IC8qIHRkYTk4NzUgYW5kIHRkYTk4NzVBICovCisJCXY0bDJfaW5mbyhzZCwgImZvdW5kIHRkYTk4NzUlcyByZXYuICVkLlxuIiwKKwkJCWRpYyA9PSAwID8gIiIgOiAiQSIsIHJldik7CisJCXJldHVybiAxOworCX0KKwlyZXR1cm4gMDsKK30KIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogLyogYXVkaW8gY2hpcCBkZXNjcmlwdGlvbnMgLSBkZWZpbmVzK2Z1bmN0aW9ucyBmb3IgdGVhNjQyMCAgICAgICAgICAgICAgICAqLwpAQCAtMTI4MCw2ICsxMzkwLDcgQEAKIHN0YXRpYyBpbnQgdGRhOTg1NSAgPSAxOwogc3RhdGljIGludCB0ZGE5ODczICA9IDE7CiBzdGF0aWMgaW50IHRkYTk4NzRhID0gMTsKK3N0YXRpYyBpbnQgdGRhOTg3NSAgPSAxOwogc3RhdGljIGludCB0ZWE2MzAwOwkvKiBkZWZhdWx0IDAgLSBhZGRyZXNzIGNsYXNoIHdpdGggbXNwMzR4eCAqLwogc3RhdGljIGludCB0ZWE2MzIwOwkvKiBkZWZhdWx0IDAgLSBhZGRyZXNzIGNsYXNoIHdpdGggbXNwMzR4eCAqLwogc3RhdGljIGludCB0ZWE2NDIwICA9IDE7CkBAIC0xMjkyLDYgKzE0MDMsNyBAQAogbW9kdWxlX3BhcmFtKHRkYTk4NTUsIGludCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW0odGRhOTg3MywgaW50LCAwNDQ0KTsKIG1vZHVsZV9wYXJhbSh0ZGE5ODc0YSwgaW50LCAwNDQ0KTsKK21vZHVsZV9wYXJhbSh0ZGE5ODc1LCBpbnQsIDA0NDQpOwogbW9kdWxlX3BhcmFtKHRlYTYzMDAsIGludCwgMDQ0NCk7CiBtb2R1bGVfcGFyYW0odGVhNjMyMCwgaW50LCAwNDQ0KTsKIG1vZHVsZV9wYXJhbSh0ZWE2NDIwLCBpbnQsIDA0NDQpOwpAQCAtMTM0OSw2ICsxNDYxLDI2IEBACiAJCS5zZXRtb2RlICAgID0gdGRhOTg3NGFfc2V0bW9kZSwKIAl9LAogCXsKKwkJLm5hbWUgICAgICAgPSAidGRhOTg3NSIsCisJCS5pbnNtb2RvcHQgID0gJnRkYTk4NzUsCisJCS5hZGRyX2xvICAgID0gSTJDX0FERFJfVERBOTg3NSA+PiAxLAorCQkuYWRkcl9oaSAgICA9IEkyQ19BRERSX1REQTk4NzUgPj4gMSwKKwkJLmZsYWdzICAgICAgPSBDSElQX0hBU19WT0xVTUUgfCBDSElQX0hBU19CQVNTVFJFQkxFLAorCisJCS8qIGNhbGxiYWNrcyAqLworCQkuaW5pdGlhbGl6ZSA9IHRkYTk4NzVfaW5pdGlhbGl6ZSwKKwkJLmNoZWNraXQgICAgPSB0ZGE5ODc1X2NoZWNraXQsCisJCS52b2xmdW5jICAgID0gdGRhOTg3NV92b2x1bWUsCisJCS5iYXNzZnVuYyAgID0gdGRhOTg3NV9iYXNzLAorCQkudHJlYmxlZnVuYyA9IHRkYTk4NzVfdHJlYmxlLAorCQkubGVmdHJlZyAgICA9IFREQTk4NzVfTVZMLAorCQkucmlnaHRyZWcgICA9IFREQTk4NzVfTVZSLAorCQkuYmFzc3JlZyAgICA9IFREQTk4NzVfTUJBLAorCQkudHJlYmxlcmVnICA9IFREQTk4NzVfTVRSLAorCQkubGVmdGluaXQgICA9IDU4ODgwLAorCQkucmlnaHRpbml0ICA9IDU4ODgwLAorCX0sCisJewogCQkubmFtZSAgICAgICA9ICJ0ZGE5ODUwIiwKIAkJLmluc21vZG9wdCAgPSAmdGRhOTg1MCwKIAkJLmFkZHJfbG8gICAgPSBJMkNfQUREUl9UREE5ODV4X0wgPj4gMSwKQEAgLTE1MTEsNiArMTY0Myw4IEBACiAKIAlzd2l0Y2ggKGN0cmwtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlpZiAoIShkZXNjLT5mbGFncyAmIENISVBfSEFTX0lOUFVUU0VMKSkKKwkJCWJyZWFrOwogCQljdHJsLT52YWx1ZT1jaGlwLT5tdXRlZDsKIAkJcmV0dXJuIDA7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6CkBAIC0xNTUyLDYgKzE2ODYsOSBAQAogCiAJc3dpdGNoIChjdHJsLT5pZCkgewogCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKKwkJaWYgKCEoZGVzYy0+ZmxhZ3MgJiBDSElQX0hBU19JTlBVVFNFTCkpCisJCQlicmVhazsKKwogCQlpZiAoY3RybC0+dmFsdWUgPCAwIHx8IGN0cmwtPnZhbHVlID49IDIpCiAJCQlyZXR1cm4gLUVSQU5HRTsKIAkJY2hpcC0+bXV0ZWQgPSBjdHJsLT52YWx1ZTsKQEAgLTE2MzYsMjEgKzE3NzMsMjYgQEAKIAogCXN3aXRjaCAocWMtPmlkKSB7CiAJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlpZiAoZGVzYy0+ZmxhZ3MgJiBDSElQX0hBU19JTlBVVFNFTCkKKwkJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgMSwgMSwgMCk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgorCQlpZiAoZGVzYy0+ZmxhZ3MgJiBDSElQX0hBU19WT0xVTUUpCisJCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LCA2NTUzNSAvIDEwMCwgNTg4ODApOworCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBTEFOQ0U6Ci0JCWlmICghKGRlc2MtPmZsYWdzICYgQ0hJUF9IQVNfVk9MVU1FKSkKLQkJCXJldHVybiAtRUlOVkFMOworCQlpZiAoZGVzYy0+ZmxhZ3MgJiBDSElQX0hBU19WT0xVTUUpCisJCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDY1NTM1LCA2NTUzNSAvIDEwMCwgMzI3NjgpOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6CiAJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCWlmICghKGRlc2MtPmZsYWdzICYgQ0hJUF9IQVNfQkFTU1RSRUJMRSkpCi0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKGRlc2MtPmZsYWdzICYgQ0hJUF9IQVNfQkFTU1RSRUJMRSkKKwkJCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgMCwgNjU1MzUsIDY1NTM1IC8gMTAwLCAzMjc2OCk7CiAJCWJyZWFrOwogCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOworCQlicmVhazsKIAl9Ci0JcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxYyk7CisJcmV0dXJuIC1FSU5WQUw7CiB9CiAKIHN0YXRpYyBpbnQgdHZhdWRpb19zX3JvdXRpbmcoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgY29uc3Qgc3RydWN0IHY0bDJfcm91dGluZyAqcnQpCkBAIC0xNjU4LDcgKzE4MDAsOSBAQAogCXN0cnVjdCBDSElQU1RBVEUgKmNoaXAgPSB0b19zdGF0ZShzZCk7CiAJc3RydWN0IENISVBERVNDICpkZXNjID0gY2hpcC0+ZGVzYzsKIAotCWlmICghKGRlc2MtPmZsYWdzICYgQ0hJUF9IQVNfSU5QVVRTRUwpIHx8IHJ0LT5pbnB1dCA+PSA0KQorCWlmICghKGRlc2MtPmZsYWdzICYgQ0hJUF9IQVNfSU5QVVRTRUwpKQorCQlyZXR1cm4gMDsKKwlpZiAocnQtPmlucHV0ID49IDQpCiAJCXJldHVybiAtRUlOVkFMOwogCS8qIFRoZXJlIGFyZSBmb3VyIGlucHV0czogdHVuZXIsIHJhZGlvLCBleHRlcm4gYW5kIGludGVybi4gKi8KIAljaGlwLT5pbnB1dCA9IHJ0LT5pbnB1dDsKQEAgLTE2NzUsOCArMTgxOSwxMSBAQAogCXN0cnVjdCBDSElQREVTQyAqZGVzYyA9IGNoaXAtPmRlc2M7CiAJaW50IG1vZGUgPSAwOwogCisJaWYgKCFkZXNjLT5zZXRtb2RlKQorCQlyZXR1cm4gMDsKIAlpZiAoY2hpcC0+cmFkaW8pCiAJCXJldHVybiAwOworCiAJc3dpdGNoICh2dC0+YXVkbW9kZSkgewogCWNhc2UgVjRMMl9UVU5FUl9NT0RFX01PTk86CiAJY2FzZSBWNEwyX1RVTkVSX01PREVfU1RFUkVPOgpAQCAtMTY5Miw3ICsxODM5LDcgQEAKIAl9CiAJY2hpcC0+YXVkbW9kZSA9IHZ0LT5hdWRtb2RlOwogCi0JaWYgKGRlc2MtPnNldG1vZGUgJiYgbW9kZSkgeworCWlmIChtb2RlKSB7CiAJCWNoaXAtPndhdGNoX3N0ZXJlbyA9IDA7CiAJCS8qIGRlbF90aW1lcigmY2hpcC0+d3QpOyAqLwogCQljaGlwLT5tb2RlID0gbW9kZTsKQEAgLTE3MDcsMTUgKzE4NTQsMTcgQEAKIAlzdHJ1Y3QgQ0hJUERFU0MgKmRlc2MgPSBjaGlwLT5kZXNjOwogCWludCBtb2RlID0gVjRMMl9UVU5FUl9NT0RFX01PTk87CiAKKwlpZiAoIWRlc2MtPmdldG1vZGUpCisJCXJldHVybiAwOwogCWlmIChjaGlwLT5yYWRpbykKIAkJcmV0dXJuIDA7CisKIAl2dC0+YXVkbW9kZSA9IGNoaXAtPmF1ZG1vZGU7CiAJdnQtPnJ4c3ViY2hhbnMgPSAwOwogCXZ0LT5jYXBhYmlsaXR5ID0gVjRMMl9UVU5FUl9DQVBfU1RFUkVPIHwKIAkJVjRMMl9UVU5FUl9DQVBfTEFORzEgfCBWNEwyX1RVTkVSX0NBUF9MQU5HMjsKIAotCWlmIChkZXNjLT5nZXRtb2RlKQotCQltb2RlID0gZGVzYy0+Z2V0bW9kZShjaGlwKTsKKwltb2RlID0gZGVzYy0+Z2V0bW9kZShjaGlwKTsKIAogCWlmIChtb2RlICYgVjRMMl9UVU5FUl9NT0RFX01PTk8pCiAJCXZ0LT5yeHN1YmNoYW5zIHw9IFY0TDJfVFVORVJfU1VCX01PTk87CkBAIC0xOTAxLDYgKzIwNTAsNyBAQAogCX0KIAogCWNoaXAtPnRocmVhZCA9IE5VTEw7CisJaW5pdF90aW1lcigmY2hpcC0+d3QpOwogCWlmIChkZXNjLT5mbGFncyAmIENISVBfTkVFRF9DSEVDS01PREUpIHsKIAkJaWYgKCFkZXNjLT5nZXRtb2RlIHx8ICFkZXNjLT5zZXRtb2RlKSB7CiAJCQkvKiBUaGlzIHNob3VsZG4ndCBiZSBoYXBwZW4uIFdhcm4gdXNlciwgYnV0IGtlZXAgd29ya2luZwpAQCAtMTkxMCw3ICsyMDYwLDYgQEAKIAkJCXJldHVybiAwOwogCQl9CiAJCS8qIHN0YXJ0IGFzeW5jIHRocmVhZCAqLwotCQlpbml0X3RpbWVyKCZjaGlwLT53dCk7CiAJCWNoaXAtPnd0LmZ1bmN0aW9uID0gY2hpcF90aHJlYWRfd2FrZTsKIAkJY2hpcC0+d3QuZGF0YSAgICAgPSAodW5zaWduZWQgbG9uZyljaGlwOwogCQljaGlwLT50aHJlYWQgPSBrdGhyZWFkX3J1bihjaGlwX3RocmVhZCwgY2hpcCwgY2xpZW50LT5uYW1lKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZlZXByb20uYwppbmRleCA3ODI3N2FiLi5lMjRhMzhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2ZWVwcm9tLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dmVlcHJvbS5jCkBAIC0yNjEsNyArMjYxLDEyIEBACiAJeyBUVU5FUl9BQlNFTlQsICAgICAgICAJCSJNYXhMaW5lYXIgTVhMNTAwNV92MiJ9LAogCXsgVFVORVJfUEhJTElQU19UREE4MjkwLCAJIlBoaWxpcHMgMTgyNzFfODI5NSJ9LAogCS8qIDE1MC0xNTkgKi8KLQl7IFRVTkVSX0FCU0VOVCwgICAgICAgICAgICAgICAgICJYY2VpdmUgWEM1MDAwIn0sCisJeyBUVU5FUl9YQzUwMDAsICAgICAgICAgICAgICAgICAiWGNlaXZlIFhDNTAwMCJ9LAorCXsgVFVORVJfQUJTRU5ULCAgICAgICAgICAgICAgICAgIlhjZWl2ZSBYQzMwMjhMIn0sCisJeyBUVU5FUl9BQlNFTlQsICAgICAgICAgICAgICAgICAiTlhQIDE4MjcxQzJfNzE2eCJ9LAorCXsgVFVORVJfQUJTRU5ULCAgICAgICAgICAgICAgICAgIlhjZWl2ZSBYQzQwMDAifSwKKwl7IFRVTkVSX0FCU0VOVCwgICAgICAgICAgICAgICAgICJEaWJjb20gNzA3MCJ9LAorCXsgVFVORVJfUEhJTElQU19UREE4MjkwLCAgICAgICAgIk5YUCAxODI3MUMyIn0sCiB9OwogCiAvKiBVc2UgVjRMMl9JREVOVF9BTUJJR1VPVVMgZm9yIHRob3NlIGF1ZGlvICdjaGlwcycgdGhhdCBhcmUKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE0eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTR4LmMKaW5kZXggOGUyM2FhNS4uNDI2MmU2MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTR4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby90dnA1MTR4LmMKQEAgLTg2LDkgKzg2LDEyIEBACiAJc3RydWN0IHY0bDJfc3RhbmRhcmQgc3RhbmRhcmQ7CiB9OwogCitzdGF0aWMgc3RydWN0IHR2cDUxNHhfcmVnIHR2cDUxNHhfcmVnX2xpc3RfZGVmYXVsdFsweDQwXTsKIC8qKgotICogc3RydWN0IHR2cDUxNHhfZGVjb2RlZCAtIFRWUDUxNDYvNDcgZGVjb2RlciBvYmplY3QKKyAqIHN0cnVjdCB0dnA1MTR4X2RlY29kZXIgLSBUVlA1MTQ2LzQ3IGRlY29kZXIgb2JqZWN0CiAgKiBAdjRsMl9pbnRfZGV2aWNlOiBTbGF2ZSBoYW5kbGUKKyAqIEB0dnA1MTR4X3NsYXZlOiBTbGF2ZSBwb2ludGVyIHdoaWNoIGlzIHVzZWQgYnkgQHY0bDJfaW50X2RldmljZQorICogQHR2cDUxNHhfcmVnczogY29weSBvZiBodydzIHJlZ3Mgd2l0aCBwcmVzZXQgdmFsdWVzLgogICogQHBkYXRhOiBCb2FyZCBzcGVjaWZpYwogICogQGNsaWVudDogSTJDIGNsaWVudCBkYXRhCiAgKiBAaWQ6IEVudHJ5IGZyb20gSTJDIHRhYmxlCkBAIC0xMDMsNyArMTA2LDkgQEAKICAqIEByb3V0ZTogaW5wdXQgYW5kIG91dHB1dCByb3V0aW5nIGF0IGNoaXAgbGV2ZWwKICAqLwogc3RydWN0IHR2cDUxNHhfZGVjb2RlciB7Ci0Jc3RydWN0IHY0bDJfaW50X2RldmljZSAqdjRsMl9pbnRfZGV2aWNlOworCXN0cnVjdCB2NGwyX2ludF9kZXZpY2UgdjRsMl9pbnRfZGV2aWNlOworCXN0cnVjdCB2NGwyX2ludF9zbGF2ZSB0dnA1MTR4X3NsYXZlOworCXN0cnVjdCB0dnA1MTR4X3JlZyB0dnA1MTR4X3JlZ3NbQVJSQVlfU0laRSh0dnA1MTR4X3JlZ19saXN0X2RlZmF1bHQpXTsKIAljb25zdCBzdHJ1Y3QgdHZwNTE0eF9wbGF0Zm9ybV9kYXRhICpwZGF0YTsKIAlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50OwogCkBAIC0xMjQsNyArMTI5LDcgQEAKIH07CiAKIC8qIFRWUDUxNHggZGVmYXVsdCByZWdpc3RlciB2YWx1ZXMgKi8KLXN0YXRpYyBzdHJ1Y3QgdHZwNTE0eF9yZWcgdHZwNTE0eF9yZWdfbGlzdFtdID0geworc3RhdGljIHN0cnVjdCB0dnA1MTR4X3JlZyB0dnA1MTR4X3JlZ19saXN0X2RlZmF1bHRbXSA9IHsKIAl7VE9LX1dSSVRFLCBSRUdfSU5QVVRfU0VMLCAweDA1fSwJLyogQ29tcG9zaXRlIHNlbGVjdGVkICovCiAJe1RPS19XUklURSwgUkVHX0FGRV9HQUlOX0NUUkwsIDB4MEZ9LAogCXtUT0tfV1JJVEUsIFJFR19WSURFT19TVEQsIDB4MDB9LAkvKiBBdXRvIG1vZGUgKi8KQEAgLTQyMiw3ICs0MjcsNyBAQAogCiAJLyogY29tbW9uIHJlZ2lzdGVyIGluaXRpYWxpemF0aW9uICovCiAJZXJyID0KLQkgICAgdHZwNTE0eF93cml0ZV9yZWdzKGRlY29kZXItPmNsaWVudCwgdHZwNTE0eF9yZWdfbGlzdCk7CisJICAgIHR2cDUxNHhfd3JpdGVfcmVncyhkZWNvZGVyLT5jbGllbnQsIGRlY29kZXItPnR2cDUxNHhfcmVncyk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIApAQCAtNTgwLDcgKzU4NSw4IEBACiAJCXJldHVybiBlcnI7CiAKIAlkZWNvZGVyLT5jdXJyZW50X3N0ZCA9IGk7Ci0JdHZwNTE0eF9yZWdfbGlzdFtSRUdfVklERU9fU1REXS52YWwgPSBkZWNvZGVyLT5zdGRfbGlzdFtpXS52aWRlb19zdGQ7CisJZGVjb2Rlci0+dHZwNTE0eF9yZWdzW1JFR19WSURFT19TVERdLnZhbCA9CisJCWRlY29kZXItPnN0ZF9saXN0W2ldLnZpZGVvX3N0ZDsKIAogCXY0bF9kYmcoMSwgZGVidWcsIGRlY29kZXItPmNsaWVudCwgIlN0YW5kYXJkIHNldCB0bzogJXMiLAogCQkJZGVjb2Rlci0+c3RkX2xpc3RbaV0uc3RhbmRhcmQubmFtZSk7CkBAIC02MjUsOCArNjMxLDggQEAKIAlpZiAoZXJyKQogCQlyZXR1cm4gZXJyOwogCi0JdHZwNTE0eF9yZWdfbGlzdFtSRUdfSU5QVVRfU0VMXS52YWwgPSBpbnB1dF9zZWw7Ci0JdHZwNTE0eF9yZWdfbGlzdFtSRUdfT1VUUFVUX0ZPUk1BVFRFUjFdLnZhbCA9IG91dHB1dF9zZWw7CisJZGVjb2Rlci0+dHZwNTE0eF9yZWdzW1JFR19JTlBVVF9TRUxdLnZhbCA9IGlucHV0X3NlbDsKKwlkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX09VVFBVVF9GT1JNQVRURVIxXS52YWwgPSBvdXRwdXRfc2VsOwogCiAJLyogQ2xlYXIgc3RhdHVzICovCiAJbXNsZWVwKExPQ0tfUkVUUllfREVMQVkpOwpAQCAtNjg2LDcgKzY5Miw3IEBACiAJCQlicmVhazsJLyogSW5wdXQgZGV0ZWN0ZWQgKi8KIAl9CiAKLQlpZiAoKGN1cnJlbnRfc3RkID09IFNURF9JTlZBTElEKSB8fCAodHJ5X2NvdW50IDwgMCkpCisJaWYgKChjdXJyZW50X3N0ZCA9PSBTVERfSU5WQUxJRCkgfHwgKHRyeV9jb3VudCA8PSAwKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAlkZWNvZGVyLT5jdXJyZW50X3N0ZCA9IGN1cnJlbnRfc3RkOwpAQCAtNzE5LDEwICs3MjUsOSBAQAogCiAJc3dpdGNoIChxY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6Ci0JCS8qIEJyaWdodG5lc3Mgc3VwcG9ydGVkIGlzIHNhbWUgYXMgc3RhbmRhcmQgb25lICgwLTI1NSksCi0JCSAqIHNvIG1ha2UgdXNlIG9mIHN0YW5kYXJkIEFQSSBwcm92aWRlZC4KKwkJLyogQnJpZ2h0bmVzcyBzdXBwb3J0ZWQgaXMgKDAtMjU1KSwKIAkJICovCi0JCWVyciA9IHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChxY3RybCk7CisJCWVyciA9IHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAyNTUsIDEsIDEyOCk7CiAJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CiAJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgpAQCAtNzc5LDE2ICs3ODQsMTYgQEAKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6Ci0JCWN0cmwtPnZhbHVlID0gdHZwNTE0eF9yZWdfbGlzdFtSRUdfQlJJR0hUTkVTU10udmFsOworCQljdHJsLT52YWx1ZSA9IGRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfQlJJR0hUTkVTU10udmFsOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCQljdHJsLT52YWx1ZSA9IHR2cDUxNHhfcmVnX2xpc3RbUkVHX0NPTlRSQVNUXS52YWw7CisJCWN0cmwtPnZhbHVlID0gZGVjb2Rlci0+dHZwNTE0eF9yZWdzW1JFR19DT05UUkFTVF0udmFsOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046Ci0JCWN0cmwtPnZhbHVlID0gdHZwNTE0eF9yZWdfbGlzdFtSRUdfU0FUVVJBVElPTl0udmFsOworCQljdHJsLT52YWx1ZSA9IGRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfU0FUVVJBVElPTl0udmFsOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0hVRToKLQkJY3RybC0+dmFsdWUgPSB0dnA1MTR4X3JlZ19saXN0W1JFR19IVUVdLnZhbDsKKwkJY3RybC0+dmFsdWUgPSBkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX0hVRV0udmFsOwogCQlpZiAoY3RybC0+dmFsdWUgPT0gMHg3RikKIAkJCWN0cmwtPnZhbHVlID0gMTgwOwogCQllbHNlIGlmIChjdHJsLT52YWx1ZSA9PSAweDgwKQpAQCAtNzk4LDcgKzgwMyw3IEBACiAKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9BVVRPR0FJTjoKLQkJY3RybC0+dmFsdWUgPSB0dnA1MTR4X3JlZ19saXN0W1JFR19BRkVfR0FJTl9DVFJMXS52YWw7CisJCWN0cmwtPnZhbHVlID0gZGVjb2Rlci0+dHZwNTE0eF9yZWdzW1JFR19BRkVfR0FJTl9DVFJMXS52YWw7CiAJCWlmICgoY3RybC0+dmFsdWUgJiAweDMpID09IDMpCiAJCQljdHJsLT52YWx1ZSA9IDE7CiAJCWVsc2UKQEAgLTg0OCw3ICs4NTMsNyBAQAogCQkJCXZhbHVlKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7Ci0JCXR2cDUxNHhfcmVnX2xpc3RbUkVHX0JSSUdIVE5FU1NdLnZhbCA9IHZhbHVlOworCQlkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX0JSSUdIVE5FU1NdLnZhbCA9IHZhbHVlOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgogCQlpZiAoY3RybC0+dmFsdWUgPCAwIHx8IGN0cmwtPnZhbHVlID4gMjU1KSB7CkBAIC04NjEsNyArODY2LDcgQEAKIAkJCQl2YWx1ZSk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwotCQl0dnA1MTR4X3JlZ19saXN0W1JFR19DT05UUkFTVF0udmFsID0gdmFsdWU7CisJCWRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfQ09OVFJBU1RdLnZhbCA9IHZhbHVlOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CiAJCWlmIChjdHJsLT52YWx1ZSA8IDAgfHwgY3RybC0+dmFsdWUgPiAyNTUpIHsKQEAgLTg3NCw3ICs4NzksNyBAQAogCQkJCXZhbHVlKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7Ci0JCXR2cDUxNHhfcmVnX2xpc3RbUkVHX1NBVFVSQVRJT05dLnZhbCA9IHZhbHVlOworCQlkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX1NBVFVSQVRJT05dLnZhbCA9IHZhbHVlOwogCQlicmVhazsKIAljYXNlIFY0TDJfQ0lEX0hVRToKIAkJaWYgKHZhbHVlID09IDE4MCkKQEAgLTg5Myw3ICs4OTgsNyBAQAogCQkJCXZhbHVlKTsKIAkJaWYgKGVycikKIAkJCXJldHVybiBlcnI7Ci0JCXR2cDUxNHhfcmVnX2xpc3RbUkVHX0hVRV0udmFsID0gdmFsdWU7CisJCWRlY29kZXItPnR2cDUxNHhfcmVnc1tSRUdfSFVFXS52YWwgPSB2YWx1ZTsKIAkJYnJlYWs7CiAJY2FzZSBWNEwyX0NJRF9BVVRPR0FJTjoKIAkJaWYgKHZhbHVlID09IDEpCkBAIC05MTAsNyArOTE1LDcgQEAKIAkJCQl2YWx1ZSk7CiAJCWlmIChlcnIpCiAJCQlyZXR1cm4gZXJyOwotCQl0dnA1MTR4X3JlZ19saXN0W1JFR19BRkVfR0FJTl9DVFJMXS52YWwgPSB2YWx1ZTsKKwkJZGVjb2Rlci0+dHZwNTE0eF9yZWdzW1JFR19BRkVfR0FJTl9DVFJMXS52YWwgPSB2YWx1ZTsKIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJdjRsX2VycihkZWNvZGVyLT5jbGllbnQsCkBAIC0xMjc1LDcgKzEyODAsNyBAQAogCXN0cnVjdCB0dnA1MTR4X2RlY29kZXIgKmRlY29kZXIgPSBzLT5wcml2OwogCiAJLyogU2V0IGRlZmF1bHQgc3RhbmRhcmQgdG8gYXV0byAqLwotCXR2cDUxNHhfcmVnX2xpc3RbUkVHX1ZJREVPX1NURF0udmFsID0KKwlkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX1ZJREVPX1NURF0udmFsID0KIAkgICAgVklERU9fU1REX0FVVE9fU1dJVENIX0JJVDsKIAogCXJldHVybiB0dnA1MTR4X2NvbmZpZ3VyZShkZWNvZGVyKTsKQEAgLTEzNDQsMTEgKzEzNDksNiBAQAogCQkodjRsMl9pbnRfaW9jdGxfZnVuYyAqKSBpb2N0bF9zX3JvdXRpbmd9LAogfTsKIAotc3RhdGljIHN0cnVjdCB2NGwyX2ludF9zbGF2ZSB0dnA1MTR4X3NsYXZlID0gewotCS5pb2N0bHMgPSB0dnA1MTR4X2lvY3RsX2Rlc2MsCi0JLm51bV9pb2N0bHMgPSBBUlJBWV9TSVpFKHR2cDUxNHhfaW9jdGxfZGVzYyksCi19OwotCiBzdGF0aWMgc3RydWN0IHR2cDUxNHhfZGVjb2RlciB0dnA1MTR4X2RldiA9IHsKIAkuc3RhdGUgPSBTVEFURV9OT1RfREVURUNURUQsCiAKQEAgLTEzNjksMTcgKzEzNjksMTUgQEAKIAkuY3VycmVudF9zdGQgPSBTVERfTlRTQ19NSiwKIAkuc3RkX2xpc3QgPSB0dnA1MTR4X3N0ZF9saXN0LAogCS5udW1fc3RkcyA9IEFSUkFZX1NJWkUodHZwNTE0eF9zdGRfbGlzdCksCi0KLX07Ci0KLXN0YXRpYyBzdHJ1Y3QgdjRsMl9pbnRfZGV2aWNlIHR2cDUxNHhfaW50X2RldmljZSA9IHsKLQkubW9kdWxlID0gVEhJU19NT0RVTEUsCi0JLm5hbWUgPSBUVlA1MTRYX01PRFVMRV9OQU1FLAotCS5wcml2ID0gJnR2cDUxNHhfZGV2LAotCS50eXBlID0gdjRsMl9pbnRfdHlwZV9zbGF2ZSwKLQkudSA9IHsKLQkgICAgICAuc2xhdmUgPSAmdHZwNTE0eF9zbGF2ZSwKLQkgICAgICB9LAorCS52NGwyX2ludF9kZXZpY2UgPSB7CisJCS5tb2R1bGUgPSBUSElTX01PRFVMRSwKKwkJLm5hbWUgPSBUVlA1MTRYX01PRFVMRV9OQU1FLAorCQkudHlwZSA9IHY0bDJfaW50X3R5cGVfc2xhdmUsCisJfSwKKwkudHZwNTE0eF9zbGF2ZSA9IHsKKwkJLmlvY3RscyA9IHR2cDUxNHhfaW9jdGxfZGVzYywKKwkJLm51bV9pb2N0bHMgPSBBUlJBWV9TSVpFKHR2cDUxNHhfaW9jdGxfZGVzYyksCisJfSwKIH07CiAKIC8qKgpAQCAtMTM5MiwyNiArMTM5MCwzNyBAQAogc3RhdGljIGludAogdHZwNTE0eF9wcm9iZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7Ci0Jc3RydWN0IHR2cDUxNHhfZGVjb2RlciAqZGVjb2RlciA9ICZ0dnA1MTR4X2RldjsKKwlzdHJ1Y3QgdHZwNTE0eF9kZWNvZGVyICpkZWNvZGVyOwogCWludCBlcnI7CiAKIAkvKiBDaGVjayBpZiB0aGUgYWRhcHRlciBzdXBwb3J0cyB0aGUgbmVlZGVkIGZlYXR1cmVzICovCiAJaWYgKCFpMmNfY2hlY2tfZnVuY3Rpb25hbGl0eShjbGllbnQtPmFkYXB0ZXIsIEkyQ19GVU5DX1NNQlVTX0JZVEVfREFUQSkpCiAJCXJldHVybiAtRUlPOwogCi0JZGVjb2Rlci0+cGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOwotCWlmICghZGVjb2Rlci0+cGRhdGEpIHsKKwlkZWNvZGVyID0ga3phbGxvYyhzaXplb2YoKmRlY29kZXIpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRlY29kZXIpCisJCXJldHVybiAtRU5PTUVNOworCisJaWYgKCFjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhKSB7CiAJCXY0bF9lcnIoY2xpZW50LCAiTm8gcGxhdGZvcm0gZGF0YSEhXG4iKTsKLQkJcmV0dXJuIC1FTk9ERVY7CisJCWVyciA9IC1FTk9ERVY7CisJCWdvdG8gb3V0X2ZyZWU7CiAJfQorCisJKmRlY29kZXIgPSB0dnA1MTR4X2RldjsKKwlkZWNvZGVyLT52NGwyX2ludF9kZXZpY2UucHJpdiA9IGRlY29kZXI7CisJZGVjb2Rlci0+cGRhdGEgPSBjbGllbnQtPmRldi5wbGF0Zm9ybV9kYXRhOworCWRlY29kZXItPnY0bDJfaW50X2RldmljZS51LnNsYXZlID0gJmRlY29kZXItPnR2cDUxNHhfc2xhdmU7CisJbWVtY3B5KGRlY29kZXItPnR2cDUxNHhfcmVncywgdHZwNTE0eF9yZWdfbGlzdF9kZWZhdWx0LAorCQkJc2l6ZW9mKHR2cDUxNHhfcmVnX2xpc3RfZGVmYXVsdCkpOwogCS8qCiAJICogRmV0Y2ggcGxhdGZvcm0gc3BlY2lmaWMgZGF0YSwgYW5kIGNvbmZpZ3VyZSB0aGUKIAkgKiB0dnA1MTR4X3JlZ19saXN0W10gYWNjb3JkaW5nbHkuIFNpbmNlIHRoaXMgaXMgb25lCiAJICogdGltZSBjb25maWd1cmF0aW9uLCBubyBuZWVkIHRvIHByZXNlcnZlLgogCSAqLwotCXR2cDUxNHhfcmVnX2xpc3RbUkVHX09VVFBVVF9GT1JNQVRURVIyXS52YWwgfD0KKwlkZWNvZGVyLT50dnA1MTR4X3JlZ3NbUkVHX09VVFBVVF9GT1JNQVRURVIyXS52YWwgfD0KIAkJCShkZWNvZGVyLT5wZGF0YS0+Y2xrX3BvbGFyaXR5IDw8IDEpOwotCXR2cDUxNHhfcmVnX2xpc3RbUkVHX1NZTkNfQ09OVFJPTF0udmFsIHw9CisJZGVjb2Rlci0+dHZwNTE0eF9yZWdzW1JFR19TWU5DX0NPTlRST0xdLnZhbCB8PQogCQkJKChkZWNvZGVyLT5wZGF0YS0+aHNfcG9sYXJpdHkgPDwgMikgfAogCQkJKGRlY29kZXItPnBkYXRhLT52c19wb2xhcml0eSA8PCAzKSk7CiAJLyoKQEAgLTE0MTksMjMgKzE0MjgsMjcgQEAKIAkgKi8KIAlkZWNvZGVyLT5pZCA9IChzdHJ1Y3QgaTJjX2RldmljZV9pZCAqKWlkOwogCS8qIEF0dGFjaCB0byBNYXN0ZXIgKi8KLQlzdHJjcHkodHZwNTE0eF9pbnRfZGV2aWNlLnUuc2xhdmUtPmF0dGFjaF90bywgZGVjb2Rlci0+cGRhdGEtPm1hc3Rlcik7Ci0JZGVjb2Rlci0+djRsMl9pbnRfZGV2aWNlID0gJnR2cDUxNHhfaW50X2RldmljZTsKKwlzdHJjcHkoZGVjb2Rlci0+djRsMl9pbnRfZGV2aWNlLnUuc2xhdmUtPmF0dGFjaF90bywKKwkJCWRlY29kZXItPnBkYXRhLT5tYXN0ZXIpOwogCWRlY29kZXItPmNsaWVudCA9IGNsaWVudDsKIAlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBkZWNvZGVyKTsKIAogCS8qIFJlZ2lzdGVyIHdpdGggVjRMMiBsYXllciBhcyBzbGF2ZSBkZXZpY2UgKi8KLQllcnIgPSB2NGwyX2ludF9kZXZpY2VfcmVnaXN0ZXIoZGVjb2Rlci0+djRsMl9pbnRfZGV2aWNlKTsKKwllcnIgPSB2NGwyX2ludF9kZXZpY2VfcmVnaXN0ZXIoJmRlY29kZXItPnY0bDJfaW50X2RldmljZSk7CiAJaWYgKGVycikgewogCQlpMmNfc2V0X2NsaWVudGRhdGEoY2xpZW50LCBOVUxMKTsKIAkJdjRsX2VycihjbGllbnQsCiAJCQkiVW5hYmxlIHRvIHJlZ2lzdGVyIHRvIHY0bDIuIEVyclslZF1cbiIsIGVycik7CisJCWdvdG8gb3V0X2ZyZWU7CiAKIAl9IGVsc2UKIAkJdjRsX2luZm8oY2xpZW50LCAiUmVnaXN0ZXJlZCB0byB2NGwyIG1hc3RlciAlcyEhXG4iLAogCQkJCWRlY29kZXItPnBkYXRhLT5tYXN0ZXIpOwotCiAJcmV0dXJuIDA7CisKK291dF9mcmVlOgorCWtmcmVlKGRlY29kZXIpOworCXJldHVybiBlcnI7CiB9CiAKIC8qKgpAQCAtMTQ1Miw5ICsxNDY1LDkgQEAKIAlpZiAoIWNsaWVudC0+YWRhcHRlcikKIAkJcmV0dXJuIC1FTk9ERVY7CS8qIG91ciBjbGllbnQgaXNuJ3QgYXR0YWNoZWQgKi8KIAotCXY0bDJfaW50X2RldmljZV91bnJlZ2lzdGVyKGRlY29kZXItPnY0bDJfaW50X2RldmljZSk7CisJdjRsMl9pbnRfZGV2aWNlX3VucmVnaXN0ZXIoJmRlY29kZXItPnY0bDJfaW50X2RldmljZSk7CiAJaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgTlVMTCk7Ci0KKwlrZnJlZShkZWNvZGVyKTsKIAlyZXR1cm4gMDsKIH0KIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3R2cDUxNTAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE1MC5jCmluZGV4IDJjZDY0ZWYuLjNhNWE5NWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE1MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHZwNTE1MC5jCkBAIC04LDcgKzgsNiBAQAogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdHZwNTE1MC5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KQEAgLTYzMiw3ICs2MzEsNyBAQAogCWNvbnN0IHN0cnVjdCBpMmNfdmJpX3JhbV92YWx1ZSAqcmVncyA9IHZiaV9yYW1fZGVmYXVsdDsKIAlpbnQgbGluZTsKIAotCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIlZJRElPQ19HX1NMSUNFRF9WQklfQ0FQXG4iKTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJnX3NsaWNlZF92YmlfY2FwXG4iKTsKIAltZW1zZXQoY2FwLCAwLCBzaXplb2YgKmNhcCk7CiAKIAl3aGlsZSAocmVncy0+cmVnICE9ICh1MTYpLTEgKSB7CkBAIC04MzEsNyArODMwLDcgQEAKIAogc3RhdGljIGludCB0dnA1MTUwX2dfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQogewotCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIlZJRElPQ19HX0NUUkwgY2FsbGVkXG4iKTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJnX2N0cmwgY2FsbGVkXG4iKTsKIAogCXN3aXRjaCAoY3RybC0+aWQpIHsKIAljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CkBAIC04NjEsNyArODYwLDcgQEAKIAkJaWYgKGN0cmwtPnZhbHVlIDwgdHZwNTE1MF9xY3RybFtpXS5taW5pbXVtIHx8CiAJCSAgICBjdHJsLT52YWx1ZSA+IHR2cDUxNTBfcWN0cmxbaV0ubWF4aW11bSkKIAkJCXJldHVybiAtRVJBTkdFOwotCQl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJWSURJT0NfU19DVFJMOiBpZD0lZCwgdmFsdWU9JWRcbiIsCisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInNfY3RybDogaWQ9JWQsIHZhbHVlPSVkXG4iLAogCQkJCQljdHJsLT5pZCwgY3RybC0+dmFsdWUpOwogCQlicmVhazsKIAl9CkBAIC0xMDE1LDcgKzEwMTQsNyBAQAogewogCWludCBpOwogCi0JdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiVklESU9DX1FVRVJZQ1RSTCBjYWxsZWRcbiIpOworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInF1ZXJ5Y3RybCBjYWxsZWRcbiIpOwogCiAJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodHZwNTE1MF9xY3RybCk7IGkrKykKIAkJaWYgKHFjLT5pZCAmJiBxYy0+aWQgPT0gdHZwNTE1MF9xY3RybFtpXS5pZCkgewpAQCAtMTEyNiw3ICsxMTI1LDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gInR2cDUxNTAiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9UVlA1MTUwLAogCS5jb21tYW5kID0gdHZwNTE1MF9jb21tYW5kLAogCS5wcm9iZSA9IHR2cDUxNTBfcHJvYmUsCiAJLnJlbW92ZSA9IHR2cDUxNTBfcmVtb3ZlLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby90dzk5MTAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdHc5OTEwLmMKaW5kZXggNTJjMDM1Ny4uYTM5OTQ3NiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby90dzk5MTAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3R3OTkxMC5jCkBAIC00NjAsOSArNDYwLDExIEBACiAJCQkgICB1OCBtYXNrLCB1OCBzZXQpCiB7CiAJczMyIHZhbCA9IGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIGNvbW1hbmQpOworCWlmICh2YWwgPCAwKQorCQlyZXR1cm4gdmFsOwogCiAJdmFsICY9IH5tYXNrOwotCXZhbCB8PSAgc2V0OworCXZhbCB8PSBzZXQgJiBtYXNrOwogCiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCBjb21tYW5kLCB2YWwpOwogfQpAQCAtNjM5LDggKzY0MSw4IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCB0dzk5MTBfc2V0X2ZtdChzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKmljZCwgX191MzIgcGl4Zm10LAotCQkJICAgICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKK3N0YXRpYyBpbnQgdHc5OTEwX3NldF9jcm9wKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICAgc3RydWN0IHY0bDJfcmVjdCAqcmVjdCkKIHsKIAlzdHJ1Y3QgdHc5OTEwX3ByaXYgKnByaXYgPSBjb250YWluZXJfb2YoaWNkLCBzdHJ1Y3QgdHc5OTEwX3ByaXYsIGljZCk7CiAJaW50ICAgICAgICAgICAgICAgICByZXQgID0gLUVJTlZBTDsKQEAgLTczMSw4ICs3MzMsMzMgQEAKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHR3OTkxMF9zZXRfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAorCQkJICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCit7CisJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CisJc3RydWN0IHY0bDJfcmVjdCByZWN0ID0geworCQkubGVmdAk9IGljZC0+eF9jdXJyZW50LAorCQkudG9wCT0gaWNkLT55X2N1cnJlbnQsCisJCS53aWR0aAk9IHBpeC0+d2lkdGgsCisJCS5oZWlnaHQJPSBwaXgtPmhlaWdodCwKKwl9OworCWludCBpOworCisJLyoKKwkgKiBjaGVjayBjb2xvciBmb3JtYXQKKwkgKi8KKwlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh0dzk5MTBfY29sb3JfZm10KTsgaSsrKQorCQlpZiAocGl4LT5waXhlbGZvcm1hdCA9PSB0dzk5MTBfY29sb3JfZm10W2ldLmZvdXJjYykKKwkJCWJyZWFrOworCisJaWYgKGkgPT0gQVJSQVlfU0laRSh0dzk5MTBfY29sb3JfZm10KSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gdHc5OTEwX3NldF9jcm9wKGljZCwgJnJlY3QpOworfQorCiBzdGF0aWMgaW50IHR3OTkxMF90cnlfZm10KHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqaWNkLAotCQkJICAgICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQorCQkJICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CiAJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGl4ID0gJmYtPmZtdC5waXg7CiAJY29uc3Qgc3RydWN0IHR3OTkxMF9zY2FsZV9jdHJsICpzY2FsZTsKQEAgLTgyMCw2ICs4NDcsNyBAQAogCS5yZWxlYXNlCQk9IHR3OTkxMF9yZWxlYXNlLAogCS5zdGFydF9jYXB0dXJlCQk9IHR3OTkxMF9zdGFydF9jYXB0dXJlLAogCS5zdG9wX2NhcHR1cmUJCT0gdHc5OTEwX3N0b3BfY2FwdHVyZSwKKwkuc2V0X2Nyb3AJCT0gdHc5OTEwX3NldF9jcm9wLAogCS5zZXRfZm10CQk9IHR3OTkxMF9zZXRfZm10LAogCS50cnlfZm10CQk9IHR3OTkxMF90cnlfZm10LAogCS5zZXRfYnVzX3BhcmFtCQk9IHR3OTkxMF9zZXRfYnVzX3BhcmFtLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDAzMWEuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwMzFhLmMKaW5kZXggZjQ1MjJiYi4uYzBhYzY1MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDAzMWEuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDMxYS5jCkBAIC0xODcsMTEgKzE4Nyw2IEBACiB9CiAjZW5kaWYKIAotc3RhdGljIGludCB1cGQ2NDAzMWFfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHVwZDY0MDMxYV9jb3JlX29wcyA9IHsKQEAgLTI2Nyw4ICsyNjIsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAidXBkNjQwMzFhIiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfVVBENjQwMzFBLAotCS5jb21tYW5kID0gdXBkNjQwMzFhX2NvbW1hbmQsCiAJLnByb2JlID0gdXBkNjQwMzFhX3Byb2JlLAogCS5yZW1vdmUgPSB1cGQ2NDAzMWFfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHVwZDY0MDMxYV9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwODMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXBkNjQwODMuYwppbmRleCBhNWZiNzRiLi40MTBjOTE1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VwZDY0MDgzLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91cGQ2NDA4My5jCkBAIC0xNjQsMTEgKzE2NCw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdXBkNjQwODNfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHVwZDY0MDgzX2NvcmVfb3BzID0gewpAQCAtMjM5LDggKzIzNCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJ1cGQ2NDA4MyIsCi0JLmRyaXZlcmlkID0gSTJDX0RSSVZFUklEX1VQRDY0MDgzLAotCS5jb21tYW5kID0gdXBkNjQwODNfY29tbWFuZCwKIAkucHJvYmUgPSB1cGQ2NDA4M19wcm9iZSwKIAkucmVtb3ZlID0gdXBkNjQwODNfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHVwZDY0MDgzX2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby92aWNhbS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aWRlby92aWNhbS5jCmluZGV4IDJmMTEwNjMuLjhkNzM5NzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlkZW8vdmljYW0uYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpZGVvL3ZpY2FtLmMKQEAgLTE5MSw3ICsxOTEsNyBAQAogewogCWludCBlcnI7CiAJY29uc3Qgc3RydWN0IGloZXhfYmlucmVjICpyZWM7Ci0JY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdzsKKwljb25zdCBzdHJ1Y3QgZmlybXdhcmUgKnVuaW5pdGlhbGl6ZWRfdmFyKGZ3KTsKIAogCWVyciA9IHJlcXVlc3RfaWhleF9maXJtd2FyZSgmZncsICJ2aWNhbS9maXJtd2FyZS5mdyIsICZjYW0tPnVkZXYtPmRldik7CiAJaWYgKGVycikgewpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWNvcmUuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1jb3JlLmMKaW5kZXggOWU0ZjUwNi4uYTBmZWIxYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWNvcmUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tY29yZS5jCkBAIC0zNiw3ICszNiw2IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAKICNpbmNsdWRlIDxtZWRpYS9zYWE3MTE1Lmg+CkBAIC0zODEsOCArMzgwLDkgQEAKIAl1c2J2aXNpb24tPnNjcmF0Y2ggPSB2bWFsbG9jXzMyKHNjcmF0Y2hfYnVmX3NpemUpOwogCXNjcmF0Y2hfcmVzZXQodXNidmlzaW9uKTsKIAlpZih1c2J2aXNpb24tPnNjcmF0Y2ggPT0gTlVMTCkgewotCQllcnIoIiVzOiB1bmFibGUgdG8gYWxsb2NhdGUgJWQgYnl0ZXMgZm9yIHNjcmF0Y2giLAotCQkgICAgX19mdW5jX18sIHNjcmF0Y2hfYnVmX3NpemUpOworCQlkZXZfZXJyKCZ1c2J2aXNpb24tPmRldi0+ZGV2LAorCQkJIiVzOiB1bmFibGUgdG8gYWxsb2NhdGUgJWQgYnl0ZXMgZm9yIHNjcmF0Y2hcbiIsCisJCQkJX19mdW5jX18sIHNjcmF0Y2hfYnVmX3NpemUpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJcmV0dXJuIDA7CkBAIC00OTEsOCArNDkxLDkgQEAKIAlpbnQgSUZCX3NpemUgPSBNQVhfRlJBTUVfV0lEVEggKiBNQVhfRlJBTUVfSEVJR0hUICogMyAvIDI7CiAJdXNidmlzaW9uLT5JbnRyYUZyYW1lQnVmZmVyID0gdm1hbGxvY18zMihJRkJfc2l6ZSk7CiAJaWYgKHVzYnZpc2lvbi0+SW50cmFGcmFtZUJ1ZmZlciA9PSBOVUxMKSB7Ci0JCWVycigiJXM6IHVuYWJsZSB0byBhbGxvY2F0ZSAlZCBmb3IgY29tcHIuIGZyYW1lIGJ1ZmZlciIsCi0JCSAgICBfX2Z1bmNfXywgSUZCX3NpemUpOworCQlkZXZfZXJyKCZ1c2J2aXNpb24tPmRldi0+ZGV2LAorCQkJIiVzOiB1bmFibGUgdG8gYWxsb2NhdGUgJWQgZm9yIGNvbXByLiBmcmFtZSBidWZmZXJcbiIsCisJCQkJX19mdW5jX18sIElGQl9zaXplKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXJldHVybiAwOwpAQCAtMTUxNCw4ICsxNTE1LDkgQEAKIAllcnJDb2RlID0gdXNiX3N1Ym1pdF91cmIgKHVyYiwgR0ZQX0FUT01JQyk7CiAKIAlpZihlcnJDb2RlKSB7Ci0JCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiIGZhaWxlZDogZXJyb3IgJWQiLAotCQkgICAgX19mdW5jX18sIGVyckNvZGUpOworCQlkZXZfZXJyKCZ1c2J2aXNpb24tPmRldi0+ZGV2LAorCQkJIiVzOiB1c2Jfc3VibWl0X3VyYiBmYWlsZWQ6IGVycm9yICVkXG4iLAorCQkJCV9fZnVuY19fLCBlcnJDb2RlKTsKIAl9CiAKIAlyZXR1cm47CkBAIC0xNTQ2LDcgKzE1NDgsOCBAQAogCQkJCTAsIChfX3UxNikgcmVnLCBidWZmZXIsIDEsIEhaKTsKIAogCWlmIChlcnJDb2RlIDwgMCkgewotCQllcnIoIiVzOiBmYWlsZWQ6IGVycm9yICVkIiwgX19mdW5jX18sIGVyckNvZGUpOworCQlkZXZfZXJyKCZ1c2J2aXNpb24tPmRldi0+ZGV2LAorCQkJIiVzOiBmYWlsZWQ6IGVycm9yICVkXG4iLCBfX2Z1bmNfXywgZXJyQ29kZSk7CiAJCXJldHVybiBlcnJDb2RlOwogCX0KIAlyZXR1cm4gYnVmZmVyWzBdOwpAQCAtMTU3NCw3ICsxNTc3LDggQEAKIAkJCQlVU0JfUkVDSVBfRU5EUE9JTlQsIDAsIChfX3UxNikgcmVnLCAmdmFsdWUsIDEsIEhaKTsKIAogCWlmIChlcnJDb2RlIDwgMCkgewotCQllcnIoIiVzOiBmYWlsZWQ6IGVycm9yICVkIiwgX19mdW5jX18sIGVyckNvZGUpOworCQlkZXZfZXJyKCZ1c2J2aXNpb24tPmRldi0+ZGV2LAorCQkJIiVzOiBmYWlsZWQ6IGVycm9yICVkXG4iLCBfX2Z1bmNfXywgZXJyQ29kZSk7CiAJfQogCXJldHVybiBlcnJDb2RlOwogfQpAQCAtMTg1MCw3ICsxODU0LDggQEAKIAkJCQkgMCwgKF9fdTE2KSBVU0JWSVNJT05fTFhTSVpFX08sIHZhbHVlLCA0LCBIWik7CiAKIAkJaWYgKGVyckNvZGUgPCAwKSB7Ci0JCQllcnIoIiVzIGZhaWxlZDogZXJyb3IgJWQiLCBfX2Z1bmNfXywgZXJyQ29kZSk7CisJCQlkZXZfZXJyKCZ1c2J2aXNpb24tPmRldi0+ZGV2LAorCQkJCSIlcyBmYWlsZWQ6IGVycm9yICVkXG4iLCBfX2Z1bmNfXywgZXJyQ29kZSk7CiAJCQlyZXR1cm4gZXJyQ29kZTsKIAkJfQogCQl1c2J2aXNpb24tPmN1cndpZHRoID0gdXNidmlzaW9uLT5zdHJldGNoX3dpZHRoICogVXNiV2lkdGg7CkBAIC0yMjM2LDcgKzIyNDEsNyBAQAogCQkJICAgICAoX191MTYpIFVTQlZJU0lPTl9EUk1fUFJNMSwgdmFsdWUsIDgsIEhaKTsKIAogCWlmIChyYyA8IDApIHsKLQkJZXJyKCIlc0VSUk9SPSVkIiwgX19mdW5jX18sIHJjKTsKKwkJZGV2X2VycigmdXNidmlzaW9uLT5kZXYtPmRldiwgIiVzRVJST1I9JWRcbiIsIF9fZnVuY19fLCByYyk7CiAJCXJldHVybiByYzsKIAl9CiAKQEAgLTI0MzIsOCArMjQzNyw5IEBACiAJCVBERUJVRyhEQkdfRlVOQywic2V0dGluZyBhbHRlcm5hdGUgJWQgd2l0aCB3TWF4UGFja2V0U2l6ZT0ldSIsIGRldi0+aWZhY2VBbHQsZGV2LT5pc29jUGFja2V0U2l6ZSk7CiAJCWVyckNvZGUgPSB1c2Jfc2V0X2ludGVyZmFjZShkZXYtPmRldiwgZGV2LT5pZmFjZSwgZGV2LT5pZmFjZUFsdCk7CiAJCWlmIChlcnJDb2RlIDwgMCkgewotCQkJZXJyICgiY2Fubm90IGNoYW5nZSBhbHRlcm5hdGUgbnVtYmVyIHRvICVkIChlcnJvcj0laSkiLAotCQkJCQkJCWRldi0+aWZhY2VBbHQsIGVyckNvZGUpOworCQkJZGV2X2VycigmZGV2LT5kZXYtPmRldiwKKwkJCQkiY2Fubm90IGNoYW5nZSBhbHRlcm5hdGUgbnVtYmVyIHRvICVkIChlcnJvcj0laSlcbiIsCisJCQkJCWRldi0+aWZhY2VBbHQsIGVyckNvZGUpOwogCQkJcmV0dXJuIGVyckNvZGU7CiAJCX0KIAl9CkBAIC0yNDg0LDcgKzI0OTAsOCBAQAogCiAJCXVyYiA9IHVzYl9hbGxvY191cmIoVVNCVklTSU9OX1VSQl9GUkFNRVMsIEdGUF9LRVJORUwpOwogCQlpZiAodXJiID09IE5VTEwpIHsKLQkJCWVycigiJXM6IHVzYl9hbGxvY191cmIoKSBmYWlsZWQiLCBfX2Z1bmNfXyk7CisJCQlkZXZfZXJyKCZ1c2J2aXNpb24tPmRldi0+ZGV2LAorCQkJCSIlczogdXNiX2FsbG9jX3VyYigpIGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQkJcmV0dXJuIC1FTk9NRU07CiAJCX0KIAkJdXNidmlzaW9uLT5zYnVmW2J1ZklkeF0udXJiID0gdXJiOwpAQCAtMjQ5Niw3ICsyNTAzLDcgQEAKIAkJdXJiLT5kZXYgPSBkZXY7CiAJCXVyYi0+Y29udGV4dCA9IHVzYnZpc2lvbjsKIAkJdXJiLT5waXBlID0gdXNiX3Jjdmlzb2NwaXBlKGRldiwgdXNidmlzaW9uLT52aWRlb19lbmRwKTsKLQkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUDsKKwkJdXJiLT50cmFuc2Zlcl9mbGFncyA9IFVSQl9JU09fQVNBUCB8IFVSQl9OT19UUkFOU0ZFUl9ETUFfTUFQOwogCQl1cmItPmludGVydmFsID0gMTsKIAkJdXJiLT50cmFuc2Zlcl9idWZmZXIgPSB1c2J2aXNpb24tPnNidWZbYnVmSWR4XS5kYXRhOwogCQl1cmItPmNvbXBsZXRlID0gdXNidmlzaW9uX2lzb2NJcnE7CkBAIC0yNTE2LDggKzI1MjMsOSBAQAogCQkJZXJyQ29kZSA9IHVzYl9zdWJtaXRfdXJiKHVzYnZpc2lvbi0+c2J1ZltidWZJZHhdLnVyYiwKIAkJCQkJCSBHRlBfS0VSTkVMKTsKIAkJaWYgKGVyckNvZGUpIHsKLQkJCWVycigiJXM6IHVzYl9zdWJtaXRfdXJiKCVkKSBmYWlsZWQ6IGVycm9yICVkIiwKLQkJCSAgICBfX2Z1bmNfXywgYnVmSWR4LCBlcnJDb2RlKTsKKwkJCWRldl9lcnIoJnVzYnZpc2lvbi0+ZGV2LT5kZXYsCisJCQkJIiVzOiB1c2Jfc3VibWl0X3VyYiglZCkgZmFpbGVkOiBlcnJvciAlZFxuIiwKKwkJCQkJX19mdW5jX18sIGJ1ZklkeCwgZXJyQ29kZSk7CiAJCX0KIAl9CiAKQEAgLTI1NjYsOCArMjU3NCw5IEBACiAJCWVyckNvZGUgPSB1c2Jfc2V0X2ludGVyZmFjZSh1c2J2aXNpb24tPmRldiwgdXNidmlzaW9uLT5pZmFjZSwKIAkJCQkJICAgIHVzYnZpc2lvbi0+aWZhY2VBbHQpOwogCQlpZiAoZXJyQ29kZSA8IDApIHsKLQkJCWVycigiJXM6IHVzYl9zZXRfaW50ZXJmYWNlKCkgZmFpbGVkOiBlcnJvciAlZCIsCi0JCQkgICAgX19mdW5jX18sIGVyckNvZGUpOworCQkJZGV2X2VycigmdXNidmlzaW9uLT5kZXYtPmRldiwKKwkJCQkiJXM6IHVzYl9zZXRfaW50ZXJmYWNlKCkgZmFpbGVkOiBlcnJvciAlZFxuIiwKKwkJCQkJX19mdW5jX18sIGVyckNvZGUpOwogCQkJdXNidmlzaW9uLT5sYXN0X2Vycm9yID0gZXJyQ29kZTsKIAkJfQogCQlyZWdWYWx1ZSA9ICgxNi11c2J2aXNpb25fcmVhZF9yZWcodXNidmlzaW9uLCBVU0JWSVNJT05fQUxURVJfUkVHKSkgJiAweDBGOwpAQCAtMjYyMyw3ICsyNjMyLDcgQEAKIAl9CiAJcm91dGUuaW5wdXQgPSBtb2RlW2NoYW5uZWxdOwogCXJvdXRlLm91dHB1dCA9IDA7Ci0JY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIFZJRElPQ19JTlRfU19WSURFT19ST1VUSU5HLCZyb3V0ZSk7CisJY2FsbF9hbGwodXNidmlzaW9uLCB2aWRlbywgc19yb3V0aW5nLCAmcm91dGUpOwogCXVzYnZpc2lvbl9zZXRfYXVkaW8odXNidmlzaW9uLCBhdWRpb1tjaGFubmVsXSk7CiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24taTJjLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24taTJjLmMKaW5kZXggNmI2NmFlNC4uZGQyZjhmMiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91c2J2aXNpb24vdXNidmlzaW9uLWkyYy5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi1pMmMuYwpAQCAtMTE5LDcgKzExOSw4IEBACiAJCS8qIHRyeSBleHRlbmRlZCBhZGRyZXNzIGNvZGUuLi4gKi8KIAkJcmV0ID0gdHJ5X3dyaXRlX2FkZHJlc3MoaTJjX2FkYXAsIGFkZHIsIHJldHJpZXMpOwogCQlpZiAocmV0ICE9IDEpIHsKLQkJCWVycigiZGllZCBhdCBleHRlbmRlZCBhZGRyZXNzIGNvZGUsIHdoaWxlIHdyaXRpbmciKTsKKwkJCWRldl9lcnIoJmkyY19hZGFwLT5kZXYsCisJCQkJImRpZWQgYXQgZXh0ZW5kZWQgYWRkcmVzcyBjb2RlLAl3aGlsZSB3cml0aW5nXG4iKTsKIAkJCXJldHVybiAtRVJFTU9URUlPOwogCQl9CiAJCWFkZFswXSA9IGFkZHI7CkBAIC0xMjgsNyArMTI5LDggQEAKIAkJCWFkZHIgfD0gMHgwMTsKIAkJCXJldCA9IHRyeV9yZWFkX2FkZHJlc3MoaTJjX2FkYXAsIGFkZHIsIHJldHJpZXMpOwogCQkJaWYgKHJldCAhPSAxKSB7Ci0JCQkJZXJyKCJkaWVkIGF0IGV4dGVuZGVkIGFkZHJlc3MgY29kZSwgd2hpbGUgcmVhZGluZyIpOworCQkJCWRldl9lcnIoJmkyY19hZGFwLT5kZXYsCisJCQkJCSJkaWVkIGF0IGV4dGVuZGVkIGFkZHJlc3MgY29kZSwgd2hpbGUgcmVhZGluZ1xuIik7CiAJCQkJcmV0dXJuIC1FUkVNT1RFSU87CiAJCQl9CiAJCX0KQEAgLTIwMCw3MiArMjAyLDc4IEBACiB9OwogCiAKLS8qCi0gKiByZWdpc3RlcmluZyBmdW5jdGlvbnMgdG8gbG9hZCBhbGdvcml0aG1zIGF0IHJ1bnRpbWUKLSAqLwotc3RhdGljIGludCB1c2J2aXNpb25faTJjX3VzYl9hZGRfYnVzKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKLXsKLQlQREVCVUcoREJHX0kyQywgIkkyQyAgIGRlYnVnZ2luZyBpcyBlbmFibGVkIFtpMmNdIik7Ci0JUERFQlVHKERCR19JMkMsICJBTEdPICAgZGVidWdnaW5nIGlzIGVuYWJsZWQgW2kyY10iKTsKLQotCS8qIHJlZ2lzdGVyIG5ldyBhZGFwdGVyIHRvIGkyYyBtb2R1bGUuLi4gKi8KLQotCWFkYXAtPmFsZ28gPSAmdXNidmlzaW9uX2FsZ287Ci0KLQlhZGFwLT50aW1lb3V0ID0gMTAwOwkvKiBkZWZhdWx0IHZhbHVlcywgc2hvdWxkICAgICAgICovCi0JYWRhcC0+cmV0cmllcyA9IDM7CS8qIGJlIHJlcGxhY2VkIGJ5IGRlZmluZXMgICAgICAgKi8KLQotCWkyY19hZGRfYWRhcHRlcihhZGFwKTsKLQotCVBERUJVRyhEQkdfSTJDLCJpMmMgYnVzIGZvciAlcyByZWdpc3RlcmVkIiwgYWRhcC0+bmFtZSk7Ci0KLQlyZXR1cm4gMDsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIC8qIHVzYnZpc2lvbiBzcGVjaWZpYyBJMkMgZnVuY3Rpb25zICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBpMmNfYWRhcF90ZW1wbGF0ZTsKLXN0YXRpYyBzdHJ1Y3QgaTJjX2NsaWVudCBpMmNfY2xpZW50X3RlbXBsYXRlOwogCiBpbnQgdXNidmlzaW9uX2kyY19yZWdpc3RlcihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKQogeworCXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzYWE3MTF4X2FkZHJzW10gPSB7CisJCTB4NGEgPj4gMSwgMHg0OCA+PiAxLAkvKiBTQUE3MTExLCBTQUE3MTExQSBhbmQgU0FBNzExMyAqLworCQkweDQyID4+IDEsIDB4NDAgPj4gMSwJLyogU0FBNzExNCwgU0FBNzExNSBhbmQgU0FBNzExOCAqLworCQlJMkNfQ0xJRU5UX0VORCB9OworCiAJbWVtY3B5KCZ1c2J2aXNpb24tPmkyY19hZGFwLCAmaTJjX2FkYXBfdGVtcGxhdGUsCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgaTJjX2FkYXB0ZXIpKTsKLQltZW1jcHkoJnVzYnZpc2lvbi0+aTJjX2NsaWVudCwgJmkyY19jbGllbnRfdGVtcGxhdGUsCi0JICAgICAgIHNpemVvZihzdHJ1Y3QgaTJjX2NsaWVudCkpOwogCiAJc3ByaW50Zih1c2J2aXNpb24tPmkyY19hZGFwLm5hbWUgKyBzdHJsZW4odXNidmlzaW9uLT5pMmNfYWRhcC5uYW1lKSwKIAkJIiAjJWQiLCB1c2J2aXNpb24tPnZkZXYtPm51bSk7CiAJUERFQlVHKERCR19JMkMsIkFkYXB0ZXJuYW1lOiAlcyIsIHVzYnZpc2lvbi0+aTJjX2FkYXAubmFtZSk7CiAJdXNidmlzaW9uLT5pMmNfYWRhcC5kZXYucGFyZW50ID0gJnVzYnZpc2lvbi0+ZGV2LT5kZXY7CiAKLQlpMmNfc2V0X2FkYXBkYXRhKCZ1c2J2aXNpb24tPmkyY19hZGFwLCB1c2J2aXNpb24pOwotCWkyY19zZXRfY2xpZW50ZGF0YSgmdXNidmlzaW9uLT5pMmNfY2xpZW50LCB1c2J2aXNpb24pOwotCi0JdXNidmlzaW9uLT5pMmNfY2xpZW50LmFkYXB0ZXIgPSAmdXNidmlzaW9uLT5pMmNfYWRhcDsKKwlpMmNfc2V0X2FkYXBkYXRhKCZ1c2J2aXNpb24tPmkyY19hZGFwLCAmdXNidmlzaW9uLT52NGwyX2Rldik7CiAKIAlpZiAodXNidmlzaW9uX3dyaXRlX3JlZyh1c2J2aXNpb24sIFVTQlZJU0lPTl9TRVJfTU9ERSwgVVNCVklTSU9OX0lJQ19MUk5BQ0spIDwgMCkgewogCQlwcmludGsoS0VSTl9FUlIgInVzYnZpc2lvbl9yZWdpc3RlcjogY2FuJ3Qgd3JpdGUgcmVnXG4iKTsKIAkJcmV0dXJuIC1FQlVTWTsKIAl9CiAKLSNpZmRlZiBDT05GSUdfTU9EVUxFUworCVBERUJVRyhEQkdfSTJDLCAiSTJDICAgZGVidWdnaW5nIGlzIGVuYWJsZWQgW2kyY10iKTsKKwlQREVCVUcoREJHX0kyQywgIkFMR08gICBkZWJ1Z2dpbmcgaXMgZW5hYmxlZCBbaTJjXSIpOworCisJLyogcmVnaXN0ZXIgbmV3IGFkYXB0ZXIgdG8gaTJjIG1vZHVsZS4uLiAqLworCisJdXNidmlzaW9uLT5pMmNfYWRhcC5hbGdvID0gJnVzYnZpc2lvbl9hbGdvOworCisJdXNidmlzaW9uLT5pMmNfYWRhcC50aW1lb3V0ID0gMTAwOwkvKiBkZWZhdWx0IHZhbHVlcywgc2hvdWxkICAgICAgICovCisJdXNidmlzaW9uLT5pMmNfYWRhcC5yZXRyaWVzID0gMzsJLyogYmUgcmVwbGFjZWQgYnkgZGVmaW5lcyAgICAgICAqLworCisJaTJjX2FkZF9hZGFwdGVyKCZ1c2J2aXNpb24tPmkyY19hZGFwKTsKKworCVBERUJVRyhEQkdfSTJDLCAiaTJjIGJ1cyBmb3IgJXMgcmVnaXN0ZXJlZCIsIHVzYnZpc2lvbi0+aTJjX2FkYXAubmFtZSk7CisKIAkvKiBSZXF1ZXN0IHRoZSBsb2FkIG9mIHRoZSBpMmMgbW9kdWxlcyB3ZSBuZWVkICovCiAJc3dpdGNoICh1c2J2aXNpb25fZGV2aWNlX2RhdGFbdXNidmlzaW9uLT5EZXZNb2RlbF0uQ29kZWMpIHsKIAljYXNlIENPREVDX1NBQTcxMTM6Ci0JCXJlcXVlc3RfbW9kdWxlKCJzYWE3MTE1Iik7Ci0JCWJyZWFrOwogCWNhc2UgQ09ERUNfU0FBNzExMToKLQkJcmVxdWVzdF9tb2R1bGUoInNhYTcxMTUiKTsKKwkJdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJnVzYnZpc2lvbi0+aTJjX2FkYXAsICJzYWE3MTE1IiwKKwkJCQkic2FhNzExNV9hdXRvIiwgc2FhNzExeF9hZGRycyk7CiAJCWJyZWFrOwogCX0KIAlpZiAodXNidmlzaW9uX2RldmljZV9kYXRhW3VzYnZpc2lvbi0+RGV2TW9kZWxdLlR1bmVyID09IDEpIHsKLQkJcmVxdWVzdF9tb2R1bGUoInR1bmVyIik7Ci0JfQotI2VuZGlmCisJCXN0cnVjdCB2NGwyX3N1YmRldiAqc2Q7CisJCWVudW0gdjRsMl9pMmNfdHVuZXJfdHlwZSB0eXBlOworCQlzdHJ1Y3QgdHVuZXJfc2V0dXAgdHVuX3NldHVwOwogCi0JcmV0dXJuIHVzYnZpc2lvbl9pMmNfdXNiX2FkZF9idXMoJnVzYnZpc2lvbi0+aTJjX2FkYXApOworCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZ1c2J2aXNpb24tPmkyY19hZGFwLCAidHVuZXIiLAorCQkJCSJ0dW5lciIsIHY0bDJfaTJjX3R1bmVyX2FkZHJzKEFERFJTX0RFTU9EKSk7CisJCS8qIGRlcGVuZGluZyBvbiB3aGV0aGVyIHdlIGZvdW5kIGEgZGVtb2Qgb3Igbm90LCBzZWxlY3QKKwkJICAgdGhlIHR1bmVyIHR5cGUuICovCisJCXR5cGUgPSBzZCA/IEFERFJTX1RWX1dJVEhfREVNT0QgOiBBRERSU19UVjsKKworCQlzZCA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZ1c2J2aXNpb24tPmkyY19hZGFwLCAidHVuZXIiLAorCQkJCSJ0dW5lciIsIHY0bDJfaTJjX3R1bmVyX2FkZHJzKHR5cGUpKTsKKworCQlpZiAodXNidmlzaW9uLT50dW5lcl90eXBlICE9IC0xKSB7CisJCQl0dW5fc2V0dXAubW9kZV9tYXNrID0gVF9BTkFMT0dfVFYgfCBUX1JBRElPOworCQkJdHVuX3NldHVwLnR5cGUgPSB1c2J2aXNpb24tPnR1bmVyX3R5cGU7CisJCQl0dW5fc2V0dXAuYWRkciA9IHY0bDJfaTJjX3N1YmRldl9hZGRyKHNkKTsKKwkJCWNhbGxfYWxsKHVzYnZpc2lvbiwgdHVuZXIsIHNfdHlwZV9hZGRyLCAmdHVuX3NldHVwKTsKKwkJfQorCX0KKworCXJldHVybiAwOwogfQogCiBpbnQgdXNidmlzaW9uX2kyY191bnJlZ2lzdGVyKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pCkBAIC0yNzgsNjcgKzI4Niw2IEBACiAJcmV0dXJuIDA7CiB9CiAKLXZvaWQgY2FsbF9pMmNfY2xpZW50cyhzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLCB1bnNpZ25lZCBpbnQgY21kLAotCQkgICAgICB2b2lkICphcmcpCi17Ci0JaTJjX2NsaWVudHNfY29tbWFuZCgmdXNidmlzaW9uLT5pMmNfYWRhcCwgY21kLCBhcmcpOwotfQotCi1zdGF0aWMgaW50IGF0dGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uOwotCi0JdXNidmlzaW9uID0gKHN0cnVjdCB1c2JfdXNidmlzaW9uICopaTJjX2dldF9hZGFwZGF0YShjbGllbnQtPmFkYXB0ZXIpOwotCi0Jc3dpdGNoIChjbGllbnQtPmFkZHIgPDwgMSkgewotCQljYXNlIDB4NDIgPDwgMToKLQkJY2FzZSAweDQzIDw8IDE6Ci0JCWNhc2UgMHg0YSA8PCAxOgotCQljYXNlIDB4NGIgPDwgMToKLQkJCVBERUJVRyhEQkdfSTJDLCJhdHRhY2hfaW5mb3JtOiB0ZGE5ODg3IGRldGVjdGVkLiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHg0MjoKLQkJCVBERUJVRyhEQkdfSTJDLCJhdHRhY2hfaW5mb3JtOiBzYWE3MTE0IGRldGVjdGVkLiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHg0YToKLQkJCVBERUJVRyhEQkdfSTJDLCJhdHRhY2hfaW5mb3JtOiBzYWE3MTEzIGRldGVjdGVkLiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHg0ODoKLQkJCVBERUJVRyhEQkdfSTJDLCJhdHRhY2hfaW5mb3JtOiBzYWE3MTExIGRldGVjdGVkLiIpOwotCQkJYnJlYWs7Ci0JCWNhc2UgMHhhMDoKLQkJCVBERUJVRyhEQkdfSTJDLCJhdHRhY2hfaW5mb3JtOiBlZXByb20gZGV0ZWN0ZWQuIik7Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJewotCQkJCXN0cnVjdCB0dW5lcl9zZXR1cCB0dW5fc2V0dXA7Ci0KLQkJCQlQREVCVUcoREJHX0kyQywiYXR0YWNoIGluZm9ybTogZGV0ZWN0ZWQgSTJDIGFkZHJlc3MgJXgiLCBjbGllbnQtPmFkZHIgPDwgMSk7Ci0JCQkJdXNidmlzaW9uLT50dW5lcl9hZGRyID0gY2xpZW50LT5hZGRyOwotCi0JCQkJaWYgKCh1c2J2aXNpb24tPmhhdmVfdHVuZXIpICYmICh1c2J2aXNpb24tPnR1bmVyX3R5cGUgIT0gLTEpKSB7Ci0JCQkJCXR1bl9zZXR1cC5tb2RlX21hc2sgPSBUX0FOQUxPR19UViB8IFRfUkFESU87Ci0JCQkJCXR1bl9zZXR1cC50eXBlID0gdXNidmlzaW9uLT50dW5lcl90eXBlOwotCQkJCQl0dW5fc2V0dXAuYWRkciA9IHVzYnZpc2lvbi0+dHVuZXJfYWRkcjsKLQkJCQkJY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIFRVTkVSX1NFVF9UWVBFX0FERFIsICZ0dW5fc2V0dXApOwotCQkJCX0KLQkJCX0KLQkJCWJyZWFrOwotCX0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCBkZXRhY2hfaW5mb3JtKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0Jc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbjsKLQotCXVzYnZpc2lvbiA9IChzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqKWkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKLQotCVBERUJVRyhEQkdfSTJDLCJ1c2J2aXNpb25bJWRdIGRldGFjaGVzICVzIiwgdXNidmlzaW9uLT5uciwgY2xpZW50LT5uYW1lKTsKLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludAogdXNidmlzaW9uX2kyY19yZWFkX21heDQoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiwgdW5zaWduZWQgY2hhciBhZGRyLAogCQkgICAgIGNoYXIgKmJ1Ziwgc2hvcnQgbGVuKQpAQCAtNTExLDE0ICs0NTgsNiBAQAogc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciBpMmNfYWRhcF90ZW1wbGF0ZSA9IHsKIAkub3duZXIgPSBUSElTX01PRFVMRSwKIAkubmFtZSAgICAgICAgICAgICAgPSAidXNidmlzaW9uIiwKLQkuaWQgICAgICAgICAgICAgICAgPSBJMkNfSFdfQl9CVDg0OCwgLyogRklYTUUgKi8KLQkuY2xpZW50X3JlZ2lzdGVyICAgPSBhdHRhY2hfaW5mb3JtLAotCS5jbGllbnRfdW5yZWdpc3RlciA9IGRldGFjaF9pbmZvcm0sCi0JLmNsYXNzCQkgICA9IEkyQ19DTEFTU19UVl9BTkFMT0csCi19OwotCi1zdGF0aWMgc3RydWN0IGkyY19jbGllbnQgaTJjX2NsaWVudF90ZW1wbGF0ZSA9IHsKLQkubmFtZQkJPSAidXNidmlzaW9uIGludGVybmFsIiwKIH07CiAKIC8qCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24tdmlkZW8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jCmluZGV4IDI2MjJkZTAuLmZhNjJhMmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi12aWRlby5jCkBAIC01OSw3ICs1OSw2IEBACiAjaW5jbHVkZSA8bGludXgvc3BpbmxvY2suaD4KICNpbmNsdWRlIDxhc20vaW8uaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAKICNpbmNsdWRlIDxtZWRpYS9zYWE3MTE1Lmg+CkBAIC0yMTIsNyArMjExLDcgQEAKIAljdHJsLmlkID0gVjRMMl9DSURfSFVFOwogCWN0cmwudmFsdWUgPSAwOwogCWlmKHVzYnZpc2lvbi0+dXNlcikKLQkJY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIFZJRElPQ19HX0NUUkwsICZjdHJsKTsKKwkJY2FsbF9hbGwodXNidmlzaW9uLCBjb3JlLCBnX2N0cmwsICZjdHJsKTsKIAlyZXR1cm4gc3ByaW50ZihidWYsICIlZFxuIiwgY3RybC52YWx1ZSk7CiB9CiBzdGF0aWMgREVWSUNFX0FUVFIoaHVlLCBTX0lSVUdPLCBzaG93X2h1ZSwgTlVMTCk7CkBAIC0yMjcsNyArMjI2LDcgQEAKIAljdHJsLmlkID0gVjRMMl9DSURfQ09OVFJBU1Q7CiAJY3RybC52YWx1ZSA9IDA7CiAJaWYodXNidmlzaW9uLT51c2VyKQotCQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbiwgVklESU9DX0dfQ1RSTCwgJmN0cmwpOworCQljYWxsX2FsbCh1c2J2aXNpb24sIGNvcmUsIGdfY3RybCwgJmN0cmwpOwogCXJldHVybiBzcHJpbnRmKGJ1ZiwgIiVkXG4iLCBjdHJsLnZhbHVlKTsKIH0KIHN0YXRpYyBERVZJQ0VfQVRUUihjb250cmFzdCwgU19JUlVHTywgc2hvd19jb250cmFzdCwgTlVMTCk7CkBAIC0yNDIsNyArMjQxLDcgQEAKIAljdHJsLmlkID0gVjRMMl9DSURfQlJJR0hUTkVTUzsKIAljdHJsLnZhbHVlID0gMDsKIAlpZih1c2J2aXNpb24tPnVzZXIpCi0JCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLCBWSURJT0NfR19DVFJMLCAmY3RybCk7CisJCWNhbGxfYWxsKHVzYnZpc2lvbiwgY29yZSwgZ19jdHJsLCAmY3RybCk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGN0cmwudmFsdWUpOwogfQogc3RhdGljIERFVklDRV9BVFRSKGJyaWdodG5lc3MsIFNfSVJVR08sIHNob3dfYnJpZ2h0bmVzcywgTlVMTCk7CkBAIC0yNTcsNyArMjU2LDcgQEAKIAljdHJsLmlkID0gVjRMMl9DSURfU0FUVVJBVElPTjsKIAljdHJsLnZhbHVlID0gMDsKIAlpZih1c2J2aXNpb24tPnVzZXIpCi0JCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLCBWSURJT0NfR19DVFJMLCAmY3RybCk7CisJCWNhbGxfYWxsKHVzYnZpc2lvbiwgY29yZSwgZ19jdHJsLCAmY3RybCk7CiAJcmV0dXJuIHNwcmludGYoYnVmLCAiJWRcbiIsIGN0cmwudmFsdWUpOwogfQogc3RhdGljIERFVklDRV9BVFRSKHNhdHVyYXRpb24sIFNfSVJVR08sIHNob3dfc2F0dXJhdGlvbiwgTlVMTCk7CkBAIC0zMjksNyArMzI4LDcgQEAKIAkJCXJldHVybjsKIAl9IHdoaWxlICgwKTsKIAotCWVycigiJXMgZXJyb3I6ICVkXG4iLCBfX2Z1bmNfXywgcmVzKTsKKwlkZXZfZXJyKCZ2ZGV2LT5kZXYsICIlcyBlcnJvcjogJWRcbiIsIF9fZnVuY19fLCByZXMpOwogfQogCiBzdGF0aWMgdm9pZCB1c2J2aXNpb25fcmVtb3ZlX3N5c2ZzKHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYpCkBAIC00ODcsOCArNDg2LDkgQEAKIAkvKiBOVDEwMHggaGFzIGEgOC1iaXQgcmVnaXN0ZXIgc3BhY2UgKi8KIAllcnJDb2RlID0gdXNidmlzaW9uX3JlYWRfcmVnKHVzYnZpc2lvbiwgcmVnLT5yZWcmMHhmZik7CiAJaWYgKGVyckNvZGUgPCAwKSB7Ci0JCWVycigiJXM6IFZJRElPQ19EQkdfR19SRUdJU1RFUiBmYWlsZWQ6IGVycm9yICVkIiwKLQkJICAgIF9fZnVuY19fLCBlcnJDb2RlKTsKKwkJZGV2X2VycigmdXNidmlzaW9uLT52ZGV2LT5kZXYsCisJCQkiJXM6IFZJRElPQ19EQkdfR19SRUdJU1RFUiBmYWlsZWQ6IGVycm9yICVkXG4iLAorCQkJCV9fZnVuY19fLCBlcnJDb2RlKTsKIAkJcmV0dXJuIGVyckNvZGU7CiAJfQogCXJlZy0+dmFsID0gZXJyQ29kZTsKQEAgLTUwNyw4ICs1MDcsOSBAQAogCS8qIE5UMTAweCBoYXMgYSA4LWJpdCByZWdpc3RlciBzcGFjZSAqLwogCWVyckNvZGUgPSB1c2J2aXNpb25fd3JpdGVfcmVnKHVzYnZpc2lvbiwgcmVnLT5yZWcmMHhmZiwgcmVnLT52YWwpOwogCWlmIChlcnJDb2RlIDwgMCkgewotCQllcnIoIiVzOiBWSURJT0NfREJHX1NfUkVHSVNURVIgZmFpbGVkOiBlcnJvciAlZCIsCi0JCSAgICBfX2Z1bmNfXywgZXJyQ29kZSk7CisJCWRldl9lcnIoJnVzYnZpc2lvbi0+dmRldi0+ZGV2LAorCQkJIiVzOiBWSURJT0NfREJHX1NfUkVHSVNURVIgZmFpbGVkOiBlcnJvciAlZFxuIiwKKwkJCQlfX2Z1bmNfXywgZXJyQ29kZSk7CiAJCXJldHVybiBlcnJDb2RlOwogCX0KIAlyZXR1cm4gMDsKQEAgLTUyNCw4ICs1MjUsNyBAQAogCXN0cmxjcHkodmMtPmNhcmQsCiAJCXVzYnZpc2lvbl9kZXZpY2VfZGF0YVt1c2J2aXNpb24tPkRldk1vZGVsXS5Nb2RlbFN0cmluZywKIAkJc2l6ZW9mKHZjLT5jYXJkKSk7Ci0Jc3RybGNweSh2Yy0+YnVzX2luZm8sIGRldl9uYW1lKCZ1c2J2aXNpb24tPmRldi0+ZGV2KSwKLQkJc2l6ZW9mKHZjLT5idXNfaW5mbykpOworCXVzYl9tYWtlX3BhdGgodXNidmlzaW9uLT5kZXYsIHZjLT5idXNfaW5mbywgc2l6ZW9mKHZjLT5idXNfaW5mbykpOwogCXZjLT52ZXJzaW9uID0gVVNCVklTSU9OX0RSSVZFUl9WRVJTSU9OOwogCXZjLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwKIAkJVjRMMl9DQVBfQVVESU8gfApAQCAtNjIxLDggKzYyMSw3IEBACiAJdXNidmlzaW9uLT50dm5vcm1JZD0qaWQ7CiAKIAltdXRleF9sb2NrKCZ1c2J2aXNpb24tPmxvY2spOwotCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLCBWSURJT0NfU19TVEQsCi0JCQkgJnVzYnZpc2lvbi0+dHZub3JtSWQpOworCWNhbGxfYWxsKHVzYnZpc2lvbiwgdHVuZXIsIHNfc3RkLCB1c2J2aXNpb24tPnR2bm9ybUlkKTsKIAltdXRleF91bmxvY2soJnVzYnZpc2lvbi0+bG9jayk7CiAJLyogcHJvcGFnYXRlIHRoZSBjaGFuZ2UgdG8gdGhlIGRlY29kZXIgKi8KIAl1c2J2aXNpb25fbXV4c2VsKHVzYnZpc2lvbiwgdXNidmlzaW9uLT5jdGxfaW5wdXQpOwpAQCAtNjQ0LDcgKzY0Myw3IEBACiAJCXN0cmNweSh2dC0+bmFtZSwgIlRlbGV2aXNpb24iKTsKIAl9CiAJLyogTGV0IGNsaWVudHMgZmlsbCBpbiB0aGUgcmVtYWluZGVyIG9mIHRoaXMgc3RydWN0ICovCi0JY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sVklESU9DX0dfVFVORVIsdnQpOworCWNhbGxfYWxsKHVzYnZpc2lvbiwgdHVuZXIsIGdfdHVuZXIsIHZ0KTsKIAogCXJldHVybiAwOwogfQpAQCAtNjU4LDcgKzY1Nyw3IEBACiAJaWYgKCF1c2J2aXNpb24tPmhhdmVfdHVuZXIgfHwgdnQtPmluZGV4KQogCQlyZXR1cm4gLUVJTlZBTDsKIAkvKiBsZXQgY2xpZW50cyBoYW5kbGUgdGhpcyAqLwotCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLFZJRElPQ19TX1RVTkVSLHZ0KTsKKwljYWxsX2FsbCh1c2J2aXNpb24sIHR1bmVyLCBzX3R1bmVyLCB2dCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY4OSw3ICs2ODgsNyBAQAogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXVzYnZpc2lvbi0+ZnJlcSA9IGZyZXEtPmZyZXF1ZW5jeTsKLQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbiwgVklESU9DX1NfRlJFUVVFTkNZLCBmcmVxKTsKKwljYWxsX2FsbCh1c2J2aXNpb24sIHR1bmVyLCBzX2ZyZXF1ZW5jeSwgZnJlcSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTY5OCw3ICs2OTcsNiBAQAogewogCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCi0JbWVtc2V0KGEsMCxzaXplb2YoKmEpKTsKIAlpZih1c2J2aXNpb24tPnJhZGlvKSB7CiAJCXN0cmNweShhLT5uYW1lLCJSYWRpbyIpOwogCX0gZWxzZSB7CkBAIC03MjIsMTIgKzcyMCw4IEBACiAJCQkgICAgc3RydWN0IHY0bDJfcXVlcnljdHJsICpjdHJsKQogewogCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCWludCBpZD1jdHJsLT5pZDsKIAotCW1lbXNldChjdHJsLDAsc2l6ZW9mKCpjdHJsKSk7Ci0JY3RybC0+aWQ9aWQ7Ci0KLQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbiwgVklESU9DX1FVRVJZQ1RSTCwgY3RybCk7CisJY2FsbF9hbGwodXNidmlzaW9uLCBjb3JlLCBxdWVyeWN0cmwsIGN0cmwpOwogCiAJaWYgKCFjdHJsLT50eXBlKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTczOSw3ICs3MzMsNyBAQAogCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7CiAJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0JY2FsbF9pMmNfY2xpZW50cyh1c2J2aXNpb24sIFZJRElPQ19HX0NUUkwsIGN0cmwpOworCWNhbGxfYWxsKHVzYnZpc2lvbiwgY29yZSwgZ19jdHJsLCBjdHJsKTsKIAogCXJldHVybiAwOwogfQpAQCAtNzQ4LDcgKzc0Miw3IEBACiAJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKIAlzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKLQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbiwgVklESU9DX1NfQ1RSTCwgY3RybCk7CisJY2FsbF9hbGwodXNidmlzaW9uLCBjb3JlLCBzX2N0cmwsIGN0cmwpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC03NjMsOCArNzU3LDcgQEAKIAogCS8qIENoZWNrIGlucHV0IHZhbGlkaXR5OgogCSAgIHRoZSB1c2VyIG11c3QgZG8gYSBWSURFTyBDQVBUVVJFIGFuZCBNTUFQIG1ldGhvZC4gKi8KLQlpZigodnItPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB8fAotCSAgICh2ci0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApKQorCWlmICh2ci0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYodXNidmlzaW9uLT5zdHJlYW1pbmcgPT0gU3RyZWFtX09uKSB7CkBAIC03ODksOSArNzgyLDYgQEAKIAogCS8qIEZJWE1FIDogbXVzdCBjb250cm9sCiAJICAgdGhhdCBidWZmZXJzIGFyZSBtYXBwZWQgKFZJRElPQ19SRVFCVUZTIGhhcyBiZWVuIGNhbGxlZCkgKi8KLQlpZih2Yi0+dHlwZSAhPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFKSB7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KIAlpZih2Yi0+aW5kZXg+PXVzYnZpc2lvbi0+bnVtX2ZyYW1lcykgIHsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtODI1LDkgKzgxNSw2IEBACiAJdW5zaWduZWQgbG9uZyBsb2NrX2ZsYWdzOwogCiAJLyogRklYTUUgOiB3b3JrcyBvbmx5IG9uIFZJREVPX0NBUFRVUkUgTU9ERSwgTU1BUC4gKi8KLQlpZih2Yi0+dHlwZSAhPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFKSB7Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KIAlpZih2Yi0+aW5kZXg+PXVzYnZpc2lvbi0+bnVtX2ZyYW1lcykgIHsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQpAQCAtODYyLDkgKzg0OSw2IEBACiAJc3RydWN0IHVzYnZpc2lvbl9mcmFtZSAqZjsKIAl1bnNpZ25lZCBsb25nIGxvY2tfZmxhZ3M7CiAKLQlpZiAodmItPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWlmIChsaXN0X2VtcHR5KCYodXNidmlzaW9uLT5vdXRxdWV1ZSkpKSB7CiAJCWlmICh1c2J2aXNpb24tPnN0cmVhbWluZyA9PSBTdHJlYW1fSWRsZSkKIAkJCXJldHVybiAtRUlOVkFMOwpAQCAtODk5LDEwICs4ODMsOSBAQAogc3RhdGljIGludCB2aWRpb2Nfc3RyZWFtb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSBpKQogewogCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCWludCBiPVY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAogCXVzYnZpc2lvbi0+c3RyZWFtaW5nID0gU3RyZWFtX09uOwotCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLFZJRElPQ19TVFJFQU1PTiAsICZiKTsKKwljYWxsX2FsbCh1c2J2aXNpb24sIHZpZGVvLCBzX3N0cmVhbSwgMSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTkxMSw3ICs4OTQsNiBAQAogCQkJICAgIHZvaWQgKnByaXYsIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlKQogewogCXN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24gPSB2aWRlb19kcnZkYXRhKGZpbGUpOwotCWludCBiPVY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKIAogCWlmICh0eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKIAkJcmV0dXJuIC1FSU5WQUw7CkBAIC05MTksNyArOTAxLDcgQEAKIAlpZih1c2J2aXNpb24tPnN0cmVhbWluZyA9PSBTdHJlYW1fT24pIHsKIAkJdXNidmlzaW9uX3N0cmVhbV9pbnRlcnJ1cHQodXNidmlzaW9uKTsKIAkJLyogU3RvcCBhbGwgdmlkZW8gc3RyZWFtaW5ncyAqLwotCQljYWxsX2kyY19jbGllbnRzKHVzYnZpc2lvbixWSURJT0NfU1RSRUFNT0ZGICwgJmIpOworCQljYWxsX2FsbCh1c2J2aXNpb24sIHZpZGVvLCBzX3N0cmVhbSwgMCk7CiAJfQogCXVzYnZpc2lvbl9lbXB0eV9mcmFtZXF1ZXVlcyh1c2J2aXNpb24pOwogCkBAIC05MzIsMTEgKzkxNCw4IEBACiAJaWYodmZkLT5pbmRleD49VVNCVklTSU9OX1NVUFBPUlRFRF9QQUxFVFRFUy0xKSB7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQl2ZmQtPmZsYWdzID0gMDsKLQl2ZmQtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJc3RyY3B5KHZmZC0+ZGVzY3JpcHRpb24sdXNidmlzaW9uX3Y0bDJfZm9ybWF0W3ZmZC0+aW5kZXhdLmRlc2MpOwogCXZmZC0+cGl4ZWxmb3JtYXQgPSB1c2J2aXNpb25fdjRsMl9mb3JtYXRbdmZkLT5pbmRleF0uZm9ybWF0OwotCW1lbXNldCh2ZmQtPnJlc2VydmVkLCAwLCBzaXplb2YodmZkLT5yZXNlcnZlZCkpOwogCXJldHVybiAwOwogfQogCkBAIC0xMDQyLDcgKzEwMjEsNyBAQAogCWlmKHVzYnZpc2lvbi0+c3RyZWFtaW5nICE9IFN0cmVhbV9PbikgewogCQkvKiBubyBzdHJlYW0gaXMgcnVubmluZywgbWFrZSBpdCBydW5uaW5nICEgKi8KIAkJdXNidmlzaW9uLT5zdHJlYW1pbmcgPSBTdHJlYW1fT247Ci0JCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLFZJRElPQ19TVFJFQU1PTiAsIE5VTEwpOworCQljYWxsX2FsbCh1c2J2aXNpb24sIHZpZGVvLCBzX3N0cmVhbSwgMSk7CiAJfQogCiAJLyogVGhlbiwgZW5xdWV1ZSBhcyBtYW55IGZyYW1lcyBhcyBwb3NzaWJsZQpAQCAtMTE4OSw3ICsxMTY4LDkgQEAKIAltdXRleF9sb2NrKCZ1c2J2aXNpb24tPmxvY2spOwogCiAJaWYgKHVzYnZpc2lvbi0+dXNlcikgewotCQllcnIoIiVzOiBTb21lb25lIHRyaWVkIHRvIG9wZW4gYW4gYWxyZWFkeSBvcGVuZWQgVVNCVmlzaW9uIFJhZGlvISIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmdXNidmlzaW9uLT5yZGV2LT5kZXYsCisJCQkiJXM6IFNvbWVvbmUgdHJpZWQgdG8gb3BlbiBhbiBhbHJlYWR5IG9wZW5lZCBVU0JWaXNpb24gUmFkaW8hXG4iLAorCQkJCV9fZnVuY19fKTsKIAkJZXJyQ29kZSA9IC1FQlVTWTsKIAl9CiAJZWxzZSB7CkBAIC0xMjExLDcgKzExOTIsNyBAQAogCiAJCS8vIElmIHNvIGZhciBubyBlcnJvcnMgdGhlbiB3ZSBzaGFsbCBzdGFydCB0aGUgcmFkaW8KIAkJdXNidmlzaW9uLT5yYWRpbyA9IDE7Ci0JCWNhbGxfaTJjX2NsaWVudHModXNidmlzaW9uLEFVRENfU0VUX1JBRElPLCZ1c2J2aXNpb24tPnR1bmVyX3R5cGUpOworCQljYWxsX2FsbCh1c2J2aXNpb24sIHR1bmVyLCBzX3JhZGlvKTsKIAkJdXNidmlzaW9uX3NldF9hdWRpbyh1c2J2aXNpb24sIFVTQlZJU0lPTl9BVURJT19SQURJTyk7CiAJCXVzYnZpc2lvbi0+dXNlcisrOwogCX0KQEAgLTE0MTMsNyArMTM5NCw4IEBACiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmRldjsKIAogCWlmICh1c2JfZGV2ID09IE5VTEwpIHsKLQkJZXJyKCIlczogdXNidmlzaW9uLT5kZXYgaXMgbm90IHNldCIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmdXNidmlzaW9uLT5kZXYtPmRldiwKKwkJCSIlczogdXNidmlzaW9uLT5kZXYgaXMgbm90IHNldFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gTlVMTDsKIAl9CiAKQEAgLTE0MjMsNyArMTQwNSw3IEBACiAJfQogCSp2ZGV2ID0gKnZkZXZfdGVtcGxhdGU7CiAvLwl2ZGV2LT5taW5vciAgID0gLTE7Ci0JdmRldi0+cGFyZW50ICA9ICZ1c2JfZGV2LT5kZXY7CisJdmRldi0+djRsMl9kZXYgPSAmdXNidmlzaW9uLT52NGwyX2RldjsKIAlzbnByaW50Zih2ZGV2LT5uYW1lLCBzaXplb2YodmRldi0+bmFtZSksICIlcyIsIG5hbWUpOwogCXZpZGVvX3NldF9kcnZkYXRhKHZkZXYsIHVzYnZpc2lvbik7CiAJcmV0dXJuIHZkZXY7CkBAIC0xNTI0LDcgKzE1MDYsOSBAQAogCXJldHVybiAwOwogCiAgZXJyX2V4aXQ6Ci0JZXJyKCJVU0JWaXNpb25bJWRdOiB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoKSBmYWlsZWQiLCB1c2J2aXNpb24tPm5yKTsKKwlkZXZfZXJyKCZ1c2J2aXNpb24tPmRldi0+ZGV2LAorCQkiVVNCVmlzaW9uWyVkXTogdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCkgZmFpbGVkXG4iLAorCQkJdXNidmlzaW9uLT5ucik7CiAJdXNidmlzaW9uX3VucmVnaXN0ZXJfdmlkZW8odXNidmlzaW9uKTsKIAlyZXR1cm4gLTE7CiB9CkBAIC0xNTQyLDMzICsxNTI2LDMwIEBACiB7CiAJc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbjsKIAotCWlmICgodXNidmlzaW9uID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHVzYl91c2J2aXNpb24pLCBHRlBfS0VSTkVMKSkgPT0KLQkgICAgTlVMTCkgewotCQlnb3RvIGVycl9leGl0OwotCX0KKwl1c2J2aXNpb24gPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiksIEdGUF9LRVJORUwpOworCWlmICh1c2J2aXNpb24gPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CiAKIAl1c2J2aXNpb24tPmRldiA9IGRldjsKKwlpZiAodjRsMl9kZXZpY2VfcmVnaXN0ZXIoJmRldi0+ZGV2LCAmdXNidmlzaW9uLT52NGwyX2RldikpCisJCWdvdG8gZXJyX2ZyZWU7CiAKIAltdXRleF9pbml0KCZ1c2J2aXNpb24tPmxvY2spOwkvKiBhdmFpbGFibGUgKi8KIAogCS8vIHByZXBhcmUgY29udHJvbCB1cmIgZm9yIGNvbnRyb2wgbWVzc2FnZXMgZHVyaW5nIGludGVycnVwdHMKIAl1c2J2aXNpb24tPmN0cmxVcmIgPSB1c2JfYWxsb2NfdXJiKFVTQlZJU0lPTl9VUkJfRlJBTUVTLCBHRlBfS0VSTkVMKTsKLQlpZiAodXNidmlzaW9uLT5jdHJsVXJiID09IE5VTEwpIHsKLQkJZ290byBlcnJfZXhpdDsKLQl9CisJaWYgKHVzYnZpc2lvbi0+Y3RybFVyYiA9PSBOVUxMKQorCQlnb3RvIGVycl91bnJlZzsKIAlpbml0X3dhaXRxdWV1ZV9oZWFkKCZ1c2J2aXNpb24tPmN0cmxVcmJfd3EpOwogCiAJdXNidmlzaW9uX2luaXRfcG93ZXJPZmZUaW1lcih1c2J2aXNpb24pOwogCiAJcmV0dXJuIHVzYnZpc2lvbjsKIAotZXJyX2V4aXQ6Ci0JaWYgKHVzYnZpc2lvbiAmJiB1c2J2aXNpb24tPmN0cmxVcmIpIHsKLQkJdXNiX2ZyZWVfdXJiKHVzYnZpc2lvbi0+Y3RybFVyYik7Ci0JfQotCWlmICh1c2J2aXNpb24pIHsKLQkJa2ZyZWUodXNidmlzaW9uKTsKLQl9CitlcnJfdW5yZWc6CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmdXNidmlzaW9uLT52NGwyX2Rldik7CitlcnJfZnJlZToKKwlrZnJlZSh1c2J2aXNpb24pOwogCXJldHVybiBOVUxMOwogfQogCkBAIC0xNTk4LDYgKzE1NzksNyBAQAogCQl1c2JfZnJlZV91cmIodXNidmlzaW9uLT5jdHJsVXJiKTsKIAl9CiAKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZ1c2J2aXNpb24tPnY0bDJfZGV2KTsKIAlrZnJlZSh1c2J2aXNpb24pOwogCiAJUERFQlVHKERCR19QUk9CRSwgInN1Y2Nlc3MiKTsKQEAgLTE2NzUsMjAgKzE2NTcsMjAgQEAKIAl9CiAJZW5kcG9pbnQgPSAmaW50ZXJmYWNlLT5lbmRwb2ludFsxXS5kZXNjOwogCWlmICghdXNiX2VuZHBvaW50X3hmZXJfaXNvYyhlbmRwb2ludCkpIHsKLQkJZXJyKCIlczogaW50ZXJmYWNlICVkLiBoYXMgbm9uLUlTTyBlbmRwb2ludCEiLAorCQlkZXZfZXJyKCZpbnRmLT5kZXYsICIlczogaW50ZXJmYWNlICVkLiBoYXMgbm9uLUlTTyBlbmRwb2ludCFcbiIsCiAJCSAgICBfX2Z1bmNfXywgaWZudW0pOwotCQllcnIoIiVzOiBFbmRwb2ludCBhdHRyaWJ1dGVzICVkIiwKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAiJXM6IEVuZHBvaW50IGF0dHJpYnV0ZXMgJWQiLAogCQkgICAgX19mdW5jX18sIGVuZHBvaW50LT5ibUF0dHJpYnV0ZXMpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9CiAJaWYgKHVzYl9lbmRwb2ludF9kaXJfb3V0KGVuZHBvaW50KSkgewotCQllcnIoIiVzOiBpbnRlcmZhY2UgJWQuIGhhcyBJU08gT1VUIGVuZHBvaW50ISIsCisJCWRldl9lcnIoJmludGYtPmRldiwgIiVzOiBpbnRlcmZhY2UgJWQuIGhhcyBJU08gT1VUIGVuZHBvaW50IVxuIiwKIAkJICAgIF9fZnVuY19fLCBpZm51bSk7CiAJCXJldHVybiAtRU5PREVWOwogCX0KIAogCWlmICgodXNidmlzaW9uID0gdXNidmlzaW9uX2FsbG9jKGRldikpID09IE5VTEwpIHsKLQkJZXJyKCIlczogY291bGRuJ3QgYWxsb2NhdGUgVVNCVmlzaW9uIHN0cnVjdCIsIF9fZnVuY19fKTsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAiJXM6IGNvdWxkbid0IGFsbG9jYXRlIFVTQlZpc2lvbiBzdHJ1Y3RcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCkBAIC0xNzExLDcgKzE2OTMsNyBAQAogCXVzYnZpc2lvbi0+YWx0X21heF9wa3Rfc2l6ZSA9IGttYWxsb2MoMzIqCiAJCQkJCSAgICAgIHVzYnZpc2lvbi0+bnVtX2FsdCxHRlBfS0VSTkVMKTsKIAlpZiAodXNidmlzaW9uLT5hbHRfbWF4X3BrdF9zaXplID09IE5VTEwpIHsKLQkJZXJyKCJ1c2J2aXNpb246IG91dCBvZiBtZW1vcnkhXG4iKTsKKwkJZGV2X2VycigmaW50Zi0+ZGV2LCAidXNidmlzaW9uOiBvdXQgb2YgbWVtb3J5IVxuIik7CiAJCW11dGV4X3VubG9jaygmdXNidmlzaW9uLT5sb2NrKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQpAQCAtMTczMyw4ICsxNzE1LDYgQEAKIAkJdXNidmlzaW9uLT50dW5lcl90eXBlID0gdXNidmlzaW9uX2RldmljZV9kYXRhW21vZGVsXS5UdW5lclR5cGU7CiAJfQogCi0JdXNidmlzaW9uLT50dW5lcl9hZGRyID0gQUREUl9VTlNFVDsKLQogCXVzYnZpc2lvbi0+RGV2TW9kZWwgPSBtb2RlbDsKIAl1c2J2aXNpb24tPnJlbW92ZV9wZW5kaW5nID0gMDsKIAl1c2J2aXNpb24tPmlmYWNlID0gaWZudW07CkBAIC0xNzcyLDcgKzE3NTIsOCBAQAogCVBERUJVRyhEQkdfUFJPQkUsICIiKTsKIAogCWlmICh1c2J2aXNpb24gPT0gTlVMTCkgewotCQllcnIoIiVzOiB1c2JfZ2V0X2ludGZkYXRhKCkgZmFpbGVkIiwgX19mdW5jX18pOworCQlkZXZfZXJyKCZ1c2J2aXNpb24tPmRldi0+ZGV2LAorCQkJIiVzOiB1c2JfZ2V0X2ludGZkYXRhKCkgZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CiAJCXJldHVybjsKIAl9CiAJdXNiX3NldF9pbnRmZGF0YSAoaW50ZiwgTlVMTCk7CkBAIC0xNzgyLDYgKzE3NjMsOCBAQAogCS8vIEF0IHRoaXMgdGltZSB3ZSBhc2sgdG8gY2FuY2VsIG91dHN0YW5kaW5nIFVSQnMKIAl1c2J2aXNpb25fc3RvcF9pc29jKHVzYnZpc2lvbik7CiAKKwl2NGwyX2RldmljZV9kaXNjb25uZWN0KCZ1c2J2aXNpb24tPnY0bDJfZGV2KTsKKwogCWlmICh1c2J2aXNpb24tPnBvd2VyKSB7CiAJCXVzYnZpc2lvbl9pMmNfdW5yZWdpc3Rlcih1c2J2aXNpb24pOwogCQl1c2J2aXNpb25fcG93ZXJfb2ZmKHVzYnZpc2lvbik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3VzYnZpc2lvbi91c2J2aXNpb24uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi5oCmluZGV4IDIwZDdlYzYuLmY4ZDc0NTggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXNidmlzaW9uL3VzYnZpc2lvbi5oCkBAIC02LDcgKzYsNyBAQAogICogICAgICAgICAgICAgICAgICAgICAgICAgRHdhaW5lIEdhcmRlbiA8ZHdhaW5lZ2FyZGVuQHJvZ2Vycy5jb20+CiAgKgogICoKLSAqIFJlcG9ydCBwcm9ibGVtcyB0byB2NGwgTWFpbGluZ0xpc3QgOiBodHRwOi8vd3d3LnJlZGhhdC5jb20vbWFpbG1hbi9saXN0aW5mby92aWRlbzRsaW51eC1saXN0CisgKiBSZXBvcnQgcHJvYmxlbXMgdG8gdjRsIE1haWxpbmdMaXN0OiBsaW51eC1tZWRpYUB2Z2VyLmtlcm5lbC5vcmcKICAqCiAgKiBUaGlzIG1vZHVsZSBpcyBwYXJ0IG9mIHVzYnZpc2lvbiBkcml2ZXIgcHJvamVjdC4KICAqIFVwZGF0ZXMgdG8gZHJpdmVyIGNvbXBsZXRlZCBieSBEd2FpbmUgUC4gR2FyZGVuCkBAIC0zNSw3ICszNSw3IEBACiAjaW5jbHVkZSA8bGludXgvdXNiLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdHVuZXIuaD4KICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KIApAQCAtMzU3LDEzICszNTcsMTMgQEAKIGV4dGVybiBzdHJ1Y3QgdXNiX2RldmljZV9pZCB1c2J2aXNpb25fdGFibGVbXTsKIAogc3RydWN0IHVzYl91c2J2aXNpb24geworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OyAgICAgICAgIAkJCQkvKiBWaWRlbyBEZXZpY2UgKi8KIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICpyZGV2OyAgICAgICAgICAgICAgIAkJCS8qIFJhZGlvIERldmljZSAqLwogCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZiaTsgCQkJCQkvKiBWQkkgRGV2aWNlICAgKi8KIAogCS8qIGkyYyBEZWNsYXJhdGlvbiBTZWN0aW9uKi8KIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXA7Ci0Jc3RydWN0IGkyY19jbGllbnQgaTJjX2NsaWVudDsKIAogCXN0cnVjdCB1cmIgKmN0cmxVcmI7CiAJdW5zaWduZWQgY2hhciBjdHJsVXJiQnVmZmVyWzhdOwpAQCAtMzc0LDcgKzM3NCw2IEBACiAJLyogY29uZmlndXJhdGlvbiBwYXJ0ICovCiAJaW50IGhhdmVfdHVuZXI7CiAJaW50IHR1bmVyX3R5cGU7Ci0JaW50IHR1bmVyX2FkZHI7CiAJaW50IGJyaWRnZVR5cGU7CQkJCQkJCS8vIE5UMTAwMywgTlQxMDA0LCBOVDEwMDUKIAlpbnQgcmFkaW87CiAJaW50IHZpZGVvX2lucHV0czsJCQkJCQkvLyAjIG9mIGlucHV0cwpAQCAtNDY0LDYgKzQ2Myw4IEBACiAJaW50IENvbXByQmxvY2tUeXBlc1s0XTsKIH07CiAKKyNkZWZpbmUgY2FsbF9hbGwodXNidmlzaW9uLCBvLCBmLCBhcmdzLi4uKSBcCisJdjRsMl9kZXZpY2VfY2FsbF9hbGwoJnVzYnZpc2lvbi0+djRsMl9kZXYsIDAsIG8sIGYsICMjYXJncykKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAvKiBkZWZpbmVkIGluIHVzYnZpc2lvbi1pMmMuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTQ3NSw3ICs0NzYsNiBAQAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIGludCB1c2J2aXNpb25faTJjX3JlZ2lzdGVyKHN0cnVjdCB1c2JfdXNidmlzaW9uICp1c2J2aXNpb24pOwogaW50IHVzYnZpc2lvbl9pMmNfdW5yZWdpc3RlcihzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uKTsKLXZvaWQgY2FsbF9pMmNfY2xpZW50cyhzdHJ1Y3QgdXNiX3VzYnZpc2lvbiAqdXNidmlzaW9uLCB1bnNpZ25lZCBpbnQgY21kLHZvaWQgKmFyZyk7CiAKIC8qIGRlZmluZWQgaW4gdXNidmlzaW9uLWNvcmUuYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KIGludCB1c2J2aXNpb25fcmVhZF9yZWcoc3RydWN0IHVzYl91c2J2aXNpb24gKnVzYnZpc2lvbiwgdW5zaWduZWQgY2hhciByZWcpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19jdHJsLmMKaW5kZXggZDI1NzZmNi4uMGQ3ZTM4ZCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2N0cmwuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfY3RybC5jCkBAIC03ODYsNyArNzg2LDcgQEAKIAltZW1zZXQodjRsMl9jdHJsLCAwLCBzaXplb2YgKnY0bDJfY3RybCk7CiAJdjRsMl9jdHJsLT5pZCA9IG1hcHBpbmctPmlkOwogCXY0bDJfY3RybC0+dHlwZSA9IG1hcHBpbmctPnY0bDJfdHlwZTsKLQlzdHJuY3B5KHY0bDJfY3RybC0+bmFtZSwgbWFwcGluZy0+bmFtZSwgc2l6ZW9mIHY0bDJfY3RybC0+bmFtZSk7CisJc3RybGNweSh2NGwyX2N0cmwtPm5hbWUsIG1hcHBpbmctPm5hbWUsIHNpemVvZiB2NGwyX2N0cmwtPm5hbWUpOwogCXY0bDJfY3RybC0+ZmxhZ3MgPSAwOwogCiAJaWYgKCEoY3RybC0+aW5mby0+ZmxhZ3MgJiBVVkNfQ09OVFJPTF9TRVRfQ1VSKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19kcml2ZXIuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19kcml2ZXIuYwppbmRleCBiMTI4NzMyLi4zOTk0MTJkIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX2RyaXZlci5jCkBAIC0zMTQsNyArMzE0LDcgQEAKIAkJZm10ZGVzYyA9IHV2Y19mb3JtYXRfYnlfZ3VpZCgmYnVmZmVyWzVdKTsKIAogCQlpZiAoZm10ZGVzYyAhPSBOVUxMKSB7Ci0JCQlzdHJuY3B5KGZvcm1hdC0+bmFtZSwgZm10ZGVzYy0+bmFtZSwKKwkJCXN0cmxjcHkoZm9ybWF0LT5uYW1lLCBmbXRkZXNjLT5uYW1lLAogCQkJCXNpemVvZiBmb3JtYXQtPm5hbWUpOwogCQkJZm9ybWF0LT5mY2MgPSBmbXRkZXNjLT5mY2M7CiAJCX0gZWxzZSB7CkBAIC0zNDUsNyArMzQ1LDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJc3RybmNweShmb3JtYXQtPm5hbWUsICJNSlBFRyIsIHNpemVvZiBmb3JtYXQtPm5hbWUpOworCQlzdHJsY3B5KGZvcm1hdC0+bmFtZSwgIk1KUEVHIiwgc2l6ZW9mIGZvcm1hdC0+bmFtZSk7CiAJCWZvcm1hdC0+ZmNjID0gVjRMMl9QSVhfRk1UX01KUEVHOwogCQlmb3JtYXQtPmZsYWdzID0gVVZDX0ZNVF9GTEFHX0NPTVBSRVNTRUQ7CiAJCWZvcm1hdC0+YnBwID0gMDsKQEAgLTM2MywxMyArMzYzLDEzIEBACiAKIAkJc3dpdGNoIChidWZmZXJbOF0gJiAweDdmKSB7CiAJCWNhc2UgMDoKLQkJCXN0cm5jcHkoZm9ybWF0LT5uYW1lLCAiU0QtRFYiLCBzaXplb2YgZm9ybWF0LT5uYW1lKTsKKwkJCXN0cmxjcHkoZm9ybWF0LT5uYW1lLCAiU0QtRFYiLCBzaXplb2YgZm9ybWF0LT5uYW1lKTsKIAkJCWJyZWFrOwogCQljYXNlIDE6Ci0JCQlzdHJuY3B5KGZvcm1hdC0+bmFtZSwgIlNETC1EViIsIHNpemVvZiBmb3JtYXQtPm5hbWUpOworCQkJc3RybGNweShmb3JtYXQtPm5hbWUsICJTREwtRFYiLCBzaXplb2YgZm9ybWF0LT5uYW1lKTsKIAkJCWJyZWFrOwogCQljYXNlIDI6Ci0JCQlzdHJuY3B5KGZvcm1hdC0+bmFtZSwgIkhELURWIiwgc2l6ZW9mIGZvcm1hdC0+bmFtZSk7CisJCQlzdHJsY3B5KGZvcm1hdC0+bmFtZSwgIkhELURWIiwgc2l6ZW9mIGZvcm1hdC0+bmFtZSk7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJCXV2Y190cmFjZShVVkNfVFJBQ0VfREVTQ1IsICJkZXZpY2UgJWQgdmlkZW9zdHJlYW1pbmciCkBAIC0zNzksNyArMzc5LDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJc3RybmNhdChmb3JtYXQtPm5hbWUsIGJ1ZmZlcls4XSAmICgxIDw8IDcpID8gIiA2MEh6IiA6ICIgNTBIeiIsCisJCXN0cmxjYXQoZm9ybWF0LT5uYW1lLCBidWZmZXJbOF0gJiAoMSA8PCA3KSA/ICIgNjBIeiIgOiAiIDUwSHoiLAogCQkJc2l6ZW9mIGZvcm1hdC0+bmFtZSk7CiAKIAkJZm9ybWF0LT5mY2MgPSBWNEwyX1BJWF9GTVRfRFY7CkBAIC0xNTI2LDcgKzE1MjYsNyBAQAogCXZkZXYtPm1pbm9yID0gLTE7CiAJdmRldi0+Zm9wcyA9ICZ1dmNfZm9wczsKIAl2ZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7Ci0Jc3RybmNweSh2ZGV2LT5uYW1lLCBkZXYtPm5hbWUsIHNpemVvZiB2ZGV2LT5uYW1lKTsKKwlzdHJsY3B5KHZkZXYtPm5hbWUsIGRldi0+bmFtZSwgc2l6ZW9mIHZkZXYtPm5hbWUpOwogCiAJLyogU2V0IHRoZSBkcml2ZXIgZGF0YSBiZWZvcmUgY2FsbGluZyB2aWRlb19yZWdpc3Rlcl9kZXZpY2UsIG90aGVyd2lzZQogCSAqIHV2Y192NGwyX29wZW4gbWlnaHQgcmFjZSB1cy4KQEAgLTE2MjEsNyArMTYyMSw3IEBACiAJZGV2LT5xdWlya3MgPSBpZC0+ZHJpdmVyX2luZm8gfCB1dmNfcXVpcmtzX3BhcmFtOwogCiAJaWYgKHVkZXYtPnByb2R1Y3QgIT0gTlVMTCkKLQkJc3RybmNweShkZXYtPm5hbWUsIHVkZXYtPnByb2R1Y3QsIHNpemVvZiBkZXYtPm5hbWUpOworCQlzdHJsY3B5KGRldi0+bmFtZSwgdWRldi0+cHJvZHVjdCwgc2l6ZW9mIGRldi0+bmFtZSk7CiAJZWxzZQogCQlzbnByaW50ZihkZXYtPm5hbWUsIHNpemVvZiBkZXYtPm5hbWUsCiAJCQkiVVZDIENhbWVyYSAoJTA0eDolMDR4KSIsCkBAIC0xODMzLDYgKzE4MzMsMTUgQEAKIAkgIC5iSW50ZXJmYWNlQ2xhc3MJPSBVU0JfQ0xBU1NfVkVORE9SX1NQRUMsCiAJICAuYkludGVyZmFjZVN1YkNsYXNzCT0gMSwKIAkgIC5iSW50ZXJmYWNlUHJvdG9jb2wJPSAwIH0sCisJLyogQWxjb3IgTWljcm8gQVUzODIwIChGdXR1cmUgQm95IFBDIFVTQiBXZWJjYW0pICovCisJeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKKwkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCisJICAuaWRWZW5kb3IJCT0gMHgwNThmLAorCSAgLmlkUHJvZHVjdAkJPSAweDM4MjAsCisJICAuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX1ZJREVPLAorCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCisJICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKKwkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfUFJPQkVfTUlOTUFYIH0sCiAJLyogQXBwbGUgQnVpbHQtSW4gaVNpZ2h0ICovCiAJeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKIAkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCkBAIC0xODUyLDYgKzE4NjEsMTUgQEAKIAkgIC5iSW50ZXJmYWNlU3ViQ2xhc3MJPSAxLAogCSAgLmJJbnRlcmZhY2VQcm90b2NvbAk9IDAsCiAJICAuZHJpdmVyX2luZm8JCT0gVVZDX1FVSVJLX1NUUkVBTV9OT19GSUQgfSwKKwkvKiBWaU1pY3JvICovCisJeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9WRU5ET1IKKwkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCisJICAuaWRWZW5kb3IJCT0gMHgwYWM4LAorCSAgLmlkUHJvZHVjdAkJPSAweDAwMDAsCisJICAuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX1ZJREVPLAorCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCisJICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKKwkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfRklYX0JBTkRXSURUSCB9LAogCS8qIE1UNjIyNyAqLwogCXsgLm1hdGNoX2ZsYWdzCQk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFCiAJCQkJfCBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLApAQCAtMTg3OSw3ICsxODk3LDcgQEAKIAkgIC5iSW50ZXJmYWNlU3ViQ2xhc3MJPSAxLAogCSAgLmJJbnRlcmZhY2VQcm90b2NvbAk9IDAsCiAJICAuZHJpdmVyX2luZm8JCT0gVVZDX1FVSVJLX1NUUkVBTV9OT19GSUQgfSwKLQkvKiBBc3VzIEY5U0cgKi8KKwkvKiBTeW50ZWsgKEFzdXMgRjlTRykgKi8KIAl7IC5tYXRjaF9mbGFncwkJPSBVU0JfREVWSUNFX0lEX01BVENIX0RFVklDRQogCQkJCXwgVVNCX0RFVklDRV9JRF9NQVRDSF9JTlRfSU5GTywKIAkgIC5pZFZlbmRvcgkJPSAweDE3NGYsCkBAIC0xODk3LDYgKzE5MTUsMTUgQEAKIAkgIC5iSW50ZXJmYWNlU3ViQ2xhc3MJPSAxLAogCSAgLmJJbnRlcmZhY2VQcm90b2NvbAk9IDAsCiAJICAuZHJpdmVyX2luZm8JCT0gVVZDX1FVSVJLX1NUUkVBTV9OT19GSUQgfSwKKwkvKiBTeW50ZWsgKEpBT3RlY2ggU21hcnQgVGVybWluYWwpICovCisJeyAubWF0Y2hfZmxhZ3MJCT0gVVNCX0RFVklDRV9JRF9NQVRDSF9ERVZJQ0UKKwkJCQl8IFVTQl9ERVZJQ0VfSURfTUFUQ0hfSU5UX0lORk8sCisJICAuaWRWZW5kb3IJCT0gMHgxNzRmLAorCSAgLmlkUHJvZHVjdAkJPSAweDhhMzQsCisJICAuYkludGVyZmFjZUNsYXNzCT0gVVNCX0NMQVNTX1ZJREVPLAorCSAgLmJJbnRlcmZhY2VTdWJDbGFzcwk9IDEsCisJICAuYkludGVyZmFjZVByb3RvY29sCT0gMCwKKwkgIC5kcml2ZXJfaW5mbwkJPSBVVkNfUVVJUktfU1RSRUFNX05PX0ZJRCB9LAogCS8qIExlbm92byBUaGlua3BhZCBTTDUwMCAqLwogCXsgLm1hdGNoX2ZsYWdzCQk9IFVTQl9ERVZJQ0VfSURfTUFUQ0hfREVWSUNFCiAJCQkJfCBVU0JfREVWSUNFX0lEX01BVENIX0lOVF9JTkZPLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3N0YXR1cy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3N0YXR1cy5jCmluZGV4IGM3MDVmMjQuLjIxZDg3MTIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y19zdGF0dXMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfc3RhdHVzLmMKQEAgLTI0LDI2ICsyNCwxOSBAQAogI2lmZGVmIENPTkZJR19VU0JfVklERU9fQ0xBU1NfSU5QVVRfRVZERVYKIHN0YXRpYyBpbnQgdXZjX2lucHV0X2luaXQoc3RydWN0IHV2Y19kZXZpY2UgKmRldikKIHsKLQlzdHJ1Y3QgdXNiX2RldmljZSAqdWRldiA9IGRldi0+dWRldjsKIAlzdHJ1Y3QgaW5wdXRfZGV2ICppbnB1dDsKLQljaGFyICpwaHlzID0gTlVMTDsKIAlpbnQgcmV0OwogCiAJaW5wdXQgPSBpbnB1dF9hbGxvY2F0ZV9kZXZpY2UoKTsKIAlpZiAoaW5wdXQgPT0gTlVMTCkKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlwaHlzID0ga21hbGxvYyg2ICsgc3RybGVuKHVkZXYtPmJ1cy0+YnVzX25hbWUpICsgc3RybGVuKHVkZXYtPmRldnBhdGgpLAotCQkJR0ZQX0tFUk5FTCk7Ci0JaWYgKHBoeXMgPT0gTlVMTCkgewotCQlyZXQgPSAtRU5PTUVNOwotCQlnb3RvIGVycm9yOwotCX0KLQlzcHJpbnRmKHBoeXMsICJ1c2ItJXMtJXMiLCB1ZGV2LT5idXMtPmJ1c19uYW1lLCB1ZGV2LT5kZXZwYXRoKTsKKwl1c2JfbWFrZV9wYXRoKGRldi0+dWRldiwgZGV2LT5pbnB1dF9waHlzLCBzaXplb2YoZGV2LT5pbnB1dF9waHlzKSk7CisJc3RybGNhdChkZXYtPmlucHV0X3BoeXMsICIvYnV0dG9uIiwgc2l6ZW9mKGRldi0+aW5wdXRfcGh5cykpOwogCiAJaW5wdXQtPm5hbWUgPSBkZXYtPm5hbWU7Ci0JaW5wdXQtPnBoeXMgPSBwaHlzOwotCXVzYl90b19pbnB1dF9pZCh1ZGV2LCAmaW5wdXQtPmlkKTsKKwlpbnB1dC0+cGh5cyA9IGRldi0+aW5wdXRfcGh5czsKKwl1c2JfdG9faW5wdXRfaWQoZGV2LT51ZGV2LCAmaW5wdXQtPmlkKTsKIAlpbnB1dC0+ZGV2LnBhcmVudCA9ICZkZXYtPmludGYtPmRldjsKIAogCV9fc2V0X2JpdChFVl9LRVksIGlucHV0LT5ldmJpdCk7CkBAIC01Nyw3ICs1MCw2IEBACiAKIGVycm9yOgogCWlucHV0X2ZyZWVfZGV2aWNlKGlucHV0KTsKLQlrZnJlZShwaHlzKTsKIAlyZXR1cm4gcmV0OwogfQogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3Y0bDIuYwppbmRleCBkNjgxNTE5Li4yYTgwY2FhIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmNfdjRsMi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192NGwyLmMKQEAgLTU1LDcgKzU1LDcgQEAKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAltZW51X2luZm8gPSAmbWFwcGluZy0+bWVudV9pbmZvW3F1ZXJ5X21lbnUtPmluZGV4XTsKLQlzdHJuY3B5KHF1ZXJ5X21lbnUtPm5hbWUsIG1lbnVfaW5mby0+bmFtZSwgMzIpOworCXN0cmxjcHkocXVlcnlfbWVudS0+bmFtZSwgbWVudV9pbmZvLT5uYW1lLCBzaXplb2YgcXVlcnlfbWVudS0+bmFtZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTQ4NiwxMCArNDg2LDEwIEBACiAJCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKIAogCQltZW1zZXQoY2FwLCAwLCBzaXplb2YgKmNhcCk7Ci0JCXN0cm5jcHkoY2FwLT5kcml2ZXIsICJ1dmN2aWRlbyIsIHNpemVvZiBjYXAtPmRyaXZlcik7Ci0JCXN0cm5jcHkoY2FwLT5jYXJkLCB2ZGV2LT5uYW1lLCAzMik7Ci0JCXN0cm5jcHkoY2FwLT5idXNfaW5mbywgdmlkZW8tPmRldi0+dWRldi0+YnVzLT5idXNfbmFtZSwKLQkJCXNpemVvZiBjYXAtPmJ1c19pbmZvKTsKKwkJc3RybGNweShjYXAtPmRyaXZlciwgInV2Y3ZpZGVvIiwgc2l6ZW9mIGNhcC0+ZHJpdmVyKTsKKwkJc3RybGNweShjYXAtPmNhcmQsIHZkZXYtPm5hbWUsIHNpemVvZiBjYXAtPmNhcmQpOworCQl1c2JfbWFrZV9wYXRoKHZpZGVvLT5kZXYtPnVkZXYsCisJCQkgICAgICBjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOwogCQljYXAtPnZlcnNpb24gPSBEUklWRVJfVkVSU0lPTl9OVU1CRVI7CiAJCWlmICh2aWRlby0+c3RyZWFtaW5nLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKIAkJCWNhcC0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVklERU9fQ0FQVFVSRQpAQCAtNjIwLDcgKzYyMCw3IEBACiAKIAkJbWVtc2V0KGlucHV0LCAwLCBzaXplb2YgKmlucHV0KTsKIAkJaW5wdXQtPmluZGV4ID0gaW5kZXg7Ci0JCXN0cm5jcHkoaW5wdXQtPm5hbWUsIGl0ZXJtLT5uYW1lLCBzaXplb2YgaW5wdXQtPm5hbWUpOworCQlzdHJsY3B5KGlucHV0LT5uYW1lLCBpdGVybS0+bmFtZSwgc2l6ZW9mIGlucHV0LT5uYW1lKTsKIAkJaWYgKFVWQ19FTlRJVFlfVFlQRShpdGVybSkgPT0gSVRUX0NBTUVSQSkKIAkJCWlucHV0LT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKIAkJYnJlYWs7CkBAIC02NzMsMTYgKzY3MywyMiBAQAogCXsKIAkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZm10ID0gYXJnOwogCQlzdHJ1Y3QgdXZjX2Zvcm1hdCAqZm9ybWF0OworCQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IGZtdC0+dHlwZTsKKwkJX191MzIgaW5kZXggPSBmbXQtPmluZGV4OwogCiAJCWlmIChmbXQtPnR5cGUgIT0gdmlkZW8tPnN0cmVhbWluZy0+dHlwZSB8fAogCQkgICAgZm10LT5pbmRleCA+PSB2aWRlby0+c3RyZWFtaW5nLT5uZm9ybWF0cykKIAkJCXJldHVybiAtRUlOVkFMOwogCisJCW1lbXNldChmbXQsIDAsIHNpemVvZigqZm10KSk7CisJCWZtdC0+aW5kZXggPSBpbmRleDsKKwkJZm10LT50eXBlID0gdHlwZTsKKwogCQlmb3JtYXQgPSAmdmlkZW8tPnN0cmVhbWluZy0+Zm9ybWF0W2ZtdC0+aW5kZXhdOwogCQlmbXQtPmZsYWdzID0gMDsKIAkJaWYgKGZvcm1hdC0+ZmxhZ3MgJiBVVkNfRk1UX0ZMQUdfQ09NUFJFU1NFRCkKIAkJCWZtdC0+ZmxhZ3MgfD0gVjRMMl9GTVRfRkxBR19DT01QUkVTU0VEOwotCQlzdHJuY3B5KGZtdC0+ZGVzY3JpcHRpb24sIGZvcm1hdC0+bmFtZSwKKwkJc3RybGNweShmbXQtPmRlc2NyaXB0aW9uLCBmb3JtYXQtPm5hbWUsCiAJCQlzaXplb2YgZm10LT5kZXNjcmlwdGlvbik7CiAJCWZtdC0+ZGVzY3JpcHRpb25bc2l6ZW9mIGZtdC0+ZGVzY3JpcHRpb24gLSAxXSA9IDA7CiAJCWZtdC0+cGl4ZWxmb3JtYXQgPSBmb3JtYXQtPmZjYzsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y192aWRlby5jIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKaW5kZXggOWJjNDcwNS4uYTk1ZTE3MyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjX3ZpZGVvLmMKQEAgLTYxLDcgKzYxLDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgdXZjX2ZpeHVwX2J1ZmZlcl9zaXplKHN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbywKK3N0YXRpYyB2b2lkIHV2Y19maXh1cF92aWRlb19jdHJsKHN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbywKIAlzdHJ1Y3QgdXZjX3N0cmVhbWluZ19jb250cm9sICpjdHJsKQogewogCXN0cnVjdCB1dmNfZm9ybWF0ICpmb3JtYXQ7CkBAIC04NCw2ICs4NCwzMSBAQAogCSAgICAgIHZpZGVvLT5kZXYtPnV2Y192ZXJzaW9uIDwgMHgwMTEwKSkKIAkJY3RybC0+ZHdNYXhWaWRlb0ZyYW1lU2l6ZSA9CiAJCQlmcmFtZS0+ZHdNYXhWaWRlb0ZyYW1lQnVmZmVyU2l6ZTsKKworCWlmICh2aWRlby0+ZGV2LT5xdWlya3MgJiBVVkNfUVVJUktfRklYX0JBTkRXSURUSCAmJgorCSAgICB2aWRlby0+c3RyZWFtaW5nLT5pbnRmLT5udW1fYWx0c2V0dGluZyA+IDEpIHsKKwkJdTMyIGludGVydmFsOworCQl1MzIgYmFuZHdpZHRoOworCisJCWludGVydmFsID0gKGN0cmwtPmR3RnJhbWVJbnRlcnZhbCA+IDEwMDAwMCkKKwkJCSA/IGN0cmwtPmR3RnJhbWVJbnRlcnZhbAorCQkJIDogZnJhbWUtPmR3RnJhbWVJbnRlcnZhbFswXTsKKworCQkvKiBDb21wdXRlIGEgYmFuZHdpZHRoIGVzdGltYXRpb24gYnkgbXVsdGlwbHlpbmcgdGhlIGZyYW1lCisJCSAqIHNpemUgYnkgdGhlIG51bWJlciBvZiB2aWRlbyBmcmFtZXMgcGVyIHNlY29uZCwgZGl2aWRlIHRoZQorCQkgKiByZXN1bHQgYnkgdGhlIG51bWJlciBvZiBVU0IgZnJhbWVzIChvciBtaWNyby1mcmFtZXMgZm9yCisJCSAqIGhpZ2gtc3BlZWQgZGV2aWNlcykgcGVyIHNlY29uZCBhbmQgYWRkIHRoZSBVVkMgaGVhZGVyIHNpemUKKwkJICogKGFzc3VtZWQgdG8gYmUgMTIgYnl0ZXMgbG9uZykuCisJCSAqLworCQliYW5kd2lkdGggPSBmcmFtZS0+d1dpZHRoICogZnJhbWUtPndIZWlnaHQgLyA4ICogZm9ybWF0LT5icHA7CisJCWJhbmR3aWR0aCAqPSAxMDAwMDAwMCAvIGludGVydmFsICsgMTsKKwkJYmFuZHdpZHRoIC89IDEwMDA7CisJCWlmICh2aWRlby0+ZGV2LT51ZGV2LT5zcGVlZCA9PSBVU0JfU1BFRURfSElHSCkKKwkJCWJhbmR3aWR0aCAvPSA4OworCQliYW5kd2lkdGggKz0gMTI7CisKKwkJY3RybC0+ZHdNYXhQYXlsb2FkVHJhbnNmZXJTaXplID0gYmFuZHdpZHRoOworCX0KIH0KIAogc3RhdGljIGludCB1dmNfZ2V0X3ZpZGVvX2N0cmwoc3RydWN0IHV2Y192aWRlb19kZXZpY2UgKnZpZGVvLApAQCAtMTU4LDEwICsxODMsMTEgQEAKIAkJY3RybC0+Yk1heFZlcnNpb24gPSAwOwogCX0KIAotCS8qIFNvbWUgYnJva2VuIGRldmljZXMgcmV0dXJuIGEgbnVsbCBvciB3cm9uZyBkd01heFZpZGVvRnJhbWVTaXplLgotCSAqIFRyeSB0byBnZXQgdGhlIHZhbHVlIGZyb20gdGhlIGZvcm1hdCBhbmQgZnJhbWUgZGVzY3JpcHRvcnMuCisJLyogU29tZSBicm9rZW4gZGV2aWNlcyByZXR1cm4gbnVsbCBvciB3cm9uZyBkd01heFZpZGVvRnJhbWVTaXplIGFuZAorCSAqIGR3TWF4UGF5bG9hZFRyYW5zZmVyU2l6ZSBmaWVsZHMuIFRyeSB0byBnZXQgdGhlIHZhbHVlIGZyb20gdGhlCisJICogZm9ybWF0IGFuZCBmcmFtZSBkZXNjcmlwdG9ycy4KIAkgKi8KLQl1dmNfZml4dXBfYnVmZmVyX3NpemUodmlkZW8sIGN0cmwpOworCXV2Y19maXh1cF92aWRlb19jdHJsKHZpZGVvLCBjdHJsKTsKIAlyZXQgPSAwOwogCiBvdXQ6CkBAIC01NDAsNiArNTY2LDkgQEAKIAl1OCAqbWVtOwogCWludCBsZW4sIHJldDsKIAorCWlmICh1cmItPmFjdHVhbF9sZW5ndGggPT0gMCkKKwkJcmV0dXJuOworCiAJbWVtID0gdXJiLT50cmFuc2Zlcl9idWZmZXI7CiAJbGVuID0gdXJiLT5hY3R1YWxfbGVuZ3RoOwogCXZpZGVvLT5idWxrLnBheWxvYWRfc2l6ZSArPSBsZW47CkBAIC02OTksMjcgKzcyOCw0NyBAQAogICogYWxyZWFkeSBhbGxvY2F0ZWQgd2hlbiByZXN1bWluZyBmcm9tIHN1c3BlbmQsIGluIHdoaWNoIGNhc2UgaXQgd2lsbAogICogcmV0dXJuIHdpdGhvdXQgdG91Y2hpbmcgdGhlIGJ1ZmZlcnMuCiAgKgotICogUmV0dXJuIDAgb24gc3VjY2VzcyBvciAtRU5PTUVNIHdoZW4gb3V0IG9mIG1lbW9yeS4KKyAqIExpbWl0IHRoZSBidWZmZXIgc2l6ZSB0byBVVkNfTUFYX1BBQ0tFVFMgYnVsay9pc29jaHJvbm91cyBwYWNrZXRzLiBJZiB0aGUKKyAqIHN5c3RlbSBpcyB0b28gbG93IG9uIG1lbW9yeSB0cnkgc3VjY2Vzc2l2ZWx5IHNtYWxsZXIgbnVtYmVycyBvZiBwYWNrZXRzCisgKiB1bnRpbCBhbGxvY2F0aW9uIHN1Y2NlZWRzLgorICoKKyAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGFsbG9jYXRlZCBwYWNrZXRzIG9uIHN1Y2Nlc3Mgb3IgMCB3aGVuIG91dCBvZiBtZW1vcnkuCiAgKi8KIHN0YXRpYyBpbnQgdXZjX2FsbG9jX3VyYl9idWZmZXJzKHN0cnVjdCB1dmNfdmlkZW9fZGV2aWNlICp2aWRlbywKLQl1bnNpZ25lZCBpbnQgc2l6ZSkKKwl1bnNpZ25lZCBpbnQgc2l6ZSwgdW5zaWduZWQgaW50IHBzaXplLCBnZnBfdCBnZnBfZmxhZ3MpCiB7CisJdW5zaWduZWQgaW50IG5wYWNrZXRzOwogCXVuc2lnbmVkIGludCBpOwogCiAJLyogQnVmZmVycyBhcmUgYWxyZWFkeSBhbGxvY2F0ZWQsIGJhaWwgb3V0LiAqLwogCWlmICh2aWRlby0+dXJiX3NpemUpCiAJCXJldHVybiAwOwogCi0JZm9yIChpID0gMDsgaSA8IFVWQ19VUkJTOyArK2kpIHsKLQkJdmlkZW8tPnVyYl9idWZmZXJbaV0gPSB1c2JfYnVmZmVyX2FsbG9jKHZpZGVvLT5kZXYtPnVkZXYsCi0JCQlzaXplLCBHRlBfS0VSTkVMLCAmdmlkZW8tPnVyYl9kbWFbaV0pOwotCQlpZiAodmlkZW8tPnVyYl9idWZmZXJbaV0gPT0gTlVMTCkgewotCQkJdXZjX2ZyZWVfdXJiX2J1ZmZlcnModmlkZW8pOwotCQkJcmV0dXJuIC1FTk9NRU07CisJLyogQ29tcHV0ZSB0aGUgbnVtYmVyIG9mIHBhY2tldHMuIEJ1bGsgZW5kcG9pbnRzIG1pZ2h0IHRyYW5zZmVyIFVWQworCSAqIHBheWxvYWRzIGFjY3Jvc3MgbXVsdGlwbGUgVVJCcy4KKwkgKi8KKwlucGFja2V0cyA9IERJVl9ST1VORF9VUChzaXplLCBwc2l6ZSk7CisJaWYgKG5wYWNrZXRzID4gVVZDX01BWF9QQUNLRVRTKQorCQlucGFja2V0cyA9IFVWQ19NQVhfUEFDS0VUUzsKKworCS8qIFJldHJ5IGFsbG9jYXRpb25zIHVudGlsIG9uZSBzdWNjZWVkLiAqLworCWZvciAoOyBucGFja2V0cyA+IDE7IG5wYWNrZXRzIC89IDIpIHsKKwkJZm9yIChpID0gMDsgaSA8IFVWQ19VUkJTOyArK2kpIHsKKwkJCXZpZGVvLT51cmJfYnVmZmVyW2ldID0gdXNiX2J1ZmZlcl9hbGxvYygKKwkJCQl2aWRlby0+ZGV2LT51ZGV2LCBwc2l6ZSAqIG5wYWNrZXRzLAorCQkJCWdmcF9mbGFncyB8IF9fR0ZQX05PV0FSTiwgJnZpZGVvLT51cmJfZG1hW2ldKTsKKwkJCWlmICghdmlkZW8tPnVyYl9idWZmZXJbaV0pIHsKKwkJCQl1dmNfZnJlZV91cmJfYnVmZmVycyh2aWRlbyk7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlpZiAoaSA9PSBVVkNfVVJCUykgeworCQkJdmlkZW8tPnVyYl9zaXplID0gcHNpemUgKiBucGFja2V0czsKKwkJCXJldHVybiBucGFja2V0czsKIAkJfQogCX0KIAotCXZpZGVvLT51cmJfc2l6ZSA9IHNpemU7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTc1MywyOSArODAyLDE5IEBACiB7CiAJc3RydWN0IHVyYiAqdXJiOwogCXVuc2lnbmVkIGludCBucGFja2V0cywgaSwgajsKLQlfX3UxNiBwc2l6ZTsKLQlfX3UzMiBzaXplOworCXUxNiBwc2l6ZTsKKwl1MzIgc2l6ZTsKIAotCS8qIENvbXB1dGUgdGhlIG51bWJlciBvZiBpc29jaHJvbm91cyBwYWNrZXRzIHRvIGFsbG9jYXRlIGJ5IGRpdmlkaW5nCi0JICogdGhlIG1heGltdW0gdmlkZW8gZnJhbWUgc2l6ZSBieSB0aGUgcGFja2V0IHNpemUuIExpbWl0IHRoZSByZXN1bHQKLQkgKiB0byBVVkNfTUFYX0lTT19QQUNLRVRTLgotCSAqLwogCXBzaXplID0gbGUxNl90b19jcHUoZXAtPmRlc2Mud01heFBhY2tldFNpemUpOwogCXBzaXplID0gKHBzaXplICYgMHgwN2ZmKSAqICgxICsgKChwc2l6ZSA+PiAxMSkgJiAzKSk7Ci0KIAlzaXplID0gdmlkZW8tPnN0cmVhbWluZy0+Y3RybC5kd01heFZpZGVvRnJhbWVTaXplOwotCWlmIChzaXplID4gVVZDX01BWF9GUkFNRV9TSVpFKQotCQlyZXR1cm4gLUVJTlZBTDsKIAotCW5wYWNrZXRzID0gRElWX1JPVU5EX1VQKHNpemUsIHBzaXplKTsKLQlpZiAobnBhY2tldHMgPiBVVkNfTUFYX0lTT19QQUNLRVRTKQotCQlucGFja2V0cyA9IFVWQ19NQVhfSVNPX1BBQ0tFVFM7CisJbnBhY2tldHMgPSB1dmNfYWxsb2NfdXJiX2J1ZmZlcnModmlkZW8sIHNpemUsIHBzaXplLCBnZnBfZmxhZ3MpOworCWlmIChucGFja2V0cyA9PSAwKQorCQlyZXR1cm4gLUVOT01FTTsKIAogCXNpemUgPSBucGFja2V0cyAqIHBzaXplOwogCi0JaWYgKHV2Y19hbGxvY191cmJfYnVmZmVycyh2aWRlbywgc2l6ZSkgPCAwKQotCQlyZXR1cm4gLUVOT01FTTsKLQogCWZvciAoaSA9IDA7IGkgPCBVVkNfVVJCUzsgKytpKSB7CiAJCXVyYiA9IHVzYl9hbGxvY191cmIobnBhY2tldHMsIGdmcF9mbGFncyk7CiAJCWlmICh1cmIgPT0gTlVMTCkgewpAQCAtODE0LDI1ICs4NTMsMjAgQEAKIAlzdHJ1Y3QgdXNiX2hvc3RfZW5kcG9pbnQgKmVwLCBnZnBfdCBnZnBfZmxhZ3MpCiB7CiAJc3RydWN0IHVyYiAqdXJiOwotCXVuc2lnbmVkIGludCBwaXBlLCBpOwotCV9fdTE2IHBzaXplOwotCV9fdTMyIHNpemU7CisJdW5zaWduZWQgaW50IG5wYWNrZXRzLCBwaXBlLCBpOworCXUxNiBwc2l6ZTsKKwl1MzIgc2l6ZTsKIAotCS8qIENvbXB1dGUgdGhlIGJ1bGsgVVJCIHNpemUuIFNvbWUgZGV2aWNlcyBzZXQgdGhlIG1heGltdW0gcGF5bG9hZAotCSAqIHNpemUgdG8gYSB2YWx1ZSB0b28gaGlnaCBmb3IgbWVtb3J5LWNvbnN0cmFpbmVkIGRldmljZXMuIFdlIG11c3QKLQkgKiB0aGVuIHRyYW5zZmVyIHRoZSBwYXlsb2FkIGFjY3Jvc3MgbXVsdGlwbGUgVVJCcy4gVG8gYmUgY29uc2lzdGFudAotCSAqIHdpdGggaXNvY2hyb25vdXMgbW9kZSwgYWxsb2NhdGUgbWF4aW11bSBVVkNfTUFYX0lTT19QQUNLRVRTIHBlciBidWxrCi0JICogVVJCLgotCSAqLwogCXBzaXplID0gbGUxNl90b19jcHUoZXAtPmRlc2Mud01heFBhY2tldFNpemUpICYgMHgwN2ZmOwogCXNpemUgPSB2aWRlby0+c3RyZWFtaW5nLT5jdHJsLmR3TWF4UGF5bG9hZFRyYW5zZmVyU2l6ZTsKIAl2aWRlby0+YnVsay5tYXhfcGF5bG9hZF9zaXplID0gc2l6ZTsKLQlpZiAoc2l6ZSA+IHBzaXplICogVVZDX01BWF9JU09fUEFDS0VUUykKLQkJc2l6ZSA9IHBzaXplICogVVZDX01BWF9JU09fUEFDS0VUUzsKIAotCWlmICh1dmNfYWxsb2NfdXJiX2J1ZmZlcnModmlkZW8sIHNpemUpIDwgMCkKKwlucGFja2V0cyA9IHV2Y19hbGxvY191cmJfYnVmZmVycyh2aWRlbywgc2l6ZSwgcHNpemUsIGdmcF9mbGFncyk7CisJaWYgKG5wYWNrZXRzID09IDApCiAJCXJldHVybiAtRU5PTUVNOwogCisJc2l6ZSA9IG5wYWNrZXRzICogcHNpemU7CisKIAlpZiAodXNiX2VuZHBvaW50X2Rpcl9pbigmZXAtPmRlc2MpKQogCQlwaXBlID0gdXNiX3JjdmJ1bGtwaXBlKHZpZGVvLT5kZXYtPnVkZXYsCiAJCQkJICAgICAgIGVwLT5kZXNjLmJFbmRwb2ludEFkZHJlc3MpOwpAQCAtMTAyMSwxMSArMTA1NSwyMCBAQAogCSAqLwogCXVzYl9zZXRfaW50ZXJmYWNlKHZpZGVvLT5kZXYtPnVkZXYsIHZpZGVvLT5zdHJlYW1pbmctPmludGZudW0sIDApOwogCi0JLyogU29tZSB3ZWJjYW1zIGRvbid0IHN1cG9ydCBHRVRfREVGIHJlcXVlc3RzIG9uIHRoZSBwcm9iZSBjb250cm9sLiBXZQotCSAqIGZhbGwgYmFjayB0byBHRVRfQ1VSIGlmIEdFVF9ERUYgZmFpbHMuCisJLyogU2V0IHRoZSBzdHJlYW1pbmcgcHJvYmUgY29udHJvbCB3aXRoIGRlZmF1bHQgc3RyZWFtaW5nIHBhcmFtZXRlcnMKKwkgKiByZXRyaWV2ZWQgZnJvbSB0aGUgZGV2aWNlLiBXZWJjYW1zIHRoYXQgZG9uJ3Qgc3Vwb3J0IEdFVF9ERUYKKwkgKiByZXF1ZXN0cyBvbiB0aGUgcHJvYmUgY29udHJvbCB3aWxsIGp1c3Qga2VlcCB0aGVpciBjdXJyZW50IHN0cmVhbWluZworCSAqIHBhcmFtZXRlcnMuCiAJICovCi0JaWYgKChyZXQgPSB1dmNfZ2V0X3ZpZGVvX2N0cmwodmlkZW8sIHByb2JlLCAxLCBHRVRfREVGKSkgPCAwICYmCi0JICAgIChyZXQgPSB1dmNfZ2V0X3ZpZGVvX2N0cmwodmlkZW8sIHByb2JlLCAxLCBHRVRfQ1VSKSkgPCAwKQorCWlmICh1dmNfZ2V0X3ZpZGVvX2N0cmwodmlkZW8sIHByb2JlLCAxLCBHRVRfREVGKSA9PSAwKQorCQl1dmNfc2V0X3ZpZGVvX2N0cmwodmlkZW8sIHByb2JlLCAxKTsKKworCS8qIEluaXRpYWxpemUgdGhlIHN0cmVhbWluZyBwYXJhbWV0ZXJzIHdpdGggdGhlIHByb2JlIGNvbnRyb2wgY3VycmVudAorCSAqIHZhbHVlLiBUaGlzIG1ha2VzIHN1cmUgU0VUX0NVUiByZXF1ZXN0cyBvbiB0aGUgc3RyZWFtaW5nIGNvbW1pdAorCSAqIGNvbnRyb2wgd2lsbCBhbHdheXMgdXNlIHZhbHVlcyByZXRyaWV2ZWQgZnJvbSBhIHN1Y2Nlc3NmdWwgR0VUX0NVUgorCSAqIHJlcXVlc3Qgb24gdGhlIHByb2JlIGNvbnRyb2wsIGFzIHJlcXVpcmVkIGJ5IHRoZSBVVkMgc3BlY2lmaWNhdGlvbi4KKwkgKi8KKwlpZiAoKHJldCA9IHV2Y19nZXRfdmlkZW9fY3RybCh2aWRlbywgcHJvYmUsIDEsIEdFVF9DVVIpKSA8IDApCiAJCXJldHVybiByZXQ7CiAKIAkvKiBDaGVjayBpZiB0aGUgZGVmYXVsdCBmb3JtYXQgZGVzY3JpcHRvciBleGlzdHMuIFVzZSB0aGUgZmlyc3QKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y3ZpZGVvLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3V2Yy91dmN2aWRlby5oCmluZGV4IDAyNzk0N2UuLmU1MDE0ZTYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdXZjL3V2Y3ZpZGVvLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby91dmMvdXZjdmlkZW8uaApAQCAtMjk2LDEwICsyOTYsOCBAQAogCiAvKiBOdW1iZXIgb2YgaXNvY2hyb25vdXMgVVJCcy4gKi8KICNkZWZpbmUgVVZDX1VSQlMJCTUKLS8qIE1heGltdW0gbnVtYmVyIG9mIHBhY2tldHMgcGVyIGlzb2Nocm9ub3VzIFVSQi4gKi8KLSNkZWZpbmUgVVZDX01BWF9JU09fUEFDS0VUUwk0MAotLyogTWF4aW11bSBmcmFtZSBzaXplIGluIGJ5dGVzLCBmb3Igc2FuaXR5IGNoZWNraW5nLiAqLwotI2RlZmluZSBVVkNfTUFYX0ZSQU1FX1NJWkUJKDE2KjEwMjQqMTAyNCkKKy8qIE1heGltdW0gbnVtYmVyIG9mIHBhY2tldHMgcGVyIFVSQi4gKi8KKyNkZWZpbmUgVVZDX01BWF9QQUNLRVRTCQkzMgogLyogTWF4aW11bSBudW1iZXIgb2YgdmlkZW8gYnVmZmVycy4gKi8KICNkZWZpbmUgVVZDX01BWF9WSURFT19CVUZGRVJTCTMyCiAvKiBNYXhpbXVtIHN0YXR1cyBidWZmZXIgc2l6ZSBpbiBieXRlcyBvZiBpbnRlcnJ1cHQgVVJCLiAqLwpAQCAtMzE2LDYgKzMxNCw3IEBACiAjZGVmaW5lIFVWQ19RVUlSS19TVFJFQU1fTk9fRklECQkweDAwMDAwMDEwCiAjZGVmaW5lIFVWQ19RVUlSS19JR05PUkVfU0VMRUNUT1JfVU5JVAkweDAwMDAwMDIwCiAjZGVmaW5lIFVWQ19RVUlSS19QUlVORV9DT05UUk9MUwkweDAwMDAwMDQwCisjZGVmaW5lIFVWQ19RVUlSS19GSVhfQkFORFdJRFRICQkweDAwMDAwMDgwCiAKIC8qIEZvcm1hdCBmbGFncyAqLwogI2RlZmluZSBVVkNfRk1UX0ZMQUdfQ09NUFJFU1NFRAkJMHgwMDAwMDAwMQpAQCAtNjQ5LDYgKzY0OCw3IEBACiAJc3RydWN0IHVyYiAqaW50X3VyYjsKIAlfX3U4ICpzdGF0dXM7CiAJc3RydWN0IGlucHV0X2RldiAqaW5wdXQ7CisJY2hhciBpbnB1dF9waHlzWzY0XTsKIAogCS8qIFZpZGVvIFN0cmVhbWluZyBpbnRlcmZhY2VzICovCiAJc3RydWN0IGxpc3RfaGVhZCBzdHJlYW1pbmc7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItY29tbW9uLmMKaW5kZXggYjhmMmJlOC4uMWRhOGNiOCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbW1vbi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21tb24uYwpAQCAtMzM0LDYgKzMzNCwxMiBAQAogCQkiQXBlcnR1cmUgUHJpb3JpdHkgTW9kZSIsCiAJCU5VTEwKIAl9OworCXN0YXRpYyBjb25zdCBjaGFyICpjb2xvcmZ4W10gPSB7CisJCSJOb25lIiwKKwkJIkJsYWNrICYgV2hpdGUiLAorCQkiU2VwaWEiLAorCQlOVUxMCisJfTsKIAogCXN3aXRjaCAoaWQpIHsKIAkJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVE6CkBAIC0zNzAsNiArMzc2LDggQEAKIAkJCXJldHVybiBjYW1lcmFfcG93ZXJfbGluZV9mcmVxdWVuY3k7CiAJCWNhc2UgVjRMMl9DSURfRVhQT1NVUkVfQVVUTzoKIAkJCXJldHVybiBjYW1lcmFfZXhwb3N1cmVfYXV0bzsKKwkJY2FzZSBWNEwyX0NJRF9DT0xPUkZYOgorCQkJcmV0dXJuIGNvbG9yZng7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gTlVMTDsKIAl9CkBAIC0zODIsMTYgKzM5MCwxNiBAQAogCXN3aXRjaCAoaWQpIHsKIAkvKiBVU0VSIGNvbnRyb2xzICovCiAJY2FzZSBWNEwyX0NJRF9VU0VSX0NMQVNTOiAJCXJldHVybiAiVXNlciBDb250cm9scyI7Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19WT0xVTUU6IAkJcmV0dXJuICJWb2x1bWUiOwotCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURTogCQlyZXR1cm4gIk11dGUiOwotCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRTogCQlyZXR1cm4gIkJhbGFuY2UiOwotCWNhc2UgVjRMMl9DSURfQVVESU9fQkFTUzogCQlyZXR1cm4gIkJhc3MiOwotCWNhc2UgVjRMMl9DSURfQVVESU9fVFJFQkxFOiAJCXJldHVybiAiVHJlYmxlIjsKLQljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOiAJCXJldHVybiAiTG91ZG5lc3MiOwogCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzogCQlyZXR1cm4gIkJyaWdodG5lc3MiOwogCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6IAkJcmV0dXJuICJDb250cmFzdCI7CiAJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOiAJCXJldHVybiAiU2F0dXJhdGlvbiI7CiAJY2FzZSBWNEwyX0NJRF9IVUU6IAkJCXJldHVybiAiSHVlIjsKKwljYXNlIFY0TDJfQ0lEX0FVRElPX1ZPTFVNRTogCQlyZXR1cm4gIlZvbHVtZSI7CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQUxBTkNFOiAJCXJldHVybiAiQmFsYW5jZSI7CisJY2FzZSBWNEwyX0NJRF9BVURJT19CQVNTOiAJCXJldHVybiAiQmFzcyI7CisJY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6IAkJcmV0dXJuICJUcmVibGUiOworCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURTogCQlyZXR1cm4gIk11dGUiOworCWNhc2UgVjRMMl9DSURfQVVESU9fTE9VRE5FU1M6IAkJcmV0dXJuICJMb3VkbmVzcyI7CiAJY2FzZSBWNEwyX0NJRF9CTEFDS19MRVZFTDoJCXJldHVybiAiQmxhY2sgTGV2ZWwiOwogCWNhc2UgVjRMMl9DSURfQVVUT19XSElURV9CQUxBTkNFOglyZXR1cm4gIldoaXRlIEJhbGFuY2UsIEF1dG9tYXRpYyI7CiAJY2FzZSBWNEwyX0NJRF9ET19XSElURV9CQUxBTkNFOgkJcmV0dXJuICJEbyBXaGl0ZSBCYWxhbmNlIjsKQEAgLTQxMiw2ICs0MjAsNyBAQAogCWNhc2UgVjRMMl9DSURfQkFDS0xJR0hUX0NPTVBFTlNBVElPTjoJcmV0dXJuICJCYWNrbGlnaHQgQ29tcGVuc2F0aW9uIjsKIAljYXNlIFY0TDJfQ0lEX0NIUk9NQV9BR0M6CQlyZXR1cm4gIkNocm9tYSBBR0MiOwogCWNhc2UgVjRMMl9DSURfQ09MT1JfS0lMTEVSOgkJcmV0dXJuICJDb2xvciBLaWxsZXIiOworCWNhc2UgVjRMMl9DSURfQ09MT1JGWDoJCQlyZXR1cm4gIkNvbG9yIEVmZmVjdHMiOwogCiAJLyogTVBFRyBjb250cm9scyAqLwogCWNhc2UgVjRMMl9DSURfTVBFR19DTEFTUzogCQlyZXR1cm4gIk1QRUcgRW5jb2RlciBDb250cm9scyI7CkBAIC00OTAsMTYgKzQ5OSwyNSBAQAogCWNhc2UgVjRMMl9DSURfSEZMSVA6CiAJY2FzZSBWNEwyX0NJRF9WRkxJUDoKIAljYXNlIFY0TDJfQ0lEX0hVRV9BVVRPOgorCWNhc2UgVjRMMl9DSURfQ0hST01BX0FHQzoKKwljYXNlIFY0TDJfQ0lEX0NPTE9SX0tJTExFUjoKIAljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTVVURToKIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fTVVURToKIAljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fR09QX0NMT1NVUkU6CiAJY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX1BVTExET1dOOgogCWNhc2UgVjRMMl9DSURfRVhQT1NVUkVfQVVUT19QUklPUklUWToKKwljYXNlIFY0TDJfQ0lEX0ZPQ1VTX0FVVE86CiAJY2FzZSBWNEwyX0NJRF9QUklWQUNZOgogCQlxY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0JPT0xFQU47CiAJCW1pbiA9IDA7CiAJCW1heCA9IHN0ZXAgPSAxOwogCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1BBTl9SRVNFVDoKKwljYXNlIFY0TDJfQ0lEX1RJTFRfUkVTRVQ6CisJCXFjdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfQlVUVE9OOworCQlxY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfV1JJVEVfT05MWTsKKwkJbWluID0gbWF4ID0gc3RlcCA9IGRlZiA9IDA7CisJCWJyZWFrOwogCWNhc2UgVjRMMl9DSURfUE9XRVJfTElORV9GUkVRVUVOQ1k6CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVE6CiAJY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0VOQ09ESU5HOgpAQCAtNTE3LDYgKzUzNSw3IEBACiAJY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9UWVBFOgogCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fVkJJX0ZNVDoKIAljYXNlIFY0TDJfQ0lEX0VYUE9TVVJFX0FVVE86CisJY2FzZSBWNEwyX0NJRF9DT0xPUkZYOgogCQlxY3RybC0+dHlwZSA9IFY0TDJfQ1RSTF9UWVBFX01FTlU7CiAJCXN0ZXAgPSAxOwogCQlicmVhazsKQEAgLTU0NywxNjEgKzU2NiwyOSBAQAogCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6CiAJY2FzZSBWNEwyX0NJRF9TQVRVUkFUSU9OOgogCWNhc2UgVjRMMl9DSURfSFVFOgorCWNhc2UgVjRMMl9DSURfUkVEX0JBTEFOQ0U6CisJY2FzZSBWNEwyX0NJRF9CTFVFX0JBTEFOQ0U6CisJY2FzZSBWNEwyX0NJRF9HQU1NQToKKwljYXNlIFY0TDJfQ0lEX1NIQVJQTkVTUzoKIAkJcWN0cmwtPmZsYWdzIHw9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUjsKIAkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9QQU5fUkVMQVRJVkU6CisJY2FzZSBWNEwyX0NJRF9USUxUX1JFTEFUSVZFOgorCWNhc2UgVjRMMl9DSURfRk9DVVNfUkVMQVRJVkU6CisJY2FzZSBWNEwyX0NJRF9aT09NX1JFTEFUSVZFOgorCQlxY3RybC0+ZmxhZ3MgfD0gVjRMMl9DVFJMX0ZMQUdfV1JJVEVfT05MWTsKKwkJYnJlYWs7CiAJfQogCXFjdHJsLT5taW5pbXVtID0gbWluOwogCXFjdHJsLT5tYXhpbXVtID0gbWF4OwogCXFjdHJsLT5zdGVwID0gc3RlcDsKIAlxY3RybC0+ZGVmYXVsdF92YWx1ZSA9IGRlZjsKIAlxY3RybC0+cmVzZXJ2ZWRbMF0gPSBxY3RybC0+cmVzZXJ2ZWRbMV0gPSAwOwotCXNucHJpbnRmKHFjdHJsLT5uYW1lLCBzaXplb2YocWN0cmwtPm5hbWUpLCBuYW1lKTsKKwlzdHJsY3B5KHFjdHJsLT5uYW1lLCBuYW1lLCBzaXplb2YocWN0cmwtPm5hbWUpKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wodjRsMl9jdHJsX3F1ZXJ5X2ZpbGwpOwogCi0vKiBGaWxsIGluIGEgc3RydWN0IHY0bDJfcXVlcnljdHJsIHdpdGggc3RhbmRhcmQgdmFsdWVzIGJhc2VkIG9uCi0gICB0aGUgY29udHJvbCBJRC4gKi8KLWludCB2NGwyX2N0cmxfcXVlcnlfZmlsbF9zdGQoc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCkKLXsKLQlzd2l0Y2ggKHFjdHJsLT5pZCkgewotCS8qIFVTRVIgY29udHJvbHMgKi8KLQljYXNlIFY0TDJfQ0lEX1VTRVJfQ0xBU1M6Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX0NMQVNTOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDAsIDAsIDApOwotCWNhc2UgVjRMMl9DSURfQVVESU9fVk9MVU1FOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDY1NTM1LCA2NTUzNSAvIDEwMCwgNTg4ODApOwotCWNhc2UgVjRMMl9DSURfQVVESU9fTVVURToKLQljYXNlIFY0TDJfQ0lEX0FVRElPX0xPVURORVNTOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDEsIDEsIDApOwotCWNhc2UgVjRMMl9DSURfQVVESU9fQkFMQU5DRToKLQljYXNlIFY0TDJfQ0lEX0FVRElPX0JBU1M6Ci0JY2FzZSBWNEwyX0NJRF9BVURJT19UUkVCTEU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgNjU1MzUsIDY1NTM1IC8gMTAwLCAzMjc2OCk7Ci0JY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDI1NSwgMSwgMTI4KTsKLQljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgotCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAxMjcsIDEsIDY0KTsKLQljYXNlIFY0TDJfQ0lEX0hVRToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAtMTI4LCAxMjcsIDEsIDApOwotCi0JLyogTVBFRyBjb250cm9scyAqLwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19TQU1QTElOR19GUkVROgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCi0JCQkJVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDQxMDAsCi0JCQkJVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfMzIwMDAsIDEsCi0JCQkJVjRMMl9NUEVHX0FVRElPX1NBTVBMSU5HX0ZSRVFfNDgwMDApOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19FTkNPRElORzoKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAotCQkJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19MQVlFUl8xLAotCQkJCVY0TDJfTVBFR19BVURJT19FTkNPRElOR19BQzMsIDEsCi0JCQkJVjRMMl9NUEVHX0FVRElPX0VOQ09ESU5HX0xBWUVSXzIpOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19MMV9CSVRSQVRFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCi0JCQkJVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMzJLLAotCQkJCVY0TDJfTVBFR19BVURJT19MMV9CSVRSQVRFXzQ0OEssIDEsCi0JCQkJVjRMMl9NUEVHX0FVRElPX0wxX0JJVFJBVEVfMjU2Syk7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX0wyX0JJVFJBVEU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKLQkJCQlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8zMkssCi0JCQkJVjRMMl9NUEVHX0FVRElPX0wyX0JJVFJBVEVfMzg0SywgMSwKLQkJCQlWNEwyX01QRUdfQVVESU9fTDJfQklUUkFURV8yMjRLKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTDNfQklUUkFURToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAotCQkJCVY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzMySywKLQkJCQlWNEwyX01QRUdfQVVESU9fTDNfQklUUkFURV8zMjBLLCAxLAotCQkJCVY0TDJfTVBFR19BVURJT19MM19CSVRSQVRFXzE5MkspOwotCWNhc2UgVjRMMl9DSURfTVBFR19BVURJT19BQUNfQklUUkFURToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCA2NDAwLCAxLCAzMjAwMDAwKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQUMzX0JJVFJBVEU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKLQkJCQlWNEwyX01QRUdfQVVESU9fQUMzX0JJVFJBVEVfMzJLLAotCQkJCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV82NDBLLCAxLAotCQkJCVY0TDJfTVBFR19BVURJT19BQzNfQklUUkFURV8zODRLKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTU9ERToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLAotCQkJCVY0TDJfTVBFR19BVURJT19NT0RFX1NURVJFTywKLQkJCQlWNEwyX01QRUdfQVVESU9fTU9ERV9NT05PLCAxLAotCQkJCVY0TDJfTVBFR19BVURJT19NT0RFX1NURVJFTyk7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCi0JCQkJVjRMMl9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OX0JPVU5EXzQsCi0JCQkJVjRMMl9NUEVHX0FVRElPX01PREVfRVhURU5TSU9OX0JPVU5EXzE2LCAxLAotCQkJCVY0TDJfTVBFR19BVURJT19NT0RFX0VYVEVOU0lPTl9CT1VORF80KTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fRU1QSEFTSVM6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKLQkJCQlWNEwyX01QRUdfQVVESU9fRU1QSEFTSVNfTk9ORSwKLQkJCQlWNEwyX01QRUdfQVVESU9fRU1QSEFTSVNfQ0NJVFRfSjE3LCAxLAotCQkJCVY0TDJfTVBFR19BVURJT19FTVBIQVNJU19OT05FKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fQ1JDOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCi0JCQkJVjRMMl9NUEVHX0FVRElPX0NSQ19OT05FLAotCQkJCVY0TDJfTVBFR19BVURJT19DUkNfQ1JDMTYsIDEsCi0JCQkJVjRMMl9NUEVHX0FVRElPX0NSQ19OT05FKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfQVVESU9fTVVURToKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAxLCAxLCAwKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fRU5DT0RJTkc6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKLQkJCQlWNEwyX01QRUdfVklERU9fRU5DT0RJTkdfTVBFR18xLAotCQkJCVY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzRfQVZDLCAxLAotCQkJCVY0TDJfTVBFR19WSURFT19FTkNPRElOR19NUEVHXzIpOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19BU1BFQ1Q6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKLQkJCQlWNEwyX01QRUdfVklERU9fQVNQRUNUXzF4MSwKLQkJCQlWNEwyX01QRUdfVklERU9fQVNQRUNUXzIyMXgxMDAsIDEsCi0JCQkJVjRMMl9NUEVHX1ZJREVPX0FTUEVDVF80eDMpOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CX0ZSQU1FUzoKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAzMywgMSwgMik7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9TSVpFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDEsIDM0LCAxLCAxMik7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1ZJREVPX0dPUF9DTE9TVVJFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDEsIDEsIDEpOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19QVUxMRE9XTjoKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAxLCAxLCAwKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9NT0RFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCi0JCQkJVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9WQlIsCi0JCQkJVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9DQlIsIDEsCi0JCQkJVjRMMl9NUEVHX1ZJREVPX0JJVFJBVEVfTU9ERV9WQlIpOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19CSVRSQVRFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDI3MDAwMDAwLCAxLCA2MDAwMDAwKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fQklUUkFURV9QRUFLOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDI3MDAwMDAwLCAxLCA4MDAwMDAwKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfVklERU9fVEVNUE9SQUxfREVDSU1BVElPTjoKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAyNTUsIDEsIDApOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19NVVRFOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDEsIDEsIDApOwotCWNhc2UgVjRMMl9DSURfTVBFR19WSURFT19NVVRFX1lVVjogIC8qIEluaXQgWVVWIChyZWFsbHkgWUNiQ3IpIHRvIGJsYWNrICovCi0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgMHhmZmZmZmYsIDEsIDB4MDA4MDgwKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1RZUEU6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwKLQkJCQlWNEwyX01QRUdfU1RSRUFNX1RZUEVfTVBFRzJfUFMsCi0JCQkJVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1NWQ0QsIDEsCi0JCQkJVjRMMl9NUEVHX1NUUkVBTV9UWVBFX01QRUcyX1BTKTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9QTVQ6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgKDEgPDwgMTQpIC0gMSwgMSwgMTYpOwotCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUElEX0FVRElPOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsICgxIDw8IDE0KSAtIDEsIDEsIDI2MCk7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9QSURfVklERU86Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgKDEgPDwgMTQpIC0gMSwgMSwgMjU2KTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BJRF9QQ1I6Ci0JCXJldHVybiB2NGwyX2N0cmxfcXVlcnlfZmlsbChxY3RybCwgMCwgKDEgPDwgMTQpIC0gMSwgMSwgMjU5KTsKLQljYXNlIFY0TDJfQ0lEX01QRUdfU1RSRUFNX1BFU19JRF9BVURJTzoKLQkJcmV0dXJuIHY0bDJfY3RybF9xdWVyeV9maWxsKHFjdHJsLCAwLCAyNTUsIDEsIDApOwotCWNhc2UgVjRMMl9DSURfTVBFR19TVFJFQU1fUEVTX0lEX1ZJREVPOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsIDAsIDI1NSwgMSwgMCk7Ci0JY2FzZSBWNEwyX0NJRF9NUEVHX1NUUkVBTV9WQklfRk1UOgotCQlyZXR1cm4gdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWN0cmwsCi0JCQkJVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX05PTkUsCi0JCQkJVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX0lWVFYsIDEsCi0JCQkJVjRMMl9NUEVHX1NUUkVBTV9WQklfRk1UX05PTkUpOwotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRUlOVkFMOwotCX0KLX0KLUVYUE9SVF9TWU1CT0wodjRsMl9jdHJsX3F1ZXJ5X2ZpbGxfc3RkKTsKLQogLyogRmlsbCBpbiBhIHN0cnVjdCB2NGwyX3F1ZXJ5bWVudSBiYXNlZCBvbiB0aGUgc3RydWN0IHY0bDJfcXVlcnljdHJsIGFuZAogICAgdGhlIG1lbnUuIFRoZSBxY3RybCBwb2ludGVyIG1heSBiZSBOVUxMLCBpbiB3aGljaCBjYXNlIGl0IGlzIGlnbm9yZWQuCiAgICBJZiBtZW51X2l0ZW1zIGlzIE5VTEwsIHRoZW4gdGhlIG1lbnUgaXRlbXMgYXJlIHJldHJpZXZlZCB1c2luZwpAQCAtNzIwLDcgKzYwNyw3IEBACiAJZm9yIChpID0gMDsgaSA8IHFtZW51LT5pbmRleCAmJiBtZW51X2l0ZW1zW2ldOyBpKyspIDsKIAlpZiAobWVudV9pdGVtc1tpXSA9PSBOVUxMIHx8IG1lbnVfaXRlbXNbaV1bMF0gPT0gJ1wwJykKIAkJcmV0dXJuIC1FSU5WQUw7Ci0Jc25wcmludGYocW1lbnUtPm5hbWUsIHNpemVvZihxbWVudS0+bmFtZSksIG1lbnVfaXRlbXNbcW1lbnUtPmluZGV4XSk7CisJc3RybGNweShxbWVudS0+bmFtZSwgbWVudV9pdGVtc1txbWVudS0+aW5kZXhdLCBzaXplb2YocW1lbnUtPm5hbWUpKTsKIAlyZXR1cm4gMDsKIH0KIEVYUE9SVF9TWU1CT0wodjRsMl9jdHJsX3F1ZXJ5X21lbnUpOwpAQCAtNzM3LDggKzYyNCw4IEBACiAJCXJldHVybiAtRUlOVkFMOwogCXdoaWxlICgqaWRzICE9IFY0TDJfQ1RSTF9NRU5VX0lEU19FTkQpIHsKIAkJaWYgKCppZHMrKyA9PSBxbWVudS0+aW5kZXgpIHsKLQkJCXNucHJpbnRmKHFtZW51LT5uYW1lLCBzaXplb2YocW1lbnUtPm5hbWUpLAotCQkJCSAgICAgICBtZW51X2l0ZW1zW3FtZW51LT5pbmRleF0pOworCQkJc3RybGNweShxbWVudS0+bmFtZSwgbWVudV9pdGVtc1txbWVudS0+aW5kZXhdLAorCQkJCQlzaXplb2YocW1lbnUtPm5hbWUpKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtNzQ5LDcgKzYzNiw3IEBACiAvKiBjdHJsX2NsYXNzZXMgcG9pbnRzIHRvIGFuIGFycmF5IG9mIHUzMiBwb2ludGVycywgdGhlIGxhc3QgZWxlbWVudCBpcwogICAgYSBOVUxMIHBvaW50ZXIuIEVhY2ggdTMyIGFycmF5IGlzIGEgMC10ZXJtaW5hdGVkIGFycmF5IG9mIGNvbnRyb2wgSURzLgogICAgRWFjaCBhcnJheSBtdXN0IGJlIHNvcnRlZCBsb3cgdG8gaGlnaCBhbmQgYmVsb25nIHRvIHRoZSBzYW1lIGNvbnRyb2wKLSAgIGNsYXNzLiBUaGUgYXJyYXkgb2YgdTMyIHBvaW50ZXIgbXVzdCBhbHNvIGJlIHNvcnRlZCwgZnJvbSBsb3cgY2xhc3MgSURzCisgICBjbGFzcy4gVGhlIGFycmF5IG9mIHUzMiBwb2ludGVycyBtdXN0IGFsc28gYmUgc29ydGVkLCBmcm9tIGxvdyBjbGFzcyBJRHMKICAgIHRvIGhpZ2ggY2xhc3MgSURzLgogCiAgICBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGZpcnN0IElEIHRoYXQgZm9sbG93cyBhZnRlciB0aGUgZ2l2ZW4gSUQuCkBAIC05MTAsMTAgKzc5NywxMCBAQAogCXN0cnVjdCBpMmNfYm9hcmRfaW5mbyBpbmZvOwogCiAJQlVHX09OKCFkZXYpOwotI2lmZGVmIE1PRFVMRQorCiAJaWYgKG1vZHVsZV9uYW1lKQogCQlyZXF1ZXN0X21vZHVsZShtb2R1bGVfbmFtZSk7Ci0jZW5kaWYKKwogCS8qIFNldHVwIHRoZSBpMmMgYm9hcmQgaW5mbyB3aXRoIHRoZSBkZXZpY2UgdHlwZSBhbmQKIAkgICB0aGUgZGV2aWNlIGFkZHJlc3MuICovCiAJbWVtc2V0KCZpbmZvLCAwLCBzaXplb2YoaW5mbykpOwpAQCAtOTI3LDExICs4MTQsMTEgQEAKIAkgICBXZSBuZWVkIGJldHRlciBzdXBwb3J0IGZyb20gdGhlIGtlcm5lbCBzbyB0aGF0IHdlCiAJICAgY2FuIGVhc2lseSB3YWl0IGZvciB0aGUgbG9hZCB0byBmaW5pc2guICovCiAJaWYgKGNsaWVudCA9PSBOVUxMIHx8IGNsaWVudC0+ZHJpdmVyID09IE5VTEwpCi0JCXJldHVybiBOVUxMOworCQlnb3RvIGVycm9yOwogCiAJLyogTG9jayB0aGUgbW9kdWxlIHNvIHdlIGNhbiBzYWZlbHkgZ2V0IHRoZSB2NGwyX3N1YmRldiBwb2ludGVyICovCiAJaWYgKCF0cnlfbW9kdWxlX2dldChjbGllbnQtPmRyaXZlci0+ZHJpdmVyLm93bmVyKSkKLQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gZXJyb3I7CiAJc2QgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCS8qIFJlZ2lzdGVyIHdpdGggdGhlIHY0bDJfZGV2aWNlIHdoaWNoIGluY3JlYXNlcyB0aGUgbW9kdWxlJ3MKQEAgLTk0MCw4ICs4MjcsMTMgQEAKIAkJc2QgPSBOVUxMOwogCS8qIERlY3JlYXNlIHRoZSBtb2R1bGUgdXNlIGNvdW50IHRvIG1hdGNoIHRoZSBmaXJzdCB0cnlfbW9kdWxlX2dldC4gKi8KIAltb2R1bGVfcHV0KGNsaWVudC0+ZHJpdmVyLT5kcml2ZXIub3duZXIpOwotCXJldHVybiBzZDsKIAorZXJyb3I6CisJLyogSWYgd2UgaGF2ZSBhIGNsaWVudCBidXQgbm8gc3ViZGV2LCB0aGVuIHNvbWV0aGluZyB3ZW50IHdyb25nIGFuZAorCSAgIHdlIG11c3QgdW5yZWdpc3RlciB0aGUgY2xpZW50LiAqLworCWlmIChjbGllbnQgJiYgc2QgPT0gTlVMTCkKKwkJaTJjX3VucmVnaXN0ZXJfZGV2aWNlKGNsaWVudCk7CisJcmV0dXJuIHNkOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodjRsMl9pMmNfbmV3X3N1YmRldik7CiAKQEAgLTk1OCwxMCArODUwLDEwIEBACiAJc3RydWN0IGkyY19ib2FyZF9pbmZvIGluZm87CiAKIAlCVUdfT04oIWRldik7Ci0jaWZkZWYgTU9EVUxFCisKIAlpZiAobW9kdWxlX25hbWUpCiAJCXJlcXVlc3RfbW9kdWxlKG1vZHVsZV9uYW1lKTsKLSNlbmRpZgorCiAJLyogU2V0dXAgdGhlIGkyYyBib2FyZCBpbmZvIHdpdGggdGhlIGRldmljZSB0eXBlIGFuZAogCSAgIHRoZSBkZXZpY2UgYWRkcmVzcy4gKi8KIAltZW1zZXQoJmluZm8sIDAsIHNpemVvZihpbmZvKSk7CkBAIC05NzQsMTEgKzg2NiwxMSBAQAogCSAgIFdlIG5lZWQgYmV0dGVyIHN1cHBvcnQgZnJvbSB0aGUga2VybmVsIHNvIHRoYXQgd2UKIAkgICBjYW4gZWFzaWx5IHdhaXQgZm9yIHRoZSBsb2FkIHRvIGZpbmlzaC4gKi8KIAlpZiAoY2xpZW50ID09IE5VTEwgfHwgY2xpZW50LT5kcml2ZXIgPT0gTlVMTCkKLQkJcmV0dXJuIE5VTEw7CisJCWdvdG8gZXJyb3I7CiAKIAkvKiBMb2NrIHRoZSBtb2R1bGUgc28gd2UgY2FuIHNhZmVseSBnZXQgdGhlIHY0bDJfc3ViZGV2IHBvaW50ZXIgKi8KIAlpZiAoIXRyeV9tb2R1bGVfZ2V0KGNsaWVudC0+ZHJpdmVyLT5kcml2ZXIub3duZXIpKQotCQlyZXR1cm4gTlVMTDsKKwkJZ290byBlcnJvcjsKIAlzZCA9IGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpOwogCiAJLyogUmVnaXN0ZXIgd2l0aCB0aGUgdjRsMl9kZXZpY2Ugd2hpY2ggaW5jcmVhc2VzIHRoZSBtb2R1bGUncwpAQCAtOTg3LDggKzg3OSw1OSBAQAogCQlzZCA9IE5VTEw7CiAJLyogRGVjcmVhc2UgdGhlIG1vZHVsZSB1c2UgY291bnQgdG8gbWF0Y2ggdGhlIGZpcnN0IHRyeV9tb2R1bGVfZ2V0LiAqLwogCW1vZHVsZV9wdXQoY2xpZW50LT5kcml2ZXItPmRyaXZlci5vd25lcik7CisKK2Vycm9yOgorCS8qIElmIHdlIGhhdmUgYSBjbGllbnQgYnV0IG5vIHN1YmRldiwgdGhlbiBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQKKwkgICB3ZSBtdXN0IHVucmVnaXN0ZXIgdGhlIGNsaWVudC4gKi8KKwlpZiAoY2xpZW50ICYmIHNkID09IE5VTEwpCisJCWkyY191bnJlZ2lzdGVyX2RldmljZShjbGllbnQpOwogCXJldHVybiBzZDsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KTsKIAorLyogUmV0dXJuIGkyYyBjbGllbnQgYWRkcmVzcyBvZiB2NGwyX3N1YmRldi4gKi8KK3Vuc2lnbmVkIHNob3J0IHY0bDJfaTJjX3N1YmRldl9hZGRyKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCit7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCisJcmV0dXJuIGNsaWVudCA/IGNsaWVudC0+YWRkciA6IEkyQ19DTElFTlRfRU5EOworfQorRVhQT1JUX1NZTUJPTF9HUEwodjRsMl9pMmNfc3ViZGV2X2FkZHIpOworCisvKiBSZXR1cm4gYSBsaXN0IG9mIEkyQyB0dW5lciBhZGRyZXNzZXMgdG8gcHJvYmUuIFVzZSBvbmx5IGlmIHRoZSB0dW5lcgorICAgYWRkcmVzc2VzIGFyZSB1bmtub3duLiAqLworY29uc3QgdW5zaWduZWQgc2hvcnQgKnY0bDJfaTJjX3R1bmVyX2FkZHJzKGVudW0gdjRsMl9pMmNfdHVuZXJfdHlwZSB0eXBlKQoreworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCByYWRpb19hZGRyc1tdID0geworI2lmIGRlZmluZWQoQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjEpIHx8IGRlZmluZWQoQ09ORklHX01FRElBX1RVTkVSX1RFQTU3NjFfTU9EVUxFKQorCQkweDEwLAorI2VuZGlmCisJCTB4NjAsCisJCUkyQ19DTElFTlRfRU5ECisJfTsKKwlzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgZGVtb2RfYWRkcnNbXSA9IHsKKwkJMHg0MiwgMHg0MywgMHg0YSwgMHg0YiwKKwkJSTJDX0NMSUVOVF9FTkQKKwl9OworCXN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCB0dl9hZGRyc1tdID0geworCQkweDQyLCAweDQzLCAweDRhLCAweDRiLAkJLyogdGRhODI5MCAqLworCQkweDYwLCAweDYxLCAweDYyLCAweDYzLCAweDY0LCAweDY1LCAweDY2LCAweDY3LAorCQkweDY4LCAweDY5LCAweDZhLCAweDZiLCAweDZjLCAweDZkLCAweDZlLCAweDZmLAorCQlJMkNfQ0xJRU5UX0VORAorCX07CisKKwlzd2l0Y2ggKHR5cGUpIHsKKwljYXNlIEFERFJTX1JBRElPOgorCQlyZXR1cm4gcmFkaW9fYWRkcnM7CisJY2FzZSBBRERSU19ERU1PRDoKKwkJcmV0dXJuIGRlbW9kX2FkZHJzOworCWNhc2UgQUREUlNfVFY6CisJCXJldHVybiB0dl9hZGRyczsKKwljYXNlIEFERFJTX1RWX1dJVEhfREVNT0Q6CisJCXJldHVybiB0dl9hZGRycyArIDQ7CisJfQorCXJldHVybiBOVUxMOworfQorRVhQT1JUX1NZTUJPTF9HUEwodjRsMl9pMmNfdHVuZXJfYWRkcnMpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1jb21wYXQtaW9jdGwzMi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbXBhdC1pb2N0bDMyLmMKaW5kZXggMTEwMzc2Yi4uMDA1NmIxMSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbXBhdC1pb2N0bDMyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWNvbXBhdC1pb2N0bDMyLmMKQEAgLTEwNDcsNyArMTA0Nyw2IEBACiAJY2FzZSBWSURJT0NfREJHX1NfUkVHSVNURVI6CiAJY2FzZSBWSURJT0NfREJHX0dfUkVHSVNURVI6CiAJY2FzZSBWSURJT0NfREJHX0dfQ0hJUF9JREVOVDoKLQljYXNlIFZJRElPQ19HX0NISVBfSURFTlRfT0xEOgogCWNhc2UgVklESU9DX1NfSFdfRlJFUV9TRUVLOgogCQlyZXQgPSBkb192aWRlb19pb2N0bChmaWxlLCBjbWQsIGFyZyk7CiAJCWJyZWFrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldi5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldi5jCmluZGV4IDEzZjg3YzIuLjkxMjI4YjMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXYuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2LmMKQEAgLTE5OCw2ICsxOTgsMjMgQEAKIAlyZXR1cm4gdmRldi0+Zm9wcy0+dW5sb2NrZWRfaW9jdGwoZmlscCwgY21kLCBhcmcpOwogfQogCisjaWZkZWYgQ09ORklHX01NVQorI2RlZmluZSB2NGwyX2dldF91bm1hcHBlZF9hcmVhIE5VTEwKKyNlbHNlCitzdGF0aWMgdW5zaWduZWQgbG9uZyB2NGwyX2dldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICpmaWxwLAorCQl1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHBnb2ZmLAorCQl1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYgPSB2aWRlb19kZXZkYXRhKGZpbHApOworCisJaWYgKCF2ZGV2LT5mb3BzLT5nZXRfdW5tYXBwZWRfYXJlYSkKKwkJcmV0dXJuIC1FTk9TWVM7CisJaWYgKHZpZGVvX2lzX3VucmVnaXN0ZXJlZCh2ZGV2KSkKKwkJcmV0dXJuIC1FTk9ERVY7CisJcmV0dXJuIHZkZXYtPmZvcHMtPmdldF91bm1hcHBlZF9hcmVhKGZpbHAsIGFkZHIsIGxlbiwgcGdvZmYsIGZsYWdzKTsKK30KKyNlbmRpZgorCiBzdGF0aWMgaW50IHY0bDJfbW1hcChzdHJ1Y3QgZmlsZSAqZmlscCwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bSkKIHsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2ID0gdmlkZW9fZGV2ZGF0YShmaWxwKTsKQEAgLTI1MCw2ICsyNjcsNyBAQAogCS5yZWFkID0gdjRsMl9yZWFkLAogCS53cml0ZSA9IHY0bDJfd3JpdGUsCiAJLm9wZW4gPSB2NGwyX29wZW4sCisJLmdldF91bm1hcHBlZF9hcmVhID0gdjRsMl9nZXRfdW5tYXBwZWRfYXJlYSwKIAkubW1hcCA9IHY0bDJfbW1hcCwKIAkudW5sb2NrZWRfaW9jdGwgPSB2NGwyX3VubG9ja2VkX2lvY3RsLAogI2lmZGVmIENPTkZJR19DT01QQVQKQEAgLTI2NSw2ICsyODMsNyBAQAogCS5yZWFkID0gdjRsMl9yZWFkLAogCS53cml0ZSA9IHY0bDJfd3JpdGUsCiAJLm9wZW4gPSB2NGwyX29wZW4sCisJLmdldF91bm1hcHBlZF9hcmVhID0gdjRsMl9nZXRfdW5tYXBwZWRfYXJlYSwKIAkubW1hcCA9IHY0bDJfbW1hcCwKIAkuaW9jdGwgPSB2NGwyX2lvY3RsLAogI2lmZGVmIENPTkZJR19DT01QQVQKQEAgLTI4OCwzNyArMzA3LDM4IEBACiAgKi8KIHN0YXRpYyBpbnQgZ2V0X2luZGV4KHN0cnVjdCB2aWRlb19kZXZpY2UgKnZkZXYsIGludCBudW0pCiB7Ci0JdTMyIHVzZWQgPSAwOwotCWNvbnN0IGludCBtYXhfaW5kZXggPSBzaXplb2YodXNlZCkgKiA4IC0gMTsKKwkvKiBUaGlzIGNhbiBiZSBzdGF0aWMgc2luY2UgdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2l0aCB0aGUgZ2xvYmFsCisJICAgdmlkZW9kZXZfbG9jayBoZWxkLiAqLworCXN0YXRpYyBERUNMQVJFX0JJVE1BUCh1c2VkLCBWSURFT19OVU1fREVWSUNFUyk7CiAJaW50IGk7CiAKLQkvKiBDdXJyZW50bHkgYSBzaW5nbGUgdjRsIGRyaXZlciBpbnN0YW5jZSBjYW5ub3QgY3JlYXRlIG1vcmUgdGhhbgotCSAgIDMyIGRldmljZXMuCi0JICAgSW5jcmVhc2UgdG8gdTY0IG9yIGFuIGFycmF5IG9mIHUzMiBpZiBtb3JlIGFyZSBuZWVkZWQuICovCi0JaWYgKG51bSA+IG1heF9pbmRleCkgeworCWlmIChudW0gPj0gVklERU9fTlVNX0RFVklDRVMpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJ2aWRlb2RldjogJXMgbnVtIGlzIHRvbyBsYXJnZVxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQkvKiBTb21lIGRyaXZlcnMgZG8gbm90IHNldCB0aGUgcGFyZW50LiBJbiB0aGF0IGNhc2UgYWx3YXlzIHJldHVybiAwLiAqLworCS8qIFNvbWUgZHJpdmVycyBkbyBub3Qgc2V0IHRoZSBwYXJlbnQuIEluIHRoYXQgY2FzZSBhbHdheXMgcmV0dXJuCisJICAgbnVtIG9yIDAuICovCiAJaWYgKHZkZXYtPnBhcmVudCA9PSBOVUxMKQotCQlyZXR1cm4gMDsKKwkJcmV0dXJuIG51bSA+PSAwID8gbnVtIDogMDsKKworCWJpdG1hcF96ZXJvKHVzZWQsIFZJREVPX05VTV9ERVZJQ0VTKTsKIAogCWZvciAoaSA9IDA7IGkgPCBWSURFT19OVU1fREVWSUNFUzsgaSsrKSB7CiAJCWlmICh2aWRlb19kZXZpY2VbaV0gIT0gTlVMTCAmJgogCQkgICAgdmlkZW9fZGV2aWNlW2ldLT5wYXJlbnQgPT0gdmRldi0+cGFyZW50KSB7Ci0JCQl1c2VkIHw9IDEgPDwgdmlkZW9fZGV2aWNlW2ldLT5pbmRleDsKKwkJCXNldF9iaXQodmlkZW9fZGV2aWNlW2ldLT5pbmRleCwgdXNlZCk7CiAJCX0KIAl9CiAKIAlpZiAobnVtID49IDApIHsKLQkJaWYgKHVzZWQgJiAoMSA8PCBudW0pKQorCQlpZiAodGVzdF9iaXQobnVtLCB1c2VkKSkKIAkJCXJldHVybiAtRU5GSUxFOwogCQlyZXR1cm4gbnVtOwogCX0KIAotCWkgPSBmZnoodXNlZCk7Ci0JcmV0dXJuIGkgPiBtYXhfaW5kZXggPyAtRU5GSUxFIDogaTsKKwlpID0gZmluZF9maXJzdF96ZXJvX2JpdCh1c2VkLCBWSURFT19OVU1fREVWSUNFUyk7CisJcmV0dXJuIGkgPT0gVklERU9fTlVNX0RFVklDRVMgPyAtRU5GSUxFIDogaTsKIH0KIAogaW50IHZpZGVvX3JlZ2lzdGVyX2RldmljZShzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2LCBpbnQgdHlwZSwgaW50IG5yKQpAQCAtMzY1LDEyICszODUsMTEgQEAKIAogCS8qIEEgbWlub3IgdmFsdWUgb2YgLTEgbWFya3MgdGhpcyB2aWRlbyBkZXZpY2UgYXMgbmV2ZXIKIAkgICBoYXZpbmcgYmVlbiByZWdpc3RlcmVkICovCi0JaWYgKHZkZXYpCi0JCXZkZXYtPm1pbm9yID0gLTE7CisJdmRldi0+bWlub3IgPSAtMTsKIAogCS8qIHRoZSByZWxlYXNlIGNhbGxiYWNrIE1VU1QgYmUgcHJlc2VudCAqLwotCVdBUk5fT04oIXZkZXYgfHwgIXZkZXYtPnJlbGVhc2UpOwotCWlmICghdmRldiB8fCAhdmRldi0+cmVsZWFzZSkKKwlXQVJOX09OKCF2ZGV2LT5yZWxlYXNlKTsKKwlpZiAoIXZkZXYtPnJlbGVhc2UpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJLyogUGFydCAxOiBjaGVjayBkZXZpY2UgdHlwZSAqLwpAQCAtMzk1LDcgKzQxNCw3IEBACiAKIAl2ZGV2LT52ZmxfdHlwZSA9IHR5cGU7CiAJdmRldi0+Y2RldiA9IE5VTEw7Ci0JaWYgKHZkZXYtPnY0bDJfZGV2KQorCWlmICh2ZGV2LT52NGwyX2RldiAmJiB2ZGV2LT52NGwyX2Rldi0+ZGV2KQogCQl2ZGV2LT5wYXJlbnQgPSB2ZGV2LT52NGwyX2Rldi0+ZGV2OwogCiAJLyogUGFydCAyOiBmaW5kIGEgZnJlZSBtaW5vciwga2VybmVsIG51bWJlciBhbmQgZGV2aWNlIGluZGV4LiAqLwpAQCAtNTgyLDYgKzYwMSw3IEBACiBNT0RVTEVfQVVUSE9SKCJBbGFuIENveCwgTWF1cm8gQ2FydmFsaG8gQ2hlaGFiIDxtY2hlaGFiQGluZnJhZGVhZC5vcmc+Iik7CiBNT0RVTEVfREVTQ1JJUFRJT04oIkRldmljZSByZWdpc3RyYXIgZm9yIFZpZGVvNExpbnV4IGRyaXZlcnMgdjIiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKK01PRFVMRV9BTElBU19DSEFSREVWX01BSk9SKFZJREVPX01BSk9SKTsKIAogCiAvKgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldmljZS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWRldmljZS5jCmluZGV4IDhhNGI3NGYuLjk0YWE0ODUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1kZXZpY2UuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItZGV2aWNlLmMKQEAgLTI2LDQ4ICsyNiw2NiBAQAogCiBpbnQgdjRsMl9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQogewotCWlmIChkZXYgPT0gTlVMTCB8fCB2NGwyX2RldiA9PSBOVUxMKQorCWlmICh2NGwyX2RldiA9PSBOVUxMKQogCQlyZXR1cm4gLUVJTlZBTDsKLQkvKiBXYXJuIGlmIHdlIGFwcGFyZW50bHkgcmUtcmVnaXN0ZXIgYSBkZXZpY2UgKi8KLQlXQVJOX09OKGRldl9nZXRfZHJ2ZGF0YShkZXYpICE9IE5VTEwpOworCiAJSU5JVF9MSVNUX0hFQUQoJnY0bDJfZGV2LT5zdWJkZXZzKTsKIAlzcGluX2xvY2tfaW5pdCgmdjRsMl9kZXYtPmxvY2spOwogCXY0bDJfZGV2LT5kZXYgPSBkZXY7Ci0Jc25wcmludGYodjRsMl9kZXYtPm5hbWUsIHNpemVvZih2NGwyX2Rldi0+bmFtZSksICIlcyAlcyIsCisJaWYgKGRldiA9PSBOVUxMKSB7CisJCS8qIElmIGRldiA9PSBOVUxMLCB0aGVuIG5hbWUgbXVzdCBiZSBmaWxsZWQgaW4gYnkgdGhlIGNhbGxlciAqLworCQlXQVJOX09OKCF2NGwyX2Rldi0+bmFtZVswXSk7CisJCXJldHVybiAwOworCX0KKworCS8qIFNldCBuYW1lIHRvIGRyaXZlciBuYW1lICsgZGV2aWNlIG5hbWUgaWYgaXQgaXMgZW1wdHkuICovCisJaWYgKCF2NGwyX2Rldi0+bmFtZVswXSkKKwkJc25wcmludGYodjRsMl9kZXYtPm5hbWUsIHNpemVvZih2NGwyX2Rldi0+bmFtZSksICIlcyAlcyIsCiAJCQlkZXYtPmRyaXZlci0+bmFtZSwgZGV2X25hbWUoZGV2KSk7CisJaWYgKGRldl9nZXRfZHJ2ZGF0YShkZXYpKQorCQl2NGwyX3dhcm4odjRsMl9kZXYsICJOb24tTlVMTCBkcnZkYXRhIG9uIHJlZ2lzdGVyXG4iKTsKIAlkZXZfc2V0X2RydmRhdGEoZGV2LCB2NGwyX2Rldik7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh2NGwyX2RldmljZV9yZWdpc3Rlcik7CiAKK3ZvaWQgdjRsMl9kZXZpY2VfZGlzY29ubmVjdChzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQoreworCWlmICh2NGwyX2Rldi0+ZGV2KSB7CisJCWRldl9zZXRfZHJ2ZGF0YSh2NGwyX2Rldi0+ZGV2LCBOVUxMKTsKKwkJdjRsMl9kZXYtPmRldiA9IE5VTEw7CisJfQorfQorRVhQT1JUX1NZTUJPTF9HUEwodjRsMl9kZXZpY2VfZGlzY29ubmVjdCk7CisKIHZvaWQgdjRsMl9kZXZpY2VfdW5yZWdpc3RlcihzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KQogewogCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QsICpuZXh0OwogCi0JaWYgKHY0bDJfZGV2ID09IE5VTEwgfHwgdjRsMl9kZXYtPmRldiA9PSBOVUxMKQorCWlmICh2NGwyX2RldiA9PSBOVUxMKQogCQlyZXR1cm47Ci0JZGV2X3NldF9kcnZkYXRhKHY0bDJfZGV2LT5kZXYsIE5VTEwpOwotCS8qIHVucmVnaXN0ZXIgc3ViZGV2cyAqLworCXY0bDJfZGV2aWNlX2Rpc2Nvbm5lY3QodjRsMl9kZXYpOworCisJLyogVW5yZWdpc3RlciBzdWJkZXZzICovCiAJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHNkLCBuZXh0LCAmdjRsMl9kZXYtPnN1YmRldnMsIGxpc3QpCiAJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHNkKTsKLQotCXY0bDJfZGV2LT5kZXYgPSBOVUxMOwogfQogRVhQT1JUX1NZTUJPTF9HUEwodjRsMl9kZXZpY2VfdW5yZWdpc3Rlcik7CiAKLWludCB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYoc3RydWN0IHY0bDJfZGV2aWNlICpkZXYsIHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCitpbnQgdjRsMl9kZXZpY2VfcmVnaXN0ZXJfc3ViZGV2KHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYsCisJCQkJCQlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQogewogCS8qIENoZWNrIGZvciB2YWxpZCBpbnB1dCAqLwotCWlmIChkZXYgPT0gTlVMTCB8fCBzZCA9PSBOVUxMIHx8ICFzZC0+bmFtZVswXSkKKwlpZiAodjRsMl9kZXYgPT0gTlVMTCB8fCBzZCA9PSBOVUxMIHx8ICFzZC0+bmFtZVswXSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAJLyogV2FybiBpZiB3ZSBhcHBhcmVudGx5IHJlLXJlZ2lzdGVyIGEgc3ViZGV2ICovCi0JV0FSTl9PTihzZC0+ZGV2ICE9IE5VTEwpOworCVdBUk5fT04oc2QtPnY0bDJfZGV2ICE9IE5VTEwpOwogCWlmICghdHJ5X21vZHVsZV9nZXQoc2QtPm93bmVyKSkKIAkJcmV0dXJuIC1FTk9ERVY7Ci0Jc2QtPmRldiA9IGRldjsKLQlzcGluX2xvY2soJmRldi0+bG9jayk7Ci0JbGlzdF9hZGRfdGFpbCgmc2QtPmxpc3QsICZkZXYtPnN1YmRldnMpOwotCXNwaW5fdW5sb2NrKCZkZXYtPmxvY2spOworCXNkLT52NGwyX2RldiA9IHY0bDJfZGV2OworCXNwaW5fbG9jaygmdjRsMl9kZXYtPmxvY2spOworCWxpc3RfYWRkX3RhaWwoJnNkLT5saXN0LCAmdjRsMl9kZXYtPnN1YmRldnMpOworCXNwaW5fdW5sb2NrKCZ2NGwyX2Rldi0+bG9jayk7CiAJcmV0dXJuIDA7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYpOwpAQCAtNzUsMTIgKzkzLDEyIEBACiB2b2lkIHY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpCiB7CiAJLyogcmV0dXJuIGlmIGl0IGlzbid0IHJlZ2lzdGVyZWQgKi8KLQlpZiAoc2QgPT0gTlVMTCB8fCBzZC0+ZGV2ID09IE5VTEwpCisJaWYgKHNkID09IE5VTEwgfHwgc2QtPnY0bDJfZGV2ID09IE5VTEwpCiAJCXJldHVybjsKLQlzcGluX2xvY2soJnNkLT5kZXYtPmxvY2spOworCXNwaW5fbG9jaygmc2QtPnY0bDJfZGV2LT5sb2NrKTsKIAlsaXN0X2RlbCgmc2QtPmxpc3QpOwotCXNwaW5fdW5sb2NrKCZzZC0+ZGV2LT5sb2NrKTsKLQlzZC0+ZGV2ID0gTlVMTDsKKwlzcGluX3VubG9jaygmc2QtPnY0bDJfZGV2LT5sb2NrKTsKKwlzZC0+djRsMl9kZXYgPSBOVUxMOwogCW1vZHVsZV9wdXQoc2QtPm93bmVyKTsKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKHY0bDJfZGV2aWNlX3VucmVnaXN0ZXJfc3ViZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1pb2N0bC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWlvY3RsLmMKaW5kZXggNTJkNjg3Yi4uZjQxYzZmNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWlvY3RsLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLWlvY3RsLmMKQEAgLTE3LDYgKzE3LDcgQEAKICNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4KIAogI2RlZmluZSBfX09MRF9WSURJT0NfIC8qIFRvIGFsbG93IGZpeGluZyBvbGQgY2FsbHMgKi8KKyNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogCiAjaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDEKQEAgLTI0LDcgKzI1LDcgQEAKICNlbmRpZgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWNoaXAtaWRlbnQuaD4KIAogI2RlZmluZSBkYmdhcmcoY21kLCBmbXQsIGFyZy4uLikgXAogCQlkbyB7CQkJCQkJCVwKQEAgLTEwMCwyNSArMTAxLDI3IEBACiB9CiBFWFBPUlRfU1lNQk9MKHY0bDJfbm9ybV90b19uYW1lKTsKIAorLyogUmV0dXJucyBmcmFtZSBwZXJpb2QgZm9yIHRoZSBnaXZlbiBzdGFuZGFyZCAqLwordm9pZCB2NGwyX3ZpZGVvX3N0ZF9mcmFtZV9wZXJpb2QoaW50IGlkLCBzdHJ1Y3QgdjRsMl9mcmFjdCAqZnJhbWVwZXJpb2QpCit7CisJaWYgKGlkICYgVjRMMl9TVERfNTI1XzYwKSB7CisJCWZyYW1lcGVyaW9kLT5udW1lcmF0b3IgPSAxMDAxOworCQlmcmFtZXBlcmlvZC0+ZGVub21pbmF0b3IgPSAzMDAwMDsKKwl9IGVsc2UgeworCQlmcmFtZXBlcmlvZC0+bnVtZXJhdG9yID0gMTsKKwkJZnJhbWVwZXJpb2QtPmRlbm9taW5hdG9yID0gMjU7CisJfQorfQorRVhQT1JUX1NZTUJPTCh2NGwyX3ZpZGVvX3N0ZF9mcmFtZV9wZXJpb2QpOworCiAvKiBGaWxsIGluIHRoZSBmaWVsZHMgb2YgYSB2NGwyX3N0YW5kYXJkIHN0cnVjdHVyZSBhY2NvcmRpbmcgdG8gdGhlCiAgICAnaWQnIGFuZCAndHJhbnNtaXNzaW9uJyBwYXJhbWV0ZXJzLiAgUmV0dXJucyBuZWdhdGl2ZSBvbiBlcnJvci4gICovCiBpbnQgdjRsMl92aWRlb19zdGRfY29uc3RydWN0KHN0cnVjdCB2NGwyX3N0YW5kYXJkICp2cywKIAkJCSAgICAgaW50IGlkLCBjb25zdCBjaGFyICpuYW1lKQogewotCXUzMiBpbmRleCA9IHZzLT5pbmRleDsKLQotCW1lbXNldCh2cywgMCwgc2l6ZW9mKHN0cnVjdCB2NGwyX3N0YW5kYXJkKSk7Ci0JdnMtPmluZGV4ID0gaW5kZXg7Ci0JdnMtPmlkICAgID0gaWQ7Ci0JaWYgKGlkICYgVjRMMl9TVERfNTI1XzYwKSB7Ci0JCXZzLT5mcmFtZXBlcmlvZC5udW1lcmF0b3IgPSAxMDAxOwotCQl2cy0+ZnJhbWVwZXJpb2QuZGVub21pbmF0b3IgPSAzMDAwMDsKLQkJdnMtPmZyYW1lbGluZXMgPSA1MjU7Ci0JfSBlbHNlIHsKLQkJdnMtPmZyYW1lcGVyaW9kLm51bWVyYXRvciA9IDE7Ci0JCXZzLT5mcmFtZXBlcmlvZC5kZW5vbWluYXRvciA9IDI1OwotCQl2cy0+ZnJhbWVsaW5lcyA9IDYyNTsKLQl9CisJdnMtPmlkID0gaWQ7CisJdjRsMl92aWRlb19zdGRfZnJhbWVfcGVyaW9kKGlkLCAmdnMtPmZyYW1lcGVyaW9kKTsKKwl2cy0+ZnJhbWVsaW5lcyA9IChpZCAmIFY0TDJfU1REXzUyNV82MCkgPyA1MjUgOiA2MjU7CiAJc3RybGNweSh2cy0+bmFtZSwgbmFtZSwgc2l6ZW9mKHZzLT5uYW1lKSk7CiAJcmV0dXJuIDA7CiB9CkBAIC0yNzMsMTkgKzI3Niw2IEBACiAjZGVmaW5lIFY0TDJfSU9DVExTIEFSUkFZX1NJWkUodjRsMl9pb2N0bHMpCiAKIHN0YXRpYyBjb25zdCBjaGFyICp2NGwyX2ludF9pb2N0bHNbXSA9IHsKLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLQlbX0lPQ19OUihERUNPREVSX0dFVF9DQVBBQklMSVRJRVMpXSAgICA9ICJERUNPREVSX0dFVF9DQVBBQklMSVRJRVMiLAotCVtfSU9DX05SKERFQ09ERVJfR0VUX1NUQVRVUyldICAgICAgICAgID0gIkRFQ09ERVJfR0VUX1NUQVRVUyIsCi0JW19JT0NfTlIoREVDT0RFUl9TRVRfTk9STSldICAgICAgICAgICAgPSAiREVDT0RFUl9TRVRfTk9STSIsCi0JW19JT0NfTlIoREVDT0RFUl9TRVRfSU5QVVQpXSAgICAgICAgICAgPSAiREVDT0RFUl9TRVRfSU5QVVQiLAotCVtfSU9DX05SKERFQ09ERVJfU0VUX09VVFBVVCldICAgICAgICAgID0gIkRFQ09ERVJfU0VUX09VVFBVVCIsCi0JW19JT0NfTlIoREVDT0RFUl9FTkFCTEVfT1VUUFVUKV0gICAgICAgPSAiREVDT0RFUl9FTkFCTEVfT1VUUFVUIiwKLQlbX0lPQ19OUihERUNPREVSX1NFVF9QSUNUVVJFKV0gICAgICAgICA9ICJERUNPREVSX1NFVF9QSUNUVVJFIiwKLQlbX0lPQ19OUihERUNPREVSX1NFVF9HUElPKV0gICAgICAgICAgICA9ICJERUNPREVSX1NFVF9HUElPIiwKLQlbX0lPQ19OUihERUNPREVSX0lOSVQpXSAgICAgICAgICAgICAgICA9ICJERUNPREVSX0lOSVQiLAotCVtfSU9DX05SKERFQ09ERVJfU0VUX1ZCSV9CWVBBU1MpXSAgICAgID0gIkRFQ09ERVJfU0VUX1ZCSV9CWVBBU1MiLAotCVtfSU9DX05SKERFQ09ERVJfRFVNUCldICAgICAgICAgICAgICAgID0gIkRFQ09ERVJfRFVNUCIsCi0jZW5kaWYKIAlbX0lPQ19OUihBVURDX1NFVF9SQURJTyldICAgICAgICAgICAgICA9ICJBVURDX1NFVF9SQURJTyIsCiAKIAlbX0lPQ19OUihUVU5FUl9TRVRfVFlQRV9BRERSKV0gICAgICAgICA9ICJUVU5FUl9TRVRfVFlQRV9BRERSIiwKQEAgLTY1NCw4ICs2NDQsNiBAQAogCWlmIChjbWQgPT0gVklESU9DR01CVUYpIHsKIAkJc3RydWN0IHZpZGVvX21idWYgKnAgPSBhcmc7CiAKLQkJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOwotCiAJCWlmICghb3BzLT52aWRpb2NnbWJ1ZikKIAkJCXJldHVybiByZXQ7CiAJCXJldCA9IG9wcy0+dmlkaW9jZ21idWYoZmlsZSwgZmgsIHApOwpAQCAtNjgyLDcgKzY3MCw2IEBACiAJY2FzZSBWSURJT0NfUVVFUllDQVA6CiAJewogCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXAgPSAoc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqKWFyZzsKLQkJbWVtc2V0KGNhcCwgMCwgc2l6ZW9mKCpjYXApKTsKIAogCQlpZiAoIW9wcy0+dmlkaW9jX3F1ZXJ5Y2FwKQogCQkJYnJlYWs7CkBAIC03MjUsMTYgKzcxMiw4IEBACiAJY2FzZSBWSURJT0NfRU5VTV9GTVQ6CiAJewogCQlzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmID0gYXJnOwotCQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZTsKLQkJdW5zaWduZWQgaW50IGluZGV4OwogCi0JCWluZGV4ID0gZi0+aW5kZXg7Ci0JCXR5cGUgID0gZi0+dHlwZTsKLQkJbWVtc2V0KGYsIDAsIHNpemVvZigqZikpOwotCQlmLT5pbmRleCA9IGluZGV4OwotCQlmLT50eXBlICA9IHR5cGU7Ci0KLQkJc3dpdGNoICh0eXBlKSB7CisJCXN3aXRjaCAoZi0+dHlwZSkgewogCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKIAkJCWlmIChvcHMtPnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwKQogCQkJCXJldCA9IG9wcy0+dmlkaW9jX2VudW1fZm10X3ZpZF9jYXAoZmlsZSwgZmgsIGYpOwpAQCAtNzcxLDggKzc1MCw2IEBACiAJewogCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYgPSAoc3RydWN0IHY0bDJfZm9ybWF0ICopYXJnOwogCi0JCW1lbXNldChmLT5mbXQucmF3X2RhdGEsIDAsIHNpemVvZihmLT5mbXQucmF3X2RhdGEpKTsKLQogCQkvKiBGSVhNRTogU2hvdWxkIGJlIG9uZSBkdW1wIHBlciB0eXBlICovCiAJCWRiZ2FyZyhjbWQsICJ0eXBlPSVzXG4iLCBwcnRfbmFtZXMoZi0+dHlwZSwgdjRsMl90eXBlX25hbWVzKSk7CiAKQEAgLTEwODgsNyArMTA2NSw2IEBACiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQl2NGwyX3ZpZGVvX3N0ZF9jb25zdHJ1Y3QocCwgY3Vycl9pZCwgZGVzY3IpOwotCQlwLT5pbmRleCA9IGluZGV4OwogCiAJCWRiZ2FyZyhjbWQsICJpbmRleD0lZCwgaWQ9MHglTHgsIG5hbWU9JXMsIGZwcz0lZC8lZCwgIgogCQkJCSJmcmFtZWxpbmVzPSVkXG4iLCBwLT5pbmRleCwKQEAgLTExNTMsMTIgKzExMjksOSBAQAogCWNhc2UgVklESU9DX0VOVU1JTlBVVDoKIAl7CiAJCXN0cnVjdCB2NGwyX2lucHV0ICpwID0gYXJnOwotCQlpbnQgaSA9IHAtPmluZGV4OwogCiAJCWlmICghb3BzLT52aWRpb2NfZW51bV9pbnB1dCkKIAkJCWJyZWFrOwotCQltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7Ci0JCXAtPmluZGV4ID0gaTsKIAogCQlyZXQgPSBvcHMtPnZpZGlvY19lbnVtX2lucHV0KGZpbGUsIGZoLCBwKTsKIAkJaWYgKCFyZXQpCkBAIC0xMTk3LDEyICsxMTcwLDkgQEAKIAljYXNlIFZJRElPQ19FTlVNT1VUUFVUOgogCXsKIAkJc3RydWN0IHY0bDJfb3V0cHV0ICpwID0gYXJnOwotCQlpbnQgaSA9IHAtPmluZGV4OwogCiAJCWlmICghb3BzLT52aWRpb2NfZW51bV9vdXRwdXQpCiAJCQlicmVhazsKLQkJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOwotCQlwLT5pbmRleCA9IGk7CiAKIAkJcmV0ID0gb3BzLT52aWRpb2NfZW51bV9vdXRwdXQoZmlsZSwgZmgsIHApOwogCQlpZiAoIXJldCkKQEAgLTEzNzgsMTMgKzEzNDgsMTAgQEAKIAljYXNlIFZJRElPQ19HX0FVRElPOgogCXsKIAkJc3RydWN0IHY0bDJfYXVkaW8gKnAgPSBhcmc7Ci0JCV9fdTMyIGluZGV4ID0gcC0+aW5kZXg7CiAKIAkJaWYgKCFvcHMtPnZpZGlvY19nX2F1ZGlvKQogCQkJYnJlYWs7CiAKLQkJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOwotCQlwLT5pbmRleCA9IGluZGV4OwogCQlyZXQgPSBvcHMtPnZpZGlvY19nX2F1ZGlvKGZpbGUsIGZoLCBwKTsKIAkJaWYgKCFyZXQpCiAJCQlkYmdhcmcoY21kLCAiaW5kZXg9JWQsIG5hbWU9JXMsIGNhcGFiaWxpdHk9MHgleCwgIgpAQCAtMTQyNiw3ICsxMzkzLDcgQEAKIAogCQlpZiAoIW9wcy0+dmlkaW9jX2dfYXVkb3V0KQogCQkJYnJlYWs7Ci0JCWRiZ2FyZyhjbWQsICJFbnVtIGZvciBpbmRleD0lZFxuIiwgcC0+aW5kZXgpOworCiAJCXJldCA9IG9wcy0+dmlkaW9jX2dfYXVkb3V0KGZpbGUsIGZoLCBwKTsKIAkJaWYgKCFyZXQpCiAJCQlkYmdhcmcyKCJpbmRleD0lZCwgbmFtZT0lcywgY2FwYWJpbGl0eT0lZCwgIgpAQCAtMTQ3OSwxNSArMTQ0NiwxMCBAQAogCWNhc2UgVklESU9DX0dfQ1JPUDoKIAl7CiAJCXN0cnVjdCB2NGwyX2Nyb3AgKnAgPSBhcmc7Ci0JCV9fdTMyIHR5cGU7CiAKIAkJaWYgKCFvcHMtPnZpZGlvY19nX2Nyb3ApCiAJCQlicmVhazsKIAotCQl0eXBlID0gcC0+dHlwZTsKLQkJbWVtc2V0KHAsIDAsIHNpemVvZigqcCkpOwotCQlwLT50eXBlID0gdHlwZTsKLQogCQlkYmdhcmcoY21kLCAidHlwZT0lc1xuIiwgcHJ0X25hbWVzKHAtPnR5cGUsIHY0bDJfdHlwZV9uYW1lcykpOwogCQlyZXQgPSBvcHMtPnZpZGlvY19nX2Nyb3AoZmlsZSwgZmgsIHApOwogCQlpZiAoIXJldCkKQEAgLTE1MDgsMTYgKzE0NzAsMTEgQEAKIAljYXNlIFZJRElPQ19DUk9QQ0FQOgogCXsKIAkJc3RydWN0IHY0bDJfY3JvcGNhcCAqcCA9IGFyZzsKLQkJX191MzIgdHlwZTsKIAogCQkvKkZJWE1FOiBTaG91bGQgYWxzbyBzaG93IHY0bDJfZnJhY3QgcGl4ZWxhc3BlY3QgKi8KIAkJaWYgKCFvcHMtPnZpZGlvY19jcm9wY2FwKQogCQkJYnJlYWs7CiAKLQkJdHlwZSA9IHAtPnR5cGU7Ci0JCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKLQkJcC0+dHlwZSA9IHR5cGU7Ci0KIAkJZGJnYXJnKGNtZCwgInR5cGU9JXNcbiIsIHBydF9uYW1lcyhwLT50eXBlLCB2NGwyX3R5cGVfbmFtZXMpKTsKIAkJcmV0ID0gb3BzLT52aWRpb2NfY3JvcGNhcChmaWxlLCBmaCwgcCk7CiAJCWlmICghcmV0KSB7CkBAIC0xNTMzLDggKzE0OTAsNiBAQAogCQlpZiAoIW9wcy0+dmlkaW9jX2dfanBlZ2NvbXApCiAJCQlicmVhazsKIAotCQltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7Ci0KIAkJcmV0ID0gb3BzLT52aWRpb2NfZ19qcGVnY29tcChmaWxlLCBmaCwgcCk7CiAJCWlmICghcmV0KQogCQkJZGJnYXJnKGNtZCwgInF1YWxpdHk9JWQsIEFQUG49JWQsICIKQEAgLTE1NzUsNyArMTUzMCw2IEBACiAKIAkJaWYgKCFvcHMtPnZpZGlvY19lbmNvZGVyX2NtZCkKIAkJCWJyZWFrOwotCQltZW1zZXQoJnAtPnJhdywgMCwgc2l6ZW9mKHAtPnJhdykpOwogCQlyZXQgPSBvcHMtPnZpZGlvY19lbmNvZGVyX2NtZChmaWxlLCBmaCwgcCk7CiAJCWlmICghcmV0KQogCQkJZGJnYXJnKGNtZCwgImNtZD0lZCwgZmxhZ3M9JXhcbiIsIHAtPmNtZCwgcC0+ZmxhZ3MpOwpAQCAtMTU4Nyw3ICsxNTQxLDYgQEAKIAogCQlpZiAoIW9wcy0+dmlkaW9jX3RyeV9lbmNvZGVyX2NtZCkKIAkJCWJyZWFrOwotCQltZW1zZXQoJnAtPnJhdywgMCwgc2l6ZW9mKHAtPnJhdykpOwogCQlyZXQgPSBvcHMtPnZpZGlvY190cnlfZW5jb2Rlcl9jbWQoZmlsZSwgZmgsIHApOwogCQlpZiAoIXJldCkKIAkJCWRiZ2FyZyhjbWQsICJjbWQ9JWQsIGZsYWdzPSV4XG4iLCBwLT5jbWQsIHAtPmZsYWdzKTsKQEAgLTE1OTYsMjMgKzE1NDksMTggQEAKIAljYXNlIFZJRElPQ19HX1BBUk06CiAJewogCQlzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwID0gYXJnOwotCQlfX3UzMiB0eXBlID0gcC0+dHlwZTsKLQotCQltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7Ci0JCXAtPnR5cGUgPSB0eXBlOwogCiAJCWlmIChvcHMtPnZpZGlvY19nX3Bhcm0pIHsKKwkJCXJldCA9IGNoZWNrX2ZtdChvcHMsIHAtPnR5cGUpOworCQkJaWYgKHJldCkKKwkJCQlicmVhazsKIAkJCXJldCA9IG9wcy0+dmlkaW9jX2dfcGFybShmaWxlLCBmaCwgcCk7CiAJCX0gZWxzZSB7Ci0JCQlzdHJ1Y3QgdjRsMl9zdGFuZGFyZCBzOwotCiAJCQlpZiAocC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAKLQkJCXY0bDJfdmlkZW9fc3RkX2NvbnN0cnVjdCgmcywgdmZkLT5jdXJyZW50X25vcm0sCi0JCQkJCQkgdjRsMl9ub3JtX3RvX25hbWUodmZkLT5jdXJyZW50X25vcm0pKTsKLQotCQkJcC0+cGFybS5jYXB0dXJlLnRpbWVwZXJmcmFtZSA9IHMuZnJhbWVwZXJpb2Q7CisJCQl2NGwyX3ZpZGVvX3N0ZF9mcmFtZV9wZXJpb2QodmZkLT5jdXJyZW50X25vcm0sCisJCQkJCQkgICAgJnAtPnBhcm0uY2FwdHVyZS50aW1lcGVyZnJhbWUpOwogCQkJcmV0ID0gMDsKIAkJfQogCkBAIC0xNjI1LDYgKzE1NzMsMTAgQEAKIAogCQlpZiAoIW9wcy0+dmlkaW9jX3NfcGFybSkKIAkJCWJyZWFrOworCQlyZXQgPSBjaGVja19mbXQob3BzLCBwLT50eXBlKTsKKwkJaWYgKHJldCkKKwkJCWJyZWFrOworCiAJCWRiZ2FyZyhjbWQsICJ0eXBlPSVkXG4iLCBwLT50eXBlKTsKIAkJcmV0ID0gb3BzLT52aWRpb2Nfc19wYXJtKGZpbGUsIGZoLCBwKTsKIAkJYnJlYWs7CkBAIC0xNjMyLDE0ICsxNTg0LDEwIEBACiAJY2FzZSBWSURJT0NfR19UVU5FUjoKIAl7CiAJCXN0cnVjdCB2NGwyX3R1bmVyICpwID0gYXJnOwotCQlfX3UzMiBpbmRleCA9IHAtPmluZGV4OwogCiAJCWlmICghb3BzLT52aWRpb2NfZ190dW5lcikKIAkJCWJyZWFrOwogCi0JCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKLQkJcC0+aW5kZXggPSBpbmRleDsKLQogCQlyZXQgPSBvcHMtPnZpZGlvY19nX3R1bmVyKGZpbGUsIGZoLCBwKTsKIAkJaWYgKCFyZXQpCiAJCQlkYmdhcmcoY21kLCAiaW5kZXg9JWQsIG5hbWU9JXMsIHR5cGU9JWQsICIKQEAgLTE2NzYsOCArMTYyNCw2IEBACiAJCWlmICghb3BzLT52aWRpb2NfZ19mcmVxdWVuY3kpCiAJCQlicmVhazsKIAotCQltZW1zZXQocC0+cmVzZXJ2ZWQsIDAsIHNpemVvZihwLT5yZXNlcnZlZCkpOwotCiAJCXJldCA9IG9wcy0+dmlkaW9jX2dfZnJlcXVlbmN5KGZpbGUsIGZoLCBwKTsKIAkJaWYgKCFyZXQpCiAJCQlkYmdhcmcoY21kLCAidHVuZXI9JWQsIHR5cGU9JWQsIGZyZXF1ZW5jeT0lZFxuIiwKQEAgLTE2OTgsMTIgKzE2NDQsMTMgQEAKIAljYXNlIFZJRElPQ19HX1NMSUNFRF9WQklfQ0FQOgogCXsKIAkJc3RydWN0IHY0bDJfc2xpY2VkX3ZiaV9jYXAgKnAgPSBhcmc7Ci0JCV9fdTMyIHR5cGUgPSBwLT50eXBlOwogCiAJCWlmICghb3BzLT52aWRpb2NfZ19zbGljZWRfdmJpX2NhcCkKIAkJCWJyZWFrOwotCQltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7Ci0JCXAtPnR5cGUgPSB0eXBlOworCisJCS8qIENsZWFyIHVwIHRvIHR5cGUsIGV2ZXJ5dGhpbmcgYWZ0ZXIgdHlwZSBpcyB6ZXJvZCBhbHJlYWR5ICovCisJCW1lbXNldChwLCAwLCBvZmZzZXRvZihzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2NhcCwgdHlwZSkpOworCiAJCWRiZ2FyZyhjbWQsICJ0eXBlPSVzXG4iLCBwcnRfbmFtZXMocC0+dHlwZSwgdjRsMl90eXBlX25hbWVzKSk7CiAJCXJldCA9IG9wcy0+dmlkaW9jX2dfc2xpY2VkX3ZiaV9jYXAoZmlsZSwgZmgsIHApOwogCQlpZiAoIXJldCkKQEAgLTE3NDUsMTYgKzE2OTIsMTMgQEAKIAogCQlpZiAoIW9wcy0+dmlkaW9jX2dfY2hpcF9pZGVudCkKIAkJCWJyZWFrOworCQlwLT5pZGVudCA9IFY0TDJfSURFTlRfTk9ORTsKKwkJcC0+cmV2aXNpb24gPSAwOwogCQlyZXQgPSBvcHMtPnZpZGlvY19nX2NoaXBfaWRlbnQoZmlsZSwgZmgsIHApOwogCQlpZiAoIXJldCkKIAkJCWRiZ2FyZyhjbWQsICJjaGlwX2lkZW50PSV1LCByZXZpc2lvbj0weCV4XG4iLCBwLT5pZGVudCwgcC0+cmV2aXNpb24pOwogCQlicmVhazsKIAl9Ci0JY2FzZSBWSURJT0NfR19DSElQX0lERU5UX09MRDoKLQkJcHJpbnRrKEtFUk5fRVJSICJWSURJT0NfR19DSElQX0lERU5UIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYW5kIHdpbGwgZGlzYXBwZWFyIGluIDIuNi4zMC5cbiIpOwotCQlwcmludGsoS0VSTl9FUlIgIkl0IGlzIGEgZGVidWdnaW5nIGlvY3RsIGFuZCBtdXN0IG5vdCBiZSB1c2VkIGluIGFwcGxpY2F0aW9ucyFcbiIpOwotCQlyZXR1cm4gLUVJTlZBTDsKLQogCWNhc2UgVklESU9DX1NfSFdfRlJFUV9TRUVLOgogCXsKIAkJc3RydWN0IHY0bDJfaHdfZnJlcV9zZWVrICpwID0gYXJnOwpAQCAtMTc3NCw4ICsxNzE4LDYgQEAKIAkJaWYgKCFvcHMtPnZpZGlvY19lbnVtX2ZyYW1lc2l6ZXMpCiAJCQlicmVhazsKIAotCQltZW1zZXQocCwgMCwgc2l6ZW9mKCpwKSk7Ci0KIAkJcmV0ID0gb3BzLT52aWRpb2NfZW51bV9mcmFtZXNpemVzKGZpbGUsIGZoLCBwKTsKIAkJZGJnYXJnKGNtZCwKIAkJCSJpbmRleD0lZCwgcGl4ZWxmb3JtYXQ9JWQsIHR5cGU9JWQgIiwKQEAgLTE4MDcsOCArMTc0OSw2IEBACiAJCWlmICghb3BzLT52aWRpb2NfZW51bV9mcmFtZWludGVydmFscykKIAkJCWJyZWFrOwogCi0JCW1lbXNldChwLCAwLCBzaXplb2YoKnApKTsKLQogCQlyZXQgPSBvcHMtPnZpZGlvY19lbnVtX2ZyYW1laW50ZXJ2YWxzKGZpbGUsIGZoLCBwKTsKIAkJZGJnYXJnKGNtZCwKIAkJCSJpbmRleD0lZCwgcGl4ZWxmb3JtYXQ9JWQsIHdpZHRoPSVkLCBoZWlnaHQ9JWQsIHR5cGU9JWQgIiwKQEAgLTE4NTcsNiArMTc5Nyw0NSBAQAogCXJldHVybiByZXQ7CiB9CiAKKy8qIEluIHNvbWUgY2FzZXMsIG9ubHkgYSBmZXcgZmllbGRzIGFyZSB1c2VkIGFzIGlucHV0LCBpLmUuIHdoZW4gdGhlIGFwcCBzZXRzCisgKiAiaW5kZXgiIGFuZCB0aGVuIHRoZSBkcml2ZXIgZmlsbHMgaW4gdGhlIHJlc3Qgb2YgdGhlIHN0cnVjdHVyZSBmb3IgdGhlIHRoaW5nCisgKiB3aXRoIHRoYXQgaW5kZXguICBXZSBvbmx5IG5lZWQgdG8gY29weSB1cCB0aGUgZmlyc3Qgbm9uLWlucHV0IGZpZWxkLiAgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb25nIGNtZF9pbnB1dF9zaXplKHVuc2lnbmVkIGludCBjbWQpCit7CisJLyogU2l6ZSBvZiBzdHJ1Y3R1cmUgdXAgdG8gYW5kIGluY2x1ZGluZyAnZmllbGQnICovCisjZGVmaW5lIENNRElOU0laRShjbWQsIHR5cGUsIGZpZWxkKSAJCQkJXAorCWNhc2UgVklESU9DXyMjY21kOiAJCQkJCVwKKwkJcmV0dXJuIG9mZnNldG9mKHN0cnVjdCB2NGwyXyMjdHlwZSwgZmllbGQpICsgCVwKKwkJCXNpemVvZigoKHN0cnVjdCB2NGwyXyMjdHlwZSAqKTApLT5maWVsZCk7CisKKwlzd2l0Y2ggKGNtZCkgeworCQlDTURJTlNJWkUoRU5VTV9GTVQsCQlmbXRkZXNjLAl0eXBlKTsKKwkJQ01ESU5TSVpFKEdfRk1ULAkJZm9ybWF0LAkJdHlwZSk7CisJCUNNRElOU0laRShRVUVSWUJVRiwJCWJ1ZmZlciwJCXR5cGUpOworCQlDTURJTlNJWkUoR19QQVJNLAkJc3RyZWFtcGFybSwJdHlwZSk7CisJCUNNRElOU0laRShFTlVNU1RELAkJc3RhbmRhcmQsCWluZGV4KTsKKwkJQ01ESU5TSVpFKEVOVU1JTlBVVCwJCWlucHV0LAkJaW5kZXgpOworCQlDTURJTlNJWkUoR19DVFJMLAkJY29udHJvbCwJaWQpOworCQlDTURJTlNJWkUoR19UVU5FUiwJCXR1bmVyLAkJaW5kZXgpOworCQlDTURJTlNJWkUoUVVFUllDVFJMLAkJcXVlcnljdHJsLAlpZCk7CisJCUNNRElOU0laRShRVUVSWU1FTlUsCQlxdWVyeW1lbnUsCWluZGV4KTsKKwkJQ01ESU5TSVpFKEVOVU1PVVRQVVQsCQlvdXRwdXQsCQlpbmRleCk7CisJCUNNRElOU0laRShHX01PRFVMQVRPUiwJCW1vZHVsYXRvciwJaW5kZXgpOworCQlDTURJTlNJWkUoR19GUkVRVUVOQ1ksCQlmcmVxdWVuY3ksCXR1bmVyKTsKKwkJQ01ESU5TSVpFKENST1BDQVAsCQljcm9wY2FwLAl0eXBlKTsKKwkJQ01ESU5TSVpFKEdfQ1JPUCwJCWNyb3AsCQl0eXBlKTsKKwkJQ01ESU5TSVpFKEVOVU1BVURJTywJCWF1ZGlvLCAJCWluZGV4KTsKKwkJQ01ESU5TSVpFKEVOVU1BVURPVVQsCQlhdWRpb291dCwgCWluZGV4KTsKKwkJQ01ESU5TSVpFKEVOQ09ERVJfQ01ELAkJZW5jb2Rlcl9jbWQsCWZsYWdzKTsKKwkJQ01ESU5TSVpFKFRSWV9FTkNPREVSX0NNRCwJZW5jb2Rlcl9jbWQsCWZsYWdzKTsKKwkJQ01ESU5TSVpFKEdfU0xJQ0VEX1ZCSV9DQVAsCXNsaWNlZF92YmlfY2FwLAl0eXBlKTsKKwkJQ01ESU5TSVpFKEVOVU1fRlJBTUVTSVpFUywJZnJtc2l6ZWVudW0sCXBpeGVsX2Zvcm1hdCk7CisJCUNNRElOU0laRShFTlVNX0ZSQU1FSU5URVJWQUxTLAlmcm1pdmFsZW51bSwJaGVpZ2h0KTsKKwlkZWZhdWx0OgorCQlyZXR1cm4gX0lPQ19TSVpFKGNtZCk7CisJfQorfQorCiBsb25nIHZpZGVvX2lvY3RsMihzdHJ1Y3QgZmlsZSAqZmlsZSwKIAkgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5zaWduZWQgbG9uZyBhcmcpCiB7CkBAIC0xODc1LDEzICsxODU0LDcgQEAKIAkJICAgICAgIGNtZCA9PSBWSURJT0NfVFJZX0VYVF9DVFJMUyk7CiAKIAkvKiAgQ29weSBhcmd1bWVudHMgaW50byB0ZW1wIGtlcm5lbCBidWZmZXIgICovCi0Jc3dpdGNoIChfSU9DX0RJUihjbWQpKSB7Ci0JY2FzZSBfSU9DX05PTkU6Ci0JCXBhcmcgPSBOVUxMOwotCQlicmVhazsKLQljYXNlIF9JT0NfUkVBRDoKLQljYXNlIF9JT0NfV1JJVEU6Ci0JY2FzZSAoX0lPQ19XUklURSB8IF9JT0NfUkVBRCk6CisJaWYgKF9JT0NfRElSKGNtZCkgIT0gX0lPQ19OT05FKSB7CiAJCWlmIChfSU9DX1NJWkUoY21kKSA8PSBzaXplb2Yoc2J1ZikpIHsKIAkJCXBhcmcgPSBzYnVmOwogCQl9IGVsc2UgewpAQCAtMTg5MywxMCArMTg2NiwxOSBAQAogCQl9CiAKIAkJZXJyID0gLUVGQVVMVDsKLQkJaWYgKF9JT0NfRElSKGNtZCkgJiBfSU9DX1dSSVRFKQotCQkJaWYgKGNvcHlfZnJvbV91c2VyKHBhcmcsICh2b2lkIF9fdXNlciAqKWFyZywgX0lPQ19TSVpFKGNtZCkpKQorCQlpZiAoX0lPQ19ESVIoY21kKSAmIF9JT0NfV1JJVEUpIHsKKwkJCXVuc2lnbmVkIGxvbmcgbiA9IGNtZF9pbnB1dF9zaXplKGNtZCk7CisKKwkJCWlmIChjb3B5X2Zyb21fdXNlcihwYXJnLCAodm9pZCBfX3VzZXIgKilhcmcsIG4pKQogCQkJCWdvdG8gb3V0OwotCQlicmVhazsKKworCQkJLyogemVybyBvdXQgYW55dGhpbmcgd2UgZG9uJ3QgY29weSBmcm9tIHVzZXJzcGFjZSAqLworCQkJaWYgKG4gPCBfSU9DX1NJWkUoY21kKSkKKwkJCQltZW1zZXQoKHU4ICopcGFyZyArIG4sIDAsIF9JT0NfU0laRShjbWQpIC0gbik7CisJCX0gZWxzZSB7CisJCQkvKiByZWFkLW9ubHkgaW9jdGwgKi8KKwkJCW1lbXNldChwYXJnLCAwLCBfSU9DX1NJWkUoY21kKSk7CisJCX0KIAl9CiAKIAlpZiAoaXNfZXh0X2N0cmwpIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1zdWJkZXYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdjRsMi1zdWJkZXYuYwppbmRleCAyMTIwODgwLi5kYzg4MTY3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Y0bDItc3ViZGV2LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92NGwyLXN1YmRldi5jCkBAIC0zMyw2ICszMywxMiBAQAogCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgZ19jdHJsLCBhcmcpOwogCWNhc2UgVklESU9DX1NfQ1RSTDoKIAkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIGNvcmUsIHNfY3RybCwgYXJnKTsKKwljYXNlIFZJRElPQ19HX0VYVF9DVFJMUzoKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIGNvcmUsIGdfZXh0X2N0cmxzLCBhcmcpOworCWNhc2UgVklESU9DX1NfRVhUX0NUUkxTOgorCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgc19leHRfY3RybHMsIGFyZyk7CisJY2FzZSBWSURJT0NfVFJZX0VYVF9DVFJMUzoKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIGNvcmUsIHRyeV9leHRfY3RybHMsIGFyZyk7CiAJY2FzZSBWSURJT0NfUVVFUllNRU5VOgogCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgcXVlcnltZW51LCBhcmcpOwogCWNhc2UgVklESU9DX0xPR19TVEFUVVM6CkBAIC05MiwxNiArOTgsMjggQEAKIAkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBnX3ZiaV9kYXRhLCBhcmcpOwogCWNhc2UgVklESU9DX0dfU0xJQ0VEX1ZCSV9DQVA6CiAJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgZ19zbGljZWRfdmJpX2NhcCwgYXJnKTsKKwljYXNlIFZJRElPQ19FTlVNX0ZNVDoKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBlbnVtX2ZtdCwgYXJnKTsKKwljYXNlIFZJRElPQ19UUllfRk1UOgorCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHRyeV9mbXQsIGFyZyk7CiAJY2FzZSBWSURJT0NfU19GTVQ6CiAJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19mbXQsIGFyZyk7CiAJY2FzZSBWSURJT0NfR19GTVQ6CiAJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgZ19mbXQsIGFyZyk7CiAJY2FzZSBWSURJT0NfSU5UX1NfU1REX09VVFBVVDoKIAkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX3N0ZF9vdXRwdXQsICoodjRsMl9zdGRfaWQgKilhcmcpOworCWNhc2UgVklESU9DX1FVRVJZU1REOgorCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHF1ZXJ5c3RkLCBhcmcpOworCWNhc2UgVklESU9DX0lOVF9HX0lOUFVUX1NUQVRVUzoKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBnX2lucHV0X3N0YXR1cywgYXJnKTsKIAljYXNlIFZJRElPQ19TVFJFQU1PTjoKIAkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBzX3N0cmVhbSwgMSk7CiAJY2FzZSBWSURJT0NfU1RSRUFNT0ZGOgogCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgdmlkZW8sIHNfc3RyZWFtLCAwKTsKKwljYXNlIFZJRElPQ19TX1BBUk06CisJCXJldHVybiB2NGwyX3N1YmRldl9jYWxsKHNkLCB2aWRlbywgc19wYXJtLCBhcmcpOworCWNhc2UgVklESU9DX0dfUEFSTToKKwkJcmV0dXJuIHY0bDJfc3ViZGV2X2NhbGwoc2QsIHZpZGVvLCBnX3Bhcm0sIGFyZyk7CiAKIAlkZWZhdWx0OgogCQlyZXR1cm4gdjRsMl9zdWJkZXZfY2FsbChzZCwgY29yZSwgaW9jdGwsIGNtZCwgYXJnKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmlkZW9idWYtZG1hLWNvbnRpZy5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtY29udGlnLmMKaW5kZXggMzE5NDRiMS4uNjEwOWZiNSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtY29udGlnLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi1kbWEtY29udGlnLmMKQEAgLTQwMCw3ICs0MDAsNyBAQAogCSAgIFNvLCBpdCBzaG91bGQgZnJlZSBtZW1vcnkgb25seSBpZiB0aGUgbWVtb3J5IHdlcmUgYWxsb2NhdGVkIGZvcgogCSAgIHJlYWQoKSBvcGVyYXRpb24uCiAJICovCi0JaWYgKChidWYtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9VU0VSUFRSKSB8fCAhYnVmLT5iYWRkcikKKwlpZiAoKGJ1Zi0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX1VTRVJQVFIpIHx8IGJ1Zi0+YmFkZHIpCiAJCXJldHVybjsKIAogCWlmICghbWVtKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby92aWRlb2J1Zi12bWFsbG9jLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLXZtYWxsb2MuYwppbmRleCBiZTY1YTJmLi4zMGFlMzBmIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLXZtYWxsb2MuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpZGVvYnVmLXZtYWxsb2MuYwpAQCAtNDI1LDcgKzQyNSw3IEBACiAJICAgU28sIGl0IHNob3VsZCBmcmVlIG1lbW9yeSBvbmx5IGlmIHRoZSBtZW1vcnkgd2VyZSBhbGxvY2F0ZWQgZm9yCiAJICAgcmVhZCgpIG9wZXJhdGlvbi4KIAkgKi8KLQlpZiAoKGJ1Zi0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX1VTRVJQVFIpIHx8IChidWYtPmJhZGRyID09IDApKQorCWlmICgoYnVmLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfVVNFUlBUUikgfHwgYnVmLT5iYWRkcikKIAkJcmV0dXJuOwogCiAJaWYgKCFtZW0pCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3Zpbm8uYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jCmluZGV4IDg4YmY4NDUuLjhkYTRkZDEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdmluby5jCkBAIC04LDYgKzgsMTIgQEAKICAqCiAgKiBCYXNlZCBvbiB0aGUgcHJldmlvdXMgdmVyc2lvbiBvZiB0aGUgZHJpdmVyIGZvciAyLjQga2VybmVscyBieToKICAqIENvcHlyaWdodCAoQykgMjAwMyBMYWRpc2xhdiBNaWNobCA8bGFkaXNAbGludXgtbWlwcy5vcmc+CisgKgorICogdjRsMl9kZXZpY2UvdjRsMl9zdWJkZXYgY29udmVyc2lvbiBieToKKyAqIENvcHlyaWdodCAoQykgMjAwOSBIYW5zIFZlcmt1aWwgPGh2ZXJrdWlsQHhzNGFsbC5ubD4KKyAqCisgKiBOb3RlOiB0aGlzIGNvbnZlcnNpb24gaXMgdW50ZXN0ZWQhIFBsZWFzZSBjb250YWN0IHRoZSBsaW51eC1tZWRpYQorICogbWFpbGluZ2xpc3QgaWYgeW91IGNhbiB0ZXN0IHRoaXMsIHRvZ2V0aGVyIHdpdGggdGhlIHRlc3QgcmVzdWx0cy4KICAqLwogCiAvKgpAQCAtMzMsMTIgKzM5LDEwIEBACiAjaW5jbHVkZSA8bGludXgva21vZC5oPgogCiAjaW5jbHVkZSA8bGludXgvaTJjLmg+Ci0jaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tc2dpLmg+CiAKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItZGV2aWNlLmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1pb2N0bC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCiAjaW5jbHVkZSA8YXNtL3BhY2Nlc3MuaD4KQEAgLTEzOSwxMyArMTQzLDIzIEBACiAjZGVmaW5lIFZJTk9fREFUQV9OT1JNX1BBTAkJMQogI2RlZmluZSBWSU5PX0RBVEFfTk9STV9TRUNBTQkJMgogI2RlZmluZSBWSU5PX0RBVEFfTk9STV9EMQkJMwotLyogVGhlIGZvbGxvd2luZyBhcmUgc3BlY2lhbCBlbnRyaWVzIHRoYXQgY2FuIGJlIHVzZWQgdG8KLSAqIGF1dG9kZXRlY3QgdGhlIG5vcm0uICovCi0jZGVmaW5lIFZJTk9fREFUQV9OT1JNX0FVVE8JCTB4ZmUKLSNkZWZpbmUgVklOT19EQVRBX05PUk1fQVVUT19FWFQJCTB4ZmYKIAogI2RlZmluZSBWSU5PX0RBVEFfTk9STV9DT1VOVAkJNAogCisvKiBJMkMgY29udHJvbGxlciBmbGFncyAqLworI2RlZmluZSBTR0lfSTJDX0ZPUkNFX0lETEUJCSgwIDw8IDApCisjZGVmaW5lIFNHSV9JMkNfTk9UX0lETEUJCSgxIDw8IDApCisjZGVmaW5lIFNHSV9JMkNfV1JJVEUJCQkoMCA8PCAxKQorI2RlZmluZSBTR0lfSTJDX1JFQUQJCQkoMSA8PCAxKQorI2RlZmluZSBTR0lfSTJDX1JFTEVBU0VfQlVTCQkoMCA8PCAyKQorI2RlZmluZSBTR0lfSTJDX0hPTERfQlVTCQkoMSA8PCAyKQorI2RlZmluZSBTR0lfSTJDX1hGRVJfRE9ORQkJKDAgPDwgNCkKKyNkZWZpbmUgU0dJX0kyQ19YRkVSX0JVU1kJCSgxIDw8IDQpCisjZGVmaW5lIFNHSV9JMkNfQUNLCQkJKDAgPDwgNSkKKyNkZWZpbmUgU0dJX0kyQ19OQUNLCQkJKDEgPDwgNSkKKyNkZWZpbmUgU0dJX0kyQ19CVVNfT0sJCQkoMCA8PCA3KQorI2RlZmluZSBTR0lfSTJDX0JVU19FUlIJCQkoMSA8PCA3KQorCiAvKiBJbnRlcm5hbCBkYXRhIHN0cnVjdHVyZSBkZWZpbml0aW9ucyAqLwogCiBzdHJ1Y3Qgdmlub19pbnB1dCB7CkBAIC0yODksMjIgKzMwMywyMCBAQAogCXN0cnVjdCB2aW5vX2ludGVycnVwdF9kYXRhIGludF9kYXRhOwogCiAJLyogVjRMIHN1cHBvcnQgKi8KLQlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2NGxfZGV2aWNlOwotfTsKLQotc3RydWN0IHZpbm9fY2xpZW50IHsKLQkvKiB0aGUgY2hhbm5lbCB3aGljaCBvd25zIHRoaXMgY2xpZW50OgotCSAqIFZJTk9fTk9fQ0hBTk5FTCwgVklOT19DSEFOTkVMX0Egb3IgVklOT19DSEFOTkVMX0IgKi8KLQl1bnNpZ25lZCBpbnQgb3duZXI7Ci0Jc3RydWN0IGkyY19jbGllbnQgKmRyaXZlcjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZGV2OwogfTsKIAogc3RydWN0IHZpbm9fc2V0dGluZ3MgeworCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKIAlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzIGE7CiAJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyBiOwogCi0Jc3RydWN0IHZpbm9fY2xpZW50IGRlY29kZXI7Ci0Jc3RydWN0IHZpbm9fY2xpZW50IGNhbWVyYTsKKwkvKiB0aGUgY2hhbm5lbCB3aGljaCBvd25zIHRoaXMgY2xpZW50OgorCSAqIFZJTk9fTk9fQ0hBTk5FTCwgVklOT19DSEFOTkVMX0Egb3IgVklOT19DSEFOTkVMX0IgKi8KKwl1bnNpZ25lZCBpbnQgZGVjb2Rlcl9vd25lcjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKmRlY29kZXI7CisJdW5zaWduZWQgaW50IGNhbWVyYV9vd25lcjsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKmNhbWVyYTsKIAogCS8qIGEgbG9jayBmb3IgdmlubyByZWdpc3RlciBhY2Nlc3MgKi8KIAlzcGlubG9ja190IHZpbm9fbG9jazsKQEAgLTM0NCwxMSArMzU2LDE2IEBACiAKIHN0YXRpYyBzdHJ1Y3Qgdmlub19zZXR0aW5ncyAqdmlub19kcnZkYXRhOwogCisjZGVmaW5lIGNhbWVyYV9jYWxsKG8sIGYsIGFyZ3MuLi4pIFwKKwl2NGwyX3N1YmRldl9jYWxsKHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLCBvLCBmLCAjI2FyZ3MpCisjZGVmaW5lIGRlY29kZXJfY2FsbChvLCBmLCBhcmdzLi4uKSBcCisJdjRsMl9zdWJkZXZfY2FsbCh2aW5vX2RydmRhdGEtPmRlY29kZXIsIG8sIGYsICMjYXJncykKKwogc3RhdGljIGNvbnN0IGNoYXIgKnZpbm9fZHJpdmVyX25hbWUgPSAidmlubyI7CiBzdGF0aWMgY29uc3QgY2hhciAqdmlub19kcml2ZXJfZGVzY3JpcHRpb24gPSAiU0dJIFZJTk8iOwogc3RhdGljIGNvbnN0IGNoYXIgKnZpbm9fYnVzX25hbWUgPSAiR0lPNjQgYnVzIjsKLXN0YXRpYyBjb25zdCBjaGFyICp2aW5vX3Y0bF9kZXZpY2VfbmFtZV9hID0gIlNHSSBWSU5PIENoYW5uZWwgQSI7Ci1zdGF0aWMgY29uc3QgY2hhciAqdmlub192NGxfZGV2aWNlX25hbWVfYiA9ICJTR0kgVklOTyBDaGFubmVsIEIiOworc3RhdGljIGNvbnN0IGNoYXIgKnZpbm9fdmRldl9uYW1lX2EgPSAiU0dJIFZJTk8gQ2hhbm5lbCBBIjsKK3N0YXRpYyBjb25zdCBjaGFyICp2aW5vX3ZkZXZfbmFtZV9iID0gIlNHSSBWSU5PIENoYW5uZWwgQiI7CiAKIHN0YXRpYyB2b2lkIHZpbm9fY2FwdHVyZV90YXNrbGV0KHVuc2lnbmVkIGxvbmcgY2hhbm5lbCk7CiAKQEAgLTM2MCwxMSArMzc3LDExIEBACiAJCS5uYW1lCQk9ICJDb21wb3NpdGUiLAogCQkuc3RkCQk9IFY0TDJfU1REX05UU0MgfCBWNEwyX1NURF9QQUwKIAkJfCBWNEwyX1NURF9TRUNBTSwKLQl9LHsKKwl9LCB7CiAJCS5uYW1lCQk9ICJTLVZpZGVvIiwKIAkJLnN0ZAkJPSBWNEwyX1NURF9OVFNDIHwgVjRMMl9TVERfUEFMCiAJCXwgVjRMMl9TVERfU0VDQU0sCi0JfSx7CisJfSwgewogCQkubmFtZQkJPSAiRDEvSW5keUNhbSIsCiAJCS5zdGQJCT0gVjRMMl9TVERfTlRTQywKIAl9CkBAIC0zNzYsMTcgKzM5MywxNyBAQAogCQkuYnBwCQk9IDEsCiAJCS5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9HUkVZLAogCQkuY29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0sCi0JfSx7CisJfSwgewogCQkuZGVzY3JpcHRpb24JPSAiOC1iaXQgZGl0aGVyZWQgUkdCIDMtMy0yIiwKIAkJLmJwcAkJPSAxLAogCQkucGl4ZWxmb3JtYXQJPSBWNEwyX1BJWF9GTVRfUkdCMzMyLAogCQkuY29sb3JzcGFjZQk9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAotCX0seworCX0sIHsKIAkJLmRlc2NyaXB0aW9uCT0gIjMyLWJpdCBSR0IiLAogCQkuYnBwCQk9IDQsCiAJCS5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9SR0IzMiwKIAkJLmNvbG9yc3BhY2UJPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKLQl9LHsKKwl9LCB7CiAJCS5kZXNjcmlwdGlvbgk9ICJZVVYgNDoyOjIiLAogCQkuYnBwCQk9IDIsCiAJCS5waXhlbGZvcm1hdAk9IFY0TDJfUElYX0ZNVF9ZVVlWLCAvLyBYWFg6IHN3YXBwZWQ/CkBAIC00MTcsNyArNDM0LDcgQEAKIAkJCSsgVklOT19OVFNDX0hFSUdIVCAvIDIgLSAxLAogCQkJLnJpZ2h0CT0gVklOT19OVFNDX1dJRFRILAogCQl9LAotCX0seworCX0sIHsKIAkJLmRlc2NyaXB0aW9uCT0gIlBBTCIsCiAJCS5zdGQJCT0gVjRMMl9TVERfUEFMLAogCQkuZnBzX21pbgk9IDUsCkBAIC00MzksNyArNDU2LDcgQEAKIAkJCSsgVklOT19QQUxfSEVJR0hUIC8gMiAtIDEsCiAJCQkucmlnaHQJPSBWSU5PX1BBTF9XSURUSCwKIAkJfSwKLQl9LHsKKwl9LCB7CiAJCS5kZXNjcmlwdGlvbgk9ICJTRUNBTSIsCiAJCS5zdGQJCT0gVjRMMl9TVERfU0VDQU0sCiAJCS5mcHNfbWluCT0gNSwKQEAgLTQ2MSw3ICs0NzgsNyBAQAogCQkJKyBWSU5PX1BBTF9IRUlHSFQgLyAyIC0gMSwKIAkJCS5yaWdodAk9IFZJTk9fUEFMX1dJRFRILAogCQl9LAotCX0seworCX0sIHsKIAkJLmRlc2NyaXB0aW9uCT0gIk5UU0MvRDEiLAogCQkuc3RkCQk9IFY0TDJfU1REX05UU0MsCiAJCS5mcHNfbWluCT0gNiwKQEAgLTQ5Nyw5ICs1MTQsNyBAQAogCQkubWF4aW11bSA9IDEsCiAJCS5zdGVwID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSBJTkRZQ0FNX0FHQ19ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IElORFlDQU1fQ09OVFJPTF9BR0MsIDAgfSwKLQl9LHsKKwl9LCB7CiAJCS5pZCA9IFY0TDJfQ0lEX0FVVE9fV0hJVEVfQkFMQU5DRSwKIAkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAogCQkubmFtZSA9ICJBdXRvbWF0aWMgV2hpdGUgQmFsYW5jZSIsCkBAIC01MDcsOSArNTIyLDcgQEAKIAkJLm1heGltdW0gPSAxLAogCQkuc3RlcCA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gSU5EWUNBTV9BV0JfREVGQVVMVCwKLQkJLmZsYWdzID0gMCwKLQkJLnJlc2VydmVkID0geyBJTkRZQ0FNX0NPTlRST0xfQVdCLCAwIH0sCi0JfSx7CisJfSwgewogCQkuaWQgPSBWNEwyX0NJRF9HQUlOLAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lID0gIkdhaW4iLApAQCAtNTE3LDI5ICs1MzAsMjMgQEAKIAkJLm1heGltdW0gPSBJTkRZQ0FNX0dBSU5fTUFYLAogCQkuc3RlcCA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gSU5EWUNBTV9HQUlOX0RFRkFVTFQsCi0JCS5mbGFncyA9IDAsCi0JCS5yZXNlcnZlZCA9IHsgSU5EWUNBTV9DT05UUk9MX0dBSU4sIDAgfSwKLQl9LHsKLQkJLmlkID0gVjRMMl9DSURfUFJJVkFURV9CQVNFLAorCX0sIHsKKwkJLmlkID0gSU5EWUNBTV9DT05UUk9MX1JFRF9TQVRVUkFUSU9OLAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lID0gIlJlZCBTYXR1cmF0aW9uIiwKIAkJLm1pbmltdW0gPSBJTkRZQ0FNX1JFRF9TQVRVUkFUSU9OX01JTiwKIAkJLm1heGltdW0gPSBJTkRZQ0FNX1JFRF9TQVRVUkFUSU9OX01BWCwKIAkJLnN0ZXAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IElORFlDQU1fUkVEX1NBVFVSQVRJT05fREVGQVVMVCwKLQkJLmZsYWdzID0gMCwKLQkJLnJlc2VydmVkID0geyBJTkRZQ0FNX0NPTlRST0xfUkVEX1NBVFVSQVRJT04sIDAgfSwKLQl9LHsKLQkJLmlkID0gVjRMMl9DSURfUFJJVkFURV9CQVNFICsgMSwKKwl9LCB7CisJCS5pZCA9IElORFlDQU1fQ09OVFJPTF9CTFVFX1NBVFVSQVRJT04sCiAJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJLm5hbWUgPSAiQmx1ZSBTYXR1cmF0aW9uIiwKIAkJLm1pbmltdW0gPSBJTkRZQ0FNX0JMVUVfU0FUVVJBVElPTl9NSU4sCiAJCS5tYXhpbXVtID0gSU5EWUNBTV9CTFVFX1NBVFVSQVRJT05fTUFYLAogCQkuc3RlcCA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gSU5EWUNBTV9CTFVFX1NBVFVSQVRJT05fREVGQVVMVCwKLQkJLmZsYWdzID0gMCwKLQkJLnJlc2VydmVkID0geyBJTkRZQ0FNX0NPTlRST0xfQkxVRV9TQVRVUkFUSU9OLCAwIH0sCi0JfSx7CisJfSwgewogCQkuaWQgPSBWNEwyX0NJRF9SRURfQkFMQU5DRSwKIAkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkubmFtZSA9ICJSZWQgQmFsYW5jZSIsCkBAIC01NDcsOSArNTU0LDcgQEAKIAkJLm1heGltdW0gPSBJTkRZQ0FNX1JFRF9CQUxBTkNFX01BWCwKIAkJLnN0ZXAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IElORFlDQU1fUkVEX0JBTEFOQ0VfREVGQVVMVCwKLQkJLmZsYWdzID0gMCwKLQkJLnJlc2VydmVkID0geyBJTkRZQ0FNX0NPTlRST0xfUkVEX0JBTEFOQ0UsIDAgfSwKLQl9LHsKKwl9LCB7CiAJCS5pZCA9IFY0TDJfQ0lEX0JMVUVfQkFMQU5DRSwKIAkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkubmFtZSA9ICJCbHVlIEJhbGFuY2UiLApAQCAtNTU3LDkgKzU2Miw3IEBACiAJCS5tYXhpbXVtID0gSU5EWUNBTV9CTFVFX0JBTEFOQ0VfTUFYLAogCQkuc3RlcCA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gSU5EWUNBTV9CTFVFX0JBTEFOQ0VfREVGQVVMVCwKLQkJLmZsYWdzID0gMCwKLQkJLnJlc2VydmVkID0geyBJTkRZQ0FNX0NPTlRST0xfQkxVRV9CQUxBTkNFLCAwIH0sCi0JfSx7CisJfSwgewogCQkuaWQgPSBWNEwyX0NJRF9FWFBPU1VSRSwKIAkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkubmFtZSA9ICJTaHV0dGVyIENvbnRyb2wiLApAQCAtNTY3LDkgKzU3MCw3IEBACiAJCS5tYXhpbXVtID0gSU5EWUNBTV9TSFVUVEVSX01BWCwKIAkJLnN0ZXAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IElORFlDQU1fU0hVVFRFUl9ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IElORFlDQU1fQ09OVFJPTF9TSFVUVEVSLCAwIH0sCi0JfSx7CisJfSwgewogCQkuaWQgPSBWNEwyX0NJRF9HQU1NQSwKIAkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkubmFtZSA9ICJHYW1tYSIsCkBAIC01NzcsOCArNTc4LDYgQEAKIAkJLm1heGltdW0gPSBJTkRZQ0FNX0dBTU1BX01BWCwKIAkJLnN0ZXAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IElORFlDQU1fR0FNTUFfREVGQVVMVCwKLQkJLmZsYWdzID0gMCwKLQkJLnJlc2VydmVkID0geyBJTkRZQ0FNX0NPTlRST0xfR0FNTUEsIDAgfSwKIAl9CiB9OwogCkBAIC01OTMsMjA5ICs1OTIsNzMgQEAKIAkJLm1heGltdW0gPSBTQUE3MTkxX0hVRV9NQVgsCiAJCS5zdGVwID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSBTQUE3MTkxX0hVRV9ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IFNBQTcxOTFfQ09OVFJPTF9IVUUsIDAgfSwKLQl9LHsKLQkJLmlkID0gVjRMMl9DSURfUFJJVkFURV9CQVNFLAorCX0sIHsKKwkJLmlkID0gU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTLAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lID0gIkx1bWluYW5jZSBCYW5kcGFzcyIsCiAJCS5taW5pbXVtID0gU0FBNzE5MV9CQU5EUEFTU19NSU4sCiAJCS5tYXhpbXVtID0gU0FBNzE5MV9CQU5EUEFTU19NQVgsCiAJCS5zdGVwID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSBTQUE3MTkxX0JBTkRQQVNTX0RFRkFVTFQsCi0JCS5mbGFncyA9IDAsCi0JCS5yZXNlcnZlZCA9IHsgU0FBNzE5MV9DT05UUk9MX0JBTkRQQVNTLCAwIH0sCi0JfSx7Ci0JCS5pZCA9IFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDEsCisJfSwgeworCQkuaWQgPSBTQUE3MTkxX0NPTlRST0xfQkFORFBBU1NfV0VJR0hULAogCQkudHlwZSA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJCS5uYW1lID0gIkx1bWluYW5jZSBCYW5kcGFzcyBXZWlnaHQiLAogCQkubWluaW11bSA9IFNBQTcxOTFfQkFORFBBU1NfV0VJR0hUX01JTiwKIAkJLm1heGltdW0gPSBTQUE3MTkxX0JBTkRQQVNTX1dFSUdIVF9NQVgsCiAJCS5zdGVwID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSBTQUE3MTkxX0JBTkRQQVNTX1dFSUdIVF9ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IFNBQTcxOTFfQ09OVFJPTF9CQU5EUEFTU19XRUlHSFQsIDAgfSwKLQl9LHsKLQkJLmlkID0gVjRMMl9DSURfUFJJVkFURV9CQVNFICsgMiwKKwl9LCB7CisJCS5pZCA9IFNBQTcxOTFfQ09OVFJPTF9DT1JJTkcsCiAJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUiwKIAkJLm5hbWUgPSAiSEYgTHVtaW5hbmNlIENvcmluZyIsCiAJCS5taW5pbXVtID0gU0FBNzE5MV9DT1JJTkdfTUlOLAogCQkubWF4aW11bSA9IFNBQTcxOTFfQ09SSU5HX01BWCwKIAkJLnN0ZXAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IFNBQTcxOTFfQ09SSU5HX0RFRkFVTFQsCi0JCS5mbGFncyA9IDAsCi0JCS5yZXNlcnZlZCA9IHsgU0FBNzE5MV9DT05UUk9MX0NPUklORywgMCB9LAotCX0sewotCQkuaWQgPSBWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyAzLAorCX0sIHsKKwkJLmlkID0gU0FBNzE5MV9DT05UUk9MX0ZPUkNFX0NPTE9VUiwKIAkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9CT09MRUFOLAogCQkubmFtZSA9ICJGb3JjZSBDb2xvdXIiLAogCQkubWluaW11bSA9IFNBQTcxOTFfRk9SQ0VfQ09MT1VSX01JTiwKIAkJLm1heGltdW0gPSBTQUE3MTkxX0ZPUkNFX0NPTE9VUl9NQVgsCiAJCS5zdGVwID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSBTQUE3MTkxX0ZPUkNFX0NPTE9VUl9ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IFNBQTcxOTFfQ09OVFJPTF9GT1JDRV9DT0xPVVIsIDAgfSwKLQl9LHsKLQkJLmlkID0gVjRMMl9DSURfUFJJVkFURV9CQVNFICsgNCwKKwl9LCB7CisJCS5pZCA9IFNBQTcxOTFfQ09OVFJPTF9DSFJPTUFfR0FJTiwKIAkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkubmFtZSA9ICJDaHJvbWluYW5jZSBHYWluIENvbnRyb2wiLAogCQkubWluaW11bSA9IFNBQTcxOTFfQ0hST01BX0dBSU5fTUlOLAogCQkubWF4aW11bSA9IFNBQTcxOTFfQ0hST01BX0dBSU5fTUFYLAogCQkuc3RlcCA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gU0FBNzE5MV9DSFJPTUFfR0FJTl9ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IFNBQTcxOTFfQ09OVFJPTF9DSFJPTUFfR0FJTiwgMCB9LAotCX0sewotCQkuaWQgPSBWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyA1LAorCX0sIHsKKwkJLmlkID0gU0FBNzE5MV9DT05UUk9MX1ZUUkMsCiAJCS50eXBlID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKIAkJLm5hbWUgPSAiVlRSIFRpbWUgQ29uc3RhbnQiLAogCQkubWluaW11bSA9IFNBQTcxOTFfVlRSQ19NSU4sCiAJCS5tYXhpbXVtID0gU0FBNzE5MV9WVFJDX01BWCwKIAkJLnN0ZXAgPSAxLAogCQkuZGVmYXVsdF92YWx1ZSA9IFNBQTcxOTFfVlRSQ19ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IFNBQTcxOTFfQ09OVFJPTF9WVFJDLCAwIH0sCi0JfSx7Ci0JCS5pZCA9IFY0TDJfQ0lEX1BSSVZBVEVfQkFTRSArIDYsCisJfSwgeworCQkuaWQgPSBTQUE3MTkxX0NPTlRST0xfTFVNQV9ERUxBWSwKIAkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkubmFtZSA9ICJMdW1pbmFuY2UgRGVsYXkgQ29tcGVuc2F0aW9uIiwKIAkJLm1pbmltdW0gPSBTQUE3MTkxX0xVTUFfREVMQVlfTUlOLAogCQkubWF4aW11bSA9IFNBQTcxOTFfTFVNQV9ERUxBWV9NQVgsCiAJCS5zdGVwID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSBTQUE3MTkxX0xVTUFfREVMQVlfREVGQVVMVCwKLQkJLmZsYWdzID0gMCwKLQkJLnJlc2VydmVkID0geyBTQUE3MTkxX0NPTlRST0xfTFVNQV9ERUxBWSwgMCB9LAotCX0sewotCQkuaWQgPSBWNEwyX0NJRF9QUklWQVRFX0JBU0UgKyA3LAorCX0sIHsKKwkJLmlkID0gU0FBNzE5MV9DT05UUk9MX1ZOUiwKIAkJLnR5cGUgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLAogCQkubmFtZSA9ICJWZXJ0aWNhbCBOb2lzZSBSZWR1Y3Rpb24iLAogCQkubWluaW11bSA9IFNBQTcxOTFfVk5SX01JTiwKIAkJLm1heGltdW0gPSBTQUE3MTkxX1ZOUl9NQVgsCiAJCS5zdGVwID0gMSwKIAkJLmRlZmF1bHRfdmFsdWUgPSBTQUE3MTkxX1ZOUl9ERUZBVUxULAotCQkuZmxhZ3MgPSAwLAotCQkucmVzZXJ2ZWQgPSB7IFNBQTcxOTFfQ09OVFJPTF9WTlIsIDAgfSwKIAl9CiB9OwogCi0vKiBWSU5PIEkyQyBidXMgZnVuY3Rpb25zICovCi0KLXVuc2lnbmVkIGkyY192aW5vX2dldGN0cmwodm9pZCAqZGF0YSkKLXsKLQlyZXR1cm4gdmluby0+aTJjX2NvbnRyb2w7Ci19Ci0KLXZvaWQgaTJjX3Zpbm9fc2V0Y3RybCh2b2lkICpkYXRhLCB1bnNpZ25lZCB2YWwpCi17Ci0Jdmluby0+aTJjX2NvbnRyb2wgPSB2YWw7Ci19Ci0KLXVuc2lnbmVkIGkyY192aW5vX3JkYXRhKHZvaWQgKmRhdGEpCi17Ci0JcmV0dXJuIHZpbm8tPmkyY19kYXRhOwotfQotCi12b2lkIGkyY192aW5vX3dkYXRhKHZvaWQgKmRhdGEsIHVuc2lnbmVkIHZhbCkKLXsKLQl2aW5vLT5pMmNfZGF0YSA9IHZhbDsKLX0KLQotc3RhdGljIHN0cnVjdCBpMmNfYWxnb19zZ2lfZGF0YSBpMmNfc2dpX3Zpbm9fZGF0YSA9Ci17Ci0JLmdldGN0cmwgPSAmaTJjX3Zpbm9fZ2V0Y3RybCwKLQkuc2V0Y3RybCA9ICZpMmNfdmlub19zZXRjdHJsLAotCS5yZGF0YSAgID0gJmkyY192aW5vX3JkYXRhLAotCS53ZGF0YSAgID0gJmkyY192aW5vX3dkYXRhLAotCS54ZmVyX3RpbWVvdXQgPSAyMDAsCi0JLmFja190aW1lb3V0ICA9IDEwMDAsCi19OwotCi0vKgotICogVGhlcmUgYXJlIHR3byBwb3NzaWJsZSBjbGllbnRzIG9uIFZJTk8gSTJDIGJ1cywgc28gd2UgbGltaXQgdXNhZ2Ugb25seQotICogdG8gdGhlbS4KLSAqLwotc3RhdGljIGludCBpMmNfdmlub19jbGllbnRfcmVnKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQpCi17Ci0JdW5zaWduZWQgbG9uZyBmbGFnczsKLQlpbnQgcmV0ID0gMDsKLQotCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQlzd2l0Y2ggKGNsaWVudC0+ZHJpdmVyLT5pZCkgewotCWNhc2UgSTJDX0RSSVZFUklEX1NBQTcxOTE6Ci0JCWlmICh2aW5vX2RydmRhdGEtPmRlY29kZXIuZHJpdmVyKQotCQkJcmV0ID0gLUVCVVNZOwotCQllbHNlCi0JCQl2aW5vX2RydmRhdGEtPmRlY29kZXIuZHJpdmVyID0gY2xpZW50OwotCQlicmVhazsKLQljYXNlIEkyQ19EUklWRVJJRF9JTkRZQ0FNOgotCQlpZiAodmlub19kcnZkYXRhLT5jYW1lcmEuZHJpdmVyKQotCQkJcmV0ID0gLUVCVVNZOwotCQllbHNlCi0JCQl2aW5vX2RydmRhdGEtPmNhbWVyYS5kcml2ZXIgPSBjbGllbnQ7Ci0JCWJyZWFrOwotCWRlZmF1bHQ6Ci0JCXJldCA9IC1FTk9ERVY7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGludCBpMmNfdmlub19jbGllbnRfdW5yZWcoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQl1bnNpZ25lZCBsb25nIGZsYWdzOwotCWludCByZXQgPSAwOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCWlmIChjbGllbnQgPT0gdmlub19kcnZkYXRhLT5kZWNvZGVyLmRyaXZlcikgewotCQlpZiAodmlub19kcnZkYXRhLT5kZWNvZGVyLm93bmVyICE9IFZJTk9fTk9fQ0hBTk5FTCkKLQkJCXJldCA9IC1FQlVTWTsKLQkJZWxzZQotCQkJdmlub19kcnZkYXRhLT5kZWNvZGVyLmRyaXZlciA9IE5VTEw7Ci0JfSBlbHNlIGlmIChjbGllbnQgPT0gdmlub19kcnZkYXRhLT5jYW1lcmEuZHJpdmVyKSB7Ci0JCWlmICh2aW5vX2RydmRhdGEtPmNhbWVyYS5vd25lciAhPSBWSU5PX05PX0NIQU5ORUwpCi0JCQlyZXQgPSAtRUJVU1k7Ci0JCWVsc2UKLQkJCXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLmRyaXZlciA9IE5VTEw7Ci0JfQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciB2aW5vX2kyY19hZGFwdGVyID0KLXsKLQkubmFtZQkJCT0gIlZJTk8gSTJDIGJ1cyIsCi0JLmlkCQkJPSBJMkNfSFdfU0dJX1ZJTk8sCi0JLmFsZ29fZGF0YQkJPSAmaTJjX3NnaV92aW5vX2RhdGEsCi0JLmNsaWVudF9yZWdpc3Rlcgk9ICZpMmNfdmlub19jbGllbnRfcmVnLAotCS5jbGllbnRfdW5yZWdpc3Rlcgk9ICZpMmNfdmlub19jbGllbnRfdW5yZWcsCi19OwotCi1zdGF0aWMgaW50IHZpbm9faTJjX2FkZF9idXModm9pZCkKLXsKLQlyZXR1cm4gaTJjX3NnaV9hZGRfYnVzKCZ2aW5vX2kyY19hZGFwdGVyKTsKLX0KLQotc3RhdGljIGludCB2aW5vX2kyY19kZWxfYnVzKHZvaWQpCi17Ci0JcmV0dXJuIGkyY19kZWxfYWRhcHRlcigmdmlub19pMmNfYWRhcHRlcik7Ci19Ci0KLXN0YXRpYyBpbnQgaTJjX2NhbWVyYV9jb21tYW5kKHVuc2lnbmVkIGludCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdmlub19kcnZkYXRhLT5jYW1lcmEuZHJpdmVyLT4KLQkJZHJpdmVyLT5jb21tYW5kKHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLmRyaXZlciwKLQkJCQljbWQsIGFyZyk7Ci19Ci0KLXN0YXRpYyBpbnQgaTJjX2RlY29kZXJfY29tbWFuZCh1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCi17Ci0JcmV0dXJuIHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5kcml2ZXItPgotCQlkcml2ZXItPmNvbW1hbmQodmlub19kcnZkYXRhLT5kZWNvZGVyLmRyaXZlciwKLQkJCQljbWQsIGFyZyk7Ci19Ci0KIC8qIFZJTk8gZnJhbWVidWZmZXIvRE1BIGRlc2NyaXB0b3IgbWFuYWdlbWVudCAqLwogCiBzdGF0aWMgdm9pZCB2aW5vX2ZyZWVfYnVmZmVyX3dpdGhfY291bnQoc3RydWN0IHZpbm9fZnJhbWVidWZmZXIgKmZiLApAQCAtMTc0MSw2ICsxNjA0LDE4NCBAQAogCXZpbm9fc2V0X2ZyYW1lcmF0ZSh2Y3MsIHZpbm9fZGF0YV9ub3Jtc1t2Y3MtPmRhdGFfbm9ybV0uZnBzX21heCk7CiB9CiAKKy8qIFZJTk8gSTJDIGJ1cyBmdW5jdGlvbnMgKi8KKworc3RydWN0IGkyY19hbGdvX3NnaV9kYXRhIHsKKwl2b2lkICpkYXRhOwkvKiBwcml2YXRlIGRhdGEgZm9yIGxvd2xldmVsIHJvdXRpbmVzICovCisJdW5zaWduZWQgKCpnZXRjdHJsKSh2b2lkICpkYXRhKTsKKwl2b2lkICgqc2V0Y3RybCkodm9pZCAqZGF0YSwgdW5zaWduZWQgdmFsKTsKKwl1bnNpZ25lZCAoKnJkYXRhKSh2b2lkICpkYXRhKTsKKwl2b2lkICgqd2RhdGEpKHZvaWQgKmRhdGEsIHVuc2lnbmVkIHZhbCk7CisKKwlpbnQgeGZlcl90aW1lb3V0OworCWludCBhY2tfdGltZW91dDsKK307CisKK3N0YXRpYyBpbnQgd2FpdF94ZmVyX2RvbmUoc3RydWN0IGkyY19hbGdvX3NnaV9kYXRhICphZGFwKQoreworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IGFkYXAtPnhmZXJfdGltZW91dDsgaSsrKSB7CisJCWlmICgoYWRhcC0+Z2V0Y3RybChhZGFwLT5kYXRhKSAmIFNHSV9JMkNfWEZFUl9CVVNZKSA9PSAwKQorCQkJcmV0dXJuIDA7CisJCXVkZWxheSgxKTsKKwl9CisKKwlyZXR1cm4gLUVUSU1FRE9VVDsKK30KKworc3RhdGljIGludCB3YWl0X2FjayhzdHJ1Y3QgaTJjX2FsZ29fc2dpX2RhdGEgKmFkYXApCit7CisJaW50IGk7CisKKwlpZiAod2FpdF94ZmVyX2RvbmUoYWRhcCkpCisJCXJldHVybiAtRVRJTUVET1VUOworCWZvciAoaSA9IDA7IGkgPCBhZGFwLT5hY2tfdGltZW91dDsgaSsrKSB7CisJCWlmICgoYWRhcC0+Z2V0Y3RybChhZGFwLT5kYXRhKSAmIFNHSV9JMkNfTkFDSykgPT0gMCkKKwkJCXJldHVybiAwOworCQl1ZGVsYXkoMSk7CisJfQorCisJcmV0dXJuIC1FVElNRURPVVQ7Cit9CisKK3N0YXRpYyBpbnQgZm9yY2VfaWRsZShzdHJ1Y3QgaTJjX2FsZ29fc2dpX2RhdGEgKmFkYXApCit7CisJaW50IGk7CisKKwlhZGFwLT5zZXRjdHJsKGFkYXAtPmRhdGEsIFNHSV9JMkNfRk9SQ0VfSURMRSk7CisJZm9yIChpID0gMDsgaSA8IGFkYXAtPnhmZXJfdGltZW91dDsgaSsrKSB7CisJCWlmICgoYWRhcC0+Z2V0Y3RybChhZGFwLT5kYXRhKSAmIFNHSV9JMkNfTk9UX0lETEUpID09IDApCisJCQlnb3RvIG91dDsKKwkJdWRlbGF5KDEpOworCX0KKwlyZXR1cm4gLUVUSU1FRE9VVDsKK291dDoKKwlpZiAoYWRhcC0+Z2V0Y3RybChhZGFwLT5kYXRhKSAmIFNHSV9JMkNfQlVTX0VSUikKKwkJcmV0dXJuIC1FSU87CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZG9fYWRkcmVzcyhzdHJ1Y3QgaTJjX2FsZ29fc2dpX2RhdGEgKmFkYXAsIHVuc2lnbmVkIGludCBhZGRyLAorCQkgICAgICBpbnQgcmQpCit7CisJaWYgKHJkKQorCQlhZGFwLT5zZXRjdHJsKGFkYXAtPmRhdGEsIFNHSV9JMkNfTk9UX0lETEUpOworCS8qIENoZWNrIGlmIGJ1cyBpcyBpZGxlLCBldmVudHVhbGx5IGZvcmNlIGl0IHRvIGRvIHNvICovCisJaWYgKGFkYXAtPmdldGN0cmwoYWRhcC0+ZGF0YSkgJiBTR0lfSTJDX05PVF9JRExFKQorCQlpZiAoZm9yY2VfaWRsZShhZGFwKSkKKwkJCXJldHVybiAtRUlPOworCS8qIFdyaXRlIG91dCB0aGUgaTJjIGNoaXAgYWRkcmVzcyBhbmQgc3BlY2lmeSBvcGVyYXRpb24gKi8KKwlhZGFwLT5zZXRjdHJsKGFkYXAtPmRhdGEsCisJCSAgICAgIFNHSV9JMkNfSE9MRF9CVVMgfCBTR0lfSTJDX1dSSVRFIHwgU0dJX0kyQ19OT1RfSURMRSk7CisJaWYgKHJkKQorCQlhZGRyIHw9IDE7CisJYWRhcC0+d2RhdGEoYWRhcC0+ZGF0YSwgYWRkcik7CisJaWYgKHdhaXRfYWNrKGFkYXApKQorCQlyZXR1cm4gLUVJTzsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBpMmNfcmVhZChzdHJ1Y3QgaTJjX2FsZ29fc2dpX2RhdGEgKmFkYXAsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwKKwkJICAgIHVuc2lnbmVkIGludCBsZW4pCit7CisJaW50IGk7CisKKwlhZGFwLT5zZXRjdHJsKGFkYXAtPmRhdGEsCisJCSAgICAgIFNHSV9JMkNfSE9MRF9CVVMgfCBTR0lfSTJDX1JFQUQgfCBTR0lfSTJDX05PVF9JRExFKTsKKwlmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKwkJaWYgKHdhaXRfeGZlcl9kb25lKGFkYXApKQorCQkJcmV0dXJuIC1FSU87CisJCWJ1ZltpXSA9IGFkYXAtPnJkYXRhKGFkYXAtPmRhdGEpOworCX0KKwlhZGFwLT5zZXRjdHJsKGFkYXAtPmRhdGEsIFNHSV9JMkNfUkVMRUFTRV9CVVMgfCBTR0lfSTJDX0ZPUkNFX0lETEUpOworCisJcmV0dXJuIDA7CisKK30KKworc3RhdGljIGludCBpMmNfd3JpdGUoc3RydWN0IGkyY19hbGdvX3NnaV9kYXRhICphZGFwLCB1bnNpZ25lZCBjaGFyICpidWYsCisJCSAgICAgdW5zaWduZWQgaW50IGxlbikKK3sKKwlpbnQgaTsKKworCS8qIFdlIGFyZSBhbHJlYWR5IGluIHdyaXRlIHN0YXRlICovCisJZm9yIChpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisJCWFkYXAtPndkYXRhKGFkYXAtPmRhdGEsIGJ1ZltpXSk7CisJCWlmICh3YWl0X2FjayhhZGFwKSkKKwkJCXJldHVybiAtRUlPOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCBzZ2lfeGZlcihzdHJ1Y3QgaTJjX2FkYXB0ZXIgKmkyY19hZGFwLCBzdHJ1Y3QgaTJjX21zZyAqbXNncywKKwkJICAgIGludCBudW0pCit7CisJc3RydWN0IGkyY19hbGdvX3NnaV9kYXRhICphZGFwID0gaTJjX2FkYXAtPmFsZ29fZGF0YTsKKwlzdHJ1Y3QgaTJjX21zZyAqcDsKKwlpbnQgaSwgZXJyID0gMDsKKworCWZvciAoaSA9IDA7ICFlcnIgJiYgaSA8IG51bTsgaSsrKSB7CisJCXAgPSAmbXNnc1tpXTsKKwkJZXJyID0gZG9fYWRkcmVzcyhhZGFwLCBwLT5hZGRyLCBwLT5mbGFncyAmIEkyQ19NX1JEKTsKKwkJaWYgKGVyciB8fCAhcC0+bGVuKQorCQkJY29udGludWU7CisJCWlmIChwLT5mbGFncyAmIEkyQ19NX1JEKQorCQkJZXJyID0gaTJjX3JlYWQoYWRhcCwgcC0+YnVmLCBwLT5sZW4pOworCQllbHNlCisJCQllcnIgPSBpMmNfd3JpdGUoYWRhcCwgcC0+YnVmLCBwLT5sZW4pOworCX0KKworCXJldHVybiAoZXJyIDwgMCkgPyBlcnIgOiBpOworfQorCitzdGF0aWMgdTMyIHNnaV9mdW5jKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcCkKK3sKKwlyZXR1cm4gSTJDX0ZVTkNfU01CVVNfRU1VTDsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb3JpdGhtIHNnaV9hbGdvID0geworCS5tYXN0ZXJfeGZlcgk9IHNnaV94ZmVyLAorCS5mdW5jdGlvbmFsaXR5CT0gc2dpX2Z1bmMsCit9OworCitzdGF0aWMgdW5zaWduZWQgaTJjX3Zpbm9fZ2V0Y3RybCh2b2lkICpkYXRhKQoreworCXJldHVybiB2aW5vLT5pMmNfY29udHJvbDsKK30KKworc3RhdGljIHZvaWQgaTJjX3Zpbm9fc2V0Y3RybCh2b2lkICpkYXRhLCB1bnNpZ25lZCB2YWwpCit7CisJdmluby0+aTJjX2NvbnRyb2wgPSB2YWw7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpMmNfdmlub19yZGF0YSh2b2lkICpkYXRhKQoreworCXJldHVybiB2aW5vLT5pMmNfZGF0YTsKK30KKworc3RhdGljIHZvaWQgaTJjX3Zpbm9fd2RhdGEodm9pZCAqZGF0YSwgdW5zaWduZWQgdmFsKQoreworCXZpbm8tPmkyY19kYXRhID0gdmFsOworfQorCitzdGF0aWMgc3RydWN0IGkyY19hbGdvX3NnaV9kYXRhIGkyY19zZ2lfdmlub19kYXRhID0geworCS5nZXRjdHJsID0gJmkyY192aW5vX2dldGN0cmwsCisJLnNldGN0cmwgPSAmaTJjX3Zpbm9fc2V0Y3RybCwKKwkucmRhdGEgICA9ICZpMmNfdmlub19yZGF0YSwKKwkud2RhdGEgICA9ICZpMmNfdmlub193ZGF0YSwKKwkueGZlcl90aW1lb3V0ID0gMjAwLAorCS5hY2tfdGltZW91dCAgPSAxMDAwLAorfTsKKworc3RhdGljIHN0cnVjdCBpMmNfYWRhcHRlciB2aW5vX2kyY19hZGFwdGVyID0geworCS5uYW1lCQkJPSAiVklOTyBJMkMgYnVzIiwKKwkuaWQJCQk9IEkyQ19IV19TR0lfVklOTywKKwkuYWxnbwkJCT0gJnNnaV9hbGdvLAorCS5hbGdvX2RhdGEJCT0gJmkyY19zZ2lfdmlub19kYXRhLAorCS5vd25lciAJCQk9IFRISVNfTU9EVUxFLAorfTsKKwogLyoKICAqIFByZXBhcmUgVklOTyBmb3IgRE1BIHRyYW5zZmVyLi4uCiAgKiAoZXhlY3V0ZSBvbmx5IHdpdGggdmlub19sb2NrIGFuZCBpbnB1dF9sb2NrIGxvY2tlZCkKQEAgLTI0OTAsODYgKzI1MzEsMTUgQEAKIAl9CiB9CiAKLXN0YXRpYyBpbnQgdmlub19nZXRfc2FhNzE5MV9ub3JtKHVuc2lnbmVkIGludCBkYXRhX25vcm0pCi17Ci0Jc3dpdGNoIChkYXRhX25vcm0pIHsKLQljYXNlIFZJTk9fREFUQV9OT1JNX0FVVE86Ci0JCXJldHVybiBTQUE3MTkxX05PUk1fQVVUTzsKLQljYXNlIFZJTk9fREFUQV9OT1JNX0FVVE9fRVhUOgotCQlyZXR1cm4gU0FBNzE5MV9OT1JNX0FVVE9fRVhUOwotCWNhc2UgVklOT19EQVRBX05PUk1fUEFMOgotCQlyZXR1cm4gU0FBNzE5MV9OT1JNX1BBTDsKLQljYXNlIFZJTk9fREFUQV9OT1JNX05UU0M6Ci0JCXJldHVybiBTQUE3MTkxX05PUk1fTlRTQzsKLQljYXNlIFZJTk9fREFUQV9OT1JNX1NFQ0FNOgotCQlyZXR1cm4gU0FBNzE5MV9OT1JNX1NFQ0FNOwotCWRlZmF1bHQ6Ci0JCXByaW50ayhLRVJOX0VSUiAiVklOTzogdmlub19nZXRfc2FhNzE5MV9ub3JtKCk6ICIKLQkJICAgICAgICJpbnZhbGlkIG5vcm0hXG4iKTsKLQkJcmV0dXJuIC0xOwotCX0KLX0KLQotc3RhdGljIGludCB2aW5vX2dldF9mcm9tX3NhYTcxOTFfbm9ybShpbnQgc2FhNzE5MV9ub3JtKQotewotCXN3aXRjaCAoc2FhNzE5MV9ub3JtKSB7Ci0JY2FzZSBTQUE3MTkxX05PUk1fUEFMOgotCQlyZXR1cm4gVklOT19EQVRBX05PUk1fUEFMOwotCWNhc2UgU0FBNzE5MV9OT1JNX05UU0M6Ci0JCXJldHVybiBWSU5PX0RBVEFfTk9STV9OVFNDOwotCWNhc2UgU0FBNzE5MV9OT1JNX1NFQ0FNOgotCQlyZXR1cm4gVklOT19EQVRBX05PUk1fU0VDQU07Ci0JZGVmYXVsdDoKLQkJcHJpbnRrKEtFUk5fRVJSICJWSU5POiB2aW5vX2dldF9mcm9tX3NhYTcxOTFfbm9ybSgpOiAiCi0JCSAgICAgICAiaW52YWxpZCBub3JtIVxuIik7Ci0JCXJldHVybiBWSU5PX0RBVEFfTk9STV9OT05FOwotCX0KLX0KLQotc3RhdGljIGludCB2aW5vX3NhYTcxOTFfc2V0X25vcm0odW5zaWduZWQgaW50ICpkYXRhX25vcm0pCi17Ci0JaW50IHNhYTcxOTFfbm9ybSwgbmV3X2RhdGFfbm9ybTsKLQlpbnQgZXJyID0gMDsKLQotCXNhYTcxOTFfbm9ybSA9IHZpbm9fZ2V0X3NhYTcxOTFfbm9ybSgqZGF0YV9ub3JtKTsKLQotCWVyciA9IGkyY19kZWNvZGVyX2NvbW1hbmQoREVDT0RFUl9TQUE3MTkxX1NFVF9OT1JNLAotCQkJCSAgJnNhYTcxOTFfbm9ybSk7Ci0JaWYgKGVycikKLQkJZ290byBvdXQ7Ci0KLQlpZiAoKCpkYXRhX25vcm0gPT0gVklOT19EQVRBX05PUk1fQVVUTykKLQkgICAgfHwgKCpkYXRhX25vcm0gPT0gVklOT19EQVRBX05PUk1fQVVUT19FWFQpKSB7Ci0JCXN0cnVjdCBzYWE3MTkxX3N0YXR1cyBzdGF0dXM7Ci0KLQkJZXJyID0gaTJjX2RlY29kZXJfY29tbWFuZChERUNPREVSX1NBQTcxOTFfR0VUX1NUQVRVUywKLQkJCQkJICAmc3RhdHVzKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0OwotCi0JCW5ld19kYXRhX25vcm0gPQotCQkJdmlub19nZXRfZnJvbV9zYWE3MTkxX25vcm0oc3RhdHVzLm5vcm0pOwotCQlpZiAobmV3X2RhdGFfbm9ybSA9PSBWSU5PX0RBVEFfTk9STV9OT05FKSB7Ci0JCQllcnIgPSAtRUlOVkFMOwotCQkJZ290byBvdXQ7Ci0JCX0KLQotCQkqZGF0YV9ub3JtID0gKHVuc2lnbmVkIGludCluZXdfZGF0YV9ub3JtOwotCX0KLQotb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KIC8qIGV4ZWN1dGUgd2l0aCBpbnB1dF9sb2NrIGxvY2tlZCAqLwogc3RhdGljIGludCB2aW5vX2lzX2lucHV0X293bmVyKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcykKIHsKIAlzd2l0Y2godmNzLT5pbnB1dCkgewogCWNhc2UgVklOT19JTlBVVF9DT01QT1NJVEU6CiAJY2FzZSBWSU5PX0lOUFVUX1NWSURFTzoKLQkJcmV0dXJuICh2aW5vX2RydmRhdGEtPmRlY29kZXIub3duZXIgPT0gdmNzLT5jaGFubmVsKTsKKwkJcmV0dXJuIHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9PSB2Y3MtPmNoYW5uZWw7CiAJY2FzZSBWSU5PX0lOUFVUX0QxOgotCQlyZXR1cm4gKHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLm93bmVyID09IHZjcy0+Y2hhbm5lbCk7CisJCXJldHVybiB2aW5vX2RydmRhdGEtPmNhbWVyYV9vd25lciA9PSB2Y3MtPmNoYW5uZWw7CiAJZGVmYXVsdDoKIAkJcmV0dXJuIDA7CiAJfQpAQCAtMjU4NSwyMyArMjU1NSwyMiBAQAogCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKIAogCS8qIEZpcnN0IHRyeSBEMSBhbmQgdGhlbiBTQUE3MTkxICovCi0JaWYgKHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLmRyaXZlcgotCSAgICAmJiAodmlub19kcnZkYXRhLT5jYW1lcmEub3duZXIgPT0gVklOT19OT19DSEFOTkVMKSkgewotCQlpMmNfdXNlX2NsaWVudCh2aW5vX2RydmRhdGEtPmNhbWVyYS5kcml2ZXIpOwotCQl2aW5vX2RydmRhdGEtPmNhbWVyYS5vd25lciA9IHZjcy0+Y2hhbm5lbDsKKwlpZiAodmlub19kcnZkYXRhLT5jYW1lcmEKKwkgICAgJiYgKHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhX293bmVyID09IFZJTk9fTk9fQ0hBTk5FTCkpIHsKKwkJdmlub19kcnZkYXRhLT5jYW1lcmFfb3duZXIgPSB2Y3MtPmNoYW5uZWw7CiAJCXZjcy0+aW5wdXQgPSBWSU5PX0lOUFVUX0QxOwogCQl2Y3MtPmRhdGFfbm9ybSA9IFZJTk9fREFUQV9OT1JNX0QxOwotCX0gZWxzZSBpZiAodmlub19kcnZkYXRhLT5kZWNvZGVyLmRyaXZlcgotCQkgICAmJiAodmlub19kcnZkYXRhLT5kZWNvZGVyLm93bmVyID09IFZJTk9fTk9fQ0hBTk5FTCkpIHsKLQkJaW50IGlucHV0LCBkYXRhX25vcm07Ci0JCWludCBzYWE3MTkxX2lucHV0OworCX0gZWxzZSBpZiAodmlub19kcnZkYXRhLT5kZWNvZGVyCisJCSAgICYmICh2aW5vX2RydmRhdGEtPmRlY29kZXJfb3duZXIgPT0gVklOT19OT19DSEFOTkVMKSkgeworCQlpbnQgaW5wdXQ7CisJCWludCBkYXRhX25vcm07CisJCXY0bDJfc3RkX2lkIG5vcm07CisJCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGUgPSB7IDAsIDAgfTsKIAotCQlpMmNfdXNlX2NsaWVudCh2aW5vX2RydmRhdGEtPmRlY29kZXIuZHJpdmVyKTsKIAkJaW5wdXQgPSBWSU5PX0lOUFVUX0NPTVBPU0lURTsKIAotCQlzYWE3MTkxX2lucHV0ID0gdmlub19nZXRfc2FhNzE5MV9pbnB1dChpbnB1dCk7Ci0JCXJldCA9IGkyY19kZWNvZGVyX2NvbW1hbmQoREVDT0RFUl9TRVRfSU5QVVQsCi0JCQkJCSAgJnNhYTcxOTFfaW5wdXQpOworCQlyb3V0ZS5pbnB1dCA9IHZpbm9fZ2V0X3NhYTcxOTFfaW5wdXQoaW5wdXQpOworCQlyZXQgPSBkZWNvZGVyX2NhbGwodmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAkJaWYgKHJldCkgewogCQkJcmV0ID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OwpAQCAtMjYxMiwxMiArMjU4MSwxNSBAQAogCQkvKiBEb24ndCBob2xkIHNwaW5sb2NrcyB3aGlsZSBhdXRvLWRldGVjdGluZyBub3JtCiAJCSAqIGFzIGl0IG1heSB0YWtlIGEgd2hpbGUuLi4gKi8KIAotCQlkYXRhX25vcm0gPSBWSU5PX0RBVEFfTk9STV9BVVRPX0VYVDsKLQotCQlyZXQgPSB2aW5vX3NhYTcxOTFfc2V0X25vcm0oJmRhdGFfbm9ybSk7Ci0JCWlmICgocmV0ID09IC1FQlVTWSkgfHwgKHJldCA9PSAtRUFHQUlOKSkgewotCQkJZGF0YV9ub3JtID0gVklOT19EQVRBX05PUk1fUEFMOwotCQkJcmV0ID0gdmlub19zYWE3MTkxX3NldF9ub3JtKCZkYXRhX25vcm0pOworCQlyZXQgPSBkZWNvZGVyX2NhbGwodmlkZW8sIHF1ZXJ5c3RkLCAmbm9ybSk7CisJCWlmICghcmV0KSB7CisJCQlmb3IgKGRhdGFfbm9ybSA9IDA7IGRhdGFfbm9ybSA8IDM7IGRhdGFfbm9ybSsrKSB7CisJCQkJaWYgKHZpbm9fZGF0YV9ub3Jtc1tkYXRhX25vcm1dLnN0ZCAmIG5vcm0pCisJCQkJCWJyZWFrOworCQkJfQorCQkJaWYgKGRhdGFfbm9ybSA9PSAzKQorCQkJCWRhdGFfbm9ybSA9IFZJTk9fREFUQV9OT1JNX1BBTDsKKwkJCXJldCA9IGRlY29kZXJfY2FsbCh0dW5lciwgc19zdGQsIG5vcm0pOwogCQl9CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwpAQCAtMjYyNyw3ICsyNTk5LDcgQEAKIAkJCWdvdG8gb3V0OwogCQl9CiAKLQkJdmlub19kcnZkYXRhLT5kZWNvZGVyLm93bmVyID0gdmNzLT5jaGFubmVsOworCQl2aW5vX2RydmRhdGEtPmRlY29kZXJfb3duZXIgPSB2Y3MtPmNoYW5uZWw7CiAKIAkJdmNzLT5pbnB1dCA9IGlucHV0OwogCQl2Y3MtPmRhdGFfbm9ybSA9IGRhdGFfbm9ybTsKQEAgLTI2NzIsMjUgKzI2NDQsMjQgQEAKIAlzd2l0Y2ggKGlucHV0KSB7CiAJY2FzZSBWSU5PX0lOUFVUX0NPTVBPU0lURToKIAljYXNlIFZJTk9fSU5QVVRfU1ZJREVPOgotCQlpZiAoIXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5kcml2ZXIpIHsKKwkJaWYgKCF2aW5vX2RydmRhdGEtPmRlY29kZXIpIHsKIAkJCXJldCA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCWlmICh2aW5vX2RydmRhdGEtPmRlY29kZXIub3duZXIgPT0gVklOT19OT19DSEFOTkVMKSB7Ci0JCQlpMmNfdXNlX2NsaWVudCh2aW5vX2RydmRhdGEtPmRlY29kZXIuZHJpdmVyKTsKLQkJCXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5vd25lciA9IHZjcy0+Y2hhbm5lbDsKKwkJaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9PSBWSU5PX05PX0NIQU5ORUwpIHsKKwkJCXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9IHZjcy0+Y2hhbm5lbDsKIAkJfQogCi0JCWlmICh2aW5vX2RydmRhdGEtPmRlY29kZXIub3duZXIgPT0gdmNzLT5jaGFubmVsKSB7CisJCWlmICh2aW5vX2RydmRhdGEtPmRlY29kZXJfb3duZXIgPT0gdmNzLT5jaGFubmVsKSB7CiAJCQlpbnQgZGF0YV9ub3JtOwotCQkJaW50IHNhYTcxOTFfaW5wdXQ7CisJCQl2NGwyX3N0ZF9pZCBub3JtOworCQkJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZSA9IHsgMCwgMCB9OwogCi0JCQlzYWE3MTkxX2lucHV0ID0gdmlub19nZXRfc2FhNzE5MV9pbnB1dChpbnB1dCk7Ci0JCQlyZXQgPSBpMmNfZGVjb2Rlcl9jb21tYW5kKERFQ09ERVJfU0VUX0lOUFVULAotCQkJCQkJICAmc2FhNzE5MV9pbnB1dCk7CisJCQlyb3V0ZS5pbnB1dCA9IHZpbm9fZ2V0X3NhYTcxOTFfaW5wdXQoaW5wdXQpOworCQkJcmV0ID0gZGVjb2Rlcl9jYWxsKHZpZGVvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAJCQlpZiAocmV0KSB7Ci0JCQkJdmlub19kcnZkYXRhLT5kZWNvZGVyLm93bmVyID0gVklOT19OT19DSEFOTkVMOworCQkJCXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlcl9vd25lciA9IFZJTk9fTk9fQ0hBTk5FTDsKIAkJCQlyZXQgPSAtRUlOVkFMOwogCQkJCWdvdG8gb3V0OwogCQkJfQpAQCAtMjcwMCwxOCArMjY3MSwyMSBAQAogCQkJLyogRG9uJ3QgaG9sZCBzcGlubG9ja3Mgd2hpbGUgYXV0by1kZXRlY3Rpbmcgbm9ybQogCQkJICogYXMgaXQgbWF5IHRha2UgYSB3aGlsZS4uLiAqLwogCi0JCQlkYXRhX25vcm0gPSBWSU5PX0RBVEFfTk9STV9BVVRPX0VYVDsKLQotCQkJcmV0ID0gdmlub19zYWE3MTkxX3NldF9ub3JtKCZkYXRhX25vcm0pOwotCQkJaWYgKChyZXQgID09IC1FQlVTWSkgfHwgKHJldCA9PSAtRUFHQUlOKSkgewotCQkJCWRhdGFfbm9ybSA9IFZJTk9fREFUQV9OT1JNX1BBTDsKLQkJCQlyZXQgPSB2aW5vX3NhYTcxOTFfc2V0X25vcm0oJmRhdGFfbm9ybSk7CisJCQlyZXQgPSBkZWNvZGVyX2NhbGwodmlkZW8sIHF1ZXJ5c3RkLCAmbm9ybSk7CisJCQlpZiAoIXJldCkgeworCQkJCWZvciAoZGF0YV9ub3JtID0gMDsgZGF0YV9ub3JtIDwgMzsgZGF0YV9ub3JtKyspIHsKKwkJCQkJaWYgKHZpbm9fZGF0YV9ub3Jtc1tkYXRhX25vcm1dLnN0ZCAmIG5vcm0pCisJCQkJCQlicmVhazsKKwkJCQl9CisJCQkJaWYgKGRhdGFfbm9ybSA9PSAzKQorCQkJCQlkYXRhX25vcm0gPSBWSU5PX0RBVEFfTk9STV9QQUw7CisJCQkJcmV0ID0gZGVjb2Rlcl9jYWxsKHR1bmVyLCBzX3N0ZCwgbm9ybSk7CiAJCQl9CiAKIAkJCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKIAogCQkJaWYgKHJldCkgewotCQkJCXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5vd25lciA9IFZJTk9fTk9fQ0hBTk5FTDsKKwkJCQl2aW5vX2RydmRhdGEtPmRlY29kZXJfb3duZXIgPSBWSU5PX05PX0NIQU5ORUw7CiAJCQkJcmV0ID0gLUVJTlZBTDsKIAkJCQlnb3RvIG91dDsKIAkJCX0KQEAgLTI3MjgsMzcgKzI3MDIsMzEgQEAKIAkJCXZjcy0+ZGF0YV9ub3JtID0gdmNzMi0+ZGF0YV9ub3JtOwogCQl9CiAKLQkJaWYgKHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLm93bmVyID09IHZjcy0+Y2hhbm5lbCkgeworCQlpZiAodmlub19kcnZkYXRhLT5jYW1lcmFfb3duZXIgPT0gdmNzLT5jaGFubmVsKSB7CiAJCQkvKiBUcmFuc2ZlciB0aGUgb3duZXJzaGlwIG9yIHJlbGVhc2UgdGhlIGlucHV0ICovCiAJCQlpZiAodmNzMi0+aW5wdXQgPT0gVklOT19JTlBVVF9EMSkgewotCQkJCXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLm93bmVyID0gdmNzMi0+Y2hhbm5lbDsKKwkJCQl2aW5vX2RydmRhdGEtPmNhbWVyYV9vd25lciA9IHZjczItPmNoYW5uZWw7CiAJCQl9IGVsc2UgewotCQkJCWkyY19yZWxlYXNlX2NsaWVudCh2aW5vX2RydmRhdGEtPgotCQkJCQkJICAgY2FtZXJhLmRyaXZlcik7Ci0JCQkJdmlub19kcnZkYXRhLT5jYW1lcmEub3duZXIgPSBWSU5PX05PX0NIQU5ORUw7CisJCQkJdmlub19kcnZkYXRhLT5jYW1lcmFfb3duZXIgPSBWSU5PX05PX0NIQU5ORUw7CiAJCQl9CiAJCX0KIAkJYnJlYWs7CiAJY2FzZSBWSU5PX0lOUFVUX0QxOgotCQlpZiAoIXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLmRyaXZlcikgeworCQlpZiAoIXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhKSB7CiAJCQlyZXQgPSAtRUlOVkFMOwogCQkJZ290byBvdXQ7CiAJCX0KIAotCQlpZiAodmlub19kcnZkYXRhLT5jYW1lcmEub3duZXIgPT0gVklOT19OT19DSEFOTkVMKSB7Ci0JCQlpMmNfdXNlX2NsaWVudCh2aW5vX2RydmRhdGEtPmNhbWVyYS5kcml2ZXIpOwotCQkJdmlub19kcnZkYXRhLT5jYW1lcmEub3duZXIgPSB2Y3MtPmNoYW5uZWw7Ci0JCX0KKwkJaWYgKHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhX293bmVyID09IFZJTk9fTk9fQ0hBTk5FTCkKKwkJCXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhX293bmVyID0gdmNzLT5jaGFubmVsOwogCi0JCWlmICh2aW5vX2RydmRhdGEtPmRlY29kZXIub3duZXIgPT0gdmNzLT5jaGFubmVsKSB7CisJCWlmICh2aW5vX2RydmRhdGEtPmRlY29kZXJfb3duZXIgPT0gdmNzLT5jaGFubmVsKSB7CiAJCQkvKiBUcmFuc2ZlciB0aGUgb3duZXJzaGlwIG9yIHJlbGVhc2UgdGhlIGlucHV0ICovCiAJCQlpZiAoKHZjczItPmlucHV0ID09IFZJTk9fSU5QVVRfQ09NUE9TSVRFKSB8fAogCQkJCSAodmNzMi0+aW5wdXQgPT0gVklOT19JTlBVVF9TVklERU8pKSB7Ci0JCQkJdmlub19kcnZkYXRhLT5kZWNvZGVyLm93bmVyID0gdmNzMi0+Y2hhbm5lbDsKKwkJCQl2aW5vX2RydmRhdGEtPmRlY29kZXJfb3duZXIgPSB2Y3MyLT5jaGFubmVsOwogCQkJfSBlbHNlIHsKLQkJCQlpMmNfcmVsZWFzZV9jbGllbnQodmlub19kcnZkYXRhLT4KLQkJCQkJCSAgIGRlY29kZXIuZHJpdmVyKTsKLQkJCQl2aW5vX2RydmRhdGEtPmRlY29kZXIub3duZXIgPSBWSU5PX05PX0NIQU5ORUw7CisJCQkJdmlub19kcnZkYXRhLT5kZWNvZGVyX293bmVyID0gVklOT19OT19DSEFOTkVMOwogCQkJfQogCQl9CiAKQEAgLTI3OTUsMjAgKzI3NjMsMTggQEAKIAkvKiBSZWxlYXNlIG93bmVyc2hpcCBvZiB0aGUgY2hhbm5lbAogCSAqIGFuZCBpZiB0aGUgb3RoZXIgY2hhbm5lbCB0YWtlcyBpbnB1dCBmcm9tCiAJICogdGhlIHNhbWUgc291cmNlLCB0cmFuc2ZlciB0aGUgb3duZXJzaGlwICovCi0JaWYgKHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLm93bmVyID09IHZjcy0+Y2hhbm5lbCkgeworCWlmICh2aW5vX2RydmRhdGEtPmNhbWVyYV9vd25lciA9PSB2Y3MtPmNoYW5uZWwpIHsKIAkJaWYgKHZjczItPmlucHV0ID09IFZJTk9fSU5QVVRfRDEpIHsKLQkJCXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLm93bmVyID0gdmNzMi0+Y2hhbm5lbDsKKwkJCXZpbm9fZHJ2ZGF0YS0+Y2FtZXJhX293bmVyID0gdmNzMi0+Y2hhbm5lbDsKIAkJfSBlbHNlIHsKLQkJCWkyY19yZWxlYXNlX2NsaWVudCh2aW5vX2RydmRhdGEtPmNhbWVyYS5kcml2ZXIpOwotCQkJdmlub19kcnZkYXRhLT5jYW1lcmEub3duZXIgPSBWSU5PX05PX0NIQU5ORUw7CisJCQl2aW5vX2RydmRhdGEtPmNhbWVyYV9vd25lciA9IFZJTk9fTk9fQ0hBTk5FTDsKIAkJfQotCX0gZWxzZSBpZiAodmlub19kcnZkYXRhLT5kZWNvZGVyLm93bmVyID09IHZjcy0+Y2hhbm5lbCkgeworCX0gZWxzZSBpZiAodmlub19kcnZkYXRhLT5kZWNvZGVyX293bmVyID09IHZjcy0+Y2hhbm5lbCkgewogCQlpZiAoKHZjczItPmlucHV0ID09IFZJTk9fSU5QVVRfQ09NUE9TSVRFKSB8fAogCQkJICh2Y3MyLT5pbnB1dCA9PSBWSU5PX0lOUFVUX1NWSURFTykpIHsKLQkJCXZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5vd25lciA9IHZjczItPmNoYW5uZWw7CisJCQl2aW5vX2RydmRhdGEtPmRlY29kZXJfb3duZXIgPSB2Y3MyLT5jaGFubmVsOwogCQl9IGVsc2UgewotCQkJaTJjX3JlbGVhc2VfY2xpZW50KHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5kcml2ZXIpOwotCQkJdmlub19kcnZkYXRhLT5kZWNvZGVyLm93bmVyID0gVklOT19OT19DSEFOTkVMOworCQkJdmlub19kcnZkYXRhLT5kZWNvZGVyX293bmVyID0gVklOT19OT19DSEFOTkVMOwogCQl9CiAJfQogCXZjcy0+aW5wdXQgPSBWSU5PX0lOUFVUX05PTkU7CkBAIC0yODI5LDE4ICsyNzk1LDE2IEBACiAJc3dpdGNoICh2Y3MtPmlucHV0KSB7CiAJY2FzZSBWSU5PX0lOUFVUX0QxOgogCQkvKiBvbmx5IG9uZSAibm9ybSIgc3VwcG9ydGVkICovCi0JCWlmICgoZGF0YV9ub3JtICE9IFZJTk9fREFUQV9OT1JNX0QxKQotCQkgICAgJiYgKGRhdGFfbm9ybSAhPSBWSU5PX0RBVEFfTk9STV9BVVRPKQotCQkgICAgJiYgKGRhdGFfbm9ybSAhPSBWSU5PX0RBVEFfTk9STV9BVVRPX0VYVCkpCisJCWlmIChkYXRhX25vcm0gIT0gVklOT19EQVRBX05PUk1fRDEpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJYnJlYWs7CiAJY2FzZSBWSU5PX0lOUFVUX0NPTVBPU0lURToKIAljYXNlIFZJTk9fSU5QVVRfU1ZJREVPOiB7CisJCXY0bDJfc3RkX2lkIG5vcm07CisKIAkJaWYgKChkYXRhX25vcm0gIT0gVklOT19EQVRBX05PUk1fUEFMKQogCQkgICAgJiYgKGRhdGFfbm9ybSAhPSBWSU5PX0RBVEFfTk9STV9OVFNDKQotCQkgICAgJiYgKGRhdGFfbm9ybSAhPSBWSU5PX0RBVEFfTk9STV9TRUNBTSkKLQkJICAgICYmIChkYXRhX25vcm0gIT0gVklOT19EQVRBX05PUk1fQVVUTykKLQkJICAgICYmIChkYXRhX25vcm0gIT0gVklOT19EQVRBX05PUk1fQVVUT19FWFQpKQorCQkgICAgJiYgKGRhdGFfbm9ybSAhPSBWSU5PX0RBVEFfTk9STV9TRUNBTSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAogCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssICpmbGFncyk7CkBAIC0yODQ4LDcgKzI4MTIsOCBAQAogCQkvKiBEb24ndCBob2xkIHNwaW5sb2NrcyB3aGlsZSBzZXR0aW5nIG5vcm0KIAkJICogYXMgaXQgbWF5IHRha2UgYSB3aGlsZS4uLiAqLwogCi0JCWVyciA9IHZpbm9fc2FhNzE5MV9zZXRfbm9ybSgmZGF0YV9ub3JtKTsKKwkJbm9ybSA9IHZpbm9fZGF0YV9ub3Jtc1tkYXRhX25vcm1dLnN0ZDsKKwkJZXJyID0gZGVjb2Rlcl9jYWxsKHR1bmVyLCBzX3N0ZCwgbm9ybSk7CiAKIAkJc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgKmZsYWdzKTsKIApAQCAtMjg4NCw0MSArMjg0OSwxMyBAQAogCXJldHVybiBWSU5PX0RBVEFfRk1UX05PTkU7CiB9CiAKLXN0YXRpYyBpbnQgdmlub19lbnVtX2RhdGFfbm9ybShzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsIF9fdTMyIGluZGV4KQotewotCWludCBkYXRhX25vcm0gPSBWSU5PX0RBVEFfTk9STV9OT05FOwotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0Jc3dpdGNoKHZjcy0+aW5wdXQpIHsKLQljYXNlIFZJTk9fSU5QVVRfQ09NUE9TSVRFOgotCWNhc2UgVklOT19JTlBVVF9TVklERU86Ci0JCWlmIChpbmRleCA9PSAwKSB7Ci0JCQlkYXRhX25vcm0gPSBWSU5PX0RBVEFfTk9STV9QQUw7Ci0JCX0gZWxzZSBpZiAoaW5kZXggPT0gMSkgewotCQkJZGF0YV9ub3JtID0gVklOT19EQVRBX05PUk1fTlRTQzsKLQkJfSBlbHNlIGlmIChpbmRleCA9PSAyKSB7Ci0JCQlkYXRhX25vcm0gPSBWSU5PX0RBVEFfTk9STV9TRUNBTTsKLQkJfQotCQlicmVhazsKLQljYXNlIFZJTk9fSU5QVVRfRDE6Ci0JCWlmIChpbmRleCA9PSAwKSB7Ci0JCQlkYXRhX25vcm0gPSBWSU5PX0RBVEFfTk9STV9EMTsKLQkJfQotCQlicmVhazsKLQl9Ci0Jc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0KLQlyZXR1cm4gZGF0YV9ub3JtOwotfQotCi1zdGF0aWMgaW50IHZpbm9fZW51bV9pbnB1dChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsIF9fdTMyIGluZGV4KQorc3RhdGljIGludCB2aW5vX2ludF9lbnVtX2lucHV0KHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywgX191MzIgaW5kZXgpCiB7CiAJaW50IGlucHV0ID0gVklOT19JTlBVVF9OT05FOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0JaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5kcml2ZXIgJiYgdmlub19kcnZkYXRhLT5jYW1lcmEuZHJpdmVyKSB7CisJaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2RlciAmJiB2aW5vX2RydmRhdGEtPmNhbWVyYSkgewogCQlzd2l0Y2ggKGluZGV4KSB7CiAJCWNhc2UgMDoKIAkJCWlucHV0ID0gVklOT19JTlBVVF9DT01QT1NJVEU7CkBAIC0yOTMwLDcgKzI4NjcsNyBAQAogCQkJaW5wdXQgPSBWSU5PX0lOUFVUX0QxOwogCQkJYnJlYWs7CiAJCX0KLQl9IGVsc2UgaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5kcml2ZXIpIHsKKwl9IGVsc2UgaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2RlcikgewogCQlzd2l0Y2ggKGluZGV4KSB7CiAJCWNhc2UgMDoKIAkJCWlucHV0ID0gVklOT19JTlBVVF9DT01QT1NJVEU7CkBAIC0yOTM5LDcgKzI4NzYsNyBAQAogCQkJaW5wdXQgPSBWSU5PX0lOUFVUX1NWSURFTzsKIAkJCWJyZWFrOwogCQl9Ci0JfSBlbHNlIGlmICh2aW5vX2RydmRhdGEtPmNhbWVyYS5kcml2ZXIpIHsKKwl9IGVsc2UgaWYgKHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhKSB7CiAJCXN3aXRjaCAoaW5kZXgpIHsKIAkJY2FzZSAwOgogCQkJaW5wdXQgPSBWSU5PX0lOUFVUX0QxOwpAQCAtMjk1Nyw3ICsyODk0LDcgQEAKIAlfX3UzMiBpbmRleCA9IDA7CiAJLy8gRklYTUU6IGRldGVjdCB3aGVuIG5vIGlucHV0cyBhdmFpbGFibGUKIAotCWlmICh2aW5vX2RydmRhdGEtPmRlY29kZXIuZHJpdmVyICYmIHZpbm9fZHJ2ZGF0YS0+Y2FtZXJhLmRyaXZlcikgeworCWlmICh2aW5vX2RydmRhdGEtPmRlY29kZXIgJiYgdmlub19kcnZkYXRhLT5jYW1lcmEpIHsKIAkJc3dpdGNoICh2Y3MtPmlucHV0KSB7CiAJCWNhc2UgVklOT19JTlBVVF9DT01QT1NJVEU6CiAJCQlpbmRleCA9IDA7CkBAIC0yOTY5LDcgKzI5MDYsNyBAQAogCQkJaW5kZXggPSAyOwogCQkJYnJlYWs7CiAJCX0KLQl9IGVsc2UgaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2Rlci5kcml2ZXIpIHsKKwl9IGVsc2UgaWYgKHZpbm9fZHJ2ZGF0YS0+ZGVjb2RlcikgewogCQlzd2l0Y2ggKHZjcy0+aW5wdXQpIHsKIAkJY2FzZSBWSU5PX0lOUFVUX0NPTVBPU0lURToKIAkJCWluZGV4ID0gMDsKQEAgLTI5NzgsNyArMjkxNSw3IEBACiAJCQlpbmRleCA9IDE7CiAJCQlicmVhazsKIAkJfQotCX0gZWxzZSBpZiAodmlub19kcnZkYXRhLT5jYW1lcmEuZHJpdmVyKSB7CisJfSBlbHNlIGlmICh2aW5vX2RydmRhdGEtPmNhbWVyYSkgewogCQlzd2l0Y2ggKHZjcy0+aW5wdXQpIHsKIAkJY2FzZSBWSU5PX0lOUFVUX0QxOgogCQkJaW5kZXggPSAwOwpAQCAtMjk5MSw3ICsyOTI4LDggQEAKIAogLyogVjRMMiBpb2N0bHMgKi8KIAotc3RhdGljIHZvaWQgdmlub192NGwyX3F1ZXJ5Y2FwKHN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCkKK3N0YXRpYyBpbnQgdmlub19xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQogewogCW1lbXNldChjYXAsIDAsIHNpemVvZihzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5KSk7CiAKQEAgLTMwMDMsMTYgKzI5NDEsMTggQEAKIAkJVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8CiAJCVY0TDJfQ0FQX1NUUkVBTUlORzsKIAkvLyBWNEwyX0NBUF9PVkVSTEFZLCBWNEwyX0NBUF9SRUFEV1JJVEUKKwlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfZW51bWlucHV0KHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub19lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAogCQkJICAgICAgIHN0cnVjdCB2NGwyX2lucHV0ICppKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJX191MzIgaW5kZXggPSBpLT5pbmRleDsKIAlpbnQgaW5wdXQ7CiAJZHByaW50aygicmVxdWVzdGVkIGluZGV4ID0gJWRcbiIsIGluZGV4KTsKIAotCWlucHV0ID0gdmlub19lbnVtX2lucHV0KHZjcywgaW5kZXgpOworCWlucHV0ID0gdmlub19pbnRfZW51bV9pbnB1dCh2Y3MsIGluZGV4KTsKIAlpZiAoaW5wdXQgPT0gVklOT19JTlBVVF9OT05FKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMzAyMywyMCArMjk2MywxNSBAQAogCWktPnN0ZCA9IHZpbm9faW5wdXRzW2lucHV0XS5zdGQ7CiAJc3RyY3B5KGktPm5hbWUsIHZpbm9faW5wdXRzW2lucHV0XS5uYW1lKTsKIAotCWlmICgoaW5wdXQgPT0gVklOT19JTlBVVF9DT01QT1NJVEUpCi0JICAgIHx8IChpbnB1dCA9PSBWSU5PX0lOUFVUX1NWSURFTykpIHsKLQkJc3RydWN0IHNhYTcxOTFfc3RhdHVzIHN0YXR1czsKLQkJaTJjX2RlY29kZXJfY29tbWFuZChERUNPREVSX1NBQTcxOTFfR0VUX1NUQVRVUywgJnN0YXR1cyk7Ci0JCWktPnN0YXR1cyB8PSBzdGF0dXMuc2lnbmFsID8gMCA6IFY0TDJfSU5fU1RfTk9fU0lHTkFMOwotCQlpLT5zdGF0dXMgfD0gc3RhdHVzLmNvbG9yID8gMCA6IFY0TDJfSU5fU1RfTk9fQ09MT1I7Ci0JfQotCisJaWYgKGlucHV0ID09IFZJTk9fSU5QVVRfQ09NUE9TSVRFIHx8IGlucHV0ID09IFZJTk9fSU5QVVRfU1ZJREVPKQorCQlkZWNvZGVyX2NhbGwodmlkZW8sIGdfaW5wdXRfc3RhdHVzLCAmaS0+c3RhdHVzKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfZ19pbnB1dChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fZ19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgICAgdW5zaWduZWQgaW50ICppKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJX191MzIgaW5kZXg7CiAJaW50IGlucHV0OwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CkBAIC0zMDU3LDUyICsyOTkyLDI0IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlub192NGwyX3NfaW5wdXQoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAotCQkJICAgICB1bnNpZ25lZCBpbnQgKmkpCitzdGF0aWMgaW50IHZpbm9fc19pbnB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCSAgICAgdW5zaWduZWQgaW50IGkpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlpbnQgaW5wdXQ7Ci0JZHByaW50aygicmVxdWVzdGVkIGlucHV0ID0gJWRcbiIsICppKTsKKwlkcHJpbnRrKCJyZXF1ZXN0ZWQgaW5wdXQgPSAlZFxuIiwgaSk7CiAKLQlpbnB1dCA9IHZpbm9fZW51bV9pbnB1dCh2Y3MsICppKTsKKwlpbnB1dCA9IHZpbm9faW50X2VudW1faW5wdXQodmNzLCBpKTsKIAlpZiAoaW5wdXQgPT0gVklOT19JTlBVVF9OT05FKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCXJldHVybiB2aW5vX3NldF9pbnB1dCh2Y3MsIGlucHV0KTsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfZW51bXN0ZChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCi0JCQkgICAgIHN0cnVjdCB2NGwyX3N0YW5kYXJkICpzKQotewotCWludCBpbmRleCA9IHMtPmluZGV4OwotCWludCBkYXRhX25vcm07Ci0KLQlkYXRhX25vcm0gPSB2aW5vX2VudW1fZGF0YV9ub3JtKHZjcywgaW5kZXgpOwotCWRwcmludGsoInN0YW5kYXJkIGluZGV4ID0gJWRcbiIsIGluZGV4KTsKLQotCWlmIChkYXRhX25vcm0gPT0gVklOT19EQVRBX05PUk1fTk9ORSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQlkcHJpbnRrKCJzdGFuZGFyZCBuYW1lID0gJXNcbiIsCi0JICAgICAgIHZpbm9fZGF0YV9ub3Jtc1tkYXRhX25vcm1dLmRlc2NyaXB0aW9uKTsKLQotCW1lbXNldChzLCAwLCBzaXplb2Yoc3RydWN0IHY0bDJfc3RhbmRhcmQpKTsKLQlzLT5pbmRleCA9IGluZGV4OwotCi0Jcy0+aWQgPSB2aW5vX2RhdGFfbm9ybXNbZGF0YV9ub3JtXS5zdGQ7Ci0Jcy0+ZnJhbWVwZXJpb2QubnVtZXJhdG9yID0gMTsKLQlzLT5mcmFtZXBlcmlvZC5kZW5vbWluYXRvciA9Ci0JCXZpbm9fZGF0YV9ub3Jtc1tkYXRhX25vcm1dLmZwc19tYXg7Ci0Jcy0+ZnJhbWVsaW5lcyA9Ci0JCXZpbm9fZGF0YV9ub3Jtc1tkYXRhX25vcm1dLmZyYW1lbGluZXM7Ci0Jc3RyY3B5KHMtPm5hbWUsCi0JICAgICAgIHZpbm9fZGF0YV9ub3Jtc1tkYXRhX25vcm1dLmRlc2NyaXB0aW9uKTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9xdWVyeXN0ZChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fcXVlcnlzdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCiAJCQkgICAgICB2NGwyX3N0ZF9pZCAqc3RkKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZXJyID0gMDsKIApAQCAtMzExNCwxOSArMzAyMSw3IEBACiAJCWJyZWFrOwogCWNhc2UgVklOT19JTlBVVF9DT01QT1NJVEU6CiAJY2FzZSBWSU5PX0lOUFVUX1NWSURFTzogewotCQlzdHJ1Y3Qgc2FhNzE5MV9zdGF0dXMgc3RhdHVzOwotCi0JCWkyY19kZWNvZGVyX2NvbW1hbmQoREVDT0RFUl9TQUE3MTkxX0dFVF9TVEFUVVMsICZzdGF0dXMpOwotCi0JCWlmIChzdGF0dXMuc2lnbmFsKSB7Ci0JCQlpZiAoc3RhdHVzLnNpZ25hbF82MGh6KSB7Ci0JCQkJKnN0ZCA9IFY0TDJfU1REX05UU0M7Ci0JCQl9IGVsc2UgewotCQkJCSpzdGQgPSBWNEwyX1NURF9QQUwgfCBWNEwyX1NURF9TRUNBTTsKLQkJCX0KLQkJfSBlbHNlIHsKLQkJCSpzdGQgPSB2aW5vX2lucHV0c1t2Y3MtPmlucHV0XS5zdGQ7Ci0JCX0KKwkJZGVjb2Rlcl9jYWxsKHZpZGVvLCBxdWVyeXN0ZCwgc3RkKTsKIAkJYnJlYWs7CiAJfQogCWRlZmF1bHQ6CkBAIC0zMTM4LDkgKzMwMzMsMTAgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9nX3N0ZChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fZ19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCiAJCQkgICB2NGwyX3N0ZF9pZCAqc3RkKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKQEAgLTMxNTMsOSArMzA0OSwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9zX3N0ZChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCiAJCQkgICB2NGwyX3N0ZF9pZCAqc3RkKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmV0ID0gMDsKIApAQCAtMzE3NiwxMiArMzA3Myw3IEBACiAJCWlmICh2Y3MtPmlucHV0ID09IFZJTk9fSU5QVVRfRDEpCiAJCQlnb3RvIG91dDsKIAotCQlpZiAoKCgqc3RkKSAmIFY0TDJfU1REX1BBTCkKLQkJICAgICYmICgoKnN0ZCkgJiBWNEwyX1NURF9OVFNDKQotCQkgICAgJiYgKCgqc3RkKSAmIFY0TDJfU1REX1NFQ0FNKSkgewotCQkJcmV0ID0gdmlub19zZXRfZGF0YV9ub3JtKHZjcywgVklOT19EQVRBX05PUk1fQVVUT19FWFQsCi0JCQkJCQkgJmZsYWdzKTsKLQkJfSBlbHNlIGlmICgoKnN0ZCkgJiBWNEwyX1NURF9QQUwpIHsKKwkJaWYgKCgqc3RkKSAmIFY0TDJfU1REX1BBTCkgewogCQkJcmV0ID0gdmlub19zZXRfZGF0YV9ub3JtKHZjcywgVklOT19EQVRBX05PUk1fUEFMLAogCQkJCQkJICZmbGFncyk7CiAJCX0gZWxzZSBpZiAoKCpzdGQpICYgVjRMMl9TVERfTlRTQykgewpAQCAtMzIwNywxODUgKzMwOTksMTQ0IEBACiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfZW51bV9mbXQoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAorc3RhdGljIGludCB2aW5vX2VudW1fZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCiAJCQkgICAgICBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmZCkKIHsKLQllbnVtIHY0bDJfYnVmX3R5cGUgdHlwZSA9IGZkLT50eXBlOwotCWludCBpbmRleCA9IGZkLT5pbmRleDsKLQlkcHJpbnRrKCJmb3JtYXQgaW5kZXggPSAlZFxuIiwgaW5kZXgpOworCWRwcmludGsoImZvcm1hdCBpbmRleCA9ICVkXG4iLCBmZC0+aW5kZXgpOwogCi0Jc3dpdGNoIChmZC0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQlpZiAoKGZkLT5pbmRleCA8IDApIHx8Ci0JCSAgICAoZmQtPmluZGV4ID49IFZJTk9fREFUQV9GTVRfQ09VTlQpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWRwcmludGsoImZvcm1hdCBuYW1lID0gJXNcbiIsCi0JCSAgICAgICB2aW5vX2RhdGFfZm9ybWF0c1tpbmRleF0uZGVzY3JpcHRpb24pOwotCi0JCW1lbXNldChmZCwgMCwgc2l6ZW9mKHN0cnVjdCB2NGwyX2ZtdGRlc2MpKTsKLQkJZmQtPmluZGV4ID0gaW5kZXg7Ci0JCWZkLT50eXBlID0gdHlwZTsKLQkJZmQtPnBpeGVsZm9ybWF0ID0gdmlub19kYXRhX2Zvcm1hdHNbaW5kZXhdLnBpeGVsZm9ybWF0OwotCQlzdHJjcHkoZmQtPmRlc2NyaXB0aW9uLCB2aW5vX2RhdGFfZm9ybWF0c1tpbmRleF0uZGVzY3JpcHRpb24pOwotCQlicmVhazsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQlkZWZhdWx0OgorCWlmIChmZC0+aW5kZXggPj0gVklOT19EQVRBX0ZNVF9DT1VOVCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCWRwcmludGsoImZvcm1hdCBuYW1lID0gJXNcbiIsIHZpbm9fZGF0YV9mb3JtYXRzW2ZkLT5pbmRleF0uZGVzY3JpcHRpb24pOwogCisJZmQtPnBpeGVsZm9ybWF0ID0gdmlub19kYXRhX2Zvcm1hdHNbZmQtPmluZGV4XS5waXhlbGZvcm1hdDsKKwlzdHJjcHkoZmQtPmRlc2NyaXB0aW9uLCB2aW5vX2RhdGFfZm9ybWF0c1tmZC0+aW5kZXhdLmRlc2NyaXB0aW9uKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfdHJ5X2ZtdChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fdHJ5X2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAogCQkJICAgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzIHRlbXB2Y3M7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwZiA9ICZmLT5mbXQucGl4OwogCi0Jc3dpdGNoIChmLT50eXBlKSB7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6IHsKLQkJc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCAqcGYgPSAmZi0+Zm10LnBpeDsKKwlkcHJpbnRrKCJyZXF1ZXN0ZWQ6IHcgPSAlZCwgaCA9ICVkXG4iLAorCQkJcGYtPndpZHRoLCBwZi0+aGVpZ2h0KTsKIAotCQlkcHJpbnRrKCJyZXF1ZXN0ZWQ6IHcgPSAlZCwgaCA9ICVkXG4iLAotCQkgICAgICAgcGYtPndpZHRoLCBwZi0+aGVpZ2h0KTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7CisJbWVtY3B5KCZ0ZW1wdmNzLCB2Y3MsIHNpemVvZihzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzKSk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCQltZW1jcHkoJnRlbXB2Y3MsIHZjcywgc2l6ZW9mKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MpKTsKLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0KLQkJdGVtcHZjcy5kYXRhX2Zvcm1hdCA9IHZpbm9fZmluZF9kYXRhX2Zvcm1hdChwZi0+cGl4ZWxmb3JtYXQpOwotCQlpZiAodGVtcHZjcy5kYXRhX2Zvcm1hdCA9PSBWSU5PX0RBVEFfRk1UX05PTkUpIHsKLQkJCXRlbXB2Y3MuZGF0YV9mb3JtYXQgPSBWSU5PX0RBVEFfRk1UX0dSRVk7Ci0JCQlwZi0+cGl4ZWxmb3JtYXQgPQotCQkJCXZpbm9fZGF0YV9mb3JtYXRzW3RlbXB2Y3MuZGF0YV9mb3JtYXRdLgotCQkJCXBpeGVsZm9ybWF0OwotCQl9Ci0KLQkJLyogZGF0YSBmb3JtYXQgbXVzdCBiZSBzZXQgYmVmb3JlIGNsaXBwaW5nL3NjYWxpbmcgKi8KLQkJdmlub19zZXRfc2NhbGluZygmdGVtcHZjcywgcGYtPndpZHRoLCBwZi0+aGVpZ2h0KTsKLQotCQlkcHJpbnRrKCJkYXRhIGZvcm1hdCA9ICVzXG4iLAotCQkgICAgICAgdmlub19kYXRhX2Zvcm1hdHNbdGVtcHZjcy5kYXRhX2Zvcm1hdF0uZGVzY3JpcHRpb24pOwotCi0JCXBmLT53aWR0aCA9ICh0ZW1wdmNzLmNsaXBwaW5nLnJpZ2h0IC0gdGVtcHZjcy5jbGlwcGluZy5sZWZ0KSAvCi0JCQl0ZW1wdmNzLmRlY2ltYXRpb247Ci0JCXBmLT5oZWlnaHQgPSAodGVtcHZjcy5jbGlwcGluZy5ib3R0b20gLSB0ZW1wdmNzLmNsaXBwaW5nLnRvcCkgLwotCQkJdGVtcHZjcy5kZWNpbWF0aW9uOwotCi0JCXBmLT5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKLQkJcGYtPmJ5dGVzcGVybGluZSA9IHRlbXB2Y3MubGluZV9zaXplOwotCQlwZi0+c2l6ZWltYWdlID0gdGVtcHZjcy5saW5lX3NpemUgKgotCQkJKHRlbXB2Y3MuY2xpcHBpbmcuYm90dG9tIC0gdGVtcHZjcy5jbGlwcGluZy50b3ApIC8KLQkJCXRlbXB2Y3MuZGVjaW1hdGlvbjsKLQkJcGYtPmNvbG9yc3BhY2UgPQotCQkJdmlub19kYXRhX2Zvcm1hdHNbdGVtcHZjcy5kYXRhX2Zvcm1hdF0uY29sb3JzcGFjZTsKLQotCQlwZi0+cHJpdiA9IDA7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludCB2aW5vX3Y0bDJfZ19mbXQoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAotCQkJICAgc3RydWN0IHY0bDJfZm9ybWF0ICpmKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0KLQlzd2l0Y2ggKGYtPnR5cGUpIHsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTogewotCQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwZiA9ICZmLT5mbXQucGl4OwotCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQotCQlwZi0+d2lkdGggPSAodmNzLT5jbGlwcGluZy5yaWdodCAtIHZjcy0+Y2xpcHBpbmcubGVmdCkgLwotCQkJdmNzLT5kZWNpbWF0aW9uOwotCQlwZi0+aGVpZ2h0ID0gKHZjcy0+Y2xpcHBpbmcuYm90dG9tIC0gdmNzLT5jbGlwcGluZy50b3ApIC8KLQkJCXZjcy0+ZGVjaW1hdGlvbjsKKwl0ZW1wdmNzLmRhdGFfZm9ybWF0ID0gdmlub19maW5kX2RhdGFfZm9ybWF0KHBmLT5waXhlbGZvcm1hdCk7CisJaWYgKHRlbXB2Y3MuZGF0YV9mb3JtYXQgPT0gVklOT19EQVRBX0ZNVF9OT05FKSB7CisJCXRlbXB2Y3MuZGF0YV9mb3JtYXQgPSBWSU5PX0RBVEFfRk1UX0dSRVk7CiAJCXBmLT5waXhlbGZvcm1hdCA9Ci0JCQl2aW5vX2RhdGFfZm9ybWF0c1t2Y3MtPmRhdGFfZm9ybWF0XS5waXhlbGZvcm1hdDsKLQotCQlwZi0+ZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7Ci0JCXBmLT5ieXRlc3BlcmxpbmUgPSB2Y3MtPmxpbmVfc2l6ZTsKLQkJcGYtPnNpemVpbWFnZSA9IHZjcy0+bGluZV9zaXplICoKLQkJCSh2Y3MtPmNsaXBwaW5nLmJvdHRvbSAtIHZjcy0+Y2xpcHBpbmcudG9wKSAvCi0JCQl2Y3MtPmRlY2ltYXRpb247Ci0JCXBmLT5jb2xvcnNwYWNlID0KLQkJCXZpbm9fZGF0YV9mb3JtYXRzW3Zjcy0+ZGF0YV9mb3JtYXRdLmNvbG9yc3BhY2U7Ci0KLQkJcGYtPnByaXYgPSAwOwotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CisJCQl2aW5vX2RhdGFfZm9ybWF0c1t0ZW1wdmNzLmRhdGFfZm9ybWF0XS4KKwkJCXBpeGVsZm9ybWF0OwogCX0KIAorCS8qIGRhdGEgZm9ybWF0IG11c3QgYmUgc2V0IGJlZm9yZSBjbGlwcGluZy9zY2FsaW5nICovCisJdmlub19zZXRfc2NhbGluZygmdGVtcHZjcywgcGYtPndpZHRoLCBwZi0+aGVpZ2h0KTsKKworCWRwcmludGsoImRhdGEgZm9ybWF0ID0gJXNcbiIsCisJCQl2aW5vX2RhdGFfZm9ybWF0c1t0ZW1wdmNzLmRhdGFfZm9ybWF0XS5kZXNjcmlwdGlvbik7CisKKwlwZi0+d2lkdGggPSAodGVtcHZjcy5jbGlwcGluZy5yaWdodCAtIHRlbXB2Y3MuY2xpcHBpbmcubGVmdCkgLworCQl0ZW1wdmNzLmRlY2ltYXRpb247CisJcGYtPmhlaWdodCA9ICh0ZW1wdmNzLmNsaXBwaW5nLmJvdHRvbSAtIHRlbXB2Y3MuY2xpcHBpbmcudG9wKSAvCisJCXRlbXB2Y3MuZGVjaW1hdGlvbjsKKworCXBmLT5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwlwZi0+Ynl0ZXNwZXJsaW5lID0gdGVtcHZjcy5saW5lX3NpemU7CisJcGYtPnNpemVpbWFnZSA9IHRlbXB2Y3MubGluZV9zaXplICoKKwkJKHRlbXB2Y3MuY2xpcHBpbmcuYm90dG9tIC0gdGVtcHZjcy5jbGlwcGluZy50b3ApIC8KKwkJdGVtcHZjcy5kZWNpbWF0aW9uOworCXBmLT5jb2xvcnNwYWNlID0KKwkJdmlub19kYXRhX2Zvcm1hdHNbdGVtcHZjcy5kYXRhX2Zvcm1hdF0uY29sb3JzcGFjZTsKKworCXBmLT5wcml2ID0gMDsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfc19mbXQoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAorc3RhdGljIGludCB2aW5vX2dfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCiAJCQkgICBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmYpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBmID0gJmYtPmZtdC5waXg7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7CisKKwlwZi0+d2lkdGggPSAodmNzLT5jbGlwcGluZy5yaWdodCAtIHZjcy0+Y2xpcHBpbmcubGVmdCkgLworCQl2Y3MtPmRlY2ltYXRpb247CisJcGYtPmhlaWdodCA9ICh2Y3MtPmNsaXBwaW5nLmJvdHRvbSAtIHZjcy0+Y2xpcHBpbmcudG9wKSAvCisJCXZjcy0+ZGVjaW1hdGlvbjsKKwlwZi0+cGl4ZWxmb3JtYXQgPQorCQl2aW5vX2RhdGFfZm9ybWF0c1t2Y3MtPmRhdGFfZm9ybWF0XS5waXhlbGZvcm1hdDsKKworCXBmLT5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwlwZi0+Ynl0ZXNwZXJsaW5lID0gdmNzLT5saW5lX3NpemU7CisJcGYtPnNpemVpbWFnZSA9IHZjcy0+bGluZV9zaXplICoKKwkJKHZjcy0+Y2xpcHBpbmcuYm90dG9tIC0gdmNzLT5jbGlwcGluZy50b3ApIC8KKwkJdmNzLT5kZWNpbWF0aW9uOworCXBmLT5jb2xvcnNwYWNlID0KKwkJdmlub19kYXRhX2Zvcm1hdHNbdmNzLT5kYXRhX2Zvcm1hdF0uY29sb3JzcGFjZTsKKworCXBmLT5wcml2ID0gMDsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpbm9fc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCSAgIHN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKK3sKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWludCBkYXRhX2Zvcm1hdDsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB2NGwyX3BpeF9mb3JtYXQgKnBmID0gJmYtPmZtdC5waXg7CiAKLQlzd2l0Y2ggKGYtPnR5cGUpIHsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTogewotCQlzdHJ1Y3QgdjRsMl9waXhfZm9ybWF0ICpwZiA9ICZmLT5mbXQucGl4OworCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7CisJZGF0YV9mb3JtYXQgPSB2aW5vX2ZpbmRfZGF0YV9mb3JtYXQocGYtPnBpeGVsZm9ybWF0KTsKIAotCQlkYXRhX2Zvcm1hdCA9IHZpbm9fZmluZF9kYXRhX2Zvcm1hdChwZi0+cGl4ZWxmb3JtYXQpOwotCi0JCWlmIChkYXRhX2Zvcm1hdCA9PSBWSU5PX0RBVEFfRk1UX05PTkUpIHsKLQkJCXZjcy0+ZGF0YV9mb3JtYXQgPSBWSU5PX0RBVEFfRk1UX0dSRVk7Ci0JCQlwZi0+cGl4ZWxmb3JtYXQgPQotCQkJCXZpbm9fZGF0YV9mb3JtYXRzW3Zjcy0+ZGF0YV9mb3JtYXRdLgotCQkJCXBpeGVsZm9ybWF0OwotCQl9IGVsc2UgewotCQkJdmNzLT5kYXRhX2Zvcm1hdCA9IGRhdGFfZm9ybWF0OwotCQl9Ci0KLQkJLyogZGF0YSBmb3JtYXQgbXVzdCBiZSBzZXQgYmVmb3JlIGNsaXBwaW5nL3NjYWxpbmcgKi8KLQkJdmlub19zZXRfc2NhbGluZyh2Y3MsIHBmLT53aWR0aCwgcGYtPmhlaWdodCk7Ci0KLQkJZHByaW50aygiZGF0YSBmb3JtYXQgPSAlc1xuIiwKLQkJICAgICAgIHZpbm9fZGF0YV9mb3JtYXRzW3Zjcy0+ZGF0YV9mb3JtYXRdLmRlc2NyaXB0aW9uKTsKLQotCQlwZi0+d2lkdGggPSB2Y3MtPmNsaXBwaW5nLnJpZ2h0IC0gdmNzLT5jbGlwcGluZy5sZWZ0OwotCQlwZi0+aGVpZ2h0ID0gdmNzLT5jbGlwcGluZy5ib3R0b20gLSB2Y3MtPmNsaXBwaW5nLnRvcDsKLQotCQlwZi0+ZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7Ci0JCXBmLT5ieXRlc3BlcmxpbmUgPSB2Y3MtPmxpbmVfc2l6ZTsKLQkJcGYtPnNpemVpbWFnZSA9IHZjcy0+bGluZV9zaXplICoKLQkJCSh2Y3MtPmNsaXBwaW5nLmJvdHRvbSAtIHZjcy0+Y2xpcHBpbmcudG9wKSAvCi0JCQl2Y3MtPmRlY2ltYXRpb247Ci0JCXBmLT5jb2xvcnNwYWNlID0KLQkJCXZpbm9fZGF0YV9mb3JtYXRzW3Zjcy0+ZGF0YV9mb3JtYXRdLmNvbG9yc3BhY2U7Ci0KLQkJcGYtPnByaXYgPSAwOwotCi0JCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CisJaWYgKGRhdGFfZm9ybWF0ID09IFZJTk9fREFUQV9GTVRfTk9ORSkgeworCQl2Y3MtPmRhdGFfZm9ybWF0ID0gVklOT19EQVRBX0ZNVF9HUkVZOworCQlwZi0+cGl4ZWxmb3JtYXQgPQorCQkJdmlub19kYXRhX2Zvcm1hdHNbdmNzLT5kYXRhX2Zvcm1hdF0uCisJCQlwaXhlbGZvcm1hdDsKKwl9IGVsc2UgeworCQl2Y3MtPmRhdGFfZm9ybWF0ID0gZGF0YV9mb3JtYXQ7CiAJfQogCisJLyogZGF0YSBmb3JtYXQgbXVzdCBiZSBzZXQgYmVmb3JlIGNsaXBwaW5nL3NjYWxpbmcgKi8KKwl2aW5vX3NldF9zY2FsaW5nKHZjcywgcGYtPndpZHRoLCBwZi0+aGVpZ2h0KTsKKworCWRwcmludGsoImRhdGEgZm9ybWF0ID0gJXNcbiIsCisJICAgICAgIHZpbm9fZGF0YV9mb3JtYXRzW3Zjcy0+ZGF0YV9mb3JtYXRdLmRlc2NyaXB0aW9uKTsKKworCXBmLT53aWR0aCA9IHZjcy0+Y2xpcHBpbmcucmlnaHQgLSB2Y3MtPmNsaXBwaW5nLmxlZnQ7CisJcGYtPmhlaWdodCA9IHZjcy0+Y2xpcHBpbmcuYm90dG9tIC0gdmNzLT5jbGlwcGluZy50b3A7CisKKwlwZi0+ZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJcGYtPmJ5dGVzcGVybGluZSA9IHZjcy0+bGluZV9zaXplOworCXBmLT5zaXplaW1hZ2UgPSB2Y3MtPmxpbmVfc2l6ZSAqCisJCSh2Y3MtPmNsaXBwaW5nLmJvdHRvbSAtIHZjcy0+Y2xpcHBpbmcudG9wKSAvCisJCXZjcy0+ZGVjaW1hdGlvbjsKKwlwZi0+Y29sb3JzcGFjZSA9CisJCXZpbm9fZGF0YV9mb3JtYXRzW3Zjcy0+ZGF0YV9mb3JtYXRdLmNvbG9yc3BhY2U7CisKKwlwZi0+cHJpdiA9IDA7CisKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfY3JvcGNhcChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fY3JvcGNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgICAgc3RydWN0IHY0bDJfY3JvcGNhcCAqY2NhcCkKIHsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWNvbnN0IHN0cnVjdCB2aW5vX2RhdGFfbm9ybSAqbm9ybTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCkBAIC0zNDE1LDkgKzMyNjYsMTAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfZ19jcm9wKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub19nX2Nyb3Aoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCiAJCQkgICAgc3RydWN0IHY0bDJfY3JvcCAqYykKIHsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzd2l0Y2ggKGMtPnR5cGUpIHsKQEAgLTM0MzksOSArMzI5MSwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9zX2Nyb3Aoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAorc3RhdGljIGludCB2aW5vX3NfY3JvcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgICBzdHJ1Y3QgdjRsMl9jcm9wICpjKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXN3aXRjaCAoYy0+dHlwZSkgewpAQCAtMzQ2MSwxMDggKzMzMTQsODMgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfZ19wYXJtKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub19nX3Bhcm0oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCiAJCQkgICAgc3RydWN0IHY0bDJfc3RyZWFtcGFybSAqc3ApCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOworCXN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtICpjcCA9ICZzcC0+cGFybS5jYXB0dXJlOwogCi0Jc3dpdGNoIChzcC0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOiB7Ci0JCXN0cnVjdCB2NGwyX2NhcHR1cmVwYXJtICpjcCA9ICZzcC0+cGFybS5jYXB0dXJlOwotCQltZW1zZXQoY3AsIDAsIHNpemVvZihzdHJ1Y3QgdjRsMl9jYXB0dXJlcGFybSkpOworCWNwLT5jYXBhYmlsaXR5ID0gVjRMMl9DQVBfVElNRVBFUkZSQU1FOworCWNwLT50aW1lcGVyZnJhbWUubnVtZXJhdG9yID0gMTsKIAotCQljcC0+Y2FwYWJpbGl0eSA9IFY0TDJfQ0FQX1RJTUVQRVJGUkFNRTsKLQkJY3AtPnRpbWVwZXJmcmFtZS5udW1lcmF0b3IgPSAxOworCXNwaW5fbG9ja19pcnFzYXZlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKIAotCQlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7CisJY3AtPnRpbWVwZXJmcmFtZS5kZW5vbWluYXRvciA9IHZjcy0+ZnBzOwogCi0JCWNwLT50aW1lcGVyZnJhbWUuZGVub21pbmF0b3IgPSB2Y3MtPmZwczsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKIAotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ2aW5vX2RydmRhdGEtPmlucHV0X2xvY2ssIGZsYWdzKTsKLQotCQkvLyBUT0RPOiBjcC0+cmVhZGJ1ZmZlcnMgPSB4eHg7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1ZFUkxBWToKLQlkZWZhdWx0OgotCQlyZXR1cm4gLUVJTlZBTDsKLQl9CisJLyogVE9ETzogY3AtPnJlYWRidWZmZXJzID0geHh4OyAqLwogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlub192NGwyX3NfcGFybShzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fc19wYXJtKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAogCQkJICAgIHN0cnVjdCB2NGwyX3N0cmVhbXBhcm0gKnNwKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlzdHJ1Y3QgdjRsMl9jYXB0dXJlcGFybSAqY3AgPSAmc3AtPnBhcm0uY2FwdHVyZTsKIAotCXN3aXRjaCAoc3AtPnR5cGUpIHsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTogewotCQlzdHJ1Y3QgdjRsMl9jYXB0dXJlcGFybSAqY3AgPSAmc3AtPnBhcm0uY2FwdHVyZTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJnZpbm9fZHJ2ZGF0YS0+aW5wdXRfbG9jaywgZmxhZ3MpOwotCi0JCWlmICgoY3AtPnRpbWVwZXJmcmFtZS5udW1lcmF0b3IgPT0gMCkgfHwKLQkJICAgIChjcC0+dGltZXBlcmZyYW1lLmRlbm9taW5hdG9yID09IDApKSB7Ci0JCQkvKiByZXNldCBmcmFtZXJhdGUgKi8KLQkJCXZpbm9fc2V0X2RlZmF1bHRfZnJhbWVyYXRlKHZjcyk7Ci0JCX0gZWxzZSB7Ci0JCQl2aW5vX3NldF9mcmFtZXJhdGUodmNzLCBjcC0+dGltZXBlcmZyYW1lLmRlbm9taW5hdG9yIC8KLQkJCQkJICAgY3AtPnRpbWVwZXJmcmFtZS5udW1lcmF0b3IpOwotCQl9Ci0KLQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7Ci0KLQkJLy8gVE9ETzogc2V0IGJ1ZmZlcnMgYWNjb3JkaW5nIHRvIGNwLT5yZWFkYnVmZmVycwotCQlicmVhazsKKwlpZiAoKGNwLT50aW1lcGVyZnJhbWUubnVtZXJhdG9yID09IDApIHx8CisJICAgIChjcC0+dGltZXBlcmZyYW1lLmRlbm9taW5hdG9yID09IDApKSB7CisJCS8qIHJlc2V0IGZyYW1lcmF0ZSAqLworCQl2aW5vX3NldF9kZWZhdWx0X2ZyYW1lcmF0ZSh2Y3MpOworCX0gZWxzZSB7CisJCXZpbm9fc2V0X2ZyYW1lcmF0ZSh2Y3MsIGNwLT50aW1lcGVyZnJhbWUuZGVub21pbmF0b3IgLworCQkJCSAgIGNwLT50aW1lcGVyZnJhbWUubnVtZXJhdG9yKTsKIAl9Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQorCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aW5vX3Y0bDJfcmVxYnVmcyhzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fcmVxYnVmcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgICAgc3RydWN0IHY0bDJfcmVxdWVzdGJ1ZmZlcnMgKnJiKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKIAlpZiAodmNzLT5yZWFkaW5nKQogCQlyZXR1cm4gLUVCVVNZOwogCi0Jc3dpdGNoIChyYi0+dHlwZSkgewotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOiB7Ci0JCS8vIFRPRE86IGNoZWNrIHF1ZXVlIHR5cGUKLQkJaWYgKHJiLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkgewotCQkJZHByaW50aygidHlwZSBub3QgbW1hcFxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwkvKiBUT0RPOiBjaGVjayBxdWV1ZSB0eXBlICovCisJaWYgKHJiLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkgeworCQlkcHJpbnRrKCJ0eXBlIG5vdCBtbWFwXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJZHByaW50aygiY291bnQgPSAlZFxuIiwgcmItPmNvdW50KTsKKwlpZiAocmItPmNvdW50ID4gMCkgeworCQlpZiAodmlub19pc19jYXB0dXJpbmcodmNzKSkgeworCQkJZHByaW50aygiYnVzeSwgY2FwdHVyaW5nXG4iKTsKKwkJCXJldHVybiAtRUJVU1k7CiAJCX0KIAotCQlkcHJpbnRrKCJjb3VudCA9ICVkXG4iLCByYi0+Y291bnQpOwotCQlpZiAocmItPmNvdW50ID4gMCkgewotCQkJaWYgKHZpbm9faXNfY2FwdHVyaW5nKHZjcykpIHsKLQkJCQlkcHJpbnRrKCJidXN5LCBjYXB0dXJpbmdcbiIpOwotCQkJCXJldHVybiAtRUJVU1k7Ci0JCQl9Ci0KLQkJCWlmICh2aW5vX3F1ZXVlX2hhc19tYXBwZWRfYnVmZmVycygmdmNzLT5mYl9xdWV1ZSkpIHsKLQkJCQlkcHJpbnRrKCJidXN5LCBidWZmZXJzIHN0aWxsIG1hcHBlZFxuIik7Ci0JCQkJcmV0dXJuIC1FQlVTWTsKLQkJCX0gZWxzZSB7Ci0JCQkJdmNzLT5zdHJlYW1pbmcgPSAwOwotCQkJCXZpbm9fcXVldWVfZnJlZSgmdmNzLT5mYl9xdWV1ZSk7Ci0JCQkJdmlub19xdWV1ZV9pbml0KCZ2Y3MtPmZiX3F1ZXVlLCAmcmItPmNvdW50KTsKLQkJCX0KKwkJaWYgKHZpbm9fcXVldWVfaGFzX21hcHBlZF9idWZmZXJzKCZ2Y3MtPmZiX3F1ZXVlKSkgeworCQkJZHByaW50aygiYnVzeSwgYnVmZmVycyBzdGlsbCBtYXBwZWRcbiIpOworCQkJcmV0dXJuIC1FQlVTWTsKIAkJfSBlbHNlIHsKIAkJCXZjcy0+c3RyZWFtaW5nID0gMDsKLQkJCXZpbm9fY2FwdHVyZV9zdG9wKHZjcyk7CiAJCQl2aW5vX3F1ZXVlX2ZyZWUoJnZjcy0+ZmJfcXVldWUpOworCQkJdmlub19xdWV1ZV9pbml0KCZ2Y3MtPmZiX3F1ZXVlLCAmcmItPmNvdW50KTsKIAkJfQotCQlicmVhazsKLQl9Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JZGVmYXVsdDoKLQkJcmV0dXJuIC1FSU5WQUw7CisJfSBlbHNlIHsKKwkJdmNzLT5zdHJlYW1pbmcgPSAwOworCQl2aW5vX2NhcHR1cmVfc3RvcCh2Y3MpOworCQl2aW5vX3F1ZXVlX2ZyZWUoJnZjcy0+ZmJfcXVldWUpOwogCX0KIAogCXJldHVybiAwOwpAQCAtMzYwNiwxNTYgKzM0MzQsMTM1IEBACiAJCWZiLT5pZCwgZmItPnNpemUsIGZiLT5kYXRhX3NpemUsIGZiLT5vZmZzZXQpOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9xdWVyeWJ1ZihzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fcXVlcnlidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCiAJCQkgICAgICBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqZmI7CisKIAlpZiAodmNzLT5yZWFkaW5nKQogCQlyZXR1cm4gLUVCVVNZOwogCi0Jc3dpdGNoIChiLT50eXBlKSB7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6IHsKLQkJc3RydWN0IHZpbm9fZnJhbWVidWZmZXIgKmZiOwotCi0JCS8vIFRPRE86IGNoZWNrIHF1ZXVlIHR5cGUKLQkJaWYgKGItPmluZGV4ID49IHZpbm9fcXVldWVfZ2V0X2xlbmd0aCgmdmNzLT5mYl9xdWV1ZSkpIHsKLQkJCWRwcmludGsoImludmFsaWQgaW5kZXggPSAlZFxuIiwKLQkJCSAgICAgICBiLT5pbmRleCk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCWZiID0gdmlub19xdWV1ZV9nZXRfYnVmZmVyKCZ2Y3MtPmZiX3F1ZXVlLAotCQkJCQkgICBiLT5pbmRleCk7Ci0JCWlmIChmYiA9PSBOVUxMKSB7Ci0JCQlkcHJpbnRrKCJ2aW5vX3F1ZXVlX2dldF9idWZmZXIoKSBmYWlsZWQiKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJdmlub192NGwyX2dldF9idWZmZXJfc3RhdHVzKHZjcywgZmIsIGIpOwotCQlicmVhazsKLQl9Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JZGVmYXVsdDoKKwkvKiBUT0RPOiBjaGVjayBxdWV1ZSB0eXBlICovCisJaWYgKGItPmluZGV4ID49IHZpbm9fcXVldWVfZ2V0X2xlbmd0aCgmdmNzLT5mYl9xdWV1ZSkpIHsKKwkJZHByaW50aygiaW52YWxpZCBpbmRleCA9ICVkXG4iLAorCQkgICAgICAgYi0+aW5kZXgpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwlmYiA9IHZpbm9fcXVldWVfZ2V0X2J1ZmZlcigmdmNzLT5mYl9xdWV1ZSwKKwkJCQkgICBiLT5pbmRleCk7CisJaWYgKGZiID09IE5VTEwpIHsKKwkJZHByaW50aygidmlub19xdWV1ZV9nZXRfYnVmZmVyKCkgZmFpbGVkIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCXZpbm9fdjRsMl9nZXRfYnVmZmVyX3N0YXR1cyh2Y3MsIGZiLCBiKTsKKwogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9xYnVmKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKK3N0YXRpYyBpbnQgdmlub19xYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAogCQkJICBzdHJ1Y3QgdjRsMl9idWZmZXIgKmIpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKwlzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqZmI7CisJaW50IHJldDsKKwogCWlmICh2Y3MtPnJlYWRpbmcpCiAJCXJldHVybiAtRUJVU1k7CiAKLQlzd2l0Y2ggKGItPnR5cGUpIHsKLQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTogewotCQlzdHJ1Y3Qgdmlub19mcmFtZWJ1ZmZlciAqZmI7Ci0JCWludCByZXQ7Ci0KLQkJLy8gVE9ETzogY2hlY2sgcXVldWUgdHlwZQotCQlpZiAoYi0+bWVtb3J5ICE9IFY0TDJfTUVNT1JZX01NQVApIHsKLQkJCWRwcmludGsoInR5cGUgbm90IG1tYXBcbiIpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlmYiA9IHZpbm9fY2FwdHVyZV9lbnF1ZXVlKHZjcywgYi0+aW5kZXgpOwotCQlpZiAoZmIgPT0gTlVMTCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCXZpbm9fdjRsMl9nZXRfYnVmZmVyX3N0YXR1cyh2Y3MsIGZiLCBiKTsKLQotCQlpZiAodmNzLT5zdHJlYW1pbmcpIHsKLQkJCXJldCA9IHZpbm9fY2FwdHVyZV9uZXh0KHZjcywgMSk7Ci0JCQlpZiAocmV0KQotCQkJCXJldHVybiByZXQ7Ci0JCX0KLQkJYnJlYWs7Ci0JfQotCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgotCWRlZmF1bHQ6CisJLyogVE9ETzogY2hlY2sgcXVldWUgdHlwZSAqLworCWlmIChiLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkgeworCQlkcHJpbnRrKCJ0eXBlIG5vdCBtbWFwXG4iKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCisJZmIgPSB2aW5vX2NhcHR1cmVfZW5xdWV1ZSh2Y3MsIGItPmluZGV4KTsKKwlpZiAoZmIgPT0gTlVMTCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwl2aW5vX3Y0bDJfZ2V0X2J1ZmZlcl9zdGF0dXModmNzLCBmYiwgYik7CisKKwlpZiAodmNzLT5zdHJlYW1pbmcpIHsKKwkJcmV0ID0gdmlub19jYXB0dXJlX25leHQodmNzLCAxKTsKKwkJaWYgKHJldCkKKwkJCXJldHVybiByZXQ7CisJfQorCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlub192NGwyX2RxYnVmKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcywKLQkJCSAgIHN0cnVjdCB2NGwyX2J1ZmZlciAqYiwKLQkJCSAgIHVuc2lnbmVkIGludCBub25ibG9ja2luZykKK3N0YXRpYyBpbnQgdmlub19kcWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCSAgIHN0cnVjdCB2NGwyX2J1ZmZlciAqYikKIHsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCXVuc2lnbmVkIGludCBub25ibG9ja2luZyA9IGZpbGUtPmZfZmxhZ3MgJiBPX05PTkJMT0NLOworCXN0cnVjdCB2aW5vX2ZyYW1lYnVmZmVyICpmYjsKKwl1bnNpZ25lZCBpbnQgaW5jb21pbmcsIG91dGdvaW5nOworCWludCBlcnI7CisKIAlpZiAodmNzLT5yZWFkaW5nKQogCQlyZXR1cm4gLUVCVVNZOwogCi0Jc3dpdGNoIChiLT50eXBlKSB7Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6IHsKLQkJc3RydWN0IHZpbm9fZnJhbWVidWZmZXIgKmZiOwotCQl1bnNpZ25lZCBpbnQgaW5jb21pbmcsIG91dGdvaW5nOwotCQlpbnQgZXJyOworCS8qIFRPRE86IGNoZWNrIHF1ZXVlIHR5cGUgKi8KIAotCQkvLyBUT0RPOiBjaGVjayBxdWV1ZSB0eXBlCisJZXJyID0gdmlub19xdWV1ZV9nZXRfaW5jb21pbmcoJnZjcy0+ZmJfcXVldWUsICZpbmNvbWluZyk7CisJaWYgKGVycikgeworCQlkcHJpbnRrKCJ2aW5vX3F1ZXVlX2dldF9pbmNvbWluZygpIGZhaWxlZFxuIik7CisJCXJldHVybiAtRUlOVkFMOworCX0KKwllcnIgPSB2aW5vX3F1ZXVlX2dldF9vdXRnb2luZygmdmNzLT5mYl9xdWV1ZSwgJm91dGdvaW5nKTsKKwlpZiAoZXJyKSB7CisJCWRwcmludGsoInZpbm9fcXVldWVfZ2V0X291dGdvaW5nKCkgZmFpbGVkXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQogCi0JCWVyciA9IHZpbm9fcXVldWVfZ2V0X2luY29taW5nKCZ2Y3MtPmZiX3F1ZXVlLCAmaW5jb21pbmcpOwotCQlpZiAoZXJyKSB7Ci0JCQlkcHJpbnRrKCJ2aW5vX3F1ZXVlX2dldF9pbmNvbWluZygpIGZhaWxlZFxuIik7CisJZHByaW50aygiaW5jb21pbmcgPSAlZCwgb3V0Z29pbmcgPSAlZFxuIiwgaW5jb21pbmcsIG91dGdvaW5nKTsKKworCWlmIChvdXRnb2luZyA9PSAwKSB7CisJCWlmIChpbmNvbWluZyA9PSAwKSB7CisJCQlkcHJpbnRrKCJubyBpbmNvbWluZyBvciBvdXRnb2luZyBidWZmZXJzXG4iKTsKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9Ci0JCWVyciA9IHZpbm9fcXVldWVfZ2V0X291dGdvaW5nKCZ2Y3MtPmZiX3F1ZXVlLCAmb3V0Z29pbmcpOwotCQlpZiAoZXJyKSB7Ci0JCQlkcHJpbnRrKCJ2aW5vX3F1ZXVlX2dldF9vdXRnb2luZygpIGZhaWxlZFxuIik7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKKwkJaWYgKG5vbmJsb2NraW5nKSB7CisJCQlkcHJpbnRrKCJub24tYmxvY2tpbmcgSS9PIHdhcyBzZWxlY3RlZCBhbmQgIgorCQkJCSJ0aGVyZSBhcmUgbm8gYnVmZmVycyB0byBkZXF1ZXVlXG4iKTsKKwkJCXJldHVybiAtRUFHQUlOOwogCQl9CiAKLQkJZHByaW50aygiaW5jb21pbmcgPSAlZCwgb3V0Z29pbmcgPSAlZFxuIiwgaW5jb21pbmcsIG91dGdvaW5nKTsKLQotCQlpZiAob3V0Z29pbmcgPT0gMCkgewotCQkJaWYgKGluY29taW5nID09IDApIHsKLQkJCQlkcHJpbnRrKCJubyBpbmNvbWluZyBvciBvdXRnb2luZyBidWZmZXJzXG4iKTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQkJCWlmIChub25ibG9ja2luZykgewotCQkJCWRwcmludGsoIm5vbi1ibG9ja2luZyBJL08gd2FzIHNlbGVjdGVkIGFuZCAiCi0JCQkJCSJ0aGVyZSBhcmUgbm8gYnVmZmVycyB0byBkZXF1ZXVlXG4iKTsKLQkJCQlyZXR1cm4gLUVBR0FJTjsKLQkJCX0KLQorCQllcnIgPSB2aW5vX3dhaXRfZm9yX2ZyYW1lKHZjcyk7CisJCWlmIChlcnIpIHsKIAkJCWVyciA9IHZpbm9fd2FpdF9mb3JfZnJhbWUodmNzKTsKIAkJCWlmIChlcnIpIHsKLQkJCQllcnIgPSB2aW5vX3dhaXRfZm9yX2ZyYW1lKHZjcyk7Ci0JCQkJaWYgKGVycikgewotCQkJCQkvKiBpbnRlcnJ1cHRlZCBvcgotCQkJCQkgKiBubyBmcmFtZXMgY2FwdHVyZWQgYmVjYXVzZQotCQkJCQkgKiBvZiBmcmFtZSBza2lwcGluZyAqLwotCQkJCQkvLyB2aW5vX2NhcHR1cmVfZmFpbGVkKHZjcyk7Ci0JCQkJCXJldHVybiAtRUlPOwotCQkJCX0KKwkJCQkvKiBpbnRlcnJ1cHRlZCBvciBubyBmcmFtZXMgY2FwdHVyZWQgYmVjYXVzZSBvZgorCQkJCSAqIGZyYW1lIHNraXBwaW5nICovCisJCQkJLyogdmlub19jYXB0dXJlX2ZhaWxlZCh2Y3MpOyAqLworCQkJCXJldHVybiAtRUlPOwogCQkJfQogCQl9Ci0KLQkJZmIgPSB2aW5vX3F1ZXVlX3JlbW92ZSgmdmNzLT5mYl9xdWV1ZSwgJmItPmluZGV4KTsKLQkJaWYgKGZiID09IE5VTEwpIHsKLQkJCWRwcmludGsoInZpbm9fcXVldWVfcmVtb3ZlKCkgZmFpbGVkXG4iKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJZXJyID0gdmlub19jaGVja19idWZmZXIodmNzLCBmYik7Ci0KLQkJdmlub192NGwyX2dldF9idWZmZXJfc3RhdHVzKHZjcywgZmIsIGIpOwotCi0JCWlmIChlcnIpCi0JCQlyZXR1cm4gLUVJTzsKLQotCQlicmVhazsKIAl9Ci0JY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JZGVmYXVsdDoKKworCWZiID0gdmlub19xdWV1ZV9yZW1vdmUoJnZjcy0+ZmJfcXVldWUsICZiLT5pbmRleCk7CisJaWYgKGZiID09IE5VTEwpIHsKKwkJZHByaW50aygidmlub19xdWV1ZV9yZW1vdmUoKSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKKwllcnIgPSB2aW5vX2NoZWNrX2J1ZmZlcih2Y3MsIGZiKTsKKworCXZpbm9fdjRsMl9nZXRfYnVmZmVyX3N0YXR1cyh2Y3MsIGZiLCBiKTsKKworCWlmIChlcnIpCisJCXJldHVybiAtRUlPOworCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlub192NGwyX3N0cmVhbW9uKHN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcykKK3N0YXRpYyBpbnQgdmlub19zdHJlYW1vbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJZW51bSB2NGwyX2J1Zl90eXBlIGkpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAl1bnNpZ25lZCBpbnQgaW5jb21pbmc7CiAJaW50IHJldDsKIAlpZiAodmNzLT5yZWFkaW5nKQpAQCAtMzc5Miw4ICszNTk5LDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdmlub192NGwyX3N0cmVhbW9mZihzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MpCitzdGF0aWMgaW50IHZpbm9fc3RyZWFtb2ZmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQllbnVtIHY0bDJfYnVmX3R5cGUgaSkKIHsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCWlmICh2Y3MtPnJlYWRpbmcpCiAJCXJldHVybiAtRUJVU1k7CiAKQEAgLTM4MDYsOSArMzYxNSwxMCBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9xdWVyeWN0cmwoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAorc3RhdGljIGludCB2aW5vX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgICAgICBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnF1ZXJ5Y3RybCkKIHsKKwlzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MgPSB2aWRlb19kcnZkYXRhKGZpbGUpOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IGk7CiAJaW50IGVyciA9IDA7CkBAIC0zODU1LDkgKzM2NjUsMTAgQEAKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IHZpbm9fdjRsMl9nX2N0cmwoc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzLAorc3RhdGljIGludCB2aW5vX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKIAkJCSAgICBzdHJ1Y3QgdjRsMl9jb250cm9sICpjb250cm9sKQogeworCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKIAlpbnQgZXJyID0gMDsKQEAgLTM4NjYsNTYgKzM2NzcsMzggQEAKIAogCXN3aXRjaCAodmNzLT5pbnB1dCkgewogCWNhc2UgVklOT19JTlBVVF9EMTogewotCQlzdHJ1Y3QgaW5keWNhbV9jb250cm9sIGluZHljYW1fY3RybDsKLQorCQllcnIgPSAtRUlOVkFMOwogCQlmb3IgKGkgPSAwOyBpIDwgVklOT19JTkRZQ0FNX1Y0TDJfQ09OVFJPTF9DT1VOVDsgaSsrKSB7Ci0JCQlpZiAodmlub19pbmR5Y2FtX3Y0bDJfY29udHJvbHNbaV0uaWQgPT0KLQkJCSAgICBjb250cm9sLT5pZCkgewotCQkJCWdvdG8gZm91bmQxOworCQkJaWYgKHZpbm9faW5keWNhbV92NGwyX2NvbnRyb2xzW2ldLmlkID09IGNvbnRyb2wtPmlkKSB7CisJCQkJZXJyID0gMDsKKwkJCQlicmVhazsKIAkJCX0KIAkJfQogCi0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OwotCi1mb3VuZDE6Ci0JCWluZHljYW1fY3RybC50eXBlID0gdmlub19pbmR5Y2FtX3Y0bDJfY29udHJvbHNbaV0ucmVzZXJ2ZWRbMF07Ci0KLQkJZXJyID0gaTJjX2NhbWVyYV9jb21tYW5kKERFQ09ERVJfSU5EWUNBTV9HRVRfQ09OVFJPTCwKLQkJCQkJICZpbmR5Y2FtX2N0cmwpOwotCQlpZiAoZXJyKSB7Ci0JCQllcnIgPSAtRUlOVkFMOworCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7Ci0JCX0KIAotCQljb250cm9sLT52YWx1ZSA9IGluZHljYW1fY3RybC52YWx1ZTsKKwkJZXJyID0gY2FtZXJhX2NhbGwoY29yZSwgZ19jdHJsLCBjb250cm9sKTsKKwkJaWYgKGVycikKKwkJCWVyciA9IC1FSU5WQUw7CiAJCWJyZWFrOwogCX0KIAljYXNlIFZJTk9fSU5QVVRfQ09NUE9TSVRFOgogCWNhc2UgVklOT19JTlBVVF9TVklERU86IHsKLQkJc3RydWN0IHNhYTcxOTFfY29udHJvbCBzYWE3MTkxX2N0cmw7Ci0KKwkJZXJyID0gLUVJTlZBTDsKIAkJZm9yIChpID0gMDsgaSA8IFZJTk9fU0FBNzE5MV9WNEwyX0NPTlRST0xfQ09VTlQ7IGkrKykgewotCQkJaWYgKHZpbm9fc2FhNzE5MV92NGwyX2NvbnRyb2xzW2ldLmlkID09Ci0JCQkgICAgY29udHJvbC0+aWQpIHsKLQkJCQlnb3RvIGZvdW5kMjsKKwkJCWlmICh2aW5vX3NhYTcxOTFfdjRsMl9jb250cm9sc1tpXS5pZCA9PSBjb250cm9sLT5pZCkgeworCQkJCWVyciA9IDA7CisJCQkJYnJlYWs7CiAJCQl9CiAJCX0KIAotCQllcnIgPSAtRUlOVkFMOwotCQlnb3RvIG91dDsKLQotZm91bmQyOgotCQlzYWE3MTkxX2N0cmwudHlwZSA9IHZpbm9fc2FhNzE5MV92NGwyX2NvbnRyb2xzW2ldLnJlc2VydmVkWzBdOwotCi0JCWVyciA9IGkyY19kZWNvZGVyX2NvbW1hbmQoREVDT0RFUl9TQUE3MTkxX0dFVF9DT05UUk9MLAotCQkJCQkgICZzYWE3MTkxX2N0cmwpOwotCQlpZiAoZXJyKSB7Ci0JCQllcnIgPSAtRUlOVkFMOworCQlpZiAoZXJyKQogCQkJZ290byBvdXQ7Ci0JCX0KIAotCQljb250cm9sLT52YWx1ZSA9IHNhYTcxOTFfY3RybC52YWx1ZTsKKwkJZXJyID0gZGVjb2Rlcl9jYWxsKGNvcmUsIGdfY3RybCwgY29udHJvbCk7CisJCWlmIChlcnIpCisJCQllcnIgPSAtRUlOVkFMOwogCQlicmVhazsKIAl9CiAJZGVmYXVsdDoKQEAgLTM5MjgsOSArMzcyMSwxMCBAQAogCXJldHVybiBlcnI7CiB9CiAKLXN0YXRpYyBpbnQgdmlub192NGwyX3NfY3RybChzdHJ1Y3Qgdmlub19jaGFubmVsX3NldHRpbmdzICp2Y3MsCitzdGF0aWMgaW50IHZpbm9fc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAogCQkJICAgIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmNvbnRyb2wpCiB7CisJc3RydWN0IHZpbm9fY2hhbm5lbF9zZXR0aW5ncyAqdmNzID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCBpOwogCWludCBlcnIgPSAwOwpAQCAtMzk0NCw2NSArMzczOCw0MyBAQAogCiAJc3dpdGNoICh2Y3MtPmlucHV0KSB7CiAJY2FzZSBWSU5PX0lOUFVUX0QxOiB7Ci0JCXN0cnVjdCBpbmR5Y2FtX2NvbnRyb2wgaW5keWNhbV9jdHJsOwotCisJCWVyciA9IC1FSU5WQUw7CiAJCWZvciAoaSA9IDA7IGkgPCBWSU5PX0lORFlDQU1fVjRMMl9DT05UUk9MX0NPVU5UOyBpKyspIHsKLQkJCWlmICh2aW5vX2luZHljYW1fdjRsMl9jb250cm9sc1tpXS5pZCA9PQotCQkJICAgIGNvbnRyb2wtPmlkKSB7Ci0JCQkJaWYgKChjb250cm9sLT52YWx1ZSA+PQotCQkJCSAgICAgdmlub19pbmR5Y2FtX3Y0bDJfY29udHJvbHNbaV0ubWluaW11bSkKLQkJCQkgICAgJiYgKGNvbnRyb2wtPnZhbHVlIDw9Ci0JCQkJCXZpbm9faW5keWNhbV92NGwyX2NvbnRyb2xzW2ldLgotCQkJCQltYXhpbXVtKSkgewotCQkJCQlnb3RvIGZvdW5kMTsKLQkJCQl9IGVsc2UgewotCQkJCQllcnIgPSAtRVJBTkdFOwotCQkJCQlnb3RvIG91dDsKLQkJCQl9CisJCQlpZiAodmlub19pbmR5Y2FtX3Y0bDJfY29udHJvbHNbaV0uaWQgPT0gY29udHJvbC0+aWQpIHsKKwkJCQllcnIgPSAwOworCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0KLQkJZXJyID0gLUVJTlZBTDsKLQkJZ290byBvdXQ7Ci0KLWZvdW5kMToKLQkJaW5keWNhbV9jdHJsLnR5cGUgPSB2aW5vX2luZHljYW1fdjRsMl9jb250cm9sc1tpXS5yZXNlcnZlZFswXTsKLQkJaW5keWNhbV9jdHJsLnZhbHVlID0gY29udHJvbC0+dmFsdWU7Ci0KLQkJZXJyID0gaTJjX2NhbWVyYV9jb21tYW5kKERFQ09ERVJfSU5EWUNBTV9TRVRfQ09OVFJPTCwKLQkJCQkJICZpbmR5Y2FtX2N0cmwpOworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisJCWlmIChjb250cm9sLT52YWx1ZSA8IHZpbm9faW5keWNhbV92NGwyX2NvbnRyb2xzW2ldLm1pbmltdW0gfHwKKwkJICAgIGNvbnRyb2wtPnZhbHVlID4gdmlub19pbmR5Y2FtX3Y0bDJfY29udHJvbHNbaV0ubWF4aW11bSkgeworCQkJZXJyID0gLUVSQU5HRTsKKwkJCWdvdG8gb3V0OworCQl9CisJCWVyciA9IGNhbWVyYV9jYWxsKGNvcmUsIHNfY3RybCwgY29udHJvbCk7CiAJCWlmIChlcnIpCiAJCQllcnIgPSAtRUlOVkFMOwogCQlicmVhazsKIAl9CiAJY2FzZSBWSU5PX0lOUFVUX0NPTVBPU0lURToKIAljYXNlIFZJTk9fSU5QVVRfU1ZJREVPOiB7Ci0JCXN0cnVjdCBzYWE3MTkxX2NvbnRyb2wgc2FhNzE5MV9jdHJsOwotCisJCWVyciA9IC1FSU5WQUw7CiAJCWZvciAoaSA9IDA7IGkgPCBWSU5PX1NBQTcxOTFfVjRMMl9DT05UUk9MX0NPVU5UOyBpKyspIHsKLQkJCWlmICh2aW5vX3NhYTcxOTFfdjRsMl9jb250cm9sc1tpXS5pZCA9PQotCQkJICAgIGNvbnRyb2wtPmlkKSB7Ci0JCQkJaWYgKChjb250cm9sLT52YWx1ZSA+PQotCQkJCSAgICAgdmlub19zYWE3MTkxX3Y0bDJfY29udHJvbHNbaV0ubWluaW11bSkKLQkJCQkgICAgJiYgKGNvbnRyb2wtPnZhbHVlIDw9Ci0JCQkJCXZpbm9fc2FhNzE5MV92NGwyX2NvbnRyb2xzW2ldLgotCQkJCQltYXhpbXVtKSkgewotCQkJCQlnb3RvIGZvdW5kMjsKLQkJCQl9IGVsc2UgewotCQkJCQllcnIgPSAtRVJBTkdFOwotCQkJCQlnb3RvIG91dDsKLQkJCQl9CisJCQlpZiAodmlub19zYWE3MTkxX3Y0bDJfY29udHJvbHNbaV0uaWQgPT0gY29udHJvbC0+aWQpIHsKKwkJCQllcnIgPSAwOworCQkJCWJyZWFrOwogCQkJfQogCQl9Ci0JCWVyciA9IC1FSU5WQUw7Ci0JCWdvdG8gb3V0OworCQlpZiAoZXJyKQorCQkJZ290byBvdXQ7CisJCWlmIChjb250cm9sLT52YWx1ZSA8IHZpbm9fc2FhNzE5MV92NGwyX2NvbnRyb2xzW2ldLm1pbmltdW0gfHwKKwkJICAgIGNvbnRyb2wtPnZhbHVlID4gdmlub19zYWE3MTkxX3Y0bDJfY29udHJvbHNbaV0ubWF4aW11bSkgeworCQkJZXJyID0gLUVSQU5HRTsKKwkJCWdvdG8gb3V0OworCQl9CiAKLWZvdW5kMjoKLQkJc2FhNzE5MV9jdHJsLnR5cGUgPSB2aW5vX3NhYTcxOTFfdjRsMl9jb250cm9sc1tpXS5yZXNlcnZlZFswXTsKLQkJc2FhNzE5MV9jdHJsLnZhbHVlID0gY29udHJvbC0+dmFsdWU7Ci0KLQkJZXJyID0gaTJjX2RlY29kZXJfY29tbWFuZChERUNPREVSX1NBQTcxOTFfU0VUX0NPTlRST0wsCi0JCQkJCSAgJnNhYTcxOTFfY3RybCk7CisJCWVyciA9IGRlY29kZXJfY2FsbChjb3JlLCBzX2N0cmwsIGNvbnRyb2wpOwogCQlpZiAoZXJyKQogCQkJZXJyID0gLUVJTlZBTDsKIAkJYnJlYWs7CkBAIC00MjMzLDExNiArNDAwNSw5IEBACiAJCXJldCA9IFBPTExJTiB8IFBPTExSRE5PUk07CiAKIGVycm9yOgotCiAJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGxvbmcgdmlub19kb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQotewotCXN0cnVjdCB2aW5vX2NoYW5uZWxfc2V0dGluZ3MgKnZjcyA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0KLSNpZmRlZiBWSU5PX0RFQlVHCi0Jc3dpdGNoIChfSU9DX1RZUEUoY21kKSkgewotCWNhc2UgJ3YnOgotCQlkcHJpbnRrKCJpb2N0bCgpOiBWNEwxIHVuc3VwcG9ydGVkICgweCUwOHgpXG4iLCBjbWQpOwotCQlicmVhazsKLQljYXNlICdWJzoKLQkJZHByaW50aygiaW9jdGwoKTogVjRMMiAlcyAoMHglMDh4KVxuIiwKLQkJCXY0bDJfaW9jdGxfbmFtZXNbX0lPQ19OUihjbWQpXSwgY21kKTsKLQkJYnJlYWs7Ci0JZGVmYXVsdDoKLQkJZHByaW50aygiaW9jdGwoKTogdW5zdXBwb3J0ZWQgY29tbWFuZCAweCUwOHhcbiIsIGNtZCk7Ci0JfQotI2VuZGlmCi0KLQlzd2l0Y2ggKGNtZCkgewotCS8qIFY0TDIgaW50ZXJmYWNlICovCi0JY2FzZSBWSURJT0NfUVVFUllDQVA6IHsKLQkJdmlub192NGwyX3F1ZXJ5Y2FwKGFyZyk7Ci0JCWJyZWFrOwotCX0KLQljYXNlIFZJRElPQ19FTlVNSU5QVVQ6IHsKLQkJcmV0dXJuIHZpbm9fdjRsMl9lbnVtaW5wdXQodmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19HX0lOUFVUOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfZ19pbnB1dCh2Y3MsIGFyZyk7Ci0JfQotCWNhc2UgVklESU9DX1NfSU5QVVQ6IHsKLQkJcmV0dXJuIHZpbm9fdjRsMl9zX2lucHV0KHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfRU5VTVNURDogewotCQlyZXR1cm4gdmlub192NGwyX2VudW1zdGQodmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19RVUVSWVNURDogewotCQlyZXR1cm4gdmlub192NGwyX3F1ZXJ5c3RkKHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfR19TVEQ6IHsKLQkJcmV0dXJuIHZpbm9fdjRsMl9nX3N0ZCh2Y3MsIGFyZyk7Ci0JfQotCWNhc2UgVklESU9DX1NfU1REOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfc19zdGQodmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19FTlVNX0ZNVDogewotCQlyZXR1cm4gdmlub192NGwyX2VudW1fZm10KHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfVFJZX0ZNVDogewotCQlyZXR1cm4gdmlub192NGwyX3RyeV9mbXQodmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19HX0ZNVDogewotCQlyZXR1cm4gdmlub192NGwyX2dfZm10KHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfU19GTVQ6IHsKLQkJcmV0dXJuIHZpbm9fdjRsMl9zX2ZtdCh2Y3MsIGFyZyk7Ci0JfQotCWNhc2UgVklESU9DX0NST1BDQVA6IHsKLQkJcmV0dXJuIHZpbm9fdjRsMl9jcm9wY2FwKHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfR19DUk9QOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfZ19jcm9wKHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfU19DUk9QOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfc19jcm9wKHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfR19QQVJNOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfZ19wYXJtKHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfU19QQVJNOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfc19wYXJtKHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfUkVRQlVGUzogewotCQlyZXR1cm4gdmlub192NGwyX3JlcWJ1ZnModmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19RVUVSWUJVRjogewotCQlyZXR1cm4gdmlub192NGwyX3F1ZXJ5YnVmKHZjcywgYXJnKTsKLQl9Ci0JY2FzZSBWSURJT0NfUUJVRjogewotCQlyZXR1cm4gdmlub192NGwyX3FidWYodmNzLCBhcmcpOwotCX0KLQljYXNlIFZJRElPQ19EUUJVRjogewotCQlyZXR1cm4gdmlub192NGwyX2RxYnVmKHZjcywgYXJnLCBmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyk7Ci0JfQotCWNhc2UgVklESU9DX1NUUkVBTU9OOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfc3RyZWFtb24odmNzKTsKLQl9Ci0JY2FzZSBWSURJT0NfU1RSRUFNT0ZGOiB7Ci0JCXJldHVybiB2aW5vX3Y0bDJfc3RyZWFtb2ZmKHZjcyk7Ci0JfQotCWNhc2UgVklESU9DX1FVRVJZQ1RSTDogewotCQlyZXR1cm4gdmlub192NGwyX3F1ZXJ5Y3RybCh2Y3MsIGFyZyk7Ci0JfQotCWNhc2UgVklESU9DX0dfQ1RSTDogewotCQlyZXR1cm4gdmlub192NGwyX2dfY3RybCh2Y3MsIGFyZyk7Ci0JfQotCWNhc2UgVklESU9DX1NfQ1RSTDogewotCQlyZXR1cm4gdmlub192NGwyX3NfY3RybCh2Y3MsIGFyZyk7Ci0JfQotCWRlZmF1bHQ6Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBsb25nIHZpbm9faW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsCiAJCSAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgYXJnKQogewpAQCAtNDM1Miw3ICs0MDE3LDcgQEAKIAlpZiAobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZ2Y3MtPm11dGV4KSkKIAkJcmV0dXJuIC1FSU5UUjsKIAotCXJldCA9IHZpZGVvX3VzZXJjb3B5KGZpbGUsIGNtZCwgYXJnLCB2aW5vX2RvX2lvY3RsKTsKKwlyZXQgPSB2aWRlb19pb2N0bDIoZmlsZSwgY21kLCBhcmcpOwogCiAJbXV0ZXhfdW5sb2NrKCZ2Y3MtPm11dGV4KTsKIApAQCAtNDM2NCw0NSArNDAyOSw3NSBAQAogLyogX19pbml0ZGF0YSAqLwogc3RhdGljIGludCB2aW5vX2luaXRfc3RhZ2U7CiAKK2NvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB2aW5vX2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9jYXAgICAgID0gdmlub19lbnVtX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZ19mbXRfdmlkX2NhcCAJICAgICA9IHZpbm9fZ19mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3NfZm10X3ZpZF9jYXAgIAkgICAgID0gdmlub19zX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwCSAgICAgPSB2aW5vX3RyeV9mbXRfdmlkX2NhcCwKKwkudmlkaW9jX3F1ZXJ5Y2FwICAgIAkgICAgID0gdmlub19xdWVyeWNhcCwKKwkudmlkaW9jX2VudW1faW5wdXQgICAJICAgICA9IHZpbm9fZW51bV9pbnB1dCwKKwkudmlkaW9jX2dfaW5wdXQgICAgICAJICAgICA9IHZpbm9fZ19pbnB1dCwKKwkudmlkaW9jX3NfaW5wdXQgICAgICAJICAgICA9IHZpbm9fc19pbnB1dCwKKwkudmlkaW9jX2dfc3RkIAkJICAgICA9IHZpbm9fZ19zdGQsCisJLnZpZGlvY19zX3N0ZCAJCSAgICAgPSB2aW5vX3Nfc3RkLAorCS52aWRpb2NfcXVlcnlzdGQgICAgICAgICAgICAgPSB2aW5vX3F1ZXJ5c3RkLAorCS52aWRpb2NfY3JvcGNhcCAgICAgIAkgICAgID0gdmlub19jcm9wY2FwLAorCS52aWRpb2Nfc19jcm9wICAgICAgIAkgICAgID0gdmlub19zX2Nyb3AsCisJLnZpZGlvY19nX2Nyb3AgICAgICAgCSAgICAgPSB2aW5vX2dfY3JvcCwKKwkudmlkaW9jX3NfcGFybSAJCSAgICAgPSB2aW5vX3NfcGFybSwKKwkudmlkaW9jX2dfcGFybSAJCSAgICAgPSB2aW5vX2dfcGFybSwKKwkudmlkaW9jX3JlcWJ1ZnMgICAgICAgICAgICAgID0gdmlub19yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYgICAgICAgICAgICAgPSB2aW5vX3F1ZXJ5YnVmLAorCS52aWRpb2NfcWJ1ZiAgICAgICAgICAgICAgICAgPSB2aW5vX3FidWYsCisJLnZpZGlvY19kcWJ1ZiAgICAgICAgICAgICAgICA9IHZpbm9fZHFidWYsCisJLnZpZGlvY19zdHJlYW1vbiAgICAgICAgICAgICA9IHZpbm9fc3RyZWFtb24sCisJLnZpZGlvY19zdHJlYW1vZmYgICAgICAgICAgICA9IHZpbm9fc3RyZWFtb2ZmLAorCS52aWRpb2NfcXVlcnljdHJsICAgICAgICAgICAgPSB2aW5vX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX2dfY3RybCAgICAgICAgICAgICAgID0gdmlub19nX2N0cmwsCisJLnZpZGlvY19zX2N0cmwgICAgICAgICAgICAgICA9IHZpbm9fc19jdHJsLAorfTsKKwogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2aW5vX2ZvcHMgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5vcGVuCQk9IHZpbm9fb3BlbiwKIAkucmVsZWFzZQk9IHZpbm9fY2xvc2UsCi0JLmlvY3RsCQk9IHZpbm9faW9jdGwsCisJLnVubG9ja2VkX2lvY3RsCT0gdmlub19pb2N0bCwKIAkubW1hcAkJPSB2aW5vX21tYXAsCiAJLnBvbGwJCT0gdmlub19wb2xsLAogfTsKIAotc3RhdGljIHN0cnVjdCB2aWRlb19kZXZpY2UgdjRsX2RldmljZV90ZW1wbGF0ZSA9IHsKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHZkZXZfdGVtcGxhdGUgPSB7CiAJLm5hbWUJCT0gIk5PVCBTRVQiLAogCS5mb3BzCQk9ICZ2aW5vX2ZvcHMsCisJLmlvY3RsX29wcyAJPSAmdmlub19pb2N0bF9vcHMsCisJLnR2bm9ybXMgCT0gVjRMMl9TVERfTlRTQyB8IFY0TDJfU1REX1BBTCB8IFY0TDJfU1REX1NFQ0FNLAogCS5taW5vcgkJPSAtMSwKIH07CiAKIHN0YXRpYyB2b2lkIHZpbm9fbW9kdWxlX2NsZWFudXAoaW50IHN0YWdlKQogewogCXN3aXRjaChzdGFnZSkgeworCWNhc2UgMTE6CisJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZpbm9fZHJ2ZGF0YS0+Yi52ZGV2KTsKKwkJdmlub19kcnZkYXRhLT5iLnZkZXYgPSBOVUxMOwogCWNhc2UgMTA6Ci0JCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZpbm9fZHJ2ZGF0YS0+Yi52NGxfZGV2aWNlKTsKLQkJdmlub19kcnZkYXRhLT5iLnY0bF9kZXZpY2UgPSBOVUxMOworCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSh2aW5vX2RydmRhdGEtPmEudmRldik7CisJCXZpbm9fZHJ2ZGF0YS0+YS52ZGV2ID0gTlVMTDsKIAljYXNlIDk6Ci0JCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHZpbm9fZHJ2ZGF0YS0+YS52NGxfZGV2aWNlKTsKLQkJdmlub19kcnZkYXRhLT5hLnY0bF9kZXZpY2UgPSBOVUxMOworCQlpMmNfZGVsX2FkYXB0ZXIoJnZpbm9faTJjX2FkYXB0ZXIpOwogCWNhc2UgODoKLQkJdmlub19pMmNfZGVsX2J1cygpOwotCWNhc2UgNzoKIAkJZnJlZV9pcnEoU0dJX1ZJTk9fSVJRLCBOVUxMKTsKKwljYXNlIDc6CisJCWlmICh2aW5vX2RydmRhdGEtPmIudmRldikgeworCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2Uodmlub19kcnZkYXRhLT5iLnZkZXYpOworCQkJdmlub19kcnZkYXRhLT5iLnZkZXYgPSBOVUxMOworCQl9CiAJY2FzZSA2OgotCQlpZiAodmlub19kcnZkYXRhLT5iLnY0bF9kZXZpY2UpIHsKLQkJCXZpZGVvX2RldmljZV9yZWxlYXNlKHZpbm9fZHJ2ZGF0YS0+Yi52NGxfZGV2aWNlKTsKLQkJCXZpbm9fZHJ2ZGF0YS0+Yi52NGxfZGV2aWNlID0gTlVMTDsKKwkJaWYgKHZpbm9fZHJ2ZGF0YS0+YS52ZGV2KSB7CisJCQl2aWRlb19kZXZpY2VfcmVsZWFzZSh2aW5vX2RydmRhdGEtPmEudmRldik7CisJCQl2aW5vX2RydmRhdGEtPmEudmRldiA9IE5VTEw7CiAJCX0KIAljYXNlIDU6Ci0JCWlmICh2aW5vX2RydmRhdGEtPmEudjRsX2RldmljZSkgewotCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2Uodmlub19kcnZkYXRhLT5hLnY0bF9kZXZpY2UpOwotCQkJdmlub19kcnZkYXRhLT5hLnY0bF9kZXZpY2UgPSBOVUxMOwotCQl9Ci0JY2FzZSA0OgogCQkvKiBhbGwgZW50cmllcyBpbiBkbWFfY3B1IGR1bW15IHRhYmxlIGhhdmUgdGhlIHNhbWUgYWRkcmVzcyAqLwogCQlkbWFfdW5tYXBfc2luZ2xlKE5VTEwsCiAJCQkJIHZpbm9fZHJ2ZGF0YS0+ZHVtbXlfZGVzY190YWJsZS5kbWFfY3B1WzBdLApAQCAtNDQxMiw4ICs0MTA3LDEwIEBACiAJCQkJICAodm9pZCAqKXZpbm9fZHJ2ZGF0YS0+CiAJCQkJICBkdW1teV9kZXNjX3RhYmxlLmRtYV9jcHUsCiAJCQkJICB2aW5vX2RydmRhdGEtPmR1bW15X2Rlc2NfdGFibGUuZG1hKTsKLQljYXNlIDM6CisJY2FzZSA0OgogCQlmcmVlX3BhZ2Uodmlub19kcnZkYXRhLT5kdW1teV9wYWdlKTsKKwljYXNlIDM6CisJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnZpbm9fZHJ2ZGF0YS0+djRsMl9kZXYpOwogCWNhc2UgMjoKIAkJa2ZyZWUodmlub19kcnZkYXRhKTsKIAljYXNlIDE6CkBAIC00NDY4LDYgKzQxNjUsNyBAQAogc3RhdGljIGludCB2aW5vX2luaXQodm9pZCkKIHsKIAlkbWFfYWRkcl90IGRtYV9kdW1teV9hZGRyZXNzOworCWludCBlcnI7CiAJaW50IGk7CiAKIAl2aW5vX2RydmRhdGEgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgdmlub19zZXR0aW5ncyksIEdGUF9LRVJORUwpOwpAQCAtNDQ3Niw2ICs0MTc0LDEyIEBACiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAl2aW5vX2luaXRfc3RhZ2UrKzsKKwlzdHJsY3B5KHZpbm9fZHJ2ZGF0YS0+djRsMl9kZXYubmFtZSwgInZpbm8iLAorCQkJc2l6ZW9mKHZpbm9fZHJ2ZGF0YS0+djRsMl9kZXYubmFtZSkpOworCWVyciA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKE5VTEwsICZ2aW5vX2RydmRhdGEtPnY0bDJfZGV2KTsKKwlpZiAoZXJyKQorCQlyZXR1cm4gZXJyOworCXZpbm9faW5pdF9zdGFnZSsrOwogCiAJLyogY3JlYXRlIGEgZHVtbXkgZG1hIGRlc2NyaXB0b3IgKi8KIAl2aW5vX2RydmRhdGEtPmR1bW15X3BhZ2UgPSBnZXRfemVyb2VkX3BhZ2UoR0ZQX0tFUk5FTCB8IEdGUF9ETUEpOwpAQCAtNDU0MiwyNSArNDI0NiwyNyBAQAogCXNwaW5fbG9ja19pbml0KCZ2Y3MtPmZiX3F1ZXVlLnF1ZXVlX2xvY2spOwogCWluaXRfd2FpdHF1ZXVlX2hlYWQoJnZjcy0+ZmJfcXVldWUuZnJhbWVfd2FpdF9xdWV1ZSk7CiAKLQl2Y3MtPnY0bF9kZXZpY2UgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKLQlpZiAoIXZjcy0+djRsX2RldmljZSkgeworCXZjcy0+dmRldiA9IHZpZGVvX2RldmljZV9hbGxvYygpOworCWlmICghdmNzLT52ZGV2KSB7CiAJCXZpbm9fbW9kdWxlX2NsZWFudXAodmlub19pbml0X3N0YWdlKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCXZpbm9faW5pdF9zdGFnZSsrOwogCi0JbWVtY3B5KHZjcy0+djRsX2RldmljZSwgJnY0bF9kZXZpY2VfdGVtcGxhdGUsCisJbWVtY3B5KHZjcy0+dmRldiwgJnZkZXZfdGVtcGxhdGUsCiAJICAgICAgIHNpemVvZihzdHJ1Y3QgdmlkZW9fZGV2aWNlKSk7Ci0Jc3RyY3B5KHZjcy0+djRsX2RldmljZS0+bmFtZSwgbmFtZSk7Ci0JdmNzLT52NGxfZGV2aWNlLT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CisJc3RyY3B5KHZjcy0+dmRldi0+bmFtZSwgbmFtZSk7CisJdmNzLT52ZGV2LT5yZWxlYXNlID0gdmlkZW9fZGV2aWNlX3JlbGVhc2U7CisJdmNzLT52ZGV2LT52NGwyX2RldiA9ICZ2aW5vX2RydmRhdGEtPnY0bDJfZGV2OwogCi0JdmlkZW9fc2V0X2RydmRhdGEodmNzLT52NGxfZGV2aWNlLCB2Y3MpOworCXZpZGVvX3NldF9kcnZkYXRhKHZjcy0+dmRldiwgdmNzKTsKIAogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IF9faW5pdCB2aW5vX21vZHVsZV9pbml0KHZvaWQpCiB7CisJdW5zaWduZWQgc2hvcnQgYWRkcltdID0geyAwLCBJMkNfQ0xJRU5UX0VORCB9OwogCWludCByZXQ7CiAKIAlwcmludGsoS0VSTl9JTkZPICJTR0kgVklOTyBkcml2ZXIgdmVyc2lvbiAlc1xuIiwKQEAgLTQ1ODAsMTIgKzQyODYsMTIgQEAKIAlzcGluX2xvY2tfaW5pdCgmdmlub19kcnZkYXRhLT5pbnB1dF9sb2NrKTsKIAogCXJldCA9IHZpbm9faW5pdF9jaGFubmVsX3NldHRpbmdzKCZ2aW5vX2RydmRhdGEtPmEsIFZJTk9fQ0hBTk5FTF9BLAotCQkJCSAgICB2aW5vX3Y0bF9kZXZpY2VfbmFtZV9hKTsKKwkJCQkgICAgdmlub192ZGV2X25hbWVfYSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAogCXJldCA9IHZpbm9faW5pdF9jaGFubmVsX3NldHRpbmdzKCZ2aW5vX2RydmRhdGEtPmIsIFZJTk9fQ0hBTk5FTF9CLAotCQkJCSAgICB2aW5vX3Y0bF9kZXZpY2VfbmFtZV9iKTsKKwkJCQkgICAgdmlub192ZGV2X25hbWVfYik7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtNDYwMSwxNSArNDMwNywxNiBAQAogCX0KIAl2aW5vX2luaXRfc3RhZ2UrKzsKIAotCXJldCA9IHZpbm9faTJjX2FkZF9idXMoKTsKKwlyZXQgPSBpMmNfYWRkX2FkYXB0ZXIoJnZpbm9faTJjX2FkYXB0ZXIpOwogCWlmIChyZXQpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJWSU5PIEkyQyBidXMgcmVnaXN0cmF0aW9uIGZhaWxlZFxuIik7CiAJCXZpbm9fbW9kdWxlX2NsZWFudXAodmlub19pbml0X3N0YWdlKTsKIAkJcmV0dXJuIHJldDsKIAl9CisJaTJjX3NldF9hZGFwZGF0YSgmdmlub19pMmNfYWRhcHRlciwgJnZpbm9fZHJ2ZGF0YS0+djRsMl9kZXYpOwogCXZpbm9faW5pdF9zdGFnZSsrOwogCi0JcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZpbm9fZHJ2ZGF0YS0+YS52NGxfZGV2aWNlLAorCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2aW5vX2RydmRhdGEtPmEudmRldiwKIAkJCQkgICAgVkZMX1RZUEVfR1JBQkJFUiwgLTEpOwogCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVklOTyBjaGFubmVsIEEgVmlkZW80TGludXgtZGV2aWNlICIKQEAgLTQ2MTksNyArNDMyNiw3IEBACiAJfQogCXZpbm9faW5pdF9zdGFnZSsrOwogCi0JcmV0ID0gdmlkZW9fcmVnaXN0ZXJfZGV2aWNlKHZpbm9fZHJ2ZGF0YS0+Yi52NGxfZGV2aWNlLAorCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2aW5vX2RydmRhdGEtPmIudmRldiwKIAkJCQkgICAgVkZMX1RZUEVfR1JBQkJFUiwgLTEpOwogCWlmIChyZXQgPCAwKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiVklOTyBjaGFubmVsIEIgVmlkZW80TGludXgtZGV2aWNlICIKQEAgLTQ2MjksMTAgKzQzMzYsMTIgQEAKIAl9CiAJdmlub19pbml0X3N0YWdlKys7CiAKLSNpZmRlZiBNT0RVTEUKLQlyZXF1ZXN0X21vZHVsZSgic2FhNzE5MSIpOwotCXJlcXVlc3RfbW9kdWxlKCJpbmR5Y2FtIik7Ci0jZW5kaWYKKwlhZGRyWzBdID0gMHg0NTsKKwl2aW5vX2RydmRhdGEtPmRlY29kZXIgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmdmlub19pMmNfYWRhcHRlciwKKwkJCSJzYWE3MTkxIiwgInNhYTcxOTEiLCBhZGRyKTsKKwlhZGRyWzBdID0gMHgyYjsKKwl2aW5vX2RydmRhdGEtPmNhbWVyYSA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZ2aW5vX2kyY19hZGFwdGVyLAorCQkJImluZHljYW0iLCAiaW5keWNhbSIsIGFkZHIpOwogCiAJZHByaW50aygiaW5pdCBjb21wbGV0ZSFcbiIpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZpdmkuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jCmluZGV4IDgxZDVhYTUuLmZiZmVmYWUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdml2aS5jCkBAIC0yOCwxNyArMjgsMTQgQEAKICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+Ci0jaWZkZWYgQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUCi0vKiBJbmNsdWRlIFY0TDEgc3BlY2lmaWMgZnVuY3Rpb25zLiBTaG91bGQgYmUgcmVtb3ZlZCBzb29uICovCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgotI2luY2x1ZGUgPG1lZGlhL3ZpZGVvYnVmLXZtYWxsb2MuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KICNpbmNsdWRlIDxsaW51eC9rdGhyZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvaGlnaG1lbS5oPgogI2luY2x1ZGUgPGxpbnV4L2ZyZWV6ZXIuaD4KKyNpbmNsdWRlIDxtZWRpYS92aWRlb2J1Zi12bWFsbG9jLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CisjaW5jbHVkZSAiZm9udC5oIgogCiAjZGVmaW5lIFZJVklfTU9EVUxFX05BTUUgInZpdmkiCiAKQEAgLTQ3LDE4ICs0NCwzMiBAQAogI2RlZmluZSBXQUtFX0RFTk9NSU5BVE9SIDEwMDEKICNkZWZpbmUgQlVGRkVSX1RJTUVPVVQgICAgIG1zZWNzX3RvX2ppZmZpZXMoNTAwKSAgLyogMC41IHNlY29uZHMgKi8KIAotI2luY2x1ZGUgImZvbnQuaCIKLQogI2RlZmluZSBWSVZJX01BSk9SX1ZFUlNJT04gMAotI2RlZmluZSBWSVZJX01JTk9SX1ZFUlNJT04gNQorI2RlZmluZSBWSVZJX01JTk9SX1ZFUlNJT04gNgogI2RlZmluZSBWSVZJX1JFTEVBU0UgMAogI2RlZmluZSBWSVZJX1ZFUlNJT04gXAogCUtFUk5FTF9WRVJTSU9OKFZJVklfTUFKT1JfVkVSU0lPTiwgVklWSV9NSU5PUl9WRVJTSU9OLCBWSVZJX1JFTEVBU0UpCiAKLS8qIERlY2xhcmUgc3RhdGljIHZhcnMgdGhhdCB3aWxsIGJlIHVzZWQgYXMgcGFyYW1ldGVycyAqLwotc3RhdGljIHVuc2lnbmVkIGludCB2aWRfbGltaXQgPSAxNjsJLyogVmlkZW8gbWVtb3J5IGxpbWl0LCBpbiBNYiAqLwotc3RhdGljIGludCB2aWRlb19uciA9IC0xOwkJLyogL2Rldi92aWRlb04sIC0xIGZvciBhdXRvZGV0ZWN0ICovCi1zdGF0aWMgaW50IG5fZGV2cyA9IDE7CQkJLyogTnVtYmVyIG9mIHZpcnR1YWwgZGV2aWNlcyAqLworTU9EVUxFX0RFU0NSSVBUSU9OKCJWaWRlbyBUZWNobm9sb2d5IE1hZ2F6aW5lIFZpcnR1YWwgVmlkZW8gQ2FwdHVyZSBCb2FyZCIpOworTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiLCBUZWQgV2FsdGhlciBhbmQgSm9obiBTb2tvbCIpOworTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOworCitzdGF0aWMgdW5zaWduZWQgdmlkZW9fbnIgPSAtMTsKK21vZHVsZV9wYXJhbSh2aWRlb19uciwgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpZGVvX25yLCAidmlkZW9YIHN0YXJ0IG51bWJlciwgLTEgaXMgYXV0b2RldGVjdCIpOworCitzdGF0aWMgdW5zaWduZWQgbl9kZXZzID0gMTsKK21vZHVsZV9wYXJhbShuX2RldnMsIHVpbnQsIDA2NDQpOworTU9EVUxFX1BBUk1fREVTQyhuX2RldnMsICJudW1iZXIgb2YgdmlkZW8gZGV2aWNlcyB0byBjcmVhdGUiKTsKKworc3RhdGljIHVuc2lnbmVkIGRlYnVnOworbW9kdWxlX3BhcmFtKGRlYnVnLCB1aW50LCAwNjQ0KTsKK01PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJhY3RpdmF0ZXMgZGVidWcgaW5mbyIpOworCitzdGF0aWMgdW5zaWduZWQgaW50IHZpZF9saW1pdCA9IDE2OworbW9kdWxlX3BhcmFtKHZpZF9saW1pdCwgdWludCwgMDY0NCk7CitNT0RVTEVfUEFSTV9ERVNDKHZpZF9saW1pdCwgImNhcHR1cmUgbWVtb3J5IGxpbWl0IGluIG1lZ2FieXRlcyIpOworCiAKIC8qIHN1cHBvcnRlZCBjb250cm9scyAqLwogc3RhdGljIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCB2aXZpX3FjdHJsW10gPSB7CkBAIC02OSw3ICs4MCw3IEBACiAJCS5tYXhpbXVtICAgICAgID0gNjU1MzUsCiAJCS5zdGVwICAgICAgICAgID0gNjU1MzUvMTAwLAogCQkuZGVmYXVsdF92YWx1ZSA9IDY1NTM1LAotCQkuZmxhZ3MgICAgICAgICA9IDAsCisJCS5mbGFncyAgICAgICAgID0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSLAogCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCiAJfSwgewogCQkuaWQgICAgICAgICAgICA9IFY0TDJfQ0lEX0JSSUdIVE5FU1MsCkBAIC03OSw3ICs5MCw3IEBACiAJCS5tYXhpbXVtICAgICAgID0gMjU1LAogCQkuc3RlcCAgICAgICAgICA9IDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gMTI3LAotCQkuZmxhZ3MgICAgICAgICA9IDAsCisJCS5mbGFncyAgICAgICAgID0gVjRMMl9DVFJMX0ZMQUdfU0xJREVSLAogCX0sIHsKIAkJLmlkICAgICAgICAgICAgPSBWNEwyX0NJRF9DT05UUkFTVCwKIAkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLApAQCAtODgsNyArOTksNyBAQAogCQkubWF4aW11bSAgICAgICA9IDI1NSwKIAkJLnN0ZXAgICAgICAgICAgPSAweDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gMHgxMCwKLQkJLmZsYWdzICAgICAgICAgPSAwLAorCQkuZmxhZ3MgICAgICAgICA9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUiwKIAl9LCB7CiAJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfU0FUVVJBVElPTiwKIAkJLnR5cGUgICAgICAgICAgPSBWNEwyX0NUUkxfVFlQRV9JTlRFR0VSLApAQCAtOTcsNyArMTA4LDcgQEAKIAkJLm1heGltdW0gICAgICAgPSAyNTUsCiAJCS5zdGVwICAgICAgICAgID0gMHgxLAogCQkuZGVmYXVsdF92YWx1ZSA9IDEyNywKLQkJLmZsYWdzICAgICAgICAgPSAwLAorCQkuZmxhZ3MgICAgICAgICA9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUiwKIAl9LCB7CiAJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfSFVFLAogCQkudHlwZSAgICAgICAgICA9IFY0TDJfQ1RSTF9UWVBFX0lOVEVHRVIsCkBAIC0xMDYsMTcgKzExNywxMiBAQAogCQkubWF4aW11bSAgICAgICA9IDEyNywKIAkJLnN0ZXAgICAgICAgICAgPSAweDEsCiAJCS5kZWZhdWx0X3ZhbHVlID0gMCwKLQkJLmZsYWdzICAgICAgICAgPSAwLAorCQkuZmxhZ3MgICAgICAgICA9IFY0TDJfQ1RSTF9GTEFHX1NMSURFUiwKIAl9CiB9OwogCi1zdGF0aWMgaW50IHFjdGxfcmVnc1tBUlJBWV9TSVpFKHZpdmlfcWN0cmwpXTsKLQotI2RlZmluZSBkcHJpbnRrKGRldiwgbGV2ZWwsIGZtdCwgYXJnLi4uKQkJCQlcCi0JZG8gewkJCQkJCQkJXAotCQlpZiAoZGV2LT52ZmQtPmRlYnVnID49IChsZXZlbCkpCQkJCVwKLQkJCXByaW50ayhLRVJOX0RFQlVHICJ2aXZpOiAiIGZtdCAsICMjIGFyZyk7CVwKLQl9IHdoaWxlICgwKQorI2RlZmluZSBkcHJpbnRrKGRldiwgbGV2ZWwsIGZtdCwgYXJnLi4uKSBcCisJdjRsMl9kYmcobGV2ZWwsIGRlYnVnLCAmZGV2LT52NGwyX2RldiwgZm10LCAjIyBhcmcpCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCUJhc2ljIHN0cnVjdHVyZXMKQEAgLTIwNiw2ICsyMTIsNyBAQAogCiBzdHJ1Y3Qgdml2aV9kZXYgewogCXN0cnVjdCBsaXN0X2hlYWQgICAgICAgICAgIHZpdmlfZGV2bGlzdDsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgCSAgIHY0bDJfZGV2OwogCiAJc3BpbmxvY2tfdCAgICAgICAgICAgICAgICAgc2xvY2s7CiAJc3RydWN0IG11dGV4CQkgICBtdXRleDsKQEAgLTIyMyw2ICsyMzAsMTIgQEAKIAljaGFyICAgICAgICAgICAgICAgICAgICAgICB0aW1lc3RyWzEzXTsKIAogCWludAkJCSAgIG12X2NvdW50OwkvKiBDb250cm9scyBiYXJzIG1vdmVtZW50ICovCisKKwkvKiBJbnB1dCBOdW1iZXIgKi8KKwlpbnQJCQkgICBpbnB1dDsKKworCS8qIENvbnRyb2wgJ3JlZ2lzdGVycycgKi8KKwlpbnQgCQkJICAgcWN0bF9yZWdzW0FSUkFZX1NJWkUodml2aV9xY3RybCldOwogfTsKIAogc3RydWN0IHZpdmlfZmggewpAQCAtMjM1LDYgKzI0OCw3IEBACiAKIAllbnVtIHY0bDJfYnVmX3R5cGUgICAgICAgICB0eXBlOwogCXVuc2lnbmVkIGNoYXIgICAgICAgICAgICAgIGJhcnNbOF1bM107CisJaW50CQkJICAgaW5wdXQ7IAkvKiBJbnB1dCBOdW1iZXIgb24gYmFycyAqLwogfTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC0yNTQsMTggKzI2OCw3MiBAQAogCUJMQUNLLAogfTsKIAotc3RhdGljIHU4IGJhcnNbOF1bM10gPSB7CiAJLyogUiAgIEcgICBCICovCi0JezIwNCwgMjA0LCAyMDR9LCAgLyogd2hpdGUgKi8KLQl7MjA4LCAyMDgsICAgMH0sICAvKiBhbWJhciAqLwotCXsgIDAsIDIwNiwgMjA2fSwgIC8qIGN5YW4gKi8KLQl7ICAwLCAyMzksICAgMH0sICAvKiBncmVlbiAqLwotCXsyMzksICAgMCwgMjM5fSwgIC8qIG1hZ2VudGEgKi8KLQl7MjA1LCAgIDAsICAgMH0sICAvKiByZWQgKi8KLQl7ICAwLCAgIDAsIDI1NX0sICAvKiBibHVlICovCi0JeyAgMCwgICAwLCAgIDB9LCAgLyogYmxhY2sgKi8KKyNkZWZpbmUgQ09MT1JfV0hJVEUJezIwNCwgMjA0LCAyMDR9CisjZGVmaW5lIENPTE9SX0FNQkFSCXsyMDgsIDIwOCwgICAwfQorI2RlZmluZSBDT0xPUl9DSUFOCXsgIDAsIDIwNiwgMjA2fQorI2RlZmluZQlDT0xPUl9HUkVFTgl7ICAwLCAyMzksICAgMH0KKyNkZWZpbmUgQ09MT1JfTUFHRU5UQQl7MjM5LCAgIDAsIDIzOX0KKyNkZWZpbmUgQ09MT1JfUkVECXsyMDUsICAgMCwgICAwfQorI2RlZmluZSBDT0xPUl9CTFVFCXsgIDAsICAgMCwgMjU1fQorI2RlZmluZSBDT0xPUl9CTEFDSwl7ICAwLCAgIDAsICAgMH0KKworc3RydWN0IGJhcl9zdGQgeworCXU4IGJhcls4XVszXTsKIH07CiAKKy8qIE1heGltdW0gbnVtYmVyIG9mIGJhcnMgYXJlIDEwIC0gb3RoZXJ3aXNlLCB0aGUgaW5wdXQgcHJpbnQgY29kZQorICAgc2hvdWxkIGJlIG1vZGlmaWVkICovCitzdGF0aWMgc3RydWN0IGJhcl9zdGQgYmFyc1tdID0geworCXsJLyogU3RhbmRhcmQgSVRVLVIgY29sb3IgYmFyIHNlcXVlbmNlICovCisJCXsKKwkJCUNPTE9SX1dISVRFLAorCQkJQ09MT1JfQU1CQVIsCisJCQlDT0xPUl9DSUFOLAorCQkJQ09MT1JfR1JFRU4sCisJCQlDT0xPUl9NQUdFTlRBLAorCQkJQ09MT1JfUkVELAorCQkJQ09MT1JfQkxVRSwKKwkJCUNPTE9SX0JMQUNLLAorCQl9CisJfSwgeworCQl7CisJCQlDT0xPUl9XSElURSwKKwkJCUNPTE9SX0FNQkFSLAorCQkJQ09MT1JfQkxBQ0ssCisJCQlDT0xPUl9XSElURSwKKwkJCUNPTE9SX0FNQkFSLAorCQkJQ09MT1JfQkxBQ0ssCisJCQlDT0xPUl9XSElURSwKKwkJCUNPTE9SX0FNQkFSLAorCQl9CisJfSwgeworCQl7CisJCQlDT0xPUl9XSElURSwKKwkJCUNPTE9SX0NJQU4sCisJCQlDT0xPUl9CTEFDSywKKwkJCUNPTE9SX1dISVRFLAorCQkJQ09MT1JfQ0lBTiwKKwkJCUNPTE9SX0JMQUNLLAorCQkJQ09MT1JfV0hJVEUsCisJCQlDT0xPUl9DSUFOLAorCQl9CisJfSwgeworCQl7CisJCQlDT0xPUl9XSElURSwKKwkJCUNPTE9SX0dSRUVOLAorCQkJQ09MT1JfQkxBQ0ssCisJCQlDT0xPUl9XSElURSwKKwkJCUNPTE9SX0dSRUVOLAorCQkJQ09MT1JfQkxBQ0ssCisJCQlDT0xPUl9XSElURSwKKwkJCUNPTE9SX0dSRUVOLAorCQl9CisJfSwKK307CisKKyNkZWZpbmUgTlVNX0lOUFVUUyBBUlJBWV9TSVpFKGJhcnMpCisKICNkZWZpbmUgVE9fWShyLCBnLCBiKSBcCiAJKCgoMTY4MjkgKiByICsgMzMwMzkgKiBnICsgNjQxNiAqIGIgICsgMzI3NjgpID4+IDE2KSArIDE2KQogLyogUkdCIHRvICBWKENyKSBDb2xvciB0cmFuc2Zvcm0gKi8KQEAgLTI3NSw5ICszNDMsMTAgQEAKICNkZWZpbmUgVE9fVShyLCBnLCBiKSBcCiAJKCgoLTk3MTQgKiByIC0gMTkwNzAgKiBnICsgMjg3ODQgKiBiICsgMzI3NjgpID4+IDE2KSArIDEyOCkKIAotI2RlZmluZSBUU1RBTVBfTUlOX1kgMjQKLSNkZWZpbmUgVFNUQU1QX01BWF9ZIFRTVEFNUF9NSU5fWSsxNQotI2RlZmluZSBUU1RBTVBfTUlOX1ggNjQKKyNkZWZpbmUgVFNUQU1QX01JTl9ZCTI0CisjZGVmaW5lIFRTVEFNUF9NQVhfWQkoVFNUQU1QX01JTl9ZICsgMTUpCisjZGVmaW5lIFRTVEFNUF9JTlBVVF9YCTEwCisjZGVmaW5lIFRTVEFNUF9NSU5fWAkoNTQgKyBUU1RBTVBfSU5QVVRfWCkKIAogc3RhdGljIHZvaWQgZ2VuX3R3b3BpeChzdHJ1Y3Qgdml2aV9maCAqZmgsIHVuc2lnbmVkIGNoYXIgKmJ1ZiwgaW50IGNvbG9ycG9zKQogewpAQCAtMzkyLDkgKzQ2MSwyOSBAQAogCQlwb3MgKz0gNDsgLyogb25seSAxNiBicHAgc3VwcG9ydGVkIGZvciBub3cgKi8KIAl9CiAKLQkvKiBDaGVja3MgaWYgaXQgaXMgcG9zc2libGUgdG8gc2hvdyB0aW1lc3RhbXAgKi8KKwkvKiBQcmludHMgaW5wdXQgZW50cnkgbnVtYmVyICovCisKKwkvKiBDaGVja3MgaWYgaXQgaXMgcG9zc2libGUgdG8gaW5wdXQgbnVtYmVyICovCiAJaWYgKFRTVEFNUF9NQVhfWSA+PSBobWF4KQogCQlnb3RvIGVuZDsKKworCWlmIChUU1RBTVBfSU5QVVRfWCArIHN0cmxlbih0aW1lc3RyKSA+PSB3bWF4KQorCQlnb3RvIGVuZDsKKworCWlmIChsaW5lID49IFRTVEFNUF9NSU5fWSAmJiBsaW5lIDw9IFRTVEFNUF9NQVhfWSkgeworCQljaHIgPSByb204eDE2X2JpdHNbZmgtPmlucHV0ICogMTYgKyBsaW5lIC0gVFNUQU1QX01JTl9ZXTsKKwkJcG9zID0gVFNUQU1QX0lOUFVUX1g7CisJCWZvciAoaSA9IDA7IGkgPCA3OyBpKyspIHsKKwkJCS8qIERyYXcgd2hpdGUgZm9udCBvbiBibGFjayBiYWNrZ3JvdW5kICovCisJCQlpZiAoY2hyICYgMSA8PCAoNyAtIGkpKQorCQkJCWdlbl90d29waXgoZmgsIGJhc2VwICsgcG9zLCBXSElURSk7CisJCQllbHNlCisJCQkJZ2VuX3R3b3BpeChmaCwgYmFzZXAgKyBwb3MsIEJMQUNLKTsKKwkJCXBvcyArPSAyOworCQl9CisJfQorCisJLyogQ2hlY2tzIGlmIGl0IGlzIHBvc3NpYmxlIHRvIHNob3cgdGltZXN0YW1wICovCiAJaWYgKFRTVEFNUF9NSU5fWCArIHN0cmxlbih0aW1lc3RyKSA+PSB3bWF4KQogCQlnb3RvIGVuZDsKIApAQCAtNTc3LDcgKzY2Niw3IEBACiAJZG1hX3EtPmt0aHJlYWQgPSBrdGhyZWFkX3J1bih2aXZpX3RocmVhZCwgZmgsICJ2aXZpIik7CiAKIAlpZiAoSVNfRVJSKGRtYV9xLT5rdGhyZWFkKSkgewotCQlwcmludGsoS0VSTl9FUlIgInZpdmk6IGtlcm5lbF90aHJlYWQoKSBmYWlsZWRcbiIpOworCQl2NGwyX2VycigmZGV2LT52NGwyX2RldiwgImtlcm5lbF90aHJlYWQoKSBmYWlsZWRcbiIpOwogCQlyZXR1cm4gUFRSX0VSUihkbWFfcS0+a3RocmVhZCk7CiAJfQogCS8qIFdha2VzIHRocmVhZCAqLwpAQCAtNzIwLDggKzgwOSwxMiBAQAogc3RhdGljIGludCB2aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgICpwcml2LAogCQkJCQlzdHJ1Y3QgdjRsMl9jYXBhYmlsaXR5ICpjYXApCiB7CisJc3RydWN0IHZpdmlfZmggICpmaCAgPSBwcml2OworCXN0cnVjdCB2aXZpX2RldiAqZGV2ID0gZmgtPmRldjsKKwogCXN0cmNweShjYXAtPmRyaXZlciwgInZpdmkiKTsKIAlzdHJjcHkoY2FwLT5jYXJkLCAidml2aSIpOworCXN0cmxjcHkoY2FwLT5idXNfaW5mbywgZGV2LT52NGwyX2Rldi5uYW1lLCBzaXplb2YoY2FwLT5idXNfaW5mbykpOwogCWNhcC0+dmVyc2lvbiA9IFZJVklfVkVSU0lPTjsKIAljYXAtPmNhcGFiaWxpdGllcyA9CVY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAogCQkJCVY0TDJfQ0FQX1NUUkVBTUlORyAgICAgfApAQCAtODA3LDM4ICs5MDAsMTkgQEAKIAlyZXR1cm4gMDsKIH0KIAotLypGSVhNRTogVGhpcyBzZWVtcyB0byBiZSBnZW5lcmljIGVub3VnaCB0byBiZSBhdCB2aWRlb2RldjIgKi8KLXN0YXRpYyBpbnQgdmlkaW9jX3NfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCi0JCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZikKKy8qIHByZWNhbGN1bGF0ZSBjb2xvciBiYXIgdmFsdWVzIHRvIHNwZWVkIHVwIHJlbmRlcmluZyAqLworc3RhdGljIHZvaWQgcHJlY2FsY3VsYXRlX2JhcnMoc3RydWN0IHZpdmlfZmggKmZoKQogewotCXN0cnVjdCB2aXZpX2ZoICAqZmggPSBwcml2OwotCXN0cnVjdCB2aWRlb2J1Zl9xdWV1ZSAqcSA9ICZmaC0+dmJfdmlkcTsKKwlzdHJ1Y3Qgdml2aV9kZXYgKmRldiA9IGZoLT5kZXY7CiAJdW5zaWduZWQgY2hhciByLCBnLCBiOwogCWludCBrLCBpc195dXY7CiAKLQlpbnQgcmV0ID0gdmlkaW9jX3RyeV9mbXRfdmlkX2NhcChmaWxlLCBmaCwgZik7Ci0JaWYgKHJldCA8IDApCi0JCXJldHVybiAocmV0KTsKKwlmaC0+aW5wdXQgPSBkZXYtPmlucHV0OwogCi0JbXV0ZXhfbG9jaygmcS0+dmJfbG9jayk7Ci0KLQlpZiAodmlkZW9idWZfcXVldWVfaXNfYnVzeSgmZmgtPnZiX3ZpZHEpKSB7Ci0JCWRwcmludGsoZmgtPmRldiwgMSwgIiVzIHF1ZXVlIGJ1c3lcbiIsIF9fZnVuY19fKTsKLQkJcmV0ID0gLUVCVVNZOwotCQlnb3RvIG91dDsKLQl9Ci0KLQlmaC0+Zm10ICAgICAgICAgICA9IGdldF9mb3JtYXQoZik7Ci0JZmgtPndpZHRoICAgICAgICAgPSBmLT5mbXQucGl4LndpZHRoOwotCWZoLT5oZWlnaHQgICAgICAgID0gZi0+Zm10LnBpeC5oZWlnaHQ7Ci0JZmgtPnZiX3ZpZHEuZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOwotCWZoLT50eXBlICAgICAgICAgID0gZi0+dHlwZTsKLQotCS8qIHByZWNhbGN1bGF0ZSBjb2xvciBiYXIgdmFsdWVzIHRvIHNwZWVkIHVwIHJlbmRlcmluZyAqLwogCWZvciAoayA9IDA7IGsgPCA4OyBrKyspIHsKLQkJciA9IGJhcnNba11bMF07Ci0JCWcgPSBiYXJzW2tdWzFdOwotCQliID0gYmFyc1trXVsyXTsKKwkJciA9IGJhcnNbZmgtPmlucHV0XS5iYXJba11bMF07CisJCWcgPSBiYXJzW2ZoLT5pbnB1dF0uYmFyW2tdWzFdOworCQliID0gYmFyc1tmaC0+aW5wdXRdLmJhcltrXVsyXTsKIAkJaXNfeXV2ID0gMDsKIAogCQlzd2l0Y2ggKGZoLT5mbXQtPmZvdXJjYykgewpAQCAtODcxLDExICs5NDUsNDAgQEAKIAkJfQogCX0KIAorfQorCisvKkZJWE1FOiBUaGlzIHNlZW1zIHRvIGJlIGdlbmVyaWMgZW5vdWdoIHRvIGJlIGF0IHZpZGVvZGV2MiAqLworc3RhdGljIGludCB2aWRpb2Nfc19mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfZm9ybWF0ICpmKQoreworCXN0cnVjdCB2aXZpX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHZpZGVvYnVmX3F1ZXVlICpxID0gJmZoLT52Yl92aWRxOworCisJaW50IHJldCA9IHZpZGlvY190cnlfZm10X3ZpZF9jYXAoZmlsZSwgZmgsIGYpOworCWlmIChyZXQgPCAwKQorCQlyZXR1cm4gcmV0OworCisJbXV0ZXhfbG9jaygmcS0+dmJfbG9jayk7CisKKwlpZiAodmlkZW9idWZfcXVldWVfaXNfYnVzeSgmZmgtPnZiX3ZpZHEpKSB7CisJCWRwcmludGsoZmgtPmRldiwgMSwgIiVzIHF1ZXVlIGJ1c3lcbiIsIF9fZnVuY19fKTsKKwkJcmV0ID0gLUVCVVNZOworCQlnb3RvIG91dDsKKwl9CisKKwlmaC0+Zm10ICAgICAgICAgICA9IGdldF9mb3JtYXQoZik7CisJZmgtPndpZHRoICAgICAgICAgPSBmLT5mbXQucGl4LndpZHRoOworCWZoLT5oZWlnaHQgICAgICAgID0gZi0+Zm10LnBpeC5oZWlnaHQ7CisJZmgtPnZiX3ZpZHEuZmllbGQgPSBmLT5mbXQucGl4LmZpZWxkOworCWZoLT50eXBlICAgICAgICAgID0gZi0+dHlwZTsKKworCXByZWNhbGN1bGF0ZV9iYXJzKGZoKTsKKwogCXJldCA9IDA7CiBvdXQ6CiAJbXV0ZXhfdW5sb2NrKCZxLT52Yl9sb2NrKTsKIAotCXJldHVybiAocmV0KTsKKwlyZXR1cm4gcmV0OwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19yZXFidWZzKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LApAQCAtOTUwLDI3ICsxMDUzLDM2IEBACiBzdGF0aWMgaW50IHZpZGlvY19lbnVtX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2lucHV0ICppbnApCiB7Ci0JaWYgKGlucC0+aW5kZXggIT0gMCkKKwlpZiAoaW5wLT5pbmRleCA+PSBOVU1fSU5QVVRTKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlucC0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CiAJaW5wLT5zdGQgPSBWNEwyX1NURF81MjVfNjA7Ci0Jc3RyY3B5KGlucC0+bmFtZSwgIkNhbWVyYSIpOworCXNwcmludGYoaW5wLT5uYW1lLCAiQ2FtZXJhICV1IiwgaW5wLT5pbmRleCk7CiAKIAlyZXR1cm4gKDApOwogfQogCiBzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCiB7Ci0JKmkgPSAwOworCXN0cnVjdCB2aXZpX2ZoICpmaCA9IHByaXY7CisJc3RydWN0IHZpdmlfZGV2ICpkZXYgPSBmaC0+ZGV2OworCisJKmkgPSBkZXYtPmlucHV0OwogCiAJcmV0dXJuICgwKTsKIH0KIHN0YXRpYyBpbnQgdmlkaW9jX3NfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsIHVuc2lnbmVkIGludCBpKQogewotCWlmIChpID4gMCkKKwlzdHJ1Y3Qgdml2aV9maCAqZmggPSBwcml2OworCXN0cnVjdCB2aXZpX2RldiAqZGV2ID0gZmgtPmRldjsKKworCWlmIChpID49IE5VTV9JTlBVVFMpCiAJCXJldHVybiAtRUlOVkFMOwogCisJZGV2LT5pbnB1dCA9IGk7CisJcHJlY2FsY3VsYXRlX2JhcnMoZmgpOworCiAJcmV0dXJuICgwKTsKIH0KIApAQCAtOTkzLDEyICsxMTA1LDE0IEBACiBzdGF0aWMgaW50IHZpZGlvY19nX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKKwlzdHJ1Y3Qgdml2aV9maCAqZmggPSBwcml2OworCXN0cnVjdCB2aXZpX2RldiAqZGV2ID0gZmgtPmRldjsKIAlpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHZpdmlfcWN0cmwpOyBpKyspCiAJCWlmIChjdHJsLT5pZCA9PSB2aXZpX3FjdHJsW2ldLmlkKSB7Ci0JCQljdHJsLT52YWx1ZSA9IHFjdGxfcmVnc1tpXTsKLQkJCXJldHVybiAoMCk7CisJCQljdHJsLT52YWx1ZSA9IGRldi0+cWN0bF9yZWdzW2ldOworCQkJcmV0dXJuIDA7CiAJCX0KIAogCXJldHVybiAtRUlOVkFMOwpAQCAtMTAwNiwxNiArMTEyMCwxOCBAQAogc3RhdGljIGludCB2aWRpb2Nfc19jdHJsKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAogCQkJCXN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCiB7CisJc3RydWN0IHZpdmlfZmggKmZoID0gcHJpdjsKKwlzdHJ1Y3Qgdml2aV9kZXYgKmRldiA9IGZoLT5kZXY7CiAJaW50IGk7CiAKIAlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRSh2aXZpX3FjdHJsKTsgaSsrKQogCQlpZiAoY3RybC0+aWQgPT0gdml2aV9xY3RybFtpXS5pZCkgewotCQkJaWYgKGN0cmwtPnZhbHVlIDwgdml2aV9xY3RybFtpXS5taW5pbXVtCi0JCQkgICAgfHwgY3RybC0+dmFsdWUgPiB2aXZpX3FjdHJsW2ldLm1heGltdW0pIHsKLQkJCQkJcmV0dXJuICgtRVJBTkdFKTsKLQkJCQl9Ci0JCQlxY3RsX3JlZ3NbaV0gPSBjdHJsLT52YWx1ZTsKLQkJCXJldHVybiAoMCk7CisJCQlpZiAoY3RybC0+dmFsdWUgPCB2aXZpX3FjdHJsW2ldLm1pbmltdW0gfHwKKwkJCSAgICBjdHJsLT52YWx1ZSA+IHZpdmlfcWN0cmxbaV0ubWF4aW11bSkgeworCQkJCXJldHVybiAtRVJBTkdFOworCQkJfQorCQkJZGV2LT5xY3RsX3JlZ3NbaV0gPSBjdHJsLT52YWx1ZTsKKwkJCXJldHVybiAwOwogCQl9CiAJcmV0dXJuIC1FSU5WQUw7CiB9CkBAIC0xMDI2LDMyICsxMTQyLDIwIEBACiAKIHN0YXRpYyBpbnQgdml2aV9vcGVuKHN0cnVjdCBmaWxlICpmaWxlKQogewotCWludCBtaW5vciA9IHZpZGVvX2RldmRhdGEoZmlsZSktPm1pbm9yOwotCXN0cnVjdCB2aXZpX2RldiAqZGV2OworCXN0cnVjdCB2aXZpX2RldiAqZGV2ID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKIAlzdHJ1Y3Qgdml2aV9maCAqZmggPSBOVUxMOwotCWludCBpOwogCWludCByZXR2YWwgPSAwOwogCi0JcHJpbnRrKEtFUk5fREVCVUcgInZpdmk6IG9wZW4gY2FsbGVkIChtaW5vcj0lZClcbiIsIG1pbm9yKTsKLQotCWxvY2tfa2VybmVsKCk7Ci0JbGlzdF9mb3JfZWFjaF9lbnRyeShkZXYsICZ2aXZpX2Rldmxpc3QsIHZpdmlfZGV2bGlzdCkKLQkJaWYgKGRldi0+dmZkLT5taW5vciA9PSBtaW5vcikKLQkJCWdvdG8gZm91bmQ7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCXJldHVybiAtRU5PREVWOwotCi1mb3VuZDoKIAltdXRleF9sb2NrKCZkZXYtPm11dGV4KTsKIAlkZXYtPnVzZXJzKys7CiAKIAlpZiAoZGV2LT51c2VycyA+IDEpIHsKIAkJZGV2LT51c2Vycy0tOwotCQlyZXR2YWwgPSAtRUJVU1k7Ci0JCWdvdG8gdW5sb2NrOworCQltdXRleF91bmxvY2soJmRldi0+bXV0ZXgpOworCQlyZXR1cm4gLUVCVVNZOwogCX0KIAotCWRwcmludGsoZGV2LCAxLCAib3BlbiBtaW5vcj0lZCB0eXBlPSVzIHVzZXJzPSVkXG4iLCBtaW5vciwKKwlkcHJpbnRrKGRldiwgMSwgIm9wZW4gL2Rldi92aWRlbyVkIHR5cGU9JXMgdXNlcnM9JWRcbiIsIGRldi0+dmZkLT5udW0sCiAJCXY0bDJfdHlwZV9uYW1lc1tWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkVdLCBkZXYtPnVzZXJzKTsKIAogCS8qIGFsbG9jYXRlICsgaW5pdGlhbGl6ZSBwZXIgZmlsZWhhbmRsZSBkYXRhICovCkBAIC0xMDU5LDE0ICsxMTYzLDExIEBACiAJaWYgKE5VTEwgPT0gZmgpIHsKIAkJZGV2LT51c2Vycy0tOwogCQlyZXR2YWwgPSAtRU5PTUVNOwotCQlnb3RvIHVubG9jazsKIAl9Ci11bmxvY2s6CiAJbXV0ZXhfdW5sb2NrKCZkZXYtPm11dGV4KTsKLQlpZiAocmV0dmFsKSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKKworCWlmIChyZXR2YWwpCiAJCXJldHVybiByZXR2YWw7Ci0JfQogCiAJZmlsZS0+cHJpdmF0ZV9kYXRhID0gZmg7CiAJZmgtPmRldiAgICAgID0gZGV2OwpAQCAtMTA3NiwxMCArMTE3Nyw2IEBACiAJZmgtPndpZHRoICAgID0gNjQwOwogCWZoLT5oZWlnaHQgICA9IDQ4MDsKIAotCS8qIFB1dCBhbGwgY29udHJvbHMgYXQgYSBzYW5lIHN0YXRlICovCi0JZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodml2aV9xY3RybCk7IGkrKykKLQkJcWN0bF9yZWdzW2ldID0gdml2aV9xY3RybFtpXS5kZWZhdWx0X3ZhbHVlOwotCiAJLyogUmVzZXRzIGZyYW1lIGNvdW50ZXJzICovCiAJZGV2LT5oID0gMDsKIAlkZXYtPm0gPSAwOwpAQCAtMTA5NSw3ICsxMTkyLDYgQEAKIAkJCXNpemVvZihzdHJ1Y3Qgdml2aV9idWZmZXIpLCBmaCk7CiAKIAl2aXZpX3N0YXJ0X3RocmVhZChmaCk7Ci0JdW5sb2NrX2tlcm5lbCgpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0xMTUxLDMyICsxMjQ3LDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB2aXZpX3JlbGVhc2Uodm9pZCkKLXsKLQlzdHJ1Y3Qgdml2aV9kZXYgKmRldjsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0OwotCi0Jd2hpbGUgKCFsaXN0X2VtcHR5KCZ2aXZpX2Rldmxpc3QpKSB7Ci0JCWxpc3QgPSB2aXZpX2Rldmxpc3QubmV4dDsKLQkJbGlzdF9kZWwobGlzdCk7Ci0JCWRldiA9IGxpc3RfZW50cnkobGlzdCwgc3RydWN0IHZpdmlfZGV2LCB2aXZpX2Rldmxpc3QpOwotCi0JCWlmICgtMSAhPSBkZXYtPnZmZC0+bWlub3IpIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiB1bnJlZ2lzdGVyaW5nIC9kZXYvdmlkZW8lZFxuIiwKLQkJCQlWSVZJX01PRFVMRV9OQU1FLCBkZXYtPnZmZC0+bnVtKTsKLQkJCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKGRldi0+dmZkKTsKLQkJfSBlbHNlIHsKLQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiByZWxlYXNpbmcgL2Rldi92aWRlbyVkXG4iLAotCQkJCVZJVklfTU9EVUxFX05BTUUsIGRldi0+dmZkLT5udW0pOwotCQkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoZGV2LT52ZmQpOwotCQl9Ci0KLQkJa2ZyZWUoZGV2KTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQogc3RhdGljIGludCB2aXZpX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCB2aXZpX2ZoICAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CkBAIC0xMjM5LDg3ICsxMzA5LDEzMCBAQAogCS50dm5vcm1zICAgICAgICAgICAgICA9IFY0TDJfU1REXzUyNV82MCwKIAkuY3VycmVudF9ub3JtICAgICAgICAgPSBWNEwyX1NURF9OVFNDX00sCiB9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogCUluaXRpYWxpemF0aW9uIGFuZCBtb2R1bGUgc3R1ZmYKICAgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCiAKK3N0YXRpYyBpbnQgdml2aV9yZWxlYXNlKHZvaWQpCit7CisJc3RydWN0IHZpdmlfZGV2ICpkZXY7CisJc3RydWN0IGxpc3RfaGVhZCAqbGlzdDsKKworCXdoaWxlICghbGlzdF9lbXB0eSgmdml2aV9kZXZsaXN0KSkgeworCQlsaXN0ID0gdml2aV9kZXZsaXN0Lm5leHQ7CisJCWxpc3RfZGVsKGxpc3QpOworCQlkZXYgPSBsaXN0X2VudHJ5KGxpc3QsIHN0cnVjdCB2aXZpX2Rldiwgdml2aV9kZXZsaXN0KTsKKworCQl2NGwyX2luZm8oJmRldi0+djRsMl9kZXYsICJ1bnJlZ2lzdGVyaW5nIC9kZXYvdmlkZW8lZFxuIiwKKwkJCWRldi0+dmZkLT5udW0pOworCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZShkZXYtPnZmZCk7CisJCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmRldi0+djRsMl9kZXYpOworCQlrZnJlZShkZXYpOworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IF9faW5pdCB2aXZpX2NyZWF0ZV9pbnN0YW5jZShpbnQgaW5zdCkKK3sKKwlzdHJ1Y3Qgdml2aV9kZXYgKmRldjsKKwlzdHJ1Y3QgdmlkZW9fZGV2aWNlICp2ZmQ7CisJaW50IHJldCwgaTsKKworCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKKwlpZiAoIWRldikKKwkJcmV0dXJuIC1FTk9NRU07CisKKwlzbnByaW50ZihkZXYtPnY0bDJfZGV2Lm5hbWUsIHNpemVvZihkZXYtPnY0bDJfZGV2Lm5hbWUpLAorCQkJIiVzLSUwM2QiLCBWSVZJX01PRFVMRV9OQU1FLCBpbnN0KTsKKwlyZXQgPSB2NGwyX2RldmljZV9yZWdpc3RlcihOVUxMLCAmZGV2LT52NGwyX2Rldik7CisJaWYgKHJldCkKKwkJZ290byBmcmVlX2RldjsKKworCS8qIGluaXQgdmlkZW8gZG1hIHF1ZXVlcyAqLworCUlOSVRfTElTVF9IRUFEKCZkZXYtPnZpZHEuYWN0aXZlKTsKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPnZpZHEud3EpOworCisJLyogaW5pdGlhbGl6ZSBsb2NrcyAqLworCXNwaW5fbG9ja19pbml0KCZkZXYtPnNsb2NrKTsKKwltdXRleF9pbml0KCZkZXYtPm11dGV4KTsKKworCXJldCA9IC1FTk9NRU07CisJdmZkID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKCF2ZmQpCisJCWdvdG8gdW5yZWdfZGV2OworCisJKnZmZCA9IHZpdmlfdGVtcGxhdGU7CisKKwlyZXQgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UodmZkLCBWRkxfVFlQRV9HUkFCQkVSLCB2aWRlb19ucik7CisJaWYgKHJldCA8IDApCisJCWdvdG8gcmVsX3ZkZXY7CisKKwl2aWRlb19zZXRfZHJ2ZGF0YSh2ZmQsIGRldik7CisKKwkvKiBTZXQgYWxsIGNvbnRyb2xzIHRvIHRoZWlyIGRlZmF1bHQgdmFsdWUuICovCisJZm9yIChpID0gMDsgaSA8IEFSUkFZX1NJWkUodml2aV9xY3RybCk7IGkrKykKKwkJZGV2LT5xY3RsX3JlZ3NbaV0gPSB2aXZpX3FjdHJsW2ldLmRlZmF1bHRfdmFsdWU7CisKKwkvKiBOb3cgdGhhdCBldmVyeXRoaW5nIGlzIGZpbmUsIGxldCdzIGFkZCBpdCB0byBkZXZpY2UgbGlzdCAqLworCWxpc3RfYWRkX3RhaWwoJmRldi0+dml2aV9kZXZsaXN0LCAmdml2aV9kZXZsaXN0KTsKKworCXNucHJpbnRmKHZmZC0+bmFtZSwgc2l6ZW9mKHZmZC0+bmFtZSksICIlcyAoJWkpIiwKKwkJCXZpdmlfdGVtcGxhdGUubmFtZSwgdmZkLT5udW0pOworCisJaWYgKHZpZGVvX25yID49IDApCisJCXZpZGVvX25yKys7CisKKwlkZXYtPnZmZCA9IHZmZDsKKwl2NGwyX2luZm8oJmRldi0+djRsMl9kZXYsICJWNEwyIGRldmljZSByZWdpc3RlcmVkIGFzIC9kZXYvdmlkZW8lZFxuIiwKKwkJCXZmZC0+bnVtKTsKKwlyZXR1cm4gMDsKKworcmVsX3ZkZXY6CisJdmlkZW9fZGV2aWNlX3JlbGVhc2UodmZkKTsKK3VucmVnX2RldjoKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZkZXYtPnY0bDJfZGV2KTsKK2ZyZWVfZGV2OgorCWtmcmVlKGRldik7CisJcmV0dXJuIHJldDsKK30KKwogLyogVGhpcyByb3V0aW5lIGFsbG9jYXRlcyBmcm9tIDEgdG8gbl9kZXZzIHZpcnR1YWwgZHJpdmVycy4KIAogICAgVGhlIHJlYWwgbWF4aW11bSBudW1iZXIgb2YgdmlydHVhbCBkcml2ZXJzIHdpbGwgZGVwZW5kIG9uIGhvdyBtYW55IGRyaXZlcnMKICAgIHdpbGwgc3VjY2VlZC4gVGhpcyBpcyBsaW1pdGVkIHRvIHRoZSBtYXhpbXVtIG51bWJlciBvZiBkZXZpY2VzIHRoYXQKLSAgIHZpZGVvZGV2IHN1cHBvcnRzLiBTaW5jZSB0aGVyZSBhcmUgNjQgbWlub3JzIGZvciB2aWRlbyBncmFiYmVycywgdGhpcyBpcwotICAgY3VycmVudGx5IHRoZSB0aGVvcmV0aWNhbCBtYXhpbXVtIGxpbWl0LiBIb3dldmVyLCBhIGZ1cnRoZXIgbGltaXQgZG9lcwotICAgZXhpc3QgYXQgdmlkZW9kZXYgdGhhdCBmb3JiaWRzIGFueSBkcml2ZXIgdG8gcmVnaXN0ZXIgbW9yZSB0aGFuIDMyIHZpZGVvCi0gICBncmFiYmVycy4KKyAgIHZpZGVvZGV2IHN1cHBvcnRzLCB3aGljaCBpcyBlcXVhbCB0byBWSURFT19OVU1fREVWSUNFUy4KICAqLwogc3RhdGljIGludCBfX2luaXQgdml2aV9pbml0KHZvaWQpCiB7Ci0JaW50IHJldCA9IC1FTk9NRU0sIGk7Ci0Jc3RydWN0IHZpdmlfZGV2ICpkZXY7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSAqdmZkOworCWludCByZXQgPSAwLCBpOwogCiAJaWYgKG5fZGV2cyA8PSAwKQogCQluX2RldnMgPSAxOwogCiAJZm9yIChpID0gMDsgaSA8IG5fZGV2czsgaSsrKSB7Ci0JCWRldiA9IGt6YWxsb2Moc2l6ZW9mKCpkZXYpLCBHRlBfS0VSTkVMKTsKLQkJaWYgKCFkZXYpCi0JCQlicmVhazsKLQotCQkvKiBpbml0IHZpZGVvIGRtYSBxdWV1ZXMgKi8KLQkJSU5JVF9MSVNUX0hFQUQoJmRldi0+dmlkcS5hY3RpdmUpOwotCQlpbml0X3dhaXRxdWV1ZV9oZWFkKCZkZXYtPnZpZHEud3EpOwotCi0JCS8qIGluaXRpYWxpemUgbG9ja3MgKi8KLQkJc3Bpbl9sb2NrX2luaXQoJmRldi0+c2xvY2spOwotCQltdXRleF9pbml0KCZkZXYtPm11dGV4KTsKLQotCQl2ZmQgPSB2aWRlb19kZXZpY2VfYWxsb2MoKTsKLQkJaWYgKCF2ZmQpIHsKLQkJCWtmcmVlKGRldik7Ci0JCQlicmVhazsKLQkJfQotCi0JCSp2ZmQgPSB2aXZpX3RlbXBsYXRlOwotCi0JCXJldCA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh2ZmQsIFZGTF9UWVBFX0dSQUJCRVIsIHZpZGVvX25yKTsKLQkJaWYgKHJldCA8IDApIHsKLQkJCXZpZGVvX2RldmljZV9yZWxlYXNlKHZmZCk7Ci0JCQlrZnJlZShkZXYpOwotCi0JCQkvKiBJZiBzb21lIHJlZ2lzdGVycyBzdWNjZWVkZWQsIGtlZXAgZHJpdmVyICovCisJCXJldCA9IHZpdmlfY3JlYXRlX2luc3RhbmNlKGkpOworCQlpZiAocmV0KSB7CisJCQkvKiBJZiBzb21lIGluc3RhbnRpYXRpb25zIHN1Y2NlZWRlZCwga2VlcCBkcml2ZXIgKi8KIAkJCWlmIChpKQogCQkJCXJldCA9IDA7Ci0KIAkJCWJyZWFrOwogCQl9Ci0KLQkJLyogTm93IHRoYXQgZXZlcnl0aGluZyBpcyBmaW5lLCBsZXQncyBhZGQgaXQgdG8gZGV2aWNlIGxpc3QgKi8KLQkJbGlzdF9hZGRfdGFpbCgmZGV2LT52aXZpX2Rldmxpc3QsICZ2aXZpX2Rldmxpc3QpOwotCi0JCXNucHJpbnRmKHZmZC0+bmFtZSwgc2l6ZW9mKHZmZC0+bmFtZSksICIlcyAoJWkpIiwKLQkJCSB2aXZpX3RlbXBsYXRlLm5hbWUsIHZmZC0+bWlub3IpOwotCi0JCWlmICh2aWRlb19uciA+PSAwKQotCQkJdmlkZW9fbnIrKzsKLQotCQlkZXYtPnZmZCA9IHZmZDsKLQkJcHJpbnRrKEtFUk5fSU5GTyAiJXM6IFY0TDIgZGV2aWNlIHJlZ2lzdGVyZWQgYXMgL2Rldi92aWRlbyVkXG4iLAotCQkJVklWSV9NT0RVTEVfTkFNRSwgdmZkLT5udW0pOwogCX0KIAogCWlmIChyZXQgPCAwKSB7Ci0JCXZpdmlfcmVsZWFzZSgpOwogCQlwcmludGsoS0VSTl9JTkZPICJFcnJvciAlZCB3aGlsZSBsb2FkaW5nIHZpdmkgZHJpdmVyXG4iLCByZXQpOwotCX0gZWxzZSB7Ci0JCXByaW50ayhLRVJOX0lORk8gIlZpZGVvIFRlY2hub2xvZ3kgTWFnYXppbmUgVmlydHVhbCBWaWRlbyAiCisJCXJldHVybiByZXQ7CisJfQorCisJcHJpbnRrKEtFUk5fSU5GTyAiVmlkZW8gVGVjaG5vbG9neSBNYWdhemluZSBWaXJ0dWFsIFZpZGVvICIKIAkJCSJDYXB0dXJlIEJvYXJkIHZlciAldS4ldS4ldSBzdWNjZXNzZnVsbHkgbG9hZGVkLlxuIiwKIAkJCShWSVZJX1ZFUlNJT04gPj4gMTYpICYgMHhGRiwgKFZJVklfVkVSU0lPTiA+PiA4KSAmIDB4RkYsCiAJCQlWSVZJX1ZFUlNJT04gJiAweEZGKTsKIAotCQkvKiBuX2RldnMgd2lsbCByZWZsZWN0IHRoZSBhY3R1YWwgbnVtYmVyIG9mIGFsbG9jYXRlZCBkZXZpY2VzICovCi0JCW5fZGV2cyA9IGk7Ci0JfQorCS8qIG5fZGV2cyB3aWxsIHJlZmxlY3QgdGhlIGFjdHVhbCBudW1iZXIgb2YgYWxsb2NhdGVkIGRldmljZXMgKi8KKwluX2RldnMgPSBpOwogCiAJcmV0dXJuIHJldDsKIH0KQEAgLTEzMzEsMTkgKzE0NDQsMyBAQAogCiBtb2R1bGVfaW5pdCh2aXZpX2luaXQpOwogbW9kdWxlX2V4aXQodml2aV9leGl0KTsKLQotTU9EVUxFX0RFU0NSSVBUSU9OKCJWaWRlbyBUZWNobm9sb2d5IE1hZ2F6aW5lIFZpcnR1YWwgVmlkZW8gQ2FwdHVyZSBCb2FyZCIpOwotTU9EVUxFX0FVVEhPUigiTWF1cm8gQ2FydmFsaG8gQ2hlaGFiLCBUZWQgV2FsdGhlciBhbmQgSm9obiBTb2tvbCIpOwotTU9EVUxFX0xJQ0VOU0UoIkR1YWwgQlNEL0dQTCIpOwotCi1tb2R1bGVfcGFyYW0odmlkZW9fbnIsIHVpbnQsIDA0NDQpOwotTU9EVUxFX1BBUk1fREVTQyh2aWRlb19uciwgInZpZGVvIGltaW5vciBzdGFydCBudW1iZXIiKTsKLQotbW9kdWxlX3BhcmFtKG5fZGV2cywgdWludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKG5fZGV2cywgIm51bWJlciBvZiB2aWRlbyBkZXZpY2VzIHRvIGNyZWF0ZSIpOwotCi1tb2R1bGVfcGFyYW1fbmFtZWQoZGVidWcsIHZpdmlfdGVtcGxhdGUuZGVidWcsIGludCwgMDQ0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGRlYnVnLCAiYWN0aXZhdGVzIGRlYnVnIGluZm8iKTsKLQotbW9kdWxlX3BhcmFtKHZpZF9saW1pdCwgaW50LCAwNjQ0KTsKLU1PRFVMRV9QQVJNX0RFU0ModmlkX2xpbWl0LCAiY2FwdHVyZSBtZW1vcnkgbGltaXQgaW4gbWVnYWJ5dGVzIik7CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZwMjdzbXB4LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3ZwMjdzbXB4LmMKaW5kZXggNWQ3M2Y2Ni4uNDJlMjNhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92cDI3c21weC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdnAyN3NtcHguYwpAQCAtMTI5LDExICsxMjksNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZwMjdzbXB4X2NvbW1hbmQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdW5zaWduZWQgY21kLCB2b2lkICphcmcpCi17Ci0JcmV0dXJuIHY0bDJfc3ViZGV2X2NvbW1hbmQoaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCksIGNtZCwgYXJnKTsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KIAogc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyB2cDI3c21weF9jb3JlX29wcyA9IHsKQEAgLTIwNiw4ICsyMDEsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAidnAyN3NtcHgiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9WUDI3U01QWCwKLQkuY29tbWFuZCA9IHZwMjdzbXB4X2NvbW1hbmQsCiAJLnByb2JlID0gdnAyN3NtcHhfcHJvYmUsCiAJLnJlbW92ZSA9IHZwMjdzbXB4X3JlbW92ZSwKIAkuaWRfdGFibGUgPSB2cDI3c21weF9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdnB4MzIyMC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby92cHgzMjIwLmMKaW5kZXggNjdhYTBkYi4uMmZhN2U4YiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby92cHgzMjIwLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby92cHgzMjIwLmMKQEAgLTI0LDEwICsyNCwxMCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9pMmMuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi5oPgogCiBNT0RVTEVfREVTQ1JJUFRJT04oInZweDMyMjBhL3ZweDMyMTZiL3ZweDMyMTRjIHZpZGVvIGRlY29kZXIgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJMYXVyZW50IFBpbmNoYXJ0Iik7CkBAIC0zNywxNCArMzcsMTcgQEAKIG1vZHVsZV9wYXJhbShkZWJ1ZywgaW50LCAwKTsKIE1PRFVMRV9QQVJNX0RFU0MoZGVidWcsICJEZWJ1ZyBsZXZlbCAoMC0xKSIpOwogCisKICNkZWZpbmUgVlBYX1RJTUVPVVRfQ09VTlQgIDEwCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0cnVjdCB2cHgzMjIwIHsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgc2Q7CiAJdW5zaWduZWQgY2hhciByZWdbMjU1XTsKIAotCWludCBub3JtOworCXY0bDJfc3RkX2lkIG5vcm07CisJaW50IGlkZW50OwogCWludCBpbnB1dDsKIAlpbnQgZW5hYmxlOwogCWludCBicmlnaHQ7CkBAIC01MywzMCArNTYsMzggQEAKIAlpbnQgc2F0OwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3QgdnB4MzIyMCAqdG9fdnB4MzIyMChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkKQoreworCXJldHVybiBjb250YWluZXJfb2Yoc2QsIHN0cnVjdCB2cHgzMjIwLCBzZCk7Cit9CisKIHN0YXRpYyBjaGFyICppbnB1dHNbXSA9IHsgImludGVybmFsIiwgImNvbXBvc2l0ZSIsICJzdmlkZW8iIH07CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKLXN0YXRpYyBpbmxpbmUgaW50IHZweDMyMjBfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggcmVnLCB1OCB2YWx1ZSkKK3N0YXRpYyBpbmxpbmUgaW50IHZweDMyMjBfd3JpdGUoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdTggcmVnLCB1OCB2YWx1ZSkKIHsKKwlzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50ID0gdjRsMl9nZXRfc3ViZGV2ZGF0YShzZCk7CiAJc3RydWN0IHZweDMyMjAgKmRlY29kZXIgPSBpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KTsKIAogCWRlY29kZXItPnJlZ1tyZWddID0gdmFsdWU7CiAJcmV0dXJuIGkyY19zbWJ1c193cml0ZV9ieXRlX2RhdGEoY2xpZW50LCByZWcsIHZhbHVlKTsKIH0KIAotc3RhdGljIGlubGluZSBpbnQgdnB4MzIyMF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHU4IHJlZykKK3N0YXRpYyBpbmxpbmUgaW50IHZweDMyMjBfcmVhZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCByZWcpCiB7CisJc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCA9IHY0bDJfZ2V0X3N1YmRldmRhdGEoc2QpOworCiAJcmV0dXJuIGkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIHJlZyk7CiB9CiAKLXN0YXRpYyBpbnQgdnB4MzIyMF9mcF9zdGF0dXMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgdnB4MzIyMF9mcF9zdGF0dXMoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCkKIHsKIAl1bnNpZ25lZCBjaGFyIHN0YXR1czsKIAl1bnNpZ25lZCBpbnQgaTsKIAogCWZvciAoaSA9IDA7IGkgPCBWUFhfVElNRU9VVF9DT1VOVDsgaSsrKSB7Ci0JCXN0YXR1cyA9IHZweDMyMjBfcmVhZChjbGllbnQsIDB4MjkpOworCQlzdGF0dXMgPSB2cHgzMjIwX3JlYWQoc2QsIDB4MjkpOwogCiAJCWlmICghKHN0YXR1cyAmIDQpKQogCQkJcmV0dXJuIDA7CkBAIC05MCw1NyArMTAxLDYwIEBACiAJcmV0dXJuIC0xOwogfQogCi1zdGF0aWMgaW50IHZweDMyMjBfZnBfd3JpdGUoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCwgdTggZnBhZGRyLCB1MTYgZGF0YSkKK3N0YXRpYyBpbnQgdnB4MzIyMF9mcF93cml0ZShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1OCBmcGFkZHIsIHUxNiBkYXRhKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKwogCS8qIFdyaXRlIHRoZSAxNi1iaXQgYWRkcmVzcyB0byB0aGUgRlBXUiByZWdpc3RlciAqLwogCWlmIChpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGNsaWVudCwgMHgyNywgc3dhYjE2KGZwYWRkcikpID09IC0xKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiJXM6IGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JaWYgKHZweDMyMjBfZnBfc3RhdHVzKGNsaWVudCkgPCAwKQorCWlmICh2cHgzMjIwX2ZwX3N0YXR1cyhzZCkgPCAwKQogCQlyZXR1cm4gLTE7CiAKIAkvKiBXcml0ZSB0aGUgMTYtYml0IGRhdGEgdG8gdGhlIEZQREFUIHJlZ2lzdGVyICovCiAJaWYgKGkyY19zbWJ1c193cml0ZV93b3JkX2RhdGEoY2xpZW50LCAweDI4LCBzd2FiMTYoZGF0YSkpID09IC0xKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiJXM6IGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB1MTYgdnB4MzIyMF9mcF9yZWFkKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHUxNiBmcGFkZHIpCitzdGF0aWMgdTE2IHZweDMyMjBfZnBfcmVhZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MTYgZnBhZGRyKQogeworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKIAlzMTYgZGF0YTsKIAogCS8qIFdyaXRlIHRoZSAxNi1iaXQgYWRkcmVzcyB0byB0aGUgRlBSRCByZWdpc3RlciAqLwogCWlmIChpMmNfc21idXNfd3JpdGVfd29yZF9kYXRhKGNsaWVudCwgMHgyNiwgc3dhYjE2KGZwYWRkcikpID09IC0xKSB7Ci0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAiJXM6IGZhaWxlZFxuIiwgX19mdW5jX18pOwogCQlyZXR1cm4gLTE7CiAJfQogCi0JaWYgKHZweDMyMjBfZnBfc3RhdHVzKGNsaWVudCkgPCAwKQorCWlmICh2cHgzMjIwX2ZwX3N0YXR1cyhzZCkgPCAwKQogCQlyZXR1cm4gLTE7CiAKIAkvKiBSZWFkIHRoZSAxNi1iaXQgZGF0YSBmcm9tIHRoZSBGUERBVCByZWdpc3RlciAqLwogCWRhdGEgPSBpMmNfc21idXNfcmVhZF93b3JkX2RhdGEoY2xpZW50LCAweDI4KTsKIAlpZiAoZGF0YSA9PSAtMSkgewotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICIlczogZmFpbGVkXG4iLCBfX2Z1bmNfXyk7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIiVzOiBmYWlsZWRcbiIsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCXJldHVybiBzd2FiMTYoZGF0YSk7CiB9CiAKLXN0YXRpYyBpbnQgdnB4MzIyMF93cml0ZV9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKK3N0YXRpYyBpbnQgdnB4MzIyMF93cml0ZV9ibG9jayhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBjb25zdCB1OCAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKIAl1OCByZWc7CiAJaW50IHJldCA9IC0xOwogCiAJd2hpbGUgKGxlbiA+PSAyKSB7CiAJCXJlZyA9ICpkYXRhKys7Ci0JCXJldCA9IHZweDMyMjBfd3JpdGUoY2xpZW50LCByZWcsICpkYXRhKyspOworCQlyZXQgPSB2cHgzMjIwX3dyaXRlKHNkLCByZWcsICpkYXRhKyspOwogCQlpZiAocmV0IDwgMCkKIAkJCWJyZWFrOwogCQlsZW4gLT0gMjsKQEAgLTE0OSw3ICsxNjMsNyBAQAogCXJldHVybiByZXQ7CiB9CiAKLXN0YXRpYyBpbnQgdnB4MzIyMF93cml0ZV9mcF9ibG9jayhzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LAorc3RhdGljIGludCB2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsCiAJCWNvbnN0IHUxNiAqZGF0YSwgdW5zaWduZWQgaW50IGxlbikKIHsKIAl1OCByZWc7CkBAIC0xNTcsNyArMTcxLDcgQEAKIAogCXdoaWxlIChsZW4gPiAxKSB7CiAJCXJlZyA9ICpkYXRhKys7Ci0JCXJldCB8PSB2cHgzMjIwX2ZwX3dyaXRlKGNsaWVudCwgcmVnLCAqZGF0YSsrKTsKKwkJcmV0IHw9IHZweDMyMjBfZnBfd3JpdGUoc2QsIHJlZywgKmRhdGErKyk7CiAJCWxlbiAtPSAyOwogCX0KIApAQCAtMjU5LDI3NiArMjczLDI3NyBAQAogCTB4NGIsIDB4Mjk4LAkJLyogUExMIGdhaW4gKi8KIH07CiAKLXN0YXRpYyB2b2lkIHZweDMyMjBfZHVtcF9pMmMoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKLXsKLQlpbnQgbGVuID0gc2l6ZW9mKGluaXRfY29tbW9uKTsKLQljb25zdCB1bnNpZ25lZCBjaGFyICpkYXRhID0gaW5pdF9jb21tb247CiAKLQl3aGlsZSAobGVuID4gMSkgewotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpMmMgcmVnIDB4JTAyeCBkYXRhIDB4JTAyeFxuIiwKLQkJCSpkYXRhLCB2cHgzMjIwX3JlYWQoY2xpZW50LCAqZGF0YSkpOwotCQlkYXRhICs9IDI7Ci0JCWxlbiAtPSAyOwotCX0KK3N0YXRpYyBpbnQgdnB4MzIyMF9pbml0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHUzMiB2YWwpCit7CisJc3RydWN0IHZweDMyMjAgKmRlY29kZXIgPSB0b192cHgzMjIwKHNkKTsKKworCXZweDMyMjBfd3JpdGVfYmxvY2soc2QsIGluaXRfY29tbW9uLCBzaXplb2YoaW5pdF9jb21tb24pKTsKKwl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKHNkLCBpbml0X2ZwLCBzaXplb2YoaW5pdF9mcCkgPj4gMSk7CisJaWYgKGRlY29kZXItPm5vcm0gJiBWNEwyX1NURF9OVFNDKQorCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKHNkLCBpbml0X250c2MsIHNpemVvZihpbml0X250c2MpID4+IDEpOworCWVsc2UgaWYgKGRlY29kZXItPm5vcm0gJiBWNEwyX1NURF9QQUwpCisJCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soc2QsIGluaXRfcGFsLCBzaXplb2YoaW5pdF9wYWwpID4+IDEpOworCWVsc2UgaWYgKGRlY29kZXItPm5vcm0gJiBWNEwyX1NURF9TRUNBTSkKKwkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhzZCwgaW5pdF9zZWNhbSwgc2l6ZW9mKGluaXRfc2VjYW0pID4+IDEpOworCWVsc2UKKwkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhzZCwgaW5pdF9wYWwsIHNpemVvZihpbml0X3BhbCkgPj4gMSk7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdnB4MzIyMF9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQorc3RhdGljIGludCB2cHgzMjIwX3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgKnBzdGF0dXMsIHY0bDJfc3RkX2lkICpwc3RkKQogewotCXN0cnVjdCB2cHgzMjIwICpkZWNvZGVyID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisJaW50IHJlcyA9IFY0TDJfSU5fU1RfTk9fU0lHTkFMLCBzdGF0dXM7CisJdjRsMl9zdGRfaWQgc3RkID0gMDsKIAotCXN3aXRjaCAoY21kKSB7Ci0JY2FzZSAwOgotCXsKLQkJdnB4MzIyMF93cml0ZV9ibG9jayhjbGllbnQsIGluaXRfY29tbW9uLAotCQkJCSAgICBzaXplb2YoaW5pdF9jb21tb24pKTsKLQkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhjbGllbnQsIGluaXRfZnAsCi0JCQkJICAgICAgIHNpemVvZihpbml0X2ZwKSA+PiAxKTsKLQkJc3dpdGNoIChkZWNvZGVyLT5ub3JtKSB7Ci0JCWNhc2UgVklERU9fTU9ERV9OVFNDOgotCQkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhjbGllbnQsIGluaXRfbnRzYywKLQkJCQkJICAgICAgIHNpemVvZihpbml0X250c2MpID4+IDEpOworCXN0YXR1cyA9IHZweDMyMjBfZnBfcmVhZChzZCwgMHgwZjMpOworCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic3RhdHVzOiAweCUwNHhcbiIsIHN0YXR1cyk7CisKKwlpZiAoc3RhdHVzIDwgMCkKKwkJcmV0dXJuIHN0YXR1czsKKworCWlmICgoc3RhdHVzICYgMHgyMCkgPT0gMCkgeworCQlyZXMgPSAwOworCisJCXN3aXRjaCAoc3RhdHVzICYgMHgxOCkgeworCQljYXNlIDB4MDA6CisJCWNhc2UgMHgxMDoKKwkJY2FzZSAweDE0OgorCQljYXNlIDB4MTg6CisJCQlzdGQgPSBWNEwyX1NURF9QQUw7CiAJCQlicmVhazsKIAotCQljYXNlIFZJREVPX01PREVfUEFMOgotCQkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhjbGllbnQsIGluaXRfcGFsLAotCQkJCQkgICAgICAgc2l6ZW9mKGluaXRfcGFsKSA+PiAxKTsKLQkJCWJyZWFrOwotCQljYXNlIFZJREVPX01PREVfU0VDQU06Ci0JCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9zZWNhbSwKLQkJCQkJICAgICAgIHNpemVvZihpbml0X3NlY2FtKSA+PiAxKTsKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhjbGllbnQsIGluaXRfcGFsLAotCQkJCQkgICAgICAgc2l6ZW9mKGluaXRfcGFsKSA+PiAxKTsKLQkJCWJyZWFrOwotCQl9Ci0JCWJyZWFrOwotCX0KLQotCWNhc2UgREVDT0RFUl9EVU1QOgotCXsKLQkJdnB4MzIyMF9kdW1wX2kyYyhjbGllbnQpOwotCQlicmVhazsKLQl9Ci0KLQljYXNlIERFQ09ERVJfR0VUX0NBUEFCSUxJVElFUzoKLQl7Ci0JCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJERUNPREVSX0dFVF9DQVBBQklMSVRJRVNcbiIpOwotCi0JCWNhcC0+ZmxhZ3MgPSBWSURFT19ERUNPREVSX1BBTCB8Ci0JCQkgICAgIFZJREVPX0RFQ09ERVJfTlRTQyB8Ci0JCQkgICAgIFZJREVPX0RFQ09ERVJfU0VDQU0gfAotCQkJICAgICBWSURFT19ERUNPREVSX0FVVE8gfAotCQkJICAgICBWSURFT19ERUNPREVSX0NDSVI7Ci0JCWNhcC0+aW5wdXRzID0gMzsKLQkJY2FwLT5vdXRwdXRzID0gMTsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX0dFVF9TVEFUVVM6Ci0JewotCQlpbnQgcmVzID0gMCwgc3RhdHVzOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIkRFQ09ERVJfR0VUX1NUQVRVU1xuIik7Ci0KLQkJc3RhdHVzID0gdnB4MzIyMF9mcF9yZWFkKGNsaWVudCwgMHgwZjMpOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgInN0YXR1czogMHglMDR4XG4iLCBzdGF0dXMpOwotCi0JCWlmIChzdGF0dXMgPCAwKQotCQkJcmV0dXJuIHN0YXR1czsKLQotCQlpZiAoKHN0YXR1cyAmIDB4MjApID09IDApIHsKLQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19HT09EIHwgREVDT0RFUl9TVEFUVVNfQ09MT1I7Ci0KLQkJCXN3aXRjaCAoc3RhdHVzICYgMHgxOCkgewotCQkJY2FzZSAweDAwOgotCQkJY2FzZSAweDEwOgotCQkJY2FzZSAweDE0OgotCQkJY2FzZSAweDE4OgotCQkJCXJlcyB8PSBERUNPREVSX1NUQVRVU19QQUw7Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMHgwODoKLQkJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfU0VDQU07Ci0JCQkJYnJlYWs7Ci0KLQkJCWNhc2UgMHgwNDoKLQkJCWNhc2UgMHgwYzoKLQkJCWNhc2UgMHgxYzoKLQkJCQlyZXMgfD0gREVDT0RFUl9TVEFUVVNfTlRTQzsKLQkJCQlicmVhazsKLQkJCX0KLQkJfQotCi0JCSooaW50ICopIGFyZyA9IHJlczsKLQkJYnJlYWs7Ci0JfQotCi0JY2FzZSBERUNPREVSX1NFVF9OT1JNOgotCXsKLQkJaW50ICppYXJnID0gYXJnLCBkYXRhOwotCQlpbnQgdGVtcF9pbnB1dDsKLQotCQkvKiBIZXJlIHdlIGJhY2sgdXAgdGhlIGlucHV0IHNlbGVjdGlvbiBiZWNhdXNlIGl0IGdldHMKLQkJICAgb3ZlcndyaXR0ZW4gd2hlbiB3ZSBmaWxsIHRoZSByZWdpc3RlcnMgd2l0aCB0aGUKLQkJICAgY2hvb3NlbiB2aWRlbyBub3JtICovCi0JCXRlbXBfaW5wdXQgPSB2cHgzMjIwX2ZwX3JlYWQoY2xpZW50LCAweGYyKTsKLQotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJERUNPREVSX1NFVF9OT1JNICVkXG4iLCAqaWFyZyk7Ci0JCXN3aXRjaCAoKmlhcmcpIHsKLQkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9udHNjLAotCQkJCQkgICAgICAgc2l6ZW9mKGluaXRfbnRzYykgPj4gMSk7Ci0JCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJub3JtIHN3aXRjaGVkIHRvIE5UU0NcbiIpOworCQljYXNlIDB4MDg6CisJCQlzdGQgPSBWNEwyX1NURF9TRUNBTTsKIAkJCWJyZWFrOwogCi0JCWNhc2UgVklERU9fTU9ERV9QQUw6Ci0JCQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9wYWwsCi0JCQkJCSAgICAgICBzaXplb2YoaW5pdF9wYWwpID4+IDEpOwotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAibm9ybSBzd2l0Y2hlZCB0byBQQUxcbiIpOworCQljYXNlIDB4MDQ6CisJCWNhc2UgMHgwYzoKKwkJY2FzZSAweDFjOgorCQkJc3RkID0gVjRMMl9TVERfTlRTQzsKIAkJCWJyZWFrOwotCi0JCWNhc2UgVklERU9fTU9ERV9TRUNBTToKLQkJCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soY2xpZW50LCBpbml0X3NlY2FtLAotCQkJCQkgICAgICAgc2l6ZW9mKGluaXRfc2VjYW0pID4+IDEpOwotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAibm9ybSBzd2l0Y2hlZCB0byBTRUNBTVxuIik7Ci0JCQlicmVhazsKLQotCQljYXNlIFZJREVPX01PREVfQVVUTzoKLQkJCS8qIEZJWE1FIFRoaXMgaXMgb25seSBwcmVsaW1pbmFyeSBzdXBwb3J0ICovCi0JCQlkYXRhID0gdnB4MzIyMF9mcF9yZWFkKGNsaWVudCwgMHhmMikgJiAweDIwOwotCQkJdnB4MzIyMF9mcF93cml0ZShjbGllbnQsIDB4ZjIsIDB4MDBjMCB8IGRhdGEpOwotCQkJdjRsX2RiZygxLCBkZWJ1ZywgY2xpZW50LCAibm9ybSBzd2l0Y2hlZCB0byBBVVRPXG4iKTsKLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQotCQlkZWNvZGVyLT5ub3JtID0gKmlhcmc7CisJfQorCWlmIChwc3RkKQorCQkqcHN0ZCA9IHN0ZDsKKwlpZiAocHN0YXR1cykKKwkJKnBzdGF0dXMgPSBzdGF0dXM7CisJcmV0dXJuIDA7Cit9CiAKLQkJLyogQW5kIGhlcmUgd2Ugc2V0IHRoZSBiYWNrZWQgdXAgdmlkZW8gaW5wdXQgYWdhaW4gKi8KLQkJdnB4MzIyMF9mcF93cml0ZShjbGllbnQsIDB4ZjIsIHRlbXBfaW5wdXQgfCAweDAwMTApOwotCQl1ZGVsYXkoMTApOwotCQlicmVhazsKK3N0YXRpYyBpbnQgdnB4MzIyMF9xdWVyeXN0ZChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB2NGwyX3N0ZF9pZCAqc3RkKQoreworCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgInF1ZXJ5c3RkXG4iKTsKKwlyZXR1cm4gdnB4MzIyMF9zdGF0dXMoc2QsIE5VTEwsIHN0ZCk7Cit9CisKK3N0YXRpYyBpbnQgdnB4MzIyMF9nX2lucHV0X3N0YXR1cyhzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgKnN0YXR1cykKK3sKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJnX2lucHV0X3N0YXR1c1xuIik7CisJcmV0dXJuIHZweDMyMjBfc3RhdHVzKHNkLCBzdGF0dXMsIE5VTEwpOworfQorCitzdGF0aWMgaW50IHZweDMyMjBfc19zdGQoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgdjRsMl9zdGRfaWQgc3RkKQoreworCXN0cnVjdCB2cHgzMjIwICpkZWNvZGVyID0gdG9fdnB4MzIyMChzZCk7CisJaW50IHRlbXBfaW5wdXQ7CisKKwkvKiBIZXJlIHdlIGJhY2sgdXAgdGhlIGlucHV0IHNlbGVjdGlvbiBiZWNhdXNlIGl0IGdldHMKKwkgICBvdmVyd3JpdHRlbiB3aGVuIHdlIGZpbGwgdGhlIHJlZ2lzdGVycyB3aXRoIHRoZQorCSAgIGNob29zZW4gdmlkZW8gbm9ybSAqLworCXRlbXBfaW5wdXQgPSB2cHgzMjIwX2ZwX3JlYWQoc2QsIDB4ZjIpOworCisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic19zdGQgJWxseFxuIiwgKHVuc2lnbmVkIGxvbmcgbG9uZylzdGQpOworCWlmIChzdGQgJiBWNEwyX1NURF9OVFNDKSB7CisJCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soc2QsIGluaXRfbnRzYywgc2l6ZW9mKGluaXRfbnRzYykgPj4gMSk7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIm5vcm0gc3dpdGNoZWQgdG8gTlRTQ1xuIik7CisJfSBlbHNlIGlmIChzdGQgJiBWNEwyX1NURF9QQUwpIHsKKwkJdnB4MzIyMF93cml0ZV9mcF9ibG9jayhzZCwgaW5pdF9wYWwsIHNpemVvZihpbml0X3BhbCkgPj4gMSk7CisJCXY0bDJfZGJnKDEsIGRlYnVnLCBzZCwgIm5vcm0gc3dpdGNoZWQgdG8gUEFMXG4iKTsKKwl9IGVsc2UgaWYgKHN0ZCAmIFY0TDJfU1REX1NFQ0FNKSB7CisJCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soc2QsIGluaXRfc2VjYW0sIHNpemVvZihpbml0X3NlY2FtKSA+PiAxKTsKKwkJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAibm9ybSBzd2l0Y2hlZCB0byBTRUNBTVxuIik7CisJfSBlbHNlIHsKKwkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JY2FzZSBERUNPREVSX1NFVF9JTlBVVDoKLQl7Ci0JCWludCAqaWFyZyA9IGFyZywgZGF0YTsKKwlkZWNvZGVyLT5ub3JtID0gc3RkOwogCi0JCS8qIFJKOiAgKmlhcmcgPSAwOiBTVDggKFBDVFYpIGlucHV0Ci0JCSAqaWFyZyA9IDE6IENPTVBPU0lURSAgaW5wdXQKLQkJICppYXJnID0gMjogU1ZIUyAgICAgICBpbnB1dCAgKi8KKwkvKiBBbmQgaGVyZSB3ZSBzZXQgdGhlIGJhY2tlZCB1cCB2aWRlbyBpbnB1dCBhZ2FpbiAqLworCXZweDMyMjBfZnBfd3JpdGUoc2QsIDB4ZjIsIHRlbXBfaW5wdXQgfCAweDAwMTApOworCXVkZWxheSgxMCk7CisJcmV0dXJuIDA7Cit9CiAKLQkJY29uc3QgaW50IGlucHV0WzNdWzJdID0gewotCQkJezB4MGMsIDB9LAotCQkJezB4MGQsIDB9LAotCQkJezB4MGUsIDF9Ci0JCX07CitzdGF0aWMgaW50IHZweDMyMjBfc19yb3V0aW5nKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGNvbnN0IHN0cnVjdCB2NGwyX3JvdXRpbmcgKnJvdXRlKQoreworCWludCBkYXRhOwogCi0JCWlmICgqaWFyZyA8IDAgfHwgKmlhcmcgPiAyKQotCQkJcmV0dXJuIC1FSU5WQUw7CisJLyogUko6ICAgcm91dGUtPmlucHV0ID0gMDogU1Q4IChQQ1RWKSBpbnB1dAorCQkgcm91dGUtPmlucHV0ID0gMTogQ09NUE9TSVRFICBpbnB1dAorCQkgcm91dGUtPmlucHV0ID0gMjogU1ZIUyAgICAgICBpbnB1dCAgKi8KIAotCQl2NGxfZGJnKDEsIGRlYnVnLCBjbGllbnQsICJpbnB1dCBzd2l0Y2hlZCB0byAlc1xuIiwgaW5wdXRzWyppYXJnXSk7CisJY29uc3QgaW50IGlucHV0WzNdWzJdID0geworCQl7MHgwYywgMH0sCisJCXsweDBkLCAwfSwKKwkJezB4MGUsIDF9CisJfTsKIAotCQl2cHgzMjIwX3dyaXRlKGNsaWVudCwgMHgzMywgaW5wdXRbKmlhcmddWzBdKTsKKwlpZiAocm91dGUtPmlucHV0IDwgMCB8fCByb3V0ZS0+aW5wdXQgPiAyKQorCQlyZXR1cm4gLUVJTlZBTDsKIAotCQlkYXRhID0gdnB4MzIyMF9mcF9yZWFkKGNsaWVudCwgMHhmMikgJiB+KDB4MDAyMCk7Ci0JCWlmIChkYXRhIDwgMCkKLQkJCXJldHVybiBkYXRhOwotCQkvKiAweDAwMTAgaXMgcmVxdWlyZWQgdG8gbGF0Y2ggdGhlIHNldHRpbmcgKi8KLQkJdnB4MzIyMF9mcF93cml0ZShjbGllbnQsIDB4ZjIsCi0JCQkJIGRhdGEgfCAoaW5wdXRbKmlhcmddWzFdIDw8IDUpIHwgMHgwMDEwKTsKKwl2NGwyX2RiZygxLCBkZWJ1Zywgc2QsICJpbnB1dCBzd2l0Y2hlZCB0byAlc1xuIiwgaW5wdXRzW3JvdXRlLT5pbnB1dF0pOwogCi0JCXVkZWxheSgxMCk7CisJdnB4MzIyMF93cml0ZShzZCwgMHgzMywgaW5wdXRbcm91dGUtPmlucHV0XVswXSk7CisKKwlkYXRhID0gdnB4MzIyMF9mcF9yZWFkKHNkLCAweGYyKSAmIH4oMHgwMDIwKTsKKwlpZiAoZGF0YSA8IDApCisJCXJldHVybiBkYXRhOworCS8qIDB4MDAxMCBpcyByZXF1aXJlZCB0byBsYXRjaCB0aGUgc2V0dGluZyAqLworCXZweDMyMjBfZnBfd3JpdGUoc2QsIDB4ZjIsCisJCQlkYXRhIHwgKGlucHV0W3JvdXRlLT5pbnB1dF1bMV0gPDwgNSkgfCAweDAwMTApOworCisJdWRlbGF5KDEwKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cHgzMjIwX3Nfc3RyZWFtKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpCit7CisJdjRsMl9kYmcoMSwgZGVidWcsIHNkLCAic19zdHJlYW0gJXNcbiIsIGVuYWJsZSA/ICJvbiIgOiAib2ZmIik7CisKKwl2cHgzMjIwX3dyaXRlKHNkLCAweGYyLCAoZW5hYmxlID8gMHgxYiA6IDB4MDApKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cHgzMjIwX3F1ZXJ5Y3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjKQoreworCXN3aXRjaCAocWMtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQl2NGwyX2N0cmxfcXVlcnlfZmlsbChxYywgLTEyOCwgMTI3LCAxLCAwKTsKIAkJYnJlYWs7Ci0JfQogCi0JY2FzZSBERUNPREVSX1NFVF9PVVRQVVQ6Ci0JewotCQlpbnQgKmlhcmcgPSBhcmc7Ci0KLQkJLyogbm90IG11Y2ggY2hvaWNlIG9mIG91dHB1dHMgKi8KLQkJaWYgKCppYXJnICE9IDApIHsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDYzLCAxLCAzMik7CiAJCWJyZWFrOwotCX0KIAotCWNhc2UgREVDT0RFUl9FTkFCTEVfT1VUUFVUOgotCXsKLQkJaW50ICppYXJnID0gYXJnOwotCi0JCXY0bF9kYmcoMSwgZGVidWcsIGNsaWVudCwgIkRFQ09ERVJfRU5BQkxFX09VVFBVVCAlZFxuIiwgKmlhcmcpOwotCi0JCXZweDMyMjBfd3JpdGUoY2xpZW50LCAweGYyLCAoKmlhcmcgPyAweDFiIDogMHgwMCkpOworCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKKwkJdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIDAsIDQwOTUsIDEsIDIwNDgpOwogCQlicmVhazsKLQl9CiAKLQljYXNlIERFQ09ERVJfU0VUX1BJQ1RVUkU6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fcGljdHVyZSAqcGljID0gYXJnOwotCi0JCWlmIChkZWNvZGVyLT5icmlnaHQgIT0gcGljLT5icmlnaHRuZXNzKSB7Ci0JCQkvKiBXZSB3YW50IC0xMjggdG8gMTI4IHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5icmlnaHQgPSBwaWMtPmJyaWdodG5lc3M7Ci0JCQl2cHgzMjIwX3dyaXRlKGNsaWVudCwgMHhlNiwKLQkJCQkgICAgICAoZGVjb2Rlci0+YnJpZ2h0IC0gMzI3NjgpID4+IDgpOwotCQl9Ci0JCWlmIChkZWNvZGVyLT5jb250cmFzdCAhPSBwaWMtPmNvbnRyYXN0KSB7Ci0JCQkvKiBXZSB3YW50IDAgdG8gNjQgd2UgZ2V0IDAtNjU1MzUgKi8KLQkJCS8qIEJpdCA3IGFuZCA4IGlzIGZvciBub2lzZSBzaGFwaW5nICovCi0JCQlkZWNvZGVyLT5jb250cmFzdCA9IHBpYy0+Y29udHJhc3Q7Ci0JCQl2cHgzMjIwX3dyaXRlKGNsaWVudCwgMHhlNywKLQkJCQkgICAgICAoZGVjb2Rlci0+Y29udHJhc3QgPj4gMTApICsgMTkyKTsKLQkJfQotCQlpZiAoZGVjb2Rlci0+c2F0ICE9IHBpYy0+Y29sb3VyKSB7Ci0JCQkvKiBXZSB3YW50IDAgdG8gNDA5NiB3ZSBnZXQgMC02NTUzNSAqLwotCQkJZGVjb2Rlci0+c2F0ID0gcGljLT5jb2xvdXI7Ci0JCQl2cHgzMjIwX2ZwX3dyaXRlKGNsaWVudCwgMHhhMCwKLQkJCQkJIGRlY29kZXItPnNhdCA+PiA0KTsKLQkJfQotCQlpZiAoZGVjb2Rlci0+aHVlICE9IHBpYy0+aHVlKSB7Ci0JCQkvKiBXZSB3YW50IC01MTIgdG8gNTEyIHdlIGdldCAwLTY1NTM1ICovCi0JCQlkZWNvZGVyLT5odWUgPSBwaWMtPmh1ZTsKLQkJCXZweDMyMjBfZnBfd3JpdGUoY2xpZW50LCAweDFjLAotCQkJCQkgKChkZWNvZGVyLT5odWUgLSAzMjc2OCkgPj4gNikgJiAweEZGRik7Ci0JCX0KKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwocWMsIC01MTIsIDUxMSwgMSwgMCk7CiAJCWJyZWFrOwotCX0KIAogCWRlZmF1bHQ6CiAJCXJldHVybiAtRUlOVkFMOwogCX0KLQogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHZweDMyMjBfaW5pdF9jbGllbnQoc3RydWN0IGkyY19jbGllbnQgKmNsaWVudCkKK3N0YXRpYyBpbnQgdnB4MzIyMF9nX2N0cmwoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKIHsKLQl2cHgzMjIwX3dyaXRlX2Jsb2NrKGNsaWVudCwgaW5pdF9jb21tb24sIHNpemVvZihpbml0X2NvbW1vbikpOwotCXZweDMyMjBfd3JpdGVfZnBfYmxvY2soY2xpZW50LCBpbml0X2ZwLCBzaXplb2YoaW5pdF9mcCkgPj4gMSk7Ci0JLyogRGVmYXVsdCB0byBQQUwgKi8KLQl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKGNsaWVudCwgaW5pdF9wYWwsIHNpemVvZihpbml0X3BhbCkgPj4gMSk7CisJc3RydWN0IHZweDMyMjAgKmRlY29kZXIgPSB0b192cHgzMjIwKHNkKTsKIAorCXN3aXRjaCAoY3RybC0+aWQpIHsKKwljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6CisJCWN0cmwtPnZhbHVlID0gZGVjb2Rlci0+YnJpZ2h0OworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0NPTlRSQVNUOgorCQljdHJsLT52YWx1ZSA9IGRlY29kZXItPmNvbnRyYXN0OworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCWN0cmwtPnZhbHVlID0gZGVjb2Rlci0+c2F0OworCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJY3RybC0+dmFsdWUgPSBkZWNvZGVyLT5odWU7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB2cHgzMjIwX3NfY3RybChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKQoreworCXN0cnVjdCB2cHgzMjIwICpkZWNvZGVyID0gdG9fdnB4MzIyMChzZCk7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9CUklHSFRORVNTOgorCQlpZiAoZGVjb2Rlci0+YnJpZ2h0ICE9IGN0cmwtPnZhbHVlKSB7CisJCQlkZWNvZGVyLT5icmlnaHQgPSBjdHJsLT52YWx1ZTsKKwkJCXZweDMyMjBfd3JpdGUoc2QsIDB4ZTYsIGRlY29kZXItPmJyaWdodCk7CisJCX0KKwkJYnJlYWs7CisJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKKwkJaWYgKGRlY29kZXItPmNvbnRyYXN0ICE9IGN0cmwtPnZhbHVlKSB7CisJCQkvKiBCaXQgNyBhbmQgOCBpcyBmb3Igbm9pc2Ugc2hhcGluZyAqLworCQkJZGVjb2Rlci0+Y29udHJhc3QgPSBjdHJsLT52YWx1ZTsKKwkJCXZweDMyMjBfd3JpdGUoc2QsIDB4ZTcsIGRlY29kZXItPmNvbnRyYXN0ICsgMTkyKTsKKwkJfQorCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046CisJCWlmIChkZWNvZGVyLT5zYXQgIT0gY3RybC0+dmFsdWUpIHsKKwkJCWRlY29kZXItPnNhdCA9IGN0cmwtPnZhbHVlOworCQkJdnB4MzIyMF9mcF93cml0ZShzZCwgMHhhMCwgZGVjb2Rlci0+c2F0KTsKKwkJfQorCQlicmVhazsKKwljYXNlIFY0TDJfQ0lEX0hVRToKKwkJaWYgKGRlY29kZXItPmh1ZSAhPSBjdHJsLT52YWx1ZSkgeworCQkJZGVjb2Rlci0+aHVlID0gY3RybC0+dmFsdWU7CisJCQl2cHgzMjIwX2ZwX3dyaXRlKHNkLCAweDFjLCBkZWNvZGVyLT5odWUpOworCQl9CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAtRUlOVkFMOworCX0KKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2cHgzMjIwX2dfY2hpcF9pZGVudChzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCAqY2hpcCkKK3sKKwlzdHJ1Y3QgdnB4MzIyMCAqZGVjb2RlciA9IHRvX3ZweDMyMjAoc2QpOworCXN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQgPSB2NGwyX2dldF9zdWJkZXZkYXRhKHNkKTsKKworCXJldHVybiB2NGwyX2NoaXBfaWRlbnRfaTJjX2NsaWVudChjbGllbnQsIGNoaXAsIGRlY29kZXItPmlkZW50LCAwKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gKi8KKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9jb3JlX29wcyB2cHgzMjIwX2NvcmVfb3BzID0geworCS5nX2NoaXBfaWRlbnQgPSB2cHgzMjIwX2dfY2hpcF9pZGVudCwKKwkuaW5pdCA9IHZweDMyMjBfaW5pdCwKKwkuZ19jdHJsID0gdnB4MzIyMF9nX2N0cmwsCisJLnNfY3RybCA9IHZweDMyMjBfc19jdHJsLAorCS5xdWVyeWN0cmwgPSB2cHgzMjIwX3F1ZXJ5Y3RybCwKK307CisKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfdHVuZXJfb3BzIHZweDMyMjBfdHVuZXJfb3BzID0geworCS5zX3N0ZCA9IHZweDMyMjBfc19zdGQsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X3ZpZGVvX29wcyB2cHgzMjIwX3ZpZGVvX29wcyA9IHsKKwkuc19yb3V0aW5nID0gdnB4MzIyMF9zX3JvdXRpbmcsCisJLnNfc3RyZWFtID0gdnB4MzIyMF9zX3N0cmVhbSwKKwkucXVlcnlzdGQgPSB2cHgzMjIwX3F1ZXJ5c3RkLAorCS5nX2lucHV0X3N0YXR1cyA9IHZweDMyMjBfZ19pbnB1dF9zdGF0dXMsCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X29wcyB2cHgzMjIwX29wcyA9IHsKKwkuY29yZSA9ICZ2cHgzMjIwX2NvcmVfb3BzLAorCS50dW5lciA9ICZ2cHgzMjIwX3R1bmVyX29wcywKKwkudmlkZW8gPSAmdnB4MzIyMF92aWRlb19vcHMsCit9OworCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogQ2xpZW50IG1hbmFnZW1lbnQgY29kZQogICovCiAKLXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBub3JtYWxfaTJjW10gPSB7IDB4ODYgPj4gMSwgMHg4ZSA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OwotCi1JMkNfQ0xJRU5UX0lOU01PRDsKLQogc3RhdGljIGludCB2cHgzMjIwX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCQljb25zdCBzdHJ1Y3QgaTJjX2RldmljZV9pZCAqaWQpCiB7CiAJc3RydWN0IHZweDMyMjAgKmRlY29kZXI7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsKIAljb25zdCBjaGFyICpuYW1lID0gTlVMTDsKIAl1OCB2ZXI7CiAJdTE2IHBuOwpAQCAtNTQxLDE4ICs1NTYsMjAgQEAKIAlkZWNvZGVyID0ga3phbGxvYyhzaXplb2Yoc3RydWN0IHZweDMyMjApLCBHRlBfS0VSTkVMKTsKIAlpZiAoZGVjb2RlciA9PSBOVUxMKQogCQlyZXR1cm4gLUVOT01FTTsKLQlkZWNvZGVyLT5ub3JtID0gVklERU9fTU9ERV9QQUw7CisJc2QgPSAmZGVjb2Rlci0+c2Q7CisJdjRsMl9pMmNfc3ViZGV2X2luaXQoc2QsIGNsaWVudCwgJnZweDMyMjBfb3BzKTsKKwlkZWNvZGVyLT5ub3JtID0gVjRMMl9TVERfUEFMOwogCWRlY29kZXItPmlucHV0ID0gMDsKIAlkZWNvZGVyLT5lbmFibGUgPSAxOwogCWRlY29kZXItPmJyaWdodCA9IDMyNzY4OwogCWRlY29kZXItPmNvbnRyYXN0ID0gMzI3Njg7CiAJZGVjb2Rlci0+aHVlID0gMzI3Njg7CiAJZGVjb2Rlci0+c2F0ID0gMzI3Njg7Ci0JaTJjX3NldF9jbGllbnRkYXRhKGNsaWVudCwgZGVjb2Rlcik7CiAKIAl2ZXIgPSBpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCAweDAwKTsKIAlwbiA9IChpMmNfc21idXNfcmVhZF9ieXRlX2RhdGEoY2xpZW50LCAweDAyKSA8PCA4KSArCiAJCWkyY19zbWJ1c19yZWFkX2J5dGVfZGF0YShjbGllbnQsIDB4MDEpOworCWRlY29kZXItPmlkZW50ID0gVjRMMl9JREVOVF9WUFgzMjIwQTsKIAlpZiAodmVyID09IDB4ZWMpIHsKIAkJc3dpdGNoIChwbikgewogCQljYXNlIDB4NDY4MDoKQEAgLTU2MCwyNiArNTc3LDM0IEBACiAJCQlicmVhazsKIAkJY2FzZSAweDQyNjA6CiAJCQluYW1lID0gInZweDMyMTZiIjsKKwkJCWRlY29kZXItPmlkZW50ID0gVjRMMl9JREVOVF9WUFgzMjE2QjsKIAkJCWJyZWFrOwogCQljYXNlIDB4NDI4MDoKIAkJCW5hbWUgPSAidnB4MzIxNGMiOworCQkJZGVjb2Rlci0+aWRlbnQgPSBWNEwyX0lERU5UX1ZQWDMyMTRDOwogCQkJYnJlYWs7CiAJCX0KIAl9CiAJaWYgKG5hbWUpCi0JCXY0bF9pbmZvKGNsaWVudCwgIiVzIGZvdW5kIEAgMHgleCAoJXMpXG4iLCBuYW1lLAorCQl2NGwyX2luZm8oc2QsICIlcyBmb3VuZCBAIDB4JXggKCVzKVxuIiwgbmFtZSwKIAkJCWNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCWVsc2UKLQkJdjRsX2luZm8oY2xpZW50LCAiY2hpcCAoJTAyeDolMDR4KSBmb3VuZCBAIDB4JXggKCVzKVxuIiwKKwkJdjRsMl9pbmZvKHNkLCAiY2hpcCAoJTAyeDolMDR4KSBmb3VuZCBAIDB4JXggKCVzKVxuIiwKIAkJCXZlciwgcG4sIGNsaWVudC0+YWRkciA8PCAxLCBjbGllbnQtPmFkYXB0ZXItPm5hbWUpOwogCi0JdnB4MzIyMF9pbml0X2NsaWVudChjbGllbnQpOworCXZweDMyMjBfd3JpdGVfYmxvY2soc2QsIGluaXRfY29tbW9uLCBzaXplb2YoaW5pdF9jb21tb24pKTsKKwl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKHNkLCBpbml0X2ZwLCBzaXplb2YoaW5pdF9mcCkgPj4gMSk7CisJLyogRGVmYXVsdCB0byBQQUwgKi8KKwl2cHgzMjIwX3dyaXRlX2ZwX2Jsb2NrKHNkLCBpbml0X3BhbCwgc2l6ZW9mKGluaXRfcGFsKSA+PiAxKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB2cHgzMjIwX3JlbW92ZShzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQogewotCWtmcmVlKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpKTsKKwlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkID0gaTJjX2dldF9jbGllbnRkYXRhKGNsaWVudCk7CisKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyX3N1YmRldihzZCk7CisJa2ZyZWUodG9fdnB4MzIyMChzZCkpOwogCXJldHVybiAwOwogfQogCkBAIC01OTMsOCArNjE4LDYgQEAKIAogc3RhdGljIHN0cnVjdCB2NGwyX2kyY19kcml2ZXJfZGF0YSB2NGwyX2kyY19kYXRhID0gewogCS5uYW1lID0gInZweDMyMjAiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9WUFgzMjIwLAotCS5jb21tYW5kID0gdnB4MzIyMF9jb21tYW5kLAogCS5wcm9iZSA9IHZweDMyMjBfcHJvYmUsCiAJLnJlbW92ZSA9IHZweDMyMjBfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHZweDMyMjBfaWQsCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY2LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY2LmMKaW5kZXggMDM4ZmYzMi4uZGNhZGU2MSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby93OTk2Ni5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjYuYwpAQCAtNTcsNyArNTcsNyBAQAogI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CiAjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAjaW5jbHVkZSA8bGludXgvcGFycG9ydC5oPgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby93OTk2OGNmLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYwppbmRleCAxMDVhODMyLi4zYjA4YmM0IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuYwpAQCAtNDIsNiArNDIsNyBAQAogI2luY2x1ZGUgPGFzbS9wYWdlLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KICNpbmNsdWRlIDxsaW51eC9wYWdlLWZsYWdzLmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWlvY3RsLmg+CiAKICNpbmNsdWRlICJ3OTk2OGNmLmgiCkBAIC02OCw3ICs2OSw2IEBACiBNT0RVTEVfTElDRU5TRShXOTk2OENGX01PRFVMRV9MSUNFTlNFKTsKIE1PRFVMRV9TVVBQT1JURURfREVWSUNFKCJWaWRlbyIpOwogCi1zdGF0aWMgaW50IG92bW9kX2xvYWQgPSBXOTk2OENGX09WTU9EX0xPQUQ7CiBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc2ltY2FtcyA9IFc5OTY4Q0ZfU0lNQ0FNUzsKIHN0YXRpYyBzaG9ydCB2aWRlb19ucltdPXtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9IC0xfTsgLyotMT1maXJzdCBmcmVlKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgcGFja2V0X3NpemVbXSA9IHtbMCAuLi4gVzk5NjhDRl9NQVhfREVWSUNFUy0xXSA9CkBAIC0xMTEsOSArMTExLDYgQEAKIAogc3RhdGljIHVuc2lnbmVkIGludCBwYXJhbV9udlsyNF07IC8qIG51bWJlciBvZiB2YWx1ZXMgcGVyIHBhcmFtZXRlciAqLwogCi0jaWZkZWYgQ09ORklHX01PRFVMRVMKLW1vZHVsZV9wYXJhbShvdm1vZF9sb2FkLCBib29sLCAwNjQ0KTsKLSNlbmRpZgogbW9kdWxlX3BhcmFtKHNpbWNhbXMsIHVzaG9ydCwgMDY0NCk7CiBtb2R1bGVfcGFyYW1fYXJyYXkodmlkZW9fbnIsIHNob3J0LCAmcGFyYW1fbnZbMF0sIDA0NDQpOwogbW9kdWxlX3BhcmFtX2FycmF5KHBhY2tldF9zaXplLCB1aW50LCAmcGFyYW1fbnZbMV0sIDA0NDQpOwpAQCAtMTQ0LDE4ICsxNDEsNiBAQAogbW9kdWxlX3BhcmFtKHNwZWNpZmljX2RlYnVnLCBib29sLCAwNjQ0KTsKICNlbmRpZgogCi0jaWZkZWYgQ09ORklHX01PRFVMRVMKLU1PRFVMRV9QQVJNX0RFU0Mob3Ztb2RfbG9hZCwKLQkJICJcbjwwfDE+IEF1dG9tYXRpYyAnb3ZjYW1jaGlwJyBtb2R1bGUgbG9hZGluZy4iCi0JCSAiXG4wIGRpc2FibGVkLCAxIGVuYWJsZWQuIgotCQkgIlxuSWYgZW5hYmxlZCwnaW5zbW9kJyBzZWFyY2hlcyBmb3IgdGhlIHJlcXVpcmVkICdvdmNhbWNoaXAnIgotCQkgIlxubW9kdWxlIGluIHRoZSBzeXN0ZW0sIGFjY29yZGluZyB0byBpdHMgY29uZmlndXJhdGlvbiwgYW5kIgotCQkgIlxuYXR0ZW1wdHMgdG8gbG9hZCB0aGF0IG1vZHVsZSBhdXRvbWF0aWNhbGx5LiBUaGlzIGFjdGlvbiBpcyIKLQkJICJcbnBlcmZvcm1lZCBvbmNlIGFzIHNvb24gYXMgdGhlICd3OTk2OGNmJyBtb2R1bGUgaXMgbG9hZGVkIgotCQkgIlxuaW50byBtZW1vcnkuIgotCQkgIlxuRGVmYXVsdCB2YWx1ZSBpcyAiX19NT0RVTEVfU1RSSU5HKFc5OTY4Q0ZfT1ZNT0RfTE9BRCkiLiIKLQkJICJcbiIpOwotI2VuZGlmCiBNT0RVTEVfUEFSTV9ERVNDKHNpbWNhbXMsCiAJCSAiXG48bj4gTnVtYmVyIG9mIGNhbWVyYXMgYWxsb3dlZCB0byBzdHJlYW0gc2ltdWx0YW5lb3VzbHkuIgogCQkgIlxubiBtYXkgdmFyeSBmcm9tIDAgdG8gIgpAQCAtNDQzLDggKzQyOCw2IEBACiAJCQkJICB1bnNpZ25lZCBzaG9ydCBmbGFncywgY2hhciByZWFkX3dyaXRlLAogCQkJCSAgdTggY29tbWFuZCwgaW50IHNpemUsIHVuaW9uIGkyY19zbWJ1c19kYXRhKik7CiBzdGF0aWMgdTMyIHc5OTY4Y2ZfaTJjX2Z1bmMoc3RydWN0IGkyY19hZGFwdGVyKik7Ci1zdGF0aWMgaW50IHc5OTY4Y2ZfaTJjX2F0dGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQqKTsKLXN0YXRpYyBpbnQgdzk5NjhjZl9pMmNfZGV0YWNoX2luZm9ybShzdHJ1Y3QgaTJjX2NsaWVudCopOwogCiAvKiBNZW1vcnkgbWFuYWdlbWVudCAqLwogc3RhdGljIHZvaWQqIHJ2bWFsbG9jKHVuc2lnbmVkIGxvbmcgc2l6ZSk7CkBAIC0xNDQzLDE5ICsxNDI2LDExIEBACiAJCSAgICAgICB1bnNpZ25lZCBzaG9ydCBmbGFncywgY2hhciByZWFkX3dyaXRlLCB1OCBjb21tYW5kLAogCQkgICAgICAgaW50IHNpemUsIHVuaW9uIGkyY19zbWJ1c19kYXRhICpkYXRhKQogewotCXN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtID0gaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKTsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2ID0gaTJjX2dldF9hZGFwZGF0YShhZGFwdGVyKTsKKwlzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UgKmNhbSA9IHRvX2NhbSh2NGwyX2Rldik7CiAJdTggaTsKIAlpbnQgZXJyID0gMDsKIAotCXN3aXRjaCAoYWRkcikgewotCQljYXNlIE9WNnh4MF9TSUQ6Ci0JCWNhc2UgT1Y3eHgwX1NJRDoKLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJREJHKDQsICJSZWplY3RlZCBzbGF2ZSBJRCAweCUwNFgiLCBhZGRyKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCiAJaWYgKHNpemUgPT0gSTJDX1NNQlVTX0JZVEUpIHsKIAkJLyogV2h5IGFkZHIgPDw9IDE/IFNlZSBPVlhYWDBfU0lEIGRlZmluZXMgaW4gb3ZjYW1jaGlwLmggKi8KIAkJYWRkciA8PD0gMTsKQEAgLTE0NjMsOCArMTQzOCwxNyBAQAogCQlpZiAocmVhZF93cml0ZSA9PSBJMkNfU01CVVNfV1JJVEUpCiAJCQllcnIgPSB3OTk2OGNmX2kyY19hZGFwX3dyaXRlX2J5dGUoY2FtLCBhZGRyLCBjb21tYW5kKTsKIAkJZWxzZSBpZiAocmVhZF93cml0ZSA9PSBJMkNfU01CVVNfUkVBRCkKLQkJCWVyciA9IHc5OTY4Y2ZfaTJjX2FkYXBfcmVhZF9ieXRlKGNhbSxhZGRyLCZkYXRhLT5ieXRlKTsKLQorCQkJZm9yIChpID0gMTsgaSA8PSBXOTk2OENGX0kyQ19SV19SRVRSSUVTOyBpKyspIHsKKwkJCQllcnIgPSB3OTk2OGNmX2kyY19hZGFwX3JlYWRfYnl0ZShjYW0sIGFkZHIsCisJCQkJCQkJICZkYXRhLT5ieXRlKTsKKwkJCQlpZiAoZXJyKSB7CisJCQkJCWlmICh3OTk2OGNmX3NtYnVzX3JlZnJlc2hfYnVzKGNhbSkpIHsKKwkJCQkJCWVyciA9IC1FSU87CisJCQkJCQlicmVhazsKKwkJCQkJfQorCQkJCX0gZWxzZQorCQkJCQlicmVhazsKKwkJCX0KIAl9IGVsc2UgaWYgKHNpemUgPT0gSTJDX1NNQlVTX0JZVEVfREFUQSkgewogCQlhZGRyIDw8PSAxOwogCkBAIC0xNDkxLDcgKzE0NzUsNiBAQAogCQlEQkcoNCwgIlVuc3VwcG9ydGVkIEkyQyB0cmFuc2ZlciBtb2RlICglZCkiLCBzaXplKQogCQlyZXR1cm4gLUVJTlZBTDsKIAl9Ci0KIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xNTA0LDQ0ICsxNDg3LDYgQEAKIH0KIAogCi1zdGF0aWMgaW50IHc5OTY4Y2ZfaTJjX2F0dGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQqIGNsaWVudCkKLXsKLQlzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSA9IGkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKLQlpbnQgaWQgPSBjbGllbnQtPmRyaXZlci0+aWQsIGVyciA9IDA7Ci0KLQlpZiAoaWQgPT0gSTJDX0RSSVZFUklEX09WQ0FNQ0hJUCkgewotCQljYW0tPnNlbnNvcl9jbGllbnQgPSBjbGllbnQ7Ci0JCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX2luaXQoY2FtKTsKLQkJaWYgKGVycikgewotCQkJY2FtLT5zZW5zb3JfY2xpZW50ID0gTlVMTDsKLQkJCXJldHVybiBlcnI7Ci0JCX0KLQl9IGVsc2UgewotCQlEQkcoNCwgIlJlamVjdGVkIGNsaWVudCBbJXNdIHdpdGggZHJpdmVyIFslc10iLAotCQkgICAgY2xpZW50LT5uYW1lLCBjbGllbnQtPmRyaXZlci0+ZHJpdmVyLm5hbWUpCi0JCXJldHVybiAtRUlOVkFMOwotCX0KLQotCURCRyg1LCAiSTJDIGF0dGFjaCBjbGllbnQgWyVzXSB3aXRoIGRyaXZlciBbJXNdIiwKLQkgICAgY2xpZW50LT5uYW1lLCBjbGllbnQtPmRyaXZlci0+ZHJpdmVyLm5hbWUpCi0KLQlyZXR1cm4gMDsKLX0KLQotCi1zdGF0aWMgaW50IHc5OTY4Y2ZfaTJjX2RldGFjaF9pbmZvcm0oc3RydWN0IGkyY19jbGllbnQqIGNsaWVudCkKLXsKLQlzdHJ1Y3Qgdzk5NjhjZl9kZXZpY2UqIGNhbSA9IGkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKLQotCWlmIChjYW0tPnNlbnNvcl9jbGllbnQgPT0gY2xpZW50KQotCQljYW0tPnNlbnNvcl9jbGllbnQgPSBOVUxMOwotCi0JREJHKDUsICJJMkMgZGV0YWNoIGNsaWVudCBbJXNdIiwgY2xpZW50LT5uYW1lKQotCi0JcmV0dXJuIDA7Ci19Ci0KLQogc3RhdGljIGludCB3OTk2OGNmX2kyY19pbml0KHN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtKQogewogCWludCBlcnIgPSAwOwpAQCAtMTU1NCwxNSArMTQ5OSwxMyBAQAogCXN0YXRpYyBzdHJ1Y3QgaTJjX2FkYXB0ZXIgYWRhcCA9IHsKIAkJLmlkID0gICAgICAgICAgICAgICAgSTJDX0hXX1NNQlVTX1c5OTY4Q0YsCiAJCS5vd25lciA9ICAgICAgICAgICAgIFRISVNfTU9EVUxFLAotCQkuY2xpZW50X3JlZ2lzdGVyID0gICB3OTk2OGNmX2kyY19hdHRhY2hfaW5mb3JtLAotCQkuY2xpZW50X3VucmVnaXN0ZXIgPSB3OTk2OGNmX2kyY19kZXRhY2hfaW5mb3JtLAogCQkuYWxnbyA9ICAgICAgICAgICAgICAmYWxnbywKIAl9OwogCiAJbWVtY3B5KCZjYW0tPmkyY19hZGFwdGVyLCAmYWRhcCwgc2l6ZW9mKHN0cnVjdCBpMmNfYWRhcHRlcikpOwogCXN0cmNweShjYW0tPmkyY19hZGFwdGVyLm5hbWUsICJ3OTk2OGNmIik7CiAJY2FtLT5pMmNfYWRhcHRlci5kZXYucGFyZW50ID0gJmNhbS0+dXNiZGV2LT5kZXY7Ci0JaTJjX3NldF9hZGFwZGF0YSgmY2FtLT5pMmNfYWRhcHRlciwgY2FtKTsKKwlpMmNfc2V0X2FkYXBkYXRhKCZjYW0tPmkyY19hZGFwdGVyLCAmY2FtLT52NGwyX2Rldik7CiAKIAlEQkcoNiwgIlJlZ2lzdGVyaW5nIEkyQyBhZGFwdGVyIHdpdGgga2VybmVsLi4uIikKIApAQCAtMjE2NSwxMyArMjEwOCw5IEBACiBzdGF0aWMgaW50CiB3OTk2OGNmX3NlbnNvcl9jbWQoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKiBjYW0sIHVuc2lnbmVkIGludCBjbWQsIHZvaWQqIGFyZykKIHsKLQlzdHJ1Y3QgaTJjX2NsaWVudCogYyA9IGNhbS0+c2Vuc29yX2NsaWVudDsKLQlpbnQgcmMgPSAwOworCWludCByYzsKIAotCWlmICghYyB8fCAhYy0+ZHJpdmVyIHx8ICFjLT5kcml2ZXItPmNvbW1hbmQpCi0JCXJldHVybiAtRUlOVkFMOwotCi0JcmMgPSBjLT5kcml2ZXItPmNvbW1hbmQoYywgY21kLCBhcmcpOworCXJjID0gdjRsMl9zdWJkZXZfY2FsbChjYW0tPnNlbnNvcl9zZCwgY29yZSwgaW9jdGwsIGNtZCwgYXJnKTsKIAkvKiBUaGUgSTJDIGRyaXZlciByZXR1cm5zIC1FUEVSTSBvbiBub24tc3VwcG9ydGVkIGNvbnRyb2xzICovCiAJcmV0dXJuIChyYyA8IDAgJiYgcmMgIT0gLUVQRVJNKSA/IHJjIDogMDsKIH0KQEAgLTIzNDYsNyArMjI4NSw3IEBACiAJCWdvdG8gZXJyb3I7CiAKIAkvKiBOT1RFOiBNYWtlIHN1cmUgd2lkdGggYW5kIGhlaWdodCBhcmUgYSBtdWx0aXBsZSBvZiAxNiAqLwotCXN3aXRjaCAoY2FtLT5zZW5zb3JfY2xpZW50LT5hZGRyKSB7CisJc3dpdGNoICh2NGwyX2kyY19zdWJkZXZfYWRkcihjYW0tPnNlbnNvcl9zZCkpIHsKIAkJY2FzZSBPVjZ4eDBfU0lEOgogCQkJY2FtLT5tYXh3aWR0aCA9IDM1MjsKIAkJCWNhbS0+bWF4aGVpZ2h0ID0gMjg4OwpAQCAtMjY1MSw2ICsyNTkwLDcgQEAKIAl3OTk2OGNmX2RlYWxsb2NhdGVfbWVtb3J5KGNhbSk7CiAJa2ZyZWUoY2FtLT5jb250cm9sX2J1ZmZlcik7CiAJa2ZyZWUoY2FtLT5kYXRhX2J1ZmZlcik7CisJdjRsMl9kZXZpY2VfdW5yZWdpc3RlcigmY2FtLT52NGwyX2Rldik7CiAKIAltdXRleF91bmxvY2soJnc5OTY4Y2ZfZGV2bGlzdF9tdXRleCk7CiB9CkBAIC0zNDgwLDYgKzM0MjAsMTEgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkKiBwdHI7CiAJdTggc2MgPSAwOyAvKiBudW1iZXIgb2Ygc2ltdWx0YW5lb3VzIGNhbWVyYXMgKi8KIAlzdGF0aWMgdW5zaWduZWQgc2hvcnQgZGV2X25yOyAvKiAwIC0gd2UgYXJlIGhhbmRsaW5nIGRldmljZSBudW1iZXIgbiAqLworCXN0YXRpYyB1bnNpZ25lZCBzaG9ydCBhZGRyc1tdID0geworCQlPVjd4eDBfU0lELAorCQlPVjZ4eDBfU0lELAorCQlJMkNfQ0xJRU5UX0VORAorCX07CiAKIAlpZiAobGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFZlbmRvcikgID09IHdpbmJvbmRfaWRfdGFibGVbMF0uaWRWZW5kb3IgJiYKIAkgICAgbGUxNl90b19jcHUodWRldi0+ZGVzY3JpcHRvci5pZFByb2R1Y3QpID09IHdpbmJvbmRfaWRfdGFibGVbMF0uaWRQcm9kdWN0KQpAQCAtMzQ5NSwxMiArMzQ0MCwxNCBAQAogCWlmICghY2FtKQogCQlyZXR1cm4gLUVOT01FTTsKIAorCWVyciA9IHY0bDJfZGV2aWNlX3JlZ2lzdGVyKCZ1ZGV2LT5kZXYsICZjYW0tPnY0bDJfZGV2KTsKKwlpZiAoZXJyKQorCQlnb3RvIGZhaWwwOworCiAJbXV0ZXhfaW5pdCgmY2FtLT5kZXZfbXV0ZXgpOwogCW11dGV4X2xvY2soJmNhbS0+ZGV2X211dGV4KTsKIAogCWNhbS0+dXNiZGV2ID0gdWRldjsKLQkvKiBOT1RFOiBhIGxvY2FsIGNvcHkgaXMgdXNlZCB0byBhdm9pZCBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMgKi8KLQltZW1jcHkoJmNhbS0+ZGV2LCAmdWRldi0+ZGV2LCBzaXplb2Yoc3RydWN0IGRldmljZSkpOwogCiAJREJHKDIsICIlcyBkZXRlY3RlZCIsIHN5bWJvbGljKGNhbWxpc3QsIG1vZF9pZCkpCiAKQEAgLTM1NDksNyArMzQ5Niw3IEBACiAJY2FtLT52NGxkZXYtPm1pbm9yID0gdmlkZW9fbnJbZGV2X25yXTsKIAljYW0tPnY0bGRldi0+cmVsZWFzZSA9IHZpZGVvX2RldmljZV9yZWxlYXNlOwogCXZpZGVvX3NldF9kcnZkYXRhKGNhbS0+djRsZGV2LCBjYW0pOwotCWNhbS0+djRsZGV2LT5wYXJlbnQgPSAmY2FtLT5kZXY7CisJY2FtLT52NGxkZXYtPnY0bDJfZGV2ID0gJmNhbS0+djRsMl9kZXY7CiAKIAllcnIgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UoY2FtLT52NGxkZXYsIFZGTF9UWVBFX0dSQUJCRVIsCiAJCQkJICAgIHZpZGVvX25yW2Rldl9ucl0pOwpAQCAtMzU3Niw5ICszNTIzLDEzIEBACiAJdzk5NjhjZl90dXJuX29uX2xlZChjYW0pOwogCiAJdzk5NjhjZl9pMmNfaW5pdChjYW0pOworCWNhbS0+c2Vuc29yX3NkID0gdjRsMl9pMmNfbmV3X3Byb2JlZF9zdWJkZXYoJmNhbS0+aTJjX2FkYXB0ZXIsCisJCQkib3ZjYW1jaGlwIiwgIm92Y2FtY2hpcCIsIGFkZHJzKTsKIAogCXVzYl9zZXRfaW50ZmRhdGEoaW50ZiwgY2FtKTsKIAltdXRleF91bmxvY2soJmNhbS0+ZGV2X211dGV4KTsKKworCWVyciA9IHc5OTY4Y2Zfc2Vuc29yX2luaXQoY2FtKTsKIAlyZXR1cm4gMDsKIAogZmFpbDogLyogRnJlZSB1bnVzZWQgbWVtb3J5ICovCkBAIC0zNTg3LDYgKzM1MzgsOCBAQAogCWlmIChjYW0tPnY0bGRldikKIAkJdmlkZW9fZGV2aWNlX3JlbGVhc2UoY2FtLT52NGxkZXYpOwogCW11dGV4X3VubG9jaygmY2FtLT5kZXZfbXV0ZXgpOworCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJmNhbS0+djRsMl9kZXYpOworZmFpbDA6CiAJa2ZyZWUoY2FtKTsKIAlyZXR1cm4gZXJyOwogfQpAQCAtMzU5NywxNSArMzU1MCwxNiBAQAogCXN0cnVjdCB3OTk2OGNmX2RldmljZSogY2FtID0KIAkgICAoc3RydWN0IHc5OTY4Y2ZfZGV2aWNlKil1c2JfZ2V0X2ludGZkYXRhKGludGYpOwogCi0JZG93bl93cml0ZSgmdzk5NjhjZl9kaXNjb25uZWN0KTsKLQogCWlmIChjYW0pIHsKKwkJZG93bl93cml0ZSgmdzk5NjhjZl9kaXNjb25uZWN0KTsKIAkJLyogUHJldmVudCBjb25jdXJyZW50IGFjY2Vzc2VzIHRvIGRhdGEgKi8KIAkJbXV0ZXhfbG9jaygmY2FtLT5kZXZfbXV0ZXgpOwogCiAJCWNhbS0+ZGlzY29ubmVjdGVkID0gMTsKIAotCQlEQkcoMiwgIkRpc2Nvbm5lY3RpbmcgJXMuLi4iLCBzeW1ib2xpYyhjYW1saXN0LCBjYW0tPmlkKSkKKwkJREJHKDIsICJEaXNjb25uZWN0aW5nICVzLi4uIiwgc3ltYm9saWMoY2FtbGlzdCwgY2FtLT5pZCkpOworCisJCXY0bDJfZGV2aWNlX2Rpc2Nvbm5lY3QoJmNhbS0+djRsMl9kZXYpOwogCiAJCXdha2VfdXBfaW50ZXJydXB0aWJsZV9hbGwoJmNhbS0+b3Blbik7CiAKQEAgLTM2MjEsMTIgKzM1NzUsMTIgQEAKIAkJCXc5OTY4Y2ZfcmVsZWFzZV9yZXNvdXJjZXMoY2FtKTsKIAogCQltdXRleF91bmxvY2soJmNhbS0+ZGV2X211dGV4KTsKKwkJdXBfd3JpdGUoJnc5OTY4Y2ZfZGlzY29ubmVjdCk7CiAKLQkJaWYgKCFjYW0tPnVzZXJzKQorCQlpZiAoIWNhbS0+dXNlcnMpIHsKIAkJCWtmcmVlKGNhbSk7CisJCX0KIAl9Ci0KLQl1cF93cml0ZSgmdzk5NjhjZl9kaXNjb25uZWN0KTsKIH0KIAogCkBAIC0zNjUwLDkgKzM2MDQsNiBAQAogCUtEQkcoMiwgVzk5NjhDRl9NT0RVTEVfTkFNRSIgIlc5OTY4Q0ZfTU9EVUxFX1ZFUlNJT04pCiAJS0RCRygzLCBXOTk2OENGX01PRFVMRV9BVVRIT1IpCiAKLQlpZiAob3Ztb2RfbG9hZCkKLQkJcmVxdWVzdF9tb2R1bGUoIm92Y2FtY2hpcCIpOwotCiAJaWYgKChlcnIgPSB1c2JfcmVnaXN0ZXIoJnc5OTY4Y2ZfdXNiX2RyaXZlcikpKQogCQlyZXR1cm4gZXJyOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3c5OTY4Y2YuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZi5oCmluZGV4IDMwMDMyZTEuLmZkZmM2YTQgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZi5oCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vdzk5NjhjZi5oCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSA8bGludXgvcndzZW0uaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KICNpbmNsdWRlIDxtZWRpYS9vdmNhbWNoaXAuaD4KIAogI2luY2x1ZGUgInc5OTY4Y2ZfdnBwLmgiCkBAIC00Miw3ICs0Myw2IEBACiAgKiBEZWZhdWx0IHZhbHVlcyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiAKLSNkZWZpbmUgVzk5NjhDRl9PVk1PRF9MT0FEICAgICAgMSAgLyogYXV0b21hdGljICdvdmNhbWNoaXAnIG1vZHVsZSBsb2FkaW5nICovCiAjZGVmaW5lIFc5OTY4Q0ZfVlBQTU9EX0xPQUQgICAgIDEgIC8qIGF1dG9tYXRpYyAndzk5NjhjZi12cHAnIG1vZHVsZSBsb2FkaW5nICovCiAKIC8qIENvbW1lbnQvdW5jb21tZW50IHRoZSBmb2xsb3dpbmcgbGluZSB0byBlbmFibGUvZGlzYWJsZSBkZWJ1Z2dpbmcgbWVzc2FnZXMgKi8KQEAgLTE5NSwxMCArMTk1LDkgQEAKIAogLyogTWFpbiBkZXZpY2UgZHJpdmVyIHN0cnVjdHVyZSAqLwogc3RydWN0IHc5OTY4Y2ZfZGV2aWNlIHsKLQlzdHJ1Y3QgZGV2aWNlIGRldjsgLyogZGV2aWNlIHN0cnVjdHVyZSAqLwotCiAJZW51bSB3OTk2OGNmX21vZGVsX2lkIGlkOyAgIC8qIHByaXZhdGUgZGV2aWNlIGlkZW50aWZpZXIgKi8KIAorCXN0cnVjdCB2NGwyX2RldmljZSB2NGwyX2RldjsKIAlzdHJ1Y3QgdmlkZW9fZGV2aWNlKiB2NGxkZXY7IC8qIC0+IFY0TCBzdHJ1Y3R1cmUgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIHY0bGxpc3Q7ICAgIC8qIGVudHJ5IG9mIHRoZSBsaXN0IG9mIFY0TCBjYW1lcmFzICovCiAKQEAgLTI2NSw3ICsyNjQsNyBAQAogCiAJLyogSTJDIGludGVyZmFjZSB0byBrZXJuZWwgKi8KIAlzdHJ1Y3QgaTJjX2FkYXB0ZXIgaTJjX2FkYXB0ZXI7Ci0Jc3RydWN0IGkyY19jbGllbnQqIHNlbnNvcl9jbGllbnQ7CisJc3RydWN0IHY0bDJfc3ViZGV2ICpzZW5zb3Jfc2Q7CiAKIAkvKiBMb2NrcyAqLwogCXN0cnVjdCBtdXRleCBkZXZfbXV0ZXgsICAgIC8qIGZvciBwcm9iZSwgZGlzY29ubmVjdCxvcGVuIGFuZCBjbG9zZSAqLwpAQCAtMjc3LDYgKzI3NiwxMSBAQAogCWNoYXIgY29tbWFuZFsxNl07IC8qIG5hbWUgb2YgdGhlIHByb2dyYW0gaG9sZGluZyB0aGUgZGV2aWNlICovCiB9OwogCitzdGF0aWMgaW5saW5lIHN0cnVjdCB3OTk2OGNmX2RldmljZSAqdG9fY2FtKHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IHc5OTY4Y2ZfZGV2aWNlLCB2NGwyX2Rldik7Cit9CisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICAqIE1hY3JvcyBmb3IgZGVidWdnaW5nICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCkBAIC0yOTEsMTQgKzI5NSwxNCBAQAogCWlmICggKChzcGVjaWZpY19kZWJ1ZykgJiYgKGRlYnVnID09IChsZXZlbCkpKSB8fCAgICAgICAgICAgICAgICAgICAgICBcCiAJICAgICAoKCFzcGVjaWZpY19kZWJ1ZykgJiYgKGRlYnVnID49IChsZXZlbCkpKSApIHsgICAgICAgICAgICAgICAgICAgIFwKIAkJaWYgKChsZXZlbCkgPT0gMSkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQlkZXZfZXJyKCZjYW0tPmRldiwgZm10ICJcbiIsICMjIGFyZ3MpOyAgICAgICAgICAgICAgICBcCisJCQl2NGwyX2VycigmY2FtLT52NGwyX2RldiwgZm10ICJcbiIsICMjIGFyZ3MpOyAgICAgICAgICBcCiAJCWVsc2UgaWYgKChsZXZlbCkgPT0gMiB8fCAobGV2ZWwpID09IDMpICAgICAgICAgICAgICAgICAgICAgICAgXAotCQkJZGV2X2luZm8oJmNhbS0+ZGV2LCBmbXQgIlxuIiwgIyMgYXJncyk7ICAgICAgICAgICAgICAgXAorCQkJdjRsMl9pbmZvKCZjYW0tPnY0bDJfZGV2LCBmbXQgIlxuIiwgIyMgYXJncyk7ICAgICAgICAgXAogCQllbHNlIGlmICgobGV2ZWwpID09IDQpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLQkJCWRldl93YXJuKCZjYW0tPmRldiwgZm10ICJcbiIsICMjIGFyZ3MpOyAgICAgICAgICAgICAgIFwKKwkJCXY0bDJfd2FybigmY2FtLT52NGwyX2RldiwgZm10ICJcbiIsICMjIGFyZ3MpOyAgICAgICAgIFwKIAkJZWxzZSBpZiAoKGxldmVsKSA+PSA1KSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0JCQlkZXZfaW5mbygmY2FtLT5kZXYsICJbJXM6JWRdICIgZm10ICJcbiIsICAgICAgICAgICAgICBcCi0JCQkJIF9fZnVuY19fLCBfX0xJTkVfXyAsICMjIGFyZ3MpOyAgICAgICAgICAgXAorCQkJdjRsMl9pbmZvKCZjYW0tPnY0bDJfZGV2LCAiWyVzOiVkXSAiIGZtdCAiXG4iLCAgICAgICAgXAorCQkJCSBfX2Z1bmNfXywgX19MSU5FX18gLCAjIyBhcmdzKTsgICAgICAgICAgICAgICBcCiAJfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH0KIC8qIEZvciBnZW5lcmljIGtlcm5lbCAobm90IGRldmljZSBzcGVjaWZpYykgbWVzc2FnZXMgKi8KQEAgLTMyMSw3ICszMjUsNyBAQAogCiAjdW5kZWYgUERCRwogI2RlZmluZSBQREJHKGZtdCwgYXJncy4uLikgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotZGV2X2luZm8oJmNhbS0+ZGV2LCAiWyVzOiVkXSAiIGZtdCAiXG4iLCBfX2Z1bmNfXywgX19MSU5FX18gLCAjIyBhcmdzKTsKK3Y0bDJfaW5mbygmY2FtLT52NGwyX2RldiwgIlslczolZF0gIiBmbXQgIlxuIiwgX19mdW5jX18sIF9fTElORV9fICwgIyMgYXJncyk7CiAKICN1bmRlZiBQREJHRwogI2RlZmluZSBQREJHRyhmbXQsIGFyZ3MuLi4pIGRvIHs7fSB3aGlsZSgwKTsgLyogbm90aGluZzogaXQncyBhIHBsYWNlaG9sZGVyICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3dtODczOS5jIGIvZHJpdmVycy9tZWRpYS92aWRlby93bTg3MzkuYwppbmRleCBmMjg2NGQ1Li5iNTcyY2UyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3dtODczOS5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vd204NzM5LmMKQEAgLTI1MiwxMSArMjUyLDYgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCB3bTg3MzlfY29tbWFuZChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50LCB1bnNpZ25lZCBjbWQsIHZvaWQgKmFyZykKLXsKLQlyZXR1cm4gdjRsMl9zdWJkZXZfY29tbWFuZChpMmNfZ2V0X2NsaWVudGRhdGEoY2xpZW50KSwgY21kLCBhcmcpOwotfQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfc3ViZGV2X2NvcmVfb3BzIHdtODczOV9jb3JlX29wcyA9IHsKQEAgLTM0Myw4ICszMzgsNiBAQAogCiBzdGF0aWMgc3RydWN0IHY0bDJfaTJjX2RyaXZlcl9kYXRhIHY0bDJfaTJjX2RhdGEgPSB7CiAJLm5hbWUgPSAid204NzM5IiwKLQkuZHJpdmVyaWQgPSBJMkNfRFJJVkVSSURfV004NzM5LAotCS5jb21tYW5kID0gd204NzM5X2NvbW1hbmQsCiAJLnByb2JlID0gd204NzM5X3Byb2JlLAogCS5yZW1vdmUgPSB3bTg3MzlfcmVtb3ZlLAogCS5pZF90YWJsZSA9IHdtODczOV9pZCwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vd204Nzc1LmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3dtODc3NS5jCmluZGV4IDUzZmNkNDI4NC4uZWRkZjExYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby93bTg3NzUuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3dtODc3NS5jCkBAIC0zNCwxNSArMzQsMTIgQEAKICNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldmljZS5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPgotI2luY2x1ZGUgPG1lZGlhL3Y0bDItaTJjLWRydi1sZWdhY3kuaD4KKyNpbmNsdWRlIDxtZWRpYS92NGwyLWkyYy1kcnYuaD4KIAogTU9EVUxFX0RFU0NSSVBUSU9OKCJ3bTg3NzUgZHJpdmVyIik7CiBNT0RVTEVfQVVUSE9SKCJVbGYgRWtsdW5kLCBIYW5zIFZlcmt1aWwiKTsKIE1PRFVMRV9MSUNFTlNFKCJHUEwiKTsKIAotc3RhdGljIHVuc2lnbmVkIHNob3J0IG5vcm1hbF9pMmNbXSA9IHsgMHgzNiA+PiAxLCBJMkNfQ0xJRU5UX0VORCB9OwotCi1JMkNfQ0xJRU5UX0lOU01PRDsKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwpAQCAtMTYxLDExICsxNTgsNiBAQAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgaW50IHdtODc3NV9jb21tYW5kKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsIHVuc2lnbmVkIGNtZCwgdm9pZCAqYXJnKQotewotCXJldHVybiB2NGwyX3N1YmRldl9jb21tYW5kKGkyY19nZXRfY2xpZW50ZGF0YShjbGllbnQpLCBjbWQsIGFyZyk7Ci19Ci0KIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCiAKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfY29yZV9vcHMgd204Nzc1X2NvcmVfb3BzID0gewpAQCAtMjY4LDggKzI2MCw2IEBACiAKIHN0YXRpYyBzdHJ1Y3QgdjRsMl9pMmNfZHJpdmVyX2RhdGEgdjRsMl9pMmNfZGF0YSA9IHsKIAkubmFtZSA9ICJ3bTg3NzUiLAotCS5kcml2ZXJpZCA9IEkyQ19EUklWRVJJRF9XTTg3NzUsCi0JLmNvbW1hbmQgPSB3bTg3NzVfY29tbWFuZCwKIAkucHJvYmUgPSB3bTg3NzVfcHJvYmUsCiAJLnJlbW92ZSA9IHdtODc3NV9yZW1vdmUsCiAJLmlkX3RhYmxlID0gd204Nzc1X2lkLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX3NlbnNvci5oIGIvZHJpdmVycy9tZWRpYS92aWRlby96YzAzMDEvemMwMzAxX3NlbnNvci5oCmluZGV4IGIwY2Q0OWMuLjNhNDA4ZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vemMwMzAxL3pjMDMwMV9zZW5zb3IuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pjMDMwMS96YzAzMDFfc2Vuc29yLmgKQEAgLTU4LDEyICs1OCwyMCBAQAogCS5pZFByb2R1Y3QgPSAocHJvZCksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCiAJLmJJbnRlcmZhY2VDbGFzcyA9IChpbnRjbGFzcykKIAorI2lmICFkZWZpbmVkIENPTkZJR19VU0JfR1NQQ0EgJiYgIWRlZmluZWQgQ09ORklHX1VTQl9HU1BDQV9NT0RVTEUKICNkZWZpbmUgWkMwMzAxX0lEX1RBQkxFICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgdXNiX2RldmljZV9pZCB6YzAzMDFfaWRfdGFibGVbXSA9ICB7ICAgICAgICAgICAgICAgICAgICAgIFwKIAl7IFpDMDMwMV9VU0JfREVWSUNFKDB4MDQ2ZCwgMHgwOGFlLCAweGZmKSwgfSwgLyogUEFTMjAyICovICAgICAgICAgICAgXAogCXsgWkMwMzAxX1VTQl9ERVZJQ0UoMHgwYWM4LCAweDMwM2IsIDB4ZmYpLCB9LCAvKiBQQi0wMzMwICovICAgICAgICAgICBcCiAJeyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKIH07CisjZWxzZQorI2RlZmluZSBaQzAzMDFfSURfVEFCTEUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3RhdGljIGNvbnN0IHN0cnVjdCB1c2JfZGV2aWNlX2lkIHpjMDMwMV9pZF90YWJsZVtdID0gIHsgICAgICAgICAgICAgICAgICAgICAgXAorCXsgWkMwMzAxX1VTQl9ERVZJQ0UoMHgwNDZkLCAweDA4YWUsIDB4ZmYpLCB9LCAvKiBQQVMyMDIgKi8gICAgICAgICAgICBcCisJeyB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK307CisjZW5kaWYKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL0tjb25maWcgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL0tjb25maWcKaW5kZXggODY2NmUxOS4uZmQ0MTIwZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi9LY29uZmlnCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vS2NvbmZpZwpAQCAtMSw2ICsxLDYgQEAKIGNvbmZpZyBWSURFT19aT1JBTgogCXRyaXN0YXRlICJab3JhbiBaUjM2MDU3LzM2MDY3IFZpZGVvIEZvciBMaW51eCIKLQlkZXBlbmRzIG9uIFBDSSAmJiBJMkNfQUxHT0JJVCAmJiBWSURFT19WNEwxICYmIFZJUlRfVE9fQlVTCisJZGVwZW5kcyBvbiBQQ0kgJiYgSTJDX0FMR09CSVQgJiYgVklERU9fVjRMMiAmJiBWSVJUX1RPX0JVUwogCWhlbHAKIAkgIFNheSBZIGZvciBzdXBwb3J0IGZvciBNSlBFRyBjYXB0dXJlIGNhcmRzIGJhc2VkIG9uIHRoZSBab3JhbgogCSAgMzYwNTcvMzYwNjcgUENJIGNvbnRyb2xsZXIgY2hpcHNldC4gVGhpcyBpbmNsdWRlcyB0aGUgSW9tZWdhCkBAIC0zMiw3ICszMiw3IEBACiBjb25maWcgVklERU9fWk9SQU5fQlVaCiAJdHJpc3RhdGUgIklvbWVnYSBCdXogc3VwcG9ydCIKIAlkZXBlbmRzIG9uIFZJREVPX1pPUkFOX1pSMzYwNjAKLQlzZWxlY3QgVklERU9fU0FBNzExMSBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTworCXNlbGVjdCBWSURFT19TQUE3MTFYIGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCiAJc2VsZWN0IFZJREVPX1NBQTcxODUgaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAloZWxwCiAJICBTdXBwb3J0IGZvciB0aGUgSW9tZWdhIEJ1eiBNSlBFRyBjYXB0dXJlL3BsYXliYWNrIGNhcmQuCkBAIC01OCw3ICs1OCw3IEBACiBjb25maWcgVklERU9fWk9SQU5fTE1MMzNSMTAKIAl0cmlzdGF0ZSAiTGludXggTWVkaWEgTGFicyBMTUwzM1IxMCBzdXBwb3J0IgogCWRlcGVuZHMgb24gVklERU9fWk9SQU5fWlIzNjA2MAotCXNlbGVjdCBWSURFT19TQUE3MTE0IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCisJc2VsZWN0IFZJREVPX1NBQTcxMVggaWYgVklERU9fSEVMUEVSX0NISVBTX0FVVE8KIAlzZWxlY3QgVklERU9fQURWNzE3MCBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwogCWhlbHAKIAkgIHN1cHBvcnQgZm9yIHRoZSBMaW51eCBNZWRpYSBMYWJzIExNTDMzUjEwIE1KUEVHIGNhcHR1cmUvcGxheWJhY2sKQEAgLTY2LDcgKzY2LDcgQEAKIAogY29uZmlnIFZJREVPX1pPUkFOX0FWUzZFWUVTCiAJdHJpc3RhdGUgIkF2ZXJNZWRpYSA2IEV5ZXMgc3VwcG9ydCAoRVhQRVJJTUVOVEFMKSIKLQlkZXBlbmRzIG9uIFZJREVPX1pPUkFOX1pSMzYwNjAgJiYgRVhQRVJJTUVOVEFMICYmIFZJREVPX1Y0TDEKKwlkZXBlbmRzIG9uIFZJREVPX1pPUkFOX1pSMzYwNjAgJiYgRVhQRVJJTUVOVEFMCiAJc2VsZWN0IFZJREVPX0JUODU2IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCiAJc2VsZWN0IFZJREVPX0JUODY2IGlmIFZJREVPX0hFTFBFUl9DSElQU19BVVRPCiAJc2VsZWN0IFZJREVPX0tTMDEyNyBpZiBWSURFT19IRUxQRVJfQ0hJUFNfQVVUTwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi92aWRlb2NvZGVjLmggYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3ZpZGVvY29kZWMuaAppbmRleCA5N2EzYmJlLi41YzI3YjI1IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3ZpZGVvY29kZWMuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3ZpZGVvY29kZWMuaApAQCAtOTcsNyArOTcsNyBAQAogCSAgICAgICBhdmFpbGFibGUpIC0gaXQgcmV0dXJucyAwIGlmIHRoZSBtb2RlIGlzIHBvc3NpYmxlCiAgICBzZXRfc2l6ZSAtPiB0aGlzIGZuLXJlZi4gc2V0cyB0aGUgbm9ybSBhbmQgaW1hZ2Ugc2l6ZSBmb3IKIAkgICAgICAgY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiAocmV0dXJucyAwIG9uIHN1Y2Nlc3MpCi0JICAgICAgIHRoZSBub3JtIHBhcmFtIGlzIGRlZmluZWQgaW4gdmlkZW9kZXYuaCAoVklERU9fTU9ERV8qKQorCSAgICAgICB0aGUgbm9ybSBwYXJhbSBpcyBkZWZpbmVkIGluIHZpZGVvZGV2Mi5oIChWNEwyX1NURF8qKQogCiAgICBhZGRpdGlvbmFsIHNldHVwIG1heSBiZSBhdmFpbGFibGUsIHRvbyAtIGJ1dCB0aGUgY29kZWMgc2hvdWxkIHdvcmsgd2l0aAogICAgc29tZSBkZWZhdWx0IHZhbHVlcyBldmVuIHdpdGhvdXQgdGhpcwpAQCAtMTQ0LDkgKzE0NCw4IEBACiAjaWZuZGVmIF9fTElOVVhfVklERU9DT0RFQ19ICiAjZGVmaW5lIF9fTElOVVhfVklERU9DT0RFQ19ICiAKLSNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogCi0vL3Nob3VsZCBiZSBpbiB2aWRlb2Rldi5oID8/PyAoVklEX0RPXy4uLi4pCiAjZGVmaW5lIENPREVDX0RPX0NPTVBSRVNTSU9OIDAKICNkZWZpbmUgQ09ERUNfRE9fRVhQQU5TSU9OICAgMQogCkBAIC0yMzcsMTAgKzIzNiw2IEBACiAJX191MzIgd2lkdGgsIGhlaWdodDsJLyogQXJlYSB0byBjYXB0dXJlICovCiAJX191MTYgZGVjaW1hdGlvbjsJLyogRGVjaW1hdGlvbiBkaXZpZGVyICovCiAJX191MTYgZmxhZ3M7CQkvKiBGbGFncyBmb3IgY2FwdHVyZSAqLwotLyogZmxhZ3MgYXJlIHRoZSBzYW1lIGFzIGluIHN0cnVjdCB2aWRlb19jYXB0dXJlIC0gc2VlIHZpZGVvZGV2Lmg6Ci0jZGVmaW5lIFZJREVPX0NBUFRVUkVfT0RECQkwCi0jZGVmaW5lIFZJREVPX0NBUFRVUkVfRVZFTgkJMQotKi8KIAlfX3UxNiBxdWFsaXR5OwkJLyogcXVhbGl0eSBvZiB0aGUgdmlkZW8gKi8KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW4uaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW4uaAppbmRleCBlODczYTkxLi5hZmVjZjMyIDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbi5oCkBAIC0zMSw2ICszMSw4IEBACiAjaWZuZGVmIF9CVVpfSF8KICNkZWZpbmUgX0JVWl9IXwogCisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KKwogc3RydWN0IHpvcmFuX3JlcXVlc3RidWZmZXJzIHsKIAl1bnNpZ25lZCBsb25nIGNvdW50OwkvKiBOdW1iZXIgb2YgYnVmZmVycyBmb3IgTUpQRUcgZ3JhYmJpbmcgKi8KIAl1bnNpZ25lZCBsb25nIHNpemU7CS8qIFNpemUgUEVSIEJVRkZFUiBpbiBieXRlcyAqLwpAQCAtMTcwLDcgKzE3Miw3IEBACiAjZW5kaWYKICNkZWZpbmUgICBWNExfTUFTS19GUkFNRSAgIChWNExfTUFYX0ZSQU1FIC0gMSkKIAotI2RlZmluZSBNQVhfS01BTExPQ19NRU0gKDEyOCoxMDI0KQorI2RlZmluZSBNQVhfRlJBTUUgKEJVWl9NQVhfRlJBTUUgPiBWSURFT19NQVhfRlJBTUUgPyBCVVpfTUFYX0ZSQU1FIDogVklERU9fTUFYX0ZSQU1FKQogCiAjaW5jbHVkZSAienIzNjA1Ny5oIgogCkBAIC0yNDAsOSArMjQyLDYgQEAKIAogc3RydWN0IHpvcmFuX2Zvcm1hdCB7CiAJY2hhciAqbmFtZTsKLSNpZmRlZiBDT05GSUdfVklERU9fVjRMMV9DT01QQVQKLQlpbnQgcGFsZXR0ZTsKLSNlbmRpZgogCV9fdTMyIGZvdXJjYzsKIAlpbnQgY29sb3JzcGFjZTsKIAlpbnQgZGVwdGg7CkBAIC0yODMsMjEgKzI4MiwyMSBAQAogCWludCBjb3VudDsKIH07CiAKLXN0cnVjdCB6b3Jhbl9qcGdfYnVmZmVyIHsKK3N0cnVjdCB6b3Jhbl9idWZmZXIgewogCXN0cnVjdCB6b3Jhbl9tYXBwaW5nICptYXA7Ci0JX19sZTMyICpmcmFnX3RhYjsJCS8qIGFkZHJlc3NlcyBvZiBmcmFnIHRhYmxlICovCi0JdTMyIGZyYWdfdGFiX2J1czsJLyogc2FtZSB2YWx1ZSBjYWNoZWQgdG8gc2F2ZSB0aW1lIGluIElTUiAqLwotCWVudW0gem9yYW5fYnVmZmVyX3N0YXRlIHN0YXRlOwkvKiBub24temVybyBpZiBjb3JyZXNwb25kaW5nIGJ1ZmZlciBpcyBpbiB1c2UgaW4gZ3JhYiBxdWV1ZSAqLwotCXN0cnVjdCB6b3Jhbl9zeW5jIGJzOwkvKiBET05FOiBpbmZvIHRvIHJldHVybiB0byBhcHBsaWNhdGlvbiAqLwotfTsKLQotc3RydWN0IHpvcmFuX3Y0bF9idWZmZXIgewotCXN0cnVjdCB6b3Jhbl9tYXBwaW5nICptYXA7Ci0JY2hhciAqZmJ1ZmZlcjsJCS8qIHZpcnR1YWwgIGFkZHJlc3Mgb2YgZnJhbWUgYnVmZmVyICovCi0JdW5zaWduZWQgbG9uZyBmYnVmZmVyX3BoeXM7CS8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZnJhbWUgYnVmZmVyICovCi0JdW5zaWduZWQgbG9uZyBmYnVmZmVyX2J1czsJLyogYnVzICAgICAgYWRkcmVzcyBvZiBmcmFtZSBidWZmZXIgKi8KLQllbnVtIHpvcmFuX2J1ZmZlcl9zdGF0ZSBzdGF0ZTsJLyogc3RhdGU6IHVudXNlZC9wZW5kaW5nL2RvbmUgKi8KLQlzdHJ1Y3Qgem9yYW5fc3luYyBiczsJLyogRE9ORTogaW5mbyB0byByZXR1cm4gdG8gYXBwbGljYXRpb24gKi8KKwllbnVtIHpvcmFuX2J1ZmZlcl9zdGF0ZSBzdGF0ZTsJLyogc3RhdGU6IHVudXNlZC9wZW5kaW5nL2RtYS9kb25lICovCisJc3RydWN0IHpvcmFuX3N5bmMgYnM7CQkvKiBET05FOiBpbmZvIHRvIHJldHVybiB0byBhcHBsaWNhdGlvbiAqLworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCV9fbGUzMiAqZnJhZ190YWI7CS8qIGFkZHJlc3NlcyBvZiBmcmFnIHRhYmxlICovCisJCQl1MzIgZnJhZ190YWJfYnVzOwkvKiBzYW1lIHZhbHVlIGNhY2hlZCB0byBzYXZlIHRpbWUgaW4gSVNSICovCisJCX0ganBnOworCQlzdHJ1Y3QgeworCQkJY2hhciAqZmJ1ZmZlcjsJCS8qIHZpcnR1YWwgYWRkcmVzcyBvZiBmcmFtZSBidWZmZXIgKi8KKwkJCXVuc2lnbmVkIGxvbmcgZmJ1ZmZlcl9waHlzOy8qIHBoeXNpY2FsIGFkZHJlc3Mgb2YgZnJhbWUgYnVmZmVyICovCisJCQl1bnNpZ25lZCBsb25nIGZidWZmZXJfYnVzOy8qIGJ1cyBhZGRyZXNzIG9mIGZyYW1lIGJ1ZmZlciAqLworCQl9IHY0bDsKKwl9OwogfTsKIAogZW51bSB6b3Jhbl9sb2NrX2FjdGl2aXR5IHsKQEAgLTMwNywyMSArMzA2LDEzIEBACiB9OwogCiAvKiBidWZmZXIgY29sbGVjdGlvbnMgKi8KLXN0cnVjdCB6b3Jhbl9qcGdfc3RydWN0IHsKK3N0cnVjdCB6b3Jhbl9idWZmZXJfY29sIHsKIAllbnVtIHpvcmFuX2xvY2tfYWN0aXZpdHkgYWN0aXZlOwkvKiBmZWF0dXJlIGN1cnJlbnRseSBpbiB1c2U/ICovCi0Jc3RydWN0IHpvcmFuX2pwZ19idWZmZXIgYnVmZmVyW0JVWl9NQVhfRlJBTUVdOwkvKiBidWZmZXJzICovCi0JaW50IG51bV9idWZmZXJzLCBidWZmZXJfc2l6ZTsKKwl1bnNpZ25lZCBpbnQgbnVtX2J1ZmZlcnMsIGJ1ZmZlcl9zaXplOworCXN0cnVjdCB6b3Jhbl9idWZmZXIgYnVmZmVyW01BWF9GUkFNRV07CS8qIGJ1ZmZlcnMgKi8KIAl1OCBhbGxvY2F0ZWQ7CQkvKiBGbGFnIGlmIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCAgKi8KLQl1OCByZWFkeV90b19iZV9mcmVlZDsJLyogaGFjayAtIHNlZSB6b3Jhbl9kcml2ZXIuYyAqLwogCXU4IG5lZWRfY29udGlndW91czsJLyogRmxhZyBpZiBjb250aWd1b3VzIGJ1ZmZlcnMgYXJlIG5lZWRlZCAqLwotfTsKLQotc3RydWN0IHpvcmFuX3Y0bF9zdHJ1Y3QgewotCWVudW0gem9yYW5fbG9ja19hY3Rpdml0eSBhY3RpdmU7CS8qIGZlYXR1cmUgY3VycmVudGx5IGluIHVzZT8gKi8KLQlzdHJ1Y3Qgem9yYW5fdjRsX2J1ZmZlciBidWZmZXJbVklERU9fTUFYX0ZSQU1FXTsJLyogYnVmZmVycyAqLwotCWludCBudW1fYnVmZmVycywgYnVmZmVyX3NpemU7Ci0JdTggYWxsb2NhdGVkOwkJLyogRmxhZyBpZiBidWZmZXJzIGFyZSBhbGxvY2F0ZWQgICovCi0JdTggcmVhZHlfdG9fYmVfZnJlZWQ7CS8qIGhhY2sgLSBzZWUgem9yYW5fZHJpdmVyLmMgKi8KKwkvKiBvbmx5IGFwcGxpZXMgdG8ganBnIGJ1ZmZlcnMsIHJhdyBidWZmZXJzIGFyZSBhbHdheXMgY29udGlndW91cyAqLwogfTsKIAogc3RydWN0IHpvcmFuOwpAQCAtMzMwLDIzICszMjEsMjcgQEAKIHN0cnVjdCB6b3Jhbl9maCB7CiAJc3RydWN0IHpvcmFuICp6cjsKIAotCWVudW0gem9yYW5fbWFwX21vZGUgbWFwX21vZGU7CS8qIEZsYWcgd2hpY2ggYnVmZmVyc2V0IHdpbGwgbWFwIGJ5IG5leHQgbW1hcCgpICovCisJZW51bSB6b3Jhbl9tYXBfbW9kZSBtYXBfbW9kZTsJCS8qIEZsYWcgd2hpY2ggYnVmZmVyc2V0IHdpbGwgbWFwIGJ5IG5leHQgbW1hcCgpICovCiAKIAlzdHJ1Y3Qgem9yYW5fb3ZlcmxheV9zZXR0aW5ncyBvdmVybGF5X3NldHRpbmdzOwotCXUzMiAqb3ZlcmxheV9tYXNrOwkvKiBvdmVybGF5IG1hc2sgKi8KLQllbnVtIHpvcmFuX2xvY2tfYWN0aXZpdHkgb3ZlcmxheV9hY3RpdmU7CS8qIGZlYXR1cmUgY3VycmVudGx5IGluIHVzZT8gKi8KKwl1MzIgKm92ZXJsYXlfbWFzazsJCQkvKiBvdmVybGF5IG1hc2sgKi8KKwllbnVtIHpvcmFuX2xvY2tfYWN0aXZpdHkgb3ZlcmxheV9hY3RpdmU7LyogZmVhdHVyZSBjdXJyZW50bHkgaW4gdXNlPyAqLworCisJc3RydWN0IHpvcmFuX2J1ZmZlcl9jb2wgYnVmZmVyczsJLyogYnVmZmVycycgaW5mbyAqLwogCiAJc3RydWN0IHpvcmFuX3Y0bF9zZXR0aW5ncyB2NGxfc2V0dGluZ3M7CS8qIHN0cnVjdHVyZSB3aXRoIGEgbG90IG9mIHRoaW5ncyB0byBwbGF5IHdpdGggKi8KLQlzdHJ1Y3Qgem9yYW5fdjRsX3N0cnVjdCB2NGxfYnVmZmVyczsJLyogVjRMIGJ1ZmZlcnMnIGluZm8gKi8KLQogCXN0cnVjdCB6b3Jhbl9qcGdfc2V0dGluZ3MganBnX3NldHRpbmdzOwkvKiBzdHJ1Y3R1cmUgd2l0aCBhIGxvdCBvZiB0aGluZ3MgdG8gcGxheSB3aXRoICovCi0Jc3RydWN0IHpvcmFuX2pwZ19zdHJ1Y3QganBnX2J1ZmZlcnM7CS8qIE1KUEVHIGJ1ZmZlcnMnIGluZm8gKi8KIH07CiAKIHN0cnVjdCBjYXJkX2luZm8gewogCWVudW0gY2FyZF90eXBlIHR5cGU7CiAJY2hhciBuYW1lWzMyXTsKLQl1MTYgaTJjX2RlY29kZXIsIGkyY19lbmNvZGVyOwkJCS8qIEkyQyB0eXBlcyAqLworCWNvbnN0IGNoYXIgKmkyY19kZWNvZGVyOwkvKiBpMmMgZGVjb2RlciBkZXZpY2UgKi8KKwljb25zdCBjaGFyICptb2RfZGVjb2RlcjsJLyogaTJjIGRlY29kZXIgbW9kdWxlICovCisJY29uc3QgdW5zaWduZWQgc2hvcnQgKmFkZHJzX2RlY29kZXI7CisJY29uc3QgY2hhciAqaTJjX2VuY29kZXI7CS8qIGkyYyBlbmNvZGVyIGRldmljZSAqLworCWNvbnN0IGNoYXIgKm1vZF9lbmNvZGVyOwkvKiBpMmMgZW5jb2RlciBtb2R1bGUgKi8KKwljb25zdCB1bnNpZ25lZCBzaG9ydCAqYWRkcnNfZW5jb2RlcjsKIAl1MTYgdmlkZW9fdmZlLCB2aWRlb19jb2RlYzsJCQkvKiB2aWRlb2NvZGVjIHR5cGVzICovCiAJdTE2IGF1ZGlvX2NoaXA7CQkJCQkvKiBhdWRpbyB0eXBlICovCiAKQEAgLTM1Niw3ICszNTEsNyBAQAogCQljaGFyIG5hbWVbMzJdOwogCX0gaW5wdXRbQlVaX01BWF9JTlBVVF07CiAKLQlpbnQgbm9ybXM7CisJdjRsMl9zdGRfaWQgbm9ybXM7CiAJc3RydWN0IHR2bm9ybSAqdHZuWzNdOwkvKiBzdXBwb3J0ZWQgVFYgbm9ybXMgKi8KIAogCXUzMiBqcGVnX2ludDsJCS8qIEpQRUcgaW50ZXJydXB0ICovCkBAIC0zNzcsMTQgKzM3MiwxNSBAQAogfTsKIAogc3RydWN0IHpvcmFuIHsKKwlzdHJ1Y3QgdjRsMl9kZXZpY2UgdjRsMl9kZXY7CiAJc3RydWN0IHZpZGVvX2RldmljZSAqdmlkZW9fZGV2OwogCiAJc3RydWN0IGkyY19hZGFwdGVyIGkyY19hZGFwdGVyOwkvKiAqLwogCXN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSBpMmNfYWxnbzsJLyogKi8KIAl1MzIgaTJjYnI7CiAKLQlzdHJ1Y3QgaTJjX2NsaWVudCAqZGVjb2RlcjsJLyogdmlkZW8gZGVjb2RlciBpMmMgY2xpZW50ICovCi0Jc3RydWN0IGkyY19jbGllbnQgKmVuY29kZXI7CS8qIHZpZGVvIGVuY29kZXIgaTJjIGNsaWVudCAqLworCXN0cnVjdCB2NGwyX3N1YmRldiAqZGVjb2RlcjsJLyogdmlkZW8gZGVjb2RlciBzdWItZGV2aWNlICovCisJc3RydWN0IHY0bDJfc3ViZGV2ICplbmNvZGVyOwkvKiB2aWRlbyBlbmNvZGVyIHN1Yi1kZXZpY2UgKi8KIAogCXN0cnVjdCB2aWRlb2NvZGVjICpjb2RlYzsJLyogdmlkZW8gY29kZWMgKi8KIAlzdHJ1Y3QgdmlkZW9jb2RlYyAqdmZlOwkvKiB2aWRlbyBmcm9udCBlbmQgKi8KQEAgLTQwNSw5ICs0MDEsMTUgQEAKIAlzcGlubG9ja190IHNwaW5sb2NrOwkvKiBTcGlubG9jayAqLwogCiAJLyogVmlkZW8gZm9yIExpbnV4IHBhcmFtZXRlcnMgKi8KLQlpbnQgaW5wdXQsIG5vcm07CS8qIGNhcmQncyBub3JtIGFuZCBpbnB1dCAtIG5vcm09VklERU9fTU9ERV8qICovCi0JaW50IGh1ZSwgc2F0dXJhdGlvbiwgY29udHJhc3QsIGJyaWdodG5lc3M7CS8qIEN1cnJlbnQgcGljdHVyZSBwYXJhbXMgKi8KLQlzdHJ1Y3QgdmlkZW9fYnVmZmVyIGJ1ZmZlcjsJLyogQ3VycmVudCBidWZmZXIgcGFyYW1zICovCisJaW50IGlucHV0OwkvKiBjYXJkJ3Mgbm9ybSBhbmQgaW5wdXQgLSBub3JtPVZJREVPX01PREVfKiAqLworCXY0bDJfc3RkX2lkIG5vcm07CisKKwkvKiBDdXJyZW50IGJ1ZmZlciBwYXJhbXMgKi8KKwl2b2lkICAgICp2YnVmX2Jhc2U7CisJaW50ICAgICB2YnVmX2hlaWdodCwgdmJ1Zl93aWR0aDsKKwlpbnQgICAgIHZidWZfZGVwdGg7CisJaW50ICAgICB2YnVmX2J5dGVzcGVybGluZTsKKwogCXN0cnVjdCB6b3Jhbl9vdmVybGF5X3NldHRpbmdzIG92ZXJsYXlfc2V0dGluZ3M7CiAJdTMyICpvdmVybGF5X21hc2s7CS8qIG92ZXJsYXkgbWFzayAqLwogCWVudW0gem9yYW5fbG9ja19hY3Rpdml0eSBvdmVybGF5X2FjdGl2ZTsJLyogZmVhdHVyZSBjdXJyZW50bHkgaW4gdXNlPyAqLwpAQCAtNDI3LDcgKzQyOSw3IEBACiAJdW5zaWduZWQgbG9uZyB2NGxfcGVuZF90YWlsOwogCXVuc2lnbmVkIGxvbmcgdjRsX3N5bmNfdGFpbDsKIAlpbnQgdjRsX3BlbmRbVjRMX01BWF9GUkFNRV07Ci0Jc3RydWN0IHpvcmFuX3Y0bF9zdHJ1Y3QgdjRsX2J1ZmZlcnM7CS8qIFY0TCBidWZmZXJzJyBpbmZvICovCisJc3RydWN0IHpvcmFuX2J1ZmZlcl9jb2wgdjRsX2J1ZmZlcnM7CS8qIFY0TCBidWZmZXJzJyBpbmZvICovCiAKIAkvKiBCdXogTUpQRUcgcGFyYW1ldGVycyAqLwogCWVudW0gem9yYW5fY29kZWNfbW9kZSBjb2RlY19tb2RlOwkvKiBzdGF0dXMgb2YgY29kZWMgKi8KQEAgLTQ1NCw3ICs0NTYsNyBAQAogCWludCBqcGdfcGVuZFtCVVpfTUFYX0ZSQU1FXTsKIAogCS8qIGFycmF5IGluZGV4ZWQgYnkgZnJhbWUgbnVtYmVyICovCi0Jc3RydWN0IHpvcmFuX2pwZ19zdHJ1Y3QganBnX2J1ZmZlcnM7CS8qIE1KUEVHIGJ1ZmZlcnMnIGluZm8gKi8KKwlzdHJ1Y3Qgem9yYW5fYnVmZmVyX2NvbCBqcGdfYnVmZmVyczsJLyogTUpQRUcgYnVmZmVycycgaW5mbyAqLwogCiAJLyogQWRkaXRpb25hbCBzdHVmZiBmb3IgdGVzdGluZyAqLwogI2lmZGVmIENPTkZJR19QUk9DX0ZTCkBAIC00ODgsNiArNDkwLDExIEBACiAJd2FpdF9xdWV1ZV9oZWFkX3QgdGVzdF9xOwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgem9yYW4gKnRvX3pvcmFuKHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IHpvcmFuLCB2NGwyX2Rldik7Cit9CisKIC8qIFRoZXJlIHdhcyBzb21ldGhpbmcgY2FsbGVkIF9BTFBIQV9CVVogdGhhdCB1c2VkIHRoZSBQQ0kgYWRkcmVzcyBpbnN0ZWFkIG9mCiAgKiB0aGUga2VybmVsIGlvbWFwcGVkIGFkZHJlc3MgZm9yIGJ0cmVhZC9idHdyaXRlLiAgKi8KICNkZWZpbmUgYnR3cml0ZShkYXQsYWRyKSAgICB3cml0ZWwoKGRhdCksIHpyLT56cjM2MDU3X21lbSsoYWRyKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fY2FyZC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmMKaW5kZXggNWQyZjA5MC4uZjkxYmJhNCAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmMKQEAgLTM4LDggKzM4LDcgQEAKICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KLSNpbmNsdWRlIDxtZWRpYS92NGwyLWNvbW1vbi5oPgorI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CiAjaW5jbHVkZSA8bGludXgvc2VtLmg+CiAjaW5jbHVkZSA8bGludXgva21vZC5oPgpAQCAtNDcsMTEgKzQ2LDEwIEBACiAKICNpbmNsdWRlIDxsaW51eC9wY2kuaD4KICNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19kZWNvZGVyLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZW5jb2Rlci5oPgogI2luY2x1ZGUgPGxpbnV4L211dGV4Lmg+Ci0KLSNpbmNsdWRlIDxhc20vaW8uaD4KKyNpbmNsdWRlIDxsaW51eC9pby5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CisjaW5jbHVkZSA8bWVkaWEvYnQ4MTkuaD4KIAogI2luY2x1ZGUgInZpZGVvY29kZWMuaCIKICNpbmNsdWRlICJ6b3Jhbi5oIgpAQCAtMTA4LDI1ICsxMDYsOCBAQAogbW9kdWxlX3BhcmFtX2FycmF5KHZpZGVvX25yLCBpbnQsIE5VTEwsIDA0NDQpOwogTU9EVUxFX1BBUk1fREVTQyh2aWRlb19uciwgIlZpZGVvIGRldmljZSBudW1iZXIgKC0xPUF1dG8pIik7CiAKLS8qCi0gICBOdW1iZXIgYW5kIHNpemUgb2YgZ3JhYiBidWZmZXJzIGZvciBWaWRlbyA0IExpbnV4Ci0gICBUaGUgdmFzdCBtYWpvcml0eSBvZiBhcHBsaWNhdGlvbnMgc2hvdWxkIG5vdCBuZWVkIG1vcmUgdGhhbiAyLAotICAgdGhlIHZlcnkgcG9wdWxhciBCVFRWIGRyaXZlciBhY3R1YWxseSBkb2VzIE9OTFkgaGF2ZSAyLgotICAgVGltZSBzZW5zaXRpdmUgYXBwbGljYXRpb25zIG1pZ2h0IG5lZWQgbW9yZSwgdGhlIG1heGltdW0KLSAgIGlzIFZJREVPX01BWF9GUkFNRSAoZGVmaW5lZCBpbiA8bGludXgvdmlkZW9kZXYuaD4pLgotCi0gICBUaGUgc2l6ZSBpcyBzZXQgc28gdGhhdCB0aGUgbWF4aW11bSBwb3NzaWJsZSByZXF1ZXN0Ci0gICBjYW4gYmUgc2F0aXNmaWVkLiBEZWNyZWFzZSAgaXQsIGlmIGJpZ3BoeXNfYXJlYSBhbGxvYydkCi0gICBtZW1vcnkgaXMgbG93LiBJZiB5b3UgZG9uJ3QgaGF2ZSB0aGUgYmlncGh5c19hcmVhIHBhdGNoLAotICAgc2V0IGl0IHRvIDEyOCBLQi4gV2lsbCB5b3UgYWxsb3cgb25seSB0byBncmFiIHNtYWxsCi0gICBpbWFnZXMgd2l0aCBWNEwsIGJ1dCB0aGF0J3MgYmV0dGVyIHRoYW4gbm90aGluZy4KLQotICAgdjRsX2J1ZnNpemUgaGFzIHRvIGJlIGdpdmVuIGluIEtCICEKLQotKi8KLQotaW50IHY0bF9uYnVmcyA9IDI7Ci1pbnQgdjRsX2J1ZnNpemUgPSAxMjg7CQkvKiBFdmVyeWJvZHkgc2hvdWxkIGJlIGFibGUgdG8gd29yayB3aXRoIHRoaXMgc2V0dGluZyAqLworaW50IHY0bF9uYnVmcyA9IDQ7CitpbnQgdjRsX2J1ZnNpemUgPSA4NjQ7CQkvKiBFdmVyeWJvZHkgc2hvdWxkIGJlIGFibGUgdG8gd29yayB3aXRoIHRoaXMgc2V0dGluZyAqLwogbW9kdWxlX3BhcmFtKHY0bF9uYnVmcywgaW50LCAwNjQ0KTsKIE1PRFVMRV9QQVJNX0RFU0ModjRsX25idWZzLCAiTWF4aW11bSBudW1iZXIgb2YgVjRMIGJ1ZmZlcnMgdG8gdXNlIik7CiBtb2R1bGVfcGFyYW0odjRsX2J1ZnNpemUsIGludCwgMDY0NCk7CkBAIC0yNzMsNyArMjU0LDcgQEAKIHN0YXRpYyB2b2lkCiBkYzEwX2luaXQgKHN0cnVjdCB6b3JhbiAqenIpCiB7Ci0JZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogZGMxMF9pbml0KClcbiIsIFpSX0RFVk5BTUUoenIpKTsKKwlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiAlc1xuIiwgWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAogCS8qIFBpeGVsIGNsb2NrIHNlbGVjdGlvbiAqLwogCUdQSU8oenIsIDQsIDApOwpAQCAtMjg1LDEzICsyNjYsMTMgQEAKIHN0YXRpYyB2b2lkCiBkYzEwcGx1c19pbml0IChzdHJ1Y3Qgem9yYW4gKnpyKQogewotCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IGRjMTBwbHVzX2luaXQoKVxuIiwgWlJfREVWTkFNRSh6cikpOworCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6ICVzXG4iLCBaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogfQogCiBzdGF0aWMgdm9pZAogYnV6X2luaXQgKHN0cnVjdCB6b3JhbiAqenIpCiB7Ci0JZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogYnV6X2luaXQoKVxuIiwgWlJfREVWTkFNRSh6cikpOworCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6ICVzXG4iLCBaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCiAJLyogc29tZSBzdHVmZiBmcm9tIElvbWVnYSAqLwogCXBjaV93cml0ZV9jb25maWdfZHdvcmQoenItPnBjaV9kZXYsIDB4ZmMsIDB4OTA2ODBmMTUpOwpAQCAtMzAyLDcgKzI4Myw3IEBACiBzdGF0aWMgdm9pZAogbG1sMzNfaW5pdCAoc3RydWN0IHpvcmFuICp6cikKIHsKLQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBsbWwzM19pbml0KClcbiIsIFpSX0RFVk5BTUUoenIpKTsKKwlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiAlc1xuIiwgWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAogCUdQSU8oenIsIDIsIDEpOwkJLy8gU2V0IENvbXBvc2l0ZSBpbnB1dC9vdXRwdXQKIH0KQEAgLTMzMiw1MCArMzEzLDYgQEAKIH0KIAogc3RhdGljIGNoYXIgKgotaTJjaWRfdG9fbW9kdWxlbmFtZSAodTE2IGkyY19pZCkKLXsKLQljaGFyICpuYW1lID0gTlVMTDsKLQotCXN3aXRjaCAoaTJjX2lkKSB7Ci0JY2FzZSBJMkNfRFJJVkVSSURfU0FBNzExMDoKLQkJbmFtZSA9ICJzYWE3MTEwIjsKLQkJYnJlYWs7Ci0JY2FzZSBJMkNfRFJJVkVSSURfU0FBNzExMUE6Ci0JCW5hbWUgPSAic2FhNzExMSI7Ci0JCWJyZWFrOwotCWNhc2UgSTJDX0RSSVZFUklEX1NBQTcxMTQ6Ci0JCW5hbWUgPSAic2FhNzExNCI7Ci0JCWJyZWFrOwotCWNhc2UgSTJDX0RSSVZFUklEX1NBQTcxODVCOgotCQluYW1lID0gInNhYTcxODUiOwotCQlicmVhazsKLQljYXNlIEkyQ19EUklWRVJJRF9BRFY3MTcwOgotCQluYW1lID0gImFkdjcxNzAiOwotCQlicmVhazsKLQljYXNlIEkyQ19EUklWRVJJRF9BRFY3MTc1OgotCQluYW1lID0gImFkdjcxNzUiOwotCQlicmVhazsKLQljYXNlIEkyQ19EUklWRVJJRF9CVDgxOToKLQkJbmFtZSA9ICJidDgxOSI7Ci0JCWJyZWFrOwotCWNhc2UgSTJDX0RSSVZFUklEX0JUODU2OgotCQluYW1lID0gImJ0ODU2IjsKLQkJYnJlYWs7Ci0JY2FzZSBJMkNfRFJJVkVSSURfQlQ4NjY6Ci0JCW5hbWUgPSAiYnQ4NjYiOwotCQlicmVhazsKLQljYXNlIEkyQ19EUklWRVJJRF9WUFgzMjIwOgotCQluYW1lID0gInZweDMyMjAiOwotCQlicmVhazsKLQljYXNlIEkyQ19EUklWRVJJRF9LUzAxMjc6Ci0JCW5hbWUgPSAia3MwMTI3IjsKLQkJYnJlYWs7Ci0JfQotCi0JcmV0dXJuIG5hbWU7Ci19Ci0KLXN0YXRpYyBjaGFyICoKIGNvZGVjaWRfdG9fbW9kdWxlbmFtZSAodTE2IGNvZGVjaWQpCiB7CiAJY2hhciAqbmFtZSA9IE5VTEw7CkBAIC00MjUsMTEgKzM2MiwyNCBAQAogc3RhdGljIHN0cnVjdCB0dm5vcm0gZjUwY2NpcjYwMV9hdnM2ZXllcyA9IHsgODY0LCA3MjAsIDc0LCA4MDQsIDYyNSwgNTc2LCAxOCB9Owogc3RhdGljIHN0cnVjdCB0dm5vcm0gZjYwY2NpcjYwMV9hdnM2ZXllcyA9IHsgODU4LCA3MjAsIDU2LCA3ODgsIDUyNSwgNDgwLCAxNiB9OwogCitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgdnB4MzIyMF9hZGRyc1tdID0geyAweDQzLCAweDQ3LCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHNhYTcxMTBfYWRkcnNbXSA9IHsgMHg0ZSwgMHg0ZiwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBzYWE3MTExX2FkZHJzW10gPSB7IDB4MjUsIDB4MjQsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgc2FhNzExNF9hZGRyc1tdID0geyAweDIxLCAweDIwLCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGFkdjcxN3hfYWRkcnNbXSA9IHsgMHg2YSwgMHg2YiwgMHgyYSwgMHgyYiwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBrczAxMjdfYWRkcnNbXSA9IHsgMHg2YywgMHg2ZCwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBzYWE3MTg1X2FkZHJzW10gPSB7IDB4NDQsIEkyQ19DTElFTlRfRU5EIH07CitzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgYnQ4MTlfYWRkcnNbXSA9IHsgMHg0NSwgSTJDX0NMSUVOVF9FTkQgfTsKK3N0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBidDg1Nl9hZGRyc1tdID0geyAweDQ0LCBJMkNfQ0xJRU5UX0VORCB9Oworc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IGJ0ODY2X2FkZHJzW10gPSB7IDB4NDQsIEkyQ19DTElFTlRfRU5EIH07CisKIHN0YXRpYyBzdHJ1Y3QgY2FyZF9pbmZvIHpvcmFuX2NhcmRzW05VTV9DQVJEU10gX19kZXZpbml0ZGF0YSA9IHsKIAl7CiAJCS50eXBlID0gREMxMF9vbGQsCiAJCS5uYW1lID0gIkRDMTAob2xkKSIsCi0JCS5pMmNfZGVjb2RlciA9IEkyQ19EUklWRVJJRF9WUFgzMjIwLAorCQkuaTJjX2RlY29kZXIgPSAidnB4MzIyMGEiLAorCQkubW9kX2RlY29kZXIgPSAidnB4MzIyMCIsCisJCS5hZGRyc19kZWNvZGVyID0gdnB4MzIyMF9hZGRycywKIAkJLnZpZGVvX2NvZGVjID0gQ09ERUNfVFlQRV9aUjM2MDUwLAogCQkudmlkZW9fdmZlID0gQ09ERUNfVFlQRV9aUjM2MDE2LAogCkBAIC00MzksNyArMzg5LDcgQEAKIAkJCXsgMiwgIlMtVmlkZW8iIH0sCiAJCQl7IDAsICJJbnRlcm5hbC9jb21wIiB9CiAJCX0sCi0JCS5ub3JtcyA9IDMsCisJCS5ub3JtcyA9IFY0TDJfU1REX05UU0N8VjRMMl9TVERfUEFMfFY0TDJfU1REX1NFQ0FNLAogCQkudHZuID0gewogCQkJJmY1MHNxcGl4ZWxfZGMxMCwKIAkJCSZmNjBzcXBpeGVsX2RjMTAsCkBAIC00NTcsOCArNDA3LDEyIEBACiAJfSwgewogCQkudHlwZSA9IERDMTBfbmV3LAogCQkubmFtZSA9ICJEQzEwKG5ldykiLAotCQkuaTJjX2RlY29kZXIgPSBJMkNfRFJJVkVSSURfU0FBNzExMCwKLQkJLmkyY19lbmNvZGVyID0gSTJDX0RSSVZFUklEX0FEVjcxNzUsCisJCS5pMmNfZGVjb2RlciA9ICJzYWE3MTEwIiwKKwkJLm1vZF9kZWNvZGVyID0gInNhYTcxMTAiLAorCQkuYWRkcnNfZGVjb2RlciA9IHNhYTcxMTBfYWRkcnMsCisJCS5pMmNfZW5jb2RlciA9ICJhZHY3MTc1IiwKKwkJLm1vZF9lbmNvZGVyID0gImFkdjcxNzUiLAorCQkuYWRkcnNfZW5jb2RlciA9IGFkdjcxN3hfYWRkcnMsCiAJCS52aWRlb19jb2RlYyA9IENPREVDX1RZUEVfWlIzNjA2MCwKIAogCQkuaW5wdXRzID0gMywKQEAgLTQ2Nyw3ICs0MjEsNyBAQAogCQkJCXsgNywgIlMtVmlkZW8iIH0sCiAJCQkJeyA1LCAiSW50ZXJuYWwvY29tcCIgfQogCQkJfSwKLQkJLm5vcm1zID0gMywKKwkJLm5vcm1zID0gVjRMMl9TVERfTlRTQ3xWNEwyX1NURF9QQUx8VjRMMl9TVERfU0VDQU0sCiAJCS50dm4gPSB7CiAJCQkJJmY1MHNxcGl4ZWwsCiAJCQkJJmY2MHNxcGl4ZWwsCkBAIC00ODQsOCArNDM4LDEyIEBACiAJfSwgewogCQkudHlwZSA9IERDMTBwbHVzLAogCQkubmFtZSA9ICJEQzEwcGx1cyIsCi0JCS5pMmNfZGVjb2RlciA9IEkyQ19EUklWRVJJRF9TQUE3MTEwLAotCQkuaTJjX2VuY29kZXIgPSBJMkNfRFJJVkVSSURfQURWNzE3NSwKKwkJLmkyY19kZWNvZGVyID0gInNhYTcxMTAiLAorCQkubW9kX2RlY29kZXIgPSAic2FhNzExMCIsCisJCS5hZGRyc19kZWNvZGVyID0gc2FhNzExMF9hZGRycywKKwkJLmkyY19lbmNvZGVyID0gImFkdjcxNzUiLAorCQkubW9kX2VuY29kZXIgPSAiYWR2NzE3NSIsCisJCS5hZGRyc19lbmNvZGVyID0gYWR2NzE3eF9hZGRycywKIAkJLnZpZGVvX2NvZGVjID0gQ09ERUNfVFlQRV9aUjM2MDYwLAogCiAJCS5pbnB1dHMgPSAzLApAQCAtNDk0LDcgKzQ1Miw3IEBACiAJCQl7IDcsICJTLVZpZGVvIiB9LAogCQkJeyA1LCAiSW50ZXJuYWwvY29tcCIgfQogCQl9LAotCQkubm9ybXMgPSAzLAorCQkubm9ybXMgPSBWNEwyX1NURF9OVFNDfFY0TDJfU1REX1BBTHxWNEwyX1NURF9TRUNBTSwKIAkJLnR2biA9IHsKIAkJCSZmNTBzcXBpeGVsLAogCQkJJmY2MHNxcGl4ZWwsCkBAIC01MTIsOCArNDcwLDEyIEBACiAJfSwgewogCQkudHlwZSA9IERDMzAsCiAJCS5uYW1lID0gIkRDMzAiLAotCQkuaTJjX2RlY29kZXIgPSBJMkNfRFJJVkVSSURfVlBYMzIyMCwKLQkJLmkyY19lbmNvZGVyID0gSTJDX0RSSVZFUklEX0FEVjcxNzUsCisJCS5pMmNfZGVjb2RlciA9ICJ2cHgzMjIwYSIsCisJCS5tb2RfZGVjb2RlciA9ICJ2cHgzMjIwIiwKKwkJLmFkZHJzX2RlY29kZXIgPSB2cHgzMjIwX2FkZHJzLAorCQkuaTJjX2VuY29kZXIgPSAiYWR2NzE3NSIsCisJCS5tb2RfZW5jb2RlciA9ICJhZHY3MTc1IiwKKwkJLmFkZHJzX2VuY29kZXIgPSBhZHY3MTd4X2FkZHJzLAogCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNTAsCiAJCS52aWRlb192ZmUgPSBDT0RFQ19UWVBFX1pSMzYwMTYsCiAKQEAgLTUyMyw3ICs0ODUsNyBAQAogCQkJeyAyLCAiUy1WaWRlbyIgfSwKIAkJCXsgMCwgIkludGVybmFsL2NvbXAiIH0KIAkJfSwKLQkJLm5vcm1zID0gMywKKwkJLm5vcm1zID0gVjRMMl9TVERfTlRTQ3xWNEwyX1NURF9QQUx8VjRMMl9TVERfU0VDQU0sCiAJCS50dm4gPSB7CiAJCQkmZjUwc3FwaXhlbF9kYzEwLAogCQkJJmY2MHNxcGl4ZWxfZGMxMCwKQEAgLTU0MSw4ICs1MDMsMTIgQEAKIAl9LCB7CiAJCS50eXBlID0gREMzMHBsdXMsCiAJCS5uYW1lID0gIkRDMzBwbHVzIiwKLQkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX1ZQWDMyMjAsCi0JCS5pMmNfZW5jb2RlciA9IEkyQ19EUklWRVJJRF9BRFY3MTc1LAorCQkuaTJjX2RlY29kZXIgPSAidnB4MzIyMGEiLAorCQkubW9kX2RlY29kZXIgPSAidnB4MzIyMCIsCisJCS5hZGRyc19kZWNvZGVyID0gdnB4MzIyMF9hZGRycywKKwkJLmkyY19lbmNvZGVyID0gImFkdjcxNzUiLAorCQkubW9kX2VuY29kZXIgPSAiYWR2NzE3NSIsCisJCS5hZGRyc19lbmNvZGVyID0gYWR2NzE3eF9hZGRycywKIAkJLnZpZGVvX2NvZGVjID0gQ09ERUNfVFlQRV9aUjM2MDUwLAogCQkudmlkZW9fdmZlID0gQ09ERUNfVFlQRV9aUjM2MDE2LAogCkBAIC01NTIsNyArNTE4LDcgQEAKIAkJCXsgMiwgIlMtVmlkZW8iIH0sCiAJCQl7IDAsICJJbnRlcm5hbC9jb21wIiB9CiAJCX0sCi0JCS5ub3JtcyA9IDMsCisJCS5ub3JtcyA9IFY0TDJfU1REX05UU0N8VjRMMl9TVERfUEFMfFY0TDJfU1REX1NFQ0FNLAogCQkudHZuID0gewogCQkJJmY1MHNxcGl4ZWxfZGMxMCwKIAkJCSZmNjBzcXBpeGVsX2RjMTAsCkBAIC01NzAsOCArNTM2LDEyIEBACiAJfSwgewogCQkudHlwZSA9IExNTDMzLAogCQkubmFtZSA9ICJMTUwzMyIsCi0JCS5pMmNfZGVjb2RlciA9IEkyQ19EUklWRVJJRF9CVDgxOSwKLQkJLmkyY19lbmNvZGVyID0gSTJDX0RSSVZFUklEX0JUODU2LAorCQkuaTJjX2RlY29kZXIgPSAiYnQ4MTlhIiwKKwkJLm1vZF9kZWNvZGVyID0gImJ0ODE5IiwKKwkJLmFkZHJzX2RlY29kZXIgPSBidDgxOV9hZGRycywKKwkJLmkyY19lbmNvZGVyID0gImJ0ODU2IiwKKwkJLm1vZF9lbmNvZGVyID0gImJ0ODU2IiwKKwkJLmFkZHJzX2VuY29kZXIgPSBidDg1Nl9hZGRycywKIAkJLnZpZGVvX2NvZGVjID0gQ09ERUNfVFlQRV9aUjM2MDYwLAogCiAJCS5pbnB1dHMgPSAyLApAQCAtNTc5LDcgKzU0OSw3IEBACiAJCQl7IDAsICJDb21wb3NpdGUiIH0sCiAJCQl7IDcsICJTLVZpZGVvIiB9CiAJCX0sCi0JCS5ub3JtcyA9IDIsCisJCS5ub3JtcyA9IFY0TDJfU1REX05UU0N8VjRMMl9TVERfUEFMLAogCQkudHZuID0gewogCQkJJmY1MGNjaXI2MDFfbG1sMzMsCiAJCQkmZjYwY2NpcjYwMV9sbWwzMywKQEAgLTU5Nyw4ICs1NjcsMTIgQEAKIAl9LCB7CiAJCS50eXBlID0gTE1MMzNSMTAsCiAJCS5uYW1lID0gIkxNTDMzUjEwIiwKLQkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX1NBQTcxMTQsCi0JCS5pMmNfZW5jb2RlciA9IEkyQ19EUklWRVJJRF9BRFY3MTcwLAorCQkuaTJjX2RlY29kZXIgPSAic2FhNzExNCIsCisJCS5tb2RfZGVjb2RlciA9ICJzYWE3MTE1IiwKKwkJLmFkZHJzX2RlY29kZXIgPSBzYWE3MTE0X2FkZHJzLAorCQkuaTJjX2VuY29kZXIgPSAiYWR2NzE3MCIsCisJCS5tb2RfZW5jb2RlciA9ICJhZHY3MTcwIiwKKwkJLmFkZHJzX2VuY29kZXIgPSBhZHY3MTd4X2FkZHJzLAogCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNjAsCiAKIAkJLmlucHV0cyA9IDIsCkBAIC02MDYsNyArNTgwLDcgQEAKIAkJCXsgMCwgIkNvbXBvc2l0ZSIgfSwKIAkJCXsgNywgIlMtVmlkZW8iIH0KIAkJfSwKLQkJLm5vcm1zID0gMiwKKwkJLm5vcm1zID0gVjRMMl9TVERfTlRTQ3xWNEwyX1NURF9QQUwsCiAJCS50dm4gPSB7CiAJCQkmZjUwY2NpcjYwMV9sbTMzcjEwLAogCQkJJmY2MGNjaXI2MDFfbG0zM3IxMCwKQEAgLTYyNCw4ICs1OTgsMTIgQEAKIAl9LCB7CiAJCS50eXBlID0gQlVaLAogCQkubmFtZSA9ICJCdXoiLAotCQkuaTJjX2RlY29kZXIgPSBJMkNfRFJJVkVSSURfU0FBNzExMUEsCi0JCS5pMmNfZW5jb2RlciA9IEkyQ19EUklWRVJJRF9TQUE3MTg1QiwKKwkJLmkyY19kZWNvZGVyID0gInNhYTcxMTEiLAorCQkubW9kX2RlY29kZXIgPSAic2FhNzExNSIsCisJCS5hZGRyc19kZWNvZGVyID0gc2FhNzExMV9hZGRycywKKwkJLmkyY19lbmNvZGVyID0gInNhYTcxODUiLAorCQkubW9kX2VuY29kZXIgPSAic2FhNzE4NSIsCisJCS5hZGRyc19lbmNvZGVyID0gc2FhNzE4NV9hZGRycywKIAkJLnZpZGVvX2NvZGVjID0gQ09ERUNfVFlQRV9aUjM2MDYwLAogCiAJCS5pbnB1dHMgPSAyLApAQCAtNjMzLDcgKzYxMSw3IEBACiAJCQl7IDMsICJDb21wb3NpdGUiIH0sCiAJCQl7IDcsICJTLVZpZGVvIiB9CiAJCX0sCi0JCS5ub3JtcyA9IDMsCisJCS5ub3JtcyA9IFY0TDJfU1REX05UU0N8VjRMMl9TVERfUEFMfFY0TDJfU1REX1NFQ0FNLAogCQkudHZuID0gewogCQkJJmY1MGNjaXI2MDEsCiAJCQkmZjYwY2NpcjYwMSwKQEAgLTY1Myw4ICs2MzEsMTIgQEAKIAkJLm5hbWUgPSAiNi1FeWVzIiwKIAkJLyogQXZlck1lZGlhIGNob3NlIG5vdCB0byBicmFuZCB0aGUgNi1FeWVzLiBUaHVzIGl0CiAJCSAgIGNhbid0IGJlIGF1dG9kZXRlY3RlZCwgYW5kIHJlcXVpcmVzIGNhcmQ9eC4gKi8KLQkJLmkyY19kZWNvZGVyID0gSTJDX0RSSVZFUklEX0tTMDEyNywKLQkJLmkyY19lbmNvZGVyID0gSTJDX0RSSVZFUklEX0JUODY2LAorCQkuaTJjX2RlY29kZXIgPSAia3MwMTI3IiwKKwkJLm1vZF9kZWNvZGVyID0gImtzMDEyNyIsCisJCS5hZGRyc19kZWNvZGVyID0ga3MwMTI3X2FkZHJzLAorCQkuaTJjX2VuY29kZXIgPSAiYnQ4NjYiLAorCQkubW9kX2VuY29kZXIgPSAiYnQ4NjYiLAorCQkuYWRkcnNfZW5jb2RlciA9IGJ0ODY2X2FkZHJzLAogCQkudmlkZW9fY29kZWMgPSBDT0RFQ19UWVBFX1pSMzYwNjAsCiAKIAkJLmlucHV0cyA9IDEwLApAQCAtNjcwLDcgKzY1Miw3IEBACiAJCQl7MTAsICJTLVZpZGVvIDMiIH0sCiAJCQl7MTUsICJZQ2JDciIgfQogCQl9LAotCQkubm9ybXMgPSAyLAorCQkubm9ybXMgPSBWNEwyX1NURF9OVFNDfFY0TDJfU1REX1BBTCwKIAkJLnR2biA9IHsKIAkJCSZmNTBjY2lyNjAxX2F2czZleWVzLAogCQkJJmY2MGNjaXI2MDFfYXZzNmV5ZXMsCkBAIC03MzUsNjkgKzcxNyw2IEBACiAJYnR3cml0ZSh6ci0+aTJjYnIsIFpSMzYwNTdfSTJDQlIpOwogfQogCi1zdGF0aWMgaW50Ci16b3Jhbl9pMmNfY2xpZW50X3JlZ2lzdGVyIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCB6b3JhbiAqenIgPSAoc3RydWN0IHpvcmFuICopIGkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKLQlpbnQgcmVzID0gMDsKLQotCWRwcmludGsoMiwKLQkJS0VSTl9ERUJVRyAiJXM6IGkyY19jbGllbnRfcmVnaXN0ZXIoKSAtIGRyaXZlciBpZCA9ICVkXG4iLAotCQlaUl9ERVZOQU1FKHpyKSwgY2xpZW50LT5kcml2ZXItPmlkKTsKLQotCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCWlmICh6ci0+dXNlciA+IDApIHsKLQkJLyogd2UncmUgYWxyZWFkeSBidXN5LCBzbyB3ZSBrZWVwIGEgcmVmZXJlbmNlIHRvCi0JCSAqIHRoZW0uLi4gQ291bGQgZG8gYSBsb3Qgb2Ygc3R1ZmYgaGVyZSwgYnV0IHRoaXMKLQkJICogaXMgZWFzaWVzdC4gKERpZCBJIGV2ZXIgbWVudGlvbiBJJ20gYSBsYXp5IGFzcz8pCi0JCSAqLwotCQlyZXMgPSAtRUJVU1k7Ci0JCWdvdG8gY2xpZW50cmVnX3VubG9ja19hbmRfcmV0dXJuOwotCX0KLQotCWlmIChjbGllbnQtPmRyaXZlci0+aWQgPT0genItPmNhcmQuaTJjX2RlY29kZXIpCi0JCXpyLT5kZWNvZGVyID0gY2xpZW50OwotCWVsc2UgaWYgKGNsaWVudC0+ZHJpdmVyLT5pZCA9PSB6ci0+Y2FyZC5pMmNfZW5jb2RlcikKLQkJenItPmVuY29kZXIgPSBjbGllbnQ7Ci0JZWxzZSB7Ci0JCXJlcyA9IC1FTk9ERVY7Ci0JCWdvdG8gY2xpZW50cmVnX3VubG9ja19hbmRfcmV0dXJuOwotCX0KLQotY2xpZW50cmVnX3VubG9ja19hbmRfcmV0dXJuOgotCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JcmV0dXJuIHJlczsKLX0KLQotc3RhdGljIGludAotem9yYW5faTJjX2NsaWVudF91bnJlZ2lzdGVyIChzdHJ1Y3QgaTJjX2NsaWVudCAqY2xpZW50KQotewotCXN0cnVjdCB6b3JhbiAqenIgPSAoc3RydWN0IHpvcmFuICopIGkyY19nZXRfYWRhcGRhdGEoY2xpZW50LT5hZGFwdGVyKTsKLQlpbnQgcmVzID0gMDsKLQotCWRwcmludGsoMiwgS0VSTl9ERUJVRyAiJXM6IGkyY19jbGllbnRfdW5yZWdpc3RlcigpXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQlpZiAoenItPnVzZXIgPiAwKSB7Ci0JCXJlcyA9IC1FQlVTWTsKLQkJZ290byBjbGllbnR1bnJlZ191bmxvY2tfYW5kX3JldHVybjsKLQl9Ci0KLQkvKiB0cnkgdG8gbG9jYXRlIGl0ICovCi0JaWYgKGNsaWVudCA9PSB6ci0+ZW5jb2RlcikgewotCQl6ci0+ZW5jb2RlciA9IE5VTEw7Ci0JfSBlbHNlIGlmIChjbGllbnQgPT0genItPmRlY29kZXIpIHsKLQkJenItPmRlY29kZXIgPSBOVUxMOwotCQlzbnByaW50ZihaUl9ERVZOQU1FKHpyKSwgc2l6ZW9mKFpSX0RFVk5BTUUoenIpKSwgIk1KUEVHWyVkXSIsIHpyLT5pZCk7Ci0JfQotY2xpZW50dW5yZWdfdW5sb2NrX2FuZF9yZXR1cm46Ci0JbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JcmV0dXJuIHJlczsKLX0KLQogc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfYWxnb19iaXRfZGF0YSB6b3Jhbl9pMmNfYml0X2RhdGFfdGVtcGxhdGUgPSB7CiAJLnNldHNkYSA9IHpvcmFuX2kyY19zZXRzZGEsCiAJLnNldHNjbCA9IHpvcmFuX2kyY19zZXRzY2wsCkBAIC04MTMsMTMgKzczMiwxMCBAQAogCW1lbWNweSgmenItPmkyY19hbGdvLCAmem9yYW5faTJjX2JpdF9kYXRhX3RlbXBsYXRlLAogCSAgICAgICBzaXplb2Yoc3RydWN0IGkyY19hbGdvX2JpdF9kYXRhKSk7CiAJenItPmkyY19hbGdvLmRhdGEgPSB6cjsKLQl6ci0+aTJjX2FkYXB0ZXIuY2xhc3MgPSBJMkNfQ0xBU1NfVFZfQU5BTE9HOwogCXpyLT5pMmNfYWRhcHRlci5pZCA9IEkyQ19IV19CX1pSMzYwNjc7Ci0JenItPmkyY19hZGFwdGVyLmNsaWVudF9yZWdpc3RlciA9IHpvcmFuX2kyY19jbGllbnRfcmVnaXN0ZXI7Ci0JenItPmkyY19hZGFwdGVyLmNsaWVudF91bnJlZ2lzdGVyID0gem9yYW5faTJjX2NsaWVudF91bnJlZ2lzdGVyOwogCXN0cmxjcHkoenItPmkyY19hZGFwdGVyLm5hbWUsIFpSX0RFVk5BTUUoenIpLAogCQlzaXplb2YoenItPmkyY19hZGFwdGVyLm5hbWUpKTsKLQlpMmNfc2V0X2FkYXBkYXRhKCZ6ci0+aTJjX2FkYXB0ZXIsIHpyKTsKKwlpMmNfc2V0X2FkYXBkYXRhKCZ6ci0+aTJjX2FkYXB0ZXIsICZ6ci0+djRsMl9kZXYpOwogCXpyLT5pMmNfYWRhcHRlci5hbGdvX2RhdGEgPSAmenItPmkyY19hbGdvOwogCXpyLT5pMmNfYWRhcHRlci5kZXYucGFyZW50ID0gJnpyLT5wY2lfZGV2LT5kZXY7CiAJcmV0dXJuIGkyY19iaXRfYWRkX2J1cygmenItPmkyY19hZGFwdGVyKTsKQEAgLTgzNSwxOSArNzUxLDIwIEBACiAKIGludAogem9yYW5fY2hlY2tfanBnX3NldHRpbmdzIChzdHJ1Y3Qgem9yYW4gICAgICAgICAgICAgICp6ciwKLQkJCSAgc3RydWN0IHpvcmFuX2pwZ19zZXR0aW5ncyAqc2V0dGluZ3MpCisJCQkgIHN0cnVjdCB6b3Jhbl9qcGdfc2V0dGluZ3MgKnNldHRpbmdzLAorCQkJICBpbnQgdHJ5KQogewogCWludCBlcnIgPSAwLCBlcnIwID0gMDsKIAogCWRwcmludGsoNCwKIAkJS0VSTl9ERUJVRwotCQkiJXM6IGNoZWNrX2pwZ19zZXR0aW5ncygpIC0gZGVjOiAlZCwgSGRjbTogJWQsIFZkY206ICVkLCBUZGNtOiAlZFxuIiwKLQkJWlJfREVWTkFNRSh6ciksIHNldHRpbmdzLT5kZWNpbWF0aW9uLCBzZXR0aW5ncy0+SG9yRGNtLAorCQkiJXM6ICVzIC0gZGVjOiAlZCwgSGRjbTogJWQsIFZkY206ICVkLCBUZGNtOiAlZFxuIiwKKwkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBzZXR0aW5ncy0+ZGVjaW1hdGlvbiwgc2V0dGluZ3MtPkhvckRjbSwKIAkJc2V0dGluZ3MtPlZlckRjbSwgc2V0dGluZ3MtPlRtcERjbSk7CiAJZHByaW50ayg0LAogCQlLRVJOX0RFQlVHCi0JCSIlczogY2hlY2tfanBnX3NldHRpbmdzKCkgLSB4OiAlZCwgeTogJWQsIHc6ICVkLCB5OiAlZFxuIiwKLQkJWlJfREVWTkFNRSh6ciksIHNldHRpbmdzLT5pbWdfeCwgc2V0dGluZ3MtPmltZ195LAorCQkiJXM6ICVzIC0geDogJWQsIHk6ICVkLCB3OiAlZCwgeTogJWRcbiIsCisJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgc2V0dGluZ3MtPmltZ194LCBzZXR0aW5ncy0+aW1nX3ksCiAJCXNldHRpbmdzLT5pbWdfd2lkdGgsIHNldHRpbmdzLT5pbWdfaGVpZ2h0KTsKIAkvKiBDaGVjayBkZWNpbWF0aW9uLCBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGRlY2ltYXRpb24gPSAxLCAyLCA0ICovCiAJc3dpdGNoIChzZXR0aW5ncy0+ZGVjaW1hdGlvbikgewpAQCAtODc5LDggKzc5Niw4IEBACiAJCWlmICh6ci0+Y2FyZC50eXBlID09IERDMTBfbmV3KSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9ERUJVRwotCQkJCSIlczogY2hlY2tfanBnX3NldHRpbmdzKCkgLSBIRGVjIGJ5IDQgaXMgbm90IHN1cHBvcnRlZCBvbiB0aGUgREMxMFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkJIiVzOiAlcyAtIEhEZWMgYnkgNCBpcyBub3Qgc3VwcG9ydGVkIG9uIHRoZSBEQzEwXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQllcnIwKys7CiAJCQlicmVhazsKIAkJfQpAQCAtOTAwLDUwICs4MTcsNzMgQEAKIAkJLyogV2UgaGF2ZSB0byBjaGVjayB0aGUgZGF0YSB0aGUgdXNlciBoYXMgc2V0ICovCiAKIAkJaWYgKHNldHRpbmdzLT5Ib3JEY20gIT0gMSAmJiBzZXR0aW5ncy0+SG9yRGNtICE9IDIgJiYKLQkJICAgICh6ci0+Y2FyZC50eXBlID09IERDMTBfbmV3IHx8IHNldHRpbmdzLT5Ib3JEY20gIT0gNCkpCisJCSAgICAoenItPmNhcmQudHlwZSA9PSBEQzEwX25ldyB8fCBzZXR0aW5ncy0+SG9yRGNtICE9IDQpKSB7CisJCQlzZXR0aW5ncy0+SG9yRGNtID0gY2xhbXAoc2V0dGluZ3MtPkhvckRjbSwgMSwgMik7CiAJCQllcnIwKys7Ci0JCWlmIChzZXR0aW5ncy0+VmVyRGNtICE9IDEgJiYgc2V0dGluZ3MtPlZlckRjbSAhPSAyKQorCQl9CisJCWlmIChzZXR0aW5ncy0+VmVyRGNtICE9IDEgJiYgc2V0dGluZ3MtPlZlckRjbSAhPSAyKSB7CisJCQlzZXR0aW5ncy0+VmVyRGNtID0gY2xhbXAoc2V0dGluZ3MtPlZlckRjbSwgMSwgMik7CiAJCQllcnIwKys7Ci0JCWlmIChzZXR0aW5ncy0+VG1wRGNtICE9IDEgJiYgc2V0dGluZ3MtPlRtcERjbSAhPSAyKQorCQl9CisJCWlmIChzZXR0aW5ncy0+VG1wRGNtICE9IDEgJiYgc2V0dGluZ3MtPlRtcERjbSAhPSAyKSB7CisJCQlzZXR0aW5ncy0+VG1wRGNtID0gY2xhbXAoc2V0dGluZ3MtPlRtcERjbSwgMSwgMik7CiAJCQllcnIwKys7CisJCX0KIAkJaWYgKHNldHRpbmdzLT5maWVsZF9wZXJfYnVmZiAhPSAxICYmCi0JCSAgICBzZXR0aW5ncy0+ZmllbGRfcGVyX2J1ZmYgIT0gMikKKwkJICAgIHNldHRpbmdzLT5maWVsZF9wZXJfYnVmZiAhPSAyKSB7CisJCQlzZXR0aW5ncy0+ZmllbGRfcGVyX2J1ZmYgPSBjbGFtcChzZXR0aW5ncy0+ZmllbGRfcGVyX2J1ZmYsIDEsIDIpOwogCQkJZXJyMCsrOwotCQlpZiAoc2V0dGluZ3MtPmltZ194IDwgMCkKKwkJfQorCQlpZiAoc2V0dGluZ3MtPmltZ194IDwgMCkgeworCQkJc2V0dGluZ3MtPmltZ194ID0gMDsKIAkJCWVycjArKzsKLQkJaWYgKHNldHRpbmdzLT5pbWdfeSA8IDApCisJCX0KKwkJaWYgKHNldHRpbmdzLT5pbWdfeSA8IDApIHsKKwkJCXNldHRpbmdzLT5pbWdfeSA9IDA7CiAJCQllcnIwKys7Ci0JCWlmIChzZXR0aW5ncy0+aW1nX3dpZHRoIDwgMCkKKwkJfQorCQlpZiAoc2V0dGluZ3MtPmltZ193aWR0aCA8IDAgfHwgc2V0dGluZ3MtPmltZ193aWR0aCA+IEJVWl9NQVhfV0lEVEgpIHsKKwkJCXNldHRpbmdzLT5pbWdfd2lkdGggPSBjbGFtcChzZXR0aW5ncy0+aW1nX3dpZHRoLCAwLCAoaW50KUJVWl9NQVhfV0lEVEgpOwogCQkJZXJyMCsrOwotCQlpZiAoc2V0dGluZ3MtPmltZ19oZWlnaHQgPCAwKQorCQl9CisJCWlmIChzZXR0aW5ncy0+aW1nX2hlaWdodCA8IDAgfHwgc2V0dGluZ3MtPmltZ19oZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCAvIDIpIHsKKwkJCXNldHRpbmdzLT5pbWdfaGVpZ2h0ID0gY2xhbXAoc2V0dGluZ3MtPmltZ19oZWlnaHQsIDAsIEJVWl9NQVhfSEVJR0hUIC8gMik7CiAJCQllcnIwKys7Ci0JCWlmIChzZXR0aW5ncy0+aW1nX3ggKyBzZXR0aW5ncy0+aW1nX3dpZHRoID4gQlVaX01BWF9XSURUSCkKKwkJfQorCQlpZiAoc2V0dGluZ3MtPmltZ194ICsgc2V0dGluZ3MtPmltZ193aWR0aCA+IEJVWl9NQVhfV0lEVEgpIHsKKwkJCXNldHRpbmdzLT5pbWdfeCA9IEJVWl9NQVhfV0lEVEggLSBzZXR0aW5ncy0+aW1nX3dpZHRoOwogCQkJZXJyMCsrOwotCQlpZiAoc2V0dGluZ3MtPmltZ195ICsgc2V0dGluZ3MtPmltZ19oZWlnaHQgPgotCQkgICAgQlVaX01BWF9IRUlHSFQgLyAyKQorCQl9CisJCWlmIChzZXR0aW5ncy0+aW1nX3kgKyBzZXR0aW5ncy0+aW1nX2hlaWdodCA+IEJVWl9NQVhfSEVJR0hUIC8gMikgeworCQkJc2V0dGluZ3MtPmltZ195ID0gQlVaX01BWF9IRUlHSFQgLyAyIC0gc2V0dGluZ3MtPmltZ19oZWlnaHQ7CiAJCQllcnIwKys7Ci0JCWlmIChzZXR0aW5ncy0+SG9yRGNtICYmIHNldHRpbmdzLT5WZXJEY20pIHsKLQkJCWlmIChzZXR0aW5ncy0+aW1nX3dpZHRoICUKLQkJCSAgICAoMTYgKiBzZXR0aW5ncy0+SG9yRGNtKSAhPSAwKQotCQkJCWVycjArKzsKLQkJCWlmIChzZXR0aW5ncy0+aW1nX2hlaWdodCAlCi0JCQkgICAgKDggKiBzZXR0aW5ncy0+VmVyRGNtKSAhPSAwKQotCQkJCWVycjArKzsKKwkJfQorCQlpZiAoc2V0dGluZ3MtPmltZ193aWR0aCAlICgxNiAqIHNldHRpbmdzLT5Ib3JEY20pICE9IDApIHsKKwkJCXNldHRpbmdzLT5pbWdfd2lkdGggLT0gc2V0dGluZ3MtPmltZ193aWR0aCAlICgxNiAqIHNldHRpbmdzLT5Ib3JEY20pOworCQkJaWYgKHNldHRpbmdzLT5pbWdfd2lkdGggPT0gMCkKKwkJCQlzZXR0aW5ncy0+aW1nX3dpZHRoID0gMTYgKiBzZXR0aW5ncy0+SG9yRGNtOworCQkJZXJyMCsrOworCQl9CisJCWlmIChzZXR0aW5ncy0+aW1nX2hlaWdodCAlICg4ICogc2V0dGluZ3MtPlZlckRjbSkgIT0gMCkgeworCQkJc2V0dGluZ3MtPmltZ19oZWlnaHQgLT0gc2V0dGluZ3MtPmltZ19oZWlnaHQgJSAoOCAqIHNldHRpbmdzLT5WZXJEY20pOworCQkJaWYgKHNldHRpbmdzLT5pbWdfaGVpZ2h0ID09IDApCisJCQkJc2V0dGluZ3MtPmltZ19oZWlnaHQgPSA4ICogc2V0dGluZ3MtPlZlckRjbTsKKwkJCWVycjArKzsKIAkJfQogCi0JCWlmIChlcnIwKSB7CisJCWlmICghdHJ5ICYmIGVycjApIHsKIAkJCWRwcmludGsoMSwKIAkJCQlLRVJOX0VSUgotCQkJCSIlczogY2hlY2tfanBnX3NldHRpbmdzKCkgLSBlcnJvciBpbiBwYXJhbXMgZm9yIGRlY2ltYXRpb24gPSAwXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQkiJXM6ICVzIC0gZXJyb3IgaW4gcGFyYW1zIGZvciBkZWNpbWF0aW9uID0gMFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQkJZXJyKys7CiAJCX0KIAkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogY2hlY2tfanBnX3NldHRpbmdzKCkgLSBkZWNpbWF0aW9uID0gJWQsIG11c3QgYmUgMCwgMSwgMiBvciA0XG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHNldHRpbmdzLT5kZWNpbWF0aW9uKTsKKwkJCSIlczogJXMgLSBkZWNpbWF0aW9uID0gJWQsIG11c3QgYmUgMCwgMSwgMiBvciA0XG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBzZXR0aW5ncy0+ZGVjaW1hdGlvbik7CiAJCWVycisrOwogCQlicmVhazsKIAl9CkBAIC0xMDIxLDEyICs5NjEsMTAgQEAKIAkgICAgICAgc2l6ZW9mKHpyLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQ09NX2RhdGEpKTsKIAl6ci0+anBnX3NldHRpbmdzLmpwZ19jb21wLmpwZWdfbWFya2VycyA9CiAJICAgIEpQRUdfTUFSS0VSX0RIVCB8IEpQRUdfTUFSS0VSX0RRVDsKLQlpID0gem9yYW5fY2hlY2tfanBnX3NldHRpbmdzKHpyLCAmenItPmpwZ19zZXR0aW5ncyk7CisJaSA9IHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyh6ciwgJnpyLT5qcGdfc2V0dGluZ3MsIDApOwogCWlmIChpKQotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiB6b3Jhbl9vcGVuX2luaXRfcGFyYW1zKCkgaW50ZXJuYWwgZXJyb3JcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiAlcyBpbnRlcm5hbCBlcnJvclxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAKIAljbGVhcl9pbnRlcnJ1cHRfY291bnRlcnMoenIpOwogCXpyLT50ZXN0aW5nID0gMDsKQEAgLTEwNjIsMTMgKzEwMDAsMTEgQEAKIHpyMzYwNTdfaW5pdCAoc3RydWN0IHpvcmFuICp6cikKIHsKIAlpbnQgaiwgZXJyOwotCWludCB0d28gPSAyOwotCWludCB6ZXJvID0gMDsKIAogCWRwcmludGsoMSwKIAkJS0VSTl9JTkZPCi0JCSIlczogenIzNjA1N19pbml0KCkgLSBpbml0aWFsaXppbmcgY2FyZFslZF0sIHpyPSVwXG4iLAotCQlaUl9ERVZOQU1FKHpyKSwgenItPmlkLCB6cik7CisJCSIlczogJXMgLSBpbml0aWFsaXppbmcgY2FyZFslZF0sIHpyPSVwXG4iLAorCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIHpyLT5pZCwgenIpOwogCiAJLyogZGVmYXVsdCBzZXR1cCBvZiBhbGwgcGFyYW1ldGVycyB3aGljaCB3aWxsIHBlcnNpc3QgYmV0d2VlbiBvcGVucyAqLwogCXpyLT51c2VyID0gMDsKQEAgLTEwNzksMjQgKzEwMTUsMzIgQEAKIAl6ci0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKIAl6ci0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKIAotCXpyLT5idWZmZXIuYmFzZSA9ICh2b2lkICopIHZpZG1lbTsKLQl6ci0+YnVmZmVyLndpZHRoID0gMDsKLQl6ci0+YnVmZmVyLmhlaWdodCA9IDA7Ci0JenItPmJ1ZmZlci5kZXB0aCA9IDA7Ci0JenItPmJ1ZmZlci5ieXRlc3BlcmxpbmUgPSAwOworCXpyLT52YnVmX2Jhc2UgPSAodm9pZCAqKSB2aWRtZW07CisJenItPnZidWZfd2lkdGggPSAwOworCXpyLT52YnVmX2hlaWdodCA9IDA7CisJenItPnZidWZfZGVwdGggPSAwOworCXpyLT52YnVmX2J5dGVzcGVybGluZSA9IDA7CiAKIAkvKiBBdm9pZCBub25zZW5zZSBzZXR0aW5ncyBmcm9tIHVzZXIgZm9yIGRlZmF1bHQgaW5wdXQvbm9ybSAqLwotCWlmIChkZWZhdWx0X25vcm0gPCBWSURFT19NT0RFX1BBTCAmJgotCSAgICBkZWZhdWx0X25vcm0gPiBWSURFT19NT0RFX1NFQ0FNKQotCQlkZWZhdWx0X25vcm0gPSBWSURFT19NT0RFX1BBTDsKLQl6ci0+bm9ybSA9IGRlZmF1bHRfbm9ybTsKLQlpZiAoISh6ci0+dGltaW5nID0genItPmNhcmQudHZuW3pyLT5ub3JtXSkpIHsKKwlpZiAoZGVmYXVsdF9ub3JtIDwgMCAmJiBkZWZhdWx0X25vcm0gPiAyKQorCQlkZWZhdWx0X25vcm0gPSAwOworCWlmIChkZWZhdWx0X25vcm0gPT0gMCkgeworCQl6ci0+bm9ybSA9IFY0TDJfU1REX1BBTDsKKwkJenItPnRpbWluZyA9IHpyLT5jYXJkLnR2blswXTsKKwl9IGVsc2UgaWYgKGRlZmF1bHRfbm9ybSA9PSAxKSB7CisJCXpyLT5ub3JtID0gVjRMMl9TVERfTlRTQzsKKwkJenItPnRpbWluZyA9IHpyLT5jYXJkLnR2blsxXTsKKwl9IGVsc2UgeworCQl6ci0+bm9ybSA9IFY0TDJfU1REX1NFQ0FNOworCQl6ci0+dGltaW5nID0genItPmNhcmQudHZuWzJdOworCX0KKwlpZiAoenItPnRpbWluZyA9PSBOVUxMKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fV0FSTklORwotCQkJIiVzOiB6cjM2MDU3X2luaXQoKSAtIGRlZmF1bHQgVFYgc3RhbmRhcmQgbm90IHN1cHBvcnRlZCBieSBoYXJkd2FyZS4gUEFMIHdpbGwgYmUgdXNlZC5cbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXpyLT5ub3JtID0gVklERU9fTU9ERV9QQUw7Ci0JCXpyLT50aW1pbmcgPSB6ci0+Y2FyZC50dm5benItPm5vcm1dOworCQkJIiVzOiAlcyAtIGRlZmF1bHQgVFYgc3RhbmRhcmQgbm90IHN1cHBvcnRlZCBieSBoYXJkd2FyZS4gUEFMIHdpbGwgYmUgdXNlZC5cbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOworCQl6ci0+bm9ybSA9IFY0TDJfU1REX1BBTDsKKwkJenItPnRpbWluZyA9IHpyLT5jYXJkLnR2blswXTsKIAl9CiAKIAlpZiAoZGVmYXVsdF9pbnB1dCA+IHpyLT5jYXJkLmlucHV0cy0xKSB7CkBAIC0xMTA4LDEyICsxMDUyLDYgQEAKIAl9CiAJenItPmlucHV0ID0gZGVmYXVsdF9pbnB1dDsKIAotCS8qIFNob3VsZCB0aGUgZm9sbG93aW5nIGJlIHJlc2V0IGF0IGV2ZXJ5IG9wZW4gPyAqLwotCXpyLT5odWUgPSAzMjc2ODsKLQl6ci0+Y29udHJhc3QgPSAzMjc2ODsKLQl6ci0+c2F0dXJhdGlvbiA9IDMyNzY4OwotCXpyLT5icmlnaHRuZXNzID0gMzI3Njg7Ci0KIAkvKiBkZWZhdWx0IHNldHVwICh3aWxsIGJlIHJlcGVhdGVkIGF0IGV2ZXJ5IG9wZW4pICovCiAJem9yYW5fb3Blbl9pbml0X3BhcmFtcyh6cik7CiAKQEAgLTExMjQsOCArMTA2Miw4IEBACiAJaWYgKCF6ci0+c3RhdF9jb20gfHwgIXpyLT52aWRlb19kZXYpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogenIzNjA1N19pbml0KCkgLSBrbWFsbG9jIChTVEFUX0NPTSkgZmFpbGVkXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJIiVzOiAlcyAtIGttYWxsb2MgKFNUQVRfQ09NKSBmYWlsZWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQllcnIgPSAtRU5PTUVNOwogCQlnb3RvIGV4aXRfZnJlZTsKIAl9CkBAIC0xMTM3LDYgKzEwNzUsNyBAQAogCSAqICAgTm93IGFkZCB0aGUgdGVtcGxhdGUgYW5kIHJlZ2lzdGVyIHRoZSBkZXZpY2UgdW5pdC4KIAkgKi8KIAltZW1jcHkoenItPnZpZGVvX2RldiwgJnpvcmFuX3RlbXBsYXRlLCBzaXplb2Yoem9yYW5fdGVtcGxhdGUpKTsKKwl6ci0+dmlkZW9fZGV2LT5wYXJlbnQgPSAmenItPnBjaV9kZXYtPmRldjsKIAlzdHJjcHkoenItPnZpZGVvX2Rldi0+bmFtZSwgWlJfREVWTkFNRSh6cikpOwogCWVyciA9IHZpZGVvX3JlZ2lzdGVyX2RldmljZSh6ci0+dmlkZW9fZGV2LCBWRkxfVFlQRV9HUkFCQkVSLCB2aWRlb19uclt6ci0+aWRdKTsKIAlpZiAoZXJyIDwgMCkKQEAgLTExNDgsOCArMTA4NywxMCBAQAogCQlkZXRlY3RfZ3Vlc3RfYWN0aXZpdHkoenIpOwogCXRlc3RfaW50ZXJydXB0cyh6cik7CiAJaWYgKCFwYXNzX3Rocm91Z2gpIHsKLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0VOQUJMRV9PVVRQVVQsICZ6ZXJvKTsKLQkJZW5jb2Rlcl9jb21tYW5kKHpyLCBFTkNPREVSX1NFVF9JTlBVVCwgJnR3byk7CisJCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGUgPSB7IDIsIDAgfTsKKworCQlkZWNvZGVyX2NhbGwoenIsIHZpZGVvLCBzX3N0cmVhbSwgMCk7CisJCWVuY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAl9CiAKIAl6ci0+em9yYW5fcHJvYyA9IE5VTEw7CkBAIC0xMTY0LDcgKzExMDUsOCBAQAogCiBzdGF0aWMgdm9pZCBfX2RldmV4aXQgem9yYW5fcmVtb3ZlKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogewotCXN0cnVjdCB6b3JhbiAqenIgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiA9IGRldl9nZXRfZHJ2ZGF0YSgmcGRldi0+ZGV2KTsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gdG9fem9yYW4odjRsMl9kZXYpOwogCiAJaWYgKCF6ci0+aW5pdGlhbGl6ZWQpCiAJCWdvdG8gZXhpdF9mcmVlOwpAQCAtMTE5Nyw3ICsxMTM5LDcgQEAKIAlwY2lfZGlzYWJsZV9kZXZpY2UoenItPnBjaV9kZXYpOwogCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKHpyLT52aWRlb19kZXYpOwogZXhpdF9mcmVlOgotCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBOVUxMKTsKKwl2NGwyX2RldmljZV91bnJlZ2lzdGVyKCZ6ci0+djRsMl9kZXYpOwogCWtmcmVlKHpyKTsKIH0KIApAQCAtMTIxNSwxMCArMTE1Nyw4IEBACiAKIAltID0ga21hbGxvYyhzaXplb2Yoc3RydWN0IHZpZGVvY29kZWNfbWFzdGVyKSwgR0ZQX0tFUk5FTCk7CiAJaWYgKCFtKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IHpvcmFuX3NldHVwX3ZpZGVvY29kZWMoKSAtIG5vIG1lbW9yeVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJZHByaW50aygxLCBLRVJOX0VSUiAiJXM6ICVzIC0gbm8gbWVtb3J5XG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJcmV0dXJuIG07CiAJfQogCkBAIC0xMjU2LDYgKzExOTYsMTggQEAKIAlyZXR1cm4gbTsKIH0KIAorc3RhdGljIHZvaWQgem9yYW5fc3ViZGV2X25vdGlmeShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpCit7CisJc3RydWN0IHpvcmFuICp6ciA9IHRvX3pvcmFuKHNkLT52NGwyX2Rldik7CisKKwkvKiBCdDgxOSBuZWVkcyB0byByZXNldCBpdHMgRklGTyBidWZmZXIgdXNpbmcgI0ZSU1QgcGluIGFuZAorCSAgIExNTDMzIGNhcmQgdXNlcyBHUElPKDcpIGZvciB0aGF0LiAqLworCWlmIChjbWQgPT0gQlQ4MTlfRklGT19SRVNFVF9MT1cpCisJCUdQSU8oenIsIDcsIDApOworCWVsc2UgaWYgKGNtZCA9PSBCVDgxOV9GSUZPX1JFU0VUX0hJR0gpCisJCUdQSU8oenIsIDcsIDEpOworfQorCiAvKgogICogICBTY2FuIGZvciBhIEJ1eiBjYXJkIChhY3R1YWxseSBmb3IgdGhlIFBDSSBjb250cm9sbGVyIFpSMzYwNTcpLAogICogICByZXF1ZXN0IHRoZSBpcnEgYW5kIG1hcCB0aGUgaW8gbWVtb3J5CkBAIC0xMjY5LDM0ICsxMjIxLDMzIEBACiAJc3RydWN0IHZpZGVvY29kZWNfbWFzdGVyICptYXN0ZXJfdmZlID0gTlVMTDsKIAlzdHJ1Y3QgdmlkZW9jb2RlY19tYXN0ZXIgKm1hc3Rlcl9jb2RlYyA9IE5VTEw7CiAJaW50IGNhcmRfbnVtOwotCWNoYXIgKmkyY19lbmNfbmFtZSwgKmkyY19kZWNfbmFtZSwgKmNvZGVjX25hbWUsICp2ZmVfbmFtZTsKKwljaGFyICpjb2RlY19uYW1lLCAqdmZlX25hbWU7CiAJdW5zaWduZWQgaW50IG5yOwogCiAKIAluciA9IHpvcmFuX251bSsrOwogCWlmIChuciA+PSBCVVpfTUFYKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IGRyaXZlciBsaW1pdGVkIHRvICVkIGNhcmQocykgbWF4aW11bVxuIiwKKwkJZHByaW50aygxLCBLRVJOX0VSUiAiJXM6IGRyaXZlciBsaW1pdGVkIHRvICVkIGNhcmQocykgbWF4aW11bVxuIiwKIAkJCVpPUkFOX05BTUUsIEJVWl9NQVgpOwogCQlyZXR1cm4gLUVOT0VOVDsKIAl9CiAKIAl6ciA9IGt6YWxsb2Moc2l6ZW9mKHN0cnVjdCB6b3JhbiksIEdGUF9LRVJORUwpOwogCWlmICghenIpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogZmluZF96cjM2MDU3KCkgLSBremFsbG9jIGZhaWxlZFxuIiwKLQkJCVpPUkFOX05BTUUpOworCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogJXMgLSBremFsbG9jIGZhaWxlZFxuIiwKKwkJCVpPUkFOX05BTUUsIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQorCXpyLT52NGwyX2Rldi5ub3RpZnkgPSB6b3Jhbl9zdWJkZXZfbm90aWZ5OworCWlmICh2NGwyX2RldmljZV9yZWdpc3RlcigmcGRldi0+ZGV2LCAmenItPnY0bDJfZGV2KSkKKwkJZ290byB6cl9mcmVlX21lbTsKIAl6ci0+cGNpX2RldiA9IHBkZXY7CiAJenItPmlkID0gbnI7CiAJc25wcmludGYoWlJfREVWTkFNRSh6ciksIHNpemVvZihaUl9ERVZOQU1FKHpyKSksICJNSlBFR1sldV0iLCB6ci0+aWQpOwogCXNwaW5fbG9ja19pbml0KCZ6ci0+c3BpbmxvY2spOwogCW11dGV4X2luaXQoJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAlpZiAocGNpX2VuYWJsZV9kZXZpY2UocGRldikpCi0JCWdvdG8genJfZnJlZV9tZW07CisJCWdvdG8genJfdW5yZWc7CiAJcGNpX3JlYWRfY29uZmlnX2J5dGUoenItPnBjaV9kZXYsIFBDSV9DTEFTU19SRVZJU0lPTiwgJnpyLT5yZXZpc2lvbik7CiAKIAlkcHJpbnRrKDEsCkBAIC0xMzIzLDcgKzEyNzQsNyBAQAogCQkJCUtFUk5fRVJSCiAJCQkJIiVzOiBJdCBpcyBub3QgcG9zc2libGUgdG8gYXV0by1kZXRlY3QgWlIzNjA1NyBiYXNlZCBjYXJkc1xuIiwKIAkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlnb3RvIHpyX2ZyZWVfbWVtOworCQkJZ290byB6cl91bnJlZzsKIAkJfQogCiAJCWNhcmRfbnVtID0gZW50LT5kcml2ZXJfZGF0YTsKQEAgLTEzMzIsNyArMTI4Myw3IEBACiAJCQkJS0VSTl9FUlIKIAkJCQkiJXM6IFVua25vd24gY2FyZCwgdHJ5IHNwZWNpZnlpbmcgY2FyZD1YIG1vZHVsZSBwYXJhbWV0ZXJcbiIsCiAJCQkJWlJfREVWTkFNRSh6cikpOwotCQkJZ290byB6cl9mcmVlX21lbTsKKwkJCWdvdG8genJfdW5yZWc7CiAJCX0KIAkJZHByaW50aygzLAogCQkJS0VSTl9ERUJVRwpAQCAtMTM0NSw3ICsxMjk2LDcgQEAKIAkJCQlLRVJOX0VSUgogCQkJCSIlczogVXNlciBzcGVjaWZpZWQgY2FyZCB0eXBlICVkIG91dCBvZiByYW5nZSAoMCAuLiAlZClcbiIsCiAJCQkJWlJfREVWTkFNRSh6ciksIGNhcmRfbnVtLCBOVU1fQ0FSRFMgLSAxKTsKLQkJCWdvdG8genJfZnJlZV9tZW07CisJCQlnb3RvIHpyX3VucmVnOwogCQl9CiAJfQogCkBAIC0xMzYwLDExICsxMzExLDkgQEAKIAogCXpyLT56cjM2MDU3X21lbSA9IHBjaV9pb3JlbWFwX2Jhcih6ci0+cGNpX2RldiwgMCk7CiAJaWYgKCF6ci0+enIzNjA1N19tZW0pIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogJXMoKSAtIGlvcmVtYXAgZmFpbGVkXG4iLAorCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogJXMoKSAtIGlvcmVtYXAgZmFpbGVkXG4iLAogCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKLQkJZ290byB6cl9mcmVlX21lbTsKKwkJZ290byB6cl91bnJlZzsKIAl9CiAKIAlyZXN1bHQgPSByZXF1ZXN0X2lycSh6ci0+cGNpX2Rldi0+aXJxLCB6b3Jhbl9pcnEsCkBAIC0xMzczLDE4ICsxMzIyLDE4IEBACiAJCWlmIChyZXN1bHQgPT0gLUVJTlZBTCkgewogCQkJZHByaW50aygxLAogCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIGJhZCBpcnEgbnVtYmVyIG9yIGhhbmRsZXJcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOworCQkJCSIlczogJXMgLSBiYWQgaXJxIG51bWJlciBvciBoYW5kbGVyXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCX0gZWxzZSBpZiAocmVzdWx0ID09IC1FQlVTWSkgewogCQkJZHByaW50aygxLAogCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSAtIElSUSAlZCBidXN5LCBjaGFuZ2UgeW91ciBQblAgY29uZmlnIGluIEJJT1NcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIHpyLT5wY2lfZGV2LT5pcnEpOworCQkJCSIlczogJXMgLSBJUlEgJWQgYnVzeSwgY2hhbmdlIHlvdXIgUG5QIGNvbmZpZyBpbiBCSU9TXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgenItPnBjaV9kZXYtPmlycSk7CiAJCX0gZWxzZSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKLQkJCQkiJXM6IGZpbmRfenIzNjA1NygpIC0gY2FuJ3QgYXNzaWduIGlycSwgZXJyb3IgY29kZSAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgcmVzdWx0KTsKKwkJCQkiJXM6ICVzIC0gY2FuJ3QgYXNzaWduIGlycSwgZXJyb3IgY29kZSAlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIHJlc3VsdCk7CiAJCX0KIAkJZ290byB6cl91bm1hcDsKIAl9CkBAIC0xMzk0LDkgKzEzNDMsNyBAQAogCQkJICAgICAmbGF0ZW5jeSk7CiAJbmVlZF9sYXRlbmN5ID0genItPnJldmlzaW9uID4gMSA/IDMyIDogNDg7CiAJaWYgKGxhdGVuY3kgIT0gbmVlZF9sYXRlbmN5KSB7Ci0JCWRwcmludGsoMiwKLQkJCUtFUk5fSU5GTwotCQkJIiVzOiBDaGFuZ2luZyBQQ0kgbGF0ZW5jeSBmcm9tICVkIHRvICVkXG4iLAorCQlkcHJpbnRrKDIsIEtFUk5fSU5GTyAiJXM6IENoYW5naW5nIFBDSSBsYXRlbmN5IGZyb20gJWQgdG8gJWRcbiIsCiAJCQlaUl9ERVZOQU1FKHpyKSwgbGF0ZW5jeSwgbmVlZF9sYXRlbmN5KTsKIAkJcGNpX3dyaXRlX2NvbmZpZ19ieXRlKHpyLT5wY2lfZGV2LCBQQ0lfTEFURU5DWV9USU1FUiwKIAkJCQkgICAgICBuZWVkX2xhdGVuY3kpOwpAQCAtMTQwNyw1NCArMTM1NCwyMCBAQAogCWRwcmludGsoMiwgS0VSTl9JTkZPICIlczogSW5pdGlhbGl6aW5nIGkyYyBidXMuLi5cbiIsCiAJCVpSX0RFVk5BTUUoenIpKTsKIAotCS8qIGkyYyBkZWNvZGVyICovCi0JaWYgKGRlY29kZXJbenItPmlkXSAhPSAtMSkgewotCQlpMmNfZGVjX25hbWUgPSBpMmNpZF90b19tb2R1bGVuYW1lKGRlY29kZXJbenItPmlkXSk7Ci0JCXpyLT5jYXJkLmkyY19kZWNvZGVyID0gZGVjb2Rlclt6ci0+aWRdOwotCX0gZWxzZSBpZiAoenItPmNhcmQuaTJjX2RlY29kZXIgIT0gMCkgewotCQlpMmNfZGVjX25hbWUgPSBpMmNpZF90b19tb2R1bGVuYW1lKHpyLT5jYXJkLmkyY19kZWNvZGVyKTsKLQl9IGVsc2UgewotCQlpMmNfZGVjX25hbWUgPSBOVUxMOwotCX0KLQotCWlmIChpMmNfZGVjX25hbWUpIHsKLQkJcmVzdWx0ID0gcmVxdWVzdF9tb2R1bGUoaTJjX2RlY19uYW1lKTsKLQkJaWYgKHJlc3VsdCA8IDApIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogZmFpbGVkIHRvIGxvYWQgbW9kdWxlICVzOiAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgaTJjX2RlY19uYW1lLCByZXN1bHQpOwotCQl9Ci0JfQotCi0JLyogaTJjIGVuY29kZXIgKi8KLQlpZiAoZW5jb2Rlclt6ci0+aWRdICE9IC0xKSB7Ci0JCWkyY19lbmNfbmFtZSA9IGkyY2lkX3RvX21vZHVsZW5hbWUoZW5jb2Rlclt6ci0+aWRdKTsKLQkJenItPmNhcmQuaTJjX2VuY29kZXIgPSBlbmNvZGVyW3pyLT5pZF07Ci0JfSBlbHNlIGlmICh6ci0+Y2FyZC5pMmNfZW5jb2RlciAhPSAwKSB7Ci0JCWkyY19lbmNfbmFtZSA9IGkyY2lkX3RvX21vZHVsZW5hbWUoenItPmNhcmQuaTJjX2VuY29kZXIpOwotCX0gZWxzZSB7Ci0JCWkyY19lbmNfbmFtZSA9IE5VTEw7Ci0JfQotCi0JaWYgKGkyY19lbmNfbmFtZSkgewotCQlyZXN1bHQgPSByZXF1ZXN0X21vZHVsZShpMmNfZW5jX25hbWUpOwotCQlpZiAocmVzdWx0IDwgMCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBmYWlsZWQgdG8gbG9hZCBtb2R1bGUgJXM6ICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBpMmNfZW5jX25hbWUsIHJlc3VsdCk7Ci0JCX0KLQl9Ci0KIAlpZiAoem9yYW5fcmVnaXN0ZXJfaTJjKHpyKSA8IDApIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogZmluZF96cjM2MDU3KCkgLSBjYW4ndCBpbml0aWFsaXplIGkyYyBidXNcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiAlcyAtIGNhbid0IGluaXRpYWxpemUgaTJjIGJ1c1xuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCWdvdG8genJfZnJlZV9pcnE7CiAJfQogCisJenItPmRlY29kZXIgPSB2NGwyX2kyY19uZXdfcHJvYmVkX3N1YmRldigmenItPmkyY19hZGFwdGVyLAorCQl6ci0+Y2FyZC5tb2RfZGVjb2RlciwgenItPmNhcmQuaTJjX2RlY29kZXIsIHpyLT5jYXJkLmFkZHJzX2RlY29kZXIpOworCisJaWYgKHpyLT5jYXJkLm1vZF9lbmNvZGVyKQorCQl6ci0+ZW5jb2RlciA9IHY0bDJfaTJjX25ld19wcm9iZWRfc3ViZGV2KCZ6ci0+aTJjX2FkYXB0ZXIsCisJCQl6ci0+Y2FyZC5tb2RfZW5jb2RlciwgenItPmNhcmQuaTJjX2VuY29kZXIsCisJCQl6ci0+Y2FyZC5hZGRyc19lbmNvZGVyKTsKKwogCWRwcmludGsoMiwKIAkJS0VSTl9JTkZPICIlczogSW5pdGlhbGl6aW5nIHZpZGVvY29kZWMgYnVzLi4uXG4iLAogCQlaUl9ERVZOQU1FKHpyKSk7CkBAIC0xNDk1LDE3ICsxNDA4LDEzIEBACiAJCQlnb3RvIHpyX3VucmVnX2kyYzsKIAkJenItPmNvZGVjID0gdmlkZW9jb2RlY19hdHRhY2gobWFzdGVyX2NvZGVjKTsKIAkJaWYgKCF6ci0+Y29kZWMpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogZmluZF96cjM2MDU3KCkgLSBubyBjb2RlYyBmb3VuZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogJXMgLSBubyBjb2RlYyBmb3VuZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQkJZ290byB6cl9mcmVlX2NvZGVjOwogCQl9CiAJCWlmICh6ci0+Y29kZWMtPnR5cGUgIT0genItPmNhcmQudmlkZW9fY29kZWMpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogZmluZF96cjM2MDU3KCkgLSB3cm9uZyBjb2RlY1xuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogJXMgLSB3cm9uZyBjb2RlY1xuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQkJZ290byB6cl9kZXRhY2hfY29kZWM7CiAJCX0KIAl9CkBAIC0xNTE1LDE3ICsxNDI0LDEzIEBACiAJCQlnb3RvIHpyX2RldGFjaF9jb2RlYzsKIAkJenItPnZmZSA9IHZpZGVvY29kZWNfYXR0YWNoKG1hc3Rlcl92ZmUpOwogCQlpZiAoIXpyLT52ZmUpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogZmluZF96cjM2MDU3KCkgLSBubyBWRkUgZm91bmRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOworCQkJZHByaW50aygxLCBLRVJOX0VSUiAiJXM6ICVzIC0gbm8gVkZFIGZvdW5kXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQlnb3RvIHpyX2ZyZWVfdmZlOwogCQl9CiAJCWlmICh6ci0+dmZlLT50eXBlICE9IHpyLT5jYXJkLnZpZGVvX3ZmZSkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBmaW5kX3pyMzYwNTcoKSA9IHdyb25nIFZGRVxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogJXMgPSB3cm9uZyBWRkVcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJCWdvdG8genJfZGV0YWNoX3ZmZTsKIAkJfQogCX0KQEAgLTE1MzMsOCArMTQzOCw3IEBACiAJLyogdGFrZSBjYXJlIG9mIE5hdG9tYSBjaGlwc2V0IGFuZCBhIHJldmlzaW9uIDEgenIzNjA1NyAqLwogCWlmICgocGNpX3BjaV9wcm9ibGVtcyAmIFBDSVBDSV9OQVRPTUEpICYmIHpyLT5yZXZpc2lvbiA8PSAxKSB7CiAJCXpyLT5qcGdfYnVmZmVycy5uZWVkX2NvbnRpZ3VvdXMgPSAxOwotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0lORk8KKwkJZHByaW50aygxLCBLRVJOX0lORk8KIAkJCSIlczogWlIzNjA1Ny9OYXRvbWEgYnVnLCBtYXguIGJ1ZmZlciBzaXplIGlzIDEyOEtcbiIsCiAJCQlaUl9ERVZOQU1FKHpyKSk7CiAJfQpAQCAtMTU0NCw4ICsxNDQ4LDYgQEAKIAogCXpvcmFuX3Byb2NfaW5pdCh6cik7CiAKLQlwY2lfc2V0X2RydmRhdGEocGRldiwgenIpOwotCiAJcmV0dXJuIDA7CiAKIHpyX2RldGFjaF92ZmU6CkBAIC0xNTYzLDYgKzE0NjUsOCBAQAogCWZyZWVfaXJxKHpyLT5wY2lfZGV2LT5pcnEsIHpyKTsKIHpyX3VubWFwOgogCWlvdW5tYXAoenItPnpyMzYwNTdfbWVtKTsKK3pyX3VucmVnOgorCXY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoJnpyLT52NGwyX2Rldik7CiB6cl9mcmVlX21lbToKIAlrZnJlZSh6cik7CiAKQEAgLTE2MTMsOSArMTUxNyw2IEBACiAJCQlaT1JBTl9OQU1FLCB2aWRtZW0pOwogCX0KIAotCS8qIHJhbmRvbSBub25zZW5zZSAqLwotCWRwcmludGsoNiwgS0VSTl9ERUJVRyAiSm90dGkgaXMgZWVuIGhlbGQhXG4iKTsKLQogCS8qIHNvbWUgbWFpbmJvYXJkcyBtaWdodCBub3QgZG8gUENJLVBDSSBkYXRhIHRyYW5zZmVyIHdlbGwgKi8KIAlpZiAocGNpX3BjaV9wcm9ibGVtcyAmIChQQ0lQQ0lfRkFJTHxQQ0lBR1BfRkFJTHxQQ0lQQ0lfQUxJTUFHSUspKSB7CiAJCWRwcmludGsoMSwKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fY2FyZC5oIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmgKaW5kZXggNDUwN2JkYy4uNDkzNmZlYSAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmgKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9jYXJkLmgKQEAgLTQ0LDcgKzQ0LDggQEAKIGV4dGVybiBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHpvcmFuX3RlbXBsYXRlOwogCiBleHRlcm4gaW50IHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyhzdHJ1Y3Qgem9yYW4gKnpyLAotCQkJCSAgICBzdHJ1Y3Qgem9yYW5fanBnX3NldHRpbmdzICpzZXR0aW5ncyk7CisJCQkJICAgIHN0cnVjdCB6b3Jhbl9qcGdfc2V0dGluZ3MgKnNldHRpbmdzLAorCQkJCSAgICBpbnQgdHJ5KTsKIGV4dGVybiB2b2lkIHpvcmFuX29wZW5faW5pdF9wYXJhbXMoc3RydWN0IHpvcmFuICp6cik7CiBleHRlcm4gdm9pZCB6b3Jhbl92ZGV2X3JlbGVhc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmRldik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZGV2aWNlLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RldmljZS5jCmluZGV4IDVkOTQ4ZmYuLmUwMjIzZGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZGV2aWNlLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kZXZpY2UuYwpAQCAtMzYsMTMgKzM2LDEyIEBACiAjaW5jbHVkZSA8bGludXgvcHJvY19mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy5oPgogI2luY2x1ZGUgPGxpbnV4L2kyYy1hbGdvLWJpdC5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Lmg+CisjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1jb21tb24uaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NlbS5oPgogCiAjaW5jbHVkZSA8bGludXgvcGNpLmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9fZGVjb2Rlci5oPgotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2VuY29kZXIuaD4KICNpbmNsdWRlIDxsaW51eC9kZWxheS5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KIApAQCAtMzEyLDkgKzMxMSw5IEBACiAJY2FzZSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1M6CiAJY2FzZSBCVVpfTU9ERV9JRExFOgogCWRlZmF1bHQ6Ci0JCWlmICh6ci0+bm9ybSA9PSBWSURFT19NT0RFX05UU0MgfHwKKwkJaWYgKCh6ci0+bm9ybSAmIFY0TDJfU1REX05UU0MpIHx8CiAJCSAgICAoenItPmNhcmQudHlwZSA9PSBMTUwzM1IxMCAmJgotCQkgICAgIHpyLT5ub3JtID09IFZJREVPX01PREVfUEFMKSkKKwkJICAgICAoenItPm5vcm0gJiBWNEwyX1NURF9QQUwpKSkKIAkJCWJ0YW5kKH5aUjM2MDU3X1ZGRVNQRlJfRXh0RmwsIFpSMzYwNTdfVkZFU1BGUik7CiAJCWVsc2UKIAkJCWJ0b3IoWlIzNjA1N19WRkVTUEZSX0V4dEZsLCBaUjM2MDU3X1ZGRVNQRlIpOwpAQCAtMzU1LDE0ICszNTQsNiBAQAogCWRwcmludGsoMiwgS0VSTl9JTkZPICIlczogc2V0X3ZmZSgpIC0gd2lkdGggPSAlZCwgaGVpZ2h0ID0gJWRcbiIsCiAJCVpSX0RFVk5BTUUoenIpLCB2aWRlb193aWR0aCwgdmlkZW9faGVpZ2h0KTsKIAotCWlmICh6ci0+bm9ybSAhPSBWSURFT19NT0RFX1BBTCAmJgotCSAgICB6ci0+bm9ybSAhPSBWSURFT19NT0RFX05UU0MgJiYKLQkgICAgenItPm5vcm0gIT0gVklERU9fTU9ERV9TRUNBTSkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUiAiJXM6IHNldF92ZmUoKSAtIG5vcm0gPSAlZCBub3QgdmFsaWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgenItPm5vcm0pOwotCQlyZXR1cm47Ci0JfQogCWlmICh2aWRlb193aWR0aCA8IEJVWl9NSU5fV0lEVEggfHwKIAkgICAgdmlkZW9faGVpZ2h0IDwgQlVaX01JTl9IRUlHSFQgfHwKIAkgICAgdmlkZW9fd2lkdGggPiBXYSB8fCB2aWRlb19oZWlnaHQgPiBIYSkgewpAQCAtNDI2LDcgKzQxNyw3IEBACiAJICogd2UgZ2V0IHRoZSBjb3JyZWN0IGNvbG9ycyB3aGVuIHVuY29tcHJlc3NpbmcgdG8gdGhlIHNjcmVlbiAgKi8KIAkvL3JlZyB8PSBaUjM2MDU3X1ZGRVNQRlJfVkNMS1BvbDsgLyoqLwogCS8qIFJKOiBEb24ndCBrbm93IGlmIHRoYXQgaXMgbmVlZGVkIGZvciBOVFNDIGFsc28gKi8KLQlpZiAoenItPm5vcm0gIT0gVklERU9fTU9ERV9OVFNDKQorCWlmICghKHpyLT5ub3JtICYgVjRMMl9TVERfTlRTQykpCiAJCXJlZyB8PSBaUjM2MDU3X1ZGRVNQRlJfRXh0Rmw7CS8vIE5FRURFRCEhISEhISEgV29sZmdhbmcKIAlyZWcgfD0gWlIzNjA1N19WRkVTUEZSX1RvcEZpZWxkOwogCWlmIChIb3JEY20gPj0gNDgpIHsKQEAgLTQ5NywxMSArNDg4LDExIEBACiAJCSAqIEFsbCBlcnJvciBtZXNzYWdlcyBhcmUgaW50ZXJuYWwgZHJpdmVyIGNoZWNraW5nIG9ubHkhICovCiAKIAkJLyogdmlkZW8gZGlzcGxheSB0b3AgYW5kIGJvdHRvbSByZWdpc3RlcnMgKi8KLQkJcmVnID0gKGxvbmcpIHpyLT5idWZmZXIuYmFzZSArCisJCXJlZyA9IChsb25nKSB6ci0+dmJ1Zl9iYXNlICsKIAkJICAgIHpyLT5vdmVybGF5X3NldHRpbmdzLnggKgogCQkgICAgKCh6ci0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQtPmRlcHRoICsgNykgLyA4KSArCiAJCSAgICB6ci0+b3ZlcmxheV9zZXR0aW5ncy55ICoKLQkJICAgIHpyLT5idWZmZXIuYnl0ZXNwZXJsaW5lOworCQkgICAgenItPnZidWZfYnl0ZXNwZXJsaW5lOwogCQlidHdyaXRlKHJlZywgWlIzNjA1N19WRFRSKTsKIAkJaWYgKHJlZyAmIDMpCiAJCQlkcHJpbnRrKDEsCkBAIC01MDksMTUgKzUwMCwxNSBAQAogCQkJCSIlczogenIzNjA1N19vdmVybGF5KCkgLSB2aWRlb19hZGRyZXNzIG5vdCBhbGlnbmVkXG4iLAogCQkJCVpSX0RFVk5BTUUoenIpKTsKIAkJaWYgKHpyLT5vdmVybGF5X3NldHRpbmdzLmhlaWdodCA+IEJVWl9NQVhfSEVJR0hUIC8gMikKLQkJCXJlZyArPSB6ci0+YnVmZmVyLmJ5dGVzcGVybGluZTsKKwkJCXJlZyArPSB6ci0+dmJ1Zl9ieXRlc3BlcmxpbmU7CiAJCWJ0d3JpdGUocmVnLCBaUjM2MDU3X1ZEQlIpOwogCiAJCS8qIHZpZGVvIHN0cmlkZSwgc3RhdHVzLCBhbmQgZnJhbWUgZ3JhYiByZWdpc3RlciAqLwotCQlyZWcgPSB6ci0+YnVmZmVyLmJ5dGVzcGVybGluZSAtCisJCXJlZyA9IHpyLT52YnVmX2J5dGVzcGVybGluZSAtCiAJCSAgICB6ci0+b3ZlcmxheV9zZXR0aW5ncy53aWR0aCAqCiAJCSAgICAoKHpyLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdC0+ZGVwdGggKyA3KSAvIDgpOwogCQlpZiAoenItPm92ZXJsYXlfc2V0dGluZ3MuaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQgLyAyKQotCQkJcmVnICs9IHpyLT5idWZmZXIuYnl0ZXNwZXJsaW5lOworCQkJcmVnICs9IHpyLT52YnVmX2J5dGVzcGVybGluZTsKIAkJaWYgKHJlZyAmIDMpCiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKQEAgLTU0NCwxMiArNTM1LDggQEAKICAqICBhbmQgdGhlIG1heGltdW0gd2luZG93IHNpemUgaXMgQlVaX01BWF9XSURUSCAqIEJVWl9NQVhfSEVJR0hUIHBpeGVscy4KICAqLwogCi12b2lkCi13cml0ZV9vdmVybGF5X21hc2sgKHN0cnVjdCBmaWxlICAgICAgICpmaWxlLAotCQkgICAgc3RydWN0IHZpZGVvX2NsaXAgKnZwLAotCQkgICAgaW50ICAgICAgICAgICAgICAgIGNvdW50KQordm9pZCB3cml0ZV9vdmVybGF5X21hc2soc3RydWN0IHpvcmFuX2ZoICpmaCwgc3RydWN0IHY0bDJfY2xpcCAqdnAsIGludCBjb3VudCkKIHsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAJdW5zaWduZWQgbWFza19saW5lX3NpemUgPSAoQlVaX01BWF9XSURUSCArIDMxKSAvIDMyOwogCXUzMiAqbWFzazsKQEAgLTU2MywxMCArNTUwLDEwIEBACiAKIAlmb3IgKGkgPSAwOyBpIDwgY291bnQ7ICsraSkgewogCQkvKiBwaWNrIHVwIGxvY2FsIGNvcHkgb2YgY2xpcCAqLwotCQl4ID0gdnBbaV0ueDsKLQkJeSA9IHZwW2ldLnk7Ci0JCXdpZHRoID0gdnBbaV0ud2lkdGg7Ci0JCWhlaWdodCA9IHZwW2ldLmhlaWdodDsKKwkJeCA9IHZwW2ldLmMubGVmdDsKKwkJeSA9IHZwW2ldLmMudG9wOworCQl3aWR0aCA9IHZwW2ldLmMud2lkdGg7CisJCWhlaWdodCA9IHZwW2ldLmMuaGVpZ2h0OwogCiAJCS8qIHRyaW0gY2xpcHMgdGhhdCBleHRlbmQgYmV5b25kIHRoZSB3aW5kb3cgKi8KIAkJaWYgKHggPCAwKSB7CkBAIC05ODEsMTEgKzk2OCwxMCBAQAogenIzNjA1N19lbmFibGVfanBnIChzdHJ1Y3Qgem9yYW4gICAgICAgICAgKnpyLAogCQkgICAgZW51bSB6b3Jhbl9jb2RlY19tb2RlICBtb2RlKQogewotCXN0YXRpYyBpbnQgemVybzsKLQlzdGF0aWMgaW50IG9uZSA9IDE7CiAJc3RydWN0IHZmZV9zZXR0aW5ncyBjYXA7CiAJaW50IGZpZWxkX3NpemUgPQogCSAgICB6ci0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgLyB6ci0+anBnX3NldHRpbmdzLmZpZWxkX3Blcl9idWZmOworCXN0cnVjdCB2NGwyX3JvdXRpbmcgcm91dGUgPSB7IDAsIDAgfTsKIAogCXpyLT5jb2RlY19tb2RlID0gbW9kZTsKIApAQCAtMTAwNyw4ICs5OTMsOSBAQAogCQkgKiB0aGUgdmlkZW8gYnVzIGRpcmVjdGlvbiBzZXQgdG8gaW5wdXQuCiAJCSAqLwogCQlzZXRfdmlkZW9idXNfZGlyKHpyLCAwKTsKLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0VOQUJMRV9PVVRQVVQsICZvbmUpOwotCQllbmNvZGVyX2NvbW1hbmQoenIsIEVOQ09ERVJfU0VUX0lOUFVULCAmemVybyk7CisJCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfc3RyZWFtLCAxKTsKKwkJcm91dGUuaW5wdXQgPSAwOworCQllbmNvZGVyX2NhbGwoenIsIHZpZGVvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAKIAkJLyogVGFrZSB0aGUgSlBFRyBjb2RlYyBhbmQgdGhlIFZGRSBvdXQgb2Ygc2xlZXAgKi8KIAkJanBlZ19jb2RlY19zbGVlcCh6ciwgMCk7CkBAIC0xMDU0LDkgKzEwNDEsMTAgQEAKIAkJLyogSW4gbW90aW9uIGRlY29tcHJlc3Npb24gbW9kZSwgdGhlIGRlY29kZXIgb3V0cHV0IG11c3QgYmUgZGlzYWJsZWQsIGFuZAogCQkgKiB0aGUgdmlkZW8gYnVzIGRpcmVjdGlvbiBzZXQgdG8gb3V0cHV0LgogCQkgKi8KLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0VOQUJMRV9PVVRQVVQsICZ6ZXJvKTsKKwkJZGVjb2Rlcl9jYWxsKHpyLCB2aWRlbywgc19zdHJlYW0sIDApOwogCQlzZXRfdmlkZW9idXNfZGlyKHpyLCAxKTsKLQkJZW5jb2Rlcl9jb21tYW5kKHpyLCBFTkNPREVSX1NFVF9JTlBVVCwgJm9uZSk7CisJCXJvdXRlLmlucHV0ID0gMTsKKwkJZW5jb2Rlcl9jYWxsKHpyLCB2aWRlbywgc19yb3V0aW5nLCAmcm91dGUpOwogCiAJCS8qIFRha2UgdGhlIEpQRUcgY29kZWMgYW5kIHRoZSBWRkUgb3V0IG9mIHNsZWVwICovCiAJCWpwZWdfY29kZWNfc2xlZXAoenIsIDApOwpAQCAtMTEwMCw4ICsxMDg4LDkgQEAKIAkJanBlZ19jb2RlY19zbGVlcCh6ciwgMSk7CiAJCXpyMzYwNTdfYWRqdXN0X3ZmZSh6ciwgbW9kZSk7CiAKLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0VOQUJMRV9PVVRQVVQsICZvbmUpOwotCQllbmNvZGVyX2NvbW1hbmQoenIsIEVOQ09ERVJfU0VUX0lOUFVULCAmemVybyk7CisJCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfc3RyZWFtLCAxKTsKKwkJcm91dGUuaW5wdXQgPSAwOworCQllbmNvZGVyX2NhbGwoenIsIHZpZGVvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAKIAkJZHByaW50aygyLCBLRVJOX0lORk8gIiVzOiBlbmFibGVfanBnKElETEUpXG4iLCBaUl9ERVZOQU1FKHpyKSk7CiAJCWJyZWFrOwpAQCAtMTEzMiw3ICsxMTIxLDcgQEAKIAkJCWlmICghKHpyLT5zdGF0X2NvbVtpXSAmIGNwdV90b19sZTMyKDEpKSkKIAkJCQlicmVhazsKIAkJCXpyLT5zdGF0X2NvbVtpXSA9Ci0JCQkgICAgY3B1X3RvX2xlMzIoenItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uZnJhZ190YWJfYnVzKTsKKwkJCSAgICBjcHVfdG9fbGUzMih6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5qcGcuZnJhZ190YWJfYnVzKTsKIAkJfSBlbHNlIHsKIAkJCS8qIGZpbGwgMiBzdGF0X2NvbSBlbnRyaWVzICovCiAJCQlpID0gKCh6ci0+anBnX2RtYV9oZWFkIC0KQEAgLTExNDAsOSArMTEyOSw5IEBACiAJCQlpZiAoISh6ci0+c3RhdF9jb21baV0gJiBjcHVfdG9fbGUzMigxKSkpCiAJCQkJYnJlYWs7CiAJCQl6ci0+c3RhdF9jb21baV0gPQotCQkJICAgIGNwdV90b19sZTMyKHpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLmZyYWdfdGFiX2J1cyk7CisJCQkgICAgY3B1X3RvX2xlMzIoenItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uanBnLmZyYWdfdGFiX2J1cyk7CiAJCQl6ci0+c3RhdF9jb21baSArIDFdID0KLQkJCSAgICBjcHVfdG9fbGUzMih6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5mcmFnX3RhYl9idXMpOworCQkJICAgIGNwdV90b19sZTMyKHpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLmpwZy5mcmFnX3RhYl9idXMpOwogCQl9CiAJCXpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlID0gQlVaX1NUQVRFX0RNQTsKIAkJenItPmpwZ19kbWFfaGVhZCsrOwpAQCAtMTE2Miw3ICsxMTUxLDcgQEAKIAl1MzIgc3RhdF9jb207CiAJdW5zaWduZWQgaW50IHNlcTsKIAl1bnNpZ25lZCBpbnQgZGlmOwotCXN0cnVjdCB6b3Jhbl9qcGdfYnVmZmVyICpidWZmZXI7CisJc3RydWN0IHpvcmFuX2J1ZmZlciAqYnVmZmVyOwogCWludCBmcmFtZTsKIAogCS8qIEluIG1vdGlvbiBkZWNvbXByZXNzIHdlIGRvbid0IGhhdmUgYSBoYXJkd2FyZSBmcmFtZSBjb3VudGVyLApAQCAtMTIwOCwyMiArMTE5Nyw1MiBAQAogCX0KIH0KIAorc3RhdGljIHZvaWQgem9yYW5fcmVzdGFydChzdHJ1Y3Qgem9yYW4gKnpyKQoreworCS8qIE5vdyB0aGUgc3RhdF9jb21tIGJ1ZmZlciBpcyByZWFkeSBmb3IgcmVzdGFydCAqLworCWludCBzdGF0dXMgPSAwLCBtb2RlOworCisJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUykgeworCQlkZWNvZGVyX2NhbGwoenIsIHZpZGVvLCBnX2lucHV0X3N0YXR1cywgJnN0YXR1cyk7CisJCW1vZGUgPSBDT0RFQ19ET19DT01QUkVTU0lPTjsKKwl9IGVsc2UgeworCQlzdGF0dXMgPSBWNEwyX0lOX1NUX05PX1NJR05BTDsKKwkJbW9kZSA9IENPREVDX0RPX0VYUEFOU0lPTjsKKwl9CisJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTIHx8CisJICAgICEoc3RhdHVzICYgVjRMMl9JTl9TVF9OT19TSUdOQUwpKSB7CisJCS8qKioqKioqKioqIFJFU1RBUlQgY29kZSAqKioqKioqKioqKioqLworCQlqcGVnX2NvZGVjX3Jlc2V0KHpyKTsKKwkJenItPmNvZGVjLT5zZXRfbW9kZSh6ci0+Y29kZWMsIG1vZGUpOworCQl6cjM2MDU3X3NldF9qcGcoenIsIHpyLT5jb2RlY19tb2RlKTsKKwkJanBlZ19zdGFydCh6cik7CisKKwkJaWYgKHpyLT5udW1fZXJyb3JzIDw9IDgpCisJCQlkcHJpbnRrKDIsIEtFUk5fSU5GTyAiJXM6IFJlc3RhcnRcbiIsCisJCQkJWlJfREVWTkFNRSh6cikpOworCisJCXpyLT5KUEVHX21pc3NlZCA9IDA7CisJCXpyLT5KUEVHX2Vycm9yID0gMjsKKwkJLyoqKioqKioqKiogRW5kIFJFU1RBUlQgY29kZSAqKioqKioqKioqKi8KKwl9Cit9CisKIHN0YXRpYyB2b2lkCiBlcnJvcl9oYW5kbGVyIChzdHJ1Y3Qgem9yYW4gKnpyLAogCSAgICAgICB1MzIgICAgICAgICAgIGFzdGF0LAogCSAgICAgICB1MzIgICAgICAgICAgIHN0YXQpCiB7CisJaW50IGksIGo7CisKIAkvKiBUaGlzIGlzIEpQRUcgZXJyb3IgaGFuZGxpbmcgcGFydCAqLwotCWlmICgoenItPmNvZGVjX21vZGUgIT0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKSAmJgotCSAgICAoenItPmNvZGVjX21vZGUgIT0gQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1MpKSB7Ci0JCS8vZHByaW50aygxLCBLRVJOX0VSUiAiJXM6IEludGVybmFsIGVycm9yOiBlcnJvciBoYW5kbGluZyByZXF1ZXN0IGluIG1vZGUgJWRcbiIsIFpSX0RFVk5BTUUoenIpLCB6ci0+Y29kZWNfbW9kZSk7CisJaWYgKHpyLT5jb2RlY19tb2RlICE9IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUyAmJgorCSAgICB6ci0+Y29kZWNfbW9kZSAhPSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUykgewogCQlyZXR1cm47CiAJfQogCiAJaWYgKChzdGF0ICYgMSkgPT0gMCAmJgogCSAgICB6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MgJiYKLQkgICAgenItPmpwZ19kbWFfdGFpbCAtIHpyLT5qcGdfcXVlX3RhaWwgPj0KLQkgICAgIHpyLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycykgeworCSAgICB6ci0+anBnX2RtYV90YWlsIC0genItPmpwZ19xdWVfdGFpbCA+PSB6ci0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMpIHsKIAkJLyogTm8gZnJlZSBidWZmZXJzLi4uICovCiAJCXpvcmFuX3JlYXBfc3RhdF9jb20oenIpOwogCQl6b3Jhbl9mZWVkX3N0YXRfY29tKHpyKTsKQEAgLTEyMzIsMTQyICsxMjUxLDk1IEBACiAJCXJldHVybjsKIAl9CiAKLQlpZiAoenItPkpQRUdfZXJyb3IgIT0gMSkgewotCQkvKgotCQkgKiBGaXJzdCBlbnRyeTogZXJyb3IganVzdCBoYXBwZW5lZCBkdXJpbmcgbm9ybWFsIG9wZXJhdGlvbgotCQkgKgotCQkgKiBJbiBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1M6Ci0JCSAqCi0JCSAqIFBvc3NpYmxlIGdsaXRjaCBpbiBUViBzaWduYWwuIEluIHRoaXMgY2FzZSB3ZSBzaG91bGQKLQkJICogc3RvcCB0aGUgY29kZWMgYW5kIHdhaXQgZm9yIGdvb2QgcXVhbGl0eSBzaWduYWwgYmVmb3JlCi0JCSAqIHJlc3RhcnRpbmcgaXQgdG8gYXZvaWQgZnVydGhlciBwcm9ibGVtcwotCQkgKgotCQkgKiBJbiBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUzoKLQkJICoKLQkJICogQmFkIEpQRUcgZnJhbWU6IHdlIGhhdmUgdG8gbWFyayBpdCBhcyBwcm9jZXNzZWQgKGNvZGVjIGNyYXNoZWQKLQkJICogYW5kIHdhcyBub3QgYWJsZSB0byBkbyBpdCBpdHNlbGYpLCBhbmQgdG8gcmVtb3ZlIGl0IGZyb20gcXVldWUuCi0JCSAqLwotCQlidGFuZCh+WlIzNjA1N19KTUNfR29fZW4sIFpSMzYwNTdfSk1DKTsKLQkJdWRlbGF5KDEpOwotCQlzdGF0ID0gc3RhdCB8IChwb3N0X29mZmljZV9yZWFkKHpyLCA3LCAwKSAmIDMpIDw8IDg7Ci0JCWJ0d3JpdGUoMCwgWlIzNjA1N19KUEMpOwotCQlidG9yKFpSMzYwNTdfTUNUQ1JfQ0ZsdXNoLCBaUjM2MDU3X01DVENSKTsKLQkJanBlZ19jb2RlY19yZXNldCh6cik7Ci0JCWpwZWdfY29kZWNfc2xlZXAoenIsIDEpOwotCQl6ci0+SlBFR19lcnJvciA9IDE7Ci0JCXpyLT5udW1fZXJyb3JzKys7Ci0KLQkJLyogUmVwb3J0IGVycm9yICovCi0JCWlmICh6cjM2MDY3X2RlYnVnID4gMSAmJiB6ci0+bnVtX2Vycm9ycyA8PSA4KSB7Ci0JCQlsb25nIGZyYW1lOwotCQkJZnJhbWUgPQotCQkJICAgIHpyLT5qcGdfcGVuZFt6ci0+anBnX2RtYV90YWlsICYgQlVaX01BU0tfRlJBTUVdOwotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIiVzOiBKUEVHIGVycm9yIHN0YXQ9MHglMDh4KDB4JTA4eCkgcXVldWVfc3RhdGU9JWxkLyVsZC8lbGQvJWxkIHNlcT0lbGQgZnJhbWU9JWxkLiBDb2RlYyBzdG9wcGVkLiAiLAotCQkJICAgICAgIFpSX0RFVk5BTUUoenIpLCBzdGF0LCB6ci0+bGFzdF9pc3IsCi0JCQkgICAgICAgenItPmpwZ19xdWVfdGFpbCwgenItPmpwZ19kbWFfdGFpbCwKLQkJCSAgICAgICB6ci0+anBnX2RtYV9oZWFkLCB6ci0+anBnX3F1ZV9oZWFkLAotCQkJICAgICAgIHpyLT5qcGdfc2VxX251bSwgZnJhbWUpOwotCQkJcHJpbnRrKCJzdGF0X2NvbSBmcmFtZXM6Iik7Ci0JCQl7Ci0JCQkJaW50IGksIGo7Ci0JCQkJZm9yIChqID0gMDsgaiA8IEJVWl9OVU1fU1RBVF9DT007IGorKykgewotCQkJCQlmb3IgKGkgPSAwOwotCQkJCQkgICAgIGkgPCB6ci0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnM7Ci0JCQkJCSAgICAgaSsrKSB7Ci0JCQkJCQlpZiAobGUzMl90b19jcHUoenItPnN0YXRfY29tW2pdKSA9PQotCQkJCQkJICAgIHpyLT5qcGdfYnVmZmVycy4KLQkJCQkJCSAgICBidWZmZXJbaV0uCi0JCQkJCQkgICAgZnJhZ190YWJfYnVzKSB7Ci0JCQkJCQkJcHJpbnRrKCIlIGQtPiVkIiwKLQkJCQkJCQkgICAgICAgaiwgaSk7Ci0JCQkJCQl9Ci0JCQkJCX0KLQkJCQl9Ci0JCQkJcHJpbnRrKCJcbiIpOwotCQkJfQotCQl9Ci0JCS8qIEZpbmQgYW4gZW50cnkgaW4gc3RhdF9jb20gYW5kIHJvdGF0ZSBjb250ZW50cyAqLwotCQl7Ci0JCQlpbnQgaTsKLQotCQkJaWYgKHpyLT5qcGdfc2V0dGluZ3MuVG1wRGNtID09IDEpCi0JCQkJaSA9ICh6ci0+anBnX2RtYV90YWlsIC0KLQkJCQkgICAgIHpyLT5qcGdfZXJyX3NoaWZ0KSAmIEJVWl9NQVNLX1NUQVRfQ09NOwotCQkJZWxzZQotCQkJCWkgPSAoKHpyLT5qcGdfZG1hX3RhaWwgLQotCQkJCSAgICAgIHpyLT5qcGdfZXJyX3NoaWZ0KSAmIDEpICogMjsKLQkJCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUykgewotCQkJCS8qIE1pbWljIHpyMzYwNjcgb3BlcmF0aW9uICovCi0JCQkJenItPnN0YXRfY29tW2ldIHw9IGNwdV90b19sZTMyKDEpOwotCQkJCWlmICh6ci0+anBnX3NldHRpbmdzLlRtcERjbSAhPSAxKQotCQkJCQl6ci0+c3RhdF9jb21baSArIDFdIHw9IGNwdV90b19sZTMyKDEpOwotCQkJCS8qIFJlZmlsbCAqLwotCQkJCXpvcmFuX3JlYXBfc3RhdF9jb20oenIpOwotCQkJCXpvcmFuX2ZlZWRfc3RhdF9jb20oenIpOwotCQkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmenItPmpwZ19jYXBxKTsKLQkJCQkvKiBGaW5kIGFuIGVudHJ5IGluIHN0YXRfY29tIGFnYWluIGFmdGVyIHJlZmlsbCAqLwotCQkJCWlmICh6ci0+anBnX3NldHRpbmdzLlRtcERjbSA9PSAxKQotCQkJCQlpID0gKHpyLT5qcGdfZG1hX3RhaWwgLQotCQkJCQkgICAgIHpyLT5qcGdfZXJyX3NoaWZ0KSAmCi0JCQkJCSAgICBCVVpfTUFTS19TVEFUX0NPTTsKLQkJCQllbHNlCi0JCQkJCWkgPSAoKHpyLT5qcGdfZG1hX3RhaWwgLQotCQkJCQkgICAgICB6ci0+anBnX2Vycl9zaGlmdCkgJiAxKSAqIDI7Ci0JCQl9Ci0JCQlpZiAoaSkgewotCQkJCS8qIFJvdGF0ZSBzdGF0X2NvbW0gZW50cmllcyB0byBtYWtlIGN1cnJlbnQgZW50cnkgZmlyc3QgKi8KLQkJCQlpbnQgajsKLQkJCQlfX2xlMzIgYnVzX2FkZHJbQlVaX05VTV9TVEFUX0NPTV07Ci0KLQkJCQkvKiBIZXJlIHdlIGFyZSBjb3B5aW5nIHRoZSBzdGF0X2NvbSBhcnJheSwgd2hpY2gKLQkJCQkgKiBpcyBhbHJlYWR5IGluIGxpdHRsZSBlbmRpYW4gZm9ybWF0LCBzbwotCQkJCSAqIG5vIGVuZGlhbiBjb252ZXJzaW9ucyBoZXJlCi0JCQkJICovCi0JCQkJbWVtY3B5KGJ1c19hZGRyLCB6ci0+c3RhdF9jb20sCi0JCQkJICAgICAgIHNpemVvZihidXNfYWRkcikpOwotCQkJCWZvciAoaiA9IDA7IGogPCBCVVpfTlVNX1NUQVRfQ09NOyBqKyspIHsKLQkJCQkJenItPnN0YXRfY29tW2pdID0KLQkJCQkJICAgIGJ1c19hZGRyWyhpICsgaikgJgotCQkJCQkJICAgICBCVVpfTUFTS19TVEFUX0NPTV07Ci0KLQkJCQl9Ci0JCQkJenItPmpwZ19lcnJfc2hpZnQgKz0gaTsKLQkJCQl6ci0+anBnX2Vycl9zaGlmdCAmPSBCVVpfTUFTS19TVEFUX0NPTTsKLQkJCX0KLQkJCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MpCi0JCQkJenItPmpwZ19lcnJfc2VxID0genItPmpwZ19zZXFfbnVtOwkvKiArIDE7ICovCi0JCX0KKwlpZiAoenItPkpQRUdfZXJyb3IgPT0gMSkgeworCQl6b3Jhbl9yZXN0YXJ0KHpyKTsKKwkJcmV0dXJuOwogCX0KIAotCS8qIE5vdyB0aGUgc3RhdF9jb21tIGJ1ZmZlciBpcyByZWFkeSBmb3IgcmVzdGFydCAqLwotCWRvIHsKLQkJaW50IHN0YXR1cywgbW9kZTsKKwkvKgorCSAqIEZpcnN0IGVudHJ5OiBlcnJvciBqdXN0IGhhcHBlbmVkIGR1cmluZyBub3JtYWwgb3BlcmF0aW9uCisJICoKKwkgKiBJbiBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1M6CisJICoKKwkgKiBQb3NzaWJsZSBnbGl0Y2ggaW4gVFYgc2lnbmFsLiBJbiB0aGlzIGNhc2Ugd2Ugc2hvdWxkCisJICogc3RvcCB0aGUgY29kZWMgYW5kIHdhaXQgZm9yIGdvb2QgcXVhbGl0eSBzaWduYWwgYmVmb3JlCisJICogcmVzdGFydGluZyBpdCB0byBhdm9pZCBmdXJ0aGVyIHByb2JsZW1zCisJICoKKwkgKiBJbiBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUzoKKwkgKgorCSAqIEJhZCBKUEVHIGZyYW1lOiB3ZSBoYXZlIHRvIG1hcmsgaXQgYXMgcHJvY2Vzc2VkIChjb2RlYyBjcmFzaGVkCisJICogYW5kIHdhcyBub3QgYWJsZSB0byBkbyBpdCBpdHNlbGYpLCBhbmQgdG8gcmVtb3ZlIGl0IGZyb20gcXVldWUuCisJICovCisJYnRhbmQoflpSMzYwNTdfSk1DX0dvX2VuLCBaUjM2MDU3X0pNQyk7CisJdWRlbGF5KDEpOworCXN0YXQgPSBzdGF0IHwgKHBvc3Rfb2ZmaWNlX3JlYWQoenIsIDcsIDApICYgMykgPDwgODsKKwlidHdyaXRlKDAsIFpSMzYwNTdfSlBDKTsKKwlidG9yKFpSMzYwNTdfTUNUQ1JfQ0ZsdXNoLCBaUjM2MDU3X01DVENSKTsKKwlqcGVnX2NvZGVjX3Jlc2V0KHpyKTsKKwlqcGVnX2NvZGVjX3NsZWVwKHpyLCAxKTsKKwl6ci0+SlBFR19lcnJvciA9IDE7CisJenItPm51bV9lcnJvcnMrKzsKIAotCQlpZiAoenItPmNvZGVjX21vZGUgPT0gQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKSB7Ci0JCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfR0VUX1NUQVRVUywgJnN0YXR1cyk7Ci0JCQltb2RlID0gQ09ERUNfRE9fQ09NUFJFU1NJT047Ci0JCX0gZWxzZSB7Ci0JCQlzdGF0dXMgPSAwOwotCQkJbW9kZSA9IENPREVDX0RPX0VYUEFOU0lPTjsKKwkvKiBSZXBvcnQgZXJyb3IgKi8KKwlpZiAoenIzNjA2N19kZWJ1ZyA+IDEgJiYgenItPm51bV9lcnJvcnMgPD0gOCkgeworCQlsb25nIGZyYW1lOworCisJCWZyYW1lID0genItPmpwZ19wZW5kW3pyLT5qcGdfZG1hX3RhaWwgJiBCVVpfTUFTS19GUkFNRV07CisJCXByaW50ayhLRVJOX0VSUgorCQkgICAgICAgIiVzOiBKUEVHIGVycm9yIHN0YXQ9MHglMDh4KDB4JTA4eCkgcXVldWVfc3RhdGU9JWxkLyVsZC8lbGQvJWxkIHNlcT0lbGQgZnJhbWU9JWxkLiBDb2RlYyBzdG9wcGVkLiAiLAorCQkgICAgICAgWlJfREVWTkFNRSh6ciksIHN0YXQsIHpyLT5sYXN0X2lzciwKKwkJICAgICAgIHpyLT5qcGdfcXVlX3RhaWwsIHpyLT5qcGdfZG1hX3RhaWwsCisJCSAgICAgICB6ci0+anBnX2RtYV9oZWFkLCB6ci0+anBnX3F1ZV9oZWFkLAorCQkgICAgICAgenItPmpwZ19zZXFfbnVtLCBmcmFtZSk7CisJCXByaW50ayhLRVJOX0lORk8gInN0YXRfY29tIGZyYW1lczoiKTsKKwkJZm9yIChqID0gMDsgaiA8IEJVWl9OVU1fU1RBVF9DT007IGorKykgeworCQkJZm9yIChpID0gMDsgaSA8IHpyLT5qcGdfYnVmZmVycy5udW1fYnVmZmVyczsgaSsrKSB7CisJCQkJaWYgKGxlMzJfdG9fY3B1KHpyLT5zdGF0X2NvbVtqXSkgPT0genItPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5qcGcuZnJhZ190YWJfYnVzKQorCQkJCQlwcmludGsoS0VSTl9DT05UICIlIGQtPiVkIiwgaiwgaSk7CisJCQl9CiAJCX0KLQkJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTIHx8Ci0JCSAgICAoc3RhdHVzICYgREVDT0RFUl9TVEFUVVNfR09PRCkpIHsKLQkJCS8qKioqKioqKioqIFJFU1RBUlQgY29kZSAqKioqKioqKioqKioqLwotCQkJanBlZ19jb2RlY19yZXNldCh6cik7Ci0JCQl6ci0+Y29kZWMtPnNldF9tb2RlKHpyLT5jb2RlYywgbW9kZSk7Ci0JCQl6cjM2MDU3X3NldF9qcGcoenIsIHpyLT5jb2RlY19tb2RlKTsKLQkJCWpwZWdfc3RhcnQoenIpOworCQlwcmludGsoS0VSTl9DT05UICJcbiIpOworCX0KKwkvKiBGaW5kIGFuIGVudHJ5IGluIHN0YXRfY29tIGFuZCByb3RhdGUgY29udGVudHMgKi8KKwlpZiAoenItPmpwZ19zZXR0aW5ncy5UbXBEY20gPT0gMSkKKwkJaSA9ICh6ci0+anBnX2RtYV90YWlsIC0genItPmpwZ19lcnJfc2hpZnQpICYgQlVaX01BU0tfU1RBVF9DT007CisJZWxzZQorCQlpID0gKCh6ci0+anBnX2RtYV90YWlsIC0genItPmpwZ19lcnJfc2hpZnQpICYgMSkgKiAyOworCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUykgeworCQkvKiBNaW1pYyB6cjM2MDY3IG9wZXJhdGlvbiAqLworCQl6ci0+c3RhdF9jb21baV0gfD0gY3B1X3RvX2xlMzIoMSk7CisJCWlmICh6ci0+anBnX3NldHRpbmdzLlRtcERjbSAhPSAxKQorCQkJenItPnN0YXRfY29tW2kgKyAxXSB8PSBjcHVfdG9fbGUzMigxKTsKKwkJLyogUmVmaWxsICovCisJCXpvcmFuX3JlYXBfc3RhdF9jb20oenIpOworCQl6b3Jhbl9mZWVkX3N0YXRfY29tKHpyKTsKKwkJd2FrZV91cF9pbnRlcnJ1cHRpYmxlKCZ6ci0+anBnX2NhcHEpOworCQkvKiBGaW5kIGFuIGVudHJ5IGluIHN0YXRfY29tIGFnYWluIGFmdGVyIHJlZmlsbCAqLworCQlpZiAoenItPmpwZ19zZXR0aW5ncy5UbXBEY20gPT0gMSkKKwkJCWkgPSAoenItPmpwZ19kbWFfdGFpbCAtIHpyLT5qcGdfZXJyX3NoaWZ0KSAmIEJVWl9NQVNLX1NUQVRfQ09NOworCQllbHNlCisJCQlpID0gKCh6ci0+anBnX2RtYV90YWlsIC0genItPmpwZ19lcnJfc2hpZnQpICYgMSkgKiAyOworCX0KKwlpZiAoaSkgeworCQkvKiBSb3RhdGUgc3RhdF9jb21tIGVudHJpZXMgdG8gbWFrZSBjdXJyZW50IGVudHJ5IGZpcnN0ICovCisJCWludCBqOworCQlfX2xlMzIgYnVzX2FkZHJbQlVaX05VTV9TVEFUX0NPTV07CiAKLQkJCWlmICh6ci0+bnVtX2Vycm9ycyA8PSA4KQotCQkJCWRwcmludGsoMiwgS0VSTl9JTkZPICIlczogUmVzdGFydFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6cikpOworCQkvKiBIZXJlIHdlIGFyZSBjb3B5aW5nIHRoZSBzdGF0X2NvbSBhcnJheSwgd2hpY2gKKwkJICogaXMgYWxyZWFkeSBpbiBsaXR0bGUgZW5kaWFuIGZvcm1hdCwgc28KKwkJICogbm8gZW5kaWFuIGNvbnZlcnNpb25zIGhlcmUKKwkJICovCisJCW1lbWNweShidXNfYWRkciwgenItPnN0YXRfY29tLCBzaXplb2YoYnVzX2FkZHIpKTsKIAotCQkJenItPkpQRUdfbWlzc2VkID0gMDsKLQkJCXpyLT5KUEVHX2Vycm9yID0gMjsKLQkJCS8qKioqKioqKioqIEVuZCBSRVNUQVJUIGNvZGUgKioqKioqKioqKiovCi0JCX0KLQl9IHdoaWxlICgwKTsKKwkJZm9yIChqID0gMDsgaiA8IEJVWl9OVU1fU1RBVF9DT007IGorKykKKwkJCXpyLT5zdGF0X2NvbVtqXSA9IGJ1c19hZGRyWyhpICsgaikgJiBCVVpfTUFTS19TVEFUX0NPTV07CisKKwkJenItPmpwZ19lcnJfc2hpZnQgKz0gaTsKKwkJenItPmpwZ19lcnJfc2hpZnQgJj0gQlVaX01BU0tfU1RBVF9DT007CisJfQorCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1MpCisJCXpyLT5qcGdfZXJyX3NlcSA9IHpyLT5qcGdfc2VxX251bTsJLyogKyAxOyAqLworCXpvcmFuX3Jlc3RhcnQoenIpOwogfQogCiBpcnFyZXR1cm5fdApAQCAtMTQyNSwxMCArMTM5Nyw4IEBACiAJCQkgKiBXZSBzaW1wbHkgaWdub3JlIHRoZW0gKi8KIAogCQkJaWYgKHpyLT52NGxfbWVtZ3JhYl9hY3RpdmUpIHsKLQogCQkJCS8qIEEgbG90IG1vcmUgY2hlY2tzIHNob3VsZCBiZSBoZXJlIC4uLiAqLwotCQkJCWlmICgoYnRyZWFkKFpSMzYwNTdfVlNTRkdSKSAmCi0JCQkJICAgICBaUjM2MDU3X1ZTU0ZHUl9TbmFwU2hvdCkgPT0gMCkKKwkJCQlpZiAoKGJ0cmVhZChaUjM2MDU3X1ZTU0ZHUikgJiBaUjM2MDU3X1ZTU0ZHUl9TbmFwU2hvdCkgPT0gMCkKIAkJCQkJZHByaW50aygxLAogCQkJCQkJS0VSTl9XQVJOSU5HCiAJCQkJCQkiJXM6IEJ1eklSUSB3aXRoIFNuYXBTaG90IG9mZiA/Pz9cbiIsCkBAIC0xNDM2LDEwICsxNDA2LDcgQEAKIAogCQkJCWlmICh6ci0+djRsX2dyYWJfZnJhbWUgIT0gTk9fR1JBQl9BQ1RJVkUpIHsKIAkJCQkJLyogVGhlcmUgaXMgYSBncmFiIG9uIGEgZnJhbWUgZ29pbmcgb24sIGNoZWNrIGlmIGl0IGhhcyBmaW5pc2hlZCAqLwotCi0JCQkJCWlmICgoYnRyZWFkKFpSMzYwNTdfVlNTRkdSKSAmCi0JCQkJCSAgICAgWlIzNjA1N19WU1NGR1JfRnJhbWVHcmFiKSA9PQotCQkJCQkgICAgMCkgeworCQkJCQlpZiAoKGJ0cmVhZChaUjM2MDU3X1ZTU0ZHUikgJiBaUjM2MDU3X1ZTU0ZHUl9GcmFtZUdyYWIpID09IDApIHsKIAkJCQkJCS8qIGl0IGlzIGZpbmlzaGVkLCBub3RpZnkgdGhlIHVzZXIgKi8KIAogCQkJCQkJenItPnY0bF9idWZmZXJzLmJ1ZmZlclt6ci0+djRsX2dyYWJfZnJhbWVdLnN0YXRlID0gQlVaX1NUQVRFX0RPTkU7CkBAIC0xNDU3LDkgKzE0MjQsNyBAQAogCiAJCQkJaWYgKHpyLT52NGxfZ3JhYl9mcmFtZSA9PSBOT19HUkFCX0FDVElWRSAmJgogCQkJCSAgICB6ci0+djRsX3BlbmRfdGFpbCAhPSB6ci0+djRsX3BlbmRfaGVhZCkgewotCi0JCQkJCWludCBmcmFtZSA9IHpyLT52NGxfcGVuZFt6ci0+djRsX3BlbmRfdGFpbCAmCi0JCQkJCQkJIFY0TF9NQVNLX0ZSQU1FXTsKKwkJCQkJaW50IGZyYW1lID0genItPnY0bF9wZW5kW3pyLT52NGxfcGVuZF90YWlsICYgVjRMX01BU0tfRlJBTUVdOwogCQkJCQl1MzIgcmVnOwogCiAJCQkJCXpyLT52NGxfZ3JhYl9mcmFtZSA9IGZyYW1lOwpAQCAtMTQ2OCwyNyArMTQzMywxNyBAQAogCiAJCQkJCS8qIEJ1ZmZlciBhZGRyZXNzICovCiAKLQkJCQkJcmVnID0KLQkJCQkJICAgIHpyLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdLgotCQkJCQkgICAgZmJ1ZmZlcl9idXM7CisJCQkJCXJlZyA9IHpyLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdLnY0bC5mYnVmZmVyX2J1czsKIAkJCQkJYnR3cml0ZShyZWcsIFpSMzYwNTdfVkRUUik7Ci0JCQkJCWlmICh6ci0+djRsX3NldHRpbmdzLmhlaWdodCA+Ci0JCQkJCSAgICBCVVpfTUFYX0hFSUdIVCAvIDIpCi0JCQkJCQlyZWcgKz0KLQkJCQkJCSAgICB6ci0+djRsX3NldHRpbmdzLgotCQkJCQkJICAgIGJ5dGVzcGVybGluZTsKKwkJCQkJaWYgKHpyLT52NGxfc2V0dGluZ3MuaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQgLyAyKQorCQkJCQkJcmVnICs9IHpyLT52NGxfc2V0dGluZ3MuYnl0ZXNwZXJsaW5lOwogCQkJCQlidHdyaXRlKHJlZywgWlIzNjA1N19WREJSKTsKIAogCQkJCQkvKiB2aWRlbyBzdHJpZGUsIHN0YXR1cywgYW5kIGZyYW1lIGdyYWIgcmVnaXN0ZXIgKi8KIAkJCQkJcmVnID0gMDsKLQkJCQkJaWYgKHpyLT52NGxfc2V0dGluZ3MuaGVpZ2h0ID4KLQkJCQkJICAgIEJVWl9NQVhfSEVJR0hUIC8gMikKLQkJCQkJCXJlZyArPQotCQkJCQkJICAgIHpyLT52NGxfc2V0dGluZ3MuCi0JCQkJCQkgICAgYnl0ZXNwZXJsaW5lOwotCQkJCQlyZWcgPQotCQkJCQkgICAgKHJlZyA8PAotCQkJCQkgICAgIFpSMzYwNTdfVlNTRkdSX0Rpc3BTdHJpZGUpOworCQkJCQlpZiAoenItPnY0bF9zZXR0aW5ncy5oZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCAvIDIpCisJCQkJCQlyZWcgKz0genItPnY0bF9zZXR0aW5ncy5ieXRlc3BlcmxpbmU7CisJCQkJCXJlZyA9IChyZWcgPDwgWlIzNjA1N19WU1NGR1JfRGlzcFN0cmlkZSk7CiAJCQkJCXJlZyB8PSBaUjM2MDU3X1ZTU0ZHUl9WaWRPdmY7CiAJCQkJCXJlZyB8PSBaUjM2MDU3X1ZTU0ZHUl9TbmFwU2hvdDsKIAkJCQkJcmVnIHw9IFpSMzYwNTdfVlNTRkdSX0ZyYW1lR3JhYjsKQEAgLTE1MDYsNzcgKzE0NjEsNjYgQEAKICNpZiAoSVJRX01BU0sgJiBaUjM2MDU3X0lTUl9Db2RSZXBJUlEpCiAJCWlmIChhc3RhdCAmIFpSMzYwNTdfSVNSX0NvZFJlcElSUSkgewogCQkJenItPmludHJfY291bnRlcl9Db2RSZXBJUlErKzsKLQkJCUlERUJVRyhwcmludGsKLQkJCSAgICAgICAoS0VSTl9ERUJVRyAiJXM6IFpSMzYwNTdfSVNSX0NvZFJlcElSUVxuIiwKKwkJCUlERUJVRyhwcmludGsoS0VSTl9ERUJVRyAiJXM6IFpSMzYwNTdfSVNSX0NvZFJlcElSUVxuIiwKIAkJCQlaUl9ERVZOQU1FKHpyKSkpOwogCQkJYnRhbmQoflpSMzYwNTdfSUNSX0NvZFJlcElSUSwgWlIzNjA1N19JQ1IpOwogCQl9CiAjZW5kaWYJCQkJLyogKElSUV9NQVNLICYgWlIzNjA1N19JU1JfQ29kUmVwSVJRKSAqLwogCiAjaWYgKElSUV9NQVNLICYgWlIzNjA1N19JU1JfSlBFR1JlcElSUSkKLQkJaWYgKGFzdGF0ICYgWlIzNjA1N19JU1JfSlBFR1JlcElSUSkgeworCQlpZiAoKGFzdGF0ICYgWlIzNjA1N19JU1JfSlBFR1JlcElSUSkgJiYKKwkJICAgICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUyB8fAorCQkgICAgIHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUykpIHsKKwkJCWlmICh6cjM2MDY3X2RlYnVnID4gMSAmJiAoIXpyLT5mcmFtZV9udW0gfHwgenItPkpQRUdfZXJyb3IpKSB7CisJCQkJY2hhciBzY1tdID0gIjAwMDAiOworCQkJCWNoYXIgc3ZbNV07CisJCQkJaW50IGk7CiAKLQkJCWlmICh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUyB8fAotCQkJICAgIHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUykgewotCQkJCWlmICh6cjM2MDY3X2RlYnVnID4gMSAmJgotCQkJCSAgICAoIXpyLT5mcmFtZV9udW0gfHwgenItPkpQRUdfZXJyb3IpKSB7Ci0JCQkJCXByaW50ayhLRVJOX0lORk8KLQkJCQkJICAgICAgICIlczogZmlyc3QgZnJhbWUgcmVhZHk6IHN0YXRlPTB4JTA4eCBvZGRfZXZlbj0lZCBmaWVsZF9wZXJfYnVmZj0lZCBkZWxheT0lZFxuIiwKLQkJCQkJICAgICAgIFpSX0RFVk5BTUUoenIpLCBzdGF0LAotCQkJCQkgICAgICAgenItPmpwZ19zZXR0aW5ncy5vZGRfZXZlbiwKLQkJCQkJICAgICAgIHpyLT5qcGdfc2V0dGluZ3MuCi0JCQkJCSAgICAgICBmaWVsZF9wZXJfYnVmZiwKLQkJCQkJICAgICAgIHpyLT5KUEVHX21pc3NlZCk7Ci0JCQkJCXsKLQkJCQkJCWNoYXIgc2NbXSA9ICIwMDAwIjsKLQkJCQkJCWNoYXIgc3ZbNV07Ci0JCQkJCQlpbnQgaTsKLQkJCQkJCXN0cmNweShzdiwgc2MpOwotCQkJCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQkJCQkJCWlmIChsZTMyX3RvX2NwdSh6ci0+c3RhdF9jb21baV0pICYgMSkKLQkJCQkJCQkJc3ZbaV0gPSAnMSc7Ci0JCQkJCQl9Ci0JCQkJCQlzdls0XSA9IDA7Ci0JCQkJCQlwcmludGsoS0VSTl9JTkZPCi0JCQkJCQkgICAgICAgIiVzOiBzdGF0X2NvbT0lcyBxdWV1ZV9zdGF0ZT0lbGQvJWxkLyVsZC8lbGRcbiIsCi0JCQkJCQkgICAgICAgWlJfREVWTkFNRSh6ciksIHN2LAotCQkJCQkJICAgICAgIHpyLT5qcGdfcXVlX3RhaWwsCi0JCQkJCQkgICAgICAgenItPmpwZ19kbWFfdGFpbCwKLQkJCQkJCSAgICAgICB6ci0+anBnX2RtYV9oZWFkLAotCQkJCQkJICAgICAgIHpyLT5qcGdfcXVlX2hlYWQpOwotCQkJCQl9Ci0JCQkJfSBlbHNlIHsKLQkJCQkJaWYgKHpyLT5KUEVHX21pc3NlZCA+IHpyLT5KUEVHX21heF9taXNzZWQpCS8vIEdldCBzdGF0aXN0aWNzCi0JCQkJCQl6ci0+SlBFR19tYXhfbWlzc2VkID0KLQkJCQkJCSAgICB6ci0+SlBFR19taXNzZWQ7Ci0JCQkJCWlmICh6ci0+SlBFR19taXNzZWQgPAotCQkJCQkgICAgenItPkpQRUdfbWluX21pc3NlZCkKLQkJCQkJCXpyLT5KUEVHX21pbl9taXNzZWQgPQotCQkJCQkJICAgIHpyLT5KUEVHX21pc3NlZDsKLQkJCQl9CisJCQkJcHJpbnRrKEtFUk5fSU5GTworCQkJCSAgICAgICAiJXM6IGZpcnN0IGZyYW1lIHJlYWR5OiBzdGF0ZT0weCUwOHggb2RkX2V2ZW49JWQgZmllbGRfcGVyX2J1ZmY9JWQgZGVsYXk9JWRcbiIsCisJCQkJICAgICAgIFpSX0RFVk5BTUUoenIpLCBzdGF0LAorCQkJCSAgICAgICB6ci0+anBnX3NldHRpbmdzLm9kZF9ldmVuLAorCQkJCSAgICAgICB6ci0+anBnX3NldHRpbmdzLmZpZWxkX3Blcl9idWZmLAorCQkJCSAgICAgICB6ci0+SlBFR19taXNzZWQpOwogCi0JCQkJaWYgKHpyMzYwNjdfZGVidWcgPiAyICYmIHpyLT5mcmFtZV9udW0gPCA2KSB7Ci0JCQkJCWludCBpOwotCQkJCQlwcmludGsoIiVzOiBzZXE9JWxkIHN0YXRfY29tOiIsCi0JCQkJCSAgICAgICBaUl9ERVZOQU1FKHpyKSwgenItPmpwZ19zZXFfbnVtKTsKLQkJCQkJZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewotCQkJCQkJcHJpbnRrKCIgJTA4eCIsCi0JCQkJCQkgICAgICAgbGUzMl90b19jcHUoenItPnN0YXRfY29tW2ldKSk7Ci0JCQkJCX0KLQkJCQkJcHJpbnRrKCJcbiIpOworCQkJCXN0cmNweShzdiwgc2MpOworCQkJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCQkJaWYgKGxlMzJfdG9fY3B1KHpyLT5zdGF0X2NvbVtpXSkgJiAxKQorCQkJCQkJc3ZbaV0gPSAnMSc7CiAJCQkJfQotCQkJCXpyLT5mcmFtZV9udW0rKzsKLQkJCQl6ci0+SlBFR19taXNzZWQgPSAwOwotCQkJCXpyLT5KUEVHX2Vycm9yID0gMDsKLQkJCQl6b3Jhbl9yZWFwX3N0YXRfY29tKHpyKTsKLQkJCQl6b3Jhbl9mZWVkX3N0YXRfY29tKHpyKTsKLQkJCQl3YWtlX3VwX2ludGVycnVwdGlibGUoJnpyLT5qcGdfY2FwcSk7Ci0JCQl9IC8qZWxzZSB7Ci0JCQkgICAgICBkcHJpbnRrKDEsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogSlBFRyBpbnRlcnJ1cHQgd2hpbGUgbm90IGluIG1vdGlvbiAoZGUpY29tcHJlc3MgbW9kZSFcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCX0qLworCQkJCXN2WzRdID0gMDsKKwkJCQlwcmludGsoS0VSTl9JTkZPCisJCQkJICAgICAgICIlczogc3RhdF9jb209JXMgcXVldWVfc3RhdGU9JWxkLyVsZC8lbGQvJWxkXG4iLAorCQkJCSAgICAgICBaUl9ERVZOQU1FKHpyKSwgc3YsCisJCQkJICAgICAgIHpyLT5qcGdfcXVlX3RhaWwsCisJCQkJICAgICAgIHpyLT5qcGdfZG1hX3RhaWwsCisJCQkJICAgICAgIHpyLT5qcGdfZG1hX2hlYWQsCisJCQkJICAgICAgIHpyLT5qcGdfcXVlX2hlYWQpOworCQkJfSBlbHNlIHsKKwkJCQkvKiBHZXQgc3RhdGlzdGljcyAqLworCQkJCWlmICh6ci0+SlBFR19taXNzZWQgPiB6ci0+SlBFR19tYXhfbWlzc2VkKQorCQkJCQl6ci0+SlBFR19tYXhfbWlzc2VkID0genItPkpQRUdfbWlzc2VkOworCQkJCWlmICh6ci0+SlBFR19taXNzZWQgPCB6ci0+SlBFR19taW5fbWlzc2VkKQorCQkJCQl6ci0+SlBFR19taW5fbWlzc2VkID0genItPkpQRUdfbWlzc2VkOworCQkJfQorCisJCQlpZiAoenIzNjA2N19kZWJ1ZyA+IDIgJiYgenItPmZyYW1lX251bSA8IDYpIHsKKwkJCQlpbnQgaTsKKworCQkJCXByaW50ayhLRVJOX0lORk8gIiVzOiBzZXE9JWxkIHN0YXRfY29tOiIsCisJCQkJICAgICAgIFpSX0RFVk5BTUUoenIpLCB6ci0+anBnX3NlcV9udW0pOworCQkJCWZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHsKKwkJCQkJcHJpbnRrKEtFUk5fQ09OVCAiICUwOHgiLAorCQkJCQkgICAgICAgbGUzMl90b19jcHUoenItPnN0YXRfY29tW2ldKSk7CisJCQkJfQorCQkJCXByaW50ayhLRVJOX0NPTlQgIlxuIik7CisJCQl9CisJCQl6ci0+ZnJhbWVfbnVtKys7CisJCQl6ci0+SlBFR19taXNzZWQgPSAwOworCQkJenItPkpQRUdfZXJyb3IgPSAwOworCQkJem9yYW5fcmVhcF9zdGF0X2NvbSh6cik7CisJCQl6b3Jhbl9mZWVkX3N0YXRfY29tKHpyKTsKKwkJCXdha2VfdXBfaW50ZXJydXB0aWJsZSgmenItPmpwZ19jYXBxKTsKIAkJfQogI2VuZGlmCQkJCS8qIChJUlFfTUFTSyAmIFpSMzYwNTdfSVNSX0pQRUdSZXBJUlEpICovCiAKQEAgLTE1ODUsOCArMTUyOSw3IEBACiAJCSAgICB6ci0+SlBFR19taXNzZWQgPiAyNSB8fAogCQkgICAgenItPkpQRUdfZXJyb3IgPT0gMQl8fAogCQkgICAgKCh6ci0+Y29kZWNfbW9kZSA9PSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUykgJiYKLQkJICAgICAoenItPmZyYW1lX251bSAmICh6ci0+SlBFR19taXNzZWQgPgotCQkJCSAgICAgICB6ci0+anBnX3NldHRpbmdzLmZpZWxkX3Blcl9idWZmKSkpKSB7CisJCSAgICAgKHpyLT5mcmFtZV9udW0gJiAoenItPkpQRUdfbWlzc2VkID4genItPmpwZ19zZXR0aW5ncy5maWVsZF9wZXJfYnVmZikpKSkgewogCQkJZXJyb3JfaGFuZGxlcih6ciwgYXN0YXQsIHN0YXQpOwogCQl9CiAKQEAgLTE2MjgsNyArMTU3MSw3IEBACiB2b2lkCiB6b3Jhbl9pbml0X2hhcmR3YXJlIChzdHJ1Y3Qgem9yYW4gKnpyKQogewotCWludCBqLCB6ZXJvID0gMDsKKwlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlID0geyAwLCAwIH07CiAKIAkvKiBFbmFibGUgYnVzLW1hc3RlcmluZyAqLwogCXpvcmFuX3NldF9wY2lfbWFzdGVyKHpyLCAxKTsKQEAgLTE2MzgsMTUgKzE1ODEsMTYgQEAKIAkJenItPmNhcmQuaW5pdCh6cik7CiAJfQogCi0JaiA9IHpyLT5jYXJkLmlucHV0W3pyLT5pbnB1dF0ubXV4c2VsOworCXJvdXRlLmlucHV0ID0genItPmNhcmQuaW5wdXRbenItPmlucHV0XS5tdXhzZWw7CiAKLQlkZWNvZGVyX2NvbW1hbmQoenIsIDAsIE5VTEwpOwotCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfTk9STSwgJnpyLT5ub3JtKTsKLQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX0lOUFVULCAmaik7CisJZGVjb2Rlcl9jYWxsKHpyLCBjb3JlLCBpbml0LCAwKTsKKwlkZWNvZGVyX2NhbGwoenIsIHR1bmVyLCBzX3N0ZCwgenItPm5vcm0pOworCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAotCWVuY29kZXJfY29tbWFuZCh6ciwgMCwgTlVMTCk7Ci0JZW5jb2Rlcl9jb21tYW5kKHpyLCBFTkNPREVSX1NFVF9OT1JNLCAmenItPm5vcm0pOwotCWVuY29kZXJfY29tbWFuZCh6ciwgRU5DT0RFUl9TRVRfSU5QVVQsICZ6ZXJvKTsKKwllbmNvZGVyX2NhbGwoenIsIGNvcmUsIGluaXQsIDApOworCWVuY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfc3RkX291dHB1dCwgenItPm5vcm0pOworCXJvdXRlLmlucHV0ID0gMDsKKwllbmNvZGVyX2NhbGwoenIsIHZpZGVvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAKIAkvKiB0b2dnbGUgSlBFRyBjb2RlYyBzbGVlcCB0byBzeW5jIFBMTCAqLwogCWpwZWdfY29kZWNfc2xlZXAoenIsIDEpOwpAQCAtMTcwNiw0MiArMTY1MCwzIEBACiAJCXJlZyB8PSBaUjM2MDU3X1ZEQ1JfVHJpdG9uOwogCWJ0d3JpdGUocmVnLCBaUjM2MDU3X1ZEQ1IpOwogfQotCi0vKgotICogSW50ZXJmYWNlIHRvIGRlY29kZXIgYW5kIGVuY29kZXIgY2hpcHMgdXNpbmcgaTJjIGJ1cwotICovCi0KLWludAotZGVjb2Rlcl9jb21tYW5kIChzdHJ1Y3Qgem9yYW4gKnpyLAotCQkgaW50ICAgICAgICAgICBjbWQsCi0JCSB2b2lkICAgICAgICAgKmRhdGEpCi17Ci0JaWYgKHpyLT5kZWNvZGVyID09IE5VTEwpCi0JCXJldHVybiAtRUlPOwotCi0JaWYgKHpyLT5jYXJkLnR5cGUgPT0gTE1MMzMgJiYKLQkgICAgKGNtZCA9PSBERUNPREVSX1NFVF9OT1JNIHx8IGNtZCA9PSBERUNPREVSX1NFVF9JTlBVVCkpIHsKLQkJaW50IHJlczsKLQotCQkvLyBCdDgxOSBuZWVkcyB0byByZXNldCBpdHMgRklGTyBidWZmZXIgdXNpbmcgI0ZSU1QgcGluIGFuZAotCQkvLyBMTUwzMyBjYXJkIHVzZXMgR1BJTyg3KSBmb3IgdGhhdC4KLQkJR1BJTyh6ciwgNywgMCk7Ci0JCXJlcyA9IHpyLT5kZWNvZGVyLT5kcml2ZXItPmNvbW1hbmQoenItPmRlY29kZXIsIGNtZCwgZGF0YSk7Ci0JCS8vIFB1bGwgI0ZSU1QgaGlnaC4KLQkJR1BJTyh6ciwgNywgMSk7Ci0JCXJldHVybiByZXM7Ci0JfSBlbHNlCi0JCXJldHVybiB6ci0+ZGVjb2Rlci0+ZHJpdmVyLT5jb21tYW5kKHpyLT5kZWNvZGVyLCBjbWQsCi0JCQkJCQkgICAgZGF0YSk7Ci19Ci0KLWludAotZW5jb2Rlcl9jb21tYW5kIChzdHJ1Y3Qgem9yYW4gKnpyLAotCQkgaW50ICAgICAgICAgICBjbWQsCi0JCSB2b2lkICAgICAgICAgKmRhdGEpCi17Ci0JaWYgKHpyLT5lbmNvZGVyID09IE5VTEwpCi0JCXJldHVybiAtMTsKLQotCXJldHVybiB6ci0+ZW5jb2Rlci0+ZHJpdmVyLT5jb21tYW5kKHpyLT5lbmNvZGVyLCBjbWQsIGRhdGEpOwotfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kZXZpY2UuaCBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZGV2aWNlLmgKaW5kZXggNzRjNmM4ZS4uMDdmMmMyMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kZXZpY2UuaAorKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RldmljZS5oCkBAIC01NCw4ICs1NCw4IEBACiAvKiB6cjM2MHg3IGFjY2VzcyB0byByYXcgY2FwdHVyZSAqLwogZXh0ZXJuIHZvaWQgenIzNjA1N19vdmVybGF5KHN0cnVjdCB6b3JhbiAqenIsCiAJCQkgICAgaW50IG9uKTsKLWV4dGVybiB2b2lkIHdyaXRlX292ZXJsYXlfbWFzayhzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJCSAgICAgICBzdHJ1Y3QgdmlkZW9fY2xpcCAqdnAsCitleHRlcm4gdm9pZCB3cml0ZV9vdmVybGF5X21hc2soc3RydWN0IHpvcmFuX2ZoICpmaCwKKwkJCSAgICAgICBzdHJ1Y3QgdjRsMl9jbGlwICp2cCwKIAkJCSAgICAgICBpbnQgY291bnQpOwogZXh0ZXJuIHZvaWQgenIzNjA1N19zZXRfbWVtZ3JhYihzdHJ1Y3Qgem9yYW4gKnpyLAogCQkJCWludCBtb2RlKTsKQEAgLTg3LDExICs4Nyw5IEBACiBleHRlcm4gaW50IHBhc3NfdGhyb3VnaDsKIAogLyogaTJjICovCi1leHRlcm4gaW50IGRlY29kZXJfY29tbWFuZChzdHJ1Y3Qgem9yYW4gKnpyLAotCQkJICAgaW50IGNtZCwKLQkJCSAgIHZvaWQgKmRhdGEpOwotZXh0ZXJuIGludCBlbmNvZGVyX2NvbW1hbmQoc3RydWN0IHpvcmFuICp6ciwKLQkJCSAgIGludCBjbWQsCi0JCQkgICB2b2lkICpkYXRhKTsKKyNkZWZpbmUgZGVjb2Rlcl9jYWxsKHpyLCBvLCBmLCBhcmdzLi4uKSBcCisJdjRsMl9zdWJkZXZfY2FsbCh6ci0+ZGVjb2RlciwgbywgZiwgIyNhcmdzKQorI2RlZmluZSBlbmNvZGVyX2NhbGwoenIsIG8sIGYsIGFyZ3MuLi4pIFwKKwl2NGwyX3N1YmRldl9jYWxsKHpyLT5lbmNvZGVyLCBvLCBmLCAjI2FyZ3MpCiAKICNlbmRpZgkJCQkvKiBfX1pPUkFOX0RFVklDRV9IX18gKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX2RyaXZlci5jCmluZGV4IDEyMGVmMjMuLmYxNmU1N2MgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fZHJpdmVyLmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9kcml2ZXIuYwpAQCAtNTgsMTYgKzU4LDYgQEAKICNpbmNsdWRlIDxsaW51eC9pMmMtYWxnby1iaXQuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+Ci0jZGVmaW5lICAgICBNQVBfTlIoeCkgICAgICAgdmlydF90b19wYWdlKHgpCi0jZGVmaW5lICAgICBaT1JBTl9WSURfVFlQRSAgKCBcCi0JCQkJVklEX1RZUEVfQ0FQVFVSRSB8IFwKLQkJCQlWSURfVFlQRV9PVkVSTEFZIHwgXAotCQkJCVZJRF9UWVBFX0NMSVBQSU5HIHwgXAotCQkJCVZJRF9UWVBFX0ZSQU1FUkFNIHwgXAotCQkJCVZJRF9UWVBFX1NDQUxFUyB8IFwKLQkJCQlWSURfVFlQRV9NSlBFR19ERUNPREVSIHwgXAotCQkJCVZJRF9UWVBFX01KUEVHX0VOQ09ERVIgXAotCQkJICAgICApCiAKICNpbmNsdWRlIDxsaW51eC92aWRlb2Rldi5oPgogI2luY2x1ZGUgPG1lZGlhL3Y0bDItY29tbW9uLmg+CkBAIC03OSwzNiArNjksMTcgQEAKICNpbmNsdWRlIDxhc20vdWFjY2Vzcy5oPgogI2luY2x1ZGUgPGxpbnV4L3Byb2NfZnMuaD4KIAotI2luY2x1ZGUgPGxpbnV4L3ZpZGVvX2RlY29kZXIuaD4KLSNpbmNsdWRlIDxsaW51eC92aWRlb19lbmNvZGVyLmg+CiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlICJ6b3Jhbi5oIgogI2luY2x1ZGUgInpvcmFuX2RldmljZS5oIgogI2luY2x1ZGUgInpvcmFuX2NhcmQuaCIKIAotCS8qIHdlIGRlY2xhcmUgc29tZSBjYXJkIHR5cGUgZGVmaW5pdGlvbnMgaGVyZSwgdGhleSBtZWFuCi0JICogdGhlIHNhbWUgYXMgdGhlIHY0bDEgWk9SQU5fVklEX1RZUEUgYWJvdmUsIGV4Y2VwdCBpdCdzIHY0bDIgKi8KLSNkZWZpbmUgWk9SQU5fVjRMMl9WSURfRkxBR1MgKCBcCi0JCQkJVjRMMl9DQVBfU1RSRUFNSU5HIHxcCi0JCQkJVjRMMl9DQVBfVklERU9fQ0FQVFVSRSB8XAotCQkJCVY0TDJfQ0FQX1ZJREVPX09VVFBVVCB8XAotCQkJCVY0TDJfQ0FQX1ZJREVPX09WRVJMQVkgXAotCQkJICAgICAgKQotCi0KLSNpZiBkZWZpbmVkKENPTkZJR19WSURFT19WNEwxX0NPTVBBVCkKLSNkZWZpbmUgWkZNVChwYWwsIGZjYywgY3MpIFwKLQkucGFsZXR0ZSA9IChwYWwpLCAuZm91cmNjID0gKGZjYyksIC5jb2xvcnNwYWNlID0gKGNzKQotI2Vsc2UKLSNkZWZpbmUgWkZNVChwYWwsIGZjYywgY3MpIFwKLQkuZm91cmNjID0gKGZjYyksIC5jb2xvcnNwYWNlID0gKGNzKQotI2VuZGlmCiAKIGNvbnN0IHN0cnVjdCB6b3Jhbl9mb3JtYXQgem9yYW5fZm9ybWF0c1tdID0gewogCXsKIAkJLm5hbWUgPSAiMTUtYml0IFJHQiBMRSIsCi0JCVpGTVQoVklERU9fUEFMRVRURV9SR0I1NTUsCi0JCSAgICAgVjRMMl9QSVhfRk1UX1JHQjU1NSwgVjRMMl9DT0xPUlNQQUNFX1NSR0IpLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX1JHQjU1NSwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKIAkJLmRlcHRoID0gMTUsCiAJCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKIAkJCSBaT1JBTl9GT1JNQVRfT1ZFUkxBWSwKQEAgLTExNiwxNiArODcsMTYgQEAKIAkJCSAgIFpSMzYwNTdfVkZFU1BGUl9MaXR0bGVFbmRpYW4sCiAJfSwgewogCQkubmFtZSA9ICIxNS1iaXQgUkdCIEJFIiwKLQkJWkZNVCgtMSwKLQkJICAgICBWNEwyX1BJWF9GTVRfUkdCNTU1WCwgVjRMMl9DT0xPUlNQQUNFX1NSR0IpLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX1JHQjU1NVgsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCiAJCS5kZXB0aCA9IDE1LAogCQkuZmxhZ3MgPSBaT1JBTl9GT1JNQVRfQ0FQVFVSRSB8CiAJCQkgWk9SQU5fRk9STUFUX09WRVJMQVksCiAJCS52ZmVzcGZyID0gWlIzNjA1N19WRkVTUEZSX1JHQjU1NXxaUjM2MDU3X1ZGRVNQRlJfRXJyRGlmLAogCX0sIHsKIAkJLm5hbWUgPSAiMTYtYml0IFJHQiBMRSIsCi0JCVpGTVQoVklERU9fUEFMRVRURV9SR0I1NjUsCi0JCSAgICAgVjRMMl9QSVhfRk1UX1JHQjU2NSwgVjRMMl9DT0xPUlNQQUNFX1NSR0IpLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX1JHQjU2NSwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKIAkJLmRlcHRoID0gMTYsCiAJCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKIAkJCSBaT1JBTl9GT1JNQVRfT1ZFUkxBWSwKQEAgLTEzMyw1NiArMTA0LDU2IEBACiAJCQkgICBaUjM2MDU3X1ZGRVNQRlJfTGl0dGxlRW5kaWFuLAogCX0sIHsKIAkJLm5hbWUgPSAiMTYtYml0IFJHQiBCRSIsCi0JCVpGTVQoLTEsCi0JCSAgICAgVjRMMl9QSVhfRk1UX1JHQjU2NVgsIFY0TDJfQ09MT1JTUEFDRV9TUkdCKSwKKwkJLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9SR0I1NjVYLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCLAogCQkuZGVwdGggPSAxNiwKIAkJLmZsYWdzID0gWk9SQU5fRk9STUFUX0NBUFRVUkUgfAogCQkJIFpPUkFOX0ZPUk1BVF9PVkVSTEFZLAogCQkudmZlc3BmciA9IFpSMzYwNTdfVkZFU1BGUl9SR0I1NjV8WlIzNjA1N19WRkVTUEZSX0VyckRpZiwKIAl9LCB7CiAJCS5uYW1lID0gIjI0LWJpdCBSR0IiLAotCQlaRk1UKFZJREVPX1BBTEVUVEVfUkdCMjQsCi0JCSAgICAgVjRMMl9QSVhfRk1UX0JHUjI0LCBWNEwyX0NPTE9SU1BBQ0VfU1JHQiksCisJCS5mb3VyY2MgPSBWNEwyX1BJWF9GTVRfQkdSMjQsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0IsCiAJCS5kZXB0aCA9IDI0LAogCQkuZmxhZ3MgPSBaT1JBTl9GT1JNQVRfQ0FQVFVSRSB8CiAJCQkgWk9SQU5fRk9STUFUX09WRVJMQVksCiAJCS52ZmVzcGZyID0gWlIzNjA1N19WRkVTUEZSX1JHQjg4OHxaUjM2MDU3X1ZGRVNQRlJfUGFjazI0LAogCX0sIHsKIAkJLm5hbWUgPSAiMzItYml0IFJHQiBMRSIsCi0JCVpGTVQoVklERU9fUEFMRVRURV9SR0IzMiwKLQkJICAgICBWNEwyX1BJWF9GTVRfQkdSMzIsIFY0TDJfQ09MT1JTUEFDRV9TUkdCKSwKKwkJLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9CR1IzMiwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKIAkJLmRlcHRoID0gMzIsCiAJCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKIAkJCSBaT1JBTl9GT1JNQVRfT1ZFUkxBWSwKIAkJLnZmZXNwZnIgPSBaUjM2MDU3X1ZGRVNQRlJfUkdCODg4fFpSMzYwNTdfVkZFU1BGUl9MaXR0bGVFbmRpYW4sCiAJfSwgewogCQkubmFtZSA9ICIzMi1iaXQgUkdCIEJFIiwKLQkJWkZNVCgtMSwKLQkJICAgICBWNEwyX1BJWF9GTVRfUkdCMzIsIFY0TDJfQ09MT1JTUEFDRV9TUkdCKSwKKwkJLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9SR0IzMiwKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU1JHQiwKIAkJLmRlcHRoID0gMzIsCiAJCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKIAkJCSBaT1JBTl9GT1JNQVRfT1ZFUkxBWSwKIAkJLnZmZXNwZnIgPSBaUjM2MDU3X1ZGRVNQRlJfUkdCODg4LAogCX0sIHsKIAkJLm5hbWUgPSAiNDoyOjIsIHBhY2tlZCwgWVVZViIsCi0JCVpGTVQoVklERU9fUEFMRVRURV9ZVVY0MjIsCi0JCSAgICAgVjRMMl9QSVhfRk1UX1lVWVYsIFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0pLAorCQkuZm91cmNjID0gVjRMMl9QSVhfRk1UX1lVWVYsCisJCS5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTSwKIAkJLmRlcHRoID0gMTYsCiAJCS5mbGFncyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFIHwKIAkJCSBaT1JBTl9GT1JNQVRfT1ZFUkxBWSwKIAkJLnZmZXNwZnIgPSBaUjM2MDU3X1ZGRVNQRlJfWVVWNDIyLAogCX0sIHsKIAkJLm5hbWUgPSAiNDoyOjIsIHBhY2tlZCwgVVlWWSIsCi0JCVpGTVQoVklERU9fUEFMRVRURV9VWVZZLAotCQkgICAgIFY0TDJfUElYX0ZNVF9VWVZZLCBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNKSwKKwkJLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9VWVZZLAorCQkuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME0sCiAJCS5kZXB0aCA9IDE2LAogCQkuZmxhZ3MgPSBaT1JBTl9GT1JNQVRfQ0FQVFVSRSB8CiAJCQkgWk9SQU5fRk9STUFUX09WRVJMQVksCiAJCS52ZmVzcGZyID0gWlIzNjA1N19WRkVTUEZSX1lVVjQyMnxaUjM2MDU3X1ZGRVNQRlJfTGl0dGxlRW5kaWFuLAogCX0sIHsKIAkJLm5hbWUgPSAiSGFyZHdhcmUtZW5jb2RlZCBNb3Rpb24tSlBFRyIsCi0JCVpGTVQoLTEsCi0JCSAgICAgVjRMMl9QSVhfRk1UX01KUEVHLCBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNKSwKKwkJLmZvdXJjYyA9IFY0TDJfUElYX0ZNVF9NSlBFRywKKwkJLmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNLAogCQkuZGVwdGggPSAwLAogCQkuZmxhZ3MgPSBaT1JBTl9GT1JNQVRfQ0FQVFVSRSB8CiAJCQkgWk9SQU5fRk9STUFUX1BMQVlCQUNLIHwKQEAgLTE5MSwxMyArMTYyLDYgQEAKIH07CiAjZGVmaW5lIE5VTV9GT1JNQVRTIEFSUkFZX1NJWkUoem9yYW5fZm9ybWF0cykKIAotLy8gUko6IFRlc3Qgb25seSAtIHdhbnQgdG8gdGVzdCBCVVpfVVNFX0hJTUVNIGV2ZW4gd2hlbiBDT05GSUdfQklHUEhZU19BUkVBIGlzIGRlZmluZWQKLQotCi1zdGF0aWMgaW50IGxvY2tfbm9ybTsJLyogMCA9IGRlZmF1bHQgMSA9IERvbid0IGNoYW5nZSBUViBzdGFuZGFyZCAobm9ybSkgKi8KLW1vZHVsZV9wYXJhbShsb2NrX25vcm0sIGludCwgMDY0NCk7Ci1NT0RVTEVfUEFSTV9ERVNDKGxvY2tfbm9ybSwgIlByZXZlbnQgbm9ybSBjaGFuZ2VzICgxID0gaWdub3JlLCA+MSA9IGZhaWwpIik7Ci0KIAkvKiBzbWFsbCBoZWxwZXIgZnVuY3Rpb24gZm9yIGNhbGN1bGF0aW5nIGJ1ZmZlcnNpemVzIGZvciB2NGwyCiAJICogd2UgY2FsY3VsYXRlIHRoZSBuZWFyZXN0IGhpZ2hlciBwb3dlci1vZi10d28sIHdoaWNoCiAJICogd2lsbCBiZSB0aGUgcmVjb21tZW5kZWQgYnVmZmVyc2l6ZSAqLwpAQCAtMjIyLDIyMSArMTg2LDEwNiBAQAogfQogCiAvKiBmb3J3YXJkIHJlZmVyZW5jZXMgKi8KLXN0YXRpYyB2b2lkIHY0bF9mYnVmZmVyX2ZyZWUoc3RydWN0IGZpbGUgKmZpbGUpOwotc3RhdGljIHZvaWQganBnX2ZidWZmZXJfZnJlZShzdHJ1Y3QgZmlsZSAqZmlsZSk7CitzdGF0aWMgdm9pZCB2NGxfZmJ1ZmZlcl9mcmVlKHN0cnVjdCB6b3Jhbl9maCAqZmgpOworc3RhdGljIHZvaWQganBnX2ZidWZmZXJfZnJlZShzdHJ1Y3Qgem9yYW5fZmggKmZoKTsKKworLyogU2V0IG1hcHBpbmcgbW9kZSAqLworc3RhdGljIHZvaWQgbWFwX21vZGVfcmF3KHN0cnVjdCB6b3Jhbl9maCAqZmgpCit7CisJZmgtPm1hcF9tb2RlID0gWk9SQU5fTUFQX01PREVfUkFXOworCWZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplID0gdjRsX2J1ZnNpemU7CisJZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnMgPSB2NGxfbmJ1ZnM7Cit9CitzdGF0aWMgdm9pZCBtYXBfbW9kZV9qcGcoc3RydWN0IHpvcmFuX2ZoICpmaCwgaW50IHBsYXkpCit7CisJZmgtPm1hcF9tb2RlID0gcGxheSA/IFpPUkFOX01BUF9NT0RFX0pQR19QTEFZIDogWk9SQU5fTUFQX01PREVfSlBHX1JFQzsKKwlmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSA9IGpwZ19idWZzaXplOworCWZoLT5idWZmZXJzLm51bV9idWZmZXJzID0ganBnX25idWZzOworfQorc3RhdGljIGlubGluZSBjb25zdCBjaGFyICptb2RlX25hbWUoZW51bSB6b3Jhbl9tYXBfbW9kZSBtb2RlKQoreworCXJldHVybiBtb2RlID09IFpPUkFOX01BUF9NT0RFX1JBVyA/ICJWNEwiIDogIkpQRyI7Cit9CiAKIC8qCiAgKiAgIEFsbG9jYXRlIHRoZSBWNEwgZ3JhYiBidWZmZXJzCiAgKgogICogICBUaGVzZSBoYXZlIHRvIGJlIHB5c2ljYWxseSBjb250aWd1b3VzLgotICogICBJZiB2NGxfYnVmc2l6ZSA8PSBNQVhfS01BTExPQ19NRU0gd2UgdXNlIGttYWxsb2MKLSAqICAgZWxzZSB3ZSB0cnkgdG8gYWxsb2NhdGUgdGhlbSB3aXRoIGJpZ3BoeXNhcmVhX2FsbG9jX3BhZ2VzCi0gKiAgIGlmIHRoZSBiaWdwaHlzYXJlYSBwYXRjaCBpcyBwcmVzZW50IGluIHRoZSBrZXJuZWwsCi0gKiAgIGVsc2Ugd2UgdHJ5IHRvIHVzZSBoaWdoIG1lbW9yeSAoaWYgdGhlIHVzZXIgaGFzIGJvb3RldAotICogICBMaW51eCB3aXRoIHRoZSBuZWNlc3NhcnkgbWVtb3J5IGxlZnQgb3ZlcikuCiAgKi8KIAotc3RhdGljIHVuc2lnbmVkIGxvbmcKLWdldF9oaWdoX21lbSAodW5zaWduZWQgbG9uZyBzaXplKQorc3RhdGljIGludCB2NGxfZmJ1ZmZlcl9hbGxvYyhzdHJ1Y3Qgem9yYW5fZmggKmZoKQogewotLyoKLSAqIENoZWNrIGlmIHRoZXJlIGlzIHVzYWJsZSBtZW1vcnkgYXQgdGhlIGVuZCBvZiBMaW51eCBtZW1vcnkKLSAqIG9mIGF0IGxlYXN0IHNpemUuIFJldHVybiB0aGUgcGh5c2ljYWwgYWRkcmVzcyBvZiB0aGlzIG1lbW9yeSwKLSAqIHJldHVybiAwIG9uIGZhaWx1cmUuCi0gKgotICogVGhlIGlkZWEgaXMgZnJvbSBBbGV4YW5kcm8gUnViaW5pJ3MgYm9vayAiTGludXggZGV2aWNlIGRyaXZlcnMiLgotICogVGhlIGRyaXZlciBmcm9tIGhpbSB3aGljaCBpcyBkb3dubG9hZGFibGUgZnJvbSBPJ1JlaWxseSdzCi0gKiB3ZWIgc2l0ZSBtaXNzZXMgdGhlICJ2aXJ0X3RvX3BoeXMoaGlnaF9tZW1vcnkpIiBwYXJ0Ci0gKiAoYW5kIHRoZXJlZm9yZSBkb2Vzbid0IHdvcmsgYXQgYWxsIC0gYXQgbGVhc3Qgd2l0aCAyLjIueCBrZXJuZWxzKS4KLSAqCi0gKiBJdCBzaG91bGQgYmUgdW5uZWNlc3NhcnkgdG8gbWVudGlvbiB0aGF0IFRISVMgSVMgREFOR0VST1VTLAotICogaWYgbW9yZSB0aGFuIG9uZSBkcml2ZXIgYXQgYSB0aW1lIGhhcyB0aGUgaWRlYSB0byB1c2UgdGhpcyBtZW1vcnkhISEhCi0gKi8KLQotCXZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgX19pb21lbSAqbWVtOwotCXVuc2lnbmVkIGNoYXIgYzsKLQl1bnNpZ25lZCBsb25nIGhpX21lbV9waDsKLQl1bnNpZ25lZCBsb25nIGk7Ci0KLQkvKiBNYXAgdGhlIGhpZ2ggbWVtb3J5IHRvIHVzZXIgc3BhY2UgKi8KLQotCWhpX21lbV9waCA9IHZpcnRfdG9fcGh5cyhoaWdoX21lbW9yeSk7Ci0KLQltZW0gPSBpb3JlbWFwKGhpX21lbV9waCwgc2l6ZSk7Ci0JaWYgKCFtZW0pIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIgIiVzOiBnZXRfaGlnaF9tZW0oKSAtIGlvcmVtYXAgZmFpbGVkXG4iLAotCQkJWk9SQU5fTkFNRSk7Ci0JCXJldHVybiAwOwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKLQkJLyogQ2hlY2sgaWYgaXQgaXMgbWVtb3J5ICovCi0JCWMgPSBpICYgMHhmZjsKLQkJd3JpdGViKGMsIG1lbSArIGkpOwotCQlpZiAocmVhZGIobWVtICsgaSkgIT0gYykKLQkJCWJyZWFrOwotCQljID0gMjU1IC0gYzsKLQkJd3JpdGViKGMsIG1lbSArIGkpOwotCQlpZiAocmVhZGIobWVtICsgaSkgIT0gYykKLQkJCWJyZWFrOwotCQl3cml0ZWIoMCwgbWVtICsgaSk7CS8qIHplcm8gb3V0IG1lbW9yeSAqLwotCi0JCS8qIGdpdmUgdGhlIGtlcm5lbCBhaXIgdG8gYnJlYXRoICovCi0JCWlmICgoaSAmIDB4M2ZmZmYpID09IDB4M2ZmZmYpCi0JCQlzY2hlZHVsZSgpOwotCX0KLQotCWlvdW5tYXAobWVtKTsKLQotCWlmIChpICE9IHNpemUpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogZ2V0X2hpZ2hfbWVtKCkgLSByZXF1ZXN0ZWQgJWx1LCBhdmFpbCAlbHVcbiIsCi0JCQlaT1JBTl9OQU1FLCBzaXplLCBpKTsKLQkJcmV0dXJuIDA7Ci0JfQotCi0JcmV0dXJuIGhpX21lbV9waDsKLX0KLQotc3RhdGljIGludAotdjRsX2ZidWZmZXJfYWxsb2MgKHN0cnVjdCBmaWxlICpmaWxlKQotewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKIAlpbnQgaSwgb2ZmOwogCXVuc2lnbmVkIGNoYXIgKm1lbTsKLQl1bnNpZ25lZCBsb25nIHBtZW0gPSAwOwogCi0JLyogd2UgbWlnaHQgaGF2ZSBvbGQgYnVmZmVycyBseWluZyBhcm91bmQuLi4gKi8KLQlpZiAoZmgtPnY0bF9idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkKSB7Ci0JCXY0bF9mYnVmZmVyX2ZyZWUoZmlsZSk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVyczsgaSsrKSB7Ci0JCWlmIChmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXIpCisJZm9yIChpID0gMDsgaSA8IGZoLT5idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKKwkJaWYgKGZoLT5idWZmZXJzLmJ1ZmZlcltpXS52NGwuZmJ1ZmZlcikKIAkJCWRwcmludGsoMiwKIAkJCQlLRVJOX1dBUk5JTkcKLQkJCQkiJXM6IHY0bF9mYnVmZmVyX2FsbG9jKCkgLSBidWZmZXIgJWQgYWxscmVhZHkgYWxsb2NhdGVkIT9cbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGkpOworCQkJCSIlczogJXMgLSBidWZmZXIgJWQgYWxyZWFkeSBhbGxvY2F0ZWQhP1xuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIGkpOwogCiAJCS8vdWRlbGF5KDIwKTsKLQkJaWYgKGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSA8PSBNQVhfS01BTExPQ19NRU0pIHsKLQkJCS8qIFVzZSBrbWFsbG9jICovCi0KLQkJCW1lbSA9IGttYWxsb2MoZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplLCBHRlBfS0VSTkVMKTsKLQkJCWlmICghbWVtKSB7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IHY0bF9mYnVmZmVyX2FsbG9jKCkgLSBrbWFsbG9jIGZvciBWNEwgYnVmICVkIGZhaWxlZFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIGkpOwotCQkJCXY0bF9mYnVmZmVyX2ZyZWUoZmlsZSk7Ci0JCQkJcmV0dXJuIC1FTk9CVUZTOwotCQkJfQotCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyID0gbWVtOwotCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyX3BoeXMgPQotCQkJICAgIHZpcnRfdG9fcGh5cyhtZW0pOwotCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyX2J1cyA9Ci0JCQkgICAgdmlydF90b19idXMobWVtKTsKLQkJCWZvciAob2ZmID0gMDsgb2ZmIDwgZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOwotCQkJICAgICBvZmYgKz0gUEFHRV9TSVpFKQotCQkJCVNldFBhZ2VSZXNlcnZlZChNQVBfTlIobWVtICsgb2ZmKSk7Ci0JCQlkcHJpbnRrKDQsCi0JCQkJS0VSTl9JTkZPCi0JCQkJIiVzOiB2NGxfZmJ1ZmZlcl9hbGxvYygpIC0gVjRMIGZyYW1lICVkIG1lbSAweCVseCAoYnVzOiAweCVseClcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGksICh1bnNpZ25lZCBsb25nKSBtZW0sCi0JCQkJdmlydF90b19idXMobWVtKSk7Ci0JCX0gZWxzZSB7Ci0KLQkJCS8qIFVzZSBoaWdoIG1lbW9yeSB3aGljaCBoYXMgYmVlbiBsZWZ0IGF0IGJvb3QgdGltZSAqLwotCi0JCQkvKiBPay4sIE9rLiB0aGlzIGlzIGFuIGV2aWwgaGFjayAtIHdlIG1ha2UKLQkJCSAqIHRoZSBhc3N1bXB0aW9uIHRoYXQgcGh5c2ljYWwgYWRkcmVzc2VzIGFyZQotCQkJICogdGhlIHNhbWUgYXMgYnVzIGFkZHJlc3NlcyAodHJ1ZSBhdCBsZWFzdAotCQkJICogZm9yIEludGVsIHByb2Nlc3NvcnMpLiBUaGUgd2hvbGUgbWV0aG9kIG9mCi0JCQkgKiBvYnRhaW5pbmcgYW5kIHVzaW5nIHRoaXMgbWVtb3J5IGlzIG5vdCB2ZXJ5Ci0JCQkgKiBuaWNlIC0gYnV0IEkgaG9wZSBpdCBzYXZlcyBzb21lIHBvb3IgdXNlcnMKLQkJCSAqIGZyb20ga2VybmVsIGhhY2tpbmcsIHdoaWNoIG1pZ2h0IGhhdmUgZXZlbgotCQkJICogbW9yZSBldmlsIHJlc3VsdHMgKi8KLQotCQkJaWYgKGkgPT0gMCkgewotCQkJCWludCBzaXplID0KLQkJCQkgICAgZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzICoKLQkJCQkgICAgZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOwotCi0JCQkJcG1lbSA9IGdldF9oaWdoX21lbShzaXplKTsKLQkJCQlpZiAocG1lbSA9PSAwKSB7Ci0JCQkJCWRwcmludGsoMSwKLQkJCQkJCUtFUk5fRVJSCi0JCQkJCQkiJXM6IHY0bF9mYnVmZmVyX2FsbG9jKCkgLSBnZXRfaGlnaF9tZW0gKHNpemUgPSAlZCBLQikgZm9yIFY0TCBidWZzIGZhaWxlZFxuIiwKLQkJCQkJCVpSX0RFVk5BTUUoenIpLCBzaXplID4+IDEwKTsKLQkJCQkJcmV0dXJuIC1FTk9CVUZTOwotCQkJCX0KLQkJCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyWzBdLmZidWZmZXIgPSBOVUxMOwotCQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbMF0uZmJ1ZmZlcl9waHlzID0gcG1lbTsKLQkJCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyWzBdLmZidWZmZXJfYnVzID0gcG1lbTsKLQkJCQlkcHJpbnRrKDQsCi0JCQkJCUtFUk5fSU5GTwotCQkJCQkiJXM6IHY0bF9mYnVmZmVyX2FsbG9jKCkgLSB1c2luZyAlZCBLQiBoaWdoIG1lbW9yeVxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIHNpemUgPj4gMTApOwotCQkJfSBlbHNlIHsKLQkJCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmZidWZmZXIgPSBOVUxMOwotCQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uZmJ1ZmZlcl9waHlzID0KLQkJCQkgICAgcG1lbSArIGkgKiBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyX2J1cyA9Ci0JCQkJICAgIHBtZW0gKyBpICogZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOwotCQkJfQorCQltZW0gPSBrbWFsbG9jKGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplLAorCQkJICAgICAgR0ZQX0tFUk5FTCB8IF9fR0ZQX05PV0FSTik7CisJCWlmICghbWVtKSB7CisJCQlkcHJpbnRrKDEsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6ICVzIC0ga21hbGxvYyBmb3IgVjRMIGJ1ZiAlZCBmYWlsZWRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBpKTsKKwkJCXY0bF9mYnVmZmVyX2ZyZWUoZmgpOworCQkJcmV0dXJuIC1FTk9CVUZTOwogCQl9CisJCWZoLT5idWZmZXJzLmJ1ZmZlcltpXS52NGwuZmJ1ZmZlciA9IG1lbTsKKwkJZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLnY0bC5mYnVmZmVyX3BoeXMgPSB2aXJ0X3RvX3BoeXMobWVtKTsKKwkJZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLnY0bC5mYnVmZmVyX2J1cyA9IHZpcnRfdG9fYnVzKG1lbSk7CisJCWZvciAob2ZmID0gMDsgb2ZmIDwgZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemU7CisJCSAgICAgb2ZmICs9IFBBR0VfU0laRSkKKwkJCVNldFBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UobWVtICsgb2ZmKSk7CisJCWRwcmludGsoNCwKKwkJCUtFUk5fSU5GTworCQkJIiVzOiAlcyAtIFY0TCBmcmFtZSAlZCBtZW0gMHglbHggKGJ1czogMHglbGx4KVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgaSwgKHVuc2lnbmVkIGxvbmcpIG1lbSwKKwkJCSh1bnNpZ25lZCBsb25nIGxvbmcpdmlydF90b19idXMobWVtKSk7CiAJfQogCi0JZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDE7CisJZmgtPmJ1ZmZlcnMuYWxsb2NhdGVkID0gMTsKIAogCXJldHVybiAwOwogfQogCiAvKiBmcmVlIHRoZSBWNEwgZ3JhYiBidWZmZXJzICovCi1zdGF0aWMgdm9pZAotdjRsX2ZidWZmZXJfZnJlZSAoc3RydWN0IGZpbGUgKmZpbGUpCitzdGF0aWMgdm9pZCB2NGxfZmJ1ZmZlcl9mcmVlKHN0cnVjdCB6b3Jhbl9maCAqZmgpCiB7Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwogCWludCBpLCBvZmY7CiAJdW5zaWduZWQgY2hhciAqbWVtOwogCi0JZHByaW50ayg0LCBLRVJOX0lORk8gIiVzOiB2NGxfZmJ1ZmZlcl9mcmVlKClcbiIsIFpSX0RFVk5BTUUoenIpKTsKKwlkcHJpbnRrKDQsIEtFUk5fSU5GTyAiJXM6ICVzXG4iLCBaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCi0JZm9yIChpID0gMDsgaSA8IGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVyczsgaSsrKSB7Ci0JCWlmICghZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyKQorCWZvciAoaSA9IDA7IGkgPCBmaC0+YnVmZmVycy5udW1fYnVmZmVyczsgaSsrKSB7CisJCWlmICghZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLnY0bC5mYnVmZmVyKQogCQkJY29udGludWU7CiAKLQkJaWYgKGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSA8PSBNQVhfS01BTExPQ19NRU0pIHsKLQkJCW1lbSA9IGZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uZmJ1ZmZlcjsKLQkJCWZvciAob2ZmID0gMDsgb2ZmIDwgZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOwotCQkJICAgICBvZmYgKz0gUEFHRV9TSVpFKQotCQkJCUNsZWFyUGFnZVJlc2VydmVkKE1BUF9OUihtZW0gKyBvZmYpKTsKLQkJCWtmcmVlKCh2b2lkICopIGZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uZmJ1ZmZlcik7Ci0JCX0KLQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5mYnVmZmVyID0gTlVMTDsKKwkJbWVtID0gZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLnY0bC5mYnVmZmVyOworCQlmb3IgKG9mZiA9IDA7IG9mZiA8IGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplOworCQkgICAgIG9mZiArPSBQQUdFX1NJWkUpCisJCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UobWVtICsgb2ZmKSk7CisJCWtmcmVlKGZoLT5idWZmZXJzLmJ1ZmZlcltpXS52NGwuZmJ1ZmZlcik7CisJCWZoLT5idWZmZXJzLmJ1ZmZlcltpXS52NGwuZmJ1ZmZlciA9IE5VTEw7CiAJfQogCi0JZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JZmgtPnY0bF9idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkID0gMDsKKwlmaC0+YnVmZmVycy5hbGxvY2F0ZWQgPSAwOwogfQogCiAvKgogICogICBBbGxvY2F0ZSB0aGUgTUpQRUcgZ3JhYiBidWZmZXJzLgogICoKLSAqICAgSWYgdGhlIHJlcXVlc3RlZCBidWZmZXIgc2l6ZSBpcyBzbWFsbGVyIHRoYW4gTUFYX0tNQUxMT0NfTUVNLAotICogICBrbWFsbG9jIGlzIHVzZWQgdG8gcmVxdWVzdCBhIHBoeXNpY2FsbHkgY29udGlndW91cyBhcmVhLAotICogICBlbHNlIHdlIGFsbG9jYXRlIHRoZSBtZW1vcnkgaW4gZnJhbWdlbnRzIHdpdGggZ2V0X3plcm9lZF9wYWdlLgotICoKICAqICAgSWYgYSBOYXRvbWEgY2hpcHNldCBpcyBwcmVzZW50IGFuZCB0aGlzIGlzIGEgcmV2aXNpb24gMSB6cjM2MDU3LAogICogICBlYWNoIE1KUEVHIGJ1ZmZlciBuZWVkcyB0byBiZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMuCiAgKiAgIChSSjogVGhpcyBzdGF0ZW1lbnQgaXMgZnJvbSBEYXZlIFBlcmtzJyBvcmlnaW5hbCBkcml2ZXIsCiAgKiAgIEkgY291bGQgbmV2ZXIgY2hlY2sgaXQgYmVjYXVzZSBJIGhhdmUgYSB6cjM2MDY3KQotICogICBUaGUgZHJpdmVyIGNhcmVzIGFib3V0IHRoaXMgYmVjYXVzZSBpdCByZWR1Y2VzIHRoZSBidWZmZXIKLSAqICAgc2l6ZSB0byBNQVhfS01BTExPQ19NRU0gaW4gdGhhdCBjYXNlICh3aGljaCBmb3JjZXMgY29udGlndW91cyBhbGxvY2F0aW9uKS4KICAqCiAgKiAgIFJKOiBUaGUgY29udGVudHMgZ3JhYiBidWZmZXJzIG5lZWRzIG5ldmVyIGJlIGFjY2Vzc2VkIGluIHRoZSBkcml2ZXIuCiAgKiAgICAgICBUaGVyZWZvcmUgdGhlcmUgaXMgbm8gbmVlZCB0byBhbGxvY2F0ZSB0aGVtIHdpdGggdm1hbGxvYyBpbiBvcmRlcgpAQCAtNDU4LDE2MiArMzA3LDEyOCBAQAogICogICAgICAgYW5kIGZyYWdtZW50IGJ1ZmZlcnMgYXJlIG5vdCBsaXR0bGUtZW5kaWFuLgogICovCiAKLXN0YXRpYyBpbnQKLWpwZ19mYnVmZmVyX2FsbG9jIChzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyBpbnQganBnX2ZidWZmZXJfYWxsb2Moc3RydWN0IHpvcmFuX2ZoICpmaCkKIHsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAJaW50IGksIGosIG9mZjsKLQl1bnNpZ25lZCBsb25nIG1lbTsKKwl1OCAqbWVtOwogCi0JLyogd2UgbWlnaHQgaGF2ZSBvbGQgYnVmZmVycyBseWluZyBhcm91bmQgKi8KLQlpZiAoZmgtPmpwZ19idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkKSB7Ci0JCWpwZ19mYnVmZmVyX2ZyZWUoZmlsZSk7Ci0JfQotCi0JZm9yIChpID0gMDsgaSA8IGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVyczsgaSsrKSB7Ci0JCWlmIChmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiKQorCWZvciAoaSA9IDA7IGkgPCBmaC0+YnVmZmVycy5udW1fYnVmZmVyczsgaSsrKSB7CisJCWlmIChmaC0+YnVmZmVycy5idWZmZXJbaV0uanBnLmZyYWdfdGFiKQogCQkJZHByaW50aygyLAogCQkJCUtFUk5fV0FSTklORwotCQkJCSIlczoganBnX2ZidWZmZXJfYWxsb2MoKSAtIGJ1ZmZlciAlZCBhbGxyZWFkeSBhbGxvY2F0ZWQhP1xuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7CisJCQkJIiVzOiAlcyAtIGJ1ZmZlciAlZCBhbHJlYWR5IGFsbG9jYXRlZCE/XG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgaSk7CiAKIAkJLyogQWxsb2NhdGUgZnJhZ21lbnQgdGFibGUgZm9yIHRoaXMgYnVmZmVyICovCiAKLQkJbWVtID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCQltZW0gPSAodm9pZCAqKWdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKIAkJaWYgKG1lbSA9PSAwKSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKLQkJCQkiJXM6IGpwZ19mYnVmZmVyX2FsbG9jKCkgLSBnZXRfemVyb2VkX3BhZ2UgKGZyYWdfdGFiKSBmYWlsZWQgZm9yIGJ1ZmZlciAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7Ci0JCQlqcGdfZmJ1ZmZlcl9mcmVlKGZpbGUpOworCQkJCSIlczogJXMgLSBnZXRfemVyb2VkX3BhZ2UgKGZyYWdfdGFiKSBmYWlsZWQgZm9yIGJ1ZmZlciAlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIGkpOworCQkJanBnX2ZidWZmZXJfZnJlZShmaCk7CiAJCQlyZXR1cm4gLUVOT0JVRlM7CiAJCX0KLQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYiA9IChfX2xlMzIgKikgbWVtOwotCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiX2J1cyA9Ci0JCSAgICB2aXJ0X3RvX2J1cygodm9pZCAqKSBtZW0pOworCQlmaC0+YnVmZmVycy5idWZmZXJbaV0uanBnLmZyYWdfdGFiID0gKF9fbGUzMiAqKW1lbTsKKwkJZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLmpwZy5mcmFnX3RhYl9idXMgPSB2aXJ0X3RvX2J1cyhtZW0pOwogCi0JCS8vaWYgKGFsbG9jX2NvbnRpZykgewotCQlpZiAoZmgtPmpwZ19idWZmZXJzLm5lZWRfY29udGlndW91cykgewotCQkJbWVtID0KLQkJCSAgICAodW5zaWduZWQgbG9uZykga21hbGxvYyhmaC0+anBnX2J1ZmZlcnMuCi0JCQkJCQkgICAgYnVmZmVyX3NpemUsCi0JCQkJCQkgICAgR0ZQX0tFUk5FTCk7Ci0JCQlpZiAobWVtID09IDApIHsKKwkJaWYgKGZoLT5idWZmZXJzLm5lZWRfY29udGlndW91cykgeworCQkJbWVtID0ga21hbGxvYyhmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSwgR0ZQX0tFUk5FTCk7CisJCQlpZiAobWVtID09IE5VTEwpIHsKIAkJCQlkcHJpbnRrKDEsCiAJCQkJCUtFUk5fRVJSCi0JCQkJCSIlczoganBnX2ZidWZmZXJfYWxsb2MoKSAtIGttYWxsb2MgZmFpbGVkIGZvciBidWZmZXIgJWRcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpLCBpKTsKLQkJCQlqcGdfZmJ1ZmZlcl9mcmVlKGZpbGUpOworCQkJCQkiJXM6ICVzIC0ga21hbGxvYyBmYWlsZWQgZm9yIGJ1ZmZlciAlZFxuIiwKKwkJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBpKTsKKwkJCQlqcGdfZmJ1ZmZlcl9mcmVlKGZoKTsKIAkJCQlyZXR1cm4gLUVOT0JVRlM7CiAJCQl9Ci0JCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzBdID0KLQkJCSAgICBjcHVfdG9fbGUzMih2aXJ0X3RvX2J1cygodm9pZCAqKSBtZW0pKTsKLQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMV0gPQotCQkJICAgIGNwdV90b19sZTMyKCgoZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplIC8gNCkgPDwgMSkgfCAxKTsKLQkJCWZvciAob2ZmID0gMDsgb2ZmIDwgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplOwotCQkJICAgICBvZmYgKz0gUEFHRV9TSVpFKQotCQkJCVNldFBhZ2VSZXNlcnZlZChNQVBfTlIobWVtICsgb2ZmKSk7CisJCQlmaC0+YnVmZmVycy5idWZmZXJbaV0uanBnLmZyYWdfdGFiWzBdID0KKwkJCQljcHVfdG9fbGUzMih2aXJ0X3RvX2J1cyhtZW0pKTsKKwkJCWZoLT5idWZmZXJzLmJ1ZmZlcltpXS5qcGcuZnJhZ190YWJbMV0gPQorCQkJCWNwdV90b19sZTMyKChmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSA+PiAxKSB8IDEpOworCQkJZm9yIChvZmYgPSAwOyBvZmYgPCBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZTsgb2ZmICs9IFBBR0VfU0laRSkKKwkJCQlTZXRQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKG1lbSArIG9mZikpOwogCQl9IGVsc2UgewotCQkJLyoganBnX2J1ZnNpemUgaXMgYWxscmVheSBwYWdlIGFsaWduZWQgKi8KLQkJCWZvciAoaiA9IDA7Ci0JCQkgICAgIGogPCBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgLyBQQUdFX1NJWkU7Ci0JCQkgICAgIGorKykgewotCQkJCW1lbSA9IGdldF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKLQkJCQlpZiAobWVtID09IDApIHsKKwkJCS8qIGpwZ19idWZzaXplIGlzIGFscmVhZHkgcGFnZSBhbGlnbmVkICovCisJCQlmb3IgKGogPSAwOyBqIDwgZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemUgLyBQQUdFX1NJWkU7IGorKykgeworCQkJCW1lbSA9ICh2b2lkICopZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpOworCQkJCWlmIChtZW0gPT0gTlVMTCkgewogCQkJCQlkcHJpbnRrKDEsCiAJCQkJCQlLRVJOX0VSUgotCQkJCQkJIiVzOiBqcGdfZmJ1ZmZlcl9hbGxvYygpIC0gZ2V0X3plcm9lZF9wYWdlIGZhaWxlZCBmb3IgYnVmZmVyICVkXG4iLAotCQkJCQkJWlJfREVWTkFNRSh6ciksIGkpOwotCQkJCQlqcGdfZmJ1ZmZlcl9mcmVlKGZpbGUpOworCQkJCQkJIiVzOiAlcyAtIGdldF96ZXJvZWRfcGFnZSBmYWlsZWQgZm9yIGJ1ZmZlciAlZFxuIiwKKwkJCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgaSk7CisJCQkJCWpwZ19mYnVmZmVyX2ZyZWUoZmgpOwogCQkJCQlyZXR1cm4gLUVOT0JVRlM7CiAJCQkJfQogCi0JCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlsyICogal0gPQotCQkJCSAgICBjcHVfdG9fbGUzMih2aXJ0X3RvX2J1cygodm9pZCAqKSBtZW0pKTsKLQkJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzIgKiBqICsKLQkJCQkJCQkJICAgMV0gPQotCQkJCSAgICBjcHVfdG9fbGUzMigoUEFHRV9TSVpFIC8gNCkgPDwgMSk7Ci0JCQkJU2V0UGFnZVJlc2VydmVkKE1BUF9OUihtZW0pKTsKKwkJCQlmaC0+YnVmZmVycy5idWZmZXJbaV0uanBnLmZyYWdfdGFiWzIgKiBqXSA9CisJCQkJCWNwdV90b19sZTMyKHZpcnRfdG9fYnVzKG1lbSkpOworCQkJCWZoLT5idWZmZXJzLmJ1ZmZlcltpXS5qcGcuZnJhZ190YWJbMiAqIGogKyAxXSA9CisJCQkJCWNwdV90b19sZTMyKChQQUdFX1NJWkUgPj4gMikgPDwgMSk7CisJCQkJU2V0UGFnZVJlc2VydmVkKHZpcnRfdG9fcGFnZShtZW0pKTsKIAkJCX0KIAotCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlsyICogaiAtIDFdIHw9IGNwdV90b19sZTMyKDEpOworCQkJZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLmpwZy5mcmFnX3RhYlsyICogaiAtIDFdIHw9IGNwdV90b19sZTMyKDEpOwogCQl9CiAJfQogCiAJZHByaW50ayg0LAotCQlLRVJOX0RFQlVHICIlczoganBnX2ZidWZmZXJfYWxsb2MoKSAtICVkIEtCIGFsbG9jYXRlZFxuIiwKLQkJWlJfREVWTkFNRSh6ciksCi0JCShmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMgKgotCQkgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplKSA+PiAxMCk7CisJCUtFUk5fREVCVUcgIiVzOiAlcyAtICVkIEtCIGFsbG9jYXRlZFxuIiwKKwkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLAorCQkoZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnMgKiBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSkgPj4gMTApOwogCi0JZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDE7CisJZmgtPmJ1ZmZlcnMuYWxsb2NhdGVkID0gMTsKIAogCXJldHVybiAwOwogfQogCiAvKiBmcmVlIHRoZSBNSlBFRyBncmFiIGJ1ZmZlcnMgKi8KLXN0YXRpYyB2b2lkCi1qcGdfZmJ1ZmZlcl9mcmVlIChzdHJ1Y3QgZmlsZSAqZmlsZSkKK3N0YXRpYyB2b2lkIGpwZ19mYnVmZmVyX2ZyZWUoc3RydWN0IHpvcmFuX2ZoICpmaCkKIHsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAJaW50IGksIGosIG9mZjsKIAl1bnNpZ25lZCBjaGFyICptZW07CisJX19sZTMyIGZyYWdfdGFiOworCXN0cnVjdCB6b3Jhbl9idWZmZXIgKmJ1ZmZlcjsKIAotCWRwcmludGsoNCwgS0VSTl9ERUJVRyAiJXM6IGpwZ19mYnVmZmVyX2ZyZWUoKVxuIiwgWlJfREVWTkFNRSh6cikpOworCWRwcmludGsoNCwgS0VSTl9ERUJVRyAiJXM6ICVzXG4iLCBaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCi0JZm9yIChpID0gMDsgaSA8IGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVyczsgaSsrKSB7Ci0JCWlmICghZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYikKKwlmb3IgKGkgPSAwLCBidWZmZXIgPSAmZmgtPmJ1ZmZlcnMuYnVmZmVyWzBdOworCSAgICAgaSA8IGZoLT5idWZmZXJzLm51bV9idWZmZXJzOyBpKyssIGJ1ZmZlcisrKSB7CisJCWlmICghYnVmZmVyLT5qcGcuZnJhZ190YWIpCiAJCQljb250aW51ZTsKIAotCQkvL2lmIChhbGxvY19jb250aWcpIHsKLQkJaWYgKGZoLT5qcGdfYnVmZmVycy5uZWVkX2NvbnRpZ3VvdXMpIHsKLQkJCWlmIChmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzBdKSB7Ci0JCQkJbWVtID0gKHVuc2lnbmVkIGNoYXIgKikgYnVzX3RvX3ZpcnQobGUzMl90b19jcHUoCi0JCQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMF0pKTsKLQkJCQlmb3IgKG9mZiA9IDA7Ci0JCQkJICAgICBvZmYgPCBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCQkJICAgICBvZmYgKz0gUEFHRV9TSVpFKQotCQkJCQlDbGVhclBhZ2VSZXNlcnZlZChNQVBfTlIKLQkJCQkJCQkgIChtZW0gKyBvZmYpKTsKKwkJaWYgKGZoLT5idWZmZXJzLm5lZWRfY29udGlndW91cykgeworCQkJZnJhZ190YWIgPSBidWZmZXItPmpwZy5mcmFnX3RhYlswXTsKKworCQkJaWYgKGZyYWdfdGFiKSB7CisJCQkJbWVtID0gYnVzX3RvX3ZpcnQobGUzMl90b19jcHUoZnJhZ190YWIpKTsKKwkJCQlmb3IgKG9mZiA9IDA7IG9mZiA8IGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplOyBvZmYgKz0gUEFHRV9TSVpFKQorCQkJCQlDbGVhclBhZ2VSZXNlcnZlZCh2aXJ0X3RvX3BhZ2UobWVtICsgb2ZmKSk7CiAJCQkJa2ZyZWUobWVtKTsKLQkJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzBdID0gMDsKLQkJCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiWzFdID0gMDsKKwkJCQlidWZmZXItPmpwZy5mcmFnX3RhYlswXSA9IDA7CisJCQkJYnVmZmVyLT5qcGcuZnJhZ190YWJbMV0gPSAwOwogCQkJfQogCQl9IGVsc2UgewotCQkJZm9yIChqID0gMDsKLQkJCSAgICAgaiA8IGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSAvIFBBR0VfU0laRTsKLQkJCSAgICAgaisrKSB7Ci0JCQkJaWYgKCFmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLgotCQkJCSAgICBmcmFnX3RhYlsyICogal0pCisJCQlmb3IgKGogPSAwOyBqIDwgZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemUgLyBQQUdFX1NJWkU7IGorKykgeworCQkJCWZyYWdfdGFiID0gYnVmZmVyLT5qcGcuZnJhZ190YWJbMiAqIGpdOworCisJCQkJaWYgKCFmcmFnX3RhYikKIAkJCQkJYnJlYWs7Ci0JCQkJQ2xlYXJQYWdlUmVzZXJ2ZWQoTUFQX05SCi0JCQkJCQkgIChidXNfdG9fdmlydAotCQkJCQkJICAgKGxlMzJfdG9fY3B1Ci0JCQkJCQkgICAgKGZoLT5qcGdfYnVmZmVycy4KLQkJCQkJCSAgICAgYnVmZmVyW2ldLmZyYWdfdGFiWzIgKgotCQkJCQkJCQkgICAgICAgal0pKSkpOwotCQkJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykKLQkJCQkJICBidXNfdG9fdmlydAotCQkJCQkJICAobGUzMl90b19jcHUKLQkJCQkJCSAgIChmaC0+anBnX2J1ZmZlcnMuCi0JCQkJCQkgICAgICBidWZmZXJbaV0uCi0JCQkJCQkgICAgICBmcmFnX3RhYlsyICogal0pKSk7Ci0JCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5mcmFnX3RhYlsyICogal0gPQotCQkJCSAgICAwOwotCQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uZnJhZ190YWJbMiAqIGogKwotCQkJCQkJCQkgICAxXSA9IDA7CisJCQkJQ2xlYXJQYWdlUmVzZXJ2ZWQodmlydF90b19wYWdlKGJ1c190b192aXJ0KGxlMzJfdG9fY3B1KGZyYWdfdGFiKSkpKTsKKwkJCQlmcmVlX3BhZ2UoKHVuc2lnbmVkIGxvbmcpYnVzX3RvX3ZpcnQobGUzMl90b19jcHUoZnJhZ190YWIpKSk7CisJCQkJYnVmZmVyLT5qcGcuZnJhZ190YWJbMiAqIGpdID0gMDsKKwkJCQlidWZmZXItPmpwZy5mcmFnX3RhYlsyICogaiArIDFdID0gMDsKIAkJCX0KIAkJfQogCi0JCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS4KLQkJCSAgZnJhZ190YWIpOwotCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLmZyYWdfdGFiID0gTlVMTDsKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25nKWJ1ZmZlci0+anBnLmZyYWdfdGFiKTsKKwkJYnVmZmVyLT5qcGcuZnJhZ190YWIgPSBOVUxMOwogCX0KIAotCWZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwotCWZoLT5qcGdfYnVmZmVycy5yZWFkeV90b19iZV9mcmVlZCA9IDA7CisJZmgtPmJ1ZmZlcnMuYWxsb2NhdGVkID0gMDsKIH0KIAogLyoKQEAgLTYyMSwxMiArNDM2LDExIEBACiAgKi8KIAogc3RhdGljIGludAotem9yYW5fdjRsX3NldF9mb3JtYXQgKHN0cnVjdCBmaWxlICAgICAgICAgICAgICAgKmZpbGUsCit6b3Jhbl92NGxfc2V0X2Zvcm1hdCAoc3RydWN0IHpvcmFuX2ZoICAgICAgICAgICAqZmgsCiAJCSAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIHdpZHRoLAogCQkgICAgICBpbnQgICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQsCiAJCSAgICAgIGNvbnN0IHN0cnVjdCB6b3Jhbl9mb3JtYXQgKmZvcm1hdCkKIHsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAJaW50IGJwcDsKIApAQCAtNjM2LDE5ICs0NTAsMTkgQEAKIAkgICAgaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQgfHwgd2lkdGggPiBCVVpfTUFYX1dJRFRIKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHY0bF9zZXRfZm9ybWF0KCkgLSB3cm9uZyBmcmFtZSBzaXplICglZHglZClcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgd2lkdGgsIGhlaWdodCk7CisJCQkiJXM6ICVzIC0gd3JvbmcgZnJhbWUgc2l6ZSAoJWR4JWQpXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCB3aWR0aCwgaGVpZ2h0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCiAJYnBwID0gKGZvcm1hdC0+ZGVwdGggKyA3KSAvIDg7CiAKIAkvKiBDaGVjayBhZ2FpbnN0IGF2YWlsYWJsZSBidWZmZXIgc2l6ZSAqLwotCWlmIChoZWlnaHQgKiB3aWR0aCAqIGJwcCA+IGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSkgeworCWlmIChoZWlnaHQgKiB3aWR0aCAqIGJwcCA+IGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHY0bF9zZXRfZm9ybWF0KCkgLSB2aWRlbyBidWZmZXIgc2l6ZSAoJWQga0IpIGlzIHRvbyBzbWFsbFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemUgPj4gMTApOworCQkJIiVzOiAlcyAtIHZpZGVvIGJ1ZmZlciBzaXplICglZCBrQikgaXMgdG9vIHNtYWxsXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSA+PiAxMCk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNjU3LDggKzQ3MSw4IEBACiAJaWYgKChicHAgPT0gMiAmJiAod2lkdGggJiAxKSkgfHwgKGJwcCA9PSAzICYmICh3aWR0aCAmIDMpKSkgewogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiB2NGxfc2V0X2Zvcm1hdCgpIC0gd3JvbmcgZnJhbWUgYWxpbmdtZW50XG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJIiVzOiAlcyAtIHdyb25nIGZyYW1lIGFsaWdubWVudFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApAQCAtNjcwLDQzICs0ODQsNDAgQEAKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludAotem9yYW5fdjRsX3F1ZXVlX2ZyYW1lIChzdHJ1Y3QgZmlsZSAqZmlsZSwKLQkJICAgICAgIGludCAgICAgICAgICBudW0pCitzdGF0aWMgaW50IHpvcmFuX3Y0bF9xdWV1ZV9mcmFtZShzdHJ1Y3Qgem9yYW5fZmggKmZoLCBpbnQgbnVtKQogewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKIAl1bnNpZ25lZCBsb25nIGZsYWdzOwogCWludCByZXMgPSAwOwogCi0JaWYgKCFmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkKSB7CisJaWYgKCFmaC0+YnVmZmVycy5hbGxvY2F0ZWQpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogdjRsX3F1ZXVlX2ZyYW1lKCkgLSBidWZmZXJzIG5vdCB5ZXQgYWxsb2NhdGVkXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJIiVzOiAlcyAtIGJ1ZmZlcnMgbm90IHlldCBhbGxvY2F0ZWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXMgPSAtRU5PTUVNOwogCX0KIAogCS8qIE5vIGdyYWJiaW5nIG91dHNpZGUgdGhlIGJ1ZmZlciByYW5nZSEgKi8KLQlpZiAobnVtID49IGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVycyB8fCBudW0gPCAwKSB7CisJaWYgKG51bSA+PSBmaC0+YnVmZmVycy5udW1fYnVmZmVycyB8fCBudW0gPCAwKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHY0bF9xdWV1ZV9mcmFtZSgpIC0gYnVmZmVyICVkIGlzIG91dCBvZiByYW5nZVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBudW0pOworCQkJIiVzOiAlcyAtIGJ1ZmZlciAlZCBpcyBvdXQgb2YgcmFuZ2VcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIG51bSk7CiAJCXJlcyA9IC1FSU5WQUw7CiAJfQogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwogCi0JaWYgKGZoLT52NGxfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgeworCWlmIChmaC0+YnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgewogCQlpZiAoenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7Ci0JCQl6ci0+djRsX2J1ZmZlcnMgPSBmaC0+djRsX2J1ZmZlcnM7Ci0JCQlmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fQUNUSVZFOworCQkJenItPnY0bF9idWZmZXJzID0gZmgtPmJ1ZmZlcnM7CisJCQlmaC0+YnVmZmVycy5hY3RpdmUgPSBaT1JBTl9BQ1RJVkU7CiAJCX0gZWxzZSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKLQkJCQkiJXM6IHY0bF9xdWV1ZV9mcmFtZSgpIC0gYW5vdGhlciBzZXNzaW9uIGlzIGFscmVhZHkgY2FwdHVyaW5nXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQkiJXM6ICVzIC0gYW5vdGhlciBzZXNzaW9uIGlzIGFscmVhZHkgY2FwdHVyaW5nXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQlyZXMgPSAtRUJVU1k7CiAJCX0KIAl9CkBAIC03MTcsNyArNTI4LDcgQEAKIAkJZGVmYXVsdDoKIAkJY2FzZSBCVVpfU1RBVEVfUEVORDoKIAkJCWlmICh6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKLQkJCQlmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKKwkJCQlmaC0+YnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOwogCQkJCXpyLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwogCQkJfQogCQkJcmVzID0gLUVCVVNZOwkvKiB3aGF0IGFyZSB5b3UgZG9pbmc/ICovCkBAIC03MjUsMTkgKzUzNiwxNyBAQAogCQljYXNlIEJVWl9TVEFURV9ET05FOgogCQkJZHByaW50aygyLAogCQkJCUtFUk5fV0FSTklORwotCQkJCSIlczogdjRsX3F1ZXVlX2ZyYW1lKCkgLSBxdWV1ZWluZyBidWZmZXIgJWQgaW4gc3RhdGUgRE9ORSE/XG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBudW0pOworCQkJCSIlczogJXMgLSBxdWV1ZWluZyBidWZmZXIgJWQgaW4gc3RhdGUgRE9ORSE/XG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgbnVtKTsKIAkJY2FzZSBCVVpfU1RBVEVfVVNFUjoKIAkJCS8qIHNpbmNlIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSB1bnVzZWQgYnVmZmVyIHRoZXJlJ3Mgcm9vbSBmb3IgYXQgbGVhc3QKIAkJCSAqIG9uZSBtb3JlIHBlbmRbXSBlbnRyeSAqLwotCQkJenItPnY0bF9wZW5kW3pyLT52NGxfcGVuZF9oZWFkKysgJgotCQkJCQlWNExfTUFTS19GUkFNRV0gPSBudW07CisJCQl6ci0+djRsX3BlbmRbenItPnY0bF9wZW5kX2hlYWQrKyAmIFY0TF9NQVNLX0ZSQU1FXSA9IG51bTsKIAkJCXpyLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZSA9IEJVWl9TVEFURV9QRU5EOwogCQkJenItPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dLmJzLmxlbmd0aCA9CiAJCQkgICAgZmgtPnY0bF9zZXR0aW5ncy5ieXRlc3BlcmxpbmUgKgogCQkJICAgIHpyLT52NGxfc2V0dGluZ3MuaGVpZ2h0OwotCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dID0KLQkJCSAgICB6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV07CisJCQlmaC0+YnVmZmVycy5idWZmZXJbbnVtXSA9IHpyLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXTsKIAkJCWJyZWFrOwogCQl9CiAJfQpAQCAtNzQ1LDY1ICs1NTQsNyBAQAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwogCiAJaWYgKCFyZXMgJiYgenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKQotCQl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0gZmgtPnY0bF9idWZmZXJzLmFjdGl2ZTsKLQotCXJldHVybiByZXM7Ci19Ci0KLXN0YXRpYyBpbnQKLXY0bF9ncmFiIChzdHJ1Y3QgZmlsZSAgICAgICAqZmlsZSwKLQkgIHN0cnVjdCB2aWRlb19tbWFwICptcCkKLXsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwotCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7Ci0JaW50IHJlcyA9IDAsIGk7Ci0KLQlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykgewotCQlpZiAoem9yYW5fZm9ybWF0c1tpXS5wYWxldHRlID09IG1wLT5mb3JtYXQgJiYKLQkJICAgIHpvcmFuX2Zvcm1hdHNbaV0uZmxhZ3MgJiBaT1JBTl9GT1JNQVRfQ0FQVFVSRSAmJgotCQkgICAgISh6b3Jhbl9mb3JtYXRzW2ldLmZsYWdzICYgWk9SQU5fRk9STUFUX0NPTVBSRVNTRUQpKQotCQkJYnJlYWs7Ci0JfQotCWlmIChpID09IE5VTV9GT1JNQVRTIHx8IHpvcmFuX2Zvcm1hdHNbaV0uZGVwdGggPT0gMCkgewotCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiB2NGxfZ3JhYigpIC0gd3JvbmcgYnl0ZXMtcGVyLXBpeGVsIGZvcm1hdFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0JLyoKLQkgKiBUbyBtaW5pbWl6ZSB0aGUgdGltZSBzcGVudCBpbiB0aGUgSVJRIHJvdXRpbmUsIHdlIGF2b2lkIHNldHRpbmcgdXAKLQkgKiB0aGUgdmlkZW8gZnJvbnQgZW5kIHRoZXJlLgotCSAqIElmIHRoaXMgZ3JhYiBoYXMgZGlmZmVyZW50IHBhcmFtZXRlcnMgZnJvbSBhIHJ1bm5pbmcgc3RyZWFtaW5nIGNhcHR1cmUKLQkgKiB3ZSBzdG9wIHRoZSBzdHJlYW1pbmcgY2FwdHVyZSBhbmQgc3RhcnQgaXQgb3ZlciBhZ2Fpbi4KLQkgKi8KLQlpZiAoenItPnY0bF9tZW1ncmFiX2FjdGl2ZSAmJgotCSAgICAoenItPnY0bF9zZXR0aW5ncy53aWR0aCAhPSBtcC0+d2lkdGggfHwKLQkgICAgIHpyLT52NGxfc2V0dGluZ3MuaGVpZ2h0ICE9IG1wLT5oZWlnaHQgfHwKLQkgICAgIHpyLT52NGxfc2V0dGluZ3MuZm9ybWF0LT5wYWxldHRlICE9IG1wLT5mb3JtYXQpKSB7Ci0JCXJlcyA9IHdhaXRfZ3JhYl9wZW5kaW5nKHpyKTsKLQkJaWYgKHJlcykKLQkJCXJldHVybiByZXM7Ci0JfQotCWlmICgocmVzID0gem9yYW5fdjRsX3NldF9mb3JtYXQoZmlsZSwKLQkJCQkJbXAtPndpZHRoLAotCQkJCQltcC0+aGVpZ2h0LAotCQkJCQkmem9yYW5fZm9ybWF0c1tpXSkpKQotCQlyZXR1cm4gcmVzOwotCXpyLT52NGxfc2V0dGluZ3MgPSBmaC0+djRsX3NldHRpbmdzOwotCi0JLyogcXVldWUgdGhlIGZyYW1lIGluIHRoZSBwZW5kaW5nIHF1ZXVlICovCi0JaWYgKChyZXMgPSB6b3Jhbl92NGxfcXVldWVfZnJhbWUoZmlsZSwgbXAtPmZyYW1lKSkpIHsKLQkJZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7Ci0JCXJldHVybiByZXM7Ci0JfQotCi0JLyogcHV0IHRoZSAzNjA1NyBpbnRvIGZyYW1lIGdyYWJiaW5nIG1vZGUgKi8KLQlpZiAoIXJlcyAmJiAhenItPnY0bF9tZW1ncmFiX2FjdGl2ZSkKLQkJenIzNjA1N19zZXRfbWVtZ3JhYih6ciwgMSk7Ci0KLQkvL2RwcmludGsoNCwgS0VSTl9JTkZPICIlczogRnJhbWUgZ3JhYiAzLi4uXG4iLCBaUl9ERVZOQU1FKHpyKSk7CisJCXpyLT52NGxfYnVmZmVycy5hY3RpdmUgPSBmaC0+YnVmZmVycy5hY3RpdmU7CiAKIAlyZXR1cm4gcmVzOwogfQpAQCAtODEyLDI3ICs1NjMsMjQgQEAKICAqIFN5bmMgb24gYSBWNEwgYnVmZmVyCiAgKi8KIAotc3RhdGljIGludAotdjRsX3N5bmMgKHN0cnVjdCBmaWxlICpmaWxlLAotCSAgaW50ICAgICAgICAgIGZyYW1lKQorc3RhdGljIGludCB2NGxfc3luYyhzdHJ1Y3Qgem9yYW5fZmggKmZoLCBpbnQgZnJhbWUpCiB7Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlpZiAoZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CisJaWYgKGZoLT5idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHY0bF9zeW5jKCkgLSBubyBncmFiIGFjdGl2ZSBmb3IgdGhpcyBzZXNzaW9uXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJIiVzOiAlcyAtIG5vIGdyYWIgYWN0aXZlIGZvciB0aGlzIHNlc3Npb25cbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAkvKiBjaGVjayBwYXNzZWQtaW4gZnJhbWUgbnVtYmVyICovCi0JaWYgKGZyYW1lID49IGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVycyB8fCBmcmFtZSA8IDApIHsKKwlpZiAoZnJhbWUgPj0gZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnMgfHwgZnJhbWUgPCAwKSB7CiAJCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSICIlczogdjRsX3N5bmMoKSAtIGZyYW1lICVkIGlzIGludmFsaWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgZnJhbWUpOworCQkJS0VSTl9FUlIgIiVzOiAlcyAtIGZyYW1lICVkIGlzIGludmFsaWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIGZyYW1lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC04NDAsMTUgKzU4OCwxNCBAQAogCWlmICh6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZSA9PSBCVVpfU1RBVEVfVVNFUikgewogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiB2NGxfc3luYygpIC0gYXR0ZW1wdCB0byBzeW5jIG9uIGEgYnVmZmVyIHdoaWNoIHdhcyBub3QgcXVldWVkP1xuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCSIlczogJXMgLSBhdHRlbXB0IHRvIHN5bmMgb24gYSBidWZmZXIgd2hpY2ggd2FzIG5vdCBxdWV1ZWQ/XG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FUFJPVE87CiAJfQogCiAJLyogd2FpdCBvbiB0aGlzIGJ1ZmZlciB0byBnZXQgcmVhZHkgKi8KIAlpZiAoIXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHpyLT52NGxfY2FwcSwKLQkJCQkoenItPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGUgIT0gQlVaX1NUQVRFX1BFTkQpLAotCQkJCTEwKkhaKSkKKwkJKHpyLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlICE9IEJVWl9TVEFURV9QRU5EKSwgMTAqSFopKQogCQlyZXR1cm4gLUVUSU1FOwogCWlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSkKIAkJcmV0dXJuIC1FUkVTVEFSVFNZUzsKQEAgLTg1NiwxMSArNjAzLDExIEBACiAJLyogYnVmZmVyIHNob3VsZCBub3cgYmUgaW4gQlVaX1NUQVRFX0RPTkUgKi8KIAlpZiAoenItPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGUgIT0gQlVaX1NUQVRFX0RPTkUpCiAJCWRwcmludGsoMiwKLQkJCUtFUk5fRVJSICIlczogdjRsX3N5bmMoKSAtIGludGVybmFsIHN0YXRlIGVycm9yXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJS0VSTl9FUlIgIiVzOiAlcyAtIGludGVybmFsIHN0YXRlIGVycm9yXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAogCXpyLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlID0gQlVaX1NUQVRFX1VTRVI7Ci0JZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV0gPSB6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXTsKKwlmaC0+YnVmZmVycy5idWZmZXJbZnJhbWVdID0genItPnY0bF9idWZmZXJzLmJ1ZmZlcltmcmFtZV07CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CiAKQEAgLTg2OCw4ICs2MTUsNyBAQAogCWlmICh6ci0+djRsX3BlbmRfdGFpbCA9PSB6ci0+djRsX3BlbmRfaGVhZCkgewogCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAwKTsKIAkJaWYgKHpyLT52NGxfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fQUNUSVZFKSB7Ci0JCQlmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0genItPnY0bF9idWZmZXJzLmFjdGl2ZSA9Ci0JCQkgICAgWk9SQU5fRlJFRTsKKwkJCWZoLT5idWZmZXJzLmFjdGl2ZSA9IHpyLT52NGxfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOwogCQkJenItPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDA7CiAJCX0KIAl9CkBAIC04ODMsMzEgKzYyOSwyOCBAQAogICogICBRdWV1ZSBhIE1KUEVHIGJ1ZmZlciBmb3IgY2FwdHVyZS9wbGF5YmFjawogICovCiAKLXN0YXRpYyBpbnQKLXpvcmFuX2pwZ19xdWV1ZV9mcmFtZSAoc3RydWN0IGZpbGUgICAgICAgICAgKmZpbGUsCi0JCSAgICAgICBpbnQgICAgICAgICAgICAgICAgICAgbnVtLAotCQkgICAgICAgZW51bSB6b3Jhbl9jb2RlY19tb2RlIG1vZGUpCitzdGF0aWMgaW50IHpvcmFuX2pwZ19xdWV1ZV9mcmFtZShzdHJ1Y3Qgem9yYW5fZmggKmZoLCBpbnQgbnVtLAorCQkJCSBlbnVtIHpvcmFuX2NvZGVjX21vZGUgbW9kZSkKIHsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgcmVzID0gMDsKIAogCS8qIENoZWNrIGlmIGJ1ZmZlcnMgYXJlIGFsbG9jYXRlZCAqLwotCWlmICghZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCkgeworCWlmICghZmgtPmJ1ZmZlcnMuYWxsb2NhdGVkKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IGpwZ19xdWV1ZV9mcmFtZSgpIC0gYnVmZmVycyBub3QgeWV0IGFsbG9jYXRlZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCSIlczogJXMgLSBidWZmZXJzIG5vdCB5ZXQgYWxsb2NhdGVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQogCiAJLyogTm8gZ3JhYmJpbmcgb3V0c2lkZSB0aGUgYnVmZmVyIHJhbmdlISAqLwotCWlmIChudW0gPj0gZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzIHx8IG51bSA8IDApIHsKKwlpZiAobnVtID49IGZoLT5idWZmZXJzLm51bV9idWZmZXJzIHx8IG51bSA8IDApIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczoganBnX3F1ZXVlX2ZyYW1lKCkgLSBidWZmZXIgJWQgb3V0IG9mIHJhbmdlXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIG51bSk7CisJCQkiJXM6ICVzIC0gYnVmZmVyICVkIG91dCBvZiByYW5nZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgbnVtKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCkBAIC05MTgsMjAgKzY2MSwyMCBAQAogCQkvKiB3cm9uZyBjb2RlYyBtb2RlIGFjdGl2ZSAtIGludmFsaWQgKi8KIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczoganBnX3F1ZXVlX2ZyYW1lKCkgLSBjb2RlYyBpbiB3cm9uZyBtb2RlXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJIiVzOiAlcyAtIGNvZGVjIGluIHdyb25nIG1vZGVcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQlpZiAoZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CisJaWYgKGZoLT5idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CiAJCWlmICh6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKLQkJCXpyLT5qcGdfYnVmZmVycyA9IGZoLT5qcGdfYnVmZmVyczsKLQkJCWZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9BQ1RJVkU7CisJCQl6ci0+anBnX2J1ZmZlcnMgPSBmaC0+YnVmZmVyczsKKwkJCWZoLT5idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0FDVElWRTsKIAkJfSBlbHNlIHsKIAkJCWRwcmludGsoMSwKIAkJCQlLRVJOX0VSUgotCQkJCSIlczoganBnX3F1ZXVlX2ZyYW1lKCkgLSBhbm90aGVyIHNlc3Npb24gaXMgYWxyZWFkeSBjYXB0dXJpbmdcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOworCQkJCSIlczogJXMgLSBhbm90aGVyIHNlc3Npb24gaXMgYWxyZWFkeSBjYXB0dXJpbmdcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJCXJlcyA9IC1FQlVTWTsKIAkJfQogCX0KQEAgLTk0OCwyMyArNjkxLDIxIEBACiAJCWNhc2UgQlVaX1NUQVRFX0RPTkU6CiAJCQlkcHJpbnRrKDIsCiAJCQkJS0VSTl9XQVJOSU5HCi0JCQkJIiVzOiBqcGdfcXVldWVfZnJhbWUoKSAtIHF1ZWluZyBmcmFtZSBpbiBCVVpfU1RBVEVfRE9ORSBzdGF0ZSE/XG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQkiJXM6ICVzIC0gcXVlaW5nIGZyYW1lIGluIEJVWl9TVEFURV9ET05FIHN0YXRlIT9cbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJY2FzZSBCVVpfU1RBVEVfVVNFUjoKIAkJCS8qIHNpbmNlIHRoZXJlIGlzIGF0IGxlYXN0IG9uZSB1bnVzZWQgYnVmZmVyIHRoZXJlJ3Mgcm9vbSBmb3IgYXQKIAkJCSAqbGVhc3Qgb25lIG1vcmUgcGVuZFtdIGVudHJ5ICovCi0JCQl6ci0+anBnX3BlbmRbenItPmpwZ19xdWVfaGVhZCsrICYgQlVaX01BU0tfRlJBTUVdID0KLQkJCSAgICBudW07CisJCQl6ci0+anBnX3BlbmRbenItPmpwZ19xdWVfaGVhZCsrICYgQlVaX01BU0tfRlJBTUVdID0gbnVtOwogCQkJenItPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlID0gQlVaX1NUQVRFX1BFTkQ7Ci0JCQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV0gPQotCQkJICAgIHpyLT5qcGdfYnVmZmVycy5idWZmZXJbbnVtXTsKKwkJCWZoLT5idWZmZXJzLmJ1ZmZlcltudW1dID0genItPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dOwogCQkJem9yYW5fZmVlZF9zdGF0X2NvbSh6cik7CiAJCQlicmVhazsKIAkJZGVmYXVsdDoKIAkJY2FzZSBCVVpfU1RBVEVfRE1BOgogCQljYXNlIEJVWl9TVEFURV9QRU5EOgogCQkJaWYgKHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgewotCQkJCWZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOworCQkJCWZoLT5idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7CiAJCQkJenItPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7CiAJCQl9CiAJCQlyZXMgPSAtRUJVU1k7CS8qIHdoYXQgYXJlIHlvdSBkb2luZz8gKi8KQEAgLTk3NCw0NyArNzE1LDQxIEBACiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKIAotCWlmICghcmVzICYmIHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgewotCQl6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID0gZmgtPmpwZ19idWZmZXJzLmFjdGl2ZTsKLQl9CisJaWYgKCFyZXMgJiYgenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKQorCQl6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID0gZmgtPmJ1ZmZlcnMuYWN0aXZlOwogCiAJcmV0dXJuIHJlczsKIH0KIAotc3RhdGljIGludAotanBnX3FidWYgKHN0cnVjdCBmaWxlICAgICAgICAgICpmaWxlLAotCSAgaW50ICAgICAgICAgICAgICAgICAgIGZyYW1lLAotCSAgZW51bSB6b3Jhbl9jb2RlY19tb2RlIG1vZGUpCitzdGF0aWMgaW50IGpwZ19xYnVmKHN0cnVjdCB6b3Jhbl9maCAqZmgsIGludCBmcmFtZSwgZW51bSB6b3Jhbl9jb2RlY19tb2RlIG1vZGUpCiB7Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwogCWludCByZXMgPSAwOwogCiAJLyogRG9lcyB0aGUgdXNlciB3YW50IHRvIHN0b3Agc3RyZWFtaW5nPyAqLwogCWlmIChmcmFtZSA8IDApIHsKIAkJaWYgKHpyLT5jb2RlY19tb2RlID09IG1vZGUpIHsKLQkJCWlmIChmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUpIHsKKwkJCWlmIChmaC0+YnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkgewogCQkJCWRwcmludGsoMSwKIAkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBqcGdfcWJ1ZigtMSkgLSBzZXNzaW9uIG5vdCBhY3RpdmVcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQkJIiVzOiAlcygtMSkgLSBzZXNzaW9uIG5vdCBhY3RpdmVcbiIsCisJCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQkJcmV0dXJuIC1FSU5WQUw7CiAJCQl9Ci0JCQlmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID0genItPmpwZ19idWZmZXJzLmFjdGl2ZSA9Ci0JCQkgICAgWk9SQU5fRlJFRTsKKwkJCWZoLT5idWZmZXJzLmFjdGl2ZSA9IHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOwogCQkJenItPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7CiAJCQl6cjM2MDU3X2VuYWJsZV9qcGcoenIsIEJVWl9NT0RFX0lETEUpOwogCQkJcmV0dXJuIDA7CiAJCX0gZWxzZSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKLQkJCQkiJXM6IGpwZ19xYnVmKCkgLSBzdG9wIHN0cmVhbWluZyBidXQgbm90IGluIHN0cmVhbWluZyBtb2RlXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQkiJXM6ICVzIC0gc3RvcCBzdHJlYW1pbmcgYnV0IG5vdCBpbiBzdHJlYW1pbmcgbW9kZVxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAl9CiAKLQlpZiAoKHJlcyA9IHpvcmFuX2pwZ19xdWV1ZV9mcmFtZShmaWxlLCBmcmFtZSwgbW9kZSkpKQorCWlmICgocmVzID0gem9yYW5fanBnX3F1ZXVlX2ZyYW1lKGZoLCBmcmFtZSwgbW9kZSkpKQogCQlyZXR1cm4gcmVzOwogCiAJLyogU3RhcnQgdGhlIGpwZWcgY29kZWMgd2hlbiB0aGUgZmlyc3QgZnJhbWUgaXMgcXVldWVkICAqLwpAQCAtMTAyOCwyOCArNzYzLDI1IEBACiAgKiAgIFN5bmMgb24gYSBNSlBFRyBidWZmZXIKICAqLwogCi1zdGF0aWMgaW50Ci1qcGdfc3luYyAoc3RydWN0IGZpbGUgICAgICAgKmZpbGUsCi0JICBzdHJ1Y3Qgem9yYW5fc3luYyAqYnMpCitzdGF0aWMgaW50IGpwZ19zeW5jKHN0cnVjdCB6b3Jhbl9maCAqZmgsIHN0cnVjdCB6b3Jhbl9zeW5jICpicykKIHsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgZnJhbWU7CiAKLQlpZiAoZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CisJaWYgKGZoLT5idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IGpwZ19zeW5jKCkgLSBjYXB0dXJlIGlzIG5vdCBjdXJyZW50bHkgYWN0aXZlXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJIiVzOiAlcyAtIGNhcHR1cmUgaXMgbm90IGN1cnJlbnRseSBhY3RpdmVcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKHpyLT5jb2RlY19tb2RlICE9IEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTICYmCiAJICAgIHpyLT5jb2RlY19tb2RlICE9IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUykgewogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiBqcGdfc3luYygpIC0gY29kZWMgbm90IGluIHN0cmVhbWluZyBtb2RlXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJIiVzOiAlcyAtIGNvZGVjIG5vdCBpbiBzdHJlYW1pbmcgbW9kZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAlpZiAoIXdhaXRfZXZlbnRfaW50ZXJydXB0aWJsZV90aW1lb3V0KHpyLT5qcGdfY2FwcSwKQEAgLTEwNjQsOCArNzk2LDggQEAKIAkJCQkJICAgc2l6ZW9mKGlzciksICZpc3IpOwogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiBqcGdfc3luYygpIC0gdGltZW91dDogY29kZWMgaXNyPTB4JTAyeFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBpc3IpOworCQkJIiVzOiAlcyAtIHRpbWVvdXQ6IGNvZGVjIGlzcj0weCUwMnhcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIGlzcik7CiAKIAkJcmV0dXJuIC1FVElNRTsKIApAQCAtMTA4MywyOCArODE1LDI2IEBACiAJLyogYnVmZmVyIHNob3VsZCBub3cgYmUgaW4gQlVaX1NUQVRFX0RPTkUgKi8KIAlpZiAoenItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGUgIT0gQlVaX1NUQVRFX0RPTkUpCiAJCWRwcmludGsoMiwKLQkJCUtFUk5fRVJSICIlczoganBnX3N5bmMoKSAtIGludGVybmFsIHN0YXRlIGVycm9yXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJS0VSTl9FUlIgIiVzOiAlcyAtIGludGVybmFsIHN0YXRlIGVycm9yXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAogCSpicyA9IHpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLmJzOwogCWJzLT5mcmFtZSA9IGZyYW1lOwogCXpyLT5qcGdfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlID0gQlVaX1NUQVRFX1VTRVI7Ci0JZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0gPSB6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXTsKKwlmaC0+YnVmZmVycy5idWZmZXJbZnJhbWVdID0genItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV07CiAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKIAogCXJldHVybiAwOwogfQogCi1zdGF0aWMgdm9pZAotem9yYW5fb3Blbl9pbml0X3Nlc3Npb24gKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIHZvaWQgem9yYW5fb3Blbl9pbml0X3Nlc3Npb24oc3RydWN0IHpvcmFuX2ZoICpmaCkKIHsKIAlpbnQgaTsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAKIAkvKiBQZXIgZGVmYXVsdCwgbWFwIHRoZSBWNEwgQnVmZmVycyAqLwotCWZoLT5tYXBfbW9kZSA9IFpPUkFOX01BUF9NT0RFX1JBVzsKKwltYXBfbW9kZV9yYXcoZmgpOwogCiAJLyogdGFrZSBvdmVyIHRoZSBjYXJkJ3MgY3VycmVudCBzZXR0aW5ncyAqLwogCWZoLT5vdmVybGF5X3NldHRpbmdzID0genItPm92ZXJsYXlfc2V0dGluZ3M7CkBAIC0xMTE0LDQwICs4NDQsMjEgQEAKIAogCS8qIHY0bCBzZXR0aW5ncyAqLwogCWZoLT52NGxfc2V0dGluZ3MgPSB6ci0+djRsX3NldHRpbmdzOwotCi0JLyogdjRsX2J1ZmZlcnMgKi8KLQltZW1zZXQoJmZoLT52NGxfYnVmZmVycywgMCwgc2l6ZW9mKHN0cnVjdCB6b3Jhbl92NGxfc3RydWN0KSk7Ci0JZm9yIChpID0gMDsgaSA8IFZJREVPX01BWF9GUkFNRTsgaSsrKSB7Ci0JCWZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uc3RhdGUgPSBCVVpfU1RBVEVfVVNFUjsJLyogbm90aGluZyBnb2luZyBvbiAqLwotCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW2ldLmJzLmZyYW1lID0gaTsKLQl9Ci0JZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JZmgtPnY0bF9idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkID0gMDsKLQlmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKLQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemUgPSB2NGxfYnVmc2l6ZTsKLQlmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMgPSB2NGxfbmJ1ZnM7Ci0KIAkvKiBqcGcgc2V0dGluZ3MgKi8KIAlmaC0+anBnX3NldHRpbmdzID0genItPmpwZ19zZXR0aW5nczsKIAotCS8qIGpwZ19idWZmZXJzICovCi0JbWVtc2V0KCZmaC0+anBnX2J1ZmZlcnMsIDAsIHNpemVvZihzdHJ1Y3Qgem9yYW5fanBnX3N0cnVjdCkpOwotCWZvciAoaSA9IDA7IGkgPCBCVVpfTUFYX0ZSQU1FOyBpKyspIHsKLQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5zdGF0ZSA9IEJVWl9TVEFURV9VU0VSOwkvKiBub3RoaW5nIGdvaW5nIG9uICovCi0JCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0uYnMuZnJhbWUgPSBpOworCS8qIGJ1ZmZlcnMgKi8KKwltZW1zZXQoJmZoLT5idWZmZXJzLCAwLCBzaXplb2YoZmgtPmJ1ZmZlcnMpKTsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0ZSQU1FOyBpKyspIHsKKwkJZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLnN0YXRlID0gQlVaX1NUQVRFX1VTRVI7CS8qIG5vdGhpbmcgZ29pbmcgb24gKi8KKwkJZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLmJzLmZyYW1lID0gaTsKIAl9Ci0JZmgtPmpwZ19idWZmZXJzLm5lZWRfY29udGlndW91cyA9IHpyLT5qcGdfYnVmZmVycy5uZWVkX2NvbnRpZ3VvdXM7Ci0JZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JZmgtPmpwZ19idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkID0gMDsKLQlmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID0gWk9SQU5fRlJFRTsKLQlmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgPSBqcGdfYnVmc2l6ZTsKLQlmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMgPSBqcGdfbmJ1ZnM7CisJZmgtPmJ1ZmZlcnMuYWxsb2NhdGVkID0gMDsKKwlmaC0+YnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOwogfQogCi1zdGF0aWMgdm9pZAotem9yYW5fY2xvc2VfZW5kX3Nlc3Npb24gKHN0cnVjdCBmaWxlICpmaWxlKQorc3RhdGljIHZvaWQgem9yYW5fY2xvc2VfZW5kX3Nlc3Npb24oc3RydWN0IHpvcmFuX2ZoICpmaCkKIHsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAKIAkvKiBvdmVybGF5ICovCkBAIC0xMTU5LDM2ICs4NzAsMzIgQEAKIAkJenItPm92ZXJsYXlfbWFzayA9IE5VTEw7CiAJfQogCi0JLyogdjRsIGNhcHR1cmUgKi8KLQlpZiAoZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisJaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcpIHsKKwkJLyogdjRsIGNhcHR1cmUgKi8KKwkJaWYgKGZoLT5idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7CisJCQl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0JCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQkJenIzNjA1N19zZXRfbWVtZ3JhYih6ciwgMCk7Ci0JCXpyLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwotCQl6ci0+djRsX2J1ZmZlcnMuYWN0aXZlID0gZmgtPnY0bF9idWZmZXJzLmFjdGl2ZSA9Ci0JCSAgICBaT1JBTl9GUkVFOwotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQl9CisJCQlzcGluX2xvY2tfaXJxc2F2ZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CisJCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAwKTsKKwkJCXpyLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOworCQkJenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9IGZoLT5idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7CisJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJfQogCi0JLyogdjRsIGJ1ZmZlcnMgKi8KLQlpZiAoZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCB8fAotCSAgICBmaC0+djRsX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQpIHsKLQkJdjRsX2ZidWZmZXJfZnJlZShmaWxlKTsKLQl9CisJCS8qIHY0bCBidWZmZXJzICovCisJCWlmIChmaC0+YnVmZmVycy5hbGxvY2F0ZWQpCisJCQl2NGxfZmJ1ZmZlcl9mcmVlKGZoKTsKKwl9IGVsc2UgeworCQkvKiBqcGcgY2FwdHVyZSAqLworCQlpZiAoZmgtPmJ1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKKwkJCXpyMzYwNTdfZW5hYmxlX2pwZyh6ciwgQlVaX01PREVfSURMRSk7CisJCQl6ci0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKKwkJCXpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBmaC0+YnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOworCQl9CiAKLQkvKiBqcGcgY2FwdHVyZSAqLwotCWlmIChmaC0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKLQkJenIzNjA1N19lbmFibGVfanBnKHpyLCBCVVpfTU9ERV9JRExFKTsKLQkJenItPmpwZ19idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JCXpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID0KLQkJICAgIFpPUkFOX0ZSRUU7Ci0JfQotCi0JLyoganBnIGJ1ZmZlcnMgKi8KLQlpZiAoZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCB8fAotCSAgICBmaC0+anBnX2J1ZmZlcnMucmVhZHlfdG9fYmVfZnJlZWQpIHsKLQkJanBnX2ZidWZmZXJfZnJlZShmaWxlKTsKKwkJLyoganBnIGJ1ZmZlcnMgKi8KKwkJaWYgKGZoLT5idWZmZXJzLmFsbG9jYXRlZCkKKwkJCWpwZ19mYnVmZmVyX2ZyZWUoZmgpOwogCX0KIH0KIApAQCAtMTIwMiwxNSArOTA5LDExIEBACiAJc3RydWN0IHpvcmFuX2ZoICpmaDsKIAlpbnQgcmVzLCBmaXJzdF9vcGVuID0gMDsKIAotCWRwcmludGsoMiwgS0VSTl9JTkZPICIlczogem9yYW5fb3BlbiglcywgcGlkPVslZF0pLCB1c2VycygtKT0lZFxuIiwKLQkJWlJfREVWTkFNRSh6ciksIGN1cnJlbnQtPmNvbW0sIHRhc2tfcGlkX25yKGN1cnJlbnQpLCB6ci0+dXNlciArIDEpOworCWRwcmludGsoMiwgS0VSTl9JTkZPICIlczogJXMoJXMsIHBpZD1bJWRdKSwgdXNlcnMoLSk9JWRcbiIsCisJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCksIHpyLT51c2VyICsgMSk7CiAKIAlsb2NrX2tlcm5lbCgpOwogCi0JLyogc2VlIGZzL2RldmljZS5jIC0gdGhlIGtlcm5lbCBhbHJlYWR5IGxvY2tzIGR1cmluZyBvcGVuKCksCi0JICogc28gbG9ja2luZyBvdXJzZWx2ZXMgb25seSBjYXVzZXMgZGVhZGxvY2tzICovCi0JLyptdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ki8KLQogCWlmICh6ci0+dXNlciA+PSAyMDQ4KSB7CiAJCWRwcmludGsoMSwgS0VSTl9FUlIgIiVzOiB0b28gbWFueSB1c2VycyAoJWQpIG9uIGRldmljZVxuIiwKIAkJCVpSX0RFVk5BTUUoenIpLCB6ci0+dXNlcik7CkBAIC0xMjE4LDQxICs5MjEsMTUgQEAKIAkJZ290byBmYWlsX3VubG9jazsKIAl9CiAKLQlpZiAoIXpyLT5kZWNvZGVyKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSICIlczogbm8gVFYgZGVjb2RlciBsb2FkZWQgZm9yIGRldmljZSFcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXJlcyA9IC1FSU87Ci0JCWdvdG8gZmFpbF91bmxvY2s7Ci0JfQotCi0JaWYgKCF0cnlfbW9kdWxlX2dldCh6ci0+ZGVjb2Rlci0+ZHJpdmVyLT5kcml2ZXIub3duZXIpKSB7Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IGZhaWxlZCB0byBncmFiIG93bmVyc2hpcCBvZiB2aWRlbyBkZWNvZGVyXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCQlyZXMgPSAtRUlPOwotCQlnb3RvIGZhaWxfdW5sb2NrOwotCX0KLQlpZiAoenItPmVuY29kZXIgJiYKLQkgICAgIXRyeV9tb2R1bGVfZ2V0KHpyLT5lbmNvZGVyLT5kcml2ZXItPmRyaXZlci5vd25lcikpIHsKLQkJZHByaW50aygxLAotCQkJS0VSTl9FUlIKLQkJCSIlczogZmFpbGVkIHRvIGdyYWIgb3duZXJzaGlwIG9mIHZpZGVvIGVuY29kZXJcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCXJlcyA9IC1FSU87Ci0JCWdvdG8gZmFpbF9kZWNvZGVyOwotCX0KLQogCS8qIG5vdywgY3JlYXRlIHRoZSBvcGVuKCktc3BlY2lmaWMgZmlsZV9vcHMgc3RydWN0ICovCiAJZmggPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgem9yYW5fZmgpLCBHRlBfS0VSTkVMKTsKIAlpZiAoIWZoKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHpvcmFuX29wZW4oKSAtIGFsbG9jYXRpb24gb2Ygem9yYW5fZmggZmFpbGVkXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOworCQkJIiVzOiAlcyAtIGFsbG9jYXRpb24gb2Ygem9yYW5fZmggZmFpbGVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJcmVzID0gLUVOT01FTTsKLQkJZ290byBmYWlsX2VuY29kZXI7CisJCWdvdG8gZmFpbF91bmxvY2s7CiAJfQogCS8qIHVzZWQgdG8gYmUgQlVaX01BWF9XSURUSC9IRUlHSFQsIGJ1dCB0aGF0IGdpdmVzIG92ZXJmbG93cwogCSAqIG9uIG5vcm0tY2hhbmdlISAqLwpAQCAtMTI2MSw4ICs5MzgsOCBAQAogCWlmICghZmgtPm92ZXJsYXlfbWFzaykgewogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiB6b3Jhbl9vcGVuKCkgLSBhbGxvY2F0aW9uIG9mIG92ZXJsYXlfbWFzayBmYWlsZWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0gYWxsb2NhdGlvbiBvZiBvdmVybGF5X21hc2sgZmFpbGVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJcmVzID0gLUVOT01FTTsKIAkJZ290byBmYWlsX2ZoOwogCX0KQEAgLTEyODQsMTggKzk2MSwxMyBAQAogCS8qIHNldCBmaWxlX29wcyBzdHVmZiAqLwogCWZpbGUtPnByaXZhdGVfZGF0YSA9IGZoOwogCWZoLT56ciA9IHpyOwotCXpvcmFuX29wZW5faW5pdF9zZXNzaW9uKGZpbGUpOworCXpvcmFuX29wZW5faW5pdF9zZXNzaW9uKGZoKTsKIAl1bmxvY2tfa2VybmVsKCk7CiAKIAlyZXR1cm4gMDsKIAogZmFpbF9maDoKIAlrZnJlZShmaCk7Ci1mYWlsX2VuY29kZXI6Ci0JaWYgKHpyLT5lbmNvZGVyKQotCQltb2R1bGVfcHV0KHpyLT5lbmNvZGVyLT5kcml2ZXItPmRyaXZlci5vd25lcik7Ci1mYWlsX2RlY29kZXI6Ci0JbW9kdWxlX3B1dCh6ci0+ZGVjb2Rlci0+ZHJpdmVyLT5kcml2ZXIub3duZXIpOwogZmFpbF91bmxvY2s6CiAJdW5sb2NrX2tlcm5lbCgpOwogCkBAIC0xMzExLDE0ICs5ODMsMTQgQEAKIAlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOwogCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CiAKLQlkcHJpbnRrKDIsIEtFUk5fSU5GTyAiJXM6IHpvcmFuX2Nsb3NlKCVzLCBwaWQ9WyVkXSksIHVzZXJzKCspPSVkXG4iLAotCQlaUl9ERVZOQU1FKHpyKSwgY3VycmVudC0+Y29tbSwgdGFza19waWRfbnIoY3VycmVudCksIHpyLT51c2VyIC0gMSk7CisJZHByaW50aygyLCBLRVJOX0lORk8gIiVzOiAlcyglcywgcGlkPVslZF0pLCB1c2VycygrKT0lZFxuIiwKKwkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBjdXJyZW50LT5jb21tLCB0YXNrX3BpZF9ucihjdXJyZW50KSwgenItPnVzZXIgLSAxKTsKIAogCS8qIGtlcm5lbCBsb2NrcyAoZnMvZGV2aWNlLmMpLCBzbyBkb24ndCBkbyB0aGF0IG91cnNlbHZlcwogCSAqIChwcmV2ZW50cyBkZWFkbG9ja3MpICovCiAJLyptdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ki8KIAotCXpvcmFuX2Nsb3NlX2VuZF9zZXNzaW9uKGZpbGUpOworCXpvcmFuX2Nsb3NlX2VuZF9zZXNzaW9uKGZoKTsKIAogCWlmICh6ci0+dXNlci0tID09IDEpIHsJLyogTGFzdCBwcm9jZXNzICovCiAJCS8qIENsZWFuIHVwIEpQRUcgcHJvY2VzcyAqLwpAQCAtMTM0Niw5ICsxMDE4LDEwIEBACiAJCXpvcmFuX3NldF9wY2lfbWFzdGVyKHpyLCAwKTsKIAogCQlpZiAoIXBhc3NfdGhyb3VnaCkgewkvKiBTd2l0Y2ggdG8gY29sb3IgYmFyICovCi0JCQlpbnQgemVybyA9IDAsIHR3byA9IDI7Ci0JCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfRU5BQkxFX09VVFBVVCwgJnplcm8pOwotCQkJZW5jb2Rlcl9jb21tYW5kKHpyLCBFTkNPREVSX1NFVF9JTlBVVCwgJnR3byk7CisJCQlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlID0geyAyLCAwIH07CisKKwkJCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfc3RyZWFtLCAwKTsKKwkJCWVuY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAkJfQogCX0KIApAQCAtMTM1NiwxNCArMTAyOSw3IEBACiAJa2ZyZWUoZmgtPm92ZXJsYXlfbWFzayk7CiAJa2ZyZWUoZmgpOwogCi0JLyogcmVsZWFzZSBsb2NrcyBvbiB0aGUgaTJjIG1vZHVsZXMgKi8KLQltb2R1bGVfcHV0KHpyLT5kZWNvZGVyLT5kcml2ZXItPmRyaXZlci5vd25lcik7Ci0JaWYgKHpyLT5lbmNvZGVyKQotCQltb2R1bGVfcHV0KHpyLT5lbmNvZGVyLT5kcml2ZXItPmRyaXZlci5vd25lcik7Ci0KLQkvKm11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOyovCi0KLQlkcHJpbnRrKDQsIEtFUk5fSU5GTyAiJXM6IHpvcmFuX2Nsb3NlKCkgZG9uZVxuIiwgWlJfREVWTkFNRSh6cikpOworCWRwcmludGsoNCwgS0VSTl9JTkZPICIlczogJXMgZG9uZVxuIiwgWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAogCXJldHVybiAwOwogfQpAQCAtMTM5MSwxNSArMTA1NywxMyBAQAogCXJldHVybiAtRUlOVkFMOwogfQogCi1zdGF0aWMgaW50Ci1zZXR1cF9mYnVmZmVyIChzdHJ1Y3QgZmlsZSAgICAgICAgICAgICAgICpmaWxlLAorc3RhdGljIGludCBzZXR1cF9mYnVmZmVyKHN0cnVjdCB6b3Jhbl9maCAqZmgsCiAJICAgICAgIHZvaWQgICAgICAgICAgICAgICAgICAgICAgKmJhc2UsCiAJICAgICAgIGNvbnN0IHN0cnVjdCB6b3Jhbl9mb3JtYXQgKmZtdCwKIAkgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgd2lkdGgsCiAJICAgICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodCwKIAkgICAgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgYnl0ZXNwZXJsaW5lKQogewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKIAogCS8qIChSb25hbGQpIHY0bC92NGwyIGd1aWRlbGluZXMgKi8KQEAgLTE0MjcsOCArMTA5MSw4IEBACiAJCSAqIGZyaWVuZGx5IGFuZCBzaWxlbnRseSBkbyBhcyBpZiBub3RoaW5nIHdlbnQgd3JvbmcgKi8KIAkJZHByaW50aygzLAogCQkJS0VSTl9FUlIKLQkJCSIlczogc2V0dXBfZmJ1ZmZlcigpIC0gZm9yY2VkIG92ZXJsYXkgdHVybm9mZiBiZWNhdXNlIGZyYW1lYnVmZmVyIGNoYW5nZWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0gZm9yY2VkIG92ZXJsYXkgdHVybm9mZiBiZWNhdXNlIGZyYW1lYnVmZmVyIGNoYW5nZWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQl6cjM2MDU3X292ZXJsYXkoenIsIDApOwogCX0KICNlbmRpZgpAQCAtMTQzNiwzMSArMTEwMCwzMSBAQAogCWlmICghKGZtdC0+ZmxhZ3MgJiBaT1JBTl9GT1JNQVRfT1ZFUkxBWSkpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogc2V0dXBfZmJ1ZmZlcigpIC0gbm8gdmFsaWQgb3ZlcmxheSBmb3JtYXQgZ2l2ZW5cbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0gbm8gdmFsaWQgb3ZlcmxheSBmb3JtYXQgZ2l2ZW5cbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAJaWYgKGhlaWdodCA8PSAwIHx8IHdpZHRoIDw9IDAgfHwgYnl0ZXNwZXJsaW5lIDw9IDApIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9FUlIKLQkJCSIlczogc2V0dXBfZmJ1ZmZlcigpIC0gaW52YWxpZCBoZWlnaHQvd2lkdGgvYnBsIHZhbHVlICglZHwlZHwlZClcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgd2lkdGgsIGhlaWdodCwgYnl0ZXNwZXJsaW5lKTsKKwkJCSIlczogJXMgLSBpbnZhbGlkIGhlaWdodC93aWR0aC9icGwgdmFsdWUgKCVkfCVkfCVkKVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgd2lkdGgsIGhlaWdodCwgYnl0ZXNwZXJsaW5lKTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCWlmIChieXRlc3BlcmxpbmUgJiAzKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHNldHVwX2ZidWZmZXIoKSAtIGJ5dGVzcGVybGluZSAoJWQpIG11c3QgYmUgNC1ieXRlIGFsaWduZWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgYnl0ZXNwZXJsaW5lKTsKKwkJCSIlczogJXMgLSBieXRlc3BlcmxpbmUgKCVkKSBtdXN0IGJlIDQtYnl0ZSBhbGlnbmVkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLCBieXRlc3BlcmxpbmUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKLQl6ci0+YnVmZmVyLmJhc2UgPSAodm9pZCAqKSAoKHVuc2lnbmVkIGxvbmcpIGJhc2UgJiB+Myk7Ci0JenItPmJ1ZmZlci5oZWlnaHQgPSBoZWlnaHQ7Ci0JenItPmJ1ZmZlci53aWR0aCA9IHdpZHRoOwotCXpyLT5idWZmZXIuZGVwdGggPSBmbXQtPmRlcHRoOworCXpyLT52YnVmX2Jhc2UgPSAodm9pZCAqKSAoKHVuc2lnbmVkIGxvbmcpIGJhc2UgJiB+Myk7CisJenItPnZidWZfaGVpZ2h0ID0gaGVpZ2h0OworCXpyLT52YnVmX3dpZHRoID0gd2lkdGg7CisJenItPnZidWZfZGVwdGggPSBmbXQtPmRlcHRoOwogCXpyLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdCA9IGZtdDsKLQl6ci0+YnVmZmVyLmJ5dGVzcGVybGluZSA9IGJ5dGVzcGVybGluZTsKKwl6ci0+dmJ1Zl9ieXRlc3BlcmxpbmUgPSBieXRlc3BlcmxpbmU7CiAKIAkvKiBUaGUgdXNlciBzaG91bGQgc2V0IG5ldyB3aW5kb3cgcGFyYW1ldGVycyAqLwogCXpyLT5vdmVybGF5X3NldHRpbmdzLmlzX3NldCA9IDA7CkBAIC0xNDY5LDM1ICsxMTMzLDI3IEBACiB9CiAKIAotc3RhdGljIGludAotc2V0dXBfd2luZG93IChzdHJ1Y3QgZmlsZSAgICAgICAqZmlsZSwKLQkgICAgICBpbnQgICAgICAgICAgICAgICAgeCwKLQkgICAgICBpbnQgICAgICAgICAgICAgICAgeSwKLQkgICAgICBpbnQgICAgICAgICAgICAgICAgd2lkdGgsCi0JICAgICAgaW50ICAgICAgICAgICAgICAgIGhlaWdodCwKLQkgICAgICBzdHJ1Y3QgdmlkZW9fY2xpcCBfX3VzZXIgKmNsaXBzLAotCSAgICAgIGludCAgICAgICAgICAgICAgICBjbGlwY291bnQsCi0JICAgICAgdm9pZCAgICAgICAgICAgICAgX191c2VyICpiaXRtYXApCitzdGF0aWMgaW50IHNldHVwX3dpbmRvdyhzdHJ1Y3Qgem9yYW5fZmggKmZoLCBpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCwKKwlzdHJ1Y3QgdjRsMl9jbGlwIF9fdXNlciAqY2xpcHMsIGludCBjbGlwY291bnQsIHZvaWQgX191c2VyICpiaXRtYXApCiB7Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwotCXN0cnVjdCB2aWRlb19jbGlwICp2Y3AgPSBOVUxMOworCXN0cnVjdCB2NGwyX2NsaXAgKnZjcCA9IE5VTEw7CiAJaW50IG9uLCBlbmQ7CiAKIAotCWlmICghenItPmJ1ZmZlci5iYXNlKSB7CisJaWYgKCF6ci0+dmJ1Zl9iYXNlKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHNldHVwX3dpbmRvdygpIC0gZnJhbWUgYnVmZmVyIGhhcyB0byBiZSBzZXQgZmlyc3RcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0gZnJhbWUgYnVmZmVyIGhhcyB0byBiZSBzZXQgZmlyc3RcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKIAlpZiAoIWZoLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdCkgewogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiBzZXR1cF93aW5kb3coKSAtIG5vIG92ZXJsYXkgZm9ybWF0IHNldFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCSIlczogJXMgLSBubyBvdmVybGF5IGZvcm1hdCBzZXRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE1MDUsMTMgKzExNjEsMTMgQEAKIAkgKiBUaGUgdmlkZW8gZnJvbnQgZW5kIG5lZWRzIDQtYnl0ZSBhbGluZ2VkIGxpbmUgc2l6ZXMsIHdlIGNvcnJlY3QgdGhhdAogCSAqIHNpbGVudGx5IGhlcmUgaWYgbmVjZXNzYXJ5CiAJICovCi0JaWYgKHpyLT5idWZmZXIuZGVwdGggPT0gMTUgfHwgenItPmJ1ZmZlci5kZXB0aCA9PSAxNikgeworCWlmICh6ci0+dmJ1Zl9kZXB0aCA9PSAxNSB8fCB6ci0+dmJ1Zl9kZXB0aCA9PSAxNikgewogCQllbmQgPSAoeCArIHdpZHRoKSAmIH4xOwkvKiByb3VuZCBkb3duICovCiAJCXggPSAoeCArIDEpICYgfjE7CS8qIHJvdW5kIHVwICovCiAJCXdpZHRoID0gZW5kIC0geDsKIAl9CiAKLQlpZiAoenItPmJ1ZmZlci5kZXB0aCA9PSAyNCkgeworCWlmICh6ci0+dmJ1Zl9kZXB0aCA9PSAyNCkgewogCQllbmQgPSAoeCArIHdpZHRoKSAmIH4zOwkvKiByb3VuZCBkb3duICovCiAJCXggPSAoeCArIDMpICYgfjM7CS8qIHJvdW5kIHVwICovCiAJCXdpZHRoID0gZW5kIC0geDsKQEAgLTE1MjcsOCArMTE4Myw4IEBACiAJICAgIHdpZHRoID4gQlVaX01BWF9XSURUSCB8fCBoZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCkgewogCQlkcHJpbnRrKDEsCiAJCQlLRVJOX0VSUgotCQkJIiVzOiBzZXR1cF93aW5kb3coKSAtIHdpZHRoID0gJWQgb3IgaGVpZ2h0ID0gJWQgaW52YWxpZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCB3aWR0aCwgaGVpZ2h0KTsKKwkJCSIlczogJXMgLSB3aWR0aCA9ICVkIG9yIGhlaWdodCA9ICVkIGludmFsaWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIHdpZHRoLCBoZWlnaHQpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE1NjYsMjAgKzEyMjIsMjAgQEAKIAkJfQogCX0gZWxzZSBpZiAoY2xpcGNvdW50ID4gMCkgewogCQkvKiB3cml0ZSBvdXIgb3duIGJpdG1hcCBmcm9tIHRoZSBjbGlwcyAqLwotCQl2Y3AgPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgdmlkZW9fY2xpcCkgKiAoY2xpcGNvdW50ICsgNCkpOworCQl2Y3AgPSB2bWFsbG9jKHNpemVvZihzdHJ1Y3QgdjRsMl9jbGlwKSAqIChjbGlwY291bnQgKyA0KSk7CiAJCWlmICh2Y3AgPT0gTlVMTCkgewogCQkJZHByaW50aygxLAogCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBzZXR1cF93aW5kb3coKSAtIEFsbG9jIG9mIGNsaXAgbWFzayBmYWlsZWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOworCQkJCSIlczogJXMgLSBBbGxvYyBvZiBjbGlwIG1hc2sgZmFpbGVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVOT01FTTsKIAkJfQogCQlpZiAoY29weV9mcm9tX3VzZXIKLQkJICAgICh2Y3AsIGNsaXBzLCBzaXplb2Yoc3RydWN0IHZpZGVvX2NsaXApICogY2xpcGNvdW50KSkgeworCQkgICAgKHZjcCwgY2xpcHMsIHNpemVvZihzdHJ1Y3QgdjRsMl9jbGlwKSAqIGNsaXBjb3VudCkpIHsKIAkJCXZmcmVlKHZjcCk7CiAJCQlyZXR1cm4gLUVGQVVMVDsKIAkJfQotCQl3cml0ZV9vdmVybGF5X21hc2soZmlsZSwgdmNwLCBjbGlwY291bnQpOworCQl3cml0ZV9vdmVybGF5X21hc2soZmgsIHZjcCwgY2xpcGNvdW50KTsKIAkJdmZyZWUodmNwKTsKIAl9CiAKQEAgLTE1OTUsMTEgKzEyNTEsOCBAQAogCXJldHVybiB3YWl0X2dyYWJfcGVuZGluZyh6cik7CiB9CiAKLXN0YXRpYyBpbnQKLXNldHVwX292ZXJsYXkgKHN0cnVjdCBmaWxlICpmaWxlLAotCSAgICAgICBpbnQgICAgICAgICAgb24pCitzdGF0aWMgaW50IHNldHVwX292ZXJsYXkoc3RydWN0IHpvcmFuX2ZoICpmaCwgaW50IG9uKQogewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKIAogCS8qIElmIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8sIHJldHVybiBpbW1lZGlhdGx5ICovCkBAIC0xNjEyLDE2ICsxMjY1LDE2IEBACiAJICAgIGZoLT5vdmVybGF5X2FjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHNldHVwX292ZXJsYXkoKSAtIG92ZXJsYXkgaXMgYWxyZWFkeSBhY3RpdmUgZm9yIGFub3RoZXIgc2Vzc2lvblxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCSIlczogJXMgLSBvdmVybGF5IGlzIGFscmVhZHkgYWN0aXZlIGZvciBhbm90aGVyIHNlc3Npb25cbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAlpZiAoIW9uICYmIHpyLT5vdmVybGF5X2FjdGl2ZSAhPSBaT1JBTl9GUkVFICYmCiAJICAgIGZoLT5vdmVybGF5X2FjdGl2ZSA9PSBaT1JBTl9GUkVFKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHNldHVwX292ZXJsYXkoKSAtIHlvdSBjYW5ub3QgY2FuY2VsIHNvbWVvbmUgZWxzZSdzIHNlc3Npb25cbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0geW91IGNhbm5vdCBjYW5jZWwgc29tZW9uZSBlbHNlJ3Mgc2Vzc2lvblxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRVBFUk07CiAJfQogCkBAIC0xNjM0LDE4ICsxMjg3LDE4IEBACiAJCQl6cjM2MDU3X292ZXJsYXkoenIsIDApOwogCQl6ci0+b3ZlcmxheV9tYXNrID0gTlVMTDsKIAl9IGVsc2UgewotCQlpZiAoIXpyLT5idWZmZXIuYmFzZSB8fCAhZmgtPm92ZXJsYXlfc2V0dGluZ3MuaXNfc2V0KSB7CisJCWlmICghenItPnZidWZfYmFzZSB8fCAhZmgtPm92ZXJsYXlfc2V0dGluZ3MuaXNfc2V0KSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKLQkJCQkiJXM6IHNldHVwX292ZXJsYXkoKSAtIGJ1ZmZlciBvciB3aW5kb3cgbm90IHNldFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkJIiVzOiAlcyAtIGJ1ZmZlciBvciB3aW5kb3cgbm90IHNldFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQkJcmV0dXJuIC1FSU5WQUw7CiAJCX0KIAkJaWYgKCFmaC0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQpIHsKIAkJCWRwcmludGsoMSwKIAkJCQlLRVJOX0VSUgotCQkJCSIlczogc2V0dXBfb3ZlcmxheSgpIC0gbm8gb3ZlcmxheSBmb3JtYXQgc2V0XG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQkiJXM6ICVzIC0gbm8gb3ZlcmxheSBmb3JtYXQgc2V0XG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCQl6ci0+b3ZlcmxheV9hY3RpdmUgPSBmaC0+b3ZlcmxheV9hY3RpdmUgPSBaT1JBTl9MT0NLRUQ7CkBAIC0xNjYyLDQxICsxMzE1LDQ3IEBACiAJcmV0dXJuIHdhaXRfZ3JhYl9wZW5kaW5nKHpyKTsKIH0KIAotCS8qIGdldCB0aGUgc3RhdHVzIG9mIGEgYnVmZmVyIGluIHRoZSBjbGllbnRzIGJ1ZmZlciBxdWV1ZSAqLwotc3RhdGljIGludAotem9yYW5fdjRsMl9idWZmZXJfc3RhdHVzIChzdHJ1Y3QgZmlsZSAgICAgICAgKmZpbGUsCi0JCQkgIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmLAotCQkJICBpbnQgICAgICAgICAgICAgICAgIG51bSkKKy8qIGdldCB0aGUgc3RhdHVzIG9mIGEgYnVmZmVyIGluIHRoZSBjbGllbnRzIGJ1ZmZlciBxdWV1ZSAqLworc3RhdGljIGludCB6b3Jhbl92NGwyX2J1ZmZlcl9zdGF0dXMoc3RydWN0IHpvcmFuX2ZoICpmaCwKKwkJCQkgICAgc3RydWN0IHY0bDJfYnVmZmVyICpidWYsIGludCBudW0pCiB7Ci0Jc3RydWN0IHpvcmFuX2ZoICpmaCA9IGZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlidWYtPmZsYWdzID0gVjRMMl9CVUZfRkxBR19NQVBQRUQ7CiAKIAlzd2l0Y2ggKGZoLT5tYXBfbW9kZSkgewogCWNhc2UgWk9SQU5fTUFQX01PREVfUkFXOgotCiAJCS8qIGNoZWNrIHJhbmdlICovCi0JCWlmIChudW0gPCAwIHx8IG51bSA+PSBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMgfHwKLQkJICAgICFmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkKSB7CisJCWlmIChudW0gPCAwIHx8IG51bSA+PSBmaC0+YnVmZmVycy5udW1fYnVmZmVycyB8fAorCQkgICAgIWZoLT5idWZmZXJzLmFsbG9jYXRlZCkgewogCQkJZHByaW50aygxLAogCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiB2NGwyX2J1ZmZlcl9zdGF0dXMoKSAtIHdyb25nIG51bWJlciBvciBidWZmZXJzIG5vdCBhbGxvY2F0ZWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOworCQkJCSIlczogJXMgLSB3cm9uZyBudW1iZXIgb3IgYnVmZmVycyBub3QgYWxsb2NhdGVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCisJCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJZHByaW50aygzLAorCQkJS0VSTl9ERUJVRworCQkJIiVzOiAlcygpIC0gcmF3IGFjdGl2ZT0lYywgYnVmZmVyICVkOiBzdGF0ZT0lYywgbWFwPSVjXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLAorCQkJIkZBTCJbZmgtPmJ1ZmZlcnMuYWN0aXZlXSwgbnVtLAorCQkJIlVQTUQiW3pyLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZV0sCisJCQlmaC0+YnVmZmVycy5idWZmZXJbbnVtXS5tYXAgPyAnWScgOiAnTicpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKKwogCQlidWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JCWJ1Zi0+bGVuZ3RoID0gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOworCQlidWYtPmxlbmd0aCA9IGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplOwogCiAJCS8qIGdldCBidWZmZXIgKi8KLQkJYnVmLT5ieXRlc3VzZWQgPSBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0uYnMubGVuZ3RoOwotCQlpZiAoZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlID09IEJVWl9TVEFURV9ET05FIHx8Ci0JCSAgICBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgPT0gQlVaX1NUQVRFX1VTRVIpIHsKLQkJCWJ1Zi0+c2VxdWVuY2UgPSBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0uYnMuc2VxOworCQlidWYtPmJ5dGVzdXNlZCA9IGZoLT5idWZmZXJzLmJ1ZmZlcltudW1dLmJzLmxlbmd0aDsKKwkJaWYgKGZoLT5idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlID09IEJVWl9TVEFURV9ET05FIHx8CisJCSAgICBmaC0+YnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZSA9PSBCVVpfU1RBVEVfVVNFUikgeworCQkJYnVmLT5zZXF1ZW5jZSA9IGZoLT5idWZmZXJzLmJ1ZmZlcltudW1dLmJzLnNlcTsKIAkJCWJ1Zi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19ET05FOwotCQkJYnVmLT50aW1lc3RhbXAgPQotCQkJICAgIGZoLT52NGxfYnVmZmVycy5idWZmZXJbbnVtXS5icy50aW1lc3RhbXA7CisJCQlidWYtPnRpbWVzdGFtcCA9IGZoLT5idWZmZXJzLmJ1ZmZlcltudW1dLmJzLnRpbWVzdGFtcDsKIAkJfSBlbHNlIHsKIAkJCWJ1Zi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19RVUVVRUQ7CiAJCX0KQEAgLTE3MTIsMjggKzEzNzEsMjYgQEAKIAljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgogCiAJCS8qIGNoZWNrIHJhbmdlICovCi0JCWlmIChudW0gPCAwIHx8IG51bSA+PSBmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMgfHwKLQkJICAgICFmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkKSB7CisJCWlmIChudW0gPCAwIHx8IG51bSA+PSBmaC0+YnVmZmVycy5udW1fYnVmZmVycyB8fAorCQkgICAgIWZoLT5idWZmZXJzLmFsbG9jYXRlZCkgewogCQkJZHByaW50aygxLAogCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiB2NGwyX2J1ZmZlcl9zdGF0dXMoKSAtIHdyb25nIG51bWJlciBvciBidWZmZXJzIG5vdCBhbGxvY2F0ZWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOworCQkJCSIlczogJXMgLSB3cm9uZyBudW1iZXIgb3IgYnVmZmVycyBub3QgYWxsb2NhdGVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJfQogCiAJCWJ1Zi0+dHlwZSA9IChmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfSlBHX1JFQykgPwogCQkJICAgICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIDoKIAkJCSAgICAgIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOwotCQlidWYtPmxlbmd0aCA9IGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZTsKKwkJYnVmLT5sZW5ndGggPSBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZTsKIAogCQkvKiB0aGVzZSB2YXJpYWJsZXMgYXJlIG9ubHkgd3JpdHRlbiBhZnRlciBmcmFtZSBoYXMgYmVlbiBjYXB0dXJlZCAqLwotCQlpZiAoZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlID09IEJVWl9TVEFURV9ET05FIHx8Ci0JCSAgICBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgPT0gQlVaX1NUQVRFX1VTRVIpIHsKLQkJCWJ1Zi0+c2VxdWVuY2UgPSBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW251bV0uYnMuc2VxOwotCQkJYnVmLT50aW1lc3RhbXAgPQotCQkJICAgIGZoLT5qcGdfYnVmZmVycy5idWZmZXJbbnVtXS5icy50aW1lc3RhbXA7Ci0JCQlidWYtPmJ5dGVzdXNlZCA9Ci0JCQkgICAgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dLmJzLmxlbmd0aDsKKwkJaWYgKGZoLT5idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlID09IEJVWl9TVEFURV9ET05FIHx8CisJCSAgICBmaC0+YnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZSA9PSBCVVpfU1RBVEVfVVNFUikgeworCQkJYnVmLT5zZXF1ZW5jZSA9IGZoLT5idWZmZXJzLmJ1ZmZlcltudW1dLmJzLnNlcTsKKwkJCWJ1Zi0+dGltZXN0YW1wID0gZmgtPmJ1ZmZlcnMuYnVmZmVyW251bV0uYnMudGltZXN0YW1wOworCQkJYnVmLT5ieXRlc3VzZWQgPSBmaC0+YnVmZmVycy5idWZmZXJbbnVtXS5icy5sZW5ndGg7CiAJCQlidWYtPmZsYWdzIHw9IFY0TDJfQlVGX0ZMQUdfRE9ORTsKIAkJfSBlbHNlIHsKIAkJCWJ1Zi0+ZmxhZ3MgfD0gVjRMMl9CVUZfRkxBR19RVUVVRUQ7CkBAIC0xNzQxLDE0ICsxMzk4LDExIEBACiAKIAkJLyogd2hpY2ggZmllbGRzIGFyZSB0aGVzZT8gKi8KIAkJaWYgKGZoLT5qcGdfc2V0dGluZ3MuVG1wRGNtICE9IDEpCi0JCQlidWYtPmZpZWxkID0KLQkJCSAgICBmaC0+anBnX3NldHRpbmdzLgotCQkJICAgIG9kZF9ldmVuID8gVjRMMl9GSUVMRF9UT1AgOiBWNEwyX0ZJRUxEX0JPVFRPTTsKKwkJCWJ1Zi0+ZmllbGQgPSBmaC0+anBnX3NldHRpbmdzLm9kZF9ldmVuID8KKwkJCQlWNEwyX0ZJRUxEX1RPUCA6IFY0TDJfRklFTERfQk9UVE9NOwogCQllbHNlCi0JCQlidWYtPmZpZWxkID0KLQkJCSAgICBmaC0+anBnX3NldHRpbmdzLgotCQkJICAgIG9kZF9ldmVuID8gVjRMMl9GSUVMRF9TRVFfVEIgOgotCQkJICAgIFY0TDJfRklFTERfU0VRX0JUOworCQkJYnVmLT5maWVsZCA9IGZoLT5qcGdfc2V0dGluZ3Mub2RkX2V2ZW4gPworCQkJCVY0TDJfRklFTERfU0VRX1RCIDogVjRMMl9GSUVMRF9TRVFfQlQ7CiAKIAkJYnJlYWs7CiAKQEAgLTE3NTYsOCArMTQxMCw4IEBACiAKIAkJZHByaW50ayg1LAogCQkJS0VSTl9FUlIKLQkJCSIlczogdjRsMl9idWZmZXJfc3RhdHVzKCkgLSBpbnZhbGlkIGJ1ZmZlciB0eXBlfG1hcF9tb2RlICglZHwlZClcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlLCBmaC0+bWFwX21vZGUpOworCQkJIiVzOiAlcyAtIGludmFsaWQgYnVmZmVyIHR5cGV8bWFwX21vZGUgKCVkfCVkKVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgYnVmLT50eXBlLCBmaC0+bWFwX21vZGUpOwogCQlyZXR1cm4gLUVJTlZBTDsKIAl9CiAKQEAgLTE3NzAsODEgKzE0MjQsNTUgQEAKIAogc3RhdGljIGludAogem9yYW5fc2V0X25vcm0gKHN0cnVjdCB6b3JhbiAqenIsCi0JCWludCAgICAgICAgICAgbm9ybSkgLyogVklERU9fTU9ERV8qICovCisJCXY0bDJfc3RkX2lkIG5vcm0pCiB7Ci0JaW50IG5vcm1fZW5jb2Rlciwgb247CisJaW50IG9uOwogCiAJaWYgKHpyLT52NGxfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSB8fAogCSAgICB6ci0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9XQVJOSU5HCi0JCQkiJXM6IHNldF9ub3JtKCkgY2FsbGVkIHdoaWxlIGluIHBsYXliYWNrL2NhcHR1cmUgbW9kZVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCSIlczogJXMgY2FsbGVkIHdoaWxlIGluIHBsYXliYWNrL2NhcHR1cmUgbW9kZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUJVU1k7CiAJfQogCi0JaWYgKGxvY2tfbm9ybSAmJiBub3JtICE9IHpyLT5ub3JtKSB7Ci0JCWlmIChsb2NrX25vcm0gPiAxKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9XQVJOSU5HCi0JCQkJIiVzOiBzZXRfbm9ybSgpIC0gVFYgc3RhbmRhcmQgaXMgbG9ja2VkLCBjYW4gbm90IHN3aXRjaCBub3JtXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJldHVybiAtRVBFUk07Ci0JCX0gZWxzZSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9XQVJOSU5HCi0JCQkJIiVzOiBzZXRfbm9ybSgpIC0gVFYgc3RhbmRhcmQgaXMgbG9ja2VkLCBub3JtIHdhcyBub3QgY2hhbmdlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlub3JtID0genItPm5vcm07Ci0JCX0KLQl9Ci0KLQlpZiAobm9ybSAhPSBWSURFT19NT0RFX0FVVE8gJiYKLQkgICAgKG5vcm0gPCAwIHx8IG5vcm0gPj0genItPmNhcmQubm9ybXMgfHwKLQkgICAgICF6ci0+Y2FyZC50dm5bbm9ybV0pKSB7CisJaWYgKCEobm9ybSAmIHpyLT5jYXJkLm5vcm1zKSkgewogCQlkcHJpbnRrKDEsCi0JCQlLRVJOX0VSUiAiJXM6IHNldF9ub3JtKCkgLSB1bnN1cHBvcnRlZCBub3JtICVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIG5vcm0pOworCQkJS0VSTl9FUlIgIiVzOiAlcyAtIHVuc3VwcG9ydGVkIG5vcm0gJWxseFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgbm9ybSk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCWlmIChub3JtID09IFZJREVPX01PREVfQVVUTykgewotCQlpbnQgc3RhdHVzOworCWlmIChub3JtID09IFY0TDJfU1REX0FMTCkgeworCQlpbnQgc3RhdHVzID0gMDsKKwkJdjRsMl9zdGRfaWQgc3RkID0gMDsKIAotCQkvKiBpZiB3ZSBoYXZlIGF1dG9kZXRlY3QsIC4uLiAqLwotCQlzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9jYXBhYmlsaXR5IGNhcHM7Ci0JCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTLCAmY2Fwcyk7Ci0JCWlmICghKGNhcHMuZmxhZ3MgJiBWSURFT19ERUNPREVSX0FVVE8pKSB7Ci0JCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogbm9ybT1hdXRvIHVuc3VwcG9ydGVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9OT1JNLCAmbm9ybSk7CisJCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIHF1ZXJ5c3RkLCAmc3RkKTsKKwkJZGVjb2Rlcl9jYWxsKHpyLCB0dW5lciwgc19zdGQsIHN0ZCk7CiAKIAkJLyogbGV0IGNoYW5nZXMgY29tZSBpbnRvIGVmZmVjdCAqLwogCQlzc2xlZXAoMik7CiAKLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0dFVF9TVEFUVVMsICZzdGF0dXMpOwotCQlpZiAoIShzdGF0dXMgJiBERUNPREVSX1NUQVRVU19HT09EKSkgeworCQlkZWNvZGVyX2NhbGwoenIsIHZpZGVvLCBnX2lucHV0X3N0YXR1cywgJnN0YXR1cyk7CisJCWlmIChzdGF0dXMgJiBWNEwyX0lOX1NUX05PX1NJR05BTCkgewogCQkJZHByaW50aygxLAogCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBzZXRfbm9ybSgpIC0gbm8gbm9ybSBkZXRlY3RlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkJIiVzOiAlcyAtIG5vIG5vcm0gZGV0ZWN0ZWRcbiIsCisJCQkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fKTsKIAkJCS8qIHJlc2V0IG5vcm0gKi8KLQkJCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfTk9STSwgJnpyLT5ub3JtKTsKKwkJCWRlY29kZXJfY2FsbCh6ciwgdHVuZXIsIHNfc3RkLCB6ci0+bm9ybSk7CiAJCQlyZXR1cm4gLUVJTzsKIAkJfQogCi0JCWlmIChzdGF0dXMgJiBERUNPREVSX1NUQVRVU19OVFNDKQotCQkJbm9ybSA9IFZJREVPX01PREVfTlRTQzsKLQkJZWxzZSBpZiAoc3RhdHVzICYgREVDT0RFUl9TVEFUVVNfU0VDQU0pCi0JCQlub3JtID0gVklERU9fTU9ERV9TRUNBTTsKLQkJZWxzZQotCQkJbm9ybSA9IFZJREVPX01PREVfUEFMOworCQlub3JtID0gc3RkOwogCX0KLQl6ci0+dGltaW5nID0genItPmNhcmQudHZuW25vcm1dOwotCW5vcm1fZW5jb2RlciA9IG5vcm07CisJaWYgKG5vcm0gJiBWNEwyX1NURF9TRUNBTSkKKwkJenItPnRpbWluZyA9IHpyLT5jYXJkLnR2blsyXTsKKwllbHNlIGlmIChub3JtICYgVjRMMl9TVERfTlRTQykKKwkJenItPnRpbWluZyA9IHpyLT5jYXJkLnR2blsxXTsKKwllbHNlCisJCXpyLT50aW1pbmcgPSB6ci0+Y2FyZC50dm5bMF07CiAKIAkvKiBXZSBzd2l0Y2ggb3ZlcmxheSBvZmYgYW5kIG9uIHNpbmNlIGEgY2hhbmdlIGluIHRoZQogCSAqIG5vcm0gbmVlZHMgZGlmZmVyZW50IFZGRSBzZXR0aW5ncyAqLwpAQCAtMTg1Miw4ICsxNDgwLDggQEAKIAlpZiAob24pCiAJCXpyMzYwNTdfb3ZlcmxheSh6ciwgMCk7CiAKLQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX05PUk0sICZub3JtKTsKLQllbmNvZGVyX2NvbW1hbmQoenIsIEVOQ09ERVJfU0VUX05PUk0sICZub3JtX2VuY29kZXIpOworCWRlY29kZXJfY2FsbCh6ciwgdHVuZXIsIHNfc3RkLCBub3JtKTsKKwllbmNvZGVyX2NhbGwoenIsIHZpZGVvLCBzX3N0ZF9vdXRwdXQsIG5vcm0pOwogCiAJaWYgKG9uKQogCQl6cjM2MDU3X292ZXJsYXkoenIsIDEpOwpAQCAtMTg2OCw3ICsxNDk2LDcgQEAKIHpvcmFuX3NldF9pbnB1dCAoc3RydWN0IHpvcmFuICp6ciwKIAkJIGludCAgICAgICAgICAgaW5wdXQpCiB7Ci0JaW50IHJlYWxpbnB1dDsKKwlzdHJ1Y3QgdjRsMl9yb3V0aW5nIHJvdXRlID0geyAwLCAwIH07CiAKIAlpZiAoaW5wdXQgPT0genItPmlucHV0KSB7CiAJCXJldHVybiAwOwpAQCAtMTg3OCwyMyArMTUwNiwyMyBAQAogCSAgICB6ci0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKIAkJZHByaW50aygxLAogCQkJS0VSTl9XQVJOSU5HCi0JCQkiJXM6IHNldF9pbnB1dCgpIGNhbGxlZCB3aGlsZSBpbiBwbGF5YmFjay9jYXB0dXJlIG1vZGVcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIGNhbGxlZCB3aGlsZSBpbiBwbGF5YmFjay9jYXB0dXJlIG1vZGVcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQlyZXR1cm4gLUVCVVNZOwogCX0KIAogCWlmIChpbnB1dCA8IDAgfHwgaW5wdXQgPj0genItPmNhcmQuaW5wdXRzKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHNldF9pbnB1dCgpIC0gdW5uc3VwcG9ydGVkIGlucHV0ICVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGlucHV0KTsKKwkJCSIlczogJXMgLSB1bm5zdXBwb3J0ZWQgaW5wdXQgJWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIGlucHV0KTsKIAkJcmV0dXJuIC1FSU5WQUw7CiAJfQogCi0JcmVhbGlucHV0ID0genItPmNhcmQuaW5wdXRbaW5wdXRdLm11eHNlbDsKKwlyb3V0ZS5pbnB1dCA9IHpyLT5jYXJkLmlucHV0W2lucHV0XS5tdXhzZWw7CiAJenItPmlucHV0ID0gaW5wdXQ7CiAKLQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX0lOUFVULCAmcmVhbGlucHV0KTsKKwlkZWNvZGVyX2NhbGwoenIsIHZpZGVvLCBzX3JvdXRpbmcsICZyb3V0ZSk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE5MDMsNDEwICsxNTMxLDE0IEBACiAgKiAgIGlvY3RsIHJvdXRpbmUKICAqLwogCi1zdGF0aWMgbG9uZyB6b3Jhbl9kb19pb2N0bChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKQorI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorc3RhdGljIGxvbmcgem9yYW5fZGVmYXVsdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgaW50IGNtZCwgdm9pZCAqYXJnKQogewotCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBmaWxlLT5wcml2YXRlX2RhdGE7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CiAJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKLQkvKiBDQVJFRlVMOiB1c2VkIGluIG11bHRpcGxlIHBsYWNlcyBoZXJlICovCiAJc3RydWN0IHpvcmFuX2pwZ19zZXR0aW5ncyBzZXR0aW5nczsKIAotCS8qIHdlIG1pZ2h0IGhhdmUgb2xkZXIgYnVmZmVycyBseWluZyBhcm91bmQuLi4gV2UgZG9uJ3Qgd2FudAotCSAqIHRvIHdhaXQsIGJ1dCB3ZSBkbyB3YW50IHRvIHRyeSBjbGVhbmluZyB0aGVtIHVwIEFTQVAuIFNvCi0JICogd2UgdHJ5IHRvIG9idGFpbiB0aGUgbG9jayBhbmQgZnJlZSB0aGVtLiBJZiB0aGF0IGZhaWxzLCB3ZQotCSAqIGRvbid0IGRvIGFueXRoaW5nIGFuZCB3YWl0IGZvciB0aGUgbmV4dCB0dXJuLiBJbiB0aGUgZW5kLAotCSAqIHpvcmFuX2Nsb3NlKCkgb3IgYSBuZXcgYWxsb2NhdGlvbiB3aWxsIHN0aWxsIGZyZWUgdGhlbS4uLgotCSAqIFRoaXMgaXMganVzdCBhICd0aGUgc29vbmVyIHRoZSBiZXR0ZXInIGV4dHJhICdmZWF0dXJlJwotCSAqCi0JICogV2UgZG9uJ3QgZnJlZSB0aGUgYnVmZmVycyByaWdodCBvbiBtdW5tYXAoKSBiZWNhdXNlIHRoYXQKLQkgKiBjYXVzZXMgb29wc2VzIChrZnJlZSgpIGluc2lkZSBtdW5tYXAoKSBvb3BzZXMgZm9yIG5vCi0JICogYXBwYXJlbnQgcmVhc29uIC0gaXQncyBhbHNvIG5vdCByZXByb2R1Y2VhYmxlIGluIGFueSB3YXksCi0JICogYnV0IG1vdmluZyB0aGUgZnJlZSBjb2RlIG91dHNpZGUgdGhlIG11bm1hcCgpIGhhbmRsZXIgZml4ZXMKLQkgKiBhbGwgdGhpcy4uLiBJZiBzb21lb25lIGtub3dzIHdoeSwgcGxlYXNlIGV4cGxhaW4gbWUgKFJvbmFsZCkKLQkgKi8KLQlpZiAobXV0ZXhfdHJ5bG9jaygmenItPnJlc291cmNlX2xvY2spKSB7Ci0JCS8qIHdlIG9idGFpbmVkIGl0ISBMZXQncyB0cnkgdG8gZnJlZSBzb21lIHRoaW5ncyAqLwotCQlpZiAoZmgtPmpwZ19idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkKQotCQkJanBnX2ZidWZmZXJfZnJlZShmaWxlKTsKLQkJaWYgKGZoLT52NGxfYnVmZmVycy5yZWFkeV90b19iZV9mcmVlZCkKLQkJCXY0bF9mYnVmZmVyX2ZyZWUoZmlsZSk7Ci0KLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JfQotCiAJc3dpdGNoIChjbWQpIHsKLQotCWNhc2UgVklESU9DR0NBUDoKLQl7Ci0JCXN0cnVjdCB2aWRlb19jYXBhYmlsaXR5ICp2Y2FwID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ0dDQVBcbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQltZW1zZXQodmNhcCwgMCwgc2l6ZW9mKHN0cnVjdCB2aWRlb19jYXBhYmlsaXR5KSk7Ci0JCXN0cm5jcHkodmNhcC0+bmFtZSwgWlJfREVWTkFNRSh6ciksIHNpemVvZih2Y2FwLT5uYW1lKS0xKTsKLQkJdmNhcC0+dHlwZSA9IFpPUkFOX1ZJRF9UWVBFOwotCi0JCXZjYXAtPmNoYW5uZWxzID0genItPmNhcmQuaW5wdXRzOwotCQl2Y2FwLT5hdWRpb3MgPSAwOwotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXZjYXAtPm1heHdpZHRoID0gQlVaX01BWF9XSURUSDsKLQkJdmNhcC0+bWF4aGVpZ2h0ID0gQlVaX01BWF9IRUlHSFQ7Ci0JCXZjYXAtPm1pbndpZHRoID0gQlVaX01JTl9XSURUSDsKLQkJdmNhcC0+bWluaGVpZ2h0ID0gQlVaX01JTl9IRUlHSFQ7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ0dDSEFOOgotCXsKLQkJc3RydWN0IHZpZGVvX2NoYW5uZWwgKnZjaGFuID0gYXJnOwotCQlpbnQgY2hhbm5lbCA9IHZjaGFuLT5jaGFubmVsOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ0dDSEFOIC0gY2hhbm5lbD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCB2Y2hhbi0+Y2hhbm5lbCk7Ci0KLQkJbWVtc2V0KHZjaGFuLCAwLCBzaXplb2Yoc3RydWN0IHZpZGVvX2NoYW5uZWwpKTsKLQkJaWYgKGNoYW5uZWwgPiB6ci0+Y2FyZC5pbnB1dHMgfHwgY2hhbm5lbCA8IDApIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DR0NIQU4gb24gbm90IGV4aXN0aW5nIGNoYW5uZWwgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGNoYW5uZWwpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlzdHJjcHkodmNoYW4tPm5hbWUsIHpyLT5jYXJkLmlucHV0W2NoYW5uZWxdLm5hbWUpOwotCi0JCXZjaGFuLT50dW5lcnMgPSAwOwotCQl2Y2hhbi0+ZmxhZ3MgPSAwOwotCQl2Y2hhbi0+dHlwZSA9IFZJREVPX1RZUEVfQ0FNRVJBOwotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXZjaGFuLT5ub3JtID0genItPm5vcm07Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQl2Y2hhbi0+Y2hhbm5lbCA9IGNoYW5uZWw7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCQkvKiBSSjogdGhlIGRvY3VtZW50YXRpb24gYXQgaHR0cDovL3JvYWRydW5uZXIuc3dhbnNlYS5saW51eC5vcmcudWsvdjRsYXBpLnNodG1sIHNheXM6Ci0JCSAqCi0JCSAqICogIlRoZSBWSURJT0NTQ0hBTiBpb2N0bCB0YWtlcyBhbiBpbnRlZ2VyIGFyZ3VtZW50IGFuZCBzd2l0Y2hlcyB0aGUgY2FwdHVyZSB0byB0aGlzIGlucHV0LiIKLQkJICogKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF5eXl5eXl4KLQkJICogKiBUaGUgZmFtb3MgQlRUViBkcml2ZXIgaGFzIGl0IGltcGxlbWVudGVkIHdpdGggYSBzdHJ1Y3QgdmlkZW9fY2hhbm5lbCBhcmd1bWVudAotCQkgKiAqIGFuZCB3ZSBmb2xsb3cgaXQgZm9yIGNvbXBhdGliaWxpdHkgcmVhc29ucwotCQkgKiAqCi0JCSAqICogQlRXOiB0aGlzIGlzIHRoZSBvbmx5IHdheSB0aGUgdXNlciBjYW4gc2V0IHRoZSBub3JtIQotCQkgKi8KLQotCWNhc2UgVklESU9DU0NIQU46Ci0JewotCQlzdHJ1Y3QgdmlkZW9fY2hhbm5lbCAqdmNoYW4gPSBhcmc7Ci0JCWludCByZXM7Ci0KLQkJZHByaW50aygzLAotCQkJS0VSTl9ERUJVRwotCQkJIiVzOiBWSURJT0NTQ0hBTiAtIGNoYW5uZWw9JWQsIG5vcm09JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgdmNoYW4tPmNoYW5uZWwsIHZjaGFuLT5ub3JtKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCWlmICgocmVzID0gem9yYW5fc2V0X2lucHV0KHpyLCB2Y2hhbi0+Y2hhbm5lbCkpKQotCQkJZ290byBzY2hhbl91bmxvY2tfYW5kX3JldHVybjsKLQkJaWYgKChyZXMgPSB6b3Jhbl9zZXRfbm9ybSh6ciwgdmNoYW4tPm5vcm0pKSkKLQkJCWdvdG8gc2NoYW5fdW5sb2NrX2FuZF9yZXR1cm47Ci0KLQkJLyogTWFrZSBzdXJlIHRoZSBjaGFuZ2VzIGNvbWUgaW50byBlZmZlY3QgKi8KLQkJcmVzID0gd2FpdF9ncmFiX3BlbmRpbmcoenIpOwotCXNjaGFuX3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NHUElDVDoKLQl7Ci0JCXN0cnVjdCB2aWRlb19waWN0dXJlICp2cGljdCA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NHUElDVFxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCW1lbXNldCh2cGljdCwgMCwgc2l6ZW9mKHN0cnVjdCB2aWRlb19waWN0dXJlKSk7Ci0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJdnBpY3QtPmh1ZSA9IHpyLT5odWU7Ci0JCXZwaWN0LT5icmlnaHRuZXNzID0genItPmJyaWdodG5lc3M7Ci0JCXZwaWN0LT5jb250cmFzdCA9IHpyLT5jb250cmFzdDsKLQkJdnBpY3QtPmNvbG91ciA9IHpyLT5zYXR1cmF0aW9uOwotCQlpZiAoZmgtPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0KSB7Ci0JCQl2cGljdC0+ZGVwdGggPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQtPmRlcHRoOwotCQkJdnBpY3QtPnBhbGV0dGUgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy5mb3JtYXQtPnBhbGV0dGU7Ci0JCX0gZWxzZSB7Ci0JCQl2cGljdC0+ZGVwdGggPSAwOwotCQl9Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ1NQSUNUOgotCXsKLQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgKnZwaWN0ID0gYXJnOwotCQlpbnQgaTsKLQotCQlkcHJpbnRrKDMsCi0JCQlLRVJOX0RFQlVHCi0JCQkiJXM6IFZJRElPQ1NQSUNUIC0gYnJpPSVkLCBodWU9JWQsIGNvbD0lZCwgY29uPSVkLCBkZXA9JWQsIHBhbD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCB2cGljdC0+YnJpZ2h0bmVzcywgdnBpY3QtPmh1ZSwKLQkJCXZwaWN0LT5jb2xvdXIsIHZwaWN0LT5jb250cmFzdCwgdnBpY3QtPmRlcHRoLAotCQkJdnBpY3QtPnBhbGV0dGUpOwotCi0JCWZvciAoaSA9IDA7IGkgPCBOVU1fRk9STUFUUzsgaSsrKSB7Ci0JCQljb25zdCBzdHJ1Y3Qgem9yYW5fZm9ybWF0ICpmbXQgPSAmem9yYW5fZm9ybWF0c1tpXTsKLQotCQkJaWYgKGZtdC0+cGFsZXR0ZSAhPSAtMSAmJgotCQkJICAgIGZtdC0+ZmxhZ3MgJiBaT1JBTl9GT1JNQVRfT1ZFUkxBWSAmJgotCQkJICAgIGZtdC0+cGFsZXR0ZSA9PSB2cGljdC0+cGFsZXR0ZSAmJgotCQkJICAgIGZtdC0+ZGVwdGggPT0gdnBpY3QtPmRlcHRoKQotCQkJCWJyZWFrOwotCQl9Ci0JCWlmIChpID09IE5VTV9GT1JNQVRTKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ1NQSUNUIC0gSW52YWxpZCBwYWxldHRlICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCB2cGljdC0+cGFsZXR0ZSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlkZWNvZGVyX2NvbW1hbmQoenIsIERFQ09ERVJfU0VUX1BJQ1RVUkUsIHZwaWN0KTsKLQotCQl6ci0+aHVlID0gdnBpY3QtPmh1ZTsKLQkJenItPmNvbnRyYXN0ID0gdnBpY3QtPmNvbnRyYXN0OwotCQl6ci0+c2F0dXJhdGlvbiA9IHZwaWN0LT5jb2xvdXI7Ci0JCXpyLT5icmlnaHRuZXNzID0gdnBpY3QtPmJyaWdodG5lc3M7Ci0KLQkJZmgtPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0ID0gJnpvcmFuX2Zvcm1hdHNbaV07Ci0KLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DQ0FQVFVSRToKLQl7Ci0JCWludCAqb24gPSBhcmcsIHJlczsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NDQVBUVVJFIC0gb249JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgKm9uKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJlcyA9IHNldHVwX292ZXJsYXkoZmlsZSwgKm9uKTsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NHV0lOOgotCXsKLQkJc3RydWN0IHZpZGVvX3dpbmRvdyAqdndpbiA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NHV0lOXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJbWVtc2V0KHZ3aW4sIDAsIHNpemVvZihzdHJ1Y3QgdmlkZW9fd2luZG93KSk7Ci0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJdndpbi0+eCA9IGZoLT5vdmVybGF5X3NldHRpbmdzLng7Ci0JCXZ3aW4tPnkgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy55OwotCQl2d2luLT53aWR0aCA9IGZoLT5vdmVybGF5X3NldHRpbmdzLndpZHRoOwotCQl2d2luLT5oZWlnaHQgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy5oZWlnaHQ7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQl2d2luLT5jbGlwY291bnQgPSAwOwotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NTV0lOOgotCXsKLQkJc3RydWN0IHZpZGVvX3dpbmRvdyAqdndpbiA9IGFyZzsKLQkJaW50IHJlczsKLQotCQlkcHJpbnRrKDMsCi0JCQlLRVJOX0RFQlVHCi0JCQkiJXM6IFZJRElPQ1NXSU4gLSB4PSVkLCB5PSVkLCB3PSVkLCBoPSVkLCBjbGlwY291bnQ9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgdndpbi0+eCwgdndpbi0+eSwgdndpbi0+d2lkdGgsCi0JCQl2d2luLT5oZWlnaHQsIHZ3aW4tPmNsaXBjb3VudCk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXMgPQotCQkgICAgc2V0dXBfd2luZG93KGZpbGUsIHZ3aW4tPngsIHZ3aW4tPnksIHZ3aW4tPndpZHRoLAotCQkJCSB2d2luLT5oZWlnaHQsIHZ3aW4tPmNsaXBzLAotCQkJCSB2d2luLT5jbGlwY291bnQsIE5VTEwpOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ0dGQlVGOgotCXsKLQkJc3RydWN0IHZpZGVvX2J1ZmZlciAqdmJ1ZiA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NHRkJVRlxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJKnZidWYgPSB6ci0+YnVmZmVyOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DU0ZCVUY6Ci0JewotCQlzdHJ1Y3QgdmlkZW9fYnVmZmVyICp2YnVmID0gYXJnOwotCQlpbnQgaSwgcmVzID0gMDsKLQotCQlkcHJpbnRrKDMsCi0JCQlLRVJOX0RFQlVHCi0JCQkiJXM6IFZJRElPQ1NGQlVGIC0gYmFzZT0lcCwgdz0lZCwgaD0lZCwgZGVwdGg9JWQsIGJwbD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCB2YnVmLT5iYXNlLCB2YnVmLT53aWR0aCwKLQkJCXZidWYtPmhlaWdodCwgdmJ1Zi0+ZGVwdGgsIHZidWYtPmJ5dGVzcGVybGluZSk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IE5VTV9GT1JNQVRTOyBpKyspCi0JCQlpZiAoem9yYW5fZm9ybWF0c1tpXS5kZXB0aCA9PSB2YnVmLT5kZXB0aCkKLQkJCQlicmVhazsKLQkJaWYgKGkgPT0gTlVNX0ZPUk1BVFMpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DU0ZCVUYgLSBpbnZhbGlkIGZidWYgZGVwdGggJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIHZidWYtPmRlcHRoKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXMgPQotCQkgICAgc2V0dXBfZmJ1ZmZlcihmaWxlLCB2YnVmLT5iYXNlLCAmem9yYW5fZm9ybWF0c1tpXSwKLQkJCQkgIHZidWYtPndpZHRoLCB2YnVmLT5oZWlnaHQsCi0JCQkJICB2YnVmLT5ieXRlc3BlcmxpbmUpOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ1NZTkM6Ci0JewotCQlpbnQgKmZyYW1lID0gYXJnLCByZXM7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DU1lOQyAtIGZyYW1lPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksICpmcmFtZSk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXMgPSB2NGxfc3luYyhmaWxlLCAqZnJhbWUpOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJaWYgKCFyZXMpCi0JCQl6ci0+djRsX3N5bmNfdGFpbCsrOwotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ01DQVBUVVJFOgotCXsKLQkJc3RydWN0IHZpZGVvX21tYXAgKnZtYXAgPSBhcmc7Ci0JCWludCByZXM7Ci0KLQkJZHByaW50aygzLAotCQkJS0VSTl9ERUJVRwotCQkJIiVzOiBWSURJT0NNQ0FQVFVSRSAtIGZyYW1lPSVkLCBnZW9tPSVkeCVkLCBmbXQ9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgdm1hcC0+ZnJhbWUsIHZtYXAtPndpZHRoLCB2bWFwLT5oZWlnaHQsCi0JCQl2bWFwLT5mb3JtYXQpOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJcmVzID0gdjRsX2dyYWIoZmlsZSwgdm1hcCk7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ0dNQlVGOgotCXsKLQkJc3RydWN0IHZpZGVvX21idWYgKnZtYnVmID0gYXJnOwotCQlpbnQgaSwgcmVzID0gMDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NHTUJVRlxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCXZtYnVmLT5zaXplID0KLQkJICAgIGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVycyAqCi0JCSAgICBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCXZtYnVmLT5mcmFtZXMgPSBmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnM7Ci0JCWZvciAoaSA9IDA7IGkgPCB2bWJ1Zi0+ZnJhbWVzOyBpKyspIHsKLQkJCXZtYnVmLT5vZmZzZXRzW2ldID0KLQkJCSAgICBpICogZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOwotCQl9Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWlmIChmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkIHx8IGZoLT52NGxfYnVmZmVycy5hbGxvY2F0ZWQpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DR01CVUYgLSBidWZmZXJzIGFscmVhZHkgYWxsb2NhdGVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQlnb3RvIHY0bDFyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQlpZiAodjRsX2ZidWZmZXJfYWxsb2MoZmlsZSkpIHsKLQkJCXJlcyA9IC1FTk9NRU07Ci0JCQlnb3RvIHY0bDFyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQkvKiBUaGUgbmV4dCBtbWFwIHdpbGwgbWFwIHRoZSBWNEwgYnVmZmVycyAqLwotCQlmaC0+bWFwX21vZGUgPSBaT1JBTl9NQVBfTU9ERV9SQVc7Ci0JdjRsMXJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NHVU5JVDoKLQl7Ci0JCXN0cnVjdCB2aWRlb191bml0ICp2dW5pdCA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NHVU5JVFxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCXZ1bml0LT52aWRlbyA9IHpyLT52aWRlb19kZXYtPm1pbm9yOwotCQl2dW5pdC0+dmJpID0gVklERU9fTk9fVU5JVDsKLQkJdnVuaXQtPnJhZGlvID0gVklERU9fTk9fVU5JVDsKLQkJdnVuaXQtPmF1ZGlvID0gVklERU9fTk9fVU5JVDsKLQkJdnVuaXQtPnRlbGV0ZXh0ID0gVklERU9fTk9fVU5JVDsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JCS8qCi0JCSAqIFJKOiBJbiBwcmluY2lwYWwgd2UgY291bGQgc3VwcG9ydCBzdWJjYXB0dXJlcyBmb3IgVjRMIGdyYWJiaW5nLgotCQkgKiAgICAgTm90IGV2ZW4gdGhlIGZhbW91cyBCVFRWIGRyaXZlciBoYXMgdGhlbSwgaG93ZXZlci4KLQkJICogICAgIElmIHRoZXJlIHNob3VsZCBiZSBhIHN0cm9uZyBkZW1hbmQsIG9uZSBjb3VsZCBjb25zaWRlcgotCQkgKiAgICAgdG8gaW1wbGVtZW50IHRoZW0uCi0JCSAqLwotCWNhc2UgVklESU9DR0NBUFRVUkU6Ci0JewotCQlkcHJpbnRrKDMsIEtFUk5fRVJSICIlczogVklESU9DR0NBUFRVUkUgbm90IHN1cHBvcnRlZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DU0NBUFRVUkU6Ci0JewotCQlkcHJpbnRrKDMsIEtFUk5fRVJSICIlczogVklESU9DU0NBUFRVUkUgbm90IHN1cHBvcnRlZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCQlicmVhazsKLQogCWNhc2UgQlVaSU9DX0dfUEFSQU1TOgogCXsKIAkJc3RydWN0IHpvcmFuX3BhcmFtcyAqYnBhcmFtcyA9IGFyZzsKQEAgLTIzMTksNyArMTU1MSwxMyBAQAogCiAJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAotCQlicGFyYW1zLT5ub3JtID0genItPm5vcm07CisJCWlmICh6ci0+bm9ybSAmIFY0TDJfU1REX05UU0MpCisJCQlicGFyYW1zLT5ub3JtID0gVklERU9fTU9ERV9OVFNDOworCQllbHNlIGlmICh6ci0+bm9ybSAmIFY0TDJfU1REX1BBTCkKKwkJCWJwYXJhbXMtPm5vcm0gPSBWSURFT19NT0RFX1BBTDsKKwkJZWxzZQorCQkJYnBhcmFtcy0+bm9ybSA9IFZJREVPX01PREVfU0VDQU07CisKIAkJYnBhcmFtcy0+aW5wdXQgPSB6ci0+aW5wdXQ7CiAKIAkJYnBhcmFtcy0+ZGVjaW1hdGlvbiA9IGZoLT5qcGdfc2V0dGluZ3MuZGVjaW1hdGlvbjsKQEAgLTIzNTIsNyArMTU5MCw2IEBACiAKIAkJcmV0dXJuIDA7CiAJfQotCQlicmVhazsKIAogCWNhc2UgQlVaSU9DX1NfUEFSQU1TOgogCXsKQEAgLTIzOTUsMTggKzE2MzIsMTcgQEAKIAogCQkvKiBDaGVjayB0aGUgcGFyYW1zIGZpcnN0IGJlZm9yZSBvdmVyd3JpdGluZyBvdXIKIAkJICogbnRlcm5hbCB2YWx1ZXMgKi8KLQkJaWYgKHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyh6ciwgJnNldHRpbmdzKSkgeworCQlpZiAoem9yYW5fY2hlY2tfanBnX3NldHRpbmdzKHpyLCAmc2V0dGluZ3MsIDApKSB7CiAJCQlyZXMgPSAtRUlOVkFMOwogCQkJZ290byBzcGFyYW1zX3VubG9ja19hbmRfcmV0dXJuOwogCQl9CiAKIAkJZmgtPmpwZ19zZXR0aW5ncyA9IHNldHRpbmdzOwotCXNwYXJhbXNfdW5sb2NrX2FuZF9yZXR1cm46CitzcGFyYW1zX3VubG9ja19hbmRfcmV0dXJuOgogCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlyZXR1cm4gcmVzOwogCX0KLQkJYnJlYWs7CiAKIAljYXNlIEJVWklPQ19SRVFCVUZTOgogCXsKQEAgLTI0MzAsMzggKzE2NjYsMzQgQEAKIAkJICogdGFibGVzIHRvIGEgTWF4aW11bSBvZiAyIE1CICovCiAJCWlmIChicmVxLT5zaXplID4ganBnX2J1ZnNpemUpCiAJCQlicmVxLT5zaXplID0ganBnX2J1ZnNpemU7Ci0JCWlmIChmaC0+anBnX2J1ZmZlcnMubmVlZF9jb250aWd1b3VzICYmCi0JCSAgICBicmVxLT5zaXplID4gTUFYX0tNQUxMT0NfTUVNKQotCQkJYnJlcS0+c2l6ZSA9IE1BWF9LTUFMTE9DX01FTTsKIAogCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAKLQkJaWYgKGZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgfHwgZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCkgeworCQlpZiAoZmgtPmJ1ZmZlcnMuYWxsb2NhdGVkKSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKLQkJCQkiJXM6IEJVWklPQ19SRVFCVUZTIC0gYnVmZmVycyBhbGxyZWFkeSBhbGxvY2F0ZWRcbiIsCisJCQkJIiVzOiBCVVpJT0NfUkVRQlVGUyAtIGJ1ZmZlcnMgYWxyZWFkeSBhbGxvY2F0ZWRcbiIsCiAJCQkJWlJfREVWTkFNRSh6cikpOwogCQkJcmVzID0gLUVCVVNZOwogCQkJZ290byBqcGdyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47CiAJCX0KIAotCQlmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMgPSBicmVxLT5jb3VudDsKLQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplID0gYnJlcS0+c2l6ZTsKKwkJLyogVGhlIG5leHQgbW1hcCB3aWxsIG1hcCB0aGUgTUpQRUcgYnVmZmVycyAtIGNvdWxkCisJCSAqIGFsc28gYmUgKl9QTEFZLCBidXQgaXQgZG9lc24ndCBtYXR0ZXIgaGVyZSAqLworCQltYXBfbW9kZV9qcGcoZmgsIDApOworCQlmaC0+YnVmZmVycy5udW1fYnVmZmVycyA9IGJyZXEtPmNvdW50OworCQlmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSA9IGJyZXEtPnNpemU7CiAKLQkJaWYgKGpwZ19mYnVmZmVyX2FsbG9jKGZpbGUpKSB7CisJCWlmIChqcGdfZmJ1ZmZlcl9hbGxvYyhmaCkpIHsKIAkJCXJlcyA9IC1FTk9NRU07CiAJCQlnb3RvIGpwZ3JlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKIAkJfQogCi0JCS8qIFRoZSBuZXh0IG1tYXAgd2lsbCBtYXAgdGhlIE1KUEVHIGJ1ZmZlcnMgLSBjb3VsZAotCQkgKiBhbHNvIGJlICpfUExBWSwgYnV0IGl0IGRvZXNuJ3QgbWF0dGVyIGhlcmUgKi8KLQkJZmgtPm1hcF9tb2RlID0gWk9SQU5fTUFQX01PREVfSlBHX1JFQzsKLQlqcGdyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm46CitqcGdyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm46CiAJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwogCiAJCXJldHVybiByZXM7CiAJfQotCQlicmVhazsKIAogCWNhc2UgQlVaSU9DX1FCVUZfQ0FQVDoKIAl7CkBAIC0yNDcxLDEyICsxNzAzLDExIEBACiAJCQlaUl9ERVZOQU1FKHpyKSwgKmZyYW1lKTsKIAogCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCXJlcyA9IGpwZ19xYnVmKGZpbGUsICpmcmFtZSwgQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKTsKKwkJcmVzID0ganBnX3FidWYoZmgsICpmcmFtZSwgQlVaX01PREVfTU9USU9OX0NPTVBSRVNTKTsKIAkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAKIAkJcmV0dXJuIHJlczsKIAl9Ci0JCWJyZWFrOwogCiAJY2FzZSBCVVpJT0NfUUJVRl9QTEFZOgogCXsKQEAgLTI0ODYsMTIgKzE3MTcsMTEgQEAKIAkJCVpSX0RFVk5BTUUoenIpLCAqZnJhbWUpOwogCiAJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJcmVzID0ganBnX3FidWYoZmlsZSwgKmZyYW1lLCBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUyk7CisJCXJlcyA9IGpwZ19xYnVmKGZoLCAqZnJhbWUsIEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKTsKIAkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAKIAkJcmV0dXJuIHJlczsKIAl9Ci0JCWJyZWFrOwogCiAJY2FzZSBCVVpJT0NfU1lOQzoKIAl7CkBAIC0yNTAxLDE3ICsxNzMxLDI2IEBACiAJCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IEJVWklPQ19TWU5DXG4iLCBaUl9ERVZOQU1FKHpyKSk7CiAKIAkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXMgPSBqcGdfc3luYyhmaWxlLCBic3luYyk7CisKKwkJaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcpIHsKKwkJCWRwcmludGsoMiwgS0VSTl9XQVJOSU5HCisJCQkJIiVzOiAlcyAtIG5vdCBpbiBqcGcgY2FwdHVyZSBtb2RlXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CisJCQlyZXMgPSAtRUlOVkFMOworCQl9IGVsc2UgeworCQkJcmVzID0ganBnX3N5bmMoZmgsIGJzeW5jKTsKKwkJfQogCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKIAogCQlyZXR1cm4gcmVzOwogCX0KLQkJYnJlYWs7CiAKIAljYXNlIEJVWklPQ19HX1NUQVRVUzoKIAl7CiAJCXN0cnVjdCB6b3Jhbl9zdGF0dXMgKmJzdGF0ID0gYXJnOwotCQlpbnQgbm9ybSwgaW5wdXQsIHN0YXR1cywgcmVzID0gMDsKKwkJc3RydWN0IHY0bDJfcm91dGluZyByb3V0ZSA9IHsgMCwgMCB9OworCQlpbnQgc3RhdHVzID0gMCwgcmVzID0gMDsKKwkJdjRsMl9zdGRfaWQgbm9ybTsKIAogCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBCVVpJT0NfR19TVEFUVVNcbiIsIFpSX0RFVk5BTUUoenIpKTsKIApAQCAtMjUyMyw4ICsxNzYyLDcgQEAKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAKLQkJaW5wdXQgPSB6ci0+Y2FyZC5pbnB1dFtic3RhdC0+aW5wdXRdLm11eHNlbDsKLQkJbm9ybSA9IFZJREVPX01PREVfQVVUTzsKKwkJcm91dGUuaW5wdXQgPSB6ci0+Y2FyZC5pbnB1dFtic3RhdC0+aW5wdXRdLm11eHNlbDsKIAogCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAKQEAgLTI1MzcsMTYyOSArMTc3NSwxMjYyIEBACiAJCQlnb3RvIGdzdGF0X3VubG9ja19hbmRfcmV0dXJuOwogCQl9CiAKLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9JTlBVVCwgJmlucHV0KTsKLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9OT1JNLCAmbm9ybSk7CisJCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIHNfcm91dGluZywgJnJvdXRlKTsKIAogCQkvKiBzbGVlcCAxIHNlY29uZCAqLwogCQlzc2xlZXAoMSk7CiAKIAkJLyogR2V0IHN0YXR1cyBvZiB2aWRlbyBkZWNvZGVyICovCi0JCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9HRVRfU1RBVFVTLCAmc3RhdHVzKTsKKwkJZGVjb2Rlcl9jYWxsKHpyLCB2aWRlbywgcXVlcnlzdGQsICZub3JtKTsKKwkJZGVjb2Rlcl9jYWxsKHpyLCB2aWRlbywgZ19pbnB1dF9zdGF0dXMsICZzdGF0dXMpOwogCiAJCS8qIHJlc3RvcmUgcHJldmlvdXMgaW5wdXQgYW5kIG5vcm0gKi8KLQkJaW5wdXQgPSB6ci0+Y2FyZC5pbnB1dFt6ci0+aW5wdXRdLm11eHNlbDsKLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9JTlBVVCwgJmlucHV0KTsKLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX1NFVF9OT1JNLCAmenItPm5vcm0pOwotCWdzdGF0X3VubG9ja19hbmRfcmV0dXJuOgorCQlyb3V0ZS5pbnB1dCA9IHpyLT5jYXJkLmlucHV0W3pyLT5pbnB1dF0ubXV4c2VsOworCQlkZWNvZGVyX2NhbGwoenIsIHZpZGVvLCBzX3JvdXRpbmcsICZyb3V0ZSk7Citnc3RhdF91bmxvY2tfYW5kX3JldHVybjoKIAkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiAKIAkJaWYgKCFyZXMpIHsKIAkJCWJzdGF0LT5zaWduYWwgPQotCQkJICAgIChzdGF0dXMgJiBERUNPREVSX1NUQVRVU19HT09EKSA/IDEgOiAwOwotCQkJaWYgKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX05UU0MpCisJCQkgICAgKHN0YXR1cyAmIFY0TDJfSU5fU1RfTk9fU0lHTkFMKSA/IDAgOiAxOworCQkJaWYgKG5vcm0gJiBWNEwyX1NURF9OVFNDKQogCQkJCWJzdGF0LT5ub3JtID0gVklERU9fTU9ERV9OVFNDOwotCQkJZWxzZSBpZiAoc3RhdHVzICYgREVDT0RFUl9TVEFUVVNfU0VDQU0pCisJCQllbHNlIGlmIChub3JtICYgVjRMMl9TVERfU0VDQU0pCiAJCQkJYnN0YXQtPm5vcm0gPSBWSURFT19NT0RFX1NFQ0FNOwogCQkJZWxzZQogCQkJCWJzdGF0LT5ub3JtID0gVklERU9fTU9ERV9QQUw7CiAKIAkJCWJzdGF0LT5jb2xvciA9Ci0JCQkgICAgKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX0NPTE9SKSA/IDEgOiAwOworCQkJICAgIChzdGF0dXMgJiBWNEwyX0lOX1NUX05PX0NPTE9SKSA/IDAgOiAxOwogCQl9CiAKIAkJcmV0dXJuIHJlczsKIAl9Ci0JCWJyZWFrOwotCi0JCS8qIFRoZSBuZXcgdmlkZW80bGludXgyIGNhcHR1cmUgaW50ZXJmYWNlIC0gbXVjaCBuaWNlciB0aGFuIHZpZGVvNGxpbnV4MSwgc2luY2UKLQkJICogaXQgYWxsb3dzIGZvciBpbnRlZ3JhdGluZyB0aGUgSlBFRyBjYXB0dXJpbmcgY2FsbHMgaW5zaWRlIHN0YW5kYXJkIHY0bDIKLQkJICovCi0KLQljYXNlIFZJRElPQ19RVUVSWUNBUDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2NhcGFiaWxpdHkgKmNhcCA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfUVVFUllDQVBcbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQltZW1zZXQoY2FwLCAwLCBzaXplb2YoKmNhcCkpOwotCQlzdHJuY3B5KGNhcC0+Y2FyZCwgWlJfREVWTkFNRSh6ciksIHNpemVvZihjYXAtPmNhcmQpLTEpOwotCQlzdHJuY3B5KGNhcC0+ZHJpdmVyLCAiem9yYW4iLCBzaXplb2YoY2FwLT5kcml2ZXIpLTEpOwotCQlzbnByaW50ZihjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbyksICJQQ0k6JXMiLAotCQkJIHBjaV9uYW1lKHpyLT5wY2lfZGV2KSk7Ci0JCWNhcC0+dmVyc2lvbiA9Ci0JCSAgICBLRVJORUxfVkVSU0lPTihNQUpPUl9WRVJTSU9OLCBNSU5PUl9WRVJTSU9OLAotCQkJCSAgIFJFTEVBU0VfVkVSU0lPTik7Ci0JCWNhcC0+Y2FwYWJpbGl0aWVzID0gWk9SQU5fVjRMMl9WSURfRkxBR1M7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0VOVU1fRk1UOgotCXsKLQkJc3RydWN0IHY0bDJfZm10ZGVzYyAqZm10ID0gYXJnOwotCQlpbnQgaW5kZXggPSBmbXQtPmluZGV4LCBudW0gPSAtMSwgaSwgZmxhZyA9IDAsIHR5cGUgPQotCQkgICAgZm10LT50eXBlOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19FTlVNX0ZNVCAtIGluZGV4PSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGZtdC0+aW5kZXgpOwotCi0JCXN3aXRjaCAoZm10LT50eXBlKSB7Ci0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQkJZmxhZyA9IFpPUkFOX0ZPUk1BVF9DQVBUVVJFOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ6Ci0JCQlmbGFnID0gWk9SQU5fRk9STUFUX1BMQVlCQUNLOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgotCQkJZmxhZyA9IFpPUkFOX0ZPUk1BVF9PVkVSTEFZOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19FTlVNX0ZNVCAtIHVua25vd24gdHlwZSAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgZm10LT50eXBlKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJZm9yIChpID0gMDsgaSA8IE5VTV9GT1JNQVRTOyBpKyspIHsKLQkJCWlmICh6b3Jhbl9mb3JtYXRzW2ldLmZsYWdzICYgZmxhZykKLQkJCQludW0rKzsKLQkJCWlmIChudW0gPT0gZm10LT5pbmRleCkKLQkJCQlicmVhazsKLQkJfQotCQlpZiAoZm10LT5pbmRleCA8IDAgLyogbGF0ZSwgYnV0IG5vdCB0b28gbGF0ZSAqLyAgfHwKLQkJICAgIGkgPT0gTlVNX0ZPUk1BVFMpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQotCQltZW1zZXQoZm10LCAwLCBzaXplb2YoKmZtdCkpOwotCQlmbXQtPmluZGV4ID0gaW5kZXg7Ci0JCWZtdC0+dHlwZSA9IHR5cGU7Ci0JCXN0cm5jcHkoZm10LT5kZXNjcmlwdGlvbiwgem9yYW5fZm9ybWF0c1tpXS5uYW1lLCBzaXplb2YoZm10LT5kZXNjcmlwdGlvbiktMSk7Ci0JCWZtdC0+cGl4ZWxmb3JtYXQgPSB6b3Jhbl9mb3JtYXRzW2ldLmZvdXJjYzsKLQkJaWYgKHpvcmFuX2Zvcm1hdHNbaV0uZmxhZ3MgJiBaT1JBTl9GT1JNQVRfQ09NUFJFU1NFRCkKLQkJCWZtdC0+ZmxhZ3MgfD0gVjRMMl9GTVRfRkxBR19DT01QUkVTU0VEOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX0ZNVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10ID0gYXJnOwotCQlpbnQgdHlwZSA9IGZtdC0+dHlwZTsKLQotCQlkcHJpbnRrKDUsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfR19GTVRcbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQltZW1zZXQoZm10LCAwLCBzaXplb2YoKmZtdCkpOwotCQlmbXQtPnR5cGUgPSB0eXBlOwotCi0JCXN3aXRjaCAoZm10LT50eXBlKSB7Ci0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVkVSTEFZOgotCi0JCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJCWZtdC0+Zm10Lndpbi53LmxlZnQgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy54OwotCQkJZm10LT5mbXQud2luLncudG9wID0gZmgtPm92ZXJsYXlfc2V0dGluZ3MueTsKLQkJCWZtdC0+Zm10Lndpbi53LndpZHRoID0gZmgtPm92ZXJsYXlfc2V0dGluZ3Mud2lkdGg7Ci0JCQlmbXQtPmZtdC53aW4udy5oZWlnaHQgPQotCQkJICAgIGZoLT5vdmVybGF5X3NldHRpbmdzLmhlaWdodDsKLQkJCWlmIChmaC0+b3ZlcmxheV9zZXR0aW5ncy53aWR0aCAqIDIgPgotCQkJICAgIEJVWl9NQVhfSEVJR0hUKQotCQkJCWZtdC0+Zm10Lndpbi5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKLQkJCWVsc2UKLQkJCQlmbXQtPmZtdC53aW4uZmllbGQgPSBWNEwyX0ZJRUxEX1RPUDsKLQotCQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJCWJyZWFrOwotCi0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOgotCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOgotCi0JCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJCWlmIChmbXQtPnR5cGUgPT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFICYmCi0JCQkgICAgZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX1JBVykgewotCi0JCQkJZm10LT5mbXQucGl4LndpZHRoID0KLQkJCQkgICAgZmgtPnY0bF9zZXR0aW5ncy53aWR0aDsKLQkJCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0KLQkJCQkgICAgZmgtPnY0bF9zZXR0aW5ncy5oZWlnaHQ7Ci0JCQkJZm10LT5mbXQucGl4LnNpemVpbWFnZSA9Ci0JCQkJICAgIGZoLT52NGxfc2V0dGluZ3MuYnl0ZXNwZXJsaW5lICoKLQkJCQkgICAgZmgtPnY0bF9zZXR0aW5ncy5oZWlnaHQ7Ci0JCQkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID0KLQkJCQkgICAgZmgtPnY0bF9zZXR0aW5ncy5mb3JtYXQtPmZvdXJjYzsKLQkJCQlmbXQtPmZtdC5waXguY29sb3JzcGFjZSA9Ci0JCQkJICAgIGZoLT52NGxfc2V0dGluZ3MuZm9ybWF0LT5jb2xvcnNwYWNlOwotCQkJCWZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPQotCQkJCSAgICBmaC0+djRsX3NldHRpbmdzLmJ5dGVzcGVybGluZTsKLQkJCQlpZiAoQlVaX01BWF9IRUlHSFQgPAotCQkJCSAgICAoZmgtPnY0bF9zZXR0aW5ncy5oZWlnaHQgKiAyKSkKLQkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KLQkJCQkJICAgIFY0TDJfRklFTERfSU5URVJMQUNFRDsKLQkJCQllbHNlCi0JCQkJCWZtdC0+Zm10LnBpeC5maWVsZCA9Ci0JCQkJCSAgICBWNEwyX0ZJRUxEX1RPUDsKLQotCQkJfSBlbHNlIHsKLQotCQkJCWZtdC0+Zm10LnBpeC53aWR0aCA9Ci0JCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuaW1nX3dpZHRoIC8KLQkJCQkgICAgZmgtPmpwZ19zZXR0aW5ncy5Ib3JEY207Ci0JCQkJZm10LT5mbXQucGl4LmhlaWdodCA9Ci0JCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuaW1nX2hlaWdodCAvCi0JCQkJICAgIChmaC0+anBnX3NldHRpbmdzLlZlckRjbSAqCi0JCQkJICAgICBmaC0+anBnX3NldHRpbmdzLlRtcERjbSk7Ci0JCQkJZm10LT5mbXQucGl4LnNpemVpbWFnZSA9Ci0JCQkJICAgIHpvcmFuX3Y0bDJfY2FsY19idWZzaXplKCZmaC0+Ci0JCQkJCQkJICAgIGpwZ19zZXR0aW5ncyk7Ci0JCQkJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID0KLQkJCQkgICAgVjRMMl9QSVhfRk1UX01KUEVHOwotCQkJCWlmIChmaC0+anBnX3NldHRpbmdzLlRtcERjbSA9PSAxKQotCQkJCQlmbXQtPmZtdC5waXguZmllbGQgPQotCQkJCQkgICAgKGZoLT5qcGdfc2V0dGluZ3MuCi0JCQkJCSAgICAgb2RkX2V2ZW4gPyBWNEwyX0ZJRUxEX1NFUV9CVCA6Ci0JCQkJCSAgICAgVjRMMl9GSUVMRF9TRVFfQlQpOwotCQkJCWVsc2UKLQkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KLQkJCQkJICAgIChmaC0+anBnX3NldHRpbmdzLgotCQkJCQkgICAgIG9kZF9ldmVuID8gVjRMMl9GSUVMRF9UT1AgOgotCQkJCQkgICAgIFY0TDJfRklFTERfQk9UVE9NKTsKLQotCQkJCWZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOwotCQkJCWZtdC0+Zm10LnBpeC5jb2xvcnNwYWNlID0KLQkJCQkgICAgVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTsKLQkJCX0KLQotCQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJCWJyZWFrOwotCi0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19HX0ZNVCAtIHVuc3VwcG9ydGVkIHR5cGUgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGZtdC0+dHlwZSk7Ci0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfU19GTVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCA9IGFyZzsKLQkJaW50IGksIHJlcyA9IDA7Ci0JCV9fbGUzMiBwcmludGZvcm1hdDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfU19GTVQgLSB0eXBlPSVkLCAiLAotCQkJWlJfREVWTkFNRSh6ciksIGZtdC0+dHlwZSk7Ci0KLQkJc3dpdGNoIChmbXQtPnR5cGUpIHsKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0KLQkJCWRwcmludGsoMywgIng9JWQsIHk9JWQsIHc9JWQsIGg9JWQsIGNudD0lZCwgbWFwPTB4JXBcbiIsCi0JCQkJZm10LT5mbXQud2luLncubGVmdCwgZm10LT5mbXQud2luLncudG9wLAotCQkJCWZtdC0+Zm10Lndpbi53LndpZHRoLAotCQkJCWZtdC0+Zm10Lndpbi53LmhlaWdodCwKLQkJCQlmbXQtPmZtdC53aW4uY2xpcGNvdW50LAotCQkJCWZtdC0+Zm10Lndpbi5iaXRtYXApOwotCQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkJcmVzID0KLQkJCSAgICBzZXR1cF93aW5kb3coZmlsZSwgZm10LT5mbXQud2luLncubGVmdCwKLQkJCQkJIGZtdC0+Zm10Lndpbi53LnRvcCwKLQkJCQkJIGZtdC0+Zm10Lndpbi53LndpZHRoLAotCQkJCQkgZm10LT5mbXQud2luLncuaGVpZ2h0LAotCQkJCQkgKHN0cnVjdCB2aWRlb19jbGlwIF9fdXNlciAqKQotCQkJCQkgICBmbXQtPmZtdC53aW4uY2xpcHMsCi0JCQkJCSBmbXQtPmZtdC53aW4uY2xpcGNvdW50LAotCQkJCQkgZm10LT5mbXQud2luLmJpdG1hcCk7Ci0JCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJCXJldHVybiByZXM7Ci0JCQlicmVhazsKLQotCQljYXNlIFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRToKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVDoKLQotCQkJcHJpbnRmb3JtYXQgPQotCQkJICAgIF9fY3B1X3RvX2xlMzIoZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKLQkJCWRwcmludGsoMywgInNpemU9JWR4JWQsIGZtdD0weCV4ICglNC40cylcbiIsCi0JCQkJZm10LT5mbXQucGl4LndpZHRoLCBmbXQtPmZtdC5waXguaGVpZ2h0LAotCQkJCWZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCwKLQkJCQkoY2hhciAqKSAmcHJpbnRmb3JtYXQpOwotCi0JCQkvKiB3ZSBjYW4gYmUgcmVxdWVzdGVkIHRvIGRvIEpQRUcvcmF3IHBsYXliYWNrL2NhcHR1cmUgKi8KLQkJCWlmICghCi0JCQkgICAgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKLQkJCSAgICAgKGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCAmJgotCQkJICAgICAgZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID09Ci0JCQkgICAgICBWNEwyX1BJWF9GTVRfTUpQRUcpKSkgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBWSURJT0NfU19GTVQgLSB1bmtub3duIHR5cGUgJWQvMHgleCglNC40cykgY29tYmluYXRpb25cbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpLCBmbXQtPnR5cGUsCi0JCQkJCWZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCwKLQkJCQkJKGNoYXIgKikgJnByaW50Zm9ybWF0KTsKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCX0KLQotCQkJaWYgKGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfTUpQRUcpIHsKLQkJCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJCQlzZXR0aW5ncyA9IGZoLT5qcGdfc2V0dGluZ3M7Ci0KLQkJCQlpZiAoZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCB8fAotCQkJCSAgICBmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkKSB7Ci0JCQkJCWRwcmludGsoMSwKLQkJCQkJCUtFUk5fRVJSCi0JCQkJCQkiJXM6IFZJRElPQ19TX0ZNVCAtIGNhbm5vdCBjaGFuZ2UgY2FwdHVyZSBtb2RlXG4iLAotCQkJCQkJWlJfREVWTkFNRSh6cikpOwotCQkJCQlyZXMgPSAtRUJVU1k7Ci0JCQkJCWdvdG8gc2ZtdGpwZ191bmxvY2tfYW5kX3JldHVybjsKLQkJCQl9Ci0KLQkJCQkvKiB3ZSBhY3R1YWxseSBuZWVkIHRvIHNldCAncmVhbCcgcGFyYW1ldGVycyBub3cgKi8KLQkJCQlpZiAoKGZtdC0+Zm10LnBpeC5oZWlnaHQgKiAyKSA+Ci0JCQkJICAgIEJVWl9NQVhfSEVJR0hUKQotCQkJCQlzZXR0aW5ncy5UbXBEY20gPSAxOwotCQkJCWVsc2UKLQkJCQkJc2V0dGluZ3MuVG1wRGNtID0gMjsKLQkJCQlzZXR0aW5ncy5kZWNpbWF0aW9uID0gMDsKLQkJCQlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA8PQotCQkJCSAgICBmaC0+anBnX3NldHRpbmdzLmltZ19oZWlnaHQgLyAyKQotCQkJCQlzZXR0aW5ncy5WZXJEY20gPSAyOwotCQkJCWVsc2UKLQkJCQkJc2V0dGluZ3MuVmVyRGNtID0gMTsKLQkJCQlpZiAoZm10LT5mbXQucGl4LndpZHRoIDw9Ci0JCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuaW1nX3dpZHRoIC8gNCkKLQkJCQkJc2V0dGluZ3MuSG9yRGNtID0gNDsKLQkJCQllbHNlIGlmIChmbXQtPmZtdC5waXgud2lkdGggPD0KLQkJCQkJIGZoLT5qcGdfc2V0dGluZ3MuaW1nX3dpZHRoIC8gMikKLQkJCQkJc2V0dGluZ3MuSG9yRGNtID0gMjsKLQkJCQllbHNlCi0JCQkJCXNldHRpbmdzLkhvckRjbSA9IDE7Ci0JCQkJaWYgKHNldHRpbmdzLlRtcERjbSA9PSAxKQotCQkJCQlzZXR0aW5ncy5maWVsZF9wZXJfYnVmZiA9IDI7Ci0JCQkJZWxzZQotCQkJCQlzZXR0aW5ncy5maWVsZF9wZXJfYnVmZiA9IDE7Ci0KLQkJCQkvKiBjaGVjayAqLwotCQkJCWlmICgocmVzID0KLQkJCQkgICAgIHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyh6ciwKLQkJCQkJCQkgICAgICAmc2V0dGluZ3MpKSkKLQkJCQkJZ290byBzZm10anBnX3VubG9ja19hbmRfcmV0dXJuOwotCi0JCQkJLyogaXQncyBvaywgc28gc2V0IHRoZW0gKi8KLQkJCQlmaC0+anBnX3NldHRpbmdzID0gc2V0dGluZ3M7Ci0KLQkJCQkvKiB0ZWxsIHRoZSB1c2VyIHdoYXQgd2UgYWN0dWFsbHkgZGlkICovCi0JCQkJZm10LT5mbXQucGl4LndpZHRoID0KLQkJCQkgICAgc2V0dGluZ3MuaW1nX3dpZHRoIC8gc2V0dGluZ3MuSG9yRGNtOwotCQkJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPQotCQkJCSAgICBzZXR0aW5ncy5pbWdfaGVpZ2h0ICogMiAvCi0JCQkJICAgIChzZXR0aW5ncy5UbXBEY20gKiBzZXR0aW5ncy5WZXJEY20pOwotCQkJCWlmIChzZXR0aW5ncy5UbXBEY20gPT0gMSkKLQkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KLQkJCQkJICAgIChmaC0+anBnX3NldHRpbmdzLgotCQkJCQkgICAgIG9kZF9ldmVuID8gVjRMMl9GSUVMRF9TRVFfVEIgOgotCQkJCQkgICAgIFY0TDJfRklFTERfU0VRX0JUKTsKLQkJCQllbHNlCi0JCQkJCWZtdC0+Zm10LnBpeC5maWVsZCA9Ci0JCQkJCSAgICAoZmgtPmpwZ19zZXR0aW5ncy4KLQkJCQkJICAgICBvZGRfZXZlbiA/IFY0TDJfRklFTERfVE9QIDoKLQkJCQkJICAgICBWNEwyX0ZJRUxEX0JPVFRPTSk7Ci0JCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplID0KLQkJCQkgICAgem9yYW5fdjRsMl9jYWxjX2J1ZnNpemUoJmZoLT4KLQkJCQkJCQkgICAganBnX3NldHRpbmdzKTsKLQkJCQlmbXQtPmZtdC5waXguYnl0ZXNwZXJsaW5lID0gMDsKLQkJCQlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0KLQkJCQkgICAgZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcl9zaXplOwotCQkJCWZtdC0+Zm10LnBpeC5jb2xvcnNwYWNlID0KLQkJCQkgICAgVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTsKLQotCQkJCS8qIHdlIGhlcmVieSBhYnVzZSB0aGlzIHZhcmlhYmxlIHRvIHNob3cgdGhhdAotCQkJCSAqIHdlJ3JlIGdvbm5hIGRvIG1qcGVnIGNhcHR1cmUgKi8KLQkJCQlmaC0+bWFwX21vZGUgPQotCQkJCSAgICAoZm10LT50eXBlID09Ci0JCQkJICAgICBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpID8KLQkJCQkgICAgWk9SQU5fTUFQX01PREVfSlBHX1JFQyA6Ci0JCQkJICAgIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOwotCQkJc2ZtdGpwZ191bmxvY2tfYW5kX3JldHVybjoKLQkJCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJCX0gZWxzZSB7Ci0JCQkJZm9yIChpID0gMDsgaSA8IE5VTV9GT1JNQVRTOyBpKyspCi0JCQkJCWlmIChmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0KLQkJCQkJICAgIHpvcmFuX2Zvcm1hdHNbaV0uZm91cmNjKQotCQkJCQkJYnJlYWs7Ci0JCQkJaWYgKGkgPT0gTlVNX0ZPUk1BVFMpIHsKLQkJCQkJZHByaW50aygxLAotCQkJCQkJS0VSTl9FUlIKLQkJCQkJCSIlczogVklESU9DX1NfRk1UIC0gdW5rbm93bi91bnN1cHBvcnRlZCBmb3JtYXQgMHgleCAoJTQuNHMpXG4iLAotCQkJCQkJWlJfREVWTkFNRSh6ciksCi0JCQkJCQlmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQsCi0JCQkJCQkoY2hhciAqKSAmcHJpbnRmb3JtYXQpOwotCQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCQl9Ci0JCQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkJCWlmIChmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkIHx8Ci0JCQkJICAgIChmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkICYmCi0JCQkJICAgICBmaC0+djRsX2J1ZmZlcnMuYWN0aXZlICE9Ci0JCQkJICAgICBaT1JBTl9GUkVFKSkgewotCQkJCQlkcHJpbnRrKDEsCi0JCQkJCQlLRVJOX0VSUgotCQkJCQkJIiVzOiBWSURJT0NfU19GTVQgLSBjYW5ub3QgY2hhbmdlIGNhcHR1cmUgbW9kZVxuIiwKLQkJCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCQkJcmVzID0gLUVCVVNZOwotCQkJCQlnb3RvIHNmbXR2NGxfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQkJfQotCQkJCWlmIChmbXQtPmZtdC5waXguaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQpCi0JCQkJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPQotCQkJCQkgICAgQlVaX01BWF9IRUlHSFQ7Ci0JCQkJaWYgKGZtdC0+Zm10LnBpeC53aWR0aCA+IEJVWl9NQVhfV0lEVEgpCi0JCQkJCWZtdC0+Zm10LnBpeC53aWR0aCA9IEJVWl9NQVhfV0lEVEg7Ci0KLQkJCQlpZiAoKHJlcyA9Ci0JCQkJICAgICB6b3Jhbl92NGxfc2V0X2Zvcm1hdChmaWxlLAotCQkJCQkJCSAgZm10LT5mbXQucGl4LgotCQkJCQkJCSAgd2lkdGgsCi0JCQkJCQkJICBmbXQtPmZtdC5waXguCi0JCQkJCQkJICBoZWlnaHQsCi0JCQkJCQkJICAmem9yYW5fZm9ybWF0cwotCQkJCQkJCSAgW2ldKSkpCi0JCQkJCWdvdG8gc2ZtdHY0bF91bmxvY2tfYW5kX3JldHVybjsKLQotCQkJCS8qIHRlbGwgdGhlIHVzZXIgdGhlCi0JCQkJICogcmVzdWx0cy9taXNzaW5nIHN0dWZmICovCi0JCQkJZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9Ci0JCQkJCWZoLT52NGxfc2V0dGluZ3MuYnl0ZXNwZXJsaW5lOwotCQkJCWZtdC0+Zm10LnBpeC5zaXplaW1hZ2UgPQotCQkJCQlmaC0+djRsX3NldHRpbmdzLmhlaWdodCAqCi0JCQkJCWZoLT52NGxfc2V0dGluZ3MuYnl0ZXNwZXJsaW5lOwotCQkJCWZtdC0+Zm10LnBpeC5jb2xvcnNwYWNlID0KLQkJCQkJZmgtPnY0bF9zZXR0aW5ncy5mb3JtYXQtPmNvbG9yc3BhY2U7Ci0JCQkJaWYgKEJVWl9NQVhfSEVJR0hUIDwKLQkJCQkgICAgKGZoLT52NGxfc2V0dGluZ3MuaGVpZ2h0ICogMikpCi0JCQkJCWZtdC0+Zm10LnBpeC5maWVsZCA9Ci0JCQkJCSAgICBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7Ci0JCQkJZWxzZQotCQkJCQlmbXQtPmZtdC5waXguZmllbGQgPQotCQkJCQkgICAgVjRMMl9GSUVMRF9UT1A7Ci0KLQkJCQlmaC0+bWFwX21vZGUgPSBaT1JBTl9NQVBfTU9ERV9SQVc7Ci0JCQlzZm10djRsX3VubG9ja19hbmRfcmV0dXJuOgotCQkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkJfQotCi0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfU19GTVQgLSB1bnN1cHBvcnRlZCB0eXBlICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBmbXQtPnR5cGUpOwotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCX0KLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX0ZCVUY6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqZmIgPSBhcmc7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX0dfRkJVRlxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCW1lbXNldChmYiwgMCwgc2l6ZW9mKCpmYikpOwotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCWZiLT5iYXNlID0genItPmJ1ZmZlci5iYXNlOwotCQlmYi0+Zm10LndpZHRoID0genItPmJ1ZmZlci53aWR0aDsKLQkJZmItPmZtdC5oZWlnaHQgPSB6ci0+YnVmZmVyLmhlaWdodDsKLQkJaWYgKHpyLT5vdmVybGF5X3NldHRpbmdzLmZvcm1hdCkgewotCQkJZmItPmZtdC5waXhlbGZvcm1hdCA9Ci0JCQkJZmgtPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0LT5mb3VyY2M7Ci0JCX0KLQkJZmItPmZtdC5ieXRlc3BlcmxpbmUgPSB6ci0+YnVmZmVyLmJ5dGVzcGVybGluZTsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0JCWZiLT5mbXQuY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TUkdCOwotCQlmYi0+Zm10LmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOwotCQlmYi0+ZmxhZ3MgPSBWNEwyX0ZCVUZfRkxBR19PVkVSTEFZOwotCQlmYi0+Y2FwYWJpbGl0eSA9IFY0TDJfRkJVRl9DQVBfTElTVF9DTElQUElORzsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfU19GQlVGOgotCXsKLQkJaW50IGksIHJlcyA9IDA7Ci0JCXN0cnVjdCB2NGwyX2ZyYW1lYnVmZmVyICpmYiA9IGFyZzsKLQkJX19sZTMyIHByaW50Zm9ybWF0ID0gX19jcHVfdG9fbGUzMihmYi0+Zm10LnBpeGVsZm9ybWF0KTsKLQotCQlkcHJpbnRrKDMsCi0JCQlLRVJOX0RFQlVHCi0JCQkiJXM6IFZJRElPQ19TX0ZCVUYgLSBiYXNlPTB4JXAsIHNpemU9JWR4JWQsIGJwbD0lZCwgZm10PTB4JXggKCU0LjRzKVxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBmYi0+YmFzZSwgZmItPmZtdC53aWR0aCwgZmItPmZtdC5oZWlnaHQsCi0JCQlmYi0+Zm10LmJ5dGVzcGVybGluZSwgZmItPmZtdC5waXhlbGZvcm1hdCwKLQkJCShjaGFyICopICZwcmludGZvcm1hdCk7Ci0KLQkJZm9yIChpID0gMDsgaSA8IE5VTV9GT1JNQVRTOyBpKyspCi0JCQlpZiAoem9yYW5fZm9ybWF0c1tpXS5mb3VyY2MgPT0gZmItPmZtdC5waXhlbGZvcm1hdCkKLQkJCQlicmVhazsKLQkJaWYgKGkgPT0gTlVNX0ZPUk1BVFMpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DX1NfRkJVRiAtIGZvcm1hdD0weCV4ICglNC40cykgbm90IGFsbG93ZWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGZiLT5mbXQucGl4ZWxmb3JtYXQsCi0JCQkJKGNoYXIgKikgJnByaW50Zm9ybWF0KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXMgPQotCQkgICAgc2V0dXBfZmJ1ZmZlcihmaWxlLCBmYi0+YmFzZSwgJnpvcmFuX2Zvcm1hdHNbaV0sCi0JCQkJICBmYi0+Zm10LndpZHRoLCBmYi0+Zm10LmhlaWdodCwKLQkJCQkgIGZiLT5mbXQuYnl0ZXNwZXJsaW5lKTsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfT1ZFUkxBWToKLQl7Ci0JCWludCAqb24gPSBhcmcsIHJlczsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfUFJFVklFVyAtIG9uPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksICpvbik7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXMgPSBzZXR1cF9vdmVybGF5KGZpbGUsICpvbik7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1JFUUJVRlM6Ci0JewotCQlzdHJ1Y3QgdjRsMl9yZXF1ZXN0YnVmZmVycyAqcmVxID0gYXJnOwotCQlpbnQgcmVzID0gMDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfUkVRQlVGUyAtIHR5cGU9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgcmVxLT50eXBlKTsKLQotCQlpZiAocmVxLT5tZW1vcnkgIT0gVjRMMl9NRU1PUllfTU1BUCkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBvbmx5IE1FTU9SWV9NTUFQIGNhcHR1cmUgaXMgc3VwcG9ydGVkLCBub3QgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIHJlcS0+bWVtb3J5KTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWlmIChmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkIHx8IGZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQpIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DX1JFUUJVRlMgLSBidWZmZXJzIGFsbHJlYWR5IGFsbG9jYXRlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXMgPSAtRUJVU1k7Ci0JCQlnb3RvIHY0bDJyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQlpZiAoZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX1JBVyAmJgotCQkgICAgcmVxLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgewotCi0JCQkvKiBjb250cm9sIHVzZXIgaW5wdXQgKi8KLQkJCWlmIChyZXEtPmNvdW50IDwgMikKLQkJCQlyZXEtPmNvdW50ID0gMjsKLQkJCWlmIChyZXEtPmNvdW50ID4gdjRsX25idWZzKQotCQkJCXJlcS0+Y291bnQgPSB2NGxfbmJ1ZnM7Ci0JCQlmaC0+djRsX2J1ZmZlcnMubnVtX2J1ZmZlcnMgPSByZXEtPmNvdW50OwotCi0JCQlpZiAodjRsX2ZidWZmZXJfYWxsb2MoZmlsZSkpIHsKLQkJCQlyZXMgPSAtRU5PTUVNOwotCQkJCWdvdG8gdjRsMnJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJCX0KLQotCQkJLyogVGhlIG5leHQgbW1hcCB3aWxsIG1hcCB0aGUgVjRMIGJ1ZmZlcnMgKi8KLQkJCWZoLT5tYXBfbW9kZSA9IFpPUkFOX01BUF9NT0RFX1JBVzsKLQotCQl9IGVsc2UgaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDIHx8Ci0JCQkgICBmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfSlBHX1BMQVkpIHsKLQotCQkJLyogd2UgbmVlZCB0byBjYWxjdWxhdGUgc2l6ZSBvdXJzZWx2ZXMgbm93ICovCi0JCQlpZiAocmVxLT5jb3VudCA8IDQpCi0JCQkJcmVxLT5jb3VudCA9IDQ7Ci0JCQlpZiAocmVxLT5jb3VudCA+IGpwZ19uYnVmcykKLQkJCQlyZXEtPmNvdW50ID0ganBnX25idWZzOwotCQkJZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzID0gcmVxLT5jb3VudDsKLQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSA9Ci0JCQkgICAgem9yYW5fdjRsMl9jYWxjX2J1ZnNpemUoJmZoLT5qcGdfc2V0dGluZ3MpOwotCi0JCQlpZiAoanBnX2ZidWZmZXJfYWxsb2MoZmlsZSkpIHsKLQkJCQlyZXMgPSAtRU5PTUVNOwotCQkJCWdvdG8gdjRsMnJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJCX0KLQotCQkJLyogVGhlIG5leHQgbW1hcCB3aWxsIG1hcCB0aGUgTUpQRUcgYnVmZmVycyAqLwotCQkJaWYgKHJlcS0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCQkJZmgtPm1hcF9tb2RlID0gWk9SQU5fTUFQX01PREVfSlBHX1JFQzsKLQkJCWVsc2UKLQkJCQlmaC0+bWFwX21vZGUgPSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWTsKLQotCQl9IGVsc2UgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfUkVRQlVGUyAtIHVua25vd24gdHlwZSAlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgcmVxLT50eXBlKTsKLQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQlnb3RvIHY0bDJyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQl2NGwycmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfUVVFUllCVUY6Ci0JewotCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZiA9IGFyZzsKLQkJX191MzIgdHlwZSA9IGJ1Zi0+dHlwZTsKLQkJaW50IGluZGV4ID0gYnVmLT5pbmRleCwgcmVzOwotCi0JCWRwcmludGsoMywKLQkJCUtFUk5fREVCVUcKLQkJCSIlczogVklESU9DX1FVRVJZQlVGIC0gaW5kZXg9JWQsIHR5cGU9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT5pbmRleCwgYnVmLT50eXBlKTsKLQotCQltZW1zZXQoYnVmLCAwLCBzaXplb2YoKmJ1ZikpOwotCQlidWYtPnR5cGUgPSB0eXBlOwotCQlidWYtPmluZGV4ID0gaW5kZXg7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXMgPSB6b3Jhbl92NGwyX2J1ZmZlcl9zdGF0dXMoZmlsZSwgYnVmLCBidWYtPmluZGV4KTsKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfUUJVRjoKLQl7Ci0JCXN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmID0gYXJnOwotCQlpbnQgcmVzID0gMCwgY29kZWNfbW9kZSwgYnVmX3R5cGU7Ci0KLQkJZHByaW50aygzLAotCQkJS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19RQlVGIC0gdHlwZT0lZCwgaW5kZXg9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlLCBidWYtPmluZGV4KTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6Ci0JCQlpZiAoYnVmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBWSURJT0NfUUJVRiAtIGludmFsaWQgYnVmLT50eXBlPSVkIGZvciBtYXBfbW9kZT0lZFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSwgZmgtPm1hcF9tb2RlKTsKLQkJCQlyZXMgPSAtRUlOVkFMOwotCQkJCWdvdG8gcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJCX0KLQotCQkJcmVzID0gem9yYW5fdjRsX3F1ZXVlX2ZyYW1lKGZpbGUsIGJ1Zi0+aW5kZXgpOwotCQkJaWYgKHJlcykKLQkJCQlnb3RvIHFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQlpZiAoIXpyLT52NGxfbWVtZ3JhYl9hY3RpdmUgJiYKLQkJCSAgICBmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0xPQ0tFRCkKLQkJCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAxKTsKLQkJCWJyZWFrOwotCi0JCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1JFQzoKLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWToKLQkJCWlmIChmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfSlBHX1BMQVkpIHsKLQkJCQlidWZfdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUOwotCQkJCWNvZGVjX21vZGUgPSBCVVpfTU9ERV9NT1RJT05fREVDT01QUkVTUzsKLQkJCX0gZWxzZSB7Ci0JCQkJYnVmX3R5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0JCQkJY29kZWNfbW9kZSA9IEJVWl9NT0RFX01PVElPTl9DT01QUkVTUzsKLQkJCX0KLQotCQkJaWYgKGJ1Zi0+dHlwZSAhPSBidWZfdHlwZSkgewotCQkJCWRwcmludGsoMSwKLQkJCQkJS0VSTl9FUlIKLQkJCQkJIiVzOiBWSURJT0NfUUJVRiAtIGludmFsaWQgYnVmLT50eXBlPSVkIGZvciBtYXBfbW9kZT0lZFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSwgZmgtPm1hcF9tb2RlKTsKLQkJCQlyZXMgPSAtRUlOVkFMOwotCQkJCWdvdG8gcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJCX0KLQotCQkJcmVzID0KLQkJCSAgICB6b3Jhbl9qcGdfcXVldWVfZnJhbWUoZmlsZSwgYnVmLT5pbmRleCwKLQkJCQkJCSAgY29kZWNfbW9kZSk7Ci0JCQlpZiAocmVzICE9IDApCi0JCQkJZ290byBxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX0lETEUgJiYKLQkJCSAgICBmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0xPQ0tFRCkgewotCQkJCXpyMzYwNTdfZW5hYmxlX2pwZyh6ciwgY29kZWNfbW9kZSk7Ci0JCQl9Ci0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfUUJVRiAtIHVuc3VwcG9ydGVkIHR5cGUgJWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSk7Ci0JCQlyZXMgPSAtRUlOVkFMOwotCQkJZ290byBxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0JcWJ1Zl91bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfRFFCVUY6Ci0JewotCQlzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZiA9IGFyZzsKLQkJaW50IHJlcyA9IDAsIGJ1Zl90eXBlLCBudW0gPSAtMTsJLyogY29tcGlsZXIgYm9ya3MgaGVyZSAoPykgKi8KLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfRFFCVUYgLSB0eXBlPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGJ1Zi0+dHlwZSk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXN3aXRjaCAoZmgtPm1hcF9tb2RlKSB7Ci0JCWNhc2UgWk9SQU5fTUFQX01PREVfUkFXOgotCQkJaWYgKGJ1Zi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogVklESU9DX1FCVUYgLSBpbnZhbGlkIGJ1Zi0+dHlwZT0lZCBmb3IgbWFwX21vZGU9JWRcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUsIGZoLT5tYXBfbW9kZSk7Ci0JCQkJcmVzID0gLUVJTlZBTDsKLQkJCQlnb3RvIGRxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCi0JCQludW0gPSB6ci0+djRsX3BlbmRbenItPnY0bF9zeW5jX3RhaWwgJiBWNExfTUFTS19GUkFNRV07Ci0JCQlpZiAoZmlsZS0+Zl9mbGFncyAmIE9fTk9OQkxPQ0sgJiYKLQkJCSAgICB6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW251bV0uc3RhdGUgIT0KLQkJCSAgICBCVVpfU1RBVEVfRE9ORSkgewotCQkJCXJlcyA9IC1FQUdBSU47Ci0JCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJCX0KLQkJCXJlcyA9IHY0bF9zeW5jKGZpbGUsIG51bSk7Ci0JCQlpZiAocmVzKQotCQkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQllbHNlCi0JCQkJenItPnY0bF9zeW5jX3RhaWwrKzsKLQkJCXJlcyA9IHpvcmFuX3Y0bDJfYnVmZmVyX3N0YXR1cyhmaWxlLCBidWYsIG51bSk7Ci0JCQlicmVhazsKLQotCQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19SRUM6Ci0JCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1BMQVk6Ci0JCXsKLQkJCXN0cnVjdCB6b3Jhbl9zeW5jIGJzOwotCi0JCQlpZiAoZmgtPm1hcF9tb2RlID09IFpPUkFOX01BUF9NT0RFX0pQR19QTEFZKQotCQkJCWJ1Zl90eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ7Ci0JCQllbHNlCi0JCQkJYnVmX3R5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7Ci0KLQkJCWlmIChidWYtPnR5cGUgIT0gYnVmX3R5cGUpIHsKLQkJCQlkcHJpbnRrKDEsCi0JCQkJCUtFUk5fRVJSCi0JCQkJCSIlczogVklESU9DX1FCVUYgLSBpbnZhbGlkIGJ1Zi0+dHlwZT0lZCBmb3IgbWFwX21vZGU9JWRcbiIsCi0JCQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUsIGZoLT5tYXBfbW9kZSk7Ci0JCQkJcmVzID0gLUVJTlZBTDsKLQkJCQlnb3RvIGRxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCi0JCQludW0gPQotCQkJICAgIHpyLT5qcGdfcGVuZFt6ci0+Ci0JCQkJCSBqcGdfcXVlX3RhaWwgJiBCVVpfTUFTS19GUkFNRV07Ci0KLQkJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyAmJgotCQkJICAgIHpyLT5qcGdfYnVmZmVycy5idWZmZXJbbnVtXS5zdGF0ZSAhPQotCQkJICAgIEJVWl9TVEFURV9ET05FKSB7Ci0JCQkJcmVzID0gLUVBR0FJTjsKLQkJCQlnb3RvIGRxYnVmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCQkJcmVzID0ganBnX3N5bmMoZmlsZSwgJmJzKTsKLQkJCWlmIChyZXMpCi0JCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKLQkJCXJlcyA9Ci0JCQkgICAgem9yYW5fdjRsMl9idWZmZXJfc3RhdHVzKGZpbGUsIGJ1ZiwgYnMuZnJhbWUpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQlkZWZhdWx0OgotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfRFFCVUYgLSB1bnN1cHBvcnRlZCB0eXBlICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQlkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfU1RSRUFNT046Ci0JewotCQlpbnQgcmVzID0gMDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfU1RSRUFNT05cbiIsIFpSX0RFVk5BTUUoenIpKTsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6CS8qIHJhdyBjYXB0dXJlICovCi0JCQlpZiAoenItPnY0bF9idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9BQ1RJVkUgfHwKLQkJCSAgICBmaC0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0FDVElWRSkgewotCQkJCXJlcyA9IC1FQlVTWTsKLQkJCQlnb3RvIHN0cm1vbl91bmxvY2tfYW5kX3JldHVybjsKLQkJCX0KLQotCQkJenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9IGZoLT52NGxfYnVmZmVycy5hY3RpdmUgPQotCQkJICAgIFpPUkFOX0xPQ0tFRDsKLQkJCXpyLT52NGxfc2V0dGluZ3MgPSBmaC0+djRsX3NldHRpbmdzOwotCi0JCQl6ci0+djRsX3N5bmNfdGFpbCA9IHpyLT52NGxfcGVuZF90YWlsOwotCQkJaWYgKCF6ci0+djRsX21lbWdyYWJfYWN0aXZlICYmCi0JCQkgICAgenItPnY0bF9wZW5kX2hlYWQgIT0genItPnY0bF9wZW5kX3RhaWwpIHsKLQkJCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAxKTsKLQkJCX0KLQkJCWJyZWFrOwotCi0JCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1JFQzoKLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWToKLQkJCS8qIHdoYXQgaXMgdGhlIGNvZGVjIG1vZGUgcmlnaHQgbm93PyAqLwotCQkJaWYgKHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fQUNUSVZFIHx8Ci0JCQkgICAgZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9BQ1RJVkUpIHsKLQkJCQlyZXMgPSAtRUJVU1k7Ci0JCQkJZ290byBzdHJtb25fdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0KLQkJCXpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPSBmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID0KLQkJCSAgICBaT1JBTl9MT0NLRUQ7Ci0KLQkJCWlmICh6ci0+anBnX3F1ZV9oZWFkICE9IHpyLT5qcGdfcXVlX3RhaWwpIHsKLQkJCQkvKiBTdGFydCB0aGUganBlZyBjb2RlYyB3aGVuIHRoZSBmaXJzdCBmcmFtZSBpcyBxdWV1ZWQgICovCi0JCQkJanBlZ19zdGFydCh6cik7Ci0JCQl9Ci0KLQkJCWJyZWFrOwotCQlkZWZhdWx0OgotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfU1RSRUFNT04gLSBpbnZhbGlkIG1hcCBtb2RlICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBmaC0+bWFwX21vZGUpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gc3RybW9uX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0Jc3RybW9uX3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TVFJFQU1PRkY6Ci0JewotCQlpbnQgaSwgcmVzID0gMDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfU1RSRUFNT0ZGXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXN3aXRjaCAoZmgtPm1hcF9tb2RlKSB7Ci0JCWNhc2UgWk9SQU5fTUFQX01PREVfUkFXOgkvKiByYXcgY2FwdHVyZSAqLwotCQkJaWYgKGZoLT52NGxfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSAmJgotCQkJICAgIHpyLT52NGxfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgewotCQkJCXJlcyA9IC1FUEVSTTsJLyogc3RheSBvZmYgb3RoZXIncyBzZXR0aW5ncyEgKi8KLQkJCQlnb3RvIHN0cm1vZmZfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0JCQlpZiAoenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKQotCQkJCWdvdG8gc3RybW9mZl91bmxvY2tfYW5kX3JldHVybjsKLQotCQkJLyogdW5sb2FkIGNhcHR1cmUgKi8KLQkJCWlmICh6ci0+djRsX21lbWdyYWJfYWN0aXZlKSB7Ci0JCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQkJCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQkJCQl6cjM2MDU3X3NldF9tZW1ncmFiKHpyLCAwKTsKLQkJCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKLQkJCX0KLQotCQkJZm9yIChpID0gMDsgaSA8IGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVyczsgaSsrKQotCQkJCXpyLT52NGxfYnVmZmVycy5idWZmZXJbaV0uc3RhdGUgPQotCQkJCSAgICBCVVpfU1RBVEVfVVNFUjsKLQkJCWZoLT52NGxfYnVmZmVycyA9IHpyLT52NGxfYnVmZmVyczsKLQotCQkJenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9IGZoLT52NGxfYnVmZmVycy5hY3RpdmUgPQotCQkJICAgIFpPUkFOX0ZSRUU7Ci0KLQkJCXpyLT52NGxfZ3JhYl9zZXEgPSAwOwotCQkJenItPnY0bF9wZW5kX2hlYWQgPSB6ci0+djRsX3BlbmRfdGFpbCA9IDA7Ci0JCQl6ci0+djRsX3N5bmNfdGFpbCA9IDA7Ci0KLQkJCWJyZWFrOwotCi0JCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1JFQzoKLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWToKLQkJCWlmIChmaC0+anBnX2J1ZmZlcnMuYWN0aXZlID09IFpPUkFOX0ZSRUUgJiYKLQkJCSAgICB6ci0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKLQkJCQlyZXMgPSAtRVBFUk07CS8qIHN0YXkgb2ZmIG90aGVyJ3Mgc2V0dGluZ3MhICovCi0JCQkJZ290byBzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCQkJaWYgKHpyLT5qcGdfYnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fRlJFRSkKLQkJCQlnb3RvIHN0cm1vZmZfdW5sb2NrX2FuZF9yZXR1cm47Ci0KLQkJCXJlcyA9Ci0JCQkgICAganBnX3FidWYoZmlsZSwgLTEsCi0JCQkJICAgICAoZmgtPm1hcF9tb2RlID09Ci0JCQkJICAgICAgWk9SQU5fTUFQX01PREVfSlBHX1JFQykgPwotCQkJCSAgICAgQlVaX01PREVfTU9USU9OX0NPTVBSRVNTIDoKLQkJCQkgICAgIEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKTsKLQkJCWlmIChyZXMpCi0JCQkJZ290byBzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOwotCQkJYnJlYWs7Ci0JCWRlZmF1bHQ6Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19TVFJFQU1PRkYgLSBpbnZhbGlkIG1hcCBtb2RlICVkXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpLCBmaC0+bWFwX21vZGUpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gc3RybW9mZl91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCXN0cm1vZmZfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1FVRVJZQ1RSTDoKLQl7Ci0JCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqY3RybCA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfUVVFUllDVFJMIC0gaWQ9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgY3RybC0+aWQpOwotCi0JCS8qIHdlIG9ubHkgc3VwcG9ydCBodWUvc2F0dXJhdGlvbi9jb250cmFzdC9icmlnaHRuZXNzICovCi0JCWlmIChjdHJsLT5pZCA8IFY0TDJfQ0lEX0JSSUdIVE5FU1MgfHwKLQkJICAgIGN0cmwtPmlkID4gVjRMMl9DSURfSFVFKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWVsc2UgewotCQkJaW50IGlkID0gY3RybC0+aWQ7Ci0JCQltZW1zZXQoY3RybCwgMCwgc2l6ZW9mKCpjdHJsKSk7Ci0JCQljdHJsLT5pZCA9IGlkOwotCQl9Ci0KLQkJc3dpdGNoIChjdHJsLT5pZCkgewotCQljYXNlIFY0TDJfQ0lEX0JSSUdIVE5FU1M6Ci0JCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJCcmlnaHRuZXNzIiwgc2l6ZW9mKGN0cmwtPm5hbWUpLTEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfQ09OVFJBU1Q6Ci0JCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJDb250cmFzdCIsIHNpemVvZihjdHJsLT5uYW1lKS0xKTsKLQkJCWJyZWFrOwotCQljYXNlIFY0TDJfQ0lEX1NBVFVSQVRJT046Ci0JCQlzdHJuY3B5KGN0cmwtPm5hbWUsICJTYXR1cmF0aW9uIiwgc2l6ZW9mKGN0cmwtPm5hbWUpLTEpOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfSFVFOgotCQkJc3RybmNweShjdHJsLT5uYW1lLCAiSHVlIiwgc2l6ZW9mKGN0cmwtPm5hbWUpLTEpOwotCQkJYnJlYWs7Ci0JCX0KLQotCQljdHJsLT5taW5pbXVtID0gMDsKLQkJY3RybC0+bWF4aW11bSA9IDY1NTM1OwotCQljdHJsLT5zdGVwID0gMTsKLQkJY3RybC0+ZGVmYXVsdF92YWx1ZSA9IDMyNzY4OwotCQljdHJsLT50eXBlID0gVjRMMl9DVFJMX1RZUEVfSU5URUdFUjsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfR19DVFJMOgotCXsKLQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfR19DVFJMIC0gaWQ9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgY3RybC0+aWQpOwotCi0JCS8qIHdlIG9ubHkgc3VwcG9ydCBodWUvc2F0dXJhdGlvbi9jb250cmFzdC9icmlnaHRuZXNzICovCi0JCWlmIChjdHJsLT5pZCA8IFY0TDJfQ0lEX0JSSUdIVE5FU1MgfHwKLQkJICAgIGN0cmwtPmlkID4gVjRMMl9DSURfSFVFKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLQkJCWN0cmwtPnZhbHVlID0genItPmJyaWdodG5lc3M7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJCWN0cmwtPnZhbHVlID0genItPmNvbnRyYXN0OwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKLQkJCWN0cmwtPnZhbHVlID0genItPnNhdHVyYXRpb247Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCQljdHJsLT52YWx1ZSA9IHpyLT5odWU7Ci0JCQlicmVhazsKLQkJfQotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlyZXR1cm4gMDsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfU19DVFJMOgotCXsKLQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCA9IGFyZzsKLQkJc3RydWN0IHZpZGVvX3BpY3R1cmUgcGljdDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfU19DVFJMIC0gaWQ9JWRcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgY3RybC0+aWQpOwotCi0JCS8qIHdlIG9ubHkgc3VwcG9ydCBodWUvc2F0dXJhdGlvbi9jb250cmFzdC9icmlnaHRuZXNzICovCi0JCWlmIChjdHJsLT5pZCA8IFY0TDJfQ0lEX0JSSUdIVE5FU1MgfHwKLQkJICAgIGN0cmwtPmlkID4gVjRMMl9DSURfSFVFKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJaWYgKGN0cmwtPnZhbHVlIDwgMCB8fCBjdHJsLT52YWx1ZSA+IDY1NTM1KSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19TX0NUUkwgLSBpbnZhbGlkIHZhbHVlICVkIGZvciBpZD0lZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgY3RybC0+dmFsdWUsIGN0cmwtPmlkKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlzd2l0Y2ggKGN0cmwtPmlkKSB7Ci0JCWNhc2UgVjRMMl9DSURfQlJJR0hUTkVTUzoKLQkJCXpyLT5icmlnaHRuZXNzID0gY3RybC0+dmFsdWU7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9DT05UUkFTVDoKLQkJCXpyLT5jb250cmFzdCA9IGN0cmwtPnZhbHVlOwotCQkJYnJlYWs7Ci0JCWNhc2UgVjRMMl9DSURfU0FUVVJBVElPTjoKLQkJCXpyLT5zYXR1cmF0aW9uID0gY3RybC0+dmFsdWU7Ci0JCQlicmVhazsKLQkJY2FzZSBWNEwyX0NJRF9IVUU6Ci0JCQl6ci0+aHVlID0gY3RybC0+dmFsdWU7Ci0JCQlicmVhazsKLQkJfQotCQlwaWN0LmJyaWdodG5lc3MgPSB6ci0+YnJpZ2h0bmVzczsKLQkJcGljdC5jb250cmFzdCA9IHpyLT5jb250cmFzdDsKLQkJcGljdC5jb2xvdXIgPSB6ci0+c2F0dXJhdGlvbjsKLQkJcGljdC5odWUgPSB6ci0+aHVlOwotCi0JCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9TRVRfUElDVFVSRSwgJnBpY3QpOwotCi0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19FTlVNU1REOgotCXsKLQkJc3RydWN0IHY0bDJfc3RhbmRhcmQgKnN0ZCA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfRU5VTVNURCAtIGluZGV4PSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHN0ZC0+aW5kZXgpOwotCi0JCWlmIChzdGQtPmluZGV4IDwgMCB8fCBzdGQtPmluZGV4ID49ICh6ci0+Y2FyZC5ub3JtcyArIDEpKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCWVsc2UgewotCQkJaW50IGlkID0gc3RkLT5pbmRleDsKLQkJCW1lbXNldChzdGQsIDAsIHNpemVvZigqc3RkKSk7Ci0JCQlzdGQtPmluZGV4ID0gaWQ7Ci0JCX0KLQotCQlpZiAoc3RkLT5pbmRleCA9PSB6ci0+Y2FyZC5ub3JtcykgewotCQkJLyogaWYgd2UgaGF2ZSBhdXRvZGV0ZWN0LCAuLi4gKi8KLQkJCXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgY2FwczsKLQkJCWRlY29kZXJfY29tbWFuZCh6ciwgREVDT0RFUl9HRVRfQ0FQQUJJTElUSUVTLAotCQkJCQkmY2Fwcyk7Ci0JCQlpZiAoY2Fwcy5mbGFncyAmIFZJREVPX0RFQ09ERVJfQVVUTykgewotCQkJCXN0ZC0+aWQgPSBWNEwyX1NURF9BTEw7Ci0JCQkJc3RybmNweShzdGQtPm5hbWUsICJBdXRvZGV0ZWN0Iiwgc2l6ZW9mKHN0ZC0+bmFtZSktMSk7Ci0JCQkJcmV0dXJuIDA7Ci0JCQl9IGVsc2UKLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJfQotCQlzd2l0Y2ggKHN0ZC0+aW5kZXgpIHsKLQkJY2FzZSAwOgotCQkJc3RkLT5pZCA9IFY0TDJfU1REX1BBTDsKLQkJCXN0cm5jcHkoc3RkLT5uYW1lLCAiUEFMIiwgc2l6ZW9mKHN0ZC0+bmFtZSktMSk7Ci0JCQlzdGQtPmZyYW1lcGVyaW9kLm51bWVyYXRvciA9IDE7Ci0JCQlzdGQtPmZyYW1lcGVyaW9kLmRlbm9taW5hdG9yID0gMjU7Ci0JCQlzdGQtPmZyYW1lbGluZXMgPSB6ci0+Y2FyZC50dm5bMF0tPkh0OwotCQkJYnJlYWs7Ci0JCWNhc2UgMToKLQkJCXN0ZC0+aWQgPSBWNEwyX1NURF9OVFNDOwotCQkJc3RybmNweShzdGQtPm5hbWUsICJOVFNDIiwgc2l6ZW9mKHN0ZC0+bmFtZSktMSk7Ci0JCQlzdGQtPmZyYW1lcGVyaW9kLm51bWVyYXRvciA9IDEwMDE7Ci0JCQlzdGQtPmZyYW1lcGVyaW9kLmRlbm9taW5hdG9yID0gMzAwMDA7Ci0JCQlzdGQtPmZyYW1lbGluZXMgPSB6ci0+Y2FyZC50dm5bMV0tPkh0OwotCQkJYnJlYWs7Ci0JCWNhc2UgMjoKLQkJCXN0ZC0+aWQgPSBWNEwyX1NURF9TRUNBTTsKLQkJCXN0cm5jcHkoc3RkLT5uYW1lLCAiU0VDQU0iLCBzaXplb2Yoc3RkLT5uYW1lKS0xKTsKLQkJCXN0ZC0+ZnJhbWVwZXJpb2QubnVtZXJhdG9yID0gMTsKLQkJCXN0ZC0+ZnJhbWVwZXJpb2QuZGVub21pbmF0b3IgPSAyNTsKLQkJCXN0ZC0+ZnJhbWVsaW5lcyA9IHpyLT5jYXJkLnR2blsyXS0+SHQ7Ci0JCQlicmVhazsKLQkJfQotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX1NURDoKLQl7Ci0JCXY0bDJfc3RkX2lkICpzdGQgPSBhcmc7Ci0JCWludCBub3JtOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19HX1NURFxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJbm9ybSA9IHpyLT5ub3JtOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlzd2l0Y2ggKG5vcm0pIHsKLQkJY2FzZSBWSURFT19NT0RFX1BBTDoKLQkJCSpzdGQgPSBWNEwyX1NURF9QQUw7Ci0JCQlicmVhazsKLQkJY2FzZSBWSURFT19NT0RFX05UU0M6Ci0JCQkqc3RkID0gVjRMMl9TVERfTlRTQzsKLQkJCWJyZWFrOwotCQljYXNlIFZJREVPX01PREVfU0VDQU06Ci0JCQkqc3RkID0gVjRMMl9TVERfU0VDQU07Ci0JCQlicmVhazsKLQkJfQotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TX1NURDoKLQl7Ci0JCWludCBub3JtID0gLTEsIHJlcyA9IDA7Ci0JCXY0bDJfc3RkX2lkICpzdGQgPSBhcmc7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX1NfU1REIC0gbm9ybT0weCVsbHhcbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSwgKHVuc2lnbmVkIGxvbmcgbG9uZykqc3RkKTsKLQotCQlpZiAoKCpzdGQgJiBWNEwyX1NURF9QQUwpICYmICEoKnN0ZCAmIH5WNEwyX1NURF9QQUwpKQotCQkJbm9ybSA9IFZJREVPX01PREVfUEFMOwotCQllbHNlIGlmICgoKnN0ZCAmIFY0TDJfU1REX05UU0MpICYmICEoKnN0ZCAmIH5WNEwyX1NURF9OVFNDKSkKLQkJCW5vcm0gPSBWSURFT19NT0RFX05UU0M7Ci0JCWVsc2UgaWYgKCgqc3RkICYgVjRMMl9TVERfU0VDQU0pICYmICEoKnN0ZCAmIH5WNEwyX1NURF9TRUNBTSkpCi0JCQlub3JtID0gVklERU9fTU9ERV9TRUNBTTsKLQkJZWxzZSBpZiAoKnN0ZCA9PSBWNEwyX1NURF9BTEwpCi0JCQlub3JtID0gVklERU9fTU9ERV9BVVRPOwotCQllbHNlIHsKLQkJCWRwcmludGsoMSwKLQkJCQlLRVJOX0VSUgotCQkJCSIlczogVklESU9DX1NfU1REIC0gaW52YWxpZCBub3JtIDB4JWxseFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgKHVuc2lnbmVkIGxvbmcgbG9uZykqc3RkKTsKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlpZiAoKHJlcyA9IHpvcmFuX3NldF9ub3JtKHpyLCBub3JtKSkpCi0JCQlnb3RvIHNzdGRfdW5sb2NrX2FuZF9yZXR1cm47Ci0KLQkJcmVzID0gd2FpdF9ncmFiX3BlbmRpbmcoenIpOwotCXNzdGRfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19FTlVNSU5QVVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9pbnB1dCAqaW5wID0gYXJnOwotCQlpbnQgc3RhdHVzOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19FTlVNSU5QVVQgLSBpbmRleD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBpbnAtPmluZGV4KTsKLQotCQlpZiAoaW5wLT5pbmRleCA8IDAgfHwgaW5wLT5pbmRleCA+PSB6ci0+Y2FyZC5pbnB1dHMpCi0JCQlyZXR1cm4gLUVJTlZBTDsKLQkJZWxzZSB7Ci0JCQlpbnQgaWQgPSBpbnAtPmluZGV4OwotCQkJbWVtc2V0KGlucCwgMCwgc2l6ZW9mKCppbnApKTsKLQkJCWlucC0+aW5kZXggPSBpZDsKLQkJfQotCi0JCXN0cm5jcHkoaW5wLT5uYW1lLCB6ci0+Y2FyZC5pbnB1dFtpbnAtPmluZGV4XS5uYW1lLAotCQkJc2l6ZW9mKGlucC0+bmFtZSkgLSAxKTsKLQkJaW5wLT50eXBlID0gVjRMMl9JTlBVVF9UWVBFX0NBTUVSQTsKLQkJaW5wLT5zdGQgPSBWNEwyX1NURF9BTEw7Ci0KLQkJLyogR2V0IHN0YXR1cyBvZiB2aWRlbyBkZWNvZGVyICovCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJZGVjb2Rlcl9jb21tYW5kKHpyLCBERUNPREVSX0dFVF9TVEFUVVMsICZzdGF0dXMpOwotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlpZiAoIShzdGF0dXMgJiBERUNPREVSX1NUQVRVU19HT09EKSkgewotCQkJaW5wLT5zdGF0dXMgfD0gVjRMMl9JTl9TVF9OT19QT1dFUjsKLQkJCWlucC0+c3RhdHVzIHw9IFY0TDJfSU5fU1RfTk9fU0lHTkFMOwotCQl9Ci0JCWlmICghKHN0YXR1cyAmIERFQ09ERVJfU1RBVFVTX0NPTE9SKSkKLQkJCWlucC0+c3RhdHVzIHw9IFY0TDJfSU5fU1RfTk9fQ09MT1I7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX0dfSU5QVVQ6Ci0JewotCQlpbnQgKmlucHV0ID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19HX0lOUFVUXG4iLCBaUl9ERVZOQU1FKHpyKSk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkqaW5wdXQgPSB6ci0+aW5wdXQ7Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TX0lOUFVUOgotCXsKLQkJaW50ICppbnB1dCA9IGFyZywgcmVzID0gMDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfU19JTlBVVCAtIGlucHV0PSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksICppbnB1dCk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlpZiAoKHJlcyA9IHpvcmFuX3NldF9pbnB1dCh6ciwgKmlucHV0KSkpCi0JCQlnb3RvIHNpbnB1dF91bmxvY2tfYW5kX3JldHVybjsKLQotCQkvKiBNYWtlIHN1cmUgdGhlIGNoYW5nZXMgY29tZSBpbnRvIGVmZmVjdCAqLwotCQlyZXMgPSB3YWl0X2dyYWJfcGVuZGluZyh6cik7Ci0Jc2lucHV0X3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfRU5VTU9VVFBVVDoKLQl7Ci0JCXN0cnVjdCB2NGwyX291dHB1dCAqb3V0cCA9IGFyZzsKLQotCQlkcHJpbnRrKDMsIEtFUk5fREVCVUcgIiVzOiBWSURJT0NfRU5VTU9VVFBVVCAtIGluZGV4PSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIG91dHAtPmluZGV4KTsKLQotCQlpZiAob3V0cC0+aW5kZXggIT0gMCkKLQkJCXJldHVybiAtRUlOVkFMOwotCi0JCW1lbXNldChvdXRwLCAwLCBzaXplb2YoKm91dHApKTsKLQkJb3V0cC0+aW5kZXggPSAwOwotCQlvdXRwLT50eXBlID0gVjRMMl9PVVRQVVRfVFlQRV9BTkFMT0dWR0FPVkVSTEFZOwotCQlzdHJuY3B5KG91dHAtPm5hbWUsICJBdXRvZGV0ZWN0Iiwgc2l6ZW9mKG91dHAtPm5hbWUpLTEpOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX09VVFBVVDoKLQl7Ci0JCWludCAqb3V0cHV0ID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19HX09VVFBVVFxuIiwgWlJfREVWTkFNRSh6cikpOwotCi0JCSpvdXRwdXQgPSAwOwotCi0JCXJldHVybiAwOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19TX09VVFBVVDoKLQl7Ci0JCWludCAqb3V0cHV0ID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19TX09VVFBVVCAtIG91dHB1dD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCAqb3V0cHV0KTsKLQotCQlpZiAoKm91dHB1dCAhPSAwKQotCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCQkvKiBjcm9wcGluZyAoc3ViLWZyYW1lIGNhcHR1cmUpICovCi0JY2FzZSBWSURJT0NfQ1JPUENBUDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Nyb3BjYXAgKmNyb3BjYXAgPSBhcmc7Ci0JCWludCB0eXBlID0gY3JvcGNhcC0+dHlwZSwgcmVzID0gMDsKLQotCQlkcHJpbnRrKDMsIEtFUk5fRVJSICIlczogVklESU9DX0NST1BDQVAgLSB0eXBlPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGNyb3BjYXAtPnR5cGUpOwotCi0JCW1lbXNldChjcm9wY2FwLCAwLCBzaXplb2YoKmNyb3BjYXApKTsKLQkJY3JvcGNhcC0+dHlwZSA9IHR5cGU7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWlmIChjcm9wY2FwLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICYmCi0JCSAgICAoY3JvcGNhcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKLQkJICAgICBmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXKSkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfQ1JPUENBUCAtIHN1YmNhcHR1cmUgb25seSBzdXBwb3J0ZWQgZm9yIGNvbXByZXNzZWQgY2FwdHVyZVxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXMgPSAtRUlOVkFMOwotCQkJZ290byBjcm9wY2FwX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0KLQkJY3JvcGNhcC0+Ym91bmRzLnRvcCA9IGNyb3BjYXAtPmJvdW5kcy5sZWZ0ID0gMDsKLQkJY3JvcGNhcC0+Ym91bmRzLndpZHRoID0gQlVaX01BWF9XSURUSDsKLQkJY3JvcGNhcC0+Ym91bmRzLmhlaWdodCA9IEJVWl9NQVhfSEVJR0hUOwotCQljcm9wY2FwLT5kZWZyZWN0LnRvcCA9IGNyb3BjYXAtPmRlZnJlY3QubGVmdCA9IDA7Ci0JCWNyb3BjYXAtPmRlZnJlY3Qud2lkdGggPSBCVVpfTUlOX1dJRFRIOwotCQljcm9wY2FwLT5kZWZyZWN0LmhlaWdodCA9IEJVWl9NSU5fSEVJR0hUOwotCWNyb3BjYXBfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQlyZXR1cm4gcmVzOwotCX0KLQkJYnJlYWs7Ci0KLQljYXNlIFZJRElPQ19HX0NST1A6Ci0JewotCQlzdHJ1Y3QgdjRsMl9jcm9wICpjcm9wID0gYXJnOwotCQlpbnQgdHlwZSA9IGNyb3AtPnR5cGUsIHJlcyA9IDA7Ci0KLQkJZHByaW50aygzLCBLRVJOX0VSUiAiJXM6IFZJRElPQ19HX0NST1AgLSB0eXBlPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGNyb3AtPnR5cGUpOwotCi0JCW1lbXNldChjcm9wLCAwLCBzaXplb2YoKmNyb3ApKTsKLQkJY3JvcC0+dHlwZSA9IHR5cGU7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWlmIChjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUICYmCi0JCSAgICAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKLQkJICAgICBmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXKSkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBWSURJT0NfR19DUk9QIC0gc3ViY2FwdHVyZSBvbmx5IHN1cHBvcnRlZCBmb3IgY29tcHJlc3NlZCBjYXB0dXJlXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQlnb3RvIGdjcm9wX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0KLQkJY3JvcC0+Yy50b3AgPSBmaC0+anBnX3NldHRpbmdzLmltZ195OwotCQljcm9wLT5jLmxlZnQgPSBmaC0+anBnX3NldHRpbmdzLmltZ194OwotCQljcm9wLT5jLndpZHRoID0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGg7Ci0JCWNyb3AtPmMuaGVpZ2h0ID0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfaGVpZ2h0OwotCi0JZ2Nyb3BfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXJldHVybiByZXM7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1NfQ1JPUDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2Nyb3AgKmNyb3AgPSBhcmc7Ci0JCWludCByZXMgPSAwOwotCi0JCXNldHRpbmdzID0gZmgtPmpwZ19zZXR0aW5nczsKLQotCQlkcHJpbnRrKDMsCi0JCQlLRVJOX0VSUgotCQkJIiVzOiBWSURJT0NfU19DUk9QIC0gdHlwZT0lZCwgeD0lZCx5PSVkLHc9JWQsaD0lZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBjcm9wLT50eXBlLCBjcm9wLT5jLmxlZnQsIGNyb3AtPmMudG9wLAotCQkJY3JvcC0+Yy53aWR0aCwgY3JvcC0+Yy5oZWlnaHQpOwotCi0JCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlpZiAoZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCB8fCBmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19TX0NST1AgLSBjYW5ub3QgY2hhbmdlIHNldHRpbmdzIHdoaWxlIGFjdGl2ZVxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXMgPSAtRUJVU1k7Ci0JCQlnb3RvIHNjcm9wX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0KLQkJaWYgKGNyb3AtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQgJiYKLQkJICAgIChjcm9wLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSB8fAotCQkgICAgIGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcpKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IFZJRElPQ19HX0NST1AgLSBzdWJjYXB0dXJlIG9ubHkgc3VwcG9ydGVkIGZvciBjb21wcmVzc2VkIGNhcHR1cmVcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8gc2Nyb3BfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQkvKiBtb3ZlIGludG8gYSBmb3JtIHRoYXQgd2UgdW5kZXJzdGFuZCAqLwotCQlzZXR0aW5ncy5pbWdfeCA9IGNyb3AtPmMubGVmdDsKLQkJc2V0dGluZ3MuaW1nX3kgPSBjcm9wLT5jLnRvcDsKLQkJc2V0dGluZ3MuaW1nX3dpZHRoID0gY3JvcC0+Yy53aWR0aDsKLQkJc2V0dGluZ3MuaW1nX2hlaWdodCA9IGNyb3AtPmMuaGVpZ2h0OwotCi0JCS8qIGNoZWNrIHZhbGlkaXR5ICovCi0JCWlmICgocmVzID0gem9yYW5fY2hlY2tfanBnX3NldHRpbmdzKHpyLCAmc2V0dGluZ3MpKSkKLQkJCWdvdG8gc2Nyb3BfdW5sb2NrX2FuZF9yZXR1cm47Ci0KLQkJLyogYWNjZXB0ICovCi0JCWZoLT5qcGdfc2V0dGluZ3MgPSBzZXR0aW5nczsKLQotCXNjcm9wX3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJcmV0dXJuIHJlczsKLQl9Ci0JCWJyZWFrOwotCi0JY2FzZSBWSURJT0NfR19KUEVHQ09NUDoKLQl7Ci0JCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqcGFyYW1zID0gYXJnOwotCi0JCWRwcmludGsoMywgS0VSTl9ERUJVRyAiJXM6IFZJRElPQ19HX0pQRUdDT01QXG4iLAotCQkJWlJfREVWTkFNRSh6cikpOwotCi0JCW1lbXNldChwYXJhbXMsIDAsIHNpemVvZigqcGFyYW1zKSk7Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCXBhcmFtcy0+cXVhbGl0eSA9IGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAucXVhbGl0eTsKLQkJcGFyYW1zLT5BUFBuID0gZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBuOwotCQltZW1jcHkocGFyYW1zLT5BUFBfZGF0YSwKLQkJICAgICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQX2RhdGEsCi0JCSAgICAgICBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUF9sZW4pOwotCQlwYXJhbXMtPkFQUF9sZW4gPSBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUF9sZW47Ci0JCW1lbWNweShwYXJhbXMtPkNPTV9kYXRhLAotCQkgICAgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5DT01fZGF0YSwKLQkJICAgICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQ09NX2xlbik7Ci0JCXBhcmFtcy0+Q09NX2xlbiA9IGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQ09NX2xlbjsKLQkJcGFyYW1zLT5qcGVnX21hcmtlcnMgPQotCQkgICAgZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5qcGVnX21hcmtlcnM7Ci0KLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1NfSlBFR0NPTVA6Ci0JewotCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKnBhcmFtcyA9IGFyZzsKLQkJaW50IHJlcyA9IDA7Ci0KLQkJc2V0dGluZ3MgPSBmaC0+anBnX3NldHRpbmdzOwotCi0JCWRwcmludGsoMywKLQkJCUtFUk5fREVCVUcKLQkJCSIlczogVklESU9DX1NfSlBFR0NPTVAgLSBxdWFsaXR5PSVkLCBBUFBOPSVkLCBBUFBfbGVuPSVkLCBDT01fbGVuPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIHBhcmFtcy0+cXVhbGl0eSwgcGFyYW1zLT5BUFBuLAotCQkJcGFyYW1zLT5BUFBfbGVuLCBwYXJhbXMtPkNPTV9sZW4pOwotCi0JCXNldHRpbmdzLmpwZ19jb21wID0gKnBhcmFtczsKLQotCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJaWYgKGZoLT52NGxfYnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSB8fAotCQkgICAgZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9XQVJOSU5HCi0JCQkJIiVzOiBWSURJT0NfU19KUEVHQ09NUCBjYWxsZWQgd2hpbGUgaW4gcGxheWJhY2svY2FwdHVyZSBtb2RlXG4iLAotCQkJCVpSX0RFVk5BTUUoenIpKTsKLQkJCXJlcyA9IC1FQlVTWTsKLQkJCWdvdG8gc2pwZWdjX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0KLQkJaWYgKChyZXMgPSB6b3Jhbl9jaGVja19qcGdfc2V0dGluZ3MoenIsICZzZXR0aW5ncykpKQotCQkJZ290byBzanBlZ2NfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCWlmICghZmgtPmpwZ19idWZmZXJzLmFsbG9jYXRlZCkKLQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSA9Ci0JCQkgICAgem9yYW5fdjRsMl9jYWxjX2J1ZnNpemUoJmZoLT5qcGdfc2V0dGluZ3MpOwotCQlmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wID0gKnBhcmFtcyA9IHNldHRpbmdzLmpwZ19jb21wOwotCXNqcGVnY191bmxvY2tfYW5kX3JldHVybjoKLQkJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1FVRVJZU1REOgkvKiB3aHkgaXMgdGhpcyB1c2VmdWw/ICovCi0JewotCQl2NGwyX3N0ZF9pZCAqc3RkID0gYXJnOwotCi0JCWRwcmludGsoMywKLQkJCUtFUk5fREVCVUcgIiVzOiBWSURJT0NfUVVFUllfU1REIC0gc3RkPTB4JWxseFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCAodW5zaWduZWQgbG9uZyBsb25nKSpzdGQpOwotCi0JCWlmICgqc3RkID09IFY0TDJfU1REX0FMTCB8fCAqc3RkID09IFY0TDJfU1REX05UU0MgfHwKLQkJICAgICpzdGQgPT0gVjRMMl9TVERfUEFMIHx8ICgqc3RkID09IFY0TDJfU1REX1NFQ0FNICYmCi0JCQkJCSAgICAgenItPmNhcmQubm9ybXMgPT0gMykpIHsKLQkJCXJldHVybiAwOwotCQl9Ci0KLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCQlicmVhazsKLQotCWNhc2UgVklESU9DX1RSWV9GTVQ6Ci0JewotCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCA9IGFyZzsKLQkJaW50IHJlcyA9IDA7Ci0KLQkJZHByaW50aygzLCBLRVJOX0RFQlVHICIlczogVklESU9DX1RSWV9GTVQgLSB0eXBlPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGZtdC0+dHlwZSk7Ci0KLQkJc3dpdGNoIChmbXQtPnR5cGUpIHsKLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX09WRVJMQVk6Ci0JCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJCWlmIChmbXQtPmZtdC53aW4udy53aWR0aCA+IEJVWl9NQVhfV0lEVEgpCi0JCQkJZm10LT5mbXQud2luLncud2lkdGggPSBCVVpfTUFYX1dJRFRIOwotCQkJaWYgKGZtdC0+Zm10Lndpbi53LndpZHRoIDwgQlVaX01JTl9XSURUSCkKLQkJCQlmbXQtPmZtdC53aW4udy53aWR0aCA9IEJVWl9NSU5fV0lEVEg7Ci0JCQlpZiAoZm10LT5mbXQud2luLncuaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQpCi0JCQkJZm10LT5mbXQud2luLncuaGVpZ2h0ID0gQlVaX01BWF9IRUlHSFQ7Ci0JCQlpZiAoZm10LT5mbXQud2luLncuaGVpZ2h0IDwgQlVaX01JTl9IRUlHSFQpCi0JCQkJZm10LT5mbXQud2luLncuaGVpZ2h0ID0gQlVaX01JTl9IRUlHSFQ7Ci0KLQkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkJYnJlYWs7Ci0KLQkJY2FzZSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU6Ci0JCWNhc2UgVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ6Ci0JCQlpZiAoZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA+IDApCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0KLQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkJaWYgKGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfTUpQRUcpIHsKLQkJCQlzZXR0aW5ncyA9IGZoLT5qcGdfc2V0dGluZ3M7Ci0KLQkJCQkvKiB3ZSBhY3R1YWxseSBuZWVkIHRvIHNldCAncmVhbCcgcGFyYW1ldGVycyBub3cgKi8KLQkJCQlpZiAoKGZtdC0+Zm10LnBpeC5oZWlnaHQgKiAyKSA+Ci0JCQkJICAgIEJVWl9NQVhfSEVJR0hUKQotCQkJCQlzZXR0aW5ncy5UbXBEY20gPSAxOwotCQkJCWVsc2UKLQkJCQkJc2V0dGluZ3MuVG1wRGNtID0gMjsKLQkJCQlzZXR0aW5ncy5kZWNpbWF0aW9uID0gMDsKLQkJCQlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA8PQotCQkJCSAgICBmaC0+anBnX3NldHRpbmdzLmltZ19oZWlnaHQgLyAyKQotCQkJCQlzZXR0aW5ncy5WZXJEY20gPSAyOwotCQkJCWVsc2UKLQkJCQkJc2V0dGluZ3MuVmVyRGNtID0gMTsKLQkJCQlpZiAoZm10LT5mbXQucGl4LndpZHRoIDw9Ci0JCQkJICAgIGZoLT5qcGdfc2V0dGluZ3MuaW1nX3dpZHRoIC8gNCkKLQkJCQkJc2V0dGluZ3MuSG9yRGNtID0gNDsKLQkJCQllbHNlIGlmIChmbXQtPmZtdC5waXgud2lkdGggPD0KLQkJCQkJIGZoLT5qcGdfc2V0dGluZ3MuaW1nX3dpZHRoIC8gMikKLQkJCQkJc2V0dGluZ3MuSG9yRGNtID0gMjsKLQkJCQllbHNlCi0JCQkJCXNldHRpbmdzLkhvckRjbSA9IDE7Ci0JCQkJaWYgKHNldHRpbmdzLlRtcERjbSA9PSAxKQotCQkJCQlzZXR0aW5ncy5maWVsZF9wZXJfYnVmZiA9IDI7Ci0JCQkJZWxzZQotCQkJCQlzZXR0aW5ncy5maWVsZF9wZXJfYnVmZiA9IDE7Ci0KLQkJCQkvKiBjaGVjayAqLwotCQkJCWlmICgocmVzID0KLQkJCQkgICAgIHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyh6ciwKLQkJCQkJCQkgICAgICAmc2V0dGluZ3MpKSkKLQkJCQkJZ290byB0cnlmbXRfdW5sb2NrX2FuZF9yZXR1cm47Ci0KLQkJCQkvKiB0ZWxsIHRoZSB1c2VyIHdoYXQgd2UgYWN0dWFsbHkgZGlkICovCi0JCQkJZm10LT5mbXQucGl4LndpZHRoID0KLQkJCQkgICAgc2V0dGluZ3MuaW1nX3dpZHRoIC8gc2V0dGluZ3MuSG9yRGNtOwotCQkJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPQotCQkJCSAgICBzZXR0aW5ncy5pbWdfaGVpZ2h0ICogMiAvCi0JCQkJICAgIChzZXR0aW5ncy5UbXBEY20gKiBzZXR0aW5ncy5WZXJEY20pOwotCQkJCWlmIChzZXR0aW5ncy5UbXBEY20gPT0gMSkKLQkJCQkJZm10LT5mbXQucGl4LmZpZWxkID0KLQkJCQkJICAgIChmaC0+anBnX3NldHRpbmdzLgotCQkJCQkgICAgIG9kZF9ldmVuID8gVjRMMl9GSUVMRF9TRVFfVEIgOgotCQkJCQkgICAgIFY0TDJfRklFTERfU0VRX0JUKTsKLQkJCQllbHNlCi0JCQkJCWZtdC0+Zm10LnBpeC5maWVsZCA9Ci0JCQkJCSAgICAoZmgtPmpwZ19zZXR0aW5ncy4KLQkJCQkJICAgICBvZGRfZXZlbiA/IFY0TDJfRklFTERfVE9QIDoKLQkJCQkJICAgICBWNEwyX0ZJRUxEX0JPVFRPTSk7Ci0KLQkJCQlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0KLQkJCQkgICAgem9yYW5fdjRsMl9jYWxjX2J1ZnNpemUoJnNldHRpbmdzKTsKLQkJCX0gZWxzZSBpZiAoZm10LT50eXBlID09Ci0JCQkJICAgVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7Ci0JCQkJaW50IGk7Ci0KLQkJCQlmb3IgKGkgPSAwOyBpIDwgTlVNX0ZPUk1BVFM7IGkrKykKLQkJCQkJaWYgKHpvcmFuX2Zvcm1hdHNbaV0uZm91cmNjID09Ci0JCQkJCSAgICBmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQpCi0JCQkJCQlicmVhazsKLQkJCQlpZiAoaSA9PSBOVU1fRk9STUFUUykgewotCQkJCQlyZXMgPSAtRUlOVkFMOwotCQkJCQlnb3RvIHRyeWZtdF91bmxvY2tfYW5kX3JldHVybjsKLQkJCQl9Ci0KLQkJCQlpZiAoZm10LT5mbXQucGl4LndpZHRoID4gQlVaX01BWF9XSURUSCkKLQkJCQkJZm10LT5mbXQucGl4LndpZHRoID0gQlVaX01BWF9XSURUSDsKLQkJCQlpZiAoZm10LT5mbXQucGl4LndpZHRoIDwgQlVaX01JTl9XSURUSCkKLQkJCQkJZm10LT5mbXQucGl4LndpZHRoID0gQlVaX01JTl9XSURUSDsKLQkJCQlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA+IEJVWl9NQVhfSEVJR0hUKQotCQkJCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0KLQkJCQkJICAgIEJVWl9NQVhfSEVJR0hUOwotCQkJCWlmIChmbXQtPmZtdC5waXguaGVpZ2h0IDwgQlVaX01JTl9IRUlHSFQpCi0JCQkJCWZtdC0+Zm10LnBpeC5oZWlnaHQgPQotCQkJCQkgICAgQlVaX01JTl9IRUlHSFQ7Ci0JCQl9IGVsc2UgewotCQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQkJZ290byB0cnlmbXRfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCQl9Ci0JCXRyeWZtdF91bmxvY2tfYW5kX3JldHVybjoKLQkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCQlyZXR1cm4gcmVzOwotCQkJYnJlYWs7Ci0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRUlOVkFMOwotCQl9Ci0KLQkJcmV0dXJuIDA7Ci0JfQotCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCWRwcmludGsoMSwgS0VSTl9ERUJVRyAiJXM6IFVOS05PV04gaW9jdGwgY21kOiAweCV4XG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGNtZCk7Ci0JCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JCWJyZWFrOwotCisJCXJldHVybiAtRUlOVkFMOwogCX0KK30KKworc3RhdGljIGludCB6b3Jhbl92aWRpb2NnbWJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgc3RydWN0IHZpZGVvX21idWYgKnZtYnVmKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IGksIHJlcyA9IDA7CisKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCWlmIChmaC0+YnVmZmVycy5hbGxvY2F0ZWQpIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogVklESU9DR01CVUYgLSBidWZmZXJzIGFscmVhZHkgYWxsb2NhdGVkXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlyZXMgPSAtRUlOVkFMOworCQlnb3RvIHY0bDFyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJfQorCisJLyogVGhlIG5leHQgbW1hcCB3aWxsIG1hcCB0aGUgVjRMIGJ1ZmZlcnMgKi8KKwltYXBfbW9kZV9yYXcoZmgpOworCisJaWYgKHY0bF9mYnVmZmVyX2FsbG9jKGZoKSkgeworCQlyZXMgPSAtRU5PTUVNOworCQlnb3RvIHY0bDFyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJfQorCisJdm1idWYtPnNpemUgPSBmaC0+YnVmZmVycy5udW1fYnVmZmVycyAqIGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplOworCXZtYnVmLT5mcmFtZXMgPSBmaC0+YnVmZmVycy5udW1fYnVmZmVyczsKKwlmb3IgKGkgPSAwOyBpIDwgdm1idWYtPmZyYW1lczsgaSsrKQorCQl2bWJ1Zi0+b2Zmc2V0c1tpXSA9IGkgKiBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZTsKKwordjRsMXJlcWJ1Zl91bmxvY2tfYW5kX3JldHVybjoKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXJldHVybiByZXM7Cit9CisjZW5kaWYKKworc3RhdGljIGludCB6b3Jhbl9xdWVyeWNhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisKKwltZW1zZXQoY2FwLCAwLCBzaXplb2YoKmNhcCkpOworCXN0cm5jcHkoY2FwLT5jYXJkLCBaUl9ERVZOQU1FKHpyKSwgc2l6ZW9mKGNhcC0+Y2FyZCktMSk7CisJc3RybmNweShjYXAtPmRyaXZlciwgInpvcmFuIiwgc2l6ZW9mKGNhcC0+ZHJpdmVyKS0xKTsKKwlzbnByaW50ZihjYXAtPmJ1c19pbmZvLCBzaXplb2YoY2FwLT5idXNfaW5mbyksICJQQ0k6JXMiLAorCQkgcGNpX25hbWUoenItPnBjaV9kZXYpKTsKKwljYXAtPnZlcnNpb24gPSBLRVJORUxfVkVSU0lPTihNQUpPUl9WRVJTSU9OLCBNSU5PUl9WRVJTSU9OLAorCQkJICAgUkVMRUFTRV9WRVJTSU9OKTsKKwljYXAtPmNhcGFiaWxpdGllcyA9IFY0TDJfQ0FQX1NUUkVBTUlORyB8IFY0TDJfQ0FQX1ZJREVPX0NBUFRVUkUgfAorCQkJICAgIFY0TDJfQ0FQX1ZJREVPX09VVFBVVCB8IFY0TDJfQ0FQX1ZJREVPX09WRVJMQVk7CiAJcmV0dXJuIDA7CiB9CiAKLQotc3RhdGljIGxvbmcKLXpvcmFuX2lvY3RsKHN0cnVjdCBmaWxlICAqZmlsZSwKLQkgICAgdW5zaWduZWQgaW50ICBjbWQsCi0JICAgIHVuc2lnbmVkIGxvbmcgYXJnKQorc3RhdGljIGludCB6b3Jhbl9lbnVtX2ZtdChzdHJ1Y3Qgem9yYW4gKnpyLCBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmbXQsIGludCBmbGFnKQogewotCXJldHVybiB2aWRlb191c2VyY29weShmaWxlLCBjbWQsIGFyZywgem9yYW5fZG9faW9jdGwpOworCWludCBudW0gPSAtMSwgaTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fRk9STUFUUzsgaSsrKSB7CisJCWlmICh6b3Jhbl9mb3JtYXRzW2ldLmZsYWdzICYgZmxhZykKKwkJCW51bSsrOworCQlpZiAobnVtID09IGZtdC0+aW5kZXgpCisJCQlicmVhazsKKwl9CisJaWYgKGZtdC0+aW5kZXggPCAwIC8qIGxhdGUsIGJ1dCBub3QgdG9vIGxhdGUgKi8gIHx8IGkgPT0gTlVNX0ZPUk1BVFMpCisJCXJldHVybiAtRUlOVkFMOworCisJc3RybmNweShmbXQtPmRlc2NyaXB0aW9uLCB6b3Jhbl9mb3JtYXRzW2ldLm5hbWUsIHNpemVvZihmbXQtPmRlc2NyaXB0aW9uKS0xKTsKKwlmbXQtPnBpeGVsZm9ybWF0ID0gem9yYW5fZm9ybWF0c1tpXS5mb3VyY2M7CisJaWYgKHpvcmFuX2Zvcm1hdHNbaV0uZmxhZ3MgJiBaT1JBTl9GT1JNQVRfQ09NUFJFU1NFRCkKKwkJZm10LT5mbGFncyB8PSBWNEwyX0ZNVF9GTEFHX0NPTVBSRVNTRUQ7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fZW51bV9mbXRfdmlkX2NhcChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCQkJICAgIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmYpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKworCXJldHVybiB6b3Jhbl9lbnVtX2ZtdCh6ciwgZiwgWk9SQU5fRk9STUFUX0NBUFRVUkUpOworfQorCitzdGF0aWMgaW50IHpvcmFuX2VudW1fZm10X3ZpZF9vdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCSAgICBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisKKwlyZXR1cm4gem9yYW5fZW51bV9mbXQoenIsIGYsIFpPUkFOX0ZPUk1BVF9QTEFZQkFDSyk7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fZW51bV9mbXRfdmlkX292ZXJsYXkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCSAgICBzdHJ1Y3QgdjRsMl9mbXRkZXNjICpmKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisKKwlyZXR1cm4gem9yYW5fZW51bV9mbXQoenIsIGYsIFpPUkFOX0ZPUk1BVF9PVkVSTEFZKTsKK30KKworc3RhdGljIGludCB6b3Jhbl9nX2ZtdF92aWRfb3V0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJZm10LT5mbXQucGl4LndpZHRoID0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLyBmaC0+anBnX3NldHRpbmdzLkhvckRjbTsKKwlmbXQtPmZtdC5waXguaGVpZ2h0ID0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfaGVpZ2h0ICogMiAvCisJCShmaC0+anBnX3NldHRpbmdzLlZlckRjbSAqIGZoLT5qcGdfc2V0dGluZ3MuVG1wRGNtKTsKKwlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0gem9yYW5fdjRsMl9jYWxjX2J1ZnNpemUoJmZoLT5qcGdfc2V0dGluZ3MpOworCWZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9NSlBFRzsKKwlpZiAoZmgtPmpwZ19zZXR0aW5ncy5UbXBEY20gPT0gMSkKKwkJZm10LT5mbXQucGl4LmZpZWxkID0gKGZoLT5qcGdfc2V0dGluZ3Mub2RkX2V2ZW4gPworCQkJCVY0TDJfRklFTERfU0VRX1RCIDogVjRMMl9GSUVMRF9TRVFfQlQpOworCWVsc2UKKwkJZm10LT5mbXQucGl4LmZpZWxkID0gKGZoLT5qcGdfc2V0dGluZ3Mub2RkX2V2ZW4gPworCQkJCVY0TDJfRklFTERfVE9QIDogVjRMMl9GSUVMRF9CT1RUT00pOworCWZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOworCWZtdC0+Zm10LnBpeC5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NNUFRFMTcwTTsKKworCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpvcmFuX2dfZm10X3ZpZF9jYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisKKwlpZiAoZmgtPm1hcF9tb2RlICE9IFpPUkFOX01BUF9NT0RFX1JBVykKKwkJcmV0dXJuIHpvcmFuX2dfZm10X3ZpZF9vdXQoZmlsZSwgZmgsIGZtdCk7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJZm10LT5mbXQucGl4LndpZHRoID0gZmgtPnY0bF9zZXR0aW5ncy53aWR0aDsKKwlmbXQtPmZtdC5waXguaGVpZ2h0ID0gZmgtPnY0bF9zZXR0aW5ncy5oZWlnaHQ7CisJZm10LT5mbXQucGl4LnNpemVpbWFnZSA9IGZoLT52NGxfc2V0dGluZ3MuYnl0ZXNwZXJsaW5lICoKKwkJCQkJZmgtPnY0bF9zZXR0aW5ncy5oZWlnaHQ7CisJZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID0gZmgtPnY0bF9zZXR0aW5ncy5mb3JtYXQtPmZvdXJjYzsKKwlmbXQtPmZtdC5waXguY29sb3JzcGFjZSA9IGZoLT52NGxfc2V0dGluZ3MuZm9ybWF0LT5jb2xvcnNwYWNlOworCWZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSBmaC0+djRsX3NldHRpbmdzLmJ5dGVzcGVybGluZTsKKwlpZiAoQlVaX01BWF9IRUlHSFQgPCAoZmgtPnY0bF9zZXR0aW5ncy5oZWlnaHQgKiAyKSkKKwkJZm10LT5mbXQucGl4LmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCWVsc2UKKwkJZm10LT5mbXQucGl4LmZpZWxkID0gVjRMMl9GSUVMRF9UT1A7CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fZ19mbXRfdmlkX292ZXJsYXkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlmbXQtPmZtdC53aW4udy5sZWZ0ID0gZmgtPm92ZXJsYXlfc2V0dGluZ3MueDsKKwlmbXQtPmZtdC53aW4udy50b3AgPSBmaC0+b3ZlcmxheV9zZXR0aW5ncy55OworCWZtdC0+Zm10Lndpbi53LndpZHRoID0gZmgtPm92ZXJsYXlfc2V0dGluZ3Mud2lkdGg7CisJZm10LT5mbXQud2luLncuaGVpZ2h0ID0gZmgtPm92ZXJsYXlfc2V0dGluZ3MuaGVpZ2h0OworCWlmIChmaC0+b3ZlcmxheV9zZXR0aW5ncy53aWR0aCAqIDIgPiBCVVpfTUFYX0hFSUdIVCkKKwkJZm10LT5mbXQud2luLmZpZWxkID0gVjRMMl9GSUVMRF9JTlRFUkxBQ0VEOworCWVsc2UKKwkJZm10LT5mbXQud2luLmZpZWxkID0gVjRMMl9GSUVMRF9UT1A7CisKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6b3Jhbl90cnlfZm10X3ZpZF9vdmVybGF5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJaWYgKGZtdC0+Zm10Lndpbi53LndpZHRoID4gQlVaX01BWF9XSURUSCkKKwkJZm10LT5mbXQud2luLncud2lkdGggPSBCVVpfTUFYX1dJRFRIOworCWlmIChmbXQtPmZtdC53aW4udy53aWR0aCA8IEJVWl9NSU5fV0lEVEgpCisJCWZtdC0+Zm10Lndpbi53LndpZHRoID0gQlVaX01JTl9XSURUSDsKKwlpZiAoZm10LT5mbXQud2luLncuaGVpZ2h0ID4gQlVaX01BWF9IRUlHSFQpCisJCWZtdC0+Zm10Lndpbi53LmhlaWdodCA9IEJVWl9NQVhfSEVJR0hUOworCWlmIChmbXQtPmZtdC53aW4udy5oZWlnaHQgPCBCVVpfTUlOX0hFSUdIVCkKKwkJZm10LT5mbXQud2luLncuaGVpZ2h0ID0gQlVaX01JTl9IRUlHSFQ7CisKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6b3Jhbl90cnlfZm10X3ZpZF9vdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJc3RydWN0IHpvcmFuX2pwZ19zZXR0aW5ncyBzZXR0aW5nczsKKwlpbnQgcmVzID0gMDsKKworCWlmIChmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgIT0gVjRMMl9QSVhfRk1UX01KUEVHKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlzZXR0aW5ncyA9IGZoLT5qcGdfc2V0dGluZ3M7CisKKwkvKiB3ZSBhY3R1YWxseSBuZWVkIHRvIHNldCAncmVhbCcgcGFyYW1ldGVycyBub3cgKi8KKwlpZiAoKGZtdC0+Zm10LnBpeC5oZWlnaHQgKiAyKSA+IEJVWl9NQVhfSEVJR0hUKQorCQlzZXR0aW5ncy5UbXBEY20gPSAxOworCWVsc2UKKwkJc2V0dGluZ3MuVG1wRGNtID0gMjsKKwlzZXR0aW5ncy5kZWNpbWF0aW9uID0gMDsKKwlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA8PSBmaC0+anBnX3NldHRpbmdzLmltZ19oZWlnaHQgLyAyKQorCQlzZXR0aW5ncy5WZXJEY20gPSAyOworCWVsc2UKKwkJc2V0dGluZ3MuVmVyRGNtID0gMTsKKwlpZiAoZm10LT5mbXQucGl4LndpZHRoIDw9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX3dpZHRoIC8gNCkKKwkJc2V0dGluZ3MuSG9yRGNtID0gNDsKKwllbHNlIGlmIChmbXQtPmZtdC5waXgud2lkdGggPD0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLyAyKQorCQlzZXR0aW5ncy5Ib3JEY20gPSAyOworCWVsc2UKKwkJc2V0dGluZ3MuSG9yRGNtID0gMTsKKwlpZiAoc2V0dGluZ3MuVG1wRGNtID09IDEpCisJCXNldHRpbmdzLmZpZWxkX3Blcl9idWZmID0gMjsKKwllbHNlCisJCXNldHRpbmdzLmZpZWxkX3Blcl9idWZmID0gMTsKKworCWlmIChzZXR0aW5ncy5Ib3JEY20gPiAxKSB7CisJCXNldHRpbmdzLmltZ194ID0gKEJVWl9NQVhfV0lEVEggPT0gNzIwKSA/IDggOiAwOworCQlzZXR0aW5ncy5pbWdfd2lkdGggPSAoQlVaX01BWF9XSURUSCA9PSA3MjApID8gNzA0IDogQlVaX01BWF9XSURUSDsKKwl9IGVsc2UgeworCQlzZXR0aW5ncy5pbWdfeCA9IDA7CisJCXNldHRpbmdzLmltZ193aWR0aCA9IEJVWl9NQVhfV0lEVEg7CisJfQorCisJLyogY2hlY2sgKi8KKwlyZXMgPSB6b3Jhbl9jaGVja19qcGdfc2V0dGluZ3MoenIsICZzZXR0aW5ncywgMSk7CisJaWYgKHJlcykKKwkJZ290byB0cnlmbXRfdW5sb2NrX2FuZF9yZXR1cm47CisKKwkvKiB0ZWxsIHRoZSB1c2VyIHdoYXQgd2UgYWN0dWFsbHkgZGlkICovCisJZm10LT5mbXQucGl4LndpZHRoID0gc2V0dGluZ3MuaW1nX3dpZHRoIC8gc2V0dGluZ3MuSG9yRGNtOworCWZtdC0+Zm10LnBpeC5oZWlnaHQgPSBzZXR0aW5ncy5pbWdfaGVpZ2h0ICogMiAvCisJCShzZXR0aW5ncy5UbXBEY20gKiBzZXR0aW5ncy5WZXJEY20pOworCWlmIChzZXR0aW5ncy5UbXBEY20gPT0gMSkKKwkJZm10LT5mbXQucGl4LmZpZWxkID0gKGZoLT5qcGdfc2V0dGluZ3Mub2RkX2V2ZW4gPworCQkJCVY0TDJfRklFTERfU0VRX1RCIDogVjRMMl9GSUVMRF9TRVFfQlQpOworCWVsc2UKKwkJZm10LT5mbXQucGl4LmZpZWxkID0gKGZoLT5qcGdfc2V0dGluZ3Mub2RkX2V2ZW4gPworCQkJCVY0TDJfRklFTERfVE9QIDogVjRMMl9GSUVMRF9CT1RUT00pOworCisJZm10LT5mbXQucGl4LnNpemVpbWFnZSA9IHpvcmFuX3Y0bDJfY2FsY19idWZzaXplKCZzZXR0aW5ncyk7CisJZm10LT5mbXQucGl4LmJ5dGVzcGVybGluZSA9IDA7CisJZm10LT5mbXQucGl4LmNvbG9yc3BhY2UgPSBWNEwyX0NPTE9SU1BBQ0VfU01QVEUxNzBNOwordHJ5Zm10X3VubG9ja19hbmRfcmV0dXJuOgorCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fdHJ5X2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCWludCBicHA7CisJaW50IGk7CisKKwlpZiAoZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0ID09IFY0TDJfUElYX0ZNVF9NSlBFRykKKwkJcmV0dXJuIHpvcmFuX3RyeV9mbXRfdmlkX291dChmaWxlLCBmaCwgZm10KTsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCWZvciAoaSA9IDA7IGkgPCBOVU1fRk9STUFUUzsgaSsrKQorCQlpZiAoem9yYW5fZm9ybWF0c1tpXS5mb3VyY2MgPT0gZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0KQorCQkJYnJlYWs7CisKKwlpZiAoaSA9PSBOVU1fRk9STUFUUykgeworCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJYnBwID0gKHpvcmFuX2Zvcm1hdHNbaV0uZGVwdGggKyA3KSAvIDg7CisJZm10LT5mbXQucGl4LndpZHRoICY9IH4oKGJwcCA9PSAyKSA/IDEgOiAzKTsKKwlpZiAoZm10LT5mbXQucGl4LndpZHRoID4gQlVaX01BWF9XSURUSCkKKwkJZm10LT5mbXQucGl4LndpZHRoID0gQlVaX01BWF9XSURUSDsKKwlpZiAoZm10LT5mbXQucGl4LndpZHRoIDwgQlVaX01JTl9XSURUSCkKKwkJZm10LT5mbXQucGl4LndpZHRoID0gQlVaX01JTl9XSURUSDsKKwlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA+IEJVWl9NQVhfSEVJR0hUKQorCQlmbXQtPmZtdC5waXguaGVpZ2h0ID0gQlVaX01BWF9IRUlHSFQ7CisJaWYgKGZtdC0+Zm10LnBpeC5oZWlnaHQgPCBCVVpfTUlOX0hFSUdIVCkKKwkJZm10LT5mbXQucGl4LmhlaWdodCA9IEJVWl9NSU5fSEVJR0hUOworCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fc19mbXRfdmlkX292ZXJsYXkoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCXN0cnVjdCB2NGwyX2Zvcm1hdCAqZm10KQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IHJlczsKKworCWRwcmludGsoMywgIng9JWQsIHk9JWQsIHc9JWQsIGg9JWQsIGNudD0lZCwgbWFwPTB4JXBcbiIsCisJCQlmbXQtPmZtdC53aW4udy5sZWZ0LCBmbXQtPmZtdC53aW4udy50b3AsCisJCQlmbXQtPmZtdC53aW4udy53aWR0aCwKKwkJCWZtdC0+Zm10Lndpbi53LmhlaWdodCwKKwkJCWZtdC0+Zm10Lndpbi5jbGlwY291bnQsCisJCQlmbXQtPmZtdC53aW4uYml0bWFwKTsKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJcmVzID0gc2V0dXBfd2luZG93KGZoLCBmbXQtPmZtdC53aW4udy5sZWZ0LCBmbXQtPmZtdC53aW4udy50b3AsCisJCQkgICBmbXQtPmZtdC53aW4udy53aWR0aCwgZm10LT5mbXQud2luLncuaGVpZ2h0LAorCQkJICAgKHN0cnVjdCB2NGwyX2NsaXAgX191c2VyICopZm10LT5mbXQud2luLmNsaXBzLAorCQkJICAgZm10LT5mbXQud2luLmNsaXBjb3VudCwgZm10LT5mbXQud2luLmJpdG1hcCk7CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCB6b3Jhbl9zX2ZtdF92aWRfb3V0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCV9fbGUzMiBwcmludGZvcm1hdCA9IF9fY3B1X3RvX2xlMzIoZm10LT5mbXQucGl4LnBpeGVsZm9ybWF0KTsKKwlzdHJ1Y3Qgem9yYW5fanBnX3NldHRpbmdzIHNldHRpbmdzOworCWludCByZXMgPSAwOworCisJZHByaW50aygzLCAic2l6ZT0lZHglZCwgZm10PTB4JXggKCU0LjRzKVxuIiwKKwkJCWZtdC0+Zm10LnBpeC53aWR0aCwgZm10LT5mbXQucGl4LmhlaWdodCwKKwkJCWZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCwKKwkJCShjaGFyICopICZwcmludGZvcm1hdCk7CisJaWYgKGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCAhPSBWNEwyX1BJWF9GTVRfTUpQRUcpCisJCXJldHVybiAtRUlOVkFMOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJaWYgKGZoLT5idWZmZXJzLmFsbG9jYXRlZCkgeworCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogVklESU9DX1NfRk1UIC0gY2Fubm90IGNoYW5nZSBjYXB0dXJlIG1vZGVcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJlcyA9IC1FQlVTWTsKKwkJZ290byBzZm10anBnX3VubG9ja19hbmRfcmV0dXJuOworCX0KKworCXNldHRpbmdzID0gZmgtPmpwZ19zZXR0aW5nczsKKworCS8qIHdlIGFjdHVhbGx5IG5lZWQgdG8gc2V0ICdyZWFsJyBwYXJhbWV0ZXJzIG5vdyAqLworCWlmIChmbXQtPmZtdC5waXguaGVpZ2h0ICogMiA+IEJVWl9NQVhfSEVJR0hUKQorCQlzZXR0aW5ncy5UbXBEY20gPSAxOworCWVsc2UKKwkJc2V0dGluZ3MuVG1wRGNtID0gMjsKKwlzZXR0aW5ncy5kZWNpbWF0aW9uID0gMDsKKwlpZiAoZm10LT5mbXQucGl4LmhlaWdodCA8PSBmaC0+anBnX3NldHRpbmdzLmltZ19oZWlnaHQgLyAyKQorCQlzZXR0aW5ncy5WZXJEY20gPSAyOworCWVsc2UKKwkJc2V0dGluZ3MuVmVyRGNtID0gMTsKKwlpZiAoZm10LT5mbXQucGl4LndpZHRoIDw9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX3dpZHRoIC8gNCkKKwkJc2V0dGluZ3MuSG9yRGNtID0gNDsKKwllbHNlIGlmIChmbXQtPmZtdC5waXgud2lkdGggPD0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfd2lkdGggLyAyKQorCQlzZXR0aW5ncy5Ib3JEY20gPSAyOworCWVsc2UKKwkJc2V0dGluZ3MuSG9yRGNtID0gMTsKKwlpZiAoc2V0dGluZ3MuVG1wRGNtID09IDEpCisJCXNldHRpbmdzLmZpZWxkX3Blcl9idWZmID0gMjsKKwllbHNlCisJCXNldHRpbmdzLmZpZWxkX3Blcl9idWZmID0gMTsKKworCWlmIChzZXR0aW5ncy5Ib3JEY20gPiAxKSB7CisJCXNldHRpbmdzLmltZ194ID0gKEJVWl9NQVhfV0lEVEggPT0gNzIwKSA/IDggOiAwOworCQlzZXR0aW5ncy5pbWdfd2lkdGggPSAoQlVaX01BWF9XSURUSCA9PSA3MjApID8gNzA0IDogQlVaX01BWF9XSURUSDsKKwl9IGVsc2UgeworCQlzZXR0aW5ncy5pbWdfeCA9IDA7CisJCXNldHRpbmdzLmltZ193aWR0aCA9IEJVWl9NQVhfV0lEVEg7CisJfQorCisJLyogY2hlY2sgKi8KKwlyZXMgPSB6b3Jhbl9jaGVja19qcGdfc2V0dGluZ3MoenIsICZzZXR0aW5ncywgMCk7CisJaWYgKHJlcykKKwkJZ290byBzZm10anBnX3VubG9ja19hbmRfcmV0dXJuOworCisJLyogaXQncyBvaywgc28gc2V0IHRoZW0gKi8KKwlmaC0+anBnX3NldHRpbmdzID0gc2V0dGluZ3M7CisKKwltYXBfbW9kZV9qcGcoZmgsIGZtdC0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCk7CisJZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemUgPSB6b3Jhbl92NGwyX2NhbGNfYnVmc2l6ZSgmZmgtPmpwZ19zZXR0aW5ncyk7CisKKwkvKiB0ZWxsIHRoZSB1c2VyIHdoYXQgd2UgYWN0dWFsbHkgZGlkICovCisJZm10LT5mbXQucGl4LndpZHRoID0gc2V0dGluZ3MuaW1nX3dpZHRoIC8gc2V0dGluZ3MuSG9yRGNtOworCWZtdC0+Zm10LnBpeC5oZWlnaHQgPSBzZXR0aW5ncy5pbWdfaGVpZ2h0ICogMiAvCisJCShzZXR0aW5ncy5UbXBEY20gKiBzZXR0aW5ncy5WZXJEY20pOworCWlmIChzZXR0aW5ncy5UbXBEY20gPT0gMSkKKwkJZm10LT5mbXQucGl4LmZpZWxkID0gKGZoLT5qcGdfc2V0dGluZ3Mub2RkX2V2ZW4gPworCQkJCVY0TDJfRklFTERfU0VRX1RCIDogVjRMMl9GSUVMRF9TRVFfQlQpOworCWVsc2UKKwkJZm10LT5mbXQucGl4LmZpZWxkID0gKGZoLT5qcGdfc2V0dGluZ3Mub2RkX2V2ZW4gPworCQkJCVY0TDJfRklFTERfVE9QIDogVjRMMl9GSUVMRF9CT1RUT00pOworCWZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSAwOworCWZtdC0+Zm10LnBpeC5zaXplaW1hZ2UgPSBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZTsKKwlmbXQtPmZtdC5waXguY29sb3JzcGFjZSA9IFY0TDJfQ09MT1JTUEFDRV9TTVBURTE3ME07CisKK3NmbXRqcGdfdW5sb2NrX2FuZF9yZXR1cm46CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCB6b3Jhbl9zX2ZtdF92aWRfY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQkJCQlzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCWludCBpOworCWludCByZXMgPSAwOworCisJaWYgKGZtdC0+Zm10LnBpeC5waXhlbGZvcm1hdCA9PSBWNEwyX1BJWF9GTVRfTUpQRUcpCisJCXJldHVybiB6b3Jhbl9zX2ZtdF92aWRfb3V0KGZpbGUsIGZoLCBmbXQpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9GT1JNQVRTOyBpKyspCisJCWlmIChmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQgPT0gem9yYW5fZm9ybWF0c1tpXS5mb3VyY2MpCisJCQlicmVhazsKKwlpZiAoaSA9PSBOVU1fRk9STUFUUykgeworCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogVklESU9DX1NfRk1UIC0gdW5rbm93bi91bnN1cHBvcnRlZCBmb3JtYXQgMHgleFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBmbXQtPmZtdC5waXgucGl4ZWxmb3JtYXQpOworCQlyZXR1cm4gLUVJTlZBTDsKKwl9CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlpZiAoKGZoLT5tYXBfbW9kZSAhPSBaT1JBTl9NQVBfTU9ERV9SQVcgJiYgZmgtPmJ1ZmZlcnMuYWxsb2NhdGVkKSB8fAorCSAgICBmaC0+YnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgeworCQlkcHJpbnRrKDEsIEtFUk5fRVJSICIlczogVklESU9DX1NfRk1UIC0gY2Fubm90IGNoYW5nZSBjYXB0dXJlIG1vZGVcbiIsCisJCQkJWlJfREVWTkFNRSh6cikpOworCQlyZXMgPSAtRUJVU1k7CisJCWdvdG8gc2ZtdHY0bF91bmxvY2tfYW5kX3JldHVybjsKKwl9CisJaWYgKGZtdC0+Zm10LnBpeC5oZWlnaHQgPiBCVVpfTUFYX0hFSUdIVCkKKwkJZm10LT5mbXQucGl4LmhlaWdodCA9IEJVWl9NQVhfSEVJR0hUOworCWlmIChmbXQtPmZtdC5waXgud2lkdGggPiBCVVpfTUFYX1dJRFRIKQorCQlmbXQtPmZtdC5waXgud2lkdGggPSBCVVpfTUFYX1dJRFRIOworCisJbWFwX21vZGVfcmF3KGZoKTsKKworCXJlcyA9IHpvcmFuX3Y0bF9zZXRfZm9ybWF0KGZoLCBmbXQtPmZtdC5waXgud2lkdGgsIGZtdC0+Zm10LnBpeC5oZWlnaHQsCisJCQkJICAgJnpvcmFuX2Zvcm1hdHNbaV0pOworCWlmIChyZXMpCisJCWdvdG8gc2ZtdHY0bF91bmxvY2tfYW5kX3JldHVybjsKKworCS8qIHRlbGwgdGhlIHVzZXIgdGhlIHJlc3VsdHMvbWlzc2luZyBzdHVmZiAqLworCWZtdC0+Zm10LnBpeC5ieXRlc3BlcmxpbmUgPSBmaC0+djRsX3NldHRpbmdzLmJ5dGVzcGVybGluZTsKKwlmbXQtPmZtdC5waXguc2l6ZWltYWdlID0gZmgtPnY0bF9zZXR0aW5ncy5oZWlnaHQgKiBmaC0+djRsX3NldHRpbmdzLmJ5dGVzcGVybGluZTsKKwlmbXQtPmZtdC5waXguY29sb3JzcGFjZSA9IGZoLT52NGxfc2V0dGluZ3MuZm9ybWF0LT5jb2xvcnNwYWNlOworCWlmIChCVVpfTUFYX0hFSUdIVCA8IChmaC0+djRsX3NldHRpbmdzLmhlaWdodCAqIDIpKQorCQlmbXQtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX0lOVEVSTEFDRUQ7CisJZWxzZQorCQlmbXQtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX1RPUDsKKworc2ZtdHY0bF91bmxvY2tfYW5kX3JldHVybjoKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHpvcmFuX2dfZmJ1ZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJc3RydWN0IHY0bDJfZnJhbWVidWZmZXIgKmZiKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisKKwltZW1zZXQoZmIsIDAsIHNpemVvZigqZmIpKTsKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJZmItPmJhc2UgPSB6ci0+dmJ1Zl9iYXNlOworCWZiLT5mbXQud2lkdGggPSB6ci0+dmJ1Zl93aWR0aDsKKwlmYi0+Zm10LmhlaWdodCA9IHpyLT52YnVmX2hlaWdodDsKKwlpZiAoenItPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0KQorCQlmYi0+Zm10LnBpeGVsZm9ybWF0ID0gZmgtPm92ZXJsYXlfc2V0dGluZ3MuZm9ybWF0LT5mb3VyY2M7CisJZmItPmZtdC5ieXRlc3BlcmxpbmUgPSB6ci0+dmJ1Zl9ieXRlc3BlcmxpbmU7CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJZmItPmZtdC5jb2xvcnNwYWNlID0gVjRMMl9DT0xPUlNQQUNFX1NSR0I7CisJZmItPmZtdC5maWVsZCA9IFY0TDJfRklFTERfSU5URVJMQUNFRDsKKwlmYi0+ZmxhZ3MgPSBWNEwyX0ZCVUZfRkxBR19PVkVSTEFZOworCWZiLT5jYXBhYmlsaXR5ID0gVjRMMl9GQlVGX0NBUF9MSVNUX0NMSVBQSU5HOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fc19mYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQlzdHJ1Y3QgdjRsMl9mcmFtZWJ1ZmZlciAqZmIpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgaSwgcmVzID0gMDsKKwlfX2xlMzIgcHJpbnRmb3JtYXQgPSBfX2NwdV90b19sZTMyKGZiLT5mbXQucGl4ZWxmb3JtYXQpOworCisJZm9yIChpID0gMDsgaSA8IE5VTV9GT1JNQVRTOyBpKyspCisJCWlmICh6b3Jhbl9mb3JtYXRzW2ldLmZvdXJjYyA9PSBmYi0+Zm10LnBpeGVsZm9ybWF0KQorCQkJYnJlYWs7CisJaWYgKGkgPT0gTlVNX0ZPUk1BVFMpIHsKKwkJZHByaW50aygxLCBLRVJOX0VSUiAiJXM6IFZJRElPQ19TX0ZCVUYgLSBmb3JtYXQ9MHgleCAoJTQuNHMpIG5vdCBhbGxvd2VkXG4iLAorCQkJWlJfREVWTkFNRSh6ciksIGZiLT5mbXQucGl4ZWxmb3JtYXQsCisJCQkoY2hhciAqKSZwcmludGZvcm1hdCk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXMgPSBzZXR1cF9mYnVmZmVyKGZoLCBmYi0+YmFzZSwgJnpvcmFuX2Zvcm1hdHNbaV0sIGZiLT5mbXQud2lkdGgsCisJCQkgICAgZmItPmZtdC5oZWlnaHQsIGZiLT5mbXQuYnl0ZXNwZXJsaW5lKTsKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fb3ZlcmxheShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgdW5zaWduZWQgaW50IG9uKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IHJlczsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXMgPSBzZXR1cF9vdmVybGF5KGZoLCBvbik7CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHpvcmFuX3N0cmVhbW9mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpOworCitzdGF0aWMgaW50IHpvcmFuX3JlcWJ1ZnMoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHN0cnVjdCB2NGwyX3JlcXVlc3RidWZmZXJzICpyZXEpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgcmVzID0gMDsKKworCWlmIChyZXEtPm1lbW9yeSAhPSBWNEwyX01FTU9SWV9NTUFQKSB7CisJCWRwcmludGsoMiwKKwkJCQlLRVJOX0VSUgorCQkJCSIlczogb25seSBNRU1PUllfTU1BUCBjYXB0dXJlIGlzIHN1cHBvcnRlZCwgbm90ICVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCByZXEtPm1lbW9yeSk7CisJCXJldHVybiAtRUlOVkFMOworCX0KKworCWlmIChyZXEtPmNvdW50ID09IDApCisJCXJldHVybiB6b3Jhbl9zdHJlYW1vZmYoZmlsZSwgZmgsIHJlcS0+dHlwZSk7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJaWYgKGZoLT5idWZmZXJzLmFsbG9jYXRlZCkgeworCQlkcHJpbnRrKDIsCisJCQkJS0VSTl9FUlIKKwkJCQkiJXM6IFZJRElPQ19SRVFCVUZTIC0gYnVmZmVycyBhbHJlYWR5IGFsbG9jYXRlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJlcyA9IC1FQlVTWTsKKwkJZ290byB2NGwycmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCX0KKworCWlmIChmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXICYmCisJICAgIHJlcS0+dHlwZSA9PSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpIHsKKwkJLyogY29udHJvbCB1c2VyIGlucHV0ICovCisJCWlmIChyZXEtPmNvdW50IDwgMikKKwkJCXJlcS0+Y291bnQgPSAyOworCQlpZiAocmVxLT5jb3VudCA+IHY0bF9uYnVmcykKKwkJCXJlcS0+Y291bnQgPSB2NGxfbmJ1ZnM7CisKKwkJLyogVGhlIG5leHQgbW1hcCB3aWxsIG1hcCB0aGUgVjRMIGJ1ZmZlcnMgKi8KKwkJbWFwX21vZGVfcmF3KGZoKTsKKwkJZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnMgPSByZXEtPmNvdW50OworCisJCWlmICh2NGxfZmJ1ZmZlcl9hbGxvYyhmaCkpIHsKKwkJCXJlcyA9IC1FTk9NRU07CisJCQlnb3RvIHY0bDJyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKwl9IGVsc2UgaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDIHx8CisJCSAgIGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWSkgeworCQkvKiB3ZSBuZWVkIHRvIGNhbGN1bGF0ZSBzaXplIG91cnNlbHZlcyBub3cgKi8KKwkJaWYgKHJlcS0+Y291bnQgPCA0KQorCQkJcmVxLT5jb3VudCA9IDQ7CisJCWlmIChyZXEtPmNvdW50ID4ganBnX25idWZzKQorCQkJcmVxLT5jb3VudCA9IGpwZ19uYnVmczsKKworCQkvKiBUaGUgbmV4dCBtbWFwIHdpbGwgbWFwIHRoZSBNSlBFRyBidWZmZXJzICovCisJCW1hcF9tb2RlX2pwZyhmaCwgcmVxLT50eXBlID09IFY0TDJfQlVGX1RZUEVfVklERU9fT1VUUFVUKTsKKwkJZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnMgPSByZXEtPmNvdW50OworCQlmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSA9IHpvcmFuX3Y0bDJfY2FsY19idWZzaXplKCZmaC0+anBnX3NldHRpbmdzKTsKKworCQlpZiAoanBnX2ZidWZmZXJfYWxsb2MoZmgpKSB7CisJCQlyZXMgPSAtRU5PTUVNOworCQkJZ290byB2NGwycmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisJfSBlbHNlIHsKKwkJZHByaW50aygxLAorCQkJCUtFUk5fRVJSCisJCQkJIiVzOiBWSURJT0NfUkVRQlVGUyAtIHVua25vd24gdHlwZSAlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgcmVxLT50eXBlKTsKKwkJcmVzID0gLUVJTlZBTDsKKwkJZ290byB2NGwycmVxYnVmX3VubG9ja19hbmRfcmV0dXJuOworCX0KK3Y0bDJyZXFidWZfdW5sb2NrX2FuZF9yZXR1cm46CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHpvcmFuX3F1ZXJ5YnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCWludCByZXM7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJcmVzID0gem9yYW5fdjRsMl9idWZmZXJfc3RhdHVzKGZoLCBidWYsIGJ1Zi0+aW5kZXgpOworCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCB6b3Jhbl9xYnVmKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBzdHJ1Y3QgdjRsMl9idWZmZXIgKmJ1ZikKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCWludCByZXMgPSAwLCBjb2RlY19tb2RlLCBidWZfdHlwZTsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXN3aXRjaCAoZmgtPm1hcF9tb2RlKSB7CisJY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6CisJCWlmIChidWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CisJCQlkcHJpbnRrKDEsIEtFUk5fRVJSCisJCQkJIiVzOiBWSURJT0NfUUJVRiAtIGludmFsaWQgYnVmLT50eXBlPSVkIGZvciBtYXBfbW9kZT0lZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlLCBmaC0+bWFwX21vZGUpOworCQkJcmVzID0gLUVJTlZBTDsKKwkJCWdvdG8gcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCisJCXJlcyA9IHpvcmFuX3Y0bF9xdWV1ZV9mcmFtZShmaCwgYnVmLT5pbmRleCk7CisJCWlmIChyZXMpCisJCQlnb3RvIHFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJCWlmICghenItPnY0bF9tZW1ncmFiX2FjdGl2ZSAmJiBmaC0+YnVmZmVycy5hY3RpdmUgPT0gWk9SQU5fTE9DS0VEKQorCQkJenIzNjA1N19zZXRfbWVtZ3JhYih6ciwgMSk7CisJCWJyZWFrOworCisJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOgorCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1BMQVk6CisJCWlmIChmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfSlBHX1BMQVkpIHsKKwkJCWJ1Zl90eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ7CisJCQljb2RlY19tb2RlID0gQlVaX01PREVfTU9USU9OX0RFQ09NUFJFU1M7CisJCX0gZWxzZSB7CisJCQlidWZfdHlwZSA9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRTsKKwkJCWNvZGVjX21vZGUgPSBCVVpfTU9ERV9NT1RJT05fQ09NUFJFU1M7CisJCX0KKworCQlpZiAoYnVmLT50eXBlICE9IGJ1Zl90eXBlKSB7CisJCQlkcHJpbnRrKDEsIEtFUk5fRVJSCisJCQkJIiVzOiBWSURJT0NfUUJVRiAtIGludmFsaWQgYnVmLT50eXBlPSVkIGZvciBtYXBfbW9kZT0lZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlLCBmaC0+bWFwX21vZGUpOworCQkJcmVzID0gLUVJTlZBTDsKKwkJCWdvdG8gcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCisJCXJlcyA9IHpvcmFuX2pwZ19xdWV1ZV9mcmFtZShmaCwgYnVmLT5pbmRleCwgY29kZWNfbW9kZSk7CisJCWlmIChyZXMgIT0gMCkKKwkJCWdvdG8gcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJaWYgKHpyLT5jb2RlY19tb2RlID09IEJVWl9NT0RFX0lETEUgJiYKKwkJICAgIGZoLT5idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9MT0NLRUQpCisJCQl6cjM2MDU3X2VuYWJsZV9qcGcoenIsIGNvZGVjX21vZGUpOworCisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZHByaW50aygxLCBLRVJOX0VSUgorCQkJIiVzOiBWSURJT0NfUUJVRiAtIHVuc3VwcG9ydGVkIHR5cGUgJWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlKTsKKwkJcmVzID0gLUVJTlZBTDsKKwkJYnJlYWs7CisJfQorcWJ1Zl91bmxvY2tfYW5kX3JldHVybjoKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fZHFidWYoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHN0cnVjdCB2NGwyX2J1ZmZlciAqYnVmKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IHJlcyA9IDAsIGJ1Zl90eXBlLCBudW0gPSAtMTsJLyogY29tcGlsZXIgYm9ya3MgaGVyZSAoPykgKi8KKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXN3aXRjaCAoZmgtPm1hcF9tb2RlKSB7CisJY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6CisJCWlmIChidWYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKSB7CisJCQlkcHJpbnRrKDEsIEtFUk5fRVJSCisJCQkJIiVzOiBWSURJT0NfUUJVRiAtIGludmFsaWQgYnVmLT50eXBlPSVkIGZvciBtYXBfbW9kZT0lZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgYnVmLT50eXBlLCBmaC0+bWFwX21vZGUpOworCQkJcmVzID0gLUVJTlZBTDsKKwkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKworCQludW0gPSB6ci0+djRsX3BlbmRbenItPnY0bF9zeW5jX3RhaWwgJiBWNExfTUFTS19GUkFNRV07CisJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyAmJgorCQkgICAgenItPnY0bF9idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlICE9IEJVWl9TVEFURV9ET05FKSB7CisJCQlyZXMgPSAtRUFHQUlOOworCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCQlyZXMgPSB2NGxfc3luYyhmaCwgbnVtKTsKKwkJaWYgKHJlcykKKwkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJCXpyLT52NGxfc3luY190YWlsKys7CisJCXJlcyA9IHpvcmFuX3Y0bDJfYnVmZmVyX3N0YXR1cyhmaCwgYnVmLCBudW0pOworCQlicmVhazsKKworCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1JFQzoKKwljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgorCXsKKwkJc3RydWN0IHpvcmFuX3N5bmMgYnM7CisKKwkJaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWSkKKwkJCWJ1Zl90eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQ7CisJCWVsc2UKKwkJCWJ1Zl90eXBlID0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFOworCisJCWlmIChidWYtPnR5cGUgIT0gYnVmX3R5cGUpIHsKKwkJCWRwcmludGsoMSwgS0VSTl9FUlIKKwkJCQkiJXM6IFZJRElPQ19RQlVGIC0gaW52YWxpZCBidWYtPnR5cGU9JWQgZm9yIG1hcF9tb2RlPSVkXG4iLAorCQkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUsIGZoLT5tYXBfbW9kZSk7CisJCQlyZXMgPSAtRUlOVkFMOworCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCisJCW51bSA9IHpyLT5qcGdfcGVuZFt6ci0+anBnX3F1ZV90YWlsICYgQlVaX01BU0tfRlJBTUVdOworCisJCWlmIChmaWxlLT5mX2ZsYWdzICYgT19OT05CTE9DSyAmJgorCQkgICAgenItPmpwZ19idWZmZXJzLmJ1ZmZlcltudW1dLnN0YXRlICE9IEJVWl9TVEFURV9ET05FKSB7CisJCQlyZXMgPSAtRUFHQUlOOworCQkJZ290byBkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCQlyZXMgPSBqcGdfc3luYyhmaCwgJmJzKTsKKwkJaWYgKHJlcykKKwkJCWdvdG8gZHFidWZfdW5sb2NrX2FuZF9yZXR1cm47CisJCXJlcyA9IHpvcmFuX3Y0bDJfYnVmZmVyX3N0YXR1cyhmaCwgYnVmLCBicy5mcmFtZSk7CisJCWJyZWFrOworCX0KKworCWRlZmF1bHQ6CisJCWRwcmludGsoMSwgS0VSTl9FUlIKKwkJCSIlczogVklESU9DX0RRQlVGIC0gdW5zdXBwb3J0ZWQgdHlwZSAlZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBidWYtPnR5cGUpOworCQlyZXMgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CitkcWJ1Zl91bmxvY2tfYW5kX3JldHVybjoKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fc3RyZWFtb24oc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIGVudW0gdjRsMl9idWZfdHlwZSB0eXBlKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IHJlcyA9IDA7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlzd2l0Y2ggKGZoLT5tYXBfbW9kZSkgeworCWNhc2UgWk9SQU5fTUFQX01PREVfUkFXOgkvKiByYXcgY2FwdHVyZSAqLworCQlpZiAoenItPnY0bF9idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9BQ1RJVkUgfHwKKwkJICAgIGZoLT5idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9BQ1RJVkUpIHsKKwkJCXJlcyA9IC1FQlVTWTsKKwkJCWdvdG8gc3RybW9uX3VubG9ja19hbmRfcmV0dXJuOworCQl9CisKKwkJenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9IGZoLT5idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0xPQ0tFRDsKKwkJenItPnY0bF9zZXR0aW5ncyA9IGZoLT52NGxfc2V0dGluZ3M7CisKKwkJenItPnY0bF9zeW5jX3RhaWwgPSB6ci0+djRsX3BlbmRfdGFpbDsKKwkJaWYgKCF6ci0+djRsX21lbWdyYWJfYWN0aXZlICYmCisJCSAgICB6ci0+djRsX3BlbmRfaGVhZCAhPSB6ci0+djRsX3BlbmRfdGFpbCkgeworCQkJenIzNjA1N19zZXRfbWVtZ3JhYih6ciwgMSk7CisJCX0KKwkJYnJlYWs7CisKKwljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19SRUM6CisJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWToKKwkJLyogd2hhdCBpcyB0aGUgY29kZWMgbW9kZSByaWdodCBub3c/ICovCisJCWlmICh6ci0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0FDVElWRSB8fAorCQkgICAgZmgtPmJ1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0FDVElWRSkgeworCQkJcmVzID0gLUVCVVNZOworCQkJZ290byBzdHJtb25fdW5sb2NrX2FuZF9yZXR1cm47CisJCX0KKworCQl6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID0gZmgtPmJ1ZmZlcnMuYWN0aXZlID0gWk9SQU5fTE9DS0VEOworCisJCWlmICh6ci0+anBnX3F1ZV9oZWFkICE9IHpyLT5qcGdfcXVlX3RhaWwpIHsKKwkJCS8qIFN0YXJ0IHRoZSBqcGVnIGNvZGVjIHdoZW4gdGhlIGZpcnN0IGZyYW1lIGlzIHF1ZXVlZCAgKi8KKwkJCWpwZWdfc3RhcnQoenIpOworCQl9CisJCWJyZWFrOworCisJZGVmYXVsdDoKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogVklESU9DX1NUUkVBTU9OIC0gaW52YWxpZCBtYXAgbW9kZSAlZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBmaC0+bWFwX21vZGUpOworCQlyZXMgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CitzdHJtb25fdW5sb2NrX2FuZF9yZXR1cm46CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHpvcmFuX3N0cmVhbW9mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgZW51bSB2NGwyX2J1Zl90eXBlIHR5cGUpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgaSwgcmVzID0gMDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKKwljYXNlIFpPUkFOX01BUF9NT0RFX1JBVzoJLyogcmF3IGNhcHR1cmUgKi8KKwkJaWYgKGZoLT5idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFICYmCisJCSAgICB6ci0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKKwkJCXJlcyA9IC1FUEVSTTsJLyogc3RheSBvZmYgb3RoZXIncyBzZXR0aW5ncyEgKi8KKwkJCWdvdG8gc3RybW9mZl91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCQlpZiAoenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKQorCQkJZ290byBzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOworCisJCXNwaW5fbG9ja19pcnFzYXZlKCZ6ci0+c3BpbmxvY2ssIGZsYWdzKTsKKwkJLyogdW5sb2FkIGNhcHR1cmUgKi8KKwkJaWYgKHpyLT52NGxfbWVtZ3JhYl9hY3RpdmUpIHsKKworCQkJenIzNjA1N19zZXRfbWVtZ3JhYih6ciwgMCk7CisJCX0KKworCQlmb3IgKGkgPSAwOyBpIDwgZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykKKwkJCXpyLT52NGxfYnVmZmVycy5idWZmZXJbaV0uc3RhdGUgPSBCVVpfU1RBVEVfVVNFUjsKKwkJZmgtPmJ1ZmZlcnMgPSB6ci0+djRsX2J1ZmZlcnM7CisKKwkJenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9IGZoLT5idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7CisKKwkJenItPnY0bF9ncmFiX3NlcSA9IDA7CisJCXpyLT52NGxfcGVuZF9oZWFkID0genItPnY0bF9wZW5kX3RhaWwgPSAwOworCQl6ci0+djRsX3N5bmNfdGFpbCA9IDA7CisKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CisKKwkJYnJlYWs7CisKKwljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19SRUM6CisJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUExBWToKKwkJaWYgKGZoLT5idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFICYmCisJCSAgICB6ci0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKKwkJCXJlcyA9IC1FUEVSTTsJLyogc3RheSBvZmYgb3RoZXIncyBzZXR0aW5ncyEgKi8KKwkJCWdvdG8gc3RybW9mZl91bmxvY2tfYW5kX3JldHVybjsKKwkJfQorCQlpZiAoenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9PSBaT1JBTl9GUkVFKQorCQkJZ290byBzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOworCisJCXJlcyA9IGpwZ19xYnVmKGZoLCAtMSwKKwkJCSAgICAgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDKSA/CisJCQkgICAgIEJVWl9NT0RFX01PVElPTl9DT01QUkVTUyA6CisJCQkgICAgIEJVWl9NT0RFX01PVElPTl9ERUNPTVBSRVNTKTsKKwkJaWYgKHJlcykKKwkJCWdvdG8gc3RybW9mZl91bmxvY2tfYW5kX3JldHVybjsKKwkJYnJlYWs7CisJZGVmYXVsdDoKKwkJZHByaW50aygxLCBLRVJOX0VSUgorCQkJIiVzOiBWSURJT0NfU1RSRUFNT0ZGIC0gaW52YWxpZCBtYXAgbW9kZSAlZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBmaC0+bWFwX21vZGUpOworCQlyZXMgPSAtRUlOVkFMOworCQlicmVhazsKKwl9CitzdHJtb2ZmX3VubG9ja19hbmRfcmV0dXJuOgorCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCB6b3Jhbl9xdWVyeWN0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCXN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqY3RybCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCisJLyogd2Ugb25seSBzdXBwb3J0IGh1ZS9zYXR1cmF0aW9uL2NvbnRyYXN0L2JyaWdodG5lc3MgKi8KKwlpZiAoY3RybC0+aWQgPCBWNEwyX0NJRF9CUklHSFRORVNTIHx8CisJICAgIGN0cmwtPmlkID4gVjRMMl9DSURfSFVFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWRlY29kZXJfY2FsbCh6ciwgY29yZSwgcXVlcnljdHJsLCBjdHJsKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpvcmFuX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCisJLyogd2Ugb25seSBzdXBwb3J0IGh1ZS9zYXR1cmF0aW9uL2NvbnRyYXN0L2JyaWdodG5lc3MgKi8KKwlpZiAoY3RybC0+aWQgPCBWNEwyX0NJRF9CUklHSFRORVNTIHx8CisJICAgIGN0cmwtPmlkID4gVjRMMl9DSURfSFVFKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlkZWNvZGVyX2NhbGwoenIsIGNvcmUsIGdfY3RybCwgY3RybCk7CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6b3Jhbl9zX2N0cmwoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHN0cnVjdCB2NGwyX2NvbnRyb2wgKmN0cmwpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKworCS8qIHdlIG9ubHkgc3VwcG9ydCBodWUvc2F0dXJhdGlvbi9jb250cmFzdC9icmlnaHRuZXNzICovCisJaWYgKGN0cmwtPmlkIDwgVjRMMl9DSURfQlJJR0hUTkVTUyB8fAorCSAgICBjdHJsLT5pZCA+IFY0TDJfQ0lEX0hVRSkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJZGVjb2Rlcl9jYWxsKHpyLCBjb3JlLCBzX2N0cmwsIGN0cmwpOworCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fZ19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHY0bDJfc3RkX2lkICpzdGQpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkqc3RkID0genItPm5vcm07CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fc19zdGQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHY0bDJfc3RkX2lkICpzdGQpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgcmVzID0gMDsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXMgPSB6b3Jhbl9zZXRfbm9ybSh6ciwgKnN0ZCk7CisJaWYgKHJlcykKKwkJZ290byBzc3RkX3VubG9ja19hbmRfcmV0dXJuOworCisJcmVzID0gd2FpdF9ncmFiX3BlbmRpbmcoenIpOworc3N0ZF91bmxvY2tfYW5kX3JldHVybjoKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHpvcmFuX2VudW1faW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJIHN0cnVjdCB2NGwyX2lucHV0ICppbnApCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKworCWlmIChpbnAtPmluZGV4IDwgMCB8fCBpbnAtPmluZGV4ID49IHpyLT5jYXJkLmlucHV0cykKKwkJcmV0dXJuIC1FSU5WQUw7CisJZWxzZSB7CisJCWludCBpZCA9IGlucC0+aW5kZXg7CisJCW1lbXNldChpbnAsIDAsIHNpemVvZigqaW5wKSk7CisJCWlucC0+aW5kZXggPSBpZDsKKwl9CisKKwlzdHJuY3B5KGlucC0+bmFtZSwgenItPmNhcmQuaW5wdXRbaW5wLT5pbmRleF0ubmFtZSwKKwkJc2l6ZW9mKGlucC0+bmFtZSkgLSAxKTsKKwlpbnAtPnR5cGUgPSBWNEwyX0lOUFVUX1RZUEVfQ0FNRVJBOworCWlucC0+c3RkID0gVjRMMl9TVERfQUxMOworCisJLyogR2V0IHN0YXR1cyBvZiB2aWRlbyBkZWNvZGVyICovCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCWRlY29kZXJfY2FsbCh6ciwgdmlkZW8sIGdfaW5wdXRfc3RhdHVzLCAmaW5wLT5zdGF0dXMpOworCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpvcmFuX2dfaW5wdXQoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHVuc2lnbmVkIGludCAqaW5wdXQpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwkqaW5wdXQgPSB6ci0+aW5wdXQ7CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6b3Jhbl9zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCB1bnNpZ25lZCBpbnQgaW5wdXQpCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgcmVzOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCXJlcyA9IHpvcmFuX3NldF9pbnB1dCh6ciwgaW5wdXQpOworCWlmIChyZXMpCisJCWdvdG8gc2lucHV0X3VubG9ja19hbmRfcmV0dXJuOworCisJLyogTWFrZSBzdXJlIHRoZSBjaGFuZ2VzIGNvbWUgaW50byBlZmZlY3QgKi8KKwlyZXMgPSB3YWl0X2dyYWJfcGVuZGluZyh6cik7CitzaW5wdXRfdW5sb2NrX2FuZF9yZXR1cm46CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCB6b3Jhbl9lbnVtX291dHB1dChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqX19maCwKKwkJCQkgIHN0cnVjdCB2NGwyX291dHB1dCAqb3V0cCkKK3sKKwlpZiAob3V0cC0+aW5kZXggIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwltZW1zZXQob3V0cCwgMCwgc2l6ZW9mKCpvdXRwKSk7CisJb3V0cC0+aW5kZXggPSAwOworCW91dHAtPnR5cGUgPSBWNEwyX09VVFBVVF9UWVBFX0FOQUxPR1ZHQU9WRVJMQVk7CisJc3RybmNweShvdXRwLT5uYW1lLCAiQXV0b2RldGVjdCIsIHNpemVvZihvdXRwLT5uYW1lKS0xKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpvcmFuX2dfb3V0cHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCB1bnNpZ25lZCBpbnQgKm91dHB1dCkKK3sKKwkqb3V0cHV0ID0gMDsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHpvcmFuX3Nfb3V0cHV0KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCB1bnNpZ25lZCBpbnQgb3V0cHV0KQoreworCWlmIChvdXRwdXQgIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXR1cm4gMDsKK30KKworLyogY3JvcHBpbmcgKHN1Yi1mcmFtZSBjYXB0dXJlKSAqLworc3RhdGljIGludCB6b3Jhbl9jcm9wY2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQkJCQlzdHJ1Y3QgdjRsMl9jcm9wY2FwICpjcm9wY2FwKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IHR5cGUgPSBjcm9wY2FwLT50eXBlLCByZXMgPSAwOworCisJbWVtc2V0KGNyb3BjYXAsIDAsIHNpemVvZigqY3JvcGNhcCkpOworCWNyb3BjYXAtPnR5cGUgPSB0eXBlOworCisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJaWYgKGNyb3BjYXAtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19PVVRQVVQgJiYKKwkgICAgKGNyb3BjYXAtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFIHx8CisJICAgICBmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXKSkgeworCQlkcHJpbnRrKDEsIEtFUk5fRVJSCisJCQkiJXM6IFZJRElPQ19DUk9QQ0FQIC0gc3ViY2FwdHVyZSBvbmx5IHN1cHBvcnRlZCBmb3IgY29tcHJlc3NlZCBjYXB0dXJlXG4iLAorCQkJWlJfREVWTkFNRSh6cikpOworCQlyZXMgPSAtRUlOVkFMOworCQlnb3RvIGNyb3BjYXBfdW5sb2NrX2FuZF9yZXR1cm47CisJfQorCisJY3JvcGNhcC0+Ym91bmRzLnRvcCA9IGNyb3BjYXAtPmJvdW5kcy5sZWZ0ID0gMDsKKwljcm9wY2FwLT5ib3VuZHMud2lkdGggPSBCVVpfTUFYX1dJRFRIOworCWNyb3BjYXAtPmJvdW5kcy5oZWlnaHQgPSBCVVpfTUFYX0hFSUdIVDsKKwljcm9wY2FwLT5kZWZyZWN0LnRvcCA9IGNyb3BjYXAtPmRlZnJlY3QubGVmdCA9IDA7CisJY3JvcGNhcC0+ZGVmcmVjdC53aWR0aCA9IEJVWl9NSU5fV0lEVEg7CisJY3JvcGNhcC0+ZGVmcmVjdC5oZWlnaHQgPSBCVVpfTUlOX0hFSUdIVDsKK2Nyb3BjYXBfdW5sb2NrX2FuZF9yZXR1cm46CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisJcmV0dXJuIHJlczsKK30KKworc3RhdGljIGludCB6b3Jhbl9nX2Nyb3Aoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsIHN0cnVjdCB2NGwyX2Nyb3AgKmNyb3ApCit7CisJc3RydWN0IHpvcmFuX2ZoICpmaCA9IF9fZmg7CisJc3RydWN0IHpvcmFuICp6ciA9IGZoLT56cjsKKwlpbnQgdHlwZSA9IGNyb3AtPnR5cGUsIHJlcyA9IDA7CisKKwltZW1zZXQoY3JvcCwgMCwgc2l6ZW9mKCpjcm9wKSk7CisJY3JvcC0+dHlwZSA9IHR5cGU7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlpZiAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCAmJgorCSAgICAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKKwkgICAgIGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcpKSB7CisJCWRwcmludGsoMSwKKwkJCUtFUk5fRVJSCisJCQkiJXM6IFZJRElPQ19HX0NST1AgLSBzdWJjYXB0dXJlIG9ubHkgc3VwcG9ydGVkIGZvciBjb21wcmVzc2VkIGNhcHR1cmVcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJlcyA9IC1FSU5WQUw7CisJCWdvdG8gZ2Nyb3BfdW5sb2NrX2FuZF9yZXR1cm47CisJfQorCisJY3JvcC0+Yy50b3AgPSBmaC0+anBnX3NldHRpbmdzLmltZ195OworCWNyb3AtPmMubGVmdCA9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX3g7CisJY3JvcC0+Yy53aWR0aCA9IGZoLT5qcGdfc2V0dGluZ3MuaW1nX3dpZHRoOworCWNyb3AtPmMuaGVpZ2h0ID0gZmgtPmpwZ19zZXR0aW5ncy5pbWdfaGVpZ2h0OworCitnY3JvcF91bmxvY2tfYW5kX3JldHVybjoKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXJldHVybiByZXM7Cit9CisKK3N0YXRpYyBpbnQgem9yYW5fc19jcm9wKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLCBzdHJ1Y3QgdjRsMl9jcm9wICpjcm9wKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJaW50IHJlcyA9IDA7CisJc3RydWN0IHpvcmFuX2pwZ19zZXR0aW5ncyBzZXR0aW5nczsKKworCXNldHRpbmdzID0gZmgtPmpwZ19zZXR0aW5nczsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCWlmIChmaC0+YnVmZmVycy5hbGxvY2F0ZWQpIHsKKwkJZHByaW50aygxLCBLRVJOX0VSUgorCQkJIiVzOiBWSURJT0NfU19DUk9QIC0gY2Fubm90IGNoYW5nZSBzZXR0aW5ncyB3aGlsZSBhY3RpdmVcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSk7CisJCXJlcyA9IC1FQlVTWTsKKwkJZ290byBzY3JvcF91bmxvY2tfYW5kX3JldHVybjsKKwl9CisKKwlpZiAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX09VVFBVVCAmJgorCSAgICAoY3JvcC0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUgfHwKKwkgICAgIGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9SQVcpKSB7CisJCWRwcmludGsoMSwgS0VSTl9FUlIKKwkJCSIlczogVklESU9DX0dfQ1JPUCAtIHN1YmNhcHR1cmUgb25seSBzdXBwb3J0ZWQgZm9yIGNvbXByZXNzZWQgY2FwdHVyZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmVzID0gLUVJTlZBTDsKKwkJZ290byBzY3JvcF91bmxvY2tfYW5kX3JldHVybjsKKwl9CisKKwkvKiBtb3ZlIGludG8gYSBmb3JtIHRoYXQgd2UgdW5kZXJzdGFuZCAqLworCXNldHRpbmdzLmltZ194ID0gY3JvcC0+Yy5sZWZ0OworCXNldHRpbmdzLmltZ195ID0gY3JvcC0+Yy50b3A7CisJc2V0dGluZ3MuaW1nX3dpZHRoID0gY3JvcC0+Yy53aWR0aDsKKwlzZXR0aW5ncy5pbWdfaGVpZ2h0ID0gY3JvcC0+Yy5oZWlnaHQ7CisKKwkvKiBjaGVjayB2YWxpZGl0eSAqLworCXJlcyA9IHpvcmFuX2NoZWNrX2pwZ19zZXR0aW5ncyh6ciwgJnNldHRpbmdzLCAwKTsKKwlpZiAocmVzKQorCQlnb3RvIHNjcm9wX3VubG9ja19hbmRfcmV0dXJuOworCisJLyogYWNjZXB0ICovCisJZmgtPmpwZ19zZXR0aW5ncyA9IHNldHRpbmdzOworCitzY3JvcF91bmxvY2tfYW5kX3JldHVybjoKKwltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKwlyZXR1cm4gcmVzOworfQorCitzdGF0aWMgaW50IHpvcmFuX2dfanBlZ2NvbXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKl9fZmgsCisJCQkJCXN0cnVjdCB2NGwyX2pwZWdjb21wcmVzc2lvbiAqcGFyYW1zKQoreworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBfX2ZoOworCXN0cnVjdCB6b3JhbiAqenIgPSBmaC0+enI7CisJbWVtc2V0KHBhcmFtcywgMCwgc2l6ZW9mKCpwYXJhbXMpKTsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCXBhcmFtcy0+cXVhbGl0eSA9IGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAucXVhbGl0eTsKKwlwYXJhbXMtPkFQUG4gPSBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkFQUG47CisJbWVtY3B5KHBhcmFtcy0+QVBQX2RhdGEsCisJICAgICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQX2RhdGEsCisJICAgICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQVBQX2xlbik7CisJcGFyYW1zLT5BUFBfbGVuID0gZmgtPmpwZ19zZXR0aW5ncy5qcGdfY29tcC5BUFBfbGVuOworCW1lbWNweShwYXJhbXMtPkNPTV9kYXRhLAorCSAgICAgICBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkNPTV9kYXRhLAorCSAgICAgICBmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wLkNPTV9sZW4pOworCXBhcmFtcy0+Q09NX2xlbiA9IGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuQ09NX2xlbjsKKwlwYXJhbXMtPmpwZWdfbWFya2VycyA9CisJICAgIGZoLT5qcGdfc2V0dGluZ3MuanBnX2NvbXAuanBlZ19tYXJrZXJzOworCisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB6b3Jhbl9zX2pwZWdjb21wKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpfX2ZoLAorCQkJCQlzdHJ1Y3QgdjRsMl9qcGVnY29tcHJlc3Npb24gKnBhcmFtcykKK3sKKwlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gX19maDsKKwlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOworCWludCByZXMgPSAwOworCXN0cnVjdCB6b3Jhbl9qcGdfc2V0dGluZ3Mgc2V0dGluZ3M7CisKKwlzZXR0aW5ncyA9IGZoLT5qcGdfc2V0dGluZ3M7CisKKwlzZXR0aW5ncy5qcGdfY29tcCA9ICpwYXJhbXM7CisKKwltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKKwlpZiAoZmgtPmJ1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKKwkJZHByaW50aygxLCBLRVJOX1dBUk5JTkcKKwkJCSIlczogVklESU9DX1NfSlBFR0NPTVAgY2FsbGVkIHdoaWxlIGluIHBsYXliYWNrL2NhcHR1cmUgbW9kZVxuIiwKKwkJCVpSX0RFVk5BTUUoenIpKTsKKwkJcmVzID0gLUVCVVNZOworCQlnb3RvIHNqcGVnY191bmxvY2tfYW5kX3JldHVybjsKKwl9CisKKwlyZXMgPSB6b3Jhbl9jaGVja19qcGdfc2V0dGluZ3MoenIsICZzZXR0aW5ncywgMCk7CisJaWYgKHJlcykKKwkJZ290byBzanBlZ2NfdW5sb2NrX2FuZF9yZXR1cm47CisJaWYgKCFmaC0+YnVmZmVycy5hbGxvY2F0ZWQpCisJCWZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplID0KKwkJCXpvcmFuX3Y0bDJfY2FsY19idWZzaXplKCZmaC0+anBnX3NldHRpbmdzKTsKKwlmaC0+anBnX3NldHRpbmdzLmpwZ19jb21wID0gKnBhcmFtcyA9IHNldHRpbmdzLmpwZ19jb21wOworc2pwZWdjX3VubG9ja19hbmRfcmV0dXJuOgorCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOworCisJcmV0dXJuIHJlczsKIH0KIAogc3RhdGljIHVuc2lnbmVkIGludApAQCAtNDE5MSwxMSArMzA2MiwxMSBAQAogCQkJS0VSTl9ERUJVRwogCQkJIiVzOiAlcygpIHJhdyAtIGFjdGl2ZT0lYywgc3luY190YWlsPSVsdS8lYywgcGVuZF90YWlsPSVsdSwgcGVuZF9oZWFkPSVsdVxuIiwKIAkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywKLQkJCSJGQUwiW2ZoLT52NGxfYnVmZmVycy5hY3RpdmVdLCB6ci0+djRsX3N5bmNfdGFpbCwKKwkJCSJGQUwiW2ZoLT5idWZmZXJzLmFjdGl2ZV0sIHpyLT52NGxfc3luY190YWlsLAogCQkJIlVQTUQiW3pyLT52NGxfYnVmZmVycy5idWZmZXJbZnJhbWVdLnN0YXRlXSwKIAkJCXpyLT52NGxfcGVuZF90YWlsLCB6ci0+djRsX3BlbmRfaGVhZCk7CiAJCS8qIFByb2Nlc3MgaXMgdGhlIG9uZSBjYXB0dXJpbmc/ICovCi0JCWlmIChmaC0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUgJiYKKwkJaWYgKGZoLT5idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFICYmCiAJCSAgICAvKiBCdWZmZXIgcmVhZHkgdG8gRFFCVUY/ICovCiAJCSAgICB6ci0+djRsX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZSA9PSBCVVpfU1RBVEVfRE9ORSkKIAkJCXJlcyA9IFBPTExJTiB8IFBPTExSRE5PUk07CkBAIC00MjEzLDEwICszMDg0LDEwIEBACiAJCQlLRVJOX0RFQlVHCiAJCQkiJXM6ICVzKCkganBnIC0gYWN0aXZlPSVjLCBxdWVfdGFpbD0lbHUvJWMsIHF1ZV9oZWFkPSVsdSwgZG1hPSVsdS8lbHVcbiIsCiAJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sCi0JCQkiRkFMIltmaC0+anBnX2J1ZmZlcnMuYWN0aXZlXSwgenItPmpwZ19xdWVfdGFpbCwKKwkJCSJGQUwiW2ZoLT5idWZmZXJzLmFjdGl2ZV0sIHpyLT5qcGdfcXVlX3RhaWwsCiAJCQkiVVBNRCJbenItPmpwZ19idWZmZXJzLmJ1ZmZlcltmcmFtZV0uc3RhdGVdLAogCQkJenItPmpwZ19xdWVfaGVhZCwgenItPmpwZ19kbWFfdGFpbCwgenItPmpwZ19kbWFfaGVhZCk7Ci0JCWlmIChmaC0+anBnX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUgJiYKKwkJaWYgKGZoLT5idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFICYmCiAJCSAgICB6ci0+anBnX2J1ZmZlcnMuYnVmZmVyW2ZyYW1lXS5zdGF0ZSA9PSBCVVpfU1RBVEVfRE9ORSkgewogCQkJaWYgKGZoLT5tYXBfbW9kZSA9PSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDKQogCQkJCXJlcyA9IFBPTExJTiB8IFBPTExSRE5PUk07CkBAIC00MjMwLDggKzMxMDEsOCBAQAogCWRlZmF1bHQ6CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IHpvcmFuX3BvbGwoKSAtIGludGVybmFsIGVycm9yLCB1bmtub3duIG1hcF9tb2RlPSVkXG4iLAotCQkJWlJfREVWTkFNRSh6ciksIGZoLT5tYXBfbW9kZSk7CisJCQkiJXM6ICVzIC0gaW50ZXJuYWwgZXJyb3IsIHVua25vd24gbWFwX21vZGU9JWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIGZoLT5tYXBfbW9kZSk7CiAJCXJlcyA9IFBPTExOVkFMOwogCX0KIApAQCAtNDI2NSw5OCArMzEzNiw1MyBAQAogem9yYW5fdm1fY2xvc2UgKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKQogewogCXN0cnVjdCB6b3Jhbl9tYXBwaW5nICptYXAgPSB2bWEtPnZtX3ByaXZhdGVfZGF0YTsKLQlzdHJ1Y3QgZmlsZSAqZmlsZSA9IG1hcC0+ZmlsZTsKLQlzdHJ1Y3Qgem9yYW5fZmggKmZoID0gZmlsZS0+cHJpdmF0ZV9kYXRhOworCXN0cnVjdCB6b3Jhbl9maCAqZmggPSBtYXAtPmZpbGUtPnByaXZhdGVfZGF0YTsKIAlzdHJ1Y3Qgem9yYW4gKnpyID0gZmgtPnpyOwogCWludCBpOwogCi0JbWFwLT5jb3VudC0tOwotCWlmIChtYXAtPmNvdW50ID09IDApIHsKLQkJc3dpdGNoIChmaC0+bWFwX21vZGUpIHsKLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOgotCQljYXNlIFpPUkFOX01BUF9NT0RFX0pQR19QTEFZOgorCWlmICgtLW1hcC0+Y291bnQgPiAwKQorCQlyZXR1cm47CiAKLQkJCWRwcmludGsoMywgS0VSTl9JTkZPICIlczogbXVubWFwKE1KUEVHKVxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7CisJZHByaW50aygzLCBLRVJOX0lORk8gIiVzOiAlcyAtIG11bm1hcCglcylcbiIsIFpSX0RFVk5BTUUoenIpLAorCQlfX2Z1bmNfXywgbW9kZV9uYW1lKGZoLT5tYXBfbW9kZSkpOwogCi0JCQlmb3IgKGkgPSAwOyBpIDwgZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKLQkJCQlpZiAoZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5tYXAgPT0gbWFwKSB7Ci0JCQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0ubWFwID0KLQkJCQkJICAgIE5VTEw7Ci0JCQkJfQotCQkJfQotCQkJa2ZyZWUobWFwKTsKLQotCQkJZm9yIChpID0gMDsgaSA8IGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVyczsgaSsrKQotCQkJCWlmIChmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLm1hcCkKLQkJCQkJYnJlYWs7Ci0JCQlpZiAoaSA9PSBmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMpIHsKLQkJCQltdXRleF9sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7Ci0KLQkJCQlpZiAoZmgtPmpwZ19idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7Ci0JCQkJCWpwZ19xYnVmKGZpbGUsIC0xLCB6ci0+Y29kZWNfbW9kZSk7Ci0JCQkJCXpyLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwotCQkJCQl6ci0+anBnX2J1ZmZlcnMuYWN0aXZlID0KLQkJCQkJICAgIGZoLT5qcGdfYnVmZmVycy5hY3RpdmUgPQotCQkJCQkgICAgWk9SQU5fRlJFRTsKLQkJCQl9Ci0JCQkJLy9qcGdfZmJ1ZmZlcl9mcmVlKGZpbGUpOwotCQkJCWZoLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOwotCQkJCWZoLT5qcGdfYnVmZmVycy5yZWFkeV90b19iZV9mcmVlZCA9IDE7Ci0KLQkJCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQkJCX0KLQotCQkJYnJlYWs7Ci0KLQkJY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6Ci0KLQkJCWRwcmludGsoMywgS0VSTl9JTkZPICIlczogbXVubWFwKFY0TClcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzOyBpKyspIHsKLQkJCQlpZiAoZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5tYXAgPT0gbWFwKSB7Ci0JCQkJCS8qIHVucXVldWUvdW5tYXAgKi8KLQkJCQkJZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcltpXS5tYXAgPQotCQkJCQkgICAgTlVMTDsKLQkJCQl9Ci0JCQl9Ci0JCQlrZnJlZShtYXApOwotCi0JCQlmb3IgKGkgPSAwOyBpIDwgZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzOyBpKyspCi0JCQkJaWYgKGZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0ubWFwKQotCQkJCQlicmVhazsKLQkJCWlmIChpID09IGZoLT52NGxfYnVmZmVycy5udW1fYnVmZmVycykgewotCQkJCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQkJCWlmIChmaC0+djRsX2J1ZmZlcnMuYWN0aXZlICE9IFpPUkFOX0ZSRUUpIHsKLQkJCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKLQotCQkJCQlzcGluX2xvY2tfaXJxc2F2ZSgmenItPnNwaW5sb2NrLCBmbGFncyk7Ci0JCQkJCXpyMzYwNTdfc2V0X21lbWdyYWIoenIsIDApOwotCQkJCQl6ci0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKLQkJCQkJenItPnY0bF9idWZmZXJzLmFjdGl2ZSA9Ci0JCQkJCSAgICBmaC0+djRsX2J1ZmZlcnMuYWN0aXZlID0KLQkJCQkJICAgIFpPUkFOX0ZSRUU7Ci0JCQkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOwotCQkJCX0KLQkJCQkvL3Y0bF9mYnVmZmVyX2ZyZWUoZmlsZSk7Ci0JCQkJZmgtPnY0bF9idWZmZXJzLmFsbG9jYXRlZCA9IDA7Ci0JCQkJZmgtPnY0bF9idWZmZXJzLnJlYWR5X3RvX2JlX2ZyZWVkID0gMTsKLQotCQkJCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCQkJfQotCi0JCQlicmVhazsKLQotCQlkZWZhdWx0OgotCQkJcHJpbnRrKEtFUk5fRVJSCi0JCQkgICAgICAgIiVzOiBtdW5tYXAoKSAtIGludGVybmFsIGVycm9yIC0gdW5rbm93biBtYXAgbW9kZSAlZFxuIiwKLQkJCSAgICAgICBaUl9ERVZOQU1FKHpyKSwgZmgtPm1hcF9tb2RlKTsKLQkJCWJyZWFrOwotCi0JCX0KKwlmb3IgKGkgPSAwOyBpIDwgZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykgeworCQlpZiAoZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLm1hcCA9PSBtYXApCisJCQlmaC0+YnVmZmVycy5idWZmZXJbaV0ubWFwID0gTlVMTDsKIAl9CisJa2ZyZWUobWFwKTsKKworCS8qIEFueSBidWZmZXJzIHN0aWxsIG1hcHBlZD8gKi8KKwlmb3IgKGkgPSAwOyBpIDwgZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnM7IGkrKykKKwkJaWYgKGZoLT5idWZmZXJzLmJ1ZmZlcltpXS5tYXApCisJCQlyZXR1cm47CisKKwlkcHJpbnRrKDMsIEtFUk5fSU5GTyAiJXM6ICVzIC0gZnJlZSAlcyBidWZmZXJzXG4iLCBaUl9ERVZOQU1FKHpyKSwKKwkJX19mdW5jX18sIG1vZGVfbmFtZShmaC0+bWFwX21vZGUpKTsKKworCW11dGV4X2xvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKKworCWlmIChmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXKSB7CisJCWlmIChmaC0+YnVmZmVycy5hY3RpdmUgIT0gWk9SQU5fRlJFRSkgeworCQkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQkJc3Bpbl9sb2NrX2lycXNhdmUoJnpyLT5zcGlubG9jaywgZmxhZ3MpOworCQkJenIzNjA1N19zZXRfbWVtZ3JhYih6ciwgMCk7CisJCQl6ci0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkID0gMDsKKwkJCXpyLT52NGxfYnVmZmVycy5hY3RpdmUgPSBmaC0+YnVmZmVycy5hY3RpdmUgPSBaT1JBTl9GUkVFOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmenItPnNwaW5sb2NrLCBmbGFncyk7CisJCX0KKwkJdjRsX2ZidWZmZXJfZnJlZShmaCk7CisJfSBlbHNlIHsKKwkJaWYgKGZoLT5idWZmZXJzLmFjdGl2ZSAhPSBaT1JBTl9GUkVFKSB7CisJCQlqcGdfcWJ1ZihmaCwgLTEsIHpyLT5jb2RlY19tb2RlKTsKKwkJCXpyLT5qcGdfYnVmZmVycy5hbGxvY2F0ZWQgPSAwOworCQkJenItPmpwZ19idWZmZXJzLmFjdGl2ZSA9IGZoLT5idWZmZXJzLmFjdGl2ZSA9IFpPUkFOX0ZSRUU7CisJCX0KKwkJanBnX2ZidWZmZXJfZnJlZShmaCk7CisJfQorCisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3Qgem9yYW5fdm1fb3BzID0gewpAQCAtNDM3OSw5MCArMzIwNSwxMDYgQEAKIAlpbnQgcmVzID0gMDsKIAogCWRwcmludGsoMywKLQkJS0VSTl9JTkZPICIlczogbW1hcCglcykgb2YgMHglMDhseC0weCUwOGx4IChzaXplPSVsdSlcbiIsCi0JCVpSX0RFVk5BTUUoenIpLAotCQlmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXID8gIlY0TCIgOiAiTUpQRUciLAotCQl2bWEtPnZtX3N0YXJ0LCB2bWEtPnZtX2VuZCwgc2l6ZSk7CisJCUtFUk5fSU5GTyAiJXM6ICVzKCVzKSBvZiAweCUwOGx4LTB4JTA4bHggKHNpemU9JWx1KVxuIiwKKwkJWlJfREVWTkFNRSh6ciksIF9fZnVuY19fLAorCQltb2RlX25hbWUoZmgtPm1hcF9tb2RlKSwgdm1hLT52bV9zdGFydCwgdm1hLT52bV9lbmQsIHNpemUpOwogCiAJaWYgKCEodm1hLT52bV9mbGFncyAmIFZNX1NIQVJFRCkgfHwgISh2bWEtPnZtX2ZsYWdzICYgVk1fUkVBRCkgfHwKIAkgICAgISh2bWEtPnZtX2ZsYWdzICYgVk1fV1JJVEUpKSB7CiAJCWRwcmludGsoMSwKIAkJCUtFUk5fRVJSCi0JCQkiJXM6IG1tYXAoKSAtIG5vIE1BUF9TSEFSRUQvUFJPVF97UkVBRCxXUklURX0gZ2l2ZW5cbiIsCi0JCQlaUl9ERVZOQU1FKHpyKSk7CisJCQkiJXM6ICVzIC0gbm8gTUFQX1NIQVJFRC9QUk9UX3tSRUFELFdSSVRFfSBnaXZlblxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIAotCXN3aXRjaCAoZmgtPm1hcF9tb2RlKSB7CisJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwogCi0JY2FzZSBaT1JBTl9NQVBfTU9ERV9KUEdfUkVDOgotCWNhc2UgWk9SQU5fTUFQX01PREVfSlBHX1BMQVk6CisJaWYgKCFmaC0+YnVmZmVycy5hbGxvY2F0ZWQpIHsKKwkJZHByaW50aygxLAorCQkJS0VSTl9FUlIKKwkJCSIlczogJXMoJXMpIC0gYnVmZmVycyBub3QgeWV0IGFsbG9jYXRlZFxuIiwKKwkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXywgbW9kZV9uYW1lKGZoLT5tYXBfbW9kZSkpOworCQlyZXMgPSAtRU5PTUVNOworCQlnb3RvIG1tYXBfdW5sb2NrX2FuZF9yZXR1cm47CisJfQogCi0JCS8qIGxvY2sgKi8KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOworCWZpcnN0ID0gb2Zmc2V0IC8gZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemU7CisJbGFzdCA9IGZpcnN0IC0gMSArIHNpemUgLyBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZTsKKwlpZiAob2Zmc2V0ICUgZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemUgIT0gMCB8fAorCSAgICBzaXplICUgZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemUgIT0gMCB8fCBmaXJzdCA8IDAgfHwKKwkgICAgbGFzdCA8IDAgfHwgZmlyc3QgPj0gZmgtPmJ1ZmZlcnMubnVtX2J1ZmZlcnMgfHwKKwkgICAgbGFzdCA+PSBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSkgeworCQlkcHJpbnRrKDEsCisJCQlLRVJOX0VSUgorCQkJIiVzOiAlcyglcykgLSBvZmZzZXQ9JWx1IG9yIHNpemU9JWx1IGludmFsaWQgZm9yIGJ1ZnNpemU9JWQgYW5kIG51bWJ1ZnM9JWRcbiIsCisJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIG1vZGVfbmFtZShmaC0+bWFwX21vZGUpLCBvZmZzZXQsIHNpemUsCisJCQlmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSwKKwkJCWZoLT5idWZmZXJzLm51bV9idWZmZXJzKTsKKwkJcmVzID0gLUVJTlZBTDsKKwkJZ290byBtbWFwX3VubG9ja19hbmRfcmV0dXJuOworCX0KIAotCQkvKiBNYXAgdGhlIE1KUEVHIGJ1ZmZlcnMgKi8KLQkJaWYgKCFmaC0+anBnX2J1ZmZlcnMuYWxsb2NhdGVkKSB7CisJLyogQ2hlY2sgaWYgYW55IGJ1ZmZlcnMgYXJlIGFscmVhZHkgbWFwcGVkICovCisJZm9yIChpID0gZmlyc3Q7IGkgPD0gbGFzdDsgaSsrKSB7CisJCWlmIChmaC0+YnVmZmVycy5idWZmZXJbaV0ubWFwKSB7CiAJCQlkcHJpbnRrKDEsCiAJCQkJS0VSTl9FUlIKLQkJCQkiJXM6IHpvcmFuX21tYXAoTUpQRUcpIC0gYnVmZmVycyBub3QgeWV0IGFsbG9jYXRlZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQlyZXMgPSAtRU5PTUVNOwotCQkJZ290byBqcGdfbW1hcF91bmxvY2tfYW5kX3JldHVybjsKKwkJCQkiJXM6ICVzKCVzKSAtIGJ1ZmZlciAlZCBhbHJlYWR5IG1hcHBlZFxuIiwKKwkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18sIG1vZGVfbmFtZShmaC0+bWFwX21vZGUpLCBpKTsKKwkJCXJlcyA9IC1FQlVTWTsKKwkJCWdvdG8gbW1hcF91bmxvY2tfYW5kX3JldHVybjsKIAkJfQorCX0KIAotCQlmaXJzdCA9IG9mZnNldCAvIGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZTsKLQkJbGFzdCA9IGZpcnN0IC0gMSArIHNpemUgLyBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCWlmIChvZmZzZXQgJSBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgIT0gMCB8fAotCQkgICAgc2l6ZSAlIGZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSAhPSAwIHx8IGZpcnN0IDwgMCB8fAotCQkgICAgbGFzdCA8IDAgfHwgZmlyc3QgPj0gZmgtPmpwZ19idWZmZXJzLm51bV9idWZmZXJzIHx8Ci0JCSAgICBsYXN0ID49IGZoLT5qcGdfYnVmZmVycy5udW1fYnVmZmVycykgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBtbWFwKE1KUEVHKSAtIG9mZnNldD0lbHUgb3Igc2l6ZT0lbHUgaW52YWxpZCBmb3IgYnVmc2l6ZT0lZCBhbmQgbnVtYnVmcz0lZFxuIiwKLQkJCQlaUl9ERVZOQU1FKHpyKSwgb2Zmc2V0LCBzaXplLAotCQkJCWZoLT5qcGdfYnVmZmVycy5idWZmZXJfc2l6ZSwKLQkJCQlmaC0+anBnX2J1ZmZlcnMubnVtX2J1ZmZlcnMpOwotCQkJcmVzID0gLUVJTlZBTDsKLQkJCWdvdG8ganBnX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KKwkvKiBtYXAgdGhlc2UgYnVmZmVycyAqLworCW1hcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB6b3Jhbl9tYXBwaW5nKSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFtYXApIHsKKwkJcmVzID0gLUVOT01FTTsKKwkJZ290byBtbWFwX3VubG9ja19hbmRfcmV0dXJuOworCX0KKwltYXAtPmZpbGUgPSBmaWxlOworCW1hcC0+Y291bnQgPSAxOworCisJdm1hLT52bV9vcHMgPSAmem9yYW5fdm1fb3BzOworCXZtYS0+dm1fZmxhZ3MgfD0gVk1fRE9OVEVYUEFORDsKKwl2bWEtPnZtX3ByaXZhdGVfZGF0YSA9IG1hcDsKKworCWlmIChmaC0+bWFwX21vZGUgPT0gWk9SQU5fTUFQX01PREVfUkFXKSB7CiAJCWZvciAoaSA9IGZpcnN0OyBpIDw9IGxhc3Q7IGkrKykgewotCQkJaWYgKGZoLT5qcGdfYnVmZmVycy5idWZmZXJbaV0ubWFwKSB7CisJCQl0b2RvID0gc2l6ZTsKKwkJCWlmICh0b2RvID4gZmgtPmJ1ZmZlcnMuYnVmZmVyX3NpemUpCisJCQkJdG9kbyA9IGZoLT5idWZmZXJzLmJ1ZmZlcl9zaXplOworCQkJcGFnZSA9IGZoLT5idWZmZXJzLmJ1ZmZlcltpXS52NGwuZmJ1ZmZlcl9waHlzOworCQkJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBwYWdlID4+IFBBR0VfU0hJRlQsCisJCQkJCQkJdG9kbywgUEFHRV9TSEFSRUQpKSB7CiAJCQkJZHByaW50aygxLAogCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IG1tYXAoTUpQRUcpIC0gYnVmZmVyICVkIGFscmVhZHkgbWFwcGVkXG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSwgaSk7Ci0JCQkJcmVzID0gLUVCVVNZOwotCQkJCWdvdG8ganBnX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47CisJCQkJCSIlczogJXMoVjRMKSAtIHJlbWFwX3Bmbl9yYW5nZSBmYWlsZWRcbiIsCisJCQkJCVpSX0RFVk5BTUUoenIpLCBfX2Z1bmNfXyk7CisJCQkJcmVzID0gLUVBR0FJTjsKKwkJCQlnb3RvIG1tYXBfdW5sb2NrX2FuZF9yZXR1cm47CiAJCQl9CisJCQlzaXplIC09IHRvZG87CisJCQlzdGFydCArPSB0b2RvOworCQkJZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLm1hcCA9IG1hcDsKKwkJCWlmIChzaXplID09IDApCisJCQkJYnJlYWs7CiAJCX0KLQotCQkvKiBtYXAgdGhlc2UgYnVmZmVycyAodjRsX2J1ZmZlcnNbaV0pICovCi0JCW1hcCA9IGttYWxsb2Moc2l6ZW9mKHN0cnVjdCB6b3Jhbl9tYXBwaW5nKSwgR0ZQX0tFUk5FTCk7Ci0JCWlmICghbWFwKSB7Ci0JCQlyZXMgPSAtRU5PTUVNOwotCQkJZ290byBqcGdfbW1hcF91bmxvY2tfYW5kX3JldHVybjsKLQkJfQotCQltYXAtPmZpbGUgPSBmaWxlOwotCQltYXAtPmNvdW50ID0gMTsKLQotCQl2bWEtPnZtX29wcyA9ICZ6b3Jhbl92bV9vcHM7Ci0JCXZtYS0+dm1fZmxhZ3MgfD0gVk1fRE9OVEVYUEFORDsKLQkJdm1hLT52bV9wcml2YXRlX2RhdGEgPSBtYXA7Ci0KKwl9IGVsc2UgewogCQlmb3IgKGkgPSBmaXJzdDsgaSA8PSBsYXN0OyBpKyspIHsKIAkJCWZvciAoaiA9IDA7Ci0JCQkgICAgIGogPCBmaC0+anBnX2J1ZmZlcnMuYnVmZmVyX3NpemUgLyBQQUdFX1NJWkU7CisJCQkgICAgIGogPCBmaC0+YnVmZmVycy5idWZmZXJfc2l6ZSAvIFBBR0VfU0laRTsKIAkJCSAgICAgaisrKSB7CiAJCQkJZnJhZ2xlbiA9Ci0JCQkJICAgIChsZTMyX3RvX2NwdShmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLgorCQkJCSAgICAobGUzMl90b19jcHUoZmgtPmJ1ZmZlcnMuYnVmZmVyW2ldLmpwZy4KIAkJCQkgICAgIGZyYWdfdGFiWzIgKiBqICsgMV0pICYgfjEpIDw8IDE7CiAJCQkJdG9kbyA9IHNpemU7CiAJCQkJaWYgKHRvZG8gPiBmcmFnbGVuKQogCQkJCQl0b2RvID0gZnJhZ2xlbjsKIAkJCQlwb3MgPQotCQkJCSAgICBsZTMyX3RvX2NwdShmaC0+anBnX2J1ZmZlcnMuCi0JCQkJICAgIGJ1ZmZlcltpXS5mcmFnX3RhYlsyICogal0pOworCQkJCSAgICBsZTMyX3RvX2NwdShmaC0+YnVmZmVycy4KKwkJCQkgICAgYnVmZmVyW2ldLmpwZy5mcmFnX3RhYlsyICogal0pOwogCQkJCS8qIHNob3VsZCBqdXN0IGJlIHBvcyBvbiBpMzg2ICovCiAJCQkJcGFnZSA9IHZpcnRfdG9fcGh5cyhidXNfdG9fdmlydChwb3MpKQogCQkJCQkJCQk+PiBQQUdFX1NISUZUOwpAQCAtNDQ3MCwxMjMgKzMzMTIsODIgQEAKIAkJCQkJCQl0b2RvLCBQQUdFX1NIQVJFRCkpIHsKIAkJCQkJZHByaW50aygxLAogCQkJCQkJS0VSTl9FUlIKLQkJCQkJCSIlczogem9yYW5fbW1hcChWNEwpIC0gcmVtYXBfcGZuX3JhbmdlIGZhaWxlZFxuIiwKLQkJCQkJCVpSX0RFVk5BTUUoenIpKTsKKwkJCQkJCSIlczogJXMoVjRMKSAtIHJlbWFwX3Bmbl9yYW5nZSBmYWlsZWRcbiIsCisJCQkJCQlaUl9ERVZOQU1FKHpyKSwgX19mdW5jX18pOwogCQkJCQlyZXMgPSAtRUFHQUlOOwotCQkJCQlnb3RvIGpwZ19tbWFwX3VubG9ja19hbmRfcmV0dXJuOworCQkJCQlnb3RvIG1tYXBfdW5sb2NrX2FuZF9yZXR1cm47CiAJCQkJfQogCQkJCXNpemUgLT0gdG9kbzsKIAkJCQlzdGFydCArPSB0b2RvOwogCQkJCWlmIChzaXplID09IDApCiAJCQkJCWJyZWFrOwotCQkJCWlmIChsZTMyX3RvX2NwdShmaC0+anBnX2J1ZmZlcnMuYnVmZmVyW2ldLgorCQkJCWlmIChsZTMyX3RvX2NwdShmaC0+YnVmZmVycy5idWZmZXJbaV0uanBnLgogCQkJCSAgICBmcmFnX3RhYlsyICogaiArIDFdKSAmIDEpCiAJCQkJCWJyZWFrOwkvKiB3YXMgbGFzdCBmcmFnbWVudCAqLwogCQkJfQotCQkJZmgtPmpwZ19idWZmZXJzLmJ1ZmZlcltpXS5tYXAgPSBtYXA7CisJCQlmaC0+YnVmZmVycy5idWZmZXJbaV0ubWFwID0gbWFwOwogCQkJaWYgKHNpemUgPT0gMCkKIAkJCQlicmVhazsKIAogCQl9Ci0JanBnX21tYXBfdW5sb2NrX2FuZF9yZXR1cm46Ci0JCW11dGV4X3VubG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCWJyZWFrOwotCi0JY2FzZSBaT1JBTl9NQVBfTU9ERV9SQVc6Ci0KLQkJbXV0ZXhfbG9jaygmenItPnJlc291cmNlX2xvY2spOwotCi0JCS8qIE1hcCB0aGUgVjRMIGJ1ZmZlcnMgKi8KLQkJaWYgKCFmaC0+djRsX2J1ZmZlcnMuYWxsb2NhdGVkKSB7Ci0JCQlkcHJpbnRrKDEsCi0JCQkJS0VSTl9FUlIKLQkJCQkiJXM6IHpvcmFuX21tYXAoVjRMKSAtIGJ1ZmZlcnMgbm90IHlldCBhbGxvY2F0ZWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6cikpOwotCQkJcmVzID0gLUVOT01FTTsKLQkJCWdvdG8gdjRsX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQotCQlmaXJzdCA9IG9mZnNldCAvIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZTsKLQkJbGFzdCA9IGZpcnN0IC0gMSArIHNpemUgLyBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemU7Ci0JCWlmIChvZmZzZXQgJSBmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemUgIT0gMCB8fAotCQkgICAgc2l6ZSAlIGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSAhPSAwIHx8IGZpcnN0IDwgMCB8fAotCQkgICAgbGFzdCA8IDAgfHwgZmlyc3QgPj0gZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzIHx8Ci0JCSAgICBsYXN0ID49IGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSkgewotCQkJZHByaW50aygxLAotCQkJCUtFUk5fRVJSCi0JCQkJIiVzOiBtbWFwKFY0TCkgLSBvZmZzZXQ9JWx1IG9yIHNpemU9JWx1IGludmFsaWQgZm9yIGJ1ZnNpemU9JWQgYW5kIG51bWJ1ZnM9JWRcbiIsCi0JCQkJWlJfREVWTkFNRSh6ciksIG9mZnNldCwgc2l6ZSwKLQkJCQlmaC0+djRsX2J1ZmZlcnMuYnVmZmVyX3NpemUsCi0JCQkJZmgtPnY0bF9idWZmZXJzLm51bV9idWZmZXJzKTsKLQkJCXJlcyA9IC1FSU5WQUw7Ci0JCQlnb3RvIHY0bF9tbWFwX3VubG9ja19hbmRfcmV0dXJuOwotCQl9Ci0JCWZvciAoaSA9IGZpcnN0OyBpIDw9IGxhc3Q7IGkrKykgewotCQkJaWYgKGZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0ubWFwKSB7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IG1tYXAoVjRMKSAtIGJ1ZmZlciAlZCBhbHJlYWR5IG1hcHBlZFxuIiwKLQkJCQkJWlJfREVWTkFNRSh6ciksIGkpOwotCQkJCXJlcyA9IC1FQlVTWTsKLQkJCQlnb3RvIHY0bF9tbWFwX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCQl9Ci0KLQkJLyogbWFwIHRoZXNlIGJ1ZmZlcnMgKHY0bF9idWZmZXJzW2ldKSAqLwotCQltYXAgPSBrbWFsbG9jKHNpemVvZihzdHJ1Y3Qgem9yYW5fbWFwcGluZyksIEdGUF9LRVJORUwpOwotCQlpZiAoIW1hcCkgewotCQkJcmVzID0gLUVOT01FTTsKLQkJCWdvdG8gdjRsX21tYXBfdW5sb2NrX2FuZF9yZXR1cm47Ci0JCX0KLQkJbWFwLT5maWxlID0gZmlsZTsKLQkJbWFwLT5jb3VudCA9IDE7Ci0KLQkJdm1hLT52bV9vcHMgPSAmem9yYW5fdm1fb3BzOwotCQl2bWEtPnZtX2ZsYWdzIHw9IFZNX0RPTlRFWFBBTkQ7Ci0JCXZtYS0+dm1fcHJpdmF0ZV9kYXRhID0gbWFwOwotCi0JCWZvciAoaSA9IGZpcnN0OyBpIDw9IGxhc3Q7IGkrKykgewotCQkJdG9kbyA9IHNpemU7Ci0JCQlpZiAodG9kbyA+IGZoLT52NGxfYnVmZmVycy5idWZmZXJfc2l6ZSkKLQkJCQl0b2RvID0gZmgtPnY0bF9idWZmZXJzLmJ1ZmZlcl9zaXplOwotCQkJcGFnZSA9IGZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0uZmJ1ZmZlcl9waHlzOwotCQkJaWYgKHJlbWFwX3Bmbl9yYW5nZSh2bWEsIHN0YXJ0LCBwYWdlID4+IFBBR0VfU0hJRlQsCi0JCQkJCQkJdG9kbywgUEFHRV9TSEFSRUQpKSB7Ci0JCQkJZHByaW50aygxLAotCQkJCQlLRVJOX0VSUgotCQkJCQkiJXM6IHpvcmFuX21tYXAoVjRMKWkgLSByZW1hcF9wZm5fcmFuZ2UgZmFpbGVkXG4iLAotCQkJCQlaUl9ERVZOQU1FKHpyKSk7Ci0JCQkJcmVzID0gLUVBR0FJTjsKLQkJCQlnb3RvIHY0bF9tbWFwX3VubG9ja19hbmRfcmV0dXJuOwotCQkJfQotCQkJc2l6ZSAtPSB0b2RvOwotCQkJc3RhcnQgKz0gdG9kbzsKLQkJCWZoLT52NGxfYnVmZmVycy5idWZmZXJbaV0ubWFwID0gbWFwOwotCQkJaWYgKHNpemUgPT0gMCkKLQkJCQlicmVhazsKLQkJfQotCXY0bF9tbWFwX3VubG9ja19hbmRfcmV0dXJuOgotCQltdXRleF91bmxvY2soJnpyLT5yZXNvdXJjZV9sb2NrKTsKLQotCQlicmVhazsKLQotCWRlZmF1bHQ6Ci0JCWRwcmludGsoMSwKLQkJCUtFUk5fRVJSCi0JCQkiJXM6IHpvcmFuX21tYXAoKSAtIGludGVybmFsIGVycm9yIC0gdW5rbm93biBtYXAgbW9kZSAlZFxuIiwKLQkJCVpSX0RFVk5BTUUoenIpLCBmaC0+bWFwX21vZGUpOwotCQlicmVhazsKIAl9CiAKK21tYXBfdW5sb2NrX2FuZF9yZXR1cm46CisJbXV0ZXhfdW5sb2NrKCZ6ci0+cmVzb3VyY2VfbG9jayk7CisKIAlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB6b3Jhbl9pb2N0bF9vcHMgPSB7CisJLnZpZGlvY19xdWVyeWNhcCAgICAJCSAgICA9IHpvcmFuX3F1ZXJ5Y2FwLAorCS52aWRpb2NfY3JvcGNhcCAgICAgICAJCSAgICA9IHpvcmFuX2Nyb3BjYXAsCisJLnZpZGlvY19zX2Nyb3AgICAgICAgCQkgICAgPSB6b3Jhbl9zX2Nyb3AsCisJLnZpZGlvY19nX2Nyb3AgICAgICAgCQkgICAgPSB6b3Jhbl9nX2Nyb3AsCisJLnZpZGlvY19lbnVtX2lucHV0ICAgICAJCSAgICA9IHpvcmFuX2VudW1faW5wdXQsCisJLnZpZGlvY19nX2lucHV0ICAgICAgCQkgICAgPSB6b3Jhbl9nX2lucHV0LAorCS52aWRpb2Nfc19pbnB1dCAgICAgIAkJICAgID0gem9yYW5fc19pbnB1dCwKKwkudmlkaW9jX2VudW1fb3V0cHV0ICAgIAkJICAgID0gem9yYW5fZW51bV9vdXRwdXQsCisJLnZpZGlvY19nX291dHB1dCAgICAgCQkgICAgPSB6b3Jhbl9nX291dHB1dCwKKwkudmlkaW9jX3Nfb3V0cHV0ICAgICAJCSAgICA9IHpvcmFuX3Nfb3V0cHV0LAorCS52aWRpb2NfZ19mYnVmCQkJICAgID0gem9yYW5fZ19mYnVmLAorCS52aWRpb2Nfc19mYnVmCQkJICAgID0gem9yYW5fc19mYnVmLAorCS52aWRpb2NfZ19zdGQgCQkJICAgID0gem9yYW5fZ19zdGQsCisJLnZpZGlvY19zX3N0ZCAJCQkgICAgPSB6b3Jhbl9zX3N0ZCwKKwkudmlkaW9jX2dfanBlZ2NvbXAgCQkgICAgPSB6b3Jhbl9nX2pwZWdjb21wLAorCS52aWRpb2Nfc19qcGVnY29tcCAJCSAgICA9IHpvcmFuX3NfanBlZ2NvbXAsCisJLnZpZGlvY19vdmVybGF5CQkJICAgID0gem9yYW5fb3ZlcmxheSwKKwkudmlkaW9jX3JlcWJ1ZnMJCQkgICAgPSB6b3Jhbl9yZXFidWZzLAorCS52aWRpb2NfcXVlcnlidWYJCSAgICA9IHpvcmFuX3F1ZXJ5YnVmLAorCS52aWRpb2NfcWJ1ZgkJCSAgICA9IHpvcmFuX3FidWYsCisJLnZpZGlvY19kcWJ1ZgkJCSAgICA9IHpvcmFuX2RxYnVmLAorCS52aWRpb2Nfc3RyZWFtb24JCSAgICA9IHpvcmFuX3N0cmVhbW9uLAorCS52aWRpb2Nfc3RyZWFtb2ZmCQkgICAgPSB6b3Jhbl9zdHJlYW1vZmYsCisJLnZpZGlvY19lbnVtX2ZtdF92aWRfY2FwIAkgICAgPSB6b3Jhbl9lbnVtX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZW51bV9mbXRfdmlkX291dCAJICAgID0gem9yYW5fZW51bV9mbXRfdmlkX291dCwKKwkudmlkaW9jX2VudW1fZm10X3ZpZF9vdmVybGF5IAkgICAgPSB6b3Jhbl9lbnVtX2ZtdF92aWRfb3ZlcmxheSwKKwkudmlkaW9jX2dfZm10X3ZpZF9jYXAgCQkgICAgPSB6b3Jhbl9nX2ZtdF92aWRfY2FwLAorCS52aWRpb2NfZ19mbXRfdmlkX291dCAgICAgICAgICAgICAgID0gem9yYW5fZ19mbXRfdmlkX291dCwKKwkudmlkaW9jX2dfZm10X3ZpZF9vdmVybGF5ICAgICAgICAgICA9IHpvcmFuX2dfZm10X3ZpZF9vdmVybGF5LAorCS52aWRpb2Nfc19mbXRfdmlkX2NhcCAgCQkgICAgPSB6b3Jhbl9zX2ZtdF92aWRfY2FwLAorCS52aWRpb2Nfc19mbXRfdmlkX291dCAgICAgICAgICAgICAgID0gem9yYW5fc19mbXRfdmlkX291dCwKKwkudmlkaW9jX3NfZm10X3ZpZF9vdmVybGF5ICAgICAgICAgICA9IHpvcmFuX3NfZm10X3ZpZF9vdmVybGF5LAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfY2FwICAJICAgID0gem9yYW5fdHJ5X2ZtdF92aWRfY2FwLAorCS52aWRpb2NfdHJ5X2ZtdF92aWRfb3V0IAkgICAgPSB6b3Jhbl90cnlfZm10X3ZpZF9vdXQsCisJLnZpZGlvY190cnlfZm10X3ZpZF9vdmVybGF5IAkgICAgPSB6b3Jhbl90cnlfZm10X3ZpZF9vdmVybGF5LAorCS52aWRpb2NfcXVlcnljdHJsIAkJICAgID0gem9yYW5fcXVlcnljdHJsLAorCS52aWRpb2Nfc19jdHJsICAgICAgIAkJICAgID0gem9yYW5fc19jdHJsLAorCS52aWRpb2NfZ19jdHJsICAgICAgIAkJICAgID0gem9yYW5fZ19jdHJsLAorI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorCS52aWRpb2NfZGVmYXVsdCAJCSAgICA9IHpvcmFuX2RlZmF1bHQsCisJLnZpZGlvY2dtYnVmIAkJCSAgICA9IHpvcmFuX3ZpZGlvY2dtYnVmLAorI2VuZGlmCit9OworCiBzdGF0aWMgY29uc3Qgc3RydWN0IHY0bDJfZmlsZV9vcGVyYXRpb25zIHpvcmFuX2ZvcHMgPSB7CiAJLm93bmVyID0gVEhJU19NT0RVTEUsCiAJLm9wZW4gPSB6b3Jhbl9vcGVuLAogCS5yZWxlYXNlID0gem9yYW5fY2xvc2UsCi0JLmlvY3RsID0gem9yYW5faW9jdGwsCisJLmlvY3RsID0gdmlkZW9faW9jdGwyLAogCS5yZWFkID0gem9yYW5fcmVhZCwKIAkud3JpdGUgPSB6b3Jhbl93cml0ZSwKIAkubW1hcCA9IHpvcmFuX21tYXAsCkBAIC00NTk2LDcgKzMzOTcsOSBAQAogc3RydWN0IHZpZGVvX2RldmljZSB6b3Jhbl90ZW1wbGF0ZSBfX2RldmluaXRkYXRhID0gewogCS5uYW1lID0gWk9SQU5fTkFNRSwKIAkuZm9wcyA9ICZ6b3Jhbl9mb3BzLAorCS5pb2N0bF9vcHMgPSAmem9yYW5faW9jdGxfb3BzLAogCS5yZWxlYXNlID0gJnpvcmFuX3ZkZXZfcmVsZWFzZSwKKwkudHZub3JtcyA9IFY0TDJfU1REX05UU0MgfCBWNEwyX1NURF9QQUwgfCBWNEwyX1NURF9TRUNBTSwKIAkubWlub3IgPSAtMQogfTsKIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9wcm9jZnMuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4vem9yYW5fcHJvY2ZzLmMKaW5kZXggODcwYmM1YS4uZjE0MjNiNyAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96b3Jhbl9wcm9jZnMuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pvcmFuX3Byb2Nmcy5jCkBAIC0zNiw3ICszNiw3IEBACiAjaW5jbHVkZSA8bGludXgvcGNpLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLmg+CiAjaW5jbHVkZSA8bGludXgvaTJjLWFsZ28tYml0Lmg+Ci0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxsaW51eC9zcGlubG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3NlbS5oPgogI2luY2x1ZGUgPGxpbnV4L3NlcV9maWxlLmg+CmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pyMzYwMTYuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjAxNi5jCmluZGV4IDAwZDEzMmIuLjIxYzA4OGUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjAxNi5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjAxNi5jCkBAIC0zNCwxNSArMzQsMTAgQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KIAotLyogaW5jbHVkZXMgZm9yIHN0cnVjdHVyZXMgYW5kIGRlZmluZXMgcmVnYXJkaW5nIHZpZGVvCi0gICAjaW5jbHVkZTxsaW51eC92aWRlb2Rldi5oPiAqLwotCiAvKiBJL08gY29tbWFuZHMsIGVycm9yIGNvZGVzICovCiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0vLyNpbmNsdWRlPGVycm5vLmg+CiAKIC8qIHY0bCAgQVBJICovCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KIAogLyogaGVhZGVyZmlsZSBvZiB0aGlzIG1vZHVsZSAqLwogI2luY2x1ZGUienIzNjAxNi5oIgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZWRpYS92aWRlby96b3Jhbi96cjM2MDUwLmMgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pyMzYwNTAuYwppbmRleCBjZjhiMjcxLi42MzlkZDg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pyMzYwNTAuYworKysgYi9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pyMzYwNTAuYwpAQCAtMzQsMTIgKzM0LDggQEAKICNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgogI2luY2x1ZGUgPGxpbnV4L3dhaXQuaD4KIAotLyogaW5jbHVkZXMgZm9yIHN0cnVjdHVyZXMgYW5kIGRlZmluZXMgcmVnYXJkaW5nIHZpZGVvCi0gICAjaW5jbHVkZTxsaW51eC92aWRlb2Rldi5oPiAqLwotCiAvKiBJL08gY29tbWFuZHMsIGVycm9yIGNvZGVzICovCiAjaW5jbHVkZSA8YXNtL2lvLmg+Ci0vLyNpbmNsdWRlPGVycm5vLmg+CiAKIC8qIGhlYWRlcmZpbGUgb2YgdGhpcyBtb2R1bGUgKi8KICNpbmNsdWRlICJ6cjM2MDUwLmgiCmRpZmYgLS1naXQgYS9kcml2ZXJzL21lZGlhL3ZpZGVvL3pvcmFuL3pyMzYwNjAuYyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjA2MC5jCmluZGV4IDhlNzQwNTQuLjAwODc0NmYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjA2MC5jCisrKyBiL2RyaXZlcnMvbWVkaWEvdmlkZW8vem9yYW4venIzNjA2MC5jCkBAIC0zNCwxMiArMzQsOCBAQAogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvd2FpdC5oPgogCi0vKiBpbmNsdWRlcyBmb3Igc3RydWN0dXJlcyBhbmQgZGVmaW5lcyByZWdhcmRpbmcgdmlkZW8KLSAgICNpbmNsdWRlPGxpbnV4L3ZpZGVvZGV2Lmg+ICovCi0KIC8qIEkvTyBjb21tYW5kcywgZXJyb3IgY29kZXMgKi8KICNpbmNsdWRlIDxhc20vaW8uaD4KLS8vI2luY2x1ZGU8ZXJybm8uaD4KIAogLyogaGVhZGVyZmlsZSBvZiB0aGlzIG1vZHVsZSAqLwogI2luY2x1ZGUgInpyMzYwNjAuaCIKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbWVkaWEvdmlkZW8venIzNjR4eC5jIGIvZHJpdmVycy9tZWRpYS92aWRlby96cjM2NHh4LmMKaW5kZXggOTMwMjM1Ni4uMjIxNDA5ZiAxMDA2NDQKLS0tIGEvZHJpdmVycy9tZWRpYS92aWRlby96cjM2NHh4LmMKKysrIGIvZHJpdmVycy9tZWRpYS92aWRlby96cjM2NHh4LmMKQEAgLTk2LDYgKzk2LDcgQEAKIAl7VVNCX0RFVklDRSgweDA2ZDYsIDB4MDAzYiksIC5kcml2ZXJfaW5mbyA9IE1FVEhPRDAgfSwKIAl7VVNCX0RFVklDRSgweDBhMTcsIDB4MDA0ZSksIC5kcml2ZXJfaW5mbyA9IE1FVEhPRDIgfSwKIAl7VVNCX0RFVklDRSgweDA0MWUsIDB4NDA1ZCksIC5kcml2ZXJfaW5mbyA9IE1FVEhPRDIgfSwKKwl7VVNCX0RFVklDRSgweDA4Y2EsIDB4MjEwMiksIC5kcml2ZXJfaW5mbyA9IE1FVEhPRDIgfSwKIAl7fQkJCS8qIFRlcm1pbmF0aW5nIGVudHJ5ICovCiB9OwogCkBAIC00MjUsNyArNDI2LDYgQEAKIHN0YXRpYyBpbnQgenIzNjR4eF92aWRpb2NfcXVlcnljYXAoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKnByaXYsCiAJCQkJICAgc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqY2FwKQogewotCW1lbXNldChjYXAsIDAsIHNpemVvZigqY2FwKSk7CiAJc3RyY3B5KGNhcC0+ZHJpdmVyLCBEUklWRVJfREVTQyk7CiAJY2FwLT5jYXBhYmlsaXRpZXMgPSBWNEwyX0NBUF9WSURFT19DQVBUVVJFIHwgVjRMMl9DQVBfUkVBRFdSSVRFOwogCXJldHVybiAwOwpAQCAtNDM2LDggKzQzNiw2IEBACiB7CiAJaWYgKGktPmluZGV4ICE9IDApCiAJCXJldHVybiAtRUlOVkFMOwotCW1lbXNldChpLCAwLCBzaXplb2YoKmkpKTsKLQlpLT5pbmRleCA9IDA7CiAJc3RyY3B5KGktPm5hbWUsIERSSVZFUl9ERVNDICIgQ2FtZXJhIik7CiAJaS0+dHlwZSA9IFY0TDJfSU5QVVRfVFlQRV9DQU1FUkE7CiAJcmV0dXJuIDA7CkBAIC01MjksMTEgKzUyNyw2IEBACiB7CiAJaWYgKGYtPmluZGV4ID4gMCkKIAkJcmV0dXJuIC1FSU5WQUw7Ci0JaWYgKGYtPnR5cGUgIT0gVjRMMl9CVUZfVFlQRV9WSURFT19DQVBUVVJFKQotCQlyZXR1cm4gLUVJTlZBTDsKLQltZW1zZXQoZiwgMCwgc2l6ZW9mKCpmKSk7Ci0JZi0+aW5kZXggPSAwOwotCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJZi0+ZmxhZ3MgPSBWNEwyX0ZNVF9GTEFHX0NPTVBSRVNTRUQ7CiAJc3RyY3B5KGYtPmRlc2NyaXB0aW9uLCAiSlBFRyIpOwogCWYtPnBpeGVsZm9ybWF0ID0gVjRMMl9QSVhfRk1UX0pQRUc7CkBAIC01NTAsOCArNTQzLDYgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CiAKLQlpZiAoZi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwogCWlmIChmLT5mbXQucGl4LnBpeGVsZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9KUEVHKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoZi0+Zm10LnBpeC5maWVsZCAhPSBWNEwyX0ZJRUxEX0FOWSAmJgpAQCAtNTc3LDEwICs1NjgsNiBAQAogCQlyZXR1cm4gLUVOT0RFVjsKIAljYW0gPSB2aWRlb19nZXRfZHJ2ZGF0YSh2ZGV2KTsKIAotCWlmIChmLT50eXBlICE9IFY0TDJfQlVGX1RZUEVfVklERU9fQ0FQVFVSRSkKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JbWVtc2V0KCZmLT5mbXQucGl4LCAwLCBzaXplb2Yoc3RydWN0IHY0bDJfcGl4X2Zvcm1hdCkpOwotCWYtPnR5cGUgPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkU7CiAJZi0+Zm10LnBpeC5waXhlbGZvcm1hdCA9IFY0TDJfUElYX0ZNVF9KUEVHOwogCWYtPmZtdC5waXguZmllbGQgPSBWNEwyX0ZJRUxEX05PTkU7CiAJZi0+Zm10LnBpeC53aWR0aCA9IGNhbS0+d2lkdGg7CkBAIC02MDIsOCArNTg5LDYgQEAKIAkJcmV0dXJuIC1FTk9ERVY7CiAJY2FtID0gdmlkZW9fZ2V0X2RydmRhdGEodmRldik7CiAKLQlpZiAoZi0+dHlwZSAhPSBWNEwyX0JVRl9UWVBFX1ZJREVPX0NBUFRVUkUpCi0JCXJldHVybiAtRUlOVkFMOwogCWlmIChmLT5mbXQucGl4LnBpeGVsZm9ybWF0ICE9IFY0TDJfUElYX0ZNVF9KUEVHKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoZi0+Zm10LnBpeC5maWVsZCAhPSBWNEwyX0ZJRUxEX0FOWSAmJgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fcHJvYy5jIGIvZHJpdmVycy9tZXNzYWdlL2kyby9pMm9fcHJvYy5jCmluZGV4IDlhMzZiNWEuLjcwNDVjNDUgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbWVzc2FnZS9pMm8vaTJvX3Byb2MuYworKysgYi9kcml2ZXJzL21lc3NhZ2UvaTJvL2kyb19wcm9jLmMKQEAgLTIwMzcsOCArMjAzNyw2IEBACiAJaWYgKCFpMm9fcHJvY19kaXJfcm9vdCkKIAkJcmV0dXJuIC0xOwogCi0JaTJvX3Byb2NfZGlyX3Jvb3QtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0KIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGMsICZpMm9fY29udHJvbGxlcnMsIGxpc3QpCiAJICAgIGkyb19wcm9jX2lvcF9hZGQoaTJvX3Byb2NfZGlyX3Jvb3QsIGMpOwogCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jIGIvZHJpdmVycy9uZXQvYm9uZGluZy9ib25kX21haW4uYwppbmRleCA5YzMyNmE1Li45OTYxMGYzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ib25kaW5nL2JvbmRfbWFpbi5jCisrKyBiL2RyaXZlcnMvbmV0L2JvbmRpbmcvYm9uZF9tYWluLmMKQEAgLTM0NDQsMjUgKzM0NDQsMTIgQEAKICAqLwogc3RhdGljIHZvaWQgYm9uZF9jcmVhdGVfcHJvY19kaXIodm9pZCkKIHsKLQlpbnQgbGVuID0gc3RybGVuKERSVl9OQU1FKTsKLQotCWZvciAoYm9uZF9wcm9jX2RpciA9IGluaXRfbmV0LnByb2NfbmV0LT5zdWJkaXI7IGJvbmRfcHJvY19kaXI7Ci0JICAgICBib25kX3Byb2NfZGlyID0gYm9uZF9wcm9jX2Rpci0+bmV4dCkgewotCQlpZiAoKGJvbmRfcHJvY19kaXItPm5hbWVsZW4gPT0gbGVuKSAmJgotCQkgICAgIW1lbWNtcChib25kX3Byb2NfZGlyLT5uYW1lLCBEUlZfTkFNRSwgbGVuKSkgewotCQkJYnJlYWs7Ci0JCX0KLQl9Ci0KIAlpZiAoIWJvbmRfcHJvY19kaXIpIHsKIAkJYm9uZF9wcm9jX2RpciA9IHByb2NfbWtkaXIoRFJWX05BTUUsIGluaXRfbmV0LnByb2NfbmV0KTsKLQkJaWYgKGJvbmRfcHJvY19kaXIpIHsKLQkJCWJvbmRfcHJvY19kaXItPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JCX0gZWxzZSB7CisJCWlmICghYm9uZF9wcm9jX2RpcikKIAkJCXByaW50ayhLRVJOX1dBUk5JTkcgRFJWX05BTUUKIAkJCQkiOiBXYXJuaW5nOiBjYW5ub3QgY3JlYXRlIC9wcm9jL25ldC8lc1xuIiwKIAkJCQlEUlZfTkFNRSk7Ci0JCX0KIAl9CiB9CiAKQEAgLTM0NzEsMjUgKzM0NTgsNyBAQAogICovCiBzdGF0aWMgdm9pZCBib25kX2Rlc3Ryb3lfcHJvY19kaXIodm9pZCkKIHsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmRlOwotCi0JaWYgKCFib25kX3Byb2NfZGlyKSB7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKiB2ZXJpZnkgdGhhdCB0aGUgL3Byb2MgZGlyIGlzIGVtcHR5ICovCi0JZm9yIChkZSA9IGJvbmRfcHJvY19kaXItPnN1YmRpcjsgZGU7IGRlID0gZGUtPm5leHQpIHsKLQkJLyogaWdub3JlIC4gYW5kIC4uICovCi0JCWlmICgqKGRlLT5uYW1lKSAhPSAnLicpIHsKLQkJCWJyZWFrOwotCQl9Ci0JfQotCi0JaWYgKGRlKSB7Ci0JCWlmIChib25kX3Byb2NfZGlyLT5vd25lciA9PSBUSElTX01PRFVMRSkgewotCQkJYm9uZF9wcm9jX2Rpci0+b3duZXIgPSBOVUxMOwotCQl9Ci0JfSBlbHNlIHsKKwlpZiAoYm9uZF9wcm9jX2RpcikgewogCQlyZW1vdmVfcHJvY19lbnRyeShEUlZfTkFNRSwgaW5pdF9uZXQucHJvY19uZXQpOwogCQlib25kX3Byb2NfZGlyID0gTlVMTDsKIAl9CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eC5jIGIvZHJpdmVycy9uZXQvZmVjX21wYzUyeHguYwppbmRleCBjZDhlOThiLi4wNDliMGE3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9mZWNfbXBjNTJ4eC5jCisrKyBiL2RyaXZlcnMvbmV0L2ZlY19tcGM1Mnh4LmMKQEAgLTExMjMsOSArMTEyMyw5IEBACiAjZW5kaWYKIAogc3RhdGljIHN0cnVjdCBvZl9kZXZpY2VfaWQgbXBjNTJ4eF9mZWNfbWF0Y2hbXSA9IHsKLQl7IC50eXBlID0gIm5ldHdvcmsiLCAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMGItZmVjIiwgfSwKLQl7IC50eXBlID0gIm5ldHdvcmsiLCAuY29tcGF0aWJsZSA9ICJmc2wsbXBjNTIwMC1mZWMiLCB9LAotCXsgLnR5cGUgPSAibmV0d29yayIsIC5jb21wYXRpYmxlID0gIm1wYzUyMDAtZmVjIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gImZzbCxtcGM1MjAwYi1mZWMiLCB9LAorCXsgLmNvbXBhdGlibGUgPSAiZnNsLG1wYzUyMDAtZmVjIiwgfSwKKwl7IC5jb21wYXRpYmxlID0gIm1wYzUyMDAtZmVjIiwgfSwKIAl7IH0KIH07CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2lyZGEvdmxzaV9pci5jIGIvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmMKaW5kZXggMTI0M2JjOC4uYWMwZTRiNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmMKKysrIGIvZHJpdmVycy9uZXQvaXJkYS92bHNpX2lyLmMKQEAgLTE4NzEsMTMgKzE4NzEsNiBAQAogCSAqIHdpdGhvdXQgcHJvY2ZzIC0gaXQncyBub3QgcmVxdWlyZWQgZm9yIHRoZSBkcml2ZXIgdG8gd29yay4KIAkgKi8KIAl2bHNpX3Byb2Nfcm9vdCA9IHByb2NfbWtkaXIoUFJPQ19ESVIsIE5VTEwpOwotCWlmICh2bHNpX3Byb2Nfcm9vdCkgewotCQkvKiBwcm90ZWN0IHJlZ2lzdGVyZWQgcHJvY2RpciBhZ2FpbnN0IG1vZHVsZSByZW1vdmFsLgotCQkgKiBCZWNhdXNlIHdlIGFyZSBpbiB0aGUgbW9kdWxlIGluaXQgcGF0aCB0aGVyZSdzIG5vIHJhY2UKLQkJICogd2luZG93IGFmdGVyIGNyZWF0ZV9wcm9jX2VudHJ5IChhbmQgbm8gYmFycmllciBuZWVkZWQpLgotCQkgKi8KLQkJdmxzaV9wcm9jX3Jvb3QtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JfQogCiAJcmV0ID0gcGNpX3JlZ2lzdGVyX2RyaXZlcigmdmxzaV9pcmRhX2RyaXZlcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L21ldGguYyBiL2RyaXZlcnMvbmV0L21ldGguYwppbmRleCBjMzM2YTFmLi5hYTA4OTg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9tZXRoLmMKKysrIGIvZHJpdmVycy9uZXQvbWV0aC5jCkBAIC0zOTgsNyArMzk4LDcgQEAKIAkJCWludCBsZW4gPSAoc3RhdHVzICYgMHhmZmZmKSAtIDQ7IC8qIG9taXQgQ1JDICovCiAJCQkvKiBsZW5ndGggc2FuaXR5IGNoZWNrICovCiAJCQlpZiAobGVuIDwgNjAgfHwgbGVuID4gMTUxOCkgewotCQkJCXByaW50ayhLRVJOX0RFQlVHICIlczogYm9ndXMgcGFja2V0IHNpemU6ICVsZCwgc3RhdHVzPSUjMmx4LlxuIiwKKwkJCQlwcmludGsoS0VSTl9ERUJVRyAiJXM6IGJvZ3VzIHBhY2tldCBzaXplOiAlbGQsIHN0YXR1cz0lIzJMeC5cbiIsCiAJCQkJICAgICAgIGRldi0+bmFtZSwgcHJpdi0+cnhfd3JpdGUsCiAJCQkJICAgICAgIHByaXYtPnJ4X3JpbmdbcHJpdi0+cnhfd3JpdGVdLT5zdGF0dXMucmF3KTsKIAkJCQlkZXYtPnN0YXRzLnJ4X2Vycm9ycysrOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvc21jOTF4LmggYi9kcml2ZXJzL25ldC9zbWM5MXguaAppbmRleCA2YzQ0Zjg2Li45MTIzMDhlIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9zbWM5MXguaAorKysgYi9kcml2ZXJzL25ldC9zbWM5MXguaApAQCAtMzQ2LDM4ICszNDYsNiBAQAogI2RlZmluZSBSUENfTFNBX0RFRkFVTFQJCVJQQ19MRURfVFhfUlgKICNkZWZpbmUgUlBDX0xTQl9ERUZBVUxUCQlSUENfTEVEXzEwMF8xMAogCi0jZWxpZiBkZWZpbmVkKENPTkZJR19TT0NfQVUxWDAwKQotCi0jaW5jbHVkZSA8YXUxeHh4Lmg+Ci0KLS8qIFdlIGNhbiBvbmx5IGRvIDE2LWJpdCByZWFkcyBhbmQgd3JpdGVzIGluIHRoZSBzdGF0aWMgbWVtb3J5IHNwYWNlLiAqLwotI2RlZmluZSBTTUNfQ0FOX1VTRV84QklUCTAKLSNkZWZpbmUgU01DX0NBTl9VU0VfMTZCSVQJMQotI2RlZmluZSBTTUNfQ0FOX1VTRV8zMkJJVAkwCi0jZGVmaW5lIFNNQ19JT19TSElGVAkJMAotI2RlZmluZSBTTUNfTk9XQUlUCQkxCi0KLSNkZWZpbmUgU01DX2ludyhhLCByKQkJYXVfcmVhZHcoKHVuc2lnbmVkIGxvbmcpKChhKSArIChyKSkpCi0jZGVmaW5lIFNNQ19pbnN3KGEsIHIsIHAsIGwpCVwKLQlkbyB7CVwKLQkJdW5zaWduZWQgbG9uZyBfYSA9ICh1bnNpZ25lZCBsb25nKSgoYSkgKyAocikpOyBcCi0JCWludCBfbCA9IChsKTsgXAotCQl1MTYgKl9wID0gKHUxNiAqKShwKTsgXAotCQl3aGlsZSAoX2wtLSA+IDApIFwKLQkJCSpfcCsrID0gYXVfcmVhZHcoX2EpOyBcCi0JfSB3aGlsZSgwKQotI2RlZmluZSBTTUNfb3V0dyh2LCBhLCByKQlhdV93cml0ZXcodiwgKHVuc2lnbmVkIGxvbmcpKChhKSArIChyKSkpCi0jZGVmaW5lIFNNQ19vdXRzdyhhLCByLCBwLCBsKQlcCi0JZG8gewlcCi0JCXVuc2lnbmVkIGxvbmcgX2EgPSAodW5zaWduZWQgbG9uZykoKGEpICsgKHIpKTsgXAotCQlpbnQgX2wgPSAobCk7IFwKLQkJY29uc3QgdTE2ICpfcCA9IChjb25zdCB1MTYgKikocCk7IFwKLQkJd2hpbGUgKF9sLS0gPiAwKSBcCi0JCQlhdV93cml0ZXcoKl9wKysgLCBfYSk7IFwKLQl9IHdoaWxlKDApCi0KLSNkZWZpbmUgU01DX0lSUV9GTEFHUwkJKDApCi0KICNlbGlmCWRlZmluZWQoQ09ORklHX0FSQ0hfVkVSU0FUSUxFKQogCiAjZGVmaW5lIFNNQ19DQU5fVVNFXzhCSVQJMQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jIGIvZHJpdmVycy9uZXQvd2lyZWxlc3MvYWlyby5jCmluZGV4IDdlODBhYmEuLjMxYjFjYzIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L3dpcmVsZXNzL2Fpcm8uYworKysgYi9kcml2ZXJzL25ldC93aXJlbGVzcy9haXJvLmMKQEAgLTQ0OTQsNyArNDQ5NCw2IEBACiAJCWdvdG8gZmFpbDsKIAlhcHJpdi0+cHJvY19lbnRyeS0+dWlkID0gcHJvY191aWQ7CiAJYXByaXYtPnByb2NfZW50cnktPmdpZCA9IHByb2NfZ2lkOwotCWFwcml2LT5wcm9jX2VudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJLyogU2V0dXAgdGhlIFN0YXRzRGVsdGEgKi8KIAllbnRyeSA9IHByb2NfY3JlYXRlX2RhdGEoIlN0YXRzRGVsdGEiLApkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvZG1hci5jIGIvZHJpdmVycy9wY2kvZG1hci5jCmluZGV4IDVmMzMzNDAuLmQzMTMwMzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2RtYXIuYworKysgYi9kcml2ZXJzL3BjaS9kbWFyLmMKQEAgLTMxLDYgKzMxLDggQEAKICNpbmNsdWRlIDxsaW51eC9pb3ZhLmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZWwtaW9tbXUuaD4KICNpbmNsdWRlIDxsaW51eC90aW1lci5oPgorI2luY2x1ZGUgPGxpbnV4L2lycS5oPgorI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgogCiAjdW5kZWYgUFJFRklYCiAjZGVmaW5lIFBSRUZJWCAiRE1BUjoiCkBAIC01MDksNiArNTExLDcgQEAKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlpb21tdS0+c2VxX2lkID0gaW9tbXVfYWxsb2NhdGVkKys7CisJc3ByaW50ZiAoaW9tbXUtPm5hbWUsICJkbWFyJWQiLCBpb21tdS0+c2VxX2lkKTsKIAogCWlvbW11LT5yZWcgPSBpb3JlbWFwKGRyaGQtPnJlZ19iYXNlX2FkZHIsIFZURF9QQUdFX1NJWkUpOwogCWlmICghaW9tbXUtPnJlZykgewpAQCAtNzUxLDYgKzc1NCw0MiBAQAogfQogCiAvKgorICogRGlzYWJsZSBRdWV1ZWQgSW52YWxpZGF0aW9uIGludGVyZmFjZS4KKyAqLwordm9pZCBkbWFyX2Rpc2FibGVfcWkoc3RydWN0IGludGVsX2lvbW11ICppb21tdSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBzdHM7CisJY3ljbGVzX3Qgc3RhcnRfdGltZSA9IGdldF9jeWNsZXMoKTsKKworCWlmICghZWNhcF9xaXMoaW9tbXUtPmVjYXApKQorCQlyZXR1cm47CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWdzKTsKKworCXN0cyA9ICBkbWFyX3JlYWRxKGlvbW11LT5yZWcgKyBETUFSX0dTVFNfUkVHKTsKKwlpZiAoIShzdHMgJiBETUFfR1NUU19RSUVTKSkKKwkJZ290byBlbmQ7CisKKwkvKgorCSAqIEdpdmUgYSBjaGFuY2UgdG8gSFcgdG8gY29tcGxldGUgdGhlIHBlbmRpbmcgaW52YWxpZGF0aW9uIHJlcXVlc3RzLgorCSAqLworCXdoaWxlICgocmVhZGwoaW9tbXUtPnJlZyArIERNQVJfSVFUX1JFRykgIT0KKwkJcmVhZGwoaW9tbXUtPnJlZyArIERNQVJfSVFIX1JFRykpICYmCisJCShETUFSX09QRVJBVElPTl9USU1FT1VUID4gKGdldF9jeWNsZXMoKSAtIHN0YXJ0X3RpbWUpKSkKKwkJY3B1X3JlbGF4KCk7CisKKwlpb21tdS0+Z2NtZCAmPSB+RE1BX0dDTURfUUlFOworCisJd3JpdGVsKGlvbW11LT5nY21kLCBpb21tdS0+cmVnICsgRE1BUl9HQ01EX1JFRyk7CisKKwlJT01NVV9XQUlUX09QKGlvbW11LCBETUFSX0dTVFNfUkVHLCByZWFkbCwKKwkJICAgICAgIShzdHMgJiBETUFfR1NUU19RSUVTKSwgc3RzKTsKK2VuZDoKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZ3MpOworfQorCisvKgogICogRW5hYmxlIFF1ZXVlZCBJbnZhbGlkYXRpb24gaW50ZXJmYWNlLiBUaGlzIGlzIGEgbXVzdCB0byBzdXBwb3J0CiAgKiBpbnRlcnJ1cHQtcmVtYXBwaW5nLiBBbHNvIHVzZWQgYnkgRE1BLXJlbWFwcGluZywgd2hpY2ggcmVwbGFjZXMKICAqIHJlZ2lzdGVyIGJhc2VkIElPVExCIGludmFsaWRhdGlvbi4KQEAgLTc3MCwyMCArODA5LDIwIEBACiAJaWYgKGlvbW11LT5xaSkKIAkJcmV0dXJuIDA7CiAKLQlpb21tdS0+cWkgPSBrbWFsbG9jKHNpemVvZigqcWkpLCBHRlBfS0VSTkVMKTsKKwlpb21tdS0+cWkgPSBrbWFsbG9jKHNpemVvZigqcWkpLCBHRlBfQVRPTUlDKTsKIAlpZiAoIWlvbW11LT5xaSkKIAkJcmV0dXJuIC1FTk9NRU07CiAKIAlxaSA9IGlvbW11LT5xaTsKIAotCXFpLT5kZXNjID0gKHZvaWQgKikoZ2V0X3plcm9lZF9wYWdlKEdGUF9LRVJORUwpKTsKKwlxaS0+ZGVzYyA9ICh2b2lkICopKGdldF96ZXJvZWRfcGFnZShHRlBfQVRPTUlDKSk7CiAJaWYgKCFxaS0+ZGVzYykgewogCQlrZnJlZShxaSk7CiAJCWlvbW11LT5xaSA9IDA7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KIAotCXFpLT5kZXNjX3N0YXR1cyA9IGttYWxsb2MoUUlfTEVOR1RIICogc2l6ZW9mKGludCksIEdGUF9LRVJORUwpOworCXFpLT5kZXNjX3N0YXR1cyA9IGttYWxsb2MoUUlfTEVOR1RIICogc2l6ZW9mKGludCksIEdGUF9BVE9NSUMpOwogCWlmICghcWktPmRlc2Nfc3RhdHVzKSB7CiAJCWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZykgcWktPmRlc2MpOwogCQlrZnJlZShxaSk7CkBAIC04MTIsMyArODUxLDI1NCBAQAogCiAJcmV0dXJuIDA7CiB9CisKKy8qIGlvbW11IGludGVycnVwdCBoYW5kbGluZy4gTW9zdCBzdHVmZiBhcmUgTVNJLWxpa2UuICovCisKK2VudW0gZmF1bHR0eXBlIHsKKwlETUFfUkVNQVAsCisJSU5UUl9SRU1BUCwKKwlVTktOT1dOLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmRtYV9yZW1hcF9mYXVsdF9yZWFzb25zW10gPQoreworCSJTb2Z0d2FyZSIsCisJIlByZXNlbnQgYml0IGluIHJvb3QgZW50cnkgaXMgY2xlYXIiLAorCSJQcmVzZW50IGJpdCBpbiBjb250ZXh0IGVudHJ5IGlzIGNsZWFyIiwKKwkiSW52YWxpZCBjb250ZXh0IGVudHJ5IiwKKwkiQWNjZXNzIGJleW9uZCBNR0FXIiwKKwkiUFRFIFdyaXRlIGFjY2VzcyBpcyBub3Qgc2V0IiwKKwkiUFRFIFJlYWQgYWNjZXNzIGlzIG5vdCBzZXQiLAorCSJOZXh0IHBhZ2UgdGFibGUgcHRyIGlzIGludmFsaWQiLAorCSJSb290IHRhYmxlIGFkZHJlc3MgaW52YWxpZCIsCisJIkNvbnRleHQgdGFibGUgcHRyIGlzIGludmFsaWQiLAorCSJub24temVybyByZXNlcnZlZCBmaWVsZHMgaW4gUlRQIiwKKwkibm9uLXplcm8gcmVzZXJ2ZWQgZmllbGRzIGluIENUUCIsCisJIm5vbi16ZXJvIHJlc2VydmVkIGZpZWxkcyBpbiBQVEUiLAorfTsKKworc3RhdGljIGNvbnN0IGNoYXIgKmludHJfcmVtYXBfZmF1bHRfcmVhc29uc1tdID0KK3sKKwkiRGV0ZWN0ZWQgcmVzZXJ2ZWQgZmllbGRzIGluIHRoZSBkZWNvZGVkIGludGVycnVwdC1yZW1hcHBlZCByZXF1ZXN0IiwKKwkiSW50ZXJydXB0IGluZGV4IGV4Y2VlZGVkIHRoZSBpbnRlcnJ1cHQtcmVtYXBwaW5nIHRhYmxlIHNpemUiLAorCSJQcmVzZW50IGZpZWxkIGluIHRoZSBJUlRFIGVudHJ5IGlzIGNsZWFyIiwKKwkiRXJyb3IgYWNjZXNzaW5nIGludGVycnVwdC1yZW1hcHBpbmcgdGFibGUgcG9pbnRlZCBieSBJUlRBX1JFRyIsCisJIkRldGVjdGVkIHJlc2VydmVkIGZpZWxkcyBpbiB0aGUgSVJURSBlbnRyeSIsCisJIkJsb2NrZWQgYSBjb21wYXRpYmlsaXR5IGZvcm1hdCBpbnRlcnJ1cHQgcmVxdWVzdCIsCisJIkJsb2NrZWQgYW4gaW50ZXJydXB0IHJlcXVlc3QgZHVlIHRvIHNvdXJjZS1pZCB2ZXJpZmljYXRpb24gZmFpbHVyZSIsCit9OworCisjZGVmaW5lIE1BWF9GQVVMVF9SRUFTT05fSURYIAkoQVJSQVlfU0laRShmYXVsdF9yZWFzb25fc3RyaW5ncykgLSAxKQorCitjb25zdCBjaGFyICpkbWFyX2dldF9mYXVsdF9yZWFzb24odTggZmF1bHRfcmVhc29uLCBpbnQgKmZhdWx0X3R5cGUpCit7CisJaWYgKGZhdWx0X3JlYXNvbiA+PSAweDIwICYmIChmYXVsdF9yZWFzb24gPD0gMHgyMCArCisJCQkJICAgICBBUlJBWV9TSVpFKGludHJfcmVtYXBfZmF1bHRfcmVhc29ucykpKSB7CisJCSpmYXVsdF90eXBlID0gSU5UUl9SRU1BUDsKKwkJcmV0dXJuIGludHJfcmVtYXBfZmF1bHRfcmVhc29uc1tmYXVsdF9yZWFzb24gLSAweDIwXTsKKwl9IGVsc2UgaWYgKGZhdWx0X3JlYXNvbiA8IEFSUkFZX1NJWkUoZG1hX3JlbWFwX2ZhdWx0X3JlYXNvbnMpKSB7CisJCSpmYXVsdF90eXBlID0gRE1BX1JFTUFQOworCQlyZXR1cm4gZG1hX3JlbWFwX2ZhdWx0X3JlYXNvbnNbZmF1bHRfcmVhc29uXTsKKwl9IGVsc2UgeworCQkqZmF1bHRfdHlwZSA9IFVOS05PV047CisJCXJldHVybiAiVW5rbm93biI7CisJfQorfQorCit2b2lkIGRtYXJfbXNpX3VubWFzayh1bnNpZ25lZCBpbnQgaXJxKQoreworCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUgPSBnZXRfaXJxX2RhdGEoaXJxKTsKKwl1bnNpZ25lZCBsb25nIGZsYWc7CisKKwkvKiB1bm1hc2sgaXQgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOworCXdyaXRlbCgwLCBpb21tdS0+cmVnICsgRE1BUl9GRUNUTF9SRUcpOworCS8qIFJlYWQgYSByZWcgdG8gZm9yY2UgZmx1c2ggdGhlIHBvc3Qgd3JpdGUgKi8KKwlyZWFkbChpb21tdS0+cmVnICsgRE1BUl9GRUNUTF9SRUcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKK30KKwordm9pZCBkbWFyX21zaV9tYXNrKHVuc2lnbmVkIGludCBpcnEpCit7CisJdW5zaWduZWQgbG9uZyBmbGFnOworCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUgPSBnZXRfaXJxX2RhdGEoaXJxKTsKKworCS8qIG1hc2sgaXQgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOworCXdyaXRlbChETUFfRkVDVExfSU0sIGlvbW11LT5yZWcgKyBETUFSX0ZFQ1RMX1JFRyk7CisJLyogUmVhZCBhIHJlZyB0byBmb3JjZSBmbHVzaCB0aGUgcG9zdCB3cml0ZSAqLworCXJlYWRsKGlvbW11LT5yZWcgKyBETUFSX0ZFQ1RMX1JFRyk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOworfQorCit2b2lkIGRtYXJfbXNpX3dyaXRlKGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpCit7CisJc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IGdldF9pcnFfZGF0YShpcnEpOworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7CisJd3JpdGVsKG1zZy0+ZGF0YSwgaW9tbXUtPnJlZyArIERNQVJfRkVEQVRBX1JFRyk7CisJd3JpdGVsKG1zZy0+YWRkcmVzc19sbywgaW9tbXUtPnJlZyArIERNQVJfRkVBRERSX1JFRyk7CisJd3JpdGVsKG1zZy0+YWRkcmVzc19oaSwgaW9tbXUtPnJlZyArIERNQVJfRkVVQUREUl9SRUcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKK30KKwordm9pZCBkbWFyX21zaV9yZWFkKGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpCit7CisJc3RydWN0IGludGVsX2lvbW11ICppb21tdSA9IGdldF9pcnFfZGF0YShpcnEpOworCXVuc2lnbmVkIGxvbmcgZmxhZzsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7CisJbXNnLT5kYXRhID0gcmVhZGwoaW9tbXUtPnJlZyArIERNQVJfRkVEQVRBX1JFRyk7CisJbXNnLT5hZGRyZXNzX2xvID0gcmVhZGwoaW9tbXUtPnJlZyArIERNQVJfRkVBRERSX1JFRyk7CisJbXNnLT5hZGRyZXNzX2hpID0gcmVhZGwoaW9tbXUtPnJlZyArIERNQVJfRkVVQUREUl9SRUcpOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKK30KKworc3RhdGljIGludCBkbWFyX2ZhdWx0X2RvX29uZShzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LCBpbnQgdHlwZSwKKwkJdTggZmF1bHRfcmVhc29uLCB1MTYgc291cmNlX2lkLCB1bnNpZ25lZCBsb25nIGxvbmcgYWRkcikKK3sKKwljb25zdCBjaGFyICpyZWFzb247CisJaW50IGZhdWx0X3R5cGU7CisKKwlyZWFzb24gPSBkbWFyX2dldF9mYXVsdF9yZWFzb24oZmF1bHRfcmVhc29uLCAmZmF1bHRfdHlwZSk7CisKKwlpZiAoZmF1bHRfdHlwZSA9PSBJTlRSX1JFTUFQKQorCQlwcmludGsoS0VSTl9FUlIgIklOVFItUkVNQVA6IFJlcXVlc3QgZGV2aWNlIFtbJTAyeDolMDJ4LiVkXSAiCisJCSAgICAgICAiZmF1bHQgaW5kZXggJWxseFxuIgorCQkJIklOVFItUkVNQVA6W2ZhdWx0IHJlYXNvbiAlMDJkXSAlc1xuIiwKKwkJCShzb3VyY2VfaWQgPj4gOCksIFBDSV9TTE9UKHNvdXJjZV9pZCAmIDB4RkYpLAorCQkJUENJX0ZVTkMoc291cmNlX2lkICYgMHhGRiksIGFkZHIgPj4gNDgsCisJCQlmYXVsdF9yZWFzb24sIHJlYXNvbik7CisJZWxzZQorCQlwcmludGsoS0VSTl9FUlIKKwkJICAgICAgICJETUFSOlslc10gUmVxdWVzdCBkZXZpY2UgWyUwMng6JTAyeC4lZF0gIgorCQkgICAgICAgImZhdWx0IGFkZHIgJWxseCBcbiIKKwkJICAgICAgICJETUFSOltmYXVsdCByZWFzb24gJTAyZF0gJXNcbiIsCisJCSAgICAgICAodHlwZSA/ICJETUEgUmVhZCIgOiAiRE1BIFdyaXRlIiksCisJCSAgICAgICAoc291cmNlX2lkID4+IDgpLCBQQ0lfU0xPVChzb3VyY2VfaWQgJiAweEZGKSwKKwkJICAgICAgIFBDSV9GVU5DKHNvdXJjZV9pZCAmIDB4RkYpLCBhZGRyLCBmYXVsdF9yZWFzb24sIHJlYXNvbik7CisJcmV0dXJuIDA7Cit9CisKKyNkZWZpbmUgUFJJTUFSWV9GQVVMVF9SRUdfTEVOICgxNikKK2lycXJldHVybl90IGRtYXJfZmF1bHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUgPSBkZXZfaWQ7CisJaW50IHJlZywgZmF1bHRfaW5kZXg7CisJdTMyIGZhdWx0X3N0YXR1czsKKwl1bnNpZ25lZCBsb25nIGZsYWc7CisKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOworCWZhdWx0X3N0YXR1cyA9IHJlYWRsKGlvbW11LT5yZWcgKyBETUFSX0ZTVFNfUkVHKTsKKwlpZiAoZmF1bHRfc3RhdHVzKQorCQlwcmludGsoS0VSTl9FUlIgIkRSSEQ6IGhhbmRsaW5nIGZhdWx0IHN0YXR1cyByZWcgJXhcbiIsCisJCSAgICAgICBmYXVsdF9zdGF0dXMpOworCisJLyogVEJEOiBpZ25vcmUgYWR2YW5jZWQgZmF1bHQgbG9nIGN1cnJlbnRseSAqLworCWlmICghKGZhdWx0X3N0YXR1cyAmIERNQV9GU1RTX1BQRikpCisJCWdvdG8gY2xlYXJfcmVzdDsKKworCWZhdWx0X2luZGV4ID0gZG1hX2ZzdHNfZmF1bHRfcmVjb3JkX2luZGV4KGZhdWx0X3N0YXR1cyk7CisJcmVnID0gY2FwX2ZhdWx0X3JlZ19vZmZzZXQoaW9tbXUtPmNhcCk7CisJd2hpbGUgKDEpIHsKKwkJdTggZmF1bHRfcmVhc29uOworCQl1MTYgc291cmNlX2lkOworCQl1NjQgZ3Vlc3RfYWRkcjsKKwkJaW50IHR5cGU7CisJCXUzMiBkYXRhOworCisJCS8qIGhpZ2hlc3QgMzIgYml0cyAqLworCQlkYXRhID0gcmVhZGwoaW9tbXUtPnJlZyArIHJlZyArCisJCQkJZmF1bHRfaW5kZXggKiBQUklNQVJZX0ZBVUxUX1JFR19MRU4gKyAxMik7CisJCWlmICghKGRhdGEgJiBETUFfRlJDRF9GKSkKKwkJCWJyZWFrOworCisJCWZhdWx0X3JlYXNvbiA9IGRtYV9mcmNkX2ZhdWx0X3JlYXNvbihkYXRhKTsKKwkJdHlwZSA9IGRtYV9mcmNkX3R5cGUoZGF0YSk7CisKKwkJZGF0YSA9IHJlYWRsKGlvbW11LT5yZWcgKyByZWcgKworCQkJCWZhdWx0X2luZGV4ICogUFJJTUFSWV9GQVVMVF9SRUdfTEVOICsgOCk7CisJCXNvdXJjZV9pZCA9IGRtYV9mcmNkX3NvdXJjZV9pZChkYXRhKTsKKworCQlndWVzdF9hZGRyID0gZG1hcl9yZWFkcShpb21tdS0+cmVnICsgcmVnICsKKwkJCQlmYXVsdF9pbmRleCAqIFBSSU1BUllfRkFVTFRfUkVHX0xFTik7CisJCWd1ZXN0X2FkZHIgPSBkbWFfZnJjZF9wYWdlX2FkZHIoZ3Vlc3RfYWRkcik7CisJCS8qIGNsZWFyIHRoZSBmYXVsdCAqLworCQl3cml0ZWwoRE1BX0ZSQ0RfRiwgaW9tbXUtPnJlZyArIHJlZyArCisJCQlmYXVsdF9pbmRleCAqIFBSSU1BUllfRkFVTFRfUkVHX0xFTiArIDEyKTsKKworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7CisKKwkJZG1hcl9mYXVsdF9kb19vbmUoaW9tbXUsIHR5cGUsIGZhdWx0X3JlYXNvbiwKKwkJCQlzb3VyY2VfaWQsIGd1ZXN0X2FkZHIpOworCisJCWZhdWx0X2luZGV4Kys7CisJCWlmIChmYXVsdF9pbmRleCA+IGNhcF9udW1fZmF1bHRfcmVncyhpb21tdS0+Y2FwKSkKKwkJCWZhdWx0X2luZGV4ID0gMDsKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKKwl9CitjbGVhcl9yZXN0OgorCS8qIGNsZWFyIGFsbCB0aGUgb3RoZXIgZmF1bHRzICovCisJZmF1bHRfc3RhdHVzID0gcmVhZGwoaW9tbXUtPnJlZyArIERNQVJfRlNUU19SRUcpOworCXdyaXRlbChmYXVsdF9zdGF0dXMsIGlvbW11LT5yZWcgKyBETUFSX0ZTVFNfUkVHKTsKKworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKKwlyZXR1cm4gSVJRX0hBTkRMRUQ7Cit9CisKK2ludCBkbWFyX3NldF9pbnRlcnJ1cHQoc3RydWN0IGludGVsX2lvbW11ICppb21tdSkKK3sKKwlpbnQgaXJxLCByZXQ7CisKKwkvKgorCSAqIENoZWNrIGlmIHRoZSBmYXVsdCBpbnRlcnJ1cHQgaXMgYWxyZWFkeSBpbml0aWFsaXplZC4KKwkgKi8KKwlpZiAoaW9tbXUtPmlycSkKKwkJcmV0dXJuIDA7CisKKwlpcnEgPSBjcmVhdGVfaXJxKCk7CisJaWYgKCFpcnEpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJJT01NVTogbm8gZnJlZSB2ZWN0b3JzXG4iKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCisJc2V0X2lycV9kYXRhKGlycSwgaW9tbXUpOworCWlvbW11LT5pcnEgPSBpcnE7CisKKwlyZXQgPSBhcmNoX3NldHVwX2RtYXJfbXNpKGlycSk7CisJaWYgKHJldCkgeworCQlzZXRfaXJxX2RhdGEoaXJxLCBOVUxMKTsKKwkJaW9tbXUtPmlycSA9IDA7CisJCWRlc3Ryb3lfaXJxKGlycSk7CisJCXJldHVybiAwOworCX0KKworCXJldCA9IHJlcXVlc3RfaXJxKGlycSwgZG1hcl9mYXVsdCwgMCwgaW9tbXUtPm5hbWUsIGlvbW11KTsKKwlpZiAocmV0KQorCQlwcmludGsoS0VSTl9FUlIgIklPTU1VOiBjYW4ndCByZXF1ZXN0IGlycVxuIik7CisJcmV0dXJuIHJldDsKK30KKworaW50IF9faW5pdCBlbmFibGVfZHJoZF9mYXVsdF9oYW5kbGluZyh2b2lkKQoreworCXN0cnVjdCBkbWFyX2RyaGRfdW5pdCAqZHJoZDsKKworCS8qCisJICogRW5hYmxlIGZhdWx0IGNvbnRyb2wgaW50ZXJydXB0LgorCSAqLworCWZvcl9lYWNoX2RyaGRfdW5pdChkcmhkKSB7CisJCWludCByZXQ7CisJCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUgPSBkcmhkLT5pb21tdTsKKwkJcmV0ID0gZG1hcl9zZXRfaW50ZXJydXB0KGlvbW11KTsKKworCQlpZiAocmV0KSB7CisJCQlwcmludGsoS0VSTl9FUlIgIkRSSEQgJUx4OiBmYWlsZWQgdG8gZW5hYmxlIGZhdWx0LCAiCisJCQkgICAgICAgIiBpbnRlcnJ1cHQsIHJldCAlZFxuIiwKKwkJCSAgICAgICAodW5zaWduZWQgbG9uZyBsb25nKWRyaGQtPnJlZ19iYXNlX2FkZHIsIHJldCk7CisJCQlyZXR1cm4gLTE7CisJCX0KKwl9CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMgYi9kcml2ZXJzL3BjaS9pbnRlbC1pb21tdS5jCmluZGV4IGYzZjY4NjUuLjQ5NDAyYzMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGNpL2ludGVsLWlvbW11LmMKKysrIGIvZHJpdmVycy9wY2kvaW50ZWwtaW9tbXUuYwpAQCAtMTAwNCwxOTQgKzEwMDQsNiBAQAogCXJldHVybiAwOwogfQogCi0vKiBpb21tdSBpbnRlcnJ1cHQgaGFuZGxpbmcuIE1vc3Qgc3R1ZmYgYXJlIE1TSS1saWtlLiAqLwotCi1zdGF0aWMgY29uc3QgY2hhciAqZmF1bHRfcmVhc29uX3N0cmluZ3NbXSA9Ci17Ci0JIlNvZnR3YXJlIiwKLQkiUHJlc2VudCBiaXQgaW4gcm9vdCBlbnRyeSBpcyBjbGVhciIsCi0JIlByZXNlbnQgYml0IGluIGNvbnRleHQgZW50cnkgaXMgY2xlYXIiLAotCSJJbnZhbGlkIGNvbnRleHQgZW50cnkiLAotCSJBY2Nlc3MgYmV5b25kIE1HQVciLAotCSJQVEUgV3JpdGUgYWNjZXNzIGlzIG5vdCBzZXQiLAotCSJQVEUgUmVhZCBhY2Nlc3MgaXMgbm90IHNldCIsCi0JIk5leHQgcGFnZSB0YWJsZSBwdHIgaXMgaW52YWxpZCIsCi0JIlJvb3QgdGFibGUgYWRkcmVzcyBpbnZhbGlkIiwKLQkiQ29udGV4dCB0YWJsZSBwdHIgaXMgaW52YWxpZCIsCi0JIm5vbi16ZXJvIHJlc2VydmVkIGZpZWxkcyBpbiBSVFAiLAotCSJub24temVybyByZXNlcnZlZCBmaWVsZHMgaW4gQ1RQIiwKLQkibm9uLXplcm8gcmVzZXJ2ZWQgZmllbGRzIGluIFBURSIsCi19OwotI2RlZmluZSBNQVhfRkFVTFRfUkVBU09OX0lEWCAJKEFSUkFZX1NJWkUoZmF1bHRfcmVhc29uX3N0cmluZ3MpIC0gMSkKLQotY29uc3QgY2hhciAqZG1hcl9nZXRfZmF1bHRfcmVhc29uKHU4IGZhdWx0X3JlYXNvbikKLXsKLQlpZiAoZmF1bHRfcmVhc29uID4gTUFYX0ZBVUxUX1JFQVNPTl9JRFgpCi0JCXJldHVybiAiVW5rbm93biI7Ci0JZWxzZQotCQlyZXR1cm4gZmF1bHRfcmVhc29uX3N0cmluZ3NbZmF1bHRfcmVhc29uXTsKLX0KLQotdm9pZCBkbWFyX21zaV91bm1hc2sodW5zaWduZWQgaW50IGlycSkKLXsKLQlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gZ2V0X2lycV9kYXRhKGlycSk7Ci0JdW5zaWduZWQgbG9uZyBmbGFnOwotCi0JLyogdW5tYXNrIGl0ICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKLQl3cml0ZWwoMCwgaW9tbXUtPnJlZyArIERNQVJfRkVDVExfUkVHKTsKLQkvKiBSZWFkIGEgcmVnIHRvIGZvcmNlIGZsdXNoIHRoZSBwb3N0IHdyaXRlICovCi0JcmVhZGwoaW9tbXUtPnJlZyArIERNQVJfRkVDVExfUkVHKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7Ci19Ci0KLXZvaWQgZG1hcl9tc2lfbWFzayh1bnNpZ25lZCBpbnQgaXJxKQotewotCXVuc2lnbmVkIGxvbmcgZmxhZzsKLQlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gZ2V0X2lycV9kYXRhKGlycSk7Ci0KLQkvKiBtYXNrIGl0ICovCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKLQl3cml0ZWwoRE1BX0ZFQ1RMX0lNLCBpb21tdS0+cmVnICsgRE1BUl9GRUNUTF9SRUcpOwotCS8qIFJlYWQgYSByZWcgdG8gZm9yY2UgZmx1c2ggdGhlIHBvc3Qgd3JpdGUgKi8KLQlyZWFkbChpb21tdS0+cmVnICsgRE1BUl9GRUNUTF9SRUcpOwotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKLX0KLQotdm9pZCBkbWFyX21zaV93cml0ZShpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQotewotCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUgPSBnZXRfaXJxX2RhdGEoaXJxKTsKLQl1bnNpZ25lZCBsb25nIGZsYWc7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOwotCXdyaXRlbChtc2ctPmRhdGEsIGlvbW11LT5yZWcgKyBETUFSX0ZFREFUQV9SRUcpOwotCXdyaXRlbChtc2ctPmFkZHJlc3NfbG8sIGlvbW11LT5yZWcgKyBETUFSX0ZFQUREUl9SRUcpOwotCXdyaXRlbChtc2ctPmFkZHJlc3NfaGksIGlvbW11LT5yZWcgKyBETUFSX0ZFVUFERFJfUkVHKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7Ci19Ci0KLXZvaWQgZG1hcl9tc2lfcmVhZChpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKQotewotCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUgPSBnZXRfaXJxX2RhdGEoaXJxKTsKLQl1bnNpZ25lZCBsb25nIGZsYWc7Ci0KLQlzcGluX2xvY2tfaXJxc2F2ZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWcpOwotCW1zZy0+ZGF0YSA9IHJlYWRsKGlvbW11LT5yZWcgKyBETUFSX0ZFREFUQV9SRUcpOwotCW1zZy0+YWRkcmVzc19sbyA9IHJlYWRsKGlvbW11LT5yZWcgKyBETUFSX0ZFQUREUl9SRUcpOwotCW1zZy0+YWRkcmVzc19oaSA9IHJlYWRsKGlvbW11LT5yZWcgKyBETUFSX0ZFVUFERFJfUkVHKTsKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7Ci19Ci0KLXN0YXRpYyBpbnQgaW9tbXVfcGFnZV9mYXVsdF9kb19vbmUoc3RydWN0IGludGVsX2lvbW11ICppb21tdSwgaW50IHR5cGUsCi0JCXU4IGZhdWx0X3JlYXNvbiwgdTE2IHNvdXJjZV9pZCwgdW5zaWduZWQgbG9uZyBsb25nIGFkZHIpCi17Ci0JY29uc3QgY2hhciAqcmVhc29uOwotCi0JcmVhc29uID0gZG1hcl9nZXRfZmF1bHRfcmVhc29uKGZhdWx0X3JlYXNvbik7Ci0KLQlwcmludGsoS0VSTl9FUlIKLQkJIkRNQVI6WyVzXSBSZXF1ZXN0IGRldmljZSBbJTAyeDolMDJ4LiVkXSAiCi0JCSJmYXVsdCBhZGRyICVsbHggXG4iCi0JCSJETUFSOltmYXVsdCByZWFzb24gJTAyZF0gJXNcbiIsCi0JCSh0eXBlID8gIkRNQSBSZWFkIiA6ICJETUEgV3JpdGUiKSwKLQkJKHNvdXJjZV9pZCA+PiA4KSwgUENJX1NMT1Qoc291cmNlX2lkICYgMHhGRiksCi0JCVBDSV9GVU5DKHNvdXJjZV9pZCAmIDB4RkYpLCBhZGRyLCBmYXVsdF9yZWFzb24sIHJlYXNvbik7Ci0JcmV0dXJuIDA7Ci19Ci0KLSNkZWZpbmUgUFJJTUFSWV9GQVVMVF9SRUdfTEVOICgxNikKLXN0YXRpYyBpcnFyZXR1cm5fdCBpb21tdV9wYWdlX2ZhdWx0KGludCBpcnEsIHZvaWQgKmRldl9pZCkKLXsKLQlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11ID0gZGV2X2lkOwotCWludCByZWcsIGZhdWx0X2luZGV4OwotCXUzMiBmYXVsdF9zdGF0dXM7Ci0JdW5zaWduZWQgbG9uZyBmbGFnOwotCi0Jc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKLQlmYXVsdF9zdGF0dXMgPSByZWFkbChpb21tdS0+cmVnICsgRE1BUl9GU1RTX1JFRyk7Ci0KLQkvKiBUQkQ6IGlnbm9yZSBhZHZhbmNlZCBmYXVsdCBsb2cgY3VycmVudGx5ICovCi0JaWYgKCEoZmF1bHRfc3RhdHVzICYgRE1BX0ZTVFNfUFBGKSkKLQkJZ290byBjbGVhcl9vdmVyZmxvdzsKLQotCWZhdWx0X2luZGV4ID0gZG1hX2ZzdHNfZmF1bHRfcmVjb3JkX2luZGV4KGZhdWx0X3N0YXR1cyk7Ci0JcmVnID0gY2FwX2ZhdWx0X3JlZ19vZmZzZXQoaW9tbXUtPmNhcCk7Ci0Jd2hpbGUgKDEpIHsKLQkJdTggZmF1bHRfcmVhc29uOwotCQl1MTYgc291cmNlX2lkOwotCQl1NjQgZ3Vlc3RfYWRkcjsKLQkJaW50IHR5cGU7Ci0JCXUzMiBkYXRhOwotCi0JCS8qIGhpZ2hlc3QgMzIgYml0cyAqLwotCQlkYXRhID0gcmVhZGwoaW9tbXUtPnJlZyArIHJlZyArCi0JCQkJZmF1bHRfaW5kZXggKiBQUklNQVJZX0ZBVUxUX1JFR19MRU4gKyAxMik7Ci0JCWlmICghKGRhdGEgJiBETUFfRlJDRF9GKSkKLQkJCWJyZWFrOwotCi0JCWZhdWx0X3JlYXNvbiA9IGRtYV9mcmNkX2ZhdWx0X3JlYXNvbihkYXRhKTsKLQkJdHlwZSA9IGRtYV9mcmNkX3R5cGUoZGF0YSk7Ci0KLQkJZGF0YSA9IHJlYWRsKGlvbW11LT5yZWcgKyByZWcgKwotCQkJCWZhdWx0X2luZGV4ICogUFJJTUFSWV9GQVVMVF9SRUdfTEVOICsgOCk7Ci0JCXNvdXJjZV9pZCA9IGRtYV9mcmNkX3NvdXJjZV9pZChkYXRhKTsKLQotCQlndWVzdF9hZGRyID0gZG1hcl9yZWFkcShpb21tdS0+cmVnICsgcmVnICsKLQkJCQlmYXVsdF9pbmRleCAqIFBSSU1BUllfRkFVTFRfUkVHX0xFTik7Ci0JCWd1ZXN0X2FkZHIgPSBkbWFfZnJjZF9wYWdlX2FkZHIoZ3Vlc3RfYWRkcik7Ci0JCS8qIGNsZWFyIHRoZSBmYXVsdCAqLwotCQl3cml0ZWwoRE1BX0ZSQ0RfRiwgaW9tbXUtPnJlZyArIHJlZyArCi0JCQlmYXVsdF9pbmRleCAqIFBSSU1BUllfRkFVTFRfUkVHX0xFTiArIDEyKTsKLQotCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZyk7Ci0KLQkJaW9tbXVfcGFnZV9mYXVsdF9kb19vbmUoaW9tbXUsIHR5cGUsIGZhdWx0X3JlYXNvbiwKLQkJCQlzb3VyY2VfaWQsIGd1ZXN0X2FkZHIpOwotCi0JCWZhdWx0X2luZGV4Kys7Ci0JCWlmIChmYXVsdF9pbmRleCA+IGNhcF9udW1fZmF1bHRfcmVncyhpb21tdS0+Y2FwKSkKLQkJCWZhdWx0X2luZGV4ID0gMDsKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKLQl9Ci1jbGVhcl9vdmVyZmxvdzoKLQkvKiBjbGVhciBwcmltYXJ5IGZhdWx0IG92ZXJmbG93ICovCi0JZmF1bHRfc3RhdHVzID0gcmVhZGwoaW9tbXUtPnJlZyArIERNQVJfRlNUU19SRUcpOwotCWlmIChmYXVsdF9zdGF0dXMgJiBETUFfRlNUU19QRk8pCi0JCXdyaXRlbChETUFfRlNUU19QRk8sIGlvbW11LT5yZWcgKyBETUFSX0ZTVFNfUkVHKTsKLQotCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlvbW11LT5yZWdpc3Rlcl9sb2NrLCBmbGFnKTsKLQlyZXR1cm4gSVJRX0hBTkRMRUQ7Ci19Ci0KLWludCBkbWFyX3NldF9pbnRlcnJ1cHQoc3RydWN0IGludGVsX2lvbW11ICppb21tdSkKLXsKLQlpbnQgaXJxLCByZXQ7Ci0KLQlpcnEgPSBjcmVhdGVfaXJxKCk7Ci0JaWYgKCFpcnEpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJJT01NVTogbm8gZnJlZSB2ZWN0b3JzXG4iKTsKLQkJcmV0dXJuIC1FSU5WQUw7Ci0JfQotCi0Jc2V0X2lycV9kYXRhKGlycSwgaW9tbXUpOwotCWlvbW11LT5pcnEgPSBpcnE7Ci0KLQlyZXQgPSBhcmNoX3NldHVwX2RtYXJfbXNpKGlycSk7Ci0JaWYgKHJldCkgewotCQlzZXRfaXJxX2RhdGEoaXJxLCBOVUxMKTsKLQkJaW9tbXUtPmlycSA9IDA7Ci0JCWRlc3Ryb3lfaXJxKGlycSk7Ci0JCXJldHVybiAwOwotCX0KLQotCS8qIEZvcmNlIGZhdWx0IHJlZ2lzdGVyIGlzIGNsZWFyZWQgKi8KLQlpb21tdV9wYWdlX2ZhdWx0KGlycSwgaW9tbXUpOwotCi0JcmV0ID0gcmVxdWVzdF9pcnEoaXJxLCBpb21tdV9wYWdlX2ZhdWx0LCAwLCBpb21tdS0+bmFtZSwgaW9tbXUpOwotCWlmIChyZXQpCi0JCXByaW50ayhLRVJOX0VSUiAiSU9NTVU6IGNhbid0IHJlcXVlc3QgaXJxXG4iKTsKLQlyZXR1cm4gcmV0OwotfQogCiBzdGF0aWMgaW50IGlvbW11X2luaXRfZG9tYWlucyhzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11KQogewpAQCAtMTk4Nyw3ICsxNzk5LDcgQEAKIAlzdHJ1Y3QgZG1hcl9ybXJyX3VuaXQgKnJtcnI7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXY7CiAJc3RydWN0IGludGVsX2lvbW11ICppb21tdTsKLQlpbnQgaSwgcmV0LCB1bml0ID0gMDsKKwlpbnQgaSwgcmV0OwogCiAJLyoKIAkgKiBmb3IgZWFjaCBkcmhkCkBAIC0yMDQzLDExICsxODU1LDQwIEBACiAJCX0KIAl9CiAKKwkvKgorCSAqIFN0YXJ0IGZyb20gdGhlIHNhbmUgaW9tbXUgaGFyZHdhcmUgc3RhdGUuCisJICovCiAJZm9yX2VhY2hfZHJoZF91bml0KGRyaGQpIHsKIAkJaWYgKGRyaGQtPmlnbm9yZWQpCiAJCQljb250aW51ZTsKIAogCQlpb21tdSA9IGRyaGQtPmlvbW11OworCisJCS8qCisJCSAqIElmIHRoZSBxdWV1ZWQgaW52YWxpZGF0aW9uIGlzIGFscmVhZHkgaW5pdGlhbGl6ZWQgYnkgdXMKKwkJICogKGZvciBleGFtcGxlLCB3aGlsZSBlbmFibGluZyBpbnRlcnJ1cHQtcmVtYXBwaW5nKSB0aGVuCisJCSAqIHdlIGdvdCB0aGUgdGhpbmdzIGFscmVhZHkgcm9sbGluZyBmcm9tIGEgc2FuZSBzdGF0ZS4KKwkJICovCisJCWlmIChpb21tdS0+cWkpCisJCQljb250aW51ZTsKKworCQkvKgorCQkgKiBDbGVhciBhbnkgcHJldmlvdXMgZmF1bHRzLgorCQkgKi8KKwkJZG1hcl9mYXVsdCgtMSwgaW9tbXUpOworCQkvKgorCQkgKiBEaXNhYmxlIHF1ZXVlZCBpbnZhbGlkYXRpb24gaWYgc3VwcG9ydGVkIGFuZCBhbHJlYWR5IGVuYWJsZWQKKwkJICogYmVmb3JlIE9TIGhhbmRvdmVyLgorCQkgKi8KKwkJZG1hcl9kaXNhYmxlX3FpKGlvbW11KTsKKwl9CisKKwlmb3JfZWFjaF9kcmhkX3VuaXQoZHJoZCkgeworCQlpZiAoZHJoZC0+aWdub3JlZCkKKwkJCWNvbnRpbnVlOworCisJCWlvbW11ID0gZHJoZC0+aW9tbXU7CisKIAkJaWYgKGRtYXJfZW5hYmxlX3FpKGlvbW11KSkgewogCQkJLyoKIAkJCSAqIFF1ZXVlZCBJbnZhbGlkYXRlIG5vdCBlbmFibGVkLCB1c2UgUmVnaXN0ZXIgQmFzZWQKQEAgLTIxMDksNyArMTk1MCw2IEBACiAJCWlmIChkcmhkLT5pZ25vcmVkKQogCQkJY29udGludWU7CiAJCWlvbW11ID0gZHJoZC0+aW9tbXU7Ci0JCXNwcmludGYgKGlvbW11LT5uYW1lLCAiZG1hciVkIiwgdW5pdCsrKTsKIAogCQlpb21tdV9mbHVzaF93cml0ZV9idWZmZXIoaW9tbXUpOwogCkBAIC0yMjg0LDExICsyMTI0LDEzIEBACiAJcmV0dXJuIDA7CiB9CiAKLWRtYV9hZGRyX3QgaW50ZWxfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgcGh5c19hZGRyX3QgcGFkZHIsCi0JCQkgICAgc2l6ZV90IHNpemUsIGludCBkaXIpCitzdGF0aWMgZG1hX2FkZHJfdCBpbnRlbF9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCQkgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7Ci0JcmV0dXJuIF9faW50ZWxfbWFwX3NpbmdsZShod2RldiwgcGFkZHIsIHNpemUsIGRpciwKLQkJCQkgIHRvX3BjaV9kZXYoaHdkZXYpLT5kbWFfbWFzayk7CisJcmV0dXJuIF9faW50ZWxfbWFwX3NpbmdsZShkZXYsIHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZnNldCwgc2l6ZSwKKwkJCQkgIGRpciwgdG9fcGNpX2RldihkZXYpLT5kbWFfbWFzayk7CiB9CiAKIHN0YXRpYyB2b2lkIGZsdXNoX3VubWFwcyh2b2lkKQpAQCAtMjM1Miw4ICsyMTk0LDkgQEAKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhc3luY191bWFwX2ZsdXNoX2xvY2ssIGZsYWdzKTsKIH0KIAotdm9pZCBpbnRlbF91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRldl9hZGRyLCBzaXplX3Qgc2l6ZSwKLQkJCWludCBkaXIpCitzdGF0aWMgdm9pZCBpbnRlbF91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKKwkJCSAgICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCSAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IGRtYXJfZG9tYWluICpkb21haW47CkBAIC0yMzk3LDggKzIyNDAsMTQgQEAKIAl9CiB9CiAKLXZvaWQgKmludGVsX2FsbG9jX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwKLQkJCSAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGZsYWdzKQorc3RhdGljIHZvaWQgaW50ZWxfdW5tYXBfc2luZ2xlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwgc2l6ZV90IHNpemUsCisJCQkgICAgICAgaW50IGRpcikKK3sKKwlpbnRlbF91bm1hcF9wYWdlKGRldiwgZGV2X2FkZHIsIHNpemUsIGRpciwgTlVMTCk7Cit9CisKK3N0YXRpYyB2b2lkICppbnRlbF9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc2l6ZV90IHNpemUsCisJCQkJICBkbWFfYWRkcl90ICpkbWFfaGFuZGxlLCBnZnBfdCBmbGFncykKIHsKIAl2b2lkICp2YWRkcjsKIAlpbnQgb3JkZXI7CkBAIC0yNDIxLDggKzIyNzAsOCBAQAogCXJldHVybiBOVUxMOwogfQogCi12b2lkIGludGVsX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqaHdkZXYsIHNpemVfdCBzaXplLCB2b2lkICp2YWRkciwKLQkJCSBkbWFfYWRkcl90IGRtYV9oYW5kbGUpCitzdGF0aWMgdm9pZCBpbnRlbF9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwgdm9pZCAqdmFkZHIsCisJCQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlKQogewogCWludCBvcmRlcjsKIApAQCAtMjQzNSw4ICsyMjg0LDkgQEAKIAogI2RlZmluZSBTR19FTlRfVklSVF9BRERSRVNTKHNnKQkoc2dfdmlydCgoc2cpKSkKIAotdm9pZCBpbnRlbF91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCi0JCSAgICBpbnQgbmVsZW1zLCBpbnQgZGlyKQorc3RhdGljIHZvaWQgaW50ZWxfdW5tYXBfc2coc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAorCQkJICAgaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJaW50IGk7CiAJc3RydWN0IHBjaV9kZXYgKnBkZXYgPSB0b19wY2lfZGV2KGh3ZGV2KTsKQEAgLTI0OTMsOCArMjM0Myw4IEBACiAJcmV0dXJuIG5lbGVtczsKIH0KIAotaW50IGludGVsX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsIGludCBuZWxlbXMsCi0JCSBpbnQgZGlyKQorc3RhdGljIGludCBpbnRlbF9tYXBfc2coc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LCBpbnQgbmVsZW1zLAorCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKIAl2b2lkICphZGRyOwogCWludCBpOwpAQCAtMjU3NCwxMyArMjQyNCwxOSBAQAogCXJldHVybiBuZWxlbXM7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgZG1hX21hcHBpbmdfb3BzIGludGVsX2RtYV9vcHMgPSB7CitzdGF0aWMgaW50IGludGVsX21hcHBpbmdfZXJyb3Ioc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKQoreworCXJldHVybiAhZG1hX2FkZHI7Cit9CisKK3N0cnVjdCBkbWFfbWFwX29wcyBpbnRlbF9kbWFfb3BzID0gewogCS5hbGxvY19jb2hlcmVudCA9IGludGVsX2FsbG9jX2NvaGVyZW50LAogCS5mcmVlX2NvaGVyZW50ID0gaW50ZWxfZnJlZV9jb2hlcmVudCwKLQkubWFwX3NpbmdsZSA9IGludGVsX21hcF9zaW5nbGUsCi0JLnVubWFwX3NpbmdsZSA9IGludGVsX3VubWFwX3NpbmdsZSwKIAkubWFwX3NnID0gaW50ZWxfbWFwX3NnLAogCS51bm1hcF9zZyA9IGludGVsX3VubWFwX3NnLAorCS5tYXBfcGFnZSA9IGludGVsX21hcF9wYWdlLAorCS51bm1hcF9wYWdlID0gaW50ZWxfdW5tYXBfcGFnZSwKKwkubWFwcGluZ19lcnJvciA9IGludGVsX21hcHBpbmdfZXJyb3IsCiB9OwogCiBzdGF0aWMgaW5saW5lIGludCBpb21tdV9kb21haW5fY2FjaGVfaW5pdCh2b2lkKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYyBiL2RyaXZlcnMvcGNpL2ludHJfcmVtYXBwaW5nLmMKaW5kZXggOWQwN2EwNS4uYjA0MWE0MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvaW50cl9yZW1hcHBpbmcuYworKysgYi9kcml2ZXJzL3BjaS9pbnRyX3JlbWFwcGluZy5jCkBAIC0xMTcsMjEgKzExNywyMiBAQAogewogCWludCBpbmRleDsKIAlzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV9pb21tdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFlbnRyeSkKIAkJcmV0dXJuIC0xOwogCi0Jc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCWlycV9pb21tdSA9IHZhbGlkX2lycV8yX2lvbW11KGlycSk7CiAJaWYgKCFpcnFfaW9tbXUpIHsKLQkJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtMTsKIAl9CiAKIAlpbmRleCA9IGlycV9pb21tdS0+aXJ0ZV9pbmRleCArIGlycV9pb21tdS0+c3ViX2hhbmRsZTsKIAkqZW50cnkgPSAqKGlycV9pb21tdS0+aW9tbXUtPmlyX3RhYmxlLT5iYXNlICsgaW5kZXgpOwogCi0Jc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTQxLDYgKzE0Miw3IEBACiAJc3RydWN0IGlycV8yX2lvbW11ICppcnFfaW9tbXU7CiAJdTE2IGluZGV4LCBzdGFydF9pbmRleDsKIAl1bnNpZ25lZCBpbnQgbWFzayA9IDA7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKIAlpbnQgaTsKIAogCWlmICghY291bnQpCkBAIC0xNzAsNyArMTcyLDcgQEAKIAkJcmV0dXJuIC0xOwogCX0KIAotCXNwaW5fbG9jaygmaXJxXzJfaXJfbG9jayk7CisJc3Bpbl9sb2NrX2lycXNhdmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAlkbyB7CiAJCWZvciAoaSA9IGluZGV4OyBpIDwgaW5kZXggKyBjb3VudDsgaSsrKQogCQkJaWYgICh0YWJsZS0+YmFzZVtpXS5wcmVzZW50KQpAQCAtMTgyLDcgKzE4NCw3IEBACiAJCWluZGV4ID0gKGluZGV4ICsgY291bnQpICUgSU5UUl9SRU1BUF9UQUJMRV9FTlRSSUVTOwogCiAJCWlmIChpbmRleCA9PSBzdGFydF9pbmRleCkgewotCQkJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOworCQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCQkJcHJpbnRrKEtFUk5fRVJSICJjYW4ndCBhbGxvY2F0ZSBhbiBJUlRFXG4iKTsKIAkJCXJldHVybiAtMTsKIAkJfQpAQCAtMTkzLDcgKzE5NSw3IEBACiAKIAlpcnFfaW9tbXUgPSBpcnFfMl9pb21tdV9hbGxvYyhpcnEpOwogCWlmICghaXJxX2lvbW11KSB7Ci0JCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGFsbG9jYXRlIGlycV8yX2lvbW11XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTIwMyw3ICsyMDUsNyBAQAogCWlycV9pb21tdS0+c3ViX2hhbmRsZSA9IDA7CiAJaXJxX2lvbW11LT5pcnRlX21hc2sgPSBtYXNrOwogCi0Jc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiBpbmRleDsKIH0KQEAgLTIyMywzMCArMjI1LDMyIEBACiB7CiAJaW50IGluZGV4OwogCXN0cnVjdCBpcnFfMl9pb21tdSAqaXJxX2lvbW11OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2soJmlycV8yX2lyX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAJaXJxX2lvbW11ID0gdmFsaWRfaXJxXzJfaW9tbXUoaXJxKTsKIAlpZiAoIWlycV9pb21tdSkgewotCQlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIC0xOwogCX0KIAogCSpzdWJfaGFuZGxlID0gaXJxX2lvbW11LT5zdWJfaGFuZGxlOwogCWluZGV4ID0gaXJxX2lvbW11LT5pcnRlX2luZGV4OwotCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAJcmV0dXJuIGluZGV4OwogfQogCiBpbnQgc2V0X2lydGVfaXJxKGludCBpcnEsIHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUsIHUxNiBpbmRleCwgdTE2IHN1YmhhbmRsZSkKIHsKIAlzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV9pb21tdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCiAJaXJxX2lvbW11ID0gaXJxXzJfaW9tbXVfYWxsb2MoaXJxKTsKIAogCWlmICghaXJxX2lvbW11KSB7Ci0JCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCQlwcmludGsoS0VSTl9FUlIgImNhbid0IGFsbG9jYXRlIGlycV8yX2lvbW11XG4iKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTI1Niw3ICsyNjAsNyBAQAogCWlycV9pb21tdS0+c3ViX2hhbmRsZSA9IHN1YmhhbmRsZTsKIAlpcnFfaW9tbXUtPmlydGVfbWFzayA9IDA7CiAKLQlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIDA7CiB9CkBAIC0yNjQsMTEgKzI2OCwxMiBAQAogaW50IGNsZWFyX2lydGVfaXJxKGludCBpcnEsIHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUsIHUxNiBpbmRleCkKIHsKIAlzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV9pb21tdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCWlycV9pb21tdSA9IHZhbGlkX2lycV8yX2lvbW11KGlycSk7CiAJaWYgKCFpcnFfaW9tbXUpIHsKLQkJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTI3Nyw3ICsyODIsNyBAQAogCWlycV9pb21tdS0+c3ViX2hhbmRsZSA9IDA7CiAJaXJxXzJfaW9tbXUoaXJxKS0+aXJ0ZV9tYXNrID0gMDsKIAotCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTI4OSwxMSArMjk0LDEyIEBACiAJc3RydWN0IGlydGUgKmlydGU7CiAJc3RydWN0IGludGVsX2lvbW11ICppb21tdTsKIAlzdHJ1Y3QgaXJxXzJfaW9tbXUgKmlycV9pb21tdTsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCi0Jc3Bpbl9sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwlzcGluX2xvY2tfaXJxc2F2ZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCWlycV9pb21tdSA9IHZhbGlkX2lycV8yX2lvbW11KGlycSk7CiAJaWYgKCFpcnFfaW9tbXUpIHsKLQkJc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAJCXJldHVybiAtMTsKIAl9CiAKQEAgLTMwMiwxMSArMzA4LDExIEBACiAJaW5kZXggPSBpcnFfaW9tbXUtPmlydGVfaW5kZXggKyBpcnFfaW9tbXUtPnN1Yl9oYW5kbGU7CiAJaXJ0ZSA9ICZpb21tdS0+aXJfdGFibGUtPmJhc2VbaW5kZXhdOwogCi0Jc2V0XzY0Yml0KCh1bnNpZ25lZCBsb25nICopaXJ0ZSwgaXJ0ZV9tb2RpZmllZC0+bG93IHwgKDEgPDwgMSkpOworCXNldF82NGJpdCgodW5zaWduZWQgbG9uZyAqKWlydGUsIGlydGVfbW9kaWZpZWQtPmxvdyk7CiAJX19pb21tdV9mbHVzaF9jYWNoZShpb21tdSwgaXJ0ZSwgc2l6ZW9mKCppcnRlKSk7CiAKIAlyYyA9IHFpX2ZsdXNoX2llYyhpb21tdSwgaW5kZXgsIDApOwotCXNwaW5fdW5sb2NrKCZpcnFfMl9pcl9sb2NrKTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAKIAlyZXR1cm4gcmM7CiB9CkBAIC0zMTcsMTEgKzMyMywxMiBAQAogCWludCBpbmRleDsKIAlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11OwogCXN0cnVjdCBpcnFfMl9pb21tdSAqaXJxX2lvbW11OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2soJmlycV8yX2lyX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAJaXJxX2lvbW11ID0gdmFsaWRfaXJxXzJfaW9tbXUoaXJxKTsKIAlpZiAoIWlycV9pb21tdSkgewotCQlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMzMwLDcgKzMzNyw3IEBACiAJaW5kZXggPSBpcnFfaW9tbXUtPmlydGVfaW5kZXggKyBpcnFfaW9tbXUtPnN1Yl9oYW5kbGU7CiAKIAlyYyA9IHFpX2ZsdXNoX2llYyhpb21tdSwgaW5kZXgsIGlycV9pb21tdS0+aXJ0ZV9tYXNrKTsKLQlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaXJxXzJfaXJfbG9jaywgZmxhZ3MpOwogCiAJcmV0dXJuIHJjOwogfQpAQCAtMzYzLDExICszNzAsMTIgQEAKIAlzdHJ1Y3QgaXJ0ZSAqaXJ0ZTsKIAlzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11OwogCXN0cnVjdCBpcnFfMl9pb21tdSAqaXJxX2lvbW11OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKLQlzcGluX2xvY2soJmlycV8yX2lyX2xvY2spOworCXNwaW5fbG9ja19pcnFzYXZlKCZpcnFfMl9pcl9sb2NrLCBmbGFncyk7CiAJaXJxX2lvbW11ID0gdmFsaWRfaXJxXzJfaW9tbXUoaXJxKTsKIAlpZiAoIWlycV9pb21tdSkgewotCQlzcGluX3VubG9jaygmaXJxXzJfaXJfbG9jayk7CisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAkJcmV0dXJuIC0xOwogCX0KIApAQCAtMzc4LDcgKzM4Niw3IEBACiAKIAlpZiAoIWlycV9pb21tdS0+c3ViX2hhbmRsZSkgewogCQlmb3IgKGkgPSAwOyBpIDwgKDEgPDwgaXJxX2lvbW11LT5pcnRlX21hc2spOyBpKyspCi0JCQlzZXRfNjRiaXQoKHVuc2lnbmVkIGxvbmcgKilpcnRlLCAwKTsKKwkJCXNldF82NGJpdCgodW5zaWduZWQgbG9uZyAqKShpcnRlICsgaSksIDApOwogCQlyYyA9IHFpX2ZsdXNoX2llYyhpb21tdSwgaW5kZXgsIGlycV9pb21tdS0+aXJ0ZV9tYXNrKTsKIAl9CiAKQEAgLTM4Nyw3ICszOTUsNyBAQAogCWlycV9pb21tdS0+c3ViX2hhbmRsZSA9IDA7CiAJaXJxX2lvbW11LT5pcnRlX21hc2sgPSAwOwogCi0Jc3Bpbl91bmxvY2soJmlycV8yX2lyX2xvY2spOworCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmlycV8yX2lyX2xvY2ssIGZsYWdzKTsKIAogCXJldHVybiByYzsKIH0KQEAgLTQzOSwxMiArNDQ3LDEyIEBACiAJc3RydWN0IHBhZ2UgKnBhZ2VzOwogCiAJaXJfdGFibGUgPSBpb21tdS0+aXJfdGFibGUgPSBremFsbG9jKHNpemVvZihzdHJ1Y3QgaXJfdGFibGUpLAotCQkJCQkgICAgIEdGUF9LRVJORUwpOworCQkJCQkgICAgIEdGUF9BVE9NSUMpOwogCiAJaWYgKCFpb21tdS0+aXJfdGFibGUpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JcGFnZXMgPSBhbGxvY19wYWdlcyhHRlBfS0VSTkVMIHwgX19HRlBfWkVSTywgSU5UUl9SRU1BUF9QQUdFX09SREVSKTsKKwlwYWdlcyA9IGFsbG9jX3BhZ2VzKEdGUF9BVE9NSUMgfCBfX0dGUF9aRVJPLCBJTlRSX1JFTUFQX1BBR0VfT1JERVIpOwogCiAJaWYgKCFwYWdlcykgewogCQlwcmludGsoS0VSTl9FUlIgImZhaWxlZCB0byBhbGxvY2F0ZSBwYWdlcyBvZiBvcmRlciAlZFxuIiwKQEAgLTQ1OSwxMSArNDY3LDU1IEBACiAJcmV0dXJuIDA7CiB9CiAKKy8qCisgKiBEaXNhYmxlIEludGVycnVwdCBSZW1hcHBpbmcuCisgKi8KK3N0YXRpYyB2b2lkIGRpc2FibGVfaW50cl9yZW1hcHBpbmcoc3RydWN0IGludGVsX2lvbW11ICppb21tdSkKK3sKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCXUzMiBzdHM7CisKKwlpZiAoIWVjYXBfaXJfc3VwcG9ydChpb21tdS0+ZWNhcCkpCisJCXJldHVybjsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZpb21tdS0+cmVnaXN0ZXJfbG9jaywgZmxhZ3MpOworCisJc3RzID0gZG1hcl9yZWFkcShpb21tdS0+cmVnICsgRE1BUl9HU1RTX1JFRyk7CisJaWYgKCEoc3RzICYgRE1BX0dTVFNfSVJFUykpCisJCWdvdG8gZW5kOworCisJaW9tbXUtPmdjbWQgJj0gfkRNQV9HQ01EX0lSRTsKKwl3cml0ZWwoaW9tbXUtPmdjbWQsIGlvbW11LT5yZWcgKyBETUFSX0dDTURfUkVHKTsKKworCUlPTU1VX1dBSVRfT1AoaW9tbXUsIERNQVJfR1NUU19SRUcsCisJCSAgICAgIHJlYWRsLCAhKHN0cyAmIERNQV9HU1RTX0lSRVMpLCBzdHMpOworCitlbmQ6CisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmaW9tbXUtPnJlZ2lzdGVyX2xvY2ssIGZsYWdzKTsKK30KKwogaW50IF9faW5pdCBlbmFibGVfaW50cl9yZW1hcHBpbmcoaW50IGVpbSkKIHsKIAlzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKmRyaGQ7CiAJaW50IHNldHVwID0gMDsKIAorCWZvcl9lYWNoX2RyaGRfdW5pdChkcmhkKSB7CisJCXN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUgPSBkcmhkLT5pb21tdTsKKworCQkvKgorCQkgKiBDbGVhciBwcmV2aW91cyBmYXVsdHMuCisJCSAqLworCQlkbWFyX2ZhdWx0KC0xLCBpb21tdSk7CisKKwkJLyoKKwkJICogRGlzYWJsZSBpbnRyIHJlbWFwcGluZyBhbmQgcXVldWVkIGludmFsaWRhdGlvbiwgaWYgYWxyZWFkeQorCQkgKiBlbmFibGVkIHByaW9yIHRvIE9TIGhhbmRvdmVyLgorCQkgKi8KKwkJZGlzYWJsZV9pbnRyX3JlbWFwcGluZyhpb21tdSk7CisKKwkJZG1hcl9kaXNhYmxlX3FpKGlvbW11KTsKKwl9CisKIAkvKgogCSAqIGNoZWNrIGZvciB0aGUgSW50ZXJydXB0LXJlbWFwcGluZyBzdXBwb3J0CiAJICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMgYi9kcml2ZXJzL3BjaS9wY2ktZHJpdmVyLmMKaW5kZXggOTNlYWMxNC4uMjY3ZGU4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLWRyaXZlci5jCisrKyBiL2RyaXZlcnMvcGNpL3BjaS1kcml2ZXIuYwpAQCAtMzUyLDUzICszNTIsNjAgQEAKIHsKIAlzdHJ1Y3QgcGNpX2RldiAqIHBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IHBjaV9kcml2ZXIgKiBkcnYgPSBwY2lfZGV2LT5kcml2ZXI7Ci0JaW50IGkgPSAwOworCisJcGNpX2Rldi0+c3RhdGVfc2F2ZWQgPSBmYWxzZTsKIAogCWlmIChkcnYgJiYgZHJ2LT5zdXNwZW5kKSB7CiAJCXBjaV9wb3dlcl90IHByZXYgPSBwY2lfZGV2LT5jdXJyZW50X3N0YXRlOworCQlpbnQgZXJyb3I7CiAKLQkJcGNpX2Rldi0+c3RhdGVfc2F2ZWQgPSBmYWxzZTsKKwkJZXJyb3IgPSBkcnYtPnN1c3BlbmQocGNpX2Rldiwgc3RhdGUpOworCQlzdXNwZW5kX3JlcG9ydF9yZXN1bHQoZHJ2LT5zdXNwZW5kLCBlcnJvcik7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKIAotCQlpID0gZHJ2LT5zdXNwZW5kKHBjaV9kZXYsIHN0YXRlKTsKLQkJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGRydi0+c3VzcGVuZCwgaSk7Ci0JCWlmIChpKQotCQkJcmV0dXJuIGk7Ci0KLQkJaWYgKHBjaV9kZXYtPnN0YXRlX3NhdmVkKQotCQkJZ290byBGaXh1cDsKLQotCQlpZiAocGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfRDAKKwkJaWYgKCFwY2lfZGV2LT5zdGF0ZV9zYXZlZCAmJiBwY2lfZGV2LT5jdXJyZW50X3N0YXRlICE9IFBDSV9EMAogCQkgICAgJiYgcGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfVU5LTk9XTikgewogCQkJV0FSTl9PTkNFKHBjaV9kZXYtPmN1cnJlbnRfc3RhdGUgIT0gcHJldiwKIAkJCQkiUENJIFBNOiBEZXZpY2Ugc3RhdGUgbm90IHNhdmVkIGJ5ICVwRlxuIiwKIAkJCQlkcnYtPnN1c3BlbmQpOwotCQkJZ290byBGaXh1cDsKIAkJfQogCX0KIAotCXBjaV9zYXZlX3N0YXRlKHBjaV9kZXYpOwotCS8qCi0JICogVGhpcyBpcyBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIGV4aXN0aW5nIGNvZGUgd2l0aCBsZWdhY3kgUE0gc3VwcG9ydC4KLQkgKi8KLQlwY2lfcG1fc2V0X3Vua25vd25fc3RhdGUocGNpX2Rldik7Ci0KLSBGaXh1cDoKIAlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9zdXNwZW5kLCBwY2lfZGV2KTsKIAotCXJldHVybiBpOworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHBjaV9sZWdhY3lfc3VzcGVuZF9sYXRlKHN0cnVjdCBkZXZpY2UgKmRldiwgcG1fbWVzc2FnZV90IHN0YXRlKQogewogCXN0cnVjdCBwY2lfZGV2ICogcGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTsKIAlzdHJ1Y3QgcGNpX2RyaXZlciAqIGRydiA9IHBjaV9kZXYtPmRyaXZlcjsKLQlpbnQgaSA9IDA7CiAKIAlpZiAoZHJ2ICYmIGRydi0+c3VzcGVuZF9sYXRlKSB7Ci0JCWkgPSBkcnYtPnN1c3BlbmRfbGF0ZShwY2lfZGV2LCBzdGF0ZSk7Ci0JCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChkcnYtPnN1c3BlbmRfbGF0ZSwgaSk7CisJCXBjaV9wb3dlcl90IHByZXYgPSBwY2lfZGV2LT5jdXJyZW50X3N0YXRlOworCQlpbnQgZXJyb3I7CisKKwkJZXJyb3IgPSBkcnYtPnN1c3BlbmRfbGF0ZShwY2lfZGV2LCBzdGF0ZSk7CisJCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChkcnYtPnN1c3BlbmRfbGF0ZSwgZXJyb3IpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisKKwkJaWYgKCFwY2lfZGV2LT5zdGF0ZV9zYXZlZCAmJiBwY2lfZGV2LT5jdXJyZW50X3N0YXRlICE9IFBDSV9EMAorCQkgICAgJiYgcGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfVU5LTk9XTikgeworCQkJV0FSTl9PTkNFKHBjaV9kZXYtPmN1cnJlbnRfc3RhdGUgIT0gcHJldiwKKwkJCQkiUENJIFBNOiBEZXZpY2Ugc3RhdGUgbm90IHNhdmVkIGJ5ICVwRlxuIiwKKwkJCQlkcnYtPnN1c3BlbmRfbGF0ZSk7CisJCQlyZXR1cm4gMDsKKwkJfQogCX0KLQlyZXR1cm4gaTsKKworCWlmICghcGNpX2Rldi0+c3RhdGVfc2F2ZWQpCisJCXBjaV9zYXZlX3N0YXRlKHBjaV9kZXYpOworCisJcGNpX3BtX3NldF91bmtub3duX3N0YXRlKHBjaV9kZXYpOworCisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcGNpX2xlZ2FjeV9yZXN1bWVfZWFybHkoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtNDIzLDYgKzQzMCwyMyBAQAogCiAvKiBBdXhpbGlhcnkgZnVuY3Rpb25zIHVzZWQgYnkgdGhlIG5ldyBwb3dlciBtYW5hZ2VtZW50IGZyYW1ld29yayAqLwogCisvKioKKyAqIHBjaV9yZXN0b3JlX3N0YW5kYXJkX2NvbmZpZyAtIHJlc3RvcmUgc3RhbmRhcmQgY29uZmlnIHJlZ2lzdGVycyBvZiBQQ0kgZGV2aWNlCisgKiBAcGNpX2RldjogUENJIGRldmljZSB0byBoYW5kbGUKKyAqLworc3RhdGljIGludCBwY2lfcmVzdG9yZV9zdGFuZGFyZF9jb25maWcoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCit7CisJcGNpX3VwZGF0ZV9jdXJyZW50X3N0YXRlKHBjaV9kZXYsIFBDSV9VTktOT1dOKTsKKworCWlmIChwY2lfZGV2LT5jdXJyZW50X3N0YXRlICE9IFBDSV9EMCkgeworCQlpbnQgZXJyb3IgPSBwY2lfc2V0X3Bvd2VyX3N0YXRlKHBjaV9kZXYsIFBDSV9EMCk7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKKwl9CisKKwlyZXR1cm4gcGNpX2Rldi0+c3RhdGVfc2F2ZWQgPyBwY2lfcmVzdG9yZV9zdGF0ZShwY2lfZGV2KSA6IDA7Cit9CisKIHN0YXRpYyB2b2lkIHBjaV9wbV9kZWZhdWx0X3Jlc3VtZV9ub2lycShzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldikKIHsKIAlwY2lfcmVzdG9yZV9zdGFuZGFyZF9jb25maWcocGNpX2Rldik7CkBAIC00NDMsNyArNDY3LDYgQEAKIAkvKiBEaXNhYmxlIG5vbi1icmlkZ2UgZGV2aWNlcyB3aXRob3V0IFBNIHN1cHBvcnQgKi8KIAlpZiAoIXBjaV9pc19icmlkZ2UocGNpX2RldikpCiAJCXBjaV9kaXNhYmxlX2VuYWJsZWRfZGV2aWNlKHBjaV9kZXYpOwotCXBjaV9zYXZlX3N0YXRlKHBjaV9kZXYpOwogfQogCiBzdGF0aWMgYm9vbCBwY2lfaGFzX2xlZ2FjeV9wbV9zdXBwb3J0KHN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2KQpAQCAtNDkzLDEzICs1MTYsMTMgQEAKIAlpZiAocGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydChwY2lfZGV2KSkKIAkJcmV0dXJuIHBjaV9sZWdhY3lfc3VzcGVuZChkZXYsIFBNU0dfU1VTUEVORCk7CiAKKwlwY2lfZGV2LT5zdGF0ZV9zYXZlZCA9IGZhbHNlOworCiAJaWYgKCFwbSkgewogCQlwY2lfcG1fZGVmYXVsdF9zdXNwZW5kKHBjaV9kZXYpOwogCQlnb3RvIEZpeHVwOwogCX0KIAotCXBjaV9kZXYtPnN0YXRlX3NhdmVkID0gZmFsc2U7Ci0KIAlpZiAocG0tPnN1c3BlbmQpIHsKIAkJcGNpX3Bvd2VyX3QgcHJldiA9IHBjaV9kZXYtPmN1cnJlbnRfc3RhdGU7CiAJCWludCBlcnJvcjsKQEAgLTUwOSwyNCArNTMyLDE0IEBACiAJCWlmIChlcnJvcikKIAkJCXJldHVybiBlcnJvcjsKIAotCQlpZiAocGNpX2Rldi0+c3RhdGVfc2F2ZWQpCi0JCQlnb3RvIEZpeHVwOwotCi0JCWlmIChwY2lfZGV2LT5jdXJyZW50X3N0YXRlICE9IFBDSV9EMAorCQlpZiAoIXBjaV9kZXYtPnN0YXRlX3NhdmVkICYmIHBjaV9kZXYtPmN1cnJlbnRfc3RhdGUgIT0gUENJX0QwCiAJCSAgICAmJiBwY2lfZGV2LT5jdXJyZW50X3N0YXRlICE9IFBDSV9VTktOT1dOKSB7CiAJCQlXQVJOX09OQ0UocGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBwcmV2LAogCQkJCSJQQ0kgUE06IFN0YXRlIG9mIGRldmljZSBub3Qgc2F2ZWQgYnkgJXBGXG4iLAogCQkJCXBtLT5zdXNwZW5kKTsKLQkJCWdvdG8gRml4dXA7CiAJCX0KIAl9CiAKLQlpZiAoIXBjaV9kZXYtPnN0YXRlX3NhdmVkKSB7Ci0JCXBjaV9zYXZlX3N0YXRlKHBjaV9kZXYpOwotCQlpZiAoIXBjaV9pc19icmlkZ2UocGNpX2RldikpCi0JCQlwY2lfcHJlcGFyZV90b19zbGVlcChwY2lfZGV2KTsKLQl9Ci0KICBGaXh1cDoKIAlwY2lfZml4dXBfZGV2aWNlKHBjaV9maXh1cF9zdXNwZW5kLCBwY2lfZGV2KTsKIApAQCAtNTM2LDIxICs1NDksNDMgQEAKIHN0YXRpYyBpbnQgcGNpX3BtX3N1c3BlbmRfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQogewogCXN0cnVjdCBwY2lfZGV2ICpwY2lfZGV2ID0gdG9fcGNpX2RldihkZXYpOwotCXN0cnVjdCBkZXZpY2VfZHJpdmVyICpkcnYgPSBkZXYtPmRyaXZlcjsKLQlpbnQgZXJyb3IgPSAwOworCXN0cnVjdCBkZXZfcG1fb3BzICpwbSA9IGRldi0+ZHJpdmVyID8gZGV2LT5kcml2ZXItPnBtIDogTlVMTDsKIAogCWlmIChwY2lfaGFzX2xlZ2FjeV9wbV9zdXBwb3J0KHBjaV9kZXYpKQogCQlyZXR1cm4gcGNpX2xlZ2FjeV9zdXNwZW5kX2xhdGUoZGV2LCBQTVNHX1NVU1BFTkQpOwogCi0JaWYgKGRydiAmJiBkcnYtPnBtICYmIGRydi0+cG0tPnN1c3BlbmRfbm9pcnEpIHsKLQkJZXJyb3IgPSBkcnYtPnBtLT5zdXNwZW5kX25vaXJxKGRldik7Ci0JCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChkcnYtPnBtLT5zdXNwZW5kX25vaXJxLCBlcnJvcik7CisJaWYgKCFwbSkgeworCQlwY2lfc2F2ZV9zdGF0ZShwY2lfZGV2KTsKKwkJcmV0dXJuIDA7CiAJfQogCi0JaWYgKCFlcnJvcikKLQkJcGNpX3BtX3NldF91bmtub3duX3N0YXRlKHBjaV9kZXYpOworCWlmIChwbS0+c3VzcGVuZF9ub2lycSkgeworCQlwY2lfcG93ZXJfdCBwcmV2ID0gcGNpX2Rldi0+Y3VycmVudF9zdGF0ZTsKKwkJaW50IGVycm9yOwogCi0JcmV0dXJuIGVycm9yOworCQllcnJvciA9IHBtLT5zdXNwZW5kX25vaXJxKGRldik7CisJCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChwbS0+c3VzcGVuZF9ub2lycSwgZXJyb3IpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CisKKwkJaWYgKCFwY2lfZGV2LT5zdGF0ZV9zYXZlZCAmJiBwY2lfZGV2LT5jdXJyZW50X3N0YXRlICE9IFBDSV9EMAorCQkgICAgJiYgcGNpX2Rldi0+Y3VycmVudF9zdGF0ZSAhPSBQQ0lfVU5LTk9XTikgeworCQkJV0FSTl9PTkNFKHBjaV9kZXYtPmN1cnJlbnRfc3RhdGUgIT0gcHJldiwKKwkJCQkiUENJIFBNOiBTdGF0ZSBvZiBkZXZpY2Ugbm90IHNhdmVkIGJ5ICVwRlxuIiwKKwkJCQlwbS0+c3VzcGVuZF9ub2lycSk7CisJCQlyZXR1cm4gMDsKKwkJfQorCX0KKworCWlmICghcGNpX2Rldi0+c3RhdGVfc2F2ZWQpIHsKKwkJcGNpX3NhdmVfc3RhdGUocGNpX2Rldik7CisJCWlmICghcGNpX2lzX2JyaWRnZShwY2lfZGV2KSkKKwkJCXBjaV9wcmVwYXJlX3RvX3NsZWVwKHBjaV9kZXYpOworCX0KKworCXBjaV9wbV9zZXRfdW5rbm93bl9zdGF0ZShwY2lfZGV2KTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHBjaV9wbV9yZXN1bWVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtNjE3LDEzICs2NTIsMTMgQEAKIAlpZiAocGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydChwY2lfZGV2KSkKIAkJcmV0dXJuIHBjaV9sZWdhY3lfc3VzcGVuZChkZXYsIFBNU0dfRlJFRVpFKTsKIAorCXBjaV9kZXYtPnN0YXRlX3NhdmVkID0gZmFsc2U7CisKIAlpZiAoIXBtKSB7CiAJCXBjaV9wbV9kZWZhdWx0X3N1c3BlbmQocGNpX2Rldik7CiAJCXJldHVybiAwOwogCX0KIAotCXBjaV9kZXYtPnN0YXRlX3NhdmVkID0gZmFsc2U7Ci0KIAlpZiAocG0tPmZyZWV6ZSkgewogCQlpbnQgZXJyb3I7CiAKQEAgLTYzMyw5ICs2NjgsNiBAQAogCQkJcmV0dXJuIGVycm9yOwogCX0KIAotCWlmICghcGNpX2Rldi0+c3RhdGVfc2F2ZWQpCi0JCXBjaV9zYXZlX3N0YXRlKHBjaV9kZXYpOwotCiAJcmV0dXJuIDA7CiB9CiAKQEAgLTY0MywyMCArNjc1LDI1IEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IGRldi0+ZHJpdmVyOwotCWludCBlcnJvciA9IDA7CiAKIAlpZiAocGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydChwY2lfZGV2KSkKIAkJcmV0dXJuIHBjaV9sZWdhY3lfc3VzcGVuZF9sYXRlKGRldiwgUE1TR19GUkVFWkUpOwogCiAJaWYgKGRydiAmJiBkcnYtPnBtICYmIGRydi0+cG0tPmZyZWV6ZV9ub2lycSkgeworCQlpbnQgZXJyb3I7CisKIAkJZXJyb3IgPSBkcnYtPnBtLT5mcmVlemVfbm9pcnEoZGV2KTsKIAkJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGRydi0+cG0tPmZyZWV6ZV9ub2lycSwgZXJyb3IpOworCQlpZiAoZXJyb3IpCisJCQlyZXR1cm4gZXJyb3I7CiAJfQogCi0JaWYgKCFlcnJvcikKLQkJcGNpX3BtX3NldF91bmtub3duX3N0YXRlKHBjaV9kZXYpOworCWlmICghcGNpX2Rldi0+c3RhdGVfc2F2ZWQpCisJCXBjaV9zYXZlX3N0YXRlKHBjaV9kZXYpOwogCi0JcmV0dXJuIGVycm9yOworCXBjaV9wbV9zZXRfdW5rbm93bl9zdGF0ZShwY2lfZGV2KTsKKworCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW50IHBjaV9wbV90aGF3X25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKQEAgLTY5OSw0NiArNzM2LDU2IEBACiB7CiAJc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYgPSB0b19wY2lfZGV2KGRldik7CiAJc3RydWN0IGRldl9wbV9vcHMgKnBtID0gZGV2LT5kcml2ZXIgPyBkZXYtPmRyaXZlci0+cG0gOiBOVUxMOwotCWludCBlcnJvciA9IDA7CiAKIAlpZiAocGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydChwY2lfZGV2KSkKIAkJcmV0dXJuIHBjaV9sZWdhY3lfc3VzcGVuZChkZXYsIFBNU0dfSElCRVJOQVRFKTsKIAorCXBjaV9kZXYtPnN0YXRlX3NhdmVkID0gZmFsc2U7CisKIAlpZiAoIXBtKSB7CiAJCXBjaV9wbV9kZWZhdWx0X3N1c3BlbmQocGNpX2Rldik7CiAJCWdvdG8gRml4dXA7CiAJfQogCi0JcGNpX2Rldi0+c3RhdGVfc2F2ZWQgPSBmYWxzZTsKLQogCWlmIChwbS0+cG93ZXJvZmYpIHsKKwkJaW50IGVycm9yOworCiAJCWVycm9yID0gcG0tPnBvd2Vyb2ZmKGRldik7CiAJCXN1c3BlbmRfcmVwb3J0X3Jlc3VsdChwbS0+cG93ZXJvZmYsIGVycm9yKTsKKwkJaWYgKGVycm9yKQorCQkJcmV0dXJuIGVycm9yOworCX0KKworIEZpeHVwOgorCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX3N1c3BlbmQsIHBjaV9kZXYpOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGNpX3BtX3Bvd2Vyb2ZmX25vaXJxKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKKwlzdHJ1Y3QgcGNpX2RldiAqcGNpX2RldiA9IHRvX3BjaV9kZXYoZGV2KTsKKwlzdHJ1Y3QgZGV2aWNlX2RyaXZlciAqZHJ2ID0gZGV2LT5kcml2ZXI7CisKKwlpZiAocGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydCh0b19wY2lfZGV2KGRldikpKQorCQlyZXR1cm4gcGNpX2xlZ2FjeV9zdXNwZW5kX2xhdGUoZGV2LCBQTVNHX0hJQkVSTkFURSk7CisKKwlpZiAoIWRydiB8fCAhZHJ2LT5wbSkKKwkJcmV0dXJuIDA7CisKKwlpZiAoZHJ2LT5wbS0+cG93ZXJvZmZfbm9pcnEpIHsKKwkJaW50IGVycm9yOworCisJCWVycm9yID0gZHJ2LT5wbS0+cG93ZXJvZmZfbm9pcnEoZGV2KTsKKwkJc3VzcGVuZF9yZXBvcnRfcmVzdWx0KGRydi0+cG0tPnBvd2Vyb2ZmX25vaXJxLCBlcnJvcik7CisJCWlmIChlcnJvcikKKwkJCXJldHVybiBlcnJvcjsKIAl9CiAKIAlpZiAoIXBjaV9kZXYtPnN0YXRlX3NhdmVkICYmICFwY2lfaXNfYnJpZGdlKHBjaV9kZXYpKQogCQlwY2lfcHJlcGFyZV90b19zbGVlcChwY2lfZGV2KTsKIAotIEZpeHVwOgotCXBjaV9maXh1cF9kZXZpY2UocGNpX2ZpeHVwX3N1c3BlbmQsIHBjaV9kZXYpOwotCi0JcmV0dXJuIGVycm9yOwotfQotCi1zdGF0aWMgaW50IHBjaV9wbV9wb3dlcm9mZl9ub2lycShzdHJ1Y3QgZGV2aWNlICpkZXYpCi17Ci0Jc3RydWN0IGRldmljZV9kcml2ZXIgKmRydiA9IGRldi0+ZHJpdmVyOwotCWludCBlcnJvciA9IDA7Ci0KLQlpZiAocGNpX2hhc19sZWdhY3lfcG1fc3VwcG9ydCh0b19wY2lfZGV2KGRldikpKQotCQlyZXR1cm4gcGNpX2xlZ2FjeV9zdXNwZW5kX2xhdGUoZGV2LCBQTVNHX0hJQkVSTkFURSk7Ci0KLQlpZiAoZHJ2ICYmIGRydi0+cG0gJiYgZHJ2LT5wbS0+cG93ZXJvZmZfbm9pcnEpIHsKLQkJZXJyb3IgPSBkcnYtPnBtLT5wb3dlcm9mZl9ub2lycShkZXYpOwotCQlzdXNwZW5kX3JlcG9ydF9yZXN1bHQoZHJ2LT5wbS0+cG93ZXJvZmZfbm9pcnEsIGVycm9yKTsKLQl9Ci0KLQlyZXR1cm4gZXJyb3I7CisJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgcGNpX3BtX3Jlc3RvcmVfbm9pcnEoc3RydWN0IGRldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9wY2kvcGNpLmMgYi9kcml2ZXJzL3BjaS9wY2kuYwppbmRleCA2ZDYxMjAwLi4wMTk1MDY2IDEwMDY0NAotLS0gYS9kcml2ZXJzL3BjaS9wY2kuYworKysgYi9kcml2ZXJzL3BjaS9wY2kuYwpAQCAtNDI2LDcgKzQyNiw2IEBACiAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGdpdmVuIFBDSSBkZXZpY2UKICAqIEBkZXY6IFBDSSBkZXZpY2UgdG8gaGFuZGxlLgogICogQHN0YXRlOiBQQ0kgcG93ZXIgc3RhdGUgKEQwLCBEMSwgRDIsIEQzaG90KSB0byBwdXQgdGhlIGRldmljZSBpbnRvLgotICogQHdhaXQ6IElmICd0cnVlJywgd2FpdCBmb3IgdGhlIGRldmljZSB0byBjaGFuZ2UgaXRzIHBvd2VyIHN0YXRlCiAgKgogICogUkVUVVJOIFZBTFVFOgogICogLUVJTlZBTCBpZiB0aGUgcmVxdWVzdGVkIHN0YXRlIGlzIGludmFsaWQuCkBAIC00MzUsMTIgKzQzNCwxNSBAQAogICogMCBpZiBkZXZpY2UgYWxyZWFkeSBpcyBpbiB0aGUgcmVxdWVzdGVkIHN0YXRlLgogICogMCBpZiBkZXZpY2UncyBwb3dlciBzdGF0ZSBoYXMgYmVlbiBzdWNjZXNzZnVsbHkgY2hhbmdlZC4KICAqLwotc3RhdGljIGludAotcGNpX3Jhd19zZXRfcG93ZXJfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldiwgcGNpX3Bvd2VyX3Qgc3RhdGUsIGJvb2wgd2FpdCkKK3N0YXRpYyBpbnQgcGNpX3Jhd19zZXRfcG93ZXJfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldiwgcGNpX3Bvd2VyX3Qgc3RhdGUpCiB7CiAJdTE2IHBtY3NyOwogCWJvb2wgbmVlZF9yZXN0b3JlID0gZmFsc2U7CiAKKwkvKiBDaGVjayBpZiB3ZSdyZSBhbHJlYWR5IHRoZXJlICovCisJaWYgKGRldi0+Y3VycmVudF9zdGF0ZSA9PSBzdGF0ZSkKKwkJcmV0dXJuIDA7CisKIAlpZiAoIWRldi0+cG1fY2FwKQogCQlyZXR1cm4gLUVJTzsKIApAQCAtNDUxLDEwICs0NTMsNyBAQAogCSAqIENhbiBlbnRlciBEMCBmcm9tIGFueSBzdGF0ZSwgYnV0IGlmIHdlIGNhbiBvbmx5IGdvIGRlZXBlciAKIAkgKiB0byBzbGVlcCBpZiB3ZSdyZSBhbHJlYWR5IGluIGEgbG93IHBvd2VyIHN0YXRlCiAJICovCi0JaWYgKGRldi0+Y3VycmVudF9zdGF0ZSA9PSBzdGF0ZSkgewotCQkvKiB3ZSdyZSBhbHJlYWR5IHRoZXJlICovCi0JCXJldHVybiAwOwotCX0gZWxzZSBpZiAoc3RhdGUgIT0gUENJX0QwICYmIGRldi0+Y3VycmVudF9zdGF0ZSA8PSBQQ0lfRDNjb2xkCisJaWYgKHN0YXRlICE9IFBDSV9EMCAmJiBkZXYtPmN1cnJlbnRfc3RhdGUgPD0gUENJX0QzY29sZAogCSAgICAmJiBkZXYtPmN1cnJlbnRfc3RhdGUgPiBzdGF0ZSkgewogCQlkZXZfZXJyKCZkZXYtPmRldiwgImludmFsaWQgcG93ZXIgdHJhbnNpdGlvbiAiCiAJCQkiKGZyb20gc3RhdGUgJWQgdG8gJWQpXG4iLCBkZXYtPmN1cnJlbnRfc3RhdGUsIHN0YXRlKTsKQEAgLTQ4MSwxMCArNDgwLDggQEAKIAkJYnJlYWs7CiAJY2FzZSBQQ0lfVU5LTk9XTjogLyogQm9vdC11cCAqLwogCQlpZiAoKHBtY3NyICYgUENJX1BNX0NUUkxfU1RBVEVfTUFTSykgPT0gUENJX0QzaG90Ci0JCSAmJiAhKHBtY3NyICYgUENJX1BNX0NUUkxfTk9fU09GVF9SRVNFVCkpIHsKKwkJICYmICEocG1jc3IgJiBQQ0lfUE1fQ1RSTF9OT19TT0ZUX1JFU0VUKSkKIAkJCW5lZWRfcmVzdG9yZSA9IHRydWU7Ci0JCQl3YWl0ID0gdHJ1ZTsKLQkJfQogCQkvKiBGYWxsLXRocm91Z2g6IGZvcmNlIHRvIEQwICovCiAJZGVmYXVsdDoKIAkJcG1jc3IgPSAwOwpAQCAtNDk0LDkgKzQ5MSw2IEBACiAJLyogZW50ZXIgc3BlY2lmaWVkIHN0YXRlICovCiAJcGNpX3dyaXRlX2NvbmZpZ193b3JkKGRldiwgZGV2LT5wbV9jYXAgKyBQQ0lfUE1fQ1RSTCwgcG1jc3IpOwogCi0JaWYgKCF3YWl0KQotCQlyZXR1cm4gMDsKLQogCS8qIE1hbmRhdG9yeSBwb3dlciBtYW5hZ2VtZW50IHRyYW5zaXRpb24gZGVsYXlzICovCiAJLyogc2VlIFBDSSBQTSAxLjEgNS42LjEgdGFibGUgMTggKi8KIAlpZiAoc3RhdGUgPT0gUENJX0QzaG90IHx8IGRldi0+Y3VycmVudF9zdGF0ZSA9PSBQQ0lfRDNob3QpCkBAIC01MjEsNyArNTE1LDcgQEAKIAlpZiAobmVlZF9yZXN0b3JlKQogCQlwY2lfcmVzdG9yZV9iYXJzKGRldik7CiAKLQlpZiAod2FpdCAmJiBkZXYtPmJ1cy0+c2VsZikKKwlpZiAoZGV2LT5idXMtPnNlbGYpCiAJCXBjaWVfYXNwbV9wbV9zdGF0ZV9jaGFuZ2UoZGV2LT5idXMtPnNlbGYpOwogCiAJcmV0dXJuIDA7CkBAIC01NDYsNiArNTQwLDUzIEBACiB9CiAKIC8qKgorICogcGNpX3BsYXRmb3JtX3Bvd2VyX3RyYW5zaXRpb24gLSBVc2UgcGxhdGZvcm0gdG8gY2hhbmdlIGRldmljZSBwb3dlciBzdGF0ZQorICogQGRldjogUENJIGRldmljZSB0byBoYW5kbGUuCisgKiBAc3RhdGU6IFN0YXRlIHRvIHB1dCB0aGUgZGV2aWNlIGludG8uCisgKi8KK3N0YXRpYyBpbnQgcGNpX3BsYXRmb3JtX3Bvd2VyX3RyYW5zaXRpb24oc3RydWN0IHBjaV9kZXYgKmRldiwgcGNpX3Bvd2VyX3Qgc3RhdGUpCit7CisJaW50IGVycm9yOworCisJaWYgKHBsYXRmb3JtX3BjaV9wb3dlcl9tYW5hZ2VhYmxlKGRldikpIHsKKwkJZXJyb3IgPSBwbGF0Zm9ybV9wY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgc3RhdGUpOworCQlpZiAoIWVycm9yKQorCQkJcGNpX3VwZGF0ZV9jdXJyZW50X3N0YXRlKGRldiwgc3RhdGUpOworCX0gZWxzZSB7CisJCWVycm9yID0gLUVOT0RFVjsKKwkJLyogRmFsbCBiYWNrIHRvIFBDSV9EMCBpZiBuYXRpdmUgUE0gaXMgbm90IHN1cHBvcnRlZCAqLworCQlwY2lfdXBkYXRlX2N1cnJlbnRfc3RhdGUoZGV2LCBQQ0lfRDApOworCX0KKworCXJldHVybiBlcnJvcjsKK30KKworLyoqCisgKiBfX3BjaV9zdGFydF9wb3dlcl90cmFuc2l0aW9uIC0gU3RhcnQgcG93ZXIgdHJhbnNpdGlvbiBvZiBhIFBDSSBkZXZpY2UKKyAqIEBkZXY6IFBDSSBkZXZpY2UgdG8gaGFuZGxlLgorICogQHN0YXRlOiBTdGF0ZSB0byBwdXQgdGhlIGRldmljZSBpbnRvLgorICovCitzdGF0aWMgdm9pZCBfX3BjaV9zdGFydF9wb3dlcl90cmFuc2l0aW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBjaV9wb3dlcl90IHN0YXRlKQoreworCWlmIChzdGF0ZSA9PSBQQ0lfRDApCisJCXBjaV9wbGF0Zm9ybV9wb3dlcl90cmFuc2l0aW9uKGRldiwgUENJX0QwKTsKK30KKworLyoqCisgKiBfX3BjaV9jb21wbGV0ZV9wb3dlcl90cmFuc2l0aW9uIC0gQ29tcGxldGUgcG93ZXIgdHJhbnNpdGlvbiBvZiBhIFBDSSBkZXZpY2UKKyAqIEBkZXY6IFBDSSBkZXZpY2UgdG8gaGFuZGxlLgorICogQHN0YXRlOiBTdGF0ZSB0byBwdXQgdGhlIGRldmljZSBpbnRvLgorICoKKyAqIFRoaXMgZnVuY3Rpb24gc2hvdWxkIG5vdCBiZSBjYWxsZWQgZGlyZWN0bHkgYnkgZGV2aWNlIGRyaXZlcnMuCisgKi8KK2ludCBfX3BjaV9jb21wbGV0ZV9wb3dlcl90cmFuc2l0aW9uKHN0cnVjdCBwY2lfZGV2ICpkZXYsIHBjaV9wb3dlcl90IHN0YXRlKQoreworCXJldHVybiBzdGF0ZSA+IFBDSV9EMCA/CisJCQlwY2lfcGxhdGZvcm1fcG93ZXJfdHJhbnNpdGlvbihkZXYsIHN0YXRlKSA6IC1FSU5WQUw7Cit9CitFWFBPUlRfU1lNQk9MX0dQTChfX3BjaV9jb21wbGV0ZV9wb3dlcl90cmFuc2l0aW9uKTsKKworLyoqCiAgKiBwY2lfc2V0X3Bvd2VyX3N0YXRlIC0gU2V0IHRoZSBwb3dlciBzdGF0ZSBvZiBhIFBDSSBkZXZpY2UKICAqIEBkZXY6IFBDSSBkZXZpY2UgdG8gaGFuZGxlLgogICogQHN0YXRlOiBQQ0kgcG93ZXIgc3RhdGUgKEQwLCBEMSwgRDIsIEQzaG90KSB0byBwdXQgdGhlIGRldmljZSBpbnRvLgpAQCAtNTc3LDMwICs2MTgsMjEgQEAKIAkJICovCiAJCXJldHVybiAwOwogCi0JaWYgKHN0YXRlID09IFBDSV9EMCAmJiBwbGF0Zm9ybV9wY2lfcG93ZXJfbWFuYWdlYWJsZShkZXYpKSB7Ci0JCS8qCi0JCSAqIEFsbG93IHRoZSBwbGF0Zm9ybSB0byBjaGFuZ2UgdGhlIHN0YXRlLCBmb3IgZXhhbXBsZSB2aWEgQUNQSQotCQkgKiBfUFIwLCBfUFMwIGFuZCBzb21lIHN1Y2gsIGJ1dCBkbyBub3QgdHJ1c3QgaXQuCi0JCSAqLwotCQlpbnQgcmV0ID0gcGxhdGZvcm1fcGNpX3NldF9wb3dlcl9zdGF0ZShkZXYsIFBDSV9EMCk7Ci0JCWlmICghcmV0KQotCQkJcGNpX3VwZGF0ZV9jdXJyZW50X3N0YXRlKGRldiwgUENJX0QwKTsKLQl9CisJLyogQ2hlY2sgaWYgd2UncmUgYWxyZWFkeSB0aGVyZSAqLworCWlmIChkZXYtPmN1cnJlbnRfc3RhdGUgPT0gc3RhdGUpCisJCXJldHVybiAwOworCisJX19wY2lfc3RhcnRfcG93ZXJfdHJhbnNpdGlvbihkZXYsIHN0YXRlKTsKKwogCS8qIFRoaXMgZGV2aWNlIGlzIHF1aXJrZWQgbm90IHRvIGJlIHB1dCBpbnRvIEQzLCBzbwogCSAgIGRvbid0IHB1dCBpdCBpbiBEMyAqLwogCWlmIChzdGF0ZSA9PSBQQ0lfRDNob3QgJiYgKGRldi0+ZGV2X2ZsYWdzICYgUENJX0RFVl9GTEFHU19OT19EMykpCiAJCXJldHVybiAwOwogCi0JZXJyb3IgPSBwY2lfcmF3X3NldF9wb3dlcl9zdGF0ZShkZXYsIHN0YXRlLCB0cnVlKTsKKwllcnJvciA9IHBjaV9yYXdfc2V0X3Bvd2VyX3N0YXRlKGRldiwgc3RhdGUpOwogCi0JaWYgKHN0YXRlID4gUENJX0QwICYmIHBsYXRmb3JtX3BjaV9wb3dlcl9tYW5hZ2VhYmxlKGRldikpIHsKLQkJLyogQWxsb3cgdGhlIHBsYXRmb3JtIHRvIGZpbmFsaXplIHRoZSB0cmFuc2l0aW9uICovCi0JCWludCByZXQgPSBwbGF0Zm9ybV9wY2lfc2V0X3Bvd2VyX3N0YXRlKGRldiwgc3RhdGUpOwotCQlpZiAoIXJldCkgewotCQkJcGNpX3VwZGF0ZV9jdXJyZW50X3N0YXRlKGRldiwgc3RhdGUpOwotCQkJZXJyb3IgPSAwOwotCQl9Ci0JfQorCWlmICghX19wY2lfY29tcGxldGVfcG93ZXJfdHJhbnNpdGlvbihkZXYsIHN0YXRlKSkKKwkJZXJyb3IgPSAwOwogCiAJcmV0dXJuIGVycm9yOwogfQpAQCAtMTIzMSw3ICsxMjYzLDcgQEAKIAlpZiAodGFyZ2V0X3N0YXRlID09IFBDSV9QT1dFUl9FUlJPUikKIAkJcmV0dXJuIC1FSU87CiAKLQlwY2lfZW5hYmxlX3dha2UoZGV2LCB0YXJnZXRfc3RhdGUsIHRydWUpOworCXBjaV9lbmFibGVfd2FrZShkZXYsIHRhcmdldF9zdGF0ZSwgZGV2aWNlX21heV93YWtldXAoJmRldi0+ZGV2KSk7CiAKIAllcnJvciA9IHBjaV9zZXRfcG93ZXJfc3RhdGUoZGV2LCB0YXJnZXRfc3RhdGUpOwogCkBAIC0xMzgxLDUwICsxNDEzLDYgQEAKIH0KIAogLyoqCi0gKiBwY2lfcmVzdG9yZV9zdGFuZGFyZF9jb25maWcgLSByZXN0b3JlIHN0YW5kYXJkIGNvbmZpZyByZWdpc3RlcnMgb2YgUENJIGRldmljZQotICogQGRldjogUENJIGRldmljZSB0byBoYW5kbGUKLSAqCi0gKiBUaGlzIGZ1bmN0aW9uIGFzc3VtZXMgdGhhdCB0aGUgZGV2aWNlJ3MgY29uZmlndXJhdGlvbiBzcGFjZSBpcyBhY2Nlc3NpYmxlLgotICogSWYgdGhlIGRldmljZSBuZWVkcyB0byBiZSBwb3dlcmVkIHVwLCB0aGUgZnVuY3Rpb24gd2lsbCB3YWl0IGZvciBpdCB0bwotICogY2hhbmdlIHRoZSBzdGF0ZS4KLSAqLwotaW50IHBjaV9yZXN0b3JlX3N0YW5kYXJkX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KQotewotCXBjaV9wb3dlcl90IHByZXZfc3RhdGU7Ci0JaW50IGVycm9yOwotCi0JcGNpX3VwZGF0ZV9jdXJyZW50X3N0YXRlKGRldiwgUENJX0QwKTsKLQotCXByZXZfc3RhdGUgPSBkZXYtPmN1cnJlbnRfc3RhdGU7Ci0JaWYgKHByZXZfc3RhdGUgPT0gUENJX0QwKQotCQlnb3RvIFJlc3RvcmU7Ci0KLQllcnJvciA9IHBjaV9yYXdfc2V0X3Bvd2VyX3N0YXRlKGRldiwgUENJX0QwLCBmYWxzZSk7Ci0JaWYgKGVycm9yKQotCQlyZXR1cm4gZXJyb3I7Ci0KLQkvKgotCSAqIFRoaXMgYXNzdW1lcyB0aGF0IHdlIHdvbid0IGdldCBhIGJ1cyBpbiBCMiBvciBCMyBmcm9tIHRoZSBCSU9TLCBidXQKLQkgKiB3ZSd2ZSBtYWRlIHRoaXMgYXNzdW1wdGlvbiBmb3JldmVyIGFuZCBpdCBhcHBlYXJzIHRvIGJlIHVuaXZlcnNhbGx5Ci0JICogc2F0aXNmaWVkLgotCSAqLwotCXN3aXRjaChwcmV2X3N0YXRlKSB7Ci0JY2FzZSBQQ0lfRDNjb2xkOgotCWNhc2UgUENJX0QzaG90OgotCQltZGVsYXkocGNpX3BtX2QzX2RlbGF5KTsKLQkJYnJlYWs7Ci0JY2FzZSBQQ0lfRDI6Ci0JCXVkZWxheShQQ0lfUE1fRDJfREVMQVkpOwotCQlicmVhazsKLQl9Ci0KLQlwY2lfdXBkYXRlX2N1cnJlbnRfc3RhdGUoZGV2LCBQQ0lfRDApOwotCi0gUmVzdG9yZToKLQlyZXR1cm4gZGV2LT5zdGF0ZV9zYXZlZCA/IHBjaV9yZXN0b3JlX3N0YXRlKGRldikgOiAwOwotfQotCi0vKioKICAqIHBjaV9lbmFibGVfYXJpIC0gZW5hYmxlIEFSSSBmb3J3YXJkaW5nIGlmIGhhcmR3YXJlIHN1cHBvcnQgaXQKICAqIEBkZXY6IHRoZSBQQ0kgZGV2aWNlCiAgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGNpL3BjaS5oIGIvZHJpdmVycy9wY2kvcGNpLmgKaW5kZXggMDdjMGFhNS4uMTQ5ZmZmNiAxMDA2NDQKLS0tIGEvZHJpdmVycy9wY2kvcGNpLmgKKysrIGIvZHJpdmVycy9wY2kvcGNpLmgKQEAgLTQ5LDcgKzQ5LDYgQEAKIGV4dGVybiB2b2lkIHBjaV9wbV9pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogZXh0ZXJuIHZvaWQgcGxhdGZvcm1fcGNpX3dha2V1cF9pbml0KHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogZXh0ZXJuIHZvaWQgcGNpX2FsbG9jYXRlX2NhcF9zYXZlX2J1ZmZlcnMoc3RydWN0IHBjaV9kZXYgKmRldik7Ci1leHRlcm4gaW50IHBjaV9yZXN0b3JlX3N0YW5kYXJkX2NvbmZpZyhzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKIAogc3RhdGljIGlubGluZSBib29sIHBjaV9pc19icmlkZ2Uoc3RydWN0IHBjaV9kZXYgKnBjaV9kZXYpCiB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9hc3VzX2FjcGkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXNfYWNwaS5jCmluZGV4IGQ2M2YyNmUuLmJhMWY3NDkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXNfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L2FzdXNfYWNwaS5jCkBAIC05ODcsNyArOTg3LDYgQEAKIAlwcm9jLT53cml0ZV9wcm9jID0gd3JpdGVmdW5jOwogCXByb2MtPnJlYWRfcHJvYyA9IHJlYWRmdW5jOwogCXByb2MtPmRhdGEgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7Ci0JcHJvYy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAlwcm9jLT51aWQgPSBhc3VzX3VpZDsKIAlwcm9jLT5naWQgPSBhc3VzX2dpZDsKIAlyZXR1cm4gMDsKQEAgLTEwMjAsNyArMTAxOSw2IEBACiAJaWYgKHByb2MpIHsKIAkJcHJvYy0+cmVhZF9wcm9jID0gcHJvY19yZWFkX2luZm87CiAJCXByb2MtPmRhdGEgPSBhY3BpX2RyaXZlcl9kYXRhKGRldmljZSk7Ci0JCXByb2MtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJCXByb2MtPnVpZCA9IGFzdXNfdWlkOwogCQlwcm9jLT5naWQgPSBhc3VzX2dpZDsKIAl9IGVsc2UgewpAQCAtMTQzNiw3ICsxNDM0LDYgQEAKIAkJcHJpbnRrKEtFUk5fRVJSICJBc3VzIEFDUEk6IFVuYWJsZSB0byBjcmVhdGUgL3Byb2MgZW50cnlcbiIpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JYXN1c19wcm9jX2Rpci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCXJlc3VsdCA9IGFjcGlfYnVzX3JlZ2lzdGVyX2RyaXZlcigmYXN1c19ob3RrX2RyaXZlcik7CiAJaWYgKHJlc3VsdCA8IDApIHsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMgYi9kcml2ZXJzL3BsYXRmb3JtL3g4Ni9kZWxsLWxhcHRvcC5jCmluZGV4IDE2ZTExYzIuLmFmOWY0MzAgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L2RlbGwtbGFwdG9wLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvZGVsbC1sYXB0b3AuYwpAQCAtMTAzLDcgKzEwMyw3IEBACiAJZGFfbnVtX3Rva2VucyArPSB0b2tlbnM7CiB9CiAKLXN0YXRpYyB2b2lkIGZpbmRfdG9rZW5zKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICpkbSkKK3N0YXRpYyB2b2lkIGZpbmRfdG9rZW5zKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICpkbSwgdm9pZCAqZHVtbXkpCiB7CiAJc3dpdGNoIChkbS0+dHlwZSkgewogCWNhc2UgMHhkNDogLyogSW5kZXhlZCBJTyAqLwpAQCAtMzU2LDcgKzM1Niw3IEBACiAJaWYgKCFkbWlfY2hlY2tfc3lzdGVtKGRlbGxfZGV2aWNlX3RhYmxlKSkKIAkJcmV0dXJuIC1FTk9ERVY7CiAKLQlkbWlfd2FsayhmaW5kX3Rva2Vucyk7CisJZG1pX3dhbGsoZmluZF90b2tlbnMsIE5VTEwpOwogCiAJaWYgKCFkYV90b2tlbnMpICB7CiAJCXByaW50ayhLRVJOX0lORk8gImRlbGwtbGFwdG9wOiBVbmFibGUgdG8gZmluZCBkbWkgdG9rZW5zXG4iKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3RoaW5rcGFkX2FjcGkuYwppbmRleCBkMjQzMzIwLi4zZGFkMjdhIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90aGlua3BhZF9hY3BpLmMKKysrIGIvZHJpdmVycy9wbGF0Zm9ybS94ODYvdGhpbmtwYWRfYWNwaS5jCkBAIC02OTkyLDcgKzY5OTIsNiBAQAogCQkJcmV0ID0gLUVOT0RFVjsKIAkJCWdvdG8gZXJyX291dDsKIAkJfQotCQllbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAkJZW50cnktPmRhdGEgPSBpYm07CiAJCWVudHJ5LT5yZWFkX3Byb2MgPSAmZGlzcGF0Y2hfcHJvY2ZzX3JlYWQ7CiAJCWlmIChpYm0tPndyaXRlKQpAQCAtNzQwNSw3ICs3NDA0LDYgQEAKIAkJdGhpbmtwYWRfYWNwaV9tb2R1bGVfZXhpdCgpOwogCQlyZXR1cm4gLUVOT0RFVjsKIAl9Ci0JcHJvY19kaXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAlyZXQgPSBwbGF0Zm9ybV9kcml2ZXJfcmVnaXN0ZXIoJnRwYWNwaV9wZHJpdmVyKTsKIAlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BsYXRmb3JtL3g4Ni90b3NoaWJhX2FjcGkuYyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3Rvc2hpYmFfYWNwaS5jCmluZGV4IDQwZTYwZmMuLjlmMTg3MjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvcGxhdGZvcm0veDg2L3Rvc2hpYmFfYWNwaS5jCisrKyBiL2RyaXZlcnMvcGxhdGZvcm0veDg2L3Rvc2hpYmFfYWNwaS5jCkBAIC02NzksOCArNjc5LDYgQEAKIAkJCQkJICAgICAgdG9zaGliYV9wcm9jX2RpciwKIAkJCQkJICAgICAgKHJlYWRfcHJvY190ICopIGRpc3BhdGNoX3JlYWQsCiAJCQkJCSAgICAgIGl0ZW0pOwotCQlpZiAocHJvYykKLQkJCXByb2MtPm93bmVyID0gVEhJU19NT0RVTEU7CiAJCWlmIChwcm9jICYmIGl0ZW0tPndyaXRlX2Z1bmMpCiAJCQlwcm9jLT53cml0ZV9wcm9jID0gKHdyaXRlX3Byb2NfdCAqKSBkaXNwYXRjaF93cml0ZTsKIAl9CkBAIC03NzIsNyArNzcwLDYgQEAKIAkJdG9zaGliYV9hY3BpX2V4aXQoKTsKIAkJcmV0dXJuIC1FTk9ERVY7CiAJfSBlbHNlIHsKLQkJdG9zaGliYV9wcm9jX2Rpci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAkJc3RhdHVzID0gYWRkX2RldmljZSgpOwogCQlpZiAoQUNQSV9GQUlMVVJFKHN0YXR1cykpIHsKIAkJCXRvc2hpYmFfYWNwaV9leGl0KCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL3BzMy9wczNhdi5jIGIvZHJpdmVycy9wczMvcHMzYXYuYwppbmRleCA1MzI0OTc4Li4yMzVlODdmIDEwMDY0NAotLS0gYS9kcml2ZXJzL3BzMy9wczNhdi5jCisrKyBiL2RyaXZlcnMvcHMzL3BzM2F2LmMKQEAgLTgzOCw3ICs4MzgsNyBAQAogfQogCiAvKiBzZXQgbW9kZSB1c2luZyBpZCAqLwotaW50IHBzM2F2X3NldF92aWRlb19tb2RlKHUzMiBpZCkKK2ludCBwczNhdl9zZXRfdmlkZW9fbW9kZShpbnQgaWQpCiB7CiAJaW50IHNpemU7CiAJdTMyIG9wdGlvbjsKQEAgLTk0MCw3ICs5NDAsNyBAQAogc3RhdGljIGludCBwczNhdl9wcm9iZShzdHJ1Y3QgcHMzX3N5c3RlbV9idXNfZGV2aWNlICpkZXYpCiB7CiAJaW50IHJlczsKLQl1MzIgaWQ7CisJaW50IGlkOwogCiAJZGV2X2RiZygmZGV2LT5jb3JlLCAiIC0+ICVzOiVkXG4iLCBfX2Z1bmNfXywgX19MSU5FX18pOwogCWRldl9kYmcoJmRldi0+Y29yZSwgIiAgdGltZW91dD0lZFxuIiwgdGltZW91dCk7CkBAIC05NjIsOCArOTYyLDEwIEBACiAJaW5pdF9jb21wbGV0aW9uKCZwczNhdi0+ZG9uZSk7CiAJY29tcGxldGUoJnBzM2F2LT5kb25lKTsKIAlwczNhdi0+d3EgPSBjcmVhdGVfc2luZ2xldGhyZWFkX3dvcmtxdWV1ZSgicHMzYXZkIik7Ci0JaWYgKCFwczNhdi0+d3EpCisJaWYgKCFwczNhdi0+d3EpIHsKKwkJcmVzID0gLUVOT01FTTsKIAkJZ290byBmYWlsOworCX0KIAogCXN3aXRjaCAocHMzX29zX2FyZWFfZ2V0X2F2X211bHRpX291dCgpKSB7CiAJY2FzZSBQUzNfUEFSQU1fQVZfTVVMVElfT1VUX05UU0M6CkBAIC05OTQsNiArOTk2LDEyIEBACiAJCXNhZmVfbW9kZSA9IDE7CiAjZW5kaWYgLyogQ09ORklHX0ZCICovCiAJaWQgPSBwczNhdl9hdXRvX3ZpZGVvbW9kZSgmcHMzYXYtPmF2X2h3X2NvbmYpOworCWlmIChpZCA8IDApIHsKKwkJcHJpbnRrKEtFUk5fRVJSICIlczogaW52YWxpZCBpZCA6JWRcbiIsIF9fZnVuY19fLCBpZCk7CisJCXJlcyA9IC1FSU5WQUw7CisJCWdvdG8gZmFpbDsKKwl9CisKIAlzYWZlX21vZGUgPSAwOwogCiAJbXV0ZXhfbG9jaygmcHMzYXYtPm11dGV4KTsKQEAgLTEwMDcsNyArMTAxNSw3IEBACiBmYWlsOgogCWtmcmVlKHBzM2F2KTsKIAlwczNhdiA9IE5VTEw7Ci0JcmV0dXJuIC1FTk9NRU07CisJcmV0dXJuIHJlczsKIH0KIAogc3RhdGljIGludCBwczNhdl9yZW1vdmUoc3RydWN0IHBzM19zeXN0ZW1fYnVzX2RldmljZSAqZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ydGMvcnRjLXByb2MuYyBiL2RyaXZlcnMvcnRjL3J0Yy1wcm9jLmMKaW5kZXggMGM2MjU3YS4uYzA4NmZjMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ydGMvcnRjLXByb2MuYworKysgYi9kcml2ZXJzL3J0Yy9ydGMtcHJvYy5jCkBAIC0xMDUsMTQgKzEwNSw4IEBACiAKIHZvaWQgcnRjX3Byb2NfYWRkX2RldmljZShzdHJ1Y3QgcnRjX2RldmljZSAqcnRjKQogewotCWlmIChydGMtPmlkID09IDApIHsKLQkJc3RydWN0IHByb2NfZGlyX2VudHJ5ICplbnQ7Ci0KLQkJZW50ID0gcHJvY19jcmVhdGVfZGF0YSgiZHJpdmVyL3J0YyIsIDAsIE5VTEwsCi0JCQkJICAgICAgICZydGNfcHJvY19mb3BzLCBydGMpOwotCQlpZiAoZW50KQotCQkJZW50LT5vd25lciA9IHJ0Yy0+b3duZXI7Ci0JfQorCWlmIChydGMtPmlkID09IDApCisJCXByb2NfY3JlYXRlX2RhdGEoImRyaXZlci9ydGMiLCAwLCBOVUxMLCAmcnRjX3Byb2NfZm9wcywgcnRjKTsKIH0KIAogdm9pZCBydGNfcHJvY19kZWxfZGV2aWNlKHN0cnVjdCBydGNfZGV2aWNlICpydGMpCmRpZmYgLS1naXQgYS9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMgYi9kcml2ZXJzL3MzOTAvYmxvY2svZGFzZF9wcm9jLmMKaW5kZXggMjA4MGJhNi4uNjU0ZGFhMyAxMDA2NDQKLS0tIGEvZHJpdmVycy9zMzkwL2Jsb2NrL2Rhc2RfcHJvYy5jCisrKyBiL2RyaXZlcnMvczM5MC9ibG9jay9kYXNkX3Byb2MuYwpAQCAtMzIwLDcgKzMyMCw2IEBACiAJZGFzZF9wcm9jX3Jvb3RfZW50cnkgPSBwcm9jX21rZGlyKCJkYXNkIiwgTlVMTCk7CiAJaWYgKCFkYXNkX3Byb2Nfcm9vdF9lbnRyeSkKIAkJZ290byBvdXRfbm9kYXNkOwotCWRhc2RfcHJvY19yb290X2VudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOwogCWRhc2RfZGV2aWNlc19lbnRyeSA9IHByb2NfY3JlYXRlKCJkZXZpY2VzIiwKIAkJCQkJIFNfSUZSRUcgfCBTX0lSVUdPIHwgU19JV1VTUiwKIAkJCQkJIGRhc2RfcHJvY19yb290X2VudHJ5LApAQCAtMzM0LDcgKzMzMyw2IEBACiAJCWdvdG8gb3V0X25vc3RhdGlzdGljczsKIAlkYXNkX3N0YXRpc3RpY3NfZW50cnktPnJlYWRfcHJvYyA9IGRhc2Rfc3RhdGlzdGljc19yZWFkOwogCWRhc2Rfc3RhdGlzdGljc19lbnRyeS0+d3JpdGVfcHJvYyA9IGRhc2Rfc3RhdGlzdGljc193cml0ZTsKLQlkYXNkX3N0YXRpc3RpY3NfZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJcmV0dXJuIDA7CiAKICBvdXRfbm9zdGF0aXN0aWNzOgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfZGV2aW5mby5jIGIvZHJpdmVycy9zY3NpL3Njc2lfZGV2aW5mby5jCmluZGV4IDA5OWI1NDUuLmIxMzQ4MTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX2RldmluZm8uYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9kZXZpbmZvLmMKQEAgLTU5Niw4ICs1OTYsNiBAQAogCQllcnJvciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwogCX0KLQotCXAtPm93bmVyID0gVEhJU19NT0RVTEU7CiAjZW5kaWYgLyogQ09ORklHX1NDU0lfUFJPQ19GUyAqLwogCiAgb3V0OgpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zY3NpL3Njc2lfcHJvYy5jIGIvZHJpdmVycy9zY3NpL3Njc2lfcHJvYy5jCmluZGV4IDgyZjdiMmQuLjc3ZmJkZGIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc2NzaS9zY3NpX3Byb2MuYworKysgYi9kcml2ZXJzL3Njc2kvc2NzaV9wcm9jLmMKQEAgLTExNSw4ICsxMTUsNiBAQAogICAgICAgICAJaWYgKCFzaHQtPnByb2NfZGlyKQogCQkJcHJpbnRrKEtFUk5fRVJSICIlczogcHJvY19ta2RpciBmYWlsZWQgZm9yICVzXG4iLAogCQkJICAgICAgIF9fZnVuY19fLCBzaHQtPnByb2NfbmFtZSk7Ci0JCWVsc2UKLQkJCXNodC0+cHJvY19kaXItPm93bmVyID0gc2h0LT5tb2R1bGU7CiAJfQogCW11dGV4X3VubG9jaygmZ2xvYmFsX2hvc3RfdGVtcGxhdGVfbXV0ZXgpOwogfQpAQCAtMTYzLDcgKzE2MSw2IEBACiAJfSAKIAogCXAtPndyaXRlX3Byb2MgPSBwcm9jX3Njc2lfd3JpdGVfcHJvYzsKLQlwLT5vd25lciA9IHNodC0+bW9kdWxlOwogfQogCiAvKioKZGlmZiAtLWdpdCBhL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYyBiL2RyaXZlcnMvc2VyaWFsL2NwbV91YXJ0L2NwbV91YXJ0X2NvcmUuYwppbmRleCBiZGU0YjRiLi41YzZlZjUxIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9jcG1fdWFydC9jcG1fdWFydF9jb3JlLmMKKysrIGIvZHJpdmVycy9zZXJpYWwvY3BtX3VhcnQvY3BtX3VhcnRfY29yZS5jCkBAIC00MDYsNiArNDA2LDE4IEBACiAKIAlwcl9kZWJ1ZygiQ1BNIHVhcnRbJWRdOnN0YXJ0dXBcbiIsIHBvcnQtPmxpbmUpOwogCisJLyogSWYgdGhlIHBvcnQgaXMgbm90IHRoZSBjb25zb2xlLCBtYWtlIHN1cmUgcnggaXMgZGlzYWJsZWQuICovCisJaWYgKCEocGluZm8tPmZsYWdzICYgRkxBR19DT05TT0xFKSkgeworCQkvKiBEaXNhYmxlIFVBUlQgcnggKi8KKwkJaWYgKElTX1NNQyhwaW5mbykpIHsKKwkJCWNscmJpdHMxNigmcGluZm8tPnNtY3AtPnNtY19zbWNtciwgU01DTVJfUkVOKTsKKwkJCWNscmJpdHM4KCZwaW5mby0+c21jcC0+c21jX3NtY20sIFNNQ01fUlgpOworCQl9IGVsc2UgeworCQkJY2xyYml0czMyKCZwaW5mby0+c2NjcC0+c2NjX2dzbXJsLCBTQ0NfR1NNUkxfRU5SKTsKKwkJCWNscmJpdHMxNigmcGluZm8tPnNjY3AtPnNjY19zY2NtLCBVQVJUX1NDQ01fUlgpOworCQl9CisJCWNwbV9saW5lX2NyX2NtZChwaW5mbywgQ1BNX0NSX0lOSVRfVFJYKTsKKwl9CiAJLyogSW5zdGFsbCBpbnRlcnJ1cHQgaGFuZGxlci4gKi8KIAlyZXR2YWwgPSByZXF1ZXN0X2lycShwb3J0LT5pcnEsIGNwbV91YXJ0X2ludCwgMCwgImNwbV91YXJ0IiwgcG9ydCk7CiAJaWYgKHJldHZhbCkKQEAgLTQyMCw4ICs0MzIsNiBAQAogCQlzZXRiaXRzMzIoJnBpbmZvLT5zY2NwLT5zY2NfZ3NtcmwsIChTQ0NfR1NNUkxfRU5SIHwgU0NDX0dTTVJMX0VOVCkpOwogCX0KIAotCWlmICghKHBpbmZvLT5mbGFncyAmIEZMQUdfQ09OU09MRSkpCi0JCWNwbV9saW5lX2NyX2NtZChwaW5mbywgQ1BNX0NSX0lOSVRfVFJYKTsKIAlyZXR1cm4gMDsKIH0KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy9zZXJpYWwvbXBjNTJ4eF91YXJ0LmMgYi9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYwppbmRleCAwYzNhMmFiLi43ZjcyZjhjIDEwMDY0NAotLS0gYS9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYworKysgYi9kcml2ZXJzL3NlcmlhbC9tcGM1Mnh4X3VhcnQuYwpAQCAtNTAsOCArNTAsOCBAQAogLyogT0YgUGxhdGZvcm0gZGV2aWNlIFVzYWdlIDoKICAqCiAgKiBUaGlzIGRyaXZlciBpcyBvbmx5IHVzZWQgZm9yIFBTQ3MgY29uZmlndXJlZCBpbiB1YXJ0IG1vZGUuICBUaGUgZGV2aWNlCi0gKiB0cmVlIHdpbGwgaGF2ZSBhIG5vZGUgZm9yIGVhY2ggUFNDIGluIHVhcnQgbW9kZSB3LyBkZXZpY2VfdHlwZSA9ICJzZXJpYWwiCi0gKiBhbmQgIm1wYzUyeHgtcHNjLXVhcnQiIGluIHRoZSBjb21wYXRpYmxlIHN0cmluZworICogdHJlZSB3aWxsIGhhdmUgYSBub2RlIGZvciBlYWNoIFBTQyB3aXRoICJtcGM1Mnh4LXBzYy11YXJ0IiBpbiB0aGUgY29tcGF0aWJsZQorICogbGlzdC4KICAqCiAgKiBCeSBkZWZhdWx0LCBQU0MgZGV2aWNlcyBhcmUgZW51bWVyYXRlZCBpbiB0aGUgb3JkZXIgdGhleSBhcmUgZm91bmQuICBIb3dldmVyCiAgKiBhIHBhcnRpY3VsYXIgUFNDIG51bWJlciBjYW4gYmUgZm9yY2VzIGJ5IGFkZGluZyAnZGV2aWNlX25vID0gPHBvcnQjPicKQEAgLTUyMiw3ICs1MjIsNyBAQAogCiAJLyogUmVxdWVzdCBJUlEgKi8KIAlyZXQgPSByZXF1ZXN0X2lycShwb3J0LT5pcnEsIG1wYzUyeHhfdWFydF9pbnQsCi0JCUlSUUZfRElTQUJMRUQgfCBJUlFGX1NBTVBMRV9SQU5ET00gfCBJUlFGX1NIQVJFRCwKKwkJSVJRRl9ESVNBQkxFRCB8IElSUUZfU0FNUExFX1JBTkRPTSwKIAkJIm1wYzUyeHhfcHNjX3VhcnQiLCBwb3J0KTsKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwpAQCAtMTIxMiwzMCArMTIxMiwxOCBAQAogI2VuZGlmCiAKIHN0YXRpYyB2b2lkCi1tcGM1Mnh4X3VhcnRfb2ZfYXNzaWduKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnAsIGludCBpZHgpCittcGM1Mnh4X3VhcnRfb2ZfYXNzaWduKHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnApCiB7Ci0JaW50IGZyZWVfaWR4ID0gLTE7CiAJaW50IGk7CiAKLQkvKiBGaW5kIHRoZSBmaXJzdCBmcmVlIG5vZGUgKi8KKwkvKiBGaW5kIHRoZSBmaXJzdCBmcmVlIFBTQyBudW1iZXIgKi8KIAlmb3IgKGkgPSAwOyBpIDwgTVBDNTJ4eF9QU0NfTUFYTlVNOyBpKyspIHsKIAkJaWYgKG1wYzUyeHhfdWFydF9ub2Rlc1tpXSA9PSBOVUxMKSB7Ci0JCQlmcmVlX2lkeCA9IGk7Ci0JCQlicmVhazsKKwkJCW9mX25vZGVfZ2V0KG5wKTsKKwkJCW1wYzUyeHhfdWFydF9ub2Rlc1tpXSA9IG5wOworCQkJcmV0dXJuOwogCQl9CiAJfQotCi0JaWYgKChpZHggPCAwKSB8fCAoaWR4ID49IE1QQzUyeHhfUFNDX01BWE5VTSkpCi0JCWlkeCA9IGZyZWVfaWR4OwotCi0JaWYgKGlkeCA8IDApCi0JCXJldHVybjsgLyogTm8gZnJlZSBzbG90OyBhYm9ydCAqLwotCi0Jb2Zfbm9kZV9nZXQobnApOwotCS8qIElmIHRoZSBzbG90IGlzIGFscmVhZHkgb2NjdXBpZWQsIHRoZW4gc3dhcCBzbG90cyAqLwotCWlmIChtcGM1Mnh4X3VhcnRfbm9kZXNbaWR4XSAmJiAoZnJlZV9pZHggIT0gLTEpKQotCQltcGM1Mnh4X3VhcnRfbm9kZXNbZnJlZV9pZHhdID0gbXBjNTJ4eF91YXJ0X25vZGVzW2lkeF07Ci0JbXBjNTJ4eF91YXJ0X25vZGVzW2lkeF0gPSBucDsKIH0KIAogc3RhdGljIHZvaWQKQEAgLTEyNDMsMjMgKzEyMzEsMTcgQEAKIHsKIAlzdGF0aWMgaW50IGVudW1fZG9uZTsKIAlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwotCWNvbnN0IHVuc2lnbmVkIGludCAqZGV2bm87CiAJY29uc3Qgc3RydWN0ICBvZl9kZXZpY2VfaWQgKm1hdGNoOwogCWludCBpOwogCiAJaWYgKGVudW1fZG9uZSkKIAkJcmV0dXJuOwogCi0JZm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCAic2VyaWFsIikgeworCS8qIEFzc2lnbiBpbmRleCB0byBlYWNoIFBTQyBpbiBkZXZpY2UgdHJlZSAqLworCWZvcl9lYWNoX21hdGNoaW5nX25vZGUobnAsIG1wYzUyeHhfdWFydF9vZl9tYXRjaCkgewogCQltYXRjaCA9IG9mX21hdGNoX25vZGUobXBjNTJ4eF91YXJ0X29mX21hdGNoLCBucCk7Ci0JCWlmICghbWF0Y2gpCi0JCQljb250aW51ZTsKLQogCQlwc2Nfb3BzID0gbWF0Y2gtPmRhdGE7Ci0KLQkJLyogSXMgYSBwYXJ0aWN1bGFyIGRldmljZSBudW1iZXIgcmVxdWVzdGVkPyAqLwotCQlkZXZubyA9IG9mX2dldF9wcm9wZXJ0eShucCwgInBvcnQtbnVtYmVyIiwgTlVMTCk7Ci0JCW1wYzUyeHhfdWFydF9vZl9hc3NpZ24obnAsIGRldm5vID8gKmRldm5vIDogLTEpOworCQltcGM1Mnh4X3VhcnRfb2ZfYXNzaWduKG5wKTsKIAl9CiAKIAllbnVtX2RvbmUgPSAxOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9zcGkveGlsaW54X3NwaS5jIGIvZHJpdmVycy9zcGkveGlsaW54X3NwaS5jCmluZGV4IGZlN2U1ZjMuLjQ5NGQzZjcgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvc3BpL3hpbGlueF9zcGkuYworKysgYi9kcml2ZXJzL3NwaS94aWxpbnhfc3BpLmMKQEAgLTM1NCw3ICszNTQsNyBAQAogCWlmICh4c3BpLT5yZWdzID09IE5VTEwpIHsKIAkJcmMgPSAtRU5PTUVNOwogCQlkZXZfd2Fybigmb2ZkZXYtPmRldiwgImlvcmVtYXAgZmFpbHVyZVxuIik7Ci0JCWdvdG8gcHV0X21hc3RlcjsKKwkJZ290byByZWxlYXNlX21lbTsKIAl9CiAJeHNwaS0+aXJxID0gcl9pcnEtPnN0YXJ0OwogCkBAIC0zNjUsNyArMzY1LDcgQEAKIAlwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG9mZGV2LT5ub2RlLCAieGxueCxudW0tc3MtYml0cyIsICZsZW4pOwogCWlmICghcHJvcCB8fCBsZW4gPCBzaXplb2YoKnByb3ApKSB7CiAJCWRldl93YXJuKCZvZmRldi0+ZGV2LCAibm8gJ3hsbngsbnVtLXNzLWJpdHMnIHByb3BlcnR5XG4iKTsKLQkJZ290byBwdXRfbWFzdGVyOworCQlnb3RvIHVubWFwX2lvOwogCX0KIAltYXN0ZXItPm51bV9jaGlwc2VsZWN0ID0gKnByb3A7CiAKQEAgLTM5Nyw2ICszOTcsOCBAQAogCWZyZWVfaXJxKHhzcGktPmlycSwgeHNwaSk7CiB1bm1hcF9pbzoKIAlpb3VubWFwKHhzcGktPnJlZ3MpOworcmVsZWFzZV9tZW06CisJcmVsZWFzZV9tZW1fcmVnaW9uKHJfbWVtLT5zdGFydCwgcmVzb3VyY2Vfc2l6ZShyX21lbSkpOwogcHV0X21hc3RlcjoKIAlzcGlfbWFzdGVyX3B1dChtYXN0ZXIpOwogCXJldHVybiByYzsKQEAgLTQwNiw2ICs0MDgsNyBAQAogewogCXN0cnVjdCB4aWxpbnhfc3BpICp4c3BpOwogCXN0cnVjdCBzcGlfbWFzdGVyICptYXN0ZXI7CisJc3RydWN0IHJlc291cmNlIHJfbWVtOwogCiAJbWFzdGVyID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEob2ZkZXYpOwogCXhzcGkgPSBzcGlfbWFzdGVyX2dldF9kZXZkYXRhKG1hc3Rlcik7CkBAIC00MTMsNiArNDE2LDggQEAKIAlzcGlfYml0YmFuZ19zdG9wKCZ4c3BpLT5iaXRiYW5nKTsKIAlmcmVlX2lycSh4c3BpLT5pcnEsIHhzcGkpOwogCWlvdW5tYXAoeHNwaS0+cmVncyk7CisJaWYgKCFvZl9hZGRyZXNzX3RvX3Jlc291cmNlKG9mZGV2LT5ub2RlLCAwLCAmcl9tZW0pKQorCQlyZWxlYXNlX21lbV9yZWdpb24ocl9tZW0uc3RhcnQsIHJlc291cmNlX3NpemUoJnJfbWVtKSk7CiAJZGV2X3NldF9kcnZkYXRhKCZvZmRldi0+ZGV2LCAwKTsKIAlzcGlfbWFzdGVyX3B1dCh4c3BpLT5iaXRiYW5nLm1hc3Rlcik7CiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vYXR5L3JhZGVvbl9wbS5jIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX3BtLmMKaW5kZXggYzZkN2NjNy4uMWRlMGMwMCAxMDA2NDQKLS0tIGEvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX3BtLmMKKysrIGIvZHJpdmVycy92aWRlby9hdHkvcmFkZW9uX3BtLmMKQEAgLTI1ODIsNyArMjU4Miw3IEBACiAJCSAqIGNhbGxpbmcgcGNpX3NldF9wb3dlcl9zdGF0ZSgpCiAJCSAqLwogCQlyYWRlb25mYl93aGFja19wb3dlcl9zdGF0ZShyaW5mbywgUENJX0QyKTsKLQkJcGNpX3NldF9wb3dlcl9zdGF0ZShyaW5mby0+cGRldiwgUENJX0QyKTsKKwkJX19wY2lfY29tcGxldGVfcG93ZXJfdHJhbnNpdGlvbihyaW5mby0+cGRldiwgUENJX0QyKTsKIAl9IGVsc2UgewogCQlwcmludGsoS0VSTl9ERUJVRyAicmFkZW9uZmIgKCVzKTogc3dpdGNoaW5nIHRvIEQwIHN0YXRlLi4uXG4iLAogCQkgICAgICAgcGNpX25hbWUocmluZm8tPnBkZXYpKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmMgYi9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jCmluZGV4IDM3YjQzM2EuLmUzMjdiODQ4IDEwMDY0NAotLS0gYS9kcml2ZXJzL3ZpZGVvL3ZpYS92aWFmYmRldi5jCisrKyBiL2RyaXZlcnMvdmlkZW8vdmlhL3ZpYWZiZGV2LmMKQEAgLTIwNTksMjUgKzIwNTksMjEgQEAKIAlpZiAodmlhZmJfZW50cnkpIHsKIAkJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiZHZwMCIsIDAsICp2aWFmYl9lbnRyeSk7CiAJCWlmIChlbnRyeSkgewotCQkJZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJCQllbnRyeS0+cmVhZF9wcm9jID0gdmlhZmJfZHZwMF9wcm9jX3JlYWQ7CiAJCQllbnRyeS0+d3JpdGVfcHJvYyA9IHZpYWZiX2R2cDBfcHJvY193cml0ZTsKIAkJfQogCQllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJkdnAxIiwgMCwgKnZpYWZiX2VudHJ5KTsKIAkJaWYgKGVudHJ5KSB7Ci0JCQllbnRyeS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAkJCWVudHJ5LT5yZWFkX3Byb2MgPSB2aWFmYl9kdnAxX3Byb2NfcmVhZDsKIAkJCWVudHJ5LT53cml0ZV9wcm9jID0gdmlhZmJfZHZwMV9wcm9jX3dyaXRlOwogCQl9CiAJCWVudHJ5ID0gY3JlYXRlX3Byb2NfZW50cnkoImRmcGgiLCAwLCAqdmlhZmJfZW50cnkpOwogCQlpZiAoZW50cnkpIHsKLQkJCWVudHJ5LT5vd25lciA9IFRISVNfTU9EVUxFOwogCQkJZW50cnktPnJlYWRfcHJvYyA9IHZpYWZiX2RmcGhfcHJvY19yZWFkOwogCQkJZW50cnktPndyaXRlX3Byb2MgPSB2aWFmYl9kZnBoX3Byb2Nfd3JpdGU7CiAJCX0KIAkJZW50cnkgPSBjcmVhdGVfcHJvY19lbnRyeSgiZGZwbCIsIDAsICp2aWFmYl9lbnRyeSk7CiAJCWlmIChlbnRyeSkgewotCQkJZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJCQllbnRyeS0+cmVhZF9wcm9jID0gdmlhZmJfZGZwbF9wcm9jX3JlYWQ7CiAJCQllbnRyeS0+d3JpdGVfcHJvYyA9IHZpYWZiX2RmcGxfcHJvY193cml0ZTsKIAkJfQpAQCAtMjA4Niw3ICsyMDgyLDYgQEAKIAkJICAgIHZpYXBhcmluZm8tPmNoaXBfaW5mby0+bHZkc19jaGlwX2luZm8yLmx2ZHNfY2hpcF9uYW1lKSB7CiAJCQllbnRyeSA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJ2dDE2MzYiLCAwLCAqdmlhZmJfZW50cnkpOwogCQkJaWYgKGVudHJ5KSB7Ci0JCQkJZW50cnktPm93bmVyID0gVEhJU19NT0RVTEU7CiAJCQkJZW50cnktPnJlYWRfcHJvYyA9IHZpYWZiX3Z0MTYzNl9wcm9jX3JlYWQ7CiAJCQkJZW50cnktPndyaXRlX3Byb2MgPSB2aWFmYl92dDE2MzZfcHJvY193cml0ZTsKIAkJCX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZyBiL2RyaXZlcnMvd2F0Y2hkb2cvS2NvbmZpZwppbmRleCA1NWY2NGFmLi42MzAyNDE0IDEwMDY0NAotLS0gYS9kcml2ZXJzL3dhdGNoZG9nL0tjb25maWcKKysrIGIvZHJpdmVycy93YXRjaGRvZy9LY29uZmlnCkBAIC03NzIsNyArNzcyLDcgQEAKIAogY29uZmlnIEdFRl9XRFQKIAl0cmlzdGF0ZSAiR0UgRmFudWMgV2F0Y2hkb2cgVGltZXIiCi0JZGVwZW5kcyBvbiBHRUZfU0JDNjEwCisJZGVwZW5kcyBvbiBHRUZfU0JDNjEwIHx8IEdFRl9TQkMzMTAgfHwgR0VGX1BQQzlBCiAJLS0taGVscC0tLQogCSAgV2F0Y2hkb2cgdGltZXIgZm91bmQgaW4gYSBudW1iZXIgb2YgR0UgRmFudWMgc2luZ2xlIGJvYXJkIGNvbXB1dGVycy4KIApkaWZmIC0tZ2l0IGEvZHJpdmVycy93YXRjaGRvZy9ocHdkdC5jIGIvZHJpdmVycy93YXRjaGRvZy9ocHdkdC5jCmluZGV4IDZjZjE1NWQuLjMxMzczNjEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvd2F0Y2hkb2cvaHB3ZHQuYworKysgYi9kcml2ZXJzL3dhdGNoZG9nL2hwd2R0LmMKQEAgLTM4MCw3ICszODAsNyBAQAogICoJVGhpcyBmdW5jdGlvbiBjaGVja3Mgd2hldGhlciBvciBub3QgYSBTTUJJT1MvRE1JIHJlY29yZCBpcwogICoJdGhlIDY0Yml0IENSVSBpbmZvIG9yIG5vdAogICovCi1zdGF0aWMgdm9pZCBfX2RldmluaXQgZG1pX2ZpbmRfY3J1KGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICpkbSkKK3N0YXRpYyB2b2lkIF9fZGV2aW5pdCBkbWlfZmluZF9jcnUoY29uc3Qgc3RydWN0IGRtaV9oZWFkZXIgKmRtLCB2b2lkICpkdW1teSkKIHsKIAlzdHJ1Y3Qgc21iaW9zX2NydTY0X2luZm8gKnNtYmlvc19jcnU2NF9wdHI7CiAJdW5zaWduZWQgbG9uZyBjcnVfcGh5c2ljYWxfYWRkcmVzczsKQEAgLTQwMyw3ICs0MDMsNyBAQAogewogCWNydV9yb21fYWRkciA9IE5VTEw7CiAKLQlkbWlfd2FsayhkbWlfZmluZF9jcnUpOworCWRtaV93YWxrKGRtaV9maW5kX2NydSwgTlVMTCk7CiAKIAkvKiBpZiBjcnVfcm9tX2FkZHIgaGFzIGJlZW4gc2V0IHRoZW4gd2UgZm91bmQgYSBDUlUgc2VydmljZSAqLwogCXJldHVybiAoKGNydV9yb21fYWRkciAhPSBOVUxMKSA/IDAgOiAtRU5PREVWKTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMveGVuL21hbmFnZS5jIGIvZHJpdmVycy94ZW4vbWFuYWdlLmMKaW5kZXggM2NjZDM0OC4uMGQ2MWRiMSAxMDA2NDQKLS0tIGEvZHJpdmVycy94ZW4vbWFuYWdlLmMKKysrIGIvZHJpdmVycy94ZW4vbWFuYWdlLmMKQEAgLTM5LDEyICszOSw2IEBACiAKIAlCVUdfT04oIWlycXNfZGlzYWJsZWQoKSk7CiAKLQllcnIgPSBkZXZpY2VfcG93ZXJfZG93bihQTVNHX1NVU1BFTkQpOwotCWlmIChlcnIpIHsKLQkJcHJpbnRrKEtFUk5fRVJSICJ4ZW5fc3VzcGVuZDogZGV2aWNlX3Bvd2VyX2Rvd24gZmFpbGVkOiAlZFxuIiwKLQkJICAgICAgIGVycik7Ci0JCXJldHVybiBlcnI7Ci0JfQogCWVyciA9IHN5c2Rldl9zdXNwZW5kKFBNU0dfU1VTUEVORCk7CiAJaWYgKGVycikgewogCQlwcmludGsoS0VSTl9FUlIgInhlbl9zdXNwZW5kOiBzeXNkZXZfc3VzcGVuZCBmYWlsZWQ6ICVkXG4iLApAQCAtNjksNyArNjMsNiBAQAogCXhlbl9tbV91bnBpbl9hbGwoKTsKIAogCXN5c2Rldl9yZXN1bWUoKTsKLQlkZXZpY2VfcG93ZXJfdXAoUE1TR19SRVNVTUUpOwogCiAJaWYgKCEqY2FuY2VsbGVkKSB7CiAJCXhlbl9pcnFfcmVzdW1lKCk7CkBAIC0xMDgsNiArMTAxLDEyIEBACiAJLyogWFhYIHVzZSBub3JtYWwgZGV2aWNlIHRyZWU/ICovCiAJeGVuYnVzX3N1c3BlbmQoKTsKIAorCWVyciA9IGRldmljZV9wb3dlcl9kb3duKFBNU0dfU1VTUEVORCk7CisJaWYgKGVycikgeworCQlwcmludGsoS0VSTl9FUlIgImRldmljZV9wb3dlcl9kb3duIGZhaWxlZDogJWRcbiIsIGVycik7CisJCWdvdG8gcmVzdW1lX2RldmljZXM7CisJfQorCiAJZXJyID0gc3RvcF9tYWNoaW5lKHhlbl9zdXNwZW5kLCAmY2FuY2VsbGVkLCBjcHVtYXNrX29mKDApKTsKIAlpZiAoZXJyKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiZmFpbGVkIHRvIHN0YXJ0IHhlbl9zdXNwZW5kOiAlZFxuIiwgZXJyKTsKQEAgLTEyMCw2ICsxMTksOSBAQAogCX0gZWxzZQogCQl4ZW5idXNfc3VzcGVuZF9jYW5jZWwoKTsKIAorCWRldmljZV9wb3dlcl91cChQTVNHX1JFU1VNRSk7CisKK3Jlc3VtZV9kZXZpY2VzOgogCWRldmljZV9yZXN1bWUoUE1TR19SRVNVTUUpOwogCiAJLyogTWFrZSBzdXJlIHRpbWVyIGV2ZW50cyBnZXQgcmV0cmlnZ2VyZWQgb24gYWxsIENQVXMgKi8KZGlmZiAtLWdpdCBhL2ZzL2Fmcy9wcm9jLmMgYi9mcy9hZnMvcHJvYy5jCmluZGV4IDc1NzhjMWEuLjg2MzA2MTUgMTAwNjQ0Ci0tLSBhL2ZzL2Fmcy9wcm9jLmMKKysrIGIvZnMvYWZzL3Byb2MuYwpAQCAtMTQ2LDcgKzE0Niw2IEBACiAJcHJvY19hZnMgPSBwcm9jX21rZGlyKCJmcy9hZnMiLCBOVUxMKTsKIAlpZiAoIXByb2NfYWZzKQogCQlnb3RvIGVycm9yX2RpcjsKLQlwcm9jX2Fmcy0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCXAgPSBwcm9jX2NyZWF0ZSgiY2VsbHMiLCAwLCBwcm9jX2FmcywgJmFmc19wcm9jX2NlbGxzX2ZvcHMpOwogCWlmICghcCkKZGlmZiAtLWdpdCBhL2ZzL2NpZnMvY2lmc19kZWJ1Zy5jIGIvZnMvY2lmcy9jaWZzX2RlYnVnLmMKaW5kZXggODc3ZTRkOS4uN2YxOWZlZiAxMDA2NDQKLS0tIGEvZnMvY2lmcy9jaWZzX2RlYnVnLmMKKysrIGIvZnMvY2lmcy9jaWZzX2RlYnVnLmMKQEAgLTQwNCw3ICs0MDQsNiBAQAogCWlmIChwcm9jX2ZzX2NpZnMgPT0gTlVMTCkKIAkJcmV0dXJuOwogCi0JcHJvY19mc19jaWZzLT5vd25lciA9IFRISVNfTU9EVUxFOwogCXByb2NfY3JlYXRlKCJEZWJ1Z0RhdGEiLCAwLCBwcm9jX2ZzX2NpZnMsICZjaWZzX2RlYnVnX2RhdGFfcHJvY19mb3BzKTsKIAogI2lmZGVmIENPTkZJR19DSUZTX1NUQVRTCmRpZmYgLS1naXQgYS9mcy9mY250bC5jIGIvZnMvZmNudGwuYwppbmRleCBkODY1Y2E2Ni4uY2M4ZTRkZSAxMDA2NDQKLS0tIGEvZnMvZmNudGwuYworKysgYi9mcy9mY250bC5jCkBAIC01MzEsNiArNTMxLDEyIEBACiAJCWlmICghbmV3KQogCQkJcmV0dXJuIC1FTk9NRU07CiAJfQorCisJLyoKKwkgKiBXZSBuZWVkIHRvIHRha2UgZl9sb2NrIGZpcnN0IHNpbmNlIGl0J3Mgbm90IGFuIElSUS1zYWZlCisJICogbG9jay4KKwkgKi8KKwlzcGluX2xvY2soJmZpbHAtPmZfbG9jayk7CiAJd3JpdGVfbG9ja19pcnEoJmZhc3luY19sb2NrKTsKIAlmb3IgKGZwID0gZmFwcDsgKGZhID0gKmZwKSAhPSBOVUxMOyBmcCA9ICZmYS0+ZmFfbmV4dCkgewogCQlpZiAoZmEtPmZhX2ZpbGUgPT0gZmlscCkgewpAQCAtNTU1LDE0ICs1NjEsMTIgQEAKIAkJcmVzdWx0ID0gMTsKIAl9CiBvdXQ6Ci0JLyogRml4IHVwIEZBU1lOQyBiaXQgd2hpbGUgc3RpbGwgaG9sZGluZyBmYXN5bmNfbG9jayAqLwotCXNwaW5fbG9jaygmZmlscC0+Zl9sb2NrKTsKIAlpZiAob24pCiAJCWZpbHAtPmZfZmxhZ3MgfD0gRkFTWU5DOwogCWVsc2UKIAkJZmlscC0+Zl9mbGFncyAmPSB+RkFTWU5DOwotCXNwaW5fdW5sb2NrKCZmaWxwLT5mX2xvY2spOwogCXdyaXRlX3VubG9ja19pcnEoJmZhc3luY19sb2NrKTsKKwlzcGluX3VubG9jaygmZmlscC0+Zl9sb2NrKTsKIAlyZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9mcy9mdXNlL2ZpbGUuYyBiL2ZzL2Z1c2UvZmlsZS5jCmluZGV4IGQ5ZmRiN2MuLjgyMWQxMGYgMTAwNjQ0Ci0tLSBhL2ZzL2Z1c2UvZmlsZS5jCisrKyBiL2ZzL2Z1c2UvZmlsZS5jCkBAIC0xNDY1LDcgKzE0NjUsNyBAQAogCWNhc2UgU0VFS19FTkQ6CiAJCXJldHZhbCA9IGZ1c2VfdXBkYXRlX2F0dHJpYnV0ZXMoaW5vZGUsIE5VTEwsIGZpbGUsIE5VTEwpOwogCQlpZiAocmV0dmFsKQotCQkJcmV0dXJuIHJldHZhbDsKKwkJCWdvdG8gZXhpdDsKIAkJb2Zmc2V0ICs9IGlfc2l6ZV9yZWFkKGlub2RlKTsKIAkJYnJlYWs7CiAJY2FzZSBTRUVLX0NVUjoKQEAgLTE0NzksNiArMTQ3OSw3IEBACiAJCX0KIAkJcmV0dmFsID0gb2Zmc2V0OwogCX0KK2V4aXQ6CiAJbXV0ZXhfdW5sb2NrKCZpbm9kZS0+aV9tdXRleCk7CiAJcmV0dXJuIHJldHZhbDsKIH0KZGlmZiAtLWdpdCBhL2ZzL2pmcy9LY29uZmlnIGIvZnMvamZzL0tjb25maWcKaW5kZXggOWZmNjE5YS4uNTdjZWYxOSAxMDA2NDQKLS0tIGEvZnMvamZzL0tjb25maWcKKysrIGIvZnMvamZzL0tjb25maWcKQEAgLTEsNiArMSw3IEBACiBjb25maWcgSkZTX0ZTCiAJdHJpc3RhdGUgIkpGUyBmaWxlc3lzdGVtIHN1cHBvcnQiCiAJc2VsZWN0IE5MUworCXNlbGVjdCBDUkMzMgogCWhlbHAKIAkgIFRoaXMgaXMgYSBwb3J0IG9mIElCTSdzIEpvdXJuYWxlZCBGaWxlc3lzdGVtIC4gIE1vcmUgaW5mb3JtYXRpb24gaXMKIAkgIGF2YWlsYWJsZSBpbiB0aGUgZmlsZSA8ZmlsZTpEb2N1bWVudGF0aW9uL2ZpbGVzeXN0ZW1zL2pmcy50eHQ+LgpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19kZWJ1Zy5jIGIvZnMvamZzL2pmc19kZWJ1Zy5jCmluZGV4IDZhNzNkZTguLmRkODI0ZDkgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfZGVidWcuYworKysgYi9mcy9qZnMvamZzX2RlYnVnLmMKQEAgLTkwLDcgKzkwLDYgQEAKIAogCWlmICghKGJhc2UgPSBwcm9jX21rZGlyKCJmcy9qZnMiLCBOVUxMKSkpCiAJCXJldHVybjsKLQliYXNlLT5vd25lciA9IFRISVNfTU9EVUxFOwogCiAJZm9yIChpID0gMDsgaSA8IE5QUk9DRU5UOyBpKyspCiAJCXByb2NfY3JlYXRlKEVudHJpZXNbaV0ubmFtZSwgMCwgYmFzZSwgRW50cmllc1tpXS5wcm9jX2ZvcHMpOwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19leHRlbnQuYyBiL2ZzL2pmcy9qZnNfZXh0ZW50LmMKaW5kZXggMTY5ODAyZS4uYmJiZDVmMiAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc19leHRlbnQuYworKysgYi9mcy9qZnMvamZzX2V4dGVudC5jCkBAIC0zNjIsMTEgKzM2MiwxMiBAQAogaW50IGV4dEhpbnQoc3RydWN0IGlub2RlICppcCwgczY0IG9mZnNldCwgeGFkX3QgKiB4cCkKIHsKIAlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaXAtPmlfc2I7Ci0Jc3RydWN0IHhhZGxpc3QgeGFkbDsKLQlzdHJ1Y3QgbHhkbGlzdCBseGRsOwotCWx4ZF90IGx4ZDsKKwlpbnQgbmJwZXJwYWdlID0gSkZTX1NCSShzYiktPm5icGVycGFnZTsKIAlzNjQgcHJldjsKLQlpbnQgcmMsIG5icGVycGFnZSA9IEpGU19TQkkoc2IpLT5uYnBlcnBhZ2U7CisJaW50IHJjID0gMDsKKwlzNjQgeGFkZHI7CisJaW50IHhsZW47CisJaW50IHhmbGFnOwogCiAJLyogaW5pdCB0aGUgaGludCBhcyAibm8gaGludCBwcm92aWRlZCIgKi8KIAlYQURhZGRyZXNzKHhwLCAwKTsKQEAgLTM3Niw0NiArMzc3LDMwIEBACiAJICovCiAJcHJldiA9ICgob2Zmc2V0ICYgflBPRkZTRVQpID4+IEpGU19TQkkoc2IpLT5sMmJzaXplKSAtIG5icGVycGFnZTsKIAotCS8qIGlmIHRoZSBvZmZzZXRzIGluIHRoZSBmaXJzdCBwYWdlIG9mIHRoZSBmaWxlLAotCSAqIG5vIGhpbnQgcHJvdmlkZWQuCisJLyogaWYgdGhlIG9mZnNldCBpcyBpbiB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgZmlsZSwgbm8gaGludCBwcm92aWRlZC4KIAkgKi8KIAlpZiAocHJldiA8IDApCi0JCXJldHVybiAoMCk7CisJCWdvdG8gb3V0OwogCi0JLyogcHJlcGFyZSB0byBsb29rdXAgdGhlIHByZXZpb3VzIHBhZ2UncyBleHRlbnQgaW5mbyAqLwotCWx4ZGwubWF4bmx4ZCA9IDE7Ci0JbHhkbC5ubHhkID0gMTsKLQlseGRsLmx4ZCA9ICZseGQ7Ci0JTFhEb2Zmc2V0KCZseGQsIHByZXYpCi0JTFhEbGVuZ3RoKCZseGQsIG5icGVycGFnZSk7CisJcmMgPSB4dExvb2t1cChpcCwgcHJldiwgbmJwZXJwYWdlLCAmeGZsYWcsICZ4YWRkciwgJnhsZW4sIDApOwogCi0JeGFkbC5tYXhueGFkID0gMTsKLQl4YWRsLm54YWQgPSAwOwotCXhhZGwueGFkID0geHA7CisJaWYgKChyYyA9PSAwKSAmJiB4bGVuKSB7CisJCWlmICh4bGVuICE9IG5icGVycGFnZSkgeworCQkJamZzX2Vycm9yKGlwLT5pX3NiLCAiZXh0SGludDogY29ycnVwdCB4dHJlZSIpOworCQkJcmMgPSAtRUlPOworCQl9CisJCVhBRGFkZHJlc3MoeHAsIHhhZGRyKTsKKwkJWEFEbGVuZ3RoKHhwLCB4bGVuKTsKKwkJLyoKKwkJICogb25seSBwcmVzZXJ2ZSB0aGUgYWJuciBmbGFnIHdpdGhpbiB0aGUgeGFkIGZsYWdzCisJCSAqIG9mIHRoZSByZXR1cm5lZCBoaW50LgorCQkgKi8KKwkJeHAtPmZsYWcgID0geGZsYWcgJiBYQURfTk9UUkVDT1JERUQ7CisJfSBlbHNlCisJCXJjID0gMDsKIAotCS8qIHBlcmZvcm0gdGhlIGxvb2t1cCAqLwotCWlmICgocmMgPSB4dExvb2t1cExpc3QoaXAsICZseGRsLCAmeGFkbCwgMCkpKQotCQlyZXR1cm4gKHJjKTsKLQotCS8qIGNoZWNrIGlmIG5vIGV4dGVudCBleGlzdHMgZm9yIHRoZSBwcmV2aW91cyBwYWdlLgotCSAqIHRoaXMgaXMgcG9zc2libGUgZm9yIHNwYXJzZSBmaWxlcy4KLQkgKi8KLQlpZiAoeGFkbC5ueGFkID09IDApIHsKLS8vCQlhc3NlcnQoSVNTUEFSU0UoaXApKTsKLQkJcmV0dXJuICgwKTsKLQl9Ci0KLQkvKiBvbmx5IHByZXNlcnZlIHRoZSBhYm5yIGZsYWcgd2l0aGluIHRoZSB4YWQgZmxhZ3MKLQkgKiBvZiB0aGUgcmV0dXJuZWQgaGludC4KLQkgKi8KLQl4cC0+ZmxhZyAmPSBYQURfTk9UUkVDT1JERUQ7Ci0KLQlpZih4YWRsLm54YWQgIT0gMSB8fCBsZW5ndGhYQUQoeHApICE9IG5icGVycGFnZSkgewotCQlqZnNfZXJyb3IoaXAtPmlfc2IsICJleHRIaW50OiBjb3JydXB0IHh0cmVlIik7Ci0JCXJldHVybiAtRUlPOwotCX0KLQotCXJldHVybiAoMCk7CitvdXQ6CisJcmV0dXJuIChyYyk7CiB9CiAKIApkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19pbWFwLmMgYi9mcy9qZnMvamZzX2ltYXAuYwppbmRleCAwZjk0MzgxLi4zNDYwNTcyIDEwMDY0NAotLS0gYS9mcy9qZnMvamZzX2ltYXAuYworKysgYi9mcy9qZnMvamZzX2ltYXAuYwpAQCAtNTcsMTIgKzU3LDYgQEAKICNpbmNsdWRlICJqZnNfZGVidWcuaCIKIAogLyoKLSAqIF9fbWFya19pbm9kZV9kaXJ0eSBleHBlY3RzIGlub2RlcyB0byBiZSBoYXNoZWQuICBTaW5jZSB3ZSBkb24ndCB3YW50Ci0gKiBzcGVjaWFsIGlub2RlcyBpbiB0aGUgZmlsZXNldCBpbm9kZSBzcGFjZSwgd2UgbWFrZSB0aGVtIGFwcGVhciBoYXNoZWQsCi0gKiBidXQgZG8gbm90IHB1dCBvbiBhbnkgbGlzdHMuCi0gKi8KLQotLyoKICAqIGltYXAgbG9ja3MKICAqLwogLyogaWFnIGZyZWUgbGlzdCBsb2NrICovCkBAIC00OTcsNyArNDkxLDkgQEAKIAlyZWxlYXNlX21ldGFwYWdlKG1wKTsKIAogCS8qCi0JICogdGhhdCB3aWxsIGxvb2sgaGFzaGVkLCBidXQgd29uJ3QgYmUgb24gYW55IGxpc3Q7IGhsaXN0X2RlbCgpCisJICogX19tYXJrX2lub2RlX2RpcnR5IGV4cGVjdHMgaW5vZGVzIHRvIGJlIGhhc2hlZC4gIFNpbmNlIHdlIGRvbid0CisJICogd2FudCBzcGVjaWFsIGlub2RlcyBpbiB0aGUgZmlsZXNldCBpbm9kZSBzcGFjZSwgd2UgbWFrZSB0aGVtCisJICogYXBwZWFyIGhhc2hlZCwgYnV0IGRvIG5vdCBwdXQgb24gYW55IGxpc3RzLiAgaGxpc3RfZGVsKCkKIAkgKiB3aWxsIHdvcmsgZmluZSBhbmQgcmVxdWlyZSBubyBsb2NraW5nLgogCSAqLwogCWlwLT5pX2hhc2gucHByZXYgPSAmaXAtPmlfaGFzaC5uZXh0OwpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc19tZXRhcGFnZS5jIGIvZnMvamZzL2pmc19tZXRhcGFnZS5jCmluZGV4IGMzNTAwNTcuLjA3YjZjNWQgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfbWV0YXBhZ2UuYworKysgYi9mcy9qZnMvamZzX21ldGFwYWdlLmMKQEAgLTM2OSw2ICszNjksNyBAQAogCXVuc2lnbmVkIGxvbmcgYmlvX2J5dGVzID0gMDsKIAl1bnNpZ25lZCBsb25nIGJpb19vZmZzZXQgPSAwOwogCWludCBvZmZzZXQ7CisJaW50IGJhZF9ibG9ja3MgPSAwOwogCiAJcGFnZV9zdGFydCA9IChzZWN0b3JfdClwYWdlLT5pbmRleCA8PAogCQkgICAgIChQQUdFX0NBQ0hFX1NISUZUIC0gaW5vZGUtPmlfYmxrYml0cyk7CkBAIC0zOTQsNiArMzk1LDcgQEAKIAkJfQogCiAJCWNsZWFyX2JpdChNRVRBX2RpcnR5LCAmbXAtPmZsYWcpOworCQlzZXRfYml0KE1FVEFfaW8sICZtcC0+ZmxhZyk7CiAJCWJsb2NrX29mZnNldCA9IG9mZnNldCA+PiBpbm9kZS0+aV9ibGtiaXRzOwogCQlsYmxvY2sgPSBwYWdlX3N0YXJ0ICsgYmxvY2tfb2Zmc2V0OwogCQlpZiAoYmlvKSB7CkBAIC00MDIsNyArNDA0LDYgQEAKIAkJCQlsZW4gPSBtaW4oeGxlbiwgYmxvY2tzX3Blcl9tcCk7CiAJCQkJeGxlbiAtPSBsZW47CiAJCQkJYmlvX2J5dGVzICs9IGxlbiA8PCBpbm9kZS0+aV9ibGtiaXRzOwotCQkJCXNldF9iaXQoTUVUQV9pbywgJm1wLT5mbGFnKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJCS8qIE5vdCBjb250aWd1b3VzICovCkBAIC00MjQsMTIgKzQyNSwxNCBAQAogCQl4bGVuID0gKFBBR0VfQ0FDSEVfU0laRSAtIG9mZnNldCkgPj4gaW5vZGUtPmlfYmxrYml0czsKIAkJcGJsb2NrID0gbWV0YXBhZ2VfZ2V0X2Jsb2Nrcyhpbm9kZSwgbGJsb2NrLCAmeGxlbik7CiAJCWlmICghcGJsb2NrKSB7Ci0JCQkvKiBOZWVkIGJldHRlciBlcnJvciBoYW5kbGluZyAqLwogCQkJcHJpbnRrKEtFUk5fRVJSICJKRlM6IG1ldGFwYWdlX2dldF9ibG9ja3MgZmFpbGVkXG4iKTsKLQkJCWRlY19pbyhwYWdlLCBsYXN0X3dyaXRlX2NvbXBsZXRlKTsKKwkJCS8qCisJCQkgKiBXZSBhbHJlYWR5IGNhbGxlZCBpbmNfaW8oKSwgYnV0IGNhbid0IGNhbmNlbCBpdAorCQkJICogd2l0aCBkZWNfaW8oKSB1bnRpbCB3ZSdyZSBkb25lIHdpdGggdGhlIHBhZ2UKKwkJCSAqLworCQkJYmFkX2Jsb2NrcysrOwogCQkJY29udGludWU7CiAJCX0KLQkJc2V0X2JpdChNRVRBX2lvLCAmbXAtPmZsYWcpOwogCQlsZW4gPSBtaW4oeGxlbiwgKGludClKRlNfU0JJKGlub2RlLT5pX3NiKS0+bmJwZXJwYWdlKTsKIAogCQliaW8gPSBiaW9fYWxsb2MoR0ZQX05PRlMsIDEpOwpAQCAtNDU5LDYgKzQ2Miw5IEBACiAKIAl1bmxvY2tfcGFnZShwYWdlKTsKIAorCWlmIChiYWRfYmxvY2tzKQorCQlnb3RvIGVycl9vdXQ7CisKIAlpZiAobnJfdW5kZXJ3YXkgPT0gMCkKIAkJZW5kX3BhZ2Vfd3JpdGViYWNrKHBhZ2UpOwogCkBAIC00NzQsNyArNDgwLDkgQEAKIAliaW9fcHV0KGJpbyk7CiAJdW5sb2NrX3BhZ2UocGFnZSk7CiAJZGVjX2lvKHBhZ2UsIGxhc3Rfd3JpdGVfY29tcGxldGUpOwotCitlcnJfb3V0OgorCXdoaWxlIChiYWRfYmxvY2tzLS0pCisJCWRlY19pbyhwYWdlLCBsYXN0X3dyaXRlX2NvbXBsZXRlKTsKIAlyZXR1cm4gLUVJTzsKIH0KIApkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc190eXBlcy5oIGIvZnMvamZzL2pmc190eXBlcy5oCmluZGV4IDY0OWY5ODEuLjQzZWEzNzEgMTAwNjQ0Ci0tLSBhL2ZzL2pmcy9qZnNfdHlwZXMuaAorKysgYi9mcy9qZnMvamZzX3R5cGVzLmgKQEAgLTU4LDM1ICs1OCw2IEBACiAjZGVmaW5lCU9ORVMJCTB4ZmZmZmZmZmZ1CS8qIGFsbCBiaXQgb24JCSovCiAKIC8qCi0gKglsb2dpY2FsIHhkIChseGQpCi0gKi8KLXR5cGVkZWYgc3RydWN0IHsKLQl1bnNpZ25lZCBsZW46MjQ7Ci0JdW5zaWduZWQgb2ZmMTo4OwotCXUzMiBvZmYyOwotfSBseGRfdDsKLQotLyogbHhkX3QgZmllbGQgY29uc3RydWN0aW9uICovCi0jZGVmaW5lCUxYRGxlbmd0aChseGQsIGxlbmd0aDMyKQkoIChseGQpLT5sZW4gPSBsZW5ndGgzMiApCi0jZGVmaW5lCUxYRG9mZnNldChseGQsIG9mZnNldDY0KVwKLXtcCi0JKGx4ZCktPm9mZjEgPSAoKHM2NClvZmZzZXQ2NCkgPj4gMzI7XAotCShseGQpLT5vZmYyID0gKG9mZnNldDY0KSAmIDB4ZmZmZmZmZmY7XAotfQotCi0vKiBseGRfdCBmaWVsZCBleHRyYWN0aW9uICovCi0jZGVmaW5lCWxlbmd0aExYRChseGQpCSggKGx4ZCktPmxlbiApCi0jZGVmaW5lCW9mZnNldExYRChseGQpXAotCSggKChzNjQpKChseGQpLT5vZmYxKSkgPDwgMzIgfCAobHhkKS0+b2ZmMiApCi0KLS8qIGx4ZCBsaXN0ICovCi1zdHJ1Y3QgbHhkbGlzdCB7Ci0JczE2IG1heG5seGQ7Ci0JczE2IG5seGQ7Ci0JbHhkX3QgKmx4ZDsKLX07Ci0KLS8qCiAgKglwaHlzaWNhbCB4ZCAocHhkKQogICovCiB0eXBlZGVmIHN0cnVjdCB7CmRpZmYgLS1naXQgYS9mcy9qZnMvamZzX3h0cmVlLmMgYi9mcy9qZnMvamZzX3h0cmVlLmMKaW5kZXggYTI3ZTI2Yy4uZDY1NGE2NCAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc194dHJlZS5jCisrKyBiL2ZzL2pmcy9qZnNfeHRyZWUuYwpAQCAtMTY0LDExICsxNjQsOCBAQAogCQkvKiBpcyBsb29rdXAgb2Zmc2V0IGJleW9uZCBlb2YgPyAqLwogCQlzaXplID0gKCh1NjQpIGlwLT5pX3NpemUgKyAoSkZTX1NCSShpcC0+aV9zYiktPmJzaXplIC0gMSkpID4+CiAJCSAgICBKRlNfU0JJKGlwLT5pX3NiKS0+bDJic2l6ZTsKLQkJaWYgKGxzdGFydCA+PSBzaXplKSB7Ci0JCQlqZnNfZXJyKCJ4dExvb2t1cDogbHN0YXJ0ICgweCVseCkgPj0gc2l6ZSAoMHglbHgpIiwKLQkJCQkodWxvbmcpIGxzdGFydCwgKHVsb25nKSBzaXplKTsKKwkJaWYgKGxzdGFydCA+PSBzaXplKQogCQkJcmV0dXJuIDA7Ci0JCX0KIAl9CiAKIAkvKgpAQCAtMjIwLDI2NCArMjE3LDYgQEAKIAlyZXR1cm4gcmM7CiB9CiAKLQotLyoKLSAqCXh0TG9va3VwTGlzdCgpCi0gKgotICogZnVuY3Rpb246IG1hcCBhIHNpbmdsZSBsb2dpY2FsIGV4dGVudCBpbnRvIGEgbGlzdCBvZiBwaHlzaWNhbCBleHRlbnQ7Ci0gKgotICogcGFyYW1ldGVyOgotICoJc3RydWN0IGlub2RlCSppcCwKLSAqCXN0cnVjdCBseGRsaXN0CSpseGRsaXN0LAlseGQgbGlzdCAoaW4pCi0gKglzdHJ1Y3QgeGFkbGlzdAkqeGFkbGlzdCwJeGFkIGxpc3QgKGluL291dCkKLSAqCWludAkJZmxhZykKLSAqCi0gKiBjb3ZlcmFnZSBvZiBseGQgYnkgeGFkIHVuZGVyIGFzc3VtcHRpb24gb2YKLSAqIC4gbHhkJ3MgYXJlIG9yZGVyZWQgYW5kIGRpc2pvaW50LgotICogLiB4YWQncyBhcmUgb3JkZXJlZCBhbmQgZGlzam9pbnQuCi0gKgotICogcmV0dXJuOgotICoJMDoJc3VjY2VzcwotICoKLSAqIG5vdGU6IGEgcGFnZSBiZWluZyB3cml0dGVuIChldmVuIGEgc2luZ2xlIGJ5dGUpIGlzIGJhY2tlZCBmdWxseSwKLSAqCWV4Y2VwdCB0aGUgbGFzdCBwYWdlIHdoaWNoIGlzIG9ubHkgYmFja2VkIHdpdGggYmxvY2tzCi0gKglyZXF1aXJlZCB0byBjb3ZlciB0aGUgbGFzdCBieXRlOwotICoJdGhlIGV4dGVudCBiYWNraW5nIGEgcGFnZSBpcyBmdWxseSBjb250YWluZWQgd2l0aGluIGFuIHhhZDsKLSAqLwotaW50IHh0TG9va3VwTGlzdChzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgbHhkbGlzdCAqIGx4ZGxpc3QsCi0JCSBzdHJ1Y3QgeGFkbGlzdCAqIHhhZGxpc3QsIGludCBmbGFnKQotewotCWludCByYyA9IDA7Ci0Jc3RydWN0IGJ0c3RhY2sgYnRzdGFjazsKLQlpbnQgY21wOwotCXM2NCBibjsKLQlzdHJ1Y3QgbWV0YXBhZ2UgKm1wOwotCXh0cGFnZV90ICpwOwotCWludCBpbmRleDsKLQlseGRfdCAqbHhkOwotCXhhZF90ICp4YWQsICpweGQ7Ci0JczY0IHNpemUsIGxzdGFydCwgbGVuZCwgeHN0YXJ0LCB4ZW5kLCBwc3RhcnQ7Ci0JczY0IGxsZW4sIHhsZW4sIHBsZW47Ci0JczY0IHhhZGRyLCBwYWRkcjsKLQlpbnQgbmx4ZCwgbnB4ZCwgbWF4bnB4ZDsKLQotCW5weGQgPSB4YWRsaXN0LT5ueGFkID0gMDsKLQltYXhucHhkID0geGFkbGlzdC0+bWF4bnhhZDsKLQlweGQgPSB4YWRsaXN0LT54YWQ7Ci0KLQlubHhkID0gbHhkbGlzdC0+bmx4ZDsKLQlseGQgPSBseGRsaXN0LT5seGQ7Ci0KLQlsc3RhcnQgPSBvZmZzZXRMWEQobHhkKTsKLQlsbGVuID0gbGVuZ3RoTFhEKGx4ZCk7Ci0JbGVuZCA9IGxzdGFydCArIGxsZW47Ci0KLQlzaXplID0gKGlwLT5pX3NpemUgKyAoSkZTX1NCSShpcC0+aV9zYiktPmJzaXplIC0gMSkpID4+Ci0JICAgIEpGU19TQkkoaXAtPmlfc2IpLT5sMmJzaXplOwotCi0JLyoKLQkgKiBzZWFyY2ggZm9yIHRoZSB4YWQgZW50cnkgY292ZXJpbmcgdGhlIGxvZ2ljYWwgZXh0ZW50Ci0JICovCi0gICAgICBzZWFyY2g6Ci0JaWYgKGxzdGFydCA+PSBzaXplKQotCQlyZXR1cm4gMDsKLQotCWlmICgocmMgPSB4dFNlYXJjaChpcCwgbHN0YXJ0LCBOVUxMLCAmY21wLCAmYnRzdGFjaywgMCkpKQotCQlyZXR1cm4gcmM7Ci0KLQkvKgotCSAqCWNvbXB1dGUgdGhlIHBoeXNpY2FsIGV4dGVudCBjb3ZlcmluZyBsb2dpY2FsIGV4dGVudAotCSAqCi0JICogTi5CLiBzZWFyY2ggbWF5IGhhdmUgZmFpbGVkIChlLmcuLCBob2xlIGluIHNwYXJzZSBmaWxlKSwKLQkgKiBhbmQgcmV0dXJuZWQgdGhlIGluZGV4IG9mIHRoZSBuZXh0IGVudHJ5LgotCSAqLwotLy9tYXA6Ci0JLyogcmV0cmlldmUgc2VhcmNoIHJlc3VsdCAqLwotCVhUX0dFVFNFQVJDSChpcCwgYnRzdGFjay50b3AsIGJuLCBtcCwgcCwgaW5kZXgpOwotCi0JLyogaXMgeGFkIG9uIHRoZSBuZXh0IHNpYmxpbmcgcGFnZSA/ICovCi0JaWYgKGluZGV4ID09IGxlMTZfdG9fY3B1KHAtPmhlYWRlci5uZXh0aW5kZXgpKSB7Ci0JCWlmIChwLT5oZWFkZXIuZmxhZyAmIEJUX1JPT1QpCi0JCQlnb3RvIG1hcGVuZDsKLQotCQlpZiAoKGJuID0gbGU2NF90b19jcHUocC0+aGVhZGVyLm5leHQpKSA9PSAwKQotCQkJZ290byBtYXBlbmQ7Ci0KLQkJWFRfUFVUUEFHRShtcCk7Ci0KLQkJLyogZ2V0IG5leHQgc2libGluZyBwYWdlICovCi0JCVhUX0dFVFBBR0UoaXAsIGJuLCBtcCwgUFNJWkUsIHAsIHJjKTsKLQkJaWYgKHJjKQotCQkJcmV0dXJuIHJjOwotCi0JCWluZGV4ID0gWFRFTlRSWVNUQVJUOwotCX0KLQotCXhhZCA9ICZwLT54YWRbaW5kZXhdOwotCi0JLyoKLQkgKiBpcyBseGQgY292ZXJlZCBieSB4YWQgPwotCSAqLwotICAgICAgY29tcGFyZToKLQl4c3RhcnQgPSBvZmZzZXRYQUQoeGFkKTsKLQl4bGVuID0gbGVuZ3RoWEFEKHhhZCk7Ci0JeGVuZCA9IHhzdGFydCArIHhsZW47Ci0JeGFkZHIgPSBhZGRyZXNzWEFEKHhhZCk7Ci0KLSAgICAgIGNvbXBhcmUxOgotCWlmICh4c3RhcnQgPCBsc3RhcnQpCi0JCWdvdG8gY29tcGFyZTI7Ci0KLQkvKiAobHN0YXJ0IDw9IHhzdGFydCkgKi8KLQotCS8qIGx4ZCBpcyBOT1QgY292ZXJlZCBieSB4YWQgKi8KLQlpZiAobGVuZCA8PSB4c3RhcnQpIHsKLQkJLyoKLQkJICogZ2V0IG5leHQgbHhkCi0JCSAqLwotCQlpZiAoLS1ubHhkID09IDApCi0JCQlnb3RvIG1hcGVuZDsKLQkJbHhkKys7Ci0KLQkJbHN0YXJ0ID0gb2Zmc2V0TFhEKGx4ZCk7Ci0JCWxsZW4gPSBsZW5ndGhMWEQobHhkKTsKLQkJbGVuZCA9IGxzdGFydCArIGxsZW47Ci0JCWlmIChsc3RhcnQgPj0gc2l6ZSkKLQkJCWdvdG8gbWFwZW5kOwotCi0JCS8qIGNvbXBhcmUgd2l0aCB0aGUgY3VycmVudCB4YWQgKi8KLQkJZ290byBjb21wYXJlMTsKLQl9Ci0JLyogbHhkIGlzIGNvdmVyZWQgYnkgeGFkICovCi0JZWxzZSB7CQkJLyogKHhzdGFydCA8IGxlbmQpICovCi0KLQkJLyogaW5pdGlhbGl6ZSBuZXcgcHhkICovCi0JCXBzdGFydCA9IHhzdGFydDsKLQkJcGxlbiA9IG1pbihsZW5kIC0geHN0YXJ0LCB4bGVuKTsKLQkJcGFkZHIgPSB4YWRkcjsKLQotCQlnb3RvIGNvdmVyOwotCX0KLQotCS8qICh4c3RhcnQgPCBsc3RhcnQpICovCi0gICAgICBjb21wYXJlMjoKLQkvKiBseGQgaXMgY292ZXJlZCBieSB4YWQgKi8KLQlpZiAobHN0YXJ0IDwgeGVuZCkgewotCQkvKiBpbml0aWFsaXplIG5ldyBweGQgKi8KLQkJcHN0YXJ0ID0gbHN0YXJ0OwotCQlwbGVuID0gbWluKHhlbmQgLSBsc3RhcnQsIGxsZW4pOwotCQlwYWRkciA9IHhhZGRyICsgKGxzdGFydCAtIHhzdGFydCk7Ci0KLQkJZ290byBjb3ZlcjsKLQl9Ci0JLyogbHhkIGlzIE5PVCBjb3ZlcmVkIGJ5IHhhZCAqLwotCWVsc2UgewkJCS8qICh4ZW5kIDw9IGxzdGFydCkgKi8KLQotCQkvKgotCQkgKiBnZXQgbmV4dCB4YWQKLQkJICoKLQkJICogbGluZWFyIHNlYXJjaCBuZXh0IHhhZCBjb3ZlcmluZyBseGQgb24KLQkJICogdGhlIGN1cnJlbnQgeGFkIHBhZ2UsIGFuZCB0aGVuIHRyZWUgc2VhcmNoCi0JCSAqLwotCQlpZiAoaW5kZXggPT0gbGUxNl90b19jcHUocC0+aGVhZGVyLm5leHRpbmRleCkgLSAxKSB7Ci0JCQlpZiAocC0+aGVhZGVyLmZsYWcgJiBCVF9ST09UKQotCQkJCWdvdG8gbWFwZW5kOwotCi0JCQlYVF9QVVRQQUdFKG1wKTsKLQkJCWdvdG8gc2VhcmNoOwotCQl9IGVsc2UgewotCQkJaW5kZXgrKzsKLQkJCXhhZCsrOwotCi0JCQkvKiBjb21wYXJlIHdpdGggbmV3IHhhZCAqLwotCQkJZ290byBjb21wYXJlOwotCQl9Ci0JfQotCi0JLyoKLQkgKiBseGQgaXMgY292ZXJlZCBieSB4YWQgYW5kIGEgbmV3IHB4ZCBoYXMgYmVlbiBpbml0aWFsaXplZAotCSAqIChsc3RhcnQgPD0geHN0YXJ0IDwgbGVuZCkgb3IgKHhzdGFydCA8IGxzdGFydCA8IHhlbmQpCi0JICovCi0gICAgICBjb3ZlcjoKLQkvKiBmaW5hbGl6ZSBweGQgY29ycmVzcG9uZGluZyB0byBjdXJyZW50IHhhZCAqLwotCVhUX1BVVEVOVFJZKHB4ZCwgeGFkLT5mbGFnLCBwc3RhcnQsIHBsZW4sIHBhZGRyKTsKLQotCWlmICgrK25weGQgPj0gbWF4bnB4ZCkKLQkJZ290byBtYXBlbmQ7Ci0JcHhkKys7Ci0KLQkvKgotCSAqIGx4ZCBpcyBmdWxseSBjb3ZlcmVkIGJ5IHhhZAotCSAqLwotCWlmIChsZW5kIDw9IHhlbmQpIHsKLQkJLyoKLQkJICogZ2V0IG5leHQgbHhkCi0JCSAqLwotCQlpZiAoLS1ubHhkID09IDApCi0JCQlnb3RvIG1hcGVuZDsKLQkJbHhkKys7Ci0KLQkJbHN0YXJ0ID0gb2Zmc2V0TFhEKGx4ZCk7Ci0JCWxsZW4gPSBsZW5ndGhMWEQobHhkKTsKLQkJbGVuZCA9IGxzdGFydCArIGxsZW47Ci0JCWlmIChsc3RhcnQgPj0gc2l6ZSkKLQkJCWdvdG8gbWFwZW5kOwotCi0JCS8qCi0JCSAqIHRlc3QgZm9yIG9sZCB4YWQgY292ZXJpbmcgbmV3IGx4ZAotCQkgKiAob2xkIHhzdGFydCA8IG5ldyBsc3RhcnQpCi0JCSAqLwotCQlnb3RvIGNvbXBhcmUyOwotCX0KLQkvKgotCSAqIGx4ZCBpcyBwYXJ0aWFsbHkgY292ZXJlZCBieSB4YWQKLQkgKi8KLQllbHNlIHsJCQkvKiAoeGVuZCA8IGxlbmQpICovCi0KLQkJLyoKLQkJICogZ2V0IG5leHQgeGFkCi0JCSAqCi0JCSAqIGxpbmVhciBzZWFyY2ggbmV4dCB4YWQgY292ZXJpbmcgbHhkIG9uCi0JCSAqIHRoZSBjdXJyZW50IHhhZCBwYWdlLCBhbmQgdGhlbiBuZXh0IHhhZCBwYWdlIHNlYXJjaAotCQkgKi8KLQkJaWYgKGluZGV4ID09IGxlMTZfdG9fY3B1KHAtPmhlYWRlci5uZXh0aW5kZXgpIC0gMSkgewotCQkJaWYgKHAtPmhlYWRlci5mbGFnICYgQlRfUk9PVCkKLQkJCQlnb3RvIG1hcGVuZDsKLQotCQkJaWYgKChibiA9IGxlNjRfdG9fY3B1KHAtPmhlYWRlci5uZXh0KSkgPT0gMCkKLQkJCQlnb3RvIG1hcGVuZDsKLQotCQkJWFRfUFVUUEFHRShtcCk7Ci0KLQkJCS8qIGdldCBuZXh0IHNpYmxpbmcgcGFnZSAqLwotCQkJWFRfR0VUUEFHRShpcCwgYm4sIG1wLCBQU0laRSwgcCwgcmMpOwotCQkJaWYgKHJjKQotCQkJCXJldHVybiByYzsKLQotCQkJaW5kZXggPSBYVEVOVFJZU1RBUlQ7Ci0JCQl4YWQgPSAmcC0+eGFkW2luZGV4XTsKLQkJfSBlbHNlIHsKLQkJCWluZGV4Kys7Ci0JCQl4YWQrKzsKLQkJfQotCi0JCS8qCi0JCSAqIHRlc3QgZm9yIG5ldyB4YWQgY292ZXJpbmcgb2xkIGx4ZAotCQkgKiAob2xkIGxzdGFydCA8IG5ldyB4c3RhcnQpCi0JCSAqLwotCQlnb3RvIGNvbXBhcmU7Ci0JfQotCi0gICAgICBtYXBlbmQ6Ci0JeGFkbGlzdC0+bnhhZCA9IG5weGQ7Ci0KLS8vb3V0OgotCVhUX1BVVFBBR0UobXApOwotCi0JcmV0dXJuIHJjOwotfQotCi0KIC8qCiAgKgl4dFNlYXJjaCgpCiAgKgpkaWZmIC0tZ2l0IGEvZnMvamZzL2pmc194dHJlZS5oIGIvZnMvamZzL2pmc194dHJlZS5oCmluZGV4IDcwODE1YzhhMy4uMDhjMGM3NCAxMDA2NDQKLS0tIGEvZnMvamZzL2pmc194dHJlZS5oCisrKyBiL2ZzL2pmcy9qZnNfeHRyZWUuaApAQCAtMTEwLDggKzExMCw2IEBACiAgKi8KIGV4dGVybiBpbnQgeHRMb29rdXAoc3RydWN0IGlub2RlICppcCwgczY0IGxzdGFydCwgczY0IGxsZW4sCiAJCSAgICBpbnQgKnBmbGFnLCBzNjQgKiBwYWRkciwgaW50ICpwbGVuLCBpbnQgZmxhZyk7Ci1leHRlcm4gaW50IHh0TG9va3VwTGlzdChzdHJ1Y3QgaW5vZGUgKmlwLCBzdHJ1Y3QgbHhkbGlzdCAqIGx4ZGxpc3QsCi0JCQlzdHJ1Y3QgeGFkbGlzdCAqIHhhZGxpc3QsIGludCBmbGFnKTsKIGV4dGVybiB2b2lkIHh0SW5pdFJvb3QodGlkX3QgdGlkLCBzdHJ1Y3QgaW5vZGUgKmlwKTsKIGV4dGVybiBpbnQgeHRJbnNlcnQodGlkX3QgdGlkLCBzdHJ1Y3QgaW5vZGUgKmlwLAogCQkgICAgaW50IHhmbGFnLCBzNjQgeG9mZiwgaW50IHhsZW4sIHM2NCAqIHhhZGRycCwgaW50IGZsYWcpOwpkaWZmIC0tZ2l0IGEvZnMvamZzL3N1cGVyLmMgYi9mcy9qZnMvc3VwZXIuYwppbmRleCBiMzdkMWY3Li42ZjIxYWRmIDEwMDY0NAotLS0gYS9mcy9qZnMvc3VwZXIuYworKysgYi9mcy9qZnMvc3VwZXIuYwpAQCAtMjksNiArMjksNyBAQAogI2luY2x1ZGUgPGxpbnV4L3Bvc2l4X2FjbC5oPgogI2luY2x1ZGUgPGxpbnV4L2J1ZmZlcl9oZWFkLmg+CiAjaW5jbHVkZSA8bGludXgvZXhwb3J0ZnMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmMzMi5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAjaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4KIApAQCAtMTY4LDYgKzE2OSw5IEBACiAJYnVmLT5mX2ZpbGVzID0gbWF4aW5vZGVzOwogCWJ1Zi0+Zl9mZnJlZSA9IG1heGlub2RlcyAtIChhdG9taWNfcmVhZCgmaW1hcC0+aW1fbnVtaW5vcykgLQogCQkJCSAgICBhdG9taWNfcmVhZCgmaW1hcC0+aW1fbnVtZnJlZSkpOworCWJ1Zi0+Zl9mc2lkLnZhbFswXSA9ICh1MzIpY3JjMzJfbGUoMCwgc2JpLT51dWlkLCBzaXplb2Yoc2JpLT51dWlkKS8yKTsKKwlidWYtPmZfZnNpZC52YWxbMV0gPSAodTMyKWNyYzMyX2xlKDAsIHNiaS0+dXVpZCArIHNpemVvZihzYmktPnV1aWQpLzIsCisJCQkJCXNpemVvZihzYmktPnV1aWQpLzIpOwogCiAJYnVmLT5mX25hbWVsZW4gPSBKRlNfTkFNRV9NQVg7CiAJcmV0dXJuIDA7CmRpZmYgLS1naXQgYS9mcy9uZnMvY2xpZW50LmMgYi9mcy9uZnMvY2xpZW50LmMKaW5kZXggNTc0MTU4YS4uMjI3NzQyMSAxMDA2NDQKLS0tIGEvZnMvbmZzL2NsaWVudC5jCisrKyBiL2ZzL25mcy9jbGllbnQuYwpAQCAtMTYwNiw4ICsxNjA2LDYgQEAKIAlpZiAoIXByb2NfZnNfbmZzKQogCQlnb3RvIGVycm9yXzA7CiAKLQlwcm9jX2ZzX25mcy0+b3duZXIgPSBUSElTX01PRFVMRTsKLQogCS8qIGEgZmlsZSBvZiBzZXJ2ZXJzIHdpdGggd2hpY2ggd2UncmUgZGVhbGluZyAqLwogCXAgPSBwcm9jX2NyZWF0ZSgic2VydmVycyIsIFNfSUZSRUd8U19JUlVHTywKIAkJCXByb2NfZnNfbmZzLCAmbmZzX3NlcnZlcl9saXN0X2ZvcHMpOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9nZW5lcmljLmMgYi9mcy9wcm9jL2dlbmVyaWMuYwppbmRleCA1ZDI5ODllLi5mYTY3OGFiIDEwMDY0NAotLS0gYS9mcy9wcm9jL2dlbmVyaWMuYworKysgYi9mcy9wcm9jL2dlbmVyaWMuYwpAQCAtMzcsNyArMzcsNyBAQAogI2RlZmluZSBQUk9DX0JMT0NLX1NJWkUJKFBBR0VfU0laRSAtIDEwMjQpCiAKIHN0YXRpYyBzc2l6ZV90Ci1wcm9jX2ZpbGVfcmVhZChzdHJ1Y3QgZmlsZSAqZmlsZSwgY2hhciBfX3VzZXIgKmJ1Ziwgc2l6ZV90IG5ieXRlcywKK19fcHJvY19maWxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBuYnl0ZXMsCiAJICAgICAgIGxvZmZfdCAqcHBvcykKIHsKIAlzdHJ1Y3QgaW5vZGUgKiBpbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CkBAIC0xODMsMTkgKzE4Myw0NyBAQAogfQogCiBzdGF0aWMgc3NpemVfdAorcHJvY19maWxlX3JlYWQoc3RydWN0IGZpbGUgKmZpbGUsIGNoYXIgX191c2VyICpidWYsIHNpemVfdCBuYnl0ZXMsCisJICAgICAgIGxvZmZfdCAqcHBvcykKK3sKKwlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSA9IFBERShmaWxlLT5mX3BhdGguZGVudHJ5LT5kX2lub2RlKTsKKwlzc2l6ZV90IHJ2ID0gLUVJTzsKKworCXNwaW5fbG9jaygmcGRlLT5wZGVfdW5sb2FkX2xvY2spOworCWlmICghcGRlLT5wcm9jX2ZvcHMpIHsKKwkJc3Bpbl91bmxvY2soJnBkZS0+cGRlX3VubG9hZF9sb2NrKTsKKwkJcmV0dXJuIHJ2OworCX0KKwlwZGUtPnBkZV91c2VycysrOworCXNwaW5fdW5sb2NrKCZwZGUtPnBkZV91bmxvYWRfbG9jayk7CisKKwlydiA9IF9fcHJvY19maWxlX3JlYWQoZmlsZSwgYnVmLCBuYnl0ZXMsIHBwb3MpOworCisJcGRlX3VzZXJzX2RlYyhwZGUpOworCXJldHVybiBydjsKK30KKworc3RhdGljIHNzaXplX3QKIHByb2NfZmlsZV93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwKIAkJc2l6ZV90IGNvdW50LCBsb2ZmX3QgKnBwb3MpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7Ci0Jc3RydWN0IHByb2NfZGlyX2VudHJ5ICogZHA7Ci0JCi0JZHAgPSBQREUoaW5vZGUpOworCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGRlID0gUERFKGZpbGUtPmZfcGF0aC5kZW50cnktPmRfaW5vZGUpOworCXNzaXplX3QgcnYgPSAtRUlPOwogCi0JaWYgKCFkcC0+d3JpdGVfcHJvYykKLQkJcmV0dXJuIC1FSU87CisJaWYgKHBkZS0+d3JpdGVfcHJvYykgeworCQlzcGluX2xvY2soJnBkZS0+cGRlX3VubG9hZF9sb2NrKTsKKwkJaWYgKCFwZGUtPnByb2NfZm9wcykgeworCQkJc3Bpbl91bmxvY2soJnBkZS0+cGRlX3VubG9hZF9sb2NrKTsKKwkJCXJldHVybiBydjsKKwkJfQorCQlwZGUtPnBkZV91c2VycysrOworCQlzcGluX3VubG9jaygmcGRlLT5wZGVfdW5sb2FkX2xvY2spOwogCi0JLyogRklYTUU6IGRvZXMgdGhpcyByb3V0aW5lIG5lZWQgcHBvcz8gIHByb2JhYmx5Li4uICovCi0JcmV0dXJuIGRwLT53cml0ZV9wcm9jKGZpbGUsIGJ1ZmZlciwgY291bnQsIGRwLT5kYXRhKTsKKwkJLyogRklYTUU6IGRvZXMgdGhpcyByb3V0aW5lIG5lZWQgcHBvcz8gIHByb2JhYmx5Li4uICovCisJCXJ2ID0gcGRlLT53cml0ZV9wcm9jKGZpbGUsIGJ1ZmZlciwgY291bnQsIHBkZS0+ZGF0YSk7CisJCXBkZV91c2Vyc19kZWMocGRlKTsKKwl9CisJcmV0dXJuIHJ2OwogfQogCiAKQEAgLTMwNyw2ICszMzUsMjEgQEAKIC8qCiAgKiBSZXR1cm4gYW4gaW5vZGUgbnVtYmVyIGJldHdlZW4gUFJPQ19EWU5BTUlDX0ZJUlNUIGFuZAogICogMHhmZmZmZmZmZiwgb3IgemVybyBvbiBmYWlsdXJlLgorICoKKyAqIEN1cnJlbnQgaW5vZGUgYWxsb2NhdGlvbnMgaW4gdGhlIHByb2MtZnMgKGhleC1udW1iZXJzKToKKyAqCisgKiAwMDAwMDAwMAkJcmVzZXJ2ZWQKKyAqIDAwMDAwMDAxLTAwMDAwZmZmCXN0YXRpYyBlbnRyaWVzCShnb25lcnMpCisgKiAgICAgIDAwMQkJcm9vdC1pbm8KKyAqCisgKiAwMDAwMTAwMC0wMDAwMWZmZgl1bnVzZWQKKyAqIDAwMDF4eHh4LTdmZmZ4eHh4CXBpZC1kaXIgZW50cmllcyBmb3IgcGlkIDEtN2ZmZgorICogODAwMDAwMDAtZWZmZmZmZmYJdW51c2VkCisgKiBmMDAwMDAwMC1mZmZmZmZmZglkeW5hbWljIGVudHJpZXMKKyAqCisgKiBHb2FsOgorICoJT25jZSB3ZSBzcGxpdCB0aGUgdGhpbmcgaW50byBzZXZlcmFsIHZpcnR1YWwgZmlsZXN5c3RlbXMsCisgKgl3ZSB3aWxsIGdldCByaWQgb2YgbWFnaWNhbCByYW5nZXMgKGFuZCB0aGlzIGNvbW1lbnQsIEJUVykuCiAgKi8KIHN0YXRpYyB1bnNpZ25lZCBpbnQgZ2V0X2lub2RlX251bWJlcih2b2lkKQogewpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9pbm9kZS1hbGxvYy50eHQgYi9mcy9wcm9jL2lub2RlLWFsbG9jLnR4dApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNzcyMTJmOS4uMDAwMDAwMAotLS0gYS9mcy9wcm9jL2lub2RlLWFsbG9jLnR4dAorKysgL2Rldi9udWxsCkBAIC0xLDE0ICswLDAgQEAKLUN1cnJlbnQgaW5vZGUgYWxsb2NhdGlvbnMgaW4gdGhlIHByb2MtZnMgKGhleC1udW1iZXJzKToKLQotICAwMDAwMDAwMAkJcmVzZXJ2ZWQKLSAgMDAwMDAwMDEtMDAwMDBmZmYJc3RhdGljIGVudHJpZXMJKGdvbmVycykKLSAgICAgICAwMDEJCXJvb3QtaW5vCi0KLSAgMDAwMDEwMDAtMDAwMDFmZmYJdW51c2VkCi0gIDAwMDF4eHh4LTdmZmZ4eHh4CXBpZC1kaXIgZW50cmllcyBmb3IgcGlkIDEtN2ZmZgotICA4MDAwMDAwMC1lZmZmZmZmZgl1bnVzZWQKLSAgZjAwMDAwMDAtZmZmZmZmZmYJZHluYW1pYyBlbnRyaWVzCi0KLUdvYWw6Ci0JYSkgb25jZSB3ZSdsbCBzcGxpdCB0aGUgdGhpbmcgaW50byBzZXZlcmFsIHZpcnR1YWwgZmlsZXN5c3RlbXMgd2UKLQl3aWxsIGdldCByaWQgb2YgbWFnaWNhbCByYW5nZXMgKGFuZCB0aGlzIGZpbGUsIEJUVykuCmRpZmYgLS1naXQgYS9mcy9wcm9jL2lub2RlLmMgYi9mcy9wcm9jL2lub2RlLmMKaW5kZXggZDhiYjVjNi4uZDc4YWRlMyAxMDA2NDQKLS0tIGEvZnMvcHJvYy9pbm9kZS5jCisrKyBiL2ZzL3Byb2MvaW5vZGUuYwpAQCAtNTgsMTEgKzU4LDggQEAKIAogCS8qIExldCBnbyBvZiBhbnkgYXNzb2NpYXRlZCBwcm9jIGRpcmVjdG9yeSBlbnRyeSAqLwogCWRlID0gUFJPQ19JKGlub2RlKS0+cGRlOwotCWlmIChkZSkgewotCQlpZiAoZGUtPm93bmVyKQotCQkJbW9kdWxlX3B1dChkZS0+b3duZXIpOworCWlmIChkZSkKIAkJZGVfcHV0KGRlKTsKLQl9CiAJaWYgKFBST0NfSShpbm9kZSktPnN5c2N0bCkKIAkJc3lzY3RsX2hlYWRfcHV0KFBST0NfSShpbm9kZSktPnN5c2N0bCk7CiAJY2xlYXJfaW5vZGUoaW5vZGUpOwpAQCAtMTI3LDcgKzEyNCw3IEBACiAJCWNvbXBsZXRlKHBkZS0+cGRlX3VubG9hZF9jb21wbGV0aW9uKTsKIH0KIAotc3RhdGljIHZvaWQgcGRlX3VzZXJzX2RlYyhzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSkKK3ZvaWQgcGRlX3VzZXJzX2RlYyhzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBkZSkKIHsKIAlzcGluX2xvY2soJnBkZS0+cGRlX3VubG9hZF9sb2NrKTsKIAlfX3BkZV91c2Vyc19kZWMocGRlKTsKQEAgLTQ0OSwxMiArNDQ2LDkgQEAKIHsKIAlzdHJ1Y3QgaW5vZGUgKiBpbm9kZTsKIAotCWlmICghdHJ5X21vZHVsZV9nZXQoZGUtPm93bmVyKSkKLQkJZ290byBvdXRfbW9kOwotCiAJaW5vZGUgPSBpZ2V0X2xvY2tlZChzYiwgaW5vKTsKIAlpZiAoIWlub2RlKQotCQlnb3RvIG91dF9pbm87CisJCXJldHVybiBOVUxMOwogCWlmIChpbm9kZS0+aV9zdGF0ZSAmIElfTkVXKSB7CiAJCWlub2RlLT5pX210aW1lID0gaW5vZGUtPmlfYXRpbWUgPSBpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRTsKIAkJUFJPQ19JKGlub2RlKS0+ZmQgPSAwOwpAQCAtNDg1LDE2ICs0NzksOSBAQAogCQkJfQogCQl9CiAJCXVubG9ja19uZXdfaW5vZGUoaW5vZGUpOwotCX0gZWxzZSB7Ci0JICAgICAgIG1vZHVsZV9wdXQoZGUtPm93bmVyKTsKKwl9IGVsc2UKIAkgICAgICAgZGVfcHV0KGRlKTsKLQl9CiAJcmV0dXJuIGlub2RlOwotCi1vdXRfaW5vOgotCW1vZHVsZV9wdXQoZGUtPm93bmVyKTsKLW91dF9tb2Q6Ci0JcmV0dXJuIE5VTEw7CiB9CQkJCiAKIGludCBwcm9jX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzKQpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9pbnRlcm5hbC5oIGIvZnMvcHJvYy9pbnRlcm5hbC5oCmluZGV4IGNkNTNmZjguLmY2ZGI5NjEgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvaW50ZXJuYWwuaAorKysgYi9mcy9wcm9jL2ludGVybmFsLmgKQEAgLTkxLDMgKzkxLDQgQEAKIAlpbnQgKCpyZWxlYXNlKShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CiAJc3RydWN0IGxpc3RfaGVhZCBsaDsKIH07Cit2b2lkIHBkZV91c2Vyc19kZWMoc3RydWN0IHByb2NfZGlyX2VudHJ5ICpwZGUpOwpkaWZmIC0tZ2l0IGEvZnMvcHJvYy9wcm9jX3R0eS5jIGIvZnMvcHJvYy9wcm9jX3R0eS5jCmluZGV4IGQxNTM5NDYuLjRhOWUwZjYgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvcHJvY190dHkuYworKysgYi9mcy9wcm9jL3Byb2NfdHR5LmMKQEAgLTE1Miw3ICsxNTIsNiBAQAogCWlmICghZW50KQogCQlyZXR1cm47CiAJZW50LT5yZWFkX3Byb2MgPSBkcml2ZXItPm9wcy0+cmVhZF9wcm9jOwotCWVudC0+b3duZXIgPSBkcml2ZXItPm93bmVyOwogCWVudC0+ZGF0YSA9IGRyaXZlcjsKIAogCWRyaXZlci0+cHJvY19lbnRyeSA9IGVudDsKZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuYwppbmRleCA5NDA2Mzg0Li5iMGFlMGJlIDEwMDY0NAotLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmMKKysrIGIvZnMvcHJvYy90YXNrX21tdS5jCkBAIC02OTMsOCArNjkzLDggQEAKIAkJZ290byBvdXRfcGFnZXM7CiAJfQogCi0JcG0ub3V0ID0gKHU2NCAqKWJ1ZjsKLQlwbS5lbmQgPSAodTY0ICopKGJ1ZiArIGNvdW50KTsKKwlwbS5vdXQgPSAodTY0IF9fdXNlciAqKWJ1ZjsKKwlwbS5lbmQgPSAodTY0IF9fdXNlciAqKShidWYgKyBjb3VudCk7CiAKIAlwYWdlbWFwX3dhbGsucG1kX2VudHJ5ID0gcGFnZW1hcF9wdGVfcmFuZ2U7CiAJcGFnZW1hcF93YWxrLnB0ZV9ob2xlID0gcGFnZW1hcF9wdGVfaG9sZTsKQEAgLTcyMCw5ICs3MjAsOSBAQAogCWlmIChyZXQgPT0gUE1fRU5EX09GX0JVRkZFUikKIAkJcmV0ID0gMDsKIAkvKiBkb24ndCBuZWVkIG1tYXBfc2VtIGZvciB0aGVzZSwgYnV0IHRoaXMgbG9va3MgY2xlYW5lciAqLwotCSpwcG9zICs9IChjaGFyICopcG0ub3V0IC0gYnVmOworCSpwcG9zICs9IChjaGFyIF9fdXNlciAqKXBtLm91dCAtIGJ1ZjsKIAlpZiAoIXJldCkKLQkJcmV0ID0gKGNoYXIgKilwbS5vdXQgLSBidWY7CisJCXJldCA9IChjaGFyIF9fdXNlciAqKXBtLm91dCAtIGJ1ZjsKIAogb3V0X3BhZ2VzOgogCWZvciAoOyBwYWdlY291bnQ7IHBhZ2Vjb3VudC0tKSB7CmRpZmYgLS1naXQgYS9mcy9wcm9jL3VwdGltZS5jIGIvZnMvcHJvYy91cHRpbWUuYwppbmRleCBkZjI2YWE4Li4wYzEwYTBiIDEwMDY0NAotLS0gYS9mcy9wcm9jL3VwdGltZS5jCisrKyBiL2ZzL3Byb2MvdXB0aW1lLmMKQEAgLTEsNDUgKzEsNDMgQEAKKyNpbmNsdWRlIDxsaW51eC9mcy5oPgogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KICNpbmNsdWRlIDxsaW51eC9wcm9jX2ZzLmg+CiAjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9zZXFfZmlsZS5oPgogI2luY2x1ZGUgPGxpbnV4L3RpbWUuaD4KICNpbmNsdWRlIDxhc20vY3B1dGltZS5oPgogCi1zdGF0aWMgaW50IHByb2NfY2FsY19tZXRyaWNzKGNoYXIgKnBhZ2UsIGNoYXIgKipzdGFydCwgb2ZmX3Qgb2ZmLAotCQkJCSBpbnQgY291bnQsIGludCAqZW9mLCBpbnQgbGVuKQotewotCWlmIChsZW4gPD0gb2ZmICsgY291bnQpCi0JCSplb2YgPSAxOwotCSpzdGFydCA9IHBhZ2UgKyBvZmY7Ci0JbGVuIC09IG9mZjsKLQlpZiAobGVuID4gY291bnQpCi0JCWxlbiA9IGNvdW50OwotCWlmIChsZW4gPCAwKQotCQlsZW4gPSAwOwotCXJldHVybiBsZW47Ci19Ci0KLXN0YXRpYyBpbnQgdXB0aW1lX3JlYWRfcHJvYyhjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwgaW50IGNvdW50LAotCQkJICAgIGludCAqZW9mLCB2b2lkICpkYXRhKQorc3RhdGljIGludCB1cHRpbWVfcHJvY19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIHsKIAlzdHJ1Y3QgdGltZXNwZWMgdXB0aW1lOwogCXN0cnVjdCB0aW1lc3BlYyBpZGxlOwotCWludCBsZW47CiAJY3B1dGltZV90IGlkbGV0aW1lID0gY3B1dGltZV9hZGQoaW5pdF90YXNrLnV0aW1lLCBpbml0X3Rhc2suc3RpbWUpOwogCiAJZG9fcG9zaXhfY2xvY2tfbW9ub3RvbmljX2dldHRpbWUoJnVwdGltZSk7CiAJbW9ub3RvbmljX3RvX2Jvb3RiYXNlZCgmdXB0aW1lKTsKIAljcHV0aW1lX3RvX3RpbWVzcGVjKGlkbGV0aW1lLCAmaWRsZSk7Ci0JbGVuID0gc3ByaW50ZihwYWdlLCAiJWx1LiUwMmx1ICVsdS4lMDJsdVxuIiwKKwlzZXFfcHJpbnRmKG0sICIlbHUuJTAybHUgJWx1LiUwMmx1XG4iLAogCQkJKHVuc2lnbmVkIGxvbmcpIHVwdGltZS50dl9zZWMsCiAJCQkodXB0aW1lLnR2X25zZWMgLyAoTlNFQ19QRVJfU0VDIC8gMTAwKSksCiAJCQkodW5zaWduZWQgbG9uZykgaWRsZS50dl9zZWMsCiAJCQkoaWRsZS50dl9uc2VjIC8gKE5TRUNfUEVSX1NFQyAvIDEwMCkpKTsKLQlyZXR1cm4gcHJvY19jYWxjX21ldHJpY3MocGFnZSwgc3RhcnQsIG9mZiwgY291bnQsIGVvZiwgbGVuKTsKKwlyZXR1cm4gMDsKIH0KIAorc3RhdGljIGludCB1cHRpbWVfcHJvY19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKQoreworCXJldHVybiBzaW5nbGVfb3BlbihmaWxlLCB1cHRpbWVfcHJvY19zaG93LCBOVUxMKTsKK30KKworc3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdXB0aW1lX3Byb2NfZm9wcyA9IHsKKwkub3BlbgkJPSB1cHRpbWVfcHJvY19vcGVuLAorCS5yZWFkCQk9IHNlcV9yZWFkLAorCS5sbHNlZWsJCT0gc2VxX2xzZWVrLAorCS5yZWxlYXNlCT0gc2luZ2xlX3JlbGVhc2UsCit9OworCiBzdGF0aWMgaW50IF9faW5pdCBwcm9jX3VwdGltZV9pbml0KHZvaWQpCiB7Ci0JY3JlYXRlX3Byb2NfcmVhZF9lbnRyeSgidXB0aW1lIiwgMCwgTlVMTCwgdXB0aW1lX3JlYWRfcHJvYywgTlVMTCk7CisJcHJvY19jcmVhdGUoInVwdGltZSIsIDAsIE5VTEwsICZ1cHRpbWVfcHJvY19mb3BzKTsKIAlyZXR1cm4gMDsKIH0KIG1vZHVsZV9pbml0KHByb2NfdXB0aW1lX2luaXQpOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvTWFrZWZpbGUgYi9mcy9yZWlzZXJmcy9NYWtlZmlsZQppbmRleCAwZWI3YWMwLi43YzVhYjYzIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9NYWtlZmlsZQorKysgYi9mcy9yZWlzZXJmcy9NYWtlZmlsZQpAQCAtNywxMCArNywxMCBAQAogcmVpc2VyZnMtb2JqcyA6PSBiaXRtYXAubyBkb19iYWxhbi5vIG5hbWVpLm8gaW5vZGUubyBmaWxlLm8gZGlyLm8gZml4X25vZGUubyBcCiAJCSBzdXBlci5vIHByaW50cy5vIG9iamVjdGlkLm8gbGJhbGFuY2UubyBpYmFsYW5jZS5vIHN0cmVlLm8gXAogCQkgaGFzaGVzLm8gdGFpbF9jb252ZXJzaW9uLm8gam91cm5hbC5vIHJlc2l6ZS5vIFwKLQkJIGl0ZW1fb3BzLm8gaW9jdGwubyBwcm9jZnMubworCQkgaXRlbV9vcHMubyBpb2N0bC5vIHByb2Nmcy5vIHhhdHRyLm8KIAogaWZlcSAoJChDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIpLHkpCi1yZWlzZXJmcy1vYmpzICs9IHhhdHRyLm8geGF0dHJfdXNlci5vIHhhdHRyX3RydXN0ZWQubworcmVpc2VyZnMtb2JqcyArPSB4YXR0cl91c2VyLm8geGF0dHJfdHJ1c3RlZC5vCiBlbmRpZgogCiBpZmVxICgkKENPTkZJR19SRUlTRVJGU19GU19TRUNVUklUWSkseSkKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL1JFQURNRSBiL2ZzL3JlaXNlcmZzL1JFQURNRQppbmRleCA5MGUxNjcwLi4xNGU4YzlkIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9SRUFETUUKKysrIGIvZnMvcmVpc2VyZnMvUkVBRE1FCkBAIC0xLDQgKzEsNCBAQAotW0xJQ0VOU0lOR10gCitbTElDRU5TSU5HXQogCiBSZWlzZXJGUyBpcyBoZXJlYnkgbGljZW5zZWQgdW5kZXIgdGhlIEdOVSBHZW5lcmFsCiBQdWJsaWMgTGljZW5zZSB2ZXJzaW9uIDIuCkBAIC0zMSw3ICszMSw3IEBACiBpdCB3cm9uZ2x5LCBhbmQgUmljaGFyZCBTdGFsbG1hbiBhZ3JlZXMgd2l0aCBtZSwgd2hlbiBjYXJlZnVsbHkgcmVhZAogeW91IGNhbiBzZWUgdGhhdCB0aG9zZSByZXN0cmljdGlvbnMgb24gYWRkaXRpb25hbCB0ZXJtcyBkbyBub3QgYXBwbHkKIHRvIHRoZSBvd25lciBvZiB0aGUgY29weXJpZ2h0LCBhbmQgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhpcyBzaGFsbAotZ292ZXJuIGZvciB0aGlzIGxpY2Vuc2UuICAKK2dvdmVybiBmb3IgdGhpcyBsaWNlbnNlLgogCiBGaW5hbGx5LCBub3RoaW5nIGluIHRoaXMgbGljZW5zZSBzaGFsbCBiZSBpbnRlcnByZXRlZCB0byBhbGxvdyB5b3UgdG8KIGZhaWwgdG8gZmFpcmx5IGNyZWRpdCBtZSwgb3IgdG8gcmVtb3ZlIG15IGNyZWRpdHMsIHdpdGhvdXQgbXkKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2JpdG1hcC5jIGIvZnMvcmVpc2VyZnMvYml0bWFwLmMKaW5kZXggZjMyZDE0Mi4uZTcxNjE2MSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvYml0bWFwLmMKKysrIGIvZnMvcmVpc2VyZnMvYml0bWFwLmMKQEAgLTQwLDggKzQwLDggQEAKIAogI2RlZmluZSBTRVRfT1BUSU9OKG9wdG5hbWUpIFwKICAgIGRvIHsgXAotICAgICAgICByZWlzZXJmc193YXJuaW5nKHMsICJyZWlzZXJmczogb3B0aW9uIFwiJXNcIiBpcyBzZXQiLCAjb3B0bmFtZSk7IFwKLSAgICAgICAgc2V0X2JpdChfQUxMT0NfICMjIG9wdG5hbWUgLCAmU0JfQUxMT0NfT1BUUyhzKSk7IFwKKwlyZWlzZXJmc19pbmZvKHMsICJibG9jayBhbGxvY2F0b3Igb3B0aW9uIFwiJXNcIiBpcyBzZXQiLCAjb3B0bmFtZSk7IFwKKwlzZXRfYml0KF9BTExPQ18gIyMgb3B0bmFtZSAsICZTQl9BTExPQ19PUFRTKHMpKTsgXAogICAgIH0gd2hpbGUoMCkKICNkZWZpbmUgVEVTVF9PUFRJT04ob3B0bmFtZSwgcykgXAogICAgIHRlc3RfYml0KF9BTExPQ18gIyMgb3B0bmFtZSAsICZTQl9BTExPQ19PUFRTKHMpKQpAQCAtNjQsOSArNjQsOSBAQAogCXVuc2lnbmVkIGludCBibWFwX2NvdW50ID0gcmVpc2VyZnNfYm1hcF9jb3VudChzKTsKIAogCWlmIChibG9jayA9PSAwIHx8IGJsb2NrID49IFNCX0JMT0NLX0NPVU5UKHMpKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkgInZzLTQwMTA6IGlzX3JldXNhYmxlOiBibG9jayBudW1iZXIgaXMgb3V0IG9mIHJhbmdlICVsdSAoJXUpIiwKLQkJCQkgYmxvY2ssIFNCX0JMT0NLX0NPVU5UKHMpKTsKKwkJcmVpc2VyZnNfZXJyb3IocywgInZzLTQwMTAiLAorCQkJICAgICAgICJibG9jayBudW1iZXIgaXMgb3V0IG9mIHJhbmdlICVsdSAoJXUpIiwKKwkJCSAgICAgICBibG9jaywgU0JfQkxPQ0tfQ09VTlQocykpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTc5LDMxICs3OSwzMCBAQAogCQliX2Jsb2NrbnJfdCBibWFwMSA9IFJFSVNFUkZTX1NCKHMpLT5zX3NiaC0+Yl9ibG9ja25yICsgMTsKIAkJaWYgKGJsb2NrID49IGJtYXAxICYmCiAJCSAgICBibG9jayA8PSBibWFwMSArIGJtYXBfY291bnQpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywgInZzOiA0MDE5OiBpc19yZXVzYWJsZTogIgotCQkJCQkgImJpdG1hcCBibG9jayAlbHUoJXUpIGNhbid0IGJlIGZyZWVkIG9yIHJldXNlZCIsCi0JCQkJCSBibG9jaywgYm1hcF9jb3VudCk7CisJCQlyZWlzZXJmc19lcnJvcihzLCAidnMtNDAxOSIsICJiaXRtYXAgYmxvY2sgJWx1KCV1KSAiCisJCQkJICAgICAgICJjYW4ndCBiZSBmcmVlZCBvciByZXVzZWQiLAorCQkJCSAgICAgICBibG9jaywgYm1hcF9jb3VudCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCX0gZWxzZSB7CiAJCWlmIChvZmZzZXQgPT0gMCkgewotCQkJcmVpc2VyZnNfd2FybmluZyhzLCAidnM6IDQwMjA6IGlzX3JldXNhYmxlOiAiCi0JCQkJCSAiYml0bWFwIGJsb2NrICVsdSgldSkgY2FuJ3QgYmUgZnJlZWQgb3IgcmV1c2VkIiwKLQkJCQkJIGJsb2NrLCBibWFwX2NvdW50KTsKKwkJCXJlaXNlcmZzX2Vycm9yKHMsICJ2cy00MDIwIiwgImJpdG1hcCBibG9jayAlbHUoJXUpICIKKwkJCQkgICAgICAgImNhbid0IGJlIGZyZWVkIG9yIHJldXNlZCIsCisJCQkJICAgICAgIGJsb2NrLCBibWFwX2NvdW50KTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQogCiAJaWYgKGJtYXAgPj0gYm1hcF9jb3VudCkgewotCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJICJ2cy00MDMwOiBpc19yZXVzYWJsZTogdGhlcmUgaXMgbm8gc28gbWFueSBiaXRtYXAgYmxvY2tzOiAiCi0JCQkJICJibG9jaz0lbHUsIGJpdG1hcF9ucj0ldSIsIGJsb2NrLCBibWFwKTsKKwkJcmVpc2VyZnNfZXJyb3IocywgInZzLTQwMzAiLCAiYml0bWFwIGZvciByZXF1ZXN0ZWQgYmxvY2sgIgorCQkJICAgICAgICJpcyBvdXQgb2YgcmFuZ2U6IGJsb2NrPSVsdSwgYml0bWFwX25yPSV1IiwKKwkJCSAgICAgICBibG9jaywgYm1hcCk7CiAJCXJldHVybiAwOwogCX0KIAogCWlmIChiaXRfdmFsdWUgPT0gMCAmJiBibG9jayA9PSBTQl9ST09UX0JMT0NLKHMpKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkgInZzLTQwNTA6IGlzX3JldXNhYmxlOiB0aGlzIGlzIHJvb3QgYmxvY2sgKCV1KSwgIgotCQkJCSAiaXQgbXVzdCBiZSBidXN5IiwgU0JfUk9PVF9CTE9DSyhzKSk7CisJCXJlaXNlcmZzX2Vycm9yKHMsICJ2cy00MDUwIiwgInRoaXMgaXMgcm9vdCBibG9jayAoJXUpLCAiCisJCQkgICAgICAgIml0IG11c3QgYmUgYnVzeSIsIFNCX1JPT1RfQkxPQ0socykpOwogCQlyZXR1cm4gMDsKIAl9CiAKQEAgLTE1NCw4ICsxNTMsOCBAQAogLyogLSBJIG1lYW4gYGEgd2luZG93IG9mIHplcm8gYml0cycgYXMgaW4gZGVzY3JpcHRpb24gb2YgdGhpcyBmdW5jdGlvbiAtIFphbS4gKi8KIAogCWlmICghYmkpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzLCAiTlVMTCBiaXRtYXAgaW5mbyBwb2ludGVyIGZvciBiaXRtYXAgJWQiLAotCQkJCSBibWFwX24pOworCQlyZWlzZXJmc19lcnJvcihzLCAiamRtLTQwNTUiLCAiTlVMTCBiaXRtYXAgaW5mbyBwb2ludGVyICIKKwkJCSAgICAgICAiZm9yIGJpdG1hcCAlZCIsIGJtYXBfbik7CiAJCXJldHVybiAwOwogCX0KIApAQCAtNDAwLDExICszOTksOCBAQAogCWdldF9iaXRfYWRkcmVzcyhzLCBibG9jaywgJm5yLCAmb2Zmc2V0KTsKIAogCWlmIChuciA+PSByZWlzZXJmc19ibWFwX2NvdW50KHMpKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywgInZzLTQwNzU6IHJlaXNlcmZzX2ZyZWVfYmxvY2s6ICIKLQkJCQkgImJsb2NrICVsdSBpcyBvdXQgb2YgcmFuZ2Ugb24gJXMgIgotCQkJCSAiKG5yPSV1LG1heD0ldSkiLCBibG9jaywKLQkJCQkgcmVpc2VyZnNfYmRldm5hbWUocyksIG5yLAotCQkJCSByZWlzZXJmc19ibWFwX2NvdW50KHMpKTsKKwkJcmVpc2VyZnNfZXJyb3IocywgInZzLTQwNzUiLCAiYmxvY2sgJWx1IGlzIG91dCBvZiByYW5nZSIsCisJCQkgICAgICAgYmxvY2spOwogCQlyZXR1cm47CiAJfQogCkBAIC00MTYsOSArNDEyLDggQEAKIAogCS8qIGNsZWFyIGJpdCBmb3IgdGhlIGdpdmVuIGJsb2NrIGluIGJpdCBtYXAgKi8KIAlpZiAoIXJlaXNlcmZzX3Rlc3RfYW5kX2NsZWFyX2xlX2JpdChvZmZzZXQsIGJtYmgtPmJfZGF0YSkpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzLCAidnMtNDA4MDogcmVpc2VyZnNfZnJlZV9ibG9jazogIgotCQkJCSAiZnJlZV9ibG9jayAoJXM6JWx1KVtkZXY6YmxvY2tucl06IGJpdCBhbHJlYWR5IGNsZWFyZWQiLAotCQkJCSByZWlzZXJmc19iZGV2bmFtZShzKSwgYmxvY2spOworCQlyZWlzZXJmc19lcnJvcihzLCAidnMtNDA4MCIsCisJCQkgICAgICAgImJsb2NrICVsdTogYml0IGFscmVhZHkgY2xlYXJlZCIsIGJsb2NrKTsKIAl9CiAJYXBiaVtucl0uZnJlZV9jb3VudCsrOwogCWpvdXJuYWxfbWFya19kaXJ0eSh0aCwgcywgYm1iaCk7CkBAIC00NDUsNyArNDQwLDcgQEAKIAkJcmV0dXJuOwogCiAJaWYgKGJsb2NrID4gc2JfYmxvY2tfY291bnQoUkVJU0VSRlNfU0IocyktPnNfcnMpKSB7Ci0JCXJlaXNlcmZzX3BhbmljKHRoLT50X3N1cGVyLCAiYml0bWFwLTQwNzIiLAorCQlyZWlzZXJmc19lcnJvcih0aC0+dF9zdXBlciwgImJpdG1hcC00MDcyIiwKIAkJCSAgICAgICAiVHJ5aW5nIHRvIGZyZWUgYmxvY2sgb3V0c2lkZSBmaWxlIHN5c3RlbSAiCiAJCQkgICAgICAgImJvdW5kYXJpZXMgKCVsdSA+ICVsdSkiLAogCQkJICAgICAgIGJsb2NrLCBzYl9ibG9ja19jb3VudChSRUlTRVJGU19TQihzKS0+c19ycykpOwpAQCAtNDc3LDkgKzQ3Miw4IEBACiAJQlVHX09OKCF0aC0+dF90cmFuc19pZCk7CiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCiAJaWYgKGVpLT5pX3ByZWFsbG9jX2NvdW50IDwgMCkKLQkJcmVpc2VyZnNfd2FybmluZyh0aC0+dF9zdXBlciwKLQkJCQkgInphbS00MDAxOiVzOiBpbm9kZSBoYXMgbmVnYXRpdmUgcHJlYWxsb2MgYmxvY2tzIGNvdW50LiIsCi0JCQkJIF9fZnVuY19fKTsKKwkJcmVpc2VyZnNfZXJyb3IodGgtPnRfc3VwZXIsICJ6YW0tNDAwMSIsCisJCQkgICAgICAgImlub2RlIGhhcyBuZWdhdGl2ZSBwcmVhbGxvYyBibG9ja3MgY291bnQuIik7CiAjZW5kaWYKIAl3aGlsZSAoZWktPmlfcHJlYWxsb2NfY291bnQgPiAwKSB7CiAJCXJlaXNlcmZzX2ZyZWVfcHJlYWxsb2NfYmxvY2sodGgsIGlub2RlLCBlaS0+aV9wcmVhbGxvY19ibG9jayk7CkBAIC01MTUsOSArNTA5LDkgQEAKIAkJCQlpX3ByZWFsbG9jX2xpc3QpOwogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwogCQlpZiAoIWVpLT5pX3ByZWFsbG9jX2NvdW50KSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHRoLT50X3N1cGVyLAotCQkJCQkgInphbS00MDAxOiVzOiBpbm9kZSBpcyBpbiBwcmVhbGxvYyBsaXN0IGJ1dCBoYXMgbm8gcHJlYWxsb2NhdGVkIGJsb2Nrcy4iLAotCQkJCQkgX19mdW5jX18pOworCQkJcmVpc2VyZnNfZXJyb3IodGgtPnRfc3VwZXIsICJ6YW0tNDAwMSIsCisJCQkJICAgICAgICJpbm9kZSBpcyBpbiBwcmVhbGxvYyBsaXN0IGJ1dCBoYXMgIgorCQkJCSAgICAgICAibm8gcHJlYWxsb2NhdGVkIGJsb2Nrcy4iKTsKIAkJfQogI2VuZGlmCiAJCV9fZGlzY2FyZF9wcmVhbGxvYyh0aCwgZWkpOwpAQCAtNjMxLDEyICs2MjUsMTIgQEAKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJcmVpc2VyZnNfd2FybmluZyhzLCAiemFtLTQwMDE6ICVzIDogdW5rbm93biBvcHRpb24gLSAlcyIsCi0JCQkJIF9fZnVuY19fLCB0aGlzX2NoYXIpOworCQlyZWlzZXJmc193YXJuaW5nKHMsICJ6YW0tNDAwMSIsICJ1bmtub3duIG9wdGlvbiAtICVzIiwKKwkJCQkgdGhpc19jaGFyKTsKIAkJcmV0dXJuIDE7CiAJfQogCi0JcmVpc2VyZnNfd2FybmluZyhzLCAiYWxsb2NhdG9yIG9wdGlvbnMgPSBbJTA4eF1cbiIsIFNCX0FMTE9DX09QVFMocykpOworCXJlaXNlcmZzX2luZm8ocywgImFsbG9jYXRvciBvcHRpb25zID0gWyUwOHhdXG4iLCBTQl9BTExPQ19PUFRTKHMpKTsKIAlyZXR1cm4gMDsKIH0KIApAQCAtMTIyMSw3ICsxMjE1LDkgQEAKIAl1bnNpZ25lZCBsb25nICpjdXIgPSAodW5zaWduZWQgbG9uZyAqKShiaC0+Yl9kYXRhICsgYmgtPmJfc2l6ZSk7CiAKIAkvKiBUaGUgZmlyc3QgYml0IG11c3QgQUxXQVlTIGJlIDEgKi8KLQlCVUdfT04oIXJlaXNlcmZzX3Rlc3RfbGVfYml0KDAsICh1bnNpZ25lZCBsb25nICopYmgtPmJfZGF0YSkpOworCWlmICghcmVpc2VyZnNfdGVzdF9sZV9iaXQoMCwgKHVuc2lnbmVkIGxvbmcgKiliaC0+Yl9kYXRhKSkKKwkJcmVpc2VyZnNfZXJyb3Ioc2IsICJyZWlzZXJmcy0yMDI1IiwgImJpdG1hcCBibG9jayAlbHUgaXMgIgorCQkJICAgICAgICJjb3JydXB0ZWQ6IGZpcnN0IGJpdCBtdXN0IGJlIDEiLCBiaC0+Yl9ibG9ja25yKTsKIAogCWluZm8tPmZyZWVfY291bnQgPSAwOwogCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9kaXIuYyBiL2ZzL3JlaXNlcmZzL2Rpci5jCmluZGV4IGU2YjAzZDIuLjY3YTgwZDcgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2Rpci5jCisrKyBiL2ZzL3JlaXNlcmZzL2Rpci5jCkBAIC00MSwxMCArNDEsMTAgQEAKIAogI2RlZmluZSBzdG9yZV9paCh3aGVyZSx3aGF0KSBjb3B5X2l0ZW1faGVhZCAod2hlcmUsIHdoYXQpCiAKLS8vCi1zdGF0aWMgaW50IHJlaXNlcmZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbHAsIHZvaWQgKmRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIpCitpbnQgcmVpc2VyZnNfcmVhZGRpcl9kZW50cnkoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB2b2lkICpkaXJlbnQsCisJCQkgICBmaWxsZGlyX3QgZmlsbGRpciwgbG9mZl90ICpwb3MpCiB7Ci0Jc3RydWN0IGlub2RlICppbm9kZSA9IGZpbHAtPmZfcGF0aC5kZW50cnktPmRfaW5vZGU7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKIAlzdHJ1Y3QgY3B1X2tleSBwb3Nfa2V5OwkvKiBrZXkgb2YgY3VycmVudCBwb3NpdGlvbiBpbiB0aGUgZGlyZWN0b3J5IChrZXkgb2YgZGlyZWN0b3J5IGVudHJ5KSAqLwogCUlOSVRJQUxJWkVfUEFUSChwYXRoX3RvX2VudHJ5KTsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwpAQCAtNjQsMTMgKzY0LDkgQEAKIAogCS8qIGZvcm0ga2V5IGZvciBzZWFyY2ggdGhlIG5leHQgZGlyZWN0b3J5IGVudHJ5IHVzaW5nIGZfcG9zIGZpZWxkIG9mCiAJICAgZmlsZSBzdHJ1Y3R1cmUgKi8KLQltYWtlX2NwdV9rZXkoJnBvc19rZXksIGlub2RlLAotCQkgICAgIChmaWxwLT5mX3BvcykgPyAoZmlscC0+Zl9wb3MpIDogRE9UX09GRlNFVCwgVFlQRV9ESVJFTlRSWSwKLQkJICAgICAzKTsKKwltYWtlX2NwdV9rZXkoJnBvc19rZXksIGlub2RlLCAqcG9zID86IERPVF9PRkZTRVQsIFRZUEVfRElSRU5UUlksIDMpOwogCW5leHRfcG9zID0gY3B1X2tleV9rX29mZnNldCgmcG9zX2tleSk7CiAKLQkvKiAgcmVpc2VyZnNfd2FybmluZyAoaW5vZGUtPmlfc2IsICJyZWlzZXJmc19yZWFkZGlyIDE6IGZfcG9zID0gJUxkIiwgZmlscC0+Zl9wb3MpOyAqLwotCiAJcGF0aF90b19lbnRyeS5yZWFkYSA9IFBBVEhfUkVBREE7CiAJd2hpbGUgKDEpIHsKIAkgICAgICByZXNlYXJjaDoKQEAgLTE0NCw3ICsxNDAsNyBAQAogCQkJCS8qIElnbm9yZSB0aGUgLnJlaXNlcmZzX3ByaXYgZW50cnkgKi8KIAkJCQlpZiAocmVpc2VyZnNfeGF0dHJzKGlub2RlLT5pX3NiKSAmJgogCQkJCSAgICAhb2xkX2Zvcm1hdF9vbmx5KGlub2RlLT5pX3NiKSAmJgotCQkJCSAgICBmaWxwLT5mX3BhdGguZGVudHJ5ID09IGlub2RlLT5pX3NiLT5zX3Jvb3QgJiYKKwkJCQkgICAgZGVudHJ5ID09IGlub2RlLT5pX3NiLT5zX3Jvb3QgJiYKIAkJCQkgICAgUkVJU0VSRlNfU0IoaW5vZGUtPmlfc2IpLT5wcml2X3Jvb3QgJiYKIAkJCQkgICAgUkVJU0VSRlNfU0IoaW5vZGUtPmlfc2IpLT5wcml2X3Jvb3QtPmRfaW5vZGUKIAkJCQkgICAgJiYgZGVoX29iamVjdGlkKGRlaCkgPT0KQEAgLTE1Niw3ICsxNTIsNyBAQAogCQkJCX0KIAogCQkJCWRfb2ZmID0gZGVoX29mZnNldChkZWgpOwotCQkJCWZpbHAtPmZfcG9zID0gZF9vZmY7CisJCQkJKnBvcyA9IGRfb2ZmOwogCQkJCWRfaW5vID0gZGVoX29iamVjdGlkKGRlaCk7CiAJCQkJaWYgKGRfcmVjbGVuIDw9IDMyKSB7CiAJCQkJCWxvY2FsX2J1ZiA9IHNtYWxsX2J1ZjsKQEAgLTIyMywxNSArMjE5LDIxIEBACiAKIAl9CQkJLyogd2hpbGUgKi8KIAotICAgICAgZW5kOgotCWZpbHAtPmZfcG9zID0gbmV4dF9wb3M7CitlbmQ6CisJKnBvcyA9IG5leHRfcG9zOwogCXBhdGhyZWxzZSgmcGF0aF90b19lbnRyeSk7CiAJcmVpc2VyZnNfY2hlY2tfcGF0aCgmcGF0aF90b19lbnRyeSk7Ci0gICAgICBvdXQ6CitvdXQ6CiAJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGlub2RlLT5pX3NiKTsKIAlyZXR1cm4gcmV0OwogfQogCitzdGF0aWMgaW50IHJlaXNlcmZzX3JlYWRkaXIoc3RydWN0IGZpbGUgKmZpbGUsIHZvaWQgKmRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIpCit7CisJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZmlsZS0+Zl9wYXRoLmRlbnRyeTsKKwlyZXR1cm4gcmVpc2VyZnNfcmVhZGRpcl9kZW50cnkoZGVudHJ5LCBkaXJlbnQsIGZpbGxkaXIsICZmaWxlLT5mX3Bvcyk7Cit9CisKIC8qIGNvbXBvc2UgZGlyZWN0b3J5IGl0ZW0gY29udGFpbmluZyAiLiIgYW5kICIuLiIgZW50cmllcyAoZW50cmllcyBhcmUKICAgIG5vdCBhbGlnbmVkIHRvIDQgYnl0ZSBib3VuZGFyeSkgKi8KIC8qIHRoZSBsYXN0IGZvdXIgcGFyYW1zIGFyZSBMRSAqLwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvZG9fYmFsYW4uYyBiL2ZzL3JlaXNlcmZzL2RvX2JhbGFuLmMKaW5kZXggMmY4N2Y1Yi4uNGJlYjk2NCAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvZG9fYmFsYW4uYworKysgYi9mcy9yZWlzZXJmcy9kb19iYWxhbi5jCkBAIC0yOSw2ICsyOSw0MyBAQAogCQkJCQkgICBpcyBpbnRlcnJ1cHRpbmcgZG9fYmFsYW5jZSAqLwogI2VuZGlmCiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBidWZmZXJfaW5mb19pbml0X2xlZnQoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBidWZmZXJfaW5mbyAqYmkpCit7CisJYmktPnRiICAgICAgICAgID0gdGI7CisJYmktPmJpX2JoICAgICAgID0gdGItPkxbMF07CisJYmktPmJpX3BhcmVudCAgID0gdGItPkZMWzBdOworCWJpLT5iaV9wb3NpdGlvbiA9IGdldF9sZWZ0X25laWdoYm9yX3Bvc2l0aW9uKHRiLCAwKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGJ1ZmZlcl9pbmZvX2luaXRfcmlnaHQoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnVmZmVyX2luZm8gKmJpKQoreworCWJpLT50YiAgICAgICAgICA9IHRiOworCWJpLT5iaV9iaCAgICAgICA9IHRiLT5SWzBdOworCWJpLT5iaV9wYXJlbnQgICA9IHRiLT5GUlswXTsKKwliaS0+YmlfcG9zaXRpb24gPSBnZXRfcmlnaHRfbmVpZ2hib3JfcG9zaXRpb24odGIsIDApOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgYnVmZmVyX2luZm9faW5pdF90YlMwKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnVmZmVyX2luZm8gKmJpKQoreworCWJpLT50YiAgICAgICAgICA9IHRiOworCWJpLT5iaV9iaCAgICAgICAgPSBQQVRIX1BMQVNUX0JVRkZFUih0Yi0+dGJfcGF0aCk7CisJYmktPmJpX3BhcmVudCAgID0gUEFUSF9IX1BQQVJFTlQodGItPnRiX3BhdGgsIDApOworCWJpLT5iaV9wb3NpdGlvbiA9IFBBVEhfSF9QT1NJVElPTih0Yi0+dGJfcGF0aCwgMSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBidWZmZXJfaW5mb19pbml0X2JoKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGJ1ZmZlcl9pbmZvICpiaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCit7CisJYmktPnRiICAgICAgICAgID0gdGI7CisJYmktPmJpX2JoICAgICAgID0gYmg7CisJYmktPmJpX3BhcmVudCAgID0gTlVMTDsKKwliaS0+YmlfcG9zaXRpb24gPSAwOworfQorCiBpbmxpbmUgdm9pZCBkb19iYWxhbmNlX21hcmtfbGVhZl9kaXJ0eShzdHJ1Y3QgdHJlZV9iYWxhbmNlICp0YiwKIAkJCQkgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IGZsYWcpCiB7CkBAIC0zOSwyMSArNzYsMjEgQEAKICNkZWZpbmUgZG9fYmFsYW5jZV9tYXJrX2ludGVybmFsX2RpcnR5IGRvX2JhbGFuY2VfbWFya19sZWFmX2RpcnR5CiAjZGVmaW5lIGRvX2JhbGFuY2VfbWFya19zYl9kaXJ0eSBkb19iYWxhbmNlX21hcmtfbGVhZl9kaXJ0eQogCi0vKiBzdW1tYXJ5OiAKKy8qIHN1bW1hcnk6CiAgaWYgZGVsZXRpbmcgc29tZXRoaW5nICggdGItPmluc2VydF9zaXplWzBdIDwgMCApCiAgICByZXR1cm4oYmFsYW5jZV9sZWFmX3doZW5fZGVsZXRlKCkpOyAoZmxhZyBkIGhhbmRsZWQgaGVyZSkKICBlbHNlCiAgICBpZiBsbnVtIGlzIGxhcmdlciB0aGFuIDAgd2UgcHV0IGl0ZW1zIGludG8gdGhlIGxlZnQgbm9kZQogICAgaWYgcm51bSBpcyBsYXJnZXIgdGhhbiAwIHdlIHB1dCBpdGVtcyBpbnRvIHRoZSByaWdodCBub2RlCiAgICBpZiBzbnVtMSBpcyBsYXJnZXIgdGhhbiAwIHdlIHB1dCBpdGVtcyBpbnRvIHRoZSBuZXcgbm9kZSBzMQotICAgaWYgc251bTIgaXMgbGFyZ2VyIHRoYW4gMCB3ZSBwdXQgaXRlbXMgaW50byB0aGUgbmV3IG5vZGUgczIgCisgICBpZiBzbnVtMiBpcyBsYXJnZXIgdGhhbiAwIHdlIHB1dCBpdGVtcyBpbnRvIHRoZSBuZXcgbm9kZSBzMgogTm90ZSB0aGF0IGFsbCAqbnVtKiBjb3VudCBuZXcgaXRlbXMgYmVpbmcgY3JlYXRlZC4KIAogSXQgd291bGQgYmUgZWFzaWVyIHRvIHJlYWQgYmFsYW5jZV9sZWFmKCkgaWYgZWFjaCBvZiB0aGVzZSBzdW1tYXJ5CiBsaW5lcyB3YXMgYSBzZXBhcmF0ZSBwcm9jZWR1cmUgcmF0aGVyIHRoYW4gYmVpbmcgaW5saW5lZC4gIEkgdGhpbmsKIHRoYXQgdGhlcmUgYXJlIG1hbnkgcGFzc2FnZXMgaGVyZSBhbmQgaW4gYmFsYW5jZV9sZWFmX3doZW5fZGVsZXRlKCkgaW4KIHdoaWNoIHR3byBjYWxscyB0byBvbmUgcHJvY2VkdXJlIGNhbiByZXBsYWNlIHR3byBwYXNzYWdlcywgYW5kIGl0Ci1taWdodCBzYXZlIGNhY2hlIHNwYWNlIGFuZCBpbXByb3ZlIHNvZnR3YXJlIG1haW50ZW5hbmNlIGNvc3RzIHRvIGRvIHNvLiAgCittaWdodCBzYXZlIGNhY2hlIHNwYWNlIGFuZCBpbXByb3ZlIHNvZnR3YXJlIG1haW50ZW5hbmNlIGNvc3RzIHRvIGRvIHNvLgogCiBWbGFkaW1pciBtYWRlIHRoZSBwZXJjZXB0aXZlIGNvbW1lbnQgdGhhdCB3ZSBzaG91bGQgb2ZmbG9hZCBtb3N0IG9mCiB0aGUgZGVjaXNpb24gbWFraW5nIGluIHRoaXMgZnVuY3Rpb24gaW50byBmaXhfbm9kZXMvY2hlY2tfYmFsYW5jZSwgYW5kCkBAIC04Niw2ICsxMjMsNyBAQAogCSAgICAgICAiUEFQLTEyMDEwOiB0cmVlIGNhbiBub3QgYmUgZW1wdHkiKTsKIAogCWloID0gQl9OX1BJVEVNX0hFQUQodGJTMCwgaXRlbV9wb3MpOworCWJ1ZmZlcl9pbmZvX2luaXRfdGJTMCh0YiwgJmJpKTsKIAogCS8qIERlbGV0ZSBvciB0cnVuY2F0ZSB0aGUgaXRlbSAqLwogCkBAIC05NiwxMCArMTM0LDYgQEAKIAkJICAgICAgICJ2cy0xMjAxMzogbW9kZSBEZWxldGUsIGluc2VydCBzaXplICVkLCBpaCB0byBiZSBkZWxldGVkICVoIiwKIAkJICAgICAgIC10Yi0+aW5zZXJ0X3NpemVbMF0sIGloKTsKIAotCQliaS50YiA9IHRiOwotCQliaS5iaV9iaCA9IHRiUzA7Ci0JCWJpLmJpX3BhcmVudCA9IFBBVEhfSF9QUEFSRU5UKHRiLT50Yl9wYXRoLCAwKTsKLQkJYmkuYmlfcG9zaXRpb24gPSBQQVRIX0hfUE9TSVRJT04odGItPnRiX3BhdGgsIDEpOwogCQlsZWFmX2RlbGV0ZV9pdGVtcygmYmksIDAsIGl0ZW1fcG9zLCAxLCAtMSk7CiAKIAkJaWYgKCFpdGVtX3BvcyAmJiB0Yi0+Q0ZMWzBdKSB7CkBAIC0xMjEsMTAgKzE1NSw2IEBACiAJCWJyZWFrOwogCiAJY2FzZSBNX0NVVDp7CQkvKiBjdXQgaXRlbSBpbiBTWzBdICovCi0JCQliaS50YiA9IHRiOwotCQkJYmkuYmlfYmggPSB0YlMwOwotCQkJYmkuYmlfcGFyZW50ID0gUEFUSF9IX1BQQVJFTlQodGItPnRiX3BhdGgsIDApOwotCQkJYmkuYmlfcG9zaXRpb24gPSBQQVRIX0hfUE9TSVRJT04odGItPnRiX3BhdGgsIDEpOwogCQkJaWYgKGlzX2RpcmVudHJ5X2xlX2loKGloKSkgewogCiAJCQkJLyogVUZTIHVubGluayBzZW1hbnRpY3MgYXJlIHN1Y2ggdGhhdCB5b3UgY2FuIG9ubHkgZGVsZXRlIG9uZSBkaXJlY3RvcnkgZW50cnkgYXQgYSB0aW1lLiAqLwpAQCAtMTUzLDggKzE4Myw4IEBACiAKIAlkZWZhdWx0OgogCQlwcmludF9jdXJfdGIoIjEyMDQwIik7Ci0JCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwKLQkJCSAgICAgICAiUEFQLTEyMDQwOiBiYWxhbmNlX2xlYWZfd2hlbl9kZWxldGU6IHVuZXhwZWN0YWJsZSBtb2RlOiAlcyglZCkiLAorCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJQQVAtMTIwNDAiLAorCQkJICAgICAgICJ1bmV4cGVjdGVkIG1vZGU6ICVzKCVkKSIsCiAJCQkgICAgICAgKGZsYWcgPT0KIAkJCQlNX1BBU1RFKSA/ICJQQVNURSIgOiAoKGZsYWcgPT0KIAkJCQkJCSAgICAgICBNX0lOU0VSVCkgPyAiSU5TRVJUIiA6CkBAIC0yNTgsMTUgKzI4OCwxNSBAQAogICAgICkKIHsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnRiUzAgPSBQQVRIX1BMQVNUX0JVRkZFUih0Yi0+dGJfcGF0aCk7Ci0JaW50IGl0ZW1fcG9zID0gUEFUSF9MQVNUX1BPU0lUSU9OKHRiLT50Yl9wYXRoKTsJLyogIGluZGV4IGludG8gdGhlIGFycmF5IG9mIGl0ZW0gaGVhZGVycyBpbiBTWzBdIAorCWludCBpdGVtX3BvcyA9IFBBVEhfTEFTVF9QT1NJVElPTih0Yi0+dGJfcGF0aCk7CS8qICBpbmRleCBpbnRvIHRoZSBhcnJheSBvZiBpdGVtIGhlYWRlcnMgaW4gU1swXQogCQkJCQkJCSAgIG9mIHRoZSBhZmZlY3RlZCBpdGVtICovCiAJc3RydWN0IGJ1ZmZlcl9pbmZvIGJpOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqU19uZXdbMl07CS8qIG5ldyBub2RlcyBhbGxvY2F0ZWQgdG8gaG9sZCB3aGF0IGNvdWxkIG5vdCBmaXQgaW50byBTICovCiAJaW50IHNudW1bMl07CQkvKiBudW1iZXIgb2YgaXRlbXMgdGhhdCB3aWxsIGJlIHBsYWNlZAogCQkJCSAgIGludG8gU19uZXcgKGluY2x1ZGVzIHBhcnRpYWxseSBzaGlmdGVkCiAJCQkJICAgaXRlbXMpICovCi0JaW50IHNieXRlc1syXTsJCS8qIGlmIGFuIGl0ZW0gaXMgcGFydGlhbGx5IHNoaWZ0ZWQgaW50byBTX25ldyB0aGVuIAotCQkJCSAgIGlmIGl0IGlzIGEgZGlyZWN0b3J5IGl0ZW0gCisJaW50IHNieXRlc1syXTsJCS8qIGlmIGFuIGl0ZW0gaXMgcGFydGlhbGx5IHNoaWZ0ZWQgaW50byBTX25ldyB0aGVuCisJCQkJICAgaWYgaXQgaXMgYSBkaXJlY3RvcnkgaXRlbQogCQkJCSAgIGl0IGlzIHRoZSBudW1iZXIgb2YgZW50cmllcyBmcm9tIHRoZSBpdGVtIHRoYXQgYXJlIHNoaWZ0ZWQgaW50byBTX25ldwogCQkJCSAgIGVsc2UKIAkJCQkgICBpdCBpcyB0aGUgbnVtYmVyIG9mIGJ5dGVzIGZyb20gdGhlIGl0ZW0gdGhhdCBhcmUgc2hpZnRlZCBpbnRvIFNfbmV3CkBAIC0zMjUsMTEgKzM1NSw3IEBACiAJCQkJCSAgICAgICBpaF9pdGVtX2xlbihpaCkpOwogCiAJCQkJCS8qIEluc2VydCBuZXcgaXRlbSBpbnRvIExbMF0gKi8KLQkJCQkJYmkudGIgPSB0YjsKLQkJCQkJYmkuYmlfYmggPSB0Yi0+TFswXTsKLQkJCQkJYmkuYmlfcGFyZW50ID0gdGItPkZMWzBdOwotCQkJCQliaS5iaV9wb3NpdGlvbiA9Ci0JCQkJCSAgICBnZXRfbGVmdF9uZWlnaGJvcl9wb3NpdGlvbih0YiwgMCk7CisJCQkJCWJ1ZmZlcl9pbmZvX2luaXRfbGVmdCh0YiwgJmJpKTsKIAkJCQkJbGVhZl9pbnNlcnRfaW50b19idWYoJmJpLAogCQkJCQkJCSAgICAgbiArIGl0ZW1fcG9zIC0KIAkJCQkJCQkgICAgIHJldF92YWwsIGloLCBib2R5LApAQCAtMzY5LDExICszOTUsNyBAQAogCQkJCQkgICAgbGVhZl9zaGlmdF9sZWZ0KHRiLCB0Yi0+bG51bVswXSAtIDEsCiAJCQkJCQkJICAgIHRiLT5sYnl0ZXMpOwogCQkJCQkvKiBJbnNlcnQgbmV3IGl0ZW0gaW50byBMWzBdICovCi0JCQkJCWJpLnRiID0gdGI7Ci0JCQkJCWJpLmJpX2JoID0gdGItPkxbMF07Ci0JCQkJCWJpLmJpX3BhcmVudCA9IHRiLT5GTFswXTsKLQkJCQkJYmkuYmlfcG9zaXRpb24gPQotCQkJCQkgICAgZ2V0X2xlZnRfbmVpZ2hib3JfcG9zaXRpb24odGIsIDApOworCQkJCQlidWZmZXJfaW5mb19pbml0X2xlZnQodGIsICZiaSk7CiAJCQkJCWxlYWZfaW5zZXJ0X2ludG9fYnVmKCZiaSwKIAkJCQkJCQkgICAgIG4gKyBpdGVtX3BvcyAtCiAJCQkJCQkJICAgICByZXRfdmFsLCBpaCwgYm9keSwKQEAgLTQyOSwxMyArNDUxLDcgQEAKIAkJCQkJCQl9CiAKIAkJCQkJCQkvKiBBcHBlbmQgZ2l2ZW4gZGlyZWN0b3J5IGVudHJ5IHRvIGRpcmVjdG9yeSBpdGVtICovCi0JCQkJCQkJYmkudGIgPSB0YjsKLQkJCQkJCQliaS5iaV9iaCA9IHRiLT5MWzBdOwotCQkJCQkJCWJpLmJpX3BhcmVudCA9Ci0JCQkJCQkJICAgIHRiLT5GTFswXTsKLQkJCQkJCQliaS5iaV9wb3NpdGlvbiA9Ci0JCQkJCQkJICAgIGdldF9sZWZ0X25laWdoYm9yX3Bvc2l0aW9uCi0JCQkJCQkJICAgICh0YiwgMCk7CisJCQkJCQkJYnVmZmVyX2luZm9faW5pdF9sZWZ0KHRiLCAmYmkpOwogCQkJCQkJCWxlYWZfcGFzdGVfaW5fYnVmZmVyCiAJCQkJCQkJICAgICgmYmksCiAJCQkJCQkJICAgICBuICsgaXRlbV9wb3MgLQpAQCAtNDQ5LDggKzQ2NSw3IEBACiAJCQkJCQkJLyogd2hlbiB3ZSBoYXZlIG1lcmdlIGRpcmVjdG9yeSBpdGVtLCBwb3NfaW5faXRlbSBoYXMgYmVlbiBjaGFuZ2VkIHRvbyAqLwogCiAJCQkJCQkJLyogcGFzdGUgbmV3IGRpcmVjdG9yeSBlbnRyeS4gMSBpcyBlbnRyeSBudW1iZXIgKi8KLQkJCQkJCQlsZWFmX3Bhc3RlX2VudHJpZXMoYmkuCi0JCQkJCQkJCQkgICBiaV9iaCwKKwkJCQkJCQlsZWFmX3Bhc3RlX2VudHJpZXMoJmJpLAogCQkJCQkJCQkJICAgbiArCiAJCQkJCQkJCQkgICBpdGVtX3BvcwogCQkJCQkJCQkJICAgLQpAQCAtNTI0LDEzICs1MzksNyBAQAogCQkJCQkJCQkJICAgICAodGJTMCwKIAkJCQkJCQkJCSAgICAgIGl0ZW1fcG9zKSkpOwogCQkJCQkJCS8qIEFwcGVuZCB0byBib2R5IG9mIGl0ZW0gaW4gTFswXSAqLwotCQkJCQkJCWJpLnRiID0gdGI7Ci0JCQkJCQkJYmkuYmlfYmggPSB0Yi0+TFswXTsKLQkJCQkJCQliaS5iaV9wYXJlbnQgPQotCQkJCQkJCSAgICB0Yi0+RkxbMF07Ci0JCQkJCQkJYmkuYmlfcG9zaXRpb24gPQotCQkJCQkJCSAgICBnZXRfbGVmdF9uZWlnaGJvcl9wb3NpdGlvbgotCQkJCQkJCSAgICAodGIsIDApOworCQkJCQkJCWJ1ZmZlcl9pbmZvX2luaXRfbGVmdCh0YiwgJmJpKTsKIAkJCQkJCQlsZWFmX3Bhc3RlX2luX2J1ZmZlcgogCQkJCQkJCSAgICAoJmJpLAogCQkJCQkJCSAgICAgbiArIGl0ZW1fcG9zIC0KQEAgLTY4MSwxMSArNjkwLDcgQEAKIAkJCQkJICAgIGxlYWZfc2hpZnRfbGVmdCh0YiwgdGItPmxudW1bMF0sCiAJCQkJCQkJICAgIHRiLT5sYnl0ZXMpOwogCQkJCQkvKiBBcHBlbmQgdG8gYm9keSBvZiBpdGVtIGluIExbMF0gKi8KLQkJCQkJYmkudGIgPSB0YjsKLQkJCQkJYmkuYmlfYmggPSB0Yi0+TFswXTsKLQkJCQkJYmkuYmlfcGFyZW50ID0gdGItPkZMWzBdOwotCQkJCQliaS5iaV9wb3NpdGlvbiA9Ci0JCQkJCSAgICBnZXRfbGVmdF9uZWlnaGJvcl9wb3NpdGlvbih0YiwgMCk7CisJCQkJCWJ1ZmZlcl9pbmZvX2luaXRfbGVmdCh0YiwgJmJpKTsKIAkJCQkJbGVhZl9wYXN0ZV9pbl9idWZmZXIoJmJpLAogCQkJCQkJCSAgICAgbiArIGl0ZW1fcG9zIC0KIAkJCQkJCQkgICAgIHJldF92YWwsCkBAIC02OTksNyArNzA0LDcgQEAKIAkJCQkJCQkgICBuICsgaXRlbV9wb3MgLQogCQkJCQkJCSAgIHJldF92YWwpOwogCQkJCQlpZiAoaXNfZGlyZW50cnlfbGVfaWgocGFzdGVkKSkKLQkJCQkJCWxlYWZfcGFzdGVfZW50cmllcyhiaS5iaV9iaCwKKwkJCQkJCWxlYWZfcGFzdGVfZW50cmllcygmYmksCiAJCQkJCQkJCSAgIG4gKwogCQkJCQkJCQkgICBpdGVtX3BvcyAtCiAJCQkJCQkJCSAgIHJldF92YWwsCkBAIC03MjIsOCArNzI3LDkgQEAKIAkJCQl9CiAJCQkJYnJlYWs7CiAJCQlkZWZhdWx0OgkvKiBjYXNlcyBkIGFuZCB0ICovCi0JCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLAotCQkJCQkgICAgICAgIlBBUC0xMjEzMDogYmFsYW5jZV9sZWFmOiBsbnVtID4gMDogdW5leHBlY3RhYmxlIG1vZGU6ICVzKCVkKSIsCisJCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAiUEFQLTEyMTMwIiwKKwkJCQkJICAgICAgICJsbnVtID4gMDogdW5leHBlY3RlZCBtb2RlOiAiCisJCQkJCSAgICAgICAiICVzKCVkKSIsCiAJCQkJCSAgICAgICAoZmxhZyA9PQogCQkJCQkJTV9ERUxFVEUpID8gIkRFTEVURSIgOiAoKGZsYWcgPT0KIAkJCQkJCQkJCSBNX0NVVCkKQEAgLTc3NiwxMSArNzgyLDcgQEAKIAkJCQkJc2V0X2xlX2loX2tfb2Zmc2V0KGloLCBvZmZzZXQpOwogCQkJCQlwdXRfaWhfaXRlbV9sZW4oaWgsIHRiLT5yYnl0ZXMpOwogCQkJCQkvKiBJbnNlcnQgcGFydCBvZiB0aGUgaXRlbSBpbnRvIFJbMF0gKi8KLQkJCQkJYmkudGIgPSB0YjsKLQkJCQkJYmkuYmlfYmggPSB0Yi0+UlswXTsKLQkJCQkJYmkuYmlfcGFyZW50ID0gdGItPkZSWzBdOwotCQkJCQliaS5iaV9wb3NpdGlvbiA9Ci0JCQkJCSAgICBnZXRfcmlnaHRfbmVpZ2hib3JfcG9zaXRpb24odGIsIDApOworCQkJCQlidWZmZXJfaW5mb19pbml0X3JpZ2h0KHRiLCAmYmkpOwogCQkJCQlpZiAoKG9sZF9sZW4gLSB0Yi0+cmJ5dGVzKSA+IHplcm9zX251bSkgewogCQkJCQkJcl96ZXJvc19udW1iZXIgPSAwOwogCQkJCQkJcl9ib2R5ID0KQEAgLTgxNywxMSArODE5LDcgQEAKIAkJCQkJCQkgICAgIHRiLT5ybnVtWzBdIC0gMSwKIAkJCQkJCQkgICAgIHRiLT5yYnl0ZXMpOwogCQkJCQkvKiBJbnNlcnQgbmV3IGl0ZW0gaW50byBSWzBdICovCi0JCQkJCWJpLnRiID0gdGI7Ci0JCQkJCWJpLmJpX2JoID0gdGItPlJbMF07Ci0JCQkJCWJpLmJpX3BhcmVudCA9IHRiLT5GUlswXTsKLQkJCQkJYmkuYmlfcG9zaXRpb24gPQotCQkJCQkgICAgZ2V0X3JpZ2h0X25laWdoYm9yX3Bvc2l0aW9uKHRiLCAwKTsKKwkJCQkJYnVmZmVyX2luZm9faW5pdF9yaWdodCh0YiwgJmJpKTsKIAkJCQkJbGVhZl9pbnNlcnRfaW50b19idWYoJmJpLAogCQkJCQkJCSAgICAgaXRlbV9wb3MgLSBuICsKIAkJCQkJCQkgICAgIHRiLT5ybnVtWzBdIC0gMSwKQEAgLTg4MSwyMSArODc5LDE0IEBACiAJCQkJCQkJICAgIHBvc19pbl9pdGVtIC0KIAkJCQkJCQkgICAgZW50cnlfY291bnQgKwogCQkJCQkJCSAgICB0Yi0+cmJ5dGVzIC0gMTsKLQkJCQkJCQliaS50YiA9IHRiOwotCQkJCQkJCWJpLmJpX2JoID0gdGItPlJbMF07Ci0JCQkJCQkJYmkuYmlfcGFyZW50ID0KLQkJCQkJCQkgICAgdGItPkZSWzBdOwotCQkJCQkJCWJpLmJpX3Bvc2l0aW9uID0KLQkJCQkJCQkgICAgZ2V0X3JpZ2h0X25laWdoYm9yX3Bvc2l0aW9uCi0JCQkJCQkJICAgICh0YiwgMCk7CisJCQkJCQkJYnVmZmVyX2luZm9faW5pdF9yaWdodCh0YiwgJmJpKTsKIAkJCQkJCQlsZWFmX3Bhc3RlX2luX2J1ZmZlcgogCQkJCQkJCSAgICAoJmJpLCAwLAogCQkJCQkJCSAgICAgcGFzdGVfZW50cnlfcG9zaXRpb24sCiAJCQkJCQkJICAgICB0Yi0+aW5zZXJ0X3NpemVbMF0sCiAJCQkJCQkJICAgICBib2R5LCB6ZXJvc19udW0pOwogCQkJCQkJCS8qIHBhc3RlIGVudHJ5ICovCi0JCQkJCQkJbGVhZl9wYXN0ZV9lbnRyaWVzKGJpLgotCQkJCQkJCQkJICAgYmlfYmgsCisJCQkJCQkJbGVhZl9wYXN0ZV9lbnRyaWVzKCZiaSwKIAkJCQkJCQkJCSAgIDAsCiAJCQkJCQkJCQkgICBwYXN0ZV9lbnRyeV9wb3NpdGlvbiwKIAkJCQkJCQkJCSAgIDEsCkBAIC0xMDE5LDEyICsxMDEwLDcgQEAKIAkJCQkJCSAgICAodGIsIHRiLT5DRlJbMF0sIDApOwogCiAJCQkJCQkvKiBBcHBlbmQgcGFydCBvZiBib2R5IGludG8gUlswXSAqLwotCQkJCQkJYmkudGIgPSB0YjsKLQkJCQkJCWJpLmJpX2JoID0gdGItPlJbMF07Ci0JCQkJCQliaS5iaV9wYXJlbnQgPSB0Yi0+RlJbMF07Ci0JCQkJCQliaS5iaV9wb3NpdGlvbiA9Ci0JCQkJCQkgICAgZ2V0X3JpZ2h0X25laWdoYm9yX3Bvc2l0aW9uCi0JCQkJCQkgICAgKHRiLCAwKTsKKwkJCQkJCWJ1ZmZlcl9pbmZvX2luaXRfcmlnaHQodGIsICZiaSk7CiAJCQkJCQlpZiAobl9yZW0gPiB6ZXJvc19udW0pIHsKIAkJCQkJCQlyX3plcm9zX251bWJlciA9IDA7CiAJCQkJCQkJcl9ib2R5ID0KQEAgLTEwNzEsMTIgKzEwNTcsNyBAQAogCQkJCQkJCSAgICAgdGItPnJieXRlcyk7CiAJCQkJCS8qIGFwcGVuZCBpdGVtIGluIFJbMF0gKi8KIAkJCQkJaWYgKHBvc19pbl9pdGVtID49IDApIHsKLQkJCQkJCWJpLnRiID0gdGI7Ci0JCQkJCQliaS5iaV9iaCA9IHRiLT5SWzBdOwotCQkJCQkJYmkuYmlfcGFyZW50ID0gdGItPkZSWzBdOwotCQkJCQkJYmkuYmlfcG9zaXRpb24gPQotCQkJCQkJICAgIGdldF9yaWdodF9uZWlnaGJvcl9wb3NpdGlvbgotCQkJCQkJICAgICh0YiwgMCk7CisJCQkJCQlidWZmZXJfaW5mb19pbml0X3JpZ2h0KHRiLCAmYmkpOwogCQkJCQkJbGVhZl9wYXN0ZV9pbl9idWZmZXIoJmJpLAogCQkJCQkJCQkgICAgIGl0ZW1fcG9zIC0KIAkJCQkJCQkJICAgICBuICsKQEAgLTEwOTYsNyArMTA3Nyw3IEBACiAJCQkJCQkJICAgdGItPnJudW1bMF0pOwogCQkJCQlpZiAoaXNfZGlyZW50cnlfbGVfaWgocGFzdGVkKQogCQkJCQkgICAgJiYgcG9zX2luX2l0ZW0gPj0gMCkgewotCQkJCQkJbGVhZl9wYXN0ZV9lbnRyaWVzKGJpLmJpX2JoLAorCQkJCQkJbGVhZl9wYXN0ZV9lbnRyaWVzKCZiaSwKIAkJCQkJCQkJICAgaXRlbV9wb3MgLQogCQkJCQkJCQkgICBuICsKIAkJCQkJCQkJICAgdGItPnJudW1bMF0sCkBAIC0xMTM2LDggKzExMTcsOCBAQAogCQkJfQogCQkJYnJlYWs7CiAJCWRlZmF1bHQ6CS8qIGNhc2VzIGQgYW5kIHQgKi8KLQkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwKLQkJCQkgICAgICAgIlBBUC0xMjE3NTogYmFsYW5jZV9sZWFmOiBybnVtID4gMDogdW5leHBlY3RhYmxlIG1vZGU6ICVzKCVkKSIsCisJCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJQQVAtMTIxNzUiLAorCQkJCSAgICAgICAicm51bSA+IDA6IHVuZXhwZWN0ZWQgbW9kZTogJXMoJWQpIiwKIAkJCQkgICAgICAgKGZsYWcgPT0KIAkJCQkJTV9ERUxFVEUpID8gIkRFTEVURSIgOiAoKGZsYWcgPT0KIAkJCQkJCQkJIE1fQ1VUKSA/ICJDVVQiCkBAIC0xMTY3LDggKzExNDgsOCBAQAogCQkgICBub3Qgc2V0IGNvcnJlY3RseSAqLwogCQlpZiAodGItPkNGTFswXSkgewogCQkJaWYgKCF0Yi0+Q0ZSWzBdKQotCQkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwKLQkJCQkJICAgICAgICJ2cy0xMjE5NTogYmFsYW5jZV9sZWFmOiBDRlIgbm90IGluaXRpYWxpemVkIik7CisJCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAidnMtMTIxOTUiLAorCQkJCQkgICAgICAgIkNGUiBub3QgaW5pdGlhbGl6ZWQiKTsKIAkJCWNvcHlfa2V5KEJfTl9QREVMSU1fS0VZKHRiLT5DRkxbMF0sIHRiLT5sa2V5WzBdKSwKIAkJCQkgQl9OX1BERUxJTV9LRVkodGItPkNGUlswXSwgdGItPnJrZXlbMF0pKTsKIAkJCWRvX2JhbGFuY2VfbWFya19pbnRlcm5hbF9kaXJ0eSh0YiwgdGItPkNGTFswXSwgMCk7CkBAIC0xMjMyLDEwICsxMjEzLDcgQEAKIAkJCQkJcHV0X2loX2l0ZW1fbGVuKGloLCBzYnl0ZXNbaV0pOwogCiAJCQkJCS8qIEluc2VydCBwYXJ0IG9mIHRoZSBpdGVtIGludG8gU19uZXdbaV0gYmVmb3JlIDAtdGggaXRlbSAqLwotCQkJCQliaS50YiA9IHRiOwotCQkJCQliaS5iaV9iaCA9IFNfbmV3W2ldOwotCQkJCQliaS5iaV9wYXJlbnQgPSBOVUxMOwotCQkJCQliaS5iaV9wb3NpdGlvbiA9IDA7CisJCQkJCWJ1ZmZlcl9pbmZvX2luaXRfYmgodGIsICZiaSwgU19uZXdbaV0pOwogCiAJCQkJCWlmICgob2xkX2xlbiAtIHNieXRlc1tpXSkgPiB6ZXJvc19udW0pIHsKIAkJCQkJCXJfemVyb3NfbnVtYmVyID0gMDsKQEAgLTEyNjcsMTAgKzEyNDUsNyBAQAogCQkJCQkJCVNfbmV3W2ldKTsKIAogCQkJCQkvKiBJbnNlcnQgbmV3IGl0ZW0gaW50byBTX25ld1tpXSAqLwotCQkJCQliaS50YiA9IHRiOwotCQkJCQliaS5iaV9iaCA9IFNfbmV3W2ldOwotCQkJCQliaS5iaV9wYXJlbnQgPSBOVUxMOwotCQkJCQliaS5iaV9wb3NpdGlvbiA9IDA7CisJCQkJCWJ1ZmZlcl9pbmZvX2luaXRfYmgodGIsICZiaSwgU19uZXdbaV0pOwogCQkJCQlsZWFmX2luc2VydF9pbnRvX2J1ZigmYmksCiAJCQkJCQkJICAgICBpdGVtX3BvcyAtIG4gKwogCQkJCQkJCSAgICAgc251bVtpXSAtIDEsIGloLApAQCAtMTMyNywxMCArMTMwMiw3IEBACiAJCQkJCQkJICAgICBzYnl0ZXNbaV0gLSAxLAogCQkJCQkJCSAgICAgU19uZXdbaV0pOwogCQkJCQkJCS8qIFBhc3RlIGdpdmVuIGRpcmVjdG9yeSBlbnRyeSB0byBkaXJlY3RvcnkgaXRlbSAqLwotCQkJCQkJCWJpLnRiID0gdGI7Ci0JCQkJCQkJYmkuYmlfYmggPSBTX25ld1tpXTsKLQkJCQkJCQliaS5iaV9wYXJlbnQgPSBOVUxMOwotCQkJCQkJCWJpLmJpX3Bvc2l0aW9uID0gMDsKKwkJCQkJCQlidWZmZXJfaW5mb19pbml0X2JoKHRiLCAmYmksIFNfbmV3W2ldKTsKIAkJCQkJCQlsZWFmX3Bhc3RlX2luX2J1ZmZlcgogCQkJCQkJCSAgICAoJmJpLCAwLAogCQkJCQkJCSAgICAgcG9zX2luX2l0ZW0gLQpAQCAtMTMzOSw4ICsxMzExLDcgQEAKIAkJCQkJCQkgICAgIHRiLT5pbnNlcnRfc2l6ZVswXSwKIAkJCQkJCQkgICAgIGJvZHksIHplcm9zX251bSk7CiAJCQkJCQkJLyogcGFzdGUgbmV3IGRpcmVjdG9yeSBlbnRyeSAqLwotCQkJCQkJCWxlYWZfcGFzdGVfZW50cmllcyhiaS4KLQkJCQkJCQkJCSAgIGJpX2JoLAorCQkJCQkJCWxlYWZfcGFzdGVfZW50cmllcygmYmksCiAJCQkJCQkJCQkgICAwLAogCQkJCQkJCQkJICAgcG9zX2luX2l0ZW0KIAkJCQkJCQkJCSAgIC0KQEAgLTE0MDEsMTEgKzEzNzIsNyBAQAogCQkJCQkJaWYgKG5fcmVtIDwgMCkKIAkJCQkJCQluX3JlbSA9IDA7CiAJCQkJCQkvKiBBcHBlbmQgcGFydCBvZiBib2R5IGludG8gU19uZXdbMF0gKi8KLQkJCQkJCWJpLnRiID0gdGI7Ci0JCQkJCQliaS5iaV9iaCA9IFNfbmV3W2ldOwotCQkJCQkJYmkuYmlfcGFyZW50ID0gTlVMTDsKLQkJCQkJCWJpLmJpX3Bvc2l0aW9uID0gMDsKLQorCQkJCQkJYnVmZmVyX2luZm9faW5pdF9iaCh0YiwgJmJpLCBTX25ld1tpXSk7CiAJCQkJCQlpZiAobl9yZW0gPiB6ZXJvc19udW0pIHsKIAkJCQkJCQlyX3plcm9zX251bWJlciA9IDA7CiAJCQkJCQkJcl9ib2R5ID0KQEAgLTE0NzUsNyArMTQ0MiwxMCBAQAogCQkJCQkgICAgJiYgKHBvc19pbl9pdGVtICE9IGloX2l0ZW1fbGVuKGloX2NoZWNrKQogCQkJCQkJfHwgdGItPmluc2VydF9zaXplWzBdIDw9IDApKQogCQkJCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLAotCQkJCQkJCSAgICAgICAiUEFQLTEyMjM1OiBiYWxhbmNlX2xlYWY6IHBvc19pbl9pdGVtIG11c3QgYmUgZXF1YWwgdG8gaWhfaXRlbV9sZW4iKTsKKwkJCQkJCQkgICAgICJQQVAtMTIyMzUiLAorCQkJCQkJCSAgICAgInBvc19pbl9pdGVtICIKKwkJCQkJCQkgICAgICJtdXN0IGJlIGVxdWFsICIKKwkJCQkJCQkgICAgICJ0byBpaF9pdGVtX2xlbiIpOwogI2VuZGlmCQkJCS8qIENPTkZJR19SRUlTRVJGU19DSEVDSyAqLwogCiAJCQkJCWxlYWZfbWkgPQpAQCAtMTQ4OSwxMCArMTQ1OSw3IEBACiAJCQkJCSAgICAgICBsZWFmX21pKTsKIAogCQkJCQkvKiBwYXN0ZSBpbnRvIGl0ZW0gKi8KLQkJCQkJYmkudGIgPSB0YjsKLQkJCQkJYmkuYmlfYmggPSBTX25ld1tpXTsKLQkJCQkJYmkuYmlfcGFyZW50ID0gTlVMTDsKLQkJCQkJYmkuYmlfcG9zaXRpb24gPSAwOworCQkJCQlidWZmZXJfaW5mb19pbml0X2JoKHRiLCAmYmksIFNfbmV3W2ldKTsKIAkJCQkJbGVhZl9wYXN0ZV9pbl9idWZmZXIoJmJpLAogCQkJCQkJCSAgICAgaXRlbV9wb3MgLSBuICsKIAkJCQkJCQkgICAgIHNudW1baV0sCkBAIC0xNTA1LDcgKzE0NzIsNyBAQAogCQkJCQkJCSAgIGl0ZW1fcG9zIC0gbiArCiAJCQkJCQkJICAgc251bVtpXSk7CiAJCQkJCWlmIChpc19kaXJlbnRyeV9sZV9paChwYXN0ZWQpKSB7Ci0JCQkJCQlsZWFmX3Bhc3RlX2VudHJpZXMoYmkuYmlfYmgsCisJCQkJCQlsZWFmX3Bhc3RlX2VudHJpZXMoJmJpLAogCQkJCQkJCQkgICBpdGVtX3BvcyAtCiAJCQkJCQkJCSAgIG4gKyBzbnVtW2ldLAogCQkJCQkJCQkgICBwb3NfaW5faXRlbSwKQEAgLTE1MzUsOCArMTUwMiw4IEBACiAJCQl9CiAJCQlicmVhazsKIAkJZGVmYXVsdDoJLyogY2FzZXMgZCBhbmQgdCAqLwotCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLAotCQkJCSAgICAgICAiUEFQLTEyMjQ1OiBiYWxhbmNlX2xlYWY6IGJsa251bSA+IDI6IHVuZXhwZWN0YWJsZSBtb2RlOiAlcyglZCkiLAorCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAiUEFQLTEyMjQ1IiwKKwkJCQkgICAgICAgImJsa251bSA+IDI6IHVuZXhwZWN0ZWQgbW9kZTogJXMoJWQpIiwKIAkJCQkgICAgICAgKGZsYWcgPT0KIAkJCQkJTV9ERUxFVEUpID8gIkRFTEVURSIgOiAoKGZsYWcgPT0KIAkJCQkJCQkJIE1fQ1VUKSA/ICJDVVQiCkBAIC0xNTU5LDEwICsxNTI2LDcgQEAKIAogCQlzd2l0Y2ggKGZsYWcpIHsKIAkJY2FzZSBNX0lOU0VSVDoJLyogaW5zZXJ0IGl0ZW0gaW50byBTWzBdICovCi0JCQliaS50YiA9IHRiOwotCQkJYmkuYmlfYmggPSB0YlMwOwotCQkJYmkuYmlfcGFyZW50ID0gUEFUSF9IX1BQQVJFTlQodGItPnRiX3BhdGgsIDApOwotCQkJYmkuYmlfcG9zaXRpb24gPSBQQVRIX0hfUE9TSVRJT04odGItPnRiX3BhdGgsIDEpOworCQkJYnVmZmVyX2luZm9faW5pdF90YlMwKHRiLCAmYmkpOwogCQkJbGVhZl9pbnNlcnRfaW50b19idWYoJmJpLCBpdGVtX3BvcywgaWgsIGJvZHksCiAJCQkJCSAgICAgemVyb3NfbnVtKTsKIApAQCAtMTU4OSwxNCArMTU1Myw3IEBACiAJCQkJCQkgICAgICAgIlBBUC0xMjI2MDogaW5zZXJ0X3NpemUgaXMgMCBhbHJlYWR5Iik7CiAKIAkJCQkJCS8qIHByZXBhcmUgc3BhY2UgKi8KLQkJCQkJCWJpLnRiID0gdGI7Ci0JCQkJCQliaS5iaV9iaCA9IHRiUzA7Ci0JCQkJCQliaS5iaV9wYXJlbnQgPQotCQkJCQkJICAgIFBBVEhfSF9QUEFSRU5UKHRiLT50Yl9wYXRoLAotCQkJCQkJCQkgICAwKTsKLQkJCQkJCWJpLmJpX3Bvc2l0aW9uID0KLQkJCQkJCSAgICBQQVRIX0hfUE9TSVRJT04odGItPnRiX3BhdGgsCi0JCQkJCQkJCSAgICAxKTsKKwkJCQkJCWJ1ZmZlcl9pbmZvX2luaXRfdGJTMCh0YiwgJmJpKTsKIAkJCQkJCWxlYWZfcGFzdGVfaW5fYnVmZmVyKCZiaSwKIAkJCQkJCQkJICAgICBpdGVtX3BvcywKIAkJCQkJCQkJICAgICBwb3NfaW5faXRlbSwKQEAgLTE2MDYsNyArMTU2Myw3IEBACiAJCQkJCQkJCSAgICAgemVyb3NfbnVtKTsKIAogCQkJCQkJLyogcGFzdGUgZW50cnkgKi8KLQkJCQkJCWxlYWZfcGFzdGVfZW50cmllcyhiaS5iaV9iaCwKKwkJCQkJCWxlYWZfcGFzdGVfZW50cmllcygmYmksCiAJCQkJCQkJCSAgIGl0ZW1fcG9zLAogCQkJCQkJCQkgICBwb3NfaW5faXRlbSwKIAkJCQkJCQkJICAgMSwKQEAgLTE2NDQsMTQgKzE2MDEsNyBAQAogCQkJCQkJUkZBTFNFKHRiLT5pbnNlcnRfc2l6ZVswXSA8PSAwLAogCQkJCQkJICAgICAgICJQQVAtMTIyNzU6IGluc2VydCBzaXplIG11c3Qgbm90IGJlICVkIiwKIAkJCQkJCSAgICAgICB0Yi0+aW5zZXJ0X3NpemVbMF0pOwotCQkJCQkJYmkudGIgPSB0YjsKLQkJCQkJCWJpLmJpX2JoID0gdGJTMDsKLQkJCQkJCWJpLmJpX3BhcmVudCA9Ci0JCQkJCQkgICAgUEFUSF9IX1BQQVJFTlQodGItPnRiX3BhdGgsCi0JCQkJCQkJCSAgIDApOwotCQkJCQkJYmkuYmlfcG9zaXRpb24gPQotCQkJCQkJICAgIFBBVEhfSF9QT1NJVElPTih0Yi0+dGJfcGF0aCwKLQkJCQkJCQkJICAgIDEpOworCQkJCQkJYnVmZmVyX2luZm9faW5pdF90YlMwKHRiLCAmYmkpOwogCQkJCQkJbGVhZl9wYXN0ZV9pbl9idWZmZXIoJmJpLAogCQkJCQkJCQkgICAgIGl0ZW1fcG9zLAogCQkJCQkJCQkgICAgIHBvc19pbl9pdGVtLApAQCAtMTY4MSwxMCArMTYzMSwxMSBAQAogCQkJCQkJCXByaW50X2N1cl90YigiMTIyODUiKTsKIAkJCQkJCQlyZWlzZXJmc19wYW5pYyh0Yi0+CiAJCQkJCQkJCSAgICAgICB0Yl9zYiwKLQkJCQkJCQkJICAgICAgICJQQVAtMTIyODU6IGJhbGFuY2VfbGVhZjogaW5zZXJ0X3NpemUgbXVzdCBiZSAwICglZCkiLAotCQkJCQkJCQkgICAgICAgdGItPgotCQkJCQkJCQkgICAgICAgaW5zZXJ0X3NpemUKLQkJCQkJCQkJICAgICAgIFswXSk7CisJCQkJCQkJICAgICJQQVAtMTIyODUiLAorCQkJCQkJCSAgICAiaW5zZXJ0X3NpemUgIgorCQkJCQkJCSAgICAibXVzdCBiZSAwICIKKwkJCQkJCQkgICAgIiglZCkiLAorCQkJCQkJCSAgICB0Yi0+aW5zZXJ0X3NpemVbMF0pOwogCQkJCQkJfQogCQkJCQl9CiAjZW5kaWYJCQkJLyogQ09ORklHX1JFSVNFUkZTX0NIRUNLICovCkBAIC0xNjk3LDExICsxNjQ4LDEwIEBACiAJaWYgKGZsYWcgPT0gTV9QQVNURSAmJiB0Yi0+aW5zZXJ0X3NpemVbMF0pIHsKIAkJcHJpbnRfY3VyX3RiKCIxMjI5MCIpOwogCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsCi0JCQkgICAgICAgIlBBUC0xMjI5MDogYmFsYW5jZV9sZWFmOiBpbnNlcnRfc2l6ZSBpcyBzdGlsbCBub3QgMCAoJWQpIiwKKwkJCSAgICAgICAiUEFQLTEyMjkwIiwgImluc2VydF9zaXplIGlzIHN0aWxsIG5vdCAwICglZCkiLAogCQkJICAgICAgIHRiLT5pbnNlcnRfc2l6ZVswXSk7CiAJfQogI2VuZGlmCQkJCS8qIENPTkZJR19SRUlTRVJGU19DSEVDSyAqLwotCiAJcmV0dXJuIDA7CiB9CQkJCS8qIExlYWYgbGV2ZWwgb2YgdGhlIHRyZWUgaXMgYmFsYW5jZWQgKGVuZCBvZiBiYWxhbmNlX2xlYWYpICovCiAKQEAgLTE3MjQsNyArMTY3NCw2IEBACiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmdldF9GRUIoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIpCiB7CiAJaW50IGk7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpmaXJzdF9iOwogCXN0cnVjdCBidWZmZXJfaW5mbyBiaTsKIAogCWZvciAoaSA9IDA7IGkgPCBNQVhfRkVCX1NJWkU7IGkrKykKQEAgLTE3MzIsMTkgKzE2ODEsMTUgQEAKIAkJCWJyZWFrOwogCiAJaWYgKGkgPT0gTUFYX0ZFQl9TSVpFKQotCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsCi0JCQkgICAgICAgInZzLTEyMzAwOiBnZXRfRkVCOiBGRUIgbGlzdCBpcyBlbXB0eSIpOworCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJ2cy0xMjMwMCIsICJGRUIgbGlzdCBpcyBlbXB0eSIpOwogCi0JYmkudGIgPSB0YjsKLQliaS5iaV9iaCA9IGZpcnN0X2IgPSB0Yi0+RkVCW2ldOwotCWJpLmJpX3BhcmVudCA9IE5VTEw7Ci0JYmkuYmlfcG9zaXRpb24gPSAwOworCWJ1ZmZlcl9pbmZvX2luaXRfYmgodGIsICZiaSwgdGItPkZFQltpXSk7CiAJbWFrZV9lbXB0eV9ub2RlKCZiaSk7Ci0Jc2V0X2J1ZmZlcl91cHRvZGF0ZShmaXJzdF9iKTsKKwlzZXRfYnVmZmVyX3VwdG9kYXRlKHRiLT5GRUJbaV0pOworCXRiLT51c2VkW2ldID0gdGItPkZFQltpXTsKIAl0Yi0+RkVCW2ldID0gTlVMTDsKLQl0Yi0+dXNlZFtpXSA9IGZpcnN0X2I7CiAKLQlyZXR1cm4gKGZpcnN0X2IpOworCXJldHVybiB0Yi0+dXNlZFtpXTsKIH0KIAogLyogVGhpcyBpcyBub3cgdXNlZCBiZWNhdXNlIHJlaXNlcmZzX2ZyZWVfYmxvY2sgaGFzIHRvIGJlIGFibGUgdG8KQEAgLTE3NTUsMTUgKzE3MDAsMTYgQEAKIAlpbnQgaTsKIAogCWlmIChidWZmZXJfZGlydHkoYmgpKQotCQlyZWlzZXJmc193YXJuaW5nKHRiLT50Yl9zYiwKLQkJCQkgInN0b3JlX3Rocm93biBkZWFscyB3aXRoIGRpcnR5IGJ1ZmZlciIpOworCQlyZWlzZXJmc193YXJuaW5nKHRiLT50Yl9zYiwgInJlaXNlcmZzLTEyMzIwIiwKKwkJCQkgImNhbGxlZCB3aXRoIGRpcnR5IGJ1ZmZlciIpOwogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHRiLT50aHJvd24pOyBpKyspCiAJCWlmICghdGItPnRocm93bltpXSkgewogCQkJdGItPnRocm93bltpXSA9IGJoOwogCQkJZ2V0X2JoKGJoKTsJLyogZnJlZV90aHJvd24gcHV0cyB0aGlzICovCiAJCQlyZXR1cm47CiAJCX0KLQlyZWlzZXJmc193YXJuaW5nKHRiLT50Yl9zYiwgInN0b3JlX3Rocm93bjogdG9vIG1hbnkgdGhyb3duIGJ1ZmZlcnMiKTsKKwlyZWlzZXJmc193YXJuaW5nKHRiLT50Yl9zYiwgInJlaXNlcmZzLTEyMzIxIiwKKwkJCSAidG9vIG1hbnkgdGhyb3duIGJ1ZmZlcnMiKTsKIH0KIAogc3RhdGljIHZvaWQgZnJlZV90aHJvd24oc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIpCkBAIC0xNzc0LDggKzE3MjAsOCBAQAogCQlpZiAodGItPnRocm93bltpXSkgewogCQkJYmxvY2tuciA9IHRiLT50aHJvd25baV0tPmJfYmxvY2tucjsKIAkJCWlmIChidWZmZXJfZGlydHkodGItPnRocm93bltpXSkpCi0JCQkJcmVpc2VyZnNfd2FybmluZyh0Yi0+dGJfc2IsCi0JCQkJCQkgImZyZWVfdGhyb3duIGRlYWxzIHdpdGggZGlydHkgYnVmZmVyICVkIiwKKwkJCQlyZWlzZXJmc193YXJuaW5nKHRiLT50Yl9zYiwgInJlaXNlcmZzLTEyMzIyIiwKKwkJCQkJCSAiY2FsbGVkIHdpdGggZGlydHkgYnVmZmVyICVkIiwKIAkJCQkJCSBibG9ja25yKTsKIAkJCWJyZWxzZSh0Yi0+dGhyb3duW2ldKTsJLyogaW5jcmVtZW50ZWQgaW4gc3RvcmVfdGhyb3duICovCiAJCQlyZWlzZXJmc19mcmVlX2Jsb2NrKHRiLT50cmFuc2FjdGlvbl9oYW5kbGUsIE5VTEwsCkBAIC0xODczLDIwICsxODE5LDE5IEBACiAJZm9yIChpID0gMDsgaSA8PSBCX05SX0lURU1TKGJoKTsgaSsrLCBkYysrKSB7CiAJCWlmICghaXNfcmV1c2FibGUocywgZGNfYmxvY2tfbnVtYmVyKGRjKSwgMSkpIHsKIAkJCXByaW50X2N1cl90YihtZXMpOwotCQkJcmVpc2VyZnNfcGFuaWMocywKLQkJCQkgICAgICAgIlBBUC0xMjMzODogY2hlY2tfaW50ZXJuYWxfbm9kZTogaW52YWxpZCBjaGlsZCBwb2ludGVyICV5IGluICViIiwKKwkJCXJlaXNlcmZzX3BhbmljKHMsICJQQVAtMTIzMzgiLAorCQkJCSAgICAgICAiaW52YWxpZCBjaGlsZCBwb2ludGVyICV5IGluICViIiwKIAkJCQkgICAgICAgZGMsIGJoKTsKIAkJfQogCX0KIH0KIAotc3RhdGljIGludCBsb2NrZWRfb3Jfbm90X2luX3RyZWUoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgY2hhciAqd2hpY2gpCitzdGF0aWMgaW50IGxvY2tlZF9vcl9ub3RfaW5fdHJlZShzdHJ1Y3QgdHJlZV9iYWxhbmNlICp0YiwKKwkJCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsIGNoYXIgKndoaWNoKQogewogCWlmICgoIWJ1ZmZlcl9qb3VybmFsX3ByZXBhcmVkKGJoKSAmJiBidWZmZXJfbG9ja2VkKGJoKSkgfHwKIAkgICAgIUJfSVNfSU5fVFJFRShiaCkpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJCSAidnMtMTIzMzk6IGxvY2tlZF9vcl9ub3RfaW5fdHJlZTogJXMgKCViKSIsCi0JCQkJIHdoaWNoLCBiaCk7CisJCXJlaXNlcmZzX3dhcm5pbmcodGItPnRiX3NiLCAidnMtMTIzMzkiLCAiJXMgKCViKSIsIHdoaWNoLCBiaCk7CiAJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKQEAgLTE4OTcsMjYgKzE4NDIsMjggQEAKIAlpbnQgcmV0dmFsID0gMDsKIAogCWlmIChjdXJfdGIpIHsKLQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAidnMtMTIzMzU6IGNoZWNrX2JlZm9yZV9iYWxhbmNpbmc6ICIKLQkJCSAgICAgICAic3VzcGVjdCB0aGF0IHNjaGVkdWxlIG9jY3VycmVkIGJhc2VkIG9uIGN1cl90YiBub3QgYmVpbmcgbnVsbCBhdCB0aGlzIHBvaW50IGluIGNvZGUuICIKLQkJCSAgICAgICAiZG9fYmFsYW5jZSBjYW5ub3QgcHJvcGVybHkgaGFuZGxlIHNjaGVkdWxlIG9jY3VycmluZyB3aGlsZSBpdCBydW5zLiIpOworCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJ2cy0xMjMzNSIsICJzdXNwZWN0IHRoYXQgc2NoZWR1bGUgIgorCQkJICAgICAgICJvY2N1cnJlZCBiYXNlZCBvbiBjdXJfdGIgbm90IGJlaW5nIG51bGwgYXQgIgorCQkJICAgICAgICJ0aGlzIHBvaW50IGluIGNvZGUuIGRvX2JhbGFuY2UgY2Fubm90IHByb3Blcmx5ICIKKwkJCSAgICAgICAiaGFuZGxlIHNjaGVkdWxlIG9jY3VycmluZyB3aGlsZSBpdCBydW5zLiIpOwogCX0KIAogCS8qIGRvdWJsZSBjaGVjayB0aGF0IGJ1ZmZlcnMgdGhhdCB3ZSB3aWxsIG1vZGlmeSBhcmUgdW5sb2NrZWQuIChmaXhfbm9kZXMgc2hvdWxkIGFscmVhZHkgaGF2ZQogCSAgIHByZXBwZWQgYWxsIG9mIHRoZXNlIGZvciB1cykuICovCiAJaWYgKHRiLT5sbnVtWzBdKSB7Ci0JCXJldHZhbCB8PSBsb2NrZWRfb3Jfbm90X2luX3RyZWUodGItPkxbMF0sICJMWzBdIik7Ci0JCXJldHZhbCB8PSBsb2NrZWRfb3Jfbm90X2luX3RyZWUodGItPkZMWzBdLCAiRkxbMF0iKTsKLQkJcmV0dmFsIHw9IGxvY2tlZF9vcl9ub3RfaW5fdHJlZSh0Yi0+Q0ZMWzBdLCAiQ0ZMWzBdIik7CisJCXJldHZhbCB8PSBsb2NrZWRfb3Jfbm90X2luX3RyZWUodGIsIHRiLT5MWzBdLCAiTFswXSIpOworCQlyZXR2YWwgfD0gbG9ja2VkX29yX25vdF9pbl90cmVlKHRiLCB0Yi0+RkxbMF0sICJGTFswXSIpOworCQlyZXR2YWwgfD0gbG9ja2VkX29yX25vdF9pbl90cmVlKHRiLCB0Yi0+Q0ZMWzBdLCAiQ0ZMWzBdIik7CiAJCWNoZWNrX2xlYWYodGItPkxbMF0pOwogCX0KIAlpZiAodGItPnJudW1bMF0pIHsKLQkJcmV0dmFsIHw9IGxvY2tlZF9vcl9ub3RfaW5fdHJlZSh0Yi0+UlswXSwgIlJbMF0iKTsKLQkJcmV0dmFsIHw9IGxvY2tlZF9vcl9ub3RfaW5fdHJlZSh0Yi0+RlJbMF0sICJGUlswXSIpOwotCQlyZXR2YWwgfD0gbG9ja2VkX29yX25vdF9pbl90cmVlKHRiLT5DRlJbMF0sICJDRlJbMF0iKTsKKwkJcmV0dmFsIHw9IGxvY2tlZF9vcl9ub3RfaW5fdHJlZSh0YiwgdGItPlJbMF0sICJSWzBdIik7CisJCXJldHZhbCB8PSBsb2NrZWRfb3Jfbm90X2luX3RyZWUodGIsIHRiLT5GUlswXSwgIkZSWzBdIik7CisJCXJldHZhbCB8PSBsb2NrZWRfb3Jfbm90X2luX3RyZWUodGIsIHRiLT5DRlJbMF0sICJDRlJbMF0iKTsKIAkJY2hlY2tfbGVhZih0Yi0+UlswXSk7CiAJfQotCXJldHZhbCB8PSBsb2NrZWRfb3Jfbm90X2luX3RyZWUoUEFUSF9QTEFTVF9CVUZGRVIodGItPnRiX3BhdGgpLCAiU1swXSIpOworCXJldHZhbCB8PSBsb2NrZWRfb3Jfbm90X2luX3RyZWUodGIsIFBBVEhfUExBU1RfQlVGRkVSKHRiLT50Yl9wYXRoKSwKKwkJCQkJIlNbMF0iKTsKIAljaGVja19sZWFmKFBBVEhfUExBU1RfQlVGRkVSKHRiLT50Yl9wYXRoKSk7CiAKIAlyZXR1cm4gcmV0dmFsOwpAQCAtMTkzMCw4ICsxODc3LDggQEAKIAkJICAgIGRjX3NpemUoQl9OX0NISUxECiAJCQkgICAgKHRiLT5GTFswXSwgZ2V0X2xlZnRfbmVpZ2hib3JfcG9zaXRpb24odGIsIDApKSkpIHsKIAkJCXByaW50X2N1cl90YigiMTIyMjEiKTsKLQkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwKLQkJCQkgICAgICAgIlBBUC0xMjM1NTogY2hlY2tfYWZ0ZXJfYmFsYW5jZV9sZWFmOiBzaGlmdCB0byBsZWZ0IHdhcyBpbmNvcnJlY3QiKTsKKwkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgIlBBUC0xMjM1NSIsCisJCQkJICAgICAgICJzaGlmdCB0byBsZWZ0IHdhcyBpbmNvcnJlY3QiKTsKIAkJfQogCX0KIAlpZiAodGItPnJudW1bMF0pIHsKQEAgLTE5NDAsOCArMTg4Nyw4IEBACiAJCSAgICBkY19zaXplKEJfTl9DSElMRAogCQkJICAgICh0Yi0+RlJbMF0sIGdldF9yaWdodF9uZWlnaGJvcl9wb3NpdGlvbih0YiwgMCkpKSkgewogCQkJcHJpbnRfY3VyX3RiKCIxMjIyMiIpOwotCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLAotCQkJCSAgICAgICAiUEFQLTEyMzYwOiBjaGVja19hZnRlcl9iYWxhbmNlX2xlYWY6IHNoaWZ0IHRvIHJpZ2h0IHdhcyBpbmNvcnJlY3QiKTsKKwkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgIlBBUC0xMjM2MCIsCisJCQkJICAgICAgICJzaGlmdCB0byByaWdodCB3YXMgaW5jb3JyZWN0Iik7CiAJCX0KIAl9CiAJaWYgKFBBVEhfSF9QQlVGRkVSKHRiLT50Yl9wYXRoLCAxKSAmJgpAQCAtMTk1NSw3ICsxOTAyLDcgQEAKIAkJCQkJICAgICAgIFBBVEhfSF9QT1NJVElPTih0Yi0+dGJfcGF0aCwKIAkJCQkJCQkgICAgICAgMSkpKSk7CiAJCXByaW50X2N1cl90YigiMTIyMjMiKTsKLQkJcmVpc2VyZnNfd2FybmluZyh0Yi0+dGJfc2IsCisJCXJlaXNlcmZzX3dhcm5pbmcodGItPnRiX3NiLCAicmVpc2VyZnMtMTIzNjMiLAogCQkJCSAiQl9GUkVFX1NQQUNFIChQQVRIX0hfUEJVRkZFUih0Yi0+dGJfcGF0aCwwKSkgPSAlZDsgIgogCQkJCSAiTUFYX0NISUxEX1NJWkUgKCVkKSAtIGRjX3NpemUoICV5LCAlZCApIFslZF0gPSAlZCIsCiAJCQkJIGxlZnQsCkBAIC0xOTY2LDggKzE5MTMsNyBAQAogCQkJCQkgKFBBVEhfSF9QQlVGRkVSKHRiLT50Yl9wYXRoLCAxKSwKIAkJCQkJICBQQVRIX0hfUE9TSVRJT04odGItPnRiX3BhdGgsIDEpKSksCiAJCQkJIHJpZ2h0KTsKLQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLAotCQkJICAgICAgICJQQVAtMTIzNjU6IGNoZWNrX2FmdGVyX2JhbGFuY2VfbGVhZjogUyBpcyBpbmNvcnJlY3QiKTsKKwkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAiUEFQLTEyMzY1IiwgIlMgaXMgaW5jb3JyZWN0Iik7CiAJfQogfQogCkBAIC0yMDM3LDcgKzE5ODMsNyBAQAogCS8qIHN0b3JlX3ByaW50X3RiICh0Yik7ICovCiAKIAkvKiBkbyBub3QgZGVsZXRlLCBqdXN0IGNvbW1lbnQgaXQgb3V0ICovCi0vKiAgICBwcmludF90YihmbGFnLCBQQVRIX0xBU1RfUE9TSVRJT04odGItPnRiX3BhdGgpLCB0Yi0+dGJfcGF0aC0+cG9zX2luX2l0ZW0sIHRiLCAKKy8qICAgIHByaW50X3RiKGZsYWcsIFBBVEhfTEFTVF9QT1NJVElPTih0Yi0+dGJfcGF0aCksIHRiLT50Yl9wYXRoLT5wb3NfaW5faXRlbSwgdGIsCiAJICAgICAiY2hlY2siKTsqLwogCVJGQUxTRShjaGVja19iZWZvcmVfYmFsYW5jaW5nKHRiKSwgIlBBUC0xMjM0MDogbG9ja2VkIGJ1ZmZlcnMgaW4gVEIiKTsKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKQEAgLTIxMDIsMTQgKzIwNDgsMTMgQEAKIAl0Yi0+bmVlZF9iYWxhbmNlX2RpcnR5ID0gMDsKIAogCWlmIChGSUxFU1lTVEVNX0NIQU5HRURfVEIodGIpKSB7Ci0JCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwKLQkJCSAgICAgICAiY2xtLTYwMDA6IGRvX2JhbGFuY2UsIGZzIGdlbmVyYXRpb24gaGFzIGNoYW5nZWRcbiIpOworCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJjbG0tNjAwMCIsICJmcyBnZW5lcmF0aW9uIGhhcyAiCisJCQkgICAgICAgImNoYW5nZWQiKTsKIAl9CiAJLyogaWYgd2UgaGF2ZSBubyByZWFsIHdvcmsgdG8gZG8gICovCiAJaWYgKCF0Yi0+aW5zZXJ0X3NpemVbMF0pIHsKLQkJcmVpc2VyZnNfd2FybmluZyh0Yi0+dGJfc2IsCi0JCQkJICJQQVAtMTIzNTA6IGRvX2JhbGFuY2U6IGluc2VydF9zaXplID09IDAsIG1vZGUgPT0gJWMiLAotCQkJCSBmbGFnKTsKKwkJcmVpc2VyZnNfd2FybmluZyh0Yi0+dGJfc2IsICJQQVAtMTIzNTAiLAorCQkJCSAiaW5zZXJ0X3NpemUgPT0gMCwgbW9kZSA9PSAlYyIsIGZsYWcpOwogCQl1bmZpeF9ub2Rlcyh0Yik7CiAJCXJldHVybjsKIAl9CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9maWxlLmMgYi9mcy9yZWlzZXJmcy9maWxlLmMKaW5kZXggMzM0MDg0MS4uOWY0MzY2NiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvZmlsZS5jCisrKyBiL2ZzL3JlaXNlcmZzL2ZpbGUuYwpAQCAtMjAsMTQgKzIwLDE0IEBACiAqKiBpbnNlcnRpb24vYmFsYW5jaW5nLCBmb3IgZmlsZXMgdGhhdCBhcmUgd3JpdHRlbiBpbiBvbmUgd3JpdGUuCiAqKiBJdCBhdm9pZHMgdW5uZWNlc3NhcnkgdGFpbCBwYWNraW5ncyAoYmFsYW5jZXMpIGZvciBmaWxlcyB0aGF0IGFyZSB3cml0dGVuIGluCiAqKiBtdWx0aXBsZSB3cml0ZXMgYW5kIGFyZSBzbWFsbCBlbm91Z2ggdG8gaGF2ZSB0YWlscy4KLSoqIAorKioKICoqIGZpbGVfcmVsZWFzZSBpcyBjYWxsZWQgYnkgdGhlIFZGUyBsYXllciB3aGVuIHRoZSBmaWxlIGlzIGNsb3NlZC4gIElmCiAqKiB0aGlzIGlzIHRoZSBsYXN0IG9wZW4gZmlsZSBkZXNjcmlwdG9yLCBhbmQgdGhlIGZpbGUKICoqIHNtYWxsIGVub3VnaCB0byBoYXZlIGEgdGFpbCwgYW5kIHRoZSB0YWlsIGlzIGN1cnJlbnRseSBpbiBhbgogKiogdW5mb3JtYXR0ZWQgbm9kZSwgdGhlIHRhaWwgaXMgY29udmVydGVkIGJhY2sgaW50byBhIGRpcmVjdCBpdGVtLgotKiogCisqKgogKiogV2UgdXNlIHJlaXNlcmZzX3RydW5jYXRlX2ZpbGUgdG8gcGFjayB0aGUgdGFpbCwgc2luY2UgaXQgYWxyZWFkeSBoYXMKLSoqIGFsbCB0aGUgY29uZGl0aW9ucyBjb2RlZC4gIAorKiogYWxsIHRoZSBjb25kaXRpb25zIGNvZGVkLgogKi8KIHN0YXRpYyBpbnQgcmVpc2VyZnNfZmlsZV9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKQogewpAQCAtNzYsNyArNzYsNyBAQAogCQkJICogYW5kIGxldCB0aGUgYWRtaW4ga25vdyB3aGF0IGlzIGdvaW5nIG9uLgogCQkJICovCiAJCQlpZ3JhYihpbm9kZSk7Ci0JCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAorCQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgImNsbS05MDAxIiwKIAkJCQkJICJwaW5uaW5nIGlub2RlICVsdSBiZWNhdXNlIHRoZSAiCiAJCQkJCSAicHJlYWxsb2NhdGlvbiBjYW4ndCBiZSBmcmVlZCIsCiAJCQkJCSBpbm9kZS0+aV9pbm8pOwpAQCAtMTM0LDIzICsxMzQsMjMgQEAKICAqIGJlIHJlbW92ZWQuLi4KICAqLwogCi1zdGF0aWMgaW50IHJlaXNlcmZzX3N5bmNfZmlsZShzdHJ1Y3QgZmlsZSAqcF9zX2ZpbHAsCi0JCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpwX3NfZGVudHJ5LCBpbnQgZGF0YXN5bmMpCitzdGF0aWMgaW50IHJlaXNlcmZzX3N5bmNfZmlsZShzdHJ1Y3QgZmlsZSAqZmlscCwKKwkJCSAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IGRhdGFzeW5jKQogewotCXN0cnVjdCBpbm9kZSAqcF9zX2lub2RlID0gcF9zX2RlbnRyeS0+ZF9pbm9kZTsKLQlpbnQgbl9lcnI7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwlpbnQgZXJyOwogCWludCBiYXJyaWVyX2RvbmU7CiAKLQlCVUdfT04oIVNfSVNSRUcocF9zX2lub2RlLT5pX21vZGUpKTsKLQluX2VyciA9IHN5bmNfbWFwcGluZ19idWZmZXJzKHBfc19pbm9kZS0+aV9tYXBwaW5nKTsKLQlyZWlzZXJmc193cml0ZV9sb2NrKHBfc19pbm9kZS0+aV9zYik7Ci0JYmFycmllcl9kb25lID0gcmVpc2VyZnNfY29tbWl0X2Zvcl9pbm9kZShwX3NfaW5vZGUpOwotCXJlaXNlcmZzX3dyaXRlX3VubG9jayhwX3NfaW5vZGUtPmlfc2IpOwotCWlmIChiYXJyaWVyX2RvbmUgIT0gMSAmJiByZWlzZXJmc19iYXJyaWVyX2ZsdXNoKHBfc19pbm9kZS0+aV9zYikpCi0JCWJsa2Rldl9pc3N1ZV9mbHVzaChwX3NfaW5vZGUtPmlfc2ItPnNfYmRldiwgTlVMTCk7CisJQlVHX09OKCFTX0lTUkVHKGlub2RlLT5pX21vZGUpKTsKKwllcnIgPSBzeW5jX21hcHBpbmdfYnVmZmVycyhpbm9kZS0+aV9tYXBwaW5nKTsKKwlyZWlzZXJmc193cml0ZV9sb2NrKGlub2RlLT5pX3NiKTsKKwliYXJyaWVyX2RvbmUgPSByZWlzZXJmc19jb21taXRfZm9yX2lub2RlKGlub2RlKTsKKwlyZWlzZXJmc193cml0ZV91bmxvY2soaW5vZGUtPmlfc2IpOworCWlmIChiYXJyaWVyX2RvbmUgIT0gMSAmJiByZWlzZXJmc19iYXJyaWVyX2ZsdXNoKGlub2RlLT5pX3NiKSkKKwkJYmxrZGV2X2lzc3VlX2ZsdXNoKGlub2RlLT5pX3NiLT5zX2JkZXYsIE5VTEwpOwogCWlmIChiYXJyaWVyX2RvbmUgPCAwKQogCQlyZXR1cm4gYmFycmllcl9kb25lOwotCXJldHVybiAobl9lcnIgPCAwKSA/IC1FSU8gOiAwOworCXJldHVybiAoZXJyIDwgMCkgPyAtRUlPIDogMDsKIH0KIAogLyogdGFrZW4gZnMvYnVmZmVyLmM6X19ibG9ja19jb21taXRfd3JpdGUgKi8KQEAgLTIyMyw3ICsyMjMsNyBAQAogfQogCiAvKiBXcml0ZSBAY291bnQgYnl0ZXMgYXQgcG9zaXRpb24gQHBwb3MgaW4gYSBmaWxlIGluZGljYXRlZCBieSBAZmlsZQotICAgZnJvbSB0aGUgYnVmZmVyIEBidWYuICAKKyAgIGZyb20gdGhlIGJ1ZmZlciBAYnVmLgogCiAgICBnZW5lcmljX2ZpbGVfd3JpdGUoKSBpcyBvbmx5IGFwcHJvcHJpYXRlIGZvciBmaWxlc3lzdGVtcyB0aGF0IGFyZSBub3Qgc2Vla2luZyB0byBvcHRpbWl6ZSBwZXJmb3JtYW5jZSBhbmQgd2FudAogICAgc29tZXRoaW5nIHNpbXBsZSB0aGF0IHdvcmtzLiAgSXQgaXMgbm90IGZvciBzZXJpb3VzIHVzZSBieSBnZW5lcmFsIHB1cnBvc2UgZmlsZXN5c3RlbXMsIGV4Y2VwdGluZyB0aGUgb25lIHRoYXQgaXQgd2FzCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9maXhfbm9kZS5jIGIvZnMvcmVpc2VyZnMvZml4X25vZGUuYwppbmRleCAwN2QwNWUwLi41ZTVhNGU2IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9maXhfbm9kZS5jCisrKyBiL2ZzL3JlaXNlcmZzL2ZpeF9ub2RlLmMKQEAgLTMwLDggKzMwLDggQEAKICAqKiBnZXRfZGlyZWN0X3BhcmVudAogICoqIGdldF9uZWlnaGJvcnMKICAqKiBmaXhfbm9kZXMKLSAqKiAKLSAqKiAKKyAqKgorICoqCiAgKiovCiAKICNpbmNsdWRlIDxsaW51eC90aW1lLmg+CkBAIC0xMzUsOCArMTM1LDcgQEAKIAkJdm4tPnZuX2ZyZWVfcHRyICs9CiAJCSAgICBvcF9jcmVhdGVfdmkodm4sIHZpLCBpc19hZmZlY3RlZCwgdGItPmluc2VydF9zaXplWzBdKTsKIAkJaWYgKHRiLT52bl9idWYgKyB0Yi0+dm5fYnVmX3NpemUgPCB2bi0+dm5fZnJlZV9wdHIpCi0JCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsCi0JCQkJICAgICAgICJ2cy04MDMwOiBjcmVhdGVfdmlydHVhbF9ub2RlOiAiCisJCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJ2cy04MDMwIiwKIAkJCQkgICAgICAgInZpcnR1YWwgbm9kZSBzcGFjZSBjb25zdW1lZCIpOwogCiAJCWlmICghaXNfYWZmZWN0ZWQpCkBAIC0xODYsOCArMTg1LDkgQEAKIAkJCSAgICAgJiYgSV9FTlRSWV9DT1VOVChCX05fUElURU1fSEVBRChTaCwgMCkpID09IDEpKSB7CiAJCQkJLyogbm9kZSBjb250YWlucyBtb3JlIHRoYW4gMSBpdGVtLCBvciBpdGVtIGlzIG5vdCBkaXJlY3RvcnkgaXRlbSwgb3IgdGhpcyBpdGVtIGNvbnRhaW5zIG1vcmUgdGhhbiAxIGVudHJ5ICovCiAJCQkJcHJpbnRfYmxvY2soU2gsIDAsIC0xLCAtMSk7Ci0JCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLAotCQkJCQkgICAgICAgInZzLTgwNDU6IGNyZWF0ZV92aXJ0dWFsX25vZGU6IHJka2V5ICVrLCBhZmZlY3RlZCBpdGVtPT0lZCAobW9kZT09JWMpIE11c3QgYmUgJWMiLAorCQkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgInZzLTgwNDUiLAorCQkJCQkgICAgICAgInJka2V5ICVrLCBhZmZlY3RlZCBpdGVtPT0lZCAiCisJCQkJCSAgICAgICAiKG1vZGU9PSVjKSBNdXN0IGJlICVjIiwKIAkJCQkJICAgICAgIGtleSwgdm4tPnZuX2FmZmVjdGVkX2l0ZW1fbnVtLAogCQkJCQkgICAgICAgdm4tPnZuX21vZGUsIE1fREVMRVRFKTsKIAkJCX0KQEAgLTM3Nyw5ICszNzcsOSBAQAogCWludCBuZWVkZWRfbm9kZXM7CiAJaW50IHN0YXJ0X2l0ZW0sCQkvKiBwb3NpdGlvbiBvZiBpdGVtIHdlIHN0YXJ0IGZpbGxpbmcgbm9kZSBmcm9tICovCiAJIGVuZF9pdGVtLAkJLyogcG9zaXRpb24gb2YgaXRlbSB3ZSBmaW5pc2ggZmlsbGluZyBub2RlIGJ5ICovCi0JIHN0YXJ0X2J5dGVzLAkJLyogbnVtYmVyIG9mIGZpcnN0IGJ5dGVzIChlbnRyaWVzIGZvciBkaXJlY3RvcnkpIG9mIHN0YXJ0X2l0ZW0tdGggaXRlbSAKKwkgc3RhcnRfYnl0ZXMsCQkvKiBudW1iZXIgb2YgZmlyc3QgYnl0ZXMgKGVudHJpZXMgZm9yIGRpcmVjdG9yeSkgb2Ygc3RhcnRfaXRlbS10aCBpdGVtCiAJCQkJICAgd2UgZG8gbm90IGluY2x1ZGUgaW50byBub2RlIHRoYXQgaXMgYmVpbmcgZmlsbGVkICovCi0JIGVuZF9ieXRlczsJCS8qIG51bWJlciBvZiBsYXN0IGJ5dGVzIChlbnRyaWVzIGZvciBkaXJlY3RvcnkpIG9mIGVuZF9pdGVtLXRoIGl0ZW0gCisJIGVuZF9ieXRlczsJCS8qIG51bWJlciBvZiBsYXN0IGJ5dGVzIChlbnRyaWVzIGZvciBkaXJlY3RvcnkpIG9mIGVuZF9pdGVtLXRoIGl0ZW0KIAkJCQkgICB3ZSBkbyBub2RlIGluY2x1ZGUgaW50byBub2RlIHRoYXQgaXMgYmVpbmcgZmlsbGVkICovCiAJaW50IHNwbGl0X2l0ZW1fcG9zaXRpb25zWzJdOwkvKiB0aGVzZSBhcmUgcG9zaXRpb25zIGluIHZpcnR1YWwgaXRlbSBvZgogCQkJCQkgICBpdGVtcywgdGhhdCBhcmUgc3BsaXQgYmV0d2VlbiBTWzBdIGFuZApAQCAtNDk2LDggKzQ5Niw4IEBACiAJCXNudW0wMTJbbmVlZGVkX25vZGVzIC0gMSArIDNdID0gdW5pdHM7CiAKIAkJaWYgKG5lZWRlZF9ub2RlcyA+IDIpCi0JCQlyZWlzZXJmc193YXJuaW5nKHRiLT50Yl9zYiwgInZzLTgxMTE6IGdldF9udW1fdmVyOiAiCi0JCQkJCSAic3BsaXRfaXRlbV9wb3NpdGlvbiBpcyBvdXQgb2YgYm91bmRhcnkiKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcodGItPnRiX3NiLCAidnMtODExMSIsCisJCQkJCSAic3BsaXRfaXRlbV9wb3NpdGlvbiBpcyBvdXQgb2YgcmFuZ2UiKTsKIAkJc251bTAxMltuZWVkZWRfbm9kZXMgLSAxXSsrOwogCQlzcGxpdF9pdGVtX3Bvc2l0aW9uc1tuZWVkZWRfbm9kZXMgLSAxXSA9IGk7CiAJCW5lZWRlZF9ub2RlcysrOwpAQCAtNTMzLDggKzUzMyw4IEBACiAKIAkJaWYgKHZuLT52bl92aVtzcGxpdF9pdGVtX251bV0udmlfaW5kZXggIT0gVFlQRV9ESVJFTlRSWSAmJgogCQkgICAgdm4tPnZuX3ZpW3NwbGl0X2l0ZW1fbnVtXS52aV9pbmRleCAhPSBUWVBFX0lORElSRUNUKQotCQkJcmVpc2VyZnNfd2FybmluZyh0Yi0+dGJfc2IsICJ2cy04MTE1OiBnZXRfbnVtX3Zlcjogbm90ICIKLQkJCQkJICJkaXJlY3Rvcnkgb3IgaW5kaXJlY3QgaXRlbSIpOworCQkJcmVpc2VyZnNfd2FybmluZyh0Yi0+dGJfc2IsICJ2cy04MTE1IiwKKwkJCQkJICJub3QgZGlyZWN0b3J5IG9yIGluZGlyZWN0IGl0ZW0iKTsKIAl9CiAKIAkvKiBub3cgd2Uga25vdyBTMmJ5dGVzLCBjYWxjdWxhdGUgUzFieXRlcyAqLwpAQCAtNTY5LDcgKzU2OSw3IEBACiAKIC8qIFNldCBwYXJhbWV0ZXJzIGZvciBiYWxhbmNpbmcuCiAgKiBQZXJmb3JtcyB3cml0ZSBvZiByZXN1bHRzIG9mIGFuYWx5c2lzIG9mIGJhbGFuY2luZyBpbnRvIHN0cnVjdHVyZSB0YiwKLSAqIHdoZXJlIGl0IHdpbGwgbGF0ZXIgYmUgdXNlZCBieSB0aGUgZnVuY3Rpb25zIHRoYXQgYWN0dWFsbHkgZG8gdGhlIGJhbGFuY2luZy4gCisgKiB3aGVyZSBpdCB3aWxsIGxhdGVyIGJlIHVzZWQgYnkgdGhlIGZ1bmN0aW9ucyB0aGF0IGFjdHVhbGx5IGRvIHRoZSBiYWxhbmNpbmcuCiAgKiBQYXJhbWV0ZXJzOgogICoJdGIJdHJlZV9iYWxhbmNlIHN0cnVjdHVyZTsKICAqCWgJY3VycmVudCBsZXZlbCBvZiB0aGUgbm9kZTsKQEAgLTc0OSwyNSArNzQ5LDI2IEBACiAJCSAgLTEsIC0xKTtcCiB9CiAKLXN0YXRpYyB2b2lkIGZyZWVfYnVmZmVyc19pbl90YihzdHJ1Y3QgdHJlZV9iYWxhbmNlICpwX3NfdGIpCitzdGF0aWMgdm9pZCBmcmVlX2J1ZmZlcnNfaW5fdGIoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIpCiB7Ci0JaW50IG5fY291bnRlcjsKKwlpbnQgaTsKIAotCWRlY3JlbWVudF9jb3VudGVyc19pbl9wYXRoKHBfc190Yi0+dGJfcGF0aCk7CisJcGF0aHJlbHNlKHRiLT50Yl9wYXRoKTsKIAotCWZvciAobl9jb3VudGVyID0gMDsgbl9jb3VudGVyIDwgTUFYX0hFSUdIVDsgbl9jb3VudGVyKyspIHsKLQkJZGVjcmVtZW50X2Jjb3VudChwX3NfdGItPkxbbl9jb3VudGVyXSk7Ci0JCXBfc190Yi0+TFtuX2NvdW50ZXJdID0gTlVMTDsKLQkJZGVjcmVtZW50X2Jjb3VudChwX3NfdGItPlJbbl9jb3VudGVyXSk7Ci0JCXBfc190Yi0+UltuX2NvdW50ZXJdID0gTlVMTDsKLQkJZGVjcmVtZW50X2Jjb3VudChwX3NfdGItPkZMW25fY291bnRlcl0pOwotCQlwX3NfdGItPkZMW25fY291bnRlcl0gPSBOVUxMOwotCQlkZWNyZW1lbnRfYmNvdW50KHBfc190Yi0+RlJbbl9jb3VudGVyXSk7Ci0JCXBfc190Yi0+RlJbbl9jb3VudGVyXSA9IE5VTEw7Ci0JCWRlY3JlbWVudF9iY291bnQocF9zX3RiLT5DRkxbbl9jb3VudGVyXSk7Ci0JCXBfc190Yi0+Q0ZMW25fY291bnRlcl0gPSBOVUxMOwotCQlkZWNyZW1lbnRfYmNvdW50KHBfc190Yi0+Q0ZSW25fY291bnRlcl0pOwotCQlwX3NfdGItPkNGUltuX2NvdW50ZXJdID0gTlVMTDsKKwlmb3IgKGkgPSAwOyBpIDwgTUFYX0hFSUdIVDsgaSsrKSB7CisJCWJyZWxzZSh0Yi0+TFtpXSk7CisJCWJyZWxzZSh0Yi0+UltpXSk7CisJCWJyZWxzZSh0Yi0+RkxbaV0pOworCQlicmVsc2UodGItPkZSW2ldKTsKKwkJYnJlbHNlKHRiLT5DRkxbaV0pOworCQlicmVsc2UodGItPkNGUltpXSk7CisKKwkJdGItPkxbaV0gPSBOVUxMOworCQl0Yi0+UltpXSA9IE5VTEw7CisJCXRiLT5GTFtpXSA9IE5VTEw7CisJCXRiLT5GUltpXSA9IE5VTEw7CisJCXRiLT5DRkxbaV0gPSBOVUxMOworCQl0Yi0+Q0ZSW2ldID0gTlVMTDsKIAl9CiB9CiAKQEAgLTc3NywxNCArNzc4LDE0IEBACiAgKgkgICAgICAgIE5PX0RJU0tfU1BBQ0UgLSBubyBkaXNrIHNwYWNlLgogICovCiAvKiBUaGUgZnVuY3Rpb24gaXMgTk9UIFNDSEVEVUxFLVNBRkUhICovCi1zdGF0aWMgaW50IGdldF9lbXB0eV9ub2RlcyhzdHJ1Y3QgdHJlZV9iYWxhbmNlICpwX3NfdGIsIGludCBuX2gpCitzdGF0aWMgaW50IGdldF9lbXB0eV9ub2RlcyhzdHJ1Y3QgdHJlZV9iYWxhbmNlICp0YiwgaW50IGgpCiB7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfbmV3X2JoLAotCSAgICAqcF9zX1NoID0gUEFUSF9IX1BCVUZGRVIocF9zX3RiLT50Yl9wYXRoLCBuX2gpOwotCWJfYmxvY2tucl90ICpwX25fYmxvY2tuciwgYV9uX2Jsb2NrbnJzW01BWF9BTU9VTlRfTkVFREVEXSA9IHsgMCwgfTsKLQlpbnQgbl9jb3VudGVyLCBuX251bWJlcl9vZl9mcmVlYmxrLCBuX2Ftb3VudF9uZWVkZWQsCS8qIG51bWJlciBvZiBuZWVkZWQgZW1wdHkgYmxvY2tzICovCi0JIG5fcmV0dmFsID0gQ0FSUllfT047Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IgPSBwX3NfdGItPnRiX3NiOworCXN0cnVjdCBidWZmZXJfaGVhZCAqbmV3X2JoLAorCSAgICAqU2ggPSBQQVRIX0hfUEJVRkZFUih0Yi0+dGJfcGF0aCwgaCk7CisJYl9ibG9ja25yX3QgKmJsb2NrbnIsIGJsb2NrbnJzW01BWF9BTU9VTlRfTkVFREVEXSA9IHsgMCwgfTsKKwlpbnQgY291bnRlciwgbnVtYmVyX29mX2ZyZWVibGssIGFtb3VudF9uZWVkZWQsCS8qIG51bWJlciBvZiBuZWVkZWQgZW1wdHkgYmxvY2tzICovCisJIHJldHZhbCA9IENBUlJZX09OOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSB0Yi0+dGJfc2I7CiAKIAkvKiBudW1iZXJfb2ZfZnJlZWJsayBpcyB0aGUgbnVtYmVyIG9mIGVtcHR5IGJsb2NrcyB3aGljaCBoYXZlIGJlZW4KIAkgICBhY3F1aXJlZCBmb3IgdXNlIGJ5IHRoZSBiYWxhbmNpbmcgYWxnb3JpdGhtIG1pbnVzIHRoZSBudW1iZXIgb2YKQEAgLTc5Miw3ICs3OTMsNyBAQAogCSAgIG51bWJlcl9vZl9mcmVlYmxrID0gdGItPmN1cl9ibGtudW0gY2FuIGJlIG5vbi16ZXJvIGlmIGEgc2NoZWR1bGUgb2NjdXJzCiAJICAgYWZ0ZXIgZW1wdHkgYmxvY2tzIGFyZSBhY3F1aXJlZCwgYW5kIHRoZSBiYWxhbmNpbmcgYW5hbHlzaXMgaXMKIAkgICB0aGVuIHJlc3RhcnRlZCwgYW1vdW50X25lZWRlZCBpcyB0aGUgbnVtYmVyIG5lZWRlZCBieSB0aGlzIGxldmVsCi0JICAgKG5faCkgb2YgdGhlIGJhbGFuY2luZyBhbmFseXNpcy4KKwkgICAoaCkgb2YgdGhlIGJhbGFuY2luZyBhbmFseXNpcy4KIAogCSAgIE5vdGUgdGhhdCBmb3Igc3lzdGVtcyB3aXRoIG1hbnkgcHJvY2Vzc2VzIHdyaXRpbmcsIGl0IHdvdWxkIGJlCiAJICAgbW9yZSBsYXlvdXQgb3B0aW1hbCB0byBjYWxjdWxhdGUgdGhlIHRvdGFsIG51bWJlciBuZWVkZWQgYnkgYWxsCkBAIC04MDAsNTQgKzgwMSw1NCBAQAogCiAJLyogSW5pdGlhdGUgbnVtYmVyX29mX2ZyZWVibGsgdG8gdGhlIGFtb3VudCBhY3F1aXJlZCBwcmlvciB0byB0aGUgcmVzdGFydCBvZgogCSAgIHRoZSBhbmFseXNpcyBvciAwIGlmIG5vdCByZXN0YXJ0ZWQsIHRoZW4gc3VidHJhY3QgdGhlIGFtb3VudCBuZWVkZWQKLQkgICBieSBhbGwgb2YgdGhlIGxldmVscyBvZiB0aGUgdHJlZSBiZWxvdyBuX2guICovCi0JLyogYmxrbnVtIGluY2x1ZGVzIFNbbl9oXSwgc28gd2Ugc3VidHJhY3QgMSBpbiB0aGlzIGNhbGN1bGF0aW9uICovCi0JZm9yIChuX2NvdW50ZXIgPSAwLCBuX251bWJlcl9vZl9mcmVlYmxrID0gcF9zX3RiLT5jdXJfYmxrbnVtOwotCSAgICAgbl9jb3VudGVyIDwgbl9oOyBuX2NvdW50ZXIrKykKLQkJbl9udW1iZXJfb2ZfZnJlZWJsayAtPQotCQkgICAgKHBfc190Yi0+YmxrbnVtW25fY291bnRlcl0pID8gKHBfc190Yi0+YmxrbnVtW25fY291bnRlcl0gLQorCSAgIGJ5IGFsbCBvZiB0aGUgbGV2ZWxzIG9mIHRoZSB0cmVlIGJlbG93IGguICovCisJLyogYmxrbnVtIGluY2x1ZGVzIFNbaF0sIHNvIHdlIHN1YnRyYWN0IDEgaW4gdGhpcyBjYWxjdWxhdGlvbiAqLworCWZvciAoY291bnRlciA9IDAsIG51bWJlcl9vZl9mcmVlYmxrID0gdGItPmN1cl9ibGtudW07CisJICAgICBjb3VudGVyIDwgaDsgY291bnRlcisrKQorCQludW1iZXJfb2ZfZnJlZWJsayAtPQorCQkgICAgKHRiLT5ibGtudW1bY291bnRlcl0pID8gKHRiLT5ibGtudW1bY291bnRlcl0gLQogCQkJCQkJICAgMSkgOiAwOwogCiAJLyogQWxsb2NhdGUgbWlzc2luZyBlbXB0eSBibG9ja3MuICovCi0JLyogaWYgcF9zX1NoID09IDAgIHRoZW4gd2UgYXJlIGdldHRpbmcgYSBuZXcgcm9vdCAqLwotCW5fYW1vdW50X25lZWRlZCA9IChwX3NfU2gpID8gKHBfc190Yi0+YmxrbnVtW25faF0gLSAxKSA6IDE7CisJLyogaWYgU2ggPT0gMCAgdGhlbiB3ZSBhcmUgZ2V0dGluZyBhIG5ldyByb290ICovCisJYW1vdW50X25lZWRlZCA9IChTaCkgPyAodGItPmJsa251bVtoXSAtIDEpIDogMTsKIAkvKiAgQW1vdW50X25lZWRlZCA9IHRoZSBhbW91bnQgdGhhdCB3ZSBuZWVkIG1vcmUgdGhhbiB0aGUgYW1vdW50IHRoYXQgd2UgaGF2ZS4gKi8KLQlpZiAobl9hbW91bnRfbmVlZGVkID4gbl9udW1iZXJfb2ZfZnJlZWJsaykKLQkJbl9hbW91bnRfbmVlZGVkIC09IG5fbnVtYmVyX29mX2ZyZWVibGs7CisJaWYgKGFtb3VudF9uZWVkZWQgPiBudW1iZXJfb2ZfZnJlZWJsaykKKwkJYW1vdW50X25lZWRlZCAtPSBudW1iZXJfb2ZfZnJlZWJsazsKIAllbHNlCQkJLyogSWYgd2UgaGF2ZSBlbm91Z2ggYWxyZWFkeSB0aGVuIHRoZXJlIGlzIG5vdGhpbmcgdG8gZG8uICovCiAJCXJldHVybiBDQVJSWV9PTjsKIAogCS8qIE5vIG5lZWQgdG8gY2hlY2sgcXVvdGEgLSBpcyBub3QgYWxsb2NhdGVkIGZvciBibG9ja3MgdXNlZCBmb3IgZm9ybWF0dGVkIG5vZGVzICovCi0JaWYgKHJlaXNlcmZzX25ld19mb3JtX2Jsb2NrbnJzKHBfc190YiwgYV9uX2Jsb2NrbnJzLAotCQkJCSAgICAgICBuX2Ftb3VudF9uZWVkZWQpID09IE5PX0RJU0tfU1BBQ0UpCisJaWYgKHJlaXNlcmZzX25ld19mb3JtX2Jsb2NrbnJzKHRiLCBibG9ja25ycywKKwkJCQkgICAgICAgYW1vdW50X25lZWRlZCkgPT0gTk9fRElTS19TUEFDRSkKIAkJcmV0dXJuIE5PX0RJU0tfU1BBQ0U7CiAKIAkvKiBmb3IgZWFjaCBibG9ja251bWJlciB3ZSBqdXN0IGdvdCwgZ2V0IGEgYnVmZmVyIGFuZCBzdGljayBpdCBvbiBGRUIgKi8KLQlmb3IgKHBfbl9ibG9ja25yID0gYV9uX2Jsb2NrbnJzLCBuX2NvdW50ZXIgPSAwOwotCSAgICAgbl9jb3VudGVyIDwgbl9hbW91bnRfbmVlZGVkOyBwX25fYmxvY2tucisrLCBuX2NvdW50ZXIrKykgeworCWZvciAoYmxvY2tuciA9IGJsb2NrbnJzLCBjb3VudGVyID0gMDsKKwkgICAgIGNvdW50ZXIgPCBhbW91bnRfbmVlZGVkOyBibG9ja25yKyssIGNvdW50ZXIrKykgewogCi0JCVJGQUxTRSghKnBfbl9ibG9ja25yLAorCQlSRkFMU0UoISpibG9ja25yLAogCQkgICAgICAgIlBBUC04MTM1OiByZWlzZXJmc19uZXdfYmxvY2tucnMgZmFpbGVkIHdoZW4gZ290IG5ldyBibG9ja3MiKTsKIAotCQlwX3NfbmV3X2JoID0gc2JfZ2V0YmxrKHBfc19zYiwgKnBfbl9ibG9ja25yKTsKLQkJUkZBTFNFKGJ1ZmZlcl9kaXJ0eShwX3NfbmV3X2JoKSB8fAotCQkgICAgICAgYnVmZmVyX2pvdXJuYWxlZChwX3NfbmV3X2JoKSB8fAotCQkgICAgICAgYnVmZmVyX2pvdXJuYWxfZGlydHkocF9zX25ld19iaCksCisJCW5ld19iaCA9IHNiX2dldGJsayhzYiwgKmJsb2NrbnIpOworCQlSRkFMU0UoYnVmZmVyX2RpcnR5KG5ld19iaCkgfHwKKwkJICAgICAgIGJ1ZmZlcl9qb3VybmFsZWQobmV3X2JoKSB8fAorCQkgICAgICAgYnVmZmVyX2pvdXJuYWxfZGlydHkobmV3X2JoKSwKIAkJICAgICAgICJQQVAtODE0MDogam91cm5sYWxlZCBvciBkaXJ0eSBidWZmZXIgJWIgZm9yIHRoZSBuZXcgYmxvY2siLAotCQkgICAgICAgcF9zX25ld19iaCk7CisJCSAgICAgICBuZXdfYmgpOwogCiAJCS8qIFB1dCBlbXB0eSBidWZmZXJzIGludG8gdGhlIGFycmF5LiAqLwotCQlSRkFMU0UocF9zX3RiLT5GRUJbcF9zX3RiLT5jdXJfYmxrbnVtXSwKKwkJUkZBTFNFKHRiLT5GRUJbdGItPmN1cl9ibGtudW1dLAogCQkgICAgICAgIlBBUC04MTQxOiBidXN5IHNsb3QgZm9yIG5ldyBidWZmZXIiKTsKIAotCQlzZXRfYnVmZmVyX2pvdXJuYWxfbmV3KHBfc19uZXdfYmgpOwotCQlwX3NfdGItPkZFQltwX3NfdGItPmN1cl9ibGtudW0rK10gPSBwX3NfbmV3X2JoOworCQlzZXRfYnVmZmVyX2pvdXJuYWxfbmV3KG5ld19iaCk7CisJCXRiLT5GRUJbdGItPmN1cl9ibGtudW0rK10gPSBuZXdfYmg7CiAJfQogCi0JaWYgKG5fcmV0dmFsID09IENBUlJZX09OICYmIEZJTEVTWVNURU1fQ0hBTkdFRF9UQihwX3NfdGIpKQotCQluX3JldHZhbCA9IFJFUEVBVF9TRUFSQ0g7CisJaWYgKHJldHZhbCA9PSBDQVJSWV9PTiAmJiBGSUxFU1lTVEVNX0NIQU5HRURfVEIodGIpKQorCQlyZXR2YWwgPSBSRVBFQVRfU0VBUkNIOwogCi0JcmV0dXJuIG5fcmV0dmFsOworCXJldHVybiByZXR2YWw7CiB9CiAKIC8qIEdldCBmcmVlIHNwYWNlIG9mIHRoZSBsZWZ0IG5laWdoYm9yLCB3aGljaCBpcyBzdG9yZWQgaW4gdGhlIHBhcmVudApAQCAtODk1LDM1ICs4OTYsMzYgQEAKIH0KIAogLyogQ2hlY2sgd2hldGhlciBsZWZ0IG5laWdoYm9yIGlzIGluIG1lbW9yeS4gKi8KLXN0YXRpYyBpbnQgaXNfbGVmdF9uZWlnaGJvcl9pbl9jYWNoZShzdHJ1Y3QgdHJlZV9iYWxhbmNlICpwX3NfdGIsIGludCBuX2gpCitzdGF0aWMgaW50IGlzX2xlZnRfbmVpZ2hib3JfaW5fY2FjaGUoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIsIGludCBoKQogewotCXN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX2ZhdGhlciwgKmxlZnQ7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IgPSBwX3NfdGItPnRiX3NiOwotCWJfYmxvY2tucl90IG5fbGVmdF9uZWlnaGJvcl9ibG9ja25yOwotCWludCBuX2xlZnRfbmVpZ2hib3JfcG9zaXRpb247CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpmYXRoZXIsICpsZWZ0OworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSB0Yi0+dGJfc2I7CisJYl9ibG9ja25yX3QgbGVmdF9uZWlnaGJvcl9ibG9ja25yOworCWludCBsZWZ0X25laWdoYm9yX3Bvc2l0aW9uOwogCi0JaWYgKCFwX3NfdGItPkZMW25faF0pCS8qIEZhdGhlciBvZiB0aGUgbGVmdCBuZWlnaGJvciBkb2VzIG5vdCBleGlzdC4gKi8KKwkvKiBGYXRoZXIgb2YgdGhlIGxlZnQgbmVpZ2hib3IgZG9lcyBub3QgZXhpc3QuICovCisJaWYgKCF0Yi0+RkxbaF0pCiAJCXJldHVybiAwOwogCiAJLyogQ2FsY3VsYXRlIGZhdGhlciBvZiB0aGUgbm9kZSB0byBiZSBiYWxhbmNlZC4gKi8KLQlwX3NfZmF0aGVyID0gUEFUSF9IX1BCVUZGRVIocF9zX3RiLT50Yl9wYXRoLCBuX2ggKyAxKTsKKwlmYXRoZXIgPSBQQVRIX0hfUEJVRkZFUih0Yi0+dGJfcGF0aCwgaCArIDEpOwogCi0JUkZBTFNFKCFwX3NfZmF0aGVyIHx8Ci0JICAgICAgICFCX0lTX0lOX1RSRUUocF9zX2ZhdGhlcikgfHwKLQkgICAgICAgIUJfSVNfSU5fVFJFRShwX3NfdGItPkZMW25faF0pIHx8Ci0JICAgICAgICFidWZmZXJfdXB0b2RhdGUocF9zX2ZhdGhlcikgfHwKLQkgICAgICAgIWJ1ZmZlcl91cHRvZGF0ZShwX3NfdGItPkZMW25faF0pLAorCVJGQUxTRSghZmF0aGVyIHx8CisJICAgICAgICFCX0lTX0lOX1RSRUUoZmF0aGVyKSB8fAorCSAgICAgICAhQl9JU19JTl9UUkVFKHRiLT5GTFtoXSkgfHwKKwkgICAgICAgIWJ1ZmZlcl91cHRvZGF0ZShmYXRoZXIpIHx8CisJICAgICAgICFidWZmZXJfdXB0b2RhdGUodGItPkZMW2hdKSwKIAkgICAgICAgInZzLTgxNjU6IEZbaF0gKCViKSBvciBGTFtoXSAoJWIpIGlzIGludmFsaWQiLAotCSAgICAgICBwX3NfZmF0aGVyLCBwX3NfdGItPkZMW25faF0pOworCSAgICAgICBmYXRoZXIsIHRiLT5GTFtoXSk7CiAKIAkvKiBHZXQgcG9zaXRpb24gb2YgdGhlIHBvaW50ZXIgdG8gdGhlIGxlZnQgbmVpZ2hib3IgaW50byB0aGUgbGVmdCBmYXRoZXIuICovCi0Jbl9sZWZ0X25laWdoYm9yX3Bvc2l0aW9uID0gKHBfc19mYXRoZXIgPT0gcF9zX3RiLT5GTFtuX2hdKSA/Ci0JICAgIHBfc190Yi0+bGtleVtuX2hdIDogQl9OUl9JVEVNUyhwX3NfdGItPkZMW25faF0pOworCWxlZnRfbmVpZ2hib3JfcG9zaXRpb24gPSAoZmF0aGVyID09IHRiLT5GTFtoXSkgPworCSAgICB0Yi0+bGtleVtoXSA6IEJfTlJfSVRFTVModGItPkZMW2hdKTsKIAkvKiBHZXQgbGVmdCBuZWlnaGJvciBibG9jayBudW1iZXIuICovCi0Jbl9sZWZ0X25laWdoYm9yX2Jsb2NrbnIgPQotCSAgICBCX05fQ0hJTERfTlVNKHBfc190Yi0+Rkxbbl9oXSwgbl9sZWZ0X25laWdoYm9yX3Bvc2l0aW9uKTsKKwlsZWZ0X25laWdoYm9yX2Jsb2NrbnIgPQorCSAgICBCX05fQ0hJTERfTlVNKHRiLT5GTFtoXSwgbGVmdF9uZWlnaGJvcl9wb3NpdGlvbik7CiAJLyogTG9vayBmb3IgdGhlIGxlZnQgbmVpZ2hib3IgaW4gdGhlIGNhY2hlLiAqLwotCWlmICgobGVmdCA9IHNiX2ZpbmRfZ2V0X2Jsb2NrKHBfc19zYiwgbl9sZWZ0X25laWdoYm9yX2Jsb2NrbnIpKSkgeworCWlmICgobGVmdCA9IHNiX2ZpbmRfZ2V0X2Jsb2NrKHNiLCBsZWZ0X25laWdoYm9yX2Jsb2NrbnIpKSkgewogCiAJCVJGQUxTRShidWZmZXJfdXB0b2RhdGUobGVmdCkgJiYgIUJfSVNfSU5fVFJFRShsZWZ0KSwKIAkJICAgICAgICJ2cy04MTcwOiBsZWZ0IG5laWdoYm9yICglYiAleikgaXMgbm90IGluIHRoZSB0cmVlIiwKQEAgLTkzOCwxMCArOTQwLDEwIEBACiAjZGVmaW5lIExFRlRfUEFSRU5UUyAgJ2wnCiAjZGVmaW5lIFJJR0hUX1BBUkVOVFMgJ3InCiAKLXN0YXRpYyB2b2lkIGRlY3JlbWVudF9rZXkoc3RydWN0IGNwdV9rZXkgKnBfc19rZXkpCitzdGF0aWMgdm9pZCBkZWNyZW1lbnRfa2V5KHN0cnVjdCBjcHVfa2V5ICprZXkpCiB7CiAJLy8gY2FsbCBpdGVtIHNwZWNpZmljIGZ1bmN0aW9uIGZvciB0aGlzIGtleQotCWl0ZW1fb3BzW2NwdV9rZXlfa190eXBlKHBfc19rZXkpXS0+ZGVjcmVtZW50X2tleShwX3Nfa2V5KTsKKwlpdGVtX29wc1tjcHVfa2V5X2tfdHlwZShrZXkpXS0+ZGVjcmVtZW50X2tleShrZXkpOwogfQogCiAvKiBDYWxjdWxhdGUgZmFyIGxlZnQvcmlnaHQgcGFyZW50IG9mIHRoZSBsZWZ0L3JpZ2h0IG5laWdoYm9yIG9mIHRoZSBjdXJyZW50IG5vZGUsIHRoYXQKQEAgLTk1Miw3NyArOTU0LDc3IEBACiAgCQlTQ0hFRFVMRV9PQ0NVUlJFRCAtIHNjaGVkdWxlIG9jY3VycmVkIHdoaWxlIHRoZSBmdW5jdGlvbiB3b3JrZWQ7CiAgKgkgICAgICAgIENBUlJZX09OICAgICAgICAgLSBzY2hlZHVsZSBkaWRuJ3Qgb2NjdXIgd2hpbGUgdGhlIGZ1bmN0aW9uIHdvcmtlZDsKICAqLwotc3RhdGljIGludCBnZXRfZmFyX3BhcmVudChzdHJ1Y3QgdHJlZV9iYWxhbmNlICpwX3NfdGIsCi0JCQkgIGludCBuX2gsCi0JCQkgIHN0cnVjdCBidWZmZXJfaGVhZCAqKnBwX3NfZmF0aGVyLAotCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipwcF9zX2NvbV9mYXRoZXIsIGNoYXIgY19scl9wYXIpCitzdGF0aWMgaW50IGdldF9mYXJfcGFyZW50KHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiLAorCQkJICBpbnQgaCwKKwkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqcGZhdGhlciwKKwkJCSAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqcGNvbV9mYXRoZXIsIGNoYXIgY19scl9wYXIpCiB7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfcGFyZW50OworCXN0cnVjdCBidWZmZXJfaGVhZCAqcGFyZW50OwogCUlOSVRJQUxJWkVfUEFUSChzX3BhdGhfdG9fbmVpZ2hib3JfZmF0aGVyKTsKLQlzdHJ1Y3QgdHJlZXBhdGggKnBfc19wYXRoID0gcF9zX3RiLT50Yl9wYXRoOworCXN0cnVjdCB0cmVlcGF0aCAqcGF0aCA9IHRiLT50Yl9wYXRoOwogCXN0cnVjdCBjcHVfa2V5IHNfbHJfZmF0aGVyX2tleTsKLQlpbnQgbl9jb3VudGVyLAotCSAgICBuX3Bvc2l0aW9uID0gSU5UX01BWCwKLQkgICAgbl9maXJzdF9sYXN0X3Bvc2l0aW9uID0gMCwKLQkgICAgbl9wYXRoX29mZnNldCA9IFBBVEhfSF9QQVRIX09GRlNFVChwX3NfcGF0aCwgbl9oKTsKKwlpbnQgY291bnRlciwKKwkgICAgcG9zaXRpb24gPSBJTlRfTUFYLAorCSAgICBmaXJzdF9sYXN0X3Bvc2l0aW9uID0gMCwKKwkgICAgcGF0aF9vZmZzZXQgPSBQQVRIX0hfUEFUSF9PRkZTRVQocGF0aCwgaCk7CiAKLQkvKiBTdGFydGluZyBmcm9tIEZbbl9oXSBnbyB1cHdhcmRzIGluIHRoZSB0cmVlLCBhbmQgbG9vayBmb3IgdGhlIGNvbW1vbgotCSAgIGFuY2VzdG9yIG9mIEZbbl9oXSwgYW5kIGl0cyBuZWlnaGJvciBsL3IsIHRoYXQgc2hvdWxkIGJlIG9idGFpbmVkLiAqLworCS8qIFN0YXJ0aW5nIGZyb20gRltoXSBnbyB1cHdhcmRzIGluIHRoZSB0cmVlLCBhbmQgbG9vayBmb3IgdGhlIGNvbW1vbgorCSAgIGFuY2VzdG9yIG9mIEZbaF0sIGFuZCBpdHMgbmVpZ2hib3IgbC9yLCB0aGF0IHNob3VsZCBiZSBvYnRhaW5lZC4gKi8KIAotCW5fY291bnRlciA9IG5fcGF0aF9vZmZzZXQ7CisJY291bnRlciA9IHBhdGhfb2Zmc2V0OwogCi0JUkZBTFNFKG5fY291bnRlciA8IEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQsCisJUkZBTFNFKGNvdW50ZXIgPCBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VULAogCSAgICAgICAiUEFQLTgxODA6IGludmFsaWQgcGF0aCBsZW5ndGgiKTsKIAotCWZvciAoOyBuX2NvdW50ZXIgPiBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUOyBuX2NvdW50ZXItLSkgeworCWZvciAoOyBjb3VudGVyID4gRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVDsgY291bnRlci0tKSB7CiAJCS8qIENoZWNrIHdoZXRoZXIgcGFyZW50IG9mIHRoZSBjdXJyZW50IGJ1ZmZlciBpbiB0aGUgcGF0aCBpcyByZWFsbHkgcGFyZW50IGluIHRoZSB0cmVlLiAqLwogCQlpZiAoIUJfSVNfSU5fVFJFRQotCQkgICAgKHBfc19wYXJlbnQgPSBQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19wYXRoLCBuX2NvdW50ZXIgLSAxKSkpCisJCSAgICAocGFyZW50ID0gUEFUSF9PRkZTRVRfUEJVRkZFUihwYXRoLCBjb3VudGVyIC0gMSkpKQogCQkJcmV0dXJuIFJFUEVBVF9TRUFSQ0g7CiAJCS8qIENoZWNrIHdoZXRoZXIgcG9zaXRpb24gaW4gdGhlIHBhcmVudCBpcyBjb3JyZWN0LiAqLwotCQlpZiAoKG5fcG9zaXRpb24gPQotCQkgICAgIFBBVEhfT0ZGU0VUX1BPU0lUSU9OKHBfc19wYXRoLAotCQkJCQkgIG5fY291bnRlciAtIDEpKSA+Ci0JCSAgICBCX05SX0lURU1TKHBfc19wYXJlbnQpKQorCQlpZiAoKHBvc2l0aW9uID0KKwkJICAgICBQQVRIX09GRlNFVF9QT1NJVElPTihwYXRoLAorCQkJCQkgIGNvdW50ZXIgLSAxKSkgPgorCQkgICAgQl9OUl9JVEVNUyhwYXJlbnQpKQogCQkJcmV0dXJuIFJFUEVBVF9TRUFSQ0g7CiAJCS8qIENoZWNrIHdoZXRoZXIgcGFyZW50IGF0IHRoZSBwYXRoIHJlYWxseSBwb2ludHMgdG8gdGhlIGNoaWxkLiAqLwotCQlpZiAoQl9OX0NISUxEX05VTShwX3NfcGFyZW50LCBuX3Bvc2l0aW9uKSAhPQotCQkgICAgUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfcGF0aCwgbl9jb3VudGVyKS0+Yl9ibG9ja25yKQorCQlpZiAoQl9OX0NISUxEX05VTShwYXJlbnQsIHBvc2l0aW9uKSAhPQorCQkgICAgUEFUSF9PRkZTRVRfUEJVRkZFUihwYXRoLCBjb3VudGVyKS0+Yl9ibG9ja25yKQogCQkJcmV0dXJuIFJFUEVBVF9TRUFSQ0g7CiAJCS8qIFJldHVybiBkZWxpbWl0aW5nIGtleSBpZiBwb3NpdGlvbiBpbiB0aGUgcGFyZW50IGlzIG5vdCBlcXVhbCB0byBmaXJzdC9sYXN0IG9uZS4gKi8KIAkJaWYgKGNfbHJfcGFyID09IFJJR0hUX1BBUkVOVFMpCi0JCQluX2ZpcnN0X2xhc3RfcG9zaXRpb24gPSBCX05SX0lURU1TKHBfc19wYXJlbnQpOwotCQlpZiAobl9wb3NpdGlvbiAhPSBuX2ZpcnN0X2xhc3RfcG9zaXRpb24pIHsKLQkJCSpwcF9zX2NvbV9mYXRoZXIgPSBwX3NfcGFyZW50OwotCQkJZ2V0X2JoKCpwcF9zX2NvbV9mYXRoZXIpOwotCQkJLyooKnBwX3NfY29tX2ZhdGhlciA9IHBfc19wYXJlbnQpLT5iX2NvdW50Kys7ICovCisJCQlmaXJzdF9sYXN0X3Bvc2l0aW9uID0gQl9OUl9JVEVNUyhwYXJlbnQpOworCQlpZiAocG9zaXRpb24gIT0gZmlyc3RfbGFzdF9wb3NpdGlvbikgeworCQkJKnBjb21fZmF0aGVyID0gcGFyZW50OworCQkJZ2V0X2JoKCpwY29tX2ZhdGhlcik7CisJCQkvKigqcGNvbV9mYXRoZXIgPSBwYXJlbnQpLT5iX2NvdW50Kys7ICovCiAJCQlicmVhazsKIAkJfQogCX0KIAogCS8qIGlmIHdlIGFyZSBpbiB0aGUgcm9vdCBvZiB0aGUgdHJlZSwgdGhlbiB0aGVyZSBpcyBubyBjb21tb24gZmF0aGVyICovCi0JaWYgKG5fY291bnRlciA9PSBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUKSB7CisJaWYgKGNvdW50ZXIgPT0gRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCkgewogCQkvKiBDaGVjayB3aGV0aGVyIGZpcnN0IGJ1ZmZlciBpbiB0aGUgcGF0aCBpcyB0aGUgcm9vdCBvZiB0aGUgdHJlZS4gKi8KIAkJaWYgKFBBVEhfT0ZGU0VUX1BCVUZGRVIKLQkJICAgIChwX3NfdGItPnRiX3BhdGgsCisJCSAgICAodGItPnRiX3BhdGgsCiAJCSAgICAgRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCktPmJfYmxvY2tuciA9PQotCQkgICAgU0JfUk9PVF9CTE9DSyhwX3NfdGItPnRiX3NiKSkgewotCQkJKnBwX3NfZmF0aGVyID0gKnBwX3NfY29tX2ZhdGhlciA9IE5VTEw7CisJCSAgICBTQl9ST09UX0JMT0NLKHRiLT50Yl9zYikpIHsKKwkJCSpwZmF0aGVyID0gKnBjb21fZmF0aGVyID0gTlVMTDsKIAkJCXJldHVybiBDQVJSWV9PTjsKIAkJfQogCQlyZXR1cm4gUkVQRUFUX1NFQVJDSDsKIAl9CiAKLQlSRkFMU0UoQl9MRVZFTCgqcHBfc19jb21fZmF0aGVyKSA8PSBESVNLX0xFQUZfTk9ERV9MRVZFTCwKKwlSRkFMU0UoQl9MRVZFTCgqcGNvbV9mYXRoZXIpIDw9IERJU0tfTEVBRl9OT0RFX0xFVkVMLAogCSAgICAgICAiUEFQLTgxODU6ICglYiAleikgbGV2ZWwgdG9vIHNtYWxsIiwKLQkgICAgICAgKnBwX3NfY29tX2ZhdGhlciwgKnBwX3NfY29tX2ZhdGhlcik7CisJICAgICAgICpwY29tX2ZhdGhlciwgKnBjb21fZmF0aGVyKTsKIAogCS8qIENoZWNrIHdoZXRoZXIgdGhlIGNvbW1vbiBwYXJlbnQgaXMgbG9ja2VkLiAqLwogCi0JaWYgKGJ1ZmZlcl9sb2NrZWQoKnBwX3NfY29tX2ZhdGhlcikpIHsKLQkJX193YWl0X29uX2J1ZmZlcigqcHBfc19jb21fZmF0aGVyKTsKLQkJaWYgKEZJTEVTWVNURU1fQ0hBTkdFRF9UQihwX3NfdGIpKSB7Ci0JCQlkZWNyZW1lbnRfYmNvdW50KCpwcF9zX2NvbV9mYXRoZXIpOworCWlmIChidWZmZXJfbG9ja2VkKCpwY29tX2ZhdGhlcikpIHsKKwkJX193YWl0X29uX2J1ZmZlcigqcGNvbV9mYXRoZXIpOworCQlpZiAoRklMRVNZU1RFTV9DSEFOR0VEX1RCKHRiKSkgeworCQkJYnJlbHNlKCpwY29tX2ZhdGhlcik7CiAJCQlyZXR1cm4gUkVQRUFUX1NFQVJDSDsKIAkJfQogCX0KQEAgLTEwMzIsMTI4ICsxMDM0LDEzMSBAQAogCiAJLyogRm9ybSBrZXkgdG8gZ2V0IHBhcmVudCBvZiB0aGUgbGVmdC9yaWdodCBuZWlnaGJvci4gKi8KIAlsZV9rZXkyY3B1X2tleSgmc19scl9mYXRoZXJfa2V5LAotCQkgICAgICAgQl9OX1BERUxJTV9LRVkoKnBwX3NfY29tX2ZhdGhlciwKKwkJICAgICAgIEJfTl9QREVMSU1fS0VZKCpwY29tX2ZhdGhlciwKIAkJCQkgICAgICAoY19scl9wYXIgPT0KLQkJCQkgICAgICAgTEVGVF9QQVJFTlRTKSA/IChwX3NfdGItPmxrZXlbbl9oIC0gMV0gPQotCQkJCQkJCW5fcG9zaXRpb24gLQotCQkJCQkJCTEpIDogKHBfc190Yi0+cmtleVtuX2ggLQorCQkJCSAgICAgICBMRUZUX1BBUkVOVFMpID8gKHRiLT5sa2V5W2ggLSAxXSA9CisJCQkJCQkJcG9zaXRpb24gLQorCQkJCQkJCTEpIDogKHRiLT5ya2V5W2ggLQogCQkJCQkJCQkJICAgMV0gPQotCQkJCQkJCSAgICAgIG5fcG9zaXRpb24pKSk7CisJCQkJCQkJICAgICAgcG9zaXRpb24pKSk7CiAKIAlpZiAoY19scl9wYXIgPT0gTEVGVF9QQVJFTlRTKQogCQlkZWNyZW1lbnRfa2V5KCZzX2xyX2ZhdGhlcl9rZXkpOwogCiAJaWYgKHNlYXJjaF9ieV9rZXkKLQkgICAgKHBfc190Yi0+dGJfc2IsICZzX2xyX2ZhdGhlcl9rZXksICZzX3BhdGhfdG9fbmVpZ2hib3JfZmF0aGVyLAotCSAgICAgbl9oICsgMSkgPT0gSU9fRVJST1IpCisJICAgICh0Yi0+dGJfc2IsICZzX2xyX2ZhdGhlcl9rZXksICZzX3BhdGhfdG9fbmVpZ2hib3JfZmF0aGVyLAorCSAgICAgaCArIDEpID09IElPX0VSUk9SKQogCQkvLyBwYXRoIGlzIHJlbGVhc2VkCiAJCXJldHVybiBJT19FUlJPUjsKIAotCWlmIChGSUxFU1lTVEVNX0NIQU5HRURfVEIocF9zX3RiKSkgewotCQlkZWNyZW1lbnRfY291bnRlcnNfaW5fcGF0aCgmc19wYXRoX3RvX25laWdoYm9yX2ZhdGhlcik7Ci0JCWRlY3JlbWVudF9iY291bnQoKnBwX3NfY29tX2ZhdGhlcik7CisJaWYgKEZJTEVTWVNURU1fQ0hBTkdFRF9UQih0YikpIHsKKwkJcGF0aHJlbHNlKCZzX3BhdGhfdG9fbmVpZ2hib3JfZmF0aGVyKTsKKwkJYnJlbHNlKCpwY29tX2ZhdGhlcik7CiAJCXJldHVybiBSRVBFQVRfU0VBUkNIOwogCX0KIAotCSpwcF9zX2ZhdGhlciA9IFBBVEhfUExBU1RfQlVGRkVSKCZzX3BhdGhfdG9fbmVpZ2hib3JfZmF0aGVyKTsKKwkqcGZhdGhlciA9IFBBVEhfUExBU1RfQlVGRkVSKCZzX3BhdGhfdG9fbmVpZ2hib3JfZmF0aGVyKTsKIAotCVJGQUxTRShCX0xFVkVMKCpwcF9zX2ZhdGhlcikgIT0gbl9oICsgMSwKLQkgICAgICAgIlBBUC04MTkwOiAoJWIgJXopIGxldmVsIHRvbyBzbWFsbCIsICpwcF9zX2ZhdGhlciwgKnBwX3NfZmF0aGVyKTsKKwlSRkFMU0UoQl9MRVZFTCgqcGZhdGhlcikgIT0gaCArIDEsCisJICAgICAgICJQQVAtODE5MDogKCViICV6KSBsZXZlbCB0b28gc21hbGwiLCAqcGZhdGhlciwgKnBmYXRoZXIpOwogCVJGQUxTRShzX3BhdGhfdG9fbmVpZ2hib3JfZmF0aGVyLnBhdGhfbGVuZ3RoIDwKIAkgICAgICAgRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCwgIlBBUC04MTkyOiBwYXRoIGxlbmd0aCBpcyB0b28gc21hbGwiKTsKIAogCXNfcGF0aF90b19uZWlnaGJvcl9mYXRoZXIucGF0aF9sZW5ndGgtLTsKLQlkZWNyZW1lbnRfY291bnRlcnNfaW5fcGF0aCgmc19wYXRoX3RvX25laWdoYm9yX2ZhdGhlcik7CisJcGF0aHJlbHNlKCZzX3BhdGhfdG9fbmVpZ2hib3JfZmF0aGVyKTsKIAlyZXR1cm4gQ0FSUllfT047CiB9CiAKLS8qIEdldCBwYXJlbnRzIG9mIG5laWdoYm9ycyBvZiBub2RlIGluIHRoZSBwYXRoKFNbbl9wYXRoX29mZnNldF0pIGFuZCBjb21tb24gcGFyZW50cyBvZgotICogU1tuX3BhdGhfb2Zmc2V0XSBhbmQgTFtuX3BhdGhfb2Zmc2V0XS9SW25fcGF0aF9vZmZzZXRdOiBGW25fcGF0aF9vZmZzZXRdLCBGTFtuX3BhdGhfb2Zmc2V0XSwKLSAqIEZSW25fcGF0aF9vZmZzZXRdLCBDRkxbbl9wYXRoX29mZnNldF0sIENGUltuX3BhdGhfb2Zmc2V0XS4KLSAqIENhbGN1bGF0ZSBudW1iZXJzIG9mIGxlZnQgYW5kIHJpZ2h0IGRlbGltaXRpbmcga2V5cyBwb3NpdGlvbjogbGtleVtuX3BhdGhfb2Zmc2V0XSwgcmtleVtuX3BhdGhfb2Zmc2V0XS4KKy8qIEdldCBwYXJlbnRzIG9mIG5laWdoYm9ycyBvZiBub2RlIGluIHRoZSBwYXRoKFNbcGF0aF9vZmZzZXRdKSBhbmQgY29tbW9uIHBhcmVudHMgb2YKKyAqIFNbcGF0aF9vZmZzZXRdIGFuZCBMW3BhdGhfb2Zmc2V0XS9SW3BhdGhfb2Zmc2V0XTogRltwYXRoX29mZnNldF0sIEZMW3BhdGhfb2Zmc2V0XSwKKyAqIEZSW3BhdGhfb2Zmc2V0XSwgQ0ZMW3BhdGhfb2Zmc2V0XSwgQ0ZSW3BhdGhfb2Zmc2V0XS4KKyAqIENhbGN1bGF0ZSBudW1iZXJzIG9mIGxlZnQgYW5kIHJpZ2h0IGRlbGltaXRpbmcga2V5cyBwb3NpdGlvbjogbGtleVtwYXRoX29mZnNldF0sIHJrZXlbcGF0aF9vZmZzZXRdLgogICogUmV0dXJuczoJU0NIRURVTEVfT0NDVVJSRUQgLSBzY2hlZHVsZSBvY2N1cnJlZCB3aGlsZSB0aGUgZnVuY3Rpb24gd29ya2VkOwogICoJICAgICAgICBDQVJSWV9PTiAtIHNjaGVkdWxlIGRpZG4ndCBvY2N1ciB3aGlsZSB0aGUgZnVuY3Rpb24gd29ya2VkOwogICovCi1zdGF0aWMgaW50IGdldF9wYXJlbnRzKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnBfc190YiwgaW50IG5faCkKK3N0YXRpYyBpbnQgZ2V0X3BhcmVudHMoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIsIGludCBoKQogewotCXN0cnVjdCB0cmVlcGF0aCAqcF9zX3BhdGggPSBwX3NfdGItPnRiX3BhdGg7Ci0JaW50IG5fcG9zaXRpb24sCi0JICAgIG5fcmV0X3ZhbHVlLAotCSAgICBuX3BhdGhfb2Zmc2V0ID0gUEFUSF9IX1BBVEhfT0ZGU0VUKHBfc190Yi0+dGJfcGF0aCwgbl9oKTsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBfc19jdXJmLCAqcF9zX2N1cmNmOworCXN0cnVjdCB0cmVlcGF0aCAqcGF0aCA9IHRiLT50Yl9wYXRoOworCWludCBwb3NpdGlvbiwKKwkgICAgcmV0LAorCSAgICBwYXRoX29mZnNldCA9IFBBVEhfSF9QQVRIX09GRlNFVCh0Yi0+dGJfcGF0aCwgaCk7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpjdXJmLCAqY3VyY2Y7CiAKIAkvKiBDdXJyZW50IG5vZGUgaXMgdGhlIHJvb3Qgb2YgdGhlIHRyZWUgb3Igd2lsbCBiZSByb290IG9mIHRoZSB0cmVlICovCi0JaWYgKG5fcGF0aF9vZmZzZXQgPD0gRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCkgeworCWlmIChwYXRoX29mZnNldCA8PSBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUKSB7CiAJCS8qIFRoZSByb290IGNhbiBub3QgaGF2ZSBwYXJlbnRzLgogCQkgICBSZWxlYXNlIG5vZGVzIHdoaWNoIHByZXZpb3VzbHkgd2VyZSBvYnRhaW5lZCBhcyBwYXJlbnRzIG9mIHRoZSBjdXJyZW50IG5vZGUgbmVpZ2hib3JzLiAqLwotCQlkZWNyZW1lbnRfYmNvdW50KHBfc190Yi0+Rkxbbl9oXSk7Ci0JCWRlY3JlbWVudF9iY291bnQocF9zX3RiLT5DRkxbbl9oXSk7Ci0JCWRlY3JlbWVudF9iY291bnQocF9zX3RiLT5GUltuX2hdKTsKLQkJZGVjcmVtZW50X2Jjb3VudChwX3NfdGItPkNGUltuX2hdKTsKLQkJcF9zX3RiLT5GTFtuX2hdID0gcF9zX3RiLT5DRkxbbl9oXSA9IHBfc190Yi0+RlJbbl9oXSA9Ci0JCSAgICBwX3NfdGItPkNGUltuX2hdID0gTlVMTDsKKwkJYnJlbHNlKHRiLT5GTFtoXSk7CisJCWJyZWxzZSh0Yi0+Q0ZMW2hdKTsKKwkJYnJlbHNlKHRiLT5GUltoXSk7CisJCWJyZWxzZSh0Yi0+Q0ZSW2hdKTsKKwkJdGItPkZMW2hdICA9IE5VTEw7CisJCXRiLT5DRkxbaF0gPSBOVUxMOworCQl0Yi0+RlJbaF0gID0gTlVMTDsKKwkJdGItPkNGUltoXSA9IE5VTEw7CiAJCXJldHVybiBDQVJSWV9PTjsKIAl9CiAKLQkvKiBHZXQgcGFyZW50IEZMW25fcGF0aF9vZmZzZXRdIG9mIExbbl9wYXRoX29mZnNldF0uICovCi0JaWYgKChuX3Bvc2l0aW9uID0gUEFUSF9PRkZTRVRfUE9TSVRJT04ocF9zX3BhdGgsIG5fcGF0aF9vZmZzZXQgLSAxKSkpIHsKKwkvKiBHZXQgcGFyZW50IEZMW3BhdGhfb2Zmc2V0XSBvZiBMW3BhdGhfb2Zmc2V0XS4gKi8KKwlwb3NpdGlvbiA9IFBBVEhfT0ZGU0VUX1BPU0lUSU9OKHBhdGgsIHBhdGhfb2Zmc2V0IC0gMSk7CisJaWYgKHBvc2l0aW9uKSB7CiAJCS8qIEN1cnJlbnQgbm9kZSBpcyBub3QgdGhlIGZpcnN0IGNoaWxkIG9mIGl0cyBwYXJlbnQuICovCi0JCS8qKHBfc19jdXJmID0gcF9zX2N1cmNmID0gUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfcGF0aCwgbl9wYXRoX29mZnNldCAtIDEpKS0+Yl9jb3VudCArPSAyOyAqLwotCQlwX3NfY3VyZiA9IHBfc19jdXJjZiA9Ci0JCSAgICBQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19wYXRoLCBuX3BhdGhfb2Zmc2V0IC0gMSk7Ci0JCWdldF9iaChwX3NfY3VyZik7Ci0JCWdldF9iaChwX3NfY3VyZik7Ci0JCXBfc190Yi0+bGtleVtuX2hdID0gbl9wb3NpdGlvbiAtIDE7CisJCWN1cmYgPSBQQVRIX09GRlNFVF9QQlVGRkVSKHBhdGgsIHBhdGhfb2Zmc2V0IC0gMSk7CisJCWN1cmNmID0gUEFUSF9PRkZTRVRfUEJVRkZFUihwYXRoLCBwYXRoX29mZnNldCAtIDEpOworCQlnZXRfYmgoY3VyZik7CisJCWdldF9iaChjdXJmKTsKKwkJdGItPmxrZXlbaF0gPSBwb3NpdGlvbiAtIDE7CiAJfSBlbHNlIHsKLQkJLyogQ2FsY3VsYXRlIGN1cnJlbnQgcGFyZW50IG9mIExbbl9wYXRoX29mZnNldF0sIHdoaWNoIGlzIHRoZSBsZWZ0IG5laWdoYm9yIG9mIHRoZSBjdXJyZW50IG5vZGUuCi0JCSAgIENhbGN1bGF0ZSBjdXJyZW50IGNvbW1vbiBwYXJlbnQgb2YgTFtuX3BhdGhfb2Zmc2V0XSBhbmQgdGhlIGN1cnJlbnQgbm9kZS4gTm90ZSB0aGF0Ci0JCSAgIENGTFtuX3BhdGhfb2Zmc2V0XSBub3QgZXF1YWwgRkxbbl9wYXRoX29mZnNldF0gYW5kIENGTFtuX3BhdGhfb2Zmc2V0XSBub3QgZXF1YWwgRltuX3BhdGhfb2Zmc2V0XS4KLQkJICAgQ2FsY3VsYXRlIGxrZXlbbl9wYXRoX29mZnNldF0uICovCi0JCWlmICgobl9yZXRfdmFsdWUgPSBnZXRfZmFyX3BhcmVudChwX3NfdGIsIG5faCArIDEsICZwX3NfY3VyZiwKLQkJCQkJCSAgJnBfc19jdXJjZiwKKwkJLyogQ2FsY3VsYXRlIGN1cnJlbnQgcGFyZW50IG9mIExbcGF0aF9vZmZzZXRdLCB3aGljaCBpcyB0aGUgbGVmdCBuZWlnaGJvciBvZiB0aGUgY3VycmVudCBub2RlLgorCQkgICBDYWxjdWxhdGUgY3VycmVudCBjb21tb24gcGFyZW50IG9mIExbcGF0aF9vZmZzZXRdIGFuZCB0aGUgY3VycmVudCBub2RlLiBOb3RlIHRoYXQKKwkJICAgQ0ZMW3BhdGhfb2Zmc2V0XSBub3QgZXF1YWwgRkxbcGF0aF9vZmZzZXRdIGFuZCBDRkxbcGF0aF9vZmZzZXRdIG5vdCBlcXVhbCBGW3BhdGhfb2Zmc2V0XS4KKwkJICAgQ2FsY3VsYXRlIGxrZXlbcGF0aF9vZmZzZXRdLiAqLworCQlpZiAoKHJldCA9IGdldF9mYXJfcGFyZW50KHRiLCBoICsgMSwgJmN1cmYsCisJCQkJCQkgICZjdXJjZiwKIAkJCQkJCSAgTEVGVF9QQVJFTlRTKSkgIT0gQ0FSUllfT04pCi0JCQlyZXR1cm4gbl9yZXRfdmFsdWU7CisJCQlyZXR1cm4gcmV0OwogCX0KIAotCWRlY3JlbWVudF9iY291bnQocF9zX3RiLT5GTFtuX2hdKTsKLQlwX3NfdGItPkZMW25faF0gPSBwX3NfY3VyZjsJLyogTmV3IGluaXRpYWxpemF0aW9uIG9mIEZMW25faF0uICovCi0JZGVjcmVtZW50X2Jjb3VudChwX3NfdGItPkNGTFtuX2hdKTsKLQlwX3NfdGItPkNGTFtuX2hdID0gcF9zX2N1cmNmOwkvKiBOZXcgaW5pdGlhbGl6YXRpb24gb2YgQ0ZMW25faF0uICovCisJYnJlbHNlKHRiLT5GTFtoXSk7CisJdGItPkZMW2hdID0gY3VyZjsJLyogTmV3IGluaXRpYWxpemF0aW9uIG9mIEZMW2hdLiAqLworCWJyZWxzZSh0Yi0+Q0ZMW2hdKTsKKwl0Yi0+Q0ZMW2hdID0gY3VyY2Y7CS8qIE5ldyBpbml0aWFsaXphdGlvbiBvZiBDRkxbaF0uICovCiAKLQlSRkFMU0UoKHBfc19jdXJmICYmICFCX0lTX0lOX1RSRUUocF9zX2N1cmYpKSB8fAotCSAgICAgICAocF9zX2N1cmNmICYmICFCX0lTX0lOX1RSRUUocF9zX2N1cmNmKSksCi0JICAgICAgICJQQVAtODE5NTogRkwgKCViKSBvciBDRkwgKCViKSBpcyBpbnZhbGlkIiwgcF9zX2N1cmYsIHBfc19jdXJjZik7CisJUkZBTFNFKChjdXJmICYmICFCX0lTX0lOX1RSRUUoY3VyZikpIHx8CisJICAgICAgIChjdXJjZiAmJiAhQl9JU19JTl9UUkVFKGN1cmNmKSksCisJICAgICAgICJQQVAtODE5NTogRkwgKCViKSBvciBDRkwgKCViKSBpcyBpbnZhbGlkIiwgY3VyZiwgY3VyY2YpOwogCi0vKiBHZXQgcGFyZW50IEZSW25faF0gb2YgUltuX2hdLiAqLworLyogR2V0IHBhcmVudCBGUltoXSBvZiBSW2hdLiAqLwogCi0vKiBDdXJyZW50IG5vZGUgaXMgdGhlIGxhc3QgY2hpbGQgb2YgRltuX2hdLiBGUltuX2hdICE9IEZbbl9oXS4gKi8KLQlpZiAobl9wb3NpdGlvbiA9PSBCX05SX0lURU1TKFBBVEhfSF9QQlVGRkVSKHBfc19wYXRoLCBuX2ggKyAxKSkpIHsKLS8qIENhbGN1bGF0ZSBjdXJyZW50IHBhcmVudCBvZiBSW25faF0sIHdoaWNoIGlzIHRoZSByaWdodCBuZWlnaGJvciBvZiBGW25faF0uCi0gICBDYWxjdWxhdGUgY3VycmVudCBjb21tb24gcGFyZW50IG9mIFJbbl9oXSBhbmQgY3VycmVudCBub2RlLiBOb3RlIHRoYXQgQ0ZSW25faF0KLSAgIG5vdCBlcXVhbCBGUltuX3BhdGhfb2Zmc2V0XSBhbmQgQ0ZSW25faF0gbm90IGVxdWFsIEZbbl9oXS4gKi8KLQkJaWYgKChuX3JldF92YWx1ZSA9Ci0JCSAgICAgZ2V0X2Zhcl9wYXJlbnQocF9zX3RiLCBuX2ggKyAxLCAmcF9zX2N1cmYsICZwX3NfY3VyY2YsCisvKiBDdXJyZW50IG5vZGUgaXMgdGhlIGxhc3QgY2hpbGQgb2YgRltoXS4gRlJbaF0gIT0gRltoXS4gKi8KKwlpZiAocG9zaXRpb24gPT0gQl9OUl9JVEVNUyhQQVRIX0hfUEJVRkZFUihwYXRoLCBoICsgMSkpKSB7CisvKiBDYWxjdWxhdGUgY3VycmVudCBwYXJlbnQgb2YgUltoXSwgd2hpY2ggaXMgdGhlIHJpZ2h0IG5laWdoYm9yIG9mIEZbaF0uCisgICBDYWxjdWxhdGUgY3VycmVudCBjb21tb24gcGFyZW50IG9mIFJbaF0gYW5kIGN1cnJlbnQgbm9kZS4gTm90ZSB0aGF0IENGUltoXQorICAgbm90IGVxdWFsIEZSW3BhdGhfb2Zmc2V0XSBhbmQgQ0ZSW2hdIG5vdCBlcXVhbCBGW2hdLiAqLworCQlpZiAoKHJldCA9CisJCSAgICAgZ2V0X2Zhcl9wYXJlbnQodGIsIGggKyAxLCAmY3VyZiwgJmN1cmNmLAogCQkJCSAgICBSSUdIVF9QQVJFTlRTKSkgIT0gQ0FSUllfT04pCi0JCQlyZXR1cm4gbl9yZXRfdmFsdWU7CisJCQlyZXR1cm4gcmV0OwogCX0gZWxzZSB7Ci0vKiBDdXJyZW50IG5vZGUgaXMgbm90IHRoZSBsYXN0IGNoaWxkIG9mIGl0cyBwYXJlbnQgRltuX2hdLiAqLwotCQkvKihwX3NfY3VyZiA9IHBfc19jdXJjZiA9IFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX3BhdGgsIG5fcGF0aF9vZmZzZXQgLSAxKSktPmJfY291bnQgKz0gMjsgKi8KLQkJcF9zX2N1cmYgPSBwX3NfY3VyY2YgPQotCQkgICAgUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfcGF0aCwgbl9wYXRoX29mZnNldCAtIDEpOwotCQlnZXRfYmgocF9zX2N1cmYpOwotCQlnZXRfYmgocF9zX2N1cmYpOwotCQlwX3NfdGItPnJrZXlbbl9oXSA9IG5fcG9zaXRpb247CisvKiBDdXJyZW50IG5vZGUgaXMgbm90IHRoZSBsYXN0IGNoaWxkIG9mIGl0cyBwYXJlbnQgRltoXS4gKi8KKwkJY3VyZiA9IFBBVEhfT0ZGU0VUX1BCVUZGRVIocGF0aCwgcGF0aF9vZmZzZXQgLSAxKTsKKwkJY3VyY2YgPSBQQVRIX09GRlNFVF9QQlVGRkVSKHBhdGgsIHBhdGhfb2Zmc2V0IC0gMSk7CisJCWdldF9iaChjdXJmKTsKKwkJZ2V0X2JoKGN1cmYpOworCQl0Yi0+cmtleVtoXSA9IHBvc2l0aW9uOwogCX0KIAotCWRlY3JlbWVudF9iY291bnQocF9zX3RiLT5GUltuX2hdKTsKLQlwX3NfdGItPkZSW25faF0gPSBwX3NfY3VyZjsJLyogTmV3IGluaXRpYWxpemF0aW9uIG9mIEZSW25fcGF0aF9vZmZzZXRdLiAqLworCWJyZWxzZSh0Yi0+RlJbaF0pOworCS8qIE5ldyBpbml0aWFsaXphdGlvbiBvZiBGUltwYXRoX29mZnNldF0uICovCisJdGItPkZSW2hdID0gY3VyZjsKIAotCWRlY3JlbWVudF9iY291bnQocF9zX3RiLT5DRlJbbl9oXSk7Ci0JcF9zX3RiLT5DRlJbbl9oXSA9IHBfc19jdXJjZjsJLyogTmV3IGluaXRpYWxpemF0aW9uIG9mIENGUltuX3BhdGhfb2Zmc2V0XS4gKi8KKwlicmVsc2UodGItPkNGUltoXSk7CisJLyogTmV3IGluaXRpYWxpemF0aW9uIG9mIENGUltwYXRoX29mZnNldF0uICovCisJdGItPkNGUltoXSA9IGN1cmNmOwogCi0JUkZBTFNFKChwX3NfY3VyZiAmJiAhQl9JU19JTl9UUkVFKHBfc19jdXJmKSkgfHwKLQkgICAgICAgKHBfc19jdXJjZiAmJiAhQl9JU19JTl9UUkVFKHBfc19jdXJjZikpLAotCSAgICAgICAiUEFQLTgyMDU6IEZSICglYikgb3IgQ0ZSICglYikgaXMgaW52YWxpZCIsIHBfc19jdXJmLCBwX3NfY3VyY2YpOworCVJGQUxTRSgoY3VyZiAmJiAhQl9JU19JTl9UUkVFKGN1cmYpKSB8fAorCSAgICAgICAoY3VyY2YgJiYgIUJfSVNfSU5fVFJFRShjdXJjZikpLAorCSAgICAgICAiUEFQLTgyMDU6IEZSICglYikgb3IgQ0ZSICglYikgaXMgaW52YWxpZCIsIGN1cmYsIGN1cmNmKTsKIAogCXJldHVybiBDQVJSWV9PTjsKIH0KQEAgLTEyMDMsNyArMTIwOCw3IEBACiAgKgloCWN1cnJlbnQgbGV2ZWwgb2YgdGhlIG5vZGU7CiAgKglpbnVtCWl0ZW0gbnVtYmVyIGluIFNbaF07CiAgKgltb2RlCWkgLSBpbnNlcnQsIHAgLSBwYXN0ZTsKLSAqIFJldHVybnM6CTEgLSBzY2hlZHVsZSBvY2N1cnJlZDsgCisgKiBSZXR1cm5zOgkxIC0gc2NoZWR1bGUgb2NjdXJyZWQ7CiAgKgkgICAgICAgIDAgLSBiYWxhbmNpbmcgZm9yIGhpZ2hlciBsZXZlbHMgbmVlZGVkOwogICoJICAgICAgIC0xIC0gbm8gYmFsYW5jaW5nIGZvciBoaWdoZXIgbGV2ZWxzIG5lZWRlZDsKICAqCSAgICAgICAtMiAtIG5vIGRpc2sgc3BhY2UuCkBAIC0xMjE3LDcgKzEyMjIsNyBAQAogCQkJCSAgIGNvbnRhaW5zIG5vZGUgYmVpbmcgYmFsYW5jZWQuICBUaGUgbW5lbW9uaWMgaXMKIAkJCQkgICB0aGF0IHRoZSBhdHRlbXB0ZWQgY2hhbmdlIGluIG5vZGUgc3BhY2UgdXNlZCBsZXZlbAogCQkJCSAgIGlzIGxldmJ5dGVzIGJ5dGVzLiAqLwotCSBuX3JldF92YWx1ZTsKKwkgcmV0OwogCiAJaW50IGxmcmVlLCBzZnJlZSwgcmZyZWUgLyogZnJlZSBzcGFjZSBpbiBMLCBTIGFuZCBSICovIDsKIApAQCAtMTIzOCw3ICsxMjQzLDcgQEAKIAkvKiB3ZSBwZXJmb3JtIDggY2FsbHMgdG8gZ2V0X251bV92ZXIoKS4gIEZvciBlYWNoIGNhbGwgd2UgY2FsY3VsYXRlIGZpdmUgcGFyYW1ldGVycy4KIAkgICB3aGVyZSA0dGggcGFyYW1ldGVyIGlzIHMxYnl0ZXMgYW5kIDV0aCAtIHMyYnl0ZXMKIAkgKi8KLQlzaG9ydCBzbnVtMDEyWzQwXSA9IHsgMCwgfTsJLyogczBudW0sIHMxbnVtLCBzMm51bSBmb3IgOCBjYXNlcyAKKwlzaG9ydCBzbnVtMDEyWzQwXSA9IHsgMCwgfTsJLyogczBudW0sIHMxbnVtLCBzMm51bSBmb3IgOCBjYXNlcwogCQkJCQkgICAwLDEgLSBkbyBub3Qgc2hpZnQgYW5kIGRvIG5vdCBzaGlmdCBidXQgYm90dGxlCiAJCQkJCSAgIDIgLSBzaGlmdCBvbmx5IHdob2xlIGl0ZW0gdG8gbGVmdAogCQkJCQkgICAzIC0gc2hpZnQgdG8gbGVmdCBhbmQgYm90dGxlIGFzIG11Y2ggYXMgcG9zc2libGUKQEAgLTEyNTUsMjQgKzEyNjAsMjQgQEAKIAkvKiBDYWxjdWxhdGUgYmFsYW5jZSBwYXJhbWV0ZXJzIGZvciBjcmVhdGluZyBuZXcgcm9vdC4gKi8KIAlpZiAoIVNoKSB7CiAJCWlmICghaCkKLQkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwKLQkJCQkgICAgICAgInZzLTgyMTA6IGlwX2NoZWNrX2JhbGFuY2U6IFNbMF0gY2FuIG5vdCBiZSAwIik7Ci0JCXN3aXRjaCAobl9yZXRfdmFsdWUgPSBnZXRfZW1wdHlfbm9kZXModGIsIGgpKSB7CisJCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJ2cy04MjEwIiwKKwkJCQkgICAgICAgIlNbMF0gY2FuIG5vdCBiZSAwIik7CisJCXN3aXRjaCAocmV0ID0gZ2V0X2VtcHR5X25vZGVzKHRiLCBoKSkgewogCQljYXNlIENBUlJZX09OOgogCQkJc2V0X3BhcmFtZXRlcnModGIsIGgsIDAsIDAsIDEsIE5VTEwsIC0xLCAtMSk7CiAJCQlyZXR1cm4gTk9fQkFMQU5DSU5HX05FRURFRDsJLyogbm8gYmFsYW5jaW5nIGZvciBoaWdoZXIgbGV2ZWxzIG5lZWRlZCAqLwogCiAJCWNhc2UgTk9fRElTS19TUEFDRToKIAkJY2FzZSBSRVBFQVRfU0VBUkNIOgotCQkJcmV0dXJuIG5fcmV0X3ZhbHVlOworCQkJcmV0dXJuIHJldDsKIAkJZGVmYXVsdDoKLQkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwKLQkJCQkgICAgICAgInZzLTgyMTU6IGlwX2NoZWNrX2JhbGFuY2U6IGluY29ycmVjdCByZXR1cm4gdmFsdWUgb2YgZ2V0X2VtcHR5X25vZGVzIik7CisJCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJ2cy04MjE1IiwgImluY29ycmVjdCAiCisJCQkJICAgICAgICJyZXR1cm4gdmFsdWUgb2YgZ2V0X2VtcHR5X25vZGVzIik7CiAJCX0KIAl9CiAKLQlpZiAoKG5fcmV0X3ZhbHVlID0gZ2V0X3BhcmVudHModGIsIGgpKSAhPSBDQVJSWV9PTikJLyogZ2V0IHBhcmVudHMgb2YgU1toXSBuZWlnaGJvcnMuICovCi0JCXJldHVybiBuX3JldF92YWx1ZTsKKwlpZiAoKHJldCA9IGdldF9wYXJlbnRzKHRiLCBoKSkgIT0gQ0FSUllfT04pCS8qIGdldCBwYXJlbnRzIG9mIFNbaF0gbmVpZ2hib3JzLiAqLworCQlyZXR1cm4gcmV0OwogCiAJc2ZyZWUgPSBCX0ZSRUVfU1BBQ0UoU2gpOwogCkBAIC0xMjg3LDcgKzEyOTIsNyBAQAogCiAJY3JlYXRlX3ZpcnR1YWxfbm9kZSh0YiwgaCk7CiAKLQkvKiAgCisJLyoKIAkgICBkZXRlcm1pbmUgbWF4aW1hbCBudW1iZXIgb2YgaXRlbXMgd2UgY2FuIHNoaWZ0IHRvIHRoZSBsZWZ0IG5laWdoYm9yIChpbiB0YiBzdHJ1Y3R1cmUpCiAJICAgYW5kIHRoZSBtYXhpbWFsIG51bWJlciBvZiBieXRlcyB0aGF0IGNhbiBmbG93IHRvIHRoZSBsZWZ0IG5laWdoYm9yCiAJICAgZnJvbSB0aGUgbGVmdCBtb3N0IGxpcXVpZCBpdGVtIHRoYXQgY2Fubm90IGJlIHNoaWZ0ZWQgZnJvbSBTWzBdIGVudGlyZWx5IChyZXR1cm5lZCB2YWx1ZSkKQEAgLTEzNDgsMTMgKzEzNTMsMTMgQEAKIAogCXsKIAkJaW50IGxwYXIsIHJwYXIsIG5zZXQsIGxzZXQsIHJzZXQsIGxyc2V0OwotCQkvKiAKKwkJLyoKIAkJICogcmVndWxhciBvdmVyZmxvd2luZyBvZiB0aGUgbm9kZQogCQkgKi8KIAotCQkvKiBnZXRfbnVtX3ZlciB3b3JrcyBpbiAyIG1vZGVzIChGTE9XICYgTk9fRkxPVykgCisJCS8qIGdldF9udW1fdmVyIHdvcmtzIGluIDIgbW9kZXMgKEZMT1cgJiBOT19GTE9XKQogCQkgICBscGFyLCBycGFyIC0gbnVtYmVyIG9mIGl0ZW1zIHdlIGNhbiBzaGlmdCB0byBsZWZ0L3JpZ2h0IG5laWdoYm9yIChpbmNsdWRpbmcgc3BsaXR0aW5nIGl0ZW0pCi0JCSAgIG5zZXQsIGxzZXQsIHJzZXQsIGxyc2V0IC0gc2hvd3MsIHdoZXRoZXIgZmxvd2luZyBpdGVtcyBnaXZlIGJldHRlciBwYWNraW5nIAorCQkgICBuc2V0LCBsc2V0LCByc2V0LCBscnNldCAtIHNob3dzLCB3aGV0aGVyIGZsb3dpbmcgaXRlbXMgZ2l2ZSBiZXR0ZXIgcGFja2luZwogCQkgKi8KICNkZWZpbmUgRkxPVyAxCiAjZGVmaW5lIE5PX0ZMT1cgMAkJLyogZG8gbm90IGFueSBzcGxpdHRpbmcgKi8KQEAgLTE1NDQsNyArMTU0OSw3IEBACiAgKgloCWN1cnJlbnQgbGV2ZWwgb2YgdGhlIG5vZGU7CiAgKglpbnVtCWl0ZW0gbnVtYmVyIGluIFNbaF07CiAgKgltb2RlCWkgLSBpbnNlcnQsIHAgLSBwYXN0ZTsKLSAqIFJldHVybnM6CTEgLSBzY2hlZHVsZSBvY2N1cnJlZDsgCisgKiBSZXR1cm5zOgkxIC0gc2NoZWR1bGUgb2NjdXJyZWQ7CiAgKgkgICAgICAgIDAgLSBiYWxhbmNpbmcgZm9yIGhpZ2hlciBsZXZlbHMgbmVlZGVkOwogICoJICAgICAgIC0xIC0gbm8gYmFsYW5jaW5nIGZvciBoaWdoZXIgbGV2ZWxzIG5lZWRlZDsKICAqCSAgICAgICAtMiAtIG5vIGRpc2sgc3BhY2UuCkBAIC0xNTU5LDcgKzE1NjQsNyBAQAogCS8qIFNoIGlzIHRoZSBub2RlIHdob3NlIGJhbGFuY2UgaXMgY3VycmVudGx5IGJlaW5nIGNoZWNrZWQsCiAJICAgYW5kIEZoIGlzIGl0cyBmYXRoZXIuICAqLwogCXN0cnVjdCBidWZmZXJfaGVhZCAqU2gsICpGaDsKLQlpbnQgbWF4c2l6ZSwgbl9yZXRfdmFsdWU7CisJaW50IG1heHNpemUsIHJldDsKIAlpbnQgbGZyZWUsIHJmcmVlIC8qIGZyZWUgc3BhY2UgaW4gTCBhbmQgUiAqLyA7CiAKIAlTaCA9IFBBVEhfSF9QQlVGRkVSKHRiLT50Yl9wYXRoLCBoKTsKQEAgLTE1ODQsOCArMTU4OSw4IEBACiAJCXJldHVybiBDQVJSWV9PTjsKIAl9CiAKLQlpZiAoKG5fcmV0X3ZhbHVlID0gZ2V0X3BhcmVudHModGIsIGgpKSAhPSBDQVJSWV9PTikKLQkJcmV0dXJuIG5fcmV0X3ZhbHVlOworCWlmICgocmV0ID0gZ2V0X3BhcmVudHModGIsIGgpKSAhPSBDQVJSWV9PTikKKwkJcmV0dXJuIHJldDsKIAogCS8qIGdldCBmcmVlIHNwYWNlIG9mIG5laWdoYm9ycyAqLwogCXJmcmVlID0gZ2V0X3JmcmVlKHRiLCBoKTsKQEAgLTE3MjcsNyArMTczMiw3IEBACiAgKgloCWN1cnJlbnQgbGV2ZWwgb2YgdGhlIG5vZGU7CiAgKglpbnVtCWl0ZW0gbnVtYmVyIGluIFNbaF07CiAgKgltb2RlCWkgLSBpbnNlcnQsIHAgLSBwYXN0ZTsKLSAqIFJldHVybnM6CTEgLSBzY2hlZHVsZSBvY2N1cnJlZDsgCisgKiBSZXR1cm5zOgkxIC0gc2NoZWR1bGUgb2NjdXJyZWQ7CiAgKgkgICAgICAgIDAgLSBiYWxhbmNpbmcgZm9yIGhpZ2hlciBsZXZlbHMgbmVlZGVkOwogICoJICAgICAgIC0xIC0gbm8gYmFsYW5jaW5nIGZvciBoaWdoZXIgbGV2ZWxzIG5lZWRlZDsKICAqCSAgICAgICAtMiAtIG5vIGRpc2sgc3BhY2UuCkBAIC0xNzQyLDcgKzE3NDcsNyBAQAogCSAgIGF0dGVtcHRlZCBjaGFuZ2UgaW4gbm9kZSBzcGFjZSB1c2VkIGxldmVsIGlzIGxldmJ5dGVzIGJ5dGVzLiAqLwogCWludCBsZXZieXRlczsKIAkvKiB0aGUgbWF4aW1hbCBpdGVtIHNpemUgKi8KLQlpbnQgbWF4c2l6ZSwgbl9yZXRfdmFsdWU7CisJaW50IG1heHNpemUsIHJldDsKIAkvKiBTMCBpcyB0aGUgbm9kZSB3aG9zZSBiYWxhbmNlIGlzIGN1cnJlbnRseSBiZWluZyBjaGVja2VkLAogCSAgIGFuZCBGMCBpcyBpdHMgZmF0aGVyLiAgKi8KIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKlMwLCAqRjA7CkBAIC0xNzY0LDggKzE3NjksOCBAQAogCQlyZXR1cm4gTk9fQkFMQU5DSU5HX05FRURFRDsKIAl9CiAKLQlpZiAoKG5fcmV0X3ZhbHVlID0gZ2V0X3BhcmVudHModGIsIGgpKSAhPSBDQVJSWV9PTikKLQkJcmV0dXJuIG5fcmV0X3ZhbHVlOworCWlmICgocmV0ID0gZ2V0X3BhcmVudHModGIsIGgpKSAhPSBDQVJSWV9PTikKKwkJcmV0dXJuIHJldDsKIAogCS8qIGdldCBmcmVlIHNwYWNlIG9mIG5laWdoYm9ycyAqLwogCXJmcmVlID0gZ2V0X3JmcmVlKHRiLCBoKTsKQEAgLTE4MjEsNyArMTgyNiw3IEBACiAgKgloCWN1cnJlbnQgbGV2ZWwgb2YgdGhlIG5vZGU7CiAgKglpbnVtCWl0ZW0gbnVtYmVyIGluIFNbaF07CiAgKgltb2RlCWQgLSBkZWxldGUsIGMgLSBjdXQuCi0gKiBSZXR1cm5zOgkxIC0gc2NoZWR1bGUgb2NjdXJyZWQ7IAorICogUmV0dXJuczoJMSAtIHNjaGVkdWxlIG9jY3VycmVkOwogICoJICAgICAgICAwIC0gYmFsYW5jaW5nIGZvciBoaWdoZXIgbGV2ZWxzIG5lZWRlZDsKICAqCSAgICAgICAtMSAtIG5vIGJhbGFuY2luZyBmb3IgaGlnaGVyIGxldmVscyBuZWVkZWQ7CiAgKgkgICAgICAgLTIgLSBubyBkaXNrIHNwYWNlLgpAQCAtMTg1MCw3ICsxODU1LDcgQEAKICAqCWgJY3VycmVudCBsZXZlbCBvZiB0aGUgbm9kZTsKICAqCWludW0JaXRlbSBudW1iZXIgaW4gU1toXTsKICAqCW1vZGUJaSAtIGluc2VydCwgcCAtIHBhc3RlLCBkIC0gZGVsZXRlLCBjIC0gY3V0LgotICogUmV0dXJuczoJMSAtIHNjaGVkdWxlIG9jY3VycmVkOyAKKyAqIFJldHVybnM6CTEgLSBzY2hlZHVsZSBvY2N1cnJlZDsKICAqCSAgICAgICAgMCAtIGJhbGFuY2luZyBmb3IgaGlnaGVyIGxldmVscyBuZWVkZWQ7CiAgKgkgICAgICAgLTEgLSBubyBiYWxhbmNpbmcgZm9yIGhpZ2hlciBsZXZlbHMgbmVlZGVkOwogICoJICAgICAgIC0yIC0gbm8gZGlzayBzcGFjZS4KQEAgLTE4ODQsMTM3ICsxODg5LDEzOCBAQAogfQogCiAvKiBDaGVjayB3aGV0aGVyIHBhcmVudCBhdCB0aGUgcGF0aCBpcyB0aGUgcmVhbGx5IHBhcmVudCBvZiB0aGUgY3VycmVudCBub2RlLiovCi1zdGF0aWMgaW50IGdldF9kaXJlY3RfcGFyZW50KHN0cnVjdCB0cmVlX2JhbGFuY2UgKnBfc190YiwgaW50IG5faCkKK3N0YXRpYyBpbnQgZ2V0X2RpcmVjdF9wYXJlbnQoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIsIGludCBoKQogewotCXN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX2JoOwotCXN0cnVjdCB0cmVlcGF0aCAqcF9zX3BhdGggPSBwX3NfdGItPnRiX3BhdGg7Ci0JaW50IG5fcG9zaXRpb24sCi0JICAgIG5fcGF0aF9vZmZzZXQgPSBQQVRIX0hfUEFUSF9PRkZTRVQocF9zX3RiLT50Yl9wYXRoLCBuX2gpOworCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CisJc3RydWN0IHRyZWVwYXRoICpwYXRoID0gdGItPnRiX3BhdGg7CisJaW50IHBvc2l0aW9uLAorCSAgICBwYXRoX29mZnNldCA9IFBBVEhfSF9QQVRIX09GRlNFVCh0Yi0+dGJfcGF0aCwgaCk7CiAKIAkvKiBXZSBhcmUgaW4gdGhlIHJvb3Qgb3IgaW4gdGhlIG5ldyByb290LiAqLwotCWlmIChuX3BhdGhfb2Zmc2V0IDw9IEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQpIHsKKwlpZiAocGF0aF9vZmZzZXQgPD0gRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCkgewogCi0JCVJGQUxTRShuX3BhdGhfb2Zmc2V0IDwgRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCAtIDEsCisJCVJGQUxTRShwYXRoX29mZnNldCA8IEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQgLSAxLAogCQkgICAgICAgIlBBUC04MjYwOiBpbnZhbGlkIG9mZnNldCBpbiB0aGUgcGF0aCIpOwogCi0JCWlmIChQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19wYXRoLCBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUKS0+Ci0JCSAgICBiX2Jsb2NrbnIgPT0gU0JfUk9PVF9CTE9DSyhwX3NfdGItPnRiX3NiKSkgeworCQlpZiAoUEFUSF9PRkZTRVRfUEJVRkZFUihwYXRoLCBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUKS0+CisJCSAgICBiX2Jsb2NrbnIgPT0gU0JfUk9PVF9CTE9DSyh0Yi0+dGJfc2IpKSB7CiAJCQkvKiBSb290IGlzIG5vdCBjaGFuZ2VkLiAqLwotCQkJUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfcGF0aCwgbl9wYXRoX29mZnNldCAtIDEpID0gTlVMTDsKLQkJCVBBVEhfT0ZGU0VUX1BPU0lUSU9OKHBfc19wYXRoLCBuX3BhdGhfb2Zmc2V0IC0gMSkgPSAwOworCQkJUEFUSF9PRkZTRVRfUEJVRkZFUihwYXRoLCBwYXRoX29mZnNldCAtIDEpID0gTlVMTDsKKwkJCVBBVEhfT0ZGU0VUX1BPU0lUSU9OKHBhdGgsIHBhdGhfb2Zmc2V0IC0gMSkgPSAwOwogCQkJcmV0dXJuIENBUlJZX09OOwogCQl9CiAJCXJldHVybiBSRVBFQVRfU0VBUkNIOwkvKiBSb290IGlzIGNoYW5nZWQgYW5kIHdlIG11c3QgcmVjYWxjdWxhdGUgdGhlIHBhdGguICovCiAJfQogCiAJaWYgKCFCX0lTX0lOX1RSRUUKLQkgICAgKHBfc19iaCA9IFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX3BhdGgsIG5fcGF0aF9vZmZzZXQgLSAxKSkpCisJICAgIChiaCA9IFBBVEhfT0ZGU0VUX1BCVUZGRVIocGF0aCwgcGF0aF9vZmZzZXQgLSAxKSkpCiAJCXJldHVybiBSRVBFQVRfU0VBUkNIOwkvKiBQYXJlbnQgaW4gdGhlIHBhdGggaXMgbm90IGluIHRoZSB0cmVlLiAqLwogCi0JaWYgKChuX3Bvc2l0aW9uID0KLQkgICAgIFBBVEhfT0ZGU0VUX1BPU0lUSU9OKHBfc19wYXRoLAotCQkJCSAgbl9wYXRoX29mZnNldCAtIDEpKSA+IEJfTlJfSVRFTVMocF9zX2JoKSkKKwlpZiAoKHBvc2l0aW9uID0KKwkgICAgIFBBVEhfT0ZGU0VUX1BPU0lUSU9OKHBhdGgsCisJCQkJICBwYXRoX29mZnNldCAtIDEpKSA+IEJfTlJfSVRFTVMoYmgpKQogCQlyZXR1cm4gUkVQRUFUX1NFQVJDSDsKIAotCWlmIChCX05fQ0hJTERfTlVNKHBfc19iaCwgbl9wb3NpdGlvbikgIT0KLQkgICAgUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfcGF0aCwgbl9wYXRoX29mZnNldCktPmJfYmxvY2tucikKKwlpZiAoQl9OX0NISUxEX05VTShiaCwgcG9zaXRpb24pICE9CisJICAgIFBBVEhfT0ZGU0VUX1BCVUZGRVIocGF0aCwgcGF0aF9vZmZzZXQpLT5iX2Jsb2NrbnIpCiAJCS8qIFBhcmVudCBpbiB0aGUgcGF0aCBpcyBub3QgcGFyZW50IG9mIHRoZSBjdXJyZW50IG5vZGUgaW4gdGhlIHRyZWUuICovCiAJCXJldHVybiBSRVBFQVRfU0VBUkNIOwogCi0JaWYgKGJ1ZmZlcl9sb2NrZWQocF9zX2JoKSkgewotCQlfX3dhaXRfb25fYnVmZmVyKHBfc19iaCk7Ci0JCWlmIChGSUxFU1lTVEVNX0NIQU5HRURfVEIocF9zX3RiKSkKKwlpZiAoYnVmZmVyX2xvY2tlZChiaCkpIHsKKwkJX193YWl0X29uX2J1ZmZlcihiaCk7CisJCWlmIChGSUxFU1lTVEVNX0NIQU5HRURfVEIodGIpKQogCQkJcmV0dXJuIFJFUEVBVF9TRUFSQ0g7CiAJfQogCiAJcmV0dXJuIENBUlJZX09OOwkvKiBQYXJlbnQgaW4gdGhlIHBhdGggaXMgdW5sb2NrZWQgYW5kIHJlYWxseSBwYXJlbnQgb2YgdGhlIGN1cnJlbnQgbm9kZS4gICovCiB9CiAKLS8qIFVzaW5nIGxudW1bbl9oXSBhbmQgcm51bVtuX2hdIHdlIHNob3VsZCBkZXRlcm1pbmUgd2hhdCBuZWlnaGJvcnMKLSAqIG9mIFNbbl9oXSB3ZQotICogbmVlZCBpbiBvcmRlciB0byBiYWxhbmNlIFNbbl9oXSwgYW5kIGdldCB0aGVtIGlmIG5lY2Vzc2FyeS4KKy8qIFVzaW5nIGxudW1baF0gYW5kIHJudW1baF0gd2Ugc2hvdWxkIGRldGVybWluZSB3aGF0IG5laWdoYm9ycworICogb2YgU1toXSB3ZQorICogbmVlZCBpbiBvcmRlciB0byBiYWxhbmNlIFNbaF0sIGFuZCBnZXQgdGhlbSBpZiBuZWNlc3NhcnkuCiAgKiBSZXR1cm5zOglTQ0hFRFVMRV9PQ0NVUlJFRCAtIHNjaGVkdWxlIG9jY3VycmVkIHdoaWxlIHRoZSBmdW5jdGlvbiB3b3JrZWQ7CiAgKgkgICAgICAgIENBUlJZX09OIC0gc2NoZWR1bGUgZGlkbid0IG9jY3VyIHdoaWxlIHRoZSBmdW5jdGlvbiB3b3JrZWQ7CiAgKi8KLXN0YXRpYyBpbnQgZ2V0X25laWdoYm9ycyhzdHJ1Y3QgdHJlZV9iYWxhbmNlICpwX3NfdGIsIGludCBuX2gpCitzdGF0aWMgaW50IGdldF9uZWlnaGJvcnMoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIsIGludCBoKQogewotCWludCBuX2NoaWxkX3Bvc2l0aW9uLAotCSAgICBuX3BhdGhfb2Zmc2V0ID0gUEFUSF9IX1BBVEhfT0ZGU0VUKHBfc190Yi0+dGJfcGF0aCwgbl9oICsgMSk7Ci0JdW5zaWduZWQgbG9uZyBuX3Nvbl9udW1iZXI7Ci0Jc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IgPSBwX3NfdGItPnRiX3NiOwotCXN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX2JoOworCWludCBjaGlsZF9wb3NpdGlvbiwKKwkgICAgcGF0aF9vZmZzZXQgPSBQQVRIX0hfUEFUSF9PRkZTRVQodGItPnRiX3BhdGgsIGggKyAxKTsKKwl1bnNpZ25lZCBsb25nIHNvbl9udW1iZXI7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IHRiLT50Yl9zYjsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOwogCi0JUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIGdldF9uZWlnaGJvcnNbbl9oXSk7CisJUFJPQ19JTkZPX0lOQyhzYiwgZ2V0X25laWdoYm9yc1toXSk7CiAKLQlpZiAocF9zX3RiLT5sbnVtW25faF0pIHsKLQkJLyogV2UgbmVlZCBsZWZ0IG5laWdoYm9yIHRvIGJhbGFuY2UgU1tuX2hdLiAqLwotCQlQUk9DX0lORk9fSU5DKHBfc19zYiwgbmVlZF9sX25laWdoYm9yW25faF0pOwotCQlwX3NfYmggPSBQQVRIX09GRlNFVF9QQlVGRkVSKHBfc190Yi0+dGJfcGF0aCwgbl9wYXRoX29mZnNldCk7CisJaWYgKHRiLT5sbnVtW2hdKSB7CisJCS8qIFdlIG5lZWQgbGVmdCBuZWlnaGJvciB0byBiYWxhbmNlIFNbaF0uICovCisJCVBST0NfSU5GT19JTkMoc2IsIG5lZWRfbF9uZWlnaGJvcltoXSk7CisJCWJoID0gUEFUSF9PRkZTRVRfUEJVRkZFUih0Yi0+dGJfcGF0aCwgcGF0aF9vZmZzZXQpOwogCi0JCVJGQUxTRShwX3NfYmggPT0gcF9zX3RiLT5GTFtuX2hdICYmCi0JCSAgICAgICAhUEFUSF9PRkZTRVRfUE9TSVRJT04ocF9zX3RiLT50Yl9wYXRoLCBuX3BhdGhfb2Zmc2V0KSwKKwkJUkZBTFNFKGJoID09IHRiLT5GTFtoXSAmJgorCQkgICAgICAgIVBBVEhfT0ZGU0VUX1BPU0lUSU9OKHRiLT50Yl9wYXRoLCBwYXRoX29mZnNldCksCiAJCSAgICAgICAiUEFQLTgyNzA6IGludmFsaWQgcG9zaXRpb24gaW4gdGhlIHBhcmVudCIpOwogCi0JCW5fY2hpbGRfcG9zaXRpb24gPQotCQkgICAgKHBfc19iaCA9PQotCQkgICAgIHBfc190Yi0+Rkxbbl9oXSkgPyBwX3NfdGItPmxrZXlbbl9oXSA6IEJfTlJfSVRFTVMocF9zX3RiLT4KLQkJCQkJCQkJICAgICAgIEZMW25faF0pOwotCQluX3Nvbl9udW1iZXIgPSBCX05fQ0hJTERfTlVNKHBfc190Yi0+Rkxbbl9oXSwgbl9jaGlsZF9wb3NpdGlvbik7Ci0JCXBfc19iaCA9IHNiX2JyZWFkKHBfc19zYiwgbl9zb25fbnVtYmVyKTsKLQkJaWYgKCFwX3NfYmgpCisJCWNoaWxkX3Bvc2l0aW9uID0KKwkJICAgIChiaCA9PQorCQkgICAgIHRiLT5GTFtoXSkgPyB0Yi0+bGtleVtoXSA6IEJfTlJfSVRFTVModGItPgorCQkJCQkJCQkgICAgICAgRkxbaF0pOworCQlzb25fbnVtYmVyID0gQl9OX0NISUxEX05VTSh0Yi0+RkxbaF0sIGNoaWxkX3Bvc2l0aW9uKTsKKwkJYmggPSBzYl9icmVhZChzYiwgc29uX251bWJlcik7CisJCWlmICghYmgpCiAJCQlyZXR1cm4gSU9fRVJST1I7Ci0JCWlmIChGSUxFU1lTVEVNX0NIQU5HRURfVEIocF9zX3RiKSkgewotCQkJZGVjcmVtZW50X2Jjb3VudChwX3NfYmgpOwotCQkJUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIGdldF9uZWlnaGJvcnNfcmVzdGFydFtuX2hdKTsKKwkJaWYgKEZJTEVTWVNURU1fQ0hBTkdFRF9UQih0YikpIHsKKwkJCWJyZWxzZShiaCk7CisJCQlQUk9DX0lORk9fSU5DKHNiLCBnZXRfbmVpZ2hib3JzX3Jlc3RhcnRbaF0pOwogCQkJcmV0dXJuIFJFUEVBVF9TRUFSQ0g7CiAJCX0KIAotCQlSRkFMU0UoIUJfSVNfSU5fVFJFRShwX3NfdGItPkZMW25faF0pIHx8Ci0JCSAgICAgICBuX2NoaWxkX3Bvc2l0aW9uID4gQl9OUl9JVEVNUyhwX3NfdGItPkZMW25faF0pIHx8Ci0JCSAgICAgICBCX05fQ0hJTERfTlVNKHBfc190Yi0+Rkxbbl9oXSwgbl9jaGlsZF9wb3NpdGlvbikgIT0KLQkJICAgICAgIHBfc19iaC0+Yl9ibG9ja25yLCAiUEFQLTgyNzU6IGludmFsaWQgcGFyZW50Iik7Ci0JCVJGQUxTRSghQl9JU19JTl9UUkVFKHBfc19iaCksICJQQVAtODI4MDogaW52YWxpZCBjaGlsZCIpOwotCQlSRkFMU0UoIW5faCAmJgotCQkgICAgICAgQl9GUkVFX1NQQUNFKHBfc19iaCkgIT0KLQkJICAgICAgIE1BWF9DSElMRF9TSVpFKHBfc19iaCkgLQotCQkgICAgICAgZGNfc2l6ZShCX05fQ0hJTEQocF9zX3RiLT5GTFswXSwgbl9jaGlsZF9wb3NpdGlvbikpLAorCQlSRkFMU0UoIUJfSVNfSU5fVFJFRSh0Yi0+RkxbaF0pIHx8CisJCSAgICAgICBjaGlsZF9wb3NpdGlvbiA+IEJfTlJfSVRFTVModGItPkZMW2hdKSB8fAorCQkgICAgICAgQl9OX0NISUxEX05VTSh0Yi0+RkxbaF0sIGNoaWxkX3Bvc2l0aW9uKSAhPQorCQkgICAgICAgYmgtPmJfYmxvY2tuciwgIlBBUC04Mjc1OiBpbnZhbGlkIHBhcmVudCIpOworCQlSRkFMU0UoIUJfSVNfSU5fVFJFRShiaCksICJQQVAtODI4MDogaW52YWxpZCBjaGlsZCIpOworCQlSRkFMU0UoIWggJiYKKwkJICAgICAgIEJfRlJFRV9TUEFDRShiaCkgIT0KKwkJICAgICAgIE1BWF9DSElMRF9TSVpFKGJoKSAtCisJCSAgICAgICBkY19zaXplKEJfTl9DSElMRCh0Yi0+RkxbMF0sIGNoaWxkX3Bvc2l0aW9uKSksCiAJCSAgICAgICAiUEFQLTgyOTA6IGludmFsaWQgY2hpbGQgc2l6ZSBvZiBsZWZ0IG5laWdoYm9yIik7CiAKLQkJZGVjcmVtZW50X2Jjb3VudChwX3NfdGItPkxbbl9oXSk7Ci0JCXBfc190Yi0+TFtuX2hdID0gcF9zX2JoOworCQlicmVsc2UodGItPkxbaF0pOworCQl0Yi0+TFtoXSA9IGJoOwogCX0KIAotCWlmIChwX3NfdGItPnJudW1bbl9oXSkgewkvKiBXZSBuZWVkIHJpZ2h0IG5laWdoYm9yIHRvIGJhbGFuY2UgU1tuX3BhdGhfb2Zmc2V0XS4gKi8KLQkJUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIG5lZWRfcl9uZWlnaGJvcltuX2hdKTsKLQkJcF9zX2JoID0gUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfdGItPnRiX3BhdGgsIG5fcGF0aF9vZmZzZXQpOworCS8qIFdlIG5lZWQgcmlnaHQgbmVpZ2hib3IgdG8gYmFsYW5jZSBTW3BhdGhfb2Zmc2V0XS4gKi8KKwlpZiAodGItPnJudW1baF0pIHsJLyogV2UgbmVlZCByaWdodCBuZWlnaGJvciB0byBiYWxhbmNlIFNbcGF0aF9vZmZzZXRdLiAqLworCQlQUk9DX0lORk9fSU5DKHNiLCBuZWVkX3JfbmVpZ2hib3JbaF0pOworCQliaCA9IFBBVEhfT0ZGU0VUX1BCVUZGRVIodGItPnRiX3BhdGgsIHBhdGhfb2Zmc2V0KTsKIAotCQlSRkFMU0UocF9zX2JoID09IHBfc190Yi0+RlJbbl9oXSAmJgotCQkgICAgICAgUEFUSF9PRkZTRVRfUE9TSVRJT04ocF9zX3RiLT50Yl9wYXRoLAotCQkJCQkgICAgbl9wYXRoX29mZnNldCkgPj0KLQkJICAgICAgIEJfTlJfSVRFTVMocF9zX2JoKSwKKwkJUkZBTFNFKGJoID09IHRiLT5GUltoXSAmJgorCQkgICAgICAgUEFUSF9PRkZTRVRfUE9TSVRJT04odGItPnRiX3BhdGgsCisJCQkJCSAgICBwYXRoX29mZnNldCkgPj0KKwkJICAgICAgIEJfTlJfSVRFTVMoYmgpLAogCQkgICAgICAgIlBBUC04Mjk1OiBpbnZhbGlkIHBvc2l0aW9uIGluIHRoZSBwYXJlbnQiKTsKIAotCQluX2NoaWxkX3Bvc2l0aW9uID0KLQkJICAgIChwX3NfYmggPT0gcF9zX3RiLT5GUltuX2hdKSA/IHBfc190Yi0+cmtleVtuX2hdICsgMSA6IDA7Ci0JCW5fc29uX251bWJlciA9IEJfTl9DSElMRF9OVU0ocF9zX3RiLT5GUltuX2hdLCBuX2NoaWxkX3Bvc2l0aW9uKTsKLQkJcF9zX2JoID0gc2JfYnJlYWQocF9zX3NiLCBuX3Nvbl9udW1iZXIpOwotCQlpZiAoIXBfc19iaCkKKwkJY2hpbGRfcG9zaXRpb24gPQorCQkgICAgKGJoID09IHRiLT5GUltoXSkgPyB0Yi0+cmtleVtoXSArIDEgOiAwOworCQlzb25fbnVtYmVyID0gQl9OX0NISUxEX05VTSh0Yi0+RlJbaF0sIGNoaWxkX3Bvc2l0aW9uKTsKKwkJYmggPSBzYl9icmVhZChzYiwgc29uX251bWJlcik7CisJCWlmICghYmgpCiAJCQlyZXR1cm4gSU9fRVJST1I7Ci0JCWlmIChGSUxFU1lTVEVNX0NIQU5HRURfVEIocF9zX3RiKSkgewotCQkJZGVjcmVtZW50X2Jjb3VudChwX3NfYmgpOwotCQkJUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIGdldF9uZWlnaGJvcnNfcmVzdGFydFtuX2hdKTsKKwkJaWYgKEZJTEVTWVNURU1fQ0hBTkdFRF9UQih0YikpIHsKKwkJCWJyZWxzZShiaCk7CisJCQlQUk9DX0lORk9fSU5DKHNiLCBnZXRfbmVpZ2hib3JzX3Jlc3RhcnRbaF0pOwogCQkJcmV0dXJuIFJFUEVBVF9TRUFSQ0g7CiAJCX0KLQkJZGVjcmVtZW50X2Jjb3VudChwX3NfdGItPlJbbl9oXSk7Ci0JCXBfc190Yi0+UltuX2hdID0gcF9zX2JoOworCQlicmVsc2UodGItPlJbaF0pOworCQl0Yi0+UltoXSA9IGJoOwogCi0JCVJGQUxTRSghbl9oCi0JCSAgICAgICAmJiBCX0ZSRUVfU1BBQ0UocF9zX2JoKSAhPQotCQkgICAgICAgTUFYX0NISUxEX1NJWkUocF9zX2JoKSAtCi0JCSAgICAgICBkY19zaXplKEJfTl9DSElMRChwX3NfdGItPkZSWzBdLCBuX2NoaWxkX3Bvc2l0aW9uKSksCisJCVJGQUxTRSghaAorCQkgICAgICAgJiYgQl9GUkVFX1NQQUNFKGJoKSAhPQorCQkgICAgICAgTUFYX0NISUxEX1NJWkUoYmgpIC0KKwkJICAgICAgIGRjX3NpemUoQl9OX0NISUxEKHRiLT5GUlswXSwgY2hpbGRfcG9zaXRpb24pKSwKIAkJICAgICAgICJQQVAtODMwMDogaW52YWxpZCBjaGlsZCBzaXplIG9mIHJpZ2h0IG5laWdoYm9yICglZCAhPSAlZCAtICVkKSIsCi0JCSAgICAgICBCX0ZSRUVfU1BBQ0UocF9zX2JoKSwgTUFYX0NISUxEX1NJWkUocF9zX2JoKSwKLQkJICAgICAgIGRjX3NpemUoQl9OX0NISUxEKHBfc190Yi0+RlJbMF0sIG5fY2hpbGRfcG9zaXRpb24pKSk7CisJCSAgICAgICBCX0ZSRUVfU1BBQ0UoYmgpLCBNQVhfQ0hJTERfU0laRShiaCksCisJCSAgICAgICBkY19zaXplKEJfTl9DSElMRCh0Yi0+RlJbMF0sIGNoaWxkX3Bvc2l0aW9uKSkpOwogCiAJfQogCXJldHVybiBDQVJSWV9PTjsKQEAgLTIwODgsNTIgKzIwOTQsNDYgQEAKIH0KIAogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwotc3RhdGljIHZvaWQgdGJfYnVmZmVyX3Nhbml0eV9jaGVjayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKLQkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBfc19iaCwKK3N0YXRpYyB2b2lkIHRiX2J1ZmZlcl9zYW5pdHlfY2hlY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCQkJCSAgIGNvbnN0IGNoYXIgKmRlc2NyLCBpbnQgbGV2ZWwpCiB7Ci0JaWYgKHBfc19iaCkgewotCQlpZiAoYXRvbWljX3JlYWQoJihwX3NfYmgtPmJfY291bnQpKSA8PSAwKSB7CisJaWYgKGJoKSB7CisJCWlmIChhdG9taWNfcmVhZCgmKGJoLT5iX2NvdW50KSkgPD0gMCkKIAotCQkJcmVpc2VyZnNfcGFuaWMocF9zX3NiLAotCQkJCSAgICAgICAiam1hY2QtMTogdGJfYnVmZmVyX3Nhbml0eV9jaGVjaygpOiBuZWdhdGl2ZSBvciB6ZXJvIHJlZmVyZW5jZSBjb3VudGVyIGZvciBidWZmZXIgJXNbJWRdICglYilcbiIsCi0JCQkJICAgICAgIGRlc2NyLCBsZXZlbCwgcF9zX2JoKTsKLQkJfQorCQkJcmVpc2VyZnNfcGFuaWMoc2IsICJqbWFjZC0xIiwgIm5lZ2F0aXZlIG9yIHplcm8gIgorCQkJCSAgICAgICAicmVmZXJlbmNlIGNvdW50ZXIgZm9yIGJ1ZmZlciAlc1slZF0gIgorCQkJCSAgICAgICAiKCViKSIsIGRlc2NyLCBsZXZlbCwgYmgpOwogCi0JCWlmICghYnVmZmVyX3VwdG9kYXRlKHBfc19iaCkpIHsKLQkJCXJlaXNlcmZzX3BhbmljKHBfc19zYiwKLQkJCQkgICAgICAgImptYWNkLTI6IHRiX2J1ZmZlcl9zYW5pdHlfY2hlY2soKTogYnVmZmVyIGlzIG5vdCB1cCB0byBkYXRlICVzWyVkXSAoJWIpXG4iLAotCQkJCSAgICAgICBkZXNjciwgbGV2ZWwsIHBfc19iaCk7Ci0JCX0KKwkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKQorCQkJcmVpc2VyZnNfcGFuaWMoc2IsICJqbWFjZC0yIiwgImJ1ZmZlciBpcyBub3QgdXAgIgorCQkJCSAgICAgICAidG8gZGF0ZSAlc1slZF0gKCViKSIsCisJCQkJICAgICAgIGRlc2NyLCBsZXZlbCwgYmgpOwogCi0JCWlmICghQl9JU19JTl9UUkVFKHBfc19iaCkpIHsKLQkJCXJlaXNlcmZzX3BhbmljKHBfc19zYiwKLQkJCQkgICAgICAgImptYWNkLTM6IHRiX2J1ZmZlcl9zYW5pdHlfY2hlY2soKTogYnVmZmVyIGlzIG5vdCBpbiB0cmVlICVzWyVkXSAoJWIpXG4iLAotCQkJCSAgICAgICBkZXNjciwgbGV2ZWwsIHBfc19iaCk7Ci0JCX0KKwkJaWYgKCFCX0lTX0lOX1RSRUUoYmgpKQorCQkJcmVpc2VyZnNfcGFuaWMoc2IsICJqbWFjZC0zIiwgImJ1ZmZlciBpcyBub3QgIgorCQkJCSAgICAgICAiaW4gdHJlZSAlc1slZF0gKCViKSIsCisJCQkJICAgICAgIGRlc2NyLCBsZXZlbCwgYmgpOwogCi0JCWlmIChwX3NfYmgtPmJfYmRldiAhPSBwX3Nfc2ItPnNfYmRldikgewotCQkJcmVpc2VyZnNfcGFuaWMocF9zX3NiLAotCQkJCSAgICAgICAiam1hY2QtNDogdGJfYnVmZmVyX3Nhbml0eV9jaGVjaygpOiBidWZmZXIgaGFzIHdyb25nIGRldmljZSAlc1slZF0gKCViKVxuIiwKLQkJCQkgICAgICAgZGVzY3IsIGxldmVsLCBwX3NfYmgpOwotCQl9CisJCWlmIChiaC0+Yl9iZGV2ICE9IHNiLT5zX2JkZXYpCisJCQlyZWlzZXJmc19wYW5pYyhzYiwgImptYWNkLTQiLCAiYnVmZmVyIGhhcyB3cm9uZyAiCisJCQkJICAgICAgICJkZXZpY2UgJXNbJWRdICglYikiLAorCQkJCSAgICAgICBkZXNjciwgbGV2ZWwsIGJoKTsKIAotCQlpZiAocF9zX2JoLT5iX3NpemUgIT0gcF9zX3NiLT5zX2Jsb2Nrc2l6ZSkgewotCQkJcmVpc2VyZnNfcGFuaWMocF9zX3NiLAotCQkJCSAgICAgICAiam1hY2QtNTogdGJfYnVmZmVyX3Nhbml0eV9jaGVjaygpOiBidWZmZXIgaGFzIHdyb25nIGJsb2Nrc2l6ZSAlc1slZF0gKCViKVxuIiwKLQkJCQkgICAgICAgZGVzY3IsIGxldmVsLCBwX3NfYmgpOwotCQl9CisJCWlmIChiaC0+Yl9zaXplICE9IHNiLT5zX2Jsb2Nrc2l6ZSkKKwkJCXJlaXNlcmZzX3BhbmljKHNiLCAiam1hY2QtNSIsICJidWZmZXIgaGFzIHdyb25nICIKKwkJCQkgICAgICAgImJsb2Nrc2l6ZSAlc1slZF0gKCViKSIsCisJCQkJICAgICAgIGRlc2NyLCBsZXZlbCwgYmgpOwogCi0JCWlmIChwX3NfYmgtPmJfYmxvY2tuciA+IFNCX0JMT0NLX0NPVU5UKHBfc19zYikpIHsKLQkJCXJlaXNlcmZzX3BhbmljKHBfc19zYiwKLQkJCQkgICAgICAgImptYWNkLTY6IHRiX2J1ZmZlcl9zYW5pdHlfY2hlY2soKTogYnVmZmVyIGJsb2NrIG51bWJlciB0b28gaGlnaCAlc1slZF0gKCViKVxuIiwKLQkJCQkgICAgICAgZGVzY3IsIGxldmVsLCBwX3NfYmgpOwotCQl9CisJCWlmIChiaC0+Yl9ibG9ja25yID4gU0JfQkxPQ0tfQ09VTlQoc2IpKQorCQkJcmVpc2VyZnNfcGFuaWMoc2IsICJqbWFjZC02IiwgImJ1ZmZlciBibG9jayAiCisJCQkJICAgICAgICJudW1iZXIgdG9vIGhpZ2ggJXNbJWRdICglYikiLAorCQkJCSAgICAgICBkZXNjciwgbGV2ZWwsIGJoKTsKIAl9CiB9CiAjZWxzZQotc3RhdGljIHZvaWQgdGJfYnVmZmVyX3Nhbml0eV9jaGVjayhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKLQkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBfc19iaCwKK3N0YXRpYyB2b2lkIHRiX2J1ZmZlcl9zYW5pdHlfY2hlY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCQkgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCQkJCSAgIGNvbnN0IGNoYXIgKmRlc2NyLCBpbnQgbGV2ZWwpCiB7OwogfQpAQCAtMjE0NCw3ICsyMTQ0LDcgQEAKIAlyZXR1cm4gcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChzLCBiaCwgMCk7CiB9CiAKLXN0YXRpYyBpbnQgd2FpdF90Yl9idWZmZXJzX3VudGlsX3VubG9ja2VkKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnBfc190YikKK3N0YXRpYyBpbnQgd2FpdF90Yl9idWZmZXJzX3VudGlsX3VubG9ja2VkKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiKQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqbG9ja2VkOwogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwpAQCAtMjE1Niw5NSArMjE1Niw5NCBAQAogCiAJCWxvY2tlZCA9IE5VTEw7CiAKLQkJZm9yIChpID0gcF9zX3RiLT50Yl9wYXRoLT5wYXRoX2xlbmd0aDsKKwkJZm9yIChpID0gdGItPnRiX3BhdGgtPnBhdGhfbGVuZ3RoOwogCQkgICAgICFsb2NrZWQgJiYgaSA+IElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVDsgaS0tKSB7Ci0JCQlpZiAoUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfdGItPnRiX3BhdGgsIGkpKSB7CisJCQlpZiAoUEFUSF9PRkZTRVRfUEJVRkZFUih0Yi0+dGJfcGF0aCwgaSkpIHsKIAkJCQkvKiBpZiBJIHVuZGVyc3RhbmQgY29ycmVjdGx5LCB3ZSBjYW4gb25seSBiZSBzdXJlIHRoZSBsYXN0IGJ1ZmZlcgogCQkJCSAqKiBpbiB0aGUgcGF0aCBpcyBpbiB0aGUgdHJlZSAtLWNsbQogCQkJCSAqLwogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwotCQkJCWlmIChQQVRIX1BMQVNUX0JVRkZFUihwX3NfdGItPnRiX3BhdGgpID09Ci0JCQkJICAgIFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX3RiLT50Yl9wYXRoLCBpKSkgewotCQkJCQl0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKHBfc190Yi0+dGJfc2IsCisJCQkJaWYgKFBBVEhfUExBU1RfQlVGRkVSKHRiLT50Yl9wYXRoKSA9PQorCQkJCSAgICBQQVRIX09GRlNFVF9QQlVGRkVSKHRiLT50Yl9wYXRoLCBpKSkKKwkJCQkJdGJfYnVmZmVyX3Nhbml0eV9jaGVjayh0Yi0+dGJfc2IsCiAJCQkJCQkJICAgICAgIFBBVEhfT0ZGU0VUX1BCVUZGRVIKLQkJCQkJCQkgICAgICAgKHBfc190Yi0+dGJfcGF0aCwKKwkJCQkJCQkgICAgICAgKHRiLT50Yl9wYXRoLAogCQkJCQkJCQlpKSwgIlMiLAotCQkJCQkJCSAgICAgICBwX3NfdGItPnRiX3BhdGgtPgorCQkJCQkJCSAgICAgICB0Yi0+dGJfcGF0aC0+CiAJCQkJCQkJICAgICAgIHBhdGhfbGVuZ3RoIC0gaSk7Ci0JCQkJfQogI2VuZGlmCi0JCQkJaWYgKCFjbGVhcl9hbGxfZGlydHlfYml0cyhwX3NfdGItPnRiX3NiLAorCQkJCWlmICghY2xlYXJfYWxsX2RpcnR5X2JpdHModGItPnRiX3NiLAogCQkJCQkJCSAgUEFUSF9PRkZTRVRfUEJVRkZFUgotCQkJCQkJCSAgKHBfc190Yi0+dGJfcGF0aCwKKwkJCQkJCQkgICh0Yi0+dGJfcGF0aCwKIAkJCQkJCQkgICBpKSkpIHsKIAkJCQkJbG9ja2VkID0KLQkJCQkJICAgIFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX3RiLT50Yl9wYXRoLAorCQkJCQkgICAgUEFUSF9PRkZTRVRfUEJVRkZFUih0Yi0+dGJfcGF0aCwKIAkJCQkJCQkJaSk7CiAJCQkJfQogCQkJfQogCQl9CiAKLQkJZm9yIChpID0gMDsgIWxvY2tlZCAmJiBpIDwgTUFYX0hFSUdIVCAmJiBwX3NfdGItPmluc2VydF9zaXplW2ldOworCQlmb3IgKGkgPSAwOyAhbG9ja2VkICYmIGkgPCBNQVhfSEVJR0hUICYmIHRiLT5pbnNlcnRfc2l6ZVtpXTsKIAkJICAgICBpKyspIHsKIAotCQkJaWYgKHBfc190Yi0+bG51bVtpXSkgeworCQkJaWYgKHRiLT5sbnVtW2ldKSB7CiAKLQkJCQlpZiAocF9zX3RiLT5MW2ldKSB7Ci0JCQkJCXRiX2J1ZmZlcl9zYW5pdHlfY2hlY2socF9zX3RiLT50Yl9zYiwKLQkJCQkJCQkgICAgICAgcF9zX3RiLT5MW2ldLAorCQkJCWlmICh0Yi0+TFtpXSkgeworCQkJCQl0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKHRiLT50Yl9zYiwKKwkJCQkJCQkgICAgICAgdGItPkxbaV0sCiAJCQkJCQkJICAgICAgICJMIiwgaSk7CiAJCQkJCWlmICghY2xlYXJfYWxsX2RpcnR5X2JpdHMKLQkJCQkJICAgIChwX3NfdGItPnRiX3NiLCBwX3NfdGItPkxbaV0pKQotCQkJCQkJbG9ja2VkID0gcF9zX3RiLT5MW2ldOworCQkJCQkgICAgKHRiLT50Yl9zYiwgdGItPkxbaV0pKQorCQkJCQkJbG9ja2VkID0gdGItPkxbaV07CiAJCQkJfQogCi0JCQkJaWYgKCFsb2NrZWQgJiYgcF9zX3RiLT5GTFtpXSkgewotCQkJCQl0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKHBfc190Yi0+dGJfc2IsCi0JCQkJCQkJICAgICAgIHBfc190Yi0+RkxbaV0sCisJCQkJaWYgKCFsb2NrZWQgJiYgdGItPkZMW2ldKSB7CisJCQkJCXRiX2J1ZmZlcl9zYW5pdHlfY2hlY2sodGItPnRiX3NiLAorCQkJCQkJCSAgICAgICB0Yi0+RkxbaV0sCiAJCQkJCQkJICAgICAgICJGTCIsIGkpOwogCQkJCQlpZiAoIWNsZWFyX2FsbF9kaXJ0eV9iaXRzCi0JCQkJCSAgICAocF9zX3RiLT50Yl9zYiwgcF9zX3RiLT5GTFtpXSkpCi0JCQkJCQlsb2NrZWQgPSBwX3NfdGItPkZMW2ldOworCQkJCQkgICAgKHRiLT50Yl9zYiwgdGItPkZMW2ldKSkKKwkJCQkJCWxvY2tlZCA9IHRiLT5GTFtpXTsKIAkJCQl9CiAKLQkJCQlpZiAoIWxvY2tlZCAmJiBwX3NfdGItPkNGTFtpXSkgewotCQkJCQl0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKHBfc190Yi0+dGJfc2IsCi0JCQkJCQkJICAgICAgIHBfc190Yi0+Q0ZMW2ldLAorCQkJCWlmICghbG9ja2VkICYmIHRiLT5DRkxbaV0pIHsKKwkJCQkJdGJfYnVmZmVyX3Nhbml0eV9jaGVjayh0Yi0+dGJfc2IsCisJCQkJCQkJICAgICAgIHRiLT5DRkxbaV0sCiAJCQkJCQkJICAgICAgICJDRkwiLCBpKTsKIAkJCQkJaWYgKCFjbGVhcl9hbGxfZGlydHlfYml0cwotCQkJCQkgICAgKHBfc190Yi0+dGJfc2IsIHBfc190Yi0+Q0ZMW2ldKSkKLQkJCQkJCWxvY2tlZCA9IHBfc190Yi0+Q0ZMW2ldOworCQkJCQkgICAgKHRiLT50Yl9zYiwgdGItPkNGTFtpXSkpCisJCQkJCQlsb2NrZWQgPSB0Yi0+Q0ZMW2ldOwogCQkJCX0KIAogCQkJfQogCi0JCQlpZiAoIWxvY2tlZCAmJiAocF9zX3RiLT5ybnVtW2ldKSkgeworCQkJaWYgKCFsb2NrZWQgJiYgKHRiLT5ybnVtW2ldKSkgewogCi0JCQkJaWYgKHBfc190Yi0+UltpXSkgewotCQkJCQl0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKHBfc190Yi0+dGJfc2IsCi0JCQkJCQkJICAgICAgIHBfc190Yi0+UltpXSwKKwkJCQlpZiAodGItPlJbaV0pIHsKKwkJCQkJdGJfYnVmZmVyX3Nhbml0eV9jaGVjayh0Yi0+dGJfc2IsCisJCQkJCQkJICAgICAgIHRiLT5SW2ldLAogCQkJCQkJCSAgICAgICAiUiIsIGkpOwogCQkJCQlpZiAoIWNsZWFyX2FsbF9kaXJ0eV9iaXRzCi0JCQkJCSAgICAocF9zX3RiLT50Yl9zYiwgcF9zX3RiLT5SW2ldKSkKLQkJCQkJCWxvY2tlZCA9IHBfc190Yi0+UltpXTsKKwkJCQkJICAgICh0Yi0+dGJfc2IsIHRiLT5SW2ldKSkKKwkJCQkJCWxvY2tlZCA9IHRiLT5SW2ldOwogCQkJCX0KIAotCQkJCWlmICghbG9ja2VkICYmIHBfc190Yi0+RlJbaV0pIHsKLQkJCQkJdGJfYnVmZmVyX3Nhbml0eV9jaGVjayhwX3NfdGItPnRiX3NiLAotCQkJCQkJCSAgICAgICBwX3NfdGItPkZSW2ldLAorCQkJCWlmICghbG9ja2VkICYmIHRiLT5GUltpXSkgeworCQkJCQl0Yl9idWZmZXJfc2FuaXR5X2NoZWNrKHRiLT50Yl9zYiwKKwkJCQkJCQkgICAgICAgdGItPkZSW2ldLAogCQkJCQkJCSAgICAgICAiRlIiLCBpKTsKIAkJCQkJaWYgKCFjbGVhcl9hbGxfZGlydHlfYml0cwotCQkJCQkgICAgKHBfc190Yi0+dGJfc2IsIHBfc190Yi0+RlJbaV0pKQotCQkJCQkJbG9ja2VkID0gcF9zX3RiLT5GUltpXTsKKwkJCQkJICAgICh0Yi0+dGJfc2IsIHRiLT5GUltpXSkpCisJCQkJCQlsb2NrZWQgPSB0Yi0+RlJbaV07CiAJCQkJfQogCi0JCQkJaWYgKCFsb2NrZWQgJiYgcF9zX3RiLT5DRlJbaV0pIHsKLQkJCQkJdGJfYnVmZmVyX3Nhbml0eV9jaGVjayhwX3NfdGItPnRiX3NiLAotCQkJCQkJCSAgICAgICBwX3NfdGItPkNGUltpXSwKKwkJCQlpZiAoIWxvY2tlZCAmJiB0Yi0+Q0ZSW2ldKSB7CisJCQkJCXRiX2J1ZmZlcl9zYW5pdHlfY2hlY2sodGItPnRiX3NiLAorCQkJCQkJCSAgICAgICB0Yi0+Q0ZSW2ldLAogCQkJCQkJCSAgICAgICAiQ0ZSIiwgaSk7CiAJCQkJCWlmICghY2xlYXJfYWxsX2RpcnR5X2JpdHMKLQkJCQkJICAgIChwX3NfdGItPnRiX3NiLCBwX3NfdGItPkNGUltpXSkpCi0JCQkJCQlsb2NrZWQgPSBwX3NfdGItPkNGUltpXTsKKwkJCQkJICAgICh0Yi0+dGJfc2IsIHRiLT5DRlJbaV0pKQorCQkJCQkJbG9ja2VkID0gdGItPkNGUltpXTsKIAkJCQl9CiAJCQl9CiAJCX0KQEAgLTIyNTcsMTAgKzIyNTYsMTAgQEAKIAkJICoqIC0tY2xtCiAJCSAqLwogCQlmb3IgKGkgPSAwOyAhbG9ja2VkICYmIGkgPCBNQVhfRkVCX1NJWkU7IGkrKykgewotCQkJaWYgKHBfc190Yi0+RkVCW2ldKSB7CisJCQlpZiAodGItPkZFQltpXSkgewogCQkJCWlmICghY2xlYXJfYWxsX2RpcnR5X2JpdHMKLQkJCQkgICAgKHBfc190Yi0+dGJfc2IsIHBfc190Yi0+RkVCW2ldKSkKLQkJCQkJbG9ja2VkID0gcF9zX3RiLT5GRUJbaV07CisJCQkJICAgICh0Yi0+dGJfc2IsIHRiLT5GRUJbaV0pKQorCQkJCQlsb2NrZWQgPSB0Yi0+RkVCW2ldOwogCQkJfQogCQl9CiAKQEAgLTIyNjgsMjEgKzIyNjcsMjAgQEAKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKIAkJCXJlcGVhdF9jb3VudGVyKys7CiAJCQlpZiAoKHJlcGVhdF9jb3VudGVyICUgMTAwMDApID09IDApIHsKLQkJCQlyZWlzZXJmc193YXJuaW5nKHBfc190Yi0+dGJfc2IsCi0JCQkJCQkgIndhaXRfdGJfYnVmZmVyc191bnRpbF9yZWxlYXNlZCgpOiB0b28gbWFueSAiCi0JCQkJCQkgIml0ZXJhdGlvbnMgd2FpdGluZyBmb3IgYnVmZmVyIHRvIHVubG9jayAiCisJCQkJcmVpc2VyZnNfd2FybmluZyh0Yi0+dGJfc2IsICJyZWlzZXJmcy04MjAwIiwKKwkJCQkJCSAidG9vIG1hbnkgaXRlcmF0aW9ucyB3YWl0aW5nICIKKwkJCQkJCSAiZm9yIGJ1ZmZlciB0byB1bmxvY2sgIgogCQkJCQkJICIoJWIpIiwgbG9ja2VkKTsKIAogCQkJCS8qIERvbid0IGxvb3AgZm9yZXZlci4gIFRyeSB0byByZWNvdmVyIGZyb20gcG9zc2libGUgZXJyb3IuICovCiAKLQkJCQlyZXR1cm4gKEZJTEVTWVNURU1fQ0hBTkdFRF9UQihwX3NfdGIpKSA/CisJCQkJcmV0dXJuIChGSUxFU1lTVEVNX0NIQU5HRURfVEIodGIpKSA/CiAJCQkJICAgIFJFUEVBVF9TRUFSQ0ggOiBDQVJSWV9PTjsKIAkJCX0KICNlbmRpZgogCQkJX193YWl0X29uX2J1ZmZlcihsb2NrZWQpOwotCQkJaWYgKEZJTEVTWVNURU1fQ0hBTkdFRF9UQihwX3NfdGIpKSB7CisJCQlpZiAoRklMRVNZU1RFTV9DSEFOR0VEX1RCKHRiKSkKIAkJCQlyZXR1cm4gUkVQRUFUX1NFQVJDSDsKLQkJCX0KIAkJfQogCiAJfSB3aGlsZSAobG9ja2VkKTsKQEAgLTIyOTUsMTUgKzIyOTMsMTUgQEAKICAqCWFuYWx5emUgd2hhdCBhbmQgd2hlcmUgc2hvdWxkIGJlIG1vdmVkOwogICoJZ2V0IHN1ZmZpY2llbnQgbnVtYmVyIG9mIG5ldyBub2RlczsKICAqIEJhbGFuY2luZyB3aWxsIHN0YXJ0IG9ubHkgYWZ0ZXIgYWxsIHJlc291cmNlcyB3aWxsIGJlIGNvbGxlY3RlZCBhdCBhIHRpbWUuCi0gKiAKKyAqCiAgKiBXaGVuIHBvcnRlZCB0byBTTVAga2VybmVscywgb25seSBhdCB0aGUgbGFzdCBtb21lbnQgYWZ0ZXIgYWxsIG5lZWRlZCBub2RlcwogICogYXJlIGNvbGxlY3RlZCBpbiBjYWNoZSwgd2lsbCB0aGUgcmVzb3VyY2VzIGJlIGxvY2tlZCB1c2luZyB0aGUgdXN1YWwKICAqIHRleHRib29rIG9yZGVyZWQgbG9jayBhY3F1aXNpdGlvbiBhbGdvcml0aG1zLiAgTm90ZSB0aGF0IGVuc3VyaW5nIHRoYXQKICAqIHRoaXMgY29kZSBuZWl0aGVyIHdyaXRlIGxvY2tzIHdoYXQgaXQgZG9lcyBub3QgbmVlZCB0byB3cml0ZSBsb2NrIG5vciBsb2NrcyBvdXQgb2Ygb3JkZXIKICAqIHdpbGwgYmUgYSBwYWluIGluIHRoZSBidXR0IHRoYXQgY291bGQgaGF2ZSBiZWVuIGF2b2lkZWQuICBHcnVtYmxlIGdydW1ibGUuIC1IYW5zCi0gKiAKKyAqCiAgKiBmaXggaXMgbWVhbnQgaW4gdGhlIHNlbnNlIG9mIHJlbmRlciB1bmNoYW5naW5nCi0gKiAKKyAqCiAgKiBMYXRlbmN5IG1pZ2h0IGJlIGltcHJvdmVkIGJ5IGZpcnN0IGdhdGhlcmluZyBhIGxpc3Qgb2Ygd2hhdCBidWZmZXJzIGFyZSBuZWVkZWQKICAqIGFuZCB0aGVuIGdldHRpbmcgYXMgbWFueSBvZiB0aGVtIGluIHBhcmFsbGVsIGFzIHBvc3NpYmxlPyAtSGFucwogICoKQEAgLTIzMTIsMTU5ICsyMzEwLDE2MCBAQAogICoJdGIJdHJlZV9iYWxhbmNlIHN0cnVjdHVyZTsKICAqCWludW0JaXRlbSBudW1iZXIgaW4gU1toXTsKICAqICAgICAgcG9zX2luX2l0ZW0gLSBjb21tZW50IHRoaXMgaWYgeW91IGNhbgotICogICAgICBpbnNfaWggJiBpbnNfc2QgYXJlIHVzZWQgd2hlbiBpbnNlcnRpbmcKKyAqICAgICAgaW5zX2loCWl0ZW0gaGVhZCBvZiBpdGVtIGJlaW5nIGluc2VydGVkCisgKglkYXRhCWluc2VydGVkIGl0ZW0gb3IgZGF0YSB0byBiZSBwYXN0ZWQKICAqIFJldHVybnM6CTEgLSBzY2hlZHVsZSBvY2N1cnJlZCB3aGlsZSB0aGUgZnVuY3Rpb24gd29ya2VkOwogICoJICAgICAgICAwIC0gc2NoZWR1bGUgZGlkbid0IG9jY3VyIHdoaWxlIHRoZSBmdW5jdGlvbiB3b3JrZWQ7Ci0gKiAgICAgICAgICAgICAtMSAtIGlmIG5vX2Rpc2tfc3BhY2UgCisgKiAgICAgICAgICAgICAtMSAtIGlmIG5vX2Rpc2tfc3BhY2UKICAqLwogCi1pbnQgZml4X25vZGVzKGludCBuX29wX21vZGUsIHN0cnVjdCB0cmVlX2JhbGFuY2UgKnBfc190Yiwgc3RydWN0IGl0ZW1faGVhZCAqcF9zX2luc19paCwJLy8gaXRlbSBoZWFkIG9mIGl0ZW0gYmVpbmcgaW5zZXJ0ZWQKLQkgICAgICBjb25zdCB2b2lkICpkYXRhCS8vIGluc2VydGVkIGl0ZW0gb3IgZGF0YSB0byBiZSBwYXN0ZWQKLSAgICApCitpbnQgZml4X25vZGVzKGludCBvcF9tb2RlLCBzdHJ1Y3QgdHJlZV9iYWxhbmNlICp0YiwKKwkgICAgICBzdHJ1Y3QgaXRlbV9oZWFkICppbnNfaWgsIGNvbnN0IHZvaWQgKmRhdGEpCiB7Ci0JaW50IG5fcmV0X3ZhbHVlLCBuX2gsIG5faXRlbV9udW0gPSBQQVRIX0xBU1RfUE9TSVRJT04ocF9zX3RiLT50Yl9wYXRoKTsKLQlpbnQgbl9wb3NfaW5faXRlbTsKKwlpbnQgcmV0LCBoLCBpdGVtX251bSA9IFBBVEhfTEFTVF9QT1NJVElPTih0Yi0+dGJfcGF0aCk7CisJaW50IHBvc19pbl9pdGVtOwogCiAJLyogd2Ugc2V0IHdhaXRfdGJfYnVmZmVyc19ydW4gd2hlbiB3ZSBoYXZlIHRvIHJlc3RvcmUgYW55IGRpcnR5IGJpdHMgY2xlYXJlZAogCSAqKiBkdXJpbmcgd2FpdF90Yl9idWZmZXJzX3J1bgogCSAqLwogCWludCB3YWl0X3RiX2J1ZmZlcnNfcnVuID0gMDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBfc190YlMwID0gUEFUSF9QTEFTVF9CVUZGRVIocF9zX3RiLT50Yl9wYXRoKTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnRiUzAgPSBQQVRIX1BMQVNUX0JVRkZFUih0Yi0+dGJfcGF0aCk7CiAKLQkrK1JFSVNFUkZTX1NCKHBfc190Yi0+dGJfc2IpLT5zX2ZpeF9ub2RlczsKKwkrK1JFSVNFUkZTX1NCKHRiLT50Yl9zYiktPnNfZml4X25vZGVzOwogCi0Jbl9wb3NfaW5faXRlbSA9IHBfc190Yi0+dGJfcGF0aC0+cG9zX2luX2l0ZW07CisJcG9zX2luX2l0ZW0gPSB0Yi0+dGJfcGF0aC0+cG9zX2luX2l0ZW07CiAKLQlwX3NfdGItPmZzX2dlbiA9IGdldF9nZW5lcmF0aW9uKHBfc190Yi0+dGJfc2IpOworCXRiLT5mc19nZW4gPSBnZXRfZ2VuZXJhdGlvbih0Yi0+dGJfc2IpOwogCiAJLyogd2UgcHJlcGFyZSBhbmQgbG9nIHRoZSBzdXBlciBoZXJlIHNvIGl0IHdpbGwgYWxyZWFkeSBiZSBpbiB0aGUKIAkgKiogdHJhbnNhY3Rpb24gd2hlbiBkb19iYWxhbmNlIG5lZWRzIHRvIGNoYW5nZSBpdC4KIAkgKiogVGhpcyB3YXkgZG9fYmFsYW5jZSB3b24ndCBoYXZlIHRvIHNjaGVkdWxlIHdoZW4gdHJ5aW5nIHRvIHByZXBhcmUKIAkgKiogdGhlIHN1cGVyIGZvciBsb2dnaW5nCiAJICovCi0JcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChwX3NfdGItPnRiX3NiLAotCQkJCSAgICAgU0JfQlVGRkVSX1dJVEhfU0IocF9zX3RiLT50Yl9zYiksIDEpOwotCWpvdXJuYWxfbWFya19kaXJ0eShwX3NfdGItPnRyYW5zYWN0aW9uX2hhbmRsZSwgcF9zX3RiLT50Yl9zYiwKLQkJCSAgIFNCX0JVRkZFUl9XSVRIX1NCKHBfc190Yi0+dGJfc2IpKTsKLQlpZiAoRklMRVNZU1RFTV9DSEFOR0VEX1RCKHBfc190YikpCisJcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbCh0Yi0+dGJfc2IsCisJCQkJICAgICBTQl9CVUZGRVJfV0lUSF9TQih0Yi0+dGJfc2IpLCAxKTsKKwlqb3VybmFsX21hcmtfZGlydHkodGItPnRyYW5zYWN0aW9uX2hhbmRsZSwgdGItPnRiX3NiLAorCQkJICAgU0JfQlVGRkVSX1dJVEhfU0IodGItPnRiX3NiKSk7CisJaWYgKEZJTEVTWVNURU1fQ0hBTkdFRF9UQih0YikpCiAJCXJldHVybiBSRVBFQVRfU0VBUkNIOwogCiAJLyogaWYgaXQgcG9zc2libGUgaW4gaW5kaXJlY3RfdG9fZGlyZWN0IGNvbnZlcnNpb24gKi8KLQlpZiAoYnVmZmVyX2xvY2tlZChwX3NfdGJTMCkpIHsKLQkJX193YWl0X29uX2J1ZmZlcihwX3NfdGJTMCk7Ci0JCWlmIChGSUxFU1lTVEVNX0NIQU5HRURfVEIocF9zX3RiKSkKKwlpZiAoYnVmZmVyX2xvY2tlZCh0YlMwKSkgeworCQlfX3dhaXRfb25fYnVmZmVyKHRiUzApOworCQlpZiAoRklMRVNZU1RFTV9DSEFOR0VEX1RCKHRiKSkKIAkJCXJldHVybiBSRVBFQVRfU0VBUkNIOwogCX0KICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKIAlpZiAoY3VyX3RiKSB7CiAJCXByaW50X2N1cl90YigiZml4X25vZGVzIik7Ci0JCXJlaXNlcmZzX3BhbmljKHBfc190Yi0+dGJfc2IsCi0JCQkgICAgICAgIlBBUC04MzA1OiBmaXhfbm9kZXM6ICB0aGVyZSBpcyBwZW5kaW5nIGRvX2JhbGFuY2UiKTsKKwkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAiUEFQLTgzMDUiLAorCQkJICAgICAgICJ0aGVyZSBpcyBwZW5kaW5nIGRvX2JhbGFuY2UiKTsKIAl9CiAKLQlpZiAoIWJ1ZmZlcl91cHRvZGF0ZShwX3NfdGJTMCkgfHwgIUJfSVNfSU5fVFJFRShwX3NfdGJTMCkpIHsKLQkJcmVpc2VyZnNfcGFuaWMocF9zX3RiLT50Yl9zYiwKLQkJCSAgICAgICAiUEFQLTgzMjA6IGZpeF9ub2RlczogU1swXSAoJWIgJXopIGlzIG5vdCB1cHRvZGF0ZSAiCi0JCQkgICAgICAgImF0IHRoZSBiZWdpbm5pbmcgb2YgZml4X25vZGVzIG9yIG5vdCBpbiB0cmVlIChtb2RlICVjKSIsCi0JCQkgICAgICAgcF9zX3RiUzAsIHBfc190YlMwLCBuX29wX21vZGUpOwotCX0KKwlpZiAoIWJ1ZmZlcl91cHRvZGF0ZSh0YlMwKSB8fCAhQl9JU19JTl9UUkVFKHRiUzApKQorCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJQQVAtODMyMCIsICJTWzBdICglYiAleikgaXMgIgorCQkJICAgICAgICJub3QgdXB0b2RhdGUgYXQgdGhlIGJlZ2lubmluZyBvZiBmaXhfbm9kZXMgIgorCQkJICAgICAgICJvciBub3QgaW4gdHJlZSAobW9kZSAlYykiLAorCQkJICAgICAgIHRiUzAsIHRiUzAsIG9wX21vZGUpOwogCiAJLyogQ2hlY2sgcGFyYW1ldGVycy4gKi8KLQlzd2l0Y2ggKG5fb3BfbW9kZSkgeworCXN3aXRjaCAob3BfbW9kZSkgewogCWNhc2UgTV9JTlNFUlQ6Ci0JCWlmIChuX2l0ZW1fbnVtIDw9IDAgfHwgbl9pdGVtX251bSA+IEJfTlJfSVRFTVMocF9zX3RiUzApKQotCQkJcmVpc2VyZnNfcGFuaWMocF9zX3RiLT50Yl9zYiwKLQkJCQkgICAgICAgIlBBUC04MzMwOiBmaXhfbm9kZXM6IEluY29ycmVjdCBpdGVtIG51bWJlciAlZCAoaW4gUzAgLSAlZCkgaW4gY2FzZSBvZiBpbnNlcnQiLAotCQkJCSAgICAgICBuX2l0ZW1fbnVtLCBCX05SX0lURU1TKHBfc190YlMwKSk7CisJCWlmIChpdGVtX251bSA8PSAwIHx8IGl0ZW1fbnVtID4gQl9OUl9JVEVNUyh0YlMwKSkKKwkJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgIlBBUC04MzMwIiwgIkluY29ycmVjdCAiCisJCQkJICAgICAgICJpdGVtIG51bWJlciAlZCAoaW4gUzAgLSAlZCkgaW4gY2FzZSAiCisJCQkJICAgICAgICJvZiBpbnNlcnQiLCBpdGVtX251bSwKKwkJCQkgICAgICAgQl9OUl9JVEVNUyh0YlMwKSk7CiAJCWJyZWFrOwogCWNhc2UgTV9QQVNURToKIAljYXNlIE1fREVMRVRFOgogCWNhc2UgTV9DVVQ6Ci0JCWlmIChuX2l0ZW1fbnVtIDwgMCB8fCBuX2l0ZW1fbnVtID49IEJfTlJfSVRFTVMocF9zX3RiUzApKSB7Ci0JCQlwcmludF9ibG9jayhwX3NfdGJTMCwgMCwgLTEsIC0xKTsKLQkJCXJlaXNlcmZzX3BhbmljKHBfc190Yi0+dGJfc2IsCi0JCQkJICAgICAgICJQQVAtODMzNTogZml4X25vZGVzOiBJbmNvcnJlY3QgaXRlbSBudW1iZXIoJWQpOyBtb2RlID0gJWMgaW5zZXJ0X3NpemUgPSAlZFxuIiwKLQkJCQkgICAgICAgbl9pdGVtX251bSwgbl9vcF9tb2RlLAotCQkJCSAgICAgICBwX3NfdGItPmluc2VydF9zaXplWzBdKTsKKwkJaWYgKGl0ZW1fbnVtIDwgMCB8fCBpdGVtX251bSA+PSBCX05SX0lURU1TKHRiUzApKSB7CisJCQlwcmludF9ibG9jayh0YlMwLCAwLCAtMSwgLTEpOworCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAiUEFQLTgzMzUiLCAiSW5jb3JyZWN0ICIKKwkJCQkgICAgICAgIml0ZW0gbnVtYmVyKCVkKTsgbW9kZSA9ICVjICIKKwkJCQkgICAgICAgImluc2VydF9zaXplID0gJWQiLAorCQkJCSAgICAgICBpdGVtX251bSwgb3BfbW9kZSwKKwkJCQkgICAgICAgdGItPmluc2VydF9zaXplWzBdKTsKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZWlzZXJmc19wYW5pYyhwX3NfdGItPnRiX3NiLAotCQkJICAgICAgICJQQVAtODM0MDogZml4X25vZGVzOiBJbmNvcnJlY3QgbW9kZSBvZiBvcGVyYXRpb24iKTsKKwkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLCAiUEFQLTgzNDAiLCAiSW5jb3JyZWN0IG1vZGUgIgorCQkJICAgICAgICJvZiBvcGVyYXRpb24iKTsKIAl9CiAjZW5kaWYKIAotCWlmIChnZXRfbWVtX2Zvcl92aXJ0dWFsX25vZGUocF9zX3RiKSA9PSBSRVBFQVRfU0VBUkNIKQorCWlmIChnZXRfbWVtX2Zvcl92aXJ0dWFsX25vZGUodGIpID09IFJFUEVBVF9TRUFSQ0gpCiAJCS8vIEZJWE1FOiBtYXliZSAtRU5PTUVNIHdoZW4gdGItPnZuX2J1ZiA9PSAwPyBOb3cganVzdCByZXBlYXQKIAkJcmV0dXJuIFJFUEVBVF9TRUFSQ0g7CiAKLQkvKiBTdGFydGluZyBmcm9tIHRoZSBsZWFmIGxldmVsOyBmb3IgYWxsIGxldmVscyBuX2ggb2YgdGhlIHRyZWUuICovCi0JZm9yIChuX2ggPSAwOyBuX2ggPCBNQVhfSEVJR0hUICYmIHBfc190Yi0+aW5zZXJ0X3NpemVbbl9oXTsgbl9oKyspIHsKLQkJaWYgKChuX3JldF92YWx1ZSA9IGdldF9kaXJlY3RfcGFyZW50KHBfc190Yiwgbl9oKSkgIT0gQ0FSUllfT04pIHsKKwkvKiBTdGFydGluZyBmcm9tIHRoZSBsZWFmIGxldmVsOyBmb3IgYWxsIGxldmVscyBoIG9mIHRoZSB0cmVlLiAqLworCWZvciAoaCA9IDA7IGggPCBNQVhfSEVJR0hUICYmIHRiLT5pbnNlcnRfc2l6ZVtoXTsgaCsrKSB7CisJCXJldCA9IGdldF9kaXJlY3RfcGFyZW50KHRiLCBoKTsKKwkJaWYgKHJldCAhPSBDQVJSWV9PTikKIAkJCWdvdG8gcmVwZWF0OwotCQl9CiAKLQkJaWYgKChuX3JldF92YWx1ZSA9Ci0JCSAgICAgY2hlY2tfYmFsYW5jZShuX29wX21vZGUsIHBfc190Yiwgbl9oLCBuX2l0ZW1fbnVtLAotCQkJCSAgIG5fcG9zX2luX2l0ZW0sIHBfc19pbnNfaWgsCi0JCQkJICAgZGF0YSkpICE9IENBUlJZX09OKSB7Ci0JCQlpZiAobl9yZXRfdmFsdWUgPT0gTk9fQkFMQU5DSU5HX05FRURFRCkgeworCQlyZXQgPSBjaGVja19iYWxhbmNlKG9wX21vZGUsIHRiLCBoLCBpdGVtX251bSwKKwkJCQkgICAgcG9zX2luX2l0ZW0sIGluc19paCwgZGF0YSk7CisJCWlmIChyZXQgIT0gQ0FSUllfT04pIHsKKwkJCWlmIChyZXQgPT0gTk9fQkFMQU5DSU5HX05FRURFRCkgewogCQkJCS8qIE5vIGJhbGFuY2luZyBmb3IgaGlnaGVyIGxldmVscyBuZWVkZWQuICovCi0JCQkJaWYgKChuX3JldF92YWx1ZSA9Ci0JCQkJICAgICBnZXRfbmVpZ2hib3JzKHBfc190Yiwgbl9oKSkgIT0gQ0FSUllfT04pIHsKKwkJCQlyZXQgPSBnZXRfbmVpZ2hib3JzKHRiLCBoKTsKKwkJCQlpZiAocmV0ICE9IENBUlJZX09OKQogCQkJCQlnb3RvIHJlcGVhdDsKLQkJCQl9Ci0JCQkJaWYgKG5faCAhPSBNQVhfSEVJR0hUIC0gMSkKLQkJCQkJcF9zX3RiLT5pbnNlcnRfc2l6ZVtuX2ggKyAxXSA9IDA7CisJCQkJaWYgKGggIT0gTUFYX0hFSUdIVCAtIDEpCisJCQkJCXRiLT5pbnNlcnRfc2l6ZVtoICsgMV0gPSAwOwogCQkJCS8qIG9rLCBhbmFseXNpcyBhbmQgcmVzb3VyY2UgZ2F0aGVyaW5nIGFyZSBjb21wbGV0ZSAqLwogCQkJCWJyZWFrOwogCQkJfQogCQkJZ290byByZXBlYXQ7CiAJCX0KIAotCQlpZiAoKG5fcmV0X3ZhbHVlID0gZ2V0X25laWdoYm9ycyhwX3NfdGIsIG5faCkpICE9IENBUlJZX09OKSB7CisJCXJldCA9IGdldF9uZWlnaGJvcnModGIsIGgpOworCQlpZiAocmV0ICE9IENBUlJZX09OKQogCQkJZ290byByZXBlYXQ7Ci0JCX0KIAotCQlpZiAoKG5fcmV0X3ZhbHVlID0gZ2V0X2VtcHR5X25vZGVzKHBfc190Yiwgbl9oKSkgIT0gQ0FSUllfT04pIHsKLQkJCWdvdG8gcmVwZWF0OwkvKiBObyBkaXNrIHNwYWNlLCBvciBzY2hlZHVsZSBvY2N1cnJlZCBhbmQKLQkJCQkJICAgYW5hbHlzaXMgbWF5IGJlIGludmFsaWQgYW5kIG5lZWRzIHRvIGJlIHJlZG9uZS4gKi8KLQkJfQorCQkvKiBObyBkaXNrIHNwYWNlLCBvciBzY2hlZHVsZSBvY2N1cnJlZCBhbmQgYW5hbHlzaXMgbWF5IGJlCisJCSAqIGludmFsaWQgYW5kIG5lZWRzIHRvIGJlIHJlZG9uZS4gKi8KKwkJcmV0ID0gZ2V0X2VtcHR5X25vZGVzKHRiLCBoKTsKKwkJaWYgKHJldCAhPSBDQVJSWV9PTikKKwkJCWdvdG8gcmVwZWF0OwogCi0JCWlmICghUEFUSF9IX1BCVUZGRVIocF9zX3RiLT50Yl9wYXRoLCBuX2gpKSB7CisJCWlmICghUEFUSF9IX1BCVUZGRVIodGItPnRiX3BhdGgsIGgpKSB7CiAJCQkvKiBXZSBoYXZlIGEgcG9zaXRpdmUgaW5zZXJ0IHNpemUgYnV0IG5vIG5vZGVzIGV4aXN0IG9uIHRoaXMKIAkJCSAgIGxldmVsLCB0aGlzIG1lYW5zIHRoYXQgd2UgYXJlIGNyZWF0aW5nIGEgbmV3IHJvb3QuICovCiAKLQkJCVJGQUxTRShwX3NfdGItPmJsa251bVtuX2hdICE9IDEsCisJCQlSRkFMU0UodGItPmJsa251bVtoXSAhPSAxLAogCQkJICAgICAgICJQQVAtODM1MDogY3JlYXRpbmcgbmV3IGVtcHR5IHJvb3QiKTsKIAotCQkJaWYgKG5faCA8IE1BWF9IRUlHSFQgLSAxKQotCQkJCXBfc190Yi0+aW5zZXJ0X3NpemVbbl9oICsgMV0gPSAwOwotCQl9IGVsc2UgaWYgKCFQQVRIX0hfUEJVRkZFUihwX3NfdGItPnRiX3BhdGgsIG5faCArIDEpKSB7Ci0JCQlpZiAocF9zX3RiLT5ibGtudW1bbl9oXSA+IDEpIHsKLQkJCQkvKiBUaGUgdHJlZSBuZWVkcyB0byBiZSBncm93biwgc28gdGhpcyBub2RlIFNbbl9oXQorCQkJaWYgKGggPCBNQVhfSEVJR0hUIC0gMSkKKwkJCQl0Yi0+aW5zZXJ0X3NpemVbaCArIDFdID0gMDsKKwkJfSBlbHNlIGlmICghUEFUSF9IX1BCVUZGRVIodGItPnRiX3BhdGgsIGggKyAxKSkgeworCQkJaWYgKHRiLT5ibGtudW1baF0gPiAxKSB7CisJCQkJLyogVGhlIHRyZWUgbmVlZHMgdG8gYmUgZ3Jvd24sIHNvIHRoaXMgbm9kZSBTW2hdCiAJCQkJICAgd2hpY2ggaXMgdGhlIHJvb3Qgbm9kZSBpcyBzcGxpdCBpbnRvIHR3byBub2RlcywKLQkJCQkgICBhbmQgYSBuZXcgbm9kZSAoU1tuX2grMV0pIHdpbGwgYmUgY3JlYXRlZCB0bworCQkJCSAgIGFuZCBhIG5ldyBub2RlIChTW2grMV0pIHdpbGwgYmUgY3JlYXRlZCB0bwogCQkJCSAgIGJlY29tZSB0aGUgcm9vdCBub2RlLiAgKi8KIAotCQkJCVJGQUxTRShuX2ggPT0gTUFYX0hFSUdIVCAtIDEsCisJCQkJUkZBTFNFKGggPT0gTUFYX0hFSUdIVCAtIDEsCiAJCQkJICAgICAgICJQQVAtODM1NTogYXR0ZW1wdCB0byBjcmVhdGUgdG9vIGhpZ2ggb2YgYSB0cmVlIik7CiAKLQkJCQlwX3NfdGItPmluc2VydF9zaXplW25faCArIDFdID0KKwkJCQl0Yi0+aW5zZXJ0X3NpemVbaCArIDFdID0KIAkJCQkgICAgKERDX1NJWkUgKwotCQkJCSAgICAgS0VZX1NJWkUpICogKHBfc190Yi0+YmxrbnVtW25faF0gLSAxKSArCisJCQkJICAgICBLRVlfU0laRSkgKiAodGItPmJsa251bVtoXSAtIDEpICsKIAkJCQkgICAgRENfU0laRTsKLQkJCX0gZWxzZSBpZiAobl9oIDwgTUFYX0hFSUdIVCAtIDEpCi0JCQkJcF9zX3RiLT5pbnNlcnRfc2l6ZVtuX2ggKyAxXSA9IDA7CisJCQl9IGVsc2UgaWYgKGggPCBNQVhfSEVJR0hUIC0gMSkKKwkJCQl0Yi0+aW5zZXJ0X3NpemVbaCArIDFdID0gMDsKIAkJfSBlbHNlCi0JCQlwX3NfdGItPmluc2VydF9zaXplW25faCArIDFdID0KLQkJCSAgICAoRENfU0laRSArIEtFWV9TSVpFKSAqIChwX3NfdGItPmJsa251bVtuX2hdIC0gMSk7CisJCQl0Yi0+aW5zZXJ0X3NpemVbaCArIDFdID0KKwkJCSAgICAoRENfU0laRSArIEtFWV9TSVpFKSAqICh0Yi0+YmxrbnVtW2hdIC0gMSk7CiAJfQogCi0JaWYgKChuX3JldF92YWx1ZSA9IHdhaXRfdGJfYnVmZmVyc191bnRpbF91bmxvY2tlZChwX3NfdGIpKSA9PSBDQVJSWV9PTikgewotCQlpZiAoRklMRVNZU1RFTV9DSEFOR0VEX1RCKHBfc190YikpIHsKKwlyZXQgPSB3YWl0X3RiX2J1ZmZlcnNfdW50aWxfdW5sb2NrZWQodGIpOworCWlmIChyZXQgPT0gQ0FSUllfT04pIHsKKwkJaWYgKEZJTEVTWVNURU1fQ0hBTkdFRF9UQih0YikpIHsKIAkJCXdhaXRfdGJfYnVmZmVyc19ydW4gPSAxOwotCQkJbl9yZXRfdmFsdWUgPSBSRVBFQVRfU0VBUkNIOworCQkJcmV0ID0gUkVQRUFUX1NFQVJDSDsKIAkJCWdvdG8gcmVwZWF0OwogCQl9IGVsc2UgewogCQkJcmV0dXJuIENBUlJZX09OOwpAQCAtMjQ4NSw1NyArMjQ4NCw1NyBAQAogCiAJCS8qIFJlbGVhc2UgcGF0aCBidWZmZXJzLiAqLwogCQlpZiAod2FpdF90Yl9idWZmZXJzX3J1bikgewotCQkJcGF0aHJlbHNlX2FuZF9yZXN0b3JlKHBfc190Yi0+dGJfc2IsIHBfc190Yi0+dGJfcGF0aCk7CisJCQlwYXRocmVsc2VfYW5kX3Jlc3RvcmUodGItPnRiX3NiLCB0Yi0+dGJfcGF0aCk7CiAJCX0gZWxzZSB7Ci0JCQlwYXRocmVsc2UocF9zX3RiLT50Yl9wYXRoKTsKKwkJCXBhdGhyZWxzZSh0Yi0+dGJfcGF0aCk7CiAJCX0KIAkJLyogYnJlbHNlIGFsbCByZXNvdXJjZXMgY29sbGVjdGVkIGZvciBiYWxhbmNpbmcgKi8KIAkJZm9yIChpID0gMDsgaSA8IE1BWF9IRUlHSFQ7IGkrKykgewogCQkJaWYgKHdhaXRfdGJfYnVmZmVyc19ydW4pIHsKLQkJCQlyZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcihwX3NfdGItPnRiX3NiLAotCQkJCQkJCQkgcF9zX3RiLT5MW2ldKTsKLQkJCQlyZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcihwX3NfdGItPnRiX3NiLAotCQkJCQkJCQkgcF9zX3RiLT5SW2ldKTsKLQkJCQlyZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcihwX3NfdGItPnRiX3NiLAotCQkJCQkJCQkgcF9zX3RiLT5GTFtpXSk7Ci0JCQkJcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIocF9zX3RiLT50Yl9zYiwKLQkJCQkJCQkJIHBfc190Yi0+RlJbaV0pOwotCQkJCXJlaXNlcmZzX3Jlc3RvcmVfcHJlcGFyZWRfYnVmZmVyKHBfc190Yi0+dGJfc2IsCi0JCQkJCQkJCSBwX3NfdGItPgorCQkJCXJlaXNlcmZzX3Jlc3RvcmVfcHJlcGFyZWRfYnVmZmVyKHRiLT50Yl9zYiwKKwkJCQkJCQkJIHRiLT5MW2ldKTsKKwkJCQlyZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcih0Yi0+dGJfc2IsCisJCQkJCQkJCSB0Yi0+UltpXSk7CisJCQkJcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIodGItPnRiX3NiLAorCQkJCQkJCQkgdGItPkZMW2ldKTsKKwkJCQlyZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcih0Yi0+dGJfc2IsCisJCQkJCQkJCSB0Yi0+RlJbaV0pOworCQkJCXJlaXNlcmZzX3Jlc3RvcmVfcHJlcGFyZWRfYnVmZmVyKHRiLT50Yl9zYiwKKwkJCQkJCQkJIHRiLT4KIAkJCQkJCQkJIENGTFtpXSk7Ci0JCQkJcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIocF9zX3RiLT50Yl9zYiwKLQkJCQkJCQkJIHBfc190Yi0+CisJCQkJcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIodGItPnRiX3NiLAorCQkJCQkJCQkgdGItPgogCQkJCQkJCQkgQ0ZSW2ldKTsKIAkJCX0KIAotCQkJYnJlbHNlKHBfc190Yi0+TFtpXSk7Ci0JCQlwX3NfdGItPkxbaV0gPSBOVUxMOwotCQkJYnJlbHNlKHBfc190Yi0+UltpXSk7Ci0JCQlwX3NfdGItPlJbaV0gPSBOVUxMOwotCQkJYnJlbHNlKHBfc190Yi0+RkxbaV0pOwotCQkJcF9zX3RiLT5GTFtpXSA9IE5VTEw7Ci0JCQlicmVsc2UocF9zX3RiLT5GUltpXSk7Ci0JCQlwX3NfdGItPkZSW2ldID0gTlVMTDsKLQkJCWJyZWxzZShwX3NfdGItPkNGTFtpXSk7Ci0JCQlwX3NfdGItPkNGTFtpXSA9IE5VTEw7Ci0JCQlicmVsc2UocF9zX3RiLT5DRlJbaV0pOwotCQkJcF9zX3RiLT5DRlJbaV0gPSBOVUxMOworCQkJYnJlbHNlKHRiLT5MW2ldKTsKKwkJCWJyZWxzZSh0Yi0+UltpXSk7CisJCQlicmVsc2UodGItPkZMW2ldKTsKKwkJCWJyZWxzZSh0Yi0+RlJbaV0pOworCQkJYnJlbHNlKHRiLT5DRkxbaV0pOworCQkJYnJlbHNlKHRiLT5DRlJbaV0pOworCisJCQl0Yi0+TFtpXSA9IE5VTEw7CisJCQl0Yi0+UltpXSA9IE5VTEw7CisJCQl0Yi0+RkxbaV0gPSBOVUxMOworCQkJdGItPkZSW2ldID0gTlVMTDsKKwkJCXRiLT5DRkxbaV0gPSBOVUxMOworCQkJdGItPkNGUltpXSA9IE5VTEw7CiAJCX0KIAogCQlpZiAod2FpdF90Yl9idWZmZXJzX3J1bikgewogCQkJZm9yIChpID0gMDsgaSA8IE1BWF9GRUJfU0laRTsgaSsrKSB7Ci0JCQkJaWYgKHBfc190Yi0+RkVCW2ldKSB7CisJCQkJaWYgKHRiLT5GRUJbaV0pCiAJCQkJCXJlaXNlcmZzX3Jlc3RvcmVfcHJlcGFyZWRfYnVmZmVyCi0JCQkJCSAgICAocF9zX3RiLT50Yl9zYiwgcF9zX3RiLT5GRUJbaV0pOwotCQkJCX0KKwkJCQkJICAgICh0Yi0+dGJfc2IsIHRiLT5GRUJbaV0pOwogCQkJfQogCQl9Ci0JCXJldHVybiBuX3JldF92YWx1ZTsKKwkJcmV0dXJuIHJldDsKIAl9CiAKIH0KIAotLyogQW5hdG9seSB3aWxsIHByb2JhYmx5IGZvcmdpdmUgbWUgcmVuYW1pbmcgcF9zX3RiIHRvIHRiLiBJIGp1c3QKKy8qIEFuYXRvbHkgd2lsbCBwcm9iYWJseSBmb3JnaXZlIG1lIHJlbmFtaW5nIHRiIHRvIHRiLiBJIGp1c3QKICAgIHdhbnRlZCB0byBtYWtlIGxpbmVzIHNob3J0ZXIgKi8KIHZvaWQgdW5maXhfbm9kZXMoc3RydWN0IHRyZWVfYmFsYW5jZSAqdGIpCiB7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9oYXNoZXMuYyBiL2ZzL3JlaXNlcmZzL2hhc2hlcy5jCmluZGV4IGU2NjRhYzEuLjY0NzFjNjcgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2hhc2hlcy5jCisrKyBiL2ZzL3JlaXNlcmZzL2hhc2hlcy5jCkBAIC03LDcgKzcsNyBAQAogICogKHNlZSBBcHBsaWVkIENyeXB0b2dyYXBoeSwgMm5kIGVkaXRpb24sIHA0NDgpLgogICoKICAqIEplcmVteSBGaXR6aGFyZGluZ2UgPGplcmVteUB6aXAuY29tLmF1PiAxOTk4Ci0gKiAKKyAqCiAgKiBKZXJlbXkgaGFzIGFncmVlZCB0byB0aGUgY29udGVudHMgb2YgcmVpc2VyZnMvUkVBRE1FLiAtSGFucwogICogWXVyYSdzIGZ1bmN0aW9uIGlzIGFkZGVkICgwNC8wNy8yMDAwKQogICovCmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9pYmFsYW5jZS5jIGIvZnMvcmVpc2VyZnMvaWJhbGFuY2UuYwppbmRleCBkZTM5MWE4Li4yMDc0ZmQ5IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9pYmFsYW5jZS5jCisrKyBiL2ZzL3JlaXNlcmZzL2liYWxhbmNlLmMKQEAgLTEwNSw4ICsxMDUsOCBAQAogCQlicmVhazsKIAogCWRlZmF1bHQ6Ci0JCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwKLQkJCSAgICAgICAiaW50ZXJuYWxfZGVmaW5lX2Rlc3Rfc3JjX2luZm9zOiBzaGlmdCB0eXBlIGlzIHVua25vd24gKCVkKSIsCisJCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgImliYWxhbmNlLTEiLAorCQkJICAgICAgICJzaGlmdCB0eXBlIGlzIHVua25vd24gKCVkKSIsCiAJCQkgICAgICAgc2hpZnRfbW9kZSk7CiAJfQogfQpAQCAtMjc4LDcgKzI3OCw3IEBACiAKIC8qIGNvcHkgY3B5X251bSBub2RlIHBvaW50ZXJzIGFuZCBjcHlfbnVtIC0gMSBpdGVtcyBmcm9tIGJ1ZmZlciBzcmMgdG8gYnVmZmVyIGRlc3QKICogbGFzdF9maXJzdCA9PSBGSVJTVF9UT19MQVNUIG1lYW5zLCB0aGF0IHdlIGNvcHkgZmlyc3QgaXRlbXMgZnJvbSBzcmMgdG8gdGFpbCBvZiBkZXN0Ci0gKiBsYXN0X2ZpcnN0ID09IExBU1RfVE9fRklSU1QgbWVhbnMsIHRoYXQgd2UgY29weSBsYXN0IGl0ZW1zIGZyb20gc3JjIHRvIGhlYWQgb2YgZGVzdCAKKyAqIGxhc3RfZmlyc3QgPT0gTEFTVF9UT19GSVJTVCBtZWFucywgdGhhdCB3ZSBjb3B5IGxhc3QgaXRlbXMgZnJvbSBzcmMgdG8gaGVhZCBvZiBkZXN0CiAgKi8KIHN0YXRpYyB2b2lkIGludGVybmFsX2NvcHlfcG9pbnRlcnNfaXRlbXMoc3RydWN0IGJ1ZmZlcl9pbmZvICpkZXN0X2JpLAogCQkJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpzcmMsCkBAIC0zODUsNyArMzg1LDcgQEAKIAlpZiAobGFzdF9maXJzdCA9PSBGSVJTVF9UT19MQVNUKSB7CS8qIHNoaWZ0X2xlZnQgb2NjdXJzICovCiAJCWZpcnN0X3BvaW50ZXIgPSAwOwogCQlmaXJzdF9pdGVtID0gMDsKLQkJLyogZGVsZXRlIGNweV9udW0gLSBkZWxfcGFyIHBvaW50ZXJzIGFuZCBrZXlzIHN0YXJ0aW5nIGZvciBwb2ludGVycyB3aXRoIGZpcnN0X3BvaW50ZXIsIAorCQkvKiBkZWxldGUgY3B5X251bSAtIGRlbF9wYXIgcG9pbnRlcnMgYW5kIGtleXMgc3RhcnRpbmcgZm9yIHBvaW50ZXJzIHdpdGggZmlyc3RfcG9pbnRlciwKIAkJICAgZm9yIGtleSAtIHdpdGggZmlyc3RfaXRlbSAqLwogCQlpbnRlcm5hbF9kZWxldGVfcG9pbnRlcnNfaXRlbXMoc3JjX2JpLCBmaXJzdF9wb2ludGVyLAogCQkJCQkgICAgICAgZmlyc3RfaXRlbSwgY3B5X251bSAtIGRlbF9wYXIpOwpAQCAtNDUzLDcgKzQ1Myw3IEBACiAJfQogfQogCi0vKiBJbnNlcnQgZF9rZXkndGggKGRlbGltaXRpbmcpIGtleSBmcm9tIGJ1ZmZlciBjZmwgdG8gdGFpbCBvZiBkZXN0LiAKKy8qIEluc2VydCBkX2tleSd0aCAoZGVsaW1pdGluZykga2V5IGZyb20gYnVmZmVyIGNmbCB0byB0YWlsIG9mIGRlc3QuCiAgKiBDb3B5IHBvaW50ZXJfYW1vdW50IG5vZGUgcG9pbnRlcnMgYW5kIHBvaW50ZXJfYW1vdW50IC0gMSBpdGVtcyBmcm9tIGJ1ZmZlciBzcmMgdG8gYnVmZmVyIGRlc3QuCiAgKiBSZXBsYWNlICBkX2tleSd0aCBrZXkgaW4gYnVmZmVyIGNmbC4KICAqIERlbGV0ZSBwb2ludGVyX2Ftb3VudCBpdGVtcyBhbmQgbm9kZSBwb2ludGVycyBmcm9tIGJ1ZmZlciBzcmMuCkBAIC01MTgsNyArNTE4LDcgQEAKIAkvKiAgICBpbnRlcm5hbF9tb3ZlX3BvaW50ZXJzX2l0ZW1zICh0Yi0+TFtoXSwgdGItPlNbaF0sIEZJUlNUX1RPX0xBU1QsIHBvaW50ZXJfYW1vdW50LCAxKTsgKi8KIH0KIAotLyogSW5zZXJ0IGRfa2V5J3RoIChkZWxpbWl0aW5nKSBrZXkgZnJvbSBidWZmZXIgY2ZyIHRvIGhlYWQgb2YgZGVzdC4gCisvKiBJbnNlcnQgZF9rZXkndGggKGRlbGltaXRpbmcpIGtleSBmcm9tIGJ1ZmZlciBjZnIgdG8gaGVhZCBvZiBkZXN0LgogICogQ29weSBuIG5vZGUgcG9pbnRlcnMgYW5kIG4gLSAxIGl0ZW1zIGZyb20gYnVmZmVyIHNyYyB0byBidWZmZXIgZGVzdC4KICAqIFJlcGxhY2UgIGRfa2V5J3RoIGtleSBpbiBidWZmZXIgY2ZyLgogICogRGVsZXRlIG4gaXRlbXMgYW5kIG5vZGUgcG9pbnRlcnMgZnJvbSBidWZmZXIgc3JjLgpAQCAtNzAyLDggKzcwMiw4IEBACiAKIAkJcmV0dXJuOwogCX0KLQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsCi0JCSAgICAgICAiYmFsYW5jZV9pbnRlcm5hbF93aGVuX2RlbGV0ZTogdW5leHBlY3RlZCB0Yi0+bG51bVslZF09PSVkIG9yIHRiLT5ybnVtWyVkXT09JWQiLAorCXJlaXNlcmZzX3BhbmljKHRiLT50Yl9zYiwgImliYWxhbmNlLTIiLAorCQkgICAgICAgInVuZXhwZWN0ZWQgdGItPmxudW1bJWRdPT0lZCBvciB0Yi0+cm51bVslZF09PSVkIiwKIAkJICAgICAgIGgsIHRiLT5sbnVtW2hdLCBoLCB0Yi0+cm51bVtoXSk7CiB9CiAKQEAgLTc0OSw3ICs3NDksNyBAQAogICAgICAgIHRoaXMgbWVhbnMgdGhhdCBuZXcgcG9pbnRlcnMgYW5kIGl0ZW1zIG11c3QgYmUgaW5zZXJ0ZWQgQUZURVIgKgogICAgICAgIGNoaWxkX3BvcwogICAgICAgIH0KLSAgICAgICBlbHNlIAorICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgaXQgaXMgdGhlIHBvc2l0aW9uIG9mIHRoZSBsZWZ0bW9zdCBwb2ludGVyIHRoYXQgbXVzdCBiZSBkZWxldGVkICh0b2dldGhlciB3aXRoCiAgICAgICAgaXRzIGNvcnJlc3BvbmRpbmcga2V5IHRvIHRoZSBsZWZ0IG9mIHRoZSBwb2ludGVyKQpAQCAtOTQwLDggKzk0MCw4IEBACiAJCXN0cnVjdCBibG9ja19oZWFkICpibGtoOwogCiAJCWlmICh0Yi0+YmxrbnVtW2hdICE9IDEpCi0JCQlyZWlzZXJmc19wYW5pYyhOVUxMLAotCQkJCSAgICAgICAiYmFsYW5jZV9pbnRlcm5hbDogT25lIG5ldyBub2RlIHJlcXVpcmVkIGZvciBjcmVhdGluZyB0aGUgbmV3IHJvb3QiKTsKKwkJCXJlaXNlcmZzX3BhbmljKE5VTEwsICJpYmFsYW5jZS0zIiwgIk9uZSBuZXcgbm9kZSAiCisJCQkJICAgICAgICJyZXF1aXJlZCBmb3IgY3JlYXRpbmcgdGhlIG5ldyByb290Iik7CiAJCS8qIFNbaF0gPSBlbXB0eSBidWZmZXIgZnJvbSB0aGUgbGlzdCBGRUIuICovCiAJCXRiU2ggPSBnZXRfRkVCKHRiKTsKIAkJYmxraCA9IEJfQkxLX0hFQUQodGJTaCk7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9pbm9kZS5jIGIvZnMvcmVpc2VyZnMvaW5vZGUuYwppbmRleCA4MjMyMjdhLi42ZmQwZjQ3IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9pbm9kZS5jCisrKyBiL2ZzL3JlaXNlcmZzL2lub2RlLmMKQEAgLTM2Myw3ICszNjMsNyBAQAogCQl9CiAJCS8qIG1ha2Ugc3VyZSB3ZSBkb24ndCByZWFkIG1vcmUgYnl0ZXMgdGhhbiBhY3R1YWxseSBleGlzdCBpbgogCQkgKiogdGhlIGZpbGUuICBUaGlzIGNhbiBoYXBwZW4gaW4gb2RkIGNhc2VzIHdoZXJlIGlfc2l6ZSBpc24ndAotCQkgKiogY29ycmVjdCwgYW5kIHdoZW4gZGlyZWN0IGl0ZW0gcGFkZGluZyByZXN1bHRzIGluIGEgZmV3IAorCQkgKiogY29ycmVjdCwgYW5kIHdoZW4gZGlyZWN0IGl0ZW0gcGFkZGluZyByZXN1bHRzIGluIGEgZmV3CiAJCSAqKiBleHRyYSBieXRlcyBhdCB0aGUgZW5kIG9mIHRoZSBkaXJlY3QgaXRlbQogCQkgKi8KIAkJaWYgKChsZV9paF9rX29mZnNldChpaCkgKyBwYXRoLnBvc19pbl9pdGVtKSA+IGlub2RlLT5pX3NpemUpCkBAIC00MzgsMTUgKzQzOCwxNSBAQAogKiogLUVOT0VOVCBpbnN0ZWFkIG9mIGEgdmFsaWQgYnVmZmVyLiAgYmxvY2tfcHJlcGFyZV93cml0ZSBleHBlY3RzIHRvCiAqKiBiZSBhYmxlIHRvIGRvIGkvbyBvbiB0aGUgYnVmZmVycyByZXR1cm5lZCwgdW5sZXNzIGFuIGVycm9yIHZhbHVlCiAqKiBpcyBhbHNvIHJldHVybmVkLgotKiogCisqKgogKiogU28sIHRoaXMgYWxsb3dzIGJsb2NrX3ByZXBhcmVfd3JpdGUgdG8gYmUgdXNlZCBmb3IgcmVhZGluZyBhIHNpbmdsZSBibG9jawogKiogaW4gYSBwYWdlLiAgV2hlcmUgaXQgZG9lcyBub3QgcHJvZHVjZSBhIHZhbGlkIHBhZ2UgZm9yIGhvbGVzLCBvciBwYXN0IHRoZQogKiogZW5kIG9mIHRoZSBmaWxlLiAgVGhpcyB0dXJucyBvdXQgdG8gYmUgZXhhY3RseSB3aGF0IHdlIG5lZWQgZm9yIHJlYWRpbmcKICoqIHRhaWxzIGZvciBjb252ZXJzaW9uLgogKioKICoqIFRoZSBwb2ludCBvZiB0aGUgd3JhcHBlciBpcyBmb3JjaW5nIGEgY2VydGFpbiB2YWx1ZSBmb3IgY3JlYXRlLCBldmVuCi0qKiB0aG91Z2ggdGhlIFZGUyBsYXllciBpcyBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBjcmVhdGU9PTEuICBJZiB5b3UgCi0qKiBkb24ndCB3YW50IHRvIHNlbmQgY3JlYXRlID09IEdFVF9CTE9DS19OT19IT0xFIHRvIHJlaXNlcmZzX2dldF9ibG9jaywgCisqKiB0aG91Z2ggdGhlIFZGUyBsYXllciBpcyBjYWxsaW5nIHRoaXMgZnVuY3Rpb24gd2l0aCBjcmVhdGU9PTEuICBJZiB5b3UKKyoqIGRvbid0IHdhbnQgdG8gc2VuZCBjcmVhdGUgPT0gR0VUX0JMT0NLX05PX0hPTEUgdG8gcmVpc2VyZnNfZ2V0X2Jsb2NrLAogKiogZG9uJ3QgdXNlIHRoaXMgZnVuY3Rpb24uCiAqLwogc3RhdGljIGludCByZWlzZXJmc19nZXRfYmxvY2tfY3JlYXRlXzAoc3RydWN0IGlub2RlICppbm9kZSwgc2VjdG9yX3QgYmxvY2ssCkBAIC02MDIsNyArNjAyLDcgQEAKIAlpbnQgZG9uZTsKIAlpbnQgZnNfZ2VuOwogCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoID0gTlVMTDsKLQkvKiBzcGFjZSByZXNlcnZlZCBpbiB0cmFuc2FjdGlvbiBiYXRjaDogCisJLyogc3BhY2UgcmVzZXJ2ZWQgaW4gdHJhbnNhY3Rpb24gYmF0Y2g6CiAJICAgLiAzIGJhbGFuY2luZ3MgaW4gZGlyZWN0LT5pbmRpcmVjdCBjb252ZXJzaW9uCiAJICAgLiAxIGJsb2NrIGludm9sdmVkIGludG8gcmVpc2VyZnNfdXBkYXRlX3NkKCkKIAkgICBYWFggaW4gcHJhY3RpY2FsbHkgaW1wb3NzaWJsZSB3b3JzdCBjYXNlIGRpcmVjdDJpbmRpcmVjdCgpCkBAIC03NTQsNyArNzU0LDcgQEAKIAkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGlub2RlLT5pX3NiKTsKIAogCQkvKiB0aGUgaXRlbSB3YXMgZm91bmQsIHNvIG5ldyBibG9ja3Mgd2VyZSBub3QgYWRkZWQgdG8gdGhlIGZpbGUKLQkJICoqIHRoZXJlIGlzIG5vIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBpbm9kZSBpcyB1cGRhdGVkIHdpdGggdGhpcyAKKwkJICoqIHRoZXJlIGlzIG5vIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBpbm9kZSBpcyB1cGRhdGVkIHdpdGggdGhpcwogCQkgKiogdHJhbnNhY3Rpb24KIAkJICovCiAJCXJldHVybiByZXR2YWw7CkBAIC04NDEsMTAgKzg0MSwxMiBAQAogCQkJCQkJCSAgdGFpbF9vZmZzZXQpOwogCQkJCWlmIChyZXR2YWwpIHsKIAkJCQkJaWYgKHJldHZhbCAhPSAtRU5PU1BDKQotCQkJCQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwKLQkJCQkJCQkJICJjbG0tNjAwNDogY29udmVydCB0YWlsIGZhaWxlZCBpbm9kZSAlbHUsIGVycm9yICVkIiwKLQkJCQkJCQkJIGlub2RlLT5pX2lubywKLQkJCQkJCQkJIHJldHZhbCk7CisJCQkJCQlyZWlzZXJmc19lcnJvcihpbm9kZS0+aV9zYiwKKwkJCQkJCQkiY2xtLTYwMDQiLAorCQkJCQkJCSJjb252ZXJ0IHRhaWwgZmFpbGVkICIKKwkJCQkJCQkiaW5vZGUgJWx1LCBlcnJvciAlZCIsCisJCQkJCQkJaW5vZGUtPmlfaW5vLAorCQkJCQkJCXJldHZhbCk7CiAJCQkJCWlmIChhbGxvY2F0ZWRfYmxvY2tfbnIpIHsKIAkJCQkJCS8qIHRoZSBiaXRtYXAsIHRoZSBzdXBlciwgYW5kIHRoZSBzdGF0IGRhdGEgPT0gMyAqLwogCQkJCQkJaWYgKCF0aCkKQEAgLTk4NCw3ICs5ODYsNyBAQAogCiAJCS8qIHRoaXMgbG9vcCBjb3VsZCBsb2cgbW9yZSBibG9ja3MgdGhhbiB3ZSBoYWQgb3JpZ2luYWxseSBhc2tlZAogCQkgKiogZm9yLiAgU28sIHdlIGhhdmUgdG8gYWxsb3cgdGhlIHRyYW5zYWN0aW9uIHRvIGVuZCBpZiBpdCBpcwotCQkgKiogdG9vIGJpZyBvciB0b28gZnVsbC4gIFVwZGF0ZSB0aGUgaW5vZGUgc28gdGhpbmdzIGFyZSAKKwkJICoqIHRvbyBiaWcgb3IgdG9vIGZ1bGwuICBVcGRhdGUgdGhlIGlub2RlIHNvIHRoaW5ncyBhcmUKIAkJICoqIGNvbnNpc3RlbnQgaWYgd2UgY3Jhc2ggYmVmb3JlIHRoZSBmdW5jdGlvbiByZXR1cm5zCiAJCSAqKgogCQkgKiogcmVsZWFzZSB0aGUgcGF0aCBzbyB0aGF0IGFueWJvZHkgd2FpdGluZyBvbiB0aGUgcGF0aCBiZWZvcmUKQEAgLTk5NSw3ICs5OTcsNyBAQAogCQkJaWYgKHJldHZhbCkKIAkJCQlnb3RvIGZhaWx1cmU7CiAJCX0KLQkJLyogaW5zZXJ0aW5nIGluZGlyZWN0IHBvaW50ZXJzIGZvciBhIGhvbGUgY2FuIHRha2UgYSAKKwkJLyogaW5zZXJ0aW5nIGluZGlyZWN0IHBvaW50ZXJzIGZvciBhIGhvbGUgY2FuIHRha2UgYQogCQkgKiogbG9uZyB0aW1lLiAgcmVzY2hlZHVsZSBpZiBuZWVkZWQKIAkJICovCiAJCWNvbmRfcmVzY2hlZCgpOwpAQCAtMTAwNiw4ICsxMDA4LDcgQEAKIAkJCWdvdG8gZmFpbHVyZTsKIAkJfQogCQlpZiAocmV0dmFsID09IFBPU0lUSU9OX0ZPVU5EKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAotCQkJCQkgInZzLTgyNTogcmVpc2VyZnNfZ2V0X2Jsb2NrOiAiCisJCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAidnMtODI1IiwKIAkJCQkJICIlSyBzaG91bGQgbm90IGJlIGZvdW5kIiwgJmtleSk7CiAJCQlyZXR2YWwgPSAtRUVYSVNUOwogCQkJaWYgKGFsbG9jYXRlZF9ibG9ja19ucikKQEAgLTEyOTksOCArMTMwMCw3IEBACiAJaWggPSBQQVRIX1BJVEVNX0hFQUQocGF0aCk7CiAKIAlpZiAoIWlzX3N0YXRkYXRhX2xlX2loKGloKSkKLQkJcmVpc2VyZnNfcGFuaWMoaW5vZGUtPmlfc2IsCi0JCQkgICAgICAgInZzLTEzMDY1OiB1cGRhdGVfc3RhdF9kYXRhOiBrZXkgJWssIGZvdW5kIGl0ZW0gJWgiLAorCQlyZWlzZXJmc19wYW5pYyhpbm9kZS0+aV9zYiwgInZzLTEzMDY1IiwgImtleSAlaywgZm91bmQgaXRlbSAlaCIsCiAJCQkgICAgICAgSU5PREVfUEtFWShpbm9kZSksIGloKTsKIAogCWlmIChzdGF0X2RhdGFfdjEoaWgpKSB7CkBAIC0xMzMyLDEwICsxMzMyLDkgQEAKIAkJLyogbG9vayBmb3IgdGhlIG9iamVjdCdzIHN0YXQgZGF0YSAqLwogCQlyZXR2YWwgPSBzZWFyY2hfaXRlbShpbm9kZS0+aV9zYiwgJmtleSwgJnBhdGgpOwogCQlpZiAocmV0dmFsID09IElPX0VSUk9SKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAotCQkJCQkgInZzLTEzMDUwOiByZWlzZXJmc191cGRhdGVfc2Q6ICIKLQkJCQkJICJpL28gZmFpbHVyZSBvY2N1cnJlZCB0cnlpbmcgdG8gdXBkYXRlICVLIHN0YXQgZGF0YSIsCi0JCQkJCSAma2V5KTsKKwkJCXJlaXNlcmZzX2Vycm9yKGlub2RlLT5pX3NiLCAidnMtMTMwNTAiLAorCQkJCSAgICAgICAiaS9vIGZhaWx1cmUgb2NjdXJyZWQgdHJ5aW5nIHRvICIKKwkJCQkgICAgICAgInVwZGF0ZSAlSyBzdGF0IGRhdGEiLCAma2V5KTsKIAkJCXJldHVybjsKIAkJfQogCQlpZiAocmV0dmFsID09IElURU1fTk9UX0ZPVU5EKSB7CkBAIC0xMzQ1LDkgKzEzNDQsOSBAQAogCQkJCS8qcmVpc2VyZnNfd2FybmluZyAoaW5vZGUtPmlfc2IsICJ2cy0xMzA1MDogcmVpc2VyZnNfdXBkYXRlX3NkOiBpX25saW5rID09IDAsIHN0YXQgZGF0YSBub3QgZm91bmQiKTsgKi8KIAkJCQlyZXR1cm47CiAJCQl9Ci0JCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAotCQkJCQkgInZzLTEzMDYwOiByZWlzZXJmc191cGRhdGVfc2Q6ICIKLQkJCQkJICJzdGF0IGRhdGEgb2Ygb2JqZWN0ICVrIChubGluayA9PSAlZCkgbm90IGZvdW5kIChwb3MgJWQpIiwKKwkJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICJ2cy0xMzA2MCIsCisJCQkJCSAic3RhdCBkYXRhIG9mIG9iamVjdCAlayAobmxpbmsgPT0gJWQpICIKKwkJCQkJICJub3QgZm91bmQgKHBvcyAlZCkiLAogCQkJCQkgSU5PREVfUEtFWShpbm9kZSksIGlub2RlLT5pX25saW5rLAogCQkJCQkgcG9zKTsKIAkJCXJlaXNlcmZzX2NoZWNrX3BhdGgoJnBhdGgpOwpAQCAtMTQyNCwxMCArMTQyMyw5IEBACiAJLyogbG9vayBmb3IgdGhlIG9iamVjdCdzIHN0YXQgZGF0YSAqLwogCXJldHZhbCA9IHNlYXJjaF9pdGVtKGlub2RlLT5pX3NiLCAma2V5LCAmcGF0aF90b19zZCk7CiAJaWYgKHJldHZhbCA9PSBJT19FUlJPUikgewotCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAotCQkJCSAidnMtMTMwNzA6IHJlaXNlcmZzX3JlYWRfbG9ja2VkX2lub2RlOiAiCi0JCQkJICJpL28gZmFpbHVyZSBvY2N1cnJlZCB0cnlpbmcgdG8gZmluZCBzdGF0IGRhdGEgb2YgJUsiLAotCQkJCSAma2V5KTsKKwkJcmVpc2VyZnNfZXJyb3IoaW5vZGUtPmlfc2IsICJ2cy0xMzA3MCIsCisJCQkgICAgICAgImkvbyBmYWlsdXJlIG9jY3VycmVkIHRyeWluZyB0byBmaW5kICIKKwkJCSAgICAgICAic3RhdCBkYXRhIG9mICVLIiwgJmtleSk7CiAJCXJlaXNlcmZzX21ha2VfYmFkX2lub2RlKGlub2RlKTsKIAkJcmV0dXJuOwogCX0KQEAgLTE0NDYsNyArMTQ0NCw3IEBACiAJICAgdXBkYXRlIHNkIG9uIHVubGluayBhbGwgdGhhdCBpcyByZXF1aXJlZCBpcyB0byBjaGVjayBmb3IgbmxpbmsKIAkgICBoZXJlLiBUaGlzIGJ1ZyB3YXMgZmlyc3QgZm91bmQgYnkgU2l6aWYgd2hlbiBkZWJ1Z2dpbmcKIAkgICBTcXVpZE5HL0J1dHRlcmZseSwgZm9yZ290dGVuLCBhbmQgZm91bmQgYWdhaW4gYWZ0ZXIgUGhpbGlwcGUKLQkgICBHcmFtb3VsbGUgPHBoaWxpcHBlLmdyYW1vdWxsZUBtbWFuaWEuY29tPiByZXByb2R1Y2VkIGl0LiAKKwkgICBHcmFtb3VsbGUgPHBoaWxpcHBlLmdyYW1vdWxsZUBtbWFuaWEuY29tPiByZXByb2R1Y2VkIGl0LgogCiAJICAgTW9yZSBsb2dpY2FsIGZpeCB3b3VsZCByZXF1aXJlIGNoYW5nZXMgaW4gZnMvaW5vZGUuYzppcHV0KCkgdG8KIAkgICByZW1vdmUgaW5vZGUgZnJvbSBoYXNoLXRhYmxlIF9hZnRlcl8gZnMgY2xlYW5lZCBkaXNrIHN0dWZmIHVwIGFuZApAQCAtMTQ1Nyw4ICsxNDU1LDcgQEAKIAkgICBkdXJpbmcgbW91bnQgKGZzL3JlaXNlcmZzL3N1cGVyLmM6ZmluaXNoX3VuZmluaXNoZWQoKSkuICovCiAJaWYgKChpbm9kZS0+aV9ubGluayA9PSAwKSAmJgogCSAgICAhUkVJU0VSRlNfU0IoaW5vZGUtPmlfc2IpLT5zX2lzX3VubGlua2VkX29rKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsCi0JCQkJICJ2cy0xMzA3NTogcmVpc2VyZnNfcmVhZF9sb2NrZWRfaW5vZGU6ICIKKwkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgInZzLTEzMDc1IiwKIAkJCQkgImRlYWQgaW5vZGUgcmVhZCBmcm9tIGRpc2sgJUsuICIKIAkJCQkgIlRoaXMgaXMgbGlrZWx5IHRvIGJlIHJhY2Ugd2l0aCBrbmZzZC4gSWdub3JlIiwKIAkJCQkgJmtleSk7CkBAIC0xNTU1LDcgKzE1NTIsNyBAQAogCSAqLwogCWlmIChmaF90eXBlID4gZmhfbGVuKSB7CiAJCWlmIChmaF90eXBlICE9IDYgfHwgZmhfbGVuICE9IDUpCi0JCQlyZWlzZXJmc193YXJuaW5nKHNiLAorCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgInJlaXNlcmZzLTEzMDc3IiwKIAkJCQkibmZzZC9yZWlzZXJmcywgZmh0eXBlPSVkLCBsZW49JWQgLSBvZGQiLAogCQkJCWZoX3R5cGUsIGZoX2xlbik7CiAJCWZoX3R5cGUgPSA1OwpAQCAtMTYyMiw3ICsxNjE5LDcgQEAKIAlpZiAoaW5vZGUtPmlfc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCiAJCXJldHVybiAtRVJPRlM7CiAJLyogbWVtb3J5IHByZXNzdXJlIGNhbiBzb21ldGltZXMgaW5pdGlhdGUgd3JpdGVfaW5vZGUgY2FsbHMgd2l0aCBzeW5jID09IDEsCi0JICoqIHRoZXNlIGNhc2VzIGFyZSBqdXN0IHdoZW4gdGhlIHN5c3RlbSBuZWVkcyByYW0sIG5vdCB3aGVuIHRoZSAKKwkgKiogdGhlc2UgY2FzZXMgYXJlIGp1c3Qgd2hlbiB0aGUgc3lzdGVtIG5lZWRzIHJhbSwgbm90IHdoZW4gdGhlCiAJICoqIGlub2RlIG5lZWRzIHRvIHJlYWNoIGRpc2sgZm9yIHNhZmV0eSwgYW5kIHRoZXkgY2FuIHNhZmVseSBiZQogCSAqKiBpZ25vcmVkIGJlY2F1c2UgdGhlIGFsdGVyZWQgaW5vZGUgaGFzIGFscmVhZHkgYmVlbiBsb2dnZWQuCiAJICovCkBAIC0xNjgwLDEzICsxNjc3LDEzIEBACiAJLyogbG9vayBmb3IgcGxhY2UgaW4gdGhlIHRyZWUgZm9yIG5ldyBpdGVtICovCiAJcmV0dmFsID0gc2VhcmNoX2l0ZW0oc2IsICZrZXksIHBhdGgpOwogCWlmIChyZXR2YWwgPT0gSU9fRVJST1IpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzYiwgInZzLTEzMDgwOiByZWlzZXJmc19uZXdfZGlyZWN0b3J5OiAiCi0JCQkJICJpL28gZmFpbHVyZSBvY2N1cnJlZCBjcmVhdGluZyBuZXcgZGlyZWN0b3J5Iik7CisJCXJlaXNlcmZzX2Vycm9yKHNiLCAidnMtMTMwODAiLAorCQkJICAgICAgICJpL28gZmFpbHVyZSBvY2N1cnJlZCBjcmVhdGluZyBuZXcgZGlyZWN0b3J5Iik7CiAJCXJldHVybiAtRUlPOwogCX0KIAlpZiAocmV0dmFsID09IElURU1fRk9VTkQpIHsKIAkJcGF0aHJlbHNlKHBhdGgpOwotCQlyZWlzZXJmc193YXJuaW5nKHNiLCAidnMtMTMwNzA6IHJlaXNlcmZzX25ld19kaXJlY3Rvcnk6ICIKKwkJcmVpc2VyZnNfd2FybmluZyhzYiwgInZzLTEzMDcwIiwKIAkJCQkgIm9iamVjdCB3aXRoIHRoaXMga2V5IGV4aXN0cyAoJWspIiwKIAkJCQkgJihpaC0+aWhfa2V5KSk7CiAJCXJldHVybiAtRUVYSVNUOwpAQCAtMTcyMCwxMyArMTcxNywxMyBAQAogCS8qIGxvb2sgZm9yIHBsYWNlIGluIHRoZSB0cmVlIGZvciBuZXcgaXRlbSAqLwogCXJldHZhbCA9IHNlYXJjaF9pdGVtKHNiLCAma2V5LCBwYXRoKTsKIAlpZiAocmV0dmFsID09IElPX0VSUk9SKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJ2cy0xMzA4MDogcmVpc2VyZnNfbmV3X3N5bWxpbmlrOiAiCi0JCQkJICJpL28gZmFpbHVyZSBvY2N1cnJlZCBjcmVhdGluZyBuZXcgc3ltbGluayIpOworCQlyZWlzZXJmc19lcnJvcihzYiwgInZzLTEzMDgwIiwKKwkJCSAgICAgICAiaS9vIGZhaWx1cmUgb2NjdXJyZWQgY3JlYXRpbmcgbmV3IHN5bWxpbmsiKTsKIAkJcmV0dXJuIC1FSU87CiAJfQogCWlmIChyZXR2YWwgPT0gSVRFTV9GT1VORCkgewogCQlwYXRocmVsc2UocGF0aCk7Ci0JCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJ2cy0xMzA4MDogcmVpc2VyZnNfbmV3X3N5bWxpbms6ICIKKwkJcmVpc2VyZnNfd2FybmluZyhzYiwgInZzLTEzMDgwIiwKIAkJCQkgIm9iamVjdCB3aXRoIHRoaXMga2V5IGV4aXN0cyAoJWspIiwKIAkJCQkgJihpaC0+aWhfa2V5KSk7CiAJCXJldHVybiAtRUVYSVNUOwpAQCAtMTczOSw3ICsxNzM2LDcgQEAKIC8qIGluc2VydHMgdGhlIHN0YXQgZGF0YSBpbnRvIHRoZSB0cmVlLCBhbmQgdGhlbiBjYWxscwogICAgcmVpc2VyZnNfbmV3X2RpcmVjdG9yeSAodG8gaW5zZXJ0ICIuIiwgIi4uIiBpdGVtIGlmIG5ldyBvYmplY3QgaXMKICAgIGRpcmVjdG9yeSkgb3IgcmVpc2VyZnNfbmV3X3N5bWxpbmsgKHRvIGluc2VydCBzeW1saW5rIGJvZHkgaWYgbmV3Ci0gICBvYmplY3QgaXMgc3ltbGluaykgb3Igbm90aGluZyAoaWYgbmV3IG9iamVjdCBpcyByZWd1bGFyIGZpbGUpIAorICAgb2JqZWN0IGlzIHN5bWxpbmspIG9yIG5vdGhpbmcgKGlmIG5ldyBvYmplY3QgaXMgcmVndWxhciBmaWxlKQogCiAgICBOT1RFISB1aWQgYW5kIGdpZCBtdXN0IGFscmVhZHkgYmUgc2V0IGluIHRoZSBpbm9kZS4gIElmIHdlIHJldHVybgogICAgbm9uLXplcm8gZHVlIHRvIGFuIGVycm9yLCB3ZSBoYXZlIHRvIGRyb3AgdGhlIHF1b3RhIHByZXZpb3VzbHkgYWxsb2NhdGVkCkBAIC0xNzQ3LDEwICsxNzQ0LDExIEBACiAgICBpZiB3ZSByZXR1cm4gbm9uLXplcm8sIHdlIGFsc28gZW5kIHRoZSB0cmFuc2FjdGlvbi4gICovCiBpbnQgcmVpc2VyZnNfbmV3X2lub2RlKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAogCQkgICAgICAgc3RydWN0IGlub2RlICpkaXIsIGludCBtb2RlLCBjb25zdCBjaGFyICpzeW1uYW1lLAotCQkgICAgICAgLyogMCBmb3IgcmVndWxhciwgRU1UUllfRElSX1NJWkUgZm9yIGRpcnMsIAorCQkgICAgICAgLyogMCBmb3IgcmVndWxhciwgRU1UUllfRElSX1NJWkUgZm9yIGRpcnMsCiAJCSAgICAgICAgICBzdHJsZW4gKHN5bW5hbWUpIGZvciBzeW1saW5rcykgKi8KIAkJICAgICAgIGxvZmZfdCBpX3NpemUsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKLQkJICAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUpCisJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgICAgICAgc3RydWN0IHJlaXNlcmZzX3NlY3VyaXR5X2hhbmRsZSAqc2VjdXJpdHkpCiB7CiAJc3RydWN0IHN1cGVyX2Jsb2NrICpzYjsKIAlzdHJ1Y3QgcmVpc2VyZnNfaWdldF9hcmdzIGFyZ3M7CkBAIC0xNzk2LDcgKzE3OTQsNyBAQAogCQlnb3RvIG91dF9iYWRfaW5vZGU7CiAJfQogCWlmIChvbGRfZm9ybWF0X29ubHkoc2IpKQotCQkvKiBub3QgYSBwZXJmZWN0IGdlbmVyYXRpb24gY291bnQsIGFzIG9iamVjdCBpZHMgY2FuIGJlIHJldXNlZCwgYnV0IAorCQkvKiBub3QgYSBwZXJmZWN0IGdlbmVyYXRpb24gY291bnQsIGFzIG9iamVjdCBpZHMgY2FuIGJlIHJldXNlZCwgYnV0CiAJCSAqKiB0aGlzIGlzIGFzIGdvb2QgYXMgcmVpc2VyZnMgY2FuIGRvIHJpZ2h0IG5vdy4KIAkJICoqIG5vdGUgdGhhdCB0aGUgcHJpdmF0ZSBwYXJ0IG9mIGlub2RlIGlzbid0IGZpbGxlZCBpbiB5ZXQsIHdlIGhhdmUKIAkJICoqIHRvIHVzZSB0aGUgZGlyZWN0b3J5LgpAQCAtMTkxNyw5ICsxOTE1LDggQEAKIAkJZ290byBvdXRfaW5zZXJ0ZWRfc2Q7CiAJfQogCi0JLyogWFhYIENIRUNLIFRISVMgKi8KIAlpZiAocmVpc2VyZnNfcG9zaXhhY2woaW5vZGUtPmlfc2IpKSB7Ci0JCXJldHZhbCA9IHJlaXNlcmZzX2luaGVyaXRfZGVmYXVsdF9hY2woZGlyLCBkZW50cnksIGlub2RlKTsKKwkJcmV0dmFsID0gcmVpc2VyZnNfaW5oZXJpdF9kZWZhdWx0X2FjbCh0aCwgZGlyLCBkZW50cnksIGlub2RlKTsKIAkJaWYgKHJldHZhbCkgewogCQkJZXJyID0gcmV0dmFsOwogCQkJcmVpc2VyZnNfY2hlY2tfcGF0aCgmcGF0aF90b19rZXkpOwpAQCAtMTkyNywxMCArMTkyNCwyMyBAQAogCQkJZ290byBvdXRfaW5zZXJ0ZWRfc2Q7CiAJCX0KIAl9IGVsc2UgaWYgKGlub2RlLT5pX3NiLT5zX2ZsYWdzICYgTVNfUE9TSVhBQ0wpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgIkFDTHMgYXJlbid0IGVuYWJsZWQgaW4gdGhlIGZzLCAiCisJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICJqZG0tMTMwOTAiLAorCQkJCSAiQUNMcyBhcmVuJ3QgZW5hYmxlZCBpbiB0aGUgZnMsICIKIAkJCQkgImJ1dCB2ZnMgdGhpbmtzIHRoZXkgYXJlISIpOwotCX0gZWxzZSBpZiAoaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoZGlyKSkgewotCQlyZWlzZXJmc19tYXJrX2lub2RlX3ByaXZhdGUoaW5vZGUpOworCX0gZWxzZSBpZiAoSVNfUFJJVkFURShkaXIpKQorCQlpbm9kZS0+aV9mbGFncyB8PSBTX1BSSVZBVEU7CisKKwlpZiAoc2VjdXJpdHktPm5hbWUpIHsKKwkJcmV0dmFsID0gcmVpc2VyZnNfc2VjdXJpdHlfd3JpdGUodGgsIGlub2RlLCBzZWN1cml0eSk7CisJCWlmIChyZXR2YWwpIHsKKwkJCWVyciA9IHJldHZhbDsKKwkJCXJlaXNlcmZzX2NoZWNrX3BhdGgoJnBhdGhfdG9fa2V5KTsKKwkJCXJldHZhbCA9IGpvdXJuYWxfZW5kKHRoLCB0aC0+dF9zdXBlciwKKwkJCQkJICAgICB0aC0+dF9ibG9ja3NfYWxsb2NhdGVkKTsKKwkJCWlmIChyZXR2YWwpCisJCQkJZXJyID0gcmV0dmFsOworCQkJZ290byBvdXRfaW5zZXJ0ZWRfc2Q7CisJCX0KIAl9CiAKIAlyZWlzZXJmc191cGRhdGVfc2QodGgsIGlub2RlKTsKQEAgLTE5NjAsMTkgKzE5NzAsNyBAQAogCWlub2RlLT5pX25saW5rID0gMDsKIAl0aC0+dF90cmFuc19pZCA9IDA7CS8qIHNvIHRoZSBjYWxsZXIgY2FuJ3QgdXNlIHRoaXMgaGFuZGxlIGxhdGVyICovCiAJdW5sb2NrX25ld19pbm9kZShpbm9kZSk7IC8qIE9LIHRvIGRvIGV2ZW4gaWYgd2UgaGFkbid0IGxvY2tlZCBpdCAqLwotCi0JLyogSWYgd2Ugd2VyZSBpbmhlcml0aW5nIGFuIEFDTCwgd2UgbmVlZCB0byByZWxlYXNlIHRoZSBsb2NrIHNvIHRoYXQKLQkgKiBpcHV0IGRvZXNuJ3QgZGVhZGxvY2sgaW4gcmVpc2VyZnNfZGVsZXRlX3hhdHRycy4gVGhlIGxvY2tpbmcKLQkgKiBjb2RlIHJlYWxseSBuZWVkcyB0byBiZSByZXdvcmtlZCwgYnV0IHRoaXMgd2lsbCB0YWtlIGNhcmUgb2YgaXQKLQkgKiBmb3Igbm93LiAtamVmZm0gKi8KLSNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMCi0JaWYgKFJFSVNFUkZTX0koZGlyKS0+aV9hY2xfZGVmYXVsdCAmJiAhSVNfRVJSKFJFSVNFUkZTX0koZGlyKS0+aV9hY2xfZGVmYXVsdCkpIHsKLQkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrX3hhdHRycyhkaXItPmlfc2IpOwotCQlpcHV0KGlub2RlKTsKLQkJcmVpc2VyZnNfd3JpdGVfbG9ja194YXR0cnMoZGlyLT5pX3NiKTsKLQl9IGVsc2UKLSNlbmRpZgotCQlpcHV0KGlub2RlKTsKKwlpcHV0KGlub2RlKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xOTg5LDcgKzE5ODcsNyBAQAogKioKICoqIG9uIGZhaWx1cmUsIG5vbnplcm8gaXMgcmV0dXJuZWQsIHBhZ2VfcmVzdWx0IGFuZCBiaF9yZXN1bHQgYXJlIHVudG91Y2hlZC4KICovCi1zdGF0aWMgaW50IGdyYWJfdGFpbF9wYWdlKHN0cnVjdCBpbm9kZSAqcF9zX2lub2RlLAorc3RhdGljIGludCBncmFiX3RhaWxfcGFnZShzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJICBzdHJ1Y3QgcGFnZSAqKnBhZ2VfcmVzdWx0LAogCQkJICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKipiaF9yZXN1bHQpCiB7CkBAIC0xOTk3LDExICsxOTk1LDExIEBACiAJLyogd2Ugd2FudCB0aGUgcGFnZSB3aXRoIHRoZSBsYXN0IGJ5dGUgaW4gdGhlIGZpbGUsCiAJICoqIG5vdCB0aGUgcGFnZSB0aGF0IHdpbGwgaG9sZCB0aGUgbmV4dCBieXRlIGZvciBhcHBlbmRpbmcKIAkgKi8KLQl1bnNpZ25lZCBsb25nIGluZGV4ID0gKHBfc19pbm9kZS0+aV9zaXplIC0gMSkgPj4gUEFHRV9DQUNIRV9TSElGVDsKKwl1bnNpZ25lZCBsb25nIGluZGV4ID0gKGlub2RlLT5pX3NpemUgLSAxKSA+PiBQQUdFX0NBQ0hFX1NISUZUOwogCXVuc2lnbmVkIGxvbmcgcG9zID0gMDsKIAl1bnNpZ25lZCBsb25nIHN0YXJ0ID0gMDsKLQl1bnNpZ25lZCBsb25nIGJsb2Nrc2l6ZSA9IHBfc19pbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7Ci0JdW5zaWduZWQgbG9uZyBvZmZzZXQgPSAocF9zX2lub2RlLT5pX3NpemUpICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOworCXVuc2lnbmVkIGxvbmcgYmxvY2tzaXplID0gaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplOworCXVuc2lnbmVkIGxvbmcgb2Zmc2V0ID0gKGlub2RlLT5pX3NpemUpICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpoZWFkOwogCXN0cnVjdCBwYWdlICpwYWdlOwpAQCAtMjAxNSw3ICsyMDEzLDcgQEAKIAlpZiAoKG9mZnNldCAmIChibG9ja3NpemUgLSAxKSkgPT0gMCkgewogCQlyZXR1cm4gLUVOT0VOVDsKIAl9Ci0JcGFnZSA9IGdyYWJfY2FjaGVfcGFnZShwX3NfaW5vZGUtPmlfbWFwcGluZywgaW5kZXgpOworCXBhZ2UgPSBncmFiX2NhY2hlX3BhZ2UoaW5vZGUtPmlfbWFwcGluZywgaW5kZXgpOwogCWVycm9yID0gLUVOT01FTTsKIAlpZiAoIXBhZ2UpIHsKIAkJZ290byBvdXQ7CkBAIC0yMDQ0LDEwICsyMDQyLDggQEAKIAkJICoqIEkndmUgc2NyZXdlZCB1cCB0aGUgY29kZSB0byBmaW5kIHRoZSBidWZmZXIsIG9yIHRoZSBjb2RlIHRvCiAJCSAqKiBjYWxsIHByZXBhcmVfd3JpdGUKIAkJICovCi0JCXJlaXNlcmZzX3dhcm5pbmcocF9zX2lub2RlLT5pX3NiLAotCQkJCSAiY2xtLTYwMDA6IGVycm9yIHJlYWRpbmcgYmxvY2sgJWx1IG9uIGRldiAlcyIsCi0JCQkJIGJoLT5iX2Jsb2NrbnIsCi0JCQkJIHJlaXNlcmZzX2JkZXZuYW1lKHBfc19pbm9kZS0+aV9zYikpOworCQlyZWlzZXJmc19lcnJvcihpbm9kZS0+aV9zYiwgImNsbS02MDAwIiwKKwkJCSAgICAgICAiZXJyb3IgcmVhZGluZyBibG9jayAlbHUiLCBiaC0+Yl9ibG9ja25yKTsKIAkJZXJyb3IgPSAtRUlPOwogCQlnb3RvIHVubG9jazsKIAl9CkBAIC0yMDY5LDU3ICsyMDY1LDU4IEBACiAqKgogKiogc29tZSBjb2RlIHRha2VuIGZyb20gYmxvY2tfdHJ1bmNhdGVfcGFnZQogKi8KLWludCByZWlzZXJmc190cnVuY2F0ZV9maWxlKHN0cnVjdCBpbm9kZSAqcF9zX2lub2RlLCBpbnQgdXBkYXRlX3RpbWVzdGFtcHMpCitpbnQgcmVpc2VyZnNfdHJ1bmNhdGVfZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdXBkYXRlX3RpbWVzdGFtcHMpCiB7CiAJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB0aDsKIAkvKiB3ZSB3YW50IHRoZSBvZmZzZXQgZm9yIHRoZSBmaXJzdCBieXRlIGFmdGVyIHRoZSBlbmQgb2YgdGhlIGZpbGUgKi8KLQl1bnNpZ25lZCBsb25nIG9mZnNldCA9IHBfc19pbm9kZS0+aV9zaXplICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOwotCXVuc2lnbmVkIGJsb2Nrc2l6ZSA9IHBfc19pbm9kZS0+aV9zYi0+c19ibG9ja3NpemU7CisJdW5zaWduZWQgbG9uZyBvZmZzZXQgPSBpbm9kZS0+aV9zaXplICYgKFBBR0VfQ0FDSEVfU0laRSAtIDEpOworCXVuc2lnbmVkIGJsb2Nrc2l6ZSA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZTsKIAl1bnNpZ25lZCBsZW5ndGg7CiAJc3RydWN0IHBhZ2UgKnBhZ2UgPSBOVUxMOwogCWludCBlcnJvcjsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDsKIAlpbnQgZXJyMjsKIAotCXJlaXNlcmZzX3dyaXRlX2xvY2socF9zX2lub2RlLT5pX3NiKTsKKwlyZWlzZXJmc193cml0ZV9sb2NrKGlub2RlLT5pX3NiKTsKIAotCWlmIChwX3NfaW5vZGUtPmlfc2l6ZSA+IDApIHsKLQkJaWYgKChlcnJvciA9IGdyYWJfdGFpbF9wYWdlKHBfc19pbm9kZSwgJnBhZ2UsICZiaCkpKSB7Ci0JCQkvLyAtRU5PRU5UIG1lYW5zIHdlIHRydW5jYXRlZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGZpbGUsIAorCWlmIChpbm9kZS0+aV9zaXplID4gMCkgeworCQllcnJvciA9IGdyYWJfdGFpbF9wYWdlKGlub2RlLCAmcGFnZSwgJmJoKTsKKwkJaWYgKGVycm9yKSB7CisJCQkvLyAtRU5PRU5UIG1lYW5zIHdlIHRydW5jYXRlZCBwYXN0IHRoZSBlbmQgb2YgdGhlIGZpbGUsCiAJCQkvLyBhbmQgZ2V0X2Jsb2NrX2NyZWF0ZV8wIGNvdWxkIG5vdCBmaW5kIGEgYmxvY2sgdG8gcmVhZCBpbiwKIAkJCS8vIHdoaWNoIGlzIG9rLgogCQkJaWYgKGVycm9yICE9IC1FTk9FTlQpCi0JCQkJcmVpc2VyZnNfd2FybmluZyhwX3NfaW5vZGUtPmlfc2IsCi0JCQkJCQkgImNsbS02MDAxOiBncmFiX3RhaWxfcGFnZSBmYWlsZWQgJWQiLAotCQkJCQkJIGVycm9yKTsKKwkJCQlyZWlzZXJmc19lcnJvcihpbm9kZS0+aV9zYiwgImNsbS02MDAxIiwKKwkJCQkJICAgICAgICJncmFiX3RhaWxfcGFnZSBmYWlsZWQgJWQiLAorCQkJCQkgICAgICAgZXJyb3IpOwogCQkJcGFnZSA9IE5VTEw7CiAJCQliaCA9IE5VTEw7CiAJCX0KIAl9CiAKLQkvKiBzbywgaWYgcGFnZSAhPSBOVUxMLCB3ZSBoYXZlIGEgYnVmZmVyIGhlYWQgZm9yIHRoZSBvZmZzZXQgYXQgCi0JICoqIHRoZSBlbmQgb2YgdGhlIGZpbGUuIGlmIHRoZSBiaCBpcyBtYXBwZWQsIGFuZCBiaC0+Yl9ibG9ja25yICE9IDAsIAotCSAqKiB0aGVuIHdlIGhhdmUgYW4gdW5mb3JtYXR0ZWQgbm9kZS4gIE90aGVyd2lzZSwgd2UgaGF2ZSBhIGRpcmVjdCBpdGVtLCAKLQkgKiogYW5kIG5vIHplcm9pbmcgaXMgcmVxdWlyZWQgb24gZGlzay4gIFdlIHplcm8gYWZ0ZXIgdGhlIHRydW5jYXRlLCAKLQkgKiogYmVjYXVzZSB0aGUgdHJ1bmNhdGUgbWlnaHQgcGFjayB0aGUgaXRlbSBhbnl3YXkgCisJLyogc28sIGlmIHBhZ2UgIT0gTlVMTCwgd2UgaGF2ZSBhIGJ1ZmZlciBoZWFkIGZvciB0aGUgb2Zmc2V0IGF0CisJICoqIHRoZSBlbmQgb2YgdGhlIGZpbGUuIGlmIHRoZSBiaCBpcyBtYXBwZWQsIGFuZCBiaC0+Yl9ibG9ja25yICE9IDAsCisJICoqIHRoZW4gd2UgaGF2ZSBhbiB1bmZvcm1hdHRlZCBub2RlLiAgT3RoZXJ3aXNlLCB3ZSBoYXZlIGEgZGlyZWN0IGl0ZW0sCisJICoqIGFuZCBubyB6ZXJvaW5nIGlzIHJlcXVpcmVkIG9uIGRpc2suICBXZSB6ZXJvIGFmdGVyIHRoZSB0cnVuY2F0ZSwKKwkgKiogYmVjYXVzZSB0aGUgdHJ1bmNhdGUgbWlnaHQgcGFjayB0aGUgaXRlbSBhbnl3YXkKIAkgKiogKGl0IHdpbGwgdW5tYXAgYmggaWYgaXQgcGFja3MpLgogCSAqLwogCS8qIGl0IGlzIGVub3VnaCB0byByZXNlcnZlIHNwYWNlIGluIHRyYW5zYWN0aW9uIGZvciAyIGJhbGFuY2luZ3M6CiAJICAgb25lIGZvciAic2F2ZSIgbGluayBhZGRpbmcgYW5kIGFub3RoZXIgZm9yIHRoZSBmaXJzdAogCSAgIGN1dF9mcm9tX2l0ZW0uIDEgaXMgZm9yIHVwZGF0ZV9zZCAqLwotCWVycm9yID0gam91cm5hbF9iZWdpbigmdGgsIHBfc19pbm9kZS0+aV9zYiwKKwllcnJvciA9IGpvdXJuYWxfYmVnaW4oJnRoLCBpbm9kZS0+aV9zYiwKIAkJCSAgICAgIEpPVVJOQUxfUEVSX0JBTEFOQ0VfQ05UICogMiArIDEpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXQ7Ci0JcmVpc2VyZnNfdXBkYXRlX2lub2RlX3RyYW5zYWN0aW9uKHBfc19pbm9kZSk7CisJcmVpc2VyZnNfdXBkYXRlX2lub2RlX3RyYW5zYWN0aW9uKGlub2RlKTsKIAlpZiAodXBkYXRlX3RpbWVzdGFtcHMpCiAJCS8qIHdlIGFyZSBkb2luZyByZWFsIHRydW5jYXRlOiBpZiB0aGUgc3lzdGVtIGNyYXNoZXMgYmVmb3JlIHRoZSBsYXN0CiAJCSAgIHRyYW5zYWN0aW9uIG9mIHRydW5jYXRpbmcgZ2V0cyBjb21taXR0ZWQgLSBvbiByZWJvb3QgdGhlIGZpbGUKIAkJICAgZWl0aGVyIGFwcGVhcnMgdHJ1bmNhdGVkIHByb3Blcmx5IG9yIG5vdCB0cnVuY2F0ZWQgYXQgYWxsICovCi0JCWFkZF9zYXZlX2xpbmsoJnRoLCBwX3NfaW5vZGUsIDEpOwotCWVycjIgPSByZWlzZXJmc19kb190cnVuY2F0ZSgmdGgsIHBfc19pbm9kZSwgcGFnZSwgdXBkYXRlX3RpbWVzdGFtcHMpOworCQlhZGRfc2F2ZV9saW5rKCZ0aCwgaW5vZGUsIDEpOworCWVycjIgPSByZWlzZXJmc19kb190cnVuY2F0ZSgmdGgsIGlub2RlLCBwYWdlLCB1cGRhdGVfdGltZXN0YW1wcyk7CiAJZXJyb3IgPQotCSAgICBqb3VybmFsX2VuZCgmdGgsIHBfc19pbm9kZS0+aV9zYiwgSk9VUk5BTF9QRVJfQkFMQU5DRV9DTlQgKiAyICsgMSk7CisJICAgIGpvdXJuYWxfZW5kKCZ0aCwgaW5vZGUtPmlfc2IsIEpPVVJOQUxfUEVSX0JBTEFOQ0VfQ05UICogMiArIDEpOwogCWlmIChlcnJvcikKIAkJZ290byBvdXQ7CiAKQEAgLTIxMzAsNyArMjEyNyw3IEBACiAJfQogCQogCWlmICh1cGRhdGVfdGltZXN0YW1wcykgewotCQllcnJvciA9IHJlbW92ZV9zYXZlX2xpbmsocF9zX2lub2RlLCAxIC8qIHRydW5jYXRlICovICk7CisJCWVycm9yID0gcmVtb3ZlX3NhdmVfbGluayhpbm9kZSwgMSAvKiB0cnVuY2F0ZSAqLyk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gb3V0OwogCX0KQEAgLTIxNDksMTQgKzIxNDYsMTQgQEAKIAkJcGFnZV9jYWNoZV9yZWxlYXNlKHBhZ2UpOwogCX0KIAotCXJlaXNlcmZzX3dyaXRlX3VubG9jayhwX3NfaW5vZGUtPmlfc2IpOworCXJlaXNlcmZzX3dyaXRlX3VubG9jayhpbm9kZS0+aV9zYik7CiAJcmV0dXJuIDA7CiAgICAgICBvdXQ6CiAJaWYgKHBhZ2UpIHsKIAkJdW5sb2NrX3BhZ2UocGFnZSk7CiAJCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIAl9Ci0JcmVpc2VyZnNfd3JpdGVfdW5sb2NrKHBfc19pbm9kZS0+aV9zYik7CisJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGlub2RlLT5pX3NiKTsKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTIyMDgsOSArMjIwNSw4IEBACiAJLyogd2UndmUgZm91bmQgYW4gdW5mb3JtYXR0ZWQgbm9kZSAqLwogCWlmIChpbmRpcmVjdF9pdGVtX2ZvdW5kKHJldHZhbCwgaWgpKSB7CiAJCWlmIChieXRlc19jb3BpZWQgPiAwKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAotCQkJCQkgImNsbS02MDAyOiBieXRlc19jb3BpZWQgJWQiLAotCQkJCQkgYnl0ZXNfY29waWVkKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICJjbG0tNjAwMiIsCisJCQkJCSAiYnl0ZXNfY29waWVkICVkIiwgYnl0ZXNfY29waWVkKTsKIAkJfQogCQlpZiAoIWdldF9ibG9ja19udW0oaXRlbSwgcG9zX2luX2l0ZW0pKSB7CiAJCQkvKiBjcmFwLCB3ZSBhcmUgd3JpdGluZyB0byBhIGhvbGUgKi8KQEAgLTIyNjcsOSArMjI2Myw4IEBACiAJCQlnb3RvIHJlc2VhcmNoOwogCQl9CiAJfSBlbHNlIHsKLQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwKLQkJCQkgImNsbS02MDAzOiBiYWQgaXRlbSBpbm9kZSAlbHUsIGRldmljZSAlcyIsCi0JCQkJIGlub2RlLT5pX2lubywgcmVpc2VyZnNfYmRldm5hbWUoaW5vZGUtPmlfc2IpKTsKKwkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgImNsbS02MDAzIiwKKwkJCQkgImJhZCBpdGVtIGlub2RlICVsdSIsIGlub2RlLT5pX2lubyk7CiAJCXJldHZhbCA9IC1FSU87CiAJCWdvdG8gb3V0OwogCX0KQEAgLTIzMTIsOCArMjMwNyw4IEBACiAJcmV0dXJuIHJldHZhbDsKIH0KIAotLyogCi0gKiBtYXNvbkBzdXNlLmNvbTogdXBkYXRlZCBpbiAyLjUuNTQgdG8gZm9sbG93IHRoZSBzYW1lIGdlbmVyYWwgaW8gCisvKgorICogbWFzb25Ac3VzZS5jb206IHVwZGF0ZWQgaW4gMi41LjU0IHRvIGZvbGxvdyB0aGUgc2FtZSBnZW5lcmFsIGlvCiAgKiBzdGFydC9yZWNvdmVyeSBwYXRoIGFzIF9fYmxvY2tfd3JpdGVfZnVsbF9wYWdlLCBhbG9uZyB3aXRoIHNwZWNpYWwKICAqIGNvZGUgdG8gaGFuZGxlIHJlaXNlcmZzIHRhaWxzLgogICovCkBAIC0yNDUzLDcgKzI0NDgsNyBAQAogCXVubG9ja19wYWdlKHBhZ2UpOwogCiAJLyoKLQkgKiBzaW5jZSBhbnkgYnVmZmVyIG1pZ2h0IGJlIHRoZSBvbmx5IGRpcnR5IGJ1ZmZlciBvbiB0aGUgcGFnZSwgCisJICogc2luY2UgYW55IGJ1ZmZlciBtaWdodCBiZSB0aGUgb25seSBkaXJ0eSBidWZmZXIgb24gdGhlIHBhZ2UsCiAJICogdGhlIGZpcnN0IHN1Ym1pdF9iaCBjYW4gYnJpbmcgdGhlIHBhZ2Ugb3V0IG9mIHdyaXRlYmFjay4KIAkgKiBiZSBjYXJlZnVsIHdpdGggdGhlIGJ1ZmZlcnMuCiAJICovCkBAIC0yNDcyLDggKzI0NjcsOCBAQAogCWlmIChuciA9PSAwKSB7CiAJCS8qCiAJCSAqIGlmIHRoaXMgcGFnZSBvbmx5IGhhZCBhIGRpcmVjdCBpdGVtLCBpdCBpcyB2ZXJ5IHBvc3NpYmxlIGZvcgotCQkgKiBubyBpbyB0byBiZSByZXF1aXJlZCB3aXRob3V0IHRoZXJlIGJlaW5nIGFuIGVycm9yLiAgT3IsIAotCQkgKiBzb21lb25lIGVsc2UgY291bGQgaGF2ZSBsb2NrZWQgdGhlbSBhbmQgc2VudCB0aGVtIGRvd24gdGhlIAorCQkgKiBubyBpbyB0byBiZSByZXF1aXJlZCB3aXRob3V0IHRoZXJlIGJlaW5nIGFuIGVycm9yLiAgT3IsCisJCSAqIHNvbWVvbmUgZWxzZSBjb3VsZCBoYXZlIGxvY2tlZCB0aGVtIGFuZCBzZW50IHRoZW0gZG93biB0aGUKIAkJICogcGlwZSB3aXRob3V0IGxvY2tpbmcgdGhlIHBhZ2UKIAkJICovCiAJCWJoID0gaGVhZDsKQEAgLTI0OTIsNyArMjQ4Nyw3IEBACiAKICAgICAgIGZhaWw6CiAJLyogY2F0Y2hlcyB2YXJpb3VzIGVycm9ycywgd2UgbmVlZCB0byBtYWtlIHN1cmUgYW55IHZhbGlkIGRpcnR5IGJsb2NrcwotCSAqIGdldCB0byB0aGUgbWVkaWEuICBUaGUgcGFnZSBpcyBjdXJyZW50bHkgbG9ja2VkIGFuZCBub3QgbWFya2VkIGZvciAKKwkgKiBnZXQgdG8gdGhlIG1lZGlhLiAgVGhlIHBhZ2UgaXMgY3VycmVudGx5IGxvY2tlZCBhbmQgbm90IG1hcmtlZCBmb3IKIAkgKiB3cml0ZWJhY2sKIAkgKi8KIAlDbGVhclBhZ2VVcHRvZGF0ZShwYWdlKTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2lvY3RsLmMgYi9mcy9yZWlzZXJmcy9pb2N0bC5jCmluZGV4IDgzMDMzMjAuLjBjY2MzZmQgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2lvY3RsLmMKKysrIGIvZnMvcmVpc2VyZnMvaW9jdGwuYwpAQCAtMTg5LDcgKzE4OSw3IEBACiAJfQogCiAJLyogd2UgdW5wYWNrIGJ5IGZpbmRpbmcgdGhlIHBhZ2Ugd2l0aCB0aGUgdGFpbCwgYW5kIGNhbGxpbmcKLQkgKiogcmVpc2VyZnNfcHJlcGFyZV93cml0ZSBvbiB0aGF0IHBhZ2UuICBUaGlzIHdpbGwgZm9yY2UgYSAKKwkgKiogcmVpc2VyZnNfcHJlcGFyZV93cml0ZSBvbiB0aGF0IHBhZ2UuICBUaGlzIHdpbGwgZm9yY2UgYQogCSAqKiByZWlzZXJmc19nZXRfYmxvY2sgdG8gdW5wYWNrIHRoZSB0YWlsIGZvciB1cy4KIAkgKi8KIAlpbmRleCA9IGlub2RlLT5pX3NpemUgPj4gUEFHRV9DQUNIRV9TSElGVDsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL2l0ZW1fb3BzLmMgYi9mcy9yZWlzZXJmcy9pdGVtX29wcy5jCmluZGV4IDk0NzU1NTcuLjcyY2IxY2MgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL2l0ZW1fb3BzLmMKKysrIGIvZnMvcmVpc2VyZnMvaXRlbV9vcHMuYwpAQCAtOTcsNyArOTcsOCBAQAogCiBzdGF0aWMgdm9pZCBzZF9wcmludF92aShzdHJ1Y3QgdmlydHVhbF9pdGVtICp2aSkKIHsKLQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJTVEFUREFUQSwgaW5kZXggJWQsIHR5cGUgMHgleCwgJWgiLAorCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgInJlaXNlcmZzLTE2MTAwIiwKKwkJCSAiU1RBVERBVEEsIGluZGV4ICVkLCB0eXBlIDB4JXgsICVoIiwKIAkJCSB2aS0+dmlfaW5kZXgsIHZpLT52aV90eXBlLCB2aS0+dmlfaWgpOwogfQogCkBAIC0xOTAsNyArMTkxLDggQEAKIAogc3RhdGljIHZvaWQgZGlyZWN0X3ByaW50X3ZpKHN0cnVjdCB2aXJ0dWFsX2l0ZW0gKnZpKQogewotCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgIkRJUkVDVCwgaW5kZXggJWQsIHR5cGUgMHgleCwgJWgiLAorCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgInJlaXNlcmZzLTE2MTAxIiwKKwkJCSAiRElSRUNULCBpbmRleCAlZCwgdHlwZSAweCV4LCAlaCIsCiAJCQkgdmktPnZpX2luZGV4LCB2aS0+dmlfdHlwZSwgdmktPnZpX2loKTsKIH0KIApAQCAtMjc4LDcgKzI4MCw3IEBACiAJdW5wID0gKF9fbGUzMiAqKSBpdGVtOwogCiAJaWYgKGloX2l0ZW1fbGVuKGloKSAlIFVORk1fUF9TSVpFKQotCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJpbmRpcmVjdF9wcmludF9pdGVtOiBpbnZhbGlkIGl0ZW0gbGVuIik7CisJCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgInJlaXNlcmZzLTE2MTAyIiwgImludmFsaWQgaXRlbSBsZW4iKTsKIAogCXByaW50aygiJWQgcG9pbnRlcnNcblsgIiwgKGludClJX1VORk1fTlVNKGloKSk7CiAJZm9yIChqID0gMDsgaiA8IElfVU5GTV9OVU0oaWgpOyBqKyspIHsKQEAgLTMzNCw3ICszMzYsOCBAQAogCiBzdGF0aWMgdm9pZCBpbmRpcmVjdF9wcmludF92aShzdHJ1Y3QgdmlydHVhbF9pdGVtICp2aSkKIHsKLQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJJTkRJUkVDVCwgaW5kZXggJWQsIHR5cGUgMHgleCwgJWgiLAorCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgInJlaXNlcmZzLTE2MTAzIiwKKwkJCSAiSU5ESVJFQ1QsIGluZGV4ICVkLCB0eXBlIDB4JXgsICVoIiwKIAkJCSB2aS0+dmlfaW5kZXgsIHZpLT52aV90eXBlLCB2aS0+dmlfaWgpOwogfQogCkBAIC0zNTksNyArMzYyLDcgQEAKIAogc3RhdGljIGludCBkaXJlbnRyeV9ieXRlc19udW1iZXIoc3RydWN0IGl0ZW1faGVhZCAqaWgsIGludCBibG9ja19zaXplKQogewotCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgInZzLTE2MDkwOiBkaXJlbnRyeV9ieXRlc19udW1iZXI6ICIKKwlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJ2cy0xNjA5MCIsCiAJCQkgImJ5dGVzIG51bWJlciBpcyBhc2tlZCBmb3IgZGlyZW50cnkiKTsKIAlyZXR1cm4gMDsKIH0KQEAgLTUxNCw4ICs1MTcsOSBAQAogCQkgICAgKChpc19hZmZlY3RlZAogCQkgICAgICAmJiAodm4tPnZuX21vZGUgPT0gTV9QQVNURQogCQkJICB8fCB2bi0+dm5fbW9kZSA9PSBNX0NVVCkpID8gaW5zZXJ0X3NpemUgOiAwKSkgewotCQkJcmVpc2VyZnNfcGFuaWMoTlVMTCwKLQkJCQkgICAgICAgInZzLTgwMjU6IHNldF9lbnRyeV9zaXplczogKG1vZGU9PSVjLCBpbnNlcnRfc2l6ZT09JWQpLCBpbnZhbGlkIGxlbmd0aCBvZiBkaXJlY3RvcnkgaXRlbSIsCisJCQlyZWlzZXJmc19wYW5pYyhOVUxMLCAidnMtODAyNSIsICIobW9kZT09JWMsICIKKwkJCQkgICAgICAgImluc2VydF9zaXplPT0lZCksIGludmFsaWQgbGVuZ3RoIG9mICIKKwkJCQkgICAgICAgImRpcmVjdG9yeSBpdGVtIiwKIAkJCQkgICAgICAgdm4tPnZuX21vZGUsIGluc2VydF9zaXplKTsKIAkJfQogCX0KQEAgLTU0Niw3ICs1NTAsOCBAQAogCX0KIAogCWlmIChlbnRyaWVzID09IGRpcl91LT5lbnRyeV9jb3VudCkgewotCQlyZWlzZXJmc19wYW5pYyhOVUxMLCAiZnJlZSBzcGFjZSAlZCwgZW50cnlfY291bnQgJWRcbiIsIGZyZWUsCisJCXJlaXNlcmZzX3BhbmljKE5VTEwsICJpdGVtX29wcy0xIiwKKwkJCSAgICAgICAiZnJlZSBzcGFjZSAlZCwgZW50cnlfY291bnQgJWQiLCBmcmVlLAogCQkJICAgICAgIGRpcl91LT5lbnRyeV9jb3VudCk7CiAJfQogCkBAIC02MTQsNyArNjE5LDggQEAKIAlpbnQgaTsKIAlzdHJ1Y3QgZGlyZW50cnlfdWFyZWEgKmRpcl91ID0gdmktPnZpX3VhcmVhOwogCi0JcmVpc2VyZnNfd2FybmluZyhOVUxMLCAiRElSRU5UUlksIGluZGV4ICVkLCB0eXBlIDB4JXgsICVoLCBmbGFncyAweCV4IiwKKwlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJyZWlzZXJmcy0xNjEwNCIsCisJCQkgIkRJUkVOVFJZLCBpbmRleCAlZCwgdHlwZSAweCV4LCAlaCwgZmxhZ3MgMHgleCIsCiAJCQkgdmktPnZpX2luZGV4LCB2aS0+dmlfdHlwZSwgdmktPnZpX2loLCBkaXJfdS0+ZmxhZ3MpOwogCXByaW50aygiJWQgZW50cmllczogIiwgZGlyX3UtPmVudHJ5X2NvdW50KTsKIAlmb3IgKGkgPSAwOyBpIDwgZGlyX3UtPmVudHJ5X2NvdW50OyBpKyspCkBAIC02NDIsNDMgKzY0OCw0MyBAQAogLy8KIHN0YXRpYyBpbnQgZXJyY2F0Y2hfYnl0ZXNfbnVtYmVyKHN0cnVjdCBpdGVtX2hlYWQgKmloLCBpbnQgYmxvY2tfc2l6ZSkKIHsKLQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkgImdyZWVuLTE2MDAxOiBJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOworCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgImdyZWVuLTE2MDAxIiwKKwkJCSAiSW52YWxpZCBpdGVtIHR5cGUgb2JzZXJ2ZWQsIHJ1biBmc2NrIEFTQVAiKTsKIAlyZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgZXJyY2F0Y2hfZGVjcmVtZW50X2tleShzdHJ1Y3QgY3B1X2tleSAqa2V5KQogewotCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCSAiZ3JlZW4tMTYwMDI6IEludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CisJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAiZ3JlZW4tMTYwMDIiLAorCQkJICJJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOwogfQogCiBzdGF0aWMgaW50IGVycmNhdGNoX2lzX2xlZnRfbWVyZ2VhYmxlKHN0cnVjdCByZWlzZXJmc19rZXkgKmtleSwKIAkJCQkgICAgICB1bnNpZ25lZCBsb25nIGJzaXplKQogewotCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCSAiZ3JlZW4tMTYwMDM6IEludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CisJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAiZ3JlZW4tMTYwMDMiLAorCQkJICJJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOwogCXJldHVybiAwOwogfQogCiBzdGF0aWMgdm9pZCBlcnJjYXRjaF9wcmludF9pdGVtKHN0cnVjdCBpdGVtX2hlYWQgKmloLCBjaGFyICppdGVtKQogewotCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCSAiZ3JlZW4tMTYwMDQ6IEludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CisJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAiZ3JlZW4tMTYwMDQiLAorCQkJICJJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOwogfQogCiBzdGF0aWMgdm9pZCBlcnJjYXRjaF9jaGVja19pdGVtKHN0cnVjdCBpdGVtX2hlYWQgKmloLCBjaGFyICppdGVtKQogewotCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCSAiZ3JlZW4tMTYwMDU6IEludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CisJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAiZ3JlZW4tMTYwMDUiLAorCQkJICJJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOwogfQogCiBzdGF0aWMgaW50IGVycmNhdGNoX2NyZWF0ZV92aShzdHJ1Y3QgdmlydHVhbF9ub2RlICp2biwKIAkJCSAgICAgIHN0cnVjdCB2aXJ0dWFsX2l0ZW0gKnZpLAogCQkJICAgICAgaW50IGlzX2FmZmVjdGVkLCBpbnQgaW5zZXJ0X3NpemUpCiB7Ci0JcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJICJncmVlbi0xNjAwNjogSW52YWxpZCBpdGVtIHR5cGUgb2JzZXJ2ZWQsIHJ1biBmc2NrIEFTQVAiKTsKKwlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJncmVlbi0xNjAwNiIsCisJCQkgIkludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CiAJcmV0dXJuIDA7CQkvLyBXZSBtaWdodCByZXR1cm4gLTEgaGVyZSBhcyB3ZWxsLCBidXQgaXQgd29uJ3QgaGVscCBhcyBjcmVhdGVfdmlydHVhbF9ub2RlKCkgZnJvbSB3aGVyZQogCS8vIHRoaXMgb3BlcmF0aW9uIGlzIGNhbGxlZCBmcm9tIGlzIG9mIHJldHVybiB0eXBlIHZvaWQuCiB9CkBAIC02ODYsMzYgKzY5MiwzNiBAQAogc3RhdGljIGludCBlcnJjYXRjaF9jaGVja19sZWZ0KHN0cnVjdCB2aXJ0dWFsX2l0ZW0gKnZpLCBpbnQgZnJlZSwKIAkJCSAgICAgICBpbnQgc3RhcnRfc2tpcCwgaW50IGVuZF9za2lwKQogewotCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCSAiZ3JlZW4tMTYwMDc6IEludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CisJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAiZ3JlZW4tMTYwMDciLAorCQkJICJJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOwogCXJldHVybiAtMTsKIH0KIAogc3RhdGljIGludCBlcnJjYXRjaF9jaGVja19yaWdodChzdHJ1Y3QgdmlydHVhbF9pdGVtICp2aSwgaW50IGZyZWUpCiB7Ci0JcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJICJncmVlbi0xNjAwODogSW52YWxpZCBpdGVtIHR5cGUgb2JzZXJ2ZWQsIHJ1biBmc2NrIEFTQVAiKTsKKwlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJncmVlbi0xNjAwOCIsCisJCQkgIkludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CiAJcmV0dXJuIC0xOwogfQogCiBzdGF0aWMgaW50IGVycmNhdGNoX3BhcnRfc2l6ZShzdHJ1Y3QgdmlydHVhbF9pdGVtICp2aSwgaW50IGZpcnN0LCBpbnQgY291bnQpCiB7Ci0JcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJICJncmVlbi0xNjAwOTogSW52YWxpZCBpdGVtIHR5cGUgb2JzZXJ2ZWQsIHJ1biBmc2NrIEFTQVAiKTsKKwlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJncmVlbi0xNjAwOSIsCisJCQkgIkludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgZXJyY2F0Y2hfdW5pdF9udW0oc3RydWN0IHZpcnR1YWxfaXRlbSAqdmkpCiB7Ci0JcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJICJncmVlbi0xNjAxMDogSW52YWxpZCBpdGVtIHR5cGUgb2JzZXJ2ZWQsIHJ1biBmc2NrIEFTQVAiKTsKKwlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJncmVlbi0xNjAxMCIsCisJCQkgIkludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyB2b2lkIGVycmNhdGNoX3ByaW50X3ZpKHN0cnVjdCB2aXJ0dWFsX2l0ZW0gKnZpKQogewotCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCSAiZ3JlZW4tMTYwMTE6IEludmFsaWQgaXRlbSB0eXBlIG9ic2VydmVkLCBydW4gZnNjayBBU0FQIik7CisJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAiZ3JlZW4tMTYwMTEiLAorCQkJICJJbnZhbGlkIGl0ZW0gdHlwZSBvYnNlcnZlZCwgcnVuIGZzY2sgQVNBUCIpOwogfQogCiBzdGF0aWMgc3RydWN0IGl0ZW1fb3BlcmF0aW9ucyBlcnJjYXRjaF9vcHMgPSB7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9qb3VybmFsLmMgYi9mcy9yZWlzZXJmcy9qb3VybmFsLmMKaW5kZXggOTY0M2MzYi4uNzdmNWJiNyAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvam91cm5hbC5jCisrKyBiL2ZzL3JlaXNlcmZzL2pvdXJuYWwuYwpAQCAtMSwzNiArMSwzNiBAQAogLyoKICoqIFdyaXRlIGFoZWFkIGxvZ2dpbmcgaW1wbGVtZW50YXRpb24gY29weXJpZ2h0IENocmlzIE1hc29uIDIwMDAKICoqCi0qKiBUaGUgYmFja2dyb3VuZCBjb21taXRzIG1ha2UgdGhpcyBjb2RlIHZlcnkgaW50ZXJlbGF0ZWQsIGFuZCAKKyoqIFRoZSBiYWNrZ3JvdW5kIGNvbW1pdHMgbWFrZSB0aGlzIGNvZGUgdmVyeSBpbnRlcmVsYXRlZCwgYW5kCiAqKiBvdmVybHkgY29tcGxleC4gIEkgbmVlZCB0byByZXRoaW5rIHRoaW5ncyBhIGJpdC4uLi5UaGUgbWFqb3IgcGxheWVyczoKICoqCi0qKiBqb3VybmFsX2JlZ2luIC0tIGNhbGwgd2l0aCB0aGUgbnVtYmVyIG9mIGJsb2NrcyB5b3UgZXhwZWN0IHRvIGxvZy4gIAorKiogam91cm5hbF9iZWdpbiAtLSBjYWxsIHdpdGggdGhlIG51bWJlciBvZiBibG9ja3MgeW91IGV4cGVjdCB0byBsb2cuCiAqKiAgICAgICAgICAgICAgICAgIElmIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGlzIHRvbwotKiogCQkgICAgb2xkLCBpdCB3aWxsIGJsb2NrIHVudGlsIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGlzIAorKiogCQkgICAgb2xkLCBpdCB3aWxsIGJsb2NrIHVudGlsIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGlzCiAqKiAJCSAgICBmaW5pc2hlZCwgYW5kIHRoZW4gc3RhcnQgYSBuZXcgb25lLgotKioJCSAgICBVc3VhbGx5LCB5b3VyIHRyYW5zYWN0aW9uIHdpbGwgZ2V0IGpvaW5lZCBpbiB3aXRoIAorKioJCSAgICBVc3VhbGx5LCB5b3VyIHRyYW5zYWN0aW9uIHdpbGwgZ2V0IGpvaW5lZCBpbiB3aXRoCiAqKiAgICAgICAgICAgICAgICAgIHByZXZpb3VzIG9uZXMgZm9yIHNwZWVkLgogKioKLSoqIGpvdXJuYWxfam9pbiAgLS0gc2FtZSBhcyBqb3VybmFsX2JlZ2luLCBidXQgd29uJ3QgYmxvY2sgb24gdGhlIGN1cnJlbnQgCisqKiBqb3VybmFsX2pvaW4gIC0tIHNhbWUgYXMgam91cm5hbF9iZWdpbiwgYnV0IHdvbid0IGJsb2NrIG9uIHRoZSBjdXJyZW50CiAqKiAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uIHJlZ2FyZGxlc3Mgb2YgYWdlLiAgRG9uJ3QgZXZlciBjYWxsCi0qKiAgICAgICAgICAgICAgICAgIHRoaXMuICBFdmVyLiAgVGhlcmUgYXJlIG9ubHkgdHdvIHBsYWNlcyBpdCBzaG91bGQgYmUgCisqKiAgICAgICAgICAgICAgICAgIHRoaXMuICBFdmVyLiAgVGhlcmUgYXJlIG9ubHkgdHdvIHBsYWNlcyBpdCBzaG91bGQgYmUKICoqICAgICAgICAgICAgICAgICAgY2FsbGVkIGZyb20sIGFuZCB0aGV5IGFyZSBib3RoIGluc2lkZSB0aGlzIGZpbGUuCiAqKgotKiogam91cm5hbF9tYXJrX2RpcnR5IC0tIGFkZHMgYmxvY2tzIGludG8gdGhpcyB0cmFuc2FjdGlvbi4gIGNsZWFycyBhbnkgZmxhZ3MgCisqKiBqb3VybmFsX21hcmtfZGlydHkgLS0gYWRkcyBibG9ja3MgaW50byB0aGlzIHRyYW5zYWN0aW9uLiAgY2xlYXJzIGFueSBmbGFncwogKiogICAgICAgICAgICAgICAgICAgICAgIHRoYXQgbWlnaHQgbWFrZSB0aGVtIGdldCBzZW50IHRvIGRpc2sKLSoqICAgICAgICAgICAgICAgICAgICAgICBhbmQgdGhlbiBtYXJrcyB0aGVtIEJIX0pEaXJ0eS4gIFB1dHMgdGhlIGJ1ZmZlciBoZWFkIAotKiogICAgICAgICAgICAgICAgICAgICAgIGludG8gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gaGFzaC4gIAorKiogICAgICAgICAgICAgICAgICAgICAgIGFuZCB0aGVuIG1hcmtzIHRoZW0gQkhfSkRpcnR5LiAgUHV0cyB0aGUgYnVmZmVyIGhlYWQKKyoqICAgICAgICAgICAgICAgICAgICAgICBpbnRvIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGhhc2guCiAqKgogKiogam91cm5hbF9lbmQgLS0gaWYgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXMgYmF0Y2hhYmxlLCBpdCBkb2VzIG5vdGhpbmcKICoqICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSwgaXQgY291bGQgZG8gYW4gYXN5bmMvc3luY2hyb25vdXMgY29tbWl0LCBvcgotKiogICAgICAgICAgICAgICAgICAgYSBmdWxsIGZsdXNoIG9mIGFsbCBsb2cgYW5kIHJlYWwgYmxvY2tzIGluIHRoZSAKKyoqICAgICAgICAgICAgICAgICAgIGEgZnVsbCBmbHVzaCBvZiBhbGwgbG9nIGFuZCByZWFsIGJsb2NrcyBpbiB0aGUKICoqICAgICAgICAgICAgICAgICAgIHRyYW5zYWN0aW9uLgogKioKLSoqIGZsdXNoX29sZF9jb21taXRzIC0tIGlmIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGlzIHRvbyBvbGQsIGl0IGlzIGVuZGVkIGFuZCAKLSoqICAgICAgICAgICAgICAgICAgICAgIGNvbW1pdCBibG9ja3MgYXJlIHNlbnQgdG8gZGlzay4gIEZvcmNlcyBjb21taXQgYmxvY2tzIAotKiogICAgICAgICAgICAgICAgICAgICAgdG8gZGlzayBmb3IgYWxsIGJhY2tncm91bmRlZCBjb21taXRzIHRoYXQgaGF2ZSBiZWVuIAorKiogZmx1c2hfb2xkX2NvbW1pdHMgLS0gaWYgdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gaXMgdG9vIG9sZCwgaXQgaXMgZW5kZWQgYW5kCisqKiAgICAgICAgICAgICAgICAgICAgICBjb21taXQgYmxvY2tzIGFyZSBzZW50IHRvIGRpc2suICBGb3JjZXMgY29tbWl0IGJsb2NrcworKiogICAgICAgICAgICAgICAgICAgICAgdG8gZGlzayBmb3IgYWxsIGJhY2tncm91bmRlZCBjb21taXRzIHRoYXQgaGF2ZSBiZWVuCiAqKiAgICAgICAgICAgICAgICAgICAgICBhcm91bmQgdG9vIGxvbmcuCi0qKgkJICAgICAtLSBOb3RlLCBpZiB5b3UgY2FsbCB0aGlzIGFzIGFuIGltbWVkaWF0ZSBmbHVzaCBmcm9tIAorKioJCSAgICAgLS0gTm90ZSwgaWYgeW91IGNhbGwgdGhpcyBhcyBhbiBpbW1lZGlhdGUgZmx1c2ggZnJvbQogKioJCSAgICAgICAgZnJvbSB3aXRoaW4ga3VwZGF0ZSwgaXQgd2lsbCBpZ25vcmUgdGhlIGltbWVkaWF0ZSBmbGFnCiAqLwogCkBAIC05Nyw3ICs5Nyw3IEBACiAJCQkgICAgIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmpsLCBpbnQgZmx1c2hhbGwpOwogc3RhdGljIGludCBjYW5fZGlydHkoc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmNuKTsKIHN0YXRpYyBpbnQgam91cm5hbF9qb2luKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsIHVuc2lnbmVkIGxvbmcgbmJsb2Nrcyk7CisJCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIG5ibG9ja3MpOwogc3RhdGljIGludCByZWxlYXNlX2pvdXJuYWxfZGV2KHN0cnVjdCBzdXBlcl9ibG9jayAqc3VwZXIsCiAJCQkgICAgICAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwpOwogc3RhdGljIGludCBkaXJ0eV9vbmVfdHJhbnNhY3Rpb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzLApAQCAtMTEzLDEyICsxMTMsMTIgQEAKIH07CiAKIHN0YXRpYyBpbnQgZG9fam91cm5hbF9iZWdpbl9yKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkJICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCisJCQkgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBuYmxvY2tzLCBpbnQgam9pbik7CiAKLXN0YXRpYyB2b2lkIGluaXRfam91cm5hbF9oYXNoKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiKQorc3RhdGljIHZvaWQgaW5pdF9qb3VybmFsX2hhc2goc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCW1lbXNldChqb3VybmFsLT5qX2hhc2hfdGFibGUsIDAsCiAJICAgICAgIEpPVVJOQUxfSEFTSF9TSVpFICogc2l6ZW9mKHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICopKTsKIH0KQEAgLTE0NSw3ICsxNDUsNyBAQAogfQogCiBzdGF0aWMgc3RydWN0IHJlaXNlcmZzX2JpdG1hcF9ub2RlICphbGxvY2F0ZV9iaXRtYXBfbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sKLQkJCQkJCQkgKnBfc19zYikKKwkJCQkJCQkgKnNiKQogewogCXN0cnVjdCByZWlzZXJmc19iaXRtYXBfbm9kZSAqYm47CiAJc3RhdGljIGludCBpZDsKQEAgLTE1NCw3ICsxNTQsNyBAQAogCWlmICghYm4pIHsKIAkJcmV0dXJuIE5VTEw7CiAJfQotCWJuLT5kYXRhID0ga3phbGxvYyhwX3Nfc2ItPnNfYmxvY2tzaXplLCBHRlBfTk9GUyk7CisJYm4tPmRhdGEgPSBremFsbG9jKHNiLT5zX2Jsb2Nrc2l6ZSwgR0ZQX05PRlMpOwogCWlmICghYm4tPmRhdGEpIHsKIAkJa2ZyZWUoYm4pOwogCQlyZXR1cm4gTlVMTDsKQEAgLTE2NCw5ICsxNjQsOSBAQAogCXJldHVybiBibjsKIH0KIAotc3RhdGljIHN0cnVjdCByZWlzZXJmc19iaXRtYXBfbm9kZSAqZ2V0X2JpdG1hcF9ub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiKQorc3RhdGljIHN0cnVjdCByZWlzZXJmc19iaXRtYXBfbm9kZSAqZ2V0X2JpdG1hcF9ub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAlzdHJ1Y3QgcmVpc2VyZnNfYml0bWFwX25vZGUgKmJuID0gTlVMTDsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSA9IGpvdXJuYWwtPmpfYml0bWFwX25vZGVzLm5leHQ7CiAKQEAgLTE3NiwyMSArMTc2LDIxIEBACiAJaWYgKGVudHJ5ICE9ICZqb3VybmFsLT5qX2JpdG1hcF9ub2RlcykgewogCQlibiA9IGxpc3RfZW50cnkoZW50cnksIHN0cnVjdCByZWlzZXJmc19iaXRtYXBfbm9kZSwgbGlzdCk7CiAJCWxpc3RfZGVsKGVudHJ5KTsKLQkJbWVtc2V0KGJuLT5kYXRhLCAwLCBwX3Nfc2ItPnNfYmxvY2tzaXplKTsKKwkJbWVtc2V0KGJuLT5kYXRhLCAwLCBzYi0+c19ibG9ja3NpemUpOwogCQlqb3VybmFsLT5qX2ZyZWVfYml0bWFwX25vZGVzLS07CiAJCXJldHVybiBibjsKIAl9Ci0JYm4gPSBhbGxvY2F0ZV9iaXRtYXBfbm9kZShwX3Nfc2IpOworCWJuID0gYWxsb2NhdGVfYml0bWFwX25vZGUoc2IpOwogCWlmICghYm4pIHsKIAkJeWllbGQoKTsKIAkJZ290byByZXBlYXQ7CiAJfQogCXJldHVybiBibjsKIH0KLXN0YXRpYyBpbmxpbmUgdm9pZCBmcmVlX2JpdG1hcF9ub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAorc3RhdGljIGlubGluZSB2b2lkIGZyZWVfYml0bWFwX25vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkgICAgc3RydWN0IHJlaXNlcmZzX2JpdG1hcF9ub2RlICpibikKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCWpvdXJuYWwtPmpfdXNlZF9iaXRtYXBfbm9kZXMtLTsKIAlpZiAoam91cm5hbC0+al9mcmVlX2JpdG1hcF9ub2RlcyA+IFJFSVNFUkZTX01BWF9CSVRNQVBfTk9ERVMpIHsKIAkJa2ZyZWUoYm4tPmRhdGEpOwpAQCAtMjAxLDQ2ICsyMDEsNDYgQEAKIAl9CiB9CiAKLXN0YXRpYyB2b2lkIGFsbG9jYXRlX2JpdG1hcF9ub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYikKK3N0YXRpYyB2b2lkIGFsbG9jYXRlX2JpdG1hcF9ub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewogCWludCBpOwotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAJc3RydWN0IHJlaXNlcmZzX2JpdG1hcF9ub2RlICpibiA9IE5VTEw7CiAJZm9yIChpID0gMDsgaSA8IFJFSVNFUkZTX01JTl9CSVRNQVBfTk9ERVM7IGkrKykgewotCQlibiA9IGFsbG9jYXRlX2JpdG1hcF9ub2RlKHBfc19zYik7CisJCWJuID0gYWxsb2NhdGVfYml0bWFwX25vZGUoc2IpOwogCQlpZiAoYm4pIHsKIAkJCWxpc3RfYWRkKCZibi0+bGlzdCwgJmpvdXJuYWwtPmpfYml0bWFwX25vZGVzKTsKIAkJCWpvdXJuYWwtPmpfZnJlZV9iaXRtYXBfbm9kZXMrKzsKIAkJfSBlbHNlIHsKLQkJCWJyZWFrOwkvLyB0aGlzIGlzIG9rLCB3ZSdsbCB0cnkgYWdhaW4gd2hlbiBtb3JlIGFyZSBuZWVkZWQgCisJCQlicmVhazsJLyogdGhpcyBpcyBvaywgd2UnbGwgdHJ5IGFnYWluIHdoZW4gbW9yZSBhcmUgbmVlZGVkICovCiAJCX0KIAl9CiB9CiAKLXN0YXRpYyBpbnQgc2V0X2JpdF9pbl9saXN0X2JpdG1hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKK3N0YXRpYyBpbnQgc2V0X2JpdF9pbl9saXN0X2JpdG1hcChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgYl9ibG9ja25yX3QgYmxvY2ssCiAJCQkJICBzdHJ1Y3QgcmVpc2VyZnNfbGlzdF9iaXRtYXAgKmpiKQogewotCXVuc2lnbmVkIGludCBibWFwX25yID0gYmxvY2sgLyAocF9zX3NiLT5zX2Jsb2Nrc2l6ZSA8PCAzKTsKLQl1bnNpZ25lZCBpbnQgYml0X25yID0gYmxvY2sgJSAocF9zX3NiLT5zX2Jsb2Nrc2l6ZSA8PCAzKTsKKwl1bnNpZ25lZCBpbnQgYm1hcF9uciA9IGJsb2NrIC8gKHNiLT5zX2Jsb2Nrc2l6ZSA8PCAzKTsKKwl1bnNpZ25lZCBpbnQgYml0X25yID0gYmxvY2sgJSAoc2ItPnNfYmxvY2tzaXplIDw8IDMpOwogCiAJaWYgKCFqYi0+Yml0bWFwc1tibWFwX25yXSkgewotCQlqYi0+Yml0bWFwc1tibWFwX25yXSA9IGdldF9iaXRtYXBfbm9kZShwX3Nfc2IpOworCQlqYi0+Yml0bWFwc1tibWFwX25yXSA9IGdldF9iaXRtYXBfbm9kZShzYik7CiAJfQogCXNldF9iaXQoYml0X25yLCAodW5zaWduZWQgbG9uZyAqKWpiLT5iaXRtYXBzW2JtYXBfbnJdLT5kYXRhKTsKIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIHZvaWQgY2xlYW51cF9iaXRtYXBfbGlzdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKK3N0YXRpYyB2b2lkIGNsZWFudXBfYml0bWFwX2xpc3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQlzdHJ1Y3QgcmVpc2VyZnNfbGlzdF9iaXRtYXAgKmpiKQogewogCWludCBpOwogCWlmIChqYi0+Yml0bWFwcyA9PSBOVUxMKQogCQlyZXR1cm47CiAKLQlmb3IgKGkgPSAwOyBpIDwgcmVpc2VyZnNfYm1hcF9jb3VudChwX3Nfc2IpOyBpKyspIHsKKwlmb3IgKGkgPSAwOyBpIDwgcmVpc2VyZnNfYm1hcF9jb3VudChzYik7IGkrKykgewogCQlpZiAoamItPmJpdG1hcHNbaV0pIHsKLQkJCWZyZWVfYml0bWFwX25vZGUocF9zX3NiLCBqYi0+Yml0bWFwc1tpXSk7CisJCQlmcmVlX2JpdG1hcF9ub2RlKHNiLCBqYi0+Yml0bWFwc1tpXSk7CiAJCQlqYi0+Yml0bWFwc1tpXSA9IE5VTEw7CiAJCX0KIAl9CkBAIC0yNDksNyArMjQ5LDcgQEAKIC8qCiAqKiBvbmx5IGNhbGwgdGhpcyBvbiBGUyB1bm1vdW50LgogKi8KLXN0YXRpYyBpbnQgZnJlZV9saXN0X2JpdG1hcHMoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCitzdGF0aWMgaW50IGZyZWVfbGlzdF9iaXRtYXBzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkgICAgIHN0cnVjdCByZWlzZXJmc19saXN0X2JpdG1hcCAqamJfYXJyYXkpCiB7CiAJaW50IGk7CkBAIC0yNTcsMTYgKzI1NywxNiBAQAogCWZvciAoaSA9IDA7IGkgPCBKT1VSTkFMX05VTV9CSVRNQVBTOyBpKyspIHsKIAkJamIgPSBqYl9hcnJheSArIGk7CiAJCWpiLT5qb3VybmFsX2xpc3QgPSBOVUxMOwotCQljbGVhbnVwX2JpdG1hcF9saXN0KHBfc19zYiwgamIpOworCQljbGVhbnVwX2JpdG1hcF9saXN0KHNiLCBqYik7CiAJCXZmcmVlKGpiLT5iaXRtYXBzKTsKIAkJamItPmJpdG1hcHMgPSBOVUxMOwogCX0KIAlyZXR1cm4gMDsKIH0KIAotc3RhdGljIGludCBmcmVlX2JpdG1hcF9ub2RlcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYikKK3N0YXRpYyBpbnQgZnJlZV9iaXRtYXBfbm9kZXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCXN0cnVjdCBsaXN0X2hlYWQgKm5leHQgPSBqb3VybmFsLT5qX2JpdG1hcF9ub2Rlcy5uZXh0OwogCXN0cnVjdCByZWlzZXJmc19iaXRtYXBfbm9kZSAqYm47CiAKQEAgLTI4MywxMCArMjgzLDEwIEBACiB9CiAKIC8qCi0qKiBnZXQgbWVtb3J5IGZvciBKT1VSTkFMX05VTV9CSVRNQVBTIHdvcnRoIG9mIGJpdG1hcHMuIAorKiogZ2V0IG1lbW9yeSBmb3IgSk9VUk5BTF9OVU1fQklUTUFQUyB3b3J0aCBvZiBiaXRtYXBzLgogKiogamJfYXJyYXkgaXMgdGhlIGFycmF5IHRvIGJlIGZpbGxlZCBpbi4KICovCi1pbnQgcmVpc2VyZnNfYWxsb2NhdGVfbGlzdF9iaXRtYXBzKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAoraW50IHJlaXNlcmZzX2FsbG9jYXRlX2xpc3RfYml0bWFwcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgIHN0cnVjdCByZWlzZXJmc19saXN0X2JpdG1hcCAqamJfYXJyYXksCiAJCQkJICAgdW5zaWduZWQgaW50IGJtYXBfbnIpCiB7CkBAIC0zMDAsMzAgKzMwMCwzMCBAQAogCQlqYi0+am91cm5hbF9saXN0ID0gTlVMTDsKIAkJamItPmJpdG1hcHMgPSB2bWFsbG9jKG1lbSk7CiAJCWlmICghamItPmJpdG1hcHMpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCQkgImNsbS0yMDAwLCB1bmFibGUgdG8gYWxsb2NhdGUgYml0bWFwcyBmb3Igam91cm5hbCBsaXN0cyIpOworCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgImNsbS0yMDAwIiwgInVuYWJsZSB0byAiCisJCQkJCSAiYWxsb2NhdGUgYml0bWFwcyBmb3Igam91cm5hbCBsaXN0cyIpOwogCQkJZmFpbGVkID0gMTsKIAkJCWJyZWFrOwogCQl9CiAJCW1lbXNldChqYi0+Yml0bWFwcywgMCwgbWVtKTsKIAl9CiAJaWYgKGZhaWxlZCkgewotCQlmcmVlX2xpc3RfYml0bWFwcyhwX3Nfc2IsIGpiX2FycmF5KTsKKwkJZnJlZV9saXN0X2JpdG1hcHMoc2IsIGpiX2FycmF5KTsKIAkJcmV0dXJuIC0xOwogCX0KIAlyZXR1cm4gMDsKIH0KIAogLyoKLSoqIGZpbmQgYW4gYXZhaWxhYmxlIGxpc3QgYml0bWFwLiAgSWYgeW91IGNhbid0IGZpbmQgb25lLCBmbHVzaCBhIGNvbW1pdCBsaXN0IAorKiogZmluZCBhbiBhdmFpbGFibGUgbGlzdCBiaXRtYXAuICBJZiB5b3UgY2FuJ3QgZmluZCBvbmUsIGZsdXNoIGEgY29tbWl0IGxpc3QKICoqIGFuZCB0cnkgYWdhaW4KICovCi1zdGF0aWMgc3RydWN0IHJlaXNlcmZzX2xpc3RfYml0bWFwICpnZXRfbGlzdF9iaXRtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCitzdGF0aWMgc3RydWN0IHJlaXNlcmZzX2xpc3RfYml0bWFwICpnZXRfbGlzdF9iaXRtYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJCSAgICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0CiAJCQkJCQkgICAgKmpsKQogewogCWludCBpLCBqOwotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAJc3RydWN0IHJlaXNlcmZzX2xpc3RfYml0bWFwICpqYiA9IE5VTEw7CiAKIAlmb3IgKGogPSAwOyBqIDwgKEpPVVJOQUxfTlVNX0JJVE1BUFMgKiAzKTsgaisrKSB7CkBAIC0zMzEsNyArMzMxLDcgQEAKIAkJam91cm5hbC0+al9saXN0X2JpdG1hcF9pbmRleCA9IChpICsgMSkgJSBKT1VSTkFMX05VTV9CSVRNQVBTOwogCQlqYiA9IGpvdXJuYWwtPmpfbGlzdF9iaXRtYXAgKyBpOwogCQlpZiAoam91cm5hbC0+al9saXN0X2JpdG1hcFtpXS5qb3VybmFsX2xpc3QpIHsKLQkJCWZsdXNoX2NvbW1pdF9saXN0KHBfc19zYiwKKwkJCWZsdXNoX2NvbW1pdF9saXN0KHNiLAogCQkJCQkgIGpvdXJuYWwtPmpfbGlzdF9iaXRtYXBbaV0uCiAJCQkJCSAgam91cm5hbF9saXN0LCAxKTsKIAkJCWlmICgham91cm5hbC0+al9saXN0X2JpdG1hcFtpXS5qb3VybmFsX2xpc3QpIHsKQEAgLTM0OCw3ICszNDgsNyBAQAogCXJldHVybiBqYjsKIH0KIAotLyogCisvKgogKiogYWxsb2NhdGVzIGEgbmV3IGNodW5rIG9mIFggbm9kZXMsIGFuZCBsaW5rcyB0aGVtIGFsbCB0b2dldGhlciBhcyBhIGxpc3QuCiAqKiBVc2VzIHRoZSBjbm9kZS0+bmV4dCBhbmQgY25vZGUtPnByZXYgcG9pbnRlcnMKICoqIHJldHVybnMgTlVMTCBvbiBmYWlsdXJlCkBAIC0zNzYsMTQgKzM3NiwxNCBAQAogfQogCiAvKgotKiogcHVsbHMgYSBjbm9kZSBvZmYgdGhlIGZyZWUgbGlzdCwgb3IgcmV0dXJucyBOVUxMIG9uIGZhaWx1cmUgCisqKiBwdWxscyBhIGNub2RlIG9mZiB0aGUgZnJlZSBsaXN0LCBvciByZXR1cm5zIE5VTEwgb24gZmFpbHVyZQogKi8KLXN0YXRpYyBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqZ2V0X2Nub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiKQorc3RhdGljIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpnZXRfY25vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqY247Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAotCXJlaXNlcmZzX2NoZWNrX2xvY2tfZGVwdGgocF9zX3NiLCAiZ2V0X2Nub2RlIik7CisJcmVpc2VyZnNfY2hlY2tfbG9ja19kZXB0aChzYiwgImdldF9jbm9kZSIpOwogCiAJaWYgKGpvdXJuYWwtPmpfY25vZGVfZnJlZSA8PSAwKSB7CiAJCXJldHVybiBOVUxMOwpAQCAtNDAzLDE0ICs0MDMsMTQgQEAKIH0KIAogLyoKLSoqIHJldHVybnMgYSBjbm9kZSB0byB0aGUgZnJlZSBsaXN0IAorKiogcmV0dXJucyBhIGNub2RlIHRvIHRoZSBmcmVlIGxpc3QKICovCi1zdGF0aWMgdm9pZCBmcmVlX2Nub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAorc3RhdGljIHZvaWQgZnJlZV9jbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkgICAgICAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmNuKQogewotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAKLQlyZWlzZXJmc19jaGVja19sb2NrX2RlcHRoKHBfc19zYiwgImZyZWVfY25vZGUiKTsKKwlyZWlzZXJmc19jaGVja19sb2NrX2RlcHRoKHNiLCAiZnJlZV9jbm9kZSIpOwogCiAJam91cm5hbC0+al9jbm9kZV91c2VkLS07CiAJam91cm5hbC0+al9jbm9kZV9mcmVlKys7CkBAIC00MzYsOCArNDM2LDggQEAKIHsKICNpZmRlZiBDT05GSUdfU01QCiAJaWYgKGN1cnJlbnQtPmxvY2tfZGVwdGggPCAwKSB7Ci0JCXJlaXNlcmZzX3BhbmljKHNiLCAiJXMgY2FsbGVkIHdpdGhvdXQga2VybmVsIGxvY2sgaGVsZCIsCi0JCQkgICAgICAgY2FsbGVyKTsKKwkJcmVpc2VyZnNfcGFuaWMoc2IsICJqb3VybmFsLTEiLCAiJXMgY2FsbGVkIHdpdGhvdXQga2VybmVsICIKKwkJCSAgICAgICAibG9jayBoZWxkIiwgY2FsbGVyKTsKIAl9CiAjZWxzZQogCTsKQEAgLTQ4MSwxMSArNDgxLDExIEBACiAqKiByZWplY3QgaXQgb24gdGhlIG5leHQgY2FsbCB0byByZWlzZXJmc19pbl9qb3VybmFsCiAqKgogKi8KLWludCByZWlzZXJmc19pbl9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAoraW50IHJlaXNlcmZzX2luX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCXVuc2lnbmVkIGludCBibWFwX25yLCBpbnQgYml0X25yLCBpbnQgc2VhcmNoX2FsbCwKIAkJCWJfYmxvY2tucl90ICogbmV4dF96ZXJvX2JpdCkKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpjbjsKIAlzdHJ1Y3QgcmVpc2VyZnNfbGlzdF9iaXRtYXAgKmpiOwogCWludCBpOwpAQCAtNDkzLDE0ICs0OTMsMTQgQEAKIAogCSpuZXh0X3plcm9fYml0ID0gMDsJLyogYWx3YXlzIHN0YXJ0IHRoaXMgYXQgemVyby4gKi8KIAotCVBST0NfSU5GT19JTkMocF9zX3NiLCBqb3VybmFsLmluX2pvdXJuYWwpOworCVBST0NfSU5GT19JTkMoc2IsIGpvdXJuYWwuaW5fam91cm5hbCk7CiAJLyogSWYgd2UgYXJlbid0IGRvaW5nIGEgc2VhcmNoX2FsbCwgdGhpcyBpcyBhIG1ldGFibG9jaywgYW5kIGl0IHdpbGwgYmUgbG9nZ2VkIGJlZm9yZSB1c2UuCiAJICoqIGlmIHdlIGNyYXNoIGJlZm9yZSB0aGUgdHJhbnNhY3Rpb24gdGhhdCBmcmVlZCBpdCBjb21taXRzLCAgdGhpcyB0cmFuc2FjdGlvbiB3b24ndAogCSAqKiBoYXZlIGNvbW1pdHRlZCBlaXRoZXIsIGFuZCB0aGUgYmxvY2sgd2lsbCBuZXZlciBiZSB3cml0dGVuCiAJICovCiAJaWYgKHNlYXJjaF9hbGwpIHsKIAkJZm9yIChpID0gMDsgaSA8IEpPVVJOQUxfTlVNX0JJVE1BUFM7IGkrKykgewotCQkJUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIGpvdXJuYWwuaW5fam91cm5hbF9iaXRtYXApOworCQkJUFJPQ19JTkZPX0lOQyhzYiwgam91cm5hbC5pbl9qb3VybmFsX2JpdG1hcCk7CiAJCQlqYiA9IGpvdXJuYWwtPmpfbGlzdF9iaXRtYXAgKyBpOwogCQkJaWYgKGpiLT5qb3VybmFsX2xpc3QgJiYgamItPmJpdG1hcHNbYm1hcF9ucl0gJiYKIAkJCSAgICB0ZXN0X2JpdChiaXRfbnIsCkBAIC01MTAsMjggKzUxMCwyOCBAQAogCQkJCSAgICBmaW5kX25leHRfemVyb19iaXQoKHVuc2lnbmVkIGxvbmcgKikKIAkJCQkJCSAgICAgICAoamItPmJpdG1hcHNbYm1hcF9ucl0tPgogCQkJCQkJCWRhdGEpLAotCQkJCQkJICAgICAgIHBfc19zYi0+c19ibG9ja3NpemUgPDwgMywKKwkJCQkJCSAgICAgICBzYi0+c19ibG9ja3NpemUgPDwgMywKIAkJCQkJCSAgICAgICBiaXRfbnIgKyAxKTsKIAkJCQlyZXR1cm4gMTsKIAkJCX0KIAkJfQogCX0KIAotCWJsID0gYm1hcF9uciAqIChwX3Nfc2ItPnNfYmxvY2tzaXplIDw8IDMpICsgYml0X25yOworCWJsID0gYm1hcF9uciAqIChzYi0+c19ibG9ja3NpemUgPDwgMykgKyBiaXRfbnI7CiAJLyogaXMgaXQgaW4gYW55IG9sZCB0cmFuc2FjdGlvbnM/ICovCiAJaWYgKHNlYXJjaF9hbGwKIAkgICAgJiYgKGNuID0KLQkJZ2V0X2pvdXJuYWxfaGFzaF9kZXYocF9zX3NiLCBqb3VybmFsLT5qX2xpc3RfaGFzaF90YWJsZSwgYmwpKSkgeworCQlnZXRfam91cm5hbF9oYXNoX2RldihzYiwgam91cm5hbC0+al9saXN0X2hhc2hfdGFibGUsIGJsKSkpIHsKIAkJcmV0dXJuIDE7CiAJfQogCiAJLyogaXMgaXQgaW4gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24uICBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KLQlpZiAoKGNuID0gZ2V0X2pvdXJuYWxfaGFzaF9kZXYocF9zX3NiLCBqb3VybmFsLT5qX2hhc2hfdGFibGUsIGJsKSkpIHsKKwlpZiAoKGNuID0gZ2V0X2pvdXJuYWxfaGFzaF9kZXYoc2IsIGpvdXJuYWwtPmpfaGFzaF90YWJsZSwgYmwpKSkgewogCQlCVUcoKTsKIAkJcmV0dXJuIDE7CiAJfQogCi0JUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIGpvdXJuYWwuaW5fam91cm5hbF9yZXVzYWJsZSk7CisJUFJPQ19JTkZPX0lOQyhzYiwgam91cm5hbC5pbl9qb3VybmFsX3JldXNhYmxlKTsKIAkvKiBzYWZlIGZvciByZXVzZSAqLwogCXJldHVybiAwOwogfQpAQCAtNTUzLDE2ICs1NTMsMTYgQEAKIH0KIAogLyogbG9jayB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiAqLwotc3RhdGljIGlubGluZSB2b2lkIGxvY2tfam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYikKK3N0YXRpYyBpbmxpbmUgdm9pZCBsb2NrX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlQUk9DX0lORk9fSU5DKHBfc19zYiwgam91cm5hbC5sb2NrX2pvdXJuYWwpOwotCW11dGV4X2xvY2soJlNCX0pPVVJOQUwocF9zX3NiKS0+al9tdXRleCk7CisJUFJPQ19JTkZPX0lOQyhzYiwgam91cm5hbC5sb2NrX2pvdXJuYWwpOworCW11dGV4X2xvY2soJlNCX0pPVVJOQUwoc2IpLT5qX211dGV4KTsKIH0KIAogLyogdW5sb2NrIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uICovCi1zdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IpCitzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQltdXRleF91bmxvY2soJlNCX0pPVVJOQUwocF9zX3NiKS0+al9tdXRleCk7CisJbXV0ZXhfdW5sb2NrKCZTQl9KT1VSTkFMKHNiKS0+al9tdXRleCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfam91cm5hbF9saXN0KHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmpsKQpAQCAtNTc0LDcgKzU3NCw3IEBACiAJCQkJICAgIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmpsKQogewogCWlmIChqbC0+al9yZWZjb3VudCA8IDEpIHsKLQkJcmVpc2VyZnNfcGFuaWMocywgInRyYW5zIGlkICVsdSwgcmVmY291bnQgYXQgJWQiLAorCQlyZWlzZXJmc19wYW5pYyhzLCAiam91cm5hbC0yIiwgInRyYW5zIGlkICV1LCByZWZjb3VudCBhdCAlZCIsCiAJCQkgICAgICAgamwtPmpfdHJhbnNfaWQsIGpsLT5qX3JlZmNvdW50KTsKIAl9CiAJaWYgKC0tamwtPmpfcmVmY291bnQgPT0gMCkKQEAgLTU4NiwyMCArNTg2LDIwIEBACiAqKiBpdCBnZXRzIGNhbGxlZCBieSBmbHVzaF9jb21taXRfbGlzdCwgYW5kIGNsZWFucyB1cCBhbnkgZGF0YSBzdG9yZWQgYWJvdXQgYmxvY2tzIGZyZWVkIGR1cmluZyBhCiAqKiB0cmFuc2FjdGlvbi4KICovCi1zdGF0aWMgdm9pZCBjbGVhbnVwX2ZyZWVkX2Zvcl9qb3VybmFsX2xpc3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCitzdGF0aWMgdm9pZCBjbGVhbnVwX2ZyZWVkX2Zvcl9qb3VybmFsX2xpc3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJICAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqamwpCiB7CiAKIAlzdHJ1Y3QgcmVpc2VyZnNfbGlzdF9iaXRtYXAgKmpiID0gamwtPmpfbGlzdF9iaXRtYXA7CiAJaWYgKGpiKSB7Ci0JCWNsZWFudXBfYml0bWFwX2xpc3QocF9zX3NiLCBqYik7CisJCWNsZWFudXBfYml0bWFwX2xpc3Qoc2IsIGpiKTsKIAl9CiAJamwtPmpfbGlzdF9iaXRtYXAtPmpvdXJuYWxfbGlzdCA9IE5VTEw7CiAJamwtPmpfbGlzdF9iaXRtYXAgPSBOVUxMOwogfQogCiBzdGF0aWMgaW50IGpvdXJuYWxfbGlzdF9zdGlsbF9hbGl2ZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgdHJhbnNfaWQpCisJCQkJICAgIHVuc2lnbmVkIGludCB0cmFuc19pZCkKIHsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocyk7CiAJc3RydWN0IGxpc3RfaGVhZCAqZW50cnkgPSAmam91cm5hbC0+al9qb3VybmFsX2xpc3Q7CkBAIC02NDQsOCArNjQ0LDggQEAKIAljaGFyIGJbQkRFVk5BTUVfU0laRV07CiAKIAlpZiAoYnVmZmVyX2pvdXJuYWxlZChiaCkpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJCSAiY2xtLTIwODQ6IHBpbm5lZCBidWZmZXIgJWx1OiVzIHNlbnQgdG8gZGlzayIsCisJCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgImNsbS0yMDg0IiwKKwkJCQkgInBpbm5lZCBidWZmZXIgJWx1OiVzIHNlbnQgdG8gZGlzayIsCiAJCQkJIGJoLT5iX2Jsb2NrbnIsIGJkZXZuYW1lKGJoLT5iX2JkZXYsIGIpKTsKIAl9CiAJaWYgKHVwdG9kYXRlKQpAQCAtOTMzLDkgKzkzMyw5IEBACiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqb3RoZXJfamw7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqZmlyc3Rfamw7CiAJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7Ci0JdW5zaWduZWQgbG9uZyB0cmFuc19pZCA9IGpsLT5qX3RyYW5zX2lkOwotCXVuc2lnbmVkIGxvbmcgb3RoZXJfdHJhbnNfaWQ7Ci0JdW5zaWduZWQgbG9uZyBmaXJzdF90cmFuc19pZDsKKwl1bnNpZ25lZCBpbnQgdHJhbnNfaWQgPSBqbC0+al90cmFuc19pZDsKKwl1bnNpZ25lZCBpbnQgb3RoZXJfdHJhbnNfaWQ7CisJdW5zaWduZWQgaW50IGZpcnN0X3RyYW5zX2lkOwogCiAgICAgICBmaW5kX2ZpcnN0OgogCS8qCkBAIC0xMDE0LDcgKzEwMTQsNyBAQAogCWludCBpOwogCWJfYmxvY2tucl90IGJuOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqdGJoID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIHRyYW5zX2lkID0gamwtPmpfdHJhbnNfaWQ7CisJdW5zaWduZWQgaW50IHRyYW5zX2lkID0gamwtPmpfdHJhbnNfaWQ7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHMpOwogCWludCBiYXJyaWVyID0gMDsKIAlpbnQgcmV0dmFsID0gMDsKQEAgLTExMjIsNyArMTEyMiw4IEBACiAJCQlzeW5jX2RpcnR5X2J1ZmZlcih0YmgpOwogCQlpZiAodW5saWtlbHkoIWJ1ZmZlcl91cHRvZGF0ZSh0YmgpKSkgewogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwotCQkJcmVpc2VyZnNfd2FybmluZyhzLCAiam91cm5hbC02MDEsIGJ1ZmZlciB3cml0ZSBmYWlsZWQiKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgImpvdXJuYWwtNjAxIiwKKwkJCQkJICJidWZmZXIgd3JpdGUgZmFpbGVkIik7CiAjZW5kaWYKIAkJCXJldHZhbCA9IC1FSU87CiAJCX0KQEAgLTExNTQsMTQgKzExNTUsMTQgQEAKIAkgKiB1cCBwcm9wYWdhdGluZyB0aGUgd3JpdGUgZXJyb3Igb3V0IHRvIHRoZSBmaWxlc3lzdGVtLiAqLwogCWlmICh1bmxpa2VseSghYnVmZmVyX3VwdG9kYXRlKGpsLT5qX2NvbW1pdF9iaCkpKSB7CiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCi0JCXJlaXNlcmZzX3dhcm5pbmcocywgImpvdXJuYWwtNjE1OiBidWZmZXIgd3JpdGUgZmFpbGVkIik7CisJCXJlaXNlcmZzX3dhcm5pbmcocywgImpvdXJuYWwtNjE1IiwgImJ1ZmZlciB3cml0ZSBmYWlsZWQiKTsKICNlbmRpZgogCQlyZXR2YWwgPSAtRUlPOwogCX0KIAliZm9yZ2V0KGpsLT5qX2NvbW1pdF9iaCk7CiAJaWYgKGpvdXJuYWwtPmpfbGFzdF9jb21taXRfaWQgIT0gMCAmJgogCSAgICAoamwtPmpfdHJhbnNfaWQgLSBqb3VybmFsLT5qX2xhc3RfY29tbWl0X2lkKSAhPSAxKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywgImNsbS0yMjAwOiBsYXN0IGNvbW1pdCAlbHUsIGN1cnJlbnQgJWx1IiwKKwkJcmVpc2VyZnNfd2FybmluZyhzLCAiY2xtLTIyMDAiLCAibGFzdCBjb21taXQgJWx1LCBjdXJyZW50ICVsdSIsCiAJCQkJIGpvdXJuYWwtPmpfbGFzdF9jb21taXRfaWQsIGpsLT5qX3RyYW5zX2lkKTsKIAl9CiAJam91cm5hbC0+al9sYXN0X2NvbW1pdF9pZCA9IGpsLT5qX3RyYW5zX2lkOwpAQCAtMTE5MSw4ICsxMTkyLDggQEAKIH0KIAogLyoKLSoqIGZsdXNoX2pvdXJuYWxfbGlzdCBmcmVxdWVudGx5IG5lZWRzIHRvIGZpbmQgYSBuZXdlciB0cmFuc2FjdGlvbiBmb3IgYSBnaXZlbiBibG9jay4gIFRoaXMgZG9lcyB0aGF0LCBvciAKLSoqIHJldHVybnMgTlVMTCBpZiBpdCBjYW4ndCBmaW5kIGFueXRoaW5nIAorKiogZmx1c2hfam91cm5hbF9saXN0IGZyZXF1ZW50bHkgbmVlZHMgdG8gZmluZCBhIG5ld2VyIHRyYW5zYWN0aW9uIGZvciBhIGdpdmVuIGJsb2NrLiAgVGhpcyBkb2VzIHRoYXQsIG9yCisqKiByZXR1cm5zIE5VTEwgaWYgaXQgY2FuJ3QgZmluZCBhbnl0aGluZwogKi8KIHN0YXRpYyBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICpmaW5kX25ld2VyX2psX2Zvcl9jbihzdHJ1Y3QKIAkJCQkJCQkgIHJlaXNlcmZzX2pvdXJuYWxfY25vZGUKQEAgLTEyMzYsMTEgKzEyMzcsMTEgQEAKICoqIGpvdXJuYWwgbGlzdCBmb3IgdGhpcyB0cmFuc2FjdGlvbi4gIEFzaWRlIGZyb20gZnJlZWluZyB0aGUgY25vZGUsIHRoaXMgYWxzbyBhbGxvd3MgdGhlCiAqKiBibG9jayB0byBiZSByZWFsbG9jYXRlZCBmb3IgZGF0YSBibG9ja3MgaWYgaXQgaGFkIGJlZW4gZGVsZXRlZC4KICovCi1zdGF0aWMgdm9pZCByZW1vdmVfYWxsX2Zyb21fam91cm5hbF9saXN0KHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAorc3RhdGljIHZvaWQgcmVtb3ZlX2FsbF9mcm9tX2pvdXJuYWxfbGlzdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCQkgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqamwsCiAJCQkJCSBpbnQgZGVidWcpCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqY24sICpsYXN0OwogCWNuID0gamwtPmpfcmVhbGJsb2NrOwogCkBAIC0xMjUwLDE4ICsxMjUxLDE4IEBACiAJd2hpbGUgKGNuKSB7CiAJCWlmIChjbi0+YmxvY2tuciAhPSAwKSB7CiAJCQlpZiAoZGVidWcpIHsKLQkJCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKKwkJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAicmVpc2VyZnMtMjIwMSIsCiAJCQkJCQkgImJsb2NrICV1LCBiaCBpcyAlZCwgc3RhdGUgJWxkIiwKIAkJCQkJCSBjbi0+YmxvY2tuciwgY24tPmJoID8gMSA6IDAsCiAJCQkJCQkgY24tPnN0YXRlKTsKIAkJCX0KIAkJCWNuLT5zdGF0ZSA9IDA7Ci0JCQlyZW1vdmVfam91cm5hbF9oYXNoKHBfc19zYiwgam91cm5hbC0+al9saXN0X2hhc2hfdGFibGUsCisJCQlyZW1vdmVfam91cm5hbF9oYXNoKHNiLCBqb3VybmFsLT5qX2xpc3RfaGFzaF90YWJsZSwKIAkJCQkJICAgIGpsLCBjbi0+YmxvY2tuciwgMSk7CiAJCX0KIAkJbGFzdCA9IGNuOwogCQljbiA9IGNuLT5uZXh0OwotCQlmcmVlX2Nub2RlKHBfc19zYiwgbGFzdCk7CisJCWZyZWVfY25vZGUoc2IsIGxhc3QpOwogCX0KIAlqbC0+al9yZWFsYmxvY2sgPSBOVUxMOwogfQpAQCAtMTI3MywxMiArMTI3NCwxMiBAQAogKiogY2FsbGVkIGJ5IGZsdXNoX2pvdXJuYWxfbGlzdCwgYmVmb3JlIGl0IGNhbGxzIHJlbW92ZV9hbGxfZnJvbV9qb3VybmFsX2xpc3QKICoqCiAqLwotc3RhdGljIGludCBfdXBkYXRlX2pvdXJuYWxfaGVhZGVyX2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAorc3RhdGljIGludCBfdXBkYXRlX2pvdXJuYWxfaGVhZGVyX2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJCXVuc2lnbmVkIGxvbmcgb2Zmc2V0LAotCQkJCQl1bnNpZ25lZCBsb25nIHRyYW5zX2lkKQorCQkJCQl1bnNpZ25lZCBpbnQgdHJhbnNfaWQpCiB7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfaGVhZGVyICpqaDsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCiAJaWYgKHJlaXNlcmZzX2lzX2pvdXJuYWxfYWJvcnRlZChqb3VybmFsKSkKIAkJcmV0dXJuIC1FSU87CkBAIC0xMjg4LDggKzEyODksOCBAQAogCQkJd2FpdF9vbl9idWZmZXIoKGpvdXJuYWwtPmpfaGVhZGVyX2JoKSk7CiAJCQlpZiAodW5saWtlbHkoIWJ1ZmZlcl91cHRvZGF0ZShqb3VybmFsLT5qX2hlYWRlcl9iaCkpKSB7CiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCi0JCQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJCQkgImpvdXJuYWwtNjk5OiBidWZmZXIgd3JpdGUgZmFpbGVkIik7CisJCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgImpvdXJuYWwtNjk5IiwKKwkJCQkJCSAiYnVmZmVyIHdyaXRlIGZhaWxlZCIpOwogI2VuZGlmCiAJCQkJcmV0dXJuIC1FSU87CiAJCQl9CkBAIC0xMzAyLDQ5ICsxMzAzLDQ5IEBACiAJCWpoLT5qX2ZpcnN0X3VuZmx1c2hlZF9vZmZzZXQgPSBjcHVfdG9fbGUzMihvZmZzZXQpOwogCQlqaC0+al9tb3VudF9pZCA9IGNwdV90b19sZTMyKGpvdXJuYWwtPmpfbW91bnRfaWQpOwogCi0JCWlmIChyZWlzZXJmc19iYXJyaWVyX2ZsdXNoKHBfc19zYikpIHsKKwkJaWYgKHJlaXNlcmZzX2JhcnJpZXJfZmx1c2goc2IpKSB7CiAJCQlpbnQgcmV0OwogCQkJbG9ja19idWZmZXIoam91cm5hbC0+al9oZWFkZXJfYmgpOwogCQkJcmV0ID0gc3VibWl0X2JhcnJpZXJfYnVmZmVyKGpvdXJuYWwtPmpfaGVhZGVyX2JoKTsKIAkJCWlmIChyZXQgPT0gLUVPUE5PVFNVUFApIHsKIAkJCQlzZXRfYnVmZmVyX3VwdG9kYXRlKGpvdXJuYWwtPmpfaGVhZGVyX2JoKTsKLQkJCQlkaXNhYmxlX2JhcnJpZXIocF9zX3NiKTsKKwkJCQlkaXNhYmxlX2JhcnJpZXIoc2IpOwogCQkJCWdvdG8gc3luYzsKIAkJCX0KIAkJCXdhaXRfb25fYnVmZmVyKGpvdXJuYWwtPmpfaGVhZGVyX2JoKTsKLQkJCWNoZWNrX2JhcnJpZXJfY29tcGxldGlvbihwX3Nfc2IsIGpvdXJuYWwtPmpfaGVhZGVyX2JoKTsKKwkJCWNoZWNrX2JhcnJpZXJfY29tcGxldGlvbihzYiwgam91cm5hbC0+al9oZWFkZXJfYmgpOwogCQl9IGVsc2UgewogCQkgICAgICBzeW5jOgogCQkJc2V0X2J1ZmZlcl9kaXJ0eShqb3VybmFsLT5qX2hlYWRlcl9iaCk7CiAJCQlzeW5jX2RpcnR5X2J1ZmZlcihqb3VybmFsLT5qX2hlYWRlcl9iaCk7CiAJCX0KIAkJaWYgKCFidWZmZXJfdXB0b2RhdGUoam91cm5hbC0+al9oZWFkZXJfYmgpKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkJICJqb3VybmFsLTgzNzogSU8gZXJyb3IgZHVyaW5nIGpvdXJuYWwgcmVwbGF5Iik7CisJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiam91cm5hbC04MzciLAorCQkJCQkgIklPIGVycm9yIGR1cmluZyBqb3VybmFsIHJlcGxheSIpOwogCQkJcmV0dXJuIC1FSU87CiAJCX0KIAl9CiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgdXBkYXRlX2pvdXJuYWxfaGVhZGVyX2Jsb2NrKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAorc3RhdGljIGludCB1cGRhdGVfam91cm5hbF9oZWFkZXJfYmxvY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCi0JCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgdHJhbnNfaWQpCisJCQkJICAgICAgIHVuc2lnbmVkIGludCB0cmFuc19pZCkKIHsKLQlyZXR1cm4gX3VwZGF0ZV9qb3VybmFsX2hlYWRlcl9ibG9jayhwX3Nfc2IsIG9mZnNldCwgdHJhbnNfaWQpOworCXJldHVybiBfdXBkYXRlX2pvdXJuYWxfaGVhZGVyX2Jsb2NrKHNiLCBvZmZzZXQsIHRyYW5zX2lkKTsKIH0KIAotLyogCi0qKiBmbHVzaCBhbnkgYW5kIGFsbCBqb3VybmFsIGxpc3RzIG9sZGVyIHRoYW4geW91IGFyZSAKKy8qCisqKiBmbHVzaCBhbnkgYW5kIGFsbCBqb3VybmFsIGxpc3RzIG9sZGVyIHRoYW4geW91IGFyZQogKiogY2FuIG9ubHkgYmUgY2FsbGVkIGZyb20gZmx1c2hfam91cm5hbF9saXN0CiAqLwotc3RhdGljIGludCBmbHVzaF9vbGRlcl9qb3VybmFsX2xpc3RzKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAorc3RhdGljIGludCBmbHVzaF9vbGRlcl9qb3VybmFsX2xpc3RzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICAgICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICpqbCkKIHsKIAlzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICpvdGhlcl9qbDsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKLQl1bnNpZ25lZCBsb25nIHRyYW5zX2lkID0gamwtPmpfdHJhbnNfaWQ7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKKwl1bnNpZ25lZCBpbnQgdHJhbnNfaWQgPSBqbC0+al90cmFuc19pZDsKIAogCS8qIHdlIGtub3cgd2UgYXJlIHRoZSBvbmx5IG9uZXMgZmx1c2hpbmcgdGhpbmdzLCBubyBleHRyYSByYWNlCiAJICogcHJvdGVjdGlvbiBpcyByZXF1aXJlZC4KQEAgLTEzNTgsNyArMTM1OSw3IEBACiAJaWYgKG90aGVyX2psLT5qX3RyYW5zX2lkIDwgdHJhbnNfaWQpIHsKIAkJQlVHX09OKG90aGVyX2psLT5qX3JlZmNvdW50IDw9IDApOwogCQkvKiBkbyBub3QgZmx1c2ggYWxsICovCi0JCWZsdXNoX2pvdXJuYWxfbGlzdChwX3Nfc2IsIG90aGVyX2psLCAwKTsKKwkJZmx1c2hfam91cm5hbF9saXN0KHNiLCBvdGhlcl9qbCwgMCk7CiAKIAkJLyogb3RoZXJfamwgaXMgbm93IGRlbGV0ZWQgZnJvbSB0aGUgbGlzdCAqLwogCQlnb3RvIHJlc3RhcnQ7CkBAIC0xMzgxLDggKzEzODIsOCBAQAogKiogYWx3YXlzIHNldCBmbHVzaGFsbCB0byAxLCB1bmxlc3MgeW91IGFyZSBjYWxsaW5nIGZyb20gaW5zaWRlCiAqKiBmbHVzaF9qb3VybmFsX2xpc3QKICoqCi0qKiBJTVBPUlRBTlQuICBUaGlzIGNhbiBvbmx5IGJlIGNhbGxlZCB3aGlsZSB0aGVyZSBhcmUgbm8gam91cm5hbCB3cml0ZXJzLCAKLSoqIGFuZCB0aGUgam91cm5hbCBpcyBsb2NrZWQuICBUaGF0IG1lYW5zIGl0IGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tIAorKiogSU1QT1JUQU5ULiAgVGhpcyBjYW4gb25seSBiZSBjYWxsZWQgd2hpbGUgdGhlcmUgYXJlIG5vIGpvdXJuYWwgd3JpdGVycywKKyoqIGFuZCB0aGUgam91cm5hbCBpcyBsb2NrZWQuICBUaGF0IG1lYW5zIGl0IGNhbiBvbmx5IGJlIGNhbGxlZCBmcm9tCiAqKiBkb19qb3VybmFsX2VuZCwgb3IgYnkgam91cm5hbF9yZWxlYXNlCiAqLwogc3RhdGljIGludCBmbHVzaF9qb3VybmFsX2xpc3Qoc3RydWN0IHN1cGVyX2Jsb2NrICpzLApAQCAtMTQwMSw4ICsxNDAyLDcgQEAKIAlCVUdfT04oal9sZW5fc2F2ZWQgPD0gMCk7CiAKIAlpZiAoYXRvbWljX3JlYWQoJmpvdXJuYWwtPmpfd2NvdW50KSAhPSAwKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkgImNsbS0yMDQ4OiBmbHVzaF9qb3VybmFsX2xpc3QgY2FsbGVkIHdpdGggd2NvdW50ICVkIiwKKwkJcmVpc2VyZnNfd2FybmluZyhzLCAiY2xtLTIwNDgiLCAiY2FsbGVkIHdpdGggd2NvdW50ICVkIiwKIAkJCQkgYXRvbWljX3JlYWQoJmpvdXJuYWwtPmpfd2NvdW50KSk7CiAJfQogCUJVR19PTihqbC0+al90cmFuc19pZCA9PSAwKTsKQEAgLTE0MTYsOCArMTQxNiw3IEBACiAKIAljb3VudCA9IDA7CiAJaWYgKGpfbGVuX3NhdmVkID4gam91cm5hbC0+al90cmFuc19tYXgpIHsKLQkJcmVpc2VyZnNfcGFuaWMocywKLQkJCSAgICAgICAiam91cm5hbC03MTU6IGZsdXNoX2pvdXJuYWxfbGlzdCwgbGVuZ3RoIGlzICVsdSwgdHJhbnMgaWQgJWx1XG4iLAorCQlyZWlzZXJmc19wYW5pYyhzLCAiam91cm5hbC03MTUiLCAibGVuZ3RoIGlzICVsdSwgdHJhbnMgaWQgJWx1IiwKIAkJCSAgICAgICBqX2xlbl9zYXZlZCwgamwtPmpfdHJhbnNfaWQpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xNDMwLDcgKzE0MjksNyBAQAogCQlnb3RvIGZsdXNoX29sZGVyX2FuZF9yZXR1cm47CiAJfQogCi0JLyogc3RhcnQgYnkgcHV0dGluZyB0aGUgY29tbWl0IGxpc3Qgb24gZGlzay4gIFRoaXMgd2lsbCBhbHNvIGZsdXNoIAorCS8qIHN0YXJ0IGJ5IHB1dHRpbmcgdGhlIGNvbW1pdCBsaXN0IG9uIGRpc2suICBUaGlzIHdpbGwgYWxzbyBmbHVzaAogCSAqKiB0aGUgY29tbWl0IGxpc3RzIG9mIGFueSBvbGRlcnMgdHJhbnNhY3Rpb25zCiAJICovCiAJZmx1c2hfY29tbWl0X2xpc3QocywgamwsIDEpOwpAQCAtMTQ0NSwxMiArMTQ0NCwxMiBAQAogCQlnb3RvIGZsdXNoX29sZGVyX2FuZF9yZXR1cm47CiAJfQogCi0JLyogbG9vcCB0aHJvdWdoIGVhY2ggY25vZGUsIHNlZSBpZiB3ZSBuZWVkIHRvIHdyaXRlIGl0LCAKLQkgKiogb3Igd2FpdCBvbiBhIG1vcmUgcmVjZW50IHRyYW5zYWN0aW9uLCBvciBqdXN0IGlnbm9yZSBpdCAKKwkvKiBsb29wIHRocm91Z2ggZWFjaCBjbm9kZSwgc2VlIGlmIHdlIG5lZWQgdG8gd3JpdGUgaXQsCisJICoqIG9yIHdhaXQgb24gYSBtb3JlIHJlY2VudCB0cmFuc2FjdGlvbiwgb3IganVzdCBpZ25vcmUgaXQKIAkgKi8KIAlpZiAoYXRvbWljX3JlYWQoJihqb3VybmFsLT5qX3djb3VudCkpICE9IDApIHsKLQkJcmVpc2VyZnNfcGFuaWMocywKLQkJCSAgICAgICAiam91cm5hbC04NDQ6IHBhbmljIGpvdXJuYWwgbGlzdCBpcyBmbHVzaGluZywgd2NvdW50IGlzIG5vdCAwXG4iKTsKKwkJcmVpc2VyZnNfcGFuaWMocywgImpvdXJuYWwtODQ0IiwgImpvdXJuYWwgbGlzdCBpcyBmbHVzaGluZywgIgorCQkJICAgICAgICJ3Y291bnQgaXMgbm90IDAiKTsKIAl9CiAJY24gPSBqbC0+al9yZWFsYmxvY2s7CiAJd2hpbGUgKGNuKSB7CkBAIC0xNDc0LDggKzE0NzMsOCBAQAogCQlpZiAoIXBqbCAmJiBjbi0+YmgpIHsKIAkJCXNhdmVkX2JoID0gY24tPmJoOwogCi0JCQkvKiB3ZSBkbyB0aGlzIHRvIG1ha2Ugc3VyZSBub2JvZHkgcmVsZWFzZXMgdGhlIGJ1ZmZlciB3aGlsZSAKLQkJCSAqKiB3ZSBhcmUgd29ya2luZyB3aXRoIGl0IAorCQkJLyogd2UgZG8gdGhpcyB0byBtYWtlIHN1cmUgbm9ib2R5IHJlbGVhc2VzIHRoZSBidWZmZXIgd2hpbGUKKwkJCSAqKiB3ZSBhcmUgd29ya2luZyB3aXRoIGl0CiAJCQkgKi8KIAkJCWdldF9iaChzYXZlZF9iaCk7CiAKQEAgLTE0OTgsOCArMTQ5Nyw4IEBACiAJCQlnb3RvIGZyZWVfY25vZGU7CiAJCX0KIAotCQkvKiBiaCA9PSBOVUxMIHdoZW4gdGhlIGJsb2NrIGdvdCB0byBkaXNrIG9uIGl0cyBvd24sIE9SLCAKLQkJICoqIHRoZSBibG9jayBnb3QgZnJlZWQgaW4gYSBmdXR1cmUgdHJhbnNhY3Rpb24gCisJCS8qIGJoID09IE5VTEwgd2hlbiB0aGUgYmxvY2sgZ290IHRvIGRpc2sgb24gaXRzIG93biwgT1IsCisJCSAqKiB0aGUgYmxvY2sgZ290IGZyZWVkIGluIGEgZnV0dXJlIHRyYW5zYWN0aW9uCiAJCSAqLwogCQlpZiAoc2F2ZWRfYmggPT0gTlVMTCkgewogCQkJZ290byBmcmVlX2Nub2RlOwpAQCAtMTUxMCw4ICsxNTA5LDggQEAKIAkJICoqIGlzIG5vdCBtYXJrZWQgSkRpcnR5X3dhaXQKIAkJICovCiAJCWlmICgoIXdhc19qd2FpdCkgJiYgIWJ1ZmZlcl9sb2NrZWQoc2F2ZWRfYmgpKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCSAiam91cm5hbC04MTM6IEJBRCEgYnVmZmVyICVsbHUgJWNkaXJ0eSAlY2p3YWl0LCAiCisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJqb3VybmFsLTgxMyIsCisJCQkJCSAiQkFEISBidWZmZXIgJWxsdSAlY2RpcnR5ICVjandhaXQsICIKIAkJCQkJICJub3QgaW4gYSBuZXdlciB0cmFuYXNjdGlvbiIsCiAJCQkJCSAodW5zaWduZWQgbG9uZyBsb25nKXNhdmVkX2JoLT4KIAkJCQkJIGJfYmxvY2tuciwgd2FzX2RpcnR5ID8gJyAnIDogJyEnLApAQCAtMTUyOSw4ICsxNTI4LDggQEAKIAkJCQl1bmxvY2tfYnVmZmVyKHNhdmVkX2JoKTsKIAkJCWNvdW50Kys7CiAJCX0gZWxzZSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCSAiY2xtLTIwODI6IFVuYWJsZSB0byBmbHVzaCBidWZmZXIgJWxsdSBpbiAlcyIsCisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJjbG0tMjA4MiIsCisJCQkJCSAiVW5hYmxlIHRvIGZsdXNoIGJ1ZmZlciAlbGx1IGluICVzIiwKIAkJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpc2F2ZWRfYmgtPgogCQkJCQkgYl9ibG9ja25yLCBfX2Z1bmNfXyk7CiAJCX0KQEAgLTE1NDEsOCArMTU0MCw4IEBACiAJCQkvKiB3ZSBpbmNyZW1lbnRlZCB0aGlzIHRvIGtlZXAgb3RoZXJzIGZyb20gdGFraW5nIHRoZSBidWZmZXIgaGVhZCBhd2F5ICovCiAJCQlwdXRfYmgoc2F2ZWRfYmgpOwogCQkJaWYgKGF0b21pY19yZWFkKCYoc2F2ZWRfYmgtPmJfY291bnQpKSA8IDApIHsKLQkJCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCQkgImpvdXJuYWwtOTQ1OiBzYXZlZF9iaC0+Yl9jb3VudCA8IDAiKTsKKwkJCQlyZWlzZXJmc193YXJuaW5nKHMsICJqb3VybmFsLTk0NSIsCisJCQkJCQkgInNhdmVkX2JoLT5iX2NvdW50IDwgMCIpOwogCQkJfQogCQl9CiAJfQpAQCAtMTU1MSwxOCArMTU1MCwxOCBAQAogCQl3aGlsZSAoY24pIHsKIAkJCWlmICh0ZXN0X2JpdChCTE9DS19ORUVEU19GTFVTSCwgJmNuLT5zdGF0ZSkpIHsKIAkJCQlpZiAoIWNuLT5iaCkgewotCQkJCQlyZWlzZXJmc19wYW5pYyhzLAotCQkJCQkJICAgICAgICJqb3VybmFsLTEwMTE6IGNuLT5iaCBpcyBOVUxMXG4iKTsKKwkJCQkJcmVpc2VyZnNfcGFuaWMocywgImpvdXJuYWwtMTAxMSIsCisJCQkJCQkgICAgICAgImNuLT5iaCBpcyBOVUxMIik7CiAJCQkJfQogCQkJCXdhaXRfb25fYnVmZmVyKGNuLT5iaCk7CiAJCQkJaWYgKCFjbi0+YmgpIHsKLQkJCQkJcmVpc2VyZnNfcGFuaWMocywKLQkJCQkJCSAgICAgICAiam91cm5hbC0xMDEyOiBjbi0+YmggaXMgTlVMTFxuIik7CisJCQkJCXJlaXNlcmZzX3BhbmljKHMsICJqb3VybmFsLTEwMTIiLAorCQkJCQkJICAgICAgICJjbi0+YmggaXMgTlVMTCIpOwogCQkJCX0KIAkJCQlpZiAodW5saWtlbHkoIWJ1ZmZlcl91cHRvZGF0ZShjbi0+YmgpKSkgewogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwotCQkJCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCQkJICJqb3VybmFsLTk0OTogYnVmZmVyIHdyaXRlIGZhaWxlZFxuIik7CisJCQkJCXJlaXNlcmZzX3dhcm5pbmcocywgImpvdXJuYWwtOTQ5IiwKKwkJCQkJCQkgImJ1ZmZlciB3cml0ZSBmYWlsZWQiKTsKICNlbmRpZgogCQkJCQllcnIgPSAtRUlPOwogCQkJCX0KQEAgLTE1ODcsNyArMTU4Niw3IEBACiAJCQkgICAgICAgX19mdW5jX18pOwogICAgICAgZmx1c2hfb2xkZXJfYW5kX3JldHVybjoKIAotCS8qIGJlZm9yZSB3ZSBjYW4gdXBkYXRlIHRoZSBqb3VybmFsIGhlYWRlciBibG9jaywgd2UgX211c3RfIGZsdXNoIGFsbCAKKwkvKiBiZWZvcmUgd2UgY2FuIHVwZGF0ZSB0aGUgam91cm5hbCBoZWFkZXIgYmxvY2ssIHdlIF9tdXN0XyBmbHVzaCBhbGwKIAkgKiogcmVhbCBibG9ja3MgZnJvbSBhbGwgb2xkZXIgdHJhbnNhY3Rpb25zIHRvIGRpc2suICBUaGlzIGlzIGJlY2F1c2UKIAkgKiogb25jZSB0aGUgaGVhZGVyIGJsb2NrIGlzIHVwZGF0ZWQsIHRoaXMgdHJhbnNhY3Rpb24gd2lsbCBub3QgYmUKIAkgKiogcmVwbGF5ZWQgYWZ0ZXIgYSBjcmFzaApAQCAtMTU5Nyw3ICsxNTk2LDcgQEAKIAl9CiAKIAllcnIgPSBqb3VybmFsLT5qX2Vycm5vOwotCS8qIGJlZm9yZSB3ZSBjYW4gcmVtb3ZlIGV2ZXJ5dGhpbmcgZnJvbSB0aGUgaGFzaCB0YWJsZXMgZm9yIHRoaXMgCisJLyogYmVmb3JlIHdlIGNhbiByZW1vdmUgZXZlcnl0aGluZyBmcm9tIHRoZSBoYXNoIHRhYmxlcyBmb3IgdGhpcwogCSAqKiB0cmFuc2FjdGlvbiwgd2UgbXVzdCBtYWtlIHN1cmUgaXQgY2FuIG5ldmVyIGJlIHJlcGxheWVkCiAJICoqCiAJICoqIHNpbmNlIHdlIGFyZSBvbmx5IGNhbGxlZCBmcm9tIGRvX2pvdXJuYWxfZW5kLCB3ZSBrbm93IGZvciBzdXJlIHRoZXJlCkBAIC0xNjIzLDcgKzE2MjIsNyBAQAogCiAJaWYgKGpvdXJuYWwtPmpfbGFzdF9mbHVzaF9pZCAhPSAwICYmCiAJICAgIChqbC0+al90cmFuc19pZCAtIGpvdXJuYWwtPmpfbGFzdF9mbHVzaF9pZCkgIT0gMSkgewotCQlyZWlzZXJmc193YXJuaW5nKHMsICJjbG0tMjIwMTogbGFzdCBmbHVzaCAlbHUsIGN1cnJlbnQgJWx1IiwKKwkJcmVpc2VyZnNfd2FybmluZyhzLCAiY2xtLTIyMDEiLCAibGFzdCBmbHVzaCAlbHUsIGN1cnJlbnQgJWx1IiwKIAkJCQkgam91cm5hbC0+al9sYXN0X2ZsdXNoX2lkLCBqbC0+al90cmFuc19pZCk7CiAJfQogCWpvdXJuYWwtPmpfbGFzdF9mbHVzaF9pZCA9IGpsLT5qX3RyYW5zX2lkOwpAQCAtMTc1OCwxMyArMTc1NywxMyBAQAogc3RhdGljIGludCBrdXBkYXRlX3RyYW5zYWN0aW9ucyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsCiAJCQkJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqamwsCiAJCQkJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqKm5leHRfamwsCi0JCQkJdW5zaWduZWQgbG9uZyAqbmV4dF90cmFuc19pZCwKKwkJCQl1bnNpZ25lZCBpbnQgKm5leHRfdHJhbnNfaWQsCiAJCQkJaW50IG51bV9ibG9ja3MsIGludCBudW1fdHJhbnMpCiB7CiAJaW50IHJldCA9IDA7CiAJaW50IHdyaXR0ZW4gPSAwOwogCWludCB0cmFuc2FjdGlvbnNfZmx1c2hlZCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBvcmlnX3RyYW5zX2lkID0gamwtPmpfdHJhbnNfaWQ7CisJdW5zaWduZWQgaW50IG9yaWdfdHJhbnNfaWQgPSBqbC0+al90cmFuc19pZDsKIAlzdHJ1Y3QgYnVmZmVyX2NodW5rIGNodW5rOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5OwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzKTsKQEAgLTE4MzMsNyArMTgzMiw3IEBACiAJaW50IGxpbWl0ID0gMjU2OwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKnRqbDsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9saXN0ICpmbHVzaF9qbDsKLQl1bnNpZ25lZCBsb25nIHRyYW5zX2lkOworCXVuc2lnbmVkIGludCB0cmFuc19pZDsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocyk7CiAKIAlmbHVzaF9qbCA9IHRqbCA9IGpsOwpAQCAtMTkwOSwyMiArMTkwOCwyMiBAQAogCX0KIH0KIAotc3RhdGljIHZvaWQgZnJlZV9qb3VybmFsX3JhbShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYikKK3N0YXRpYyB2b2lkIGZyZWVfam91cm5hbF9yYW0oc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCWtmcmVlKGpvdXJuYWwtPmpfY3VycmVudF9qbCk7CiAJam91cm5hbC0+al9udW1fbGlzdHMtLTsKIAogCXZmcmVlKGpvdXJuYWwtPmpfY25vZGVfZnJlZV9vcmlnKTsKLQlmcmVlX2xpc3RfYml0bWFwcyhwX3Nfc2IsIGpvdXJuYWwtPmpfbGlzdF9iaXRtYXApOwotCWZyZWVfYml0bWFwX25vZGVzKHBfc19zYik7CS8qIG11c3QgYmUgYWZ0ZXIgZnJlZV9saXN0X2JpdG1hcHMgKi8KKwlmcmVlX2xpc3RfYml0bWFwcyhzYiwgam91cm5hbC0+al9saXN0X2JpdG1hcCk7CisJZnJlZV9iaXRtYXBfbm9kZXMoc2IpOwkvKiBtdXN0IGJlIGFmdGVyIGZyZWVfbGlzdF9iaXRtYXBzICovCiAJaWYgKGpvdXJuYWwtPmpfaGVhZGVyX2JoKSB7CiAJCWJyZWxzZShqb3VybmFsLT5qX2hlYWRlcl9iaCk7CiAJfQogCS8qIGpfaGVhZGVyX2JoIGlzIG9uIHRoZSBqb3VybmFsIGRldiwgbWFrZSBzdXJlIG5vdCB0byByZWxlYXNlIHRoZSBqb3VybmFsCiAJICogZGV2IHVudGlsIHdlIGJyZWxzZSBqX2hlYWRlcl9iaAogCSAqLwotCXJlbGVhc2Vfam91cm5hbF9kZXYocF9zX3NiLCBqb3VybmFsKTsKKwlyZWxlYXNlX2pvdXJuYWxfZGV2KHNiLCBqb3VybmFsKTsKIAl2ZnJlZShqb3VybmFsKTsKIH0KIApAQCAtMTkzMywyNyArMTkzMiwyNyBAQAogKiogb2YgcmVhZF9zdXBlcigpIHlldC4gIEFueSBvdGhlciBjYWxsZXIgbXVzdCBrZWVwIGVycm9yIGF0IDAuCiAqLwogc3RhdGljIGludCBkb19qb3VybmFsX3JlbGVhc2Uoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCQkgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgaW50IGVycm9yKQorCQkJICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGVycm9yKQogewogCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgbXl0aDsKIAlpbnQgZmx1c2hlZCA9IDA7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAogCS8qIHdlIG9ubHkgd2FudCB0byBmbHVzaCBvdXQgdHJhbnNhY3Rpb25zIGlmIHdlIHdlcmUgY2FsbGVkIHdpdGggZXJyb3IgPT0gMAogCSAqLwotCWlmICghZXJyb3IgJiYgIShwX3Nfc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7CisJaWYgKCFlcnJvciAmJiAhKHNiLT5zX2ZsYWdzICYgTVNfUkRPTkxZKSkgewogCQkvKiBlbmQgdGhlIGN1cnJlbnQgdHJhbnMgKi8KIAkJQlVHX09OKCF0aC0+dF90cmFuc19pZCk7Ci0JCWRvX2pvdXJuYWxfZW5kKHRoLCBwX3Nfc2IsIDEwLCBGTFVTSF9BTEwpOworCQlkb19qb3VybmFsX2VuZCh0aCwgc2IsIDEwLCBGTFVTSF9BTEwpOwogCiAJCS8qIG1ha2Ugc3VyZSBzb21ldGhpbmcgZ2V0cyBsb2dnZWQgdG8gZm9yY2Ugb3VyIHdheSBpbnRvIHRoZSBmbHVzaCBjb2RlICovCi0JCWlmICgham91cm5hbF9qb2luKCZteXRoLCBwX3Nfc2IsIDEpKSB7Ci0JCQlyZWlzZXJmc19wcmVwYXJlX2Zvcl9qb3VybmFsKHBfc19zYiwKLQkJCQkJCSAgICAgU0JfQlVGRkVSX1dJVEhfU0IocF9zX3NiKSwKKwkJaWYgKCFqb3VybmFsX2pvaW4oJm15dGgsIHNiLCAxKSkgeworCQkJcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChzYiwKKwkJCQkJCSAgICAgU0JfQlVGRkVSX1dJVEhfU0Ioc2IpLAogCQkJCQkJICAgICAxKTsKLQkJCWpvdXJuYWxfbWFya19kaXJ0eSgmbXl0aCwgcF9zX3NiLAotCQkJCQkgICBTQl9CVUZGRVJfV0lUSF9TQihwX3Nfc2IpKTsKLQkJCWRvX2pvdXJuYWxfZW5kKCZteXRoLCBwX3Nfc2IsIDEsIEZMVVNIX0FMTCk7CisJCQlqb3VybmFsX21hcmtfZGlydHkoJm15dGgsIHNiLAorCQkJCQkgICBTQl9CVUZGRVJfV0lUSF9TQihzYikpOworCQkJZG9fam91cm5hbF9lbmQoJm15dGgsIHNiLCAxLCBGTFVTSF9BTEwpOwogCQkJZmx1c2hlZCA9IDE7CiAJCX0KIAl9CkBAIC0xOTYxLDI2ICsxOTYwLDI2IEBACiAJLyogdGhpcyBhbHNvIGNhdGNoZXMgZXJyb3JzIGR1cmluZyB0aGUgZG9fam91cm5hbF9lbmQgYWJvdmUgKi8KIAlpZiAoIWVycm9yICYmIHJlaXNlcmZzX2lzX2pvdXJuYWxfYWJvcnRlZChqb3VybmFsKSkgewogCQltZW1zZXQoJm15dGgsIDAsIHNpemVvZihteXRoKSk7Ci0JCWlmICgham91cm5hbF9qb2luX2Fib3J0KCZteXRoLCBwX3Nfc2IsIDEpKSB7Ci0JCQlyZWlzZXJmc19wcmVwYXJlX2Zvcl9qb3VybmFsKHBfc19zYiwKLQkJCQkJCSAgICAgU0JfQlVGRkVSX1dJVEhfU0IocF9zX3NiKSwKKwkJaWYgKCFqb3VybmFsX2pvaW5fYWJvcnQoJm15dGgsIHNiLCAxKSkgeworCQkJcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChzYiwKKwkJCQkJCSAgICAgU0JfQlVGRkVSX1dJVEhfU0Ioc2IpLAogCQkJCQkJICAgICAxKTsKLQkJCWpvdXJuYWxfbWFya19kaXJ0eSgmbXl0aCwgcF9zX3NiLAotCQkJCQkgICBTQl9CVUZGRVJfV0lUSF9TQihwX3Nfc2IpKTsKLQkJCWRvX2pvdXJuYWxfZW5kKCZteXRoLCBwX3Nfc2IsIDEsIEZMVVNIX0FMTCk7CisJCQlqb3VybmFsX21hcmtfZGlydHkoJm15dGgsIHNiLAorCQkJCQkgICBTQl9CVUZGRVJfV0lUSF9TQihzYikpOworCQkJZG9fam91cm5hbF9lbmQoJm15dGgsIHNiLCAxLCBGTFVTSF9BTEwpOwogCQl9CiAJfQogCiAJcmVpc2VyZnNfbW91bnRlZF9mc19jb3VudC0tOwogCS8qIHdhaXQgZm9yIGFsbCBjb21taXRzIHRvIGZpbmlzaCAqLwotCWNhbmNlbF9kZWxheWVkX3dvcmsoJlNCX0pPVVJOQUwocF9zX3NiKS0+al93b3JrKTsKKwljYW5jZWxfZGVsYXllZF93b3JrKCZTQl9KT1VSTkFMKHNiKS0+al93b3JrKTsKIAlmbHVzaF93b3JrcXVldWUoY29tbWl0X3dxKTsKIAlpZiAoIXJlaXNlcmZzX21vdW50ZWRfZnNfY291bnQpIHsKIAkJZGVzdHJveV93b3JrcXVldWUoY29tbWl0X3dxKTsKIAkJY29tbWl0X3dxID0gTlVMTDsKIAl9CiAKLQlmcmVlX2pvdXJuYWxfcmFtKHBfc19zYik7CisJZnJlZV9qb3VybmFsX3JhbShzYik7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTE5ODksNDEgKzE5ODgsNDEgQEAKICoqIGNhbGwgb24gdW5tb3VudC4gIGZsdXNoIGFsbCBqb3VybmFsIHRyYW5zLCByZWxlYXNlIGFsbCBhbGxvYydkIHJhbQogKi8KIGludCBqb3VybmFsX3JlbGVhc2Uoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCSAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYikKKwkJICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0JcmV0dXJuIGRvX2pvdXJuYWxfcmVsZWFzZSh0aCwgcF9zX3NiLCAwKTsKKwlyZXR1cm4gZG9fam91cm5hbF9yZWxlYXNlKHRoLCBzYiwgMCk7CiB9CiAKIC8qCiAqKiBvbmx5IGNhbGwgZnJvbSBhbiBlcnJvciBjb25kaXRpb24gaW5zaWRlIHJlaXNlcmZzX3JlYWRfc3VwZXIhCiAqLwogaW50IGpvdXJuYWxfcmVsZWFzZV9lcnJvcihzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKLQkJCSAgc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IpCisJCQkgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0JcmV0dXJuIGRvX2pvdXJuYWxfcmVsZWFzZSh0aCwgcF9zX3NiLCAxKTsKKwlyZXR1cm4gZG9fam91cm5hbF9yZWxlYXNlKHRoLCBzYiwgMSk7CiB9CiAKIC8qIGNvbXBhcmVzIGRlc2NyaXB0aW9uIGJsb2NrIHdpdGggY29tbWl0IGJsb2NrLiAgcmV0dXJucyAxIGlmIHRoZXkgZGlmZmVyLCAwIGlmIHRoZXkgYXJlIHRoZSBzYW1lICovCi1zdGF0aWMgaW50IGpvdXJuYWxfY29tcGFyZV9kZXNjX2NvbW1pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKK3N0YXRpYyBpbnQgam91cm5hbF9jb21wYXJlX2Rlc2NfY29tbWl0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICAgICAgIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Rlc2MgKmRlc2MsCiAJCQkJICAgICAgIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2NvbW1pdCAqY29tbWl0KQogewogCWlmIChnZXRfY29tbWl0X3RyYW5zX2lkKGNvbW1pdCkgIT0gZ2V0X2Rlc2NfdHJhbnNfaWQoZGVzYykgfHwKIAkgICAgZ2V0X2NvbW1pdF90cmFuc19sZW4oY29tbWl0KSAhPSBnZXRfZGVzY190cmFuc19sZW4oZGVzYykgfHwKLQkgICAgZ2V0X2NvbW1pdF90cmFuc19sZW4oY29tbWl0KSA+IFNCX0pPVVJOQUwocF9zX3NiKS0+al90cmFuc19tYXggfHwKKwkgICAgZ2V0X2NvbW1pdF90cmFuc19sZW4oY29tbWl0KSA+IFNCX0pPVVJOQUwoc2IpLT5qX3RyYW5zX21heCB8fAogCSAgICBnZXRfY29tbWl0X3RyYW5zX2xlbihjb21taXQpIDw9IDApIHsKIAkJcmV0dXJuIDE7CiAJfQogCXJldHVybiAwOwogfQogCi0vKiByZXR1cm5zIDAgaWYgaXQgZGlkIG5vdCBmaW5kIGEgZGVzY3JpcHRpb24gYmxvY2sgIAorLyogcmV0dXJucyAwIGlmIGl0IGRpZCBub3QgZmluZCBhIGRlc2NyaXB0aW9uIGJsb2NrCiAqKiByZXR1cm5zIC0xIGlmIGl0IGZvdW5kIGEgY29ycnVwdCBjb21taXQgYmxvY2sKLSoqIHJldHVybnMgMSBpZiBib3RoIGRlc2MgYW5kIGNvbW1pdCB3ZXJlIHZhbGlkIAorKiogcmV0dXJucyAxIGlmIGJvdGggZGVzYyBhbmQgY29tbWl0IHdlcmUgdmFsaWQKICovCi1zdGF0aWMgaW50IGpvdXJuYWxfdHJhbnNhY3Rpb25faXNfdmFsaWQoc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsCitzdGF0aWMgaW50IGpvdXJuYWxfdHJhbnNhY3Rpb25faXNfdmFsaWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpkX2JoLAotCQkJCQl1bnNpZ25lZCBsb25nICpvbGRlc3RfaW52YWxpZF90cmFuc19pZCwKKwkJCQkJdW5zaWduZWQgaW50ICpvbGRlc3RfaW52YWxpZF90cmFuc19pZCwKIAkJCQkJdW5zaWduZWQgbG9uZyAqbmV3ZXN0X21vdW50X2lkKQogewogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Rlc2MgKmRlc2M7CkBAIC0yMDM5LDcgKzIwMzgsNyBAQAogCSAgICAmJiAhbWVtY21wKGdldF9qb3VybmFsX2Rlc2NfbWFnaWMoZF9iaCksIEpPVVJOQUxfREVTQ19NQUdJQywgOCkpIHsKIAkJaWYgKG9sZGVzdF9pbnZhbGlkX3RyYW5zX2lkICYmICpvbGRlc3RfaW52YWxpZF90cmFuc19pZAogCQkgICAgJiYgZ2V0X2Rlc2NfdHJhbnNfaWQoZGVzYykgPiAqb2xkZXN0X2ludmFsaWRfdHJhbnNfaWQpIHsKLQkJCXJlaXNlcmZzX2RlYnVnKHBfc19zYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKKwkJCXJlaXNlcmZzX2RlYnVnKHNiLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkJCSAgICAgICAiam91cm5hbC05ODY6IHRyYW5zYWN0aW9uICIKIAkJCQkgICAgICAgImlzIHZhbGlkIHJldHVybmluZyBiZWNhdXNlIHRyYW5zX2lkICVkIGlzIGdyZWF0ZXIgdGhhbiAiCiAJCQkJICAgICAgICJvbGRlc3RfaW52YWxpZCAlbHUiLApAQCAtMjA0OSw3ICsyMDQ4LDcgQEAKIAkJfQogCQlpZiAobmV3ZXN0X21vdW50X2lkCiAJCSAgICAmJiAqbmV3ZXN0X21vdW50X2lkID4gZ2V0X2Rlc2NfbW91bnRfaWQoZGVzYykpIHsKLQkJCXJlaXNlcmZzX2RlYnVnKHBfc19zYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKKwkJCXJlaXNlcmZzX2RlYnVnKHNiLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkJCSAgICAgICAiam91cm5hbC0xMDg3OiB0cmFuc2FjdGlvbiAiCiAJCQkJICAgICAgICJpcyB2YWxpZCByZXR1cm5pbmcgYmVjYXVzZSBtb3VudF9pZCAlZCBpcyBsZXNzIHRoYW4gIgogCQkJCSAgICAgICAibmV3ZXN0X21vdW50X2lkICVsdSIsCkBAIC0yMDU3LDM2ICsyMDU2LDM3IEBACiAJCQkJICAgICAgICpuZXdlc3RfbW91bnRfaWQpOwogCQkJcmV0dXJuIC0xOwogCQl9Ci0JCWlmIChnZXRfZGVzY190cmFuc19sZW4oZGVzYykgPiBTQl9KT1VSTkFMKHBfc19zYiktPmpfdHJhbnNfbWF4KSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkJICJqb3VybmFsLTIwMTg6IEJhZCB0cmFuc2FjdGlvbiBsZW5ndGggJWQgZW5jb3VudGVyZWQsIGlnbm9yaW5nIHRyYW5zYWN0aW9uIiwKKwkJaWYgKGdldF9kZXNjX3RyYW5zX2xlbihkZXNjKSA+IFNCX0pPVVJOQUwoc2IpLT5qX3RyYW5zX21heCkgeworCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgImpvdXJuYWwtMjAxOCIsCisJCQkJCSAiQmFkIHRyYW5zYWN0aW9uIGxlbmd0aCAlZCAiCisJCQkJCSAiZW5jb3VudGVyZWQsIGlnbm9yaW5nIHRyYW5zYWN0aW9uIiwKIAkJCQkJIGdldF9kZXNjX3RyYW5zX2xlbihkZXNjKSk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KLQkJb2Zmc2V0ID0gZF9iaC0+Yl9ibG9ja25yIC0gU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYik7CisJCW9mZnNldCA9IGRfYmgtPmJfYmxvY2tuciAtIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYik7CiAKIAkJLyogb2ssIHdlIGhhdmUgYSBqb3VybmFsIGRlc2NyaXB0aW9uIGJsb2NrLCBsZXRzIHNlZSBpZiB0aGUgdHJhbnNhY3Rpb24gd2FzIHZhbGlkICovCiAJCWNfYmggPQotCQkgICAgam91cm5hbF9icmVhZChwX3Nfc2IsCi0JCQkJICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKSArCisJCSAgICBqb3VybmFsX2JyZWFkKHNiLAorCQkJCSAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKSArCiAJCQkJICAoKG9mZnNldCArIGdldF9kZXNjX3RyYW5zX2xlbihkZXNjKSArCi0JCQkJICAgIDEpICUgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpKSk7CisJCQkJICAgIDEpICUgU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYikpKTsKIAkJaWYgKCFjX2JoKQogCQkJcmV0dXJuIDA7CiAJCWNvbW1pdCA9IChzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jb21taXQgKiljX2JoLT5iX2RhdGE7Ci0JCWlmIChqb3VybmFsX2NvbXBhcmVfZGVzY19jb21taXQocF9zX3NiLCBkZXNjLCBjb21taXQpKSB7Ci0JCQlyZWlzZXJmc19kZWJ1ZyhwX3Nfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCisJCWlmIChqb3VybmFsX2NvbXBhcmVfZGVzY19jb21taXQoc2IsIGRlc2MsIGNvbW1pdCkpIHsKKwkJCXJlaXNlcmZzX2RlYnVnKHNiLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkJCSAgICAgICAiam91cm5hbF90cmFuc2FjdGlvbl9pc192YWxpZCwgY29tbWl0IG9mZnNldCAlbGQgaGFkIGJhZCAiCiAJCQkJICAgICAgICJ0aW1lICVkIG9yIGxlbmd0aCAlZCIsCiAJCQkJICAgICAgIGNfYmgtPmJfYmxvY2tuciAtCi0JCQkJICAgICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpLAorCQkJCSAgICAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpLAogCQkJCSAgICAgICBnZXRfY29tbWl0X3RyYW5zX2lkKGNvbW1pdCksCiAJCQkJICAgICAgIGdldF9jb21taXRfdHJhbnNfbGVuKGNvbW1pdCkpOwogCQkJYnJlbHNlKGNfYmgpOwogCQkJaWYgKG9sZGVzdF9pbnZhbGlkX3RyYW5zX2lkKSB7CiAJCQkJKm9sZGVzdF9pbnZhbGlkX3RyYW5zX2lkID0KIAkJCQkgICAgZ2V0X2Rlc2NfdHJhbnNfaWQoZGVzYyk7Ci0JCQkJcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLAorCQkJCXJlaXNlcmZzX2RlYnVnKHNiLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkJCQkgICAgICAgImpvdXJuYWwtMTAwNDogIgogCQkJCQkgICAgICAgInRyYW5zYWN0aW9uX2lzX3ZhbGlkIHNldHRpbmcgb2xkZXN0IGludmFsaWQgdHJhbnNfaWQgIgogCQkJCQkgICAgICAgInRvICVkIiwKQEAgLTIwOTUsMTEgKzIwOTUsMTEgQEAKIAkJCXJldHVybiAtMTsKIAkJfQogCQlicmVsc2UoY19iaCk7Ci0JCXJlaXNlcmZzX2RlYnVnKHBfc19zYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKKwkJcmVpc2VyZnNfZGVidWcoc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCQkgICAgICAgImpvdXJuYWwtMTAwNjogZm91bmQgdmFsaWQgIgogCQkJICAgICAgICJ0cmFuc2FjdGlvbiBzdGFydCBvZmZzZXQgJWxsdSwgbGVuICVkIGlkICVkIiwKIAkJCSAgICAgICBkX2JoLT5iX2Jsb2NrbnIgLQotCQkJICAgICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpLAorCQkJICAgICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYiksCiAJCQkgICAgICAgZ2V0X2Rlc2NfdHJhbnNfbGVuKGRlc2MpLAogCQkJICAgICAgIGdldF9kZXNjX3RyYW5zX2lkKGRlc2MpKTsKIAkJcmV0dXJuIDE7CkBAIC0yMTIxLDYzICsyMTIxLDYzIEBACiAqKiB0aGlzIGVpdGhlciByZWFkcyBpbiBhIHJlcGxheXMgYSB0cmFuc2FjdGlvbiwgb3IgcmV0dXJucyBiZWNhdXNlIHRoZSB0cmFuc2FjdGlvbgogKiogaXMgaW52YWxpZCwgb3IgdG9vIG9sZC4KICovCi1zdGF0aWMgaW50IGpvdXJuYWxfcmVhZF90cmFuc2FjdGlvbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKK3N0YXRpYyBpbnQgam91cm5hbF9yZWFkX3RyYW5zYWN0aW9uKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiAJCQkJICAgIHVuc2lnbmVkIGxvbmcgY3VyX2RibG9jaywKIAkJCQkgICAgdW5zaWduZWQgbG9uZyBvbGRlc3Rfc3RhcnQsCi0JCQkJICAgIHVuc2lnbmVkIGxvbmcgb2xkZXN0X3RyYW5zX2lkLAorCQkJCSAgICB1bnNpZ25lZCBpbnQgb2xkZXN0X3RyYW5zX2lkLAogCQkJCSAgICB1bnNpZ25lZCBsb25nIG5ld2VzdF9tb3VudF9pZCkKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Rlc2MgKmRlc2M7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY29tbWl0ICpjb21taXQ7Ci0JdW5zaWduZWQgbG9uZyB0cmFuc19pZCA9IDA7CisJdW5zaWduZWQgaW50IHRyYW5zX2lkID0gMDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmNfYmg7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpkX2JoOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqKmxvZ19ibG9ja3MgPSBOVUxMOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqKnJlYWxfYmxvY2tzID0gTlVMTDsKLQl1bnNpZ25lZCBsb25nIHRyYW5zX29mZnNldDsKKwl1bnNpZ25lZCBpbnQgdHJhbnNfb2Zmc2V0OwogCWludCBpOwogCWludCB0cmFuc19oYWxmOwogCi0JZF9iaCA9IGpvdXJuYWxfYnJlYWQocF9zX3NiLCBjdXJfZGJsb2NrKTsKKwlkX2JoID0gam91cm5hbF9icmVhZChzYiwgY3VyX2RibG9jayk7CiAJaWYgKCFkX2JoKQogCQlyZXR1cm4gMTsKIAlkZXNjID0gKHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Rlc2MgKilkX2JoLT5iX2RhdGE7Ci0JdHJhbnNfb2Zmc2V0ID0gZF9iaC0+Yl9ibG9ja25yIC0gU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYik7Ci0JcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLCAiam91cm5hbC0xMDM3OiAiCisJdHJhbnNfb2Zmc2V0ID0gZF9iaC0+Yl9ibG9ja25yIC0gU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKTsKKwlyZWlzZXJmc19kZWJ1ZyhzYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwgImpvdXJuYWwtMTAzNzogIgogCQkgICAgICAgImpvdXJuYWxfcmVhZF90cmFuc2FjdGlvbiwgb2Zmc2V0ICVsbHUsIGxlbiAlZCBtb3VudF9pZCAlZCIsCi0JCSAgICAgICBkX2JoLT5iX2Jsb2NrbnIgLSBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKSwKKwkJICAgICAgIGRfYmgtPmJfYmxvY2tuciAtIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYiksCiAJCSAgICAgICBnZXRfZGVzY190cmFuc19sZW4oZGVzYyksIGdldF9kZXNjX21vdW50X2lkKGRlc2MpKTsKIAlpZiAoZ2V0X2Rlc2NfdHJhbnNfaWQoZGVzYykgPCBvbGRlc3RfdHJhbnNfaWQpIHsKLQkJcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLCAiam91cm5hbC0xMDM5OiAiCisJCXJlaXNlcmZzX2RlYnVnKHNiLCBSRUlTRVJGU19ERUJVR19DT0RFLCAiam91cm5hbC0xMDM5OiAiCiAJCQkgICAgICAgImpvdXJuYWxfcmVhZF90cmFucyBza2lwcGluZyBiZWNhdXNlICVsdSBpcyB0b28gb2xkIiwKIAkJCSAgICAgICBjdXJfZGJsb2NrIC0KLQkJCSAgICAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKSk7CisJCQkgICAgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKSk7CiAJCWJyZWxzZShkX2JoKTsKIAkJcmV0dXJuIDE7CiAJfQogCWlmIChnZXRfZGVzY19tb3VudF9pZChkZXNjKSAhPSBuZXdlc3RfbW91bnRfaWQpIHsKLQkJcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLCAiam91cm5hbC0xMTQ2OiAiCisJCXJlaXNlcmZzX2RlYnVnKHNiLCBSRUlTRVJGU19ERUJVR19DT0RFLCAiam91cm5hbC0xMTQ2OiAiCiAJCQkgICAgICAgImpvdXJuYWxfcmVhZF90cmFucyBza2lwcGluZyBiZWNhdXNlICVkIGlzICE9ICIKIAkJCSAgICAgICAibmV3ZXN0X21vdW50X2lkICVsdSIsIGdldF9kZXNjX21vdW50X2lkKGRlc2MpLAogCQkJICAgICAgIG5ld2VzdF9tb3VudF9pZCk7CiAJCWJyZWxzZShkX2JoKTsKIAkJcmV0dXJuIDE7CiAJfQotCWNfYmggPSBqb3VybmFsX2JyZWFkKHBfc19zYiwgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYikgKworCWNfYmggPSBqb3VybmFsX2JyZWFkKHNiLCBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpICsKIAkJCSAgICAgKCh0cmFuc19vZmZzZXQgKyBnZXRfZGVzY190cmFuc19sZW4oZGVzYykgKyAxKSAlCi0JCQkgICAgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHBfc19zYikpKTsKKwkJCSAgICAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpKSk7CiAJaWYgKCFjX2JoKSB7CiAJCWJyZWxzZShkX2JoKTsKIAkJcmV0dXJuIDE7CiAJfQogCWNvbW1pdCA9IChzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jb21taXQgKiljX2JoLT5iX2RhdGE7Ci0JaWYgKGpvdXJuYWxfY29tcGFyZV9kZXNjX2NvbW1pdChwX3Nfc2IsIGRlc2MsIGNvbW1pdCkpIHsKLQkJcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLAorCWlmIChqb3VybmFsX2NvbXBhcmVfZGVzY19jb21taXQoc2IsIGRlc2MsIGNvbW1pdCkpIHsKKwkJcmVpc2VyZnNfZGVidWcoc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCQkgICAgICAgImpvdXJuYWxfcmVhZF90cmFuc2FjdGlvbiwgIgogCQkJICAgICAgICJjb21taXQgb2Zmc2V0ICVsbHUgaGFkIGJhZCB0aW1lICVkIG9yIGxlbmd0aCAlZCIsCiAJCQkgICAgICAgY19iaC0+Yl9ibG9ja25yIC0KLQkJCSAgICAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKSwKKwkJCSAgICAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpLAogCQkJICAgICAgIGdldF9jb21taXRfdHJhbnNfaWQoY29tbWl0KSwKIAkJCSAgICAgICBnZXRfY29tbWl0X3RyYW5zX2xlbihjb21taXQpKTsKIAkJYnJlbHNlKGNfYmgpOwpAQCAtMjE5NSwzOCArMjE5NSw0MSBAQAogCQlicmVsc2UoZF9iaCk7CiAJCWtmcmVlKGxvZ19ibG9ja3MpOwogCQlrZnJlZShyZWFsX2Jsb2Nrcyk7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCSAiam91cm5hbC0xMTY5OiBrbWFsbG9jIGZhaWxlZCwgdW5hYmxlIHRvIG1vdW50IEZTIik7CisJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJqb3VybmFsLTExNjkiLAorCQkJCSAia21hbGxvYyBmYWlsZWQsIHVuYWJsZSB0byBtb3VudCBGUyIpOwogCQlyZXR1cm4gLTE7CiAJfQogCS8qIGdldCBhbGwgdGhlIGJ1ZmZlciBoZWFkcyAqLwotCXRyYW5zX2hhbGYgPSBqb3VybmFsX3RyYW5zX2hhbGYocF9zX3NiLT5zX2Jsb2Nrc2l6ZSk7CisJdHJhbnNfaGFsZiA9IGpvdXJuYWxfdHJhbnNfaGFsZihzYi0+c19ibG9ja3NpemUpOwogCWZvciAoaSA9IDA7IGkgPCBnZXRfZGVzY190cmFuc19sZW4oZGVzYyk7IGkrKykgewogCQlsb2dfYmxvY2tzW2ldID0KLQkJICAgIGpvdXJuYWxfZ2V0YmxrKHBfc19zYiwKLQkJCQkgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKSArCisJCSAgICBqb3VybmFsX2dldGJsayhzYiwKKwkJCQkgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpICsKIAkJCQkgICAodHJhbnNfb2Zmc2V0ICsgMSArCi0JCQkJICAgIGkpICUgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpKTsKKwkJCQkgICAgaSkgJSBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKSk7CiAJCWlmIChpIDwgdHJhbnNfaGFsZikgewogCQkJcmVhbF9ibG9ja3NbaV0gPQotCQkJICAgIHNiX2dldGJsayhwX3Nfc2IsCisJCQkgICAgc2JfZ2V0YmxrKHNiLAogCQkJCSAgICAgIGxlMzJfdG9fY3B1KGRlc2MtPmpfcmVhbGJsb2NrW2ldKSk7CiAJCX0gZWxzZSB7CiAJCQlyZWFsX2Jsb2Nrc1tpXSA9Ci0JCQkgICAgc2JfZ2V0YmxrKHBfc19zYiwKKwkJCSAgICBzYl9nZXRibGsoc2IsCiAJCQkJICAgICAgbGUzMl90b19jcHUoY29tbWl0LT4KIAkJCQkJCSAgal9yZWFsYmxvY2tbaSAtIHRyYW5zX2hhbGZdKSk7CiAJCX0KLQkJaWYgKHJlYWxfYmxvY2tzW2ldLT5iX2Jsb2NrbnIgPiBTQl9CTE9DS19DT1VOVChwX3Nfc2IpKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkJICJqb3VybmFsLTEyMDc6IFJFUExBWSBGQUlMVVJFIGZzY2sgcmVxdWlyZWQhIEJsb2NrIHRvIHJlcGxheSBpcyBvdXRzaWRlIG9mIGZpbGVzeXN0ZW0iKTsKKwkJaWYgKHJlYWxfYmxvY2tzW2ldLT5iX2Jsb2NrbnIgPiBTQl9CTE9DS19DT1VOVChzYikpIHsKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJqb3VybmFsLTEyMDciLAorCQkJCQkgIlJFUExBWSBGQUlMVVJFIGZzY2sgcmVxdWlyZWQhICIKKwkJCQkJICJCbG9jayB0byByZXBsYXkgaXMgb3V0c2lkZSBvZiAiCisJCQkJCSAiZmlsZXN5c3RlbSIpOwogCQkJZ290byBhYm9ydF9yZXBsYXk7CiAJCX0KIAkJLyogbWFrZSBzdXJlIHdlIGRvbid0IHRyeSB0byByZXBsYXkgb250byBsb2cgb3IgcmVzZXJ2ZWQgYXJlYSAqLwogCQlpZiAoaXNfYmxvY2tfaW5fbG9nX29yX3Jlc2VydmVkX2FyZWEKLQkJICAgIChwX3Nfc2IsIHJlYWxfYmxvY2tzW2ldLT5iX2Jsb2NrbnIpKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkJICJqb3VybmFsLTEyMDQ6IFJFUExBWSBGQUlMVVJFIGZzY2sgcmVxdWlyZWQhIFRyeWluZyB0byByZXBsYXkgb250byBhIGxvZyBibG9jayIpOworCQkgICAgKHNiLCByZWFsX2Jsb2Nrc1tpXS0+Yl9ibG9ja25yKSkgeworCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgImpvdXJuYWwtMTIwNCIsCisJCQkJCSAiUkVQTEFZIEZBSUxVUkUgZnNjayByZXF1aXJlZCEgIgorCQkJCQkgIlRyeWluZyB0byByZXBsYXkgb250byBhIGxvZyBibG9jayIpOwogCQkgICAgICBhYm9ydF9yZXBsYXk6CiAJCQlicmVsc2VfYXJyYXkobG9nX2Jsb2NrcywgaSk7CiAJCQlicmVsc2VfYXJyYXkocmVhbF9ibG9ja3MsIGkpOwpAQCAtMjI0Miw4ICsyMjQ1LDkgQEAKIAlmb3IgKGkgPSAwOyBpIDwgZ2V0X2Rlc2NfdHJhbnNfbGVuKGRlc2MpOyBpKyspIHsKIAkJd2FpdF9vbl9idWZmZXIobG9nX2Jsb2Nrc1tpXSk7CiAJCWlmICghYnVmZmVyX3VwdG9kYXRlKGxvZ19ibG9ja3NbaV0pKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkJICJqb3VybmFsLTEyMTI6IFJFUExBWSBGQUlMVVJFIGZzY2sgcmVxdWlyZWQhIGJ1ZmZlciB3cml0ZSBmYWlsZWQiKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJqb3VybmFsLTEyMTIiLAorCQkJCQkgIlJFUExBWSBGQUlMVVJFIGZzY2sgcmVxdWlyZWQhICIKKwkJCQkJICJidWZmZXIgd3JpdGUgZmFpbGVkIik7CiAJCQlicmVsc2VfYXJyYXkobG9nX2Jsb2NrcyArIGksCiAJCQkJICAgICBnZXRfZGVzY190cmFuc19sZW4oZGVzYykgLSBpKTsKIAkJCWJyZWxzZV9hcnJheShyZWFsX2Jsb2NrcywgZ2V0X2Rlc2NfdHJhbnNfbGVuKGRlc2MpKTsKQEAgLTIyNjYsOCArMjI3MCw5IEBACiAJZm9yIChpID0gMDsgaSA8IGdldF9kZXNjX3RyYW5zX2xlbihkZXNjKTsgaSsrKSB7CiAJCXdhaXRfb25fYnVmZmVyKHJlYWxfYmxvY2tzW2ldKTsKIAkJaWYgKCFidWZmZXJfdXB0b2RhdGUocmVhbF9ibG9ja3NbaV0pKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkJICJqb3VybmFsLTEyMjY6IFJFUExBWSBGQUlMVVJFLCBmc2NrIHJlcXVpcmVkISBidWZmZXIgd3JpdGUgZmFpbGVkIik7CisJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiam91cm5hbC0xMjI2IiwKKwkJCQkJICJSRVBMQVkgRkFJTFVSRSwgZnNjayByZXF1aXJlZCEgIgorCQkJCQkgImJ1ZmZlciB3cml0ZSBmYWlsZWQiKTsKIAkJCWJyZWxzZV9hcnJheShyZWFsX2Jsb2NrcyArIGksCiAJCQkJICAgICBnZXRfZGVzY190cmFuc19sZW4oZGVzYykgLSBpKTsKIAkJCWJyZWxzZShjX2JoKTsKQEAgLTIyNzksMTUgKzIyODQsMTUgQEAKIAkJYnJlbHNlKHJlYWxfYmxvY2tzW2ldKTsKIAl9CiAJY3VyX2RibG9jayA9Ci0JICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpICsKKwkgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKSArCiAJICAgICgodHJhbnNfb2Zmc2V0ICsgZ2V0X2Rlc2NfdHJhbnNfbGVuKGRlc2MpICsKLQkgICAgICAyKSAlIFNCX09ORElTS19KT1VSTkFMX1NJWkUocF9zX3NiKSk7Ci0JcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLAorCSAgICAgIDIpICUgU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYikpOworCXJlaXNlcmZzX2RlYnVnKHNiLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkgICAgICAgImpvdXJuYWwtMTA5NTogc2V0dGluZyBqb3VybmFsICIgInN0YXJ0IHRvIG9mZnNldCAlbGQiLAotCQkgICAgICAgY3VyX2RibG9jayAtIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpKTsKKwkJICAgICAgIGN1cl9kYmxvY2sgLSBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpKTsKIAogCS8qIGluaXQgc3RhcnRpbmcgdmFsdWVzIGZvciB0aGUgZmlyc3QgdHJhbnNhY3Rpb24sIGluIGNhc2UgdGhpcyBpcyB0aGUgbGFzdCB0cmFuc2FjdGlvbiB0byBiZSByZXBsYXllZC4gKi8KLQlqb3VybmFsLT5qX3N0YXJ0ID0gY3VyX2RibG9jayAtIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpOworCWpvdXJuYWwtPmpfc3RhcnQgPSBjdXJfZGJsb2NrIC0gU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKTsKIAlqb3VybmFsLT5qX2xhc3RfZmx1c2hfdHJhbnNfaWQgPSB0cmFuc19pZDsKIAlqb3VybmFsLT5qX3RyYW5zX2lkID0gdHJhbnNfaWQgKyAxOwogCS8qIGNoZWNrIGZvciB0cmFuc19pZCBvdmVyZmxvdyAqLwpAQCAtMjM1MiwxMiArMjM1NywxMiBAQAogKioKICoqIE9uIGV4aXQsIGl0IHNldHMgdGhpbmdzIHVwIHNvIHRoZSBmaXJzdCB0cmFuc2FjdGlvbiB3aWxsIHdvcmsgY29ycmVjdGx5LgogKi8KLXN0YXRpYyBpbnQgam91cm5hbF9yZWFkKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiKQorc3RhdGljIGludCBqb3VybmFsX3JlYWQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Rlc2MgKmRlc2M7Ci0JdW5zaWduZWQgbG9uZyBvbGRlc3RfdHJhbnNfaWQgPSAwOwotCXVuc2lnbmVkIGxvbmcgb2xkZXN0X2ludmFsaWRfdHJhbnNfaWQgPSAwOworCXVuc2lnbmVkIGludCBvbGRlc3RfdHJhbnNfaWQgPSAwOworCXVuc2lnbmVkIGludCBvbGRlc3RfaW52YWxpZF90cmFuc19pZCA9IDA7CiAJdGltZV90IHN0YXJ0OwogCXVuc2lnbmVkIGxvbmcgb2xkZXN0X3N0YXJ0ID0gMDsKIAl1bnNpZ25lZCBsb25nIGN1cl9kYmxvY2sgPSAwOwpAQCAtMjM3MCw0NiArMjM3NSw0NiBAQAogCWludCByZXQ7CiAJY2hhciBiW0JERVZOQU1FX1NJWkVdOwogCi0JY3VyX2RibG9jayA9IFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpOwotCXJlaXNlcmZzX2luZm8ocF9zX3NiLCAiY2hlY2tpbmcgdHJhbnNhY3Rpb24gbG9nICglcylcbiIsCisJY3VyX2RibG9jayA9IFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYik7CisJcmVpc2VyZnNfaW5mbyhzYiwgImNoZWNraW5nIHRyYW5zYWN0aW9uIGxvZyAoJXMpXG4iLAogCQkgICAgICBiZGV2bmFtZShqb3VybmFsLT5qX2Rldl9iZCwgYikpOwogCXN0YXJ0ID0gZ2V0X3NlY29uZHMoKTsKIAotCS8qIHN0ZXAgMSwgcmVhZCBpbiB0aGUgam91cm5hbCBoZWFkZXIgYmxvY2suICBDaGVjayB0aGUgdHJhbnNhY3Rpb24gaXQgc2F5cyAKLQkgKiogaXMgdGhlIGZpcnN0IHVuZmx1c2hlZCwgYW5kIGlmIHRoYXQgdHJhbnNhY3Rpb24gaXMgbm90IHZhbGlkLCAKKwkvKiBzdGVwIDEsIHJlYWQgaW4gdGhlIGpvdXJuYWwgaGVhZGVyIGJsb2NrLiAgQ2hlY2sgdGhlIHRyYW5zYWN0aW9uIGl0IHNheXMKKwkgKiogaXMgdGhlIGZpcnN0IHVuZmx1c2hlZCwgYW5kIGlmIHRoYXQgdHJhbnNhY3Rpb24gaXMgbm90IHZhbGlkLAogCSAqKiByZXBsYXkgaXMgZG9uZQogCSAqLwotCWpvdXJuYWwtPmpfaGVhZGVyX2JoID0gam91cm5hbF9icmVhZChwX3Nfc2IsCi0JCQkJCSAgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYikKLQkJCQkJICAgICArIFNCX09ORElTS19KT1VSTkFMX1NJWkUocF9zX3NiKSk7CisJam91cm5hbC0+al9oZWFkZXJfYmggPSBqb3VybmFsX2JyZWFkKHNiLAorCQkJCQkgICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYikKKwkJCQkJICAgICArIFNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpKTsKIAlpZiAoIWpvdXJuYWwtPmpfaGVhZGVyX2JoKSB7CiAJCXJldHVybiAxOwogCX0KIAlqaCA9IChzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9oZWFkZXIgKikoam91cm5hbC0+al9oZWFkZXJfYmgtPmJfZGF0YSk7CiAJaWYgKGxlMzJfdG9fY3B1KGpoLT5qX2ZpcnN0X3VuZmx1c2hlZF9vZmZzZXQpIDwKLQkgICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpCisJICAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpCiAJICAgICYmIGxlMzJfdG9fY3B1KGpoLT5qX2xhc3RfZmx1c2hfdHJhbnNfaWQpID4gMCkgewogCQlvbGRlc3Rfc3RhcnQgPQotCQkgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYikgKworCQkgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKSArCiAJCSAgICBsZTMyX3RvX2NwdShqaC0+al9maXJzdF91bmZsdXNoZWRfb2Zmc2V0KTsKIAkJb2xkZXN0X3RyYW5zX2lkID0gbGUzMl90b19jcHUoamgtPmpfbGFzdF9mbHVzaF90cmFuc19pZCkgKyAxOwogCQluZXdlc3RfbW91bnRfaWQgPSBsZTMyX3RvX2NwdShqaC0+al9tb3VudF9pZCk7Ci0JCXJlaXNlcmZzX2RlYnVnKHBfc19zYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKKwkJcmVpc2VyZnNfZGVidWcoc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCQkgICAgICAgImpvdXJuYWwtMTE1MzogZm91bmQgaW4gIgogCQkJICAgICAgICJoZWFkZXI6IGZpcnN0X3VuZmx1c2hlZF9vZmZzZXQgJWQsIGxhc3RfZmx1c2hlZF90cmFuc19pZCAiCiAJCQkgICAgICAgIiVsdSIsIGxlMzJfdG9fY3B1KGpoLT5qX2ZpcnN0X3VuZmx1c2hlZF9vZmZzZXQpLAogCQkJICAgICAgIGxlMzJfdG9fY3B1KGpoLT5qX2xhc3RfZmx1c2hfdHJhbnNfaWQpKTsKIAkJdmFsaWRfam91cm5hbF9oZWFkZXIgPSAxOwogCi0JCS8qIG5vdywgd2UgdHJ5IHRvIHJlYWQgdGhlIGZpcnN0IHVuZmx1c2hlZCBvZmZzZXQuICBJZiBpdCBpcyBub3QgdmFsaWQsIAotCQkgKiogdGhlcmUgaXMgbm90aGluZyBtb3JlIHdlIGNhbiBkbywgYW5kIGl0IG1ha2VzIG5vIHNlbnNlIHRvIHJlYWQgCisJCS8qIG5vdywgd2UgdHJ5IHRvIHJlYWQgdGhlIGZpcnN0IHVuZmx1c2hlZCBvZmZzZXQuICBJZiBpdCBpcyBub3QgdmFsaWQsCisJCSAqKiB0aGVyZSBpcyBub3RoaW5nIG1vcmUgd2UgY2FuIGRvLCBhbmQgaXQgbWFrZXMgbm8gc2Vuc2UgdG8gcmVhZAogCQkgKiogdGhyb3VnaCB0aGUgd2hvbGUgbG9nLgogCQkgKi8KIAkJZF9iaCA9Ci0JCSAgICBqb3VybmFsX2JyZWFkKHBfc19zYiwKLQkJCQkgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpICsKKwkJICAgIGpvdXJuYWxfYnJlYWQoc2IsCisJCQkJICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpICsKIAkJCQkgIGxlMzJfdG9fY3B1KGpoLT5qX2ZpcnN0X3VuZmx1c2hlZF9vZmZzZXQpKTsKLQkJcmV0ID0gam91cm5hbF90cmFuc2FjdGlvbl9pc192YWxpZChwX3Nfc2IsIGRfYmgsIE5VTEwsIE5VTEwpOworCQlyZXQgPSBqb3VybmFsX3RyYW5zYWN0aW9uX2lzX3ZhbGlkKHNiLCBkX2JoLCBOVUxMLCBOVUxMKTsKIAkJaWYgKCFyZXQpIHsKIAkJCWNvbnRpbnVlX3JlcGxheSA9IDA7CiAJCX0KQEAgLTI0MTcsOSArMjQyMiw5IEBACiAJCWdvdG8gc3RhcnRfbG9nX3JlcGxheTsKIAl9CiAKLQlpZiAoY29udGludWVfcmVwbGF5ICYmIGJkZXZfcmVhZF9vbmx5KHBfc19zYi0+c19iZGV2KSkgewotCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkgImNsbS0yMDc2OiBkZXZpY2UgaXMgcmVhZG9ubHksIHVuYWJsZSB0byByZXBsYXkgbG9nIik7CisJaWYgKGNvbnRpbnVlX3JlcGxheSAmJiBiZGV2X3JlYWRfb25seShzYi0+c19iZGV2KSkgeworCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiY2xtLTIwNzYiLAorCQkJCSAiZGV2aWNlIGlzIHJlYWRvbmx5LCB1bmFibGUgdG8gcmVwbGF5IGxvZyIpOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC0yNDI4LDE3ICsyNDMzLDE3IEBACiAJICovCiAJd2hpbGUgKGNvbnRpbnVlX3JlcGxheQogCSAgICAgICAmJiBjdXJfZGJsb2NrIDwKLQkgICAgICAgKFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpICsKLQkJU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpKSkgeworCSAgICAgICAoU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKSArCisJCVNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpKSkgewogCQkvKiBOb3RlIHRoYXQgaXQgaXMgcmVxdWlyZWQgZm9yIGJsb2Nrc2l6ZSBvZiBwcmltYXJ5IGZzIGRldmljZSBhbmQgam91cm5hbAogCQkgICBkZXZpY2UgdG8gYmUgdGhlIHNhbWUgKi8KIAkJZF9iaCA9CiAJCSAgICByZWlzZXJmc19icmVhZGEoam91cm5hbC0+al9kZXZfYmQsIGN1cl9kYmxvY2ssCi0JCQkJICAgIHBfc19zYi0+c19ibG9ja3NpemUsCi0JCQkJICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpICsKLQkJCQkgICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpKTsKKwkJCQkgICAgc2ItPnNfYmxvY2tzaXplLAorCQkJCSAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpICsKKwkJCQkgICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYikpOwogCQlyZXQgPQotCQkgICAgam91cm5hbF90cmFuc2FjdGlvbl9pc192YWxpZChwX3Nfc2IsIGRfYmgsCisJCSAgICBqb3VybmFsX3RyYW5zYWN0aW9uX2lzX3ZhbGlkKHNiLCBkX2JoLAogCQkJCQkJICZvbGRlc3RfaW52YWxpZF90cmFuc19pZCwKIAkJCQkJCSAmbmV3ZXN0X21vdW50X2lkKTsKIAkJaWYgKHJldCA9PSAxKSB7CkBAIC0yNDQ3LDI2ICsyNDUyLDI2IEBACiAJCQkJb2xkZXN0X3RyYW5zX2lkID0gZ2V0X2Rlc2NfdHJhbnNfaWQoZGVzYyk7CiAJCQkJb2xkZXN0X3N0YXJ0ID0gZF9iaC0+Yl9ibG9ja25yOwogCQkJCW5ld2VzdF9tb3VudF9pZCA9IGdldF9kZXNjX21vdW50X2lkKGRlc2MpOwotCQkJCXJlaXNlcmZzX2RlYnVnKHBfc19zYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKKwkJCQlyZWlzZXJmc19kZWJ1ZyhzYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKIAkJCQkJICAgICAgICJqb3VybmFsLTExNzk6IFNldHRpbmcgIgogCQkJCQkgICAgICAgIm9sZGVzdF9zdGFydCB0byBvZmZzZXQgJWxsdSwgdHJhbnNfaWQgJWx1IiwKIAkJCQkJICAgICAgIG9sZGVzdF9zdGFydCAtCiAJCQkJCSAgICAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0sKLQkJCQkJICAgICAgIChwX3Nfc2IpLCBvbGRlc3RfdHJhbnNfaWQpOworCQkJCQkgICAgICAgKHNiKSwgb2xkZXN0X3RyYW5zX2lkKTsKIAkJCX0gZWxzZSBpZiAob2xkZXN0X3RyYW5zX2lkID4gZ2V0X2Rlc2NfdHJhbnNfaWQoZGVzYykpIHsKIAkJCQkvKiBvbmUgd2UganVzdCByZWFkIHdhcyBvbGRlciAqLwogCQkJCW9sZGVzdF90cmFuc19pZCA9IGdldF9kZXNjX3RyYW5zX2lkKGRlc2MpOwogCQkJCW9sZGVzdF9zdGFydCA9IGRfYmgtPmJfYmxvY2tucjsKLQkJCQlyZWlzZXJmc19kZWJ1ZyhwX3Nfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCisJCQkJcmVpc2VyZnNfZGVidWcoc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCQkJCSAgICAgICAiam91cm5hbC0xMTgwOiBSZXNldHRpbmcgIgogCQkJCQkgICAgICAgIm9sZGVzdF9zdGFydCB0byBvZmZzZXQgJWx1LCB0cmFuc19pZCAlbHUiLAogCQkJCQkgICAgICAgb2xkZXN0X3N0YXJ0IC0KIAkJCQkJICAgICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSwotCQkJCQkgICAgICAgKHBfc19zYiksIG9sZGVzdF90cmFuc19pZCk7CisJCQkJCSAgICAgICAoc2IpLCBvbGRlc3RfdHJhbnNfaWQpOwogCQkJfQogCQkJaWYgKG5ld2VzdF9tb3VudF9pZCA8IGdldF9kZXNjX21vdW50X2lkKGRlc2MpKSB7CiAJCQkJbmV3ZXN0X21vdW50X2lkID0gZ2V0X2Rlc2NfbW91bnRfaWQoZGVzYyk7Ci0JCQkJcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLAorCQkJCXJlaXNlcmZzX2RlYnVnKHNiLCBSRUlTRVJGU19ERUJVR19DT0RFLAogCQkJCQkgICAgICAgImpvdXJuYWwtMTI5OTogU2V0dGluZyAiCiAJCQkJCSAgICAgICAibmV3ZXN0X21vdW50X2lkIHRvICVkIiwKIAkJCQkJICAgICAgIGdldF9kZXNjX21vdW50X2lkKGRlc2MpKTsKQEAgLTI0ODEsMTcgKzI0ODYsMTcgQEAKICAgICAgIHN0YXJ0X2xvZ19yZXBsYXk6CiAJY3VyX2RibG9jayA9IG9sZGVzdF9zdGFydDsKIAlpZiAob2xkZXN0X3RyYW5zX2lkKSB7Ci0JCXJlaXNlcmZzX2RlYnVnKHBfc19zYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKKwkJcmVpc2VyZnNfZGVidWcoc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCQkgICAgICAgImpvdXJuYWwtMTIwNjogU3RhcnRpbmcgcmVwbGF5ICIKIAkJCSAgICAgICAiZnJvbSBvZmZzZXQgJWxsdSwgdHJhbnNfaWQgJWx1IiwKLQkJCSAgICAgICBjdXJfZGJsb2NrIC0gU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYiksCisJCQkgICAgICAgY3VyX2RibG9jayAtIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYiksCiAJCQkgICAgICAgb2xkZXN0X3RyYW5zX2lkKTsKIAogCX0KIAlyZXBsYXlfY291bnQgPSAwOwogCXdoaWxlIChjb250aW51ZV9yZXBsYXkgJiYgb2xkZXN0X3RyYW5zX2lkID4gMCkgewogCQlyZXQgPQotCQkgICAgam91cm5hbF9yZWFkX3RyYW5zYWN0aW9uKHBfc19zYiwgY3VyX2RibG9jaywgb2xkZXN0X3N0YXJ0LAorCQkgICAgam91cm5hbF9yZWFkX3RyYW5zYWN0aW9uKHNiLCBjdXJfZGJsb2NrLCBvbGRlc3Rfc3RhcnQsCiAJCQkJCSAgICAgb2xkZXN0X3RyYW5zX2lkLCBuZXdlc3RfbW91bnRfaWQpOwogCQlpZiAocmV0IDwgMCkgewogCQkJcmV0dXJuIHJldDsKQEAgLTI0OTksMTQgKzI1MDQsMTQgQEAKIAkJCWJyZWFrOwogCQl9CiAJCWN1cl9kYmxvY2sgPQotCQkgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYikgKyBqb3VybmFsLT5qX3N0YXJ0OworCQkgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHNiKSArIGpvdXJuYWwtPmpfc3RhcnQ7CiAJCXJlcGxheV9jb3VudCsrOwogCQlpZiAoY3VyX2RibG9jayA9PSBvbGRlc3Rfc3RhcnQpCiAJCQlicmVhazsKIAl9CiAKIAlpZiAob2xkZXN0X3RyYW5zX2lkID09IDApIHsKLQkJcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLAorCQlyZWlzZXJmc19kZWJ1ZyhzYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKIAkJCSAgICAgICAiam91cm5hbC0xMjI1OiBObyB2YWxpZCAiICJ0cmFuc2FjdGlvbnMgZm91bmQiKTsKIAl9CiAJLyogal9zdGFydCBkb2VzIG5vdCBnZXQgc2V0IGNvcnJlY3RseSBpZiB3ZSBkb24ndCByZXBsYXkgYW55IHRyYW5zYWN0aW9ucy4KQEAgLTI1MjYsMTYgKzI1MzEsMTYgQEAKIAl9IGVsc2UgewogCQlqb3VybmFsLT5qX21vdW50X2lkID0gbmV3ZXN0X21vdW50X2lkICsgMTsKIAl9Ci0JcmVpc2VyZnNfZGVidWcocF9zX3NiLCBSRUlTRVJGU19ERUJVR19DT0RFLCAiam91cm5hbC0xMjk5OiBTZXR0aW5nICIKKwlyZWlzZXJmc19kZWJ1ZyhzYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwgImpvdXJuYWwtMTI5OTogU2V0dGluZyAiCiAJCSAgICAgICAibmV3ZXN0X21vdW50X2lkIHRvICVsdSIsIGpvdXJuYWwtPmpfbW91bnRfaWQpOwogCWpvdXJuYWwtPmpfZmlyc3RfdW5mbHVzaGVkX29mZnNldCA9IGpvdXJuYWwtPmpfc3RhcnQ7CiAJaWYgKHJlcGxheV9jb3VudCA+IDApIHsKLQkJcmVpc2VyZnNfaW5mbyhwX3Nfc2IsCisJCXJlaXNlcmZzX2luZm8oc2IsCiAJCQkgICAgICAicmVwbGF5ZWQgJWQgdHJhbnNhY3Rpb25zIGluICVsdSBzZWNvbmRzXG4iLAogCQkJICAgICAgcmVwbGF5X2NvdW50LCBnZXRfc2Vjb25kcygpIC0gc3RhcnQpOwogCX0KLQlpZiAoIWJkZXZfcmVhZF9vbmx5KHBfc19zYi0+c19iZGV2KSAmJgotCSAgICBfdXBkYXRlX2pvdXJuYWxfaGVhZGVyX2Jsb2NrKHBfc19zYiwgam91cm5hbC0+al9zdGFydCwKKwlpZiAoIWJkZXZfcmVhZF9vbmx5KHNiLT5zX2JkZXYpICYmCisJICAgIF91cGRhdGVfam91cm5hbF9oZWFkZXJfYmxvY2soc2IsIGpvdXJuYWwtPmpfc3RhcnQsCiAJCQkJCSBqb3VybmFsLT5qX2xhc3RfZmx1c2hfdHJhbnNfaWQpKSB7CiAJCS8qIHJlcGxheSBmYWlsZWQsIGNhbGxlciBtdXN0IGNhbGwgZnJlZV9qb3VybmFsX3JhbSBhbmQgYWJvcnQKIAkJICoqIHRoZSBtb3VudApAQCAtMjU2MCw5ICsyNTY1LDkgQEAKIAlyZXR1cm4gamw7CiB9CiAKLXN0YXRpYyB2b2lkIGpvdXJuYWxfbGlzdF9pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiKQorc3RhdGljIHZvaWQgam91cm5hbF9saXN0X2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIHsKLQlTQl9KT1VSTkFMKHBfc19zYiktPmpfY3VycmVudF9qbCA9IGFsbG9jX2pvdXJuYWxfbGlzdChwX3Nfc2IpOworCVNCX0pPVVJOQUwoc2IpLT5qX2N1cnJlbnRfamwgPSBhbGxvY19qb3VybmFsX2xpc3Qoc2IpOwogfQogCiBzdGF0aWMgaW50IHJlbGVhc2Vfam91cm5hbF9kZXYoc3RydWN0IHN1cGVyX2Jsb2NrICpzdXBlciwKQEAgLTI1ODAsOSArMjU4NSw4IEBACiAJfQogCiAJaWYgKHJlc3VsdCAhPSAwKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcoc3VwZXIsCi0JCQkJICJzaC00NTc6IHJlbGVhc2Vfam91cm5hbF9kZXY6IENhbm5vdCByZWxlYXNlIGpvdXJuYWwgZGV2aWNlOiAlaSIsCi0JCQkJIHJlc3VsdCk7CisJCXJlaXNlcmZzX3dhcm5pbmcoc3VwZXIsICJzaC00NTciLAorCQkJCSAiQ2Fubm90IHJlbGVhc2Ugam91cm5hbCBkZXZpY2U6ICVpIiwgcmVzdWx0KTsKIAl9CiAJcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTI2MTIsNyArMjYxNiw3IEBACiAJCWlmIChJU19FUlIoam91cm5hbC0+al9kZXZfYmQpKSB7CiAJCQlyZXN1bHQgPSBQVFJfRVJSKGpvdXJuYWwtPmpfZGV2X2JkKTsKIAkJCWpvdXJuYWwtPmpfZGV2X2JkID0gTlVMTDsKLQkJCXJlaXNlcmZzX3dhcm5pbmcoc3VwZXIsICJzaC00NTg6IGpvdXJuYWxfaW5pdF9kZXY6ICIKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc3VwZXIsICJzaC00NTgiLAogCQkJCQkgImNhbm5vdCBpbml0IGpvdXJuYWwgZGV2aWNlICclcyc6ICVpIiwKIAkJCQkJIF9fYmRldm5hbWUoamRldiwgYiksIHJlc3VsdCk7CiAJCQlyZXR1cm4gcmVzdWx0OwpAQCAtMjY2MiwzMCArMjY2NiwzMCBAQAogICovCiAjZGVmaW5lIFJFSVNFUkZTX1NUQU5EQVJEX0JMS1NJWkUgKDQwOTYpCiAKLXN0YXRpYyBpbnQgY2hlY2tfYWR2aXNlX3RyYW5zX3BhcmFtcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKK3N0YXRpYyBpbnQgY2hlY2tfYWR2aXNlX3RyYW5zX3BhcmFtcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgICAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwpCiB7CiAgICAgICAgIGlmIChqb3VybmFsLT5qX3RyYW5zX21heCkgewogCSAgICAgICAgLyogTm9uLWRlZmF1bHQgam91cm5hbCBwYXJhbXMuCiAJCSAgIERvIHNhbml0eSBjaGVjayBmb3IgdGhlbS4gKi8KIAkgICAgICAgIGludCByYXRpbyA9IDE7Ci0JCWlmIChwX3Nfc2ItPnNfYmxvY2tzaXplIDwgUkVJU0VSRlNfU1RBTkRBUkRfQkxLU0laRSkKLQkJICAgICAgICByYXRpbyA9IFJFSVNFUkZTX1NUQU5EQVJEX0JMS1NJWkUgLyBwX3Nfc2ItPnNfYmxvY2tzaXplOworCQlpZiAoc2ItPnNfYmxvY2tzaXplIDwgUkVJU0VSRlNfU1RBTkRBUkRfQkxLU0laRSkKKwkJICAgICAgICByYXRpbyA9IFJFSVNFUkZTX1NUQU5EQVJEX0JMS1NJWkUgLyBzYi0+c19ibG9ja3NpemU7CiAKIAkJaWYgKGpvdXJuYWwtPmpfdHJhbnNfbWF4ID4gSk9VUk5BTF9UUkFOU19NQVhfREVGQVVMVCAvIHJhdGlvIHx8CiAJCSAgICBqb3VybmFsLT5qX3RyYW5zX21heCA8IEpPVVJOQUxfVFJBTlNfTUlOX0RFRkFVTFQgLyByYXRpbyB8fAotCQkgICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpIC8gam91cm5hbC0+al90cmFuc19tYXggPAorCQkgICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYikgLyBqb3VybmFsLT5qX3RyYW5zX21heCA8CiAJCSAgICBKT1VSTkFMX01JTl9SQVRJTykgewotCQkgICAgICAgIHJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCSAic2gtNDYyOiBiYWQgdHJhbnNhY3Rpb24gbWF4IHNpemUgKCV1KS4gRlNDSz8iLAotCQkJCSBqb3VybmFsLT5qX3RyYW5zX21heCk7CisJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAic2gtNDYyIiwKKwkJCQkJICJiYWQgdHJhbnNhY3Rpb24gbWF4IHNpemUgKCV1KS4gIgorCQkJCQkgIkZTQ0s/Iiwgam91cm5hbC0+al90cmFuc19tYXgpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAkJaWYgKGpvdXJuYWwtPmpfbWF4X2JhdGNoICE9IChqb3VybmFsLT5qX3RyYW5zX21heCkgKgogCQkgICAgICAgIEpPVVJOQUxfTUFYX0JBVENIX0RFRkFVTFQvSk9VUk5BTF9UUkFOU19NQVhfREVGQVVMVCkgewotCQkgICAgICAgIHJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCSJzaC00NjM6IGJhZCB0cmFuc2FjdGlvbiBtYXggYmF0Y2ggKCV1KS4gRlNDSz8iLAotCQkJCWpvdXJuYWwtPmpfbWF4X2JhdGNoKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJzaC00NjMiLAorCQkJCQkgImJhZCB0cmFuc2FjdGlvbiBtYXggYmF0Y2ggKCV1KS4gIgorCQkJCQkgIkZTQ0s/Iiwgam91cm5hbC0+al9tYXhfYmF0Y2gpOwogCQkJcmV0dXJuIDE7CiAJCX0KIAl9IGVsc2UgewpAQCAtMjY5Myw5ICsyNjk3LDExIEBACiAgICAgICAgICAgICAgICAgICAgVGhlIGZpbGUgc3lzdGVtIHdhcyBjcmVhdGVkIGJ5IG9sZCB2ZXJzaW9uCiAJCSAgIG9mIG1rcmVpc2VyZnMsIHNvIHNvbWUgZmllbGRzIGNvbnRhaW4gemVyb3MsCiAJCSAgIGFuZCB3ZSBuZWVkIHRvIGFkdmlzZSBwcm9wZXIgdmFsdWVzIGZvciB0aGVtICovCi0JICAgICAgICBpZiAocF9zX3NiLT5zX2Jsb2Nrc2l6ZSAhPSBSRUlTRVJGU19TVEFOREFSRF9CTEtTSVpFKQotCSAgICAgICAgICAgICAgICByZWlzZXJmc19wYW5pYyhwX3Nfc2IsICJzaC00NjQ6IGJhZCBibG9ja3NpemUgKCV1KSIsCi0JCQkJICAgICAgIHBfc19zYi0+c19ibG9ja3NpemUpOworCQlpZiAoc2ItPnNfYmxvY2tzaXplICE9IFJFSVNFUkZTX1NUQU5EQVJEX0JMS1NJWkUpIHsKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJzaC00NjQiLCAiYmFkIGJsb2Nrc2l6ZSAoJXUpIiwKKwkJCQkJIHNiLT5zX2Jsb2Nrc2l6ZSk7CisJCQlyZXR1cm4gMTsKKwkJfQogCQlqb3VybmFsLT5qX3RyYW5zX21heCA9IEpPVVJOQUxfVFJBTlNfTUFYX0RFRkFVTFQ7CiAJCWpvdXJuYWwtPmpfbWF4X2JhdGNoID0gSk9VUk5BTF9NQVhfQkFUQ0hfREVGQVVMVDsKIAkJam91cm5hbC0+al9tYXhfY29tbWl0X2FnZSA9IEpPVVJOQUxfTUFYX0NPTU1JVF9BR0U7CkBAIC0yNzA2LDEwICsyNzEyLDEwIEBACiAvKgogKiogbXVzdCBiZSBjYWxsZWQgb25jZSBvbiBmcyBtb3VudC4gIGNhbGxzIGpvdXJuYWxfcmVhZCBmb3IgeW91CiAqLwotaW50IGpvdXJuYWxfaW5pdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgY29uc3QgY2hhciAqal9kZXZfbmFtZSwKK2ludCBqb3VybmFsX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hhciAqal9kZXZfbmFtZSwKIAkJIGludCBvbGRfZm9ybWF0LCB1bnNpZ25lZCBpbnQgY29tbWl0X21heF9hZ2UpCiB7Ci0JaW50IG51bV9jbm9kZXMgPSBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHBfc19zYikgKiAyOworCWludCBudW1fY25vZGVzID0gU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYikgKiAyOwogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmhqaDsKIAlzdHJ1Y3QgcmVpc2VyZnNfc3VwZXJfYmxvY2sgKnJzOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2hlYWRlciAqamg7CkBAIC0yNzE3LDEwICsyNzIzLDEwIEBACiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqamw7CiAJY2hhciBiW0JERVZOQU1FX1NJWkVdOwogCi0Jam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKSA9IHZtYWxsb2Moc2l6ZW9mKHN0cnVjdCByZWlzZXJmc19qb3VybmFsKSk7CisJam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpID0gdm1hbGxvYyhzaXplb2Yoc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwpKTsKIAlpZiAoIWpvdXJuYWwpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJICJqb3VybmFsLTEyNTY6IHVuYWJsZSB0byBnZXQgbWVtb3J5IGZvciBqb3VybmFsIHN0cnVjdHVyZSIpOworCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiam91cm5hbC0xMjU2IiwKKwkJCQkgInVuYWJsZSB0byBnZXQgbWVtb3J5IGZvciBqb3VybmFsIHN0cnVjdHVyZSIpOwogCQlyZXR1cm4gMTsKIAl9CiAJbWVtc2V0KGpvdXJuYWwsIDAsIHNpemVvZihzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCkpOwpAQCAtMjcyOSw1MSArMjczNSw1MSBAQAogCUlOSVRfTElTVF9IRUFEKCZqb3VybmFsLT5qX3dvcmtpbmdfbGlzdCk7CiAJSU5JVF9MSVNUX0hFQUQoJmpvdXJuYWwtPmpfam91cm5hbF9saXN0KTsKIAlqb3VybmFsLT5qX3BlcnNpc3RlbnRfdHJhbnMgPSAwOwotCWlmIChyZWlzZXJmc19hbGxvY2F0ZV9saXN0X2JpdG1hcHMocF9zX3NiLAorCWlmIChyZWlzZXJmc19hbGxvY2F0ZV9saXN0X2JpdG1hcHMoc2IsCiAJCQkJCSAgIGpvdXJuYWwtPmpfbGlzdF9iaXRtYXAsCi0JCQkJCSAgIHJlaXNlcmZzX2JtYXBfY291bnQocF9zX3NiKSkpCisJCQkJCSAgIHJlaXNlcmZzX2JtYXBfY291bnQoc2IpKSkKIAkJZ290byBmcmVlX2FuZF9yZXR1cm47Ci0JYWxsb2NhdGVfYml0bWFwX25vZGVzKHBfc19zYik7CisJYWxsb2NhdGVfYml0bWFwX25vZGVzKHNiKTsKIAogCS8qIHJlc2VydmVkIGZvciBqb3VybmFsIGFyZWEgc3VwcG9ydCAqLwotCVNCX0pPVVJOQUxfMXN0X1JFU0VSVkVEX0JMT0NLKHBfc19zYikgPSAob2xkX2Zvcm1hdCA/CisJU0JfSk9VUk5BTF8xc3RfUkVTRVJWRURfQkxPQ0soc2IpID0gKG9sZF9mb3JtYXQgPwogCQkJCQkJIFJFSVNFUkZTX09MRF9ESVNLX09GRlNFVF9JTl9CWVRFUwotCQkJCQkJIC8gcF9zX3NiLT5zX2Jsb2Nrc2l6ZSArCi0JCQkJCQkgcmVpc2VyZnNfYm1hcF9jb3VudChwX3Nfc2IpICsKKwkJCQkJCSAvIHNiLT5zX2Jsb2Nrc2l6ZSArCisJCQkJCQkgcmVpc2VyZnNfYm1hcF9jb3VudChzYikgKwogCQkJCQkJIDEgOgogCQkJCQkJIFJFSVNFUkZTX0RJU0tfT0ZGU0VUX0lOX0JZVEVTIC8KLQkJCQkJCSBwX3Nfc2ItPnNfYmxvY2tzaXplICsgMik7CisJCQkJCQkgc2ItPnNfYmxvY2tzaXplICsgMik7CiAKIAkvKiBTYW5pdHkgY2hlY2sgdG8gc2VlIGlzIHRoZSBzdGFuZGFyZCBqb3VybmFsIGZpdHRpbmcgd2l0aGluZyBmaXJzdCBiaXRtYXAKIAkgICAoYWN0dWFsIGZvciBzbWFsbCBibG9ja3NpemVzKSAqLwotCWlmICghU0JfT05ESVNLX0pPVVJOQUxfREVWSUNFKHBfc19zYikgJiYKLQkgICAgKFNCX0pPVVJOQUxfMXN0X1JFU0VSVkVEX0JMT0NLKHBfc19zYikgKwotCSAgICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpID4gcF9zX3NiLT5zX2Jsb2Nrc2l6ZSAqIDgpKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCSAiam91cm5hbC0xMzkzOiBqb3VybmFsIGRvZXMgbm90IGZpdCBmb3IgYXJlYSAiCi0JCQkJICJhZGRyZXNzZWQgYnkgZmlyc3Qgb2YgYml0bWFwIGJsb2Nrcy4gSXQgc3RhcnRzIGF0ICIKKwlpZiAoIVNCX09ORElTS19KT1VSTkFMX0RFVklDRShzYikgJiYKKwkgICAgKFNCX0pPVVJOQUxfMXN0X1JFU0VSVkVEX0JMT0NLKHNiKSArCisJICAgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKSA+IHNiLT5zX2Jsb2Nrc2l6ZSAqIDgpKSB7CisJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJqb3VybmFsLTEzOTMiLAorCQkJCSAiam91cm5hbCBkb2VzIG5vdCBmaXQgZm9yIGFyZWEgYWRkcmVzc2VkICIKKwkJCQkgImJ5IGZpcnN0IG9mIGJpdG1hcCBibG9ja3MuIEl0IHN0YXJ0cyBhdCAiCiAJCQkJICIldSBhbmQgaXRzIHNpemUgaXMgJXUuIEJsb2NrIHNpemUgJWxkIiwKLQkJCQkgU0JfSk9VUk5BTF8xc3RfUkVTRVJWRURfQkxPQ0socF9zX3NiKSwKLQkJCQkgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpLAotCQkJCSBwX3Nfc2ItPnNfYmxvY2tzaXplKTsKKwkJCQkgU0JfSk9VUk5BTF8xc3RfUkVTRVJWRURfQkxPQ0soc2IpLAorCQkJCSBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKSwKKwkJCQkgc2ItPnNfYmxvY2tzaXplKTsKIAkJZ290byBmcmVlX2FuZF9yZXR1cm47CiAJfQogCi0JaWYgKGpvdXJuYWxfaW5pdF9kZXYocF9zX3NiLCBqb3VybmFsLCBqX2Rldl9uYW1lKSAhPSAwKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCSAic2gtNDYyOiB1bmFibGUgdG8gaW5pdGlhbGl6ZSBqb3JuYWwgZGV2aWNlIik7CisJaWYgKGpvdXJuYWxfaW5pdF9kZXYoc2IsIGpvdXJuYWwsIGpfZGV2X25hbWUpICE9IDApIHsKKwkJcmVpc2VyZnNfd2FybmluZyhzYiwgInNoLTQ2MiIsCisJCQkJICJ1bmFibGUgdG8gaW5pdGlhbGl6ZSBqb3JuYWwgZGV2aWNlIik7CiAJCWdvdG8gZnJlZV9hbmRfcmV0dXJuOwogCX0KIAotCXJzID0gU0JfRElTS19TVVBFUl9CTE9DSyhwX3Nfc2IpOworCXJzID0gU0JfRElTS19TVVBFUl9CTE9DSyhzYik7CiAKIAkvKiByZWFkIGpvdXJuYWwgaGVhZGVyICovCi0JYmhqaCA9IGpvdXJuYWxfYnJlYWQocF9zX3NiLAotCQkJICAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0socF9zX3NiKSArCi0JCQkgICAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUocF9zX3NiKSk7CisJYmhqaCA9IGpvdXJuYWxfYnJlYWQoc2IsCisJCQkgICAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYikgKworCQkJICAgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKSk7CiAJaWYgKCFiaGpoKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCSAic2gtNDU5OiB1bmFibGUgdG8gcmVhZCBqb3VybmFsIGhlYWRlciIpOworCQlyZWlzZXJmc193YXJuaW5nKHNiLCAic2gtNDU5IiwKKwkJCQkgInVuYWJsZSB0byByZWFkIGpvdXJuYWwgaGVhZGVyIik7CiAJCWdvdG8gZnJlZV9hbmRfcmV0dXJuOwogCX0KIAlqaCA9IChzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9oZWFkZXIgKikoYmhqaC0+Yl9kYXRhKTsKQEAgLTI3ODIsMTAgKzI3ODgsMTAgQEAKIAlpZiAoaXNfcmVpc2VyZnNfanIocnMpCiAJICAgICYmIChsZTMyX3RvX2NwdShqaC0+amhfam91cm5hbC5qcF9qb3VybmFsX21hZ2ljKSAhPQogCQlzYl9qcF9qb3VybmFsX21hZ2ljKHJzKSkpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJICJzaC00NjA6IGpvdXJuYWwgaGVhZGVyIG1hZ2ljICV4ICIKLQkJCQkgIihkZXZpY2UgJXMpIGRvZXMgbm90IG1hdGNoIHRvIG1hZ2ljIGZvdW5kIGluIHN1cGVyICIKLQkJCQkgImJsb2NrICV4IiwgamgtPmpoX2pvdXJuYWwuanBfam91cm5hbF9tYWdpYywKKwkJcmVpc2VyZnNfd2FybmluZyhzYiwgInNoLTQ2MCIsCisJCQkJICJqb3VybmFsIGhlYWRlciBtYWdpYyAleCAoZGV2aWNlICVzKSBkb2VzICIKKwkJCQkgIm5vdCBtYXRjaCB0byBtYWdpYyBmb3VuZCBpbiBzdXBlciBibG9jayAleCIsCisJCQkJIGpoLT5qaF9qb3VybmFsLmpwX2pvdXJuYWxfbWFnaWMsCiAJCQkJIGJkZXZuYW1lKGpvdXJuYWwtPmpfZGV2X2JkLCBiKSwKIAkJCQkgc2JfanBfam91cm5hbF9tYWdpYyhycykpOwogCQlicmVsc2UoYmhqaCk7CkBAIC0yNzk4LDcgKzI4MDQsNyBAQAogCSAgICBsZTMyX3RvX2NwdShqaC0+amhfam91cm5hbC5qcF9qb3VybmFsX21heF9jb21taXRfYWdlKTsKIAlqb3VybmFsLT5qX21heF90cmFuc19hZ2UgPSBKT1VSTkFMX01BWF9UUkFOU19BR0U7CiAKLQlpZiAoY2hlY2tfYWR2aXNlX3RyYW5zX3BhcmFtcyhwX3Nfc2IsIGpvdXJuYWwpICE9IDApCisJaWYgKGNoZWNrX2FkdmlzZV90cmFuc19wYXJhbXMoc2IsIGpvdXJuYWwpICE9IDApCiAJICAgICAgICBnb3RvIGZyZWVfYW5kX3JldHVybjsKIAlqb3VybmFsLT5qX2RlZmF1bHRfbWF4X2NvbW1pdF9hZ2UgPSBqb3VybmFsLT5qX21heF9jb21taXRfYWdlOwogCkBAIC0yODA3LDEyICsyODEzLDEyIEBACiAJCWpvdXJuYWwtPmpfbWF4X3RyYW5zX2FnZSA9IGNvbW1pdF9tYXhfYWdlOwogCX0KIAotCXJlaXNlcmZzX2luZm8ocF9zX3NiLCAiam91cm5hbCBwYXJhbXM6IGRldmljZSAlcywgc2l6ZSAldSwgIgorCXJlaXNlcmZzX2luZm8oc2IsICJqb3VybmFsIHBhcmFtczogZGV2aWNlICVzLCBzaXplICV1LCAiCiAJCSAgICAgICJqb3VybmFsIGZpcnN0IGJsb2NrICV1LCBtYXggdHJhbnMgbGVuICV1LCBtYXggYmF0Y2ggJXUsICIKIAkJICAgICAgIm1heCBjb21taXQgYWdlICV1LCBtYXggdHJhbnMgYWdlICV1XG4iLAogCQkgICAgICBiZGV2bmFtZShqb3VybmFsLT5qX2Rldl9iZCwgYiksCi0JCSAgICAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUocF9zX3NiKSwKLQkJICAgICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYiksCisJCSAgICAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpLAorCQkgICAgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpLAogCQkgICAgICBqb3VybmFsLT5qX3RyYW5zX21heCwKIAkJICAgICAgam91cm5hbC0+al9tYXhfYmF0Y2gsCiAJCSAgICAgIGpvdXJuYWwtPmpfbWF4X2NvbW1pdF9hZ2UsIGpvdXJuYWwtPmpfbWF4X3RyYW5zX2FnZSk7CkBAIC0yODIwLDcgKzI4MjYsNyBAQAogCWJyZWxzZShiaGpoKTsKIAogCWpvdXJuYWwtPmpfbGlzdF9iaXRtYXBfaW5kZXggPSAwOwotCWpvdXJuYWxfbGlzdF9pbml0KHBfc19zYik7CisJam91cm5hbF9saXN0X2luaXQoc2IpOwogCiAJbWVtc2V0KGpvdXJuYWwtPmpfbGlzdF9oYXNoX3RhYmxlLCAwLAogCSAgICAgICBKT1VSTkFMX0hBU0hfU0laRSAqIHNpemVvZihzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqKSk7CkBAIC0yODUyLDcgKzI4NTgsNyBAQAogCWpvdXJuYWwtPmpfbXVzdF93YWl0ID0gMDsKIAogCWlmIChqb3VybmFsLT5qX2Nub2RlX2ZyZWUgPT0gMCkgewotICAgICAgICAJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsICJqb3VybmFsLTIwMDQ6IEpvdXJuYWwgY25vZGUgbWVtb3J5ICIKKwkJcmVpc2VyZnNfd2FybmluZyhzYiwgImpvdXJuYWwtMjAwNCIsICJKb3VybmFsIGNub2RlIG1lbW9yeSAiCiAJCSAgICAgICAgICAgICAgICAgImFsbG9jYXRpb24gZmFpbGVkICglbGQgYnl0ZXMpLiBKb3VybmFsIGlzICIKIAkJICAgICAgICAgICAgICAgICAidG9vIGxhcmdlIGZvciBhdmFpbGFibGUgbWVtb3J5LiBVc3VhbGx5ICIKIAkJICAgICAgICAgICAgICAgICAidGhpcyBpcyBkdWUgdG8gYSBqb3VybmFsIHRoYXQgaXMgdG9vIGxhcmdlLiIsCkBAIC0yODYwLDE2ICsyODY2LDE3IEBACiAgICAgICAgIAlnb3RvIGZyZWVfYW5kX3JldHVybjsKIAl9CiAKLQlpbml0X2pvdXJuYWxfaGFzaChwX3Nfc2IpOworCWluaXRfam91cm5hbF9oYXNoKHNiKTsKIAlqbCA9IGpvdXJuYWwtPmpfY3VycmVudF9qbDsKLQlqbC0+al9saXN0X2JpdG1hcCA9IGdldF9saXN0X2JpdG1hcChwX3Nfc2IsIGpsKTsKKwlqbC0+al9saXN0X2JpdG1hcCA9IGdldF9saXN0X2JpdG1hcChzYiwgamwpOwogCWlmICghamwtPmpfbGlzdF9iaXRtYXApIHsKLQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJICJqb3VybmFsLTIwMDUsIGdldF9saXN0X2JpdG1hcCBmYWlsZWQgZm9yIGpvdXJuYWwgbGlzdCAwIik7CisJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJqb3VybmFsLTIwMDUiLAorCQkJCSAiZ2V0X2xpc3RfYml0bWFwIGZhaWxlZCBmb3Igam91cm5hbCBsaXN0IDAiKTsKIAkJZ290byBmcmVlX2FuZF9yZXR1cm47CiAJfQotCWlmIChqb3VybmFsX3JlYWQocF9zX3NiKSA8IDApIHsKLQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsICJSZXBsYXkgRmFpbHVyZSwgdW5hYmxlIHRvIG1vdW50Iik7CisJaWYgKGpvdXJuYWxfcmVhZChzYikgPCAwKSB7CisJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJyZWlzZXJmcy0yMDA2IiwKKwkJCQkgIlJlcGxheSBGYWlsdXJlLCB1bmFibGUgdG8gbW91bnQiKTsKIAkJZ290byBmcmVlX2FuZF9yZXR1cm47CiAJfQogCkBAIC0yODc4LDEwICsyODg1LDEwIEBACiAJCWNvbW1pdF93cSA9IGNyZWF0ZV93b3JrcXVldWUoInJlaXNlcmZzIik7CiAKIAlJTklUX0RFTEFZRURfV09SSygmam91cm5hbC0+al93b3JrLCBmbHVzaF9hc3luY19jb21taXRzKTsKLQlqb3VybmFsLT5qX3dvcmtfc2IgPSBwX3Nfc2I7CisJam91cm5hbC0+al93b3JrX3NiID0gc2I7CiAJcmV0dXJuIDA7CiAgICAgICBmcmVlX2FuZF9yZXR1cm46Ci0JZnJlZV9qb3VybmFsX3JhbShwX3Nfc2IpOworCWZyZWVfam91cm5hbF9yYW0oc2IpOwogCXJldHVybiAxOwogfQogCkBAIC0yOTEyLDcgKzI5MTksNyBAQAogCXJldHVybiAwOwogfQogCi0vKiB0aGlzIG11c3QgYmUgY2FsbGVkIGluc2lkZSBhIHRyYW5zYWN0aW9uLCBhbmQgcmVxdWlyZXMgdGhlIAorLyogdGhpcyBtdXN0IGJlIGNhbGxlZCBpbnNpZGUgYSB0cmFuc2FjdGlvbiwgYW5kIHJlcXVpcmVzIHRoZQogKioga2VybmVsX2xvY2sgdG8gYmUgaGVsZAogKi8KIHZvaWQgcmVpc2VyZnNfYmxvY2tfd3JpdGVzKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoKQpAQCAtMjk3MCw3ICsyOTc3LDcgQEAKIAkJd2FrZV91cCgmam91cm5hbC0+al9qb2luX3dhaXQpOwogfQogCi1zdGF0aWMgdm9pZCBsZXRfdHJhbnNhY3Rpb25fZ3JvdyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIHRyYW5zX2lkKQorc3RhdGljIHZvaWQgbGV0X3RyYW5zYWN0aW9uX2dyb3coc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgaW50IHRyYW5zX2lkKQogewogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAJdW5zaWduZWQgbG9uZyBiY291bnQgPSBqb3VybmFsLT5qX2Jjb3VudDsKQEAgLTI5OTcsNDMgKzMwMDQsNDMgQEAKICoqIGV4cGVjdCB0byB1c2UgaW4gbmJsb2Nrcy4KICovCiBzdGF0aWMgaW50IGRvX2pvdXJuYWxfYmVnaW5fcihzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKLQkJCSAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLCB1bnNpZ25lZCBsb25nIG5ibG9ja3MsCisJCQkgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIG5ibG9ja3MsCiAJCQkgICAgICBpbnQgam9pbikKIHsKIAl0aW1lX3Qgbm93ID0gZ2V0X3NlY29uZHMoKTsKLQlpbnQgb2xkX3RyYW5zX2lkOwotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXVuc2lnbmVkIGludCBvbGRfdHJhbnNfaWQ7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlIG15dGg7CiAJaW50IHNjaGVkX2NvdW50ID0gMDsKIAlpbnQgcmV0dmFsOwogCi0JcmVpc2VyZnNfY2hlY2tfbG9ja19kZXB0aChwX3Nfc2IsICJqb3VybmFsX2JlZ2luIik7CisJcmVpc2VyZnNfY2hlY2tfbG9ja19kZXB0aChzYiwgImpvdXJuYWxfYmVnaW4iKTsKIAlCVUdfT04obmJsb2NrcyA+IGpvdXJuYWwtPmpfdHJhbnNfbWF4KTsKIAotCVBST0NfSU5GT19JTkMocF9zX3NiLCBqb3VybmFsLmpvdXJuYWxfYmVpbmcpOworCVBST0NfSU5GT19JTkMoc2IsIGpvdXJuYWwuam91cm5hbF9iZWluZyk7CiAJLyogc2V0IGhlcmUgZm9yIGpvdXJuYWxfam9pbiAqLwogCXRoLT50X3JlZmNvdW50ID0gMTsKLQl0aC0+dF9zdXBlciA9IHBfc19zYjsKKwl0aC0+dF9zdXBlciA9IHNiOwogCiAgICAgICByZWxvY2s6Ci0JbG9ja19qb3VybmFsKHBfc19zYik7CisJbG9ja19qb3VybmFsKHNiKTsKIAlpZiAoam9pbiAhPSBKQkVHSU5fQUJPUlQgJiYgcmVpc2VyZnNfaXNfam91cm5hbF9hYm9ydGVkKGpvdXJuYWwpKSB7Ci0JCXVubG9ja19qb3VybmFsKHBfc19zYik7CisJCXVubG9ja19qb3VybmFsKHNiKTsKIAkJcmV0dmFsID0gam91cm5hbC0+al9lcnJubzsKIAkJZ290byBvdXRfZmFpbDsKIAl9CiAJam91cm5hbC0+al9iY291bnQrKzsKIAogCWlmICh0ZXN0X2JpdChKX1dSSVRFUlNfQkxPQ0tFRCwgJmpvdXJuYWwtPmpfc3RhdGUpKSB7Ci0JCXVubG9ja19qb3VybmFsKHBfc19zYik7Ci0JCXJlaXNlcmZzX3dhaXRfb25fd3JpdGVfYmxvY2socF9zX3NiKTsKLQkJUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIGpvdXJuYWwuam91cm5hbF9yZWxvY2tfd3JpdGVycyk7CisJCXVubG9ja19qb3VybmFsKHNiKTsKKwkJcmVpc2VyZnNfd2FpdF9vbl93cml0ZV9ibG9jayhzYik7CisJCVBST0NfSU5GT19JTkMoc2IsIGpvdXJuYWwuam91cm5hbF9yZWxvY2tfd3JpdGVycyk7CiAJCWdvdG8gcmVsb2NrOwogCX0KIAlub3cgPSBnZXRfc2Vjb25kcygpOwogCiAJLyogaWYgdGhlcmUgaXMgbm8gcm9vbSBpbiB0aGUgam91cm5hbCBPUgotCSAqKiBpZiB0aGlzIHRyYW5zYWN0aW9uIGlzIHRvbyBvbGQsIGFuZCB3ZSB3ZXJlbid0IGNhbGxlZCBqb2luYWJsZSwgd2FpdCBmb3IgaXQgdG8gZmluaXNoIGJlZm9yZSBiZWdpbm5pbmcgCisJICoqIGlmIHRoaXMgdHJhbnNhY3Rpb24gaXMgdG9vIG9sZCwgYW5kIHdlIHdlcmVuJ3QgY2FsbGVkIGpvaW5hYmxlLCB3YWl0IGZvciBpdCB0byBmaW5pc2ggYmVmb3JlIGJlZ2lubmluZwogCSAqKiB3ZSBkb24ndCBzbGVlcCBpZiB0aGVyZSBhcmVuJ3Qgb3RoZXIgd3JpdGVycwogCSAqLwogCkBAIC0zMDQ4LDcgKzMwNTUsNyBAQAogCSAgICB8fCAoIWpvaW4gJiYgam91cm5hbC0+al9jbm9kZV9mcmVlIDwgKGpvdXJuYWwtPmpfdHJhbnNfbWF4ICogMykpKSB7CiAKIAkJb2xkX3RyYW5zX2lkID0gam91cm5hbC0+al90cmFuc19pZDsKLQkJdW5sb2NrX2pvdXJuYWwocF9zX3NiKTsJLyogYWxsb3cgb3RoZXJzIHRvIGZpbmlzaCB0aGlzIHRyYW5zYWN0aW9uICovCisJCXVubG9ja19qb3VybmFsKHNiKTsJLyogYWxsb3cgb3RoZXJzIHRvIGZpbmlzaCB0aGlzIHRyYW5zYWN0aW9uICovCiAKIAkJaWYgKCFqb2luICYmIChqb3VybmFsLT5qX2xlbl9hbGxvYyArIG5ibG9ja3MgKyAyKSA+PQogCQkgICAgam91cm5hbC0+al9tYXhfYmF0Y2ggJiYKQEAgLTMwNTYsNyArMzA2Myw3IEBACiAJCSAgICAoam91cm5hbC0+al9sZW5fYWxsb2MgKiA3NSkpIHsKIAkJCWlmIChhdG9taWNfcmVhZCgmam91cm5hbC0+al93Y291bnQpID4gMTApIHsKIAkJCQlzY2hlZF9jb3VudCsrOwotCQkJCXF1ZXVlX2xvZ193cml0ZXIocF9zX3NiKTsKKwkJCQlxdWV1ZV9sb2dfd3JpdGVyKHNiKTsKIAkJCQlnb3RvIHJlbG9jazsKIAkJCX0KIAkJfQpAQCAtMzA2NiwyNSArMzA3MywyNSBAQAogCQlpZiAoYXRvbWljX3JlYWQoJmpvdXJuYWwtPmpfamxvY2spKSB7CiAJCQl3aGlsZSAoam91cm5hbC0+al90cmFuc19pZCA9PSBvbGRfdHJhbnNfaWQgJiYKIAkJCSAgICAgICBhdG9taWNfcmVhZCgmam91cm5hbC0+al9qbG9jaykpIHsKLQkJCQlxdWV1ZV9sb2dfd3JpdGVyKHBfc19zYik7CisJCQkJcXVldWVfbG9nX3dyaXRlcihzYik7CiAJCQl9CiAJCQlnb3RvIHJlbG9jazsKIAkJfQotCQlyZXR2YWwgPSBqb3VybmFsX2pvaW4oJm15dGgsIHBfc19zYiwgMSk7CisJCXJldHZhbCA9IGpvdXJuYWxfam9pbigmbXl0aCwgc2IsIDEpOwogCQlpZiAocmV0dmFsKQogCQkJZ290byBvdXRfZmFpbDsKIAogCQkvKiBzb21lb25lIG1pZ2h0IGhhdmUgZW5kZWQgdGhlIHRyYW5zYWN0aW9uIHdoaWxlIHdlIGpvaW5lZCAqLwogCQlpZiAob2xkX3RyYW5zX2lkICE9IGpvdXJuYWwtPmpfdHJhbnNfaWQpIHsKLQkJCXJldHZhbCA9IGRvX2pvdXJuYWxfZW5kKCZteXRoLCBwX3Nfc2IsIDEsIDApOworCQkJcmV0dmFsID0gZG9fam91cm5hbF9lbmQoJm15dGgsIHNiLCAxLCAwKTsKIAkJfSBlbHNlIHsKLQkJCXJldHZhbCA9IGRvX2pvdXJuYWxfZW5kKCZteXRoLCBwX3Nfc2IsIDEsIENPTU1JVF9OT1cpOworCQkJcmV0dmFsID0gZG9fam91cm5hbF9lbmQoJm15dGgsIHNiLCAxLCBDT01NSVRfTk9XKTsKIAkJfQogCiAJCWlmIChyZXR2YWwpCiAJCQlnb3RvIG91dF9mYWlsOwogCi0JCVBST0NfSU5GT19JTkMocF9zX3NiLCBqb3VybmFsLmpvdXJuYWxfcmVsb2NrX3djb3VudCk7CisJCVBST0NfSU5GT19JTkMoc2IsIGpvdXJuYWwuam91cm5hbF9yZWxvY2tfd2NvdW50KTsKIAkJZ290byByZWxvY2s7CiAJfQogCS8qIHdlIGFyZSB0aGUgZmlyc3Qgd3JpdGVyLCBzZXQgdHJhbnNfaWQgKi8KQEAgLTMwOTYsNyArMzEwMyw3IEBACiAJdGgtPnRfYmxvY2tzX2xvZ2dlZCA9IDA7CiAJdGgtPnRfYmxvY2tzX2FsbG9jYXRlZCA9IG5ibG9ja3M7CiAJdGgtPnRfdHJhbnNfaWQgPSBqb3VybmFsLT5qX3RyYW5zX2lkOwotCXVubG9ja19qb3VybmFsKHBfc19zYik7CisJdW5sb2NrX2pvdXJuYWwoc2IpOwogCUlOSVRfTElTVF9IRUFEKCZ0aC0+dF9saXN0KTsKIAlnZXRfZnNfZXhjbCgpOwogCXJldHVybiAwOwpAQCAtMzEwNiw3ICszMTEzLDcgQEAKIAkvKiBSZS1zZXQgdGgtPnRfc3VwZXIsIHNvIHdlIGNhbiBwcm9wZXJseSBrZWVwIHRyYWNrIG9mIGhvdyBtYW55CiAJICogcGVyc2lzdGVudCB0cmFuc2FjdGlvbnMgdGhlcmUgYXJlLiBXZSBuZWVkIHRvIGRvIHRoaXMgc28gaWYgdGhpcwogCSAqIGNhbGwgaXMgcGFydCBvZiBhIGZhaWxlZCByZXN0YXJ0X3RyYW5zYWN0aW9uLCB3ZSBjYW4gZnJlZSBpdCBsYXRlciAqLwotCXRoLT50X3N1cGVyID0gcF9zX3NiOworCXRoLT50X3N1cGVyID0gc2I7CiAJcmV0dXJuIHJldHZhbDsKIH0KIApAQCAtMzE1Nyw3ICszMTY0LDcgQEAKIH0KIAogc3RhdGljIGludCBqb3VybmFsX2pvaW4oc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgdW5zaWduZWQgbG9uZyBuYmxvY2tzKQorCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBuYmxvY2tzKQogewogCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKmN1cl90aCA9IGN1cnJlbnQtPmpvdXJuYWxfaW5mbzsKIApAQCAtMzE2NiwxMSArMzE3MywxMSBAQAogCSAqLwogCXRoLT50X2hhbmRsZV9zYXZlID0gY3VyX3RoOwogCUJVR19PTihjdXJfdGggJiYgY3VyX3RoLT50X3JlZmNvdW50ID4gMSk7Ci0JcmV0dXJuIGRvX2pvdXJuYWxfYmVnaW5fcih0aCwgcF9zX3NiLCBuYmxvY2tzLCBKQkVHSU5fSk9JTik7CisJcmV0dXJuIGRvX2pvdXJuYWxfYmVnaW5fcih0aCwgc2IsIG5ibG9ja3MsIEpCRUdJTl9KT0lOKTsKIH0KIAogaW50IGpvdXJuYWxfam9pbl9hYm9ydChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKLQkJICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLCB1bnNpZ25lZCBsb25nIG5ibG9ja3MpCisJCSAgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIG5ibG9ja3MpCiB7CiAJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqY3VyX3RoID0gY3VycmVudC0+am91cm5hbF9pbmZvOwogCkBAIC0zMTc5LDExICszMTg2LDExIEBACiAJICovCiAJdGgtPnRfaGFuZGxlX3NhdmUgPSBjdXJfdGg7CiAJQlVHX09OKGN1cl90aCAmJiBjdXJfdGgtPnRfcmVmY291bnQgPiAxKTsKLQlyZXR1cm4gZG9fam91cm5hbF9iZWdpbl9yKHRoLCBwX3Nfc2IsIG5ibG9ja3MsIEpCRUdJTl9BQk9SVCk7CisJcmV0dXJuIGRvX2pvdXJuYWxfYmVnaW5fcih0aCwgc2IsIG5ibG9ja3MsIEpCRUdJTl9BQk9SVCk7CiB9CiAKIGludCBqb3VybmFsX2JlZ2luKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkgIHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLCB1bnNpZ25lZCBsb25nIG5ibG9ja3MpCisJCSAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBuYmxvY2tzKQogewogCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKmN1cl90aCA9IGN1cnJlbnQtPmpvdXJuYWxfaW5mbzsKIAlpbnQgcmV0OwpAQCAtMzE5MSwyOCArMzE5OCwyOSBAQAogCXRoLT50X2hhbmRsZV9zYXZlID0gTlVMTDsKIAlpZiAoY3VyX3RoKSB7CiAJCS8qIHdlIGFyZSBuZXN0aW5nIGludG8gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24gKi8KLQkJaWYgKGN1cl90aC0+dF9zdXBlciA9PSBwX3Nfc2IpIHsKKwkJaWYgKGN1cl90aC0+dF9zdXBlciA9PSBzYikgewogCQkJQlVHX09OKCFjdXJfdGgtPnRfcmVmY291bnQpOwogCQkJY3VyX3RoLT50X3JlZmNvdW50Kys7CiAJCQltZW1jcHkodGgsIGN1cl90aCwgc2l6ZW9mKCp0aCkpOwogCQkJaWYgKHRoLT50X3JlZmNvdW50IDw9IDEpCi0JCQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJCQkgIkJBRDogcmVmY291bnQgPD0gMSwgYnV0IGpvdXJuYWxfaW5mbyAhPSAwIik7CisJCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgInJlaXNlcmZzLTIwMDUiLAorCQkJCQkJICJCQUQ6IHJlZmNvdW50IDw9IDEsIGJ1dCAiCisJCQkJCQkgImpvdXJuYWxfaW5mbyAhPSAwIik7CiAJCQlyZXR1cm4gMDsKIAkJfSBlbHNlIHsKIAkJCS8qIHdlJ3ZlIGVuZGVkIHVwIHdpdGggYSBoYW5kbGUgZnJvbSBhIGRpZmZlcmVudCBmaWxlc3lzdGVtLgogCQkJICoqIHNhdmUgaXQgYW5kIHJlc3RvcmUgb24gam91cm5hbF9lbmQuICBUaGlzIHNob3VsZCBuZXZlcgogCQkJICoqIHJlYWxseSBoYXBwZW4uLi4KIAkJCSAqLwotCQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJCSAiY2xtLTIxMDA6IG5lc3RpbmcgaW5mbyBhIGRpZmZlcmVudCBGUyIpOworCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgImNsbS0yMTAwIiwKKwkJCQkJICJuZXN0aW5nIGluZm8gYSBkaWZmZXJlbnQgRlMiKTsKIAkJCXRoLT50X2hhbmRsZV9zYXZlID0gY3VycmVudC0+am91cm5hbF9pbmZvOwogCQkJY3VycmVudC0+am91cm5hbF9pbmZvID0gdGg7CiAJCX0KIAl9IGVsc2UgewogCQljdXJyZW50LT5qb3VybmFsX2luZm8gPSB0aDsKIAl9Ci0JcmV0ID0gZG9fam91cm5hbF9iZWdpbl9yKHRoLCBwX3Nfc2IsIG5ibG9ja3MsIEpCRUdJTl9SRUcpOworCXJldCA9IGRvX2pvdXJuYWxfYmVnaW5fcih0aCwgc2IsIG5ibG9ja3MsIEpCRUdJTl9SRUcpOwogCUJVR19PTihjdXJyZW50LT5qb3VybmFsX2luZm8gIT0gdGgpOwogCiAJLyogSSBndWVzcyB0aGlzIGJvaWxzIGRvd24gdG8gYmVpbmcgdGhlIHJlY2lwcm9jYWwgb2YgY2xtLTIxMDAgYWJvdmUuCkBAIC0zMjMyLDMyICszMjQwLDMyIEBACiAqKgogKiogaWYgaXQgd2FzIGRpcnR5LCBjbGVhbnMgYW5kIGZpbGVzIG9udG8gdGhlIGNsZWFuIGxpc3QuICBJIGNhbid0IGxldCBpdCBiZSBkaXJ0eSBhZ2FpbiB1bnRpbCB0aGUKICoqIHRyYW5zYWN0aW9uIGlzIGNvbW1pdHRlZC4KLSoqIAorKioKICoqIGlmIGpfbGVuLCBpcyBiaWdnZXIgdGhhbiBqX2xlbl9hbGxvYywgaXQgcHVzaGVzIGpfbGVuX2FsbG9jIHRvIDEwICsgal9sZW4uCiAqLwogaW50IGpvdXJuYWxfbWFya19kaXJ0eShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKLQkJICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQorCQkgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpjbiA9IE5VTEw7CiAJaW50IGNvdW50X2FscmVhZHlfaW5jZCA9IDA7CiAJaW50IHByZXBhcmVkID0gMDsKIAlCVUdfT04oIXRoLT50X3RyYW5zX2lkKTsKIAotCVBST0NfSU5GT19JTkMocF9zX3NiLCBqb3VybmFsLm1hcmtfZGlydHkpOworCVBST0NfSU5GT19JTkMoc2IsIGpvdXJuYWwubWFya19kaXJ0eSk7CiAJaWYgKHRoLT50X3RyYW5zX2lkICE9IGpvdXJuYWwtPmpfdHJhbnNfaWQpIHsKLQkJcmVpc2VyZnNfcGFuaWModGgtPnRfc3VwZXIsCi0JCQkgICAgICAgImpvdXJuYWwtMTU3NzogaGFuZGxlIHRyYW5zIGlkICVsZCAhPSBjdXJyZW50IHRyYW5zIGlkICVsZFxuIiwKKwkJcmVpc2VyZnNfcGFuaWModGgtPnRfc3VwZXIsICJqb3VybmFsLTE1NzciLAorCQkJICAgICAgICJoYW5kbGUgdHJhbnMgaWQgJWxkICE9IGN1cnJlbnQgdHJhbnMgaWQgJWxkIiwKIAkJCSAgICAgICB0aC0+dF90cmFuc19pZCwgam91cm5hbC0+al90cmFuc19pZCk7CiAJfQogCi0JcF9zX3NiLT5zX2RpcnQgPSAxOworCXNiLT5zX2RpcnQgPSAxOwogCiAJcHJlcGFyZWQgPSB0ZXN0X2NsZWFyX2J1ZmZlcl9qb3VybmFsX3ByZXBhcmVkKGJoKTsKIAljbGVhcl9idWZmZXJfam91cm5hbF9yZXN0b3JlX2RpcnR5KGJoKTsKIAkvKiBhbHJlYWR5IGluIHRoaXMgdHJhbnNhY3Rpb24sIHdlIGFyZSBkb25lICovCiAJaWYgKGJ1ZmZlcl9qb3VybmFsZWQoYmgpKSB7Ci0JCVBST0NfSU5GT19JTkMocF9zX3NiLCBqb3VybmFsLm1hcmtfZGlydHlfYWxyZWFkeSk7CisJCVBST0NfSU5GT19JTkMoc2IsIGpvdXJuYWwubWFya19kaXJ0eV9hbHJlYWR5KTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0zMjY2LDcgKzMyNzQsOCBAQAogCSAqKiBjb3VsZCBnZXQgdG8gZGlzayB0b28gZWFybHkuICBOT1QgR09PRC4KIAkgKi8KIAlpZiAoIXByZXBhcmVkIHx8IGJ1ZmZlcl9kaXJ0eShiaCkpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsICJqb3VybmFsLTE3Nzc6IGJ1ZmZlciAlbGx1IGJhZCBzdGF0ZSAiCisJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJqb3VybmFsLTE3NzciLAorCQkJCSAiYnVmZmVyICVsbHUgYmFkIHN0YXRlICIKIAkJCQkgIiVjUFJFUEFSRUQgJWNMT0NLRUQgJWNESVJUWSAlY0pESVJUWV9XQUlUIiwKIAkJCQkgKHVuc2lnbmVkIGxvbmcgbG9uZyliaC0+Yl9ibG9ja25yLAogCQkJCSBwcmVwYXJlZCA/ICcgJyA6ICchJywKQEAgLTMyNzYsMjMgKzMyODUsMjMgQEAKIAl9CiAKIAlpZiAoYXRvbWljX3JlYWQoJihqb3VybmFsLT5qX3djb3VudCkpIDw9IDApIHsKLQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJICJqb3VybmFsLTE0MDk6IGpvdXJuYWxfbWFya19kaXJ0eSByZXR1cm5pbmcgYmVjYXVzZSBqX3djb3VudCB3YXMgJWQiLAorCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiam91cm5hbC0xNDA5IiwKKwkJCQkgInJldHVybmluZyBiZWNhdXNlIGpfd2NvdW50IHdhcyAlZCIsCiAJCQkJIGF0b21pY19yZWFkKCYoam91cm5hbC0+al93Y291bnQpKSk7CiAJCXJldHVybiAxOwogCX0KLQkvKiB0aGlzIGVycm9yIG1lYW5zIEkndmUgc2NyZXdlZCB1cCwgYW5kIHdlJ3ZlIG92ZXJmbG93ZWQgdGhlIHRyYW5zYWN0aW9uLiAgCisJLyogdGhpcyBlcnJvciBtZWFucyBJJ3ZlIHNjcmV3ZWQgdXAsIGFuZCB3ZSd2ZSBvdmVyZmxvd2VkIHRoZSB0cmFuc2FjdGlvbi4KIAkgKiogTm90aGluZyBjYW4gYmUgZG9uZSBoZXJlLCBleGNlcHQgbWFrZSB0aGUgRlMgcmVhZG9ubHkgb3IgcGFuaWMuCiAJICovCiAJaWYgKGpvdXJuYWwtPmpfbGVuID49IGpvdXJuYWwtPmpfdHJhbnNfbWF4KSB7Ci0JCXJlaXNlcmZzX3BhbmljKHRoLT50X3N1cGVyLAotCQkJICAgICAgICJqb3VybmFsLTE0MTM6IGpvdXJuYWxfbWFya19kaXJ0eTogal9sZW4gKCVsdSkgaXMgdG9vIGJpZ1xuIiwKKwkJcmVpc2VyZnNfcGFuaWModGgtPnRfc3VwZXIsICJqb3VybmFsLTE0MTMiLAorCQkJICAgICAgICJqX2xlbiAoJWx1KSBpcyB0b28gYmlnIiwKIAkJCSAgICAgICBqb3VybmFsLT5qX2xlbik7CiAJfQogCiAJaWYgKGJ1ZmZlcl9qb3VybmFsX2RpcnR5KGJoKSkgewogCQljb3VudF9hbHJlYWR5X2luY2QgPSAxOwotCQlQUk9DX0lORk9fSU5DKHBfc19zYiwgam91cm5hbC5tYXJrX2RpcnR5X25vdGpvdXJuYWwpOworCQlQUk9DX0lORk9fSU5DKHNiLCBqb3VybmFsLm1hcmtfZGlydHlfbm90am91cm5hbCk7CiAJCWNsZWFyX2J1ZmZlcl9qb3VybmFsX2RpcnR5KGJoKTsKIAl9CiAKQEAgLTMzMDQsOSArMzMxMyw5IEBACiAKIAkvKiBub3cgcHV0IHRoaXMgZ3V5IG9uIHRoZSBlbmQgKi8KIAlpZiAoIWNuKSB7Ci0JCWNuID0gZ2V0X2Nub2RlKHBfc19zYik7CisJCWNuID0gZ2V0X2Nub2RlKHNiKTsKIAkJaWYgKCFjbikgewotCQkJcmVpc2VyZnNfcGFuaWMocF9zX3NiLCAiZ2V0X2Nub2RlIGZhaWxlZCFcbiIpOworCQkJcmVpc2VyZnNfcGFuaWMoc2IsICJqb3VybmFsLTQiLCAiZ2V0X2Nub2RlIGZhaWxlZCEiKTsKIAkJfQogCiAJCWlmICh0aC0+dF9ibG9ja3NfbG9nZ2VkID09IHRoLT50X2Jsb2Nrc19hbGxvY2F0ZWQpIHsKQEAgLTMzMTgsNyArMzMyNyw3IEBACiAKIAkJY24tPmJoID0gYmg7CiAJCWNuLT5ibG9ja25yID0gYmgtPmJfYmxvY2tucjsKLQkJY24tPnNiID0gcF9zX3NiOworCQljbi0+c2IgPSBzYjsKIAkJY24tPmpsaXN0ID0gTlVMTDsKIAkJaW5zZXJ0X2pvdXJuYWxfaGFzaChqb3VybmFsLT5qX2hhc2hfdGFibGUsIGNuKTsKIAkJaWYgKCFjb3VudF9hbHJlYWR5X2luY2QpIHsKQEAgLTMzMzksMTEgKzMzNDgsMTEgQEAKIH0KIAogaW50IGpvdXJuYWxfZW5kKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgdW5zaWduZWQgbG9uZyBuYmxvY2tzKQorCQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIG5ibG9ja3MpCiB7CiAJaWYgKCFjdXJyZW50LT5qb3VybmFsX2luZm8gJiYgdGgtPnRfcmVmY291bnQgPiAxKQotCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwgIlJFSVNFUi1ORVNUSU5HOiB0aCBOVUxMLCByZWZjb3VudCAlZCIsCi0JCQkJIHRoLT50X3JlZmNvdW50KTsKKwkJcmVpc2VyZnNfd2FybmluZyhzYiwgIlJFSVNFUi1ORVNUSU5HIiwKKwkJCQkgInRoIE5VTEwsIHJlZmNvdW50ICVkIiwgdGgtPnRfcmVmY291bnQpOwogCiAJaWYgKCF0aC0+dF90cmFuc19pZCkgewogCQlXQVJOX09OKDEpOwpAQCAtMzM2NiwyNiArMzM3NSwyNiBAQAogCQl9CiAJCXJldHVybiAwOwogCX0gZWxzZSB7Ci0JCXJldHVybiBkb19qb3VybmFsX2VuZCh0aCwgcF9zX3NiLCBuYmxvY2tzLCAwKTsKKwkJcmV0dXJuIGRvX2pvdXJuYWxfZW5kKHRoLCBzYiwgbmJsb2NrcywgMCk7CiAJfQogfQogCi0vKiByZW1vdmVzIGZyb20gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24sIHJlbHNpbmcgYW5kIGRlc2NyZW1lbnRpbmcgYW55IGNvdW50ZXJzLiAgCisvKiByZW1vdmVzIGZyb20gdGhlIGN1cnJlbnQgdHJhbnNhY3Rpb24sIHJlbHNpbmcgYW5kIGRlc2NyZW1lbnRpbmcgYW55IGNvdW50ZXJzLgogKiogYWxzbyBmaWxlcyB0aGUgcmVtb3ZlZCBidWZmZXIgZGlyZWN0bHkgb250byB0aGUgY2xlYW4gbGlzdAogKioKICoqIGNhbGxlZCBieSBqb3VybmFsX21hcmtfZnJlZWQgd2hlbiBhIGJsb2NrIGhhcyBiZWVuIGRlbGV0ZWQKICoqCiAqKiByZXR1cm5zIDEgaWYgaXQgY2xlYW5lZCBhbmQgcmVsc2VkIHRoZSBidWZmZXIuIDAgb3RoZXJ3aXNlCiAqLwotc3RhdGljIGludCByZW1vdmVfZnJvbV90cmFuc2FjdGlvbihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKK3N0YXRpYyBpbnQgcmVtb3ZlX2Zyb21fdHJhbnNhY3Rpb24oc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkgICBiX2Jsb2NrbnJfdCBibG9ja25yLCBpbnQgYWxyZWFkeV9jbGVhbmVkKQogewogCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmNuOwotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAJaW50IHJldCA9IDA7CiAKLQljbiA9IGdldF9qb3VybmFsX2hhc2hfZGV2KHBfc19zYiwgam91cm5hbC0+al9oYXNoX3RhYmxlLCBibG9ja25yKTsKKwljbiA9IGdldF9qb3VybmFsX2hhc2hfZGV2KHNiLCBqb3VybmFsLT5qX2hhc2hfdGFibGUsIGJsb2NrbnIpOwogCWlmICghY24gfHwgIWNuLT5iaCkgewogCQlyZXR1cm4gcmV0OwogCX0KQEAgLTM0MDMsNyArMzQxMiw3IEBACiAJCWpvdXJuYWwtPmpfbGFzdCA9IGNuLT5wcmV2OwogCX0KIAlpZiAoYmgpCi0JCXJlbW92ZV9qb3VybmFsX2hhc2gocF9zX3NiLCBqb3VybmFsLT5qX2hhc2hfdGFibGUsIE5VTEwsCisJCXJlbW92ZV9qb3VybmFsX2hhc2goc2IsIGpvdXJuYWwtPmpfaGFzaF90YWJsZSwgTlVMTCwKIAkJCQkgICAgYmgtPmJfYmxvY2tuciwgMCk7CiAJY2xlYXJfYnVmZmVyX2pvdXJuYWxlZChiaCk7CS8qIGRvbid0IGxvZyB0aGlzIG9uZSAqLwogCkBAIC0zNDEzLDE0ICszNDIyLDE0IEBACiAJCWNsZWFyX2J1ZmZlcl9qb3VybmFsX3Rlc3QoYmgpOwogCQlwdXRfYmgoYmgpOwogCQlpZiAoYXRvbWljX3JlYWQoJihiaC0+Yl9jb3VudCkpIDwgMCkgewotCQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsCi0JCQkJCSAiam91cm5hbC0xNzUyOiByZW1vdmUgZnJvbSB0cmFucywgYl9jb3VudCA8IDAiKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJqb3VybmFsLTE3NTIiLAorCQkJCQkgImJfY291bnQgPCAwIik7CiAJCX0KIAkJcmV0ID0gMTsKIAl9CiAJam91cm5hbC0+al9sZW4tLTsKIAlqb3VybmFsLT5qX2xlbl9hbGxvYy0tOwotCWZyZWVfY25vZGUocF9zX3NiLCBjbik7CisJZnJlZV9jbm9kZShzYiwgY24pOwogCXJldHVybiByZXQ7CiB9CiAKQEAgLTM0NjgsMjIgKzM0NzcsMjIgQEAKIH0KIAogLyogc3luY3MgdGhlIGNvbW1pdCBibG9ja3MsIGJ1dCBkb2VzIG5vdCBmb3JjZSB0aGUgcmVhbCBidWZmZXJzIHRvIGRpc2sKLSoqIHdpbGwgd2FpdCB1bnRpbCB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBpcyBkb25lL2NvbW1pdHRlZCBiZWZvcmUgcmV0dXJuaW5nIAorKiogd2lsbCB3YWl0IHVudGlsIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGlzIGRvbmUvY29tbWl0dGVkIGJlZm9yZSByZXR1cm5pbmcKICovCiBpbnQgam91cm5hbF9lbmRfc3luYyhzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKLQkJICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgdW5zaWduZWQgbG9uZyBuYmxvY2tzKQorCQkgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcgbmJsb2NrcykKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCiAJQlVHX09OKCF0aC0+dF90cmFuc19pZCk7CiAJLyogeW91IGNhbiBzeW5jIHdoaWxlIG5lc3RlZCwgdmVyeSwgdmVyeSBiYWQgKi8KIAlCVUdfT04odGgtPnRfcmVmY291bnQgPiAxKTsKIAlpZiAoam91cm5hbC0+al9sZW4gPT0gMCkgewotCQlyZWlzZXJmc19wcmVwYXJlX2Zvcl9qb3VybmFsKHBfc19zYiwgU0JfQlVGRkVSX1dJVEhfU0IocF9zX3NiKSwKKwkJcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChzYiwgU0JfQlVGRkVSX1dJVEhfU0Ioc2IpLAogCQkJCQkgICAgIDEpOwotCQlqb3VybmFsX21hcmtfZGlydHkodGgsIHBfc19zYiwgU0JfQlVGRkVSX1dJVEhfU0IocF9zX3NiKSk7CisJCWpvdXJuYWxfbWFya19kaXJ0eSh0aCwgc2IsIFNCX0JVRkZFUl9XSVRIX1NCKHNiKSk7CiAJfQotCXJldHVybiBkb19qb3VybmFsX2VuZCh0aCwgcF9zX3NiLCBuYmxvY2tzLCBDT01NSVRfTk9XIHwgV0FJVCk7CisJcmV0dXJuIGRvX2pvdXJuYWxfZW5kKHRoLCBzYiwgbmJsb2NrcywgQ09NTUlUX05PVyB8IFdBSVQpOwogfQogCiAvKgpAQCAtMzQ5Myw3ICszNTAyLDcgQEAKIHsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9CiAJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCwgal93b3JrLndvcmspOwotCXN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiID0gam91cm5hbC0+al93b3JrX3NiOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBqb3VybmFsLT5qX3dvcmtfc2I7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqamw7CiAJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7CiAKQEAgLTM1MDIsNyArMzUxMSw3IEBACiAJCS8qIGxhc3QgZW50cnkgaXMgdGhlIHlvdW5nZXN0LCBjb21taXQgaXQgYW5kIHlvdSBnZXQgZXZlcnl0aGluZyAqLwogCQllbnRyeSA9IGpvdXJuYWwtPmpfam91cm5hbF9saXN0LnByZXY7CiAJCWpsID0gSk9VUk5BTF9MSVNUX0VOVFJZKGVudHJ5KTsKLQkJZmx1c2hfY29tbWl0X2xpc3QocF9zX3NiLCBqbCwgMSk7CisJCWZsdXNoX2NvbW1pdF9saXN0KHNiLCBqbCwgMSk7CiAJfQogCXVubG9ja19rZXJuZWwoKTsKIH0KQEAgLTM1MTEsMTEgKzM1MjAsMTEgQEAKICoqIGZsdXNoZXMgYW55IG9sZCB0cmFuc2FjdGlvbnMgdG8gZGlzawogKiogZW5kcyB0aGUgY3VycmVudCB0cmFuc2FjdGlvbiBpZiBpdCBpcyB0b28gb2xkCiAqLwotaW50IHJlaXNlcmZzX2ZsdXNoX29sZF9jb21taXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiKQoraW50IHJlaXNlcmZzX2ZsdXNoX29sZF9jb21taXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7CiAJdGltZV90IG5vdzsKIAlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlIHRoOwotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChwX3Nfc2IpOworCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAKIAlub3cgPSBnZXRfc2Vjb25kcygpOwogCS8qIHNhZmV0eSBjaGVjayBzbyB3ZSBkb24ndCBmbHVzaCB3aGlsZSB3ZSBhcmUgcmVwbGF5aW5nIHRoZSBsb2cgZHVyaW5nCkBAIC0zNTMyLDM1ICszNTQxLDM1IEBACiAJICAgIGpvdXJuYWwtPmpfdHJhbnNfc3RhcnRfdGltZSA+IDAgJiYKIAkgICAgam91cm5hbC0+al9sZW4gPiAwICYmCiAJICAgIChub3cgLSBqb3VybmFsLT5qX3RyYW5zX3N0YXJ0X3RpbWUpID4gam91cm5hbC0+al9tYXhfdHJhbnNfYWdlKSB7Ci0JCWlmICgham91cm5hbF9qb2luKCZ0aCwgcF9zX3NiLCAxKSkgewotCQkJcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChwX3Nfc2IsCi0JCQkJCQkgICAgIFNCX0JVRkZFUl9XSVRIX1NCKHBfc19zYiksCisJCWlmICgham91cm5hbF9qb2luKCZ0aCwgc2IsIDEpKSB7CisJCQlyZWlzZXJmc19wcmVwYXJlX2Zvcl9qb3VybmFsKHNiLAorCQkJCQkJICAgICBTQl9CVUZGRVJfV0lUSF9TQihzYiksCiAJCQkJCQkgICAgIDEpOwotCQkJam91cm5hbF9tYXJrX2RpcnR5KCZ0aCwgcF9zX3NiLAotCQkJCQkgICBTQl9CVUZGRVJfV0lUSF9TQihwX3Nfc2IpKTsKKwkJCWpvdXJuYWxfbWFya19kaXJ0eSgmdGgsIHNiLAorCQkJCQkgICBTQl9CVUZGRVJfV0lUSF9TQihzYikpOwogCiAJCQkvKiB3ZSdyZSBvbmx5IGJlaW5nIGNhbGxlZCBmcm9tIGtyZWlzZXJmc2QsIGl0IG1ha2VzIG5vIHNlbnNlIHRvIGRvCiAJCQkgKiogYW4gYXN5bmMgY29tbWl0IHNvIHRoYXQga3JlaXNlcmZzZCBjYW4gZG8gaXQgbGF0ZXIKIAkJCSAqLwotCQkJZG9fam91cm5hbF9lbmQoJnRoLCBwX3Nfc2IsIDEsIENPTU1JVF9OT1cgfCBXQUlUKTsKKwkJCWRvX2pvdXJuYWxfZW5kKCZ0aCwgc2IsIDEsIENPTU1JVF9OT1cgfCBXQUlUKTsKIAkJfQogCX0KLQlyZXR1cm4gcF9zX3NiLT5zX2RpcnQ7CisJcmV0dXJuIHNiLT5zX2RpcnQ7CiB9CiAKIC8qCiAqKiByZXR1cm5zIDAgaWYgZG9fam91cm5hbF9lbmQgc2hvdWxkIHJldHVybiByaWdodCBhd2F5LCByZXR1cm5zIDEgaWYgZG9fam91cm5hbF9lbmQgc2hvdWxkIGZpbmlzaCB0aGUgY29tbWl0Ci0qKiAKLSoqIGlmIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGlzIHRvbyBvbGQsIGJ1dCBzdGlsbCBoYXMgd3JpdGVycywgdGhpcyB3aWxsIHdhaXQgb24gal9qb2luX3dhaXQgdW50aWwgYWxsIAorKioKKyoqIGlmIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGlzIHRvbyBvbGQsIGJ1dCBzdGlsbCBoYXMgd3JpdGVycywgdGhpcyB3aWxsIHdhaXQgb24gal9qb2luX3dhaXQgdW50aWwgYWxsCiAqKiB0aGUgd3JpdGVycyBhcmUgZG9uZS4gIEJ5IHRoZSB0aW1lIGl0IHdha2VzIHVwLCB0aGUgdHJhbnNhY3Rpb24gaXQgd2FzIGNhbGxlZCBoYXMgYWxyZWFkeSBlbmRlZCwgc28gaXQganVzdAogKiogZmx1c2hlcyB0aGUgY29tbWl0IGxpc3QgYW5kIHJldHVybnMgMC4KICoqCiAqKiBXb24ndCBiYXRjaCB3aGVuIGZsdXNoIG9yIGNvbW1pdF9ub3cgaXMgc2V0LiAgQWxzbyB3b24ndCBiYXRjaCB3aGVuIG90aGVycyBhcmUgd2FpdGluZyBvbiBqX2pvaW5fd2FpdC4KLSoqIAorKioKICoqIE5vdGUsIHdlIGNhbid0IGFsbG93IHRoZSBqb3VybmFsX2VuZCB0byBwcm9jZWVkIHdoaWxlIHRoZXJlIGFyZSBzdGlsbCB3cml0ZXJzIGluIHRoZSBsb2cuCiAqLwogc3RhdGljIGludCBjaGVja19qb3VybmFsX2VuZChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKLQkJCSAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsIHVuc2lnbmVkIGxvbmcgbmJsb2NrcywKKwkJCSAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgdW5zaWduZWQgbG9uZyBuYmxvY2tzLAogCQkJICAgICBpbnQgZmxhZ3MpCiB7CiAKQEAgLTM1NjksMTMgKzM1NzgsMTMgQEAKIAlpbnQgY29tbWl0X25vdyA9IGZsYWdzICYgQ09NTUlUX05PVzsKIAlpbnQgd2FpdF9vbl9jb21taXQgPSBmbGFncyAmIFdBSVQ7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqamw7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKIAogCUJVR19PTighdGgtPnRfdHJhbnNfaWQpOwogCiAJaWYgKHRoLT50X3RyYW5zX2lkICE9IGpvdXJuYWwtPmpfdHJhbnNfaWQpIHsKLQkJcmVpc2VyZnNfcGFuaWModGgtPnRfc3VwZXIsCi0JCQkgICAgICAgImpvdXJuYWwtMTU3NzogaGFuZGxlIHRyYW5zIGlkICVsZCAhPSBjdXJyZW50IHRyYW5zIGlkICVsZFxuIiwKKwkJcmVpc2VyZnNfcGFuaWModGgtPnRfc3VwZXIsICJqb3VybmFsLTE1NzciLAorCQkJICAgICAgICJoYW5kbGUgdHJhbnMgaWQgJWxkICE9IGN1cnJlbnQgdHJhbnMgaWQgJWxkIiwKIAkJCSAgICAgICB0aC0+dF90cmFuc19pZCwgam91cm5hbC0+al90cmFuc19pZCk7CiAJfQogCkBAIC0zNTg0LDcgKzM1OTMsNyBAQAogCQlhdG9taWNfZGVjKCYoam91cm5hbC0+al93Y291bnQpKTsKIAl9CiAKLQkvKiBCVUcsIGRlYWwgd2l0aCBjYXNlIHdoZXJlIGpfbGVuIGlzIDAsIGJ1dCBwZW9wbGUgcHJldmlvdXNseSBmcmVlZCBibG9ja3MgbmVlZCB0byBiZSByZWxlYXNlZCAKKwkvKiBCVUcsIGRlYWwgd2l0aCBjYXNlIHdoZXJlIGpfbGVuIGlzIDAsIGJ1dCBwZW9wbGUgcHJldmlvdXNseSBmcmVlZCBibG9ja3MgbmVlZCB0byBiZSByZWxlYXNlZAogCSAqKiB3aWxsIGJlIGRlYWx0IHdpdGggYnkgbmV4dCB0cmFuc2FjdGlvbiB0aGF0IGFjdHVhbGx5IHdyaXRlcyBzb21ldGhpbmcsIGJ1dCBzaG91bGQgYmUgdGFrZW4KIAkgKiogY2FyZSBvZiBpbiB0aGlzIHRyYW5zCiAJICovCkBAIC0zNTkzLDcgKzM2MDIsNyBAQAogCS8qIGlmIHdjb3VudCA+IDAsIGFuZCB3ZSBhcmUgY2FsbGVkIHRvIHdpdGggZmx1c2ggb3IgY29tbWl0X25vdywKIAkgKiogd2Ugd2FpdCBvbiBqX2pvaW5fd2FpdC4gIFdlIHdpbGwgd2FrZSB1cCB3aGVuIHRoZSBsYXN0IHdyaXRlciBoYXMKIAkgKiogZmluaXNoZWQgdGhlIHRyYW5zYWN0aW9uLCBhbmQgc3RhcnRlZCBpdCBvbiBpdHMgd2F5IHRvIHRoZSBkaXNrLgotCSAqKiBUaGVuLCB3ZSBmbHVzaCB0aGUgY29tbWl0IG9yIGpvdXJuYWwgbGlzdCwgYW5kIGp1c3QgcmV0dXJuIDAgCisJICoqIFRoZW4sIHdlIGZsdXNoIHRoZSBjb21taXQgb3Igam91cm5hbCBsaXN0LCBhbmQganVzdCByZXR1cm4gMAogCSAqKiBiZWNhdXNlIHRoZSByZXN0IG9mIGpvdXJuYWwgZW5kIHdhcyBhbHJlYWR5IGRvbmUgZm9yIHRoaXMgdHJhbnNhY3Rpb24uCiAJICovCiAJaWYgKGF0b21pY19yZWFkKCYoam91cm5hbC0+al93Y291bnQpKSA+IDApIHsKQEAgLTM2MDgsMzEgKzM2MTcsMzEgQEAKIAkJCWlmIChmbHVzaCkgewogCQkJCWpvdXJuYWwtPmpfbmV4dF9mdWxsX2ZsdXNoID0gMTsKIAkJCX0KLQkJCXVubG9ja19qb3VybmFsKHBfc19zYik7CisJCQl1bmxvY2tfam91cm5hbChzYik7CiAKIAkJCS8qIHNsZWVwIHdoaWxlIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uIGlzIHN0aWxsIGpfamxvY2tlZCAqLwogCQkJd2hpbGUgKGpvdXJuYWwtPmpfdHJhbnNfaWQgPT0gdHJhbnNfaWQpIHsKIAkJCQlpZiAoYXRvbWljX3JlYWQoJmpvdXJuYWwtPmpfamxvY2spKSB7Ci0JCQkJCXF1ZXVlX2xvZ193cml0ZXIocF9zX3NiKTsKKwkJCQkJcXVldWVfbG9nX3dyaXRlcihzYik7CiAJCQkJfSBlbHNlIHsKLQkJCQkJbG9ja19qb3VybmFsKHBfc19zYik7CisJCQkJCWxvY2tfam91cm5hbChzYik7CiAJCQkJCWlmIChqb3VybmFsLT5qX3RyYW5zX2lkID09IHRyYW5zX2lkKSB7CiAJCQkJCQlhdG9taWNfc2V0KCYoam91cm5hbC0+al9qbG9jayksCiAJCQkJCQkJICAgMSk7CiAJCQkJCX0KLQkJCQkJdW5sb2NrX2pvdXJuYWwocF9zX3NiKTsKKwkJCQkJdW5sb2NrX2pvdXJuYWwoc2IpOwogCQkJCX0KIAkJCX0KIAkJCUJVR19PTihqb3VybmFsLT5qX3RyYW5zX2lkID09IHRyYW5zX2lkKTsKIAkJCQogCQkJaWYgKGNvbW1pdF9ub3cKLQkJCSAgICAmJiBqb3VybmFsX2xpc3Rfc3RpbGxfYWxpdmUocF9zX3NiLCB0cmFuc19pZCkKKwkJCSAgICAmJiBqb3VybmFsX2xpc3Rfc3RpbGxfYWxpdmUoc2IsIHRyYW5zX2lkKQogCQkJICAgICYmIHdhaXRfb25fY29tbWl0KSB7Ci0JCQkJZmx1c2hfY29tbWl0X2xpc3QocF9zX3NiLCBqbCwgMSk7CisJCQkJZmx1c2hfY29tbWl0X2xpc3Qoc2IsIGpsLCAxKTsKIAkJCX0KIAkJCXJldHVybiAwOwogCQl9Ci0JCXVubG9ja19qb3VybmFsKHBfc19zYik7CisJCXVubG9ja19qb3VybmFsKHNiKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0zNjQ5LDEzICszNjU4LDEzIEBACiAJICAgICYmIGpvdXJuYWwtPmpfbGVuX2FsbG9jIDwgam91cm5hbC0+al9tYXhfYmF0Y2gKIAkgICAgJiYgam91cm5hbC0+al9jbm9kZV9mcmVlID4gKGpvdXJuYWwtPmpfdHJhbnNfbWF4ICogMykpIHsKIAkJam91cm5hbC0+al9iY291bnQrKzsKLQkJdW5sb2NrX2pvdXJuYWwocF9zX3NiKTsKKwkJdW5sb2NrX2pvdXJuYWwoc2IpOwogCQlyZXR1cm4gMDsKIAl9CiAKLQlpZiAoam91cm5hbC0+al9zdGFydCA+IFNCX09ORElTS19KT1VSTkFMX1NJWkUocF9zX3NiKSkgewotCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsCi0JCQkgICAgICAgImpvdXJuYWwtMDAzOiBqb3VybmFsX2VuZDogal9zdGFydCAoJWxkKSBpcyB0b28gaGlnaFxuIiwKKwlpZiAoam91cm5hbC0+al9zdGFydCA+IFNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpKSB7CisJCXJlaXNlcmZzX3BhbmljKHNiLCAiam91cm5hbC0wMDMiLAorCQkJICAgICAgICJqX3N0YXJ0ICglbGQpIGlzIHRvbyBoaWdoIiwKIAkJCSAgICAgICBqb3VybmFsLT5qX3N0YXJ0KTsKIAl9CiAJcmV0dXJuIDE7CkBAIC0zNjY0LDcgKzM2NzMsNyBAQAogLyoKICoqIERvZXMgYWxsIHRoZSB3b3JrIHRoYXQgbWFrZXMgZGVsZXRpbmcgYmxvY2tzIHNhZmUuCiAqKiB3aGVuIGRlbGV0aW5nIGEgYmxvY2sgbWFyayBCSF9KTmV3LCBqdXN0IHJlbW92ZSBpdCBmcm9tIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLCBjbGVhbiBpdCdzIGJ1ZmZlcl9oZWFkIGFuZCBtb3ZlIG9uLgotKiogCisqKgogKiogb3RoZXJ3aXNlOgogKiogc2V0IGEgYml0IGZvciB0aGUgYmxvY2sgaW4gdGhlIGpvdXJuYWwgYml0bWFwLiAgVGhhdCB3aWxsIHByZXZlbnQgaXQgZnJvbSBiZWluZyBhbGxvY2F0ZWQgZm9yIHVuZm9ybWF0dGVkIG5vZGVzCiAqKiBiZWZvcmUgdGhpcyB0cmFuc2FjdGlvbiBoYXMgZmluaXNoZWQuCkBAIC0zNjc2LDE2ICszNjg1LDE2IEBACiAqKiBUaGVuIHJlbW92ZSBpdCBmcm9tIHRoZSBjdXJyZW50IHRyYW5zYWN0aW9uLCBkZWNyZW1lbnRpbmcgYW55IGNvdW50ZXJzIGFuZCBmaWxpbmcgaXQgb24gdGhlIGNsZWFuIGxpc3QuCiAqLwogaW50IGpvdXJuYWxfbWFya19mcmVlZChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKLQkJICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLCBiX2Jsb2NrbnJfdCBibG9ja25yKQorCQkgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgYl9ibG9ja25yX3QgYmxvY2tucikKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpjbiA9IE5VTEw7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CiAJc3RydWN0IHJlaXNlcmZzX2xpc3RfYml0bWFwICpqYiA9IE5VTEw7CiAJaW50IGNsZWFuZWQgPSAwOwogCUJVR19PTighdGgtPnRfdHJhbnNfaWQpOwogCi0JY24gPSBnZXRfam91cm5hbF9oYXNoX2RldihwX3Nfc2IsIGpvdXJuYWwtPmpfaGFzaF90YWJsZSwgYmxvY2tucik7CisJY24gPSBnZXRfam91cm5hbF9oYXNoX2RldihzYiwgam91cm5hbC0+al9oYXNoX3RhYmxlLCBibG9ja25yKTsKIAlpZiAoY24gJiYgY24tPmJoKSB7CiAJCWJoID0gY24tPmJoOwogCQlnZXRfYmgoYmgpOwpAQCAtMzY5NSwxNSArMzcwNCwxNSBAQAogCQljbGVhcl9idWZmZXJfam91cm5hbF9uZXcoYmgpOwogCQljbGVhcl9wcmVwYXJlZF9iaXRzKGJoKTsKIAkJcmVpc2VyZnNfY2xlYW5fYW5kX2ZpbGVfYnVmZmVyKGJoKTsKLQkJY2xlYW5lZCA9IHJlbW92ZV9mcm9tX3RyYW5zYWN0aW9uKHBfc19zYiwgYmxvY2tuciwgY2xlYW5lZCk7CisJCWNsZWFuZWQgPSByZW1vdmVfZnJvbV90cmFuc2FjdGlvbihzYiwgYmxvY2tuciwgY2xlYW5lZCk7CiAJfSBlbHNlIHsKIAkJLyogc2V0IHRoZSBiaXQgZm9yIHRoaXMgYmxvY2sgaW4gdGhlIGpvdXJuYWwgYml0bWFwIGZvciB0aGlzIHRyYW5zYWN0aW9uICovCiAJCWpiID0gam91cm5hbC0+al9jdXJyZW50X2psLT5qX2xpc3RfYml0bWFwOwogCQlpZiAoIWpiKSB7Ci0JCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsCi0JCQkJICAgICAgICJqb3VybmFsLTE3MDI6IGpvdXJuYWxfbWFya19mcmVlZCwgam91cm5hbF9saXN0X2JpdG1hcCBpcyBOVUxMXG4iKTsKKwkJCXJlaXNlcmZzX3BhbmljKHNiLCAiam91cm5hbC0xNzAyIiwKKwkJCQkgICAgICAgImpvdXJuYWxfbGlzdF9iaXRtYXAgaXMgTlVMTCIpOwogCQl9Ci0JCXNldF9iaXRfaW5fbGlzdF9iaXRtYXAocF9zX3NiLCBibG9ja25yLCBqYik7CisJCXNldF9iaXRfaW5fbGlzdF9iaXRtYXAoc2IsIGJsb2NrbnIsIGpiKTsKIAogCQkvKiBOb3RlLCB0aGUgZW50aXJlIHdoaWxlIGxvb3AgaXMgbm90IGFsbG93ZWQgdG8gc2NoZWR1bGUuICAqLwogCkBAIC0zNzExLDEzICszNzIwLDEzIEBACiAJCQljbGVhcl9wcmVwYXJlZF9iaXRzKGJoKTsKIAkJCXJlaXNlcmZzX2NsZWFuX2FuZF9maWxlX2J1ZmZlcihiaCk7CiAJCX0KLQkJY2xlYW5lZCA9IHJlbW92ZV9mcm9tX3RyYW5zYWN0aW9uKHBfc19zYiwgYmxvY2tuciwgY2xlYW5lZCk7CisJCWNsZWFuZWQgPSByZW1vdmVfZnJvbV90cmFuc2FjdGlvbihzYiwgYmxvY2tuciwgY2xlYW5lZCk7CiAKIAkJLyogZmluZCBhbGwgb2xkZXIgdHJhbnNhY3Rpb25zIHdpdGggdGhpcyBibG9jaywgbWFrZSBzdXJlIHRoZXkgZG9uJ3QgdHJ5IHRvIHdyaXRlIGl0IG91dCAqLwotCQljbiA9IGdldF9qb3VybmFsX2hhc2hfZGV2KHBfc19zYiwgam91cm5hbC0+al9saXN0X2hhc2hfdGFibGUsCisJCWNuID0gZ2V0X2pvdXJuYWxfaGFzaF9kZXYoc2IsIGpvdXJuYWwtPmpfbGlzdF9oYXNoX3RhYmxlLAogCQkJCQkgIGJsb2NrbnIpOwogCQl3aGlsZSAoY24pIHsKLQkJCWlmIChwX3Nfc2IgPT0gY24tPnNiICYmIGJsb2NrbnIgPT0gY24tPmJsb2NrbnIpIHsKKwkJCWlmIChzYiA9PSBjbi0+c2IgJiYgYmxvY2tuciA9PSBjbi0+YmxvY2tucikgewogCQkJCXNldF9iaXQoQkxPQ0tfRlJFRUQsICZjbi0+c3RhdGUpOwogCQkJCWlmIChjbi0+YmgpIHsKIAkJCQkJaWYgKCFjbGVhbmVkKSB7CkBAIC0zNzMzLDggKzM3NDIsOSBAQAogCQkJCQkJcHV0X2JoKGNuLT5iaCk7CiAJCQkJCQlpZiAoYXRvbWljX3JlYWQKIAkJCQkJCSAgICAoJihjbi0+YmgtPmJfY291bnQpKSA8IDApIHsKLQkJCQkJCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkJCQkJCSAiam91cm5hbC0yMTM4OiBjbi0+YmgtPmJfY291bnQgPCAwIik7CisJCQkJCQkJcmVpc2VyZnNfd2FybmluZyhzYiwKKwkJCQkJCQkJICJqb3VybmFsLTIxMzgiLAorCQkJCQkJCQkgImNuLT5iaC0+Yl9jb3VudCA8IDAiKTsKIAkJCQkJCX0KIAkJCQkJfQogCQkJCQlpZiAoY24tPmpsaXN0KSB7CS8qIHNpbmNlIHdlIGFyZSBjbGVhcmluZyB0aGUgYmgsIHdlIE1VU1QgZGVjIG5vbnplcm9sZW4gKi8KQEAgLTM4MjQsNyArMzgzNCw3IEBACiAKIGludCByZWlzZXJmc19jb21taXRfZm9yX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7Ci0JdW5zaWduZWQgbG9uZyBpZCA9IFJFSVNFUkZTX0koaW5vZGUpLT5pX3RyYW5zX2lkOworCXVuc2lnbmVkIGludCBpZCA9IFJFSVNFUkZTX0koaW5vZGUpLT5pX3RyYW5zX2lkOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmpsID0gUkVJU0VSRlNfSShpbm9kZSktPmlfamw7CiAKIAkvKiBmb3IgdGhlIHdob2xlIGlub2RlLCBhc3N1bWUgdW5zZXQgaWQgbWVhbnMgaXQgd2FzCkBAIC0zODM5LDE4ICszODQ5LDE4IEBACiAJcmV0dXJuIF9fY29tbWl0X3RyYW5zX2psKGlub2RlLCBpZCwgamwpOwogfQogCi12b2lkIHJlaXNlcmZzX3Jlc3RvcmVfcHJlcGFyZWRfYnVmZmVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAordm9pZCByZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAogCQkJCSAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHBfc19zYik7Ci0JUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIGpvdXJuYWwucmVzdG9yZV9wcmVwYXJlZCk7CisJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKmpvdXJuYWwgPSBTQl9KT1VSTkFMKHNiKTsKKwlQUk9DX0lORk9fSU5DKHNiLCBqb3VybmFsLnJlc3RvcmVfcHJlcGFyZWQpOwogCWlmICghYmgpIHsKIAkJcmV0dXJuOwogCX0KIAlpZiAodGVzdF9jbGVhcl9idWZmZXJfam91cm5hbF9yZXN0b3JlX2RpcnR5KGJoKSAmJgogCSAgICBidWZmZXJfam91cm5hbF9kaXJ0eShiaCkpIHsKIAkJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmNuOwotCQljbiA9IGdldF9qb3VybmFsX2hhc2hfZGV2KHBfc19zYiwKKwkJY24gPSBnZXRfam91cm5hbF9oYXNoX2RldihzYiwKIAkJCQkJICBqb3VybmFsLT5qX2xpc3RfaGFzaF90YWJsZSwKIAkJCQkJICBiaC0+Yl9ibG9ja25yKTsKIAkJaWYgKGNuICYmIGNhbl9kaXJ0eShjbikpIHsKQEAgLTM4NjcsMTIgKzM4NzcsMTIgQEAKICoqIGJlIHdyaXR0ZW4gdG8gZGlzayB3aGlsZSB3ZSBhcmUgYWx0ZXJpbmcgaXQuICBTbywgd2UgbXVzdDoKICoqIGNsZWFuIGl0CiAqKiB3YWl0IG9uIGl0LgotKiogCisqKgogKi8KLWludCByZWlzZXJmc19wcmVwYXJlX2Zvcl9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAoraW50IHJlaXNlcmZzX3ByZXBhcmVfZm9yX2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKIAkJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHdhaXQpCiB7Ci0JUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIGpvdXJuYWwucHJlcGFyZSk7CisJUFJPQ19JTkZPX0lOQyhzYiwgam91cm5hbC5wcmVwYXJlKTsKIAogCWlmICghdHJ5bG9ja19idWZmZXIoYmgpKSB7CiAJCWlmICghd2FpdCkKQEAgLTM5MDksNyArMzkxOSw3IEBACiAJfQogfQogCi0vKiAKKy8qCiAqKiBsb25nIGFuZCB1Z2x5LiAgSWYgZmx1c2gsIHdpbGwgbm90IHJldHVybiB1bnRpbCBhbGwgY29tbWl0CiAqKiBibG9ja3MgYW5kIGFsbCByZWFsIGJ1ZmZlcnMgaW4gdGhlIHRyYW5zIGFyZSBvbiBkaXNrLgogKiogSWYgbm9fYXN5bmMsIHdvbid0IHJldHVybiB1bnRpbCBhbGwgY29tbWl0IGJsb2NrcyBhcmUgb24gZGlzay4KQEAgLTM5MjAsMTAgKzM5MzAsMTAgQEAKICoqIGpvdXJuYWwgbGlzdHMsIGV0YyBqdXN0IHdvbid0IGhhcHBlbi4KICovCiBzdGF0aWMgaW50IGRvX2pvdXJuYWxfZW5kKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkJICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgdW5zaWduZWQgbG9uZyBuYmxvY2tzLAorCQkJICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIG5ibG9ja3MsCiAJCQkgIGludCBmbGFncykKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwocF9zX3NiKTsKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbCAqam91cm5hbCA9IFNCX0pPVVJOQUwoc2IpOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nub2RlICpjbiwgKm5leHQsICpqbF9jbjsKIAlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqbGFzdF9jbiA9IE5VTEw7CiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfZGVzYyAqZGVzYzsKQEAgLTM5MzgsNyArMzk0OCw3IEBACiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqamwsICp0ZW1wX2psOwogCXN0cnVjdCBsaXN0X2hlYWQgKmVudHJ5LCAqc2FmZTsKIAl1bnNpZ25lZCBsb25nIGppbmRleDsKLQl1bnNpZ25lZCBsb25nIGNvbW1pdF90cmFuc19pZDsKKwl1bnNpZ25lZCBpbnQgY29tbWl0X3RyYW5zX2lkOwogCWludCB0cmFuc19oYWxmOwogCiAJQlVHX09OKHRoLT50X3JlZmNvdW50ID4gMSk7CkBAIC0zOTQ2LDIxICszOTU2LDIxIEBACiAKIAkvKiBwcm90ZWN0IGZsdXNoX29sZGVyX2NvbW1pdHMgZnJvbSBkb2luZyBtaXN0YWtlcyBpZiB0aGUKICAgICAgICAgICAgdHJhbnNhY3Rpb24gSUQgY291bnRlciBnZXRzIG92ZXJmbG93ZWQuICAqLwotCWlmICh0aC0+dF90cmFuc19pZCA9PSB+MFVMKQorCWlmICh0aC0+dF90cmFuc19pZCA9PSB+MFUpCiAJCWZsYWdzIHw9IEZMVVNIX0FMTCB8IENPTU1JVF9OT1cgfCBXQUlUOwogCWZsdXNoID0gZmxhZ3MgJiBGTFVTSF9BTEw7CiAJd2FpdF9vbl9jb21taXQgPSBmbGFncyAmIFdBSVQ7CiAKIAlwdXRfZnNfZXhjbCgpOwogCWN1cnJlbnQtPmpvdXJuYWxfaW5mbyA9IHRoLT50X2hhbmRsZV9zYXZlOwotCXJlaXNlcmZzX2NoZWNrX2xvY2tfZGVwdGgocF9zX3NiLCAiam91cm5hbCBlbmQiKTsKKwlyZWlzZXJmc19jaGVja19sb2NrX2RlcHRoKHNiLCAiam91cm5hbCBlbmQiKTsKIAlpZiAoam91cm5hbC0+al9sZW4gPT0gMCkgewotCQlyZWlzZXJmc19wcmVwYXJlX2Zvcl9qb3VybmFsKHBfc19zYiwgU0JfQlVGRkVSX1dJVEhfU0IocF9zX3NiKSwKKwkJcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChzYiwgU0JfQlVGRkVSX1dJVEhfU0Ioc2IpLAogCQkJCQkgICAgIDEpOwotCQlqb3VybmFsX21hcmtfZGlydHkodGgsIHBfc19zYiwgU0JfQlVGRkVSX1dJVEhfU0IocF9zX3NiKSk7CisJCWpvdXJuYWxfbWFya19kaXJ0eSh0aCwgc2IsIFNCX0JVRkZFUl9XSVRIX1NCKHNiKSk7CiAJfQogCi0JbG9ja19qb3VybmFsKHBfc19zYik7CisJbG9ja19qb3VybmFsKHNiKTsKIAlpZiAoam91cm5hbC0+al9uZXh0X2Z1bGxfZmx1c2gpIHsKIAkJZmxhZ3MgfD0gRkxVU0hfQUxMOwogCQlmbHVzaCA9IDE7CkBAIC0zOTcwLDEzICszOTgwLDEzIEBACiAJCXdhaXRfb25fY29tbWl0ID0gMTsKIAl9CiAKLQkvKiBjaGVja19qb3VybmFsX2VuZCBsb2NrcyB0aGUgam91cm5hbCwgYW5kIHVubG9ja3MgaWYgaXQgZG9lcyBub3QgcmV0dXJuIDEgCisJLyogY2hlY2tfam91cm5hbF9lbmQgbG9ja3MgdGhlIGpvdXJuYWwsIGFuZCB1bmxvY2tzIGlmIGl0IGRvZXMgbm90IHJldHVybiAxCiAJICoqIGl0IHRlbGxzIHVzIGlmIHdlIHNob3VsZCBjb250aW51ZSB3aXRoIHRoZSBqb3VybmFsX2VuZCwgb3IganVzdCByZXR1cm4KIAkgKi8KLQlpZiAoIWNoZWNrX2pvdXJuYWxfZW5kKHRoLCBwX3Nfc2IsIG5ibG9ja3MsIGZsYWdzKSkgewotCQlwX3Nfc2ItPnNfZGlydCA9IDE7Ci0JCXdha2VfcXVldWVkX3dyaXRlcnMocF9zX3NiKTsKLQkJcmVpc2VyZnNfYXN5bmNfcHJvZ3Jlc3Nfd2FpdChwX3Nfc2IpOworCWlmICghY2hlY2tfam91cm5hbF9lbmQodGgsIHNiLCBuYmxvY2tzLCBmbGFncykpIHsKKwkJc2ItPnNfZGlydCA9IDE7CisJCXdha2VfcXVldWVkX3dyaXRlcnMoc2IpOworCQlyZWlzZXJmc19hc3luY19wcm9ncmVzc193YWl0KHNiKTsKIAkJZ290byBvdXQ7CiAJfQogCkBAIC00MDA1LDggKzQwMTUsOCBAQAogCiAJLyogc2V0dXAgZGVzY3JpcHRpb24gYmxvY2sgKi8KIAlkX2JoID0KLQkgICAgam91cm5hbF9nZXRibGsocF9zX3NiLAotCQkJICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYikgKworCSAgICBqb3VybmFsX2dldGJsayhzYiwKKwkJCSAgIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYikgKwogCQkJICAgam91cm5hbC0+al9zdGFydCk7CiAJc2V0X2J1ZmZlcl91cHRvZGF0ZShkX2JoKTsKIAlkZXNjID0gKHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Rlc2MgKikoZF9iaCktPmJfZGF0YTsKQEAgLTQwMTUsOSArNDAyNSw5IEBACiAJc2V0X2Rlc2NfdHJhbnNfaWQoZGVzYywgam91cm5hbC0+al90cmFuc19pZCk7CiAKIAkvKiBzZXR1cCBjb21taXQgYmxvY2suICBEb24ndCB3cml0ZSAoa2VlcCBpdCBjbGVhbiB0b28pIHRoaXMgb25lIHVudGlsIGFmdGVyIGV2ZXJ5b25lIGVsc2UgaXMgd3JpdHRlbiAqLwotCWNfYmggPSBqb3VybmFsX2dldGJsayhwX3Nfc2IsIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhwX3Nfc2IpICsKKwljX2JoID0gam91cm5hbF9nZXRibGsoc2IsIFNCX09ORElTS19KT1VSTkFMXzFzdF9CTE9DSyhzYikgKwogCQkJICAgICAgKChqb3VybmFsLT5qX3N0YXJ0ICsgam91cm5hbC0+al9sZW4gKwotCQkJCTEpICUgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpKSk7CisJCQkJMSkgJSBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKSkpOwogCWNvbW1pdCA9IChzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jb21taXQgKiljX2JoLT5iX2RhdGE7CiAJbWVtc2V0KGNfYmgtPmJfZGF0YSwgMCwgY19iaC0+Yl9zaXplKTsKIAlzZXRfY29tbWl0X3RyYW5zX2lkKGNvbW1pdCwgam91cm5hbC0+al90cmFuc19pZCk7CkBAIC00MDUwLDEzICs0MDYwLDEzIEBACiAJICoqICBmb3IgZWFjaCByZWFsIGJsb2NrLCBhZGQgaXQgdG8gdGhlIGpvdXJuYWwgbGlzdCBoYXNoLAogCSAqKiBjb3B5IGludG8gcmVhbCBibG9jayBpbmRleCBhcnJheSBpbiB0aGUgY29tbWl0IG9yIGRlc2MgYmxvY2sKIAkgKi8KLQl0cmFuc19oYWxmID0gam91cm5hbF90cmFuc19oYWxmKHBfc19zYi0+c19ibG9ja3NpemUpOworCXRyYW5zX2hhbGYgPSBqb3VybmFsX3RyYW5zX2hhbGYoc2ItPnNfYmxvY2tzaXplKTsKIAlmb3IgKGkgPSAwLCBjbiA9IGpvdXJuYWwtPmpfZmlyc3Q7IGNuOyBjbiA9IGNuLT5uZXh0LCBpKyspIHsKIAkJaWYgKGJ1ZmZlcl9qb3VybmFsZWQoY24tPmJoKSkgewotCQkJamxfY24gPSBnZXRfY25vZGUocF9zX3NiKTsKKwkJCWpsX2NuID0gZ2V0X2Nub2RlKHNiKTsKIAkJCWlmICghamxfY24pIHsKLQkJCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsCi0JCQkJCSAgICAgICAiam91cm5hbC0xNjc2LCBnZXRfY25vZGUgcmV0dXJuZWQgTlVMTFxuIik7CisJCQkJcmVpc2VyZnNfcGFuaWMoc2IsICJqb3VybmFsLTE2NzYiLAorCQkJCQkgICAgICAgImdldF9jbm9kZSByZXR1cm5lZCBOVUxMIik7CiAJCQl9CiAJCQlpZiAoaSA9PSAwKSB7CiAJCQkJamwtPmpfcmVhbGJsb2NrID0gamxfY247CkBAIC00MDY3LDE4ICs0MDc3LDE5IEBACiAJCQkJbGFzdF9jbi0+bmV4dCA9IGpsX2NuOwogCQkJfQogCQkJbGFzdF9jbiA9IGpsX2NuOwotCQkJLyogbWFrZSBzdXJlIHRoZSBibG9jayB3ZSBhcmUgdHJ5aW5nIHRvIGxvZyBpcyBub3QgYSBibG9jayAKKwkJCS8qIG1ha2Ugc3VyZSB0aGUgYmxvY2sgd2UgYXJlIHRyeWluZyB0byBsb2cgaXMgbm90IGEgYmxvY2sKIAkJCSAgIG9mIGpvdXJuYWwgb3IgcmVzZXJ2ZWQgYXJlYSAqLwogCiAJCQlpZiAoaXNfYmxvY2tfaW5fbG9nX29yX3Jlc2VydmVkX2FyZWEKLQkJCSAgICAocF9zX3NiLCBjbi0+YmgtPmJfYmxvY2tucikpIHsKLQkJCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsCi0JCQkJCSAgICAgICAiam91cm5hbC0yMzMyOiBUcnlpbmcgdG8gbG9nIGJsb2NrICVsdSwgd2hpY2ggaXMgYSBsb2cgYmxvY2tcbiIsCisJCQkgICAgKHNiLCBjbi0+YmgtPmJfYmxvY2tucikpIHsKKwkJCQlyZWlzZXJmc19wYW5pYyhzYiwgImpvdXJuYWwtMjMzMiIsCisJCQkJCSAgICAgICAiVHJ5aW5nIHRvIGxvZyBibG9jayAlbHUsICIKKwkJCQkJICAgICAgICJ3aGljaCBpcyBhIGxvZyBibG9jayIsCiAJCQkJCSAgICAgICBjbi0+YmgtPmJfYmxvY2tucik7CiAJCQl9CiAJCQlqbF9jbi0+YmxvY2tuciA9IGNuLT5iaC0+Yl9ibG9ja25yOwogCQkJamxfY24tPnN0YXRlID0gMDsKLQkJCWpsX2NuLT5zYiA9IHBfc19zYjsKKwkJCWpsX2NuLT5zYiA9IHNiOwogCQkJamxfY24tPmJoID0gY24tPmJoOwogCQkJamxfY24tPmpsaXN0ID0gamw7CiAJCQlpbnNlcnRfam91cm5hbF9oYXNoKGpvdXJuYWwtPmpfbGlzdF9oYXNoX3RhYmxlLCBqbF9jbik7CkBAIC00MTE5LDExICs0MTMwLDExIEBACiAJCQljaGFyICphZGRyOwogCQkJc3RydWN0IHBhZ2UgKnBhZ2U7CiAJCQl0bXBfYmggPQotCQkJICAgIGpvdXJuYWxfZ2V0YmxrKHBfc19zYiwKLQkJCQkJICAgU0JfT05ESVNLX0pPVVJOQUxfMXN0X0JMT0NLKHBfc19zYikgKworCQkJICAgIGpvdXJuYWxfZ2V0YmxrKHNiLAorCQkJCQkgICBTQl9PTkRJU0tfSk9VUk5BTF8xc3RfQkxPQ0soc2IpICsKIAkJCQkJICAgKChjdXJfd3JpdGVfc3RhcnQgKwogCQkJCQkgICAgIGppbmRleCkgJQotCQkJCQkgICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpKSk7CisJCQkJCSAgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKSkpOwogCQkJc2V0X2J1ZmZlcl91cHRvZGF0ZSh0bXBfYmgpOwogCQkJcGFnZSA9IGNuLT5iaC0+Yl9wYWdlOwogCQkJYWRkciA9IGttYXAocGFnZSk7CkBAIC00MTM3LDEyICs0MTQ4LDEzIEBACiAJCQljbGVhcl9idWZmZXJfam91cm5hbGVkKGNuLT5iaCk7CiAJCX0gZWxzZSB7CiAJCQkvKiBKRGlydHkgY2xlYXJlZCBzb21ldGltZSBkdXJpbmcgdHJhbnNhY3Rpb24uICBkb24ndCBsb2cgdGhpcyBvbmUgKi8KLQkJCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCQkgImpvdXJuYWwtMjA0ODogZG9fam91cm5hbF9lbmQ6IEJBRCwgYnVmZmVyIGluIGpvdXJuYWwgaGFzaCwgYnV0IG5vdCBKRGlydHkhIik7CisJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiam91cm5hbC0yMDQ4IiwKKwkJCQkJICJCQUQsIGJ1ZmZlciBpbiBqb3VybmFsIGhhc2gsICIKKwkJCQkJICJidXQgbm90IEpEaXJ0eSEiKTsKIAkJCWJyZWxzZShjbi0+YmgpOwogCQl9CiAJCW5leHQgPSBjbi0+bmV4dDsKLQkJZnJlZV9jbm9kZShwX3Nfc2IsIGNuKTsKKwkJZnJlZV9jbm9kZShzYiwgY24pOwogCQljbiA9IG5leHQ7CiAJCWNvbmRfcmVzY2hlZCgpOwogCX0KQEAgLTQxNTIsNyArNDE2NCw3IEBACiAJICoqIHNvIHdlIGRpcnR5L3JlbHNlIGNfYmggaW4gZmx1c2hfY29tbWl0X2xpc3QsIHdpdGggY29tbWl0X2xlZnQgPD0gMS4KIAkgKi8KIAotCWpvdXJuYWwtPmpfY3VycmVudF9qbCA9IGFsbG9jX2pvdXJuYWxfbGlzdChwX3Nfc2IpOworCWpvdXJuYWwtPmpfY3VycmVudF9qbCA9IGFsbG9jX2pvdXJuYWxfbGlzdChzYik7CiAKIAkvKiBub3cgaXQgaXMgc2FmZSB0byBpbnNlcnQgdGhpcyB0cmFuc2FjdGlvbiBvbiB0aGUgbWFpbiBsaXN0ICovCiAJbGlzdF9hZGRfdGFpbCgmamwtPmpfbGlzdCwgJmpvdXJuYWwtPmpfam91cm5hbF9saXN0KTsKQEAgLTQxNjMsNyArNDE3NSw3IEBACiAJb2xkX3N0YXJ0ID0gam91cm5hbC0+al9zdGFydDsKIAlqb3VybmFsLT5qX3N0YXJ0ID0KIAkgICAgKGpvdXJuYWwtPmpfc3RhcnQgKyBqb3VybmFsLT5qX2xlbiArCi0JICAgICAyKSAlIFNCX09ORElTS19KT1VSTkFMX1NJWkUocF9zX3NiKTsKKwkgICAgIDIpICUgU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYik7CiAJYXRvbWljX3NldCgmKGpvdXJuYWwtPmpfd2NvdW50KSwgMCk7CiAJam91cm5hbC0+al9iY291bnQgPSAwOwogCWpvdXJuYWwtPmpfbGFzdCA9IE5VTEw7CkBAIC00MTc4LDcgKzQxOTAsNyBAQAogCWpvdXJuYWwtPmpfbGVuX2FsbG9jID0gMDsKIAlqb3VybmFsLT5qX25leHRfZnVsbF9mbHVzaCA9IDA7CiAJam91cm5hbC0+al9uZXh0X2FzeW5jX2ZsdXNoID0gMDsKLQlpbml0X2pvdXJuYWxfaGFzaChwX3Nfc2IpOworCWluaXRfam91cm5hbF9oYXNoKHNiKTsKIAogCS8vIG1ha2Ugc3VyZSByZWlzZXJmc19hZGRfamggc2VlcyB0aGUgbmV3IGN1cnJlbnRfamwgYmVmb3JlIHdlCiAJLy8gd3JpdGUgb3V0IHRoZSB0YWlscwpAQCAtNDIwNywxNCArNDIxOSwxNCBAQAogCSAqKiBxdWV1ZSBkb24ndCB3YWl0IGZvciB0aGlzIHByb2MgdG8gZmx1c2ggam91cm5hbCBsaXN0cyBhbmQgc3VjaC4KIAkgKi8KIAlpZiAoZmx1c2gpIHsKLQkJZmx1c2hfY29tbWl0X2xpc3QocF9zX3NiLCBqbCwgMSk7Ci0JCWZsdXNoX2pvdXJuYWxfbGlzdChwX3Nfc2IsIGpsLCAxKTsKKwkJZmx1c2hfY29tbWl0X2xpc3Qoc2IsIGpsLCAxKTsKKwkJZmx1c2hfam91cm5hbF9saXN0KHNiLCBqbCwgMSk7CiAJfSBlbHNlIGlmICghKGpsLT5qX3N0YXRlICYgTElTVF9DT01NSVRfUEVORElORykpCiAJCXF1ZXVlX2RlbGF5ZWRfd29yayhjb21taXRfd3EsICZqb3VybmFsLT5qX3dvcmssIEhaIC8gMTApOwogCi0JLyogaWYgdGhlIG5leHQgdHJhbnNhY3Rpb24gaGFzIGFueSBjaGFuY2Ugb2Ygd3JhcHBpbmcsIGZsdXNoIAotCSAqKiB0cmFuc2FjdGlvbnMgdGhhdCBtaWdodCBnZXQgb3ZlcndyaXR0ZW4uICBJZiBhbnkgam91cm5hbCBsaXN0cyBhcmUgdmVyeSAKLQkgKiogb2xkIGZsdXNoIHRoZW0gYXMgd2VsbC4gIAorCS8qIGlmIHRoZSBuZXh0IHRyYW5zYWN0aW9uIGhhcyBhbnkgY2hhbmNlIG9mIHdyYXBwaW5nLCBmbHVzaAorCSAqKiB0cmFuc2FjdGlvbnMgdGhhdCBtaWdodCBnZXQgb3ZlcndyaXR0ZW4uICBJZiBhbnkgam91cm5hbCBsaXN0cyBhcmUgdmVyeQorCSAqKiBvbGQgZmx1c2ggdGhlbSBhcyB3ZWxsLgogCSAqLwogICAgICAgZmlyc3Rfamw6CiAJbGlzdF9mb3JfZWFjaF9zYWZlKGVudHJ5LCBzYWZlLCAmam91cm5hbC0+al9qb3VybmFsX2xpc3QpIHsKQEAgLTQyMjIsMTEgKzQyMzQsMTEgQEAKIAkJaWYgKGpvdXJuYWwtPmpfc3RhcnQgPD0gdGVtcF9qbC0+al9zdGFydCkgewogCQkJaWYgKChqb3VybmFsLT5qX3N0YXJ0ICsgam91cm5hbC0+al90cmFuc19tYXggKyAxKSA+PQogCQkJICAgIHRlbXBfamwtPmpfc3RhcnQpIHsKLQkJCQlmbHVzaF91c2VkX2pvdXJuYWxfbGlzdHMocF9zX3NiLCB0ZW1wX2psKTsKKwkJCQlmbHVzaF91c2VkX2pvdXJuYWxfbGlzdHMoc2IsIHRlbXBfamwpOwogCQkJCWdvdG8gZmlyc3Rfamw7CiAJCQl9IGVsc2UgaWYgKChqb3VybmFsLT5qX3N0YXJ0ICsKIAkJCQkgICAgam91cm5hbC0+al90cmFuc19tYXggKyAxKSA8Ci0JCQkJICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpKSB7CisJCQkJICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShzYikpIHsKIAkJCQkvKiBpZiB3ZSBkb24ndCBjcm9zcyBpbnRvIHRoZSBuZXh0IHRyYW5zYWN0aW9uIGFuZCB3ZSBkb24ndAogCQkJCSAqIHdyYXAsIHRoZXJlIGlzIG5vIHdheSB3ZSBjYW4gb3ZlcmxhcCBhbnkgbGF0ZXIgdHJhbnNhY3Rpb25zCiAJCQkJICogYnJlYWsgbm93CkBAIC00MjM1LDExICs0MjQ3LDExIEBACiAJCQl9CiAJCX0gZWxzZSBpZiAoKGpvdXJuYWwtPmpfc3RhcnQgKwogCQkJICAgIGpvdXJuYWwtPmpfdHJhbnNfbWF4ICsgMSkgPgotCQkJICAgU0JfT05ESVNLX0pPVVJOQUxfU0laRShwX3Nfc2IpKSB7CisJCQkgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHNiKSkgewogCQkJaWYgKCgoam91cm5hbC0+al9zdGFydCArIGpvdXJuYWwtPmpfdHJhbnNfbWF4ICsgMSkgJQotCQkJICAgICBTQl9PTkRJU0tfSk9VUk5BTF9TSVpFKHBfc19zYikpID49CisJCQkgICAgIFNCX09ORElTS19KT1VSTkFMX1NJWkUoc2IpKSA+PQogCQkJICAgIHRlbXBfamwtPmpfc3RhcnQpIHsKLQkJCQlmbHVzaF91c2VkX2pvdXJuYWxfbGlzdHMocF9zX3NiLCB0ZW1wX2psKTsKKwkJCQlmbHVzaF91c2VkX2pvdXJuYWxfbGlzdHMoc2IsIHRlbXBfamwpOwogCQkJCWdvdG8gZmlyc3Rfamw7CiAJCQl9IGVsc2UgewogCQkJCS8qIHdlIGRvbid0IG92ZXJsYXAgYW55dGhpbmcgZnJvbSBvdXQgc3RhcnQgdG8gdGhlIGVuZCBvZiB0aGUKQEAgLTQyNTAsNDYgKzQyNjIsNDcgQEAKIAkJCX0KIAkJfQogCX0KLQlmbHVzaF9vbGRfam91cm5hbF9saXN0cyhwX3Nfc2IpOworCWZsdXNoX29sZF9qb3VybmFsX2xpc3RzKHNiKTsKIAogCWpvdXJuYWwtPmpfY3VycmVudF9qbC0+al9saXN0X2JpdG1hcCA9Ci0JICAgIGdldF9saXN0X2JpdG1hcChwX3Nfc2IsIGpvdXJuYWwtPmpfY3VycmVudF9qbCk7CisJICAgIGdldF9saXN0X2JpdG1hcChzYiwgam91cm5hbC0+al9jdXJyZW50X2psKTsKIAogCWlmICghKGpvdXJuYWwtPmpfY3VycmVudF9qbC0+al9saXN0X2JpdG1hcCkpIHsKLQkJcmVpc2VyZnNfcGFuaWMocF9zX3NiLAotCQkJICAgICAgICJqb3VybmFsLTE5OTY6IGRvX2pvdXJuYWxfZW5kLCBjb3VsZCBub3QgZ2V0IGEgbGlzdCBiaXRtYXBcbiIpOworCQlyZWlzZXJmc19wYW5pYyhzYiwgImpvdXJuYWwtMTk5NiIsCisJCQkgICAgICAgImNvdWxkIG5vdCBnZXQgYSBsaXN0IGJpdG1hcCIpOwogCX0KIAogCWF0b21pY19zZXQoJihqb3VybmFsLT5qX2psb2NrKSwgMCk7Ci0JdW5sb2NrX2pvdXJuYWwocF9zX3NiKTsKKwl1bmxvY2tfam91cm5hbChzYik7CiAJLyogd2FrZSB1cCBhbnkgYm9keSB3YWl0aW5nIHRvIGpvaW4uICovCiAJY2xlYXJfYml0KEpfV1JJVEVSU19RVUVVRUQsICZqb3VybmFsLT5qX3N0YXRlKTsKIAl3YWtlX3VwKCYoam91cm5hbC0+al9qb2luX3dhaXQpKTsKIAogCWlmICghZmx1c2ggJiYgd2FpdF9vbl9jb21taXQgJiYKLQkgICAgam91cm5hbF9saXN0X3N0aWxsX2FsaXZlKHBfc19zYiwgY29tbWl0X3RyYW5zX2lkKSkgewotCQlmbHVzaF9jb21taXRfbGlzdChwX3Nfc2IsIGpsLCAxKTsKKwkgICAgam91cm5hbF9saXN0X3N0aWxsX2FsaXZlKHNiLCBjb21taXRfdHJhbnNfaWQpKSB7CisJCWZsdXNoX2NvbW1pdF9saXN0KHNiLCBqbCwgMSk7CiAJfQogICAgICAgb3V0OgotCXJlaXNlcmZzX2NoZWNrX2xvY2tfZGVwdGgocF9zX3NiLCAiam91cm5hbCBlbmQyIik7CisJcmVpc2VyZnNfY2hlY2tfbG9ja19kZXB0aChzYiwgImpvdXJuYWwgZW5kMiIpOwogCiAJbWVtc2V0KHRoLCAwLCBzaXplb2YoKnRoKSk7CiAJLyogUmUtc2V0IHRoLT50X3N1cGVyLCBzbyB3ZSBjYW4gcHJvcGVybHkga2VlcCB0cmFjayBvZiBob3cgbWFueQogCSAqIHBlcnNpc3RlbnQgdHJhbnNhY3Rpb25zIHRoZXJlIGFyZS4gV2UgbmVlZCB0byBkbyB0aGlzIHNvIGlmIHRoaXMKIAkgKiBjYWxsIGlzIHBhcnQgb2YgYSBmYWlsZWQgcmVzdGFydF90cmFuc2FjdGlvbiwgd2UgY2FuIGZyZWUgaXQgbGF0ZXIgKi8KLQl0aC0+dF9zdXBlciA9IHBfc19zYjsKKwl0aC0+dF9zdXBlciA9IHNiOwogCiAJcmV0dXJuIGpvdXJuYWwtPmpfZXJybm87CiB9CiAKLXN0YXRpYyB2b2lkIF9fcmVpc2VyZnNfam91cm5hbF9hYm9ydF9oYXJkKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCisvKiBTZW5kIHRoZSBmaWxlIHN5c3RlbSByZWFkIG9ubHkgYW5kIHJlZnVzZSBuZXcgdHJhbnNhY3Rpb25zICovCit2b2lkIHJlaXNlcmZzX2Fib3J0X2pvdXJuYWwoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGVycm5vKQogewogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7CiAJaWYgKHRlc3RfYml0KEpfQUJPUlRFRCwgJmpvdXJuYWwtPmpfc3RhdGUpKQogCQlyZXR1cm47CiAKLQlwcmludGsoS0VSTl9DUklUICJSRUlTRVJGUzogQWJvcnRpbmcgam91cm5hbCBmb3IgZmlsZXN5c3RlbSBvbiAlc1xuIiwKLQkgICAgICAgcmVpc2VyZnNfYmRldm5hbWUoc2IpKTsKKwlpZiAoIWpvdXJuYWwtPmpfZXJybm8pCisJCWpvdXJuYWwtPmpfZXJybm8gPSBlcnJubzsKIAogCXNiLT5zX2ZsYWdzIHw9IE1TX1JET05MWTsKIAlzZXRfYml0KEpfQUJPUlRFRCwgJmpvdXJuYWwtPmpfc3RhdGUpOwpAQCAtNDI5OSwxOSArNDMxMiwzIEBACiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgX19yZWlzZXJmc19qb3VybmFsX2Fib3J0X3NvZnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGVycm5vKQotewotCXN0cnVjdCByZWlzZXJmc19qb3VybmFsICpqb3VybmFsID0gU0JfSk9VUk5BTChzYik7Ci0JaWYgKHRlc3RfYml0KEpfQUJPUlRFRCwgJmpvdXJuYWwtPmpfc3RhdGUpKQotCQlyZXR1cm47Ci0KLQlpZiAoIWpvdXJuYWwtPmpfZXJybm8pCi0JCWpvdXJuYWwtPmpfZXJybm8gPSBlcnJubzsKLQotCV9fcmVpc2VyZnNfam91cm5hbF9hYm9ydF9oYXJkKHNiKTsKLX0KLQotdm9pZCByZWlzZXJmc19qb3VybmFsX2Fib3J0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBlcnJubykKLXsKLQlfX3JlaXNlcmZzX2pvdXJuYWxfYWJvcnRfc29mdChzYiwgZXJybm8pOwotfQpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvbGJhbGFuY2UuYyBiL2ZzL3JlaXNlcmZzL2xiYWxhbmNlLmMKaW5kZXggNmRlMDYwYS4uMzgxNzUwYSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvbGJhbGFuY2UuYworKysgYi9mcy9yZWlzZXJmcy9sYmFsYW5jZS5jCkBAIC0xMTEsNyArMTExLDcgQEAKIAlpdGVtX251bV9pbl9kZXN0ID0KIAkgICAgKGxhc3RfZmlyc3QgPT0gRklSU1RfVE9fTEFTVCkgPyAoQl9OUl9JVEVNUyhkZXN0KSAtIDEpIDogMDsKIAotCWxlYWZfcGFzdGVfZW50cmllcyhkZXN0X2JpLT5iaV9iaCwgaXRlbV9udW1faW5fZGVzdCwKKwlsZWFmX3Bhc3RlX2VudHJpZXMoZGVzdF9iaSwgaXRlbV9udW1faW5fZGVzdCwKIAkJCSAgIChsYXN0X2ZpcnN0ID09CiAJCQkgICAgRklSU1RfVE9fTEFTVCkgPyBJX0VOVFJZX0NPVU5UKEJfTl9QSVRFTV9IRUFEKGRlc3QsCiAJCQkJCQkJCQkgIGl0ZW1fbnVtX2luX2Rlc3QpKQpAQCAtMTE5LDggKzExOSw4IEBACiAJCQkgICBERUhfU0laRSAqIGNvcHlfY291bnQgKyBjb3B5X3JlY29yZHNfbGVuKTsKIH0KIAotLyogQ29weSB0aGUgZmlyc3QgKGlmIGxhc3RfZmlyc3QgPT0gRklSU1RfVE9fTEFTVCkgb3IgbGFzdCAobGFzdF9maXJzdCA9PSBMQVNUX1RPX0ZJUlNUKSBpdGVtIG9yIAotICAgcGFydCBvZiBpdCBvciBub3RoaW5nIChzZWUgdGhlIHJldHVybiAwIGJlbG93KSBmcm9tIFNPVVJDRSB0byB0aGUgZW5kIAorLyogQ29weSB0aGUgZmlyc3QgKGlmIGxhc3RfZmlyc3QgPT0gRklSU1RfVE9fTEFTVCkgb3IgbGFzdCAobGFzdF9maXJzdCA9PSBMQVNUX1RPX0ZJUlNUKSBpdGVtIG9yCisgICBwYXJ0IG9mIGl0IG9yIG5vdGhpbmcgKHNlZSB0aGUgcmV0dXJuIDAgYmVsb3cpIGZyb20gU09VUkNFIHRvIHRoZSBlbmQKICAgIChpZiBsYXN0X2ZpcnN0KSBvciBiZWdpbm5pbmcgKCFsYXN0X2ZpcnN0KSBvZiB0aGUgREVTVCAqLwogLyogcmV0dXJucyAxIGlmIGFueXRoaW5nIHdhcyBjb3BpZWQsIGVsc2UgMCAqLwogc3RhdGljIGludCBsZWFmX2NvcHlfYm91bmRhcnlfaXRlbShzdHJ1Y3QgYnVmZmVyX2luZm8gKmRlc3RfYmksCkBAIC0xNjgsMTAgKzE2OCwxMSBAQAogCQkJaWYgKGJ5dGVzX29yX2VudHJpZXMgPT0gaWhfaXRlbV9sZW4oaWgpCiAJCQkgICAgJiYgaXNfaW5kaXJlY3RfbGVfaWgoaWgpKQogCQkJCWlmIChnZXRfaWhfZnJlZV9zcGFjZShpaCkpCi0JCQkJCXJlaXNlcmZzX3BhbmljKE5VTEwsCi0JCQkJCQkgICAgICAgInZzLTEwMDIwOiBsZWFmX2NvcHlfYm91bmRhcnlfaXRlbTogIgotCQkJCQkJICAgICAgICJsYXN0IHVuZm9ybWF0dGVkIG5vZGUgbXVzdCBiZSBmaWxsZWQgZW50aXJlbHkgKCVoKSIsCi0JCQkJCQkgICAgICAgaWgpOworCQkJCQlyZWlzZXJmc19wYW5pYyhzYl9mcm9tX2JpKGRlc3RfYmkpLAorCQkJCQkJICAgICAgICJ2cy0xMDAyMCIsCisJCQkJCQkgICAgICAgImxhc3QgdW5mb3JtYXR0ZWQgbm9kZSAiCisJCQkJCQkgICAgICAgIm11c3QgYmUgZmlsbGVkICIKKwkJCQkJCSAgICAgICAiZW50aXJlbHkgKCVoKSIsIGloKTsKIAkJfQogI2VuZGlmCiAKQEAgLTM5NSw3ICszOTYsNyBAQAogCQllbHNlIHsKIAkJCXN0cnVjdCBpdGVtX2hlYWQgbl9paDsKIAotCQkJLyogY29weSBwYXJ0IG9mIHRoZSBib2R5IG9mIHRoZSBpdGVtIG51bWJlciAnaXRlbV9udW0nIG9mIFNPVVJDRSB0byB0aGUgZW5kIG9mIHRoZSBERVNUIAorCQkJLyogY29weSBwYXJ0IG9mIHRoZSBib2R5IG9mIHRoZSBpdGVtIG51bWJlciAnaXRlbV9udW0nIG9mIFNPVVJDRSB0byB0aGUgZW5kIG9mIHRoZSBERVNUCiAJCQkgICBwYXJ0IGRlZmluZWQgYnkgJ2NweV9ieXRlcyc7IGNyZWF0ZSBuZXcgaXRlbSBoZWFkZXI7IGNoYW5nZSBvbGQgaXRlbV9oZWFkZXIgKD8/Pz8pOwogCQkJICAgbl9paCA9IG5ldyBpdGVtX2hlYWRlcjsKIAkJCSAqLwpAQCAtNDI1LDcgKzQyNiw3IEBACiAJCWVsc2UgewogCQkJc3RydWN0IGl0ZW1faGVhZCBuX2loOwogCi0JCQkvKiBjb3B5IHBhcnQgb2YgdGhlIGJvZHkgb2YgdGhlIGl0ZW0gbnVtYmVyICdpdGVtX251bScgb2YgU09VUkNFIHRvIHRoZSBiZWdpbiBvZiB0aGUgREVTVCAKKwkJCS8qIGNvcHkgcGFydCBvZiB0aGUgYm9keSBvZiB0aGUgaXRlbSBudW1iZXIgJ2l0ZW1fbnVtJyBvZiBTT1VSQ0UgdG8gdGhlIGJlZ2luIG9mIHRoZSBERVNUCiAJCQkgICBwYXJ0IGRlZmluZWQgYnkgJ2NweV9ieXRlcyc7IGNyZWF0ZSBuZXcgaXRlbSBoZWFkZXI7CiAJCQkgICBuX2loID0gbmV3IGl0ZW1faGVhZGVyOwogCQkJICovCkBAIC02MjIsOSArNjIzLDggQEAKIAkJYnJlYWs7CiAKIAlkZWZhdWx0OgotCQlyZWlzZXJmc19wYW5pYyhOVUxMLAotCQkJICAgICAgICJ2cy0xMDI1MDogbGVhZl9kZWZpbmVfZGVzdF9zcmNfaW5mb3M6IHNoaWZ0IHR5cGUgaXMgdW5rbm93biAoJWQpIiwKLQkJCSAgICAgICBzaGlmdF9tb2RlKTsKKwkJcmVpc2VyZnNfcGFuaWMoc2JfZnJvbV9iaShzcmNfYmkpLCAidnMtMTAyNTAiLAorCQkJICAgICAgICJzaGlmdCB0eXBlIGlzIHVua25vd24gKCVkKSIsIHNoaWZ0X21vZGUpOwogCX0KIAlSRkFMU0UoIXNyY19iaS0+YmlfYmggfHwgIWRlc3RfYmktPmJpX2JoLAogCSAgICAgICAidnMtMTAyNjA6IG1vZGU9PSVkLCBzb3VyY2UgKCVwKSBvciBkZXN0ICglcCkgYnVmZmVyIGlzIGluaXRpYWxpemVkIGluY29ycmVjdGx5IiwKQEAgLTY3NCw5ICs2NzQsOSBAQAogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwogCQkJaWYgKHRiLT50Yl9tb2RlID09IE1fUEFTVEUgfHwgdGItPnRiX21vZGUgPT0gTV9JTlNFUlQpIHsKIAkJCQlwcmludF9jdXJfdGIoInZzLTEwMjc1Iik7Ci0JCQkJcmVpc2VyZnNfcGFuaWModGItPnRiX3NiLAotCQkJCQkgICAgICAgInZzLTEwMjc1OiBsZWFmX3NoaWZ0X2xlZnQ6IGJhbGFuY2UgY29uZGl0aW9uIGNvcnJ1cHRlZCAoJWMpIiwKLQkJCQkJICAgICAgIHRiLT50Yl9tb2RlKTsKKwkJCQlyZWlzZXJmc19wYW5pYyh0Yi0+dGJfc2IsICJ2cy0xMDI3NSIsCisJCQkJCSAgICAgICAiYmFsYW5jZSBjb25kaXRpb24gY29ycnVwdGVkICIKKwkJCQkJICAgICAgICIoJWMpIiwgdGItPnRiX21vZGUpOwogCQkJfQogI2VuZGlmCiAKQEAgLTcyNCw3ICs3MjQsNyBAQAogc3RhdGljIHZvaWQgbGVhZl9kZWxldGVfaXRlbXNfZW50aXJlbHkoc3RydWN0IGJ1ZmZlcl9pbmZvICpiaSwKIAkJCQkgICAgICAgaW50IGZpcnN0LCBpbnQgZGVsX251bSk7CiAvKiAgSWYgZGVsX2J5dGVzID09IC0xLCBzdGFydGluZyBmcm9tIHBvc2l0aW9uICdmaXJzdCcgZGVsZXRlIGRlbF9udW0gaXRlbXMgaW4gd2hvbGUgaW4gYnVmZmVyIENVUi4KLSAgICBJZiBub3QuIAorICAgIElmIG5vdC4KICAgICBJZiBsYXN0X2ZpcnN0ID09IDAuIFN0YXJ0aW5nIGZyb20gcG9zaXRpb24gJ2ZpcnN0JyBkZWxldGUgZGVsX251bS0xIGl0ZW1zIGluIHdob2xlLiBEZWxldGUgcGFydCBvZiBib2R5IG9mCiAgICAgdGhlIGZpcnN0IGl0ZW0uIFBhcnQgZGVmaW5lZCBieSBkZWxfYnl0ZXMuIERvbid0IGRlbGV0ZSBmaXJzdCBpdGVtIGhlYWRlcgogICAgIElmIGxhc3RfZmlyc3QgPT0gMS4gU3RhcnRpbmcgZnJvbSBwb3NpdGlvbiAnZmlyc3QrMScgZGVsZXRlIGRlbF9udW0tMSBpdGVtcyBpbiB3aG9sZS4gRGVsZXRlIHBhcnQgb2YgYm9keSBvZgpAQCAtNzgzLDcgKzc4Myw3IEBACiAJCQkJLyogbGVuID0gYm9keSBsZW4gb2YgaXRlbSAqLwogCQkJCWxlbiA9IGloX2l0ZW1fbGVuKGloKTsKIAotCQkJLyogZGVsZXRlIHRoZSBwYXJ0IG9mIHRoZSBsYXN0IGl0ZW0gb2YgdGhlIGJoIAorCQkJLyogZGVsZXRlIHRoZSBwYXJ0IG9mIHRoZSBsYXN0IGl0ZW0gb2YgdGhlIGJoCiAJCQkgICBkbyBub3QgZGVsZXRlIGl0ZW0gaGVhZGVyCiAJCQkgKi8KIAkJCWxlYWZfY3V0X2Zyb21fYnVmZmVyKGN1cl9iaSwgQl9OUl9JVEVNUyhiaCkgLSAxLApAQCAtODY1LDcgKzg2NSw3IEBACiAJfQogfQogCi0vKiBwYXN0ZSBwYXN0ZV9zaXplIGJ5dGVzIHRvIGFmZmVjdGVkX2l0ZW1fbnVtLXRoIGl0ZW0uIAorLyogcGFzdGUgcGFzdGVfc2l6ZSBieXRlcyB0byBhZmZlY3RlZF9pdGVtX251bS10aCBpdGVtLgogICAgV2hlbiBpdGVtIGlzIGEgZGlyZWN0b3J5LCB0aGlzIG9ubHkgcHJlcGFyZSBzcGFjZSBmb3IgbmV3IGVudHJpZXMgKi8KIHZvaWQgbGVhZl9wYXN0ZV9pbl9idWZmZXIoc3RydWN0IGJ1ZmZlcl9pbmZvICpiaSwgaW50IGFmZmVjdGVkX2l0ZW1fbnVtLAogCQkJICBpbnQgcG9zX2luX2l0ZW0sIGludCBwYXN0ZV9zaXplLApAQCAtODg5LDkgKzg4OSwxMiBAQAogCiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCiAJaWYgKHplcm9zX251bWJlciA+IHBhc3RlX3NpemUpIHsKKwkJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IE5VTEw7CisJCWlmIChiaSAmJiBiaS0+dGIpCisJCQlzYiA9IGJpLT50Yi0+dGJfc2I7CiAJCXByaW50X2N1cl90YigiMTAxNzciKTsKLQkJcmVpc2VyZnNfcGFuaWMoTlVMTCwKLQkJCSAgICAgICAidnMtMTAxNzc6IGxlYWZfcGFzdGVfaW5fYnVmZmVyOiBlcm8gbnVtYmVyID09ICVkLCBwYXN0ZV9zaXplID09ICVkIiwKKwkJcmVpc2VyZnNfcGFuaWMoc2IsICJ2cy0xMDE3NyIsCisJCQkgICAgICAgInplcm9zX251bWJlciA9PSAlZCwgcGFzdGVfc2l6ZSA9PSAlZCIsCiAJCQkgICAgICAgemVyb3NfbnVtYmVyLCBwYXN0ZV9zaXplKTsKIAl9CiAjZW5kaWYJCQkJLyogQ09ORklHX1JFSVNFUkZTX0NIRUNLICovCkBAIC0xMDE5LDcgKzEwMjIsNyBAQAogLyogIHdoZW4gY3V0IGl0ZW0gaXMgcGFydCBvZiByZWd1bGFyIGZpbGUKICAgICAgICAgcG9zX2luX2l0ZW0gLSBmaXJzdCBieXRlIHRoYXQgbXVzdCBiZSBjdXQKICAgICAgICAgY3V0X3NpemUgLSBudW1iZXIgb2YgYnl0ZXMgdG8gYmUgY3V0IGJlZ2lubmluZyBmcm9tIHBvc19pbl9pdGVtCi0gCisKICAgIHdoZW4gY3V0IGl0ZW0gaXMgcGFydCBvZiBkaXJlY3RvcnkKICAgICAgICAgcG9zX2luX2l0ZW0gLSBudW1iZXIgb2YgZmlyc3QgZGVsZXRlZCBlbnRyeQogICAgICAgICBjdXRfc2l6ZSAtIGNvdW50IG9mIGRlbGV0ZWQgZW50cmllcwpAQCAtMTE5MSw3ICsxMTk0LDcgQEAKIH0KIAogLyogcGFzdGUgbmV3X2VudHJ5X2NvdW50IGVudHJpZXMgKG5ld19kZWhzLCByZWNvcmRzKSBpbnRvIHBvc2l0aW9uIGJlZm9yZSB0byBpdGVtX251bS10aCBpdGVtICovCi12b2lkIGxlYWZfcGFzdGVfZW50cmllcyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAordm9pZCBsZWFmX3Bhc3RlX2VudHJpZXMoc3RydWN0IGJ1ZmZlcl9pbmZvICpiaSwKIAkJCWludCBpdGVtX251bSwKIAkJCWludCBiZWZvcmUsCiAJCQlpbnQgbmV3X2VudHJ5X2NvdW50LApAQCAtMTIwMyw2ICsxMjA2LDcgQEAKIAlzdHJ1Y3QgcmVpc2VyZnNfZGVfaGVhZCAqZGVoOwogCWNoYXIgKmluc2VydF9wb2ludDsKIAlpbnQgaSwgb2xkX2VudHJ5X251bTsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gYmktPmJpX2JoOwogCiAJaWYgKG5ld19lbnRyeV9jb3VudCA9PSAwKQogCQlyZXR1cm47CkBAIC0xMjcxLDcgKzEyNzUsNyBAQAogCS8qIGNoYW5nZSBpdGVtIGtleSBpZiBuZWNlc3NhcnkgKHdoZW4gd2UgcGFzdGUgYmVmb3JlIDAtdGggZW50cnkgKi8KIAlpZiAoIWJlZm9yZSkgewogCQlzZXRfbGVfaWhfa19vZmZzZXQoaWgsIGRlaF9vZmZzZXQobmV3X2RlaHMpKTsKLS8qICAgICAgbWVtY3B5ICgmaWgtPmloX2tleS5rX29mZnNldCwgCisvKiAgICAgIG1lbWNweSAoJmloLT5paF9rZXkua19vZmZzZXQsCiAJCSAgICAgICAmbmV3X2RlaHMtPmRlaF9vZmZzZXQsIFNIT1JUX0tFWV9TSVpFKTsqLwogCX0KICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKQEAgLTEyODcsMTMgKzEyOTEsMTcgQEAKIAkJCXByZXYgPSAoaSAhPSAwKSA/IGRlaF9sb2NhdGlvbigmKGRlaFtpIC0gMV0pKSA6IDA7CiAKIAkJCWlmIChwcmV2ICYmIHByZXYgPD0gZGVoX2xvY2F0aW9uKCYoZGVoW2ldKSkpCi0JCQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJCQkJICJ2cy0xMDI0MDogbGVhZl9wYXN0ZV9lbnRyaWVzOiBkaXJlY3RvcnkgaXRlbSAoJWgpIGNvcnJ1cHRlZCAocHJldiAlYSwgY3VyKCVkKSAlYSkiLAotCQkJCQkJIGloLCBkZWggKyBpIC0gMSwgaSwgZGVoICsgaSk7CisJCQkJcmVpc2VyZnNfZXJyb3Ioc2JfZnJvbV9iaShiaSksICJ2cy0xMDI0MCIsCisJCQkJCSAgICAgICAiZGlyZWN0b3J5IGl0ZW0gKCVoKSAiCisJCQkJCSAgICAgICAiY29ycnVwdGVkIChwcmV2ICVhLCAiCisJCQkJCSAgICAgICAiY3VyKCVkKSAlYSkiLAorCQkJCQkgICAgICAgaWgsIGRlaCArIGkgLSAxLCBpLCBkZWggKyBpKTsKIAkJCWlmIChuZXh0ICYmIG5leHQgPj0gZGVoX2xvY2F0aW9uKCYoZGVoW2ldKSkpCi0JCQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJCQkJICJ2cy0xMDI1MDogbGVhZl9wYXN0ZV9lbnRyaWVzOiBkaXJlY3RvcnkgaXRlbSAoJWgpIGNvcnJ1cHRlZCAoY3VyKCVkKSAlYSwgbmV4dCAlYSkiLAotCQkJCQkJIGloLCBpLCBkZWggKyBpLCBkZWggKyBpICsgMSk7CisJCQkJcmVpc2VyZnNfZXJyb3Ioc2JfZnJvbV9iaShiaSksICJ2cy0xMDI1MCIsCisJCQkJCSAgICAgICAiZGlyZWN0b3J5IGl0ZW0gKCVoKSAiCisJCQkJCSAgICAgICAiY29ycnVwdGVkIChjdXIoJWQpICVhLCAiCisJCQkJCSAgICAgICAibmV4dCAlYSkiLAorCQkJCQkgICAgICAgaWgsIGksIGRlaCArIGksIGRlaCArIGkgKyAxKTsKIAkJfQogCX0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvbmFtZWkuYyBiL2ZzL3JlaXNlcmZzL25hbWVpLmMKaW5kZXggNjM5ZDYzNS4uZWZkNGQ3MiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvbmFtZWkuYworKysgYi9mcy9yZWlzZXJmcy9uYW1laS5jCkBAIC0xMDYsNyArMTA2LDcgQEAKIFRoaXMgZnVuY3Rpb24gZmlyc3QgY2FsbHMgc2VhcmNoX2J5X2tleSwgdGhlbiwgaWYgaXRlbSB3aG9zZSBmaXJzdAogZW50cnkgbWF0Y2hlcyBpcyBub3QgZm91bmQgaXQgbG9va3MgZm9yIHRoZSBlbnRyeSBpbnNpZGUgZGlyZWN0b3J5CiBpdGVtIGZvdW5kIGJ5IHNlYXJjaF9ieV9rZXkuIEZpbGxzIHRoZSBwYXRoIHRvIHRoZSBlbnRyeSwgYW5kIHRvIHRoZQotZW50cnkgcG9zaXRpb24gaW4gdGhlIGl0ZW0gCitlbnRyeSBwb3NpdGlvbiBpbiB0aGUgaXRlbQogCiAqLwogCkBAIC0xMjAsOCArMTIwLDggQEAKIAlzd2l0Y2ggKHJldHZhbCkgewogCWNhc2UgSVRFTV9OT1RfRk9VTkQ6CiAJCWlmICghUEFUSF9MQVNUX1BPU0lUSU9OKHBhdGgpKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHNiLAotCQkJCQkgInZzLTcwMDA6IHNlYXJjaF9ieV9lbnRyeV9rZXk6IHNlYXJjaF9ieV9rZXkgcmV0dXJuZWQgaXRlbSBwb3NpdGlvbiA9PSAwIik7CisJCQlyZWlzZXJmc19lcnJvcihzYiwgInZzLTcwMDAiLCAic2VhcmNoX2J5X2tleSAiCisJCQkJICAgICAgICJyZXR1cm5lZCBpdGVtIHBvc2l0aW9uID09IDAiKTsKIAkJCXBhdGhyZWxzZShwYXRoKTsKIAkJCXJldHVybiBJT19FUlJPUjsKIAkJfQpAQCAtMTM1LDggKzEzNSw3IEBACiAKIAlkZWZhdWx0OgogCQlwYXRocmVsc2UocGF0aCk7Ci0JCXJlaXNlcmZzX3dhcm5pbmcoc2IsCi0JCQkJICJ2cy03MDAyOiBzZWFyY2hfYnlfZW50cnlfa2V5OiBubyBwYXRoIHRvIGhlcmUiKTsKKwkJcmVpc2VyZnNfZXJyb3Ioc2IsICJ2cy03MDAyIiwgIm5vIHBhdGggdG8gaGVyZSIpOwogCQlyZXR1cm4gSU9fRVJST1I7CiAJfQogCkBAIC0xNDYsMTAgKzE0NSw5IEBACiAJaWYgKCFpc19kaXJlbnRyeV9sZV9paChkZS0+ZGVfaWgpIHx8CiAJICAgIENPTVBfU0hPUlRfS0VZUygmKGRlLT5kZV9paC0+aWhfa2V5KSwga2V5KSkgewogCQlwcmludF9ibG9jayhkZS0+ZGVfYmgsIDAsIC0xLCAtMSk7Ci0JCXJlaXNlcmZzX3BhbmljKHNiLAotCQkJICAgICAgICJ2cy03MDA1OiBzZWFyY2hfYnlfZW50cnlfa2V5OiBmb3VuZCBpdGVtICVoIGlzIG5vdCBkaXJlY3RvcnkgaXRlbSBvciAiCi0JCQkgICAgICAgImRvZXMgbm90IGJlbG9uZyB0byB0aGUgc2FtZSBkaXJlY3RvcnkgYXMga2V5ICVLIiwKLQkJCSAgICAgICBkZS0+ZGVfaWgsIGtleSk7CisJCXJlaXNlcmZzX3BhbmljKHNiLCAidnMtNzAwNSIsICJmb3VuZCBpdGVtICVoIGlzIG5vdCBkaXJlY3RvcnkgIgorCQkJICAgICAgICJpdGVtIG9yIGRvZXMgbm90IGJlbG9uZyB0byB0aGUgc2FtZSBkaXJlY3RvcnkgIgorCQkJICAgICAgICJhcyBrZXkgJUsiLCBkZS0+ZGVfaWgsIGtleSk7CiAJfQogI2VuZGlmCQkJCS8qIENPTkZJR19SRUlTRVJGU19DSEVDSyAqLwogCkBAIC0zMDAsOCArMjk4LDcgQEAKIAkJICAgIHNlYXJjaF9ieV9lbnRyeV9rZXkoZGlyLT5pX3NiLCAma2V5X3RvX3NlYXJjaCwKIAkJCQkJcGF0aF90b19lbnRyeSwgZGUpOwogCQlpZiAocmV0dmFsID09IElPX0VSUk9SKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKGRpci0+aV9zYiwgInphbS03MDAxOiBpbyBlcnJvciBpbiAlcyIsCi0JCQkJCSBfX2Z1bmNfXyk7CisJCQlyZWlzZXJmc19lcnJvcihkaXItPmlfc2IsICJ6YW0tNzAwMSIsICJpbyBlcnJvciIpOwogCQkJcmV0dXJuIElPX0VSUk9SOwogCQl9CiAKQEAgLTM2MSw5ICszNTgsMTAgQEAKIAkJCXJldHVybiBFUlJfUFRSKC1FQUNDRVMpOwogCQl9CiAKLQkJLyogUHJvcG9nYXRlIHRoZSBwcml2X29iamVjdCBmbGFnIHNvIHdlIGtub3cgd2UncmUgaW4gdGhlIHByaXYgdHJlZSAqLwotCQlpZiAoaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoZGlyKSkKLQkJCXJlaXNlcmZzX21hcmtfaW5vZGVfcHJpdmF0ZShpbm9kZSk7CisJCS8qIFByb3BhZ2F0ZSB0aGUgcHJpdmF0ZSBmbGFnIHNvIHdlIGtub3cgd2UncmUKKwkJICogaW4gdGhlIHByaXYgdHJlZSAqLworCQlpZiAoSVNfUFJJVkFURShkaXIpKQorCQkJaW5vZGUtPmlfZmxhZ3MgfD0gU19QUklWQVRFOwogCX0KIAlyZWlzZXJmc193cml0ZV91bmxvY2soZGlyLT5pX3NiKTsKIAlpZiAocmV0dmFsID09IElPX0VSUk9SKSB7CkBAIC0zNzMsNyArMzcxLDcgQEAKIAlyZXR1cm4gZF9zcGxpY2VfYWxpYXMoaW5vZGUsIGRlbnRyeSk7CiB9CiAKLS8qIAorLyoKICoqIGxvb2tzIHVwIHRoZSBkZW50cnkgb2YgdGhlIHBhcmVudCBkaXJlY3RvcnkgZm9yIGNoaWxkLgogKiogdGFrZW4gZnJvbSBleHQyX2dldF9wYXJlbnQKICovCkBAIC00MDMsNyArNDAxLDcgQEAKIAlyZXR1cm4gZF9vYnRhaW5fYWxpYXMoaW5vZGUpOwogfQogCi0vKiBhZGQgZW50cnkgdG8gdGhlIGRpcmVjdG9yeSAoZW50cnkgY2FuIGJlIGhpZGRlbikuIAorLyogYWRkIGVudHJ5IHRvIHRoZSBkaXJlY3RvcnkgKGVudHJ5IGNhbiBiZSBoaWRkZW4pLgogCiBpbnNlcnQgZGVmaW5pdGlvbiBvZiB3aGVuIGhpZGRlbiBkaXJlY3RvcmllcyBhcmUgdXNlZCBoZXJlIC1IYW5zCiAKQEAgLTQ4NCwxMCArNDgyLDkgQEAKIAkJfQogCiAJCWlmIChyZXR2YWwgIT0gTkFNRV9GT1VORCkgewotCQkJcmVpc2VyZnNfd2FybmluZyhkaXItPmlfc2IsCi0JCQkJCSAiemFtLTcwMDI6JXM6IFwicmVpc2VyZnNfZmluZF9lbnRyeVwiICIKLQkJCQkJICJoYXMgcmV0dXJuZWQgdW5leHBlY3RlZCB2YWx1ZSAoJWQpIiwKLQkJCQkJIF9fZnVuY19fLCByZXR2YWwpOworCQkJcmVpc2VyZnNfZXJyb3IoZGlyLT5pX3NiLCAiemFtLTcwMDIiLAorCQkJCSAgICAgICAicmVpc2VyZnNfZmluZF9lbnRyeSgpIHJldHVybmVkICIKKwkJCQkgICAgICAgInVuZXhwZWN0ZWQgdmFsdWUgKCVkKSIsIHJldHZhbCk7CiAJCX0KIAogCQlyZXR1cm4gLUVFWElTVDsKQEAgLTQ5OCw4ICs0OTUsOSBAQAogCQkJCU1BWF9HRU5FUkFUSU9OX05VTUJFUiArIDEpOwogCWlmIChnZW5fbnVtYmVyID4gTUFYX0dFTkVSQVRJT05fTlVNQkVSKSB7CiAJCS8qIHRoZXJlIGlzIG5vIGZyZWUgZ2VuZXJhdGlvbiBudW1iZXIgKi8KLQkJcmVpc2VyZnNfd2FybmluZyhkaXItPmlfc2IsCi0JCQkJICJyZWlzZXJmc19hZGRfZW50cnk6IENvbmdyYXR1bGF0aW9ucyEgd2UgaGF2ZSBnb3QgaGFzaCBmdW5jdGlvbiBzY3Jld2VkIHVwIik7CisJCXJlaXNlcmZzX3dhcm5pbmcoZGlyLT5pX3NiLCAicmVpc2VyZnMtNzAxMCIsCisJCQkJICJDb25ncmF0dWxhdGlvbnMhIHdlIGhhdmUgZ290IGhhc2ggZnVuY3Rpb24gIgorCQkJCSAic2NyZXdlZCB1cCIpOwogCQlpZiAoYnVmZmVyICE9IHNtYWxsX2J1ZikKIAkJCWtmcmVlKGJ1ZmZlcik7CiAJCXBhdGhyZWxzZSgmcGF0aCk7CkBAIC01MTUsMTAgKzUxMyw5IEBACiAJaWYgKGdlbl9udW1iZXIgIT0gMCkgewkvKiB3ZSBuZWVkIHRvIHJlLXNlYXJjaCBmb3IgdGhlIGluc2VydGlvbiBwb2ludCAqLwogCQlpZiAoc2VhcmNoX2J5X2VudHJ5X2tleShkaXItPmlfc2IsICZlbnRyeV9rZXksICZwYXRoLCAmZGUpICE9CiAJCSAgICBOQU1FX05PVF9GT1VORCkgewotCQkJcmVpc2VyZnNfd2FybmluZyhkaXItPmlfc2IsCi0JCQkJCSAidnMtNzAzMjogcmVpc2VyZnNfYWRkX2VudHJ5OiAiCi0JCQkJCSAiZW50cnkgd2l0aCB0aGlzIGtleSAoJUspIGFscmVhZHkgZXhpc3RzIiwKLQkJCQkJICZlbnRyeV9rZXkpOworCQkJcmVpc2VyZnNfd2FybmluZyhkaXItPmlfc2IsICJ2cy03MDMyIiwKKwkJCQkJICJlbnRyeSB3aXRoIHRoaXMga2V5ICglSykgYWxyZWFkeSAiCisJCQkJCSAiZXhpc3RzIiwgJmVudHJ5X2tleSk7CiAKIAkJCWlmIChidWZmZXIgIT0gc21hbGxfYnVmKQogCQkJCWtmcmVlKGJ1ZmZlcik7CkBAIC01NjIsNyArNTU5LDcgQEAKIAlyZXR1cm4gMDsKIH0KIAotLyogdXRpbGl0eSBmdW5jdGlvbiB0aGF0IGRvZXMgc2V0dXAgZm9yIHJlaXNlcmZzX25ld19pbm9kZS4gIAorLyogdXRpbGl0eSBmdW5jdGlvbiB0aGF0IGRvZXMgc2V0dXAgZm9yIHJlaXNlcmZzX25ld19pbm9kZS4KICoqIHZmc19kcV9pbml0IG5lZWRzIGxvdHMgb2YgY3JlZGl0cyBzbyBpdCdzIGJldHRlciB0byBoYXZlIGl0CiAqKiBvdXRzaWRlIG9mIGEgdHJhbnNhY3Rpb24sIHNvIHdlIGhhZCB0byBwdWxsIHNvbWUgYml0cyBvZgogKiogcmVpc2VyZnNfbmV3X2lub2RlIG91dCBpbnRvIHRoaXMgZnVuYy4KQEAgLTYwMSwyMCArNTk4LDIyIEBACiAJICAgIDIgKiAoUkVJU0VSRlNfUVVPVEFfSU5JVF9CTE9DS1MoZGlyLT5pX3NiKSArCiAJCSBSRUlTRVJGU19RVU9UQV9UUkFOU19CTE9DS1MoZGlyLT5pX3NiKSk7CiAJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB0aDsKLQlpbnQgbG9ja2VkOworCXN0cnVjdCByZWlzZXJmc19zZWN1cml0eV9oYW5kbGUgc2VjdXJpdHk7CiAKIAlpZiAoIShpbm9kZSA9IG5ld19pbm9kZShkaXItPmlfc2IpKSkgewogCQlyZXR1cm4gLUVOT01FTTsKIAl9CiAJbmV3X2lub2RlX2luaXQoaW5vZGUsIGRpciwgbW9kZSk7CiAKLQlsb2NrZWQgPSByZWlzZXJmc19jYWNoZV9kZWZhdWx0X2FjbChkaXIpOwotCisJamJlZ2luX2NvdW50ICs9IHJlaXNlcmZzX2NhY2hlX2RlZmF1bHRfYWNsKGRpcik7CisJcmV0dmFsID0gcmVpc2VyZnNfc2VjdXJpdHlfaW5pdChkaXIsIGlub2RlLCAmc2VjdXJpdHkpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRyb3BfbmV3X2lub2RlKGlub2RlKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJamJlZ2luX2NvdW50ICs9IHJldHZhbDsKIAlyZWlzZXJmc193cml0ZV9sb2NrKGRpci0+aV9zYik7CiAKLQlpZiAobG9ja2VkKQotCQlyZWlzZXJmc193cml0ZV9sb2NrX3hhdHRycyhkaXItPmlfc2IpOwotCiAJcmV0dmFsID0gam91cm5hbF9iZWdpbigmdGgsIGRpci0+aV9zYiwgamJlZ2luX2NvdW50KTsKIAlpZiAocmV0dmFsKSB7CiAJCWRyb3BfbmV3X2lub2RlKGlub2RlKTsKQEAgLTYyMywxNSArNjIyLDEwIEBACiAKIAlyZXR2YWwgPQogCSAgICByZWlzZXJmc19uZXdfaW5vZGUoJnRoLCBkaXIsIG1vZGUsIE5VTEwsIDAgLyppX3NpemUgKi8gLCBkZW50cnksCi0JCQkgICAgICAgaW5vZGUpOworCQkJICAgICAgIGlub2RlLCAmc2VjdXJpdHkpOwogCWlmIChyZXR2YWwpCiAJCWdvdG8gb3V0X2ZhaWxlZDsKIAotCWlmIChsb2NrZWQpIHsKLQkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrX3hhdHRycyhkaXItPmlfc2IpOwotCQlsb2NrZWQgPSAwOwotCX0KLQogCWlub2RlLT5pX29wID0gJnJlaXNlcmZzX2ZpbGVfaW5vZGVfb3BlcmF0aW9uczsKIAlpbm9kZS0+aV9mb3AgPSAmcmVpc2VyZnNfZmlsZV9vcGVyYXRpb25zOwogCWlub2RlLT5pX21hcHBpbmctPmFfb3BzID0gJnJlaXNlcmZzX2FkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9uczsKQEAgLTY1OCw4ICs2NTIsNiBAQAogCXJldHZhbCA9IGpvdXJuYWxfZW5kKCZ0aCwgZGlyLT5pX3NiLCBqYmVnaW5fY291bnQpOwogCiAgICAgICBvdXRfZmFpbGVkOgotCWlmIChsb2NrZWQpCi0JCXJlaXNlcmZzX3dyaXRlX3VubG9ja194YXR0cnMoZGlyLT5pX3NiKTsKIAlyZWlzZXJmc193cml0ZV91bmxvY2soZGlyLT5pX3NiKTsKIAlyZXR1cm4gcmV0dmFsOwogfQpAQCAtNjcwLDEyICs2NjIsMTIgQEAKIAlpbnQgcmV0dmFsOwogCXN0cnVjdCBpbm9kZSAqaW5vZGU7CiAJc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSB0aDsKKwlzdHJ1Y3QgcmVpc2VyZnNfc2VjdXJpdHlfaGFuZGxlIHNlY3VyaXR5OwogCS8qIFdlIG5lZWQgYmxvY2tzIGZvciB0cmFuc2FjdGlvbiArICh1c2VyK2dyb3VwKSoocXVvdGFzIGZvciBuZXcgaW5vZGUgKyB1cGRhdGUgb2YgcXVvdGEgZm9yIGRpcmVjdG9yeSBvd25lcikgKi8KIAlpbnQgamJlZ2luX2NvdW50ID0KIAkgICAgSk9VUk5BTF9QRVJfQkFMQU5DRV9DTlQgKiAzICsKIAkgICAgMiAqIChSRUlTRVJGU19RVU9UQV9JTklUX0JMT0NLUyhkaXItPmlfc2IpICsKIAkJIFJFSVNFUkZTX1FVT1RBX1RSQU5TX0JMT0NLUyhkaXItPmlfc2IpKTsKLQlpbnQgbG9ja2VkOwogCiAJaWYgKCFuZXdfdmFsaWRfZGV2KHJkZXYpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTY4NSwxMyArNjc3LDE1IEBACiAJfQogCW5ld19pbm9kZV9pbml0KGlub2RlLCBkaXIsIG1vZGUpOwogCi0JbG9ja2VkID0gcmVpc2VyZnNfY2FjaGVfZGVmYXVsdF9hY2woZGlyKTsKLQorCWpiZWdpbl9jb3VudCArPSByZWlzZXJmc19jYWNoZV9kZWZhdWx0X2FjbChkaXIpOworCXJldHZhbCA9IHJlaXNlcmZzX3NlY3VyaXR5X2luaXQoZGlyLCBpbm9kZSwgJnNlY3VyaXR5KTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlkcm9wX25ld19pbm9kZShpbm9kZSk7CisJCXJldHVybiByZXR2YWw7CisJfQorCWpiZWdpbl9jb3VudCArPSByZXR2YWw7CiAJcmVpc2VyZnNfd3JpdGVfbG9jayhkaXItPmlfc2IpOwogCi0JaWYgKGxvY2tlZCkKLQkJcmVpc2VyZnNfd3JpdGVfbG9ja194YXR0cnMoZGlyLT5pX3NiKTsKLQogCXJldHZhbCA9IGpvdXJuYWxfYmVnaW4oJnRoLCBkaXItPmlfc2IsIGpiZWdpbl9jb3VudCk7CiAJaWYgKHJldHZhbCkgewogCQlkcm9wX25ld19pbm9kZShpbm9kZSk7CkBAIC03MDAsMTYgKzY5NCwxMSBAQAogCiAJcmV0dmFsID0KIAkgICAgcmVpc2VyZnNfbmV3X2lub2RlKCZ0aCwgZGlyLCBtb2RlLCBOVUxMLCAwIC8qaV9zaXplICovICwgZGVudHJ5LAotCQkJICAgICAgIGlub2RlKTsKKwkJCSAgICAgICBpbm9kZSwgJnNlY3VyaXR5KTsKIAlpZiAocmV0dmFsKSB7CiAJCWdvdG8gb3V0X2ZhaWxlZDsKIAl9CiAKLQlpZiAobG9ja2VkKSB7Ci0JCXJlaXNlcmZzX3dyaXRlX3VubG9ja194YXR0cnMoZGlyLT5pX3NiKTsKLQkJbG9ja2VkID0gMDsKLQl9Ci0KIAlpbm9kZS0+aV9vcCA9ICZyZWlzZXJmc19zcGVjaWFsX2lub2RlX29wZXJhdGlvbnM7CiAJaW5pdF9zcGVjaWFsX2lub2RlKGlub2RlLCBpbm9kZS0+aV9tb2RlLCByZGV2KTsKIApAQCAtNzM5LDggKzcyOCw2IEBACiAJcmV0dmFsID0gam91cm5hbF9lbmQoJnRoLCBkaXItPmlfc2IsIGpiZWdpbl9jb3VudCk7CiAKICAgICAgIG91dF9mYWlsZWQ6Ci0JaWYgKGxvY2tlZCkKLQkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrX3hhdHRycyhkaXItPmlfc2IpOwogCXJlaXNlcmZzX3dyaXRlX3VubG9jayhkaXItPmlfc2IpOwogCXJldHVybiByZXR2YWw7CiB9CkBAIC03NTAsMTIgKzczNywxMiBAQAogCWludCByZXR2YWw7CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlIHRoOworCXN0cnVjdCByZWlzZXJmc19zZWN1cml0eV9oYW5kbGUgc2VjdXJpdHk7CiAJLyogV2UgbmVlZCBibG9ja3MgZm9yIHRyYW5zYWN0aW9uICsgKHVzZXIrZ3JvdXApKihxdW90YXMgZm9yIG5ldyBpbm9kZSArIHVwZGF0ZSBvZiBxdW90YSBmb3IgZGlyZWN0b3J5IG93bmVyKSAqLwogCWludCBqYmVnaW5fY291bnQgPQogCSAgICBKT1VSTkFMX1BFUl9CQUxBTkNFX0NOVCAqIDMgKwogCSAgICAyICogKFJFSVNFUkZTX1FVT1RBX0lOSVRfQkxPQ0tTKGRpci0+aV9zYikgKwogCQkgUkVJU0VSRlNfUVVPVEFfVFJBTlNfQkxPQ0tTKGRpci0+aV9zYikpOwotCWludCBsb2NrZWQ7CiAKICNpZmRlZiBESVNQTEFDRV9ORVdfUEFDS0lOR19MT0NBTElUSUVTCiAJLyogc2V0IGZsYWcgdGhhdCBuZXcgcGFja2luZyBsb2NhbGl0eSBjcmVhdGVkIGFuZCBuZXcgYmxvY2tzIGZvciB0aGUgY29udGVudCAgICAgKiBvZiB0aGF0IGRpcmVjdG9yeSBhcmUgbm90IGRpc3BsYWNlZCB5ZXQgKi8KQEAgLTc2NywxMSArNzU0LDE0IEBACiAJfQogCW5ld19pbm9kZV9pbml0KGlub2RlLCBkaXIsIG1vZGUpOwogCi0JbG9ja2VkID0gcmVpc2VyZnNfY2FjaGVfZGVmYXVsdF9hY2woZGlyKTsKLQorCWpiZWdpbl9jb3VudCArPSByZWlzZXJmc19jYWNoZV9kZWZhdWx0X2FjbChkaXIpOworCXJldHZhbCA9IHJlaXNlcmZzX3NlY3VyaXR5X2luaXQoZGlyLCBpbm9kZSwgJnNlY3VyaXR5KTsKKwlpZiAocmV0dmFsIDwgMCkgeworCQlkcm9wX25ld19pbm9kZShpbm9kZSk7CisJCXJldHVybiByZXR2YWw7CisJfQorCWpiZWdpbl9jb3VudCArPSByZXR2YWw7CiAJcmVpc2VyZnNfd3JpdGVfbG9jayhkaXItPmlfc2IpOwotCWlmIChsb2NrZWQpCi0JCXJlaXNlcmZzX3dyaXRlX2xvY2tfeGF0dHJzKGRpci0+aV9zYik7CiAKIAlyZXR2YWwgPSBqb3VybmFsX2JlZ2luKCZ0aCwgZGlyLT5pX3NiLCBqYmVnaW5fY291bnQpOwogCWlmIChyZXR2YWwpIHsKQEAgLTc4NywxNyArNzc3LDEyIEBACiAJICAgIHJldHZhbCA9IHJlaXNlcmZzX25ld19pbm9kZSgmdGgsIGRpciwgbW9kZSwgTlVMTCAvKnN5bWxpbmsgKi8gLAogCQkJCQlvbGRfZm9ybWF0X29ubHkoZGlyLT5pX3NiKSA/CiAJCQkJCUVNUFRZX0RJUl9TSVpFX1YxIDogRU1QVFlfRElSX1NJWkUsCi0JCQkJCWRlbnRyeSwgaW5vZGUpOworCQkJCQlkZW50cnksIGlub2RlLCAmc2VjdXJpdHkpOwogCWlmIChyZXR2YWwpIHsKIAkJZGlyLT5pX25saW5rLS07CiAJCWdvdG8gb3V0X2ZhaWxlZDsKIAl9CiAKLQlpZiAobG9ja2VkKSB7Ci0JCXJlaXNlcmZzX3dyaXRlX3VubG9ja194YXR0cnMoZGlyLT5pX3NiKTsKLQkJbG9ja2VkID0gMDsKLQl9Ci0KIAlyZWlzZXJmc191cGRhdGVfaW5vZGVfdHJhbnNhY3Rpb24oaW5vZGUpOwogCXJlaXNlcmZzX3VwZGF0ZV9pbm9kZV90cmFuc2FjdGlvbihkaXIpOwogCkBAIC04MjcsOCArODEyLDYgQEAKIAl1bmxvY2tfbmV3X2lub2RlKGlub2RlKTsKIAlyZXR2YWwgPSBqb3VybmFsX2VuZCgmdGgsIGRpci0+aV9zYiwgamJlZ2luX2NvdW50KTsKICAgICAgIG91dF9mYWlsZWQ6Ci0JaWYgKGxvY2tlZCkKLQkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrX3hhdHRycyhkaXItPmlfc2IpOwogCXJlaXNlcmZzX3dyaXRlX3VubG9jayhkaXItPmlfc2IpOwogCXJldHVybiByZXR2YWw7CiB9CkBAIC04MzcsNyArODIwLDcgQEAKIHsKIAkvKiB3ZSBjYW4gY2hlYXQgYmVjYXVzZSBhbiBvbGQgZm9ybWF0IGRpciBjYW5ub3QgaGF2ZQogCSAqKiBFTVBUWV9ESVJfU0laRSwgYW5kIGEgbmV3IGZvcm1hdCBkaXIgY2Fubm90IGhhdmUKLQkgKiogRU1QVFlfRElSX1NJWkVfVjEuICBTbywgaWYgdGhlIGlub2RlIGlzIGVpdGhlciBzaXplLCAKKwkgKiogRU1QVFlfRElSX1NJWkVfVjEuICBTbywgaWYgdGhlIGlub2RlIGlzIGVpdGhlciBzaXplLAogCSAqKiByZWdhcmRsZXNzIG9mIGRpc2sgZm9ybWF0IHZlcnNpb24sIHRoZSBkaXJlY3RvcnkgaXMgZW1wdHkuCiAJICovCiAJaWYgKGlub2RlLT5pX3NpemUgIT0gRU1QVFlfRElSX1NJWkUgJiYKQEAgLTkwMyw4ICs4ODYsOSBAQAogCQlnb3RvIGVuZF9ybWRpcjsKIAogCWlmIChpbm9kZS0+aV9ubGluayAhPSAyICYmIGlub2RlLT5pX25saW5rICE9IDEpCi0JCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICIlczogZW1wdHkgZGlyZWN0b3J5IGhhcyBubGluayAiCi0JCQkJICIhPSAyICglZCkiLCBfX2Z1bmNfXywgaW5vZGUtPmlfbmxpbmspOworCQlyZWlzZXJmc19lcnJvcihpbm9kZS0+aV9zYiwgInJlaXNlcmZzLTcwNDAiLAorCQkJICAgICAgICJlbXB0eSBkaXJlY3RvcnkgaGFzIG5saW5rICE9IDIgKCVkKSIsCisJCQkgICAgICAgaW5vZGUtPmlfbmxpbmspOwogCiAJY2xlYXJfbmxpbmsoaW5vZGUpOwogCWlub2RlLT5pX2N0aW1lID0gZGlyLT5pX2N0aW1lID0gZGlyLT5pX210aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKQEAgLTk4MCwxMCArOTY0LDkgQEAKIAl9CiAKIAlpZiAoIWlub2RlLT5pX25saW5rKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICIlczogZGVsZXRpbmcgbm9uZXhpc3RlbnQgZmlsZSAiCi0JCQkJICIoJXM6JWx1KSwgJWQiLCBfX2Z1bmNfXywKLQkJCQkgcmVpc2VyZnNfYmRldm5hbWUoaW5vZGUtPmlfc2IpLCBpbm9kZS0+aV9pbm8sCi0JCQkJIGlub2RlLT5pX25saW5rKTsKKwkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgInJlaXNlcmZzLTcwNDIiLAorCQkJCSAiZGVsZXRpbmcgbm9uZXhpc3RlbnQgZmlsZSAoJWx1KSwgJWQiLAorCQkJCSBpbm9kZS0+aV9pbm8sIGlub2RlLT5pX25saW5rKTsKIAkJaW5vZGUtPmlfbmxpbmsgPSAxOwogCX0KIApAQCAtMTAzNyw2ICsxMDIwLDcgQEAKIAljaGFyICpuYW1lOwogCWludCBpdGVtX2xlbjsKIAlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlIHRoOworCXN0cnVjdCByZWlzZXJmc19zZWN1cml0eV9oYW5kbGUgc2VjdXJpdHk7CiAJaW50IG1vZGUgPSBTX0lGTE5LIHwgU19JUldYVUdPOwogCS8qIFdlIG5lZWQgYmxvY2tzIGZvciB0cmFuc2FjdGlvbiArICh1c2VyK2dyb3VwKSoocXVvdGFzIGZvciBuZXcgaW5vZGUgKyB1cGRhdGUgb2YgcXVvdGEgZm9yIGRpcmVjdG9yeSBvd25lcikgKi8KIAlpbnQgamJlZ2luX2NvdW50ID0KQEAgLTEwNDksNiArMTAzMywxMyBAQAogCX0KIAluZXdfaW5vZGVfaW5pdChpbm9kZSwgcGFyZW50X2RpciwgbW9kZSk7CiAKKwlyZXR2YWwgPSByZWlzZXJmc19zZWN1cml0eV9pbml0KHBhcmVudF9kaXIsIGlub2RlLCAmc2VjdXJpdHkpOworCWlmIChyZXR2YWwgPCAwKSB7CisJCWRyb3BfbmV3X2lub2RlKGlub2RlKTsKKwkJcmV0dXJuIHJldHZhbDsKKwl9CisJamJlZ2luX2NvdW50ICs9IHJldHZhbDsKKwogCXJlaXNlcmZzX3dyaXRlX2xvY2socGFyZW50X2Rpci0+aV9zYik7CiAJaXRlbV9sZW4gPSBST1VORF9VUChzdHJsZW4oc3ltbmFtZSkpOwogCWlmIChpdGVtX2xlbiA+IE1BWF9ESVJFQ1RfSVRFTV9MRU4ocGFyZW50X2Rpci0+aV9zYi0+c19ibG9ja3NpemUpKSB7CkBAIC0xMDY2LDggKzEwNTcsNiBAQAogCW1lbWNweShuYW1lLCBzeW1uYW1lLCBzdHJsZW4oc3ltbmFtZSkpOwogCXBhZGRfaXRlbShuYW1lLCBpdGVtX2xlbiwgc3RybGVuKHN5bW5hbWUpKTsKIAotCS8qIFdlIHdvdWxkIGluaGVyaXQgdGhlIGRlZmF1bHQgQUNMIGhlcmUsIGJ1dCBzeW1saW5rcyBkb24ndCBnZXQgQUNMcyAqLwotCiAJcmV0dmFsID0gam91cm5hbF9iZWdpbigmdGgsIHBhcmVudF9kaXItPmlfc2IsIGpiZWdpbl9jb3VudCk7CiAJaWYgKHJldHZhbCkgewogCQlkcm9wX25ld19pbm9kZShpbm9kZSk7CkBAIC0xMDc3LDcgKzEwNjYsNyBAQAogCiAJcmV0dmFsID0KIAkgICAgcmVpc2VyZnNfbmV3X2lub2RlKCZ0aCwgcGFyZW50X2RpciwgbW9kZSwgbmFtZSwgc3RybGVuKHN5bW5hbWUpLAotCQkJICAgICAgIGRlbnRyeSwgaW5vZGUpOworCQkJICAgICAgIGRlbnRyeSwgaW5vZGUsICZzZWN1cml0eSk7CiAJa2ZyZWUobmFtZSk7CiAJaWYgKHJldHZhbCkgewkJLyogcmVpc2VyZnNfbmV3X2lub2RlIGlwdXRzIGZvciB1cyAqLwogCQlnb3RvIG91dF9mYWlsZWQ7CkBAIC0xMTczLDcgKzExNjIsNyBAQAogCXJldHVybiByZXR2YWw7CiB9CiAKLS8vIGRlIGNvbnRhaW5zIGluZm9ybWF0aW9uIHBvaW50aW5nIHRvIGFuIGVudHJ5IHdoaWNoIAorLyogZGUgY29udGFpbnMgaW5mb3JtYXRpb24gcG9pbnRpbmcgdG8gYW4gZW50cnkgd2hpY2ggKi8KIHN0YXRpYyBpbnQgZGVfc3RpbGxfdmFsaWQoY29uc3QgY2hhciAqbmFtZSwgaW50IGxlbiwKIAkJCSAgc3RydWN0IHJlaXNlcmZzX2Rpcl9lbnRyeSAqZGUpCiB7CkBAIC0xMTk2LDE1ICsxMTg1LDE0IEBACiAKIAlpZiAoaW5vZGUpIHsKIAkJaWYgKCFkZV92aXNpYmxlKGRlLT5kZV9kZWggKyBkZS0+ZGVfZW50cnlfbnVtKSkKLQkJCXJlaXNlcmZzX3BhbmljKE5VTEwsCi0JCQkJICAgICAgICJ2cy03MDQyOiBlbnRyeV9wb2ludHNfdG9fb2JqZWN0OiBlbnRyeSBtdXN0IGJlIHZpc2libGUiKTsKKwkJCXJlaXNlcmZzX3BhbmljKGlub2RlLT5pX3NiLCAidnMtNzA0MiIsCisJCQkJICAgICAgICJlbnRyeSBtdXN0IGJlIHZpc2libGUiKTsKIAkJcmV0dXJuIChkZS0+ZGVfb2JqZWN0aWQgPT0gaW5vZGUtPmlfaW5vKSA/IDEgOiAwOwogCX0KIAogCS8qIHRoaXMgbXVzdCBiZSBhZGRlZCBoaWRkZW4gZW50cnkgKi8KIAlpZiAoZGVfdmlzaWJsZShkZS0+ZGVfZGVoICsgZGUtPmRlX2VudHJ5X251bSkpCi0JCXJlaXNlcmZzX3BhbmljKE5VTEwsCi0JCQkgICAgICAgInZzLTcwNDM6IGVudHJ5X3BvaW50c190b19vYmplY3Q6IGVudHJ5IG11c3QgYmUgdmlzaWJsZSIpOworCQlyZWlzZXJmc19wYW5pYyhOVUxMLCAidnMtNzA0MyIsICJlbnRyeSBtdXN0IGJlIHZpc2libGUiKTsKIAogCXJldHVybiAxOwogfQpAQCAtMTIxOCwxMCArMTIwNiwxMCBAQAogCWRlLT5kZV9kZWhbZGUtPmRlX2VudHJ5X251bV0uZGVoX29iamVjdGlkID0ga2V5LT5rX29iamVjdGlkOwogfQogCi0vKiAKKy8qCiAgKiBwcm9jZXNzLCB0aGF0IGlzIGdvaW5nIHRvIGNhbGwgZml4X25vZGVzL2RvX2JhbGFuY2UgbXVzdCBob2xkIG9ubHkKICAqIG9uZSBwYXRoLiBJZiBpdCBob2xkcyAyIG9yIG1vcmUsIGl0IGNhbiBnZXQgaW50byBlbmRsZXNzIHdhaXRpbmcgaW4KLSAqIGdldF9lbXB0eV9ub2RlcyBvciBpdHMgY2xvbmVzIAorICogZ2V0X2VtcHR5X25vZGVzIG9yIGl0cyBjbG9uZXMKICAqLwogc3RhdGljIGludCByZWlzZXJmc19yZW5hbWUoc3RydWN0IGlub2RlICpvbGRfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpvbGRfZGVudHJ5LAogCQkJICAgc3RydWN0IGlub2RlICpuZXdfZGlyLCBzdHJ1Y3QgZGVudHJ5ICpuZXdfZGVudHJ5KQpAQCAtMTI3NSw3ICsxMjYzLDcgQEAKIAogCW9sZF9pbm9kZV9tb2RlID0gb2xkX2lub2RlLT5pX21vZGU7CiAJaWYgKFNfSVNESVIob2xkX2lub2RlX21vZGUpKSB7Ci0JCS8vIG1ha2Ugc3VyZSwgdGhhdCBkaXJlY3RvcnkgYmVpbmcgcmVuYW1lZCBoYXMgY29ycmVjdCAiLi4iIAorCQkvLyBtYWtlIHN1cmUsIHRoYXQgZGlyZWN0b3J5IGJlaW5nIHJlbmFtZWQgaGFzIGNvcnJlY3QgIi4uIgogCQkvLyBhbmQgdGhhdCBpdHMgbmV3IHBhcmVudCBkaXJlY3RvcnkgaGFzIG5vdCB0b28gbWFueSBsaW5rcwogCQkvLyBhbHJlYWR5CiAKQEAgLTEyODYsOCArMTI3NCw4IEBACiAJCQl9CiAJCX0KIAotCQkvKiBkaXJlY3RvcnkgaXMgcmVuYW1lZCwgaXRzIHBhcmVudCBkaXJlY3Rvcnkgd2lsbCBiZSBjaGFuZ2VkLCAKLQkJICoqIHNvIGZpbmQgIi4uIiBlbnRyeSAKKwkJLyogZGlyZWN0b3J5IGlzIHJlbmFtZWQsIGl0cyBwYXJlbnQgZGlyZWN0b3J5IHdpbGwgYmUgY2hhbmdlZCwKKwkJICoqIHNvIGZpbmQgIi4uIiBlbnRyeQogCQkgKi8KIAkJZG90X2RvdF9kZS5kZV9nZW5fbnVtYmVyX2JpdF9zdHJpbmcgPSBOVUxMOwogCQlyZXR2YWwgPQpAQCAtMTMxOCw4ICsxMzA2LDggQEAKIAkJCSAgICAgICBuZXdfZGVudHJ5LT5kX25hbWUubGVuLCBvbGRfaW5vZGUsIDApOwogCWlmIChyZXR2YWwgPT0gLUVFWElTVCkgewogCQlpZiAoIW5ld19kZW50cnlfaW5vZGUpIHsKLQkJCXJlaXNlcmZzX3BhbmljKG9sZF9kaXItPmlfc2IsCi0JCQkJICAgICAgICJ2cy03MDUwOiBuZXcgZW50cnkgaXMgZm91bmQsIG5ldyBpbm9kZSA9PSAwXG4iKTsKKwkJCXJlaXNlcmZzX3BhbmljKG9sZF9kaXItPmlfc2IsICJ2cy03MDUwIiwKKwkJCQkgICAgICAgIm5ldyBlbnRyeSBpcyBmb3VuZCwgbmV3IGlub2RlID09IDAiKTsKIAkJfQogCX0gZWxzZSBpZiAocmV0dmFsKSB7CiAJCWludCBlcnIgPSBqb3VybmFsX2VuZCgmdGgsIG9sZF9kaXItPmlfc2IsIGpiZWdpbl9jb3VudCk7CkBAIC0xMzk3LDkgKzEzODUsOSBAQAogCQkgICB0aGlzIHN0dWZmLCB5ZXM/IFRoZW4sIGhhdmluZwogCQkgICBnYXRoZXJlZCBldmVyeXRoaW5nIGludG8gUkFNIHdlCiAJCSAgIHNob3VsZCBsb2NrIHRoZSBidWZmZXJzLCB5ZXM/ICAtSGFucyAqLwotCQkvKiBwcm9iYWJseS4gIG91ciByZW5hbWUgbmVlZHMgdG8gaG9sZCBtb3JlIAotCQkgKiogdGhhbiBvbmUgcGF0aCBhdCBvbmNlLiAgVGhlIHNlYWxzIHdvdWxkIAotCQkgKiogaGF2ZSB0byBiZSB3cml0dGVuIHRvIGRlYWwgd2l0aCBtdWx0aS1wYXRoIAorCQkvKiBwcm9iYWJseS4gIG91ciByZW5hbWUgbmVlZHMgdG8gaG9sZCBtb3JlCisJCSAqKiB0aGFuIG9uZSBwYXRoIGF0IG9uY2UuICBUaGUgc2VhbHMgd291bGQKKwkJICoqIGhhdmUgdG8gYmUgd3JpdHRlbiB0byBkZWFsIHdpdGggbXVsdGktcGF0aAogCQkgKiogaXNzdWVzIC1jaHJpcwogCQkgKi8KIAkJLyogc2FuaXR5IGNoZWNraW5nIGJlZm9yZSBkb2luZyB0aGUgcmVuYW1lIC0gYXZvaWQgcmFjZXMgbWFueQpAQCAtMTQ3Nyw3ICsxNDY1LDcgQEAKIAl9CiAKIAlpZiAoU19JU0RJUihvbGRfaW5vZGVfbW9kZSkpIHsKLQkJLy8gYWRqdXN0ICIuLiIgb2YgcmVuYW1lZCBkaXJlY3RvcnkgCisJCS8qIGFkanVzdCAiLi4iIG9mIHJlbmFtZWQgZGlyZWN0b3J5ICovCiAJCXNldF9pbm9faW5fZGlyX2VudHJ5KCZkb3RfZG90X2RlLCBJTk9ERV9QS0VZKG5ld19kaXIpKTsKIAkJam91cm5hbF9tYXJrX2RpcnR5KCZ0aCwgbmV3X2Rpci0+aV9zYiwgZG90X2RvdF9kZS5kZV9iaCk7CiAKQEAgLTE0OTksOCArMTQ4Nyw4IEBACiAJaWYgKHJlaXNlcmZzX2N1dF9mcm9tX2l0ZW0KIAkgICAgKCZ0aCwgJm9sZF9lbnRyeV9wYXRoLCAmKG9sZF9kZS5kZV9lbnRyeV9rZXkpLCBvbGRfZGlyLCBOVUxMLAogCSAgICAgMCkgPCAwKQotCQlyZWlzZXJmc193YXJuaW5nKG9sZF9kaXItPmlfc2IsCi0JCQkJICJ2cy03MDYwOiByZWlzZXJmc19yZW5hbWU6IGNvdWxkbid0IG5vdCBjdXQgb2xkIG5hbWUuIEZzY2sgbGF0ZXI/Iik7CisJCXJlaXNlcmZzX2Vycm9yKG9sZF9kaXItPmlfc2IsICJ2cy03MDYwIiwKKwkJCSAgICAgICAiY291bGRuJ3Qgbm90IGN1dCBvbGQgbmFtZS4gRnNjayBsYXRlcj8iKTsKIAogCW9sZF9kaXItPmlfc2l6ZSAtPSBERUhfU0laRSArIG9sZF9kZS5kZV9lbnRyeWxlbjsKIApkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvb2JqZWN0aWQuYyBiL2ZzL3JlaXNlcmZzL29iamVjdGlkLmMKaW5kZXggZWEwY2Y4Yy4uM2E2ZGU4MSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvb2JqZWN0aWQuYworKysgYi9mcy9yZWlzZXJmcy9vYmplY3RpZC5jCkBAIC0xOCw4ICsxOCw3IEBACiBzdGF0aWMgdm9pZCBjaGVja19vYmplY3RpZF9tYXAoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBfX2xlMzIgKiBtYXApCiB7CiAJaWYgKGxlMzJfdG9fY3B1KG1hcFswXSkgIT0gMSkKLQkJcmVpc2VyZnNfcGFuaWMocywKLQkJCSAgICAgICAidnMtMTUwMTA6IGNoZWNrX29iamVjdGlkX21hcDogbWFwIGNvcnJ1cHRlZDogJWx4IiwKKwkJcmVpc2VyZnNfcGFuaWMocywgInZzLTE1MDEwIiwgIm1hcCBjb3JydXB0ZWQ6ICVseCIsCiAJCQkgICAgICAgKGxvbmcgdW5zaWduZWQgaW50KWxlMzJfdG9fY3B1KG1hcFswXSkpOwogCiAJLy8gRklYTUU6IGFkZCBzb21ldGhpbmcgZWxzZSBoZXJlCkBAIC02MSw3ICs2MCw3IEBACiAJLyogY29tbWVudCBuZWVkZWQgLUhhbnMgKi8KIAl1bnVzZWRfb2JqZWN0aWQgPSBsZTMyX3RvX2NwdShtYXBbMV0pOwogCWlmICh1bnVzZWRfb2JqZWN0aWQgPT0gVTMyX01BWCkgewotCQlyZWlzZXJmc193YXJuaW5nKHMsICIlczogbm8gbW9yZSBvYmplY3QgaWRzIiwgX19mdW5jX18pOworCQlyZWlzZXJmc193YXJuaW5nKHMsICJyZWlzZXJmcy0xNTEwMCIsICJubyBtb3JlIG9iamVjdCBpZHMiKTsKIAkJcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIocywgU0JfQlVGRkVSX1dJVEhfU0IocykpOwogCQlyZXR1cm4gMDsKIAl9CkBAIC0xNjAsOSArMTU5LDggQEAKIAkJaSArPSAyOwogCX0KIAotCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCSAidnMtMTUwMTE6IHJlaXNlcmZzX3JlbGVhc2Vfb2JqZWN0aWQ6IHRyaWVkIHRvIGZyZWUgZnJlZSBvYmplY3QgaWQgKCVsdSkiLAotCQkJIChsb25nIHVuc2lnbmVkKW9iamVjdGlkX3RvX3JlbGVhc2UpOworCXJlaXNlcmZzX2Vycm9yKHMsICJ2cy0xNTAxMSIsICJ0cmllZCB0byBmcmVlIGZyZWUgb2JqZWN0IGlkICglbHUpIiwKKwkJICAgICAgIChsb25nIHVuc2lnbmVkKW9iamVjdGlkX3RvX3JlbGVhc2UpOwogfQogCiBpbnQgcmVpc2VyZnNfY29udmVydF9vYmplY3RpZF9tYXBfdjEoc3RydWN0IHN1cGVyX2Jsb2NrICpzKQpAQCAtMTgyLDcgKzE4MCw3IEBACiAKIAlpZiAoY3VyX3NpemUgPiBuZXdfc2l6ZSkgewogCQkvKiBtYXJrIGV2ZXJ5b25lIHVzZWQgdGhhdCB3YXMgbGlzdGVkIGFzIGZyZWUgYXQgdGhlIGVuZCBvZiB0aGUgb2JqZWN0aWQKLQkJICoqIG1hcCAKKwkJICoqIG1hcAogCQkgKi8KIAkJb2JqZWN0aWRfbWFwW25ld19zaXplIC0gMV0gPSBvYmplY3RpZF9tYXBbY3VyX3NpemUgLSAxXTsKIAkJc2V0X3NiX29pZF9jdXJzaXplKGRpc2tfc2IsIG5ld19zaXplKTsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3ByaW50cy5jIGIvZnMvcmVpc2VyZnMvcHJpbnRzLmMKaW5kZXggNzQwYmI4Yy4uNTM2ZWFjYSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvcHJpbnRzLmMKKysrIGIvZnMvcmVpc2VyZnMvcHJpbnRzLmMKQEAgLTE1NywxOSArMTU3LDE2IEBACiAJCWRjX3NpemUoZGMpKTsKIH0KIAotc3RhdGljIGNoYXIgKmlzX3RoZXJlX3JlaXNlcmZzX3N0cnVjdChjaGFyICpmbXQsIGludCAqd2hhdCwgaW50ICpza2lwKQorc3RhdGljIGNoYXIgKmlzX3RoZXJlX3JlaXNlcmZzX3N0cnVjdChjaGFyICpmbXQsIGludCAqd2hhdCkKIHsKIAljaGFyICprID0gZm10OwogCi0JKnNraXAgPSAwOwotCiAJd2hpbGUgKChrID0gc3RyY2hyKGssICclJykpICE9IE5VTEwpIHsKIAkJaWYgKGtbMV0gPT0gJ2snIHx8IGtbMV0gPT0gJ0snIHx8IGtbMV0gPT0gJ2gnIHx8IGtbMV0gPT0gJ3QnIHx8CiAJCSAgICBrWzFdID09ICd6JyB8fCBrWzFdID09ICdiJyB8fCBrWzFdID09ICd5JyB8fCBrWzFdID09ICdhJykgewogCQkJKndoYXQgPSBrWzFdOwogCQkJYnJlYWs7CiAJCX0KLQkJKCpza2lwKSsrOwogCQlrKys7CiAJfQogCXJldHVybiBrOwpAQCAtMTgxLDMwICsxNzgsMjkgQEAKICAgIGFwcHJvcHJpYXRpdmUgcHJpbnRrLiBXaXRoIHRoaXMgcmVpc2VyZnNfd2FybmluZyB5b3UgY2FuIHVzZSBmb3JtYXQKICAgIHNwZWNpZmljYXRpb24gZm9yIGNvbXBsZXggc3RydWN0dXJlcyBsaWtlIHlvdSB1c2VkIHRvIGRvIHdpdGgKICAgIHByaW50ZnMgZm9yIGludGVnZXJzLCBkb3VibGVzIGFuZCBwb2ludGVycy4gRm9yIGluc3RhbmNlLCB0byBwcmludAotICAgb3V0IGtleSBzdHJ1Y3R1cmUgeW91IGhhdmUgdG8gd3JpdGUganVzdDogCi0gICByZWlzZXJmc193YXJuaW5nICgiYmFkIGtleSAlayIsIGtleSk7IAotICAgaW5zdGVhZCBvZiAKLSAgIHByaW50ayAoImJhZCBrZXkgJWx1ICVsdSAlbHUgJWx1Iiwga2V5LT5rX2Rpcl9pZCwga2V5LT5rX29iamVjdGlkLCAKLSAgICAgICAgICAga2V5LT5rX29mZnNldCwga2V5LT5rX3VuaXF1ZW5lc3MpOyAKKyAgIG91dCBrZXkgc3RydWN0dXJlIHlvdSBoYXZlIHRvIHdyaXRlIGp1c3Q6CisgICByZWlzZXJmc193YXJuaW5nICgiYmFkIGtleSAlayIsIGtleSk7CisgICBpbnN0ZWFkIG9mCisgICBwcmludGsgKCJiYWQga2V5ICVsdSAlbHUgJWx1ICVsdSIsIGtleS0+a19kaXJfaWQsIGtleS0+a19vYmplY3RpZCwKKyAgICAgICAgICAga2V5LT5rX29mZnNldCwga2V5LT5rX3VuaXF1ZW5lc3MpOwogKi8KLQorc3RhdGljIERFRklORV9TUElOTE9DSyhlcnJvcl9sb2NrKTsKIHN0YXRpYyB2b2lkIHByZXBhcmVfZXJyb3JfYnVmKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKQogewogCWNoYXIgKmZtdDEgPSBmbXRfYnVmOwogCWNoYXIgKms7CiAJY2hhciAqcCA9IGVycm9yX2J1ZjsKLQlpbnQgaSwgaiwgd2hhdCwgc2tpcDsKKwlpbnQgd2hhdDsKKworCXNwaW5fbG9jaygmZXJyb3JfbG9jayk7CiAKIAlzdHJjcHkoZm10MSwgZm10KTsKIAotCXdoaWxlICgoayA9IGlzX3RoZXJlX3JlaXNlcmZzX3N0cnVjdChmbXQxLCAmd2hhdCwgJnNraXApKSAhPSBOVUxMKSB7CisJd2hpbGUgKChrID0gaXNfdGhlcmVfcmVpc2VyZnNfc3RydWN0KGZtdDEsICZ3aGF0KSkgIT0gTlVMTCkgewogCQkqayA9IDA7CiAKIAkJcCArPSB2c3ByaW50ZihwLCBmbXQxLCBhcmdzKTsKIAotCQlmb3IgKGkgPSAwOyBpIDwgc2tpcDsgaSsrKQotCQkJaiA9IHZhX2FyZyhhcmdzLCBpbnQpOwotCiAJCXN3aXRjaCAod2hhdCkgewogCQljYXNlICdrJzoKIAkJCXNwcmludGZfbGVfa2V5KHAsIHZhX2FyZyhhcmdzLCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICopKTsKQEAgLTI0MywxNSArMjM5LDE2IEBACiAJCWZtdDEgPSBrICsgMjsKIAl9CiAJdnNwcmludGYocCwgZm10MSwgYXJncyk7CisJc3Bpbl91bmxvY2soJmVycm9yX2xvY2spOwogCiB9CiAKIC8qIGluIGFkZGl0aW9uIHRvIHVzdWFsIGNvbnZlcnNpb24gc3BlY2lmaWVycyB0aGlzIGFjY2VwdHMgcmVpc2VyZnMKLSAgIHNwZWNpZmljIGNvbnZlcnNpb24gc3BlY2lmaWVyczogCi0gICAlayB0byBwcmludCBsaXR0bGUgZW5kaWFuIGtleSwgCi0gICAlSyB0byBwcmludCBjcHUga2V5LCAKKyAgIHNwZWNpZmljIGNvbnZlcnNpb24gc3BlY2lmaWVyczoKKyAgICVrIHRvIHByaW50IGxpdHRsZSBlbmRpYW4ga2V5LAorICAgJUsgdG8gcHJpbnQgY3B1IGtleSwKICAgICVoIHRvIHByaW50IGl0ZW1faGVhZCwKLSAgICV0IHRvIHByaW50IGRpcmVjdG9yeSBlbnRyeSAKKyAgICV0IHRvIHByaW50IGRpcmVjdG9yeSBlbnRyeQogICAgJXogdG8gcHJpbnQgYmxvY2sgaGVhZCAoYXJnIG11c3QgYmUgc3RydWN0IGJ1ZmZlcl9oZWFkICoKICAgICViIHRvIHByaW50IGJ1ZmZlcl9oZWFkCiAqLwpAQCAtMjY0LDE0ICsyNjEsMTcgQEAKICAgICB2YV9lbmQoIGFyZ3MgKTtcCiB9CiAKLXZvaWQgcmVpc2VyZnNfd2FybmluZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3ZvaWQgX19yZWlzZXJmc193YXJuaW5nKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoYXIgKmlkLAorCQkJIGNvbnN0IGNoYXIgKmZ1bmN0aW9uLCBjb25zdCBjaGFyICpmbXQsIC4uLikKIHsKIAlkb19yZWlzZXJmc193YXJuaW5nKGZtdCk7CiAJaWYgKHNiKQotCQlwcmludGsoS0VSTl9XQVJOSU5HICJSZWlzZXJGUzogJXM6IHdhcm5pbmc6ICVzXG4iLAotCQkgICAgICAgcmVpc2VyZnNfYmRldm5hbWUoc2IpLCBlcnJvcl9idWYpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRUlTRVJGUyB3YXJuaW5nIChkZXZpY2UgJXMpOiAlcyVzJXM6ICIKKwkJICAgICAgICIlc1xuIiwgc2ItPnNfaWQsIGlkID8gaWQgOiAiIiwgaWQgPyAiICIgOiAiIiwKKwkJICAgICAgIGZ1bmN0aW9uLCBlcnJvcl9idWYpOwogCWVsc2UKLQkJcHJpbnRrKEtFUk5fV0FSTklORyAiUmVpc2VyRlM6IHdhcm5pbmc6ICVzXG4iLCBlcnJvcl9idWYpOworCQlwcmludGsoS0VSTl9XQVJOSU5HICJSRUlTRVJGUyB3YXJuaW5nOiAlcyVzJXM6ICVzXG4iLAorCQkgICAgICAgaWQgPyBpZCA6ICIiLCBpZCA/ICIgIiA6ICIiLCBmdW5jdGlvbiwgZXJyb3JfYnVmKTsKIH0KIAogLyogTm8gbmV3bGluZS4uIHJlaXNlcmZzX2luZm8gY2FsbHMgY2FuIGJlIGZvbGxvd2VkIGJ5IHByaW50aydzICovCkBAIC0yNzksMTAgKzI3OSwxMCBAQAogewogCWRvX3JlaXNlcmZzX3dhcm5pbmcoZm10KTsKIAlpZiAoc2IpCi0JCXByaW50ayhLRVJOX05PVElDRSAiUmVpc2VyRlM6ICVzOiAlcyIsCi0JCSAgICAgICByZWlzZXJmc19iZGV2bmFtZShzYiksIGVycm9yX2J1Zik7CisJCXByaW50ayhLRVJOX05PVElDRSAiUkVJU0VSRlMgKGRldmljZSAlcyk6ICVzIiwKKwkJICAgICAgIHNiLT5zX2lkLCBlcnJvcl9idWYpOwogCWVsc2UKLQkJcHJpbnRrKEtFUk5fTk9USUNFICJSZWlzZXJGUzogJXMiLCBlcnJvcl9idWYpOworCQlwcmludGsoS0VSTl9OT1RJQ0UgIlJFSVNFUkZTICVzOiIsIGVycm9yX2J1Zik7CiB9CiAKIC8qIE5vIG5ld2xpbmUuLiByZWlzZXJmc19wcmludGsgY2FsbHMgY2FuIGJlIGZvbGxvd2VkIGJ5IHByaW50aydzICovCkBAIC0yOTcsMTAgKzI5NywxMCBAQAogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwogCWRvX3JlaXNlcmZzX3dhcm5pbmcoZm10KTsKIAlpZiAocykKLQkJcHJpbnRrKEtFUk5fREVCVUcgIlJlaXNlckZTOiAlczogJXNcbiIsCi0JCSAgICAgICByZWlzZXJmc19iZGV2bmFtZShzKSwgZXJyb3JfYnVmKTsKKwkJcHJpbnRrKEtFUk5fREVCVUcgIlJFSVNFUkZTIGRlYnVnIChkZXZpY2UgJXMpOiAlc1xuIiwKKwkJICAgICAgIHMtPnNfaWQsIGVycm9yX2J1Zik7CiAJZWxzZQotCQlwcmludGsoS0VSTl9ERUJVRyAiUmVpc2VyRlM6ICVzXG4iLCBlcnJvcl9idWYpOworCQlwcmludGsoS0VSTl9ERUJVRyAiUkVJU0VSRlMgZGVidWc6ICVzXG4iLCBlcnJvcl9idWYpOwogI2VuZGlmCiB9CiAKQEAgLTMxNCwxNyArMzE0LDE3IEBACiAgICAgbWFpbnRhaW5lci1lcnJvcmlkLiAgRG9uJ3QgYm90aGVyIHdpdGggcmV1c2luZyBlcnJvcmlkcywgdGhlcmUgYXJlCiAgICAgbG90cyBvZiBudW1iZXJzIG91dCB0aGVyZS4KIAotICAgIEV4YW1wbGU6IAotICAgIAorICAgIEV4YW1wbGU6CisKICAgICByZWlzZXJmc19wYW5pYygKIAlwX3NiLCAicmVpc2VyLTI5OiByZWlzZXJmc19uZXdfYmxvY2tucnM6ICIKIAkib25lIG9mIHNlYXJjaF9zdGFydCBvciBybiglZCkgaXMgZXF1YWwgdG8gTUFYX0JfTlVNLCIKLQkid2hpY2ggbWVhbnMgdGhhdCB3ZSBhcmUgb3B0aW1pemluZyBsb2NhdGlvbiBiYXNlZCBvbiB0aGUgYm9ndXMgbG9jYXRpb24gb2YgYSB0ZW1wIGJ1ZmZlciAoJXApLiIsIAorCSJ3aGljaCBtZWFucyB0aGF0IHdlIGFyZSBvcHRpbWl6aW5nIGxvY2F0aW9uIGJhc2VkIG9uIHRoZSBib2d1cyBsb2NhdGlvbiBvZiBhIHRlbXAgYnVmZmVyICglcCkuIiwKIAlybiwgYmgKICAgICApOwogCiAgICAgUmVndWxhciBwYW5pYygpcyBzb21ldGltZXMgY2xlYXIgdGhlIHNjcmVlbiBiZWZvcmUgdGhlIG1lc3NhZ2UgY2FuCi0gICAgYmUgcmVhZCwgdGh1cyB0aGUgbmVlZCBmb3IgdGhlIHdoaWxlIGxvb3AuICAKKyAgICBiZSByZWFkLCB0aHVzIHRoZSBuZWVkIGZvciB0aGUgd2hpbGUgbG9vcC4KIAogICAgIE51bWJlcmluZyBzY2hlbWUgZm9yIHBhbmljIHVzZWQgYnkgVmxhZGltaXIgYW5kIEFuYXRvbHkoIEhhbnMgY29tcGxldGVseSBpZ25vcmVzIHRoaXMgc2NoZW1lLCBhbmQgY29uc2lkZXJzIGl0CiAgICAgcG9pbnRsZXNzIGNvbXBsZXhpdHkpOgpAQCAtMzUzLDE0ICszNTMsNDYgQEAKIGV4dGVybiBzdHJ1Y3QgdHJlZV9iYWxhbmNlICpjdXJfdGI7CiAjZW5kaWYKIAotdm9pZCByZWlzZXJmc19wYW5pYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3ZvaWQgX19yZWlzZXJmc19wYW5pYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaGFyICppZCwKKwkJICAgICAgY29uc3QgY2hhciAqZnVuY3Rpb24sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKQogewogCWRvX3JlaXNlcmZzX3dhcm5pbmcoZm10KTsKIAorI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwogCWR1bXBfc3RhY2soKTsKKyNlbmRpZgorCWlmIChzYikKKwkJcGFuaWMoS0VSTl9XQVJOSU5HICJSRUlTRVJGUyBwYW5pYyAoZGV2aWNlICVzKTogJXMlcyVzOiAlc1xuIiwKKwkJICAgICAgc2ItPnNfaWQsIGlkID8gaWQgOiAiIiwgaWQgPyAiICIgOiAiIiwKKwkJICAgICAgZnVuY3Rpb24sIGVycm9yX2J1Zik7CisJZWxzZQorCQlwYW5pYyhLRVJOX1dBUk5JTkcgIlJFSVNFUkZTIHBhbmljOiAlcyVzJXM6ICVzXG4iLAorCQkgICAgICBpZCA/IGlkIDogIiIsIGlkID8gIiAiIDogIiIsIGZ1bmN0aW9uLCBlcnJvcl9idWYpOworfQogCi0JcGFuaWMoS0VSTl9FTUVSRyAiUkVJU0VSRlM6IHBhbmljIChkZXZpY2UgJXMpOiAlc1xuIiwKLQkgICAgICAgcmVpc2VyZnNfYmRldm5hbWUoc2IpLCBlcnJvcl9idWYpOwordm9pZCBfX3JlaXNlcmZzX2Vycm9yKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoYXIgKmlkLAorCQkgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbiwgY29uc3QgY2hhciAqZm10LCAuLi4pCit7CisJZG9fcmVpc2VyZnNfd2FybmluZyhmbXQpOworCisJQlVHX09OKHNiID09IE5VTEwpOworCisJaWYgKHJlaXNlcmZzX2Vycm9yX3BhbmljKHNiKSkKKwkJX19yZWlzZXJmc19wYW5pYyhzYiwgaWQsIGZ1bmN0aW9uLCBlcnJvcl9idWYpOworCisJaWYgKGlkICYmIGlkWzBdKQorCQlwcmludGsoS0VSTl9DUklUICJSRUlTRVJGUyBlcnJvciAoZGV2aWNlICVzKTogJXMgJXM6ICVzXG4iLAorCQkgICAgICAgc2ItPnNfaWQsIGlkLCBmdW5jdGlvbiwgZXJyb3JfYnVmKTsKKwllbHNlCisJCXByaW50ayhLRVJOX0NSSVQgIlJFSVNFUkZTIGVycm9yIChkZXZpY2UgJXMpOiAlczogJXNcbiIsCisJCSAgICAgICBzYi0+c19pZCwgZnVuY3Rpb24sIGVycm9yX2J1Zik7CisKKwlpZiAoc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpCisJCXJldHVybjsKKworCXJlaXNlcmZzX2luZm8oc2IsICJSZW1vdW50aW5nIGZpbGVzeXN0ZW0gcmVhZC1vbmx5XG4iKTsKKwlzYi0+c19mbGFncyB8PSBNU19SRE9OTFk7CisJcmVpc2VyZnNfYWJvcnRfam91cm5hbChzYiwgLUVJTyk7CiB9CiAKIHZvaWQgcmVpc2VyZnNfYWJvcnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGVycm5vLCBjb25zdCBjaGFyICpmbXQsIC4uLikKQEAgLTM2OCwxOCArNDAwLDE4IEBACiAJZG9fcmVpc2VyZnNfd2FybmluZyhmbXQpOwogCiAJaWYgKHJlaXNlcmZzX2Vycm9yX3BhbmljKHNiKSkgewotCQlwYW5pYyhLRVJOX0NSSVQgIlJFSVNFUkZTOiBwYW5pYyAoZGV2aWNlICVzKTogJXNcbiIsCi0JCSAgICAgIHJlaXNlcmZzX2JkZXZuYW1lKHNiKSwgZXJyb3JfYnVmKTsKKwkJcGFuaWMoS0VSTl9DUklUICJSRUlTRVJGUyBwYW5pYyAoZGV2aWNlICVzKTogJXNcbiIsIHNiLT5zX2lkLAorCQkgICAgICBlcnJvcl9idWYpOwogCX0KIAotCWlmIChzYi0+c19mbGFncyAmIE1TX1JET05MWSkKKwlpZiAocmVpc2VyZnNfaXNfam91cm5hbF9hYm9ydGVkKFNCX0pPVVJOQUwoc2IpKSkKIAkJcmV0dXJuOwogCi0JcHJpbnRrKEtFUk5fQ1JJVCAiUkVJU0VSRlM6IGFib3J0IChkZXZpY2UgJXMpOiAlc1xuIiwKLQkgICAgICAgcmVpc2VyZnNfYmRldm5hbWUoc2IpLCBlcnJvcl9idWYpOworCXByaW50ayhLRVJOX0NSSVQgIlJFSVNFUkZTIGFib3J0IChkZXZpY2UgJXMpOiAlc1xuIiwgc2ItPnNfaWQsCisJICAgICAgIGVycm9yX2J1Zik7CiAKIAlzYi0+c19mbGFncyB8PSBNU19SRE9OTFk7Ci0JcmVpc2VyZnNfam91cm5hbF9hYm9ydChzYiwgZXJybm8pOworCXJlaXNlcmZzX2Fib3J0X2pvdXJuYWwoc2IsIGVycm5vKTsKIH0KIAogLyogdGhpcyBwcmludHMgaW50ZXJuYWwgbm9kZXMgKDQga2V5cy9pdGVtcyBpbiBsaW5lKSAoZGNfbnVtYmVyLApAQCAtNjgxLDEyICs3MTMsMTAgQEAKIAlibGtoID0gQl9CTEtfSEVBRChiaCk7CiAJbnIgPSBibGtoX25yX2l0ZW0oYmxraCk7CiAJaWYgKG5yID4gKGJoLT5iX3NpemUgLSBCTEtIX1NJWkUpIC8gSUhfU0laRSkKLQkJcmVpc2VyZnNfcGFuaWMoTlVMTCwKLQkJCSAgICAgICAidnMtNjAxMDogY2hlY2tfbGVhZl9ibG9ja19oZWFkOiBpbnZhbGlkIGl0ZW0gbnVtYmVyICV6IiwKKwkJcmVpc2VyZnNfcGFuaWMoTlVMTCwgInZzLTYwMTAiLCAiaW52YWxpZCBpdGVtIG51bWJlciAleiIsCiAJCQkgICAgICAgYmgpOwogCWlmIChibGtoX2ZyZWVfc3BhY2UoYmxraCkgPiBiaC0+Yl9zaXplIC0gQkxLSF9TSVpFIC0gSUhfU0laRSAqIG5yKQotCQlyZWlzZXJmc19wYW5pYyhOVUxMLAotCQkJICAgICAgICJ2cy02MDIwOiBjaGVja19sZWFmX2Jsb2NrX2hlYWQ6IGludmFsaWQgZnJlZSBzcGFjZSAleiIsCisJCXJlaXNlcmZzX3BhbmljKE5VTEwsICJ2cy02MDIwIiwgImludmFsaWQgZnJlZSBzcGFjZSAleiIsCiAJCQkgICAgICAgYmgpOwogCiB9CkBAIC02OTcsMjEgKzcyNywxNSBAQAogCiAJYmxraCA9IEJfQkxLX0hFQUQoYmgpOwogCWlmICghKEJfTEVWRUwoYmgpID4gRElTS19MRUFGX05PREVfTEVWRUwgJiYgQl9MRVZFTChiaCkgPD0gTUFYX0hFSUdIVCkpCi0JCXJlaXNlcmZzX3BhbmljKE5VTEwsCi0JCQkgICAgICAgInZzLTYwMjU6IGNoZWNrX2ludGVybmFsX2Jsb2NrX2hlYWQ6IGludmFsaWQgbGV2ZWwgJXoiLAotCQkJICAgICAgIGJoKTsKKwkJcmVpc2VyZnNfcGFuaWMoTlVMTCwgInZzLTYwMjUiLCAiaW52YWxpZCBsZXZlbCAleiIsIGJoKTsKIAogCWlmIChCX05SX0lURU1TKGJoKSA+IChiaC0+Yl9zaXplIC0gQkxLSF9TSVpFKSAvIElIX1NJWkUpCi0JCXJlaXNlcmZzX3BhbmljKE5VTEwsCi0JCQkgICAgICAgInZzLTYwMzA6IGNoZWNrX2ludGVybmFsX2Jsb2NrX2hlYWQ6IGludmFsaWQgaXRlbSBudW1iZXIgJXoiLAotCQkJICAgICAgIGJoKTsKKwkJcmVpc2VyZnNfcGFuaWMoTlVMTCwgInZzLTYwMzAiLCAiaW52YWxpZCBpdGVtIG51bWJlciAleiIsIGJoKTsKIAogCWlmIChCX0ZSRUVfU1BBQ0UoYmgpICE9CiAJICAgIGJoLT5iX3NpemUgLSBCTEtIX1NJWkUgLSBLRVlfU0laRSAqIEJfTlJfSVRFTVMoYmgpIC0KIAkgICAgRENfU0laRSAqIChCX05SX0lURU1TKGJoKSArIDEpKQotCQlyZWlzZXJmc19wYW5pYyhOVUxMLAotCQkJICAgICAgICJ2cy02MDQwOiBjaGVja19pbnRlcm5hbF9ibG9ja19oZWFkOiBpbnZhbGlkIGZyZWUgc3BhY2UgJXoiLAotCQkJICAgICAgIGJoKTsKKwkJcmVpc2VyZnNfcGFuaWMoTlVMTCwgInZzLTYwNDAiLCAiaW52YWxpZCBmcmVlIHNwYWNlICV6IiwgYmgpOwogCiB9CiAKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3Byb2Nmcy5jIGIvZnMvcmVpc2VyZnMvcHJvY2ZzLmMKaW5kZXggMzcxNzNmYS4uOTIyOWU1NSAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvcHJvY2ZzLmMKKysrIGIvZnMvcmVpc2VyZnMvcHJvY2ZzLmMKQEAgLTMyMSw3ICszMjEsNyBAQAogCQkgICAvKiBpbmNvcmUgZmllbGRzICovCiAJCSAgICJqXzFzdF9yZXNlcnZlZF9ibG9jazogXHQlaVxuIgogCQkgICAial9zdGF0ZTogXHQlbGlcbiIKLQkJICAgImpfdHJhbnNfaWQ6IFx0JWx1XG4iCisJCSAgICJqX3RyYW5zX2lkOiBcdCV1XG4iCiAJCSAgICJqX21vdW50X2lkOiBcdCVsdVxuIgogCQkgICAial9zdGFydDogXHQlbHVcbiIKIAkJICAgImpfbGVuOiBcdCVsdVxuIgpAQCAtMzI5LDcgKzMyOSw3IEBACiAJCSAgICJqX3djb3VudDogXHQlaVxuIgogCQkgICAial9iY291bnQ6IFx0JWx1XG4iCiAJCSAgICJqX2ZpcnN0X3VuZmx1c2hlZF9vZmZzZXQ6IFx0JWx1XG4iCi0JCSAgICJqX2xhc3RfZmx1c2hfdHJhbnNfaWQ6IFx0JWx1XG4iCisJCSAgICJqX2xhc3RfZmx1c2hfdHJhbnNfaWQ6IFx0JXVcbiIKIAkJICAgImpfdHJhbnNfc3RhcnRfdGltZTogXHQlbGlcbiIKIAkJICAgImpfbGlzdF9iaXRtYXBfaW5kZXg6IFx0JWlcbiIKIAkJICAgImpfbXVzdF93YWl0OiBcdCVpXG4iCkBAIC00OTIsNyArNDkyLDYgQEAKIAlzcGluX2xvY2tfaW5pdCgmX19QSU5GTyhzYikubG9jayk7CiAJUkVJU0VSRlNfU0Ioc2IpLT5wcm9jZGlyID0gcHJvY19ta2RpcihiLCBwcm9jX2luZm9fcm9vdCk7CiAJaWYgKFJFSVNFUkZTX1NCKHNiKS0+cHJvY2RpcikgewotCQlSRUlTRVJGU19TQihzYiktPnByb2NkaXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAJCVJFSVNFUkZTX1NCKHNiKS0+cHJvY2Rpci0+ZGF0YSA9IHNiOwogCQlhZGRfZmlsZShzYiwgInZlcnNpb24iLCBzaG93X3ZlcnNpb24pOwogCQlhZGRfZmlsZShzYiwgInN1cGVyIiwgc2hvd19zdXBlcik7CkBAIC01MDMsNyArNTAyLDcgQEAKIAkJYWRkX2ZpbGUoc2IsICJqb3VybmFsIiwgc2hvd19qb3VybmFsKTsKIAkJcmV0dXJuIDA7CiAJfQotCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJyZWlzZXJmczogY2Fubm90IGNyZWF0ZSAvcHJvYy8lcy8lcyIsCisJcmVpc2VyZnNfd2FybmluZyhzYiwgImNhbm5vdCBjcmVhdGUgL3Byb2MvJXMvJXMiLAogCQkJIHByb2NfaW5mb19yb290X25hbWUsIGIpOwogCXJldHVybiAxOwogfQpAQCAtNTU2LDExICs1NTUsOCBAQAogewogCWlmIChwcm9jX2luZm9fcm9vdCA9PSBOVUxMKSB7CiAJCXByb2NfaW5mb19yb290ID0gcHJvY19ta2Rpcihwcm9jX2luZm9fcm9vdF9uYW1lLCBOVUxMKTsKLQkJaWYgKHByb2NfaW5mb19yb290KSB7Ci0JCQlwcm9jX2luZm9fcm9vdC0+b3duZXIgPSBUSElTX01PRFVMRTsKLQkJfSBlbHNlIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCQkJICJyZWlzZXJmczogY2Fubm90IGNyZWF0ZSAvcHJvYy8lcyIsCisJCWlmICghcHJvY19pbmZvX3Jvb3QpIHsKKwkJCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgImNhbm5vdCBjcmVhdGUgL3Byb2MvJXMiLAogCQkJCQkgcHJvY19pbmZvX3Jvb3RfbmFtZSk7CiAJCQlyZXR1cm4gMTsKIAkJfQpAQCAtNjM0LDcgKzYzMCw3IEBACiAgKgogICovCiAKLS8qIAorLyoKICAqIE1ha2UgTGludXMgaGFwcHkuCiAgKiBMb2NhbCB2YXJpYWJsZXM6CiAgKiBjLWluZGVudGF0aW9uLXN0eWxlOiAiSyZSIgpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvcmVzaXplLmMgYi9mcy9yZWlzZXJmcy9yZXNpemUuYwppbmRleCBmNzFjMzk0Li4yMzhlOWQ5IDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy9yZXNpemUuYworKysgYi9mcy9yZWlzZXJmcy9yZXNpemUuYwpAQCAtMSw4ICsxLDggQEAKLS8qIAorLyoKICAqIENvcHlyaWdodCAyMDAwIGJ5IEhhbnMgUmVpc2VyLCBsaWNlbnNpbmcgZ292ZXJuZWQgYnkgcmVpc2VyZnMvUkVBRE1FCiAgKi8KIAotLyogCisvKgogICogV3JpdHRlbiBieSBBbGV4YW5kZXIgWmFyb2NoZW50Y2V2LgogICoKICAqIFRoZSBrZXJuZWwgcGFydCBvZiB0aGUgKG9uLWxpbmUpIHJlaXNlcmZzIHJlc2l6ZXIuCkBAIC0xMDEsNyArMTAxLDcgQEAKIAkJCW1lbWNweShqYml0bWFwW2ldLmJpdG1hcHMsIGpiLT5iaXRtYXBzLCBjb3B5X3NpemUpOwogCiAJCQkvKiBqdXN0IGluIGNhc2UgdmZyZWUgc2NoZWR1bGVzIG9uIHVzLCBjb3B5IHRoZSBuZXcKLQkJCSAqKiBwb2ludGVyIGludG8gdGhlIGpvdXJuYWwgc3RydWN0IGJlZm9yZSBmcmVlaW5nIHRoZSAKKwkJCSAqKiBwb2ludGVyIGludG8gdGhlIGpvdXJuYWwgc3RydWN0IGJlZm9yZSBmcmVlaW5nIHRoZQogCQkJICoqIG9sZCBvbmUKIAkJCSAqLwogCQkJbm9kZV90bXAgPSBqYi0+Yml0bWFwczsKZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3N0cmVlLmMgYi9mcy9yZWlzZXJmcy9zdHJlZS5jCmluZGV4IDczYWFhMzMuLmQwMzZlZTUgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3N0cmVlLmMKKysrIGIvZnMvcmVpc2VyZnMvc3RyZWUuYwpAQCAtMjMsNyArMjMsNiBAQAogICogZ2V0X3JrZXkKICAqIGtleV9pbl9idWZmZXIKICAqIGRlY3JlbWVudF9iY291bnQKLSAqIGRlY3JlbWVudF9jb3VudGVyc19pbl9wYXRoCiAgKiByZWlzZXJmc19jaGVja19wYXRoCiAgKiBwYXRocmVsc2VfYW5kX3Jlc3RvcmUKICAqIHBhdGhyZWxzZQpAQCAtNTcsMjggKzU2LDI4IEBACiAjaW5jbHVkZSA8bGludXgvcXVvdGFvcHMuaD4KIAogLyogRG9lcyB0aGUgYnVmZmVyIGNvbnRhaW4gYSBkaXNrIGJsb2NrIHdoaWNoIGlzIGluIHRoZSB0cmVlLiAqLwotaW5saW5lIGludCBCX0lTX0lOX1RSRUUoY29uc3Qgc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfYmgpCitpbmxpbmUgaW50IEJfSVNfSU5fVFJFRShjb25zdCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKQogewogCi0JUkZBTFNFKEJfTEVWRUwocF9zX2JoKSA+IE1BWF9IRUlHSFQsCi0JICAgICAgICJQQVAtMTAxMDogYmxvY2sgKCViKSBoYXMgdG9vIGJpZyBsZXZlbCAoJXopIiwgcF9zX2JoLCBwX3NfYmgpOworCVJGQUxTRShCX0xFVkVMKGJoKSA+IE1BWF9IRUlHSFQsCisJICAgICAgICJQQVAtMTAxMDogYmxvY2sgKCViKSBoYXMgdG9vIGJpZyBsZXZlbCAoJXopIiwgYmgsIGJoKTsKIAotCXJldHVybiAoQl9MRVZFTChwX3NfYmgpICE9IEZSRUVfTEVWRUwpOworCXJldHVybiAoQl9MRVZFTChiaCkgIT0gRlJFRV9MRVZFTCk7CiB9CiAKIC8vCiAvLyB0byBnZXRzIGl0ZW0gaGVhZCBpbiBsZSBmb3JtCiAvLwotaW5saW5lIHZvaWQgY29weV9pdGVtX2hlYWQoc3RydWN0IGl0ZW1faGVhZCAqcF92X3RvLAotCQkJICAgY29uc3Qgc3RydWN0IGl0ZW1faGVhZCAqcF92X2Zyb20pCitpbmxpbmUgdm9pZCBjb3B5X2l0ZW1faGVhZChzdHJ1Y3QgaXRlbV9oZWFkICp0bywKKwkJCSAgIGNvbnN0IHN0cnVjdCBpdGVtX2hlYWQgKmZyb20pCiB7Ci0JbWVtY3B5KHBfdl90bywgcF92X2Zyb20sIElIX1NJWkUpOworCW1lbWNweSh0bywgZnJvbSwgSUhfU0laRSk7CiB9CiAKIC8qIGsxIGlzIHBvaW50ZXIgdG8gb24tZGlzayBzdHJ1Y3R1cmUgd2hpY2ggaXMgc3RvcmVkIGluIGxpdHRsZS1lbmRpYW4KICAgIGZvcm0uIGsyIGlzIHBvaW50ZXIgdG8gY3B1IHZhcmlhYmxlLiBGb3Iga2V5IG9mIGl0ZW1zIG9mIHRoZSBzYW1lCiAgICBvYmplY3QgdGhpcyByZXR1cm5zIDAuCi0gICBSZXR1cm5zOiAtMSBpZiBrZXkxIDwga2V5MiAKKyAgIFJldHVybnM6IC0xIGlmIGtleTEgPCBrZXkyCiAgICAwIGlmIGtleTEgPT0ga2V5MgogICAgMSBpZiBrZXkxID4ga2V5MiAqLwogaW5saW5lIGludCBjb21wX3Nob3J0X2tleXMoY29uc3Qgc3RydWN0IHJlaXNlcmZzX2tleSAqbGVfa2V5LApAQCAtMTM2LDE1ICsxMzUsMTUgQEAKIGlubGluZSBpbnQgY29tcF9zaG9ydF9sZV9rZXlzKGNvbnN0IHN0cnVjdCByZWlzZXJmc19rZXkgKmtleTEsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICprZXkyKQogewotCV9fdTMyICpwX3NfMV91MzIsICpwX3NfMl91MzI7Ci0JaW50IG5fa2V5X2xlbmd0aCA9IFJFSVNFUkZTX1NIT1JUX0tFWV9MRU47CisJX191MzIgKmsxX3UzMiwgKmsyX3UzMjsKKwlpbnQga2V5X2xlbmd0aCA9IFJFSVNFUkZTX1NIT1JUX0tFWV9MRU47CiAKLQlwX3NfMV91MzIgPSAoX191MzIgKikga2V5MTsKLQlwX3NfMl91MzIgPSAoX191MzIgKikga2V5MjsKLQlmb3IgKDsgbl9rZXlfbGVuZ3RoLS07ICsrcF9zXzFfdTMyLCArK3Bfc18yX3UzMikgewotCQlpZiAobGUzMl90b19jcHUoKnBfc18xX3UzMikgPCBsZTMyX3RvX2NwdSgqcF9zXzJfdTMyKSkKKwlrMV91MzIgPSAoX191MzIgKikga2V5MTsKKwlrMl91MzIgPSAoX191MzIgKikga2V5MjsKKwlmb3IgKDsga2V5X2xlbmd0aC0tOyArK2sxX3UzMiwgKytrMl91MzIpIHsKKwkJaWYgKGxlMzJfdG9fY3B1KCprMV91MzIpIDwgbGUzMl90b19jcHUoKmsyX3UzMikpCiAJCQlyZXR1cm4gLTE7Ci0JCWlmIChsZTMyX3RvX2NwdSgqcF9zXzFfdTMyKSA+IGxlMzJfdG9fY3B1KCpwX3NfMl91MzIpKQorCQlpZiAobGUzMl90b19jcHUoKmsxX3UzMikgPiBsZTMyX3RvX2NwdSgqazJfdTMyKSkKIAkJCXJldHVybiAxOwogCX0KIAlyZXR1cm4gMDsKQEAgLTE3NSw1MiArMTc0LDUxIEBACiAgKiAgQmluYXJ5IHNlYXJjaCB0b29sa2l0IGZ1bmN0aW9uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKICAqICBTZWFyY2ggZm9yIGFuIGl0ZW0gaW4gdGhlIGFycmF5IGJ5IHRoZSBpdGVtIGtleSAgICAgICAgICAgICAgICAgICAgICAgKgogICogIFJldHVybnM6ICAgIDEgaWYgZm91bmQsICAwIGlmIG5vdCBmb3VuZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgKnBfbl9wb3MgPSBudW1iZXIgb2YgdGhlIHNlYXJjaGVkIGVsZW1lbnQgaWYgZm91bmQsIGVsc2UgdGhlICAgICoKLSAqICAgICAgICBudW1iZXIgb2YgdGhlIGZpcnN0IGVsZW1lbnQgdGhhdCBpcyBsYXJnZXIgdGhhbiBwX3Zfa2V5LiAgICAgICAgKgorICogICAgICAgICpwb3MgPSBudW1iZXIgb2YgdGhlIHNlYXJjaGVkIGVsZW1lbnQgaWYgZm91bmQsIGVsc2UgdGhlICAgICAgICAqCisgKiAgICAgICAgbnVtYmVyIG9mIHRoZSBmaXJzdCBlbGVtZW50IHRoYXQgaXMgbGFyZ2VyIHRoYW4ga2V5LiAgICAgICAgICAgICoKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEZvciB0aG9zZSBub3QgZmFtaWxpYXIgd2l0aCBiaW5hcnkgc2VhcmNoOiBuX2xib3VuZCBpcyB0aGUgbGVmdG1vc3QgaXRlbSB0aGF0IGl0Ci0gY291bGQgYmUsIG5fcmJvdW5kIHRoZSByaWdodG1vc3QgaXRlbSB0aGF0IGl0IGNvdWxkIGJlLiAgV2UgZXhhbWluZSB0aGUgaXRlbQotIGhhbGZ3YXkgYmV0d2VlbiBuX2xib3VuZCBhbmQgbl9yYm91bmQsIGFuZCB0aGF0IHRlbGxzIHVzIGVpdGhlciB0aGF0IHdlIGNhbiBpbmNyZWFzZQotIG5fbGJvdW5kLCBvciBkZWNyZWFzZSBuX3Jib3VuZCwgb3IgdGhhdCB3ZSBoYXZlIGZvdW5kIGl0LCBvciBpZiBuX2xib3VuZCA8PSBuX3Jib3VuZCB0aGF0CisvKiBGb3IgdGhvc2Ugbm90IGZhbWlsaWFyIHdpdGggYmluYXJ5IHNlYXJjaDogbGJvdW5kIGlzIHRoZSBsZWZ0bW9zdCBpdGVtIHRoYXQgaXQKKyBjb3VsZCBiZSwgcmJvdW5kIHRoZSByaWdodG1vc3QgaXRlbSB0aGF0IGl0IGNvdWxkIGJlLiAgV2UgZXhhbWluZSB0aGUgaXRlbQorIGhhbGZ3YXkgYmV0d2VlbiBsYm91bmQgYW5kIHJib3VuZCwgYW5kIHRoYXQgdGVsbHMgdXMgZWl0aGVyIHRoYXQgd2UgY2FuIGluY3JlYXNlCisgbGJvdW5kLCBvciBkZWNyZWFzZSByYm91bmQsIG9yIHRoYXQgd2UgaGF2ZSBmb3VuZCBpdCwgb3IgaWYgbGJvdW5kIDw9IHJib3VuZCB0aGF0CiAgdGhlcmUgYXJlIG5vIHBvc3NpYmxlIGl0ZW1zLCBhbmQgd2UgaGF2ZSBub3QgZm91bmQgaXQuIFdpdGggZWFjaCBleGFtaW5hdGlvbiB3ZQogIGN1dCB0aGUgbnVtYmVyIG9mIHBvc3NpYmxlIGl0ZW1zIGl0IGNvdWxkIGJlIGJ5IG9uZSBtb3JlIHRoYW4gaGFsZiByb3VuZGVkIGRvd24sCiAgb3Igd2UgZmluZCBpdC4gKi8KLXN0YXRpYyBpbmxpbmUgaW50IGJpbl9zZWFyY2goY29uc3Qgdm9pZCAqcF92X2tleSwJLyogS2V5IHRvIHNlYXJjaCBmb3IuICAgICAgICAgICAgICAgICAgICovCi0JCQkgICAgIGNvbnN0IHZvaWQgKnBfdl9iYXNlLAkvKiBGaXJzdCBpdGVtIGluIHRoZSBhcnJheS4gICAgICAgICAgICAgKi8KLQkJCSAgICAgaW50IHBfbl9udW0sCS8qIE51bWJlciBvZiBpdGVtcyBpbiB0aGUgYXJyYXkuICAgICAgICAqLwotCQkJICAgICBpbnQgcF9uX3dpZHRoLAkvKiBJdGVtIHNpemUgaW4gdGhlIGFycmF5LgotCQkJCQkJICAgc2VhcmNoZWQuIExlc3QgdGhlIHJlYWRlciBiZQotCQkJCQkJICAgY29uZnVzZWQsIG5vdGUgdGhhdCB0aGlzIGlzIGNyYWZ0ZWQKLQkJCQkJCSAgIGFzIGEgZ2VuZXJhbCBmdW5jdGlvbiwgYW5kIHdoZW4gaXQKLQkJCQkJCSAgIGlzIGFwcGxpZWQgc3BlY2lmaWNhbGx5IHRvIHRoZSBhcnJheQotCQkJCQkJICAgb2YgaXRlbSBoZWFkZXJzIGluIGEgbm9kZSwgcF9uX3dpZHRoCi0JCQkJCQkgICBpcyBhY3R1YWxseSB0aGUgaXRlbSBoZWFkZXIgc2l6ZSBub3QKLQkJCQkJCSAgIHRoZSBpdGVtIHNpemUuICAgICAgICAgICAgICAgICAgICAgICovCi0JCQkgICAgIGludCAqcF9uX3BvcwkvKiBOdW1iZXIgb2YgdGhlIHNlYXJjaGVkIGZvciBlbGVtZW50LiAqLworc3RhdGljIGlubGluZSBpbnQgYmluX3NlYXJjaChjb25zdCB2b2lkICprZXksCS8qIEtleSB0byBzZWFyY2ggZm9yLiAqLworCQkJICAgICBjb25zdCB2b2lkICpiYXNlLAkvKiBGaXJzdCBpdGVtIGluIHRoZSBhcnJheS4gKi8KKwkJCSAgICAgaW50IG51bSwJLyogTnVtYmVyIG9mIGl0ZW1zIGluIHRoZSBhcnJheS4gKi8KKwkJCSAgICAgaW50IHdpZHRoLAkvKiBJdGVtIHNpemUgaW4gdGhlIGFycmF5LgorCQkJCQkgICBzZWFyY2hlZC4gTGVzdCB0aGUgcmVhZGVyIGJlCisJCQkJCSAgIGNvbmZ1c2VkLCBub3RlIHRoYXQgdGhpcyBpcyBjcmFmdGVkCisJCQkJCSAgIGFzIGEgZ2VuZXJhbCBmdW5jdGlvbiwgYW5kIHdoZW4gaXQKKwkJCQkJICAgaXMgYXBwbGllZCBzcGVjaWZpY2FsbHkgdG8gdGhlIGFycmF5CisJCQkJCSAgIG9mIGl0ZW0gaGVhZGVycyBpbiBhIG5vZGUsIHdpZHRoCisJCQkJCSAgIGlzIGFjdHVhbGx5IHRoZSBpdGVtIGhlYWRlciBzaXplIG5vdAorCQkJCQkgICB0aGUgaXRlbSBzaXplLiAqLworCQkJICAgICBpbnQgKnBvcyAvKiBOdW1iZXIgb2YgdGhlIHNlYXJjaGVkIGZvciBlbGVtZW50LiAqLwogICAgICkKIHsKLQlpbnQgbl9yYm91bmQsIG5fbGJvdW5kLCBuX2o7CisJaW50IHJib3VuZCwgbGJvdW5kLCBqOwogCi0JZm9yIChuX2ogPSAoKG5fcmJvdW5kID0gcF9uX251bSAtIDEpICsgKG5fbGJvdW5kID0gMCkpIC8gMjsKLQkgICAgIG5fbGJvdW5kIDw9IG5fcmJvdW5kOyBuX2ogPSAobl9yYm91bmQgKyBuX2xib3VuZCkgLyAyKQorCWZvciAoaiA9ICgocmJvdW5kID0gbnVtIC0gMSkgKyAobGJvdW5kID0gMCkpIC8gMjsKKwkgICAgIGxib3VuZCA8PSByYm91bmQ7IGogPSAocmJvdW5kICsgbGJvdW5kKSAvIDIpCiAJCXN3aXRjaCAoY29tcF9rZXlzCi0JCQkoKHN0cnVjdCByZWlzZXJmc19rZXkgKikoKGNoYXIgKilwX3ZfYmFzZSArCi0JCQkJCQkgbl9qICogcF9uX3dpZHRoKSwKLQkJCSAoc3RydWN0IGNwdV9rZXkgKilwX3Zfa2V5KSkgeworCQkJKChzdHJ1Y3QgcmVpc2VyZnNfa2V5ICopKChjaGFyICopYmFzZSArIGogKiB3aWR0aCksCisJCQkgKHN0cnVjdCBjcHVfa2V5ICopa2V5KSkgewogCQljYXNlIC0xOgotCQkJbl9sYm91bmQgPSBuX2ogKyAxOworCQkJbGJvdW5kID0gaiArIDE7CiAJCQljb250aW51ZTsKIAkJY2FzZSAxOgotCQkJbl9yYm91bmQgPSBuX2ogLSAxOworCQkJcmJvdW5kID0gaiAtIDE7CiAJCQljb250aW51ZTsKIAkJY2FzZSAwOgotCQkJKnBfbl9wb3MgPSBuX2o7CisJCQkqcG9zID0gajsKIAkJCXJldHVybiBJVEVNX0ZPVU5EOwkvKiBLZXkgZm91bmQgaW4gdGhlIGFycmF5LiAgKi8KIAkJfQogCiAJLyogYmluX3NlYXJjaCBkaWQgbm90IGZpbmQgZ2l2ZW4ga2V5LCBpdCByZXR1cm5zIHBvc2l0aW9uIG9mIGtleSwKIAkgICB0aGF0IGlzIG1pbmltYWwgYW5kIGdyZWF0ZXIgdGhhbiB0aGUgZ2l2ZW4gb25lLiAqLwotCSpwX25fcG9zID0gbl9sYm91bmQ7CisJKnBvcyA9IGxib3VuZDsKIAlyZXR1cm4gSVRFTV9OT1RfRk9VTkQ7CiB9CiAKQEAgLTI0Myw5MCArMjQxLDg4IEBACiAgICBvZiB0aGUgcGF0aCwgYW5kIGdvaW5nIHVwd2FyZHMuICBXZSBtdXN0IGNoZWNrIHRoZSBwYXRoJ3MgdmFsaWRpdHkgYXQgZWFjaCBzdGVwLiAgSWYgdGhlIGtleSBpcyBub3QgaW4KICAgIHRoZSBwYXRoLCB0aGVyZSBpcyBubyBkZWxpbWl0aW5nIGtleSBpbiB0aGUgdHJlZSAoYnVmZmVyIGlzIGZpcnN0IG9yIGxhc3QgYnVmZmVyIGluIHRyZWUpLCBhbmQgaW4gdGhpcwogICAgY2FzZSB3ZSByZXR1cm4gYSBzcGVjaWFsIGtleSwgZWl0aGVyIE1JTl9LRVkgb3IgTUFYX0tFWS4gKi8KLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IHJlaXNlcmZzX2tleSAqZ2V0X2xrZXkoY29uc3Qgc3RydWN0IHRyZWVwYXRoCi0JCQkJCQkgICpwX3NfY2hrX3BhdGgsCi0JCQkJCQkgIGNvbnN0IHN0cnVjdCBzdXBlcl9ibG9jawotCQkJCQkJICAqcF9zX3NiKQorc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICpnZXRfbGtleShjb25zdCBzdHJ1Y3QgdHJlZXBhdGggKmNoa19wYXRoLAorCQkJCQkJICBjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCWludCBuX3Bvc2l0aW9uLCBuX3BhdGhfb2Zmc2V0ID0gcF9zX2Noa19wYXRoLT5wYXRoX2xlbmd0aDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBfc19wYXJlbnQ7CisJaW50IHBvc2l0aW9uLCBwYXRoX29mZnNldCA9IGNoa19wYXRoLT5wYXRoX2xlbmd0aDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBhcmVudDsKIAotCVJGQUxTRShuX3BhdGhfb2Zmc2V0IDwgRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCwKKwlSRkFMU0UocGF0aF9vZmZzZXQgPCBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VULAogCSAgICAgICAiUEFQLTUwMTA6IGludmFsaWQgb2Zmc2V0IGluIHRoZSBwYXRoIik7CiAKIAkvKiBXaGlsZSBub3QgaGlnaGVyIGluIHBhdGggdGhhbiBmaXJzdCBlbGVtZW50LiAqLwotCXdoaWxlIChuX3BhdGhfb2Zmc2V0LS0gPiBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUKSB7CisJd2hpbGUgKHBhdGhfb2Zmc2V0LS0gPiBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUKSB7CiAKIAkJUkZBTFNFKCFidWZmZXJfdXB0b2RhdGUKLQkJICAgICAgIChQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19jaGtfcGF0aCwgbl9wYXRoX29mZnNldCkpLAorCQkgICAgICAgKFBBVEhfT0ZGU0VUX1BCVUZGRVIoY2hrX3BhdGgsIHBhdGhfb2Zmc2V0KSksCiAJCSAgICAgICAiUEFQLTUwMjA6IHBhcmVudCBpcyBub3QgdXB0b2RhdGUiKTsKIAogCQkvKiBQYXJlbnQgYXQgdGhlIHBhdGggaXMgbm90IGluIHRoZSB0cmVlIG5vdy4gKi8KIAkJaWYgKCFCX0lTX0lOX1RSRUUKLQkJICAgIChwX3NfcGFyZW50ID0KLQkJICAgICBQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19jaGtfcGF0aCwgbl9wYXRoX29mZnNldCkpKQorCQkgICAgKHBhcmVudCA9CisJCSAgICAgUEFUSF9PRkZTRVRfUEJVRkZFUihjaGtfcGF0aCwgcGF0aF9vZmZzZXQpKSkKIAkJCXJldHVybiAmTUFYX0tFWTsKIAkJLyogQ2hlY2sgd2hldGhlciBwb3NpdGlvbiBpbiB0aGUgcGFyZW50IGlzIGNvcnJlY3QuICovCi0JCWlmICgobl9wb3NpdGlvbiA9Ci0JCSAgICAgUEFUSF9PRkZTRVRfUE9TSVRJT04ocF9zX2Noa19wYXRoLAotCQkJCQkgIG5fcGF0aF9vZmZzZXQpKSA+Ci0JCSAgICBCX05SX0lURU1TKHBfc19wYXJlbnQpKQorCQlpZiAoKHBvc2l0aW9uID0KKwkJICAgICBQQVRIX09GRlNFVF9QT1NJVElPTihjaGtfcGF0aCwKKwkJCQkJICBwYXRoX29mZnNldCkpID4KKwkJICAgIEJfTlJfSVRFTVMocGFyZW50KSkKIAkJCXJldHVybiAmTUFYX0tFWTsKIAkJLyogQ2hlY2sgd2hldGhlciBwYXJlbnQgYXQgdGhlIHBhdGggcmVhbGx5IHBvaW50cyB0byB0aGUgY2hpbGQuICovCi0JCWlmIChCX05fQ0hJTERfTlVNKHBfc19wYXJlbnQsIG5fcG9zaXRpb24pICE9Ci0JCSAgICBQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19jaGtfcGF0aCwKLQkJCQkJbl9wYXRoX29mZnNldCArIDEpLT5iX2Jsb2NrbnIpCisJCWlmIChCX05fQ0hJTERfTlVNKHBhcmVudCwgcG9zaXRpb24pICE9CisJCSAgICBQQVRIX09GRlNFVF9QQlVGRkVSKGNoa19wYXRoLAorCQkJCQlwYXRoX29mZnNldCArIDEpLT5iX2Jsb2NrbnIpCiAJCQlyZXR1cm4gJk1BWF9LRVk7CiAJCS8qIFJldHVybiBkZWxpbWl0aW5nIGtleSBpZiBwb3NpdGlvbiBpbiB0aGUgcGFyZW50IGlzIG5vdCBlcXVhbCB0byB6ZXJvLiAqLwotCQlpZiAobl9wb3NpdGlvbikKLQkJCXJldHVybiBCX05fUERFTElNX0tFWShwX3NfcGFyZW50LCBuX3Bvc2l0aW9uIC0gMSk7CisJCWlmIChwb3NpdGlvbikKKwkJCXJldHVybiBCX05fUERFTElNX0tFWShwYXJlbnQsIHBvc2l0aW9uIC0gMSk7CiAJfQogCS8qIFJldHVybiBNSU5fS0VZIGlmIHdlIGFyZSBpbiB0aGUgcm9vdCBvZiB0aGUgYnVmZmVyIHRyZWUuICovCi0JaWYgKFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX2Noa19wYXRoLCBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUKS0+Ci0JICAgIGJfYmxvY2tuciA9PSBTQl9ST09UX0JMT0NLKHBfc19zYikpCisJaWYgKFBBVEhfT0ZGU0VUX1BCVUZGRVIoY2hrX3BhdGgsIEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQpLT4KKwkgICAgYl9ibG9ja25yID09IFNCX1JPT1RfQkxPQ0soc2IpKQogCQlyZXR1cm4gJk1JTl9LRVk7CiAJcmV0dXJuICZNQVhfS0VZOwogfQogCiAvKiBHZXQgZGVsaW1pdGluZyBrZXkgb2YgdGhlIGJ1ZmZlciBhdCB0aGUgcGF0aCBhbmQgaXRzIHJpZ2h0IG5laWdoYm9yLiAqLwotaW5saW5lIGNvbnN0IHN0cnVjdCByZWlzZXJmc19rZXkgKmdldF9ya2V5KGNvbnN0IHN0cnVjdCB0cmVlcGF0aCAqcF9zX2Noa19wYXRoLAotCQkJCQkgICBjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYikKK2lubGluZSBjb25zdCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICpnZXRfcmtleShjb25zdCBzdHJ1Y3QgdHJlZXBhdGggKmNoa19wYXRoLAorCQkJCQkgICBjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCWludCBuX3Bvc2l0aW9uLCBuX3BhdGhfb2Zmc2V0ID0gcF9zX2Noa19wYXRoLT5wYXRoX2xlbmd0aDsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBfc19wYXJlbnQ7CisJaW50IHBvc2l0aW9uLCBwYXRoX29mZnNldCA9IGNoa19wYXRoLT5wYXRoX2xlbmd0aDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBhcmVudDsKIAotCVJGQUxTRShuX3BhdGhfb2Zmc2V0IDwgRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCwKKwlSRkFMU0UocGF0aF9vZmZzZXQgPCBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VULAogCSAgICAgICAiUEFQLTUwMzA6IGludmFsaWQgb2Zmc2V0IGluIHRoZSBwYXRoIik7CiAKLQl3aGlsZSAobl9wYXRoX29mZnNldC0tID4gRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCkgeworCXdoaWxlIChwYXRoX29mZnNldC0tID4gRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCkgewogCiAJCVJGQUxTRSghYnVmZmVyX3VwdG9kYXRlCi0JCSAgICAgICAoUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfY2hrX3BhdGgsIG5fcGF0aF9vZmZzZXQpKSwKKwkJICAgICAgIChQQVRIX09GRlNFVF9QQlVGRkVSKGNoa19wYXRoLCBwYXRoX29mZnNldCkpLAogCQkgICAgICAgIlBBUC01MDQwOiBwYXJlbnQgaXMgbm90IHVwdG9kYXRlIik7CiAKIAkJLyogUGFyZW50IGF0IHRoZSBwYXRoIGlzIG5vdCBpbiB0aGUgdHJlZSBub3cuICovCiAJCWlmICghQl9JU19JTl9UUkVFCi0JCSAgICAocF9zX3BhcmVudCA9Ci0JCSAgICAgUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfY2hrX3BhdGgsIG5fcGF0aF9vZmZzZXQpKSkKKwkJICAgIChwYXJlbnQgPQorCQkgICAgIFBBVEhfT0ZGU0VUX1BCVUZGRVIoY2hrX3BhdGgsIHBhdGhfb2Zmc2V0KSkpCiAJCQlyZXR1cm4gJk1JTl9LRVk7CiAJCS8qIENoZWNrIHdoZXRoZXIgcG9zaXRpb24gaW4gdGhlIHBhcmVudCBpcyBjb3JyZWN0LiAqLwotCQlpZiAoKG5fcG9zaXRpb24gPQotCQkgICAgIFBBVEhfT0ZGU0VUX1BPU0lUSU9OKHBfc19jaGtfcGF0aCwKLQkJCQkJICBuX3BhdGhfb2Zmc2V0KSkgPgotCQkgICAgQl9OUl9JVEVNUyhwX3NfcGFyZW50KSkKKwkJaWYgKChwb3NpdGlvbiA9CisJCSAgICAgUEFUSF9PRkZTRVRfUE9TSVRJT04oY2hrX3BhdGgsCisJCQkJCSAgcGF0aF9vZmZzZXQpKSA+CisJCSAgICBCX05SX0lURU1TKHBhcmVudCkpCiAJCQlyZXR1cm4gJk1JTl9LRVk7CiAJCS8qIENoZWNrIHdoZXRoZXIgcGFyZW50IGF0IHRoZSBwYXRoIHJlYWxseSBwb2ludHMgdG8gdGhlIGNoaWxkLiAqLwotCQlpZiAoQl9OX0NISUxEX05VTShwX3NfcGFyZW50LCBuX3Bvc2l0aW9uKSAhPQotCQkgICAgUEFUSF9PRkZTRVRfUEJVRkZFUihwX3NfY2hrX3BhdGgsCi0JCQkJCW5fcGF0aF9vZmZzZXQgKyAxKS0+Yl9ibG9ja25yKQorCQlpZiAoQl9OX0NISUxEX05VTShwYXJlbnQsIHBvc2l0aW9uKSAhPQorCQkgICAgUEFUSF9PRkZTRVRfUEJVRkZFUihjaGtfcGF0aCwKKwkJCQkJcGF0aF9vZmZzZXQgKyAxKS0+Yl9ibG9ja25yKQogCQkJcmV0dXJuICZNSU5fS0VZOwogCQkvKiBSZXR1cm4gZGVsaW1pdGluZyBrZXkgaWYgcG9zaXRpb24gaW4gdGhlIHBhcmVudCBpcyBub3QgdGhlIGxhc3Qgb25lLiAqLwotCQlpZiAobl9wb3NpdGlvbiAhPSBCX05SX0lURU1TKHBfc19wYXJlbnQpKQotCQkJcmV0dXJuIEJfTl9QREVMSU1fS0VZKHBfc19wYXJlbnQsIG5fcG9zaXRpb24pOworCQlpZiAocG9zaXRpb24gIT0gQl9OUl9JVEVNUyhwYXJlbnQpKQorCQkJcmV0dXJuIEJfTl9QREVMSU1fS0VZKHBhcmVudCwgcG9zaXRpb24pOwogCX0KIAkvKiBSZXR1cm4gTUFYX0tFWSBpZiB3ZSBhcmUgaW4gdGhlIHJvb3Qgb2YgdGhlIGJ1ZmZlciB0cmVlLiAqLwotCWlmIChQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19jaGtfcGF0aCwgRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVCktPgotCSAgICBiX2Jsb2NrbnIgPT0gU0JfUk9PVF9CTE9DSyhwX3Nfc2IpKQorCWlmIChQQVRIX09GRlNFVF9QQlVGRkVSKGNoa19wYXRoLCBGSVJTVF9QQVRIX0VMRU1FTlRfT0ZGU0VUKS0+CisJICAgIGJfYmxvY2tuciA9PSBTQl9ST09UX0JMT0NLKHNiKSkKIAkJcmV0dXJuICZNQVhfS0VZOwogCXJldHVybiAmTUlOX0tFWTsKIH0KQEAgLTMzNiw2MCArMzMyLDI5IEBACiAgICB0aGUgcGF0aC4gIFRoZXNlIGRlbGltaXRpbmcga2V5cyBhcmUgc3RvcmVkIGF0IGxlYXN0IG9uZSBsZXZlbCBhYm92ZSB0aGF0IGJ1ZmZlciBpbiB0aGUgdHJlZS4gSWYgdGhlCiAgICBidWZmZXIgaXMgdGhlIGZpcnN0IG9yIGxhc3Qgbm9kZSBpbiB0aGUgdHJlZSBvcmRlciB0aGVuIG9uZSBvZiB0aGUgZGVsaW1pdGluZyBrZXlzIG1heSBiZSBhYnNlbnQsIGFuZCBpbgogICAgdGhpcyBjYXNlIGdldF9sa2V5IGFuZCBnZXRfcmtleSByZXR1cm4gYSBzcGVjaWFsIGtleSB3aGljaCBpcyBNSU5fS0VZIG9yIE1BWF9LRVkuICovCi1zdGF0aWMgaW5saW5lIGludCBrZXlfaW5fYnVmZmVyKHN0cnVjdCB0cmVlcGF0aCAqcF9zX2Noa19wYXRoLAkvKiBQYXRoIHdoaWNoIHNob3VsZCBiZSBjaGVja2VkLiAgKi8KLQkJCQljb25zdCBzdHJ1Y3QgY3B1X2tleSAqcF9zX2tleSwJLyogS2V5IHdoaWNoIHNob3VsZCBiZSBjaGVja2VkLiAgICovCi0JCQkJc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IJLyogU3VwZXIgYmxvY2sgcG9pbnRlci4gICAgICAgICAgICovCitzdGF0aWMgaW5saW5lIGludCBrZXlfaW5fYnVmZmVyKHN0cnVjdCB0cmVlcGF0aCAqY2hrX3BhdGgsCS8qIFBhdGggd2hpY2ggc2hvdWxkIGJlIGNoZWNrZWQuICAqLworCQkJCWNvbnN0IHN0cnVjdCBjcHVfa2V5ICprZXksCS8qIEtleSB3aGljaCBzaG91bGQgYmUgY2hlY2tlZC4gICAqLworCQkJCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IKICAgICApCiB7CiAKLQlSRkFMU0UoIXBfc19rZXkgfHwgcF9zX2Noa19wYXRoLT5wYXRoX2xlbmd0aCA8IEZJUlNUX1BBVEhfRUxFTUVOVF9PRkZTRVQKLQkgICAgICAgfHwgcF9zX2Noa19wYXRoLT5wYXRoX2xlbmd0aCA+IE1BWF9IRUlHSFQsCisJUkZBTFNFKCFrZXkgfHwgY2hrX3BhdGgtPnBhdGhfbGVuZ3RoIDwgRklSU1RfUEFUSF9FTEVNRU5UX09GRlNFVAorCSAgICAgICB8fCBjaGtfcGF0aC0+cGF0aF9sZW5ndGggPiBNQVhfSEVJR0hULAogCSAgICAgICAiUEFQLTUwNTA6IHBvaW50ZXIgdG8gdGhlIGtleSglcCkgaXMgTlVMTCBvciBpbnZhbGlkIHBhdGggbGVuZ3RoKCVkKSIsCi0JICAgICAgIHBfc19rZXksIHBfc19jaGtfcGF0aC0+cGF0aF9sZW5ndGgpOwotCVJGQUxTRSghUEFUSF9QTEFTVF9CVUZGRVIocF9zX2Noa19wYXRoKS0+Yl9iZGV2LAorCSAgICAgICBrZXksIGNoa19wYXRoLT5wYXRoX2xlbmd0aCk7CisJUkZBTFNFKCFQQVRIX1BMQVNUX0JVRkZFUihjaGtfcGF0aCktPmJfYmRldiwKIAkgICAgICAgIlBBUC01MDYwOiBkZXZpY2UgbXVzdCBub3QgYmUgTk9ERVYiKTsKIAotCWlmIChjb21wX2tleXMoZ2V0X2xrZXkocF9zX2Noa19wYXRoLCBwX3Nfc2IpLCBwX3Nfa2V5KSA9PSAxKQorCWlmIChjb21wX2tleXMoZ2V0X2xrZXkoY2hrX3BhdGgsIHNiKSwga2V5KSA9PSAxKQogCQkvKiBsZWZ0IGRlbGltaXRpbmcga2V5IGlzIGJpZ2dlciwgdGhhdCB0aGUga2V5IHdlIGxvb2sgZm9yICovCiAJCXJldHVybiAwOwotCS8vICBpZiAoIGNvbXBfa2V5cyhwX3Nfa2V5LCBnZXRfcmtleShwX3NfY2hrX3BhdGgsIHBfc19zYikpICE9IC0xICkKLQlpZiAoY29tcF9rZXlzKGdldF9ya2V5KHBfc19jaGtfcGF0aCwgcF9zX3NiKSwgcF9zX2tleSkgIT0gMSkKLQkJLyogcF9zX2tleSBtdXN0IGJlIGxlc3MgdGhhbiByaWdodCBkZWxpbWl0aWluZyBrZXkgKi8KKwkvKiAgaWYgKCBjb21wX2tleXMoa2V5LCBnZXRfcmtleShjaGtfcGF0aCwgc2IpKSAhPSAtMSApICovCisJaWYgKGNvbXBfa2V5cyhnZXRfcmtleShjaGtfcGF0aCwgc2IpLCBrZXkpICE9IDEpCisJCS8qIGtleSBtdXN0IGJlIGxlc3MgdGhhbiByaWdodCBkZWxpbWl0aWluZyBrZXkgKi8KIAkJcmV0dXJuIDA7CiAJcmV0dXJuIDE7CiB9CiAKLWlubGluZSB2b2lkIGRlY3JlbWVudF9iY291bnQoc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfYmgpCi17Ci0JaWYgKHBfc19iaCkgewotCQlpZiAoYXRvbWljX3JlYWQoJihwX3NfYmgtPmJfY291bnQpKSkgewotCQkJcHV0X2JoKHBfc19iaCk7Ci0JCQlyZXR1cm47Ci0JCX0KLQkJcmVpc2VyZnNfcGFuaWMoTlVMTCwKLQkJCSAgICAgICAiUEFQLTUwNzA6IGRlY3JlbWVudF9iY291bnQ6IHRyeWluZyB0byBmcmVlIGZyZWUgYnVmZmVyICViIiwKLQkJCSAgICAgICBwX3NfYmgpOwotCX0KLX0KLQotLyogRGVjcmVtZW50IGJfY291bnQgZmllbGQgb2YgdGhlIGFsbCBidWZmZXJzIGluIHRoZSBwYXRoLiAqLwotdm9pZCBkZWNyZW1lbnRfY291bnRlcnNfaW5fcGF0aChzdHJ1Y3QgdHJlZXBhdGggKnBfc19zZWFyY2hfcGF0aCkKLXsKLQlpbnQgbl9wYXRoX29mZnNldCA9IHBfc19zZWFyY2hfcGF0aC0+cGF0aF9sZW5ndGg7Ci0KLQlSRkFMU0Uobl9wYXRoX29mZnNldCA8IElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVCB8fAotCSAgICAgICBuX3BhdGhfb2Zmc2V0ID4gRVhURU5ERURfTUFYX0hFSUdIVCAtIDEsCi0JICAgICAgICJQQVAtNTA4MDogaW52YWxpZCBwYXRoIG9mZnNldCBvZiAlZCIsIG5fcGF0aF9vZmZzZXQpOwotCi0Jd2hpbGUgKG5fcGF0aF9vZmZzZXQgPiBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQpIHsKLQkJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQotCQliaCA9IFBBVEhfT0ZGU0VUX1BCVUZGRVIocF9zX3NlYXJjaF9wYXRoLCBuX3BhdGhfb2Zmc2V0LS0pOwotCQlkZWNyZW1lbnRfYmNvdW50KGJoKTsKLQl9Ci0JcF9zX3NlYXJjaF9wYXRoLT5wYXRoX2xlbmd0aCA9IElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVDsKLX0KLQogaW50IHJlaXNlcmZzX2NoZWNrX3BhdGgoc3RydWN0IHRyZWVwYXRoICpwKQogewogCVJGQUxTRShwLT5wYXRoX2xlbmd0aCAhPSBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQsCkBAIC0zOTcsNDAgKzM2MiwzOCBAQAogCXJldHVybiAwOwogfQogCi0vKiBSZWxlYXNlIGFsbCBidWZmZXJzIGluIHRoZSBwYXRoLiBSZXN0b3JlIGRpcnR5IGJpdHMgY2xlYW4KLSoqIHdoZW4gcHJlcGFyaW5nIHRoZSBidWZmZXIgZm9yIHRoZSBsb2cKLSoqCi0qKiBvbmx5IGNhbGxlZCBmcm9tIGZpeF9ub2RlcygpCi0qLwotdm9pZCBwYXRocmVsc2VfYW5kX3Jlc3RvcmUoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgdHJlZXBhdGggKnBfc19zZWFyY2hfcGF0aCkKKy8qIERyb3AgdGhlIHJlZmVyZW5jZSB0byBlYWNoIGJ1ZmZlciBpbiBhIHBhdGggYW5kIHJlc3RvcmUKKyAqIGRpcnR5IGJpdHMgY2xlYW4gd2hlbiBwcmVwYXJpbmcgdGhlIGJ1ZmZlciBmb3IgdGhlIGxvZy4KKyAqIFRoaXMgdmVyc2lvbiBzaG91bGQgb25seSBiZSBjYWxsZWQgZnJvbSBmaXhfbm9kZXMoKSAqLwordm9pZCBwYXRocmVsc2VfYW5kX3Jlc3RvcmUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKKwkJCSAgIHN0cnVjdCB0cmVlcGF0aCAqc2VhcmNoX3BhdGgpCiB7Ci0JaW50IG5fcGF0aF9vZmZzZXQgPSBwX3Nfc2VhcmNoX3BhdGgtPnBhdGhfbGVuZ3RoOworCWludCBwYXRoX29mZnNldCA9IHNlYXJjaF9wYXRoLT5wYXRoX2xlbmd0aDsKIAotCVJGQUxTRShuX3BhdGhfb2Zmc2V0IDwgSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VULAorCVJGQUxTRShwYXRoX29mZnNldCA8IElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVCwKIAkgICAgICAgImNsbS00MDAwOiBpbnZhbGlkIHBhdGggb2Zmc2V0Iik7CiAKLQl3aGlsZSAobl9wYXRoX29mZnNldCA+IElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVCkgewotCQlyZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcihzLAotCQkJCQkJIFBBVEhfT0ZGU0VUX1BCVUZGRVIKLQkJCQkJCSAocF9zX3NlYXJjaF9wYXRoLAotCQkJCQkJICBuX3BhdGhfb2Zmc2V0KSk7Ci0JCWJyZWxzZShQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19zZWFyY2hfcGF0aCwgbl9wYXRoX29mZnNldC0tKSk7CisJd2hpbGUgKHBhdGhfb2Zmc2V0ID4gSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VUKSB7CisJCXN0cnVjdCBidWZmZXJfaGVhZCAqYmg7CisJCWJoID0gUEFUSF9PRkZTRVRfUEJVRkZFUihzZWFyY2hfcGF0aCwgcGF0aF9vZmZzZXQtLSk7CisJCXJlaXNlcmZzX3Jlc3RvcmVfcHJlcGFyZWRfYnVmZmVyKHNiLCBiaCk7CisJCWJyZWxzZShiaCk7CiAJfQotCXBfc19zZWFyY2hfcGF0aC0+cGF0aF9sZW5ndGggPSBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQ7CisJc2VhcmNoX3BhdGgtPnBhdGhfbGVuZ3RoID0gSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VUOwogfQogCi0vKiBSZWxlYXNlIGFsbCBidWZmZXJzIGluIHRoZSBwYXRoLiAqLwotdm9pZCBwYXRocmVsc2Uoc3RydWN0IHRyZWVwYXRoICpwX3Nfc2VhcmNoX3BhdGgpCisvKiBEcm9wIHRoZSByZWZlcmVuY2UgdG8gZWFjaCBidWZmZXIgaW4gYSBwYXRoICovCit2b2lkIHBhdGhyZWxzZShzdHJ1Y3QgdHJlZXBhdGggKnNlYXJjaF9wYXRoKQogewotCWludCBuX3BhdGhfb2Zmc2V0ID0gcF9zX3NlYXJjaF9wYXRoLT5wYXRoX2xlbmd0aDsKKwlpbnQgcGF0aF9vZmZzZXQgPSBzZWFyY2hfcGF0aC0+cGF0aF9sZW5ndGg7CiAKLQlSRkFMU0Uobl9wYXRoX29mZnNldCA8IElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVCwKKwlSRkFMU0UocGF0aF9vZmZzZXQgPCBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQsCiAJICAgICAgICJQQVAtNTA5MDogaW52YWxpZCBwYXRoIG9mZnNldCIpOwogCi0Jd2hpbGUgKG5fcGF0aF9vZmZzZXQgPiBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQpCi0JCWJyZWxzZShQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19zZWFyY2hfcGF0aCwgbl9wYXRoX29mZnNldC0tKSk7CisJd2hpbGUgKHBhdGhfb2Zmc2V0ID4gSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VUKQorCQlicmVsc2UoUEFUSF9PRkZTRVRfUEJVRkZFUihzZWFyY2hfcGF0aCwgcGF0aF9vZmZzZXQtLSkpOwogCi0JcF9zX3NlYXJjaF9wYXRoLT5wYXRoX2xlbmd0aCA9IElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVDsKKwlzZWFyY2hfcGF0aC0+cGF0aF9sZW5ndGggPSBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQ7CiB9CiAKIHN0YXRpYyBpbnQgaXNfbGVhZihjaGFyICpidWYsIGludCBibG9ja3NpemUsIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCkBAIC00NDQsMjMgKzQwNywyNCBAQAogCiAJYmxraCA9IChzdHJ1Y3QgYmxvY2tfaGVhZCAqKWJ1ZjsKIAlpZiAoYmxraF9sZXZlbChibGtoKSAhPSBESVNLX0xFQUZfTk9ERV9MRVZFTCkgewotCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkJICJpc19sZWFmOiB0aGlzIHNob3VsZCBiZSBjYXVnaHQgZWFybGllciIpOworCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJyZWlzZXJmcy01MDgwIiwKKwkJCQkgInRoaXMgc2hvdWxkIGJlIGNhdWdodCBlYXJsaWVyIik7CiAJCXJldHVybiAwOwogCX0KIAogCW5yID0gYmxraF9ucl9pdGVtKGJsa2gpOwogCWlmIChuciA8IDEgfHwgbnIgPiAoKGJsb2Nrc2l6ZSAtIEJMS0hfU0laRSkgLyAoSUhfU0laRSArIE1JTl9JVEVNX0xFTikpKSB7CiAJCS8qIGl0ZW0gbnVtYmVyIGlzIHRvbyBiaWcgb3IgdG9vIHNtYWxsICovCi0JCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgImlzX2xlYWY6IG5yX2l0ZW0gc2VlbXMgd3Jvbmc6ICV6IiwgYmgpOworCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJyZWlzZXJmcy01MDgxIiwKKwkJCQkgIm5yX2l0ZW0gc2VlbXMgd3Jvbmc6ICV6IiwgYmgpOwogCQlyZXR1cm4gMDsKIAl9CiAJaWggPSAoc3RydWN0IGl0ZW1faGVhZCAqKShidWYgKyBCTEtIX1NJWkUpICsgbnIgLSAxOwogCXVzZWRfc3BhY2UgPSBCTEtIX1NJWkUgKyBJSF9TSVpFICogbnIgKyAoYmxvY2tzaXplIC0gaWhfbG9jYXRpb24oaWgpKTsKIAlpZiAodXNlZF9zcGFjZSAhPSBibG9ja3NpemUgLSBibGtoX2ZyZWVfc3BhY2UoYmxraCkpIHsKIAkJLyogZnJlZSBzcGFjZSBkb2VzIG5vdCBtYXRjaCB0byBjYWxjdWxhdGVkIGFtb3VudCBvZiB1c2Ugc3BhY2UgKi8KLQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAiaXNfbGVhZjogZnJlZSBzcGFjZSBzZWVtcyB3cm9uZzogJXoiLAotCQkJCSBiaCk7CisJCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgInJlaXNlcmZzLTUwODIiLAorCQkJCSAiZnJlZSBzcGFjZSBzZWVtcyB3cm9uZzogJXoiLCBiaCk7CiAJCXJldHVybiAwOwogCX0KIAkvLyBGSVhNRTogaXQgaXNfbGVhZiB3aWxsIGhpdCBwZXJmb3JtYW5jZSB0b28gbXVjaCAtIHdlIG1heSBoYXZlCkBAIC00NzEsMjkgKzQzNSwyOSBAQAogCXByZXZfbG9jYXRpb24gPSBibG9ja3NpemU7CiAJZm9yIChpID0gMDsgaSA8IG5yOyBpKyssIGloKyspIHsKIAkJaWYgKGxlX2loX2tfdHlwZShpaCkgPT0gVFlQRV9BTlkpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCQkJICJpc19sZWFmOiB3cm9uZyBpdGVtIHR5cGUgZm9yIGl0ZW0gJWgiLAorCQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAicmVpc2VyZnMtNTA4MyIsCisJCQkJCSAid3JvbmcgaXRlbSB0eXBlIGZvciBpdGVtICVoIiwKIAkJCQkJIGloKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWlmIChpaF9sb2NhdGlvbihpaCkgPj0gYmxvY2tzaXplCiAJCSAgICB8fCBpaF9sb2NhdGlvbihpaCkgPCBJSF9TSVpFICogbnIpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCQkJICJpc19sZWFmOiBpdGVtIGxvY2F0aW9uIHNlZW1zIHdyb25nOiAlaCIsCisJCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJyZWlzZXJmcy01MDg0IiwKKwkJCQkJICJpdGVtIGxvY2F0aW9uIHNlZW1zIHdyb25nOiAlaCIsCiAJCQkJCSBpaCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCQlpZiAoaWhfaXRlbV9sZW4oaWgpIDwgMQogCQkgICAgfHwgaWhfaXRlbV9sZW4oaWgpID4gTUFYX0lURU1fTEVOKGJsb2Nrc2l6ZSkpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCQkJICJpc19sZWFmOiBpdGVtIGxlbmd0aCBzZWVtcyB3cm9uZzogJWgiLAorCQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAicmVpc2VyZnMtNTA4NSIsCisJCQkJCSAiaXRlbSBsZW5ndGggc2VlbXMgd3Jvbmc6ICVoIiwKIAkJCQkJIGloKTsKIAkJCXJldHVybiAwOwogCQl9CiAJCWlmIChwcmV2X2xvY2F0aW9uIC0gaWhfbG9jYXRpb24oaWgpICE9IGloX2l0ZW1fbGVuKGloKSkgewotCQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJCQkgImlzX2xlYWY6IGl0ZW0gbG9jYXRpb24gc2VlbXMgd3JvbmcgKHNlY29uZCBvbmUpOiAlaCIsCi0JCQkJCSBpaCk7CisJCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJyZWlzZXJmcy01MDg2IiwKKwkJCQkJICJpdGVtIGxvY2F0aW9uIHNlZW1zIHdyb25nICIKKwkJCQkJICIoc2Vjb25kIG9uZSk6ICVoIiwgaWgpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAkJcHJldl9sb2NhdGlvbiA9IGloX2xvY2F0aW9uKGloKTsKQEAgLTUxNCwyNCArNDc4LDIzIEBACiAJbnIgPSBibGtoX2xldmVsKGJsa2gpOwogCWlmIChuciA8PSBESVNLX0xFQUZfTk9ERV9MRVZFTCB8fCBuciA+IE1BWF9IRUlHSFQpIHsKIAkJLyogdGhpcyBsZXZlbCBpcyBub3QgcG9zc2libGUgZm9yIGludGVybmFsIG5vZGVzICovCi0JCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwKLQkJCQkgImlzX2ludGVybmFsOiB0aGlzIHNob3VsZCBiZSBjYXVnaHQgZWFybGllciIpOworCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJyZWlzZXJmcy01MDg3IiwKKwkJCQkgInRoaXMgc2hvdWxkIGJlIGNhdWdodCBlYXJsaWVyIik7CiAJCXJldHVybiAwOwogCX0KIAogCW5yID0gYmxraF9ucl9pdGVtKGJsa2gpOwogCWlmIChuciA+IChibG9ja3NpemUgLSBCTEtIX1NJWkUgLSBEQ19TSVpFKSAvIChLRVlfU0laRSArIERDX1NJWkUpKSB7CiAJCS8qIGZvciBpbnRlcm5hbCB3aGljaCBpcyBub3Qgcm9vdCB3ZSBtaWdodCBjaGVjayBtaW4gbnVtYmVyIG9mIGtleXMgKi8KLQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJCSAiaXNfaW50ZXJuYWw6IG51bWJlciBvZiBrZXkgc2VlbXMgd3Jvbmc6ICV6IiwKLQkJCQkgYmgpOworCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJyZWlzZXJmcy01MDg4IiwKKwkJCQkgIm51bWJlciBvZiBrZXkgc2VlbXMgd3Jvbmc6ICV6IiwgYmgpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAl1c2VkX3NwYWNlID0gQkxLSF9TSVpFICsgS0VZX1NJWkUgKiBuciArIERDX1NJWkUgKiAobnIgKyAxKTsKIAlpZiAodXNlZF9zcGFjZSAhPSBibG9ja3NpemUgLSBibGtoX2ZyZWVfc3BhY2UoYmxraCkpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLAotCQkJCSAiaXNfaW50ZXJuYWw6IGZyZWUgc3BhY2Ugc2VlbXMgd3Jvbmc6ICV6IiwgYmgpOworCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsICJyZWlzZXJmcy01MDg5IiwKKwkJCQkgImZyZWUgc3BhY2Ugc2VlbXMgd3Jvbmc6ICV6IiwgYmgpOwogCQlyZXR1cm4gMDsKIAl9CiAJLy8gb25lIG1heSBpbWFnaW5lIG11Y2ggbW9yZSBjaGVja3MKQEAgLTU0Myw4ICs1MDYsOCBAQAogc3RhdGljIGludCBpc190cmVlX25vZGUoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IGxldmVsKQogewogCWlmIChCX0xFVkVMKGJoKSAhPSBsZXZlbCkgewotCQlyZWlzZXJmc193YXJuaW5nKE5VTEwsCi0JCQkJICJpc190cmVlX25vZGU6IG5vZGUgbGV2ZWwgJWQgZG9lcyBub3QgbWF0Y2ggdG8gdGhlIGV4cGVjdGVkIG9uZSAlZCIsCisJCXJlaXNlcmZzX3dhcm5pbmcoTlVMTCwgInJlaXNlcmZzLTUwOTAiLCAibm9kZSBsZXZlbCAlZCBkb2VzICIKKwkJCQkgIm5vdCBtYXRjaCB0byB0aGUgZXhwZWN0ZWQgb25lICVkIiwKIAkJCQkgQl9MRVZFTChiaCksIGxldmVsKTsKIAkJcmV0dXJuIDA7CiAJfQpAQCAtNTgwLDEwICs1NDMsMTAgQEAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICogQWxnb3JpdGhtICAgU2VhcmNoQnlLZXkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqCiAgKiAgICAgICAgICAgICBsb29rIGZvciBpdGVtIGluIHRoZSBEaXNrIFMrVHJlZSBieSBpdHMga2V5ICAgICAgICAgICAgICAgICoKLSAqIElucHV0OiAgcF9zX3NiICAgLSAgc3VwZXIgYmxvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKgotICogICAgICAgICBwX3Nfa2V5ICAtIHBvaW50ZXIgdG8gdGhlIGtleSB0byBzZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAqCisgKiBJbnB1dDogIHNiICAgLSAgc3VwZXIgYmxvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoKKyAqICAgICAgICAga2V5ICAtIHBvaW50ZXIgdG8gdGhlIGtleSB0byBzZWFyY2ggICAgICAgICAgICAgICAgICAgICAgICAgICAgKgogICogT3V0cHV0OiBJVEVNX0ZPVU5ELCBJVEVNX05PVF9GT1VORCBvciBJT19FUlJPUiAgICAgICAgICAgICAgICAgICAgICAgICAqCi0gKiAgICAgICAgIHBfc19zZWFyY2hfcGF0aCAtIHBhdGggZnJvbSB0aGUgcm9vdCB0byB0aGUgbmVlZGVkIGxlYWYgICAgICAgICoKKyAqICAgICAgICAgc2VhcmNoX3BhdGggLSBwYXRoIGZyb20gdGhlIHJvb3QgdG8gdGhlIG5lZWRlZCBsZWFmICAgICAgICAgICAgKgogICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogCiAvKiBUaGlzIGZ1bmN0aW9uIGZpbGxzIHVwIHRoZSBwYXRoIGZyb20gdGhlIHJvb3QgdG8gdGhlIGxlYWYgYXMgaXQKQEAgLTYwMCwyMiArNTYzLDIyIEBACiAgICBjb3JyZWN0bmVzcyBvZiB0aGUgdG9wIG9mIHRoZSBwYXRoIGJ1dCBuZWVkIG5vdCBiZSBjaGVja2VkIGZvciB0aGUKICAgIGNvcnJlY3RuZXNzIG9mIHRoZSBib3R0b20gb2YgdGhlIHBhdGggKi8KIC8qIFRoZSBmdW5jdGlvbiBpcyBOT1QgU0NIRURVTEUtU0FGRSEgKi8KLWludCBzZWFyY2hfYnlfa2V5KHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLCBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqcF9zX2tleSwJLyogS2V5IHRvIHNlYXJjaC4gKi8KLQkJICBzdHJ1Y3QgdHJlZXBhdGggKnBfc19zZWFyY2hfcGF0aCwvKiBUaGlzIHN0cnVjdHVyZSB3YXMKK2ludCBzZWFyY2hfYnlfa2V5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICprZXksCS8qIEtleSB0byBzZWFyY2guICovCisJCSAgc3RydWN0IHRyZWVwYXRoICpzZWFyY2hfcGF0aCwvKiBUaGlzIHN0cnVjdHVyZSB3YXMKIAkJCQkJCSAgIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQKIAkJCQkJCSAgIGJ5IHRoZSBjYWxsaW5nCiAJCQkJCQkgICBmdW5jdGlvbi4gSXQgaXMgZmlsbGVkIHVwCiAJCQkJCQkgICBieSB0aGlzIGZ1bmN0aW9uLiAgKi8KLQkJICBpbnQgbl9zdG9wX2xldmVsCS8qIEhvdyBmYXIgZG93biB0aGUgdHJlZSB0byBzZWFyY2guIFRvCisJCSAgaW50IHN0b3BfbGV2ZWwJLyogSG93IGZhciBkb3duIHRoZSB0cmVlIHRvIHNlYXJjaC4gVG8KIAkJCQkJICAgc3RvcCBhdCBsZWFmIGxldmVsIC0gc2V0IHRvCiAJCQkJCSAgIERJU0tfTEVBRl9OT0RFX0xFVkVMICovCiAgICAgKQogewotCWJfYmxvY2tucl90IG5fYmxvY2tfbnVtYmVyOworCWJfYmxvY2tucl90IGJsb2NrX251bWJlcjsKIAlpbnQgZXhwZWN0ZWRfbGV2ZWw7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfYmg7Ci0Jc3RydWN0IHBhdGhfZWxlbWVudCAqcF9zX2xhc3RfZWxlbWVudDsKLQlpbnQgbl9ub2RlX2xldmVsLCBuX3JldHZhbDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoOworCXN0cnVjdCBwYXRoX2VsZW1lbnQgKmxhc3RfZWxlbWVudDsKKwlpbnQgbm9kZV9sZXZlbCwgcmV0dmFsOwogCWludCByaWdodF9uZWlnaGJvcl9vZl9sZWFmX25vZGU7CiAJaW50IGZzX2dlbjsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnJlYWRhX2JoW1NFQVJDSF9CWV9LRVlfUkVBREFdOwpAQCAtNjIzLDgwICs1ODYsNzkgQEAKIAlpbnQgcmVhZGFfY291bnQgPSAwOwogCiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCi0JaW50IG5fcmVwZWF0X2NvdW50ZXIgPSAwOworCWludCByZXBlYXRfY291bnRlciA9IDA7CiAjZW5kaWYKIAotCVBST0NfSU5GT19JTkMocF9zX3NiLCBzZWFyY2hfYnlfa2V5KTsKKwlQUk9DX0lORk9fSU5DKHNiLCBzZWFyY2hfYnlfa2V5KTsKIAogCS8qIEFzIHdlIGFkZCBlYWNoIG5vZGUgdG8gYSBwYXRoIHdlIGluY3JlYXNlIGl0cyBjb3VudC4gIFRoaXMgbWVhbnMgdGhhdAogCSAgIHdlIG11c3QgYmUgY2FyZWZ1bCB0byByZWxlYXNlIGFsbCBub2RlcyBpbiBhIHBhdGggYmVmb3JlIHdlIGVpdGhlcgogCSAgIGRpc2NhcmQgdGhlIHBhdGggc3RydWN0IG9yIHJlLXVzZSB0aGUgcGF0aCBzdHJ1Y3QsIGFzIHdlIGRvIGhlcmUuICovCiAKLQlkZWNyZW1lbnRfY291bnRlcnNfaW5fcGF0aChwX3Nfc2VhcmNoX3BhdGgpOworCXBhdGhyZWxzZShzZWFyY2hfcGF0aCk7CiAKIAlyaWdodF9uZWlnaGJvcl9vZl9sZWFmX25vZGUgPSAwOwogCiAJLyogV2l0aCBlYWNoIGl0ZXJhdGlvbiBvZiB0aGlzIGxvb3Agd2Ugc2VhcmNoIHRocm91Z2ggdGhlIGl0ZW1zIGluIHRoZQogCSAgIGN1cnJlbnQgbm9kZSwgYW5kIGNhbGN1bGF0ZSB0aGUgbmV4dCBjdXJyZW50IG5vZGUobmV4dCBwYXRoIGVsZW1lbnQpCiAJICAgZm9yIHRoZSBuZXh0IGl0ZXJhdGlvbiBvZiB0aGlzIGxvb3AuLiAqLwotCW5fYmxvY2tfbnVtYmVyID0gU0JfUk9PVF9CTE9DSyhwX3Nfc2IpOworCWJsb2NrX251bWJlciA9IFNCX1JPT1RfQkxPQ0soc2IpOwogCWV4cGVjdGVkX2xldmVsID0gLTE7CiAJd2hpbGUgKDEpIHsKIAogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwotCQlpZiAoISgrK25fcmVwZWF0X2NvdW50ZXIgJSA1MDAwMCkpCi0JCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwgIlBBUC01MTAwOiBzZWFyY2hfYnlfa2V5OiAlczoiCi0JCQkJCSAidGhlcmUgd2VyZSAlZCBpdGVyYXRpb25zIG9mIHdoaWxlIGxvb3AgIgotCQkJCQkgImxvb2tpbmcgZm9yIGtleSAlSyIsCi0JCQkJCSBjdXJyZW50LT5jb21tLCBuX3JlcGVhdF9jb3VudGVyLAotCQkJCQkgcF9zX2tleSk7CisJCWlmICghKCsrcmVwZWF0X2NvdW50ZXIgJSA1MDAwMCkpCisJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiUEFQLTUxMDAiLAorCQkJCQkgIiVzOiB0aGVyZSB3ZXJlICVkIGl0ZXJhdGlvbnMgb2YgIgorCQkJCQkgIndoaWxlIGxvb3AgbG9va2luZyBmb3Iga2V5ICVLIiwKKwkJCQkJIGN1cnJlbnQtPmNvbW0sIHJlcGVhdF9jb3VudGVyLAorCQkJCQkga2V5KTsKICNlbmRpZgogCiAJCS8qIHByZXAgcGF0aCB0byBoYXZlIGFub3RoZXIgZWxlbWVudCBhZGRlZCB0byBpdC4gKi8KLQkJcF9zX2xhc3RfZWxlbWVudCA9Ci0JCSAgICBQQVRIX09GRlNFVF9QRUxFTUVOVChwX3Nfc2VhcmNoX3BhdGgsCi0JCQkJCSArK3Bfc19zZWFyY2hfcGF0aC0+cGF0aF9sZW5ndGgpOwotCQlmc19nZW4gPSBnZXRfZ2VuZXJhdGlvbihwX3Nfc2IpOworCQlsYXN0X2VsZW1lbnQgPQorCQkgICAgUEFUSF9PRkZTRVRfUEVMRU1FTlQoc2VhcmNoX3BhdGgsCisJCQkJCSArK3NlYXJjaF9wYXRoLT5wYXRoX2xlbmd0aCk7CisJCWZzX2dlbiA9IGdldF9nZW5lcmF0aW9uKHNiKTsKIAogCQkvKiBSZWFkIHRoZSBuZXh0IHRyZWUgbm9kZSwgYW5kIHNldCB0aGUgbGFzdCBlbGVtZW50IGluIHRoZSBwYXRoIHRvCiAJCSAgIGhhdmUgYSBwb2ludGVyIHRvIGl0LiAqLwotCQlpZiAoKHBfc19iaCA9IHBfc19sYXN0X2VsZW1lbnQtPnBlX2J1ZmZlciA9Ci0JCSAgICAgc2JfZ2V0YmxrKHBfc19zYiwgbl9ibG9ja19udW1iZXIpKSkgewotCQkJaWYgKCFidWZmZXJfdXB0b2RhdGUocF9zX2JoKSAmJiByZWFkYV9jb3VudCA+IDEpIHsKLQkJCQlzZWFyY2hfYnlfa2V5X3JlYWRhKHBfc19zYiwgcmVhZGFfYmgsCisJCWlmICgoYmggPSBsYXN0X2VsZW1lbnQtPnBlX2J1ZmZlciA9CisJCSAgICAgc2JfZ2V0YmxrKHNiLCBibG9ja19udW1iZXIpKSkgeworCQkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpICYmIHJlYWRhX2NvdW50ID4gMSkKKwkJCQlzZWFyY2hfYnlfa2V5X3JlYWRhKHNiLCByZWFkYV9iaCwKIAkJCQkJCSAgICByZWFkYV9ibG9ja3MsIHJlYWRhX2NvdW50KTsKLQkJCX0KLQkJCWxsX3J3X2Jsb2NrKFJFQUQsIDEsICZwX3NfYmgpOwotCQkJd2FpdF9vbl9idWZmZXIocF9zX2JoKTsKLQkJCWlmICghYnVmZmVyX3VwdG9kYXRlKHBfc19iaCkpCisJCQlsbF9yd19ibG9jayhSRUFELCAxLCAmYmgpOworCQkJd2FpdF9vbl9idWZmZXIoYmgpOworCQkJaWYgKCFidWZmZXJfdXB0b2RhdGUoYmgpKQogCQkJCWdvdG8gaW9fZXJyb3I7CiAJCX0gZWxzZSB7CiAJCSAgICAgIGlvX2Vycm9yOgotCQkJcF9zX3NlYXJjaF9wYXRoLT5wYXRoX2xlbmd0aC0tOwotCQkJcGF0aHJlbHNlKHBfc19zZWFyY2hfcGF0aCk7CisJCQlzZWFyY2hfcGF0aC0+cGF0aF9sZW5ndGgtLTsKKwkJCXBhdGhyZWxzZShzZWFyY2hfcGF0aCk7CiAJCQlyZXR1cm4gSU9fRVJST1I7CiAJCX0KIAkJcmVhZGFfY291bnQgPSAwOwogCQlpZiAoZXhwZWN0ZWRfbGV2ZWwgPT0gLTEpCi0JCQlleHBlY3RlZF9sZXZlbCA9IFNCX1RSRUVfSEVJR0hUKHBfc19zYik7CisJCQlleHBlY3RlZF9sZXZlbCA9IFNCX1RSRUVfSEVJR0hUKHNiKTsKIAkJZXhwZWN0ZWRfbGV2ZWwtLTsKIAogCQkvKiBJdCBpcyBwb3NzaWJsZSB0aGF0IHNjaGVkdWxlIG9jY3VycmVkLiBXZSBtdXN0IGNoZWNrIHdoZXRoZXIgdGhlIGtleQogCQkgICB0byBzZWFyY2ggaXMgc3RpbGwgaW4gdGhlIHRyZWUgcm9vdGVkIGZyb20gdGhlIGN1cnJlbnQgYnVmZmVyLiBJZgogCQkgICBub3QgdGhlbiByZXBlYXQgc2VhcmNoIGZyb20gdGhlIHJvb3QuICovCi0JCWlmIChmc19jaGFuZ2VkKGZzX2dlbiwgcF9zX3NiKSAmJgotCQkgICAgKCFCX0lTX0lOX1RSRUUocF9zX2JoKSB8fAotCQkgICAgIEJfTEVWRUwocF9zX2JoKSAhPSBleHBlY3RlZF9sZXZlbCB8fAotCQkgICAgICFrZXlfaW5fYnVmZmVyKHBfc19zZWFyY2hfcGF0aCwgcF9zX2tleSwgcF9zX3NiKSkpIHsKLQkJCVBST0NfSU5GT19JTkMocF9zX3NiLCBzZWFyY2hfYnlfa2V5X2ZzX2NoYW5nZWQpOwotCQkJUFJPQ19JTkZPX0lOQyhwX3Nfc2IsIHNlYXJjaF9ieV9rZXlfcmVzdGFydGVkKTsKLQkJCVBST0NfSU5GT19JTkMocF9zX3NiLAorCQlpZiAoZnNfY2hhbmdlZChmc19nZW4sIHNiKSAmJgorCQkgICAgKCFCX0lTX0lOX1RSRUUoYmgpIHx8CisJCSAgICAgQl9MRVZFTChiaCkgIT0gZXhwZWN0ZWRfbGV2ZWwgfHwKKwkJICAgICAha2V5X2luX2J1ZmZlcihzZWFyY2hfcGF0aCwga2V5LCBzYikpKSB7CisJCQlQUk9DX0lORk9fSU5DKHNiLCBzZWFyY2hfYnlfa2V5X2ZzX2NoYW5nZWQpOworCQkJUFJPQ19JTkZPX0lOQyhzYiwgc2VhcmNoX2J5X2tleV9yZXN0YXJ0ZWQpOworCQkJUFJPQ19JTkZPX0lOQyhzYiwKIAkJCQkgICAgICBzYmtfcmVzdGFydGVkW2V4cGVjdGVkX2xldmVsIC0gMV0pOwotCQkJZGVjcmVtZW50X2NvdW50ZXJzX2luX3BhdGgocF9zX3NlYXJjaF9wYXRoKTsKKwkJCXBhdGhyZWxzZShzZWFyY2hfcGF0aCk7CiAKIAkJCS8qIEdldCB0aGUgcm9vdCBibG9jayBudW1iZXIgc28gdGhhdCB3ZSBjYW4gcmVwZWF0IHRoZSBzZWFyY2gKIAkJCSAgIHN0YXJ0aW5nIGZyb20gdGhlIHJvb3QuICovCi0JCQluX2Jsb2NrX251bWJlciA9IFNCX1JPT1RfQkxPQ0socF9zX3NiKTsKKwkJCWJsb2NrX251bWJlciA9IFNCX1JPT1RfQkxPQ0soc2IpOwogCQkJZXhwZWN0ZWRfbGV2ZWwgPSAtMTsKIAkJCXJpZ2h0X25laWdoYm9yX29mX2xlYWZfbm9kZSA9IDA7CiAKQEAgLTcwNCw1MyArNjY2LDUzIEBACiAJCQljb250aW51ZTsKIAkJfQogCi0JCS8qIG9ubHkgY2hlY2sgdGhhdCB0aGUga2V5IGlzIGluIHRoZSBidWZmZXIgaWYgcF9zX2tleSBpcyBub3QKKwkJLyogb25seSBjaGVjayB0aGF0IHRoZSBrZXkgaXMgaW4gdGhlIGJ1ZmZlciBpZiBrZXkgaXMgbm90CiAJCSAgIGVxdWFsIHRvIHRoZSBNQVhfS0VZLiBMYXR0ZXIgY2FzZSBpcyBvbmx5IHBvc3NpYmxlIGluCiAJCSAgICJmaW5pc2hfdW5maW5pc2hlZCgpIiBwcm9jZXNzaW5nIGR1cmluZyBtb3VudC4gKi8KLQkJUkZBTFNFKGNvbXBfa2V5cygmTUFYX0tFWSwgcF9zX2tleSkgJiYKLQkJICAgICAgICFrZXlfaW5fYnVmZmVyKHBfc19zZWFyY2hfcGF0aCwgcF9zX2tleSwgcF9zX3NiKSwKKwkJUkZBTFNFKGNvbXBfa2V5cygmTUFYX0tFWSwga2V5KSAmJgorCQkgICAgICAgIWtleV9pbl9idWZmZXIoc2VhcmNoX3BhdGgsIGtleSwgc2IpLAogCQkgICAgICAgIlBBUC01MTMwOiBrZXkgaXMgbm90IGluIHRoZSBidWZmZXIiKTsKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKIAkJaWYgKGN1cl90YikgewogCQkJcHJpbnRfY3VyX3RiKCI1MTQwIik7Ci0JCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsCi0JCQkJICAgICAgICJQQVAtNTE0MDogc2VhcmNoX2J5X2tleTogc2NoZWR1bGUgb2NjdXJyZWQgaW4gZG9fYmFsYW5jZSEiKTsKKwkJCXJlaXNlcmZzX3BhbmljKHNiLCAiUEFQLTUxNDAiLAorCQkJCSAgICAgICAic2NoZWR1bGUgb2NjdXJyZWQgaW4gZG9fYmFsYW5jZSEiKTsKIAkJfQogI2VuZGlmCiAKIAkJLy8gbWFrZSBzdXJlLCB0aGF0IHRoZSBub2RlIGNvbnRlbnRzIGxvb2sgbGlrZSBhIG5vZGUgb2YKIAkJLy8gY2VydGFpbiBsZXZlbAotCQlpZiAoIWlzX3RyZWVfbm9kZShwX3NfYmgsIGV4cGVjdGVkX2xldmVsKSkgewotCQkJcmVpc2VyZnNfd2FybmluZyhwX3Nfc2IsICJ2cy01MTUwOiBzZWFyY2hfYnlfa2V5OiAiCi0JCQkJCSAiaW52YWxpZCBmb3JtYXQgZm91bmQgaW4gYmxvY2sgJWxkLiBGc2NrPyIsCi0JCQkJCSBwX3NfYmgtPmJfYmxvY2tucik7Ci0JCQlwYXRocmVsc2UocF9zX3NlYXJjaF9wYXRoKTsKKwkJaWYgKCFpc190cmVlX25vZGUoYmgsIGV4cGVjdGVkX2xldmVsKSkgeworCQkJcmVpc2VyZnNfZXJyb3Ioc2IsICJ2cy01MTUwIiwKKwkJCQkgICAgICAgImludmFsaWQgZm9ybWF0IGZvdW5kIGluIGJsb2NrICVsZC4gIgorCQkJCSAgICAgICAiRnNjaz8iLCBiaC0+Yl9ibG9ja25yKTsKKwkJCXBhdGhyZWxzZShzZWFyY2hfcGF0aCk7CiAJCQlyZXR1cm4gSU9fRVJST1I7CiAJCX0KIAogCQkvKiBvaywgd2UgaGF2ZSBhY3F1aXJlZCBuZXh0IGZvcm1hdHRlZCBub2RlIGluIHRoZSB0cmVlICovCi0JCW5fbm9kZV9sZXZlbCA9IEJfTEVWRUwocF9zX2JoKTsKKwkJbm9kZV9sZXZlbCA9IEJfTEVWRUwoYmgpOwogCi0JCVBST0NfSU5GT19CSF9TVEFUKHBfc19zYiwgcF9zX2JoLCBuX25vZGVfbGV2ZWwgLSAxKTsKKwkJUFJPQ19JTkZPX0JIX1NUQVQoc2IsIGJoLCBub2RlX2xldmVsIC0gMSk7CiAKLQkJUkZBTFNFKG5fbm9kZV9sZXZlbCA8IG5fc3RvcF9sZXZlbCwKKwkJUkZBTFNFKG5vZGVfbGV2ZWwgPCBzdG9wX2xldmVsLAogCQkgICAgICAgInZzLTUxNTI6IHRyZWUgbGV2ZWwgKCVkKSBpcyBsZXNzIHRoYW4gc3RvcCBsZXZlbCAoJWQpIiwKLQkJICAgICAgIG5fbm9kZV9sZXZlbCwgbl9zdG9wX2xldmVsKTsKKwkJICAgICAgIG5vZGVfbGV2ZWwsIHN0b3BfbGV2ZWwpOwogCi0JCW5fcmV0dmFsID0gYmluX3NlYXJjaChwX3Nfa2V5LCBCX05fUElURU1fSEVBRChwX3NfYmgsIDApLAotCQkJCSAgICAgIEJfTlJfSVRFTVMocF9zX2JoKSwKLQkJCQkgICAgICAobl9ub2RlX2xldmVsID09CisJCXJldHZhbCA9IGJpbl9zZWFyY2goa2V5LCBCX05fUElURU1fSEVBRChiaCwgMCksCisJCQkJICAgICAgQl9OUl9JVEVNUyhiaCksCisJCQkJICAgICAgKG5vZGVfbGV2ZWwgPT0KIAkJCQkgICAgICAgRElTS19MRUFGX05PREVfTEVWRUwpID8gSUhfU0laRSA6CiAJCQkJICAgICAgS0VZX1NJWkUsCi0JCQkJICAgICAgJihwX3NfbGFzdF9lbGVtZW50LT5wZV9wb3NpdGlvbikpOwotCQlpZiAobl9ub2RlX2xldmVsID09IG5fc3RvcF9sZXZlbCkgewotCQkJcmV0dXJuIG5fcmV0dmFsOworCQkJCSAgICAgICYobGFzdF9lbGVtZW50LT5wZV9wb3NpdGlvbikpOworCQlpZiAobm9kZV9sZXZlbCA9PSBzdG9wX2xldmVsKSB7CisJCQlyZXR1cm4gcmV0dmFsOwogCQl9CiAKIAkJLyogd2UgYXJlIG5vdCBpbiB0aGUgc3RvcCBsZXZlbCAqLwotCQlpZiAobl9yZXR2YWwgPT0gSVRFTV9GT1VORCkKKwkJaWYgKHJldHZhbCA9PSBJVEVNX0ZPVU5EKQogCQkJLyogaXRlbSBoYXMgYmVlbiBmb3VuZCwgc28gd2UgY2hvb3NlIHRoZSBwb2ludGVyIHdoaWNoIGlzIHRvIHRoZSByaWdodCBvZiB0aGUgZm91bmQgb25lICovCi0JCQlwX3NfbGFzdF9lbGVtZW50LT5wZV9wb3NpdGlvbisrOworCQkJbGFzdF9lbGVtZW50LT5wZV9wb3NpdGlvbisrOwogCiAJCS8qIGlmIGl0ZW0gd2FzIG5vdCBmb3VuZCB3ZSBjaG9vc2UgdGhlIHBvc2l0aW9uIHdoaWNoIGlzIHRvCiAJCSAgIHRoZSBsZWZ0IG9mIHRoZSBmb3VuZCBpdGVtLiBUaGlzIHJlcXVpcmVzIG5vIGNvZGUsCkBAIC03NTksMjQgKzcyMSwyNCBAQAogCQkvKiBTbyB3ZSBoYXZlIGNob3NlbiBhIHBvc2l0aW9uIGluIHRoZSBjdXJyZW50IG5vZGUgd2hpY2ggaXMKIAkJICAgYW4gaW50ZXJuYWwgbm9kZS4gIE5vdyB3ZSBjYWxjdWxhdGUgY2hpbGQgYmxvY2sgbnVtYmVyIGJ5CiAJCSAgIHBvc2l0aW9uIGluIHRoZSBub2RlLiAqLwotCQluX2Jsb2NrX251bWJlciA9Ci0JCSAgICBCX05fQ0hJTERfTlVNKHBfc19iaCwgcF9zX2xhc3RfZWxlbWVudC0+cGVfcG9zaXRpb24pOworCQlibG9ja19udW1iZXIgPQorCQkgICAgQl9OX0NISUxEX05VTShiaCwgbGFzdF9lbGVtZW50LT5wZV9wb3NpdGlvbik7CiAKIAkJLyogaWYgd2UgYXJlIGdvaW5nIHRvIHJlYWQgbGVhZiBub2RlcywgdHJ5IGZvciByZWFkIGFoZWFkIGFzIHdlbGwgKi8KLQkJaWYgKChwX3Nfc2VhcmNoX3BhdGgtPnJlYWRhICYgUEFUSF9SRUFEQSkgJiYKLQkJICAgIG5fbm9kZV9sZXZlbCA9PSBESVNLX0xFQUZfTk9ERV9MRVZFTCArIDEpIHsKLQkJCWludCBwb3MgPSBwX3NfbGFzdF9lbGVtZW50LT5wZV9wb3NpdGlvbjsKLQkJCWludCBsaW1pdCA9IEJfTlJfSVRFTVMocF9zX2JoKTsKKwkJaWYgKChzZWFyY2hfcGF0aC0+cmVhZGEgJiBQQVRIX1JFQURBKSAmJgorCQkgICAgbm9kZV9sZXZlbCA9PSBESVNLX0xFQUZfTk9ERV9MRVZFTCArIDEpIHsKKwkJCWludCBwb3MgPSBsYXN0X2VsZW1lbnQtPnBlX3Bvc2l0aW9uOworCQkJaW50IGxpbWl0ID0gQl9OUl9JVEVNUyhiaCk7CiAJCQlzdHJ1Y3QgcmVpc2VyZnNfa2V5ICpsZV9rZXk7CiAKLQkJCWlmIChwX3Nfc2VhcmNoX3BhdGgtPnJlYWRhICYgUEFUSF9SRUFEQV9CQUNLKQorCQkJaWYgKHNlYXJjaF9wYXRoLT5yZWFkYSAmIFBBVEhfUkVBREFfQkFDSykKIAkJCQlsaW1pdCA9IDA7CiAJCQl3aGlsZSAocmVhZGFfY291bnQgPCBTRUFSQ0hfQllfS0VZX1JFQURBKSB7CiAJCQkJaWYgKHBvcyA9PSBsaW1pdCkKIAkJCQkJYnJlYWs7CiAJCQkJcmVhZGFfYmxvY2tzW3JlYWRhX2NvdW50KytdID0KLQkJCQkgICAgQl9OX0NISUxEX05VTShwX3NfYmgsIHBvcyk7Ci0JCQkJaWYgKHBfc19zZWFyY2hfcGF0aC0+cmVhZGEgJiBQQVRIX1JFQURBX0JBQ0spCisJCQkJICAgIEJfTl9DSElMRF9OVU0oYmgsIHBvcyk7CisJCQkJaWYgKHNlYXJjaF9wYXRoLT5yZWFkYSAmIFBBVEhfUkVBREFfQkFDSykKIAkJCQkJcG9zLS07CiAJCQkJZWxzZQogCQkJCQlwb3MrKzsKQEAgLTc4NCw5ICs3NDYsOSBAQAogCQkJCS8qCiAJCQkJICogY2hlY2sgdG8gbWFrZSBzdXJlIHdlJ3JlIGluIHRoZSBzYW1lIG9iamVjdAogCQkJCSAqLwotCQkJCWxlX2tleSA9IEJfTl9QREVMSU1fS0VZKHBfc19iaCwgcG9zKTsKKwkJCQlsZV9rZXkgPSBCX05fUERFTElNX0tFWShiaCwgcG9zKTsKIAkJCQlpZiAobGUzMl90b19jcHUobGVfa2V5LT5rX29iamVjdGlkKSAhPQotCQkJCSAgICBwX3Nfa2V5LT5vbl9kaXNrX2tleS5rX29iamVjdGlkKSB7CisJCQkJICAgIGtleS0+b25fZGlza19rZXkua19vYmplY3RpZCkgewogCQkJCQlicmVhazsKIAkJCQl9CiAJCQl9CkBAIC03OTUsMTEgKzc1NywxMSBAQAogfQogCiAvKiBGb3JtIHRoZSBwYXRoIHRvIGFuIGl0ZW0gYW5kIHBvc2l0aW9uIGluIHRoaXMgaXRlbSB3aGljaCBjb250YWlucwotICAgZmlsZSBieXRlIGRlZmluZWQgYnkgcF9zX2tleS4gSWYgdGhlcmUgaXMgbm8gc3VjaCBpdGVtCisgICBmaWxlIGJ5dGUgZGVmaW5lZCBieSBrZXkuIElmIHRoZXJlIGlzIG5vIHN1Y2ggaXRlbQogICAgY29ycmVzcG9uZGluZyB0byB0aGUga2V5LCB3ZSBwb2ludCB0aGUgcGF0aCB0byB0aGUgaXRlbSB3aXRoCi0gICBtYXhpbWFsIGtleSBsZXNzIHRoYW4gcF9zX2tleSwgYW5kICpwX25fcG9zX2luX2l0ZW0gaXMgc2V0IHRvIG9uZQorICAgbWF4aW1hbCBrZXkgbGVzcyB0aGFuIGtleSwgYW5kICpwb3NfaW5faXRlbSBpcyBzZXQgdG8gb25lCiAgICBwYXN0IHRoZSBsYXN0IGVudHJ5L2J5dGUgaW4gdGhlIGl0ZW0uICBJZiBzZWFyY2hpbmcgZm9yIGVudHJ5IGluIGEKLSAgIGRpcmVjdG9yeSBpdGVtLCBhbmQgaXQgaXMgbm90IGZvdW5kLCAqcF9uX3Bvc19pbl9pdGVtIGlzIHNldCB0byBvbmUKKyAgIGRpcmVjdG9yeSBpdGVtLCBhbmQgaXQgaXMgbm90IGZvdW5kLCAqcG9zX2luX2l0ZW0gaXMgc2V0IHRvIG9uZQogICAgZW50cnkgbW9yZSB0aGFuIHRoZSBlbnRyeSB3aXRoIG1heGltYWwga2V5IHdoaWNoIGlzIGxlc3MgdGhhbiB0aGUKICAgIHNvdWdodCBrZXkuCiAKQEAgLTgxMCw0OCArNzcyLDQ4IEBACiAgICB1bml0cyBvZiBkaXJlY3RvcnkgZW50cmllcy4gICovCiAKIC8qIFRoZSBmdW5jdGlvbiBpcyBOT1QgU0NIRURVTEUtU0FGRSEgKi8KLWludCBzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwJLyogUG9pbnRlciB0byB0aGUgc3VwZXIgYmxvY2suICAgICAgICAgICovCitpbnQgc2VhcmNoX2Zvcl9wb3NpdGlvbl9ieV9rZXkoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwJLyogUG9pbnRlciB0byB0aGUgc3VwZXIgYmxvY2suICAgICAgICAgICovCiAJCQkgICAgICAgY29uc3Qgc3RydWN0IGNwdV9rZXkgKnBfY3B1X2tleSwJLyogS2V5IHRvIHNlYXJjaCAoY3B1IHZhcmlhYmxlKSAgICAgICAgICovCi0JCQkgICAgICAgc3RydWN0IHRyZWVwYXRoICpwX3Nfc2VhcmNoX3BhdGgJLyogRmlsbGVkIHVwIGJ5IHRoaXMgZnVuY3Rpb24uICAgICAgICAgICovCisJCQkgICAgICAgc3RydWN0IHRyZWVwYXRoICpzZWFyY2hfcGF0aAkvKiBGaWxsZWQgdXAgYnkgdGhpcyBmdW5jdGlvbi4gICAgICAgICAgKi8KICAgICApCiB7CiAJc3RydWN0IGl0ZW1faGVhZCAqcF9sZV9paDsJLyogcG9pbnRlciB0byBvbi1kaXNrIHN0cnVjdHVyZSAqLwotCWludCBuX2Jsa19zaXplOworCWludCBibGtfc2l6ZTsKIAlsb2ZmX3QgaXRlbV9vZmZzZXQsIG9mZnNldDsKIAlzdHJ1Y3QgcmVpc2VyZnNfZGlyX2VudHJ5IGRlOwogCWludCByZXR2YWw7CiAKIAkvKiBJZiBzZWFyY2hpbmcgZm9yIGRpcmVjdG9yeSBlbnRyeS4gKi8KIAlpZiAoaXNfZGlyZW50cnlfY3B1X2tleShwX2NwdV9rZXkpKQotCQlyZXR1cm4gc2VhcmNoX2J5X2VudHJ5X2tleShwX3Nfc2IsIHBfY3B1X2tleSwgcF9zX3NlYXJjaF9wYXRoLAorCQlyZXR1cm4gc2VhcmNoX2J5X2VudHJ5X2tleShzYiwgcF9jcHVfa2V5LCBzZWFyY2hfcGF0aCwKIAkJCQkJICAgJmRlKTsKIAogCS8qIElmIG5vdCBzZWFyY2hpbmcgZm9yIGRpcmVjdG9yeSBlbnRyeS4gKi8KIAogCS8qIElmIGl0ZW0gaXMgZm91bmQuICovCi0JcmV0dmFsID0gc2VhcmNoX2l0ZW0ocF9zX3NiLCBwX2NwdV9rZXksIHBfc19zZWFyY2hfcGF0aCk7CisJcmV0dmFsID0gc2VhcmNoX2l0ZW0oc2IsIHBfY3B1X2tleSwgc2VhcmNoX3BhdGgpOwogCWlmIChyZXR2YWwgPT0gSU9fRVJST1IpCiAJCXJldHVybiByZXR2YWw7CiAJaWYgKHJldHZhbCA9PSBJVEVNX0ZPVU5EKSB7CiAKIAkJUkZBTFNFKCFpaF9pdGVtX2xlbgogCQkgICAgICAgKEJfTl9QSVRFTV9IRUFECi0JCQkoUEFUSF9QTEFTVF9CVUZGRVIocF9zX3NlYXJjaF9wYXRoKSwKLQkJCSBQQVRIX0xBU1RfUE9TSVRJT04ocF9zX3NlYXJjaF9wYXRoKSkpLAorCQkJKFBBVEhfUExBU1RfQlVGRkVSKHNlYXJjaF9wYXRoKSwKKwkJCSBQQVRIX0xBU1RfUE9TSVRJT04oc2VhcmNoX3BhdGgpKSksCiAJCSAgICAgICAiUEFQLTUxNjU6IGl0ZW0gbGVuZ3RoIGVxdWFscyB6ZXJvIik7CiAKLQkJcG9zX2luX2l0ZW0ocF9zX3NlYXJjaF9wYXRoKSA9IDA7CisJCXBvc19pbl9pdGVtKHNlYXJjaF9wYXRoKSA9IDA7CiAJCXJldHVybiBQT1NJVElPTl9GT1VORDsKIAl9CiAKLQlSRkFMU0UoIVBBVEhfTEFTVF9QT1NJVElPTihwX3Nfc2VhcmNoX3BhdGgpLAorCVJGQUxTRSghUEFUSF9MQVNUX1BPU0lUSU9OKHNlYXJjaF9wYXRoKSwKIAkgICAgICAgIlBBUC01MTcwOiBwb3NpdGlvbiBlcXVhbHMgemVybyIpOwogCiAJLyogSXRlbSBpcyBub3QgZm91bmQuIFNldCBwYXRoIHRvIHRoZSBwcmV2aW91cyBpdGVtLiAqLwogCXBfbGVfaWggPQotCSAgICBCX05fUElURU1fSEVBRChQQVRIX1BMQVNUX0JVRkZFUihwX3Nfc2VhcmNoX3BhdGgpLAotCQkJICAgLS1QQVRIX0xBU1RfUE9TSVRJT04ocF9zX3NlYXJjaF9wYXRoKSk7Ci0Jbl9ibGtfc2l6ZSA9IHBfc19zYi0+c19ibG9ja3NpemU7CisJICAgIEJfTl9QSVRFTV9IRUFEKFBBVEhfUExBU1RfQlVGRkVSKHNlYXJjaF9wYXRoKSwKKwkJCSAgIC0tUEFUSF9MQVNUX1BPU0lUSU9OKHNlYXJjaF9wYXRoKSk7CisJYmxrX3NpemUgPSBzYi0+c19ibG9ja3NpemU7CiAKIAlpZiAoY29tcF9zaG9ydF9rZXlzKCYocF9sZV9paC0+aWhfa2V5KSwgcF9jcHVfa2V5KSkgewogCQlyZXR1cm4gRklMRV9OT1RfRk9VTkQ7CkBAIC04NjMsMTAgKzgyNSwxMCBAQAogCiAJLyogTmVlZGVkIGJ5dGUgaXMgY29udGFpbmVkIGluIHRoZSBpdGVtIHBvaW50ZWQgdG8gYnkgdGhlIHBhdGguICovCiAJaWYgKGl0ZW1fb2Zmc2V0IDw9IG9mZnNldCAmJgotCSAgICBpdGVtX29mZnNldCArIG9wX2J5dGVzX251bWJlcihwX2xlX2loLCBuX2Jsa19zaXplKSA+IG9mZnNldCkgewotCQlwb3NfaW5faXRlbShwX3Nfc2VhcmNoX3BhdGgpID0gb2Zmc2V0IC0gaXRlbV9vZmZzZXQ7CisJICAgIGl0ZW1fb2Zmc2V0ICsgb3BfYnl0ZXNfbnVtYmVyKHBfbGVfaWgsIGJsa19zaXplKSA+IG9mZnNldCkgeworCQlwb3NfaW5faXRlbShzZWFyY2hfcGF0aCkgPSBvZmZzZXQgLSBpdGVtX29mZnNldDsKIAkJaWYgKGlzX2luZGlyZWN0X2xlX2loKHBfbGVfaWgpKSB7Ci0JCQlwb3NfaW5faXRlbShwX3Nfc2VhcmNoX3BhdGgpIC89IG5fYmxrX3NpemU7CisJCQlwb3NfaW5faXRlbShzZWFyY2hfcGF0aCkgLz0gYmxrX3NpemU7CiAJCX0KIAkJcmV0dXJuIFBPU0lUSU9OX0ZPVU5EOwogCX0KQEAgLTg3NCwzMCArODM2LDMwIEBACiAJLyogTmVlZGVkIGJ5dGUgaXMgbm90IGNvbnRhaW5lZCBpbiB0aGUgaXRlbSBwb2ludGVkIHRvIGJ5IHRoZQogCSAgIHBhdGguIFNldCBwb3NfaW5faXRlbSBvdXQgb2YgdGhlIGl0ZW0uICovCiAJaWYgKGlzX2luZGlyZWN0X2xlX2loKHBfbGVfaWgpKQotCQlwb3NfaW5faXRlbShwX3Nfc2VhcmNoX3BhdGgpID0KKwkJcG9zX2luX2l0ZW0oc2VhcmNoX3BhdGgpID0KIAkJICAgIGloX2l0ZW1fbGVuKHBfbGVfaWgpIC8gVU5GTV9QX1NJWkU7CiAJZWxzZQotCQlwb3NfaW5faXRlbShwX3Nfc2VhcmNoX3BhdGgpID0gaWhfaXRlbV9sZW4ocF9sZV9paCk7CisJCXBvc19pbl9pdGVtKHNlYXJjaF9wYXRoKSA9IGloX2l0ZW1fbGVuKHBfbGVfaWgpOwogCiAJcmV0dXJuIFBPU0lUSU9OX05PVF9GT1VORDsKIH0KIAogLyogQ29tcGFyZSBnaXZlbiBpdGVtIGFuZCBpdGVtIHBvaW50ZWQgdG8gYnkgdGhlIHBhdGguICovCi1pbnQgY29tcF9pdGVtcyhjb25zdCBzdHJ1Y3QgaXRlbV9oZWFkICpzdG9yZWRfaWgsIGNvbnN0IHN0cnVjdCB0cmVlcGF0aCAqcF9zX3BhdGgpCitpbnQgY29tcF9pdGVtcyhjb25zdCBzdHJ1Y3QgaXRlbV9oZWFkICpzdG9yZWRfaWgsIGNvbnN0IHN0cnVjdCB0cmVlcGF0aCAqcGF0aCkKIHsKLQlzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBfc19iaDsKKwlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gUEFUSF9QTEFTVF9CVUZGRVIocGF0aCk7CiAJc3RydWN0IGl0ZW1faGVhZCAqaWg7CiAKIAkvKiBMYXN0IGJ1ZmZlciBhdCB0aGUgcGF0aCBpcyBub3QgaW4gdGhlIHRyZWUuICovCi0JaWYgKCFCX0lTX0lOX1RSRUUocF9zX2JoID0gUEFUSF9QTEFTVF9CVUZGRVIocF9zX3BhdGgpKSkKKwlpZiAoIUJfSVNfSU5fVFJFRShiaCkpCiAJCXJldHVybiAxOwogCiAJLyogTGFzdCBwYXRoIHBvc2l0aW9uIGlzIGludmFsaWQuICovCi0JaWYgKFBBVEhfTEFTVF9QT1NJVElPTihwX3NfcGF0aCkgPj0gQl9OUl9JVEVNUyhwX3NfYmgpKQorCWlmIChQQVRIX0xBU1RfUE9TSVRJT04ocGF0aCkgPj0gQl9OUl9JVEVNUyhiaCkpCiAJCXJldHVybiAxOwogCiAJLyogd2UgbmVlZCBvbmx5IHRvIGtub3csIHdoZXRoZXIgaXQgaXMgdGhlIHNhbWUgaXRlbSAqLwotCWloID0gZ2V0X2loKHBfc19wYXRoKTsKKwlpaCA9IGdldF9paChwYXRoKTsKIAlyZXR1cm4gbWVtY21wKHN0b3JlZF9paCwgaWgsIElIX1NJWkUpOwogfQogCkBAIC05MjQsOSArODg2LDkgQEAKIAl9CiAJLy8gbmV3IGZpbGUgZ2V0cyB0cnVuY2F0ZWQKIAlpZiAoZ2V0X2lub2RlX2l0ZW1fa2V5X3ZlcnNpb24oaW5vZGUpID09IEtFWV9GT1JNQVRfM182KSB7Ci0JCS8vIAorCQkvLwogCQlyb3VuZF9sZW4gPSBST1VORF9VUChuZXdfZmlsZV9sZW5ndGgpOwotCQkvKiB0aGlzIHdhcyBuX25ld19maWxlX2xlbmd0aCA8IGxlX2loIC4uLiAqLworCQkvKiB0aGlzIHdhcyBuZXdfZmlsZV9sZW5ndGggPCBsZV9paCAuLi4gKi8KIAkJaWYgKHJvdW5kX2xlbiA8IGxlX2loX2tfb2Zmc2V0KGxlX2loKSkgewogCQkJKmN1dF9zaXplID0gLShJSF9TSVpFICsgaWhfaXRlbV9sZW4obGVfaWgpKTsKIAkJCXJldHVybiBNX0RFTEVURTsJLyogRGVsZXRlIHRoaXMgaXRlbS4gKi8KQEAgLTk4Niw5NiArOTQ4LDk1IEBACiAgICAgSW4gY2FzZSBvZiBmaWxlIHRydW5jYXRlIGNhbGN1bGF0ZSB3aGV0aGVyIHRoaXMgaXRlbSBtdXN0IGJlIGRlbGV0ZWQvdHJ1bmNhdGVkIG9yIGxhc3QKICAgICB1bmZvcm1hdHRlZCBub2RlIG9mIHRoaXMgaXRlbSB3aWxsIGJlIGNvbnZlcnRlZCB0byBhIGRpcmVjdCBpdGVtLgogICAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhIGRldGVybWluYXRpb24gb2Ygd2hhdCBiYWxhbmNlIG1vZGUgdGhlIGNhbGxpbmcgZnVuY3Rpb24gc2hvdWxkIGVtcGxveS4gKi8KLXN0YXRpYyBjaGFyIHByZXBhcmVfZm9yX2RlbGV0ZV9vcl9jdXQoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB0cmVlcGF0aCAqcF9zX3BhdGgsIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICpwX3NfaXRlbV9rZXksIGludCAqcF9uX3JlbW92ZWQsCS8qIE51bWJlciBvZiB1bmZvcm1hdHRlZCBub2RlcyB3aGljaCB3ZXJlIHJlbW92ZWQKK3N0YXRpYyBjaGFyIHByZXBhcmVfZm9yX2RlbGV0ZV9vcl9jdXQoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCB0cmVlcGF0aCAqcGF0aCwgY29uc3Qgc3RydWN0IGNwdV9rZXkgKml0ZW1fa2V5LCBpbnQgKnJlbW92ZWQsCS8qIE51bWJlciBvZiB1bmZvcm1hdHRlZCBub2RlcyB3aGljaCB3ZXJlIHJlbW92ZWQKIAkJCQkJCQkJCQkJCQkJCQkJCQkJCQkgICBmcm9tIGVuZCBvZiB0aGUgZmlsZS4gKi8KLQkJCQkgICAgICBpbnQgKnBfbl9jdXRfc2l6ZSwgdW5zaWduZWQgbG9uZyBsb25nIG5fbmV3X2ZpbGVfbGVuZ3RoCS8qIE1BWF9LRVlfT0ZGU0VUIGluIGNhc2Ugb2YgZGVsZXRlLiAqLworCQkJCSAgICAgIGludCAqY3V0X3NpemUsIHVuc2lnbmVkIGxvbmcgbG9uZyBuZXdfZmlsZV9sZW5ndGgJLyogTUFYX0tFWV9PRkZTRVQgaW4gY2FzZSBvZiBkZWxldGUuICovCiAgICAgKQogewotCXN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiID0gaW5vZGUtPmlfc2I7Ci0Jc3RydWN0IGl0ZW1faGVhZCAqcF9sZV9paCA9IFBBVEhfUElURU1fSEVBRChwX3NfcGF0aCk7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpwX3NfYmggPSBQQVRIX1BMQVNUX0JVRkZFUihwX3NfcGF0aCk7CisJc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGlub2RlLT5pX3NiOworCXN0cnVjdCBpdGVtX2hlYWQgKnBfbGVfaWggPSBQQVRIX1BJVEVNX0hFQUQocGF0aCk7CisJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IFBBVEhfUExBU1RfQlVGRkVSKHBhdGgpOwogCiAJQlVHX09OKCF0aC0+dF90cmFuc19pZCk7CiAKIAkvKiBTdGF0X2RhdGEgaXRlbS4gKi8KIAlpZiAoaXNfc3RhdGRhdGFfbGVfaWgocF9sZV9paCkpIHsKIAotCQlSRkFMU0Uobl9uZXdfZmlsZV9sZW5ndGggIT0gbWF4X3JlaXNlcmZzX29mZnNldChpbm9kZSksCisJCVJGQUxTRShuZXdfZmlsZV9sZW5ndGggIT0gbWF4X3JlaXNlcmZzX29mZnNldChpbm9kZSksCiAJCSAgICAgICAiUEFQLTUyMTA6IG1vZGUgbXVzdCBiZSBNX0RFTEVURSIpOwogCi0JCSpwX25fY3V0X3NpemUgPSAtKElIX1NJWkUgKyBpaF9pdGVtX2xlbihwX2xlX2loKSk7CisJCSpjdXRfc2l6ZSA9IC0oSUhfU0laRSArIGloX2l0ZW1fbGVuKHBfbGVfaWgpKTsKIAkJcmV0dXJuIE1fREVMRVRFOwogCX0KIAogCS8qIERpcmVjdG9yeSBpdGVtLiAqLwogCWlmIChpc19kaXJlbnRyeV9sZV9paChwX2xlX2loKSkKLQkJcmV0dXJuIHByZXBhcmVfZm9yX2RpcmVudHJ5X2l0ZW0ocF9zX3BhdGgsIHBfbGVfaWgsIGlub2RlLAotCQkJCQkJIG5fbmV3X2ZpbGVfbGVuZ3RoLAotCQkJCQkJIHBfbl9jdXRfc2l6ZSk7CisJCXJldHVybiBwcmVwYXJlX2Zvcl9kaXJlbnRyeV9pdGVtKHBhdGgsIHBfbGVfaWgsIGlub2RlLAorCQkJCQkJIG5ld19maWxlX2xlbmd0aCwKKwkJCQkJCSBjdXRfc2l6ZSk7CiAKIAkvKiBEaXJlY3QgaXRlbS4gKi8KIAlpZiAoaXNfZGlyZWN0X2xlX2loKHBfbGVfaWgpKQotCQlyZXR1cm4gcHJlcGFyZV9mb3JfZGlyZWN0X2l0ZW0ocF9zX3BhdGgsIHBfbGVfaWgsIGlub2RlLAotCQkJCQkgICAgICAgbl9uZXdfZmlsZV9sZW5ndGgsIHBfbl9jdXRfc2l6ZSk7CisJCXJldHVybiBwcmVwYXJlX2Zvcl9kaXJlY3RfaXRlbShwYXRoLCBwX2xlX2loLCBpbm9kZSwKKwkJCQkJICAgICAgIG5ld19maWxlX2xlbmd0aCwgY3V0X3NpemUpOwogCiAJLyogQ2FzZSBvZiBhbiBpbmRpcmVjdCBpdGVtLiAqLwogCXsKLQkgICAgaW50IGJsa19zaXplID0gcF9zX3NiLT5zX2Jsb2Nrc2l6ZTsKKwkgICAgaW50IGJsa19zaXplID0gc2ItPnNfYmxvY2tzaXplOwogCSAgICBzdHJ1Y3QgaXRlbV9oZWFkIHNfaWg7CiAJICAgIGludCBuZWVkX3JlX3NlYXJjaDsKIAkgICAgaW50IGRlbGV0ZSA9IDA7CiAJICAgIGludCByZXN1bHQgPSBNX0NVVDsKIAkgICAgaW50IHBvcyA9IDA7CiAKLQkgICAgaWYgKCBuX25ld19maWxlX2xlbmd0aCA9PSBtYXhfcmVpc2VyZnNfb2Zmc2V0IChpbm9kZSkgKSB7CisJICAgIGlmICggbmV3X2ZpbGVfbGVuZ3RoID09IG1heF9yZWlzZXJmc19vZmZzZXQgKGlub2RlKSApIHsKIAkJLyogcHJlcGFyZV9mb3JfZGVsZXRlX29yX2N1dCgpIGlzIGNhbGxlZCBieQogCQkgKiByZWlzZXJmc19kZWxldGVfaXRlbSgpICovCi0JCW5fbmV3X2ZpbGVfbGVuZ3RoID0gMDsKKwkJbmV3X2ZpbGVfbGVuZ3RoID0gMDsKIAkJZGVsZXRlID0gMTsKIAkgICAgfQogCiAJICAgIGRvIHsKIAkJbmVlZF9yZV9zZWFyY2ggPSAwOwotCQkqcF9uX2N1dF9zaXplID0gMDsKLQkJcF9zX2JoID0gUEFUSF9QTEFTVF9CVUZGRVIocF9zX3BhdGgpOwotCQljb3B5X2l0ZW1faGVhZCgmc19paCwgUEFUSF9QSVRFTV9IRUFEKHBfc19wYXRoKSk7CisJCSpjdXRfc2l6ZSA9IDA7CisJCWJoID0gUEFUSF9QTEFTVF9CVUZGRVIocGF0aCk7CisJCWNvcHlfaXRlbV9oZWFkKCZzX2loLCBQQVRIX1BJVEVNX0hFQUQocGF0aCkpOwogCQlwb3MgPSBJX1VORk1fTlVNKCZzX2loKTsKIAotCQl3aGlsZSAobGVfaWhfa19vZmZzZXQgKCZzX2loKSArIChwb3MgLSAxKSAqIGJsa19zaXplID4gbl9uZXdfZmlsZV9sZW5ndGgpIHsKKwkJd2hpbGUgKGxlX2loX2tfb2Zmc2V0ICgmc19paCkgKyAocG9zIC0gMSkgKiBibGtfc2l6ZSA+IG5ld19maWxlX2xlbmd0aCkgewogCQkgICAgX19sZTMyICp1bmZtOwogCQkgICAgX191MzIgYmxvY2s7CiAKIAkJICAgIC8qIEVhY2ggdW5mb3JtYXR0ZWQgYmxvY2sgZGVsZXRpb24gbWF5IGludm9sdmUgb25lIGFkZGl0aW9uYWwKIAkJICAgICAqIGJpdG1hcCBibG9jayBpbnRvIHRoZSB0cmFuc2FjdGlvbiwgdGhlcmVieSB0aGUgaW5pdGlhbAogCQkgICAgICogam91cm5hbCBzcGFjZSByZXNlcnZhdGlvbiBtaWdodCBub3QgYmUgZW5vdWdoLiAqLwotCQkgICAgaWYgKCFkZWxldGUgJiYgKCpwX25fY3V0X3NpemUpICE9IDAgJiYKLQkJCXJlaXNlcmZzX3RyYW5zYWN0aW9uX2ZyZWVfc3BhY2UodGgpIDwgSk9VUk5BTF9GT1JfRlJFRV9CTE9DS19BTkRfVVBEQVRFX1NEKSB7CisJCSAgICBpZiAoIWRlbGV0ZSAmJiAoKmN1dF9zaXplKSAhPSAwICYmCisJCQlyZWlzZXJmc190cmFuc2FjdGlvbl9mcmVlX3NwYWNlKHRoKSA8IEpPVVJOQUxfRk9SX0ZSRUVfQkxPQ0tfQU5EX1VQREFURV9TRCkKIAkJCWJyZWFrOwotCQkgICAgfQogCi0JCSAgICB1bmZtID0gKF9fbGUzMiAqKUJfSV9QSVRFTShwX3NfYmgsICZzX2loKSArIHBvcyAtIDE7CisJCSAgICB1bmZtID0gKF9fbGUzMiAqKUJfSV9QSVRFTShiaCwgJnNfaWgpICsgcG9zIC0gMTsKIAkJICAgIGJsb2NrID0gZ2V0X2Jsb2NrX251bSh1bmZtLCAwKTsKIAogCQkgICAgaWYgKGJsb2NrICE9IDApIHsKLQkJCXJlaXNlcmZzX3ByZXBhcmVfZm9yX2pvdXJuYWwocF9zX3NiLCBwX3NfYmgsIDEpOworCQkJcmVpc2VyZnNfcHJlcGFyZV9mb3Jfam91cm5hbChzYiwgYmgsIDEpOwogCQkJcHV0X2Jsb2NrX251bSh1bmZtLCAwLCAwKTsKLQkJCWpvdXJuYWxfbWFya19kaXJ0eSAodGgsIHBfc19zYiwgcF9zX2JoKTsKKwkJCWpvdXJuYWxfbWFya19kaXJ0eSh0aCwgc2IsIGJoKTsKIAkJCXJlaXNlcmZzX2ZyZWVfYmxvY2sodGgsIGlub2RlLCBibG9jaywgMSk7CiAJCSAgICB9CiAKIAkJICAgIGNvbmRfcmVzY2hlZCgpOwogCi0JCSAgICBpZiAoaXRlbV9tb3ZlZCAoJnNfaWgsIHBfc19wYXRoKSkgIHsKKwkJICAgIGlmIChpdGVtX21vdmVkICgmc19paCwgcGF0aCkpICB7CiAJCQluZWVkX3JlX3NlYXJjaCA9IDE7CiAJCQlicmVhazsKIAkJICAgIH0KIAogCQkgICAgcG9zIC0tOwotCQkgICAgKCpwX25fcmVtb3ZlZCkgKys7Ci0JCSAgICAoKnBfbl9jdXRfc2l6ZSkgLT0gVU5GTV9QX1NJWkU7CisJCSAgICAoKnJlbW92ZWQpKys7CisJCSAgICAoKmN1dF9zaXplKSAtPSBVTkZNX1BfU0laRTsKIAogCQkgICAgaWYgKHBvcyA9PSAwKSB7Ci0JCQkoKnBfbl9jdXRfc2l6ZSkgLT0gSUhfU0laRTsKKwkJCSgqY3V0X3NpemUpIC09IElIX1NJWkU7CiAJCQlyZXN1bHQgPSBNX0RFTEVURTsKIAkJCWJyZWFrOwogCQkgICAgfQpAQCAtMTA4MywxMiArMTA0NCwxMiBAQAogCQkvKiBhIHRyaWNrLiAgSWYgdGhlIGJ1ZmZlciBoYXMgYmVlbiBsb2dnZWQsIHRoaXMgd2lsbCBkbyBub3RoaW5nLiAgSWYKIAkJKiogd2UndmUgYnJva2VuIHRoZSBsb29wIHdpdGhvdXQgbG9nZ2luZyBpdCwgaXQgd2lsbCByZXN0b3JlIHRoZQogCQkqKiBidWZmZXIgKi8KLQkJcmVpc2VyZnNfcmVzdG9yZV9wcmVwYXJlZF9idWZmZXIocF9zX3NiLCBwX3NfYmgpOworCQlyZWlzZXJmc19yZXN0b3JlX3ByZXBhcmVkX2J1ZmZlcihzYiwgYmgpOwogCSAgICB9IHdoaWxlIChuZWVkX3JlX3NlYXJjaCAmJgotCQkgICAgIHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHBfc19zYiwgcF9zX2l0ZW1fa2V5LCBwX3NfcGF0aCkgPT0gUE9TSVRJT05fRk9VTkQpOwotCSAgICBwb3NfaW5faXRlbShwX3NfcGF0aCkgPSBwb3MgKiBVTkZNX1BfU0laRTsKKwkJICAgICBzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleShzYiwgaXRlbV9rZXksIHBhdGgpID09IFBPU0lUSU9OX0ZPVU5EKTsKKwkgICAgcG9zX2luX2l0ZW0ocGF0aCkgPSBwb3MgKiBVTkZNX1BfU0laRTsKIAotCSAgICBpZiAoKnBfbl9jdXRfc2l6ZSA9PSAwKSB7CisJICAgIGlmICgqY3V0X3NpemUgPT0gMCkgewogCQkvKiBOb3RoaW5nIHdlcmUgY3V0LiBtYXliZSBjb252ZXJ0IGxhc3QgdW5mb3JtYXR0ZWQgbm9kZSB0byB0aGUKIAkJICogZGlyZWN0IGl0ZW0/ICovCiAJCXJlc3VsdCA9IE1fQ09OVkVSVDsKQEAgLTEwOTgsNDUgKzEwNTksNDUgQEAKIH0KIAogLyogQ2FsY3VsYXRlIG51bWJlciBvZiBieXRlcyB3aGljaCB3aWxsIGJlIGRlbGV0ZWQgb3IgY3V0IGR1cmluZyBiYWxhbmNlICovCi1zdGF0aWMgaW50IGNhbGNfZGVsZXRlZF9ieXRlc19udW1iZXIoc3RydWN0IHRyZWVfYmFsYW5jZSAqcF9zX3RiLCBjaGFyIGNfbW9kZSkKK3N0YXRpYyBpbnQgY2FsY19kZWxldGVkX2J5dGVzX251bWJlcihzdHJ1Y3QgdHJlZV9iYWxhbmNlICp0YiwgY2hhciBtb2RlKQogewotCWludCBuX2RlbF9zaXplOwotCXN0cnVjdCBpdGVtX2hlYWQgKnBfbGVfaWggPSBQQVRIX1BJVEVNX0hFQUQocF9zX3RiLT50Yl9wYXRoKTsKKwlpbnQgZGVsX3NpemU7CisJc3RydWN0IGl0ZW1faGVhZCAqcF9sZV9paCA9IFBBVEhfUElURU1fSEVBRCh0Yi0+dGJfcGF0aCk7CiAKIAlpZiAoaXNfc3RhdGRhdGFfbGVfaWgocF9sZV9paCkpCiAJCXJldHVybiAwOwogCi0Jbl9kZWxfc2l6ZSA9Ci0JICAgIChjX21vZGUgPT0KLQkgICAgIE1fREVMRVRFKSA/IGloX2l0ZW1fbGVuKHBfbGVfaWgpIDogLXBfc190Yi0+aW5zZXJ0X3NpemVbMF07CisJZGVsX3NpemUgPQorCSAgICAobW9kZSA9PQorCSAgICAgTV9ERUxFVEUpID8gaWhfaXRlbV9sZW4ocF9sZV9paCkgOiAtdGItPmluc2VydF9zaXplWzBdOwogCWlmIChpc19kaXJlbnRyeV9sZV9paChwX2xlX2loKSkgewotCQkvLyByZXR1cm4gRU1QVFlfRElSX1NJWkU7IC8qIFdlIGRlbGV0ZSBlbXR5IGRpcmVjdG9yaXMgb25seS4gKi8KLQkJLy8gd2UgY2FuJ3QgdXNlIEVNUFRZX0RJUl9TSVpFLCBhcyBvbGQgZm9ybWF0IGRpcnMgaGF2ZSBhIGRpZmZlcmVudAotCQkvLyBlbXB0eSBzaXplLiAgaWNrLiBGSVhNRSwgaXMgdGhpcyByaWdodD8KLQkJLy8KLQkJcmV0dXJuIG5fZGVsX3NpemU7CisJCS8qIHJldHVybiBFTVBUWV9ESVJfU0laRTsgV2UgZGVsZXRlIGVtdHkgZGlyZWN0b3JpcyBvbmx5LgorCQkgKiB3ZSBjYW4ndCB1c2UgRU1QVFlfRElSX1NJWkUsIGFzIG9sZCBmb3JtYXQgZGlycyBoYXZlIGEgZGlmZmVyZW50CisJCSAqIGVtcHR5IHNpemUuICBpY2suIEZJWE1FLCBpcyB0aGlzIHJpZ2h0PyAqLworCQlyZXR1cm4gZGVsX3NpemU7CiAJfQogCiAJaWYgKGlzX2luZGlyZWN0X2xlX2loKHBfbGVfaWgpKQotCQluX2RlbF9zaXplID0gKG5fZGVsX3NpemUgLyBVTkZNX1BfU0laRSkgKiAoUEFUSF9QTEFTVF9CVUZGRVIocF9zX3RiLT50Yl9wYXRoKS0+Yl9zaXplKTsJLy8gLSBnZXRfaWhfZnJlZV9zcGFjZSAocF9sZV9paCk7Ci0JcmV0dXJuIG5fZGVsX3NpemU7CisJCWRlbF9zaXplID0gKGRlbF9zaXplIC8gVU5GTV9QX1NJWkUpICoKKwkJCQkoUEFUSF9QTEFTVF9CVUZGRVIodGItPnRiX3BhdGgpLT5iX3NpemUpOworCXJldHVybiBkZWxfc2l6ZTsKIH0KIAogc3RhdGljIHZvaWQgaW5pdF90Yl9zdHJ1Y3Qoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCQkgICBzdHJ1Y3QgdHJlZV9iYWxhbmNlICpwX3NfdGIsCi0JCQkgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwKLQkJCSAgIHN0cnVjdCB0cmVlcGF0aCAqcF9zX3BhdGgsIGludCBuX3NpemUpCisJCQkgICBzdHJ1Y3QgdHJlZV9iYWxhbmNlICp0YiwKKwkJCSAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkgICBzdHJ1Y3QgdHJlZXBhdGggKnBhdGgsIGludCBzaXplKQogewogCiAJQlVHX09OKCF0aC0+dF90cmFuc19pZCk7CiAKLQltZW1zZXQocF9zX3RiLCAnXDAnLCBzaXplb2Yoc3RydWN0IHRyZWVfYmFsYW5jZSkpOwotCXBfc190Yi0+dHJhbnNhY3Rpb25faGFuZGxlID0gdGg7Ci0JcF9zX3RiLT50Yl9zYiA9IHBfc19zYjsKLQlwX3NfdGItPnRiX3BhdGggPSBwX3NfcGF0aDsKLQlQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19wYXRoLCBJTExFR0FMX1BBVEhfRUxFTUVOVF9PRkZTRVQpID0gTlVMTDsKLQlQQVRIX09GRlNFVF9QT1NJVElPTihwX3NfcGF0aCwgSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VUKSA9IDA7Ci0JcF9zX3RiLT5pbnNlcnRfc2l6ZVswXSA9IG5fc2l6ZTsKKwltZW1zZXQodGIsICdcMCcsIHNpemVvZihzdHJ1Y3QgdHJlZV9iYWxhbmNlKSk7CisJdGItPnRyYW5zYWN0aW9uX2hhbmRsZSA9IHRoOworCXRiLT50Yl9zYiA9IHNiOworCXRiLT50Yl9wYXRoID0gcGF0aDsKKwlQQVRIX09GRlNFVF9QQlVGRkVSKHBhdGgsIElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVCkgPSBOVUxMOworCVBBVEhfT0ZGU0VUX1BPU0lUSU9OKHBhdGgsIElMTEVHQUxfUEFUSF9FTEVNRU5UX09GRlNFVCkgPSAwOworCXRiLT5pbnNlcnRfc2l6ZVswXSA9IHNpemU7CiB9CiAKIHZvaWQgcGFkZF9pdGVtKGNoYXIgKml0ZW0sIGludCB0b3RhbF9sZW5ndGgsIGludCBsZW5ndGgpCkBAIC0xMTc1LDczICsxMTM2LDc3IEBACiB9CiAjZW5kaWYKIAotLyogRGVsZXRlIG9iamVjdCBpdGVtLiAqLwotaW50IHJlaXNlcmZzX2RlbGV0ZV9pdGVtKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLCBzdHJ1Y3QgdHJlZXBhdGggKnBfc19wYXRoLAkvKiBQYXRoIHRvIHRoZSBkZWxldGVkIGl0ZW0uICovCi0JCQkgY29uc3Qgc3RydWN0IGNwdV9rZXkgKnBfc19pdGVtX2tleSwJLyogS2V5IHRvIHNlYXJjaCBmb3IgdGhlIGRlbGV0ZWQgaXRlbS4gICovCi0JCQkgc3RydWN0IGlub2RlICpwX3NfaW5vZGUsCS8qIGlub2RlIGlzIGhlcmUganVzdCB0byB1cGRhdGUgaV9ibG9ja3MgYW5kIHF1b3RhcyAqLwotCQkJIHN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX3VuX2JoKQotewkJCQkvKiBOVUxMIG9yIHVuZm9ybWF0dGVkIG5vZGUgcG9pbnRlci4gICAgKi8KLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiA9IHBfc19pbm9kZS0+aV9zYjsKKy8qIERlbGV0ZSBvYmplY3QgaXRlbS4KKyAqIHRoICAgICAgIC0gYWN0aXZlIHRyYW5zYWN0aW9uIGhhbmRsZQorICogcGF0aCAgICAgLSBwYXRoIHRvIHRoZSBkZWxldGVkIGl0ZW0KKyAqIGl0ZW1fa2V5IC0ga2V5IHRvIHNlYXJjaCBmb3IgdGhlIGRlbGV0ZWQgaXRlbQorICogaW5kb2RlICAgLSB1c2VkIGZvciB1cGRhdGluZyBpX2Jsb2NrcyBhbmQgcXVvdGFzCisgKiB1bl9iaCAgICAtIE5VTEwgb3IgdW5mb3JtYXR0ZWQgbm9kZSBwb2ludGVyCisgKi8KK2ludCByZWlzZXJmc19kZWxldGVfaXRlbShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKKwkJCSBzdHJ1Y3QgdHJlZXBhdGggKnBhdGgsIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICppdGVtX2tleSwKKwkJCSBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnVuX2JoKQoreworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKIAlzdHJ1Y3QgdHJlZV9iYWxhbmNlIHNfZGVsX2JhbGFuY2U7CiAJc3RydWN0IGl0ZW1faGVhZCBzX2loOwogCXN0cnVjdCBpdGVtX2hlYWQgKnFfaWg7CiAJaW50IHF1b3RhX2N1dF9ieXRlczsKLQlpbnQgbl9yZXRfdmFsdWUsIG5fZGVsX3NpemUsIG5fcmVtb3ZlZDsKKwlpbnQgcmV0X3ZhbHVlLCBkZWxfc2l6ZSwgcmVtb3ZlZDsKIAogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwotCWNoYXIgY19tb2RlOwotCWludCBuX2l0ZXIgPSAwOworCWNoYXIgbW9kZTsKKwlpbnQgaXRlciA9IDA7CiAjZW5kaWYKIAogCUJVR19PTighdGgtPnRfdHJhbnNfaWQpOwogCi0JaW5pdF90Yl9zdHJ1Y3QodGgsICZzX2RlbF9iYWxhbmNlLCBwX3Nfc2IsIHBfc19wYXRoLAorCWluaXRfdGJfc3RydWN0KHRoLCAmc19kZWxfYmFsYW5jZSwgc2IsIHBhdGgsCiAJCSAgICAgICAwIC8qc2l6ZSBpcyB1bmtub3duICovICk7CiAKIAl3aGlsZSAoMSkgewotCQluX3JlbW92ZWQgPSAwOworCQlyZW1vdmVkID0gMDsKIAogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwotCQluX2l0ZXIrKzsKLQkJY19tb2RlID0KKwkJaXRlcisrOworCQltb2RlID0KICNlbmRpZgotCQkgICAgcHJlcGFyZV9mb3JfZGVsZXRlX29yX2N1dCh0aCwgcF9zX2lub2RlLCBwX3NfcGF0aCwKLQkJCQkJICAgICAgcF9zX2l0ZW1fa2V5LCAmbl9yZW1vdmVkLAotCQkJCQkgICAgICAmbl9kZWxfc2l6ZSwKLQkJCQkJICAgICAgbWF4X3JlaXNlcmZzX29mZnNldChwX3NfaW5vZGUpKTsKKwkJICAgIHByZXBhcmVfZm9yX2RlbGV0ZV9vcl9jdXQodGgsIGlub2RlLCBwYXRoLAorCQkJCQkgICAgICBpdGVtX2tleSwgJnJlbW92ZWQsCisJCQkJCSAgICAgICZkZWxfc2l6ZSwKKwkJCQkJICAgICAgbWF4X3JlaXNlcmZzX29mZnNldChpbm9kZSkpOwogCi0JCVJGQUxTRShjX21vZGUgIT0gTV9ERUxFVEUsICJQQVAtNTMyMDogbW9kZSBtdXN0IGJlIE1fREVMRVRFIik7CisJCVJGQUxTRShtb2RlICE9IE1fREVMRVRFLCAiUEFQLTUzMjA6IG1vZGUgbXVzdCBiZSBNX0RFTEVURSIpOwogCi0JCWNvcHlfaXRlbV9oZWFkKCZzX2loLCBQQVRIX1BJVEVNX0hFQUQocF9zX3BhdGgpKTsKLQkJc19kZWxfYmFsYW5jZS5pbnNlcnRfc2l6ZVswXSA9IG5fZGVsX3NpemU7CisJCWNvcHlfaXRlbV9oZWFkKCZzX2loLCBQQVRIX1BJVEVNX0hFQUQocGF0aCkpOworCQlzX2RlbF9iYWxhbmNlLmluc2VydF9zaXplWzBdID0gZGVsX3NpemU7CiAKLQkJbl9yZXRfdmFsdWUgPSBmaXhfbm9kZXMoTV9ERUxFVEUsICZzX2RlbF9iYWxhbmNlLCBOVUxMLCBOVUxMKTsKLQkJaWYgKG5fcmV0X3ZhbHVlICE9IFJFUEVBVF9TRUFSQ0gpCisJCXJldF92YWx1ZSA9IGZpeF9ub2RlcyhNX0RFTEVURSwgJnNfZGVsX2JhbGFuY2UsIE5VTEwsIE5VTEwpOworCQlpZiAocmV0X3ZhbHVlICE9IFJFUEVBVF9TRUFSQ0gpCiAJCQlicmVhazsKIAotCQlQUk9DX0lORk9fSU5DKHBfc19zYiwgZGVsZXRlX2l0ZW1fcmVzdGFydGVkKTsKKwkJUFJPQ19JTkZPX0lOQyhzYiwgZGVsZXRlX2l0ZW1fcmVzdGFydGVkKTsKIAogCQkvLyBmaWxlIHN5c3RlbSBjaGFuZ2VkLCByZXBlYXQgc2VhcmNoCi0JCW5fcmV0X3ZhbHVlID0KLQkJICAgIHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHBfc19zYiwgcF9zX2l0ZW1fa2V5LCBwX3NfcGF0aCk7Ci0JCWlmIChuX3JldF92YWx1ZSA9PSBJT19FUlJPUikKKwkJcmV0X3ZhbHVlID0KKwkJICAgIHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHNiLCBpdGVtX2tleSwgcGF0aCk7CisJCWlmIChyZXRfdmFsdWUgPT0gSU9fRVJST1IpCiAJCQlicmVhazsKLQkJaWYgKG5fcmV0X3ZhbHVlID09IEZJTEVfTk9UX0ZPVU5EKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwKLQkJCQkJICJ2cy01MzQwOiByZWlzZXJmc19kZWxldGVfaXRlbTogIgorCQlpZiAocmV0X3ZhbHVlID09IEZJTEVfTk9UX0ZPVU5EKSB7CisJCQlyZWlzZXJmc193YXJuaW5nKHNiLCAidnMtNTM0MCIsCiAJCQkJCSAibm8gaXRlbXMgb2YgdGhlIGZpbGUgJUsgZm91bmQiLAotCQkJCQkgcF9zX2l0ZW1fa2V5KTsKKwkJCQkJIGl0ZW1fa2V5KTsKIAkJCWJyZWFrOwogCQl9CiAJfQkJCS8qIHdoaWxlICgxKSAqLwogCi0JaWYgKG5fcmV0X3ZhbHVlICE9IENBUlJZX09OKSB7CisJaWYgKHJldF92YWx1ZSAhPSBDQVJSWV9PTikgewogCQl1bmZpeF9ub2Rlcygmc19kZWxfYmFsYW5jZSk7CiAJCXJldHVybiAwOwogCX0KIAkvLyByZWlzZXJmc19kZWxldGVfaXRlbSByZXR1cm5zIGl0ZW0gbGVuZ3RoIHdoZW4gc3VjY2VzcwotCW5fcmV0X3ZhbHVlID0gY2FsY19kZWxldGVkX2J5dGVzX251bWJlcigmc19kZWxfYmFsYW5jZSwgTV9ERUxFVEUpOwotCXFfaWggPSBnZXRfaWgocF9zX3BhdGgpOworCXJldF92YWx1ZSA9IGNhbGNfZGVsZXRlZF9ieXRlc19udW1iZXIoJnNfZGVsX2JhbGFuY2UsIE1fREVMRVRFKTsKKwlxX2loID0gZ2V0X2loKHBhdGgpOwogCXF1b3RhX2N1dF9ieXRlcyA9IGloX2l0ZW1fbGVuKHFfaWgpOwogCiAJLyogaGFjayBzbyB0aGUgcXVvdGEgY29kZSBkb2Vzbid0IGhhdmUgdG8gZ3Vlc3MgaWYgdGhlIGZpbGUKQEAgLTEyNTAsMTUgKzEyMTUsMTUgQEAKIAkgKiogc3BsaXQgaW50byBtdWx0aXBsZSBpdGVtcywgYW5kIHdlIG9ubHkgd2FudCB0byBkZWNyZW1lbnQgZm9yCiAJICoqIHRoZSB1bmZtIG5vZGUgb25jZQogCSAqLwotCWlmICghU19JU0xOSyhwX3NfaW5vZGUtPmlfbW9kZSkgJiYgaXNfZGlyZWN0X2xlX2loKHFfaWgpKSB7Ci0JCWlmICgobGVfaWhfa19vZmZzZXQocV9paCkgJiAocF9zX3NiLT5zX2Jsb2Nrc2l6ZSAtIDEpKSA9PSAxKSB7Ci0JCQlxdW90YV9jdXRfYnl0ZXMgPSBwX3Nfc2ItPnNfYmxvY2tzaXplICsgVU5GTV9QX1NJWkU7CisJaWYgKCFTX0lTTE5LKGlub2RlLT5pX21vZGUpICYmIGlzX2RpcmVjdF9sZV9paChxX2loKSkgeworCQlpZiAoKGxlX2loX2tfb2Zmc2V0KHFfaWgpICYgKHNiLT5zX2Jsb2Nrc2l6ZSAtIDEpKSA9PSAxKSB7CisJCQlxdW90YV9jdXRfYnl0ZXMgPSBzYi0+c19ibG9ja3NpemUgKyBVTkZNX1BfU0laRTsKIAkJfSBlbHNlIHsKIAkJCXF1b3RhX2N1dF9ieXRlcyA9IDA7CiAJCX0KIAl9CiAKLQlpZiAocF9zX3VuX2JoKSB7CisJaWYgKHVuX2JoKSB7CiAJCWludCBvZmY7CiAJCWNoYXIgKmRhdGE7CiAKQEAgLTEyNzYsMzEgKzEyNDEsMzEgQEAKIAkJICoqIFRoZSB1bmZvcm1hdHRlZCBub2RlIG11c3QgYmUgZGlydGllZCBsYXRlciBvbi4gIFdlIGNhbid0IGJlCiAJCSAqKiBzdXJlIGhlcmUgaWYgdGhlIGVudGlyZSB0YWlsIGhhcyBiZWVuIGRlbGV0ZWQgeWV0LgogCQkgKioKLQkJICoqIHBfc191bl9iaCBpcyBmcm9tIHRoZSBwYWdlIGNhY2hlIChhbGwgdW5mb3JtYXR0ZWQgbm9kZXMgYXJlCisJCSAqKiB1bl9iaCBpcyBmcm9tIHRoZSBwYWdlIGNhY2hlIChhbGwgdW5mb3JtYXR0ZWQgbm9kZXMgYXJlCiAJCSAqKiBmcm9tIHRoZSBwYWdlIGNhY2hlKSBhbmQgbWlnaHQgYmUgYSBoaWdobWVtIHBhZ2UuICBTbywgd2UKLQkJICoqIGNhbid0IHVzZSBwX3NfdW5fYmgtPmJfZGF0YS4KKwkJICoqIGNhbid0IHVzZSB1bl9iaC0+Yl9kYXRhLgogCQkgKiogLWNsbQogCQkgKi8KIAotCQlkYXRhID0ga21hcF9hdG9taWMocF9zX3VuX2JoLT5iX3BhZ2UsIEtNX1VTRVIwKTsKKwkJZGF0YSA9IGttYXBfYXRvbWljKHVuX2JoLT5iX3BhZ2UsIEtNX1VTRVIwKTsKIAkJb2ZmID0gKChsZV9paF9rX29mZnNldCgmc19paCkgLSAxKSAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKSk7CiAJCW1lbWNweShkYXRhICsgb2ZmLAotCQkgICAgICAgQl9JX1BJVEVNKFBBVEhfUExBU1RfQlVGRkVSKHBfc19wYXRoKSwgJnNfaWgpLAotCQkgICAgICAgbl9yZXRfdmFsdWUpOworCQkgICAgICAgQl9JX1BJVEVNKFBBVEhfUExBU1RfQlVGRkVSKHBhdGgpLCAmc19paCksCisJCSAgICAgICByZXRfdmFsdWUpOwogCQlrdW5tYXBfYXRvbWljKGRhdGEsIEtNX1VTRVIwKTsKIAl9CiAJLyogUGVyZm9ybSBiYWxhbmNpbmcgYWZ0ZXIgYWxsIHJlc291cmNlcyBoYXZlIGJlZW4gY29sbGVjdGVkIGF0IG9uY2UuICovCiAJZG9fYmFsYW5jZSgmc19kZWxfYmFsYW5jZSwgTlVMTCwgTlVMTCwgTV9ERUxFVEUpOwogCiAjaWZkZWYgUkVJU0VSUVVPVEFfREVCVUcKLQlyZWlzZXJmc19kZWJ1ZyhwX3Nfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCisJcmVpc2VyZnNfZGVidWcoc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCSAgICAgICAicmVpc2VycXVvdGEgZGVsZXRlX2l0ZW0oKTogZnJlZWluZyAldSwgaWQ9JXUgdHlwZT0lYyIsCi0JCSAgICAgICBxdW90YV9jdXRfYnl0ZXMsIHBfc19pbm9kZS0+aV91aWQsIGhlYWQydHlwZSgmc19paCkpOworCQkgICAgICAgcXVvdGFfY3V0X2J5dGVzLCBpbm9kZS0+aV91aWQsIGhlYWQydHlwZSgmc19paCkpOwogI2VuZGlmCi0JdmZzX2RxX2ZyZWVfc3BhY2Vfbm9kaXJ0eShwX3NfaW5vZGUsIHF1b3RhX2N1dF9ieXRlcyk7CisJdmZzX2RxX2ZyZWVfc3BhY2Vfbm9kaXJ0eShpbm9kZSwgcXVvdGFfY3V0X2J5dGVzKTsKIAogCS8qIFJldHVybiBkZWxldGVkIGJvZHkgbGVuZ3RoICovCi0JcmV0dXJuIG5fcmV0X3ZhbHVlOworCXJldHVybiByZXRfdmFsdWU7CiB9CiAKIC8qIFN1bW1hcnkgT2YgTWVjaGFuaXNtcyBGb3IgSGFuZGxpbmcgQ29sbGlzaW9ucyBCZXR3ZWVuIFByb2Nlc3NlczoKQEAgLTEzMzgsMTAgKzEzMDMsOSBAQAogCXdoaWxlICgxKSB7CiAJCXJldHZhbCA9IHNlYXJjaF9pdGVtKHRoLT50X3N1cGVyLCAmY3B1X2tleSwgJnBhdGgpOwogCQlpZiAocmV0dmFsID09IElPX0VSUk9SKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHRoLT50X3N1cGVyLAotCQkJCQkgInZzLTUzNTA6IHJlaXNlcmZzX2RlbGV0ZV9zb2xpZF9pdGVtOiAiCi0JCQkJCSAiaS9vIGZhaWx1cmUgb2NjdXJyZWQgdHJ5aW5nIHRvIGRlbGV0ZSAlSyIsCi0JCQkJCSAmY3B1X2tleSk7CisJCQlyZWlzZXJmc19lcnJvcih0aC0+dF9zdXBlciwgInZzLTUzNTAiLAorCQkJCSAgICAgICAiaS9vIGZhaWx1cmUgb2NjdXJyZWQgdHJ5aW5nICIKKwkJCQkgICAgICAgInRvIGRlbGV0ZSAlSyIsICZjcHVfa2V5KTsKIAkJCWJyZWFrOwogCQl9CiAJCWlmIChyZXR2YWwgIT0gSVRFTV9GT1VORCkgewpAQCAtMTM1NSw5ICsxMzE5LDggQEAKIAkJCSAgICAgR0VUX0dFTkVSQVRJT05fTlVNQkVSKGxlX2tleV9rX29mZnNldAogCQkJCQkJICAgKGxlX2tleV92ZXJzaW9uKGtleSksCiAJCQkJCQkgICAga2V5KSkgPT0gMSkpCi0JCQkJcmVpc2VyZnNfd2FybmluZyh0aC0+dF9zdXBlciwKLQkJCQkJCSAidnMtNTM1NTogcmVpc2VyZnNfZGVsZXRlX3NvbGlkX2l0ZW06ICVrIG5vdCBmb3VuZCIsCi0JCQkJCQkga2V5KTsKKwkJCQlyZWlzZXJmc193YXJuaW5nKHRoLT50X3N1cGVyLCAidnMtNTM1NSIsCisJCQkJCQkgIiVrIG5vdCBmb3VuZCIsIGtleSk7CiAJCQlicmVhazsKIAkJfQogCQlpZiAoIXRiX2luaXQpIHsKQEAgLTEzODksOCArMTM1Miw3IEBACiAJCQlicmVhazsKIAkJfQogCQkvLyBJT19FUlJPUiwgTk9fRElTS19TUEFDRSwgZXRjCi0JCXJlaXNlcmZzX3dhcm5pbmcodGgtPnRfc3VwZXIsCi0JCQkJICJ2cy01MzYwOiByZWlzZXJmc19kZWxldGVfc29saWRfaXRlbTogIgorCQlyZWlzZXJmc193YXJuaW5nKHRoLT50X3N1cGVyLCAidnMtNTM2MCIsCiAJCQkJICJjb3VsZCBub3QgZGVsZXRlICVLIGR1ZSB0byBmaXhfbm9kZXMgZmFpbHVyZSIsCiAJCQkJICZjcHVfa2V5KTsKIAkJdW5maXhfbm9kZXMoJnRiKTsKQEAgLTE0NjIsMzYgKzE0MjQsMzcgQEAKIH0KIAogc3RhdGljIGludCBtYXliZV9pbmRpcmVjdF90b19kaXJlY3Qoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCQkJICAgIHN0cnVjdCBpbm9kZSAqcF9zX2lub2RlLAorCQkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCSAgICBzdHJ1Y3QgcGFnZSAqcGFnZSwKLQkJCQkgICAgc3RydWN0IHRyZWVwYXRoICpwX3NfcGF0aCwKLQkJCQkgICAgY29uc3Qgc3RydWN0IGNwdV9rZXkgKnBfc19pdGVtX2tleSwKLQkJCQkgICAgbG9mZl90IG5fbmV3X2ZpbGVfc2l6ZSwgY2hhciAqcF9jX21vZGUpCisJCQkJICAgIHN0cnVjdCB0cmVlcGF0aCAqcGF0aCwKKwkJCQkgICAgY29uc3Qgc3RydWN0IGNwdV9rZXkgKml0ZW1fa2V5LAorCQkJCSAgICBsb2ZmX3QgbmV3X2ZpbGVfc2l6ZSwgY2hhciAqbW9kZSkKIHsKLQlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiA9IHBfc19pbm9kZS0+aV9zYjsKLQlpbnQgbl9ibG9ja19zaXplID0gcF9zX3NiLT5zX2Jsb2Nrc2l6ZTsKKwlzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiID0gaW5vZGUtPmlfc2I7CisJaW50IGJsb2NrX3NpemUgPSBzYi0+c19ibG9ja3NpemU7CiAJaW50IGN1dF9ieXRlczsKIAlCVUdfT04oIXRoLT50X3RyYW5zX2lkKTsKLQlCVUdfT04obl9uZXdfZmlsZV9zaXplICE9IHBfc19pbm9kZS0+aV9zaXplKTsKKwlCVUdfT04obmV3X2ZpbGVfc2l6ZSAhPSBpbm9kZS0+aV9zaXplKTsKIAogCS8qIHRoZSBwYWdlIGJlaW5nIHNlbnQgaW4gY291bGQgYmUgTlVMTCBpZiB0aGVyZSB3YXMgYW4gaS9vIGVycm9yCiAJICoqIHJlYWRpbmcgaW4gdGhlIGxhc3QgYmxvY2suICBUaGUgdXNlciB3aWxsIGhpdCBwcm9ibGVtcyB0cnlpbmcgdG8KIAkgKiogcmVhZCB0aGUgZmlsZSwgYnV0IGZvciBub3cgd2UganVzdCBza2lwIHRoZSBpbmRpcmVjdDJkaXJlY3QKIAkgKi8KLQlpZiAoYXRvbWljX3JlYWQoJnBfc19pbm9kZS0+aV9jb3VudCkgPiAxIHx8Ci0JICAgICF0YWlsX2hhc190b19iZV9wYWNrZWQocF9zX2lub2RlKSB8fAotCSAgICAhcGFnZSB8fCAoUkVJU0VSRlNfSShwX3NfaW5vZGUpLT5pX2ZsYWdzICYgaV9ub3BhY2tfbWFzaykpIHsKLQkJLy8gbGVhdmUgdGFpbCBpbiBhbiB1bmZvcm1hdHRlZCBub2RlICAgIAotCQkqcF9jX21vZGUgPSBNX1NLSVBfQkFMQU5DSU5HOworCWlmIChhdG9taWNfcmVhZCgmaW5vZGUtPmlfY291bnQpID4gMSB8fAorCSAgICAhdGFpbF9oYXNfdG9fYmVfcGFja2VkKGlub2RlKSB8fAorCSAgICAhcGFnZSB8fCAoUkVJU0VSRlNfSShpbm9kZSktPmlfZmxhZ3MgJiBpX25vcGFja19tYXNrKSkgeworCQkvKiBsZWF2ZSB0YWlsIGluIGFuIHVuZm9ybWF0dGVkIG5vZGUgKi8KKwkJKm1vZGUgPSBNX1NLSVBfQkFMQU5DSU5HOwogCQljdXRfYnl0ZXMgPQotCQkgICAgbl9ibG9ja19zaXplIC0gKG5fbmV3X2ZpbGVfc2l6ZSAmIChuX2Jsb2NrX3NpemUgLSAxKSk7Ci0JCXBhdGhyZWxzZShwX3NfcGF0aCk7CisJCSAgICBibG9ja19zaXplIC0gKG5ld19maWxlX3NpemUgJiAoYmxvY2tfc2l6ZSAtIDEpKTsKKwkJcGF0aHJlbHNlKHBhdGgpOwogCQlyZXR1cm4gY3V0X2J5dGVzOwogCX0KLQkvKiBQZXJtb3JtIHRoZSBjb252ZXJzaW9uIHRvIGEgZGlyZWN0X2l0ZW0uICovCi0JLypyZXR1cm4gaW5kaXJlY3RfdG9fZGlyZWN0IChwX3NfaW5vZGUsIHBfc19wYXRoLCBwX3NfaXRlbV9rZXksIG5fbmV3X2ZpbGVfc2l6ZSwgcF9jX21vZGUpOyAqLwotCXJldHVybiBpbmRpcmVjdDJkaXJlY3QodGgsIHBfc19pbm9kZSwgcGFnZSwgcF9zX3BhdGgsIHBfc19pdGVtX2tleSwKLQkJCSAgICAgICBuX25ld19maWxlX3NpemUsIHBfY19tb2RlKTsKKwkvKiBQZXJmb3JtIHRoZSBjb252ZXJzaW9uIHRvIGEgZGlyZWN0X2l0ZW0uICovCisJLyogcmV0dXJuIGluZGlyZWN0X3RvX2RpcmVjdChpbm9kZSwgcGF0aCwgaXRlbV9rZXksCisJCQkJICBuZXdfZmlsZV9zaXplLCBtb2RlKTsgKi8KKwlyZXR1cm4gaW5kaXJlY3QyZGlyZWN0KHRoLCBpbm9kZSwgcGFnZSwgcGF0aCwgaXRlbV9rZXksCisJCQkgICAgICAgbmV3X2ZpbGVfc2l6ZSwgbW9kZSk7CiB9CiAKIC8qIHdlIGRpZCBpbmRpcmVjdF90b19kaXJlY3QgY29udmVyc2lvbi4gQW5kIHdlIGhhdmUgaW5zZXJ0ZWQgZGlyZWN0CkBAIC0xNTE1LDggKzE0NzgsOCBAQAogCQkvKiBsb29rIGZvciB0aGUgbGFzdCBieXRlIG9mIHRoZSB0YWlsICovCiAJCWlmIChzZWFyY2hfZm9yX3Bvc2l0aW9uX2J5X2tleShpbm9kZS0+aV9zYiwgJnRhaWxfa2V5LCBwYXRoKSA9PQogCQkgICAgUE9TSVRJT05fTk9UX0ZPVU5EKQotCQkJcmVpc2VyZnNfcGFuaWMoaW5vZGUtPmlfc2IsCi0JCQkJICAgICAgICJ2cy01NjE1OiBpbmRpcmVjdF90b19kaXJlY3Rfcm9sbF9iYWNrOiBmb3VuZCBpbnZhbGlkIGl0ZW0iKTsKKwkJCXJlaXNlcmZzX3BhbmljKGlub2RlLT5pX3NiLCAidnMtNTYxNSIsCisJCQkJICAgICAgICJmb3VuZCBpbnZhbGlkIGl0ZW0iKTsKIAkJUkZBTFNFKHBhdGgtPnBvc19pbl9pdGVtICE9CiAJCSAgICAgICBpaF9pdGVtX2xlbihQQVRIX1BJVEVNX0hFQUQocGF0aCkpIC0gMSwKIAkJICAgICAgICJ2cy01NjE2OiBhcHBlbmRlZCBieXRlcyBmb3VuZCIpOwpAQCAtMTUzMywzOCArMTQ5NiwzOSBAQAogCQlzZXRfY3B1X2tleV9rX29mZnNldCgmdGFpbF9rZXksCiAJCQkJICAgICBjcHVfa2V5X2tfb2Zmc2V0KCZ0YWlsX2tleSkgLSByZW1vdmVkKTsKIAl9Ci0JcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwKLQkJCSAiaW5kaXJlY3RfdG9fZGlyZWN0X3JvbGxfYmFjazogaW5kaXJlY3RfdG9fZGlyZWN0IGNvbnZlcnNpb24gaGFzIGJlZW4gcm9sbGVkIGJhY2sgZHVlIHRvIGxhY2sgb2YgZGlzayBzcGFjZSIpOworCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICJyZWlzZXJmcy01MDkxIiwgImluZGlyZWN0X3RvX2RpcmVjdCAiCisJCQkgImNvbnZlcnNpb24gaGFzIGJlZW4gcm9sbGVkIGJhY2sgZHVlIHRvICIKKwkJCSAibGFjayBvZiBkaXNrIHNwYWNlIik7CiAJLy9tYXJrX2ZpbGVfd2l0aG91dF90YWlsIChpbm9kZSk7CiAJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7CiB9CiAKIC8qIChUcnVuY2F0ZSBvciBjdXQgZW50cnkpIG9yIGRlbGV0ZSBvYmplY3QgaXRlbS4gUmV0dXJucyA8IDAgb24gZmFpbHVyZSAqLwogaW50IHJlaXNlcmZzX2N1dF9mcm9tX2l0ZW0oc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCQkgICBzdHJ1Y3QgdHJlZXBhdGggKnBfc19wYXRoLAotCQkJICAgc3RydWN0IGNwdV9rZXkgKnBfc19pdGVtX2tleSwKLQkJCSAgIHN0cnVjdCBpbm9kZSAqcF9zX2lub2RlLAotCQkJICAgc3RydWN0IHBhZ2UgKnBhZ2UsIGxvZmZfdCBuX25ld19maWxlX3NpemUpCisJCQkgICBzdHJ1Y3QgdHJlZXBhdGggKnBhdGgsCisJCQkgICBzdHJ1Y3QgY3B1X2tleSAqaXRlbV9rZXksCisJCQkgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgc3RydWN0IHBhZ2UgKnBhZ2UsIGxvZmZfdCBuZXdfZmlsZV9zaXplKQogewotCXN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiID0gcF9zX2lub2RlLT5pX3NiOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKIAkvKiBFdmVyeSBmdW5jdGlvbiB3aGljaCBpcyBnb2luZyB0byBjYWxsIGRvX2JhbGFuY2UgbXVzdCBmaXJzdAogCSAgIGNyZWF0ZSBhIHRyZWVfYmFsYW5jZSBzdHJ1Y3R1cmUuICBUaGVuIGl0IG11c3QgZmlsbCB1cCB0aGlzCiAJICAgc3RydWN0dXJlIGJ5IHVzaW5nIHRoZSBpbml0X3RiX3N0cnVjdCBhbmQgZml4X25vZGVzIGZ1bmN0aW9ucy4KIAkgICBBZnRlciB0aGF0IHdlIGNhbiBtYWtlIHRyZWUgYmFsYW5jaW5nLiAqLwogCXN0cnVjdCB0cmVlX2JhbGFuY2Ugc19jdXRfYmFsYW5jZTsKIAlzdHJ1Y3QgaXRlbV9oZWFkICpwX2xlX2loOwotCWludCBuX2N1dF9zaXplID0gMCwJLyogQW1vdW50IHRvIGJlIGN1dC4gKi8KLQkgICAgbl9yZXRfdmFsdWUgPSBDQVJSWV9PTiwgbl9yZW1vdmVkID0gMCwJLyogTnVtYmVyIG9mIHRoZSByZW1vdmVkIHVuZm9ybWF0dGVkIG5vZGVzLiAqLwotCSAgICBuX2lzX2lub2RlX2xvY2tlZCA9IDA7Ci0JY2hhciBjX21vZGU7CQkvKiBNb2RlIG9mIHRoZSBiYWxhbmNlLiAqLworCWludCBjdXRfc2l6ZSA9IDAsCS8qIEFtb3VudCB0byBiZSBjdXQuICovCisJICAgIHJldF92YWx1ZSA9IENBUlJZX09OLCByZW1vdmVkID0gMCwJLyogTnVtYmVyIG9mIHRoZSByZW1vdmVkIHVuZm9ybWF0dGVkIG5vZGVzLiAqLworCSAgICBpc19pbm9kZV9sb2NrZWQgPSAwOworCWNoYXIgbW9kZTsJCS8qIE1vZGUgb2YgdGhlIGJhbGFuY2UuICovCiAJaW50IHJldHZhbDIgPSAtMTsKIAlpbnQgcXVvdGFfY3V0X2J5dGVzOwogCWxvZmZfdCB0YWlsX3BvcyA9IDA7CiAKIAlCVUdfT04oIXRoLT50X3RyYW5zX2lkKTsKIAotCWluaXRfdGJfc3RydWN0KHRoLCAmc19jdXRfYmFsYW5jZSwgcF9zX2lub2RlLT5pX3NiLCBwX3NfcGF0aCwKLQkJICAgICAgIG5fY3V0X3NpemUpOworCWluaXRfdGJfc3RydWN0KHRoLCAmc19jdXRfYmFsYW5jZSwgaW5vZGUtPmlfc2IsIHBhdGgsCisJCSAgICAgICBjdXRfc2l6ZSk7CiAKIAkvKiBSZXBlYXQgdGhpcyBsb29wIHVudGlsIHdlIGVpdGhlciBjdXQgdGhlIGl0ZW0gd2l0aG91dCBuZWVkaW5nCiAJICAgdG8gYmFsYW5jZSwgb3Igd2UgZml4X25vZGVzIHdpdGhvdXQgc2NoZWR1bGUgb2NjdXJyaW5nICovCkBAIC0xNTc0LDE0NCArMTUzOCwxNDIgQEAKIAkJICAgZnJlZSB1bmZvcm1hdHRlZCBub2RlcyB3aGljaCBhcmUgcG9pbnRlZCB0byBieSB0aGUgY3V0CiAJCSAgIHBvaW50ZXJzLiAqLwogCi0JCWNfbW9kZSA9Ci0JCSAgICBwcmVwYXJlX2Zvcl9kZWxldGVfb3JfY3V0KHRoLCBwX3NfaW5vZGUsIHBfc19wYXRoLAotCQkJCQkgICAgICBwX3NfaXRlbV9rZXksICZuX3JlbW92ZWQsCi0JCQkJCSAgICAgICZuX2N1dF9zaXplLCBuX25ld19maWxlX3NpemUpOwotCQlpZiAoY19tb2RlID09IE1fQ09OVkVSVCkgeworCQltb2RlID0KKwkJICAgIHByZXBhcmVfZm9yX2RlbGV0ZV9vcl9jdXQodGgsIGlub2RlLCBwYXRoLAorCQkJCQkgICAgICBpdGVtX2tleSwgJnJlbW92ZWQsCisJCQkJCSAgICAgICZjdXRfc2l6ZSwgbmV3X2ZpbGVfc2l6ZSk7CisJCWlmIChtb2RlID09IE1fQ09OVkVSVCkgewogCQkJLyogY29udmVydCBsYXN0IHVuZm9ybWF0dGVkIG5vZGUgdG8gZGlyZWN0IGl0ZW0gb3IgbGVhdmUKIAkJCSAgIHRhaWwgaW4gdGhlIHVuZm9ybWF0dGVkIG5vZGUgKi8KLQkJCVJGQUxTRShuX3JldF92YWx1ZSAhPSBDQVJSWV9PTiwKKwkJCVJGQUxTRShyZXRfdmFsdWUgIT0gQ0FSUllfT04sCiAJCQkgICAgICAgIlBBUC01NTcwOiBjYW4gbm90IGNvbnZlcnQgdHdpY2UiKTsKIAotCQkJbl9yZXRfdmFsdWUgPQotCQkJICAgIG1heWJlX2luZGlyZWN0X3RvX2RpcmVjdCh0aCwgcF9zX2lub2RlLCBwYWdlLAotCQkJCQkJICAgICBwX3NfcGF0aCwgcF9zX2l0ZW1fa2V5LAotCQkJCQkJICAgICBuX25ld19maWxlX3NpemUsICZjX21vZGUpOwotCQkJaWYgKGNfbW9kZSA9PSBNX1NLSVBfQkFMQU5DSU5HKQorCQkJcmV0X3ZhbHVlID0KKwkJCSAgICBtYXliZV9pbmRpcmVjdF90b19kaXJlY3QodGgsIGlub2RlLCBwYWdlLAorCQkJCQkJICAgICBwYXRoLCBpdGVtX2tleSwKKwkJCQkJCSAgICAgbmV3X2ZpbGVfc2l6ZSwgJm1vZGUpOworCQkJaWYgKG1vZGUgPT0gTV9TS0lQX0JBTEFOQ0lORykKIAkJCQkvKiB0YWlsIGhhcyBiZWVuIGxlZnQgaW4gdGhlIHVuZm9ybWF0dGVkIG5vZGUgKi8KLQkJCQlyZXR1cm4gbl9yZXRfdmFsdWU7CisJCQkJcmV0dXJuIHJldF92YWx1ZTsKIAotCQkJbl9pc19pbm9kZV9sb2NrZWQgPSAxOworCQkJaXNfaW5vZGVfbG9ja2VkID0gMTsKIAogCQkJLyogcmVtb3Zpbmcgb2YgbGFzdCB1bmZvcm1hdHRlZCBub2RlIHdpbGwgY2hhbmdlIHZhbHVlIHdlCiAJCQkgICBoYXZlIHRvIHJldHVybiB0byB0cnVuY2F0ZS4gU2F2ZSBpdCAqLwotCQkJcmV0dmFsMiA9IG5fcmV0X3ZhbHVlOwotCQkJLypyZXR2YWwyID0gcF9zX3NiLT5zX2Jsb2Nrc2l6ZSAtIChuX25ld19maWxlX3NpemUgJiAocF9zX3NiLT5zX2Jsb2Nrc2l6ZSAtIDEpKTsgKi8KKwkJCXJldHZhbDIgPSByZXRfdmFsdWU7CisJCQkvKnJldHZhbDIgPSBzYi0+c19ibG9ja3NpemUgLSAobmV3X2ZpbGVfc2l6ZSAmIChzYi0+c19ibG9ja3NpemUgLSAxKSk7ICovCiAKIAkJCS8qIFNvLCB3ZSBoYXZlIHBlcmZvcm1lZCB0aGUgZmlyc3QgcGFydCBvZiB0aGUgY29udmVyc2lvbjoKIAkJCSAgIGluc2VydGluZyB0aGUgbmV3IGRpcmVjdCBpdGVtLiAgTm93IHdlIGFyZSByZW1vdmluZyB0aGUKIAkJCSAgIGxhc3QgdW5mb3JtYXR0ZWQgbm9kZSBwb2ludGVyLiBTZXQga2V5IHRvIHNlYXJjaCBmb3IKIAkJCSAgIGl0LiAqLwotCQkJc2V0X2NwdV9rZXlfa190eXBlKHBfc19pdGVtX2tleSwgVFlQRV9JTkRJUkVDVCk7Ci0JCQlwX3NfaXRlbV9rZXktPmtleV9sZW5ndGggPSA0OwotCQkJbl9uZXdfZmlsZV9zaXplIC09Ci0JCQkgICAgKG5fbmV3X2ZpbGVfc2l6ZSAmIChwX3Nfc2ItPnNfYmxvY2tzaXplIC0gMSkpOwotCQkJdGFpbF9wb3MgPSBuX25ld19maWxlX3NpemU7Ci0JCQlzZXRfY3B1X2tleV9rX29mZnNldChwX3NfaXRlbV9rZXksIG5fbmV3X2ZpbGVfc2l6ZSArIDEpOworCQkJc2V0X2NwdV9rZXlfa190eXBlKGl0ZW1fa2V5LCBUWVBFX0lORElSRUNUKTsKKwkJCWl0ZW1fa2V5LT5rZXlfbGVuZ3RoID0gNDsKKwkJCW5ld19maWxlX3NpemUgLT0KKwkJCSAgICAobmV3X2ZpbGVfc2l6ZSAmIChzYi0+c19ibG9ja3NpemUgLSAxKSk7CisJCQl0YWlsX3BvcyA9IG5ld19maWxlX3NpemU7CisJCQlzZXRfY3B1X2tleV9rX29mZnNldChpdGVtX2tleSwgbmV3X2ZpbGVfc2l6ZSArIDEpOwogCQkJaWYgKHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5Ci0JCQkgICAgKHBfc19zYiwgcF9zX2l0ZW1fa2V5LAotCQkJICAgICBwX3NfcGF0aCkgPT0gUE9TSVRJT05fTk9UX0ZPVU5EKSB7Ci0JCQkJcHJpbnRfYmxvY2soUEFUSF9QTEFTVF9CVUZGRVIocF9zX3BhdGgpLCAzLAotCQkJCQkgICAgUEFUSF9MQVNUX1BPU0lUSU9OKHBfc19wYXRoKSAtIDEsCi0JCQkJCSAgICBQQVRIX0xBU1RfUE9TSVRJT04ocF9zX3BhdGgpICsgMSk7Ci0JCQkJcmVpc2VyZnNfcGFuaWMocF9zX3NiLAotCQkJCQkgICAgICAgIlBBUC01NTgwOiByZWlzZXJmc19jdXRfZnJvbV9pdGVtOiBpdGVtIHRvIGNvbnZlcnQgZG9lcyBub3QgZXhpc3QgKCVLKSIsCi0JCQkJCSAgICAgICBwX3NfaXRlbV9rZXkpOworCQkJICAgIChzYiwgaXRlbV9rZXksCisJCQkgICAgIHBhdGgpID09IFBPU0lUSU9OX05PVF9GT1VORCkgeworCQkJCXByaW50X2Jsb2NrKFBBVEhfUExBU1RfQlVGRkVSKHBhdGgpLCAzLAorCQkJCQkgICAgUEFUSF9MQVNUX1BPU0lUSU9OKHBhdGgpIC0gMSwKKwkJCQkJICAgIFBBVEhfTEFTVF9QT1NJVElPTihwYXRoKSArIDEpOworCQkJCXJlaXNlcmZzX3BhbmljKHNiLCAiUEFQLTU1ODAiLCAiaXRlbSB0byAiCisJCQkJCSAgICAgICAiY29udmVydCBkb2VzIG5vdCBleGlzdCAoJUspIiwKKwkJCQkJICAgICAgIGl0ZW1fa2V5KTsKIAkJCX0KIAkJCWNvbnRpbnVlOwogCQl9Ci0JCWlmIChuX2N1dF9zaXplID09IDApIHsKLQkJCXBhdGhyZWxzZShwX3NfcGF0aCk7CisJCWlmIChjdXRfc2l6ZSA9PSAwKSB7CisJCQlwYXRocmVsc2UocGF0aCk7CiAJCQlyZXR1cm4gMDsKIAkJfQogCi0JCXNfY3V0X2JhbGFuY2UuaW5zZXJ0X3NpemVbMF0gPSBuX2N1dF9zaXplOworCQlzX2N1dF9iYWxhbmNlLmluc2VydF9zaXplWzBdID0gY3V0X3NpemU7CiAKLQkJbl9yZXRfdmFsdWUgPSBmaXhfbm9kZXMoY19tb2RlLCAmc19jdXRfYmFsYW5jZSwgTlVMTCwgTlVMTCk7Ci0JCWlmIChuX3JldF92YWx1ZSAhPSBSRVBFQVRfU0VBUkNIKQorCQlyZXRfdmFsdWUgPSBmaXhfbm9kZXMobW9kZSwgJnNfY3V0X2JhbGFuY2UsIE5VTEwsIE5VTEwpOworCQlpZiAocmV0X3ZhbHVlICE9IFJFUEVBVF9TRUFSQ0gpCiAJCQlicmVhazsKIAotCQlQUk9DX0lORk9fSU5DKHBfc19zYiwgY3V0X2Zyb21faXRlbV9yZXN0YXJ0ZWQpOworCQlQUk9DX0lORk9fSU5DKHNiLCBjdXRfZnJvbV9pdGVtX3Jlc3RhcnRlZCk7CiAKLQkJbl9yZXRfdmFsdWUgPQotCQkgICAgc2VhcmNoX2Zvcl9wb3NpdGlvbl9ieV9rZXkocF9zX3NiLCBwX3NfaXRlbV9rZXksIHBfc19wYXRoKTsKLQkJaWYgKG5fcmV0X3ZhbHVlID09IFBPU0lUSU9OX0ZPVU5EKQorCQlyZXRfdmFsdWUgPQorCQkgICAgc2VhcmNoX2Zvcl9wb3NpdGlvbl9ieV9rZXkoc2IsIGl0ZW1fa2V5LCBwYXRoKTsKKwkJaWYgKHJldF92YWx1ZSA9PSBQT1NJVElPTl9GT1VORCkKIAkJCWNvbnRpbnVlOwogCi0JCXJlaXNlcmZzX3dhcm5pbmcocF9zX3NiLAotCQkJCSAiUEFQLTU2MTA6IHJlaXNlcmZzX2N1dF9mcm9tX2l0ZW06IGl0ZW0gJUsgbm90IGZvdW5kIiwKLQkJCQkgcF9zX2l0ZW1fa2V5KTsKKwkJcmVpc2VyZnNfd2FybmluZyhzYiwgIlBBUC01NjEwIiwgIml0ZW0gJUsgbm90IGZvdW5kIiwKKwkJCQkgaXRlbV9rZXkpOwogCQl1bmZpeF9ub2Rlcygmc19jdXRfYmFsYW5jZSk7Ci0JCXJldHVybiAobl9yZXRfdmFsdWUgPT0gSU9fRVJST1IpID8gLUVJTyA6IC1FTk9FTlQ7CisJCXJldHVybiAocmV0X3ZhbHVlID09IElPX0VSUk9SKSA/IC1FSU8gOiAtRU5PRU5UOwogCX0JCQkvKiB3aGlsZSAqLwogCiAJLy8gY2hlY2sgZml4X25vZGVzIHJlc3VsdHMgKElPX0VSUk9SIG9yIE5PX0RJU0tfU1BBQ0UpCi0JaWYgKG5fcmV0X3ZhbHVlICE9IENBUlJZX09OKSB7Ci0JCWlmIChuX2lzX2lub2RlX2xvY2tlZCkgeworCWlmIChyZXRfdmFsdWUgIT0gQ0FSUllfT04pIHsKKwkJaWYgKGlzX2lub2RlX2xvY2tlZCkgewogCQkJLy8gRklYTUU6IHRoaXMgc2VlbXMgdG8gYmUgbm90IG5lZWRlZDogd2UgYXJlIGFsd2F5cyBhYmxlCiAJCQkvLyB0byBjdXQgaXRlbQotCQkJaW5kaXJlY3RfdG9fZGlyZWN0X3JvbGxfYmFjayh0aCwgcF9zX2lub2RlLCBwX3NfcGF0aCk7CisJCQlpbmRpcmVjdF90b19kaXJlY3Rfcm9sbF9iYWNrKHRoLCBpbm9kZSwgcGF0aCk7CiAJCX0KLQkJaWYgKG5fcmV0X3ZhbHVlID09IE5PX0RJU0tfU1BBQ0UpCi0JCQlyZWlzZXJmc193YXJuaW5nKHBfc19zYiwgIk5PX0RJU0tfU1BBQ0UiKTsKKwkJaWYgKHJldF92YWx1ZSA9PSBOT19ESVNLX1NQQUNFKQorCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgInJlaXNlcmZzLTUwOTIiLAorCQkJCQkgIk5PX0RJU0tfU1BBQ0UiKTsKIAkJdW5maXhfbm9kZXMoJnNfY3V0X2JhbGFuY2UpOwogCQlyZXR1cm4gLUVJTzsKIAl9CiAKIAkvKiBnbyBhaGVhZCBhbmQgcGVyZm9ybSBiYWxhbmNpbmcgKi8KIAotCVJGQUxTRShjX21vZGUgPT0gTV9QQVNURSB8fCBjX21vZGUgPT0gTV9JTlNFUlQsICJpbnZhbGlkIG1vZGUiKTsKKwlSRkFMU0UobW9kZSA9PSBNX1BBU1RFIHx8IG1vZGUgPT0gTV9JTlNFUlQsICJpbnZhbGlkIG1vZGUiKTsKIAogCS8qIENhbGN1bGF0ZSBudW1iZXIgb2YgYnl0ZXMgdGhhdCBuZWVkIHRvIGJlIGN1dCBmcm9tIHRoZSBpdGVtLiAqLwogCXF1b3RhX2N1dF9ieXRlcyA9Ci0JICAgIChjX21vZGUgPT0KLQkgICAgIE1fREVMRVRFKSA/IGloX2l0ZW1fbGVuKGdldF9paChwX3NfcGF0aCkpIDogLXNfY3V0X2JhbGFuY2UuCisJICAgIChtb2RlID09CisJICAgICBNX0RFTEVURSkgPyBpaF9pdGVtX2xlbihnZXRfaWgocGF0aCkpIDogLXNfY3V0X2JhbGFuY2UuCiAJICAgIGluc2VydF9zaXplWzBdOwogCWlmIChyZXR2YWwyID09IC0xKQotCQluX3JldF92YWx1ZSA9IGNhbGNfZGVsZXRlZF9ieXRlc19udW1iZXIoJnNfY3V0X2JhbGFuY2UsIGNfbW9kZSk7CisJCXJldF92YWx1ZSA9IGNhbGNfZGVsZXRlZF9ieXRlc19udW1iZXIoJnNfY3V0X2JhbGFuY2UsIG1vZGUpOwogCWVsc2UKLQkJbl9yZXRfdmFsdWUgPSByZXR2YWwyOworCQlyZXRfdmFsdWUgPSByZXR2YWwyOwogCiAJLyogRm9yIGRpcmVjdCBpdGVtcywgd2Ugb25seSBjaGFuZ2UgdGhlIHF1b3RhIHdoZW4gZGVsZXRpbmcgdGhlIGxhc3QKIAkgKiogaXRlbS4KIAkgKi8KIAlwX2xlX2loID0gUEFUSF9QSVRFTV9IRUFEKHNfY3V0X2JhbGFuY2UudGJfcGF0aCk7Ci0JaWYgKCFTX0lTTE5LKHBfc19pbm9kZS0+aV9tb2RlKSAmJiBpc19kaXJlY3RfbGVfaWgocF9sZV9paCkpIHsKLQkJaWYgKGNfbW9kZSA9PSBNX0RFTEVURSAmJgotCQkgICAgKGxlX2loX2tfb2Zmc2V0KHBfbGVfaWgpICYgKHBfc19zYi0+c19ibG9ja3NpemUgLSAxKSkgPT0KKwlpZiAoIVNfSVNMTksoaW5vZGUtPmlfbW9kZSkgJiYgaXNfZGlyZWN0X2xlX2loKHBfbGVfaWgpKSB7CisJCWlmIChtb2RlID09IE1fREVMRVRFICYmCisJCSAgICAobGVfaWhfa19vZmZzZXQocF9sZV9paCkgJiAoc2ItPnNfYmxvY2tzaXplIC0gMSkpID09CiAJCSAgICAxKSB7CiAJCQkvLyBGSVhNRTogdGhpcyBpcyB0byBrZWVwIDMuNSBoYXBweQotCQkJUkVJU0VSRlNfSShwX3NfaW5vZGUpLT5pX2ZpcnN0X2RpcmVjdF9ieXRlID0gVTMyX01BWDsKLQkJCXF1b3RhX2N1dF9ieXRlcyA9IHBfc19zYi0+c19ibG9ja3NpemUgKyBVTkZNX1BfU0laRTsKKwkJCVJFSVNFUkZTX0koaW5vZGUpLT5pX2ZpcnN0X2RpcmVjdF9ieXRlID0gVTMyX01BWDsKKwkJCXF1b3RhX2N1dF9ieXRlcyA9IHNiLT5zX2Jsb2Nrc2l6ZSArIFVORk1fUF9TSVpFOwogCQl9IGVsc2UgewogCQkJcXVvdGFfY3V0X2J5dGVzID0gMDsKIAkJfQogCX0KICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKLQlpZiAobl9pc19pbm9kZV9sb2NrZWQpIHsKKwlpZiAoaXNfaW5vZGVfbG9ja2VkKSB7CiAJCXN0cnVjdCBpdGVtX2hlYWQgKmxlX2loID0KIAkJICAgIFBBVEhfUElURU1fSEVBRChzX2N1dF9iYWxhbmNlLnRiX3BhdGgpOwogCQkvKiB3ZSBhcmUgZ29pbmcgdG8gY29tcGxldGUgaW5kaXJlY3QyZGlyZWN0IGNvbnZlcnNpb24uIE1ha2UKIAkJICAgc3VyZSwgdGhhdCB3ZSBleGFjdGx5IHJlbW92ZSBsYXN0IHVuZm9ybWF0dGVkIG5vZGUgcG9pbnRlcgogCQkgICBvZiB0aGUgaXRlbSAqLwogCQlpZiAoIWlzX2luZGlyZWN0X2xlX2loKGxlX2loKSkKLQkJCXJlaXNlcmZzX3BhbmljKHBfc19zYiwKLQkJCQkgICAgICAgInZzLTU2NTI6IHJlaXNlcmZzX2N1dF9mcm9tX2l0ZW06ICIKKwkJCXJlaXNlcmZzX3BhbmljKHNiLCAidnMtNTY1MiIsCiAJCQkJICAgICAgICJpdGVtIG11c3QgYmUgaW5kaXJlY3QgJWgiLCBsZV9paCk7CiAKLQkJaWYgKGNfbW9kZSA9PSBNX0RFTEVURSAmJiBpaF9pdGVtX2xlbihsZV9paCkgIT0gVU5GTV9QX1NJWkUpCi0JCQlyZWlzZXJmc19wYW5pYyhwX3Nfc2IsCi0JCQkJICAgICAgICJ2cy01NjUzOiByZWlzZXJmc19jdXRfZnJvbV9pdGVtOiAiCi0JCQkJICAgICAgICJjb21wbGV0aW5nIGluZGlyZWN0MmRpcmVjdCBjb252ZXJzaW9uIGluZGlyZWN0IGl0ZW0gJWggIgotCQkJCSAgICAgICAiYmVpbmcgZGVsZXRlZCBtdXN0IGJlIG9mIDQgYnl0ZSBsb25nIiwKLQkJCQkgICAgICAgbGVfaWgpOworCQlpZiAobW9kZSA9PSBNX0RFTEVURSAmJiBpaF9pdGVtX2xlbihsZV9paCkgIT0gVU5GTV9QX1NJWkUpCisJCQlyZWlzZXJmc19wYW5pYyhzYiwgInZzLTU2NTMiLCAiY29tcGxldGluZyAiCisJCQkJICAgICAgICJpbmRpcmVjdDJkaXJlY3QgY29udmVyc2lvbiBpbmRpcmVjdCAiCisJCQkJICAgICAgICJpdGVtICVoIGJlaW5nIGRlbGV0ZWQgbXVzdCBiZSBvZiAiCisJCQkJICAgICAgICI0IGJ5dGUgbG9uZyIsIGxlX2loKTsKIAotCQlpZiAoY19tb2RlID09IE1fQ1VUCisJCWlmIChtb2RlID09IE1fQ1VUCiAJCSAgICAmJiBzX2N1dF9iYWxhbmNlLmluc2VydF9zaXplWzBdICE9IC1VTkZNX1BfU0laRSkgewotCQkJcmVpc2VyZnNfcGFuaWMocF9zX3NiLAotCQkJCSAgICAgICAidnMtNTY1NDogcmVpc2VyZnNfY3V0X2Zyb21faXRlbTogIgotCQkJCSAgICAgICAiY2FuIG5vdCBjb21wbGV0ZSBpbmRpcmVjdDJkaXJlY3QgY29udmVyc2lvbiBvZiAlaCAoQ1VULCBpbnNlcnRfc2l6ZT09JWQpIiwKKwkJCXJlaXNlcmZzX3BhbmljKHNiLCAidnMtNTY1NCIsICJjYW4gbm90IGNvbXBsZXRlICIKKwkJCQkgICAgICAgImluZGlyZWN0MmRpcmVjdCBjb252ZXJzaW9uIG9mICVoICIKKwkJCQkgICAgICAgIihDVVQsIGluc2VydF9zaXplPT0lZCkiLAogCQkJCSAgICAgICBsZV9paCwgc19jdXRfYmFsYW5jZS5pbnNlcnRfc2l6ZVswXSk7CiAJCX0KIAkJLyogaXQgd291bGQgYmUgdXNlZnVsIHRvIG1ha2Ugc3VyZSwgdGhhdCByaWdodCBuZWlnaGJvcmluZwpAQCAtMTcxOSwyMyArMTY4MSwyMyBAQAogCX0KICNlbmRpZgogCi0JZG9fYmFsYW5jZSgmc19jdXRfYmFsYW5jZSwgTlVMTCwgTlVMTCwgY19tb2RlKTsKLQlpZiAobl9pc19pbm9kZV9sb2NrZWQpIHsKKwlkb19iYWxhbmNlKCZzX2N1dF9iYWxhbmNlLCBOVUxMLCBOVUxMLCBtb2RlKTsKKwlpZiAoaXNfaW5vZGVfbG9ja2VkKSB7CiAJCS8qIHdlJ3ZlIGRvbmUgYW4gaW5kaXJlY3QtPmRpcmVjdCBjb252ZXJzaW9uLiAgd2hlbiB0aGUgZGF0YSBibG9jawogCQkgKiogd2FzIGZyZWVkLCBpdCB3YXMgcmVtb3ZlZCBmcm9tIHRoZSBsaXN0IG9mIGJsb2NrcyB0aGF0IG11c3QKIAkJICoqIGJlIGZsdXNoZWQgYmVmb3JlIHRoZSB0cmFuc2FjdGlvbiBjb21taXRzLCBtYWtlIHN1cmUgdG8KIAkJICoqIHVubWFwIGFuZCBpbnZhbGlkYXRlIGl0CiAJCSAqLwogCQl1bm1hcF9idWZmZXJzKHBhZ2UsIHRhaWxfcG9zKTsKLQkJUkVJU0VSRlNfSShwX3NfaW5vZGUpLT5pX2ZsYWdzICY9IH5pX3BhY2tfb25fY2xvc2VfbWFzazsKKwkJUkVJU0VSRlNfSShpbm9kZSktPmlfZmxhZ3MgJj0gfmlfcGFja19vbl9jbG9zZV9tYXNrOwogCX0KICNpZmRlZiBSRUlTRVJRVU9UQV9ERUJVRwotCXJlaXNlcmZzX2RlYnVnKHBfc19pbm9kZS0+aV9zYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKKwlyZWlzZXJmc19kZWJ1Zyhpbm9kZS0+aV9zYiwgUkVJU0VSRlNfREVCVUdfQ09ERSwKIAkJICAgICAgICJyZWlzZXJxdW90YSBjdXRfZnJvbV9pdGVtKCk6IGZyZWVpbmcgJXUgaWQ9JXUgdHlwZT0lYyIsCi0JCSAgICAgICBxdW90YV9jdXRfYnl0ZXMsIHBfc19pbm9kZS0+aV91aWQsICc/Jyk7CisJCSAgICAgICBxdW90YV9jdXRfYnl0ZXMsIGlub2RlLT5pX3VpZCwgJz8nKTsKICNlbmRpZgotCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkocF9zX2lub2RlLCBxdW90YV9jdXRfYnl0ZXMpOwotCXJldHVybiBuX3JldF92YWx1ZTsKKwl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KGlub2RlLCBxdW90YV9jdXRfYnl0ZXMpOworCXJldHVybiByZXRfdmFsdWU7CiB9CiAKIHN0YXRpYyB2b2lkIHRydW5jYXRlX2RpcmVjdG9yeShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKQEAgLTE3NDMsOCArMTcwNSw3IEBACiB7CiAJQlVHX09OKCF0aC0+dF90cmFuc19pZCk7CiAJaWYgKGlub2RlLT5pX25saW5rKQotCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAotCQkJCSAidnMtNTY1NTogdHJ1bmNhdGVfZGlyZWN0b3J5OiBsaW5rIGNvdW50ICE9IDAiKTsKKwkJcmVpc2VyZnNfZXJyb3IoaW5vZGUtPmlfc2IsICJ2cy01NjU1IiwgImxpbmsgY291bnQgIT0gMCIpOwogCiAJc2V0X2xlX2tleV9rX29mZnNldChLRVlfRk9STUFUXzNfNSwgSU5PREVfUEtFWShpbm9kZSksIERPVF9PRkZTRVQpOwogCXNldF9sZV9rZXlfa190eXBlKEtFWV9GT1JNQVRfM181LCBJTk9ERV9QS0VZKGlub2RlKSwgVFlQRV9ESVJFTlRSWSk7CkBAIC0xNzU2LDggKzE3MTcsOCBAQAogCiAvKiBUcnVuY2F0ZSBmaWxlIHRvIHRoZSBuZXcgc2l6ZS4gTm90ZSwgdGhpcyBtdXN0IGJlIGNhbGxlZCB3aXRoIGEgdHJhbnNhY3Rpb24KICAgIGFscmVhZHkgc3RhcnRlZCAqLwotaW50IHJlaXNlcmZzX2RvX3RydW5jYXRlKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLCBzdHJ1Y3QgaW5vZGUgKnBfc19pbm9kZSwJLyogLT5pX3NpemUgY29udGFpbnMgbmV3Ci0JCQkJCQkJCQkJCQkgICBzaXplICovCitpbnQgcmVpc2VyZnNfZG9fdHJ1bmNhdGUoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCisJCQkgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCS8qIC0+aV9zaXplIGNvbnRhaW5zIG5ldyBzaXplICovCiAJCQkgc3RydWN0IHBhZ2UgKnBhZ2UsCS8qIHVwIHRvIGRhdGUgZm9yIGxhc3QgYmxvY2sgKi8KIAkJCSBpbnQgdXBkYXRlX3RpbWVzdGFtcHMJLyogd2hlbiBpdCBpcyBjYWxsZWQgYnkKIAkJCQkJCSAgIGZpbGVfcmVsZWFzZSB0byBjb252ZXJ0CkBAIC0xNzY4LDQ3ICsxNzI5LDQ1IEBACiAJSU5JVElBTElaRV9QQVRIKHNfc2VhcmNoX3BhdGgpOwkvKiBQYXRoIHRvIHRoZSBjdXJyZW50IG9iamVjdCBpdGVtLiAqLwogCXN0cnVjdCBpdGVtX2hlYWQgKnBfbGVfaWg7CS8qIFBvaW50ZXIgdG8gYW4gaXRlbSBoZWFkZXIuICovCiAJc3RydWN0IGNwdV9rZXkgc19pdGVtX2tleTsJLyogS2V5IHRvIHNlYXJjaCBmb3IgYSBwcmV2aW91cyBmaWxlIGl0ZW0uICovCi0JbG9mZl90IG5fZmlsZV9zaXplLAkvKiBPbGQgZmlsZSBzaXplLiAqLwotCSBuX25ld19maWxlX3NpemU7CS8qIE5ldyBmaWxlIHNpemUuICovCi0JaW50IG5fZGVsZXRlZDsJCS8qIE51bWJlciBvZiBkZWxldGVkIG9yIHRydW5jYXRlZCBieXRlcy4gKi8KKwlsb2ZmX3QgZmlsZV9zaXplLAkvKiBPbGQgZmlsZSBzaXplLiAqLworCSBuZXdfZmlsZV9zaXplOwkvKiBOZXcgZmlsZSBzaXplLiAqLworCWludCBkZWxldGVkOwkJLyogTnVtYmVyIG9mIGRlbGV0ZWQgb3IgdHJ1bmNhdGVkIGJ5dGVzLiAqLwogCWludCByZXR2YWw7CiAJaW50IGVyciA9IDA7CiAKIAlCVUdfT04oIXRoLT50X3RyYW5zX2lkKTsKIAlpZiAoIQotCSAgICAoU19JU1JFRyhwX3NfaW5vZGUtPmlfbW9kZSkgfHwgU19JU0RJUihwX3NfaW5vZGUtPmlfbW9kZSkKLQkgICAgIHx8IFNfSVNMTksocF9zX2lub2RlLT5pX21vZGUpKSkKKwkgICAgKFNfSVNSRUcoaW5vZGUtPmlfbW9kZSkgfHwgU19JU0RJUihpbm9kZS0+aV9tb2RlKQorCSAgICAgfHwgU19JU0xOSyhpbm9kZS0+aV9tb2RlKSkpCiAJCXJldHVybiAwOwogCi0JaWYgKFNfSVNESVIocF9zX2lub2RlLT5pX21vZGUpKSB7CisJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKIAkJLy8gZGVsZXRpb24gb2YgZGlyZWN0b3J5IC0gbm8gbmVlZCB0byB1cGRhdGUgdGltZXN0YW1wcwotCQl0cnVuY2F0ZV9kaXJlY3RvcnkodGgsIHBfc19pbm9kZSk7CisJCXRydW5jYXRlX2RpcmVjdG9yeSh0aCwgaW5vZGUpOwogCQlyZXR1cm4gMDsKIAl9CiAKIAkvKiBHZXQgbmV3IGZpbGUgc2l6ZS4gKi8KLQluX25ld19maWxlX3NpemUgPSBwX3NfaW5vZGUtPmlfc2l6ZTsKKwluZXdfZmlsZV9zaXplID0gaW5vZGUtPmlfc2l6ZTsKIAogCS8vIEZJWE1FOiBub3RlLCB0aGF0IGtleSB0eXBlIGlzIHVuaW1wb3J0YW50IGhlcmUKLQltYWtlX2NwdV9rZXkoJnNfaXRlbV9rZXksIHBfc19pbm9kZSwgbWF4X3JlaXNlcmZzX29mZnNldChwX3NfaW5vZGUpLAorCW1ha2VfY3B1X2tleSgmc19pdGVtX2tleSwgaW5vZGUsIG1heF9yZWlzZXJmc19vZmZzZXQoaW5vZGUpLAogCQkgICAgIFRZUEVfRElSRUNULCAzKTsKIAogCXJldHZhbCA9Ci0JICAgIHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHBfc19pbm9kZS0+aV9zYiwgJnNfaXRlbV9rZXksCisJICAgIHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KGlub2RlLT5pX3NiLCAmc19pdGVtX2tleSwKIAkJCQkgICAgICAgJnNfc2VhcmNoX3BhdGgpOwogCWlmIChyZXR2YWwgPT0gSU9fRVJST1IpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhwX3NfaW5vZGUtPmlfc2IsCi0JCQkJICJ2cy01NjU3OiByZWlzZXJmc19kb190cnVuY2F0ZTogIgotCQkJCSAiaS9vIGZhaWx1cmUgb2NjdXJyZWQgdHJ5aW5nIHRvIHRydW5jYXRlICVLIiwKLQkJCQkgJnNfaXRlbV9rZXkpOworCQlyZWlzZXJmc19lcnJvcihpbm9kZS0+aV9zYiwgInZzLTU2NTciLAorCQkJICAgICAgICJpL28gZmFpbHVyZSBvY2N1cnJlZCB0cnlpbmcgdG8gdHJ1bmNhdGUgJUsiLAorCQkJICAgICAgICZzX2l0ZW1fa2V5KTsKIAkJZXJyID0gLUVJTzsKIAkJZ290byBvdXQ7CiAJfQogCWlmIChyZXR2YWwgPT0gUE9TSVRJT05fRk9VTkQgfHwgcmV0dmFsID09IEZJTEVfTk9UX0ZPVU5EKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocF9zX2lub2RlLT5pX3NiLAotCQkJCSAiUEFQLTU2NjA6IHJlaXNlcmZzX2RvX3RydW5jYXRlOiAiCi0JCQkJICJ3cm9uZyByZXN1bHQgJWQgb2Ygc2VhcmNoIGZvciAlSyIsIHJldHZhbCwKLQkJCQkgJnNfaXRlbV9rZXkpOworCQlyZWlzZXJmc19lcnJvcihpbm9kZS0+aV9zYiwgIlBBUC01NjYwIiwKKwkJCSAgICAgICAid3JvbmcgcmVzdWx0ICVkIG9mIHNlYXJjaCBmb3IgJUsiLCByZXR2YWwsCisJCQkgICAgICAgJnNfaXRlbV9rZXkpOwogCiAJCWVyciA9IC1FSU87CiAJCWdvdG8gb3V0OwpAQCAtMTgxOSw1NiArMTc3OCw1NiBAQAogCS8qIEdldCByZWFsIGZpbGUgc2l6ZSAodG90YWwgbGVuZ3RoIG9mIGFsbCBmaWxlIGl0ZW1zKSAqLwogCXBfbGVfaWggPSBQQVRIX1BJVEVNX0hFQUQoJnNfc2VhcmNoX3BhdGgpOwogCWlmIChpc19zdGF0ZGF0YV9sZV9paChwX2xlX2loKSkKLQkJbl9maWxlX3NpemUgPSAwOworCQlmaWxlX3NpemUgPSAwOwogCWVsc2UgewogCQlsb2ZmX3Qgb2Zmc2V0ID0gbGVfaWhfa19vZmZzZXQocF9sZV9paCk7CiAJCWludCBieXRlcyA9Ci0JCSAgICBvcF9ieXRlc19udW1iZXIocF9sZV9paCwgcF9zX2lub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSk7CisJCSAgICBvcF9ieXRlc19udW1iZXIocF9sZV9paCwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKTsKIAogCQkvKiB0aGlzIG1heSBtaXNtYXRjaCB3aXRoIHJlYWwgZmlsZSBzaXplOiBpZiBsYXN0IGRpcmVjdCBpdGVtCiAJCSAgIGhhZCBubyBwYWRkaW5nIHplcm9zIGFuZCBsYXN0IHVuZm9ybWF0dGVkIG5vZGUgaGFkIG5vIGZyZWUKIAkJICAgc3BhY2UsIHRoaXMgZmlsZSB3b3VsZCBoYXZlIHRoaXMgZmlsZSBzaXplICovCi0JCW5fZmlsZV9zaXplID0gb2Zmc2V0ICsgYnl0ZXMgLSAxOworCQlmaWxlX3NpemUgPSBvZmZzZXQgKyBieXRlcyAtIDE7CiAJfQogCS8qCiAJICogYXJlIHdlIGRvaW5nIGEgZnVsbCB0cnVuY2F0ZSBvciBkZWxldGUsIGlmIHNvCiAJICoga2ljayBpbiB0aGUgcmVhZGEgY29kZQogCSAqLwotCWlmIChuX25ld19maWxlX3NpemUgPT0gMCkKKwlpZiAobmV3X2ZpbGVfc2l6ZSA9PSAwKQogCQlzX3NlYXJjaF9wYXRoLnJlYWRhID0gUEFUSF9SRUFEQSB8IFBBVEhfUkVBREFfQkFDSzsKIAotCWlmIChuX2ZpbGVfc2l6ZSA9PSAwIHx8IG5fZmlsZV9zaXplIDwgbl9uZXdfZmlsZV9zaXplKSB7CisJaWYgKGZpbGVfc2l6ZSA9PSAwIHx8IGZpbGVfc2l6ZSA8IG5ld19maWxlX3NpemUpIHsKIAkJZ290byB1cGRhdGVfYW5kX291dDsKIAl9CiAKIAkvKiBVcGRhdGUga2V5IHRvIHNlYXJjaCBmb3IgdGhlIGxhc3QgZmlsZSBpdGVtLiAqLwotCXNldF9jcHVfa2V5X2tfb2Zmc2V0KCZzX2l0ZW1fa2V5LCBuX2ZpbGVfc2l6ZSk7CisJc2V0X2NwdV9rZXlfa19vZmZzZXQoJnNfaXRlbV9rZXksIGZpbGVfc2l6ZSk7CiAKIAlkbyB7CiAJCS8qIEN1dCBvciBkZWxldGUgZmlsZSBpdGVtLiAqLwotCQluX2RlbGV0ZWQgPQorCQlkZWxldGVkID0KIAkJICAgIHJlaXNlcmZzX2N1dF9mcm9tX2l0ZW0odGgsICZzX3NlYXJjaF9wYXRoLCAmc19pdGVtX2tleSwKLQkJCQkJICAgcF9zX2lub2RlLCBwYWdlLCBuX25ld19maWxlX3NpemUpOwotCQlpZiAobl9kZWxldGVkIDwgMCkgewotCQkJcmVpc2VyZnNfd2FybmluZyhwX3NfaW5vZGUtPmlfc2IsCi0JCQkJCSAidnMtNTY2NTogcmVpc2VyZnNfZG9fdHJ1bmNhdGU6IHJlaXNlcmZzX2N1dF9mcm9tX2l0ZW0gZmFpbGVkIik7CisJCQkJCSAgIGlub2RlLCBwYWdlLCBuZXdfZmlsZV9zaXplKTsKKwkJaWYgKGRlbGV0ZWQgPCAwKSB7CisJCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAidnMtNTY2NSIsCisJCQkJCSAicmVpc2VyZnNfY3V0X2Zyb21faXRlbSBmYWlsZWQiKTsKIAkJCXJlaXNlcmZzX2NoZWNrX3BhdGgoJnNfc2VhcmNoX3BhdGgpOwogCQkJcmV0dXJuIDA7CiAJCX0KIAotCQlSRkFMU0Uobl9kZWxldGVkID4gbl9maWxlX3NpemUsCisJCVJGQUxTRShkZWxldGVkID4gZmlsZV9zaXplLAogCQkgICAgICAgIlBBUC01NjcwOiByZWlzZXJmc19jdXRfZnJvbV9pdGVtOiB0b28gbWFueSBieXRlcyBkZWxldGVkOiBkZWxldGVkICVkLCBmaWxlX3NpemUgJWx1LCBpdGVtX2tleSAlSyIsCi0JCSAgICAgICBuX2RlbGV0ZWQsIG5fZmlsZV9zaXplLCAmc19pdGVtX2tleSk7CisJCSAgICAgICBkZWxldGVkLCBmaWxlX3NpemUsICZzX2l0ZW1fa2V5KTsKIAogCQkvKiBDaGFuZ2Uga2V5IHRvIHNlYXJjaCB0aGUgbGFzdCBmaWxlIGl0ZW0uICovCi0JCW5fZmlsZV9zaXplIC09IG5fZGVsZXRlZDsKKwkJZmlsZV9zaXplIC09IGRlbGV0ZWQ7CiAKLQkJc2V0X2NwdV9rZXlfa19vZmZzZXQoJnNfaXRlbV9rZXksIG5fZmlsZV9zaXplKTsKKwkJc2V0X2NwdV9rZXlfa19vZmZzZXQoJnNfaXRlbV9rZXksIGZpbGVfc2l6ZSk7CiAKIAkJLyogV2hpbGUgdGhlcmUgYXJlIGJ5dGVzIHRvIHRydW5jYXRlIGFuZCBwcmV2aW91cyBmaWxlIGl0ZW0gaXMgcHJlc2VudGVkIGluIHRoZSB0cmVlLiAqLwogCiAJCS8qCi0JCSAqKiBUaGlzIGxvb3AgY291bGQgdGFrZSBhIHJlYWxseSBsb25nIHRpbWUsIGFuZCBjb3VsZCBsb2cgCisJCSAqKiBUaGlzIGxvb3AgY291bGQgdGFrZSBhIHJlYWxseSBsb25nIHRpbWUsIGFuZCBjb3VsZCBsb2cKIAkJICoqIG1hbnkgbW9yZSBibG9ja3MgdGhhbiBhIHRyYW5zYWN0aW9uIGNhbiBob2xkLiAgU28sIHdlIGRvIGEgcG9saXRlCiAJCSAqKiBqb3VybmFsIGVuZCBoZXJlLCBhbmQgaWYgdGhlIHRyYW5zYWN0aW9uIG5lZWRzIGVuZGluZywgd2UgbWFrZQogCQkgKiogc3VyZSB0aGUgZmlsZSBpcyBjb25zaXN0ZW50IGJlZm9yZSBlbmRpbmcgdGhlIGN1cnJlbnQgdHJhbnMKQEAgLTE4NzcsMzcgKzE4MzYsMzggQEAKIAkJaWYgKGpvdXJuYWxfdHJhbnNhY3Rpb25fc2hvdWxkX2VuZCh0aCwgMCkgfHwKIAkJICAgIHJlaXNlcmZzX3RyYW5zYWN0aW9uX2ZyZWVfc3BhY2UodGgpIDw9IEpPVVJOQUxfRk9SX0ZSRUVfQkxPQ0tfQU5EX1VQREFURV9TRCkgewogCQkJaW50IG9yaWdfbGVuX2FsbG9jID0gdGgtPnRfYmxvY2tzX2FsbG9jYXRlZDsKLQkJCWRlY3JlbWVudF9jb3VudGVyc19pbl9wYXRoKCZzX3NlYXJjaF9wYXRoKTsKKwkJCXBhdGhyZWxzZSgmc19zZWFyY2hfcGF0aCk7CiAKIAkJCWlmICh1cGRhdGVfdGltZXN0YW1wcykgewotCQkJCXBfc19pbm9kZS0+aV9tdGltZSA9IHBfc19pbm9kZS0+aV9jdGltZSA9Ci0JCQkJICAgIENVUlJFTlRfVElNRV9TRUM7CisJCQkJaW5vZGUtPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOworCQkJCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKIAkJCX0KLQkJCXJlaXNlcmZzX3VwZGF0ZV9zZCh0aCwgcF9zX2lub2RlKTsKKwkJCXJlaXNlcmZzX3VwZGF0ZV9zZCh0aCwgaW5vZGUpOwogCi0JCQllcnIgPSBqb3VybmFsX2VuZCh0aCwgcF9zX2lub2RlLT5pX3NiLCBvcmlnX2xlbl9hbGxvYyk7CisJCQllcnIgPSBqb3VybmFsX2VuZCh0aCwgaW5vZGUtPmlfc2IsIG9yaWdfbGVuX2FsbG9jKTsKIAkJCWlmIChlcnIpCiAJCQkJZ290byBvdXQ7Ci0JCQllcnIgPSBqb3VybmFsX2JlZ2luKHRoLCBwX3NfaW5vZGUtPmlfc2IsCisJCQllcnIgPSBqb3VybmFsX2JlZ2luKHRoLCBpbm9kZS0+aV9zYiwKIAkJCQkJICAgIEpPVVJOQUxfRk9SX0ZSRUVfQkxPQ0tfQU5EX1VQREFURV9TRCArIEpPVVJOQUxfUEVSX0JBTEFOQ0VfQ05UICogNCkgOwogCQkJaWYgKGVycikKIAkJCQlnb3RvIG91dDsKLQkJCXJlaXNlcmZzX3VwZGF0ZV9pbm9kZV90cmFuc2FjdGlvbihwX3NfaW5vZGUpOworCQkJcmVpc2VyZnNfdXBkYXRlX2lub2RlX3RyYW5zYWN0aW9uKGlub2RlKTsKIAkJfQotCX0gd2hpbGUgKG5fZmlsZV9zaXplID4gUk9VTkRfVVAobl9uZXdfZmlsZV9zaXplKSAmJgotCQkgc2VhcmNoX2Zvcl9wb3NpdGlvbl9ieV9rZXkocF9zX2lub2RlLT5pX3NiLCAmc19pdGVtX2tleSwKKwl9IHdoaWxlIChmaWxlX3NpemUgPiBST1VORF9VUChuZXdfZmlsZV9zaXplKSAmJgorCQkgc2VhcmNoX2Zvcl9wb3NpdGlvbl9ieV9rZXkoaW5vZGUtPmlfc2IsICZzX2l0ZW1fa2V5LAogCQkJCQkgICAgJnNfc2VhcmNoX3BhdGgpID09IFBPU0lUSU9OX0ZPVU5EKTsKIAotCVJGQUxTRShuX2ZpbGVfc2l6ZSA+IFJPVU5EX1VQKG5fbmV3X2ZpbGVfc2l6ZSksCisJUkZBTFNFKGZpbGVfc2l6ZSA+IFJPVU5EX1VQKG5ld19maWxlX3NpemUpLAogCSAgICAgICAiUEFQLTU2ODA6IHRydW5jYXRlIGRpZCBub3QgZmluaXNoOiBuZXdfZmlsZV9zaXplICVMZCwgY3VycmVudCAlTGQsIG9pZCAlZCIsCi0JICAgICAgIG5fbmV3X2ZpbGVfc2l6ZSwgbl9maWxlX3NpemUsIHNfaXRlbV9rZXkub25fZGlza19rZXkua19vYmplY3RpZCk7CisJICAgICAgIG5ld19maWxlX3NpemUsIGZpbGVfc2l6ZSwgc19pdGVtX2tleS5vbl9kaXNrX2tleS5rX29iamVjdGlkKTsKIAogICAgICAgdXBkYXRlX2FuZF9vdXQ6CiAJaWYgKHVwZGF0ZV90aW1lc3RhbXBzKSB7CiAJCS8vIHRoaXMgaXMgdHJ1bmNhdGUsIG5vdCBmaWxlIGNsb3NpbmcKLQkJcF9zX2lub2RlLT5pX210aW1lID0gcF9zX2lub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKKwkJaW5vZGUtPmlfbXRpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOworCQlpbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7CiAJfQotCXJlaXNlcmZzX3VwZGF0ZV9zZCh0aCwgcF9zX2lub2RlKTsKKwlyZWlzZXJmc191cGRhdGVfc2QodGgsIGlub2RlKTsKIAogICAgICAgb3V0OgogCXBhdGhyZWxzZSgmc19zZWFyY2hfcGF0aCk7CkBAIC0xOTE3LDcgKzE4NzcsNyBAQAogI2lmZGVmIENPTkZJR19SRUlTRVJGU19DSEVDSwogLy8gdGhpcyBtYWtlcyBzdXJlLCB0aGF0IHdlIF9fYXBwZW5kX18sIG5vdCBvdmVyd3JpdGUgb3IgYWRkIGhvbGVzCiBzdGF0aWMgdm9pZCBjaGVja19yZXNlYXJjaF9mb3JfcGFzdGUoc3RydWN0IHRyZWVwYXRoICpwYXRoLAotCQkJCSAgICAgY29uc3Qgc3RydWN0IGNwdV9rZXkgKnBfc19rZXkpCisJCQkJICAgICBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqa2V5KQogewogCXN0cnVjdCBpdGVtX2hlYWQgKmZvdW5kX2loID0gZ2V0X2loKHBhdGgpOwogCkBAIC0xOTI1LDM2ICsxODg1LDM2IEBACiAJCWlmIChsZV9paF9rX29mZnNldChmb3VuZF9paCkgKwogCQkgICAgb3BfYnl0ZXNfbnVtYmVyKGZvdW5kX2loLAogCQkJCSAgICBnZXRfbGFzdF9iaChwYXRoKS0+Yl9zaXplKSAhPQotCQkgICAgY3B1X2tleV9rX29mZnNldChwX3Nfa2V5KQorCQkgICAgY3B1X2tleV9rX29mZnNldChrZXkpCiAJCSAgICB8fCBvcF9ieXRlc19udW1iZXIoZm91bmRfaWgsCiAJCQkJICAgICAgIGdldF9sYXN0X2JoKHBhdGgpLT5iX3NpemUpICE9CiAJCSAgICBwb3NfaW5faXRlbShwYXRoKSkKLQkJCXJlaXNlcmZzX3BhbmljKE5VTEwsCi0JCQkJICAgICAgICJQQVAtNTcyMDogY2hlY2tfcmVzZWFyY2hfZm9yX3Bhc3RlOiAiCi0JCQkJICAgICAgICJmb3VuZCBkaXJlY3QgaXRlbSAlaCBvciBwb3NpdGlvbiAoJWQpIGRvZXMgbm90IG1hdGNoIHRvIGtleSAlSyIsCi0JCQkJICAgICAgIGZvdW5kX2loLCBwb3NfaW5faXRlbShwYXRoKSwgcF9zX2tleSk7CisJCQlyZWlzZXJmc19wYW5pYyhOVUxMLCAiUEFQLTU3MjAiLCAiZm91bmQgZGlyZWN0IGl0ZW0gIgorCQkJCSAgICAgICAiJWggb3IgcG9zaXRpb24gKCVkKSBkb2VzIG5vdCBtYXRjaCAiCisJCQkJICAgICAgICJ0byBrZXkgJUsiLCBmb3VuZF9paCwKKwkJCQkgICAgICAgcG9zX2luX2l0ZW0ocGF0aCksIGtleSk7CiAJfQogCWlmIChpc19pbmRpcmVjdF9sZV9paChmb3VuZF9paCkpIHsKIAkJaWYgKGxlX2loX2tfb2Zmc2V0KGZvdW5kX2loKSArCiAJCSAgICBvcF9ieXRlc19udW1iZXIoZm91bmRfaWgsCiAJCQkJICAgIGdldF9sYXN0X2JoKHBhdGgpLT5iX3NpemUpICE9Ci0JCSAgICBjcHVfa2V5X2tfb2Zmc2V0KHBfc19rZXkpCisJCSAgICBjcHVfa2V5X2tfb2Zmc2V0KGtleSkKIAkJICAgIHx8IElfVU5GTV9OVU0oZm91bmRfaWgpICE9IHBvc19pbl9pdGVtKHBhdGgpCiAJCSAgICB8fCBnZXRfaWhfZnJlZV9zcGFjZShmb3VuZF9paCkgIT0gMCkKLQkJCXJlaXNlcmZzX3BhbmljKE5VTEwsCi0JCQkJICAgICAgICJQQVAtNTczMDogY2hlY2tfcmVzZWFyY2hfZm9yX3Bhc3RlOiAiCi0JCQkJICAgICAgICJmb3VuZCBpbmRpcmVjdCBpdGVtICglaCkgb3IgcG9zaXRpb24gKCVkKSBkb2VzIG5vdCBtYXRjaCB0byBrZXkgKCVLKSIsCi0JCQkJICAgICAgIGZvdW5kX2loLCBwb3NfaW5faXRlbShwYXRoKSwgcF9zX2tleSk7CisJCQlyZWlzZXJmc19wYW5pYyhOVUxMLCAiUEFQLTU3MzAiLCAiZm91bmQgaW5kaXJlY3QgIgorCQkJCSAgICAgICAiaXRlbSAoJWgpIG9yIHBvc2l0aW9uICglZCkgZG9lcyBub3QgIgorCQkJCSAgICAgICAibWF0Y2ggdG8ga2V5ICglSykiLAorCQkJCSAgICAgICBmb3VuZF9paCwgcG9zX2luX2l0ZW0ocGF0aCksIGtleSk7CiAJfQogfQogI2VuZGlmCQkJCS8qIGNvbmZpZyByZWlzZXJmcyBjaGVjayAqLwogCiAvKiBQYXN0ZSBieXRlcyB0byB0aGUgZXhpc3RpbmcgaXRlbS4gUmV0dXJucyBieXRlcyBudW1iZXIgcGFzdGVkIGludG8gdGhlIGl0ZW0uICovCi1pbnQgcmVpc2VyZnNfcGFzdGVfaW50b19pdGVtKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLCBzdHJ1Y3QgdHJlZXBhdGggKnBfc19zZWFyY2hfcGF0aCwJLyogUGF0aCB0byB0aGUgcGFzdGVkIGl0ZW0uICAgICAgICAgICovCi0JCQkgICAgIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICpwX3Nfa2V5LAkvKiBLZXkgdG8gc2VhcmNoIGZvciB0aGUgbmVlZGVkIGl0ZW0uICovCitpbnQgcmVpc2VyZnNfcGFzdGVfaW50b19pdGVtKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLCBzdHJ1Y3QgdHJlZXBhdGggKnNlYXJjaF9wYXRoLAkvKiBQYXRoIHRvIHRoZSBwYXN0ZWQgaXRlbS4JICAqLworCQkJICAgICBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqa2V5LAkvKiBLZXkgdG8gc2VhcmNoIGZvciB0aGUgbmVlZGVkIGl0ZW0uICovCiAJCQkgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsCS8qIElub2RlIGl0ZW0gYmVsb25ncyB0byAqLwotCQkJICAgICBjb25zdCBjaGFyICpwX2NfYm9keSwJLyogUG9pbnRlciB0byB0aGUgYnl0ZXMgdG8gcGFzdGUuICAgICovCi0JCQkgICAgIGludCBuX3Bhc3RlZF9zaXplKQorCQkJICAgICBjb25zdCBjaGFyICpib2R5LAkvKiBQb2ludGVyIHRvIHRoZSBieXRlcyB0byBwYXN0ZS4gICAgKi8KKwkJCSAgICAgaW50IHBhc3RlZF9zaXplKQogewkJCQkvKiBTaXplIG9mIHBhc3RlZCBieXRlcy4gICAgICAgICAgICAgKi8KIAlzdHJ1Y3QgdHJlZV9iYWxhbmNlIHNfcGFzdGVfYmFsYW5jZTsKIAlpbnQgcmV0dmFsOwpAQCAtMTk2NywxOCArMTkyNywxOCBAQAogI2lmZGVmIFJFSVNFUlFVT1RBX0RFQlVHCiAJcmVpc2VyZnNfZGVidWcoaW5vZGUtPmlfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCSAgICAgICAicmVpc2VycXVvdGEgcGFzdGVfaW50b19pdGVtKCk6IGFsbG9jYXRpbmcgJXUgaWQ9JXUgdHlwZT0lYyIsCi0JCSAgICAgICBuX3Bhc3RlZF9zaXplLCBpbm9kZS0+aV91aWQsCi0JCSAgICAgICBrZXkydHlwZSgmKHBfc19rZXktPm9uX2Rpc2tfa2V5KSkpOworCQkgICAgICAgcGFzdGVkX3NpemUsIGlub2RlLT5pX3VpZCwKKwkJICAgICAgIGtleTJ0eXBlKCYoa2V5LT5vbl9kaXNrX2tleSkpKTsKICNlbmRpZgogCi0JaWYgKHZmc19kcV9hbGxvY19zcGFjZV9ub2RpcnR5KGlub2RlLCBuX3Bhc3RlZF9zaXplKSkgewotCQlwYXRocmVsc2UocF9zX3NlYXJjaF9wYXRoKTsKKwlpZiAodmZzX2RxX2FsbG9jX3NwYWNlX25vZGlydHkoaW5vZGUsIHBhc3RlZF9zaXplKSkgeworCQlwYXRocmVsc2Uoc2VhcmNoX3BhdGgpOwogCQlyZXR1cm4gLUVEUVVPVDsKIAl9Ci0JaW5pdF90Yl9zdHJ1Y3QodGgsICZzX3Bhc3RlX2JhbGFuY2UsIHRoLT50X3N1cGVyLCBwX3Nfc2VhcmNoX3BhdGgsCi0JCSAgICAgICBuX3Bhc3RlZF9zaXplKTsKKwlpbml0X3RiX3N0cnVjdCh0aCwgJnNfcGFzdGVfYmFsYW5jZSwgdGgtPnRfc3VwZXIsIHNlYXJjaF9wYXRoLAorCQkgICAgICAgcGFzdGVkX3NpemUpOwogI2lmZGVmIERJU1BMQUNFX05FV19QQUNLSU5HX0xPQ0FMSVRJRVMKLQlzX3Bhc3RlX2JhbGFuY2Uua2V5ID0gcF9zX2tleS0+b25fZGlza19rZXk7CisJc19wYXN0ZV9iYWxhbmNlLmtleSA9IGtleS0+b25fZGlza19rZXk7CiAjZW5kaWYKIAogCS8qIERRVU9UXyogY2FuIHNjaGVkdWxlLCBtdXN0IGNoZWNrIGJlZm9yZSB0aGUgZml4X25vZGVzICovCkBAIC0xOTg4LDMzICsxOTQ4LDMzIEBACiAKIAl3aGlsZSAoKHJldHZhbCA9CiAJCWZpeF9ub2RlcyhNX1BBU1RFLCAmc19wYXN0ZV9iYWxhbmNlLCBOVUxMLAotCQkJICBwX2NfYm9keSkpID09IFJFUEVBVF9TRUFSQ0gpIHsKKwkJCSAgYm9keSkpID09IFJFUEVBVF9TRUFSQ0gpIHsKIAkgICAgICBzZWFyY2hfYWdhaW46CiAJCS8qIGZpbGUgc3lzdGVtIGNoYW5nZWQgd2hpbGUgd2Ugd2VyZSBpbiB0aGUgZml4X25vZGVzICovCiAJCVBST0NfSU5GT19JTkModGgtPnRfc3VwZXIsIHBhc3RlX2ludG9faXRlbV9yZXN0YXJ0ZWQpOwogCQlyZXR2YWwgPQotCQkgICAgc2VhcmNoX2Zvcl9wb3NpdGlvbl9ieV9rZXkodGgtPnRfc3VwZXIsIHBfc19rZXksCi0JCQkJCSAgICAgICBwX3Nfc2VhcmNoX3BhdGgpOworCQkgICAgc2VhcmNoX2Zvcl9wb3NpdGlvbl9ieV9rZXkodGgtPnRfc3VwZXIsIGtleSwKKwkJCQkJICAgICAgIHNlYXJjaF9wYXRoKTsKIAkJaWYgKHJldHZhbCA9PSBJT19FUlJPUikgewogCQkJcmV0dmFsID0gLUVJTzsKIAkJCWdvdG8gZXJyb3Jfb3V0OwogCQl9CiAJCWlmIChyZXR2YWwgPT0gUE9TSVRJT05fRk9VTkQpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsCi0JCQkJCSAiUEFQLTU3MTA6IHJlaXNlcmZzX3Bhc3RlX2ludG9faXRlbTogZW50cnkgb3IgcGFzdGVkIGJ5dGUgKCVLKSBleGlzdHMiLAotCQkJCQkgcF9zX2tleSk7CisJCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAiUEFQLTU3MTAiLAorCQkJCQkgImVudHJ5IG9yIHBhc3RlZCBieXRlICglSykgZXhpc3RzIiwKKwkJCQkJIGtleSk7CiAJCQlyZXR2YWwgPSAtRUVYSVNUOwogCQkJZ290byBlcnJvcl9vdXQ7CiAJCX0KICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKLQkJY2hlY2tfcmVzZWFyY2hfZm9yX3Bhc3RlKHBfc19zZWFyY2hfcGF0aCwgcF9zX2tleSk7CisJCWNoZWNrX3Jlc2VhcmNoX2Zvcl9wYXN0ZShzZWFyY2hfcGF0aCwga2V5KTsKICNlbmRpZgogCX0KIAogCS8qIFBlcmZvcm0gYmFsYW5jaW5nIGFmdGVyIGFsbCByZXNvdXJjZXMgYXJlIGNvbGxlY3RlZCBieSBmaXhfbm9kZXMsIGFuZAogCSAgIGFjY2Vzc2luZyB0aGVtIHdpbGwgbm90IHJpc2sgdHJpZ2dlcmluZyBzY2hlZHVsZS4gKi8KIAlpZiAocmV0dmFsID09IENBUlJZX09OKSB7Ci0JCWRvX2JhbGFuY2UoJnNfcGFzdGVfYmFsYW5jZSwgTlVMTCAvKmloICovICwgcF9jX2JvZHksIE1fUEFTVEUpOworCQlkb19iYWxhbmNlKCZzX3Bhc3RlX2JhbGFuY2UsIE5VTEwgLyppaCAqLyAsIGJvZHksIE1fUEFTVEUpOwogCQlyZXR1cm4gMDsKIAl9CiAJcmV0dmFsID0gKHJldHZhbCA9PSBOT19ESVNLX1NQQUNFKSA/IC1FTk9TUEMgOiAtRUlPOwpAQCAtMjAyNCwxOCArMTk4NCwyNCBAQAogI2lmZGVmIFJFSVNFUlFVT1RBX0RFQlVHCiAJcmVpc2VyZnNfZGVidWcoaW5vZGUtPmlfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCSAgICAgICAicmVpc2VycXVvdGEgcGFzdGVfaW50b19pdGVtKCk6IGZyZWVpbmcgJXUgaWQ9JXUgdHlwZT0lYyIsCi0JCSAgICAgICBuX3Bhc3RlZF9zaXplLCBpbm9kZS0+aV91aWQsCi0JCSAgICAgICBrZXkydHlwZSgmKHBfc19rZXktPm9uX2Rpc2tfa2V5KSkpOworCQkgICAgICAgcGFzdGVkX3NpemUsIGlub2RlLT5pX3VpZCwKKwkJICAgICAgIGtleTJ0eXBlKCYoa2V5LT5vbl9kaXNrX2tleSkpKTsKICNlbmRpZgotCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkoaW5vZGUsIG5fcGFzdGVkX3NpemUpOworCXZmc19kcV9mcmVlX3NwYWNlX25vZGlydHkoaW5vZGUsIHBhc3RlZF9zaXplKTsKIAlyZXR1cm4gcmV0dmFsOwogfQogCi0vKiBJbnNlcnQgbmV3IGl0ZW0gaW50byB0aGUgYnVmZmVyIGF0IHRoZSBwYXRoLiAqLwotaW50IHJlaXNlcmZzX2luc2VydF9pdGVtKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLCBzdHJ1Y3QgdHJlZXBhdGggKnBfc19wYXRoLAkvKiBQYXRoIHRvIHRoZSBpbnNlcnRlZGVkIGl0ZW0uICAgICAgICAgKi8KLQkJCSBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqa2V5LCBzdHJ1Y3QgaXRlbV9oZWFkICpwX3NfaWgsCS8qIFBvaW50ZXIgdG8gdGhlIGl0ZW0gaGVhZGVyIHRvIGluc2VydC4gKi8KLQkJCSBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpwX2NfYm9keSkKLXsJCQkJLyogUG9pbnRlciB0byB0aGUgYnl0ZXMgdG8gaW5zZXJ0LiAgICAgICovCisvKiBJbnNlcnQgbmV3IGl0ZW0gaW50byB0aGUgYnVmZmVyIGF0IHRoZSBwYXRoLgorICogdGggICAtIGFjdGl2ZSB0cmFuc2FjdGlvbiBoYW5kbGUKKyAqIHBhdGggLSBwYXRoIHRvIHRoZSBpbnNlcnRlZCBpdGVtCisgKiBpaCAgIC0gcG9pbnRlciB0byB0aGUgaXRlbSBoZWFkZXIgdG8gaW5zZXJ0CisgKiBib2R5IC0gcG9pbnRlciB0byB0aGUgYnl0ZXMgdG8gaW5zZXJ0CisgKi8KK2ludCByZWlzZXJmc19pbnNlcnRfaXRlbShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKKwkJCSBzdHJ1Y3QgdHJlZXBhdGggKnBhdGgsIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICprZXksCisJCQkgc3RydWN0IGl0ZW1faGVhZCAqaWgsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgY29uc3QgY2hhciAqYm9keSkKK3sKIAlzdHJ1Y3QgdHJlZV9iYWxhbmNlIHNfaW5zX2JhbGFuY2U7CiAJaW50IHJldHZhbDsKIAlpbnQgZnNfZ2VuID0gMDsKQEAgLTIwNDUsMjggKzIwMTEsMjcgQEAKIAogCWlmIChpbm9kZSkgewkJLyogRG8gd2UgY291bnQgcXVvdGFzIGZvciBpdGVtPyAqLwogCQlmc19nZW4gPSBnZXRfZ2VuZXJhdGlvbihpbm9kZS0+aV9zYik7Ci0JCXF1b3RhX2J5dGVzID0gaWhfaXRlbV9sZW4ocF9zX2loKTsKKwkJcXVvdGFfYnl0ZXMgPSBpaF9pdGVtX2xlbihpaCk7CiAKIAkJLyogaGFjayBzbyB0aGUgcXVvdGEgY29kZSBkb2Vzbid0IGhhdmUgdG8gZ3Vlc3MgaWYgdGhlIGZpbGUgaGFzCiAJCSAqKiBhIHRhaWwsIGxpbmtzIGFyZSBhbHdheXMgdGFpbHMsIHNvIHRoZXJlJ3Mgbm8gZ3Vlc3NpbmcgbmVlZGVkCiAJCSAqLwotCQlpZiAoIVNfSVNMTksoaW5vZGUtPmlfbW9kZSkgJiYgaXNfZGlyZWN0X2xlX2loKHBfc19paCkpIHsKKwkJaWYgKCFTX0lTTE5LKGlub2RlLT5pX21vZGUpICYmIGlzX2RpcmVjdF9sZV9paChpaCkpCiAJCQlxdW90YV9ieXRlcyA9IGlub2RlLT5pX3NiLT5zX2Jsb2Nrc2l6ZSArIFVORk1fUF9TSVpFOwotCQl9CiAjaWZkZWYgUkVJU0VSUVVPVEFfREVCVUcKIAkJcmVpc2VyZnNfZGVidWcoaW5vZGUtPmlfc2IsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCQkgICAgICAgInJlaXNlcnF1b3RhIGluc2VydF9pdGVtKCk6IGFsbG9jYXRpbmcgJXUgaWQ9JXUgdHlwZT0lYyIsCi0JCQkgICAgICAgcXVvdGFfYnl0ZXMsIGlub2RlLT5pX3VpZCwgaGVhZDJ0eXBlKHBfc19paCkpOworCQkJICAgICAgIHF1b3RhX2J5dGVzLCBpbm9kZS0+aV91aWQsIGhlYWQydHlwZShpaCkpOwogI2VuZGlmCiAJCS8qIFdlIGNhbid0IGRpcnR5IGlub2RlIGhlcmUuIEl0IHdvdWxkIGJlIGltbWVkaWF0ZWx5IHdyaXR0ZW4gYnV0CiAJCSAqIGFwcHJvcHJpYXRlIHN0YXQgaXRlbSBpc24ndCBpbnNlcnRlZCB5ZXQuLi4gKi8KIAkJaWYgKHZmc19kcV9hbGxvY19zcGFjZV9ub2RpcnR5KGlub2RlLCBxdW90YV9ieXRlcykpIHsKLQkJCXBhdGhyZWxzZShwX3NfcGF0aCk7CisJCQlwYXRocmVsc2UocGF0aCk7CiAJCQlyZXR1cm4gLUVEUVVPVDsKIAkJfQogCX0KLQlpbml0X3RiX3N0cnVjdCh0aCwgJnNfaW5zX2JhbGFuY2UsIHRoLT50X3N1cGVyLCBwX3NfcGF0aCwKLQkJICAgICAgIElIX1NJWkUgKyBpaF9pdGVtX2xlbihwX3NfaWgpKTsKKwlpbml0X3RiX3N0cnVjdCh0aCwgJnNfaW5zX2JhbGFuY2UsIHRoLT50X3N1cGVyLCBwYXRoLAorCQkgICAgICAgSUhfU0laRSArIGloX2l0ZW1fbGVuKGloKSk7CiAjaWZkZWYgRElTUExBQ0VfTkVXX1BBQ0tJTkdfTE9DQUxJVElFUwogCXNfaW5zX2JhbGFuY2Uua2V5ID0ga2V5LT5vbl9kaXNrX2tleTsKICNlbmRpZgpAQCAtMjA3NiwxOSArMjA0MSwxOCBAQAogCX0KIAogCXdoaWxlICgocmV0dmFsID0KLQkJZml4X25vZGVzKE1fSU5TRVJULCAmc19pbnNfYmFsYW5jZSwgcF9zX2loLAotCQkJICBwX2NfYm9keSkpID09IFJFUEVBVF9TRUFSQ0gpIHsKKwkJZml4X25vZGVzKE1fSU5TRVJULCAmc19pbnNfYmFsYW5jZSwgaWgsCisJCQkgIGJvZHkpKSA9PSBSRVBFQVRfU0VBUkNIKSB7CiAJICAgICAgc2VhcmNoX2FnYWluOgogCQkvKiBmaWxlIHN5c3RlbSBjaGFuZ2VkIHdoaWxlIHdlIHdlcmUgaW4gdGhlIGZpeF9ub2RlcyAqLwogCQlQUk9DX0lORk9fSU5DKHRoLT50X3N1cGVyLCBpbnNlcnRfaXRlbV9yZXN0YXJ0ZWQpOwotCQlyZXR2YWwgPSBzZWFyY2hfaXRlbSh0aC0+dF9zdXBlciwga2V5LCBwX3NfcGF0aCk7CisJCXJldHZhbCA9IHNlYXJjaF9pdGVtKHRoLT50X3N1cGVyLCBrZXksIHBhdGgpOwogCQlpZiAocmV0dmFsID09IElPX0VSUk9SKSB7CiAJCQlyZXR2YWwgPSAtRUlPOwogCQkJZ290byBlcnJvcl9vdXQ7CiAJCX0KIAkJaWYgKHJldHZhbCA9PSBJVEVNX0ZPVU5EKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHRoLT50X3N1cGVyLAotCQkJCQkgIlBBUC01NzYwOiByZWlzZXJmc19pbnNlcnRfaXRlbTogIgorCQkJcmVpc2VyZnNfd2FybmluZyh0aC0+dF9zdXBlciwgIlBBUC01NzYwIiwKIAkJCQkJICJrZXkgJUsgYWxyZWFkeSBleGlzdHMgaW4gdGhlIHRyZWUiLAogCQkJCQkga2V5KTsKIAkJCXJldHZhbCA9IC1FRVhJU1Q7CkBAIC0yMDk4LDcgKzIwNjIsNyBAQAogCiAJLyogbWFrZSBiYWxhbmNpbmcgYWZ0ZXIgYWxsIHJlc291cmNlcyB3aWxsIGJlIGNvbGxlY3RlZCBhdCBhIHRpbWUgKi8KIAlpZiAocmV0dmFsID09IENBUlJZX09OKSB7Ci0JCWRvX2JhbGFuY2UoJnNfaW5zX2JhbGFuY2UsIHBfc19paCwgcF9jX2JvZHksIE1fSU5TRVJUKTsKKwkJZG9fYmFsYW5jZSgmc19pbnNfYmFsYW5jZSwgaWgsIGJvZHksIE1fSU5TRVJUKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC0yMTA5LDcgKzIwNzMsNyBAQAogI2lmZGVmIFJFSVNFUlFVT1RBX0RFQlVHCiAJcmVpc2VyZnNfZGVidWcodGgtPnRfc3VwZXIsIFJFSVNFUkZTX0RFQlVHX0NPREUsCiAJCSAgICAgICAicmVpc2VycXVvdGEgaW5zZXJ0X2l0ZW0oKTogZnJlZWluZyAldSBpZD0ldSB0eXBlPSVjIiwKLQkJICAgICAgIHF1b3RhX2J5dGVzLCBpbm9kZS0+aV91aWQsIGhlYWQydHlwZShwX3NfaWgpKTsKKwkJICAgICAgIHF1b3RhX2J5dGVzLCBpbm9kZS0+aV91aWQsIGhlYWQydHlwZShpaCkpOwogI2VuZGlmCiAJaWYgKGlub2RlKQogCQl2ZnNfZHFfZnJlZV9zcGFjZV9ub2RpcnR5KGlub2RlLCBxdW90YV9ieXRlcyk7CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy9zdXBlci5jIGIvZnMvcmVpc2VyZnMvc3VwZXIuYwppbmRleCA1ZGJhZmI3Li45NzIyNTBjNiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMvc3VwZXIuYworKysgYi9mcy9yZWlzZXJmcy9zdXBlci5jCkBAIC0xODMsOSArMTgzLDkgQEAKIAkJaWYgKFJFSVNFUkZTX1NCKHMpLT5zX3FmX25hbWVzW2ldKSB7CiAJCQlpbnQgcmV0ID0gcmVpc2VyZnNfcXVvdGFfb25fbW91bnQocywgaSk7CiAJCQlpZiAocmV0IDwgMCkKLQkJCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCQkgInJlaXNlcmZzOiBjYW5ub3QgdHVybiBvbiBqb3VybmFsZWQgcXVvdGE6IGVycm9yICVkIiwKLQkJCQkJCSByZXQpOworCQkJCXJlaXNlcmZzX3dhcm5pbmcocywgInJlaXNlcmZzLTI1MDAiLAorCQkJCQkJICJjYW5ub3QgdHVybiBvbiBqb3VybmFsZWQgIgorCQkJCQkJICJxdW90YTogZXJyb3IgJWQiLCByZXQpOwogCQl9CiAJfQogI2VuZGlmCkBAIC0xOTUsMTcgKzE5NSwxNiBAQAogCXdoaWxlICghcmV0dmFsKSB7CiAJCXJldHZhbCA9IHNlYXJjaF9pdGVtKHMsICZtYXhfY3B1X2tleSwgJnBhdGgpOwogCQlpZiAocmV0dmFsICE9IElURU1fTk9UX0ZPVU5EKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCSAidnMtMjE0MDogZmluaXNoX3VuZmluaXNoZWQ6IHNlYXJjaF9ieV9rZXkgcmV0dXJuZWQgJWQiLAotCQkJCQkgcmV0dmFsKTsKKwkJCXJlaXNlcmZzX2Vycm9yKHMsICJ2cy0yMTQwIiwKKwkJCQkgICAgICAgInNlYXJjaF9ieV9rZXkgcmV0dXJuZWQgJWQiLCByZXR2YWwpOwogCQkJYnJlYWs7CiAJCX0KIAogCQliaCA9IGdldF9sYXN0X2JoKCZwYXRoKTsKIAkJaXRlbV9wb3MgPSBnZXRfaXRlbV9wb3MoJnBhdGgpOwogCQlpZiAoaXRlbV9wb3MgIT0gQl9OUl9JVEVNUyhiaCkpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJICJ2cy0yMDYwOiBmaW5pc2hfdW5maW5pc2hlZDogd3JvbmcgcG9zaXRpb24gZm91bmQiKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgInZzLTIwNjAiLAorCQkJCQkgIndyb25nIHBvc2l0aW9uIGZvdW5kIik7CiAJCQlicmVhazsKIAkJfQogCQlpdGVtX3Bvcy0tOwpAQCAtMjM1LDggKzIzNCw3IEBACiAJCWlmICghaW5vZGUpIHsKIAkJCS8qIHRoZSB1bmxpbmsgYWxtb3N0IGNvbXBsZXRlZCwgaXQganVzdCBkaWQgbm90IG1hbmFnZSB0byByZW1vdmUKIAkJCSAgICJzYXZlIiBsaW5rIGFuZCByZWxlYXNlIG9iamVjdGlkICovCi0JCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCSAidnMtMjE4MDogZmluaXNoX3VuZmluaXNoZWQ6IGlnZXQgZmFpbGVkIGZvciAlSyIsCisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJ2cy0yMTgwIiwgImlnZXQgZmFpbGVkIGZvciAlSyIsCiAJCQkJCSAmb2JqX2tleSk7CiAJCQlyZXR2YWwgPSByZW1vdmVfc2F2ZV9saW5rX29ubHkocywgJnNhdmVfbGlua19rZXksIDEpOwogCQkJY29udGludWU7CkBAIC0yNDQsOCArMjQyLDggQEAKIAogCQlpZiAoIXRydW5jYXRlICYmIGlub2RlLT5pX25saW5rKSB7CiAJCQkvKiBmaWxlIGlzIG5vdCB1bmxpbmtlZCAqLwotCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkgInZzLTIxODU6IGZpbmlzaF91bmZpbmlzaGVkOiBmaWxlICVLIGlzIG5vdCB1bmxpbmtlZCIsCisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJ2cy0yMTg1IiwKKwkJCQkJICJmaWxlICVLIGlzIG5vdCB1bmxpbmtlZCIsCiAJCQkJCSAmb2JqX2tleSk7CiAJCQlyZXR2YWwgPSByZW1vdmVfc2F2ZV9saW5rX29ubHkocywgJnNhdmVfbGlua19rZXksIDApOwogCQkJY29udGludWU7CkBAIC0yNTcsOCArMjU1LDkgQEAKIAkJCSAgIFRoZSBvbmx5IGltYWdpbmFibGUgd2F5IGlzIHRvIGV4ZWN1dGUgdW5maW5pc2hlZCB0cnVuY2F0ZSByZXF1ZXN0CiAJCQkgICB0aGVuIGJvb3QgaW50byBvbGQga2VybmVsLCByZW1vdmUgdGhlIGZpbGUgYW5kIGNyZWF0ZSBkaXIgd2l0aAogCQkJICAgdGhlIHNhbWUga2V5LiAqLwotCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkgImdyZWVuLTIxMDE6IGltcG9zc2libGUgdHJ1bmNhdGUgb24gYSBkaXJlY3RvcnkgJWsuIFBsZWFzZSByZXBvcnQiLAorCQkJcmVpc2VyZnNfd2FybmluZyhzLCAiZ3JlZW4tMjEwMSIsCisJCQkJCSAiaW1wb3NzaWJsZSB0cnVuY2F0ZSBvbiBhICIKKwkJCQkJICJkaXJlY3RvcnkgJWsuIFBsZWFzZSByZXBvcnQiLAogCQkJCQkgSU5PREVfUEtFWShpbm9kZSkpOwogCQkJcmV0dmFsID0gcmVtb3ZlX3NhdmVfbGlua19vbmx5KHMsICZzYXZlX2xpbmtfa2V5LCAwKTsKIAkJCXRydW5jYXRlID0gMDsKQEAgLTI4OCw5ICsyODcsMTAgQEAKIAkJCQkvKiByZW1vdmFsIGdldHMgY29tcGxldGVkIGluIGlwdXQgKi8KIAkJCQlyZXR2YWwgPSAwOwogCQkJfSBlbHNlIHsKLQkJCQlyZWlzZXJmc193YXJuaW5nKHMsICJEZWFkIGxvb3AgaW4gIgotCQkJCQkJImZpbmlzaF91bmZpbmlzaGVkIGRldGVjdGVkLCAiCi0JCQkJCQkianVzdCByZW1vdmUgc2F2ZSBsaW5rXG4iKTsKKwkJCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci0yMTg5IiwgIkRlYWQgbG9vcCAiCisJCQkJCQkgImluIGZpbmlzaF91bmZpbmlzaGVkICIKKwkJCQkJCSAiZGV0ZWN0ZWQsIGp1c3QgcmVtb3ZlICIKKwkJCQkJCSAic2F2ZSBsaW5rXG4iKTsKIAkJCQlyZXR2YWwgPSByZW1vdmVfc2F2ZV9saW5rX29ubHkocywKIAkJCQkJCQkmc2F2ZV9saW5rX2tleSwgMCk7CiAJCQl9CkBAIC0zNjAsOCArMzYwLDkgQEAKIAl9IGVsc2UgewogCQkvKiB0cnVuY2F0ZSAqLwogCQlpZiAoU19JU0RJUihpbm9kZS0+aV9tb2RlKSkKLQkJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsCi0JCQkJCSAiZ3JlZW4tMjEwMjogQWRkaW5nIGEgdHJ1bmNhdGUgc2F2ZWxpbmsgZm9yIGEgZGlyZWN0b3J5ICVrISBQbGVhc2UgcmVwb3J0IiwKKwkJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICJncmVlbi0yMTAyIiwKKwkJCQkJICJBZGRpbmcgYSB0cnVuY2F0ZSBzYXZlbGluayBmb3IgIgorCQkJCQkgImEgZGlyZWN0b3J5ICVrISBQbGVhc2UgcmVwb3J0IiwKIAkJCQkJIElOT0RFX1BLRVkoaW5vZGUpKTsKIAkJc2V0X2NwdV9rZXlfa19vZmZzZXQoJmtleSwgMSk7CiAJCXNldF9jcHVfa2V5X2tfdHlwZSgma2V5LCBUWVBFX0lORElSRUNUKTsKQEAgLTM3Niw5ICszNzcsOSBAQAogCXJldHZhbCA9IHNlYXJjaF9pdGVtKGlub2RlLT5pX3NiLCAma2V5LCAmcGF0aCk7CiAJaWYgKHJldHZhbCAhPSBJVEVNX05PVF9GT1VORCkgewogCQlpZiAocmV0dmFsICE9IC1FTk9TUEMpCi0JCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLCAidnMtMjEwMDogYWRkX3NhdmVfbGluazoiCi0JCQkJCSAic2VhcmNoX2J5X2tleSAoJUspIHJldHVybmVkICVkIiwgJmtleSwKLQkJCQkJIHJldHZhbCk7CisJCQlyZWlzZXJmc19lcnJvcihpbm9kZS0+aV9zYiwgInZzLTIxMDAiLAorCQkJCSAgICAgICAic2VhcmNoX2J5X2tleSAoJUspIHJldHVybmVkICVkIiwgJmtleSwKKwkJCQkgICAgICAgcmV0dmFsKTsKIAkJcGF0aHJlbHNlKCZwYXRoKTsKIAkJcmV0dXJuOwogCX0KQEAgLTM5MSw5ICszOTIsOCBAQAogCSAgICByZWlzZXJmc19pbnNlcnRfaXRlbSh0aCwgJnBhdGgsICZrZXksICZpaCwgTlVMTCwgKGNoYXIgKikmbGluayk7CiAJaWYgKHJldHZhbCkgewogCQlpZiAocmV0dmFsICE9IC1FTk9TUEMpCi0JCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAotCQkJCQkgInZzLTIxMjA6IGFkZF9zYXZlX2xpbms6IGluc2VydF9pdGVtIHJldHVybmVkICVkIiwKLQkJCQkJIHJldHZhbCk7CisJCQlyZWlzZXJmc19lcnJvcihpbm9kZS0+aV9zYiwgInZzLTIxMjAiLAorCQkJCSAgICAgICAiaW5zZXJ0X2l0ZW0gcmV0dXJuZWQgJWQiLCByZXR2YWwpOwogCX0gZWxzZSB7CiAJCWlmICh0cnVuY2F0ZSkKIAkJCVJFSVNFUkZTX0koaW5vZGUpLT5pX2ZsYWdzIHw9CkBAIC00OTIsOCArNDkyLDcgQEAKIAlwcmludF9zdGF0aXN0aWNzKHMpOwogCiAJaWYgKFJFSVNFUkZTX1NCKHMpLT5yZXNlcnZlZF9ibG9ja3MgIT0gMCkgewotCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJICJncmVlbi0yMDA1OiByZWlzZXJmc19wdXRfc3VwZXI6IHJlc2VydmVkIGJsb2NrcyBsZWZ0ICVkIiwKKwkJcmVpc2VyZnNfd2FybmluZyhzLCAiZ3JlZW4tMjAwNSIsICJyZXNlcnZlZCBibG9ja3MgbGVmdCAlZCIsCiAJCQkJIFJFSVNFUkZTX1NCKHMpLT5yZXNlcnZlZF9ibG9ja3MpOwogCX0KIApAQCAtNTU5LDggKzU1OCw4IEBACiAKIAlpbnQgZXJyID0gMDsKIAlpZiAoaW5vZGUtPmlfc2ItPnNfZmxhZ3MgJiBNU19SRE9OTFkpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwKLQkJCQkgImNsbS02MDA2OiB3cml0aW5nIGlub2RlICVsdSBvbiByZWFkb25seSBGUyIsCisJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICJjbG0tNjAwNiIsCisJCQkJICJ3cml0aW5nIGlub2RlICVsdSBvbiByZWFkb25seSBGUyIsCiAJCQkJIGlub2RlLT5pX2lubyk7CiAJCXJldHVybjsKIAl9CkBAIC03NTcsNyArNzU2LDcgQEAKIAkJCSAgIGNoYXIgKipvcHRfYXJnLCB1bnNpZ25lZCBsb25nICpiaXRfZmxhZ3MpCiB7CiAJY2hhciAqcDsKLQkvKiBmb289YmFyLCAKKwkvKiBmb289YmFyLAogCSAgIF4gICBeICBeCiAJICAgfCAgIHwgICstLSBvcHRpb25fZW5kCiAJICAgfCAgICstLSBhcmdfc3RhcnQKQEAgLTc5MiwxMyArNzkxLDE1IEBACiAJCQlpZiAoYml0X2ZsYWdzKSB7CiAJCQkJaWYgKG9wdC0+Y2xybWFzayA9PQogCQkJCSAgICAoMSA8PCBSRUlTRVJGU19VTlNVUFBPUlRFRF9PUFQpKQotCQkJCQlyZWlzZXJmc193YXJuaW5nKHMsICIlcyBub3Qgc3VwcG9ydGVkLiIsCisJCQkJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MDAiLAorCQkJCQkJCSAiJXMgbm90IHN1cHBvcnRlZC5cbiIsCiAJCQkJCQkJIHApOwogCQkJCWVsc2UKIAkJCQkJKmJpdF9mbGFncyAmPSB+b3B0LT5jbHJtYXNrOwogCQkJCWlmIChvcHQtPnNldG1hc2sgPT0KIAkJCQkgICAgKDEgPDwgUkVJU0VSRlNfVU5TVVBQT1JURURfT1BUKSkKLQkJCQkJcmVpc2VyZnNfd2FybmluZyhzLCAiJXMgbm90IHN1cHBvcnRlZC4iLAorCQkJCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci02NTAxIiwKKwkJCQkJCQkgIiVzIG5vdCBzdXBwb3J0ZWQuXG4iLAogCQkJCQkJCSBwKTsKIAkJCQllbHNlCiAJCQkJCSpiaXRfZmxhZ3MgfD0gb3B0LT5zZXRtYXNrOwpAQCAtODA3LDcgKzgwOCw4IEBACiAJCX0KIAl9CiAJaWYgKCFvcHQtPm9wdGlvbl9uYW1lKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywgInVua25vd24gbW91bnQgb3B0aW9uIFwiJXNcIiIsIHApOworCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci02NTAyIiwKKwkJCQkgInVua25vd24gbW91bnQgb3B0aW9uIFwiJXNcIiIsIHApOwogCQlyZXR1cm4gLTE7CiAJfQogCkBAIC04MTUsOCArODE3LDkgQEAKIAlzd2l0Y2ggKCpwKSB7CiAJY2FzZSAnPSc6CiAJCWlmICghb3B0LT5hcmdfcmVxdWlyZWQpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJICJ0aGUgb3B0aW9uIFwiJXNcIiBkb2VzIG5vdCByZXF1aXJlIGFuIGFyZ3VtZW50IiwKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MDMiLAorCQkJCQkgInRoZSBvcHRpb24gXCIlc1wiIGRvZXMgbm90ICIKKwkJCQkJICJyZXF1aXJlIGFuIGFyZ3VtZW50XG4iLAogCQkJCQkgb3B0LT5vcHRpb25fbmFtZSk7CiAJCQlyZXR1cm4gLTE7CiAJCX0KQEAgLTgyNCwxNCArODI3LDE1IEBACiAKIAljYXNlIDA6CiAJCWlmIChvcHQtPmFyZ19yZXF1aXJlZCkgewotCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkgInRoZSBvcHRpb24gXCIlc1wiIHJlcXVpcmVzIGFuIGFyZ3VtZW50IiwKLQkJCQkJIG9wdC0+b3B0aW9uX25hbWUpOworCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUwNCIsCisJCQkJCSAidGhlIG9wdGlvbiBcIiVzXCIgcmVxdWlyZXMgYW4gIgorCQkJCQkgImFyZ3VtZW50XG4iLCBvcHQtPm9wdGlvbl9uYW1lKTsKIAkJCXJldHVybiAtMTsKIAkJfQogCQlicmVhazsKIAlkZWZhdWx0OgotCQlyZWlzZXJmc193YXJuaW5nKHMsICJoZWFkIG9mIG9wdGlvbiBcIiVzXCIgaXMgb25seSBjb3JyZWN0IiwKKwkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUwNSIsCisJCQkJICJoZWFkIG9mIG9wdGlvbiBcIiVzXCIgaXMgb25seSBjb3JyZWN0XG4iLAogCQkJCSBvcHQtPm9wdGlvbl9uYW1lKTsKIAkJcmV0dXJuIC0xOwogCX0KQEAgLTg0Myw3ICs4NDcsOCBAQAogCSAgICAmJiAhKG9wdC0+YXJnX3JlcXVpcmVkICYgKDEgPDwgUkVJU0VSRlNfT1BUX0FMTE9XRU1QVFkpKQogCSAgICAmJiAhc3RybGVuKHApKSB7CiAJCS8qIHRoaXMgY2F0Y2hlcyAib3B0aW9uPSwiIGlmIG5vdCBhbGxvd2VkICovCi0JCXJlaXNlcmZzX3dhcm5pbmcocywgImVtcHR5IGFyZ3VtZW50IGZvciBcIiVzXCIiLAorCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci02NTA2IiwKKwkJCQkgImVtcHR5IGFyZ3VtZW50IGZvciBcIiVzXCJcbiIsCiAJCQkJIG9wdC0+b3B0aW9uX25hbWUpOwogCQlyZXR1cm4gLTE7CiAJfQpAQCAtODY1LDcgKzg3MCw4IEBACiAJCX0KIAl9CiAKLQlyZWlzZXJmc193YXJuaW5nKHMsICJiYWQgdmFsdWUgXCIlc1wiIGZvciBvcHRpb24gXCIlc1wiIiwgcCwKKwlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci02NTA2IiwKKwkJCSAiYmFkIHZhbHVlIFwiJXNcIiBmb3Igb3B0aW9uIFwiJXNcIlxuIiwgcCwKIAkJCSBvcHQtPm9wdGlvbl9uYW1lKTsKIAlyZXR1cm4gLTE7CiB9CkBAIC05NTUsOSArOTYxLDkgQEAKIAkJCQkqYmxvY2tzID0gc2ltcGxlX3N0cnRvdWwoYXJnLCAmcCwgMCk7CiAJCQkJaWYgKCpwICE9ICdcMCcpIHsKIAkJCQkJLyogTk5OIGRvZXMgbm90IGxvb2sgbGlrZSBhIG51bWJlciAqLwotCQkJCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCQkJICJyZWlzZXJmc19wYXJzZV9vcHRpb25zOiBiYWQgdmFsdWUgJXMiLAotCQkJCQkJCSBhcmcpOworCQkJCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci02NTA3IiwKKwkJCQkJCQkgImJhZCB2YWx1ZSAlcyBmb3IgIgorCQkJCQkJCSAiLW9yZXNpemVcbiIsIGFyZyk7CiAJCQkJCXJldHVybiAwOwogCQkJCX0KIAkJCX0KQEAgLTk2OCw4ICs5NzQsOCBAQAogCQkJdW5zaWduZWQgbG9uZyB2YWwgPSBzaW1wbGVfc3RydG91bChhcmcsICZwLCAwKTsKIAkJCS8qIGNvbW1pdD1OTk4gKHRpbWUgaW4gc2Vjb25kcykgKi8KIAkJCWlmICgqcCAhPSAnXDAnIHx8IHZhbCA+PSAodW5zaWduZWQgaW50KS0xKSB7Ci0JCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkJICJyZWlzZXJmc19wYXJzZV9vcHRpb25zOiBiYWQgdmFsdWUgJXMiLAorCQkJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MDgiLAorCQkJCQkJICJiYWQgdmFsdWUgJXMgZm9yIC1vY29tbWl0XG4iLAogCQkJCQkJIGFyZyk7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CkBAIC05NzcsMTYgKzk4MywxOCBAQAogCQl9CiAKIAkJaWYgKGMgPT0gJ3cnKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsICJyZWlzZXJmczogbm9sYXJnZWlvIG9wdGlvbiBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7CisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci02NTA5IiwgIm5vbGFyZ2VpbyBvcHRpb24gIgorCQkJCQkgImlzIG5vIGxvbmdlciBzdXBwb3J0ZWQiKTsKIAkJCXJldHVybiAwOwogCQl9CiAKIAkJaWYgKGMgPT0gJ2onKSB7CiAJCQlpZiAoYXJnICYmICphcmcgJiYgamRldl9uYW1lKSB7CiAJCQkJaWYgKCpqZGV2X25hbWUpIHsJLy9IbSwgYWxyZWFkeSBhc3NpZ25lZD8KLQkJCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkJCSAicmVpc2VyZnNfcGFyc2Vfb3B0aW9uczogam91cm5hbCBkZXZpY2Ugd2FzIGFscmVhZHkgIHNwZWNpZmllZCB0byBiZSAlcyIsCi0JCQkJCQkJICpqZGV2X25hbWUpOworCQkJCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci02NTEwIiwKKwkJCQkJCQkgImpvdXJuYWwgZGV2aWNlIHdhcyAiCisJCQkJCQkJICJhbHJlYWR5IHNwZWNpZmllZCB0byAiCisJCQkJCQkJICJiZSAlcyIsICpqZGV2X25hbWUpOwogCQkJCQlyZXR1cm4gMDsKIAkJCQl9CiAJCQkJKmpkZXZfbmFtZSA9IGFyZzsKQEAgLTk5OCwyOSArMTAwNiwzNSBAQAogCiAJCQlpZiAoc2JfYW55X3F1b3RhX2xvYWRlZChzKSAmJgogCQkJICAgICghKmFyZyAhPSAhUkVJU0VSRlNfU0IocyktPnNfcWZfbmFtZXNbcXR5cGVdKSkgewotCQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJCSAicmVpc2VyZnNfcGFyc2Vfb3B0aW9uczogY2Fubm90IGNoYW5nZSBqb3VybmFsZWQgcXVvdGEgb3B0aW9ucyB3aGVuIHF1b3RhIHR1cm5lZCBvbi4iKTsKKwkJCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci02NTExIiwKKwkJCQkJCSAiY2Fubm90IGNoYW5nZSBqb3VybmFsZWQgIgorCQkJCQkJICJxdW90YSBvcHRpb25zIHdoZW4gcXVvdGEgIgorCQkJCQkJICJ0dXJuZWQgb24uIik7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCQlpZiAoKmFyZykgewkvKiBTb21lIGZpbGVuYW1lIHNwZWNpZmllZD8gKi8KIAkJCQlpZiAoUkVJU0VSRlNfU0IocyktPnNfcWZfbmFtZXNbcXR5cGVdCiAJCQkJICAgICYmIHN0cmNtcChSRUlTRVJGU19TQihzKS0+c19xZl9uYW1lc1txdHlwZV0sCiAJCQkJCSAgICAgIGFyZykpIHsKLQkJCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkJCSAicmVpc2VyZnNfcGFyc2Vfb3B0aW9uczogJXMgcXVvdGEgZmlsZSBhbHJlYWR5IHNwZWNpZmllZC4iLAorCQkJCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci02NTEyIiwKKwkJCQkJCQkgIiVzIHF1b3RhIGZpbGUgIgorCQkJCQkJCSAiYWxyZWFkeSBzcGVjaWZpZWQuIiwKIAkJCQkJCQkgUVRZUEUyTkFNRShxdHlwZSkpOwogCQkJCQlyZXR1cm4gMDsKIAkJCQl9CiAJCQkJaWYgKHN0cmNocihhcmcsICcvJykpIHsKLQkJCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkJCSAicmVpc2VyZnNfcGFyc2Vfb3B0aW9uczogcXVvdGFmaWxlIG11c3QgYmUgb24gZmlsZXN5c3RlbSByb290LiIpOworCQkJCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci02NTEzIiwKKwkJCQkJCQkgInF1b3RhZmlsZSBtdXN0IGJlICIKKwkJCQkJCQkgIm9uIGZpbGVzeXN0ZW0gcm9vdC4iKTsKIAkJCQkJcmV0dXJuIDA7CiAJCQkJfQogCQkJCXFmX25hbWVzW3F0eXBlXSA9CiAJCQkJICAgIGttYWxsb2Moc3RybGVuKGFyZykgKyAxLCBHRlBfS0VSTkVMKTsKIAkJCQlpZiAoIXFmX25hbWVzW3F0eXBlXSkgewotCQkJCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCQkJICJyZWlzZXJmc19wYXJzZV9vcHRpb25zOiBub3QgZW5vdWdoIG1lbW9yeSBmb3Igc3RvcmluZyBxdW90YWZpbGUgbmFtZS4iKTsKKwkJCQkJcmVpc2VyZnNfd2FybmluZyhzLCAicmVpc2VyZnMtMjUwMiIsCisJCQkJCQkJICJub3QgZW5vdWdoIG1lbW9yeSAiCisJCQkJCQkJICJmb3Igc3RvcmluZyAiCisJCQkJCQkJICJxdW90YWZpbGUgbmFtZS4iKTsKIAkJCQkJcmV0dXJuIDA7CiAJCQkJfQogCQkJCXN0cmNweShxZl9uYW1lc1txdHlwZV0sIGFyZyk7CkBAIC0xMDM4LDIxICsxMDUyLDI0IEBACiAJCQllbHNlIGlmICghc3RyY21wKGFyZywgInZmc3YwIikpCiAJCQkJKnFmbXQgPSBRRk1UX1ZGU19WMDsKIAkJCWVsc2UgewotCQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJCSAicmVpc2VyZnNfcGFyc2Vfb3B0aW9uczogdW5rbm93biBxdW90YSBmb3JtYXQgc3BlY2lmaWVkLiIpOworCQkJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MTQiLAorCQkJCQkJICJ1bmtub3duIHF1b3RhIGZvcm1hdCAiCisJCQkJCQkgInNwZWNpZmllZC4iKTsKIAkJCQlyZXR1cm4gMDsKIAkJCX0KIAkJCWlmIChzYl9hbnlfcXVvdGFfbG9hZGVkKHMpICYmCiAJCQkgICAgKnFmbXQgIT0gUkVJU0VSRlNfU0IocyktPnNfanF1b3RhX2ZtdCkgewotCQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJCSAicmVpc2VyZnNfcGFyc2Vfb3B0aW9uczogY2Fubm90IGNoYW5nZSBqb3VybmFsZWQgcXVvdGEgb3B0aW9ucyB3aGVuIHF1b3RhIHR1cm5lZCBvbi4iKTsKKwkJCQlyZWlzZXJmc193YXJuaW5nKHMsICJzdXBlci02NTE1IiwKKwkJCQkJCSAiY2Fubm90IGNoYW5nZSBqb3VybmFsZWQgIgorCQkJCQkJICJxdW90YSBvcHRpb25zIHdoZW4gcXVvdGEgIgorCQkJCQkJICJ0dXJuZWQgb24uIik7CiAJCQkJcmV0dXJuIDA7CiAJCQl9CiAJCX0KICNlbHNlCiAJCWlmIChjID09ICd1JyB8fCBjID09ICdnJyB8fCBjID09ICdmJykgewotCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkgInJlaXNlcmZzX3BhcnNlX29wdGlvbnM6IGpvdXJuYWxlZCBxdW90YSBvcHRpb25zIG5vdCBzdXBwb3J0ZWQuIik7CisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJyZWlzZXJmcy0yNTAzIiwgImpvdXJuYWxlZCAiCisJCQkJCSAicXVvdGEgb3B0aW9ucyBub3Qgc3VwcG9ydGVkLiIpOwogCQkJcmV0dXJuIDA7CiAJCX0KICNlbmRpZgpAQCAtMTA2MSwxNSArMTA3OCwxNSBAQAogI2lmZGVmIENPTkZJR19RVU9UQQogCWlmICghUkVJU0VSRlNfU0IocyktPnNfanF1b3RhX2ZtdCAmJiAhKnFmbXQKIAkgICAgJiYgKHFmX25hbWVzW1VTUlFVT1RBXSB8fCBxZl9uYW1lc1tHUlBRVU9UQV0pKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkgInJlaXNlcmZzX3BhcnNlX29wdGlvbnM6IGpvdXJuYWxlZCBxdW90YSBmb3JtYXQgbm90IHNwZWNpZmllZC4iKTsKKwkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUxNSIsCisJCQkJICJqb3VybmFsZWQgcXVvdGEgZm9ybWF0IG5vdCBzcGVjaWZpZWQuIik7CiAJCXJldHVybiAwOwogCX0KIAkvKiBUaGlzIGNoZWNraW5nIGlzIG5vdCBwcmVjaXNlIHdydCB0aGUgcXVvdGEgdHlwZSBidXQgZm9yIG91ciBwdXJwb3NlcyBpdCBpcyBzdWZmaWNpZW50ICovCiAJaWYgKCEoKm1vdW50X29wdGlvbnMgJiAoMSA8PCBSRUlTRVJGU19RVU9UQSkpCiAJICAgICYmIHNiX2FueV9xdW90YV9sb2FkZWQocykpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCSAicmVpc2VyZnNfcGFyc2Vfb3B0aW9uczogcXVvdGEgb3B0aW9ucyBtdXN0IGJlIHByZXNlbnQgd2hlbiBxdW90YSBpcyB0dXJuZWQgb24uIik7CisJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTY1MTYiLCAicXVvdGEgb3B0aW9ucyBtdXN0ICIKKwkJCQkgImJlIHByZXNlbnQgd2hlbiBxdW90YSBpcyB0dXJuZWQgb24uIik7CiAJCXJldHVybiAwOwogCX0KICNlbmRpZgpAQCAtMTEyOSwxNCArMTE0NiwxNSBAQAogCiAJaWYgKHJlaXNlcmZzX2F0dHJzKHMpKSB7CiAJCWlmIChvbGRfZm9ybWF0X29ubHkocykpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJICJyZWlzZXJmczogY2Fubm90IHN1cHBvcnQgYXR0cmlidXRlcyBvbiAzLjUueCBkaXNrIGZvcm1hdCIpOworCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUxNyIsICJjYW5ub3Qgc3VwcG9ydCAiCisJCQkJCSAiYXR0cmlidXRlcyBvbiAzLjUueCBkaXNrIGZvcm1hdCIpOwogCQkJUkVJU0VSRlNfU0IocyktPnNfbW91bnRfb3B0ICY9IH4oMSA8PCBSRUlTRVJGU19BVFRSUyk7CiAJCQlyZXR1cm47CiAJCX0KIAkJaWYgKCEobGUzMl90b19jcHUocnMtPnNfZmxhZ3MpICYgcmVpc2VyZnNfYXR0cnNfY2xlYXJlZCkpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJICJyZWlzZXJmczogY2Fubm90IHN1cHBvcnQgYXR0cmlidXRlcyB1bnRpbCBmbGFnIGlzIHNldCBpbiBzdXBlci1ibG9jayIpOworCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUxOCIsICJjYW5ub3Qgc3VwcG9ydCAiCisJCQkJCSAiYXR0cmlidXRlcyB1bnRpbCBmbGFnIGlzIHNldCBpbiAiCisJCQkJCSAic3VwZXItYmxvY2siKTsKIAkJCVJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCAmPSB+KDEgPDwgUkVJU0VSRlNfQVRUUlMpOwogCQl9CiAJfQpAQCAtMTI3OCw2ICsxMjk2LDggQEAKIAkJUkVJU0VSRlNfU0IocyktPnNfbW91bnRfc3RhdGUgPSBzYl91bW91bnRfc3RhdGUocnMpOwogCQlzLT5zX2ZsYWdzICY9IH5NU19SRE9OTFk7CiAJCXNldF9zYl91bW91bnRfc3RhdGUocnMsIFJFSVNFUkZTX0VSUk9SX0ZTKTsKKwkJaWYgKCFvbGRfZm9ybWF0X29ubHkocykpCisJCQlzZXRfc2JfbW50X2NvdW50KHJzLCBzYl9tbnRfY291bnQocnMpICsgMSk7CiAJCS8qIG1hcmtfYnVmZmVyX2RpcnR5IChTQl9CVUZGRVJfV0lUSF9TQiAocyksIDEpOyAqLwogCQlqb3VybmFsX21hcmtfZGlydHkoJnRoLCBzLCBTQl9CVUZGRVJfV0lUSF9TQihzKSk7CiAJCVJFSVNFUkZTX1NCKHMpLT5zX21vdW50X3N0YXRlID0gUkVJU0VSRlNfVkFMSURfRlM7CkBAIC0xMzEyLDcgKzEzMzIsNyBAQAogCiAJYmggPSBzYl9icmVhZChzLCBvZmZzZXQgLyBzLT5zX2Jsb2Nrc2l6ZSk7CiAJaWYgKCFiaCkgewotCQlyZWlzZXJmc193YXJuaW5nKHMsICJzaC0yMDA2OiByZWFkX3N1cGVyX2Jsb2NrOiAiCisJCXJlaXNlcmZzX3dhcm5pbmcocywgInNoLTIwMDYiLAogCQkJCSAiYnJlYWQgZmFpbGVkIChkZXYgJXMsIGJsb2NrICVsdSwgc2l6ZSAlbHUpIiwKIAkJCQkgcmVpc2VyZnNfYmRldm5hbWUocyksIG9mZnNldCAvIHMtPnNfYmxvY2tzaXplLAogCQkJCSBzLT5zX2Jsb2Nrc2l6ZSk7CkBAIC0xMzI2LDE1ICsxMzQ2LDE1IEBACiAJfQogCS8vCiAJLy8gb2ssIHJlaXNlcmZzIHNpZ25hdHVyZSAob2xkIG9yIG5ldykgZm91bmQgaW4gYXQgdGhlIGdpdmVuIG9mZnNldAotCS8vICAgIAorCS8vCiAJZnNfYmxvY2tzaXplID0gc2JfYmxvY2tzaXplKHJzKTsKIAlicmVsc2UoYmgpOwogCXNiX3NldF9ibG9ja3NpemUocywgZnNfYmxvY2tzaXplKTsKIAogCWJoID0gc2JfYnJlYWQocywgb2Zmc2V0IC8gcy0+c19ibG9ja3NpemUpOwogCWlmICghYmgpIHsKLQkJcmVpc2VyZnNfd2FybmluZyhzLCAic2gtMjAwNzogcmVhZF9zdXBlcl9ibG9jazogIgotCQkJCSAiYnJlYWQgZmFpbGVkIChkZXYgJXMsIGJsb2NrICVsdSwgc2l6ZSAlbHUpXG4iLAorCQlyZWlzZXJmc193YXJuaW5nKHMsICJzaC0yMDA3IiwKKwkJCQkgImJyZWFkIGZhaWxlZCAoZGV2ICVzLCBibG9jayAlbHUsIHNpemUgJWx1KSIsCiAJCQkJIHJlaXNlcmZzX2JkZXZuYW1lKHMpLCBvZmZzZXQgLyBzLT5zX2Jsb2Nrc2l6ZSwKIAkJCQkgcy0+c19ibG9ja3NpemUpOwogCQlyZXR1cm4gMTsKQEAgLTEzNDIsOCArMTM2Miw4IEBACiAKIAlycyA9IChzdHJ1Y3QgcmVpc2VyZnNfc3VwZXJfYmxvY2sgKiliaC0+Yl9kYXRhOwogCWlmIChzYl9ibG9ja3NpemUocnMpICE9IHMtPnNfYmxvY2tzaXplKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcocywgInNoLTIwMTE6IHJlYWRfc3VwZXJfYmxvY2s6ICIKLQkJCQkgImNhbid0IGZpbmQgYSByZWlzZXJmcyBmaWxlc3lzdGVtIG9uIChkZXYgJXMsIGJsb2NrICVMdSwgc2l6ZSAlbHUpXG4iLAorCQlyZWlzZXJmc193YXJuaW5nKHMsICJzaC0yMDExIiwgImNhbid0IGZpbmQgYSByZWlzZXJmcyAiCisJCQkJICJmaWxlc3lzdGVtIG9uIChkZXYgJXMsIGJsb2NrICVMdSwgc2l6ZSAlbHUpIiwKIAkJCQkgcmVpc2VyZnNfYmRldm5hbWUocyksCiAJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpYmgtPmJfYmxvY2tuciwKIAkJCQkgcy0+c19ibG9ja3NpemUpOwpAQCAtMTM1Myw5ICsxMzczLDEwIEBACiAKIAlpZiAocnMtPnNfdjEuc19yb290X2Jsb2NrID09IGNwdV90b19sZTMyKC0xKSkgewogCQlicmVsc2UoYmgpOwotCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJICJVbmZpbmlzaGVkIHJlaXNlcmZzY2sgLS1yZWJ1aWxkLXRyZWUgcnVuIGRldGVjdGVkLiBQbGVhc2UgcnVuXG4iCi0JCQkJICJyZWlzZXJmc2NrIC0tcmVidWlsZC10cmVlIGFuZCB3YWl0IGZvciBhIGNvbXBsZXRpb24uIElmIHRoYXQgZmFpbHNcbiIKKwkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItNjUxOSIsICJVbmZpbmlzaGVkIHJlaXNlcmZzY2sgIgorCQkJCSAiLS1yZWJ1aWxkLXRyZWUgcnVuIGRldGVjdGVkLiBQbGVhc2UgcnVuXG4iCisJCQkJICJyZWlzZXJmc2NrIC0tcmVidWlsZC10cmVlIGFuZCB3YWl0IGZvciBhICIKKwkJCQkgImNvbXBsZXRpb24uIElmIHRoYXQgZmFpbHNcbiIKIAkJCQkgImdldCBuZXdlciByZWlzZXJmc3Byb2dzIHBhY2thZ2UiKTsKIAkJcmV0dXJuIDE7CiAJfQpAQCAtMTM2NywxOCArMTM4OCwxNSBAQAogCQkvKiBtYWdpYyBpcyBvZiBub24tc3RhbmRhcmQgam91cm5hbCBmaWxlc3lzdGVtLCBsb29rIGF0IHNfdmVyc2lvbiB0bwogCQkgICBmaW5kIHdoaWNoIGZvcm1hdCBpcyBpbiB1c2UgKi8KIAkJaWYgKHNiX3ZlcnNpb24ocnMpID09IFJFSVNFUkZTX1ZFUlNJT05fMikKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJICJyZWFkX3N1cGVyX2Jsb2NrOiBmb3VuZCByZWlzZXJmcyBmb3JtYXQgXCIzLjZcIiIKLQkJCQkJICIgd2l0aCBub24tc3RhbmRhcmQgam91cm5hbCIpOworCQkJcmVpc2VyZnNfaW5mbyhzLCAiZm91bmQgcmVpc2VyZnMgZm9ybWF0IFwiMy42XCIiCisJCQkJICAgICAgIiB3aXRoIG5vbi1zdGFuZGFyZCBqb3VybmFsXG4iKTsKIAkJZWxzZSBpZiAoc2JfdmVyc2lvbihycykgPT0gUkVJU0VSRlNfVkVSU0lPTl8xKQotCQkJcmVpc2VyZnNfd2FybmluZyhzLAotCQkJCQkgInJlYWRfc3VwZXJfYmxvY2s6IGZvdW5kIHJlaXNlcmZzIGZvcm1hdCBcIjMuNVwiIgotCQkJCQkgIiB3aXRoIG5vbi1zdGFuZGFyZCBqb3VybmFsIik7CisJCQlyZWlzZXJmc19pbmZvKHMsICJmb3VuZCByZWlzZXJmcyBmb3JtYXQgXCIzLjVcIiIKKwkJCQkgICAgICAiIHdpdGggbm9uLXN0YW5kYXJkIGpvdXJuYWxcbiIpOwogCQllbHNlIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJICJzaC0yMDEyOiByZWFkX3N1cGVyX2Jsb2NrOiBmb3VuZCB1bmtub3duICIKLQkJCQkJICJmb3JtYXQgXCIldVwiIG9mIHJlaXNlcmZzIHdpdGggbm9uLXN0YW5kYXJkIG1hZ2ljIiwKLQkJCQkJIHNiX3ZlcnNpb24ocnMpKTsKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgInNoLTIwMTIiLCAiZm91bmQgdW5rbm93biAiCisJCQkJCSAiZm9ybWF0IFwiJXVcIiBvZiByZWlzZXJmcyB3aXRoICIKKwkJCQkJICJub24tc3RhbmRhcmQgbWFnaWMiLCBzYl92ZXJzaW9uKHJzKSk7CiAJCQlyZXR1cm4gMTsKIAkJfQogCX0gZWxzZQpAQCAtMTQwOCw4ICsxNDI2LDcgQEAKIAlsbF9yd19ibG9jayhSRUFELCAxLCAmKFNCX0JVRkZFUl9XSVRIX1NCKHMpKSk7CiAJd2FpdF9vbl9idWZmZXIoU0JfQlVGRkVSX1dJVEhfU0IocykpOwogCWlmICghYnVmZmVyX3VwdG9kYXRlKFNCX0JVRkZFUl9XSVRIX1NCKHMpKSkgewotCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJICJyZXJlYWRfbWV0YV9ibG9ja3MsIGVycm9yIHJlYWRpbmcgdGhlIHN1cGVyIik7CisJCXJlaXNlcmZzX3dhcm5pbmcocywgInJlaXNlcmZzLTI1MDQiLCAiZXJyb3IgcmVhZGluZyB0aGUgc3VwZXIiKTsKIAkJcmV0dXJuIDE7CiAJfQogCkBAIC0xNDUyLDggKzE0NjksOCBAQAogCQkJaWYgKHJlaXNlcmZzX3J1cGFzb3ZfaGFzaChzKSkgewogCQkJCWhhc2ggPSBZVVJBX0hBU0g7CiAJCQl9Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsICJGUyBzZWVtcyB0byBiZSBlbXB0eSwgYXV0b2RldGVjdCAiCi0JCQkJCSAiaXMgdXNpbmcgdGhlIGRlZmF1bHQgaGFzaCIpOworCQkJcmVpc2VyZnNfaW5mbyhzLCAiRlMgc2VlbXMgdG8gYmUgZW1wdHksIGF1dG9kZXRlY3QgIgorCQkJCQkgImlzIHVzaW5nIHRoZSBkZWZhdWx0IGhhc2hcbiIpOwogCQkJYnJlYWs7CiAJCX0KIAkJcjVoYXNoID0gR0VUX0hBU0hfVkFMVUUocjVfaGFzaChkZS5kZV9uYW1lLCBkZS5kZV9uYW1lbGVuKSk7CkBAIC0xNDczLDEwICsxNDkwLDEwIEBACiAJCQkmJiAoeXVyYWhhc2ggPT0KIAkJCSAgICBHRVRfSEFTSF9WQUxVRShkZWhfb2Zmc2V0CiAJCQkJCSAgICgmKGRlLmRlX2RlaFtkZS5kZV9lbnRyeV9udW1dKSkpKSkpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywKLQkJCQkJICJVbmFibGUgdG8gYXV0b21hdGljYWxseSBkZXRlY3QgaGFzaCBmdW5jdGlvbi4gIgotCQkJCQkgIlBsZWFzZSBtb3VudCB3aXRoIC1vIGhhc2g9e3RlYSxydXBhc292LHI1fSIsCi0JCQkJCSByZWlzZXJmc19iZGV2bmFtZShzKSk7CisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJyZWlzZXJmcy0yNTA2IiwgIlVuYWJsZSB0byAiCisJCQkJCSAiYXV0b21hdGljYWxseSBkZXRlY3QgaGFzaCBmdW5jdGlvbi4gIgorCQkJCQkgIlBsZWFzZSBtb3VudCB3aXRoIC1vICIKKwkJCQkJICJoYXNoPXt0ZWEscnVwYXNvdixyNX0iKTsKIAkJCWhhc2ggPSBVTlNFVF9IQVNIOwogCQkJYnJlYWs7CiAJCX0KQEAgLTE0OTAsNyArMTUwNyw4IEBACiAJCQkgKGRlaF9vZmZzZXQoJihkZS5kZV9kZWhbZGUuZGVfZW50cnlfbnVtXSkpKSA9PSByNWhhc2gpCiAJCQloYXNoID0gUjVfSEFTSDsKIAkJZWxzZSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsICJVbnJlY29nbmlzZWQgaGFzaCBmdW5jdGlvbiIpOworCQkJcmVpc2VyZnNfd2FybmluZyhzLCAicmVpc2VyZnMtMjUwNiIsCisJCQkJCSAiVW5yZWNvZ25pc2VkIGhhc2ggZnVuY3Rpb24iKTsKIAkJCWhhc2ggPSBVTlNFVF9IQVNIOwogCQl9CiAJfSB3aGlsZSAoMCk7CkBAIC0xNTE0LDIxICsxNTMyLDI0IEBACiAJCWNvZGUgPSBmaW5kX2hhc2hfb3V0KHMpOwogCiAJaWYgKGNvZGUgIT0gVU5TRVRfSEFTSCAmJiByZWlzZXJmc19oYXNoX2RldGVjdChzKSkgewotCQkvKiBkZXRlY3Rpb24gaGFzIGZvdW5kIHRoZSBoYXNoLCBhbmQgd2UgbXVzdCBjaGVjayBhZ2FpbnN0IHRoZSAKLQkJICoqIG1vdW50IG9wdGlvbnMgCisJCS8qIGRldGVjdGlvbiBoYXMgZm91bmQgdGhlIGhhc2gsIGFuZCB3ZSBtdXN0IGNoZWNrIGFnYWluc3QgdGhlCisJCSAqKiBtb3VudCBvcHRpb25zCiAJCSAqLwogCQlpZiAocmVpc2VyZnNfcnVwYXNvdl9oYXNoKHMpICYmIGNvZGUgIT0gWVVSQV9IQVNIKSB7Ci0JCQlyZWlzZXJmc193YXJuaW5nKHMsICJFcnJvciwgJXMgaGFzaCBkZXRlY3RlZCwgIgorCQkJcmVpc2VyZnNfd2FybmluZyhzLCAicmVpc2VyZnMtMjUwNyIsCisJCQkJCSAiRXJyb3IsICVzIGhhc2ggZGV0ZWN0ZWQsICIKIAkJCQkJICJ1bmFibGUgdG8gZm9yY2UgcnVwYXNvdiBoYXNoIiwKIAkJCQkJIHJlaXNlcmZzX2hhc2huYW1lKGNvZGUpKTsKIAkJCWNvZGUgPSBVTlNFVF9IQVNIOwogCQl9IGVsc2UgaWYgKHJlaXNlcmZzX3RlYV9oYXNoKHMpICYmIGNvZGUgIT0gVEVBX0hBU0gpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywgIkVycm9yLCAlcyBoYXNoIGRldGVjdGVkLCAiCisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJyZWlzZXJmcy0yNTA4IiwKKwkJCQkJICJFcnJvciwgJXMgaGFzaCBkZXRlY3RlZCwgIgogCQkJCQkgInVuYWJsZSB0byBmb3JjZSB0ZWEgaGFzaCIsCiAJCQkJCSByZWlzZXJmc19oYXNobmFtZShjb2RlKSk7CiAJCQljb2RlID0gVU5TRVRfSEFTSDsKIAkJfSBlbHNlIGlmIChyZWlzZXJmc19yNV9oYXNoKHMpICYmIGNvZGUgIT0gUjVfSEFTSCkgewotCQkJcmVpc2VyZnNfd2FybmluZyhzLCAiRXJyb3IsICVzIGhhc2ggZGV0ZWN0ZWQsICIKKwkJCXJlaXNlcmZzX3dhcm5pbmcocywgInJlaXNlcmZzLTI1MDkiLAorCQkJCQkgIkVycm9yLCAlcyBoYXNoIGRldGVjdGVkLCAiCiAJCQkJCSAidW5hYmxlIHRvIGZvcmNlIHI1IGhhc2giLAogCQkJCQkgcmVpc2VyZnNfaGFzaG5hbWUoY29kZSkpOwogCQkJY29kZSA9IFVOU0VUX0hBU0g7CkBAIC0xNTQ0LDcgKzE1NjUsNyBAQAogCQl9CiAJfQogCi0JLyogaWYgd2UgYXJlIG1vdW50ZWQgUlcsIGFuZCB3ZSBoYXZlIGEgbmV3IHZhbGlkIGhhc2ggY29kZSwgdXBkYXRlIAorCS8qIGlmIHdlIGFyZSBtb3VudGVkIFJXLCBhbmQgd2UgaGF2ZSBhIG5ldyB2YWxpZCBoYXNoIGNvZGUsIHVwZGF0ZQogCSAqKiB0aGUgc3VwZXIKIAkgKi8KIAlpZiAoY29kZSAhPSBVTlNFVF9IQVNIICYmCkBAIC0xNTg3LDkgKzE2MDgsOSBAQAogCXJldHVybiAwOwogfQogCi0jZGVmaW5lIFNXQVJOKHNpbGVudCwgcywgLi4uKQkJCVwKKyNkZWZpbmUgU1dBUk4oc2lsZW50LCBzLCBpZCwgLi4uKQkJCVwKIAlpZiAoIShzaWxlbnQpKQkJCQlcCi0JCXJlaXNlcmZzX3dhcm5pbmcgKHMsIF9fVkFfQVJHU19fKQorCQlyZWlzZXJmc193YXJuaW5nKHMsIGlkLCBfX1ZBX0FSR1NfXykKIAogc3RhdGljIGludCByZWlzZXJmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgdm9pZCAqZGF0YSwgaW50IHNpbGVudCkKIHsKQEAgLTE2MjMsMTAgKzE2NDQsNiBAQAogCVJFSVNFUkZTX1NCKHMpLT5zX2FsbG9jX29wdGlvbnMucHJlYWxsb2NtaW4gPSAwOwogCS8qIFByZWFsbG9jYXRlIGJ5IDE2IGJsb2NrcyAoMTctMSkgYXQgb25jZSAqLwogCVJFSVNFUkZTX1NCKHMpLT5zX2FsbG9jX29wdGlvbnMucHJlYWxsb2NzaXplID0gMTc7Ci0jaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSCi0JLyogSW5pdGlhbGl6ZSB0aGUgcndzZW0gZm9yIHhhdHRyIGRpciAqLwotCWluaXRfcndzZW0oJlJFSVNFUkZTX1NCKHMpLT54YXR0cl9kaXJfc2VtKTsKLSNlbmRpZgogCS8qIHNldHVwIGRlZmF1bHQgYmxvY2sgYWxsb2NhdG9yIG9wdGlvbnMgKi8KIAlyZWlzZXJmc19pbml0X2FsbG9jX29wdGlvbnMocyk7CiAKQEAgLTE2NDEsOCArMTY1OCw3IEBACiAjZW5kaWYKIAogCWlmIChibG9ja3MpIHsKLQkJU1dBUk4oc2lsZW50LCBzLCAiam1hY2QtNzogcmVpc2VyZnNfZmlsbF9zdXBlcjogcmVzaXplIG9wdGlvbiAiCi0JCSAgICAgICJmb3IgcmVtb3VudCBvbmx5Iik7CisJCVNXQVJOKHNpbGVudCwgcywgImptYWNkLTciLCAicmVzaXplIG9wdGlvbiBmb3IgcmVtb3VudCBvbmx5Iik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0xNjUxLDggKzE2NjcsNyBAQAogCQlvbGRfZm9ybWF0ID0gMTsKIAkvKiB0cnkgbmV3IGZvcm1hdCAoNjQtdGggMWsgYmxvY2spLCB3aGljaCBjYW4gY29udGFpbiByZWlzZXJmcyBzdXBlciBibG9jayAqLwogCWVsc2UgaWYgKHJlYWRfc3VwZXJfYmxvY2socywgUkVJU0VSRlNfRElTS19PRkZTRVRfSU5fQllURVMpKSB7Ci0JCVNXQVJOKHNpbGVudCwgcywKLQkJICAgICAgInNoLTIwMjE6IHJlaXNlcmZzX2ZpbGxfc3VwZXI6IGNhbiBub3QgZmluZCByZWlzZXJmcyBvbiAlcyIsCisJCVNXQVJOKHNpbGVudCwgcywgInNoLTIwMjEiLCAiY2FuIG5vdCBmaW5kIHJlaXNlcmZzIG9uICVzIiwKIAkJICAgICAgcmVpc2VyZnNfYmRldm5hbWUocykpOwogCQlnb3RvIGVycm9yOwogCX0KQEAgLTE2NjQsMTMgKzE2NzksMTIgQEAKIAlpZiAocy0+c19iZGV2ICYmIHMtPnNfYmRldi0+YmRfaW5vZGUKIAkgICAgJiYgaV9zaXplX3JlYWQocy0+c19iZGV2LT5iZF9pbm9kZSkgPAogCSAgICBzYl9ibG9ja19jb3VudChycykgKiBzYl9ibG9ja3NpemUocnMpKSB7Ci0JCVNXQVJOKHNpbGVudCwgcywKLQkJICAgICAgIkZpbGVzeXN0ZW0gb24gJXMgY2Fubm90IGJlIG1vdW50ZWQgYmVjYXVzZSBpdCBpcyBiaWdnZXIgdGhhbiB0aGUgZGV2aWNlIiwKLQkJICAgICAgcmVpc2VyZnNfYmRldm5hbWUocykpOwotCQlTV0FSTihzaWxlbnQsIHMsCi0JCSAgICAgICJZb3UgbWF5IG5lZWQgdG8gcnVuIGZzY2sgb3IgaW5jcmVhc2Ugc2l6ZSBvZiB5b3VyIExWTSBwYXJ0aXRpb24iKTsKLQkJU1dBUk4oc2lsZW50LCBzLAotCQkgICAgICAiT3IgbWF5IGJlIHlvdSBmb3Jnb3QgdG8gcmVib290IGFmdGVyIGZkaXNrIHdoZW4gaXQgdG9sZCB5b3UgdG8iKTsKKwkJU1dBUk4oc2lsZW50LCBzLCAiIiwgIkZpbGVzeXN0ZW0gY2Fubm90IGJlICIKKwkJICAgICAgIm1vdW50ZWQgYmVjYXVzZSBpdCBpcyBiaWdnZXIgdGhhbiB0aGUgZGV2aWNlIik7CisJCVNXQVJOKHNpbGVudCwgcywgIiIsICJZb3UgbWF5IG5lZWQgdG8gcnVuIGZzY2sgIgorCQkgICAgICAib3IgaW5jcmVhc2Ugc2l6ZSBvZiB5b3VyIExWTSBwYXJ0aXRpb24iKTsKKwkJU1dBUk4oc2lsZW50LCBzLCAiIiwgIk9yIG1heSBiZSB5b3UgZm9yZ290IHRvICIKKwkJICAgICAgInJlYm9vdCBhZnRlciBmZGlzayB3aGVuIGl0IHRvbGQgeW91IHRvIik7CiAJCWdvdG8gZXJyb3I7CiAJfQogCkBAIC0xNjc4LDE0ICsxNjkyLDEzIEBACiAJc2JpLT5zX21vdW50X3N0YXRlID0gUkVJU0VSRlNfVkFMSURfRlM7CiAKIAlpZiAoKGVycnZhbCA9IHJlaXNlcmZzX2luaXRfYml0bWFwX2NhY2hlKHMpKSkgewotCQlTV0FSTihzaWxlbnQsIHMsCi0JCSAgICAgICJqbWFjZC04OiByZWlzZXJmc19maWxsX3N1cGVyOiB1bmFibGUgdG8gcmVhZCBiaXRtYXAiKTsKKwkJU1dBUk4oc2lsZW50LCBzLCAiam1hY2QtOCIsICJ1bmFibGUgdG8gcmVhZCBiaXRtYXAiKTsKIAkJZ290byBlcnJvcjsKIAl9CiAJZXJydmFsID0gLUVJTlZBTDsKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfQ0hFQ0sKLQlTV0FSTihzaWxlbnQsIHMsICJDT05GSUdfUkVJU0VSRlNfQ0hFQ0sgaXMgc2V0IE9OIik7Ci0JU1dBUk4oc2lsZW50LCBzLCAiLSBpdCBpcyBzbG93IG1vZGUgZm9yIGRlYnVnZ2luZy4iKTsKKwlTV0FSTihzaWxlbnQsIHMsICIiLCAiQ09ORklHX1JFSVNFUkZTX0NIRUNLIGlzIHNldCBPTiIpOworCVNXQVJOKHNpbGVudCwgcywgIiIsICItIGl0IGlzIHNsb3cgbW9kZSBmb3IgZGVidWdnaW5nLiIpOwogI2VuZGlmCiAKIAkvKiBtYWtlIGRhdGE9b3JkZXJlZCB0aGUgZGVmYXVsdCAqLwpAQCAtMTcwNiw4ICsxNzE5LDggQEAKIAl9CiAJLy8gc2V0X2RldmljZV9ybyhzLT5zX2RldiwgMSkgOwogCWlmIChqb3VybmFsX2luaXQocywgamRldl9uYW1lLCBvbGRfZm9ybWF0LCBjb21taXRfbWF4X2FnZSkpIHsKLQkJU1dBUk4oc2lsZW50LCBzLAotCQkgICAgICAic2gtMjAyMjogcmVpc2VyZnNfZmlsbF9zdXBlcjogdW5hYmxlIHRvIGluaXRpYWxpemUgam91cm5hbCBzcGFjZSIpOworCQlTV0FSTihzaWxlbnQsIHMsICJzaC0yMDIyIiwKKwkJICAgICAgInVuYWJsZSB0byBpbml0aWFsaXplIGpvdXJuYWwgc3BhY2UiKTsKIAkJZ290byBlcnJvcjsKIAl9IGVsc2UgewogCQlqaW5pdF9kb25lID0gMTsJLyogb25jZSB0aGlzIGlzIHNldCwgam91cm5hbF9yZWxlYXNlIG11c3QgYmUgY2FsbGVkCkBAIC0xNzE1LDggKzE3MjgsOCBAQAogCQkJCSAqLwogCX0KIAlpZiAocmVyZWFkX21ldGFfYmxvY2tzKHMpKSB7Ci0JCVNXQVJOKHNpbGVudCwgcywKLQkJICAgICAgImptYWNkLTk6IHJlaXNlcmZzX2ZpbGxfc3VwZXI6IHVuYWJsZSB0byByZXJlYWQgbWV0YSBibG9ja3MgYWZ0ZXIgam91cm5hbCBpbml0Iik7CisJCVNXQVJOKHNpbGVudCwgcywgImptYWNkLTkiLAorCQkgICAgICAidW5hYmxlIHRvIHJlcmVhZCBtZXRhIGJsb2NrcyBhZnRlciBqb3VybmFsIGluaXQiKTsKIAkJZ290byBlcnJvcjsKIAl9CiAKQEAgLTE3MjQsOCArMTczNyw4IEBACiAJCWdvdG8gZXJyb3I7CiAKIAlpZiAoYmRldl9yZWFkX29ubHkocy0+c19iZGV2KSAmJiAhKHMtPnNfZmxhZ3MgJiBNU19SRE9OTFkpKSB7Ci0JCVNXQVJOKHNpbGVudCwgcywKLQkJICAgICAgImNsbS03MDAwOiBEZXRlY3RlZCByZWFkb25seSBkZXZpY2UsIG1hcmtpbmcgRlMgcmVhZG9ubHkiKTsKKwkJU1dBUk4oc2lsZW50LCBzLCAiY2xtLTcwMDAiLAorCQkgICAgICAiRGV0ZWN0ZWQgcmVhZG9ubHkgZGV2aWNlLCBtYXJraW5nIEZTIHJlYWRvbmx5Iik7CiAJCXMtPnNfZmxhZ3MgfD0gTVNfUkRPTkxZOwogCX0KIAlhcmdzLm9iamVjdGlkID0gUkVJU0VSRlNfUk9PVF9PQkpFQ1RJRDsKQEAgLTE3MzQsOCArMTc0Nyw3IEBACiAJICAgIGlnZXQ1X2xvY2tlZChzLCBSRUlTRVJGU19ST09UX09CSkVDVElELCByZWlzZXJmc19maW5kX2FjdG9yLAogCQkJIHJlaXNlcmZzX2luaXRfbG9ja2VkX2lub2RlLCAodm9pZCAqKSgmYXJncykpOwogCWlmICghcm9vdF9pbm9kZSkgewotCQlTV0FSTihzaWxlbnQsIHMsCi0JCSAgICAgICJqbWFjZC0xMDogcmVpc2VyZnNfZmlsbF9zdXBlcjogZ2V0IHJvb3QgaW5vZGUgZmFpbGVkIik7CisJCVNXQVJOKHNpbGVudCwgcywgImptYWNkLTEwIiwgImdldCByb290IGlub2RlIGZhaWxlZCIpOwogCQlnb3RvIGVycm9yOwogCX0KIApAQCAtMTc4NCw3ICsxNzk2LDcgQEAKIAkJICogYXZvaWRpbmcgY29ycnVwdGlvbi4gLWplZmZtICovCiAJCWlmIChibWFwX3dvdWxkX3dyYXAocmVpc2VyZnNfYm1hcF9jb3VudChzKSkgJiYKIAkJICAgIHNiX2JtYXBfbnIocnMpICE9IDApIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcocywgInN1cGVyLTIwMzA6IFRoaXMgZmlsZSBzeXN0ZW0gIgorCQkJcmVpc2VyZnNfd2FybmluZyhzLCAic3VwZXItMjAzMCIsICJUaGlzIGZpbGUgc3lzdGVtICIKIAkJCQkJImNsYWltcyB0byB1c2UgJXUgYml0bWFwIGJsb2NrcyBpbiAiCiAJCQkJCSJpdHMgc3VwZXIgYmxvY2ssIGJ1dCByZXF1aXJlcyAldS4gIgogCQkJCQkiQ2xlYXJpbmcgdG8gemVyby4iLCBzYl9ibWFwX25yKHJzKSwKQEAgLTE4MTcsNyArMTgyOSw5IEBACiAJCQl9IGVsc2UgaWYgKCFzaWxlbnQpIHsKIAkJCQlyZWlzZXJmc19pbmZvKHMsICJ1c2luZyAzLjUueCBkaXNrIGZvcm1hdFxuIik7CiAJCQl9Ci0JCX0KKwkJfSBlbHNlCisJCQlzZXRfc2JfbW50X2NvdW50KHJzLCBzYl9tbnRfY291bnQocnMpICsgMSk7CisKIAogCQlqb3VybmFsX21hcmtfZGlydHkoJnRoLCBzLCBTQl9CVUZGRVJfV0lUSF9TQihzKSk7CiAJCWVycnZhbCA9IGpvdXJuYWxfZW5kKCZ0aCwgcywgMSk7CkBAIC0yMDMxLDggKzIwNDUsOCBAQAogCWlmICghKFJFSVNFUkZTX0koaW5vZGUpLT5pX2ZsYWdzICYgaV9ub3BhY2tfbWFzaykpIHsKIAkJZXJyID0gcmVpc2VyZnNfdW5wYWNrKGlub2RlLCBOVUxMKTsKIAkJaWYgKGVycikgewotCQkJcmVpc2VyZnNfd2FybmluZyhzYiwKLQkJCQkicmVpc2VyZnM6IFVucGFja2luZyB0YWlsIG9mIHF1b3RhIGZpbGUgZmFpbGVkIgorCQkJcmVpc2VyZnNfd2FybmluZyhzYiwgInN1cGVyLTY1MjAiLAorCQkJCSJVbnBhY2tpbmcgdGFpbCBvZiBxdW90YSBmaWxlIGZhaWxlZCIKIAkJCQkiICglZCkuIENhbm5vdCB0dXJuIG9uIHF1b3Rhcy4iLCBlcnIpOwogCQkJZXJyID0gLUVJTlZBTDsKIAkJCWdvdG8gb3V0OwpAQCAtMjA0Myw4ICsyMDU3LDggQEAKIAlpZiAoUkVJU0VSRlNfU0Ioc2IpLT5zX3FmX25hbWVzW3R5cGVdKSB7CiAJCS8qIFF1b3RhZmlsZSBub3Qgb2YgZnMgcm9vdD8gKi8KIAkJaWYgKHBhdGguZGVudHJ5LT5kX3BhcmVudCAhPSBzYi0+c19yb290KQotCQkJcmVpc2VyZnNfd2FybmluZyhzYiwKLQkJCQkgInJlaXNlcmZzOiBRdW90YSBmaWxlIG5vdCBvbiBmaWxlc3lzdGVtIHJvb3QuICIKKwkJCXJlaXNlcmZzX3dhcm5pbmcoc2IsICJzdXBlci02NTIxIiwKKwkJCQkgIlF1b3RhIGZpbGUgbm90IG9uIGZpbGVzeXN0ZW0gcm9vdC4gIgogCQkJCSAiSm91cm5hbGxlZCBxdW90YSB3aWxsIG5vdCB3b3JrLiIpOwogCX0KIApAQCAtMjE5NSw5ICsyMjA5LDYgQEAKIAkJcmV0dXJuIHJldDsKIAl9CiAKLQlpZiAoKHJldCA9IHJlaXNlcmZzX3hhdHRyX3JlZ2lzdGVyX2hhbmRsZXJzKCkpKQotCQlnb3RvIGZhaWxlZF9yZWlzZXJmc194YXR0cl9yZWdpc3Rlcl9oYW5kbGVyczsKLQogCXJlaXNlcmZzX3Byb2NfaW5mb19nbG9iYWxfaW5pdCgpOwogCXJlaXNlcmZzX3Byb2NfcmVnaXN0ZXJfZ2xvYmFsKCJ2ZXJzaW9uIiwKIAkJCQkgICAgICByZWlzZXJmc19nbG9iYWxfdmVyc2lvbl9pbl9wcm9jKTsKQEAgLTIyMDgsOSArMjIxOSw2IEBACiAJCXJldHVybiAwOwogCX0KIAotCXJlaXNlcmZzX3hhdHRyX3VucmVnaXN0ZXJfaGFuZGxlcnMoKTsKLQotICAgICAgZmFpbGVkX3JlaXNlcmZzX3hhdHRyX3JlZ2lzdGVyX2hhbmRsZXJzOgogCXJlaXNlcmZzX3Byb2NfdW5yZWdpc3Rlcl9nbG9iYWwoInZlcnNpb24iKTsKIAlyZWlzZXJmc19wcm9jX2luZm9fZ2xvYmFsX2RvbmUoKTsKIAlkZXN0cm95X2lub2RlY2FjaGUoKTsKQEAgLTIyMjAsNyArMjIyOCw2IEBACiAKIHN0YXRpYyB2b2lkIF9fZXhpdCBleGl0X3JlaXNlcmZzX2ZzKHZvaWQpCiB7Ci0JcmVpc2VyZnNfeGF0dHJfdW5yZWdpc3Rlcl9oYW5kbGVycygpOwogCXJlaXNlcmZzX3Byb2NfdW5yZWdpc3Rlcl9nbG9iYWwoInZlcnNpb24iKTsKIAlyZWlzZXJmc19wcm9jX2luZm9fZ2xvYmFsX2RvbmUoKTsKIAl1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oJnJlaXNlcmZzX2ZzX3R5cGUpOwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMvdGFpbF9jb252ZXJzaW9uLmMgYi9mcy9yZWlzZXJmcy90YWlsX2NvbnZlcnNpb24uYwppbmRleCBmODEyMWExLi5kN2Y2ZTUxIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy90YWlsX2NvbnZlcnNpb24uYworKysgYi9mcy9yZWlzZXJmcy90YWlsX2NvbnZlcnNpb24uYwpAQCAtMjYsNyArMjYsNyBAQAogCQkJCSAgIGNvbnZlcnRlZCBpdGVtLiAqLwogCXN0cnVjdCBpdGVtX2hlYWQgaW5kX2loOwkvKiBuZXcgaW5kaXJlY3QgaXRlbSB0byBiZSBpbnNlcnRlZCBvcgogCQkJCQkgICBrZXkgb2YgdW5mbSBwb2ludGVyIHRvIGJlIHBhc3RlZCAqLwotCWludCBuX2Jsa19zaXplLCBuX3JldHZhbDsJLyogcmV0dXJuZWQgdmFsdWUgZm9yIHJlaXNlcmZzX2luc2VydF9pdGVtIGFuZCBjbG9uZXMgKi8KKwlpbnQgYmxrX3NpemUsIHJldHZhbDsJLyogcmV0dXJuZWQgdmFsdWUgZm9yIHJlaXNlcmZzX2luc2VydF9pdGVtIGFuZCBjbG9uZXMgKi8KIAl1bnBfdCB1bmZtX3B0cjsJCS8qIEhhbmRsZSBvbiBhbiB1bmZvcm1hdHRlZCBub2RlCiAJCQkJICAgdGhhdCB3aWxsIGJlIGluc2VydGVkIGluIHRoZQogCQkJCSAgIHRyZWUuICovCkBAIC0zNSw3ICszNSw3IEBACiAKIAlSRUlTRVJGU19TQihzYiktPnNfZGlyZWN0MmluZGlyZWN0Kys7CiAKLQluX2Jsa19zaXplID0gc2ItPnNfYmxvY2tzaXplOworCWJsa19zaXplID0gc2ItPnNfYmxvY2tzaXplOwogCiAJLyogYW5kIGtleSB0byBzZWFyY2ggZm9yIGFwcGVuZCBvciBpbnNlcnQgcG9pbnRlciB0byB0aGUgbmV3CiAJICAgdW5mb3JtYXR0ZWQgbm9kZS4gKi8KQEAgLTQ2LDExICs0NiwxMSBAQAogCS8qIFNldCB0aGUga2V5IHRvIHNlYXJjaCBmb3IgdGhlIHBsYWNlIGZvciBuZXcgdW5mbSBwb2ludGVyICovCiAJbWFrZV9jcHVfa2V5KCZlbmRfa2V5LCBpbm9kZSwgdGFpbF9vZmZzZXQsIFRZUEVfSU5ESVJFQ1QsIDQpOwogCi0JLy8gRklYTUU6IHdlIGNvdWxkIGF2b2lkIHRoaXMgCisJLyogRklYTUU6IHdlIGNvdWxkIGF2b2lkIHRoaXMgKi8KIAlpZiAoc2VhcmNoX2Zvcl9wb3NpdGlvbl9ieV9rZXkoc2IsICZlbmRfa2V5LCBwYXRoKSA9PSBQT1NJVElPTl9GT1VORCkgewotCQlyZWlzZXJmc193YXJuaW5nKHNiLCAiUEFQLTE0MDMwOiBkaXJlY3QyaW5kaXJlY3Q6ICIKLQkJCQkgInBhc3RlZCBvciBpbnNlcnRlZCBieXRlIGV4aXN0cyBpbiB0aGUgdHJlZSAlSy4gIgotCQkJCSAiVXNlIGZzY2sgdG8gcmVwYWlyLiIsICZlbmRfa2V5KTsKKwkJcmVpc2VyZnNfZXJyb3Ioc2IsICJQQVAtMTQwMzAiLAorCQkJICAgICAgICJwYXN0ZWQgb3IgaW5zZXJ0ZWQgYnl0ZSBleGlzdHMgaW4gIgorCQkJICAgICAgICJ0aGUgdHJlZSAlSy4gVXNlIGZzY2sgdG8gcmVwYWlyLiIsICZlbmRfa2V5KTsKIAkJcGF0aHJlbHNlKHBhdGgpOwogCQlyZXR1cm4gLUVJTzsKIAl9CkBAIC02NCwxNyArNjQsMTcgQEAKIAkJc2V0X2loX2ZyZWVfc3BhY2UoJmluZF9paCwgMCk7CS8qIGRlbGV0ZSBhdCBuZWFyZXN0IGZ1dHVyZSAqLwogCQlwdXRfaWhfaXRlbV9sZW4oJmluZF9paCwgVU5GTV9QX1NJWkUpOwogCQlQQVRIX0xBU1RfUE9TSVRJT04ocGF0aCkrKzsKLQkJbl9yZXR2YWwgPQorCQlyZXR2YWwgPQogCQkgICAgcmVpc2VyZnNfaW5zZXJ0X2l0ZW0odGgsIHBhdGgsICZlbmRfa2V5LCAmaW5kX2loLCBpbm9kZSwKIAkJCQkJIChjaGFyICopJnVuZm1fcHRyKTsKIAl9IGVsc2UgewogCQkvKiBQYXN0ZSBpbnRvIGxhc3QgaW5kaXJlY3QgaXRlbSBvZiBhbiBvYmplY3QuICovCi0JCW5fcmV0dmFsID0gcmVpc2VyZnNfcGFzdGVfaW50b19pdGVtKHRoLCBwYXRoLCAmZW5kX2tleSwgaW5vZGUsCisJCXJldHZhbCA9IHJlaXNlcmZzX3Bhc3RlX2ludG9faXRlbSh0aCwgcGF0aCwgJmVuZF9rZXksIGlub2RlLAogCQkJCQkJICAgIChjaGFyICopJnVuZm1fcHRyLAogCQkJCQkJICAgIFVORk1fUF9TSVpFKTsKIAl9Ci0JaWYgKG5fcmV0dmFsKSB7Ci0JCXJldHVybiBuX3JldHZhbDsKKwlpZiAocmV0dmFsKSB7CisJCXJldHVybiByZXR2YWw7CiAJfQogCS8vIG5vdGU6IGZyb20gaGVyZSB0aGVyZSBhcmUgdHdvIGtleXMgd2hpY2ggaGF2ZSBtYXRjaGluZyBmaXJzdAogCS8vIHRocmVlIGtleSBjb21wb25lbnRzLiBUaGV5IG9ubHkgZGlmZmVyIGJ5IHRoZSBmb3VydGggb25lLgpAQCAtOTIsMTQgKzkyLDEzIEBACiAJCSAgIGxhc3QgaXRlbSBvZiB0aGUgZmlsZSAqLwogCQlpZiAoc2VhcmNoX2Zvcl9wb3NpdGlvbl9ieV9rZXkoc2IsICZlbmRfa2V5LCBwYXRoKSA9PQogCQkgICAgUE9TSVRJT05fRk9VTkQpCi0JCQlyZWlzZXJmc19wYW5pYyhzYiwKLQkJCQkgICAgICAgIlBBUC0xNDA1MDogZGlyZWN0MmluZGlyZWN0OiAiCisJCQlyZWlzZXJmc19wYW5pYyhzYiwgIlBBUC0xNDA1MCIsCiAJCQkJICAgICAgICJkaXJlY3QgaXRlbSAoJUspIG5vdCBmb3VuZCIsICZlbmRfa2V5KTsKIAkJcF9sZV9paCA9IFBBVEhfUElURU1fSEVBRChwYXRoKTsKIAkJUkZBTFNFKCFpc19kaXJlY3RfbGVfaWgocF9sZV9paCksCiAJCSAgICAgICAidnMtMTQwNTU6IGRpcmVjdCBpdGVtIGV4cGVjdGVkKCVLKSwgZm91bmQgJWgiLAogCQkgICAgICAgJmVuZF9rZXksIHBfbGVfaWgpOwotCQl0YWlsX3NpemUgPSAobGVfaWhfa19vZmZzZXQocF9sZV9paCkgJiAobl9ibGtfc2l6ZSAtIDEpKQorCQl0YWlsX3NpemUgPSAobGVfaWhfa19vZmZzZXQocF9sZV9paCkgJiAoYmxrX3NpemUgLSAxKSkKIAkJICAgICsgaWhfaXRlbV9sZW4ocF9sZV9paCkgLSAxOwogCiAJCS8qIHdlIG9ubHkgc2VuZCB0aGUgdW5iaCBwb2ludGVyIGlmIHRoZSBidWZmZXIgaXMgbm90IHVwIHRvIGRhdGUuCkBAIC0xMTQsMTEgKzExMywxMSBAQAogCQl9IGVsc2UgewogCQkJdXBfdG9fZGF0ZV9iaCA9IHVuYmg7CiAJCX0KLQkJbl9yZXR2YWwgPSByZWlzZXJmc19kZWxldGVfaXRlbSh0aCwgcGF0aCwgJmVuZF9rZXksIGlub2RlLAorCQlyZXR2YWwgPSByZWlzZXJmc19kZWxldGVfaXRlbSh0aCwgcGF0aCwgJmVuZF9rZXksIGlub2RlLAogCQkJCQkJdXBfdG9fZGF0ZV9iaCk7CiAKLQkJdG90YWxfdGFpbCArPSBuX3JldHZhbDsKLQkJaWYgKHRhaWxfc2l6ZSA9PSBuX3JldHZhbCkKKwkJdG90YWxfdGFpbCArPSByZXR2YWw7CisJCWlmICh0YWlsX3NpemUgPT0gcmV0dmFsKQogCQkJLy8gZG9uZTogZmlsZSBkb2VzIG5vdCBoYXZlIGRpcmVjdCBpdGVtcyBhbnltb3JlCiAJCQlicmVhazsKIApAQCAtMTMwLDcgKzEyOSw3IEBACiAJCXVuc2lnbmVkIHBnb2ZmID0KIAkJICAgICh0YWlsX29mZnNldCArIHRvdGFsX3RhaWwgLSAxKSAmIChQQUdFX0NBQ0hFX1NJWkUgLSAxKTsKIAkJY2hhciAqa2FkZHIgPSBrbWFwX2F0b21pYyh1cF90b19kYXRlX2JoLT5iX3BhZ2UsIEtNX1VTRVIwKTsKLQkJbWVtc2V0KGthZGRyICsgcGdvZmYsIDAsIG5fYmxrX3NpemUgLSB0b3RhbF90YWlsKTsKKwkJbWVtc2V0KGthZGRyICsgcGdvZmYsIDAsIGJsa19zaXplIC0gdG90YWxfdGFpbCk7CiAJCWt1bm1hcF9hdG9taWMoa2FkZHIsIEtNX1VTRVIwKTsKIAl9CiAKQEAgLTE3MSwxNCArMTcwLDE4IEBACiAgICB3aGF0IHdlIGV4cGVjdCBmcm9tIGl0IChudW1iZXIgb2YgY3V0IGJ5dGVzKS4gQnV0IHdoZW4gdGFpbCByZW1haW5zCiAgICBpbiB0aGUgdW5mb3JtYXR0ZWQgbm9kZSwgd2Ugc2V0IG1vZGUgdG8gU0tJUF9CQUxBTkNJTkcgYW5kIHVubG9jawogICAgaW5vZGUgKi8KLWludCBpbmRpcmVjdDJkaXJlY3Qoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsIHN0cnVjdCBpbm9kZSAqcF9zX2lub2RlLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgc3RydWN0IHRyZWVwYXRoICpwX3NfcGF0aCwJLyogcGF0aCB0byB0aGUgaW5kaXJlY3QgaXRlbS4gKi8KLQkJICAgIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICpwX3NfaXRlbV9rZXksCS8qIEtleSB0byBsb29rIGZvciB1bmZvcm1hdHRlZCBub2RlIHBvaW50ZXIgdG8gYmUgY3V0LiAqLworaW50IGluZGlyZWN0MmRpcmVjdChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKKwkJICAgIHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkgICAgc3RydWN0IHRyZWVwYXRoICpwYXRoLAkvKiBwYXRoIHRvIHRoZSBpbmRpcmVjdCBpdGVtLiAqLworCQkgICAgY29uc3Qgc3RydWN0IGNwdV9rZXkgKml0ZW1fa2V5LAkvKiBLZXkgdG8gbG9vayBmb3IKKwkJCQkJCQkgKiB1bmZvcm1hdHRlZCBub2RlCisJCQkJCQkJICogcG9pbnRlciB0byBiZSBjdXQuICovCiAJCSAgICBsb2ZmX3Qgbl9uZXdfZmlsZV9zaXplLAkvKiBOZXcgZmlsZSBzaXplLiAqLwotCQkgICAgY2hhciAqcF9jX21vZGUpCisJCSAgICBjaGFyICptb2RlKQogewotCXN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiID0gcF9zX2lub2RlLT5pX3NiOworCXN0cnVjdCBzdXBlcl9ibG9jayAqc2IgPSBpbm9kZS0+aV9zYjsKIAlzdHJ1Y3QgaXRlbV9oZWFkIHNfaWg7Ci0JdW5zaWduZWQgbG9uZyBuX2Jsb2NrX3NpemUgPSBwX3Nfc2ItPnNfYmxvY2tzaXplOworCXVuc2lnbmVkIGxvbmcgYmxvY2tfc2l6ZSA9IHNiLT5zX2Jsb2Nrc2l6ZTsKIAljaGFyICp0YWlsOwogCWludCB0YWlsX2xlbiwgcm91bmRfdGFpbF9sZW47CiAJbG9mZl90IHBvcywgcG9zMTsJLyogcG9zaXRpb24gb2YgZmlyc3QgYnl0ZSBvZiB0aGUgdGFpbCAqLwpAQCAtMTg2LDIyICsxODksMjIgQEAKIAogCUJVR19PTighdGgtPnRfdHJhbnNfaWQpOwogCi0JUkVJU0VSRlNfU0IocF9zX3NiKS0+c19pbmRpcmVjdDJkaXJlY3QrKzsKKwlSRUlTRVJGU19TQihzYiktPnNfaW5kaXJlY3QyZGlyZWN0Kys7CiAKLQkqcF9jX21vZGUgPSBNX1NLSVBfQkFMQU5DSU5HOworCSptb2RlID0gTV9TS0lQX0JBTEFOQ0lORzsKIAogCS8qIHN0b3JlIGl0ZW0gaGVhZCBwYXRoIHBvaW50cyB0by4gKi8KLQljb3B5X2l0ZW1faGVhZCgmc19paCwgUEFUSF9QSVRFTV9IRUFEKHBfc19wYXRoKSk7CisJY29weV9pdGVtX2hlYWQoJnNfaWgsIFBBVEhfUElURU1fSEVBRChwYXRoKSk7CiAKLQl0YWlsX2xlbiA9IChuX25ld19maWxlX3NpemUgJiAobl9ibG9ja19zaXplIC0gMSkpOwotCWlmIChnZXRfaW5vZGVfc2RfdmVyc2lvbihwX3NfaW5vZGUpID09IFNUQVRfREFUQV9WMikKKwl0YWlsX2xlbiA9IChuX25ld19maWxlX3NpemUgJiAoYmxvY2tfc2l6ZSAtIDEpKTsKKwlpZiAoZ2V0X2lub2RlX3NkX3ZlcnNpb24oaW5vZGUpID09IFNUQVRfREFUQV9WMikKIAkJcm91bmRfdGFpbF9sZW4gPSBST1VORF9VUCh0YWlsX2xlbik7CiAJZWxzZQogCQlyb3VuZF90YWlsX2xlbiA9IHRhaWxfbGVuOwogCiAJcG9zID0KIAkgICAgbGVfaWhfa19vZmZzZXQoJnNfaWgpIC0gMSArIChpaF9pdGVtX2xlbigmc19paCkgLyBVTkZNX1BfU0laRSAtCi0JCQkJCSAxKSAqIHBfc19zYi0+c19ibG9ja3NpemU7CisJCQkJCSAxKSAqIHNiLT5zX2Jsb2Nrc2l6ZTsKIAlwb3MxID0gcG9zOwogCiAJLy8gd2UgYXJlIHByb3RlY3RlZCBieSBpX211dGV4LiBUaGUgdGFpbCBjYW4gbm90IGRpc2FwcGVyLCBub3QKQEAgLTIxMCwyNyArMjEzLDI2IEBACiAKIAl0YWlsID0gKGNoYXIgKilrbWFwKHBhZ2UpOwkvKiB0aGlzIGNhbiBzY2hlZHVsZSAqLwogCi0JaWYgKHBhdGhfY2hhbmdlZCgmc19paCwgcF9zX3BhdGgpKSB7CisJaWYgKHBhdGhfY2hhbmdlZCgmc19paCwgcGF0aCkpIHsKIAkJLyogcmUtc2VhcmNoIGluZGlyZWN0IGl0ZW0gKi8KLQkJaWYgKHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHBfc19zYiwgcF9zX2l0ZW1fa2V5LCBwX3NfcGF0aCkKKwkJaWYgKHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHNiLCBpdGVtX2tleSwgcGF0aCkKIAkJICAgID09IFBPU0lUSU9OX05PVF9GT1VORCkKLQkJCXJlaXNlcmZzX3BhbmljKHBfc19zYiwKLQkJCQkgICAgICAgIlBBUC01NTIwOiBpbmRpcmVjdDJkaXJlY3Q6ICIKKwkJCXJlaXNlcmZzX3BhbmljKHNiLCAiUEFQLTU1MjAiLAogCQkJCSAgICAgICAiaXRlbSB0byBiZSBjb252ZXJ0ZWQgJUsgZG9lcyBub3QgZXhpc3QiLAotCQkJCSAgICAgICBwX3NfaXRlbV9rZXkpOwotCQljb3B5X2l0ZW1faGVhZCgmc19paCwgUEFUSF9QSVRFTV9IRUFEKHBfc19wYXRoKSk7CisJCQkJICAgICAgIGl0ZW1fa2V5KTsKKwkJY29weV9pdGVtX2hlYWQoJnNfaWgsIFBBVEhfUElURU1fSEVBRChwYXRoKSk7CiAjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0NIRUNLCiAJCXBvcyA9IGxlX2loX2tfb2Zmc2V0KCZzX2loKSAtIDEgKwogCQkgICAgKGloX2l0ZW1fbGVuKCZzX2loKSAvIFVORk1fUF9TSVpFIC0KLQkJICAgICAxKSAqIHBfc19zYi0+c19ibG9ja3NpemU7CisJCSAgICAgMSkgKiBzYi0+c19ibG9ja3NpemU7CiAJCWlmIChwb3MgIT0gcG9zMSkKLQkJCXJlaXNlcmZzX3BhbmljKHBfc19zYiwgInZzLTU1MzA6IGluZGlyZWN0MmRpcmVjdDogIgotCQkJCSAgICAgICAidGFpbCBwb3NpdGlvbiBjaGFuZ2VkIHdoaWxlIHdlIHdlcmUgcmVhZGluZyBpdCIpOworCQkJcmVpc2VyZnNfcGFuaWMoc2IsICJ2cy01NTMwIiwgInRhaWwgcG9zaXRpb24gIgorCQkJCSAgICAgICAiY2hhbmdlZCB3aGlsZSB3ZSB3ZXJlIHJlYWRpbmcgaXQiKTsKICNlbmRpZgogCX0KIAogCS8qIFNldCBkaXJlY3QgaXRlbSBoZWFkZXIgdG8gaW5zZXJ0LiAqLwotCW1ha2VfbGVfaXRlbV9oZWFkKCZzX2loLCBOVUxMLCBnZXRfaW5vZGVfaXRlbV9rZXlfdmVyc2lvbihwX3NfaW5vZGUpLAorCW1ha2VfbGVfaXRlbV9oZWFkKCZzX2loLCBOVUxMLCBnZXRfaW5vZGVfaXRlbV9rZXlfdmVyc2lvbihpbm9kZSksCiAJCQkgIHBvczEgKyAxLCBUWVBFX0RJUkVDVCwgcm91bmRfdGFpbF9sZW4sCiAJCQkgIDB4ZmZmZiAvKmloX2ZyZWVfc3BhY2UgKi8gKTsKIApAQCAtMjQwLDEzICsyNDIsMTMgQEAKIAkgKi8KIAl0YWlsID0gdGFpbCArIChwb3MgJiAoUEFHRV9DQUNIRV9TSVpFIC0gMSkpOwogCi0JUEFUSF9MQVNUX1BPU0lUSU9OKHBfc19wYXRoKSsrOworCVBBVEhfTEFTVF9QT1NJVElPTihwYXRoKSsrOwogCi0Ja2V5ID0gKnBfc19pdGVtX2tleTsKKwlrZXkgPSAqaXRlbV9rZXk7CiAJc2V0X2NwdV9rZXlfa190eXBlKCZrZXksIFRZUEVfRElSRUNUKTsKIAlrZXkua2V5X2xlbmd0aCA9IDQ7CiAJLyogSW5zZXJ0IHRhaWwgYXMgbmV3IGRpcmVjdCBpdGVtIGluIHRoZSB0cmVlICovCi0JaWYgKHJlaXNlcmZzX2luc2VydF9pdGVtKHRoLCBwX3NfcGF0aCwgJmtleSwgJnNfaWgsIHBfc19pbm9kZSwKKwlpZiAocmVpc2VyZnNfaW5zZXJ0X2l0ZW0odGgsIHBhdGgsICZrZXksICZzX2loLCBpbm9kZSwKIAkJCQkgdGFpbCA/IHRhaWwgOiBOVUxMKSA8IDApIHsKIAkJLyogTm8gZGlzayBtZW1vcnkuIFNvIHdlIGNhbiBub3QgY29udmVydCBsYXN0IHVuZm9ybWF0dGVkIG5vZGUKIAkJICAgdG8gdGhlIGRpcmVjdCBpdGVtLiAgSW4gdGhpcyBjYXNlIHdlIHVzZWQgdG8gYWRqdXN0CkBAIC0yNTUsMTIgKzI1NywxMiBAQAogCQkgICB1bmZvcm1hdHRlZCBub2RlLiBGb3Igbm93IGlfc2l6ZSBpcyBjb25zaWRlcmVkIGFzIGd1YXJkIGZvcgogCQkgICBnb2luZyBvdXQgb2YgZmlsZSBzaXplICovCiAJCWt1bm1hcChwYWdlKTsKLQkJcmV0dXJuIG5fYmxvY2tfc2l6ZSAtIHJvdW5kX3RhaWxfbGVuOworCQlyZXR1cm4gYmxvY2tfc2l6ZSAtIHJvdW5kX3RhaWxfbGVuOwogCX0KIAlrdW5tYXAocGFnZSk7CiAKIAkvKiBtYWtlIHN1cmUgdG8gZ2V0IHRoZSBpX2Jsb2NrcyBjaGFuZ2VzIGZyb20gcmVpc2VyZnNfaW5zZXJ0X2l0ZW0gKi8KLQlyZWlzZXJmc191cGRhdGVfc2QodGgsIHBfc19pbm9kZSk7CisJcmVpc2VyZnNfdXBkYXRlX3NkKHRoLCBpbm9kZSk7CiAKIAkvLyBub3RlOiB3ZSBoYXZlIG5vdyB0aGUgc2FtZSBhcyBpbiBhYm92ZSBkaXJlY3QyaW5kaXJlY3QKIAkvLyBjb252ZXJzaW9uOiB0aGVyZSBhcmUgdHdvIGtleXMgd2hpY2ggaGF2ZSBtYXRjaGluZyBmaXJzdCB0aHJlZQpAQCAtMjY4LDExICsyNzAsMTEgQEAKIAogCS8qIFdlIGhhdmUgaW5zZXJ0ZWQgbmV3IGRpcmVjdCBpdGVtIGFuZCBtdXN0IHJlbW92ZSBsYXN0CiAJICAgdW5mb3JtYXR0ZWQgbm9kZS4gKi8KLQkqcF9jX21vZGUgPSBNX0NVVDsKKwkqbW9kZSA9IE1fQ1VUOwogCiAJLyogd2Ugc3RvcmUgcG9zaXRpb24gb2YgZmlyc3QgZGlyZWN0IGl0ZW0gaW4gdGhlIGluLWNvcmUgaW5vZGUgKi8KLQkvL21hcmtfZmlsZV93aXRoX3RhaWwgKHBfc19pbm9kZSwgcG9zMSArIDEpOwotCVJFSVNFUkZTX0kocF9zX2lub2RlKS0+aV9maXJzdF9kaXJlY3RfYnl0ZSA9IHBvczEgKyAxOworCS8qIG1hcmtfZmlsZV93aXRoX3RhaWwgKGlub2RlLCBwb3MxICsgMSk7ICovCisJUkVJU0VSRlNfSShpbm9kZSktPmlfZmlyc3RfZGlyZWN0X2J5dGUgPSBwb3MxICsgMTsKIAotCXJldHVybiBuX2Jsb2NrX3NpemUgLSByb3VuZF90YWlsX2xlbjsKKwlyZXR1cm4gYmxvY2tfc2l6ZSAtIHJvdW5kX3RhaWxfbGVuOwogfQpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMveGF0dHIuYyBiL2ZzL3JlaXNlcmZzL3hhdHRyLmMKaW5kZXggYWU4ODFjYy4uZjgzZjUyYiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMveGF0dHIuYworKysgYi9mcy9yZWlzZXJmcy94YXR0ci5jCkBAIC0yNyw2ICsyNywxMCBAQAogICogdGhlc2UgYXJlIHNwZWNpYWwgY2FzZXMgZm9yIGZpbGVzeXN0ZW0gQUNMcywgdGhleSBhcmUgaW50ZXJwcmV0ZWQgYnkgdGhlCiAgKiBrZXJuZWwsIGluIGFkZGl0aW9uLCB0aGV5IGFyZSBuZWdhdGl2ZWx5IGFuZCBwb3NpdGl2ZWx5IGNhY2hlZCBhbmQgYXR0YWNoZWQKICAqIHRvIHRoZSBpbm9kZSBzbyB0aGF0IHVubmVjZXNzYXJ5IGxvb2t1cHMgYXJlIGF2b2lkZWQuCisgKgorICogTG9ja2luZyB3b3JrcyBsaWtlIHNvOgorICogRGlyZWN0b3J5IGNvbXBvbmVudHMgKHhhdHRyIHJvb3QsIHhhdHRyIGRpcikgYXJlIHByb3RlY3RkIGJ5IHRoZWlyIGlfbXV0ZXguCisgKiBUaGUgeGF0dHJzIHRoZW1zZWx2ZXMgYXJlIHByb3RlY3RlZCBieSB0aGUgeGF0dHJfc2VtLgogICovCiAKICNpbmNsdWRlIDxsaW51eC9yZWlzZXJmc19mcy5oPgpAQCAtNDQsMzMwICs0OCwzMzYgQEAKICNpbmNsdWRlIDxuZXQvY2hlY2tzdW0uaD4KICNpbmNsdWRlIDxsaW51eC9zbXBfbG9jay5oPgogI2luY2x1ZGUgPGxpbnV4L3N0YXQuaD4KKyNpbmNsdWRlIDxsaW51eC9xdW90YW9wcy5oPgogCi0jZGVmaW5lIEZMX1JFQURPTkxZIDEyOAotI2RlZmluZSBGTF9ESVJfU0VNX0hFTEQgMjU2CiAjZGVmaW5lIFBSSVZST09UX05BTUUgIi5yZWlzZXJmc19wcml2IgogI2RlZmluZSBYQVJPT1RfTkFNRSAgICJ4YXR0cnMiCiAKLXN0YXRpYyBzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciAqZmluZF94YXR0cl9oYW5kbGVyX3ByZWZpeChjb25zdCBjaGFyCi0JCQkJCQkJCSpwcmVmaXgpOwogCi0vKiBSZXR1cm5zIHRoZSBkZW50cnkgcmVmZXJyaW5nIHRvIHRoZSByb290IG9mIHRoZSBleHRlbmRlZCBhdHRyaWJ1dGUKLSAqIGRpcmVjdG9yeSB0cmVlLiBJZiBpdCBoYXMgYWxyZWFkeSBiZWVuIHJldHJpZXZlZCwgaXQgaXMgdXNlZC4gSWYgaXQKLSAqIGhhc24ndCBiZWVuIGNyZWF0ZWQgYW5kIHRoZSBmbGFncyBpbmRpY2F0ZSBjcmVhdGlvbiBpcyBhbGxvd2VkLCB3ZQotICogYXR0ZW1wdCB0byBjcmVhdGUgaXQuIE9uIGVycm9yLCB3ZSByZXR1cm4gYSBwb2ludGVyLWVuY29kZWQgZXJyb3IuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpnZXRfeGFfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBpbnQgZmxhZ3MpCisvKiBIZWxwZXJzIGZvciBpbm9kZSBvcHMuIFdlIGRvIHRoaXMgc28gdGhhdCB3ZSBkb24ndCBoYXZlIGFsbCB0aGUgVkZTCisgKiBvdmVyaGVhZCBhbmQgYWxzbyBmb3IgcHJvcGVyIGlfbXV0ZXggYW5ub3RhdGlvbi4KKyAqIGRpci0+aV9tdXRleCBtdXN0IGJlIGhlbGQgZm9yIGFsbCBvZiB0aGVtLiAqLworI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19YQVRUUgorc3RhdGljIGludCB4YXR0cl9jcmVhdGUoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgaW50IG1vZGUpCiB7Ci0Jc3RydWN0IGRlbnRyeSAqcHJpdnJvb3QgPSBkZ2V0KFJFSVNFUkZTX1NCKHNiKS0+cHJpdl9yb290KTsKLQlzdHJ1Y3QgZGVudHJ5ICp4YXJvb3Q7CisJQlVHX09OKCFtdXRleF9pc19sb2NrZWQoJmRpci0+aV9tdXRleCkpOworCXZmc19kcV9pbml0KGRpcik7CisJcmV0dXJuIGRpci0+aV9vcC0+Y3JlYXRlKGRpciwgZGVudHJ5LCBtb2RlLCBOVUxMKTsKK30KKyNlbmRpZgogCi0JLyogVGhpcyBuZWVkcyB0byBiZSBjcmVhdGVkIGF0IG1vdW50LXRpbWUgKi8KLQlpZiAoIXByaXZyb290KQotCQlyZXR1cm4gRVJSX1BUUigtRU5PREFUQSk7Ci0KLQltdXRleF9sb2NrX25lc3RlZCgmcHJpdnJvb3QtPmRfaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfWEFUVFIpOwotCWlmIChSRUlTRVJGU19TQihzYiktPnhhdHRyX3Jvb3QpIHsKLQkJeGFyb290ID0gZGdldChSRUlTRVJGU19TQihzYiktPnhhdHRyX3Jvb3QpOwotCQlnb3RvIG91dDsKLQl9Ci0KLQl4YXJvb3QgPSBsb29rdXBfb25lX2xlbihYQVJPT1RfTkFNRSwgcHJpdnJvb3QsIHN0cmxlbihYQVJPT1RfTkFNRSkpOwotCWlmIChJU19FUlIoeGFyb290KSkgewotCQlnb3RvIG91dDsKLQl9IGVsc2UgaWYgKCF4YXJvb3QtPmRfaW5vZGUpIHsKLQkJaW50IGVyciA9IC1FTk9EQVRBOwotCQlpZiAoZmxhZ3MgPT0gMCB8fCBmbGFncyAmIFhBVFRSX0NSRUFURSkKLQkJCWVyciA9IHByaXZyb290LT5kX2lub2RlLT5pX29wLT5ta2Rpcihwcml2cm9vdC0+ZF9pbm9kZSwKLQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB4YXJvb3QsIDA3MDApOwotCQlpZiAoZXJyKSB7Ci0JCQlkcHV0KHhhcm9vdCk7Ci0JCQl4YXJvb3QgPSBFUlJfUFRSKGVycik7Ci0JCQlnb3RvIG91dDsKLQkJfQotCX0KLQlSRUlTRVJGU19TQihzYiktPnhhdHRyX3Jvb3QgPSBkZ2V0KHhhcm9vdCk7Ci0KLSAgICAgIG91dDoKLQltdXRleF91bmxvY2soJnByaXZyb290LT5kX2lub2RlLT5pX211dGV4KTsKLQlkcHV0KHByaXZyb290KTsKLQlyZXR1cm4geGFyb290Oworc3RhdGljIGludCB4YXR0cl9ta2RpcihzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSkKK3sKKwlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmZGlyLT5pX211dGV4KSk7CisJdmZzX2RxX2luaXQoZGlyKTsKKwlyZXR1cm4gZGlyLT5pX29wLT5ta2RpcihkaXIsIGRlbnRyeSwgbW9kZSk7CiB9CiAKLS8qIE9wZW5zIHRoZSBkaXJlY3RvcnkgY29ycmVzcG9uZGluZyB0byB0aGUgaW5vZGUncyBleHRlbmRlZCBhdHRyaWJ1dGUgc3RvcmUuCi0gKiBJZiBmbGFncyBhbGxvdywgdGhlIHRyZWUgdG8gdGhlIGRpcmVjdG9yeSBtYXkgYmUgY3JlYXRlZC4gSWYgY3JlYXRpb24gaXMKLSAqIHByb2hpYml0ZWQsIC1FTk9EQVRBIGlzIHJldHVybmVkLiAqLworLyogV2UgdXNlIElfTVVURVhfQ0hJTEQgaGVyZSB0byBzaWxlbmNlIGxvY2tkZXAuIEl0J3Mgc2FmZSBiZWNhdXNlIHhhdHRyCisgKiBtdXRhdGlvbiBvcHMgYXJlbid0IGNhbGxlZCBkdXJpbmcgcmVuYW1lIG9yIHNwbGFjZSwgd2hpY2ggYXJlIHRoZQorICogb25seSBvdGhlciB1c2VycyBvZiBJX01VVEVYX0NISUxELiBJdCB2aW9sYXRlcyB0aGUgb3JkZXJpbmcsIGJ1dCB0aGF0J3MKKyAqIGJldHRlciB0aGFuIGFsbG9jYXRpbmcgYW5vdGhlciBzdWJjbGFzcyBqdXN0IGZvciB0aGlzIGNvZGUuICovCitzdGF0aWMgaW50IHhhdHRyX3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCWludCBlcnJvcjsKKwlCVUdfT04oIW11dGV4X2lzX2xvY2tlZCgmZGlyLT5pX211dGV4KSk7CisJdmZzX2RxX2luaXQoZGlyKTsKKworCW11dGV4X2xvY2tfbmVzdGVkKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfQ0hJTEQpOworCWVycm9yID0gZGlyLT5pX29wLT51bmxpbmsoZGlyLCBkZW50cnkpOworCW11dGV4X3VubG9jaygmZGVudHJ5LT5kX2lub2RlLT5pX211dGV4KTsKKworCWlmICghZXJyb3IpCisJCWRfZGVsZXRlKGRlbnRyeSk7CisJcmV0dXJuIGVycm9yOworfQorCitzdGF0aWMgaW50IHhhdHRyX3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCit7CisJaW50IGVycm9yOworCUJVR19PTighbXV0ZXhfaXNfbG9ja2VkKCZkaXItPmlfbXV0ZXgpKTsKKwl2ZnNfZHFfaW5pdChkaXIpOworCisJbXV0ZXhfbG9ja19uZXN0ZWQoJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9DSElMRCk7CisJZGVudHJ5X3VuaGFzaChkZW50cnkpOworCWVycm9yID0gZGlyLT5pX29wLT5ybWRpcihkaXIsIGRlbnRyeSk7CisJaWYgKCFlcnJvcikKKwkJZGVudHJ5LT5kX2lub2RlLT5pX2ZsYWdzIHw9IFNfREVBRDsKKwltdXRleF91bmxvY2soJmRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleCk7CisJaWYgKCFlcnJvcikKKwkJZF9kZWxldGUoZGVudHJ5KTsKKwlkcHV0KGRlbnRyeSk7CisKKwlyZXR1cm4gZXJyb3I7Cit9CisKKyNkZWZpbmUgeGF0dHJfbWF5X2NyZWF0ZShmbGFncykJKCFmbGFncyB8fCBmbGFncyAmIFhBVFRSX0NSRUFURSkKKworLyogUmV0dXJucyBhbmQgcG9zc2libHkgY3JlYXRlcyB0aGUgeGF0dHIgZGlyLiAqLworc3RhdGljIHN0cnVjdCBkZW50cnkgKmxvb2t1cF9vcl9jcmVhdGVfZGlyKHN0cnVjdCBkZW50cnkgKnBhcmVudCwKKwkJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7CisJQlVHX09OKCFwYXJlbnQpOworCisJZGVudHJ5ID0gbG9va3VwX29uZV9sZW4obmFtZSwgcGFyZW50LCBzdHJsZW4obmFtZSkpOworCWlmIChJU19FUlIoZGVudHJ5KSkKKwkJcmV0dXJuIGRlbnRyeTsKKwllbHNlIGlmICghZGVudHJ5LT5kX2lub2RlKSB7CisJCWludCBlcnIgPSAtRU5PREFUQTsKKworCQlpZiAoeGF0dHJfbWF5X2NyZWF0ZShmbGFncykpIHsKKwkJCW11dGV4X2xvY2tfbmVzdGVkKCZwYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgsCisJCQkJCSAgSV9NVVRFWF9YQVRUUik7CisJCQllcnIgPSB4YXR0cl9ta2RpcihwYXJlbnQtPmRfaW5vZGUsIGRlbnRyeSwgMDcwMCk7CisJCQltdXRleF91bmxvY2soJnBhcmVudC0+ZF9pbm9kZS0+aV9tdXRleCk7CisJCX0KKworCQlpZiAoZXJyKSB7CisJCQlkcHV0KGRlbnRyeSk7CisJCQlkZW50cnkgPSBFUlJfUFRSKGVycik7CisJCX0KKwl9CisKKwlyZXR1cm4gZGVudHJ5OworfQorCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqb3Blbl94YV9yb290KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBmbGFncykKK3sKKwlzdHJ1Y3QgZGVudHJ5ICpwcml2cm9vdCA9IFJFSVNFUkZTX1NCKHNiKS0+cHJpdl9yb290OworCWlmICghcHJpdnJvb3QpCisJCXJldHVybiBFUlJfUFRSKC1FTk9EQVRBKTsKKwlyZXR1cm4gbG9va3VwX29yX2NyZWF0ZV9kaXIocHJpdnJvb3QsIFhBUk9PVF9OQU1FLCBmbGFncyk7Cit9CisKIHN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpvcGVuX3hhX2Rpcihjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgZmxhZ3MpCiB7CiAJc3RydWN0IGRlbnRyeSAqeGFyb290LCAqeGFkaXI7CiAJY2hhciBuYW1lYnVmWzE3XTsKIAotCXhhcm9vdCA9IGdldF94YV9yb290KGlub2RlLT5pX3NiLCBmbGFncyk7CisJeGFyb290ID0gb3Blbl94YV9yb290KGlub2RlLT5pX3NiLCBmbGFncyk7CiAJaWYgKElTX0VSUih4YXJvb3QpKQogCQlyZXR1cm4geGFyb290OwogCi0JLyogb2ssIHdlIGhhdmUgeGFyb290IG9wZW4gKi8KIAlzbnByaW50ZihuYW1lYnVmLCBzaXplb2YobmFtZWJ1ZiksICIlWC4lWCIsCiAJCSBsZTMyX3RvX2NwdShJTk9ERV9QS0VZKGlub2RlKS0+a19vYmplY3RpZCksCiAJCSBpbm9kZS0+aV9nZW5lcmF0aW9uKTsKLQl4YWRpciA9IGxvb2t1cF9vbmVfbGVuKG5hbWVidWYsIHhhcm9vdCwgc3RybGVuKG5hbWVidWYpKTsKLQlpZiAoSVNfRVJSKHhhZGlyKSkgewotCQlkcHV0KHhhcm9vdCk7Ci0JCXJldHVybiB4YWRpcjsKLQl9CiAKLQlpZiAoIXhhZGlyLT5kX2lub2RlKSB7Ci0JCWludCBlcnI7Ci0JCWlmIChmbGFncyA9PSAwIHx8IGZsYWdzICYgWEFUVFJfQ1JFQVRFKSB7Ci0JCQkvKiBBbHRob3VnaCB0aGVyZSBpcyBub3RoaW5nIGVsc2UgdHJ5aW5nIHRvIGNyZWF0ZSB0aGlzIGRpcmVjdG9yeSwKLQkJCSAqIGFub3RoZXIgZGlyZWN0b3J5IHdpdGggdGhlIHNhbWUgaGFzaCBtYXkgYmUgY3JlYXRlZCwgc28gd2UgbmVlZAotCQkJICogdG8gcHJvdGVjdCBhZ2FpbnN0IHRoYXQgKi8KLQkJCWVyciA9Ci0JCQkgICAgeGFyb290LT5kX2lub2RlLT5pX29wLT5ta2Rpcih4YXJvb3QtPmRfaW5vZGUsIHhhZGlyLAotCQkJCQkJCSAwNzAwKTsKLQkJCWlmIChlcnIpIHsKLQkJCQlkcHV0KHhhcm9vdCk7Ci0JCQkJZHB1dCh4YWRpcik7Ci0JCQkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKLQkJCX0KLQkJfQotCQlpZiAoIXhhZGlyLT5kX2lub2RlKSB7Ci0JCQlkcHV0KHhhcm9vdCk7Ci0JCQlkcHV0KHhhZGlyKTsKLQkJCXJldHVybiBFUlJfUFRSKC1FTk9EQVRBKTsKLQkJfQotCX0KLQorCXhhZGlyID0gbG9va3VwX29yX2NyZWF0ZV9kaXIoeGFyb290LCBuYW1lYnVmLCBmbGFncyk7CiAJZHB1dCh4YXJvb3QpOwogCXJldHVybiB4YWRpcjsKKwogfQogCisvKiBUaGUgZm9sbG93aW5nIGFyZSBzaWRlIGVmZmVjdHMgb2Ygb3RoZXIgb3BlcmF0aW9ucyB0aGF0IGFyZW4ndCBleHBsaWNpdGx5CisgKiBtb2RpZnlpbmcgZXh0ZW5kZWQgYXR0cmlidXRlcy4gVGhpcyBpbmNsdWRlcyBvcGVyYXRpb25zIHN1Y2ggYXMgcGVybWlzc2lvbnMKKyAqIG9yIG93bmVyc2hpcCBjaGFuZ2VzLCBvYmplY3QgZGVsZXRpb25zLCBldGMuICovCitzdHJ1Y3QgcmVpc2VyZnNfZGVudHJ5X2J1ZiB7CisJc3RydWN0IGRlbnRyeSAqeGFkaXI7CisJaW50IGNvdW50OworCXN0cnVjdCBkZW50cnkgKmRlbnRyaWVzWzhdOworfTsKKworc3RhdGljIGludAorZmlsbF93aXRoX2RlbnRyaWVzKHZvaWQgKmJ1ZiwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGxvZmZfdCBvZmZzZXQsCisJCSAgICB1NjQgaW5vLCB1bnNpZ25lZCBpbnQgZF90eXBlKQoreworCXN0cnVjdCByZWlzZXJmc19kZW50cnlfYnVmICpkYnVmID0gYnVmOworCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKKworCWlmIChkYnVmLT5jb3VudCA9PSBBUlJBWV9TSVpFKGRidWYtPmRlbnRyaWVzKSkKKwkJcmV0dXJuIC1FTk9TUEM7CisKKwlpZiAobmFtZVswXSA9PSAnLicgJiYgKG5hbWVbMV0gPT0gJ1wwJyB8fAorCQkJICAgICAgIChuYW1lWzFdID09ICcuJyAmJiBuYW1lWzJdID09ICdcMCcpKSkKKwkJcmV0dXJuIDA7CisKKwlkZW50cnkgPSBsb29rdXBfb25lX2xlbihuYW1lLCBkYnVmLT54YWRpciwgbmFtZWxlbik7CisJaWYgKElTX0VSUihkZW50cnkpKSB7CisJCXJldHVybiBQVFJfRVJSKGRlbnRyeSk7CisJfSBlbHNlIGlmICghZGVudHJ5LT5kX2lub2RlKSB7CisJCS8qIEEgZGlyZWN0b3J5IGVudHJ5IGV4aXN0cywgYnV0IG5vIGZpbGU/ICovCisJCXJlaXNlcmZzX2Vycm9yKGRlbnRyeS0+ZF9zYiwgInhhdHRyLTIwMDAzIiwKKwkJCSAgICAgICAiQ29ycnVwdGVkIGRpcmVjdG9yeTogeGF0dHIgJXMgbGlzdGVkIGJ1dCAiCisJCQkgICAgICAgIm5vdCBmb3VuZCBmb3IgZmlsZSAlcy5cbiIsCisJCQkgICAgICAgZGVudHJ5LT5kX25hbWUubmFtZSwgZGJ1Zi0+eGFkaXItPmRfbmFtZS5uYW1lKTsKKwkJZHB1dChkZW50cnkpOworCQlyZXR1cm4gLUVJTzsKKwl9CisKKwlkYnVmLT5kZW50cmllc1tkYnVmLT5jb3VudCsrXSA9IGRlbnRyeTsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQKK2NsZWFudXBfZGVudHJ5X2J1ZihzdHJ1Y3QgcmVpc2VyZnNfZGVudHJ5X2J1ZiAqYnVmKQoreworCWludCBpOworCWZvciAoaSA9IDA7IGkgPCBidWYtPmNvdW50OyBpKyspCisJCWlmIChidWYtPmRlbnRyaWVzW2ldKQorCQkJZHB1dChidWYtPmRlbnRyaWVzW2ldKTsKK30KKworc3RhdGljIGludCByZWlzZXJmc19mb3JfZWFjaF94YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJCSAgIGludCAoKmFjdGlvbikoc3RydWN0IGRlbnRyeSAqLCB2b2lkICopLAorCQkJCSAgIHZvaWQgKmRhdGEpCit7CisJc3RydWN0IGRlbnRyeSAqZGlyOworCWludCBpLCBlcnIgPSAwOworCWxvZmZfdCBwb3MgPSAwOworCXN0cnVjdCByZWlzZXJmc19kZW50cnlfYnVmIGJ1ZiA9IHsKKwkJLmNvdW50ID0gMCwKKwl9OworCisJLyogU2tpcCBvdXQsIGFuIHhhdHRyIGhhcyBubyB4YXR0cnMgYXNzb2NpYXRlZCB3aXRoIGl0ICovCisJaWYgKElTX1BSSVZBVEUoaW5vZGUpIHx8IGdldF9pbm9kZV9zZF92ZXJzaW9uKGlub2RlKSA9PSBTVEFUX0RBVEFfVjEpCisJCXJldHVybiAwOworCisJZGlyID0gb3Blbl94YV9kaXIoaW5vZGUsIFhBVFRSX1JFUExBQ0UpOworCWlmIChJU19FUlIoZGlyKSkgeworCQllcnIgPSBQVFJfRVJSKGRpcik7CisJCWdvdG8gb3V0OworCX0gZWxzZSBpZiAoIWRpci0+ZF9pbm9kZSkgeworCQllcnIgPSAwOworCQlnb3RvIG91dF9kaXI7CisJfQorCisJbXV0ZXhfbG9ja19uZXN0ZWQoJmRpci0+ZF9pbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9YQVRUUik7CisJYnVmLnhhZGlyID0gZGlyOworCWVyciA9IHJlaXNlcmZzX3JlYWRkaXJfZGVudHJ5KGRpciwgJmJ1ZiwgZmlsbF93aXRoX2RlbnRyaWVzLCAmcG9zKTsKKwl3aGlsZSAoKGVyciA9PSAwIHx8IGVyciA9PSAtRU5PU1BDKSAmJiBidWYuY291bnQpIHsKKwkJZXJyID0gMDsKKworCQlmb3IgKGkgPSAwOyBpIDwgYnVmLmNvdW50ICYmIGJ1Zi5kZW50cmllc1tpXTsgaSsrKSB7CisJCQlpbnQgbGVyciA9IDA7CisJCQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBidWYuZGVudHJpZXNbaV07CisKKwkJCWlmIChlcnIgPT0gMCAmJiAhU19JU0RJUihkZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpCisJCQkJbGVyciA9IGFjdGlvbihkZW50cnksIGRhdGEpOworCisJCQlkcHV0KGRlbnRyeSk7CisJCQlidWYuZGVudHJpZXNbaV0gPSBOVUxMOworCQkJZXJyID0gbGVyciA/OiBlcnI7CisJCX0KKwkJYnVmLmNvdW50ID0gMDsKKwkJaWYgKCFlcnIpCisJCQllcnIgPSByZWlzZXJmc19yZWFkZGlyX2RlbnRyeShkaXIsICZidWYsCisJCQkJCQkgICAgICBmaWxsX3dpdGhfZGVudHJpZXMsICZwb3MpOworCX0KKwltdXRleF91bmxvY2soJmRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CisKKwkvKiBDbGVhbiB1cCBhZnRlciBhIGZhaWxlZCByZWFkZGlyICovCisJY2xlYW51cF9kZW50cnlfYnVmKCZidWYpOworCisJaWYgKCFlcnIpIHsKKwkJLyogV2Ugc3RhcnQgYSB0cmFuc2FjdGlvbiBoZXJlIHRvIGF2b2lkIGEgQUJCQSBzaXR1YXRpb24KKwkJICogYmV0d2VlbiB0aGUgeGF0dHIgcm9vdCdzIGlfbXV0ZXggYW5kIHRoZSBqb3VybmFsIGxvY2suCisJCSAqIFRoaXMgZG9lc24ndCBpbmN1ciBtdWNoIGFkZGl0aW9uYWwgb3ZlcmhlYWQgc2luY2UgdGhlCisJCSAqIG5ldyB0cmFuc2FjdGlvbiB3aWxsIGp1c3QgbmVzdCBpbnNpZGUgdGhlCisJCSAqIG91dGVyIHRyYW5zYWN0aW9uLiAqLworCQlpbnQgYmxvY2tzID0gSk9VUk5BTF9QRVJfQkFMQU5DRV9DTlQgKiAyICsgMiArCisJCQkgICAgIDQgKiBSRUlTRVJGU19RVU9UQV9UUkFOU19CTE9DS1MoaW5vZGUtPmlfc2IpOworCQlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlIHRoOworCQllcnIgPSBqb3VybmFsX2JlZ2luKCZ0aCwgaW5vZGUtPmlfc2IsIGJsb2Nrcyk7CisJCWlmICghZXJyKSB7CisJCQlpbnQgamVycm9yOworCQkJbXV0ZXhfbG9ja19uZXN0ZWQoJmRpci0+ZF9wYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgsCisJCQkJCSAgSV9NVVRFWF9YQVRUUik7CisJCQllcnIgPSBhY3Rpb24oZGlyLCBkYXRhKTsKKwkJCWplcnJvciA9IGpvdXJuYWxfZW5kKCZ0aCwgaW5vZGUtPmlfc2IsIGJsb2Nrcyk7CisJCQltdXRleF91bmxvY2soJmRpci0+ZF9wYXJlbnQtPmRfaW5vZGUtPmlfbXV0ZXgpOworCQkJZXJyID0gamVycm9yID86IGVycjsKKwkJfQorCX0KK291dF9kaXI6CisJZHB1dChkaXIpOworb3V0OgorCS8qIC1FTk9EQVRBIGlzbid0IGFuIGVycm9yICovCisJaWYgKGVyciA9PSAtRU5PREFUQSkKKwkJZXJyID0gMDsKKwlyZXR1cm4gZXJyOworfQorCitzdGF0aWMgaW50IGRlbGV0ZV9vbmVfeGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBpbm9kZSAqZGlyID0gZGVudHJ5LT5kX3BhcmVudC0+ZF9pbm9kZTsKKworCS8qIFRoaXMgaXMgdGhlIHhhdHRyIGRpciwgaGFuZGxlIHNwZWNpYWxseS4gKi8KKwlpZiAoU19JU0RJUihkZW50cnktPmRfaW5vZGUtPmlfbW9kZSkpCisJCXJldHVybiB4YXR0cl9ybWRpcihkaXIsIGRlbnRyeSk7CisKKwlyZXR1cm4geGF0dHJfdW5saW5rKGRpciwgZGVudHJ5KTsKK30KKworc3RhdGljIGludCBjaG93bl9vbmVfeGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBpYXR0ciAqYXR0cnMgPSBkYXRhOworCXJldHVybiByZWlzZXJmc19zZXRhdHRyKGRlbnRyeSwgYXR0cnMpOworfQorCisvKiBObyBpX211dGV4LCBidXQgdGhlIGlub2RlIGlzIHVuY29ubmVjdGVkLiAqLworaW50IHJlaXNlcmZzX2RlbGV0ZV94YXR0cnMoc3RydWN0IGlub2RlICppbm9kZSkKK3sKKwlpbnQgZXJyID0gcmVpc2VyZnNfZm9yX2VhY2hfeGF0dHIoaW5vZGUsIGRlbGV0ZV9vbmVfeGF0dHIsIE5VTEwpOworCWlmIChlcnIpCisJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICJqZG0tMjAwMDQiLAorCQkJCSAiQ291bGRuJ3QgZGVsZXRlIGFsbCB4YXR0cnMgKCVkKVxuIiwgZXJyKTsKKwlyZXR1cm4gZXJyOworfQorCisvKiBpbm9kZS0+aV9tdXRleDogZG93biAqLworaW50IHJlaXNlcmZzX2Nob3duX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaWF0dHIgKmF0dHJzKQoreworCWludCBlcnIgPSByZWlzZXJmc19mb3JfZWFjaF94YXR0cihpbm9kZSwgY2hvd25fb25lX3hhdHRyLCBhdHRycyk7CisJaWYgKGVycikKKwkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgImpkbS0yMDAwNyIsCisJCQkJICJDb3VsZG4ndCBjaG93biBhbGwgeGF0dHJzICglZClcbiIsIGVycik7CisJcmV0dXJuIGVycjsKK30KKworI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19YQVRUUgogLyogUmV0dXJucyBhIGRlbnRyeSBjb3JyZXNwb25kaW5nIHRvIGEgc3BlY2lmaWMgZXh0ZW5kZWQgYXR0cmlidXRlIGZpbGUKICAqIGZvciB0aGUgaW5vZGUuIElmIGZsYWdzIGFsbG93LCB0aGUgZmlsZSBpcyBjcmVhdGVkLiBPdGhlcndpc2UsIGEKICAqIHZhbGlkIG9yIG5lZ2F0aXZlIGRlbnRyeSwgb3IgYW4gZXJyb3IgaXMgcmV0dXJuZWQuICovCi1zdGF0aWMgc3RydWN0IGRlbnRyeSAqZ2V0X3hhX2ZpbGVfZGVudHJ5KGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsCi0JCQkJCSBjb25zdCBjaGFyICpuYW1lLCBpbnQgZmxhZ3MpCitzdGF0aWMgc3RydWN0IGRlbnRyeSAqeGF0dHJfbG9va3VwKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgIGludCBmbGFncykKIHsKIAlzdHJ1Y3QgZGVudHJ5ICp4YWRpciwgKnhhZmlsZTsKIAlpbnQgZXJyID0gMDsKIAogCXhhZGlyID0gb3Blbl94YV9kaXIoaW5vZGUsIGZsYWdzKTsKLQlpZiAoSVNfRVJSKHhhZGlyKSkgeworCWlmIChJU19FUlIoeGFkaXIpKQogCQlyZXR1cm4gRVJSX0NBU1QoeGFkaXIpOwotCX0gZWxzZSBpZiAoIXhhZGlyLT5kX2lub2RlKSB7Ci0JCWRwdXQoeGFkaXIpOwotCQlyZXR1cm4gRVJSX1BUUigtRU5PREFUQSk7Ci0JfQogCiAJeGFmaWxlID0gbG9va3VwX29uZV9sZW4obmFtZSwgeGFkaXIsIHN0cmxlbihuYW1lKSk7CiAJaWYgKElTX0VSUih4YWZpbGUpKSB7Ci0JCWRwdXQoeGFkaXIpOwotCQlyZXR1cm4gRVJSX0NBU1QoeGFmaWxlKTsKLQl9Ci0KLQlpZiAoeGFmaWxlLT5kX2lub2RlKSB7CS8qIGZpbGUgZXhpc3RzICovCi0JCWlmIChmbGFncyAmIFhBVFRSX0NSRUFURSkgewotCQkJZXJyID0gLUVFWElTVDsKLQkJCWRwdXQoeGFmaWxlKTsKLQkJCWdvdG8gb3V0OwotCQl9Ci0JfSBlbHNlIGlmIChmbGFncyAmIFhBVFRSX1JFUExBQ0UgfHwgZmxhZ3MgJiBGTF9SRUFET05MWSkgeworCQllcnIgPSBQVFJfRVJSKHhhZmlsZSk7CiAJCWdvdG8gb3V0OwotCX0gZWxzZSB7Ci0JCS8qIGlub2RlLT5pX211dGV4IGlzIGRvd24sIHNvIG5vdGhpbmcgZWxzZSBjYW4gdHJ5IHRvIGNyZWF0ZQotCQkgKiB0aGUgc2FtZSB4YXR0ciAqLwotCQllcnIgPSB4YWRpci0+ZF9pbm9kZS0+aV9vcC0+Y3JlYXRlKHhhZGlyLT5kX2lub2RlLCB4YWZpbGUsCi0JCQkJCQkgICAwNzAwIHwgU19JRlJFRywgTlVMTCk7CisJfQogCi0JCWlmIChlcnIpIHsKLQkJCWRwdXQoeGFmaWxlKTsKLQkJCWdvdG8gb3V0OworCWlmICh4YWZpbGUtPmRfaW5vZGUgJiYgKGZsYWdzICYgWEFUVFJfQ1JFQVRFKSkKKwkJZXJyID0gLUVFWElTVDsKKworCWlmICgheGFmaWxlLT5kX2lub2RlKSB7CisJCWVyciA9IC1FTk9EQVRBOworCQlpZiAoeGF0dHJfbWF5X2NyZWF0ZShmbGFncykpIHsKKwkJCW11dGV4X2xvY2tfbmVzdGVkKCZ4YWRpci0+ZF9pbm9kZS0+aV9tdXRleCwKKwkJCQkJICBJX01VVEVYX1hBVFRSKTsKKwkJCWVyciA9IHhhdHRyX2NyZWF0ZSh4YWRpci0+ZF9pbm9kZSwgeGFmaWxlLAorCQkJCQkgICAgICAwNzAwfFNfSUZSRUcpOworCQkJbXV0ZXhfdW5sb2NrKCZ4YWRpci0+ZF9pbm9kZS0+aV9tdXRleCk7CiAJCX0KIAl9CiAKLSAgICAgIG91dDoKKwlpZiAoZXJyKQorCQlkcHV0KHhhZmlsZSk7CitvdXQ6CiAJZHB1dCh4YWRpcik7CiAJaWYgKGVycikKLQkJeGFmaWxlID0gRVJSX1BUUihlcnIpOwotCWVsc2UgaWYgKCF4YWZpbGUtPmRfaW5vZGUpIHsKLQkJZHB1dCh4YWZpbGUpOwotCQl4YWZpbGUgPSBFUlJfUFRSKC1FTk9EQVRBKTsKLQl9CisJCXJldHVybiBFUlJfUFRSKGVycik7CiAJcmV0dXJuIHhhZmlsZTsKIH0KIAotLyoKLSAqIHRoaXMgaXMgdmVyeSBzaW1pbGFyIHRvIGZzL3JlaXNlcmZzL2Rpci5jOnJlaXNlcmZzX3JlYWRkaXIsIGJ1dAotICogd2UgbmVlZCB0byBkcm9wIHRoZSBwYXRoIGJlZm9yZSBjYWxsaW5nIHRoZSBmaWxsZGlyIHN0cnVjdC4gIFRoYXQKLSAqIHdvdWxkIGJlIGEgYmlnIHBlcmZvcm1hbmNlIGhpdCB0byB0aGUgbm9uLXhhdHRyIGNhc2UsIHNvIEkndmUgY29waWVkCi0gKiB0aGUgd2hvbGUgdGhpbmcgZm9yIG5vdy4gLS1jbG0KLSAqCi0gKiB0aGUgYmlnIGRpZmZlcmVuY2UgaXMgdGhhdCBJIGdvIGJhY2t3YXJkcyB0aHJvdWdoIHRoZSBkaXJlY3RvcnksCi0gKiBhbmQgZG9uJ3QgbWVzcyB3aXRoIGYtPmZfcG9zLCBidXQgdGhlIGlkZWEgaXMgdGhlIHNhbWUuICBEbyBzb21lCi0gKiBhY3Rpb24gb24gZWFjaCBhbmQgZXZlcnkgZW50cnkgaW4gdGhlIGRpcmVjdG9yeS4KLSAqCi0gKiB3ZSdyZSBjYWxsZWQgd2l0aCBpX211dGV4IGhlbGQsIHNvIHRoZXJlIGFyZSBubyB3b3JyaWVzIGFib3V0IHRoZSBkaXJlY3RvcnkKLSAqIGNoYW5naW5nIHVuZGVybmVhdGggdXMuCi0gKi8KLXN0YXRpYyBpbnQgX194YXR0cl9yZWFkZGlyKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHZvaWQgKmRpcmVudCwgZmlsbGRpcl90IGZpbGxkaXIpCi17Ci0Jc3RydWN0IGNwdV9rZXkgcG9zX2tleTsJLyoga2V5IG9mIGN1cnJlbnQgcG9zaXRpb24gaW4gdGhlIGRpcmVjdG9yeSAoa2V5IG9mIGRpcmVjdG9yeSBlbnRyeSkgKi8KLQlJTklUSUFMSVpFX1BBVEgocGF0aF90b19lbnRyeSk7Ci0Jc3RydWN0IGJ1ZmZlcl9oZWFkICpiaDsKLQlpbnQgZW50cnlfbnVtOwotCXN0cnVjdCBpdGVtX2hlYWQgKmloLCB0bXBfaWg7Ci0JaW50IHNlYXJjaF9yZXM7Ci0JY2hhciAqbG9jYWxfYnVmOwotCWxvZmZfdCBuZXh0X3BvczsKLQljaGFyIHNtYWxsX2J1ZlszMl07CS8qIGF2b2lkIGttYWxsb2MgaWYgd2UgY2FuICovCi0Jc3RydWN0IHJlaXNlcmZzX2RlX2hlYWQgKmRlaDsKLQlpbnQgZF9yZWNsZW47Ci0JY2hhciAqZF9uYW1lOwotCW9mZl90IGRfb2ZmOwotCWlub190IGRfaW5vOwotCXN0cnVjdCByZWlzZXJmc19kaXJfZW50cnkgZGU7Ci0KLQkvKiBmb3JtIGtleSBmb3Igc2VhcmNoIHRoZSBuZXh0IGRpcmVjdG9yeSBlbnRyeSB1c2luZyBmX3BvcyBmaWVsZCBvZgotCSAgIGZpbGUgc3RydWN0dXJlICovCi0JbmV4dF9wb3MgPSBtYXhfcmVpc2VyZnNfb2Zmc2V0KGlub2RlKTsKLQotCXdoaWxlICgxKSB7Ci0JICAgICAgcmVzZWFyY2g6Ci0JCWlmIChuZXh0X3BvcyA8PSBET1RfRE9UX09GRlNFVCkKLQkJCWJyZWFrOwotCQltYWtlX2NwdV9rZXkoJnBvc19rZXksIGlub2RlLCBuZXh0X3BvcywgVFlQRV9ESVJFTlRSWSwgMyk7Ci0KLQkJc2VhcmNoX3JlcyA9Ci0JCSAgICBzZWFyY2hfYnlfZW50cnlfa2V5KGlub2RlLT5pX3NiLCAmcG9zX2tleSwgJnBhdGhfdG9fZW50cnksCi0JCQkJCSZkZSk7Ci0JCWlmIChzZWFyY2hfcmVzID09IElPX0VSUk9SKSB7Ci0JCQkvLyBGSVhNRTogd2UgY291bGQganVzdCBza2lwIHBhcnQgb2YgZGlyZWN0b3J5IHdoaWNoIGNvdWxkCi0JCQkvLyBub3QgYmUgcmVhZAotCQkJcGF0aHJlbHNlKCZwYXRoX3RvX2VudHJ5KTsKLQkJCXJldHVybiAtRUlPOwotCQl9Ci0KLQkJaWYgKHNlYXJjaF9yZXMgPT0gTkFNRV9OT1RfRk9VTkQpCi0JCQlkZS5kZV9lbnRyeV9udW0tLTsKLQotCQlzZXRfZGVfbmFtZV9hbmRfbmFtZWxlbigmZGUpOwotCQllbnRyeV9udW0gPSBkZS5kZV9lbnRyeV9udW07Ci0JCWRlaCA9ICYoZGUuZGVfZGVoW2VudHJ5X251bV0pOwotCi0JCWJoID0gZGUuZGVfYmg7Ci0JCWloID0gZGUuZGVfaWg7Ci0KLQkJaWYgKCFpc19kaXJlbnRyeV9sZV9paChpaCkpIHsKLQkJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICJub3QgZGlyZW50cnkgJWgiLCBpaCk7Ci0JCQlicmVhazsKLQkJfQotCQljb3B5X2l0ZW1faGVhZCgmdG1wX2loLCBpaCk7Ci0KLQkJLyogd2UgbXVzdCBoYXZlIGZvdW5kIGl0ZW0sIHRoYXQgaXMgaXRlbSBvZiB0aGlzIGRpcmVjdG9yeSwgKi8KLQkJUkZBTFNFKENPTVBfU0hPUlRfS0VZUygmKGloLT5paF9rZXkpLCAmcG9zX2tleSksCi0JCSAgICAgICAidnMtOTAwMDogZm91bmQgaXRlbSAlaCBkb2VzIG5vdCBtYXRjaCB0byBkaXIgd2UgcmVhZGRpciAlSyIsCi0JCSAgICAgICBpaCwgJnBvc19rZXkpOwotCi0JCWlmIChkZWhfb2Zmc2V0KGRlaCkgPD0gRE9UX0RPVF9PRkZTRVQpIHsKLQkJCWJyZWFrOwotCQl9Ci0KLQkJLyogbG9vayBmb3IgdGhlIHByZXZpb3VzIGVudHJ5IGluIHRoZSBkaXJlY3RvcnkgKi8KLQkJbmV4dF9wb3MgPSBkZWhfb2Zmc2V0KGRlaCkgLSAxOwotCi0JCWlmICghZGVfdmlzaWJsZShkZWgpKQotCQkJLyogaXQgaXMgaGlkZGVuIGVudHJ5ICovCi0JCQljb250aW51ZTsKLQotCQlkX3JlY2xlbiA9IGVudHJ5X2xlbmd0aChiaCwgaWgsIGVudHJ5X251bSk7Ci0JCWRfbmFtZSA9IEJfSV9ERUhfRU5UUllfRklMRV9OQU1FKGJoLCBpaCwgZGVoKTsKLQkJZF9vZmYgPSBkZWhfb2Zmc2V0KGRlaCk7Ci0JCWRfaW5vID0gZGVoX29iamVjdGlkKGRlaCk7Ci0KLQkJaWYgKCFkX25hbWVbZF9yZWNsZW4gLSAxXSkKLQkJCWRfcmVjbGVuID0gc3RybGVuKGRfbmFtZSk7Ci0KLQkJaWYgKGRfcmVjbGVuID4gUkVJU0VSRlNfTUFYX05BTUUoaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKSkgewotCQkJLyogdG9vIGJpZyB0byBzZW5kIGJhY2sgdG8gVkZTICovCi0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qIElnbm9yZSB0aGUgLnJlaXNlcmZzX3ByaXYgZW50cnkgKi8KLQkJaWYgKHJlaXNlcmZzX3hhdHRycyhpbm9kZS0+aV9zYikgJiYKLQkJICAgICFvbGRfZm9ybWF0X29ubHkoaW5vZGUtPmlfc2IpICYmCi0JCSAgICBkZWhfb2JqZWN0aWQoZGVoKSA9PQotCQkgICAgbGUzMl90b19jcHUoSU5PREVfUEtFWQotCQkJCShSRUlTRVJGU19TQihpbm9kZS0+aV9zYiktPnByaXZfcm9vdC0+ZF9pbm9kZSktPgotCQkJCWtfb2JqZWN0aWQpKQotCQkJY29udGludWU7Ci0KLQkJaWYgKGRfcmVjbGVuIDw9IDMyKSB7Ci0JCQlsb2NhbF9idWYgPSBzbWFsbF9idWY7Ci0JCX0gZWxzZSB7Ci0JCQlsb2NhbF9idWYgPSBrbWFsbG9jKGRfcmVjbGVuLCBHRlBfTk9GUyk7Ci0JCQlpZiAoIWxvY2FsX2J1ZikgewotCQkJCXBhdGhyZWxzZSgmcGF0aF90b19lbnRyeSk7Ci0JCQkJcmV0dXJuIC1FTk9NRU07Ci0JCQl9Ci0JCQlpZiAoaXRlbV9tb3ZlZCgmdG1wX2loLCAmcGF0aF90b19lbnRyeSkpIHsKLQkJCQlrZnJlZShsb2NhbF9idWYpOwotCi0JCQkJLyogc2lnaCwgbXVzdCByZXRyeS4gIERvIHRoaXMgc2FtZSBvZmZzZXQgYWdhaW4gKi8KLQkJCQluZXh0X3BvcyA9IGRfb2ZmOwotCQkJCWdvdG8gcmVzZWFyY2g7Ci0JCQl9Ci0JCX0KLQotCQkvLyBOb3RlLCB0aGF0IHdlIGNvcHkgbmFtZSB0byB1c2VyIHNwYWNlIHZpYSB0ZW1wb3JhcnkKLQkJLy8gYnVmZmVyIChsb2NhbF9idWYpIGJlY2F1c2UgZmlsbGRpciB3aWxsIGJsb2NrIGlmCi0JCS8vIHVzZXIgc3BhY2UgYnVmZmVyIGlzIHN3YXBwZWQgb3V0LiBBdCB0aGF0IHRpbWUKLQkJLy8gZW50cnkgY2FuIG1vdmUgdG8gc29tZXdoZXJlIGVsc2UKLQkJbWVtY3B5KGxvY2FsX2J1ZiwgZF9uYW1lLCBkX3JlY2xlbik7Ci0KLQkJLyogdGhlIGZpbGxkaXIgZnVuY3Rpb24gbWlnaHQgbmVlZCB0byBzdGFydCB0cmFuc2FjdGlvbnMsCi0JCSAqIG9yIGRvIHdobyBrbm93cyB3aGF0LiAgUmVsZWFzZSB0aGUgcGF0aCBub3cgdGhhdCB3ZSd2ZQotCQkgKiBjb3BpZWQgYWxsIHRoZSBpbXBvcnRhbnQgc3R1ZmYgb3V0IG9mIHRoZSBkZWgKLQkJICovCi0JCXBhdGhyZWxzZSgmcGF0aF90b19lbnRyeSk7Ci0KLQkJaWYgKGZpbGxkaXIoZGlyZW50LCBsb2NhbF9idWYsIGRfcmVjbGVuLCBkX29mZiwgZF9pbm8sCi0JCQkgICAgRFRfVU5LTk9XTikgPCAwKSB7Ci0JCQlpZiAobG9jYWxfYnVmICE9IHNtYWxsX2J1ZikgewotCQkJCWtmcmVlKGxvY2FsX2J1Zik7Ci0JCQl9Ci0JCQlnb3RvIGVuZDsKLQkJfQotCQlpZiAobG9jYWxfYnVmICE9IHNtYWxsX2J1ZikgewotCQkJa2ZyZWUobG9jYWxfYnVmKTsKLQkJfQotCX0JCQkvKiB3aGlsZSAqLwotCi0gICAgICBlbmQ6Ci0JcGF0aHJlbHNlKCZwYXRoX3RvX2VudHJ5KTsKLQlyZXR1cm4gMDsKLX0KLQotLyoKLSAqIHRoaXMgY291bGQgYmUgZG9uZSB3aXRoIGRlZGljYXRlZCByZWFkZGlyIG9wcyBmb3IgdGhlIHhhdHRyIGZpbGVzLAotICogYnV0IEkgd2FudCB0byBnZXQgc29tZXRoaW5nIHdvcmtpbmcgYXNhcAotICogdGhpcyBpcyBzdG9sZW4gZnJvbSB2ZnNfcmVhZGRpcgotICoKLSAqLwotc3RhdGljCi1pbnQgeGF0dHJfcmVhZGRpcihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBmaWxsZGlyX3QgZmlsbGVyLCB2b2lkICpidWYpCi17Ci0JaW50IHJlcyA9IC1FTk9FTlQ7Ci0JbXV0ZXhfbG9ja19uZXN0ZWQoJmlub2RlLT5pX211dGV4LCBJX01VVEVYX1hBVFRSKTsKLQlpZiAoIUlTX0RFQURESVIoaW5vZGUpKSB7Ci0JCWxvY2tfa2VybmVsKCk7Ci0JCXJlcyA9IF9feGF0dHJfcmVhZGRpcihpbm9kZSwgYnVmLCBmaWxsZXIpOwotCQl1bmxvY2tfa2VybmVsKCk7Ci0JfQotCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCXJldHVybiByZXM7Ci19Ci0KIC8qIEludGVybmFsIG9wZXJhdGlvbnMgb24gZmlsZSBkYXRhICovCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfcHV0X3BhZ2Uoc3RydWN0IHBhZ2UgKnBhZ2UpCiB7CkBAIC0zNzUsMTQgKzM4NSwxNCBAQAogCXBhZ2VfY2FjaGVfcmVsZWFzZShwYWdlKTsKIH0KIAotc3RhdGljIHN0cnVjdCBwYWdlICpyZWlzZXJmc19nZXRfcGFnZShzdHJ1Y3QgaW5vZGUgKmRpciwgdW5zaWduZWQgbG9uZyBuKQorc3RhdGljIHN0cnVjdCBwYWdlICpyZWlzZXJmc19nZXRfcGFnZShzdHJ1Y3QgaW5vZGUgKmRpciwgc2l6ZV90IG4pCiB7CiAJc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBkaXItPmlfbWFwcGluZzsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAkvKiBXZSBjYW4gZGVhZGxvY2sgaWYgd2UgdHJ5IHRvIGZyZWUgZGVudHJpZXMsCiAJICAgYW5kIGFuIHVubGluay9ybWRpciBoYXMganVzdCBvY2N1cmVkIC0gR0ZQX05PRlMgYXZvaWRzIHRoaXMgKi8KIAltYXBwaW5nX3NldF9nZnBfbWFzayhtYXBwaW5nLCBHRlBfTk9GUyk7Ci0JcGFnZSA9IHJlYWRfbWFwcGluZ19wYWdlKG1hcHBpbmcsIG4sIE5VTEwpOworCXBhZ2UgPSByZWFkX21hcHBpbmdfcGFnZShtYXBwaW5nLCBuID4+IFBBR0VfQ0FDSEVfU0hJRlQsIE5VTEwpOwogCWlmICghSVNfRVJSKHBhZ2UpKSB7CiAJCWttYXAocGFnZSk7CiAJCWlmIChQYWdlRXJyb3IocGFnZSkpCkBAIC00MDUsNiArNDE1LDQ1IEBACiBpbnQgcmVpc2VyZnNfcHJlcGFyZV93cml0ZShzdHJ1Y3QgZmlsZSAqZiwgc3RydWN0IHBhZ2UgKnBhZ2UsCiAJCQkgICB1bnNpZ25lZCBmcm9tLCB1bnNpZ25lZCB0byk7CiAKK3N0YXRpYyB2b2lkIHVwZGF0ZV9jdGltZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQoreworCXN0cnVjdCB0aW1lc3BlYyBub3cgPSBjdXJyZW50X2ZzX3RpbWUoaW5vZGUtPmlfc2IpOworCWlmIChobGlzdF91bmhhc2hlZCgmaW5vZGUtPmlfaGFzaCkgfHwgIWlub2RlLT5pX25saW5rIHx8CisJICAgIHRpbWVzcGVjX2VxdWFsKCZpbm9kZS0+aV9jdGltZSwgJm5vdykpCisJCXJldHVybjsKKworCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKKwltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKK30KKworc3RhdGljIGludCBsb29rdXBfYW5kX2RlbGV0ZV94YXR0cihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lKQoreworCWludCBlcnIgPSAwOworCXN0cnVjdCBkZW50cnkgKmRlbnRyeSwgKnhhZGlyOworCisJeGFkaXIgPSBvcGVuX3hhX2Rpcihpbm9kZSwgWEFUVFJfUkVQTEFDRSk7CisJaWYgKElTX0VSUih4YWRpcikpCisJCXJldHVybiBQVFJfRVJSKHhhZGlyKTsKKworCWRlbnRyeSA9IGxvb2t1cF9vbmVfbGVuKG5hbWUsIHhhZGlyLCBzdHJsZW4obmFtZSkpOworCWlmIChJU19FUlIoZGVudHJ5KSkgeworCQllcnIgPSBQVFJfRVJSKGRlbnRyeSk7CisJCWdvdG8gb3V0X2RwdXQ7CisJfQorCisJaWYgKGRlbnRyeS0+ZF9pbm9kZSkgeworCQltdXRleF9sb2NrX25lc3RlZCgmeGFkaXItPmRfaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfWEFUVFIpOworCQllcnIgPSB4YXR0cl91bmxpbmsoeGFkaXItPmRfaW5vZGUsIGRlbnRyeSk7CisJCW11dGV4X3VubG9jaygmeGFkaXItPmRfaW5vZGUtPmlfbXV0ZXgpOworCQl1cGRhdGVfY3RpbWUoaW5vZGUpOworCX0KKworCWRwdXQoZGVudHJ5KTsKK291dF9kcHV0OgorCWRwdXQoeGFkaXIpOworCXJldHVybiBlcnI7Cit9CisKIAogLyogR2VuZXJpYyBleHRlbmRlZCBhdHRyaWJ1dGUgb3BlcmF0aW9ucyB0aGF0IGNhbiBiZSB1c2VkIGJ5IHhhIHBsdWdpbnMgKi8KIApAQCAtNDEyLDU4ICs0NjEsMzIgQEAKICAqIGlub2RlLT5pX211dGV4OiBkb3duCiAgKi8KIGludAotcmVpc2VyZnNfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKLQkJICAgc2l6ZV90IGJ1ZmZlcl9zaXplLCBpbnQgZmxhZ3MpCityZWlzZXJmc194YXR0cl9zZXRfaGFuZGxlKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAorCQkJICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLAorCQkJICBjb25zdCB2b2lkICpidWZmZXIsIHNpemVfdCBidWZmZXJfc2l6ZSwgaW50IGZsYWdzKQogewogCWludCBlcnIgPSAwOwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKIAljaGFyICpkYXRhOwotCXN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nOwogCXNpemVfdCBmaWxlX3BvcyA9IDA7CiAJc2l6ZV90IGJ1ZmZlcl9wb3MgPSAwOwotCXN0cnVjdCBpbm9kZSAqeGlub2RlOwotCXN0cnVjdCBpYXR0ciBuZXdhdHRyczsKKwlzaXplX3QgbmV3X3NpemU7CiAJX191MzIgeGFoYXNoID0gMDsKIAogCWlmIChnZXRfaW5vZGVfc2RfdmVyc2lvbihpbm9kZSkgPT0gU1RBVF9EQVRBX1YxKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQkvKiBFbXB0eSB4YXR0cnMgYXJlIG9rLCB0aGV5J3JlIGp1c3QgZW1wdHkgZmlsZXMsIG5vIGhhc2ggKi8KLQlpZiAoYnVmZmVyICYmIGJ1ZmZlcl9zaXplKQotCQl4YWhhc2ggPSB4YXR0cl9oYXNoKGJ1ZmZlciwgYnVmZmVyX3NpemUpOworCWlmICghYnVmZmVyKQorCQlyZXR1cm4gbG9va3VwX2FuZF9kZWxldGVfeGF0dHIoaW5vZGUsIG5hbWUpOwogCi0gICAgICBvcGVuX2ZpbGU6Ci0JZGVudHJ5ID0gZ2V0X3hhX2ZpbGVfZGVudHJ5KGlub2RlLCBuYW1lLCBmbGFncyk7Ci0JaWYgKElTX0VSUihkZW50cnkpKSB7Ci0JCWVyciA9IFBUUl9FUlIoZGVudHJ5KTsKLQkJZ290byBvdXQ7Ci0JfQorCWRlbnRyeSA9IHhhdHRyX2xvb2t1cChpbm9kZSwgbmFtZSwgZmxhZ3MpOworCWlmIChJU19FUlIoZGVudHJ5KSkKKwkJcmV0dXJuIFBUUl9FUlIoZGVudHJ5KTsKIAotCXhpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQlSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyB8PSBpX2hhc194YXR0cl9kaXI7CisJZG93bl93cml0ZSgmUkVJU0VSRlNfSShpbm9kZSktPmlfeGF0dHJfc2VtKTsKIAotCS8qIHdlIG5lZWQgdG8gY29weSBpdCBvZmYuLiAqLwotCWlmICh4aW5vZGUtPmlfbmxpbmsgPiAxKSB7Ci0JCWRwdXQoZGVudHJ5KTsKLQkJZXJyID0gcmVpc2VyZnNfeGF0dHJfZGVsKGlub2RlLCBuYW1lKTsKLQkJaWYgKGVyciA8IDApCi0JCQlnb3RvIG91dDsKLQkJLyogV2UganVzdCBraWxsZWQgdGhlIG9sZCBvbmUsIHdlJ3JlIG5vdCByZXBsYWNpbmcgYW55bW9yZSAqLwotCQlpZiAoZmxhZ3MgJiBYQVRUUl9SRVBMQUNFKQotCQkJZmxhZ3MgJj0gflhBVFRSX1JFUExBQ0U7Ci0JCWdvdG8gb3Blbl9maWxlOwotCX0KLQotCS8qIFJlc2l6ZSBpdCBzbyB3ZSdyZSBvayB0byB3cml0ZSB0aGVyZSAqLwotCW5ld2F0dHJzLmlhX3NpemUgPSBidWZmZXJfc2l6ZTsKLQluZXdhdHRycy5pYV92YWxpZCA9IEFUVFJfU0laRSB8IEFUVFJfQ1RJTUU7Ci0JbXV0ZXhfbG9ja19uZXN0ZWQoJnhpbm9kZS0+aV9tdXRleCwgSV9NVVRFWF9YQVRUUik7Ci0JZXJyID0gbm90aWZ5X2NoYW5nZShkZW50cnksICZuZXdhdHRycyk7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfZmlscDsKLQotCW1hcHBpbmcgPSB4aW5vZGUtPmlfbWFwcGluZzsKKwl4YWhhc2ggPSB4YXR0cl9oYXNoKGJ1ZmZlciwgYnVmZmVyX3NpemUpOwogCXdoaWxlIChidWZmZXJfcG9zIDwgYnVmZmVyX3NpemUgfHwgYnVmZmVyX3BvcyA9PSAwKSB7CiAJCXNpemVfdCBjaHVuazsKIAkJc2l6ZV90IHNraXAgPSAwOwpAQCAtNDczLDEwICs0OTYsMTAgQEAKIAkJZWxzZQogCQkJY2h1bmsgPSBidWZmZXJfc2l6ZSAtIGJ1ZmZlcl9wb3M7CiAKLQkJcGFnZSA9IHJlaXNlcmZzX2dldF9wYWdlKHhpbm9kZSwgZmlsZV9wb3MgPj4gUEFHRV9DQUNIRV9TSElGVCk7CisJCXBhZ2UgPSByZWlzZXJmc19nZXRfcGFnZShkZW50cnktPmRfaW5vZGUsIGZpbGVfcG9zKTsKIAkJaWYgKElTX0VSUihwYWdlKSkgewogCQkJZXJyID0gUFRSX0VSUihwYWdlKTsKLQkJCWdvdG8gb3V0X2ZpbHA7CisJCQlnb3RvIG91dF91bmxvY2s7CiAJCX0KIAogCQlsb2NrX3BhZ2UocGFnZSk7CkBAIC01MTAsMjggKzUzMyw2MSBAQAogCQkJYnJlYWs7CiAJfQogCi0JLyogV2UgY2FuJ3QgbWFyayB0aGUgaW5vZGUgZGlydHkgaWYgaXQncyBub3QgaGFzaGVkLiBUaGlzIGlzIHRoZSBjYXNlCi0JICogd2hlbiB3ZSdyZSBpbmhlcml0aW5nIHRoZSBkZWZhdWx0IEFDTC4gSWYgd2UgZGlydHkgaXQsIHRoZSBpbm9kZQotCSAqIGdldHMgbWFya2VkIGRpcnR5LCBidXQgd29uJ3QgKGV2ZXIpIG1ha2UgaXQgb250byB0aGUgZGlydHkgbGlzdCB1bnRpbAotCSAqIGl0J3Mgc3luY2VkIGV4cGxpY2l0bHkgdG8gY2xlYXIgSV9ESVJUWS4gVGhpcyBpcyBiYWQuICovCi0JaWYgKCFobGlzdF91bmhhc2hlZCgmaW5vZGUtPmlfaGFzaCkpIHsKLQkJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwotCQltYXJrX2lub2RlX2RpcnR5KGlub2RlKTsKKwluZXdfc2l6ZSA9IGJ1ZmZlcl9zaXplICsgc2l6ZW9mKHN0cnVjdCByZWlzZXJmc194YXR0cl9oZWFkZXIpOworCWlmICghZXJyICYmIG5ld19zaXplIDwgaV9zaXplX3JlYWQoZGVudHJ5LT5kX2lub2RlKSkgeworCQlzdHJ1Y3QgaWF0dHIgbmV3YXR0cnMgPSB7CisJCQkuaWFfY3RpbWUgPSBjdXJyZW50X2ZzX3RpbWUoaW5vZGUtPmlfc2IpLAorCQkJLmlhX3NpemUgPSBidWZmZXJfc2l6ZSwKKwkJCS5pYV92YWxpZCA9IEFUVFJfU0laRSB8IEFUVFJfQ1RJTUUsCisJCX07CisJCW11dGV4X2xvY2tfbmVzdGVkKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgsIElfTVVURVhfWEFUVFIpOworCQlkb3duX3dyaXRlKCZkZW50cnktPmRfaW5vZGUtPmlfYWxsb2Nfc2VtKTsKKwkJZXJyID0gcmVpc2VyZnNfc2V0YXR0cihkZW50cnksICZuZXdhdHRycyk7CisJCXVwX3dyaXRlKCZkZW50cnktPmRfaW5vZGUtPmlfYWxsb2Nfc2VtKTsKKwkJbXV0ZXhfdW5sb2NrKCZkZW50cnktPmRfaW5vZGUtPmlfbXV0ZXgpOworCX0gZWxzZQorCQl1cGRhdGVfY3RpbWUoaW5vZGUpOworb3V0X3VubG9jazoKKwl1cF93cml0ZSgmUkVJU0VSRlNfSShpbm9kZSktPmlfeGF0dHJfc2VtKTsKKwlkcHV0KGRlbnRyeSk7CisJcmV0dXJuIGVycjsKK30KKworLyogV2UgbmVlZCB0byBzdGFydCBhIHRyYW5zYWN0aW9uIHRvIG1haW50YWluIGxvY2sgb3JkZXJpbmcgKi8KK2ludCByZWlzZXJmc194YXR0cl9zZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgICAgIGNvbnN0IHZvaWQgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmZlcl9zaXplLCBpbnQgZmxhZ3MpCit7CisKKwlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlIHRoOworCWludCBlcnJvciwgZXJyb3IyOworCXNpemVfdCBqYmVnaW5fY291bnQgPSByZWlzZXJmc194YXR0cl9uYmxvY2tzKGlub2RlLCBidWZmZXJfc2l6ZSk7CisKKwlpZiAoIShmbGFncyAmIFhBVFRSX1JFUExBQ0UpKQorCQlqYmVnaW5fY291bnQgKz0gcmVpc2VyZnNfeGF0dHJfamNyZWF0ZV9uYmxvY2tzKGlub2RlKTsKKworCXJlaXNlcmZzX3dyaXRlX2xvY2soaW5vZGUtPmlfc2IpOworCWVycm9yID0gam91cm5hbF9iZWdpbigmdGgsIGlub2RlLT5pX3NiLCBqYmVnaW5fY291bnQpOworCWlmIChlcnJvcikgeworCQlyZWlzZXJmc193cml0ZV91bmxvY2soaW5vZGUtPmlfc2IpOworCQlyZXR1cm4gZXJyb3I7CiAJfQogCi0gICAgICBvdXRfZmlscDoKLQltdXRleF91bmxvY2soJnhpbm9kZS0+aV9tdXRleCk7Ci0JZHB1dChkZW50cnkpOworCWVycm9yID0gcmVpc2VyZnNfeGF0dHJfc2V0X2hhbmRsZSgmdGgsIGlub2RlLCBuYW1lLAorCQkJCQkgIGJ1ZmZlciwgYnVmZmVyX3NpemUsIGZsYWdzKTsKIAotICAgICAgb3V0OgotCXJldHVybiBlcnI7CisJZXJyb3IyID0gam91cm5hbF9lbmQoJnRoLCBpbm9kZS0+aV9zYiwgamJlZ2luX2NvdW50KTsKKwlpZiAoZXJyb3IgPT0gMCkKKwkJZXJyb3IgPSBlcnJvcjI7CisJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGlub2RlLT5pX3NiKTsKKworCXJldHVybiBlcnJvcjsKIH0KIAogLyoKICAqIGlub2RlLT5pX211dGV4OiBkb3duCiAgKi8KIGludAotcmVpc2VyZnNfeGF0dHJfZ2V0KGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIHZvaWQgKmJ1ZmZlciwKK3JlaXNlcmZzX3hhdHRyX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsCiAJCSAgIHNpemVfdCBidWZmZXJfc2l6ZSkKIHsKIAlzc2l6ZV90IGVyciA9IDA7CkBAIC01NDAsNyArNTk2LDYgQEAKIAlzaXplX3QgZmlsZV9wb3MgPSAwOwogCXNpemVfdCBidWZmZXJfcG9zID0gMDsKIAlzdHJ1Y3QgcGFnZSAqcGFnZTsKLQlzdHJ1Y3QgaW5vZGUgKnhpbm9kZTsKIAlfX3UzMiBoYXNoID0gMDsKIAogCWlmIChuYW1lID09IE5VTEwpCkBAIC01NTEsMjUgKzYwNiwyNSBAQAogCWlmIChnZXRfaW5vZGVfc2RfdmVyc2lvbihpbm9kZSkgPT0gU1RBVF9EQVRBX1YxKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlkZW50cnkgPSBnZXRfeGFfZmlsZV9kZW50cnkoaW5vZGUsIG5hbWUsIEZMX1JFQURPTkxZKTsKKwlkZW50cnkgPSB4YXR0cl9sb29rdXAoaW5vZGUsIG5hbWUsIFhBVFRSX1JFUExBQ0UpOwogCWlmIChJU19FUlIoZGVudHJ5KSkgewogCQllcnIgPSBQVFJfRVJSKGRlbnRyeSk7CiAJCWdvdG8gb3V0OwogCX0KIAotCXhpbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKLQlpc2l6ZSA9IHhpbm9kZS0+aV9zaXplOwotCVJFSVNFUkZTX0koaW5vZGUpLT5pX2ZsYWdzIHw9IGlfaGFzX3hhdHRyX2RpcjsKKwlkb3duX3JlYWQoJlJFSVNFUkZTX0koaW5vZGUpLT5pX3hhdHRyX3NlbSk7CisKKwlpc2l6ZSA9IGlfc2l6ZV9yZWFkKGRlbnRyeS0+ZF9pbm9kZSk7CiAKIAkvKiBKdXN0IHJldHVybiB0aGUgc2l6ZSBuZWVkZWQgKi8KIAlpZiAoYnVmZmVyID09IE5VTEwpIHsKIAkJZXJyID0gaXNpemUgLSBzaXplb2Yoc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hlYWRlcik7Ci0JCWdvdG8gb3V0X2RwdXQ7CisJCWdvdG8gb3V0X3VubG9jazsKIAl9CiAKIAlpZiAoYnVmZmVyX3NpemUgPCBpc2l6ZSAtIHNpemVvZihzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGVhZGVyKSkgewogCQllcnIgPSAtRVJBTkdFOwotCQlnb3RvIG91dF9kcHV0OworCQlnb3RvIG91dF91bmxvY2s7CiAJfQogCiAJd2hpbGUgKGZpbGVfcG9zIDwgaXNpemUpIHsKQEAgLTU4MSwxMCArNjM2LDEwIEBACiAJCWVsc2UKIAkJCWNodW5rID0gaXNpemUgLSBmaWxlX3BvczsKIAotCQlwYWdlID0gcmVpc2VyZnNfZ2V0X3BhZ2UoeGlub2RlLCBmaWxlX3BvcyA+PiBQQUdFX0NBQ0hFX1NISUZUKTsKKwkJcGFnZSA9IHJlaXNlcmZzX2dldF9wYWdlKGRlbnRyeS0+ZF9pbm9kZSwgZmlsZV9wb3MpOwogCQlpZiAoSVNfRVJSKHBhZ2UpKSB7CiAJCQllcnIgPSBQVFJfRVJSKHBhZ2UpOwotCQkJZ290byBvdXRfZHB1dDsKKwkJCWdvdG8gb3V0X3VubG9jazsKIAkJfQogCiAJCWxvY2tfcGFnZShwYWdlKTsKQEAgLTU5OCwxMiArNjUzLDEyIEBACiAJCQlpZiAocnhoLT5oX21hZ2ljICE9IGNwdV90b19sZTMyKFJFSVNFUkZTX1hBVFRSX01BR0lDKSkgewogCQkJCXVubG9ja19wYWdlKHBhZ2UpOwogCQkJCXJlaXNlcmZzX3B1dF9wYWdlKHBhZ2UpOwotCQkJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsCisJCQkJcmVpc2VyZnNfd2FybmluZyhpbm9kZS0+aV9zYiwgImpkbS0yMDAwMSIsCiAJCQkJCQkgIkludmFsaWQgbWFnaWMgZm9yIHhhdHRyICglcykgIgogCQkJCQkJICJhc3NvY2lhdGVkIHdpdGggJWsiLCBuYW1lLAogCQkJCQkJIElOT0RFX1BLRVkoaW5vZGUpKTsKIAkJCQllcnIgPSAtRUlPOwotCQkJCWdvdG8gb3V0X2RwdXQ7CisJCQkJZ290byBvdXRfdW5sb2NrOwogCQkJfQogCQkJaGFzaCA9IGxlMzJfdG9fY3B1KHJ4aC0+aF9oYXNoKTsKIAkJfQpAQCAtNjE4LDI1NiArNjczLDgzIEBACiAKIAlpZiAoeGF0dHJfaGFzaChidWZmZXIsIGlzaXplIC0gc2l6ZW9mKHN0cnVjdCByZWlzZXJmc194YXR0cl9oZWFkZXIpKSAhPQogCSAgICBoYXNoKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsCisJCXJlaXNlcmZzX3dhcm5pbmcoaW5vZGUtPmlfc2IsICJqZG0tMjAwMDIiLAogCQkJCSAiSW52YWxpZCBoYXNoIGZvciB4YXR0ciAoJXMpIGFzc29jaWF0ZWQgIgogCQkJCSAid2l0aCAlayIsIG5hbWUsIElOT0RFX1BLRVkoaW5vZGUpKTsKIAkJZXJyID0gLUVJTzsKIAl9CiAKLSAgICAgIG91dF9kcHV0Ogorb3V0X3VubG9jazoKKwl1cF9yZWFkKCZSRUlTRVJGU19JKGlub2RlKS0+aV94YXR0cl9zZW0pOwogCWRwdXQoZGVudHJ5KTsKIAotICAgICAgb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLXN0YXRpYyBpbnQKLV9fcmVpc2VyZnNfeGF0dHJfZGVsKHN0cnVjdCBkZW50cnkgKnhhZGlyLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbikKLXsKLQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7Ci0Jc3RydWN0IGlub2RlICpkaXIgPSB4YWRpci0+ZF9pbm9kZTsKLQlpbnQgZXJyID0gMDsKLQotCWRlbnRyeSA9IGxvb2t1cF9vbmVfbGVuKG5hbWUsIHhhZGlyLCBuYW1lbGVuKTsKLQlpZiAoSVNfRVJSKGRlbnRyeSkpIHsKLQkJZXJyID0gUFRSX0VSUihkZW50cnkpOwotCQlnb3RvIG91dDsKLQl9IGVsc2UgaWYgKCFkZW50cnktPmRfaW5vZGUpIHsKLQkJZXJyID0gLUVOT0RBVEE7Ci0JCWdvdG8gb3V0X2ZpbGU7Ci0JfQotCi0JLyogU2tpcCBkaXJlY3Rvcmllcy4uICovCi0JaWYgKFNfSVNESVIoZGVudHJ5LT5kX2lub2RlLT5pX21vZGUpKQotCQlnb3RvIG91dF9maWxlOwotCi0JaWYgKCFpc19yZWlzZXJmc19wcml2X29iamVjdChkZW50cnktPmRfaW5vZGUpKSB7Ci0JCXJlaXNlcmZzX3dhcm5pbmcoZGlyLT5pX3NiLCAiT0lEICUwOHggWyUuKnMvJS4qc10gZG9lc24ndCBoYXZlICIKLQkJCQkgInByaXYgZmxhZyBzZXQgW3BhcmVudCBpcyAlc3NldF0uIiwKLQkJCQkgbGUzMl90b19jcHUoSU5PREVfUEtFWShkZW50cnktPmRfaW5vZGUpLT4KLQkJCQkJICAgICBrX29iamVjdGlkKSwgeGFkaXItPmRfbmFtZS5sZW4sCi0JCQkJIHhhZGlyLT5kX25hbWUubmFtZSwgbmFtZWxlbiwgbmFtZSwKLQkJCQkgaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoeGFkaXItPgotCQkJCQkJCSBkX2lub2RlKSA/ICIiIDoKLQkJCQkgIm5vdCAiKTsKLQkJZHB1dChkZW50cnkpOwotCQlyZXR1cm4gLUVJTzsKLQl9Ci0KLQllcnIgPSBkaXItPmlfb3AtPnVubGluayhkaXIsIGRlbnRyeSk7Ci0JaWYgKCFlcnIpCi0JCWRfZGVsZXRlKGRlbnRyeSk7Ci0KLSAgICAgIG91dF9maWxlOgotCWRwdXQoZGVudHJ5KTsKLQotICAgICAgb3V0OgotCXJldHVybiBlcnI7Ci19Ci0KLWludCByZWlzZXJmc194YXR0cl9kZWwoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSkKLXsKLQlzdHJ1Y3QgZGVudHJ5ICpkaXI7Ci0JaW50IGVycjsKLQotCWRpciA9IG9wZW5feGFfZGlyKGlub2RlLCBGTF9SRUFET05MWSk7Ci0JaWYgKElTX0VSUihkaXIpKSB7Ci0JCWVyciA9IFBUUl9FUlIoZGlyKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JZXJyID0gX19yZWlzZXJmc194YXR0cl9kZWwoZGlyLCBuYW1lLCBzdHJsZW4obmFtZSkpOwotCWRwdXQoZGlyKTsKLQotCWlmICghZXJyKSB7Ci0JCWlub2RlLT5pX2N0aW1lID0gQ1VSUkVOVF9USU1FX1NFQzsKLQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci0JfQotCi0gICAgICBvdXQ6Ci0JcmV0dXJuIGVycjsKLX0KLQotLyogVGhlIGZvbGxvd2luZyBhcmUgc2lkZSBlZmZlY3RzIG9mIG90aGVyIG9wZXJhdGlvbnMgdGhhdCBhcmVuJ3QgZXhwbGljaXRseQotICogbW9kaWZ5aW5nIGV4dGVuZGVkIGF0dHJpYnV0ZXMuIFRoaXMgaW5jbHVkZXMgb3BlcmF0aW9ucyBzdWNoIGFzIHBlcm1pc3Npb25zCi0gKiBvciBvd25lcnNoaXAgY2hhbmdlcywgb2JqZWN0IGRlbGV0aW9ucywgZXRjLiAqLwotCi1zdGF0aWMgaW50Ci1yZWlzZXJmc19kZWxldGVfeGF0dHJzX2ZpbGxlcih2b2lkICpidWYsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAotCQkJICAgICAgbG9mZl90IG9mZnNldCwgdTY0IGlubywgdW5zaWduZWQgaW50IGRfdHlwZSkKLXsKLQlzdHJ1Y3QgZGVudHJ5ICp4YWRpciA9IChzdHJ1Y3QgZGVudHJ5ICopYnVmOwotCi0JcmV0dXJuIF9fcmVpc2VyZnNfeGF0dHJfZGVsKHhhZGlyLCBuYW1lLCBuYW1lbGVuKTsKLQotfQotCi0vKiBUaGlzIGlzIGNhbGxlZCB3LyBpbm9kZS0+aV9tdXRleCBkb3duZWQgKi8KLWludCByZWlzZXJmc19kZWxldGVfeGF0dHJzKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0Jc3RydWN0IGRlbnRyeSAqZGlyLCAqcm9vdDsKLQlpbnQgZXJyID0gMDsKLQotCS8qIFNraXAgb3V0LCBhbiB4YXR0ciBoYXMgbm8geGF0dHJzIGFzc29jaWF0ZWQgd2l0aCBpdCAqLwotCWlmIChpc19yZWlzZXJmc19wcml2X29iamVjdChpbm9kZSkgfHwKLQkgICAgZ2V0X2lub2RlX3NkX3ZlcnNpb24oaW5vZGUpID09IFNUQVRfREFUQV9WMSB8fAotCSAgICAhcmVpc2VyZnNfeGF0dHJzKGlub2RlLT5pX3NiKSkgewotCQlyZXR1cm4gMDsKLQl9Ci0JcmVpc2VyZnNfcmVhZF9sb2NrX3hhdHRycyhpbm9kZS0+aV9zYik7Ci0JZGlyID0gb3Blbl94YV9kaXIoaW5vZGUsIEZMX1JFQURPTkxZKTsKLQlyZWlzZXJmc19yZWFkX3VubG9ja194YXR0cnMoaW5vZGUtPmlfc2IpOwotCWlmIChJU19FUlIoZGlyKSkgewotCQllcnIgPSBQVFJfRVJSKGRpcik7Ci0JCWdvdG8gb3V0OwotCX0gZWxzZSBpZiAoIWRpci0+ZF9pbm9kZSkgewotCQlkcHV0KGRpcik7Ci0JCXJldHVybiAwOwotCX0KLQotCWxvY2tfa2VybmVsKCk7Ci0JZXJyID0geGF0dHJfcmVhZGRpcihkaXItPmRfaW5vZGUsIHJlaXNlcmZzX2RlbGV0ZV94YXR0cnNfZmlsbGVyLCBkaXIpOwotCWlmIChlcnIpIHsKLQkJdW5sb2NrX2tlcm5lbCgpOwotCQlnb3RvIG91dF9kaXI7Ci0JfQotCi0JLyogTGVmdG92ZXJzIGJlc2lkZXMgLiBhbmQgLi4gLS0gdGhhdCdzIG5vdCBnb29kLiAqLwotCWlmIChkaXItPmRfaW5vZGUtPmlfbmxpbmsgPD0gMikgewotCQlyb290ID0gZ2V0X3hhX3Jvb3QoaW5vZGUtPmlfc2IsIFhBVFRSX1JFUExBQ0UpOwotCQlyZWlzZXJmc193cml0ZV9sb2NrX3hhdHRycyhpbm9kZS0+aV9zYik7Ci0JCWVyciA9IHZmc19ybWRpcihyb290LT5kX2lub2RlLCBkaXIpOwotCQlyZWlzZXJmc193cml0ZV91bmxvY2tfeGF0dHJzKGlub2RlLT5pX3NiKTsKLQkJZHB1dChyb290KTsKLQl9IGVsc2UgewotCQlyZWlzZXJmc193YXJuaW5nKGlub2RlLT5pX3NiLAotCQkJCSAiQ291bGRuJ3QgcmVtb3ZlIGFsbCBlbnRyaWVzIGluIGRpcmVjdG9yeSIpOwotCX0KLQl1bmxvY2tfa2VybmVsKCk7Ci0KLSAgICAgIG91dF9kaXI6Ci0JZHB1dChkaXIpOwotCi0gICAgICBvdXQ6Ci0JaWYgKCFlcnIpCi0JCVJFSVNFUkZTX0koaW5vZGUpLT5pX2ZsYWdzID0KLQkJICAgIFJFSVNFUkZTX0koaW5vZGUpLT5pX2ZsYWdzICYgfmlfaGFzX3hhdHRyX2RpcjsKLQlyZXR1cm4gZXJyOwotfQotCi1zdHJ1Y3QgcmVpc2VyZnNfY2hvd25fYnVmIHsKLQlzdHJ1Y3QgaW5vZGUgKmlub2RlOwotCXN0cnVjdCBkZW50cnkgKnhhZGlyOwotCXN0cnVjdCBpYXR0ciAqYXR0cnM7Ci19OwotCi0vKiBYWFg6IElmIHRoZXJlIGlzIGEgYmV0dGVyIHdheSB0byBkbyB0aGlzLCBJJ2QgbG92ZSB0byBoZWFyIGFib3V0IGl0ICovCi1zdGF0aWMgaW50Ci1yZWlzZXJmc19jaG93bl94YXR0cnNfZmlsbGVyKHZvaWQgKmJ1ZiwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCi0JCQkgICAgIGxvZmZfdCBvZmZzZXQsIHU2NCBpbm8sIHVuc2lnbmVkIGludCBkX3R5cGUpCi17Ci0Jc3RydWN0IHJlaXNlcmZzX2Nob3duX2J1ZiAqY2hvd25fYnVmID0gKHN0cnVjdCByZWlzZXJmc19jaG93bl9idWYgKilidWY7Ci0Jc3RydWN0IGRlbnRyeSAqeGFmaWxlLCAqeGFkaXIgPSBjaG93bl9idWYtPnhhZGlyOwotCXN0cnVjdCBpYXR0ciAqYXR0cnMgPSBjaG93bl9idWYtPmF0dHJzOwotCWludCBlcnIgPSAwOwotCi0JeGFmaWxlID0gbG9va3VwX29uZV9sZW4obmFtZSwgeGFkaXIsIG5hbWVsZW4pOwotCWlmIChJU19FUlIoeGFmaWxlKSkKLQkJcmV0dXJuIFBUUl9FUlIoeGFmaWxlKTsKLQllbHNlIGlmICgheGFmaWxlLT5kX2lub2RlKSB7Ci0JCWRwdXQoeGFmaWxlKTsKLQkJcmV0dXJuIC1FTk9EQVRBOwotCX0KLQotCWlmICghU19JU0RJUih4YWZpbGUtPmRfaW5vZGUtPmlfbW9kZSkpCi0JCWVyciA9IG5vdGlmeV9jaGFuZ2UoeGFmaWxlLCBhdHRycyk7Ci0JZHB1dCh4YWZpbGUpOwotCi0JcmV0dXJuIGVycjsKLX0KLQotaW50IHJlaXNlcmZzX2Nob3duX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgaWF0dHIgKmF0dHJzKQotewotCXN0cnVjdCBkZW50cnkgKmRpcjsKLQlpbnQgZXJyID0gMDsKLQlzdHJ1Y3QgcmVpc2VyZnNfY2hvd25fYnVmIGJ1ZjsKLQl1bnNpZ25lZCBpbnQgaWFfdmFsaWQgPSBhdHRycy0+aWFfdmFsaWQ7Ci0KLQkvKiBTa2lwIG91dCwgYW4geGF0dHIgaGFzIG5vIHhhdHRycyBhc3NvY2lhdGVkIHdpdGggaXQgKi8KLQlpZiAoaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoaW5vZGUpIHx8Ci0JICAgIGdldF9pbm9kZV9zZF92ZXJzaW9uKGlub2RlKSA9PSBTVEFUX0RBVEFfVjEgfHwKLQkgICAgIXJlaXNlcmZzX3hhdHRycyhpbm9kZS0+aV9zYikpIHsKLQkJcmV0dXJuIDA7Ci0JfQotCXJlaXNlcmZzX3JlYWRfbG9ja194YXR0cnMoaW5vZGUtPmlfc2IpOwotCWRpciA9IG9wZW5feGFfZGlyKGlub2RlLCBGTF9SRUFET05MWSk7Ci0JcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJzKGlub2RlLT5pX3NiKTsKLQlpZiAoSVNfRVJSKGRpcikpIHsKLQkJaWYgKFBUUl9FUlIoZGlyKSAhPSAtRU5PREFUQSkKLQkJCWVyciA9IFBUUl9FUlIoZGlyKTsKLQkJZ290byBvdXQ7Ci0JfSBlbHNlIGlmICghZGlyLT5kX2lub2RlKSB7Ci0JCWRwdXQoZGlyKTsKLQkJZ290byBvdXQ7Ci0JfQotCi0JbG9ja19rZXJuZWwoKTsKLQotCWF0dHJzLT5pYV92YWxpZCAmPSAoQVRUUl9VSUQgfCBBVFRSX0dJRCB8IEFUVFJfQ1RJTUUpOwotCWJ1Zi54YWRpciA9IGRpcjsKLQlidWYuYXR0cnMgPSBhdHRyczsKLQlidWYuaW5vZGUgPSBpbm9kZTsKLQotCWVyciA9IHhhdHRyX3JlYWRkaXIoZGlyLT5kX2lub2RlLCByZWlzZXJmc19jaG93bl94YXR0cnNfZmlsbGVyLCAmYnVmKTsKLQlpZiAoZXJyKSB7Ci0JCXVubG9ja19rZXJuZWwoKTsKLQkJZ290byBvdXRfZGlyOwotCX0KLQotCWVyciA9IG5vdGlmeV9jaGFuZ2UoZGlyLCBhdHRycyk7Ci0JdW5sb2NrX2tlcm5lbCgpOwotCi0gICAgICBvdXRfZGlyOgotCWRwdXQoZGlyKTsKLQotICAgICAgb3V0OgotCWF0dHJzLT5pYV92YWxpZCA9IGlhX3ZhbGlkOworb3V0OgogCXJldHVybiBlcnI7CiB9CiAKIC8qIEFjdHVhbCBvcGVyYXRpb25zIHRoYXQgYXJlIGV4cG9ydGVkIHRvIFZGUy1sYW5kICovCitzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqcmVpc2VyZnNfeGF0dHJfaGFuZGxlcnNbXSA9IHsKKwkmcmVpc2VyZnNfeGF0dHJfdXNlcl9oYW5kbGVyLAorCSZyZWlzZXJmc194YXR0cl90cnVzdGVkX2hhbmRsZXIsCisjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZCisJJnJlaXNlcmZzX3hhdHRyX3NlY3VyaXR5X2hhbmRsZXIsCisjZW5kaWYKKyNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMCisJJnJlaXNlcmZzX3Bvc2l4X2FjbF9hY2Nlc3NfaGFuZGxlciwKKwkmcmVpc2VyZnNfcG9zaXhfYWNsX2RlZmF1bHRfaGFuZGxlciwKKyNlbmRpZgorCU5VTEwKK307CisKKy8qCisgKiBJbiBvcmRlciB0byBpbXBsZW1lbnQgZGlmZmVyZW50IHNldHMgb2YgeGF0dHIgb3BlcmF0aW9ucyBmb3IgZWFjaCB4YXR0cgorICogcHJlZml4IHdpdGggdGhlIGdlbmVyaWMgeGF0dHIgQVBJLCBhIGZpbGVzeXN0ZW0gc2hvdWxkIGNyZWF0ZSBhCisgKiBudWxsLXRlcm1pbmF0ZWQgYXJyYXkgb2Ygc3RydWN0IHhhdHRyX2hhbmRsZXIgKG9uZSBmb3IgZWFjaCBwcmVmaXgpIGFuZAorICogaGFuZyBhIHBvaW50ZXIgdG8gaXQgb2ZmIG9mIHRoZSBzX3hhdHRyIGZpZWxkIG9mIHRoZSBzdXBlcmJsb2NrLgorICoKKyAqIFRoZSBnZW5lcmljX2Zvb3hhdHRyKCkgZnVuY3Rpb25zIHdpbGwgdXNlIHRoaXMgbGlzdCB0byBkaXNwYXRjaCB4YXR0cgorICogb3BlcmF0aW9ucyB0byB0aGUgY29ycmVjdCB4YXR0cl9oYW5kbGVyLgorICovCisjZGVmaW5lIGZvcl9lYWNoX3hhdHRyX2hhbmRsZXIoaGFuZGxlcnMsIGhhbmRsZXIpCQlcCisJCWZvciAoKGhhbmRsZXIpID0gKihoYW5kbGVycykrKzsJCQlcCisJCQkoaGFuZGxlcikgIT0gTlVMTDsJCQlcCisJCQkoaGFuZGxlcikgPSAqKGhhbmRsZXJzKSsrKQorCisvKiBUaGlzIGlzIHRoZSBpbXBsZW1lbnRhdGlvbiBmb3IgdGhlIHhhdHRyIHBsdWdpbiBpbmZyYXN0cnVjdHVyZSAqLworc3RhdGljIGlubGluZSBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqCitmaW5kX3hhdHRyX2hhbmRsZXJfcHJlZml4KHN0cnVjdCB4YXR0cl9oYW5kbGVyICoqaGFuZGxlcnMsCisJCQkgICBjb25zdCBjaGFyICpuYW1lKQoreworCXN0cnVjdCB4YXR0cl9oYW5kbGVyICp4YWg7CisKKwlpZiAoIWhhbmRsZXJzKQorCQlyZXR1cm4gTlVMTDsKKworCWZvcl9lYWNoX3hhdHRyX2hhbmRsZXIoaGFuZGxlcnMsIHhhaCkgeworCQlpZiAoc3RybmNtcCh4YWgtPnByZWZpeCwgbmFtZSwgc3RybGVuKHhhaC0+cHJlZml4KSkgPT0gMCkKKwkJCWJyZWFrOworCX0KKworCXJldHVybiB4YWg7Cit9CisKIAogLyoKICAqIElub2RlIG9wZXJhdGlvbiBnZXR4YXR0cigpCi0gKiBQcmVsaW1pbmFyeSBsb2NraW5nOiB3ZSBkb3duIGRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleAogICovCiBzc2l6ZV90CiByZWlzZXJmc19nZXR4YXR0cihzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLCB2b2lkICpidWZmZXIsCiAJCSAgc2l6ZV90IHNpemUpCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIgKnhhaCA9IGZpbmRfeGF0dHJfaGFuZGxlcl9wcmVmaXgobmFtZSk7Ci0JaW50IGVycjsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyOwogCi0JaWYgKCF4YWggfHwgIXJlaXNlcmZzX3hhdHRycyhkZW50cnktPmRfc2IpIHx8Ci0JICAgIGdldF9pbm9kZV9zZF92ZXJzaW9uKGRlbnRyeS0+ZF9pbm9kZSkgPT0gU1RBVF9EQVRBX1YxKQorCWhhbmRsZXIgPSBmaW5kX3hhdHRyX2hhbmRsZXJfcHJlZml4KGlub2RlLT5pX3NiLT5zX3hhdHRyLCBuYW1lKTsKKworCWlmICghaGFuZGxlciB8fCBnZXRfaW5vZGVfc2RfdmVyc2lvbihpbm9kZSkgPT0gU1RBVF9EQVRBX1YxKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlyZWlzZXJmc19yZWFkX2xvY2tfeGF0dHJfaShkZW50cnktPmRfaW5vZGUpOwotCXJlaXNlcmZzX3JlYWRfbG9ja194YXR0cnMoZGVudHJ5LT5kX3NiKTsKLQllcnIgPSB4YWgtPmdldChkZW50cnktPmRfaW5vZGUsIG5hbWUsIGJ1ZmZlciwgc2l6ZSk7Ci0JcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJzKGRlbnRyeS0+ZF9zYik7Ci0JcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJfaShkZW50cnktPmRfaW5vZGUpOwotCXJldHVybiBlcnI7CisJcmV0dXJuIGhhbmRsZXItPmdldChpbm9kZSwgbmFtZSwgYnVmZmVyLCBzaXplKTsKIH0KIAogLyoKQEAgLTg3OSwyNyArNzYxLDE1IEBACiByZWlzZXJmc19zZXR4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKnZhbHVlLAogCQkgIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIgKnhhaCA9IGZpbmRfeGF0dHJfaGFuZGxlcl9wcmVmaXgobmFtZSk7Ci0JaW50IGVycjsKLQlpbnQgbG9jazsKKwlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZGVudHJ5LT5kX2lub2RlOworCXN0cnVjdCB4YXR0cl9oYW5kbGVyICpoYW5kbGVyOwogCi0JaWYgKCF4YWggfHwgIXJlaXNlcmZzX3hhdHRycyhkZW50cnktPmRfc2IpIHx8Ci0JICAgIGdldF9pbm9kZV9zZF92ZXJzaW9uKGRlbnRyeS0+ZF9pbm9kZSkgPT0gU1RBVF9EQVRBX1YxKQorCWhhbmRsZXIgPSBmaW5kX3hhdHRyX2hhbmRsZXJfcHJlZml4KGlub2RlLT5pX3NiLT5zX3hhdHRyLCBuYW1lKTsKKworCWlmICghaGFuZGxlciB8fCBnZXRfaW5vZGVfc2RfdmVyc2lvbihpbm9kZSkgPT0gU1RBVF9EQVRBX1YxKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlyZWlzZXJmc193cml0ZV9sb2NrX3hhdHRyX2koZGVudHJ5LT5kX2lub2RlKTsKLQlsb2NrID0gIWhhc194YXR0cl9kaXIoZGVudHJ5LT5kX2lub2RlKTsKLQlpZiAobG9jaykKLQkJcmVpc2VyZnNfd3JpdGVfbG9ja194YXR0cnMoZGVudHJ5LT5kX3NiKTsKLQllbHNlCi0JCXJlaXNlcmZzX3JlYWRfbG9ja194YXR0cnMoZGVudHJ5LT5kX3NiKTsKLQllcnIgPSB4YWgtPnNldChkZW50cnktPmRfaW5vZGUsIG5hbWUsIHZhbHVlLCBzaXplLCBmbGFncyk7Ci0JaWYgKGxvY2spCi0JCXJlaXNlcmZzX3dyaXRlX3VubG9ja194YXR0cnMoZGVudHJ5LT5kX3NiKTsKLQllbHNlCi0JCXJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRycyhkZW50cnktPmRfc2IpOwotCXJlaXNlcmZzX3dyaXRlX3VubG9ja194YXR0cl9pKGRlbnRyeS0+ZF9pbm9kZSk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gaGFuZGxlci0+c2V0KGlub2RlLCBuYW1lLCB2YWx1ZSwgc2l6ZSwgZmxhZ3MpOwogfQogCiAvKgpAQCAtOTA5LDg2ICs3NzksNjYgQEAKICAqLwogaW50IHJlaXNlcmZzX3JlbW92ZXhhdHRyKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgY29uc3QgY2hhciAqbmFtZSkKIHsKLQlpbnQgZXJyOwotCXN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyICp4YWggPSBmaW5kX3hhdHRyX2hhbmRsZXJfcHJlZml4KG5hbWUpOworCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfaW5vZGU7CisJc3RydWN0IHhhdHRyX2hhbmRsZXIgKmhhbmRsZXI7CisJaGFuZGxlciA9IGZpbmRfeGF0dHJfaGFuZGxlcl9wcmVmaXgoaW5vZGUtPmlfc2ItPnNfeGF0dHIsIG5hbWUpOwogCi0JaWYgKCF4YWggfHwgIXJlaXNlcmZzX3hhdHRycyhkZW50cnktPmRfc2IpIHx8Ci0JICAgIGdldF9pbm9kZV9zZF92ZXJzaW9uKGRlbnRyeS0+ZF9pbm9kZSkgPT0gU1RBVF9EQVRBX1YxKQorCWlmICghaGFuZGxlciB8fCBnZXRfaW5vZGVfc2RfdmVyc2lvbihpbm9kZSkgPT0gU1RBVF9EQVRBX1YxKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAKLQlyZWlzZXJmc193cml0ZV9sb2NrX3hhdHRyX2koZGVudHJ5LT5kX2lub2RlKTsKLQlyZWlzZXJmc19yZWFkX2xvY2tfeGF0dHJzKGRlbnRyeS0+ZF9zYik7Ci0KLQkvKiBEZWxldGlvbiBwcmUtb3BlcmF0aW9uICovCi0JaWYgKHhhaC0+ZGVsKSB7Ci0JCWVyciA9IHhhaC0+ZGVsKGRlbnRyeS0+ZF9pbm9kZSwgbmFtZSk7Ci0JCWlmIChlcnIpCi0JCQlnb3RvIG91dDsKLQl9Ci0KLQllcnIgPSByZWlzZXJmc194YXR0cl9kZWwoZGVudHJ5LT5kX2lub2RlLCBuYW1lKTsKLQotCWRlbnRyeS0+ZF9pbm9kZS0+aV9jdGltZSA9IENVUlJFTlRfVElNRV9TRUM7Ci0JbWFya19pbm9kZV9kaXJ0eShkZW50cnktPmRfaW5vZGUpOwotCi0gICAgICBvdXQ6Ci0JcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJzKGRlbnRyeS0+ZF9zYik7Ci0JcmVpc2VyZnNfd3JpdGVfdW5sb2NrX3hhdHRyX2koZGVudHJ5LT5kX2lub2RlKTsKLQlyZXR1cm4gZXJyOworCXJldHVybiBoYW5kbGVyLT5zZXQoaW5vZGUsIG5hbWUsIE5VTEwsIDAsIFhBVFRSX1JFUExBQ0UpOwogfQogCi0vKiBUaGlzIGlzIHdoYXQgZmlsbGRpciB3aWxsIHVzZToKLSAqIHJfcG9zIHdpbGwgYWx3YXlzIGNvbnRhaW4gdGhlIGFtb3VudCBvZiBzcGFjZSByZXF1aXJlZCBmb3IgdGhlIGVudGlyZQotICogbGlzdC4gSWYgcl9wb3MgYmVjb21lcyBsYXJnZXIgdGhhbiByX3NpemUsIHdlIG5lZWQgbW9yZSBzcGFjZSBhbmQgd2UKLSAqIHJldHVybiBhbiBlcnJvciBpbmRpY2F0aW5nIHRoaXMuIElmIHJfcG9zIGlzIGxlc3MgdGhhbiByX3NpemUsIHRoZW4gd2UndmUKLSAqIGZpbGxlZCB0aGUgYnVmZmVyIHN1Y2Nlc3NmdWxseSBhbmQgd2UgcmV0dXJuIHN1Y2Nlc3MgKi8KLXN0cnVjdCByZWlzZXJmc19saXN0eGF0dHJfYnVmIHsKLQlpbnQgcl9wb3M7Ci0JaW50IHJfc2l6ZTsKLQljaGFyICpyX2J1ZjsKLQlzdHJ1Y3QgaW5vZGUgKnJfaW5vZGU7CitzdHJ1Y3QgbGlzdHhhdHRyX2J1ZiB7CisJc2l6ZV90IHNpemU7CisJc2l6ZV90IHBvczsKKwljaGFyICpidWY7CisJc3RydWN0IGlub2RlICppbm9kZTsKIH07CiAKLXN0YXRpYyBpbnQKLXJlaXNlcmZzX2xpc3R4YXR0cl9maWxsZXIodm9pZCAqYnVmLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKLQkJCSAgbG9mZl90IG9mZnNldCwgdTY0IGlubywgdW5zaWduZWQgaW50IGRfdHlwZSkKK3N0YXRpYyBpbnQgbGlzdHhhdHRyX2ZpbGxlcih2b2lkICpidWYsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAorCQkJICAgIGxvZmZfdCBvZmZzZXQsIHU2NCBpbm8sIHVuc2lnbmVkIGludCBkX3R5cGUpCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX2xpc3R4YXR0cl9idWYgKmIgPSAoc3RydWN0IHJlaXNlcmZzX2xpc3R4YXR0cl9idWYgKilidWY7Ci0JaW50IGxlbiA9IDA7Ci0JaWYgKG5hbWVbMF0gIT0gJy4nCi0JICAgIHx8IChuYW1lbGVuICE9IDEgJiYgKG5hbWVbMV0gIT0gJy4nIHx8IG5hbWVsZW4gIT0gMikpKSB7Ci0JCXN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyICp4YWggPQotCQkgICAgZmluZF94YXR0cl9oYW5kbGVyX3ByZWZpeChuYW1lKTsKLQkJaWYgKCF4YWgpCi0JCQlyZXR1cm4gMDsJLyogVW5zdXBwb3J0ZWQgeGF0dHIgbmFtZSwgc2tpcCBpdCAqLwotCi0JCS8qIFdlIGNhbGwgLT5saXN0KCkgdHdpY2UgYmVjYXVzZSB0aGUgb3BlcmF0aW9uIGlzbid0IHJlcXVpcmVkIHRvIGp1c3QKLQkJICogcmV0dXJuIHRoZSBuYW1lIGJhY2sgLSB3ZSB3YW50IHRvIG1ha2Ugc3VyZSB3ZSBoYXZlIGVub3VnaCBzcGFjZSAqLwotCQlsZW4gKz0geGFoLT5saXN0KGItPnJfaW5vZGUsIG5hbWUsIG5hbWVsZW4sIE5VTEwpOwotCi0JCWlmIChsZW4pIHsKLQkJCWlmIChiLT5yX3BvcyArIGxlbiArIDEgPD0gYi0+cl9zaXplKSB7Ci0JCQkJY2hhciAqcCA9IGItPnJfYnVmICsgYi0+cl9wb3M7Ci0JCQkJcCArPSB4YWgtPmxpc3QoYi0+cl9pbm9kZSwgbmFtZSwgbmFtZWxlbiwgcCk7Ci0JCQkJKnArKyA9ICdcMCc7Ci0JCQl9Ci0JCQliLT5yX3BvcyArPSBsZW4gKyAxOworCXN0cnVjdCBsaXN0eGF0dHJfYnVmICpiID0gKHN0cnVjdCBsaXN0eGF0dHJfYnVmICopYnVmOworCXNpemVfdCBzaXplOworCWlmIChuYW1lWzBdICE9ICcuJyB8fAorCSAgICAobmFtZWxlbiAhPSAxICYmIChuYW1lWzFdICE9ICcuJyB8fCBuYW1lbGVuICE9IDIpKSkgeworCQlzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqaGFuZGxlcjsKKwkJaGFuZGxlciA9IGZpbmRfeGF0dHJfaGFuZGxlcl9wcmVmaXgoYi0+aW5vZGUtPmlfc2ItPnNfeGF0dHIsCisJCQkJCQkgICAgbmFtZSk7CisJCWlmICghaGFuZGxlcikJLyogVW5zdXBwb3J0ZWQgeGF0dHIgbmFtZSAqLworCQkJcmV0dXJuIDA7CisJCWlmIChiLT5idWYpIHsKKwkJCXNpemUgPSBoYW5kbGVyLT5saXN0KGItPmlub2RlLCBiLT5idWYgKyBiLT5wb3MsCisJCQkJCSBiLT5zaXplLCBuYW1lLCBuYW1lbGVuKTsKKwkJCWlmIChzaXplID4gYi0+c2l6ZSkKKwkJCQlyZXR1cm4gLUVSQU5HRTsKKwkJfSBlbHNlIHsKKwkJCXNpemUgPSBoYW5kbGVyLT5saXN0KGItPmlub2RlLCBOVUxMLCAwLCBuYW1lLCBuYW1lbGVuKTsKIAkJfQotCX0KIAorCQliLT5wb3MgKz0gc2l6ZTsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKIC8qCiAgKiBJbm9kZSBvcGVyYXRpb24gbGlzdHhhdHRyKCkKICAqCi0gKiBQcmVsaW1pbmFyeSBsb2NraW5nOiB3ZSBkb3duIGRlbnRyeS0+ZF9pbm9kZS0+aV9tdXRleAorICogV2UgdG90YWxseSBpZ25vcmUgdGhlIGdlbmVyaWMgbGlzdHhhdHRyIGhlcmUgYmVjYXVzZSBpdCB3b3VsZCBiZSBzdHVwaWQKKyAqIG5vdCB0by4gU2luY2UgdGhlIHhhdHRycyBhcmUgb3JnYW5pemVkIGluIGEgZGlyZWN0b3J5LCB3ZSBjYW4ganVzdAorICogcmVhZGRpciB0byBmaW5kIHRoZW0uCiAgKi8KIHNzaXplX3QgcmVpc2VyZnNfbGlzdHhhdHRyKHN0cnVjdCBkZW50cnkgKiBkZW50cnksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IHNpemUpCiB7CiAJc3RydWN0IGRlbnRyeSAqZGlyOwogCWludCBlcnIgPSAwOwotCXN0cnVjdCByZWlzZXJmc19saXN0eGF0dHJfYnVmIGJ1ZjsKKwlsb2ZmX3QgcG9zID0gMDsKKwlzdHJ1Y3QgbGlzdHhhdHRyX2J1ZiBidWYgPSB7CisJCS5pbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZSwKKwkJLmJ1ZiA9IGJ1ZmZlciwKKwkJLnNpemUgPSBidWZmZXIgPyBzaXplIDogMCwKKwl9OwogCiAJaWYgKCFkZW50cnktPmRfaW5vZGUpCiAJCXJldHVybiAtRUlOVkFMOwpAQCAtOTk3LDEyOSArODQ3LDEwMyBAQAogCSAgICBnZXRfaW5vZGVfc2RfdmVyc2lvbihkZW50cnktPmRfaW5vZGUpID09IFNUQVRfREFUQV9WMSkKIAkJcmV0dXJuIC1FT1BOT1RTVVBQOwogCi0JcmVpc2VyZnNfcmVhZF9sb2NrX3hhdHRyX2koZGVudHJ5LT5kX2lub2RlKTsKLQlyZWlzZXJmc19yZWFkX2xvY2tfeGF0dHJzKGRlbnRyeS0+ZF9zYik7Ci0JZGlyID0gb3Blbl94YV9kaXIoZGVudHJ5LT5kX2lub2RlLCBGTF9SRUFET05MWSk7Ci0JcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJzKGRlbnRyeS0+ZF9zYik7CisJZGlyID0gb3Blbl94YV9kaXIoZGVudHJ5LT5kX2lub2RlLCBYQVRUUl9SRVBMQUNFKTsKIAlpZiAoSVNfRVJSKGRpcikpIHsKIAkJZXJyID0gUFRSX0VSUihkaXIpOwogCQlpZiAoZXJyID09IC1FTk9EQVRBKQotCQkJZXJyID0gMDsJLyogTm90IGFuIGVycm9yIGlmIHRoZXJlIGFyZW4ndCBhbnkgeGF0dHJzICovCisJCQllcnIgPSAwOyAgLyogTm90IGFuIGVycm9yIGlmIHRoZXJlIGFyZW4ndCBhbnkgeGF0dHJzICovCiAJCWdvdG8gb3V0OwogCX0KIAotCWJ1Zi5yX2J1ZiA9IGJ1ZmZlcjsKLQlidWYucl9zaXplID0gYnVmZmVyID8gc2l6ZSA6IDA7Ci0JYnVmLnJfcG9zID0gMDsKLQlidWYucl9pbm9kZSA9IGRlbnRyeS0+ZF9pbm9kZTsKKwltdXRleF9sb2NrX25lc3RlZCgmZGlyLT5kX2lub2RlLT5pX211dGV4LCBJX01VVEVYX1hBVFRSKTsKKwllcnIgPSByZWlzZXJmc19yZWFkZGlyX2RlbnRyeShkaXIsICZidWYsIGxpc3R4YXR0cl9maWxsZXIsICZwb3MpOworCW11dGV4X3VubG9jaygmZGlyLT5kX2lub2RlLT5pX211dGV4KTsKIAotCVJFSVNFUkZTX0koZGVudHJ5LT5kX2lub2RlKS0+aV9mbGFncyB8PSBpX2hhc194YXR0cl9kaXI7CisJaWYgKCFlcnIpCisJCWVyciA9IGJ1Zi5wb3M7CiAKLQllcnIgPSB4YXR0cl9yZWFkZGlyKGRpci0+ZF9pbm9kZSwgcmVpc2VyZnNfbGlzdHhhdHRyX2ZpbGxlciwgJmJ1Zik7Ci0JaWYgKGVycikKLQkJZ290byBvdXRfZGlyOwotCi0JaWYgKGJ1Zi5yX3BvcyA+IGJ1Zi5yX3NpemUgJiYgYnVmZmVyICE9IE5VTEwpCi0JCWVyciA9IC1FUkFOR0U7Ci0JZWxzZQotCQllcnIgPSBidWYucl9wb3M7Ci0KLSAgICAgIG91dF9kaXI6CiAJZHB1dChkaXIpOwotCi0gICAgICBvdXQ6Ci0JcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJfaShkZW50cnktPmRfaW5vZGUpOworb3V0OgogCXJldHVybiBlcnI7CiB9CiAKLS8qIFRoaXMgaXMgdGhlIGltcGxlbWVudGF0aW9uIGZvciB0aGUgeGF0dHIgcGx1Z2luIGluZnJhc3RydWN0dXJlICovCi1zdGF0aWMgTElTVF9IRUFEKHhhdHRyX2hhbmRsZXJzKTsKLXN0YXRpYyBERUZJTkVfUldMT0NLKGhhbmRsZXJfbG9jayk7Ci0KLXN0YXRpYyBzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciAqZmluZF94YXR0cl9oYW5kbGVyX3ByZWZpeChjb25zdCBjaGFyCi0JCQkJCQkJCSpwcmVmaXgpCitzdGF0aWMgaW50IHJlaXNlcmZzX2NoZWNrX2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbWFzaykKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciAqeGFoID0gTlVMTDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwOworCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKKwlpbnQgZXJyb3IgPSAtRUFHQUlOOyAvKiBkbyByZWd1bGFyIHVuaXggcGVybWlzc2lvbiBjaGVja3MgYnkgZGVmYXVsdCAqLwogCi0JcmVhZF9sb2NrKCZoYW5kbGVyX2xvY2spOwotCWxpc3RfZm9yX2VhY2gocCwgJnhhdHRyX2hhbmRsZXJzKSB7Ci0JCXhhaCA9IGxpc3RfZW50cnkocCwgc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIsIGhhbmRsZXJzKTsKLQkJaWYgKHN0cm5jbXAoeGFoLT5wcmVmaXgsIHByZWZpeCwgc3RybGVuKHhhaC0+cHJlZml4KSkgPT0gMCkKLQkJCWJyZWFrOwotCQl4YWggPSBOVUxMOworCWFjbCA9IHJlaXNlcmZzX2dldF9hY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUyk7CisKKwlpZiAoYWNsKSB7CisJCWlmICghSVNfRVJSKGFjbCkpIHsKKwkJCWVycm9yID0gcG9zaXhfYWNsX3Blcm1pc3Npb24oaW5vZGUsIGFjbCwgbWFzayk7CisJCQlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOworCQl9IGVsc2UgaWYgKFBUUl9FUlIoYWNsKSAhPSAtRU5PREFUQSkKKwkJCWVycm9yID0gUFRSX0VSUihhY2wpOwogCX0KIAotCXJlYWRfdW5sb2NrKCZoYW5kbGVyX2xvY2spOwotCXJldHVybiB4YWg7CisJcmV0dXJuIGVycm9yOwogfQogCi1zdGF0aWMgdm9pZCBfX3VucmVnaXN0ZXJfaGFuZGxlcnModm9pZCkKK2ludCByZWlzZXJmc19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQogewotCXN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyICp4YWg7Ci0Jc3RydWN0IGxpc3RfaGVhZCAqcCwgKnRtcDsKLQotCWxpc3RfZm9yX2VhY2hfc2FmZShwLCB0bXAsICZ4YXR0cl9oYW5kbGVycykgewotCQl4YWggPSBsaXN0X2VudHJ5KHAsIHN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyLCBoYW5kbGVycyk7Ci0JCWlmICh4YWgtPmV4aXQpCi0JCQl4YWgtPmV4aXQoKTsKLQotCQlsaXN0X2RlbF9pbml0KHApOwotCX0KLQlJTklUX0xJU1RfSEVBRCgmeGF0dHJfaGFuZGxlcnMpOwotfQotCi1pbnQgX19pbml0IHJlaXNlcmZzX3hhdHRyX3JlZ2lzdGVyX2hhbmRsZXJzKHZvaWQpCi17Ci0JaW50IGVyciA9IDA7Ci0Jc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIgKnhhaDsKLQlzdHJ1Y3QgbGlzdF9oZWFkICpwOwotCi0Jd3JpdGVfbG9jaygmaGFuZGxlcl9sb2NrKTsKLQotCS8qIElmIHdlJ3JlIGFscmVhZHkgaW5pdGlhbGl6ZWQsIG5vdGhpbmcgdG8gZG8gKi8KLQlpZiAoIWxpc3RfZW1wdHkoJnhhdHRyX2hhbmRsZXJzKSkgewotCQl3cml0ZV91bmxvY2soJmhhbmRsZXJfbG9jayk7CisJLyoKKwkgKiBXZSBkb24ndCBkbyBwZXJtaXNzaW9uIGNoZWNrcyBvbiB0aGUgaW50ZXJuYWwgb2JqZWN0cy4KKwkgKiBQZXJtaXNzaW9ucyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgIm93bmluZyIgb2JqZWN0LgorCSAqLworCWlmIChJU19QUklWQVRFKGlub2RlKSkKIAkJcmV0dXJuIDA7CisJLyoKKwkgKiBTdGF0IGRhdGEgdjEgZG9lc24ndCBzdXBwb3J0IEFDTHMuCisJICovCisJaWYgKGdldF9pbm9kZV9zZF92ZXJzaW9uKGlub2RlKSA9PSBTVEFUX0RBVEFfVjEpCisJCXJldHVybiBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIE5VTEwpOworCWVsc2UKKwkJcmV0dXJuIGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgcmVpc2VyZnNfY2hlY2tfYWNsKTsKK30KKworc3RhdGljIGludCBjcmVhdGVfcHJpdnJvb3Qoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQoreworCWludCBlcnI7CisJc3RydWN0IGlub2RlICppbm9kZSA9IGRlbnRyeS0+ZF9wYXJlbnQtPmRfaW5vZGU7CisJbXV0ZXhfbG9ja19uZXN0ZWQoJmlub2RlLT5pX211dGV4LCBJX01VVEVYX1hBVFRSKTsKKwllcnIgPSB4YXR0cl9ta2Rpcihpbm9kZSwgZGVudHJ5LCAwNzAwKTsKKwltdXRleF91bmxvY2soJmlub2RlLT5pX211dGV4KTsKKwlpZiAoZXJyKSB7CisJCWRwdXQoZGVudHJ5KTsKKwkJZGVudHJ5ID0gTlVMTDsKIAl9CiAKLQkvKiBBZGQgdGhlIGhhbmRsZXJzICovCi0JbGlzdF9hZGRfdGFpbCgmdXNlcl9oYW5kbGVyLmhhbmRsZXJzLCAmeGF0dHJfaGFuZGxlcnMpOwotCWxpc3RfYWRkX3RhaWwoJnRydXN0ZWRfaGFuZGxlci5oYW5kbGVycywgJnhhdHRyX2hhbmRsZXJzKTsKLSNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFkKLQlsaXN0X2FkZF90YWlsKCZzZWN1cml0eV9oYW5kbGVyLmhhbmRsZXJzLCAmeGF0dHJfaGFuZGxlcnMpOwotI2VuZGlmCi0jaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1BPU0lYX0FDTAotCWxpc3RfYWRkX3RhaWwoJnBvc2l4X2FjbF9hY2Nlc3NfaGFuZGxlci5oYW5kbGVycywgJnhhdHRyX2hhbmRsZXJzKTsKLQlsaXN0X2FkZF90YWlsKCZwb3NpeF9hY2xfZGVmYXVsdF9oYW5kbGVyLmhhbmRsZXJzLCAmeGF0dHJfaGFuZGxlcnMpOwotI2VuZGlmCisJaWYgKGRlbnRyeSAmJiBkZW50cnktPmRfaW5vZGUpCisJCXJlaXNlcmZzX2luZm8oZGVudHJ5LT5kX3NiLCAiQ3JlYXRlZCAlcyAtIHJlc2VydmVkIGZvciB4YXR0ciAiCisJCQkgICAgICAic3RvcmFnZS5cbiIsIFBSSVZST09UX05BTUUpOwogCi0JLyogUnVuIGluaXRpYWxpemVycywgaWYgYXZhaWxhYmxlICovCi0JbGlzdF9mb3JfZWFjaChwLCAmeGF0dHJfaGFuZGxlcnMpIHsKLQkJeGFoID0gbGlzdF9lbnRyeShwLCBzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciwgaGFuZGxlcnMpOwotCQlpZiAoeGFoLT5pbml0KSB7Ci0JCQllcnIgPSB4YWgtPmluaXQoKTsKLQkJCWlmIChlcnIpIHsKLQkJCQlsaXN0X2RlbF9pbml0KHApOwotCQkJCWJyZWFrOwotCQkJfQorCXJldHVybiBlcnI7Cit9CisKK3N0YXRpYyBpbnQgeGF0dHJfbW91bnRfY2hlY2soc3RydWN0IHN1cGVyX2Jsb2NrICpzKQoreworCS8qIFdlIG5lZWQgZ2VuZXJhdGlvbiBudW1iZXJzIHRvIGVuc3VyZSB0aGF0IHRoZSBvaWQgbWFwcGluZyBpcyBjb3JyZWN0CisJICogdjMuNSBmaWxlc3lzdGVtcyBkb24ndCBoYXZlIHRoZW0uICovCisJaWYgKG9sZF9mb3JtYXRfb25seShzKSkgeworCQlpZiAocmVpc2VyZnNfeGF0dHJzX29wdGlvbmFsKHMpKSB7CisJCQkvKiBPbGQgZm9ybWF0IGZpbGVzeXN0ZW0sIGJ1dCBvcHRpb25hbCB4YXR0cnMgaGF2ZQorCQkJICogYmVlbiBlbmFibGVkLiBFcnJvciBvdXQuICovCisJCQlyZWlzZXJmc193YXJuaW5nKHMsICJqZG0tMjAwNSIsCisJCQkJCSAieGF0dHJzL0FDTHMgbm90IHN1cHBvcnRlZCAiCisJCQkJCSAib24gcHJlLXYzLjYgZm9ybWF0IGZpbGVzeXN0ZW1zLiAiCisJCQkJCSAiRmFpbGluZyBtb3VudC4iKTsKKwkJCXJldHVybiAtRU9QTk9UU1VQUDsKIAkJfQogCX0KIAotCS8qIENsZWFuIHVwIG90aGVyIGhhbmRsZXJzLCBpZiBhbnkgZmFpbGVkICovCi0JaWYgKGVycikKLQkJX191bnJlZ2lzdGVyX2hhbmRsZXJzKCk7Ci0KLQl3cml0ZV91bmxvY2soJmhhbmRsZXJfbG9jayk7Ci0JcmV0dXJuIGVycjsKKwlyZXR1cm4gMDsKIH0KIAotdm9pZCByZWlzZXJmc194YXR0cl91bnJlZ2lzdGVyX2hhbmRsZXJzKHZvaWQpCi17Ci0Jd3JpdGVfbG9jaygmaGFuZGxlcl9sb2NrKTsKLQlfX3VucmVnaXN0ZXJfaGFuZGxlcnMoKTsKLQl3cml0ZV91bmxvY2soJmhhbmRsZXJfbG9jayk7Ci19CisjZWxzZQoraW50IF9faW5pdCByZWlzZXJmc194YXR0cl9yZWdpc3Rlcl9oYW5kbGVycyh2b2lkKSB7IHJldHVybiAwOyB9Cit2b2lkIHJlaXNlcmZzX3hhdHRyX3VucmVnaXN0ZXJfaGFuZGxlcnModm9pZCkge30KKyNlbmRpZgogCiAvKiBUaGlzIHdpbGwgY2F0Y2ggbG9va3VwcyBmcm9tIHRoZSBmcyByb290IHRvIC5yZWlzZXJmc19wcml2ICovCiBzdGF0aWMgaW50CkBAIC0xMTQ3LDQ4ICs5NzEsMjMgQEAKIHsKIAlpbnQgZXJyID0gMDsKIAotCS8qIFdlIG5lZWQgZ2VuZXJhdGlvbiBudW1iZXJzIHRvIGVuc3VyZSB0aGF0IHRoZSBvaWQgbWFwcGluZyBpcyBjb3JyZWN0Ci0JICogdjMuNSBmaWxlc3lzdGVtcyBkb24ndCBoYXZlIHRoZW0uICovCi0JaWYgKCFvbGRfZm9ybWF0X29ubHkocykpIHsKLQkJc2V0X2JpdChSRUlTRVJGU19YQVRUUlMsICYoUkVJU0VSRlNfU0IocyktPnNfbW91bnRfb3B0KSk7Ci0JfSBlbHNlIGlmIChyZWlzZXJmc194YXR0cnNfb3B0aW9uYWwocykpIHsKLQkJLyogT2xkIGZvcm1hdCBmaWxlc3lzdGVtLCBidXQgb3B0aW9uYWwgeGF0dHJzIGhhdmUgYmVlbiBlbmFibGVkCi0JCSAqIGF0IG1vdW50IHRpbWUuIEVycm9yIG91dC4gKi8KLQkJcmVpc2VyZnNfd2FybmluZyhzLCAieGF0dHJzL0FDTHMgbm90IHN1cHBvcnRlZCBvbiBwcmUgdjMuNiAiCi0JCQkJICJmb3JtYXQgZmlsZXN5c3RlbS4gRmFpbGluZyBtb3VudC4iKTsKLQkJZXJyID0gLUVPUE5PVFNVUFA7CisjaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSCisJZXJyID0geGF0dHJfbW91bnRfY2hlY2socyk7CisJaWYgKGVycikKIAkJZ290byBlcnJvcjsKLQl9IGVsc2UgewotCQkvKiBPbGQgZm9ybWF0IGZpbGVzeXN0ZW0sIGJ1dCBubyBvcHRpb25hbCB4YXR0cnMgaGF2ZSBiZWVuIGVuYWJsZWQuIFRoaXMKLQkJICogbWVhbnMgd2Ugc2lsZW50bHkgZGlzYWJsZSB4YXR0cnMgb24gdGhlIGZpbGVzeXN0ZW0uICovCi0JCWNsZWFyX2JpdChSRUlTRVJGU19YQVRUUlMsICYoUkVJU0VSRlNfU0IocyktPnNfbW91bnRfb3B0KSk7Ci0JfQorI2VuZGlmCiAKIAkvKiBJZiB3ZSBkb24ndCBoYXZlIHRoZSBwcml2cm9vdCBsb2NhdGVkIHlldCAtIGdvIGZpbmQgaXQgKi8KLQlpZiAocmVpc2VyZnNfeGF0dHJzKHMpICYmICFSRUlTRVJGU19TQihzKS0+cHJpdl9yb290KSB7CisJaWYgKCFSRUlTRVJGU19TQihzKS0+cHJpdl9yb290KSB7CiAJCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAkJZGVudHJ5ID0gbG9va3VwX29uZV9sZW4oUFJJVlJPT1RfTkFNRSwgcy0+c19yb290LAogCQkJCQlzdHJsZW4oUFJJVlJPT1RfTkFNRSkpOwogCQlpZiAoIUlTX0VSUihkZW50cnkpKSB7Ci0JCQlpZiAoIShtb3VudF9mbGFncyAmIE1TX1JET05MWSkgJiYgIWRlbnRyeS0+ZF9pbm9kZSkgewotCQkJCXN0cnVjdCBpbm9kZSAqaW5vZGUgPSBkZW50cnktPmRfcGFyZW50LT5kX2lub2RlOwotCQkJCW11dGV4X2xvY2tfbmVzdGVkKCZpbm9kZS0+aV9tdXRleCwKLQkJCQkJCSAgSV9NVVRFWF9YQVRUUik7Ci0JCQkJZXJyID0gaW5vZGUtPmlfb3AtPm1rZGlyKGlub2RlLCBkZW50cnksIDA3MDApOwotCQkJCW11dGV4X3VubG9jaygmaW5vZGUtPmlfbXV0ZXgpOwotCQkJCWlmIChlcnIpIHsKLQkJCQkJZHB1dChkZW50cnkpOwotCQkJCQlkZW50cnkgPSBOVUxMOwotCQkJCX0KLQotCQkJCWlmIChkZW50cnkgJiYgZGVudHJ5LT5kX2lub2RlKQotCQkJCQlyZWlzZXJmc193YXJuaW5nKHMsCi0JCQkJCQkJICJDcmVhdGVkICVzIG9uICVzIC0gcmVzZXJ2ZWQgZm9yICIKLQkJCQkJCQkgInhhdHRyIHN0b3JhZ2UuIiwKLQkJCQkJCQkgUFJJVlJPT1RfTkFNRSwKLQkJCQkJCQkgcmVpc2VyZnNfYmRldm5hbWUKLQkJCQkJCQkgKGlub2RlLT5pX3NiKSk7Ci0JCQl9IGVsc2UgaWYgKCFkZW50cnktPmRfaW5vZGUpIHsKKyNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIKKwkJCWlmICghKG1vdW50X2ZsYWdzICYgTVNfUkRPTkxZKSAmJiAhZGVudHJ5LT5kX2lub2RlKQorCQkJCWVyciA9IGNyZWF0ZV9wcml2cm9vdChkZW50cnkpOworI2VuZGlmCisJCQlpZiAoIWRlbnRyeS0+ZF9pbm9kZSkgewogCQkJCWRwdXQoZGVudHJ5KTsKIAkJCQlkZW50cnkgPSBOVUxMOwogCQkJfQpAQCAtMTE5Nyw3MyArOTk2LDQxIEBACiAKIAkJaWYgKCFlcnIgJiYgZGVudHJ5KSB7CiAJCQlzLT5zX3Jvb3QtPmRfb3AgPSAmeGF0dHJfbG9va3VwX3BvaXNvbl9vcHM7Ci0JCQlyZWlzZXJmc19tYXJrX2lub2RlX3ByaXZhdGUoZGVudHJ5LT5kX2lub2RlKTsKKwkJCWRlbnRyeS0+ZF9pbm9kZS0+aV9mbGFncyB8PSBTX1BSSVZBVEU7CiAJCQlSRUlTRVJGU19TQihzKS0+cHJpdl9yb290ID0gZGVudHJ5OwotCQl9IGVsc2UgaWYgKCEobW91bnRfZmxhZ3MgJiBNU19SRE9OTFkpKSB7CS8qIHhhdHRycyBhcmUgdW5hdmFpbGFibGUgKi8KLQkJCS8qIElmIHdlJ3JlIHJlYWQtb25seSBpdCBqdXN0IG1lYW5zIHRoYXQgdGhlIGRpciBoYXNuJ3QgYmVlbgotCQkJICogY3JlYXRlZC4gTm90IGFuIGVycm9yIC0tIGp1c3Qgbm8geGF0dHJzIG9uIHRoZSBmcy4gV2UnbGwKLQkJCSAqIGNoZWNrIGFnYWluIGlmIHdlIGdvIHJlYWQtd3JpdGUgKi8KLQkJCXJlaXNlcmZzX3dhcm5pbmcocywgInhhdHRycy9BQ0xzIGVuYWJsZWQgYW5kIGNvdWxkbid0ICIKLQkJCQkJICJmaW5kL2NyZWF0ZSAucmVpc2VyZnNfcHJpdi4gRmFpbGluZyBtb3VudC4iKTsKKyNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIKKwkJLyogeGF0dHJzIGFyZSB1bmF2YWlsYWJsZSAqLworCQl9IGVsc2UgaWYgKCEobW91bnRfZmxhZ3MgJiBNU19SRE9OTFkpKSB7CisJCQkvKiBJZiB3ZSdyZSByZWFkLW9ubHkgaXQganVzdCBtZWFucyB0aGF0IHRoZSBkaXIKKwkJCSAqIGhhc24ndCBiZWVuIGNyZWF0ZWQuIE5vdCBhbiBlcnJvciAtLSBqdXN0IG5vCisJCQkgKiB4YXR0cnMgb24gdGhlIGZzLiBXZSdsbCBjaGVjayBhZ2FpbiBpZiB3ZQorCQkJICogZ28gcmVhZC13cml0ZSAqLworCQkJcmVpc2VyZnNfd2FybmluZyhzLCAiamRtLTIwMDA2IiwKKwkJCQkJICJ4YXR0cnMvQUNMcyBlbmFibGVkIGFuZCBjb3VsZG4ndCAiCisJCQkJCSAiZmluZC9jcmVhdGUgLnJlaXNlcmZzX3ByaXYuICIKKwkJCQkJICJGYWlsaW5nIG1vdW50LiIpOwogCQkJZXJyID0gLUVPUE5PVFNVUFA7CisjZW5kaWYKIAkJfQogCX0KIAotICAgICAgZXJyb3I6Ci0JLyogVGhpcyBpcyBvbmx5IG5vbnplcm8gaWYgdGhlcmUgd2FzIGFuIGVycm9yIGluaXRpYWxpemluZyB0aGUgeGF0dHIKLQkgKiBkaXJlY3Rvcnkgb3IgaWYgdGhlcmUgaXMgYSBjb25kaXRpb24gd2hlcmUgd2UgZG9uJ3Qgc3VwcG9ydCB0aGVtLiAqLworI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19YQVRUUgorCWlmICghZXJyKQorCQlzLT5zX3hhdHRyID0gcmVpc2VyZnNfeGF0dHJfaGFuZGxlcnM7CisKK2Vycm9yOgogCWlmIChlcnIpIHsKLQkJY2xlYXJfYml0KFJFSVNFUkZTX1hBVFRSUywgJihSRUlTRVJGU19TQihzKS0+c19tb3VudF9vcHQpKTsKIAkJY2xlYXJfYml0KFJFSVNFUkZTX1hBVFRSU19VU0VSLCAmKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCkpOwogCQljbGVhcl9iaXQoUkVJU0VSRlNfUE9TSVhBQ0wsICYoUkVJU0VSRlNfU0IocyktPnNfbW91bnRfb3B0KSk7CiAJfQorI2VuZGlmCiAKIAkvKiBUaGUgc3VwZXJfYmxvY2sgTVNfUE9TSVhBQ0wgbXVzdCBtaXJyb3IgdGhlIChubylhY2wgbW91bnQgb3B0aW9uLiAqLwogCXMtPnNfZmxhZ3MgPSBzLT5zX2ZsYWdzICYgfk1TX1BPU0lYQUNMOworI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0wKIAlpZiAocmVpc2VyZnNfcG9zaXhhY2wocykpCiAJCXMtPnNfZmxhZ3MgfD0gTVNfUE9TSVhBQ0w7CisjZW5kaWYKIAogCXJldHVybiBlcnI7CiB9Ci0KLXN0YXRpYyBpbnQgcmVpc2VyZnNfY2hlY2tfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKQotewotCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKLQlpbnQgZXJyb3IgPSAtRUFHQUlOOyAvKiBkbyByZWd1bGFyIHVuaXggcGVybWlzc2lvbiBjaGVja3MgYnkgZGVmYXVsdCAqLwotCi0JcmVpc2VyZnNfcmVhZF9sb2NrX3hhdHRyX2koaW5vZGUpOwotCXJlaXNlcmZzX3JlYWRfbG9ja194YXR0cnMoaW5vZGUtPmlfc2IpOwotCi0JYWNsID0gcmVpc2VyZnNfZ2V0X2FjbChpbm9kZSwgQUNMX1RZUEVfQUNDRVNTKTsKLQotCXJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRycyhpbm9kZS0+aV9zYik7Ci0JcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJfaShpbm9kZSk7Ci0KLQlpZiAoYWNsKSB7Ci0JCWlmICghSVNfRVJSKGFjbCkpIHsKLQkJCWVycm9yID0gcG9zaXhfYWNsX3Blcm1pc3Npb24oaW5vZGUsIGFjbCwgbWFzayk7Ci0JCQlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOwotCQl9IGVsc2UgaWYgKFBUUl9FUlIoYWNsKSAhPSAtRU5PREFUQSkKLQkJCWVycm9yID0gUFRSX0VSUihhY2wpOwotCX0KLQotCXJldHVybiBlcnJvcjsKLX0KLQotaW50IHJlaXNlcmZzX3Blcm1pc3Npb24oc3RydWN0IGlub2RlICppbm9kZSwgaW50IG1hc2spCi17Ci0JLyoKLQkgKiBXZSBkb24ndCBkbyBwZXJtaXNzaW9uIGNoZWNrcyBvbiB0aGUgaW50ZXJuYWwgb2JqZWN0cy4KLQkgKiBQZXJtaXNzaW9ucyBhcmUgZGV0ZXJtaW5lZCBieSB0aGUgIm93bmluZyIgb2JqZWN0LgotCSAqLwotCWlmIChpc19yZWlzZXJmc19wcml2X29iamVjdChpbm9kZSkpCi0JCXJldHVybiAwOwotCi0JLyoKLQkgKiBTdGF0IGRhdGEgdjEgZG9lc24ndCBzdXBwb3J0IEFDTHMuCi0JICovCi0JaWYgKGdldF9pbm9kZV9zZF92ZXJzaW9uKGlub2RlKSA9PSBTVEFUX0RBVEFfVjEpCi0JCXJldHVybiBnZW5lcmljX3Blcm1pc3Npb24oaW5vZGUsIG1hc2ssIE5VTEwpOwotCWVsc2UKLQkJcmV0dXJuIGdlbmVyaWNfcGVybWlzc2lvbihpbm9kZSwgbWFzaywgcmVpc2VyZnNfY2hlY2tfYWNsKTsKLX0KZGlmZiAtLWdpdCBhL2ZzL3JlaXNlcmZzL3hhdHRyX2FjbC5jIGIvZnMvcmVpc2VyZnMveGF0dHJfYWNsLmMKaW5kZXggYjdlNGZhNC4uZDQyMzQxNiAxMDA2NDQKLS0tIGEvZnMvcmVpc2VyZnMveGF0dHJfYWNsLmMKKysrIGIvZnMvcmVpc2VyZnMveGF0dHJfYWNsLmMKQEAgLTEwLDE1ICsxMCwxNyBAQAogI2luY2x1ZGUgPGxpbnV4L3JlaXNlcmZzX2FjbC5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKLXN0YXRpYyBpbnQgcmVpc2VyZnNfc2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwKK3N0YXRpYyBpbnQgcmVpc2VyZnNfc2V0X2FjbChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKKwkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgdHlwZSwKIAkJCSAgICBzdHJ1Y3QgcG9zaXhfYWNsICphY2wpOwogCiBzdGF0aWMgaW50CiB4YXR0cl9zZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCBjb25zdCB2b2lkICp2YWx1ZSwgc2l6ZV90IHNpemUpCiB7CiAJc3RydWN0IHBvc2l4X2FjbCAqYWNsOwotCWludCBlcnJvcjsKLQorCWludCBlcnJvciwgZXJyb3IyOworCXN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgdGg7CisJc2l6ZV90IGpjcmVhdGVfYmxvY2tzOwogCWlmICghcmVpc2VyZnNfcG9zaXhhY2woaW5vZGUtPmlfc2IpKQogCQlyZXR1cm4gLUVPUE5PVFNVUFA7CiAJaWYgKCFpc19vd25lcl9vcl9jYXAoaW5vZGUpKQpAQCAtMzYsNyArMzgsMjEgQEAKIAl9IGVsc2UKIAkJYWNsID0gTlVMTDsKIAotCWVycm9yID0gcmVpc2VyZnNfc2V0X2FjbChpbm9kZSwgdHlwZSwgYWNsKTsKKwkvKiBQZXNzaW1pc206IFdlIGNhbid0IGFzc3VtZSB0aGF0IGFueXRoaW5nIGZyb20gdGhlIHhhdHRyIHJvb3QgdXAKKwkgKiBoYXMgYmVlbiBjcmVhdGVkLiAqLworCisJamNyZWF0ZV9ibG9ja3MgPSByZWlzZXJmc194YXR0cl9qY3JlYXRlX25ibG9ja3MoaW5vZGUpICsKKwkJCSByZWlzZXJmc194YXR0cl9uYmxvY2tzKGlub2RlLCBzaXplKSAqIDI7CisKKwlyZWlzZXJmc193cml0ZV9sb2NrKGlub2RlLT5pX3NiKTsKKwllcnJvciA9IGpvdXJuYWxfYmVnaW4oJnRoLCBpbm9kZS0+aV9zYiwgamNyZWF0ZV9ibG9ja3MpOworCWlmIChlcnJvciA9PSAwKSB7CisJCWVycm9yID0gcmVpc2VyZnNfc2V0X2FjbCgmdGgsIGlub2RlLCB0eXBlLCBhY2wpOworCQllcnJvcjIgPSBqb3VybmFsX2VuZCgmdGgsIGlub2RlLT5pX3NiLCBqY3JlYXRlX2Jsb2Nrcyk7CisJCWlmIChlcnJvcjIpCisJCQllcnJvciA9IGVycm9yMjsKKwl9CisJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGlub2RlLT5pX3NiKTsKIAogICAgICAgcmVsZWFzZV9hbmRfb3V0OgogCXBvc2l4X2FjbF9yZWxlYXNlKGFjbCk7CkBAIC0xNzIsNiArMTg4LDI5IEBACiAJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiB9CiAKK3N0YXRpYyBpbmxpbmUgdm9pZCBpc2V0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgcG9zaXhfYWNsICoqaV9hY2wsCisJCQkgICAgc3RydWN0IHBvc2l4X2FjbCAqYWNsKQoreworCXNwaW5fbG9jaygmaW5vZGUtPmlfbG9jayk7CisJaWYgKCppX2FjbCAhPSBFUlJfUFRSKC1FTk9EQVRBKSkKKwkJcG9zaXhfYWNsX3JlbGVhc2UoKmlfYWNsKTsKKwkqaV9hY2wgPSBwb3NpeF9hY2xfZHVwKGFjbCk7CisJc3Bpbl91bmxvY2soJmlub2RlLT5pX2xvY2spOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBwb3NpeF9hY2wgKmlnZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkJCSBzdHJ1Y3QgcG9zaXhfYWNsICoqaV9hY2wpCit7CisJc3RydWN0IHBvc2l4X2FjbCAqYWNsID0gRVJSX1BUUigtRU5PREFUQSk7CisKKwlzcGluX2xvY2soJmlub2RlLT5pX2xvY2spOworCWlmICgqaV9hY2wgIT0gRVJSX1BUUigtRU5PREFUQSkpCisJCWFjbCA9IHBvc2l4X2FjbF9kdXAoKmlfYWNsKTsKKwlzcGluX3VubG9jaygmaW5vZGUtPmlfbG9jayk7CisKKwlyZXR1cm4gYWNsOworfQorCiAvKgogICogSW5vZGUgb3BlcmF0aW9uIGdldF9wb3NpeF9hY2woKS4KICAqCkBAIC0xOTksMTEgKzIzOCwxMSBAQAogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9CiAKLQlpZiAoSVNfRVJSKCpwX2FjbCkpIHsKLQkJaWYgKFBUUl9FUlIoKnBfYWNsKSA9PSAtRU5PREFUQSkKLQkJCXJldHVybiBOVUxMOwotCX0gZWxzZSBpZiAoKnBfYWNsICE9IE5VTEwpCi0JCXJldHVybiBwb3NpeF9hY2xfZHVwKCpwX2FjbCk7CisJYWNsID0gaWdldF9hY2woaW5vZGUsIHBfYWNsKTsKKwlpZiAoYWNsICYmICFJU19FUlIoYWNsKSkKKwkJcmV0dXJuIGFjbDsKKwllbHNlIGlmIChQVFJfRVJSKGFjbCkgPT0gLUVOT0RBVEEpCisJCXJldHVybiBOVUxMOwogCiAJc2l6ZSA9IHJlaXNlcmZzX3hhdHRyX2dldChpbm9kZSwgbmFtZSwgTlVMTCwgMCk7CiAJaWYgKHNpemUgPCAwKSB7CkBAIC0yMjksNyArMjY4LDcgQEAKIAl9IGVsc2UgewogCQlhY2wgPSBwb3NpeF9hY2xfZnJvbV9kaXNrKHZhbHVlLCByZXR2YWwpOwogCQlpZiAoIUlTX0VSUihhY2wpKQotCQkJKnBfYWNsID0gcG9zaXhfYWNsX2R1cChhY2wpOworCQkJaXNldF9hY2woaW5vZGUsIHBfYWNsLCBhY2wpOwogCX0KIAogCWtmcmVlKHZhbHVlKTsKQEAgLTI0MywxMiArMjgyLDEzIEBACiAgKiBCS0wgaGVsZCBbYmVmb3JlIDIuNS54XQogICovCiBzdGF0aWMgaW50Ci1yZWlzZXJmc19zZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlLCBzdHJ1Y3QgcG9zaXhfYWNsICphY2wpCityZWlzZXJmc19zZXRfYWNsKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkgaW50IHR5cGUsIHN0cnVjdCBwb3NpeF9hY2wgKmFjbCkKIHsKIAljaGFyICpuYW1lOwogCXZvaWQgKnZhbHVlID0gTlVMTDsKIAlzdHJ1Y3QgcG9zaXhfYWNsICoqcF9hY2w7Ci0Jc2l6ZV90IHNpemU7CisJc2l6ZV90IHNpemUgPSAwOwogCWludCBlcnJvcjsKIAlzdHJ1Y3QgcmVpc2VyZnNfaW5vZGVfaW5mbyAqcmVpc2VyZnNfaSA9IFJFSVNFUkZTX0koaW5vZGUpOwogCkBAIC0yODUsMzEgKzMyNSwyOCBAQAogCQl2YWx1ZSA9IHBvc2l4X2FjbF90b19kaXNrKGFjbCwgJnNpemUpOwogCQlpZiAoSVNfRVJSKHZhbHVlKSkKIAkJCXJldHVybiAoaW50KVBUUl9FUlIodmFsdWUpOwotCQllcnJvciA9IHJlaXNlcmZzX3hhdHRyX3NldChpbm9kZSwgbmFtZSwgdmFsdWUsIHNpemUsIDApOwotCX0gZWxzZSB7Ci0JCWVycm9yID0gcmVpc2VyZnNfeGF0dHJfZGVsKGlub2RlLCBuYW1lKTsKLQkJaWYgKGVycm9yID09IC1FTk9EQVRBKSB7Ci0JCQkvKiBUaGlzIG1heSBzZWVtIG9kZCBoZXJlLCBidXQgaXQgbWVhbnMgdGhhdCB0aGUgQUNMIHdhcyBzZXQKLQkJCSAqIHdpdGggYSB2YWx1ZSByZXByZXNlbnRhYmxlIHdpdGggbW9kZSBiaXRzLiBJZiB0aGVyZSB3YXMKLQkJCSAqIGFuIEFDTCBiZWZvcmUsIHJlaXNlcmZzX3hhdHRyX2RlbCBhbHJlYWR5IGRpcnRpZWQgdGhlIGlub2RlLgotCQkJICovCisJfQorCisJZXJyb3IgPSByZWlzZXJmc194YXR0cl9zZXRfaGFuZGxlKHRoLCBpbm9kZSwgbmFtZSwgdmFsdWUsIHNpemUsIDApOworCisJLyoKKwkgKiBFbnN1cmUgdGhhdCB0aGUgaW5vZGUgZ2V0cyBkaXJ0aWVkIGlmIHdlJ3JlIG9ubHkgdXNpbmcKKwkgKiB0aGUgbW9kZSBiaXRzIGFuZCBhbiBvbGQgQUNMIGRpZG4ndCBleGlzdC4gV2UgZG9uJ3QgbmVlZAorCSAqIHRvIGNoZWNrIGlmIHRoZSBpbm9kZSBpcyBoYXNoZWQgaGVyZSBzaW5jZSB3ZSB3b24ndCBnZXQKKwkgKiBjYWxsZWQgYnkgcmVpc2VyZnNfaW5oZXJpdF9kZWZhdWx0X2FjbCgpLgorCSAqLworCWlmIChlcnJvciA9PSAtRU5PREFUQSkgeworCQllcnJvciA9IDA7CisJCWlmICh0eXBlID09IEFDTF9UWVBFX0FDQ0VTUykgeworCQkJaW5vZGUtPmlfY3RpbWUgPSBDVVJSRU5UX1RJTUVfU0VDOwogCQkJbWFya19pbm9kZV9kaXJ0eShpbm9kZSk7Ci0JCQllcnJvciA9IDA7CiAJCX0KIAl9CiAKIAlrZnJlZSh2YWx1ZSk7CiAKLQlpZiAoIWVycm9yKSB7Ci0JCS8qIFJlbGVhc2UgdGhlIG9sZCBvbmUgKi8KLQkJaWYgKCFJU19FUlIoKnBfYWNsKSAmJiAqcF9hY2wpCi0JCQlwb3NpeF9hY2xfcmVsZWFzZSgqcF9hY2wpOwotCi0JCWlmIChhY2wgPT0gTlVMTCkKLQkJCSpwX2FjbCA9IEVSUl9QVFIoLUVOT0RBVEEpOwotCQllbHNlCi0JCQkqcF9hY2wgPSBwb3NpeF9hY2xfZHVwKGFjbCk7Ci0JfQorCWlmICghZXJyb3IpCisJCWlzZXRfYWNsKGlub2RlLCBwX2FjbCwgYWNsKTsKIAogCXJldHVybiBlcnJvcjsKIH0KQEAgLTMxNyw3ICszNTQsOCBAQAogLyogZGlyLT5pX211dGV4OiBsb2NrZWQsCiAgKiBpbm9kZSBpcyBuZXcgYW5kIG5vdCByZWxlYXNlZCBpbnRvIHRoZSB3aWxkIHlldCAqLwogaW50Ci1yZWlzZXJmc19pbmhlcml0X2RlZmF1bHRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCityZWlzZXJmc19pbmhlcml0X2RlZmF1bHRfYWNsKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAorCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAogCQkJICAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXN0cnVjdCBwb3NpeF9hY2wgKmFjbDsKQEAgLTMzNSw4ICszNzMsOCBAQAogCS8qIERvbid0IGFwcGx5IEFDTHMgdG8gb2JqZWN0cyBpbiB0aGUgLnJlaXNlcmZzX3ByaXYgdHJlZS4uIFRoaXMKIAkgKiB3b3VsZCBiZSB1c2VsZXNzIHNpbmNlIHBlcm1pc3Npb25zIGFyZSBpZ25vcmVkLCBhbmQgYSBwYWluIGJlY2F1c2UKIAkgKiBpdCBpbnRyb2R1Y2VzIGxvY2tpbmcgY3ljbGVzICovCi0JaWYgKGlzX3JlaXNlcmZzX3ByaXZfb2JqZWN0KGRpcikpIHsKLQkJcmVpc2VyZnNfbWFya19pbm9kZV9wcml2YXRlKGlub2RlKTsKKwlpZiAoSVNfUFJJVkFURShkaXIpKSB7CisJCWlub2RlLT5pX2ZsYWdzIHw9IFNfUFJJVkFURTsKIAkJZ290byBhcHBseV91bWFzazsKIAl9CiAKQEAgLTM1NCw3ICszOTIsOCBAQAogCiAJCS8qIENvcHkgdGhlIGRlZmF1bHQgQUNMIHRvIHRoZSBkZWZhdWx0IEFDTCBvZiBhIG5ldyBkaXJlY3RvcnkgKi8KIAkJaWYgKFNfSVNESVIoaW5vZGUtPmlfbW9kZSkpIHsKLQkJCWVyciA9IHJlaXNlcmZzX3NldF9hY2woaW5vZGUsIEFDTF9UWVBFX0RFRkFVTFQsIGFjbCk7CisJCQllcnIgPSByZWlzZXJmc19zZXRfYWNsKHRoLCBpbm9kZSwgQUNMX1RZUEVfREVGQVVMVCwKKwkJCQkJICAgICAgIGFjbCk7CiAJCQlpZiAoZXJyKQogCQkJCWdvdG8gY2xlYW51cDsKIAkJfQpAQCAtMzc1LDkgKzQxNCw5IEBACiAKIAkJCS8qIElmIHdlIG5lZWQgYW4gQUNMLi4gKi8KIAkJCWlmIChuZWVkX2FjbCA+IDApIHsKLQkJCQllcnIgPQotCQkJCSAgICByZWlzZXJmc19zZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MsCi0JCQkJCQkgICAgIGFjbF9jb3B5KTsKKwkJCQllcnIgPSByZWlzZXJmc19zZXRfYWNsKHRoLCBpbm9kZSwKKwkJCQkJCSAgICAgICBBQ0xfVFlQRV9BQ0NFU1MsCisJCQkJCQkgICAgICAgYWNsX2NvcHkpOwogCQkJCWlmIChlcnIpCiAJCQkJCWdvdG8gY2xlYW51cF9jb3B5OwogCQkJfQpAQCAtMzk1LDI1ICs0MzQsNDUgQEAKIAlyZXR1cm4gZXJyOwogfQogCi0vKiBMb29rcyB1cCBhbmQgY2FjaGVzIHRoZSByZXN1bHQgb2YgdGhlIGRlZmF1bHQgQUNMLgotICogV2UgZG8gdGhpcyBzbyB0aGF0IHdlIGRvbid0IG5lZWQgdG8gY2FycnkgdGhlIHhhdHRyX3NlbSBpbnRvCi0gKiByZWlzZXJmc19uZXdfaW5vZGUgaWYgd2UgZG9uJ3QgbmVlZCB0byAqLworLyogVGhpcyBpcyB1c2VkIHRvIGNhY2hlIHRoZSBkZWZhdWx0IGFjbCBiZWZvcmUgYSBuZXcgb2JqZWN0IGlzIGNyZWF0ZWQuCisgKiBUaGUgYmlnZ2VzdCByZWFzb24gZm9yIHRoaXMgaXMgdG8gZ2V0IGFuIGlkZWEgb2YgaG93IG1hbnkgYmxvY2tzIHdpbGwKKyAqIGFjdHVhbGx5IGJlIHJlcXVpcmVkIGZvciB0aGUgY3JlYXRlIG9wZXJhdGlvbiBpZiB3ZSBtdXN0IGluaGVyaXQgYW4gQUNMLgorICogQW4gQUNMIHdyaXRlIGNhbiBhZGQgdXAgdG8gMyBvYmplY3QgY3JlYXRpb25zIGFuZCBhbiBhZGRpdGlvbmFsIGZpbGUgd3JpdGUKKyAqIHNvIHdlJ2QgcHJlZmVyIG5vdCB0byByZXNlcnZlIHRoYXQgbWFueSBibG9ja3MgaW4gdGhlIGpvdXJuYWwgaWYgd2UgY2FuLgorICogSXQgYWxzbyBoYXMgdGhlIGFkdmFudGFnZSBvZiBub3QgbG9hZGluZyB0aGUgQUNMIHdpdGggYSB0cmFuc2FjdGlvbiBvcGVuLAorICogdGhpcyBtYXkgc2VlbSBzaWxseSwgYnV0IGlmIHRoZSBvd25lciBvZiB0aGUgZGlyZWN0b3J5IGlzIGRvaW5nIHRoZQorICogY3JlYXRpb24sIHRoZSBBQ0wgbWF5IG5vdCBiZSBsb2FkZWQgc2luY2UgdGhlIHBlcm1pc3Npb25zIHdvdWxkbid0IHJlcXVpcmUKKyAqIGl0LgorICogV2UgcmV0dXJuIHRoZSBudW1iZXIgb2YgYmxvY2tzIHJlcXVpcmVkIGZvciB0aGUgdHJhbnNhY3Rpb24uCisgKi8KIGludCByZWlzZXJmc19jYWNoZV9kZWZhdWx0X2FjbChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWludCByZXQgPSAwOwotCWlmIChyZWlzZXJmc19wb3NpeGFjbChpbm9kZS0+aV9zYikgJiYgIWlzX3JlaXNlcmZzX3ByaXZfb2JqZWN0KGlub2RlKSkgewotCQlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7Ci0JCXJlaXNlcmZzX3JlYWRfbG9ja194YXR0cl9pKGlub2RlKTsKLQkJcmVpc2VyZnNfcmVhZF9sb2NrX3hhdHRycyhpbm9kZS0+aV9zYik7Ci0JCWFjbCA9IHJlaXNlcmZzX2dldF9hY2woaW5vZGUsIEFDTF9UWVBFX0RFRkFVTFQpOwotCQlyZWlzZXJmc19yZWFkX3VubG9ja194YXR0cnMoaW5vZGUtPmlfc2IpOwotCQlyZWlzZXJmc19yZWFkX3VubG9ja194YXR0cl9pKGlub2RlKTsKLQkJcmV0ID0gKGFjbCAmJiAhSVNfRVJSKGFjbCkpOwotCQlpZiAocmV0KQotCQkJcG9zaXhfYWNsX3JlbGVhc2UoYWNsKTsKKwlzdHJ1Y3QgcG9zaXhfYWNsICphY2w7CisJaW50IG5ibG9ja3MgPSAwOworCisJaWYgKElTX1BSSVZBVEUoaW5vZGUpKQorCQlyZXR1cm4gMDsKKworCWFjbCA9IHJlaXNlcmZzX2dldF9hY2woaW5vZGUsIEFDTF9UWVBFX0RFRkFVTFQpOworCisJaWYgKGFjbCAmJiAhSVNfRVJSKGFjbCkpIHsKKwkJaW50IHNpemUgPSByZWlzZXJmc19hY2xfc2l6ZShhY2wtPmFfY291bnQpOworCisJCS8qIE90aGVyIHhhdHRycyBjYW4gYmUgY3JlYXRlZCBkdXJpbmcgaW5vZGUgY3JlYXRpb24uIFdlIGRvbid0CisJCSAqIHdhbnQgdG8gY2xhaW0gdG9vIG1hbnkgYmxvY2tzLCBzbyB3ZSBjaGVjayB0byBzZWUgaWYgd2UKKwkJICogd2UgbmVlZCB0byBjcmVhdGUgdGhlIHRyZWUgdG8gdGhlIHhhdHRycywgYW5kIHRoZW4gd2UKKwkJICoganVzdCB3YW50IHR3byBmaWxlcy4gKi8KKwkJbmJsb2NrcyA9IHJlaXNlcmZzX3hhdHRyX2pjcmVhdGVfbmJsb2Nrcyhpbm9kZSk7CisJCW5ibG9ja3MgKz0gSk9VUk5BTF9CTE9DS1NfUEVSX09CSkVDVChpbm9kZS0+aV9zYik7CisKKwkJUkVJU0VSRlNfSShpbm9kZSktPmlfZmxhZ3MgfD0gaV9oYXNfeGF0dHJfZGlyOworCisJCS8qIFdlIG5lZWQgdG8gYWNjb3VudCBmb3Igd3JpdGVzICsgYml0bWFwcyBmb3IgdHdvIGZpbGVzICovCisJCW5ibG9ja3MgKz0gcmVpc2VyZnNfeGF0dHJfbmJsb2Nrcyhpbm9kZSwgc2l6ZSkgKiA0OworCQlwb3NpeF9hY2xfcmVsZWFzZShhY2wpOwogCX0KIAotCXJldHVybiByZXQ7CisJcmV0dXJuIG5ibG9ja3M7CiB9CiAKIGludCByZWlzZXJmc19hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSkKQEAgLTQyOSw5ICs0ODgsNyBAQAogCQlyZXR1cm4gMDsKIAl9CiAKLQlyZWlzZXJmc19yZWFkX2xvY2tfeGF0dHJzKGlub2RlLT5pX3NiKTsKIAlhY2wgPSByZWlzZXJmc19nZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MpOwotCXJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRycyhpbm9kZS0+aV9zYik7CiAJaWYgKCFhY2wpCiAJCXJldHVybiAwOwogCWlmIChJU19FUlIoYWNsKSkKQEAgLTQ0MiwxOCArNDk5LDIwIEBACiAJCXJldHVybiAtRU5PTUVNOwogCWVycm9yID0gcG9zaXhfYWNsX2NobW9kX21hc3EoY2xvbmUsIGlub2RlLT5pX21vZGUpOwogCWlmICghZXJyb3IpIHsKLQkJaW50IGxvY2sgPSAhaGFzX3hhdHRyX2Rpcihpbm9kZSk7Ci0JCXJlaXNlcmZzX3dyaXRlX2xvY2tfeGF0dHJfaShpbm9kZSk7Ci0JCWlmIChsb2NrKQotCQkJcmVpc2VyZnNfd3JpdGVfbG9ja194YXR0cnMoaW5vZGUtPmlfc2IpOwotCQllbHNlCi0JCQlyZWlzZXJmc19yZWFkX2xvY2tfeGF0dHJzKGlub2RlLT5pX3NiKTsKLQkJZXJyb3IgPSByZWlzZXJmc19zZXRfYWNsKGlub2RlLCBBQ0xfVFlQRV9BQ0NFU1MsIGNsb25lKTsKLQkJaWYgKGxvY2spCi0JCQlyZWlzZXJmc193cml0ZV91bmxvY2tfeGF0dHJzKGlub2RlLT5pX3NiKTsKLQkJZWxzZQotCQkJcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJzKGlub2RlLT5pX3NiKTsKLQkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrX3hhdHRyX2koaW5vZGUpOworCQlzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlIHRoOworCQlzaXplX3Qgc2l6ZSA9IHJlaXNlcmZzX3hhdHRyX25ibG9ja3MoaW5vZGUsCisJCQkJCSAgICAgcmVpc2VyZnNfYWNsX3NpemUoY2xvbmUtPmFfY291bnQpKTsKKwkJcmVpc2VyZnNfd3JpdGVfbG9jayhpbm9kZS0+aV9zYik7CisJCWVycm9yID0gam91cm5hbF9iZWdpbigmdGgsIGlub2RlLT5pX3NiLCBzaXplICogMik7CisJCWlmICghZXJyb3IpIHsKKwkJCWludCBlcnJvcjI7CisJCQllcnJvciA9IHJlaXNlcmZzX3NldF9hY2woJnRoLCBpbm9kZSwgQUNMX1RZUEVfQUNDRVNTLAorCQkJCQkJIGNsb25lKTsKKwkJCWVycm9yMiA9IGpvdXJuYWxfZW5kKCZ0aCwgaW5vZGUtPmlfc2IsIHNpemUgKiAyKTsKKwkJCWlmIChlcnJvcjIpCisJCQkJZXJyb3IgPSBlcnJvcjI7CisJCX0KKwkJcmVpc2VyZnNfd3JpdGVfdW5sb2NrKGlub2RlLT5pX3NiKTsKIAl9CiAJcG9zaXhfYWNsX3JlbGVhc2UoY2xvbmUpOwogCXJldHVybiBlcnJvcjsKQEAgLTQ3NywzOCArNTM2LDIyIEBACiAJcmV0dXJuIHhhdHRyX3NldF9hY2woaW5vZGUsIEFDTF9UWVBFX0FDQ0VTUywgdmFsdWUsIHNpemUpOwogfQogCi1zdGF0aWMgaW50IHBvc2l4X2FjbF9hY2Nlc3NfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgc2l6ZV90IHBvc2l4X2FjbF9hY2Nlc3NfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpsaXN0LAorCQkJCSAgICBzaXplX3QgbGlzdF9zaXplLCBjb25zdCBjaGFyICpuYW1lLAorCQkJCSAgICBzaXplX3QgbmFtZV9sZW4pCiB7Ci0Jc3RydWN0IHJlaXNlcmZzX2lub2RlX2luZm8gKnJlaXNlcmZzX2kgPSBSRUlTRVJGU19JKGlub2RlKTsKLQlzdHJ1Y3QgcG9zaXhfYWNsICoqYWNsID0gJnJlaXNlcmZzX2ktPmlfYWNsX2FjY2VzczsKLQlpZiAoc3RybGVuKG5hbWUpICE9IHNpemVvZihQT1NJWF9BQ0xfWEFUVFJfQUNDRVNTKSAtIDEpCi0JCXJldHVybiAtRUlOVkFMOwotCWlmICghSVNfRVJSKCphY2wpICYmICphY2wpIHsKLQkJcG9zaXhfYWNsX3JlbGVhc2UoKmFjbCk7Ci0JCSphY2wgPSBFUlJfUFRSKC1FTk9EQVRBKTsKLQl9Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotcG9zaXhfYWNsX2FjY2Vzc19saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLAotCQkgICAgICBjaGFyICpvdXQpCi17Ci0JaW50IGxlbiA9IG5hbWVsZW47CisJY29uc3Qgc2l6ZV90IHNpemUgPSBzaXplb2YoUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUyk7CiAJaWYgKCFyZWlzZXJmc19wb3NpeGFjbChpbm9kZS0+aV9zYikpCiAJCXJldHVybiAwOwotCWlmIChvdXQpCi0JCW1lbWNweShvdXQsIG5hbWUsIGxlbik7Ci0KLQlyZXR1cm4gbGVuOworCWlmIChsaXN0ICYmIHNpemUgPD0gbGlzdF9zaXplKQorCQltZW1jcHkobGlzdCwgUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUywgc2l6ZSk7CisJcmV0dXJuIHNpemU7CiB9CiAKLXN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyIHBvc2l4X2FjbF9hY2Nlc3NfaGFuZGxlciA9IHsKK3N0cnVjdCB4YXR0cl9oYW5kbGVyIHJlaXNlcmZzX3Bvc2l4X2FjbF9hY2Nlc3NfaGFuZGxlciA9IHsKIAkucHJlZml4ID0gUE9TSVhfQUNMX1hBVFRSX0FDQ0VTUywKIAkuZ2V0ID0gcG9zaXhfYWNsX2FjY2Vzc19nZXQsCiAJLnNldCA9IHBvc2l4X2FjbF9hY2Nlc3Nfc2V0LAotCS5kZWwgPSBwb3NpeF9hY2xfYWNjZXNzX2RlbCwKIAkubGlzdCA9IHBvc2l4X2FjbF9hY2Nlc3NfbGlzdCwKIH07CiAKQEAgLTUzMCwzNyArNTczLDIxIEBACiAJcmV0dXJuIHhhdHRyX3NldF9hY2woaW5vZGUsIEFDTF9UWVBFX0RFRkFVTFQsIHZhbHVlLCBzaXplKTsKIH0KIAotc3RhdGljIGludCBwb3NpeF9hY2xfZGVmYXVsdF9kZWwoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBzaXplX3QgcG9zaXhfYWNsX2RlZmF1bHRfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpsaXN0LAorCQkJCSAgICAgc2l6ZV90IGxpc3Rfc2l6ZSwgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkgICAgIHNpemVfdCBuYW1lX2xlbikKIHsKLQlzdHJ1Y3QgcmVpc2VyZnNfaW5vZGVfaW5mbyAqcmVpc2VyZnNfaSA9IFJFSVNFUkZTX0koaW5vZGUpOwotCXN0cnVjdCBwb3NpeF9hY2wgKiphY2wgPSAmcmVpc2VyZnNfaS0+aV9hY2xfZGVmYXVsdDsKLQlpZiAoc3RybGVuKG5hbWUpICE9IHNpemVvZihQT1NJWF9BQ0xfWEFUVFJfREVGQVVMVCkgLSAxKQotCQlyZXR1cm4gLUVJTlZBTDsKLQlpZiAoIUlTX0VSUigqYWNsKSAmJiAqYWNsKSB7Ci0JCXBvc2l4X2FjbF9yZWxlYXNlKCphY2wpOwotCQkqYWNsID0gRVJSX1BUUigtRU5PREFUQSk7Ci0JfQotCi0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbnQKLXBvc2l4X2FjbF9kZWZhdWx0X2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sCi0JCSAgICAgICBjaGFyICpvdXQpCi17Ci0JaW50IGxlbiA9IG5hbWVsZW47CisJY29uc3Qgc2l6ZV90IHNpemUgPSBzaXplb2YoUE9TSVhfQUNMX1hBVFRSX0RFRkFVTFQpOwogCWlmICghcmVpc2VyZnNfcG9zaXhhY2woaW5vZGUtPmlfc2IpKQogCQlyZXR1cm4gMDsKLQlpZiAob3V0KQotCQltZW1jcHkob3V0LCBuYW1lLCBsZW4pOwotCi0JcmV0dXJuIGxlbjsKKwlpZiAobGlzdCAmJiBzaXplIDw9IGxpc3Rfc2l6ZSkKKwkJbWVtY3B5KGxpc3QsIFBPU0lYX0FDTF9YQVRUUl9ERUZBVUxULCBzaXplKTsKKwlyZXR1cm4gc2l6ZTsKIH0KIAotc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIgcG9zaXhfYWNsX2RlZmF1bHRfaGFuZGxlciA9IHsKK3N0cnVjdCB4YXR0cl9oYW5kbGVyIHJlaXNlcmZzX3Bvc2l4X2FjbF9kZWZhdWx0X2hhbmRsZXIgPSB7CiAJLnByZWZpeCA9IFBPU0lYX0FDTF9YQVRUUl9ERUZBVUxULAogCS5nZXQgPSBwb3NpeF9hY2xfZGVmYXVsdF9nZXQsCiAJLnNldCA9IHBvc2l4X2FjbF9kZWZhdWx0X3NldCwKLQkuZGVsID0gcG9zaXhfYWNsX2RlZmF1bHRfZGVsLAogCS5saXN0ID0gcG9zaXhfYWNsX2RlZmF1bHRfbGlzdCwKIH07CmRpZmYgLS1naXQgYS9mcy9yZWlzZXJmcy94YXR0cl9zZWN1cml0eS5jIGIvZnMvcmVpc2VyZnMveGF0dHJfc2VjdXJpdHkuYwppbmRleCAwNTYwMDhkLi40ZDNjMjBlIDEwMDY0NAotLS0gYS9mcy9yZWlzZXJmcy94YXR0cl9zZWN1cml0eS5jCisrKyBiL2ZzL3JlaXNlcmZzL3hhdHRyX3NlY3VyaXR5LmMKQEAgLTQsNiArNCw3IEBACiAjaW5jbHVkZSA8bGludXgvcGFnZW1hcC5oPgogI2luY2x1ZGUgPGxpbnV4L3hhdHRyLmg+CiAjaW5jbHVkZSA8bGludXgvcmVpc2VyZnNfeGF0dHIuaD4KKyNpbmNsdWRlIDxsaW51eC9zZWN1cml0eS5oPgogI2luY2x1ZGUgPGFzbS91YWNjZXNzLmg+CiAKIHN0YXRpYyBpbnQKQEAgLTEyLDcgKzEzLDcgQEAKIAlpZiAoc3RybGVuKG5hbWUpIDwgc2l6ZW9mKFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKGlzX3JlaXNlcmZzX3ByaXZfb2JqZWN0KGlub2RlKSkKKwlpZiAoSVNfUFJJVkFURShpbm9kZSkpCiAJCXJldHVybiAtRVBFUk07CiAKIAlyZXR1cm4gcmVpc2VyZnNfeGF0dHJfZ2V0KGlub2RlLCBuYW1lLCBidWZmZXIsIHNpemUpOwpAQCAtMjUsNDEgKzI2LDg0IEBACiAJaWYgKHN0cmxlbihuYW1lKSA8IHNpemVvZihYQVRUUl9TRUNVUklUWV9QUkVGSVgpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmIChpc19yZWlzZXJmc19wcml2X29iamVjdChpbm9kZSkpCisJaWYgKElTX1BSSVZBVEUoaW5vZGUpKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJcmV0dXJuIHJlaXNlcmZzX3hhdHRyX3NldChpbm9kZSwgbmFtZSwgYnVmZmVyLCBzaXplLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgc2VjdXJpdHlfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgc2l6ZV90IHNlY3VyaXR5X2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY2hhciAqbGlzdCwgc2l6ZV90IGxpc3RfbGVuLAorCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBuYW1lbGVuKQogewotCWlmIChzdHJsZW4obmFtZSkgPCBzaXplb2YoWEFUVFJfU0VDVVJJVFlfUFJFRklYKSkKLQkJcmV0dXJuIC1FSU5WQUw7CisJY29uc3Qgc2l6ZV90IGxlbiA9IG5hbWVsZW4gKyAxOwogCi0JaWYgKGlzX3JlaXNlcmZzX3ByaXZfb2JqZWN0KGlub2RlKSkKLQkJcmV0dXJuIC1FUEVSTTsKLQotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci1zZWN1cml0eV9saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCBjaGFyICpvdXQpCi17Ci0JaW50IGxlbiA9IG5hbWVsZW47Ci0KLQlpZiAoaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoaW5vZGUpKQorCWlmIChJU19QUklWQVRFKGlub2RlKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAob3V0KQotCQltZW1jcHkob3V0LCBuYW1lLCBsZW4pOworCWlmIChsaXN0ICYmIGxlbiA8PSBsaXN0X2xlbikgeworCQltZW1jcHkobGlzdCwgbmFtZSwgbmFtZWxlbik7CisJCWxpc3RbbmFtZWxlbl0gPSAnXDAnOworCX0KIAogCXJldHVybiBsZW47CiB9CiAKLXN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyIHNlY3VyaXR5X2hhbmRsZXIgPSB7CisvKiBJbml0aWFsaXplcyB0aGUgc2VjdXJpdHkgY29udGV4dCBmb3IgYSBuZXcgaW5vZGUgYW5kIHJldHVybnMgdGhlIG51bWJlcgorICogb2YgYmxvY2tzIG5lZWRlZCBmb3IgdGhlIHRyYW5zYWN0aW9uLiBJZiBzdWNjZXNzZnVsLCByZWlzZXJmc19zZWN1cml0eQorICogbXVzdCBiZSByZWxlYXNlZCB1c2luZyByZWlzZXJmc19zZWN1cml0eV9mcmVlIHdoZW4gdGhlIGNhbGxlciBpcyBkb25lLiAqLworaW50IHJlaXNlcmZzX3NlY3VyaXR5X2luaXQoc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQkgICBzdHJ1Y3QgcmVpc2VyZnNfc2VjdXJpdHlfaGFuZGxlICpzZWMpCit7CisJaW50IGJsb2NrcyA9IDA7CisJaW50IGVycm9yID0gc2VjdXJpdHlfaW5vZGVfaW5pdF9zZWN1cml0eShpbm9kZSwgZGlyLCAmc2VjLT5uYW1lLAorCQkJCQkJICZzZWMtPnZhbHVlLCAmc2VjLT5sZW5ndGgpOworCWlmIChlcnJvcikgeworCQlpZiAoZXJyb3IgPT0gLUVPUE5PVFNVUFApCisJCQllcnJvciA9IDA7CisKKwkJc2VjLT5uYW1lID0gTlVMTDsKKwkJc2VjLT52YWx1ZSA9IE5VTEw7CisJCXNlYy0+bGVuZ3RoID0gMDsKKwkJcmV0dXJuIGVycm9yOworCX0KKworCWlmIChzZWMtPmxlbmd0aCkgeworCQlibG9ja3MgPSByZWlzZXJmc194YXR0cl9qY3JlYXRlX25ibG9ja3MoaW5vZGUpICsKKwkJCSByZWlzZXJmc194YXR0cl9uYmxvY2tzKGlub2RlLCBzZWMtPmxlbmd0aCk7CisJCS8qIFdlIGRvbid0IHdhbnQgdG8gY291bnQgdGhlIGRpcmVjdG9yaWVzIHR3aWNlIGlmIHdlIGhhdmUKKwkJICogYSBkZWZhdWx0IEFDTC4gKi8KKwkJUkVJU0VSRlNfSShpbm9kZSktPmlfZmxhZ3MgfD0gaV9oYXNfeGF0dHJfZGlyOworCX0KKwlyZXR1cm4gYmxvY2tzOworfQorCitpbnQgcmVpc2VyZnNfc2VjdXJpdHlfd3JpdGUoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCisJCQkgICAgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCSAgICBzdHJ1Y3QgcmVpc2VyZnNfc2VjdXJpdHlfaGFuZGxlICpzZWMpCit7CisJaW50IGVycm9yOworCWlmIChzdHJsZW4oc2VjLT5uYW1lKSA8IHNpemVvZihYQVRUUl9TRUNVUklUWV9QUkVGSVgpKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWVycm9yID0gcmVpc2VyZnNfeGF0dHJfc2V0X2hhbmRsZSh0aCwgaW5vZGUsIHNlYy0+bmFtZSwgc2VjLT52YWx1ZSwKKwkJCQkJICBzZWMtPmxlbmd0aCwgWEFUVFJfQ1JFQVRFKTsKKwlpZiAoZXJyb3IgPT0gLUVOT0RBVEEgfHwgZXJyb3IgPT0gLUVPUE5PVFNVUFApCisJCWVycm9yID0gMDsKKworCXJldHVybiBlcnJvcjsKK30KKwordm9pZCByZWlzZXJmc19zZWN1cml0eV9mcmVlKHN0cnVjdCByZWlzZXJmc19zZWN1cml0eV9oYW5kbGUgKnNlYykKK3sKKwlrZnJlZShzZWMtPm5hbWUpOworCWtmcmVlKHNlYy0+dmFsdWUpOworCXNlYy0+bmFtZSA9IE5VTEw7CisJc2VjLT52YWx1ZSA9IE5VTEw7Cit9CisKK3N0cnVjdCB4YXR0cl9oYW5kbGVyIHJlaXNlcmZzX3hhdHRyX3NlY3VyaXR5X2hhbmRsZXIgPSB7CiAJLnByZWZpeCA9IFhBVFRSX1NFQ1VSSVRZX1BSRUZJWCwKIAkuZ2V0ID0gc2VjdXJpdHlfZ2V0LAogCS5zZXQgPSBzZWN1cml0eV9zZXQsCi0JLmRlbCA9IHNlY3VyaXR5X2RlbCwKIAkubGlzdCA9IHNlY3VyaXR5X2xpc3QsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMveGF0dHJfdHJ1c3RlZC5jIGIvZnMvcmVpc2VyZnMveGF0dHJfdHJ1c3RlZC5jCmluZGV4IDYwYWJlMmIuLmE4NjUwNDIgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyX3RydXN0ZWQuYworKysgYi9mcy9yZWlzZXJmcy94YXR0cl90cnVzdGVkLmMKQEAgLTEzLDEwICsxMyw3IEBACiAJaWYgKHN0cmxlbihuYW1lKSA8IHNpemVvZihYQVRUUl9UUlVTVEVEX1BSRUZJWCkpCiAJCXJldHVybiAtRUlOVkFMOwogCi0JaWYgKCFyZWlzZXJmc194YXR0cnMoaW5vZGUtPmlfc2IpKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlpZiAoIShjYXBhYmxlKENBUF9TWVNfQURNSU4pIHx8IGlzX3JlaXNlcmZzX3ByaXZfb2JqZWN0KGlub2RlKSkpCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pIHx8IElTX1BSSVZBVEUoaW5vZGUpKQogCQlyZXR1cm4gLUVQRVJNOwogCiAJcmV0dXJuIHJlaXNlcmZzX3hhdHRyX2dldChpbm9kZSwgbmFtZSwgYnVmZmVyLCBzaXplKTsKQEAgLTI5LDUwICsyNiwzMCBAQAogCWlmIChzdHJsZW4obmFtZSkgPCBzaXplb2YoWEFUVFJfVFJVU1RFRF9QUkVGSVgpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAotCWlmICghcmVpc2VyZnNfeGF0dHJzKGlub2RlLT5pX3NiKSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCi0JaWYgKCEoY2FwYWJsZShDQVBfU1lTX0FETUlOKSB8fCBpc19yZWlzZXJmc19wcml2X29iamVjdChpbm9kZSkpKQorCWlmICghY2FwYWJsZShDQVBfU1lTX0FETUlOKSB8fCBJU19QUklWQVRFKGlub2RlKSkKIAkJcmV0dXJuIC1FUEVSTTsKIAogCXJldHVybiByZWlzZXJmc194YXR0cl9zZXQoaW5vZGUsIG5hbWUsIGJ1ZmZlciwgc2l6ZSwgZmxhZ3MpOwogfQogCi1zdGF0aWMgaW50IHRydXN0ZWRfZGVsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUpCitzdGF0aWMgc2l6ZV90IHRydXN0ZWRfbGlzdChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjaGFyICpsaXN0LCBzaXplX3QgbGlzdF9zaXplLAorCQkJICAgY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IG5hbWVfbGVuKQogewotCWlmIChzdHJsZW4obmFtZSkgPCBzaXplb2YoWEFUVFJfVFJVU1RFRF9QUkVGSVgpKQotCQlyZXR1cm4gLUVJTlZBTDsKKwljb25zdCBzaXplX3QgbGVuID0gbmFtZV9sZW4gKyAxOwogCi0JaWYgKCFyZWlzZXJmc194YXR0cnMoaW5vZGUtPmlfc2IpKQotCQlyZXR1cm4gLUVPUE5PVFNVUFA7Ci0KLQlpZiAoIShjYXBhYmxlKENBUF9TWVNfQURNSU4pIHx8IGlzX3JlaXNlcmZzX3ByaXZfb2JqZWN0KGlub2RlKSkpCi0JCXJldHVybiAtRVBFUk07Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIGludAotdHJ1c3RlZF9saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGludCBuYW1lbGVuLCBjaGFyICpvdXQpCi17Ci0JaW50IGxlbiA9IG5hbWVsZW47Ci0KLQlpZiAoIXJlaXNlcmZzX3hhdHRycyhpbm9kZS0+aV9zYikpCisJaWYgKCFjYXBhYmxlKENBUF9TWVNfQURNSU4pIHx8IElTX1BSSVZBVEUoaW5vZGUpKQogCQlyZXR1cm4gMDsKIAotCWlmICghKGNhcGFibGUoQ0FQX1NZU19BRE1JTikgfHwgaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoaW5vZGUpKSkKLQkJcmV0dXJuIDA7Ci0KLQlpZiAob3V0KQotCQltZW1jcHkob3V0LCBuYW1lLCBsZW4pOwotCisJaWYgKGxpc3QgJiYgbGVuIDw9IGxpc3Rfc2l6ZSkgeworCQltZW1jcHkobGlzdCwgbmFtZSwgbmFtZV9sZW4pOworCQlsaXN0W25hbWVfbGVuXSA9ICdcMCc7CisJfQogCXJldHVybiBsZW47CiB9CiAKLXN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyIHRydXN0ZWRfaGFuZGxlciA9IHsKK3N0cnVjdCB4YXR0cl9oYW5kbGVyIHJlaXNlcmZzX3hhdHRyX3RydXN0ZWRfaGFuZGxlciA9IHsKIAkucHJlZml4ID0gWEFUVFJfVFJVU1RFRF9QUkVGSVgsCiAJLmdldCA9IHRydXN0ZWRfZ2V0LAogCS5zZXQgPSB0cnVzdGVkX3NldCwKLQkuZGVsID0gdHJ1c3RlZF9kZWwsCiAJLmxpc3QgPSB0cnVzdGVkX2xpc3QsCiB9OwpkaWZmIC0tZ2l0IGEvZnMvcmVpc2VyZnMveGF0dHJfdXNlci5jIGIvZnMvcmVpc2VyZnMveGF0dHJfdXNlci5jCmluZGV4IDEzODRlZmMuLmUzMjM4ZGMgMTAwNjQ0Ci0tLSBhL2ZzL3JlaXNlcmZzL3hhdHRyX3VzZXIuYworKysgYi9mcy9yZWlzZXJmcy94YXR0cl91c2VyLmMKQEAgLTYsMTAgKzYsNiBAQAogI2luY2x1ZGUgPGxpbnV4L3JlaXNlcmZzX3hhdHRyLmg+CiAjaW5jbHVkZSA8YXNtL3VhY2Nlc3MuaD4KIAotI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19QT1NJWF9BQ0wKLSMgaW5jbHVkZSA8bGludXgvcmVpc2VyZnNfYWNsLmg+Ci0jZW5kaWYKLQogc3RhdGljIGludAogdXNlcl9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLCBzaXplX3Qgc2l6ZSkKIHsKQEAgLTI1LDcgKzIxLDYgQEAKIHVzZXJfc2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IHZvaWQgKmJ1ZmZlciwKIAkgc2l6ZV90IHNpemUsIGludCBmbGFncykKIHsKLQogCWlmIChzdHJsZW4obmFtZSkgPCBzaXplb2YoWEFUVFJfVVNFUl9QUkVGSVgpKQogCQlyZXR1cm4gLUVJTlZBTDsKIApAQCAtMzQsMzMgKzI5LDIzIEBACiAJcmV0dXJuIHJlaXNlcmZzX3hhdHRyX3NldChpbm9kZSwgbmFtZSwgYnVmZmVyLCBzaXplLCBmbGFncyk7CiB9CiAKLXN0YXRpYyBpbnQgdXNlcl9kZWwoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSkKK3N0YXRpYyBzaXplX3QgdXNlcl9saXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNoYXIgKmxpc3QsIHNpemVfdCBsaXN0X3NpemUsCisJCQljb25zdCBjaGFyICpuYW1lLCBzaXplX3QgbmFtZV9sZW4pCiB7Ci0JaWYgKHN0cmxlbihuYW1lKSA8IHNpemVvZihYQVRUUl9VU0VSX1BSRUZJWCkpCi0JCXJldHVybiAtRUlOVkFMOworCWNvbnN0IHNpemVfdCBsZW4gPSBuYW1lX2xlbiArIDE7CiAKIAlpZiAoIXJlaXNlcmZzX3hhdHRyc191c2VyKGlub2RlLT5pX3NiKSkKLQkJcmV0dXJuIC1FT1BOT1RTVVBQOwotCXJldHVybiAwOwotfQotCi1zdGF0aWMgaW50Ci11c2VyX2xpc3Qoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgaW50IG5hbWVsZW4sIGNoYXIgKm91dCkKLXsKLQlpbnQgbGVuID0gbmFtZWxlbjsKLQlpZiAoIXJlaXNlcmZzX3hhdHRyc191c2VyKGlub2RlLT5pX3NiKSkKIAkJcmV0dXJuIDA7Ci0KLQlpZiAob3V0KQotCQltZW1jcHkob3V0LCBuYW1lLCBsZW4pOwotCisJaWYgKGxpc3QgJiYgbGVuIDw9IGxpc3Rfc2l6ZSkgeworCQltZW1jcHkobGlzdCwgbmFtZSwgbmFtZV9sZW4pOworCQlsaXN0W25hbWVfbGVuXSA9ICdcMCc7CisJfQogCXJldHVybiBsZW47CiB9CiAKLXN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyIHVzZXJfaGFuZGxlciA9IHsKK3N0cnVjdCB4YXR0cl9oYW5kbGVyIHJlaXNlcmZzX3hhdHRyX3VzZXJfaGFuZGxlciA9IHsKIAkucHJlZml4ID0gWEFUVFJfVVNFUl9QUkVGSVgsCiAJLmdldCA9IHVzZXJfZ2V0LAogCS5zZXQgPSB1c2VyX3NldCwKLQkuZGVsID0gdXNlcl9kZWwsCiAJLmxpc3QgPSB1c2VyX2xpc3QsCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtUC5oIGIvaW5jbHVkZS9kcm0vZHJtUC5oCmluZGV4IGMxOWE5M2MuLmM4YzQyMjEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvZHJtL2RybVAuaAorKysgYi9pbmNsdWRlL2RybS9kcm1QLmgKQEAgLTI4MSwxNiArMjgxLDE2IEBACiAKIHN0cnVjdCBkcm1faW9jdGxfZGVzYyB7CiAJdW5zaWduZWQgaW50IGNtZDsKLQlkcm1faW9jdGxfdCAqZnVuYzsKIAlpbnQgZmxhZ3M7CisJZHJtX2lvY3RsX3QgKmZ1bmM7CiB9OwogCiAvKioKICAqIENyZWF0ZXMgYSBkcml2ZXIgb3IgZ2VuZXJhbCBkcm1faW9jdGxfZGVzYyBhcnJheSBlbnRyeSBmb3IgdGhlIGdpdmVuCiAgKiBpb2N0bCwgZm9yIHVzZSBieSBkcm1faW9jdGwoKS4KICAqLwotI2RlZmluZSBEUk1fSU9DVExfREVGKGlvY3RsLCBmdW5jLCBmbGFncykgXAotCVtEUk1fSU9DVExfTlIoaW9jdGwpXSA9IHtpb2N0bCwgZnVuYywgZmxhZ3N9CisjZGVmaW5lIERSTV9JT0NUTF9ERUYoaW9jdGwsIF9mdW5jLCBfZmxhZ3MpIFwKKwlbRFJNX0lPQ1RMX05SKGlvY3RsKV0gPSB7LmNtZCA9IGlvY3RsLCAuZnVuYyA9IF9mdW5jLCAuZmxhZ3MgPSBfZmxhZ3N9CiAKIHN0cnVjdCBkcm1fbWFnaWNfZW50cnkgewogCXN0cnVjdCBsaXN0X2hlYWQgaGVhZDsKQEAgLTUyMywxOSArNTIzLDMyIEBACiAKIAogLyoqCisgKiBLZXJuZWwgc2lkZSBvZiBhIG1hcHBpbmcKKyAqLworc3RydWN0IGRybV9sb2NhbF9tYXAgeworCXJlc291cmNlX3NpemVfdCBvZmZzZXQ7CSAvKio8IFJlcXVlc3RlZCBwaHlzaWNhbCBhZGRyZXNzICgwIGZvciBTQVJFQSkqLworCXVuc2lnbmVkIGxvbmcgc2l6ZTsJIC8qKjwgUmVxdWVzdGVkIHBoeXNpY2FsIHNpemUgKGJ5dGVzKSAqLworCWVudW0gZHJtX21hcF90eXBlIHR5cGU7CSAvKio8IFR5cGUgb2YgbWVtb3J5IHRvIG1hcCAqLworCWVudW0gZHJtX21hcF9mbGFncyBmbGFnczsJIC8qKjwgRmxhZ3MgKi8KKwl2b2lkICpoYW5kbGU7CQkgLyoqPCBVc2VyLXNwYWNlOiAiSGFuZGxlIiB0byBwYXNzIHRvIG1tYXAoKSAqLworCQkJCSAvKio8IEtlcm5lbC1zcGFjZToga2VybmVsLXZpcnR1YWwgYWRkcmVzcyAqLworCWludCBtdHJyOwkJIC8qKjwgTVRSUiBzbG90IHVzZWQgKi8KK307CisKK3R5cGVkZWYgc3RydWN0IGRybV9sb2NhbF9tYXAgZHJtX2xvY2FsX21hcF90OworCisvKioKICAqIE1hcHBpbmdzIGxpc3QKICAqLwogc3RydWN0IGRybV9tYXBfbGlzdCB7CiAJc3RydWN0IGxpc3RfaGVhZCBoZWFkOwkJLyoqPCBsaXN0IGhlYWQgKi8KIAlzdHJ1Y3QgZHJtX2hhc2hfaXRlbSBoYXNoOwotCXN0cnVjdCBkcm1fbWFwICptYXA7CQkJLyoqPCBtYXBwaW5nICovCisJc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcDsJLyoqPCBtYXBwaW5nICovCiAJdWludDY0X3QgdXNlcl90b2tlbjsKIAlzdHJ1Y3QgZHJtX21hc3RlciAqbWFzdGVyOwogCXN0cnVjdCBkcm1fbW1fbm9kZSAqZmlsZV9vZmZzZXRfbm9kZTsJLyoqPCBmYWtlIG9mZnNldCAqLwogfTsKIAotdHlwZWRlZiBzdHJ1Y3QgZHJtX21hcCBkcm1fbG9jYWxfbWFwX3Q7Ci0KIC8qKgogICogQ29udGV4dCBoYW5kbGUgbGlzdAogICovCkBAIC01NjAsNyArNTczLDcgQEAKIAlkbWFfYWRkcl90IGJ1c19hZGRyOwogCWRtYV9hZGRyX3QgdGFibGVfbWFzazsKIAlzdHJ1Y3QgZHJtX2RtYV9oYW5kbGUgKnRhYmxlX2hhbmRsZTsKLQlkcm1fbG9jYWxfbWFwX3QgbWFwcGluZzsKKwlzdHJ1Y3QgZHJtX2xvY2FsX21hcCBtYXBwaW5nOwogCWludCB0YWJsZV9zaXplOwogfTsKIApAQCAtNjc1LDcgKzY4OCw2IEBACiAJaW50ICgqa2VybmVsX2NvbnRleHRfc3dpdGNoKSAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgaW50IG9sZCwKIAkJCQkgICAgICBpbnQgbmV3KTsKIAl2b2lkICgqa2VybmVsX2NvbnRleHRfc3dpdGNoX3VubG9jaykgKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwotCWludCAoKmRyaV9saWJyYXJ5X25hbWUpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBjaGFyICpidWYpOwogCiAJLyoqCiAJICogZ2V0X3ZibGFua19jb3VudGVyIC0gZ2V0IHJhdyBoYXJkd2FyZSB2YmxhbmsgY291bnRlcgpAQCAtNzQ3LDggKzc1OSw4IEBACiAJCQkJCXN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKIAl2b2lkICgqcmVjbGFpbV9idWZmZXJzX2lkbGVsb2NrZWQpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCQkgICAgc3RydWN0IGRybV9maWxlICpmaWxlX3ByaXYpOwotCXVuc2lnbmVkIGxvbmcgKCpnZXRfbWFwX29mcykgKHN0cnVjdCBkcm1fbWFwICogbWFwKTsKLQl1bnNpZ25lZCBsb25nICgqZ2V0X3JlZ19vZnMpIChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKKwlyZXNvdXJjZV9zaXplX3QgKCpnZXRfbWFwX29mcykgKHN0cnVjdCBkcm1fbG9jYWxfbWFwICogbWFwKTsKKwlyZXNvdXJjZV9zaXplX3QgKCpnZXRfcmVnX29mcykgKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOwogCXZvaWQgKCpzZXRfdmVyc2lvbikgKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkgICAgIHN0cnVjdCBkcm1fc2V0X3ZlcnNpb24gKnN2KTsKIApAQCAtOTgxLDcgKzk5Myw3IEBACiAJc2lnc2V0X3Qgc2lnbWFzazsKIAogCXN0cnVjdCBkcm1fZHJpdmVyICpkcml2ZXI7Ci0JZHJtX2xvY2FsX21hcF90ICphZ3BfYnVmZmVyX21hcDsKKwlzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqYWdwX2J1ZmZlcl9tYXA7CiAJdW5zaWduZWQgaW50IGFncF9idWZmZXJfdG9rZW47CiAJc3RydWN0IGRybV9taW5vciAqY29udHJvbDsJCS8qKjwgQ29udHJvbCBub2RlIGZvciBjYXJkICovCiAJc3RydWN0IGRybV9taW5vciAqcHJpbWFyeTsJCS8qKjwgcmVuZGVyIHR5cGUgcHJpbWFyeSBzY3JlZW4gaGVhZCAqLwpAQCAtMTA5OCw4ICsxMTEwLDggQEAKIGV4dGVybiBpbnQgZHJtX21tYXAoc3RydWN0IGZpbGUgKmZpbHAsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKIGV4dGVybiBpbnQgZHJtX21tYXBfbG9ja2VkKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7CiBleHRlcm4gdm9pZCBkcm1fdm1fb3Blbl9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZHJtX2NvcmVfZ2V0X21hcF9vZnMoc3RydWN0IGRybV9tYXAgKiBtYXApOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZHJtX2NvcmVfZ2V0X3JlZ19vZnMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gcmVzb3VyY2Vfc2l6ZV90IGRybV9jb3JlX2dldF9tYXBfb2ZzKHN0cnVjdCBkcm1fbG9jYWxfbWFwICogbWFwKTsKK2V4dGVybiByZXNvdXJjZV9zaXplX3QgZHJtX2NvcmVfZ2V0X3JlZ19vZnMoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gdW5zaWduZWQgaW50IGRybV9wb2xsKHN0cnVjdCBmaWxlICpmaWxwLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpOwogCiAJCQkJLyogTWVtb3J5IG1hbmFnZW1lbnQgc3VwcG9ydCAoZHJtX21lbW9yeS5oKSAqLwpAQCAtMTIwMiwxMyArMTIxNCwxMyBAQAogCQkJCS8qIEJ1ZmZlciBtYW5hZ2VtZW50IHN1cHBvcnQgKGRybV9idWZzLmgpICovCiBleHRlcm4gaW50IGRybV9hZGRidWZzX2FncChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2J1Zl9kZXNjICogcmVxdWVzdCk7CiBleHRlcm4gaW50IGRybV9hZGRidWZzX3BjaShzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2J1Zl9kZXNjICogcmVxdWVzdCk7Ci1leHRlcm4gaW50IGRybV9hZGRtYXAoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5zaWduZWQgaW50IG9mZnNldCwKK2V4dGVybiBpbnQgZHJtX2FkZG1hcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCByZXNvdXJjZV9zaXplX3Qgb2Zmc2V0LAogCQkgICAgICB1bnNpZ25lZCBpbnQgc2l6ZSwgZW51bSBkcm1fbWFwX3R5cGUgdHlwZSwKLQkJICAgICAgZW51bSBkcm1fbWFwX2ZsYWdzIGZsYWdzLCBkcm1fbG9jYWxfbWFwX3QgKiogbWFwX3B0cik7CisJCSAgICAgIGVudW0gZHJtX21hcF9mbGFncyBmbGFncywgc3RydWN0IGRybV9sb2NhbF9tYXAgKiptYXBfcHRyKTsKIGV4dGVybiBpbnQgZHJtX2FkZG1hcF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCB2b2lkICpkYXRhLAogCQkJICAgIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2KTsKLWV4dGVybiBpbnQgZHJtX3JtbWFwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIGRybV9sb2NhbF9tYXBfdCAqbWFwKTsKLWV4dGVybiBpbnQgZHJtX3JtbWFwX2xvY2tlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBkcm1fbG9jYWxfbWFwX3QgKm1hcCk7CitleHRlcm4gaW50IGRybV9ybW1hcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwKTsKK2V4dGVybiBpbnQgZHJtX3JtbWFwX2xvY2tlZChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LCBzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqbWFwKTsKIGV4dGVybiBpbnQgZHJtX3JtbWFwX2lvY3RsKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCQkgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gaW50IGRybV9hZGRidWZzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCkBAIC0xMjIyLDEwICsxMjM0LDEwIEBACiBleHRlcm4gaW50IGRybV9tYXBidWZzKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHZvaWQgKmRhdGEsCiAJCSAgICAgICBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gaW50IGRybV9vcmRlcih1bnNpZ25lZCBsb25nIHNpemUpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZHJtX2dldF9yZXNvdXJjZV9zdGFydChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorZXh0ZXJuIHJlc291cmNlX3NpemVfdCBkcm1fZ2V0X3Jlc291cmNlX3N0YXJ0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCisJCQkJCSAgICAgIHVuc2lnbmVkIGludCByZXNvdXJjZSk7CitleHRlcm4gcmVzb3VyY2Vfc2l6ZV90IGRybV9nZXRfcmVzb3VyY2VfbGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCiAJCQkJCSAgICB1bnNpZ25lZCBpbnQgcmVzb3VyY2UpOwotZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZHJtX2dldF9yZXNvdXJjZV9sZW4oc3RydWN0IGRybV9kZXZpY2UgKmRldiwKLQkJCQkJICB1bnNpZ25lZCBpbnQgcmVzb3VyY2UpOwogCiAJCQkJLyogRE1BIHN1cHBvcnQgKGRybV9kbWEuaCkgKi8KIGV4dGVybiBpbnQgZHJtX2RtYV9zZXR1cChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKQEAgLTEzMDEsNyArMTMxMyw3IEBACiBleHRlcm4gdm9pZCBkcm1fbWFzdGVyX3B1dChzdHJ1Y3QgZHJtX21hc3RlciAqKm1hc3Rlcik7CiBleHRlcm4gaW50IGRybV9nZXRfZGV2KHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50LAogCQkgICAgICAgc3RydWN0IGRybV9kcml2ZXIgKmRyaXZlcik7Ci1leHRlcm4gaW50IGRybV9wdXRfZGV2KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgZHJtX3B1dF9kZXYoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiBleHRlcm4gaW50IGRybV9wdXRfbWlub3Ioc3RydWN0IGRybV9taW5vciAqKm1pbm9yKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQgZHJtX2RlYnVnOwogCkBAIC0xMzExLDcgKzEzMjMsNyBAQAogCiBleHRlcm4gc3RydWN0IGlkciBkcm1fbWlub3JzX2lkcjsKIAotZXh0ZXJuIGRybV9sb2NhbF9tYXBfdCAqZHJtX2dldHNhcmVhKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHN0cnVjdCBkcm1fbG9jYWxfbWFwICpkcm1fZ2V0c2FyZWEoc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKIAkJCQkvKiBQcm9jIHN1cHBvcnQgKGRybV9wcm9jLmgpICovCiBleHRlcm4gaW50IGRybV9wcm9jX2luaXQoc3RydWN0IGRybV9taW5vciAqbWlub3IsIGludCBtaW5vcl9pZCwKQEAgLTE0NTMsMTIgKzE0NjUsMTIgQEAKIHZvaWQgZHJtX2dlbV9vcGVuKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2YXRlKTsKIHZvaWQgZHJtX2dlbV9yZWxlYXNlKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fZmlsZSAqZmlsZV9wcml2YXRlKTsKIAotZXh0ZXJuIHZvaWQgZHJtX2NvcmVfaW9yZW1hcChzdHJ1Y3QgZHJtX21hcCAqbWFwLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKLWV4dGVybiB2b2lkIGRybV9jb3JlX2lvcmVtYXBfd2Moc3RydWN0IGRybV9tYXAgKm1hcCwgc3RydWN0IGRybV9kZXZpY2UgKmRldik7Ci1leHRlcm4gdm9pZCBkcm1fY29yZV9pb3JlbWFwZnJlZShzdHJ1Y3QgZHJtX21hcCAqbWFwLCBzdHJ1Y3QgZHJtX2RldmljZSAqZGV2KTsKK2V4dGVybiB2b2lkIGRybV9jb3JlX2lvcmVtYXAoc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCwgc3RydWN0IGRybV9kZXZpY2UgKmRldik7CitleHRlcm4gdm9pZCBkcm1fY29yZV9pb3JlbWFwX3djKHN0cnVjdCBkcm1fbG9jYWxfbWFwICptYXAsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpOworZXh0ZXJuIHZvaWQgZHJtX2NvcmVfaW9yZW1hcGZyZWUoc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCwgc3RydWN0IGRybV9kZXZpY2UgKmRldik7CiAKLXN0YXRpYyBfX2lubGluZV9fIHN0cnVjdCBkcm1fbWFwICpkcm1fY29yZV9maW5kbWFwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsCi0JCQkJCQkgICB1bnNpZ25lZCBpbnQgdG9rZW4pCitzdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3QgZHJtX2xvY2FsX21hcCAqZHJtX2NvcmVfZmluZG1hcChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAorCQkJCQkJCSB1bnNpZ25lZCBpbnQgdG9rZW4pCiB7CiAJc3RydWN0IGRybV9tYXBfbGlzdCAqX2VudHJ5OwogCWxpc3RfZm9yX2VhY2hfZW50cnkoX2VudHJ5LCAmZGV2LT5tYXBsaXN0LCBoZWFkKQpAQCAtMTQ4NSw3ICsxNDk3LDcgQEAKIAlyZXR1cm4gcGNpX2ZpbmRfY2FwYWJpbGl0eShkZXYtPnBkZXYsIFBDSV9DQVBfSURfRVhQKTsKIH0KIAotc3RhdGljIF9faW5saW5lX18gdm9pZCBkcm1fY29yZV9kcm9wbWFwKHN0cnVjdCBkcm1fbWFwICptYXApCitzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRybV9jb3JlX2Ryb3BtYXAoc3RydWN0IGRybV9sb2NhbF9tYXAgKm1hcCkKIHsKIH0KIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9kcm0vZHJtX2NydGMuaCBiL2luY2x1ZGUvZHJtL2RybV9jcnRjLmgKaW5kZXggNWRlZDFhYy4uM2MxOTI0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX2NydGMuaAorKysgYi9pbmNsdWRlL2RybS9kcm1fY3J0Yy5oCkBAIC01NTAsNyArNTUwLDcgQEAKIAlpbnQgbWluX3dpZHRoLCBtaW5faGVpZ2h0OwogCWludCBtYXhfd2lkdGgsIG1heF9oZWlnaHQ7CiAJc3RydWN0IGRybV9tb2RlX2NvbmZpZ19mdW5jcyAqZnVuY3M7Ci0JdW5zaWduZWQgbG9uZyBmYl9iYXNlOworCXJlc291cmNlX3NpemVfdCBmYl9iYXNlOwogCiAJLyogcG9pbnRlcnMgdG8gc3RhbmRhcmQgcHJvcGVydGllcyAqLwogCXN0cnVjdCBsaXN0X2hlYWQgcHJvcGVydHlfYmxvYl9saXN0OwpAQCAtNjEzLDcgKzYxMyw4IEBACiBleHRlcm4gaW50IGRybV9tb2RlX2dyb3VwX2luaXRfbGVnYWN5X2dyb3VwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYsIHN0cnVjdCBkcm1fbW9kZV9ncm91cCAqZ3JvdXApOwogZXh0ZXJuIHN0cnVjdCBlZGlkICpkcm1fZ2V0X2VkaWQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3RvciwKIAkJCQkgc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKLWV4dGVybiB1bnNpZ25lZCBjaGFyICpkcm1fZG9fcHJvYmVfZGRjX2VkaWQoc3RydWN0IGkyY19hZGFwdGVyICphZGFwdGVyKTsKK2V4dGVybiBpbnQgZHJtX2RvX3Byb2JlX2RkY19lZGlkKHN0cnVjdCBpMmNfYWRhcHRlciAqYWRhcHRlciwKKwkJCQkgdW5zaWduZWQgY2hhciAqYnVmLCBpbnQgbGVuKTsKIGV4dGVybiBpbnQgZHJtX2FkZF9lZGlkX21vZGVzKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVjdCBlZGlkICplZGlkKTsKIGV4dGVybiB2b2lkIGRybV9tb2RlX3Byb2JlZF9hZGQoc3RydWN0IGRybV9jb25uZWN0b3IgKmNvbm5lY3Rvciwgc3RydWN0IGRybV9kaXNwbGF5X21vZGUgKm1vZGUpOwogZXh0ZXJuIHZvaWQgZHJtX21vZGVfcmVtb3ZlKHN0cnVjdCBkcm1fY29ubmVjdG9yICpjb25uZWN0b3IsIHN0cnVjdCBkcm1fZGlzcGxheV9tb2RlICptb2RlKTsKQEAgLTczMSw0ICs3MzIsNSBAQAogCQkJCSAgICB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CiBleHRlcm4gaW50IGRybV9tb2RlX2dhbW1hX3NldF9pb2N0bChzdHJ1Y3QgZHJtX2RldmljZSAqZGV2LAogCQkJCSAgICB2b2lkICpkYXRhLCBzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGVfcHJpdik7CitleHRlcm4gYm9vbCBkcm1fZGV0ZWN0X2hkbWlfbW9uaXRvcihzdHJ1Y3QgZWRpZCAqZWRpZCk7CiAjZW5kaWYgLyogX19EUk1fQ1JUQ19IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9vc19saW51eC5oIGIvaW5jbHVkZS9kcm0vZHJtX29zX2xpbnV4LmgKaW5kZXggOGRiZDI1Ny4uMDEzNTUxZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vZHJtX29zX2xpbnV4LmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX29zX2xpbnV4LmgKQEAgLTYsNiArNiwxOSBAQAogI2luY2x1ZGUgPGxpbnV4L2ludGVycnVwdC5oPgkvKiBGb3IgdGFzayBxdWV1ZSBzdXBwb3J0ICovCiAjaW5jbHVkZSA8bGludXgvZGVsYXkuaD4KIAorI2lmbmRlZiByZWFkcQorc3RhdGljIHU2NCByZWFkcSh2b2lkIF9faW9tZW0gKnJlZykKK3sKKwlyZXR1cm4gKCh1NjQpIHJlYWRsKHJlZykpIHwgKCgodTY0KSByZWFkbChyZWcgKyA0VUwpKSA8PCAzMik7Cit9CisKK3N0YXRpYyB2b2lkIHdyaXRlcSh1NjQgdmFsLCB2b2lkIF9faW9tZW0gKnJlZykKK3sKKwl3cml0ZWwodmFsICYgMHhmZmZmZmZmZiwgcmVnKTsKKwl3cml0ZWwodmFsID4+IDMyLCByZWcgKyAweDRVTCk7Cit9CisjZW5kaWYKKwogLyoqIEN1cnJlbnQgcHJvY2VzcyBJRCAqLwogI2RlZmluZSBEUk1fQ1VSUkVOVFBJRAkJCXRhc2tfcGlkX25yKGN1cnJlbnQpCiAjZGVmaW5lIERSTV9TVVNFUihwKQkJCWNhcGFibGUoQ0FQX1NZU19BRE1JTikKQEAgLTIzLDYgKzM2LDEyIEBACiAvKiogV3JpdGUgYSBkd29yZCBpbnRvIGEgTU1JTyByZWdpb24gKi8KICNkZWZpbmUgRFJNX1dSSVRFMzIobWFwLCBvZmZzZXQsIHZhbCkJd3JpdGVsKHZhbCwgKCh2b2lkIF9faW9tZW0gKikobWFwKS0+aGFuZGxlKSArIChvZmZzZXQpKQogLyoqIFJlYWQgbWVtb3J5IGJhcnJpZXIgKi8KKworLyoqIFJlYWQgYSBxd29yZCBmcm9tIGEgTU1JTyByZWdpb24gLSBiZSBjYXJlZnVsIHVzaW5nIHRoZXNlIHVubGVzcyB5b3UgcmVhbGx5IHVuZGVyc3RhbmQgdGhlbSAqLworI2RlZmluZSBEUk1fUkVBRDY0KG1hcCwgb2Zmc2V0KQkJcmVhZHEoKCh2b2lkIF9faW9tZW0gKikobWFwKS0+aGFuZGxlKSArIChvZmZzZXQpKQorLyoqIFdyaXRlIGEgcXdvcmQgaW50byBhIE1NSU8gcmVnaW9uICovCisjZGVmaW5lIERSTV9XUklURTY0KG1hcCwgb2Zmc2V0LCB2YWwpCXdyaXRlcSh2YWwsICgodm9pZCBfX2lvbWVtICopKG1hcCktPmhhbmRsZSkgKyAob2Zmc2V0KSkKKwogI2RlZmluZSBEUk1fUkVBRE1FTU9SWUJBUlJJRVIoKQkJcm1iKCkKIC8qKiBXcml0ZSBtZW1vcnkgYmFycmllciAqLwogI2RlZmluZSBEUk1fV1JJVEVNRU1PUllCQVJSSUVSKCkJd21iKCkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaCBiL2luY2x1ZGUvZHJtL2RybV9wY2lpZHMuaAppbmRleCA3NmM0YzgyLi4yZGY3NGViIDEwMDY0NAotLS0gYS9pbmNsdWRlL2RybS9kcm1fcGNpaWRzLmgKKysrIGIvaW5jbHVkZS9kcm0vZHJtX3BjaWlkcy5oCkBAIC0yMzksMTAgKzIzOSwxMjMgQEAKIAl7MHgxMDAyLCAweDc4MzUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlMzMDB8UkFERU9OX0lTX0lHUHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg3OTFlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNjkwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCiAJezB4MTAwMiwgMHg3OTFmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNjkwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg3OTNmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNjAwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg3OTQxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNjAwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg3OTQyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNjAwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB9LCBcCiAJezB4MTAwMiwgMHg3OTZjLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzQwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCiAJezB4MTAwMiwgMHg3OTZkLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzQwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCiAJezB4MTAwMiwgMHg3OTZlLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzQwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCiAJezB4MTAwMiwgMHg3OTZmLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JTNzQwfFJBREVPTl9JU19JR1B8UkFERU9OX05FV19NRU1NQVB8UkFERU9OX0lTX0lHUEdBUlR9LCBcCisJezB4MTAwMiwgMHg5NDAwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I2MDB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDAxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I2MDB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDAyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I2MDB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDAzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I2MDB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDA1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I2MDB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDBBLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I2MDB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDBCLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I2MDB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDBGLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1I2MDB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDQwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzcwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ0MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjc3MHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0NDIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3NzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDQ0LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzcwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ0NiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjc3MHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0NEEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3NzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ0QiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjc3MHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDRDLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzcwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ0RSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjc3MHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0NTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3NzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDUyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzcwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ1NiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjc3MHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0NUEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3NzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ1QiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjc3MHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDZBLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzcwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0NkIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3NzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ3QSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjc3MHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDdCLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzcwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0ODAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3MzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ4NywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjczMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0ODgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3MzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ4OSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjczMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDhGLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzMwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ5MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjczMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0OTEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3MzB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ5OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjczMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0OUMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3MzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NDlFLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzMwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTQ5RiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjczMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0QzAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MTB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NEMxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjEwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTRDMywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYxMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0QzQsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MTB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NEM1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjEwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTRDNiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYxMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0QzcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MTB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NEM4LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjEwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk0QzksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MTB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTRDQiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYxMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NENDLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjEwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTRDRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYxMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1MDAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2NzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTAxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjcwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTUwNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjY3MHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTA1LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjcwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTUwNiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjY3MHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTA3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjcwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTUwOCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjY3MHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTA5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjcwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1MEYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2NzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTExLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjcwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTUxNSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjY3MHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1MTcsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2NzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTE5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjcwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU0MCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjcxMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1NDEsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3MTB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTQyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzEwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU0RSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjcxMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1NEYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3MTB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTUyLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNzEwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1NTMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY3MTB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU1NSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjcxMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTgwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjMwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU4MSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYzMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTgzLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjMwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1ODYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTg3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjMwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU4OCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYzMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1ODksIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NThBLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjMwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU4QiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYzMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NThDLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjMwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU4RCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYzMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1OEUsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MzB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NThGLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjMwfFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1OTAsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MzV8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTkxLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjM1fFJBREVPTl9JU19NT0JJTElUWXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1OTMsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MzV8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU5NSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYzNXxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTk2LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjM1fFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU5NywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYzNXxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1OTgsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MzV8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NTk5LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjM1fFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTU5QiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYzNXxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NUMwLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTVDNSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1QzYsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MjB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NUM3LCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTVDOSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1QzIsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MjB8UkFERU9OX0lTX01PQklMSVRZfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTVDNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYyMHxSQURFT05fSVNfTU9CSUxJVFl8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NUNDLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTVDRCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SVjYyMHxSQURFT05fTkVXX01FTU1BUH0sIFwKKwl7MHgxMDAyLCAweDk1Q0UsIFBDSV9BTllfSUQsIFBDSV9BTllfSUQsIDAsIDAsIENISVBfUlY2MjB8UkFERU9OX05FV19NRU1NQVB9LCBcCisJezB4MTAwMiwgMHg5NUNGLCBQQ0lfQU5ZX0lELCBQQ0lfQU5ZX0lELCAwLCAwLCBDSElQX1JWNjIwfFJBREVPTl9ORVdfTUVNTUFQfSwgXAorCXsweDEwMDIsIDB4OTYxMCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzc4MHxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAorCXsweDEwMDIsIDB4OTYxMSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzc4MHxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAorCXsweDEwMDIsIDB4OTYxMiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzc4MHxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAorCXsweDEwMDIsIDB4OTYxMywgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzc4MHxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAorCXsweDEwMDIsIDB4OTYxNCwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzc4MHxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAorCXsweDEwMDIsIDB4OTYxNSwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzc4MHxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAorCXsweDEwMDIsIDB4OTYxNiwgUENJX0FOWV9JRCwgUENJX0FOWV9JRCwgMCwgMCwgQ0hJUF9SUzc4MHxSQURFT05fTkVXX01FTU1BUHxSQURFT05fSVNfSUdQfSwgXAogCXswLCAwLCAwfQogCiAjZGVmaW5lIHIxMjhfUENJX0lEUyBcCmRpZmYgLS1naXQgYS9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmggYi9pbmNsdWRlL2RybS9yYWRlb25fZHJtLmgKaW5kZXggNzJlY2Y2Ny4uZmUzZTNhNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9kcm0vcmFkZW9uX2RybS5oCisrKyBiL2luY2x1ZGUvZHJtL3JhZGVvbl9kcm0uaApAQCAtMzA2LDYgKzMwNiw4IEBACiAKICNkZWZpbmUgUkFERU9OX1NDUkFUQ0hfUkVHX09GRlNFVAkzMgogCisjZGVmaW5lIFI2MDBfU0NSQVRDSF9SRUdfT0ZGU0VUICAgICAgICAgMjU2CisKICNkZWZpbmUgUkFERU9OX05SX1NBUkVBX0NMSVBSRUNUUwkxMgogCiAvKiBUaGVyZSBhcmUgMiBoZWFwcyAobG9jYWwvR0FSVCkuICBFYWNoIHJlZ2lvbiB3aXRoaW4gYSBoZWFwIGlzIGEKQEAgLTUyOCw3ICs1MzAsOCBAQAogCQlSQURFT05fSU5JVF9DUCA9IDB4MDEsCiAJCVJBREVPTl9DTEVBTlVQX0NQID0gMHgwMiwKIAkJUkFERU9OX0lOSVRfUjIwMF9DUCA9IDB4MDMsCi0JCVJBREVPTl9JTklUX1IzMDBfQ1AgPSAweDA0CisJCVJBREVPTl9JTklUX1IzMDBfQ1AgPSAweDA0LAorCQlSQURFT05fSU5JVF9SNjAwX0NQID0gMHgwNQogCX0gZnVuYzsKIAl1bnNpZ25lZCBsb25nIHNhcmVhX3ByaXZfb2Zmc2V0OwogCWludCBpc19wY2k7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L0tidWlsZCBiL2luY2x1ZGUvbGludXgvS2J1aWxkCmluZGV4IGU5NTgxZmQuLmE2N2I2MjIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvS2J1aWxkCisrKyBiL2luY2x1ZGUvbGludXgvS2J1aWxkCkBAIC0xNTgsOCArMTU4LDYgQEAKIGhlYWRlci15ICs9IHVuLmgKIGhlYWRlci15ICs9IHV0aW1lLmgKIGhlYWRlci15ICs9IHZldGguaAotaGVhZGVyLXkgKz0gdmlkZW9fZGVjb2Rlci5oCi1oZWFkZXIteSArPSB2aWRlb19lbmNvZGVyLmgKIGhlYWRlci15ICs9IHZpZGVvdGV4dC5oCiBoZWFkZXIteSArPSB4MjUuaAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1kZWJ1Zy5oIGIvaW5jbHVkZS9saW51eC9kbWEtZGVidWcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yOGQ1M2NiCi0tLSAvZGV2L251bGwKKysrIGIvaW5jbHVkZS9saW51eC9kbWEtZGVidWcuaApAQCAtMCwwICsxLDE3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogQXV0aG9yOiBKb2VyZyBSb2VkZWwgPGpvZXJnLnJvZWRlbEBhbWQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisKKyNpZm5kZWYgX19ETUFfREVCVUdfSAorI2RlZmluZSBfX0RNQV9ERUJVR19ICisKKyNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgorCitzdHJ1Y3QgZGV2aWNlOworc3RydWN0IHNjYXR0ZXJsaXN0Oworc3RydWN0IGJ1c190eXBlOworCisjaWZkZWYgQ09ORklHX0RNQV9BUElfREVCVUcKKworZXh0ZXJuIHZvaWQgZG1hX2RlYnVnX2FkZF9idXMoc3RydWN0IGJ1c190eXBlICpidXMpOworCitleHRlcm4gdm9pZCBkbWFfZGVidWdfaW5pdCh1MzIgbnVtX2VudHJpZXMpOworCitleHRlcm4gdm9pZCBkZWJ1Z19kbWFfbWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgcGFnZSAqcGFnZSwKKwkJCSAgICAgICBzaXplX3Qgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgICBpbnQgZGlyZWN0aW9uLCBkbWFfYWRkcl90IGRtYV9hZGRyLAorCQkJICAgICAgIGJvb2wgbWFwX3NpbmdsZSk7CisKK2V4dGVybiB2b2lkIGRlYnVnX2RtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyLAorCQkJCSBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbiwgYm9vbCBtYXBfc2luZ2xlKTsKKworZXh0ZXJuIHZvaWQgZGVidWdfZG1hX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkgICAgIGludCBuZW50cywgaW50IG1hcHBlZF9lbnRzLCBpbnQgZGlyZWN0aW9uKTsKKworZXh0ZXJuIHZvaWQgZGVidWdfZG1hX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCisJCQkgICAgICAgaW50IG5lbGVtcywgaW50IGRpcik7CisKK2V4dGVybiB2b2lkIGRlYnVnX2RtYV9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJCSAgICAgZG1hX2FkZHJfdCBkbWFfYWRkciwgdm9pZCAqdmlydCk7CisKK2V4dGVybiB2b2lkIGRlYnVnX2RtYV9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkJICAgIHZvaWQgKnZpcnQsIGRtYV9hZGRyX3QgYWRkcik7CisKK2V4dGVybiB2b2lkIGRlYnVnX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAorCQkJCQkgIGludCBkaXJlY3Rpb24pOworCitleHRlcm4gdm9pZCBkZWJ1Z19kbWFfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJCQkgICAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKKworZXh0ZXJuIHZvaWQgZGVidWdfZG1hX3N5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJCQkJdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJCQlzaXplX3Qgc2l6ZSwKKwkJCQkJCWludCBkaXJlY3Rpb24pOworCitleHRlcm4gdm9pZCBkZWJ1Z19kbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQkgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJCQkgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkJCSAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKTsKKworZXh0ZXJuIHZvaWQgZGVidWdfZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCQkgICAgICBpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKTsKKworZXh0ZXJuIHZvaWQgZGVidWdfZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJCQkgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbik7CisKK2V4dGVybiB2b2lkIGRlYnVnX2RtYV9kdW1wX21hcHBpbmdzKHN0cnVjdCBkZXZpY2UgKmRldik7CisKKyNlbHNlIC8qIENPTkZJR19ETUFfQVBJX0RFQlVHICovCisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkbWFfZGVidWdfYWRkX2J1cyhzdHJ1Y3QgYnVzX3R5cGUgKmJ1cykKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRtYV9kZWJ1Z19pbml0KHUzMiBudW1fZW50cmllcykKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2RtYV9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSAgICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJCSAgICAgIGludCBkaXJlY3Rpb24sIGRtYV9hZGRyX3QgZG1hX2FkZHIsCisJCQkJICAgICAgYm9vbCBtYXBfc2luZ2xlKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfZG1hX3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGFkZHIsCisJCQkJCXNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uLAorCQkJCQlib29sIG1hcF9zaW5nbGUpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19kbWFfbWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCQkgICAgaW50IG5lbnRzLCBpbnQgbWFwcGVkX2VudHMsIGludCBkaXJlY3Rpb24pCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19kbWFfdW5tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsaXN0LAorCQkJCSAgICAgIGludCBuZWxlbXMsIGludCBkaXIpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19kbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCQkJICAgIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHZvaWQgKnZpcnQpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19kbWFfZnJlZV9jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJCQkgICB2b2lkICp2aXJ0LCBkbWFfYWRkcl90IGFkZHIpCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19kbWFfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQkgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJCQkJIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkJICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCQkJCSAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2RtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJCSAgICAgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJCQkgICAgICAgc2l6ZV90IHNpemUsCisJCQkJCQkgICAgICAgaW50IGRpcmVjdGlvbikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2RtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJCQkgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCQkJCQkgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorCQkJCQkJCSAgc2l6ZV90IHNpemUsCisJCQkJCQkJICBpbnQgZGlyZWN0aW9uKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJCQkJICAgICBpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKQoreworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkJCQkJaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbikKK3sKK30KKworc3RhdGljIGlubGluZSB2b2lkIGRlYnVnX2RtYV9kdW1wX21hcHBpbmdzKHN0cnVjdCBkZXZpY2UgKmRldikKK3sKK30KKworI2VuZGlmIC8qIENPTkZJR19ETUFfQVBJX0RFQlVHICovCisKKyNlbmRpZiAvKiBfX0RNQV9ERUJVR19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmggYi9pbmNsdWRlL2xpbnV4L2RtYS1tYXBwaW5nLmgKaW5kZXggYmE5MTE0ZS4uZDdkMDkwZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9kbWEtbWFwcGluZy5oCisrKyBiL2luY2x1ZGUvbGludXgvZG1hLW1hcHBpbmcuaApAQCAtMyw2ICszLDggQEAKIAogI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgogI2luY2x1ZGUgPGxpbnV4L2Vyci5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1hdHRycy5oPgorI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CiAKIC8qIFRoZXNlIGRlZmluaXRpb25zIG1pcnJvciB0aG9zZSBpbiBwY2kuaCwgc28gdGhleSBjYW4gYmUgdXNlZAogICogaW50ZXJjaGFuZ2VhYmx5IHdpdGggdGhlaXIgUENJXyBjb3VudGVycGFydHMgKi8KQEAgLTEzLDYgKzE1LDUyIEBACiAJRE1BX05PTkUgPSAzLAogfTsKIAorc3RydWN0IGRtYV9tYXBfb3BzIHsKKwl2b2lkKiAoKmFsbG9jX2NvaGVyZW50KShzdHJ1Y3QgZGV2aWNlICpkZXYsIHNpemVfdCBzaXplLAorCQkJCWRtYV9hZGRyX3QgKmRtYV9oYW5kbGUsIGdmcF90IGdmcCk7CisJdm9pZCAoKmZyZWVfY29oZXJlbnQpKHN0cnVjdCBkZXZpY2UgKmRldiwgc2l6ZV90IHNpemUsCisJCQkgICAgICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKTsKKwlkbWFfYWRkcl90ICgqbWFwX3BhZ2UpKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCSAgICAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycyk7CisJdm9pZCAoKnVubWFwX3BhZ2UpKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCSAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKKwlpbnQgKCptYXBfc2cpKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKKwkJICAgICAgaW50IG5lbnRzLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCSAgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKKwl2b2lkICgqdW5tYXBfc2cpKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCSBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCisJCQkgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKKwl2b2lkICgqc3luY19zaW5nbGVfZm9yX2NwdSkoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsIHNpemVfdCBzaXplLAorCQkJCSAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpOworCXZvaWQgKCpzeW5jX3NpbmdsZV9mb3JfZGV2aWNlKShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCisJCQkJICAgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7CisJdm9pZCAoKnN5bmNfc2luZ2xlX3JhbmdlX2Zvcl9jcHUpKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQkJICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJCSAgdW5zaWduZWQgbG9uZyBvZmZzZXQsCisJCQkJCSAgc2l6ZV90IHNpemUsCisJCQkJCSAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTsKKwl2b2lkICgqc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZSkoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCQkgICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwKKwkJCQkJICAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkJICAgICBzaXplX3Qgc2l6ZSwKKwkJCQkJICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpOworCXZvaWQgKCpzeW5jX3NnX2Zvcl9jcHUpKHN0cnVjdCBkZXZpY2UgKmRldiwKKwkJCQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLCBpbnQgbmVudHMsCisJCQkJZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTsKKwl2b2lkICgqc3luY19zZ19mb3JfZGV2aWNlKShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJICAgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLAorCQkJCSAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7CisJaW50ICgqbWFwcGluZ19lcnJvcikoc3RydWN0IGRldmljZSAqZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKTsKKwlpbnQgKCpkbWFfc3VwcG9ydGVkKShzdHJ1Y3QgZGV2aWNlICpkZXYsIHU2NCBtYXNrKTsKKwlpbnQgaXNfcGh5czsKK307CisKICNkZWZpbmUgRE1BX0JJVF9NQVNLKG4pCSgoKG4pID09IDY0KSA/IH4wVUxMIDogKCgxVUxMPDwobikpLTEpKQogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9kbWFyLmggYi9pbmNsdWRlL2xpbnV4L2RtYXIuaAppbmRleCBmMjg0NDA3Li4yZjM0Mjc0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2RtYXIuaAorKysgYi9pbmNsdWRlL2xpbnV4L2RtYXIuaApAQCAtMjQsMTAgKzI0LDEwIEBACiAjaW5jbHVkZSA8bGludXgvYWNwaS5oPgogI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CiAjaW5jbHVkZSA8bGludXgvbXNpLmg+CisjaW5jbHVkZSA8bGludXgvaXJxcmV0dXJuLmg+CiAKLSNpZiBkZWZpbmVkKENPTkZJR19ETUFSKSB8fCBkZWZpbmVkKENPTkZJR19JTlRSX1JFTUFQKQogc3RydWN0IGludGVsX2lvbW11OwotCisjaWYgZGVmaW5lZChDT05GSUdfRE1BUikgfHwgZGVmaW5lZChDT05GSUdfSU5UUl9SRU1BUCkKIHN0cnVjdCBkbWFyX2RyaGRfdW5pdCB7CiAJc3RydWN0IGxpc3RfaGVhZCBsaXN0OwkJLyogbGlzdCBvZiBkcmhkIHVuaXRzCSovCiAJc3RydWN0ICBhY3BpX2RtYXJfaGVhZGVyICpoZHI7CS8qIEFDUEkgaGVhZGVyCQkqLwpAQCAtNDksNyArNDksNyBAQAogCiAvKiBJbnRlbCBJT01NVSBkZXRlY3Rpb24gKi8KIGV4dGVybiB2b2lkIGRldGVjdF9pbnRlbF9pb21tdSh2b2lkKTsKLQorZXh0ZXJuIGludCBlbmFibGVfZHJoZF9mYXVsdF9oYW5kbGluZyh2b2lkKTsKIAogZXh0ZXJuIGludCBwYXJzZV9pb2FwaWNzX3VuZGVyX2lyKHZvaWQpOwogZXh0ZXJuIGludCBhbGxvY19pb21tdShzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKik7CkBAIC02MywxMiArNjMsMTIgQEAKIHsKIAlyZXR1cm4gLUVOT0RFVjsKIH0KK3N0YXRpYyBpbmxpbmUgaW50IGVuYWJsZV9kcmhkX2ZhdWx0X2hhbmRsaW5nKHZvaWQpCit7CisJcmV0dXJuIC0xOworfQogI2VuZGlmIC8qICFDT05GSUdfRE1BUiAmJiAhQ09ORklHX0lOVFJfUkVNQVAgKi8KIAotI2lmZGVmIENPTkZJR19JTlRSX1JFTUFQCi1leHRlcm4gaW50IGludHJfcmVtYXBwaW5nX2VuYWJsZWQ7Ci1leHRlcm4gaW50IGVuYWJsZV9pbnRyX3JlbWFwcGluZyhpbnQpOwotCiBzdHJ1Y3QgaXJ0ZSB7CiAJdW5pb24gewogCQlzdHJ1Y3QgewpAQCAtOTcsNiArOTcsMTAgQEAKIAkJX191NjQgaGlnaDsKIAl9OwogfTsKKyNpZmRlZiBDT05GSUdfSU5UUl9SRU1BUAorZXh0ZXJuIGludCBpbnRyX3JlbWFwcGluZ19lbmFibGVkOworZXh0ZXJuIGludCBlbmFibGVfaW50cl9yZW1hcHBpbmcoaW50KTsKKwogZXh0ZXJuIGludCBnZXRfaXJ0ZShpbnQgaXJxLCBzdHJ1Y3QgaXJ0ZSAqZW50cnkpOwogZXh0ZXJuIGludCBtb2RpZnlfaXJ0ZShpbnQgaXJxLCBzdHJ1Y3QgaXJ0ZSAqaXJ0ZV9tb2RpZmllZCk7CiBleHRlcm4gaW50IGFsbG9jX2lydGUoc3RydWN0IGludGVsX2lvbW11ICppb21tdSwgaW50IGlycSwgdTE2IGNvdW50KTsKQEAgLTExMSwxNCArMTE1LDQwIEBACiBleHRlcm4gc3RydWN0IGludGVsX2lvbW11ICptYXBfZGV2X3RvX2lyKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogZXh0ZXJuIHN0cnVjdCBpbnRlbF9pb21tdSAqbWFwX2lvYXBpY190b19pcihpbnQgYXBpYyk7CiAjZWxzZQorc3RhdGljIGlubGluZSBpbnQgYWxsb2NfaXJ0ZShzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11LCBpbnQgaXJxLCB1MTYgY291bnQpCit7CisJcmV0dXJuIC0xOworfQorc3RhdGljIGlubGluZSBpbnQgbW9kaWZ5X2lydGUoaW50IGlycSwgc3RydWN0IGlydGUgKmlydGVfbW9kaWZpZWQpCit7CisJcmV0dXJuIC0xOworfQorc3RhdGljIGlubGluZSBpbnQgZnJlZV9pcnRlKGludCBpcnEpCit7CisJcmV0dXJuIC0xOworfQorc3RhdGljIGlubGluZSBpbnQgbWFwX2lycV90b19pcnRlX2hhbmRsZShpbnQgaXJxLCB1MTYgKnN1Yl9oYW5kbGUpCit7CisJcmV0dXJuIC0xOworfQorc3RhdGljIGlubGluZSBpbnQgc2V0X2lydGVfaXJxKGludCBpcnEsIHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUsIHUxNiBpbmRleCwKKwkJCSAgICAgICB1MTYgc3ViX2hhbmRsZSkKK3sKKwlyZXR1cm4gLTE7Cit9CitzdGF0aWMgaW5saW5lIHN0cnVjdCBpbnRlbF9pb21tdSAqbWFwX2Rldl90b19pcihzdHJ1Y3QgcGNpX2RldiAqZGV2KQoreworCXJldHVybiBOVUxMOworfQorc3RhdGljIGlubGluZSBzdHJ1Y3QgaW50ZWxfaW9tbXUgKm1hcF9pb2FwaWNfdG9faXIoaW50IGFwaWMpCit7CisJcmV0dXJuIE5VTEw7Cit9CiAjZGVmaW5lIGlycV9yZW1hcHBlZChpcnEpCQkoMCkKICNkZWZpbmUgZW5hYmxlX2ludHJfcmVtYXBwaW5nKG1vZGUpCSgtMSkKICNkZWZpbmUgaW50cl9yZW1hcHBpbmdfZW5hYmxlZAkJKDApCiAjZW5kaWYKIAotI2lmZGVmIENPTkZJR19ETUFSCi1leHRlcm4gY29uc3QgY2hhciAqZG1hcl9nZXRfZmF1bHRfcmVhc29uKHU4IGZhdWx0X3JlYXNvbik7Ci0KIC8qIENhbid0IHVzZSB0aGUgY29tbW9uIE1TSSBpbnRlcnJ1cHQgZnVuY3Rpb25zCiAgKiBzaW5jZSBETUFSIGlzIG5vdCBhIHBjaSBkZXZpY2UKICAqLwpAQCAtMTI3LDggKzE1NywxMCBAQAogZXh0ZXJuIHZvaWQgZG1hcl9tc2lfcmVhZChpbnQgaXJxLCBzdHJ1Y3QgbXNpX21zZyAqbXNnKTsKIGV4dGVybiB2b2lkIGRtYXJfbXNpX3dyaXRlKGludCBpcnEsIHN0cnVjdCBtc2lfbXNnICptc2cpOwogZXh0ZXJuIGludCBkbWFyX3NldF9pbnRlcnJ1cHQoc3RydWN0IGludGVsX2lvbW11ICppb21tdSk7CitleHRlcm4gaXJxcmV0dXJuX3QgZG1hcl9mYXVsdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogZXh0ZXJuIGludCBhcmNoX3NldHVwX2RtYXJfbXNpKHVuc2lnbmVkIGludCBpcnEpOwogCisjaWZkZWYgQ09ORklHX0RNQVIKIGV4dGVybiBpbnQgaW9tbXVfZGV0ZWN0ZWQsIG5vX2lvbW11OwogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgZG1hcl9ybXJyX3VuaXRzOwogc3RydWN0IGRtYXJfcm1ycl91bml0IHsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZG1pLmggYi9pbmNsdWRlL2xpbnV4L2RtaS5oCmluZGV4IGQ3NDFiOWMuLmJiNTQ4OWMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZG1pLmgKKysrIGIvaW5jbHVkZS9saW51eC9kbWkuaApAQCAtNDcsNyArNDcsOCBAQAogZXh0ZXJuIGludCBkbWlfbmFtZV9pbl92ZW5kb3JzKGNvbnN0IGNoYXIgKnN0cik7CiBleHRlcm4gaW50IGRtaV9uYW1lX2luX3NlcmlhbChjb25zdCBjaGFyICpzdHIpOwogZXh0ZXJuIGludCBkbWlfYXZhaWxhYmxlOwotZXh0ZXJuIGludCBkbWlfd2Fsayh2b2lkICgqZGVjb2RlKShjb25zdCBzdHJ1Y3QgZG1pX2hlYWRlciAqKSk7CitleHRlcm4gaW50IGRtaV93YWxrKHZvaWQgKCpkZWNvZGUpKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICosIHZvaWQgKiksCisJdm9pZCAqcHJpdmF0ZV9kYXRhKTsKIGV4dGVybiBib29sIGRtaV9tYXRjaChlbnVtIGRtaV9maWVsZCBmLCBjb25zdCBjaGFyICpzdHIpOwogCiAjZWxzZQpAQCAtNjEsOCArNjIsOCBAQAogc3RhdGljIGlubGluZSBpbnQgZG1pX25hbWVfaW5fdmVuZG9ycyhjb25zdCBjaGFyICpzKSB7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIGludCBkbWlfbmFtZV9pbl9zZXJpYWwoY29uc3QgY2hhciAqcykgeyByZXR1cm4gMDsgfQogI2RlZmluZSBkbWlfYXZhaWxhYmxlIDAKLXN0YXRpYyBpbmxpbmUgaW50IGRtaV93YWxrKHZvaWQgKCpkZWNvZGUpKGNvbnN0IHN0cnVjdCBkbWlfaGVhZGVyICopKQotCXsgcmV0dXJuIC0xOyB9CitzdGF0aWMgaW5saW5lIGludCBkbWlfd2Fsayh2b2lkICgqZGVjb2RlKShjb25zdCBzdHJ1Y3QgZG1pX2hlYWRlciAqLCB2b2lkICopLAorCXZvaWQgKnByaXZhdGVfZGF0YSkgeyByZXR1cm4gLTE7IH0KIHN0YXRpYyBpbmxpbmUgYm9vbCBkbWlfbWF0Y2goZW51bSBkbWlfZmllbGQgZiwgY29uc3QgY2hhciAqc3RyKQogCXsgcmV0dXJuIGZhbHNlOyB9CiBzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBkbWlfc3lzdGVtX2lkICoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCA0MjQzNmFlLi44N2U3YmZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9mcy5oCkBAIC04NDksNyArODQ5LDcgQEAKICNkZWZpbmUgZl9kZW50cnkJZl9wYXRoLmRlbnRyeQogI2RlZmluZSBmX3Zmc21udAlmX3BhdGgubW50CiAJY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucwkqZl9vcDsKLQlzcGlubG9ja190CQlmX2xvY2s7ICAvKiBmX2VwX2xpbmtzLCBmX2ZsYWdzICovCisJc3BpbmxvY2tfdAkJZl9sb2NrOyAgLyogZl9lcF9saW5rcywgZl9mbGFncywgbm8gSVJRICovCiAJYXRvbWljX2xvbmdfdAkJZl9jb3VudDsKIAl1bnNpZ25lZCBpbnQgCQlmX2ZsYWdzOwogCWZtb2RlX3QJCQlmX21vZGU7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oIGIvaW5jbHVkZS9saW51eC9mdHJhY2UuaAppbmRleCA2Nzc0MzJiLi5hN2Y4MTM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2Z0cmFjZS5oCisrKyBiL2luY2x1ZGUvbGludXgvZnRyYWNlLmgKQEAgLTM4MCw2ICszODAsMzAgQEAKICNpZmRlZiBDT05GSUdfRlVOQ1RJT05fR1JBUEhfVFJBQ0VSCiAKIC8qCisgKiBTdGFjayBvZiByZXR1cm4gYWRkcmVzc2VzIGZvciBmdW5jdGlvbnMKKyAqIG9mIGEgdGhyZWFkLgorICogVXNlZCBpbiBzdHJ1Y3QgdGhyZWFkX2luZm8KKyAqLworc3RydWN0IGZ0cmFjZV9yZXRfc3RhY2sgeworCXVuc2lnbmVkIGxvbmcgcmV0OworCXVuc2lnbmVkIGxvbmcgZnVuYzsKKwl1bnNpZ25lZCBsb25nIGxvbmcgY2FsbHRpbWU7Cit9OworCisvKgorICogUHJpbWFyeSBoYW5kbGVyIG9mIGEgZnVuY3Rpb24gcmV0dXJuLgorICogSXQgcmVsYXlzIG9uIGZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlci4KKyAqIERlZmluZWQgaW4gZW50cnlfMzIvNjQuUworICovCitleHRlcm4gdm9pZCByZXR1cm5fdG9faGFuZGxlcih2b2lkKTsKKworZXh0ZXJuIGludAorZnRyYWNlX3B1c2hfcmV0dXJuX3RyYWNlKHVuc2lnbmVkIGxvbmcgcmV0LCB1bnNpZ25lZCBsb25nIGxvbmcgdGltZSwKKwkJCSB1bnNpZ25lZCBsb25nIGZ1bmMsIGludCAqZGVwdGgpOworZXh0ZXJuIHZvaWQKK2Z0cmFjZV9wb3BfcmV0dXJuX3RyYWNlKHN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0ICp0cmFjZSwgdW5zaWduZWQgbG9uZyAqcmV0KTsKKworLyoKICAqIFNvbWV0aW1lcyB3ZSBkb24ndCB3YW50IHRvIHRyYWNlIGEgZnVuY3Rpb24gd2l0aCB0aGUgZnVuY3Rpb24KICAqIGdyYXBoIHRyYWNlciBidXQgd2Ugd2FudCB0aGVtIHRvIGtlZXAgdHJhY2VkIGJ5IHRoZSB1c3VhbCBmdW5jdGlvbgogICogdHJhY2VyIGlmIHRoZSBmdW5jdGlvbiBncmFwaCB0cmFjZXIgaXMgbm90IGNvbmZpZ3VyZWQuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oIGIvaW5jbHVkZS9saW51eC9pMmMtaWQuaAppbmRleCAxZmZjMjNiLi5mMjc2MDRhIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2kyYy1pZC5oCisrKyBiL2luY2x1ZGUvbGludXgvaTJjLWlkLmgKQEAgLTcxLDYgKzcxLDcgQEAKICNkZWZpbmUgSTJDX0RSSVZFUklEX1ZQMjdTTVBYCTkzCS8qIFBhbmFzb25pYyBWUDI3cyB0dW5lciBpbnRlcm5hbCBNUFggKi8KICNkZWZpbmUgSTJDX0RSSVZFUklEX001Mjc5MCAJOTUgICAgICAvKiBNaXRzdWJpc2hpIE01Mjc5MFNQL0ZQIEFWIHN3aXRjaCAqLwogI2RlZmluZSBJMkNfRFJJVkVSSURfQ1M1MzQ1CTk2CS8qIGNzNTM0NSBhdWRpbyBwcm9jZXNzb3IJKi8KKyNkZWZpbmUgSTJDX0RSSVZFUklEX0FVODUyMgk5NwkvKiBBdXZpdGVrIGF1ODUyMiAgICAgICAqLwogCiAjZGVmaW5lIEkyQ19EUklWRVJJRF9PVjc2NzAgMTA0OAkvKiBPbW5pdmlzaW9uIDc2NzAgY2FtZXJhICovCiAKQEAgLTg3LDYgKzg4LDcgQEAKICNkZWZpbmUgSTJDX0hXX0JfQ1gyMzQxWAkweDAxMDAyMCAvKiBDb25leGFudCBDWDIzNDFYIE1QRUcgZW5jb2RlciBjYXJkcyAqLwogI2RlZmluZSBJMkNfSFdfQl9DWDIzODg1CTB4MDEwMDIyIC8qIGNvbmV4YW50IDIzODg1IGJhc2VkIHR2IGNhcmRzIChidXMxKSAqLwogI2RlZmluZSBJMkNfSFdfQl9BVTA4MjgJCTB4MDEwMDIzIC8qIGF1dml0ZWsgYXUwODI4IHVzYiBicmlkZ2UgKi8KKyNkZWZpbmUgSTJDX0hXX0JfSERQVlIJCTB4MDEwMDI1IC8qIEhhdXBwYXVnZSBIRCBQVlIgKi8KIAogLyogLS0tIFNHSSBhZGFwdGVycwkJCQkJCQkqLwogI2RlZmluZSBJMkNfSFdfU0dJX1ZJTk8JCTB4MTYwMDAwCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lkZS5oIGIvaW5jbHVkZS9saW51eC9pZGUuaAppbmRleCA4NTRlYmE4Li5kNWQ4MzIyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lkZS5oCisrKyBiL2luY2x1ZGUvbGludXgvaWRlLmgKQEAgLTQwLDYgKzQwLDEzIEBACiAjZGVmaW5lIEVSUk9SX1JFU0VUCTMJLyogUmVzZXQgY29udHJvbGxlciBldmVyeSA0dGggcmV0cnkgKi8KICNkZWZpbmUgRVJST1JfUkVDQUwJMQkvKiBSZWNhbGlicmF0ZSBldmVyeSAybmQgcmV0cnkgKi8KIAorLyogRXJyb3IgY29kZXMgcmV0dXJuZWQgaW4gcnEtPmVycm9ycyB0byB0aGUgaGlnaGVyIHBhcnQgb2YgdGhlIGRyaXZlci4gKi8KK2VudW0geworCUlERV9EUlZfRVJST1JfR0VORVJBTAk9IDEwMSwKKwlJREVfRFJWX0VSUk9SX0ZJTEVNQVJLCT0gMTAyLAorCUlERV9EUlZfRVJST1JfRU9ECT0gMTAzLAorfTsKKwogLyoKICAqIERlZmluaXRpb25zIGZvciBhY2Nlc3NpbmcgSURFIGNvbnRyb2xsZXIgcmVnaXN0ZXJzCiAgKi8KQEAgLTE5MywyNiArMjAwLDggQEAKIAlody0+aW9fcG9ydHMuY3RsX2FkZHIgPSBjdGxfYWRkcjsKIH0KIAotI2lmIGRlZmluZWQoQ09ORklHX0FSTSkgfHwgZGVmaW5lZChDT05GSUdfTTY4SykgfHwgZGVmaW5lZChDT05GSUdfTUlQUykgfHwgXAotICAgIGRlZmluZWQoQ09ORklHX1BBUklTQykgfHwgZGVmaW5lZChDT05GSUdfUFBDKSB8fCBkZWZpbmVkKENPTkZJR19TUEFSQykKLSNpbmNsdWRlIDxhc20vaWRlLmg+Ci0jZWxzZQotI2luY2x1ZGUgPGFzbS1nZW5lcmljL2lkZV9pb3BzLmg+Ci0jZW5kaWYKLQogI2RlZmluZSBNQVhfSFdJRlMJMTAKIAotLyogQ3VycmVudGx5IG9ubHkgbTY4aywgYXB1cyBhbmQgbTh4eCBuZWVkIGl0ICovCi0jaWZuZGVmIElERV9BUkNIX0FDS19JTlRSCi0jIGRlZmluZSBpZGVfYWNrX2ludHIoaHdpZikgKDEpCi0jZW5kaWYKLQotLyogQ3VycmVudGx5IG9ubHkgQXRhcmkgbmVlZHMgaXQgKi8KLSNpZm5kZWYgSURFX0FSQ0hfTE9DSwotIyBkZWZpbmUgaWRlX3JlbGVhc2VfbG9jaygpCQkJZG8ge30gd2hpbGUgKDApCi0jIGRlZmluZSBpZGVfZ2V0X2xvY2soaGRsciwgZGF0YSkJCWRvIHt9IHdoaWxlICgwKQotI2VuZGlmIC8qIElERV9BUkNIX0xPQ0sgKi8KLQogLyoKICAqIE5vdyBmb3IgdGhlIGRhdGEgd2UgbmVlZCB0byBtYWludGFpbiBwZXItZHJpdmU6ICBpZGVfZHJpdmVfdAogICovCkBAIC0yNTIsNTYgKzI0MSw1MiBAQAogCiBlbnVtIHsKIAlJREVfVEZMQUdfTEJBNDgJCQk9ICgxIDw8IDApLAotCUlERV9URkxBR19GTEFHR0VECQk9ICgxIDw8IDIpLAotCUlERV9URkxBR19PVVRfREFUQQkJPSAoMSA8PCAzKSwKLQlJREVfVEZMQUdfT1VUX0hPQl9GRUFUVVJFCT0gKDEgPDwgNCksCi0JSURFX1RGTEFHX09VVF9IT0JfTlNFQ1QJCT0gKDEgPDwgNSksCi0JSURFX1RGTEFHX09VVF9IT0JfTEJBTAkJPSAoMSA8PCA2KSwKLQlJREVfVEZMQUdfT1VUX0hPQl9MQkFNCQk9ICgxIDw8IDcpLAotCUlERV9URkxBR19PVVRfSE9CX0xCQUgJCT0gKDEgPDwgOCksCisJSURFX1RGTEFHX09VVF9IT0JfRkVBVFVSRQk9ICgxIDw8IDEpLAorCUlERV9URkxBR19PVVRfSE9CX05TRUNUCQk9ICgxIDw8IDIpLAorCUlERV9URkxBR19PVVRfSE9CX0xCQUwJCT0gKDEgPDwgMyksCisJSURFX1RGTEFHX09VVF9IT0JfTEJBTQkJPSAoMSA8PCA0KSwKKwlJREVfVEZMQUdfT1VUX0hPQl9MQkFICQk9ICgxIDw8IDUpLAogCUlERV9URkxBR19PVVRfSE9CCQk9IElERV9URkxBR19PVVRfSE9CX0ZFQVRVUkUgfAogCQkJCQkgIElERV9URkxBR19PVVRfSE9CX05TRUNUIHwKIAkJCQkJICBJREVfVEZMQUdfT1VUX0hPQl9MQkFMIHwKIAkJCQkJICBJREVfVEZMQUdfT1VUX0hPQl9MQkFNIHwKIAkJCQkJICBJREVfVEZMQUdfT1VUX0hPQl9MQkFILAotCUlERV9URkxBR19PVVRfRkVBVFVSRQkJPSAoMSA8PCA5KSwKLQlJREVfVEZMQUdfT1VUX05TRUNUCQk9ICgxIDw8IDEwKSwKLQlJREVfVEZMQUdfT1VUX0xCQUwJCT0gKDEgPDwgMTEpLAotCUlERV9URkxBR19PVVRfTEJBTQkJPSAoMSA8PCAxMiksCi0JSURFX1RGTEFHX09VVF9MQkFICQk9ICgxIDw8IDEzKSwKKwlJREVfVEZMQUdfT1VUX0ZFQVRVUkUJCT0gKDEgPDwgNiksCisJSURFX1RGTEFHX09VVF9OU0VDVAkJPSAoMSA8PCA3KSwKKwlJREVfVEZMQUdfT1VUX0xCQUwJCT0gKDEgPDwgOCksCisJSURFX1RGTEFHX09VVF9MQkFNCQk9ICgxIDw8IDkpLAorCUlERV9URkxBR19PVVRfTEJBSAkJPSAoMSA8PCAxMCksCiAJSURFX1RGTEFHX09VVF9URgkJPSBJREVfVEZMQUdfT1VUX0ZFQVRVUkUgfAogCQkJCQkgIElERV9URkxBR19PVVRfTlNFQ1QgfAogCQkJCQkgIElERV9URkxBR19PVVRfTEJBTCB8CiAJCQkJCSAgSURFX1RGTEFHX09VVF9MQkFNIHwKIAkJCQkJICBJREVfVEZMQUdfT1VUX0xCQUgsCi0JSURFX1RGTEFHX09VVF9ERVZJQ0UJCT0gKDEgPDwgMTQpLAotCUlERV9URkxBR19XUklURQkJCT0gKDEgPDwgMTUpLAotCUlERV9URkxBR19GTEFHR0VEX1NFVF9JTl9GTEFHUwk9ICgxIDw8IDE2KSwKLQlJREVfVEZMQUdfSU5fREFUQQkJPSAoMSA8PCAxNyksCi0JSURFX1RGTEFHX0NVU1RPTV9IQU5ETEVSCT0gKDEgPDwgMTgpLAotCUlERV9URkxBR19ETUFfUElPX0ZBTExCQUNLCT0gKDEgPDwgMTkpLAotCUlERV9URkxBR19JTl9IT0JfRkVBVFVSRQk9ICgxIDw8IDIwKSwKLQlJREVfVEZMQUdfSU5fSE9CX05TRUNUCQk9ICgxIDw8IDIxKSwKLQlJREVfVEZMQUdfSU5fSE9CX0xCQUwJCT0gKDEgPDwgMjIpLAotCUlERV9URkxBR19JTl9IT0JfTEJBTQkJPSAoMSA8PCAyMyksCi0JSURFX1RGTEFHX0lOX0hPQl9MQkFICQk9ICgxIDw8IDI0KSwKKwlJREVfVEZMQUdfT1VUX0RFVklDRQkJPSAoMSA8PCAxMSksCisJSURFX1RGTEFHX1dSSVRFCQkJPSAoMSA8PCAxMiksCisJSURFX1RGTEFHX0NVU1RPTV9IQU5ETEVSCT0gKDEgPDwgMTMpLAorCUlERV9URkxBR19ETUFfUElPX0ZBTExCQUNLCT0gKDEgPDwgMTQpLAorCUlERV9URkxBR19JTl9IT0JfRkVBVFVSRQk9ICgxIDw8IDE1KSwKKwlJREVfVEZMQUdfSU5fSE9CX05TRUNUCQk9ICgxIDw8IDE2KSwKKwlJREVfVEZMQUdfSU5fSE9CX0xCQUwJCT0gKDEgPDwgMTcpLAorCUlERV9URkxBR19JTl9IT0JfTEJBTQkJPSAoMSA8PCAxOCksCisJSURFX1RGTEFHX0lOX0hPQl9MQkFICQk9ICgxIDw8IDE5KSwKIAlJREVfVEZMQUdfSU5fSE9CX0xCQQkJPSBJREVfVEZMQUdfSU5fSE9CX0xCQUwgfAogCQkJCQkgIElERV9URkxBR19JTl9IT0JfTEJBTSB8CiAJCQkJCSAgSURFX1RGTEFHX0lOX0hPQl9MQkFILAogCUlERV9URkxBR19JTl9IT0IJCT0gSURFX1RGTEFHX0lOX0hPQl9GRUFUVVJFIHwKIAkJCQkJICBJREVfVEZMQUdfSU5fSE9CX05TRUNUIHwKIAkJCQkJICBJREVfVEZMQUdfSU5fSE9CX0xCQSwKLQlJREVfVEZMQUdfSU5fRkVBVFVSRQkJPSAoMSA8PCAxKSwKLQlJREVfVEZMQUdfSU5fTlNFQ1QJCT0gKDEgPDwgMjUpLAotCUlERV9URkxBR19JTl9MQkFMCQk9ICgxIDw8IDI2KSwKLQlJREVfVEZMQUdfSU5fTEJBTQkJPSAoMSA8PCAyNyksCi0JSURFX1RGTEFHX0lOX0xCQUgJCT0gKDEgPDwgMjgpLAorCUlERV9URkxBR19JTl9GRUFUVVJFCQk9ICgxIDw8IDIwKSwKKwlJREVfVEZMQUdfSU5fTlNFQ1QJCT0gKDEgPDwgMjEpLAorCUlERV9URkxBR19JTl9MQkFMCQk9ICgxIDw8IDIyKSwKKwlJREVfVEZMQUdfSU5fTEJBTQkJPSAoMSA8PCAyMyksCisJSURFX1RGTEFHX0lOX0xCQUgJCT0gKDEgPDwgMjQpLAogCUlERV9URkxBR19JTl9MQkEJCT0gSURFX1RGTEFHX0lOX0xCQUwgfAogCQkJCQkgIElERV9URkxBR19JTl9MQkFNIHwKIAkJCQkJICBJREVfVEZMQUdfSU5fTEJBSCwKIAlJREVfVEZMQUdfSU5fVEYJCQk9IElERV9URkxBR19JTl9OU0VDVCB8CiAJCQkJCSAgSURFX1RGTEFHX0lOX0xCQSwKLQlJREVfVEZMQUdfSU5fREVWSUNFCQk9ICgxIDw8IDI5KSwKKwlJREVfVEZMQUdfSU5fREVWSUNFCQk9ICgxIDw8IDI1KSwKIAlJREVfVEZMQUdfSE9CCQkJPSBJREVfVEZMQUdfT1VUX0hPQiB8CiAJCQkJCSAgSURFX1RGTEFHX0lOX0hPQiwKIAlJREVfVEZMQUdfVEYJCQk9IElERV9URkxBR19PVVRfVEYgfApAQCAtMzA5LDkgKzI5NCwxOCBAQAogCUlERV9URkxBR19ERVZJQ0UJCT0gSURFX1RGTEFHX09VVF9ERVZJQ0UgfAogCQkJCQkgIElERV9URkxBR19JTl9ERVZJQ0UsCiAJLyogZm9yY2UgMTYtYml0IEkvTyBvcGVyYXRpb25zICovCi0JSURFX1RGTEFHX0lPXzE2QklUCQk9ICgxIDw8IDMwKSwKLQkvKiBpZGVfdGFza190IHdhcyBhbGxvY2F0ZWQgdXNpbmcga21hbGxvYygpICovCi0JSURFX1RGTEFHX0RZTgkJCT0gKDEgPDwgMzEpLAorCUlERV9URkxBR19JT18xNkJJVAkJPSAoMSA8PCAyNiksCisJLyogc3RydWN0IGlkZV9jbWQgd2FzIGFsbG9jYXRlZCB1c2luZyBrbWFsbG9jKCkgKi8KKwlJREVfVEZMQUdfRFlOCQkJPSAoMSA8PCAyNyksCisJSURFX1RGTEFHX0ZTCQkJPSAoMSA8PCAyOCksCisJSURFX1RGTEFHX01VTFRJX1BJTwkJPSAoMSA8PCAyOSksCit9OworCitlbnVtIHsKKwlJREVfRlRGTEFHX0ZMQUdHRUQJCT0gKDEgPDwgMCksCisJSURFX0ZURkxBR19TRVRfSU5fRkxBR1MJCT0gKDEgPDwgMSksCisJSURFX0ZURkxBR19PVVRfREFUQQkJPSAoMSA8PCAyKSwKKwlJREVfRlRGTEFHX0lOX0RBVEEJCT0gKDEgPDwgMyksCiB9OwogCiBzdHJ1Y3QgaWRlX3Rhc2tmaWxlIHsKQEAgLTM0MywxNiArMzM3LDI3IEBACiAJfTsKIH07CiAKLXR5cGVkZWYgc3RydWN0IGlkZV90YXNrX3Mgeworc3RydWN0IGlkZV9jbWQgewogCXVuaW9uIHsKIAkJc3RydWN0IGlkZV90YXNrZmlsZQl0ZjsKIAkJdTgJCQl0Zl9hcnJheVsxNF07CiAJfTsKKwl1OAkJCWZ0Zl9mbGFnczsJLyogZm9yIFRBU0tGSUxFIGlvY3RsICovCiAJdTMyCQkJdGZfZmxhZ3M7Ci0JaW50CQkJZGF0YV9waGFzZTsKKwlpbnQJCQlwcm90b2NvbDsKKworCWludAkJCXNnX25lbnRzOwkgIC8qIG51bWJlciBvZiBzZyBlbnRyaWVzICovCisJaW50CQkJb3JpZ19zZ19uZW50czsKKwlpbnQJCQlzZ19kbWFfZGlyZWN0aW9uOyAvKiBETUEgdHJhbnNmZXIgZGlyZWN0aW9uICovCisKKwl1bnNpZ25lZCBpbnQJCW5ieXRlczsKKwl1bnNpZ25lZCBpbnQJCW5sZWZ0OworCXN0cnVjdCBzY2F0dGVybGlzdAkqY3Vyc2c7CisJdW5zaWduZWQgaW50CQljdXJzZ19vZnM7CisKIAlzdHJ1Y3QgcmVxdWVzdAkJKnJxOwkJLyogY29weSBvZiByZXF1ZXN0ICovCiAJdm9pZAkJCSpzcGVjaWFsOwkvKiB2YWxpZF90IGdlbmVyYWxseSAqLwotfSBpZGVfdGFza190OworfTsKIAogLyogQVRBUEkgcGFja2V0IGNvbW1hbmQgZmxhZ3MgKi8KIGVudW0gewpAQCAtMzY0LDggKzM2OSw2IEBACiAJUENfRkxBR19ETUFfSU5fUFJPR1JFU1MJCT0gKDEgPDwgNCksCiAJUENfRkxBR19ETUFfRVJST1IJCT0gKDEgPDwgNSksCiAJUENfRkxBR19XUklUSU5HCQkJPSAoMSA8PCA2KSwKLQkvKiBjb21tYW5kIHRpbWVkIG91dCAqLwotCVBDX0ZMQUdfVElNRURPVVQJCT0gKDEgPDwgNyksCiB9OwogCiAvKgpAQCAtNDM2LDcgKzQzOSw2IEBACiAJCQkJCWludCk7CiAJaWRlX3N0YXJ0c3RvcF90CSgqZG9fcmVxdWVzdCkoc3RydWN0IGlkZV9kcml2ZV9zICosIHN0cnVjdCByZXF1ZXN0ICosCiAJCQkJICAgICAgc2VjdG9yX3QpOwotCWludAkJKCplbmRfcmVxdWVzdCkoc3RydWN0IGlkZV9kcml2ZV9zICosIGludCwgaW50KTsKIAlpbnQJCSgqaW9jdGwpKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBzdHJ1Y3QgYmxvY2tfZGV2aWNlICosCiAJCQkJIGZtb2RlX3QsIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CiB9OwpAQCAtNTEyLDggKzUxNCw2IEBACiAJSURFX0RGTEFHX05JQ0UxCQkJPSAoMSA8PCA1KSwKIAkvKiBkZXZpY2UgaXMgcGh5c2ljYWxseSBwcmVzZW50ICovCiAJSURFX0RGTEFHX1BSRVNFTlQJCT0gKDEgPDwgNiksCi0JLyogZGV2aWNlIGVqZWN0ZWQgaGludCAqLwotCUlERV9ERkxBR19ERUFECQkJPSAoMSA8PCA3KSwKIAkvKiBpZCByZWFkIGZyb20gZGV2aWNlIChzeW50aGV0aWMgaWYgbm90IHNldCkgKi8KIAlJREVfREZMQUdfSURfUkVBRAkJPSAoMSA8PCA4KSwKIAlJREVfREZMQUdfTk9QUk9CRQkJPSAoMSA8PCA5KSwKQEAgLTYyNyw4ICs2MjcsMTEgQEAKIAkvKiBjdXJyZW50IHBhY2tldCBjb21tYW5kICovCiAJc3RydWN0IGlkZV9hdGFwaV9wYyAqcGM7CiAKKwkvKiBsYXN0IGZhaWxlZCBwYWNrZXQgY29tbWFuZCAqLworCXN0cnVjdCBpZGVfYXRhcGlfcGMgKmZhaWxlZF9wYzsKKwogCS8qIGNhbGxiYWNrIGZvciBwYWNrZXQgY29tbWFuZHMgKi8KLQl2b2lkICgqcGNfY2FsbGJhY2spKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBpbnQpOworCWludCAgKCpwY19jYWxsYmFjaykoc3RydWN0IGlkZV9kcml2ZV9zICosIGludCk7CiAKIAl2b2lkICgqcGNfdXBkYXRlX2J1ZmZlcnMpKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICopOwogCWludCAgKCpwY19pb19idWZmZXJzKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKiwgc3RydWN0IGlkZV9hdGFwaV9wYyAqLApAQCAtNjYxLDEzICs2NjQsMTMgQEAKIAogCXZvaWQJKCpzZXRfaXJxKShzdHJ1Y3QgaHdpZl9zICosIGludCk7CiAKLQl2b2lkCSgqdGZfbG9hZCkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV90YXNrX3MgKik7Ci0Jdm9pZAkoKnRmX3JlYWQpKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfdGFza19zICopOworCXZvaWQJKCp0Zl9sb2FkKShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqKTsKKwl2b2lkCSgqdGZfcmVhZCkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKik7CiAKLQl2b2lkCSgqaW5wdXRfZGF0YSkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgdm9pZCAqLAotCQkJICAgICAgdW5zaWduZWQgaW50KTsKLQl2b2lkCSgqb3V0cHV0X2RhdGEpKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIHZvaWQgKiwKLQkJCSAgICAgICB1bnNpZ25lZCBpbnQpOworCXZvaWQJKCppbnB1dF9kYXRhKShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqLAorCQkJICAgICAgdm9pZCAqLCB1bnNpZ25lZCBpbnQpOworCXZvaWQJKCpvdXRwdXRfZGF0YSkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKiwKKwkJCSAgICAgICB2b2lkICosIHVuc2lnbmVkIGludCk7CiB9OwogCiBleHRlcm4gY29uc3Qgc3RydWN0IGlkZV90cF9vcHMgZGVmYXVsdF90cF9vcHM7CkBAIC03MTEsMTIgKzcxNCwxMiBAQAogCiBzdHJ1Y3QgaWRlX2RtYV9vcHMgewogCXZvaWQJKCpkbWFfaG9zdF9zZXQpKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCBpbnQpOwotCWludAkoKmRtYV9zZXR1cCkoc3RydWN0IGlkZV9kcml2ZV9zICopOwotCXZvaWQJKCpkbWFfZXhlY19jbWQpKHN0cnVjdCBpZGVfZHJpdmVfcyAqLCB1OCk7CisJaW50CSgqZG1hX3NldHVwKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKiwgc3RydWN0IGlkZV9jbWQgKik7CiAJdm9pZAkoKmRtYV9zdGFydCkoc3RydWN0IGlkZV9kcml2ZV9zICopOwogCWludAkoKmRtYV9lbmQpKHN0cnVjdCBpZGVfZHJpdmVfcyAqKTsKIAlpbnQJKCpkbWFfdGVzdF9pcnEpKHN0cnVjdCBpZGVfZHJpdmVfcyAqKTsKIAl2b2lkCSgqZG1hX2xvc3RfaXJxKShzdHJ1Y3QgaWRlX2RyaXZlX3MgKik7CisJaW50CSgqZG1hX3RpbWVyX2V4cGlyeSkoc3RydWN0IGlkZV9kcml2ZV9zICopOwogCXZvaWQJKCpkbWFfdGltZW91dCkoc3RydWN0IGlkZV9kcml2ZV9zICopOwogCS8qCiAJICogVGhlIGZvbGxvd2luZyBtZXRob2QgaXMgb3B0aW9uYWwgYW5kIG9ubHkgcmVxdWlyZWQgdG8gYmUKQEAgLTc4MCwxOSArNzgzLDggQEAKIAkvKiBTY2F0dGVyLWdhdGhlciBsaXN0IHVzZWQgdG8gYnVpbGQgdGhlIGFib3ZlICovCiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ190YWJsZTsKIAlpbnQgc2dfbWF4X25lbnRzOwkJLyogTWF4aW11bSBudW1iZXIgb2YgZW50cmllcyBpbiBpdCAqLwotCWludCBzZ19uZW50czsJCQkvKiBDdXJyZW50IG51bWJlciBvZiBlbnRyaWVzIGluIGl0ICovCi0JaW50IG9yaWdfc2dfbmVudHM7Ci0JaW50IHNnX2RtYV9kaXJlY3Rpb247CQkvKiBkbWEgdHJhbnNmZXIgZGlyZWN0aW9uICovCiAKLQkvKiBkYXRhIHBoYXNlIG9mIHRoZSBhY3RpdmUgY29tbWFuZCAoY3VycmVudGx5IG9ubHkgdmFsaWQgZm9yIFBJTy9ETUEpICovCi0JaW50CQlkYXRhX3BoYXNlOwotCi0Jc3RydWN0IGlkZV90YXNrX3MgdGFzazsJCS8qIGN1cnJlbnQgY29tbWFuZCAqLwotCi0JdW5zaWduZWQgaW50IG5zZWN0OwotCXVuc2lnbmVkIGludCBubGVmdDsKLQlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKmN1cnNnOwotCXVuc2lnbmVkIGludCBjdXJzZ19vZnM7CisJc3RydWN0IGlkZV9jbWQgY21kOwkJLyogY3VycmVudCBjb21tYW5kICovCiAKIAlpbnQJCXJxc2l6ZTsJCS8qIG1heCBzZWN0b3JzIHBlciByZXF1ZXN0ICovCiAJaW50CQlpcnE7CQkvKiBvdXIgaXJxIG51bWJlciAqLwpAQCAtODUwLDkgKzg0MiwxOCBAQAogCWlkZV9od2lmX3QJKnBvcnRzW01BWF9IT1NUX1BPUlRTICsgMV07CiAJdW5zaWduZWQgaW50CW5fcG9ydHM7CiAJc3RydWN0IGRldmljZQkqZGV2WzJdOworCiAJaW50CQkoKmluaXRfY2hpcHNldCkoc3RydWN0IHBjaV9kZXYgKik7CisKKwl2b2lkCQkoKmdldF9sb2NrKShpcnFfaGFuZGxlcl90LCB2b2lkICopOworCXZvaWQJCSgqcmVsZWFzZV9sb2NrKSh2b2lkKTsKKwogCWlycV9oYW5kbGVyX3QJaXJxX2hhbmRsZXI7CisKIAl1bnNpZ25lZCBsb25nCWhvc3RfZmxhZ3M7CisKKwlpbnQJCWlycV9mbGFnczsKKwogCXZvaWQJCSpob3N0X3ByaXY7CiAJaWRlX2h3aWZfdAkqY3VyX3BvcnQ7CS8qIGZvciBob3N0cyByZXF1aXJpbmcgc2VyaWFsaXphdGlvbiAqLwogCkBAIC04NjksNyArODcwLDcgQEAKIHR5cGVkZWYgaW50IChpZGVfZXhwaXJ5X3QpKGlkZV9kcml2ZV90ICopOwogCiAvKiB1c2VkIGJ5IGlkZS1jZCwgaWRlLWZsb3BweSwgZXRjLiAqLwotdHlwZWRlZiB2b2lkICh4ZmVyX2Z1bmNfdCkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKnJxLCB2b2lkICosIHVuc2lnbmVkKTsKK3R5cGVkZWYgdm9pZCAoeGZlcl9mdW5jX3QpKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfY21kICosIHZvaWQgKiwgdW5zaWduZWQpOwogCiBleHRlcm4gc3RydWN0IG11dGV4IGlkZV9zZXR0aW5nX210eDsKIApAQCAtMTA0NSwxMCArMTA0NiwxMSBAQAogfTsKIAogLyogRFJWX05BTUUgaGFzIHRvIGJlIGRlZmluZWQgaW4gdGhlIGRyaXZlciBiZWZvcmUgdXNpbmcgdGhlIG1hY3JvIGJlbG93ICovCi0jZGVmaW5lIF9faWRlX2RlYnVnX2xvZyhsdmwsIGZtdCwgYXJncy4uLikJCQlcCi17CQkJCQkJCQlcCi0JaWYgKHVubGlrZWx5KGRyaXZlLT5kZWJ1Z19tYXNrICYgbHZsKSkJCQlcCi0JCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogIiBmbXQsICMjIGFyZ3MpOwlcCisjZGVmaW5lIF9faWRlX2RlYnVnX2xvZyhsdmwsIGZtdCwgYXJncy4uLikJCQkJXAorewkJCQkJCQkJCVwKKwlpZiAodW5saWtlbHkoZHJpdmUtPmRlYnVnX21hc2sgJiBsdmwpKQkJCQlcCisJCXByaW50ayhLRVJOX0lORk8gRFJWX05BTUUgIjogJXM6ICIgZm10ICJcbiIsCQlcCisJCQkJCSAgX19mdW5jX18sICMjIGFyZ3MpOwkJXAogfQogCiAvKgpAQCAtMTA4Nyw3ICsxMDg5LDcgQEAKIAogdm9pZCBpZGVfY29tcGxldGVfcG93ZXJfc3RlcChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIGlkZV9zdGFydHN0b3BfdCBpZGVfc3RhcnRfcG93ZXJfc3RlcChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKLXZvaWQgaWRlX2NvbXBsZXRlX3BtX3JlcXVlc3QoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7Cit2b2lkIGlkZV9jb21wbGV0ZV9wbV9ycShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqKTsKIHZvaWQgaWRlX2NoZWNrX3BtX3N0YXRlKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwogCiAvKgpAQCAtMTA5OSw3ICsxMTAxLDYgQEAKIHN0cnVjdCBpZGVfZHJpdmVyIHsKIAljb25zdCBjaGFyCQkJKnZlcnNpb247CiAJaWRlX3N0YXJ0c3RvcF90CSgqZG9fcmVxdWVzdCkoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgc2VjdG9yX3QpOwotCWludAkJKCplbmRfcmVxdWVzdCkoaWRlX2RyaXZlX3QgKiwgaW50LCBpbnQpOwogCXN0cnVjdCBkZXZpY2VfZHJpdmVyCWdlbl9kcml2ZXI7CiAJaW50CQkoKnByb2JlKShpZGVfZHJpdmVfdCAqKTsKIAl2b2lkCQkoKnJlbW92ZSkoaWRlX2RyaXZlX3QgKik7CkBAIC0xMTMwLDE5ICsxMTMxLDE1IEBACiBleHRlcm4gaW50IGlkZV92bGJfY2xrOwogZXh0ZXJuIGludCBpZGVfcGNpX2NsazsKIAotaW50IGlkZV9lbmRfcmVxdWVzdChpZGVfZHJpdmVfdCAqLCBpbnQsIGludCk7Ci1pbnQgaWRlX2VuZF9kZXF1ZXVlZF9yZXF1ZXN0KGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICosIGludCwgaW50KTsKK3Vuc2lnbmVkIGludCBpZGVfcnFfYnl0ZXMoc3RydWN0IHJlcXVlc3QgKik7CitpbnQgaWRlX2VuZF9ycShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCBpbnQsIHVuc2lnbmVkIGludCk7CiB2b2lkIGlkZV9raWxsX3JxKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwogCi12b2lkIF9faWRlX3NldF9oYW5kbGVyKGlkZV9kcml2ZV90ICosIGlkZV9oYW5kbGVyX3QgKiwgdW5zaWduZWQgaW50LAotCQkgICAgICAgaWRlX2V4cGlyeV90ICopOwotdm9pZCBpZGVfc2V0X2hhbmRsZXIoaWRlX2RyaXZlX3QgKiwgaWRlX2hhbmRsZXJfdCAqLCB1bnNpZ25lZCBpbnQsCi0JCSAgICAgaWRlX2V4cGlyeV90ICopOwordm9pZCBfX2lkZV9zZXRfaGFuZGxlcihpZGVfZHJpdmVfdCAqLCBpZGVfaGFuZGxlcl90ICosIHVuc2lnbmVkIGludCk7Cit2b2lkIGlkZV9zZXRfaGFuZGxlcihpZGVfZHJpdmVfdCAqLCBpZGVfaGFuZGxlcl90ICosIHVuc2lnbmVkIGludCk7CiAKLXZvaWQgaWRlX2V4ZWN1dGVfY29tbWFuZChpZGVfZHJpdmVfdCAqLCB1OCwgaWRlX2hhbmRsZXJfdCAqLCB1bnNpZ25lZCBpbnQsCi0JCQkgaWRlX2V4cGlyeV90ICopOwotCi12b2lkIGlkZV9leGVjdXRlX3BrdF9jbWQoaWRlX2RyaXZlX3QgKik7Cit2b2lkIGlkZV9leGVjdXRlX2NvbW1hbmQoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKiwgaWRlX2hhbmRsZXJfdCAqLAorCQkJIHVuc2lnbmVkIGludCk7CiAKIHZvaWQgaWRlX3BhZF90cmFuc2ZlcihpZGVfZHJpdmVfdCAqLCBpbnQsIGludCk7CiAKQEAgLTExNjQsNyArMTE2MSw4IEBACiBleHRlcm4gaW50IGlkZV9kZXZzZXRfZXhlY3V0ZShpZGVfZHJpdmVfdCAqZHJpdmUsCiAJCQkgICAgICBjb25zdCBzdHJ1Y3QgaWRlX2RldnNldCAqc2V0dGluZywgaW50IGFyZyk7CiAKLWV4dGVybiB2b2lkIGlkZV9lbmRfZHJpdmVfY21kKGlkZV9kcml2ZV90ICosIHU4LCB1OCk7Cit2b2lkIGlkZV9jb21wbGV0ZV9jbWQoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKiwgdTgsIHU4KTsKK2ludCBpZGVfY29tcGxldGVfcnEoaWRlX2RyaXZlX3QgKiwgaW50LCB1bnNpZ25lZCBpbnQpOwogCiB2b2lkIGlkZV90Zl9kdW1wKGNvbnN0IGNoYXIgKiwgc3RydWN0IGlkZV90YXNrZmlsZSAqKTsKIApAQCAtMTE3NCwxMSArMTE3MiwxMSBAQAogCiB2b2lkIGlkZV9zZXRfaXJxKGlkZV9od2lmX3QgKiwgaW50KTsKIAotdm9pZCBpZGVfdGZfbG9hZChpZGVfZHJpdmVfdCAqLCBpZGVfdGFza190ICopOwotdm9pZCBpZGVfdGZfcmVhZChpZGVfZHJpdmVfdCAqLCBpZGVfdGFza190ICopOwordm9pZCBpZGVfdGZfbG9hZChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqKTsKK3ZvaWQgaWRlX3RmX3JlYWQoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKik7CiAKLXZvaWQgaWRlX2lucHV0X2RhdGEoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgdm9pZCAqLCB1bnNpZ25lZCBpbnQpOwotdm9pZCBpZGVfb3V0cHV0X2RhdGEoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKiwgdm9pZCAqLCB1bnNpZ25lZCBpbnQpOwordm9pZCBpZGVfaW5wdXRfZGF0YShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqLCB2b2lkICosIHVuc2lnbmVkIGludCk7Cit2b2lkIGlkZV9vdXRwdXRfZGF0YShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqLCB2b2lkICosIHVuc2lnbmVkIGludCk7CiAKIGludCBpZGVfaW9fYnVmZmVycyhpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2F0YXBpX3BjICosIHVuc2lnbmVkIGludCwgaW50KTsKIApAQCAtMTIyNCwxNiArMTIyMiwxNiBAQAogCiBpbnQgaWRlX2NkX2dldF94ZmVybGVuKHN0cnVjdCByZXF1ZXN0ICopOwogCi1pZGVfc3RhcnRzdG9wX3QgaWRlX2lzc3VlX3BjKGlkZV9kcml2ZV90ICopOworaWRlX3N0YXJ0c3RvcF90IGlkZV9pc3N1ZV9wYyhpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqKTsKIAotaWRlX3N0YXJ0c3RvcF90IGRvX3J3X3Rhc2tmaWxlKGlkZV9kcml2ZV90ICosIGlkZV90YXNrX3QgKik7CitpZGVfc3RhcnRzdG9wX3QgZG9fcndfdGFza2ZpbGUoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKik7CiAKLXZvaWQgdGFza19lbmRfcmVxdWVzdChpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgcmVxdWVzdCAqLCB1OCk7Cit2b2lkIGlkZV9maW5pc2hfY21kKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfY21kICosIHU4KTsKIAotaW50IGlkZV9yYXdfdGFza2ZpbGUoaWRlX2RyaXZlX3QgKiwgaWRlX3Rhc2tfdCAqLCB1OCAqLCB1MTYpOwotaW50IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGlkZV9kcml2ZV90ICosIGlkZV90YXNrX3QgKik7CitpbnQgaWRlX3Jhd190YXNrZmlsZShpZGVfZHJpdmVfdCAqLCBzdHJ1Y3QgaWRlX2NtZCAqLCB1OCAqLCB1MTYpOworaW50IGlkZV9ub19kYXRhX3Rhc2tmaWxlKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfY21kICopOwogCi1pbnQgaWRlX3Rhc2tmaWxlX2lvY3RsKGlkZV9kcml2ZV90ICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CitpbnQgaWRlX3Rhc2tmaWxlX2lvY3RsKGlkZV9kcml2ZV90ICosIHVuc2lnbmVkIGxvbmcpOwogCiBpbnQgaWRlX2Rldl9yZWFkX2lkKGlkZV9kcml2ZV90ICosIHU4LCB1MTYgKik7CiAKQEAgLTEzMzUsNiArMTMzMywxMCBAQAogCUlERV9IRkxBR19FUlJPUl9TVE9QU19GSUZPCT0gKDEgPDwgMTkpLAogCS8qIHNlcmlhbGl6ZSBwb3J0cyAqLwogCUlERV9IRkxBR19TRVJJQUxJWkUJCT0gKDEgPDwgMjApLAorCS8qIGhvc3QgaXMgRFRDMjI3OCAqLworCUlERV9IRkxBR19EVEMyMjc4CQk9ICgxIDw8IDIxKSwKKwkvKiA0IGRldmljZXMgb24gYSBzaW5nbGUgc2V0IG9mIEkvTyBwb3J0cyAqLworCUlERV9IRkxBR180RFJJVkVTCQk9ICgxIDw8IDIyKSwKIAkvKiBob3N0IGlzIFRSTTI5MCAqLwogCUlERV9IRkxBR19UUk0yOTAJCT0gKDEgPDwgMjMpLAogCS8qIHVzZSAzMi1iaXQgSS9PIG9wcyAqLwpAQCAtMTM2Miw3ICsxMzY0LDEyIEBACiAKIHN0cnVjdCBpZGVfcG9ydF9pbmZvIHsKIAljaGFyCQkJKm5hbWU7CisKIAlpbnQJCQkoKmluaXRfY2hpcHNldCkoc3RydWN0IHBjaV9kZXYgKik7CisKKwl2b2lkCQkJKCpnZXRfbG9jaykoaXJxX2hhbmRsZXJfdCwgdm9pZCAqKTsKKwl2b2lkCQkJKCpyZWxlYXNlX2xvY2spKHZvaWQpOworCiAJdm9pZAkJCSgqaW5pdF9pb3BzKShpZGVfaHdpZl90ICopOwogCXZvaWQgICAgICAgICAgICAgICAgICAgICgqaW5pdF9od2lmKShpZGVfaHdpZl90ICopOwogCWludAkJCSgqaW5pdF9kbWEpKGlkZV9od2lmX3QgKiwKQEAgLTEzNzksNiArMTM4Niw5IEBACiAJdTE2CQkJbWF4X3NlY3RvcnM7CS8qIGlmIDwgdGhhbiB0aGUgZGVmYXVsdCBvbmUgKi8KIAogCXUzMgkJCWhvc3RfZmxhZ3M7CisKKwlpbnQJCQlpcnFfZmxhZ3M7CisKIAl1OAkJCXBpb19tYXNrOwogCXU4CQkJc3dkbWFfbWFzazsKIAl1OAkJCW13ZG1hX21hc2s7CkBAIC0xMzk4LDggKzE0MDgsOCBAQAogI2RlZmluZSBpZGVfcGNpX3Jlc3VtZSBOVUxMCiAjZW5kaWYKIAotdm9pZCBpZGVfbWFwX3NnKGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOwotdm9pZCBpZGVfaW5pdF9zZ19jbWQoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7Cit2b2lkIGlkZV9tYXBfc2coaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKik7Cit2b2lkIGlkZV9pbml0X3NnX2NtZChzdHJ1Y3QgaWRlX2NtZCAqLCB1bnNpZ25lZCBpbnQpOwogCiAjZGVmaW5lIEJBRF9ETUFfRFJJVkUJCTAKICNkZWZpbmUgR09PRF9ETUFfRFJJVkUJCTEKQEAgLTE0MzMsMTggKzE0NDMsMTggQEAKIGludCBpZGVfYWxsb2NhdGVfZG1hX2VuZ2luZShpZGVfaHdpZl90ICopOwogdm9pZCBpZGVfcmVsZWFzZV9kbWFfZW5naW5lKGlkZV9od2lmX3QgKik7CiAKLWludCBpZGVfYnVpbGRfc2dsaXN0KGlkZV9kcml2ZV90ICosIHN0cnVjdCByZXF1ZXN0ICopOworaW50IGlkZV9idWlsZF9zZ2xpc3QoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKik7CiB2b2lkIGlkZV9kZXN0cm95X2RtYXRhYmxlKGlkZV9kcml2ZV90ICopOwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFRE1BX1NGRgogaW50IGNvbmZpZ19kcml2ZV9mb3JfZG1hKGlkZV9kcml2ZV90ICopOwotZXh0ZXJuIGludCBpZGVfYnVpbGRfZG1hdGFibGUoaWRlX2RyaXZlX3QgKiwgc3RydWN0IHJlcXVlc3QgKik7CitpbnQgaWRlX2J1aWxkX2RtYXRhYmxlKGlkZV9kcml2ZV90ICosIHN0cnVjdCBpZGVfY21kICopOwogdm9pZCBpZGVfZG1hX2hvc3Rfc2V0KGlkZV9kcml2ZV90ICosIGludCk7Ci1leHRlcm4gaW50IGlkZV9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKik7Ci12b2lkIGlkZV9kbWFfZXhlY19jbWQoaWRlX2RyaXZlX3QgKiwgdTgpOworaW50IGlkZV9kbWFfc2V0dXAoaWRlX2RyaXZlX3QgKiwgc3RydWN0IGlkZV9jbWQgKik7CiBleHRlcm4gdm9pZCBpZGVfZG1hX3N0YXJ0KGlkZV9kcml2ZV90ICopOwogaW50IGlkZV9kbWFfZW5kKGlkZV9kcml2ZV90ICopOwogaW50IGlkZV9kbWFfdGVzdF9pcnEoaWRlX2RyaXZlX3QgKik7CitpbnQgaWRlX2RtYV9zZmZfdGltZXJfZXhwaXJ5KGlkZV9kcml2ZV90ICopOwogdTggaWRlX2RtYV9zZmZfcmVhZF9zdGF0dXMoaWRlX2h3aWZfdCAqKTsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaWRlX2RtYV9vcHMgc2ZmX2RtYV9vcHM7CiAjZWxzZQpAQCAtMTQ2NSw4ICsxNDc1LDExIEBACiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX2RtYV92ZXJib3NlKGlkZV9kcml2ZV90ICpkcml2ZSkgeyA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IGlkZV9zZXRfZG1hKGlkZV9kcml2ZV90ICpkcml2ZSkgeyByZXR1cm4gMTsgfQogc3RhdGljIGlubGluZSB2b2lkIGlkZV9jaGVja19kbWFfY3JjKGlkZV9kcml2ZV90ICpkcml2ZSkgeyA7IH0KK3N0YXRpYyBpbmxpbmUgaWRlX3N0YXJ0c3RvcF90IGlkZV9kbWFfaW50cihpZGVfZHJpdmVfdCAqZHJpdmUpIHsgcmV0dXJuIGlkZV9zdG9wcGVkOyB9CiBzdGF0aWMgaW5saW5lIGlkZV9zdGFydHN0b3BfdCBpZGVfZG1hX3RpbWVvdXRfcmV0cnkoaWRlX2RyaXZlX3QgKmRyaXZlLCBpbnQgZXJyb3IpIHsgcmV0dXJuIGlkZV9zdG9wcGVkOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgaWRlX3JlbGVhc2VfZG1hX2VuZ2luZShpZGVfaHdpZl90ICpod2lmKSB7IDsgfQorc3RhdGljIGlubGluZSBpbnQgaWRlX2J1aWxkX3NnbGlzdChpZGVfZHJpdmVfdCAqZHJpdmUsCisJCQkJICAgc3RydWN0IGlkZV9jbWQgKmNtZCkgeyByZXR1cm4gMDsgfQogI2VuZGlmIC8qIENPTkZJR19CTEtfREVWX0lERURNQSAqLwogCiAjaWZkZWYgQ09ORklHX0JMS19ERVZfSURFQUNQSQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnRlbC1pb21tdS5oIGIvaW5jbHVkZS9saW51eC9pbnRlbC1pb21tdS5oCmluZGV4IGQyZTNjYmYuLjFkNmM3MWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaW50ZWwtaW9tbXUuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ludGVsLWlvbW11LmgKQEAgLTI5Miw2ICsyOTIsOCBAQAogCXNwaW5sb2NrX3QJcmVnaXN0ZXJfbG9jazsgLyogcHJvdGVjdCByZWdpc3RlciBoYW5kbGluZyAqLwogCWludAkJc2VxX2lkOwkvKiBzZXF1ZW5jZSBpZCBvZiB0aGUgaW9tbXUgKi8KIAlpbnQJCWFnYXc7IC8qIGFnYXcgb2YgdGhpcyBpb21tdSAqLworCXVuc2lnbmVkIGludCAJaXJxOworCXVuc2lnbmVkIGNoYXIgCW5hbWVbMTNdOyAgICAvKiBEZXZpY2UgTmFtZSAqLwogCiAjaWZkZWYgQ09ORklHX0RNQVIKIAl1bnNpZ25lZCBsb25nIAkqZG9tYWluX2lkczsgLyogYml0bWFwIG9mIGRvbWFpbnMgKi8KQEAgLTI5OSw4ICszMDEsNiBAQAogCXNwaW5sb2NrX3QJbG9jazsgLyogcHJvdGVjdCBjb250ZXh0LCBkb21haW4gaWRzICovCiAJc3RydWN0IHJvb3RfZW50cnkgKnJvb3RfZW50cnk7IC8qIHZpcnR1YWwgYWRkcmVzcyAqLwogCi0JdW5zaWduZWQgaW50IGlycTsKLQl1bnNpZ25lZCBjaGFyIG5hbWVbN107ICAgIC8qIERldmljZSBOYW1lICovCiAJc3RydWN0IGlvbW11X2ZsdXNoIGZsdXNoOwogI2VuZGlmCiAJc3RydWN0IHFfaW52YWwgICpxaTsgICAgICAgICAgICAvKiBRdWV1ZWQgaW52YWxpZGF0aW9uIGluZm8gKi8KQEAgLTMyMSw2ICszMjEsNyBAQAogZXh0ZXJuIGludCBhbGxvY19pb21tdShzdHJ1Y3QgZG1hcl9kcmhkX3VuaXQgKmRyaGQpOwogZXh0ZXJuIHZvaWQgZnJlZV9pb21tdShzdHJ1Y3QgaW50ZWxfaW9tbXUgKmlvbW11KTsKIGV4dGVybiBpbnQgZG1hcl9lbmFibGVfcWkoc3RydWN0IGludGVsX2lvbW11ICppb21tdSk7CitleHRlcm4gdm9pZCBkbWFyX2Rpc2FibGVfcWkoc3RydWN0IGludGVsX2lvbW11ICppb21tdSk7CiBleHRlcm4gdm9pZCBxaV9nbG9iYWxfaWVjKHN0cnVjdCBpbnRlbF9pb21tdSAqaW9tbXUpOwogCiBleHRlcm4gaW50IHFpX2ZsdXNoX2NvbnRleHQoc3RydWN0IGludGVsX2lvbW11ICppb21tdSwgdTE2IGRpZCwgdTE2IHNpZCwKQEAgLTMzMSwxMSArMzMyLDQgQEAKIAogZXh0ZXJuIGludCBxaV9zdWJtaXRfc3luYyhzdHJ1Y3QgcWlfZGVzYyAqZGVzYywgc3RydWN0IGludGVsX2lvbW11ICppb21tdSk7CiAKLWV4dGVybiB2b2lkICppbnRlbF9hbGxvY19jb2hlcmVudChzdHJ1Y3QgZGV2aWNlICosIHNpemVfdCwgZG1hX2FkZHJfdCAqLCBnZnBfdCk7Ci1leHRlcm4gdm9pZCBpbnRlbF9mcmVlX2NvaGVyZW50KHN0cnVjdCBkZXZpY2UgKiwgc2l6ZV90LCB2b2lkICosIGRtYV9hZGRyX3QpOwotZXh0ZXJuIGRtYV9hZGRyX3QgaW50ZWxfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICosIHBoeXNfYWRkcl90LCBzaXplX3QsIGludCk7Ci1leHRlcm4gdm9pZCBpbnRlbF91bm1hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqLCBkbWFfYWRkcl90LCBzaXplX3QsIGludCk7Ci1leHRlcm4gaW50IGludGVsX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQsIGludCk7Ci1leHRlcm4gdm9pZCBpbnRlbF91bm1hcF9zZyhzdHJ1Y3QgZGV2aWNlICosIHN0cnVjdCBzY2F0dGVybGlzdCAqLCBpbnQsIGludCk7Ci0KICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCBiL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgKaW5kZXggMGM5Y2I2My4uYzY4YmZmZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaAorKysgYi9pbmNsdWRlL2xpbnV4L2ludGVycnVwdC5oCkBAIC0xMTcsNiArMTE3LDE1IEBACiBleHRlcm4gdm9pZCBkaXNhYmxlX2lycSh1bnNpZ25lZCBpbnQgaXJxKTsKIGV4dGVybiB2b2lkIGVuYWJsZV9pcnEodW5zaWduZWQgaW50IGlycSk7CiAKKy8qIFRoZSBmb2xsb3dpbmcgdGhyZWUgZnVuY3Rpb25zIGFyZSBmb3IgdGhlIGNvcmUga2VybmVsIHVzZSBvbmx5LiAqLworZXh0ZXJuIHZvaWQgc3VzcGVuZF9kZXZpY2VfaXJxcyh2b2lkKTsKK2V4dGVybiB2b2lkIHJlc3VtZV9kZXZpY2VfaXJxcyh2b2lkKTsKKyNpZmRlZiBDT05GSUdfUE1fU0xFRVAKK2V4dGVybiBpbnQgY2hlY2tfd2FrZXVwX2lycXModm9pZCk7CisjZWxzZQorc3RhdGljIGlubGluZSBpbnQgY2hlY2tfd2FrZXVwX2lycXModm9pZCkgeyByZXR1cm4gMDsgfQorI2VuZGlmCisKICNpZiBkZWZpbmVkKENPTkZJR19TTVApICYmIGRlZmluZWQoQ09ORklHX0dFTkVSSUNfSEFSRElSUVMpCiAKIGV4dGVybiBjcHVtYXNrX3Zhcl90IGlycV9kZWZhdWx0X2FmZmluaXR5OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pcG1pX3NtaS5oIGIvaW5jbHVkZS9saW51eC9pcG1pX3NtaS5oCmluZGV4IDYyYjczNjYuLmY3YzljNzUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvaXBtaV9zbWkuaAorKysgYi9pbmNsdWRlL2xpbnV4L2lwbWlfc21pLmgKQEAgLTIzMCw2ICsyMzAsNiBAQAogICAgYXV0b21hdGljYWxseSBiZSBkc3Ryb3llZCB3aGVuIHRoZSBpbnRlcmZhY2UgaXMgZGVzdHJveWVkLiAqLwogaW50IGlwbWlfc21pX2FkZF9wcm9jX2VudHJ5KGlwbWlfc21pX3Qgc21pLCBjaGFyICpuYW1lLAogCQkJICAgIHJlYWRfcHJvY190ICpyZWFkX3Byb2MsCi0JCQkgICAgdm9pZCAqZGF0YSwgc3RydWN0IG1vZHVsZSAqb3duZXIpOworCQkJICAgIHZvaWQgKmRhdGEpOwogCiAjZW5kaWYgLyogX19MSU5VWF9JUE1JX1NNSV9IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2lycS5oIGIvaW5jbHVkZS9saW51eC9pcnEuaAppbmRleCA5YzYyZmJlLi45NzQ4OTBiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lycS5oCisrKyBiL2luY2x1ZGUvbGludXgvaXJxLmgKQEAgLTY3LDYgKzY3LDcgQEAKICNkZWZpbmUgSVJRX1NQVVJJT1VTX0RJU0FCTEVECTB4MDA4MDAwMDAJLyogSVJRIHdhcyBkaXNhYmxlZCBieSB0aGUgc3B1cmlvdXMgdHJhcCAqLwogI2RlZmluZSBJUlFfTU9WRV9QQ05UWFQJCTB4MDEwMDAwMDAJLyogSVJRIG1pZ3JhdGlvbiBmcm9tIHByb2Nlc3MgY29udGV4dCAqLwogI2RlZmluZSBJUlFfQUZGSU5JVFlfU0VUCTB4MDIwMDAwMDAJLyogSVJRIGFmZmluaXR5IHdhcyBzZXQgZnJvbSB1c2Vyc3BhY2UqLworI2RlZmluZSBJUlFfU1VTUEVOREVECQkweDA0MDAwMDAwCS8qIElSUSBoYXMgZ29uZSB0aHJvdWdoIHN1c3BlbmQgc2VxdWVuY2UgKi8KIAogI2lmZGVmIENPTkZJR19JUlFfUEVSX0NQVQogIyBkZWZpbmUgQ0hFQ0tfSVJRX1BFUl9DUFUodmFyKSAoKHZhcikgJiBJUlFfUEVSX0NQVSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaXZ0di5oIGIvaW5jbHVkZS9saW51eC9pdnR2LmgKaW5kZXggZjI3MjAyOC4uMDYyZDIwZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9pdnR2LmgKKysrIGIvaW5jbHVkZS9saW51eC9pdnR2LmgKQEAgLTYwLDEwICs2MCwxMCBAQAogCiAjZGVmaW5lIElWVFZfSU9DX0RNQV9GUkFNRSAgX0lPVyAoJ1YnLCBCQVNFX1ZJRElPQ19QUklWQVRFKzAsIHN0cnVjdCBpdnR2X2RtYV9mcmFtZSkKIAotLyogVGhlc2UgYXJlIHRoZSBWQkkgdHlwZXMgYXMgdGhleSBhcHBlYXIgaW4gdGhlIGVtYmVkZGVkIFZCSSBwcml2YXRlIHBhY2tldHMuICovCi0jZGVmaW5lIElWVFZfU0xJQ0VEX1RZUEVfVEVMRVRFWFRfQiAgICAgKDEpCi0jZGVmaW5lIElWVFZfU0xJQ0VEX1RZUEVfQ0FQVElPTl81MjUgICAgKDQpCi0jZGVmaW5lIElWVFZfU0xJQ0VEX1RZUEVfV1NTXzYyNSAgICAgICAgKDUpCi0jZGVmaW5lIElWVFZfU0xJQ0VEX1RZUEVfVlBTICAgICAgICAgICAgKDcpCisvKiBEZXByZWNhdGVkIGRlZmluZXM6IGFwcGxpY2F0aW9ucyBzaG91bGQgdXNlIHRoZSBkZWZpbmVzIGZyb20gdmlkZW9kZXYyLmggKi8KKyNkZWZpbmUgSVZUVl9TTElDRURfVFlQRV9URUxFVEVYVF9CICAgICBWNEwyX01QRUdfVkJJX0lWVFZfVEVMRVRFWFRfQgorI2RlZmluZSBJVlRWX1NMSUNFRF9UWVBFX0NBUFRJT05fNTI1ICAgIFY0TDJfTVBFR19WQklfSVZUVl9DQVBUSU9OXzUyNQorI2RlZmluZSBJVlRWX1NMSUNFRF9UWVBFX1dTU182MjUgICAgICAgIFY0TDJfTVBFR19WQklfSVZUVl9XU1NfNjI1CisjZGVmaW5lIElWVFZfU0xJQ0VEX1RZUEVfVlBTICAgICAgICAgICAgVjRMMl9NUEVHX1ZCSV9JVlRWX1ZQUwogCiAjZW5kaWYgLyogX0xJTlVYX0lWVFZfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9sb2NrZGVwLmggYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaAppbmRleCAyM2JmMDJmLi41YTU4ZWEzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaAorKysgYi9pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaApAQCAtMjAsNDMgKzIwLDEwIEBACiAjaW5jbHVkZSA8bGludXgvc3RhY2t0cmFjZS5oPgogCiAvKgotICogTG9jay1jbGFzcyB1c2FnZS1zdGF0ZSBiaXRzOgorICogV2UnZCByYXRoZXIgbm90IGV4cG9zZSBrZXJuZWwvbG9ja2RlcF9zdGF0ZXMuaCB0aGlzIHdpZGUsIGJ1dCB3ZSBkbyBuZWVkCisgKiB0aGUgdG90YWwgbnVtYmVyIG9mIHN0YXRlcy4uLiA6LSgKICAqLwotZW51bSBsb2NrX3VzYWdlX2JpdAotewotCUxPQ0tfVVNFRCA9IDAsCi0JTE9DS19VU0VEX0lOX0hBUkRJUlEsCi0JTE9DS19VU0VEX0lOX1NPRlRJUlEsCi0JTE9DS19FTkFCTEVEX1NPRlRJUlFTLAotCUxPQ0tfRU5BQkxFRF9IQVJESVJRUywKLQlMT0NLX1VTRURfSU5fSEFSRElSUV9SRUFELAotCUxPQ0tfVVNFRF9JTl9TT0ZUSVJRX1JFQUQsCi0JTE9DS19FTkFCTEVEX1NPRlRJUlFTX1JFQUQsCi0JTE9DS19FTkFCTEVEX0hBUkRJUlFTX1JFQUQsCi0JTE9DS19VU0FHRV9TVEFURVMKLX07Ci0KLS8qCi0gKiBVc2FnZS1zdGF0ZSBiaXRtYXNrczoKLSAqLwotI2RlZmluZSBMT0NLRl9VU0VECQkJKDEgPDwgTE9DS19VU0VEKQotI2RlZmluZSBMT0NLRl9VU0VEX0lOX0hBUkRJUlEJCSgxIDw8IExPQ0tfVVNFRF9JTl9IQVJESVJRKQotI2RlZmluZSBMT0NLRl9VU0VEX0lOX1NPRlRJUlEJCSgxIDw8IExPQ0tfVVNFRF9JTl9TT0ZUSVJRKQotI2RlZmluZSBMT0NLRl9FTkFCTEVEX0hBUkRJUlFTCQkoMSA8PCBMT0NLX0VOQUJMRURfSEFSRElSUVMpCi0jZGVmaW5lIExPQ0tGX0VOQUJMRURfU09GVElSUVMJCSgxIDw8IExPQ0tfRU5BQkxFRF9TT0ZUSVJRUykKLQotI2RlZmluZSBMT0NLRl9FTkFCTEVEX0lSUVMgKExPQ0tGX0VOQUJMRURfSEFSRElSUVMgfCBMT0NLRl9FTkFCTEVEX1NPRlRJUlFTKQotI2RlZmluZSBMT0NLRl9VU0VEX0lOX0lSUSAoTE9DS0ZfVVNFRF9JTl9IQVJESVJRIHwgTE9DS0ZfVVNFRF9JTl9TT0ZUSVJRKQotCi0jZGVmaW5lIExPQ0tGX1VTRURfSU5fSEFSRElSUV9SRUFECSgxIDw8IExPQ0tfVVNFRF9JTl9IQVJESVJRX1JFQUQpCi0jZGVmaW5lIExPQ0tGX1VTRURfSU5fU09GVElSUV9SRUFECSgxIDw8IExPQ0tfVVNFRF9JTl9TT0ZUSVJRX1JFQUQpCi0jZGVmaW5lIExPQ0tGX0VOQUJMRURfSEFSRElSUVNfUkVBRAkoMSA8PCBMT0NLX0VOQUJMRURfSEFSRElSUVNfUkVBRCkKLSNkZWZpbmUgTE9DS0ZfRU5BQkxFRF9TT0ZUSVJRU19SRUFECSgxIDw8IExPQ0tfRU5BQkxFRF9TT0ZUSVJRU19SRUFEKQotCi0jZGVmaW5lIExPQ0tGX0VOQUJMRURfSVJRU19SRUFEIFwKLQkJKExPQ0tGX0VOQUJMRURfSEFSRElSUVNfUkVBRCB8IExPQ0tGX0VOQUJMRURfU09GVElSUVNfUkVBRCkKLSNkZWZpbmUgTE9DS0ZfVVNFRF9JTl9JUlFfUkVBRCBcCi0JCShMT0NLRl9VU0VEX0lOX0hBUkRJUlFfUkVBRCB8IExPQ0tGX1VTRURfSU5fU09GVElSUV9SRUFEKQorI2RlZmluZSBYWFhfTE9DS19VU0FHRV9TVEFURVMJCSgxKzMqNCkKIAogI2RlZmluZSBNQVhfTE9DS0RFUF9TVUJDTEFTU0VTCQk4VUwKIApAQCAtOTcsNyArNjQsNyBAQAogCSAqIElSUS9zb2Z0aXJxIHVzYWdlIHRyYWNraW5nIGJpdHM6CiAJICovCiAJdW5zaWduZWQgbG9uZwkJCXVzYWdlX21hc2s7Ci0Jc3RydWN0IHN0YWNrX3RyYWNlCQl1c2FnZV90cmFjZXNbTE9DS19VU0FHRV9TVEFURVNdOworCXN0cnVjdCBzdGFja190cmFjZQkJdXNhZ2VfdHJhY2VzW1hYWF9MT0NLX1VTQUdFX1NUQVRFU107CiAKIAkvKgogCSAqIFRoZXNlIGZpZWxkcyByZXByZXNlbnQgYSBkaXJlY3RlZCBncmFwaCBvZiBsb2NrIGRlcGVuZGVuY2llcywKQEAgLTMyNCw3ICsyOTEsMTEgQEAKIAlsb2NrX3NldF9jbGFzcyhsb2NrLCBsb2NrLT5uYW1lLCBsb2NrLT5rZXksIHN1YmNsYXNzLCBpcCk7CiB9CiAKLSMgZGVmaW5lIElOSVRfTE9DS0RFUAkJCQkubG9ja2RlcF9yZWN1cnNpb24gPSAwLAorZXh0ZXJuIHZvaWQgbG9ja2RlcF9zZXRfY3VycmVudF9yZWNsYWltX3N0YXRlKGdmcF90IGdmcF9tYXNrKTsKK2V4dGVybiB2b2lkIGxvY2tkZXBfY2xlYXJfY3VycmVudF9yZWNsYWltX3N0YXRlKHZvaWQpOworZXh0ZXJuIHZvaWQgbG9ja2RlcF90cmFjZV9hbGxvYyhnZnBfdCBtYXNrKTsKKworIyBkZWZpbmUgSU5JVF9MT0NLREVQCQkJCS5sb2NrZGVwX3JlY3Vyc2lvbiA9IDAsIC5sb2NrZGVwX3JlY2xhaW1fZ2ZwID0gMCwKIAogI2RlZmluZSBsb2NrZGVwX2RlcHRoKHRzaykJKGRlYnVnX2xvY2tzID8gKHRzayktPmxvY2tkZXBfZGVwdGggOiAwKQogCkBAIC0zNDIsNiArMzEzLDkgQEAKICMgZGVmaW5lIGxvY2tfcmVsZWFzZShsLCBuLCBpKQkJCWRvIHsgfSB3aGlsZSAoMCkKICMgZGVmaW5lIGxvY2tfc2V0X2NsYXNzKGwsIG4sIGssIHMsIGkpCQlkbyB7IH0gd2hpbGUgKDApCiAjIGRlZmluZSBsb2NrX3NldF9zdWJjbGFzcyhsLCBzLCBpKQkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgbG9ja2RlcF9zZXRfY3VycmVudF9yZWNsYWltX3N0YXRlKGcpCWRvIHsgfSB3aGlsZSAoMCkKKyMgZGVmaW5lIGxvY2tkZXBfY2xlYXJfY3VycmVudF9yZWNsYWltX3N0YXRlKCkJZG8geyB9IHdoaWxlICgwKQorIyBkZWZpbmUgbG9ja2RlcF90cmFjZV9hbGxvYyhnKQkJCWRvIHsgfSB3aGlsZSAoMCkKICMgZGVmaW5lIGxvY2tkZXBfaW5pdCgpCQkJCWRvIHsgfSB3aGlsZSAoMCkKICMgZGVmaW5lIGxvY2tkZXBfaW5mbygpCQkJCWRvIHsgfSB3aGlsZSAoMCkKICMgZGVmaW5lIGxvY2tkZXBfaW5pdF9tYXAobG9jaywgbmFtZSwga2V5LCBzdWIpIFwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW0uaCBiL2luY2x1ZGUvbGludXgvbW0uaAppbmRleCAwNjVjZGY4Li5iMWVhMzdmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L21tLmgKKysrIGIvaW5jbHVkZS9saW51eC9tbS5oCkBAIC0xMDQsNiArMTA0LDcgQEAKICNkZWZpbmUgVk1fQ0FOX05PTkxJTkVBUiAweDA4MDAwMDAwCS8qIEhhcyAtPmZhdWx0ICYgZG9lcyBub25saW5lYXIgcGFnZXMgKi8KICNkZWZpbmUgVk1fTUlYRURNQVAJMHgxMDAwMDAwMAkvKiBDYW4gY29udGFpbiAic3RydWN0IHBhZ2UiIGFuZCBwdXJlIFBGTiBwYWdlcyAqLwogI2RlZmluZSBWTV9TQU8JCTB4MjAwMDAwMDAJLyogU3Ryb25nIEFjY2VzcyBPcmRlcmluZyAocG93ZXJwYykgKi8KKyNkZWZpbmUgVk1fUEZOX0FUX01NQVAJMHg0MDAwMDAwMAkvKiBQRk5NQVAgdm1hIHRoYXQgaXMgZnVsbHkgbWFwcGVkIGF0IG1tYXAgdGltZSAqLwogCiAjaWZuZGVmIFZNX1NUQUNLX0RFRkFVTFRfRkxBR1MJCS8qIGFyY2ggY2FuIG92ZXJyaWRlIHRoaXMgKi8KICNkZWZpbmUgVk1fU1RBQ0tfREVGQVVMVF9GTEFHUyBWTV9EQVRBX0RFRkFVTFRfRkxBR1MKQEAgLTE0NSw3ICsxNDYsNyBAQAogICovCiBzdGF0aWMgaW5saW5lIGludCBpc19saW5lYXJfcGZuX21hcHBpbmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpCiB7Ci0JcmV0dXJuICgodm1hLT52bV9mbGFncyAmIFZNX1BGTk1BUCkgJiYgdm1hLT52bV9wZ29mZik7CisJcmV0dXJuICh2bWEtPnZtX2ZsYWdzICYgVk1fUEZOX0FUX01NQVApOwogfQogCiBzdGF0aWMgaW5saW5lIGludCBpc19wZm5fbWFwcGluZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbXV0ZXguaCBiL2luY2x1ZGUvbGludXgvbXV0ZXguaAppbmRleCA3YTBlNWM0Li4zMDY5ZWM3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L211dGV4LmgKKysrIGIvaW5jbHVkZS9saW51eC9tdXRleC5oCkBAIC01MCw4ICs1MCwxMCBAQAogCWF0b21pY190CQljb3VudDsKIAlzcGlubG9ja190CQl3YWl0X2xvY2s7CiAJc3RydWN0IGxpc3RfaGVhZAl3YWl0X2xpc3Q7Ci0jaWZkZWYgQ09ORklHX0RFQlVHX01VVEVYRVMKKyNpZiBkZWZpbmVkKENPTkZJR19ERUJVR19NVVRFWEVTKSB8fCBkZWZpbmVkKENPTkZJR19TTVApCiAJc3RydWN0IHRocmVhZF9pbmZvCSpvd25lcjsKKyNlbmRpZgorI2lmZGVmIENPTkZJR19ERUJVR19NVVRFWEVTCiAJY29uc3QgY2hhciAJCSpuYW1lOwogCXZvaWQJCQkqbWFnaWM7CiAjZW5kaWYKQEAgLTY4LDcgKzcwLDYgQEAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWxpc3Q7CiAJc3RydWN0IHRhc2tfc3RydWN0CSp0YXNrOwogI2lmZGVmIENPTkZJR19ERUJVR19NVVRFWEVTCi0Jc3RydWN0IG11dGV4CQkqbG9jazsKIAl2b2lkCQkJKm1hZ2ljOwogI2VuZGlmCiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2kuaCBiL2luY2x1ZGUvbGludXgvcGNpLmgKaW5kZXggN2JkNjI0Yi4uZGYzNjQ0MSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9wY2kuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaS5oCkBAIC02ODksNiArNjg5LDcgQEAKIC8qIFBvd2VyIG1hbmFnZW1lbnQgcmVsYXRlZCByb3V0aW5lcyAqLwogaW50IHBjaV9zYXZlX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwogaW50IHBjaV9yZXN0b3JlX3N0YXRlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOworaW50IF9fcGNpX2NvbXBsZXRlX3Bvd2VyX3RyYW5zaXRpb24oc3RydWN0IHBjaV9kZXYgKmRldiwgcGNpX3Bvd2VyX3Qgc3RhdGUpOwogaW50IHBjaV9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IHBjaV9kZXYgKmRldiwgcGNpX3Bvd2VyX3Qgc3RhdGUpOwogcGNpX3Bvd2VyX3QgcGNpX2Nob29zZV9zdGF0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBwbV9tZXNzYWdlX3Qgc3RhdGUpOwogYm9vbCBwY2lfcG1lX2NhcGFibGUoc3RydWN0IHBjaV9kZXYgKmRldiwgcGNpX3Bvd2VyX3Qgc3RhdGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wY2lfaWRzLmggYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAppbmRleCAyYzllODA4Li5lNTgxNmRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3BjaV9pZHMuaApAQCAtMjIzMiw2ICsyMjMyLDE0IEBACiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfVERJX0VIQ0kgICAgICAgICAgMHgwMTAxCiAKICNkZWZpbmUgUENJX1ZFTkRPUl9JRF9GUkVFU0NBTEUJCTB4MTk1NworI2RlZmluZSBQQ0lfREVWSUNFX0lEX01QQzgzMTVFCQkweDAwYjQKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NUEM4MzE1CQkweDAwYjUKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NUEM4MzE0RQkJMHgwMGI2CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVBDODMxNAkJMHgwMGI3CisjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVBDODM3OEUJCTB4MDBjNAorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01QQzgzNzgJCTB4MDBjNQorI2RlZmluZSBQQ0lfREVWSUNFX0lEX01QQzgzNzdFCQkweDAwYzYKKyNkZWZpbmUgUENJX0RFVklDRV9JRF9NUEM4Mzc3CQkweDAwYzcKICNkZWZpbmUgUENJX0RFVklDRV9JRF9NUEM4NTQ4RQkJMHgwMDEyCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVBDODU0OAkJMHgwMDEzCiAjZGVmaW5lIFBDSV9ERVZJQ0VfSURfTVBDODU0M0UJCTB4MDAxNApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wcm9jX2ZzLmggYi9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaAppbmRleCBiOGJkYjk2Li5mYmZhM2Q0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaAorKysgYi9pbmNsdWRlL2xpbnV4L3Byb2NfZnMuaApAQCAtNDEsOSArNDEsNiBAQAogICogd2hpbGUgcGFyZW50L3N1YmRpciBjcmVhdGUgdGhlIGRpcmVjdG9yeSBzdHJ1Y3R1cmUgKGV2ZXJ5CiAgKiAvcHJvYyBmaWxlIGhhcyBhIHBhcmVudCwgYnV0ICJzdWJkaXIiIGlzIE5VTEwgZm9yIGFsbAogICogbm9uLWRpcmVjdG9yeSBlbnRyaWVzKS4KLSAqCi0gKiAib3duZXIiIGlzIHVzZWQgdG8gcHJvdGVjdCBtb2R1bGUKLSAqIGZyb20gdW5sb2FkaW5nIHdoaWxlIHByb2NfZGlyX2VudHJ5IGlzIGluIHVzZQogICovCiAKIHR5cGVkZWYJaW50IChyZWFkX3Byb2NfdCkoY2hhciAqcGFnZSwgY2hhciAqKnN0YXJ0LCBvZmZfdCBvZmYsCkBAIC03MCw3ICs2Nyw2IEBACiAJICogc29tZXdoZXJlLgogCSAqLwogCWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKnByb2NfZm9wczsKLQlzdHJ1Y3QgbW9kdWxlICpvd25lcjsKIAlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKm5leHQsICpwYXJlbnQsICpzdWJkaXI7CiAJdm9pZCAqZGF0YTsKIAlyZWFkX3Byb2NfdCAqcmVhZF9wcm9jOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19hY2wuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfYWNsLmgKaW5kZXggZmUwMGY3OC4uOGNjNjU3NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19hY2wuaAorKysgYi9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2FjbC5oCkBAIC00OSwxMyArNDksMTIgQEAKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMCiBzdHJ1Y3QgcG9zaXhfYWNsICpyZWlzZXJmc19nZXRfYWNsKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCB0eXBlKTsKIGludCByZWlzZXJmc19hY2xfY2htb2Qoc3RydWN0IGlub2RlICppbm9kZSk7Ci1pbnQgcmVpc2VyZnNfaW5oZXJpdF9kZWZhdWx0X2FjbChzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAoraW50IHJlaXNlcmZzX2luaGVyaXRfZGVmYXVsdF9hY2woc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCisJCQkJIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksCiAJCQkJIHN0cnVjdCBpbm9kZSAqaW5vZGUpOwogaW50IHJlaXNlcmZzX2NhY2hlX2RlZmF1bHRfYWNsKHN0cnVjdCBpbm9kZSAqZGlyKTsKLWV4dGVybiBpbnQgcmVpc2VyZnNfeGF0dHJfcG9zaXhfYWNsX2luaXQodm9pZCkgX19pbml0OwotZXh0ZXJuIGludCByZWlzZXJmc194YXR0cl9wb3NpeF9hY2xfZXhpdCh2b2lkKTsKLWV4dGVybiBzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciBwb3NpeF9hY2xfZGVmYXVsdF9oYW5kbGVyOwotZXh0ZXJuIHN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyIHBvc2l4X2FjbF9hY2Nlc3NfaGFuZGxlcjsKK2V4dGVybiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciByZWlzZXJmc19wb3NpeF9hY2xfZGVmYXVsdF9oYW5kbGVyOworZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyIHJlaXNlcmZzX3Bvc2l4X2FjbF9hY2Nlc3NfaGFuZGxlcjsKIAogc3RhdGljIGlubGluZSB2b2lkIHJlaXNlcmZzX2luaXRfYWNsX2FjY2VzcyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewpAQCAtNzUsMjMgKzc0LDE0IEBACiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbmxpbmUgaW50IHJlaXNlcmZzX3hhdHRyX3Bvc2l4X2FjbF9pbml0KHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IHJlaXNlcmZzX3hhdHRyX3Bvc2l4X2FjbF9leGl0KHZvaWQpCi17Ci0JcmV0dXJuIDA7Ci19Ci0KIHN0YXRpYyBpbmxpbmUgaW50IHJlaXNlcmZzX2FjbF9jaG1vZChzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewogCXJldHVybiAwOwogfQogCiBzdGF0aWMgaW5saW5lIGludAotcmVpc2VyZnNfaW5oZXJpdF9kZWZhdWx0X2FjbChjb25zdCBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LAorcmVpc2VyZnNfaW5oZXJpdF9kZWZhdWx0X2FjbChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKKwkJCSAgICAgY29uc3Qgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwKIAkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSkKIHsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnMuaAppbmRleCBlMzU2Yzk5Li4yMjQ1Yzc4IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mcy5oCkBAIC01OCw4ICs1OCw2IEBACiAjZGVmaW5lIHJlaXNlcmZzX3dyaXRlX2xvY2soIHNiICkgbG9ja19rZXJuZWwoKQogI2RlZmluZSByZWlzZXJmc193cml0ZV91bmxvY2soIHNiICkgdW5sb2NrX2tlcm5lbCgpCiAKLS8qIHhhdHRyIHN0dWZmICovCi0jZGVmaW5lIFJFSVNFUkZTX1hBVFRSX0RJUl9TRU0ocykgKFJFSVNFUkZTX1NCKHMpLT54YXR0cl9kaXJfc2VtKQogc3RydWN0IGZpZDsKIAogLyogaW4gcmVhZGluZyB0aGUgI2RlZmluZXMsIGl0IG1heSBoZWxwIHRvIHVuZGVyc3RhbmQgdGhhdCB0aGV5IGVtcGxveQpAQCAtMTA0LDE1ICsxMDIsMjEgQEAKICovCiAjZGVmaW5lIFJFSVNFUkZTX0RFQlVHX0NPREUgNQkvKiBleHRyYSBtZXNzYWdlcyB0byBoZWxwIGZpbmQvZGVidWcgZXJyb3JzICovCiAKLXZvaWQgcmVpc2VyZnNfd2FybmluZyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKK3ZvaWQgX19yZWlzZXJmc193YXJuaW5nKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgY29uc3QgY2hhciAqaWQsCisJCQkgY29uc3QgY2hhciAqZnVuYywgY29uc3QgY2hhciAqZm10LCAuLi4pOworI2RlZmluZSByZWlzZXJmc193YXJuaW5nKHMsIGlkLCBmbXQsIGFyZ3MuLi4pIFwKKwkgX19yZWlzZXJmc193YXJuaW5nKHMsIGlkLCBfX2Z1bmNfXywgZm10LCAjI2FyZ3MpCiAvKiBhc3NlcnRpb25zIGhhbmRsaW5nICovCiAKIC8qKiBhbHdheXMgY2hlY2sgYSBjb25kaXRpb24gYW5kIHBhbmljIGlmIGl0J3MgZmFsc2UuICovCi0jZGVmaW5lIF9fUkFTU0VSVCggY29uZCwgc2NvbmQsIGZvcm1hdCwgYXJncy4uLiApCQkJCQlcCi1pZiggISggY29uZCApICkgCQkJCQkJCQlcCi0gIHJlaXNlcmZzX3BhbmljKCBOVUxMLCAicmVpc2VyZnNbJWldOiBhc3NlcnRpb24gIiBzY29uZCAiIGZhaWxlZCBhdCAiCVwKLQkJICBfX0ZJTEVfXyAiOiVpOiVzOiAiIGZvcm1hdCAiXG4iLAkJXAotCQkgIGluX2ludGVycnVwdCgpID8gLTEgOiB0YXNrX3BpZF9ucihjdXJyZW50KSwgX19MSU5FX18gLCBfX2Z1bmNfXyAsICMjYXJncyApCisjZGVmaW5lIF9fUkFTU0VSVChjb25kLCBzY29uZCwgZm9ybWF0LCBhcmdzLi4uKQkJCVwKK2RvIHsJCQkJCQkJCQlcCisJaWYgKCEoY29uZCkpCQkJCQkJCVwKKwkJcmVpc2VyZnNfcGFuaWMoTlVMTCwgImFzc2VydGlvbiBmYWlsdXJlIiwgIigiICNjb25kICIpIGF0ICIgXAorCQkJICAgICAgIF9fRklMRV9fICI6JWk6JXM6ICIgZm9ybWF0ICJcbiIsCQlcCisJCQkgICAgICAgaW5faW50ZXJydXB0KCkgPyAtMSA6IHRhc2tfcGlkX25yKGN1cnJlbnQpLCBcCisJCQkgICAgICAgX19MSU5FX18sIF9fZnVuY19fICwgIyNhcmdzKTsJCVwKK30gd2hpbGUgKDApCiAKICNkZWZpbmUgUkFTU0VSVChjb25kLCBmb3JtYXQsIGFyZ3MuLi4pIF9fUkFTU0VSVChjb25kLCAjY29uZCwgZm9ybWF0LCAjI2FyZ3MpCiAKQEAgLTE5Niw3ICsyMDAsMTEgQEAKIAlfX2xlMzIgc19mbGFnczsJCS8qIFJpZ2h0IG5vdyB1c2VkIG9ubHkgYnkgaW5vZGUtYXR0cmlidXRlcywgaWYgZW5hYmxlZCAqLwogCXVuc2lnbmVkIGNoYXIgc191dWlkWzE2XTsJLyogZmlsZXN5c3RlbSB1bmlxdWUgaWRlbnRpZmllciAqLwogCXVuc2lnbmVkIGNoYXIgc19sYWJlbFsxNl07CS8qIGZpbGVzeXN0ZW0gdm9sdW1lIGxhYmVsICovCi0JY2hhciBzX3VudXNlZFs4OF07CS8qIHplcm8gZmlsbGVkIGJ5IG1rcmVpc2VyZnMgYW5kCisJX19sZTE2IHNfbW50X2NvdW50OwkJLyogQ291bnQgb2YgbW91bnRzIHNpbmNlIGxhc3QgZnNjayAqLworCV9fbGUxNiBzX21heF9tbnRfY291bnQ7CQkvKiBNYXhpbXVtIG1vdW50cyBiZWZvcmUgY2hlY2sgKi8KKwlfX2xlMzIgc19sYXN0Y2hlY2s7CQkvKiBUaW1lc3RhbXAgb2YgbGFzdCBmc2NrICovCisJX19sZTMyIHNfY2hlY2tfaW50ZXJ2YWw7CS8qIEludGVydmFsIGJldHdlZW4gY2hlY2tzICovCisJY2hhciBzX3VudXNlZFs3Nl07CS8qIHplcm8gZmlsbGVkIGJ5IG1rcmVpc2VyZnMgYW5kCiAJCQkJICogcmVpc2VyZnNfY29udmVydF9vYmplY3RpZF9tYXBfdjEoKQogCQkJCSAqIHNvIGFueSBhZGRpdGlvbnMgbXVzdCBiZSB1cGRhdGVkCiAJCQkJICogdGhlcmUgYXMgd2VsbC4gKi8KQEAgLTU3OCwxMCArNTg2LDggQEAKIAkJcmV0dXJuIFRZUEVfRElSRUNUOwogCWNhc2UgVjFfRElSRU5UUllfVU5JUVVFTkVTUzoKIAkJcmV0dXJuIFRZUEVfRElSRU5UUlk7Ci0JZGVmYXVsdDoKLQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAidnMtNTAwOiB1bmtub3duIHVuaXF1ZW5lc3MgJWQiLAotCQkJCSB1bmlxdWVuZXNzKTsKIAljYXNlIFYxX0FOWV9VTklRVUVORVNTOgorCWRlZmF1bHQ6CiAJCXJldHVybiBUWVBFX0FOWTsKIAl9CiB9CkBAIC01OTgsOSArNjA0LDggQEAKIAkJcmV0dXJuIFYxX0RJUkVDVF9VTklRVUVORVNTOwogCWNhc2UgVFlQRV9ESVJFTlRSWToKIAkJcmV0dXJuIFYxX0RJUkVOVFJZX1VOSVFVRU5FU1M7Ci0JZGVmYXVsdDoKLQkJcmVpc2VyZnNfd2FybmluZyhOVUxMLCAidnMtNTAxOiB1bmtub3duIHR5cGUgJWQiLCB0eXBlKTsKIAljYXNlIFRZUEVfQU5ZOgorCWRlZmF1bHQ6CiAJCXJldHVybiBWMV9BTllfVU5JUVVFTkVTUzsKIAl9CiB9CkBAIC03MTIsOSArNzE3LDkgQEAKICNkZWZpbmUgaXNfaW5kaXJlY3RfY3B1X2loKGloKSAoaXNfaW5kaXJlY3RfY3B1X2tleSAoJigoaWgpLT5paF9rZXkpKSkKICNkZWZpbmUgaXNfc3RhdGRhdGFfY3B1X2loKGloKSAoaXNfc3RhdGRhdGFfY3B1X2tleSAoJigoaWgpLT5paF9rZXkpKSkKIAotI2RlZmluZSBJX0tfS0VZX0lOX0lURU0ocF9zX2loLCBwX3Nfa2V5LCBuX2Jsb2Nrc2l6ZSkgXAotICAgICggISBDT01QX1NIT1JUX0tFWVMocF9zX2loLCBwX3Nfa2V5KSAmJiBcCi0gICAgICAgICAgSV9PRkZfQllURV9JTl9JVEVNKHBfc19paCwga19vZmZzZXQgKHBfc19rZXkpLCBuX2Jsb2Nrc2l6ZSkgKQorI2RlZmluZSBJX0tfS0VZX0lOX0lURU0oaWgsIGtleSwgbl9ibG9ja3NpemUpIFwKKyAgICAoIUNPTVBfU0hPUlRfS0VZUyhpaCwga2V5KSAmJiBcCisJICBJX09GRl9CWVRFX0lOX0lURU0oaWgsIGtfb2Zmc2V0KGtleSksIG5fYmxvY2tzaXplKSkKIAogLyogbWF4aW1hbCBsZW5ndGggb2YgaXRlbSAqLwogI2RlZmluZSBNQVhfSVRFTV9MRU4oYmxvY2tfc2l6ZSkgKGJsb2NrX3NpemUgLSBCTEtIX1NJWkUgLSBJSF9TSVpFKQpAQCAtNzcwLDI1ICs3NzUsMjUgQEAKICNkZWZpbmUgRElTS19MRUFGX05PREVfTEVWRUwgIDEJLyogTGVhZiBub2RlIGxldmVsLiAqLwogCiAvKiBHaXZlbiB0aGUgYnVmZmVyIGhlYWQgb2YgYSBmb3JtYXR0ZWQgbm9kZSwgcmVzb2x2ZSB0byB0aGUgYmxvY2sgaGVhZCBvZiB0aGF0IG5vZGUuICovCi0jZGVmaW5lIEJfQkxLX0hFQUQocF9zX2JoKSAgICAgICAgICAgICgoc3RydWN0IGJsb2NrX2hlYWQgKikoKHBfc19iaCktPmJfZGF0YSkpCisjZGVmaW5lIEJfQkxLX0hFQUQoYmgpCQkJKChzdHJ1Y3QgYmxvY2tfaGVhZCAqKSgoYmgpLT5iX2RhdGEpKQogLyogTnVtYmVyIG9mIGl0ZW1zIHRoYXQgYXJlIGluIGJ1ZmZlci4gKi8KLSNkZWZpbmUgQl9OUl9JVEVNUyhwX3NfYmgpICAgICAgICAgICAgKGJsa2hfbnJfaXRlbShCX0JMS19IRUFEKHBfc19iaCkpKQotI2RlZmluZSBCX0xFVkVMKHBfc19iaCkgICAgICAgICAgICAgICAoYmxraF9sZXZlbChCX0JMS19IRUFEKHBfc19iaCkpKQotI2RlZmluZSBCX0ZSRUVfU1BBQ0UocF9zX2JoKSAgICAgICAgICAoYmxraF9mcmVlX3NwYWNlKEJfQkxLX0hFQUQocF9zX2JoKSkpCisjZGVmaW5lIEJfTlJfSVRFTVMoYmgpCQkJKGJsa2hfbnJfaXRlbShCX0JMS19IRUFEKGJoKSkpCisjZGVmaW5lIEJfTEVWRUwoYmgpCQkJKGJsa2hfbGV2ZWwoQl9CTEtfSEVBRChiaCkpKQorI2RlZmluZSBCX0ZSRUVfU1BBQ0UoYmgpCQkoYmxraF9mcmVlX3NwYWNlKEJfQkxLX0hFQUQoYmgpKSkKIAotI2RlZmluZSBQVVRfQl9OUl9JVEVNUyhwX3NfYmgsdmFsKSAgICBkbyB7IHNldF9ibGtoX25yX2l0ZW0oQl9CTEtfSEVBRChwX3NfYmgpLHZhbCk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFBVVF9CX0xFVkVMKHBfc19iaCx2YWwpICAgICAgIGRvIHsgc2V0X2Jsa2hfbGV2ZWwoQl9CTEtfSEVBRChwX3NfYmgpLHZhbCk7IH0gd2hpbGUgKDApCi0jZGVmaW5lIFBVVF9CX0ZSRUVfU1BBQ0UocF9zX2JoLHZhbCkgIGRvIHsgc2V0X2Jsa2hfZnJlZV9zcGFjZShCX0JMS19IRUFEKHBfc19iaCksdmFsKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUFVUX0JfTlJfSVRFTVMoYmgsIHZhbCkJCWRvIHsgc2V0X2Jsa2hfbnJfaXRlbShCX0JMS19IRUFEKGJoKSwgdmFsKTsgfSB3aGlsZSAoMCkKKyNkZWZpbmUgUFVUX0JfTEVWRUwoYmgsIHZhbCkJCWRvIHsgc2V0X2Jsa2hfbGV2ZWwoQl9CTEtfSEVBRChiaCksIHZhbCk7IH0gd2hpbGUgKDApCisjZGVmaW5lIFBVVF9CX0ZSRUVfU1BBQ0UoYmgsIHZhbCkJZG8geyBzZXRfYmxraF9mcmVlX3NwYWNlKEJfQkxLX0hFQUQoYmgpLCB2YWwpOyB9IHdoaWxlICgwKQogCiAvKiBHZXQgcmlnaHQgZGVsaW1pdGluZyBrZXkuIC0tIGxpdHRsZSBlbmRpYW4gKi8KLSNkZWZpbmUgQl9QUklHSFRfREVMSU1fS0VZKHBfc19iaCkgICAoJihibGtfcmlnaHRfZGVsaW1fa2V5KEJfQkxLX0hFQUQocF9zX2JoKSkpKQorI2RlZmluZSBCX1BSSUdIVF9ERUxJTV9LRVkoYmgpCQkoJihibGtfcmlnaHRfZGVsaW1fa2V5KEJfQkxLX0hFQUQoYmgpKSkpCiAKIC8qIERvZXMgdGhlIGJ1ZmZlciBjb250YWluIGEgZGlzayBsZWFmLiAqLwotI2RlZmluZSBCX0lTX0lURU1TX0xFVkVMKHBfc19iaCkgICAgIChCX0xFVkVMKHBfc19iaCkgPT0gRElTS19MRUFGX05PREVfTEVWRUwpCisjZGVmaW5lIEJfSVNfSVRFTVNfTEVWRUwoYmgpCQkoQl9MRVZFTChiaCkgPT0gRElTS19MRUFGX05PREVfTEVWRUwpCiAKIC8qIERvZXMgdGhlIGJ1ZmZlciBjb250YWluIGEgZGlzayBpbnRlcm5hbCBub2RlICovCi0jZGVmaW5lIEJfSVNfS0VZU19MRVZFTChwX3NfYmgpICAgICAgKEJfTEVWRUwocF9zX2JoKSA+IERJU0tfTEVBRl9OT0RFX0xFVkVMIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgQl9MRVZFTChwX3NfYmgpIDw9IE1BWF9IRUlHSFQpCisjZGVmaW5lIEJfSVNfS0VZU19MRVZFTChiaCkgICAgICAoQl9MRVZFTChiaCkgPiBESVNLX0xFQUZfTk9ERV9MRVZFTCBcCisJCQkJCSAgICAmJiBCX0xFVkVMKGJoKSA8PSBNQVhfSEVJR0hUKQogCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNUQVQgREFUQSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KQEAgLTExMzgsMTIgKzExNDMsMTMgQEAKICNkZWZpbmUgcHV0X2RjX3NpemUoZGNfcCwgdmFsKSAgIGRvIHsgKGRjX3ApLT5kY19zaXplID0gY3B1X3RvX2xlMTYodmFsKTsgfSB3aGlsZSgwKQogCiAvKiBHZXQgZGlzayBjaGlsZCBieSBidWZmZXIgaGVhZGVyIGFuZCBwb3NpdGlvbiBpbiB0aGUgdHJlZSBub2RlLiAqLwotI2RlZmluZSBCX05fQ0hJTEQocF9zX2JoLG5fcG9zKSAgKChzdHJ1Y3QgZGlza19jaGlsZCAqKVwKLSgocF9zX2JoKS0+Yl9kYXRhK0JMS0hfU0laRStCX05SX0lURU1TKHBfc19iaCkqS0VZX1NJWkUrRENfU0laRSoobl9wb3MpKSkKKyNkZWZpbmUgQl9OX0NISUxEKGJoLCBuX3BvcykgICgoc3RydWN0IGRpc2tfY2hpbGQgKilcCisoKGJoKS0+Yl9kYXRhICsgQkxLSF9TSVpFICsgQl9OUl9JVEVNUyhiaCkgKiBLRVlfU0laRSArIERDX1NJWkUgKiAobl9wb3MpKSkKIAogLyogR2V0IGRpc2sgY2hpbGQgbnVtYmVyIGJ5IGJ1ZmZlciBoZWFkZXIgYW5kIHBvc2l0aW9uIGluIHRoZSB0cmVlIG5vZGUuICovCi0jZGVmaW5lIEJfTl9DSElMRF9OVU0ocF9zX2JoLG5fcG9zKSAoZGNfYmxvY2tfbnVtYmVyKEJfTl9DSElMRChwX3NfYmgsbl9wb3MpKSkKLSNkZWZpbmUgUFVUX0JfTl9DSElMRF9OVU0ocF9zX2JoLG5fcG9zLCB2YWwpIChwdXRfZGNfYmxvY2tfbnVtYmVyKEJfTl9DSElMRChwX3NfYmgsbl9wb3MpLCB2YWwgKSkKKyNkZWZpbmUgQl9OX0NISUxEX05VTShiaCwgbl9wb3MpIChkY19ibG9ja19udW1iZXIoQl9OX0NISUxEKGJoLCBuX3BvcykpKQorI2RlZmluZSBQVVRfQl9OX0NISUxEX05VTShiaCwgbl9wb3MsIHZhbCkgXAorCQkJCShwdXRfZGNfYmxvY2tfbnVtYmVyKEJfTl9DSElMRChiaCwgbl9wb3MpLCB2YWwpKQogCiAgLyogbWF4aW1hbCB2YWx1ZSBvZiBmaWVsZCBjaGlsZF9zaXplIGluIHN0cnVjdHVyZSBkaXNrX2NoaWxkICovCiAgLyogY2hpbGQgc2l6ZSBpcyB0aGUgY29tYmluZWQgc2l6ZSBvZiBhbGwgaXRlbXMgYW5kIHRoZWlyIGhlYWRlcnMgKi8KQEAgLTEyMTQsMzMgKzEyMjAsMzMgQEAKIHN0cnVjdCB0cmVlcGF0aCB2YXIgPSB7LnBhdGhfbGVuZ3RoID0gSUxMRUdBTF9QQVRIX0VMRU1FTlRfT0ZGU0VULCAucmVhZGEgPSAwLH0KIAogLyogR2V0IHBhdGggZWxlbWVudCBieSBwYXRoIGFuZCBwYXRoIHBvc2l0aW9uLiAqLwotI2RlZmluZSBQQVRIX09GRlNFVF9QRUxFTUVOVChwX3NfcGF0aCxuX29mZnNldCkgICgocF9zX3BhdGgpLT5wYXRoX2VsZW1lbnRzICsobl9vZmZzZXQpKQorI2RlZmluZSBQQVRIX09GRlNFVF9QRUxFTUVOVChwYXRoLCBuX29mZnNldCkgICgocGF0aCktPnBhdGhfZWxlbWVudHMgKyAobl9vZmZzZXQpKQogCiAvKiBHZXQgYnVmZmVyIGhlYWRlciBhdCB0aGUgcGF0aCBieSBwYXRoIGFuZCBwYXRoIHBvc2l0aW9uLiAqLwotI2RlZmluZSBQQVRIX09GRlNFVF9QQlVGRkVSKHBfc19wYXRoLG5fb2Zmc2V0KSAgIChQQVRIX09GRlNFVF9QRUxFTUVOVChwX3NfcGF0aCxuX29mZnNldCktPnBlX2J1ZmZlcikKKyNkZWZpbmUgUEFUSF9PRkZTRVRfUEJVRkZFUihwYXRoLCBuX29mZnNldCkgICAoUEFUSF9PRkZTRVRfUEVMRU1FTlQocGF0aCwgbl9vZmZzZXQpLT5wZV9idWZmZXIpCiAKIC8qIEdldCBwb3NpdGlvbiBpbiB0aGUgZWxlbWVudCBhdCB0aGUgcGF0aCBieSBwYXRoIGFuZCBwYXRoIHBvc2l0aW9uLiAqLwotI2RlZmluZSBQQVRIX09GRlNFVF9QT1NJVElPTihwX3NfcGF0aCxuX29mZnNldCkgKFBBVEhfT0ZGU0VUX1BFTEVNRU5UKHBfc19wYXRoLG5fb2Zmc2V0KS0+cGVfcG9zaXRpb24pCisjZGVmaW5lIFBBVEhfT0ZGU0VUX1BPU0lUSU9OKHBhdGgsIG5fb2Zmc2V0KSAoUEFUSF9PRkZTRVRfUEVMRU1FTlQocGF0aCwgbl9vZmZzZXQpLT5wZV9wb3NpdGlvbikKIAotI2RlZmluZSBQQVRIX1BMQVNUX0JVRkZFUihwX3NfcGF0aCkgKFBBVEhfT0ZGU0VUX1BCVUZGRVIoKHBfc19wYXRoKSwgKHBfc19wYXRoKS0+cGF0aF9sZW5ndGgpKQorI2RlZmluZSBQQVRIX1BMQVNUX0JVRkZFUihwYXRoKSAoUEFUSF9PRkZTRVRfUEJVRkZFUigocGF0aCksIChwYXRoKS0+cGF0aF9sZW5ndGgpKQogCQkJCS8qIHlvdSBrbm93LCB0byB0aGUgcGVyc29uIHdobyBkaWRuJ3QKIAkJCQkgICB3cml0ZSB0aGlzIHRoZSBtYWNybyBuYW1lIGRvZXMgbm90CiAJCQkJICAgYXQgZmlyc3Qgc3VnZ2VzdCB3aGF0IGl0IGRvZXMuCiAJCQkJICAgTWF5YmUgUE9TSVRJT05fRlJPTV9QQVRIX0VORD8gT3IKIAkJCQkgICBtYXliZSB3ZSBzaG91bGQganVzdCBmb2N1cyBvbgogCQkJCSAgIGR1bXBpbmcgcGF0aHMuLi4gLUhhbnMgKi8KLSNkZWZpbmUgUEFUSF9MQVNUX1BPU0lUSU9OKHBfc19wYXRoKSAoUEFUSF9PRkZTRVRfUE9TSVRJT04oKHBfc19wYXRoKSwgKHBfc19wYXRoKS0+cGF0aF9sZW5ndGgpKQorI2RlZmluZSBQQVRIX0xBU1RfUE9TSVRJT04ocGF0aCkgKFBBVEhfT0ZGU0VUX1BPU0lUSU9OKChwYXRoKSwgKHBhdGgpLT5wYXRoX2xlbmd0aCkpCiAKLSNkZWZpbmUgUEFUSF9QSVRFTV9IRUFEKHBfc19wYXRoKSAgICBCX05fUElURU1fSEVBRChQQVRIX1BMQVNUX0JVRkZFUihwX3NfcGF0aCksUEFUSF9MQVNUX1BPU0lUSU9OKHBfc19wYXRoKSkKKyNkZWZpbmUgUEFUSF9QSVRFTV9IRUFEKHBhdGgpICAgIEJfTl9QSVRFTV9IRUFEKFBBVEhfUExBU1RfQlVGRkVSKHBhdGgpLCBQQVRIX0xBU1RfUE9TSVRJT04ocGF0aCkpCiAKIC8qIGluIGRvX2JhbGFuY2UgbGVhZiBoYXMgaCA9PSAwIGluIGNvbnRyYXN0IHdpdGggcGF0aCBzdHJ1Y3R1cmUsCiAgICB3aGVyZSByb290IGhhcyBsZXZlbCA9PSAwLiBUaGF0IGlzIHdoeSB3ZSBuZWVkIHRoZXNlIGRlZmluZXMgKi8KLSNkZWZpbmUgUEFUSF9IX1BCVUZGRVIocF9zX3BhdGgsIGgpIFBBVEhfT0ZGU0VUX1BCVUZGRVIgKHBfc19wYXRoLCBwX3NfcGF0aC0+cGF0aF9sZW5ndGggLSAoaCkpCS8qIHRiLT5TW2hdICovCisjZGVmaW5lIFBBVEhfSF9QQlVGRkVSKHBhdGgsIGgpIFBBVEhfT0ZGU0VUX1BCVUZGRVIgKHBhdGgsIHBhdGgtPnBhdGhfbGVuZ3RoIC0gKGgpKQkvKiB0Yi0+U1toXSAqLwogI2RlZmluZSBQQVRIX0hfUFBBUkVOVChwYXRoLCBoKSBQQVRIX0hfUEJVRkZFUiAocGF0aCwgKGgpICsgMSkJLyogdGItPkZbaF0gb3IgdGItPlNbMF0tPmJfcGFyZW50ICovCiAjZGVmaW5lIFBBVEhfSF9QT1NJVElPTihwYXRoLCBoKSBQQVRIX09GRlNFVF9QT1NJVElPTiAocGF0aCwgcGF0aC0+cGF0aF9sZW5ndGggLSAoaCkpCiAjZGVmaW5lIFBBVEhfSF9CX0lURU1fT1JERVIocGF0aCwgaCkgUEFUSF9IX1BPU0lUSU9OKHBhdGgsIGggKyAxKQkvKiB0Yi0+U1toXS0+Yl9pdGVtX29yZGVyICovCiAKLSNkZWZpbmUgUEFUSF9IX1BBVEhfT0ZGU0VUKHBfc19wYXRoLCBuX2gpICgocF9zX3BhdGgpLT5wYXRoX2xlbmd0aCAtIChuX2gpKQorI2RlZmluZSBQQVRIX0hfUEFUSF9PRkZTRVQocGF0aCwgbl9oKSAoKHBhdGgpLT5wYXRoX2xlbmd0aCAtIChuX2gpKQogCiAjZGVmaW5lIGdldF9sYXN0X2JoKHBhdGgpIFBBVEhfUExBU1RfQlVGRkVSKHBhdGgpCiAjZGVmaW5lIGdldF9paChwYXRoKSBQQVRIX1BJVEVNX0hFQUQocGF0aCkKQEAgLTE0NzAsNiArMTQ3NiwxNiBAQAogCWludCBiaV9wb3NpdGlvbjsKIH07CiAKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHN1cGVyX2Jsb2NrICpzYl9mcm9tX3RiKHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiKQoreworCXJldHVybiB0YiA/IHRiLT50Yl9zYiA6IE5VTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IHN1cGVyX2Jsb2NrICpzYl9mcm9tX2JpKHN0cnVjdCBidWZmZXJfaW5mbyAqYmkpCit7CisJcmV0dXJuIGJpID8gc2JfZnJvbV90YihiaS0+dGIpIDogTlVMTDsKK30KKwogLyogdGhlcmUgYXJlIDQgdHlwZXMgb2YgaXRlbXM6IHN0YXQgZGF0YSwgZGlyZWN0b3J5IGl0ZW0sIGluZGlyZWN0LCBkaXJlY3QuCiArLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tKwogfAkgICAgICAgICAgICB8ICBrX29mZnNldCAgfCBrX3VuaXF1ZW5lc3MgfCBtZXJnZWFibGU/IHwKQEAgLTE1MjAsNyArMTUzNiw3IEBACiAjZGVmaW5lIENPTVBfU0hPUlRfS0VZUyBjb21wX3Nob3J0X2tleXMKIAogLyogbnVtYmVyIG9mIGJsb2NrcyBwb2ludGVkIHRvIGJ5IHRoZSBpbmRpcmVjdCBpdGVtICovCi0jZGVmaW5lIElfVU5GTV9OVU0ocF9zX2loKQkoIGloX2l0ZW1fbGVuKHBfc19paCkgLyBVTkZNX1BfU0laRSApCisjZGVmaW5lIElfVU5GTV9OVU0oaWgpCShpaF9pdGVtX2xlbihpaCkgLyBVTkZNX1BfU0laRSkKIAogLyogdGhlIHVzZWQgc3BhY2Ugd2l0aGluIHRoZSB1bmZvcm1hdHRlZCBub2RlIGNvcnJlc3BvbmRpbmcgdG8gcG9zIHdpdGhpbiB0aGUgaXRlbSBwb2ludGVkIHRvIGJ5IGloICovCiAjZGVmaW5lIElfUE9TX1VORk1fU0laRShpaCxwb3Msc2l6ZSkgKCgocG9zKSA9PSBJX1VORk1fTlVNKGloKSAtIDEgKSA/IChzaXplKSAtIGloX2ZyZWVfc3BhY2UoaWgpIDogKHNpemUpKQpAQCAtMTYyMyw2ICsxNjM5LDEwIEBACiAjZGVmaW5lIEpPVVJOQUxfTUFYX0NPTU1JVF9BR0UgMzAKICNkZWZpbmUgSk9VUk5BTF9NQVhfVFJBTlNfQUdFIDMwCiAjZGVmaW5lIEpPVVJOQUxfUEVSX0JBTEFOQ0VfQ05UICgzICogKE1BWF9IRUlHSFQtMikgKyA5KQorI2RlZmluZSBKT1VSTkFMX0JMT0NLU19QRVJfT0JKRUNUKHNiKSAgKEpPVVJOQUxfUEVSX0JBTEFOQ0VfQ05UICogMyArIFwKKwkJCQkJIDIgKiAoUkVJU0VSRlNfUVVPVEFfSU5JVF9CTE9DS1Moc2IpICsgXAorCQkJCQkgICAgICBSRUlTRVJGU19RVU9UQV9UUkFOU19CTE9DS1Moc2IpKSkKKwogI2lmZGVmIENPTkZJR19RVU9UQQogLyogV2UgbmVlZCB0byB1cGRhdGUgZGF0YSBhbmQgaW5vZGUgKGF0aW1lKSAqLwogI2RlZmluZSBSRUlTRVJGU19RVU9UQV9UUkFOU19CTE9DS1MocykgKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCAmICgxPDxSRUlTRVJGU19RVU9UQSkgPyAyIDogMCkKQEAgLTE2OTcsNyArMTcxNyw3IEBACiAJaW50IHRfcmVmY291bnQ7CiAJaW50IHRfYmxvY2tzX2xvZ2dlZDsJLyogbnVtYmVyIG9mIGJsb2NrcyB0aGlzIHdyaXRlciBoYXMgbG9nZ2VkICovCiAJaW50IHRfYmxvY2tzX2FsbG9jYXRlZDsJLyogbnVtYmVyIG9mIGJsb2NrcyB0aGlzIHdyaXRlciBhbGxvY2F0ZWQgKi8KLQl1bnNpZ25lZCBsb25nIHRfdHJhbnNfaWQ7CS8qIHNhbml0eSBjaGVjaywgZXF1YWxzIHRoZSBjdXJyZW50IHRyYW5zIGlkICovCisJdW5zaWduZWQgaW50IHRfdHJhbnNfaWQ7CS8qIHNhbml0eSBjaGVjaywgZXF1YWxzIHRoZSBjdXJyZW50IHRyYW5zIGlkICovCiAJdm9pZCAqdF9oYW5kbGVfc2F2ZTsJLyogc2F2ZSBleGlzdGluZyBjdXJyZW50LT5qb3VybmFsX2luZm8gKi8KIAl1bnNpZ25lZCBkaXNwbGFjZV9uZXdfYmxvY2tzOjE7CS8qIGlmIG5ldyBibG9jayBhbGxvY2F0aW9uIG9jY3VycmVzLCB0aGF0IGJsb2NrCiAJCQkJCSAgIHNob3VsZCBiZSBkaXNwbGFjZWQgZnJvbSBvdGhlcnMgKi8KQEAgLTE3NzMsMTMgKzE3OTMsMTMgQEAKIGludCBqb3VybmFsX21hcmtfZnJlZWQoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqLAogCQkgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICosIGJfYmxvY2tucl90IGJsb2NrbnIpOwogaW50IGpvdXJuYWxfdHJhbnNhY3Rpb25fc2hvdWxkX2VuZChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICosIGludCk7Ci1pbnQgcmVpc2VyZnNfaW5fam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgdW5zaWduZWQgaW50IGJtYXBfbnIsCi0JCQlpbnQgYml0X25yLCBpbnQgc2VhcmNoYWxsLCBiX2Jsb2NrbnJfdCAqbmV4dCk7CitpbnQgcmVpc2VyZnNfaW5fam91cm5hbChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBpbnQgYm1hcF9uciwKKwkJCSBpbnQgYml0X25yLCBpbnQgc2VhcmNoYWxsLCBiX2Jsb2NrbnJfdCAqbmV4dCk7CiBpbnQgam91cm5hbF9iZWdpbihzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICosCi0JCSAgc3RydWN0IHN1cGVyX2Jsb2NrICpwX3Nfc2IsIHVuc2lnbmVkIGxvbmcpOworCQkgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcpOwogaW50IGpvdXJuYWxfam9pbl9hYm9ydChzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICosCi0JCSAgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYiwgdW5zaWduZWQgbG9uZyk7Ci12b2lkIHJlaXNlcmZzX2pvdXJuYWxfYWJvcnQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IGVycm5vKTsKKwkJICAgICAgIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHVuc2lnbmVkIGxvbmcpOwordm9pZCByZWlzZXJmc19hYm9ydF9qb3VybmFsKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBlcnJubyk7CiB2b2lkIHJlaXNlcmZzX2Fib3J0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBlcnJubywgY29uc3QgY2hhciAqZm10LCAuLi4pOwogaW50IHJlaXNlcmZzX2FsbG9jYXRlX2xpc3RfYml0bWFwcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsCiAJCQkJICAgc3RydWN0IHJlaXNlcmZzX2xpc3RfYml0bWFwICosIHVuc2lnbmVkIGludCk7CkBAIC0xNzk2LDggKzE4MTYsOCBAQAogCiAvKiBzdHJlZS5jICovCiBpbnQgQl9JU19JTl9UUkVFKGNvbnN0IHN0cnVjdCBidWZmZXJfaGVhZCAqKTsKLWV4dGVybiB2b2lkIGNvcHlfaXRlbV9oZWFkKHN0cnVjdCBpdGVtX2hlYWQgKnBfdl90bywKLQkJCSAgIGNvbnN0IHN0cnVjdCBpdGVtX2hlYWQgKnBfdl9mcm9tKTsKK2V4dGVybiB2b2lkIGNvcHlfaXRlbV9oZWFkKHN0cnVjdCBpdGVtX2hlYWQgKnRvLAorCQkJICAgY29uc3Qgc3RydWN0IGl0ZW1faGVhZCAqZnJvbSk7CiAKIC8vIGZpcnN0IGtleSBpcyBpbiBjcHUgZm9ybSwgc2Vjb25kIC0gbGUKIGV4dGVybiBpbnQgY29tcF9zaG9ydF9rZXlzKGNvbnN0IHN0cnVjdCByZWlzZXJmc19rZXkgKmxlX2tleSwKQEAgLTE4MzIsMjAgKzE4NTIsMjAgQEAKIAltZW1jcHkodG8sIGZyb20sIEtFWV9TSVpFKTsKIH0KIAotaW50IGNvbXBfaXRlbXMoY29uc3Qgc3RydWN0IGl0ZW1faGVhZCAqc3RvcmVkX2loLCBjb25zdCBzdHJ1Y3QgdHJlZXBhdGggKnBfc19wYXRoKTsKLWNvbnN0IHN0cnVjdCByZWlzZXJmc19rZXkgKmdldF9ya2V5KGNvbnN0IHN0cnVjdCB0cmVlcGF0aCAqcF9zX2Noa19wYXRoLAotCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnBfc19zYik7CitpbnQgY29tcF9pdGVtcyhjb25zdCBzdHJ1Y3QgaXRlbV9oZWFkICpzdG9yZWRfaWgsIGNvbnN0IHN0cnVjdCB0cmVlcGF0aCAqcGF0aCk7Citjb25zdCBzdHJ1Y3QgcmVpc2VyZnNfa2V5ICpnZXRfcmtleShjb25zdCBzdHJ1Y3QgdHJlZXBhdGggKmNoa19wYXRoLAorCQkJCSAgICBjb25zdCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKIGludCBzZWFyY2hfYnlfa2V5KHN0cnVjdCBzdXBlcl9ibG9jayAqLCBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqLAogCQkgIHN0cnVjdCB0cmVlcGF0aCAqLCBpbnQpOwogI2RlZmluZSBzZWFyY2hfaXRlbShzLGtleSxwYXRoKSBzZWFyY2hfYnlfa2V5IChzLCBrZXksIHBhdGgsIERJU0tfTEVBRl9OT0RFX0xFVkVMKQotaW50IHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHN0cnVjdCBzdXBlcl9ibG9jayAqcF9zX3NiLAotCQkJICAgICAgIGNvbnN0IHN0cnVjdCBjcHVfa2V5ICpwX3NfY3B1X2tleSwKLQkJCSAgICAgICBzdHJ1Y3QgdHJlZXBhdGggKnBfc19zZWFyY2hfcGF0aCk7Ci1leHRlcm4gdm9pZCBkZWNyZW1lbnRfYmNvdW50KHN0cnVjdCBidWZmZXJfaGVhZCAqcF9zX2JoKTsKLXZvaWQgZGVjcmVtZW50X2NvdW50ZXJzX2luX3BhdGgoc3RydWN0IHRyZWVwYXRoICpwX3Nfc2VhcmNoX3BhdGgpOwotdm9pZCBwYXRocmVsc2Uoc3RydWN0IHRyZWVwYXRoICpwX3Nfc2VhcmNoX3BhdGgpOworaW50IHNlYXJjaF9mb3JfcG9zaXRpb25fYnlfa2V5KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCisJCQkgICAgICAgY29uc3Qgc3RydWN0IGNwdV9rZXkgKmNwdV9rZXksCisJCQkgICAgICAgc3RydWN0IHRyZWVwYXRoICpzZWFyY2hfcGF0aCk7CitleHRlcm4gdm9pZCBkZWNyZW1lbnRfYmNvdW50KHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpOwordm9pZCBkZWNyZW1lbnRfY291bnRlcnNfaW5fcGF0aChzdHJ1Y3QgdHJlZXBhdGggKnNlYXJjaF9wYXRoKTsKK3ZvaWQgcGF0aHJlbHNlKHN0cnVjdCB0cmVlcGF0aCAqc2VhcmNoX3BhdGgpOwogaW50IHJlaXNlcmZzX2NoZWNrX3BhdGgoc3RydWN0IHRyZWVwYXRoICpwKTsKLXZvaWQgcGF0aHJlbHNlX2FuZF9yZXN0b3JlKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgc3RydWN0IHRyZWVwYXRoICpwX3Nfc2VhcmNoX3BhdGgpOwordm9pZCBwYXRocmVsc2VfYW5kX3Jlc3RvcmUoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBzdHJ1Y3QgdHJlZXBhdGggKnNlYXJjaF9wYXRoKTsKIAogaW50IHJlaXNlcmZzX2luc2VydF9pdGVtKHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAogCQkJIHN0cnVjdCB0cmVlcGF0aCAqcGF0aCwKQEAgLTE4NjgsMTQgKzE4ODgsMTQgQEAKIGludCByZWlzZXJmc19kZWxldGVfaXRlbShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKIAkJCSBzdHJ1Y3QgdHJlZXBhdGggKnBhdGgsCiAJCQkgY29uc3Qgc3RydWN0IGNwdV9rZXkgKmtleSwKLQkJCSBzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnBfc191bl9iaCk7CisJCQkgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGJ1ZmZlcl9oZWFkICp1bl9iaCk7CiAKIHZvaWQgcmVpc2VyZnNfZGVsZXRlX3NvbGlkX2l0ZW0oc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCiAJCQkJc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHJlaXNlcmZzX2tleSAqa2V5KTsKIGludCByZWlzZXJmc19kZWxldGVfb2JqZWN0KHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKnRoLAotCQkJICAgc3RydWN0IGlub2RlICpwX3NfaW5vZGUpOworCQkJICAgc3RydWN0IGlub2RlICppbm9kZSk7CiBpbnQgcmVpc2VyZnNfZG9fdHJ1bmNhdGUoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCi0JCQkgc3RydWN0IGlub2RlICpwX3NfaW5vZGUsIHN0cnVjdCBwYWdlICosCisJCQkgc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IHBhZ2UgKiwKIAkJCSBpbnQgdXBkYXRlX3RpbWVzdGFtcHMpOwogCiAjZGVmaW5lIGlfYmxvY2tfc2l6ZShpbm9kZSkgKChpbm9kZSktPmlfc2ItPnNfYmxvY2tzaXplKQpAQCAtMTkxOSwxMCArMTkzOSwxMiBAQAogCQkgICAgICAgbG9mZl90IG9mZnNldCwgaW50IHR5cGUsIGludCBsZW5ndGgsIGludCBlbnRyeV9jb3VudCk7CiBzdHJ1Y3QgaW5vZGUgKnJlaXNlcmZzX2lnZXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBjb25zdCBzdHJ1Y3QgY3B1X2tleSAqa2V5KTsKIAorc3RydWN0IHJlaXNlcmZzX3NlY3VyaXR5X2hhbmRsZTsKIGludCByZWlzZXJmc19uZXdfaW5vZGUoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqdGgsCiAJCSAgICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgaW50IG1vZGUsCiAJCSAgICAgICBjb25zdCBjaGFyICpzeW1uYW1lLCBsb2ZmX3QgaV9zaXplLAotCQkgICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKKwkJICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlub2RlICppbm9kZSwKKwkJICAgICAgIHN0cnVjdCByZWlzZXJmc19zZWN1cml0eV9oYW5kbGUgKnNlY3VyaXR5KTsKIAogdm9pZCByZWlzZXJmc191cGRhdGVfc2Rfc2l6ZShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKIAkJCSAgICAgc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IHNpemUpOwpAQCAtMTk4MCw3ICsyMDAyLDcgQEAKICNkZWZpbmUgUFJPQ19JTkZPX01BWCggc2IsIGZpZWxkLCB2YWx1ZSApIFZPSURfVgogI2RlZmluZSBQUk9DX0lORk9fSU5DKCBzYiwgZmllbGQgKSBWT0lEX1YKICNkZWZpbmUgUFJPQ19JTkZPX0FERCggc2IsIGZpZWxkLCB2YWwgKSBWT0lEX1YKLSNkZWZpbmUgUFJPQ19JTkZPX0JIX1NUQVQoIHBfc19zYiwgcF9zX2JoLCBuX25vZGVfbGV2ZWwgKSBWT0lEX1YKKyNkZWZpbmUgUFJPQ19JTkZPX0JIX1NUQVQoc2IsIGJoLCBuX25vZGVfbGV2ZWwpIFZPSURfVgogI2VuZGlmCiAKIC8qIGRpci5jICovCkBAIC0xOTg4LDYgKzIwMTAsNyBAQAogZXh0ZXJuIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHJlaXNlcmZzX3N5bWxpbmtfaW5vZGVfb3BlcmF0aW9uczsKIGV4dGVybiBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyByZWlzZXJmc19zcGVjaWFsX2lub2RlX29wZXJhdGlvbnM7CiBleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyByZWlzZXJmc19kaXJfb3BlcmF0aW9uczsKK2ludCByZWlzZXJmc19yZWFkZGlyX2RlbnRyeShzdHJ1Y3QgZGVudHJ5ICosIHZvaWQgKiwgZmlsbGRpcl90LCBsb2ZmX3QgKik7CiAKIC8qIHRhaWxfY29udmVyc2lvbi5jICovCiBpbnQgZGlyZWN0MmluZGlyZWN0KHN0cnVjdCByZWlzZXJmc190cmFuc2FjdGlvbl9oYW5kbGUgKiwgc3RydWN0IGlub2RlICosCkBAIC0yMDA0LDEzICsyMDI3LDIwIEBACiAKIC8qIGZpeF9ub2Rlcy5jICovCiAKLWludCBmaXhfbm9kZXMoaW50IG5fb3BfbW9kZSwgc3RydWN0IHRyZWVfYmFsYW5jZSAqcF9zX3RiLAotCSAgICAgIHN0cnVjdCBpdGVtX2hlYWQgKnBfc19pbnNfaWgsIGNvbnN0IHZvaWQgKik7CitpbnQgZml4X25vZGVzKGludCBuX29wX21vZGUsIHN0cnVjdCB0cmVlX2JhbGFuY2UgKnRiLAorCSAgICAgIHN0cnVjdCBpdGVtX2hlYWQgKmluc19paCwgY29uc3Qgdm9pZCAqKTsKIHZvaWQgdW5maXhfbm9kZXMoc3RydWN0IHRyZWVfYmFsYW5jZSAqKTsKIAogLyogcHJpbnRzLmMgKi8KLXZvaWQgcmVpc2VyZnNfcGFuaWMoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBjb25zdCBjaGFyICpmbXQsIC4uLikKK3ZvaWQgX19yZWlzZXJmc19wYW5pYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnMsIGNvbnN0IGNoYXIgKmlkLAorCQkgICAgICBjb25zdCBjaGFyICpmdW5jdGlvbiwgY29uc3QgY2hhciAqZm10LCAuLi4pCiAgICAgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuKSk7CisjZGVmaW5lIHJlaXNlcmZzX3BhbmljKHMsIGlkLCBmbXQsIGFyZ3MuLi4pIFwKKwlfX3JlaXNlcmZzX3BhbmljKHMsIGlkLCBfX2Z1bmNfXywgZm10LCAjI2FyZ3MpCit2b2lkIF9fcmVpc2VyZnNfZXJyb3Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBjb25zdCBjaGFyICppZCwKKwkJICAgICAgY29uc3QgY2hhciAqZnVuY3Rpb24sIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKKyNkZWZpbmUgcmVpc2VyZnNfZXJyb3IocywgaWQsIGZtdCwgYXJncy4uLikgXAorCSBfX3JlaXNlcmZzX2Vycm9yKHMsIGlkLCBfX2Z1bmNfXywgZm10LCAjI2FyZ3MpCiB2b2lkIHJlaXNlcmZzX2luZm8oc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CiB2b2lkIHJlaXNlcmZzX2RlYnVnKHN0cnVjdCBzdXBlcl9ibG9jayAqcywgaW50IGxldmVsLCBjb25zdCBjaGFyICpmbXQsIC4uLik7CiB2b2lkIHByaW50X2luZGlyZWN0X2l0ZW0oc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IGl0ZW1fbnVtKTsKQEAgLTIwNDcsNyArMjA3Nyw3IEBACiAJCQkgIGludCB6ZXJvc19udW1iZXIpOwogdm9pZCBsZWFmX2N1dF9mcm9tX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2luZm8gKmJpLCBpbnQgY3V0X2l0ZW1fbnVtLAogCQkJICBpbnQgcG9zX2luX2l0ZW0sIGludCBjdXRfc2l6ZSk7Ci12b2lkIGxlYWZfcGFzdGVfZW50cmllcyhzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgaXRlbV9udW0sIGludCBiZWZvcmUsCit2b2lkIGxlYWZfcGFzdGVfZW50cmllcyhzdHJ1Y3QgYnVmZmVyX2luZm8gKmJpLCBpbnQgaXRlbV9udW0sIGludCBiZWZvcmUsCiAJCQlpbnQgbmV3X2VudHJ5X2NvdW50LCBzdHJ1Y3QgcmVpc2VyZnNfZGVfaGVhZCAqbmV3X2RlaHMsCiAJCQljb25zdCBjaGFyICpyZWNvcmRzLCBpbnQgcGFzdGVfc2l6ZSk7CiAvKiBpYmFsYW5jZS5jICovCkBAIC0yMjAzLDYgKzIyMzMsNiBAQAogCQkgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiBpbnQgcmVpc2VyZnNfdW5wYWNrKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxwKTsKIAotCiAjZW5kaWYgLyogX19LRVJORUxfXyAqLworCiAjZW5kaWYJCQkJLyogX0xJTlVYX1JFSVNFUl9GU19IICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX2kuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfaS5oCmluZGV4IGNlMzY2M2YuLjc2MzYwYjMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfaS5oCisrKyBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfaS5oCkBAIC01MSw3ICs1MSw3IEBACiAJLyogd2UgdXNlIHRoZXNlIGZvciBmc3luYyBvciBPX1NZTkMgdG8gZGVjaWRlIHdoaWNoIHRyYW5zYWN0aW9uCiAJICoqIG5lZWRzIHRvIGJlIGNvbW1pdHRlZCBpbiBvcmRlciBmb3IgdGhpcyBpbm9kZSB0byBiZSBwcm9wZXJseQogCSAqKiBmbHVzaGVkICovCi0JdW5zaWduZWQgbG9uZyBpX3RyYW5zX2lkOworCXVuc2lnbmVkIGludCBpX3RyYW5zX2lkOwogCXN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgKmlfamw7CiAJc3RydWN0IG11dGV4IGlfbW1hcDsKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfUE9TSVhfQUNMCkBAIC01OSw3ICs1OSw3IEBACiAJc3RydWN0IHBvc2l4X2FjbCAqaV9hY2xfZGVmYXVsdDsKICNlbmRpZgogI2lmZGVmIENPTkZJR19SRUlTRVJGU19GU19YQVRUUgotCXN0cnVjdCByd19zZW1hcGhvcmUgeGF0dHJfc2VtOworCXN0cnVjdCByd19zZW1hcGhvcmUgaV94YXR0cl9zZW07CiAjZW5kaWYKIAlzdHJ1Y3QgaW5vZGUgdmZzX2lub2RlOwogfTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfc2IuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfc2IuaAppbmRleCBiZGE2YjU2Li41NjIxZDg3IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX3NiLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19zYi5oCkBAIC0xNCw3ICsxNCw3IEBACiB9IHJlaXNlcmZzX3N1cGVyX2Jsb2NrX2ZsYWdzOwogCiAvKiBzdHJ1Y3QgcmVpc2VyZnNfc3VwZXJfYmxvY2sgYWNjZXNzb3JzL211dGF0b3JzCi0gKiBzaW5jZSB0aGlzIGlzIGEgZGlzayBzdHJ1Y3R1cmUsIGl0IHdpbGwgYWx3YXlzIGJlIGluIAorICogc2luY2UgdGhpcyBpcyBhIGRpc2sgc3RydWN0dXJlLCBpdCB3aWxsIGFsd2F5cyBiZSBpbgogICogbGl0dGxlIGVuZGlhbiBmb3JtYXQuICovCiAjZGVmaW5lIHNiX2Jsb2NrX2NvdW50KHNicCkgICAgICAgICAobGUzMl90b19jcHUoKHNicCktPnNfdjEuc19ibG9ja19jb3VudCkpCiAjZGVmaW5lIHNldF9zYl9ibG9ja19jb3VudChzYnAsdikgICAoKHNicCktPnNfdjEuc19ibG9ja19jb3VudCA9IGNwdV90b19sZTMyKHYpKQpAQCAtNzMsNiArNzMsOSBAQAogI2RlZmluZSBzYl92ZXJzaW9uKHNicCkgICAgICAgICAgICAobGUxNl90b19jcHUoKHNicCktPnNfdjEuc192ZXJzaW9uKSkKICNkZWZpbmUgc2V0X3NiX3ZlcnNpb24oc2JwLHYpICAgICAgKChzYnApLT5zX3YxLnNfdmVyc2lvbiA9IGNwdV90b19sZTE2KHYpKQogCisjZGVmaW5lIHNiX21udF9jb3VudChzYnApCSAgIChsZTE2X3RvX2NwdSgoc2JwKS0+c19tbnRfY291bnQpKQorI2RlZmluZSBzZXRfc2JfbW50X2NvdW50KHNicCwgdikgICAoKHNicCktPnNfbW50X2NvdW50ID0gY3B1X3RvX2xlMTYodikpCisKICNkZWZpbmUgc2JfcmVzZXJ2ZWRfZm9yX2pvdXJuYWwoc2JwKSBcCiAgICAgICAgICAgICAgIChsZTE2X3RvX2NwdSgoc2JwKS0+c192MS5zX3Jlc2VydmVkX2Zvcl9qb3VybmFsKSkKICNkZWZpbmUgc2V0X3NiX3Jlc2VydmVkX2Zvcl9qb3VybmFsKHNicCx2KSBcCkBAIC04MCwxNiArODMsMTYgQEAKIAogLyogTE9HR0lORyAtLSAqLwogCi0vKiBUaGVzZSBhbGwgaW50ZXJlbGF0ZSBmb3IgcGVyZm9ybWFuY2UuICAKKy8qIFRoZXNlIGFsbCBpbnRlcmVsYXRlIGZvciBwZXJmb3JtYW5jZS4KICoqCi0qKiBJZiB0aGUgam91cm5hbCBibG9jayBjb3VudCBpcyBzbWFsbGVyIHRoYW4gbiB0cmFuc2FjdGlvbnMsIHlvdSBsb3NlIHNwZWVkLiAKKyoqIElmIHRoZSBqb3VybmFsIGJsb2NrIGNvdW50IGlzIHNtYWxsZXIgdGhhbiBuIHRyYW5zYWN0aW9ucywgeW91IGxvc2Ugc3BlZWQuCiAqKiBJIGRvbid0IGtub3cgd2hhdCBuIGlzIHlldCwgSSdtIGd1ZXNzaW5nIDgtMTYuCiAqKgogKiogdHlwaWNhbCB0cmFuc2FjdGlvbiBzaXplIGRlcGVuZHMgb24gdGhlIGFwcGxpY2F0aW9uLCBob3cgb2Z0ZW4gZnN5bmMgaXMKLSoqIGNhbGxlZCwgYW5kIGhvdyBtYW55IG1ldGFkYXRhIGJsb2NrcyB5b3UgZGlydHkgaW4gYSAzMCBzZWNvbmQgcGVyaW9kLiAgCisqKiBjYWxsZWQsIGFuZCBob3cgbWFueSBtZXRhZGF0YSBibG9ja3MgeW91IGRpcnR5IGluIGEgMzAgc2Vjb25kIHBlcmlvZC4KICoqIFRoZSBtb3JlIHNtYWxsIGZpbGVzICg8MTZrKSB5b3UgdXNlLCB0aGUgbGFyZ2VyIHlvdXIgdHJhbnNhY3Rpb25zIHdpbGwKICoqIGJlLgotKiogCisqKgogKiogSWYgeW91ciBqb3VybmFsIGZpbGxzIGZhc3RlciB0aGFuIGRpcnR5IGJ1ZmZlcnMgZ2V0IGZsdXNoZWQgdG8gZGlzaywgaXQgbXVzdCBmbHVzaCB0aGVtIGJlZm9yZSBhbGxvd2luZyB0aGUgam91cm5hbAogKiogdG8gd3JhcCwgd2hpY2ggc2xvd3MgdGhpbmdzIGRvd24uICBJZiB5b3UgbmVlZCBoaWdoIHNwZWVkIG1ldGEgZGF0YSB1cGRhdGVzLCB0aGUgam91cm5hbCBzaG91bGQgYmUgYmlnIGVub3VnaAogKiogdG8gcHJldmVudCB3cmFwcGluZyBiZWZvcmUgZGlydHkgbWV0YSBibG9ja3MgZ2V0IHRvIGRpc2suCkBAIC0xNTMsNyArMTU2LDcgQEAKIAlhdG9taWNfdCBqX2NvbW1pdF9sZWZ0OwogCWF0b21pY190IGpfb2xkZXJfY29tbWl0c19kb25lOwkvKiBhbGwgY29tbWl0cyBvbGRlciB0aGFuIHRoaXMgb24gZGlzayAqLwogCXN0cnVjdCBtdXRleCBqX2NvbW1pdF9tdXRleDsKLQl1bnNpZ25lZCBsb25nIGpfdHJhbnNfaWQ7CisJdW5zaWduZWQgaW50IGpfdHJhbnNfaWQ7CiAJdGltZV90IGpfdGltZXN0YW1wOwogCXN0cnVjdCByZWlzZXJmc19saXN0X2JpdG1hcCAqal9saXN0X2JpdG1hcDsKIAlzdHJ1Y3QgYnVmZmVyX2hlYWQgKmpfY29tbWl0X2JoOwkvKiBjb21taXQgYnVmZmVyIGhlYWQgKi8KQEAgLTE4Miw3ICsxODUsNyBAQAogCWludCBqXzFzdF9yZXNlcnZlZF9ibG9jazsJLyogZmlyc3QgYmxvY2sgb24gc19kZXYgb2YgcmVzZXJ2ZWQgYXJlYSBqb3VybmFsICovCiAKIAl1bnNpZ25lZCBsb25nIGpfc3RhdGU7Ci0JdW5zaWduZWQgbG9uZyBqX3RyYW5zX2lkOworCXVuc2lnbmVkIGludCBqX3RyYW5zX2lkOwogCXVuc2lnbmVkIGxvbmcgal9tb3VudF9pZDsKIAl1bnNpZ25lZCBsb25nIGpfc3RhcnQ7CS8qIHN0YXJ0IG9mIGN1cnJlbnQgd2FpdGluZyBjb21taXQgKGluZGV4IGludG8gal9hcF9ibG9ja3MpICovCiAJdW5zaWduZWQgbG9uZyBqX2xlbjsJLyogbGVuZ3RoIG9mIGN1cnJlbnQgd2FpdGluZyBjb21taXQgKi8KQEAgLTIyMywxMCArMjI2LDEwIEBACiAJaW50IGpfbnVtX3dvcmtfbGlzdHM7CS8qIG51bWJlciB0aGF0IG5lZWQgYXR0ZW50aW9uIGZyb20ga3JlaXNlcmZzZCAqLwogCiAJLyogZGVidWdnaW5nIHRvIG1ha2Ugc3VyZSB0aGluZ3MgYXJlIGZsdXNoZWQgaW4gb3JkZXIgKi8KLQlpbnQgal9sYXN0X2ZsdXNoX2lkOworCXVuc2lnbmVkIGludCBqX2xhc3RfZmx1c2hfaWQ7CiAKIAkvKiBkZWJ1Z2dpbmcgdG8gbWFrZSBzdXJlIHRoaW5ncyBhcmUgY29tbWl0dGVkIGluIG9yZGVyICovCi0JaW50IGpfbGFzdF9jb21taXRfaWQ7CisJdW5zaWduZWQgaW50IGpfbGFzdF9jb21taXRfaWQ7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkIGpfYml0bWFwX25vZGVzOwogCXN0cnVjdCBsaXN0X2hlYWQgal9kaXJ0eV9idWZmZXJzOwpAQCAtMjM5LDcgKzI0Miw3IEBACiAKIAlzdHJ1Y3QgcmVpc2VyZnNfbGlzdF9iaXRtYXAgal9saXN0X2JpdG1hcFtKT1VSTkFMX05VTV9CSVRNQVBTXTsJLyogYXJyYXkgb2YgYml0bWFwcyB0byByZWNvcmQgdGhlIGRlbGV0ZWQgYmxvY2tzICovCiAJc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmpfaGFzaF90YWJsZVtKT1VSTkFMX0hBU0hfU0laRV07CS8qIGhhc2ggdGFibGUgZm9yIHJlYWwgYnVmZmVyIGhlYWRzIGluIGN1cnJlbnQgdHJhbnMgKi8KLQlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqal9saXN0X2hhc2hfdGFibGVbSk9VUk5BTF9IQVNIX1NJWkVdOwkvKiBoYXNoIHRhYmxlIGZvciBhbGwgdGhlIHJlYWwgYnVmZmVyIGhlYWRzIGluIGFsbCAKKwlzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqal9saXN0X2hhc2hfdGFibGVbSk9VUk5BTF9IQVNIX1NJWkVdOwkvKiBoYXNoIHRhYmxlIGZvciBhbGwgdGhlIHJlYWwgYnVmZmVyIGhlYWRzIGluIGFsbAogCQkJCQkJCQkJCSAgIHRoZSB0cmFuc2FjdGlvbnMgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGpfcHJlYWxsb2NfbGlzdDsJLyogbGlzdCBvZiBpbm9kZXMgd2hpY2ggaGF2ZSBwcmVhbGxvY2F0ZWQgYmxvY2tzICovCiAJaW50IGpfcGVyc2lzdGVudF90cmFuczsKQEAgLTM5OSwxMCArNDAyLDcgQEAKIAlpbnQgcmVzZXJ2ZWRfYmxvY2tzOwkvKiBhbW91bnQgb2YgYmxvY2tzIHJlc2VydmVkIGZvciBmdXJ0aGVyIGFsbG9jYXRpb25zICovCiAJc3BpbmxvY2tfdCBiaXRtYXBfbG9jazsJLyogdGhpcyBsb2NrIG9uIG5vdyBvbmx5IHVzZWQgdG8gcHJvdGVjdCByZXNlcnZlZF9ibG9ja3MgdmFyaWFibGUgKi8KIAlzdHJ1Y3QgZGVudHJ5ICpwcml2X3Jvb3Q7CS8qIHJvb3Qgb2YgLy5yZWlzZXJmc19wcml2ICovCi0jaWZkZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1hBVFRSCiAJc3RydWN0IGRlbnRyeSAqeGF0dHJfcm9vdDsJLyogcm9vdCBvZiAvLnJlaXNlcmZzX3ByaXYvLnhhICovCi0Jc3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9kaXJfc2VtOwotI2VuZGlmCiAJaW50IGpfZXJybm87CiAjaWZkZWYgQ09ORklHX1FVT1RBCiAJY2hhciAqc19xZl9uYW1lc1tNQVhRVU9UQVNdOwpAQCAtNDI2LDcgKzQyNiw3IEBACiAJCQkJICAgcGFydGl0aW9uIHdpbGwgYmUgZGVhbHQgd2l0aCBpbiBhCiAJCQkJICAgbWFubmVyIG9mIDMuNS54ICovCiAKLS8qIC1vIGhhc2g9e3RlYSwgcnVwYXNvdiwgcjUsIGRldGVjdH0gaXMgbWVhbnQgZm9yIHByb3Blcmx5IG1vdW50aW5nIAorLyogLW8gaGFzaD17dGVhLCBydXBhc292LCByNSwgZGV0ZWN0fSBpcyBtZWFudCBmb3IgcHJvcGVybHkgbW91bnRpbmcKICoqIHJlaXNlcmZzIGRpc2tzIGZyb20gMy41LjE5IG9yIGVhcmxpZXIuICA5OSUgb2YgdGhlIHRpbWUsIHRoaXMgb3B0aW9uCiAqKiBpcyBub3QgcmVxdWlyZWQuICBJZiB0aGUgbm9ybWFsIGF1dG9kZWN0aW9uIGNvZGUgY2FuJ3QgZGV0ZXJtaW5lIHdoaWNoCiAqKiBoYXNoIHRvIHVzZSAoYmVjYXVzZSBib3RoIGhhc2hlcyBoYWQgdGhlIHNhbWUgdmFsdWUgZm9yIGEgZmlsZSkKQEAgLTQ1MSw3ICs0NTEsNiBAQAogCVJFSVNFUkZTX05PX1VOSEFTSEVEX1JFTE9DQVRJT04sCiAJUkVJU0VSRlNfSEFTSEVEX1JFTE9DQVRJT04sCiAJUkVJU0VSRlNfQVRUUlMsCi0JUkVJU0VSRlNfWEFUVFJTLAogCVJFSVNFUkZTX1hBVFRSU19VU0VSLAogCVJFSVNFUkZTX1BPU0lYQUNMLAogCVJFSVNFUkZTX0JBUlJJRVJfTk9ORSwKQEAgLTQ4OSw3ICs0ODgsNyBAQAogI2RlZmluZSByZWlzZXJmc19kYXRhX2xvZyhzKSAoUkVJU0VSRlNfU0IocyktPnNfbW91bnRfb3B0ICYgKDEgPDwgUkVJU0VSRlNfREFUQV9MT0cpKQogI2RlZmluZSByZWlzZXJmc19kYXRhX29yZGVyZWQocykgKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCAmICgxIDw8IFJFSVNFUkZTX0RBVEFfT1JERVJFRCkpCiAjZGVmaW5lIHJlaXNlcmZzX2RhdGFfd3JpdGViYWNrKHMpIChSRUlTRVJGU19TQihzKS0+c19tb3VudF9vcHQgJiAoMSA8PCBSRUlTRVJGU19EQVRBX1dSSVRFQkFDSykpCi0jZGVmaW5lIHJlaXNlcmZzX3hhdHRycyhzKSAoUkVJU0VSRlNfU0IocyktPnNfbW91bnRfb3B0ICYgKDEgPDwgUkVJU0VSRlNfWEFUVFJTKSkKKyNkZWZpbmUgcmVpc2VyZnNfeGF0dHJzKHMpICgocyktPnNfeGF0dHIgIT0gTlVMTCkKICNkZWZpbmUgcmVpc2VyZnNfeGF0dHJzX3VzZXIocykgKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCAmICgxIDw8IFJFSVNFUkZTX1hBVFRSU19VU0VSKSkKICNkZWZpbmUgcmVpc2VyZnNfcG9zaXhhY2wocykgKFJFSVNFUkZTX1NCKHMpLT5zX21vdW50X29wdCAmICgxIDw8IFJFSVNFUkZTX1BPU0lYQUNMKSkKICNkZWZpbmUgcmVpc2VyZnNfeGF0dHJzX29wdGlvbmFsKHMpIChyZWlzZXJmc194YXR0cnNfdXNlcihzKSB8fCByZWlzZXJmc19wb3NpeGFjbChzKSkKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfeGF0dHIuaCBiL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfeGF0dHIuaAppbmRleCBhZjEzNWFlLi5kY2FlMDFlIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX3hhdHRyLmgKKysrIGIvaW5jbHVkZS9saW51eC9yZWlzZXJmc194YXR0ci5oCkBAIC0xNSw2ICsxNSwxMiBAQAogCV9fbGUzMiBoX2hhc2g7CQkvKiBoYXNoIG9mIHRoZSB2YWx1ZSAqLwogfTsKIAorc3RydWN0IHJlaXNlcmZzX3NlY3VyaXR5X2hhbmRsZSB7CisJY2hhciAqbmFtZTsKKwl2b2lkICp2YWx1ZTsKKwlzaXplX3QgbGVuZ3RoOworfTsKKwogI2lmZGVmIF9fS0VSTkVMX18KIAogI2luY2x1ZGUgPGxpbnV4L2luaXQuaD4KQEAgLTI5LDIyICszNSwxMyBAQAogc3RydWN0IHN1cGVyX2Jsb2NrOwogc3RydWN0IG5hbWVpZGF0YTsKIAotc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIgewotCWNoYXIgKnByZWZpeDsKLQlpbnQgKCppbml0KSAodm9pZCk7Ci0Jdm9pZCAoKmV4aXQpICh2b2lkKTsKLQlpbnQgKCpnZXQpIChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgY29uc3QgY2hhciAqbmFtZSwgdm9pZCAqYnVmZmVyLAotCQkgICAgc2l6ZV90IHNpemUpOwotCWludCAoKnNldCkgKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCB2b2lkICpidWZmZXIsCi0JCSAgICBzaXplX3Qgc2l6ZSwgaW50IGZsYWdzKTsKLQlpbnQgKCpkZWwpIChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwgY29uc3QgY2hhciAqbmFtZSk7Ci0JaW50ICgqbGlzdCkgKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBjb25zdCBjaGFyICpuYW1lLCBpbnQgbmFtZWxlbiwKLQkJICAgICBjaGFyICpvdXQpOwotCXN0cnVjdCBsaXN0X2hlYWQgaGFuZGxlcnM7Ci19OworaW50IHJlaXNlcmZzX3hhdHRyX3JlZ2lzdGVyX2hhbmRsZXJzKHZvaWQpIF9faW5pdDsKK3ZvaWQgcmVpc2VyZnNfeGF0dHJfdW5yZWdpc3Rlcl9oYW5kbGVycyh2b2lkKTsKK2ludCByZWlzZXJmc194YXR0cl9pbml0KHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGludCBtb3VudF9mbGFncyk7CitpbnQgcmVpc2VyZnNfZGVsZXRlX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKK2ludCByZWlzZXJmc19jaG93bl94YXR0cnMoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGlhdHRyICphdHRycyk7CiAKICNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIKLSNkZWZpbmUgaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoaW5vZGUpIElTX1BSSVZBVEUoaW5vZGUpCiAjZGVmaW5lIGhhc194YXR0cl9kaXIoaW5vZGUpIChSRUlTRVJGU19JKGlub2RlKS0+aV9mbGFncyAmIGlfaGFzX3hhdHRyX2RpcikKIHNzaXplX3QgcmVpc2VyZnNfZ2V0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjb25zdCBjaGFyICpuYW1lLAogCQkJICB2b2lkICpidWZmZXIsIHNpemVfdCBzaXplKTsKQEAgLTUyLDEwNSArNDksOTggQEAKIAkJICAgICAgY29uc3Qgdm9pZCAqdmFsdWUsIHNpemVfdCBzaXplLCBpbnQgZmxhZ3MpOwogc3NpemVfdCByZWlzZXJmc19saXN0eGF0dHIoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBjaGFyICpidWZmZXIsIHNpemVfdCBzaXplKTsKIGludCByZWlzZXJmc19yZW1vdmV4YXR0cihzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIGNvbnN0IGNoYXIgKm5hbWUpOwotaW50IHJlaXNlcmZzX2RlbGV0ZV94YXR0cnMoc3RydWN0IGlub2RlICppbm9kZSk7Ci1pbnQgcmVpc2VyZnNfY2hvd25feGF0dHJzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBpYXR0ciAqYXR0cnMpOwotaW50IHJlaXNlcmZzX3hhdHRyX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IG1vdW50X2ZsYWdzKTsKIGludCByZWlzZXJmc19wZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBtYXNrKTsKIAotaW50IHJlaXNlcmZzX3hhdHRyX2RlbChzdHJ1Y3QgaW5vZGUgKiwgY29uc3QgY2hhciAqKTsKLWludCByZWlzZXJmc194YXR0cl9nZXQoY29uc3Qgc3RydWN0IGlub2RlICosIGNvbnN0IGNoYXIgKiwgdm9pZCAqLCBzaXplX3QpOworaW50IHJlaXNlcmZzX3hhdHRyX2dldChzdHJ1Y3QgaW5vZGUgKiwgY29uc3QgY2hhciAqLCB2b2lkICosIHNpemVfdCk7CiBpbnQgcmVpc2VyZnNfeGF0dHJfc2V0KHN0cnVjdCBpbm9kZSAqLCBjb25zdCBjaGFyICosIGNvbnN0IHZvaWQgKiwgc2l6ZV90LCBpbnQpOworaW50IHJlaXNlcmZzX3hhdHRyX3NldF9oYW5kbGUoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hhbmRsZSAqLAorCQkJICAgICAgc3RydWN0IGlub2RlICosIGNvbnN0IGNoYXIgKiwgY29uc3Qgdm9pZCAqLAorCQkJICAgICAgc2l6ZV90LCBpbnQpOwogCi1leHRlcm4gc3RydWN0IHJlaXNlcmZzX3hhdHRyX2hhbmRsZXIgdXNlcl9oYW5kbGVyOwotZXh0ZXJuIHN0cnVjdCByZWlzZXJmc194YXR0cl9oYW5kbGVyIHRydXN0ZWRfaGFuZGxlcjsKLWV4dGVybiBzdHJ1Y3QgcmVpc2VyZnNfeGF0dHJfaGFuZGxlciBzZWN1cml0eV9oYW5kbGVyOworZXh0ZXJuIHN0cnVjdCB4YXR0cl9oYW5kbGVyIHJlaXNlcmZzX3hhdHRyX3VzZXJfaGFuZGxlcjsKK2V4dGVybiBzdHJ1Y3QgeGF0dHJfaGFuZGxlciByZWlzZXJmc194YXR0cl90cnVzdGVkX2hhbmRsZXI7CitleHRlcm4gc3RydWN0IHhhdHRyX2hhbmRsZXIgcmVpc2VyZnNfeGF0dHJfc2VjdXJpdHlfaGFuZGxlcjsKKyNpZmRlZiBDT05GSUdfUkVJU0VSRlNfRlNfU0VDVVJJVFkKK2ludCByZWlzZXJmc19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgc3RydWN0IHJlaXNlcmZzX3NlY3VyaXR5X2hhbmRsZSAqc2VjKTsKK2ludCByZWlzZXJmc19zZWN1cml0eV93cml0ZShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKKwkJCSAgICBzdHJ1Y3QgaW5vZGUgKmlub2RlLAorCQkJICAgIHN0cnVjdCByZWlzZXJmc19zZWN1cml0eV9oYW5kbGUgKnNlYyk7Cit2b2lkIHJlaXNlcmZzX3NlY3VyaXR5X2ZyZWUoc3RydWN0IHJlaXNlcmZzX3NlY3VyaXR5X2hhbmRsZSAqc2VjKTsKKyNlbmRpZgogCi1pbnQgcmVpc2VyZnNfeGF0dHJfcmVnaXN0ZXJfaGFuZGxlcnModm9pZCkgX19pbml0Owotdm9pZCByZWlzZXJmc194YXR0cl91bnJlZ2lzdGVyX2hhbmRsZXJzKHZvaWQpOwotCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfd3JpdGVfbG9ja194YXR0cnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKKyNkZWZpbmUgeGF0dHJfc2l6ZShzaXplKSAoKHNpemUpICsgc2l6ZW9mKHN0cnVjdCByZWlzZXJmc194YXR0cl9oZWFkZXIpKQorc3RhdGljIGlubGluZSBsb2ZmX3QgcmVpc2VyZnNfeGF0dHJfbmJsb2NrcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgc2l6ZSkKIHsKLQlkb3duX3dyaXRlKCZSRUlTRVJGU19YQVRUUl9ESVJfU0VNKHNiKSk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfd3JpdGVfdW5sb2NrX3hhdHRycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCXVwX3dyaXRlKCZSRUlTRVJGU19YQVRUUl9ESVJfU0VNKHNiKSk7Ci19Ci1zdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfcmVhZF9sb2NrX3hhdHRycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQotewotCWRvd25fcmVhZCgmUkVJU0VSRlNfWEFUVFJfRElSX1NFTShzYikpOworCWxvZmZfdCByZXQgPSAwOworCWlmIChyZWlzZXJmc19maWxlX2RhdGFfbG9nKGlub2RlKSkgeworCQlyZXQgPSBfUk9VTkRfVVAoeGF0dHJfc2l6ZShzaXplKSwgaW5vZGUtPmlfc2ItPnNfYmxvY2tzaXplKTsKKwkJcmV0ID4+PSBpbm9kZS0+aV9zYi0+c19ibG9ja3NpemVfYml0czsKKwl9CisJcmV0dXJuIHJldDsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIHJlaXNlcmZzX3JlYWRfdW5sb2NrX3hhdHRycyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQorLyogV2UgbWF5IGhhdmUgdG8gY3JlYXRlIHVwIHRvIDMgb2JqZWN0czogeGF0dHIgcm9vdCwgeGF0dHIgZGlyLCB4YXR0ciBmaWxlLgorICogTGV0J3MgdHJ5IHRvIGJlIHNtYXJ0IGFib3V0IGl0LgorICogeGF0dHIgcm9vdDogV2UgY2FjaGUgaXQuIElmIGl0J3Mgbm90IGNhY2hlZCwgd2UgbWF5IG5lZWQgdG8gY3JlYXRlIGl0LgorICogeGF0dHIgZGlyOiBJZiBhbnl0aGluZyBoYXMgYmVlbiBsb2FkZWQgZm9yIHRoaXMgaW5vZGUsIHdlIGNhbiBzZXQgYSBmbGFnCisgKiAgICAgICAgICAgIHNheWluZyBzby4KKyAqIHhhdHRyIGZpbGU6IFNpbmNlIHdlIGRvbid0IGNhY2hlIHhhdHRycywgd2UgY2FuJ3QgdGVsbC4gV2UgYWx3YXlzIGluY2x1ZGUKKyAqICAgICAgICAgICAgIGJsb2NrcyBmb3IgaXQuCisgKgorICogSG93ZXZlciwgc2luY2Ugcm9vdCBhbmQgZGlyIGNhbiBiZSBjcmVhdGVkIGJldHdlZW4gY2FsbHMgLSBZT1UgTVVTVCBTQVZFCisgKiBUSElTIFZBTFVFLgorICovCitzdGF0aWMgaW5saW5lIHNpemVfdCByZWlzZXJmc194YXR0cl9qY3JlYXRlX25ibG9ja3Moc3RydWN0IGlub2RlICppbm9kZSkKIHsKLQl1cF9yZWFkKCZSRUlTRVJGU19YQVRUUl9ESVJfU0VNKHNiKSk7Ci19CisJc2l6ZV90IG5ibG9ja3MgPSBKT1VSTkFMX0JMT0NLU19QRVJfT0JKRUNUKGlub2RlLT5pX3NiKTsKIAotc3RhdGljIGlubGluZSB2b2lkIHJlaXNlcmZzX3dyaXRlX2xvY2tfeGF0dHJfaShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWRvd25fd3JpdGUoJlJFSVNFUkZTX0koaW5vZGUpLT54YXR0cl9zZW0pOwotfQotc3RhdGljIGlubGluZSB2b2lkIHJlaXNlcmZzX3dyaXRlX3VubG9ja194YXR0cl9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JdXBfd3JpdGUoJlJFSVNFUkZTX0koaW5vZGUpLT54YXR0cl9zZW0pOwotfQotc3RhdGljIGlubGluZSB2b2lkIHJlaXNlcmZzX3JlYWRfbG9ja194YXR0cl9pKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JZG93bl9yZWFkKCZSRUlTRVJGU19JKGlub2RlKS0+eGF0dHJfc2VtKTsKLX0KKwlpZiAoKFJFSVNFUkZTX0koaW5vZGUpLT5pX2ZsYWdzICYgaV9oYXNfeGF0dHJfZGlyKSA9PSAwKSB7CisJCW5ibG9ja3MgKz0gSk9VUk5BTF9CTE9DS1NfUEVSX09CSkVDVChpbm9kZS0+aV9zYik7CisJCWlmIChSRUlTRVJGU19TQihpbm9kZS0+aV9zYiktPnhhdHRyX3Jvb3QgPT0gTlVMTCkKKwkJCW5ibG9ja3MgKz0gSk9VUk5BTF9CTE9DS1NfUEVSX09CSkVDVChpbm9kZS0+aV9zYik7CisJfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJfaShzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXVwX3JlYWQoJlJFSVNFUkZTX0koaW5vZGUpLT54YXR0cl9zZW0pOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfbWFya19pbm9kZV9wcml2YXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCi17Ci0JaW5vZGUtPmlfZmxhZ3MgfD0gU19QUklWQVRFOworCXJldHVybiBuYmxvY2tzOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfaW5pdF94YXR0cl9yd3NlbShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogewotCWluaXRfcndzZW0oJlJFSVNFUkZTX0koaW5vZGUpLT54YXR0cl9zZW0pOworCWluaXRfcndzZW0oJlJFSVNFUkZTX0koaW5vZGUpLT5pX3hhdHRyX3NlbSk7CiB9CiAKICNlbHNlCiAKLSNkZWZpbmUgaXNfcmVpc2VyZnNfcHJpdl9vYmplY3QoaW5vZGUpIDAKLSNkZWZpbmUgcmVpc2VyZnNfbWFya19pbm9kZV9wcml2YXRlKGlub2RlKSBkbyB7O30gd2hpbGUoMCkKICNkZWZpbmUgcmVpc2VyZnNfZ2V0eGF0dHIgTlVMTAogI2RlZmluZSByZWlzZXJmc19zZXR4YXR0ciBOVUxMCiAjZGVmaW5lIHJlaXNlcmZzX2xpc3R4YXR0ciBOVUxMCiAjZGVmaW5lIHJlaXNlcmZzX3JlbW92ZXhhdHRyIE5VTEwKLSNkZWZpbmUgcmVpc2VyZnNfd3JpdGVfbG9ja194YXR0cnMoc2IpIGRvIHs7fSB3aGlsZSgwKQotI2RlZmluZSByZWlzZXJmc193cml0ZV91bmxvY2tfeGF0dHJzKHNiKSBkbyB7O30gd2hpbGUoMCkKLSNkZWZpbmUgcmVpc2VyZnNfcmVhZF9sb2NrX3hhdHRycyhzYikKLSNkZWZpbmUgcmVpc2VyZnNfcmVhZF91bmxvY2tfeGF0dHJzKHNiKQogCiAjZGVmaW5lIHJlaXNlcmZzX3Blcm1pc3Npb24gTlVMTAogCi0jZGVmaW5lIHJlaXNlcmZzX3hhdHRyX3JlZ2lzdGVyX2hhbmRsZXJzKCkgMAotI2RlZmluZSByZWlzZXJmc194YXR0cl91bnJlZ2lzdGVyX2hhbmRsZXJzKCkKLQotc3RhdGljIGlubGluZSBpbnQgcmVpc2VyZnNfZGVsZXRlX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCXJldHVybiAwOwotfTsKLXN0YXRpYyBpbmxpbmUgaW50IHJlaXNlcmZzX2Nob3duX3hhdHRycyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCQlzdHJ1Y3QgaWF0dHIgKmF0dHJzKQotewotCXJldHVybiAwOwotfTsKLXN0YXRpYyBpbmxpbmUgaW50IHJlaXNlcmZzX3hhdHRyX2luaXQoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgaW50IG1vdW50X2ZsYWdzKQotewotCXNiLT5zX2ZsYWdzID0gKHNiLT5zX2ZsYWdzICYgfk1TX1BPU0lYQUNMKTsJLyogdG8gYmUgc3VyZSAqLwotCXJldHVybiAwOwotfTsKIHN0YXRpYyBpbmxpbmUgdm9pZCByZWlzZXJmc19pbml0X3hhdHRyX3J3c2VtKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiB7CiB9CiAjZW5kaWYgIC8qICBDT05GSUdfUkVJU0VSRlNfRlNfWEFUVFIgICovCiAKKyNpZm5kZWYgQ09ORklHX1JFSVNFUkZTX0ZTX1NFQ1VSSVRZCitzdGF0aWMgaW5saW5lIGludCByZWlzZXJmc19zZWN1cml0eV9pbml0KHN0cnVjdCBpbm9kZSAqZGlyLAorCQkJCQkgc3RydWN0IGlub2RlICppbm9kZSwKKwkJCQkJIHN0cnVjdCByZWlzZXJmc19zZWN1cml0eV9oYW5kbGUgKnNlYykKK3sKKwlyZXR1cm4gMDsKK30KK3N0YXRpYyBpbmxpbmUgaW50CityZWlzZXJmc19zZWN1cml0eV93cml0ZShzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlICp0aCwKKwkJCXN0cnVjdCBpbm9kZSAqaW5vZGUsCisJCQlzdHJ1Y3QgcmVpc2VyZnNfc2VjdXJpdHlfaGFuZGxlICpzZWMpCit7CisJcmV0dXJuIDA7Cit9CitzdGF0aWMgaW5saW5lIHZvaWQgcmVpc2VyZnNfc2VjdXJpdHlfZnJlZShzdHJ1Y3QgcmVpc2VyZnNfc2VjdXJpdHlfaGFuZGxlICpzZWMpCit7fQorI2VuZGlmCisKICNlbmRpZiAgLyogIF9fS0VSTkVMX18gICovCiAKICNlbmRpZiAgLyogIF9MSU5VWF9SRUlTRVJGU19YQVRUUl9IICAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zY2hlZC5oIGIvaW5jbHVkZS9saW51eC9zY2hlZC5oCmluZGV4IDFkMTljMDIuLjI5ZGY2MzcgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc2NoZWQuaAorKysgYi9pbmNsdWRlL2xpbnV4L3NjaGVkLmgKQEAgLTMzMSw3ICszMzEsOSBAQAogZXh0ZXJuIHNpZ25lZCBsb25nIHNjaGVkdWxlX3RpbWVvdXRfaW50ZXJydXB0aWJsZShzaWduZWQgbG9uZyB0aW1lb3V0KTsKIGV4dGVybiBzaWduZWQgbG9uZyBzY2hlZHVsZV90aW1lb3V0X2tpbGxhYmxlKHNpZ25lZCBsb25nIHRpbWVvdXQpOwogZXh0ZXJuIHNpZ25lZCBsb25nIHNjaGVkdWxlX3RpbWVvdXRfdW5pbnRlcnJ1cHRpYmxlKHNpZ25lZCBsb25nIHRpbWVvdXQpOworYXNtbGlua2FnZSB2b2lkIF9fc2NoZWR1bGUodm9pZCk7CiBhc21saW5rYWdlIHZvaWQgc2NoZWR1bGUodm9pZCk7CitleHRlcm4gaW50IG11dGV4X3NwaW5fb25fb3duZXIoc3RydWN0IG11dGV4ICpsb2NrLCBzdHJ1Y3QgdGhyZWFkX2luZm8gKm93bmVyKTsKIAogc3RydWN0IG5zcHJveHk7CiBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2U7CkBAIC0xMzM0LDYgKzEzMzYsNyBAQAogCWludCBsb2NrZGVwX2RlcHRoOwogCXVuc2lnbmVkIGludCBsb2NrZGVwX3JlY3Vyc2lvbjsKIAlzdHJ1Y3QgaGVsZF9sb2NrIGhlbGRfbG9ja3NbTUFYX0xPQ0tfREVQVEhdOworCWdmcF90IGxvY2tkZXBfcmVjbGFpbV9nZnA7CiAjZW5kaWYKIAogLyogam91cm5hbGxpbmcgZmlsZXN5c3RlbSBpbmZvICovCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3aW90bGIuaCBiL2luY2x1ZGUvbGludXgvc3dpb3RsYi5oCmluZGV4IGRlZGQzYzAuLmFjOWZmNTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvc3dpb3RsYi5oCisrKyBiL2luY2x1ZGUvbGludXgvc3dpb3RsYi5oCkBAIC0zMSw3ICszMSw3IEBACiAJCQkJICAgICAgcGh5c19hZGRyX3QgYWRkcmVzcyk7CiBleHRlcm4gcGh5c19hZGRyX3Qgc3dpb3RsYl9idXNfdG9fcGh5cyhkbWFfYWRkcl90IGFkZHJlc3MpOwogCi1leHRlcm4gaW50IHN3aW90bGJfYXJjaF9yYW5nZV9uZWVkc19tYXBwaW5nKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpOworZXh0ZXJuIGludCBzd2lvdGxiX2FyY2hfcmFuZ2VfbmVlZHNfbWFwcGluZyhwaHlzX2FkZHJfdCBwYWRkciwgc2l6ZV90IHNpemUpOwogCiBleHRlcm4gdm9pZAogKnN3aW90bGJfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqaHdkZXYsIHNpemVfdCBzaXplLApAQCAtNDEsMjAgKzQxLDEzIEBACiBzd2lvdGxiX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqaHdkZXYsIHNpemVfdCBzaXplLAogCQkgICAgICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKTsKIAotZXh0ZXJuIGRtYV9hZGRyX3QKLXN3aW90bGJfbWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgdm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSwgaW50IGRpcik7Ci0KLWV4dGVybiB2b2lkCi1zd2lvdGxiX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKLQkJICAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcik7Ci0KLWV4dGVybiBkbWFfYWRkcl90Ci1zd2lvdGxiX21hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqaHdkZXYsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsCi0JCQkgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOwotCi1leHRlcm4gdm9pZAotc3dpb3RsYl91bm1hcF9zaW5nbGVfYXR0cnMoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZGV2X2FkZHIsCi0JCQkgICBzaXplX3Qgc2l6ZSwgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOworZXh0ZXJuIGRtYV9hZGRyX3Qgc3dpb3RsYl9tYXBfcGFnZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBwYWdlICpwYWdlLAorCQkJCSAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCQkgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkJICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOworZXh0ZXJuIHZvaWQgc3dpb3RsYl91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRldl9hZGRyLAorCQkJICAgICAgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsCisJCQkgICAgICAgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpOwogCiBleHRlcm4gaW50CiBzd2lvdGxiX21hcF9zZyhzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywgaW50IG5lbnRzLApAQCAtNjYsMzYgKzU5LDM4IEBACiAKIGV4dGVybiBpbnQKIHN3aW90bGJfbWFwX3NnX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwgaW50IG5lbGVtcywKLQkJICAgICBpbnQgZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycyk7CisJCSAgICAgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLCBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycyk7CiAKIGV4dGVybiB2b2lkCiBzd2lvdGxiX3VubWFwX3NnX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnbCwKLQkJICAgICAgIGludCBuZWxlbXMsIGludCBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKKwkJICAgICAgIGludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJICAgICAgIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKTsKIAogZXh0ZXJuIHZvaWQKIHN3aW90bGJfc3luY19zaW5nbGVfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKLQkJCSAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcik7CisJCQkgICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7CiAKIGV4dGVybiB2b2lkCiBzd2lvdGxiX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCWludCBuZWxlbXMsIGludCBkaXIpOworCQkJaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTsKIAogZXh0ZXJuIHZvaWQKIHN3aW90bGJfc3luY19zaW5nbGVfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKLQkJCSAgICAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcik7CisJCQkgICAgICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcik7CiAKIGV4dGVybiB2b2lkCiBzd2lvdGxiX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCSAgIGludCBuZWxlbXMsIGludCBkaXIpOworCQkJICAgaW50IG5lbGVtcywgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyKTsKIAogZXh0ZXJuIHZvaWQKIHN3aW90bGJfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKLQkJCQkgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgaW50IGRpcik7CisJCQkJICB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpOwogCiBleHRlcm4gdm9pZAogc3dpb3RsYl9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfZGV2aWNlKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRldl9hZGRyLAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAotCQkJCSAgICAgaW50IGRpcik7CisJCQkJICAgICBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpOwogCiBleHRlcm4gaW50CiBzd2lvdGxiX2RtYV9tYXBwaW5nX2Vycm9yKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRtYV9hZGRyKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvdGltZXIuaCBiL2luY2x1ZGUvbGludXgvdGltZXIuaAppbmRleCBlMmQ2NjJlLi42Y2RiNmYzIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3RpbWVyLmgKKysrIGIvaW5jbHVkZS9saW51eC90aW1lci5oCkBAIC01LDYgKzUsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2t0aW1lLmg+CiAjaW5jbHVkZSA8bGludXgvc3RkZGVmLmg+CiAjaW5jbHVkZSA8bGludXgvZGVidWdvYmplY3RzLmg+CisjaW5jbHVkZSA8bGludXgvc3RyaW5naWZ5Lmg+CiAKIHN0cnVjdCB0dmVjX2Jhc2U7CiAKQEAgLTIxLDUyICsyMiwxMjYgQEAKIAljaGFyIHN0YXJ0X2NvbW1bMTZdOwogCWludCBzdGFydF9waWQ7CiAjZW5kaWYKKyNpZmRlZiBDT05GSUdfTE9DS0RFUAorCXN0cnVjdCBsb2NrZGVwX21hcCBsb2NrZGVwX21hcDsKKyNlbmRpZgogfTsKIAogZXh0ZXJuIHN0cnVjdCB0dmVjX2Jhc2UgYm9vdF90dmVjX2Jhc2VzOwogCisjaWZkZWYgQ09ORklHX0xPQ0tERVAKKy8qCisgKiBOQjogYmVjYXVzZSB3ZSBoYXZlIHRvIGNvcHkgdGhlIGxvY2tkZXBfbWFwLCBzZXR0aW5nIHRoZSBsb2NrZGVwX21hcCBrZXkKKyAqIChzZWNvbmQgYXJndW1lbnQpIGhlcmUgaXMgcmVxdWlyZWQsIG90aGVyd2lzZSBpdCBjb3VsZCBiZSBpbml0aWFsaXNlZCB0bworICogdGhlIGNvcHkgb2YgdGhlIGxvY2tkZXBfbWFwIGxhdGVyISBXZSB1c2UgdGhlIHBvaW50ZXIgdG8gYW5kIHRoZSBzdHJpbmcKKyAqICI8ZmlsZT46PGxpbmU+IiBhcyB0aGUga2V5IHJlc3AuIHRoZSBuYW1lIG9mIHRoZSBsb2NrZGVwX21hcC4KKyAqLworI2RlZmluZSBfX1RJTUVSX0xPQ0tERVBfTUFQX0lOSVRJQUxJWkVSKF9rbikJCQkJXAorCS5sb2NrZGVwX21hcCA9IFNUQVRJQ19MT0NLREVQX01BUF9JTklUKF9rbiwgJl9rbiksCisjZWxzZQorI2RlZmluZSBfX1RJTUVSX0xPQ0tERVBfTUFQX0lOSVRJQUxJWkVSKF9rbikKKyNlbmRpZgorCiAjZGVmaW5lIFRJTUVSX0lOSVRJQUxJWkVSKF9mdW5jdGlvbiwgX2V4cGlyZXMsIF9kYXRhKSB7CQlcCiAJCS5lbnRyeSA9IHsgLnByZXYgPSBUSU1FUl9FTlRSWV9TVEFUSUMgfSwJXAogCQkuZnVuY3Rpb24gPSAoX2Z1bmN0aW9uKSwJCQlcCiAJCS5leHBpcmVzID0gKF9leHBpcmVzKSwJCQkJXAogCQkuZGF0YSA9IChfZGF0YSksCQkJCVwKIAkJLmJhc2UgPSAmYm9vdF90dmVjX2Jhc2VzLAkJCVwKKwkJX19USU1FUl9MT0NLREVQX01BUF9JTklUSUFMSVpFUigJCVwKKwkJCV9fRklMRV9fICI6IiBfX3N0cmluZ2lmeShfX0xJTkVfXykpCVwKIAl9CiAKICNkZWZpbmUgREVGSU5FX1RJTUVSKF9uYW1lLCBfZnVuY3Rpb24sIF9leHBpcmVzLCBfZGF0YSkJCVwKIAlzdHJ1Y3QgdGltZXJfbGlzdCBfbmFtZSA9CQkJCVwKIAkJVElNRVJfSU5JVElBTElaRVIoX2Z1bmN0aW9uLCBfZXhwaXJlcywgX2RhdGEpCiAKLXZvaWQgaW5pdF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpOwotdm9pZCBpbml0X3RpbWVyX2RlZmVycmFibGUoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKTsKK3ZvaWQgaW5pdF90aW1lcl9rZXkoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLAorCQkgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KTsKK3ZvaWQgaW5pdF90aW1lcl9kZWZlcnJhYmxlX2tleShzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsCisJCQkgICAgICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCSAgICAgICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSk7CisKKyNpZmRlZiBDT05GSUdfTE9DS0RFUAorI2RlZmluZSBpbml0X3RpbWVyKHRpbWVyKQkJCQkJCVwKKwlkbyB7CQkJCQkJCQlcCisJCXN0YXRpYyBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgX19rZXk7CQkJXAorCQlpbml0X3RpbWVyX2tleSgodGltZXIpLCAjdGltZXIsICZfX2tleSk7CQlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBpbml0X3RpbWVyX2RlZmVycmFibGUodGltZXIpCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fa2V5OwkJCVwKKwkJaW5pdF90aW1lcl9kZWZlcnJhYmxlX2tleSgodGltZXIpLCAjdGltZXIsICZfX2tleSk7CVwKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIGluaXRfdGltZXJfb25fc3RhY2sodGltZXIpCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fa2V5OwkJCVwKKwkJaW5pdF90aW1lcl9vbl9zdGFja19rZXkoKHRpbWVyKSwgI3RpbWVyLCAmX19rZXkpOwlcCisJfSB3aGlsZSAoMCkKKworI2RlZmluZSBzZXR1cF90aW1lcih0aW1lciwgZm4sIGRhdGEpCQkJCQlcCisJZG8gewkJCQkJCQkJXAorCQlzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IF9fa2V5OwkJCVwKKwkJc2V0dXBfdGltZXJfa2V5KCh0aW1lciksICN0aW1lciwgJl9fa2V5LCAoZm4pLCAoZGF0YSkpO1wKKwl9IHdoaWxlICgwKQorCisjZGVmaW5lIHNldHVwX3RpbWVyX29uX3N0YWNrKHRpbWVyLCBmbiwgZGF0YSkJCQkJXAorCWRvIHsJCQkJCQkJCVwKKwkJc3RhdGljIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBfX2tleTsJCQlcCisJCXNldHVwX3RpbWVyX29uX3N0YWNrX2tleSgodGltZXIpLCAjdGltZXIsICZfX2tleSwJXAorCQkJCQkgKGZuKSwgKGRhdGEpKTsJCQlcCisJfSB3aGlsZSAoMCkKKyNlbHNlCisjZGVmaW5lIGluaXRfdGltZXIodGltZXIpXAorCWluaXRfdGltZXJfa2V5KCh0aW1lciksIE5VTEwsIE5VTEwpCisjZGVmaW5lIGluaXRfdGltZXJfZGVmZXJyYWJsZSh0aW1lcilcCisJaW5pdF90aW1lcl9kZWZlcnJhYmxlX2tleSgodGltZXIpLCBOVUxMLCBOVUxMKQorI2RlZmluZSBpbml0X3RpbWVyX29uX3N0YWNrKHRpbWVyKVwKKwlpbml0X3RpbWVyX29uX3N0YWNrX2tleSgodGltZXIpLCBOVUxMLCBOVUxMKQorI2RlZmluZSBzZXR1cF90aW1lcih0aW1lciwgZm4sIGRhdGEpXAorCXNldHVwX3RpbWVyX2tleSgodGltZXIpLCBOVUxMLCBOVUxMLCAoZm4pLCAoZGF0YSkpCisjZGVmaW5lIHNldHVwX3RpbWVyX29uX3N0YWNrKHRpbWVyLCBmbiwgZGF0YSlcCisJc2V0dXBfdGltZXJfb25fc3RhY2tfa2V5KCh0aW1lciksIE5VTEwsIE5VTEwsIChmbiksIChkYXRhKSkKKyNlbmRpZgogCiAjaWZkZWYgQ09ORklHX0RFQlVHX09CSkVDVFNfVElNRVJTCi1leHRlcm4gdm9pZCBpbml0X3RpbWVyX29uX3N0YWNrKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcik7CitleHRlcm4gdm9pZCBpbml0X3RpbWVyX29uX3N0YWNrX2tleShzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsCisJCQkJICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkJICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KTsKIGV4dGVybiB2b2lkIGRlc3Ryb3lfdGltZXJfb25fc3RhY2soc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHZvaWQgZGVzdHJveV90aW1lcl9vbl9zdGFjayhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpIHsgfQotc3RhdGljIGlubGluZSB2b2lkIGluaXRfdGltZXJfb25fc3RhY2soc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQorc3RhdGljIGlubGluZSB2b2lkIGluaXRfdGltZXJfb25fc3RhY2tfa2V5KHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwKKwkJCQkJICAgY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJICAgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpCiB7Ci0JaW5pdF90aW1lcih0aW1lcik7CisJaW5pdF90aW1lcl9rZXkodGltZXIsIG5hbWUsIGtleSk7CiB9CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIHNldHVwX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICogdGltZXIsCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfdGltZXJfa2V5KHN0cnVjdCB0aW1lcl9saXN0ICogdGltZXIsCisJCQkJY29uc3QgY2hhciAqbmFtZSwKKwkJCQlzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSwKIAkJCQl2b2lkICgqZnVuY3Rpb24pKHVuc2lnbmVkIGxvbmcpLAogCQkJCXVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAl0aW1lci0+ZnVuY3Rpb24gPSBmdW5jdGlvbjsKIAl0aW1lci0+ZGF0YSA9IGRhdGE7Ci0JaW5pdF90aW1lcih0aW1lcik7CisJaW5pdF90aW1lcl9rZXkodGltZXIsIG5hbWUsIGtleSk7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBzZXR1cF90aW1lcl9vbl9zdGFjayhzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIsCitzdGF0aWMgaW5saW5lIHZvaWQgc2V0dXBfdGltZXJfb25fc3RhY2tfa2V5KHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwKKwkJCQkJY29uc3QgY2hhciAqbmFtZSwKKwkJCQkJc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXksCiAJCQkJCXZvaWQgKCpmdW5jdGlvbikodW5zaWduZWQgbG9uZyksCiAJCQkJCXVuc2lnbmVkIGxvbmcgZGF0YSkKIHsKIAl0aW1lci0+ZnVuY3Rpb24gPSBmdW5jdGlvbjsKIAl0aW1lci0+ZGF0YSA9IGRhdGE7Ci0JaW5pdF90aW1lcl9vbl9zdGFjayh0aW1lcik7CisJaW5pdF90aW1lcl9vbl9zdGFja19rZXkodGltZXIsIG5hbWUsIGtleSk7CiB9CiAKIC8qKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC92aWRlb19kZWNvZGVyLmggYi9pbmNsdWRlL2xpbnV4L3ZpZGVvX2RlY29kZXIuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggZTI2YzBjOC4uMDAwMDAwMAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpZGVvX2RlY29kZXIuaAorKysgL2Rldi9udWxsCkBAIC0xLDQ4ICswLDAgQEAKLSNpZm5kZWYgX0xJTlVYX1ZJREVPX0RFQ09ERVJfSAotI2RlZmluZSBfTElOVVhfVklERU9fREVDT0RFUl9ICi0KLSNpbmNsdWRlIDxsaW51eC90eXBlcy5oPgotCi0jZGVmaW5lIEhBVkVfVklERU9fREVDT0RFUiAxCi0KLXN0cnVjdCB2aWRlb19kZWNvZGVyX2NhcGFiaWxpdHkgeyAvKiB0aGlzIG5hbWUgaXMgdG9vIGxvbmcgKi8KLQlfX3UzMglmbGFnczsKLSNkZWZpbmUJVklERU9fREVDT0RFUl9QQUwJMQkvKiBjYW4gZGVjb2RlIFBBTCBzaWduYWwgKi8KLSNkZWZpbmUJVklERU9fREVDT0RFUl9OVFNDCTIJLyogY2FuIGRlY29kZSBOVFNDICovCi0jZGVmaW5lCVZJREVPX0RFQ09ERVJfU0VDQU0JNAkvKiBjYW4gZGVjb2RlIFNFQ0FNICovCi0jZGVmaW5lCVZJREVPX0RFQ09ERVJfQVVUTwk4CS8qIGNhbiBhdXRvc2Vuc2Ugbm9ybSAqLwotI2RlZmluZQlWSURFT19ERUNPREVSX0NDSVIJMTYJLyogQ0NJUi02MDEgcGl4ZWwgcmF0ZSAoNzIwIHBpeGVscyBwZXIgbGluZSkgaW5zdGVhZCBvZiBzcXVhcmUgcGl4ZWwgcmF0ZSAqLwotCWludAlpbnB1dHM7CQkJLyogbnVtYmVyIG9mIGlucHV0cyAqLwotCWludAlvdXRwdXRzOwkJLyogbnVtYmVyIG9mIG91dHB1dHMgKi8KLX07Ci0KLS8qCi1ERUNPREVSX0dFVF9TVEFUVVMgcmV0dXJucyB0aGUgZm9sbG93aW5nIGZsYWdzLiAgVGhlIG9ubHkgb25lIHlvdSBuZWVkIGlzCi1ERUNPREVSX1NUQVRVU19HT09ELCB0aGUgb3RoZXJzIGFyZSBqdXN0IG5pY2UgdGhpbmdzIHRvIGtub3cuCi0qLwotI2RlZmluZQlERUNPREVSX1NUQVRVU19HT09ECTEJLyogcmVjZWl2aW5nIGFjY2VwdGFibGUgaW5wdXQgKi8KLSNkZWZpbmUJREVDT0RFUl9TVEFUVVNfQ09MT1IJMgkvKiByZWNlaXZpbmcgY29sb3IgaW5mb3JtYXRpb24gKi8KLSNkZWZpbmUJREVDT0RFUl9TVEFUVVNfUEFMCTQJLyogYXV0byBkZXRlY3RlZCAqLwotI2RlZmluZQlERUNPREVSX1NUQVRVU19OVFNDCTgJLyogYXV0byBkZXRlY3RlZCAqLwotI2RlZmluZQlERUNPREVSX1NUQVRVU19TRUNBTQkxNgkvKiBhdXRvIGRldGVjdGVkICovCi0KLXN0cnVjdCB2aWRlb19kZWNvZGVyX2luaXQgewotCXVuc2lnbmVkIGNoYXIgbGVuOwotCWNvbnN0IHVuc2lnbmVkIGNoYXIgKmRhdGE7Ci19OwotCi0jZGVmaW5lCURFQ09ERVJfR0VUX0NBUEFCSUxJVElFUyBfSU9SKCdkJywgMSwgc3RydWN0IHZpZGVvX2RlY29kZXJfY2FwYWJpbGl0eSkKLSNkZWZpbmUJREVDT0RFUl9HRVRfU1RBVFVTICAgIAlfSU9SKCdkJywgMiwgaW50KQotI2RlZmluZQlERUNPREVSX1NFVF9OT1JNCV9JT1coJ2QnLCAzLCBpbnQpCi0jZGVmaW5lCURFQ09ERVJfU0VUX0lOUFVUCV9JT1coJ2QnLCA0LCBpbnQpCS8qIDAgPD0gaW5wdXQgPCAjaW5wdXRzICovCi0jZGVmaW5lCURFQ09ERVJfU0VUX09VVFBVVAlfSU9XKCdkJywgNSwgaW50KQkvKiAwIDw9IG91dHB1dCA8ICNvdXRwdXRzICovCi0jZGVmaW5lCURFQ09ERVJfRU5BQkxFX09VVFBVVAlfSU9XKCdkJywgNiwgaW50KQkvKiBib29sZWFuIG91dHB1dCBlbmFibGUgY29udHJvbCAqLwotI2RlZmluZQlERUNPREVSX1NFVF9QSUNUVVJFICAgCV9JT1coJ2QnLCA3LCBzdHJ1Y3QgdmlkZW9fcGljdHVyZSkKLSNkZWZpbmUJREVDT0RFUl9TRVRfR1BJTwlfSU9XKCdkJywgOCwgaW50KQkvKiBzd2l0Y2ggZ2VuZXJhbCBwdXJwb3NlIHBpbiAqLwotI2RlZmluZQlERUNPREVSX0lOSVQJCV9JT1coJ2QnLCA5LCBzdHJ1Y3QgdmlkZW9fZGVjb2Rlcl9pbml0KQkvKiBpbml0IGludGVybmFsIHJlZ2lzdGVycyBhdCBvbmNlICovCi0jZGVmaW5lCURFQ09ERVJfU0VUX1ZCSV9CWVBBU1MJX0lPVygnZCcsIDEwLCBpbnQpCS8qIHN3aXRjaCB2YmkgYnlwYXNzICovCi0KLSNkZWZpbmUJREVDT0RFUl9EVU1QCQlfSU8oJ2QnLCAxOTIpCQkvKiBkZWJ1ZyBob29rICovCi0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpZGVvX2VuY29kZXIuaCBiL2luY2x1ZGUvbGludXgvdmlkZW9fZW5jb2Rlci5oCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCBiN2I2NDIzLi4wMDAwMDAwCi0tLSBhL2luY2x1ZGUvbGludXgvdmlkZW9fZW5jb2Rlci5oCisrKyAvZGV2L251bGwKQEAgLTEsMjMgKzAsMCBAQAotI2lmbmRlZiBfTElOVVhfVklERU9fRU5DT0RFUl9ICi0jZGVmaW5lIF9MSU5VWF9WSURFT19FTkNPREVSX0gKLQotI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+Ci0KLXN0cnVjdCB2aWRlb19lbmNvZGVyX2NhcGFiaWxpdHkgeyAvKiB0aGlzIG5hbWUgaXMgdG9vIGxvbmcgKi8KLQlfX3UzMglmbGFnczsKLSNkZWZpbmUJVklERU9fRU5DT0RFUl9QQUwJMQkvKiBjYW4gZW5jb2RlIFBBTCBzaWduYWwgKi8KLSNkZWZpbmUJVklERU9fRU5DT0RFUl9OVFNDCTIJLyogY2FuIGVuY29kZSBOVFNDICovCi0jZGVmaW5lCVZJREVPX0VOQ09ERVJfU0VDQU0JNAkvKiBjYW4gZW5jb2RlIFNFQ0FNICovCi0jZGVmaW5lCVZJREVPX0VOQ09ERVJfQ0NJUgkxNgkvKiBDQ0lSLTYwMSBwaXhlbCByYXRlICg3MjAgcGl4ZWxzIHBlciBsaW5lKSBpbnN0ZWFkIG9mIHNxdWFyZSBwaXhlbCByYXRlICovCi0JaW50CWlucHV0czsJCQkvKiBudW1iZXIgb2YgaW5wdXRzICovCi0JaW50CW91dHB1dHM7CQkvKiBudW1iZXIgb2Ygb3V0cHV0cyAqLwotfTsKLQotI2RlZmluZQlFTkNPREVSX0dFVF9DQVBBQklMSVRJRVMgX0lPUignZScsIDEsIHN0cnVjdCB2aWRlb19lbmNvZGVyX2NhcGFiaWxpdHkpCi0jZGVmaW5lCUVOQ09ERVJfU0VUX05PUk0JX0lPVygnZScsIDIsIGludCkKLSNkZWZpbmUJRU5DT0RFUl9TRVRfSU5QVVQJX0lPVygnZScsIDMsIGludCkJLyogMCA8PSBpbnB1dCA8ICNpbnB1dHMgKi8KLSNkZWZpbmUJRU5DT0RFUl9TRVRfT1VUUFVUCV9JT1coJ2UnLCA0LCBpbnQpCS8qIDAgPD0gb3V0cHV0IDwgI291dHB1dHMgKi8KLSNkZWZpbmUJRU5DT0RFUl9FTkFCTEVfT1VUUFVUCV9JT1coJ2UnLCA1LCBpbnQpCS8qIGJvb2xlYW4gb3V0cHV0IGVuYWJsZSBjb250cm9sICovCi0KLQotI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2LmggYi9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2LmgKaW5kZXggODM3ZjM5Mi4uYjE5ZWFiMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC92aWRlb2Rldi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYuaApAQCAtMTYsNiArMTYsMjMgQEAKICNpbmNsdWRlIDxsaW51eC9pb2N0bC5oPgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgogCisjaWYgZGVmaW5lZChfX01JTl9WNEwxKSAmJiBkZWZpbmVkIChfX0tFUk5FTF9fKQorCisvKgorICogVXNlZCBieSB0aG9zZSBWNEwyIGNvcmUgZnVuY3Rpb25zIHRoYXQgbmVlZCBhIG1pbmltdW0gVjRMMSBzdXBwb3J0LAorICogaW4gb3JkZXIgdG8gYWxsb3cgVjRMMSBDb21wYXRpYmlsdHkgY29kZSBjb21waWxhdGlvbi4KKyAqLworCitzdHJ1Y3QgdmlkZW9fbWJ1ZgoreworCWludAlzaXplOwkJLyogVG90YWwgbWVtb3J5IHRvIG1hcCAqLworCWludAlmcmFtZXM7CQkvKiBGcmFtZXMgKi8KKwlpbnQJb2Zmc2V0c1tWSURFT19NQVhfRlJBTUVdOworfTsKKworI2RlZmluZSBWSURJT0NHTUJVRgkJX0lPUigndicsMjAsIHN0cnVjdCB2aWRlb19tYnVmKQkJLyogTWVtb3J5IG1hcCBidWZmZXIgaW5mbyAqLworCisjZWxzZQogI2lmIGRlZmluZWQoQ09ORklHX1ZJREVPX1Y0TDFfQ09NUEFUKSB8fCAhZGVmaW5lZCAoX19LRVJORUxfXykKIAogI2RlZmluZSBWSURfVFlQRV9DQVBUVVJFCTEJLyogQ2FuIGNhcHR1cmUgKi8KQEAgLTMxMiw2ICszMjksNyBAQAogI2RlZmluZSBWSURfUExBWV9FTkRfTUFSSwkJMTQKIAogI2VuZGlmIC8qIENPTkZJR19WSURFT19WNEwxX0NPTVBBVCAqLworI2VuZGlmIC8qIF9fTUlOX1Y0TDEgKi8KIAogI2VuZGlmIC8qIF9fTElOVVhfVklERU9ERVZfSCAqLwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oIGIvaW5jbHVkZS9saW51eC92aWRlb2RldjIuaAppbmRleCA1NTcxZGJlLi4xMzlkMjM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3ZpZGVvZGV2Mi5oCisrKyBiL2luY2x1ZGUvbGludXgvdmlkZW9kZXYyLmgKQEAgLTM0NCw2ICszNDQsOCBAQAogI2RlZmluZSBWNEwyX1BJWF9GTVRfU1BDQTUwOCAgdjRsMl9mb3VyY2MoJ1MnLCAnNScsICcwJywgJzgnKSAvKiBZVVZZIHBlciBsaW5lICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9TUENBNTYxICB2NGwyX2ZvdXJjYygnUycsICc1JywgJzYnLCAnMScpIC8qIGNvbXByZXNzZWQgR0JSRyBiYXllciAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfUEFDMjA3ICAgdjRsMl9mb3VyY2MoJ1AnLCAnMicsICcwJywgJzcnKSAvKiBjb21wcmVzc2VkIEJHR1IgYmF5ZXIgKi8KKyNkZWZpbmUgVjRMMl9QSVhfRk1UX01SOTczMTBBIHY0bDJfZm91cmNjKCdNJywgJzMnLCAnMScsICcwJykgLyogY29tcHJlc3NlZCBCR0dSIGJheWVyICovCisjZGVmaW5lIFY0TDJfUElYX0ZNVF9TUTkwNUMgICB2NGwyX2ZvdXJjYygnOScsICcwJywgJzUnLCAnQycpIC8qIGNvbXByZXNzZWQgUkdHQiBiYXllciAqLwogI2RlZmluZSBWNEwyX1BJWF9GTVRfUEpQRyAgICAgdjRsMl9mb3VyY2MoJ1AnLCAnSicsICdQJywgJ0cnKSAvKiBQaXhhcnQgNzN4eCBKUEVHICovCiAjZGVmaW5lIFY0TDJfUElYX0ZNVF9ZVllVICAgIHY0bDJfZm91cmNjKCdZJywgJ1YnLCAnWScsICdVJykgLyogMTYgIFlWVSA0OjI6MiAgICAgKi8KIApAQCAtODI5LDYgKzgzMSw3IEBACiAjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX1VQREFURSAJCTB4MDAwOAogI2RlZmluZSBWNEwyX0NUUkxfRkxBR19JTkFDVElWRSAJMHgwMDEwCiAjZGVmaW5lIFY0TDJfQ1RSTF9GTEFHX1NMSURFUiAJCTB4MDAyMAorI2RlZmluZSBWNEwyX0NUUkxfRkxBR19XUklURV9PTkxZIAkweDAwNDAKIAogLyogIFF1ZXJ5IGZsYWcsIHRvIGJlIE9SZWQgd2l0aCB0aGUgY29udHJvbCBJRCAqLwogI2RlZmluZSBWNEwyX0NUUkxfRkxBR19ORVhUX0NUUkwJMHg4MDAwMDAwMApAQCAtODc5LDggKzg4MiwxNSBAQAogI2RlZmluZSBWNEwyX0NJRF9CQUNLTElHSFRfQ09NUEVOU0FUSU9OIAkoVjRMMl9DSURfQkFTRSsyOCkKICNkZWZpbmUgVjRMMl9DSURfQ0hST01BX0FHQyAgICAgICAgICAgICAgICAgICAgIChWNEwyX0NJRF9CQVNFKzI5KQogI2RlZmluZSBWNEwyX0NJRF9DT0xPUl9LSUxMRVIgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMzApCisjZGVmaW5lIFY0TDJfQ0lEX0NPTE9SRlgJCQkoVjRMMl9DSURfQkFTRSszMSkKK2VudW0gdjRsMl9jb2xvcmZ4IHsKKwlWNEwyX0NPTE9SRlhfTk9ORQk9IDAsCisJVjRMMl9DT0xPUkZYX0JXCQk9IDEsCisJVjRMMl9DT0xPUkZYX1NFUElBCT0gMiwKK307CisKIC8qIGxhc3QgQ0lEICsgMSAqLwotI2RlZmluZSBWNEwyX0NJRF9MQVNUUDEgICAgICAgICAgICAgICAgICAgICAgICAgKFY0TDJfQ0lEX0JBU0UrMzEpCisjZGVmaW5lIFY0TDJfQ0lEX0xBU1RQMSAgICAgICAgICAgICAgICAgICAgICAgICAoVjRMMl9DSURfQkFTRSszMikKIAogLyogIE1QRUctY2xhc3MgY29udHJvbCBJRHMgZGVmaW5lZCBieSBWNEwyICovCiAjZGVmaW5lIFY0TDJfQ0lEX01QRUdfQkFTRSAJCQkoVjRMMl9DVFJMX0NMQVNTX01QRUcgfCAweDkwMCkKQEAgLTEzMzksNiArMTM0OSw1MyBAQAogfTsKIAogLyoKKyAqIFNsaWNlZCBWQkkgZGF0YSBpbnNlcnRlZCBpbnRvIE1QRUcgU3RyZWFtcworICovCisKKy8qCisgKiBWNEwyX01QRUdfU1RSRUFNX1ZCSV9GTVRfSVZUVjoKKyAqCisgKiBTdHJ1Y3R1cmUgb2YgcGF5bG9hZCBjb250YWluZWQgaW4gYW4gTVBFRyAyIFByaXZhdGUgU3RyZWFtIDEgUEVTIFBhY2tldCBpbiBhbgorICogTVBFRy0yIFByb2dyYW0gUGFjayB0aGF0IGNvbnRhaW5zIFY0TDJfTVBFR19TVFJFQU1fVkJJX0ZNVF9JVlRWIFNsaWNlZCBWQkkKKyAqIGRhdGEKKyAqCisgKiBOb3RlLCB0aGUgTVBFRy0yIFByb2dyYW0gUGFjayBhbmQgUHJpdmF0ZSBTdHJlYW0gMSBQRVMgcGFja2V0IGhlYWRlcgorICogZGVmaW5pdGlvbnMgYXJlIG5vdCBpbmNsdWRlZCBoZXJlLiAgU2VlIHRoZSBNUEVHLTIgc3BlY2lmaWNhdGlvbnMgZm9yIGRldGFpbHMKKyAqIG9uIHRoZXNlIGhlYWRlcnMuCisgKi8KKworLyogTGluZSB0eXBlIElEcyAqLworI2RlZmluZSBWNEwyX01QRUdfVkJJX0lWVFZfVEVMRVRFWFRfQiAgICAgKDEpCisjZGVmaW5lIFY0TDJfTVBFR19WQklfSVZUVl9DQVBUSU9OXzUyNSAgICAoNCkKKyNkZWZpbmUgVjRMMl9NUEVHX1ZCSV9JVlRWX1dTU182MjUgICAgICAgICg1KQorI2RlZmluZSBWNEwyX01QRUdfVkJJX0lWVFZfVlBTICAgICAgICAgICAgKDcpCisKK3N0cnVjdCB2NGwyX21wZWdfdmJpX2l0djBfbGluZSB7CisJX191OCBpZDsJLyogT25lIG9mIFY0TDJfTVBFR19WQklfSVZUVl8qIGFib3ZlICovCisJX191OCBkYXRhWzQyXTsJLyogU2xpY2VkIFZCSSBkYXRhIGZvciB0aGUgbGluZSAqLworfSBfX2F0dHJpYnV0ZV9fICgocGFja2VkKSk7CisKK3N0cnVjdCB2NGwyX21wZWdfdmJpX2l0djAgeworCV9fbGUzMiBsaW5lbWFza1syXTsgLyogQml0bWFza3Mgb2YgVkJJIHNlcnZpY2UgbGluZXMgcHJlc2VudCAqLworCXN0cnVjdCB2NGwyX21wZWdfdmJpX2l0djBfbGluZSBsaW5lWzM1XTsKK30gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOworCitzdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9JVFYwIHsKKwlzdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9pdHYwX2xpbmUgbGluZVszNl07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworI2RlZmluZSBWNEwyX01QRUdfVkJJX0lWVFZfTUFHSUMwCSJpdHYwIgorI2RlZmluZSBWNEwyX01QRUdfVkJJX0lWVFZfTUFHSUMxCSJJVFYwIgorCitzdHJ1Y3QgdjRsMl9tcGVnX3ZiaV9mbXRfaXZ0diB7CisJX191OCBtYWdpY1s0XTsKKwl1bmlvbiB7CisJCXN0cnVjdCB2NGwyX21wZWdfdmJpX2l0djAgaXR2MDsKKwkJc3RydWN0IHY0bDJfbXBlZ192YmlfSVRWMCBJVFYwOworCX07Cit9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKKworLyoKICAqCUEgRyBHIFIgRSBHIEEgVCBFICAgUyBUIFIgVSBDIFQgVSBSIEUgUwogICovCiAKQEAgLTE0MDMsMTQgKzE0NjAsNiBAQAogCV9fdTMyIHJldmlzaW9uOyAgICAvKiBjaGlwIHJldmlzaW9uLCBjaGlwIHNwZWNpZmljICovCiB9IF9fYXR0cmlidXRlX18gKChwYWNrZWQpKTsKIAotLyogVklESU9DX0dfQ0hJUF9JREVOVF9PTEQ6IERlcHJlY2F0ZWQsIGRvIG5vdCB1c2UgKi8KLXN0cnVjdCB2NGwyX2NoaXBfaWRlbnRfb2xkIHsKLQlfX3UzMiBtYXRjaF90eXBlOyAgLyogTWF0Y2ggdHlwZSAqLwotCV9fdTMyIG1hdGNoX2NoaXA7ICAvKiBNYXRjaCB0aGlzIGNoaXAsIG1lYW5pbmcgZGV0ZXJtaW5lZCBieSBtYXRjaF90eXBlICovCi0JX191MzIgaWRlbnQ7ICAgICAgIC8qIGNoaXAgaWRlbnRpZmllciBhcyBzcGVjaWZpZWQgaW4gPG1lZGlhL3Y0bDItY2hpcC1pZGVudC5oPiAqLwotCV9fdTMyIHJldmlzaW9uOyAgICAvKiBjaGlwIHJldmlzaW9uLCBjaGlwIHNwZWNpZmljICovCi19OwotCiAvKgogICoJSSBPIEMgVCBMICAgQyBPIEQgRSBTICAgRiBPIFIgICBWIEkgRCBFIE8gICBEIEUgViBJIEMgRSBTCiAgKgpAQCAtMTQ4OCw4ICsxNTM3LDYgQEAKIC8qIEV4cGVyaW1lbnRhbCwgbWVhbnQgZm9yIGRlYnVnZ2luZywgdGVzdGluZyBhbmQgaW50ZXJuYWwgdXNlLgogICAgTmV2ZXIgdXNlIHRoaXMgaW9jdGwgaW4gYXBwbGljYXRpb25zISAqLwogI2RlZmluZSBWSURJT0NfREJHX0dfQ0hJUF9JREVOVCBfSU9XUignVicsIDgxLCBzdHJ1Y3QgdjRsMl9kYmdfY2hpcF9pZGVudCkKLS8qIFRoaXMgaXMgZGVwcmVjYXRlZCBhbmQgd2lsbCBnbyBhd2F5IGluIDIuNi4zMCAqLwotI2RlZmluZSBWSURJT0NfR19DSElQX0lERU5UX09MRCBfSU9XUignVicsIDgxLCBzdHJ1Y3QgdjRsMl9jaGlwX2lkZW50X29sZCkKICNlbmRpZgogCiAjZGVmaW5lIFZJRElPQ19TX0hXX0ZSRVFfU0VFSwkgX0lPVygnVicsIDgyLCBzdHJ1Y3QgdjRsMl9od19mcmVxX3NlZWspCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL2J0ODE5LmggYi9pbmNsdWRlL21lZGlhL2J0ODE5LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzhmNjY2YgotLS0gL2Rldi9udWxsCisrKyBiL2luY2x1ZGUvbWVkaWEvYnQ4MTkuaApAQCAtMCwwICsxLDMzIEBACisvKgorICAgIGJ0ODE5LmggLSBidDgxOSBub3RpZmljYXRpb25zCisKKyAgICBDb3B5cmlnaHQgKEMpIDIwMDkgSGFucyBWZXJrdWlsIChodmVya3VpbEB4czRhbGwubmwpCisKKyAgICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQorICAgIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgICAgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKKyAgICAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorCisgICAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgICAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAgICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlCisgICAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKworICAgIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgICAgYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAgICBGb3VuZGF0aW9uLCBJbmMuLCA2NzUgTWFzcyBBdmUsIENhbWJyaWRnZSwgTUEgMDIxMzksIFVTQS4KKyovCisKKyNpZm5kZWYgX0JUODE5X0hfCisjZGVmaW5lIF9CVDgxOV9IXworCisjaW5jbHVkZSA8bGludXgvaW9jdGwuaD4KKworLyogdjRsMl9kZXZpY2Ugbm90aWZpY2F0aW9ucy4gKi8KKworLyogTmVlZGVkIHRvIHJlc2V0IHRoZSBGSUZPIGJ1ZmZlciB3aGVuIGNoYW5naW5nIHRoZSBpbnB1dAorICAgb3IgdGhlIHZpZGVvIHN0YW5kYXJkLiAqLworI2RlZmluZSBCVDgxOV9GSUZPX1JFU0VUX0xPVyAJX0lPKCdiJywgMCkKKyNkZWZpbmUgQlQ4MTlfRklGT19SRVNFVF9ISUdIIAlfSU8oJ2InLCAxKQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvY3gyMzQxeC5oIGIvaW5jbHVkZS9tZWRpYS9jeDIzNDF4LmgKaW5kZXggOWVjNGQ1OC4uOWViZTg1NSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9jeDIzNDF4LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9jeDIzNDF4LmgKQEAgLTEsNSArMSw1IEBACiAvKgotICAgIGN4MjM0MTUvNiBoZWFkZXIgY29udGFpbmluZyBjb21tb24gZGVmaW5lcy4KKyAgICBjeDIzNDE1LzYvOCBoZWFkZXIgY29udGFpbmluZyBjb21tb24gZGVmaW5lcy4KIAogICAgIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5CiAgICAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKQEAgLTI4LDYgKzI4LDcgQEAKIGVudW0gY3gyMzQxeF9jYXAgewogCUNYMjM0MVhfQ0FQX0hBU19TTElDRURfVkJJID0gMSA8PCAwLAogCUNYMjM0MVhfQ0FQX0hBU19UUyAJICAgPSAxIDw8IDEsCisJQ1gyMzQxWF9DQVBfSEFTX0FDMyAJICAgPSAxIDw8IDIsCiB9OwogCiBzdHJ1Y3QgY3gyMzQxeF9tcGVnX3BhcmFtcyB7CkBAIC00NywxMSArNDgsMTIgQEAKIAllbnVtIHY0bDJfbXBlZ19hdWRpb19zYW1wbGluZ19mcmVxIGF1ZGlvX3NhbXBsaW5nX2ZyZXE7CiAJZW51bSB2NGwyX21wZWdfYXVkaW9fZW5jb2RpbmcgYXVkaW9fZW5jb2Rpbmc7CiAJZW51bSB2NGwyX21wZWdfYXVkaW9fbDJfYml0cmF0ZSBhdWRpb19sMl9iaXRyYXRlOworCWVudW0gdjRsMl9tcGVnX2F1ZGlvX2FjM19iaXRyYXRlIGF1ZGlvX2FjM19iaXRyYXRlOwogCWVudW0gdjRsMl9tcGVnX2F1ZGlvX21vZGUgYXVkaW9fbW9kZTsKIAllbnVtIHY0bDJfbXBlZ19hdWRpb19tb2RlX2V4dGVuc2lvbiBhdWRpb19tb2RlX2V4dGVuc2lvbjsKIAllbnVtIHY0bDJfbXBlZ19hdWRpb19lbXBoYXNpcyBhdWRpb19lbXBoYXNpczsKIAllbnVtIHY0bDJfbXBlZ19hdWRpb19jcmMgYXVkaW9fY3JjOwotCXUxNiBhdWRpb19wcm9wZXJ0aWVzOworCXUzMiBhdWRpb19wcm9wZXJ0aWVzOwogCXUxNiBhdWRpb19tdXRlOwogCiAJLyogdmlkZW8gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvY3gyNTg0MC5oIGIvaW5jbHVkZS9tZWRpYS9jeDI1ODQwLmgKaW5kZXggZGI0MzFkNS4uMmMzZmJhYSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9jeDI1ODQwLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9jeDI1ODQwLmgKQEAgLTIxLDYgKzIxLDE4IEBACiAjaWZuZGVmIF9DWDI1ODQwX0hfCiAjZGVmaW5lIF9DWDI1ODQwX0hfCiAKKy8qIE5vdGUgdGhhdCB0aGUgY3gyNTg0MCBkcml2ZXIgcmVxdWlyZXMgdGhhdCB0aGUgYnJpZGdlIGRyaXZlciBjYWxscyB0aGUKKyAgIHY0bDJfc3ViZGV2J3MgaW5pdCBvcGVyYXRpb24gaW4gb3JkZXIgdG8gbG9hZCB0aGUgZHJpdmVyJ3MgZmlybXdhcmUuCisgICBXaXRob3V0IHRoaXMgdGhlIGF1ZGlvIHN0YW5kYXJkIGRldGVjdGlvbiB3aWxsIGZhaWwgYW5kIHlvdSB3aWxsCisgICBvbmx5IGdldCBtb25vLgorCisgICBTaW5jZSBsb2FkaW5nIHRoZSBmaXJtd2FyZSBpcyBvZnRlbiBwcm9ibGVtYXRpYyB3aGVuIHRoZSBkcml2ZXIgaXMKKyAgIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbCBJIHJlY29tbWVuZCBwb3N0cG9uaW5nIGNhbGxpbmcgdGhpcyBmdW5jdGlvbgorICAgdW50aWwgdGhlIGZpcnN0IG9wZW4gb2YgdGhlIHZpZGVvIGRldmljZS4gQW5vdGhlciByZWFzb24gZm9yCisgICBwb3N0cG9uaW5nIGl0IGlzIHRoYXQgbG9hZGluZyB0aGlzIGZpcm13YXJlIHRha2VzIGEgbG9uZyB0aW1lIChzZWNvbmRzKQorICAgZHVlIHRvIHRoZSBzbG93IGkyYyBidXMgc3BlZWQuIFNvIGl0IHdpbGwgc3BlZWQgdXAgdGhlIGJvb3QgcHJvY2VzcyBpZgorICAgeW91IGNhbiBhdm9pZCBsb2FkaW5nIHRoZSBmdyBhcyBsb25nIGFzIHRoZSB2aWRlbyBkZXZpY2UgaXNuJ3QgdXNlZC4gKi8KKwogZW51bSBjeDI1ODQwX3ZpZGVvX2lucHV0IHsKIAkvKiBDb21wb3NpdGUgdmlkZW8gaW5wdXRzIEluMS1JbjggKi8KIAlDWDI1ODQwX0NPTVBPU0lURTEgPSAxLApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaCBiL2luY2x1ZGUvbWVkaWEvaXItY29tbW9uLmgKaW5kZXggNWJmMmVhMC4uN2I1YjkxZiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9pci1jb21tb24uaAorKysgYi9pbmNsdWRlL21lZGlhL2lyLWNvbW1vbi5oCkBAIC0xMTEsNiArMTExLDcgQEAKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hdmVybWVkaWFbSVJfS0VZVEFCX1NJWkVdOwogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2F2ZXJtZWRpYV9kdmJ0W0lSX0tFWVRBQl9TSVpFXTsKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hdmVybWVkaWFfbTEzNWFbSVJfS0VZVEFCX1NJWkVdOworZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2F2ZXJtZWRpYV9jYXJkYnVzW0lSX0tFWVRBQl9TSVpFXTsKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19hcGFjX3ZpZXdjb21wW0lSX0tFWVRBQl9TSVpFXTsKIGV4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19waXhlbHZpZXdbSVJfS0VZVEFCX1NJWkVdOwogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX3BpeGVsdmlld19uZXdbSVJfS0VZVEFCX1NJWkVdOwpAQCAtMTU5LDYgKzE2MCw4IEBACiBleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfbXNpX3R2YW55d2hlcmVfcGx1c1tJUl9LRVlUQUJfU0laRV07CiBleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfYXRpX3R2X3dvbmRlcl9oZF82MDBbSVJfS0VZVEFCX1NJWkVdOwogZXh0ZXJuIElSX0tFWVRBQl9UWVBFIGlyX2NvZGVzX2t3b3JsZF9wbHVzX3R2X2FuYWxvZ1tJUl9LRVlUQUJfU0laRV07CitleHRlcm4gSVJfS0VZVEFCX1RZUEUgaXJfY29kZXNfa2Fpb215W0lSX0tFWVRBQl9TSVpFXTsKK2V4dGVybiBJUl9LRVlUQUJfVFlQRSBpcl9jb2Rlc19kbTExMDVfbmVjW0lSX0tFWVRBQl9TSVpFXTsKICNlbmRpZgogCiAvKgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9pci1rYmQtaTJjLmggYi9pbmNsdWRlL21lZGlhL2lyLWtiZC1pMmMuaAppbmRleCAwMGZhNTdlLi4wNzk2M2Q3IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL2lyLWtiZC1pMmMuaAorKysgYi9pbmNsdWRlL21lZGlhL2lyLWtiZC1pMmMuaApAQCAtMTQsOCArMTQsNyBAQAogCS8qIFVzZWQgdG8gYXZvaWQgZmFzdCByZXBlYXRpbmcgKi8KIAl1bnNpZ25lZCBjaGFyICAgICAgICAgIG9sZDsKIAotCXN0cnVjdCB3b3JrX3N0cnVjdCAgICAgd29yazsKLQlzdHJ1Y3QgdGltZXJfbGlzdCAgICAgIHRpbWVyOworCXN0cnVjdCBkZWxheWVkX3dvcmsgICAgd29yazsKIAljaGFyICAgICAgICAgICAgICAgICAgIHBoeXNbMzJdOwogCWludCAgICAgICAgICAgICAgICAgICAgKCpnZXRfa2V5KShzdHJ1Y3QgSVJfaTJjKiwgdTMyKiwgdTMyKik7CiB9OwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS9vdjc3MnguaCBiL2luY2x1ZGUvbWVkaWEvb3Y3NzJ4LmgKaW5kZXggZTM5MWQ1NS4uNTdkYjQ4ZCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9vdjc3MnguaAorKysgYi9pbmNsdWRlL21lZGlhL292NzcyeC5oCkBAIC0xMyw4ICsxMywxMyBAQAogCiAjaW5jbHVkZSA8bWVkaWEvc29jX2NhbWVyYS5oPgogCisvKiBmb3IgZmxhZ3MgKi8KKyNkZWZpbmUgT1Y3NzJYX0ZMQUdfVkZMSVAgICAgIDB4MDAwMDAwMDEgLyogVmVydGljYWwgZmxpcCBpbWFnZSAqLworI2RlZmluZSBPVjc3MlhfRkxBR19IRkxJUCAgICAgMHgwMDAwMDAwMiAvKiBIb3Jpem9udGFsIGZsaXAgaW1hZ2UgKi8KKwogc3RydWN0IG92NzcyeF9jYW1lcmFfaW5mbyB7CiAJdW5zaWduZWQgbG9uZyAgICAgICAgICBidXN3aWR0aDsKKwl1bnNpZ25lZCBsb25nICAgICAgICAgIGZsYWdzOwogCXN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgbGluazsKIH07CiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc2FhNzE0Ni5oIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2LmgKaW5kZXggYzVhNmUyMi4uZmZmNDIzNSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zYWE3MTQ2LmgKQEAgLTEzLDYgKzEzLDcgQEAKICNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KICNpbmNsdWRlIDxsaW51eC9tdXRleC5oPgogI2luY2x1ZGUgPGxpbnV4L3NjYXR0ZXJsaXN0Lmg+CisjaW5jbHVkZSA8bWVkaWEvdjRsMi1kZXZpY2UuaD4KIAogI2luY2x1ZGUgPGxpbnV4L3ZtYWxsb2MuaD4JLyogZm9yIHZtYWxsb2MoKSAqLwogI2luY2x1ZGUgPGxpbnV4L21tLmg+CQkvKiBmb3Igdm1hbGxvY190b19wYWdlKCkgKi8KQEAgLTExMCw2ICsxMTEsOCBAQAogCiAJc3RydWN0IGxpc3RfaGVhZAkJaXRlbTsKIAorCXN0cnVjdCB2NGwyX2RldmljZSAJCXY0bDJfZGV2OworCiAJLyogZGlmZmVyZW50IGRldmljZSBsb2NrcyAqLwogCXNwaW5sb2NrX3QJCQlzbG9jazsKIAlzdHJ1Y3QgbXV0ZXgJCQlsb2NrOwpAQCAtMTQ1LDYgKzE0OCwxMSBAQAogCXN0cnVjdCBzYWE3MTQ2X2RtYQkJZF9ycHMxOwogfTsKIAorc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKnRvX3NhYTcxNDZfZGV2KHN0cnVjdCB2NGwyX2RldmljZSAqdjRsMl9kZXYpCit7CisJcmV0dXJuIGNvbnRhaW5lcl9vZih2NGwyX2Rldiwgc3RydWN0IHNhYTcxNDZfZGV2LCB2NGwyX2Rldik7Cit9CisKIC8qIGZyb20gc2FhNzE0Nl9pMmMuYyAqLwogaW50IHNhYTcxNDZfaTJjX2FkYXB0ZXJfcHJlcGFyZShzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKmRldiwgc3RydWN0IGkyY19hZGFwdGVyICppMmNfYWRhcHRlciwgdTMyIGJpdHJhdGUpOwogCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3NhYTcxNDZfdnYuaCBiL2luY2x1ZGUvbWVkaWEvc2FhNzE0Nl92di5oCmluZGV4IGM4ZDBiMjMuLmVlZDVmY2MgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvc2FhNzE0Nl92di5oCisrKyBiL2luY2x1ZGUvbWVkaWEvc2FhNzE0Nl92di5oCkBAIC0xNTAsMTYgKzE1MCw2IEBACiAJdW5zaWduZWQgaW50IHJlc291cmNlczsJLyogcmVzb3VyY2UgbWFuYWdlbWVudCBmb3IgZGV2aWNlICovCiB9OwogCi0jZGVmaW5lIFNBQTcxNDZfRVhDTFVTSVZFCTB4MQotI2RlZmluZSBTQUE3MTQ2X0JFRk9SRQkJMHgyCi0jZGVmaW5lIFNBQTcxNDZfQUZURVIJCTB4NAotCi1zdHJ1Y3Qgc2FhNzE0Nl9leHRlbnNpb25faW9jdGxzCi17Ci0JdW5zaWduZWQgaW50CWNtZDsKLQlpbnQJCWZsYWdzOwotfTsKLQogLyogZmxhZ3MgKi8KICNkZWZpbmUgU0FBNzE0Nl9VU0VfUE9SVF9CX0ZPUl9WQkkJMHgyICAgICAvKiB1c2UgaW5wdXQgcG9ydCBiIGZvciB2YmkgaGFyZHdhcmUgYnVnIHdvcmthcm91bmQgKi8KIApAQCAtMTc2LDggKzE2NiwxMCBAQAogCWludCBudW1fc3RkczsKIAlpbnQgKCpzdGRfY2FsbGJhY2spKHN0cnVjdCBzYWE3MTQ2X2RldiosIHN0cnVjdCBzYWE3MTQ2X3N0YW5kYXJkICopOwogCi0Jc3RydWN0IHNhYTcxNDZfZXh0ZW5zaW9uX2lvY3RscyAqaW9jdGxzOwotCWxvbmcgKCppb2N0bCkoc3RydWN0IHNhYTcxNDZfZmggKiwgdW5zaWduZWQgaW50IGNtZCwgdm9pZCAqYXJnKTsKKwkvKiB0aGUgZXh0ZW5zaW9uIGNhbiBvdmVycmlkZSB0aGlzICovCisJc3RydWN0IHY0bDJfaW9jdGxfb3BzIG9wczsKKwkvKiBwb2ludGVyIHRvIHRoZSBzYWE3MTQ2IGNvcmUgb3BzICovCisJY29uc3Qgc3RydWN0IHY0bDJfaW9jdGxfb3BzICpjb3JlX29wczsKIAogCXN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyB2YmlfZm9wczsKIH07CkBAIC0yMTMsNiArMjA1LDcgQEAKIHZvaWQgc2FhNzE0Nl9zZXRfZ3BpbyhzdHJ1Y3Qgc2FhNzE0Nl9kZXYgKnNhYSwgdTggcGluLCB1OCBkYXRhKTsKIAogLyogZnJvbSBzYWE3MTQ2X3ZpZGVvLmMgKi8KK2V4dGVybiBjb25zdCBzdHJ1Y3QgdjRsMl9pb2N0bF9vcHMgc2FhNzE0Nl92aWRlb19pb2N0bF9vcHM7CiBleHRlcm4gc3RydWN0IHNhYTcxNDZfdXNlX29wcyBzYWE3MTQ2X3ZpZGVvX3VvcHM7CiBpbnQgc2FhNzE0Nl9zdGFydF9wcmV2aWV3KHN0cnVjdCBzYWE3MTQ2X2ZoICpmaCk7CiBpbnQgc2FhNzE0Nl9zdG9wX3ByZXZpZXcoc3RydWN0IHNhYTcxNDZfZmggKmZoKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc2hfbW9iaWxlX2NldS5oIGIvaW5jbHVkZS9tZWRpYS9zaF9tb2JpbGVfY2V1LmgKaW5kZXggYjVkYmVmZS4uMGYzNTI0YyAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zaF9tb2JpbGVfY2V1LmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zaF9tb2JpbGVfY2V1LmgKQEAgLTEsMTAgKzEsMTEgQEAKICNpZm5kZWYgX19BU01fU0hfTU9CSUxFX0NFVV9IX18KICNkZWZpbmUgX19BU01fU0hfTU9CSUxFX0NFVV9IX18KIAotI2luY2x1ZGUgPG1lZGlhL3NvY19jYW1lcmEuaD4KKyNkZWZpbmUgU0hfQ0VVX0ZMQUdfVVNFXzhCSVRfQlVTCSgxIDw8IDApIC8qIHVzZSAgOGJpdCBidXMgd2lkdGggKi8KKyNkZWZpbmUgU0hfQ0VVX0ZMQUdfVVNFXzE2QklUX0JVUwkoMSA8PCAxKSAvKiB1c2UgMTZiaXQgYnVzIHdpZHRoICovCiAKIHN0cnVjdCBzaF9tb2JpbGVfY2V1X2luZm8gewotCXVuc2lnbmVkIGxvbmcgZmxhZ3M7IC8qIFNPQ0FNXy4uLiAqLworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiB9OwogCiAjZW5kaWYgLyogX19BU01fU0hfTU9CSUxFX0NFVV9IX18gKi8KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvc29jX2NhbWVyYS5oIGIvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKaW5kZXggNzQ0MGQ5Mi4uMzcwMTM2OCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKKysrIGIvaW5jbHVkZS9tZWRpYS9zb2NfY2FtZXJhLmgKQEAgLTQ1LDYgKzQ1LDcgQEAKIAlpbnQgbnVtX2Zvcm1hdHM7CiAJc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICp1c2VyX2Zvcm1hdHM7CiAJaW50IG51bV91c2VyX2Zvcm1hdHM7CisJZW51bSB2NGwyX2ZpZWxkIGZpZWxkOwkJLyogUHJlc2VydmUgZmllbGQgb3ZlciBjbG9zZSgpICovCiAJc3RydWN0IG1vZHVsZSAqb3duZXI7CiAJdm9pZCAqaG9zdF9wcml2OwkJLyogUGVyLWRldmljZSBob3N0IHByaXZhdGUgZGF0YSAqLwogCS8qIHNvY19jYW1lcmEuYyBwcml2YXRlIGNvdW50LiBPbmx5IGFjY2Vzc2VkIHdpdGggLnZpZGVvX2xvY2sgaGVsZCAqLwpAQCAtNzQsNyArNzUsOCBAQAogCWludCAoKnJlc3VtZSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwogCWludCAoKmdldF9mb3JtYXRzKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgaW50LAogCQkJICAgc3RydWN0IHNvY19jYW1lcmFfZm9ybWF0X3hsYXRlICopOwotCWludCAoKnNldF9mbXQpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBfX3UzMiwgc3RydWN0IHY0bDJfcmVjdCAqKTsKKwlpbnQgKCpzZXRfY3JvcCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX3JlY3QgKik7CisJaW50ICgqc2V0X2ZtdCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX2Zvcm1hdCAqKTsKIAlpbnQgKCp0cnlfZm10KShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgc3RydWN0IHY0bDJfZm9ybWF0ICopOwogCXZvaWQgKCppbml0X3ZpZGVvYnVmKShzdHJ1Y3QgdmlkZW9idWZfcXVldWUgKiwKIAkJCSAgICAgIHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKTsKQEAgLTkzLDEzICs5NSwxOCBAQAogc3RydWN0IHNvY19jYW1lcmFfbGluayB7CiAJLyogQ2FtZXJhIGJ1cyBpZCwgdXNlZCB0byBtYXRjaCBhIGNhbWVyYSBhbmQgYSBidXMgKi8KIAlpbnQgYnVzX2lkOwotCS8qIEdQSU8gbnVtYmVyIHRvIHN3aXRjaCBiZXR3ZWVuIDggYW5kIDEwIGJpdCBtb2RlcyAqLwotCXVuc2lnbmVkIGludCBncGlvOwogCS8qIFBlciBjYW1lcmEgU09DQU1fU0VOU09SXyogYnVzIGZsYWdzICovCiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAkvKiBPcHRpb25hbCBjYWxsYmFja3MgdG8gcG93ZXIgb24gb3Igb2ZmIGFuZCByZXNldCB0aGUgc2Vuc29yICovCiAJaW50ICgqcG93ZXIpKHN0cnVjdCBkZXZpY2UgKiwgaW50KTsKIAlpbnQgKCpyZXNldCkoc3RydWN0IGRldmljZSAqKTsKKwkvKgorCSAqIHNvbWUgcGxhdGZvcm1zIG1heSBzdXBwb3J0IGRpZmZlcmVudCBkYXRhIHdpZHRocyB0aGFuIHRoZSBzZW5zb3JzCisJICogbmF0aXZlIG9uZXMgZHVlIHRvIGRpZmZlcmVudCBkYXRhIGxpbmUgcm91dGluZy4gTGV0IHRoZSBib2FyZCBjb2RlCisJICogb3ZlcndyaXRlIHRoZSB3aWR0aCBmbGFncy4KKwkgKi8KKwlpbnQgKCpzZXRfYnVzX3BhcmFtKShzdHJ1Y3Qgc29jX2NhbWVyYV9saW5rICosIHVuc2lnbmVkIGxvbmcgZmxhZ3MpOworCXVuc2lnbmVkIGxvbmcgKCpxdWVyeV9idXNfcGFyYW0pKHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKik7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqdG9fc29jX2NhbWVyYV9kZXYoc3RydWN0IGRldmljZSAqZGV2KQpAQCAtMTU5LDcgKzE2Niw4IEBACiAJaW50ICgqcmVsZWFzZSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICopOwogCWludCAoKnN0YXJ0X2NhcHR1cmUpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKTsKIAlpbnQgKCpzdG9wX2NhcHR1cmUpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqKTsKLQlpbnQgKCpzZXRfZm10KShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKiwgX191MzIsIHN0cnVjdCB2NGwyX3JlY3QgKik7CisJaW50ICgqc2V0X2Nyb3ApKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9yZWN0ICopOworCWludCAoKnNldF9mbXQpKHN0cnVjdCBzb2NfY2FtZXJhX2RldmljZSAqLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKik7CiAJaW50ICgqdHJ5X2ZtdCkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHN0cnVjdCB2NGwyX2Zvcm1hdCAqKTsKIAl1bnNpZ25lZCBsb25nICgqcXVlcnlfYnVzX3BhcmFtKShzdHJ1Y3Qgc29jX2NhbWVyYV9kZXZpY2UgKik7CiAJaW50ICgqc2V0X2J1c19wYXJhbSkoc3RydWN0IHNvY19jYW1lcmFfZGV2aWNlICosIHVuc2lnbmVkIGxvbmcpOwpAQCAtMjM5LDE1ICsyNDcsMTkgQEAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBzb2NfY2FtZXJhX2J1c19wYXJhbV9jb21wYXRpYmxlKAogCQkJdW5zaWduZWQgbG9uZyBjYW1lcmFfZmxhZ3MsIHVuc2lnbmVkIGxvbmcgYnVzX2ZsYWdzKQogewotCXVuc2lnbmVkIGxvbmcgY29tbW9uX2ZsYWdzLCBoc3luYywgdnN5bmMsIHBjbGs7CisJdW5zaWduZWQgbG9uZyBjb21tb25fZmxhZ3MsIGhzeW5jLCB2c3luYywgcGNsaywgZGF0YSwgYnVzd2lkdGgsIG1vZGU7CiAKIAljb21tb25fZmxhZ3MgPSBjYW1lcmFfZmxhZ3MgJiBidXNfZmxhZ3M7CiAKIAloc3luYyA9IGNvbW1vbl9mbGFncyAmIChTT0NBTV9IU1lOQ19BQ1RJVkVfSElHSCB8IFNPQ0FNX0hTWU5DX0FDVElWRV9MT1cpOwogCXZzeW5jID0gY29tbW9uX2ZsYWdzICYgKFNPQ0FNX1ZTWU5DX0FDVElWRV9ISUdIIHwgU09DQU1fVlNZTkNfQUNUSVZFX0xPVyk7CiAJcGNsayA9IGNvbW1vbl9mbGFncyAmIChTT0NBTV9QQ0xLX1NBTVBMRV9SSVNJTkcgfCBTT0NBTV9QQ0xLX1NBTVBMRV9GQUxMSU5HKTsKKwlkYXRhID0gY29tbW9uX2ZsYWdzICYgKFNPQ0FNX0RBVEFfQUNUSVZFX0hJR0ggfCBTT0NBTV9EQVRBX0FDVElWRV9MT1cpOworCW1vZGUgPSBjb21tb25fZmxhZ3MgJiAoU09DQU1fTUFTVEVSIHwgU09DQU1fU0xBVkUpOworCWJ1c3dpZHRoID0gY29tbW9uX2ZsYWdzICYgU09DQU1fREFUQVdJRFRIX01BU0s7CiAKLQlyZXR1cm4gKCFoc3luYyB8fCAhdnN5bmMgfHwgIXBjbGspID8gMCA6IGNvbW1vbl9mbGFnczsKKwlyZXR1cm4gKCFoc3luYyB8fCAhdnN5bmMgfHwgIXBjbGsgfHwgIWRhdGEgfHwgIW1vZGUgfHwgIWJ1c3dpZHRoKSA/IDAgOgorCQljb21tb25fZmxhZ3M7CiB9CiAKIGV4dGVybiB1bnNpZ25lZCBsb25nIHNvY19jYW1lcmFfYXBwbHlfc2Vuc29yX2ZsYWdzKHN0cnVjdCBzb2NfY2FtZXJhX2xpbmsgKmljbCwKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jaGlwLWlkZW50LmggYi9pbmNsdWRlL21lZGlhL3Y0bDItY2hpcC1pZGVudC5oCmluZGV4IDlhYWY2NTIuLjFiZTQ2MWEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jaGlwLWlkZW50LmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWNoaXAtaWRlbnQuaApAQCAtMzcsMTAgKzM3LDggQEAKIAkvKiBtb2R1bGUgc2FhNzExMDoganVzdCBpZGVudCAxMDAgKi8KIAlWNEwyX0lERU5UX1NBQTcxMTAgPSAxMDAsCiAKLQkvKiBtb2R1bGUgc2FhNzExMToganVzdCBpZGVudCAxMDEgKi8KKwkvKiBtb2R1bGUgc2FhNzExNTogcmVzZXJ2ZWQgcmFuZ2UgMTAxLTE0OSAqLwogCVY0TDJfSURFTlRfU0FBNzExMSA9IDEwMSwKLQotCS8qIG1vZHVsZSBzYWE3MTE1OiByZXNlcnZlZCByYW5nZSAxMDItMTQ5ICovCiAJVjRMMl9JREVOVF9TQUE3MTEzID0gMTAzLAogCVY0TDJfSURFTlRfU0FBNzExNCA9IDEwNCwKIAlWNEwyX0lERU5UX1NBQTcxMTUgPSAxMDUsCkBAIC02Myw0NSArNjEsOTcgQEAKIAlWNEwyX0lERU5UX09WNzcyMCA9IDI1MSwKIAlWNEwyX0lERU5UX09WNzcyNSA9IDI1MiwKIAotCS8qIENvbmV4YW50IE1QRUcgZW5jb2Rlci9kZWNvZGVyczogcmVzZXJ2ZWQgcmFuZ2UgNDEwLTQyMCAqLworCS8qIG1vZHVsZSBzYWE3MTQ2OiByZXNlcnZlZCByYW5nZSAzMDAtMzA5ICovCisJVjRMMl9JREVOVF9TQUE3MTQ2ID0gMzAwLAorCisJLyogQ29uZXhhbnQgTVBFRyBlbmNvZGVyL2RlY29kZXJzOiByZXNlcnZlZCByYW5nZSA0MDAtNDIwICovCisJVjRMMl9JREVOVF9DWDIzNDE4Xzg0MyA9IDQwMywgLyogSW50ZWdyYXRlZCBBL1YgRGVjb2RlciBvbiB0aGUgJzQxOCAqLwogCVY0TDJfSURFTlRfQ1gyMzQxNSA9IDQxNSwKIAlWNEwyX0lERU5UX0NYMjM0MTYgPSA0MTYsCiAJVjRMMl9JREVOVF9DWDIzNDE4ID0gNDE4LAogCisJLyogbW9kdWxlIGF1MDgyOCAqLworCVY0TDJfSURFTlRfQVUwODI4ID0gODI4LAorCisJLyogbW9kdWxlIGluZHljYW06IGp1c3QgaWRlbnQgMjAwMCAqLworCVY0TDJfSURFTlRfSU5EWUNBTSA9IDIwMDAsCisKKwkvKiBtb2R1bGUgYnQ4MTk6IHJlc2VydmVkIHJhbmdlIDgxMC04MTkgKi8KKwlWNEwyX0lERU5UX0JUODE1QSA9IDgxNSwKKwlWNEwyX0lERU5UX0JUODE3QSA9IDgxNywKKwlWNEwyX0lERU5UX0JUODE5QSA9IDgxOSwKKworCS8qIG1vZHVsZSBidDg1NjoganVzdCBpZGVudCA4NTYgKi8KKwlWNEwyX0lERU5UX0JUODU2ID0gODU2LAorCisJLyogbW9kdWxlIGJ0ODY2OiBqdXN0IGlkZW50IDg2NiAqLworCVY0TDJfSURFTlRfQlQ4NjYgPSA4NjYsCisKKwkvKiBtb2R1bGUga3MwMTI3OiByZXNlcnZlZCByYW5nZSAxMTIwLTExMjkgKi8KKwlWNEwyX0lERU5UX0tTMDEyMlMgPSAxMTIyLAorCVY0TDJfSURFTlRfS1MwMTI3ICA9IDExMjcsCisJVjRMMl9JREVOVF9LUzAxMjdCID0gMTEyOCwKKwogCS8qIG1vZHVsZSB2cDI3c21weDoganVzdCBpZGVudCAyNzAwICovCiAJVjRMMl9JREVOVF9WUDI3U01QWCA9IDI3MDAsCiAKKwkvKiBtb2R1bGUgdnB4MzIyMDogcmVzZXJ2ZWQgcmFuZ2U6IDMyMTAtMzIyOSAqLworCVY0TDJfSURFTlRfVlBYMzIxNEMgPSAzMjE0LAorCVY0TDJfSURFTlRfVlBYMzIxNkIgPSAzMjE2LAorCVY0TDJfSURFTlRfVlBYMzIyMEEgPSAzMjIwLAorCiAJLyogbW9kdWxlIHR2cDUxNTAgKi8KIAlWNEwyX0lERU5UX1RWUDUxNTAgPSA1MTUwLAogCisJLyogbW9kdWxlIHNhYTUyNDZhOiBqdXN0IGlkZW50IDUyNDYgKi8KKwlWNEwyX0lERU5UX1NBQTUyNDZBID0gNTI0NiwKKworCS8qIG1vZHVsZSBzYWE1MjQ5OiBqdXN0IGlkZW50IDUyNDkgKi8KKwlWNEwyX0lERU5UX1NBQTUyNDkgPSA1MjQ5LAorCiAJLyogbW9kdWxlIGNzNTM0NToganVzdCBpZGVudCA1MzQ1ICovCiAJVjRMMl9JREVOVF9DUzUzNDUgPSA1MzQ1LAogCisJLyogbW9kdWxlIHRlYTY0MTVjOiBqdXN0IGlkZW50IDY0MTUgKi8KKwlWNEwyX0lERU5UX1RFQTY0MTVDID0gNjQxNSwKKworCS8qIG1vZHVsZSB0ZWE2NDIwOiBqdXN0IGlkZW50IDY0MjAgKi8KKwlWNEwyX0lERU5UX1RFQTY0MjAgPSA2NDIwLAorCisJLyogbW9kdWxlIHNhYTY1ODg6IGp1c3QgaWRlbnQgNjU4OCAqLworCVY0TDJfSURFTlRfU0FBNjU4OCA9IDY1ODgsCisKIAkvKiBtb2R1bGUgc2FhNjc1MmhzOiByZXNlcnZlZCByYW5nZSA2NzUwLTY3NTkgKi8KIAlWNEwyX0lERU5UX1NBQTY3NTJIUyA9IDY3NTIsCiAJVjRMMl9JREVOVF9TQUE2NzUySFNfQUMzID0gNjc1MywKIAorCS8qIG1vZHVsZSBhZHY3MTcwOiBqdXN0IGlkZW50IDcxNzAgKi8KKwlWNEwyX0lERU5UX0FEVjcxNzAgPSA3MTcwLAorCisJLyogbW9kdWxlIGFkdjcxNzU6IGp1c3QgaWRlbnQgNzE3NSAqLworCVY0TDJfSURFTlRfQURWNzE3NSA9IDcxNzUsCisKKwkvKiBtb2R1bGUgc2FhNzE4NToganVzdCBpZGVudCA3MTg1ICovCisJVjRMMl9JREVOVF9TQUE3MTg1ID0gNzE4NSwKKworCS8qIG1vZHVsZSBzYWE3MTkxOiBqdXN0IGlkZW50IDcxOTEgKi8KKwlWNEwyX0lERU5UX1NBQTcxOTEgPSA3MTkxLAorCiAJLyogbW9kdWxlIHdtODczOToganVzdCBpZGVudCA4NzM5ICovCiAJVjRMMl9JREVOVF9XTTg3MzkgPSA4NzM5LAogCiAJLyogbW9kdWxlIHdtODc3NToganVzdCBpZGVudCA4Nzc1ICovCiAJVjRMMl9JREVOVF9XTTg3NzUgPSA4Nzc1LAogCisJLyogbW9kdWxlIHRkYTk4NDA6IGp1c3QgaWRlbnQgOTg0MCAqLworCVY0TDJfSURFTlRfVERBOTg0MCA9IDk4NDAsCisKKwkvKiBtb2R1bGUgY2FmZV9jY2ljLCBqdXN0IGlkZW50IDg4MDEgKi8KKwlWNEwyX0lERU5UX0NBRkUgPSA4ODAxLAorCiAJLyogbW9kdWxlIHR3OTkxMDoganVzdCBpZGVudCA5OTEwICovCiAJVjRMMl9JREVOVF9UVzk5MTAgPSA5OTEwLAogCi0JLyogbW9kdWxlIGNzNTMxMzJhOiBqdXN0IGlkZW50IDUzMTMyICovCi0JVjRMMl9JREVOVF9DUzUzbDMyQSA9IDUzMTMyLAotCi0JLyogbW9kdWxlIHVwZDY0MDMxYToganVzdCBpZGVudCA2NDAzMSAqLwotCVY0TDJfSURFTlRfVVBENjQwMzFBID0gNjQwMzEsCi0KLQkvKiBtb2R1bGUgdXBkNjQwODM6IGp1c3QgaWRlbnQgNjQwODMgKi8KLQlWNEwyX0lERU5UX1VQRDY0MDgzID0gNjQwODMsCi0KLQkvKiBtb2R1bGUgbTUyNzkwOiBqdXN0IGlkZW50IDUyNzkwICovCi0JVjRMMl9JREVOVF9NNTI3OTAgPSA1Mjc5MCwKLQogCS8qIG1vZHVsZSBtc3AzNDAwOiByZXNlcnZlZCByYW5nZSAzNDAwMC0zNDk5OSBhbmQgNDQwMDAtNDQ5OTkgKi8KIAlWNEwyX0lERU5UX01TUFg0WFggID0gMzQwMDAsIC8qIGdlbmVyaWMgTVNQWDRYWCBpZGVudGlmaWVyLCBvbmx5CiAJCQkJCXVzZSBpbnRlcm5hbGx5ICh0dmVlcHJvbS5jKS4gKi8KQEAgLTE3OCw2ICsyMjgsMTggQEAKIAlWNEwyX0lERU5UX01UOVYwMjJJWDdBVEMJPSA0NTAxMCwgLyogTm8gd2F5IHRvIGRldGVjdCAibm9ybWFsIiBJNzdBVHggKi8KIAlWNEwyX0lERU5UX01UOVYwMjJJWDdBVE0JPSA0NTAxNSwgLyogYW5kICJsZWFkIGZyZWUiIElBN0FUeCBjaGlwcyAqLwogCVY0TDJfSURFTlRfTVQ5VDAzMQkJPSA0NTAyMCwKKworCS8qIG1vZHVsZSBjczUzMTMyYToganVzdCBpZGVudCA1MzEzMiAqLworCVY0TDJfSURFTlRfQ1M1M2wzMkEgPSA1MzEzMiwKKworCS8qIG1vZHVsZSB1cGQ2NDAzMWE6IGp1c3QgaWRlbnQgNjQwMzEgKi8KKwlWNEwyX0lERU5UX1VQRDY0MDMxQSA9IDY0MDMxLAorCisJLyogbW9kdWxlIHVwZDY0MDgzOiBqdXN0IGlkZW50IDY0MDgzICovCisJVjRMMl9JREVOVF9VUEQ2NDA4MyA9IDY0MDgzLAorCisJLyogbW9kdWxlIG01Mjc5MDoganVzdCBpZGVudCA1Mjc5MCAqLworCVY0TDJfSURFTlRfTTUyNzkwID0gNTI3OTAsCiB9OwogCiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1jb21tb24uaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1jb21tb24uaAppbmRleCA5NWU3NGYxLi4zYTY5MDU2IDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItY29tbW9uLmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWNvbW1vbi5oCkBAIC0xMDIsMTEgKzEwMiwxNSBAQAogY29uc3QgY2hhciAqdjRsMl9jdHJsX2dldF9uYW1lKHUzMiBpZCk7CiBjb25zdCBjaGFyICoqdjRsMl9jdHJsX2dldF9tZW51KHUzMiBpZCk7CiBpbnQgdjRsMl9jdHJsX3F1ZXJ5X2ZpbGwoc3RydWN0IHY0bDJfcXVlcnljdHJsICpxY3RybCwgczMyIG1pbiwgczMyIG1heCwgczMyIHN0ZXAsIHMzMiBkZWYpOwotaW50IHY0bDJfY3RybF9xdWVyeV9maWxsX3N0ZChzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsKTsKIGludCB2NGwyX2N0cmxfcXVlcnlfbWVudShzdHJ1Y3QgdjRsMl9xdWVyeW1lbnUgKnFtZW51LAogCQlzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgKnFjdHJsLCBjb25zdCBjaGFyICoqbWVudV9pdGVtcyk7CiAjZGVmaW5lIFY0TDJfQ1RSTF9NRU5VX0lEU19FTkQgKDB4ZmZmZmZmZmYpCiBpbnQgdjRsMl9jdHJsX3F1ZXJ5X21lbnVfdmFsaWRfaXRlbXMoc3RydWN0IHY0bDJfcXVlcnltZW51ICpxbWVudSwgY29uc3QgdTMyICppZHMpOworCisvKiBOb3RlOiBjdHJsX2NsYXNzZXMgcG9pbnRzIHRvIGFuIGFycmF5IG9mIHUzMiBwb2ludGVycy4gRWFjaCB1MzIgYXJyYXkgaXMgYQorICAgMC10ZXJtaW5hdGVkIGFycmF5IG9mIGNvbnRyb2wgSURzLiBFYWNoIGFycmF5IG11c3QgYmUgc29ydGVkIGxvdyB0byBoaWdoCisgICBhbmQgYmVsb25nIHRvIHRoZSBzYW1lIGNvbnRyb2wgY2xhc3MuIFRoZSBhcnJheSBvZiB1MzIgcG9pbnRlcnMgbXVzdCBhbHNvCisgICBiZSBzb3J0ZWQsIGZyb20gbG93IGNsYXNzIElEcyB0byBoaWdoIGNsYXNzIElEcy4gKi8KIHUzMiB2NGwyX2N0cmxfbmV4dChjb25zdCB1MzIgKiBjb25zdCAqY3RybF9jbGFzc2VzLCB1MzIgaWQpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICovCkBAIC0xNDksNiArMTUzLDIxIEBACiAvKiBJbml0aWFsaXplIGFuIHY0bDJfc3ViZGV2IHdpdGggZGF0YSBmcm9tIGFuIGkyY19jbGllbnQgc3RydWN0ICovCiB2b2lkIHY0bDJfaTJjX3N1YmRldl9pbml0KHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQsCiAJCWNvbnN0IHN0cnVjdCB2NGwyX3N1YmRldl9vcHMgKm9wcyk7CisvKiBSZXR1cm4gaTJjIGNsaWVudCBhZGRyZXNzIG9mIHY0bDJfc3ViZGV2LiAqLwordW5zaWduZWQgc2hvcnQgdjRsMl9pMmNfc3ViZGV2X2FkZHIoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCk7CisKK2VudW0gdjRsMl9pMmNfdHVuZXJfdHlwZSB7CisJQUREUlNfUkFESU8sCS8qIFJhZGlvIHR1bmVyIGFkZHJlc3NlcyAqLworCUFERFJTX0RFTU9ELAkvKiBEZW1vZCB0dW5lciBhZGRyZXNzZXMgKi8KKwlBRERSU19UViwJLyogVFYgdHVuZXIgYWRkcmVzc2VzICovCisJLyogVFYgdHVuZXIgYWRkcmVzc2VzIGlmIGRlbW9kIGlzIHByZXNlbnQsIHRoaXMgZXhjbHVkZXMKKwkgICBhZGRyZXNzZXMgdXNlZCBieSB0aGUgZGVtb2R1bGF0b3IgZnJvbSB0aGUgbGlzdCBvZgorCSAgIGNhbmRpZGF0ZXMuICovCisJQUREUlNfVFZfV0lUSF9ERU1PRCwKK307CisvKiBSZXR1cm4gYSBsaXN0IG9mIEkyQyB0dW5lciBhZGRyZXNzZXMgdG8gcHJvYmUuIFVzZSBvbmx5IGlmIHRoZSB0dW5lcgorICAgYWRkcmVzc2VzIGFyZSB1bmtub3duLiAqLworY29uc3QgdW5zaWduZWQgc2hvcnQgKnY0bDJfaTJjX3R1bmVyX2FkZHJzKGVudW0gdjRsMl9pMmNfdHVuZXJfdHlwZSB0eXBlKTsKIAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAqLwogCkBAIC0yODQsNCArMzAzLDcgQEAKICAgIGEgdjRsMl9ncGlvIHN0cnVjdCBpZiBhIGRpcmVjdGlvbiBpcyBhbHNvIG5lZWRlZC4gKi8KICNkZWZpbmUgVklESU9DX0lOVF9TX0dQSU8JCV9JT1coJ2QnLCAxMTcsIHUzMikKIAorLyogR2V0IGlucHV0IHN0YXR1cy4gU2FtZSBhcyB0aGUgc3RhdHVzIGZpZWxkIGluIHRoZSB2NGwyX2lucHV0IHN0cnVjdC4gKi8KKyNkZWZpbmUgVklESU9DX0lOVF9HX0lOUFVUX1NUQVRVUwlfSU9SKCdkJywgMTE4LCB1MzIpCisKICNlbmRpZiAvKiBWNEwyX0NPTU1PTl9IXyAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLWRldi5oCmluZGV4IGUzNmZhYWIuLjIwNThkZDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXYuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItZGV2LmgKQEAgLTQwLDYgKzQwLDggQEAKIAl1bnNpZ25lZCBpbnQgKCpwb2xsKSAoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICopOwogCWxvbmcgKCppb2N0bCkgKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGludCwgdW5zaWduZWQgbG9uZyk7CiAJbG9uZyAoKnVubG9ja2VkX2lvY3RsKSAoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgaW50LCB1bnNpZ25lZCBsb25nKTsKKwl1bnNpZ25lZCBsb25nICgqZ2V0X3VubWFwcGVkX2FyZWEpIChzdHJ1Y3QgZmlsZSAqLCB1bnNpZ25lZCBsb25nLAorCQkJCXVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwogCWludCAoKm1tYXApIChzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CiAJaW50ICgqb3BlbikgKHN0cnVjdCBmaWxlICopOwogCWludCAoKnJlbGVhc2UpIChzdHJ1Y3QgZmlsZSAqKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXZpY2UuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1kZXZpY2UuaAppbmRleCA1NWU0MWFmLi4wZGQzZThlIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3Y0bDItZGV2aWNlLmgKKysrIGIvaW5jbHVkZS9tZWRpYS92NGwyLWRldmljZS5oCkBAIC0zMyw3ICszMyw5IEBACiAjZGVmaW5lIFY0TDJfREVWSUNFX05BTUVfU0laRSAoQlVTX0lEX1NJWkUgKyAxNikKIAogc3RydWN0IHY0bDJfZGV2aWNlIHsKLQkvKiBkZXYtPmRyaXZlcl9kYXRhIHBvaW50cyB0byB0aGlzIHN0cnVjdCAqLworCS8qIGRldi0+ZHJpdmVyX2RhdGEgcG9pbnRzIHRvIHRoaXMgc3RydWN0LgorCSAgIE5vdGU6IGRldiBtaWdodCBiZSBOVUxMIGlmIHRoZXJlIGlzIG5vIHBhcmVudCBkZXZpY2UKKwkgICBhcyBpcyB0aGUgY2FzZSB3aXRoIGUuZy4gSVNBIGRldmljZXMuICovCiAJc3RydWN0IGRldmljZSAqZGV2OwogCS8qIHVzZWQgdG8ga2VlcCB0cmFjayBvZiB0aGUgcmVnaXN0ZXJlZCBzdWJkZXZzICovCiAJc3RydWN0IGxpc3RfaGVhZCBzdWJkZXZzOwpAQCAtNDIsMzMgKzQ0LDQzIEBACiAJc3BpbmxvY2tfdCBsb2NrOwogCS8qIHVuaXF1ZSBkZXZpY2UgbmFtZSwgYnkgZGVmYXVsdCB0aGUgZHJpdmVyIG5hbWUgKyBidXMgSUQgKi8KIAljaGFyIG5hbWVbVjRMMl9ERVZJQ0VfTkFNRV9TSVpFXTsKKwkvKiBub3RpZnkgY2FsbGJhY2sgY2FsbGVkIGJ5IHNvbWUgc3ViLWRldmljZXMuICovCisJdm9pZCAoKm5vdGlmeSkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwKKwkJCXVuc2lnbmVkIGludCBub3RpZmljYXRpb24sIHZvaWQgKmFyZyk7CiB9OwogCi0vKiBJbml0aWFsaXplIHY0bDJfZGV2IGFuZCBtYWtlIGRldi0+ZHJpdmVyX2RhdGEgcG9pbnQgdG8gdjRsMl9kZXYgKi8KKy8qIEluaXRpYWxpemUgdjRsMl9kZXYgYW5kIG1ha2UgZGV2LT5kcml2ZXJfZGF0YSBwb2ludCB0byB2NGwyX2Rldi4KKyAgIGRldiBtYXkgYmUgTlVMTCBpbiByYXJlIGNhc2VzIChJU0EgZGV2aWNlcykuIEluIHRoYXQgY2FzZSB5b3UKKyAgIG11c3QgZmlsbCBpbiB0aGUgdjRsMl9kZXYtPm5hbWUgZmllbGQgYmVmb3JlIGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gKi8KIGludCBfX211c3RfY2hlY2sgdjRsMl9kZXZpY2VfcmVnaXN0ZXIoc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KTsKLS8qIFNldCB2NGwyX2Rldi0+ZGV2LT5kcml2ZXJfZGF0YSB0byBOVUxMIGFuZCB1bnJlZ2lzdGVyIGFsbCBzdWItZGV2aWNlcyAqLworLyogU2V0IHY0bDJfZGV2LT5kZXYgdG8gTlVMTC4gQ2FsbCB3aGVuIHRoZSBVU0IgcGFyZW50IGRpc2Nvbm5lY3RzLgorICAgU2luY2UgdGhlIHBhcmVudCBkaXNhcHBlYXJzIHRoaXMgZW5zdXJlcyB0aGF0IHY0bDJfZGV2IGRvZXNuJ3QgaGF2ZSBhbgorICAgaW52YWxpZCBwYXJlbnQgcG9pbnRlci4gKi8KK3ZvaWQgdjRsMl9kZXZpY2VfZGlzY29ubmVjdChzdHJ1Y3QgdjRsMl9kZXZpY2UgKnY0bDJfZGV2KTsKKy8qIFVucmVnaXN0ZXIgYWxsIHN1Yi1kZXZpY2VzIGFuZCBhbnkgb3RoZXIgcmVzb3VyY2VzIHJlbGF0ZWQgdG8gdjRsMl9kZXYuICovCiB2b2lkIHY0bDJfZGV2aWNlX3VucmVnaXN0ZXIoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2Rldik7CiAKIC8qIFJlZ2lzdGVyIGEgc3ViZGV2IHdpdGggYSB2NGwyIGRldmljZS4gV2hpbGUgcmVnaXN0ZXJlZCB0aGUgc3ViZGV2IG1vZHVsZQogICAgaXMgbWFya2VkIGFzIGluLXVzZS4gQW4gZXJyb3IgaXMgcmV0dXJuZWQgaWYgdGhlIG1vZHVsZSBpcyBubyBsb25nZXIKICAgIGxvYWRlZCB3aGVuIHlvdSBhdHRlbXB0IHRvIHJlZ2lzdGVyIGl0LiAqLwotaW50IF9fbXVzdF9jaGVjayB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYoc3RydWN0IHY0bDJfZGV2aWNlICpkZXYsIHN0cnVjdCB2NGwyX3N1YmRldiAqc2QpOworaW50IF9fbXVzdF9jaGVjayB2NGwyX2RldmljZV9yZWdpc3Rlcl9zdWJkZXYoc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldiwKKwkJCQkJCXN0cnVjdCB2NGwyX3N1YmRldiAqc2QpOwogLyogVW5yZWdpc3RlciBhIHN1YmRldiB3aXRoIGEgdjRsMiBkZXZpY2UuIENhbiBhbHNvIGJlIGNhbGxlZCBpZiB0aGUgc3ViZGV2CiAgICB3YXNuJ3QgcmVnaXN0ZXJlZC4gSW4gdGhhdCBjYXNlIGl0IHdpbGwgZG8gbm90aGluZy4gKi8KIHZvaWQgdjRsMl9kZXZpY2VfdW5yZWdpc3Rlcl9zdWJkZXYoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCk7CiAKIC8qIEl0ZXJhdGUgb3ZlciBhbGwgc3ViZGV2cy4gKi8KLSNkZWZpbmUgdjRsMl9kZXZpY2VfZm9yX2VhY2hfc3ViZGV2KHNkLCBkZXYpCQkJCVwKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkLCAmKGRldiktPnN1YmRldnMsIGxpc3QpCisjZGVmaW5lIHY0bDJfZGV2aWNlX2Zvcl9lYWNoX3N1YmRldihzZCwgdjRsMl9kZXYpCQkJXAorCWxpc3RfZm9yX2VhY2hfZW50cnkoc2QsICYodjRsMl9kZXYpLT5zdWJkZXZzLCBsaXN0KQogCiAvKiBDYWxsIHRoZSBzcGVjaWZpZWQgY2FsbGJhY2sgZm9yIGFsbCBzdWJkZXZzIG1hdGNoaW5nIHRoZSBjb25kaXRpb24uCiAgICBJZ25vcmUgYW55IGVycm9ycy4gTm90ZSB0aGF0IHlvdSBjYW5ub3QgYWRkIG9yIGRlbGV0ZSBhIHN1YmRldgogICAgd2hpbGUgd2Fsa2luZyB0aGUgc3ViZGV2cyBsaXN0LiAqLwotI2RlZmluZSBfX3Y0bDJfZGV2aWNlX2NhbGxfc3ViZGV2cyhkZXYsIGNvbmQsIG8sIGYsIGFyZ3MuLi4pIAkJXAorI2RlZmluZSBfX3Y0bDJfZGV2aWNlX2NhbGxfc3ViZGV2cyh2NGwyX2RldiwgY29uZCwgbywgZiwgYXJncy4uLikgCVwKIAlkbyB7IAkJCQkJCQkJXAogCQlzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkOyAJCQkJXAogCQkJCQkJCQkJXAotCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkLCAmKGRldiktPnN1YmRldnMsIGxpc3QpICAgCVwKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShzZCwgJih2NGwyX2RldiktPnN1YmRldnMsIGxpc3QpICAgCVwKIAkJCWlmICgoY29uZCkgJiYgc2QtPm9wcy0+byAmJiBzZC0+b3BzLT5vLT5mKSAJXAogCQkJCXNkLT5vcHMtPm8tPmYoc2QgLCAjI2FyZ3MpOyAJCVwKIAl9IHdoaWxlICgwKQpAQCAtNzcsMTIgKzg5LDEyIEBACiAgICBJZiB0aGUgY2FsbGJhY2sgcmV0dXJucyBhbiBlcnJvciBvdGhlciB0aGFuIDAgb3IgLUVOT0lPQ1RMQ01ELCB0aGVuCiAgICByZXR1cm4gd2l0aCB0aGF0IGVycm9yIGNvZGUuIE5vdGUgdGhhdCB5b3UgY2Fubm90IGFkZCBvciBkZWxldGUgYQogICAgc3ViZGV2IHdoaWxlIHdhbGtpbmcgdGhlIHN1YmRldnMgbGlzdC4gKi8KLSNkZWZpbmUgX192NGwyX2RldmljZV9jYWxsX3N1YmRldnNfdW50aWxfZXJyKGRldiwgY29uZCwgbywgZiwgYXJncy4uLikgIFwKKyNkZWZpbmUgX192NGwyX2RldmljZV9jYWxsX3N1YmRldnNfdW50aWxfZXJyKHY0bDJfZGV2LCBjb25kLCBvLCBmLCBhcmdzLi4uKSBcCiAoeyAJCQkJCQkJCQlcCiAJc3RydWN0IHY0bDJfc3ViZGV2ICpzZDsgCQkJCQlcCiAJbG9uZyBlcnIgPSAwOyAJCQkJCQkJXAogCQkJCQkJCQkJXAotCWxpc3RfZm9yX2VhY2hfZW50cnkoc2QsICYoZGV2KS0+c3ViZGV2cywgbGlzdCkgeyAJCVwKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHNkLCAmKHY0bDJfZGV2KS0+c3ViZGV2cywgbGlzdCkgeyAJCVwKIAkJaWYgKChjb25kKSAmJiBzZC0+b3BzLT5vICYmIHNkLT5vcHMtPm8tPmYpIAkJXAogCQkJZXJyID0gc2QtPm9wcy0+by0+ZihzZCAsICMjYXJncyk7IAkJXAogCQlpZiAoZXJyICYmIGVyciAhPSAtRU5PSU9DVExDTUQpCQkJCVwKQEAgLTk0LDE2ICsxMDYsMTYgQEAKIC8qIENhbGwgdGhlIHNwZWNpZmllZCBjYWxsYmFjayBmb3IgYWxsIHN1YmRldnMgbWF0Y2hpbmcgZ3JwX2lkIChpZiAwLCB0aGVuCiAgICBtYXRjaCB0aGVtIGFsbCkuIElnbm9yZSBhbnkgZXJyb3JzLiBOb3RlIHRoYXQgeW91IGNhbm5vdCBhZGQgb3IgZGVsZXRlCiAgICBhIHN1YmRldiB3aGlsZSB3YWxraW5nIHRoZSBzdWJkZXZzIGxpc3QuICovCi0jZGVmaW5lIHY0bDJfZGV2aWNlX2NhbGxfYWxsKGRldiwgZ3JwaWQsIG8sIGYsIGFyZ3MuLi4pIAkJXAotCV9fdjRsMl9kZXZpY2VfY2FsbF9zdWJkZXZzKGRldiwgCQkJCVwKKyNkZWZpbmUgdjRsMl9kZXZpY2VfY2FsbF9hbGwodjRsMl9kZXYsIGdycGlkLCBvLCBmLCBhcmdzLi4uKSAJCVwKKwlfX3Y0bDJfZGV2aWNlX2NhbGxfc3ViZGV2cyh2NGwyX2RldiwgCQkJCVwKIAkJCSEoZ3JwaWQpIHx8IHNkLT5ncnBfaWQgPT0gKGdycGlkKSwgbywgZiAsICMjYXJncykKIAogLyogQ2FsbCB0aGUgc3BlY2lmaWVkIGNhbGxiYWNrIGZvciBhbGwgc3ViZGV2cyBtYXRjaGluZyBncnBfaWQgKGlmIDAsIHRoZW4KICAgIG1hdGNoIHRoZW0gYWxsKS4gSWYgdGhlIGNhbGxiYWNrIHJldHVybnMgYW4gZXJyb3Igb3RoZXIgdGhhbiAwIG9yCiAgICAtRU5PSU9DVExDTUQsIHRoZW4gcmV0dXJuIHdpdGggdGhhdCBlcnJvciBjb2RlLiBOb3RlIHRoYXQgeW91IGNhbm5vdAogICAgYWRkIG9yIGRlbGV0ZSBhIHN1YmRldiB3aGlsZSB3YWxraW5nIHRoZSBzdWJkZXZzIGxpc3QuICovCi0jZGVmaW5lIHY0bDJfZGV2aWNlX2NhbGxfdW50aWxfZXJyKGRldiwgZ3JwaWQsIG8sIGYsIGFyZ3MuLi4pIAkJXAotCV9fdjRsMl9kZXZpY2VfY2FsbF9zdWJkZXZzX3VudGlsX2VycihkZXYsCQkJXAorI2RlZmluZSB2NGwyX2RldmljZV9jYWxsX3VudGlsX2Vycih2NGwyX2RldiwgZ3JwaWQsIG8sIGYsIGFyZ3MuLi4pIAlcCisJX192NGwyX2RldmljZV9jYWxsX3N1YmRldnNfdW50aWxfZXJyKHY0bDJfZGV2LAkJCVwKIAkJICAgICAgICEoZ3JwaWQpIHx8IHNkLT5ncnBfaWQgPT0gKGdycGlkKSwgbywgZiAsICMjYXJncykKIAogI2VuZGlmCmRpZmYgLS1naXQgYS9pbmNsdWRlL21lZGlhL3Y0bDItaW9jdGwuaCBiL2luY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oCmluZGV4IGIwMWMwNDQuLjdhNDUyOWQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oCisrKyBiL2luY2x1ZGUvbWVkaWEvdjRsMi1pb2N0bC5oCkBAIC0xNSw2ICsxNSw3IEBACiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KICNpbmNsdWRlIDxsaW51eC9jb21waWxlci5oPiAvKiBuZWVkIF9fdXNlciAqLwogI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorI2RlZmluZSBfX01JTl9WNEwxCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNlbHNlCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYyLmg+CkBAIC0yNjcsNiArMjY4LDcgQEAKIAogLyogIFZpZGVvIHN0YW5kYXJkIGZ1bmN0aW9ucyAgKi8KIGV4dGVybiBjb25zdCBjaGFyICp2NGwyX25vcm1fdG9fbmFtZSh2NGwyX3N0ZF9pZCBpZCk7CitleHRlcm4gdm9pZCB2NGwyX3ZpZGVvX3N0ZF9mcmFtZV9wZXJpb2QoaW50IGlkLCBzdHJ1Y3QgdjRsMl9mcmFjdCAqZnJhbWVwZXJpb2QpOwogZXh0ZXJuIGludCB2NGwyX3ZpZGVvX3N0ZF9jb25zdHJ1Y3Qoc3RydWN0IHY0bDJfc3RhbmRhcmQgKnZzLAogCQkJCSAgICBpbnQgaWQsIGNvbnN0IGNoYXIgKm5hbWUpOwogLyogUHJpbnRzIHRoZSBpb2N0bCBpbiBhIGh1bWFuLXJlYWRhYmxlIGZvcm1hdCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92NGwyLXN1YmRldi5oIGIvaW5jbHVkZS9tZWRpYS92NGwyLXN1YmRldi5oCmluZGV4IDM3YjA5ZTUuLjFkMTgxYjQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbWVkaWEvdjRsMi1zdWJkZXYuaAorKysgYi9pbmNsdWRlL21lZGlhL3Y0bDItc3ViZGV2LmgKQEAgLTc4LDYgKzc4LDkgQEAKIAlpbnQgKCpxdWVyeWN0cmwpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX3F1ZXJ5Y3RybCAqcWMpOwogCWludCAoKmdfY3RybCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCk7CiAJaW50ICgqc19jdHJsKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9jb250cm9sICpjdHJsKTsKKwlpbnQgKCpnX2V4dF9jdHJscykoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZXh0X2NvbnRyb2xzICpjdHJscyk7CisJaW50ICgqc19leHRfY3RybHMpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3RybHMpOworCWludCAoKnRyeV9leHRfY3RybHMpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2V4dF9jb250cm9scyAqY3RybHMpOwogCWludCAoKnF1ZXJ5bWVudSkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfcXVlcnltZW51ICpxbSk7CiAJbG9uZyAoKmlvY3RsKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1bnNpZ25lZCBpbnQgY21kLCB2b2lkICphcmcpOwogI2lmZGVmIENPTkZJR19WSURFT19BRFZfREVCVUcKQEAgLTExMiw5ICsxMTUsMTcgQEAKIAlpbnQgKCpnX3ZiaV9kYXRhKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2RhdGEgKnZiaV9kYXRhKTsKIAlpbnQgKCpnX3NsaWNlZF92YmlfY2FwKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9zbGljZWRfdmJpX2NhcCAqY2FwKTsKIAlpbnQgKCpzX3N0ZF9vdXRwdXQpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkIHN0ZCk7CisJaW50ICgqcXVlcnlzdGQpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHY0bDJfc3RkX2lkICpzdGQpOworCWludCAoKmdfaW5wdXRfc3RhdHVzKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCB1MzIgKnN0YXR1cyk7CiAJaW50ICgqc19zdHJlYW0pKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIGludCBlbmFibGUpOwotCWludCAoKnNfZm10KShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCk7CisJaW50ICgqZW51bV9mbXQpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2ZtdGRlc2MgKmZtdGRlc2MpOwogCWludCAoKmdfZm10KShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCk7CisJaW50ICgqdHJ5X2ZtdCkoc3RydWN0IHY0bDJfc3ViZGV2ICpzZCwgc3RydWN0IHY0bDJfZm9ybWF0ICpmbXQpOworCWludCAoKnNfZm10KShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mb3JtYXQgKmZtdCk7CisJaW50ICgqZ19wYXJtKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJhbSk7CisJaW50ICgqc19wYXJtKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9zdHJlYW1wYXJtICpwYXJhbSk7CisJaW50ICgqZW51bV9mcmFtZXNpemVzKShzdHJ1Y3QgdjRsMl9zdWJkZXYgKnNkLCBzdHJ1Y3QgdjRsMl9mcm1zaXplZW51bSAqZnNpemUpOworCWludCAoKmVudW1fZnJhbWVpbnRlcnZhbHMpKHN0cnVjdCB2NGwyX3N1YmRldiAqc2QsIHN0cnVjdCB2NGwyX2ZybWl2YWxlbnVtICpmaXZhbCk7CiB9OwogCiBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzIHsKQEAgLTEzMiw3ICsxNDMsNyBAQAogc3RydWN0IHY0bDJfc3ViZGV2IHsKIAlzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7CiAJc3RydWN0IG1vZHVsZSAqb3duZXI7Ci0Jc3RydWN0IHY0bDJfZGV2aWNlICpkZXY7CisJc3RydWN0IHY0bDJfZGV2aWNlICp2NGwyX2RldjsKIAljb25zdCBzdHJ1Y3QgdjRsMl9zdWJkZXZfb3BzICpvcHM7CiAJLyogbmFtZSBtdXN0IGJlIHVuaXF1ZSAqLwogCWNoYXIgbmFtZVtWNEwyX1NVQkRFVl9OQU1FX1NJWkVdOwpAQCAtMTcxLDcgKzE4Miw3IEBACiAJLyogb3BzLT5jb3JlIE1VU1QgYmUgc2V0ICovCiAJQlVHX09OKCFvcHMgfHwgIW9wcy0+Y29yZSk7CiAJc2QtPm9wcyA9IG9wczsKLQlzZC0+ZGV2ID0gTlVMTDsKKwlzZC0+djRsMl9kZXYgPSBOVUxMOwogCXNkLT5uYW1lWzBdID0gJ1wwJzsKIAlzZC0+Z3JwX2lkID0gMDsKIAlzZC0+cHJpdiA9IE5VTEw7CkBAIC0xODYsNCArMTk3LDkgQEAKIAkoIShzZCkgPyAtRU5PREVWIDogKCgoc2QpICYmIChzZCktPm9wcy0+byAmJiAoc2QpLT5vcHMtPm8tPmYpID8JXAogCQkoc2QpLT5vcHMtPm8tPmYoKHNkKSAsICMjYXJncykgOiAtRU5PSU9DVExDTUQpKQogCisvKiBTZW5kIGEgbm90aWZpY2F0aW9uIHRvIHY0bDJfZGV2aWNlLiAqLworI2RlZmluZSB2NGwyX3N1YmRldl9ub3RpZnkoc2QsIG5vdGlmaWNhdGlvbiwgYXJnKQkJCSAgIFwKKwkoKCEoc2QpIHx8ICEoc2QpLT52NGwyX2RldiB8fCAhKHNkKS0+djRsMl9kZXYtPm5vdGlmeSkgPyAtRU5PREVWIDogXAorCSAoc2QpLT52NGwyX2Rldi0+bm90aWZ5KChzZCksIChub3RpZmljYXRpb24pLCAoYXJnKSkpCisKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9tZWRpYS92aWRlb2J1Zi1jb3JlLmggYi9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWNvcmUuaAppbmRleCA4NzRmMTM0Li4xYzU5NDZjIDEwMDY0NAotLS0gYS9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWNvcmUuaAorKysgYi9pbmNsdWRlL21lZGlhL3ZpZGVvYnVmLWNvcmUuaApAQCAtMTgsNiArMTgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgvcG9sbC5oPgogI2lmZGVmIENPTkZJR19WSURFT19WNEwxX0NPTVBBVAorI2RlZmluZSBfX01JTl9WNEwxCiAjaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KICNlbmRpZgogI2luY2x1ZGUgPGxpbnV4L3ZpZGVvZGV2Mi5oPgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9zb3VuZC90ZWE1NzV4LXR1bmVyLmggYi9pbmNsdWRlL3NvdW5kL3RlYTU3NXgtdHVuZXIuaAppbmRleCA0MjY4OTllLi41NzE4YTAyIDEwMDY0NAotLS0gYS9pbmNsdWRlL3NvdW5kL3RlYTU3NXgtdHVuZXIuaAorKysgYi9pbmNsdWRlL3NvdW5kL3RlYTU3NXgtdHVuZXIuaApAQCAtMjIsOCArMjIsOSBAQAogICoKICAqLwogCi0jaW5jbHVkZSA8bGludXgvdmlkZW9kZXYuaD4KKyNpbmNsdWRlIDxsaW51eC92aWRlb2RldjIuaD4KICNpbmNsdWRlIDxtZWRpYS92NGwyLWRldi5oPgorI2luY2x1ZGUgPG1lZGlhL3Y0bDItaW9jdGwuaD4KIAogc3RydWN0IHNuZF90ZWE1NzV4OwogCkBAIC0zNSwxMSArMzYsMTAgQEAKIAogc3RydWN0IHNuZF90ZWE1NzV4IHsKIAlzdHJ1Y3Qgc25kX2NhcmQgKmNhcmQ7Ci0Jc3RydWN0IHZpZGVvX2RldmljZSB2ZDsJCS8qIHZpZGVvIGRldmljZSAqLwotCXN0cnVjdCB2NGwyX2ZpbGVfb3BlcmF0aW9ucyBmb3BzOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnZkOwkvKiB2aWRlbyBkZXZpY2UgKi8KIAlpbnQgZGV2X25yOwkJCS8qIHJlcXVlc3RlZCBkZXZpY2UgbnVtYmVyICsgMSAqLwotCWludCB2ZF9yZWdpc3RlcmVkOwkJLyogdmlkZW8gZGV2aWNlIGlzIHJlZ2lzdGVyZWQgKi8KIAlpbnQgdGVhNTc1OTsJCQkvKiA1NzU5IGNoaXAgaXMgcHJlc2VudCAqLworCWludCBtdXRlOwkJCS8qIERldmljZSBpcyBtdXRlZD8gKi8KIAl1bnNpZ25lZCBpbnQgZnJlcV9maXh1cDsJLyogY3J5c3RhbCBvbmJvYXJkICovCiAJdW5zaWduZWQgaW50IHZhbDsJCS8qIGh3IHZhbHVlICovCiAJdW5zaWduZWQgbG9uZyBmcmVxOwkJLyogZnJlcXVlbmN5ICovCmRpZmYgLS1naXQgYS9rZXJuZWwvaXJxL01ha2VmaWxlIGIva2VybmVsL2lycS9NYWtlZmlsZQppbmRleCA0ZGQ1YjFlLi4zMzk0ZjhmIDEwMDY0NAotLS0gYS9rZXJuZWwvaXJxL01ha2VmaWxlCisrKyBiL2tlcm5lbC9pcnEvTWFrZWZpbGUKQEAgLTQsMyArNCw0IEBACiBvYmotJChDT05GSUdfUFJPQ19GUykgKz0gcHJvYy5vCiBvYmotJChDT05GSUdfR0VORVJJQ19QRU5ESU5HX0lSUSkgKz0gbWlncmF0aW9uLm8KIG9iai0kKENPTkZJR19OVU1BX01JR1JBVEVfSVJRX0RFU0MpICs9IG51bWFfbWlncmF0ZS5vCitvYmotJChDT05GSUdfUE1fU0xFRVApICs9IHBtLm8KZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmggYi9rZXJuZWwvaXJxL2ludGVybmFscy5oCmluZGV4IGVlMWFhOWYuLjAxY2UyMGUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvaW50ZXJuYWxzLmgKKysrIGIva2VybmVsL2lycS9pbnRlcm5hbHMuaApAQCAtMTIsNiArMTIsOCBAQAogCiBleHRlcm4gaW50IF9faXJxX3NldF90cmlnZ2VyKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgdW5zaWduZWQgaW50IGlycSwKIAkJdW5zaWduZWQgbG9uZyBmbGFncyk7CitleHRlcm4gdm9pZCBfX2Rpc2FibGVfaXJxKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgdW5zaWduZWQgaW50IGlycSwgYm9vbCBzdXNwKTsKK2V4dGVybiB2b2lkIF9fZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHVuc2lnbmVkIGludCBpcnEsIGJvb2wgcmVzdW1lKTsKIAogZXh0ZXJuIHN0cnVjdCBsb2NrX2NsYXNzX2tleSBpcnFfZGVzY19sb2NrX2NsYXNzOwogZXh0ZXJuIHZvaWQgaW5pdF9rc3RhdF9pcnFzKHN0cnVjdCBpcnFfZGVzYyAqZGVzYywgaW50IGNwdSwgaW50IG5yKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvbWFuYWdlLmMgYi9rZXJuZWwvaXJxL21hbmFnZS5jCmluZGV4IDY0NThlOTkuLjE1MTZhYjcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9pcnEvbWFuYWdlLmMKKysrIGIva2VybmVsL2lycS9tYW5hZ2UuYwpAQCAtMTYyLDYgKzE2MiwyMCBAQAogfQogI2VuZGlmCiAKK3ZvaWQgX19kaXNhYmxlX2lycShzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHVuc2lnbmVkIGludCBpcnEsIGJvb2wgc3VzcGVuZCkKK3sKKwlpZiAoc3VzcGVuZCkgeworCQlpZiAoIWRlc2MtPmFjdGlvbiB8fCAoZGVzYy0+YWN0aW9uLT5mbGFncyAmIElSUUZfVElNRVIpKQorCQkJcmV0dXJuOworCQlkZXNjLT5zdGF0dXMgfD0gSVJRX1NVU1BFTkRFRDsKKwl9CisKKwlpZiAoIWRlc2MtPmRlcHRoKyspIHsKKwkJZGVzYy0+c3RhdHVzIHw9IElSUV9ESVNBQkxFRDsKKwkJZGVzYy0+Y2hpcC0+ZGlzYWJsZShpcnEpOworCX0KK30KKwogLyoqCiAgKglkaXNhYmxlX2lycV9ub3N5bmMgLSBkaXNhYmxlIGFuIGlycSB3aXRob3V0IHdhaXRpbmcKICAqCUBpcnE6IEludGVycnVwdCB0byBkaXNhYmxlCkBAIC0xODIsMTAgKzE5Niw3IEBACiAJCXJldHVybjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JaWYgKCFkZXNjLT5kZXB0aCsrKSB7Ci0JCWRlc2MtPnN0YXR1cyB8PSBJUlFfRElTQUJMRUQ7Ci0JCWRlc2MtPmNoaXAtPmRpc2FibGUoaXJxKTsKLQl9CisJX19kaXNhYmxlX2lycShkZXNjLCBpcnEsIGZhbHNlKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MKGRpc2FibGVfaXJxX25vc3luYyk7CkBAIC0yMTUsMTUgKzIyNiwyMSBAQAogfQogRVhQT1JUX1NZTUJPTChkaXNhYmxlX2lycSk7CiAKLXN0YXRpYyB2b2lkIF9fZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHVuc2lnbmVkIGludCBpcnEpCit2b2lkIF9fZW5hYmxlX2lycShzdHJ1Y3QgaXJxX2Rlc2MgKmRlc2MsIHVuc2lnbmVkIGludCBpcnEsIGJvb2wgcmVzdW1lKQogeworCWlmIChyZXN1bWUpCisJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX1NVU1BFTkRFRDsKKwogCXN3aXRjaCAoZGVzYy0+ZGVwdGgpIHsKIAljYXNlIDA6CisgZXJyX291dDoKIAkJV0FSTigxLCBLRVJOX1dBUk5JTkcgIlVuYmFsYW5jZWQgZW5hYmxlIGZvciBJUlEgJWRcbiIsIGlycSk7CiAJCWJyZWFrOwogCWNhc2UgMTogewogCQl1bnNpZ25lZCBpbnQgc3RhdHVzID0gZGVzYy0+c3RhdHVzICYgfklSUV9ESVNBQkxFRDsKIAorCQlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX1NVU1BFTkRFRCkKKwkJCWdvdG8gZXJyX291dDsKIAkJLyogUHJldmVudCBwcm9iaW5nIG9uIHRoaXMgaXJxOiAqLwogCQlkZXNjLT5zdGF0dXMgPSBzdGF0dXMgfCBJUlFfTk9QUk9CRTsKIAkJY2hlY2tfaXJxX3Jlc2VuZChkZXNjLCBpcnEpOwpAQCAtMjUzLDcgKzI3MCw3IEBACiAJCXJldHVybjsKIAogCXNwaW5fbG9ja19pcnFzYXZlKCZkZXNjLT5sb2NrLCBmbGFncyk7Ci0JX19lbmFibGVfaXJxKGRlc2MsIGlycSk7CisJX19lbmFibGVfaXJxKGRlc2MsIGlycSwgZmFsc2UpOwogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKIH0KIEVYUE9SVF9TWU1CT0woZW5hYmxlX2lycSk7CkBAIC01MTEsNyArNTI4LDcgQEAKIAkgKi8KIAlpZiAoc2hhcmVkICYmIChkZXNjLT5zdGF0dXMgJiBJUlFfU1BVUklPVVNfRElTQUJMRUQpKSB7CiAJCWRlc2MtPnN0YXR1cyAmPSB+SVJRX1NQVVJJT1VTX0RJU0FCTEVEOwotCQlfX2VuYWJsZV9pcnEoZGVzYywgaXJxKTsKKwkJX19lbmFibGVfaXJxKGRlc2MsIGlycSwgZmFsc2UpOwogCX0KIAogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9pcnEvcG0uYyBiL2tlcm5lbC9pcnEvcG0uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi42MzhkOGJlCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL2lycS9wbS5jCkBAIC0wLDAgKzEsNzkgQEAKKy8qCisgKiBsaW51eC9rZXJuZWwvaXJxL3BtLmMKKyAqCisgKiBDb3B5cmlnaHQgKEMpIDIwMDkgUmFmYWVsIEouIFd5c29ja2kgPHJqd0BzaXNrLnBsPiwgTm92ZWxsIEluYy4KKyAqCisgKiBUaGlzIGZpbGUgY29udGFpbnMgcG93ZXIgbWFuYWdlbWVudCBmdW5jdGlvbnMgcmVsYXRlZCB0byBpbnRlcnJ1cHRzLgorICovCisKKyNpbmNsdWRlIDxsaW51eC9pcnEuaD4KKyNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4KKworI2luY2x1ZGUgImludGVybmFscy5oIgorCisvKioKKyAqIHN1c3BlbmRfZGV2aWNlX2lycXMgLSBkaXNhYmxlIGFsbCBjdXJyZW50bHkgZW5hYmxlZCBpbnRlcnJ1cHQgbGluZXMKKyAqCisgKiBEdXJpbmcgc3lzdGVtLXdpZGUgc3VzcGVuZCBvciBoaWJlcm5hdGlvbiBkZXZpY2UgaW50ZXJydXB0cyBuZWVkIHRvIGJlCisgKiBkaXNhYmxlZCBhdCB0aGUgY2hpcCBsZXZlbCBhbmQgdGhpcyBmdW5jdGlvbiBpcyBwcm92aWRlZCBmb3IgdGhpcyBwdXJwb3NlLgorICogSXQgZGlzYWJsZXMgYWxsIGludGVycnVwdCBsaW5lcyB0aGF0IGFyZSBlbmFibGVkIGF0IHRoZSBtb21lbnQgYW5kIHNldHMgdGhlCisgKiBJUlFfU1VTUEVOREVEIGZsYWcgZm9yIHRoZW0uCisgKi8KK3ZvaWQgc3VzcGVuZF9kZXZpY2VfaXJxcyh2b2lkKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwlpbnQgaXJxOworCisJZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJc3Bpbl9sb2NrX2lycXNhdmUoJmRlc2MtPmxvY2ssIGZsYWdzKTsKKwkJX19kaXNhYmxlX2lycShkZXNjLCBpcnEsIHRydWUpOworCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkZXNjLT5sb2NrLCBmbGFncyk7CisJfQorCisJZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKQorCQlpZiAoZGVzYy0+c3RhdHVzICYgSVJRX1NVU1BFTkRFRCkKKwkJCXN5bmNocm9uaXplX2lycShpcnEpOworfQorRVhQT1JUX1NZTUJPTF9HUEwoc3VzcGVuZF9kZXZpY2VfaXJxcyk7CisKKy8qKgorICogcmVzdW1lX2RldmljZV9pcnFzIC0gZW5hYmxlIGludGVycnVwdCBsaW5lcyBkaXNhYmxlZCBieSBzdXNwZW5kX2RldmljZV9pcnFzKCkKKyAqCisgKiBFbmFibGUgYWxsIGludGVycnVwdCBsaW5lcyBwcmV2aW91c2x5IGRpc2FibGVkIGJ5IHN1c3BlbmRfZGV2aWNlX2lycXMoKSB0aGF0CisgKiBoYXZlIHRoZSBJUlFfU1VTUEVOREVEIGZsYWcgc2V0LgorICovCit2b2lkIHJlc3VtZV9kZXZpY2VfaXJxcyh2b2lkKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwlpbnQgaXJxOworCisJZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKSB7CisJCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkJaWYgKCEoZGVzYy0+c3RhdHVzICYgSVJRX1NVU1BFTkRFRCkpCisJCQljb250aW51ZTsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCQlfX2VuYWJsZV9pcnEoZGVzYywgaXJxLCB0cnVlKTsKKwkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmZGVzYy0+bG9jaywgZmxhZ3MpOworCX0KK30KK0VYUE9SVF9TWU1CT0xfR1BMKHJlc3VtZV9kZXZpY2VfaXJxcyk7CisKKy8qKgorICogY2hlY2tfd2FrZXVwX2lycXMgLSBjaGVjayBpZiBhbnkgd2FrZS11cCBpbnRlcnJ1cHRzIGFyZSBwZW5kaW5nCisgKi8KK2ludCBjaGVja193YWtldXBfaXJxcyh2b2lkKQoreworCXN0cnVjdCBpcnFfZGVzYyAqZGVzYzsKKwlpbnQgaXJxOworCisJZm9yX2VhY2hfaXJxX2Rlc2MoaXJxLCBkZXNjKQorCQlpZiAoKGRlc2MtPnN0YXR1cyAmIElSUV9XQUtFVVApICYmIChkZXNjLT5zdGF0dXMgJiBJUlFfUEVORElORykpCisJCQlyZXR1cm4gLUVCVVNZOworCisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9rZXJuZWwva2V4ZWMuYyBiL2tlcm5lbC9rZXhlYy5jCmluZGV4IGM3ZmQ2NjkuLjkzZWVkODUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9rZXhlYy5jCisrKyBiL2tlcm5lbC9rZXhlYy5jCkBAIC0xNDUwLDExICsxNDUwLDcgQEAKIAkJZXJyb3IgPSBkZXZpY2Vfc3VzcGVuZChQTVNHX0ZSRUVaRSk7CiAJCWlmIChlcnJvcikKIAkJCWdvdG8gUmVzdW1lX2NvbnNvbGU7Ci0JCWVycm9yID0gZGlzYWJsZV9ub25ib290X2NwdXMoKTsKLQkJaWYgKGVycm9yKQotCQkJZ290byBSZXN1bWVfZGV2aWNlczsKIAkJZGV2aWNlX3BtX2xvY2soKTsKLQkJbG9jYWxfaXJxX2Rpc2FibGUoKTsKIAkJLyogQXQgdGhpcyBwb2ludCwgZGV2aWNlX3N1c3BlbmQoKSBoYXMgYmVlbiBjYWxsZWQsCiAJCSAqIGJ1dCAqbm90KiBkZXZpY2VfcG93ZXJfZG93bigpLiBXZSAqbXVzdCoKIAkJICogZGV2aWNlX3Bvd2VyX2Rvd24oKSBub3cuICBPdGhlcndpc2UsIGRyaXZlcnMgZm9yCkBAIC0xNDY0LDEyICsxNDYwLDE1IEBACiAJCSAqLwogCQllcnJvciA9IGRldmljZV9wb3dlcl9kb3duKFBNU0dfRlJFRVpFKTsKIAkJaWYgKGVycm9yKQotCQkJZ290byBFbmFibGVfaXJxczsKLQorCQkJZ290byBSZXN1bWVfZGV2aWNlczsKKwkJZXJyb3IgPSBkaXNhYmxlX25vbmJvb3RfY3B1cygpOworCQlpZiAoZXJyb3IpCisJCQlnb3RvIEVuYWJsZV9jcHVzOworCQlsb2NhbF9pcnFfZGlzYWJsZSgpOwogCQkvKiBTdXNwZW5kIHN5c3RlbSBkZXZpY2VzICovCiAJCWVycm9yID0gc3lzZGV2X3N1c3BlbmQoUE1TR19GUkVFWkUpOwogCQlpZiAoZXJyb3IpCi0JCQlnb3RvIFBvd2VyX3VwX2RldmljZXM7CisJCQlnb3RvIEVuYWJsZV9pcnFzOwogCX0gZWxzZQogI2VuZGlmCiAJewpAQCAtMTQ4MywxMyArMTQ4MiwxMyBAQAogI2lmZGVmIENPTkZJR19LRVhFQ19KVU1QCiAJaWYgKGtleGVjX2ltYWdlLT5wcmVzZXJ2ZV9jb250ZXh0KSB7CiAJCXN5c2Rldl9yZXN1bWUoKTsKLSBQb3dlcl91cF9kZXZpY2VzOgotCQlkZXZpY2VfcG93ZXJfdXAoUE1TR19SRVNUT1JFKTsKICBFbmFibGVfaXJxczoKIAkJbG9jYWxfaXJxX2VuYWJsZSgpOwotCQlkZXZpY2VfcG1fdW5sb2NrKCk7CisgRW5hYmxlX2NwdXM6CiAJCWVuYWJsZV9ub25ib290X2NwdXMoKTsKKwkJZGV2aWNlX3Bvd2VyX3VwKFBNU0dfUkVTVE9SRSk7CiAgUmVzdW1lX2RldmljZXM6CisJCWRldmljZV9wbV91bmxvY2soKTsKIAkJZGV2aWNlX3Jlc3VtZShQTVNHX1JFU1RPUkUpOwogIFJlc3VtZV9jb25zb2xlOgogCQlyZXN1bWVfY29uc29sZSgpOwpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tkZXAuYyBiL2tlcm5lbC9sb2NrZGVwLmMKaW5kZXggMDZiMGMzNS4uMzY3M2EzZiAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tkZXAuYworKysgYi9rZXJuZWwvbG9ja2RlcC5jCkBAIC00MSw2ICs0MSw3IEBACiAjaW5jbHVkZSA8bGludXgvdXRzbmFtZS5oPgogI2luY2x1ZGUgPGxpbnV4L2hhc2guaD4KICNpbmNsdWRlIDxsaW51eC9mdHJhY2UuaD4KKyNpbmNsdWRlIDxsaW51eC9zdHJpbmdpZnkuaD4KIAogI2luY2x1ZGUgPGFzbS9zZWN0aW9ucy5oPgogCkBAIC0zMTAsMTIgKzMxMSwxNCBAQAogI2lmIFZFUkJPU0UKICMgZGVmaW5lIEhBUkRJUlFfVkVSQk9TRQkxCiAjIGRlZmluZSBTT0ZUSVJRX1ZFUkJPU0UJMQorIyBkZWZpbmUgUkVDTEFJTV9WRVJCT1NFCTEKICNlbHNlCiAjIGRlZmluZSBIQVJESVJRX1ZFUkJPU0UJMAogIyBkZWZpbmUgU09GVElSUV9WRVJCT1NFCTAKKyMgZGVmaW5lIFJFQ0xBSU1fVkVSQk9TRQkwCiAjZW5kaWYKIAotI2lmIFZFUkJPU0UgfHwgSEFSRElSUV9WRVJCT1NFIHx8IFNPRlRJUlFfVkVSQk9TRQorI2lmIFZFUkJPU0UgfHwgSEFSRElSUV9WRVJCT1NFIHx8IFNPRlRJUlFfVkVSQk9TRSB8fCBSRUNMQUlNX1ZFUkJPU0UKIC8qCiAgKiBRdWljayBmaWx0ZXJpbmcgZm9yIGludGVyZXN0aW5nIGV2ZW50czoKICAqLwpAQCAtNDQzLDE3ICs0NDYsMTggQEAKICAqIExvY2tpbmcgcHJpbnRvdXRzOgogICovCiAKKyNkZWZpbmUgX19VU0FHRShfX1NUQVRFKQkJCQkJCVwKKwlbTE9DS19VU0VEX0lOXyMjX19TVEFURV0gPSAiSU4tIl9fc3RyaW5naWZ5KF9fU1RBVEUpIi1XIiwJXAorCVtMT0NLX0VOQUJMRURfIyNfX1NUQVRFXSA9IF9fc3RyaW5naWZ5KF9fU1RBVEUpIi1PTi1XIiwJCVwKKwlbTE9DS19VU0VEX0lOXyMjX19TVEFURSMjX1JFQURdID0gIklOLSJfX3N0cmluZ2lmeShfX1NUQVRFKSItUiIsXAorCVtMT0NLX0VOQUJMRURfIyNfX1NUQVRFIyNfUkVBRF0gPSBfX3N0cmluZ2lmeShfX1NUQVRFKSItT04tUiIsCisKIHN0YXRpYyBjb25zdCBjaGFyICp1c2FnZV9zdHJbXSA9CiB7Ci0JW0xPQ0tfVVNFRF0gPQkJCSJpbml0aWFsLXVzZSAiLAotCVtMT0NLX1VTRURfSU5fSEFSRElSUV0gPQkiaW4taGFyZGlycS1XIiwKLQlbTE9DS19VU0VEX0lOX1NPRlRJUlFdID0JImluLXNvZnRpcnEtVyIsCi0JW0xPQ0tfRU5BQkxFRF9TT0ZUSVJRU10gPQkic29mdGlycS1vbi1XIiwKLQlbTE9DS19FTkFCTEVEX0hBUkRJUlFTXSA9CSJoYXJkaXJxLW9uLVciLAotCVtMT0NLX1VTRURfSU5fSEFSRElSUV9SRUFEXSA9CSJpbi1oYXJkaXJxLVIiLAotCVtMT0NLX1VTRURfSU5fU09GVElSUV9SRUFEXSA9CSJpbi1zb2Z0aXJxLVIiLAotCVtMT0NLX0VOQUJMRURfU09GVElSUVNfUkVBRF0gPQkic29mdGlycS1vbi1SIiwKLQlbTE9DS19FTkFCTEVEX0hBUkRJUlFTX1JFQURdID0JImhhcmRpcnEtb24tUiIsCisjZGVmaW5lIExPQ0tERVBfU1RBVEUoX19TVEFURSkgX19VU0FHRShfX1NUQVRFKQorI2luY2x1ZGUgImxvY2tkZXBfc3RhdGVzLmgiCisjdW5kZWYgTE9DS0RFUF9TVEFURQorCVtMT0NLX1VTRURdID0gIklOSVRJQUwgVVNFIiwKIH07CiAKIGNvbnN0IGNoYXIgKiBfX2dldF9rZXlfbmFtZShzdHJ1Y3QgbG9ja2RlcF9zdWJjbGFzc19rZXkgKmtleSwgY2hhciAqc3RyKQpAQCAtNDYxLDQ2ICs0NjUsNDUgQEAKIAlyZXR1cm4ga2FsbHN5bXNfbG9va3VwKCh1bnNpZ25lZCBsb25nKWtleSwgTlVMTCwgTlVMTCwgTlVMTCwgc3RyKTsKIH0KIAotdm9pZAotZ2V0X3VzYWdlX2NoYXJzKHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcywgY2hhciAqYzEsIGNoYXIgKmMyLCBjaGFyICpjMywgY2hhciAqYzQpCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbG9ja19mbGFnKGVudW0gbG9ja191c2FnZV9iaXQgYml0KQogewotCSpjMSA9ICcuJywgKmMyID0gJy4nLCAqYzMgPSAnLicsICpjNCA9ICcuJzsKKwlyZXR1cm4gMVVMIDw8IGJpdDsKK30KIAotCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX1VTRURfSU5fSEFSRElSUSkKLQkJKmMxID0gJysnOwotCWVsc2UKLQkJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfRU5BQkxFRF9IQVJESVJRUykKLQkJCSpjMSA9ICctJzsKK3N0YXRpYyBjaGFyIGdldF91c2FnZV9jaGFyKHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcywgZW51bSBsb2NrX3VzYWdlX2JpdCBiaXQpCit7CisJY2hhciBjID0gJy4nOwogCi0JaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfVVNFRF9JTl9TT0ZUSVJRKQotCQkqYzIgPSAnKyc7Ci0JZWxzZQotCQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9FTkFCTEVEX1NPRlRJUlFTKQotCQkJKmMyID0gJy0nOwotCi0JaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfRU5BQkxFRF9IQVJESVJRU19SRUFEKQotCQkqYzMgPSAnLSc7Ci0JaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfVVNFRF9JTl9IQVJESVJRX1JFQUQpIHsKLQkJKmMzID0gJysnOwotCQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9FTkFCTEVEX0hBUkRJUlFTX1JFQUQpCi0JCQkqYzMgPSAnPyc7CisJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgbG9ja19mbGFnKGJpdCArIDIpKQorCQljID0gJysnOworCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIGxvY2tfZmxhZyhiaXQpKSB7CisJCWMgPSAnLSc7CisJCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIGxvY2tfZmxhZyhiaXQgKyAyKSkKKwkJCWMgPSAnPyc7CiAJfQogCi0JaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfRU5BQkxFRF9TT0ZUSVJRU19SRUFEKQotCQkqYzQgPSAnLSc7Ci0JaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfVVNFRF9JTl9TT0ZUSVJRX1JFQUQpIHsKLQkJKmM0ID0gJysnOwotCQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9FTkFCTEVEX1NPRlRJUlFTX1JFQUQpCi0JCQkqYzQgPSAnPyc7Ci0JfQorCXJldHVybiBjOworfQorCit2b2lkIGdldF91c2FnZV9jaGFycyhzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MsIGNoYXIgdXNhZ2VbTE9DS19VU0FHRV9DSEFSU10pCit7CisJaW50IGkgPSAwOworCisjZGVmaW5lIExPQ0tERVBfU1RBVEUoX19TVEFURSkgCQkJCQkJXAorCXVzYWdlW2krK10gPSBnZXRfdXNhZ2VfY2hhcihjbGFzcywgTE9DS19VU0VEX0lOXyMjX19TVEFURSk7CVwKKwl1c2FnZVtpKytdID0gZ2V0X3VzYWdlX2NoYXIoY2xhc3MsIExPQ0tfVVNFRF9JTl8jI19fU1RBVEUjI19SRUFEKTsKKyNpbmNsdWRlICJsb2NrZGVwX3N0YXRlcy5oIgorI3VuZGVmIExPQ0tERVBfU1RBVEUKKworCXVzYWdlW2ldID0gJ1wwJzsKIH0KIAogc3RhdGljIHZvaWQgcHJpbnRfbG9ja19uYW1lKHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcykKIHsKLQljaGFyIHN0cltLU1lNX05BTUVfTEVOXSwgYzEsIGMyLCBjMywgYzQ7CisJY2hhciBzdHJbS1NZTV9OQU1FX0xFTl0sIHVzYWdlW0xPQ0tfVVNBR0VfQ0hBUlNdOwogCWNvbnN0IGNoYXIgKm5hbWU7CiAKLQlnZXRfdXNhZ2VfY2hhcnMoY2xhc3MsICZjMSwgJmMyLCAmYzMsICZjNCk7CisJZ2V0X3VzYWdlX2NoYXJzKGNsYXNzLCB1c2FnZSk7CiAKIAluYW1lID0gY2xhc3MtPm5hbWU7CiAJaWYgKCFuYW1lKSB7CkBAIC01MTMsNyArNTE2LDcgQEAKIAkJaWYgKGNsYXNzLT5zdWJjbGFzcykKIAkJCXByaW50aygiLyVkIiwgY2xhc3MtPnN1YmNsYXNzKTsKIAl9Ci0JcHJpbnRrKCIpeyVjJWMlYyVjfSIsIGMxLCBjMiwgYzMsIGM0KTsKKwlwcmludGsoIil7JXN9IiwgdXNhZ2UpOwogfQogCiBzdGF0aWMgdm9pZCBwcmludF9sb2NrZGVwX2NhY2hlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaykKQEAgLTEyNjMsOSArMTI2Niw0OSBAQAogCQkJYml0X2JhY2t3YXJkcywgYml0X2ZvcndhcmRzLCBpcnFjbGFzcyk7CiB9CiAKLXN0YXRpYyBpbnQKLWNoZWNrX3ByZXZfYWRkX2lycShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIHN0cnVjdCBoZWxkX2xvY2sgKnByZXYsCi0JCXN0cnVjdCBoZWxkX2xvY2sgKm5leHQpCitzdGF0aWMgY29uc3QgY2hhciAqc3RhdGVfbmFtZXNbXSA9IHsKKyNkZWZpbmUgTE9DS0RFUF9TVEFURShfX1NUQVRFKSBcCisJX19zdHJpbmdpZnkoX19TVEFURSksCisjaW5jbHVkZSAibG9ja2RlcF9zdGF0ZXMuaCIKKyN1bmRlZiBMT0NLREVQX1NUQVRFCit9OworCitzdGF0aWMgY29uc3QgY2hhciAqc3RhdGVfcm5hbWVzW10gPSB7CisjZGVmaW5lIExPQ0tERVBfU1RBVEUoX19TVEFURSkgXAorCV9fc3RyaW5naWZ5KF9fU1RBVEUpIi1SRUFEIiwKKyNpbmNsdWRlICJsb2NrZGVwX3N0YXRlcy5oIgorI3VuZGVmIExPQ0tERVBfU1RBVEUKK307CisKK3N0YXRpYyBpbmxpbmUgY29uc3QgY2hhciAqc3RhdGVfbmFtZShlbnVtIGxvY2tfdXNhZ2VfYml0IGJpdCkKK3sKKwlyZXR1cm4gKGJpdCAmIDEpID8gc3RhdGVfcm5hbWVzW2JpdCA+PiAyXSA6IHN0YXRlX25hbWVzW2JpdCA+PiAyXTsKK30KKworc3RhdGljIGludCBleGNsdXNpdmVfYml0KGludCBuZXdfYml0KQoreworCS8qCisJICogVVNFRF9JTgorCSAqIFVTRURfSU5fUkVBRAorCSAqIEVOQUJMRUQKKwkgKiBFTkFCTEVEX1JFQUQKKwkgKgorCSAqIGJpdCAwIC0gd3JpdGUvcmVhZAorCSAqIGJpdCAxIC0gdXNlZF9pbi9lbmFibGVkCisJICogYml0IDIrICBzdGF0ZQorCSAqLworCisJaW50IHN0YXRlID0gbmV3X2JpdCAmIH4zOworCWludCBkaXIgPSBuZXdfYml0ICYgMjsKKworCS8qCisJICoga2VlcCBzdGF0ZSwgYml0IGZsaXAgdGhlIGRpcmVjdGlvbiBhbmQgc3RyaXAgcmVhZC4KKwkgKi8KKwlyZXR1cm4gc3RhdGUgfCAoZGlyIF4gMik7Cit9CisKK3N0YXRpYyBpbnQgY2hlY2tfaXJxX3VzYWdlKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3Vyciwgc3RydWN0IGhlbGRfbG9jayAqcHJldiwKKwkJCSAgIHN0cnVjdCBoZWxkX2xvY2sgKm5leHQsIGVudW0gbG9ja191c2FnZV9iaXQgYml0KQogewogCS8qCiAJICogUHJvdmUgdGhhdCB0aGUgbmV3IGRlcGVuZGVuY3kgZG9lcyBub3QgY29ubmVjdCBhIGhhcmRpcnEtc2FmZQpAQCAtMTI3MywzOCArMTMxNiwzNCBAQAogCSAqIHRoZSBiYWNrd2FyZHMtc3ViZ3JhcGggc3RhcnRpbmcgYXQgPHByZXY+LCBhbmQgdGhlCiAJICogZm9yd2FyZHMtc3ViZ3JhcGggc3RhcnRpbmcgYXQgPG5leHQ+OgogCSAqLwotCWlmICghY2hlY2tfdXNhZ2UoY3VyciwgcHJldiwgbmV4dCwgTE9DS19VU0VEX0lOX0hBUkRJUlEsCi0JCQkJCUxPQ0tfRU5BQkxFRF9IQVJESVJRUywgImhhcmQiKSkKKwlpZiAoIWNoZWNrX3VzYWdlKGN1cnIsIHByZXYsIG5leHQsIGJpdCwKKwkJCSAgIGV4Y2x1c2l2ZV9iaXQoYml0KSwgc3RhdGVfbmFtZShiaXQpKSkKIAkJcmV0dXJuIDA7CiAKKwliaXQrKzsgLyogX1JFQUQgKi8KKwogCS8qCiAJICogUHJvdmUgdGhhdCB0aGUgbmV3IGRlcGVuZGVuY3kgZG9lcyBub3QgY29ubmVjdCBhIGhhcmRpcnEtc2FmZS1yZWFkCiAJICogbG9jayB3aXRoIGEgaGFyZGlycS11bnNhZmUgbG9jayAtIHRvIGFjaGlldmUgdGhpcyB3ZSBzZWFyY2gKIAkgKiB0aGUgYmFja3dhcmRzLXN1YmdyYXBoIHN0YXJ0aW5nIGF0IDxwcmV2PiwgYW5kIHRoZQogCSAqIGZvcndhcmRzLXN1YmdyYXBoIHN0YXJ0aW5nIGF0IDxuZXh0PjoKIAkgKi8KLQlpZiAoIWNoZWNrX3VzYWdlKGN1cnIsIHByZXYsIG5leHQsIExPQ0tfVVNFRF9JTl9IQVJESVJRX1JFQUQsCi0JCQkJCUxPQ0tfRU5BQkxFRF9IQVJESVJRUywgImhhcmQtcmVhZCIpKQorCWlmICghY2hlY2tfdXNhZ2UoY3VyciwgcHJldiwgbmV4dCwgYml0LAorCQkJICAgZXhjbHVzaXZlX2JpdChiaXQpLCBzdGF0ZV9uYW1lKGJpdCkpKQogCQlyZXR1cm4gMDsKIAotCS8qCi0JICogUHJvdmUgdGhhdCB0aGUgbmV3IGRlcGVuZGVuY3kgZG9lcyBub3QgY29ubmVjdCBhIHNvZnRpcnEtc2FmZQotCSAqIGxvY2sgd2l0aCBhIHNvZnRpcnEtdW5zYWZlIGxvY2sgLSB0byBhY2hpZXZlIHRoaXMgd2Ugc2VhcmNoCi0JICogdGhlIGJhY2t3YXJkcy1zdWJncmFwaCBzdGFydGluZyBhdCA8cHJldj4sIGFuZCB0aGUKLQkgKiBmb3J3YXJkcy1zdWJncmFwaCBzdGFydGluZyBhdCA8bmV4dD46Ci0JICovCi0JaWYgKCFjaGVja191c2FnZShjdXJyLCBwcmV2LCBuZXh0LCBMT0NLX1VTRURfSU5fU09GVElSUSwKLQkJCQkJTE9DS19FTkFCTEVEX1NPRlRJUlFTLCAic29mdCIpKQorCXJldHVybiAxOworfQorCitzdGF0aWMgaW50CitjaGVja19wcmV2X2FkZF9pcnEoc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCBzdHJ1Y3QgaGVsZF9sb2NrICpwcmV2LAorCQlzdHJ1Y3QgaGVsZF9sb2NrICpuZXh0KQoreworI2RlZmluZSBMT0NLREVQX1NUQVRFKF9fU1RBVEUpCQkJCQkJXAorCWlmICghY2hlY2tfaXJxX3VzYWdlKGN1cnIsIHByZXYsIG5leHQsIExPQ0tfVVNFRF9JTl8jI19fU1RBVEUpKQlcCiAJCXJldHVybiAwOwotCS8qCi0JICogUHJvdmUgdGhhdCB0aGUgbmV3IGRlcGVuZGVuY3kgZG9lcyBub3QgY29ubmVjdCBhIHNvZnRpcnEtc2FmZS1yZWFkCi0JICogbG9jayB3aXRoIGEgc29mdGlycS11bnNhZmUgbG9jayAtIHRvIGFjaGlldmUgdGhpcyB3ZSBzZWFyY2gKLQkgKiB0aGUgYmFja3dhcmRzLXN1YmdyYXBoIHN0YXJ0aW5nIGF0IDxwcmV2PiwgYW5kIHRoZQotCSAqIGZvcndhcmRzLXN1YmdyYXBoIHN0YXJ0aW5nIGF0IDxuZXh0PjoKLQkgKi8KLQlpZiAoIWNoZWNrX3VzYWdlKGN1cnIsIHByZXYsIG5leHQsIExPQ0tfVVNFRF9JTl9TT0ZUSVJRX1JFQUQsCi0JCQkJCUxPQ0tfRU5BQkxFRF9TT0ZUSVJRUywgInNvZnQiKSkKLQkJcmV0dXJuIDA7CisjaW5jbHVkZSAibG9ja2RlcF9zdGF0ZXMuaCIKKyN1bmRlZiBMT0NLREVQX1NUQVRFCiAKIAlyZXR1cm4gMTsKIH0KQEAgLTE5MzMsNyArMTk3Miw3IEBACiAJcHJpbnRfaXBfc3ltKGN1cnItPnNvZnRpcnFfZGlzYWJsZV9pcCk7CiB9CiAKLXN0YXRpYyBpbnQgaGFyZGlycV92ZXJib3NlKHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcykKK3N0YXRpYyBpbnQgSEFSRElSUV92ZXJib3NlKHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcykKIHsKICNpZiBIQVJESVJRX1ZFUkJPU0UKIAlyZXR1cm4gY2xhc3NfZmlsdGVyKGNsYXNzKTsKQEAgLTE5NDEsNyArMTk4MCw3IEBACiAJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgc29mdGlycV92ZXJib3NlKHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcykKK3N0YXRpYyBpbnQgU09GVElSUV92ZXJib3NlKHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcykKIHsKICNpZiBTT0ZUSVJRX1ZFUkJPU0UKIAlyZXR1cm4gY2xhc3NfZmlsdGVyKGNsYXNzKTsKQEAgLTE5NDksMTg1ICsxOTg4LDk0IEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBpbnQgUkVDTEFJTV9GU192ZXJib3NlKHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcykKK3sKKyNpZiBSRUNMQUlNX1ZFUkJPU0UKKwlyZXR1cm4gY2xhc3NfZmlsdGVyKGNsYXNzKTsKKyNlbmRpZgorCXJldHVybiAwOworfQorCiAjZGVmaW5lIFNUUklDVF9SRUFEX0NIRUNLUwkxCiAKLXN0YXRpYyBpbnQgbWFya19sb2NrX2lycShzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIHN0cnVjdCBoZWxkX2xvY2sgKnRoaXMsCi0JCWVudW0gbG9ja191c2FnZV9iaXQgbmV3X2JpdCkKLXsKLQlpbnQgcmV0ID0gMTsKK3N0YXRpYyBpbnQgKCpzdGF0ZV92ZXJib3NlX2ZbXSkoc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzKSA9IHsKKyNkZWZpbmUgTE9DS0RFUF9TVEFURShfX1NUQVRFKSBcCisJX19TVEFURSMjX3ZlcmJvc2UsCisjaW5jbHVkZSAibG9ja2RlcF9zdGF0ZXMuaCIKKyN1bmRlZiBMT0NLREVQX1NUQVRFCit9OwogCi0Jc3dpdGNoKG5ld19iaXQpIHsKLQljYXNlIExPQ0tfVVNFRF9JTl9IQVJESVJROgotCQlpZiAoIXZhbGlkX3N0YXRlKGN1cnIsIHRoaXMsIG5ld19iaXQsIExPQ0tfRU5BQkxFRF9IQVJESVJRUykpCitzdGF0aWMgaW5saW5lIGludCBzdGF0ZV92ZXJib3NlKGVudW0gbG9ja191c2FnZV9iaXQgYml0LAorCQkJCXN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcykKK3sKKwlyZXR1cm4gc3RhdGVfdmVyYm9zZV9mW2JpdCA+PiAyXShjbGFzcyk7Cit9CisKK3R5cGVkZWYgaW50ICgqY2hlY2tfdXNhZ2VfZikoc3RydWN0IHRhc2tfc3RydWN0ICosIHN0cnVjdCBoZWxkX2xvY2sgKiwKKwkJCSAgICAgZW51bSBsb2NrX3VzYWdlX2JpdCBiaXQsIGNvbnN0IGNoYXIgKm5hbWUpOworCitzdGF0aWMgaW50CittYXJrX2xvY2tfaXJxKHN0cnVjdCB0YXNrX3N0cnVjdCAqY3Vyciwgc3RydWN0IGhlbGRfbG9jayAqdGhpcywgaW50IG5ld19iaXQpCit7CisJaW50IGV4Y2xfYml0ID0gZXhjbHVzaXZlX2JpdChuZXdfYml0KTsKKwlpbnQgcmVhZCA9IG5ld19iaXQgJiAxOworCWludCBkaXIgPSBuZXdfYml0ICYgMjsKKworCS8qCisJICogbWFyayBVU0VEX0lOIGhhcyB0byBsb29rIGZvcndhcmRzIC0tIHRvIGVuc3VyZSBubyBkZXBlbmRlbmN5CisJICogaGFzIEVOQUJMRUQgc3RhdGUsIHdoaWNoIHdvdWxkIGFsbG93IHJlY3Vyc2lvbiBkZWFkbG9ja3MuCisJICoKKwkgKiBtYXJrIEVOQUJMRUQgaGFzIHRvIGxvb2sgYmFja3dhcmRzIC0tIHRvIGVuc3VyZSBubyBkZXBlbmRlZQorCSAqIGhhcyBVU0VEX0lOIHN0YXRlLCB3aGljaCwgYWdhaW4sIHdvdWxkIGFsbG93ICByZWN1cnNpb24gZGVhZGxvY2tzLgorCSAqLworCWNoZWNrX3VzYWdlX2YgdXNhZ2UgPSBkaXIgPworCQljaGVja191c2FnZV9iYWNrd2FyZHMgOiBjaGVja191c2FnZV9mb3J3YXJkczsKKworCS8qCisJICogVmFsaWRhdGUgdGhhdCB0aGlzIHBhcnRpY3VsYXIgbG9jayBkb2VzIG5vdCBoYXZlIGNvbmZsaWN0aW5nCisJICogdXNhZ2Ugc3RhdGVzLgorCSAqLworCWlmICghdmFsaWRfc3RhdGUoY3VyciwgdGhpcywgbmV3X2JpdCwgZXhjbF9iaXQpKQorCQlyZXR1cm4gMDsKKworCS8qCisJICogVmFsaWRhdGUgdGhhdCB0aGUgbG9jayBkZXBlbmRlbmNpZXMgZG9uJ3QgaGF2ZSBjb25mbGljdGluZyB1c2FnZQorCSAqIHN0YXRlcy4KKwkgKi8KKwlpZiAoKCFyZWFkIHx8ICFkaXIgfHwgU1RSSUNUX1JFQURfQ0hFQ0tTKSAmJgorCQkJIXVzYWdlKGN1cnIsIHRoaXMsIGV4Y2xfYml0LCBzdGF0ZV9uYW1lKG5ld19iaXQpKSkKKwkJcmV0dXJuIDA7CisKKwkvKgorCSAqIENoZWNrIGZvciByZWFkIGluIHdyaXRlIGNvbmZsaWN0cworCSAqLworCWlmICghcmVhZCkgeworCQlpZiAoIXZhbGlkX3N0YXRlKGN1cnIsIHRoaXMsIG5ld19iaXQsIGV4Y2xfYml0ICsgMSkpCiAJCQlyZXR1cm4gMDsKLQkJaWYgKCF2YWxpZF9zdGF0ZShjdXJyLCB0aGlzLCBuZXdfYml0LAotCQkJCSBMT0NLX0VOQUJMRURfSEFSRElSUVNfUkVBRCkpCisKKwkJaWYgKFNUUklDVF9SRUFEX0NIRUNLUyAmJgorCQkJIXVzYWdlKGN1cnIsIHRoaXMsIGV4Y2xfYml0ICsgMSwKKwkJCQlzdGF0ZV9uYW1lKG5ld19iaXQgKyAxKSkpCiAJCQlyZXR1cm4gMDsKLQkJLyoKLQkJICoganVzdCBtYXJrZWQgaXQgaGFyZGlycS1zYWZlLCBjaGVjayB0aGF0IHRoaXMgbG9jawotCQkgKiB0b29rIG5vIGhhcmRpcnEtdW5zYWZlIGxvY2sgaW4gdGhlIHBhc3Q6Ci0JCSAqLwotCQlpZiAoIWNoZWNrX3VzYWdlX2ZvcndhcmRzKGN1cnIsIHRoaXMsCi0JCQkJCSAgTE9DS19FTkFCTEVEX0hBUkRJUlFTLCAiaGFyZCIpKQotCQkJcmV0dXJuIDA7Ci0jaWYgU1RSSUNUX1JFQURfQ0hFQ0tTCi0JCS8qCi0JCSAqIGp1c3QgbWFya2VkIGl0IGhhcmRpcnEtc2FmZSwgY2hlY2sgdGhhdCB0aGlzIGxvY2sKLQkJICogdG9vayBubyBoYXJkaXJxLXVuc2FmZS1yZWFkIGxvY2sgaW4gdGhlIHBhc3Q6Ci0JCSAqLwotCQlpZiAoIWNoZWNrX3VzYWdlX2ZvcndhcmRzKGN1cnIsIHRoaXMsCi0JCQkJTE9DS19FTkFCTEVEX0hBUkRJUlFTX1JFQUQsICJoYXJkLXJlYWQiKSkKLQkJCXJldHVybiAwOwotI2VuZGlmCi0JCWlmIChoYXJkaXJxX3ZlcmJvc2UoaGxvY2tfY2xhc3ModGhpcykpKQotCQkJcmV0ID0gMjsKLQkJYnJlYWs7Ci0JY2FzZSBMT0NLX1VTRURfSU5fU09GVElSUToKLQkJaWYgKCF2YWxpZF9zdGF0ZShjdXJyLCB0aGlzLCBuZXdfYml0LCBMT0NLX0VOQUJMRURfU09GVElSUVMpKQotCQkJcmV0dXJuIDA7Ci0JCWlmICghdmFsaWRfc3RhdGUoY3VyciwgdGhpcywgbmV3X2JpdCwKLQkJCQkgTE9DS19FTkFCTEVEX1NPRlRJUlFTX1JFQUQpKQotCQkJcmV0dXJuIDA7Ci0JCS8qCi0JCSAqIGp1c3QgbWFya2VkIGl0IHNvZnRpcnEtc2FmZSwgY2hlY2sgdGhhdCB0aGlzIGxvY2sKLQkJICogdG9vayBubyBzb2Z0aXJxLXVuc2FmZSBsb2NrIGluIHRoZSBwYXN0OgotCQkgKi8KLQkJaWYgKCFjaGVja191c2FnZV9mb3J3YXJkcyhjdXJyLCB0aGlzLAotCQkJCQkgIExPQ0tfRU5BQkxFRF9TT0ZUSVJRUywgInNvZnQiKSkKLQkJCXJldHVybiAwOwotI2lmIFNUUklDVF9SRUFEX0NIRUNLUwotCQkvKgotCQkgKiBqdXN0IG1hcmtlZCBpdCBzb2Z0aXJxLXNhZmUsIGNoZWNrIHRoYXQgdGhpcyBsb2NrCi0JCSAqIHRvb2sgbm8gc29mdGlycS11bnNhZmUtcmVhZCBsb2NrIGluIHRoZSBwYXN0OgotCQkgKi8KLQkJaWYgKCFjaGVja191c2FnZV9mb3J3YXJkcyhjdXJyLCB0aGlzLAotCQkJCUxPQ0tfRU5BQkxFRF9TT0ZUSVJRU19SRUFELCAic29mdC1yZWFkIikpCi0JCQlyZXR1cm4gMDsKLSNlbmRpZgotCQlpZiAoc29mdGlycV92ZXJib3NlKGhsb2NrX2NsYXNzKHRoaXMpKSkKLQkJCXJldCA9IDI7Ci0JCWJyZWFrOwotCWNhc2UgTE9DS19VU0VEX0lOX0hBUkRJUlFfUkVBRDoKLQkJaWYgKCF2YWxpZF9zdGF0ZShjdXJyLCB0aGlzLCBuZXdfYml0LCBMT0NLX0VOQUJMRURfSEFSRElSUVMpKQotCQkJcmV0dXJuIDA7Ci0JCS8qCi0JCSAqIGp1c3QgbWFya2VkIGl0IGhhcmRpcnEtcmVhZC1zYWZlLCBjaGVjayB0aGF0IHRoaXMgbG9jawotCQkgKiB0b29rIG5vIGhhcmRpcnEtdW5zYWZlIGxvY2sgaW4gdGhlIHBhc3Q6Ci0JCSAqLwotCQlpZiAoIWNoZWNrX3VzYWdlX2ZvcndhcmRzKGN1cnIsIHRoaXMsCi0JCQkJCSAgTE9DS19FTkFCTEVEX0hBUkRJUlFTLCAiaGFyZCIpKQotCQkJcmV0dXJuIDA7Ci0JCWlmIChoYXJkaXJxX3ZlcmJvc2UoaGxvY2tfY2xhc3ModGhpcykpKQotCQkJcmV0ID0gMjsKLQkJYnJlYWs7Ci0JY2FzZSBMT0NLX1VTRURfSU5fU09GVElSUV9SRUFEOgotCQlpZiAoIXZhbGlkX3N0YXRlKGN1cnIsIHRoaXMsIG5ld19iaXQsIExPQ0tfRU5BQkxFRF9TT0ZUSVJRUykpCi0JCQlyZXR1cm4gMDsKLQkJLyoKLQkJICoganVzdCBtYXJrZWQgaXQgc29mdGlycS1yZWFkLXNhZmUsIGNoZWNrIHRoYXQgdGhpcyBsb2NrCi0JCSAqIHRvb2sgbm8gc29mdGlycS11bnNhZmUgbG9jayBpbiB0aGUgcGFzdDoKLQkJICovCi0JCWlmICghY2hlY2tfdXNhZ2VfZm9yd2FyZHMoY3VyciwgdGhpcywKLQkJCQkJICBMT0NLX0VOQUJMRURfU09GVElSUVMsICJzb2Z0IikpCi0JCQlyZXR1cm4gMDsKLQkJaWYgKHNvZnRpcnFfdmVyYm9zZShobG9ja19jbGFzcyh0aGlzKSkpCi0JCQlyZXQgPSAyOwotCQlicmVhazsKLQljYXNlIExPQ0tfRU5BQkxFRF9IQVJESVJRUzoKLQkJaWYgKCF2YWxpZF9zdGF0ZShjdXJyLCB0aGlzLCBuZXdfYml0LCBMT0NLX1VTRURfSU5fSEFSRElSUSkpCi0JCQlyZXR1cm4gMDsKLQkJaWYgKCF2YWxpZF9zdGF0ZShjdXJyLCB0aGlzLCBuZXdfYml0LAotCQkJCSBMT0NLX1VTRURfSU5fSEFSRElSUV9SRUFEKSkKLQkJCXJldHVybiAwOwotCQkvKgotCQkgKiBqdXN0IG1hcmtlZCBpdCBoYXJkaXJxLXVuc2FmZSwgY2hlY2sgdGhhdCBubyBoYXJkaXJxLXNhZmUKLQkJICogbG9jayBpbiB0aGUgc3lzdGVtIGV2ZXIgdG9vayBpdCBpbiB0aGUgcGFzdDoKLQkJICovCi0JCWlmICghY2hlY2tfdXNhZ2VfYmFja3dhcmRzKGN1cnIsIHRoaXMsCi0JCQkJCSAgIExPQ0tfVVNFRF9JTl9IQVJESVJRLCAiaGFyZCIpKQotCQkJcmV0dXJuIDA7Ci0jaWYgU1RSSUNUX1JFQURfQ0hFQ0tTCi0JCS8qCi0JCSAqIGp1c3QgbWFya2VkIGl0IGhhcmRpcnEtdW5zYWZlLCBjaGVjayB0aGF0IG5vCi0JCSAqIGhhcmRpcnEtc2FmZS1yZWFkIGxvY2sgaW4gdGhlIHN5c3RlbSBldmVyIHRvb2sKLQkJICogaXQgaW4gdGhlIHBhc3Q6Ci0JCSAqLwotCQlpZiAoIWNoZWNrX3VzYWdlX2JhY2t3YXJkcyhjdXJyLCB0aGlzLAotCQkJCSAgIExPQ0tfVVNFRF9JTl9IQVJESVJRX1JFQUQsICJoYXJkLXJlYWQiKSkKLQkJCXJldHVybiAwOwotI2VuZGlmCi0JCWlmIChoYXJkaXJxX3ZlcmJvc2UoaGxvY2tfY2xhc3ModGhpcykpKQotCQkJcmV0ID0gMjsKLQkJYnJlYWs7Ci0JY2FzZSBMT0NLX0VOQUJMRURfU09GVElSUVM6Ci0JCWlmICghdmFsaWRfc3RhdGUoY3VyciwgdGhpcywgbmV3X2JpdCwgTE9DS19VU0VEX0lOX1NPRlRJUlEpKQotCQkJcmV0dXJuIDA7Ci0JCWlmICghdmFsaWRfc3RhdGUoY3VyciwgdGhpcywgbmV3X2JpdCwKLQkJCQkgTE9DS19VU0VEX0lOX1NPRlRJUlFfUkVBRCkpCi0JCQlyZXR1cm4gMDsKLQkJLyoKLQkJICoganVzdCBtYXJrZWQgaXQgc29mdGlycS11bnNhZmUsIGNoZWNrIHRoYXQgbm8gc29mdGlycS1zYWZlCi0JCSAqIGxvY2sgaW4gdGhlIHN5c3RlbSBldmVyIHRvb2sgaXQgaW4gdGhlIHBhc3Q6Ci0JCSAqLwotCQlpZiAoIWNoZWNrX3VzYWdlX2JhY2t3YXJkcyhjdXJyLCB0aGlzLAotCQkJCQkgICBMT0NLX1VTRURfSU5fU09GVElSUSwgInNvZnQiKSkKLQkJCXJldHVybiAwOwotI2lmIFNUUklDVF9SRUFEX0NIRUNLUwotCQkvKgotCQkgKiBqdXN0IG1hcmtlZCBpdCBzb2Z0aXJxLXVuc2FmZSwgY2hlY2sgdGhhdCBubwotCQkgKiBzb2Z0aXJxLXNhZmUtcmVhZCBsb2NrIGluIHRoZSBzeXN0ZW0gZXZlciB0b29rCi0JCSAqIGl0IGluIHRoZSBwYXN0OgotCQkgKi8KLQkJaWYgKCFjaGVja191c2FnZV9iYWNrd2FyZHMoY3VyciwgdGhpcywKLQkJCQkgICBMT0NLX1VTRURfSU5fU09GVElSUV9SRUFELCAic29mdC1yZWFkIikpCi0JCQlyZXR1cm4gMDsKLSNlbmRpZgotCQlpZiAoc29mdGlycV92ZXJib3NlKGhsb2NrX2NsYXNzKHRoaXMpKSkKLQkJCXJldCA9IDI7Ci0JCWJyZWFrOwotCWNhc2UgTE9DS19FTkFCTEVEX0hBUkRJUlFTX1JFQUQ6Ci0JCWlmICghdmFsaWRfc3RhdGUoY3VyciwgdGhpcywgbmV3X2JpdCwgTE9DS19VU0VEX0lOX0hBUkRJUlEpKQotCQkJcmV0dXJuIDA7Ci0jaWYgU1RSSUNUX1JFQURfQ0hFQ0tTCi0JCS8qCi0JCSAqIGp1c3QgbWFya2VkIGl0IGhhcmRpcnEtcmVhZC11bnNhZmUsIGNoZWNrIHRoYXQgbm8KLQkJICogaGFyZGlycS1zYWZlIGxvY2sgaW4gdGhlIHN5c3RlbSBldmVyIHRvb2sgaXQgaW4gdGhlIHBhc3Q6Ci0JCSAqLwotCQlpZiAoIWNoZWNrX3VzYWdlX2JhY2t3YXJkcyhjdXJyLCB0aGlzLAotCQkJCQkgICBMT0NLX1VTRURfSU5fSEFSRElSUSwgImhhcmQiKSkKLQkJCXJldHVybiAwOwotI2VuZGlmCi0JCWlmIChoYXJkaXJxX3ZlcmJvc2UoaGxvY2tfY2xhc3ModGhpcykpKQotCQkJcmV0ID0gMjsKLQkJYnJlYWs7Ci0JY2FzZSBMT0NLX0VOQUJMRURfU09GVElSUVNfUkVBRDoKLQkJaWYgKCF2YWxpZF9zdGF0ZShjdXJyLCB0aGlzLCBuZXdfYml0LCBMT0NLX1VTRURfSU5fU09GVElSUSkpCi0JCQlyZXR1cm4gMDsKLSNpZiBTVFJJQ1RfUkVBRF9DSEVDS1MKLQkJLyoKLQkJICoganVzdCBtYXJrZWQgaXQgc29mdGlycS1yZWFkLXVuc2FmZSwgY2hlY2sgdGhhdCBubwotCQkgKiBzb2Z0aXJxLXNhZmUgbG9jayBpbiB0aGUgc3lzdGVtIGV2ZXIgdG9vayBpdCBpbiB0aGUgcGFzdDoKLQkJICovCi0JCWlmICghY2hlY2tfdXNhZ2VfYmFja3dhcmRzKGN1cnIsIHRoaXMsCi0JCQkJCSAgIExPQ0tfVVNFRF9JTl9TT0ZUSVJRLCAic29mdCIpKQotCQkJcmV0dXJuIDA7Ci0jZW5kaWYKLQkJaWYgKHNvZnRpcnFfdmVyYm9zZShobG9ja19jbGFzcyh0aGlzKSkpCi0JCQlyZXQgPSAyOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlXQVJOX09OKDEpOwotCQlicmVhazsKIAl9CiAKLQlyZXR1cm4gcmV0OworCWlmIChzdGF0ZV92ZXJib3NlKG5ld19iaXQsIGhsb2NrX2NsYXNzKHRoaXMpKSkKKwkJcmV0dXJuIDI7CisKKwlyZXR1cm4gMTsKIH0KIAorZW51bSBtYXJrX3R5cGUgeworI2RlZmluZSBMT0NLREVQX1NUQVRFKF9fU1RBVEUpCV9fU1RBVEUsCisjaW5jbHVkZSAibG9ja2RlcF9zdGF0ZXMuaCIKKyN1bmRlZiBMT0NLREVQX1NUQVRFCit9OworCiAvKgogICogTWFyayBhbGwgaGVsZCBsb2NrcyB3aXRoIGEgdXNhZ2UgYml0OgogICovCiBzdGF0aWMgaW50Ci1tYXJrX2hlbGRfbG9ja3Moc3RydWN0IHRhc2tfc3RydWN0ICpjdXJyLCBpbnQgaGFyZGlycSkKK21hcmtfaGVsZF9sb2NrcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIGVudW0gbWFya190eXBlIG1hcmspCiB7CiAJZW51bSBsb2NrX3VzYWdlX2JpdCB1c2FnZV9iaXQ7CiAJc3RydWN0IGhlbGRfbG9jayAqaGxvY2s7CkBAIC0yMTM2LDE3ICsyMDg0LDEyIEBACiAJZm9yIChpID0gMDsgaSA8IGN1cnItPmxvY2tkZXBfZGVwdGg7IGkrKykgewogCQlobG9jayA9IGN1cnItPmhlbGRfbG9ja3MgKyBpOwogCi0JCWlmIChoYXJkaXJxKSB7Ci0JCQlpZiAoaGxvY2stPnJlYWQpCi0JCQkJdXNhZ2VfYml0ID0gTE9DS19FTkFCTEVEX0hBUkRJUlFTX1JFQUQ7Ci0JCQllbHNlCi0JCQkJdXNhZ2VfYml0ID0gTE9DS19FTkFCTEVEX0hBUkRJUlFTOwotCQl9IGVsc2UgewotCQkJaWYgKGhsb2NrLT5yZWFkKQotCQkJCXVzYWdlX2JpdCA9IExPQ0tfRU5BQkxFRF9TT0ZUSVJRU19SRUFEOwotCQkJZWxzZQotCQkJCXVzYWdlX2JpdCA9IExPQ0tfRU5BQkxFRF9TT0ZUSVJRUzsKLQkJfQorCQl1c2FnZV9iaXQgPSAyICsgKG1hcmsgPDwgMik7IC8qIEVOQUJMRUQgKi8KKwkJaWYgKGhsb2NrLT5yZWFkKQorCQkJdXNhZ2VfYml0ICs9IDE7IC8qIFJFQUQgKi8KKworCQlCVUdfT04odXNhZ2VfYml0ID49IExPQ0tfVVNBR0VfU1RBVEVTKTsKKwogCQlpZiAoIW1hcmtfbG9jayhjdXJyLCBobG9jaywgdXNhZ2VfYml0KSkKIAkJCXJldHVybiAwOwogCX0KQEAgLTIyMDAsNyArMjE0Myw3IEBACiAJICogV2UgYXJlIGdvaW5nIHRvIHR1cm4gaGFyZGlycXMgb24sIHNvIHNldCB0aGUKIAkgKiB1c2FnZSBiaXQgZm9yIGFsbCBoZWxkIGxvY2tzOgogCSAqLwotCWlmICghbWFya19oZWxkX2xvY2tzKGN1cnIsIDEpKQorCWlmICghbWFya19oZWxkX2xvY2tzKGN1cnIsIEhBUkRJUlEpKQogCQlyZXR1cm47CiAJLyoKIAkgKiBJZiB3ZSBoYXZlIHNvZnRpcnFzIGVuYWJsZWQsIHRoZW4gc2V0IHRoZSB1c2FnZQpAQCAtMjIwOCw3ICsyMTUxLDcgQEAKIAkgKiB0aGlzIGJpdCBmcm9tIGJlaW5nIHNldCBiZWZvcmUpCiAJICovCiAJaWYgKGN1cnItPnNvZnRpcnFzX2VuYWJsZWQpCi0JCWlmICghbWFya19oZWxkX2xvY2tzKGN1cnIsIDApKQorCQlpZiAoIW1hcmtfaGVsZF9sb2NrcyhjdXJyLCBTT0ZUSVJRKSkKIAkJCXJldHVybjsKIAogCWN1cnItPmhhcmRpcnFfZW5hYmxlX2lwID0gaXA7CkBAIC0yMjg4LDcgKzIyMzEsNyBAQAogCSAqIGVuYWJsZWQgdG9vOgogCSAqLwogCWlmIChjdXJyLT5oYXJkaXJxc19lbmFibGVkKQotCQltYXJrX2hlbGRfbG9ja3MoY3VyciwgMCk7CisJCW1hcmtfaGVsZF9sb2NrcyhjdXJyLCBTT0ZUSVJRKTsKIH0KIAogLyoKQEAgLTIzMTcsNiArMjI2MCw0OCBAQAogCQlkZWJ1Z19hdG9taWNfaW5jKCZyZWR1bmRhbnRfc29mdGlycXNfb2ZmKTsKIH0KIAorc3RhdGljIHZvaWQgX19sb2NrZGVwX3RyYWNlX2FsbG9jKGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBsb25nIGZsYWdzKQoreworCXN0cnVjdCB0YXNrX3N0cnVjdCAqY3VyciA9IGN1cnJlbnQ7CisKKwlpZiAodW5saWtlbHkoIWRlYnVnX2xvY2tzKSkKKwkJcmV0dXJuOworCisJLyogbm8gcmVjbGFpbSB3aXRob3V0IHdhaXRpbmcgb24gaXQgKi8KKwlpZiAoIShnZnBfbWFzayAmIF9fR0ZQX1dBSVQpKQorCQlyZXR1cm47CisKKwkvKiB0aGlzIGd1eSB3b24ndCBlbnRlciByZWNsYWltICovCisJaWYgKChjdXJyLT5mbGFncyAmIFBGX01FTUFMTE9DKSAmJiAhKGdmcF9tYXNrICYgX19HRlBfTk9NRU1BTExPQykpCisJCXJldHVybjsKKworCS8qIFdlJ3JlIG9ubHkgaW50ZXJlc3RlZCBfX0dGUF9GUyBhbGxvY2F0aW9ucyBmb3Igbm93ICovCisJaWYgKCEoZ2ZwX21hc2sgJiBfX0dGUF9GUykpCisJCXJldHVybjsKKworCWlmIChERUJVR19MT0NLU19XQVJOX09OKGlycXNfZGlzYWJsZWRfZmxhZ3MoZmxhZ3MpKSkKKwkJcmV0dXJuOworCisJbWFya19oZWxkX2xvY2tzKGN1cnIsIFJFQ0xBSU1fRlMpOworfQorCitzdGF0aWMgdm9pZCBjaGVja19mbGFncyh1bnNpZ25lZCBsb25nIGZsYWdzKTsKKwordm9pZCBsb2NrZGVwX3RyYWNlX2FsbG9jKGdmcF90IGdmcF9tYXNrKQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAodW5saWtlbHkoY3VycmVudC0+bG9ja2RlcF9yZWN1cnNpb24pKQorCQlyZXR1cm47CisKKwlyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOworCWNoZWNrX2ZsYWdzKGZsYWdzKTsKKwljdXJyZW50LT5sb2NrZGVwX3JlY3Vyc2lvbiA9IDE7CisJX19sb2NrZGVwX3RyYWNlX2FsbG9jKGdmcF9tYXNrLCBmbGFncyk7CisJY3VycmVudC0+bG9ja2RlcF9yZWN1cnNpb24gPSAwOworCXJhd19sb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7Cit9CisKIHN0YXRpYyBpbnQgbWFya19pcnFmbGFncyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIHN0cnVjdCBoZWxkX2xvY2sgKmhsb2NrKQogewogCS8qCkBAIC0yMzQ1LDE5ICsyMzMwLDM1IEBACiAJaWYgKCFobG9jay0+aGFyZGlycXNfb2ZmKSB7CiAJCWlmIChobG9jay0+cmVhZCkgewogCQkJaWYgKCFtYXJrX2xvY2soY3VyciwgaGxvY2ssCi0JCQkJCUxPQ0tfRU5BQkxFRF9IQVJESVJRU19SRUFEKSkKKwkJCQkJTE9DS19FTkFCTEVEX0hBUkRJUlFfUkVBRCkpCiAJCQkJcmV0dXJuIDA7CiAJCQlpZiAoY3Vyci0+c29mdGlycXNfZW5hYmxlZCkKIAkJCQlpZiAoIW1hcmtfbG9jayhjdXJyLCBobG9jaywKLQkJCQkJCUxPQ0tfRU5BQkxFRF9TT0ZUSVJRU19SRUFEKSkKKwkJCQkJCUxPQ0tfRU5BQkxFRF9TT0ZUSVJRX1JFQUQpKQogCQkJCQlyZXR1cm4gMDsKIAkJfSBlbHNlIHsKIAkJCWlmICghbWFya19sb2NrKGN1cnIsIGhsb2NrLAotCQkJCQlMT0NLX0VOQUJMRURfSEFSRElSUVMpKQorCQkJCQlMT0NLX0VOQUJMRURfSEFSRElSUSkpCiAJCQkJcmV0dXJuIDA7CiAJCQlpZiAoY3Vyci0+c29mdGlycXNfZW5hYmxlZCkKIAkJCQlpZiAoIW1hcmtfbG9jayhjdXJyLCBobG9jaywKLQkJCQkJCUxPQ0tfRU5BQkxFRF9TT0ZUSVJRUykpCisJCQkJCQlMT0NLX0VOQUJMRURfU09GVElSUSkpCisJCQkJCXJldHVybiAwOworCQl9CisJfQorCisJLyoKKwkgKiBXZSByZXVzZSB0aGUgaXJxIGNvbnRleHQgaW5mcmFzdHJ1Y3R1cmUgbW9yZSBicm9hZGx5IGFzIGEgZ2VuZXJhbAorCSAqIGNvbnRleHQgY2hlY2tpbmcgY29kZS4gVGhpcyB0ZXN0cyBHRlBfRlMgcmVjdXJzaW9uIChhIGxvY2sgdGFrZW4KKwkgKiBkdXJpbmcgcmVjbGFpbSBmb3IgYSBHRlBfRlMgYWxsb2NhdGlvbiBpcyBoZWxkIG92ZXIgYSBHRlBfRlMKKwkgKiBhbGxvY2F0aW9uKS4KKwkgKi8KKwlpZiAoIWhsb2NrLT50cnlsb2NrICYmIChjdXJyLT5sb2NrZGVwX3JlY2xhaW1fZ2ZwICYgX19HRlBfRlMpKSB7CisJCWlmIChobG9jay0+cmVhZCkgeworCQkJaWYgKCFtYXJrX2xvY2soY3VyciwgaGxvY2ssIExPQ0tfVVNFRF9JTl9SRUNMQUlNX0ZTX1JFQUQpKQorCQkJCQlyZXR1cm4gMDsKKwkJfSBlbHNlIHsKKwkJCWlmICghbWFya19sb2NrKGN1cnIsIGhsb2NrLCBMT0NLX1VTRURfSU5fUkVDTEFJTV9GUykpCiAJCQkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtMjQxMiw2ICsyNDEzLDEwIEBACiAJcmV0dXJuIDA7CiB9CiAKK3ZvaWQgbG9ja2RlcF90cmFjZV9hbGxvYyhnZnBfdCBnZnBfbWFzaykKK3sKK30KKwogI2VuZGlmCiAKIC8qCkBAIC0yNDQ1LDE0ICsyNDUwLDEzIEBACiAJCXJldHVybiAwOwogCiAJc3dpdGNoIChuZXdfYml0KSB7Ci0JY2FzZSBMT0NLX1VTRURfSU5fSEFSRElSUToKLQljYXNlIExPQ0tfVVNFRF9JTl9TT0ZUSVJROgotCWNhc2UgTE9DS19VU0VEX0lOX0hBUkRJUlFfUkVBRDoKLQljYXNlIExPQ0tfVVNFRF9JTl9TT0ZUSVJRX1JFQUQ6Ci0JY2FzZSBMT0NLX0VOQUJMRURfSEFSRElSUVM6Ci0JY2FzZSBMT0NLX0VOQUJMRURfU09GVElSUVM6Ci0JY2FzZSBMT0NLX0VOQUJMRURfSEFSRElSUVNfUkVBRDoKLQljYXNlIExPQ0tfRU5BQkxFRF9TT0ZUSVJRU19SRUFEOgorI2RlZmluZSBMT0NLREVQX1NUQVRFKF9fU1RBVEUpCQkJXAorCWNhc2UgTE9DS19VU0VEX0lOXyMjX19TVEFURToJCVwKKwljYXNlIExPQ0tfVVNFRF9JTl8jI19fU1RBVEUjI19SRUFEOglcCisJY2FzZSBMT0NLX0VOQUJMRURfIyNfX1NUQVRFOgkJXAorCWNhc2UgTE9DS19FTkFCTEVEXyMjX19TVEFURSMjX1JFQUQ6CisjaW5jbHVkZSAibG9ja2RlcF9zdGF0ZXMuaCIKKyN1bmRlZiBMT0NLREVQX1NUQVRFCiAJCXJldCA9IG1hcmtfbG9ja19pcnEoY3VyciwgdGhpcywgbmV3X2JpdCk7CiAJCWlmICghcmV0KQogCQkJcmV0dXJuIDA7CkBAIC0yOTY2LDYgKzI5NzAsMTYgQEAKIH0KIEVYUE9SVF9TWU1CT0xfR1BMKGxvY2tfcmVsZWFzZSk7CiAKK3ZvaWQgbG9ja2RlcF9zZXRfY3VycmVudF9yZWNsYWltX3N0YXRlKGdmcF90IGdmcF9tYXNrKQoreworCWN1cnJlbnQtPmxvY2tkZXBfcmVjbGFpbV9nZnAgPSBnZnBfbWFzazsKK30KKwordm9pZCBsb2NrZGVwX2NsZWFyX2N1cnJlbnRfcmVjbGFpbV9zdGF0ZSh2b2lkKQoreworCWN1cnJlbnQtPmxvY2tkZXBfcmVjbGFpbV9nZnAgPSAwOworfQorCiAjaWZkZWYgQ09ORklHX0xPQ0tfU1RBVAogc3RhdGljIGludAogcHJpbnRfbG9ja19jb250ZW50aW9uX2J1ZyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnIsIHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywKZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NrZGVwX2ludGVybmFscy5oIGIva2VybmVsL2xvY2tkZXBfaW50ZXJuYWxzLmgKaW5kZXggNTZiMTk2OS4uYTJjYzdlOSAxMDA2NDQKLS0tIGEva2VybmVsL2xvY2tkZXBfaW50ZXJuYWxzLmgKKysrIGIva2VybmVsL2xvY2tkZXBfaW50ZXJuYWxzLmgKQEAgLTcsNiArNyw0NSBAQAogICovCiAKIC8qCisgKiBMb2NrLWNsYXNzIHVzYWdlLXN0YXRlIGJpdHM6CisgKi8KK2VudW0gbG9ja191c2FnZV9iaXQgeworI2RlZmluZSBMT0NLREVQX1NUQVRFKF9fU1RBVEUpCQlcCisJTE9DS19VU0VEX0lOXyMjX19TVEFURSwJCVwKKwlMT0NLX1VTRURfSU5fIyNfX1NUQVRFIyNfUkVBRCwJXAorCUxPQ0tfRU5BQkxFRF8jI19fU1RBVEUsCQlcCisJTE9DS19FTkFCTEVEXyMjX19TVEFURSMjX1JFQUQsCisjaW5jbHVkZSAibG9ja2RlcF9zdGF0ZXMuaCIKKyN1bmRlZiBMT0NLREVQX1NUQVRFCisJTE9DS19VU0VELAorCUxPQ0tfVVNBR0VfU1RBVEVTCit9OworCisvKgorICogVXNhZ2Utc3RhdGUgYml0bWFza3M6CisgKi8KKyNkZWZpbmUgX19MT0NLRihfX1NUQVRFKQlMT0NLRl8jI19fU1RBVEUgPSAoMSA8PCBMT0NLXyMjX19TVEFURSksCisKK2VudW0geworI2RlZmluZSBMT0NLREVQX1NUQVRFKF9fU1RBVEUpCQkJCQkJXAorCV9fTE9DS0YoVVNFRF9JTl8jI19fU1RBVEUpCQkJCQlcCisJX19MT0NLRihVU0VEX0lOXyMjX19TVEFURSMjX1JFQUQpCQkJCVwKKwlfX0xPQ0tGKEVOQUJMRURfIyNfX1NUQVRFKQkJCQkJXAorCV9fTE9DS0YoRU5BQkxFRF8jI19fU1RBVEUjI19SRUFEKQorI2luY2x1ZGUgImxvY2tkZXBfc3RhdGVzLmgiCisjdW5kZWYgTE9DS0RFUF9TVEFURQorCV9fTE9DS0YoVVNFRCkKK307CisKKyNkZWZpbmUgTE9DS0ZfRU5BQkxFRF9JUlEgKExPQ0tGX0VOQUJMRURfSEFSRElSUSB8IExPQ0tGX0VOQUJMRURfU09GVElSUSkKKyNkZWZpbmUgTE9DS0ZfVVNFRF9JTl9JUlEgKExPQ0tGX1VTRURfSU5fSEFSRElSUSB8IExPQ0tGX1VTRURfSU5fU09GVElSUSkKKworI2RlZmluZSBMT0NLRl9FTkFCTEVEX0lSUV9SRUFEIFwKKwkJKExPQ0tGX0VOQUJMRURfSEFSRElSUV9SRUFEIHwgTE9DS0ZfRU5BQkxFRF9TT0ZUSVJRX1JFQUQpCisjZGVmaW5lIExPQ0tGX1VTRURfSU5fSVJRX1JFQUQgXAorCQkoTE9DS0ZfVVNFRF9JTl9IQVJESVJRX1JFQUQgfCBMT0NLRl9VU0VEX0lOX1NPRlRJUlFfUkVBRCkKKworLyoKICAqIE1BWF9MT0NLREVQX0VOVFJJRVMgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIGxvY2sgZGVwZW5kZW5jaWVzCiAgKiB3ZSB0cmFjay4KICAqCkBAIC0zMSw4ICs3MCwxMCBAQAogZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgYWxsX2xvY2tfY2xhc3NlczsKIGV4dGVybiBzdHJ1Y3QgbG9ja19jaGFpbiBsb2NrX2NoYWluc1tdOwogCi1leHRlcm4gdm9pZAotZ2V0X3VzYWdlX2NoYXJzKHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcywgY2hhciAqYzEsIGNoYXIgKmMyLCBjaGFyICpjMywgY2hhciAqYzQpOworI2RlZmluZSBMT0NLX1VTQUdFX0NIQVJTICgxK0xPQ0tfVVNBR0VfU1RBVEVTLzIpCisKK2V4dGVybiB2b2lkIGdldF91c2FnZV9jaGFycyhzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MsCisJCQkgICAgY2hhciB1c2FnZVtMT0NLX1VTQUdFX0NIQVJTXSk7CiAKIGV4dGVybiBjb25zdCBjaGFyICogX19nZXRfa2V5X25hbWUoc3RydWN0IGxvY2tkZXBfc3ViY2xhc3Nfa2V5ICprZXksIGNoYXIgKnN0cik7CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NrZGVwX3Byb2MuYyBiL2tlcm5lbC9sb2NrZGVwX3Byb2MuYwppbmRleCAxMzcxNmI4Li5kNzEzNWFhIDEwMDY0NAotLS0gYS9rZXJuZWwvbG9ja2RlcF9wcm9jLmMKKysrIGIva2VybmVsL2xvY2tkZXBfcHJvYy5jCkBAIC04NCw3ICs4NCw3IEBACiB7CiAJc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gdjsKIAlzdHJ1Y3QgbG9ja19saXN0ICplbnRyeTsKLQljaGFyIGMxLCBjMiwgYzMsIGM0OworCWNoYXIgdXNhZ2VbTE9DS19VU0FHRV9DSEFSU107CiAKIAlpZiAodiA9PSBTRVFfU1RBUlRfVE9LRU4pIHsKIAkJc2VxX3ByaW50ZihtLCAiYWxsIGxvY2sgY2xhc3NlczpcbiIpOwpAQCAtMTAwLDggKzEwMCw4IEBACiAJc2VxX3ByaW50ZihtLCAiIEJEOiU1bGQiLCBsb2NrZGVwX2NvdW50X2JhY2t3YXJkX2RlcHMoY2xhc3MpKTsKICNlbmRpZgogCi0JZ2V0X3VzYWdlX2NoYXJzKGNsYXNzLCAmYzEsICZjMiwgJmMzLCAmYzQpOwotCXNlcV9wcmludGYobSwgIiAlYyVjJWMlYyIsIGMxLCBjMiwgYzMsIGM0KTsKKwlnZXRfdXNhZ2VfY2hhcnMoY2xhc3MsIHVzYWdlKTsKKwlzZXFfcHJpbnRmKG0sICIgJXMiLCB1c2FnZSk7CiAKIAlzZXFfcHJpbnRmKG0sICI6ICIpOwogCXByaW50X25hbWUobSwgY2xhc3MpOwpAQCAtMzAwLDI3ICszMDAsMjcgQEAKIAkJCW5yX3VuY2F0ZWdvcml6ZWQrKzsKIAkJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfVVNFRF9JTl9JUlEpCiAJCQlucl9pcnFfc2FmZSsrOwotCQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9FTkFCTEVEX0lSUVMpCisJCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX0VOQUJMRURfSVJRKQogCQkJbnJfaXJxX3Vuc2FmZSsrOwogCQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9VU0VEX0lOX1NPRlRJUlEpCiAJCQlucl9zb2Z0aXJxX3NhZmUrKzsKLQkJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfRU5BQkxFRF9TT0ZUSVJRUykKKwkJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfRU5BQkxFRF9TT0ZUSVJRKQogCQkJbnJfc29mdGlycV91bnNhZmUrKzsKIAkJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfVVNFRF9JTl9IQVJESVJRKQogCQkJbnJfaGFyZGlycV9zYWZlKys7Ci0JCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX0VOQUJMRURfSEFSRElSUVMpCisJCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX0VOQUJMRURfSEFSRElSUSkKIAkJCW5yX2hhcmRpcnFfdW5zYWZlKys7CiAJCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX1VTRURfSU5fSVJRX1JFQUQpCiAJCQlucl9pcnFfcmVhZF9zYWZlKys7Ci0JCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX0VOQUJMRURfSVJRU19SRUFEKQorCQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9FTkFCTEVEX0lSUV9SRUFEKQogCQkJbnJfaXJxX3JlYWRfdW5zYWZlKys7CiAJCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX1VTRURfSU5fU09GVElSUV9SRUFEKQogCQkJbnJfc29mdGlycV9yZWFkX3NhZmUrKzsKLQkJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfRU5BQkxFRF9TT0ZUSVJRU19SRUFEKQorCQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9FTkFCTEVEX1NPRlRJUlFfUkVBRCkKIAkJCW5yX3NvZnRpcnFfcmVhZF91bnNhZmUrKzsKIAkJaWYgKGNsYXNzLT51c2FnZV9tYXNrICYgTE9DS0ZfVVNFRF9JTl9IQVJESVJRX1JFQUQpCiAJCQlucl9oYXJkaXJxX3JlYWRfc2FmZSsrOwotCQlpZiAoY2xhc3MtPnVzYWdlX21hc2sgJiBMT0NLRl9FTkFCTEVEX0hBUkRJUlFTX1JFQUQpCisJCWlmIChjbGFzcy0+dXNhZ2VfbWFzayAmIExPQ0tGX0VOQUJMRURfSEFSRElSUV9SRUFEKQogCQkJbnJfaGFyZGlycV9yZWFkX3Vuc2FmZSsrOwogCiAjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkcKQEAgLTYwMSw2ICs2MDEsMTAgQEAKIHN0YXRpYyB2b2lkIHNlcV9oZWFkZXIoc3RydWN0IHNlcV9maWxlICptKQogewogCXNlcV9wcmludGYobSwgImxvY2tfc3RhdCB2ZXJzaW9uIDAuM1xuIik7CisKKwlpZiAodW5saWtlbHkoIWRlYnVnX2xvY2tzKSkKKwkJc2VxX3ByaW50ZihtLCAiKldBUk5JTkcqIGxvY2sgZGVidWdnaW5nIGRpc2FibGVkISEgLSBwb3NzaWJseSBkdWUgdG8gYSBsb2NrZGVwIHdhcm5pbmdcbiIpOworCiAJc2VxX2xpbmUobSwgJy0nLCAwLCA0MCArIDEgKyAxMCAqICgxNCArIDEpKTsKIAlzZXFfcHJpbnRmKG0sICIlNDBzICUxNHMgJTE0cyAlMTRzICUxNHMgJTE0cyAlMTRzICUxNHMgJTE0cyAiCiAJCQkiJTE0cyAlMTRzXG4iLApkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tkZXBfc3RhdGVzLmggYi9rZXJuZWwvbG9ja2RlcF9zdGF0ZXMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTViMGNjCi0tLSAvZGV2L251bGwKKysrIGIva2VybmVsL2xvY2tkZXBfc3RhdGVzLmgKQEAgLTAsMCArMSw5IEBACisvKgorICogTG9ja2RlcCBzdGF0ZXMsCisgKgorICogcGxlYXNlIHVwZGF0ZSBYWFhfTE9DS19VU0FHRV9TVEFURVMgaW4gaW5jbHVkZS9saW51eC9sb2NrZGVwLmggd2hlbmV2ZXIKKyAqIHlvdSBhZGQgb25lLCBvciBjb21lIHVwIHdpdGggYSBuaWNlIGR5bmFtaWMgc29sdXRpb24uCisgKi8KK0xPQ0tERVBfU1RBVEUoSEFSRElSUSkKK0xPQ0tERVBfU1RBVEUoU09GVElSUSkKK0xPQ0tERVBfU1RBVEUoUkVDTEFJTV9GUykKZGlmZiAtLWdpdCBhL2tlcm5lbC9tdXRleC1kZWJ1Zy5jIGIva2VybmVsL211dGV4LWRlYnVnLmMKaW5kZXggMWQ5NDE2MC4uNTBkMDIyZSAxMDA2NDQKLS0tIGEva2VybmVsL211dGV4LWRlYnVnLmMKKysrIGIva2VybmVsL211dGV4LWRlYnVnLmMKQEAgLTI2LDExICsyNiw2IEBACiAvKgogICogTXVzdCBiZSBjYWxsZWQgd2l0aCBsb2NrLT53YWl0X2xvY2sgaGVsZC4KICAqLwotdm9pZCBkZWJ1Z19tdXRleF9zZXRfb3duZXIoc3RydWN0IG11dGV4ICpsb2NrLCBzdHJ1Y3QgdGhyZWFkX2luZm8gKm5ld19vd25lcikKLXsKLQlsb2NrLT5vd25lciA9IG5ld19vd25lcjsKLX0KLQogdm9pZCBkZWJ1Z19tdXRleF9sb2NrX2NvbW1vbihzdHJ1Y3QgbXV0ZXggKmxvY2ssIHN0cnVjdCBtdXRleF93YWl0ZXIgKndhaXRlcikKIHsKIAltZW1zZXQod2FpdGVyLCBNVVRFWF9ERUJVR19JTklULCBzaXplb2YoKndhaXRlcikpOwpAQCAtNTksNyArNTQsNiBAQAogCiAJLyogTWFyayB0aGUgY3VycmVudCB0aHJlYWQgYXMgYmxvY2tlZCBvbiB0aGUgbG9jazogKi8KIAl0aS0+dGFzay0+YmxvY2tlZF9vbiA9IHdhaXRlcjsKLQl3YWl0ZXItPmxvY2sgPSBsb2NrOwogfQogCiB2b2lkIG11dGV4X3JlbW92ZV93YWl0ZXIoc3RydWN0IG11dGV4ICpsb2NrLCBzdHJ1Y3QgbXV0ZXhfd2FpdGVyICp3YWl0ZXIsCkBAIC04Miw3ICs3Niw3IEBACiAJREVCVUdfTE9DS1NfV0FSTl9PTihsb2NrLT5tYWdpYyAhPSBsb2NrKTsKIAlERUJVR19MT0NLU19XQVJOX09OKGxvY2stPm93bmVyICE9IGN1cnJlbnRfdGhyZWFkX2luZm8oKSk7CiAJREVCVUdfTE9DS1NfV0FSTl9PTighbG9jay0+d2FpdF9saXN0LnByZXYgJiYgIWxvY2stPndhaXRfbGlzdC5uZXh0KTsKLQlERUJVR19MT0NLU19XQVJOX09OKGxvY2stPm93bmVyICE9IGN1cnJlbnRfdGhyZWFkX2luZm8oKSk7CisJbXV0ZXhfY2xlYXJfb3duZXIobG9jayk7CiB9CiAKIHZvaWQgZGVidWdfbXV0ZXhfaW5pdChzdHJ1Y3QgbXV0ZXggKmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsCkBAIC05NSw3ICs4OSw2IEBACiAJZGVidWdfY2hlY2tfbm9fbG9ja3NfZnJlZWQoKHZvaWQgKilsb2NrLCBzaXplb2YoKmxvY2spKTsKIAlsb2NrZGVwX2luaXRfbWFwKCZsb2NrLT5kZXBfbWFwLCBuYW1lLCBrZXksIDApOwogI2VuZGlmCi0JbG9jay0+b3duZXIgPSBOVUxMOwogCWxvY2stPm1hZ2ljID0gbG9jazsKIH0KIApkaWZmIC0tZ2l0IGEva2VybmVsL211dGV4LWRlYnVnLmggYi9rZXJuZWwvbXV0ZXgtZGVidWcuaAppbmRleCBiYWJmYmRmLi42YjJkNzM1IDEwMDY0NAotLS0gYS9rZXJuZWwvbXV0ZXgtZGVidWcuaAorKysgYi9rZXJuZWwvbXV0ZXgtZGVidWcuaApAQCAtMTMsMTQgKzEzLDYgQEAKIC8qCiAgKiBUaGlzIG11c3QgYmUgY2FsbGVkIHdpdGggbG9jay0+d2FpdF9sb2NrIGhlbGQuCiAgKi8KLWV4dGVybiB2b2lkCi1kZWJ1Z19tdXRleF9zZXRfb3duZXIoc3RydWN0IG11dGV4ICpsb2NrLCBzdHJ1Y3QgdGhyZWFkX2luZm8gKm5ld19vd25lcik7Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19tdXRleF9jbGVhcl9vd25lcihzdHJ1Y3QgbXV0ZXggKmxvY2spCi17Ci0JbG9jay0+b3duZXIgPSBOVUxMOwotfQotCiBleHRlcm4gdm9pZCBkZWJ1Z19tdXRleF9sb2NrX2NvbW1vbihzdHJ1Y3QgbXV0ZXggKmxvY2ssCiAJCQkJICAgIHN0cnVjdCBtdXRleF93YWl0ZXIgKndhaXRlcik7CiBleHRlcm4gdm9pZCBkZWJ1Z19tdXRleF93YWtlX3dhaXRlcihzdHJ1Y3QgbXV0ZXggKmxvY2ssCkBAIC0zNSw2ICsyNywxNiBAQAogZXh0ZXJuIHZvaWQgZGVidWdfbXV0ZXhfaW5pdChzdHJ1Y3QgbXV0ZXggKmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsCiAJCQkgICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KTsKIAorc3RhdGljIGlubGluZSB2b2lkIG11dGV4X3NldF9vd25lcihzdHJ1Y3QgbXV0ZXggKmxvY2spCit7CisJbG9jay0+b3duZXIgPSBjdXJyZW50X3RocmVhZF9pbmZvKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdXRleF9jbGVhcl9vd25lcihzdHJ1Y3QgbXV0ZXggKmxvY2spCit7CisJbG9jay0+b3duZXIgPSBOVUxMOworfQorCiAjZGVmaW5lIHNwaW5fbG9ja19tdXRleChsb2NrLCBmbGFncykJCQlcCiAJZG8gewkJCQkJCVwKIAkJc3RydWN0IG11dGV4ICpsID0gY29udGFpbmVyX29mKGxvY2ssIHN0cnVjdCBtdXRleCwgd2FpdF9sb2NrKTsgXApkaWZmIC0tZ2l0IGEva2VybmVsL211dGV4LmMgYi9rZXJuZWwvbXV0ZXguYwppbmRleCA0ZjQ1ZDRiLi41ZDc5NzgxIDEwMDY0NAotLS0gYS9rZXJuZWwvbXV0ZXguYworKysgYi9rZXJuZWwvbXV0ZXguYwpAQCAtMTAsNiArMTAsMTEgQEAKICAqIE1hbnkgdGhhbmtzIHRvIEFyamFuIHZhbiBkZSBWZW4sIFRob21hcyBHbGVpeG5lciwgU3RldmVuIFJvc3RlZHQgYW5kCiAgKiBEYXZpZCBIb3dlbGxzIGZvciBzdWdnZXN0aW9ucyBhbmQgaW1wcm92ZW1lbnRzLgogICoKKyAqICAtIEFkYXB0aXZlIHNwaW5uaW5nIGZvciBtdXRleGVzIGJ5IFBldGVyIFppamxzdHJhLiAoUG9ydGVkIHRvIG1haW5saW5lCisgKiAgICBmcm9tIHRoZSAtcnQgdHJlZSwgd2hlcmUgaXQgd2FzIG9yaWdpbmFsbHkgaW1wbGVtZW50ZWQgZm9yIHJ0bXV0ZXhlcworICogICAgYnkgU3RldmVuIFJvc3RlZHQsIGJhc2VkIG9uIHdvcmsgYnkgR3JlZ29yeSBIYXNraW5zLCBQZXRlciBNb3JyZWFsZQorICogICAgYW5kIFN2ZW4gRGlldHJpY2guCisgKgogICogQWxzbyBzZWUgRG9jdW1lbnRhdGlvbi9tdXRleC1kZXNpZ24udHh0LgogICovCiAjaW5jbHVkZSA8bGludXgvbXV0ZXguaD4KQEAgLTQ2LDYgKzUxLDcgQEAKIAlhdG9taWNfc2V0KCZsb2NrLT5jb3VudCwgMSk7CiAJc3Bpbl9sb2NrX2luaXQoJmxvY2stPndhaXRfbG9jayk7CiAJSU5JVF9MSVNUX0hFQUQoJmxvY2stPndhaXRfbGlzdCk7CisJbXV0ZXhfY2xlYXJfb3duZXIobG9jayk7CiAKIAlkZWJ1Z19tdXRleF9pbml0KGxvY2ssIG5hbWUsIGtleSk7CiB9CkBAIC05MSw2ICs5Nyw3IEBACiAJICogJ3VubG9ja2VkJyBpbnRvICdsb2NrZWQnIHN0YXRlLgogCSAqLwogCV9fbXV0ZXhfZmFzdHBhdGhfbG9jaygmbG9jay0+Y291bnQsIF9fbXV0ZXhfbG9ja19zbG93cGF0aCk7CisJbXV0ZXhfc2V0X293bmVyKGxvY2spOwogfQogCiBFWFBPUlRfU1lNQk9MKG11dGV4X2xvY2spOwpAQCAtMTE1LDYgKzEyMiwxNCBAQAogCSAqIFRoZSB1bmxvY2tpbmcgZmFzdHBhdGggaXMgdGhlIDAtPjEgdHJhbnNpdGlvbiBmcm9tICdsb2NrZWQnCiAJICogaW50byAndW5sb2NrZWQnIHN0YXRlOgogCSAqLworI2lmbmRlZiBDT05GSUdfREVCVUdfTVVURVhFUworCS8qCisJICogV2hlbiBkZWJ1Z2dpbmcgaXMgZW5hYmxlZCB3ZSBtdXN0IG5vdCBjbGVhciB0aGUgb3duZXIgYmVmb3JlIHRpbWUsCisJICogdGhlIHNsb3cgcGF0aCB3aWxsIGFsd2F5cyBiZSB0YWtlbiwgYW5kIHRoYXQgY2xlYXJzIHRoZSBvd25lciBmaWVsZAorCSAqIGFmdGVyIHZlcmlmeWluZyB0aGF0IGl0IHdhcyBpbmRlZWQgY3VycmVudC4KKwkgKi8KKwltdXRleF9jbGVhcl9vd25lcihsb2NrKTsKKyNlbmRpZgogCV9fbXV0ZXhfZmFzdHBhdGhfdW5sb2NrKCZsb2NrLT5jb3VudCwgX19tdXRleF91bmxvY2tfc2xvd3BhdGgpOwogfQogCkBAIC0xMjksMjEgKzE0NCw3NSBAQAogewogCXN0cnVjdCB0YXNrX3N0cnVjdCAqdGFzayA9IGN1cnJlbnQ7CiAJc3RydWN0IG11dGV4X3dhaXRlciB3YWl0ZXI7Ci0JdW5zaWduZWQgaW50IG9sZF92YWw7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAorCXByZWVtcHRfZGlzYWJsZSgpOworCW11dGV4X2FjcXVpcmUoJmxvY2stPmRlcF9tYXAsIHN1YmNsYXNzLCAwLCBpcCk7CisjaWYgZGVmaW5lZChDT05GSUdfU01QKSAmJiAhZGVmaW5lZChDT05GSUdfREVCVUdfTVVURVhFUykKKwkvKgorCSAqIE9wdGltaXN0aWMgc3Bpbm5pbmcuCisJICoKKwkgKiBXZSB0cnkgdG8gc3BpbiBmb3IgYWNxdWlzaXRpb24gd2hlbiB3ZSBmaW5kIHRoYXQgdGhlcmUgYXJlIG5vCisJICogcGVuZGluZyB3YWl0ZXJzIGFuZCB0aGUgbG9jayBvd25lciBpcyBjdXJyZW50bHkgcnVubmluZyBvbiBhCisJICogKGRpZmZlcmVudCkgQ1BVLgorCSAqCisJICogVGhlIHJhdGlvbmFsZSBpcyB0aGF0IGlmIHRoZSBsb2NrIG93bmVyIGlzIHJ1bm5pbmcsIGl0IGlzIGxpa2VseSB0bworCSAqIHJlbGVhc2UgdGhlIGxvY2sgc29vbi4KKwkgKgorCSAqIFNpbmNlIHRoaXMgbmVlZHMgdGhlIGxvY2sgb3duZXIsIGFuZCB0aGlzIG11dGV4IGltcGxlbWVudGF0aW9uCisJICogZG9lc24ndCB0cmFjayB0aGUgb3duZXIgYXRvbWljYWxseSBpbiB0aGUgbG9jayBmaWVsZCwgd2UgbmVlZCB0bworCSAqIHRyYWNrIGl0IG5vbi1hdG9taWNhbGx5LgorCSAqCisJICogV2UgY2FuJ3QgZG8gdGhpcyBmb3IgREVCVUdfTVVURVhFUyBiZWNhdXNlIHRoYXQgcmVsaWVzIG9uIHdhaXRfbG9jaworCSAqIHRvIHNlcmlhbGl6ZSBldmVyeXRoaW5nLgorCSAqLworCisJZm9yICg7OykgeworCQlzdHJ1Y3QgdGhyZWFkX2luZm8gKm93bmVyOworCisJCS8qCisJCSAqIElmIHRoZXJlJ3MgYW4gb3duZXIsIHdhaXQgZm9yIGl0IHRvIGVpdGhlcgorCQkgKiByZWxlYXNlIHRoZSBsb2NrIG9yIGdvIHRvIHNsZWVwLgorCQkgKi8KKwkJb3duZXIgPSBBQ0NFU1NfT05DRShsb2NrLT5vd25lcik7CisJCWlmIChvd25lciAmJiAhbXV0ZXhfc3Bpbl9vbl9vd25lcihsb2NrLCBvd25lcikpCisJCQlicmVhazsKKworCQlpZiAoYXRvbWljX2NtcHhjaGcoJmxvY2stPmNvdW50LCAxLCAwKSA9PSAxKSB7CisJCQlsb2NrX2FjcXVpcmVkKCZsb2NrLT5kZXBfbWFwLCBpcCk7CisJCQltdXRleF9zZXRfb3duZXIobG9jayk7CisJCQlwcmVlbXB0X2VuYWJsZSgpOworCQkJcmV0dXJuIDA7CisJCX0KKworCQkvKgorCQkgKiBXaGVuIHRoZXJlJ3Mgbm8gb3duZXIsIHdlIG1pZ2h0IGhhdmUgcHJlZW1wdGVkIGJldHdlZW4gdGhlCisJCSAqIG93bmVyIGFjcXVpcmluZyB0aGUgbG9jayBhbmQgc2V0dGluZyB0aGUgb3duZXIgZmllbGQuIElmCisJCSAqIHdlJ3JlIGFuIFJUIHRhc2sgdGhhdCB3aWxsIGxpdmUtbG9jayBiZWNhdXNlIHdlIHdvbid0IGxldAorCQkgKiB0aGUgb3duZXIgY29tcGxldGUuCisJCSAqLworCQlpZiAoIW93bmVyICYmIChuZWVkX3Jlc2NoZWQoKSB8fCBydF90YXNrKHRhc2spKSkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIFRoZSBjcHVfcmVsYXgoKSBjYWxsIGlzIGEgY29tcGlsZXIgYmFycmllciB3aGljaCBmb3JjZXMKKwkJICogZXZlcnl0aGluZyBpbiB0aGlzIGxvb3AgdG8gYmUgcmUtbG9hZGVkLiBXZSBkb24ndCBuZWVkCisJCSAqIG1lbW9yeSBiYXJyaWVycyBhcyB3ZSdsbCBldmVudHVhbGx5IG9ic2VydmUgdGhlIHJpZ2h0CisJCSAqIHZhbHVlcyBhdCB0aGUgY29zdCBvZiBhIGZldyBleHRyYSBzcGlucy4KKwkJICovCisJCWNwdV9yZWxheCgpOworCX0KKyNlbmRpZgogCXNwaW5fbG9ja19tdXRleCgmbG9jay0+d2FpdF9sb2NrLCBmbGFncyk7CiAKIAlkZWJ1Z19tdXRleF9sb2NrX2NvbW1vbihsb2NrLCAmd2FpdGVyKTsKLQltdXRleF9hY3F1aXJlKCZsb2NrLT5kZXBfbWFwLCBzdWJjbGFzcywgMCwgaXApOwogCWRlYnVnX211dGV4X2FkZF93YWl0ZXIobG9jaywgJndhaXRlciwgdGFza190aHJlYWRfaW5mbyh0YXNrKSk7CiAKIAkvKiBhZGQgd2FpdGluZyB0YXNrcyB0byB0aGUgZW5kIG9mIHRoZSB3YWl0cXVldWUgKEZJRk8pOiAqLwogCWxpc3RfYWRkX3RhaWwoJndhaXRlci5saXN0LCAmbG9jay0+d2FpdF9saXN0KTsKIAl3YWl0ZXIudGFzayA9IHRhc2s7CiAKLQlvbGRfdmFsID0gYXRvbWljX3hjaGcoJmxvY2stPmNvdW50LCAtMSk7Ci0JaWYgKG9sZF92YWwgPT0gMSkKKwlpZiAoYXRvbWljX3hjaGcoJmxvY2stPmNvdW50LCAtMSkgPT0gMSkKIAkJZ290byBkb25lOwogCiAJbG9ja19jb250ZW5kZWQoJmxvY2stPmRlcF9tYXAsIGlwKTsKQEAgLTE1OCw4ICsyMjcsNyBAQAogCQkgKiB0aGF0IHdoZW4gd2UgcmVsZWFzZSB0aGUgbG9jaywgd2UgcHJvcGVybHkgd2FrZSB1cCB0aGUKIAkJICogb3RoZXIgd2FpdGVyczoKIAkJICovCi0JCW9sZF92YWwgPSBhdG9taWNfeGNoZygmbG9jay0+Y291bnQsIC0xKTsKLQkJaWYgKG9sZF92YWwgPT0gMSkKKwkJaWYgKGF0b21pY194Y2hnKCZsb2NrLT5jb3VudCwgLTEpID09IDEpCiAJCQlicmVhazsKIAogCQkvKgpAQCAtMTczLDIxICsyNDEsMjIgQEAKIAkJCXNwaW5fdW5sb2NrX211dGV4KCZsb2NrLT53YWl0X2xvY2ssIGZsYWdzKTsKIAogCQkJZGVidWdfbXV0ZXhfZnJlZV93YWl0ZXIoJndhaXRlcik7CisJCQlwcmVlbXB0X2VuYWJsZSgpOwogCQkJcmV0dXJuIC1FSU5UUjsKIAkJfQogCQlfX3NldF90YXNrX3N0YXRlKHRhc2ssIHN0YXRlKTsKIAogCQkvKiBkaWRudCBnZXQgdGhlIGxvY2ssIGdvIHRvIHNsZWVwOiAqLwogCQlzcGluX3VubG9ja19tdXRleCgmbG9jay0+d2FpdF9sb2NrLCBmbGFncyk7Ci0JCXNjaGVkdWxlKCk7CisJCV9fc2NoZWR1bGUoKTsKIAkJc3Bpbl9sb2NrX211dGV4KCZsb2NrLT53YWl0X2xvY2ssIGZsYWdzKTsKIAl9CiAKIGRvbmU6CiAJbG9ja19hY3F1aXJlZCgmbG9jay0+ZGVwX21hcCwgaXApOwogCS8qIGdvdCB0aGUgbG9jayAtIHJlam9pY2UhICovCi0JbXV0ZXhfcmVtb3ZlX3dhaXRlcihsb2NrLCAmd2FpdGVyLCB0YXNrX3RocmVhZF9pbmZvKHRhc2spKTsKLQlkZWJ1Z19tdXRleF9zZXRfb3duZXIobG9jaywgdGFza190aHJlYWRfaW5mbyh0YXNrKSk7CisJbXV0ZXhfcmVtb3ZlX3dhaXRlcihsb2NrLCAmd2FpdGVyLCBjdXJyZW50X3RocmVhZF9pbmZvKCkpOworCW11dGV4X3NldF9vd25lcihsb2NrKTsKIAogCS8qIHNldCBpdCB0byAwIGlmIHRoZXJlIGFyZSBubyB3YWl0ZXJzIGxlZnQ6ICovCiAJaWYgKGxpa2VseShsaXN0X2VtcHR5KCZsb2NrLT53YWl0X2xpc3QpKSkKQEAgLTE5Niw2ICsyNjUsNyBAQAogCXNwaW5fdW5sb2NrX211dGV4KCZsb2NrLT53YWl0X2xvY2ssIGZsYWdzKTsKIAogCWRlYnVnX211dGV4X2ZyZWVfd2FpdGVyKCZ3YWl0ZXIpOworCXByZWVtcHRfZW5hYmxlKCk7CiAKIAlyZXR1cm4gMDsKIH0KQEAgLTIyMiw3ICsyOTIsOCBAQAogbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlX25lc3RlZChzdHJ1Y3QgbXV0ZXggKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcykKIHsKIAltaWdodF9zbGVlcCgpOwotCXJldHVybiBfX211dGV4X2xvY2tfY29tbW9uKGxvY2ssIFRBU0tfSU5URVJSVVBUSUJMRSwgc3ViY2xhc3MsIF9SRVRfSVBfKTsKKwlyZXR1cm4gX19tdXRleF9sb2NrX2NvbW1vbihsb2NrLCBUQVNLX0lOVEVSUlVQVElCTEUsCisJCQkJICAgc3ViY2xhc3MsIF9SRVRfSVBfKTsKIH0KIAogRVhQT1JUX1NZTUJPTF9HUEwobXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlX25lc3RlZCk7CkBAIC0yNjAsOCArMzMxLDYgQEAKIAkJd2FrZV91cF9wcm9jZXNzKHdhaXRlci0+dGFzayk7CiAJfQogCi0JZGVidWdfbXV0ZXhfY2xlYXJfb3duZXIobG9jayk7Ci0KIAlzcGluX3VubG9ja19tdXRleCgmbG9jay0+d2FpdF9sb2NrLCBmbGFncyk7CiB9CiAKQEAgLTI5OCwxOCArMzY3LDMwIEBACiAgKi8KIGludCBfX3NjaGVkIG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZShzdHJ1Y3QgbXV0ZXggKmxvY2spCiB7CisJaW50IHJldDsKKwogCW1pZ2h0X3NsZWVwKCk7Ci0JcmV0dXJuIF9fbXV0ZXhfZmFzdHBhdGhfbG9ja19yZXR2YWwKKwlyZXQgPSAgX19tdXRleF9mYXN0cGF0aF9sb2NrX3JldHZhbAogCQkJKCZsb2NrLT5jb3VudCwgX19tdXRleF9sb2NrX2ludGVycnVwdGlibGVfc2xvd3BhdGgpOworCWlmICghcmV0KQorCQltdXRleF9zZXRfb3duZXIobG9jayk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBFWFBPUlRfU1lNQk9MKG11dGV4X2xvY2tfaW50ZXJydXB0aWJsZSk7CiAKIGludCBfX3NjaGVkIG11dGV4X2xvY2tfa2lsbGFibGUoc3RydWN0IG11dGV4ICpsb2NrKQogeworCWludCByZXQ7CisKIAltaWdodF9zbGVlcCgpOwotCXJldHVybiBfX211dGV4X2Zhc3RwYXRoX2xvY2tfcmV0dmFsCisJcmV0ID0gX19tdXRleF9mYXN0cGF0aF9sb2NrX3JldHZhbAogCQkJKCZsb2NrLT5jb3VudCwgX19tdXRleF9sb2NrX2tpbGxhYmxlX3Nsb3dwYXRoKTsKKwlpZiAoIXJldCkKKwkJbXV0ZXhfc2V0X293bmVyKGxvY2spOworCisJcmV0dXJuIHJldDsKIH0KIEVYUE9SVF9TWU1CT0wobXV0ZXhfbG9ja19raWxsYWJsZSk7CiAKQEAgLTM1Miw5ICs0MzMsMTAgQEAKIAogCXByZXYgPSBhdG9taWNfeGNoZygmbG9jay0+Y291bnQsIC0xKTsKIAlpZiAobGlrZWx5KHByZXYgPT0gMSkpIHsKLQkJZGVidWdfbXV0ZXhfc2V0X293bmVyKGxvY2ssIGN1cnJlbnRfdGhyZWFkX2luZm8oKSk7CisJCW11dGV4X3NldF9vd25lcihsb2NrKTsKIAkJbXV0ZXhfYWNxdWlyZSgmbG9jay0+ZGVwX21hcCwgMCwgMSwgX1JFVF9JUF8pOwogCX0KKwogCS8qIFNldCBpdCBiYWNrIHRvIDAgaWYgdGhlcmUgYXJlIG5vIHdhaXRlcnM6ICovCiAJaWYgKGxpa2VseShsaXN0X2VtcHR5KCZsb2NrLT53YWl0X2xpc3QpKSkKIAkJYXRvbWljX3NldCgmbG9jay0+Y291bnQsIDApOwpAQCAtMzgwLDggKzQ2MiwxMyBAQAogICovCiBpbnQgX19zY2hlZCBtdXRleF90cnlsb2NrKHN0cnVjdCBtdXRleCAqbG9jaykKIHsKLQlyZXR1cm4gX19tdXRleF9mYXN0cGF0aF90cnlsb2NrKCZsb2NrLT5jb3VudCwKLQkJCQkJX19tdXRleF90cnlsb2NrX3Nsb3dwYXRoKTsKKwlpbnQgcmV0OworCisJcmV0ID0gX19tdXRleF9mYXN0cGF0aF90cnlsb2NrKCZsb2NrLT5jb3VudCwgX19tdXRleF90cnlsb2NrX3Nsb3dwYXRoKTsKKwlpZiAocmV0KQorCQltdXRleF9zZXRfb3duZXIobG9jayk7CisKKwlyZXR1cm4gcmV0OwogfQogCiBFWFBPUlRfU1lNQk9MKG11dGV4X3RyeWxvY2spOwpkaWZmIC0tZ2l0IGEva2VybmVsL211dGV4LmggYi9rZXJuZWwvbXV0ZXguaAppbmRleCBhMDc1ZGFmLi42NzU3OGNhIDEwMDY0NAotLS0gYS9rZXJuZWwvbXV0ZXguaAorKysgYi9rZXJuZWwvbXV0ZXguaApAQCAtMTYsOCArMTYsMjYgQEAKICNkZWZpbmUgbXV0ZXhfcmVtb3ZlX3dhaXRlcihsb2NrLCB3YWl0ZXIsIHRpKSBcCiAJCV9fbGlzdF9kZWwoKHdhaXRlciktPmxpc3QucHJldiwgKHdhaXRlciktPmxpc3QubmV4dCkKIAotI2RlZmluZSBkZWJ1Z19tdXRleF9zZXRfb3duZXIobG9jaywgbmV3X293bmVyKQkJZG8geyB9IHdoaWxlICgwKQotI2RlZmluZSBkZWJ1Z19tdXRleF9jbGVhcl9vd25lcihsb2NrKQkJCWRvIHsgfSB3aGlsZSAoMCkKKyNpZmRlZiBDT05GSUdfU01QCitzdGF0aWMgaW5saW5lIHZvaWQgbXV0ZXhfc2V0X293bmVyKHN0cnVjdCBtdXRleCAqbG9jaykKK3sKKwlsb2NrLT5vd25lciA9IGN1cnJlbnRfdGhyZWFkX2luZm8oKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIG11dGV4X2NsZWFyX293bmVyKHN0cnVjdCBtdXRleCAqbG9jaykKK3sKKwlsb2NrLT5vd25lciA9IE5VTEw7Cit9CisjZWxzZQorc3RhdGljIGlubGluZSB2b2lkIG11dGV4X3NldF9vd25lcihzdHJ1Y3QgbXV0ZXggKmxvY2spCit7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBtdXRleF9jbGVhcl9vd25lcihzdHJ1Y3QgbXV0ZXggKmxvY2spCit7Cit9CisjZW5kaWYKKwogI2RlZmluZSBkZWJ1Z19tdXRleF93YWtlX3dhaXRlcihsb2NrLCB3YWl0ZXIpCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGRlYnVnX211dGV4X2ZyZWVfd2FpdGVyKHdhaXRlcikJCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIGRlYnVnX211dGV4X2FkZF93YWl0ZXIobG9jaywgd2FpdGVyLCB0aSkJZG8geyB9IHdoaWxlICgwKQpkaWZmIC0tZ2l0IGEva2VybmVsL3Bvd2VyL2Rpc2suYyBiL2tlcm5lbC9wb3dlci9kaXNrLmMKaW5kZXggNGE0YTIwNi4uZTg4NmQxMyAxMDA2NDQKLS0tIGEva2VybmVsL3Bvd2VyL2Rpc2suYworKysgYi9rZXJuZWwvcG93ZXIvZGlzay5jCkBAIC0yMTQsNyArMjE0LDcgQEAKIAkJcmV0dXJuIGVycm9yOwogCiAJZGV2aWNlX3BtX2xvY2soKTsKLQlsb2NhbF9pcnFfZGlzYWJsZSgpOworCiAJLyogQXQgdGhpcyBwb2ludCwgZGV2aWNlX3N1c3BlbmQoKSBoYXMgYmVlbiBjYWxsZWQsIGJ1dCAqbm90KgogCSAqIGRldmljZV9wb3dlcl9kb3duKCkuIFdlICptdXN0KiBjYWxsIGRldmljZV9wb3dlcl9kb3duKCkgbm93LgogCSAqIE90aGVyd2lzZSwgZHJpdmVycyBmb3Igc29tZSBkZXZpY2VzIChlLmcuIGludGVycnVwdCBjb250cm9sbGVycykKQEAgLTIyNSwxMyArMjI1LDI1IEBACiAJaWYgKGVycm9yKSB7CiAJCXByaW50ayhLRVJOX0VSUiAiUE06IFNvbWUgZGV2aWNlcyBmYWlsZWQgdG8gcG93ZXIgZG93biwgIgogCQkJImFib3J0aW5nIGhpYmVybmF0aW9uXG4iKTsKLQkJZ290byBFbmFibGVfaXJxczsKKwkJZ290byBVbmxvY2s7CiAJfQorCisJZXJyb3IgPSBwbGF0Zm9ybV9wcmVfc25hcHNob3QocGxhdGZvcm1fbW9kZSk7CisJaWYgKGVycm9yIHx8IGhpYmVybmF0aW9uX3Rlc3QoVEVTVF9QTEFURk9STSkpCisJCWdvdG8gUGxhdGZvcm1fZmluaXNoOworCisJZXJyb3IgPSBkaXNhYmxlX25vbmJvb3RfY3B1cygpOworCWlmIChlcnJvciB8fCBoaWJlcm5hdGlvbl90ZXN0KFRFU1RfQ1BVUykKKwkgICAgfHwgaGliZXJuYXRpb25fdGVzdG1vZGUoSElCRVJOQVRJT05fVEVTVCkpCisJCWdvdG8gRW5hYmxlX2NwdXM7CisKKwlsb2NhbF9pcnFfZGlzYWJsZSgpOworCiAJc3lzZGV2X3N1c3BlbmQoUE1TR19GUkVFWkUpOwogCWlmIChlcnJvcikgewogCQlwcmludGsoS0VSTl9FUlIgIlBNOiBTb21lIGRldmljZXMgZmFpbGVkIHRvIHBvd2VyIGRvd24sICIKIAkJCSJhYm9ydGluZyBoaWJlcm5hdGlvblxuIik7Ci0JCWdvdG8gUG93ZXJfdXBfZGV2aWNlczsKKwkJZ290byBFbmFibGVfaXJxczsKIAl9CiAKIAlpZiAoaGliZXJuYXRpb25fdGVzdChURVNUX0NPUkUpKQpAQCAtMjQ3LDE3ICsyNTksMjggQEAKIAlyZXN0b3JlX3Byb2Nlc3Nvcl9zdGF0ZSgpOwogCWlmICghaW5fc3VzcGVuZCkKIAkJcGxhdGZvcm1fbGVhdmUocGxhdGZvcm1fbW9kZSk7CisKICBQb3dlcl91cDoKIAlzeXNkZXZfcmVzdW1lKCk7CiAJLyogTk9URTogIGRldmljZV9wb3dlcl91cCgpIGlzIGp1c3QgYSByZXN1bWUoKSBmb3IgZGV2aWNlcwogCSAqIHRoYXQgc3VzcGVuZGVkIHdpdGggaXJxcyBvZmYgLi4uIG5vIG92ZXJhbGwgcG93ZXJ1cC4KIAkgKi8KLSBQb3dlcl91cF9kZXZpY2VzOgotCWRldmljZV9wb3dlcl91cChpbl9zdXNwZW5kID8KLQkJKGVycm9yID8gUE1TR19SRUNPVkVSIDogUE1TR19USEFXKSA6IFBNU0dfUkVTVE9SRSk7CisKICBFbmFibGVfaXJxczoKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKyBFbmFibGVfY3B1czoKKwllbmFibGVfbm9uYm9vdF9jcHVzKCk7CisKKyBQbGF0Zm9ybV9maW5pc2g6CisJcGxhdGZvcm1fZmluaXNoKHBsYXRmb3JtX21vZGUpOworCisJZGV2aWNlX3Bvd2VyX3VwKGluX3N1c3BlbmQgPworCQkoZXJyb3IgPyBQTVNHX1JFQ09WRVIgOiBQTVNHX1RIQVcpIDogUE1TR19SRVNUT1JFKTsKKworIFVubG9jazoKIAlkZXZpY2VfcG1fdW5sb2NrKCk7CisKIAlyZXR1cm4gZXJyb3I7CiB9CiAKQEAgLTI5MSwyNSArMzE0LDkgQEAKIAlpZiAoaGliZXJuYXRpb25fdGVzdChURVNUX0RFVklDRVMpKQogCQlnb3RvIFJlY292ZXJfcGxhdGZvcm07CiAKLQllcnJvciA9IHBsYXRmb3JtX3ByZV9zbmFwc2hvdChwbGF0Zm9ybV9tb2RlKTsKLQlpZiAoZXJyb3IgfHwgaGliZXJuYXRpb25fdGVzdChURVNUX1BMQVRGT1JNKSkKLQkJZ290byBGaW5pc2g7CisJZXJyb3IgPSBjcmVhdGVfaW1hZ2UocGxhdGZvcm1fbW9kZSk7CisJLyogQ29udHJvbCByZXR1cm5zIGhlcmUgYWZ0ZXIgc3VjY2Vzc2Z1bCByZXN0b3JlICovCiAKLQllcnJvciA9IGRpc2FibGVfbm9uYm9vdF9jcHVzKCk7Ci0JaWYgKCFlcnJvcikgewotCQlpZiAoaGliZXJuYXRpb25fdGVzdChURVNUX0NQVVMpKQotCQkJZ290byBFbmFibGVfY3B1czsKLQotCQlpZiAoaGliZXJuYXRpb25fdGVzdG1vZGUoSElCRVJOQVRJT05fVEVTVCkpCi0JCQlnb3RvIEVuYWJsZV9jcHVzOwotCi0JCWVycm9yID0gY3JlYXRlX2ltYWdlKHBsYXRmb3JtX21vZGUpOwotCQkvKiBDb250cm9sIHJldHVybnMgaGVyZSBhZnRlciBzdWNjZXNzZnVsIHJlc3RvcmUgKi8KLQl9Ci0gRW5hYmxlX2NwdXM6Ci0JZW5hYmxlX25vbmJvb3RfY3B1cygpOwotIEZpbmlzaDoKLQlwbGF0Zm9ybV9maW5pc2gocGxhdGZvcm1fbW9kZSk7CiAgUmVzdW1lX2RldmljZXM6CiAJZGV2aWNlX3Jlc3VtZShpbl9zdXNwZW5kID8KIAkJKGVycm9yID8gUE1TR19SRUNPVkVSIDogUE1TR19USEFXKSA6IFBNU0dfUkVTVE9SRSk7CkBAIC0zMzEsMTkgKzMzOCwzMyBAQAogICoJa2VybmVsLgogICovCiAKLXN0YXRpYyBpbnQgcmVzdW1lX3RhcmdldF9rZXJuZWwodm9pZCkKK3N0YXRpYyBpbnQgcmVzdW1lX3RhcmdldF9rZXJuZWwoYm9vbCBwbGF0Zm9ybV9tb2RlKQogewogCWludCBlcnJvcjsKIAogCWRldmljZV9wbV9sb2NrKCk7Ci0JbG9jYWxfaXJxX2Rpc2FibGUoKTsKKwogCWVycm9yID0gZGV2aWNlX3Bvd2VyX2Rvd24oUE1TR19RVUlFU0NFKTsKIAlpZiAoZXJyb3IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJQTTogU29tZSBkZXZpY2VzIGZhaWxlZCB0byBwb3dlciBkb3duLCAiCiAJCQkiYWJvcnRpbmcgcmVzdW1lXG4iKTsKLQkJZ290byBFbmFibGVfaXJxczsKKwkJZ290byBVbmxvY2s7CiAJfQotCXN5c2Rldl9zdXNwZW5kKFBNU0dfUVVJRVNDRSk7CisKKwllcnJvciA9IHBsYXRmb3JtX3ByZV9yZXN0b3JlKHBsYXRmb3JtX21vZGUpOworCWlmIChlcnJvcikKKwkJZ290byBDbGVhbnVwOworCisJZXJyb3IgPSBkaXNhYmxlX25vbmJvb3RfY3B1cygpOworCWlmIChlcnJvcikKKwkJZ290byBFbmFibGVfY3B1czsKKworCWxvY2FsX2lycV9kaXNhYmxlKCk7CisKKwllcnJvciA9IHN5c2Rldl9zdXNwZW5kKFBNU0dfUVVJRVNDRSk7CisJaWYgKGVycm9yKQorCQlnb3RvIEVuYWJsZV9pcnFzOworCiAJLyogV2UnbGwgaWdub3JlIHNhdmVkIHN0YXRlLCBidXQgdGhpcyBnZXRzIHByZWVtcHQgY291bnQgKGV0YykgcmlnaHQgKi8KIAlzYXZlX3Byb2Nlc3Nvcl9zdGF0ZSgpOwogCWVycm9yID0gcmVzdG9yZV9oaWdobWVtKCk7CkBAIC0zNjYsMTEgKzM4NywyMyBAQAogCXN3c3VzcF9mcmVlKCk7CiAJcmVzdG9yZV9wcm9jZXNzb3Jfc3RhdGUoKTsKIAl0b3VjaF9zb2Z0bG9ja3VwX3dhdGNoZG9nKCk7CisKIAlzeXNkZXZfcmVzdW1lKCk7Ci0JZGV2aWNlX3Bvd2VyX3VwKFBNU0dfUkVDT1ZFUik7CisKICBFbmFibGVfaXJxczoKIAlsb2NhbF9pcnFfZW5hYmxlKCk7CisKKyBFbmFibGVfY3B1czoKKwllbmFibGVfbm9uYm9vdF9jcHVzKCk7CisKKyBDbGVhbnVwOgorCXBsYXRmb3JtX3Jlc3RvcmVfY2xlYW51cChwbGF0Zm9ybV9tb2RlKTsKKworCWRldmljZV9wb3dlcl91cChQTVNHX1JFQ09WRVIpOworCisgVW5sb2NrOgogCWRldmljZV9wbV91bmxvY2soKTsKKwogCXJldHVybiBlcnJvcjsKIH0KIApAQCAtMzkwLDE5ICs0MjMsMTAgQEAKIAlwbV9wcmVwYXJlX2NvbnNvbGUoKTsKIAlzdXNwZW5kX2NvbnNvbGUoKTsKIAllcnJvciA9IGRldmljZV9zdXNwZW5kKFBNU0dfUVVJRVNDRSk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIEZpbmlzaDsKLQotCWVycm9yID0gcGxhdGZvcm1fcHJlX3Jlc3RvcmUocGxhdGZvcm1fbW9kZSk7CiAJaWYgKCFlcnJvcikgewotCQllcnJvciA9IGRpc2FibGVfbm9uYm9vdF9jcHVzKCk7Ci0JCWlmICghZXJyb3IpCi0JCQllcnJvciA9IHJlc3VtZV90YXJnZXRfa2VybmVsKCk7Ci0JCWVuYWJsZV9ub25ib290X2NwdXMoKTsKKwkJZXJyb3IgPSByZXN1bWVfdGFyZ2V0X2tlcm5lbChwbGF0Zm9ybV9tb2RlKTsKKwkJZGV2aWNlX3Jlc3VtZShQTVNHX1JFQ09WRVIpOwogCX0KLQlwbGF0Zm9ybV9yZXN0b3JlX2NsZWFudXAocGxhdGZvcm1fbW9kZSk7Ci0JZGV2aWNlX3Jlc3VtZShQTVNHX1JFQ09WRVIpOwotIEZpbmlzaDoKIAlyZXN1bWVfY29uc29sZSgpOwogCXBtX3Jlc3RvcmVfY29uc29sZSgpOwogCXJldHVybiBlcnJvcjsKQEAgLTQzOCwzOCArNDYyLDQ2IEBACiAJCWdvdG8gUmVzdW1lX2RldmljZXM7CiAJfQogCisJZGV2aWNlX3BtX2xvY2soKTsKKworCWVycm9yID0gZGV2aWNlX3Bvd2VyX2Rvd24oUE1TR19ISUJFUk5BVEUpOworCWlmIChlcnJvcikKKwkJZ290byBVbmxvY2s7CisKIAllcnJvciA9IGhpYmVybmF0aW9uX29wcy0+cHJlcGFyZSgpOwogCWlmIChlcnJvcikKLQkJZ290byBSZXN1bWVfZGV2aWNlczsKKwkJZ290byBQbGF0b2ZybV9maW5pc2g7CiAKIAllcnJvciA9IGRpc2FibGVfbm9uYm9vdF9jcHVzKCk7CiAJaWYgKGVycm9yKQotCQlnb3RvIEZpbmlzaDsKKwkJZ290byBQbGF0b2ZybV9maW5pc2g7CiAKLQlkZXZpY2VfcG1fbG9jaygpOwogCWxvY2FsX2lycV9kaXNhYmxlKCk7Ci0JZXJyb3IgPSBkZXZpY2VfcG93ZXJfZG93bihQTVNHX0hJQkVSTkFURSk7Ci0JaWYgKCFlcnJvcikgewotCQlzeXNkZXZfc3VzcGVuZChQTVNHX0hJQkVSTkFURSk7Ci0JCWhpYmVybmF0aW9uX29wcy0+ZW50ZXIoKTsKLQkJLyogV2Ugc2hvdWxkIG5ldmVyIGdldCBoZXJlICovCi0JCXdoaWxlICgxKTsKLQl9Ci0JbG9jYWxfaXJxX2VuYWJsZSgpOwotCWRldmljZV9wbV91bmxvY2soKTsKKwlzeXNkZXZfc3VzcGVuZChQTVNHX0hJQkVSTkFURSk7CisJaGliZXJuYXRpb25fb3BzLT5lbnRlcigpOworCS8qIFdlIHNob3VsZCBuZXZlciBnZXQgaGVyZSAqLworCXdoaWxlICgxKTsKIAogCS8qCiAJICogV2UgZG9uJ3QgbmVlZCB0byByZWVuYWJsZSB0aGUgbm9uYm9vdCBDUFVzIG9yIHJlc3VtZSBjb25zb2xlcywgc2luY2UKIAkgKiB0aGUgc3lzdGVtIGlzIGdvaW5nIHRvIGJlIGhhbHRlZCBhbnl3YXkuCiAJICovCi0gRmluaXNoOgorIFBsYXRvZnJtX2ZpbmlzaDoKIAloaWJlcm5hdGlvbl9vcHMtPmZpbmlzaCgpOworCisJZGV2aWNlX3Bvd2VyX3VwKFBNU0dfUkVTVE9SRSk7CisKKyBVbmxvY2s6CisJZGV2aWNlX3BtX3VubG9jaygpOworCiAgUmVzdW1lX2RldmljZXM6CiAJZW50ZXJpbmdfcGxhdGZvcm1faGliZXJuYXRpb24gPSBmYWxzZTsKIAlkZXZpY2VfcmVzdW1lKFBNU0dfUkVTVE9SRSk7CiAJcmVzdW1lX2NvbnNvbGUoKTsKKwogIENsb3NlOgogCWhpYmVybmF0aW9uX29wcy0+ZW5kKCk7CisKIAlyZXR1cm4gZXJyb3I7CiB9CiAKZGlmZiAtLWdpdCBhL2tlcm5lbC9wb3dlci9tYWluLmMgYi9rZXJuZWwvcG93ZXIvbWFpbi5jCmluZGV4IGM5NjMyZjguLmYxNzJmNDEgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9wb3dlci9tYWluLmMKKysrIGIva2VybmVsL3Bvd2VyL21haW4uYwpAQCAtMjg3LDE3ICsyODcsMzIgQEAKICAqLwogc3RhdGljIGludCBzdXNwZW5kX2VudGVyKHN1c3BlbmRfc3RhdGVfdCBzdGF0ZSkKIHsKLQlpbnQgZXJyb3IgPSAwOworCWludCBlcnJvcjsKIAogCWRldmljZV9wbV9sb2NrKCk7Ci0JYXJjaF9zdXNwZW5kX2Rpc2FibGVfaXJxcygpOwotCUJVR19PTighaXJxc19kaXNhYmxlZCgpKTsKIAotCWlmICgoZXJyb3IgPSBkZXZpY2VfcG93ZXJfZG93bihQTVNHX1NVU1BFTkQpKSkgeworCWVycm9yID0gZGV2aWNlX3Bvd2VyX2Rvd24oUE1TR19TVVNQRU5EKTsKKwlpZiAoZXJyb3IpIHsKIAkJcHJpbnRrKEtFUk5fRVJSICJQTTogU29tZSBkZXZpY2VzIGZhaWxlZCB0byBwb3dlciBkb3duXG4iKTsKIAkJZ290byBEb25lOwogCX0KIAorCWlmIChzdXNwZW5kX29wcy0+cHJlcGFyZSkgeworCQllcnJvciA9IHN1c3BlbmRfb3BzLT5wcmVwYXJlKCk7CisJCWlmIChlcnJvcikKKwkJCWdvdG8gUG93ZXJfdXBfZGV2aWNlczsKKwl9CisKKwlpZiAoc3VzcGVuZF90ZXN0KFRFU1RfUExBVEZPUk0pKQorCQlnb3RvIFBsYXRmcm9tX2ZpbmlzaDsKKworCWVycm9yID0gZGlzYWJsZV9ub25ib290X2NwdXMoKTsKKwlpZiAoZXJyb3IgfHwgc3VzcGVuZF90ZXN0KFRFU1RfQ1BVUykpCisJCWdvdG8gRW5hYmxlX2NwdXM7CisKKwlhcmNoX3N1c3BlbmRfZGlzYWJsZV9pcnFzKCk7CisJQlVHX09OKCFpcnFzX2Rpc2FibGVkKCkpOworCiAJZXJyb3IgPSBzeXNkZXZfc3VzcGVuZChQTVNHX1NVU1BFTkQpOwogCWlmICghZXJyb3IpIHsKIAkJaWYgKCFzdXNwZW5kX3Rlc3QoVEVTVF9DT1JFKSkKQEAgLTMwNSwxMSArMzIwLDIyIEBACiAJCXN5c2Rldl9yZXN1bWUoKTsKIAl9CiAKLQlkZXZpY2VfcG93ZXJfdXAoUE1TR19SRVNVTUUpOwotIERvbmU6CiAJYXJjaF9zdXNwZW5kX2VuYWJsZV9pcnFzKCk7CiAJQlVHX09OKGlycXNfZGlzYWJsZWQoKSk7CisKKyBFbmFibGVfY3B1czoKKwllbmFibGVfbm9uYm9vdF9jcHVzKCk7CisKKyBQbGF0ZnJvbV9maW5pc2g6CisJaWYgKHN1c3BlbmRfb3BzLT5maW5pc2gpCisJCXN1c3BlbmRfb3BzLT5maW5pc2goKTsKKworIFBvd2VyX3VwX2RldmljZXM6CisJZGV2aWNlX3Bvd2VyX3VwKFBNU0dfUkVTVU1FKTsKKworIERvbmU6CiAJZGV2aWNlX3BtX3VubG9jaygpOworCiAJcmV0dXJuIGVycm9yOwogfQogCkBAIC0zNDEsMjMgKzM2Nyw4IEBACiAJaWYgKHN1c3BlbmRfdGVzdChURVNUX0RFVklDRVMpKQogCQlnb3RvIFJlY292ZXJfcGxhdGZvcm07CiAKLQlpZiAoc3VzcGVuZF9vcHMtPnByZXBhcmUpIHsKLQkJZXJyb3IgPSBzdXNwZW5kX29wcy0+cHJlcGFyZSgpOwotCQlpZiAoZXJyb3IpCi0JCQlnb3RvIFJlc3VtZV9kZXZpY2VzOwotCX0KKwlzdXNwZW5kX2VudGVyKHN0YXRlKTsKIAotCWlmIChzdXNwZW5kX3Rlc3QoVEVTVF9QTEFURk9STSkpCi0JCWdvdG8gRmluaXNoOwotCi0JZXJyb3IgPSBkaXNhYmxlX25vbmJvb3RfY3B1cygpOwotCWlmICghZXJyb3IgJiYgIXN1c3BlbmRfdGVzdChURVNUX0NQVVMpKQotCQlzdXNwZW5kX2VudGVyKHN0YXRlKTsKLQotCWVuYWJsZV9ub25ib290X2NwdXMoKTsKLSBGaW5pc2g6Ci0JaWYgKHN1c3BlbmRfb3BzLT5maW5pc2gpCi0JCXN1c3BlbmRfb3BzLT5maW5pc2goKTsKICBSZXN1bWVfZGV2aWNlczoKIAlzdXNwZW5kX3Rlc3Rfc3RhcnQoKTsKIAlkZXZpY2VfcmVzdW1lKFBNU0dfUkVTVU1FKTsKZGlmZiAtLWdpdCBhL2tlcm5lbC9zY2hlZC5jIGIva2VybmVsL3NjaGVkLmMKaW5kZXggNTc1N2UwMy4uMTk2ZDQ4YiAxMDA2NDQKLS0tIGEva2VybmVsL3NjaGVkLmMKKysrIGIva2VybmVsL3NjaGVkLmMKQEAgLTQ5NDIsMTUgKzQ5NDIsMTMgQEAKIC8qCiAgKiBzY2hlZHVsZSgpIGlzIHRoZSBtYWluIHNjaGVkdWxlciBmdW5jdGlvbi4KICAqLwotYXNtbGlua2FnZSB2b2lkIF9fc2NoZWQgc2NoZWR1bGUodm9pZCkKK2FzbWxpbmthZ2Ugdm9pZCBfX3NjaGVkIF9fc2NoZWR1bGUodm9pZCkKIHsKIAlzdHJ1Y3QgdGFza19zdHJ1Y3QgKnByZXYsICpuZXh0OwogCXVuc2lnbmVkIGxvbmcgKnN3aXRjaF9jb3VudDsKIAlzdHJ1Y3QgcnEgKnJxOwogCWludCBjcHU7CiAKLW5lZWRfcmVzY2hlZDoKLQlwcmVlbXB0X2Rpc2FibGUoKTsKIAljcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CiAJcnEgPSBjcHVfcnEoY3B1KTsKIAlyY3VfcXNjdHJfaW5jKGNwdSk7CkBAIC01MDA3LDEzICs1MDA1LDgwIEBACiAKIAlpZiAodW5saWtlbHkocmVhY3F1aXJlX2tlcm5lbF9sb2NrKGN1cnJlbnQpIDwgMCkpCiAJCWdvdG8gbmVlZF9yZXNjaGVkX25vbnByZWVtcHRpYmxlOworfQogCithc21saW5rYWdlIHZvaWQgX19zY2hlZCBzY2hlZHVsZSh2b2lkKQoreworbmVlZF9yZXNjaGVkOgorCXByZWVtcHRfZGlzYWJsZSgpOworCV9fc2NoZWR1bGUoKTsKIAlwcmVlbXB0X2VuYWJsZV9ub19yZXNjaGVkKCk7CiAJaWYgKHVubGlrZWx5KHRlc3RfdGhyZWFkX2ZsYWcoVElGX05FRURfUkVTQ0hFRCkpKQogCQlnb3RvIG5lZWRfcmVzY2hlZDsKIH0KIEVYUE9SVF9TWU1CT0woc2NoZWR1bGUpOwogCisjaWZkZWYgQ09ORklHX1NNUAorLyoKKyAqIExvb2sgb3V0ISAib3duZXIiIGlzIGFuIGVudGlyZWx5IHNwZWN1bGF0aXZlIHBvaW50ZXIKKyAqIGFjY2VzcyBhbmQgbm90IHJlbGlhYmxlLgorICovCitpbnQgbXV0ZXhfc3Bpbl9vbl9vd25lcihzdHJ1Y3QgbXV0ZXggKmxvY2ssIHN0cnVjdCB0aHJlYWRfaW5mbyAqb3duZXIpCit7CisJdW5zaWduZWQgaW50IGNwdTsKKwlzdHJ1Y3QgcnEgKnJxOworCisJaWYgKCFzY2hlZF9mZWF0KE9XTkVSX1NQSU4pKQorCQlyZXR1cm4gMDsKKworI2lmZGVmIENPTkZJR19ERUJVR19QQUdFQUxMT0MKKwkvKgorCSAqIE5lZWQgdG8gYWNjZXNzIHRoZSBjcHUgZmllbGQga25vd2luZyB0aGF0CisJICogREVCVUdfUEFHRUFMTE9DIGNvdWxkIGhhdmUgdW5tYXBwZWQgaXQgaWYKKwkgKiB0aGUgbXV0ZXggb3duZXIganVzdCByZWxlYXNlZCBpdCBhbmQgZXhpdGVkLgorCSAqLworCWlmIChwcm9iZV9rZXJuZWxfYWRkcmVzcygmb3duZXItPmNwdSwgY3B1KSkKKwkJZ290byBvdXQ7CisjZWxzZQorCWNwdSA9IG93bmVyLT5jcHU7CisjZW5kaWYKKworCS8qCisJICogRXZlbiBpZiB0aGUgYWNjZXNzIHN1Y2NlZWRlZCAobGlrZWx5IGNhc2UpLAorCSAqIHRoZSBjcHUgZmllbGQgbWF5IG5vIGxvbmdlciBiZSB2YWxpZC4KKwkgKi8KKwlpZiAoY3B1ID49IG5yX2NwdW1hc2tfYml0cykKKwkJZ290byBvdXQ7CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gdmFsaWRhdGUgdGhhdCB3ZSBjYW4gZG8gYQorCSAqIGdldF9jcHUoKSBhbmQgdGhhdCB3ZSBoYXZlIHRoZSBwZXJjcHUgYXJlYS4KKwkgKi8KKwlpZiAoIWNwdV9vbmxpbmUoY3B1KSkKKwkJZ290byBvdXQ7CisKKwlycSA9IGNwdV9ycShjcHUpOworCisJZm9yICg7OykgeworCQkvKgorCQkgKiBPd25lciBjaGFuZ2VkLCBicmVhayB0byByZS1hc3Nlc3Mgc3RhdGUuCisJCSAqLworCQlpZiAobG9jay0+b3duZXIgIT0gb3duZXIpCisJCQlicmVhazsKKworCQkvKgorCQkgKiBJcyB0aGF0IG93bmVyIHJlYWxseSBydW5uaW5nIG9uIHRoYXQgY3B1PworCQkgKi8KKwkJaWYgKHRhc2tfdGhyZWFkX2luZm8ocnEtPmN1cnIpICE9IG93bmVyIHx8IG5lZWRfcmVzY2hlZCgpKQorCQkJcmV0dXJuIDA7CisKKwkJY3B1X3JlbGF4KCk7CisJfQorb3V0OgorCXJldHVybiAxOworfQorI2VuZGlmCisKICNpZmRlZiBDT05GSUdfUFJFRU1QVAogLyoKICAqIHRoaXMgaXMgdGhlIGVudHJ5IHBvaW50IHRvIHNjaGVkdWxlKCkgZnJvbSBpbi1rZXJuZWwgcHJlZW1wdGlvbgpkaWZmIC0tZ2l0IGEva2VybmVsL3NjaGVkX2ZlYXR1cmVzLmggYi9rZXJuZWwvc2NoZWRfZmVhdHVyZXMuaAppbmRleCA3NmY2MTc1Li40NTY5YmZhIDEwMDY0NAotLS0gYS9rZXJuZWwvc2NoZWRfZmVhdHVyZXMuaAorKysgYi9rZXJuZWwvc2NoZWRfZmVhdHVyZXMuaApAQCAtMTQsMyArMTQsNCBAQAogU0NIRURfRkVBVChBU1lNX0VGRl9MT0FELCAxKQogU0NIRURfRkVBVChXQUtFVVBfT1ZFUkxBUCwgMCkKIFNDSEVEX0ZFQVQoTEFTVF9CVUREWSwgMSkKK1NDSEVEX0ZFQVQoT1dORVJfU1BJTiwgMSkKZGlmZiAtLWdpdCBhL2tlcm5lbC90aW1lci5jIGIva2VybmVsL3RpbWVyLmMKaW5kZXggOWI3N2ZjOS4uYjQ1NTU1NiAxMDA2NDQKLS0tIGEva2VybmVsL3RpbWVyLmMKKysrIGIva2VybmVsL3RpbWVyLmMKQEAgLTQ5MSwxNCArNDkxLDE4IEBACiAJZGVidWdfb2JqZWN0X2ZyZWUodGltZXIsICZ0aW1lcl9kZWJ1Z19kZXNjcik7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW5pdF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpOworc3RhdGljIHZvaWQgX19pbml0X3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwKKwkJCSBjb25zdCBjaGFyICpuYW1lLAorCQkJIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KTsKIAotdm9pZCBpbml0X3RpbWVyX29uX3N0YWNrKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lcikKK3ZvaWQgaW5pdF90aW1lcl9vbl9zdGFja19rZXkoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLAorCQkJICAgICBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSkKIHsKIAlkZWJ1Z19vYmplY3RfaW5pdF9vbl9zdGFjayh0aW1lciwgJnRpbWVyX2RlYnVnX2Rlc2NyKTsKLQlfX2luaXRfdGltZXIodGltZXIpOworCV9faW5pdF90aW1lcih0aW1lciwgbmFtZSwga2V5KTsKIH0KLUVYUE9SVF9TWU1CT0xfR1BMKGluaXRfdGltZXJfb25fc3RhY2spOworRVhQT1JUX1NZTUJPTF9HUEwoaW5pdF90aW1lcl9vbl9zdGFja19rZXkpOwogCiB2b2lkIGRlc3Ryb3lfdGltZXJfb25fc3RhY2soc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQogewpAQCAtNTEyLDcgKzUxNiw5IEBACiBzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfdGltZXJfZGVhY3RpdmF0ZShzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpIHsgfQogI2VuZGlmCiAKLXN0YXRpYyB2b2lkIF9faW5pdF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCitzdGF0aWMgdm9pZCBfX2luaXRfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLAorCQkJIGNvbnN0IGNoYXIgKm5hbWUsCisJCQkgc3RydWN0IGxvY2tfY2xhc3Nfa2V5ICprZXkpCiB7CiAJdGltZXItPmVudHJ5Lm5leHQgPSBOVUxMOwogCXRpbWVyLT5iYXNlID0gX19yYXdfZ2V0X2NwdV92YXIodHZlY19iYXNlcyk7CkBAIC01MjEsNiArNTI3LDcgQEAKIAl0aW1lci0+c3RhcnRfcGlkID0gLTE7CiAJbWVtc2V0KHRpbWVyLT5zdGFydF9jb21tLCAwLCBUQVNLX0NPTU1fTEVOKTsKICNlbmRpZgorCWxvY2tkZXBfaW5pdF9tYXAoJnRpbWVyLT5sb2NrZGVwX21hcCwgbmFtZSwga2V5LCAwKTsKIH0KIAogLyoqCkBAIC01MzAsMTkgKzUzNywyMyBAQAogICogaW5pdF90aW1lcigpIG11c3QgYmUgZG9uZSB0byBhIHRpbWVyIHByaW9yIGNhbGxpbmcgKmFueSogb2YgdGhlCiAgKiBvdGhlciB0aW1lciBmdW5jdGlvbnMuCiAgKi8KLXZvaWQgaW5pdF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqdGltZXIpCit2b2lkIGluaXRfdGltZXJfa2V5KHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwKKwkJICAgIGNvbnN0IGNoYXIgKm5hbWUsCisJCSAgICBzdHJ1Y3QgbG9ja19jbGFzc19rZXkgKmtleSkKIHsKIAlkZWJ1Z190aW1lcl9pbml0KHRpbWVyKTsKLQlfX2luaXRfdGltZXIodGltZXIpOworCV9faW5pdF90aW1lcih0aW1lciwgbmFtZSwga2V5KTsKIH0KLUVYUE9SVF9TWU1CT0woaW5pdF90aW1lcik7CitFWFBPUlRfU1lNQk9MKGluaXRfdGltZXJfa2V5KTsKIAotdm9pZCBpbml0X3RpbWVyX2RlZmVycmFibGUoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQordm9pZCBpbml0X3RpbWVyX2RlZmVycmFibGVfa2V5KHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwKKwkJCSAgICAgICBjb25zdCBjaGFyICpuYW1lLAorCQkJICAgICAgIHN0cnVjdCBsb2NrX2NsYXNzX2tleSAqa2V5KQogewotCWluaXRfdGltZXIodGltZXIpOworCWluaXRfdGltZXJfa2V5KHRpbWVyLCBuYW1lLCBrZXkpOwogCXRpbWVyX3NldF9kZWZlcnJhYmxlKHRpbWVyKTsKIH0KLUVYUE9SVF9TWU1CT0woaW5pdF90aW1lcl9kZWZlcnJhYmxlKTsKK0VYUE9SVF9TWU1CT0woaW5pdF90aW1lcl9kZWZlcnJhYmxlX2tleSk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZXRhY2hfdGltZXIoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyLAogCQkJCWludCBjbGVhcl9wZW5kaW5nKQpAQCAtODI2LDYgKzgzNywxNSBAQAogICovCiBpbnQgZGVsX3RpbWVyX3N5bmMoc3RydWN0IHRpbWVyX2xpc3QgKnRpbWVyKQogeworI2lmZGVmIENPTkZJR19MT0NLREVQCisJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCWxvY2FsX2lycV9zYXZlKGZsYWdzKTsKKwlsb2NrX21hcF9hY3F1aXJlKCZ0aW1lci0+bG9ja2RlcF9tYXApOworCWxvY2tfbWFwX3JlbGVhc2UoJnRpbWVyLT5sb2NrZGVwX21hcCk7CisJbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOworI2VuZGlmCisKIAlmb3IgKDs7KSB7CiAJCWludCByZXQgPSB0cnlfdG9fZGVsX3RpbWVyX3N5bmModGltZXIpOwogCQlpZiAocmV0ID49IDApCkBAIC04OTcsMTAgKzkxNywzNiBAQAogCiAJCQlzZXRfcnVubmluZ190aW1lcihiYXNlLCB0aW1lcik7CiAJCQlkZXRhY2hfdGltZXIodGltZXIsIDEpOworCiAJCQlzcGluX3VubG9ja19pcnEoJmJhc2UtPmxvY2spOwogCQkJewogCQkJCWludCBwcmVlbXB0X2NvdW50ID0gcHJlZW1wdF9jb3VudCgpOworCisjaWZkZWYgQ09ORklHX0xPQ0tERVAKKwkJCQkvKgorCQkJCSAqIEl0IGlzIHBlcm1pc3NpYmxlIHRvIGZyZWUgdGhlIHRpbWVyIGZyb20KKwkJCQkgKiBpbnNpZGUgdGhlIGZ1bmN0aW9uIHRoYXQgaXMgY2FsbGVkIGZyb20KKwkJCQkgKiBpdCwgdGhpcyB3ZSBuZWVkIHRvIHRha2UgaW50byBhY2NvdW50IGZvcgorCQkJCSAqIGxvY2tkZXAgdG9vLiBUbyBhdm9pZCBib2d1cyAiaGVsZCBsb2NrCisJCQkJICogZnJlZWQiIHdhcm5pbmdzIGFzIHdlbGwgYXMgcHJvYmxlbXMgd2hlbgorCQkJCSAqIGxvb2tpbmcgaW50byB0aW1lci0+bG9ja2RlcF9tYXAsIG1ha2UgYQorCQkJCSAqIGNvcHkgYW5kIHVzZSB0aGF0IGhlcmUuCisJCQkJICovCisJCQkJc3RydWN0IGxvY2tkZXBfbWFwIGxvY2tkZXBfbWFwID0KKwkJCQkJdGltZXItPmxvY2tkZXBfbWFwOworI2VuZGlmCisJCQkJLyoKKwkJCQkgKiBDb3VwbGUgdGhlIGxvY2sgY2hhaW4gd2l0aCB0aGUgbG9jayBjaGFpbiBhdAorCQkJCSAqIGRlbF90aW1lcl9zeW5jKCkgYnkgYWNxdWlyaW5nIHRoZSBsb2NrX21hcAorCQkJCSAqIGFyb3VuZCB0aGUgZm4oKSBjYWxsIGhlcmUgYW5kIGluCisJCQkJICogZGVsX3RpbWVyX3N5bmMoKS4KKwkJCQkgKi8KKwkJCQlsb2NrX21hcF9hY3F1aXJlKCZsb2NrZGVwX21hcCk7CisKIAkJCQlmbihkYXRhKTsKKworCQkJCWxvY2tfbWFwX3JlbGVhc2UoJmxvY2tkZXBfbWFwKTsKKwogCQkJCWlmIChwcmVlbXB0X2NvdW50ICE9IHByZWVtcHRfY291bnQoKSkgewogCQkJCQlwcmludGsoS0VSTl9FUlIgImh1aCwgZW50ZXJlZCAlcCAiCiAJCQkJCSAgICAgICAid2l0aCBwcmVlbXB0X2NvdW50ICUwOHgsIGV4aXRlZCIKZGlmZiAtLWdpdCBhL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYyBiL2tlcm5lbC90cmFjZS90cmFjZV9mdW5jdGlvbnNfZ3JhcGguYwppbmRleCA5MzBjMDhlLi5kY2U3MWE1IDEwMDY0NAotLS0gYS9rZXJuZWwvdHJhY2UvdHJhY2VfZnVuY3Rpb25zX2dyYXBoLmMKKysrIGIva2VybmVsL3RyYWNlL3RyYWNlX2Z1bmN0aW9uc19ncmFwaC5jCkBAIC00Miw2ICs0Miw4MSBAQAogLyogcGlkIG9uIHRoZSBsYXN0IHRyYWNlIHByb2Nlc3NlZCAqLwogc3RhdGljIHBpZF90IGxhc3RfcGlkW05SX0NQVVNdID0geyBbMCAuLi4gTlJfQ1BVUy0xXSA9IC0xIH07CiAKKy8qIEFkZCBhIGZ1bmN0aW9uIHJldHVybiBhZGRyZXNzIHRvIHRoZSB0cmFjZSBzdGFjayBvbiB0aHJlYWQgaW5mby4qLworaW50CitmdHJhY2VfcHVzaF9yZXR1cm5fdHJhY2UodW5zaWduZWQgbG9uZyByZXQsIHVuc2lnbmVkIGxvbmcgbG9uZyB0aW1lLAorCQkJIHVuc2lnbmVkIGxvbmcgZnVuYywgaW50ICpkZXB0aCkKK3sKKwlpbnQgaW5kZXg7CisKKwlpZiAoIWN1cnJlbnQtPnJldF9zdGFjaykKKwkJcmV0dXJuIC1FQlVTWTsKKworCS8qIFRoZSByZXR1cm4gdHJhY2Ugc3RhY2sgaXMgZnVsbCAqLworCWlmIChjdXJyZW50LT5jdXJyX3JldF9zdGFjayA9PSBGVFJBQ0VfUkVURlVOQ19ERVBUSCAtIDEpIHsKKwkJYXRvbWljX2luYygmY3VycmVudC0+dHJhY2Vfb3ZlcnJ1bik7CisJCXJldHVybiAtRUJVU1k7CisJfQorCisJaW5kZXggPSArK2N1cnJlbnQtPmN1cnJfcmV0X3N0YWNrOworCWJhcnJpZXIoKTsKKwljdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLnJldCA9IHJldDsKKwljdXJyZW50LT5yZXRfc3RhY2tbaW5kZXhdLmZ1bmMgPSBmdW5jOworCWN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0uY2FsbHRpbWUgPSB0aW1lOworCSpkZXB0aCA9IGluZGV4OworCisJcmV0dXJuIDA7Cit9CisKKy8qIFJldHJpZXZlIGEgZnVuY3Rpb24gcmV0dXJuIGFkZHJlc3MgdG8gdGhlIHRyYWNlIHN0YWNrIG9uIHRocmVhZCBpbmZvLiovCit2b2lkCitmdHJhY2VfcG9wX3JldHVybl90cmFjZShzdHJ1Y3QgZnRyYWNlX2dyYXBoX3JldCAqdHJhY2UsIHVuc2lnbmVkIGxvbmcgKnJldCkKK3sKKwlpbnQgaW5kZXg7CisKKwlpbmRleCA9IGN1cnJlbnQtPmN1cnJfcmV0X3N0YWNrOworCisJaWYgKHVubGlrZWx5KGluZGV4IDwgMCkpIHsKKwkJZnRyYWNlX2dyYXBoX3N0b3AoKTsKKwkJV0FSTl9PTigxKTsKKwkJLyogTWlnaHQgYXMgd2VsbCBwYW5pYywgb3RoZXJ3aXNlIHdlIGhhdmUgbm8gd2hlcmUgdG8gZ28gKi8KKwkJKnJldCA9ICh1bnNpZ25lZCBsb25nKXBhbmljOworCQlyZXR1cm47CisJfQorCisJKnJldCA9IGN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0ucmV0OworCXRyYWNlLT5mdW5jID0gY3VycmVudC0+cmV0X3N0YWNrW2luZGV4XS5mdW5jOworCXRyYWNlLT5jYWxsdGltZSA9IGN1cnJlbnQtPnJldF9zdGFja1tpbmRleF0uY2FsbHRpbWU7CisJdHJhY2UtPm92ZXJydW4gPSBhdG9taWNfcmVhZCgmY3VycmVudC0+dHJhY2Vfb3ZlcnJ1bik7CisJdHJhY2UtPmRlcHRoID0gaW5kZXg7CisJYmFycmllcigpOworCWN1cnJlbnQtPmN1cnJfcmV0X3N0YWNrLS07CisKK30KKworLyoKKyAqIFNlbmQgdGhlIHRyYWNlIHRvIHRoZSByaW5nLWJ1ZmZlci4KKyAqIEByZXR1cm4gdGhlIG9yaWdpbmFsIHJldHVybiBhZGRyZXNzLgorICovCit1bnNpZ25lZCBsb25nIGZ0cmFjZV9yZXR1cm5fdG9faGFuZGxlcih2b2lkKQoreworCXN0cnVjdCBmdHJhY2VfZ3JhcGhfcmV0IHRyYWNlOworCXVuc2lnbmVkIGxvbmcgcmV0OworCisJZnRyYWNlX3BvcF9yZXR1cm5fdHJhY2UoJnRyYWNlLCAmcmV0KTsKKwl0cmFjZS5yZXR0aW1lID0gY3B1X2Nsb2NrKHJhd19zbXBfcHJvY2Vzc29yX2lkKCkpOworCWZ0cmFjZV9ncmFwaF9yZXR1cm4oJnRyYWNlKTsKKworCWlmICh1bmxpa2VseSghcmV0KSkgeworCQlmdHJhY2VfZ3JhcGhfc3RvcCgpOworCQlXQVJOX09OKDEpOworCQkvKiBNaWdodCBhcyB3ZWxsIHBhbmljLiBXaGF0IGVsc2UgdG8gZG8/ICovCisJCXJldCA9ICh1bnNpZ25lZCBsb25nKXBhbmljOworCX0KKworCXJldHVybiByZXQ7Cit9CisKIHN0YXRpYyBpbnQgZ3JhcGhfdHJhY2VfaW5pdChzdHJ1Y3QgdHJhY2VfYXJyYXkgKnRyKQogewogCWludCBjcHUsIHJldDsKZGlmZiAtLWdpdCBhL2xpYi9LY29uZmlnLmRlYnVnIGIvbGliL0tjb25maWcuZGVidWcKaW5kZXggMDYyNmZhNC4uNThiZmU3ZSAxMDA2NDQKLS0tIGEvbGliL0tjb25maWcuZGVidWcKKysrIGIvbGliL0tjb25maWcuZGVidWcKQEAgLTkxMiw2ICs5MTIsMTcgQEAKIAogCSAgU2VlIERvY3VtZW50YXRpb24vZHluYW1pYy1kZWJ1Zy1ob3d0by50eHQgZm9yIGFkZGl0aW9uYWwgaW5mb3JtYXRpb24uCiAKK2NvbmZpZyBETUFfQVBJX0RFQlVHCisJYm9vbCAiRW5hYmxlIGRlYnVnZ2luZyBvZiBETUEtQVBJIHVzYWdlIgorCWRlcGVuZHMgb24gSEFWRV9ETUFfQVBJX0RFQlVHCisJaGVscAorCSAgRW5hYmxlIHRoaXMgb3B0aW9uIHRvIGRlYnVnIHRoZSB1c2Ugb2YgdGhlIERNQSBBUEkgYnkgZGV2aWNlIGRyaXZlcnMuCisJICBXaXRoIHRoaXMgb3B0aW9uIHlvdSB3aWxsIGJlIGFibGUgdG8gZGV0ZWN0IGNvbW1vbiBidWdzIGluIGRldmljZQorCSAgZHJpdmVycyBsaWtlIGRvdWJsZS1mcmVlaW5nIG9mIERNQSBtYXBwaW5ncyBvciBmcmVlaW5nIG1hcHBpbmdzIHRoYXQKKwkgIHdlcmUgbmV2ZXIgYWxsb2NhdGVkLgorCSAgVGhpcyBvcHRpb24gY2F1c2VzIGEgcGVyZm9ybWFuY2UgZGVncmVkYXRpb24uICBVc2Ugb25seSBpZiB5b3Ugd2FudAorCSAgdG8gZGVidWcgZGV2aWNlIGRyaXZlcnMuIElmIHVuc3VyZSwgc2F5IE4uCisKIHNvdXJjZSAic2FtcGxlcy9LY29uZmlnIgogCiBzb3VyY2UgImxpYi9LY29uZmlnLmtnZGIiCmRpZmYgLS1naXQgYS9saWIvTWFrZWZpbGUgYi9saWIvTWFrZWZpbGUKaW5kZXggMDUxYTMzYS4uZDZlZGQ2NyAxMDA2NDQKLS0tIGEvbGliL01ha2VmaWxlCisrKyBiL2xpYi9NYWtlZmlsZQpAQCAtOTAsNiArOTAsOCBAQAogCiBvYmotJChDT05GSUdfTkxBVFRSKSArPSBubGF0dHIubwogCitvYmotJChDT05GSUdfRE1BX0FQSV9ERUJVRykgKz0gZG1hLWRlYnVnLm8KKwogaG9zdHByb2dzLXkJOj0gZ2VuX2NyYzMydGFibGUKIGNsZWFuLWZpbGVzCTo9IGNyYzMydGFibGUuaAogCmRpZmYgLS1naXQgYS9saWIvZG1hLWRlYnVnLmMgYi9saWIvZG1hLWRlYnVnLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDNkYTdlZAotLS0gL2Rldi9udWxsCisrKyBiL2xpYi9kbWEtZGVidWcuYwpAQCAtMCwwICsxLDk1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgorICogQXV0aG9yOiBKb2VyZyBSb2VkZWwgPGpvZXJnLnJvZWRlbEBhbWQuY29tPgorICoKKyAqIFRoaXMgcHJvZ3JhbSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IgbW9kaWZ5IGl0CisgKiB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIHZlcnNpb24gMiBhcyBwdWJsaXNoZWQKKyAqIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCisgKgorICogVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQorICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDU5IFRlbXBsZSBQbGFjZSwgU3VpdGUgMzMwLCBCb3N0b24sIE1BICAwMjExMS0xMzA3IFVTQQorICovCisKKyNpbmNsdWRlIDxsaW51eC9zY2F0dGVybGlzdC5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1tYXBwaW5nLmg+CisjaW5jbHVkZSA8bGludXgvc3RhY2t0cmFjZS5oPgorI2luY2x1ZGUgPGxpbnV4L2RtYS1kZWJ1Zy5oPgorI2luY2x1ZGUgPGxpbnV4L3NwaW5sb2NrLmg+CisjaW5jbHVkZSA8bGludXgvZGVidWdmcy5oPgorI2luY2x1ZGUgPGxpbnV4L2RldmljZS5oPgorI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+CisjaW5jbHVkZSA8bGludXgvc2NoZWQuaD4KKyNpbmNsdWRlIDxsaW51eC9saXN0Lmg+CisjaW5jbHVkZSA8bGludXgvc2xhYi5oPgorCisjaW5jbHVkZSA8YXNtL3NlY3Rpb25zLmg+CisKKyNkZWZpbmUgSEFTSF9TSVpFICAgICAgIDEwMjRVTEwKKyNkZWZpbmUgSEFTSF9GTl9TSElGVCAgIDEzCisjZGVmaW5lIEhBU0hfRk5fTUFTSyAgICAoSEFTSF9TSVpFIC0gMSkKKworZW51bSB7CisJZG1hX2RlYnVnX3NpbmdsZSwKKwlkbWFfZGVidWdfcGFnZSwKKwlkbWFfZGVidWdfc2csCisJZG1hX2RlYnVnX2NvaGVyZW50LAorfTsKKworI2RlZmluZSBETUFfREVCVUdfU1RBQ0tUUkFDRV9FTlRSSUVTIDUKKworc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0cnVjdCBkZXZpY2UgICAgKmRldjsKKwlpbnQgICAgICAgICAgICAgIHR5cGU7CisJcGh5c19hZGRyX3QgICAgICBwYWRkcjsKKwl1NjQgICAgICAgICAgICAgIGRldl9hZGRyOworCXU2NCAgICAgICAgICAgICAgc2l6ZTsKKwlpbnQgICAgICAgICAgICAgIGRpcmVjdGlvbjsKKwlpbnQJCSBzZ19jYWxsX2VudHM7CisJaW50CQkgc2dfbWFwcGVkX2VudHM7CisjaWZkZWYgQ09ORklHX1NUQUNLVFJBQ0UKKwlzdHJ1Y3QJCSBzdGFja190cmFjZSBzdGFja3RyYWNlOworCXVuc2lnbmVkIGxvbmcJIHN0X2VudHJpZXNbRE1BX0RFQlVHX1NUQUNLVFJBQ0VfRU5UUklFU107CisjZW5kaWYKK307CisKK3N0cnVjdCBoYXNoX2J1Y2tldCB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXNwaW5sb2NrX3QgbG9jazsKK30gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDsKKworLyogSGFzaCBsaXN0IHRvIHNhdmUgdGhlIGFsbG9jYXRlZCBkbWEgYWRkcmVzc2VzICovCitzdGF0aWMgc3RydWN0IGhhc2hfYnVja2V0IGRtYV9lbnRyeV9oYXNoW0hBU0hfU0laRV07CisvKiBMaXN0IG9mIHByZS1hbGxvY2F0ZWQgZG1hX2RlYnVnX2VudHJ5J3MgKi8KK3N0YXRpYyBMSVNUX0hFQUQoZnJlZV9lbnRyaWVzKTsKKy8qIExvY2sgZm9yIHRoZSBsaXN0IGFib3ZlICovCitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGZyZWVfZW50cmllc19sb2NrKTsKKworLyogR2xvYmFsIGRpc2FibGUgZmxhZyAtIHdpbGwgYmUgc2V0IGluIGNhc2Ugb2YgYW4gZXJyb3IgKi8KK3N0YXRpYyBib29sIGdsb2JhbF9kaXNhYmxlIF9fcmVhZF9tb3N0bHk7CisKKy8qIEdsb2JhbCBlcnJvciBjb3VudCAqLworc3RhdGljIHUzMiBlcnJvcl9jb3VudDsKKworLyogR2xvYmFsIGVycm9yIHNob3cgZW5hYmxlKi8KK3N0YXRpYyB1MzIgc2hvd19hbGxfZXJyb3JzIF9fcmVhZF9tb3N0bHk7CisvKiBOdW1iZXIgb2YgZXJyb3JzIHRvIHNob3cgKi8KK3N0YXRpYyB1MzIgc2hvd19udW1fZXJyb3JzID0gMTsKKworc3RhdGljIHUzMiBudW1fZnJlZV9lbnRyaWVzOworc3RhdGljIHUzMiBtaW5fZnJlZV9lbnRyaWVzOworCisvKiBudW1iZXIgb2YgcHJlYWxsb2NhdGVkIGVudHJpZXMgcmVxdWVzdGVkIGJ5IGtlcm5lbCBjbWRsaW5lICovCitzdGF0aWMgdTMyIHJlcV9lbnRyaWVzOworCisvKiBkZWJ1Z2ZzIGRlbnRyeSdzIGZvciB0aGUgc3R1ZmYgYWJvdmUgKi8KK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpkbWFfZGVidWdfZGVudCAgICAgICAgX19yZWFkX21vc3RseTsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpnbG9iYWxfZGlzYWJsZV9kZW50ICAgX19yZWFkX21vc3RseTsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICplcnJvcl9jb3VudF9kZW50ICAgICAgX19yZWFkX21vc3RseTsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpzaG93X2FsbF9lcnJvcnNfZGVudCAgX19yZWFkX21vc3RseTsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpzaG93X251bV9lcnJvcnNfZGVudCAgX19yZWFkX21vc3RseTsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpudW1fZnJlZV9lbnRyaWVzX2RlbnQgX19yZWFkX21vc3RseTsKK3N0YXRpYyBzdHJ1Y3QgZGVudHJ5ICptaW5fZnJlZV9lbnRyaWVzX2RlbnQgX19yZWFkX21vc3RseTsKKworc3RhdGljIGNvbnN0IGNoYXIgKnR5cGUybmFtZVs0XSA9IHsgInNpbmdsZSIsICJwYWdlIiwKKwkJCQkgICAgInNjYXRoZXItZ2F0aGVyIiwgImNvaGVyZW50IiB9OworCitzdGF0aWMgY29uc3QgY2hhciAqZGlyMm5hbWVbNF0gPSB7ICJETUFfQklESVJFQ1RJT05BTCIsICJETUFfVE9fREVWSUNFIiwKKwkJCQkgICAiRE1BX0ZST01fREVWSUNFIiwgIkRNQV9OT05FIiB9OworCisvKgorICogVGhlIGFjY2VzcyB0byBzb21lIHZhcmlhYmxlcyBpbiB0aGlzIG1hY3JvIGlzIHJhY3kuIFdlIGNhbid0IHVzZSBhdG9taWNfdAorICogaGVyZSBiZWNhdXNlIGFsbCB0aGVzZSB2YXJpYWJsZXMgYXJlIGV4cG9ydGVkIHRvIGRlYnVnZnMuIFNvbWUgb2YgdGhlbSBldmVuCisgKiB3cml0ZWFibGUuIFRoaXMgaXMgYWxzbyB0aGUgcmVhc29uIHdoeSBhIGxvY2sgd29uJ3QgaGVscCBtdWNoLiBCdXQgYW55d2F5LAorICogdGhlIHJhY2VzIGFyZSBubyBiaWcgZGVhbC4gSGVyZSBpcyB3aHk6CisgKgorICogICBlcnJvcl9jb3VudDogdGhlIGFkZGl0aW9uIGlzIHJhY3ksIGJ1dCB0aGUgd29yc3QgdGhpbmcgdGhhdCBjYW4gaGFwcGVuIGlzCisgKiAgICAgICAgICAgICAgICB0aGF0IHdlIGRvbid0IGNvdW50IHNvbWUgZXJyb3JzCisgKiAgIHNob3dfbnVtX2Vycm9yczogdGhlIHN1YnRyYWN0aW9uIGlzIHJhY3kuIEFsc28gbm8gYmlnIGRlYWwgYmVjYXVzZSBpbgorICogICAgICAgICAgICAgICAgICAgIHdvcnN0IGNhc2UgdGhpcyB3aWxsIHJlc3VsdCBpbiBvbmUgd2FybmluZyBtb3JlIGluIHRoZQorICogICAgICAgICAgICAgICAgICAgIHN5c3RlbSBsb2cgdGhhbiB0aGUgdXNlciBjb25maWd1cmVkLiBUaGlzIHZhcmlhYmxlIGlzCisgKiAgICAgICAgICAgICAgICAgICAgd3JpdGVhYmxlIHZpYSBkZWJ1Z2ZzLgorICovCitzdGF0aWMgaW5saW5lIHZvaWQgZHVtcF9lbnRyeV90cmFjZShzdHJ1Y3QgZG1hX2RlYnVnX2VudHJ5ICplbnRyeSkKK3sKKyNpZmRlZiBDT05GSUdfU1RBQ0tUUkFDRQorCWlmIChlbnRyeSkgeworCQlwcmludGsoS0VSTl9XQVJOSU5HICJNYXBwZWQgYXQ6XG4iKTsKKwkJcHJpbnRfc3RhY2tfdHJhY2UoJmVudHJ5LT5zdGFja3RyYWNlLCAwKTsKKwl9CisjZW5kaWYKK30KKworI2RlZmluZSBlcnJfcHJpbnRrKGRldiwgZW50cnksIGZvcm1hdCwgYXJnLi4uKSBkbyB7CQlcCisJCWVycm9yX2NvdW50ICs9IDE7CQkJCVwKKwkJaWYgKHNob3dfYWxsX2Vycm9ycyB8fCBzaG93X251bV9lcnJvcnMgPiAwKSB7CVwKKwkJCVdBUk4oMSwgIiVzICVzOiAiIGZvcm1hdCwJCVwKKwkJCSAgICAgZGV2X2RyaXZlcl9zdHJpbmcoZGV2KSwJCVwKKwkJCSAgICAgZGV2X25hbWUoZGV2KSAsICMjIGFyZyk7CQlcCisJCQlkdW1wX2VudHJ5X3RyYWNlKGVudHJ5KTsJCVwKKwkJfQkJCQkJCVwKKwkJaWYgKCFzaG93X2FsbF9lcnJvcnMgJiYgc2hvd19udW1fZXJyb3JzID4gMCkJXAorCQkJc2hvd19udW1fZXJyb3JzIC09IDE7CQkJXAorCX0gd2hpbGUgKDApOworCisvKgorICogSGFzaCByZWxhdGVkIGZ1bmN0aW9ucworICoKKyAqIEV2ZXJ5IERNQS1BUEkgcmVxdWVzdCBpcyBzYXZlZCBpbnRvIGEgc3RydWN0IGRtYV9kZWJ1Z19lbnRyeS4gVG8KKyAqIGhhdmUgcXVpY2sgYWNjZXNzIHRvIHRoZXNlIHN0cnVjdHMgdGhleSBhcmUgc3RvcmVkIGludG8gYSBoYXNoLgorICovCitzdGF0aWMgaW50IGhhc2hfZm4oc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSAqZW50cnkpCit7CisJLyoKKwkgKiBIYXNoIGZ1bmN0aW9uIGlzIGJhc2VkIG9uIHRoZSBkbWEgYWRkcmVzcy4KKwkgKiBXZSB1c2UgYml0cyAyMC0yNyBoZXJlIGFzIHRoZSBpbmRleCBpbnRvIHRoZSBoYXNoCisJICovCisJcmV0dXJuIChlbnRyeS0+ZGV2X2FkZHIgPj4gSEFTSF9GTl9TSElGVCkgJiBIQVNIX0ZOX01BU0s7Cit9CisKKy8qCisgKiBSZXF1ZXN0IGV4Y2x1c2l2ZSBhY2Nlc3MgdG8gYSBoYXNoIGJ1Y2tldCBmb3IgYSBnaXZlbiBkbWFfZGVidWdfZW50cnkuCisgKi8KK3N0YXRpYyBzdHJ1Y3QgaGFzaF9idWNrZXQgKmdldF9oYXNoX2J1Y2tldChzdHJ1Y3QgZG1hX2RlYnVnX2VudHJ5ICplbnRyeSwKKwkJCQkJICAgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCit7CisJaW50IGlkeCA9IGhhc2hfZm4oZW50cnkpOworCXVuc2lnbmVkIGxvbmcgX19mbGFnczsKKworCXNwaW5fbG9ja19pcnFzYXZlKCZkbWFfZW50cnlfaGFzaFtpZHhdLmxvY2ssIF9fZmxhZ3MpOworCSpmbGFncyA9IF9fZmxhZ3M7CisJcmV0dXJuICZkbWFfZW50cnlfaGFzaFtpZHhdOworfQorCisvKgorICogR2l2ZSB1cCBleGNsdXNpdmUgYWNjZXNzIHRvIHRoZSBoYXNoIGJ1Y2tldAorICovCitzdGF0aWMgdm9pZCBwdXRfaGFzaF9idWNrZXQoc3RydWN0IGhhc2hfYnVja2V0ICpidWNrZXQsCisJCQkgICAgdW5zaWduZWQgbG9uZyAqZmxhZ3MpCit7CisJdW5zaWduZWQgbG9uZyBfX2ZsYWdzID0gKmZsYWdzOworCisJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYnVja2V0LT5sb2NrLCBfX2ZsYWdzKTsKK30KKworLyoKKyAqIFNlYXJjaCBhIGdpdmVuIGVudHJ5IGluIHRoZSBoYXNoIGJ1Y2tldCBsaXN0CisgKi8KK3N0YXRpYyBzdHJ1Y3QgZG1hX2RlYnVnX2VudHJ5ICpoYXNoX2J1Y2tldF9maW5kKHN0cnVjdCBoYXNoX2J1Y2tldCAqYnVja2V0LAorCQkJCQkJc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSAqcmVmKQoreworCXN0cnVjdCBkbWFfZGVidWdfZW50cnkgKmVudHJ5OworCisJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmJ1Y2tldC0+bGlzdCwgbGlzdCkgeworCQlpZiAoKGVudHJ5LT5kZXZfYWRkciA9PSByZWYtPmRldl9hZGRyKSAmJgorCQkgICAgKGVudHJ5LT5kZXYgPT0gcmVmLT5kZXYpKQorCQkJcmV0dXJuIGVudHJ5OworCX0KKworCXJldHVybiBOVUxMOworfQorCisvKgorICogQWRkIGFuIGVudHJ5IHRvIGEgaGFzaCBidWNrZXQKKyAqLworc3RhdGljIHZvaWQgaGFzaF9idWNrZXRfYWRkKHN0cnVjdCBoYXNoX2J1Y2tldCAqYnVja2V0LAorCQkJICAgIHN0cnVjdCBkbWFfZGVidWdfZW50cnkgKmVudHJ5KQoreworCWxpc3RfYWRkX3RhaWwoJmVudHJ5LT5saXN0LCAmYnVja2V0LT5saXN0KTsKK30KKworLyoKKyAqIFJlbW92ZSBlbnRyeSBmcm9tIGEgaGFzaCBidWNrZXQgbGlzdAorICovCitzdGF0aWMgdm9pZCBoYXNoX2J1Y2tldF9kZWwoc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSAqZW50cnkpCit7CisJbGlzdF9kZWwoJmVudHJ5LT5saXN0KTsKK30KKworLyoKKyAqIER1bXAgbWFwcGluZyBlbnRyaWVzIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMKKyAqLwordm9pZCBkZWJ1Z19kbWFfZHVtcF9tYXBwaW5ncyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJaW50IGlkeDsKKworCWZvciAoaWR4ID0gMDsgaWR4IDwgSEFTSF9TSVpFOyBpZHgrKykgeworCQlzdHJ1Y3QgaGFzaF9idWNrZXQgKmJ1Y2tldCA9ICZkbWFfZW50cnlfaGFzaFtpZHhdOworCQlzdHJ1Y3QgZG1hX2RlYnVnX2VudHJ5ICplbnRyeTsKKwkJdW5zaWduZWQgbG9uZyBmbGFnczsKKworCQlzcGluX2xvY2tfaXJxc2F2ZSgmYnVja2V0LT5sb2NrLCBmbGFncyk7CisKKwkJbGlzdF9mb3JfZWFjaF9lbnRyeShlbnRyeSwgJmJ1Y2tldC0+bGlzdCwgbGlzdCkgeworCQkJaWYgKCFkZXYgfHwgZGV2ID09IGVudHJ5LT5kZXYpIHsKKwkJCQlkZXZfaW5mbyhlbnRyeS0+ZGV2LAorCQkJCQkgIiVzIGlkeCAlZCBQPSVMeCBEPSVMeCBMPSVMeCAlc1xuIiwKKwkJCQkJIHR5cGUybmFtZVtlbnRyeS0+dHlwZV0sIGlkeCwKKwkJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpZW50cnktPnBhZGRyLAorCQkJCQkgZW50cnktPmRldl9hZGRyLCBlbnRyeS0+c2l6ZSwKKwkJCQkJIGRpcjJuYW1lW2VudHJ5LT5kaXJlY3Rpb25dKTsKKwkJCX0KKwkJfQorCisJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmJ1Y2tldC0+bG9jaywgZmxhZ3MpOworCX0KK30KK0VYUE9SVF9TWU1CT0woZGVidWdfZG1hX2R1bXBfbWFwcGluZ3MpOworCisvKgorICogV3JhcHBlciBmdW5jdGlvbiBmb3IgYWRkaW5nIGFuIGVudHJ5IHRvIHRoZSBoYXNoLgorICogVGhpcyBmdW5jdGlvbiB0YWtlcyBjYXJlIG9mIGxvY2tpbmcgaXRzZWxmLgorICovCitzdGF0aWMgdm9pZCBhZGRfZG1hX2VudHJ5KHN0cnVjdCBkbWFfZGVidWdfZW50cnkgKmVudHJ5KQoreworCXN0cnVjdCBoYXNoX2J1Y2tldCAqYnVja2V0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlidWNrZXQgPSBnZXRfaGFzaF9idWNrZXQoZW50cnksICZmbGFncyk7CisJaGFzaF9idWNrZXRfYWRkKGJ1Y2tldCwgZW50cnkpOworCXB1dF9oYXNoX2J1Y2tldChidWNrZXQsICZmbGFncyk7Cit9CisKKy8qIHN0cnVjdCBkbWFfZW50cnkgYWxsb2NhdG9yCisgKgorICogVGhlIG5leHQgdHdvIGZ1bmN0aW9ucyBpbXBsZW1lbnQgdGhlIGFsbG9jYXRvciBmb3IKKyAqIHN0cnVjdCBkbWFfZGVidWdfZW50cmllcy4KKyAqLworc3RhdGljIHN0cnVjdCBkbWFfZGVidWdfZW50cnkgKmRtYV9lbnRyeV9hbGxvYyh2b2lkKQoreworCXN0cnVjdCBkbWFfZGVidWdfZW50cnkgKmVudHJ5ID0gTlVMTDsKKwl1bnNpZ25lZCBsb25nIGZsYWdzOworCisJc3Bpbl9sb2NrX2lycXNhdmUoJmZyZWVfZW50cmllc19sb2NrLCBmbGFncyk7CisKKwlpZiAobGlzdF9lbXB0eSgmZnJlZV9lbnRyaWVzKSkgeworCQlwcmludGsoS0VSTl9FUlIgIkRNQS1BUEk6IGRlYnVnZ2luZyBvdXQgb2YgbWVtb3J5ICIKKwkJCQkiLSBkaXNhYmxpbmdcbiIpOworCQlnbG9iYWxfZGlzYWJsZSA9IHRydWU7CisJCWdvdG8gb3V0OworCX0KKworCWVudHJ5ID0gbGlzdF9lbnRyeShmcmVlX2VudHJpZXMubmV4dCwgc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSwgbGlzdCk7CisJbGlzdF9kZWwoJmVudHJ5LT5saXN0KTsKKwltZW1zZXQoZW50cnksIDAsIHNpemVvZigqZW50cnkpKTsKKworI2lmZGVmIENPTkZJR19TVEFDS1RSQUNFCisJZW50cnktPnN0YWNrdHJhY2UubWF4X2VudHJpZXMgPSBETUFfREVCVUdfU1RBQ0tUUkFDRV9FTlRSSUVTOworCWVudHJ5LT5zdGFja3RyYWNlLmVudHJpZXMgPSBlbnRyeS0+c3RfZW50cmllczsKKwllbnRyeS0+c3RhY2t0cmFjZS5za2lwID0gMjsKKwlzYXZlX3N0YWNrX3RyYWNlKCZlbnRyeS0+c3RhY2t0cmFjZSk7CisjZW5kaWYKKwludW1fZnJlZV9lbnRyaWVzIC09IDE7CisJaWYgKG51bV9mcmVlX2VudHJpZXMgPCBtaW5fZnJlZV9lbnRyaWVzKQorCQltaW5fZnJlZV9lbnRyaWVzID0gbnVtX2ZyZWVfZW50cmllczsKKworb3V0OgorCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmZyZWVfZW50cmllc19sb2NrLCBmbGFncyk7CisKKwlyZXR1cm4gZW50cnk7Cit9CisKK3N0YXRpYyB2b2lkIGRtYV9lbnRyeV9mcmVlKHN0cnVjdCBkbWFfZGVidWdfZW50cnkgKmVudHJ5KQoreworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwkvKgorCSAqIGFkZCB0byBiZWdpbm5pbmcgb2YgdGhlIGxpc3QgLSB0aGlzIHdheSB0aGUgZW50cmllcyBhcmUKKwkgKiBtb3JlIGxpa2VseSBjYWNoZSBob3Qgd2hlbiB0aGV5IGFyZSByZWFsbG9jYXRlZC4KKwkgKi8KKwlzcGluX2xvY2tfaXJxc2F2ZSgmZnJlZV9lbnRyaWVzX2xvY2ssIGZsYWdzKTsKKwlsaXN0X2FkZCgmZW50cnktPmxpc3QsICZmcmVlX2VudHJpZXMpOworCW51bV9mcmVlX2VudHJpZXMgKz0gMTsKKwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZmcmVlX2VudHJpZXNfbG9jaywgZmxhZ3MpOworfQorCisvKgorICogRE1BLUFQSSBkZWJ1Z2dpbmcgaW5pdCBjb2RlCisgKgorICogVGhlIGluaXQgY29kZSBkb2VzIHR3byB0aGluZ3M6CisgKiAgIDEuIEluaXRpYWxpemUgY29yZSBkYXRhIHN0cnVjdHVyZXMKKyAqICAgMi4gUHJlYWxsb2NhdGUgYSBnaXZlbiBudW1iZXIgb2YgZG1hX2RlYnVnX2VudHJ5IHN0cnVjdHMKKyAqLworCitzdGF0aWMgaW50IHByZWFsbG9jX21lbW9yeSh1MzIgbnVtX2VudHJpZXMpCit7CisJc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSAqZW50cnksICpuZXh0X2VudHJ5OworCWludCBpOworCisJZm9yIChpID0gMDsgaSA8IG51bV9lbnRyaWVzOyArK2kpIHsKKwkJZW50cnkgPSBremFsbG9jKHNpemVvZigqZW50cnkpLCBHRlBfS0VSTkVMKTsKKwkJaWYgKCFlbnRyeSkKKwkJCWdvdG8gb3V0X2VycjsKKworCQlsaXN0X2FkZF90YWlsKCZlbnRyeS0+bGlzdCwgJmZyZWVfZW50cmllcyk7CisJfQorCisJbnVtX2ZyZWVfZW50cmllcyA9IG51bV9lbnRyaWVzOworCW1pbl9mcmVlX2VudHJpZXMgPSBudW1fZW50cmllczsKKworCXByaW50ayhLRVJOX0lORk8gIkRNQS1BUEk6IHByZWFsbG9jYXRlZCAlZCBkZWJ1ZyBlbnRyaWVzXG4iLAorCQkJbnVtX2VudHJpZXMpOworCisJcmV0dXJuIDA7CisKK291dF9lcnI6CisKKwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoZW50cnksIG5leHRfZW50cnksICZmcmVlX2VudHJpZXMsIGxpc3QpIHsKKwkJbGlzdF9kZWwoJmVudHJ5LT5saXN0KTsKKwkJa2ZyZWUoZW50cnkpOworCX0KKworCXJldHVybiAtRU5PTUVNOworfQorCitzdGF0aWMgaW50IGRtYV9kZWJ1Z19mc19pbml0KHZvaWQpCit7CisJZG1hX2RlYnVnX2RlbnQgPSBkZWJ1Z2ZzX2NyZWF0ZV9kaXIoImRtYS1hcGkiLCBOVUxMKTsKKwlpZiAoIWRtYV9kZWJ1Z19kZW50KSB7CisJCXByaW50ayhLRVJOX0VSUiAiRE1BLUFQSTogY2FuIG5vdCBjcmVhdGUgZGVidWdmcyBkaXJlY3RvcnlcbiIpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlnbG9iYWxfZGlzYWJsZV9kZW50ID0gZGVidWdmc19jcmVhdGVfYm9vbCgiZGlzYWJsZWQiLCAwNDQ0LAorCQkJZG1hX2RlYnVnX2RlbnQsCisJCQkodTMyICopJmdsb2JhbF9kaXNhYmxlKTsKKwlpZiAoIWdsb2JhbF9kaXNhYmxlX2RlbnQpCisJCWdvdG8gb3V0X2VycjsKKworCWVycm9yX2NvdW50X2RlbnQgPSBkZWJ1Z2ZzX2NyZWF0ZV91MzIoImVycm9yX2NvdW50IiwgMDQ0NCwKKwkJCWRtYV9kZWJ1Z19kZW50LCAmZXJyb3JfY291bnQpOworCWlmICghZXJyb3JfY291bnRfZGVudCkKKwkJZ290byBvdXRfZXJyOworCisJc2hvd19hbGxfZXJyb3JzX2RlbnQgPSBkZWJ1Z2ZzX2NyZWF0ZV91MzIoImFsbF9lcnJvcnMiLCAwNjQ0LAorCQkJZG1hX2RlYnVnX2RlbnQsCisJCQkmc2hvd19hbGxfZXJyb3JzKTsKKwlpZiAoIXNob3dfYWxsX2Vycm9yc19kZW50KQorCQlnb3RvIG91dF9lcnI7CisKKwlzaG93X251bV9lcnJvcnNfZGVudCA9IGRlYnVnZnNfY3JlYXRlX3UzMigibnVtX2Vycm9ycyIsIDA2NDQsCisJCQlkbWFfZGVidWdfZGVudCwKKwkJCSZzaG93X251bV9lcnJvcnMpOworCWlmICghc2hvd19udW1fZXJyb3JzX2RlbnQpCisJCWdvdG8gb3V0X2VycjsKKworCW51bV9mcmVlX2VudHJpZXNfZGVudCA9IGRlYnVnZnNfY3JlYXRlX3UzMigibnVtX2ZyZWVfZW50cmllcyIsIDA0NDQsCisJCQlkbWFfZGVidWdfZGVudCwKKwkJCSZudW1fZnJlZV9lbnRyaWVzKTsKKwlpZiAoIW51bV9mcmVlX2VudHJpZXNfZGVudCkKKwkJZ290byBvdXRfZXJyOworCisJbWluX2ZyZWVfZW50cmllc19kZW50ID0gZGVidWdmc19jcmVhdGVfdTMyKCJtaW5fZnJlZV9lbnRyaWVzIiwgMDQ0NCwKKwkJCWRtYV9kZWJ1Z19kZW50LAorCQkJJm1pbl9mcmVlX2VudHJpZXMpOworCWlmICghbWluX2ZyZWVfZW50cmllc19kZW50KQorCQlnb3RvIG91dF9lcnI7CisKKwlyZXR1cm4gMDsKKworb3V0X2VycjoKKwlkZWJ1Z2ZzX3JlbW92ZV9yZWN1cnNpdmUoZG1hX2RlYnVnX2RlbnQpOworCisJcmV0dXJuIC1FTk9NRU07Cit9CisKK3N0YXRpYyBpbnQgZGV2aWNlX2RtYV9hbGxvY2F0aW9ucyhzdHJ1Y3QgZGV2aWNlICpkZXYpCit7CisJc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSAqZW50cnk7CisJdW5zaWduZWQgbG9uZyBmbGFnczsKKwlpbnQgY291bnQgPSAwLCBpOworCisJZm9yIChpID0gMDsgaSA8IEhBU0hfU0laRTsgKytpKSB7CisJCXNwaW5fbG9ja19pcnFzYXZlKCZkbWFfZW50cnlfaGFzaFtpXS5sb2NrLCBmbGFncyk7CisJCWxpc3RfZm9yX2VhY2hfZW50cnkoZW50cnksICZkbWFfZW50cnlfaGFzaFtpXS5saXN0LCBsaXN0KSB7CisJCQlpZiAoZW50cnktPmRldiA9PSBkZXYpCisJCQkJY291bnQgKz0gMTsKKwkJfQorCQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZkbWFfZW50cnlfaGFzaFtpXS5sb2NrLCBmbGFncyk7CisJfQorCisJcmV0dXJuIGNvdW50OworfQorCitzdGF0aWMgaW50IGRtYV9kZWJ1Z19kZXZpY2VfY2hhbmdlKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsCisJCQkJICAgIHVuc2lnbmVkIGxvbmcgYWN0aW9uLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCBkZXZpY2UgKmRldiA9IGRhdGE7CisJaW50IGNvdW50OworCisKKwlzd2l0Y2ggKGFjdGlvbikgeworCWNhc2UgQlVTX05PVElGWV9VTkJJTkRfRFJJVkVSOgorCQljb3VudCA9IGRldmljZV9kbWFfYWxsb2NhdGlvbnMoZGV2KTsKKwkJaWYgKGNvdW50ID09IDApCisJCQlicmVhazsKKwkJZXJyX3ByaW50ayhkZXYsIE5VTEwsICJETUEtQVBJOiBkZXZpY2UgZHJpdmVyIGhhcyBwZW5kaW5nICIKKwkJCQkiRE1BIGFsbG9jYXRpb25zIHdoaWxlIHJlbGVhc2VkIGZyb20gZGV2aWNlICIKKwkJCQkiW2NvdW50PSVkXVxuIiwgY291bnQpOworCQlicmVhazsKKwlkZWZhdWx0OgorCQlicmVhazsKKwl9CisKKwlyZXR1cm4gMDsKK30KKwordm9pZCBkbWFfZGVidWdfYWRkX2J1cyhzdHJ1Y3QgYnVzX3R5cGUgKmJ1cykKK3sKKwlzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iOworCisJbmIgPSBremFsbG9jKHNpemVvZihzdHJ1Y3Qgbm90aWZpZXJfYmxvY2spLCBHRlBfS0VSTkVMKTsKKwlpZiAobmIgPT0gTlVMTCkgeworCQlwcmludGsoS0VSTl9FUlIgImRtYV9kZWJ1Z19hZGRfYnVzOiBvdXQgb2YgbWVtb3J5XG4iKTsKKwkJcmV0dXJuOworCX0KKworCW5iLT5ub3RpZmllcl9jYWxsID0gZG1hX2RlYnVnX2RldmljZV9jaGFuZ2U7CisKKwlidXNfcmVnaXN0ZXJfbm90aWZpZXIoYnVzLCBuYik7Cit9CisKKy8qCisgKiBMZXQgdGhlIGFyY2hpdGVjdHVyZXMgZGVjaWRlIGhvdyBtYW55IGVudHJpZXMgc2hvdWxkIGJlIHByZWFsbG9jYXRlZC4KKyAqLwordm9pZCBkbWFfZGVidWdfaW5pdCh1MzIgbnVtX2VudHJpZXMpCit7CisJaW50IGk7CisKKwlpZiAoZ2xvYmFsX2Rpc2FibGUpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCBIQVNIX1NJWkU7ICsraSkgeworCQlJTklUX0xJU1RfSEVBRCgmZG1hX2VudHJ5X2hhc2hbaV0ubGlzdCk7CisJCWRtYV9lbnRyeV9oYXNoW2ldLmxvY2sgPSBTUElOX0xPQ0tfVU5MT0NLRUQ7CisJfQorCisJaWYgKGRtYV9kZWJ1Z19mc19pbml0KCkgIT0gMCkgeworCQlwcmludGsoS0VSTl9FUlIgIkRNQS1BUEk6IGVycm9yIGNyZWF0aW5nIGRlYnVnZnMgZW50cmllcyAiCisJCQkJIi0gZGlzYWJsaW5nXG4iKTsKKwkJZ2xvYmFsX2Rpc2FibGUgPSB0cnVlOworCisJCXJldHVybjsKKwl9CisKKwlpZiAocmVxX2VudHJpZXMpCisJCW51bV9lbnRyaWVzID0gcmVxX2VudHJpZXM7CisKKwlpZiAocHJlYWxsb2NfbWVtb3J5KG51bV9lbnRyaWVzKSAhPSAwKSB7CisJCXByaW50ayhLRVJOX0VSUiAiRE1BLUFQSTogZGVidWdnaW5nIG91dCBvZiBtZW1vcnkgZXJyb3IgIgorCQkJCSItIGRpc2FibGVkXG4iKTsKKwkJZ2xvYmFsX2Rpc2FibGUgPSB0cnVlOworCisJCXJldHVybjsKKwl9CisKKwlwcmludGsoS0VSTl9JTkZPICJETUEtQVBJOiBkZWJ1Z2dpbmcgZW5hYmxlZCBieSBrZXJuZWwgY29uZmlnXG4iKTsKK30KKworc3RhdGljIF9faW5pdCBpbnQgZG1hX2RlYnVnX2NtZGxpbmUoY2hhciAqc3RyKQoreworCWlmICghc3RyKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCWlmIChzdHJuY21wKHN0ciwgIm9mZiIsIDMpID09IDApIHsKKwkJcHJpbnRrKEtFUk5fSU5GTyAiRE1BLUFQSTogZGVidWdnaW5nIGRpc2FibGVkIG9uIGtlcm5lbCAiCisJCQkJICJjb21tYW5kIGxpbmVcbiIpOworCQlnbG9iYWxfZGlzYWJsZSA9IHRydWU7CisJfQorCisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBfX2luaXQgaW50IGRtYV9kZWJ1Z19lbnRyaWVzX2NtZGxpbmUoY2hhciAqc3RyKQoreworCWludCByZXM7CisKKwlpZiAoIXN0cikKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlyZXMgPSBnZXRfb3B0aW9uKCZzdHIsICZyZXFfZW50cmllcyk7CisKKwlpZiAoIXJlcykKKwkJcmVxX2VudHJpZXMgPSAwOworCisJcmV0dXJuIDA7Cit9CisKK19fc2V0dXAoImRtYV9kZWJ1Zz0iLCBkbWFfZGVidWdfY21kbGluZSk7CitfX3NldHVwKCJkbWFfZGVidWdfZW50cmllcz0iLCBkbWFfZGVidWdfZW50cmllc19jbWRsaW5lKTsKKworc3RhdGljIHZvaWQgY2hlY2tfdW5tYXAoc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSAqcmVmKQoreworCXN0cnVjdCBkbWFfZGVidWdfZW50cnkgKmVudHJ5OworCXN0cnVjdCBoYXNoX2J1Y2tldCAqYnVja2V0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAoZG1hX21hcHBpbmdfZXJyb3IocmVmLT5kZXYsIHJlZi0+ZGV2X2FkZHIpKSB7CisJCWVycl9wcmludGsocmVmLT5kZXYsIE5VTEwsICJETUEtQVBJOiBkZXZpY2UgZHJpdmVyIHRyaWVzICIKKwkJCSAgICJ0byBmcmVlIGFuIGludmFsaWQgRE1BIG1lbW9yeSBhZGRyZXNzXG4iKTsKKwkJcmV0dXJuOworCX0KKworCWJ1Y2tldCA9IGdldF9oYXNoX2J1Y2tldChyZWYsICZmbGFncyk7CisJZW50cnkgPSBoYXNoX2J1Y2tldF9maW5kKGJ1Y2tldCwgcmVmKTsKKworCWlmICghZW50cnkpIHsKKwkJZXJyX3ByaW50ayhyZWYtPmRldiwgTlVMTCwgIkRNQS1BUEk6IGRldmljZSBkcml2ZXIgdHJpZXMgIgorCQkJICAgInRvIGZyZWUgRE1BIG1lbW9yeSBpdCBoYXMgbm90IGFsbG9jYXRlZCAiCisJCQkgICAiW2RldmljZSBhZGRyZXNzPTB4JTAxNmxseF0gW3NpemU9JWxsdSBieXRlc11cbiIsCisJCQkgICByZWYtPmRldl9hZGRyLCByZWYtPnNpemUpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAocmVmLT5zaXplICE9IGVudHJ5LT5zaXplKSB7CisJCWVycl9wcmludGsocmVmLT5kZXYsIGVudHJ5LCAiRE1BLUFQSTogZGV2aWNlIGRyaXZlciBmcmVlcyAiCisJCQkgICAiRE1BIG1lbW9yeSB3aXRoIGRpZmZlcmVudCBzaXplICIKKwkJCSAgICJbZGV2aWNlIGFkZHJlc3M9MHglMDE2bGx4XSBbbWFwIHNpemU9JWxsdSBieXRlc10gIgorCQkJICAgIlt1bm1hcCBzaXplPSVsbHUgYnl0ZXNdXG4iLAorCQkJICAgcmVmLT5kZXZfYWRkciwgZW50cnktPnNpemUsIHJlZi0+c2l6ZSk7CisJfQorCisJaWYgKHJlZi0+dHlwZSAhPSBlbnRyeS0+dHlwZSkgeworCQllcnJfcHJpbnRrKHJlZi0+ZGV2LCBlbnRyeSwgIkRNQS1BUEk6IGRldmljZSBkcml2ZXIgZnJlZXMgIgorCQkJICAgIkRNQSBtZW1vcnkgd2l0aCB3cm9uZyBmdW5jdGlvbiAiCisJCQkgICAiW2RldmljZSBhZGRyZXNzPTB4JTAxNmxseF0gW3NpemU9JWxsdSBieXRlc10gIgorCQkJICAgIlttYXBwZWQgYXMgJXNdIFt1bm1hcHBlZCBhcyAlc11cbiIsCisJCQkgICByZWYtPmRldl9hZGRyLCByZWYtPnNpemUsCisJCQkgICB0eXBlMm5hbWVbZW50cnktPnR5cGVdLCB0eXBlMm5hbWVbcmVmLT50eXBlXSk7CisJfSBlbHNlIGlmICgoZW50cnktPnR5cGUgPT0gZG1hX2RlYnVnX2NvaGVyZW50KSAmJgorCQkgICAocmVmLT5wYWRkciAhPSBlbnRyeS0+cGFkZHIpKSB7CisJCWVycl9wcmludGsocmVmLT5kZXYsIGVudHJ5LCAiRE1BLUFQSTogZGV2aWNlIGRyaXZlciBmcmVlcyAiCisJCQkgICAiRE1BIG1lbW9yeSB3aXRoIGRpZmZlcmVudCBDUFUgYWRkcmVzcyAiCisJCQkgICAiW2RldmljZSBhZGRyZXNzPTB4JTAxNmxseF0gW3NpemU9JWxsdSBieXRlc10gIgorCQkJICAgIltjcHUgYWxsb2MgYWRkcmVzcz0lcF0gW2NwdSBmcmVlIGFkZHJlc3M9JXBdIiwKKwkJCSAgIHJlZi0+ZGV2X2FkZHIsIHJlZi0+c2l6ZSwKKwkJCSAgICh2b2lkICopZW50cnktPnBhZGRyLCAodm9pZCAqKXJlZi0+cGFkZHIpOworCX0KKworCWlmIChyZWYtPnNnX2NhbGxfZW50cyAmJiByZWYtPnR5cGUgPT0gZG1hX2RlYnVnX3NnICYmCisJICAgIHJlZi0+c2dfY2FsbF9lbnRzICE9IGVudHJ5LT5zZ19jYWxsX2VudHMpIHsKKwkJZXJyX3ByaW50ayhyZWYtPmRldiwgZW50cnksICJETUEtQVBJOiBkZXZpY2UgZHJpdmVyIGZyZWVzICIKKwkJCSAgICJETUEgc2cgbGlzdCB3aXRoIGRpZmZlcmVudCBlbnRyeSBjb3VudCAiCisJCQkgICAiW21hcCBjb3VudD0lZF0gW3VubWFwIGNvdW50PSVkXVxuIiwKKwkJCSAgIGVudHJ5LT5zZ19jYWxsX2VudHMsIHJlZi0+c2dfY2FsbF9lbnRzKTsKKwl9CisKKwkvKgorCSAqIFRoaXMgbWF5IGJlIG5vIGJ1ZyBpbiByZWFsaXR5IC0gYnV0IG1vc3QgaW1wbGVtZW50YXRpb25zIG9mIHRoZQorCSAqIERNQSBBUEkgZG9uJ3QgaGFuZGxlIHRoaXMgcHJvcGVybHksIHNvIGNoZWNrIGZvciBpdCBoZXJlCisJICovCisJaWYgKHJlZi0+ZGlyZWN0aW9uICE9IGVudHJ5LT5kaXJlY3Rpb24pIHsKKwkJZXJyX3ByaW50ayhyZWYtPmRldiwgZW50cnksICJETUEtQVBJOiBkZXZpY2UgZHJpdmVyIGZyZWVzICIKKwkJCSAgICJETUEgbWVtb3J5IHdpdGggZGlmZmVyZW50IGRpcmVjdGlvbiAiCisJCQkgICAiW2RldmljZSBhZGRyZXNzPTB4JTAxNmxseF0gW3NpemU9JWxsdSBieXRlc10gIgorCQkJICAgIlttYXBwZWQgd2l0aCAlc10gW3VubWFwcGVkIHdpdGggJXNdXG4iLAorCQkJICAgcmVmLT5kZXZfYWRkciwgcmVmLT5zaXplLAorCQkJICAgZGlyMm5hbWVbZW50cnktPmRpcmVjdGlvbl0sCisJCQkgICBkaXIybmFtZVtyZWYtPmRpcmVjdGlvbl0pOworCX0KKworCWhhc2hfYnVja2V0X2RlbChlbnRyeSk7CisJZG1hX2VudHJ5X2ZyZWUoZW50cnkpOworCitvdXQ6CisJcHV0X2hhc2hfYnVja2V0KGJ1Y2tldCwgJmZsYWdzKTsKK30KKworc3RhdGljIHZvaWQgY2hlY2tfZm9yX3N0YWNrKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYWRkcikKK3sKKwlpZiAob2JqZWN0X2lzX29uX3N0YWNrKGFkZHIpKQorCQllcnJfcHJpbnRrKGRldiwgTlVMTCwgIkRNQS1BUEk6IGRldmljZSBkcml2ZXIgbWFwcyBtZW1vcnkgZnJvbSIKKwkJCQkic3RhY2sgW2FkZHI9JXBdXG4iLCBhZGRyKTsKK30KKworc3RhdGljIGlubGluZSBib29sIG92ZXJsYXAodm9pZCAqYWRkciwgdTY0IHNpemUsIHZvaWQgKnN0YXJ0LCB2b2lkICplbmQpCit7CisJdm9pZCAqYWRkcjIgPSAoY2hhciAqKWFkZHIgKyBzaXplOworCisJcmV0dXJuICgoYWRkciA+PSBzdGFydCAmJiBhZGRyIDwgZW5kKSB8fAorCQkoYWRkcjIgPj0gc3RhcnQgJiYgYWRkcjIgPCBlbmQpIHx8CisJCSgoYWRkciA8IHN0YXJ0KSAmJiAoYWRkcjIgPj0gZW5kKSkpOworfQorCitzdGF0aWMgdm9pZCBjaGVja19mb3JfaWxsZWdhbF9hcmVhKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqYWRkciwgdTY0IHNpemUpCit7CisJaWYgKG92ZXJsYXAoYWRkciwgc2l6ZSwgX3RleHQsIF9ldGV4dCkgfHwKKwkgICAgb3ZlcmxhcChhZGRyLCBzaXplLCBfX3N0YXJ0X3JvZGF0YSwgX19lbmRfcm9kYXRhKSkKKwkJZXJyX3ByaW50ayhkZXYsIE5VTEwsICJETUEtQVBJOiBkZXZpY2UgZHJpdmVyIG1hcHMgIgorCQkJCSJtZW1vcnkgZnJvbSBrZXJuZWwgdGV4dCBvciByb2RhdGEgIgorCQkJCSJbYWRkcj0lcF0gW3NpemU9JWxsdV1cbiIsIGFkZHIsIHNpemUpOworfQorCitzdGF0aWMgdm9pZCBjaGVja19zeW5jKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyLAorCQkgICAgICAgdTY0IHNpemUsIHU2NCBvZmZzZXQsIGludCBkaXJlY3Rpb24sIGJvb2wgdG9fY3B1KQoreworCXN0cnVjdCBkbWFfZGVidWdfZW50cnkgcmVmID0geworCQkuZGV2ICAgICAgICAgICAgPSBkZXYsCisJCS5kZXZfYWRkciAgICAgICA9IGFkZHIsCisJCS5zaXplICAgICAgICAgICA9IHNpemUsCisJCS5kaXJlY3Rpb24gICAgICA9IGRpcmVjdGlvbiwKKwl9OworCXN0cnVjdCBkbWFfZGVidWdfZW50cnkgKmVudHJ5OworCXN0cnVjdCBoYXNoX2J1Y2tldCAqYnVja2V0OworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlidWNrZXQgPSBnZXRfaGFzaF9idWNrZXQoJnJlZiwgJmZsYWdzKTsKKworCWVudHJ5ID0gaGFzaF9idWNrZXRfZmluZChidWNrZXQsICZyZWYpOworCisJaWYgKCFlbnRyeSkgeworCQllcnJfcHJpbnRrKGRldiwgTlVMTCwgIkRNQS1BUEk6IGRldmljZSBkcml2ZXIgdHJpZXMgIgorCQkJCSJ0byBzeW5jIERNQSBtZW1vcnkgaXQgaGFzIG5vdCBhbGxvY2F0ZWQgIgorCQkJCSJbZGV2aWNlIGFkZHJlc3M9MHglMDE2bGx4XSBbc2l6ZT0lbGx1IGJ5dGVzXVxuIiwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKWFkZHIsIHNpemUpOworCQlnb3RvIG91dDsKKwl9CisKKwlpZiAoKG9mZnNldCArIHNpemUpID4gZW50cnktPnNpemUpIHsKKwkJZXJyX3ByaW50ayhkZXYsIGVudHJ5LCAiRE1BLUFQSTogZGV2aWNlIGRyaXZlciBzeW5jcyIKKwkJCQkiIERNQSBtZW1vcnkgb3V0c2lkZSBhbGxvY2F0ZWQgcmFuZ2UgIgorCQkJCSJbZGV2aWNlIGFkZHJlc3M9MHglMDE2bGx4XSAiCisJCQkJIlthbGxvY2F0aW9uIHNpemU9JWxsdSBieXRlc10gW3N5bmMgb2Zmc2V0PSVsbHVdICIKKwkJCQkiW3N5bmMgc2l6ZT0lbGx1XVxuIiwgZW50cnktPmRldl9hZGRyLCBlbnRyeS0+c2l6ZSwKKwkJCQlvZmZzZXQsIHNpemUpOworCX0KKworCWlmIChkaXJlY3Rpb24gIT0gZW50cnktPmRpcmVjdGlvbikgeworCQllcnJfcHJpbnRrKGRldiwgZW50cnksICJETUEtQVBJOiBkZXZpY2UgZHJpdmVyIHN5bmNzICIKKwkJCQkiRE1BIG1lbW9yeSB3aXRoIGRpZmZlcmVudCBkaXJlY3Rpb24gIgorCQkJCSJbZGV2aWNlIGFkZHJlc3M9MHglMDE2bGx4XSBbc2l6ZT0lbGx1IGJ5dGVzXSAiCisJCQkJIlttYXBwZWQgd2l0aCAlc10gW3N5bmNlZCB3aXRoICVzXVxuIiwKKwkJCQkodW5zaWduZWQgbG9uZyBsb25nKWFkZHIsIGVudHJ5LT5zaXplLAorCQkJCWRpcjJuYW1lW2VudHJ5LT5kaXJlY3Rpb25dLAorCQkJCWRpcjJuYW1lW2RpcmVjdGlvbl0pOworCX0KKworCWlmIChlbnRyeS0+ZGlyZWN0aW9uID09IERNQV9CSURJUkVDVElPTkFMKQorCQlnb3RvIG91dDsKKworCWlmICh0b19jcHUgJiYgIShlbnRyeS0+ZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkgJiYKKwkJICAgICAgIShkaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkpCisJCWVycl9wcmludGsoZGV2LCBlbnRyeSwgIkRNQS1BUEk6IGRldmljZSBkcml2ZXIgc3luY3MgIgorCQkJCSJkZXZpY2UgcmVhZC1vbmx5IERNQSBtZW1vcnkgZm9yIGNwdSAiCisJCQkJIltkZXZpY2UgYWRkcmVzcz0weCUwMTZsbHhdIFtzaXplPSVsbHUgYnl0ZXNdICIKKwkJCQkiW21hcHBlZCB3aXRoICVzXSBbc3luY2VkIHdpdGggJXNdXG4iLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpYWRkciwgZW50cnktPnNpemUsCisJCQkJZGlyMm5hbWVbZW50cnktPmRpcmVjdGlvbl0sCisJCQkJZGlyMm5hbWVbZGlyZWN0aW9uXSk7CisKKwlpZiAoIXRvX2NwdSAmJiAhKGVudHJ5LT5kaXJlY3Rpb24gPT0gRE1BX1RPX0RFVklDRSkgJiYKKwkJICAgICAgICEoZGlyZWN0aW9uID09IERNQV9GUk9NX0RFVklDRSkpCisJCWVycl9wcmludGsoZGV2LCBlbnRyeSwgIkRNQS1BUEk6IGRldmljZSBkcml2ZXIgc3luY3MgIgorCQkJCSJkZXZpY2Ugd3JpdGUtb25seSBETUEgbWVtb3J5IHRvIGRldmljZSAiCisJCQkJIltkZXZpY2UgYWRkcmVzcz0weCUwMTZsbHhdIFtzaXplPSVsbHUgYnl0ZXNdICIKKwkJCQkiW21hcHBlZCB3aXRoICVzXSBbc3luY2VkIHdpdGggJXNdXG4iLAorCQkJCSh1bnNpZ25lZCBsb25nIGxvbmcpYWRkciwgZW50cnktPnNpemUsCisJCQkJZGlyMm5hbWVbZW50cnktPmRpcmVjdGlvbl0sCisJCQkJZGlyMm5hbWVbZGlyZWN0aW9uXSk7CisKK291dDoKKwlwdXRfaGFzaF9idWNrZXQoYnVja2V0LCAmZmxhZ3MpOworCit9CisKK3ZvaWQgZGVidWdfZG1hX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsIHNpemVfdCBvZmZzZXQsCisJCQlzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKKwkJCWJvb2wgbWFwX3NpbmdsZSkKK3sKKwlzdHJ1Y3QgZG1hX2RlYnVnX2VudHJ5ICplbnRyeTsKKworCWlmICh1bmxpa2VseShnbG9iYWxfZGlzYWJsZSkpCisJCXJldHVybjsKKworCWlmICh1bmxpa2VseShkbWFfbWFwcGluZ19lcnJvcihkZXYsIGRtYV9hZGRyKSkpCisJCXJldHVybjsKKworCWVudHJ5ID0gZG1hX2VudHJ5X2FsbG9jKCk7CisJaWYgKCFlbnRyeSkKKwkJcmV0dXJuOworCisJZW50cnktPmRldiAgICAgICA9IGRldjsKKwllbnRyeS0+dHlwZSAgICAgID0gZG1hX2RlYnVnX3BhZ2U7CisJZW50cnktPnBhZGRyICAgICA9IHBhZ2VfdG9fcGh5cyhwYWdlKSArIG9mZnNldDsKKwllbnRyeS0+ZGV2X2FkZHIgID0gZG1hX2FkZHI7CisJZW50cnktPnNpemUgICAgICA9IHNpemU7CisJZW50cnktPmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKKworCWlmIChtYXBfc2luZ2xlKQorCQllbnRyeS0+dHlwZSA9IGRtYV9kZWJ1Z19zaW5nbGU7CisKKwlpZiAoIVBhZ2VIaWdoTWVtKHBhZ2UpKSB7CisJCXZvaWQgKmFkZHIgPSAoKGNoYXIgKilwYWdlX2FkZHJlc3MocGFnZSkpICsgb2Zmc2V0OworCQljaGVja19mb3Jfc3RhY2soZGV2LCBhZGRyKTsKKwkJY2hlY2tfZm9yX2lsbGVnYWxfYXJlYShkZXYsIGFkZHIsIHNpemUpOworCX0KKworCWFkZF9kbWFfZW50cnkoZW50cnkpOworfQorRVhQT1JUX1NZTUJPTChkZWJ1Z19kbWFfbWFwX3BhZ2UpOworCit2b2lkIGRlYnVnX2RtYV91bm1hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBhZGRyLAorCQkJICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbiwgYm9vbCBtYXBfc2luZ2xlKQoreworCXN0cnVjdCBkbWFfZGVidWdfZW50cnkgcmVmID0geworCQkudHlwZSAgICAgICAgICAgPSBkbWFfZGVidWdfcGFnZSwKKwkJLmRldiAgICAgICAgICAgID0gZGV2LAorCQkuZGV2X2FkZHIgICAgICAgPSBhZGRyLAorCQkuc2l6ZSAgICAgICAgICAgPSBzaXplLAorCQkuZGlyZWN0aW9uICAgICAgPSBkaXJlY3Rpb24sCisJfTsKKworCWlmICh1bmxpa2VseShnbG9iYWxfZGlzYWJsZSkpCisJCXJldHVybjsKKworCWlmIChtYXBfc2luZ2xlKQorCQlyZWYudHlwZSA9IGRtYV9kZWJ1Z19zaW5nbGU7CisKKwljaGVja191bm1hcCgmcmVmKTsKK30KK0VYUE9SVF9TWU1CT0woZGVidWdfZG1hX3VubWFwX3BhZ2UpOworCit2b2lkIGRlYnVnX2RtYV9tYXBfc2coc3RydWN0IGRldmljZSAqZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAorCQkgICAgICBpbnQgbmVudHMsIGludCBtYXBwZWRfZW50cywgaW50IGRpcmVjdGlvbikKK3sKKwlzdHJ1Y3QgZG1hX2RlYnVnX2VudHJ5ICplbnRyeTsKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnM7CisJaW50IGk7CisKKwlpZiAodW5saWtlbHkoZ2xvYmFsX2Rpc2FibGUpKQorCQlyZXR1cm47CisKKwlmb3JfZWFjaF9zZyhzZywgcywgbWFwcGVkX2VudHMsIGkpIHsKKwkJZW50cnkgPSBkbWFfZW50cnlfYWxsb2MoKTsKKwkJaWYgKCFlbnRyeSkKKwkJCXJldHVybjsKKworCQllbnRyeS0+dHlwZSAgICAgICAgICAgPSBkbWFfZGVidWdfc2c7CisJCWVudHJ5LT5kZXYgICAgICAgICAgICA9IGRldjsKKwkJZW50cnktPnBhZGRyICAgICAgICAgID0gc2dfcGh5cyhzKTsKKwkJZW50cnktPnNpemUgICAgICAgICAgID0gcy0+bGVuZ3RoOworCQllbnRyeS0+ZGV2X2FkZHIgICAgICAgPSBzLT5kbWFfYWRkcmVzczsKKwkJZW50cnktPmRpcmVjdGlvbiAgICAgID0gZGlyZWN0aW9uOworCQllbnRyeS0+c2dfY2FsbF9lbnRzICAgPSBuZW50czsKKwkJZW50cnktPnNnX21hcHBlZF9lbnRzID0gbWFwcGVkX2VudHM7CisKKwkJaWYgKCFQYWdlSGlnaE1lbShzZ19wYWdlKHMpKSkgeworCQkJY2hlY2tfZm9yX3N0YWNrKGRldiwgc2dfdmlydChzKSk7CisJCQljaGVja19mb3JfaWxsZWdhbF9hcmVhKGRldiwgc2dfdmlydChzKSwgcy0+bGVuZ3RoKTsKKwkJfQorCisJCWFkZF9kbWFfZW50cnkoZW50cnkpOworCX0KK30KK0VYUE9SVF9TWU1CT0woZGVidWdfZG1hX21hcF9zZyk7CisKK3ZvaWQgZGVidWdfZG1hX3VubWFwX3NnKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZ2xpc3QsCisJCQlpbnQgbmVsZW1zLCBpbnQgZGlyKQoreworCXN0cnVjdCBkbWFfZGVidWdfZW50cnkgKmVudHJ5OworCXN0cnVjdCBzY2F0dGVybGlzdCAqczsKKwlpbnQgbWFwcGVkX2VudHMgPSAwLCBpOworCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CisKKwlpZiAodW5saWtlbHkoZ2xvYmFsX2Rpc2FibGUpKQorCQlyZXR1cm47CisKKwlmb3JfZWFjaF9zZyhzZ2xpc3QsIHMsIG5lbGVtcywgaSkgeworCisJCXN0cnVjdCBkbWFfZGVidWdfZW50cnkgcmVmID0geworCQkJLnR5cGUgICAgICAgICAgID0gZG1hX2RlYnVnX3NnLAorCQkJLmRldiAgICAgICAgICAgID0gZGV2LAorCQkJLnBhZGRyICAgICAgICAgID0gc2dfcGh5cyhzKSwKKwkJCS5kZXZfYWRkciAgICAgICA9IHMtPmRtYV9hZGRyZXNzLAorCQkJLnNpemUgICAgICAgICAgID0gcy0+bGVuZ3RoLAorCQkJLmRpcmVjdGlvbiAgICAgID0gZGlyLAorCQkJLnNnX2NhbGxfZW50cyAgID0gMCwKKwkJfTsKKworCQlpZiAobWFwcGVkX2VudHMgJiYgaSA+PSBtYXBwZWRfZW50cykKKwkJCWJyZWFrOworCisJCWlmIChtYXBwZWRfZW50cyA9PSAwKSB7CisJCQlzdHJ1Y3QgaGFzaF9idWNrZXQgKmJ1Y2tldDsKKwkJCXJlZi5zZ19jYWxsX2VudHMgPSBuZWxlbXM7CisJCQlidWNrZXQgPSBnZXRfaGFzaF9idWNrZXQoJnJlZiwgJmZsYWdzKTsKKwkJCWVudHJ5ID0gaGFzaF9idWNrZXRfZmluZChidWNrZXQsICZyZWYpOworCQkJaWYgKGVudHJ5KQorCQkJCW1hcHBlZF9lbnRzID0gZW50cnktPnNnX21hcHBlZF9lbnRzOworCQkJcHV0X2hhc2hfYnVja2V0KGJ1Y2tldCwgJmZsYWdzKTsKKwkJfQorCisJCWNoZWNrX3VubWFwKCZyZWYpOworCX0KK30KK0VYUE9SVF9TWU1CT0woZGVidWdfZG1hX3VubWFwX3NnKTsKKwordm9pZCBkZWJ1Z19kbWFfYWxsb2NfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCSAgICAgIGRtYV9hZGRyX3QgZG1hX2FkZHIsIHZvaWQgKnZpcnQpCit7CisJc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSAqZW50cnk7CisKKwlpZiAodW5saWtlbHkoZ2xvYmFsX2Rpc2FibGUpKQorCQlyZXR1cm47CisKKwlpZiAodW5saWtlbHkodmlydCA9PSBOVUxMKSkKKwkJcmV0dXJuOworCisJZW50cnkgPSBkbWFfZW50cnlfYWxsb2MoKTsKKwlpZiAoIWVudHJ5KQorCQlyZXR1cm47CisKKwllbnRyeS0+dHlwZSAgICAgID0gZG1hX2RlYnVnX2NvaGVyZW50OworCWVudHJ5LT5kZXYgICAgICAgPSBkZXY7CisJZW50cnktPnBhZGRyICAgICA9IHZpcnRfdG9fcGh5cyh2aXJ0KTsKKwllbnRyeS0+c2l6ZSAgICAgID0gc2l6ZTsKKwllbnRyeS0+ZGV2X2FkZHIgID0gZG1hX2FkZHI7CisJZW50cnktPmRpcmVjdGlvbiA9IERNQV9CSURJUkVDVElPTkFMOworCisJYWRkX2RtYV9lbnRyeShlbnRyeSk7Cit9CitFWFBPUlRfU1lNQk9MKGRlYnVnX2RtYV9hbGxvY19jb2hlcmVudCk7CisKK3ZvaWQgZGVidWdfZG1hX2ZyZWVfY29oZXJlbnQoc3RydWN0IGRldmljZSAqZGV2LCBzaXplX3Qgc2l6ZSwKKwkJCSB2b2lkICp2aXJ0LCBkbWFfYWRkcl90IGFkZHIpCit7CisJc3RydWN0IGRtYV9kZWJ1Z19lbnRyeSByZWYgPSB7CisJCS50eXBlICAgICAgICAgICA9IGRtYV9kZWJ1Z19jb2hlcmVudCwKKwkJLmRldiAgICAgICAgICAgID0gZGV2LAorCQkucGFkZHIgICAgICAgICAgPSB2aXJ0X3RvX3BoeXModmlydCksCisJCS5kZXZfYWRkciAgICAgICA9IGFkZHIsCisJCS5zaXplICAgICAgICAgICA9IHNpemUsCisJCS5kaXJlY3Rpb24gICAgICA9IERNQV9CSURJUkVDVElPTkFMLAorCX07CisKKwlpZiAodW5saWtlbHkoZ2xvYmFsX2Rpc2FibGUpKQorCQlyZXR1cm47CisKKwljaGVja191bm1hcCgmcmVmKTsKK30KK0VYUE9SVF9TWU1CT0woZGVidWdfZG1hX2ZyZWVfY29oZXJlbnQpOworCit2b2lkIGRlYnVnX2RtYV9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmRldiwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAorCQkJCSAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQoreworCWlmICh1bmxpa2VseShnbG9iYWxfZGlzYWJsZSkpCisJCXJldHVybjsKKworCWNoZWNrX3N5bmMoZGV2LCBkbWFfaGFuZGxlLCBzaXplLCAwLCBkaXJlY3Rpb24sIHRydWUpOworfQorRVhQT1JUX1NZTUJPTChkZWJ1Z19kbWFfc3luY19zaW5nbGVfZm9yX2NwdSk7CisKK3ZvaWQgZGVidWdfZG1hX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqZGV2LAorCQkJCSAgICAgIGRtYV9hZGRyX3QgZG1hX2hhbmRsZSwgc2l6ZV90IHNpemUsCisJCQkJICAgICAgaW50IGRpcmVjdGlvbikKK3sKKwlpZiAodW5saWtlbHkoZ2xvYmFsX2Rpc2FibGUpKQorCQlyZXR1cm47CisKKwljaGVja19zeW5jKGRldiwgZG1hX2hhbmRsZSwgc2l6ZSwgMCwgZGlyZWN0aW9uLCBmYWxzZSk7Cit9CitFWFBPUlRfU1lNQk9MKGRlYnVnX2RtYV9zeW5jX3NpbmdsZV9mb3JfZGV2aWNlKTsKKwordm9pZCBkZWJ1Z19kbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJCSB1bnNpZ25lZCBsb25nIG9mZnNldCwgc2l6ZV90IHNpemUsCisJCQkJCSBpbnQgZGlyZWN0aW9uKQoreworCWlmICh1bmxpa2VseShnbG9iYWxfZGlzYWJsZSkpCisJCXJldHVybjsKKworCWNoZWNrX3N5bmMoZGV2LCBkbWFfaGFuZGxlLCBzaXplLCBvZmZzZXQsIGRpcmVjdGlvbiwgdHJ1ZSk7Cit9CitFWFBPUlRfU1lNQk9MKGRlYnVnX2RtYV9zeW5jX3NpbmdsZV9yYW5nZV9mb3JfY3B1KTsKKwordm9pZCBkZWJ1Z19kbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsCisJCQkJCSAgICBkbWFfYWRkcl90IGRtYV9oYW5kbGUsCisJCQkJCSAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKKwkJCQkJICAgIHNpemVfdCBzaXplLCBpbnQgZGlyZWN0aW9uKQoreworCWlmICh1bmxpa2VseShnbG9iYWxfZGlzYWJsZSkpCisJCXJldHVybjsKKworCWNoZWNrX3N5bmMoZGV2LCBkbWFfaGFuZGxlLCBzaXplLCBvZmZzZXQsIGRpcmVjdGlvbiwgZmFsc2UpOworfQorRVhQT1JUX1NZTUJPTChkZWJ1Z19kbWFfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZSk7CisKK3ZvaWQgZGVidWdfZG1hX3N5bmNfc2dfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkgICAgICAgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbikKK3sKKwlzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnM7CisJaW50IGk7CisKKwlpZiAodW5saWtlbHkoZ2xvYmFsX2Rpc2FibGUpKQorCQlyZXR1cm47CisKKwlmb3JfZWFjaF9zZyhzZywgcywgbmVsZW1zLCBpKSB7CisJCWNoZWNrX3N5bmMoZGV2LCBzLT5kbWFfYWRkcmVzcywgcy0+ZG1hX2xlbmd0aCwgMCwKKwkJCQlkaXJlY3Rpb24sIHRydWUpOworCX0KK30KK0VYUE9SVF9TWU1CT0woZGVidWdfZG1hX3N5bmNfc2dfZm9yX2NwdSk7CisKK3ZvaWQgZGVidWdfZG1hX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCisJCQkJICBpbnQgbmVsZW1zLCBpbnQgZGlyZWN0aW9uKQoreworCXN0cnVjdCBzY2F0dGVybGlzdCAqczsKKwlpbnQgaTsKKworCWlmICh1bmxpa2VseShnbG9iYWxfZGlzYWJsZSkpCisJCXJldHVybjsKKworCWZvcl9lYWNoX3NnKHNnLCBzLCBuZWxlbXMsIGkpIHsKKwkJY2hlY2tfc3luYyhkZXYsIHMtPmRtYV9hZGRyZXNzLCBzLT5kbWFfbGVuZ3RoLCAwLAorCQkJCWRpcmVjdGlvbiwgZmFsc2UpOworCX0KK30KK0VYUE9SVF9TWU1CT0woZGVidWdfZG1hX3N5bmNfc2dfZm9yX2RldmljZSk7CisKZGlmZiAtLWdpdCBhL2xpYi9sbWIuYyBiL2xpYi9sbWIuYwppbmRleCA5N2U1NDcwMy4uZTRhNjQ4MiAxMDA2NDQKLS0tIGEvbGliL2xtYi5jCisrKyBiL2xpYi9sbWIuYwpAQCAtMjksMzMgKzI5LDMzIEBACiB9CiBlYXJseV9wYXJhbSgibG1iIiwgZWFybHlfbG1iKTsKIAorc3RhdGljIHZvaWQgbG1iX2R1bXAoc3RydWN0IGxtYl9yZWdpb24gKnJlZ2lvbiwgY2hhciAqbmFtZSkKK3sKKwl1bnNpZ25lZCBsb25nIGxvbmcgYmFzZSwgc2l6ZTsKKwlpbnQgaTsKKworCXByX2luZm8oIiAlcy5jbnQgID0gMHglbHhcbiIsIG5hbWUsIHJlZ2lvbi0+Y250KTsKKworCWZvciAoaSA9IDA7IGkgPCByZWdpb24tPmNudDsgaSsrKSB7CisJCWJhc2UgPSByZWdpb24tPnJlZ2lvbltpXS5iYXNlOworCQlzaXplID0gcmVnaW9uLT5yZWdpb25baV0uc2l6ZTsKKworCQlwcl9pbmZvKCIgJXNbMHgleF1cdDB4JTAxNmxseCAtIDB4JTAxNmxseCwgMHglbGx4IGJ5dGVzXG4iLAorCQkgICAgbmFtZSwgaSwgYmFzZSwgYmFzZSArIHNpemUgLSAxLCBzaXplKTsKKwl9Cit9CisKIHZvaWQgbG1iX2R1bXBfYWxsKHZvaWQpCiB7Ci0JdW5zaWduZWQgbG9uZyBpOwotCiAJaWYgKCFsbWJfZGVidWcpCiAJCXJldHVybjsKIAotCXByX2luZm8oImxtYl9kdW1wX2FsbDpcbiIpOwotCXByX2luZm8oIiAgICBtZW1vcnkuY250CQkgID0gMHglbHhcbiIsIGxtYi5tZW1vcnkuY250KTsKLQlwcl9pbmZvKCIgICAgbWVtb3J5LnNpemUJCSAgPSAweCVsbHhcbiIsCi0JICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbG1iLm1lbW9yeS5zaXplKTsKLQlmb3IgKGk9MDsgaSA8IGxtYi5tZW1vcnkuY250IDtpKyspIHsKLQkJcHJfaW5mbygiICAgIG1lbW9yeS5yZWdpb25bMHglbHhdLmJhc2UgICAgICAgPSAweCVsbHhcbiIsCi0JCSAgICBpLCAodW5zaWduZWQgbG9uZyBsb25nKWxtYi5tZW1vcnkucmVnaW9uW2ldLmJhc2UpOwotCQlwcl9pbmZvKCIJCSAgICAgIC5zaXplICAgICA9IDB4JWxseFxuIiwKLQkJICAgICh1bnNpZ25lZCBsb25nIGxvbmcpbG1iLm1lbW9yeS5yZWdpb25baV0uc2l6ZSk7Ci0JfQorCXByX2luZm8oIkxNQiBjb25maWd1cmF0aW9uOlxuIik7CisJcHJfaW5mbygiIHJtb19zaXplICAgID0gMHglbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWxtYi5ybW9fc2l6ZSk7CisJcHJfaW5mbygiIG1lbW9yeS5zaXplID0gMHglbGx4XG4iLCAodW5zaWduZWQgbG9uZyBsb25nKWxtYi5tZW1vcnkuc2l6ZSk7CiAKLQlwcl9pbmZvKCIgICAgcmVzZXJ2ZWQuY250CSAgPSAweCVseFxuIiwgbG1iLnJlc2VydmVkLmNudCk7Ci0JcHJfaW5mbygiICAgIHJlc2VydmVkLnNpemUJICA9IDB4JWxseFxuIiwKLQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsbWIubWVtb3J5LnNpemUpOwotCWZvciAoaT0wOyBpIDwgbG1iLnJlc2VydmVkLmNudCA7aSsrKSB7Ci0JCXByX2luZm8oIiAgICByZXNlcnZlZC5yZWdpb25bMHglbHhdLmJhc2UgICAgICAgPSAweCVsbHhcbiIsCi0JCSAgICBpLCAodW5zaWduZWQgbG9uZyBsb25nKWxtYi5yZXNlcnZlZC5yZWdpb25baV0uYmFzZSk7Ci0JCXByX2luZm8oIgkJICAgICAgLnNpemUgICAgID0gMHglbGx4XG4iLAotCQkgICAgKHVuc2lnbmVkIGxvbmcgbG9uZylsbWIucmVzZXJ2ZWQucmVnaW9uW2ldLnNpemUpOwotCX0KKwlsbWJfZHVtcCgmbG1iLm1lbW9yeSwgIm1lbW9yeSIpOworCWxtYl9kdW1wKCZsbWIucmVzZXJ2ZWQsICJyZXNlcnZlZCIpOwogfQogCiBzdGF0aWMgdW5zaWduZWQgbG9uZyBsbWJfYWRkcnNfb3ZlcmxhcCh1NjQgYmFzZTEsIHU2NCBzaXplMSwgdTY0IGJhc2UyLApkaWZmIC0tZ2l0IGEvbGliL3N3aW90bGIuYyBiL2xpYi9zd2lvdGxiLmMKaW5kZXggMWY5OTFhYy4uMzJlMmJkMyAxMDA2NDQKLS0tIGEvbGliL3N3aW90bGIuYworKysgYi9saWIvc3dpb3RsYi5jCkBAIC0xNDUsNyArMTQ1LDcgQEAKIAlyZXR1cm4gcGh5c190b192aXJ0KHN3aW90bGJfYnVzX3RvX3BoeXMoYWRkcmVzcykpOwogfQogCi1pbnQgX193ZWFrIHN3aW90bGJfYXJjaF9yYW5nZV9uZWVkc19tYXBwaW5nKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCitpbnQgX193ZWFrIHN3aW90bGJfYXJjaF9yYW5nZV9uZWVkc19tYXBwaW5nKHBoeXNfYWRkcl90IHBhZGRyLCBzaXplX3Qgc2l6ZSkKIHsKIAlyZXR1cm4gMDsKIH0KQEAgLTMxNSw5ICszMTUsOSBAQAogCXJldHVybiAhaXNfYnVmZmVyX2RtYV9jYXBhYmxlKGRtYV9nZXRfbWFzayhod2RldiksIGFkZHIsIHNpemUpOwogfQogCi1zdGF0aWMgaW5saW5lIGludCByYW5nZV9uZWVkc19tYXBwaW5nKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCitzdGF0aWMgaW5saW5lIGludCByYW5nZV9uZWVkc19tYXBwaW5nKHBoeXNfYWRkcl90IHBhZGRyLCBzaXplX3Qgc2l6ZSkKIHsKLQlyZXR1cm4gc3dpb3RsYl9mb3JjZSB8fCBzd2lvdGxiX2FyY2hfcmFuZ2VfbmVlZHNfbWFwcGluZyhwdHIsIHNpemUpOworCXJldHVybiBzd2lvdGxiX2ZvcmNlIHx8IHN3aW90bGJfYXJjaF9yYW5nZV9uZWVkc19tYXBwaW5nKHBhZGRyLCBzaXplKTsKIH0KIAogc3RhdGljIGludCBpc19zd2lvdGxiX2J1ZmZlcihjaGFyICphZGRyKQpAQCAtNjM2LDExICs2MzYsMTQgQEAKICAqIE9uY2UgdGhlIGRldmljZSBpcyBnaXZlbiB0aGUgZG1hIGFkZHJlc3MsIHRoZSBkZXZpY2Ugb3ducyB0aGlzIG1lbW9yeSB1bnRpbAogICogZWl0aGVyIHN3aW90bGJfdW5tYXBfc2luZ2xlIG9yIHN3aW90bGJfZG1hX3N5bmNfc2luZ2xlIGlzIHBlcmZvcm1lZC4KICAqLwotZG1hX2FkZHJfdAotc3dpb3RsYl9tYXBfc2luZ2xlX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCB2b2lkICpwdHIsIHNpemVfdCBzaXplLAotCQkJIGludCBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQorZG1hX2FkZHJfdCBzd2lvdGxiX21hcF9wYWdlKHN0cnVjdCBkZXZpY2UgKmRldiwgc3RydWN0IHBhZ2UgKnBhZ2UsCisJCQkgICAgdW5zaWduZWQgbG9uZyBvZmZzZXQsIHNpemVfdCBzaXplLAorCQkJICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwKKwkJCSAgICBzdHJ1Y3QgZG1hX2F0dHJzICphdHRycykKIHsKLQlkbWFfYWRkcl90IGRldl9hZGRyID0gc3dpb3RsYl92aXJ0X3RvX2J1cyhod2RldiwgcHRyKTsKKwlwaHlzX2FkZHJfdCBwaHlzID0gcGFnZV90b19waHlzKHBhZ2UpICsgb2Zmc2V0OworCXZvaWQgKnB0ciA9IHBhZ2VfYWRkcmVzcyhwYWdlKSArIG9mZnNldDsKKwlkbWFfYWRkcl90IGRldl9hZGRyID0gc3dpb3RsYl9waHlzX3RvX2J1cyhkZXYsIHBoeXMpOwogCXZvaWQgKm1hcDsKIAogCUJVR19PTihkaXIgPT0gRE1BX05PTkUpOwpAQCAtNjQ5LDM3ICs2NTIsMzAgQEAKIAkgKiB3ZSBjYW4gc2FmZWx5IHJldHVybiB0aGUgZGV2aWNlIGFkZHIgYW5kIG5vdCB3b3JyeSBhYm91dCBib3VuY2UKIAkgKiBidWZmZXJpbmcgaXQuCiAJICovCi0JaWYgKCFhZGRyZXNzX25lZWRzX21hcHBpbmcoaHdkZXYsIGRldl9hZGRyLCBzaXplKSAmJgotCSAgICAhcmFuZ2VfbmVlZHNfbWFwcGluZyhwdHIsIHNpemUpKQorCWlmICghYWRkcmVzc19uZWVkc19tYXBwaW5nKGRldiwgZGV2X2FkZHIsIHNpemUpICYmCisJICAgICFyYW5nZV9uZWVkc19tYXBwaW5nKHZpcnRfdG9fcGh5cyhwdHIpLCBzaXplKSkKIAkJcmV0dXJuIGRldl9hZGRyOwogCiAJLyoKIAkgKiBPaCB3ZWxsLCBoYXZlIHRvIGFsbG9jYXRlIGFuZCBtYXAgYSBib3VuY2UgYnVmZmVyLgogCSAqLwotCW1hcCA9IG1hcF9zaW5nbGUoaHdkZXYsIHZpcnRfdG9fcGh5cyhwdHIpLCBzaXplLCBkaXIpOworCW1hcCA9IG1hcF9zaW5nbGUoZGV2LCBwaHlzLCBzaXplLCBkaXIpOwogCWlmICghbWFwKSB7Ci0JCXN3aW90bGJfZnVsbChod2Rldiwgc2l6ZSwgZGlyLCAxKTsKKwkJc3dpb3RsYl9mdWxsKGRldiwgc2l6ZSwgZGlyLCAxKTsKIAkJbWFwID0gaW9fdGxiX292ZXJmbG93X2J1ZmZlcjsKIAl9CiAKLQlkZXZfYWRkciA9IHN3aW90bGJfdmlydF90b19idXMoaHdkZXYsIG1hcCk7CisJZGV2X2FkZHIgPSBzd2lvdGxiX3ZpcnRfdG9fYnVzKGRldiwgbWFwKTsKIAogCS8qCiAJICogRW5zdXJlIHRoYXQgdGhlIGFkZHJlc3MgcmV0dXJuZWQgaXMgRE1BJ2JsZQogCSAqLwotCWlmIChhZGRyZXNzX25lZWRzX21hcHBpbmcoaHdkZXYsIGRldl9hZGRyLCBzaXplKSkKKwlpZiAoYWRkcmVzc19uZWVkc19tYXBwaW5nKGRldiwgZGV2X2FkZHIsIHNpemUpKQogCQlwYW5pYygibWFwX3NpbmdsZTogYm91bmNlIGJ1ZmZlciBpcyBub3QgRE1BJ2JsZSIpOwogCiAJcmV0dXJuIGRldl9hZGRyOwogfQotRVhQT1JUX1NZTUJPTChzd2lvdGxiX21hcF9zaW5nbGVfYXR0cnMpOwotCi1kbWFfYWRkcl90Ci1zd2lvdGxiX21hcF9zaW5nbGUoc3RydWN0IGRldmljZSAqaHdkZXYsIHZvaWQgKnB0ciwgc2l6ZV90IHNpemUsIGludCBkaXIpCi17Ci0JcmV0dXJuIHN3aW90bGJfbWFwX3NpbmdsZV9hdHRycyhod2RldiwgcHRyLCBzaXplLCBkaXIsIE5VTEwpOwotfQotRVhQT1JUX1NZTUJPTChzd2lvdGxiX21hcF9zaW5nbGUpOworRVhQT1JUX1NZTUJPTF9HUEwoc3dpb3RsYl9tYXBfcGFnZSk7CiAKIC8qCiAgKiBVbm1hcCBhIHNpbmdsZSBzdHJlYW1pbmcgbW9kZSBETUEgdHJhbnNsYXRpb24uICBUaGUgZG1hX2FkZHIgYW5kIHNpemUgbXVzdApAQCAtNjg5LDkgKzY4NSw5IEBACiAgKiBBZnRlciB0aGlzIGNhbGwsIHJlYWRzIGJ5IHRoZSBjcHUgdG8gdGhlIGJ1ZmZlciBhcmUgZ3VhcmFudGVlZCB0byBzZWUKICAqIHdoYXRldmVyIHRoZSBkZXZpY2Ugd3JvdGUgdGhlcmUuCiAgKi8KLXZvaWQKLXN3aW90bGJfdW5tYXBfc2luZ2xlX2F0dHJzKHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRldl9hZGRyLAotCQkJICAgc2l6ZV90IHNpemUsIGludCBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQordm9pZCBzd2lvdGxiX3VubWFwX3BhZ2Uoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZGV2X2FkZHIsCisJCQlzaXplX3Qgc2l6ZSwgZW51bSBkbWFfZGF0YV9kaXJlY3Rpb24gZGlyLAorCQkJc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJY2hhciAqZG1hX2FkZHIgPSBzd2lvdGxiX2J1c190b192aXJ0KGRldl9hZGRyKTsKIApAQCAtNzAxLDE1ICs2OTcsNyBAQAogCWVsc2UgaWYgKGRpciA9PSBETUFfRlJPTV9ERVZJQ0UpCiAJCWRtYV9tYXJrX2NsZWFuKGRtYV9hZGRyLCBzaXplKTsKIH0KLUVYUE9SVF9TWU1CT0woc3dpb3RsYl91bm1hcF9zaW5nbGVfYXR0cnMpOwotCi12b2lkCi1zd2lvdGxiX3VubWFwX3NpbmdsZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwgc2l6ZV90IHNpemUsCi0JCSAgICAgaW50IGRpcikKLXsKLQlyZXR1cm4gc3dpb3RsYl91bm1hcF9zaW5nbGVfYXR0cnMoaHdkZXYsIGRldl9hZGRyLCBzaXplLCBkaXIsIE5VTEwpOwotfQotRVhQT1JUX1NZTUJPTChzd2lvdGxiX3VubWFwX3NpbmdsZSk7CitFWFBPUlRfU1lNQk9MX0dQTChzd2lvdGxiX3VubWFwX3BhZ2UpOwogCiAvKgogICogTWFrZSBwaHlzaWNhbCBtZW1vcnkgY29uc2lzdGVudCBmb3IgYSBzaW5nbGUgc3RyZWFtaW5nIG1vZGUgRE1BIHRyYW5zbGF0aW9uCkBAIC03MzYsNyArNzI0LDcgQEAKIAogdm9pZAogc3dpb3RsYl9zeW5jX3NpbmdsZV9mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBkbWFfYWRkcl90IGRldl9hZGRyLAotCQkJICAgIHNpemVfdCBzaXplLCBpbnQgZGlyKQorCQkJICAgIHNpemVfdCBzaXplLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7CiAJc3dpb3RsYl9zeW5jX3NpbmdsZShod2RldiwgZGV2X2FkZHIsIHNpemUsIGRpciwgU1lOQ19GT1JfQ1BVKTsKIH0KQEAgLTc0NCw3ICs3MzIsNyBAQAogCiB2b2lkCiBzd2lvdGxiX3N5bmNfc2luZ2xlX2Zvcl9kZXZpY2Uoc3RydWN0IGRldmljZSAqaHdkZXYsIGRtYV9hZGRyX3QgZGV2X2FkZHIsCi0JCQkgICAgICAgc2l6ZV90IHNpemUsIGludCBkaXIpCisJCQkgICAgICAgc2l6ZV90IHNpemUsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKIAlzd2lvdGxiX3N5bmNfc2luZ2xlKGh3ZGV2LCBkZXZfYWRkciwgc2l6ZSwgZGlyLCBTWU5DX0ZPUl9ERVZJQ0UpOwogfQpAQCAtNzY5LDcgKzc1Nyw4IEBACiAKIHZvaWQKIHN3aW90bGJfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2NwdShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKLQkJCQkgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgaW50IGRpcikKKwkJCQkgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCQkgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKIAlzd2lvdGxiX3N5bmNfc2luZ2xlX3JhbmdlKGh3ZGV2LCBkZXZfYWRkciwgb2Zmc2V0LCBzaXplLCBkaXIsCiAJCQkJICBTWU5DX0ZPUl9DUFUpOwpAQCAtNzc4LDcgKzc2Nyw4IEBACiAKIHZvaWQKIHN3aW90bGJfc3luY19zaW5nbGVfcmFuZ2VfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpod2RldiwgZG1hX2FkZHJfdCBkZXZfYWRkciwKLQkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwgaW50IGRpcikKKwkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCBzaXplX3Qgc2l6ZSwKKwkJCQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKIAlzd2lvdGxiX3N5bmNfc2luZ2xlX3JhbmdlKGh3ZGV2LCBkZXZfYWRkciwgb2Zmc2V0LCBzaXplLCBkaXIsCiAJCQkJICBTWU5DX0ZPUl9ERVZJQ0UpOwpAQCAtODAzLDcgKzc5Myw3IEBACiAgKi8KIGludAogc3dpb3RsYl9tYXBfc2dfYXR0cnMoc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLCBpbnQgbmVsZW1zLAotCQkgICAgIGludCBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQorCQkgICAgIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCiB7CiAJc3RydWN0IHNjYXR0ZXJsaXN0ICpzZzsKIAlpbnQgaTsKQEAgLTgxMSwxMCArODAxLDEwIEBACiAJQlVHX09OKGRpciA9PSBETUFfTk9ORSk7CiAKIAlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBuZWxlbXMsIGkpIHsKLQkJdm9pZCAqYWRkciA9IHNnX3ZpcnQoc2cpOwotCQlkbWFfYWRkcl90IGRldl9hZGRyID0gc3dpb3RsYl92aXJ0X3RvX2J1cyhod2RldiwgYWRkcik7CisJCXBoeXNfYWRkcl90IHBhZGRyID0gc2dfcGh5cyhzZyk7CisJCWRtYV9hZGRyX3QgZGV2X2FkZHIgPSBzd2lvdGxiX3BoeXNfdG9fYnVzKGh3ZGV2LCBwYWRkcik7CiAKLQkJaWYgKHJhbmdlX25lZWRzX21hcHBpbmcoYWRkciwgc2ctPmxlbmd0aCkgfHwKKwkJaWYgKHJhbmdlX25lZWRzX21hcHBpbmcocGFkZHIsIHNnLT5sZW5ndGgpIHx8CiAJCSAgICBhZGRyZXNzX25lZWRzX21hcHBpbmcoaHdkZXYsIGRldl9hZGRyLCBzZy0+bGVuZ3RoKSkgewogCQkJdm9pZCAqbWFwID0gbWFwX3NpbmdsZShod2Rldiwgc2dfcGh5cyhzZyksCiAJCQkJCSAgICAgICBzZy0+bGVuZ3RoLCBkaXIpOwpAQCAtODUwLDcgKzg0MCw3IEBACiAgKi8KIHZvaWQKIHN3aW90bGJfdW5tYXBfc2dfYXR0cnMoc3RydWN0IGRldmljZSAqaHdkZXYsIHN0cnVjdCBzY2F0dGVybGlzdCAqc2dsLAotCQkgICAgICAgaW50IG5lbGVtcywgaW50IGRpciwgc3RydWN0IGRtYV9hdHRycyAqYXR0cnMpCisJCSAgICAgICBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIsIHN0cnVjdCBkbWFfYXR0cnMgKmF0dHJzKQogewogCXN0cnVjdCBzY2F0dGVybGlzdCAqc2c7CiAJaW50IGk7CkBAIC04NTgsMTEgKzg0OCwxMSBAQAogCUJVR19PTihkaXIgPT0gRE1BX05PTkUpOwogCiAJZm9yX2VhY2hfc2coc2dsLCBzZywgbmVsZW1zLCBpKSB7Ci0JCWlmIChzZy0+ZG1hX2FkZHJlc3MgIT0gc3dpb3RsYl92aXJ0X3RvX2J1cyhod2Rldiwgc2dfdmlydChzZykpKQorCQlpZiAoc2ctPmRtYV9hZGRyZXNzICE9IHN3aW90bGJfcGh5c190b19idXMoaHdkZXYsIHNnX3BoeXMoc2cpKSkKIAkJCXVubWFwX3NpbmdsZShod2Rldiwgc3dpb3RsYl9idXNfdG9fdmlydChzZy0+ZG1hX2FkZHJlc3MpLAogCQkJCSAgICAgc2ctPmRtYV9sZW5ndGgsIGRpcik7CiAJCWVsc2UgaWYgKGRpciA9PSBETUFfRlJPTV9ERVZJQ0UpCi0JCQlkbWFfbWFya19jbGVhbihzZ192aXJ0KHNnKSwgc2ctPmRtYV9sZW5ndGgpOworCQkJZG1hX21hcmtfY2xlYW4oc3dpb3RsYl9idXNfdG9fdmlydChzZy0+ZG1hX2FkZHJlc3MpLCBzZy0+ZG1hX2xlbmd0aCk7CiAJfQogfQogRVhQT1JUX1NZTUJPTChzd2lvdGxiX3VubWFwX3NnX2F0dHJzKTsKQEAgLTg5MiwxNyArODgyLDE3IEBACiAJQlVHX09OKGRpciA9PSBETUFfTk9ORSk7CiAKIAlmb3JfZWFjaF9zZyhzZ2wsIHNnLCBuZWxlbXMsIGkpIHsKLQkJaWYgKHNnLT5kbWFfYWRkcmVzcyAhPSBzd2lvdGxiX3ZpcnRfdG9fYnVzKGh3ZGV2LCBzZ192aXJ0KHNnKSkpCisJCWlmIChzZy0+ZG1hX2FkZHJlc3MgIT0gc3dpb3RsYl9waHlzX3RvX2J1cyhod2Rldiwgc2dfcGh5cyhzZykpKQogCQkJc3luY19zaW5nbGUoaHdkZXYsIHN3aW90bGJfYnVzX3RvX3ZpcnQoc2ctPmRtYV9hZGRyZXNzKSwKIAkJCQkgICAgc2ctPmRtYV9sZW5ndGgsIGRpciwgdGFyZ2V0KTsKIAkJZWxzZSBpZiAoZGlyID09IERNQV9GUk9NX0RFVklDRSkKLQkJCWRtYV9tYXJrX2NsZWFuKHNnX3ZpcnQoc2cpLCBzZy0+ZG1hX2xlbmd0aCk7CisJCQlkbWFfbWFya19jbGVhbihzd2lvdGxiX2J1c190b192aXJ0KHNnLT5kbWFfYWRkcmVzcyksIHNnLT5kbWFfbGVuZ3RoKTsKIAl9CiB9CiAKIHZvaWQKIHN3aW90bGJfc3luY19zZ19mb3JfY3B1KHN0cnVjdCBkZXZpY2UgKmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAotCQkJaW50IG5lbGVtcywgaW50IGRpcikKKwkJCWludCBuZWxlbXMsIGVudW0gZG1hX2RhdGFfZGlyZWN0aW9uIGRpcikKIHsKIAlzd2lvdGxiX3N5bmNfc2coaHdkZXYsIHNnLCBuZWxlbXMsIGRpciwgU1lOQ19GT1JfQ1BVKTsKIH0KQEAgLTkxMCw3ICs5MDAsNyBAQAogCiB2b2lkCiBzd2lvdGxiX3N5bmNfc2dfZm9yX2RldmljZShzdHJ1Y3QgZGV2aWNlICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKLQkJCSAgIGludCBuZWxlbXMsIGludCBkaXIpCisJCQkgICBpbnQgbmVsZW1zLCBlbnVtIGRtYV9kYXRhX2RpcmVjdGlvbiBkaXIpCiB7CiAJc3dpb3RsYl9zeW5jX3NnKGh3ZGV2LCBzZywgbmVsZW1zLCBkaXIsIFNZTkNfRk9SX0RFVklDRSk7CiB9CmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jCmluZGV4IGJhYTk5OWUuLjIwMzJhZDIgMTAwNjQ0Ci0tLSBhL21tL21lbW9yeS5jCisrKyBiL21tL21lbW9yeS5jCkBAIC0xNjY1LDkgKzE2NjUsMTAgQEAKIAkgKiBiZWhhdmlvdXIgdGhhdCBzb21lIHByb2dyYW1zIGRlcGVuZCBvbi4gV2UgbWFyayB0aGUgIm9yaWdpbmFsIgogCSAqIHVuLUNPVydlZCBwYWdlcyBieSBtYXRjaGluZyB0aGVtIHVwIHdpdGggInZtYS0+dm1fcGdvZmYiLgogCSAqLwotCWlmIChhZGRyID09IHZtYS0+dm1fc3RhcnQgJiYgZW5kID09IHZtYS0+dm1fZW5kKQorCWlmIChhZGRyID09IHZtYS0+dm1fc3RhcnQgJiYgZW5kID09IHZtYS0+dm1fZW5kKSB7CiAJCXZtYS0+dm1fcGdvZmYgPSBwZm47Ci0JZWxzZSBpZiAoaXNfY293X21hcHBpbmcodm1hLT52bV9mbGFncykpCisJCXZtYS0+dm1fZmxhZ3MgfD0gVk1fUEZOX0FUX01NQVA7CisJfSBlbHNlIGlmIChpc19jb3dfbWFwcGluZyh2bWEtPnZtX2ZsYWdzKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKIAl2bWEtPnZtX2ZsYWdzIHw9IFZNX0lPIHwgVk1fUkVTRVJWRUQgfCBWTV9QRk5NQVA7CkBAIC0xNjc5LDYgKzE2ODAsNyBAQAogCQkgKiBuZWVkZWQgZnJvbSBoaWdoZXIgbGV2ZWwgcm91dGluZSBjYWxsaW5nIHVubWFwX3ZtYXMKIAkJICovCiAJCXZtYS0+dm1fZmxhZ3MgJj0gfihWTV9JTyB8IFZNX1JFU0VSVkVEIHwgVk1fUEZOTUFQKTsKKwkJdm1hLT52bV9mbGFncyAmPSB+Vk1fUEZOX0FUX01NQVA7CiAJCXJldHVybiAtRUlOVkFMOwogCX0KIApkaWZmIC0tZ2l0IGEvbW0vcGFnZV9hbGxvYy5jIGIvbW0vcGFnZV9hbGxvYy5jCmluZGV4IDVjNDRlZDQuLmEzODAzZWEgMTAwNjQ0Ci0tLSBhL21tL3BhZ2VfYWxsb2MuYworKysgYi9tbS9wYWdlX2FsbG9jLmMKQEAgLTE0NzksNiArMTQ3OSw4IEBACiAJdW5zaWduZWQgbG9uZyBkaWRfc29tZV9wcm9ncmVzczsKIAl1bnNpZ25lZCBsb25nIHBhZ2VzX3JlY2xhaW1lZCA9IDA7CiAKKwlsb2NrZGVwX3RyYWNlX2FsbG9jKGdmcF9tYXNrKTsKKwogCW1pZ2h0X3NsZWVwX2lmKHdhaXQpOwogCiAJaWYgKHNob3VsZF9mYWlsX2FsbG9jX3BhZ2UoZ2ZwX21hc2ssIG9yZGVyKSkKQEAgLTE1NzgsMTIgKzE1ODAsMTUgQEAKIAkgKi8KIAljcHVzZXRfdXBkYXRlX3Rhc2tfbWVtb3J5X3N0YXRlKCk7CiAJcC0+ZmxhZ3MgfD0gUEZfTUVNQUxMT0M7CisKKwlsb2NrZGVwX3NldF9jdXJyZW50X3JlY2xhaW1fc3RhdGUoZ2ZwX21hc2spOwogCXJlY2xhaW1fc3RhdGUucmVjbGFpbWVkX3NsYWIgPSAwOwogCXAtPnJlY2xhaW1fc3RhdGUgPSAmcmVjbGFpbV9zdGF0ZTsKIAogCWRpZF9zb21lX3Byb2dyZXNzID0gdHJ5X3RvX2ZyZWVfcGFnZXMoem9uZWxpc3QsIG9yZGVyLCBnZnBfbWFzayk7CiAKIAlwLT5yZWNsYWltX3N0YXRlID0gTlVMTDsKKwlsb2NrZGVwX2NsZWFyX2N1cnJlbnRfcmVjbGFpbV9zdGF0ZSgpOwogCXAtPmZsYWdzICY9IH5QRl9NRU1BTExPQzsKIAogCWNvbmRfcmVzY2hlZCgpOwpkaWZmIC0tZ2l0IGEvbW0vc2xhYi5jIGIvbW0vc2xhYi5jCmluZGV4IDRkMDA4NTUuLjgyNWM2MDYgMTAwNjQ0Ci0tLSBhL21tL3NsYWIuYworKysgYi9tbS9zbGFiLmMKQEAgLTMzMTgsNiArMzMxOCw4IEBACiAJdW5zaWduZWQgbG9uZyBzYXZlX2ZsYWdzOwogCXZvaWQgKnB0cjsKIAorCWxvY2tkZXBfdHJhY2VfYWxsb2MoZmxhZ3MpOworCiAJaWYgKHNsYWJfc2hvdWxkX2ZhaWxzbGFiKGNhY2hlcCwgZmxhZ3MpKQogCQlyZXR1cm4gTlVMTDsKIApAQCAtMzM5NCw2ICszMzk2LDggQEAKIAl1bnNpZ25lZCBsb25nIHNhdmVfZmxhZ3M7CiAJdm9pZCAqb2JqcDsKIAorCWxvY2tkZXBfdHJhY2VfYWxsb2MoZmxhZ3MpOworCiAJaWYgKHNsYWJfc2hvdWxkX2ZhaWxzbGFiKGNhY2hlcCwgZmxhZ3MpKQogCQlyZXR1cm4gTlVMTDsKIApkaWZmIC0tZ2l0IGEvbW0vc2xvYi5jIGIvbW0vc2xvYi5jCmluZGV4IDBiZmE2ODAuLjdhMzQxMTUgMTAwNjQ0Ci0tLSBhL21tL3Nsb2IuYworKysgYi9tbS9zbG9iLmMKQEAgLTQ3NSw2ICs0NzUsOCBAQAogCXVuc2lnbmVkIGludCAqbTsKIAlpbnQgYWxpZ24gPSBtYXgoQVJDSF9LTUFMTE9DX01JTkFMSUdOLCBBUkNIX1NMQUJfTUlOQUxJR04pOwogCisJbG9ja2RlcF90cmFjZV9hbGxvYyhnZnApOworCiAJaWYgKHNpemUgPCBQQUdFX1NJWkUgLSBhbGlnbikgewogCQlpZiAoIXNpemUpCiAJCQlyZXR1cm4gWkVST19TSVpFX1BUUjsKZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuYwppbmRleCBjNjVhNGVkLi5jNGVhOTE1IDEwMDY0NAotLS0gYS9tbS9zbHViLmMKKysrIGIvbW0vc2x1Yi5jCkBAIC0xNTkwLDYgKzE1OTAsNyBAQAogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdW5zaWduZWQgaW50IG9ianNpemU7CiAKKwlsb2NrZGVwX3RyYWNlX2FsbG9jKGdmcGZsYWdzKTsKIAltaWdodF9zbGVlcF9pZihnZnBmbGFncyAmIF9fR0ZQX1dBSVQpOwogCiAJaWYgKHNob3VsZF9mYWlsc2xhYihzLT5vYmpzaXplLCBnZnBmbGFncykpCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDU2ZGRmNDEuLjQ3OWU0NjcgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCisrKyBiL21tL3Ztc2Nhbi5jCkBAIC0xOTY1LDYgKzE5NjUsOCBAQAogCX07CiAJbm9kZV90b19jcHVtYXNrX3B0cihjcHVtYXNrLCBwZ2RhdC0+bm9kZV9pZCk7CiAKKwlsb2NrZGVwX3NldF9jdXJyZW50X3JlY2xhaW1fc3RhdGUoR0ZQX0tFUk5FTCk7CisKIAlpZiAoIWNwdW1hc2tfZW1wdHkoY3B1bWFzaykpCiAJCXNldF9jcHVzX2FsbG93ZWRfcHRyKHRzaywgY3B1bWFzayk7CiAJY3VycmVudC0+cmVjbGFpbV9zdGF0ZSA9ICZyZWNsYWltX3N0YXRlOwpkaWZmIC0tZ2l0IGEvbmV0L2FwcGxldGFsay9hdGFsa19wcm9jLmMgYi9uZXQvYXBwbGV0YWxrL2F0YWxrX3Byb2MuYwppbmRleCAxNjIxOTlhLi5mZDhlMDg0IDEwMDY0NAotLS0gYS9uZXQvYXBwbGV0YWxrL2F0YWxrX3Byb2MuYworKysgYi9uZXQvYXBwbGV0YWxrL2F0YWxrX3Byb2MuYwpAQCAtMjgxLDcgKzI4MSw2IEBACiAJYXRhbGtfcHJvY19kaXIgPSBwcm9jX21rZGlyKCJhdGFsayIsIGluaXRfbmV0LnByb2NfbmV0KTsKIAlpZiAoIWF0YWxrX3Byb2NfZGlyKQogCQlnb3RvIG91dDsKLQlhdGFsa19wcm9jX2Rpci0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCXAgPSBwcm9jX2NyZWF0ZSgiaW50ZXJmYWNlIiwgU19JUlVHTywgYXRhbGtfcHJvY19kaXIsCiAJCQkmYXRhbGtfc2VxX2ludGVyZmFjZV9mb3BzKTsKZGlmZiAtLWdpdCBhL25ldC9hdG0vbXBvYV9wcm9jLmMgYi9uZXQvYXRtL21wb2FfcHJvYy5jCmluZGV4IDQ5OTA1NDEuLjFhMGY1Y2MgMTAwNjQ0Ci0tLSBhL25ldC9hdG0vbXBvYV9wcm9jLmMKKysrIGIvbmV0L2F0bS9tcG9hX3Byb2MuYwpAQCAtMjgxLDcgKzI4MSw2IEBACiAJCXByaW50ayhLRVJOX0VSUiAiVW5hYmxlIHRvIGluaXRpYWxpemUgL3Byb2MvYXRtLyVzXG4iLCBTVEFUX0ZJTEVfTkFNRSk7CiAJCXJldHVybiAtRU5PTUVNOwogCX0KLQlwLT5vd25lciA9IFRISVNfTU9EVUxFOwogCXJldHVybiAwOwogfQogCmRpZmYgLS1naXQgYS9uZXQvYXRtL3Byb2MuYyBiL25ldC9hdG0vcHJvYy5jCmluZGV4IDQ5NDg3YjMuLmU3YjNiMjczIDEwMDY0NAotLS0gYS9uZXQvYXRtL3Byb2MuYworKysgYi9uZXQvYXRtL3Byb2MuYwpAQCAtNDc2LDcgKzQ3Niw2IEBACiAJCQkJICAgICBhdG1fcHJvY19yb290LCBlLT5wcm9jX2ZvcHMpOwogCQlpZiAoIWRpcmVudCkKIAkJCWdvdG8gZXJyX291dF9yZW1vdmU7Ci0JCWRpcmVudC0+b3duZXIgPSBUSElTX01PRFVMRTsKIAkJZS0+ZGlyZW50ID0gZGlyZW50OwogCX0KIAlyZXQgPSAwOwpkaWZmIC0tZ2l0IGEvbmV0L2Nhbi9iY20uYyBiL25ldC9jYW4vYmNtLmMKaW5kZXggYjdjN2Q0Ni4uOTVkN2YzMiAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9iY20uYworKysgYi9uZXQvY2FuL2JjbS5jCkBAIC0xNjA0LDEwICsxNjA0LDYgQEAKIAogCS8qIGNyZWF0ZSAvcHJvYy9uZXQvY2FuLWJjbSBkaXJlY3RvcnkgKi8KIAlwcm9jX2RpciA9IHByb2NfbWtkaXIoImNhbi1iY20iLCBpbml0X25ldC5wcm9jX25ldCk7Ci0KLQlpZiAocHJvY19kaXIpCi0JCXByb2NfZGlyLT5vd25lciA9IFRISVNfTU9EVUxFOwotCiAJcmV0dXJuIDA7CiB9CiAKZGlmZiAtLWdpdCBhL25ldC9jYW4vcHJvYy5jIGIvbmV0L2Nhbi9wcm9jLmMKaW5kZXggNTIwZmVmNS4uMTQ2MzY1MyAxMDA2NDQKLS0tIGEvbmV0L2Nhbi9wcm9jLmMKKysrIGIvbmV0L2Nhbi9wcm9jLmMKQEAgLTQ3Myw4ICs0NzMsNiBAQAogCQlyZXR1cm47CiAJfQogCi0JY2FuX2Rpci0+b3duZXIgPSBUSElTX01PRFVMRTsKLQogCS8qIG93biBwcm9jZnMgZW50cmllcyBmcm9tIHRoZSBBRl9DQU4gY29yZSAqLwogCXBkZV92ZXJzaW9uICAgICA9IGNhbl9jcmVhdGVfcHJvY19yZWFkZW50cnkoQ0FOX1BST0NfVkVSU0lPTiwgMDY0NCwKIAkJCQkJY2FuX3Byb2NfcmVhZF92ZXJzaW9uLCBOVUxMKTsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL3BrdGdlbi5jIGIvbmV0L2NvcmUvcGt0Z2VuLmMKaW5kZXggMzJkNDE5Zi4uMzc3OWMxNCAxMDA2NDQKLS0tIGEvbmV0L2NvcmUvcGt0Z2VuLmMKKysrIGIvbmV0L2NvcmUvcGt0Z2VuLmMKQEAgLTM4MDYsNyArMzgwNiw2IEBACiAJcGdfcHJvY19kaXIgPSBwcm9jX21rZGlyKFBHX1BST0NfRElSLCBpbml0X25ldC5wcm9jX25ldCk7CiAJaWYgKCFwZ19wcm9jX2RpcikKIAkJcmV0dXJuIC1FTk9ERVY7Ci0JcGdfcHJvY19kaXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAlwZSA9IHByb2NfY3JlYXRlKFBHQ1RSTCwgMDYwMCwgcGdfcHJvY19kaXIsICZwa3RnZW5fZm9wcyk7CiAJaWYgKHBlID09IE5VTEwpIHsKZGlmZiAtLWdpdCBhL25ldC9pcmRhL2lycHJvYy5jIGIvbmV0L2lyZGEvaXJwcm9jLmMKaW5kZXggODhlODBhMy4uOGZmMTg2MSAxMDA2NDQKLS0tIGEvbmV0L2lyZGEvaXJwcm9jLmMKKysrIGIvbmV0L2lyZGEvaXJwcm9jLmMKQEAgLTcwLDcgKzcwLDYgQEAKIAlwcm9jX2lyZGEgPSBwcm9jX21rZGlyKCJpcmRhIiwgaW5pdF9uZXQucHJvY19uZXQpOwogCWlmIChwcm9jX2lyZGEgPT0gTlVMTCkKIAkJcmV0dXJuOwotCXByb2NfaXJkYS0+b3duZXIgPSBUSElTX01PRFVMRTsKIAogCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKGlyZGFfZGlycyk7IGkrKykKIAkJZCA9IHByb2NfY3JlYXRlKGlyZGFfZGlyc1tpXS5uYW1lLCAwLCBwcm9jX2lyZGEsCmRpZmYgLS1naXQgYS9uZXQvbGxjL2xsY19wcm9jLmMgYi9uZXQvbGxjL2xsY19wcm9jLmMKaW5kZXggYjU4YmQ3Yy4uZDIwOGIzMyAxMDA2NDQKLS0tIGEvbmV0L2xsYy9sbGNfcHJvYy5jCisrKyBiL25ldC9sbGMvbGxjX3Byb2MuYwpAQCAtMjM2LDcgKzIzNiw2IEBACiAJbGxjX3Byb2NfZGlyID0gcHJvY19ta2RpcigibGxjIiwgaW5pdF9uZXQucHJvY19uZXQpOwogCWlmICghbGxjX3Byb2NfZGlyKQogCQlnb3RvIG91dDsKLQlsbGNfcHJvY19kaXItPm93bmVyID0gVEhJU19NT0RVTEU7CiAKIAlwID0gcHJvY19jcmVhdGUoInNvY2tldCIsIFNfSVJVR08sIGxsY19wcm9jX2RpciwgJmxsY19zZXFfc29ja2V0X2ZvcHMpOwogCWlmICghcCkKZGlmZiAtLWdpdCBhL25ldC9zY3RwL3Byb3RvY29sLmMgYi9uZXQvc2N0cC9wcm90b2NvbC5jCmluZGV4IGNiMTk4YWYuLjhlYjNlNjEgMTAwNjQ0Ci0tLSBhL25ldC9zY3RwL3Byb3RvY29sLmMKKysrIGIvbmV0L3NjdHAvcHJvdG9jb2wuYwpAQCAtMTA2LDEyICsxMDYsOCBAQAogCQlnb3RvIG91dF9ub21lbTsKICNpZmRlZiBDT05GSUdfUFJPQ19GUwogCWlmICghcHJvY19uZXRfc2N0cCkgewotCQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKLQkJZW50ID0gcHJvY19ta2Rpcigic2N0cCIsIGluaXRfbmV0LnByb2NfbmV0KTsKLQkJaWYgKGVudCkgewotCQkJZW50LT5vd25lciA9IFRISVNfTU9EVUxFOwotCQkJcHJvY19uZXRfc2N0cCA9IGVudDsKLQkJfSBlbHNlCisJCXByb2NfbmV0X3NjdHAgPSBwcm9jX21rZGlyKCJzY3RwIiwgaW5pdF9uZXQucHJvY19uZXQpOworCQlpZiAoIXByb2NfbmV0X3NjdHApCiAJCQlnb3RvIG91dF9mcmVlX3BlcmNwdTsKIAl9CiAKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvY2FjaGUuYyBiL25ldC9zdW5ycGMvY2FjaGUuYwppbmRleCA0NzM1Y2FhLi4yMDAyOWE3IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL2NhY2hlLmMKKysrIGIvbmV0L3N1bnJwYy9jYWNoZS5jCkBAIC0zMTMsNyArMzEzLDYgQEAKIAljZC0+cHJvY19lbnQgPSBwcm9jX21rZGlyKGNkLT5uYW1lLCBwcm9jX25ldF9ycGMpOwogCWlmIChjZC0+cHJvY19lbnQgPT0gTlVMTCkKIAkJZ290byBvdXRfbm9tZW07Ci0JY2QtPnByb2NfZW50LT5vd25lciA9IGNkLT5vd25lcjsKIAljZC0+Y2hhbm5lbF9lbnQgPSBjZC0+Y29udGVudF9lbnQgPSBOVUxMOwogCiAJcCA9IHByb2NfY3JlYXRlX2RhdGEoImZsdXNoIiwgU19JRlJFR3xTX0lSVVNSfFNfSVdVU1IsCkBAIC0zMjEsNyArMzIwLDYgQEAKIAljZC0+Zmx1c2hfZW50ID0gcDsKIAlpZiAocCA9PSBOVUxMKQogCQlnb3RvIG91dF9ub21lbTsKLQlwLT5vd25lciA9IGNkLT5vd25lcjsKIAogCWlmIChjZC0+Y2FjaGVfcmVxdWVzdCB8fCBjZC0+Y2FjaGVfcGFyc2UpIHsKIAkJcCA9IHByb2NfY3JlYXRlX2RhdGEoImNoYW5uZWwiLCBTX0lGUkVHfFNfSVJVU1J8U19JV1VTUiwKQEAgLTMyOSw3ICszMjcsNiBAQAogCQljZC0+Y2hhbm5lbF9lbnQgPSBwOwogCQlpZiAocCA9PSBOVUxMKQogCQkJZ290byBvdXRfbm9tZW07Ci0JCXAtPm93bmVyID0gY2QtPm93bmVyOwogCX0KIAlpZiAoY2QtPmNhY2hlX3Nob3cpIHsKIAkJcCA9IHByb2NfY3JlYXRlX2RhdGEoImNvbnRlbnQiLCBTX0lGUkVHfFNfSVJVU1J8U19JV1VTUiwKQEAgLTMzNyw3ICszMzQsNiBAQAogCQljZC0+Y29udGVudF9lbnQgPSBwOwogCQlpZiAocCA9PSBOVUxMKQogCQkJZ290byBvdXRfbm9tZW07Ci0JCXAtPm93bmVyID0gY2QtPm93bmVyOwogCX0KIAlyZXR1cm4gMDsKIG91dF9ub21lbToKZGlmZiAtLWdpdCBhL25ldC9zdW5ycGMvc3RhdHMuYyBiL25ldC9zdW5ycGMvc3RhdHMuYwppbmRleCAwODUzNzJlLi4xZWY2ZTQ2IDEwMDY0NAotLS0gYS9uZXQvc3VucnBjL3N0YXRzLmMKKysrIGIvbmV0L3N1bnJwYy9zdGF0cy5jCkBAIC0yNjIsMTQgKzI2Miw4IEBACiBycGNfcHJvY19pbml0KHZvaWQpCiB7CiAJZHByaW50aygiUlBDOiAgICAgICByZWdpc3RlcmluZyAvcHJvYy9uZXQvcnBjXG4iKTsKLQlpZiAoIXByb2NfbmV0X3JwYykgewotCQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKmVudDsKLQkJZW50ID0gcHJvY19ta2RpcigicnBjIiwgaW5pdF9uZXQucHJvY19uZXQpOwotCQlpZiAoZW50KSB7Ci0JCQllbnQtPm93bmVyID0gVEhJU19NT0RVTEU7Ci0JCQlwcm9jX25ldF9ycGMgPSBlbnQ7Ci0JCX0KLQl9CisJaWYgKCFwcm9jX25ldF9ycGMpCisJCXByb2NfbmV0X3JwYyA9IHByb2NfbWtkaXIoInJwYyIsIGluaXRfbmV0LnByb2NfbmV0KTsKIH0KIAogdm9pZApkaWZmIC0tZ2l0IGEvc291bmQvY29yZS9pbmZvLmMgYi9zb3VuZC9jb3JlL2luZm8uYwppbmRleCA3MGZhODcxLi4zNWRmNjE0IDEwMDY0NAotLS0gYS9zb3VuZC9jb3JlL2luZm8uYworKysgYi9zb3VuZC9jb3JlL2luZm8uYwpAQCAtMTU0LDExICsxNTQsNiBAQAogc3RydWN0IHNuZF9pbmZvX2VudHJ5ICpzbmRfb3NzX3Jvb3Q7CiAjZW5kaWYKIAotc3RhdGljIGlubGluZSB2b2lkIHNuZF9pbmZvX2VudHJ5X3ByZXBhcmUoc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkZSkKLXsKLQlkZS0+b3duZXIgPSBUSElTX01PRFVMRTsKLX0KLQogc3RhdGljIHZvaWQgc25kX3JlbW92ZV9wcm9jX2VudHJ5KHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcGFyZW50LAogCQkJCSAgc3RydWN0IHByb2NfZGlyX2VudHJ5ICpkZSkKIHsKQEAgLTUyMiwzMiArNTE3LDExIEBACiAJLnJlbGVhc2UgPQkJc25kX2luZm9fZW50cnlfcmVsZWFzZSwKIH07CiAKLS8qKgotICogc25kX2NyZWF0ZV9wcm9jX2VudHJ5IC0gY3JlYXRlIGEgcHJvY2ZzIGVudHJ5Ci0gKiBAbmFtZTogdGhlIG5hbWUgb2YgdGhlIHByb2MgZmlsZQotICogQG1vZGU6IHRoZSBmaWxlIHBlcm1pc3Npb24gYml0cywgU19JeHh4Ci0gKiBAcGFyZW50OiB0aGUgcGFyZW50IHByb2MtZGlyZWN0b3J5IGVudHJ5Ci0gKgotICogQ3JlYXRlcyBhIG5ldyBwcm9jIGZpbGUgZW50cnkgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBhbmQgcGVybWlzc2lvbgotICogb24gdGhlIGdpdmVuIGRpcmVjdG9yeS4KLSAqCi0gKiBSZXR1cm5zIHRoZSBwb2ludGVyIG9mIG5ldyBpbnN0YW5jZSBvciBOVUxMIG9uIGZhaWx1cmUuCi0gKi8KLXN0YXRpYyBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnNuZF9jcmVhdGVfcHJvY19lbnRyeShjb25zdCBjaGFyICpuYW1lLCBtb2RlX3QgbW9kZSwKLQkJCQkJCSAgICBzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnBhcmVudCkKLXsKLQlzdHJ1Y3QgcHJvY19kaXJfZW50cnkgKnA7Ci0JcCA9IGNyZWF0ZV9wcm9jX2VudHJ5KG5hbWUsIG1vZGUsIHBhcmVudCk7Ci0JaWYgKHApCi0JCXNuZF9pbmZvX2VudHJ5X3ByZXBhcmUocCk7Ci0JcmV0dXJuIHA7Ci19Ci0KIGludCBfX2luaXQgc25kX2luZm9faW5pdCh2b2lkKQogewogCXN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcDsKIAotCXAgPSBzbmRfY3JlYXRlX3Byb2NfZW50cnkoImFzb3VuZCIsIFNfSUZESVIgfCBTX0lSVUdPIHwgU19JWFVHTywgTlVMTCk7CisJcCA9IGNyZWF0ZV9wcm9jX2VudHJ5KCJhc291bmQiLCBTX0lGRElSIHwgU19JUlVHTyB8IFNfSVhVR08sIE5VTEwpOwogCWlmIChwID09IE5VTEwpCiAJCXJldHVybiAtRU5PTUVNOwogCXNuZF9wcm9jX3Jvb3QgPSBwOwpAQCAtOTc0LDEyICs5NDgsMTEgQEAKIAkJcmV0dXJuIC1FTlhJTzsKIAlyb290ID0gZW50cnktPnBhcmVudCA9PSBOVUxMID8gc25kX3Byb2Nfcm9vdCA6IGVudHJ5LT5wYXJlbnQtPnA7CiAJbXV0ZXhfbG9jaygmaW5mb19tdXRleCk7Ci0JcCA9IHNuZF9jcmVhdGVfcHJvY19lbnRyeShlbnRyeS0+bmFtZSwgZW50cnktPm1vZGUsIHJvb3QpOworCXAgPSBjcmVhdGVfcHJvY19lbnRyeShlbnRyeS0+bmFtZSwgZW50cnktPm1vZGUsIHJvb3QpOwogCWlmICghcCkgewogCQltdXRleF91bmxvY2soJmluZm9fbXV0ZXgpOwogCQlyZXR1cm4gLUVOT01FTTsKIAl9Ci0JcC0+b3duZXIgPSBlbnRyeS0+bW9kdWxlOwogCWlmICghU19JU0RJUihlbnRyeS0+bW9kZSkpCiAJCXAtPnByb2NfZm9wcyA9ICZzbmRfaW5mb19lbnRyeV9vcGVyYXRpb25zOwogCXAtPnNpemUgPSBlbnRyeS0+c2l6ZTsKZGlmZiAtLWdpdCBhL3NvdW5kL2kyYy9vdGhlci90ZWE1NzV4LXR1bmVyLmMgYi9zb3VuZC9pMmMvb3RoZXIvdGVhNTc1eC10dW5lci5jCmluZGV4IDlkOThhNjYuLmQzMWMzNzMgMTAwNjQ0Ci0tLSBhL3NvdW5kL2kyYy9vdGhlci90ZWE1NzV4LXR1bmVyLmMKKysrIGIvc291bmQvaTJjL290aGVyL3RlYTU3NXgtdHVuZXIuYwpAQCAtMjQsNiArMjQsNyBAQAogI2luY2x1ZGUgPGxpbnV4L2RlbGF5Lmg+CiAjaW5jbHVkZSA8bGludXgvaW50ZXJydXB0Lmg+CiAjaW5jbHVkZSA8bGludXgvaW5pdC5oPgorI2luY2x1ZGUgPGxpbnV4L3ZlcnNpb24uaD4KICNpbmNsdWRlIDxzb3VuZC9jb3JlLmg+CiAjaW5jbHVkZSA8c291bmQvdGVhNTc1eC10dW5lci5oPgogCkBAIC0zMSw2ICszMiwxMyBAQAogTU9EVUxFX0RFU0NSSVBUSU9OKCJSb3V0aW5lcyBmb3IgY29udHJvbCBvZiBURUE1NzU3LzU3NTkgUGhpbGlwcyBBTS9GTSByYWRpbyB0dW5lciBjaGlwcyIpOwogTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwogCitzdGF0aWMgaW50IHJhZGlvX25yID0gLTE7Cittb2R1bGVfcGFyYW0ocmFkaW9fbnIsIGludCwgMCk7CisKKyNkZWZpbmUgUkFESU9fVkVSU0lPTiBLRVJORUxfVkVSU0lPTigwLCAwLCAyKQorI2RlZmluZSBGUkVRX0xPCQkgKDg3ICogMTYwMDApCisjZGVmaW5lIEZSRVFfSEkJCSgxMDggKiAxNjAwMCkKKwogLyoKICAqIGRlZmluaXRpb25zCiAgKi8KQEAgLTUzLDYgKzYxLDE3IEBACiAjZGVmaW5lIFRFQTU3NVhfQklUX0RVTU1ZCSgxPDwxNSkJCS8qIGJ1ZmZlciAqLwogI2RlZmluZSBURUE1NzVYX0JJVF9GUkVRX01BU0sJMHg3ZmZmCiAKK3N0YXRpYyBzdHJ1Y3QgdjRsMl9xdWVyeWN0cmwgcmFkaW9fcWN0cmxbXSA9IHsKKwl7CisJCS5pZCAgICAgICAgICAgID0gVjRMMl9DSURfQVVESU9fTVVURSwKKwkJLm5hbWUgICAgICAgICAgPSAiTXV0ZSIsCisJCS5taW5pbXVtICAgICAgID0gMCwKKwkJLm1heGltdW0gICAgICAgPSAxLAorCQkuZGVmYXVsdF92YWx1ZSA9IDEsCisJCS50eXBlICAgICAgICAgID0gVjRMMl9DVFJMX1RZUEVfQk9PTEVBTiwKKwl9Cit9OworCiAvKgogICogbG93bGV2ZWwgcGFydAogICovCkBAIC04NCw5NCArMTAzLDE0NiBAQAogICogTGludXggVmlkZW8gaW50ZXJmYWNlCiAgKi8KIAotc3RhdGljIGxvbmcgc25kX3RlYTU3NXhfaW9jdGwoc3RydWN0IGZpbGUgKmZpbGUsCi0JCQkgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcgZGF0YSkKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y2FwKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfY2FwYWJpbGl0eSAqdikKIHsKIAlzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7Ci0Jdm9pZCBfX3VzZXIgKmFyZyA9ICh2b2lkIF9fdXNlciAqKWRhdGE7CiAKLQlzd2l0Y2goY21kKSB7Ci0JCWNhc2UgVklESU9DR0NBUDoKLQkJewotCQkJc3RydWN0IHZpZGVvX2NhcGFiaWxpdHkgdjsKLQkJCXYudHlwZSA9IFZJRF9UWVBFX1RVTkVSOwotCQkJdi5jaGFubmVscyA9IDE7Ci0JCQl2LmF1ZGlvcyA9IDE7Ci0JCQkvKiBObyB3ZSBkb24ndCBkbyBwaWN0dXJlcyAqLwotCQkJdi5tYXh3aWR0aCA9IDA7Ci0JCQl2Lm1heGhlaWdodCA9IDA7Ci0JCQl2Lm1pbndpZHRoID0gMDsKLQkJCXYubWluaGVpZ2h0ID0gMDsKLQkJCXN0cmNweSh2Lm5hbWUsIHRlYS0+dGVhNTc1OSA/ICJURUE1NzU5IiA6ICJURUE1NzU3Iik7Ci0JCQlpZiAoY29weV90b191c2VyKGFyZywmdixzaXplb2YodikpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBWSURJT0NHVFVORVI6Ci0JCXsKLQkJCXN0cnVjdCB2aWRlb190dW5lciB2OwotCQkJaWYgKGNvcHlfZnJvbV91c2VyKCZ2LCBhcmcsc2l6ZW9mKHYpKSE9MCkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCWlmICh2LnR1bmVyKQkvKiBPbmx5IDEgdHVuZXIgKi8KLQkJCQlyZXR1cm4gLUVJTlZBTDsKLQkJCXYucmFuZ2Vsb3cgPSAoODcqMTYwMDApOwotCQkJdi5yYW5nZWhpZ2ggPSAoMTA4KjE2MDAwKTsKLQkJCXYuZmxhZ3MgPSBWSURFT19UVU5FUl9MT1c7Ci0JCQl2Lm1vZGUgPSBWSURFT19NT0RFX0FVVE87Ci0JCQlzdHJjcHkodi5uYW1lLCAiRk0iKTsKLQkJCXYuc2lnbmFsID0gMHhGRkZGOwotCQkJaWYgKGNvcHlfdG9fdXNlcihhcmcsICZ2LCBzaXplb2YodikpKQotCQkJCXJldHVybiAtRUZBVUxUOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBWSURJT0NTVFVORVI6Ci0JCXsKLQkJCXN0cnVjdCB2aWRlb190dW5lciB2OwotCQkJaWYoY29weV9mcm9tX3VzZXIoJnYsIGFyZywgc2l6ZW9mKHYpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCWlmKHYudHVuZXIhPTApCi0JCQkJcmV0dXJuIC1FSU5WQUw7Ci0JCQkvKiBPbmx5IDEgdHVuZXIgc28gbm8gc2V0dGluZyBuZWVkZWQgISAqLwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJY2FzZSBWSURJT0NHRlJFUToKLQkJCWlmKGNvcHlfdG9fdXNlcihhcmcsICZ0ZWEtPmZyZXEsIHNpemVvZih0ZWEtPmZyZXEpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiAwOwotCQljYXNlIFZJRElPQ1NGUkVROgotCQkJaWYoY29weV9mcm9tX3VzZXIoJnRlYS0+ZnJlcSwgYXJnLCBzaXplb2YodGVhLT5mcmVxKSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlzbmRfdGVhNTc1eF9zZXRfZnJlcSh0ZWEpOwotCQkJcmV0dXJuIDA7Ci0JCWNhc2UgVklESU9DR0FVRElPOgotCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gdjsKLQkJCW1lbXNldCgmdiwgMCwgc2l6ZW9mKHYpKTsKLQkJCXN0cmNweSh2Lm5hbWUsICJSYWRpbyIpOwotCQkJaWYoY29weV90b191c2VyKGFyZywmdiwgc2l6ZW9mKHYpKSkKLQkJCQlyZXR1cm4gLUVGQVVMVDsKLQkJCXJldHVybiAwOwotCQl9Ci0JCWNhc2UgVklESU9DU0FVRElPOgotCQl7Ci0JCQlzdHJ1Y3QgdmlkZW9fYXVkaW8gdjsKLQkJCWlmKGNvcHlfZnJvbV91c2VyKCZ2LCBhcmcsIHNpemVvZih2KSkpCi0JCQkJcmV0dXJuIC1FRkFVTFQ7Ci0JCQlpZiAodGVhLT5vcHMtPm11dGUpCi0JCQkJdGVhLT5vcHMtPm11dGUodGVhLAotCQkJCQkgICAgICAgKHYuZmxhZ3MgJgotCQkJCQkJVklERU9fQVVESU9fTVVURSkgPyAxIDogMCk7Ci0JCQlpZih2LmF1ZGlvKQotCQkJCXJldHVybiAtRUlOVkFMOwotCQkJcmV0dXJuIDA7Ci0JCX0KLQkJZGVmYXVsdDoKLQkJCXJldHVybiAtRU5PSU9DVExDTUQ7Ci0JfQorCXN0cmNweSh2LT5jYXJkLCB0ZWEtPnRlYTU3NTkgPyAiVEVBNTc1OSIgOiAiVEVBNTc1NyIpOworCXN0cmxjcHkodi0+ZHJpdmVyLCAidGVhNTc1eC10dW5lciIsIHNpemVvZih2LT5kcml2ZXIpKTsKKwlzdHJsY3B5KHYtPmNhcmQsICJNYWVzdHJvIFJhZGlvIiwgc2l6ZW9mKHYtPmNhcmQpKTsKKwlzcHJpbnRmKHYtPmJ1c19pbmZvLCAiUENJIik7CisJdi0+dmVyc2lvbiA9IFJBRElPX1ZFUlNJT047CisJdi0+Y2FwYWJpbGl0aWVzID0gVjRMMl9DQVBfVFVORVI7CisJcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyB2b2lkIHNuZF90ZWE1NzV4X3JlbGVhc2Uoc3RydWN0IHZpZGVvX2RldmljZSAqdmZkKQorc3RhdGljIGludCB2aWRpb2NfZ190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCiB7CisJaWYgKHYtPmluZGV4ID4gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisKKwlzdHJjcHkodi0+bmFtZSwgIkZNIik7CisJdi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisJdi0+cmFuZ2Vsb3cgPSBGUkVRX0xPOworCXYtPnJhbmdlaGlnaCA9IEZSRVFfSEk7CisJdi0+cnhzdWJjaGFucyA9IFY0TDJfVFVORVJfU1VCX01PTk98VjRMMl9UVU5FUl9TVUJfU1RFUkVPOworCXYtPmNhcGFiaWxpdHkgPSBWNEwyX1RVTkVSX0NBUF9MT1c7CisJdi0+YXVkbW9kZSA9IFY0TDJfVFVORVJfTU9ERV9NT05POworCXYtPnNpZ25hbCA9IDB4ZmZmZjsKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB2aWRpb2Nfc190dW5lcihzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfdHVuZXIgKnYpCit7CisJaWYgKHYtPmluZGV4ID4gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfZnJlcXVlbmN5KHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9mcmVxdWVuY3kgKmYpCit7CisJc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEgPSB2aWRlb19kcnZkYXRhKGZpbGUpOworCisJZi0+dHlwZSA9IFY0TDJfVFVORVJfUkFESU87CisJZi0+ZnJlcXVlbmN5ID0gdGVhLT5mcmVxOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2ZyZXF1ZW5jeShzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfZnJlcXVlbmN5ICpmKQoreworCXN0cnVjdCBzbmRfdGVhNTc1eCAqdGVhID0gdmlkZW9fZHJ2ZGF0YShmaWxlKTsKKworCWlmIChmLT5mcmVxdWVuY3kgPCBGUkVRX0xPIHx8IGYtPmZyZXF1ZW5jeSA+IEZSRVFfSEkpCisJCXJldHVybiAtRUlOVkFMOworCisJdGVhLT5mcmVxID0gZi0+ZnJlcXVlbmN5OworCisJc25kX3RlYTU3NXhfc2V0X2ZyZXEodGVhKTsKKworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlpZiAoYS0+aW5kZXggPiAxKQorCQlyZXR1cm4gLUVJTlZBTDsKKworCXN0cmNweShhLT5uYW1lLCAiUmFkaW8iKTsKKwlhLT5jYXBhYmlsaXR5ID0gVjRMMl9BVURDQVBfU1RFUkVPOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2F1ZGlvKHN0cnVjdCBmaWxlICpmaWxlLCB2b2lkICpwcml2LAorCQkJCQlzdHJ1Y3QgdjRsMl9hdWRpbyAqYSkKK3sKKwlpZiAoYS0+aW5kZXggIT0gMCkKKwkJcmV0dXJuIC1FSU5WQUw7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3F1ZXJ5Y3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfcXVlcnljdHJsICpxYykKK3sKKwlpbnQgaTsKKworCWZvciAoaSA9IDA7IGkgPCBBUlJBWV9TSVpFKHJhZGlvX3FjdHJsKTsgaSsrKSB7CisJCWlmIChxYy0+aWQgJiYgcWMtPmlkID09IHJhZGlvX3FjdHJsW2ldLmlkKSB7CisJCQltZW1jcHkocWMsICYocmFkaW9fcWN0cmxbaV0pLAorCQkJCQkJc2l6ZW9mKCpxYykpOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX2dfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlpZiAodGVhLT5vcHMtPm11dGUpIHsKKwkJCWN0cmwtPnZhbHVlID0gdGVhLT5tdXRlOworCQkJcmV0dXJuIDA7CisJCX0KKwl9CisJcmV0dXJuIC1FSU5WQUw7Cit9CisKK3N0YXRpYyBpbnQgdmlkaW9jX3NfY3RybChzdHJ1Y3QgZmlsZSAqZmlsZSwgdm9pZCAqcHJpdiwKKwkJCQkJc3RydWN0IHY0bDJfY29udHJvbCAqY3RybCkKK3sKKwlzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSA9IHZpZGVvX2RydmRhdGEoZmlsZSk7CisKKwlzd2l0Y2ggKGN0cmwtPmlkKSB7CisJY2FzZSBWNEwyX0NJRF9BVURJT19NVVRFOgorCQlpZiAodGVhLT5vcHMtPm11dGUpIHsKKwkJCXRlYS0+b3BzLT5tdXRlKHRlYSwgY3RybC0+dmFsdWUpOworCQkJdGVhLT5tdXRlID0gMTsKKwkJCXJldHVybiAwOworCQl9CisJfQorCXJldHVybiAtRUlOVkFMOworfQorCitzdGF0aWMgaW50IHZpZGlvY19nX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgKmkpCit7CisJKmkgPSAwOworCXJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZpZGlvY19zX2lucHV0KHN0cnVjdCBmaWxlICpmaWxwLCB2b2lkICpwcml2LCB1bnNpZ25lZCBpbnQgaSkKK3sKKwlpZiAoaSAhPSAwKQorCQlyZXR1cm4gLUVJTlZBTDsKKwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCBzbmRfdGVhNTc1eF9leGNsdXNpdmVfb3BlbihzdHJ1Y3QgZmlsZSAqZmlsZSkKQEAgLTE4OSw1MCArMjYwLDkxIEBACiAJcmV0dXJuIDA7CiB9CiAKK3N0YXRpYyBjb25zdCBzdHJ1Y3QgdjRsMl9maWxlX29wZXJhdGlvbnMgdGVhNTc1eF9mb3BzID0geworCS5vd25lcgkJPSBUSElTX01PRFVMRSwKKwkub3BlbiAgICAgICAgICAgPSBzbmRfdGVhNTc1eF9leGNsdXNpdmVfb3BlbiwKKwkucmVsZWFzZSAgICAgICAgPSBzbmRfdGVhNTc1eF9leGNsdXNpdmVfcmVsZWFzZSwKKwkuaW9jdGwJCT0gdmlkZW9faW9jdGwyLAorfTsKKworc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2lvY3RsX29wcyB0ZWE1NzV4X2lvY3RsX29wcyA9IHsKKwkudmlkaW9jX3F1ZXJ5Y2FwICAgID0gdmlkaW9jX3F1ZXJ5Y2FwLAorCS52aWRpb2NfZ190dW5lciAgICAgPSB2aWRpb2NfZ190dW5lciwKKwkudmlkaW9jX3NfdHVuZXIgICAgID0gdmlkaW9jX3NfdHVuZXIsCisJLnZpZGlvY19nX2F1ZGlvICAgICA9IHZpZGlvY19nX2F1ZGlvLAorCS52aWRpb2Nfc19hdWRpbyAgICAgPSB2aWRpb2Nfc19hdWRpbywKKwkudmlkaW9jX2dfaW5wdXQgICAgID0gdmlkaW9jX2dfaW5wdXQsCisJLnZpZGlvY19zX2lucHV0ICAgICA9IHZpZGlvY19zX2lucHV0LAorCS52aWRpb2NfZ19mcmVxdWVuY3kgPSB2aWRpb2NfZ19mcmVxdWVuY3ksCisJLnZpZGlvY19zX2ZyZXF1ZW5jeSA9IHZpZGlvY19zX2ZyZXF1ZW5jeSwKKwkudmlkaW9jX3F1ZXJ5Y3RybCAgID0gdmlkaW9jX3F1ZXJ5Y3RybCwKKwkudmlkaW9jX2dfY3RybCAgICAgID0gdmlkaW9jX2dfY3RybCwKKwkudmlkaW9jX3NfY3RybCAgICAgID0gdmlkaW9jX3NfY3RybCwKK307CisKK3N0YXRpYyBzdHJ1Y3QgdmlkZW9fZGV2aWNlIHRlYTU3NXhfcmFkaW8gPSB7CisJLm5hbWUgICAgICAgICAgID0gInRlYTU3NXgtdHVuZXIiLAorCS5mb3BzICAgICAgICAgICA9ICZ0ZWE1NzV4X2ZvcHMsCisJLmlvY3RsX29wcyAJPSAmdGVhNTc1eF9pb2N0bF9vcHMsCisJLnJlbGVhc2UJPSB2aWRlb19kZXZpY2VfcmVsZWFzZSwKK307CisKIC8qCiAgKiBpbml0aWFsaXplIGFsbCB0aGUgdGVhNTc1eCBjaGlwcwogICovCiB2b2lkIHNuZF90ZWE1NzV4X2luaXQoc3RydWN0IHNuZF90ZWE1NzV4ICp0ZWEpCiB7CisJaW50IHJldHZhbDsKIAl1bnNpZ25lZCBpbnQgdmFsOworCXN0cnVjdCB2aWRlb19kZXZpY2UgKnRlYTU3NXhfcmFkaW9faW5zdDsKIAogCXZhbCA9IHRlYS0+b3BzLT5yZWFkKHRlYSk7CiAJaWYgKHZhbCA9PSAweDFmZmZmZmYgfHwgdmFsID09IDApIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAiQ2Fubm90IGZpbmQgVEVBNTc1eCBjaGlwXG4iKTsKKwkJc25kX3ByaW50ayhLRVJOX0VSUgorCQkJICAgInRlYTU3NXgtdHVuZXI6IENhbm5vdCBmaW5kIFRFQTU3NXggY2hpcFxuIik7CiAJCXJldHVybjsKIAl9CiAKLQltZW1zZXQoJnRlYS0+dmQsIDAsIHNpemVvZih0ZWEtPnZkKSk7Ci0Jc3RyY3B5KHRlYS0+dmQubmFtZSwgdGVhLT50ZWE1NzU5ID8gIlRFQTU3NTkgcmFkaW8iIDogIlRFQTU3NTcgcmFkaW8iKTsKLQl0ZWEtPnZkLnJlbGVhc2UgPSBzbmRfdGVhNTc1eF9yZWxlYXNlOwotCXZpZGVvX3NldF9kcnZkYXRhKCZ0ZWEtPnZkLCB0ZWEpOwotCXRlYS0+dmQuZm9wcyA9ICZ0ZWEtPmZvcHM7CiAJdGVhLT5pbl91c2UgPSAwOwotCXRlYS0+Zm9wcy5vd25lciA9IHRlYS0+Y2FyZC0+bW9kdWxlOwotCXRlYS0+Zm9wcy5vcGVuID0gc25kX3RlYTU3NXhfZXhjbHVzaXZlX29wZW47Ci0JdGVhLT5mb3BzLnJlbGVhc2UgPSBzbmRfdGVhNTc1eF9leGNsdXNpdmVfcmVsZWFzZTsKLQl0ZWEtPmZvcHMuaW9jdGwgPSBzbmRfdGVhNTc1eF9pb2N0bDsKLQlpZiAodmlkZW9fcmVnaXN0ZXJfZGV2aWNlKCZ0ZWEtPnZkLCBWRkxfVFlQRV9SQURJTywgdGVhLT5kZXZfbnIgLSAxKSA8IDApIHsKLQkJc25kX3ByaW50ayhLRVJOX0VSUiAidW5hYmxlIHRvIHJlZ2lzdGVyIHRlYTU3NXggdHVuZXJcbiIpOwotCQlyZXR1cm47Ci0JfQotCXRlYS0+dmRfcmVnaXN0ZXJlZCA9IDE7Ci0KIAl0ZWEtPnZhbCA9IFRFQTU3NVhfQklUX0JBTkRfRk0gfCBURUE1NzVYX0JJVF9TRUFSQ0hfMTBfNDA7CiAJdGVhLT5mcmVxID0gOTA1MDAgKiAxNjsJCS8qIDkwLjVNaHogZGVmYXVsdCAqLwogCisJdGVhNTc1eF9yYWRpb19pbnN0ID0gdmlkZW9fZGV2aWNlX2FsbG9jKCk7CisJaWYgKHRlYTU3NXhfcmFkaW9faW5zdCA9PSBOVUxMKSB7CisJCXByaW50ayhLRVJOX0VSUiAidGVhNTc1eC10dW5lcjogbm90IGVub3VnaCBtZW1vcnlcbiIpOworCQlyZXR1cm47CisJfQorCisJbWVtY3B5KHRlYTU3NXhfcmFkaW9faW5zdCwgJnRlYTU3NXhfcmFkaW8sIHNpemVvZih0ZWE1NzV4X3JhZGlvKSk7CisKKwlzdHJjcHkodGVhNTc1eF9yYWRpby5uYW1lLCB0ZWEtPnRlYTU3NTkgPworCQkJCSAgICJURUE1NzU5IHJhZGlvIiA6ICJURUE1NzU3IHJhZGlvIik7CisKKwl2aWRlb19zZXRfZHJ2ZGF0YSh0ZWE1NzV4X3JhZGlvX2luc3QsIHRlYSk7CisKKwlyZXR2YWwgPSB2aWRlb19yZWdpc3Rlcl9kZXZpY2UodGVhNTc1eF9yYWRpb19pbnN0LAorCQkJCSAgICAgICBWRkxfVFlQRV9SQURJTywgcmFkaW9fbnIpOworCWlmIChyZXR2YWwpIHsKKwkJcHJpbnRrKEtFUk5fRVJSICJ0ZWE1NzV4LXR1bmVyOiBjYW4ndCByZWdpc3RlciB2aWRlbyBkZXZpY2UhXG4iKTsKKwkJa2ZyZWUodGVhNTc1eF9yYWRpb19pbnN0KTsKKwkJcmV0dXJuOworCX0KKwogCXNuZF90ZWE1NzV4X3NldF9mcmVxKHRlYSk7CiAKIAkvKiBtdXRlIG9uIGluaXQgKi8KLQlpZiAodGVhLT5vcHMtPm11dGUpCisJaWYgKHRlYS0+b3BzLT5tdXRlKSB7CiAJCXRlYS0+b3BzLT5tdXRlKHRlYSwgMSk7CisJCXRlYS0+bXV0ZSA9IDE7CisJfQorCXRlYS0+dmQgPSB0ZWE1NzV4X3JhZGlvX2luc3Q7CiB9CiAKIHZvaWQgc25kX3RlYTU3NXhfZXhpdChzdHJ1Y3Qgc25kX3RlYTU3NXggKnRlYSkKIHsKLQlpZiAodGVhLT52ZF9yZWdpc3RlcmVkKSB7Ci0JCXZpZGVvX3VucmVnaXN0ZXJfZGV2aWNlKCZ0ZWEtPnZkKTsKLQkJdGVhLT52ZF9yZWdpc3RlcmVkID0gMDsKKwlpZiAodGVhLT52ZCkgeworCQl2aWRlb191bnJlZ2lzdGVyX2RldmljZSh0ZWEtPnZkKTsKKwkJdGVhLT52ZCA9IE5VTEw7CiAJfQogfQogCmRpZmYgLS1naXQgYS9zb3VuZC9wY2kvS2NvbmZpZyBiL3NvdW5kL3BjaS9LY29uZmlnCmluZGV4IGNhMjVlNjEuLjkzNDIyZTMgMTAwNjQ0Ci0tLSBhL3NvdW5kL3BjaS9LY29uZmlnCisrKyBiL3NvdW5kL3BjaS9LY29uZmlnCkBAIC01MDcsNyArNTA3LDcgQEAKIGNvbmZpZyBTTkRfRk04MDFfVEVBNTc1WF9CT09MCiAJYm9vbCAiRm9ydGVNZWRpYSBGTTgwMSArIFRFQTU3NTcgdHVuZXIiCiAJZGVwZW5kcyBvbiBTTkRfRk04MDEKLQlkZXBlbmRzIG9uIFZJREVPX1Y0TDE9eSB8fCBWSURFT19WNEwxPVNORF9GTTgwMQorCWRlcGVuZHMgb24gVklERU9fVjRMMj15IHx8IFZJREVPX1Y0TDI9U05EX0ZNODAxCiAJaGVscAogCSAgU2F5IFkgaGVyZSB0byBpbmNsdWRlIHN1cHBvcnQgZm9yIHNvdW5kY2FyZHMgYmFzZWQgb24gdGhlIEZvcnRlTWVkaWEKIAkgIEZNODAxIGNoaXAgd2l0aCBhIFRFQTU3NTcgdHVuZXIgY29ubmVjdGVkIHRvIEdQSU8xLTMgcGlucyAoTWVkaWEK